[Powered by Google Translate] Дејвид Џ MALAN: Добро, ова е CS50, и ова е почетокот на недела две. Ви благодариме. Дозволете ни да започне овде со еден телефонски повик. Јас сум за да го бирате 617-бубачки-CS50. CS50: Ова е CS50. За шатлот Момче, притиснете 1. Да се ​​започне одново, притиснете 9. Дејвид Џ MALAN: Па рече тој за шатлот Момче, притиснете 1. Па ние ќе притиснете 1. CS50: Која е вашата потекло? За quad, притиснете 1. Mather, притиснете 2. Boylston, притиснете 3. Ламонт, притиснете 4. Mem сала, притиснете 5. Да се ​​започне одново, притиснете 0. Дејвид Џ MALAN: Ќе притиснете 1 за quad. CS50: Следна шатл остава ова многу минута во 13:10, и потоа во 01:20, 01:30, 01:40. Ова е CS50. Дејвид Џ MALAN: Значи ова е глас CS50 е. И тоа е пример на видовите на конечниот проекти, за пример, можете да отхапвам кон На крајот на семестарот. На пример, дека shuttleboy.cs50.net постои - всушност проект кој јас прв пат напиша по преземањето CS51 назад кога бев додипломски. И инспирација тука беше тогаш, сите тие имаа беше печатени шатл-автобус графиците, и немаше Поимот потрага работите онлајн. И така јас вид на гулаб во еден викенд, преточена преку печатени распоред, и тоа пренесен на компјутерска програма. Во тоа време, на компјутерска програма што се случи да биде напишана во В И навистина да сте ја истрча со пишување шатлот момче во трепка прашува како сме правеле досега. Но, со текот на годините, тоа прерасна во еден момент пораки бот. Тоа е еволуирале од неодамна во оваа веб страна, во СМС-базирана алатка, како и во овој глас-базирана алатка. И ова е да алудираат на видови на работи што можете да направите за себе до крајот на семестар. На пример, постои, верзијата СМС на шатлот Момче се случува да работат како што следи. Ако, на вашиот мобилен телефон, можете да испратите текстуална порака до 41.411 и потоа да ја пратите посебен симбол sboy, за шатлот Момче, проследено со А и Б, каде што е потеклото и Б е дестинација - на пример, Boylston простор Quad - она што треба да се вратат во рок од неколку секунди е текст порака од шатлот Момче ви кажува точно кога следните неколку автобуси се, од таа точка А ќе дека точката B. И ова е една поопшта пример за она што е познат како со користење на API. Така на пример, ова овде е само shuttleboy.cs50.net, на вистински веб-базирани инкарнација на тоа. Но податоците што нагласува ова и други апликации кои CS50 има развиено сите се изложени на сите тука во форма на API, апликација програмски интерфејс. И тоа е само фенси начин да се каже дека луѓето сакаме на Интернет и другите имаат поминато некое време создавање софтвер кој можете да го користите со цел да зграби податоци од нас и потоа се изгради свој апликации на врвот на тој податоци. Така на пример, оваа шатлот Момче API страница тука, што се случува да биде во CS50 прирачник, суштински документи како можете да се обратите за поставување CS50 сервери за податоци. На пример, ако сте запознаени со CSV датотеки, запирка одвоени вредности, овие се само вид на брз и нечиста Excel-како датотеки. Така можете да побарате шатлот момче за сите податоци за сите куќи и нивниот ГПС координати, и ќе добиете назад, во суштина, табеларни пресметки, како што тоа тогаш може да прочитате во програмата на свој и потоа генерира резултати, како шатлот Момче себе се случува да се прави. За оние кои се повеќе запознаени, помодерен податоци репрезентации вклучуваат JSON, JavaScript Цел Нотација. Нешто ќе ти се врати кон На крајот на семестарот. Но, повторно, ова е само една од неколкуте на сопствени API-CS50 е. И возбудлива работа е сега, овие денови, Facebook и Твитер и Google и доста секој популарен сајт од таму има некој вид на API, што значи дека ако го прочитате документација за нивниот веб-сајт, можете регистрирате за сметка, тогаш може да почне пишувањето софтвер на врвот на она што алатки или податоци кои компанијата има нуди. И така еден од нашите наставни соработници неколку години назад напиша верзија Mac на ова. Па на линкот под наслов Mac тука во горниот лев агол, можете да всушност преземете Mac OS графичка контрола која работи на свој Mac да го стори истите видови на нештата. Така, тоа е за сите градење на врвот на збирки на податоци, како овие. Но повеќе за тоа кон крајот на семестарот. Значи, да се нурне во реално брзо да се работи за грешка, само да се вид на се работи загрее и денес, и се сетам на некои од работи ние погледна минатата недела. Особено, дозволете ми да оди напред и да се повлече, да речеме, овој пример тука. Buggy1.c, ова е достапна на веб-страницата на курсот ако сакате сакал да го преземете и да ѕиркаат наоколу себе. Но, ајде да зумирате тука во оваа прилично кратка програма, и само супер-брз повториме на некои од основните градежни блокови кои ние навистина се случува само започнете преземањето здраво за готово. Па сина работи, во алинеите 1 до 9, се само софтбол прашања. Значи овие се само коментари. Тие немаат функционална смисла. Но тие се коментари во смисла дека тие се забележува дека Јас, човечки, направени за себе, така што во предавање и по предавање, јас всушност може да се сети што оваа програма прави без да се чита преку неа линија по линија и Пресоздавањето историја во мојот ум. Покрај тоа, ако јас рака на оваа програма за некој друг како вас, тоа е многу појасна за вас, бидејќи на коментари како ова, што на програмата е всушност прави, или барем она што програмата би требало да се прави. Дали е или не е точно е друго прашање целосно. Сега, во C, со мулти-линија коментари, се сети дека на линија еден тука е магијата симбол, / *. Тоа значи тука доаѓа на почетокот на коментар. И ништо друго не е важно се додека не стигне до крајот терминатор, која е * /, спротивното. Значи фактот дека имам 80-некои чудни ѕвезди овде од лево кон десно е навистина само естетски детал. Тоа нема функционална смисла. Сега како за линија 11? Што значи тоа го направи во однос на Едноставен? Што е тоа? ПУБЛИКАТА: Вклучува стандарден. Дејвид Џ MALAN: Добро, добро. Па тоа вклучува stdio.h библиотека. Значи она што значи тоа? Па, во таа датотека, stdio.h, се еден куп на функција декларации - што е, кодот кој некој друг го напишал. И совршен пример на функција која е прогласена во stdio.h е - кои омилена до сега? Значи printf, еден од оние кои најчесто да ги користат, секако на почетокот, од кои библиотеката е таму. Ако исклучам таа линија на кодот, ѕвекот се случува да се развикам во мене нешто во врска со користење на непријавена симбол. Нешто непријавена е веројатно клучни зборови, бидејќи не сме информирани компајлерот она што printf изгледа сакал ако ние го вклучите таа линија. И повеќе долу на Земјата, навистина, она што таа линија е велејќи дека е отвори таа датотека, stdio.h, каде и да е на серверот хард диск, или хард диск уредот, и копи-паста тоа право таму во мојот датотека, без моја морале да го направите тоа рачно. Сега, откако ќе се фаќате тука до главна, пред долго ќе почнеме со надразнување, освен она што int и она празнина е. Но, за сега, да се погледне на три линии во рок од 17 15 преку. Ова овде тврдам како кабриолет. Линија 7 во моите коментари се вели дека "треба да се печати 10 звезди, но не. "Зошто ова не се печати, всушност, 10 како ѕвезди? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Токму така. Значи забележите дека ние сме почнуваат да се смета од 0. И ова е всушност конвенција во програмирање и компјутерски науки поопшто, почнуваат да се смета од 0 наместо на 1. И ова навистина само произлегува од фактот дека, за пример, кога имавме осум лица се на сцената, кога никој не е подигање на својата рака, тие беа сите ефективно нули. И така тоа е само вид на компјутерски конвенцијата така, затоа, да се започне сметано од 0. Ако тоа е најмал број може да се претставуваат во бинарна. Значи тука сме отворени иницијализацијата јас на 0. Ние постави i еднаква на 0. Но, тогаш не сум направил оваа грешка тука, велејќи дека е помала или еднаква на 10. Но, ако мислите дека преку, ако почнам на 0 и тогаш ќе одам до 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, јас сум всушност ќе печати од 11 ѕвезди на екранот, бидејќи јас сум качил до и еднакви на 10. Па лесно поправи тука тогаш е она? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Само промените на помалку од. Ако навистина сакате, можете да го направите тоа. Но, во принцип, тоа е намуртен врз. И така почнува да се смета од 0 е само нешто што треба да обично се користи за да се. Сега, она што за целата оваа конструкција во себе и за себе? Оваа линија 15 demarks на за телефонска линија. Така што не е во функција. Тоа е само изјава. Тоа е looping конструкт, како што видовме во нула. И има три дела. Забележете дека постои првиот дел на на левата страна на точка-запирка. Има средишниот дел меѓу двете semicolons. А потоа, тука е на десната страна кон десно на втората точка-запирка. Сега, првата од овие не се она што? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Назад таму? Да? ПУБЛИКАТА: Иницијализација. Дејвид Џ MALAN: Иницијализација. Значи она што значи ова? Имаме прогласи променлива наречена i. Тоа е од тип int, бидејќи јас сум наведени int i. И јас сум јас иницијализацијата на вредноста на 0. Значи она што е ова навистина зборуваш? Тоа е ефикасно велејќи дека на компјутерот еј, дај ми доволно меморија, доволно RAM меморија, за да ги собере голем број, а потоа го ставаат на број 0 во тој дел од RAM меморија. И како настрана, колку е голема е int обично, во внатрешноста на најмалку на уредот? ПУБЛИКАТА: 32-битна. Дејвид Џ MALAN: 32 бита. Па тоа значи дека ми даде 32 бита, инаку познат како 4 бајти, и го стави на вредност 0 во него, што е прилично лесно, бидејќи Тоа само значи постави сите делови на 0. Па сега, вториот дел тука е состојба. И состојба, како што сугерира името, е она што се проверува повторно и повторно и повторно, како и тоа дали е точно или неточно. Значи ова е само велејќи направи ги следниве линии на код - имено линија 16, бидејќи тоа е само една требуван под - толку долго како што е помалку од 10. И по секоја итерација преку овој циклус, направете го incrementation, кој во овој случај е i + +. Сега, тоа не мора да биде i + +. Тоа може да биде i -. Но, ако сум го правела тоа, она што однесувањето се случува да се биде на оваа програма? Публика: Тоа ќе биде бесконечна јамка. Дејвид Џ MALAN: Тоа ќе биде некој вид на бескрајна јамка, освен ако имаат среќа по негативните 2 милијарди или така. Можеби работите ќе заврши околу, само по природа на конечни бројот на битови што се распределени за Инт. Но, тоа е, секако, ќе iterate далеку повеќе од 10 и сигурно повеќе од 11 пати тука. И сега, како настрана, да сфатат дека јас + + и јас - се навистина само синтаксички шеќер. Тоа е само стенографија нотација за она што е малку повеќе експлицитно напишано како што следува: i = i + 1. Тоа е идентична со i + +. Тоа само вид на изгледа поубава да се каже i + +. Тоа е повеќе содржаен, повеќе читлив. И така повеќето луѓе го направите тоа, наместо. Но, ова е идентична функционално да она што го видоа. Значи во кратки, брз лек тука е само да се каже iterate i од 0 целиот пат до помалку од 10. И тогаш навистина ќе добие 10 ѕвезди. Значи, да се обидат ова. Дозволете ми да се отвори терминал на дното. Дозволете ми да одат во директориумот дека ова е внатре И јас одам да го компајлирате рачно со ѕвекот за сега. А јас одам да ги собере тие како buggy1.c, Enter. И сега buggy1, зошто постои таква датотека или директориум наречен buggy1? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Да. Така, тоа е, всушност, наречен a.out. Значи се потсетиме само ако стартувате ѕвекот, каде ѕвекот е компајлер, а вие не го наведете името кое сакате да им даде на вашата програма, тоа се случува да се стандардно a.out. Значи, навистина, ако го направам ls - Упс. И јас didn't - на црно-бело прашање некои од ќе се соочи не е утврдена. Но, дозволете ми да го направите тоа. Ние имаме a.out на левата страна има. Значи ние треба да се кандидира a.out наместо buggy1. Па дозволете ми да оди напред и да го направите тоа. . / A.out, Enter. И јас очигледно не го направи она што? ПУБЛИКАТА: Save. Дејвид Џ MALAN: Зачувај ми датотека. Така што е лесно да се реши со притискање Контрола С, или ќе Датотека, Зачувај, како и во повеќето програми. Дозволете ми да одат надолу тука, го исчистите екранот, внесете ја повторно. И таму е уште една бубачка. Значи она што се случува - ПУБЛИКАТА: Вие не го собира. Дејвид Џ MALAN: Ах, добро. Јас не го собира. Како идиот, јас барам во кодот за да ја видите она што е погрешно. Значи ѕвекот buggy1.c, сега a.out. И Phew, спасен. Па тоа изгледа малку грдо, бидејќи нема нова линија никаде во програмата. Но, повторно, тоа е само естетски детал. И барем ако ги броиме оние надвор, ние треба да сега види 10 како ѕвездите. Па, она што за овој вториот загревање пример? Значи во buggy2, тврдам дека оваа верзија, исто така, ќе се печати 10 ѕвезди, по еден на линија. Значи ова време, имам линија карактер, само за да бидете работите малку поубав. Но, наместо она што го добиваме е ова. Па дозволете ми да направам ѕвекот buggy2.c, Enter. Сега е повторно повика a.out. Enter. Јас само види еден нов линија, само последната нова линија која се движи мојата линија на следната линија. А сепак јасно Сум бил печатење *, а потоа нова линија, *, А потоа нова линија. Но она што е бубачка тука? Да? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Токму така. Па за разлика од некои јазици, како Пајтон, каде вовлекување всушност има функционална смисла, во јазик како C - како што ќе видиме, PHP, JavaScript - вовлекувањето е навистина само за доброто на луѓето. Значи фактот дека јас сум вовлечен линија 16 и 17 изгледа одлично, но тоа нема функционална смисла тука. Ако сакам двете линии да се изврши како дел од за јамка, тогаш мора да ги приложи во големи загради со тоа. Вие само може да се намали тој агол и изостави кадрава загради ако што е случај? ПУБЛИКАТА: Само една линија. Дејвид Џ MALAN: Само една линија. Значи тоа е само вид на убав вид на синтаксата детали, така што да не губат време во пишување на три линии, од кои две се кадрави загради, само да се напише една линија код. Но, ако имате два или повеќе линии, ние навистина треба да го направите тоа. Па сега нека ме спаси ова. Дозволете ми да одиме напред и повторно да се кандидира ѕвекот. Тогаш дозволете ми повторување a.out, и сега јас ги добие по еден на линија. Сега, a.out повторно е вид на нем име за програмата. Како можам да кажам ѕвекот да всушност ми даде името на датотеката тоа е повеќе user-friendly, како buggy2 себе? А малку повеќе јасно? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: OK, па јас всушност може да земе многу user-friendly кратенка и само напиши направи buggy2. Јас не специфицирате. В во овој случај, и притиснете Enter. И она што го прават не е тоа компајлира buggy2.c за мене од страна на барајќи ѕвекот да го направи тоа. Поточно, тој го повикува ѕвекот, бега ѕвекот користење начин повеќе командната линија аргументи или прекинувачи отколку што всушност треба. Со текот на времето, ние ќе се вратам на она што сите овие различни криптичната тиренце изрази значи. Но, за сега, тоа е само мене заштеда на проблеми на мора да се запамети и да ја внесувате од сите оние различни тиренце изрази. И главата на тоа на крајот е дека сега имам buggy2. Ако сакате да го направите тоа рачно, иако, јас наместо да го направите тоа - ѕвекот-о buggy2 а потоа buggy2.c. И дека слично ќе ми даде фајл наречен buggy2. Значи во кратки, ѕвекот е компајлерот. Направи е само user-friendly алатка која ќе биде со користење на повеќе и повеќе, бидејќи тоа само ќе почне да поедностави работите за нас. И ние се врати 0, на крај. За сега, само затоа, но ние ќе започнеме надразнување тој дел денес и во средата. Било какви прашања на која било од ова? Да? ПУБЛИКАТА: [Беззвучен] ЛС во наводници таму? Дејвид Џ MALAN: OK. Кога ќе внесе ls во наводници, што ме прави некоја магија зад сцената за да се утврди грешка. Го заборавив, како ние сме биле кажува многу за вас на дискусија, да се направи - ние ќе го направите ова сега - sudo yum-y ажурирање appliance50. Whoops, дека тоа е напишано во право. Значи уредот е како оперативен систем. Тоа е водење овој оперативен систем наречен Fedora. И сега, бидејќи на мојот бавен интернет конекција, јас сум навистина hosed. Па трчање sudo yum update, како што ви кажам да се направи во проблем во собата, во суштина е како трчање автоматски ажурирања во Mac OS или Windows. А причината за водење ова на самиот почеток на проблем во собата е затоа што кога ние направивме на апаратот, јас збркана, а јас случајно направи на сите ваши програми изгледаат црна боја на црна екран, кој е зошто вие не сте ги гледаат од стандардните. Но, најновата верзија на апаратот поправки ова. И јас ќе утврдат дека во текот на пауза еднаш имам интернет конекција. Па цитати само крие мојата грешка, многу дискретно, очигледно. Други прашања? Да? ПУБЛИКАТА: Каде да доаѓаат од? [Беззвучен] Дејвид Џ MALAN: Добро прашање. Каде да доаѓаат од? Тоа е Линукс програма која постои за многу години, додека пред CS50. И тоа доаѓа со оперативен систем како Fedora. Тоа не доаѓа од CS50 библиотека. Всушност, само работите кои доаѓаат од CS50 библиотека досега, што видовме, се GetString, GetInt, сите оние Земете функции, и зборот стринг, и до одреден степен, зборот bool. Но, ние ќе закачам дека освен кога ќе се нурне во CS50 апаратот себе. Така да, уште едно прашање тука. ПУБЛИКАТА: Кога ќе рече да, а потоа кабриолет, како не на компјутерски знаат [Беззвучен]? Дејвид Џ MALAN: Добро прашање. Значи, кога сте само стартувајте го buggy1 или да buggy2, како прави знаеш? Значи по дифолт, ако го напишете направи buggy1, направи изглед за фајл наречен buggy1.c. И тогаш се извршува соодветни ѕвекот команди, тоа највисок стандардниот излез фајл наречен a.out. Всушност, ако се погледне во она што го направи, она што - ајде да престанам ова. Ако ги погледнеме во она што го прават е всушност прави, бидете buggy2, тоа е веќе во тек. Па нека ме отстрани РМ команда, програма напишав порано. Пишување Y-Е-С да потврди дека сакате да го отстраните. Ако јас сега го прават, забележи дека во овој многу долга линија, таму е ова последното нешто тука,-о buggy2. Сите го прави поминува тој аргумент, така да се каже, да се Ѕвекот, така што јас не мора да го напишеш себе. Добро, така што брзо неколку административни пораки. Така и за делови, кои официјално започна оваа доаѓаат Недела, секогаш ќе сакате да се донесе, ако го имате, лаптоп. Ако не имаат лаптоп, не допре до мене од страна на ме намалувањето е-мејл. И ние ќе дознаам тек на работа. Што генерално ќе најдете во делот е дека тие се дел концептуални, дел практично. Ние конкретно ќе користат дел од прашањата, дел од на недела проблем во собата, да одиме преку некои од концептуални материјал од предавање. И тоа е во тековниот проблем во собата. И ние исто така ќе се нурне во некои рацете на активности, понекогаш од кои ќе бидат потребни да се поднесат, понекогаш на која нема. На пример, ова првата недела, тие се наменети само како загревање вежба. И ќе најдете дека овие проблеми се навистина само тоа. Тие се наменети да бидат прилично мали, но не е задолжително тривијални програми, да пишувам, кои не се нужно возбудлив и за самите себе, но се добри можности за практикуваат со синтакса, со нови функции, во удобноста на делот каде што имаш неколку од своите соученици претстави како како и вашите ТФ. И што ќе правиме со текот на времето е да се користи алатка наречена CS50 простори, при што наместо само со помош на CS50 апарати, ќе наместо да одат на веб страница во прелистувачот, каде што ќе бидат во можност да се напише кодот во прозорецот на прелистувачот при секција. А потоа, ако се одлучат во, вашата настава колеги тогаш може да покаже што и да е сте пишување на вашиот екран во вашиот интернет пребарувач прозорец нагоре во предниот дел на класа, дали анонимно или јавно, така што тој или таа, тогаш може да оди преку со соучениците што направи добро, она што не прават добро. И повторно, остатокот увери сето ова може да биде убаво анонимизирани. Но тоа ќе биде убава можност за многу повеќе интерактивност од нешто како предавање дозволува. Во меѓувреме, ние ќе ги имаат овие работи вика супер секции, кои се задолжително, но се отворени за секого во класата, така што можете да го направите ова повеќе колективно за Проблемот се постави еден. Тука е распоред. Ова е, исто така, испратени на почетната страница на cs50.net. Забележете дека таму ќе биде хакер специфични еден утре попладне. И ние ќе снимаат еден денес и една утре и пост оние онлајн во рок од 24 часа. Значи не, ако не може да се направи било кој од овие времиња, да се грижите. И повторно, распоредот е присутен во cs50.net. Во однос на sectioning себе, треба да имаат добивано и еден e-mail инструкции да одат на почетната страница од пребарувачот на курсот да се најде од вашиот секција. Ако живот се промени и што треба да го промените вашиот дел, не е проблем. Врати се дека истата адреса, cs50.net/section, еднина, и ќе ги пополните слична форма, така што ќе може да тогаш ни даде вашите преференци. И ние ќе се надоврзе до крајот на недела за тоа што можеме да Сместување во хотел. Минатата недела се сети дека ние предложи користење CS50 дискутираат, текот на дискусија алатка, во предавање. Па моравме 40 прашања кои беа поставени и одговори во текот на предавањето. Па се чинеше да работат добро, па ќе продолжи обидувајќи се да го направите тоа. Ако, во текот на предавањето, не само да се чувствуваат удобно за подигање твојата рака, не е проблем. Оди до cs50.net/discuss, пост таму, и еден од нашите наставни соработници или ќе одговорам по електронски пат или се подигне нивната рака во ваше име анонимно да прашам, во зависност од природата на прашањето. И во смисла на повратни информации, генерално psets ќе биде враќа во рок од една недела. Бидејќи е потребно малку време за делови за да се постигне рамнотежа, првиот pset, 0 и 1, ќе биде малку одложен работи се смират. Но, Stay tuned за тоа во неделите што доаѓаат. Добро, така нека ме стави на моите сериозни глас за само еден миг. Значи ова е всушност една интересна климата да биде имаат оваа дискусија, што со сите други работи случува на кампусот во врска со тоа. Но CS50 има сигурно имаше својата историја на овој тема, во колку што секоја година, на овој курс, за многу години, Привремена одбори околу 3% од класа. Ова е последната година, 2011, CS50 Привремена качија 35 студенти. Ова не е, мислам, поради недостаток на јасност. Сфатат дека во програмата на курсот, постои страница изјава објаснувајќи каде линиите се. Дека истата изјава се повторува на секој еден од Проблемот поставува на една страница. Па јас се спомене оваа денес навистина само за да бидете луѓе свесни за ова. И се обидовме различни нешта. И она што мислев дека ќе направите денес е само земи еден момент да всушност се погледне во некои од минатите случаи кои доаѓаат. Наместо да ги задржи овие како валкани место, всушност, истакнам она што студентите имаат направено и како можеме да ја открие тоа и навистина она Општата мотивација е за дури и по овој разговор. Па со тоа, рече, линијата суштина е ова - на наставната програма, ти си добредојде, да се охрабруваат да разговара со соучениците. Тоа е целата цел да се има овие заеднички работното време во Annenberg и охрабрување на луѓето за финалниот проект да работат заедно. Но е повлечена линија кога станува збор време да всушност пишува вашата крајна решение. Говорејќи на англиски јазик, сосема во ред, говорејќи во псевдо код, сосема во ред. Испраќање на соученик вашиот pset, допуштајќи им да се погледне во текот на екранот како рацете продолжи пишување, над линија, како и. Гледам на програмата за конкретната линии. Но, само за да наслика слика на тоа како ова е жал реалноста, да сфатат дека постојат веб-сајтови надвор таму дека имаат решенија од оваа класа и многу други класи. Фактот дека или околу 3% од вас знаат дека тоа постои значи дека ние знаеме дека тоа постои. На фактот дека постојат веб-сајтови како овој, каде што да плаќаат некого за да всушност се направи вашиот проблем поставува - ова беше вистински случај кој излезе минатата година. Ова е веб-сајт се нарекува odesk.com. И Тим беше името на лицето тука кој беше објавување на овој веб-сајт и побара некој да го стори неговиот pset 7 во конкретниов случај. Па, odesk.com е многу Гугл-можност, и ние исто така се многу добар во Googling. Овде, исто така, постојат сајтови - и ова е прилично крволочен, искрено. [Смеа] Дејвид Џ MALAN: На смешно нешто во врска со овој сајт е ако го прочитате За страница, тие зборуваат за нивните корпоративни култура и како услуги на клиентите е нивниот број-еден приоритет, за да бидете сигурни дека вашите задачи се се претвори во на време. Но со сета сериозност, пак, фактот дека овие сајтови постојат, сфаќаме, исто така, се осведомен на овие видови на сајтови. И да ви даде чувство за тоа што претставува ова генерално потребно, ние обично немаат големи скандали каде што луѓето се соработува на било каков вид на масовно, туку тоа е овие ноќни моменти на слабост, каде што треба да многу да се направи, тоа е 4:00, ти си исцрпени, а вие мислат за себе, добро, дозволете ми да ги погледне во моето цимер или кодот на мојот пријател или слично. И манифестации на оваа жал вклучуваат Студентски А поднесување вакво нешто и Студентски Б поднесување вакво нешто, што секако, во компјутер науката класа, е неверојатно лесен за компјутерски научници да се открие со софтвер. Ова е уште една заедничка парадигма, каде што сум вид на работи заедно на некој, можеби зборува во Македонски, само парична казна, pseudocode. Но, тогаш станува збор време за да всушност ги достават и psets само да се разменуваат преку e-mail или Dropbox или слично. Но, во обид да го направи тоа помалку очигледно дека ова е она што се случило, тогаш ова е она што се доставени. Ова, исто така, не патување до добро напишани парчиња софтвер како ние мора да всушност се открие овие видови на нештата. И навистина она што го правиме е кандидира софтвер кој ги споредува сите оваа година поднесоци против сите изминатата година поднесоци, против се што се наоѓаат на Интернет, против секоја работа веб таму. Тоа е многу автоматски. И така го правиме ова навистина во голема праведност до 97% кои се навистина работат ослите исклучите во овој и во други класи и пуштање во сето тоа напор, така што работата тие конечно поднесе е свој. И можам да одам на со векови. Овие се само неколку случаи од минатата година. Неколку студентите поднесува овие датотеки идентично за pset 2, pset 3, pset 4, pset 5, pset 6, pset 9. Во овој случај, тоа е квиз 0 и во минатата година, каде што двајца студентите поднесе идентично оваа реченица меѓу многу други, "Барањето од типот -" точка, точка, точка. Па дури и во класа на 600 не ја открие оваа на поднесените квизови. Значи во кратки, ова - искрено, мразам имаат овој вид на разговор - но ова е навистина намерно напор оваа година да се обиде да се вози надолу тој број. Бидејќи иако ние велат дека овие видови на нештата секој година, мислам дека реалноста на тоа што се засновала тоа за неколку повеќе секунди од вообичаеното, а всушност само укажува дека она што може да изгледа како, еј, не е толку голема работа, барем сетам на овој момент, и во праведноста на себе и за своите соученици тука. Значи, ако некогаш имате било какви прашања за тоа каде линија е, молам само да допрат до мене лично. Но одговорот е секогаш, целосно истакна во последен момент, готовина во на крајот на денот. Или ако тоа е прашање на немање било доцна дена, искрено, ми мејл лично. Ќе дознаам нешто надвор. Ве молиме не стави вашето време тука на Харвард во ризик. Сега, јас мислев дека треба да олекчи расположение, па јас вклучени на ова како на следниот слајд. [Смеа] Дејвид Џ MALAN: Овој вебсајт беше големо. Јас всушност доби малку расеан. Има оваа. И тогаш ова беше неверојатно. Океј, па мислите за тоа маче доцна во ноќта кога се вршат тие одлуки. Добро, па назад до повеќе да се забавуваат и помалку сериозни работи, како услови. Добро, така што зборуваше кратко за нив. Ова е нешто што е веројатно доста запознаен од светот на нула. И во светот на нула, имаме оваа потреба понекогаш да одат направи вилушки на патот. Или го направите тоа или тоа или тоа друга работа тука. И кога ќе сакате да го направите ова, можеме да го користиме, во C сега, ова ако друго изградба. И тогаш тука имаме Булова изрази. На пример, Булова изрази тука, ние може или нив заедно, во смисла дека имаме оваа состојба или таа состојба. Ние можеме и нив заедно, во смисла дека ние сакаме да проверете оваа состојба и таа состојба. И тука имаме еден гајтан изјава сега, што не е толку слични синтаксички на оние видови на услови, но тоа ни овозможува да се направи еквивалент на ако друго ако друго ако, друго ако, и како со едноставно ги набројува од случај до случај од случај до случај. Значи видовме оние последен пат. А потоа почнавме допирање на нешта како петелки. Видовме еден од овие само еден миг пред. Но, постојат овие други looping конструкции. На пример, овој овде. Така, додека (состојба), дали ова нешто повторно и повторно. Значи во основа, она што се чини дека се различни помеѓу овој за јамка и тоа додека јамка овде? Ова за телефонска линија и тоа додека јамка. Да? Што е тоа? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Добро. Значи додека во за телефонска линија состојба, не е јасно повеќе синтакса. Има оваа иницијализација, таму е ова ажурирање. Подолго време јамка, има само оваа состојба. Така ми се чини дека тоа е малку pared надолу наспроти за јамка, што значи дека ако сакаме да имаме променливи и сакаме да имаат incrementation, ние всушност треба да направите ова работа себе. Па дозволете ми да оди напред и да се отвори gedit. Дозволете ми да ги префрлиме на апаратот. И ајде да го направите брзо малку пример дека разликува една од овие од другите. И во задниот дел на мојот ум тука, јас треба да кажам една работа. Јас конкретно споменато името Тим. Тим е всушност некој дека ученикот се обиде да се најде да се направи нивната домашна работа за нив. Немавме Тим во таа секција. Па се реализира, не би откриле студент, тоа не беше студент. Тоа беше случајна личност на интернет вршење на работите преку полномошник минатата година. Значи сметаме дека, исто така. Значи во овој случај тука, дозволете ми да оди напред и да отвори нова датотека. Датотека, Нови. Ова ми дава табот тука. Дозволете ми да оди напред и да ја зачувате како loop.c. Дозволете ми да одат и кликнете на Save. А потоа долу тука, ајде да одиме напред и да почне пишување # Include . Дозволете ми да зумирате внатре Сега ние ќе направиме int главната (празно). Сега дозволете ми да оди напред и да се направи за (int i = 0; з < ох, 10; i + +). И сега ќе одам да одат напред и се печати на ѕвездата што направи порано. А потоа на крајот на оваа програма, ние сме само ќе печати нова линија, само така што мојата линија не изгледа сите неуредна. врати 0. Изгледа синтаксички исправни? Досега. Дали ќе видиме. Па дозволете ми да одзумирате, одам во мојата терминален прозорец. И дозволете ми да оди напред и да ја стартувате јамка, затоа што ова го нарече нешто loop.c. Така осигурајте се јамка. Чини да ги собере ред. Дозволете ми да се кандидира јамка, а сега Enter. И се чини дека се печатени 10 ѕвезди. Па да ја конвертираме во време јамка и да видиме што видови на прашања што патувањето е над. Така, наместо тоа, дозволете ми да одат во тука и да кажам додека јас е помалку од 10 - дозволете ми да се ослободи од за телефонска линија. ОК, па ние имаме неколку проблеми веќе. Значи состојбата е иста, но јас сум очигледно недостасува иницијализација. Јас сум недостасува incrementation. Значи она што треба компајлерот може да ми кажете кога се обидувам да компајлирате оваа програма? Да? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Добро. Па затоа се случува да се каже нешто како непријавена - во овој случај, јас променлива. И навистина, употреба на непријавена идентификатор i. Па така ова е во контраст со јазици како PHP и Пајтон и Руби, со која некои од вас може да биде запознаен, каде што можете да само вид на Започни со користење на променливи Willy-каде и не мора да се грижите за прогласувајќи ги експлицитно секогаш. Во Ц и во јазици како Java и C + +, што треба да биде супер експлицитни. И ако сакате променлива наречена јас, имаш да ми кажеш каков вид на променлива е тоа. Па ние ќе мора да го надминете овој како што следува. Одам да мора да одат до тука и напишете int i, па затоа, Имам прогласи променлива наречена i. Сега, јас сум прескокнат еден чекор. Сум очигледно не го иницијализира, но ајде да видиме дали дека во Најмалку марки ѕвекот престанат да се жалат. Значи, дозволете ми римејк оваа програма. Добро, сега тоа е само жалејќи за различни причини. "Променлива" i "се деиницијализира кога се користи тука." Сите права, па тоа е прилично експлицитни. Иницијализира само значи поставување еднаква вредност. И ние не го направиле тоа, па дозволете ми да се обиде еднаква на 0. Сега ајде да се обидеме тоа повторно и повторно да се кандидира ѕвекот. Составувач тоа време. И јас сум за да го стартувате. Но, голем стари бесконечна јамка, бидејќи јас сум направено иницијализација, Јас го направив на состојбата, но јас никогаш не го направиле било каков вид на incrementation. Па како можам да направам на incrementation? Па, во време јамка, таа се чувствува како јас ќе одам да имаат да го стори тоа во внатрешноста на јамка, бидејќи многу сличен на првиот недела примери за тоа looping конструкции, како и со на чорапи и со авто-броење, моравме да го нешто на самиот крај, како да се вратиме на следната линија. Што ако одам напред и да го направите ова i + + тука? Да не дури собере. Фати ме веќе. Што не е во ред овде? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Значи тоа не е дефинитивно int. Тоа е з. И тркалезните загради, како порано, вовлекување не е доволно. Па сега имам оваа конструкција. Така, додека i е помал од 10, печати ѕвезда, тогаш јас прираст. И начинот додека јамка работи е дека веднаш штом ќе го погоди дното на јамка, која во овој случај изгледа како линија 10, тоа се случува да се врати во алинеја 6, на која точка на состојба ќе бидат проверени уште еднаш. И ако јас се уште е помалку од 10, ние ќе направиме линии 8 и тогаш 9, тогаш ние ќе погоди 10, и се врати на 6, повторно и повторно и повторно и повторно, толку долго како што е помалку од 10. Па ајде повторно да се кандидира направите тука. Океј, ние сме собрани во ред. Дозволете ми да прегласување јамка. И сега тоа всушност изгледа да се работи. Значи предности и minuses тука? Па, засега не е всушност збир од ПЛО - толку слатко. Добро, тоа беше - ах, тоа беше несреќен случај. Добро, па ајде да се вратиме на за телефонска линија. Значи за петелки се убаво, бидејќи тие се супер експлицитни. И иако тие се малку clunky да се напише, тоа е многу моќен и тоа ви овозможува да направите повеќе работи одеднаш. Додека петелки не чини да имаат огромно количество на вредност само сепак, поради тоа што се чувствува како ние само треба да направите повеќе работа. Ние треба да се стави на иницијализација до тука, ажурирање тука долу, и ние треба да се запамети да го направите сето тоа. Па ќе видиме во времето што додека петелки всушност позајми се само различни контексти, различни податоци структури како листи и хаш маси, работите ние ќе дојдеме до средината на семестарот. Но, за сега, знаеме дека има овој трет тип познат како не- додека јамка. И ние го видел ова кратко. И ова може да биде супер корисни со pset 1. Било кое време сакате да направите нешто и потоа проверете дали корисникот соработувал, и ако тие не, го направи тоа повторно, не- додека јамка помага на самата да тој вид на логика. Бидејќи како нарачување од врвот до дното тука сугерира, се буквално значи го направите тоа. И дали ова повторно и повторно, она што може да биде? Можеби тоа значи повикување GetInt или GetString а потоа проверка на вредноста на GetInt или GetString а потоа вика на корисникот, ако тие не соработувале со поставување на нив повторно и повторно и повторно. Каде што сакате да се направи нешто еднаш, тогаш проверете некои состојба. Значи, да се обидат ова. Дозволете ми да го променат тоа сега на една не-додека јамка. И јас одам да се оди напред и направете го следново. Затоа направете го следново. Да направиме int i = GetInt (), но ајде прво кажете на корисникот што да правам. Па малку различен тоа време. "Дајте ми еден int". Па јас ќе го користите printf за тоа. И сега ќе одам да одат надолу тука, и јас одам да го направите тоа додека јас е, да речеме, поголема од - ајде да видиме, i е, да речеме, помалку од 0, или јас е поголем од 10. Со други зборови, сакам број од 1 до 9, само произволно. Затоа, јас сум со користење на комбинација Булова израз тука за да бидете сигурни дека јас е помал од 0 или поголема од 10, во кој случај јас ќе го направите ова јамка тука повторно. Значи, повторно, го прават тоа - додека јас е помал од 0 или i е поголема од 10. Па сега ајде да одиме напред и да го направите ова еднаш сме го направиле тоа. Ајде само се направи брзо разумност проверка. printf ("Благодарам, јас е% d", i). Значи ова едноставна програма прашува корисникот за int, прави сигурни дека тоа е во рамките на некои опсег, 1-9 инклузивен, а потоа благодарение на корисникот со потсетување им го она што тие само внесе во, како малку здрав разум чек. Но, ајде да видиме дали тоа функционира како што треба. Дозволете ми да одиме со главата надолу тука и повторно да се кандидира направи јамка. Hmm. "Употреба на непријавена идентификатор" i ". Тоа е чудно. Мислев дека реши тоа. Истиот симптом, но различен код. Да? ПУБЛИКАТА: [Беззвучен] внатрешноста на две, мораме да [Беззвучен]. Дејвид Џ MALAN: Токму така. Значи ова всушност нè води до една тема познато како опсегот. Излегува дека C, повторно, тоа навистина ќе ве однесе во буквална смисла. И ако се направи нешто вака каде што прогласи int а потоа го додели некои вредност, но ќе го направите тоа внатрешноста на пар на тркалезните загради, она Ц не е тоа претпоставува дека само сакаат оние 32 бита познат како јас да постои во рамките на контекст на тие кадрави загради, во контекст на линии 6 до 9. Па јас се декларира, а тоа е доделен вредност во алинеја 8, но веднаш штом ќе излезете надвор од алинеја 9 под заграда кадрава, јас повеќе не е во обемот, така да се каже. S-C-О-П-Е. Тоа веќе не е во вистинскиот контекст. Па сега не постои јас, па тоа е како да не сме имале дури и објави тоа на сите. Значи она што е фикс потоа за вакво нешто, ако Причината е тоа што јас се декларира во големи загради, кој е очигледно лошо? Тука? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Да. Па ние може да се иницијализира надвор. Па дозволете ми да оди напред и да го избришете декларација делови при Јас се определи видот, и дозволете ми да го направи до тука. Значи во линија 5, сега вели: "Дај ми една int." Го нарекуваат i. Забележите во алинеја 9, јас не сакате да го направите ова, бидејќи јас веќе имаш 32 бита. Не сакам да го прашуваат компјутерот за различни 32 бита. Сакам да користам истите тие 32 бита. И сега бидејќи јас е прогласена во линија 5, тоа е уште legit да ја користите во линија 11 и линија 12. Па дозволете ми да се обиде да го прекомпајлирате ова и да видиме ако ѕвекот запира вика. направи јамка. Па сега тоа е "имплицитна изјава на функцијата "GetInt" е неправилен во C99. "Што е тоа? Да? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Да. Па сега дека јас сум всушност користење GetInt, ова не е нешто дека само доаѓа со C. Ова доаѓа од CS50. Значи ние треба овој овде. И дозволете ми да се вратиме на брза надолу тука и повторно да се кандидира направи. Океј, конечно. Сега ние сме решени дека и други грешки. А сега допуштете ми се кандидира јамка и да видиме што се случува. "Дајте ми еден int." Јас ќе ја даде 11. Јас ќе го даде -1. Јас ќе го даде foo. Јас ќе ја даде 5. И сега тоа навистина функционира. Но брзо се промени за причина тука. Зошто велат дека тоа се обидете повторно еден од овие моменти, но ми даде int другите три пати? Зошто е тоа однесување различен? Публика: го даде стринг. Дејвид Џ MALAN: Молам? ПУБЛИКАТА: Ти ја даде стринг. Дејвид Џ MALAN: Да. Па ние го даде стринг во овој трет обид, кога јас ја внеле foo. Foo е стринг. Тоа не е очигледно int. И начинот на кој CS50 има имплементирано GetInt е дека ние не провери дали нешто е помалку од 0 или поголема од 10 за вас, бидејќи како да знаеме однапред каков вид на int сакате? Но, ние минимално може да се провери за вас, не на корисникот најмалку напишете број? И ако тие не, ние се развикам на корисникот со отчукување на "обидете се повторно" за на екранот. Така, сега имаме една програма која е looping. Во ред. Сега, кој од нив е вид на подобра конструкција? Значи ова е местото каде што работите почнуваат да се добие малку неуредна, на фактот дека мора да се сеќавам да декларирате променлива се тука ако сакате да ја користите во внатрешноста на некои кадрави загради и надвор. Но, дури и ако тоа изгледа малку криптичната на прв поглед, само повторно, се сеќаваш на едноставна логика. Со цел да се користи ништо во C, без разлика дали тоа е функција или тоа е променлива, што треба да се вклучи ако тоа е во функција во некои библиотека, или треба да се изјасни. Но сега треба да биде екстра свесен за фактот дека сте го прогласи во вистинската опсегот. Не го стави премногу цврсто во внатрешноста на загради. Значи, дозволете ми, всушност, се тркалаат назад. Ако се вратиме на нашиот пример од погоре, и јас одам назад за int, int i = 0; з <10; i + +, и јас направи printf ѕвезди, како таков, и потоа да го затворите paren, а сега printf i е сега - според истата логика, што ќе се случи кога се обидувам да компајлирате оваа програма? ПУБЛИКАТА: Невалиден идентификатор. Дејвид Џ MALAN: Значи тоа е уште еден неправилен идентификатор, Непријавената идентификатор. Сега, причината е малку поинаква. Има очигледно нема кадрави загради тука, но исто идеја, истата приказна на опсегот важи. Ако имате прогласи променлива како што внатрешноста на за телефонска линија, дури и ако не сте експлицитно напишано кадрава протези, мислам на нив ментално како уште се таму, во кој случај јас е валиден само во внатрешноста на за телефонска линија. Тоа не е валидна штом ќе стигнете до следната линија, која во овој случај е сега 10. Значи само неколку прашања од делокругот и слично. Сите права, било какви прашања? Добро, така што ова е вид на тривијални малку програма, печатење само ѕвездички. Но, да видиме ако се сеќавате оваа песна тука. Ова е неверојатно досадни песна на децата ќе пее на на школскиот автобус и слично. Но, она што е убаво за него е дека тој ја има оваа cyclicity, при што е "99 шишиња од пиво на ѕидот, 99 шишиња од пиво. Земете еден надолу, минува, тоа околу, 98 шишиња од пиво на ѕид. "И тогаш песната повторува 97, потоа 96, потоа 95, потоа 94, па сè до 0, ако навистина разбра далеку во автобус. Значи ова е убав програма за сортирање на спроведување, бидејќи мојата Бог, ако може само да ја имплементираат оваа со неколку линии на код, можете да плукаат целиот текст на овој песна доста брзо. Но на патот, можеме да почнеме да сега разграничат некои на овие основни looping конструкции и сега, исто така, воведе функции кои ние самите пишуваат, да се вратите вредности кои се поминува низ. Но прво, зошто да не се оди напред и да се нашите пет минути скрши тука? И кога ќе се вратам, ќе пее оваа песна. Сите права, па ние сме назад. И кога велам ние сега ќе ја пее оваа песна, мислам програмски, не вербално. Значи тука имаме beer1.c, која е една имплементација на овој одредена песна. И само да биде јасно, за оние кои се запознаени со она што оваа работа изгледа, дозволете ми да оди напред и да beer1, Enter. Сега дозволете ми да се кандидира beer1, и што ќе видиме - колку шишиња на пиво ќе има? Јас ќе напишеш во 99, како песна вели. Enter. И сега, ако ние се движите низ - Упс - ако скролувате низ сето ова, ќе видиме дека ова навистина пее целата песна. Почекајте една минута. Мој лизгач е малку збркана. Ајде да го користите поголем прозорец. Значи beer1, 99, таму ќе одиме. Значи тука имаме целата песна, испеана многу побрзо од компјутер отколку што можеше да биде со нас. Значи забележите, сепак, цикличната природа тука. Таа вели 99, потоа 99, потоа "се еден надолу, го предадете околу ", тогаш 98. И сега тоа се повторува одново и одново. Значи ова е всушност добра можност за некој вид на looping изградба. Забележете дека Јас сум вид на сечење агол тука. Забележете дека јас велам "98 шишиња од пиво на ѕидот, 97 шишиња од пиво на ѕидот ", а тоа беше само така дека кога ќе дојде до еден шишиња од пиво, јас немам да се грижите за англиски граматика. Но, ние исто така може да го надминете овој со малку на ако состојба, можеби. Ако овој број е еднина, оди напред и да каже "шише", инаку, ако тоа е множина, велат "шишиња". Но, за сега, јас сум целосно намалување на тој агол. Да видиме што имаме тука. Значи ние имаме некои коментари на врвот. Јас сум вклучувајќи ги и овие две библиотеки, како ние сме најчесто биле. И сега дозволете ми да дојдете до првиот реалните линии на код. Линија 17 започна главниот. Линија 21 и 20 има колку шишиња од пиво ќе има? И тогаш јас го нарекувам GetInt. И сега имам малку здрав разум чек. Значи ова е конвенцијата што ние сега ќе почнеме донесување на повеќе ригорозно проверете влез на корисникот. Понекогаш едноставно не сакаат да ги поттикне повторно и повторно и повторно. Ако корисникот завртки и не соработуваат, парична казна. Цигарите и едноставно не се справи со нив. И така тоа е она што јас го правам тука. Ако n е помал од 1, јас сум само ќе се развикам на корисникот, "За жал, тоа не прави никаква смисла." И тогаш ќе одам да произволно врати 1. Значи, повторно, ова е само конвенцијата да се навикнеш на. За сега, однесете го на верата. Но, до сега, ние секогаш се враќа 0, бидејќи што рековме враќање 0 означува она? ПУБЛИКАТА: Успех. Дејвид Џ MALAN: Успех, тоа е се. Па сега дека ние сме конечно почна да размислува за не успеси - со други зборови, агол случаи, грешка услови - сега имам бесконечен снабдување, или барем четири милијарди можни работи што може да тргне наопаку во мојот програми. И јас да почнете да ги доделување поединечни броеви. Сега, генерално е доволно само да се вратат нешто друго од 0. Така ние ќе едноставно да се врати 1 за сега. Но причината за враќање 1 е дека веднаш штом ќе се врати 1, погоди што се случува со остатокот од програмата? Се запира. Тоа е тоа. Значи фактот дека јас сум се враќаат 1 е ефикасно краток спој извршување на оваа програма, така што ништо под линија 27 ќе продолжи извршување. Штом главни се враќа, тоа е тоа. Добро, па ако корисникот не соработуваат и доаѓаме до линијата 30 бидејќи тие ја внеле во легитимен број, овде е мојата Спроведувањето на оваа песна. Па јас прв печати од нова линија карактер, само за естетика. Јас сега имаат за телефонска линија. И ќе забележите правам нешта во малку на поинаква насока. Јас не треба да направите помалку отколку, јас не треба да направите + +. Јас наместо да се каже иницијализира со променлива i, поставете го еднаква на n, бројот на корисникот внесе во, тогаш направете го следново, па додека i е поголема од 0, тогаш јас - Откако ќе завршите еден повторување на овој циклус. Значи ние можеме да сметаме надолу со помош на за телефонска линија, како и. Сега, ова е доста една недела работи сега, со printf. Значи печати "% d шишиња од пиво на ѕидот." Печати "% d шишиња од пиво. "" Земете еден надолу, поминуваат околу него. "Печати "% D шишиња од пиво на ѕидот." Значи тоа е уште% d, но забележите дека аргументот на printf се менува. По запирката, јас имам, затоа што сакам да кажам 99. По ова запирка, јас имам, затоа што сакам да кажам 99. По ова запирка, јас имам - 1, затоа што сакам да кажам 98 во овој прв повторување, и така натаму. И сега овде, јас само имаат некои глупави малку забелешка. А потоа линијата 42, ќе се вратам 0 по договор, означува дека сè е во ред. Така што ако јас goofed? Што честа грешка тука може да биде? Па, што ако јас случајно рече добро, јас сакам да се избројат одредување на 0, сакам 0 шишиња од пиво на ѕидот? Значи јас велам, i е поголема или еднаква на 0. Што се случува да биде симптом кој јас сега да видам дали можам прекомпајлирате beer1 и да ја стартувате тоа? ПУБЛИКАТА: Негативни. Дејвид Џ MALAN: Да, тоа е ќе одат негативни. Ова е off-по-еден грешка, неверојатно Честа грешка да се направи. Да, всушност, оди назад кон терминален прозорец и направете го тоа тука, па можеме да видиме повеќе во исто време. Внесете, 99 шишиња од пиво. Блиски, но отидовме некогаш толку малку предалеку. Ние ја отпеа песната премногу далеку долу, како што ние сега се погоди негативен број. Значи тоа сосема не работат. Добро, така што лесно може да одреди дека со одење назад кон начинот на кој таа некогаш беше. Но, она што се некои можности сега за подобрување? Па, дозволете ми отвори beer2.c и дојдете долу тука и да преземат погледне во оваа верзија. Што е првото нешто што јурнува нанадвор во вас, како различни во оваа верзија тука? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Да, па нема повеќе јас, затоа што тоа се случило да ме знаеш што, јас барам на корисникот за n, и тогаш јас сум поставување i еднаков на n, а потоа сум јас менува, но јас никогаш не сум допирање n повторно. Значи она што е грижам е точка од вас доделување на уште 32 битови се нарекува Јас само така што можам да имаат различни променлива? Значи во овој случај, јас вид на признаа дека непотребно дизајн функција. И јас сум сега се случува да се каже додека n е поголема од 0, одете напред и печатење на истата песна, полагање на n да printf како Вториот аргумент, и n - 1 како втор аргумент тука долу. А потоа на секоја итерација на овој циклус, одиме напред и само декриминирачките n себе. Сега, функционално, оваа програма се случува да бидат идентични. Ако јас напишете 99, n започнува во 99. Јас декриминирачките, некоја вредност, некоја вредност, некоја вредност. Одам да ги добиете сите на патот надолу до "Еден шише пиво на ѕидот, едно шише од пиво. Земете еден надолу, поминуваат околу него. 0 шишиња од пиво на ѕидот. "На крајот, бидејќи јас не добиете состојба точни. Тоа е поголем од 0. Јас не ја прават оваа грешка. Така што е подобро, верзија еден или верзија двајца? Па слушнав еден куп на мрморења за двајца. Зошто две? Што е тоа? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: О, во ред. Така што не ќе одат под 0, но се сеќавам, во верзија еден, оригиналниот правиот верзија не одат под 0 или. Значи се сеќавам дека ова е правиот верзија. Па ајде барем споредуваат две точни верзии. Што е аргумент во полза на верзија две се, mmm, подобро? Да? ПУБЛИКАТА: Таа користи помалку простор. Дејвид Џ MALAN: Океј, па тоа го користи помалку простор, нели? Каде верзија оној што се користи 32 бита за n, а потоа уште 32 бита за i. Верзија две користи само 32 бита за n, така што чини да се биде плус. Други мисли? Сака ли некој да се аргументира во полза на еден? Да? ПУБЛИКАТА: Мора да се користи дополнителна линија на кодот за n -. Дејвид Џ MALAN: Океј, секако. Значи тоа е фер. Значи ова само, барем за мене - Мислам, ова всушност се чувствува малку Messier, фактот дека Не може да се најде на капсулирало сите мои логика во една убава линија, за телефонска линија, како за телефонска линија може. Еве, јас вид на треба да тактика на овој n - на крајот од циклусот, бидејќи тоа е логично потребно. Но, тоа вид на ме трие на погрешен начин, само затоа што тоа чини одвоени од логиката на се тука, иако, повторно, тоа е потребно. Други мисли? Да? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Да. Па што ако наместо тоа, на крајот на песната, сакав да испечатите повторно на името на песната? Како "Ви благодариме за играње 99 шишиња од пиво", или нешто глупо, како тоа? Но поентата е, што сакав пристап до оригиналната вредност. Фактот дека сте мутирани или променета n на секој повторување и затоа го уништија неговата оригинална вредност значи дека едноставно не може да го направи тоа на крајот. Сега, веројатно, ние јасно не сакате да го направите дека во оваа програма. Па кој се грижи? Но, тоа е многу валидна поента. И да бидам искрен, има навистина никој вистинскиот одговор тука. Тие се двете подеднакво точни. Јас би можеле да бидат убедени или начин. Јас ќе кажам дека, општо земено, тоа е добра принцип, ако побара од корисникот за некои вредност и ќе се чуваат во променлива како n, само вид на во принцип, тоа е веројатно добра да го задржи дека наоколу. И сите податоци што сакате да мутира повторно и повторно, само се даде копија од таа променлива, само така што ќе имаат пристап до оригиналот. Ќе се трошат 32 повеќе битови, но реалноста е оваа компјутер, како, два гигабајти RAM меморија овие денови, и ние сме quibbling над 32 битови? Навистина не е толку голем договор. Па дури и на овој уред тука, со половина свирка или GIGABYTE на RAM меморија, 32 бита наспроти 64 бита, не е толку голем договор. Секако денес, тоа ќе биде начин совладан од големината на самата програма, која ќе биде неколку стотини килобајти, ако не и неколку мегабајти, овие денови. Толку разумни загриженост, нема еден точен одговор. Но барем тоа се мисли дека треба да почне да одат преку вашиот ум? Бидејќи во pset 0, иако ние навистина само очекува коректност, или барем одрекува разни грешки кои можеби сте наишле, како што се движиме напред, дизајнот е ќе биде уште еден клучен аспект, и двете од пишување код а исто така и нашите оценување код. И така барем даде смета дека вакви работи. И само затоа што нешто работи не значи дека тоа е добро, тоа не значи дека е добро дизајниран. И тоа е една од работите на наставата соработници и Проблемот сетови ќе ни помогне да закачам дел текот на времето. Па, она што за, да речеме, оваа верзија тука? Дозволете ми да се направи нешто малку секси тука во еден момент. Прво дозволете ми да се ослободи од ова. И сега ајде да го надминете овој граматички прашање. Значи во оваа верзија, сакам да го поправат граматика, така што, наместо само велат parenthetical с, како "шише" или "шишиња" - Не сакам да се намали тој агол - Исто така, сакам да се динамички печатење на зборот "шишиња" или "шише", а со тоа користејќи променливи овие% s денес. Па јас треба да условно провери што е вредноста на i. И ако тоа е 1, сакам да кажам "шише", а ако е нешто друго, сакам да кажам "шишиња". Значи, да се обидат да го направите тоа. Значи, ако јас == 1, тогаш дозволете ми да оди напред и да пријават - Ми треба стринг, па нека ми направи стринг S1, затоа што тоа е првата низа Јас се грижат за право сега. Одам да се каже "шише". И тогаш, ајде да видиме, стринг S2 - и јас ќе објасни каде ќе одам во еден момент - "Шишиња". Значи се потсетиме дека во оваа песна, ние треба да бидат способни да се печати работи, два различни зборови потенцијално. Значи, ако се погледне назад тука, забележите дека кога ќе дојде до овој пример тука ", две шишиња пиво на ѕидот, две шишиња пиво, земи една долу, тоа помине околу "Сакам оваа четврта линија до сега велат "едно шише од пиво на ѕид ". Па јас треба да одлучи, дали сакам да кажам" шишиња "или "Шише"? Па јас одам да произволно се каже, во ред, Одам да сега декларирате променлива наречена S1, стринг еден, што се случува да се добие вклучени тука и тука, затоа што тие зборови се секогаш идентични, само затоа што на природата на песната. И јас одам да се јавите S2 она збор што сакате да го на крајот се појави тука долу. Сега, буквално, 99 пати од 100, тоа нема да биде исти и во двете од овие случаи, бидејќи 3 е множина, 2 е множина, 4 е множина. Но, во овој агол случај, каде што дојде до 2, а потоа 1 или дури 1 и потоа 0, ми треба оваа логика. Па морам да поминете некое време во мојот код добивање на тоа право. Значи, ако јас го направите ова, ако јас == 1, потоа во собата S1 еднаква на "шише" и S2 еднаква на "шишиња", бидејќи тоа ќе биде за 1 шише, и тоа ќе биде за 0 шишиња. И тука, она што го прави ова претставува? Само да биде јасно. Ова е само еден коментар. Значи фактот дека може да има една линија коментари што значи можат да коментираат кодот како овој, но уште еден заеднички парадигма, исто така, е дека ако имаш супер-кратка фраза која сакате да се стави и тоа е само повеќе може да се чита да се стави тоа право на крајот на линија код, можете да апсолутно се направи нешто како ова. Па сега што ако јас го направите ова? Друго, ако не е еднаква на 1. Значи тресне еднакво - фантастичен точка е познат како "тресне". Значи тресне = 1. Значи, ако јас не е еднаква на 1, она што можам наместо сакате да направите? Па, првиот збор што сакам да биде она што? Значи стринг 1 треба да биде "шишиња" за множина шишиња, и тогаш ова ќе биде множина "шишиња", како и, за сега. И ние ќе се види дали ова всушност добива ни да каде што сакате да одите. Па сега ако дојдете тука, забележуваат дека сум приклучување не само јас, туку S1. Јас сум приклучување на i и s1. А потоа долу тука, јас сум минус 1, која е иста како пред, но s2. Со други зборови, сакам англискиот збор да се промени врз основа на оваа логика. Сега, има веќе некои проблеми во овој код. Што е скршен веќе надвор од портата тука? Да? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Токму така. Па јас веќе прекршила лекција од опсегот. Значи јас сум прогласена S1 и S2, но јас сум го направил во внатрешноста на кадрави загради, што значи да, овој код ќе работат до до линија 42, но штом ќе го погоди линија 43, погоди што не не постои? Па, погоди што веќе не е во опсегот - ниту S1 или S2. Значи ние треба да го надминете овој. Значи, да ми ја избришете декларации. И јас ќе ја напушти променлива имиња и да го избришете овој овде и да го избришете овој овде. И во она линии треба јас навистина пријават овие работи? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Да, па веројатно право тука, 33-носталгичната. Значи стринг S1 и потоа стринг s2. И што излезе, можам да го направите тоа. Ако сте прогласување две променливи од ист тип, можете да всушност само користете запирка и го правам тоа во C. Сите право, па сега имам две променливи - S1 и S2. Јас сум ги доделување вредности во овие услови тука, или тука. И тогаш јас сум ги користите долу. Колку добро е овој сега се случува на работа? Па, тоа е уште малку кабриолет, но ајде барем видите колку далеку сме добиле. Па дозволете ми да оди напред и да beer3. Дали е ова beer3? Да, ова е beer3. И сега дозволете ми да оди напред и да ја стартувате beer3. 399 99. Ние веројатно да го прескокнете повеќето од нив. И овде, гледам во тоа. "Еден шише пиво на ѕидот, едно шише пиво, да еден долу, тоа помине околу, 0 шишиња од пиво на ѕидот. " Но јас сум цртање вашето внимание само половина од решението. Вид на зезнав тука. Така, се чини дека на работ случаи се јавуваат кога се еднакво што две вредности? ПУБЛИКАТА: 2, 1. Дејвид Џ MALAN: 2 и 1. Тоа не 1 и не е 1. Тоа е навистина само овие последните две строфи на песната. Значи она што можам наместо сакате да направите? Па јас се чини дека се фатени на случај каде што ако јас се == до 1, тогаш првиот збор е "шише", но вториот збор е "шишиња". Но, тука, сакам да ја промените оваа да биде == 2. И ако ова е случај, она што сакам првиот збор да биде? ПУБЛИКАТА: "шишиња". Дејвид Џ MALAN: "шишиња", па за две шишиња. А потоа овој збор треба да биде - ПУБЛИКАТА: "шише". Дејвид Џ MALAN: "Шише", еднина. Добро, ајде да одзумирате, врати овде, прегласување направи, прегласувањето beer3, тип 99 повторно. Океј, "Сегментација на вина (јадро фрлени)." Што направив погрешно? ПУБЛИКАТА: Вие немаат вредност [Беззвучен]. Дејвид Џ MALAN: Ах, одлична точка. Добро, така што не е во ред овде? Значи сегментација грешка, и ние сме всушност ќе се види ова неколку пати и во иднина, намерно. Но, за сега, што тоа всушност значи? А сегментација грешка речиси секогаш значи дека имате некако обиделе да пристапите меморија, RAM меморија во вашиот компјутер, дека Вие не го поседувате, дека не сте всушност побара од оперативниот систем за. Значи во овој случај, забележи она што јас го направив, која е недостатоци во мојата логика. Имам доделен S1 и S2 вредност ако јас изнесува 1. Јас сум исто така направено што ако јас изнесува 2. Но, јас не го направиле тоа во неограничен број на други можности - особено, 3 или 4 или точка, точка, точка, 99. Значи еден фикс за ова само може да биде ајде имаат друг состојба. И дозволете ми да одат во тука и да кажам S1 изнесува - она што треба да биде тука? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: "шишиња", бидејќи во чест случај, тоа е само истото. Значи еднаква понуда, unquote "шишиња". Значи за множина шишиња, а потоа се тука, за множина шишиња. Океј, па сега дозволете ми да се вратам на мојот терминален прозорец, прекомпајлирате, повторно го кандидира. 99. Whew. И ајде да направиме еден брз разумност проверка. Технички, ние би сакале да ги прочитате сите од овие да бидете сигурни дека тие се точни, но ајде да погледнеме најмалку познатите виновници. 3 шишиња, 2 шишиња, 2 шишиња, 1 шише, 1 шише, 0 шишиња. Ние се чини дека барем тоа фиксна за сега. Но фати тука е дека она што бог страшна збрка ова е само за да реши еден глуп еден карактер граматички детали. Па таму е вид на причина што си ја скратам овој агол порано, бидејќи тоа е само сосема досадно да мора да ја напишам оваа многу код. Но излегува дека има малку поелегантни начини на изразување на иста работа. И можеме да го направите тоа како што следува. Дозволете ми да ја напушти оваа на екранот за момент и воведе нешто познат како тројна оператор. Ова е вид на една лагер тоа е само со цел да ја направиме нашата живее малку sexier, како што вети. И јас одам да го направите тоа како што следува. Дај ми низа наречен S1, и дозволете ми да доделите како што следува. (I == 1)? "Шише", инаку "шишиња". Стринг s2 добива (i == 2)? "Шише", инаку "шишиња". Па што тогаш е разликата тука? Овие две линии на код, Јас го застапувам гледиштето, може да замени целата оваа збрка. Значи јас го нарекувам хаос, само поради тоа што вид на ме трие на погрешен начин дека тоа е толку многу линии на код. Не е во ред. Тоа не е лошо дизајн. Како, тоа е совршено точно и совршено добро. Но кодирање добива досадни, ако треба да се изразат така По ѓаволите конкретно повторно и повторно и повторно со едноставен сценарио се допаѓа ова. Па C има некои кратенки се допаѓа ова. Па ова во суштина е велејќи прогласи низа наречен S1 и доделите или оваа вредност или оваа вредност ако јас е == - Жал ми е, јас треба да кажам ова појасно. Декларирате променлива S1, додели оваа вредност ако ова е вистина. Инаку, додели оваа вредност. Значи со други зборови, ова е вид на една линија начин на велејќи дека ако друго туку прави една задача на патот. Значи, ако јас е 1, тогаш оди напред и ова го нарекуваат "шише". И тогаш ова друго, го нарекуваат "шишиња". Во меѓувреме, S2, на вториот збор дека ние треба да се дефинира, ако јас изнесува 2, ние ќе постави S2 да "шише". Инаку, тоа е поставено на "шишиња". И она што тоа значи сега е можам да одат преку овој и избришете сите оние линии на код. И кога велам, малку смешно, дека ова е сега sexier, тоа е sexier во вид на стилска смисла. Фактот дека функционално, овој код е, всушност, ќе направи иста работа. И иако тоа може да изгледа малку криптичната на прв поглед, бидејќи ние не го видел ова конструкција пред, јас би тврдат дека тоа е крајот ќе биде многу повеќе читлив и толку многу полесно за ние, луѓето да се најде на се разбере, бидејќи сега вие само може да се прочита код сите во една линија. Тоа е сепак слични во духот на дали, кога тоа е состојба и тогаш тоа е она што е внатре во ако и овој е она што е внатре во друго. Но, можеме да го направите ова само многу повеќе елегантно. И ако Јас сега одам се враќам на терминал, ја брише сите на оние линии и да се замени нив со само овие две, прекомпајлирате, прегласување шишиња од пиво со 99, известување дека мојата граматиката е, всушност, се уште точно. Значи, повторно, нешто да се започне. 2 шишиња од пиво, 1 шише пиво. Изгледа во право. Да. Па ние имаме многу повеќе содржаен решение. Па ова, исто така, како можете да добиете повеќе удобно со C не, мора со првиот pset или дури и втората, но сфатат дека овие конструкции да ни овозможи да се прават работите некогаш повеќе елегантно. Сега ајде да направиме една друга работа тука. Дозволете ми да оди напред и да се отвори return1.c. Сега ајде да почнеме да се реши уште еден проблем во начинот на кој ни овозможува да напишете повеќе софистицирани код. Значи тука е едноставна мала програма чија цел во животот е за зголемување вредности. И всушност, ајде да направиме чекор назад. Дозволете ми да го направите тоа рачно. Дозволете ми да се направи вклучуваат и int главната (празно). И дозволете ми да се јавите на оваа increment.c. И она што сакам да направам? Одам да се оди напред и да се каже нешто како - ние ќе се јавите на броеви иста - int x. Значи int x добива 2; printf x е% d, нова линија, х. Па јас сум пишување брзо, но вид на познати работи сега. Потоа јас ќе одам да направите X + +. Потоа јас ќе одам да се печати истата реченица повторно. А потоа јас ќе одам да се врати 0 само да се откажат од програмата. Добро, така што ова е програма со која зголемување на број. Тоа е прв случува да се иницијализира нешто до 2, а потоа тоа е ќе го прираст и печатење на тоа повторно. Значи, да се кандидира прираст, неверојатно едноставна програма. Но, претпоставувам дека сега сакам да коцка вредност, затоа направете го нешто донекаде произволна. И јас всушност сакате да направите x добива коцка од неа. Па јас да го користите она што се нарекува функцијата Pow, но јас не навистина знаат каде е тоа уште. Па ќе одам да се направи ова на старомоден начин. x пати ова е еднакво на x пати x пати х. Па јас сум местење Рубикова коцка вредност, множење тоа само по себе повторно и повторно и повторно, така што ќе го добиеме моќ од 3 во овој случај. Па сега на броеви треба да се печати треба да биде, како што ќе видиме тука - прават прираст, па тоа е всушност навистина не прираст повеќе, но ние ќе го напушти името сам - 2, а потоа 8. Сега, имаме почетоците на можност за прочистување тука, при што ова местење Рубикова коцка работа на множење на бројот само по себе по себе по себе се чувствува како тоа само може да биде корисно да се има како функција, слично како некој одлучи години - знаете, вид на корисни ако еден од нас седнува и пишува printf, така што остатокот од светот да го користите, зошто да не се седне и да напише функција наречена коцка која го прави ова местење Рубикова коцка за нас, па ние не треба рачно да спроведување на идејата за местење Рубикова коцка вредности овде? Значи едноставен пример, но, ајде да одиме напред и користат ова е како можност да се напише нашите сопствени функција. Па досега, ние сме се користи само главните, и ние сме користеле други луѓето функции, но ние не го имаат напишано нашите сопствени. Значи тука ќе одиме. Одам да се оди напред и да се напише функција наречена коцка. И јас ќе одам да имаат преземе влез. Па нејзиниот влез ќе биде цел број. И што е тоа ќе го направи? Тоа се случува да се изјасни int излез = влез пати влез пати влез. И тогаш се случува да се врати таа излез. И тогаш мора да биде специфична сега. Оваа функција ќе се врати int. Значи тука тогаш е како што би напишете своја сопствена функции. Прво одлучи што е името на вашиот функција ќе биде. И, генерално, нешто објаснување е добро, па ќе се нарекуваат коцка. Потоа мора да се определи што тоа се случува да се врати, она што е своето производство ќе биде. И ние немаме што многу опции сеуште. Int, char, плови, bool, стринг. За сега, јас ќе одам да се држиме со int, затоа што го сакаат тоа да се врати цел број. Потоа мора да се определи што нејзините влезови, доколку ги има, се. И ако коцка зема аргумент, потребно нешто помеѓу загради, мора да се даде тој аргумент име, така што можете да го наречеме нешто како сте спроведување или пишување оваа функција, и ќе мора да го даде тип, кој во овој случај ќе биде int. Значи во кратки, коцка е функција која зема целобројна како влезни и враќа цел број како излез. Значи она што не го прават тоа со тоа влез? Па, во линија 14, изјавувам променлива наречена излез, и јас додели на вредноста, влез пати влез пати влез. А потоа ќе се вратам излез. Па како можам да го користите овој тогаш? Што да си ги променам овие истакнати ликови on-line 7 да се, мислиш? ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Да, така коцка на x. Значи x е променлива, што значи дека има некои вредност. За среќа, тоа е од тип integer. И бидејќи x е цел број, тоа значи дека можам да го помине во коцка. И иако јас сум највисок вредноста на x со вредноста на коцка x, како што беше случај досега, секој пат кога ќе имаат еднакви знак и на линија на кодот, работи на десната добива извршува, а потоа добива доделени на вредност на левата страна. Па редоследот на операциите е како ние ќе се надеваме. Значи оваа работа? Па, дозволете ми да одат надолу тука. Дозволете ми да се отвори мојот терминален прозорец. Дозволете ми да се направи прираст, Enter. "Имплицитна изјава на 'коцка' функција е валиден во C99. "Како настрана, C99 однесува на јазик C, како што беше дефинирани во 1999 година, која беше ажурирање во текот на верзијата од 1989 година, која е надградба над оригиналот. Значи тоа е сите што тоа значи. Па што значи тоа дека "имплицитна изјава на 'коцка' функција е валиден? "Тоа е право тука. Тоа е во право, таму во линија 12. ПУБЛИКАТА: [Беззвучен]. Дејвид Џ MALAN: Што е тоа? Публика: Тоа не е порано. Дејвид Џ MALAN: Тоа не е порано. Значи ова е нешто. Ц е вид на глупави, или C компајлери се вид на глупави. Тие навистина само го направи она што им каже да го стори. И тие, особено, само ја прочитате вашата код врвот до дното, лево кон десно. Значи, ако на компајлерот, ѕвекот, е читањето на вашата шифра, алинеја 1, го фигури како да го направите тоа. О, тука доаѓа главната. Океј, дозволете ми да оди напред и да декларирате променлива x. Дозволете ми да печати нешто. Линија 7, она што е грижам е коцка? Тоа не е прогласена во stdio.h. Тоа не доаѓа со В Јас немам идеја што да прави. И така ѕвекот само bails и поднесе оставка со тоа порака за грешка. Значи можеме да го надминете овој во неколку начини. Ние можеме да ги учат ѕвекот она што коцката е од само се движи кога декларација е. Па јас се намали и атипичен тоа на врвот на главната. Сега сфати дека само затоа што главен повеќе не е прв, тоа е уште извршена од стандардните. Главните е главен. Тоа е стандардно името на функцијата. Не е важно каде е во датотека. Но барем сега ѕвекот го видел коцка пред да го користите. Да видиме дали ѕвекот е посреќен сега. Направете пораст, тоа го компајлирате тоа време. Дозволете ми да се кандидира прираст. И навистина, се чини дека да се работи. Сега, може да излезе со сценарија на крајот каде што тоа не е изводливо да се стави секоја функција над секоја друга функција. Ќе се заглавени во оваа бескрајна јамка во реалноста, каде што овој човек сака да биде тука, но овој човек треба да биде таму. Така што не е секогаш работа. Па за среќа, C има повеќе домот решение. Одам да се стави ова повторно таму каде што беше, само затоа што преферираат, како прашање на принцип, дека главната секогаш ќе биде на врвот, бидејќи тоа е само убаво да се види она што оваа програма прави по дифолт. И она што јас ќе одам да направите овде горе е декларираат она што се нарекува прототип. Одам да се ре-искажам коцка функција од страна буквално копирање и вметнување. Всушност, тоа не е буквално. Значи буквално копирање и вметнување линија 15 погоре алинеја 6. Не е важно она што линијата ова завршува на. Се случува да биде на линија 4. Но тоа не мора да биде пред главниот. Но ја забележат разликата. Алинеја 4 завршува со точка-запирка, што значи еј, Ѕвекот, земајте мојот збор за тоа дека постои функција наречен коцка која ги зема int и враќа int. Но, јас не сум ќе ти кажам што е тоа уште. Само знам дека јас ветувам дека ќе ви каже на крајот. И навистина, сега тоа е во ред дека ова е долу. Значи ова е обично подобро, затоа што тогаш на врвот на Вашата датотека, можете само да штракаат исклучите, скорострелен, една линија секој, што имињата на вашите функции се, кои се нивните влезови се, кои се нивните резултати се. И да биде појасно, влез обично значи аргумент или параметар, синоними. Излез значи повратната вредност, она што го прави рака назад кон мене. Значи во овој случај тука, коцка е прогласена на врвот, но дефинирани, инаку позната како имплементирани, на дното. Па сега да се вратиме овде и повторно да се кандидира тоа. Па сега дозволете ми да одиме напред и повторно да се кандидира направи, повторно да се кандидира прираст. И тоа сега се чини дека се работи само парична казна. Па сега можеме да одиме напред и фактор на нешто како пиво пример во оваа четврта верзија. Па дозволете ми да дојдете овде. И ќе забележите дека јас вид на ја презеде оваа лекција за срцето само сега. Фактот дека сум бил пеење на истата строфа повторно и повторно и повторно, на истиот рефрен линија во песната, ја чувствував типот на зошто не сум фактор кој надвор во функција? И навистина, ова треба да биде еден од мотивации. Покрај фактот дека некој друг во светот можеби ќе сакате да се користи коцка функција - тоа е добра причина да се фактор нешто и напишете ја вашата сопствени функција - ако има парче код во вашата програма дека само прави концептуална смисла, дека вид на сакаат да го даде име - како во овој случај, хор - тогаш слично може да напише дека како посебна функција. Вие не треба да се напише се што е во главната ако тоа само се чувствува почиста да го издвојат и го даде името. Значи во овој случај тука, забележите дека имам коментар на врвот оваа функција дека само пее за утврдени број на шишиња. Забележете тука дека јас не треба да се јавите на овие работите влез и излез. Всушност, овој пат само се нарекува мојот влез б за шише. И ќе забележите тука, неважечки сугерира што? Тоа хор - ПУБЛИКАТА: не го вратат. Дејвид Џ MALAN: не враќа вредност. И навистина, функции не треба да се врати вредности. Тие само може да се направи нешто. Тие можат да имаат она што се нарекува несакани ефекти, кои во овој случај е само еден куп на печатење на екранот. Значи забележите дека овој код овде, јас буквално само украдов од претходниот пример. Единствената разлика е, наместо користење јас како мојата променлива, јас сум сега користење б како мојата променлива. Значи имам б долу тука, имам б долу тука, имам б минус 1 доле. Но кодот е иста. Но, само за да ви покаже колку е можеме да го користиме ова, дозволете ми да одат напред и всушност ја промените оваа да биде за телефонска линија. за (int i = n; з> n; з -). Па јас украдени дека од нашите претходни пример. Претходно, тоа е во ред 37 дека ќе имаат отворени пеење оваа досадни песна. Но, наместо тоа, јас сум само ќе сега го нарекуваат хорот на i. Готово. Така, сега во секој повторување на овој циклус, јас ова го нарекуваат други функција, хор, кои се случи да пишувам. Тоа не е напишана од некој друг години. Но хор, пак, користи printf за печатење од овие четири линии. Но, фактот дека јас сум повикувајќи хор повторно и повторно во јамка значи дека јас ќе одам да се добие, на самиот крај, иста песна како што имам досега. Значи во кратки, сега ако се погледне назад на мојот код, иако функционално ова е еквивалент забележите дека тоа е почнуваат да се добие дури и повеќе читлив. Јас точно не знам како GetInt се спроведува. Искрено, јас не знам како хор се спроведува. Но, тоа не е важно за мене. Не ми е гајле, бидејќи сега може да се најде на, како човечки, да се прочита ова од врвот до дното. И бидејќи функциите се именувани според она што направи, мојот кодот е се повеќе читлив. И како нашите програми се многу посложени - до крајот на семестар, ќе бидат писмено стотици линии на код во јазици како PHP и го вклучите Javascript-и слично - ќе најдете дека тоа е многу полесно отколку да ги пратите на што сте го направиле. И кога ќе почнете да соработува со пријатели или партнери или колеги, ќе бидете во можност да пишувам многу повеќе масивни програми од страна почнуваат да се остваруваат овие основни градежни блокови. Па со тоа, рече, зошто да не го нарекуваат еден ден? И ние ќе се видиме во среда. [Аплауз]