>> [МУЗИКА ГРАЄ]
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-й символ ов нижній регістр?
От і все, що ми висловлюючи тут логічно,
трохи загадково, але в кінцевому рахунку, досить прямолінійно.
Є S: i-го символу в нижньому регістрі?
>> Якщо це так, і ось де речі отримати трохи запаморочливим
на мить, якщо так, то перейти вперед і роздрукувати характер.
Так що це просто заповнювач, але те, що характер?
Чому я це роблю з кронштейна I мінус цей вираз тут?
>> Ну помітити картину тут.
Реальні цифри не мають значення так багато.
Але зверніть увагу, що 97 є як далеко від 65?
>> АУДИТОРІЯ: 32.
>> David J. Малан: 32.
Як далеко знаходиться 98 з 66?
>> АУДИТОРІЯ: 32.
>> David J. Малан: Маленька з від великої C?
32.
Таким чином, є 32 стрибків з один лист в іншу.
Так відверто я, міг спростити це, що.
Але тоді я почасти важко кодування це розуміння низький рівень
що жоден читач не ніколи зрозуміють.
Так що я збираюся узагальнити його як, я знаю, що малі літери крупніше.
Я знаю, що заголовні літери є менші значення, за іронією долі.
>> Але це практично еквівалентно кажучи відняти 32 з ов кронштейна I.
Таким чином, в контексті їх букви, якщо букви
трапляється ,, в нижньому регістрі , І я відняти 32,
який ефект це має, математично, на нижній регістр?
АУДИТОРІЯ: Capitalizes--
David J. Малан: заголовним його.
І дійсно, саме тому наш Програма називається вигоду нулю.
Ця програма або капіталізує лист,
після перевірки, якщо це дійсно мала літера.
В іншому випадку, в рядку 30, що мені робити, якщо це не рядкова буква, що я
дивлячись на на зокрема ітерації в циклі.
Просто роздрукуйте його.
>> Отже не змінити речі це навіть не в нижньому регістрі.
Обмежити себе трохи через невеликий р
Тепер це досить складних.
Але врешті-решт, це Так ми, якось,
було реалізувати речі.
Якщо я замість відкритого вигоду один, про слава богу.
Там у функції покликаний верхньої, що може
зробити все, що ми тільки що зробили на досить низькому рівні.
>> Тепер, щоб верхня цікаво бо він заявив в файлі,
і ви б тільки знаю, що це шляхом перевірки документації,
або говорять, скажімо, в класі, де вона існує, у файлі з ім'ям 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]