[За възпроизвеждане на музика] DAVID Malan: Здравейте, всички. Това е supersection CS50 е. Целеви раздели няма да започне още една седмица. И така, днес, аз съм тук with-- MARIA: Maria. DAVID Malan: --to всъщност да разгледаме проблема зададете една, на курса първите седмици на материал, да сте ориентирани с CS50 IDE, малко на Linux, операционната система, която е работи на IDE, както и разгледаме някои от прехода от Scratch да C водеща до проблем зададете една. Така че, без повече приказки, в проблем зададете една, започваш да бъде въведена CS50 IDE, която е този уеб-базирани програмиране среда, която ние използваме, за да пишат програми. Той е проектиран да изглежда много напомня на типичен компютър система, работеща операционна система, наречена Linux. Но това е в т.нар облака, което означава всички в класа всъщност може да има своя собствена сметка и да го използвате, както добре. Така че повечето от вас вероятно никога не са използвали на Linux среда, преди или може би дори и на командния ред среда. И на командния ред среда е различна. Всичко е текстова. Това е всички команди от клавиатурата. И това не е Mousing, никакви икони, без диалог прозорци, никакви менюта. Това е чисто текст. Така че на първо, той вид на чувства като стъпка назад по отношение на сложност. Но това завършва е много по-мощен, със сигурност, за компютърен учен, в крайна сметка. Така че нека да разгледаме. Тук съм в CS50.io, чрез която можете да влезете в CS50 IDE. И много прилича на Scratch, има три основни области на този екран. Така че от гледна точка на ляво, имаме какво ще бъде файловия браузър. А има и тази папка в отгоре, което е точно сега празна тъй като аз се отървах от всичките ми файлове преди supersection. И това е мястото, където ние ще спести C файлове, които пишем. В горната дясна част, имаме място, където всички от нашия код ще се писмено. И наистина, ако щракнете върху този плюс, това ще ме изберат New File. И тук мога да започнете да пишете C код или, Наистина, всеки брой на други езици. И след това в долната част, където казва jharvard @ ide50-- и твоя воля кажа нещо малко different-- какво е този, наречен? Терминален прозорец. Да. Така терминален прозорец е т.нар командния ред интерфейс, чрез който можете да си взаимодействат с операционната система. И за сега, ние ще направи много малко използване на this-- просто да се съберат, за да погледнете съобщения за грешки, които виждаме, и да тичам нашите програми. Но в крайна сметка, ние ще да се направи много повече, както добре. И дори можете да инсталирате софтуер и администриране на вашето работно място в рамките CS50 IDE, както добре. Но повече за това някой друг път. Така че нека да вървим напред и да пиша много проста програма, просто да мине през загряване на hello.c, което е може би най-простият програма можем да пиша. Аз вече отвори нов раздел. Отивам да вървим напред и да казват включва стандартна io.h. Тогава INT главната (недействителни). И тогава ФОРМАТ ("Здравей, свят" наклонена черта п, в близост цитат, близки скоби и запетая. Всичко е наред. Така че сега забележите прозореца ми е неозаглавен. Така че аз съм много бързо ще да отидете до файла, Save. И това е важно, че Аз наричам това не "здравей". Така че много често срещана грешка, особено в проблем зададете една, е случайно обадете програма "вода" или "алчни" или "Марио" или "кредит" или други подобни. Но всъщност искате да направите уверете, че имате разширението на файла защото това е единственият начин, че съставител и също редактор код знае, че ти си всъщност написването C код. Така че нека да вървим напред и да кликнете върху Запазване. И сега, твърде, какво CS50 IDE е направил за нас е, че е също синтаксис подчерта всичко. Така че това е направено всичко, много колоритен. И цялата цел на че не е функционален. Това е просто да се направи очите ми за концептуално различни парчета на тази програма. Така че нека да вървим напред и да съставят това. И мога да компилирате този в няколко начина. И в една седмица, старата школа начин направихме тя е буквално в команда line-- "трясък hello.c." И тогава аз удари Enter. И нищо не изглежда да се случи в терминален прозорец. Но това, което е направил промяна в IDE? Когато отново, IDE просто означава, Интегрирана среда за разработка. Това е един луксозен начин на казвайки това интегрирано развитие среда за разработка на софтуер. И така, какво се е променило в ПС? Какво забелязахте това е различно, Мария? MARIA: Забелязах нещо под IDE50 папка тук. DAVID Malan: Да. Така че тук не само имаме ли "hello.c." Ние също имаме "a.out", което е вид тъпо име за дадена програма. Но в действителност, това е името по подразбиране за програма, когато просто компилирате кода си и не казвайте на компилатора какво файл за изход. Така че, ако искам да изпълня този, I Трябва да кажете на compiler-- или по-скоро, аз трябва да кажете на работното пространство, че аз искате да стартирате програмата, наречена "a.out." Enter. А има и "здравей, свят. "Сега" ./ ". всъщност е важно. Въпреки че обикновено ние само напишете имената на командите, когато това е програма, вие сте писмено, вие не искате да кажете "./" защото това изрично указва Linux че искате да стартирате програма, наречена "a.out", който е в това, когато дот означава тази директория, че аз съм в момента в, което се случва, да бъде нарича работно пространство, "a.out. Защото, ако аз просто каза "a.out," Enter, Отивам да се получи "a.out команда не намерено ", защото computer-- защото аз измислил "a.out;" тя не дойде с computer-- не знае къде да го търсим, макар и да е прав под носа ми, така да се каже. ДОБРЕ. Така че можем да променим това, за да да бъде "трясък -o здравей hello.c." И ако аз натиснете влиза, каква програма е това ще изход за мен? Какво е името на файла? Да, в гърба. Това е вярно. "Здравей." Така "здравей" ще бъде Името на програмата защото сме използвали т.нар аргумент командния ред, който е само на начин за промяна на поведението на компилаторът да всъщност изход специфично име на файла. И наистина, ако съм я увеличите навън и погледнете тук, сега имам не само "a.out" и "hello.c", но и "здравей", както добре. Така че сега мога да направя "./hello," Enter. А има и "здравей, свят". Но и това lastly-- сега ще бъде на конгреса ние използваме в целия семестър, typically-- е, че може да се каже просто "да здравей." И наистина, той казва, че е нагоре към днешна дата, защото тя вече съществува. Нека да вървим напред и да се премахне, с командата RM, както "a.out" - и да кажа "премахнете обикновен файл a.out?" Това просто означава, вие сте Наистина ли искате да го изтриете? Отивам да кажа да. И тогава аз отивам да се премахне "здравей", но не "hello.c." Отивам да кажа "да", изрично, но "у" е достатъчен, както добре. И сега, ако забележите I Типове ls-- които, изземване, означава list-- него са изброени всички на файловете в моята папка. И наистина, ако съм я увеличите навън и погледнете горния ляв, тя потвърждава, че това, което е в тази папка, дори макар че той е обозначен като IDE50 тук а не на работното пространство, това е просто "hello.c." Така че сега тук, ако аз да "направи здравей," Enter, сега виждам много по-дълга команда, но по-сложни и управление, което се случва да бъдат полезни в идните седмици. И сега мога да кажа "./hello." Така че нека да бърза обиколка някаква друга Linux команди. Тогава защо не можем да се върнем назад и погледнете реално C по- като цяло, прехода от Scratch до C, а след това да сключва с един поглед при първия проблем определен в C. Добре. Така че аз ще отида напред и просто чиста до работното място ми с Control-L просто да запазите екрана чист. Но това не е функционален да повлияе на друго мнение. Спомнете си, че сме виждали няколко команди сега. Така че сме виждали трясък, които обикновено ви няма да се налага да изпълни ръчно вече. Вместо Ще използваме грим. Но ние също така видя ли, което показва списък на файловете в моята директория. И сега защо се е there-- има две файлове предприятието, "здравей" и "hello.c." Защо има звезда или звездичка след "здравей"? Какво означава, че, въз основа от това, което видяхме в една седмица? Какво мислиш? Какво означава звездата означават? MARIA: For-- програмата "здравей"? DAVID Malan: "Hello *". Да. О да? О, изпълнима. Това е вярно. Така че това означава, че "здравей" е изпълним. Така че наистина, това е защо Мога да направя "./hello." Всичко е наред. И така, какво друго мога да направя тук? Е, оказва се, че мога също да създавате директории. Така че нека да вървим напред и да се създаде, например, "pset1" директория. И спецификацията проблем зададете ще трябва да направите точно това, така че не трябва да се помни и днес. Но "защитен режим pset1" Изглежда да има никакво въздействие. Но отново, без съобщение за грешка като цяло е добро нещо. Така че, ако напишете "LS" now-- ах, сега Имам един изпълним файл, наречен "здравей" на файл C, наречена "hello.c." И тогава наклонена черта, така че да говори, означава, че това е директория. Така че наистина, сега искам да го отворите. И аз не кликнете два пъти върху него, като в GUI, графична среда. Аз вместо да каже "сд pset1." Enter. Нищо интересно изглежда да има случило, освен моето малко промпт here-- това е метод за информиране на Линукс ми къде съм, така че какво папка е отворена. Това е просто ми казваше изрично за разлика от графично. И ако аз написали "ли," Защо виждам друг подкани веднага, мислите ли, когато аз се изброят съдържанието на pset1? MARIA: Може би не има нещо там. DAVID Malan: Да. Така че тогава ние не трябва явно създал нещо там защото аз току-що създадената директория. Сега, ако аз исках да се създаде file-- за Например, аз може да създадете нов файл. И тогава аз да отида в Запазване и го запишете като, като: "mario.c", ако сте прави стандартната издание на pset един. И тогава, като всеки Mac или PC, просто изберете папка "pset1, Save. И сега файлът е празен. Но нека да я увеличите отново за секунда. Нека да направим ли тук. Сега ние виждаме "mario.c". Така че има няколко други команди, които са си струва да помним над time-- ясен, или Control-L е това, което съм бил удря; защитен режим сме виждали; RM, които сме виждали, както и, което е за премахване или изтриването на файл. Пазете можете да also-- и ако се вгледате в онлайн уроци, ще RM-RF е много често срещан начин да се каже изтриете папка, която има неща в него. Просто бъдете супер, супер внимателни. -rf означава рекурсивно изтриете каквото и да е която се опитвате да изтриете и насила го изтриете. Така рекурсивни средства, ако това е папка с папка с папка с папка, изтриете всички от тях. И насила означава дори не да ме питаш да или не, аз съм сигурен? Така че това е супер опасен начин за изтриване на много неща бързо. Но beware-- твърде често прави безстрашна Студент случайно изтриване, да речем, pset една, например. МАРИЯ: И ако те просто направя -r, те ще да ги питам за всеки един файл. DAVID Malan: Кое е по- умерено дразнещо. MARIA: Да. DAVID Malan: Значи затова толкова много от нас, самостоятелно включена, съм в навик за използване на -rf. Но това е опасно. Така че купувача се пази. И тогава СрН е вид Интересното е кръстен. Така че това е командата ход, който се чувства малко странно защото вие наистина може да го използвате за преместване на файлове от едно място на друго. Например, да предположим, че аз побъркани. Да предположим, че съм създал нов файл за pset. И аз го запише като "greedy.c." Но предполагам, че случайно го спаси в IDE50-- така в моя самия работен плот а не в pset1. Можете да видите, колкото горе вляво. Има "greedy.c." И има няколко решения. Така един, мога да използвам супер-удобен за потребителя начин просто плъзгане и го пуснете. И това всъщност ще решите този проблем. Но днес, ние се опитваме да погледнем най-мистериозните но мощни начини за постигане на това. Така че нека да предприеме "LS" в pset1. И аз само вижте "mario.c." Нека да вървим напред и да направим "сд ..". Така CD отново е промяна директория. ".." Означава това, което, все пак? Последния път, когато каза "сд pset1 ", за да отидат в pset1. Така че, когато казвам "сд ..", това, което правя аз? Наопаки. Да. Така че това ще т.нар родител. Отидете едно ниво нагоре, като излизане от дадена папка. Така Enter. И наистина, погледнете какво го е направил. Това ми се премества само в работното пространство, вместо на в pset1, който е в работно пространство. И сега, ако аз написали "LS", има цял куп неща. В има "greedy.c". Така че сега нека да използваме СрН буквално премести "greedy.c" в pset1. И така, много от Linux команди работят точно по този начин. Те вземат без аргументи, или те вземат един аргумент или те отнеме от две команди аргументи и така нататък. И в този случай, това е буквално прави това, което той казва, макар и succinctly-- премести greedy.c в pset1. Enter. Нищо не изглежда да се случи. Но ако аз направя ли отново, алчни е отишъл. И ако го направя "сд pset1", Enter, и след това Това ли отново, сега е на мястото си. Като настрана, ако за някои reason-- особено ако имате интермитентна мрежова свързаност или сте се разхождат кампус с вашия лаптоп капак затворени и след това да го отворят отново и вашето работно място Изглежда някак извън синхрон, не е голяма работа. Просто рестартирайте браузъра си, прозорец, и тя трябва да RESYNC така, че лявата страна файлов браузър изглежда точно като терминален прозорец. Не се притеснявай. Когато се съмнявате, презаредете страницата, така че Докато сте съхранили файловете вече. ДОБРЕ. Така СрН може да се използва и за преименуване на файлове. И нека да разгледаме най- тази последна команда тук. Така suppose-- и това е супер обща, също в началото на деня. Някои студенти понякога създават файл нарича, нека say-- това, което е още една? Like "WATER.C." Така че аз просто ще крещи, за Няма причина, във всички капачки. Но това не е най- правилното име на файла дори и само заради нашия проблем зададете спецификация не ти казах за да запишете файла като всички капачки "WATER.C." Вместо това, ние очакваме "water.c" с малки букви. И в действителност, това е проблематично, защото check50, програма започваш да се срещнат в проблем зададете една, която автоматично проверява коректността на кода си ще ти крещя, ако това не е така намери "water.c" във всички малки букви. Така че аз трябва да поправя това. Толкова много различни начини за направите това, първият от които ще бъде да контролирате клик или десния бутон на мишката името на файла и просто смяна Rename. Totally глоба да го направя. Но отново, днес, нека го направим малко по-сложен. Нека използваме СрН да се промени "WATER.C" да "water.c." Така че можете да използвате и първият аргумент да го преименувате на втория аргумент ако на втория аргумент не, е в Всъщност, име на директория или папка. Всичко е наред. И накрая, малко trick-- така че аз съм в моята директория работно място в момента. Ако искам да отида в pset една, Със сигурност мога да напишете "сд pset1." Но това е толкова досадно за писане "pset1" или вече имена на файлове или имена на папки все още. Така че много често в Linux, това, което можете да направите, е да започнете да пишете "PSE" и просто да се отегчиш, удари Tab, и нека Фигурата на компютъра го за вас. Super полезно да се получи в този навик. Единственият улов е, ако имате множество файлове или папки, започващи с буквата "р", или "PS", може да се наложи да въведете още няколко преди компютър знае какво да прави. MARIA: Ние обичаме комбинации. DAVID Malan: Тази воля ви спести много време. И също така, както казахме в лекция, вие може да се придвижите нагоре в историята, нагоре и надолу, да се намери наскоро екзекутиран команди, както и. Всичко е наред. Така че сега, нека да насочим вниманието си обратно до една проста програма, здравей свят. Така че ние сме съставили това точно. И сега защо не вземем разгледаме видовете данни и след това преминаване от някои съответстваща Scratch блокове да C. MARIA: Awesome. Така че сега, че сте започнали писането на програми в C, ние ще започнем да говорим за типове данни и променливи. Така че някои типове данни, които сте бихте искали да знаете от сега са тези, които са подчертани в синьо. Така че ние имаме инт първо, което означава цяло число. И който държи цели числа, както ти може да има толкова guessed-- 1, 2, 3, и всички други числа че можеш да се сетиш. DAVID Malan: И също е отрицателно. МАРИЯ: А също и отрицателните, Аха. И 0. Тогава ние имаме плувки, които са числа с плаваща запетая. Така че това е всичко, реалните числа че имат знака след десетичната запетая. Така 5.0, 5.2, и дори по- цифри след десетичната точка, както и, а също така и отрицателните. Тогава ние имаме Чар, който е герой. Затова мисля, че ние говорихме за това в лекция днес. Но ние имаме писма, за example-- A, Б, C-- които да се съхраняват като знак. Но тогава ние имаме много повече символи които да се съхраняват като знак. И тези, които се съхраняват като ASCII. И тогава имаме булев, които са Булев тип. И тези, които се оцени като True или Фалшиви или 1 и 0, съответно. DAVID Malan: И припомни, че BOOL идва от CS50 библиотеката. Така че това не е вграден в C, но това е супер полезно да има понятието за истина и лъжа. И въпреки че може think-- забавно факт. А BOOL технически нуждае колко бита, наистина, за да представляват True False сравнение? Колко бита мислиш ли, че ще ви е необходимо, максимално? Да, само един. Така се оказва, че C Не мога да ви дам само един бит. Най-малката единица мярка можете да получите е осем. Така че това е малко разточителни те сте като се използва цялата байт или осем бита, да представлява Вярно или невярно. Но това е просто начина, това е осъществява в С от библиотеката CS50. MARIA: и след това тези, които ние сме Няма да говорим за така обстойно полето now-- двойна, това е за по-големи плувки. Long дългосрочен и краткосрочен също за цели числа. DAVID Malan: Наистина. В хакер издание на pset една, ние всъщност използват дълго, дълго. Но за стандартното издание, тя не трябва да бъде необходимо. MARIA: Cool. ДОБРЕ. Така operators-- трябва да сте вероятно са запознати с повечето от тях. Освен +; изваждане, -. За умножение, ние имаме *. Така че не Х, че ние обикновено се използват. Division, имаме наклонената черта. И по модул е ​​нашият последен оператор, който ние ще говорим за момента. Това е оператор, който ни позволява да вземе остатъка от деление. Така че, ако имаме 4% 2, 4, разделена с 2 е 2 и остатък 0. Така 4% 2 е 0. 4% 3 е 1. 4% 5 е 4, тъй като може да се досети. И не забравяйте, когато се използват всички тези операторите да използват правилата PEMDAS. DAVID Malan: Така че да е ясно, ако направя 4% 2, защо е, че 0, по-точно? MARIA: Тъй 4, разделено на 2 е 2 и остатък 0. Така че по модул ни дава, че останалата част като противопоставя на резултата от разделянето. DAVID Malan: И наистина, това, което ние ще намерим този полезен е, че в някои проблеми това не е задължително един, ако искате да имате ефект на ограничаване на себе си до поредица от номера като 0 през нещо, можете да използвате модул да обгърне по-рано от 2 млрд като или стойността на 4000000000, че ние говорихме за в лекция. MARIA: Да. И дори в "алчни" бихме могли. DAVID Malan: Да, в проблем зададете една, както добре. MARIA: Да, хубаво. DAVID Malan: Добър намек. MARIA: Съжалявам. Булева expressions-- така за булеви оператори, ние ще говорим за всичко от тези, които виждате тук. Така че в момента, ние имаме две равни признаци, изброени за равни. Така че това са за сравнение. Досега сме виждали само един знак за равенство. Това е, когато ние присвоите стойност на променлива. Така че, ако сме виждали инт п = 5, а след това ние сме възложени 5 до променлива п. Но ако искаме да използваме за == За сравнение, ние можем да се провери, ако п == 5. И ако п == 5, а след това е вярно. Така булеви оператори ни позволи, в общи линии, за да се оцени Булева изрази, до Вярно или невярно. Така че не equals-- Имаме марка и равни удивителен. Така че ние също може да се провери, ако п не е равно 5-- така п! = 5. По-малко от по-малко от или равно на, по-голяма от, по-голямо от или равно на, и след това имаме логическото И и логическото OR. И тези, които ни позволяват да се оцени множество булеви изрази заедно всъщност да идват заедно като едно цяло Булев израз. Така че, ако искаме да намерим брой, да кажем, която е по-голяма от 5, но по-малко от 15 В същото време, ние ще използва И логично оператор, за да видите, ако п е по-голяма от 5 && N-малко от 15. DAVID Malan: И тук, също, че е много лесно в началото на деня до случайно използвате само един амперсанд или единична вертикална лента. И се надяваме, компилаторът ще крещи на вас, защото те всъщност има съвсем различно значение. За тези, любопитни, те са използвани за побитови операции, работещи на отделни битове. Но пък искате двойката от тях тук. И супер важно е, че първо една, знака за равенство, която е оператор на половете като за разлика от оператора за присвояване. МАРИЯ: И вертикалната лента е разположен между изтриване и връщане. DAVID Malan: Да. На една типична американска клавиатура. MARIA: Да. Така че нека да скочи направо в условни конструкции. В Scratch, вие сте Вече видяхме, най-вероятно, ако изявления, които ви позволяват да проверете дали нещо е вярно, тогава правя нещо друго. Така че може да са искали да проверите дали вашият спрайт е докосва някой друг спрайт или на границата на вашия екран. И тогава може да са искали да завършите играта или правя нещо друго. Така че синтаксиса за това е "ако (състояние)." Така че, ако си спрайт докосва нещо, След това се е вътре фигурните скоби. Тогава ние имаме, ако иначе отчети. Else ни позволява да направим нещо Ако условието, че проверите в началото не е вярно. Така че, ако на спрайт докосва гранично направите това, друго правя нещо друго. Така че по друг начин да направим нещо друго. Тогава ние имаме кратък пример за това. Така че, ако (military_time <12), ние Искам да ФОРМАТ "Добро утро!" Иначе ние ще ФОРМАТ "Добър вечер!" Basic например. DAVID Malan: Добро. MARIA: Cool. Така че сега ние имаме ключ отчети. Превключете отчети като цяло могат да ни позволи да направим много и също нещо че ние просто говорихме за с, ако отчети. Например, в момента имаме обща форма на отчета за превключване която ни позволява да се вземат променлива, наречена н а и го сравни с много различни стойности, които ние тук призоваха constant1, constant2. Ние може да има много повече. И тези, които се наричат ​​случаи. Така че, ако имаме превключвател statement-- и това работи само за integers-- имаме променлива в този случай това е п. Ако променливата е N равна на constant1, ние ще изпълни някои фрагмент от кода или нещо, което искаме да направим. И тогава ние ще счупи. Така почивката означава, че отчета за превключване ще спре, ако изпълняващата п е равно на constant1, и след това програмата ви ще продължи. Тя ще излезете вън от превключите изявление и това ще продължи да прави нещо друго. Ако, обаче, п не е равно constant1, тогава калъф за constant2 ще бъдат проверени. Така че, ако п е равно constant2, че друг фрагмент от кода ще се изпълни. И тогава тя ще ти счупя ако това е равна на нея. И тогава можем да имаме also-- не непременно, though-- случай на неизпълнение, което ще се случи, ако п не е равно някой от случаите, които сте изброени. И в случай на неизпълнение, ние също не се нуждаят от почивка задължително защото отчета за преминаване ще знаете че тя трябва да приключи, след като по подразбиране случай, ако случаят е такъв. DAVID Malan: Но стилистично, ние винаги го сложи там. MARIA: Да. DAVID Malan: Да. Така че особено когато започвате, особено ако сред тези, по-малко удобно, бих лично Просто Препоръчваме остана с ИС и IFS-иначе и ако-иначе-ако-иначе и така нататък, ако само защото те са малко по- по-ясна. Това е хубава оптимизация, или понякога дори естетически го прави кода по-разбираемо. И всъщност, вероятно средата на семестъра ще видим проблем зададете, когато тя просто изглежда по-добре и по-лесно да се чете за хората с помощта на превключвател изявление. Но не се притеснявайте за придържайки се към тази твърде рано. MARIA: Да. Ако имате много, ако степента отчети, тя просто не може да е много разбираемо. Тя не може да бъде много бързо за вас да мине през него. Така че може да преминат отчети да бъде много полезен, както добре. И също така, не remember-- не правим забравяйте да сложите на почивките в там. DAVID Malan: Не забравяйте това. MARIA: Защото тогава може да падне чрез един от случая. Така че нека да кажем, че при constant1 не са имали изявление прекъсване в нея. След това ние може да падне чрез вътре случай constant2. И ние не искаме да правим, че ако вече сме достигнали случай constant1 и това е равно на п. Така, например, ако имаме променлива N, че съдържа редица клас, и ние искаме да видим какво е това клас is-- ако п е равно на 50, отиваме да отпечатате "CS50 е Въведение в компютърните науки I. " След това ние ще се счупят. И това е. Ако, обаче, п е равно до 51, отиваме да отпечатате "CS51 е Въведение да Computer Science II. " След това, отново, ние ще се счупят. Въпреки това, ако след това ще се постави 124, 61, всеки друг номер, който може да се сетиш, или програма не върви да признае това. Така че това ще каже: "Съжалявам, че съм не са запознати с този клас. " И то се случва да се счупи. DAVID Malan: Така че можете да видите наистина на ако, иначе ако, иначе идея тук. Това е просто различен синтаксис за изразяване на точно същата идея. MARIA: Точно така. Сега имаме нашите трикомпонентни оператори. Така трикомпонентни оператори имат три parts-- условие, нещо да се направи, ако това условие е вярно, и след това нещо да се направи ако това условие не е верен. Така че виждате, общо взето, синтаксиса на това тук. Имаме въпросителния знак, и След the-- какво ние наричаме това? DAVID Malan: The дебелото черво. MARIA: Colon. Благодаря. Извинете. Така че нека да разгледаме нашия пример за видим дали можем да придаде смисъл на this-- class_num == 50. Така че тук ние виждаме нашия Булев оператор == че сравнява променлива class_num 50. Така class_num магазини цяло число. И ако това число се равнява на 50, а след това ние сме ще съхранява "David Malan" вътре професор низ. Ако номерът клас не равнява на 50, "не David Malan" ще бъде професорът. DAVID Malan: Благодаря. И така, това изглежда еквивалентна на какво, бихте ли казали, на пръв поглед? MARIA: За мен това изглежда като, ако иначе отчети. DAVID Malan: Да. И в действителност, това е един вид от доста един лайнер, така да се каже, за изпълнение точно логиката на друго, ако- но прави всичко в една стъпка. MARIA: Точно така. Да. Така че, ако иначе отчети мощ заемат много място. Те може да са твърде дълъг за нещо толкова просто като това. Така че това може да бъде много накратко и много хубаво. Така че сега отиваме в гледаш изпълняващата нещо отново и отново, така проверка за обуслови няколко пъти и след това продължава да се направи нещо докато това условие е вярно. Така че това ни води добре в докато примки. Вляво, имаме нашата първа линия, докато. Така че, докато нещо не е вярно, направи нещо отново и отново. Така че не забравяйте да забележите, че нашите условие тук е валидиран в горната част. Като има предвид, с втората ни loop-- ние наричаме че да не се прави, докато loop-- правим нещо, След това ние проверяваме за състояние. И ако това условие продължава да е вярно, ние се върна и да направя това нещо отново. Така че основната разлика е, когато условието се проверява за. И кодът никога не може да бъде изпълнена, ако условието не е Вярно с веригата на време. Като има предвид, с направи-време линия, имаме кода че винаги е изпълнен най-малко веднъж. И след това, докато условието продължава да е вярно, ние можем да се върнем и да превъртите отново вътре. Така че, защо мислиш, че щяхме да използваме а да не се прави линия, докато над една линия, докато? Право. Така че, ако искаме да промпт потребителя за някакъв вход, ако искаме да ги питам да въведете своето име, ние искаме да поне да поиска от тях веднъж. И ако те влизат това име, че не сме Ще ги питам отново защото ние вече го знаем. Но ако те не се вписват тяхно име, или ако те въведете нещо, което е очевидно не име, ние все още искате да продължите с молба за за тяхното име. DAVID Malan: И в лекция имахме една като този с получите положителен INT Например, когато няма какво да провери на първо, защото не трябва дори намерила едно цяло число. Така че ние искаме да направим this-- получите инт от user-- след това да го провери, може би, отново и отново и отново. MARIA: Точно така. За loops-- OK. За вериги може да ни позволяват да правите почти точно същото нещо, както добре. Това всъщност е точно същото нещо. Така че няма нищо, което можете да правите с вериги за че няма да бъде в състояние общо с докато примки. Но за вериги може да изглежда малко малко по-сложно синтактично защото те имат три части вътре какво беше преди точно състояние с докато примки. Така първата част, които можете море, най-лявата, ние имаме "инт джуджета = 0." Така че това е мястото, където ние инициализира нашата променлива. Тогава ние имаме и запетая и "джуджета <7." Така че това е мястото, където се състояние, в действителност. Така че това е, което ние ще трябва постави само в това време loop-- "докато джуджета <7." Ето, че отива в средата на нашия за цикъл. Така "dwaves <7." И тогава нашата последна част е "джуджета ++" което е мястото, където ние актуализираме нашата променлива. Така че важното да осъзнаят е, че това ще мине през това за цикъл седем пъти и изпълни седем пъти. Така че ние имаме седем джуджета, и всички те са Ще кажете: "Аз съм тук, да ви помогне, Snow White " защото те са готови да помогне на Снежанка. С докато примки, ние бихме направили инициализация и актуализирането не в състоянието, отново, но преди или вътре в контура, докато за да се уверите, че we-- защото винаги се нуждаем от тези части. Така че, за да се уверите, че имаме тях, ние нямаше да ги добавя още , просто не вътре в скобите. DAVID Malan: А, така че изглежда like-- в лекцията, например, Аз почти винаги се използва, като, аз и п и доста скучни променливи. Тя изглежда като можете да използвате по- хитро име променливи, също. MARIA: Да, това е действително много хубаво да се използва малко по-описателни променливи защото особено ако някой друг е четене вашата code-- може би сте грейдер или ако сте си сътрудничат с somebody-- искате да се уверите, че те разберем това, което правиш. ДОБРЕ. Така че това е нещо много funky-- за контур във вътрешността на за цикъл. Аз не знам дали сме виждали преди. Вероятно не. Но всъщност ние можем да имаме this-- така контури вместо вериги. Така че не всеки иска да ходи може би мен през какво става тук? DAVID Malan: Ще взема хладно оръжие. MARIA: Cool. DAVID Malan: OK. Така че, spoiler-- искаме да отпечатате неща това е в долния десен ъгъл там. MARIA: Точно така. Да, да. DAVID Malan: Така че ние сме просто сложи това примерно извеждане там. Така че мога да се направи извод от най-горната линия, която сте итерации през редовете най-външния контур, така да се каже. И ти итерации над колони с вътрешния цикъл. И интуитивно, това трябва да се надяваме, че има смисъл защото по природа на всяка програма, които сме виждали преди, ФОРМАТ, което е най- функция ние използваме, в крайна сметка, има възможност за отпечатване на неща по същество, ред по ред. Подобно, след като веднъж сте изведен нов ред, има не удвояване назад и отпечатване на нещо по-висока в екрана, поне не се използва ФОРМАТ като този. И така, в тази връзка, той прави чувството, че най-външния контур трябва да се позовава на редовете защото за всеки даден ред, започваш да искаш да разпечатате XXXXX, и след това преминете към следващия ред, XXXXX. Така редове са на първо място. И след това в рамките на всеки ред, да печатате колони. Ако сте се опитали да го направя на противоположна, то вероятно не би излезе като имате намерение. MARIA: Да. Ние просто не можех да се върна в предишния ред с ФОРМАТ. DAVID Malan: И това, което е интересно на днешния разговор за обхвата, всъщност, е, че ред е инт която е обявена в най-горната линия. Но забележете, че тя все още е вътре, така да се каже, фигурните скоби, че непосредствено следва, въпреки че това не е технически в рамките на тези фигурни скоби. Така ред е в обхват за цялост на фрагмент от кода, както вътре, така на външния контур за и във вътрешността на вътрешната за контур. Но от друга страна, когато е колона по обхват? Променливата колона? Да, само в рамките контур. И това е ОК, защото ние не достъп то извън нейните фигурни скоби. Всичко, което правим, е за печат на нова Онлайн в самия край там. Така че в действителност е OK. Така че това има ефект, тя изглежда като, за правене на три реда и четири колони. MARIA: Точно така. Така че първо ние преминаваме през първата ни ред. И точно в нашия първи ред, ние правим четири колони вътре в първия ред. Така че ние разпечатате четири Х. И тогава можем да излезете на линия за, тъй като вече сме разпечатан четири Х. И ние отпечатате нов ред. И тогава ние проверете същия процес за още две редици да се направи общо три. DAVID Malan: И това е да се отбележи, че е само един артефакт на шрифта, фактът, че продукцията на пробата Така изглежда много по-висок, като че ли е по- редове от колони. Но това е само защото Х е по-висок, отколкото е широка. Това е всичко, което се случва там, плюс бялото пространство между линиите. MARIA: Точно така. Готино. DAVID Malan: Добре. Така че един бърз поглед на проблем зададете една, предприеме някакви въпроси, а след това се отложи? Всичко е наред. Така че в проблем зададете една, има три първични предизвикателства, в крайна сметка. Но първо, вие ще откриете че проблемът избран спецификация, както с много на psets тази есен, ще ходиш през няколко подгряващи упражнения, ви посоча няколко ресурси че вие ​​може или не може вече не са го виждали. Например, CS50 има набор от шорти, които са кратки клипове, не за разлика от това, но са много тема specific-- може би пет минути, 10 минути в дължина на вериги или относно условията или на алгоритми или по-късно теми за напреднали, както и. И ние като цяло вграждане тези на проблема комплекти, така че студентите имат ресурсите, с които да преразгледа материал, който може да има вече излезе в лекция или секция. Но този път тя е по-фокусиран и още на върха на пръстите си. Ние също така са склонни да се вгради в проблем определя нещата наречените реални тестове. Така че почти всички от примерите да направя в лекция, на сцената тук, ние също са заснети от камера в преминете на по-бавно, по-интимна репетиция с мен на моя лаптоп от същия кодекс, ред по ред така че в клас, ние често ще обезмаслено чрез нещо или някого ще се намеся с отговори на един въпрос. Но това не означава непременно мивка в за всеки в публиката. Така че вие ​​ще намерите код за сваляне за повечето от примерите , което правим тук, в лекция, така че да може да минеш през нея на свой собствен темп и назад или напред, или пропуснете напълно, ако искате. Има няколко често Warm-Up въпроси, които ви помоля да сортирате на засили този материал и се уверете, че сте удобен преди да продължите с останалата част от pset. И след това, разбира се, е самият pset. И едно от нещата, ние много съзнателно направя в CS50 е почти всеки безинтересно или интелектуално безинтересно механична стъпка, която може да се наложи да се направи почти винаги е много добре документирана. В течение на срока, ние ще започнете да задавате въпроси по реторични като си спомня как да направим това или онова? Но като цяло, ще откриете, че наборите проблемни можете да получите чрез механиката на нещо, така че интересните, интелектуални предизвикателства в крайна сметка се остави да те ученика. С това каза, Zamyla, на които ние отглеждани позовавайки днес в лекция, е една от нашите дългогодишни служители член, който също така притежава Запознай по конкретни проблеми като Марио pset и алчни, макар и не поливате през тази година. И това е в тези, Запознай, че тя често предлага някои съвети и трикове за как да се процедира, никога не ви казвам, точно какво да правят, но rather-- като състояние, ако will-- който ви дава най-малко един Няколко идеи, така че тя е до вас, в крайна сметка, да се реши как да се обръщат към тях. MARIA: Нещо като на високо равнище, разбиране на логиката на това, ние ви молим да се направи. DAVID Malan: Точно така. И, всъщност, е Zamyla Запознай са предназначени За да отговорите на най-често задаван въпрос от къде направя аз започнах, особено когато тези дълги спецификациите малко обезсърчително дал целия текст и образи, които те имат в тях. Така water.c, ще откриете след като сте го завършили, всъщност е относително проста. Абсолютно сме един куп от вас ще се взриви главите си срещу стената, опитващи да разбера защо това не е съставянето или защо не е тичане правилно. Но след като сте готови с него и след като веднъж сте прекара известно време се боря с всеки на буболечки, които може да имат, вие ще откриете, че това е много кратка програма. Това може да бъде направено само за няколко реда код, повечето от които сме виждали тук, в лекция вече, ако ви прибера правилните градивните елементи. И тъй като ние предлагаме тук, че ще ходи да попитам можете да определите колко минути някой се къпех на територията на колежа. Ние зададени в проблема задаване на скоростта на потока на водата в подобно, душ с ниска поток главата, който много прилича на клип Зайнфелд видяхме вчера или обратното него. И след това просто трябва да направя малко на математиката, really-- аритметика, използвайки C да кажа ни колко, приблизително, бутилки с вода е, че еквивалентна на, ако сме като п-минутен душ. Сега, в mario.c, това се случва да бъде малко по-дълъг програма. Той все още няма да бъде толкова дълго. Само няколко линии с дължина над water.c. Но това ще бъде възможност да пресъздаде старата школа Mario пирамида от Супер Марио Brothers или някои последващи. Това няма да изглежда толкова хубава или като колоритен като че един там. Ние просто ще използвате малки Hashtags като имаме тук на екрана използване на ASCII текст. Но това ще се сближат и съща идея. И това ще бъде упражняват тази на пръв поглед изглежда доста просто simple-- отпечатате прост пирамида. Но има няколко характеристики тук, че са интересни. Забележете, че най-дясната ръба пирамидата всъщност има широка два. Така че има две еднакви колони височина, които прави го изискват малко малко мисъл да се направи Сигурни ли сте, че точно така се получи, тъй като за разлика от просто перфектно ъглова линия. Така, че е малко на случая в корнер но отговаря на действителната игра. И тя също не-очевидно на пръв поглед как да отпечатате бялото пространство. Така че, когато погледнем в примерен резултат here-- и тя също е в spec-- него вид прилича на правоъгълник, но диагонал на правоъгълник е отрязана, и това е само бели пространства, така да се каже. И така на често задавани въпрос тук е винаги, добре, как мога да се движи на Hashtags над надясно? Или как да отпечатам празните пространства? И това е действително по-лесно отколкото повечето ученици мислят. Нали така? Можете да го сближат визуално чрез просто потегля пространството лента, веднъж или два пъти или три пъти. И така, въпреки че с ФОРМАТ ние почти Винаги разпечатате низ или инт или думи като "Здравей, свят "или поредица от думи, можете да отпечатате само цитат, пространство, край на цитата. И това действително ще даде можете бяло пространство там. Така че имайте това предвид и не overthink това. Вие наистина трябва да реши ред по ред по ред, а не за разлика вашата например преди малко, колко от тези, колони трябва да бъдат бели пространства и колко от тях трябва да бъде Hashtags. Това ще отнеме малко време, но това е в крайна сметка логически пъзел на видове. MARIA: Да. Но логиката на става ред по ред ще бъде много полезно тук. DAVID Malan: Да. Мисля, примерен код можете gave-- дори макар че не беше пълна програма. Все още трябва инт и основният и недействителни и #include stdio.h, много от нещата, от лекция. Но градивните елементи изглежда да е там. И след това на последно място е нещо, малко по-алгоритмично. Така се оказва, че всеки път, когато отидат в CVS или всеки магазин и някой ви ръце на сметки или монети като промяна касиер, Оказва се, че те, хората, независимо дали те го знаят или не, Вероятно използвате това, което е наречено алчен алгоритъм, при което, ако се дължи, да речем, $ 21 в климата, защото по някаква причина сте купили нещо много евтино с много голям законопроект в CVS, това ще бъде наистина досадно, ако касиер ти даде 21 сингъла, или, по-лоши все пак, един куп монети. По-скоро това, което всеки разумен човек е Вероятно ще направя, е, че ще да вземете $ 20, а след това за $ 1-сметката, и те предаде само две сметки в този случай. MARIA: Така че те се стреми да минимизира промяната, която те дават обратно към вас. DAVID Malan: Точно така. И същата сделка с монети, както добре. Ако сте се дължи, да речем, $ 0.50, надявам се не искаш 50 стотинки. Вие искате вместо две квартали, например. Сега, това не се предположи, че касата има достатъчно от всяка деноминация, която той или тя може да искате да ви дам. Но ние ви позволяват да се предположи, колкото по проблема. И целта, в крайна сметка, е да приложи в C код алчен алгоритъм. Така потребителят се оставя да пишете в колко промените, той или тя се дължи на долара и центове, някакъв вид плаваща запетая стойност вероятно. И тогава ще трябва да се направи на математиката и разбера алгоритмично, добре, колко монети мога да дам можете минимално да ви дам точно тази сума на климата. Но има и ще бъде няколко трудни части тук, нали? Както има цяла неточност въпрос. MARIA: Точно така. Така че с плаваща точка ценности имат неточности. Знаете ли да говорим за това в лекция днес? DAVID Malan: Направихме Последният път, в лекция. Ние говорихме за неточност. А вие не искате да мамят потребителя на колко промени, той или тя се дължи. И така помагалото, в проблемната определя спецификацията, даде някои мисли, в крайна сметка, за да се как може да се смекчат тези неясноти грешки, потенциално. Тя може да бъде избегната, разбира се, за входовете, за които говорим. И, всъщност, pennies-- може би ще се отложи до Zamyla, Мисля, че за трикове там. Така че в крайна сметка, вие ще откриете прогресия на проблеми през тази седмица, първият от които е доста малък, след среда, след това малко по-голям. Но всички от тях използват сградата пресечки от миналата седмица, от тази supersection, проблем зададете спецификация Ви излага на безброй ресурси. Но все пак, ако изобщо се борят, особено сред тези, които по-малко удобни без предварителни фон, дойде на работното време в понеделник и вторник и Сряда и четвъртък. Отидете на CS50 Обсъдете чрез сайт на курса, чрез което можете да говорите с персонал и съученици. Но в крайна сметка, мисля, че най-добър съвет е просто да започнете рано. Това не е от вида на класа, която ви би трябвало да започнат в сряда psets нощ, или по-лошо в четвъртък вечер. MARIA: Най-добрият ми съвет е да са започнали от понеделник. DAVID Malan: понеделник. Така че, ако не сте започнали already-- не. Но дори и ако не понеделник, а след това във вторник. Колкото по-рано толкова по-добре. И това е причината, поради която Разбира се има толкова много късни дни е да ви дам малко на психологически натиск да започне по-рано, но все пак нека нещата се изплъзват, когато нещата отнемат повече отколкото очаквате. МАРИЯ: И вие искате да се възползвате от работно време, колкото можете, също. DAVID Malan: Всякакви въпроси? Всичко е наред. Е, защо да не отлага тук?