>> [Музички]
Дејвид Џ MALAN: Во ред.
Ова е CS50, и тоа е крајот на недела 2.
Така, денес, ние ќе да продолжиме со нашите изглед
како ние ги претставуваме работите под hood-- оддалечуваат
од броеви како броеви и подвижна запирка вредности
и се фокусира на жици и во крајна линија повеќе интересни програми.
Но, ние, исто така, ќе ги разгледаме на неколку домен-специфични problems--
првиот на кој ќе бидат вклучени криптографијата,
уметноста на scrambling информации, во кој го гледате погоре тука
е слика на Радио сирачиња на Annie тајна декодер прстен од недалечното минато.
>> Ова е всушност многу примитивна форма и дете-пријателски форма на cryptopgraphy
при што овој прстен има две disks-- една во и една надвор.
И со ротирање еден од оние, можете да во суштина се редат букви како А
преку Z со други писма како Б преку А. Со други зборови,
вие буквално може да се ротира писмо, тоа доаѓа со мапирање
писма до писма, така што, ако сака да испрати тајна порака
да некој како Ени, можете да напишете одредување на вашата порака, а потоа ротира
писмата, при што, ако мислиш да се каже "А", ти наместо да се каже "Б"
што значи да се каже "Б" ти наместо да се каже "Ц" -
или нешто малку попаметниот од that-- а потоа, на крајот,
толку долго како Ени има овој декодер прстен, таа може да се декодира пораката.
Сега, може да се потсетиме, всушност, дека тоа се користи во многу познат филм кој
игра реклама nauseum време на сезоната Божиќ.
Ајде да ги разгледаме тука.
RALPHIE Паркер: "Било да е тоа познат на сите во резиме
дека Ралф Паркер ова се назначени член на малата сирачиња Ани Тајната
Круг и има право на сите почести и придобивките се случуваат со нив. "
>> RALPHIE Паркер (раскажување): Потпишан Малку сирачиња Ани.
Потпишани, Пјер Андре!
Со мастило.
Почести и бенефиции, Веќе на возраст од девет години.
>> [Музички]
>> [РАДИО CHATTER]
RALPHIE Паркер: Ајде.
Ајде да се е со неа.
Не ми треба сето тоа џез за шверцери и пирати.
РАДИО најавувач: Слушајте утре ноќ за склучување авантура
на Црното пиратски брод.
Сега, тоа е време за на Annie Тајна порака за вас членови
на Тајната круг.
Се сеќавам деца, само членови на Ени Тајната круг
може да го декодира тајна порака на Annie.
>> Запомнете, Ени е во зависност од вас.
Поставите вашиот иглички Б-2.
Тука е message-- 12, 11, 2--
RALPHIE Паркер (раскажување): јас сум во мојот прв таен состанок.
РАДИО најавувач: --25, 14, 11, 18, 16--
RALPHIE Паркер (раскажување): Ох, Пјер беше во голема глас вечерва.
Можам да кажам дека вечерва порака е навистина важно.
>> РАДИО најавувач: --3, 25.
Тоа е порака од Annie себе.
Запомнете, не кажувај на никого.
>> [Задишан]
RALPHIE Паркер (раскажување): Деведесет секунди подоцна, јас сум
во само простор во куќата во која едно момче од девет
може да седат во приватноста и декодирање.
Ах.
"Б"
>> [Chuckles]
>> RALPHIE Паркер (раскажување): Отидов на следната.
"E."
Првиот збор е "да".
Да!
Тоа е сега доаѓаат полесно.
"U."
>> [Chuckles]
>> Ренди Паркер: Aw, ајде, Ralphie.
Морам да одам!
>> RALPHIE Паркер: Ќе бидам долу, Ма.
Навистина зделка.
"Т" "О." "Бидете сигурни да "." Бидете сигурни да се "што?
Што беше малку сирачиња Ани се обидувам да кажам? "Бидете сигурни дека за да" што?
МАЈКАТА: Ralphie, Ренди има да се оди.
Ќе ве молам да излезе?
>> RALPHIE Паркер: Добро, мамо!
Ќе се надвор!
RALPHIE Паркер (раскажување): Јас бев добивање поблиску сега.
Тензијата беше страшно.
Што беше тоа?
Судбината на планетата може да висат во рамнотежа.
>> МАЈКАТА: Ralphie, Ренди мора да оди!
>> RALPHIE Паркер: Ќе се надвор, за плачење гласно!
RALPHIE Паркер (Раскажување): Речиси таму!
Моите прсти полета!
Мојот ум беше челик стапица.
Секоја пора вибрираше.
Тоа беше речиси јасно!
Да!
>> RALPHIE Паркер: "Бидете сигурни да пијат вашиот Ovaltine. "
Ovaltine?
Кофти комерцијални?
>> [Музички]
>> RALPHIE Паркер: Кучкин син.
>> [Се смее]
>> Дејвид Џ MALAN: Значи дека тогаш е увид во она што криптографија
може да биде за this-- на пијат од недалечното минато.
Така брзо најава.
Ако сте слободни ова Петок во 13:15 и ќе
сакале да ни се придружат за CS50 ручек, се упатат кон овој URL тука.
Прв дојден, прв служат како и обично.
Но, со текот на времето, ќе бидете сигурни дека повеќето секој кој би сакал да учествува
може да закаже-мудрец.
>> Па жици.
Имаме Zamyla-- кого сте сега се сретна најверојатно
во Проблем Постави 1-- чија име е напишано на тој начин.
И претпоставувам сте ја внеле нејзиното име во компјутерска програма која е
користење на нешто како getString.
Со цел да се добие оние тастатурата, како
да одиме за застапување на стринг, еден збор, став,
или повеќе букви како овие овде?
>> Зборувавме минатиот пат за броеви и проблеми
кои се јавуваат со целобројни претекување и подвижна запирка вредности
и проблемите со кои се се јавуваат во рамките прецизност.
Со жици, барем имаат малку повеќе флексибилност
бидејќи strings-- само во реалниот world--
може да биде прилично произволна должина.
Прилично кратко, прилично долго.
Но, дури и тогаш, ние ќе најдете дека компјутерите можат понекогаш
снема меморија и не дури и складира доволно голема низа.
>> Но, за сега, да почнеме да се визуелизира низа како нешто во овие кутии
овде.
Па шест такви кутии, од кои секоја претставува карактер или "знак".
Така се потсетиме дека "знак" - в-ж-а-r-- е еден од вграден типови на податоци во C.
И она што е убаво е тоа што можете да го користите тој вид на како градење на блок,
загатка парче, ако сакате, да се формира поголем видот на податоците кои ние ќе продолжиме
да се јавите на "стринг."
>> Сега, она што е корисно за размислување за нешта како жици на овој начин?
Па, излегува дека можеме всушност поткрепа на оваа структура
за да всушност пристап до индивидуални карактери во прилично недвосмислен начин.
Одам да се оди напред и да се создаде датотека со име "stringzero.c"
но може да го наречеме она што го сакате.
И на веб-страницата на курсот е веќе овој пример однапред,
така да не треба да се тип се надвор.
>> И јас одам да се оди напред и прв направи int главната неважечки.
И во рок од неколку дена, ќе започне да ги разграничат
што празнината е тука, зошто тоа е int до главната, и така натаму.
Но, за сега, да се продолжи да копирате ставете тоа.
>> Одам да се прогласи низа наречен ОК.
И јас одам да се врати од GetString без оглед на корисник видови во.
Ова се случува да биде едноставна програма, не и упатства,
Јас сум само ќе слепо Очекуваме дека корисникот знае
што да прават да биде едноставно.
>> И сега ќе одам да имаат за телефонска линија.
И во внатрешноста на мојата за јамка јас сум ќе мора int i добива нула.
И јас е, пак, само конвенција, индекс променлива за пребројување на гласовите,
но јас би го нарекле што сакам.
Јас ќе одам да направите i е помал than-- и Име Zamyla е шест букви.
Па јас ќе одам да тешко кодот кој има за сега.
>> И тогаш јас ++.
А сега во внатрешноста на овие кадрава загради јас ќе одам да направите printf,
и сакам да се печати една карактер во исто време.
Значи, ќе одам да го користите% c за можеби прв пат.
А потоа сакам да се печати секоја карактер на својата сопствена линија.
Значи, ќе одам да се стави малку обратна коса црта n таму.
Затвори цитат.
>> И сега сакам да направам нешто тука.
Сакам да се печати од одредена буква во низа,
ОК, како што јас сум процесирањето од нула до шест.
Со други зборови, сакам да печати i'th карактер е.
Сега како можам да го направите ова?
>> И многу сличен на кутии во оваа претстава тука,
вид, апелирам до идејата за бокс писма, можете да го направите тоа на сличен начин
синтаксички во C со едноставно впишување, Сакам да испечатите на s i'th карактер.
Користење на квадратни загради на тастатурата на вашиот компјутер
дека на САД тастатурата се обично над вашето враќање клуч.
>> Значи ова не е сосема во право Сепак, како што може да се забележи.
Но јас ќе одам да се вид на слепо се движам тука.
И јас одам да го прават низа 0.
Но пред да го направите ова, ајде да видиме дали можеме не може да се предвиди некои вообичаени грешки.
Е ова се случува да ги собере?
Не, јас сум недостасува целиот куп на работи.
Библиотеки слушнав.
>> Така што насловот датотеки може Сакам да додадам тука?
Да.
>> ПУБЛИКАТА: Вие треба стандард I / O [Беззвучен]
>> Дејвид Џ MALAN: Одлично.
Па ми треба стандард I / O. За она што Целта сакам стандард на I / O?
За printf.
Така вклучуваат stdio.h.
И ти исто така предложи дека јас вклучуваат на CS50 библиотека за што причина?
Да имаат жици.
Па ќе видиме што ќе Библиотека CS50 е тоа
да се создаде овој поим на стрингот.
Но, за сега, само да мислам на тоа како вистински тип на податок.
>> Така што се чини дека е малку исчистени.
И сега ќе одам да се оди напред и навистина прават низа 0.
Состави.
Па тоа е добро.
Па ./string0 дозволете ми да зумирате за да можеме да види повнимателно што се случува.
Enter.
Z-A-M-Y-L-A влезе.
И ние отпечатени за името Zamyla е.
>> Па тоа е прилично добар.
Па сега ајде да одиме напред и да ја извршите оваа програма еднаш,
и тип на полно име Daven е.
Изненадување, изненадување.
Enter.
Хм.
Ние не се печатени Daven на целосно име правилно.
Сега ова треба да биде очигледно во ретроспектива поради тоа што,
вид, глупав дизајн одлука?
>> Да, јас хард кодирани на шест внатрешноста на мојата за телефонска линија.
Сега го сторив тоа само затоа што Знаев име Zamyla на
требаше да биде шест букви.
Но, тоа не е општ решение.
Значи излегува можеме динамички дознаам должината на стрингот
со повикување на функција наречена strlen.
>> Повторно, намерно посочно име само
да се направи повеќе лесен за тип.
Но тоа е синоним за добивање на должината на стрингот.
Одам да се вратам во мојот терминал прозорецот и прегласување на компајлерот.
Но тоа е вика на мене.
Имплицитно наведува библиотека функција strlen со тип непотпишана int const--
Јас сум изгубена.
Целосно.
>> Значи, особено како очите почнуваат да се глазура над
со пораки за грешки, како таков, фокус искрено на првите неколку зборови.
Знаеме дека проблемот е во алинеја 8, како што е наведено тука.
И тоа е во стринг-0.c.
Имплицитно прогласување библиотека функција strlen.
Така што е генерално се случува да се да биде модел на пораките за грешки.
Имплицитно наведува нешто.
>> Значи во кратки, што сум ти се чинеше имаат направено во однос на алинеја 8, тука.
Што би можело да биде решение да биде дури и ако никогаш не сум се користи strlen себе?
>> ПУБЛИКАТА: Дел од различни библиотека?
Дејвид Џ MALAN: Дел на различни библиотека.
Па тоа е прогласена, така да се каже.
Таа се споменува во некои датотеки освен stdio.h и CS50.h.
Сега каде е дефинирана?
Да бидам искрен, можете или треба да се само знам ова од врвот на главата,
или на Google ова и да дознаете.
Или знаат ова, јас сум отвори во CS50 Уред на терминал програма, која
е само голем, полн екран верзија на она што е во дното на прозорецот gedit е.
>> И излегува дека има Слично на содржаен команда, наречен
човекот за рачно, каде што ако го напишете во името на функцијата и притиснете Enter,
ќе се вратам доста таинствениот документација.
Тоа е само текст кој генерално изгледа малку нешто како ова.
Тоа е малку преголема на прв поглед.
Но искрено јас ќе одам да нека моите очи глазура над
и само се фокусираат на дел Јас се грижат за за миг.
>> Што е тоа.
Кој изгледа како структурно нешто јас сум запознаен со.
Навистина човек страница, па да се каже, ќе ви кажам
во она што хедер датотека функција како strlen е дефинирано.
Значи, ќе одам да се вратиме сега на прегледувачот.
И јас одам да се оди напред и да додадете тука # Include
и да ја зачувам датотеката.
>> Одам да го исчистите екранот со Контрола ● Ако сте биле прашувате.
И јас одам повторно да се кандидира направи string.0, компајлира тоа време.
./string.0 Zamyla.
Што се чинеше да работат Дозволете ми да одат напред и ја повторија со Девенпорт.
Enter.
И дека, исто така, се чинеше да работат.
>> Така што може да се направи малку подобро од ова, Сепак, ние може да почнат да се среди работите
до само малку.
И јас одам да всушност воведе една друга работа сега.
Одам да се оди напред и да спаси ова во друга датотека.
И јас одам да се јавите оваа датотека string1.c само
да бидат во согласност со кодот ќе бидете во можност да се најде на интернет.
>> И ајде да се фокусираат на точно истиот код.
Излегува дека јас сум е вид на земање
здраво за готово фактот дека мојот лаптоп, и за возврат, на CS50 апаратот
има многу меморија, многу RAM меморија, многу бајти на просторот
во која може да се сместат жици.
>> Но, реалноста, ако јас ја внеле долг доволно, и доволно тастатурата,
Можев во теорија тип во повеќе знаци
од мојот компјутер физички има меморија за.
И тоа е проблематично.
Многу како int може само смета толку висока, во теорија,
можете само да ставам толку многу карактери во RAM меморија на вашиот компјутер или Случаен
Пристап меморија.
>> Значи имав подобро да се предвиди овој проблем, па дури и
иако тоа би можело да биде ретка агол случај, така да се каже.
Не се случува често, може да се случи.
И ако тоа се случува и јас не се предвиди и програма за тоа,
мојата програма може да се направи, кој знае што.
Замрзнување, висат, се рестартира, сеедно.
Нешто се очекуваше да се случи.
>> Значи она што јас ќе одам да направите сега, отсега, навистина,
е пред јас некогаш слепо користи променлива како и дека
е доделен на повратната вредност на некои други функции, како getstring,
Одам да бидете сигурни дека дека неговата вредност е валидна.
Па знам само од тоа што се прочита Документација CS50 за getstring,
што во крајна линија ќе ви укаже на, дека getstring враќа посебен симбол
наречен NULL, N-U-L-L во сите капи, ако нешто тргне наопаку.
>> Па нормално, се враќа стринг.
Но инаку ако тој се враќа N-У-L-L-- ние на крајот ќе видиме што навистина
means-- тоа само значи дека нешто лошо се случило.
Сега ова значи, слично како во нула, Јас може да се провери услов тука во C,
ако не е го прави еднаков NULL.
Па ако не го видел ова пред, тоа само значи не се еднакви.
>> Така што е спротивно на еднакви рамноправни, која, да се потсетиме,
е различен од еден еднаква, што е задача.
Значи, ако на не е еднакво на NULL, дури потоа
Сакам да се изврши овие линии на код.
Значи со други зборови, пред да нурне во слепо
и да почне процесирањето над s, и тоа лекување
како да е низа од карактери, јас ќе одам да прво проверете,
почекајте една минута, е дефинитивно не еднаков на оваа посебна вредност, NULL?
>> Бидејќи ако тоа е, лоши работи може да се случи.
И сега за сега, се претпостави дека лоши работи случува значи вашата програма се урна,
а вие не мора да може да се опорави.
Па искрено, изгледа погрда.
Тоа е вид на збунувачки сега да се загледувам во.
Но, ова ќе стане повеќе запознаени пред долго.
>> Но јас ќе одам да предложи сега еден друг подобрување.
Тоа е подобрување на точноста.
Мојата програма сега е повеќе точно, бидејќи во редок случај дека не е доволно меморија
постои, јас ќе се справи со неа, и јас само ќе не прават ништо.
Јас барем не ќе несреќа.
>> Но, ајде да се направи конечна верзија тука.
И фајл наречен string2.c.
Одам да се залепите дека истиот код за само еден миг,
и јас одам да го потенцира ова линија, 11, еве, за само еден миг.
Сега реалноста е дека паметни компајлерот како ѕвекот би можеле да го надминете овој и за нас
зад сцената без наша некогаш знае.
Но, ајде да размислиме за ова фундаментално како проблематична дизајн.
>> Оваа линија код е, секако, велејќи иницијализира некои променливата i на 0.
Тоа е прилично јасна.
И што повторно е ова изјава, тука, јас ++, го прават?
Ние сме го видел, но ние навистина не зборуваат за тоа.
>> ПУБЛИКАТА: ја зголемува јас.
>> Дејвид Џ MALAN: ја зголемува јас.
Така, на секој повторување преку овој циклус, секој циклус,
ти си ја зголемува јас по еден.
Па тоа добива поголеми и поголеми, и поголеми додека јамка престанува.
Како тоа да го прекине?
И таму е овој средината состојба која ние се користи пред.
Сте виделе и во walkthroughs во П сет.
>> Но, она што е оваа изрека?
Го направите следново јамка, така додека i е помал од што?
ПУБЛИКАТА: должината на стрингот.
Дејвид Џ MALAN: На должината на стрингот.
Па тоа значи прилично чисто Англиски во таа смисла.
Сега проблемот е во тоа што секој пат кога iterate преку овој циклус во теорија,
Прашувам ова прашање.
Е i помалку од стринг должина на ОК?
>> Сега е јас се менува на секоја повторување?
Тоа е.
Поради ++.
Така што секој повторување јас е добивање на поголеми.
Но, дали е на добивање на поголеми или помали, или промена на сите?
Не
Па во смисла на дизајн, една од оските по кој ние се обидуваме да се оцени код
во класата, тоа се чувствува глупаво.
>> Како да се буквално, на секој повторување
на овој циклус се бара од исто проклето прашање, повторно,
и повторно, и повторно, и буквално тоа никогаш не се случува да се промени.
Барем ако јас не сум допирање s и обидува да го промени содржината на коментарите.
Така што може да се направи малку подобро од ова.
>> И она што јас ќе одам да направите не е декларираат само една променлива i,
но вториот променлива јас ќе произволно, но конвенционално, го нарекуваат n.
Доделете n е еднаков на стринг должина на ОК.
А потоа тука, јас ќе одам да направи умен малку за оптимизација, така
да се зборува, што на крајот на денот повеќе точни или не помалку точни е
отколку порано.
Но, тоа е подобро дизајн.
Во фактот дека јас сум со користење помалку време, помалку процесорот циклуси, така
да се каже, да одговори на истиот прашање, но само еднаш.
>> Прашања на кои воопшто принципот на подобрување,
велат, ефикасноста на програмата?
Да?
ПУБЛИКАТА: Зошто го правите користите [Беззвучен]?
Дејвид Џ MALAN: Добро прашање.
Па зошто ние се стави на ++ на крајот на јас, наместо на почетокот на јас?
Во овој случај, тоа е нема функционални влијание.
И воопшто, се трудам да користат postfix оператор
така што тоа е малку повеќе јасно како кога работата се случува.
>> За оние кои се запознаени, постои уште една изјавите што можете да направите ++ јас.
Овие се функционално еквивалент во овој случај
бидејќи не постои ништо околу тоа incrementation.
Но можете да излезе со случаи и линии на код
во која тоа го прави разлика.
Значи генерално, ние не дури и зборуваат за ова.
Затоа што искрено, тоа го прави вашиот код посекси и вид на измамник,
и помалку карактери.
Но, реалноста е дека тоа е многу потешко, Мислам, дури и за мене да заврши мојот ум
околу неа понекогаш, редоследот на операциите.
Па како настрана, ако навистина не ми се допаѓа ова,
иако ова е вид на секси изглед, исто така можете да го направите i + = 1,
кое е погрда верзија на истата идеја за postfix incrementation.
>> Ова го велам и ти треба да се направи забава на неа,
но ќе дојде да се види кодот, како нешто убаво пред долго.
>> [Смеа]
>> Дејвид Џ MALAN: Право?
Да.
Прашањето е во средината.
>> ПУБЛИКАТА: Дали треба да се каже int n?
Дејвид Џ MALAN: Вие не не треба да се каже int n.
Па затоа што веќе рековме int, не треба да го кажам уште еднаш.
Улов е дека n мора да да биде ист податочен тип како што јас.
Па тоа е само погодност тука.
Да.
>> ПУБЛИКАТА: Можете ли да одиме во текот на печати карактер на заградата јас повторно?
Дејвид Џ MALAN: Апсолутно.
Па% c, да се потсетиме од минатата време, е само случаеви.
Тоа значи да се стави знак овде.
обратна коса црта n, се разбира, само средства се стави на ред тука.
Така што само остава, сега, ова парче нова синтакса.
И ова е буквално велејќи грабне низа наречен s и одам да купам своите
i'th карактер, така да се каже.
>> И јас го задржи велејќи i'th карактер бидејќи на секој повторување на овој циклус
тоа е како да сме печатење надвор, прво на заградата 0,
како програмер може да се каже.
Тогаш е заградата 1, а потоа на држач 2, потоа 3, а потоа 4.
Но се разбира тоа е променлива, па јас само да го изразат со i.
>> Клучот, сепак, е да се реализира, особено ако не сум
се acclimating на овој свет на програмирање, каде што сите ние
изгледа да се брои од нула, мора почнат да бројат од нула сега.
Бидејќи жици, првиот карактер, z во Zamyla е за подобро или за полошо
ќе живеат на локација број нула.
>> Добро, па да ми донесе ни се врати тука за да Zamyla
и да видиме што навистина се случува за под хауба.
Така што овој поим на видот леење.
Вие би можеле да имаат, всушност, игра со ова веќе,
можеби за хакер издание на Р еден сет.
Но, типот леење само се однесува на способност во C и некои други јазици
за претворање на еден тип на податоци на друг.
>> Сега како да се види ова прилично на вистината?
Така што ова, да се потсетиме, е почеток на англиски азбука.
И контекст, да се потсетиме, од како пред една недела е ASCII.
Американската стандардна законик за размена на информации.
Која е само навистина долг пат на велејќи дека мапирање писма
на броеви, како и од броеви на букви.
>> Значи, преку М тука, точка точка дот, линии со, да се потсетиме,
на децимален број 65 до.
И ние не зборуваме за тоа експлицитно,
но сигурно има слични броеви за мали букви.
И, навистина, има.
Светот одлучи неколку години Пред тоа малку на, мали букви а,
ќе биде 97.
И малку б се случува да биде 98, и така натаму.
>> И за било кој друг клуч на вашата тастатура, има
ќе биде сличен модел на битови.
Или еквивалентно, децимален број.
Значи, прашањето на дофат на раката, тогаш, е како можеме да
всушност гледаат оваа под хаубата?
Па јас ќе одам да си во текот на прегледувачот повторно.
И наместо тип овој пат од нула,
Одам да се оди напред и да само отвори нешто
од денешна код наречен ASCII нула.
>> И ASCII нула изгледа вака.
Значи, да се заврши на нашите умови околу ова.
Значи прво, јас сум коментира кодот, што е убаво.
Бидејќи тоа е буквално ми кажуваше што да очекувате,
прикажување на мапи за големи букви.
Сега јас не сосема знаат што го велам тоа, па ајде да заклучиме.
>> На англиски јазик, можеби малку techie англиски јазик,
она што го прави линија 18 се појави да се прави за нас?
Само линија 18.
Што е тоа поттикнување?
Што е тоа се случува да се започне овде?
>> ПУБЛИКАТА: јамка.
>> Дејвид Џ MALAN: јамка.
И колку пати е дека ќе iterate?
ПУБЛИКАТА: [ставање ГЛАСОВИ] шест пати.
Дејвид Џ MALAN: Не шест пати.
ПУБЛИКАТА: 26 пати.
Дејвид Џ MALAN: 26 пати.
Да, жалам.
26 пати.
Зошто?
Па, тоа е малку чудно, но Почнав сметано од 65.
Што е чудно, но не е во ред.
Тоа не е лошо за збор.
И јас тоа го прават само затоа што, за овој пример,
Јас сум вид на предвидување дека капиталот А беше 65.
Сега тоа не е најелегантен начин да го направите ова, да се вид на тешко код
езотерична вредности кои никој некогаш се очекува да се запамети.
>> Но, за сега, да се забележи дека јас сум го прават тоа до преку 65 плус 26.
Бидејќи очигледно јас дури и не сакаат да се направи на аритметички во мојата глава.
Па јас ќе ги споделите на компајлерот го направи тоа.
Но, тогаш на секој циклус, секоја итерацијата на јамка, јас сум ја зголемува јас.
>> Па сега ова изгледа малку криптичната.
Но, ние треба да имаат основни градбени блокови со која треба да се разбере ова.
% C е само случаеви за знак.
% I е случаеви за int.
И излегува дека со користење на овој нова синтакса, оваа заграда, па
да се зборува, па тип на податоци внатре во загради,
Јас може да го присили на компајлерот да се третираат Не е цел број, но како знак.
>> На тој начин покажувајќи ја карактер еквивалент на тој број.
Сега овде, овој код е доста идентични.
Сакав само да се направи супер експлицитна фактот
дека јас сум со почеток во 97, кој е мали букви a.
На до преку повеќе 26 букви.
И јас сум doing-- повторно, кастинг јас, така да се каже.
Или пиши кастинг јас, така да се каже.
>> Од int на знак.
Па на крајот резултатот ќе биде, искрено, информациите што веќе знаете.
Одам да се направи ASCII-0 не dot-- точка в.
Известување, веројатно ќе го направи тоа грешка како што скоро сторив случајно.
Направи ASCII-0.
Сега јас ќе одам да направите ./ascii-0.
Ќе зумирате, и, за жал тоа се случува да се движите надвор од екранот.
Но, можеме да видиме на целата шема, каде што на мапи на 97, б мапи за 98,
и ако скролувате нагоре понатаму А, се разбира, мапи на 65.
Значи ова е само да се каже дека она што го проповедаат,
постои овој еквивалентност, се всушност случај во реалноста.
Така брз модификација на ова.
Дозволете ми да се отвори ASCII-1.в.
И ќе забележите овој умен, сортирање на, разјаснување на ова.
Ова е ASCII-1.в и забележите овој луд работа.
>> И ова навистина добива на срцето на она што компјутерите се прави.
Иако ние луѓето би не се смета во однос на letters--
Јас не почнат да размислуваат, сите права на тогаш б,
и користење на тие да се избројат физички објекти.
Сигурно може да се каже дека јас сакам да иницијализира некои променлива наречена c--
но можев да го нарековте anything-- па в е иницијализиран на главниот град А.
>> Бидејќи на крајот на денот, на компјутерот не се грижи што сте чување,
тоа само се грижи како сакате да ги презентираат информациите.
Како сакате компјутерот да толкуваат дека шема на битови?
Така што ова не е нешто што генерално би го препорачал тоа.
Тоа е навистина само еден пример да пренесе дека сте апсолутно може да
иницијализира цел број на знак.
Бидејќи под качулка на char, се разбира,
е само еден број од 0 до 255.
>> Па можете да сигурно стави во внатрешноста на int.
И што, исто така, покажува е дека ние
може да се конвертира од еден тип на друг, тука,
на крајот печатење истото.
И всушност, ова ќе се поправи online-- требаше да го кажам ова, повторно, тука.
Дозволете ми да се исчисти овој на интернет, а ние ќе види во онлајн можи колку што е потребно,
она што беше наменет таму.
>> Во ред.
Па Последниот пример сега вклучуваат А и Б, а потоа ќе
се работи до еден степен.
Па со и б и в во капитализација
и еквивалентност него, да погледнете во овој пример, тука.
Друга кодот пример.
Ќе се отвори оној кој е веќе направени, така што
не мора да ја внесете сите надвор од нула.
>> И известување во исчекување ние сме со користење на повеќе заглавие
додадени фајлови:, меѓу кои е нашиот нов пријател, string.h.
Сега ова изгледа, на прв поглед, малку криптичната.
Но, да видиме ако не можеме да се причина преку она што се случува овде.
Прво да се добие стринг од корисникот, и јас се стави дека стринг променлива
наречен ОК.
Копирање и поставување на од порано.
Во согласност 22, јас сум очигледно прави токму она што
Го направив пред една момент, јас сум процесирањето во текот на карактери во с.
>> И нови трикови тука се користи стринг должина, малолетникот оптимизација
на складирање на стринг должина во N, наместо повикувајќи strlen повторно,
и повторно, и повторно.
И само проверка дека јас е помал од n.
Сега тука, работите се малку интересно.
Но тоа е само апликација на истиот нова идеја.
Што го прави тоа на англиски јазик на заградата јас претставуваат?
>> ПУБЛИКАТА: Броење секој карактер [Беззвучен].
>> Дејвид Џ MALAN: Броење секој лик.
И уште повеќе посочно, на заградата јас претставуваат она што?
Дали би рекле.
Не да се стави на самото место тука.
>> ПУБЛИКАТА: Well--
Дејвид Џ MALAN: Значи, ако зборот is-- ако стрингот е Zamyla, која starts--
ПУБЛИКАТА: --you се справи со ликовите separately--
Дејвид Џ MALAN: Добро.
Токму така.
На плоштадот заградата нотација ви овозможува пристап до секој лик поединечно,
па на заградата 0 се случува да биде првиот карактер во стрингот.
s држач 1 ќе биде вториот, и така натаму.
Значи, прашањето Прашувам, тука, во оваа состојба е што?
Е i'th карактер на поголема од или еднакво на мали букви a?
И што значи тоа, еве, со двојно ampersands?
Публика (заедно): А.
Дејвид Џ MALAN: И.
Тоа е само еквивалент на ова.
И не е клучен збор во C, мора да употреба, annoyingly, симболот симболот.
И ова, обратно, се прашува е s е i'th карактер помалку од или еднакво
во мали букви z?
И повторно, тука е местото каде разбирање на основните
имплементација на компјутер го прави смисла.
Забележете дека, иако имам дот точка точка таму,
Изгледа како преку z со мали букви се сите соседни вредности се од 97 на до.
>> И истото за големи почеток во 65.
Па готова брза, тогаш, е тоа што на англиски јазик,
како би ја опишале она што линијата 24 е тоа?
Да?
>> ПУБЛИКАТА: На 24 тоа е проверка за да види дали секој лик е со мали букви.
Дејвид Џ MALAN: Тоа е проверка дали секој карактер е мали букви.
Па дури и повеќе посочно, е i'th карактер на мали?
Тоа е сите ние сме изразување тука логично,
малку cryptically, но на крајот прилично на вистината.
Е на S i'th карактер мали?
>> Ако е така, и тука е местото каде што работи се добие малку умот свиткување
за само еден миг, ако е така, одете напред и печатење на еден лик.
Така што ова е само случаеви, но она што карактер?
Зошто правам на заградата јас минус овој израз овде?
>> Па забележите шаблон овде.
Реалните броеви не е важно толку многу.
Но забележете дека 97 е колку далеку од 65?
>> ПУБЛИКАТА: 32.
>> Дејвид Џ MALAN: 32.
Колку далеку е 98 од 66?
>> ПУБЛИКАТА: 32.
>> Дејвид Џ MALAN: Малку в од големите Ц?
32.
Значи има 32 хмел од една буква на друг.
Па искрено, би можеле да поедностави оваа за тоа.
Но, тогаш јас сум вид на хард кодирање ова ниско ниво разбирање
дека нема читателот е некогаш ќе се разбере.
Па јас одам да го генерализира како, јас знаете мали букви се поголеми.
Знам на големи букви се помали вредности, иронично.
>> Но, ова е ефективно еквивалентен на велејќи одземе 32 од s заградата јас.
Во контекст на овие букви, и кога буквата
се случува да биде, мали букви а, и јас одземе 32,
Каков ефект има кои имаат, математички, на мали букви на?
ПУБЛИКАТА: Capitalizes--
Дејвид Џ MALAN: тоа капитализира.
И навистина, ова е зошто нашите Програмата е наречена профитираат нула.
Оваа програма или капитализира писмо,
по проверка, ако тоа е навистина мали букви.
Инаку, во согласност 30, што да правам ако тоа не е мали букви дека сум
гледајќи во одредена повторување на јамка.
Само да го испечатите.
>> Па не се менуваат работи тоа не е дури и мали букви.
Ограничи себе си да се малку на преку малку z.
Сега ова е прилично таинствени.
Но на крајот на денот, ова е како, еднаш многу одамна,
мораше да се спроведе нешта.
Ако јас наместо отворена профитираат еден, о му благодариме на Бог.
Има функција повикан на горниот што може
направиме се што можеме само го во прилично ниско ниво.
>> Сега на горниот дел е интересно поради тоа што е прогласена во датотеката,
а вие само ќе знаат ова со проверка на документацијата,
или да им се кажува, да речеме, во класа, каде што таа постои, во датотека наречена ctype.h.
Значи ова е уште еден нов пријател на нашата.
И на горниот дел го прави токму она што го сугестира неговото име.
>> Можете да помине во, како аргумент, помеѓу овие загради, некои карактер.
Одам да се помине во i'th карактер на е користење на нашата фенси нови нотација
вклучувајќи квадратни загради.
И се погоди, што е враќање вредност на на горниот очигледно ќе
да биде?
Голема буква.
>> Значи, ако јас се помине во мали букви а, се надевам дека, по дефиниција на на горниот дел,
тоа се случува да се врати А големи Инаку,
ако тоа не е во мали букви На прво место, јас само го испечатите.
И навистина, го забележуваат Вториот пријател тука.
Не само на горниот дел постои, но е пониска, што
всушност одговори на ова прашање за мене.
>> Сега секој кој пишува овие работи, 10-ти на години, знаеш што?
Спроведува на горниот дел и е намали користење на кодот како овој.
Но, повторно, во согласност со оваа идеја на црпење подалеку,
вид, пониско ниво имплементација детали.
И стои на рамениците на луѓето кои дојдоа пред нас, користејќи функции
како да горниот и е пониска, што прекрасно доволно се убаво
име да се каже она што го прават, е прекрасна парадигма да се прифаќаат.
>> Сега, излегува дека ако јас чита човекот страница за, да речеме, на горниот дел,
Учам нешто друго.
Значи човек toUpper.
Тоа е малку преголема.
Но известување, еве што се споменува заглавието на датотеката што треба да се користи.
Како настрана, бидејќи ова е погрешно, функцијата
користи ints, наместо на карактери заради грешка проверка.
Но, ние можеби ќе дојдат назад кон тоа во иднина.
>> Но, забележи, овде, на горниот дел на верата буквата в во големи букви, ако е можно.
Па тоа е прилично јасна.
И сега ајде да бидеме малку поконкретни.
Ајде да погледнеме во делот на Човекот страница под врати вредност.
Вредноста врати е дека на конвертира писмо.
Или c, ако на конверзија не е можно,
каде што c е оригиналот влез.
Што знам од тука, од аргумент за да горниот.
>> Значи она што е готова брза од ова?
Вредноста врати е дека на конвертира писмо,
или c, оригиналниот букви, ако конверзија не беше можно.
Што подобрување можам затоа направи да дизајн мојот код е?
Да?
>> ПУБЛИКАТА: Вие може да се отстрани друго.
Дејвид Џ MALAN: можам отстранување на друг изјава,
а не само на друг изјава.
>> ПУБЛИКАТА: Вие може да се отстрани [Беззвучен].
>> Дејвид Џ MALAN: можам отстранување на целиот вилушка
во патот, ако друг целосно.
Па навистина, дозволете ми да се отвори финалната верзија на ова,
капитализира-2 и ќе забележите како само, ако ќе, секси, кодот го сега добива,
во што сум се намали од некои седум или така линии на само четири,
функционалност која имав намера со едноставно повикување на горниот дел,
поминува во и заградата јас, и печатење надвор, со случаеви% c,
таа карактер.
>> Сега веројатно, не е грешка, или барем на ризикот од грешка,
во оваа програма.
Па само да се врати во поранешната готова брза,
што треба да веројатно исто така, се во оваа програма да се направи повеќе робусни,
така што не постои начин тоа може несреќа, дури и во ретки случаи?
ПУБЛИКАТА: Бидете сигурни дека тоа не е NULL.
Дејвид Џ MALAN: Бидете сигурни дека тоа не е NULL.
Значи, навистина, да се направи овој супер правилно, јас треба да се направи нешто како,
ако не е е NULL, тогаш оди напред и да се изврши
овие линии на код, што Јас тогаш може алинеја како што,
и потоа го ставаат во моите блиски заграда.
Толку добар врзување заедно на двете идеи.
Да?
ПУБЛИКАТА: Може да ви користат на направите додека јамка, наместо неа?
Дејвид Џ MALAN: можам Јас се направи направите додека јамка?
ПУБЛИКАТА: --you сакате да бидете сигурни дека всушност [Беззвучен].
Дејвид Џ MALAN: можам користите do време?
Краткиот одговор, бр.
Затоа што ти си за да воведе друг агол случај.
Ако стрингот е на нулта должина.
Ако на пример, јас само кликнете Внесете, без воопшто да пишувате Zamyla.
Одам да ви рака назад вистински стринг, како што на крајот ќе видиме,
дека има нула карактери.
Тоа е уште една низа, тоа е само супер кратко.
Но, ако користите направите додека, си оди за да слепо
се обиде да направи нешто со однос на таа низа,
и ништо не се случува да биде таму.
>> ПУБЛИКАТА: Па, ако не направи [Беззвучен] додека s--
Дејвид Џ MALAN: О гледам, да ги задржи добивање на низа од корисникот.
Толку краток одговор, може, и да ја задржите Здодевните
нив да ви даде стринг кој е доволно краток за да се вклопат во меморија.
Апсолутно.
Јас само не избра да.
Ако тие не ми даваат низа јас сакате, јас сум одјавување, јас се откажувам.
Но апсолутно, за таа цел, сте апсолутно може да го направи тоа.
>> Па на библиотеката насловот датотеки кои ние сме сега запознаени со се овие, тука.
Стандард I / O, CS50.h, string.h, ctype.h, а тука се, навистина, другите.
Некои од вас го открил математика библиотека во math.h.
Но, дозволете ми да ве запознаам, сега, да се овој ресурс што CS50 персонал, Davin,
и Роб, и Габе особено да се стави заедно.
Дека наскоро ќе се поврзат на веб-страница на курсот.
Таа се вика CS50 референца.
>> Кои само за да ви даде брз вкусот на тоа, работи како што следува.
Дозволете ми да одат на reference.cs50.net.
Ќе видите на левата рака страна огромна листа
на функции кои доаѓаат со в.
Но, ако ми е гајле, за момент, за нешто како strlen,
Можам да го внесете таму.
Тоа филтри надолу во листата само што се грижат.
Одам да кликнете на неа.
И сега на лево, ќе видите што се надеваме
е повеќе јасна, човечки пријателски објаснување за тоа како
оваа функција работи.
>> Се враќа на должината на стрингот.
Еве еден краток преглед, еве како можете користат во однос на заглавието на датотеката,
и во однос на она што функцијата Изгледа како во однос на своите аргументи.
А потоа тука, се враќа должината на стрингот.
Но, за оние од вас поудобно, всушност можете да кликнете на повеќе удобен,
и содржината на овој страница, сега, ќе се промени
да бидат стандардните вредности на она што добивате со користење на човек страница.
>> Со други зборови, CS50 референца е поедноставување
на човекот страници од страна на персоналот, за студентите.
Особено оние кои се помалку удобно и помеѓу, така што ќе
не мора да се обиде да ја заврши вашиот ум околу себе, искрено,
некои прилично криптичната синтакса и документација некаде.
>> Па задржи дека во умот во деновите што доаѓаат.
Па овде, повторно, е Zamyla.
Ајде сега да побара на прашањето што е малку повеќе човечки достапни.
Благодарение на Чанг, кој е печатење на повеќе слонови
нон-стоп во изминатите неколку дена.
Имаме можност да им даде најмалку еден од нив намалува.
Ако ние би можеле да добијат само еден волонтер да дојде на до исцртување на екранот.
Како овде?
>> Ајде до.
Што е вашето име?
Алекс: Алекс.
Дејвид Џ MALAN: Алекс.
Во ред.
Алекс, ајде нагоре.
Ние сме за да ја видите вашата ракопис на екранот овде.
Добро, убаво да ви се исполнат.
>> Алекс: Ница да ви се исполнат.
>> Дејвид Џ MALAN: Во ред.
Значи, супер едноставна вежба.
Бар не е висока за да добијат слон денес.
Ќе се игра улогата на getstring.
И јас одам да ви кажам само стрингот што сте добиле.
И претпоставувам дека вие, getstring, се нарекува.
И човекот, како мене, има внесе во Zamyla, Z-А-М-Y-Л-А.
Само напред и да пишува Zamyla на екран како да сте го добиле
и тоа се чуваат некаде во меморијата.
>> Оставајќи простор за она што ќе биде неколку други words-- тоа е во ред, продолжи.
>> [Смеа]
>> Па Zamyla, одлична.
Па сега претпоставувам дека вие, getstring, се нарекуваат повторно.
И затоа, јас да ви обезбеди, на тастатура, со друго име, Белинда.
Во ред.
И сега следниот пат getstring е вика, јас тип во нешто како Габе,
G-A-B-E. Ти си навистина преземање на срцето случаен пристап меморија.
Кој е цртеж што целосно случајно.
Во ред.
>> [Смеа]
Алекс: За жал мојот ракопис е лошо.
Дејвид Џ MALAN: Не, тоа е во ред.
И како за Роб, Р-О-Б. Во ред.
Добро.
Па јас не би се предвиди вид постават работите на овој начин.
Но можеме да се направи ова дело.
Па, како да одите за поставување на овие знаци во меморијата?
Со други зборови, ако се мисли на овој правоаголни црн екран
како претстава на RAM меморија, или меморија на компјутерот.
>> И се сети дека RAM меморија е само целиот куп на бајти,
и бајти се еден куп на битови.
И битови се на некој начин спроведува, главно
со некоја форма на електрична енергија во хардвер.
Па тоа е вид на дели ние разговаравме за
и сега може да се земе здраво за готово.
Како да одите за одлучувањето за тоа каде да се напише
Роб наспроти Габе наспроти Belinda наспроти Zamyla?
>> Алекс: Јас само тоа го правеше во цел дека ќе ми рече.
>> Дејвид Џ MALAN: И тоа е вистина.
Но, она што се регулира каде што ќе се стави Име на belinda и името Габе е?
>> Алекс: Ништо?
Дејвид Џ MALAN: [се смее] Така што работи, тоа е во ред.
Така компјутерите се мали повеќе уреден од тоа.
И така, кога ние implement-- остане таму за само moment-- кога ние всушност
спроведе нешто како getstring во компјутер,
Zamyla би можеле да бидат поставени доста како што направи на екранот, таму.
>> И она што е клучот за известување тука, она што Алекс го направи,
е дека постои еден вид на демаркација меѓу секоја од овие зборови, нели?
Вие не пишувам Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B--
со други зборови, постои еден вид на одбележувањето на кој се чини дека,
вид, случајно проред помеѓу овие различни зборови.
Но, тоа е добро, бидејќи ние, луѓето сега можат
визуелизира дека тие се четири различни жици.
Тоа не е само една секвенца на многу ликови.
Па на компјутер, а потоа, во меѓувреме, може да потрае жиците како Zamyla,
стави секој од тие писма внатрешноста на бајт меморија.
Но тој број е многу поголем, се разбира, од шест карактери.
>> Постојат еден куп на RAM меморија.
И така отсега, ова мрежа на кутии се случува
да претставуваат она што Алекс само не тука на екранот.
И сега, Алекс, ние може да ви понуди сина или портокалова слон од Чанг.
Алекс: Ќе го земам сина слон.
Дејвид Џ MALAN: сината слон.
Така голем аплауз, ако ние би можеле, за Алекс тука.
>> [Аплауз]
>> Алекс: Благодарам.
Дејвид Џ MALAN: Ви благодариме.
Па готова брза е дека, и покрај тоа што модел вид на промени со текот на времето, тука
на табла, имаше ова демаркација меѓу различните жици
дека Алекс доби за нас.
Сега компјутери, искрено, може да го направи истото.
Тие вид на би можеле одеднаш жици насекаде во RAM меморија.
Тука, тука, овде, овде долу.
>> Тие би можеле да го прават токму тоа.
Но, се разбира, тоа е веројатно најдобрата планирање.
Нели?
Ако постојано се прашував Алекс да добијат имиња, веројатно тој ќе
стави некои повеќе овде, можеби до тука, тука, тука, на крајот
овде.
Но со малку повеќе планирање, секако, ние би можеле да постават работите повеќе чисто.
И навистина, тоа е она што компјутер го прави тоа.
>> Но, што се фати е дека Ако следната низа да се добие
по Zamyla е нешто како Белинда,
предложи, каде што може да напише буквата b во однос на оваа мрежа?
Каде што ќе одат?
На правото на еден, под z, под еден?
Што ќе биде вашиот прв инстинкт?
ПУБЛИКАТА: Под z.
Дејвид Џ MALAN: Значи под z.
И тоа е прилично јасна, нели?
Тоа е вид на уредни, тоа е она што го правиме на тастатура кога ние хит Enter,
или е-маил при донесувањето на нумерирани листа на работи.
Но, реалноста е дека компјутерите се обидуваат да бидат поефикасни,
и ставам сигурно колку податоците во RAM меморија што е можно,
така што ќе не губат било бајти.
Така што ќе не губат секој екран недвижен имот.
И проблемот, сепак, е дека ако ние буквално се стави на писмото
б по, како ќе се дојде до знаат каде завршува име Zamyla на
и името на Белинда почнува?
Така што луѓето само предложи, добро, притискајте Enter, во суштина.
Го стави долу.
Или дури и како Алекс не, само на проектот пишување следниот име подолу претходната,
и под кои еден, а тогаш под истиот.
Тоа е визуелен знак.
>> Компјутери имаат уште еден визуелен знак, но тоа е малку повеќе содржаен.
Тоа е оваа фанки карактер.
Обратна коса црта 0, што е можеби потсетува на обратна коса црта n,
и така натаму, сега.
Посебните бегство секвенци.
Обратна коса црта 0 е начинот на претставува осум нула битови во ред.
0000 0000.
>> Начинот на кој ќе се изрази дека не треба да се хит на бројот нула на вашата тастатура,
бидејќи всушност тоа е ASCII знак.
Тоа изгледа како голем број, но е всушност децимален број
кој претставува кружен знак, кружни фонт.
Во меѓувреме, обратна коса црта нула значи, буквално
стави осум нула бајти тука за мене.
>> Значи ова е донекаде произволна.
Ние би можеле да го користи секој модел на битови, но светот
одлучи неколку години Пред тоа да претставуваат
на крајот на низа во меморијата, само стави целиот куп на нули.
Затоа што може да се открие тоа.
Сега тоа значи дека нема писмо од азбука да биде претставен со нули.
>> Но, тоа е во ред, веќе видовме дека ние сме со користење на 65 во 97 горе.
Ние не се насекаде блиску до сите нули.
Па Белинда во меморијата на компјутерот е всушност ќе одат овде.
Сум го привлече во жолта само да се подготви нашето внимание на него.
И известување, исто така, ова е сосема произволна.
Сум го извлечат мрежа.
Како, RAM меморија е само некои физички објект.
Тоа не мора да имаат редови и колони, сама по себе.
Тоа е само добив еден куп на бајти спроведува во областа на хардверот некако.
Но, ако по Белинда јас внесе во Габе е,
тој се случува да се заокружи тука во меморијата, и ако јас ја внеле во името Daven е,
на пример, тој се случува да се заокружи тука.
И јас може да продолжи да пишува уште повеќе имиња.
>> За жал, ако јас се обидувам да пишуваат големо име,
Јас би можело евентуално да снема меморија.
Во кој случај, getstring е ќе се врати NULL, како што рековме.
Но, за среќа, барем во овој визуелен тука, ние не се добие прилично толку далеку.
>> Сега што е убаво е тоа што овој општа идеја за лекување на работите
како да се во кутии е претставник на функција на C
и многу јазици, познат како низа.
Низа е уште еден тип на податоци.
Тоа е податочна структура, ако сакате.
Структура во смисла на тоа, навистина, вид, гледајќи како кутија, барем
во окото на твојот ум е.
Низа е соседни секвенца на идентични типови на податоци,
назад да се врати за да се врати назад.
>> Па низа, со други зборови, е низа од карактери.
Низа од карактери.
Но излегува може да имаат низи на гроздовете на нештата.
Всушност, ние може да се стави дури броеви во низа.
Па формата во која ние си оди за да започне
прогласување на овие податоци структура позната како низа
исто така се случува да го користите квадратни загради.
Но, овие квадратни загради се случува да се имаат различно значење во овој контекст.
>> И ајде да го видите на следниов начин.
Да претпоставиме дека јас го отворив нова датотека тука.
И да ги зачувам ова како ages.c.
И јас ќе заштедите ова во мојата папка тука.
И сега ќе одам да се оди напред и почнете да пишувате нешто
како вклучуваат CS50.h, вклучуваат stdio.h, int главната неважечки.
А потоа во внатрешноста на тука, сакам прво да има int наречен возраст.
>> И јас одам да го користат тоа за да добиете int од корисникот за неговата или нејзината возраст.
Но оваа програма е наменета да се користи од страна повеќе лица, за што и контекст.
Имам линија на луѓе.
Сите од нив имаат да напишеш во нивните возраст за можеби некои, не знам,
конкуренција или настан дека тие пристигна.
Па следниот човек, јас треба уште променлива.
>> Затоа што ако јас само го направи возраст добива getInt, тоа е
ќе clobber, или пребрише возраст претходната личност.
Така што не е добро.
Значи мојот прв инстинкт може да биде, ох, сите во право,
ако сакам да се добие повеќе луѓе ages-- да ја наречеме оваа age1,
int age2 добива int, int age3 добива getInt.
И сега ќе одам да се користи некои pseudocode код овде.
>> Направи нешто со тие бројки.
Ќе им го оставиме за друг ден што ние сме прави таму, бидејќи ние само
се грижи за моментот за age1, age2, age3.
За жал, еднаш компајлирате оваа програма
и го стави во предниот дел на вистинските корисници, она што е фундаментално лоша дизајн
одлука што се чини дека се направени?
Да?
ПУБЛИКАТА: [Беззвучен]
Дејвид Џ MALAN: Да, Не сум дури и се обиде
да дознаам како многу векови можам да всушност се грижи за?
Ако имам помалку од три лица овде, и затоа помалку од три возрасти,
Јас сум се уште слепо очекуваат три.
Дај Боже четири лица се појавиш.
Мојата програма едноставно не дури и ќе ги поддржуваат.
>> И така ова, долга приказна Накусо, не е добра навика.
Нели?
Бев во суштина копирање и вметнување код и само tweaking
променлива имиња.
И, Боже мој, ако сте имале, а не три возраст, но 10 или 100, или дури и 6500
студенти, на пример.
Ова не се случува да се биде особено домот, код, или одржлив.
Сте ќе треба да се запишете на програмата во секое време
Вашиот број на луѓе промени.
>> Па за среќа, во нашите вистински ages.c датотека за денес,
ние имаме повеќе умен решение.
Прво, јас ќе одам да ги позајмите, изградба ние сме се користи неколку пати,
ова не додека јамка, со цел да се добие бројот на луѓе во соба.
Јас сум само ќе отегчавам корисникот, повторно и повторно, додека тој или таа ми дава
на вредноста на n дека е позитивен цел број.
>> Јас може да се користат, минатата на времето се добие позитивни int.
Но, ние немаме што за вистински, па отидов напред
и повторно спроведе оваа идеја.
Сега овде, ова е нов трик.
Во согласност 27, како коментари во согласност 26 сугерира,
прогласи низа во која за складирање на возраст секого.
>> Значи, ако сакате да се добие, не еден int, не два ints, но целиот куп на ints.
Поточно n цели броеви, беа N можеби биде три, може да биде 100, може да биде 1000.
Синтаксата, едноставно, е да се да речеме, она што тип на податок сакаш?
Што сакате да се јавите дека парче на меморија?
Што сакате да се јавите на решетка кој изгледа вака сликовито?
>> И во загради тука, велиш колку е голема сакате низа да биде.
И така порано, кога јас реков на синтакса е малку различен тука,
ние сме уште се користат загради, но кога сум прогласување низа,
на број во внатрешноста на квадратни загради средства
колку е голема сакате низа да биде.
>> Спротивно на тоа, кога бевме користење на заградата јас пред еден миг, с, стринг,
навистина е низа од карактери, но кога вие не сте прогласување на променлива,
како и со овој клучен збор тука, ти си едноставно добивање
одреден индекс, специфично елемент од таа низа.
Откако знаеме дека, остатокот за ова е јасна.
Ако новиот Јас сум првиот случува да се печати она што е на возраст од лице број i.
Каде што само велат лице број еден, лице број два, лице бројот три.
>> И јас сум само прави аритметика, така што како нормални луѓе,
ние смета од една за оваа програма, а не од нула.
Тогаш јас го нарекувам getint, но јас се сместат одговорот во возраст заградата јас.
Која е i'th возраст во низа.
Па додека последен пат бевме лекување овие кутии како карактери за името Zamyla е,
и други.
Сега, овие кутии претставуваат 32 бита, или четири бајти
во која може да се сместат на int, int еден, еден int.
Сите на кои, повторно, се исти тип на податоци.
>> Сега правам нешто глупо, како што минува времето, само
за да се оправда го пишувам овој програма.
И потоа надолу тука, јас повторно iterate во текот на низа велејќи дека една година од сега,
лице број еден волја биде нешто години.
И да дознаам дека math-- Мислам, ова
не е многу комплицирано arithmetic-- Јас само додадете една до нивната возраст.
Само за да покажат, повторно, ова.
>> Само што можам индекс во низа, с, па можам индекс во низа на возраст,
како што таму.
Значи, каде е ова се случува да биде не води?
Па ќе видиме, на крајот, неколку работи во деновите што доаѓаат.
Еден, сето ова време, кога пишување свој програми,
како Марио, алчен, кредит.
Сте биле пишување на името на програмата и удирање Enter.
А потоа добива внес на корисникот.
>> Со getString, getInt, getLongLong, или слично.
Но, се покажа дека C поддржува нешто што се нарекува командната линија
аргументи, кои ќе ни дозволи всушност се на зборовите што пишувате,
на трепкање брза, по името на вашата програма.
>> Па во деновите што доаѓаат, ќе може да се тип нешто како Цезар,
или ./caesar број 13, потоа.
Ќе видиме како тоа работи.
Бидејќи навистина, во Проблемот постави два, ние сме
да ве запознаам да малку нешто
потсетува на Ralphie на предизвик порано на картографијата.
Уметноста на scrambling информации.
Ова, всушност, е многу потсетува на она што Ralphie не.
>> Ова е пример за енкрипција алгоритам наречен ROT13, R-O-T 13.
Кој едноставно значи ротирате букви во азбуката 13 места.
И ако го правиш тоа, ќе видите сега што е, можеби, позната фраза.
Но, начинот на кој ние се случува да го користите ова, во крајна линија, е генерално.
>> Во P постави два, во стандардна верзија, ќе спроведе неколку шифри,
еден вика Цезар, еден вика Vigenere.
Двете од нив се ротациона шифри, со тоа некако
се сврти една буква во различни писмо.
И Цезар е супер едноставен.
Можете да додадете еден, ќе додадете 13, или некој број до 26.
Vigenere прави тоа на по глава писмо основа.
Па Vigenere, како што ќе видите во спецификации, е посигурен.
>> Но на крајот на денот што ќе се спроведува и P постави два,
е дека клучот што ќе се користи и за енкрипција и декрипција.
Осврнувајќи се на процесот на претворање на обичен текст, некои оригиналната порака,
во Cypher текст, кој е нешто енкриптирани.
И тогаш се дешифрира повторно.
>> Во хакер издание, Во меѓувреме, ќе
со задача нешто слично во духот, каде што ние ќе ви даде
датотека од типичен Linux или Mac или Unix компјутер наречен Etsy
лозинка, која содржи една целина куп на кориснички имиња и лозинки.
И оние лозинки имаат сите е шифрирана, или hashed,
така да се каже, посоодветно како што ќе видите во спецификации.
>> И хакер издание ќе предизвик сте со земање на влез вака,
и пукнатини на лозинка.
Тоа е, да пронајдат она што го човечкиот лозинка всушност беше.
Затоа што, навистина, лозинки се обично не се чуваат во јасна,
и, генерално, лозинки треба да биде тешко да се погоди.
Тоа не е често случај.
>> И она што сме мислеле дека би направите е да склучи со неколку минути
Поглед на посебно лош избор на лозинки
од филм што може да се сети наивно.
И ако не, треба да се вработи.
>> [Видео репродукција]
>> -Helmet, Можете демон, што се случува?
Што ви се прави за да се ќерка ми?
>> -Permit Ми да се воведе на брилијантен млад пластичен хирург,
Доктор Филип Schlotkin.
Најголемиот нос работа човек во целиот универзум и Беверли Хилс.
>> Ваше Височество.
>> -Nose Работа?
Јас не ги разбирам.
Таа веќе имаше нос работа.
Тоа беше нејзиниот сладок 16 присутни.
>> Не, тоа не е она што мислите.
Тоа е многу, многу полошо.
Ако не ми даде комбинација на воздухот штит,
доктор Schlotkin ќе им даде на вашиот ќерка се врати нејзината стара носот.
- [Бори] Nooooooooooooo.
Од каде ти е тоа?
>> -Сите во право.
Ќе му кажам, јас ќе кажам.
>> Не, тато, бр.
Вие не мора.
>> Ти си во право мојот драг.
Ќе го изгубиле Вашиот нов нос.
Но јас нема да им го каже комбинација, без разлика што.
>> -Многу Добро.
Доктор Schlotkin, дали вашето најлошото.
>> -Мојот Задоволство.
>> -Нема!
Чекај, чекај.
Ќе му кажам.
>> -Јас Знаеше дека ќе работат.
Добро, дај ми го.
>> -На Комбинација е еден.
>> -Еден.
Кредитоспособни.
-Три.
-Четири.
-Five.
-Па Комбинацијата е еден, два, три, четири, пет.
Тоа е stupidest комбинација Јас слушневме во мојот живот.
Тоа е вид на работа на идиот ќе го има врз неговиот багаж.
>> Благодарам, Ваше Височество.
>> [ДАЛЕЧИНСКИ Преглед]
>> Што направи?
>> -Јас Исклучен од ѕидот.
>> Не, не сте, ќе исклучен целиот филм.
>> -Јас Сигурно притисне погрешно копче.
>> Па, го ставите назад на!
Стави филмот назад!
>> Да, господине!
Да, господине.
-Ајде Одиме, Арнолд.
Ајде, Гречен.
Се разбира дека знам дека ќе треба да ви сметка за тоа.
Па?
Дали работи?
Каде е царот?
>> -Тоа работел, господине, ние имаат комбинација.
-Велики.
Сега можеме да се земе секој последен здив на свеж воздух од планетата Druidia.
Која е комбинација?
>> -еден, Два, три, четири, пет.
>> -Еден, Два, три, четири, пет?
Да.
-Тоа Неверојатен.
Имам исто комбинација на мојот багаж.
Подготви Spaceball 1 за непосредна заминување.
>> Да, господине.
>> -И Промени комбинација на мојот багаж.
[Вратата се затвора ЗВУК]
[Тропаат на врати притискање шлем]
-Ahh.
[END видео репродукција]
Дејвид Џ MALAN: Тоа е тоа за CS50, ќе се видиме следната недела.
Раскажувач: И сега, длабоко Мисли, од Daven Farnham.
>> DAVEN FARNHAM: Кодирање во C е толку многу потешко отколку на гребење.
printf, гребење е лага.
>> [Смеа SOUNDBITE]