SPEAKER 1: Добре. Добре дошъл. Това е втората седмица на CS50, а ние имаме до този момент са използвали функции, но до голяма степен ги приема за даденост. Използвали сме ФОРМАТ която има страничен ефект от печат неща на екрана. Използвали сме се-Int, да плува. Но какво, ако наистина искате да създадете собствените си функции, тъй като някои от може би вече са започнали да направи за Проблем Set One, макар Не е абсолютно задължително? Е, да вървим напред и да преразгледа че проблема с просто иска от потребителя за своето име и печат нещо на екран, но се опитват да повлияни от някои на сходство, което сме вижда в този код до този момент. Така че от това искам да кажа следното. Аз ще отида напред и да се създаде нова програма, просто се обадете тя hello.c както обикновено. Аз ще отида напред и да се отдам включва стандартната io.h на върха. Отивам да и се отдам изпреварващо на CS50 библиотека, така че Аз не се разкрещя от компилатора. И сега аз ще вървим напред и декларира Int, главната, невалидни. И след това тук, това е мястото, където искам да започне да се възлагат функции за някаква друга функция, която аз самият съм щях да пиша, но това не в момента съществува. Например, да предположим, че искам да Свържи се функция, която ми позволява да разпечатате Здравейте, запетая и след това някои на потребителя име. Вместо да продължат да правят ФОРМАТ Здравей,% S, не би ли било хубаво, ако имаше само функция, наречена не ФОРМАТ но печат име? Така че с други думи, аз искам да бъде в състояние да Напишете програма, която прави малко нещо като това. Първо, аз ще кажа ФОРМАТ си име, като по този начин накара потребителя да дайте ми името му, и тогава аз съм ще използва познатите S низ обяви низ. Дай ми една променлива от тип низ, Наричат ​​го и, и се съхранява в че доведе постави получите низ. Но сега, в последните седмици, че ще трябва малко досадно направено Здравейте,% S / N. И с други думи сме виждали това Например няколко пъти, и това е тривиален пример, защото има само един ред с код, така че наистина не е голяма работа, за да пишете отново. Но да предположим, че тази линия на код действително са се превърнат в тежест, и това не е един ред с код, но това е 10 реда код на няколко седмици, считано от сега, а ти просто да се уморен на копиране и поставяне или въведете отново същия код. Не би ли било хубаво, вместо да правиш ФОРМАТ Здравейте,% S и така нататък, Не би ли било хубаво, ако имаше само функция, наречена печат име, което приема аргумент - с други думи, това отнема вход - и след точка и запетая. Така че тази функция, нали така било хубаво, ако която е съществувала? Тогава не би трябвало да се тревожи за ФОРМАТ какво е, какво% S и всички тези усложнения, които са Не всичко, което интересна. Те са полезни. Така печат име, за съжаление, не беше изобретен около 40 плюс години. Никой не мислех да го напиша. Но това е красотата на наличието на език за програмиране, точно като в Scratch можете да дефинира специални блокове, така че в C и най-всеки език, можете да определите своя функционалност, може да можете да зададете вашите собствени функции. Така че, макар и да получите основната от автоматично безплатно, ние може да обяви нашите собствени функции. Така че аз ще направя стая тук до върха, и аз ще заявя собствена функция, която ще се грижи за малко странно в началото, но ще дойдем към тази не след дълго. Отивам да кажа нищожен, като по този начин показва тази функция прави нещо, има страничен ефект, но не се връща нещо за мен в същия начин, по който се Int или взимането на самата прави. И аз ще дам тази функция на Името на печат име, и аз отивам да уточни, че този човек ще вземе низ, и аз отивам да се обадя, че низ име. Мога да го наречем нещо искам, но аз Искам си код, за да бъде самостоятелно документиране. С други думи, ако някой от вас е трябвало да отвори този файл и да го прочетете, бихте могли да нещо като направи извод от името на тази вход каква роля би трябвало да играе. И сега по-долу, че аз ще се отвори фигурна скоба и затворена фигурна скоба, и така забележите съм следвала същата модел на четири линии чрез седем като Следя за една добра седмица плюс сега между, да речем, линии и девет 14, който композира основната. С други думи, принтиране име е друга функция. Сега, компилаторът няма да знам да се обадя на това нещо автоматично защото аз буквално го е измислил, но ще знам все още да се обадя на главния автоматично, а след това, разбира се, ред 13, призовавам моя собствена функция. И тъй като съм заявил, че функцията до он-лайн четири преди основните, това ще научи компилатор това, което цитирам, край на цитата ", печат име" означава и какво да направи. Така че аз съм нещо като му даде нов потребителски блокира в контекста на, да речем, нулата. Така че тук, мога да сложа, че много често или повтарящи се модел на код Държа писмено в клас, ФОРМАТ % S Здравейте,% S / N ", - какво искам да се сложи тук? S? Така че аз искам да се сложи името в този контекст. Така че забележите малко на дихотомията тук. Защото аз съм обявяване моята собствена функция и аз донякъде условно наречена да го отпечатате името и защото съм посочени в скоби, че този Функцията приема само един аргумент, вида на която е низ - така че това е една дума или фраза или нещо подобно - и Обаждам се, че този довод име, че означава само променлива, която е в обхвата, така да се каже, е името. S съществува само между това, което две фигурни скоби, разбира се? Ами наистина, точно като линия 10 през 14, така че също като в понеделник не можете да използвате S, но това, което може да направите, е да премине S в името печат. Печат името просто така се случва да му се даде псевдоним, синоним прякор, наричайки го име, и сега използването му в тази линия. Така, да се спести това, отдалечаване. Нека да вървим напред и да направи здрасти. Изглежда добре. Още не плюе грешки. . / Здравей Enter. Как ми е името? David. И здравей David. Така че не е чак толкова вълнуващо, но просто мисля сега. Сега имате същата съставка както направихме в Scratch да направим собствени функции. Но там е малко на нещо, за което. Да предположим, че не съм наистина мислех това чрез и всъщност без наистина да мисля за това пише тази функция тук. Усеща напълно разумна. В Scratch не съществува понятието на място във вашия скрипт. Може да се направи един тук, един тук, един тук, и тя може да започне да изглежда малко разхвърлян, ако не да го навън проби, но това не значение къде физически скриптове те бяха на екрана. За съжаление в C - и това е разлика езици като Java и Python и други, които може да са запознати с - за съжаление в C, за да прави значение, защото гледам това, което е ще се случи сега. По подразбиране функция, която ще за изпълнение е, разбира се, основното. Main ще се обадя името печат върху Онлайн осем, но за съжаление, компилатор дори няма да знаят, че името печат съществува, докато не стигне до ред 11, което за съжаление е ще бъде твърде късно. Така че нека да направим направи здрасти. И сега дяволите, две грешки генерирани. Така, да се придвижите нагоре до самия Първо, тъй като ние винаги трябва да се направи, и забележите, че тя ми крещи, "Имплицитно декларация на функция отпечатате име. " Така че сме виждали това съобщение преди, имплицитно декларация на функция. Когато сме видели, че вид грешка? Когато не се включват библиотека. Ако Забравих cs50.h и бих се развика за взимането или да получите вътр. Но в този случай, тази функция печат Името не е в библиотеката, нали? Това е буквално в този файл, така че какво е наистина проблемът? Ами за съжаление в C, тя ще ви отведе толкова невероятно буквално, че ако искате функция, наречена печат името съществува, или трябва да прилагат тази функция на самия връх на вашата код, така че да е достъпна за понижаване функции, но честно казано, че става помия много бързо. Лично аз като да сложиш главната първа защото тогава това е много ясно какво е това Програмата прави на пръв поглед. И плюс, можете да получите в странен ъгъл случаите, в които, ако х иска да се обадя Y, но Y може да се нарече х, просто физически не може действително да сложа една над друго. Но се оказва, в ° С, може да се решаването на този много просто. Отивам да се сложи малко пространство тук, а аз съм просто ще изпреварващо, макар и не навсякъде излишно, ще се научи компилатор, че съществува функция нарича печат име, това отнема низ, и аз отивам да се обадя го наречете и запетая. Така че това сега е в четвърти ред, който ние не са виждали преди, е декларация на името на функцията за печат, но това е само обещание, че тази функция ще в крайна сметка да се определи, в крайна сметка бъдат приложени. Това сега може да остави на мира, защото сега това е определение, изпълнението, сортиране на последната миля на изпълнението на настоящото конкретна функция. Така че, честно казано, че е глупаво, това е досадно, но това е начинът, C е, и това е защото тя ще ви отведе много буквално и, като компютър честно казано следва, само че точно това, което той каже да направи и така, че поръчването е важно. Така че имайте това предвид и отново да започне да забележите, че повторение на модели. Коефициентите са щете, ако не сте вече, започват да се срещат съобщения така че на пръв поглед изглежда напълно загадъчен, но ако започнете да се търсят тези ключови думи като "Имплицитно декларация," споменава за функция в този случай - и честно казано, вие понякога дори се получи малко зелено морков символ, който ти казва къде въпросът вероятно е - можете да започнете да работите си път през Все още невидими съобщения за грешка. Всякакви въпроси относно пишете собствена функция по този начин? Нека да направим нещо, което е Малко по-наложителна. Вместо просто да направя нещо, което има е страничен ефект от печат, пусни ме напред и да запишете нов файл, а ние ще наричаме това positive.c, въпреки че това е ще бъде малко по-различна в сравнение с последния път. И този път, искам да приведе отново в действие positive.C например последния път, който се принуди потребителя да даде мен е положително число. Но аз трябваше да се използва получите Int последен път. Не би ли било хубаво, ако имаше функция, наречена получите положителен Int че бих могъл да изнесе тази парче функционалност? Така че разликата тук е, ние ще прилагане получите положителен Int, но за разлика от печат име, което имаше страничен ефект - тя не се върна нещо, което да ме харесват число или низ - се положително Int е, разбира се, ще се върне, да се надяваме, положително вътр. Така че нека да направим това. Включи cs50.h, включват стандартни io.h. Int основната невалидни. И сега тук, аз отивам да се продължи напред и нека да кажем, вътр, го наричат ​​N, се равнява получите положителен вътр. И точно като получите Int вече съществува тъй като персоналът го е написал, аз ще да приемем, че се положително Int съществува, и сега ще да вървим напред и да кажа ФОРМАТ, благодаря за% I / п ", п. Така че сега, ако аз събиране на тази програма, това, което ще се случи в моя терминал прозореца в долната част на екрана? Отивам да се получи, че вероятно същата грешка, както преди. Така че нека се опитаме това. Направете положителен. И отново, имплицитно декларация на функция, получи положителен вътр. Така че можем да решим този в няколко начина. Отивам да го прости и просто сложа декларация до тук и да получите положително вътр. Имам нужда от така наречения подпис. Подписът се отнася само към естетиката на първа линия на програмата. Така че това, което трябва да получи положителна Int замяна? Така че едно цяло число. Искам да кажа, в идеалния случай, той ще се върне нещо като положителна Int, но това не съществува. Не съм виждал, че нашите данни видове, така че ние трябва да се справят с факта, че имаме много малко типове данни, да се работи. Но можем да се върнем едно цяло число и просто вярвам, че той ще бъде положителен. Това ще се нарича получите положителен вътр. И сега какво ще кажеш за своите аргументи? Отнема всеки вход? Има ли нужда от входа? Така че това не е необходимо да знае предварително нищо. Връща низовата не, се Int не. ФОРМАТ прави - тя трябва да има някакъв вход премина в него - и печат име нужда от входа, но се положително Int не. Така че аз ще изрично кажете празнотата компилатор. Void е липсата на нещо друго. Така че нищо невалидни средства става вътре на тези скоби, запетая. И сега в долната част на досието ми - и отново, аз съм просто като вид анална тук основният удар в горната част, която е добра практика, защото по този начин, по всяко време вие ​​или някой друг отваря файла, на функционалност е точно там. Можете да се потопите в един от площада. Така че сега аз отивам да дублират това, получите положителен Int нищожен, но аз не съм ще удари и запетая сега. Ще се отвори фигурни скоби, и сега трябва да се заемат някои идеи от понеделник. Така че, както си спомняте, направихме нещо искали да направите следното, докато нещо не е вярно. И какво да направя? Направих нещо като даде ми положително число, малко един ред. Мога да използвате една от думите, които искам. И тогава аз използвах какво? Int н равнява получите Int, без аргументи за него. И забележите разликата. Когато позвъните на функция, когато използвате функция, не слагаш в невалидни. Трябва само направи това, когато за обявяване на функция, преподаване на компилатора какво тя трябва да се очаква. Така че не е нужно да се сложи анулира там себе си. А сега какво е състоянието ми? Е, п не е равно на положителна, но това е само псевдо-код. Е, как да изразя това по-чисто? Така че, по-малка или равна на нула. Така че отново, забележете, можете да направите по-малко от или равно на. Въпреки че това е две отделни символи, можете да го направите на клавиатурата като такива. Но все още има бъг, който Аз прецаках последен път също. Аз трябва да декларират - точно. Аз трябва да декларират п извън на цикъла. Така че аз трябва да се сложи п тук, а аз не искам отново да го обяви тук да не би да получа нова променлива. Аз просто искам да се придаде стойност тук. И сега аз не съм съвсем направено тук. Нека да избързвам и се преструвам, че съм свършил. Направете положителен, а сега има нова грешка. Контрол достигне края на без невалидни функция. Така че новата съобщение за грешка, но ако вид на дразни освен всеки от думи, вероятно загатва какво не е наред. Контрол. Control просто означава към поръчката на операции в една програма. Компютърът е в контрола и нещо се е объркало. Така че да достигне до края на която не е нищожен функция. Каква функция е очевидно предвид? Каква функция е не-нищожен? Така че се положително Int, и малко объркващо с това, че добре, Малко е невалидна. Той има спецификация на свободното пространство за неговото аргументи, но мощността му ще бъде от тип N. Така че думата в ляво е т. нар. връщане тип. Думата от вътрешната тук на нула или повече аргументи че една функция отнема. И така, какво трябва да направя? В този момент в моя код, ред 21, където мига бързо в момента е, че има положителен Int вътре на променлива наречена п. Как мога да го върна на основното? Буквално. Върни п запетая. Така че просто като Colton връща парче хартия с отговор за мен от отпадане това парче хартия в малка черна кутията на масата, да направите това код, вие буквално пише, върнете N, и това е така, сякаш бяха Colton ми подаде нещо физическо обратно. В този случай, това, което се случва е, да положително Int ще върне това, което е вероятно положително число на кого? Откъде идва тази стойност в крайна сметка? Това се озовава в тази променлива, п, и След това се пристъпва с линия девет. Така че с други думи, по реда на операции, тази програма започва изпълняващата и компилаторът осъзнава, О, искаш библиотеката? Оставете ме да вземете каквото и да има вътре, че. О, искаш стандартната библиотека IO? Оставете ме да вземете каквото и да има вътре, че. Какво означава да се каже компилатор когато го удари линия четири? О, ти обеща да приложи функция, наречена получите положителен, но ние ще се върнем към това по-късно, нещо подобно. Int основната невалидни просто означава, ето червата на моята програма. Line седем е само на фигурна скоба. Line осем казва в ляво, даде ми 32 бита за цяло число, го наричат ​​п. От дясната страна, това е казвайки получите положителен вътр. Сега нека спрем тази история, защото сега Аз не продължи да се движи курсора си надолу. My курсора сега слиза тук, защото сега се изпълнява положителна Int. Int н е обявена. Направете следното. ФОРМАТ ми дава положително число. Вземете едно цяло число от страна на потребителя, да я съхранява в N, и може би направи това отново и отново. Тази линия означава, че този код може изпълни нагоре и надолу, като това отново и отново, но когато потребителят най-накрая сътрудничи и ми дава положителна Int, ударих линия 21, като в този момент Номерът се върна, и коя трябва да подчертае сега? Nine. Control, така да се каже, се връща да се подредят девет. Това е линията, която сега е на власт. Така че това е, което се случва всичко този път под предния капак, но когато сме използвали функции като ФОРМАТ или дори да получите низ, че някой друг написа за вас, контрол беше да бъде предаден, изключване на някой друг ред код от ред по ред. Това е просто не можахме да го видим и ние не би могло да го изобразяват в тази програма, защото това е по някакъв друг файл на твърдия диск без знанието на нас. Така че нека всъщност съставят и стартирате тази сега. Направете положителен. Събиране, това е напредък. . / Положителна. Дай ми положително число. Нека бъде трудно. Отрицателна 1. Нула. Да го дават 50. Благодаря за 50, така и за контрол е вече се е върнал. Всички въпроси, а след това, по този въпрос? Да? [Недоловим]. Кажи го отново. О, добър въпрос. Така че можете да забележите, че паралелно тук Аз съм един вид рязане в корнер нататък. В ред 12, искам да кажа, да се положителна Int връща Int, но от същия логика, то сега е логично, че в линия шест, аз казвам, че основните връща едно цяло число, но това, което никога не сме имаше в някой от нашите програми? Ние никога не сме имали споменаване на тази ключова дума връщане. Така се оказва, че в ° С, най-малко версия на това, че ние използваме направени през 1999 г., технически, това е случва за вас автоматично. Всеки път, когато прилагането на програмата и изпълнение на основната функция, наречена, тази функция ще се върне нула подразбиране, ако не се каже по друг начин, и нула е само допълнение. Светът се връща нула като по този начин което показва, че всичко е добре, ефективно оставяйки ни с четири милиарда възможни неща, които биха могли да погрешно, така че, ако се върнем един, че може да означава код, който означава, че този нещо се е объркало. Бихме могли да се върнат две, което означава, това друго нещо се е объркало. Ние може да се върне четири милиарда, които означава това друго нещо се е объркало. И ако сега мисля за собствения си PC или Mac, може да се припомни, че Понякога можете да получите загадъчни съобщения за грешка от софтуера, който сте използване, а понякога има човек приятелски описание, но има често код или номер на екрана? Ако това не идват на ум, просто държа под око за това. Това е обикновено това, което те кодовете се отнасят до това. Те са включени в Microsoft Word и други програми, така че ако подадете Доклад за бъг с компанията, можете да им кажа, о, аз имам грешка номер 45. А някои програмист обратно в компанията Посетете че в неговата или нейната код и да кажа, о, това е защото съм направил този бъг и затова на потребителя получи това съобщение. Но честно казано, това е само малко разсейващи и е малко досадно да заключи, че, поне в нашия Първите няколко програми, така че ние сме са го пропуска. Но през цялото това време всеки един от вашите функции основната тайно е имал този Онлайн добавят автоматично за вас от компилатор, само по силата на споразумение за да ви спести доста време. [Недоловим]. Не е нужно да го включи в главната. Това е добре. Можете лесно да го включите ако ви се налага изпълнението на функцията по този начин. В противен случай функцията плосък навън няма да работи. Но в основни линии не е необходимо. В една или две седмици, ще започнат да получават в този навик веднъж искаме да започнем показваше грешки. Наистина добър въпрос. Така бързо словесно почивка, за да се отбележи, че този петък, за да не бъдем като на обяд сам по себе си, но ще бъде на вечеря с някои от студентите и персонала. Ако искате да се присъедините към нас, се чувстват свободно да отидат да cs50.net/rsvp. 18:00 този петък. Space е, както винаги, ограничен, но ще продължи да прави това на почти седмична база, ако пространството изтече тази седмица. Така че Катерачът, че бяхме стигнали на Понеделник е, че струните може действително да се индексира в, които просто ви означава може да получите на първия знак, на втория знак, третият знак и така нататък, тъй като можете да ефективно, че на низ, като Здравейте, като в този случай пет писма вътре на кутии. И вие можете да получите във всеки от тези кутии с какво синтаксис е ние въведе в понеделник? Тези квадратни скоби на клавиатурата. Това просто означава, отидете на място нула. Започваме преброяване на нула, така че скобата нула означава, ч, скоби един означава Е, и така нататък. И така през цялото време, когато сме били използване на струните и пишете в "здравей" и "свят" и други неща, за на екрана, това е бил съхраняван в кутии като тази. И да предположите. Какво означава всяка кутия представляват физически вътрешността на компютъра си? [Недоловим]. Съжаляваме? Други. Така герой, разбира се, в случай от низове, и характер е само осем бита или един байт. Така че най-вероятно са най-малко неясно запознати с факта, че вашето Компютърът има памет. Има два вида памет най-малко. Един от тях е на твърдия диск, където да спестите неща постоянно, и това е обикновено голяма, за да можете филми и музика и така нататък. След това имате друг тип памет нарича RAM, R-A-M, Random Access Памет, и това е вид памет , който се използва, когато компютърът ви е работи, но ако загубят властта или вашия батерията умира, всичко, което се съхранява в RAM изчезва, ако загубят властта изцяло, защото не е устойчиви. Вие обикновено имат, тези дни, а концерт от него, два концерта, може би повече. И главата на RAM е, че е много по- много, много по-бързо от твърди дискове или дори твърдо състояние кара тези дни, но това е обикновено по-скъпо, така имате по-малко от него. Така че днешния разговор наистина се отнася на оперативната памет, този тип памет, която съществува само докато има власт който се подава в компютъра си. Така че, когато напишете H-E-L-L-O, Enter за клавиатурата, Н става в една байт на RAM, на E върви в друг байт RAM, както е останалата част от думата. Така припомни какво успяхме да се направи последен път е този. Нека да вървим напред и да се отворят файла че се обадихме string.c, и припомни, че изглеждаше малко нещо като това. Нека действително се връщам и да промените то точно на това приличаше, низ дължината на S. Така че погледнете програмата тук. Ние включват CS50 библиотека така че можем да използваме получите низ. Ние включва стандартната io.h така че можем да използваме ФОРМАТ. Защо ние включваме string.h? Това е нов в понеделник. Така че ние искахме низ дължина. Str Ленг. Хората решили преди години, нека просто да бъде кратък. Вместо да го нарече "низ дължина" нека го наречем "№ Ленг" и нека света разберат това, и така че това е това, което получаваме достъп до с string.h. Това е познато. Това е познато. Това е познато. Това е малко по-нов. В ред 22 - и ще се върнем за това, но за сега знам - и бихте само, че това се налага прочетете документацията или ако знаеше C вече - взимането понякога може да се притеснявам. Ако потребителят е наистина състезателно или неотзивчиви и той или тя просто не объркате нещо в клавиатурата или видове толкова към клавиатурата, че го обзема паметта на компютъра, на теория, да низ може да се върне нещо различно от низ от символи. Той може да се върне на специална нарича стойност NULL във всички капачки, N-U-L-L, и това е само на така наречените контролни стойност. Това е специална стойност, която означава нещо лошо се е случило в този случай. Това е липсата на низ. Така нула съм проверка за просто, така че, Казано накратко, ул. Ленг и други функции, които идват с C, ако те очакват низ но ти ги предаде липса на низ, ако мине ги NULL, на компютъра или програмата просто ще се срине окончателно. Тя ще се мотае. Тя ще повърна някои съобщение за грешка. Лоши неща ще се случи. Така че, въпреки че това все още е не са добре дефинирани - това ще направи по-дълбок смисъл в една седмица или две - в ред 22, това е просто пример за самостоятелно защитата при проверка на грешка само в случай, едно време от един милион нещо се обърка, най- поне моята програма не ще се срине. Така че, ако и не се равнява нещо лошо, Аз имам този за линия, а това е където имахме тази друга нова част от синтаксиса. Имам за линия итерации от нула до дължината на S. И след това тук, аз бях отпечатване и скоба аз, но защо ли да използвам в% от всички внезапно вместо% и дори макар и е низ? Това е знак, нали? S е низ, но и скоба нещо, S скоба аз къде съм е нула или един или два, това е индивидуално знак в низ, и така за че ФОРМАТ трябва да бъде уведомен, че това е наистина един характер да се очаква. И тогава припомни, какво е направил това Програмата всъщност правим? Отпечатано в колони. Да, точно така. Тя просто отпечатани думата, която пиша в колона, един символ на ред. Така че нека да видим отново. Така че се низ. Съставител OK. . / Низ. Нека да въведете в H-E-L-L-O, Enter, и Всъщност разбрах, по една на ред. Така че нека да направим една оптимизация тук. Ако си мислиш за него, особено ако сте програмирани преди, има може би една неефективност в линия 24. С други думи, това не е непременно най-добър дизайн. Straightforward, поне веднъж помня какво ул. Ленг е, но това е прави нещо тъпо потенциално. Какво може да бъде това? [Недоловим]. Точно така. Това е проверка за дължината на S всеки път, въпреки че H-E-L-L-O е винаги ще да бъде пет знака. Всеки път през този цикъл, на пет не се променя. Може и да съм аз увеличаване, но това, което е дължината и на всеки повторение на този цикъл? Това е пет, това е пет, това е пет, а Все още аз съм все пак питам въпрос отново и отново и отново. Сега, честно казано, че компютърът е така, по дяволите бързо, никой няма да забележи Разликата в този случай, но тези видове на лоши решения дизайн може да започнете да добавяте, ако самият компилатор не се опитва да се определи това за вас, които тя обикновено не би, най- поне в уреда. Така че аз ще го направя. Отивам да добавите запетая след моята първа променлива, аз. Отивам да се даде друг променлива, като го нарече N, само чрез Конвенцията за номера, и тогава аз съм ще присвоите п стойността на низ Дължината на лидер. И тогава аз няма да променям състоянието ми да бъде това? Отивам да си сменя състояние да, докато е по-малко от п. Така че сега, колко пъти съм проверка на дължината на S? Веднъж, но това е ОК, за да проверя срещу N отново и отново, защото сега тези, стойности не са действително се променя. Сега за сега, просто знам, че по всяко време наричаме функция, има по малко от режийни не, достатъчно, за да ви попречи наистина от всякога използване на функции, но със сигурност, когато има ред код харесва - и линиите ще се по-интересно не след дълго - когато има възможност да се мисли, ако въведете този код, колко пъти ще го изпълни? Ще започнете да се види с течение на времето изпълнението на програмите ви могат наистина се промени. В действителност, един на проблема поставя ние сме направено през последните години включва прилагане, както вероятно си спомняте от седмица нула, за проверка на правописа, но Проверка на правописа, който е предназначен за подкрепа на речник на 150 000 плюс думи, които ние ви даваме момчета. Вие ще трябва да пишете код, който се зарежда тези думи в RAM, така че в кутии като видяхме на екрана момент Преди и след това толкова бързо, колкото да, трябва да бъде в състояние да отговори на въпрос на форма, е тази дума грешно? Изразява тази дума грешно? Изразява тази дума грешно? И в нещо подобно, което сме направено през последните години се превърна в това, макар и на едно неучастие в доброволна основа, а конкуренцията на видове, при което студентите, които използват по-малко RAM и по-малко време, по-малко процесорни цикли, в крайна сметка бълбука в началото на малко лидер на борда или класирането, че ще се постави върху хода на началната страница, както сме направено през последните години. И отново, напълно по избор, но този говори с конструктивните възможности които са по-напред, след като ние започне изграждане на върха на някои от тях основни градивни елементи. Така че нека да се върнем към тази схема за един момент и да разкрие малко нещо повече. Това наистина е низ, и сме взели възползва от библиотеки, стандарт io.h който има - ФОРМАТ. ФОРМАТ, наред с други неща. cs50.h, която се вътр и да получите низ и така нататък, string.h, които имаше ул. Ленг. Но се оказва, има още един. Честно казано, има много и много глава файлове, които декларират функции за библиотеки, но това е ctype.h всъщност ще бъде малко предимство, тъй като аз ще да вървим напред и изпълнение на една друга програма тук. Нека да вървим напред и да се отворят нещо Написах в нарича предварително capitalize.c, и нека да разгледаме как работи това. Забележете, че аз съм с помощта, в тази версия на играта, три познати файлове. Забележете, че в ред 18, аз съм удар с ред от текста. Обявлението в ред 21, аз съм като твърди, че следния код ще капитализират и, независимо от потребителя написали в, и как се прави това? Е, аз съм като - Извлечената поука от последния път - Аз съм деклариране и и н и итерации над знаците в низ. И тогава какво е този блок на закон в съответствие 24 до 27 правиш гледна точка на лаик? Малка буква обратно. Точно така. Ако и аз скоба - така че ако аз-ти характер на лидер, който е специфичен Чар в низа, е по-голяма от или равна на малки букви А и - Припомняме, че двойна амперсанд означава и - и от същия характер, а скобата аз, е по-малко от или равно на малки букви Z, това означава, че това е един или В или С, или точка, точка, точка, или Z, което означава, това е само с малки букви. Какво искам да направя в този случай? Е, аз мога да го направя малко по- загадъчно, но нека да дразни този апарт. Отивам да се обадя ФОРМАТ, отпечатва% в защото искам да препечатайте тази характер на екрана. Аз след това ще отнеме и скоба Аз, I-ия знак в S, а след това защо правя този малък трик тук, малки букви минус A столицата? Това, което е, че ще даде мен, най-общо казано? [Недоловим]. Точно така. Аз не си спомням - тя е 65 години за столица A. аз наистина не помня какво малки букви а е, но това няма значение. Компютърът знае. Така че, като казва, малки букви минус капитал A, че е странно да се изваждане на една буква от друга, но какви са символа под капака? Те са просто числа. Така че каквото и тези номера са, оставите компютъра си спомням а не ми човек. Така малки букви минус капитал A е ще ми даде разлика. Това се случва да бъде 32, а това би било случаят с малки букви Б и капитала B и така нататък. Той остава непроменен, за щастие. Така че аз съм всъщност казва, да вземе малка буква, се изважда от които стандартната разлика, и че ефективно промени сек скоба и от малки букви да, разбира се, главни букви, без да ми се налага да мисля, наистина около или да помните, какви са били тези, номера, за които говорихме, когато осем доброволци изскочи на сцената? Сега Междувременно в друг, ако това не е малка буква, както е определено по линия 24, просто да го отпечатате. Искам само да се докоснат до героите, които са били всъщност първоначално малки букви. Така че нека да видим това. Уверете се възползва. Съставител, OK. . / Капитализират. И нека да въведете в H-E-L-L-O с малки букви, Enter. И забележи, че тя се преобразува в главни букви. Нека да го направим отново с друга дума. Какво ще кажете за D-A-V-I-D с първото D капитализирани като име обикновено е? Enter. Забележете, че все още е вярна. Тя просто се извежда, че първият D непроменена направо, че друго построи. Така че имайте предвид, след това, а Няколко неща тук. One, ако някога искате да проверите два условия наведнъж, можете и да ги заедно като ние прогнозира. Можете да сравните героите по този начин и ефективно лечение на символи като номера, но честно казано, това е така, по дяволите загадъчен Никога няма да си спомня как да излезе с тази от нулата без мотиви през него от доста малко време. Не би ли било хубаво, ако някой там пише функция, наречена е ниски, че да успее да отговори, за мен истина или невярно, този герой е само с малки букви? Ами за щастие, който пише ctype.h направи точно това. Пусни ме тук и добавете ctype за в видове, а сега ме пусна тук и пренапише тази линия, както следва. Така че, ако това се нарича е по-ниска, аз твърдя, и скоба аз, тогава аз отивам да изтриете тези две линии напълно. Така че сега някой друг, аз се надявам, пише наречена функция е по-ниска, и Оказа се, че те направиха и те се записаха тя вътрешността на ctype.h. И сега аз ще оставя линия 27 сам, аз ще оставя линия 31 сам, но забележете колко съм строги моя код. Сега е по-чист. Това е малко трудно да гледам през защото сега функция, освен това, е така чудесно той да се нарича просто прави това, което казва. Така че сега аз отивам да запишете това. Отивам да намалите. И точно както в Scratch бихте могли да имат Булев, булеви стойности истина или неверни, това е точно това, което е понижаване на практика се връща. Позволете ми да компилирате. Позволете ми да се тестват отново. А сега нека да опитаме отново, H-E-L-L-O, Enter. Това е доста добър. И това опитайте отново, уверете се, че не прецакаш нещо. Това се капитализира, както добре. Но това не е достатъчно добър, защото Другото нещо, което аз никога няма да спомните, освен ако аз работя през него наистина внимателно, да речем, хартията е тази проклета линия. Не би ли било хубаво, ако имаше функция, наречена на горния? Ами оказва се, има е в ctype.h, както добре. Аз ще отида напред и вид - нека ми донесе тази линия отново. Вместо това тук, нека да вървим напред и да кажа, замества% в. резултат на повикване тази функция, за да горната част на I-ия характер на лидер. И сега забелязвам, че става малко балансирани. Трябва да следите колко скоби съм отворена и затворена. Така че сега е още по-чист. Сега тази програма е все по-добре и добре проектирани може би защото това е много, много по-разбираеми, но Не е нека да отстраним. Уверете се възползва. . / Капитализират. Н-Е-Л-Л-О. Нека да го стартирате отново, D-A-V-I-D. ОК, така че ние сме все още в доста добра форма. Но сега за горната. Аз предлагам, че има още едно усъвършенстване бихме могли да направим това би било много хубаво, че наистина може да затегнете до този код и наистина ни даде пет от пет за дизайн, например. Какво би било хубаво да се отървете от? Ами, вижте как по дяволите дълго този блок код е просто да се направи нещо по-просто. Сега като отмени, тъй като може да се наложи разглежда в супер раздел миналата уикенд, не е строго необходимо за фигурни скоби, когато само един ред код, въпреки че ние предложихме запазвайки ги така, че го прави много по- по-ясно, като в U-образна Scratch е блокове, това, което е вътре в бранша. Но не би ли било хубаво, ако на горния, когато се дава своя принос, той се превърна в главни букви, ако не е, и какво би било чудесно в обратния случай, ако тя вече е главна? Просто го премине през и да го остави на мира. Така че може би го прави това. Мога да се опитам и да се надяваме, че тя не, но нека представим едно друго нещо. Вместо да използвате тази вграден терминал прозорец тук, припомни, че този площад иконата черно ви дава по-голям прозорец за регистрация, че мога да пълните екрана, ако искам? Така се оказва, че са някак странно име, но има тези неща, наречени мъж страници, страници от ръководството човек за кратко, и мога да получите достъп до тези от пишете мъж - какво да искате да пишете? Man до горната. А сега забележи, ако съществува функционира вътрешността на компютъра, в този случай уреда, който е само на операционната система Linux, че ще да ми даде малко по-загадъчен набор от изход, но вие ще откриете, че с течение на времето тя винаги е форматиран почти същото, така че да започне да свикнете с него. Забележете в горния край на горната част и Очевидно е една и съща документация за да се намалят. Който и да го е написал е скатаване от ъгли и да я тури всички на една страница. Тези неща "цел в живота е да конвертирате писмо до горната или малки букви. Забележете, че при Синопсис, човекът страница ме учи какво имам файл да се включат да използвате това нещо. Това ми дава подписите за тях функции, както на тях, дори въпреки че в момента само грижа за едно. Ето сега е описание. За горната преобразува писмо C в главни букви, ако е възможно. И все пак не е толкова поучително, но нека Сега погледнете под върнатата стойност, нещото че е върна. Така че върнатата стойност е тази на превръща писмо или С, ако преобразуване не е възможно. Какво е в? В първоначалния си характер. В първоначалния си характер и ние знаем, че като, отново, достигайки до Синопсис, и всеки, който е написал това функция просто реших, че на входа да се горната и долната да е само произволно ще се нарече в. Те може да я наречете най нищо те искат, но те го държат просто като в. Така че аз съм се консултира с човек страница. Това изречение ме успокоява, че ако това не е малка буква, това е просто ще ми върнеш в, което е съвършен, което означава, че може да се отърве от моето друго състояние. Така че нека да се върнем към Gedit и сега нека само да направите това. Отивам да копирате моята ФОРМАТ изявление. Аз ще отида напред и надясно вътре на линия за разпечатка, която е навън и се отърве от сега, ако цялата тази конструкция. Не беше лоша идея, и беше много много правилно и в съответствие с всичко, което проповядва, но не само е необходимо. Веднага след като реализира някои библиотека функция съществува, че някой друг пише, или може би написал на друго място в файла, можете да го използвате и наистина начало за затягане на кода. И когато казвам неща като добър стил, факта, че това лице, наречено функционира до горната, или преди това е ниска е чудесно полезно, защото те са много описателен. Може би не искате да се свържете с функции X и Y и Z, които имат много, много по-малко значение. Всякакви въпроси относно тази серия подобрения? Така че това е достатъчно да се каже, един от най- храна за вкъщи е дори за своя проблем в стаята - може би проблем набор, но със сигурност P зададете два и нататък, дори когато те са правилни, не означава непременно означава, че те са идеални просто Все още или особено добре замислена. Това е друга ос да започна да мисля за. Така че това е низ вътрешността на паметта на компютъра, но ако имате цял куп герои като H-E-L-L-O вътрешността на RAM, и предполагам, че във вашата програма се обадете низ няколко пъти, като че ли обадете се низ веднъж, а след това обадете се низ отново. Е, какво ще се се случи с течение на времето? С други думи, ако имате една линия на код, макар и извън контекста, като низ S получава - да го направим. String име равнява получите низ. Така че предполагам, че ред код се разбира да поиска от потребителя за името му. Това от следващия ред има за цел да попитам ръководство за своето училище, и този нов ред, и така нататък. Да предположим, че ние да питам потребителя за друга и друг и друг низ. Те ще останат в паметта в същото време. Един няма да се смажат друга. Училището не се презапише друга. Но там, където те правят всичко в крайна сметка в паметта? Е, ако започнем да се направи на екрана, които можем да използваме това нещо тук като черна дъска, ако този черен правоъгълник представлява моя компютър памет, аз ще произволно начало го разделите на малки квадрати, всеки от които представлява един байт от паметта. Честно казано, ако имате гигабайт RAM тези дни, вие имате един милиард байта от паметта на компютъра ви, така че един милиард от тези квадрати. Така че е достатъчно да се каже, тази наистина не е в мащаб. Но можем да поддържаме съставянето всички тези очевидно не да мащабирате площади, и това колективно представлява моя компютър с памет. Сега ние просто ще направим точка, точка, точка. Така че с други думи, когато предприятието подтикне потребител с взимането да ми даде низ, какво се случва? Ако потребител въведе "здравей", който завършва в Н-Е-Л-Л-О. Но да предположим, че След това потребителят видове в - Всъщност, не е трябвало да направи Здравейте, тъй като ние искаме ги за имената им. Така че нека да се върна, ако мога да го направя. Така че, ако аз тип в D-A-V-I-D за името ми, но припомни, че на втория ред на код се получи низ отново за да им училище. Къде е тази дума, че потребителят видове в ще се върви напред? Е, може би това ще отидат в H-A-R-V-A-R-D. Така че, макар да съм го направят два реда, това е само цял куп байта в компютър RAM. Има проблем сега, защото сега, ако съм използване на RAM в тази много разумна а по-наивен начин, какво можете да очевидно не прави разлика? Когато човек започва и къде една краищата, нали? Те са вид размива заедно. Така се оказва компютъра не направи това. Нека да всъщност превъртите назад във времето на няколко знака, и вместо Harvard става веднага след името на потребителя, ръководство всъщност получава, зад кулисите, специален знак въвеждат от компютър за него или нея. / 0, иначе известни като нулев байт дразнещо нарича N-U-L, не N-U-L-L, но ти го пиша като / 0. Това е просто всички нулеви бита е маркер в между първата дума, която на потребителя написали и втората. Така Harvard всъщност сега завършва като тази последователност от символи И още един / 0. Така че с други думи, като от тях контролни стойности, осем съседни нула бита, сега можете да започнете да се прави разлика един символ от друг. Така че през цялото това време какво е "здравей" е всъщност "здравей" с / 0, и В същото време, има може би много добре бъде доста повече RAM вътрешността на компютъра. Позволете ми да направя едно нещо сега. Оказва се, че всички тези квадрати ние сме били рисуване, те са, да, струни, но по-общо, тези неща са масиви. Масивът е просто парче от паметта че се е върнал назад, за да Насрещен, и обикновено използвате масив по начин, на този площад нотация скоба. Така че ние ще видим тези доста с течение на времето, но нека да вървим напред и отвори, нека го наречем възрасти. И забележи какво можем да направим с същите тези трикове, малко малко по синтаксис тук. Така че в ред 17 на тази програма - Всъщност, нека да стартирате програмата първо да можем да видим какво е това нещо прави. Нека ми се обади да възрасти да събиране на тази програма. . / Възрасти. Колко хора са в стаята? Наречете го три. Възраст на първо лице? 18, 19, и 20. А сега малко по-абсурдно, аз просто са направили една програма, която векове тези трима души. Така че има ясно възможност за малко забавление аритметика тук. За щастие, по математика е правилно. 18 отиде в 19, 19 отиде до 20 и така нататък. Но това, което наистина трябваше да бъде илюстративен тук е как ние съхранение тези три хора възрасти. Нека да я увеличите в това, което е става тук. Така че, първо, тези първите няколко реда следва бъдат намалени доста познато. Аз съм просто подканване на потребителя за Броят на хората в стаята. Тогава аз съм с помощта получите Int и да правя, докато направите това отново и отново, и отново. Виждали сме този модел и преди, но линия 27 е нов и доста полезно и ще стане все по-полезен. Забележете, че това, което е различно в ред 27 е, че изглежда се обявяване на INT наречени възрасти, но изчакайте. Това не е просто вътр възрасти. Има тези квадратни скоби, вътрешността на който е п. Така че скобата п в този контекст не вътрешността на ФОРМАТ изявление тук, но в този единствен ред 27, тази линия е казва, дай ми п цели числа, всяко от които е от тип Int. Така че това е една кофа, така да се каже, на, В този случай, три числа обратно успоредно, за да мога ефективно има три променливи. Условията на евентуалност, да бъде ясно, ще бъде това. Ако исках първата студента възраст, мога да го направя. Ако исках второто студента възраст мога да го направя. Ако исках третата студента възраст, мога да го направя. И не дай боже се нуждаем всеки възраст в тази стая - Искам да кажа, това е един чесало на много от копие, поставете отново и отново и отново. И плюс веднъж събиране на тази програма, ако друг ученик ходи в над навън на тази врата, сега ми номер на променливите, е неправилно. Така че това, което е хубаво за масив е като Веднага след като започнете себе си чувство копиране и поставяне, шансовете са, че е не е най-добрият подход. Масивът е динамична потенциално. Не знам предварително колко хора ще бъде в стаята, но аз знам, че трябва п от тях, а аз ще разбера N, когато му дойде времето. Тази линия на код сега означава, дай ми парче от паметта, който изглежда така където броят на кутиите, на екрана е изцяло зависим от N, че ръководство въвели инча Така че сега, до края на тази програма е всъщност е доста подобно на това, което ние що го направих с герои. Забелязали, че съм за линия начало в линия 30. Така че веднага след като получите масив, I обхождане от г равна на нула на до п. Аз просто имам този поучителен ФОРМАТ съобщение просто казвам, дай ми възраст на човек # I%, така че номер едно, номер две, номер три. И защо ли да направя това? Честно казано, хората предпочитат да брои от едно нагоре като има предвид, компютърни специалисти, нула нагоре. компютърни учени няма да използват този вид на програмата, така че ние сме просто ще започнем да броим в единия като нормални хора. И сега в ред 33, забележите леко различно парче синтаксис. I-та възраст в тази променлива от тип масив ще получите вътр. И сега, накрая, това е само аритметична тук. Реших в отделна линия претенция мине известно време, а сега и в тази отделна линия, тези линии изпълни. След една година, човек, с когото ще мога да години, но забележите, че това не е променлива аз. Това е сега% и за вътр. И забележете като първия контейнер, I включете и плюс 1, така че ние разчитаме като нормален човек. И тогава за стойността на тяхната възраст, за Аз години, вземам възрасти скоба аз - и защо правя плюс един тук? Те просто възраст. Това ми е глупав избор на програми. Те просто на възраст една година. Мога да въведете във всеки номер, който Аз всъщност искам там. И така, какво всъщност всички релевантността тук? Е, нека действително превъртите обратно тук и да нарисува картина на това, което предстои. Това, което ще се прави с нашата следваща Проблем Set Двама се впускал в свят на криптографията. Така че това е низ от символи, така че последователност на няколко символа, и това, което означава това? Това не е в онлайн версия от слайдовете. Така че аз твърдя, че това отговаря на това, глупава реклама от много години преди, че може в действителност да припомни един от своите корени. Така че това е пример за криптиране или криптографията. Оказва се, че, ако искате да всъщност изпрати информация или акции информация с някой сигурно, като съобщение като това, можете да катеря на писма. Но обикновено, думите са не е разбъркана произволно. Те дейонизирана по някакъв начин или променени по някакъв начин, така че - Извинете. Това е забавно спойлер за следващия път. Така че може да се изобразят това, което е очевидно O да забележи, че B. линии до капитализация-мъдър. Очевидно R става д. Очевидно F-H-E-R става S-U-R-E. Така Оказва се, че има картиране, и по- този случай има доста глупаво картографиране, ако някой е разбрал? Това е нещо, наречено Rot 13, Завъртане 13. Това е най-тъпото на криптиране механизми, защото буквално добавя 13 към всяка една от буквите, глупаво в смисъл, че ако просто има малко свободно време за вашите ръце и молив, или просто го мисля през главата си, бихте могли да опитате всички възможни добавени - един, два, три, точка, точка, точка, от 25 до просто върти цялата азбука, и в крайна сметка, ще разбера какво е това съобщение. Така че, ако си направил нещо подобно в началното училище преминава съобщенията си най-добър приятел, ако си началното училище учител просто прочетете съобщение и груба принуди разтвор, може да са придобили отговор от това. Сега, разбира се, в реалния свят, криптография е по-сложна. Това е откъс от текст от компютърна система, която има потребителски имена и пароли, като почти всички от нашите направи, и това е, което сте паролата може изглежда като, ако се съхраняват на твърдия ви диск, но в криптиран вид. Това не е просто въртене на писма, А е Б и В е C. Това е много по-сложни, но използва какво е известен като секретен ключ криптография. Тази снимка казва следното Историята с няколко икони. От лявата страна имаме какво ние ще се обадя на обикновен текст. В света на криптографията, обикновена Текстът е само първоначалното съобщение написани на английски или френски език или всеки да било език. Ако искате да го криптиране, ще премине той картинно чрез катинар, така че някои от вид алгоритъм, някои функции или програма, че някой пише че шифрира писма надяваме по-сложно, отколкото просто добавяне на 13 на всеки от тях. Какво да се измъкнем от този процес в средата там се нарича cyphertext. Значи нещо като секси дума. Това просто означава, че това е криптиран версия на обикновен текст. И само ако имате същата тайна, 13 или минус 13, сте в състояние да разшифровате подобно съобщение. Така че в проблем се определят две, сред нещата, ще направя, ако в Hacker Edition, ще трябва да пишат код, за да пляскане тези пароли, фигуриращ какво са и как те са били криптирана, въпреки че ви дават малко на насоки по пътя. В Standard Edition, ще се въведе Няколко шифри, криптиране механизми, викаха един Цезар, един нарича Vigenere, че все още са ротационни шифри, където А става нещо, B се превръща в нещо, но трябва да го направи програмно защото ще има наистина да е тайна състоеше ключ, който обикновено е много или ключова дума, която само подателя и получателя на тези съобщения трябва да разберат. Сега, това всъщност има прераждания в реалния свят. Това, например, е малко по-сирак Тайна декодер Ани пръстен, а вие всъщност може да прилага тези правила ротационни шифри - А става нещо, B става нещо - с две колела, един от външната страна, една от вътрешната така че ако завъртите колелото или пръстена, всъщност можете да се подредят на писма с различни букви, удар с таен код. И така, като Катерачът за днес, това, което мислех, че ще направите, е малко завръщане, че ако включите телевизора на 24 декември, можете да гледате nauseum филм за реклама 24 часа в ред. Но за днес, ще го отворят тук и ни даде само на две минути от педагогически съответната Christmas Story с малко човек на име Ралфи. [VIDEO PLAYBACK] -Да е известно на всички и разни, че Ralph Паркър се назначава за член на Little Orphan Annie тайна кръг и има право на всички почестите и ползи срещащи се към него. -Подписано, Little Orphan Annie. Приподписан, Pierre Andre с мастило. Honors и обезщетения на възраст от девет. [Вика ON RADIO] Хайде, нека да се заемем с това. Нямам нужда от всичко, което джаз за контрабандисти и пирати. -Слушайте утре вечер за сключване приключение на черно пиратски кораб. Сега е време за Secret Ани Съобщение за теб членове на Тайният кръг. Не забравяйте, че децата. Само членове на Secret Circle Ани могат да декодират тайното послание на Ани. Не забравяйте, че Ани е в зависимост от вас. Задайте вашите игли за B2. Това е посланието. 12, 11, 2 - -Аз съм в първия ми тайна среща. -25, 14, 11, 18, 16 - -Pierre е бил в силен глас тази вечер. Мога да кажа, че тази вечер съобщение Беше наистина важно. -3, 25. Това е съобщение от Ани себе си. Не забравяйте, че не казвайте на никого. -90 Секунди по-късно, аз съм в единствената стая в къщата, където едно момче на девет може да седне в личния живот и декодиране. Аха, B. отидох на следващия. E. Първата дума е "да". S. Той идва по-лесно сега. U. 25. Това е R. -Хайде, Ралфи. Трябва да тръгвам. -Ще идвам, мамо. Gee факир. -T. O. Не забравяйте да. Уверете се, че какво? Какво беше Little Orphan Ани се опитвам да кажа? Уверете се, че какво? -Ралфи, Ранди е да тръгваме. Ще ви моля да излезе? -Добре, мамо. Ще бъда навън. -I е все по-близо до момента. Напрежението беше ужасно. Какво беше това? Съдбата на планетата може виси на косъм. -Ралфи, Ранди трябва да тръгвам. -Ще идвам за плаче на глас. -Почти там. Пръстите ми отлетя. Умът ми беше капан. Всяка пора вибрира. Беше почти ясно. Да, да, да, да, да. -Не забравяйте да пиете Ovaltine. Ovaltine? A кофти търговски? Кучи син. [END възпроизвеждане на видео] SPEAKER 1: Това е CS50, и че ще бъде проблем Set Two. Ще се видим следващата седмица. SPEAKER 2: На следващото CS50, това се случи. SPEAKER 1: Така че една тема не сме погледна към този момент е че на функционалните указатели. Сега, функция показалеца е само адреса на обществена функция, но много прилича - син -