[Музички] Дејвид MALAN: Здраво на сите. Ова е supersection CS50 е. Доделени Секции нема да почне уште една недела. И така денес, јас сум тука with-- МАРИЈА: Марија. Дејвид MALAN: --to всушност погледнеме проблемот постави една, на курсот првите недели на материјалот, ти се ориентирани со CS50 ИРО, малку на Linux, оперативниот систем кој е се извршува на IDE, како и погледнеме некои од транзицијата од нула до C водечка до проблем во собата еден. Значи без понатамошно ado, во еден проблем во собата, си оди за да биде воведен за да CS50 ИРО, која е овој веб-базирани програмирање животната средина кои ги користат со цел да им пишуваат програми. Тоа е дизајниран да изгледа многу потсетува на еден типичен компјутер систем кој работи на оперативниот систем наречен Линукс. Но, тоа е во т.н. облак, што значи дека сите во класот всушност може да има неговата или нејзината своја сметка, а го користат, како и. Па повеќето од вас веројатно никогаш не се користи Линукс животната средина пред или можеби дури и командната линија на животната средина. И командната линија околина е различна. Тоа е за сите текстуални. Сето тоа е тастатура команди. А не е ни mousing, нема икони, нема дијалог прозорците, немаше менија. Тоа е чисто текст. Така на прв, тој вид на чувствувам како чекор назад во поглед на софистицираност. Но тоа завршува се многу помоќен, секако, за компјутерски научник, во крајна линија. Па ајде да ги разгледаме. Јас сум тука на CS50.io, преку кој можете да влезете во CS50 ИРО. И многу сличен на гребење, има три основни области на овој екран. Така, на левата страна, имаме она што ќе биде прелистувачот на датотеки. И има во оваа папка врвот, кој е во моментов празна бидејќи јас се ослободи од сите мои додадени фајлови: пред supersection. И тоа е каде што ние ќе спаси Ц датотеки кои ги пишувам. Во горниот десен агол, имаме место каде сите наши код се случува да се пишува. И, навистина, ако јас кликнете на ова, плус, ова се случува да ми дозволи да се избере нова датотека. И тука јас да почнете со пишување на код или Ц, навистина, било кој број на други јазици. А потоа на дното каде што се вели jharvard @ ide50-- и твое ќе кажам нешто малку different-- она ​​што се нарекува овој? Терминален прозорец. Је. Па на прозорецот на терминалот е т.н. командната линија интерфејс преку кој може да комуницирате со основните оперативен систем. И сега за сега, ние ќе треба да направи многу малку употреба на this-- само за да ги собере, да се погледне во пораки за грешки, кои ги гледаме, и да се кандидира на нашите програми. Но на крајот, ние ќе да се направи многу повеќе, како и. И може дури да се инсталира софтвер и администрирање на вашиот работен простор рок CS50 ИРО, како и. Но повеќе за тоа друг пат. Значи, да се оди напред и да се напише многу едноставна програма само да се оди преку загревање на hello.c, што можеби е наједноставниот програма може да се напише. Јас веќе се отвори нов таб. Одам да се оди напред и да велат вклучуваат стандардни io.h. Тогаш int главната (празно). А потоа printf ("Здраво, свет" обратна коса црта n, во близина понуда, блиску заграда, и точка-запирка. Во ред. Па сега се забележи мојот прозорец е наслов. Па јас сум многу брзо одење да се оди до фајл, зачувајте. И тоа е важно Ве повикувам да не овој "здраво". Толку многу честа грешка, особено во еден проблем во собата, е да се случајно само да се јавите на вашиот Програмата "вода" или "алчен" или "Марио" или "кредит" или слично. Но вие всушност сакате да се направи Дали сте сигурни дека имаат наставката на датотеката бидејќи ова е единствениот начин на кој компајлерот и и уредник код знае дека ти си всушност пишување C код. Па дозволете ми да оди напред и да кликнете на Зачувај. И сега, исто така, она што CS50 ИРО го направи за нас е тоа е, исто така, синтакса истакна сè. Така, тоа е направено се што е многу шарени. И целта на целата дека не е функционална. Тоа е само да се привлече очите кон концептуално различни парчиња на оваа програма. Значи, да се оди напред и да ги собере на оваа. И можам да ги собере на оваа во неколку начини. И во една недела, старата школа начин што го направивме тоа беше буквално на команда line-- "ѕвекот hello.c." И јас тогаш притиснете Enter. И ништо не чини да се случи во терминален прозорец. Но, она што го направи промена во IDE? Каде што, пак, ИРО само значи Интегриран развој на животната средина. Тоа е фенси начин да се каже овој интегриран развој средина за развој на софтвер. Значи она што не се промени во корисничкиот интерфејс? Што ќе забележите што е различно, Марија? МАРИЈА: јас забележав нешто под IDE50 папката до тука. Дејвид MALAN: Да. Значи до тука, не само дали имаме "hello.c." Ние исто така имаме "a.out", која е вид на нем име за програмата. Но, навистина, тоа е стандардно име за програма, кога вие само компајлирате вашиот код и да не кажам на компајлерот она датотека на излез. Па ако сакате да ја извршите оваа, јас треба да му кажете на compiler-- или подобро, јас треба да се каже на работниот простор што јас сакате да ја извршите програмата наречена "a.out". Влезе. И таму е "Здраво, светот. "сега" ./ ". е всушност важно. Иако нормално ние само напише имињата на команди, кога тоа е програма сте напишано, вие не сакате да се каже "./" бидејќи тоа експлицитно кажува Линукс што сакате да ја извршите програмата наречена "a.out" тоа е во овој, каде што точката значи овој директориум дека јас сум во моментов во кој се случува да биде простор наречен "a.out. Затоа што ако јас само рече "a.out" Enter, Одам да се добие "a.out команда не пронајдени ", бидејќи computer-- бидејќи јас измислена "a.out;" тоа не дојде со computer-- не знаат каде да се погледне за неа, и покрај тоа што е во право под нос, така да се каже. ВО РЕД. За да можеме да го промените ова биде "ѕвекот -o здраво hello.c." И ако јас притиснете ентер, што програма е ова се случува за излез за мене? Кое е името на датотеката? Да, во грбот. Тоа е точно. "Здраво". Па "Здраво", се случува да биде името на програмата затоа што ние сме се користи т.н. аргумент командната линија, што е само начин на менување на однесувањето на компајлерот да всушност излез специфично име на датотека. И, навистина, ако можам да зумирате надвор и да се погледне до тука, сега имам само "a.out" и "hello.c", но, исто така, "Здраво", како и. Па сега можам да го направам "./hello" Enter. И таму е "Здраво, свет". Но lastly-- и ова сега ќе биде на конгресот ние ги користиме во текот на семестар, typically-- е исто така можете само велат "направи здраво". И навистина, тоа е велејќи дека е до до денес, бидејќи тоа веќе постои. Дозволете ми да оди напред и да се отстранат, со команда РМ, и двете "a.out" - и да каже "да ги отстрани обична датотека a.out?" Тоа само значи дека, вие сте Дали сте сигурни дека сакате да ја избришете? Одам да се каже да. А потоа јас ќе одам да се отстрани "Здраво", но не и "hello.c." Одам да се каже "да" експлицитно, но "y" е доволно, исто така. И сега се забележи ако јас напишете ls-- која, да се потсетиме, значи list-- што ги прикажува сите на датотеки во мојата папка. И, навистина, ако можам да зумирате надвор и да се погледне во горниот лев агол, потврдува дека она што е во оваа папка, дури и иако тоа е етикетиран како IDE50 се тука и нема простор за работа, тоа е само "hello.c." Па сега овде, ако јас се "направи здраво", Внесете, сега гледам многу подолг команда, туку пософистицирани команда кој ќе за да бидат корисни во неделите што доаѓаат. И сега можам да кажам "./hello." Значи, да се земе брз турнеја некои други Линукс команди. Тогаш зошто да не се преземе чекор врати и всушност поглед на C повеќе генерално, транзиција од нула до C, а потоа заврши со изгледот на првиот проблем поставени во C. Во ред. Па јас ќе одам да се оди напред и само се чисти до просторот за работа ми со Control-L само да се задржи на екранот уредни. Но дека нема функционални влијаат на друг начин. Потсетиме дека ние сме виделе неколку команди сега. Значи ние сме виделе ѕвекот, кои генерално ќе се не ќе мора да се изврши рачно повеќе. Наместо тоа, ние ќе го користите шминка. Но, ние исто така, видов ls, што покажува листата на датотеки во мојата листа. И сега, зошто е there-- има две додадени фајлови: сега, "Здраво" и "hello.c." Зошто постои ѕвезда или ѕвездичка после "здраво"? Што мислел кои означуваат, врз од она што го видовме во една недела? Што мислиш? Што значи ѕвездата означува? МАРИЈА: For-- програмата "здраво"? Дејвид MALAN: "Здраво *". Је. О да? Ох, извршна. Тоа е точно. Па тоа значи дека "Здраво" е извршна. Значи, навистина, тоа е зошто Можам да направам "./hello." Во ред. Па што друго можам да направам во оваа ситуација? Па, излегува можам исто така да креирате директориуми. Па дозволете ми да оди напред и да се создаде, на пример, "pset1" директориум. И спецификацијата проблем во собата ќе мора да го прават токму тоа, така да не мора да се сеќавам и денес. Но "mkdir pset1", се чини нема да има влијание. Но, повторно, нема порака за грешка е генерално добра работа. Значи, ако јас напишете "ls" now-- ах, сега Имам извршна датотека наречена "Здраво", на датотеката C наречен "hello.c." А потоа и коса црта на крајот, така да зборуваат, значи дека ова е директориум. Значи, навистина, сега сакам да го отворите. И не ми е двоен клик на неа, како во GUI, графичка околина. Јас наместо да каже "cd pset1." Влезе. Ништо интересно се чини дека има се случи, освен моето мало навремена here-- ова е начин на потсетување на Линукс мене каде што сум, па што папка е отворен. Тоа е само да ми каже експлицитно што е спротивно на графички. И ако јас напишете "ls", зошто гледам друг го извести веднаш, мислите, кога ќе се листа на содржината на pset1? МАРИЈА: Најверојатно не има нешто таму. Дејвид MALAN: Да. Па тогаш не сме очигледно создаде нешто таму бидејќи јас само создаде именикот. Сега, ако сакав да се создаде file-- за На пример, јас би можеле да креирате нова датотека. И тогаш би можел да оди на Спаси и спаси како, како, "mario.c" ако правиш Стандардното издание на pset еден. А потоа, како и секој Mac или PC, само изберете ја папката "pset1, Save. И сега на датотека е празна. Но, ајде да зумирате повторно за една секунда. Ајде да го направиме ls тука. Сега можеме да видиме "mario.c". Па има неколку други команди кои вреди да се имајќи на ум во текот time-- јасно, или контрола-L е она што сум е удирање; mkdir сме виделе; РМ што сум го видел, како и, што е за отстранување или бришење на датотеки. Пазете можете да also-- и ако се погледне на онлајн вежби, ќе РМ -rf е многу заеднички начин да се каже избришете фолдер кој има работи во неа. Само да се биде супер, супер внимателни. -rf значи рекурзивно избришете што и да е што се обидувате да ги избришете и насилно ја избришете. Па рекурзивен средство ако тоа е папка со папка со папка со папка, избришете сите од нив. И насилно значи дури и не ме праша да или не, дали сум сигурна? Па тоа е супер опасен начин на бришење на многу работи брзо. Но beware-- премногу често го прави смел студент случајно бришење, да речеме, pset еден, на пример. МАРИЈА: И ако тие само направи -r, тие се случува да ги прашате за секоја датотека. Дејвид MALAN: Која е умерено досадни. МАРИЈА: Да. Дејвид MALAN: Значи тоа е зошто толку многу од нас, само се вклучени, сум во навика на користење -rf. Но, тоа е опасно. Па купувачот пазете се. А потоа mv е вид на Интересно е именуван. Значи ова е команда потег, која се чувствува малку чудно затоа што навистина може да го користат за да преместите датотеки од едно место до друго. На пример, да претпоставиме дека сум збркана. Да претпоставиме дека сум создадена нова датотека за pset. И јас тоа го зачувува како "greedy.c." Но, претпоставувам дека случајно го спаси во IDE50-- така што во мојот самиот работен простор а не во pset1. Може да се види колку во горниот лев агол. Има "greedy.c." И има неколку решенија. Значи, можам да го користите супер-лесен начин на само влечење и пуштање. И дека, всушност, би го надминете овој проблем. Но, денес, ние се обидуваме да се погледне повеќе таинствени, но моќни начини направи ова. Па дозволете ми да ги преземе "ls" во pset1. А јас само се види "mario.c." Дозволете ми да оди напред и да се направи "cd ..". Така ЦД повторно е промена директориум. ".." Значи дека она што, иако? Последниот пат кога го рече "cd pset1 "да оди во pset1. Па кога ќе се каже "cd ..", што правам? Наназад. Је. Па затоа се случува да се т.н. родител. Одат едно ниво нагоре, како излегување од папка. Па Enter. И, навистина, да бараат она што го направив тоа. Тоа ми се пресели само во работниот простор, наместо на во pset1, кој е во работен простор. И сега, ако јас напишете "ls", има еден куп работи. Таму е "greedy.c". Па сега дозволете ми да го користите mv да буквално движат "greedy.c" во pset1. И така многу Линукс команди работат токму вака. Тие се без аргументи или тие се еден аргумент или тие се две командната линија аргументи и така натаму. И во овој случај, тоа е буквално го прави она што што се вели, иако succinctly-- се движат во greedy.c pset1. Влезе. Ништо не чини да се случи. Но, ако јас се направи ls повторно, алчен е нема. И ако го направам "cd pset1", внесете го, а потоа ls повторно, сега е на вистинското место. Како настрана, ако за некои reason-- особено ако имаш повремен мрежа за поврзување или си шетаат наоколу кампусот со вашиот лаптоп капак затворена и потоа да ја отвори повторно и вашиот работен простор се чини дека малку од Sync, нема ништо страшно. Само да ја превчитате вашиот интернет пребарувач прозорецот, и тоа треба да resync така што левата рака прелистувачот на датотеки изгледа точно како што е терминалниот прозорец. Да не се грижите. Кога се двоумите, повторно вчитајте ја страницата, така колку што сте ги зачувале на датотеки веќе. ВО РЕД. МВ така може да се користи за да се преименуваат датотеки. И ајде да ги разгледаме во оваа последна заповед тука. Suppose-- така и ова е супер заеднички, исто така, на почетокот. Некои ученици повремено се создаде датотека вика, ајде say-- што е уште една? Како "WATER.C." Па јас само ќе викам, за без причина, во сите капи. Но, ова не е точното име на датотека ако само затоа што нашиот проблем во собата спецификација не ви кажам да се зачува датотеката со сите големи букви "WATER.C." Наместо тоа, ние очекуваме "water.c" со мала буква. И дека, всушност, ова е проблематично поради check50, програма си оди да се сретнат во проблемот постави еден кој автоматски тестови исправноста на вашиот код се случува да се развикам ако не може да најдете "water.c" во сите мали букви. Па јас треба да се поправи ова. Толку многу различни начини за да се го направите ова, од кои првиот ќе биде да Контрола-клик или десен клик името на датотеката и само промена на преименување. Сосема во ред за да се направи тоа. Но, повторно, и денес, ајде го направи тоа малку познавач. Ајде да го користите mv да се промени "WATER.C" до "water.c." За да можете да ги користите и првиот аргумент да го преименуваат во вториот аргумент ако на вториот аргумент не, е во Всушност, на име на папка или директориум. Во ред. И на крај, малку trick-- па јас сум во мојот именик работен простор во моментот. Ако сакам да навлегувам во pset еден, Јас секако да напишете "CD pset1." Но тоа е толку досадни да напишете "pset1" или повеќе имиња на датотеки или имиња директориум уште. Па многу често во Linux, што можете да го направите е да почнете да пишувате "PSE" и само да се досадуваат, хит јазиче, и нека фигура на компјутерот тоа за вас. Супер корисно да се влезе во таа навика. Само се фати е ако имаш повеќе датотеки или папки со почеток со буквата "Р" или "PS," може да има да напишеш уште неколку пред компјутерот знае што да прави. МАРИЈА: Ние сакаме кратенки. Дејвид MALAN: Ова ќе те спаси многу време. И, исто така, како што рековме во предавање, ќе може да се движите нагоре во историјата, нагоре и надолу, да се најде неодамна егзекутирани команди, како и. Во ред. А сега, ајде да го свртиме нашето внимание назад до едноставна програма, Здраво светот. Значи, ние сме составени токму ова. И сега, зошто да не можеме да ги преземе погледнете го видот на податоците а потоа се транзиција од некои што одговара на гребење блокови на В. МАРИЈА: Прекрасно. Па сега дека сте почнале пишување програми во C, ние ќе треба да почнам да зборувам за типови на податоци и променливи. Па некои типови на податоци што ќе ќе сакаат да знаат сега почнува се оние кои се осветлени со сина боја. Значи ние треба int прво, која се залага за цел број. И кој има цели броеви, како што се може да има guessed-- така, 1, 2, 3, и било какви други цели броеви дека можете да замислите. Дејвид MALAN: А исто така и негативни. МАРИЈА: И, исто така негативците, Да. И 0. Тогаш имаме пловки, која лебдат точка броеви. Значи тоа е сите реални броеви кои имаат децимални поени. Па 5.0, 5.2, и уште повеќе цифри по децималната точка, како и, и, исто така, негативните. Тогаш имаме знак кој е лик. Па мислам дека ние разговаравме за ова предавање денес. Но, ние имаме букви, на example-- А, Б, C-- кои можат да бидат зачувани како знак. Но, тогаш ние имаме многу повеќе симболи кои можат да бидат зачувани како знак. И оние кои се чуваат како ASCII. И тогаш имаме bool, кои се Booleans. И оние кои се за да се оцени Вистински или Лажни или 1 и 0, соодветно. Дејвид MALAN: И се сети дека bool доаѓа од CS50 библиотека. Па тоа не е вграден во Ц, но тоа е супер корисни да нема чувство на вистински и лажни. Па дури и покрај тоа што можеби think-- забава факт. А bool технички потреби колку битови, навистина, да ја претставуваат Точно наспроти лажни? Колку битови дали мислите ќе треба, максимално? Да, само на еден. Значи излегува дека C не може да ви даде само една малку. Најмалата единица на мерка може да се добијат е осум. Така, тоа е малку непотребното тие си користење на целиот бајт, или осум бита, да претставуваат вистински или лажни. Но, тоа е само начинот на кој тоа е имплементирани во C библиотеката CS50. МАРИЈА: И тогаш оние кои ние сме не се случува да се зборува за што опширно право now-- двокреветни, тоа е за поголеми плови. Долго долги и кратки Исто така, за цели броеви. Дејвид MALAN: Навистина. Во издание на хакерски pset еден, ние всушност ги користат долго долго. Но, за стандардот издание, тоа не треба да биде неопходно. МАРИЈА: Кул. ВО РЕД. Operators-- така треба да бидете веројатно запознаени со повеќето од овие. Покрај тоа, +; одземање, -. За мултипликација, имаме *. Па не Х кои ние обично го користат. Поделба, имаме обратна коса црта. И modulo е нашиот последен оператор кој ние ќе се обидеме да се зборува за во моментов. Тоа е оператор кој ни овозможува да се преземе остатокот на поделба. Значи, ако имаме 4% 2, 4 поделени од страна на 2 е 2 со остатокот од 0. Така 4% 2 е 0. 4% 3 е 1. 4% 5 е 4, како што може да претпоставам. И се сеќавам кога се користи на сите овие оператори да ги користат правилата PEMDAS. Дејвид MALAN: Значи да биде јасно, ако направи 4% 2, зошто е тоа 0, точно? МАРИЈА: Бидејќи 4 поделено со 2 е 2 со остатокот од 0. Па modulo ни дава дека остатокот како за разлика од резултат на поделбата. Дејвид MALAN: И, навистина, она што ќе го најде ова корисно за е дека во некои проблеми тоа не е секогаш еден, ако сакате да го имаат на ограничување себе до низа на броеви како од 0 до нешто, можете да го користите да се заврши околу modulo порано отколку како на 2 милијарди или вредност од 4 милијарди дека ние разговаравме за во предавањето. МАРИЈА: Да. Па дури и во "алчен" ние би можеле да. Дејвид MALAN: Да, во проблем во собата еден, како и. МАРИЈА: Да, убаво. Дејвид MALAN: Добар совет. МАРИЈА: Жал ми е. Булова expressions-- така за Булова оператори, ние ќе се обидеме да се зборува за сите од тие што го гледате тука. Значи, токму сега, имаме две еднакви знаци наведени за еднаквите. Значи тоа се за споредба. Досега, ние сме само гледа еден е еднакво на знак. Тоа е кога ние доделите вредност на променлива. Значи, ако ние сме виделе int n = 5, а потоа ние сме се доделени од 5 до променливата n. Но, ако сакаме да се користи за == споредба, ние може да се провери ако n == 5. И ако n == 5, тогаш тоа е вистина. Па Булова оператори ни овозможи, во основа, да се оцени Булова изрази за да се вистинити или лажни. Па не equals-- имаме марка и еднаквите фантастичен. Значи, ние исто така може да се провери ако n не е еднакво 5-- така n! = 5. Помалку од, помалку од или еднакво на, е поголем од, е поголема од или еднаква на, а потоа имаме логички И така и логичките ИЛИ. И оние кои се ни овозможи да се оцени повеќе Булова изрази заедно во основа да дојде заедно како една целина Булова израз. Значи, ако сакаме да се најдат голем број, да речеме, која е поголема од 5, но помалку од 15 во исто време, ние ќе го користи логички и оператор за да ја видите ако n е поголема од 5 && n помалку од 15. Дејвид MALAN: И тука, исто така, тоа е навистина лесно рано да се случајно користете само една симболот или една вертикална лента. И се надевам дека компајлерот ќе развикам, бидејќи тие всушност имаат многу поинакво значење. За оние кои се љубопитни, тие се користат за битовата операција, кои работат на индивидуалните битови. Но вие не сакате пар од нив тука. И супер важно е дека Првиот, знак за еднаквост, која е оператор на еднаквост како за разлика од операторот на задачата. МАРИЈА: И ја вертикалната лента е кој се наоѓа помеѓу Бришење и враќање. Дејвид MALAN: Да. На типичен тастатура САД. МАРИЈА: Да. Па ајде да скокаат право во условно извештаи. Во Скреч, сте веќе видено, веројатно, ако извештаи кои ќе ви овозможи да се проверете дали нешто е точно, тогаш направи нешто друго. Па можеби ќе го сакале за да провериш дали е самовила допира некои други самовила или на границата на вашиот екран. И тогаш можеби сте сакале да стави крај на играта или да направи нешто друго. Па на синтакса за кои е "ако (состојба)." Значи, ако вашата фигура допира нешто, тогаш не е во внатрешноста на големите загради. Тогаш имаме ако-друго извештаи. На друго место ни овозможува да се направи нешто дали се исполнети условите кои ги проверете за во почетокот не е точно. Значи, ако на самовила е допирање на границата го направите тоа, што друго да се направи нешто друго. Па поинаку направи нешто друго. Тогаш имаме краток пример за ова. Значи, ако (military_time <12), ние сакаат да printf "Добро утро!" Друго ние ќе треба да printf "Добра вечер!" Основни пример. Дејвид MALAN: Добро. МАРИЈА: Кул. Така, сега имаме прекинувач извештаи. Прекинување на извештаи во целина може да ни овозможи да се направи многу на истото дека ние само разговаравме во врска со ако извештаи. На пример, во моментов имаме Општата форма на изјава на прекинувачот која ни овозможува да се земе променлива наречена n a и да се спореди со многу различни вредности, кои тука ќе се побараа constant1, constant2. Ние може да има многу повеќе. И оние кои се наречени случаи. Значи ако имаме прекинувач statement-- и тоа функционира само за integers-- имаме променлива во овој случај тоа е n. Ако променливата n е еднаква constant1, ние ќе се изврши некои програмка на код или нешто што сакаме да го направиме. А потоа ние ќе се скрши. Па на пауза значи дека изјава на прекинувачот да запре извршување ако n е еднакво на constant1, а потоа вашата програма ќе продолжи. Тоа ќе излезете надвор од префрлиш изјава и тоа ќе го продолжи да се направи нешто друго. Ако, пак, не е еднакво на n constant1, тогаш случајот за constant2 ќе бидат проверени. Значи, ако n е еднакво constant2, дека други програмка на кодот ќе биде убиен. И тогаш тоа ќе се скрши ако тоа е еднаква на тоа. И тогаш можеме да имаме also-- не мора да значи, though-- случај стандардно, што ќе се случи ако n не е еднакво на ниту еден од случаите кои се наведени. А во случај на стандардно, ние, исто така, не мора да значи треба пауза поради изјавата на прекинувачот ќе се знае дека треба да се заврши по стандардно доколку тоа е случај. Дејвид MALAN: Но стилски, ние секогаш го стави таму. МАРИЈА: Да. Дејвид MALAN: Да. Толку посебно кога на почетокот, особено ако меѓу оние кои се помалку удобно, јас би лично само препорачуваме да се држи со ИЧС и што IFS-elses и ако-друг-ако-elses и така натаму, ако само затоа што тие се малку повеќе јасна. Ова е еден убав оптимизација, или понекогаш дури и естетски тоа прави кодот повеќе читлив. И всушност, веројатно средината на семестарот ќе видиме проблем поставите каде тоа само изгледа подобро и полесно да се чита за луѓето со помош на прекинувачот за изјава. Но, не грижете се за припивам до овој премногу рано. МАРИЈА: Да. Ако имате многу ако извештаи, тоа не би можело да биде многу читлив. Тоа не може да биде многу брзо за вас да одат преку него. Па може да се префрлат извештаи бидат многу корисни, како и. И, исто така, не remember-- не заборавајте да се стави на паузите во таму. Дејвид MALAN: Не се сеќава на ова. МАРИЈА: Затоа што тогаш ќе може да падне преку од случај до случај. Па да речеме дека случајот constant1 немаше изјава пауза во неа. Тогаш би можеле да пропаднете во случај constant2. И ние не сакаме да го направи тоа ако ние сме веќе достигна случај constant1 и тоа е еднакво на n. Така, на пример, ако имаме променлива n, која содржи голем број класа, и ние сакаме да се види она што класа is-- ако n е еднакво на 50, ние ќе треба да се печати "CS50 е Вовед во компјутерски науки јас " Тогаш ние ќе треба да се скрши. И тоа е тоа. Ако, пак, n е еднакво до 51, ние ќе да се печати "CS51 е Вовед за компјутерски науки II ". Потоа, пак, ние ќе треба да се скрши. Меѓутоа, ако потоа ќе стави 124, 61, било друг број што може да се размислува за, или програма не се случува да го признаат тоа. Значи тоа се случува да се каже, "Жал ми е, јас сум не се запознаени со таа класа. " И тоа се случува да се скрши. Дејвид MALAN: Значи навистина може да се види на, ако, на друго место, ако, на друго место идеја овде. Тоа е само различни синтакса за изразувајќи иста идеја. МАРИЈА: Токму така. Сега ние си имаме троичен оператори. Па троичен оператори имаат три parts-- состојба, нешто да се направи, ако дека условот е исполнет, а потоа нешто да се направи ако таа состојба е лажна. Така што гледате, во основа, синтаксата на тоа овде. Имаме на прашалник, и тогаш the-- она ​​што ние го нарекуваме ова? Дејвид MALAN: дебелото црево. МАРИЈА: Колон. Ти благодарам. Жал ми е. Па ајде да погледнеме во нашиот пример да види дали може да се направи смисла на this-- class_num == 50. Па тука ги гледаме нашите Булова оператор == што го споредува променлива class_num до 50. Па class_num продавници цел број. И ако тоа се цели броеви еднакво на 50, а потоа ние сме ќе ги чувате "Давид Malan" професор во внатрешноста на стрингот. Ако бројот класа не еднаков на 50, а не "Дејвид Malan" ќе биде професорот. Дејвид MALAN: Ви благодарам. И така се чини дека ова е еквивалентно на она, дали би рекле, на прв поглед? МАРИЈА: Ми се чини како ако-друго извештаи. Дејвид MALAN: Да. И всушност, ова е вид на убава еден брод, така да се каже, за спроведување на точно логиката ако-друго но прави се што е во еден чекор. МАРИЈА: Токму така. Је. Па ако-друго изјавите на сила заземаат многу простор. Тие може да биде премногу долго за нешто толку едноставно како ова. Така што ова може да биде многу содржаен и многу убаво. Па сега ние си оди во потрага по извршува нешто повторно и повторно, па проверка за условуваат повеќе пати а потоа продолжува да се направи нешто а таа состојба е точно. Значи ова не носи убаво во додека петелки. Од лево, имаме нашата прва додека јамка. Така, додека нешто е точно, направи нешто повторно и повторно. Така бидете сигурни дека да се забележи дека нашите состојба тука е потврдена на врвот. Со оглед на тоа што нашата втора loop-- ние го нарекуваме дека не се прави додека loop-- правиме нешто, тогаш можеме да се провери за состојба. И ако таа состојба продолжува да биде вистина, ние се вратиме и да го стори нешто повторно. Значи главната разлика е во тоа каде состојбата е проверена. И кодот никогаш не може да биде изврши доколку состојбата не е точно со јамка време. Додека со не-а јамка, имаме код што секогаш е извршена барем еднаш. А потоа, додека состојбата продолжува да биде вистина, ние може да се врати и да iterate повторно внатре. Па зошто мислите дека ние ќе го користи не-додека јамка во текот додека јамка? Право. Значи, ако сакаме да го извести корисникот за некој вид на влез, ако сакаме да ги прашаме за да влезат во нивното име, ние сакаме да се барем да ги прашате еднаш. И ако тие не влезе тоа име, ние не сме ќе ги прашате повторно затоа што веќе го знаеме. Но, ако тие не влезе нивното име, или ако тие внесете нешто што е очигледно не е име, ние се уште сакаат да продолжат барајќи од нив на за нивното име. Дејвид MALAN: И во предавање имавме по една вака со добие позитивен цел број пример, каде што нема ништо да проверете на прв, бидејќи не сте дури и добивано int. Значи, ние сакаме да го направи this-- добие на int од user-- потоа проверете тоа, можеби, повторно и повторно и повторно. МАРИЈА: Токму така. За loops-- ОК. За петелки може да ни овозможи да се направи речиси иста работа, како и. Тоа е всушност на иста работа. Па нема ништо што можете да направите со за петелки дека нема да биде во можност да се направи со додека петелки. Но за петелки може да изгледа малку малку покомплицирано синтаксички затоа што тие имаат три дела во она што беше пред само Состојбата со додека петелки. Така, првиот дел што можете морето, најлево, имаме "int Џуџиња = 0." Значи ова е местото каде што ние иницијализирам нашата променлива. Тогаш имаме запирка и "Џуџиња <7." Значи ова е местото каде надвор состојба всушност е. Значи тоа е она што ние ќе треба стави само во време loop-- "Додека Џуџиња <7." Тука, што оди во средината на нашата за телефонска линија. Па "dwaves <7." А потоа нашиот последен дел е "Џуџиња ++" која е местото каде што ние ажурирање на нашите променлива. Толку важно да се реализира е тоа што овој се случува да одат преку овој за телефонска линија седум пати и ќе ја изврши седум пати. Па ние имаме седум Џуџиња, и сите тие се случува да се каже, "Јас сум тука да ви помогнат, Снежана " затоа што тие се подготвени да им помогне на Снежана. Со додека петелки, ние би го направиле иницијализација и ажурирање не и во внатрешноста на состојбата, повторно, но или пред или во внатрешноста на циклус, додека да бидете сигурни дека we-- бидејќи ние секогаш треба тие делови. Така да бидете сигурни дека имаме нив, ние ќе си се уште им е додадена на, а не само внатре во загради. Дејвид MALAN: И така изгледа like-- во предавањето, на пример, Јас скоро секогаш се користи, како што, јас и n и прилично здодевен променливи. Тоа изгледа како можете да го користите повеќе умно име променливи, исто така. МАРИЈА: Да, тоа е всушност многу убаво да се користи малку повеќе описни променливи бидејќи особено ако некој друг е читањето на вашата code-- можеби ти си човек кој степенува или ако сте соработувале со somebody-- вие сакате да бидете сигурни дека тие се разбере она што го правиш. ВО РЕД. Така што ова е нешто многу funky-- за телефонска линија во внатрешноста на за телефонска линија. Јас не знам дали видовме тоа порано. Веројатно не. Но, всушност, може да имаме this-- па петелки наместо петелки. Па дали некој можеби сакаат да пешачат мене преку она што се случува овде? Дејвид MALAN: Ќе земе прободе. МАРИЈА: Кул. Дејвид MALAN: Во ред. Значи, spoiler-- ние сакаме да се печати на работи тоа е во долниот десен агол таму. МАРИЈА: Добро. Да да. Дејвид MALAN: Значи ние само стави дека излез примерок таму. За да можам да заклучиме од врвниот јамка дека сте процесирањето повеќе редови најоддалечените јамка, така да се каже. А ти си повеќе од процесирањето колони со најскриената јамка. И интуитивно, овој надевам дека треба да има смисла бидејќи по природа на секоја програма што сум го видел пред, printf, што е ние сме со користење на функцијата, во крајна линија, има способност да се печати работи пред сé линија по линија. Како, еднаш сте outputted нова линија, има Нема удвојување назад и нешто печатење повисока во екранот, најмалку не користи printf се допаѓа ова. И така во тој поглед, тоа го прави смисла дека најоддалечените јамка треба да се однесуваат на редови бидејќи за секој даден ред, ви се случува да сакаат да испечатите XXXXX, а потоа да се движи кон следниот ред, XXXXX. Па редови доаѓаат во прв план. А потоа во рамките на секоја ред, ќе се печати колони. Ако сте се обиделе да го направите спротивното, тоа најверојатно нема да излезе како имате намера. МАРИЈА: Да. Ние едноставно не може да се врати претходниот ред со printf. Дејвид MALAN: И она што е интересно по денешниот разговор во врска со обемот, всушност, е дека спорот е int која е прогласена во врвниот јамка. Но се забележи дека се уште е внатрешноста, така да се каже, на големите загради дека веднаш да се следат, иако тоа не е технички во рамките на тие големи загради. Па ред е во опсегот на целината на програмка на код, и внатре на надворешниот за јамка и во внатрешноста на внатрешниот за телефонска линија. Но, од друга страна, во која е колона во опсегот? Променливата колона? Да, само во внатрешноста на јамка. И тоа е во ред затоа што немаме пристап тоа и надвор од неговите големи загради. Сите што го правиме е да испечатите на нови линија на самиот крај таму. Така што во суштина е во ред. Така што ова има ефект, како изгледа, на вршење на три реда и четири столбови. МАРИЈА: Добро. Значи прво ние одиме преку нашите први по ред. И само во нашите први по ред, го правиме на четири колони во внатрешноста на првиот ред. Значи ние се печати четири Х. И потоа можеме да излезете за телефонска линија, бидејќи ние сме веќе отпечатени четири Х. И ние печати нова линија. И тогаш што се минува низ Истиот процес за уште два реда за да се направи вкупно три. Дејвид MALAN: И тоа е вреди да се напомене дека е само артефакт на фонтот, фактот дека излез на примерокот се чини толку многу повисоки, како да има уште редови од колони. Но, тоа е само затоа што на X е повисок отколку што е далеку од голот. Тоа е се што се случува таму, плус бел простор меѓу редовите. МАРИЈА: Добро. Кул. Дејвид MALAN: Во ред. Па еден брз поглед на проблемот постави една, преземат сите прашања, а потоа да ја прекине? Во ред. Така што во еден проблем во собата, има три Примарната предизвици, во крајна линија. Но, прво, ќе најдете дека проблемот поставени спецификација, како и со многу од psets оваа есен, ќе ви прошетка преку неколку загревање вежби, можете да истакнам неколку ресурси кои може или не може веќе не сте виделе. На пример, CS50 има пакет на шорцеви, кои се кратки видеа, не за разлика од ова, но тоа се многу тема specific-- можеби пет минути, 10 минути во должина на јамки или за условите или на алгоритми или подоцна повеќе напредни теми, како и. И ние обично го вградите оние во проблемот множества, така што студентите имаат ресурси со кои да се видат материјали кои би можеле да имаат веќе излезе во предавање или дел. Но, овој пат тоа е повеќе фокусиран и повеќе на нивните прсти. Ние, исто така, имаат тенденција да го вградите во проблемот поставува нешта наречени walkthroughs. Па речиси сите од примерите правам во предавањето, на сцената тука, ние, исто така, имаат снимен на камера во унапредат уште побавно, повеќе интимна можи од мене на мојот лаптоп на тој код, ред по ред така што во класа, ние често ќе обезмаслен преку нешто или некого ќе interject со одговорот на прашањето. Но, тоа не мора да потоне во за сите во публиката. Па ќе најдете кодот walkthroughs за поголемиот дел од примерите што правиме овде, во предавање, така што ќе може да помогне преку неа на свој темпо и премотување назад или напред или прескокнете целосно, ако сакате. Има често неколку загревање прашања кои да побара од вас да се најде решение на засилување на овој материјал и бидете сигурни дека сте удобни пред да продолжите со остатокот од pset. А потоа, се разбира, тука е и самата pset. И една од работите ние многу намерно направи во CS50 е речиси секој неинтересни или интелектуално неинтересни механички чекор кој можеби ќе треба да се направи скоро секогаш се многу добро документирани. Во текот на овој термин, ние ќе почне да побара повеќе реторички прашања како да се сеќавам како да го направите тоа или што? Но, генерално, ќе најдете дека ќе го добиете проблем сетови преку механика на нешто, така што интересните, интелектуални предизвици се конечно Ви останува на студентот. Со тоа, вели, Zamyla, на кои ние чуваат осврнувајќи денеска во предавањето, е еден од нашите долгогодишни вработени член кој исто така има walkthroughs на специфични pset проблеми како Марио и алчен, иако не води оваа година. И тоа е во оние walkthroughs оти често нуди некои совети и трикови за како да се продолжи, никогаш не ти го кажувам точно што да правам, но rather-- како состојба, ако will-- кои ви даваат најмалку неколку идеи, така што тоа е до вас, во крајна линија, да одлучи како да им се доближиме. МАРИЈА: вид на како на високо ниво разбирање на логиката на она што ние се бара да се направи. Дејвид MALAN: Токму така. И дека, всушност, е Zamyla walkthroughs се наменети да одговори на често се поставува прашањето од каде Почнав да се направи, особено кога овие долги спецификации се малку застрашувачка даден целиот текст и слики кои ги имаат во нив. Water.c така, ќе најдете откако ќе го заврши тоа, е всушност релативно јасна. Апсолутно се еден куп на ви се случува да се тресне шефовите на ѕидот се обидува да дознаам зошто тоа не е составувањето или зошто тоа не се работи правилно. Но, откако ќе завршиш со него и еднаш си поминал извесно време додека се справуваат со било на грешки кои може да има, ќе најдете дека тоа е многу кратко програма. Тоа може да се направи за само неколку линии на код, од кои најголем дел видовме тука во предавањето веќе, ако да се соберат на правото градежни блокови. И како што сугерираат овде, тоа се случува да прашам овозможува да одредите колку минути некој се тушира ​​на кампусот. Ние наведете во проблемот поставите брзината на проток на вода во, како, туш со низок проток главата, слично како на клипот Сајнфелд видовме вчера или спротивното од него. И тогаш едноставно треба да да се направи малку на математика, really-- аритметиката со користење на C да се каже ни колку, грубо, шишиња со вода е во тоа што е еквивалентно на, ако ние сме полагање на n-минута туш. Сега, во mario.c, ова се случува да биде малку подолг програмата. Тоа се уште не се случува да биде долго. Само неколку линии подолго од water.c. Но, тоа се случува да биде можност да се рекреираат на старата школа Марио пирамида од Супер Марио Браќа, или некои понатамошните активности. Тоа не се случува да се погледне како поубава или како шарени како што никој таму. Ние сме само ќе да се користи малку hashtags како што имаме тука на екранот користејќи ASCII текст. Но, тоа ќе се приближат на истата идеја. И тоа се случува да се биде вежба која на прв поглед Изгледа прилично simple-- само печати едноставен пирамида. Но, има неколку карактеристики тука дека се интересни. Забележи дека најдесната раб пирамидата всушност има две ширина. Значи има две еднакви колони висина, што прави да се бараат малку малку на мислата да се направи сигурни дека ќе го добиете тоа точно во право, како за разлика од само совршено искосени на линија. Така што е малку на случајот од аголот но се совпаѓа со вистинската игра. И тоа е, исто така, не-очигледно на прв видите како да се печати белиот простор. Па кога ќе се погледне на примерок излез here-- и тоа е, исто така, во тоа spec-- вид на изгледа како правоаголник, но на дијагоналата на правоаголник е сецкани надвор, и тоа е само бело простори, така да се каже. И така најчесто поставуваните Прашањето овде е секогаш, добро, како можам да се преселат на hashtags во текот на правото? Или како можам да се печати на празни места? А тоа е всушност полесно од кои повеќето студенти мислат. Нели? Можете да го приближи визуелно од само притискање на тастерот space еднаш или двапати или три пати. И така, иако со printf ние речиси секогаш се печати низа или int или збор како "здраво, свет "или серија на зборови, можете исто така да само печати понуда, простор, unquote. И дека, всушност, ќе се даде вие бел простор постои. Така да тоа во предвид и не overthink ова. Вие навистина треба да одлучи ред по ред по ред, не за разлика од вашиот пример на момент пред, колку од оние колони треба да биде бела простори и колку од нив треба да биде hashtags. Тоа ќе потрае малку време, но тоа е во крајна линија логика загатка на сорти. МАРИЈА: Да. Но логиката на одење ред по ред се случува да биде многу корисен. Дејвид MALAN: Да. Мислам дека примерокот кодот можете дури gave-- иако тоа не беше комплетна програма. Вие сеуште треба int и главни и неважечки, а # Include stdio.h, многу работи од предавањето. Но на градежни блокови се чини дека да се биде таму. А потоа и на крај е нешто малку повеќе алгоритамски. Значи излегува дека секое време ќе одат во CVS или било погодност продавница и некој ви на сметки или монети, како промена на благајната, излегува дека тие, луѓето, дали или не се свесни за тоа или не, најверојатно го користат она што е нарекува алчни алгоритми, при што доколку сте се должи, да речеме, 21 $ во промена бидејќи поради некоја причина сте купиле нешто многу евтини со многу голема сметка на CVS, тоа ќе биде навистина досадни, ако Касиерката ти дал 21 синглови или, уште полошо сепак, во целина многу монети. Напротив, она што разумно лице е веројатно, ќе сака да направите е да тие се случува да се дофати со $ 20, а потоа и $ 1-законот, а ви рака само две сметки во тој случај. МАРИЈА: Па тие се бараат за да се минимизира промената дека тие даваат назад кон вас. Дејвид MALAN: Токму така. И истиот договор со монети, како и. Ако сте се должат, да речеме, $ 0,50, се надевам дека вие не сакате 50 пени. Ти наместо да сакате две квартали, на пример. Сега, ова не се претпостави дека во касата има доволно на секоја деноминација што тој или таа можеби ќе сакате да ви даде. Но, ние ќе ви овозможи да се претпостави колку во проблемот. А целта, во крајна линија, е да се имплементираат во C код алчен алгоритам. Па на корисникот му е дозволено да напишеш во колку промените што тој или таа се должи на долари и центи, некој вид на подвижна запирка вредноста веројатно. А потоа ќе мора да го направите математика и дознаам алгоритамски, добро, колку пари можам да им даде вие минимално да ви даде токму таа сума на промена. Но таму се случува да биде малку незгодно делови тука, нели? Како таму е целата непрецизност прашање. МАРИЈА: Токму така. Па со подвижна запирка вредности имаат непрецизност. Дали ќе се зборува за ова во предавање денес? Дејвид MALAN: Ние не последен пат во предавање. Ние разговаравме за непрецизност. И не сакаат да мамат на корисникот за тоа колку тој или таа промена се должи. И така можи, во проблемот поставени спецификација, даде некои мисли, во крајна линија, како да како може да се ублажат овие непрецизност грешки, потенцијално. Тоа може да се избегне, се разбира, за инпутите што ние зборуваме за. И дека, всушност, pennies-- можеби и ќе се одложи на Zamyla, Мислам дека, за трикови таму. Па на крајот, ќе најдете прогресија на проблемите на оваа недела, од кои првиот е прилично мал, тогаш медиум, а потоа малку поголеми. Но сите од нив ги користат за градење блокови од минатата недела, од овој supersection, проблем во собата спецификација ве става во безброј ресурси. Но, сепак, ако воопшто се борат, особено меѓу оние помалку удобно без претходна позадина, дојде до работното време во понеделникот и вторникот и Среда и четврток. Оди на CS50 Разговараат преку веб-страница на курсот, преку кои можете да разговарате со вработените и соучениците. Но на крајот, мислам дека Најдобриот совет е само да се започне рано. Тоа не е вид на класа што ќе треба да биде почетна psets во средата ноќ, или уште полошо четвртокот навечер. МАРИЈА: Мојот најдобар совет е дека започна од понеделникот. Дејвид MALAN: понеделник. Значи, ако не сте почнати already-- бр. Но, дури и ако не е во понеделникот, а потоа во вторник. Порано толку подобро. И тоа е причината на Курсот има толку многу доцна дена е да ви даде малку на психолошки притисок да се започне порано, но сепак нека работите се лизга кога работите ќе трае подолго отколку што очекувате. МАРИЈА: И сакате да се направи употреба на работното време, колку што може да се, исто така. Дејвид MALAN: Било какви прашања? Во ред. Па, зошто да не можеме да ја прекине оваа ситуација?