ЗВУЧНИК 1: Во ред. Добредојде назад. Ова е втората недела од CS50, и ние имаме досега бил со користење функции, но во голема мера ги земаат здраво за готово. Ние се користат printf која има пропратен ефект на печатење работите на екранот. Ние сме се користи се-int, се плови. Но, што ако навистина сакаш да креираш свој функции, како што некои од можеби веќе почнаа да направи за проблемот постави еден, иако не се бара строго? Добро, ајде да одиме напред и да го ревидираш дека проблемот на само прашува корисникот за нивното име и печатење нешто на екран, но обидете се да се фактор на некои на сличност дека ние сме види во нашиот код досега. Па со тоа мислам на следново. Одам да се оди напред и да се создаде нова програма, само јавете се тоа hello.c како и обично. Одам да се оди напред и да даде себеси вклучуваат стандардни io.h на врвот. Одам да се, исто така, си даде превентивно на CS50 библиотека, така што Јас не се викна на страна на компајлерот. И сега ќе одам да се оди напред и изјавува int, главната, неважечки. А потоа во тука, ова е местото каде што сакате да почне да нарачува услуги функционалноста на некои други функција која јас сум случува да пишувам, но тоа не го прави во моментов постојат. На пример, да претпоставиме дека сакам да напише функција која им овозможува на мене да испечатите здраво, запирка, а тогаш името некои корисникот. Наместо да продолжите да го направите printf Здраво,% s, не би било убаво ако имаше само функција наречена не printf но печати име? Значи со други зборови, сакам да биде во можност да напише програма која го прави малку нешто како ова. Прво, јас одам да се каже printf вашиот име, а со тоа се прашува корисникот за да ми даде неговото или нејзиното име, и тогаш јас сум случува да се користи добро познатиот String s до прогласи стринг. Дај ми променлива од тип стринг, го нарекуваат с, и чување во кои резултира повикувајќи се добие стринг. Но сега во недели минатото, јас би нешто секојдневно да направи здраво,% s / n. И со други зборови, видовме оваа пример еден куп пати, и тоа е тривијални пример, бидејќи таму е само еден линија код, па тоа не е навистина голема работа да се задржи пишување во повторно. Но, да претпоставиме дека оваа линија код всушност стануваат товар и тоа не е една линија код, но тоа е 10 линии на код неколку недели од сега, а ти си само добивање уморни за копирање и вметнување или пречукување дека истиот код. Зарем не би било убаво, наместо за правење printf Здраво,% s и така натаму, не би било убаво ако имаше само функција наречена печати име кое зема аргумент - со други зборови, тоа трае влез - а потоа запирка. Па таа функција, не би го било убаво ако тоа постоела? Тогаш јас нема да мора да се грижите за она што printf е, што% s и сите овие комплексности кои се не е сето тоа интересно. Тие се корисни. Па печати име, за жал, не беше измислен околу 40 плус години. Никој не мислеше да го пишувам. Но тоа е убавината на се има програмски јазик, исто како и во Нула можете да дефинирате сопствени блокови, па во C и повеќето било кој јазик, може да ви дефинирате вашата функционалност, може да го дефинирате вашиот сопствен функции. Па дури иако ние се главно од автоматски за бесплатно, ние да се прогласиме нашите сопствени функции. Па ќе одам да се направи некои соба до овде до врвот, и јас одам да го кажам сопствени функција што се случува да се погледне малку чудно на прв, но ние ќе се назад кон оваа пред долго. Одам да се каже празнина, а со тоа укажувањето на оваа функција го прави нешто, има пропратен ефект, но тоа не се врати нешто за мене во ист начин како што се int или добиете низа себе го прави тоа. И јас одам да им даде на оваа функција на името на печатените име, а јас ќе одам да се каже дека овој човек се случува да се земе стринг, и јас одам да се јавите дека Стринг име. Јас би можеле да го наречеме што сакам, но јас сакам моите код да биде само-документирање. Со други зборови, ако некој од вас се да ја отворите оваа датотека и да го прочита, можете да вид на заклучиме од името на тој влез каква улога би требало да се игра. А сега под тоа, јас ќе одам да се отвори кадрава голема заграда и затворени кадрава голема заграда, и така забележиш јас сум по истиот шема на линии четири низ седум како Сум бил по за добар недела плус сега меѓу, да речеме, линии девет и 14 кои ја сочинуваат главната. Со други зборови, печати името е уште една функција. Сега, компајлерот не се случува да се знае да се јавам оваа работа автоматски затоа што буквално само го измислиле но тоа ќе се знае уште да се јавите главна автоматски, а потоа се разбира во линија 13, јас сум повикувајќи мојата функција. И бидејќи јас сум изјавил дека функцијата до on-line четири пред главната, ова се случува да учат на компајлерот она понуда, unquote, "печати името" значи и што треба да се направи. Па јас сум вид на што му дава нови сопствени блокира во контекст на, да речеме, нула. Па овде, можам да се стави дека многу чести или периодични модел на кодот Продолжувам пишување во класа, printf % S Здраво,% S / N ", - она што сакам да се стави тука? С? Па сакам да се стави името во овој контекст. Па забележите малку на дихотомија тука. Бидејќи јас сум прогласување мојата функција и јас на некој начин произволно наречен го испечатите име, и бидејќи јас сум наведени во заграда дека овој функција се еден аргумент, видот на која е стринг - па тоа е збор или фраза или нешто слично - а Јас го повикувам тој аргумент име, дека значи дека само променлива која е во обемот, така да се каже, е името. С постои само помеѓу она што две кадрави загради, се разбира? Па навистина, исто како линија од 10 до 14, па исто како и во понеделник не можете да користите S, но она што можам да направите е да се помине S во печатените име. Печати име само така се случува да го даде алијас, синоним, прекар, нарекувајќи го името, а сега користење на тоа во оваа линија. Па сега нека ме спаси ова, одзумирате. Дозволете ми да оди напред и да здраво. Изгледа добро. Не плукаат било какви грешки. . / Здраво Enter. Што е моето име? Давид. И здраво Давид. Па не сите што возбудлива, но само мислам сега. Сега го имате истата состојка како што направивме во нула да се направи нашите сопствени функции. Но, постои малку на gotcha. Претпоставувам дека не сум навистина мислев ова преку и јас всушност без навистина размислува за тоа напишал таа функција овде долу. Се чувствува совршено разумни. Во Скреч не постои поим на локација во вашиот скрипти. Вие би можеле да еден стави до тука, едно до тука, еден до тука, и тоа би можело да почне да се погледне малку неуредна ако не лежеше го ова уредно, но тоа не важно каде физички скрипти беа на екранот. За жал во C - и ова е за разлика од јазици како Java и Python и другите дека може да биде запознаен со - за жал во C, цел го прави тоа важно, бидејќи се види она што е ќе се случи сега. Стандардната функција што се случува да се изврши е, се разбира, главната. Главната се случува да се јавите печати име на линија осум, но за жал, компајлерот нема ни да знаат дека печати името постои се додека не се добива на линија 11, кој за жал е ќе биде премногу доцна. Па ајде да го прават здраво. И сега гајле, две грешки генерирани. Па сега дозволете ми да дојдете до самиот Прво, како што секогаш треба да се направи, и забележите дека тоа е вика на мене, "Имплицитен декларација на функција печати име. " Па видовме оваа порака пред, имплицитна изјава на функцијата. Кога не сме виделе таков вид на грешка? Кога Јас не вклучуваат библиотека. Ако го заборавив cs50.h и јас ќе ја добие викна на за да добиете низа или да се Инт. Но во овој случај, оваа функција печатење името не е во библиотека, нели? Тоа е буквално во оваа датотека, па она што е навистина проблемот? И за жал во C, тоа ќе ве однесе толку неверојатно буквално дека ако сакате функција наречена печати име постојат, можете или треба да ја имплементира таа функција во самиот врв на вашата кодот, така што тоа е достапно за да се намали функции, но искрено, дека станува невешт многу брзо. Лично, ми се допаѓа ставање главниот прв затоа што тогаш тоа е многу јасно она што овој програмата не на прв поглед. И плус, можете да добиете во чуден агол случаи каде ако x сака да се јавите y но y може да се нарече X, вие само физички не, всушност може да се стави еден над друга. Но излегува во C, можеме да се реши овој многу едноставно. Одам да се стави малку простор до тука, и јас сум само ќе превентивно, иако донекаде redundantly, ќе учат компајлерот дека постои функција наречен печати името, потребно е стринг, и јас одам да се јавите името на таа точка-запирка. Значи ова сега е во линија четири, кои ние не сте виделе порано, е декларација на функција печати име, но тоа е само ветување дека оваа функција ќе на крајот да се дефинира, на крајот да се спроведува. Ова сега можам да остават на мира, бидејќи сега ова е дефиниција, имплементација, вид на последната милја на спроведувањето на оваа одредена функција. Па искрено тоа е глупаво, тоа е досадно, но тоа е начинот на C е, и тоа е бидејќи тоа ќе ве однесе многу буквално и, како компјутер искрено треба, само што токму она што ви кажам до се направи, и така што нарачување е важно. Па задржи тоа во предвид, и повторно, да почне да забележите повторување на обрасци. Шансите се дека ќе, ако не имаат веќе, почнете да се судрите со пораки како овој, што на прв поглед изгледа целосно криптичната, но ако почнете да се погледне за овие клучни зборови како "Имплицитен декларација", се спомене на функција во овој случај - и искрено, можете понекогаш дури и да се добие малку зелена морков симбол кој ви кажува каде ова прашање веројатно е - можете да почнат да работат на вашиот пат низ сепак невидена грешка пораки. Било какви прашања за пишување на вашиот своја функција на овој начин? Ајде да направиме нешто што е малку повеќе привлечни. А не само направи нешто што има пропратен ефект на печатењето, дозволете ми да одам напред и да зачувате нова датотека, а ние ќе ова го нарекуваат positive.c, иако тоа е ќе биде малку различен наспроти последен пат. И овој пат, сакам да се ре-имплементираат positive.C пример последен пат, кој се присили на корисникот за да им даде мене позитивен цел број. Но морав да го користите да се добие int последен пат. Зарем не би било убаво ако имаше функција наречена добие позитивен цел број дека јас само може да нарачува услуги на оваа парче функционалноста? Значи разликата тука е, дека ќе спроведување добие позитивен број, но за разлика од печати име кое имаше пропратен ефект - тоа не се врати нешто за мене како број или низа - добие позитивен цел број е, се разбира, ќе врати, се надевам, позитивен цел број. Па ајде да го направите тоа. Вклучуваат cs50.h, вклучуваат стандардни io.h. Int главната неважечки. И сега тука, јас ќе одам да се оди напред и да речеме int, го нарекуваат n, е еднаква на добие позитивен цел број. И само како да се добие int веќе постои затоа што вработените го напишал, јас ќе одам да се претпостави за момент дека се позитивни int постои, и сега ќе одам да се оди напред и да каже printf, Ви благодариме за% i / n ", н. Па сега ако јас ги собере на оваа програма, што ќе се случи во мојата терминал прозорец на дното на екранот? Одам да веројатно се добие дека истата грешка како порано. Па ајде да се обидеме ова. Направи позитивен. И повторно, имплицитна декларација на функција, да добијат позитивен цел број. За да можеме да се реши овој во неколку начини. Одам да ја задржиш едноставен и само ставам декларација до тука и да добиете позитивен цел број. Ми треба т.н. потпис. Потпис само се однесува на естетиката на првата линија на програмата. Значи она што треба да се добие позитивен int возврат? Значи Инт. Мислам идеално, би се вратила нешто како позитивен цел број, но тоа не постои. Ние не видовме дека меѓу нашите податоци видови, така што мораме да се справи со фактот дека имаме многу малку типови на податоци за работа со. Но можеме да се врати int и само верувам дека тоа ќе биде позитивен. Тоа се случува да се нарече добие позитивен цел број. И сега како за своите аргументи? Што е потребно за секој влез? Дали тоа треба секој влез? Така што не треба да се знае однапред ништо. Добие стринг не, се int не. Printf не - тоа треба да има некои влез помина во него - и печатење на името се потребни некои влез, но се позитивен цел број не. Па ќе одам да се експлицитно кажам на компајлерот неважечки. Празнина е отсуството на било што друго. Па неважечки средства ништо не се случува во внатрешноста на оние загради, точка-запирка. И сега на дното на моето досие - и повторно, јас сум само се вид на аналниот тука ставање главниот на врвот, кои е добра практика, бидејќи на овој начин, во секое време вие ​​или некој друг отвора датотека, функционалност е во право таму. Може да се нурне во од плоштад една. Па сега јас ќе одам да се дуплираат ова, добие позитивен цел број празнина, но јас не сум ќе удри точка-запирка сега. Одам да се отвори големи загради, и сега јас треба да позајмите некои идеи од понеделник. Па како што се потсетиме, ние го сторивме нешто како да го направите следново додека нешто не е точно. И она што никако не можев да направам? Го направив нешто како даде мене позитивен цел број, малку на линија. Можам да ги искористам сите зборови што сакам. И тогаш јас се користи што? Int n еднаква добие int, без аргументи за тоа. И ја забележат разликата. Кога ќе се јавите на функција, кога користите некоја функција, не се стави во празнина. Вие само го направите тоа кога прогласување на функција, настава на компајлерот она што тоа треба да се очекува. Значи, вие не треба да се стави поништат тамо. И сега што беше мојата состојба? Па, n не е еднаква на позитивен, но тоа е само псевдо-код. Па како можам да ги изразат оваа повеќе демонтирани? Толку е помала или еднаква на нула. Значи, повторно, информации можете да направите помалку од или еднакво на. Иако тоа е две одделни симболи, можеш да го направите на вашата тастатура како таква. Но има уште бубачка дека Јас ја зезнав последен пат премногу. Јас мора да се декларираат - точно. Јас мора да се декларираат N надвор на јамка. Па јас треба да се стави n до тука, а јас не сакате повторно да го прогласи тука да не би да добиете нова променлива. Јас само сакам да доделите вредност од тука. И сега јас не сум сосема направено овде. Дозволете ми да го добие пред себе и се преправам дека сум сторил. Направи позитивен, а сега има нова грешка. Контрола достигне крајот на не неважечки функција. Толку нови порака за грешка, но ако вид на одгатнат секоја од зборови, тоа најверојатно навестува што не е во ред. Контролира. Контрола само значи на редот на операциите во програма. На компјутер е во контрола и нешто тргнало наопаку. Па тоа достигне крајот на не-празнина функција. Што функција е очигледно однесуваат на? Што функција е не-празнина? Значи добие позитивен цел број, и малку збунувачки во тоа добро, тоа е вид на празнината. Таа има спецификација на празнина за своите аргументи, но своето производство ќе да биде од тип n. Значи зборот на левата страна е т.н. враќање тип. Зборот во внатрешноста тука е на нула или повеќе аргументи дека некоја функција треба. Па што ми е потребно да направам? Во овој момент во мојот код, линија 21 каде што трепкаше брза сега е, јас имаат позитивен цел број внатре на променливата наречена n. Како можам да ја вратам до главна? Буквално. Врати n запирка. Па само како Колтон се врати парче хартија со одговорот кон мене од намалувањето дека парче хартија во малку црн кутија на маса, да го сторат тоа во код, вие буквално само напиши, вратете n, а тоа е како да Колтон се ме предавање нешто физички назад. Во овој случај, она што се случува е да се добие позитивен цел број се случува да го предаде назад она што е веројатно позитивно број на кого? Каде таа вредност да заврши? Кој завршува во оваа променлива, n и потоа да продолжиме со линија девет. Значи со други зборови, со цел на операции, овој Програмата започнува извршување, и на компајлерот сфаќа, ох, вие сакате со библиотеката? Дозволете ми да одат грабне она што е внатре тоа. Ох, сакате стандардот IO библиотека? Дозволете ми да одат грабне она што е внатре тоа. Што значи на компајлерот се каже да се кога хитови линија четири? Ох, ти вети дека ќе спроведе функција наречена добие позитивен, но ние ќе се вратам на тоа подоцна, нешто заедно оние линии. Int главната празнина само значи тука е храброст на мојата програма. Линија седум е само кадрава голема заграда. Линија осум кажува на левата страна, им даде на мене 32 бита за цел број, го нарекуваат n. На десната страна, тоа е велејќи добие позитивен цел број. Сега пауза ајде таа приказна, бидејќи сега Јас не продолжат мојот курсорот надолу. Мојот курсорот сега оди надолу тука, бидејќи сега се позитивни int извршува. Int n е декларирана. Да го направите следново. Printf ми дава позитивен цел број. Добие int од корисникот, чувајте го во N, а можеби го направите ова повторно и повторно. Овој циклус значи дека овој код може изврши нагоре и надолу како ова повторно и повторно, но кога корисникот конечно соработува и ми дава позитивна int, јас хит линија 21, на која точка на број е предаден назад, и која Јас треба да се истакне сега? Девет. Контрола, така да се каже, се враќа да се редат девет. Тоа е линија која е сега во обвинението. Значи тоа е она што се случува сите овој пат под хауба, но кога сме користените функции како printf или дури и да стринг кој некој друг напиша за вас, контрола бил предаден исклучување на некој друг кодот линија по линија по линија. Тоа е само не можевме да го видиме и ние не можеше навистина го отслика во овој програма, бидејќи тоа е во некои други датотека на хард диск непознат за нас. Па ајде всушност ги собере и да ја стартувате на оваа сега. Направи позитивен. Ги собере, и тоа е напредок. . / Позитивни. Ми даде позитивен цел број. Ајде да биде тешко. Негативни 1. Нула. Ајде да се даде 50. Ви благодариме за 50, и така контрола сега се врати. Било какви прашања, тогаш, за тоа? Да? [Нечујни]. Кажам уште еднаш. Ох, добро прашање. Па можеби ќе забележите паралелно тука дека Јас сум вид на намалување на аголот на. Во алинејата 12, сакам да кажам дека, да добијат позитивен цел број враќа int, но од страна на истиот логика, сега стои на разумот дека во линија шест, јас велам дека главната враќа на int, но она што треба ние никогаш не имаше во било кој од нашите програми? Ние никогаш не сум имал споменување на овој клучен збор возврат. Значи излегува дека во C, најмалку верзијата на тоа дека ние сме користење направени во 1999 година, технички, тоа е случува за вас автоматски. Во секое време да се спроведе програма и спроведување на функција наречена главната, дека функцијата ќе се врати нула до стандардно, ако не се каже поинаку, и нула е само конвенцијата. Светот се враќа нула со тоа покажува дека се е добро, ефикасно оставајќи ни со четири милијарди можни нешта кои би можеле да одат не е во ред, така што ако се вратиме еден, тоа би можело да значи код кој значи ова нешто не беше во ред. Ние би можеле да се врати два, што значи ова другото не беше во ред. Ние би можеле да се вратат четири милијарди, кои значи дека оваа друга работа беше во ред. И ако сега се размислува за свој PC или Mac, може да се сети дека понекогаш добивате криптичната пораки за грешки од софтвер кој сте користење, а понекогаш и таа има човечки пријателски опис, но има често код или број на екранот? Ако ова не доаѓа на ум, само да се внимава од за тоа. Тоа е обично она што овие кодови се однесуваат. Тие се вклучени во Microsoft Word и други програми, така што ако поднесе извештај за бубачки со компанија, вие можете да им каже, ох, добив грешка број 45. А некои програмер назад во компанијата може да изгледа дека во неговата или нејзината кодот и да каже, ох, тоа е затоа што сум направил овој баг и тоа е причината зошто на корисникот добив оваа порака. Но искрено, тоа е само малку оттргнува и малку досадни да се заклучи дека, барем на нашите Првите неколку програми, па ние сме е тоа испуштајќи. Но, сето ова време секој еден од вашите функции главната има тајно имаа оваа линија автоматски се додава за вас од страна на компајлерот, само со конвенцијата за те спаси некое време. [Нечујни]. Вие не треба да се вклучи во главната. Тоа е во ред. Вие не треба да се вклучи ако сте биле спроведување на функција како оваа. Во спротивно функцијата рамен надвор не би сакал да работиш. Но во главната, тоа не е неопходно. Во една недела или две, ќе започне да добива во таа навика еднаш сакаме да започне означувајќи грешки. Навистина добро прашање. Толку брзо вербални пауза да се спомене дека овој петок, ние нема да има ручек по себе, но ние ќе се вечера со некои од учениците и персоналот. Ако сакате да ни се придружат, се чувствуваат слободни да одат на cs50.net/rsvp. 06:00 овој петок. Простор е, како и секогаш, ограничени, но ние ќе се продолжиме да работиме овие на речиси неделна основа, ако простор снема оваа недела. Па cliffhanger дека ние застанавте на Понеделник е дека конците да всушност бидат индексирани во која само ти значи може да се добијат на првиот карактер, Вториот знак, третиот карактер и така натаму, бидејќи можете да ефикасно да се сетам на стринг, како Здраво, како во овој случај пет писма внатрешноста на кутии. И можете да добиете на секоја од овие кутии со она што синтакса ние сме дел воведе во понеделникот? Оние квадратни загради на вашата тастатура. Дека само наменета одат на локација нула. Ние почне пребројување на нула, па заградата нула значи часот, држач еден значи Е, и така натаму. И така цело време кога ние сме биле користење на низи и пишување во "здраво" и "светот" и други нешта на на екранот, тоа е се чуваат во кутии како оваа. И да се погоди. Што значи секое поле претставуваат физички во внатрешноста на вашиот компјутер? [Нечујни]. Е жал? Карактери. Па карактер, сигурно во случај на стрингови, и лик е само осум битови или еден бајт. Па најверојатно се барем нејасно запознаени со фактот дека вашиот компјутер има меморија. Таа има два типа паметење барем. Една од нив е на хард дискот каде те спаси работи постојано, и тоа е обично голем, па можете да ги имаат филмови и музика и така натаму. Тогаш имаш друг тип на меморија наречен RAM меморија, Р-А-М, Случаен Пристап Меморија, и ова е тип на меморија кој се користи кога вашиот компјутер е работи, но ако ја изгуби власта или вашиот батерија умира, нешто што е зачуван во RAM меморија исчезнува ако не сте ја изгуби власта заедно затоа што тоа не е упорни. Можете обично имаат, овие денови, Свирката на тоа, две свирки, можеби и повеќе. И главата на RAM меморија е дека тоа е многу многу, многу побрзо од хард дискови или дури и солидна држава дискови, овие денови, но тоа е обично поскапи, па имаш помалку од неа. Значи разговор денес навистина се однесува со RAM меморијата, тој тип на меморија, која постои само додека има моќ се хранат во вашиот компјутер. Па кога ќе напишете во H-Е-Л-Л-О, Enter на на тастатура, H се случува во една бајт на RAM меморија, Е се случува во уште еден бајт на RAM меморија, како што е остатокот на зборот. Па се потсетиме на она што бевме во можност да го стори последен пат беше тоа. Дозволете ми да оди напред и да се отвори датотеката дека ние се нарекува string.c, и се сети дека тоа изгледаше малку нешто како ова. Дозволете ми да всушност се тркалаат назад и промени до токму она што изгледаше како, стринг должина на С. Така се погледне на програмата тука. Ние вклучуваат CS50 библиотека, па дека можеме да го користиме добие стринг. Ние вклучуваат стандардни io.h па ние да го користите printf. Зошто ние го вклучите string.h? Ова беше ново во понеделникот. Па сакавме стринг должина. Ул Leng. Луѓе одлучија години, ајде да биде краток и јасен. Наместо нарекувајќи го "стринг должина" ајде да го наречеме "ул Leng" и нека свет бројка што надвор, и така тоа е она што ние се добие пристап до со string.h. Ова е познато. Ова е познато. Ова е познато. Ова е малку ново. Во линија 22 - а ние ќе се врати на ова, но сега за сега знаете - и ти само ќе го знаеме и ова од тоа да имаат прочитајте ја документацијата или ако сте знаеле Ц веќе - добиете низа понекогаш може да ја зафркнам. Ако корисникот е навистина контрадикторна или несоработка и тој или таа само не напишеш нешто на тастатура или типови толку многу на тастатура дека тоа потиснува меморија на компјутерот, во теорија, да добијат низа може да се врати нешто друго од низа од карактери. Тоа би можело да се врати посебен вредност се нарекува NULL во сите капи, N-У-Л-L, и ова е само т.н. стража вредност. Тоа е посебна вредност што означува нешто лошо се случи во овој случај. Тоа е отсуство на стрингот. Па null јас сум проверка за едноставно така што, скратам приказната, ул Leng и други функции кои доаѓаат со C, ако тие очекуваат низа, но можете да ги помине отсуство на стринг, ако помине ги NULL, на компјутер или на програма само ќе несреќа целосно. Тоа ќе се откажам. Тоа ќе фрли некои порака за грешка. Лоши работи ќе се случи. Па дури иако ова е уште не се добро дефинирани - ова ќе го направи повеќе смисла во една недела или две - во линија 22, ова е само пример на само дефанзивна грешка проверка само во случај на едно од еден милион нешто тргне наопаку, на Најмалку мојата програма не ќе несреќа. Значи, ако s не е еднакво на нешто лошо, Имам оваа за телефонска линија, и тоа беше каде што имавме дека другите нова фигура на синтакса. Јас имам еден за телефонска линија процесирањето од нула на до должината на s. А потоа тука, јас бев печатење надвор е заградата јас, но зошто јас го користам% c сите одеднаш, наместо на% s, дури и иако е е стринг? Тоа е карактер, нели? S е стринг, но е заградата нешто, Додади заградата јас каде i се е нула или еден или два, тоа е индивидуална карактер во стрингот, и така за дека, printf треба да бидат информирани дека тоа е навистина карактер да се очекува. А потоа се потсетиме, што направив ова Програмата всушност правиме? Печатени тоа во колони. Да, точно. Тоа само печатени зборот што јас напишеш во колона, по еден знак на линија. Да видиме повторно. Така бидете стринг. Составувач OK. . / Стринг. Дозволете ми да напишеш во H-Е-Л-Л-О, Enter, и навистина јас го добие, по еден на линија. Па да ми направи една оптимизација тука. Ако мислите дека за тоа, особено ако сте програмирани пред, има веројатно на неефикасност во линија 24. Со други зборови, тоа не е нужно најдобар дизајн. Јасна, барем еднаш ќе запомни она ул Leng е, но тоа е прави нешто неми потенцијално. Она што може да биде? [Нечујни]. Токму така. Тоа е проверка за должината на S секој пат, иако H-Е-Л-Л-О е секогаш ќе да биде пет карактери. Секој пат низ овој циклус, петте не се менува. Јас би можеле да бидат з зголемување,, но она што е должината на s на секој повторување на овој циклус? Тоа е пет, тоа е пет, тоа е пет, а но јас сум сепак бара ова прашање повторно и повторно и повторно. Сега искрено, компјутерот е толку проклето брза, никој нема да забележите разликата во овој случај, но овие видови на сиромашните дизајн одлуки може да почне да се додаде, ако на компајлерот себе не се обиде да го надминете овој за вас, кои тоа обично не би, на барем во апаратот. Па јас ќе одам да го направите тоа. Одам да додадете запирка после мојот прв променлива, i. Одам да си даде уште еден променлива, нарекувајќи n, само со конвенција за броеви, и тогаш јас сум ќе додели n вредноста на стрингот должина од с. А потоа јас ќе одам да се промени мојата состојба да биде што? Одам да се промени мојата состојба да додека i е помал од n. Па сега, колку пати сум јас проверка на должината на S? Еднаш, но тоа е во ред да негрижата против n повторно и повторно, бидејќи сега тие вредности не се всушност се менува. Сега за сега, само знам дека во секое време да се јавите на функција, таму е малку надземни не, доволно за да ве обесхрабри навистина од секогаш користење функции, но секако кога има линија на кодот се допаѓа тоа - и линии ќе добиете повеќе интересни пред долго - каде што има можност да се размислува, ако јас напишеш овој код, колку пати тоа ќе го изврши? Ќе почне да се види со текот на времето ефикасноста на вашиот програми може навистина се промени. Всушност, еден од проблемот поставува ние сме направено во изминатите години вклучува спроведување, како што може да се сети од недела нула, Проверка на правопис, но правопис Проверка на кој е дизајниран за поддршка речник на 150.000 плус зборови кои ние ви даде момци. Вие ќе треба да се напише код кој товари тие зборови во RAM меморија, така што во кутии како што видовме на екранот момент Пред и потоа брзо како што може, треба да бидат способни да одговорат на прашање на форма, е овој збор згрешивте во пишувањето? Е овој збор згрешивте во пишувањето? Е овој збор згрешивте во пишувањето? И во нешто како дека она што ние сме направено во изминатите години е се претвори во, иако на тргнете во опционални основа, конкуренција на сорти, при што студентите кои користат помалку RAM меморија и помалку време, помалку процесорот циклуси, на крајот жуборот до врвот на малку лидер одбор или пласман дека ќе стави на на курсот почетната страница од пребарувачот Како што сме направено во изминатите години. Па уште еднаш, сосема задолжително, но овој зборува за дизајн можности кои се понапред еднаш ние почнуваме градење на врвот на некои од овие основните градежни блокови. Па да ми се вратиш на овој дијаграм за само еден миг и открие малку нешто повеќе. Ова навистина е стринг, и ние зедовме Предноста на неколку библиотеки, стандард io.h која има - Printf. Printf, меѓу другите нешта. cs50.h, која се int и да добијат низа и така натаму, string.h, која имаше ул Leng. Но излегува таму е уште еден. Искрено, има многу и многу од насловот додадени фајлови кои декларираат функции за библиотеките, но ова ctype.h е всушност ќе биде малку поволна, бидејќи јас ќе одам да се оди напред и спроведување на една друга програма тука. Дозволете ми да оди напред и да се отвори нешто Напишав однапред се нарекува capitalize.c, и ајде да ги погледнете како тоа функционира. Забележете дека јас сум со користење, во оваа верзија на тоа, три запознаени датотеки. Забележете дека во согласност 18, јас сум добивање на една линија на текст. Известувањето во линија 21, јас сум тврдејќи дека го следниов код ќе се профитираат с, без оглед на корисникот внеле во, и колку сум јас тоа го прават? Па, јас сум преземање - ја научил лекцијата од минатиот пат - Јас сум прогласување з и л и процесирањето во текот на карактери во стринг. И тогаш што е ова блок на кодот во линија 24 до 27 прави во однос лаик? Мали букви писмо назад. Токму така. Ако е заградата јас - па ако на i-тата карактер на s, која е одредена знак во низа, е поголем од или еднаква на мали букви а и - потсетиме дека двојно го симболот значи и - и од ист карактер, а заградата јас, е помалку од или еднакво на мали букви Z, тоа значи дека тоа е една или б или в или точка, точка, точка, или Z, што значи тоа е со мали букви. Што сакам да направите во тој случај? Па, можам да го направите ова донекаде cryptically, но ајде да се закачам оваа распаѓа. Одам да се јавите printf, отпечатоци% c затоа што сакам да ги препечатуваат овој ликот на екранот. Јас сум тогаш се случува да се земе а заградата јас, i-тиот карактер во с, и тогаш зошто правам ова малку трик тука, мали букви минус капитал А? Што е тоа што се случува да им даде мене, општо земено? [Нечујни]. Токму така. Јас навистина не се сеќавам - тоа беше 65 за капитални А јас воопшто не ми се запомни она мали букви a е, но не е важно. На компјутерот знае. Па со зборовите: мали букви минус капитал А, тоа е чудно да се биде одземање на едно знак од друг, но она што се карактери под хаубата? Тие се само бројки. Па што и тие бројки се, нека компјутер се сеќава на него наместо мене на човекот. Толку мали букви минус капитал A е ќе ми даде разликата. Се случува да биде 32, а кои ќе бидат случај за мали б и капитал Б и така натаму. Тоа останува доследен, за среќа. Па јас сум во суштина велејќи, да ги преземе мали букви, одземаат исклучи дека стандард разлика, и дека заградата јас ефикасно промени s од мали букви да, се разбира, големи букви, без моја навистина се има да се размислува за или Запомнете, она што беа оние броеви ние разговаравме за тоа кога на осум волонтери излезе на сцена? Сега меѓувреме, во друго, ако тоа не е на мали букви како што е определено од линија 24, само да го испечатите. Јас само сакам да го допрам карактери кои беа всушност првично мали букви. Да видиме тоа. Направи профитираат. Составувач, ОК. . / Профитираат. И дозволете ми да напишеш во H-Е-Л-Л-О со мали букви, Enter. И ќе забележите дека таа се трансформира во големи букви. Дозволете ми да го направите ова повторно со различен збор. Како за Д-А-В-I-D со првиот D капитализирани како име обично е? Enter. Забележите тоа е уште точни. Тоа само outputted дека првиот Д непроменети преку кој друг изградба. Значи имајте на ум, тогаш, неколку работи овде. Една, ако некогаш сакате да се провери две услови одеднаш, можете да и ги заедно како што предвидовме. Можете да ги споредувате ликови на овој начин и ефикасно да се третираат карактери како броеви, но искрено, ова е толку проклето криптичната јас никогаш не одам да се запамети како да се дојде до оваа од нула без размислување преку неа за сосема малку време. Зарем не би било убаво ако некој таму напиша функција наречена е намали кои би можеле да одговорат за мене вистина или неточно, овој лик е со мали букви? Па за среќа, кој го напиша ctype.h направија токму тоа. Дозволете ми да одам до тука и додадете ctype за в видови, и сега дозволете ми да одат надолу тука и преработи оваа линија како што следи. Значи, ако се вика е пониска, тврдам, а заградата јас, а потоа јас ќе одам да ги избришете овие две линии заедно. Па сега некој друг, се надевам, напиша функција наречена е пониска, а тоа Излегува тие го направија и ќе прогласат тоа внатрешноста на ctype.h. И сега ќе одам да ја напушти линија 27 сам, јас ќе одам да ја напушти линија 31 сам, но забележите колку јас сум стеснети до мојот код. Тоа е сега почист. Тоа е помалку тешко да се погледне преку бидејќи сега на функцијата, згора на тоа, е така прекрасно ја нарекол само го прави она што го кажува. Па сега јас ќе одам да се спаси ова. Одам да одзумирате. И исто како во Скреч би можеле да имаат Booleans, Булова вредности точно или неточно, тоа е токму она што е намали ефикасно се враќа. Дозволете ми да го прекомпајлирате. Дозволете ми да прегласување. И сега нека си го обидете се повторно, H-Е-Л-Л-О, Enter. Тоа е прилично добар. И обидете се повторно, бидете сигурни дека јас не зафркнам нешто. Дека е капитализиран, како и. Но тоа не е доволно добра, бидејќи на друга работа што јас никогаш не одам да се сеќавам ако јас не работат преку тоа навистина внимателно на, да речеме, хартија е тој проклет линија. Зарем не би било убаво ако имаше функција наречена на горниот дел? Па што се испоставува таму е во ctype.h, како и. Одам да се оди напред и да напишеш - дозволете ми донесе таа линија назад. Наместо тоа тука, дозволете ми да оди напред и да каже, замена за% c на резултат на повикувајќи оваа функција да Горниот на i-тиот карактер на s. И сега забележат тоа е добивање малку избалансиран. Морам да ги пратите на тоа колку загради Сум отворени и затворени. Па сега тоа е дури и почист. Сега оваа програма е се подобро и подобро дизајниран веројатно затоа што тоа е многу, многу повеќе може да се чита, но не е ни ајде да се поправи. Направи профитираат. . / Профитираат. H-Е-Л-Л-О. Ајде да се кандидира повторно, Д-А-В-јас-Д. ОК, па ние сме се уште во прилично добра форма. Но сега на горниот дел. Јас предложи дека има уште една префинетост ние би можеле да го направат тој ќе биде навистина убаво, што навистина би можеле да ги заостри до овој код и навистина ни даде пет од пет за дизајн, на пример. Што би било убаво да се ослободи од? Па, погледнете како проклето долго овој блок на кодот е само да се направи нешто едноставно. Сега како настрана, како што може да имаат виден во супер секција оваа минатото викенд, вие не строго треба кадрави загради кога ли само има еден линија код, иако ние предложи водење на нив, така што тоа го прави многу повеќе јасно, како во Скреч во форма на буквата У блокови, она што е внатре на филијалата. Но, не би било убаво ако на горниот дел на, кога со оглед на нејзината влез, го претворил во големи букви и ако тоа не е, и она што би биде прекрасен во спротивен случај ако тоа е веќе голема буква? Само да го помине и го остават на мира. Па можеби тоа го прави тоа. Јас би можеле да се обидат и само се надевам што го прави тоа, но нека ме воведе една друга работа. Наместо да се користи овој вграден во терминал прозорец долу тука, да се потсетиме дека овој плоштад црна икона ви дава поголеми терминален прозорец што можам да Комплетен екранот, ако сакам? Па тоа се покажува дека тие се вид на чудно именуван, но има овие работи вика Човекот страници, рачно страници, човекот за кратко, и јас да пристапите до овие од пишување човек - она што сакам да напишеш? Човек на горниот дел. И сега забележите ако постои функционираат во внатрешноста на компјутерот, во овој случај на апаратот, што е само на оперативниот систем Линукс, тоа се случува да ми даде малку криптичната сет на излез, но ќе најдете текот на времето дека таа секогаш е форматирана прилично многу исто така ќе почнете да се навикнеш на него. Забележите на врвот на горниот дел, а очигледно е иста документација за да се намали. Кој и да го напишал тоа е намалување на некои агли и го стави сето тоа на една страница. Овие работи "цел во животот е да го конвертирате писмо до горните или мали букви. Забележите дека под Синопсис, човекот страница се ме настава она датотека имам да се вклучат да ја користите оваа работа. Тоа е мене давање на потписи за овие функции, и двете од нив, дури и иако ние сега само се грижи за еден. Тука е сега опис. На горниот дел конвертира писмо в во големи букви, ако е можно. Сепак тоа не е инструктивен, но дозволете ми да сега гледам под повратната вредност, она тоа е предаден назад. Така што вредноста се врати е дека на конвертира писмо или в ако конверзија не беше можно. Што е Ц? Оригиналниот карактер. Оригиналниот карактер и знаеме дека со, повторно, оди до синопсисот, а кој го напиша ова функција само одлучи дека влезот за да горните и на пониските е само произволно ќе биде наречен в. Тие би можеле да се нарече повеќето ништо тие сакаат, но тие го чуваат едноставно како в. Па јас консултирани човекот страница. Оваа реченица ме уверува дека ако тоа не е некој мали букви, тоа е случува само ми даде назад в, која е совршен, што значи дека може да се ослободи од мојата друго состојба. Па да ми се врати gedit, и сега дозволете ми да го направите тоа. Одам да го ископирам моето printf изјава. Одам да одите напред и право внатре на за телефонска линија печати тоа надвор, и да добијат се ослободи од сега целата оваа ако конструкција. Не беше лоша идеја, и тоа беше многу многу точни и во согласност со сè сме проповедаше, но не само потребно. Веднаш штом ќе се реализираат некои библиотека функцијата постои дека некој друг напиша, или можеби сте го напишале на друго место во на датотеката, можете да го користите и навистина почне да се стегне на кодот. И кога ќе кажам нешто како добар стил, фактот дека ова лице се нарекува функционира на горниот дел на, или претходно е помал е прекрасно корисни, бидејќи тие се многу описни. Вие не би сакале да го повикате вашиот функции x и y и z, кои имаат многу, многу помалку значење. Било какви прашања на таа серија на подобрувања? Па тоа е доволно да се каже една од takeaways е дури и како свој проблем сет - можеби проблемот сет, но сигурно P постави два и наваму, дури и кога тие се точни не мора значи дека тие се совршени само сеуште или особено добро дизајниран. Кој е на другата оска на да почнам да размислувам. Така што ова е низа во внатрешноста на вашиот меморија на компјутерот, но ако имате целиот куп на ликови како H-Е-Л-Л-О внатрешноста на RAM меморија, и претпоставувам дека во вашата програма се јавите добиете низа повеќе пати, така што можете јавете се добие низа еднаш, а потоа можете јавете се добие низа повторно. Па, што ќе се се случи со текот на времето? Со други зборови, ако имате линија на кодот, иако надвор од контекст, како Стринг и добива - ајде да го направите тоа. Стринг име еднаква добие стринг. Значи да претпоставиме дека линија код е наменета да побара од корисникот за неговото или нејзиното име. Овој следната линија код е наменета да прашате на корисникот за неговите или нејзините училиштето, и овој следната линија, и така натаму. Да претпоставиме дека ние ги прашуваат на корисникот за друг и друг и друг стринг. Тие се случува да остане во меморијата во исто време. Никој не се случува да напердашвам од друга страна. Училиште не е запише врз останатите. Но, каде сите тие завршат во меморијата? Па, ако почнеме да се подготви на екранот, кој можеме да го користиме ова нешто тука како chalkboard, ако ова црно правоаголник претставува мојот компјутер меморија, ќе одам да се произволно да почне поделба на тоа на малку плоштади, од кои секоја претставува еден бајт од меморијата. Искрено, ако имате GIGABYTE на RAM меморија овие денови, имаш една милијарда бајти на меморија во вашиот компјутер, така една милијарда на овие плоштади. Па тоа е доволно да се каже, ова не е навистина да скала. Но, ние би можеле да се задржи цртање на сите овие јасно да скала плоштади, и ова колективно претставува мојот компјутер меморија. Сега ние само ќе го направите точка, точка, точка. Значи со други зборови, кога јас сега го извести корисник со get стринг за да ми даде стринг, што се случува? Ако корисник видови во "здраво", која завршува во Н-Е-Л-Л-О. Но, да претпоставиме на Корисникот тогаш видови во - всушност, јас не треба да имаат направено Здраво, бидејќи ние бараме нив за нивните имиња. Па ајде да одиме назад, ако можам да го направите тоа. Значи, ако јас типот во Д-А-В-I-Д за моето име, но се сети дека втората линија на код им беше добиете низа повторно да се добие нивното училиште. Каде е тој збор дека корисникот видови во обидеме да одиме понатаму? Па, можеби тоа се случува да одат во В-А-Р-В-А-Р-Д. Па дури иако јас сум подготвени како два реда, ова е само цела група на бајти во вашиот компјутер RAM меморија. Има еден проблем сега, бидејќи сега ако јас сум користење на RAM меморија во оваа многу прифатлива но вид на наивен начин, она што може да ви очигледно не се направи разлика? Каде што почнува и каде еден завршува, нели? Тие се вид на замаглување заедно. Значи излегува на компјутерот не го направите тоа. Дозволете ми, всушност, дојдете назад во времето на неколку карактери, и наместо тоа на Харвард случува веднаш по името на корисникот, корисникот всушност добива, зад сцената, со посебен карактер вметнат од страна на компјутер за него или неа. / 0, инаку позната како НУБ карактер annoyingly наречен N-У-Л, не N-У-Л-L, но ќе го напишам што / 0. Тоа е само сите нула битови е маркер во меѓу првиот збор што на корисникот отчукува и на вториот. Па Харвард, всушност, сега завршува како оваа низа од карактери и уште еден / 0. Значи со други зборови, со тоа што овие Сентинел вредности, осум соседни нула битови, сега можете да почнат да се направи разлика еден карактер од друга. Значи сето ова време што беше "здраво" е всушност "здраво" со / 0, и Во меѓувреме, може многу добро биде сосема малку повеќе RAM меморија во внатрешноста на компјутерот. Дозволете ми да се направи една друга работа сега. Се испоставува дека сите овие плоштади ние сме биле цртање, тие се, да, жици, но поопшто, овие работи се низи. Низа е само парче на меморија тоа е назад да се врати да се врати да се врати, и ќе го користите низа од страна на начин на овој квадратни загради нотација. Па ние ќе да се видат овие доста со текот на времето, но дозволете ми да оди напред и да се отвори, ајде да го наречеме возрасти. И ќе забележите што можеме да направиме со истите овие трикови, малку малку повеќе синтакса тука. Па во линија 17 на оваа програма - всушност, дозволете ми да се кандидира на првата програма па може да се види она што оваа работа го прави тоа. Дозволете ми да се јавам направи возрасти да се состави оваа програма. . / Возрасти. Колку луѓе се во собата? Наречи го тоа три. Возраст на првиот човек? 18, 19, и 20. И сега малку смешно, јас само го направија програма која возраст оние три лица. Па таму е јасно можност за некои забава аритметички тука. За среќа, на математика е точно. 18 отиде во 19, 19 отиде до 20 и така натаму. Но она што навистина значи да се биде илустративни тука е како ние сме чување тие три луѓе возрасти. Дозволете ми да зумирате во она што е случува тука. Значи прво, овие првите неколку линии треба се добива прилично запознаен. Јас сум само прашува корисникот за број на луѓе во собата. Тогаш јас сум со користење добиете int и направите додека да направите ова повторно и повторно и повторно. Видовме дека моделот пред тоа, но линија 27 е нов и всушност сосема корисни, и ќе стане повеќе корисни. Забележите дека она што е различно во линија 27 е дека јас се чини дека се прогласување на int наречен возрасти, но чекајте. Тоа не е само int возрасти. Има овие загради, внатрешноста на кои е n. Па заградата n во овој контекст не, внатрешноста на printf изјава тука, но во оваа единствена линија 27, оваа линија е велејќи ми даде N ints, од кои секоја е од тип int. Значи ова е кофата, така да се каже, на, во овој случај, три цели броеви назад кон назад да се врати, така што јас ефикасно имате три променливи. Како алтернатива, да бидат јасен, ќе биде ова. Ако сакав првиот студентот возраст, би можел да го направите тоа. Ако сакав вториот студентот возраст би можел да го направите тоа. Ако сакав третата студентот возраст, би можел да го направите тоа. И не дај Боже ни треба на сите возраст во оваа соба - Мислам, ова е подлец на многу копија, ставете повторно и повторно и повторно. И плус еднаш бев собере оваа програма, ако друг студент стигнува во текот на на таа врата, сега мојот број на променливи е неточна. Значи она што е убаво за низа е како Веднаш штом ќе почнете да чувствувате сами копирање и вметнување, шансите се дека е не е најдобар пристап. Низа е динамичен потенцијално. Не знам однапред колку луѓе се случува да биде во собата, но јас знам што ми треба n на нив, а јас ќе дознаам n кога ќе дојде време. Оваа линија код сега значи, дај ми парче на меморија, која изгледа вака каде што бројот на кутии на екран е целосно зависна од n дека корисникот внесе внатре Па сега на остатокот од оваа програма е всушност прилично слична на она што ние само не со ликовите. Известување имам за јамка почнувајќи од линија 30. Па веднаш откако ја добиете низа, јас iterate од y е еднаква на нула на до n. Јас само ја имаат оваа поучна printf порака само велејќи, дај ми на возраст на лицето #% i, па број еден, број два, бројот три. И зошто никако не можев да го направите ова? Искрено, луѓето претпочитаат да се избројат од една на до додека компјутерски научници, нула на до. компјутерски научници не се случува да се го користите овој вид на програма, па ние сме случува само почне пребројување на едно како нормални луѓе. И сега во линија 33, забележуваат малку различни парче на синтакса. На i-тата годишна возраст во таа променлива од тип низа се случува да се добие Инт. И сега на крај, ова е само аритметички овде долу. Решив во посебен јамка да се тврди некое време поминува, и сега во овој посебна телефонска линија, овие линии се изврши. Една година од сега, човек јас ќе бидам јас години, но забележите ова не е променливата i. Ова е сега% i за Инт. И информации како прв случаеви, јас приклучок во i плус 1, па ние сметаме како нормален човек. А потоа за вредноста на нивната возраст, за Јас години, јас се возрасти заградата јас - и зошто правам плус еден тука? Тие само возраст. Тоа е мојот глупав избор на програми. Тие само на возраст од една година. Можев да напишете во било кој број дека Јас всушност сакаат таму. Значи она што е, всушност, на сите релевантноста тука? Па, дозволете ми, всушност, дојдете назад овде и наслика слика на она што се наоѓа напред. Што ќе се прави со нашиот следен Проблемот го поставите две се dabbling во светот на криптографијата. Значи ова е стринг од карактери, па секвенца на повеќе карактери, и она што ни кажува тоа? Тоа не е во онлајн верзија на слајдови. Па јас тврдат дека ова е еднакво на ова, глупав реклама од многу години пред кои, всушност, може да се сети еден од неговото потекло. Значи ова е пример за енкрипција или криптографија. Излегува дека ако сакате да всушност испраќаат информации или споделување информации со некој безбедно, како порака како оваа, може да се трка на букви. Но обично, зборовите се не испомешани случајно. Тие се permuted на некој начин или се промени на некој начин, така што - Упс. Тоа е забавно спојлер за следниот пат. Па можете да карта она што е очигледно О до Б Забележете дека линии до капитализација-мудрец. Очигледно Р станува д. Очигледно Ф-H-Е-Р станува С-У-Р-Е. Па што се испоставува има мапирање, а во овој случај има прилично глупаво мапирање ако некој го има сфатиле? Ова е нешто што се нарекува Гниење 13, Ротација 13. Тоа е stupidest на енкрипција механизми поради тоа што буквално само додава 13 до секој еден од букви, глупав, во смисла дека ако само имаат малку слободно време на вашите раце и молив, или пак само мислам дека преку во вашата глава, можете да се обидете сите можни додадени - една, две, три, точка, точка, точка, од 25 до само ротирате целата азбука, и на крајот, ќе дознаам она што оваа порака е. Значи, ако сте направиле нешто вакво во основно училиште поминува пораки до вашите најдобар пријател, ако вашиот основно училиште наставник едноставно се чита преку порака и брутална принуди решение, може да имаат добивано одговор од тоа. Сега, се разбира, во реалниот свет, криптографијата е пософистицирана. Ова е фрагмент од текст од компјутерски систем кој има кориснички имиња и лозинки, бидејќи речиси сите наши направи, и тоа е она што вашата лозинка може изгледа ако се чуваат на вашиот хард вози но во шифрирана форма. Ова не е само ротација на букви, А е Б и Б е C. Ова е многу пософистицирани, но го користи она што е општо познат како таен клуч криптографија. Оваа слика кажува следново приказна со неколку икони. На левата страна, имаме она што ние ќе се јавите на обичен текст. Во светот на криптографијата, обична Текстот е само на оригиналната порака напишана на англиски или француски јазик или било кој јазик она. Ако сакате да ја криптирате, ние ќе помине тоа сликовито преку катанец, па некои од вид на алгоритам, некои функција или програма која некој напишал дека scrambles на писма се надевам повеќе complicatedly отколку само додавање 13 за секој од нив. Она што го добивате од тој процес во средината има се нарекува cyphertext. Значи каков вид на секси збор. Тоа само значи дека е шифрирана верзија на обичен текст. И само ако имате истата тајна, 13 или минус 13, да не сте во можност да декриптира порака како тоа. Па во проблем Намести Две, меѓу нештата ќе направам, ако во Хакер Издание, ќе мора да се напише кодот за да попуштат овие лозинки, да пронајдат што станува збор и колку тие беа шифрирана, иако ние не ви даде малку на насоки на патот. Во Стандардното издание, ќе се воведат неколку шифри, енкрипција механизми, еден вика Цезар, еден наречен Vigenere, кои се уште ротациона шифри каде A станува нешто, Б станува нешто, но што треба да го направи тоа програмски бидејќи таму навистина ќе биде една тајна клучните инволвирани кој е обично голем број или клучен збор, која само испраќачот и на примачот на овие пораки треба да се разбере. Сега, ова всушност има инкарнации во реалниот свет. Ова, на пример, е малку сираче Тајната на Annie декодер прстен, а вие всушност може да ги имплементираат овие ротациона шифри - А станува нешто, Б станува нешто - со неколку тркала, еден од надвор, еден во внатрешноста така што ако ротира на тркалото или прстенот, вие всушност може да се редат на писма со различни букви, добивање на таен код. И така како cliffhanger за денес, она што мислев јас би го сторила е малку враќање назад дека ако го вклучите телевизорот на 24 декември, може да се види на Филмот реклама nauseum за 24 часа по ред. Но, за денес, јас ќе го отвори тука и ни даде само две минути на педагогичен релевантни Божиќ Приказна со малку колеги по име Ralphie. [Видео репродукција] -Било да е тоа познато на сите и Преземање дека Ралф Паркер ова се назначи член на малата сирачиња Ани тајна круг и има право на сите почести и бенефиции се случуваат истите. -Потпишан, Литл сирачиња Ени. Потпишани, Пјер Андре со мастило. Почести и придобивките веќе на возраст од девет години. [Викање на Радио] Ајде, ајде да се е со неа. Не ми треба сето тоа џез за шверцери и пирати. -Слушај утре вечер за склучување на авантура на црната пиратски брод. Сега, тоа е време за Тајната на Annie Порака за вас членови на тајната круг. Запомни, деца. Само членовите на Тајната круг на Annie може да го декодира тајна порака на Annie. Запомнете, Ени е во зависност од вас. Поставите вашиот иглички на Б2. Тука е пораката. 12, 11, 2 - -Јас сум во мојот прв таен состанок. -25, 14, 11, 18, 16 - Пјер беше во голема глас вечерва. Би можел да кажам порака дека вечерва е навистина важно. -3, 25. Тоа е порака од Ени себеси. Запомнете, не кажувај никому. -90 Секунди подоцна, јас сум во само соба во куќата каде што едно момче од девет може да седат во приватноста и декодирање. Аха, Б отидов кон следниот. Д првиот збор е "да биде." С Тоа доаѓа полесно сега. U. 25. Тоа е Р -Ајде, Ralphie. Морам да одам. -I'll бидат во право надолу, Ма. Gee факир. -Т. О Бидете сигурни да. Бидете сигурни да се она? Она што беше малку сирачиња Annie се обидувам да кажам? Бидете сигурни да се она? -Ralphie, Ренди мора да одат. Ќе ве молам да излезе? -Во ред, Ма. Јас ќе бидам во право надвор. -Бев добивање поблиску до сега. Тензијата беше страшно. Што беше тоа? Судбината на планетата може да висат во рамнотежа. -Ralphie, да одиме на Randy. -I'll бидат во право надвор за плачење гласно. -Речиси таму. Моите прсти полета. Мојот ум беше челик стапица. Секоја пора вибрираше. Тоа беше скоро јасна. Да, да, да, да, да. -Бидете сигурни да пиеш своето Ovaltine. Ovaltine? А кофти комерцијални? Кучкин син. [Крај видео репродукција] ЗВУЧНИК 1: Ова е CS50, и дека ќе биде проблем поставите две. Се гледаме следната недела. ЗВУЧНИК 2: На следното CS50, ова се случува. ЗВУЧНИК 1: Значи една тема не сме погледна досега е дека на функција покажувачи. Сега, покажувач на функција е само на адресата на јавноста функција, но како многу - син на -