[За възпроизвеждане на музика] DAVID J. Malan: Добре. Това е CS50, и този е края на седмица 2. Така че днес, отиваме да продължи нашия поглед как ние представляваме неща под hood-- отдалечавайки от числа като цели числа и стойности с плаваща запетая и се фокусира върху струни и в крайна сметка по-интересни програми. Но ние също така ще разгледаме по- Няколко домейн-специфични problems-- първият от които ще бъде включващи криптография, изкуството на кодиране на информация, , в който можете виж по-горе тук е картина на Радио Orphan Ани тайна декодер пръстен от недалечното минало. Това всъщност е много примитивна форма и дете-приятелски форма на cryptopgraphy при което този пръстен има две disks-- един вътре и един отвън. И чрез завъртане на един от тези, можете да по същество се подредят писма като A чрез Z с други букви като B чрез А. С други думи, вие можете буквално да се върти на азбуката, като по този начин идва с картографиране от писма до писма, така че, ако сте Исках да изпрати тайно послание до някой като Ани, можете да напишете надолу вашето съобщение и след това завъртете буквите, при което, ако искаш да кажеш да се каже, "A", вие вместо да каже "Б" искате да кажете, "B" вас, вместо да каже "C" - или нещо по-умно от че-- и след това, в крайна сметка, толкова дълго, колкото Ани има този декодер пръстен, тя може да декодира съобщението. Сега, може би си спомняте, в действителност, че тази се използва в много известен филм, който играе реклама nauseum време Коледния сезон. Нека хвърлим един поглед тук. Ралфи PARKER: "Било то известно на всички в резюме че Ралф Паркър се назначава член на Little Orphan Annie Secret Circle и е право на всички почести и ползи, настъпили към нея. " Ралфи PARKER (разказва): Подписано Little Orphan Annie. Приподписан, Пиер Андре! В мастило. Honors и ползи, Вече на възраст от девет. [За възпроизвеждане на музика] [RADIO бърборене] Ралфи PARKER: Хайде. Нека се заемем с него. Нямам нужда от всичко, което джаз за контрабандисти и пирати. RADIO Говорител: Слушайте утре нощувка за заключителната приключението на Черно Pirate кораб. Сега е време за Ани Secret съобщение за вас членове на Secret Circle. Не забравяйте деца, само членовете на Secret Circle Ани може да декодира тайното съобщение на Ани. Не забравяйте, че Ани е в зависимост от вас. Задайте вашите игли за B-2. Ето message-- 12, 11, 2-- Ралфи PARKER (разказва): I съм в първата си тайна среща. RADIO Говорител: --25, 14, 11, 18, 16-- Ралфи PARKER (разказва): О, Pierre е в силен глас тази вечер. Мога да кажа, че тази вечер послание е наистина важно. RADIO Говорител: --3, 25. Това е съобщение от себе си Ани. Не забравяйте, не казвай на никого. [Задъхан] Ралфи PARKER (разказва): Деветдесет секунди по-късно, аз съм в единствената стая в къща, където едно момче на девет може да седне в личния живот и декодиране. Ah. "Б." [Подсмихва] Ралфи PARKER (разказва): Отидох към следващата. "E." Първата дума е "да". Да! То идва по-лесно сега. "Ф." [Подсмихва] Ранди PARKER: О, хайде, Ралфи. Трябва да тръгвам! Ралфи PARKER: Ще бъде право надолу, Ma. Gee факир. "Т." "О." "Бъдете сигурни, да. "какво" със сигурност ще бъде "? Какво беше Little Orphan Annie опитваш да кажеш? Какво е "със сигурност ще бъде"? Майка: Ралфи, Ранди е да тръгваме. Ще ви моля да излезе? Ралфи PARKER: Добре, мамо! Аз идвам! Ралфи PARKER (разказва): Бях все по-близо сега. Напрежението беше ужасно. Какво беше това? Съдбата на планетата може да виси на косъм. Майка: Ралфи, Ранди Трябва да тръгваме! Ралфи PARKER: Аз ще бъда навън, за да плаче на глас! Ралфи PARKER (Разказва): Почти там! Пръстите ми отлетяха! Умът ми беше стоманен капан. Всеки порите вибрира. Това беше почти ясно! Да! Да! Да! Да! Ралфи PARKER: "Бъдете сигурни, да се пие си Ovaltine. " Ovaltine? А калпав търговски? [За възпроизвеждане на музика] Ралфи PARKER: Кучи син. [Сайта] DAVID J. Malan: Така че след това е поглед към това, което криптографията може да бъде за това-- на пие от недалечното минало. Така бързо обявяване. Ако вие сте свободни това Петък в 13:15 и ще искали да се присъединят към нас за CS50 обяд, се отправят към този URL тук. Първи дошъл, първи обслужен както обикновено. Но с течение на времето, ще се уверите, че Най-всеки, който искате да участвате може да насрочи-мъдър. Така струни. Имаме Zamyla-- когото ти сега се срещна най-вероятно Проблем в Set 1-- чиято име е написано по този начин. И предполагам, че сте написали името си в компютърна програма, която е с помощта на нещо като getString. За да се извлече тези клавиши, как Да отидем за представляващ низ, една дума, един параграф, или множество писма като тези тук? Ние говорихме за последен път за числа и проблеми , които възникват с число преливник и стойности с плаваща запетая и проблеми, които възникне в рамките на прецизност. С низове, ние най-малко има малко по-голяма гъвкавост защото strings-- просто в реалния света-- може да бъде доста произволна дължина. Pretty кратко, доста дълго. Но дори и тогава, ние ще откриете, че компютрите могат понякога изчерпване на паметта и дори не съхранява достатъчно голям низ. Но за сега, нека да започнем да се визуализира низ като нещо в тези кутии тук. Така шест такива кутии, всяка от които представлява характер или "Чар". Така се припомни, че "Чар" - с-з-а-r-- е един от вградените типове данни в C. И това, което е хубаво е, че можете да използвате такива като градивен елемент, пъзел парче, ако щете, за да се образува по-голям вид данни, че ние ще продължим да се обадя на "низ." Сега, това, което е полезно за мисленето за неща като струни по този начин? Е, оказва се, че можем всъщност се наберат тази структура действително да получите достъп до отделните герои в доста ясен начин. Отивам да вървим напред и да се създаде файл, наречен "stringzero.c" но можете да го наречете каквото искате. И на интернет страницата на курса е вече този пример в предварително така че не е нужно да се напишете всичко. И аз отивам да вървим напред и първо направи INT главната невалидна. И в рамките на няколко дни, ще започне да се дразни, освен какво нищожен е тук, защо е INT до основното, и така нататък. Но за сега, нека продължим да копирате поставете това. Отивам да декларират низ наречен S. И аз отивам да се върне от GetString независимо от вида на потребител. Това ще бъде просто програма, никакви инструкции, Аз съм просто ще сляпо се очаква, че потребителят знае какво да направя, за да го прости. И сега аз отивам да имат за контур. А вътре на моята за линия съм Ще трябва INT I получава нула. И аз е, отново, просто конвенция, променлива индекс за отчитане, но мога да наричаме това каквото си искам. Отивам да правя аз е по-малко отколкото-- добре Име Zamyla е дълъг шест букви. Така че аз отивам на твърдия код, който има за сега. И тогава аз ++. И сега вътре от тях къдрава скоби Отивам да направя ФОРМАТ, и аз искам да отпечатате една характер на време. Така че аз ще използвам% в за може би за първи път. И след това искам да отпечатате всяко характер по своя собствена линия. Така че аз отивам да се сложи малко наклонена черта н там. Close цитат. И сега искам да направя нещо тук. Искам да разпечатате определена буква в низа, ите, тъй като аз съм итерации от нула на до шест. С други думи, искам да отпечатате i'th характер на S. Сега как мога да направя това? Ами много прилича на кутиите в това представителство тук, вид, апелирам към създаване на идеята на бокса писма, можете да направите това по подобен начин синтактично в C, като просто се посочва, Искам да отпечатате на S i'th характер. Използване на квадратни скоби на вашата клавиатура че на клавиатурата US са обикновено над вашият ключ замяна. Така че това не е съвсем прав Въпреки това, както може би сте забелязали. Но аз ще вид сляпо продължат напред тук. И аз отивам да правя направи низ 0. Но преди да направите това, нека да видим дали можем не може да предвиди някои често срещани грешки. Дали това ще се съберат? Не, аз съм липсва цял куп неща. Libraries чух. Така че, който заглавни файлове може да искам да добавя тук? Да. АУДИТОРИЯ: Трябва Standard I / O [недоловим] DAVID J. Malan: Отлично. Така че аз трябва Standard I / O. За какво цел искам стандарт I / O? За ФОРМАТ. Така включват stdio.h. И вие също предложи да включа библиотеката CS50 поради каква причина? За да имате струни. Така че ще видим какво ще Библиотека CS50 се прави да се създаде това понятие на низ. Но за сега, може просто да мисля от него като действителен тип данни. Така че изглежда, че се малко почистен. И сега аз отивам да вървим напред и наистина направи направи низ 0. Съставител. Така че това е добре. Така ./string0 нека увеличите така можем виж по-отблизо какво се случва. Enter. Z-A-М-Y-L-A влиза. И ние сме отпечатани на името Zamyla е. Така че това е доста добър. Така че сега, да вървим напред и да се кандидатира отново тази програма, и напишете пълното име на Дейвън. Изненада, изненада. Enter. Хм. Ние не са отпечатани Дейвън е пълно име правилно. Сега това трябва да е очевидно в ретроспекция, защото от това, което, някак глупаво решение дизайн? Да, трудно кодирани в шест вътре ми за контур. Сега го направих, че само защото Знаех име Zamyla е щеше да е шест букви. Но със сигурност това не е общ разтвор. Така се оказва, можем динамично разбера дължината на низ чрез извикване на функция, наречена strlen. Отново, нарочно накратко наречен просто да я направи по-удобно да пишете. Но това е синоним на получаване на дължината на низ. Отивам да се върна в моя терминал прозорец и изпълнете отново компилатора. Но това е да ми крещи. Имплицитно обявяване библиотека функция strlen с тип грозен INT const-- Аз съм изгубен. Напълно. Така че, по-специално като Очите започват да се изцъклят със съобщения за грешки като тази, фокус честно на първите няколко думи. Ние знаем, че проблемът е в линия 8, както е посочено тук. И това е в низ-0.c. Имплицитно обявяване библиотека функция strlen. Така че обикновено ще бъде модел на съобщения за грешки. Мълчаливо се обявява нещо. Така че в кратко, какво съм изглежда са направили по отношение на линия 8, тук. Какво би могло да бъде решение да бъде дори Ако никога не сте използвали strlen себе си? АУДИТОРИЯ: Част от различен библиотека? DAVID J. Malan: Част на различни библиотека. Така че това е обявено, така да се каже. Това се споменава в някои файл различна от stdio.h и CS50.h. Сега, когато се определя? За да бъда честен, вие или трябва просто да Знам това разстояние от върха на главата си, или в Гугъл това и разберете. Или знаете това, отворил съм в CS50 уреда програмата за терминал, който е просто голям, цял екран версия на това, което е в долната част на прозореца на Gedit. И се оказва, че има По същия начин кратка команда, наречена човек за употреба, където ако напишете в името на дадена функция и натиснете Enter, ще се върнем доста Arcane документация. Това е просто текст, който обикновено изглежда малко нещо като това. Това е малко поразителен на пръв поглед. Но честно казано, аз отивам да нека очите ми се изцъклят и да се съсредоточи само върху частта Интересувам се за момента. Кое е това. Което изглежда структурно като нещо, което аз съм запознат. Всъщност страница мъж, така да се каже, ще ви кажа, в това, което заглавния файл функция като strlen е дефинирана. Така че аз отивам да се върнем сега към Gedit. И аз отивам да вървим напред и добави тук #include и запазете файла. Отивам, за да изчистите екрана с Control L Ако сте били чудех. И аз отивам да пуснете отново марка string.0, компилира и този път. ./string.0 Zamyla. Това изглежда да работи Нека отида напред и да го повтаря отново, но с Дейвънпорт. Enter. И това също изглежда да се работи. Така че ние можем да направим малко по-добре от това, все пак, можем да започнем да спретнати неща до съвсем малко. И аз отивам да всъщност представим едно друго нещо сега. Отивам да вървим напред и запишете това в друг файл. И аз отивам да се обадя този файл string1.c просто да бъдат в съответствие с кода вие ще бъдете в състояние да се намери онлайн. И нека да се съсредоточи в по точно същия код. Оказва се, че съм било вид поемане за даденост факта, че моя лаптоп, и на свой ред, на CS50 уреда има много памет, много RAM, много байта на пространство , в която мога да се съхранява струни. Но реалността ако аз напечатани дълго достатъчно и достатъчно клавиши, Можех по вид теория в повече знаци от моя компютър физически има памет за. И това е проблематично. Много прилича на вътр може само брои толкова високо, на теория, можете да се тъпча само толкова много герои в RAM на вашия компютър или Random Access Memory. Така че аз бях по-добро предвиждане този проблем, дори въпреки че може да бъде рядко ъглов случай, така да се каже. Не се случва много често, може да се случи. И ако това се случи, а аз не предвиждане и програма за него, моята програма може да направи кой знае какво. Freeze, виси, рестартиране, независимо. Нещо може да се случи очакваното. Така че това, което аз ще направя сега, оттук нататък наистина, е преди някога съм сляпо използвате променлива като според който , е определен на връщаната стойност от някаква друга функция като getstring, Отивам да се уверите, че стойността му е валидна. Така че аз знам само от това да прочетете Документация CS50 за getstring, което в крайна сметка ще ви посоча, че getstring връща специален символ нарича NULL, N-U-L-L във всички капачки, ако нещо се обърка. Така че нормално, тя връща низ. Но в противен случай, ако той се връща N-U-L-аз-- ние в крайна сметка ще видим какво наистина means-- това означава само нещо лошо се е случило. Сега, това означава, че много прилича на Scratch, Мога да проверя състояние тук, в C, ако и не го прави равен NULL. Така че, ако не сте виждали това и преди, това просто означава, не са равни. Така че това е точно обратното на равни с равни, които си спомнят, е различен от един равни, което е задача. Така че, ако и не е равно NULL, само след това направете Искам да изпълни тези редове код. С други думи, преди да се потопите в сляпо и да започне итерации над S, и лечение като че ли е последователност на символи, аз отивам да се проверява първо, чакай малко, не е S определено равна на тази специална стойност, NULL? Защото ако е така, лоши неща могат да се случат. И за сега, да предположим, че лоши неща случват означава, че вашите програмни катастрофи, и не е задължително да се възстанови. Така че, честно казано, тя изглежда по-грозно. Това е нещо объркващо сега, за да погледне. Но това ще стане по- запознат преди дълго. Но аз отивам да предложи Сега един друг подобрение. Това е подобрение за коректност. Моята програма в момента е по-правилно, защото В редките случай, че няма достатъчно памет съществува, аз ще се справя, и аз просто ще направя нищо. Аз поне не ще се срине. Но нека да направим окончателна версия тук. И един файл, наречен string2.c. Отивам да поставите, че същия код само за миг, и аз отивам да се подчертае това линия, 11, тук, само за миг. Сега реалността е, че интелигентни компилатори като звъня може да се определи това за нас зад кулисите без нашето някога да разбере. Но нека помислим за това фундаментално като проблематично дизайн. Тази линия на код е, разбира се, казвайки инициализира някои променлива аз до 0. Това е доста ясен. И това, което отново е това изявление, тук, аз ++, правиш? Виждали сме го и преди, но ние наистина не говори за това. АУДИТОРИЯ: Увеличаването аз. DAVID J. Malan: Увеличаването аз. Така на всяка итерация чрез този цикъл, всеки цикъл, сте увеличаване аз по един. Така че това става по-голям и по-голям, и по-голям, докато цикълът завършва. Как да го прекрати? Ами там е тази средна състояние, което сме използвали преди. Вие сте виждали и в Запознай в комплекта P. Но каква е тази поговорка? Направете следното контура, така Докато аз е по-малко от това, което? АУДИТОРИЯ: Дължината на низа. DAVID J. Malan: The дължина на низа. Така че това се превежда доста чисто на английски в този смисъл. Сега проблемът е, че всеки път, когато превъртите през този цикъл на теория, Питам този въпрос. Е, че по-малко от дължината на низа S? Е, че по-малко от дължината на низа S? Сега е, че се променя на всяка итерация? Това е. Поради ++. Така че всяка итерация и става все по-голям. Но е и все по-големи, или по-малък, или промяна на всички? No. Така че по отношение на дизайна, една от осите , по който ние се опитваме да се оцени код в класа, това се чувства много глупаво. Както сте буквално, на всяка итерация на този цикъл задавам същия проклет въпрос отново, и отново, и отново, и буквално тя никога няма да се промени. Най-малко, ако аз не съм докосвате ите и Опитвате се да промените съдържанието на S. Така че мога да направя малко по-добре от това. И това, което аз ще направя, не е декларира само една променлива I, а втората променлива аз ще произволно, но условно, го наричат ​​п. Присвояване на п равно на низ дължина ите. И след това тук, аз отивам да направи умен малко оптимизация, така че да се каже, че в края на деня не е по-вярна или не по-малко правилна от преди. Но това е по-добър дизайн. В факта, че аз съм с помощта по-малко време, по-малко цикли на процесора, така че да се каже, да се отговаря на едни и същи въпрос, но само веднъж. Всякакви въпроси относно този общ принцип на подобряване, се каже, ефективност на дадена програма? Да? АУДИТОРИЯ: Защо правиш използвайте [недоловим]? DAVID J. Malan: Добър въпрос. Така че, защо ние поставяме ++ в края на и вместо на началото на I? В този случай, това е не функционално въздействие. И като цяло, че са склонни да Използвайте оператора Postfix така че това е малко по-ясно, като да, когато операцията се случва. За незапознатите, има и друг отчети, чрез които можете да направите ++ аз. Те са функционално еквивалент в този случай защото няма нищо друго, около това нарастване На. Но вие може да излезе с случаи и реда код в които това има значение. Така че, като цяло, не го правим дори да говорим за това. Защото честно казано, това прави код по-секси, и сортиране на измамник, и по-малко символи. Но реалността е, че е много по-трудно, Мисля, че дори и за мен да приключи съзнанието ми около него понякога, реда на операциите. Така че като настрана, ако сте Наистина не ми харесва това, въпреки че това е вид на секси търсите, можете също така да правя аз + = 1, което е по-грозна версия на една и съща идея за Postfix нарастване На. Казвам това и вие трябва да се гавриш с него, но ще дойде да види код като нещо красиво преди дълго. [СМЯХ] DAVID J. Malan: Така ли е? Да. Въпрос по средата. Публика: Трябва ли да се каже, вътр н? DAVID J. Malan: Можете да направите Не трябва да се каже, вътр п. Така че, тъй като ние вече казах INT, не е нужно да го казвам отново. Уловката е, че N трябва да е един и същ тип данни както. Така че това е просто едно удобство тук. Да. АУДИТОРИЯ: Може ли да отида при него, печат характер и скоба аз отново? DAVID J. Malan: Абсолютно. Така% C, припомнят от миналата време, е просто заместител. Това означава, сложи Чар тук. наклонена черта N, разбира се, просто средства, пуснати нов ред тук. Така че просто си тръгва, сега, тази част от новия синтаксис. И това е буквално казва, грайфер низ, наречен S и отида да му i'th характер, така да се каже. И аз продължавам да казвам i'th характер защото на всяка итерация на този цикъл това е като че ли ние сме печат , на първо място е конзола 0, като програмист може да се каже. След това е скоба 1, а след това и скоба 2, след това 3, след това 4. Но, разбира се, че е променлива, така че аз просто го изразя с аз. Key, обаче, е да осъзнаем, особено ако не сте били acclimating на този свят на програмиране, където всички ние изглежда да брои от нула, трябва започне броенето от нула сега. Заради това струни, първа характер, Z в Zamyla е за добро или за лошо ще живее в място номер нула. Добре, така че нека ми донесе ни върна тук, за да Zamyla и да видим какво всъщност се случва на под предния капак. Така че това понятие за тип леене. Може да се наложи действително Играе се с това вече, Може би за хакер издание на P зададете една. Но тип леене просто се отнася до способност в C и някои други езици за преобразуване на един тип данни за друг. Сега как бихме могли да видите това доста прямо? Така че това, изземване, е началото на английската азбука. И контекста, припомнят от като преди седмица е ASCII. The American Standard кодекс за обмен на информация. Което е просто един наистина дълъг път на изричане на картографиране от писма до номера, и от номера на писмата. Така че A чрез M тук, дот дот DOT, линии с, изземване, десетичното число 65 нагоре. И ние не говорим за това изрично, но сигурно има подобен номера за малки букви. И наистина, има. Светът реши няколко години Преди това малко по-, малки букви A, ще бъде 97. И малко б става да 98, и така нататък. И за всеки друг клавиш на клавиатурата, има ще бъде подобен модел на битовете. Или е същото, на десетични числа. Така че въпросът в ръка, след това, е как можем да всъщност видите това под капака? Така че аз ще отида да Gedit отново. И вместо тип това една от нулата, Отивам да вървим напред и просто отворете нещо от днешния код, наречен ASCII нула. И ASCII нула изглежда така. Така че нека да приключи нашите умове около това. Така че, на първо място, аз съм коментира кода, което е хубаво. Защото това е буквално ми казваш какво да очакваме, показва картографиране за главни букви. Сега съвсем не знам какво кажеш с това, така че нека да се направи извод. На английски език, може би донякъде Techie английски, какво прави ред 18 се появи трябва да се прави за нас? Просто ред 18. Какво е предизвикване? Какво е то ще започне тук? АУДИТОРИЯ: A контур. DAVID J. Malan: A контур. И колко пъти е че няма да превъртите? АУДИТОРИЯ: [вмъкване VOICES] шест пъти. DAVID J. Malan: Не е шест пъти. АУДИТОРИЯ: 26 пъти. DAVID J. Malan: 26 пъти. Да, съжалявам. 26 пъти. Защо? Е, това е малко странно, но Аз започнах да се брои от 65. Което е странно, но не греши. Това не е лошо само по речем. И аз правя, че само защото, за този пример, Аз съм един вид на предвиждане този капитал A е 65. Сега това не е най-елегантните начин да се направи това, за да ни е трудно код езотерични ценности, които никой не се очаква някога да си спомня. Но за сега, забележете, че аз съм Правейки това нагоре през 65 плюс 26. Защото очевидно аз дори не искам да се направи аритметиката в главата ми. Така че аз ще пусна компилатора го направя. Но след това на всеки цикъл, всяка итерация на цикъла, аз съм увеличаване аз. Така че сега това изглежда малко загадъчен. Но трябва да имаме основната сграда блокове, с които да разбират това. % В е просто контейнер за Чар. % И е контейнер за вътр. И се оказва, че с помощта на тази нов синтаксис, това скоби, така че да се каже, така че един тип данни вътре в скоби Мога да принуди компилатора за лечение не е цяло число, но като знак. По този начин ми показва характера еквивалентен на този номер. Сега тук, този код е почти идентична. Аз просто исках да направя супер изрично факта, че аз съм се започне в 97, който е с малки букви. На нагоре през още 26 букви. И аз съм doing-- отново, леене аз, така да се каже. Или тип леене аз, така да се каже. От вътр на Чар. Така че крайният резултат ще бъде, честно казано, информация ние вече знаем. Отивам да се направи ASCII-0 не dot-- Дот в. Забележете, че най-вероятно прави, че грешка, както аз просто направих случайно. Направете ASCII-0. Сега отивам да правя ./ascii-0. Ще увеличите, и за съжаление тя става, за да преминете на екрана. Но ние виждаме цялата диаграма, където на карти до 97, б карти до 98, и ако ние се придвижите нагоре допълнително А, разбира се, карти до 65. Така че това е само за да се каже, че това, което сме били проповядва, там е тази еквивалентност, се в действителност случай в действителност. Така бързо модификация на този. Нека отворим ASCII-1.в. И забележи това умно, нещо на, изясняване на този въпрос. Това е ASCII-1.в, и забележите това лудо нещо. И това наистина се стига до сърцето от това, което компютрите са прави. Въпреки, че ние, хората, ще Не разчитайте по отношение на letters-- Аз не започнем да мислим, Добре е след това б, и да използват тези да брои физически обекти. Вие със сигурност може да се каже, че искам да инициализира някаква променлива, наречена c-- но бих могъл да се обади тази anything-- така че в се инициализира с капитал A. Защото в края на деня, компютърът не го е грижа какво съхраняване, тя се интересува само как искате да представи тази информация. Как искате компютърът да тълкува, че модел на бита? Така че това не е нещо, което като цяло бих препоръчал прави. Това е наистина само един пример за предадат, че можеш абсолютно инициализира цяло число на Чар. Защото под капак на знак, разбира се, е просто номер 0-255. Така че със сигурност може да го постави вътре на вътр. И какво е това също показва, е, че ние може да конвертирате от един вид в друг, тук, в крайна сметка отпечатване на едно и също нещо. И в действителност, това ще определи online-- е искал да каже това, отново, тук. Позволете ми да изчистя онлайн, а ние ще виж в онлайн репетиция, ако е необходимо, това, което е била предназначена там. OK. Така че последният пример сега с участието на а-та и б-та и след това ще вземе нещата с една степен. Така е и с а-та и б-та и C е в капитализацията и на тяхната равностойност, нека да разгледаме този пример тук. Друг код например. Ще се отвори едно, че е вече са направени, така че ние не е нужно да го напишете всички вън от нулата. И забележи в очакване ние използваме многократно хедър файлове, сред които е нашият нов приятел, string.h. Сега това изглежда на пръв поглед, малко загадъчен. Но нека да видим дали не можем да разсъждаваме чрез това, което става тук. Първо получавам низ от потребителя, и сложих, че низ в променлива наречени S. Копирайте паста от преди. В ред 22, аз съм очевидно прави точно това, което Аз направих преди малко, аз съм итерации над героите в с. А новите трикове тук използват дължина низ, второстепенният оптимизацията съхраняване на дължината на низ в N, отколкото призвание strlen отново, и отново и отново. И просто проверка, че аз е по-малко от п. Сега тук, нещата стават малко интересен. Но това е просто заявление на същата тази нова идея. Какво по английски прави и скоба, която представлявам? АУДИТОРИЯ: Преброяване на всеки характер [недоловим]. DAVID J. Malan: Преброяване на всеки символ. И още по-сбито, и скоба, която представлявам, какво? Бихте ли казали. Не да ви постави на място тук. АУДИТОРИЯ: Ами-- DAVID J. Malan: Така че, ако думата е-- ако низ е Zamyla, които starts-- АУДИТОРИЯ: --you се справят с героите separately-- DAVID J. Malan: Добре. Точно така. Нотация Квадратната скоба ви позволява за достъп до всеки символ поотделно, така и скоба 0 ще бъде първият символ в низа. S скоба 1 ще бъде втората, и така нататък. Така че въпросът Питам, тук, в това състояние е? Дали i'th характер и по-голяма от или равна на малки букви? И какво означава това, ето, с двойни амперсанди? ПУБЛИКАТА (заедно): А. DAVID J. Malan: И. Това е просто еквивалент на това. И не е ключова дума в C, трябва да се употреба, дразнещо, амперсанд амперсанд. И това, обратно, се питам е S е i'th характер по-малки или равни в малки Z? И отново, тук е мястото, където разбиране на основните изпълнение на компютър има смисъл. Забележете, че, въпреки че имам точка точка точка на там, изглежда като чрез Z с малки букви са всички съседни стойности нагоре от 97 нагоре. И същото за главна започва в 65. Така на храна за вкъщи, а след това, е, че на английски, как бихте описали каква линия 24 се правиш? Да? АУДИТОРИЯ: На 24 тя проверява, за да видите дали всеки герой е с малки букви. DAVID J. Malan: Това е проверка дали всеки герой е малка буква. Така че дори и по-накратко, е i'th характер и с малки букви? Това е всичко, ние сме изразявайки тук логично, малко загадъчно, но в крайна сметка доста прямо. Дали на S i'th характер малки букви? Ако е така, и тук е мястото, където нещата получи малко ума огъване само за миг, ако е така, отидете напред и да отпечатате характер. Така че това е просто един контейнер, но това, което характер? Защо правя и аз скоба минус този израз тук? Е забележите модела тук. Реалните числа не са от значение толкова много. Но забележете, че 97 е колко далеч от 65? АУДИТОРИЯ: 32. DAVID J. Malan: 32. Колко далеч е 98 от 66? АУДИТОРИЯ: 32. DAVID J. Malan: Little C от големия C? 32. Така че там е 32 хмел от един писмо до друг. Така че, честно казано, може опрости до това. Но тогава аз съм малко трудно кодиране това ниско ниво на разбиране че никой читател е някога ще се разбере. Така че аз отивам да го обобщим, както аз знаете малки букви са по-големи. Знам, че главните букви са по-малки стойности, по ирония на съдбата. Но това е ефективно, еквивалентен на казвайки изважда 32 от S скоба аз. Така че в рамките на тези писма, ако буквата се случва да бъде, с малки букви А, и аз се изважда 32, какъв ефект има това, математически, на малки букви а? АУДИТОРИЯ: Capitalizes-- DAVID J. Malan: тя се капитализира. И наистина, това е защо нашата Програмата се нарича възползва нула. Тази програма или капитализира писмо, след проверка, ако тя е наистина е малка буква. В противен случай, в съответствие 30, това, което мога да направя, ако това не е малка буква, че съм гледа в определен итерация в течение. Само го разпечатате. Така че не се променят нещата Това дори не е с малки букви. Ограничаване на себе си, за да малко по-малко чрез Z. Сега това е доста тайнствена. Но в края на деня, този е как ние, Имало едно време, трябваше да въведе неща. Ако вместо това се отварят капитализират един, о, слава богу. Има една функция призовани да горница, която може да направим всичко що го направих на доста ниско ниво. Сега към горната е интересно защото тя е обявена във файл, и вие ще знаете само това чрез проверка на документацията, или им се казва, да речем, в клас, където тя съществува, във файл, наречен ctype.h. Така че това е още един нов наш приятел. И до горната прави точно това, което подсказва името му. Вие може да премине в, като аргумент, между тези скоби, някои характер. Отивам да премине в i'th характер на е с помощта на нашата фантазия нова нотация включващо квадратни скоби. И да предположите, това, което е завръщането стойност на горната очевидно ще да бъде? A главна буква. A главна буква. Така че, ако премине в малки букви A, надявам се, по дефиниция на на горния, това ще върне главна A. В противен случай, ако това не е малка буква в На първо място, аз просто го разпечатате. И наистина, обявлението за второ приятел тук. Не само за да горната съществува, но е по-ниска, което действително отговаря на този въпрос за мен. Сега всеки, който пише тези неща, 10s от преди години, знаеш ли какво? Изпълнено до горната и е понижи с помощта на код като този. Но отново, в съответствие с тази идея за абстрахиране далеч, вид, по-ниско ниво детайли за изпълнение. И стои на раменете на хора които са били преди нас, с помощта на функции като за горната и е по-ниска, което достатъчно чудесно са добре име да се каже това, което правят, е прекрасна парадигма за приемане. Сега се оказва, че ако чета страницата човек за, да речем, към горното, Да науча нещо друго. Така човек toUpper. Това е малко поразителен. Но забележете, тук е, че се споменава за заглавната част на файла, че трябва да използвате. Като настрана, защото това е подвеждащо, функцията използва цели числа, вместо символа от съображения за проверка за грешки. Но ние може би ще дойда върнем към това в бъдеще. Но забележете, тук, в горната част на новопокръстените буквата C в главни, ако е възможно. Така че това е доста ясен. А сега нека да бъдем малко по-конкретни. Нека погледнем от страна на мъж страница при завръщането стойност. Върнатата стойност е, че на преобразуваната писмото. Или С, ако превръщането не е възможно, където С е оригиналния входен. Което знам от тук, от Аргументът за да се горна част. Така че това, което е храна за вкъщи от това? Върнатата стойност е, че на преобразуваната писмото, или С, оригиналното писмо, ако превръщането не е възможно. Какво подобрение мога следователно направи за дизайн ми код е? Да? АУДИТОРИЯ: Можете да премахнете друго. DAVID J. Malan: Мога да премахне отчета за друго, а не само изявлението друго. АУДИТОРИЯ: Можете да премахнете [недоловим]. DAVID J. Malan: Мога да премахне цялата вилка в пътя, ако съвсем друго. Така че, наистина, нека се отвори окончателния вариант на този, капитализира-2 и забележите колко, ако ще, секси, кодът се сега получават, в които съм намалена от някои седем или така линии до само четири, функционалността, че възнамерявах като просто призовавам да горна, преминаване в S скоба аз, и печат навън, с контейнер% С, този конкретен характер. Сега може би, не е бъг, или най-малко на риск от грешка, в тази програма. Така че просто да се върне на по-ранна храна за вкъщи, какво трябва да се направи в най-вероятно също тази програма, за да го направи по-силен, така че няма начин тя може да катастрофа, дори и в редки случаи? АУДИТОРИЯ: Уверете се, че това не е NULL. DAVID J. Malan: Уверете се, че това не е NULL. Така че наистина, за да направи тази супер правилно, че трябва да направя нещо подобно, ако и да не е NULL, а след това давай напред и да изпълнява тези редове код, които Тогава мога да тире така, и след това пуснати в мой близък презрамки. Така че добре обвързване заедно от двете идеи. Да? АУДИТОРИЯ: Може ли да се използва а направи, докато линии, а? DAVID J. Malan: Възможно ли е Аз правя правя, докато цикъл? АУДИТОРИЯ: --you искате да се уверите че всъщност [недоловим]. DAVID J. Malan: Възможно ли е използвате правя, докато? Кратък отговор, не. Тъй като сте на път да въведе друг ъгъл случай. Ако низът е с нулева дължина. Ако например, аз просто удари Въведете, без някога да пишете Zamyla. Отивам да ви върне действително низ, както и ние в крайна сметка ще видите, че има нулеви символи. Тя все още е низ, това е просто супер кратко. Но ако използвате правя, докато, ти започваш да се сляпо Опитвам се да направя нещо с отношение на тази струна, и нищо няма да бъде там. АУДИТОРИЯ: Ами, ако си направил направи [недоловим], докато s-- DAVID J. Malan: О, виждам, дръжте получаване на поредица от потребителя. Така кратък отговор, можете можеше и пази досажда тях, за да ви дам един низ, който е достатъчно кратък, за да се поберат в паметта. Абсолютно. Аз просто избра да. Ако те не ми даде низ I искате, аз ще се откажа, аз се отказвам. Но абсолютно, за тази цел, бихте могли напълно да го направя. Така заглавни файлове на библиотеката, че сега сме запознати с са тези, тук. Standard I / O, CS50.h, string.h, ctype.h, и има наистина други. Някои от вас са открили по математика библиотека в math.h. Но позволете ми да ви запозная, сега, за да този ресурс, че персоналът CS50, Дейвин, и Роб, и Гейб специално са взети заедно. Това скоро ще се свържат на интернет страницата на курса. Тя се нарича CS50 справка. Което само за да ви дам един бърз вкус на играта, работи както следва. Нека отида да reference.cs50.net. Вие ще видите на лявата ръка надясно преобладаващото списък на функции, които идват с в. Но ако ми пука, за момента, за нещо като strlen, Мога да го напишете там. Той филтри надолу в списъка да точно това, което ме интересува. Отивам да щракнете върху него. И сега в ляво, ще видите това, което ние се надяваме, е по-прост, човешки лесен за обяснение на това как Тази функция работи. Връща дължината на низ. Ето един кратък обзор, ето как можете го използват по отношение на заглавната част на файла, така и по отношение на това, което функцията изглежда като от гледна точка на своите аргументи. И след това тук, се връща дължината на низ. Но за тези от вас, по-удобно, всъщност можете да щракнете по-удобен, и съдържанието на този страница, сега, ще се промени да бъдат стойностите по подразбиране на това, което можете да получите с помощта на страницата човек. С други думи, CS50 препратка е опростяване от синтетични страници от персонала, за студенти. Особено тези, които по-малко удобни и между тях, така че да можете не трябва да се опита да приключи ума си наоколо, честно казано, някои доста загадъчен синтаксис и документация по някое време. Така че имайте това предвид в идните дни. Така че тук, отново, е Zamyla. Нека сега да задам един въпрос, който е малко по-човешки достъпни. Благодарение на Чанг, който е бил отпечатване на повече слонове нонстоп за последните няколко дни. Ние имаме възможност да се даде най-малко един от тях далеч. Ако бихме могли да получите само един доброволец да дойде до изготвяне на екрана. Какво ще кажете за тук? Хайде нагоре. Как ти е името? ALEX: Alex. DAVID J. Malan: Alex. Добре. Alex, хайде нагоре. Ние сме на път да видите Вашия ръкописен текст на екрана тук. Добре, хубаво е да се запознаем. ALEX: Приятно ми да се запознаем. DAVID J. Malan: Добре. Така че, супер просто упражнение. Бар не е висока, за да получите слон днес. Вие играете ролята на getstring. И аз просто ще ви кажа, низа, който сте придобили. И предполагам, че вие, getstring, са били призовани. И човекът, като мен, има въвели в Zamyla, Z-A-M-Y-L-A. Просто върви напред и да пиша Zamyla относно: екрана, като че ли са го придобили и съхранява някъде в паметта. Оставянето на място за какво ще бъдат няколко други words-- това е ОК, продължавай. [СМЯХ] Така Zamyla, Отлично. Така че сега предполагам, че вие, getstring, са призовани отново. И затова, аз ви предоставят, при клавиатура, с друго име, Белинда. Добре. И сега следващия път getstring е нарича, аз напишете нещо подобно Габе, G-А-В-Е. Ти си наистина като до сърцето памет с произволен достъп. Което е рисунка всичко напълно произволно. OK. [СМЯХ] ALEX: За съжаление моят почерк е лошо. DAVID J. Malan: Не, това е ОК. А какво ще кажеш за Роб, R-O-B. OK. Добре. Така че аз не очаквате да вид определят нещата по този начин. Но ние можем да направим тази работа. И така, как да отида за полагане тези символи в паметта? С други думи, ако ние мислим за този правоъгълен черен екран като представляващ RAM или памет на компютъра. И припомни, че RAM е просто цял куп от байтове, и байтове са цял куп от бита. И бита са по някакъв начин изпълнени, като цяло с някаква форма на електроенергия в хардуер. Така че това е нещо като наслояване сме говорили за и сега може да приемаме за даденост. Как да отида за да реши къде да напишете Роб срещу Гейб срещу Belinda срещу Zamyla? ALEX: Току-що го направих в реда, в който ми каза. DAVID J. Malan: И това е вярно. Но това, което урежда къде сте скрили Име на Белинда и името на Гейб? ALEX: Нищо? DAVID J. Malan: [смее се] Така че това работи, това е добре. Така че компютрите са малки по-подреден от това. И така, когато ние implement-- остане там само за moment-- когато ние всъщност приложи нещо подобно getstring в компютър, Zamyla биха могли да бъдат изложени почти както направи на екрана, там. И това, което е от ключово значение да се отбележи, тук, това, което Алекс е направил, е, че има вид на демаркация Във всяка от тези думи, нали? Не съм писал Z-A-М-Y-L-A-B-E-L-I-N-D-A-G-A-В- с други думи, там е някакъв вид демаркационна което изглежда да бъде, вид, случайни разстояние между тези различни думи. Но това е добре, защото ние, хората вече могат да визуализира, че те са четири различни струни. Това не е просто една последователност на много герои. Така че един компютър, а след това, междувременно, може да отнеме низ като Zamyla, сложи всяка от тези писма вътрешността на байт на памет. Но тази цифра е много по-голям, разбира се, от шест знака. Има цял куп RAM. И така нататък, това решетка на кутиите ще да представлява какво Alex само направих тук, на екрана. И сега, Алекс, ние можем да Ви предложим син или оранжев слон от Chang. ALEX: Ще взема един син слон. DAVID J. Malan: A сини слонове. Така че един голям кръг от аплодисменти, ако можехме, за Alex тук. [APPLAUSE] ALEX: Благодаря ви. DAVID J. Malan: Благодаря ви. Така на храна за вкъщи е, че, въпреки че модел вид променя с течение на времето, тук на борда е имало тази разграничаване между различните струни че Алекс има за нас. Сега компютрите, честно казано, може да направи същото нещо. Те биха могли вид плясване струни навсякъде в RAM. До тук, тук, тук, тук долу. Те биха могли да направят точно това. Но, разбира се, че е вероятно не е най-доброто планиране. Така ли е? Ако аз продължих да питам Алекс получите имена, най-вероятно той ще сложи малко по-надолу тук, може би до тук, тук, тук, в крайна сметка тук. Но с малко повече планиране, разбира се, бихме могли да определят нещата по-чисто. И наистина, това е, което един компютър прави. Но уловката е, че Ако следващата низ получавам след Zamyla е нещо, като Белинда, предложи, където можем да запишем буква б във връзка с тази мрежа? Къде ще отидеш? За правото на А, под Z, което е под А? Какви ще бъдат първите ви инстинкти? АУДИТОРИЯ: Под Z. DAVID J. Malan: Значи под Z. И това е доста просто, нали? Това е вид на чист, това е това, което правим на клавиатурата, когато ударихме Enter, или имейл, когато правите списък с водещи символи на нещата. Но реалността е, че компютрите се опитват да бъдат по-ефективни, и се тъпча със сигурност най-много данни в RAM, колкото е възможно, така че да не губите никакви байта. Така че не губете всеки екран за недвижими имоти. И Проблемът обаче е, че ако ние буквално сложи писмото б след, как ще да знам къде име Zamyla свършва и започва името на Белинда? Така че, хората, просто предлага, добре, хит на клавиша, по същество. Сложете го по-долу. Или дори като Алекс е направил, просто започнете да пишете следващата името под предишния, и по-долу, че един, и след това по-долу, че един. Това е визуална реплика. Компютри имат друга визуална реплика, но това е малко по-сбито. Това е този фънки характер. Обратно наклонена черта 0, което е може би напомня на наклонена черта N, и т.н., сега. Специални последователности избяга. Обратно наклонена черта 0 е начинът на представляващи осем нула бита в един ред. 0000 0000. Начинът, по който изразяват, че не е хит на числото нула на клавиатурата си, защото в действителност, че е ASCII знак. Той прилича на брой, но всъщност е знак номер който представлява циркулярното глиф, кръговото шрифт. Междувременно, обратно наклонена черта нула означава, буквално постави осем нула байта тук за мен. Така че това е до известна степен произволно. Можехме да се използва всеки модел битове, но света реши няколко години отдавна, че да представляват края на низ в памет, просто сложи един куп нули. Защото ние може да открие това. Сега това означава, че не буквата на азбука може да бъде представена с нули. Но това е ОК, ние вече сме виждали че ние използваме 65 нагоре в 97 нагоре. Ние не се навсякъде В близост до всички нули. Така че Белинда в паметта на компютъра всъщност ще отидете тук. Аз съм го изготвя в жълто просто да привлече вниманието ни към него. И забележете, прекалено, това е напълно произволно. Аз съм го съставя като решетка. Подобно, RAM е просто някакъв физически обект. То не е задължително редове и колони, само по себе си. Тя трябва да бъде само един куп от байтове реализира в хардуера по някакъв начин. Но ако след Belinda I написали в името на Гейб, той няма да свърши тук, в паметта, и ако аз напечатани в името Дейвън е, например, той няма да свърши тук. И аз може да продължи да напиши още повече имена. За съжаление, ако се опитам да напиши супер дълго име, Аз в крайна сметка може да се изчерпи с памет. В този случай, getstring е ще се върне NULL, както казахме. Но за щастие, поне в този визуален тук, ние не се получи доста толкова далеч. Сега това, което е хубаво е, че това обща представа за лечение на неща като в кутии е представител на функция на C и много езици, известен като масив. Масивът е друг тип на данни. Това е структура от данни, ако щете. Структура, в смисъл на това наистина, вид, приличащ на кутия, най-малко в окото на ума. Масивът е съседна последователност от еднакви типове данни, обратно към гръб до гръб до гръб. Така че един низ, в други думи, е масив от символи. Един масив от знаци. Но се оказва, че може да има масиви от гроздовете на нещата. В действителност, ние можем да положи още числа в масив. Така че формата, в която ние ще започнем обявява тези данни структура, известна като масив също ще използвате квадратни скоби. Но тези квадратни скоби ще има различно значение в този контекст. И нека да го видите, както следва. Да предположим, че аз отворих създаване на нов файл тук. И да запазя това като ages.c. И аз ще спаси това в моята папка тук. И сега аз отивам да вървим напред и започнете да пишете нещо като включва CS50.h, включва stdio.h, INT главната невалидна. И тогава вътре от тук, искам първо да има вътр нарича възраст. И аз отивам да използват това, за да получите INT от потребителя за неговата или нейната възраст. Но тази програма е предназначена да бъде използвана от множество хора, за каквото и контекст. Имам опашка от хора. Всички те трябва да въведете в тяхната възраст за може би някои от тях, аз не знам, конкуренция, или събитие че те са пристигнали за. Така че следващия човек, аз нужда от още една променлива. Защото, ако аз просто правя възраст получава getInt, че е ще се смажат, или презаписване възрастта на предишния човек. Така че това не е добре. Така че първият ми инстинкт може да бъде, о, добре, ако искате да получите множество хора е ages-- нека наречем този age1, INT age2 получава INT, INT age3 получава getInt. И сега, аз отивам да се използва някои pseudocode код тук. Направи нещо с тези числа. Ще оставим за друг ден това, което правим там, защото ние само грижа за момента за age1, age2, age3. За съжаление, след като аз събиране на тази програма и го постави пред реалните потребители, каква е фундаментално лошия дизайн решение Изглежда съм направил? Да? АУДИТОРИЯ: [недоловим] DAVID J. Malan: Да, Аз дори не са се опитали да разбера как много векове мога всъщност е грижа за? Ако имам по-малко от трима души тук, и следователно по-малко от три възрастови групи, Аз съм все още сляпо очаква три. Боже опази четирима души се показват. Моята програма просто не ще дори да ги подкрепят. И така, това, дълга история Накратко, не е добър навик. Така ли е? Бях по същество копиране и поставяне код и просто променяте имената на променливите. И, Боже мой, ако сте имали, а не три възрасти, но 10 или 100, или дори 6500 студенти, например. Това няма да бъде особено елегантен код, или устойчиви. Вие ще трябва да пренапише програмата всеки път номера на хора промени. Така че, за щастие, в нашата действителното ages.c файл за днес, имаме по-умно решение. Първо, аз отивам да се заеме конструира сме използвали няколко пъти, това правя, докато линия, за да се получи броят на хората в стаята. Аз съм просто ще досаждам на потребителя, отново и отново, докато той или тя ми дава стойност на N, че е положително цяло число. Бих могъл да използвам, последно Време е да получите положителен вътр. Но ние не трябва, че за истински, така че аз отидох напред и отново се реализира тази идея. Сега тук, това е новият трик. В ред 27, като коментарите в ред 26 предлага, декларира масив, в който за съхраняване на възраст на всеки. Така че, ако искате да получите, не едно ПНА, не две цели числа, а цял куп от цели числа. Конкретно N цели числа, са п мощ да бъде три, може да бъде 100, може да бъде 1000. Синтаксисът, съвсем просто, е да да речем, какви данни тип искаш? Какво искаш да се обадя това парче на паметта? Какво искаш да се обадя на решетката който изглежда така картинно? И в скоби тук, вие казвате колко големи искате масива да бъде. И така, по-рано, когато казах на синтаксис е малко по-различно тук, ние все още използвате квадратни скоби, но когато съм обявява масив, броя вътрешността на квадратни скоби средства колко голям искаш масива да бъде. За разлика от това, когато бяхме с помощта на S скоба аз преди малко, е, низ, наистина е масив от символи, но когато не си за обявяване на променлива, като с тази дума тук, ти просто си специфичен индекс, определен елемент от този масив. След като знаем, че останалите за това е проста. Ако новата съм първи ще разпечатате каква е възрастта на човек номер аз. Къде ли само да кажа човек номер едно, човек номер две, човек номер три. И аз съм просто прави аритметика, така че като нормални хора, ние брои от едно за тази програма, а не от нула. След това аз наричам getint, но аз се съхранява отговорът в възрасти приближение аз. Коя е най-i'th възраст в масива. Така че за последен път бяхме лечение тези кутии като символа за име Zamyla-те години, и други. Сега, тези кутии представляват 32 бита, или четири байта в който ние може да съхранява едно цяло число, едно цяло число, с вътр. Всичко това, отново, са един и същ тип данни. Сега правя нещо глупаво, като времето минава, просто да оправдае написването на тази програма. И след това тук, аз отново обхождане над масива казва една година от сега, човек номер едно воля бъде нещо години. И за да разбера, че math-- Искам да кажа, това Не е много сложно arithmetic-- Просто добавете един за възрастта им. Само за да се демонстрира, отново, този. Точно както мога индекс в низ, S, значи и аз мога индекс в един масив от векове, като че ли. Е, къде е това щеше да бъде като нас? Така че ние ще видим, в крайна сметка, по- няколко неща в идните дни. One, през цялото това време, когато пишете собствени програми, като Марио, алчен, кредит. Вие сте били пишете името на програмата и натиснете Enter. И след това да получава данни на потребителя. С getString, getInt, getLongLong, или други подобни. Но се оказва, че C подпори нещо, наречено командния ред аргументи, които няма да ни позволи всъщност става дума в думи, които въвеждате, в мига ред, след името на вашата програма. Така че в идните дни, вие може да напишете нещо подобно на Цезар, или ./caesar номер 13, след това. Ще видим как това работи. Защото наистина, в проблем зададете два, ние сме Ще ви запозная за нещо малко напомня на Ралфи е оспори по-рано на картографията. Изкуството на кодиране на информация. Това в действителност е много напомня на това, което е направил Ралфи. Това е пример за криптиране алгоритъм, наречен ROT13, R-O-T 13. Което означава просто завъртете буквите в азбуката 13 места. И ако направите това, вие ще видите сега това, което е, може би, една позната фраза. Но начина, по който ние ще използваме това в крайна сметка е по-общо. В P зададете два, в стандартното издание, ще изпълни няколко шифри, една, наречена Цезар, една, наречена Vigenere. Двете от тях са на въртене шифри, в които по някакъв начин ви превърне една буква в различна буква. И Цезар е супер проста. Можете да добавите една, можете да добавите 13, или някакъв брой до 26. Vigenere прави, че на а на писмо основа. Така Vigenere, както ще видите в спецификацията, е по-сигурен. Но в края на деня какво ще се реализира и P зададете два, е, че ключ, който можете да използвате и двете за криптиране и декриптиране. Позовавайки се на процеса на превръщане обикновен текст, някои оригиналното съобщение, в шифър текст, който е нещо кодирано. И след това го декодиране отново. В хакерската издание, Междувременно, вие ще бъдете натоварена с нещо подобно по дух, където ние ще ви дадем файл, от типичен Linux, или Mac или Unix компютър, наречен Etsy парола, която съдържа един китка на потребителски имена и пароли. И тези пароли имат всички са криптирани или хеширан, така да се каже, по-правилно както ще видите в спецификациите. И хакерската издание ще оспори вие с приемането на един вход, подобен на този, и напукване на паролата. Това е, фигуриращ какво парола човешкото всъщност беше. Защото, наистина, пароли са по принцип не се съхранява в ясен, и като цяло пароли трябва да бъде трудно да се отгатне. Това не е често срещан случай. И аз това си помислих, че ще направите, е да сключва с няколко минути поглед в особено лош избор на пароли от филм може да се припомни, наивно. И ако не, трябва да се наеме. [VIDEO PLAYBACK] -Helmet, Можете Fiend, какво става? Какво правиш с дъщеря ми? -Permit Ми да се въведе брилянтен млад пластичен хирург, Доктор Филип Schlotkin. Най-големият нос работа човек в цялата вселена и Бевърли Хилс. Твоята Височество. -Nose Работа? Аз не разбирам. Тя вече имаше операция на носа. Той беше нейният сладък 16 настоящето. Не, не е това което си мислите. Това е много, много по-зле. Ако не ми даде комбинация на въздушния щит, лекар Schlotkin ще даде своя дъщеря подкрепи стария си нос. - [Издихания] Nooooooooooooo. Откъде взехте това? Добре. Ще кажа, ще кажа. Не, татко, не. Вие не трябва. Ти нали скъпа. Ще ми липсва новия си нос. Но аз няма да им кажа комбинация, без значение какво. -Много Добре. Doctor Schlotkin, направете си най-лошото. -Моята Удоволствие. Не! Чакай, чакай. Аз ще кажа. Аз ще кажа. Знаех, че ще проработи. Добре, дай ми го. -Таблицата Комбинация е едно. -Една. -Една. -Две. -Две. -Две. -Три. -Три. -Три. -Четири. -Четири. -Четири. -Пет. -Пет. -Пет. Значи комбинацията е един, две, три, четири, пет. Това е най-тъпото комбинацията Аз някога чуете в моя живот. Това е едно от нещата, за идиот би имал върху багажа му. Благодаря ви, Ваше Височество. [REMOTE CLICKS] Какво си направил? -I Изключен стената. Не, не сте, можете Изключен целия филм. -I Сигурно натиснал грешен бутон. Ами, сложи го обратно! Поставете филма отново! Да, сър! Да, сър. -Нека Вървим, Арнолд. Хайде, Гретхен. Разбира се, че знам аз ще Трябва да ви таксуваме за това. Ами? Получи ли се? Къде е царят? -Това Работи, сър, ние има комбинацията. Чудесно. Сега можем да вземем всеки последен дъх свеж въздух от планета Друидия. Каква е комбинацията? Едно, две, три, четири, пет. Едно, две, три, четири, пет? Да. -Това Е невероятно. Имам същите комбинация на багажа ми. Подгответе SpaceBall 1 за незабавното му напускане. Да, сър. -А Смените комбинация на багажа ми. [DOOR ЗАКРИВАНЕ SOUND] [Clink НА ВРАТИ удря КАСКА] -Ahh. [END възпроизвеждане на видео] DAVID J. Malan: Това е за CS50, ние ще се видим следващата седмица. Разказвач: И сега, Deep Мисли, по Дейвън Farnham. Дейвън Farnham: кодиране в C е така че много по-трудно, отколкото Scratch. ФОРМАТ, Scratch е лъжа. [СМЯХ SOUNDBITE]