[Гуляе музыка] Дэвід малая: Добра. Гэта CS50, і гэта канец тыдня 2. Мне так шкада, я не мог быць там з вамі ўсе сёння, але вы ў вельмі добрых руках. Дазвольце мне прадставіць CS50 уласнай Роб Боуден. БОР Боуден: І, вядома, тое мы павінны зрабіць задавальненне той факт, што ён паслаў нам па вертыкалі відэа і паказаць гэта. [Прайграванне відэа] [Гуляе музыка] [Наступная] -Гэта Відэа не зрабіў прыйдзецца шукаць гэты шлях. Гэта можна было б прадухіліць. Скажыце няма вертыкальных відэа. -Vertical Відэа адбыцца, калі вы Трымаеце камеру ў той бок. Ваша відэа будзе ў канчатковым гледзячы, як дзярмо. - [Грунт] -Ёсць Усё больш і больш людзей, заахвоціўся каб зрабіць вертыкальныя відэа кожны дзень. Гэта ніколі не трэснуць ці нічога, але гэта ўсё яшчэ вельмі дрэнна. Ёсць два розных відаў людзі, якія пакутуюць з ВПС. Першая група лечыць відэа яны страляюць, як фатаграфіі. Яны не азначаюць, ніякай шкоды. Яны проста не разумеюць, што у той час як вы можаце ператварыць карціну, Вы не можаце сапраўды павярнуць відэа. [CRASH] - [Малпа ГУК] -The Іншая група гэта людзі, якія не даюць [БІП]. -Vertical Відэа сіндром небяспечны. Кінафільмы ёсць заўсёды гарызантальна. Прапануюцца гарызантальныя. Кампутарныя экраны гарызанталі. Народныя вочы гарызантальна. Мы не пабудаваны, каб глядзець відэа вертыкальныя. Я люблю вертыкальныя відэа. -Ніхто Клапоціцца пра вас. -калі Гэта праблема-х спыніць, вы таксама пачне паказваць чатыры відэа адразу, каб зэканоміць паласу прапускання. -Letterboxed Вертыкальныя відэа будзе быць памерам з паштовую марку. -А Ён будзе распаўсюджвацца ва ўсім свеце. Кінаэкранах ёсць заўсёды гарызантальна. Калі вертыкальныя відэа стала прынята, кінатэатры павінны быць высокі і худы. -А Усе кінатэатры, павінны знесены і перабудаваны. І да таго часу, яны былі адноўлены, Міла Куніс будзе старой і выродлівай. -Birds Будзе ўрэзацца ў іх і памерці. -Мы Усе атрымліваюць жорсткай шыі ад, гледзячы ўверх. -А Ніхто не будзе сядзець у пярэдні шэраг калі-небудзь зноў. -Джордж Лукас перавыданне зоркі Вайны again-- худы выданне. -Я Ніколі не быў у стане сказаць, гісторыя, што я хацеў сказаць. Гэта быў выдатны шанец для мяне, каб эксперыментаваць з новай тэхналогіяй. -Ты Рывок. -кожны Раз, калі мабільнае прылада выкарыстоўваецца для запіс відэа, спакуса ёсць. Проста сказаць няма. Скажы не Джорджа Лукаса. Скажы няма старога Міла Куніс. Скажыце няма вертыкальных відэа. -А Калі вы бачыце хто-то робіць гэта, скажам, "Вы не страляюць, што правільны манекен!" [Гуляе музыка] [КАНЕЦ ПРАГЛЯДУ] [Апладысменты] [AUDIO OUT] БОР Боуден: --simple форма крыптаграфіі, які з'яўляецца ў асноўным шыфраванне і дэшыфраванне сакрэтных паведамленняў. Так вось у нас ёсць вельмі просты цацкай. А ідэя вонкавае кальцо круціцца вакол ўнутранага кальца. І вы можаце бачыць, можа быць, калі я павялічыць у, that-- цяжка ўбачыць. Але, як і колькасць 1-- добра, што пераехаў. 1 нумар карты да ліста X, № 2 карты ў лісце Дж Неверагодна складана не прапускаць наперад. Ліст 2 карты ў J. Нумар 3 адлюстроўвае да D. Так з гэтым кальцом вы можаце даць хтосьці паведамленне 1, 2, 3. Для нейкай прычыне хачу сказаць ім XJD. Але вы можаце даць ім некаторыя паведамленне лікаў, і, калі яны ёсць гэты пярсцёнак, яны можа расшыфраваць тое, што вы спрабуеце сказаць. Такім чынам, вы, магчыма, бачылі гэта Канкрэтным прыкладам крыптаграфіі раней, калі вакол Каляднага сезона вы глядзелі Калядная гісторыя. Калі вы ніколі не бачылі гэта, то проста ўключыць TBS ў літаральным сэнсе у любы час у напярэдадні Калядаў, таму што яны проста паказаць яго спіна да спіны каб вярнуцца да спіна да спіны ўвесь дзень. І стаўленне гэта відэа. [Прайграванне відэа] -Будьте Вядома ўсім і кожнаму, што Ральф Паркер сапраўдным прызначаны членам Маленькая Сірата Эні Таемны круг і мае права на усёй пашанай і выгады адбываецца з ім. Падпісана сіротка Эні. Контрассигнуют П'ер Андрэ чарніламі! Ўзнагароды і перавагі ўжо ва ўзросце дзевяці гадоў! [Крычаць ад радыё] -Давай. Давайце скончым з гэтым. Мне не трэба ўсё, што джаз аб кантрабандыстаў і піратаў. Слухай, заўтра ўвечары з заключная прыгоды Чорнага пірацкі карабель. Цяпер, прыйшоў час для Сакрэтнае паведамленне Эні для вас члены тайнага Круга. Памятаеце Дзеці, толькі сябры Эні сакрэтнай Круга можа дэкадаваць сакрэтнае паведамленне Эні. Памятаеце, Эні у залежнасці ад вас. Усталюйце штыфты В2. Вось паведамленне. 12. 11. 2. -Я У маім першым сакрэтным нарадзе. -25. 14. 11. 18. 16. -ай, П'ер знаходзіцца ў вялікай галасавой сёння. Я мог бы сказаць, што сёння ўвечары Паведамленне было сапраўды важна. -3. 25. Гэта паведамленне ад самой Эні. Памятаеце, не кажаце нікому. -Пять Секунд праз, я ў толькі пакой у доме, дзе хлопчык дзевяці мог сядзець у адзіноце і дэкадавання. Ага! B! Я пайшоў да іншага. Е. Першае слова "быць". С. Ён даносіўся прасцей. У. 25. Гэта R. -Давай, Ральф! Я павінен ісці! -Я Б прама, Ма! Вось выдатна. Т. О. "Будзьце ўпэўненыя, што" - будзьце ўпэўненыя, да чаго? Што сіротка Эні спрабуе сказаць? Будзьце ўпэўненыя, што да чаго? -Randy Павінен сысьці! Ці будзеце вы калі ласка выйсці? -Добра, Мама! Я буду прама! Я атрымліваю бліжэй ,. Напружанне было жудасна. Што гэта было? Лёс планеты можа вісець на валаску! -Ralphie, Рэндзі павінен ісці! -Я Зараз выйду, з розуму сысці! Амаль там! Мае пальцы лёталі. Мой розум быў сталёвы пастку. Кожны часу вібруе. Гэта было амаль ясна! Так. Так. Так. Так. Будзьце ўпэўненыя, каб піць Ovaltine. Ovaltine? Вашывага камерцыйны? Сукін сын. [КАНЕЦ ПРАГЛЯДУ] БОР Боуден: Дык вось, як Ovaltine ставіцца да крыптаграфіі. У асноўным CS50 толькі рэкламуецца Ovaltine, такім чынам, мы маглі быць вашывай камерцыйных Ovaltine. Добра. Так што цяпер бягучая інфарматыка. Запомніць мяне на панядзелак мы спыніліся дайвінг глыбей радкоў. Такім чынам, мы маем справу з радок "Zamyla." І мы былі прызнання той факт, што мы можам разглядаць "Zamyla" у выглядзе паслядоўнасці знакаў. І памятайце, што мы даведаліся, абазначэнне кранштэйна. Так, калі гэта захоўваліся у радку "s", затым калі б мы сказалі ёй кранштэйн 0, што б пакажыце капіталу Z. ліст І калі б мы сказалі ёй кранштэйн 1, што будзе паказваць на першы ніжні рэгістр A, і гэтак далей да ов кранштэйна 5, які будзе паказваць на апошнюю а. Цяпер успомніце, што Даўжыня гэтага радка 6, але індэксы ў радку з'яўляюцца Ад 0 да 5, Z праз якія доўжацца. Так гэта цяпер ўпісваецца ў агульную карціну памяці кампутара, аператыўнай памяці. Дык дзе-то праграма, якая вы працуеце кампутар трэба памятаць, Zamyla дзесьці ў памяці. Так я магу быць добраахвотнікам? Так, калі ласка. І тое, што ваша імя? ДВП: Дын. БОР Боуден: Дын? Прыемна пазнаёміцца, Дын. Так што прыязджай сюды і мы збіраемся, каб вы маляваць на нашым добры выдатны макет памяці. Цяпер я хацеў бы думаць аб памяці адной доўгай паласы байтаў, але толькі для мэт адлюстравання мы будзем проста злева направа, зверху ўніз. ДОБРА? Так што я збіраюся паказаць program-- Getstrings.c. І так усё гэта праграма рабіць просіць чатыры струны ад карыстальніка з GetString, а затым друк усё, што першая радок увайшоў было. Мы ігнаруючы два праз чатыры. ДОБРА. Так тут now--, калі Я першы запыт S1. Такім чынам, вы кампутар. І вы рэалізуеце GetString. Такім чынам, вы запытаць радок з мне, і я кажу, ОК, Дын. Дайце радок "Дын". Так дзесьці ў памяці ў вас трэба памятаць "Дзіна". Так што пішыце яго ў памяці недзе. Ідэальны. ДОБРА. Так што цяпер мы s2. І S2 будзе запыт на GetString. Так што я збіраюся ўвесці радок. Я збіраюся ўвесці "Хана". Так ўвесці "Хана" дзесьці ў памяці. Так. А-М. ОК, так што зараз S3. І гэта будзе яшчэ адзін прашу GetString. І вось зараз ўвесці "Марыя". Добра. А тут яшчэ адна апошняя Запыт на GetString, S4. Такім чынам, я не ведаю. Як наконт мы ідзём з antidisestablishmentarianism. Так што увядзіце ў памяць. Так. Так проста рабіць "Боб". ДОБРА. Так што цяпер explain-- чаму пакінуць гэтыя прабелы? Чаму ў вас гэта поле пустым прастора тут, тут, і тут? Так. Так заўважыць, калі я іду друкаваць s1-- таму, калі мы быў бег "Хана" Права побач з "Дын", як мы ведаем, калі радок "Дын" заканчваецца? Так друку радкі s1 можа мець проста надрукаваныя "DeanHannahMariaRob" калі ён не мае ніякага паняцця , Калі "Дын" на самай справе сканчаецца. Добра. Такім чынам, у памяці тое, як мы на самай справе ўяўляюць гэты канец радка гэта з касымі нулявы. Так гэта прастора менавіта тое, што мы хацелі. Яна павінна быць зваротная касая рыса нуля. Гэта будзе зваротны слеш нуль, і гэта будзе зваротны слеш нуля. І вы можаце мець казачныя прыз за тое, што ідэальны валанцёр. Вазьміце стрэс мяч! ДОБРА. Так гэты сімвал зваротнай касой рысы нуля як мы, паказваючы на ​​заканчэнне радка. Гэта тое, як, калі любы Дадзеная праграма хоча надрукаваць радок, гэта how-- памятаю мы даведаліся, функцыя StrLen на мінулым тыдні? Даўжыня радкі? Гэта тое, як даўжыня радка можа вызначыць, як доўга радок. Ён проста трымае ітэрацыі над знакамі да таго часу, пакуль знаходзіць Зваротная касая рыса сімвала нуля. Такім чынам, важна зразумець аб зваротная касая рыса характару нулявы у гэта ўяўляецца усімі нулямі ў бітах. Так заўважыць, што гэта адрозніваецца ад нулявога знака. Такім чынам, сімвал нуля, калі вы памятаеце, у прыкладзе, што ён даў у канцы лекцыі, дзе персанажы карту , Мэтай якіх, як капітал Карт да 65. Ніжнім рэгістра ў карты да 97. Малыя б будзе 98. Такім чынам, лік 0 адлюстроўваецца, мэтай якіх я не ведаю, у верхняй частцы маёй галавы. 44 або 45. Дзе-то ў гэтым рэгіёне. Такім чынам, характар ​​0 з'яўляецца фактычная колькасць. Але зваротны слеш нуль карты для ўсіх нулявых бітаў. Так што адрозненне паміж зваротнай касой рысы нулявы, якія мы будзем называць нулявы тэрмінатар. Там гэта адрозненне паміж Зваротная касая рыса нуля, а знак нуля. Добра. Таму казаць крыху больш пра радках. Такім чынам, мы бачым тут, як гэта ён будзе закладзены ў памяці. Так гэтая ідэя радкоў у выглядзе паслядоўнасці з characters-- так афіцыйным кампутар sciency тэрмін для паслядоўнасці з'яўляецца масівам. Такім чынам, мы маглі б назваць радок масіў знакаў. І ёсць на самой справе іншыя дадзеныя тыпы, якія мы можам зрабіць з масіваў. Такім чынам, каб матываваць гэта, разгледзім на прыкладзе. Мы будзем называць яго ages0.c я буду скапіруйце і ўстаўце наш шаблон. ДОБРА. Такім чынам, у гэтай праграме тое, што мы хачу зрабіць, гэта ўзяць ўзрост з трох студэнтаў у працэсе. Такім чынам, мы ведаем, што INT age-- і цяпер я збіраюся сказаць, 0. Такім чынам, вы, магчыма, захочаце, каб сказаць age1, але для мэтаў, мы ўбачым вельмі хутка, Я скажу INT age0 роўная GetInt. Гэтак жа заклік да GetInt што мы выкарыстоўвалі I не бывае, каб быць падахвочваючы кажучы, "дайце мне ўзрост." Але толькі просіць яго. І age1 роўная GetInt. І INT age2 роўная GetInt. Так, зноў жа, тры студэнты, але у канчатковым рахунку пераменная індэксы з'яўляюцца age0 праз age2. ДОБРА. Так гэтая праграма будзе рабіць усё, што мы хочам з age0, age1 і age2, але гэтая праграма ў канчатковым рахунку, працуе на працягу трох студэнтаў. ДОБРА. Так што цяпер, калі я хачу чацвёра студэнтаў? Ну, я збіраюся мець, каб вярнуцца у маім кодзе, зменіце каментар, і цяпер у нас ёсць Int Age3 роўная GetInt. ДОБРА. Дык хто бачыць тут праблемы? У чым праблема з такога роду ўстаноўкі? Так. Так. Так мы ствараем зменная для кожнага студэнта. Цяпер, працуе, але у канчатковым рахунку, што, калі я цяпер сказаць: "Я хачу, каб захапіць ўзрост восем студэнтаў або 16 студэнтаў або ў менш многія студэнты сотні студэнтаў у CS50 ці тысячы студэнтаў на тэрыторыі кампуса або мільярды людзей у свеце? Так у канчатковым рахунку гэта не з'яўляецца устойлівым. Кожны раз, калі вы бачыце сябе капіраванне і ўстаўкі кода, як гэта, Вы павінны адчуваць сябе, як правіла што ёсць лепшы шлях. Так што гэта, дзе мы ўводзім дэкларацыя масіва. Таму, калі вы аб'яўляеце масіў, гэта тое, што агульны фармат будзе выглядаць. Мы збіраемся сказаць тыпу. а затым мы збіраемся даць імя гэтага масіва, як мы вызначаем зменную любога зададзенага. І, нарэшце, мы выкарыстоўваем Гэты кранштэйн абазначэння зноў але ў іншым кантэксце з як мы выкарыстоўвалі яго раней. Дык вось як гэта выглядае нармальным Аб'яву зменнай, што мы бачылі. Такім чынам, мы бачылі Int х коскі раней. Ну мы маглі б убачыць нешта як INT х дужках 5. І пакласці гэтую ідэю ў Праграма GetInt, што мы have-- такім чынам, мы можам рэалізаваць Гэты такім жа чынам. Скажам, у CS мы схільныя выкарыстоўваць п як лік чагосьці. Дык вось мы збіраемся захоўваць чатырох студэнтаў. І зараз мы можам сказаць, INT ўзросту Кранштэйны ня N-- зусім разумею yet-- абвясціць масіў з чатырох студэнтаў. Так, як гэта будзе выглядаць у памяці будзе падобны на гэты. Здыміце гэты. І мы будзем мець дзесьці у memory-- я пакладу гэта там. Так дзесьці ў памяці. Адзін, два, тры, чатыры. У нас ёсць чатыры цэлых чысла ў радку для гэтага масіва з чатырох лікаў. Так, у цяперашні час, што з'яўляецца Памер аднаго з гэтых скрынь? Так. Гэта чатыры байта. Гэта 32 біт. Так што цяпер гэта адрозніваецца з масіва, якія мы бачылі раней, масіў знакаў. У радку кожная скрынка была толькі адзін байт, паколькі характар ​​толькі адзін байт. Але з масівам цэлых лікаў, кожнае Скрынка мае ў чатыры байта таго каб адпавядаць ўвесь цэлае. Так што гэта тое, што масіў чатыры Інтс будзе выглядаць. А потым назад у код. Цяпер мы хочам на самой справе крама цэлыя у гэтым масіве. Так што цяпер гэта вельмі, вельмі, вельмі агульны прынцып, які ў нейкі момант стаць цягліцавая памяць. Так Int я роўная 0. я менш, чым п. я плюс плюс. Узрост кранштэйн я роўная GetInt. Такім чынам, гэта цыкл, гэты фармат, Вы павінны атрымаць вельмі прывыклі. Так што гэта, як правіла, як мы будзем перабору амаль любы масіў. Зараз звернеце ўвагу такога роду тлумачыць, чаму з самага пачатку у нас не было для завесы збіраецца на Int Я роўны 1, I менш або роўна 10. Прычына ў тым, што, пачынаючы з нулявы робіць гэтую працу добра з масівамі. Так масівы роўныя нулю індэксуюцца. Калі гэты масіў мае даўжыню 4, індэксы роўныя 0 да 3. Так праз першы ітэрацыі гэтага цыкла для мы збіраемся быць ўстаноўка ўзрост Кранштэйны 0 роўную выкліку GetInt. Так здарылася, што я ўвесці з клавіятуры. На другім праходзе, мы ўстаноўка age1 роўна GetInt. Па-трэцяе праход, age2. Заключны праход Age3. Такім чынам, калі ў першым праходзе цыклу Я ўваходжу ў лік 4 на клавіятуры, Затым мы уставім 4 тут. Калі на другім праходзе я ўваходжу 50, мы паставім 50 тут. На трэцім праходзе я мог увядзіце адмоўны 1, адмоўны 1, і, нарэшце, калі я ўваходжу 0-- і Цяпер памятаеце, што гэта было тры азначніка. Пасля таго як мы завесы спіне, я гэта будзе павялічвацца да 4. ня я больш не менш, чым п, які 4. І мы вырвацца з пятлі. Так што было б няправільна з гэтым? [Неразборліва]? АЎДЫТОРЫЯ: [неразборліва] Так. Такім чынам, масіў мае толькі чатыры месцы, што азначае, як індэксы ад 0 да 3. Так што, калі б гэта было так, я б прымаць значэнне 4 у нейкі момант. ўзроставая група 4 будзе ўстаноўка ўсё, што адбываецца, каб быць тут тое, што я павінен сказаць, увядзіце 6. Гэта будзе ўстаноўка гэтага да 6. Але мы не ведаем, што тут. Гэта не памяць што ў нас доступ. Так што, калі вы памятаеце з папярэдняя лекцыя, ён быў раздрукоўкі значэння Zamyla і у нейкі момант ён ударыў гэты сегментацыі віна. Такім чынам, вы, верагодна, будзе бачыць многія памылкі сегментацыі, як вы ажыццявіць некаторыя з праблемных мностваў. Але гэта адзін са спосабаў, у якіх Вы можаце сутыкнуцца з сегментацыю віна, калі вы пачынаеце доступу памяць такім чынам, што вы не павінны быць. Такім чынам, мы не мелі доступу да гэта месца, і гэта памылка. Так што гэта лепш. Зараз ёсць яшчэ невялікі праблема з гэтым кодам. І гэта ў асноўным, што мы затрымаўся на чатырох студэнтаў. Цяпер, калі я хачу выкарыстоўваць восем студэнтаў, ОК. Гэта не так ужо страшна. Я магу пайсці ў, змяніць каментары, а таксама змяніць п. Цяпер гэта будзе працаваць з васьмі студэнтаў. Калі я скампіляваць і запусціць гэта, пакажа me-- ён будзе прасіць лікаў на працягу васьмі студэнты і ён будзе проста працаваць. Але гэта менш, чым ідэальна падыходзіць для трэба перакампіляваць праграму кожны раз, Я хачу, каб змяніць колькасць студэнтаў што я хачу, каб увесці ўзрост для. Такім чынам, канчатковы паляпшэнне па гэта, як мы ўбачым, мы here-- збіраецца прасіць колькасць людзей. Тут мы маем шэраг людзей у нумарах або якія-небудзь ўзрост людзей у пакоі. Але мы збіраемся прасіць нумар людзей у нумары ад карыстальніка. Так што гэта сапраўды такі ж зрабі, а цыкл, які мы бачылі раней. Гэта сапраўды такі ж зрабіць-той час цыкл, які вы можа быць рэалізацыі на мностве праблем. Так што, пакуль яны ўвод п менш, чым 1, дык там павінен быць хоць бы адзін чалавек у пакоі. Пакуль яны ўвод п менш, чым 1, тады мы ідзем працягваць задаваць зноў. Калі ласка, увядзіце нумар людзей у пакоі. Цяпер, калі ў нас ёсць лік людзей у room-- так што я мог увайсці, што 200 чалавек у гэтым пакоі. Тады тут мы прыйдзе і абвясціць масіў памерам 200. Мы абвясціўшы, што гэта масіў досыць вялікі, каб трымаць 200 узростаў. Спускаючыся, гэта цыкл што вы атрымаеце вельмі прывыклі. Так перабору масіва, прысваенне кожнаму месцазнаходжанні у гэтым масіве цэлае, і то ў канчатковым рахунку, тут мы проста атрымаць прыклад ітэрацыі на працягу гэтага масіва, а не прысвойваць значэння, але доступ да значэнняў. Так тут мы бачым, што кажуць, праз год, чалавек% я будзе% I гадоў, дзе першы% я гэта я плюс 1. Так я гэта індэксная пераменная. І другі% я маю намер быць значэнне захоўваецца ў масіве узростаў плюс 1. Такім чынам, гэта плюс 1 толькі таму, што мы saying-- гэта плюс 1, узрост I плюс 1. Гэта плюс 1 толькі таму, што мы кажучы, праз год чалавека будзе гэты стары. Такім чынам, чаму гэта я плюс 1? Чаму ў нас ёсць плюс 1 ёсць? Так. Так. Так што памятаеце, масівы роўныя нулю індэксуюцца. Так што, калі мы друкуем гэта для хтосьці проста чытаць выснову, то, напэўна, яны хочуць убачыць нешта як чалавека аднаго, чалавек нумар адзін, будзе 20 гадоў. Чалавек нумар два будзе 15 гадоў. Яны б не бачыць твар нумар нуль 15 гадоў. Так кампіляцыі гэта і проста паглядзець, што гэта выглядае like-- Стварыць некаторы прастору. Зрабіць ўзросце ад кампілюе. Запуск узростаў. Мы бачым, колькасць людзей у пакоі. Так што я буду казаць ёсць тры чалавекі ў пакоі. Узрост чалавека нумар адзін, скажам 15, 20, 25. А цяпер я скажу праз год Цяпер яны будуць 16, 21, 26. Давайце паглядзім, што гэта працуе з п, што не роўна 3. Так што, калі я кажу, колькасць людзей 5, адзін, два, тры, два, адзін, праз год яны будуць два, тры, чатыры, тры, два гады. Так што я мог так жа, як лёгка п 10000. Цяпер я буду сядзець тут дастаткова Пры ўваходзе ва ўзросце, але гэта працуе. Так што цяпер у памяці дзесьці мы ёсць масіў памерам 10000, так, у канчатковым рахунку 40000 байт, таму што ёсць чатыры байта для кожнага з гэтых лікаў. Так што масіў Памер 10000, дзе мы можам захоўваць ўзрост тых 10000 чалавек. Добра. Пытанні аб любым з гэтага? Так. Што рабіць, калі вы далі адмоўны лік? Давайце паглядзім, што адбудзецца. Такім чынам, у дадзеным канкрэтным колькасці case-- людзей у пакоі, адмоўны. Ён адхіліў, што таму што тут мы, здараецца, каб быць апрацоўкі той факт, што калі п менш, чым той, які мы збіраемся яшчэ раз спытаць. Калі вы паспрабуеце абвясціць масіў адмоўнага памеру, гэта наогул не працуе. Так давайце паспрабуем. Давайце ігнараваць усе значэнне яны уваход для п і проста сказаць Int ўзросце ад адмоўнага. Давайце паглядзім, калі гэта яшчэ кампілюе. Я не ўпэўнены. Няма. Так, узрост абвешчаны як масіў з адмоўным памерам. Так авансам яна прызнае масіў не можа быць адмоўнай памеру і адхіляе яго. Цяпер, калі мы не справіцца гэта рабеце-той час цыкл правільна, калі мы не правяралі калі п менш, чым 1-- Скажам, мы проста гэтага не было наогул і замест гэтага мы проста захапіць цэлае. Незалежна ад таго, што лік з'яўляецца, мы аб'яўляем масіў памеру. Такім чынам, кампілятар не можа магчыма, у цяперашні час скардзяцца. Калі я скампіляваць this-- так што не магу скардзіцца, таму што ён не можа ведаць, што я збіраецца ўвесці адмоўны лік, якія маглі б быць несапраўднымі. Для ўсіх ён ведае, я мог бы ўвесці станоўчае лік, якая выдатна дзейнічае. Так я ўяўляю сабе, калі я ўваходжу адмоўны 1 людзі ў пакоі, памылкі сегментацыі. Так, добра. Так давайце дадамо гэта назад толькі трымаць яго, што ён першапачаткова быў. Так што ўзрост. Цяпер, калі я хачу, каб паспрабаваць адмоўнае age-- так што давайце кажуць, што пяць чалавек у пакоі. Узрост чалавека нумар адзін адмоўны 4, чалавек тры роўная нуля, чалавек three-- ОК. Дык вось, праз год, чалавек лік можна будзе адмоўным 3 гадоў. Так, верагодна, не мае сэнсу. Але гэта толькі таму, што, гледзячы на код усё, што мы робім просіць GetInt. Цяпер, калі мы меў Функцыя GetPositiveInt ці мы проста зрабілі гэта быццам жа час цыклу там, то гэта будзе працаваць выдатна. Але ў дадзеным так, мы проста не здараецца, апрацоўкі адмоўныя значэння. Любыя іншыя пытанні аб масівах? ДОБРА. Такім чынам, мы ў цяперашні час разглядаецца масівы. І мы збіраемся трэба выкарыстоўваць гэта для аргументаў каманднага радка. Такім чынам, у праблеме ўсталяваць two-- Я ведаю, многія з вас можа яшчэ працаваць на праблемы набору адзін, а праблема ўсталяваць два ідзе ўверх. У праблематыка два, вы збіраецеся трэба мець справу з радкамі, масівамі, і аргументы каманднага радка. Так што аргументы каманднага радка? Зараз, вы можаце ўбачыць ўніз тут трохі тізер менавіта тое, што будзе адбываецца. Мы бачым, INT асноўны, Inc ARGC, Радок ARGV дужкі. Такім чынам, спачатку давайце паспрабуем інтэрпрэтаваць што гэта спрабуе сказаць. Цяпер, ОК. Такім чынам, у камандным радку вы павінны быць прывыкнуць да некаторых з гэтых каманд зараз, і вы, верагодна, працаваць CD у тэрмінале перад. Так што, калі мы гаворым кд pset1, Вы ведаеце, што гэта павінна быць змены ў каталог pset1. Зараз звернеце ўвагу, што вы ніколі не напісаў праграму, як гэта раней. Кожная праграма, што вы напісалі, Вы будзе працаваць, скажам, кропка слэш Марыё, кропка слэш прагны, а затым яго можа запытаць у вас ўваход. Дык вось, гэта не тое, што змяніць каталог робіць. Пры запуску кампакт-дыск, ён не тое сказаць, якой каталог вы хочаце, каб CD у? Замест гэтага, вы проста кажаце, CD pset1, і ён проста ідзе ў каталог pset1. Такім чынам, падобным чынам у нас ёсць і іншыя прыклады. зрабіць прывітанне. Пры запуску зрабіць, гэта не тое сказаць, якая праграма вам хацелася б зрабіць? Вы проста кажаце, на каманднага радка зрабіць прывітанне. Перасоўванне з'яўляецца яшчэ адным прыкладам. Гэта той, які мы перасоўванне mario.c файл на адзін каталог. Так што цяпер мы ведаем, у гэтым прыкладзе мы сапраўды праходзіць два аргументу. Там гэта mario.c ў якасці першага аргументу, і кропка кропка з'яўляецца другім аргументам. А потым, калі вы запускаеце зрабіць, вам бачыць, што на самой справе доўгую каманду line-- што вельмі доўга каманды друкуецца ў камандным радку. Так што доўга гэта command-- знаходзіцца ў некалькіх хвілінах яго частка, але цяпер у нас ёсць тры Аргументы каманднага радка. Штрихпунктир нуля, прывітанне, і hello.c. Такім чынам, гэтыя каманднага радка аргументы, аргументы што вы перадаеце на каманднага радка так, каб ён не павінен быць прапанавана калі вы запусціце праграму. Гэта будзе расчараванне, калі пры Вы беглі ляск сказаў ён, "ОК, якія program-- якія Файл вы кампіляцыі? Hello.c. Што б Вы сцягі хацеў ўвесці? працяжнік высновы. Што б вы хацелі файл будзе называцца? добры дзень. Не, вы проста запусціце ляск працяжнік аб прывітанне hello.c. Так, аглядаючыся назад на гэта. Цяпер argc-- ARGC з'яўляецца разлічвае аргумент. Гэты лік каманднага радка Аргументы ўступіла ў камандным радку. Ну, тэхнічна argv-- Клінава выступае за вектарам, які ў асноўным азначае масіў. Але вы можаце ігнараваць гэта. Argv-- ў нас ёсць радок ARGV, так радок ARGV дужкі. Так што гэта яшчэ адна форма дужкі вы яшчэ не бачылі раней. Такім чынам, мы бачылі кранштэйны абазначэння, калі мы сказалі, як, радок з роўная Zamyla. з кранштэйнам 0 доступ да Z. сімвалаў Мы таксама бачылі, калі дужкі мы сказалі INT ўзрост дужкі 5. Гэта абвешчаны масіў памерам 5. Дык вось версія Кранштэйны мы раней не бачылі. Так што гэта свайго роду радкі ARGV, што будзе цалкам знаёмыя што было б проста радок. Цяпер дужкі паказваюць што гэта масіў. Так радок ARGV дужкі сродкі што ARGV масіў радкоў. Цяпер тэхнічна радок гэта масіў знакаў. Так гэта цяпер масіў з масіва знакаў. Але гэта значна лягчэй думаць аб гэта як проста масіў радкоў. Дык чаму можа дужкі быць пустым? Як, чаму мы не можам казаць, Кранштэйны 5, кранштэйн н? Так. Так. Мы не ведаем, колькі Ўваходы Ёсць збіраецца быць. Так што, калі мы паглядзім на ляск напрыклад, мы гаворым пра ляск працяжнік прывітанне hello.c. У дадзеным канкрэтным выпадку, адбудзецца у тры аргументы каманднага радка. І так brackets-- мы ўбачым у секунду гэта не будзе тры. Гэта тэхнічна было б чатыры. Але кранштэйны, мы б скажам, ёсць тры. Але цяпер, калі мы глядзелі на хаду mario.c кропка кропка, дужкі мы хацелі б паставіць два ў іх. І ёсць шмат каманд, якія мець пераменны лік каманднага радка аргументы. Так што гэтая версія Кранштэйны пазначэнне паказвае што ARGV масіў радкоў. Але мы не ведаем, колькі радкі ў гэтым масіве. І, як мы ведаем, як тое шмат радкоў у масіве? Вось ўвесь сэнс ARGC. ARGC распавядае нам, як доўга ARGV ёсць. Такім чынам, апошняя рэч, каб трымаць у розум, што, тэхнічна, сама каманда лічыцца адным з аргументаў каманднага радка. Так кд pset1, ёсць два Аргументы каманднага радка. Праграма сама па сабе, CD, а затым фактычны аргумент яго частка, pset1. Любая праграма, што вы напісалі да гэтага часу была адной каманднага радка argument-- кропка слэш Марыё. Гэта адзіны аргумент каманднага радка. Так што цяпер, гледзячы на ​​ляскам працяжнік аб прывітанне hello.c. Так што ARGC? 4. Так ARGC 4. Ляск, так ARGV кранштэйн 0 ляск. ARGV кранштэйн 1 працяжнік 0. ARGV кранштэйн 2 прывітанне, і ARGV кранштэйны 3 hello.c. Такім чынам, пытанні па гэтым, і тады мы паглядзець на некаторых праграмных прыкладаў. ДОБРА. Такім чынам, мы будзем глядзець на hello3.c. Такім чынам, гэта павінна быць знаёма з адзін з першых прыкладаў гр мы былі, дзе мы б проста сказаць, прывітанне свету, але цяпер гэта з'яўляецца больш агульным. Дык вось, мы гаворым прывітанне % S зваротны слеш н ARGV кранштэйн 1. Notice-- так да гэтага часу гэта з'яўляецца што мой шаблон файла выглядае. Я быў Int асноўны (пустэчу), і то я б зрабіць што-то ў галоўнай функцыі. Цяпер замест гэтага, як толькі мы пачынаем справу з аргументамі каманднага радка, мы павінны канстатаваць іншая форма асноўнай. Так, гледзячы на ​​hello3 зноў, галоўным будзе ўзяць два аргументу Int now-- ARGC, колькасць аргументаў каманднага радка, і радок ARGV дужках, фактычнае струны ўступілі ў камандным радку. Так што я збіраюся змяніць, што шаблон адлюстраваць гэты факт. Зараз, калі вы пішаце праграма, калі вы не трэба прадпрымаць ніякіх каманднага радка Аргументы, а затым проста выкарыстоўваць Int асноўны (пустэчу). Але цяпер, калі вы пішаце Праграмы аргумент каманднага радка, якія Вы збіраецеся рабіць для задачы ўсталяваць two-- так што зараз, што вы працуеце праграмы, якія трэба прыняць Аргументы каманднага радка, Вы павінны мець асноўныя з гэтай формы. Так here-- гэта вялікі выкарыстанне аргументу каманднага радка. Так друку ARGV 1. ОК так што давайце скампіляваць і запусціць гэтую праграму. Зрабіць hello3. Кампіляцыя. Кропка слэш hello3. І скажам, "Боб". Прывітанне Роб. Калі я кажу "прывітанне" Марыя, Марыя прывітанне. Прывітанне Марыя. Ханна да гэтага часу гаворыць, "прывітанне Марыя, "таму што я не рабіць што-небудзь з нашай ARGV 2. ARGV 2 зараз будзе "Хана". ARGC б 3. Што рабіць, калі я гэта зрабіў? Так прывітанне нуль. Ён коратка закрануў тым, што, тэхнічна, GetString можа вярнуцца NULL, але мы атрымліваем нашмат больш у тое, што нуль ёсць на самай справе. Але прыняць яго ў якасці пытання Тое, што, як правіла, не дрэнна. Мы зрабілі нешта няправільна, калі гэта друк "прывітанне нуля." І па гэтай прычыне мы зрабілі нешта не так is-- добра, калі я бег кропка слэш hello3, ARGC быў 1. Значыць, даўжыня ARGV было 1. Калі масіў мае даўжыню 1, сапраўдныя толькі індэкс роўны нулю. І вось ARGV 1 знаходзіцца за межамі дыяпазон гэтага масіва. Гэта было падобна на раней, калі я паспрабаваў для захоўвання 6 за межамі канца масіва. Так што я спрабую атрымаць доступ да сёе- за межамі пунктах ARGV, і мы атрымліваем нуль. Такім чынам, лепшая версія гэта, паляпшэнне, відавочна праверкі ARGC. Так што, калі ARGC роўны 2, гэта азначае, што мы беглі нешта накшталт кропка слэш hello3 Адзежа. І ён будзе друкаваць "прывітанне Роб." Калі ARGC ня роўна 2, то гэта проста будзе ігнараваць усё, што вы паклалі у аргуменце каманднага радка у якасці аргументаў каманднага радка. Ці, калі вы не кладзі на ўсіх, гэта проста хачу, каб ігнараваць і проста сказаць, "прывітанне вам." Так складанні гэтага. Зрабіць hello4. І працуе hello4. Запуск гэта так, што павінна быць надрукавана? "Прывітанне табе." Прывітанне вам. Што пра hello4 Адзежа? "Прывітанне Роб." І, нарэшце, прывітанне Роб Марыя проста "прывітанне Вы" зноў, таму што вы сапраўды не ўвайсці тое, што ён чакаў. Вы ўвялі некалькі імёнаў чым гэта магло звяртацца, так што проста дэфолт прывітання вы паводзіны. Так пытанні па гэтай нагоды? Або аргументы каманднага радка? Такім чынам, прымаючы паглядзім на яшчэ пара прыкладаў выкарыстання каманднага радка arguments-- у першую чаргу мы ARGV працяжнік 1 кропка C. Таму каментары аддаць тое, што гэтая праграма павінна рабіць. Але звярніце ўвагу, гэта now-- цыкл, гэта сапраўды адпавядае шаблоне Я казаў раней. Мы проста апынуліся выкарыстоўваючы ARGC замест п. Цяпер ARGC сапраўды п. Гэта даўжыня масіва ARGV. Так будуць ітэрацыі па ARGV Масіў Printf-кі кожнага значэння ARGV. Так што, калі я магу зрабіць гэта. Зрабіць ARGV 1. Гэта складае. Кропка слэш ARGV 1. Проста працуе гэта, друк кропка слэш ARGV 1 так што гэта быў адзіны каманднага радка argument-- назва праграмы. Там заўсёды будзе меры: ARGC не можа быць менш, чым адзін, так як заўсёды будзе, па меншай меры быць імя праграмы для запуску. Так ARGV 1 Роб будзе друкаваць ARGV 1 а затым на новай лініі "Боб". Такім чынам, у першай ітэрацыі з гэтага цыклу, я гэта 0. ARGV 0 назва праграмы. Кропка слэш ARGV 1. А потым ARGV 1 мая першая Аргумент каманднага радка, якая Роб. На дадзены момант, мы роўныя ARGC. Мы вырвацца з пятлі, і мы зрабілі. Так што гэта будзе працаваць для любога Колькасць аргументаў каманднага радка. Звярніце ўвагу, што друкуе ARGV 0, ARGV 1, 2 ARGV, ARGV 3, 4 ARGV. І няма ARGV 5. ARGC роўная 5. Такім чынам, у argc-- на я роўная 5, мы вырвацца з пятлі. ДОБРА. Так што пытанні аб перш чым мы разгледзім больш складаны прыклад? Так ARGV 2. Добра. Такім чынам, мы па-ранейшаму друку аргументы каманднага радка. Але цяпер у нас ёсць заўважыце укладзены цыкл. Так што гэта робяць? Такім чынам, першы цыкл робіць менавіта тое, што ён рабіў раней. Мы па-ранейшаму цыкл па кожны аргумент каманднага радка, але цяпер гэта другое loop-- мы ў Таксама бачыў нешта падобнае раней. Калі ён быў перабор Zamyla раздрукоўкі Z-A-M-Y-L-A. Такім чынам, гэта другі контур для Int J роўная 0, п роўная STRLEN з ARGV кранштэйна I. Так давайце спачатку думаць the-- давайце ісці праз. Давайце падумаем, што кампутар будзе рабіць, калі я пабег гэтую праграму, як толькі кропка скараціць ARGV працяжнік 2. Так што, калі я пабег гэты код, а затым ARGC будзе роўны 1. І радок argv-- ёсць толькі будзе адзін індэкс ў ARGV, і што будзе роўная кропка скараціць ARGV 2-- назва праграмы. ОК, так што зараз я роўная 0, я менш, чым 1, я плюс плюс для INT J роўная 0, п роўная STRLEN з ARGV кранштэйна 0, так што ў першая ітэрацыя гэтага цыклу. ARGV Кранштэйны 0 кропка слэш ARGV 2. Так што даўжыня гэтага радка? Ну, падсечна кропка A-R-G-V працяжнік 2. Так StrLen таго, што будзе 8. Так J роўная 0, п роўная 8. Пакуль J менш 8, J ++. І з гэтым мы ідзем, каб быць друк адзін знак, які з'яўляецца ARGV кранштэйны кранштэйны я J. Такім чынам, толькі я нуль. Мы па-ранейшаму ёсць толькі адзін аргумент каманднага радка. У гэтым першай ітэрацыі з цыкл, мы будзе друк ARGV кранштэйны кранштэйны 0 0. І тады J будзе павялічвацца. І мы збіраемся друку ARGV кранштэйны кранштэйны 1 0. А потым ARGV кранштэйны кранштэйны 0 2. Так што гэта наша першая сустрэча шматмерных масіваў. Памятаеце раней, што я сказаў, што ARGV тэхнічна масіў масіваў знакаў. Дык вось, калі я сказаў нешта накшталт Радок з роўная ARGV кранштэйн I, і тады я сказаў, з кранштэйн J, гэта будзе дасягнення тое ж самае. Зараз, вы раней не бачыў з кранштэйна J. Вось толькі атрымаць доступ да J-й Характар ​​гэтага радка. Так з гэтым, мы атрыманне J-й характар ​​я-я ARGV. Так што, у канчатковым рахунку гэта павінна выхад? Зрабіць ARGV 2. Гэта складае. Кропка слэш ARGV 2. "Роб Марыя Хана", і даць нам нумар. Такім чынам, мы бачым, што гэта выснова кропка на сваёй уласнай лініі і слэш па ўласнай лініяй і на сваёй уласнай лініі. Гэта раздрукоўкі сябар індывідуальны характар кожнага аргументу каманднага радка. І тады паміж імі, з гэтай новай лініі Мы друкуем тут, у паміж імі будзе друкаваць новы радок. Так што гэта падобна на папярэдні ARGV працяжнік 1, якія друкуюцца кожны Аргумент каманднага радка, але зараз мы друку аргументы каманднага радка а затым ітэрацыі праз кожны характар ​​кожнага аргументу каманднага радка каб атрымаць гэтую выснову. ДОБРА? Так пытанні па гэтай нагоды? Адна рэч, каб адзначыць, што каманднага радка arguments-- такім чынам, яны падзяляюцца прабеламі, як вы, натуральна, чакаць, каб яны. Такім чынам, радок можа ўтрымліваць прабелы ў ім. Гэта не супер важна, але калі я хацеў аргумент трэці каманднага радка мець месца ў гэтым, то я Можна сказаць, што нешта накшталт гэтага. ДОБРА? Так што гэта яшчэ толькі ў цяперашні час мае тры каманднага радка arguments-- таксама 4. Кропка слэш ARGV працяжнік 2, Роб, Марыя, і Ханна агенцтва Bloomberg. ДОБРА. Пытанні па гэтай нагоды? Там няма нічога асаблівага аб прабел. Гэта проста здараецца, што каманднага радка ставіцца сімвал прабела пра тое, як вы падзеліце кожны аргумент. Добра. Такім чынам Праблема набор two-- вы збіраецеся быць гледзячы на ​​шыфраванне з сакрэтным ключом. Так, аналагічнай той, што, напрыклад мы бачылі з Калядная гісторыя, Вы будзеце ажыццяўленні некаторых алгарытмы, якія, улічваючы паведамленне, Вы збіраецеся быць у стане для шыфравання, што паведамленне што толькі хто-то з гэтай таямніцы Ключ, з той дэкодэра кольцы, павінны быць у стане расшыфраваць. Так што гэта стандартнае выданне. Вы будзеце рэалізацыі дзве розныя версіі. Калі вам здарыцца, каб зірнуць у хакер edition-- зараз, мы збіраемся, каб даць Вы радок, як гэта, які ўяўляе сабой зашыфраваны пароль. Так ваша мэта, каб высветліць, што расшыфраваны пароль. Зараз гэта сапраўды хаў паролі захоўваюцца ў многіх кампутарах, і ён проста захоўвае гэта выпадковая паслядоўнасць знакаў. Вы павінны высветліць, як атрымаць ад гэтай выпадковай радка знакаў да таго, што зыходны пароль быў. І, нарэшце, пасля гэтага Праблема набор, вы павінны быць у стане зразумець, што гэта значыць. Такім чынам, вы даведаецеся, як расшыфраваць гэта свайго роду выпадковай радка. Сапраўды гэтак жа, калі вы памятаеце, ад тыдня 0, вы, магчыма, бачылі гэта URL-адрас. І вы павінны быць у стане расшыфраваць гэта ў канчатковым выніку. Вы не маглі б быць шчаслівыя, калі вам расшыфраваць яе і націсніце на спасылку. Добра. Вось і ўсё на сёння. Так бачыць вас на наступным тыдні! [Электронны прайгравання музыкі]