[За възпроизвеждане на музика] АНДИ Пенг: Това е CS50, и добре дошли в две седмици на раздел. Това е всъщност докато седмица двама от нашите class-- всъщност, първата седмица сме имали секция. Покажи на ръцете, колко от всички вас дойде в супер точка миналата седмица? OK, това е ОК. Това е добре. Колко от вас наблюдаваше супер точка миналата седмица? ДОБРЕ. И вие, момчета направиха глоба относно проблем зададете една? Така че аз отивам да го взема, че имаме куп наистина интелигентни деца в този клас и нещата ще се оправи. ДОБРЕ. Така first-- Първо, ние просто ще накратко разясни програмата за днес. Ще говорим за курса логистика. Много от вас вероятно имате въпроси относно как нещата се движат в този курс. Ние ще им отговоря. Отиваме да накратко разясни линии в случай всеки от вас, момчета пропусна супер раздел. Ще говорим за ASCII картографиране. Ще говорим за масиви, функции, аргументи от командния ред. И накрая, това, което вие вероятно всички Наистина искам да бъда тук, за да научите повече за, е вашият pset2. Ще имаме някои хубави трикове и съвети за това как да направите това. ДОБРЕ. Също така, от друга страна, ние имаме много бонбони тук. Всеки, който обича бонбони, просто елате тук. Хвани някои. Имам куп. Имаме тона в офиса. Аз наистина не искам да яде бонбони цял ден. Вие, момчета, трябва да ядат всички бонбони, защото аз го доведох тук за вас, момчета. Само ядат бонбони. Ще има бонбони всеки раздел. Така че на първо място, кой съм аз? Моето име е Анди Пън. Аз съм главата на TA CS50 тук в Йейл. И в допълнение към това, аз също ще be-- ако някой би like-- си работи приятелче, рамото си да плаче на. Ако в нощта преди, поради вашата pset му, вие нямате представа какво се случва, удари ме. Ние ще съчувствате заедно, и така нататък. Просто знам, че аз съм тук, като ресурсите за вас, като на предна линия в помагайки ви момчета разбера как за решаване на проблемите в CS50 и извън него. Моят имейл е andi.peng@yale.edu. Също така аз ще изпрати индивидуален приятел с моя телефонен номер в него така че не всички на интернет може да видите моя телефонен номер. Чувствайте се свободни да ми се обади по всяко време. Сериозно, телефона ми е Обикновено, прикрепен към ръката ми. Аз не може да отговори В рамките на няколко минути. Аз не може да отговори в рамките на няколко часа. Но мога да ви гарантирам, ако вие ми електронна поща, ако ми се обади, текстови мен, аз ще отговори в рамките на 24 часа. Много пъти, аз ще реагира преди това, защото аз разбирам че всеки има някои проблеми, и искате вашите отговори трябва да се отговори много бързо. Въпреки това, ако се обадите ми 30 минути преди това парче, което се дължи четвъртък night-- бъде като Andi, помогни ми, Не съм started-- I може да даде ви, че рамото да поплаче. Но може би е време да се мисли за как да не се прави, че следващия път. ДОБРЕ. Ами сега. Как мога да се върна? Ето. Така че в този курс, имаме тон на подкрепата за всеки. В допълнение към просто секции тук, които сте всяка седмица се да прекарат 90 прекрасни минути с мен, ние също имаме офис часа. Колко от вас, момчета, вече имаме бил в работно време за помощ? Страхотен. Това е наистина добре да се види, защото ние има персонал от над 45 СНС и КО обучени за това, разбира се, че сте тук за да ти помогне с вашите момчета psets. Mondays те са държани в TEAL класна стая в 17 Hill House тук в Йейл. Вторник и четвъртък, те са държани в общи блага. 8:00-11:00 почти всеки делничен ден. Влизай, излезе. Всеки проблем, не problem-- Просто дойде в, и след това ще ви помогне с това. На второ място, в допълнение към офис часа и раздели, ние също имат шорти. Има ли някой някога виждал няколко от най- шорти или реални тестове в клиповете на интернет страницата? ДОБРЕ. Така че те са наистина, наистина полезно. Нашата прекрасна производство Harvard обединят ей там на това училище на север, те са заснети и произведени тези невероятни репетиция видеоклипове. Те ще ви отведе стъпка по стъпка през как да отида за решаване на проблема. Много пъти, ако сте объркани за една проста концепция, единствено число концепция, погледнете, защото ние най-вероятно има на кратко върху него някъде на нашия уебсайт. И това е обикновено голям ресурс да се търси, когато сте първи загубени за това как да се справи с проблема. Трето, ние също имаме study50 и reference50. Така учат 50 относно: уебсайт е просто линк. Това е, мисля, study.cs50.net или нещо такова. Просто го Google. Ние имаме много пързалки подготвени. Ние имаме много къси панталони и walkthroughs-- неща всички компилирани много приятен и чист за вас, момчета всички да преглеждате, виждам никакви понятия че сте объркани за. Тя вероятно ще бъде покрита ей там в study50. Reference50-- подобно. Ние имаме много различни бележки лесно достъпни за ваше разположение. И на последно място, ние имаме това, което е наречено CS50 Обсъдете, форум, в който, ако в нощта преди което правите вашите проблеми, да речем, имате въпрос. Влезте, за да CS50 Обсъждане. Публикувайте въпроса. И тогава един от hundreds-- може би, thousands-- на връстници като този клас онлайн ще влезете. И може би някой може да получите отговор на въпроса си, преди TA може. Това е по същество просто онлайн форум, че всички ние можем да използвате, за да обсъдят проблемите ни. Това е яко. ДОБРЕ. Така че проблем комплекти. Ние сме на път точно в дебелина на проблем зададете две. Много от нас вече имат бореше през проблем зададете една. Ние вече знаем, че може би в очакване за последната нощ, за да направите вашия pset не е най-умното нещо, което да се направи в CS50. Съвети и съвети по същество за успех се чете цялата спец. Колко от вас вече имат Прочети спец за pset 2? ДОБРЕ. Това е солидна сума. Знам, че вие ​​вероятно са признали от сега, спецификациите са наистина дълги. Те са много, много отдавна. Това наистина е много трудно да се чете всеки ред на които внимателно дума по дума. Вие искате просто обезмаслено до мястото, където той ви казва да се направи нещо. Мога да ви гарантирам, не прави това. Ако направите това, вие вероятно сте ще пропусне някъде когато тя ви казва как да започнете проблем или тя ти казва какво да име вашия проблем или тя ви казва, това е може би най-добрият начин да започнете да правите вашия проблем. И след това ще бъдат загубени. Когато се опитате да четете спец по средата, много от важните information-- с това, че не сте ще бъде в състояние наистина достъп. Така че прочетете целия спец. Опитайте се да прочетете целия спец преди да дойде в раздел, защото тогава, когато ние говорим за pset, всички ние можем да имаме представа от това, което се случва. Второ, това е понятие че аз ще искал да справки много по време на семестъра, разбира се. Но по същество, се срещат с нас по средата, нали? Me, като TA и Джейсън като разбира се мениджър и Scaz като професор и Давид като професор и всички другите прекрасни TAS в този курс, сътрудници в тази course-- ние ще направим всичко възможно, за да се гарантира, че Вие сте избрали нагоре, за да успее в този курс. Ще проведем раздел. Ние ще проведе работно време. Ние ще отговорим на вашия телефон повиквания, отговорят на вашите електронни писма, направим всичко възможно, за да се че вашите въпроси намират отговор. Въпреки това, да ни помогне също. Запознайте се с нас по средата. Ако дойдете в работно време че не е отишъл в раздел, не като видял лекциите, като няма идея какво се случва, да бъде като, да ми помогне. Отивам да бъде като, добре, съжалявам. Може би е време да отпускат заеми че рамото да поплаче, защото аз не съм сигурен какво мога да направя, за да ви помогне ако не се опита да помогне поне себе си малко в началото. Запознайте се с нас по средата. Вие знаете, че заповядайте готова да отговори и да получите готови да се включат в материала. Това прави нещата толкова много лесно за всеки, който участва. Да, това е доста го много. Окачествяването. Така на учебната програма, това е доста по-задълбочено по отношение на това как ние клас. Но по същество, разбивката Това е 50% от вашия клас ще бъдат psets, които е прекрасно, защото това е където можете да започнете да харчите по-голямата мнозинство от времето си курс по. Викторини 40%, и си окончателния проект ще бъде 10%. Ще има два викторини целия По време на семестъра. Мисля, че времената и датите са Също така в списъка на учебната програма. Начинът, по който ние ще се класификация на вашите psets е, че имаме по същество четири ценности, които придават на всяка степен. Имаме стойност на обхвата, коректност, дизайн и стил. Така че, както виждате, това е вид на нашата формула за изчисляване psets. Три ние даваме най-много тежест на коректност, защото очевидно треньора си трябва да се тества за случаите, че искаме да се тества за. Вие, момчета, всички имаме check50 на ваше разположение. Това е много полезна функция че вие, момчета, всички те могат да качите вашия код на нашите сървъри, където ние ще го проверите за вас. И тези, които сте виждали намръщено лица, усмихнати лица. Те са много, много полезно. Моля, не бъде Студент, който искал си опит да hardcode във всички отговори на тях. Аз съм категорично виждал pset където някой видя всички стойности на check50 и те просто трудно кодирани in-- ако този номер, отпечатате този номер. Ако този номер, разпечатате този номер. Не правете това. Въпреки че технически check50 е правилна, вашия начин за решаване на проблем не е правилна. Така че просто използвайте check50 пестеливо. Но също така се уверете, че сте разберат как се работи, функционирането на програмата в допълнение към check50, защото не можем да тестваме всеки Възможно случай на check50. Ние ще тествате някои от тях. Design е по същество, как добре проектирана е кода си? Ако сте копиране поставяне множествена реда код много, много пъти. Може би не е нужно доста най-добър дизайн в кода си. Може би е време да добавя, че цикъл. По същество, тук това е просто всички около опитва да направи своя код, опитвайки се да напишете кода най-ефективно колкото е възможно, така че вашата програма работи възможно най-бързо. На последно място, ние имаме стил. Така стил е своеобразен произволно, субективно понятие. Знам, че има официално стил 50 ръководство за CS50, когато тя ви казва, о, вие, трябва да има пространство тук. Вие би трябвало вид формат кода си по този начин. Вие трябва да назовем нещата по този начин. Не ми пука, само по себе си, как решите да оформите своя код, точно толкова дълго, колкото да останеш последователна. Например, ако искате да оставите интервал след вашата четирицифрена преди четири вашия цикъл, Просто прави това всеки път. Не един вид го правя. Не го прави друг път. Ако искате да запазите къдрава скоби пространството по определен начин, просто винаги да го направя по този начин. Не един вид го правя някъде тук и някъде не съществува. Когато ние сме класификация, това е наистина трудно ако нямам идея как можете да започнете форматиране на кода, нещата са щури и не на място. Ако просто я държи последователно, това е много по-лесно за мен, както по-голям да бъде в състояние да прочете кода си. Това е много по-лесно за вас като студент да бъде в състояние да погледнете през вашия код и да видим какво не е наред с тя наклонена черта, защо има проблеми. Style е един от най-лесните неща вие може да направите, за да получите пълно резултати. По същество, ако просто се грижи, ако Вие плащате за пет минути на вниманието да си код всяка седмица, вие трябва да получавате пълния брой точки за стил. На последно място, ние имаме това, което се нарича мултипликаторът на обхват. Scope-- Знам, че е голям Думата, особено в този клас. Но обхват, всичко, което средство е, че се опитвате на psets до най-доброто от способността ви. Ако включите в три от вашите четири проблеми и дори не се опитвайте на последната една, вие вероятно сте ще загубят някои точки по обхват. Дори ако просто започнете с проблема, направете всичко възможно да минеш през нея. Дори ако това не работи, включете го в, защото това показва и доказва, за нас, че вие ​​се опитвате, че сте се опитали проблема зададете до най-доброто от способността ви. И тогава можем да ви дадем пълния брой точки за обхват. Обхват също е много важно, за когато сме говорим за най-ниския спад pset полувремето. Така в течение на семестър, вие имате девет psets. И ние действително ще бъдат отпадане най-малко точки от тези девет, но само ако имате пълния обхват точки. Така че, ако се превърне в един непълен pset, за съжаление, не можем да се откажа, че един, защото си обхват точки не са завършени. Така че, дори ако имате ужасно седмицата къде умира и сте болни или кучето си почине, вашата котка умира, и сте претоварени с домашните, просто опит за pset. Направи го, за да най-доброто от способността ви. Ако тя не работи, това няма значение. Просто го включете инча Поне можем да дадем ви припомня за усилията. А за усилия в този клас. Поне най-ниската оценка за спад усилия. Така че, да. Това е доста го много. Дали някой има въпроси, така далеч от това как ние клас в класа? Или някой от тези? Всеки от тях, така far-- секции, работно време? Готино. ДОБРЕ. Така че това е тема, която не една наистина обича да говори. Аз наистина не искам да говоря за това. Вие, момчета, всъщност не искат да ме чуете да говоря за това. Но за съжаление, всички ние Трябва да говорим за това. Давид прекара 20 минути на лекция говорим за него. И това е предмет на академична честност. Така че всички ние тук вероятно са написани есе по някое време през нашия Yale кариера. Ние вероятно сме придобили беседа, където ние сме е казал да не изплагиатствал нашето есе, защото тази работа не е наша. В компютърните науки, ние имаме от същия вид на концепцията. Цялата работа, която изпращате, всички код, който ти пиша трябва да е код, който сте написали. Не трябва ли да е код, който сте копирано от някъде другаде. Не трябва ли да е код, който сте Гугъл и се пльосна в и вие наистина не знам дали работи. Можете вид имат чувство за това, което прави, но не съвсем. Когато се съмнявате, по същество, това е просто да бъде разумен. На нашата учебна програма, ние имаме цял списък от неща ние виждаме като разумен срещу която е неоправдана. Например, разумна е вие ​​и вашият приятел обсъждаме какво най-добрият начин да отида около логично решаването на проблема. Това е доста разумно. Това, което не би било разумно е, ако момчета дойдоха заедно, напечатани същия код, и се обърна в същия код. Това не е разумно. Същото нещо, вид на есе. Ако искате да обсъдите с приятеля си, хей, това е, което искам да пиша. Това са стъпките, които искам да предприеме, за да пиша за това, страхотно. Това е чудесно. Моля, сътрудничат помежду си. Ако вие, момчета започват писането на едно и също нещо, превърне в една и съща есето, което е по-малко OK. Така че, когато се съмнявате, просто не го правят. Ето, ние в CS50, имаме скриптове че тече, за да автоматизирате да тестват не само в правилността на своя код, но също така и уникалността на кода си. Така че, моля, не ни поставя в позиция, се налага да се отнесе случая до EXCOMM. Моля само за всички, нека просто направи това прекрасно изживяване. Всеки се учи по-добре, всички ние сме по-щастливи, и всички ние сме създадени, за да успее в този курс. Нещо, което е много Уникалното в този клас че аз мисля, че всеки трябва наистина обърнат внимание на е, че имаме което се нарича съжалението Клауза в нашата учебна програма. Така че по същество, в рамките на 72 часа, ако смятате, че сте направили нещо не сте много сигурен беше уместно, моля, елате при нас. Обещаваме ви, че в рамките на 72 часа ние ще се справят сами случая без да се отнасят до по-висока орган в администрацията. Така че, ако дойде при мен и казват, Andi, хей, аз съм наистина съжалявам, но аз мисля, че има няколко линии в моята Код снощи, че съм нещо като Гугъл, слезе от Stack Overflow, копиране и замазка, и аз съм много, много съжалявам за това, да ме уведомите. Моля, не просто го оставете да тлеят и просто се надявам, че мога да го хване. Ние ще го хване. Просто ела с мен. Нека да знаят, в рамките на 72 часа. Ще разбера разтвор. А ние обещаваме, че няма да се отнасят до университетските власти по същество. Така че това е в най-добрия си интерес просто да бъда честен с всички, участващи в процеса. ДОБРЕ. ДОБРЕ. Така че сега, бързо, преди Аз се премине, има ли някой имате въпроси относно логистиката за това как курсове отиваме да тичам, колко секции ще да тече, всеки от това? ДОБРЕ. Да. АУДИТОРИЯ: [недоловим]? АНДИ Пенг: Да. Така quizzes-- колко от вас са в раздела понеделник / сряда? Колко от вас са в вторника / четвъртък? ОК, така че това е солидна сплит тук. Така че начинът, по който ще свършим то в Йейл е, че ние ще имаме две отделни quizzes-- един за всяка section-- че ще бъде взето по време на тренировката. Мисля, че е октомври, в края на октомври нещо такова, като една седмица на теста. Да, така че просто дойде в клас. На този понеделник или сряда, ще вземе теста. На този вторник или четвъртък, ще вземе различно викторина. Но същия материал ще бъдат обхванати. Да. Добър въпрос. Да. АУДИТОРИЯ: Когато правим отидете да проверите нашите класове? АНДИ Пенг: Да. Така че аз ще се изпраща на Е-мейл каквото и всяка седмица когато викторини са graded-- или, Съжалявам, когато psets се класират. Psets обикновено са обърнати в до обяд или петък. Така че аз обещавам, че ще го направя се опитват да ги свържем с вас от обяд на следващия петък. Всеки път, когато един клас pset, ще изпратя от уведомление по книгата на клас който ви казва резултата си може да се гледа онлайн. Така правото на тази седмица, след като завърши класификация psets миналата седмица, вие ще получите имейл уведомление ви казвам, Ей това е мястото, където отидете да видите вашите класове. И можете да видите всеки разбивка на вашите класове. Можете да видите коментари. О, бързото нещо също. В частта за коментар на великите книга е мястото, където най-вероятно ще прекарват по-голямата част от времето си класиране. Така че едно нещо, което е Наистина е важно, когато вие разглеждате Вашите класове на вашите psets е не само начало на физическата оценка но също така и като време, за да наистина чете моите коментари. Често, която ви дава обратна връзка за това как можете да започнете решаването на проблема. Ако трябва да направите, нещо малко по-добре, конструктивна критика обикновено е най-добре дадена в тези коментари секция. Така че, моля, моля, аз ще съм да прекарват време в писане на коментари. Моля, бих наистина го оценявам ако вие ще четат тези коментари. ДОБРЕ. Готино. Всичко е наред. Така че ние ще започнем да говорим и просто да разглеждате бързо част от материала от нула, за да сме си седмица на дясната страница за започващи проблеми тази седмица. Така че примката, докато е един от трите вида примки обсъждахме по-рано в този клас. A линия, докато по същество както е писано в синтаксиса където, докато дадено условие, направите това на няколко пъти, нали? Мислете за това по този графичен тук. Ти ще започне в една определен момент в кода си. Ти ще влезе състоянието на линия if-- Не know-- х е по-малко от една. Ако това е вярно, ти започваш да изпълни тялото на цикъла. И ти започваш да продължаваш да правиш че отново, отново, отново, отново и over-- което е защо това е loop--, докато състоянието се превръща невярно. Така че по този начин, а по време на цикъл е един от най-прости начини да напише някаква условие, че трябва да се повтаря отново и отново и отново. Просто бъдете внимателни, когато пишете някаква линия че имате състояние на излизане, както и както и актуализация на каквото и да е, така че вашата линия не прави точно тичам отново и безкрайно. Във всеки случай, ти започваш да искате да се уверите че сте промяна на някои от аспектите на кода си или в края на цикъла само за да се уверите, че имате начин на напредък към условието който искате да се срещне до края. Това прави ли смисъл на всички? Ние просто не искам да бъда уловени в тази спирала, където отидем отново и отново, и няма начин да се прекъсне цикъла. И всеки цикъл същество има начин да се направи това. ДОБРЕ. На второ място, много от вас във вашите Марио psets Вероятно трябваше да наеме този тип линия. Тя се нарича правя, докато цикъл. На първо място, може ли някой да ми каже каква е разликата между задачи линия, докато и линия, докато е? Да. АУДИТОРИЯ: The правя, докато линия спринта на първо [недоловим]. АНДИ Пенг: Да, точно така. Така че не се прави по време на цикъл винаги прави каквото е в рамките на Do, вътре в скобите там и прави това условие преди да се консултирате за the-- съжалявам, прави този код, преди да проверка на състоянието. И това е от особено значение за нас тук, в този клас, защото повечето пъти ние ще искаме да подтикне потребителя за някакъв вход. И след това, в зависимост от на входа те ни дават, тогава можем да се оцени, о, направете ние трябва да ги подкани отново? Така че в Mario, ако потребителят ви е дал отрицателен ръст, например, започваш да се бърза първа и да направите всичко е вътре. Тогава ти започваш да се провери време. Вие знаете, е отрицателен 1, е, че положително число? Ако не е, аз отивам да отидете обратно и повторете правим и повторението и повторете и повторете, докато те най-накрая да ви даде номер, който ви харесва, че всички ние можем да използваме в нашата код. Това е доста важно за същество всяко въвеждане на потребителя. Мога да ви гарантирам, всеки време в pset където ние ви молим да вход всякакъв вид на код, ние сме Вероятно ще ви дам основен тест, в който сме ще ти дам нещо лошо, че е ще се опита да разбие кода си. Ако се опитаме да ви попитам за въвеждане на число, ние може само да ви дам низ и да видим как ще се справиш с това. Ако Ви молим да наемат една епоха, ние може да ви даде отрицателно число да видим как ще се справиш с това. Просто се уверете, вие се тестват за случаи, в които те не получават най-доброто вход, нека просто кажем. И да не се прави, докато линия е често най-доброто начин да проектирате свой код, така че тя отговаря на този обхват. ДОБРЕ. ДОБРЕ. Така че това е може би най- сложен цикъл от три че след като видяхме досега. И изглежда много страшно в началото. Но аз ви гарантирам, след като вас, момчета получите цаката как да се използва за контур, това е един от най-полезните неща, повечето полезни инструменти в арсенала си за постигане на напредък в този клас. Така например, в Scratch, имахме тази много проста блок че току-що каза повторете този определен Фрази на определен брой пъти. Между другото, SAJ-- това е Scaz Andi Джейсън. Ние често се регистрирате в нашия имейли Saj. Ако кажем, Saj, не се бърка. Това е просто ни. Така че в Scratch, ние бяхме в състояние да имат блок, който каза, повторете Обичам Saj! 10 пъти. Много просто. Логиката зад това е много, много просто, нали? Искам първо да мине през първите време и да видим, че за втори път и да видим, че трети път, т.н. и така нататък, докато не достигнете до 10. И начина, по който ще представлява, че в код е само чрез един прост за контур. Така че за, ти започваш да се декларират променлива си тук, в този случай, с инт. Отиваме да го наречете аз. Отиваме да го инициализира до 0. И издание спиране е щеше да бъде и е по-малко от 10. И актуализацията ще бъде аз ++. И в рамките на цикъла, то се случва да се изпълни, докато в крайна сметка тя удари края на condition-- в които случай, че ще ходи да се прекъсне цикъла. Не трябва да има неща, които можете момчета са всички видове виждали преди и трябваше да направя за проблема си зададете един. Дали някой има някакви въпроси по отношение на електрически вериги в момента? ДОБРЕ. Страхотен. ДОБРЕ. Така че за тези от вас, които имат прочетете pset спец за тази седмица знаете, че ние ще трябва да наеме нещо, наречено ASCII и ASCII таблица. Така Давид в лекция отиде за кратко как компютрите essentially-- всичко е кодиран в компютър двоичен, в нули и единици. И начинът, по който компютрите са в състояние за съхраняване на различни стойности, в допълнение да нули и единици са чрез картографиране тези числа да представляват други цифри или по същество други знаци. Така че в този случай, е ASCII table-- всички го прави е картата знаци или символи, към номера. Така че изходния код файл в Вашата computer-- го вижда, хей, куп нули и единици, нули и единици, нули и единици. Това е, което се съхранява в действителната памет на вашия компютър. Но когато ние, хората искат да комуникира с компютъра, ние want-- кажем, например, ако искам на главни букви A, Отивам да се наложи някакъв начин каже на компютъра, о, когато напишете главна буква A, искам да кажа, това представяне в двоичен. И така начина, по който правим, че е хвърлил произволно нещо, наречено таблица ASCII, където ние, като хора, като програмисти, преди известно време, ние произволно реши, че ние щяха да зададете тези номера стойности на тези герои. Така че вие ​​може да Google тази онлайн. Мисля, че има линк към него в pset-- просто маса на ASCII карта, ASCII таблица. Тя просто се превежда двоичен номера в герои. И това ще бъде много полезно за вашия проблем набор всеки път, когато искате да изчисли нещо или ако искате да покажете определена знаци или числа или манипулират определени символи. Това ще бъде много важно, че всички знаете как да се движите таблица ASCII. Така например, главни А е представен чрез номер 65. И само с малки букви A е представена от 97. Така че е важно да се знае, че Разликата между двете стойности е 32. Много пъти, ако трябва да се превърне в гол от една до друга, разликата е 32. И не се притеснявайте, ако сте натура от объркан от това на първо време. Ние ще разясни как бихме наемат това в действителния код. ДОБРЕ. Така че за тези от вас, с лаптопи място, Чувствайте се свободни да спра таблица ASCII, тъй като те вероятно ще изискват от вас, момчета до референтни това, което героите са. ДОБРЕ. Така че, знаейки, че някои знаци карта до определени номера, ако аз трябваше да тичам само първата линия, която code-- на ФОРМАТ а, малки букви а, минус главни A. Има ли някой има предположение за това какво би било отпечатване на екрана в момента? Така че на първо място, какво прави с малки букви а представляват? Какъв номер е, че кодирана в таблицата на ASCII. Съжаляваме? АУДИТОРИЯ: 97? АНДИ Пенг: 97, страхотно. И това, което е главна A? АУДИТОРИЯ: 65. АНДИ Пенг: Така че това, което е 97 минус 65? АУДИТОРИЯ: 32. АНДИ Пенг: OK. И така, какво мислите вие ​​ще да се случи, когато бях вход, който ред код в моя компютър? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Съжаляваме, говори. Няма проблем. Това е много сигурно среда, минус камерата. Ние всички ще to-- без притеснения. Просто всички ние ще се преструваме, като това е просто ни охлаждане в тази стая. Няма проблем. Без съмнение е твърде глупаво. Без отговор е глупав отговор. Аз съм може би щеше да се правят грешки в хода на моето учение. Сериозно, момчета, просто го избъбрям. Бъдете уверени в себе си, знаеш ли? И така, какво беше това? Кой каза, че миналата отговор? ДОБРЕ. Викайте, че хубаво и ясно. АУДИТОРИЯ: 32? АНДИ Пенг: 32. OK, нека да тече този код и да видим дали това е, което се случва. ДОБРЕ. Така че, както вие можете вид виж, типичната нотация съм създаден тук за това как ние ще наеме каквато и да е програма, в нашия компютър. Ние имаме нашата основна функция в рамките на нашата основна функция. Аз съм просто ще копирате и поставете този ред код. Също така бъдете внимателни, когато момчета копирате и поставите кода. Понякога някои оператори не поставите над правилно. В този случай, минуса знак е всъщност пробив. И така компютърът не го вземете. Така че аз трябваше да се върна и физически пренаписва това. Просто бъдете внимателни, когато вие, момчета, които правят това. ДОБРЕ. Отиваме да стартирате тази тук. Така че ние ще сд в нашата section2. Обадих се на тази програма asciimath. Така че не забравяйте, когато ще свършим някоя програма, ние искаме първо да я компилирате от него минава през нашата марка. И тогава ние искаме действително да тече програмата чрез правене дот-наклонена черта. Така че ние ще ./asciimath. Точно така, там да отидем. И ние виждаме 32. Добре направено. Вие заслужавате бонбон. Candy за вас. Извинете. Всичко е наред. ДОБРЕ. Така че можем да се върнем към нашия пример тук. Ааа, не. Ааа. ДОБРЕ. Аз съм просто ще я държи по този начин. ДОБРЕ. ДОБРЕ. Така че, както вие може да видите, ние можем да направим много много интересни неща, много много готини неща, много много сложни неща, включващи ASCII символи и цифри. След като стигнете до линията пет, това е много, за да следват заедно. Ние няма да отида чрез секцията. Чувствайте се свободни да, ако можете, той разсъждава върху хартия Първият за това какво трябва да се случи, когато ти вход, като низ от ценности. Така например, в които последната линия, имаме z-- което представлява определен number-- A-- който също представлява някои number-- плюс 1 modulos 26 плюс малки букви а. Ако вие продължавайте да четете чрез тях, вие може да види модела излезе в как се манипулира кода. Аз силно, силно препоръчваме След раздел всички вас момчета отиват напред и вход тези, всичко в компютъра си и да видим какъв вид числа излизат и разискваше чрез защо са тези, случва, защото за вашите psets тя ще бъде много важна за да разбереш защо някои неща се случват. Всички тези слайдове ще бъде на линия. Така че не се притеснява за опитва да физически копирайте бележки. Всичко е на линия. Това самата секция ще бъде на линия. През целия си изходния код, който Бягам ще бъде на линия. Да. Знаете ли, все още имам един въпрос? АУДИТОРИЯ: Какво е modulos? АНДИ Пенг: OK. Така че по модул е ​​оператор, който ще се е доста важно да се pset вашите момчета'S тук. Така че начинът, по който операторите в C и в програмирането работа е, че имате това, което се нарича символ разделение и символът модул, което е точно като знака за процент. Така че в C, когато правиш едно цяло число разделена на цяло число с наклонена черта, C е с тенденция да искате да изрежете изключите всички десетични точки, защото цяло число иска да се превърнат в едно цяло число. Това няма да искам да бъда двойно с куп десетични дроби всичко след него. Така че, ако го направя 3, разделена на две, то се случва За да изтреби 0.5 и просто да ви дам един. Така че това е нещо, което да бъде много внимателни, когато сте на правиш някаква математика в програмирането, е, че числата, които ще получат не може да бъде числата че си мислиш, поради което закръгляване във вашия Последният pset е толкова важно. Modulo дава остатъка. Така например, ако го направя 3 модул 2-- така 3% знак 2-- тя ще ви даде остатъка от това. Така 3, разделена на 2 е 1.5. Това е един остатък от 1. Тя ще ви даде 1, което е остатъка от това. Така че, когато вие се движат чрез таблицата на ASCII, модул ще свърши като нещо, което е много важно, и ние ще обсъдим по-късно. ДОБРЕ. Така че нещо, което е доста, доста нова и доста уникален че сме обсъдени тази седмица е концепцията на това, което е масив. Така масив е първият тип структура на данните че ние ще срещнете в този клас. Всички данни структура се е някаква произволна, буквално неща като структура че ние като програмисти са създали, че ние сме поставени в нашия код, който може да съдържа и други части от код. Така че в този смисъл, една array-- мисля за него като файл кабинет, където ако отворите различно рафтове на вашия шкаф, можете да получите достъп до различни неща. В памет, масив е просто правиш едно и също нещо на компютъра си. Можете да имате различна blocks-- ние ги наричат ​​indices-- на масив. Това е точно като един блок, рафт на паметта че сме създали в рамките на вашия компютър, който можете да въведете някои неща в различни пространства. Така че с масив, вие Винаги трябва да specify-- трябва да посочите обявяване на масив в следния формат. Ще първа зададени типа данни че искате да създадете на масива. Ако искам масив от цели числа, Аз ще поставя инт точно там. Ако искам масив от низове, Отивам да се сложи струни там, Името на вашия масив, и след това започваш да има квадратни скоби. А вътре квадратните скоби, вие сте Ще трябва размера на масив. Нещо, което е наистина важно да имайте предвид, когато създавате масиви е че след като създадете масив, този размер не може да се промени. Така че, ако знаете, че в момента имате масив от размер 10, вие знаете, че аз отивам да има 10 клетки в рамките на 10 или индекси в рамките на този масив, и никога не се случва да разширят или намалят без значение какво, и че има Понастоящем само 10 блока на космоса разпределени в паметта си, че може да се съхранява до 10 неща, на каквото и да сте поставени. Така че по този начин, масив тип данни, структурата на данните, които е масив е много различен от някои други, ние ще се покриваща по-късно в този курс. Да. Например, ако искате да създаде масив с размер 3, че съдържащи променливи на integer-- О, съжалявам, на temperature-- и температура на Разбира се, е цяло число. Така че ние ще създадем инт, което е най- тип данни за това, което искате да съхраните. Отиваме да наричаме тази температури за по-голяма номенклатура на именуване нещо, което всички ние разбираме. И ние ще трябва квадратни скоби. И ние искаме три числа. Така че ние ще се сложи три вътре в него. Нещо, което е наистина важно да се има предвид е, че масиви са нула индексирани. Всичко това означава, че е, че започва с индекса на 0, и ти тичам нагоре през размер на масива минус 1. Така например тук, ние имаме масив от размер 3. Това ще бъде в състояние да проведе три стойности. Но цифрите themselves-- че номер, масив, този индекс, масива, са от 0 до 2. Така че, момчета, да са много, много внимателни, когато , което става чрез вашите проблеми, установени и създаване на каквато и да е масив, защото много от времената това е наистина, наистина лесно да се забрави това. Аз всъщност не е нужно на индекса на 3, че аз в момента просто има индексът на 2. И ако се опитате да достъп до третия индекса, то се случва да бъде това, което е нарича нулев терминатор. Това няма да всъщност съществува в масива. И компютърът е няма да хареса това. Така че бъдете внимателни, когато предстои да посетите нещата просто за да се гарантира, че се сетите които масиви са нулеви индексира. ДОБРЕ. Така че първият пример е просто един от начините за създаване на масив. Вторият пример имам по-долу е само отделен начин за създаване на това, което е същото данните структура, която току-що въведен. Така че, вместо физически работи чрез и въвеждане на температура от 0 се равнява на каквото и да, температура 1 се равнява на каквито и да е, температурни 2 равни каквото и да, бих могъл всъщност просто директно всичко създаде в един ред в температурни квадратни скоби е равен. И предизвестие в този случай, не е нужно да уточни колко голям си масив е, защото компютърът ще проверете и ще видите, че има три елемента в тези фигурни скоби. И то се случва да знаете, OK, Имам нужда от масив с размер 3. Ти няма да се наложи да вход това по следния начин. И също така, да, по този начин. Дали някой има въпроси по отношение на това как можем да масиви или как работи структурата на масив? Да. АУДИТОРИЯ: [недоловим]? АНДИ Пенг: Да, точно така. Така че, ако ви се налага да декларира и инициализира масив следния метод, която е вторият начин, можете просто да оставите тези. И компютъра автоматично знае, че трябва да брои колко много елементи са в тези фигурни скоби, Разделени със запетаи. Така че тук им е 65, 87, 30. Така компютърът знае, о, Има три числа. Знам, че да създадете име масив температура с три елемента в него. Добър въпрос. Да. АУДИТОРИЯ: Не е ли възможно да се създаде масив с различни видове данни които биха могли да бъдат вписани в него? Например, с цели числа [недоловим]? АНДИ Пенг: За целите от този клас, не, точно сега. Когато създавате данни структурира като масив, Вие казвате на компютър, хей, имам нужда от теб да отпусне толкова много памет в моя твърд диск, с всяка клетка да бъдеш определен брой битове. Не забравяйте, ние научихме в седмицата нула, че различни данни видове имат различни размери? Така например, низ е различна сума на място от Чар, който е различно големи пространства от цяло число. И така, ако не посочите и вие микс и мач Какви видове променливи имате, на компютъра ще бъде много объркан. И това няма да се знае, колко памет да ви дам. Така че за целите на полето Едва сега, компютри може признае един вид масив. Добър въпрос. ДОБРЕ. Така че, естествено, на втори въпрос имаме е, добре, сега, че ние създадохме масив и ние сме поставени всички тези неща в масива, как ние сме ще бъде в състояние за достъп до нея? Така че типичната структура, че ние винаги достъп до масив е нашата прекрасна за контур. Обещавам ви, момчета, че ние ще бъдем виждам много този човек тук. По същество, когато пожелаете за въвеждане на стойности в масив или искате да имате достъп до тях, на най-добрият начин да направите това е за контур, защото в един цикъл, за, вие знам колко пъти сте ще искате да преминете през масива, защото имате спирка издание, нали? И всеки път, когато стартирате чрез, можете да получите достъп друг елемент на масива. И също така, това е една от причините, поради типично ние започваме нашата за вериги при стойност 0, защото, когато достъп до масиви, можете да получите достъп до индекса на нула. И така паралели много добре. Вие, момчета, може да са искали да пиша за инт аз се равнява на 1. I е по-малко от или равно на 3. Но това няма да стане толкова и тук, само защото сте има елементи на 0, 1, 2 и. И така, ако ви се налага да започнете аз си в елемент 1, 2, и 3, започваш да се свърши работа от границите на масива, и лоши неща ще се случат. Така че се надявам вие да видят Segue защо в по-ранните класове бяхме преподаване ви момчета как да стартирате и форматирате за контур начинът, по който бяхме. Това е така, защото, сега ние сме прехвърлен в масиви, можете да видите защо 0, заема Самата много добре за достъп. Така че начина, по който го правим, че е that-- съм просто го отпечатате тук за по-голяма да ги извежда. Но аз имам запазено място, запетая. И действителната Достъп до част се случва. Името на масива се нарича температура. Така че това е температурата и -тото елемент от масива. Така че като за цикъл преминава през, тя ще започне в 0. Това ще разпечата 0th индекс на този масив. След това то се случва да отпечатате на първия елемент. След това то се случва да отпечатате от втората. И тогава ние ще се счупят. Всички ли ясно как това се случва? Страхотен. Всичко е наред. Така че тук имаме начин на казвайки, ако ние не искахме да твърди код ме in-- като програмист. Не исках да всъщност физически постави във всеки отделен елемент на този масив. Ако исках да вместо имат потребителски входни стойности, това, което е най-добрият начин да направите това? Е, тук съм създал тази прекрасна функция, в който мога да декларира масив. Така че нека да инт scores-- само да кажа, ние искаме да направим масив, който се проведе степените на всички 18 от студентите тук, в този раздел. Мисля, че ние имаме малко повече от 18 деца днес. Но заради пример е, нека просто приемем, имахме 18. Бих създадете име масив с резултати Тип инт, защото резултатите, разбира се, са числа. И аз отивам да имат 18 в квадратни скоби, защото това е, колко студенти I Искам да бъда в състояние да съхраняват десетки. И така, както бих се пренесат масива е, че съм го стартирате чрез линия за, на Разбира се, като 0 е моята 0th индекс. И след това с 18 е моя спиране издание, защото има 18 елементи в масива. И тогава аз ще направя ФОРМАТ, Enter отбележи за student-- ала-ала-бала. Може ли някой да ми каже защо съм тук отпечатване и плюс 1, а не аз? Това е вид на един трик въпрос, не съвсем. Той всъщност не физически засегне управлението на кода. Да. АУДИТОРИЯ: [недоловим] 0? АНДИ Пенг: Да, точно така. Това е малко неудобно да кажа, хей, ти си 0th ученика в този клас. Това е малко странно. Така нас, като хора, наистина не харесват да се мисли за това как компютрите мислят. Така че, въпреки че в компютър, това е съхраняване на стойности в 0-в индекса, когато ние сме хора, ние наистина не искал да наричаме нашата нула. Така че, когато аз просто отпечатате, че Отивам да отпечатате и да добавите 1 само за по-голяма яснота. Така че, когато печатате, аз отивам да бъде можете да печатате ученици от 1 до 18. Това всъщност не повлияе управлението на кода по никакъв начин, така, както аз отпечатате. Но бъдете внимателни, когато сте всъщност достъп масива. Когато видите оценките I, забележите, тук съм всъщност достъп до 0th индекс и не на плюс 0-- 1 или 1 плюс 1, в този случай, така индекс че това е всъщност ясно. Дали всеки вид OK за как това се минава през и с всеки индекс съм извеждането на стойност в масива и създаване на масив с 18 числа че потребителят ще вход? ДОБРЕ. Готино. ДОБРЕ. Ние сега се движат в нещо, което е доста от значение за това парче определя, както добре. Знам, че в лекция, David-- Съжалявам, трябваше един въпрос? АУДИТОРИЯ: Може ли да го увеличиш? АНДИ Пенг: Да, затова се опитах. Но аз не знам. По някаква причина, това версия на PowerPoint е наистина не работи добре с дисплея. Така че ние просто ще да я държи по този начин. Всички те ще бъдат качени онлайн. Съжаляваме, момчета. Да. ДОБРЕ. Така че ние можем да имаме струни. Така че, ако вие всъщност notice-- I знаете Rob мина над това в тази лекция че той did-- низ е всъщност само един набор от знаци, ако си мислиш за него, нали? Низ е име, или изречение или дума, нали? Ако трябва да създадете низ име Andi-- само моето име, A-N-D-I. Мислиш ли, че на това като само една променлива. Но всъщност, това е разбито в точно масив от символи. Така че тя има характер на съхранена в стойност масив. Тя има характер на п съхраняват в втори индекс и така нататък и така нататък. Така по такъв начин, ние всъщност имат този вид на структура, създадена в място за нашите струни. Така че тук, ако аз трябваше да вход Думата "яде" - така низ дума равнява получите низ. Ако трябва да въведете думата "яде", че е физически начинът, по който компютърът ми е съхраняване, че низ в паметта ми. И ако аз исках да тече през които и печат, че out-- така че за в аз се равнява на нула, не забравяйте, в лекция, ние покрита нещо, което се нарича strlen, или дължината на низа. Защото аз всъщност не знам колко голям масив е на каквото inputting-- на потребителя Например, аз въведен думата "яде", и аз знам, това е дълъг три символа, нали? Така че бих могъл да пробва три там и всичко ще бъде наред. Но ако вашият принос потребителското нещо това е различен брой стойности, започваш да не бъде в състояние да наистина Знам, че когато програмирате вашия код. Така че начинът, по който ние се справят с тестовете като това е, че имаме нещо наречено strlen, който е само функция който ви казва колко време е низ. Така strlen на думата. Моята дума е ядене. п е равно strlen на думата. Може ли някой да ми каже какво е това стойност всъщност е точно там? Какво означава п представляващи полето Сега, в този пример, ако имах ядене? АУДИТОРИЯ: 3. АНДИ Пенг: 3, точно. Така че ние имаме за инт аз се равнява нула, п е равно на 3, по същество. И аз ще избяга докато не е по-малко от 3i ++. И то се случва да отида същество през и да направи същото нещо. Това ще отпечата всяка стойност и ще ви даде ХРАНИ СЕ. Това е просто, означаваща различен начин на това писмено. Това ще бъде много полезен. Да. АУДИТОРИЯ: Каква е ползата от пускането п е равно strlen дума вътре, че за електрическа верига [недоловим]? АНДИ Пенг: Да. Така че, ако бях to-- кажем, например, ако аз трябваше да направя, че и след това do-- oop--, че в моя код, би действително да правиш като едно и също нещо. Въпреки това, начинът, по който обясни, David него по време на лекция, ако някой от вас, момчета спомням, е, че както хора, като програмисти, ние наистина се опитват да програмирате ни код, така че нашият компютър има да работи възможно най-незначително, така че че нашият код е много ефективен. Така че, ако имах, че има, какво ще се случи през моя за контур е, че щях първо да обяви променлива с име и ще бъде 0. Аз отивам да се провери, о, това, което е най-strlen на думата? О, strlen е 3. Така е и по-малко от три? Да така е. Отивам да тичам. И след това втори път обратно около примката, аз отивам да увеличите аз. Аз ще бъде една. И аз ще се покажат, о, но това, което е най-strlen на думата? О, това е три. И не, че изглежда вид разточителство, всеки път, когато стартирате през примката, да се провери функцията, въпреки че strlen на думата всъщност никога не се променя? Така че това е допълнителна мощност за един компютър. Когато започнем да говорим за неща, че са милиарди и милиарди места дълго, представете вашия компютър се налага да мине през физически и проверете всички, че всеки един момент. Ето защо, за да се направи точно за по-голяма ефективност, ние сме склонни просто да направите това, защото по този начин ние сме само извикване на функцията веднъж в началото, и че всеки път, когато го минава през него става за съхраняване на стойността 3 там, че вие ​​не трябва непрекъснато да се провери всеки път. Да. АУДИТОРИЯ: Съжалявам. Просто [недоловим]. Може ли да се Int п равнява strlen и сложи че по-горе от външната страна на линия за както и? АНДИ Пенг: Да. Можете да направите това, абсолютно. Причината ние я имаме тук е защото начинът, по който работи за контур е, че тя се нарича локална променлива в смисъл че всичко сте създаване вътрешността на линия за съществува само във вътрешността на за цикъл. Така че променливата аз само съществува в тези скоби. И тук на променливите на п също съществува само в скоби. Така че, ако ви се налага да използвате strlen на Думата многократно по-долу, Абсолютно най-добрият начин да направите това ще бъде да го декларират до върха така че не е нужно да го направи веднъж. Да. АУДИТОРИЯ: Защо имате нов ред след процента виждайки, ако искате да сложите всички писмата до него се разделят? АНДИ Пенг: О, аз исках да всички тях отпечатване на всяка линия. Това няма значение. Да, това е един от форматиране. Това е добър въпрос, все пак. Да, ако исках да отпечатате всичко това само на един ред, Не би трябвало таблото инча ДОБРЕ. Всеки добър? ДОБРЕ. Готино. Така че аз мисля, че съм достатъчно говорихме. Вие, момчета, на свой ред, за да преминете през код и да ми каже какво не е наред тук. Къде е грешката? Така че, както виждате, аз съм обявен за нов масив от тип низ с име клас. И аз съм въведен Сам, Джес, и Ким в нея. И аз съм се опитва да разпечатате всички елементи на масива. Може ли някой да ми каже защо това ще ми даде проблеми? Аз ще ви дам момчета 10 секунди, за да мислят за това. ДОБРЕ. Да? АУДИТОРИЯ: Дали левия център равняваща се на 3 или [недоловим]? АНДИ Пенг: Точно така. Така че колко пъти е това всъщност Ще преминете през този цикъл? АУДИТОРИЯ: Four. АНДИ Пенг: Точно така. Това ще чрез четири пъти. Това ще продължи до на 0, 1, 2, и 3 защото тяхната елемент е, че е по-малко от или равно на 3. Това няма да спре, когато това е 2. Това ще запази Ще докато го удари 3. А както знаем, има само три елементи в нашата действителна масив. Ако се опитаме да получите достъп до четвъртия елемент или индекса на 3, започваш да се удари някъде в паметта, което не съществува. Тя се нарича нулев терминатор. Нищо няма да бъде там. Компютърът ви не върви да бъда много щастлив с вас. Да. Дали някой има въпроси защо което се случва? Това е общо пространство, за да се избегне. Да. АУДИТОРИЯ: Не ви ли първият плъзнете също имаме поредица от 2? АНДИ Пенг: No. Така че по същество, когато вие правите масив, че скоба полето там, че number-- всички това е казвам ви, е как много елементи, които имам. Това не е реално казвам ми индексите на нищо. Така че в този случай, аз знам, че искам да пише с три места, с три физически места до задръжте каквото си искам да държи. Значи затова числото три е там. Въпреки това, ако аз исках действително да получите достъп до нея, ако исках да кажа, ФОРМАТ Номер клас скоба, след това започваш да действително пуснати физическото индекс там. Да, добър въпрос. АУДИТОРИЯ: Така е физическото индекс трябвало да бъде [недоловим]? АНДИ Пенг: Съжалявам. Може ли да говоря с малко? АУДИТОРИЯ: Така е физическото индекса [Недоловим] всяка от кутиите? [Недоловим]? АНДИ Пенг: Да. Така че аз ще се върна в точно тук. Помислете точно тук. Ние имаме масив от размер 3. Има три места, например, физически контейнери тук. Но те са на име 0, 1, 2 и. Така че, ако аз исках да ги посетите, начинът, по който аз достъп до тях е ФОРМАТ на каквото исках тук. Може би трябва да отпечатате на името на играта, защото тогава компютъра знае, о, аз трябва да се търси в този масив за 0th индекса. Да. Но размерът на това не се променя. Размерът е 3, независимо от начина, по който ги обозначават. ДОБРЕ. Всеки добър? АУДИТОРИЯ: Така че всеки път, когато [недоловим]? АНДИ Пенг: OK. Така че в този случай, ние наистина не да влязат в него точно сега в хода. Но знам, че string-- харесват I каза преди, низ е по същество набор от символи. Така че, ако се създаде масив от низове, I вид имаме масив от масив на героите, нали? Така че в този случай, защото аз имаме масив от низове, ако ви се налага да въвеждате една наистина дълга дума, че все още заема само един интервал, защото това е един низ. Но ако ви се налага да мислите за героите на тази масив, тогава, че да поема много повече символи, отколкото някоя от другите думи са. Не е много важно за момента. Но това е само по принцип как се работи. ДОБРЕ. Така че това е нещо, което ще ви позволи да направите много в течение на семестъра. Имам нужда да си почине гласа ми. Вие, момчета, трябва да стимулираме себе си. Много от вас вероятно трябва да спи в момента. Аз съм въвеждане на произволни проблеми където ние като клас или сте с партньор до теб ще да прекарат няколко минути обсъждаме за това как бихме отида за решаване или създаване на програма като тази. Така че точно сега, ние искаме да се създаде program-- ние ще го наричаме upper.c-- че новопокръстените с малки букви дума за горна класа string-- главни букви, съжалявам. Word в низове, съжалявам, е синоним. Отивам да ги промените да означават едно и също нещо. Да. Вземете няколко минути. То не трябва да бъде писмено на всеки език. Само в Псевдокод код или логически как бихме дори го направим такъв проблем. Да. [SIDE РАЗГОВОР] Аз също забелязах, че вие, момчета can-- I вид видим вече програмата. Предполагам, че моята липса на Режим водещ е проблем. Но това е ОК. [SIDE РАЗГОВОР] Да, моля, момчета. Хайде да получите бонбони. Хайде да получите бонбони. АУДИТОРИЯ: Да! [SIDE РАЗГОВОР] АНДИ Пенг: Също така, да, Ще започна да хвърлят бонбони при хора, които не отговарят на въпроси. Затова трябва да се отговори на всички въпроси. Или предполагам хората, които да отговаря на въпроси. Да, друг път наоколо. [SIDE РАЗГОВОР] АУДИТОРИЯ: [недоловим] АНДИ Пенг: Да. Да. [SIDE РАЗГОВОР] Добре, момчета. Вземете, например, повече от 10 секунди. [SIDE РАЗГОВОР] OK, момчета. Така че, преди да започнем да се опитва да всъщност физически писане на код, добър навик да се развива, е, че ние искаме да първия вид причина логически как ще го направя. Вие искате да се уверите, преди да физически започнем да се опитваме да код в Mario, че сте направили уверите, че сте си Псевдокод. Това е вие ​​приемате чрез това, което трябва да се създаде така че, когато сте физически напишете вашата програма по-късно, Ако сте по-добре в състояние да улови грешки в кода си и такива неща. Така че ние ще просто започнете по-- на английски език, в Псевдокод, Някой иска да даде ми родово обяснение за това как ние ще го направим? Да. АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Разбира се, не се безпокойте. АУДИТОРИЯ: Може ли да го помоля да или попитайте някой, който да получите низ 1-- да, низ, и тогава-- АНДИ Пенг: Да, така че това е едно добро начало. Ще започнете да пишете, съжалявам, тъй като вие говорите. Така-- АУДИТОРИЯ: --the малки букви числа са по-високи, нали? Или малки букви има голям брой? АНДИ Пенг: Точно така. АУДИТОРИЯ: Значи тогава ние изваждаме 32 от какъвто [недоловим]. АНДИ Пенг: Great. Така че ние имаме нещо като най-общ смисъл за това как да се работи по този проблем. Знаейки, че ние сме вид научил физическата начинът, по който струни се съхраняват в паметта, това, което правиш, вече знам, че ти започваш да се вероятно трябва да напишете в кода , за да се движат през низ? АУДИТОРИЯ: За контур. АНДИ Пенг: A за линия, точно. Страхотен. Така че ние имаме нещо като родово Псевдокод записал този вид е раздаването можете отбелязва от това как се ще се движат около решаването на проблема. Сега, когато имате това, може да го справки за по-късно на, когато се опитвате да всъщност напишете кода. Така че всъщност можем да отидете тук. И аз имам една функция, наречена upper.c-- там тя is-- от просто един празен шаблон точно сега, че вие ​​ще се да ми помогне да разбера как да се напише този ред на не code-- ред код. Тя ще бъде на няколко реда код. При стартиране на всякакъв вид на празно pset, какво е първото нещо, което ми трябва да се помни, да се направи? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Great Yep. Включи. stdio.h. Често това е една от най-лесни грешки хората ще направи, когато те са писане, е, че те ще забравяйте да включва важна библиотека от която се нуждаят. Така че, ако това е работно време и вие сте като, Аз не знам защо ми код не работи. Можете ли да ми кажете защо тя не работи? Отиваме да се каже е ли #include? Трябва да го #include. ДОБРЕ. Така че ние имаме стандарта I / O тук. Това ли е единствената библиотека ние ще се нуждаем тук? Какво друго ще правим? Извинете. Някой просто го крещи? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Ето. ДОБРЕ. И как мога да отида за започване на каквато и да е на функция, каквато и да е основна функция в рамките на нашата програма? Int главната. ДОБРЕ. Какво да се сложат тук? Какво е първото нещо, което искате да направите? Ако искаме да се получи низ от страна на потребителя, какво ще да има да се прави в тази първа линия? Съжаляваме, вие просто се чувстват свободни да говорят и силен. Само вика каквото. АУДИТОРИЯ: Попитайте на потребителя? АНДИ Пенг: Как правим това? Ask-- съм аз ще напишете "поиска от потребителя"? АУДИТОРИЯ: ФОРМАТ. АНДИ Пенг: OK. ФОРМАТ. Какво искам да ФОРМАТ? АУДИТОРИЯ: Type в нещо. АНДИ Пенг: Подобно на това? Момчета, преструвам, че съм един компютър. Физически ми каже всяка стъпка че аз трябва да въведете тук? Правя нещо не е наред? Трябва ли да сте написали нещо? АУДИТОРИЯ: Трябва кавички. АНДИ Пенг: Трябват ми цитати? ДОБРЕ. ДОБРЕ. АУДИТОРИЯ: И тогава нов ред. Точка и запетая. АНДИ Пенг: запетая? ДОБРЕ. Good. АУДИТОРИЯ: И може би зададени че го искате с малки букви? АНДИ Пенг: Great. Вие, момчета, ми се смеят забравяйки да се сложи точка и запетая. Гарантирам ви, някъде в рамките на този клас, ще забравите да сложите точка и запетая, и то ще ви отведе на три часа, за да разбера защо си код не работи. Това се е случило с всички нас. Това вероятно ще се случи с вас. Регистрирайте се в добър навик за използване на точка и запетая. ДОБРЕ. АУДИТОРИЯ: Искате ли да се направи наклонената черта в? АНДИ Пенг: Разбира се. Искате ли да направите наклонената черта в? АУДИТОРИЯ: Да. АНДИ Пенг: Great. ДОБРЕ. Какво да правя сега? АУДИТОРИЯ: Вземете низ. АНДИ Пенг: Вземете низ. Така че това, което мога да напишете? Някой? АУДИТОРИЯ: String ите. АНДИ Пенг: String ите. АУДИТОРИЯ: GetString. АНДИ Пенг: Някой, може ли да ми кажете къде тази функция GetString идва от? АУДИТОРИЯ: string.h. АНДИ Пенг: string.h? Мислиш, че е от string.h? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Ето. Това е от CS50.h. Ако винаги сте объркани от това, къде по- библиотека файл е или заглавния файл е, Google буквално string.h, и аз ще ви кажа какви са всички функции които са в string.h. ДОБРЕ. Така че сега, че съм създаден низ и аз съм напомни на потребителя за него, Аз съм го съхранява в променлива именувани ите, какво трябва да направя сега? АУДИТОРИЯ: Проверете дали е с малки букви. АНДИ Пенг: Съжаляваме? АУДИТОРИЯ: Проверете дали е с малки букви. АНДИ Пенг: Добре, нека да направим това. Как мога да направя това? Всъщност, за целите на класа точно сега, ние просто ще Предполагам, че всичко че ние вход вече е с малки букви. Ако искате да проверите, бихте просто добавете условен израз които проверяват, която минавала през всеки един елемент от масива и се проверява дали е между определени ценности. Забравям какво броя на стойностите на малки букви са. Можете да го погледнете в таблицата на ASCII. Но да, това е един наистина добър момент. Но точно сега, ние просто ще Предполагам, че всички струни ние вход са с малки букви. ДОБРЕ. Е, как ще мога да отида за този проблем по-нататък? АУДИТОРИЯ: За контур. АНДИ Пенг: За цикъл? ДОБРЕ. Кажи ми какво да пишете. АУДИТОРИЯ: За инт аз равна на 0. АНДИ Пенг: OK. АУДИТОРИЯ: О, всъщност, тогава направя запетая и се направи п равнява strlen. АНДИ Пенг: Така че важно нещо че аз мисля, че тя е забелязал тук е, че ние не трябва да се каже, инт п втори път направихме това. Просто знам, че в за линия, когато сте се обявява, вие всъщност не се нуждаете от INT на За втори път правиш променлива. Може да се каже п strlen. АУДИТОРИЯ: Of ите. АНДИ Пенг: с. ДОБРЕ. АУДИТОРИЯ: След точка и запетая. АНДИ Пенг: Разбира се. АУДИТОРИЯ: И тогава [недоловим] п. Тогава аз ++. АНДИ Пенг: Great. Всичко е наред. Какво искаме вътре на тази линия за сега? Не забравяйте, че ако ще да тече през низ и тичам през масив, ние искаме да провери нещата в него. Какво ще се нуждаете? Това е вид сложната част сега. Всеки, който има предположение? ДОБРЕ. Така че на първо място, как ние дори достъп? Как ние дори първата проверка или достъп до даден елемент в масива? Как да го направим? Каква е нотация, които използваме, за да направи това? Какво е името на този масив, наречен? Тя се нарича ите, нали? Не забравяйте, че всеки низ винаги е масив. Така и скоба аз, нали? Защото това е текущата стойност или стойност на индекса ние сме проверка. И ние ще се определи, че равният to-- искаме малки букви стойност, нали? Ние искаме да се обърнат, че lower-- Съжалявам, искаме главна. Искаме да превърне малката буквата стойност в главна. И така like-- Съжалявам, Как е името ти? АУДИТОРИЯ: Хайди. АНДИ Пенг: Съжаляваме? АУДИТОРИЯ: Хайди. АНДИ Пенг: Хайди. Както каза Heidi Първоначално, ние сме най-вероятно ще трябва the-- сме Вероятно ще трябва да се изважда 32 от какъвто charc, че е, нали? Защото на ASCII маса, разликата между малка буква и главна буква е 32. Така че, когато ние правим това, ние сме най-вероятно ще искате да се изважда 32, нали? Така че ние ще направим и аз. Всички ли разбирам защо го направих? Защото в момента, в нашия масив, ние сме проверка на 0th индекса, нали? И в 0th индекса на низ, това е първият знак. И този характер отиваме да се предположи, че е с малки букви. Ако ние искаме да направим това с главни букви, ние Трябва да извадим 32 от стойността си, защото в нашата ASCII маса, това е начина, по който го получи на съответния следващ стойност, която го прави с главни букви. Всички ли разбирам, че? Да. АУДИТОРИЯ: Бихте ли също се малки букви на minus-- АНДИ Пенг: Да, така че това е всъщност наистина добър. Отивам да се върна към това въпрос, след като правим това. Да. И тогава, ако искам да виж какво се случва, Аз съм може би щеше да искате да отпечатате, нали? Някой да ми каже какво Искам да отпечатате тук. АУДИТОРИЯ: ФОРМАТ процента в наклонена черта [недоловим]. Това е стойността на [недоловим] и аз. АНДИ Пенг: а аз, съжалявам? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Не знам. Какво мислиш? АУДИТОРИЯ: Ами, аз wouldn't-- Предполагам, че не би bring-- Бих го извадете вътре, защото [недоловим]. АНДИ Пенг: О, ти би направил това? АУДИТОРИЯ: Да. АНДИ Пенг: Да го оставя на пътя тя е, и аз ще обясня защо по-късно. Не забравяйте, че дори и когато има титуляр на мястото, искате да поставите скоби около него. Всичко е наред. Така че това трябва да бъде твърд функция тук. Нека да го стартирате и да видим дали той съставя. Направи горната. Охо. Това не изглежда прекалено хубаво. Защо се случва това? Както при всяка грешка, която искате да отидете назад и да започне с първия, защото обикновено причини една грешка много други грешки след него. Тук виждаме upper.c: 18: 25, който казва, ми в тази програма на име upper.c, по линия 18, грешка негласно обявяване библиотека от функции strlen с типа unassigned-- дрън, аз не знам какво се случва след това. Всичко това ми казва точно сега е че нещо се случва на strlen. А компютъра е объркан, защото Това е като, аз не знам какво strlen е? Какво означава, че вероятно ви кажа, което липсва? АУДИТОРИЯ: Вие сте липсва [недоловим]. АНДИ Пенг: Вие сте прав. Точно. Така че това е мястото, където това е важно да се уверите, че всяка функция можете да използвате във вашия код е с правилния заглавието файл за библиотеката, или пък започваш да получите много грешки и кода си не върви да знаят какво се случва. Така че ние ще се включат string.h тук. Сега, когато се опитваме да съставят горната. Обединете правилно. Нека да стартирате тази програма. Така объркате нещо, с малки букви. Какво искате, момчета, за да напишете? Викайте нещо. Добре, Charly просто влезе. Ще напишете името на Charly. Charly с малки букви. И да се надяваме, да се надяваме, че това е ще вика и плюе Charly с главни букви. Ура! е всеки да разбере как Отидох за решаване на това? Начинът, по който мога манипулира с помощта на числа да се реши нещо, което Искам да направя на плитки, защото символи и числа може бъдат съотнесени по същия начин, защото на ASCII картографиране. Така че, за да се върнем към вашата точка, ако аз Исках да се сложи тук, вместо на 32 главни букви A минус малки букви а точно като че това ще работи еднакво, както и, защото това е просто само разликата между тези две стойности. Ако искам да направя този again-- Charly. О, не. Мисля, че ние отидохме по грешен начин, така ли? АУДИТОРИЯ: [недоловим] малки букви а. АНДИ Пенг: Ето. Да. И от плюе Charly. Така че бъдете внимателни, когато можете да започнете изваждане стойности да си спомни кой е по-голяма от другата. Например, тук аз забравих че само с малки букви а всъщност по-голяма от главни A. Така че, когато Опитах се да ги извадим по друг начин наоколо, аз имам негативно 32. И моя компютър е като, Аз не знам какво е това. Това е вероятността само някои случайни стойност, която не е много добра. И затова се уверете, че сте изваждане на правилната дължина да намерите желания символ. ДОБРЕ. Има ли някой объркан за това как ние обикаляше написването на тази функция? ДОБРЕ. Така че всъщност, функция вече съществува в библиотека, наречена ctype.h. Наречено ctype.h на библиотеката. Тази функция е всъщност вече написана за вас. Тя се нарича да горната. И така, за целите на това pset, ти започваш да откриете, че наистина искате да използвате много от функциите, съдържаща в рамките на ctype библиотеката. Към горната, по-ниски, е горната, е lower-- това са всички функции че вие ​​ще бъдете в състояние да използват много, много бързо в свой собствен код, който прави точно какво прави това. Писахме как да конвертирате низ в главни букви. Но това всъщност е кода че някой друг е написал и че можете да получите достъп чрез различна функция. Да? АУДИТОРИЯ: Значи вие просто копирайте на А там и го направи за всяка една буква? АНДИ Пенг: Да, защото аз не правя грижа за стойностите на един. Аз просто се грижи, че разликата между тях е 32, нали? Разликата между малки букви Б и В е също главна 32. И разликата между гр и главни букви C винаги е 32. Просто трябва да се грижим за разлика между двете, защото всички буквите следват същия модел, нали? Ако имам разликата между един от тях, Знам каква е разликата между всички тях е. Добър въпрос. Да. Всеки добър? ДОБРЕ. ООП. ДОБРЕ. Така че това е друго понятие Ще бъде много полезно, колкото продължи да се развива кода си е тази идея за създаване на функции или абстракция. Така че точно сега, ние всички сме взето алгебра. В алгебра, която учи, че съществува това прекрасно нещо, наречено функция машина, където, ако вход един вид номер, тя минава през тази прекрасна функция и навън се появи друг изход, нали? В кода, същото нещо се случва в каквато и да е функция. Така че бих могъл физически напишете в тялото ми на моя код главен изявление, че всъщност прави независимо от тялото на кода се прави. Но извън това, което мога да напиша много различни функции че правя много различни неща. Например, вече сме Започнах да използвам някои от тях. Printf--, че е функция, която някой друг вече е записано, че можем да наречем в нашата код. За да upper-- в този случай, upper-- е друга функция ние съм писал, че ние да се обадите в нашия код. И така, аз предполагам, защо дори имаме функции? Защо не можем просто да го плясване всички в една и съща линия на код? Това го прави лесно за всички. Е, мотивите зад които е, на първо място, организация. Това наистина е много досадно става през нечий код и една функция като ФОРМАТ. Ако вие действително са знаели какво функция ФОРМАТ довело да пиша, това е, като, 1000 реда код. Ако всеки път, когато исках да ФОРМАТ нещо, Аз трябваше да се напише 1000 реда код, че ще бъде много досадно да се чете, нали? Ето защо ние сме просто Създадохме този абстрактна функция че ние имаме вече някого друг е написал някъде другаде. И всеки път, ние трябва да го използва в нашият код, ние просто трябва да се каже, ФОРМАТ. И това е в състояние да използвате функцията някой друг е писано в нашия код. Това прави по-лесно организационно да прочетете код. На второ място, това е опростяване. Това опростява стъпките имаме да предприеме за решаване на проблема ни. ФОРМАТ, функции като ФОРМАТ, функции като към горната са всички неща, които ни позволяват да опрости нашия код надолу, така че е по-лесно. И последно нещо е повторна употреба. Така че фактът, че имаме функция, наречена ФОРМАТ че можем да наречем много различни пъти и позволява тя да се използва повторно. Ако аз да напиша ФОРМАТ, Аз само го пиша веднъж. Тя съществува само в тази на едно място. Ако исках да го направя отново, щях Трябва да копирате и поставите всичко това в моя втори ред код. Ето защо, ако ние създаваме функция че съществува извън основната ни, ние можем просто да призоват нея и тя всеки път, когато повторната употреба имаме нужда, така че това е много по-лесно за нас като програми, за да пишат. Така че начинът, по който ние всъщност ще напише функция е много подобно, нали? Това е един вид пръв Например, в които ние ще виж функция поеме стил различен от нашия инт основната невалидни. В този случай, ако исках да напише функция, наречена р, нали? И стойността на инт тук е всичко да ми кажеш, това, което мога да искам това функционират, за да се върне при мен? Ако искам да кубчета цяло число, Отивам да искате да въведете. Това са параметри. Отивам да се въвежда стойност от тип инт. И аз ще се върне друг тип стойност на инт. И тук, както ти виждате, всичко, което правя е cubing каквото и моят принос е като моята продукция и да го върне. Така че всичко това се прави функция взема някакво число. Тя умножава по себе си два пъти така че кубчета в сила. И след това се връща каквото и да е изход. Така че в този случай, това е два реда код, който ние трябваше да пиша допълнително. Но ако искаме да се обадя върху тия няколко пъти, това е много по-лесно да се объркат, че един Онлайн точно тук, че това е в куб от трябва да премине през няколко пъти. Така че начинът, по който по същество всеки форматиране за каквато и да е функция ще съществува е като тук. Така че ние имаме името на функцията. В този случай, тя се нарича куб. И ние го наречете куб защото това е лесно за запомняне. Можете да го наречете квадрат и тя действително може да се кубчета. Няма значение. Само име, което сте възлагане си функция. Това право тук, инт, е Тип на параметъра се нуждаете. Така че това, което прави тази функция нужда, за да работи? Е, тя се нуждае от един вход. Аз го нарекли вход. Можете да го наречете каквото си искате. Но имам нужда от нещо от типа инт. Това ще действително изпълнява каквото и да е в рамките на тук, тялото на функцията. И тогава типа връщане точно тук, това int-- всичко това ми казва се че тази функция е ще се върне при мен в инт. Така че това ще отнеме по едно цяло число, и това ще ви даде обратно на инт. Всички ли се разбере как форматиране на този вид работи? Готино. ДОБРЕ. Така че не се притеснявам, ако това изглежда малко абстрактно точно сега. Това е нещо, което ние ще говорим за. Ще се потопите в дълбок по-късно в хода. Начинът, по който всякакъв вид на по-високо ниво абстракция от тези неща на работа е, че в паметта, в вашия компютър, всичко се съхраняват в този вид от стака, да кажа. Така че там горе на върха. Аз не знам дали сте момчета могат да видят, че добре. Ще се опитам да я увеличите инча Тук в горната част, ние имат физическа текст от това, което компютърът е interpreting-- всички нули и тези, които съществува в рамките на нашия компютър. И тогава ние сме на инициализира данни и неинициализирани данни, това, което наричаме глобални променливи. Така променливи, които съществуват във всички програми и целия си цялата, същество, код. Не се тревожете, ако вие се вид неясна по този въпрос. Това няма значение сега. И тогава ние имаме това, което е нарича купчина в комин. Мислете за комин буквално като точно като купчина неща, купчина от различни нещата се избута на върха един от друг, че се съхранява на различните променливи и синтаксиса в кода си. И тогава тук на самото дъно, ние имаме на околната среда променливи от това, което се изпълнява в рамките на Просто си малко ред код. И ние просто ще я увеличите в на действителната стека част. Така че точно тук, ако бяхме да я увеличите в само върху тази област от стека, това е, което изглежда. И това всъщност е доста важно когато вие говорите за функции, защото известие, че памет на вашия компютър се съхранява променливите и функциите и параметрите на двете си функция и вашите основни променливи на различни места. Така че точно сега, е основният действителната функция че сте изпълняващата в кода. Вие сте тук съхраняват нейните параметри и нейните локални променливи съхраняват тук. Local променлива просто означава всяка променлива че съществува само в рамките на тази функция. И отгоре на това, че имате този отделна функция, наречена куб. Имате това е параметри както и тези на местните жители. И причината можете виж тук е, че това, което се случва, когато куб отнема в стойност от основната си функция е, че всъщност това е копирането, че свърши. Така че, ако аз исках да куб 2 и да се върнете 8, че 2 всъщност е въведен като параметър и това е копирани, така че можете да го съществуващата в две различни места в паметта. И вие трябва да бъдете много внимателни за запомняне което един от тези, вие всъщност манипулиране. И пример за това какво се е случило това ще бъде много, много лошо съществува точно тук. Така че точно тук, аз имам, на теория, програма точно тук, а основната функция че аз съм се обявява едно цяло число х е равно на 1. Аз съм обявява друг инт у равно на 2. И тогава аз съм го използвате през тази функция наречено суап, където съм се предположи, че това е смяна на двете стойности. И тогава аз ще да ги изкарваме, нали? Това е, което искам да направя тази програма. Така че нека да слезе и да разгледаме. Така че, ако аз всъщност пиша различен функция, както можете да видите, ние имаме нашата основна функция тук. И тогава ние имаме втората функция тук. Void суап. Void просто означава, че това е Няма да се върне нищо. Името на функция е наречено суап, и това е Ще всмукателните две променливи, инт а и INT б, от вашия [недоловим] функция. Така че по същество тук, ние сме минаваща х и у в тази функция. И ако трябва да създадете this-- така че ние искаме да се създаде временна стойност, нали? Отиваме да зададете, че до. И тогава ще се сега равно б. И б ще се върне когато стойността на температурата беше, което е, защото, когато искате да сменяте неща, не може просто искал ги разменят. Трябва да се запази едно от тук, така че да си спомня какво е, защото веднъж можете да сменяте един, сте пропуснали каква е тази първоначална стойност е, нали? Така че на теория, тази програма трябва да работи, нали? Ако исках да сменяте две, те трябва да сменяте. Така че нека да го стартирате и да видим дали работи. Така че, както вие може да видите, х някога е бил един и у някога е бил 2. И ако аз го отпечатате, х е все едно и у е 2. Хм, тази програма не изглежда да бъде работи начинът, по който аз искам тя да работи. Някой иска да вземе един изстрел в познае защо това се случва? Това е свързано с начина, по който че нещата са различни съхраняват в различни места в паметта. ДОБРЕ. Така че вие, момчета, не е нужно да се притеснявате твърде много за това точно сега. Но знам, че куб Локално променливи са а и б, защото тук, в нашата функция, ние сме обявена а и б като променливите, които съществуват в рамките на куб, тази функция. Но както виждате, параметрите, които това е като в са се съхраняват тук. Но ние не бяхме в действителност връщане нищо. Ние всъщност не променя х и у. Бяхме само с промяна а и б. Бяхме копирани х и у в нещо нарича и б. Но ние всъщност никога не манипулиран х и у себе си. Дали вие виждате как това се случва? Е, че ние просто сме го копирали свърши, но ние всъщност не държат следите къде те са били в паметта. И така, сега на компютъра търси, о, аз съм тичам това нещо през тази прекрасна функция. Но х и у са все още х и у. Нищо не се е случило с тях, поради факта, че тези параметри и локални променливи се съхраняват на различно поставите в паметта. И това е по-високо ниво концепция, която ние ще започнете да виждате по-късно в хода. Но просто знам, че това е проблем, който може да се случи и че ние ще разбера начини за това как да се справят с това по-късно в хода. ДОБРЕ. Всичко е наред. Така последната концепция сме наистина става за покриване че ще бъде полезно за pset тази седмица са така наречените командния ред аргументи. Така че Rob в лекцията си премина през вид накратко за това как те работят. По същество се знае, че когато пишете като основна функция, когато ние написа преди функции в миналото, имахме инт основната невалидни. И причината имахме невалидни там е така, защото нашите програми не Трябва да входните стойности да тече, нали? Когато аз се завтече Mario, нямах нужда за действително само да въведете нещо когато аз се завтече Mario. Можех да напомни на потребителя по-късно. Но това не винаги е така. Например, в този проблем седмица определя, започваш да се попита, че в Освен използвате вашата програма, започваш да искате да въведете някои неща в прав като вас стартирате програмата. Така че начина, по който го правим, че се нарича аргумент на командния ред, която е като аргумент можете да въведете директно като се опитвате да стартирате програмата. Така че знакът за това, това е доста сложно изглеждащи, но това наистина не е, че труден. Така инт main-- това е само основната си функция. Into argc запетая струнен argv скоби. Така че всичко, което казва, е, че това инт argc-- всичко, което ви казва е, че това са броя доводите на компютъра трябва да очакват. Така че едно нещо, което е наистина важно да следите е физическото името на вашата програма брои за един от тези доводи. Така че, ако исках да имам моята програма тичам плюс едно допълнително командния ред аргумент, аз всъщност съм ще има две. Argc всъщност ще бъде две. И тогава низ argv bracket-- всичко, което се прави, това е ми даде масив от низове, които е просто ще покаже и какво се съхранява всички тези аргументи от командния ред са. Така например, ако исках да имам този програма, ./copy INFILE outfile, нали? Това е просто един типичен команда Linux. Какво всъщност е argc? Колко аргументи от командния ред са всъщност в това? Всичко това прави, е да направи копие на един INFILE на името на един файл и го копира в друг файл, нали? Това е всичко, това се прави. Както можете да видите, го правя на един ред без да е необходимо програмата. Каква е нашата argc в този случай? Колко аргументи имаме? АУДИТОРИЯ: Three? АНДИ Пенг: Имаме три, точно. Така че е много интуитивен, за да Просто мисля, че това е просто на INFILE и outfile. Но знам, че физическата името на програма работите брои като едно цяло. Така че в този случай, argc е всъщност три. Какво ще кажете за това, което е argv 0? Не забравяйте, че всички от аргументи от командния ред се съхраняват в масив от низове. Така че, ако се опитам да го отворите, това, което ще argv скоба 0 да ми дадете? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Точно така. Това ще ми даде точката Слаш копие, защото това е на 0th елемент, на Първият елемент на моя масив. Какво ще кажете за argv 1? АУДИТОРИЯ: INFILE. АНДИ Пенг: INFILE, точно. Какво ще кажете за argv 2? АУДИТОРИЯ: Outfile. АНДИ Пенг: Outfile. Това е доста труден сега. Какво мислите вие ​​argv 3 ще бъде ми даваш ако аз се опитах да отпечатате, че навън? АУДИТОРИЯ: [недоловим]? АНДИ Пенг: Знаете ли, имам ръка? Да. АУДИТОРИЯ: Алтернативен. АНДИ Пенг: Точно така. Така че не забравяйте, че ние в лекция има в края на състезанието нещо нарича нулев терминатор? Ще получите в това също по-нататък в този клас. Но знам, че в бройна система, Между другото вашия компютър знае, че това е края на масива е, че поставя нещо, наречено нулев терминатор или тире нула. Така че, ако се опитате да получите достъп argv 3, започваш да удари този пробив 0. Това е още по-подвеждащ въпрос. Какво ще кажете за argv 4? Така че това е минало нищожна терминатор, покрай границите на нашата масив. Какво мислиш, че ще се се случи, когато се опитваме да правим това? АУДИТОРИЯ: [недоловим]? АНДИ Пенг: Съжаляваме? Кажи, че е малко по-силен? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Да. Това е името на площ най-вероятно ще получите. Но знам, че argv 4-- която ви позволява да достъп места в компютъра ви памет, която наистина не трябва да се допират, защото точно сега, че знаете какво е argv. Вие знаете, че това е масив с размер 3 който има точка копие, INFILE и outfile. Ако се опитате да отида толкова далеч отвъд това че сте минали нулевата терминатор, компютърът ви има вероятно съхраняват нещо в argv 4. И наистина не трябва да бъде предоставя достъп до argv 4, защото имате файл шкаф и сте само предостави достъп до тези три рафта. Но ако се опитате да стигнете по-далеч рафта, където и да са позволени, започваш да започне каша с други неща в паметта на компютъра ви. Това ще бъде много, много лошо. Така че просто го знаеш. Бъдете много внимателни, че не просто случайно започне достъп елементи в масив, че не са били в това, което е искал да създаде. Да. ДОБРЕ. Така че ние ще направим още една терминал пример тук. ДОБРЕ. Така че Rob бързо в лекция на другия ден отидох през този пример, където трябваше инт основната инт argc струнен argv скоби, които ми казва, че аз съм ще има аргументи командния ред. Той има, ако argc равнява равнява 2-- спомням, се равнява на равни означава сравнение. Ако това е равно на 2, тогава аз съм ще отпечата здравей, независимо от първата елемент на масива е. Else печат, здравей свят. Какво е това, ще случи същество? Може ли някой да обясни точно в English какво тази програма се прави? Да. АУДИТОРИЯ: Ако някой въведена команда и каза, първото и последното име, тя не само ще се отпечата Първият един и да каже, здравей, каквото и първото си име е. АНДИ Пенг: OK, нека да го стартирате. Така например, ако трябва да се направи Този файл се направи здравей здравей to-- to-- какво искаш да вход? АУДИТОРИЯ: Име и фамилия. АНДИ Пенг: Име и фамилия? Spaces? АУДИТОРИЯ: Да. АНДИ Пенг: Може ли някой да каже ми точно сега, това, което е argc? Точно там? Опа, съжалявам. Нека да се върнем. Колко аргументи от командния ред можете are-- момчета наистина не може да се види. Но аз ще се опитам да я увеличите инча Опитвам се. Да, има три, нали? Това е точка наклонена черта здравей, това е Анди, и това е Пън. Така че това, което вие мислите това програма ще бъде отпечатване? Oh. О, съжалявам. Грешно име. Това извежда на екрана, здравей свят. Някой иска ли да обясни защо това се случва? Да? АУДИТОРИЯ: [недоловим]. АНДИ Пенг: Точно така. Така че тук, са под условие е, ако argc равнява е равно на 2. Така само в случай, че има две командния ред аргументи. Тогава аз отивам да отпечатате, здравей, каквото и да е. Но иначе, аз отивам да отпечатате само, здравей свят. Така че няма някой иска да ми дадете пример за това как аз ще бъда в състояние реално Махни го, за да отпечатате стойността на argv 1? Какво би аз трябва да вход тук? Само едно нещо, нали? Защото дот Здравейте на вече брои за първи аргумент. Имам само още един. Така че Дот здравей, ако аз просто правя Andi. Здравейте, Andi. Всички ли разбирате защо това се случва? Да. АУДИТОРИЯ: Така пространството между команда line-- е тя [недоловим]? АНДИ Пенг: No. Така пространството, в командния ред аргумент, х, за да кажете на Вашия компютър че това е началото на нов низ. Така струнен argv го here-- магазини всички ваши команди линия доводи в низове. И така пространството, в командния ред argument-- всичко, което прави, е да ви кажа, това е в края на един низ и е време да се премине към друг. Да. Това е доста важно за Вашата pset, защото сте Ще се тества тези. Така че не всеки има някакви въпроси за това? ОК готино. Да? АУДИТОРИЯ: Така ли причина би сложи число аргумент изчислено вместо на [недоловим] би било, когато искате да въведете допълнителна информация, за да [Недоловим]? АНДИ Пенг: Да, точно така. Някои програми ще изискват от вас за въвеждане аргумент на командния ред че да преминава през и който използва това. Да. АУДИТОРИЯ: И какво, ако [недоловим]? АНДИ Пенг: Е, какво трябва да съм, да се промени след това в програмата ми? АУДИТОРИЯ: Само 3. АНДИ Пенг: Защо е така случва, как мислиш? АУДИТОРИЯ: Тъй като [недоловим]. АУДИТОРИЯ: Вие ще трябва да се го смените с 2 [недоловим]. АУДИТОРИЯ: 1 и 2. АНДИ Пенг: 1 и 2, точно. Така че в този случай, Вие вероятно ще искам да имам две ФОРМАТ statements-- един, който отпечатва argv 1 и този, който отпечатва argv 2. Тук. Всъщност мога да направя това много бързо. Ето. Oh. Не е точно това, което исках. Но ако вие се забъркваш с около форматирането, тя ще излезе. Да. Готино. Знам, че сме малко по-къса от време. Но аз съм просто ще бързо да прекарат няколко минути преминават през helpful-- АУДИТОРИЯ: Имате две минути. АНДИ Пенг: Аз имам две минути? Благодаря. Някои бързи съвети pset. Така че за тази pset, аз силно препоръчвам, както казах, всеки да прочете спец. Ще бъдат написването три programs-- една наречено initials.c, една, наречена caesar.c, една, наречена vigenere.c. Някои важни съвети, които вие наистина искат да се запази в mind-- така има тази функция наречено atoi-- както обичам да казвам, а Троа. Неясно, ако това е всъщност как го казвате. Но всичко, което прави, това е въвеждане. Той преобразува низ до инт. Така че представлява ASCII да съм число. Това е просто конвертиране ASCII стойности за целочислени стойности. Така че не забравяйте, argv, масива, че магазините всички ваши команди линия arguments-- тя ги съхранява като струни. И така, ако искате да бъдете в състояние да има един от тях стават едно цяло число, започваш да имат За да използвате тази стойност тук. Modulo, като ние обхванати рано в клас днес ви позволява да имате на остатък от каквото имате. Така че, ако ние имаме много, много големи числа в Caesar, какво ще стане ако имаме края на низ от Vigenere? Как смяташ да бъде в състояние да се получи, че да обгърне? Ако аз удари Z и аз искам тя да се върнем към една, как ще да получите че да обгърне? Вероятно искате да използвате модул някъде там. На второ място, да преглеждате около вашата библиотека. ctype.h. Това е нова библиотека имаме. Вие ще намерите много наистина, наистина полезно functions-- isupper, islower, toupper, tolower, isalpha, и така нататък. Всички функции, които ще бъдат много полезни когато се опитвате да разбера, е този герой малка буква? Как да конвертираме низ главна? Всички тези неща ще бъдат много, много полезно за вашата pset. ДОБРЕ. Работно време тази вечер сме 8:00 до 11:00 в TEAL класната стая утре както и сряда и четвъртък вечер. Работно време в общи блага. Силно ви предлагаме момчета всички да започнете веднага, защото вие не искате да бъде, че хлапе, което в четвъртък вечер има проблеми изпращането на вашето pset и се харесват, аз не знам какво да правя. Започнах, свърших, внесено. Опитайте се да се даде някаква стая, защото в винаги възникнат проблеми в кода. Вие искате да се уверите, че сте си дадете много време, за да бъде в състояние за завършване на psets. Готино. Аз ще се мотае наоколо. АУДИТОРИЯ: Това ли е онлайн вече? АНДИ Пенг: Аз не знам дали това е онлайн вече, но това ще бъде. Аз ще се мотае наоколо, ако някой има някакви въпроси вече. Благодаря, че дойдохте.