СПИКЕР 1: У реду. Добродошао назад. Ово је недеља Два ЦС50, и имамо До сада је користио функције, већ углавном их узимају здраво за готово. Ми смо принтф користи које има споредни ефекат штампе ствари на екрану. Ми смо се користи-инт, флоат добити. Али шта ако заиста желите да креирате сопствене функције, као што неки од можда сте већ почели да до проблема Сет за један, није стриктно потребна? Па, хајде да идемо напред и да се поново Проблем само питања корисника за њихово име и штампа на нешто екран, али покушајте да факторишу неке на заједништво које смо видети у нашем коду до сада. Дакле, мислим да је следеће. Ја ћу ићи напред и створити нови програм, позовите то хелло.ц као и обично. Идем да иде напред и да се садрже стандардне ио.х на врху. Ја ћу такође да се предам превентивно ЦС50 библиотека, тако да Не се драо на стране компајлера. А сада ћу да наставим и прогласи инт, главни, празнину. И онда овде, ово је место где желим да почне да нуди функционалност нека друга функција која ни сама да пишем, али то не тренутно постоје. На пример, претпоставимо да желим да написати функцију која ми омогућава да одштампати хелло, зарез, и онда неки корисничко име. Уместо да наставите да уради принтф Здраво,% с, зар не би било лепо да било је само функција зове принтф али не штампа име? Другим речима, желим да будем у стању да написати програм који ради мало нешто овако. Прво, ја ћу рећи ваше принтф име, тиме што је навело кориснику да дај ми своје име, а онда сам ће да користе познате с стринг у прогласи стринг. Дај ми променљиву типа стринг, зову е, а продавница у да резултат се зове стринг. Али сада у протеклих недеља, ја бих помало напорно ради здраво,% с / н. И у другим речима, видели смо то пример гомила пута, а то је тривијалан пример јер постоји само један линија кода, тако да заиста није велика ствар да куцате поново. Али, претпоставимо да је ова линија кода заправо су постали терет, и то није једна линија кода, али то је 10 линија кода пар недеља од сада, а ти само замарања копирања и лепљења или прекуцавање ту исту лозинку. Зар не би било лепо уместо да ради принтф здраво, с% и тако даље, Зар не би било лепо да је било само функција која се зове штампање име узима аргумент - Другим речима, потребно је улаз - и онда зарез. Тако да функција, зар не било лепо да то постоји? Онда не би морали да брину о принтф шта је, шта с% и све ове сложености које су није све то занимљиво. Они су корисни. Дакле штампа име, нажалост, није било измислили неки пре 40 и више година. Нико није мислио да га напише. Али то је лепота постојања програмски језик, као иу Огреби можете да дефинишете прилагођене блокове, тако у Ц и највише било који језик, можете да дефинисати своје функционалности, може Ви дефинишете сопствене функције. Дакле, иако смо се углавном тиме аутоматски бесплатно, можемо прогласити наши функције. Зато ћу направити мало места овде до врха, а ја ћу да изјављујем своју сопствене функција која ће да изгледа мало чудно у почетку, али ћемо доћи Назад на ово пре дуго. Ја ћу рећи празнину, чиме се указује ова функција нешто, има споредни ефекат, али је не врати ми нешто у исти начин на који се инт или добили ниску сама по себи. И ја ћу да дам ове функције Назив штампања имена, а ја ћу да навести да овај момак ће да се ниска, а ја ћу да позовем да стринг име. Могао бих то назвао шта хоћу, али ја да мој код да буде само-документовање. Другим речима, ако неко од вас био у отворите ову датотеку и чита га, можеш врста закључити из имена која улаз какву улогу је требало да игра. А сада испод тога, ја ћу отворити коврџава браће и коврџава затворена заграда, па приметити да сам пратио исти образац на линијама четири до седам, као Пратио сам за добру недељу дана плус сада између, рецимо, девет линија и 14 који сачињавају главни. Другим речима, штампа име је још једна функција. Сада, компајлер неће да зна да аутоматски позове ову ствар јер сам га буквално измислио, али ће ипак знати да позове главни аутоматски, а онда, наравно, у линија 13, зовем своју функцију. И јер сам је изјавио да функција се на четвртом реду пре маин, Ово ће научити компајлер ста цитат, завршити цитат, "принт име" значи и шта треба да уради. Тако да сам некако дајући нови прилагођени блокира у контексту, рецимо, огреботина. Дакле овде, ја могу да је веома честа или понавља образац кода Чувам писање на часу, иф % С хелло,% С / Н ", - Шта желим да овде ставити? С? Дакле, желим да ставим име у том контексту. Дакле, приметите овде помало дихотомије. Јер ја изјављујем своју функцију и ја се помало произвољно назива да се одштампа име, и јер сам наведено у загради да је ово Функција има један аргумент, тип што је ниска - тако да је реч или фраза, или тако нешто - и Зовем тај аргумент име, да и једини који је у променљиву обим, да тако кажем, јесте име. С постоји само између Која два витичасте заграде, наравно? Па заиста, баш као и линије 10 кроз 14, па баш као у понедељак не могу користити С, али оно што могу да урадим је проћи С у имену штампања. Принт име само тако се дешава да га дају друго име, синоним, надимак, називајући то име, и сада користећи га у овој линији. Тако да сада дозволите ми да спасем ово, умањите. Дозволите ми да иде напред и да поздравим. Изгледа добро. Није испљунути грешке. / Здраво Ентер.. Како се зовем? Дејвид. Здраво и Давид. Дакле, није све тако узбудљиво, али само мислим сада. Ви сада имате исте састојке као што смо урадили у Огреби направимо своје функције. Али постоји мало те. Претпоставимо да нисам стварно мислио овоме и ја заправо не заиста размишља о томе писао који функционишу овде. Осећа савршено разумно. У Огреби не постоји појам на локацију у скрипти. Можете да ставим овде, једна овде горе, једна овде горе, и то би могло почети да изгледа мало наопако ако не урадите постави га уредно, али то није то обзира где се физички списе су на екрану. Нажалост, у Ц - а то је за разлику од језицима као што су Јава и Питхон и други који би те могли упознати са - нажалост у Ц, како би се битно зато што је сат ће се сада десити. Подразумевана функција која ће да изврши је, наравно, главни. Главно је да се јави на име штампања ред осам, али, нажалост, компајлер неће ни знати да је име за штампање постоји све док не добије на линији 11, која је, нажалост, ће бити прекасно. Па хајде да праве здраво. А сада, две проклете грешке генерише. Тако да сада дозволите ми помицати до веома Прво, као што смо увек треба радити, и приметити да се дере на мене, "Имплицитна декларација функције принт име. " Дакле, видели смо ову поруку пре, имплицитна декларација функције. Када смо видели такву грешку? Када нисам укључују библиотеку. Ако сам заборавио цс50.х и ја бих се викао за ниску добити или добити инт. Али у овом случају, ова функција за штампање име није у библиотеци, зар не? То је буквално у овом фајлу, тако шта је заправо проблем? Па, нажалост, у Ц, он вас води тако невероватно буквално да ако Желим позива функција за штампање у име постоје, морате или да спроведе који функционишу на самом врху вашег код тако да је доступна на ниже функција, али искрено, то постаје немаран веома брзо. Лично, волим стављајући главни прво јер онда је врло јасно шта ово Програм чини на први поглед. И плус, можете добити у чудне углу случајеви где ако к жели да позове г, али би се могло назвати г к, само физички не могу заправо ставити један изнад другог. Али испоставило се да у Ц, можемо да реши ово веома једноставно. Ја ћу да ставим мало простора овде, а ја ћу само да превентивно, мада нешто редундантно, ће научити компајлер да постоји функција зове штампе име, потребно је стринг, и ја ћу да позовем то име зарез. Дакле, ово сада у четвртом реду, који смо нису видели раније, је декларација од имена функције штампања, али то је само обећање да ће се ова функција на крају се дефинише, на крају спровести. То сада могу да реагујем, јер Сада ово је дефиниција, имплементација, нека врста еворишта имплементације овог одређену функцију. Па искрено да је то глупо, да је напорно, али то је начин на Ц је, а то је јер ће вас одвести врло дословно и, као и рачунар треба искрено, само да тачно оно што је рекао да то, и тако да је наручивање важно. Дакле, имајте то на уму и поново почети да уочити понављање образаца. Шансе су да ће, ако не имате већ, почињу да наилазе поруке овако то изгледа на први поглед потпуно загонетан, али ако почнете да траже ове кључне речи као што су "Имплицитан декларација," помиње функција у овом случају - и искрено, понекад се мало зелено шаргарепа симбол који вам говори где Вероватно је проблем - можете да почнете да радите свој пут кроз тада невиђених поруке о грешкама. Сва питања о писању сопствене функције на овај начин? Хајде да урадимо нешто што је мало више убедљив. Уместо да само уради нешто што има пропратни ефекат штампања, пусти ме напред и сачувате нову датотеку, и ми ћемо зову поситиве.ц, иако је ће бити мало другачија против Последњи пут. И овог пута, желим да поново примени поситиве.Ц пример је последњи пут, који се натера корисник да ми позитиван цео број. Али, морао сам да се користи инт последњи пут. Зар не би било лепо да постоји функција зове се позитивно инт да бих могао препустити ово комад функционалности за? Дакле, разлика је у томе ћемо спроводи се позитивно инт, али за разлику од штампај име које је имао споредни ефекат - то нису вратили нешто ми се број или стринг - се позитиван инт је, наравно, иде у вратити, надамо се, позитиван инт. Дакле, хајде да урадимо то. Укључи цс50.х, садрже стандардне ио.х. Инт маин празнину. А сада овде, ја ћу да наставим и рецимо инт, то зову н, једнако добити позитивну инт. И баш као што се инт већ постоји јер особље га је написао, ја ћу да претпоставимо на тренутак да добије позитиван инт постоји, а сада идем да иде напред и рећи принтф, хвала за% И / н ", н. Тако да сада ако компајлирате овај програм, који ће се догодити у мом терминалу прозор на дну екрана? Ја ћу вероватно да се иста грешка као пре. Па хајде да пробамо ово. Маке позитиван. И опет, имплицитна декларација функције, добити позитиван инт. Тако да можемо да решимо ово у неколико начина. Ја ћу да га једноставно и само ставио декларацију овде и добити позитиван инт. Треба тзв потпис. Потпис се односи само на естетици Први ред програма. Дакле, шта би требало да се позитивно инт повратак? Тако инт. Ја мислим идеално, она ће се вратити нешто као позитиван инт, али да не постоји. Не смо видели да међу нашим подацима врсте, тако да морају да се баве Чињеница да имамо врло мало типови података за рад. Али можемо вратити цео број и само Верујем да ће то бити позитиван. То ће да се зове добити позитивну инт. А сад шта је са његовим аргументима? Да ли је потребно да било који улаз? Да ли је потребно било који улаз? Тако да не треба да зна унапред било шта. Гет стринг не, не добије инт. Принтф ради - мора да има неке улаз у њу прошло - и штампање име потребан неки улаз, али се позитиван инт не. Зато ћу се експлицитно реците празнину компајлера. Празнина је одсуство било чега другог. Дакле, празнина не значи ништа се дешава унутра тих заграда, тачка и зарез. А сада на дну моје датотеке - и опет, само сам некако анални овде стављајући главни на врху, који је добра пракса јер на тај начин, било када ви или неко други отвара свој фајл, функционалност је тамо. Можете да зароните са једном квадратном. Сада ћу да дуплирате ово, добити позитивну инт празнину, али нисам сад да удари тачку и зарез. Ја ћу отворити витичасте заграде, и сада морам да позајмим неке идеје од понедељка. Дакле, као што се сећате, ми смо урадили нешто свиђа урадите следеће док нешто што је било тачно. И шта сам урадио? Урадио сам нешто дао ми позитиван цео број, Мало брз. Добро би било речи желим. А онда сам шта? Инт н једнако се инт, нема аргумената за то. И приметити разлику. Када позовете функцију, када користите функција, што не стави у празнини. Ви само урадите када проглашава функција, предајем оно што компајлер треба очекивати. Дакле, не морате да ставите празнину себе. А сада оно што је било моје стање? Па, н није једнако позитивна, али то је само псеудо-кода. Па како да изразим то више чисто? Дакле, мање или једнако нули. Па опет, приметили сте да урадите мање или једнако. Иако је то два одвојена симбола, можете то учинити на као што су тастатура. Али и даље постоји буг који Зезнуо сам прошли пут превише. Морам да се изјасни - тачно. Морам да прогласи ван н петље. Зато морам да ставим н овде, а ја не Желим поново да га објави овде да не добијем нову променљиву. Ја само желим да доделите вредност овде. И сада не ради баш овде. Пусти ме да испред себе и да се претварам да сам готов. Направите позитиван, а сада постоји нова грешка. Контрола достиже крај без празнина функција. Дакле, нове поруке о грешци, али ако сте љубазни од теасе поред сваке од речима, Вероватно наговештава шта није у реду. Контрола. Контрола само значи редоследу операција у програму. Рачунар је у контроли и нешто није у реду. Тако да стигне до краја без празнина функција. Оно што је очигледно је функција говорите? Оно што је функција не празнина? Дакле добили позитивну инт, и мало збуњује у том бунару, то је врста празнине. Има спецификацију за своје празнине аргументи, али је његова производња ће се буде типа н. Дакле, реч је о левој такозвани повратни тип. Реч изнутра овде је нула или више аргумената да функција узима. Дакле, шта треба да радим? У овом тренутку у мом коду, ред 21, где трепери брзо сада, ја имају позитиван инт унутар променљиве зове н. Како да га вратим на главни? Буквално. Повратак н зарез. Дакле, баш као Колтон вратио комад папир са одговором на мене пада тај комад папира у малој црној боји кутија на столу, да се то уради у код, само буквално пишете, вратите н, а то је као да су Колтон предаје ми нешто физички назад. У овом случају, оно што се дешава је добити позитиван Инт ће вратити шта је вероватно позитиван цео коме? Где ова вредност завршити? Која се нађе у овом променљиве, н, а онда наставите са линије девет. Дакле, другим речима, да би од операције, овај програм почиње извршење, а преводилац схвата, ох, хоћеш библиотеку? Пусти ме зграби све што је унутра. Ох, хоћеш стандардну ИО библиотеку? Пусти ме зграби све што је унутра. Шта рећи себи компајлер када погоди четвртом реду? Ох, обећао да ће спровести Функција зове се позитивна, али ћемо се вратити на то касније, нешто у том смислу. Тап_п празнина само значи да је овде храбрости мог програма. Линија је само седам браце коврџава. Линија осам говори на левој страни, дају ме 32 бита за цео број, зову н. На десној страни, то је рекавши добити позитивну инт. Сада Хајде да застанемо да прича, јер сада Не да се креће мој курсор доле. Мој курсор сада иде доле, јер сада добили позитиван инт извршава. Инт н је проглашен. Урадите следеће. Принтф ми даје позитиван цео број. Набавите инт од корисника, чувајте је у Н, а можда ово опет и опет. Ова петља значи да би овај број извршава горе доле овако опет и поново, али на крају, када корисник сарађује и даје ми позитиван инт, ја погодио линију 21, у ком случају број је враћена, а који сада треба да истакне? Девет. Контрола, да тако кажем, враћа да се построје девет. То је линија која је сада задужен. Дакле, то је оно што се дешава свим овог пута испод хаубе, али када смо коришћене функције попут принтф или чак добити ниску да је неко други написао за вас, контрола се предао Искључено да неко други број линија по линију по линију. То једноставно нисмо могли да видимо и ми није могло да ослика у ово програм, јер је то у неким другим датотека на чврстом диску без нечијег знања да нас. Па хајде да ствари саставити и покренути ово сада. Маке позитиван. Саставите, то је напредак. / Позитиван.. Дај позитиван цео број. Будимо тешко. Негативно 1. Нула. Дајмо 50. Хвала за 50, тако и контрола сада се вратила. Сва питања, онда, на то? Да? [ИНАУДИБЛЕ]. Реци поново. О, добро питање. Дакле, можда ћете приметити ту паралелу да Некако сам сечење угао на. У 12. реду, ја кажем, добити позитиван инт враћа инт, али тај исти логика, сада се закључити да у линија шест, ја кажем да је главни враћа инт, али оно што ми никада нисмо је за неки од наших програма? Никада нисмо имали помиње ова кључна реч повратак. Тако испада да је у Ц, најмање верзија тога да користимо остварен у 1999, технички, то је дешава за вас аутоматски. Сваки пут када у имплементацији програма и вас имплементира функцију која се зове главни, та функција ће вратити нулу подразумевано ако не кажу другачије, и нула је само конвенција. Свет враћа нулу самим указује да је све добро, ефективно нас оставља са четири милијарде могуће ствари који би могли толико лоше да ако се вратимо једно, да можда значи код који значи ово нешто је кренуло наопако. Могли би да се врате два, што значи ово друго је кренуло наопако. Могли би да се врати четири милијарде, што знаци ова друга ствар није у реду. А ако сада размислите о свом ПЦ или Мац, можда се сећате да Понекад имате јасни поруке о грешци од софтвера који вам је користи, а понекад има људски опис пријатељски, али постоји често код или број на екрану? Ако се то не долази у обзир, Само пази на њу. То је обично оно што ови кодови говорите. Они се укључују у Мицрософт Ворд и друге програме тако да ако поднесе пријава грешке у компанији, можете реците им, ох, ја сам број грешке 45. А неки програмер врати у компанији може изгледати да се у његов број и рећи, ох, то је зато што сам направио Овај буг и зато корисник добио ову поруку. Али, искрено, то је само мали збуњујући и мало досадан за закључити да је, бар на нашем Првих неколико програма, тако да смо су га изоставе. Али све ово време сваки ваш Основна функција је тајно имао ово линија аутоматски додаје за Вас компајлер, само конвенција за уштедите мало времена. [ИНАУДИБЛЕ]. Не морате да га укључи у главни. То је у реду. Не треба да се укључи ако сте били спровођење функцију овако. У супротном функција стан се не би функционисало. Али у главни, то није потребно. У недељу или две, ми ћемо почети да се у ту навику једном желимо да покренемо означава грешке. Стварно добро питање. Тако брзо вербална пауза је напоменути да овог петка, нећемо се руча по себи, али ми ћемо бити на вечери са неки од студената и особља. Уколико желите да нам се придружите, осећа слободни да иду у цс50.нет/рсвп. 6:00 ПМ у петак. Простор је, као и увек, ограничен, али ћемо наставе да раде ове на скоро сваке недеље, ако простор понестане ове недеље. Тако Цлиффхангер да смо стали у Понедељак је био да жице заправо могу бити индексиране у, што значи да вас могу добити на први знак, други знак, трећи лик и тако даље, јер можете ефикасно мисле у низу, као здраво, као у овом случају пет слова унутар кутија. А можете добити на сваком од оних кутије са оним што смо урадили синтакса увести у понедељак? Те квадратних заграде на тастатури. То је само значило прелазак на локацији нула. Почињемо рачунајући на нули, па носач нула означава х, један носач означава е, и тако даље. И тако све време када смо били коришћењем жице и куцате у "здраво" и "свет" и друге ствари на екран, то је била сачувана у кутијама као што је овај. И Погоди. Шта свака кутија представља физички унутар вашег рачунара? [ИНАУДИБЛЕ]. Извини? Ликови. Дакле лик, свакако у случају жица, а лик је само осам бита или један бајт. Дакле, вероватно сте бар магловито упознати са чињеницом да је ваш Рачунар има меморију. Има две врсте меморије најмање. Један је хард диск где чувате ствари стално, и то је обично велика, тако да можете имати филмове и музика и тако даље. Онда имате другу врсту меморије зове РАМ, Р--М, Рандом Аццесс Меморије, а то је тип меморије који се користи када је рачунар ради али ако изгубите моћ или ваше батерија умре, све што је ускладиштен у РАМ нестаје ако изгубите моћ заједно, јер то није упорни. Обично су, ових дана, свирка тога, два концерта, можда и више. И наопако РАМ-а је да је много много, много брже од хард дискова или чак и ССД дискова ових дана, али то је обично скупље, тако имате мање од тога. Дакле, данашњи разговор стварно односи у РАМ, који тип меморије која постоји само док постоји снага се уносе у рачунар. Дакле, када откуцате у Х-Е-Л-Л-О, Ентер на тастатура, БиХ ће у једном бајтова РАМ, е иде у још један бајт меморије, као што је остатак речи. Дакле, подсетимо шта смо могли да је ово последњи пут. Дозволите ми да иде напред и отворите датотеку које смо звали стринг.ц, и сећам да је изгледало мало нешто овако. Дозволите ми заправо врати и промени је да се тачно како је то изгледало, Дужина низа е. Па погледајте програму овде. Ми укључују библиотеку, ЦС50 које можемо користити добити стринг. Ми садрже стандардне ио.х тако да можемо користити инт. Зашто се укључити стринг.х? То је било ново у понедељак. Тако да смо желели Дужина низа. Стр Ленг. Људи одлучио година, хајде да буде сажет. Уместо називајући га "Дужина низа," назовимо га "ул Ленг" и нека свет то схвати, и тако то шта смо добили приступ са стринг.х. То је познато. То је познато. То је познато. Ово је мало ново. У 22. реду - и ми ћемо се вратити на ово, али за сада знамо - а ви само да знате да имају прочитајте документацију или ако сте већ знали Ц - добити ниска понекад може упропастити. Уколико корисник стварно контрадикторно или сарађује и он или она само не упишете ништа на тастатури или Типови толико на тастатури да то превазилази меморију рачунара, у теорији, добијају ниска могао да се врати нешто друго од ниска знакова. То би могло да се врати посебну вредност која се зове НУЛЛ у свим капе, Н-У-Л-Л, и то је само тзв Сентинел вредност. То је посебна вредност која означава нешто лоше десило у овом случају. То је одсуство низу. Тако нулл Гледам за једноставно, тако да, Укратко, ул Ленг и друге функције које долазе са Ц, ако они очекују ниску али их прође одсуство у низу, ако прође их неважећим, рачунар или програм само ће срушити отворено. То ће се обесити. То ће бацити неку поруку о грешци. Лоше ствари ће се десити. Дакле, иако је то још увек није добро дефинисан - то ће имати више смисла за недељу дана или два - у 22. реду, ово је само пример само одбрамбене проверавање грешака само у једном случају од милион нешто крене наопако, на барем мој програм неће срушити. Дакле, ако ова не ради једнако нешто лоше, Имам петљу за то, а то је где смо имали да други Нови део синтаксе. Имам петљу за итератинг из на нула до дужине с. И онда овде, био сам одштампа с носач сам, али зашто ја користим Ц% свих изненадни уместо% с чак иако је ова ниска? То је знак, зар не? С је ниска, али с нешто носач, ова конзола ми где је и нула или један или два, то је индивидуално карактер у низу, и тако за да, принтф треба да буду информисани да то је заиста лик очекивати. А онда се сетим, шта је ово Програм у ствари ради? Штампано је у колонама. Да, тачно. То је само штампани реч да ја куцали у колона, један знак по линији. Па да видимо ово поново. Тако да стринг. Саставио реду. / Стринг.. Дозволите ми тип у Х-Е-Л-Л-О, Ентер, и заиста сам се, један по линији. Па пусти ме да радим овде једну оптимизацију. Ако мислите о томе, посебно ако програмирао сам раније, ту је вероватно неефикасност у ред 24. Другим речима, то није нужно најбољи дизајн. Једноставно, бар ти једном сећате шта ул Ленг је, али је ради потенцијално нешто глупо. Шта би то могло бити? [ИНАУДИБЛЕ]. Тачно. То је провера за дужину с сваки пут, иако Х-Е-Л-Л-О ће увек да буде пет знакова. Сваки пут кроз ову петљу, пет се не мења. Можда би ми се увецава, али шта је дужина с на сваком итерација ове петље? То је пет, то је пет, то је пет, а Још увек сам ипак питам ово питање изнова и изнова и изнова. Сада искрено, рачунар је тако проклето брзо, нико неће приметити Разлика у овом случају, али ове врсте од лошег дизајна одлука може почети да се саберете и ако је сам компајлер не покушава да поправи ово за вас који то није обично би, у барем у апарату. Дакле, ја ћу да урадим ово. Идем да додате зарез после моја прва променљива, ја. Ја ћу себи дати другу променљива, називајући га н, само конвенција за бројеве, а онда сам ће доделити н вредност низа Дужина с. А онда ћу да промени мој услов да буде шта? Идем да променим стање И док је за мање од н. Па сад, колико пута сам проверавате дужину с? Једном, али да је у реду да проверим против н поново и поново, јер сада они вредности се не мењају ствари. Сада за сада, само знам да је било када вас позовете функцију, ту је мало изнад главе, није довољно да вас обесхрабри Заиста се икада користе функције, али Свакако, када постоји линија кода тако - а линије ће добити занимљивије пре дуго - где постоји могућност да се мисли, ако унесите овај код, колико пута ће се извршити? Ви ћете почети да видите током времена у перформансе ваших програма може заиста променити. У ствари, један од проблема поставља ми смо учињено у ранијим годинама укључује спровођење, ако се сећате из недеље нула, правописа, али Спелл Цхецкер који је дизајниран да подржи речник од 150.000 плус речи које вам дајемо момци. Ти би да пишу код који учитава те речи у РАМ, тако да у кутије као што смо видели на екрану тренутак пре, а затим најбрже што могу, морате бити у стању да одговори Питање форме, значи ова реч погрешно? Да ли је ова реч погрешно? Да ли је ова реч погрешно? И у тако нешто оно што смо урађено у протеклих година је претворио, мада на изузимање у факултативни предмет, конкуренција врста, при чему студенти који користе мање и мање РАМ време, мање процесора, завршити пенуша до врха мало Лидер одбор или рејтинг који смо ставили на Курс страница као што смо урађено протеклих година. Па опет, потпуно необавезно, али то говори за Сугестије да су пред једном почнемо изградња на врху неке од ових основни градивни блокови. Дакле, да се вратим на овом дијаграму за само тренутак и откривају мало нешто више. Ово је заиста ниска, а ми смо узети Предност неколико библиотека, ио.х стандард који има - Принтф. Принтф, између осталог. цс50.х, који се инт и добити низ и тако даље, стринг.х, који имао ул Ленг. Али испоставило се да још постоји и други. Искрено, било је много, много заглављу датотеке које изјављују функције за библиотеке, али ово је цтипе.х заправо ће нешто бити повољан, јер ћу да иде напред и спроведе једну други програм овде. Дозволите ми да иде напред и отвори нешто Написао сам унапред зове цапитализе.ц, и узмимо Погледајте како се то ради. Приметите да ја користим, у овој верзији од тога, три познате датотеке. Приметимо да је у реду 18, ја сам добијање ред текста. Обавештење у линији 21, ја тврдим да Следећи код ће с великим словом, без обзира корисник откуца у, и како сам ја томе? Па, ја водим - Поука из прошлог времена - Ја изјављујући И и н и итератинг кроз знакове у низу. И онда шта је ово блок код у линији 24 до 27. ради у смислу лаике? Мало слово назад. Тачно. Ако ова конзола ја - па ако и-ти карактер с, што је специфичан Чар у низу, је већи од или једнако мала слова и - сећате тог двоструког амперсанд означавају и - и исти карактер, а носач И, је мање или једнако мала слова З, то значи да је или Б или Ц или тачка, тачка, тачка, или З, што значи то је мала. Шта желим да урадим у том случају? Па, ја могу да урадим ово донекле загонетно, али хајде да зафркавати ово поред. Ја ћу позвати принтф, штампа% Ц јер желим да ово репринт карактера на екрану. Ја онда ћу узети с носача Ја, и-ти карактер на-с, а затим зашто ја радим овде овај мали трик, мала слова а минус капитала? Шта да ће дати ја генерално, говорећи? [ИНАУДИБЛЕ]. Тачно. Ја стварно не сећам - је било за 65 престонице О: Не баш сећате шта је мала, али нема везе. Компјутер зна. Дакле рекавши, мала слова минус капитал, чудно је да се одузимања један цхар од другог, али шта су слова испод хаубе? То су само бројеви. Дакле, шта год ти бројеви су, се рачунар да се сетим уместо мене људски. Тако мала а минус капитал је ће ми дати разлику. То се дешава да буде 32, а да би случај за мала и престонице Б Б и тако даље. Она остаје доследан, на срећу. Тако да у суштини кажем, узети мало слово, одузмите са тога стандардна разлика, и то ефикасно измене с конзола и од мала слова у, наравно, велика слова, без моје стварно потребе да размишља око или запамтите, шта су они Бројеви са којима смо разговарали о томе када осам добровољци дошли на сцену? Сада је у међувремену, у друго, ако није мало слово јер одређује 24. по реду, само га одштампате. Ја само желим да додирнете карактера које су заправо првобитно мала слова. Па да видимо ово. Маке словом. Саставио, ОК. / Великим словом.. И дозволите ми да укуцате Х-Е-Л-Л-О малим словима, Ентер. И приметите да се конвертује у великим словима. Пусти ме да урадим то опет са другачији реч. Шта мислите о Д-А-В-И-Д са првим Д капитализује као типично име је? Ентер. Обратите пажњу на то и даље је тачно. Само да испоручују први Д непромењен преко које други конструишу. Дакле, имајте на уму, онда, Неколико ствари овде. Један, ако сте икада желели да проверите два услови одједном, можете их и заједно као што смо предвидели. Можете да упоредите знакове на овај начин и ефикасно лечење знаке као бројеве, али искрено, то је тако проклето криптичан Никад нећу да се сетим како да дођу до овог од нуле без размишљања кроз њега из сасвим мало времена. Зар не би било лепо да неко тамо је написао позива функција је смањити да би прави одговор за мене или лажна, овај лик је мала? Па срећом, ко год да је написао цтипе.х урадио управо то. Пусти ме овде и додајте ЦТипе за ц типови, а сада пусти ме доле и преправи ову линију на следећи начин. Дакле, ако се то зове нижа, ја тврдим, с носач сам, онда ћу да избришете ове две линије укупно. Тако да сада неко други, ја се надам, написао функција се зове нижа, и то Испоставило се да су они урадили и прогласила је унутар цтипе.х. А сада ћу да одем линије 27 сама, ја ћу да одем линије 31 Само, не приметим колико сам пооштрио свој код. Сада је чистији. То је мање тешко гледати кроз јер сада функција, штавише, тако дивно само по имену ради оно што пише. Сада ћу да сачувате ово. Идем да умањите. И баш као у Огреби сте могли Боолеанс, Булове вредности истина или лажна, то је управо оно што је ефикасно смањити приносе. Дозволите ми да компајлирате. Дозволите ми да поново покренете. А сада хајде да пробамо поново, Х-Е-Л-Л-О, Ентер. То је прилично добро. И покушајте поново, да ли сам не зајебеш нешто горе. То је као добро капитализован. Али, то није довољно добар, јер друга ствар коју ја никада нећу осим ако се сећате ја радим преко њега заиста пажљиво на, рецимо, рад је овај проклети линија. Зар не би било лепо да је било функција зове се горњи? Па испада тамо је у цтипе.х као добро. Ја ћу ићи напред и упишите - дозволите ми да вратимо ту линију. Уместо тога овде, пусти ме само напред и кажу, замена за% ц Резултат ове функције позивања на горњи на и-том карактера с. Запазите сада то постаје мало уравнотежена. Морам да пратите колико заграде сам отворио и затворио. Дакле, сада је још чистији. Сада овај програм је све боље и боље дизајниран вероватно зато што је много, много више него читљиве није ни да је тачно. Маке словом. / Великим словом.. Х-Е-Л-Л-О. Хајде да пробамо поново, Д-В-И-Д. У реду, тако да смо још увек у доброј сам форми. Али сада се горњи. Предлажем да постоји још један префињеност можемо учинити да би стварно лепо, да се заиста затегнути до овог кода и заиста нам пет од пет за дизајн, на пример. Шта би било лепо да се ослободи? Па, погледајте како проклето дуго овај блок код је само да се уради нешто једноставно. Сада као страну, јер можда имате видети у одељку супер прошлог викенд, не треба стриктно витичасте заграде када сте само једно линија кода, иако смо предложили држећи их тако да се чини да је много више јасно, као у Сцратцх је у облику слова У блокови, шта је унутар гране. Али не би било лепо да се горњи, када је дао свој допринос, временом је постао велико слово ако није, и шта би бити дивно у супротном случају, ако то је већ велика? Само да прође кроз и оставите га на миру. Можда то чини. Могу да пробам и само се надам То је то, али ме пусти увести још једну ствар. Уместо да користите ове уграђене у терминал прозор овде, сећам се да овај црни квадрат икона вам даје већи прозор терминала који могу да пуна екрану ако хоћу? Тако испада да су некако чудновато име, али има ствари које се зову те ман странице, странице за упуство, цовек за кратко, и ја могу да приступе тим од куцање човек - Шта желим да куцате? Човек на горњи. А сада приметити ако постоји функционише унутар рачунара, у овом случају апарат, који је само Линук оперативни систем, то ће да ми дају нешто шифровану сет излаз, али ћете наћи више времена да Увек се форматира прилично Исто тако почнете да се навикнеш на то. Обратите пажњу на врху у горњи, а очигледно је иста документација за ниже. Ко год да је написао да је брала углови и стави све на једној страници. Сврха ове ствари 'у живот је за конверзију писмо горњи или мала. Обратите пажњу да је под Синопсис, човек страница је ме учи шта ја имам фајл да укључи да ово користи. То ми даје потписе за ове функција, како од њих, чак и иако смо сада само стало један. Овде је сада опис. За горњи претвара писмо Ц у велика ако је могуће. Ипак то није поучно, али допустите ми да Сада погледајте под повратне вредности, ствар то је враћена. Дакле, вредност врати јесте претворена писмо или ц ако конверзија није било могуће. Шта је Ц? Оригинални карактер. Оригинални карактер и знамо да је, опет, иде до синопсис, и ко год да је ово написао функција управо одлучио да улаз да се горњи и доњи да је само самовољно ће да се зове Ц. Могли су га звали највише било они желе, али су га држали једноставан као ц. Тако сам консултовао ман страница. Ова реченица ме уверава да ће, ако то није мало слово, то је ће да ме врати Ц, која се савршена, што значи да могу да се отарасим моје друго стање. Дакле, да се вратим на гедит, и Сада дозволите ми да урадим ово. Ја ћу да копирам принтф изјаву. Ја ћу ићи напред и право у петље за штампу да се, и добити ослободити од сада ову целину ако конструкт. Није била лоша идеја, а то је веома много исправан и у складу са све што смо проповедали, али једноставно није потребно. Чим схватите неке библиотеке функција постоји да је неко други написао, или можда сте написали на другом месту у датотеку, можете да је користите и стварно почети да затегнете код. А када кажем ствари као добар стил, Чињеница да је ова особа зове функционишу на горњи, или је претходно нижа је предивно корисна јер они су врло описно. Не желите да позовете своје функције Кс и И и З, који имају много, много мање значење. Сва питања о тој серији побољшања? Дакле, довољно је рећи један од Такеаваис је чак и ваш проблем сет - можда Проблем један скуп, али свакако П сет два и надаље, чак када су тачно не мора Мислим да су савршени само Још увек или посебно добро дизајниран. То је друга оса на почну да размишљају о томе. Дакле, ово је ниска унутар вашег Меморија рачунара, али ако имате гомила ликова попут Х-Е-Л-Л-О у РАМ, и претпостављам које у свом програму позовите се стринг више пута су вас да позива се стринг једанпут, онда зовем се стринг. Па, шта ће се десити током времена? Другим речима, ако имате линију код, мада из контекста, као Стринг с добија - Хајде да урадимо ово. Стринг једнако се стринг. Дакле, претпостављам да је линија кода се мисли да пита корисника за његово име. Ова следећа линија кода је требало да питате упутство за његов школи, и овај следећи ред, и тако даље. Претпоставимо да смо стално питате упутство за другу и још један и још један стринг. Они ће остати у сећању у исто време. Једна неће обућар друге. Школа се не замени други. Али где они раде све завршити у меморији? Па, ако почнемо да се ослоне на екрану, које можемо да искористимо ову ствар Овде као табли, ако је то црна правоугаоник представља мог рачунара меморије, ја ћу почети произвољно делећи га у мале квадрате, од којих сваки представља један бајт меморије. Искрено, ако имате гигабајт РАМ ових дана, имате милијарду бајтова меморије у рачунару, тако милијарде од ових квадрата. Дакле, довољно је рећи, ово није баш на нивоу. Али, можемо задржати цртање свих ових очигледно нису у сразмери квадрата, и то колективно представља мој рачунар меморија. Сада ћу учинити тачка, тачка, тачка. Дакле, другим речима, када сам сада подстакне Корисник са гет стринг да ми дају ниска, шта се дешава? Ако корисник упише у "здраво", који се завршава у Х-Е-Л-Л-О. Али, претпоставимо корисник онда типови у - заправо, није требало да уради здраво јер ми тражимо их за њихова имена. Па хајде да се вратимо, ако ја могу да урадим ово. Дакле, ако сам тип у Д-А-В-И-Д за име моје, али сећам се да је друга линија код је добити стринг да добију своје школе. Где је та реч коју корисник типова у да идем следеће? Па, можда ће то ићи у -Х-Р-В-Р-Д. Па иако имам нацртана је као два реда, ово је само гомила бајтова у вашој рачунара РАМ. Ту је проблем сада јер сад ако сам ја користи РАМ на ово веома разуман али некако наивно начин, шта можете да очигледно не разликују? Где почиње и где један се завршава, зар не? Некако су замагљују заједно. Тако испада рачунар не ради ово. Дозволите ми заправо помицати у прошлост а Неколико знакова, а уместо Харварду ће одмах након имена корисника, корисник добија заправо, иза сцене, специјални знак убаци по компјутер за њега или њу. / 0, иначе познат као нул карактер љутито зове Н-У-Л, не Н-У-Л-Л, али ви то пишете као / 0. То је све нула битова је маркер у између прве речи које је корисник откуцан и други. Тако Харварду заправо сада завршава као овог низа знакова и још један / 0. Дакле, другим речима, тако што ови сентинел вредности, осам граниче нула бита, сада можете почети да праве разлику један лик из другог. Дакле, све ово време шта је "здраво" је ствари "здраво" са / 0, и У међувремену, можда врло добро бити веома мало више РАМ унутрашњост рачунара. Пусти ме да се још једна ствар. Испоставило се да су сви ови квадрата смо цртање, они су, да, жице, али генерално, ове ствари су низови. Низ је само комад меморије то бацк то бацк враћа се назад, а ви обично користе ред путем овог заграда нотацији. Дакле, ми ћемо то да видимо доста током времена, али дозволите ми да иде напред и отвори, назовимо то доба. А погледајте шта можемо урадити са ти исти трикови, мало мало синтакса овде. Дакле, у реду 17. овог програма - у ствари, дозволите ми прво покрените програм тако да можемо да видимо шта је ова ствар ради. Дозволите ми да зовем векови да би састављање овог програма. / Узраста.. Колико је у соби? Назовите то троје. Фазе првом лицу? 18, 19, и 20.. А сада нешто смешно, само сам су направили програм који векове оне троје људи. Дакле, јасно је да је прилика за неке забаве аритметике овде. Срећом, математика је тачно. 18 отишао до 19, 19 је на 20 и тако даље. Али оно што је заиста требало да буде Илустративан ево како смо складиштење узраста од та три народа. Дозволите ми да зумирате на шта је овде дешава. Дакле, прво, ових првих неколико редова треба добити прилично познато. Само пита корисника за број људи у соби. Затим сам се помоћу инт и радити док се ово опет и опет и опет. Видели смо раније да је образац, али линија 27 је нов и прилично користан, и да ће постати све корисно. Обратите пажњу на то што је другачије у линији 27. је да изгледа да се проглашава инт називају доба, али сачекајте. То није само инт узраста. Постоји та угластим заградама, унутар којих је н. Дакле носач н у овом контексту, не унутар једне принтф изјаве овде, али у овој једини линији 27, ова линија је говорећи, дај ми н ИНТС, од којих свака је типа инт. Дакле, ово је канта, да тако кажем, о, у овом случају, пре три цели бројеви на бацк то бацк, тако да сам практично имају три варијабле. Алтернатива, да се јасно, то би било. Да сам хтео први студент је старости, могао бих да урадим ово. Да сам хтео други ученик је год сам могао урадити. Да сам хтео трећи ученик је старости, могао бих да урадим ово. И не дај Боже да сви ми треба старост у овој соби - Мислим, ово је јако пуно за копије, пасте опет и опет и опет. И плус сам једном састави овај програм, ако други ученик иде у више од на та врата, сада је мој број променљивих је нетачан. Дакле, оно што је лепо у вези низа је као чим почнете да осећате себе копирање и лепљење, шансе су да је није најбољи приступ. Низ је потенцијално динамичан. Ја не знам унапред колико људи ће бити у соби, али ја знам да ми је потребно н од њих, и ја ћу схватим н када за то дође време. Ова линија кода сада значи, ми комад меморије која изгледа овако где је број поља на екрану у потпуности зависи од н који корисник унесе Тако је сада остатак овог програма је заправо прилично слично ономе што смо Управо сам са ликовима. Приметити Имам петљу за са почетком у 30 реду. Тако да је одмах добијем низ, ја прелазили из и једнака нули на до н. Имам само ово поучно принтф порука само говорећи, ми старости лица # И%, па број један, број два, број три. А зашто сам ово урадио? Искрено, људи воле да броји од један Он Уп док информатичаре, нула на горе. компјутерски научници се неће користе ову врсту програма, тако да смо ће само почети да броји на једном као нормални људи. А сада у реду 33, приметити благо другачији комад синтаксе. И-тог доба у тој променљивој типа низ ће добити инт. И сада на крају, ово је само аритметика овде. Одлучио сам у посебном петље тврде неко време пролази, а сада у ово одвојена петља, ове линије извршавају. За годину дана, особа коју ћу бити година, али то није приметио Променљива и. Ово је сада% сам за инт. И обавештење као први чувар места, ја прикључите И плус 1, па рачунамо као нормална особа. А онда за вредност њиховог узраста, за та година, узимам узраста брацкет И - и зашто то радим, плус један овде? Управо су старости. То ми је глупо избор програма. Они су само стара годину дана. Ја писао у сваком том броју Ја заправо желим тамо. Дакле, шта је заправо све релевантност овде? Па, дозволите ми заправо помицати назад овде и дају слику шта се налази испред. Оно што ћемо радити са нашим следећа Проблем је поставио два опробам у свет криптографије. Дакле, ово је низ знакова, тако редослед више карактера, и шта то говори? То није у онлине верзији од слајдова. Дакле, ја тврдим да је то једнако ово, глупа реклама из многих година пре да би заправо сећам једна од свог порекла. Дакле, ово је пример шифровања или криптографија. Испоставило се да, ако желите да заправо слање информација или делили Информације са неким безбедно, као порука као што је овај, можете јагма писма. Али обично, речи су Није случајно закључан. Они се пермутованим на неки начин мења или на неки начин, тако да - Упс. То је забавно спојлер за следећи пут. Тако да можете мапирати оно што је очигледно О до Б. Приметимо да се линија Капитализација-мудар. Очигледно Р постаје е. Очигледно Ф-В-Е-Р постаје С-У-Р-Е. Тако Испоставило се да је мапирање, а у овом случају постоји прилично глуп мапирање ако је неко схватио? То је нешто што се зове Рот 13, 13 ротирање. То је најглупља од енкрипције механизми јер буквално само додаје 13 на сваки једном од писама, глупа у смислу да, ако сте управо имају мало слободног времена на рукама и оловка, или само мислите да је кроз главу, можете да покушате сви могући додаци - Један, два, три, тачка, тачка, тачка, само 25 ротирати цео алфабет, и на крају, ви ћете схватити шта ова порука. Дакле, ако сте тако нешто урадили у основна школа пролази поруке у свој најбољи пријатељ, ако је ваша основна школа наставник једноставно прочитате порука и грубе приморан решење, можда сте стечен одговор за то. Сада, наравно, у стварном свету, криптографија је софистициранији. Ово је одломак из текста рачунарски систем који има корисничко име и лозинке, као и скоро сви до наше, и ово је оно што сте лозинку могао изгледати ако су сачувани на хард возити али у шифрованом облику. Ово није само ротација писама, Је Б и Б је Ц. Ово је много софистицираније, али користи оно што је опште познато као тајног кључа криптографија. Ова слика говори следеће Прича са неколико икона. Са леве стране, имамо шта ћемо звати чисти текст. У свету криптографије, обичан текст је само оригинална порука написан на енглеском или француском језику или било какву језику. Ако желите да је шифровање, ми ћемо проћи то сликовито кроз катанцем, тако неке од врста алгоритма, неки функција или програм који је неко написао Надамо се да шифрује слова цомплицатедли више него само додавањем 13 за сваки од њих. Оно што се из тог процеса у средини се зове ципхертект. Дакле, нека врста секси речи. То само значи да је шифрована верзија чистог текста. И само ако имате ту исту тајну, 13 или минус 13, да ли можете да дешифровање порука тако. Дакле, у задатку поставили две, међу стварима ћете урадити ако у Хацкер Издање, мораћете да пишу код за црацк ове лозинке, фигуринг шта су и како су кодиран, иако ми ти дати мало смернице на путу. У Стандард Едитион, уводимо неколико шифара, енкрипција механизми, једна се зове Цезар, један зове Вижнерова, да су и даље ротационе шифре где постаје нешто, Б постаје нешто, али то морате да урадите програмски јер заиста ће бити тајна кључ укључени које је обично број или кључна реч која само пошиљалац и прималац ових поруке треба да схвате. Сада, ово заправо има отеловљења у стварном свету. То, на пример, је сироче Анние је тајна декодер прстен, а ви заиста могу да примене их ротационе шифре - Постаје нешто, Б постаје нешто - са неколико точкова, један споља, један изнутра таква да ако окрените точкић или прстен, ви у ствари можете поређати слова са различитим словима, добијање тајну шифру. И тако, као Цлиффхангер за данас, оно што сам мислио да је то мало атавизам да ако укључите телевизор 24. децембра, можете да гледате Филм оглас за наусеум 24 сата за редом. Али данас, ја ћу га отворити овде и дају нам само два минута педагошки релевантне Цхристмас Стори са малим пријатељом званим Ралфи. [ВИДЕО РЕПРОДУКЦИЈА] -Да се ​​зна све и сушен на сунцу да Ралф Паркер се именује члан сироче Ени тајне круг и има право на све почасти и користи јавља с'тим. -Потписан, Литтле Орпхан Анние. Потписано, Пиерре Андре мастилом. Већ почасти и користи на девет година. [Виче РАДИУ] Хајде, хајде да завршимо са тим. Не треба све те глупости о сверцери и гусара. -Слушај сутра увече за закључивање авантура црно гусарског брода. Сада је време за Сецрет Анние Порука за вас чланове тајног круга. Запамтите, децу. Само чланови Сецрет Цирцле Анние може декодирати Анние тајну поруку. Запамтите, Ени је у зависности од вас. Поставите пинове на Б2. Овде је порука. 12, 11, 2 - -Ја сам у свом првом тајном састанку. -25, 14, 11, 18, 16 - -Пјер је био у великој гласа вечерас. Могао сам поруку да вечерашњи је заиста важно. -3, 25. То је порука од Анние сама. Запамтите, немојте никоме рећи. -90 Секунди касније, ја сам у јединој соби у кући у којој дечак од девет могли да седи у приватност и декодирати. Аха, Б. отишао сам на другу. Е. Прва реч је "да". С Долазило је лакше сада. У. 25. То је Р. -Хајде, Ралпхие. Морам да идем. -Одмах се доле, мама. Бого мој. -Т. О. Обавезно. Будите сигурни на шта? Шта је Литтле Орпхан Ени хоћете да кажете? Будите сигурни на шта? -Ралфи, Ренди мора да иде. Хоћеш ли изаћи? -У реду, мама. Одмах напоље. -Ја сам се ближи сада. Тензија је била ужасна. Шта је то било? Судбина планете може држати у равнотежи. -Ралфи, Ренди да идем. -Одмах се се за забога. -Скоро тамо. Моји прсти летели. Мој ум је био челика замка. Свака пора вибрира. Било је скоро јасно. Да, да, да, да, да. -Будите сигурни да пије своју Овалтине. Овалтине? Бедан комерцијални? Курвин син. [ЕНД ВИДЕО РЕПРОДУКЦИЈА] СПИКЕР 1: Ово је ЦС50, и то Проблем ће бити поставили две. Видимо се следеће недеље. СПИКЕР 2: У следећа ЦС50, то се дешава. СПИКЕР 1: Дакле, једна тема нисмо Погледао је до сада да од функције показивача. Сада, функција је само показивач адреса јавног функција, али слично као - син -