[МУЗЫКА ГУЛЯЕ] David J. малая: Добра. Гэта CS50, і гэта гэта канец тыдня 2. Такім чынам, сёння, мы збіраемся працягнуць наш агляд на тое, як мы ўяўляем рэчы пад Вытяжка-- адыходзячы ад нумара, як цэлых і якая плавае коскі і засяроджванне ўвагі на радкі і у канчатковым рахунку, больш цікавыя праграмы. Але мы таксама зірнем на Пару прадметна-арыентаванага problems-- першы з якіх быць з удзелам крыптаграфіі, мастацтва караскацца інфармацыю, , У якім вы бачыце вышэй тут карціна Радыё Сірата Эні Сакрэт дэкодэр кольца з мінулага. Гэта на самай справе вельмі прымітыўная форма і для дзяцей форма cryptopgraphy прычым гэта кольца мае два disks-- адзін ўнутры і адзін звонку. І, круцячы адзін з тых, вы можаце істотна выстройваюцца лісты як праз Z з іншымі літарамі як B праз А. Іншымі словамі, Вы можаце літаральна павярнуць алфавіт, тым самым прыдумляць адлюстравання з лісты літар, так што, калі вы хацеў паслаць сакрэтнае паведамленне каму то падабаецца Эні, вы маглі б напісаць ўніз ваша паведамленне, і затым павярніце літары, у выніку чаго, калі вы маеце на ўвазе сказаць "А", вы замест сказаць "B" Вы хочаце сказаць, "B" Вы замест сказаць "C" - ці нешта больш разумнае чым that-- а затым, нарэшце, так доўга, як Эні мае гэты дэкодэр кальцо, яна можа дэкадаваць паведамленне. Зараз, вы, напэўна, памятаеце, на самай справе, што гэта быў выкарыстаны ў вельмі вядомым фільме, што гуляе да млоснасці падчас Калядны сезон. Давайце зірнем тут. Ralphie PARKER: "Так будзе вядома ўсім ў рэзюмэ што Ральф Паркер сапраўдным прызначаецца членам сіротка Эні Secret Круг і мае права на ўсе ўшанаванні і перавагі якія адбываюцца ў гэтай ". Ralphie PARKER (якая апавядае): Подпіс сіротка Эні. Контрассигнуют, П'ер Андрэ! У чарніла. Ўзнагароды і перавагі, ўжо ва ўзросце дзевяці гадоў. [МУЗЫКА ГУЛЯЕ] [RADIO балбатня] Ralphie PARKER: Давай. Давайце скончым з гэтым. Мне не трэба ўсё такое іншае аб кантрабандыстаў і піратаў. Дыктар: Слухайце заўтра ноч для заключнай прыгод з The Black пірацкі карабель. Зараз, прыйшоў час для Эні Сакрэт паведамленне для вас членаў Таямніцай кругам. Памятаеце Дзеці, толькі членаў з Эні Secret Circle можа дэкадаваць сакрэтнае паведамленне Эні. Памятаеце, Эні ў залежнасці ад вас. Усталюйце сцяжкі для B-2. Вось message-- 12, 11, 2-- Ralphie PARKER (якая апавядае): Я знаходжуся ў сваёй першай таямніцай сустрэчы. Дыктар: --25, 14, 11, 18, 16-- Ralphie PARKER (якая апавядае): О, П'ер быў у выдатнай галасавой сёння. Я мог бы сказаць, што сёння ўвечары паведамленне было сапраўды важна. Дыктар: --3, 25. Гэта паведамленне ад самой Эні. Памятаеце, нікому не кажыце. [Задыхаючыся] Ralphie PARKER (якая апавядае): Дзевяноста секунд праз, я у адзінай пакоі ў Дом, дзе дзевяцігадовы хлопчык мог сядзець у адзіноце і дэкадавання. Ах. "Б." [Хіхікаць] Ralphie PARKER (якая апавядае): Я пайшоў да іншага. "Е." Першае слова "быць". Так! Ён даносіўся прасцей. "У." [Хіхікаць] Рэндзі PARKER: Ды добра, Ralphie. Я павінен ісці! Ralphie PARKER: я зараз спушчуся, Ма. Вось выдатна. "Т." "О." "Будзьце ўпэўненыя, ў "." Абавязкова "што? Тое, што было сіротка Эні хочаш сказаць? "Абавязкова" што? МАЦІ: Ralphie, Рэндзі павінен сысці. Не маглі б вы выйсці? Ralphie PARKER: Добра, мама! Я зараз выйду! Ralphie PARKER (якая апавядае): Я быў усё бліжэй цяпер. Напружанне было страшнае. Што гэта было? Лёс планеты можа вісяць на валаску. МАЦІ: Ralphie, Рэндзі павінен ісці! Ralphie PARKER: Я буду з, з розуму сысці! Ralphie PARKER (Апавядаецца): Амаль там! Мае пальцы лёталі! Мой розум быў сталёвы пастку. Кожны часу вібруе. Гэта было амаль ясна! Так! Так! Так! Так! Ralphie PARKER: "Будзьце ўпэўненыя, піць свой Ovaltine ". Ovaltine? Вашывы камерцыйны? [МУЗЫКА ГУЛЯЕ] Ralphie PARKER: Сукін сын. [Смяецца] David J. малая: Дык што ж тады пробліск на якім крыптаграфіі можа быць для это-- а піць з мінулага. Так хутка аб'ява. Калі вы вольныя ў гэтым У пятніцу ў 1:15 вечара і будзе б далучыцца да нас для CS50 абед, скіравацца ў гэтым URL тут. Першы прыйшоў, першы абслужыць, як звычайна. Але з цягам часу, мы клапоціцца, каб Найбольш хто хацеў бы ўдзельнічаць можа планаваць мудры. Так струны. У нас ёсць Zamyla-- якіх Вы зараз сустрэліся, хутчэй за ўсё, ў задачы Набор 1-- якога назву пішацца такім чынам. І выкажам здагадку, што вы набралі яе імя ў кампутарную праграму, гэта выкарыстоўваючы нешта накшталт GetString. Для таго, каб аднавіць гэтыя націску клавіш, як мы можам ісці аб якія прадстаўляюць радок, слова, абзац, або некалькі літар, як гэта тут? Мы гаварылі ў мінулы раз пра цэлыя і праблемы якія ўзнікаюць з цэлалікавага перапаўнення і якая плавае коскі і праблемы, якія ўзнікаюць у дакладнасці. Са радкамі, мы, па меншай меры ёсць трохі больш гнуткасці таму strings-- проста ў рэальным world-- можа быць даволі адвольнай даўжыні. Даволі кароткая, даволі доўга. Але нават тады, мы збіраемся што знайсці кампутары могуць часам запусціць з памяці і нават не захоўваць досыць вялікі радок. Але цяпер, давайце пачнем візуалізаваць радок як нешта ў гэтых скрынках тут. Так шэсць такіх скрынак, кожная з якіх ўяўляе знак ці "сімвал". Так нагадаем, што "сімвал" - з-ч-а-r-- з'яўляецца адзін з ўбудаваных тыпаў дадзеных у C. І што прыемна, што вы можаце выкарыстоўваць такога роду ў якасці будаўнічага блока, паззл, калі хочаце, каб сфармаваць больш тып дадзеных, якія мы будзем працягваць называць "радок". Цяпер, што карысна пра мысленне пра такія рэчы радкоў у гэтым выпадку? Ну, атрымліваецца, што мы можам на самай справе выкарыстаць гэтую структуру на самай справе доступ асобных сімвалаў ў даволі простым спосабам. Я збіраюся ісці наперад і ствараць файл з імем "stringzero.c," але вы можаце называць яго як заўгодна. І на сайце ходзе з'яўляецца Гэты прыклад ужо загадзя, так што вам не трэба увядзіце ўсе. І я збіраюся ісці наперад і спачатку зрабіць тап_п пустэчу. І на працягу некалькіх дзён, мы пачнем дражніць адзін ад аднаго што пустэча тут, чаму гэта Int побач з асноўным, і гэтак далей. Але цяпер, давайце працягнем скапіяваць ўставіць, што. Я збіраюся абвясціць радок пад назвай сек. І я збіраюся вярнуцца з GetString незалежна ад тыпу карыстальніка ст. Гэта збіраецца быць простым Праграма, ніякія інструкцыі, Я проста збіраюся слепа чакаць, што карыстальнік ведае што рабіць, каб захаваць яго простым. А цяпер я буду мець для завесы. А ўнутры майго для цыклу я будзе мець INT I атрымлівае нуль. І я, зноў жа, усяго толькі ўмоўнасць, індэксная пераменная для падліку, але я мог бы назваць гэта ўсё, што захачу. Я збіраюся зрабіць я менш than-- добра Імя Zamyla з'яўляецца доўгі шэсць літар. Так што я збіраюся цяжка код, які ёсць на дадзены момант. І тады я ++. А цяпер ўнутры іх кучаравыя брекеты я збіраюся зрабіць Printf, і я хачу, каб раздрукаваць адзін характар, у той час. Так што я збіраюся выкарыстоўваць% з для мабыць, упершыню. А потым я хачу, каб надрукаваць кожны характар ​​па сваёй уласнай лініі. Так што я збіраюся паставіць трохі касая рыса п існуе. Зачыніць цытата. А цяпер я хачу зрабіць што-то тут. Я хачу, каб раздрукаваць канкрэтных літара ў радку, с, як я ітэрацыі ад нуля на да шасці. Іншымі словамі, я хачу, каб раздрукаваць i-га характар ​​с. Зараз, як я магу гэта зрабіць? Ну так жа, як скрынак у гэта ўяўленне тут, выгляд, выклікаюць ва ўяўленні паняцце бокса літары ў, вы можаце так жа зрабіць гэта сінтаксічна ў C проста паказаўшы, Я хачу, каб раздрукаваць S: i-га характару. Выкарыстоўваючы квадратныя дужкі на клавіятуры кампутара што на клавіятуры ЗША з'яўляюцца як правіла, вышэй вашага вяртання ключа. Так што гэта не зусім правільна ўсё ж, як вы, напэўна, заўважылі. Але я збіраюся выгляду слепа ісці наперад тут. І я збіраюся зрабіць зрабіць радок 0. Але перш чым зрабіць гэта, давайце паглядзім, калі мы не можам прадбачыць некаторыя агульныя памылкі. Ці будзе гэта для кампіляцыі? Не, я прапускаю цэлую кучу рэчаў. Бібліятэкі я чуў. Такім чынам, якія файлы загалоўкаў можа я хачу дадаць тут? Так. АЎДЫТОРЫЯ: Вам трэба Стандарт I / O [неразборліва] David J. малая: Выдатна. Таму мне трэба стандартны ўвод / выснова. Для чаго Мэта я хачу стандартны ўвод / выснова? Для Printf. Так ўключаюць stdio.h. І вы таксама прапанаваць, каб я ўключыў Бібліятэка CS50 па якой прычыне? Каб мець радка. Такім чынам, мы будзем бачыць, што Бібліятэка CS50 у робіць Для стварэння гэтай паняцце радка. Але цяпер, вы можаце проста думаю пра яго, як фактычны тып дадзеных. Так што, здаецца, трохі ў парадак. А цяпер я збіраюся ісці наперад і сапраўды робяць радок 0. Укладальнік. Так што гэта добра. Так ./string0 дазвольце мне павялічыць таму мы можам см больш цесна, што адбываецца. Enter. Z-А-М-Y-L-уваходу. І мы раздрукавалі на імя Zamyla ст. Так што гэта вельмі добра. Зараз давайце ісці наперад і запусціць гэтую праграму зноў, і ўвядзіце з поўнае імя Daven ст. Сюрпрыз, сюрпрыз. Enter. Хм. Мы не друкуецца Daven сайт поўны імя правільна. Зараз гэта павінна быць відавочна ў рэтраспектыве з-за чаго, роду, па-дурному дызайнерскае рашэнне? Так, я жорстка шэсць ўнутры мой цыкл. Цяпер я зрабіў гэта толькі таму, што Я ведаў, што імя Zamyla ў павінен быў быць з шасці літар. Але, вядома, гэта не Агульнае рашэнне. Вось і атрымліваецца, мы можам дынамічна высветліць даўжыню радка патэлефанаваўшы функцыю з імем StrLen. Зноў жа, свядома лаканічна назваў проста каб зрабіць яго больш зручна набіраць. Але гэта сінонім атрыманне даўжыні радка. Я збіраюся вярнуцца ў маім тэрмінале акно і паўторна запусціце кампілятар. Але гэта на мяне гарлапаніць. Ускосна абвясціўшы бібліятэчную функцыю STRLEN з тыпам знака Int const-- Я згубіўся. Цалкам. Так, у прыватнасці, як свой вочы пачынаюць цьмянеюць з паведамленнямі пра памылкі, як гэта, фокусе сумленна на першых жа слоў. Мы ведаем, што праблема ў Лінія 8, як паказана тут. І гэта ў радку-0.c. Ускосна абвясціўшы Бібліятэчная функцыя STRLEN. Так, што, як правіла, збіраецца быць узорам паведамленняў пра памылкі. Ускосна абвясціўшы то. Карацей кажучы, тое, што ёсць я, здавалася, зрабілі ў адносінах да лініі 8, тут. Што можа быць рашэнне яшчэ калі вы ніколі не выкарыстоўвалі StrLen сябе? АЎДЫТОРЫЯ: Частка іншую бібліятэку? David J. малая: Частка з іншай бібліятэкі. Так ён абвешчаны, так бы мовіць. Пра гэта гаворыцца ў некаторым файле акрамя stdio.h і CS50.h. Зараз, дзе яна вызначаецца? Каб быць сумленным, вы павінны альбо проста ведаю, што гэта ад верхняй часткі галавы, ці вы Google гэта і высветліць. Ці гэта вы ведаеце, я адкрыў у CS50 абсталяванне, для тэрмінальнай праграмы, якія проста вялікі, поўны экран версія што ў ніжняй частцы акна GEdit ст. І атрымліваецца, што ёсць аналагічна лаканічным каманда, называецца чалавек для кіраўніцтва, дзе, калі вы ўводзіце Імя функцыі і націсніце Увод, вы атрымаеце назад даволі таямніцай дакументацыі. Гэта проста тэкст, які звычайна выглядае трохі нешта накшталт гэтага. Гэта крыху пераважная на першы погляд. Але шчыра кажучы, я збіраюся хай мае вочы цьмянеюць і акцэнтаваць увагу толькі на часткі Я клапачуся пра на дадзены момант. Што гэта. Які выглядае структурна, як тое, што я знаёмы з. Сапраўды старонка мужчына, так казаць, скажа вам, у тым, што загаловак файла функцыю як StrLen вызначаецца. Так што я збіраюся вярнуцца цяпер да Gedit. І я збіраюся ісці наперад і дадаць у тут #include і захавайце файл. Я збіраюся ачысціць экран з Кантроль L Калі Вам не цікава. І я збіраюся паўторна запусціць марку string.0, кампілюе гэты раз. ./string.0 Zamyla. Гэта, здавалася, працавала Адпусці мяне наперад і перагрузілі яго з Дэвенпорт. Enter. І гэта таксама, здавалася, працавала. Так што мы можам зрабіць трохі лепш, чым гэта, хоць, мы можам пачаць акуратныя рэчы да ўсяго толькі трохі. І я збіраюся на самай справе ўвесці яшчэ адну рэч цяпер. Я збіраюся ісці наперад і захаваць гэта ў іншы файл. І я буду называць гэты файл string1.c проста ў адпаведнасць з кодам Вы зможаце знайсці на сайце. І давайце засяродзіцца на сапраўды гэтак жа код. Атрымліваецца, што ў мяне ёсць быў выгляд ўзяцця як належнае той факт, што мой ноўтбук, і, у сваю чаргу, CS50 прылада ёсць шмат памяці, шмат RAM, шмат байт прасторы , У якім я магу захоўваць радка. Але рэальнасць, калі я набраў доўга дастаткова, і досыць націску клавішы, Я мог у тыпу тэорыі у больш сімвалаў чым мой кампутар фізічна мае памяць для. А гэта праблематычна. Многае, як Int можа толькі Колькасць так высока, у тэорыі, Вы можаце ўціснуць толькі так шмат сімвалаў ў АЗП або Random кампутара Доступу да памяці. Так ужо лепш прадбачыць гэтая праблема, нават хоць гэта можа быць рэдкі памежныя выпадкі, так бы мовіць. Не бывае, што часта, можа здарыцца. І калі гэта адбудзецца, і я не прадбачыць і праграма для яго, мая праграма можа рабіць, хто ведае што. Замарожванне, павесіць, перазагрузка, што заўгодна. Што чакаецца магло б здарыцца. Так што я збіраюся рабіць Цяпер, з гэтага часу сапраўды, з'яўляецца, перш чым я слепа выкарыстоўваць зменную як з, што быў прызначаны вяртаецца значэння некаторыя іншыя функцыі, як GetString, Я хачу пераканацца, што што яго значэнне з'яўляецца сапраўдным. Так што я ведаю толькі з прачытаўшы Дакументацыя CS50 для GetString, што ў канчатковым выніку мы пакажу вам на, што GetString вяртае спецыяльны сімвал называецца NULL, N-U-L-L ва ўсіх шапкі, калі што не так. Так звычайна, гэта вяртае радок. Але у адваротным выпадку, калі яна вяртае N-U-L-L-- мы ў рэшце рэшт паглядзець, што на самой справе азначае: гэта проста азначае, то дрэннае здарылася. Зараз гэта азначае, гэтак жа, як у пустым, Я магу праверыць стан тут у C, калі з не роўна NULL. Так што, калі вы не бачылі гэта раней, гэта проста азначае, ня роўнае. Так што гэта супрацьлегласць роўныя з роўнымі, якая, нагадаем, адрозніваецца ад аднаго роўная, што прызначэнне. Такім чынам, калі з не роўна NULL, толькі тады Я хачу, каб выканаць гэтыя радкі кода. Такім чынам, іншымі словамі, перш, чым я ныраць у слепа і пачаць ітэрацыі Больш чым, і яго апрацоўкі як быццам гэта паслядоўнасць персанажы, я збіраюся спачатку праверыць, пастойце, гэта ы вызначана не роўным гэтаму асаблівага значэння, NULL? Таму што калі гэта так, дрэнныя рэчы могуць здарыцца. І зараз, выкажам здагадку, што дрэнныя рэчы адбываецца значыць вашыя збой праграмы, і вы не можаце абавязкова аднавіць. Так шчыра кажучы, гэта выглядае больш гідкі. гэта накшталт заблытанай зараз зірнуць на. Але гэта стане больш знаёмыя ў бліжэйшы час. Але я збіраюся прапанаваць Цяпер адна паляпшэнне. Гэта паляпшэнне ў карэктнасці. Мая праграма ў цяперашні час больш правільна, таму што ў рэдкіх выпадках, калі не хапае памяці існуе, я буду звяртацца з гэтым, і я не буду проста нічога не рабіць. Я па крайняй меры не абрынецца. Але давайце зробім канчатковы варыянт тут. І файл з імем string2.c. Я збіраюся ўставіць, што Той жа самы код на імгненне, і я збіраюся вылучыць гэты Лінія, 11, тут, на імгненне. Цяпер рэальнасць такая, што разумныя кампілятары як Clang можа выправіць гэта для нас за кулісамі без нашага ня ведаючы. Але давайце падумаем пра гэта прынцыпова як праблемнай дызайну. Гэты радок кода з'яўляецца, вядома, кажучы, ініцыялізаваць некаторыя зменныя я да 0. Гэта даволі проста. І тое, што зноў гэта Заяву, тут, я ++, робіш? Мы бачылі гэта і раней, але мы сапраўды не гаварыць пра гэта. АЎДЫТОРЫЯ: Инкрементирование I. David J. малая: Инкрементирование я. Так на кожнай ітэрацыі праз гэты цыкл, кожны цыкл, Вы павялічваючы I на адзінку. Так што становіцца больш, і больш, і больш пакуль цыкл не завершыцца. Як гэта спыніць? Ну ёсць гэты сярэдні ўмова, якое мы выкарыстоўвалі раней. Вы бачылі і ў пакрокавыя ў P набору. Але што гэта выказванне? Зрабіце наступны цыкл так Пакуль я менш чым? АЎДЫТОРЫЯ: даўжыня радка. David J. малая: Даўжыня радка. Так яно перакладаецца даволі чыста на ангельскую мову ў гэтым сэнсе. Цяпер праблема заключаецца ў тым, што кожны раз, калі перабору гэтай завесы ў тэорыі, Я задаю гэтае пытанне. З'яўляецца я менш даўжыня радка з? З'яўляецца я менш даўжыня радка з? Зараз, я мяняецца на кожнай ітэрацыі? Гэта. З-за ++. Такім чынам, кожны ітэрацыі я становіцца ўсё больш. Але гэта з становіцца ўсё больш, або менш, або змены ўвогуле? Колькасць Так што ў плане дызайну, адной з восяў , Уздоўж якой мы спрабуем ацаніць код у класе, гэта адчувае выгляд па-дурному. Як вы літаральна, на кожнай ітэрацыі з гэтай завесы з просьбай ж па-чартоўску пытанне зноў, і зноў, і зноў, і ў літаральным сэнсе ён ніколі не зменіцца. Па крайняй меры, калі я не датыкаючыся з і спрабуе змяніць змесціва с. Так што я магу зрабіць трохі лепш, чым гэта. І тое, што я збіраюся зрабіць, гэта не абвясціць толькі адзін пераменная У, але другая пераменная я буду адвольна, але ўмоўна, назваць гэта н. Звязаць н роўная даўжыня радка с. А потым сюды, я збіраюся зрабіць разумны мала аптымізацыі, так сказаць, што ў рэшце рэшт няма правільней або не менш правільна чым раней. Але гэта лепш, дызайн. У тым, што я выкарыстоўваю менш часу, менш цыклаў працэсара, так казаць, каб адказаць тым жа пытанне, але толькі адзін раз. Любыя пытанні па гэтай генеральнага Прынцып ўдасканалення, кажуць, эфектыўнасць праграмы? Так? АЎДЫТОРЫЯ: Чаму вас выкарыстоўваць [неразборліва]? David J. малая: Добры пытанне. Дык чаму ж мы паставіць ++ на канцы я замест пачаткам I? У гэтым выпадку ён мае няма функцыянальнае ўздзеянне. І наогул, я, як правіла, выкарыстоўваць аператар постфиксную так што гэта крыху больш ясна, як , Калі аперацыя адбываецца. Для тых, хто незнаёмы, ёсць яшчэ адзін заявы, у якой вы маглі б зрабіць ++ I. Гэта функцыянальна эквівалентныя у гэтым выпадку таму што няма нічога іншага, вакол гэтага прырашчэння. Але вы можаце прыдумаць выпадкі і радкоў кода , У якім, што робіць розніцу. Дык увогуле, мы не нават казаць пра гэта. Бо, шчыра кажучы, гэта робіць вашу Код сэксуальней, і свайго роду плашч, і менш знакаў. Але рэальнасць такая, што гэта нашмат складаней, Я думаю, нават для мяне, каб абгарнуць свой розум вакол яго часам, парадак аперацый. Так як у бок, калі вы сапраўды не падабаецца гэта, хоць гэта накшталт сэксуальны гледзячы, вы таксама можаце зрабіць я + = 1, які з'яўляецца больш пачварная версія Тая ж ідэя для постфиксного прырашчэння. Я кажу гэта і вас павінны высмейваць яго, але вы прыйдзеце, каб убачыць код, то прыгожае ў бліжэйшы час. [Смех] David J. малая: справа? Так. Пытанне ў сярэдзіне. АЎДЫТОРЫЯ: Вы павінны сказаць Int N? David J. малая: Вы робіце ня трэба казаць Int N. Так, таму што мы ўжо казалі, Int, Вам не трэба, каб сказаць гэта зноў. Загвоздка ў тым, што н павінен быць таго ж тыпу дадзеных, як я. Так што гэта проста зручнасць тут. Так. АЎДЫТОРЫЯ: Ці можаце вы перайсці друку персанажа з кранштэйны я зноў? David J. малая: Абсалютна. Так% с, памятаеце з мінулага Час, гэта проста запаўняльнік. Гэта азначае паставіць сімвал тут. н зваротнай касой, вядома, толькі сродкі змясціць тут разрыў радка. Так што проста пакідае, зараз, гэты кавалак новага сінтаксісу. І гэта літаральна кажучы, захоп радок называецца с і пайсці атрымаць яго i-й сімвал, так бы мовіць. І я ўвесь час кажу i-й сімвал таму што на кожнай ітэрацыі гэтага цыклу гэта як калі б мы друкуем , Па-першае з кранштэйны 0, як праграміст можа сказаць. Тады S Кранштэйн 1, затым з кранштэйны 2, затым 3, затым 4. Але, вядома, гэта зменная, так што я проста выказаць гэта з г. Ключ, хоць, гэта ўсвядоміць, асабліва, калі вы не было акліматызацыі ў гэты свет праграмавання, дзе мы ўсе здаецца, лічацца ад нуля, павінен пачынацца з нуля, цяпер. Паколькі радкі, першы знак, г у Zamyla і да лепшага ці да горшага будзе жыць у кропцы нумар нуль. Добра, так што дазвольце мне прывесці нам сюды, каб Zamyla і паглядзець, што на самой справе адбываецца на пад капотам. Так што гэта паняцце прывядзення тыпу. Вы, магчыма, на самай справе гуляў з гэтым ужо, магчыма для хакера выданне P ўсталяваць адзін. Але прывядзенне тыпаў толькі ставіцца да здольнасць у C і некаторых іншых мовах для пераўтварэння аднаго тыпу дадзеных у іншы. Цяпер, як мы маглі б убачыць гэта даволі прамалінейна? Так што гэта, нагадаем, з'яўляецца пачаткам з ангельскага алфавіту. А кантэкст, успомніць, з як і тыдзень таму, ASCII. Амерыканскі стандартны код для абмену інфармацыяй. Якія гэта проста сапраўды доўгі шлях сказаць адлюстраванне з літар на нумары, і ад нумара на лісты. Так праз M тут, кропка кропка кропка, лініі с, нагадаем, дзесятковы лік 65 і вышэй. І мы не гаворым пра гэта відавочна, але напэўна ёсць падобна нумары для малых літар. І на самай справе, ёсць. Свет вырашыў некалькі гадоў таму, што крыху, ніжні рэгістр, будзе 97. І трохі б збіраецца быць 98, і гэтак далей. І для любой іншай клавішы на клавіятура, ёсць будзе аналагічная карціна бітаў. Або тое ж самае, дзесятковы лік. Так што пытанне ў бакі, тое, як мы можам на самай справе ўбачыць гэта пад капотам? Так што я збіраюся перайсці да Gedit зноў. І замест таго, тыпу гэта адзін з нуля, Я збіраюся ісці наперад і проста адкрыць то ад сённяшняга кода, які завецца ASCII нулявы. І ASCII нуля выглядае наступным чынам. Так што давайце абгарнуць нашы розумы вакол гэтага. Такім чынам, спачатку я пракаментаваў Код, які добры. Таму што гэта ў літаральным сэнсе распавядаў мне, чаго чакаць, адлюстроўваць адлюстраванне для загалоўнымі літарамі. Цяпер я нават не ведаю, што я маю на ўвазе, што, так што давайце вывесці. У ангельскай мове, можа быць, некалькі тэхнар англійская, што робіць лініі 18 з'яўляюцца , Робіць для нас? Проста лінія 18. Што гэта выклікаюць? Як гэта будзе, каб пачаць тут? АЎДЫТОРЫЯ: пятля. David J. малая: пятля. І колькі разоў што збіраецца паўтараць? АЎДЫТОРЫЯ: [устаўляючы ГАЛАСЫ] у шэсць разоў. David J. малая: Ня шэсць разоў. АЎДЫТОРЫЯ: 26 разоў. David J. малая: 26 разоў. Так, шкада. 26 разоў. Чаму? Ну, гэта трохі дзіўна, але Я пачаў адлік з 65. Што дзіўна, але не так. Гэта не дрэнна за, кажуць. І я раблю, што толькі таму, што для гэтага прыкладу, Я накшталт апярэджваючы што капітал быў 65. Зараз гэта не самы вытанчаны спосаб зрабіць гэта, каб роду жорсткі код ня эзатэрычныя значэння, што ніхто калі-небудзь чакаецца, памятаю. Але цяпер, звярніце ўвагу, што я рабіць гэта праз 65 плюс 26. Таму што, мабыць, я нават не хачу зрабіць арыфметыку ў маёй галаве. Таму я дам кампілятар гэта зрабіць. Але тады на кожным цыкле, кожная ітэрацыя завесы, я павялічваючы I. Так што цяпер гэта выглядае трохі загадкава. Але мы павінны мець асноўны будынак блокі з якой, каб зразумець гэта. % З проста запаўняльнік для гольца. % Я з'яўляецца запаўняльнікам для міжнар. І атрымліваецца, што з дапамогай гэтага Новы сінтаксіс, гэта ў дужках, так казаць, так тыпу дадзеных ўнутры дужак, Я магу прымусіць кампілятар для лячэння я не з'яўляецца цэлым лікам, а як сімвал. Тым самым паказваючы мне характар эквівалент гэтага ліку. Цяпер сюды, гэты код практычна ідэнтычныя. Я проста хацеў пераканацца, супер відавочны факт што я пачынаю на 97, які ніжні рэгістр. На праз 26 больш літар. І я doing-- зноў, кастынг я, так бы мовіць. Або тыпу кастынг я, так бы мовіць. З міжнар да гольца. Такім чынам, канчатковы вынік будзе, шчыра кажучы, інфармацыя, якую мы ўжо ведаем. Я збіраюся зрабіць ASCII-0 ня dot-- кропка ў. Звярніце ўвагу, вы, верагодна, зрабіў, што памылкай, паколькі я толькі што зрабіў выпадкова. Зрабіць ASCII-0. Цяпер я збіраюся зрабіць ./ascii-0. Я павелічэння, і, на жаль, ён збіраецца пракруткі з экрана. Але мы бачым цэлую дыяграму дзе карты да 97, б карты да 98, і калі мы пракруткі уверх далей Вядома, адлюстроўвае да 65. Такім чынам, гэта толькі, каб сказаць, што што мы прапаведавалі, ёсць гэтая эквівалентнасць, з'яўляецца на самай справе мае месца ў рэчаіснасці. Так хутка мадыфікацыя гэтага. Дазвольце мне адкрыць ASCII-1.c. І заўважце, гэтая разумная, накшталт з, растлумачэнне гэтага. Гэта ASCII-1.c, і заўважыць гэтую вар'ятку рэч. І гэта сапраўды дабіраецца да сэрца аб тым, што кампутары робяць. Нават пры тым, што мы, людзі б Не разлічвайце па letters-- Я не пачаць думаць, усё ў парадку, то б, і выкарыстаць іх, каб разлічваць фізічныя аб'екты. Можна, вядома, сказаць, што я хачу ініцыялізацыі некаторых зменную c-- але я мог бы назваць гэта anything-- так з ініцыялізуецца капіталу А. Таму што ў канцы дня, кампутара не важна, што вы захоўваеце, гэта толькі клапоціцца, як вы хочаце прадставіць гэтую інфармацыю. Як вы хочаце, каб кампутар інтэрпрэтаваць гэтую карціну бітаў? Так што гэта не тое, што я , Як правіла, рэкамендуюць рабіць. Гэта сапраўды проста прыклад, каб перадаць, што вы можаце абсалютна ініцыялізацыі цэлае да гольца. Таму што пад капот з гольца, вядома, гэта проста лік ад 0 да 255. Такім чынам, вы можаце, вядома, пакласці яго ўнутры ад міжнар. І тое, што гэта таксама дэманструе, што мы можа канвертаваць з аднаго тыпу ў іншы, тут, у канчатковым рахунку, друку і тое ж. І на самай справе, гэта я выпраўлю online-- павінен быў сказаць гэта, зноў жа, тут. Дазвольце мне ачысціць гэта онлайн, і мы будзем см у онлайн-кіраўніцтве па меры неабходнасці, , Што тут было нешта ёсць. Добра. Так, апошні прыклад зараз з удзелам а і Б, і тады мы прымаць рэчы на ​​прыступку вышэй. Так з і Б і C гадоў у капіталізацыі і эквівалентнасць іх, давайце зірніце на гэты прыклад, тут. Іншы прыклад кода. Мы адкрыем той, які ўжо зрабілі, таму мы не прыйдзецца ўводзіць яго усе з нуля. І заўважце, у чаканні мы выкарыстоўваем некалькі загаловак Файлы, сярод якіх наш новы сябар, string.h. Зараз гэта выглядае, на першы погляд, можа здацца загадкавым. Але давайце паглядзім, калі мы не можам разважаць праз тое, што тут адбываецца. Спачатку я атрымаць радок ад карыстальніка, і я паклаў гэты радок ў зменнай званыя сек. Скапіюйце пасту ад твару. У радку 22, я, мабыць, робіць менавіта тое, што Я зрабіў некаторы час таму, я ітэрацыі больш персанажаў с. І новыя трукі тут карыстаецеся Даўжыня радка, нязначныя аптымізацыі захоўваць даўжыню радка ў п, замест выкліку STRLEN зноў, і зноў, і зноў. І толькі пераканаўшыся, што я менш п. Цяпер вось, усё становіцца трохі цікава. Але гэта ўсяго толькі дадатак гэтай жа новай ідэі. Што ў Англійская робіць з кранштэйны я ўяўляю? АЎДЫТОРЫЯ: Падлік сябар характар ​​[неразборліва]. David J. малая: Падлік кожнага знака. І нават больш коратка, з кранштэйны Я ўяўляю, што? Ці можаце вы сказаць. Ці не паставіць вас на месцы тут. АЎДЫТОРЫЯ: Ну-- David J. малая: Так што, калі слова is-- калі радок Zamyla, якія starts-- АЎДЫТОРЫЯ: --вы справу з персанажы separately-- David J. малая: Добра. Дакладна. Запіс квадратная дужка дазваляе для доступу да кожнага характар ​​індывідуальна, так з кранштэйны 0 будзе Першы знак у радку. з кранштэйны 1 будзе другі, і гэтак далей. Так што пытанне, што я прашу, тут, у гэтым стане ёсць што? Ці з'яўляецца i-га характар ​​ов Вялікага або роўна ніжні рэгістр? І што гэта значыць, тут, з падвойнымі Ампэрсанд? АЎДЫТОРЫЯ (РАЗАМ): А. David J. малая: А. Гэта проста эквівалентна гэта. І не з'яўляецца ключавым словам у C, вы павінны выкарыстанне, раздражняльна, Ампэрсанд Ампэрсанд. І гэта, наадварот, просіць ёсць S: i-га сімвала меншым ці роўным у ніжні рэгістр г? І зноў, вось дзе Разуменне асноўных рэалізацыя Кампутар мае сэнс. Звярніце ўвагу, што, хоць у мяне ёсць кропка кропка кропка там, Падобна на тое, праз г у ніжнім рэгістры будуць ўсе сумежныя значэння да ад 97 і вышэй. І тое ж самае для верхняга рэгістра, пачынаючы з 65. Такім чынам, вынас, а затым, з'яўляецца тое, што ў ангельскай мове, як бы вы апісалі што лінія 24 робіць? Так? АЎДЫТОРЫЯ: 24 гэта правяраць, Ці кожны знак з'яўляецца маленькай. David J. малая: Гэта праверкі, ці з'яўляецца кожны персанаж з'яўляецца малая лiтара. Такім чынам, нават больш коратка, з'яўляецца i-й сімвал ов ніжні рэгістр? Вось і ўсё, што мы выказваючы тут лагічна, трохі загадкава, але у канчатковым рахунку, даволі прамалінейна. З'яўляецца S: i-га знака ў ніжнім рэгістры? Калі гэта так, і вось дзе рэчы атрымаць крыху ашаламляльныя на імгненне, калі так, то перайсці наперад і раздрукаваць характар. Так што гэта проста запаўняльнік, але тое, што характар? Чаму я гэта раблю з кранштэйна I мінус гэты выраз тут? Ну заўважыць карціну тут. Рэальныя лічбы не маюць значэння так шмат. Але звярніце ўвагу, што 97 з'яўляецца як далёка ад 65? АЎДЫТОРЫЯ: 32. David J. малая: 32. Як далёка знаходзіцца 98 з 66? АЎДЫТОРЫЯ: 32. David J. малая: Маленькая з ад вялікі C? 32. Такім чынам, ёсць 32 скачкоў з адзін ліст у іншую. Так адкрыта я, мог спрасціць гэта, што. Але тады я збольшага цяжка кадавання гэта разуменне нізкі ўзровень што ні адзін чытач не ніколі зразумеюць. Так што я збіраюся абагульніць яго як, я ведаю, што малыя літары буйней. Я ведаю, што загалоўныя літары з'яўляюцца меншыя значэння, па іроніі лёсу. Але гэта практычна эквівалентна кажучы адняць 32 з ов кранштэйна I. Такім чынам, у кантэксце іх літары, калі літары здараецца ,, у ніжнім рэгістры , І я адняць 32, які эфект гэта мае, матэматычна, на ніжні рэгістр? АЎДЫТОРЫЯ: Capitalizes-- David J. малая: загалоўным яго. І сапраўды, менавіта таму наш Праграма называецца выгаду нуля. Гэтая праграма небудзь капитализирует ліст, пасля праверкі, калі гэта сапраўды малая лiтара. У адваротным выпадку, у радку 30, што мне рабіць, калі гэта не малая лiтара, што я гледзячы на ​​на прыватнасці ітэрацыі у цыкле. Проста раздрукуйце яго. Так што не змяніць рэчы гэта нават не ў ніжнім рэгістры. Абмежаваць сябе трохі праз невялікі г. Зараз гэта даволі складаных. Але ў рэшце рэшт, гэта Так мы, аднойчы, было рэалізаваць рэчы. Калі я замест адкрытага выгаду адзін, пра слава богу. Там у функцыі закліканы верхняй, што можа зрабіць усё, што мы толькі што зрабілі на даволі нізкім узроўні. Зараз, каб верхняя цікава таму што ён заявіў у файле, і вы б толькі ведаю, што гэта шляхам праверкі дакументацыі, ці кажуць, скажам, у класе, дзе яна існуе, у файле з імем ctype.h. Так што гэта яшчэ адзін новы сябар. І каб верхняя робіць менавіта што прадугледжвае яго назву. Вы можаце перадаць у якасці аргументу, паміж гэтыя дужкі, то знак. Я збіраюся прайсці ў i-й сімвал з S з дапамогай нашага фантазіі новыя абазначэнні з удзелам квадратныя дужкі. І зрабіць здагадку, што гэта вяртанне Значэнне для верхняй па-відаць, адбываецца быць? Прапісную літару. Прапісную літару. Так што, калі я праходжу ў маленькай а, спадзяюся, па азначэнні, каб верхняя, ён збіраецца вярнуцца Прапісная А. У адваротным выпадку, калі гэта не маленькая літара ў першае месца, я проста раздрукаваць яго. І на самай справе, заўважыць Другі сябар тут. Не толькі, каб верхняя існуе, але ніжэй, якія на самай справе адказвае, што для мяне пытанне. Цяпер той, хто пісаў гэтыя рэчы, 10s гадоў назад, вы ведаеце, што? Рэалізаваныя ў верхняй і знізіць з дапамогай кода, як гэта. Але, зноў жа, у адпаведнасці з гэтая ідэя, абстрагуючыся ад, роду, ніжні ўзровень Дэталі рэалізацыі. І стаяў на плячах людзей хто быў да нас, з дапамогай функцыі як у верхняй і ніжняй, якія досыць дзіўна прыемна робяць імя сказаць, што яны робяць, з'яўляецца выдатны парадыгма прыняць. Зараз, атрымліваецца, што калі я чытаю старонка кіраўніцтва па, скажам, у верхняй, Я даведацца што-то яшчэ. Так чалавек TOUPPER. Гэта крыху пераважная. Але заўважце, вось што згадка пра Файл загалоўка, што я павінен выкарыстоўваць. Як у баку, таму што гэта ўводзіць у зман, функцыя выкарыстоўвае цэлымі замест сімвалаў па прычынах праверкі памылак. Але мы, магчыма, прыйсці вярнуцца да гэтага ў будучыні. Але звярніце ўвагу, тут, на верхнія нованавернутых літара з у верхні рэгістр, калі магчыма. Так што гэта даволі проста. А цяпер давайце быць трохі больш канкрэтнымі. Давайце паглядзім на часткі Чалавек старонкі пад вяртаецца значэння. Значэнне, вернутае ў тым, што ператворанага лісце. Або з, калі пераўтварэнне не атрымалася, дзе з з'яўляецца арыгінальным ўводу. Які я ведаю адсюль, з аргумент у верхняй. Так у чым жа вынас з гэтага? Значэнне, вернутае ў тым, што ператворанага лісты, або с, арыгінал ліста, калі пераўтварэнне не ўдалося. Што паляпшэнне я магу таму ўнесці ў дызайн майго кода ў? Так? АЎДЫТОРЫЯ: Вы можаце зняць яшчэ. David J. малая: я магу выдаліць яшчэ о, і не толькі іншае заяву. АЎДЫТОРЫЯ: Вы можаце выдаліць [неразборліва]. David J. малая: я магу выдаліць усю відэлец ў дарозе, калі яшчэ ў цэлым. Так сапраўды, дазвольце мне адкрыць Канчатковы варыянт гэтага, капіталізаваць-2 і звярніце ўвагу, наколькі, калі Вы, сэксуальная, код цяпер атрымлівае, у тым, што я зніжана з некаторых сем ці каля таго лініі да ўсяго чатыры, функцыянальныя магчымасці, якія я меў намер проста званок у верхняй, праходзячы ў ы кранштэйна I, і друку з, з запаўняльнікам% С, што асаблівы характар. Зараз магчыма, ёсць памылка, ці, па меншай меры рызыка памылкі, у гэтай праграме. Так што проста вярнуцца да больш ранняга вынас, што я павінен, верагодна, таксама зрабіць у гэтая праграма, каб зрабіць яго больш устойлівым, так што няма ніякага спосабу, ён можа крах, нават у рэдкіх выпадках? АЎДЫТОРЫЯ: Пераканайцеся, што гэта не NULL. David J. малая: Пераканайцеся, што гэта не NULL. Так на самай справе, каб зрабіць гэты супер уласна, я павінен зрабіць нешта падобнае, калі з не NULL, то ісці наперад і выканаць гэтыя радкі кода, якія Я магу то водступ так, , А затым пакласці ў маёй зачыняе фігурную дужку. Так добра звязваючы разам двух ідэй. Так? АЎДЫТОРЫЯ: Ці не маглі б вы выкарыстоўваць зрабіць у той час як завесы, а? David J. малая: Мог Я раблю рабіць падчас цыкла? АЎДЫТОРЫЯ: --вы хочаце, каб пераканацца, што вы на самай справе [неразборліва]. David J. малая: Мог Вы карыстаецеся рабіць падчас? Кароткі адказ, няма. Таму што вы збіраецеся ўвесці яшчэ кутняй выпадак. Калі радок мае нулявую даўжыню. Калі, напрыклад, я проста ўдарыў Калі ласка, увядзіце, ніколі не набраўшы Zamyla. Я збіраюся ўручыць вам назад фактычная радок, як мы будзем у канчатковым рахунку бачыць, што мае нулявыя сімвалы. Гэта ўсё яшчэ радок, гэта проста супер кароткія. Але калі вы выкарыстоўваеце зрабіць у той час, вы збіраецеся слепа паспрабаваць зрабіць тое з паважаць у гэтым радку, і нічога не будзе ёсць. АЎДЫТОРЫЯ: Ну, калі вы зрабілі зрабіць [неразборліва], а s-- David J. малая: О, я бачу, трымаеце атрымліваю радок ад карыстальніка. Так кароткі адказ, вы можа, і трымаць прыставаць іх, каб даць вам радок вось досыць кароткім, каб змясціцца ў памяці. Абсалютна. Я проста вырашыў не. Калі яны не даюць мне радок уводу хочаце, Кідаю, я здаюся. Але абсалютна, для гэтай мэты, Вы маглі абсалютна зрабіць гэта. Так файлы загалоўкаў бібліятэкі, што мы цяпер знаёмыя з такія, тут. Стандартны ўвод / выснова, CS50.h, string.h, ctype.h, і ёсць, на самай справе, іншыя. Некаторыя з вас выявілі Матэматычная бібліятэка math.h, Але дазвольце мне прадставіць вам, зараз, каб гэта рэсурс, які персанал CS50, Дэвин, і Роб, і Гейб прыватнасці сабралі. Гэта хутка спасылаюцца на сайт Курсу. Яна называецца CS50 спасылка. Які проста каб даць вам хуткі Смак гэтага, працуе наступным чынам. Пусціце мяне да reference.cs50.net. Вы ўбачыце на левай руцэ бок з велізарным пералікам функцый, якія прыходзяць з в. Але калі я ўсё роўна, на дадзены момант, пра што-то накшталт STRLEN, Я магу надрукаваць яго там. Ён фільтруе спіс ўніз толькі тое, што мяне хвалюе. Я збіраюся націсніце яго. А цяпер злева, вы ўбачыце, што мы спадзяемся, з'яўляецца больш простым, чалавечым прыязны тлумачэнне таго, як гэтая функцыя працуе. Вяртае даўжыню радка. Вось кароткі агляд, вось як вы выкарыстоўваць яго ў тэрмінах файла загалоўка, і ў плане таго, што функцыі Падобна на тое, з пункту гледжання сваіх аргументаў. А потым тут, вяртаецца даўжыня радка. Але для тых з вас, больш камфортна, Вы можаце фактычна націсніце больш зручнай, і змест гэтага старонка, зараз, зменіцца быць значэнні па змаўчанні што Вы атрымліваеце, выкарыстоўваючы старонку дапамогі. Іншымі словамі, CS50 спасылка спрашчэнне старонак кіраўніцтва па персаналу, для студэнтаў. У прыватнасці, тых, менш знаёмыя і паміж імі, так што вы не павінны спрабаваць абгарнуць ваш розум вакол, шчыра кажучы, некаторыя даволі загадкавым сінтаксіс і дакументацыя то. Так што майце гэта на ўвазе, ў апошнія дні. Дык вось, зноў жа, з'яўляецца Zamyla. Давайце зараз задаць пытанне вось трохі больш чалавечага даступныя. Дзякуючы Чанг, хто быў друк больш сланоў без прыпынкаў на працягу апошніх некалькіх дзён. У нас ёсць магчымасць даць па меншай меры, адзін з іх жа. Калі б мы маглі атрымаць толькі аднаго валанцёра прыйсці на да маляваць на экране. Як тут? Падымайцеся. Як цябе завуць? ALEX: Алекс. David J. малая: Алекс. Добра. Алекс, давай до. Мы збіраемся, каб убачыць ваш рукапіснага тэксту на экране тут. Добра, прыемна пазнаёміцца. ALEX: Добры вы сустрэцца з вамі. David J. малая: Добра. Так, супер простае практыкаванне. Бар не з'яўляецца высокай, каб атрымаць слана сёння. Вы граеце ролю GetString. І я збіраюся проста сказаць вам, радок, калі вы атрымалі. І выкажам здагадку, што вас, GetString, былі названыя. І чалавек, як і я, мае ўвялі ў Zamyla, Z-A-Y-M-L-A. Проста ісці наперад і напісаць Zamyla на Экран, як быццам вы атрымалі яго і захоўваецца яе ў памяці ,. Пакідаючы месца для таго, што будзе некалькі іншы words-- гэта нармальна, працягвайце ісці. [Смех] Так Zamyla, Выдатна. Так цяпер, што вам, GetString, называюцца зноў. І таму, я даць вам, у клавіятура, з іншым імем, Белинда. Добра. І цяпер у наступны раз GetString з'яўляецца называецца, я друкую ў нешта накшталт Гейба, Г-А-В-Е. Вы сапраўды прымаючы з сардэчна-памяці з адвольным доступам. Які малюнак ўсе цалкам выпадкова. Добра. [Смех] ALEX: На жаль мой почырк дрэнна. David J. малая: Не, гэта нармальна. А як наконт Роба, R-O-B. Добра. Добра. Так што я не чакаў, вам будзе роду ляжалі рэчы такім чынам. Але мы можам зрабіць гэтую працу. Так як жа вы ідзяце па нагоды кладкі з гэтых знакаў у памяці? Іншымі словамі, калі мы думаем пра гэта прастакутны чорны экран як прадстаўляюць кампутара RAM, або памяці. І нагадаць, што аператыўная памяць толькі цэлая куча байтаў, і байты цэлая куча біт. І біты так ці інакш рэалізаваны, як правіла, з некаторай формай электрычнасць на апаратным узроўні. Так што свайго роду напластаванне мы гаварылі пра і цяпер можа прымаць як належнае. Як вы ісці аб вырашыць, дзе напісаць Роб супраць Гейб супраць Белинда супраць Zamyla? ALEX: Я толькі што зрабіў гэта ў замовіць, што вы сказалі мне. David J. малая: І то дакладна. Але тое, што рэгулюецца, дзе вы паклалі Імя Белинды і імя Гейба? ALEX: Нічога? David J. малая: [Смяецца] Так што працуе, гэта нармальна. Так кампутары трохі больш спарадкаваны, чым гэта. І таму, калі мы implement-- застацца там на працягу толькі moment-- калі мы на самай справе ажыццявіць нешта падобнае GetString ў кампутары, Zamyla можа быць выкладзены ў значнай ступені як вы рабілі на экране, ёсць. І тое, што з'яўляецца ключом да заўважыце тут, што Алекс зрабіў, ёсць гэта свайго роду дэмаркацыі сярод кожнага з гэтых слоў, ці не так? Вы не пісаў Z-А-М-Y-L-А-В-Е-Д-І-Н-Д-А-Г-А-В- іншымі словамі, ёсць свайго роду дэмаркацыйная які, здаецца ,, роду, выпадковая адлегласць паміж гэтымі рознымі словамі. Але гэта добра, таму што мы, людзі, можам цяпер сабе, што гэта чатыры розных радкоў. Гэта не проста адна паслядоўнасць мноства знакаў. Такім чынам, кампутар, то, між тым, можа заняць радок як Zamyla, пакласці кожны з гэтых лістоў ўнутры байта ў памяці. Але гэты лік нашмат больш, Вядома, чым шасці знакаў. Там цэлая куча памяці. І гэтак далей, гэта Сетка каробак збіраецца ўяўляць, што Алекс проста зрабіў тут на экране. А цяпер, Алекс, мы можам прапанаваць вам сіні або аранжавы слон з Чанг. ALEX: Я вазьму сіні слон. David J. малая: сіні слон. Так вялікае апладысменты, калі б мы маглі, для Алекса тут. [Апладысменты] ALEX: Дзякуй. David J. малая: Дзякуй. Такім чынам, вынас ў тым, што, нягледзячы на ​​тое, ўзор выгляд змяніўся з цягам часу, тут на борце, там быў гэты дэмаркацыя паміж рознымі радкамі што Алекс атрымаў для нас. Цяпер кампутары, шчыра кажучы, можа зрабіць тое ж самае. Яны маглі роду пляснуць радкі ў любым месцы ў памяці. Тут, наверсе, тут, сюды, сюды. Яны маглі зрабіць менавіта гэта. Але, вядома, гэта верагодна, не лепшае планаванне. Дакладна? Калі я пытаўся Алекса атрымаць імёны, верагодна, ён паставіць яшчэ некалькі тут, можа быць, да тут, тут, тут, у рэшце рэшт, сюды. Але з планавання трохі больш, вядома, мы маглі закласці рэчы больш акуратна. І на самай справе, гэта тое, што кампутар робіць. Але загваздка ў тым, што калі наступная радок я атрымліваю пасля Zamyla нешта як Белинда, прапанаваць, дзе мы маглі б напісаць Ліст б у адносінах да гэтай сетцы? Куды б вы адправіліся? Для справа ад A, ніжэй г, ніжэй а? Што б вашы першыя інстынкты быць? АЎДЫТОРЫЯ: Ніжэй г. David J. малая: Так ніжэй г. І гэта ў значнай проста, ці не так? Гэта збольшага ахайна, гэта тое, што мы робім на клавіятуры, калі мы трапілі Enter, або па электроннай пошце, робячы маркіраваны спіс рэчаў. Але рэальнасць такая, што кампутары паспрабаваць быць больш эфектыўным, і ўціснуць вядома столькі дадзеных у аператыўнай памяці, наколькі гэта магчыма, так што вам не трэба марнаваць ніякіх байт. Так што вам не трэба марнаваць любы экран нерухомасці. І праблема, аднак, заключаецца ў тым, што калі мы літаральна паклаў ліст б пасля, як мы збіраемся ведаць, дзе сканчаецца імя Zamyla ў і імя Белинды пачынаецца? Дык вы, людзі, толькі што прапанаваў, ну, націсніце клавішу ўводу, істотна. Пакладзі яго ніжэй. Або нават, як зрабіў Алекс, проста пачаць пісаць імя наступнага ніжэй папярэдняга, і ніжэй, што адзін, і Затым ніжэй за тое. Гэта візуальны сігнал. Кампутары ёсць яшчэ адзін візуальны сігнал, але гэта крыху больш лаканічным. Менавіта гэты баязлівы характар. Зваротная касая рыса 0, якая, магчыма, нагадвае зваротнай касой п, і гэтак далей, у цяперашні час. Спецыяльныя кіраўнікі паслядоўнасці. Зваротная касая рыса 0 з'яўляецца спосаб якія прадстаўляюць восем нуль біт запар. 0000 0000. Тое, як вы выказаць гэта не азначае, трапіў у лік нуль на клавіятуры, таму што ў тым, што ўяўляе сабой ASCII-сімвал. Гэта выглядае як лік, але на самай справе гэта дзесятковы лік што ўяўляе сабой цыркуляр Сімвал, кругавая шрыфт. Між тым, зваротны слеш нуль азначае, літаральна пакласці восем нуль байт тут для мяне. Так што гэта некалькі адвольна. Мы маглі б выкарыстоўваць любы ўзор бітаў, але свет вырашыў некалькі гадоў таму, што для прадстаўлення канец радка ў памяці, проста паставіць цэлую кучу нулёў. Таму што мы можам выявіць, што. Зараз гэта азначае, што няма літара алфавіту могуць быць прадстаўлены нулямі. Але гэта не страшна, мы ўжо бачылі што мы выкарыстоўваем 65 на да ў 97 і вышэй. Мы нічога не дала зачыніць для ўсіх нулёў. Так Белинды ў памяці кампутара на самай справе адбываецца, каб пайсці сюды. Я намаляваў яго ў жоўты проста каб прыцягнуць нашу ўвагу да яго. І заўважце, таксама гэта цалкам адвольна. Я намаляваў яе ў выглядзе сеткі. Як, АЗП толькі некаторыя фізічны аб'ект. Гэта не абавязкова радкоў і слупкоў, як такой. Гэта проста ёсць цэлая куча байтаў рэалізаваны ў апаратных сродках ці інакш. Але калі пасля Belinda I набраў у імя Гейба, ён будзе ў канчатковым выніку тут, у памяці, і калі я набраў у імя Daven ў, напрыклад, ён будзе ў канчатковым выніку тут. І я магу працягваць напісаць нават некалькі імёнаў. На жаль, калі я спрабую напісаць супер доўгае імя, Я ў канчатковым выніку можа не хапіць памяці. У гэтым выпадку, GetString з'яўляецца збіраецца вярнуць NULL, як мы ўжо казалі. Але, на шчасце, па меншай меры, у гэта візуальная тут, мы не дабіраліся так далёка. Цяпер тое, што прыемна, што гэта Агульная ідэя лячэння рэчы як у скрынках з'яўляецца Прадстаўнік асаблівасць C і шмат моў, Вядома, у выглядзе масіва. Масіў ўяўляе сабой іншы тып дадзеных. Гэта структура дадзеных, калі вы будзеце. Структура ў сэнсе яго сапраўды, выгляд, падобны на скрынку, па меншай меры, у вашым уяўленні. Масіў ўяўляе сабой бесперапынны паслядоўнасць аднолькавых тыпаў дадзеных, спіна да спіны да спіны да спіны. Так радок, у іншым словы, уяўляе сабой масіў знакаў. Масіў знакаў. Але, аказваецца, у вас можа быць масівы гроздья рэчаў. На самай справе, мы можам паставіць нават лікі ў масіве. Так, у якой форме мы збіраемся пачаць заяўляюць, што гэта дадзеныя Структура вядомыя як масіў таксама збіраецца выкарыстоўваць квадратныя дужкі. Але гэтыя квадратныя дужкі збіраецеся маюць рознае значэнне ў гэтым кантэксце. І давайце паглядзім яго наступным чынам. Выкажам здагадку, што я адкрыў да новага файла тут. І я захаваць гэта як ages.c. І я выратую гэта ў маёй тэчцы тут. А цяпер я збіраюся ісці наперад і пачаць друкаваць тое як уключыць CS50.h, ўключаюць stdio.h, тап_п пустэчу. А потым ўнутры тут, я хачу спачатку мець Int званы ўзрост. І я збіраюся выкарыстоўваць гэта, каб атрымаць Int ад карыстальніка для яго ўзросту. Але гэтая праграма прызначана для выкарыстання некалькі чалавек, для любым кантэксце. У мяне ёсць чарга людзей. Усе яны павінны ўвесці іх ўзрост, магчыма, некаторыя, я не ведаю ,, канкурэнцыя, або падзея што яны прыбылі для. Так што ў наступны чалавек, я трэба яшчэ адну зменную. Таму што, калі я проста раблю ўзрост атрымлівае GetInt, гэта збіраецца калашмаціць, або перапісаць ўзрост папярэдняга чалавека. Так што няма нічога добрага. Так мой першы інстынкт можа быць, пра, усё ў парадку, калі я хачу, каб атрымаць некалькі народных ages-- давайце назавем гэты age1, Int age2 атрымлівае Int, Int Age3 атрымлівае GetInt. А цяпер я збіраюся выкарыстоўваць некаторыя псевдокод код тут. Дзеянні, прадугледжаныя гэтымі лічбамі. Мы пакінем на другі дзень, што мы там робім, таму што мы толькі сыход на дадзены момант аб age1, age2, Age3. На жаль, як толькі я скампіляваць гэтую праграму і паклаў яго перад рэальных карыстальнікаў, што прынцыпова дрэнны дызайн Рашэнне я, здаецца, зрабілі? Так? АЎДЫТОРЫЯ: [неразборліва] David J. малая: Так, Я нават не спрабаваў каб высветліць, як шмат стагоддзяў я на самой справе хвалюе? Калі ў мяне ёсць менш трох чалавек тут, і, такім чынам, менш за тры узростаў, Я ўсё яшчэ слепа чакалі тры. Не дай Бог, чатыры чалавекі з'яўляюцца. Мая праграма проста не будзе нават падтрымліваць іх. І такім чынам, гэта, доўгая гісторыя Карацей кажучы, гэта не вельмі добрая звычка. Дакладна? Я быў па сутнасці капіявання і ўставіць код і проста налады імёны зменных. І, мой бог, калі ў вас, не тры узростаў, але 10 або 100, ці нават 6500 магістрантаў, напрыклад. Гэта не збіраецца быць асабліва элегантны код, або ўстойлівае. Вы будзеце мець, каб перапісаць праграму кожны раз, ваш колькасць людзей змены. Так, на шчасце, у наш фактычнае ages.c файл на сёння, у нас ёсць больш разумнае рашэнне. Па-першае, я збіраюся пазычаць пабудаваць мы выкарысталі некалькі разоў, гэта зрабіць, у той час цыклу, з тым каб атрымаць колькасць людзей у пакоі. Я проста збіраюся прыставаць да карыстальніка, зноў і зноў, пакуль ён або яна дае мне значэнне п, што гэта станоўчае цэлае лік. Я мог бы выкарыстаць, у мінулым Час пяройдзем станоўчы Int. Але мы не маем, што па-сапраўднаму, таму я пайшоў наперад і зноў рэалізавалі гэтую ідэю. Цяпер сюды, гэта новы трук. У радку 27, як і заўвагі ў лініі 26 мяркуе, абвясціць масіў, у якім для захоўвання ўзрост кожнага. Так што калі вы хочаце атрымаць, не адзін Int, ня два цэлых, але цэлая куча цэлымі. У прыватнасці н цэлыя, былі н моцы быць тры, можа быць 100, можа быць 1000. Сінтаксіс, папросту кажучы, з'яўляецца скажам, які тып дадзеных вы хочаце? Што вы хочаце патэлефанаваць што частка памяці? Што вы хочаце патэлефанаваць сетку што выглядае так вобразна? І ў дужках тут, вы кажаце, як вялікі Вы хочаце масіў, каб быць. І так раней, калі я сказаў, Сінтаксіс трохі адрозніваецца тут, мы да гэтага часу з дапамогай квадратных дужак, але калі я абвяшчаю масіў, лік ўнутры Квадратныя дужкі сродкі наколькі вялікая вы хочаце масіў, каб быць. Наадварот, калі мы выкарыстоўвалі S Кранштэйны я хвіліну назад, з, радок, на самай справе масіў сімвалаў, але калі вы не аб'яву зменнай, як з гэтым ключавым словам тут, вы проста атрымліваць канкрэтнай індэкс, пэўны элемент з гэтага масіва. Пасля таго, як мы ведаем, што, астатнія гэта вельмі проста. Калі новая я першы буду раздрукаваць што ўзрост чалавекі колькасці I. Дзе я толькі што сказаў чалавек нумар адзін, чалавек нумар два, чалавек нумар тры. І я проста раблю арыфметыку, так што, як нармальныя людзі, лічыць з варыянтам Праграма, а не ад нуля. Тады я называю GetInt, але я захоўваю адказ ва ўзросце дужкі I. Які i-га ўзрост у масіве. Так у той час як апошні раз мы былі лячэнні гэтыя скрынкі як сімвалаў для назвы Zamyla ў, і іншыя. Зараз, гэтыя прастакутнікі ўяўляюць 32 біта, ці чатыры байта , У якім мы можам захоўваць Int, Int, Int. Усё гэта, зноў жа, той жа тып дадзеных. Цяпер я раблю глупства, як праходзіць час, проста каб апраўдаць напісання гэтай праграмы. А потым сюды, я зноў ітэрацыі па масіве кажучы праз год, чалавек нумар адзін воля быць лішнім гадоў. І высветліць, што math-- Я маю на ўвазе, гэта не вельмі складана arithmetic-- Я проста дадаць адзін з іх узростам. Проста каб паказаць, зноў жа, гэта. Гэтак жа, як я магу Індэкс ў радок, з, так я магу Індэкс ў масіве узростаў, як што. Дык дзе ж гэта будзе браць нас? Такім чынам, мы ўбачым, у канчатковым рахунку, некалькі рэчаў, у бліжэйшыя дні. Адзін, увесь гэты час, калі пісаць уласныя праграмы, як Марыё, прагі і крэдыт. Ты ўводзіць імя праграма і ўдару Enter. І тады становіцца ўвод карыстальніка. З GetString, GetInt, getLongLong, ці таму падобнае. Але аказваецца, што падтрымлівае Сі тое, што называецца каманднага радка Аргументы, які ідзе, каб дазволіць нам на самой справе атрымаць на словы, якія вы друкуеце, на неонавы радку пасля назвы вашай праграмы. Такім чынам, у бліжэйшыя дні, вам можна ўвесці нешта накшталт Цэзара, або ./caesar лік 13, пасля гэтага. Паглядзім, як гэта працуе. Таму што сапраўды, у Праблема ўсталяваць два, мы збіраецца пазнаёміць вас у маленькі-то нагадвае Рэлфи выклік раней картаграфіі. Мастацтва караскацца інфармацыю. Гэта, па сутнасці, з'яўляецца вельмі нагадвае, што зрабіў Ralphie. Гэта прыклад шыфравання Алгарытм называецца rot13, R-O-T 13. Што азначае проста павярнуць літары ў алфавіце 13 месцаў. І калі вы гэта зробіце, вы ўбачыце зараз што гэта, мабыць, знаёмая фраза. Але тое, як мы збіраемся выкарыстаць гэта, у канчатковым рахунку, з'яўляецца ў цэлым. У P ўсталяваць два, у стандартнай версіі, вы рэалізуеце некалькі шыфраў, адна называецца Цэзар, адзін называецца Vigenere. Абодва яны з'яўляюцца кручэння шыфры, у тым, што так ці інакш вы ператварыць адну літару ў іншай літарай. І Цэзар супер проста. Вы дадаеце адзін, вы дадаеце 13, або некаторы лік да 26. Vigenere робіць, што на за лістом асновай. Так Vigenere, як вы ўбачыце у спецыфікацыі, з'яўляецца больш бяспечным. Але ў канцы дня, што Вы будзеце рэалізацыі і P ўсталяваць два, з'яўляецца тое, што ключ, які вы выкарыстоўваеце абодва для шыфравання і дэшыфраванні. Спасылаючыся на працэс ператварэння звычайны тэкст, некаторыя зыходнае паведамленне, у шыфравальшчыка тэксту, які гэта тое, у зашыфраваным выглядзе. А потым расшыфроўкі яго зноў. У хакерскай выданні, Між тым, вы будзеце даручана нешта падобнае у духу, дзе мы дамо вам файла, ад тыповага Linux ці Mac або Unix кампутар называецца Etsy пароль, які змяшчае ўсю куча імёнаў карыстальнікаў і пароляў. І гэтыя паролі ёсць усе быў зашыфраваны, або хэш, так бы мовіць, больш правільна як вы ўбачыце ў спецыфікацыі. І хакер выданне будзе аспрэчваць Вы з прыёмам ўваход, як гэта, і ўзлому пароля. Гэта значыць, высветліць, што пароль Чалавека на самай справе. Таму што, сапраўды, паролі як правіла, не захоўваюцца ў адкрытым выглядзе, і наогул паролі павінна быць цяжка здагадацца. Гэта не часта бывае. І тое, што я думаў, што мы зрабіць, гэта заключыць з пару хвілін Погляд на асабліва бедны выбар пароляў з фільма вы, магчыма, памятаеце пяшчотна. А калі не, вы павінны арандаваць. [ВИДЕОВОСПРОИЗВЕДЕНИЕ] -Helmet, Вы злыдзень, што адбываецца? Што ты робіш з маёй дачкой? -Permit Мне прадставіць бліскучы малады пластычны хірург, Доктар Філіп Schlotkin. Найбольшы праца носа чалавек у Уся сусвет і Бэверлі-Хілз. -Ваш Высокасць. -Nose Праца? Я не разумею. Яна ўжо была праца нос. Гэта было яе салодкі 16 прысутнічае. Не, гэта не тое, што вы думаеце. Гэта значна, значна горш. Калі вы не даяце мне Спалучэнне з паветра шчыта, Лекар Schlotkin дасць свой дачка назад свой стары нос. - [Уздыхае] Nooooooooooooo. Дзе ты гэта ўзяў? -Усе Ў парадку. Я скажу, я скажу. Не, тата, няма. Вы не павінны. -Ты Права мая дарагая. Я буду сумаваць па вашай новай нос. Але я не скажу ім у Спалучэнне ні на што. -Добра. Доктар Schlotkin, справа ваша. -Мой Задавальненне. -NO! Пачакайце, пачакайце. Я скажу. Я скажу. -I Ведаў, што гэта будзе працаваць. Добра, дайце яго мне. Даследаваны спалучэнне з'яўляецца адным. -адзін. -адзін. -Два. -Два. -Два. -Тры. -Тры. -Тры. -чатыры. -чатыры. -чатыры. -Пять. -Пять. -Пять. -так Спалучэнне з'яўляецца адным, два, тры, чатыры, пяць. Гэта самая дурная камбінацыя Я калі-небудзь чуў у сваім жыцці. Гэта тая рэч, ап ідыёт будзе мець на сваім багажы. Дзякуй, ваша высокасць. [ДК CLICKS] -што Ты зрабіў? -I Выключыў сцяну. Не, вы гэтага не зрабілі, вы выключаны ўвесь фільм. -I Павінна быць, націснуў не тую кнопку. Ну, паклаў яго назад на! Пакладзеце відэафільм на! Так, сэр! Так, сэр. -Давай Ісці, Арнольд. Прыходзьце, Гретхен. Вядома, вы ведаеце, я буду павінны выставіць вам рахунак за гэта. Ну? Гэта спрацавала? Дзе цар? -It Працаваў, сэр, мы маюць камбінацыю. -Великолепная. Цяпер мы можам выкарыстоўваць любую апошні ўздых свежага паветра з планеты Druidia. Што камбінацыя? -адзін, Два, тры, чатыры, пяць. -адзін, Два, тры, чатыры, пяць? Так. -Гэта Дзіўна. У мяне тое ж самае Спалучэнне на маім багажы. Падрыхтуйце SpaceBall 1 для неадкладны выезд. Так, сэр. -І Змяніць Спалучэнне на маім багажы. [Закрыцця дзверцы SOUND] [CLINK ДЗВЯРЭЙ ПАРАЗЫ шлем] -Ahh. [END ВИДЕОВОСПРОИЗВЕДЕНИЕ] David J. малая: Вось менавіта для CS50, ўбачымся на наступным тыдні. Апавядальнік: І зараз, Deep Думкі, па Daven Фарнэме. Daven FARNHAM: Кадаванне ў C з'яўляецца так значна цяжэй, чым нуль. Е, драпін, было хлуснёй. [Смех SOUNDBITE]