1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [МУЗИКА ГРАЄ] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 David J. Малан: Добре. 5 00:00:12,230 --> 00:00:16,440 Це CS50, і це це кінець тижня 2. 6 00:00:16,440 --> 00:00:18,480 Отже, сьогодні, ми збираємося продовжити наш огляд 7 00:00:18,480 --> 00:00:21,150 на те, як ми представляємо речі під Витяжка-- відходячи 8 00:00:21,150 --> 00:00:23,520 від номера, як цілих і плаваючою комою 9 00:00:23,520 --> 00:00:26,810 і зосередження уваги на рядки і в кінцевому рахунку, більш цікаві програми. 10 00:00:26,810 --> 00:00:30,140 Але ми також поглянемо на Пару предметно-орієнтованого problems-- 11 00:00:30,140 --> 00:00:33,620 перший з яких бути за участю криптографії, 12 00:00:33,620 --> 00:00:36,570 мистецтво дертися інформацію, , В якому ви бачите вище тут 13 00:00:36,570 --> 00:00:41,480 картина Радіо Сирота Енні Секрет декодер кільце з минулого. 14 00:00:41,480 --> 00:00:46,490 >> Це насправді дуже примітивна форма і для дітей форма cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 причому це кільце має два disks-- один всередині і один зовні. 16 00:00:50,590 --> 00:00:54,740 І, обертаючи один з тих, ви можете істотно шикуються письма як 17 00:00:54,740 --> 00:00:59,520 через Z з іншими буквами як B через А. Іншими словами, 18 00:00:59,520 --> 00:01:03,730 Ви можете буквально повернути алфавіт, тим самим придумувати відображення з 19 00:01:03,730 --> 00:01:07,820 письма букв, так що, якщо ви хотів послати секретне повідомлення 20 00:01:07,820 --> 00:01:11,820 кому то подобається Енні, ви могли б написати вниз ваше повідомлення, і потім поверніть 21 00:01:11,820 --> 00:01:15,370 букви, в результаті чого, якщо ви маєте на увазі сказати "А", ви замість сказати "B" 22 00:01:15,370 --> 00:01:17,280 Ви хочете сказати, "B" Ви замість сказати "C" - 23 00:01:17,280 --> 00:01:20,240 або щось більш розумне ніж that-- а потім, нарешті, 24 00:01:20,240 --> 00:01:24,630 так довго, як Енні має цей декодер кільце, вона може декодувати повідомлення. 25 00:01:24,630 --> 00:01:28,540 Тепер, ви, напевно, пам'ятаєте, справді, що це був використаний в дуже відомому фільмі, що 26 00:01:28,540 --> 00:01:31,140 грає до нудоти під час Різдвяний сезон. 27 00:01:31,140 --> 00:01:32,650 Давайте поглянемо тут. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie PARKER: "Так буде відомо всім в резюме 30 00:01:37,210 --> 00:01:41,000 що Ральф Паркер цим призначається членом сирітка Енні Secret 31 00:01:41,000 --> 00:01:44,860 Круг і має право на все почесті і переваги відбуваються в цій ". 32 00:01:44,860 --> 00:01:47,410 >> Ralphie PARKER (що оповідає): Підпис сирітка Енні. 33 00:01:47,410 --> 00:01:50,070 Контрассигнуется, П'єр Андре! 34 00:01:50,070 --> 00:01:51,490 В чорнила. 35 00:01:51,490 --> 00:01:55,494 Нагороди та переваги, вже у віці дев'яти років. 36 00:01:55,494 --> 00:01:57,402 >> [МУЗИКА ГРАЄ] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO БАЗІКАННЯ] 38 00:02:00,470 --> 00:02:01,470 Ralphie PARKER: Давай. 39 00:02:01,470 --> 00:02:02,344 Давайте покінчимо з цим. 40 00:02:02,344 --> 00:02:06,029 Мені не потрібно все таке інше про контрабандистів та піратів. 41 00:02:06,029 --> 00:02:08,820 Диктор: Слухайте завтра ніч для заключної пригод 42 00:02:08,820 --> 00:02:11,060 з The Black піратський корабель. 43 00:02:11,060 --> 00:02:14,740 Тепер, прийшов час для Енні Секрет повідомлення для вас членів 44 00:02:14,740 --> 00:02:17,110 Таємницею кругом. 45 00:02:17,110 --> 00:02:20,700 Пам'ятайте Діти, тільки членів з Енні Secret Circle 46 00:02:20,700 --> 00:02:23,270 може декодувати секретне повідомлення Енні. 47 00:02:23,270 --> 00:02:27,270 >> Пам'ятайте, Енні залежно від вас. 48 00:02:27,270 --> 00:02:30,060 Встановіть прапорці для B-2. 49 00:02:30,060 --> 00:02:34,004 Ось message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie PARKER (що оповідає): Я перебуваю в своїй першій таємної зустрічі. 51 00:02:36,503 --> 00:02:40,041 Диктор: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie PARKER (що оповідає): О, П'єр був у відмінній голосової сьогодні. 53 00:02:42,790 --> 00:02:46,110 Я міг би сказати, що сьогодні ввечері повідомлення було дійсно важливо. 54 00:02:46,110 --> 00:02:47,930 >> Диктор: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Це повідомлення від самої Енні. 56 00:02:49,940 --> 00:02:52,182 Пам'ятайте, нікому не кажіть. 57 00:02:52,182 --> 00:02:55,077 >> [Задихаючись] 58 00:02:55,077 --> 00:02:57,285 Ralphie PARKER (що оповідає): Дев'яносто секунд по тому, я 59 00:02:57,285 --> 00:03:00,090 в єдиній кімнаті в Будинок, де дев'ятирічний хлопчик 60 00:03:00,090 --> 00:03:04,380 міг сидіти на самоті і декодування. 61 00:03:04,380 --> 00:03:04,990 Ах. 62 00:03:04,990 --> 00:03:05,680 "Б." 63 00:03:05,680 --> 00:03:06,524 >> [Хихикає] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie PARKER (що оповідає): Я пішов до іншого. 65 00:03:08,684 --> 00:03:09,610 "Е." 66 00:03:09,610 --> 00:03:11,641 Перше слово "бути". 67 00:03:11,641 --> 00:03:12,140 Так! 68 00:03:12,140 --> 00:03:14,293 Він доносився простіше. 69 00:03:14,293 --> 00:03:15,259 "У." 70 00:03:15,259 --> 00:03:16,225 >> [Хихикає] 71 00:03:16,225 --> 00:03:18,157 >> Ренді PARKER: Да ладно, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Я повинен йти! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie PARKER: я зараз спущуся, Ма. 74 00:03:21,538 --> 00:03:22,504 Ось здорово. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "Т." "О." "Будьте впевнені, в "." Обов'язково "що? 77 00:03:31,220 --> 00:03:33,981 Те, що було сирітка Енні хочеш сказати? "Обов'язково" що? 78 00:03:33,981 --> 00:03:35,522 МАТИ: Ralphie, Ренді повинен піти. 79 00:03:35,522 --> 00:03:36,735 Чи не могли б ви вийти? 80 00:03:36,735 --> 00:03:38,190 >> Ralphie PARKER: Гаразд, мама! 81 00:03:38,190 --> 00:03:39,787 Я зараз вийду! 82 00:03:39,787 --> 00:03:41,995 Ralphie PARKER (що оповідає): Я був все ближче зараз. 83 00:03:41,995 --> 00:03:43,370 Напруга була страшне. 84 00:03:43,370 --> 00:03:44,794 Що це було? 85 00:03:44,794 --> 00:03:47,656 Доля планети може висять на волосині. 86 00:03:47,656 --> 00:03:50,518 >> МАТИ: Ralphie, Ренді повинен йти! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie PARKER: Я буду з, з глузду з'їхати! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (Оповідають): Майже там! 89 00:03:55,343 --> 00:03:56,520 Мої пальці літали! 90 00:03:56,520 --> 00:03:58,500 Мій розум був сталевий капкан. 91 00:03:58,500 --> 00:03:59,850 Кожен пір вібрує. 92 00:03:59,850 --> 00:04:01,806 Це було майже ясно! 93 00:04:01,806 --> 00:04:02,773 Так! 94 00:04:02,773 --> 00:04:03,273 Так! 95 00:04:03,273 --> 00:04:03,773 Так! 96 00:04:03,773 --> 00:04:04,740 Так! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie PARKER: "Будьте впевнені, пити свій Ovaltine ". 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Вошивий комерційний? 101 00:04:17,539 --> 00:04:19,439 >> [МУЗИКА ГРАЄ] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie PARKER: Сучий син. 103 00:04:21,724 --> 00:04:23,460 >> [Сміється] 104 00:04:23,460 --> 00:04:27,070 >> David J. Малан: Так що ж тоді проблиск на якому криптографії 105 00:04:27,070 --> 00:04:29,880 може бути для ето-- а пити з минулого. 106 00:04:29,880 --> 00:04:30,900 Так швидко оголошення. 107 00:04:30,900 --> 00:04:33,410 Якщо ви вільні у цьому У п'ятницю в 1:15 вечора і буде 108 00:04:33,410 --> 00:04:36,610 б приєднатися до нас для CS50 обід, попрямувати в цьому URL тут. 109 00:04:36,610 --> 00:04:38,080 Перший прийшов, перший обслужений, як звичайно. 110 00:04:38,080 --> 00:04:41,840 Але з плином часу, ми подбаємо, щоб Найбільш хто хотів би брати участь 111 00:04:41,840 --> 00:04:43,640 може планувати мудрий. 112 00:04:43,640 --> 00:04:45,170 >> Так струни. 113 00:04:45,170 --> 00:04:47,940 У нас є Zamyla-- яких Ви зараз зустрілися, швидше за все, 114 00:04:47,940 --> 00:04:50,750 в задачі Набір 1-- якого назва пишеться таким чином. 115 00:04:50,750 --> 00:04:53,570 І припустимо, що ви набрали її ім'я в комп'ютерну програму, це 116 00:04:53,570 --> 00:04:55,710 використовуючи щось на кшталт GetString. 117 00:04:55,710 --> 00:04:57,890 Для того, щоб відновити ці натискання клавіш, як 118 00:04:57,890 --> 00:05:01,620 ми можемо йти про що представляють рядок, слово, абзац, 119 00:05:01,620 --> 00:05:03,960 або кілька букв, як це тут? 120 00:05:03,960 --> 00:05:06,790 >> Ми говорили минулого разу про цілі і проблеми 121 00:05:06,790 --> 00:05:09,960 які виникають з целочисленного переповнення і плаваючою комою 122 00:05:09,960 --> 00:05:12,190 і проблеми, які виникають в точності. 123 00:05:12,190 --> 00:05:16,080 З рядками, ми, принаймні є трохи більше гнучкості 124 00:05:16,080 --> 00:05:17,970 тому strings-- просто в реальному world-- 125 00:05:17,970 --> 00:05:19,790 може бути досить довільній довжини. 126 00:05:19,790 --> 00:05:21,055 Досить коротка, досить довго. 127 00:05:21,055 --> 00:05:23,680 Але навіть тоді, ми збираємося що знайти комп'ютери можуть іноді 128 00:05:23,680 --> 00:05:27,200 запустити з пам'яті і навіть не зберігати досить великий рядок. 129 00:05:27,200 --> 00:05:30,840 >> Але зараз, давайте почнемо візуалізувати рядок як щось в цих коробках 130 00:05:30,840 --> 00:05:31,340 тут. 131 00:05:31,340 --> 00:05:36,410 Так шість таких коробок, кожна з яких представляє символ або "символ". 132 00:05:36,410 --> 00:05:40,646 Так нагадаємо, що "символ" - з-ч-а-r-- є один з вбудованих типів даних в C. 133 00:05:40,646 --> 00:05:43,520 І що приємно, що ви можете використовувати такого роду в якості будівельного блоку, 134 00:05:43,520 --> 00:05:47,880 паззл, якщо хочете, щоб сформувати більше тип даних, які ми будемо продовжувати 135 00:05:47,880 --> 00:05:49,410 називати "рядок". 136 00:05:49,410 --> 00:05:53,650 >> Тепер, що корисно про мисленні про такі речі рядків у цьому випадку? 137 00:05:53,650 --> 00:05:57,720 Ну, виходить, що ми можемо насправді використовувати цю структуру 138 00:05:57,720 --> 00:06:01,420 насправді доступ окремих символів в досить простим способом. 139 00:06:01,420 --> 00:06:04,099 Я збираюся йти вперед і створювати файл з ім'ям "stringzero.c," 140 00:06:04,099 --> 00:06:05,765 але ви можете називати його як завгодно. 141 00:06:05,765 --> 00:06:08,500 І на сайті ході є Цей приклад вже заздалегідь, 142 00:06:08,500 --> 00:06:10,430 так що вам не потрібно введіть все. 143 00:06:10,430 --> 00:06:13,820 >> І я збираюся йти вперед і спочатку зробити тап_п порожнечу. 144 00:06:13,820 --> 00:06:15,980 І протягом декількох днів, ми почнемо дражнити один від одного 145 00:06:15,980 --> 00:06:19,070 що порожнеча тут, чому це Int поруч з основним, і так далі. 146 00:06:19,070 --> 00:06:21,180 Але зараз, давайте продовжимо скопіювати вставити, що. 147 00:06:21,180 --> 00:06:23,455 >> Я збираюся оголосити рядок під назвою сек. 148 00:06:23,455 --> 00:06:26,920 І я збираюся повернутися з GetString незалежно від типу користувача в. 149 00:06:26,920 --> 00:06:29,170 Це збирається бути простим Програма, ніякі інструкції, 150 00:06:29,170 --> 00:06:31,336 Я просто збираюся сліпо очікувати, що користувач знає 151 00:06:31,336 --> 00:06:32,600 що робити, щоб зберегти його простим. 152 00:06:32,600 --> 00:06:34,220 >> А тепер я буду мати для петлі. 153 00:06:34,220 --> 00:06:37,450 А всередині мого для циклу я матиме INT I отримує нуль. 154 00:06:37,450 --> 00:06:40,660 І я, знову ж таки, всього лише умовність, індексна змінна для підрахунку, 155 00:06:40,660 --> 00:06:42,350 але я міг би назвати це все, що захочу. 156 00:06:42,350 --> 00:06:46,275 Я збираюся зробити я менше than-- добре Ім'я Zamyla є довгий шість букв. 157 00:06:46,275 --> 00:06:48,150 Так що я збираюся важко код, який є на даний момент. 158 00:06:48,150 --> 00:06:49,730 >> І тоді я ++. 159 00:06:49,730 --> 00:06:53,190 А тепер всередині них кучеряве брекети я збираюся зробити Printf, 160 00:06:53,190 --> 00:06:55,460 і я хочу, щоб роздрукувати один характер, в той час. 161 00:06:55,460 --> 00:06:58,227 Так що я збираюся використовувати% с для мабуть, вперше. 162 00:06:58,227 --> 00:07:00,560 А потім я хочу, щоб надрукувати кожен характер за своєю власної лінії. 163 00:07:00,560 --> 00:07:02,550 Так що я збираюся поставити трохи коса риска п існує. 164 00:07:02,550 --> 00:07:03,640 Закрити цитата. 165 00:07:03,640 --> 00:07:06,250 >> А тепер я хочу зробити щось тут. 166 00:07:06,250 --> 00:07:10,610 Я хочу, щоб роздрукувати конкретних буква в рядку, 167 00:07:10,610 --> 00:07:13,670 с, як я ітерації від нуля на до шести. 168 00:07:13,670 --> 00:07:17,150 Іншими словами, я хочу, щоб роздрукувати i-го характер с. 169 00:07:17,150 --> 00:07:18,420 Тепер, як я можу це зробити? 170 00:07:18,420 --> 00:07:21,550 >> Ну так же, як коробок в це подання тут, 171 00:07:21,550 --> 00:07:25,560 вид, викликають в уяві поняття боксу букви в, ви можете так само зробити це 172 00:07:25,560 --> 00:07:32,630 синтаксично в C просто вказавши, Я хочу, щоб роздрукувати S: i-го характеру. 173 00:07:32,630 --> 00:07:35,640 Використовуючи квадратні дужки на клавіатурі комп'ютера 174 00:07:35,640 --> 00:07:38,910 що на клавіатурі США є як правило, вище вашого повернення ключа. 175 00:07:38,910 --> 00:07:42,630 >> Так що це не зовсім правильно все ж, як ви, напевно, помітили. 176 00:07:42,630 --> 00:07:44,780 Але я збираюся виду сліпо йти вперед тут. 177 00:07:44,780 --> 00:07:47,020 І я збираюся зробити зробити рядок 0. 178 00:07:47,020 --> 00:07:50,860 Але перш ніж це зробити, давайте подивимося, якщо ми не можемо передбачити деякі загальні помилки. 179 00:07:50,860 --> 00:07:52,844 Чи буде це для компіляції? 180 00:07:52,844 --> 00:07:54,510 Ні, я пропускаю цілу купу речей. 181 00:07:54,510 --> 00:07:55,280 Бібліотеки я чув. 182 00:07:55,280 --> 00:07:58,480 >> Отже, які файли заголовків може я хочу додати тут? 183 00:07:58,480 --> 00:07:59,205 Так. 184 00:07:59,205 --> 00:08:01,580 >> АУДИТОРІЯ: Вам потрібно Стандарт I / O [нерозбірливо] 185 00:08:01,580 --> 00:08:02,663 >> David J. Малан: Відмінно. 186 00:08:02,663 --> 00:08:06,060 Тому мені потрібно стандартний ввід / вивід. Для чого Мета я хочу стандартний ввід / вивід? 187 00:08:06,060 --> 00:08:06,670 Для Printf. 188 00:08:06,670 --> 00:08:09,220 Так включають stdio.h. 189 00:08:09,220 --> 00:08:13,490 І ви також запропонувати, щоб я включив Бібліотека CS50 з якої причини? 190 00:08:13,490 --> 00:08:14,650 Щоб мати рядка. 191 00:08:14,650 --> 00:08:17,780 Таким чином, ми будемо бачити, що Бібліотека CS50 в робить 192 00:08:17,780 --> 00:08:19,260 Для створення цієї поняття рядка. 193 00:08:19,260 --> 00:08:21,930 Але зараз, ви можете просто думаю про нього, як фактичний тип даних. 194 00:08:21,930 --> 00:08:23,596 >> Так що, здається, трохи в порядок. 195 00:08:23,596 --> 00:08:27,060 А тепер я збираюся йти вперед і дійсно роблять рядок 0. 196 00:08:27,060 --> 00:08:27,700 Упорядник. 197 00:08:27,700 --> 00:08:28,370 Так що це добре. 198 00:08:28,370 --> 00:08:32,799 Так ./string0 дозвольте мені збільшити тому ми можемо см більш тісно, ​​що відбувається. 199 00:08:32,799 --> 00:08:33,850 Enter. 200 00:08:33,850 --> 00:08:37,789 Z-А-М-Y-L-входу. 201 00:08:37,789 --> 00:08:39,440 І ми роздрукували на ім'я Zamyla в. 202 00:08:39,440 --> 00:08:40,409 >> Так що це дуже добре. 203 00:08:40,409 --> 00:08:43,220 Тепер давайте йти вперед і запустити цю програму знову, 204 00:08:43,220 --> 00:08:45,659 і введіть з повне ім'я Daven в. 205 00:08:45,659 --> 00:08:46,450 Сюрприз, сюрприз. 206 00:08:46,450 --> 00:08:48,021 Enter. 207 00:08:48,021 --> 00:08:48,520 Хм. 208 00:08:48,520 --> 00:08:51,750 Ми не друкується Daven сайт повний ім'я правильно. 209 00:08:51,750 --> 00:08:54,250 Тепер це має бути очевидно в ретроспективі через що, 210 00:08:54,250 --> 00:08:57,010 роду, нерозумно дизайнерське рішення? 211 00:08:57,010 --> 00:08:59,590 >> Так, я жорстко шість всередині мій цикл. 212 00:08:59,590 --> 00:09:01,610 Тепер я зробив це тільки тому, що Я знав, що ім'я Zamyla в 213 00:09:01,610 --> 00:09:02,776 мав бути з шести букв. 214 00:09:02,776 --> 00:09:04,720 Але, звичайно, це не Загальне рішення. 215 00:09:04,720 --> 00:09:07,720 Ось і виходить, ми можемо динамічно з'ясувати довжину рядка 216 00:09:07,720 --> 00:09:10,440 зателефонувавши функцію з ім'ям StrLen. 217 00:09:10,440 --> 00:09:12,840 >> Знову ж таки, свідомо лаконічно назвав просто 218 00:09:12,840 --> 00:09:14,450 щоб зробити його більш зручно набирати. 219 00:09:14,450 --> 00:09:17,170 Але це синонім отримання довжини рядка. 220 00:09:17,170 --> 00:09:23,190 Я збираюся повернутися в моєму терміналі вікно і повторно запустіть компілятор. 221 00:09:23,190 --> 00:09:24,170 Але це на мене кричати. 222 00:09:24,170 --> 00:09:29,130 Побічно оголосивши бібліотечну функцію STRLEN з типом знака Int const-- 223 00:09:29,130 --> 00:09:29,780 Я загубився. 224 00:09:29,780 --> 00:09:30,590 Повністю. 225 00:09:30,590 --> 00:09:32,940 >> Так, зокрема, як свій очі починають тьмяніють 226 00:09:32,940 --> 00:09:36,000 з повідомленнями про помилки, як це, фокусі чесно на перших же слів. 227 00:09:36,000 --> 00:09:38,590 Ми знаємо, що проблема в Лінія 8, як вказано тут. 228 00:09:38,590 --> 00:09:40,500 І це в рядку-0.c. 229 00:09:40,500 --> 00:09:43,580 Побічно оголосивши Бібліотечна функція STRLEN. 230 00:09:43,580 --> 00:09:47,000 Так, що, як правило, збирається бути зразком повідомлень про помилки. 231 00:09:47,000 --> 00:09:49,190 Побічно оголосивши то. 232 00:09:49,190 --> 00:09:53,250 >> Коротше кажучи, те, що є я, здавалося, зробили по відношенню до лінії 8, тут. 233 00:09:53,250 --> 00:09:56,880 Що може бути рішення ще якщо ви ніколи не використовували StrLen себе? 234 00:09:56,880 --> 00:09:58,907 >> АУДИТОРІЯ: Частина іншу бібліотеку? 235 00:09:58,907 --> 00:10:00,740 David J. Малан: Частина з іншої бібліотеки. 236 00:10:00,740 --> 00:10:02,400 Так він оголошений, так би мовити. 237 00:10:02,400 --> 00:10:07,510 Про це йдеться в деякому файлі крім stdio.h і CS50.h. 238 00:10:07,510 --> 00:10:09,179 Тепер, де вона визначається? 239 00:10:09,179 --> 00:10:12,220 Щоб бути чесним, ви повинні або просто знаю, що це від верхньої частини голови, 240 00:10:12,220 --> 00:10:13,640 або ви Google це і з'ясувати. 241 00:10:13,640 --> 00:10:18,150 Чи це ви знаєте, я відкрив у CS50 обладнання, для термінальної програми, які 242 00:10:18,150 --> 00:10:22,200 просто великий, повний екран версія що в нижній частині вікна GEdit в. 243 00:10:22,200 --> 00:10:24,970 >> І виходить, що є аналогічно лаконічним команда, називається 244 00:10:24,970 --> 00:10:29,280 людина для керівництва, де, якщо ви вводите Ім'я функції і натисніть Введення, 245 00:10:29,280 --> 00:10:32,240 ви отримаєте назад досить таємницею документації. 246 00:10:32,240 --> 00:10:35,299 Це просто текст, який зазвичай виглядає трохи щось на зразок цього. 247 00:10:35,299 --> 00:10:37,090 Це трохи переважна на перший погляд. 248 00:10:37,090 --> 00:10:39,048 Але чесно кажучи, я збираюся нехай мої очі тьмяніють 249 00:10:39,048 --> 00:10:41,930 і акцентувати увагу тільки на частини Я дбаю про на даний момент. 250 00:10:41,930 --> 00:10:42,780 >> Що це. 251 00:10:42,780 --> 00:10:45,470 Який виглядає структурно, як то, що я знайомий з. 252 00:10:45,470 --> 00:10:48,080 Дійсно сторінка чоловік, так говорити, скаже вам, 253 00:10:48,080 --> 00:10:51,590 в тому, що заголовок файлу функцію як StrLen визначається. 254 00:10:51,590 --> 00:10:54,170 Так що я збираюся повернутися тепер до Gedit. 255 00:10:54,170 --> 00:10:59,070 І я збираюся йти вперед і Додати в здесь #include 256 00:10:59,070 --> 00:11:00,480 і збережіть файл. 257 00:11:00,480 --> 00:11:04,300 >> Я збираюся очистити екран з Контроль L Якщо Вам не цікаво. 258 00:11:04,300 --> 00:11:08,210 І я збираюся повторно запустити марку string.0, компілює цей раз. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Це, здавалося, працювало Отпусти меня вперед перезавантажте його з Девенпорт. 261 00:11:15,020 --> 00:11:15,860 Enter. 262 00:11:15,860 --> 00:11:17,730 І це теж, здавалося, працювало. 263 00:11:17,730 --> 00:11:21,220 >> Так що ми можемо зробити трохи краще, ніж це, хоча, ми можемо почати акуратні речі 264 00:11:21,220 --> 00:11:23,257 до всього лише небагато. 265 00:11:23,257 --> 00:11:25,590 І я збираюся насправді ввести ще одну річ зараз. 266 00:11:25,590 --> 00:11:28,930 Я збираюся йти вперед і зберегти це в інший файл. 267 00:11:28,930 --> 00:11:31,770 І я буду називати цей файл string1.c просто 268 00:11:31,770 --> 00:11:34,620 у відповідність із кодом Ви зможете знайти на сайті. 269 00:11:34,620 --> 00:11:37,050 >> І давайте зосередитися на точно так же код. 270 00:11:37,050 --> 00:11:39,000 Виходить, що у мене є був вид взяття 271 00:11:39,000 --> 00:11:42,600 як належне той факт, що мій ноутбук, і, в свою чергу, CS50 пристрій 272 00:11:42,600 --> 00:11:47,450 є багато пам'яті, багато RAM, багато байт простору 273 00:11:47,450 --> 00:11:48,920 , В якому я можу зберігати рядка. 274 00:11:48,920 --> 00:11:53,560 >> Але реальність, якщо я набрав довго достатньо, і досить натискання клавіші, 275 00:11:53,560 --> 00:11:56,170 Я міг у типу теорії в більш символів 276 00:11:56,170 --> 00:11:58,830 ніж мій комп'ютер фізично має пам'ять для. 277 00:11:58,830 --> 00:11:59,830 А це проблематично. 278 00:11:59,830 --> 00:12:03,050 Багато чого, як Int може тільки Кількість так високо, в теорії, 279 00:12:03,050 --> 00:12:06,600 Ви можете втиснути тільки так багато символів в ОЗУ або Random комп'ютера 280 00:12:06,600 --> 00:12:07,920 Доступу до пам'яті. 281 00:12:07,920 --> 00:12:11,140 >> Так вже краще передбачити ця проблема, навіть 282 00:12:11,140 --> 00:12:13,660 хоча це може бути рідкісний прикордонні випадки, так сказати. 283 00:12:13,660 --> 00:12:15,670 Не буває, що часто, може трапитися. 284 00:12:15,670 --> 00:12:18,815 І якщо це станеться, і я не передбачати і програма для нього, 285 00:12:18,815 --> 00:12:20,300 моя програма може робити, хто знає що. 286 00:12:20,300 --> 00:12:22,220 Заморожування, повісити, перезавантаження, що завгодно. 287 00:12:22,220 --> 00:12:24,490 Що очікується могло б трапитися. 288 00:12:24,490 --> 00:12:27,120 >> Так що я збираюся робити Тепер, відтепер дійсно, 289 00:12:27,120 --> 00:12:31,630 є, перш ніж я сліпо використовувати змінну як с, що 290 00:12:31,630 --> 00:12:36,790 був призначений значення, що повертається деякі інші функції, як GetString, 291 00:12:36,790 --> 00:12:40,200 Я хочу переконатися, що що його значення є дійсним. 292 00:12:40,200 --> 00:12:44,280 Так що я знаю тільки з прочитавши Документація CS50 для GetString, 293 00:12:44,280 --> 00:12:49,020 що в кінцевому підсумку ми вкажу вам на, що GetString повертає спеціальний символ 294 00:12:49,020 --> 00:12:53,610 називається NULL, N-U-L-L у всіх шапки, якщо щось не так. 295 00:12:53,610 --> 00:12:55,650 >> Так зазвичай, це повертає рядок. 296 00:12:55,650 --> 00:12:59,700 Але в іншому випадку, якщо вона повертає N-U-L-L-- ми в кінці кінців подивитися, що насправді 297 00:12:59,700 --> 00:13:01,790 означає: це просто означає, щось погане сталося. 298 00:13:01,790 --> 00:13:05,560 Тепер це означає, так само, як в порожньому, Я можу перевірити стан тут в C, 299 00:13:05,560 --> 00:13:08,830 якщо з не одно NULL. 300 00:13:08,830 --> 00:13:11,930 Так що, якщо ви не бачили це раніше, це просто означає, не дорівнює. 301 00:13:11,930 --> 00:13:15,290 >> Так що це протилежність рівні з рівними, яка, нагадаємо, 302 00:13:15,290 --> 00:13:18,940 відрізняється від одного дорівнює, що призначення. 303 00:13:18,940 --> 00:13:23,030 Таким чином, якщо з не одно NULL, тільки тоді 304 00:13:23,030 --> 00:13:25,980 Я хочу, щоб виконати ці рядки коду. 305 00:13:25,980 --> 00:13:28,080 Таким чином, іншими словами, перш, ніж я пірнати в сліпо 306 00:13:28,080 --> 00:13:30,919 і почати ітерації Більше ніж, і його обробки 307 00:13:30,919 --> 00:13:33,710 неначе це послідовність персонажі, я збираюся спочатку перевірити, 308 00:13:33,710 --> 00:13:37,900 постійте, це и безумовно не рівним цьому особливого значення, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Бо якщо це так, погані речі можуть трапитися. 310 00:13:40,030 --> 00:13:43,080 І зараз, припустимо, що погані речі відбувається значить ваші збій програми, 311 00:13:43,080 --> 00:13:45,070 і ви не можете обов'язково відновити. 312 00:13:45,070 --> 00:13:46,800 Так відверто кажучи, це виглядає потворно. 313 00:13:46,800 --> 00:13:48,660 це ніби заплутаною зараз поглянути на. 314 00:13:48,660 --> 00:13:50,780 Але це стане більш знайомі найближчим часом. 315 00:13:50,780 --> 00:13:52,920 >> Але я збираюся запропонувати Тепер одна поліпшення. 316 00:13:52,920 --> 00:13:54,660 Це поліпшення в коректності. 317 00:13:54,660 --> 00:13:58,800 Моя програма в даний час більш правильно, тому що в рідкісних випадках, коли не вистачає пам'яті 318 00:13:58,800 --> 00:14:01,180 існує, я буду звертатися з цим, і я не буду просто нічого не робити. 319 00:14:01,180 --> 00:14:02,680 Я принаймні не завалиться. 320 00:14:02,680 --> 00:14:05,000 >> Але давайте зробимо остаточний варіант тут. 321 00:14:05,000 --> 00:14:07,690 І файл з ім'ям string2.c. 322 00:14:07,690 --> 00:14:10,190 Я збираюся вставити, що Той же самий код на мить, 323 00:14:10,190 --> 00:14:14,210 і я збираюся виділити цей Лінія, 11, тут, на мить. 324 00:14:14,210 --> 00:14:18,179 Тепер реальність така, що розумні компілятори як Clang може виправити це для нас 325 00:14:18,179 --> 00:14:19,970 за лаштунками без нашого не знаючи. 326 00:14:19,970 --> 00:14:24,670 Але давайте подумаємо про це принципово як проблемної дизайну. 327 00:14:24,670 --> 00:14:29,010 >> Цей рядок коду є, звичайно, кажучи, инициализировать деякі змінні я до 0. 328 00:14:29,010 --> 00:14:30,260 Це досить просто. 329 00:14:30,260 --> 00:14:34,691 І те, що знову це Заява, тут, я ++, робиш? 330 00:14:34,691 --> 00:14:37,066 Ми бачили це і раніше, але ми дійсно не говорити про це. 331 00:14:37,066 --> 00:14:37,900 >> АУДИТОРІЯ: инкрементирования I. 332 00:14:37,900 --> 00:14:39,191 >> David J. Малан: инкрементирования я. 333 00:14:39,191 --> 00:14:41,890 Так на кожній ітерації через цей цикл, кожен цикл, 334 00:14:41,890 --> 00:14:43,570 Ви збільшуючи I на одиницю. 335 00:14:43,570 --> 00:14:45,740 Так що стає більше, і більше, і більше поки цикл не завершиться. 336 00:14:45,740 --> 00:14:46,810 Як це припинити? 337 00:14:46,810 --> 00:14:49,430 Ну є цей середній умова, яку ми використовували раніше. 338 00:14:49,430 --> 00:14:52,500 Ви бачили і в покрокові в P набору. 339 00:14:52,500 --> 00:14:53,880 >> Але що це висловлювання? 340 00:14:53,880 --> 00:14:58,352 Зробіть наступний цикл так Поки я менше ніж? 341 00:14:58,352 --> 00:14:59,810 АУДИТОРІЯ: довжина рядка. 342 00:14:59,810 --> 00:15:01,518 David J. Малан: Довжина рядка. 343 00:15:01,518 --> 00:15:04,300 Так воно перекладається досить чисто на англійську мову в цьому сенсі. 344 00:15:04,300 --> 00:15:08,810 Тепер проблема полягає в тому, що кожного разу, коли перебору цієї петлі в теорії, 345 00:15:08,810 --> 00:15:10,000 Я задаю це питання. 346 00:15:10,000 --> 00:15:12,250 Є я менше довжина рядка з? 347 00:15:12,250 --> 00:15:14,500 Є я менше довжина рядка з? 348 00:15:14,500 --> 00:15:18,380 >> Тепер, я змінюється на кожній ітерації? 349 00:15:18,380 --> 00:15:18,880 Це. 350 00:15:18,880 --> 00:15:19,629 Через ++. 351 00:15:19,629 --> 00:15:21,700 Таким чином, кожен ітерації я стає все більше. 352 00:15:21,700 --> 00:15:25,411 Але це з стає все більше, або менше, або зміни взагалі? 353 00:15:25,411 --> 00:15:25,910 Кількість 354 00:15:25,910 --> 00:15:30,240 Так що в плані дизайну, однією з осей , Вздовж якої ми намагаємося оцінити код 355 00:15:30,240 --> 00:15:32,610 в класі, це відчуває вид нерозумно. 356 00:15:32,610 --> 00:15:34,690 >> Як ви буквально, на кожній ітерації 357 00:15:34,690 --> 00:15:37,110 з цієї петлі з проханням ж біса питання знову, 358 00:15:37,110 --> 00:15:40,770 і знову, і знову, і в буквальному сенсі він ніколи не зміниться. 359 00:15:40,770 --> 00:15:44,220 Принаймні, якщо я не доторкаючись с і намагається змінити вміст с. 360 00:15:44,220 --> 00:15:46,610 Так що я можу зробити трохи краще, ніж це. 361 00:15:46,610 --> 00:15:49,530 >> І те, що я збираюся зробити, це не оголосити тільки один змінна В, 362 00:15:49,530 --> 00:15:53,330 але друга змінна я буду довільно, але умовно, назвати це н. 363 00:15:53,330 --> 00:15:55,940 Зв'язати н дорівнює довжина рядка с. 364 00:15:55,940 --> 00:15:59,090 А потім сюди, я збираюся зробити розумний мало оптимізації, так 365 00:15:59,090 --> 00:16:03,460 сказати, що в кінці кінців немає правильніше або не менш правильно 366 00:16:03,460 --> 00:16:04,260 ніж раніше. 367 00:16:04,260 --> 00:16:05,500 Але це краще, дизайн. 368 00:16:05,500 --> 00:16:09,480 У тому, що я використовую менше часу, менше циклів процесора, так 369 00:16:09,480 --> 00:16:14,040 говорити, щоб відповісти тим же питання, але тільки один раз. 370 00:16:14,040 --> 00:16:17,870 >> Будь-які питання по цій генерального Принцип вдосконалення, 371 00:16:17,870 --> 00:16:21,294 кажуть, ефективність програми? 372 00:16:21,294 --> 00:16:21,991 Да? 373 00:16:21,991 --> 00:16:23,699 АУДИТОРІЯ: Чому вас використовувати [нерозбірливо]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 David J. Малан: Хороше питання. 376 00:16:27,010 --> 00:16:30,690 Так чому ж ми поставити ++ на кінці я замість початком I? 377 00:16:30,690 --> 00:16:33,070 В цьому випадку він має немає функціональне вплив. 378 00:16:33,070 --> 00:16:36,670 І взагалі, я, як правило, використовувати оператор Постфіксний 379 00:16:36,670 --> 00:16:41,750 так що це трохи більш ясно, як , Коли операція відбувається. 380 00:16:41,750 --> 00:16:46,670 >> Для тих, хто незнайомий, є ще один заяви, в якій ви могли б зробити ++ I. 381 00:16:46,670 --> 00:16:48,747 Це функціонально еквівалентні в цьому випадку 382 00:16:48,747 --> 00:16:51,080 бо немає нічого іншого, навколо цього збільшення. 383 00:16:51,080 --> 00:16:54,435 Але ви можете придумати випадки і рядків коду 384 00:16:54,435 --> 00:16:55,810 , В якому, що робить різницю. 385 00:16:55,810 --> 00:16:57,810 Так взагалі, ми не навіть говорити про це. 386 00:16:57,810 --> 00:17:00,690 Бо, чесно кажучи, це робить вашу Код сексуальніше, і свого роду плащ, 387 00:17:00,690 --> 00:17:01,776 і менше символів. 388 00:17:01,776 --> 00:17:04,859 Але реальність така, що це набагато складніше, Я думаю, навіть для мене, щоб обернути свій розум 389 00:17:04,859 --> 00:17:07,319 навколо нього іноді, порядок операцій. 390 00:17:07,319 --> 00:17:09,750 Так як в сторону, якщо ви дійсно не подобається це, 391 00:17:09,750 --> 00:17:14,650 хоча це начебто сексуальний дивлячись, ви також можете зробити я + = 1, 392 00:17:14,650 --> 00:17:18,880 який є потворніше версія Та ж ідея для Постфіксний прирощення. 393 00:17:18,880 --> 00:17:22,250 >> Я говорю це і вас повинні висміювати його, 394 00:17:22,250 --> 00:17:25,140 але ви прийдете, щоб побачити код, то красиве найближчим часом. 395 00:17:25,140 --> 00:17:27,160 >> [Сміх] 396 00:17:27,160 --> 00:17:28,410 >> David J. Малан: справа? 397 00:17:28,410 --> 00:17:29,360 Так. 398 00:17:29,360 --> 00:17:30,480 Питання в середині. 399 00:17:30,480 --> 00:17:32,146 >> АУДИТОРІЯ: Ви повинні сказати Int N? 400 00:17:32,146 --> 00:17:34,020 David J. Малан: Ви робите не потрібно говорити Int N. 401 00:17:34,020 --> 00:17:37,670 Так, тому що ми вже говорили, Int, Вам не потрібно, щоб сказати це знову. 402 00:17:37,670 --> 00:17:41,820 Заковика в тому, що н повинен бути того ж типу даних, як я. 403 00:17:41,820 --> 00:17:43,310 Так що це просто зручність тут. 404 00:17:43,310 --> 00:17:44,058 Так. 405 00:17:44,058 --> 00:17:47,806 >> АУДИТОРІЯ: Чи можете ви перейти друку персонажа з кронштейн я знову? 406 00:17:47,806 --> 00:17:48,930 David J. Малан: Абсолютно. 407 00:17:48,930 --> 00:17:52,110 Так% с, пам'ятаєте з минулого Час, це просто заповнювач. 408 00:17:52,110 --> 00:17:53,930 Це означає поставити символ тут. 409 00:17:53,930 --> 00:17:56,780 н зворотної косою, звичайно, тільки кошти помістити тут розрив рядка. 410 00:17:56,780 --> 00:17:59,540 Так що просто залишає, зараз, цей шматок нового синтаксису. 411 00:17:59,540 --> 00:18:03,730 І це буквально кажучи, захоплення рядок називається с і піти отримати його 412 00:18:03,730 --> 00:18:06,050 i-й символ, так би мовити. 413 00:18:06,050 --> 00:18:10,590 >> І я постійно говорю i-й символ бо на кожній ітерації цього циклу 414 00:18:10,590 --> 00:18:14,540 це як якби ми друкуємо , По-перше з кронштейн 0, 415 00:18:14,540 --> 00:18:15,780 як програміст може сказати. 416 00:18:15,780 --> 00:18:18,680 Тоді S Кронштейн 1, потім з кронштейн 2, потім 3, потім 4. 417 00:18:18,680 --> 00:18:21,610 Але, звичайно, це змінна, так що я просто виразити це з р 418 00:18:21,610 --> 00:18:23,900 >> Ключ, хоча, це усвідомити, особливо, якщо ви не 419 00:18:23,900 --> 00:18:26,358 було акліматизації в цей світ програмування, де ми всі 420 00:18:26,358 --> 00:18:28,950 здається, вважаються від нуля, повинен починатися з нуля, зараз. 421 00:18:28,950 --> 00:18:35,130 Оскільки рядки, перший символ, г в Zamyla й на краще чи на гірше 422 00:18:35,130 --> 00:18:40,490 житиме в точці номер нуль. 423 00:18:40,490 --> 00:18:48,210 >> Гаразд, так що дозвольте мені навести нам сюди, щоб Zamyla 424 00:18:48,210 --> 00:18:50,746 і подивитися, що насправді відбувається на під капотом. 425 00:18:50,746 --> 00:18:52,370 Так що це поняття приведення типу. 426 00:18:52,370 --> 00:18:53,800 Ви, можливо, насправді грав з цим вже, 427 00:18:53,800 --> 00:18:55,970 можливо для хакера видання P встановити один. 428 00:18:55,970 --> 00:19:00,320 Але приведення типів тільки відноситься до здатність в C і деяких інших мовах 429 00:19:00,320 --> 00:19:03,170 для перетворення одного типу даних в інший. 430 00:19:03,170 --> 00:19:05,450 >> Тепер, як ми могли б побачити це досить прямолінійно? 431 00:19:05,450 --> 00:19:08,530 Так що це, нагадаємо, є початком з англійського алфавіту. 432 00:19:08,530 --> 00:19:11,265 А контекст, згадати, з як і тиждень тому, ASCII. 433 00:19:11,265 --> 00:19:13,790 Американський стандартний код для обміну інформацією. 434 00:19:13,790 --> 00:19:17,080 Які це просто дійсно довгий шлях сказати відображення з букв 435 00:19:17,080 --> 00:19:19,370 на номери, і від номера на листи. 436 00:19:19,370 --> 00:19:22,940 >> Так через M тут, точка точка точка, лінії с, нагадаємо, 437 00:19:22,940 --> 00:19:25,582 десяткове число 65 і вище. 438 00:19:25,582 --> 00:19:27,290 І ми не говоримо про це явно, 439 00:19:27,290 --> 00:19:29,850 але напевно є схоже номера для малих літер. 440 00:19:29,850 --> 00:19:30,820 І справді, є. 441 00:19:30,820 --> 00:19:33,730 Світ вирішив кілька років назад, що трохи, нижній регістр, 442 00:19:33,730 --> 00:19:35,020 буде 97. 443 00:19:35,020 --> 00:19:38,010 І трохи б збирається бути 98, і так далі. 444 00:19:38,010 --> 00:19:40,200 >> І для будь-якої іншої клавіші на клавіатура, є 445 00:19:40,200 --> 00:19:42,190 буде аналогічна картина бітів. 446 00:19:42,190 --> 00:19:44,540 Або те ж саме, десяткове число. 447 00:19:44,540 --> 00:19:47,110 Отже питання в сторони, то, як ми можемо 448 00:19:47,110 --> 00:19:49,400 насправді побачити це під капотом? 449 00:19:49,400 --> 00:19:51,539 Так що я збираюся перейти до Gedit знову. 450 00:19:51,539 --> 00:19:53,330 І замість того, типу це один з нуля, 451 00:19:53,330 --> 00:19:55,330 Я збираюся йти вперед і просто відкрити то 452 00:19:55,330 --> 00:19:58,350 від сьогоднішнього коду, який називається ASCII нульовий. 453 00:19:58,350 --> 00:20:01,210 >> І ASCII нуля виглядає наступним чином. 454 00:20:01,210 --> 00:20:02,710 Так що давайте обернути наші уми навколо цього. 455 00:20:02,710 --> 00:20:04,969 Отже, спочатку я прокоментував Код, який гарний. 456 00:20:04,969 --> 00:20:07,010 Бо це в буквальному сенсі розповідав мені, чого очікувати, 457 00:20:07,010 --> 00:20:08,950 відображати відображення для заголовними буквами. 458 00:20:08,950 --> 00:20:13,690 Тепер я навіть не знаю, що я маю на увазі, що, так що давайте вивести. 459 00:20:13,690 --> 00:20:16,870 >> В англійській мові, може бути, кілька технар англійська, 460 00:20:16,870 --> 00:20:20,660 що робить лінії 18 з'являються , Робить для нас? 461 00:20:20,660 --> 00:20:21,500 Просто лінія 18. 462 00:20:21,500 --> 00:20:22,430 Що це викликають? 463 00:20:22,430 --> 00:20:25,192 Як це буде, щоб розпочати тут? 464 00:20:25,192 --> 00:20:26,100 >> АУДИТОРІЯ: петля. 465 00:20:26,100 --> 00:20:26,630 >> David J. Малан: петля. 466 00:20:26,630 --> 00:20:28,463 І скільки разів що збирається повторювати? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 АУДИТОРІЯ: [вставляючи ГОЛОСИ] в шість разів. 469 00:20:33,270 --> 00:20:34,830 David J. Малан: Чи не шість разів. 470 00:20:34,830 --> 00:20:35,840 АУДИТОРІЯ: 26 разів. 471 00:20:35,840 --> 00:20:36,560 David J. Малан: 26 разів. 472 00:20:36,560 --> 00:20:37,060 Так, шкода. 473 00:20:37,060 --> 00:20:37,960 26 раз. 474 00:20:37,960 --> 00:20:38,460 Чому? 475 00:20:38,460 --> 00:20:41,590 Ну, це трохи дивно, але Я почав відлік з 65. 476 00:20:41,590 --> 00:20:43,300 Що дивно, але не так. 477 00:20:43,300 --> 00:20:44,610 Це не погано за, говорять. 478 00:20:44,610 --> 00:20:46,980 І я роблю, що тільки тому, що для цього прикладу, 479 00:20:46,980 --> 00:20:50,455 Я начебто передбачаючи що капітал був 65. 480 00:20:50,455 --> 00:20:53,330 Тепер це не самий витончений спосіб зробити це, щоб роду жорсткий код 481 00:20:53,330 --> 00:20:56,130 НЕ езотеричні значення, що ніхто коли-небудь очікується, пам'ятаю. 482 00:20:56,130 --> 00:21:00,155 >> Але зараз, зверніть увагу, що я робити це через 65 плюс 26. 483 00:21:00,155 --> 00:21:03,030 Тому що, мабуть, я навіть не хочу зробити арифметику в моїй голові. 484 00:21:03,030 --> 00:21:04,440 Тому я дам компілятор це зробити. 485 00:21:04,440 --> 00:21:08,600 Але тоді на кожному циклі, кожна ітерація петлі, я збільшуючи I. 486 00:21:08,600 --> 00:21:10,196 >> Так що тепер це виглядає трохи загадково. 487 00:21:10,196 --> 00:21:13,320 Але ми повинні мати основну будівлю блоки з якою, щоб зрозуміти це. 488 00:21:13,320 --> 00:21:15,510 % С просто заповнювач для гольця. 489 00:21:15,510 --> 00:21:19,010 % Я є заповнювачем для міжнар. 490 00:21:19,010 --> 00:21:23,310 І виходить, що за допомогою цього Новий синтаксис, це в дужках, так 491 00:21:23,310 --> 00:21:26,100 говорити, так типу даних всередині дужок, 492 00:21:26,100 --> 00:21:32,270 Я можу змусити компілятор для лікування я не є цілим числом, а як символ. 493 00:21:32,270 --> 00:21:35,520 >> Тим самим показуючи мені характер еквівалент цього числа. 494 00:21:35,520 --> 00:21:37,986 Тепер сюди, цей код практично ідентичні. 495 00:21:37,986 --> 00:21:39,860 Я просто хотів переконатися, супер явний факт 496 00:21:39,860 --> 00:21:42,095 що я починаю на 97, який нижній регістр. 497 00:21:42,095 --> 00:21:44,080 На через 26 більш букв. 498 00:21:44,080 --> 00:21:46,970 І я doing-- знову, кастинг я, так би мовити. 499 00:21:46,970 --> 00:21:49,160 Або типу кастинг я, так би мовити. 500 00:21:49,160 --> 00:21:51,420 >> З междунар до гольця. 501 00:21:51,420 --> 00:21:55,760 Таким чином, кінцевий результат буде, чесно кажучи, інформація, яку ми вже знаємо. 502 00:21:55,760 --> 00:21:59,411 Я збираюся зробити ASCII-0 не dot-- точка в. 503 00:21:59,411 --> 00:22:02,160 Зверніть увагу, ви, ймовірно, зробив, що помилкою, оскільки я тільки що зробив випадково. 504 00:22:02,160 --> 00:22:03,820 Зробити ASCII-0. 505 00:22:03,820 --> 00:22:06,090 Тепер я збираюся зробити ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Я збільшення, і, на жаль, він збирається прокрутки з екрану. 507 00:22:09,050 --> 00:22:15,060 Але ми бачимо цілу діаграму де карти до 97, б карти до 98, 508 00:22:15,060 --> 00:22:18,931 і якщо ми прокрутки вгору далі Звичайно, відображає до 65. 509 00:22:18,931 --> 00:22:21,180 Таким чином, це тільки, щоб сказати, що що ми проповідували, 510 00:22:21,180 --> 00:22:25,310 Тобто ця еквівалентність, є насправді має місце в дійсності. 511 00:22:25,310 --> 00:22:28,000 Так швидко модифікація цього. 512 00:22:28,000 --> 00:22:31,220 Дозвольте мені відкрити ASCII-1.c. 513 00:22:31,220 --> 00:22:38,070 І зауважте, ця розумна, начебто з, роз'яснення цього. 514 00:22:38,070 --> 00:22:41,770 Це ASCII-1.c, і помітити цю божевільну річ. 515 00:22:41,770 --> 00:22:45,120 >> І це дійсно добирається до серця про те, що комп'ютери роблять. 516 00:22:45,120 --> 00:22:48,150 Навіть при тому, що ми, люди б Не розраховуйте по letters-- 517 00:22:48,150 --> 00:22:50,380 Я не почати думати, все гаразд, то б, 518 00:22:50,380 --> 00:22:52,590 і використовувати їх, щоб розраховувати фізичні об'єкти. 519 00:22:52,590 --> 00:22:58,680 Можна, звичайно, сказати, що я хочу ініціалізації деяких змінну c-- 520 00:22:58,680 --> 00:23:03,220 але я міг би назвати це anything-- так з инициализируется капіталу А. 521 00:23:03,220 --> 00:23:07,560 >> Тому що в кінці дня, комп'ютера не важливо, що ви зберігаєте, 522 00:23:07,560 --> 00:23:10,170 це тільки дбає, як ви хочете представити цю інформацію. 523 00:23:10,170 --> 00:23:13,560 Як ви хочете, щоб комп'ютер інтерпретувати цю картину бітів? 524 00:23:13,560 --> 00:23:16,320 Так що це не те, що я , Як правило, рекомендують робити. 525 00:23:16,320 --> 00:23:19,500 Це дійсно просто приклад, щоб передати, що ви можете абсолютно 526 00:23:19,500 --> 00:23:22,049 ініціалізації ціле до гольця. 527 00:23:22,049 --> 00:23:24,090 Тому що під капот з гольця, звичайно, 528 00:23:24,090 --> 00:23:26,170 це просто число від 0 до 255. 529 00:23:26,170 --> 00:23:28,540 >> Таким чином, ви можете, звичайно, покласти його всередині від междунар. 530 00:23:28,540 --> 00:23:30,890 І те, що це також демонструє, що ми 531 00:23:30,890 --> 00:23:34,040 може конвертувати з одного типу в інший, тут, 532 00:23:34,040 --> 00:23:36,780 в кінцевому рахунку, печатки і те ж. 533 00:23:36,780 --> 00:23:44,760 І справді, це я виправлю online-- повинен був сказати це, знову ж таки, тут. 534 00:23:44,760 --> 00:23:48,610 Дозвольте мені очистити це онлайн, і ми будемо см в онлайн-керівництві по мірі необхідності, 535 00:23:48,610 --> 00:23:50,280 , Що було задумано є. 536 00:23:50,280 --> 00:23:50,960 >> Добре. 537 00:23:50,960 --> 00:23:53,892 Так останній приклад тепер за участю а і Б, і тоді ми 538 00:23:53,892 --> 00:23:54,850 приймати речі на сходинку вище. 539 00:23:54,850 --> 00:23:58,330 Так с і Б і C років в капіталізації 540 00:23:58,330 --> 00:24:01,560 і еквівалентність їх, давайте погляньте на цей приклад, тут. 541 00:24:01,560 --> 00:24:02,752 Інший приклад коду. 542 00:24:02,752 --> 00:24:04,460 Ми відкриємо той, який вже зробили, тому ми 543 00:24:04,460 --> 00:24:06,440 не доведеться вводити його всі з нуля. 544 00:24:06,440 --> 00:24:09,420 >> І зауважте, в очікуванні ми використовуємо кілька заголовок 545 00:24:09,420 --> 00:24:13,240 Файли, серед яких наш новий друг, string.h. 546 00:24:13,240 --> 00:24:15,597 Тепер це виглядає, на перший погляд, може здатися загадковим. 547 00:24:15,597 --> 00:24:18,180 Але давайте подивимося, якщо ми не можемо міркувати через те, що тут відбувається. 548 00:24:18,180 --> 00:24:21,150 Спочатку я отримати рядок від користувача, і я поклав цей рядок у змінній 549 00:24:21,150 --> 00:24:22,286 звані сек. 550 00:24:22,286 --> 00:24:24,090 Скопіюйте пасту від обличчя. 551 00:24:24,090 --> 00:24:27,250 У рядку 22, я, мабуть, робить саме те, що 552 00:24:27,250 --> 00:24:30,760 Я зробив якийсь час назад, я ітерації більш персонажів с. 553 00:24:30,760 --> 00:24:34,780 >> І нові трюки тут використовуєте Довжина рядка, незначні оптимізації 554 00:24:34,780 --> 00:24:37,930 зберігати довжину рядка в п, замість виклику STRLEN знову, 555 00:24:37,930 --> 00:24:38,850 і знову, і знову. 556 00:24:38,850 --> 00:24:41,120 І тільки переконавшись, що я менше п. 557 00:24:41,120 --> 00:24:43,330 Тепер ось, все стає трохи цікаво. 558 00:24:43,330 --> 00:24:45,980 Але це всього лише додаток цієї ж нової ідеї. 559 00:24:45,980 --> 00:24:48,470 Що в Англійська робить з кронштейн я уявляю? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> АУДИТОРІЯ: Підрахунок друг характер [нерозбірливо]. 562 00:24:54,260 --> 00:24:55,926 >> David J. Малан: Підрахунок кожного символу. 563 00:24:55,926 --> 00:24:58,680 І навіть більш стисло, з кронштейн Я уявляю, що? 564 00:24:58,680 --> 00:25:00,950 Чи можете ви сказати. 565 00:25:00,950 --> 00:25:04,084 Чи не поставити вас на місці тут. 566 00:25:04,084 --> 00:25:06,375 >> АУДИТОРІЯ: Ну-- 567 00:25:06,375 --> 00:25:09,500 David J. Малан: Так що, якщо слово is-- якщо рядок Zamyla, які starts-- 568 00:25:09,500 --> 00:25:12,380 АУДИТОРІЯ: той то ви! Справу з персонажі separately-- 569 00:25:12,380 --> 00:25:13,690 David J. Малан: Добре. 570 00:25:13,690 --> 00:25:14,190 Точно. 571 00:25:14,190 --> 00:25:17,940 Запис квадратна дужка дозволяє для доступу до кожного характер індивідуально, 572 00:25:17,940 --> 00:25:21,120 так з кронштейн 0 буде Перший символ в рядку. 573 00:25:21,120 --> 00:25:24,110 з кронштейн 1 буде другий, і так далі. 574 00:25:24,110 --> 00:25:28,050 Отже питання, що я прошу, тут, в цьому стані є що? 575 00:25:28,050 --> 00:25:33,984 Чи є i-го характер ов Большого або дорівнює нижній регістр? 576 00:25:33,984 --> 00:25:36,400 І що це значить, тут, з подвійними амперсандом? 577 00:25:36,400 --> 00:25:36,800 АУДИТОРІЯ (РАЗОМ): А. 578 00:25:36,800 --> 00:25:37,210 David J. Малан: А. 579 00:25:37,210 --> 00:25:38,418 Це просто еквівалентно це. 580 00:25:38,418 --> 00:25:42,310 І не є ключовим словом в C, ви повинні використання, дратівливо, амперсанд амперсанд. 581 00:25:42,310 --> 00:25:47,520 І це, навпаки, просить їсти S: i-го символу меншим або рівним 582 00:25:47,520 --> 00:25:49,030 в нижній регістр г? 583 00:25:49,030 --> 00:25:52,440 І знову, ось де Розуміння основних 584 00:25:52,440 --> 00:25:54,550 реалізація Комп'ютер має сенс. 585 00:25:54,550 --> 00:25:57,330 Зверніть увагу, що, хоча у мене є точка точка точка там, 586 00:25:57,330 --> 00:26:04,410 Схоже, через г в нижньому регістрі будуть всі суміжні значення до від 97 і вище. 587 00:26:04,410 --> 00:26:07,820 >> І те ж саме для верхнього регістру, починаючи з 65. 588 00:26:07,820 --> 00:26:10,410 Таким чином, винос, а потім, є те, що в англійській мові, 589 00:26:10,410 --> 00:26:12,760 як би ви описали що лінія +24 робить? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Да? 592 00:26:16,728 --> 00:26:21,575 >> АУДИТОРІЯ: 24 це перевіряти, Чи кожен символ є рядкової. 593 00:26:21,575 --> 00:26:24,700 David J. Малан: Це перевірки, чи є кожен персонаж є рядкова буква. 594 00:26:24,700 --> 00:26:28,590 Таким чином, навіть більш стисло, є i-й символ ов нижній регістр? 595 00:26:28,590 --> 00:26:30,690 От і все, що ми висловлюючи тут логічно, 596 00:26:30,690 --> 00:26:33,750 трохи загадково, але в кінцевому рахунку, досить прямолінійно. 597 00:26:33,750 --> 00:26:36,480 Є S: i-го символу в нижньому регістрі? 598 00:26:36,480 --> 00:26:40,130 >> Якщо це так, і ось де речі отримати трохи запаморочливим 599 00:26:40,130 --> 00:26:44,760 на мить, якщо так, то перейти вперед і роздрукувати характер. 600 00:26:44,760 --> 00:26:47,360 Так що це просто заповнювач, але те, що характер? 601 00:26:47,360 --> 00:26:53,710 Чому я це роблю з кронштейна I мінус цей вираз тут? 602 00:26:53,710 --> 00:26:55,110 >> Ну помітити картину тут. 603 00:26:55,110 --> 00:26:57,380 Реальні цифри не мають значення так багато. 604 00:26:57,380 --> 00:27:02,700 Але зверніть увагу, що 97 є як далеко від 65? 605 00:27:02,700 --> 00:27:03,560 >> АУДИТОРІЯ: 32. 606 00:27:03,560 --> 00:27:04,480 >> David J. Малан: 32. 607 00:27:04,480 --> 00:27:06,890 Як далеко знаходиться 98 з 66? 608 00:27:06,890 --> 00:27:07,740 >> АУДИТОРІЯ: 32. 609 00:27:07,740 --> 00:27:09,890 >> David J. Малан: Маленька з від великої C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Таким чином, є 32 стрибків з один лист в іншу. 612 00:27:14,550 --> 00:27:17,790 Так відверто я, міг спростити це, що. 613 00:27:17,790 --> 00:27:20,400 Але тоді я почасти важко кодування це розуміння низький рівень 614 00:27:20,400 --> 00:27:21,740 що жоден читач не ніколи зрозуміють. 615 00:27:21,740 --> 00:27:25,080 Так що я збираюся узагальнити його як, я знаю, що малі літери крупніше. 616 00:27:25,080 --> 00:27:28,400 Я знаю, що заголовні літери є менші значення, за іронією долі. 617 00:27:28,400 --> 00:27:33,216 >> Але це практично еквівалентно кажучи відняти 32 з ов кронштейна I. 618 00:27:33,216 --> 00:27:35,430 Таким чином, в контексті їх букви, якщо букви 619 00:27:35,430 --> 00:27:38,950 трапляється ,, в нижньому регістрі , І я відняти 32, 620 00:27:38,950 --> 00:27:43,442 який ефект це має, математично, на нижній регістр? 621 00:27:43,442 --> 00:27:44,400 АУДИТОРІЯ: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 David J. Малан: заголовним його. 623 00:27:45,691 --> 00:27:48,440 І дійсно, саме тому наш Програма називається вигоду нулю. 624 00:27:48,440 --> 00:27:51,590 Ця програма або капіталізує лист, 625 00:27:51,590 --> 00:27:54,580 після перевірки, якщо це дійсно мала літера. 626 00:27:54,580 --> 00:27:59,810 В іншому випадку, в рядку 30, що мені робити, якщо це не рядкова буква, що я 627 00:27:59,810 --> 00:28:02,852 дивлячись на на зокрема ітерації в циклі. 628 00:28:02,852 --> 00:28:03,890 Просто роздрукуйте його. 629 00:28:03,890 --> 00:28:07,010 >> Отже не змінити речі це навіть не в нижньому регістрі. 630 00:28:07,010 --> 00:28:10,790 Обмежити себе трохи через невеликий р 631 00:28:10,790 --> 00:28:12,730 Тепер це досить складних. 632 00:28:12,730 --> 00:28:15,230 Але врешті-решт, це Так ми, якось, 633 00:28:15,230 --> 00:28:16,460 було реалізувати речі. 634 00:28:16,460 --> 00:28:19,780 Якщо я замість відкритого вигоду один, про слава богу. 635 00:28:19,780 --> 00:28:22,320 Там у функції покликаний верхньої, що може 636 00:28:22,320 --> 00:28:25,410 зробити все, що ми тільки що зробили на досить низькому рівні. 637 00:28:25,410 --> 00:28:28,752 >> Тепер, щоб верхня цікаво бо він заявив в файлі, 638 00:28:28,752 --> 00:28:31,210 і ви б тільки знаю, що це шляхом перевірки документації, 639 00:28:31,210 --> 00:28:35,730 або говорять, скажімо, в класі, де вона існує, у файлі з ім'ям ctype.h. 640 00:28:35,730 --> 00:28:37,630 Так що це ще один новий друг. 641 00:28:37,630 --> 00:28:40,750 І щоб верхня робить саме що передбачає його назва. 642 00:28:40,750 --> 00:28:44,860 >> Ви можете передати в якості аргументу, між ці дужки, то символ. 643 00:28:44,860 --> 00:28:48,390 Я збираюся пройти в i-й символ з S за допомогою нашого фантазії нові позначення 644 00:28:48,390 --> 00:28:49,870 за участю квадратні дужки. 645 00:28:49,870 --> 00:28:53,391 І зробити припущення, що це повернення Значення для верхньої мабуть, відбувається 646 00:28:53,391 --> 00:28:53,890 бути? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Прописну букву. 649 00:28:57,770 --> 00:28:58,620 Прописну букву. 650 00:28:58,620 --> 00:29:02,330 >> Так що, якщо я проходжу в рядкової а, сподіваюся, за визначенням, щоб верхня, 651 00:29:02,330 --> 00:29:05,600 він збирається повернутися Прописна А. В іншому випадку, 652 00:29:05,600 --> 00:29:08,590 якщо це не рядкова буква в перше місце, я просто роздрукувати його. 653 00:29:08,590 --> 00:29:10,800 І справді, помітити Другий друг тут. 654 00:29:10,800 --> 00:29:13,840 Не тільки, щоб верхня існує, але нижче, які 655 00:29:13,840 --> 00:29:16,200 насправді відповідає, що для мене питання. 656 00:29:16,200 --> 00:29:19,730 >> Тепер той, хто писав ці речі, 10s років тому, ви знаєте, що? 657 00:29:19,730 --> 00:29:23,840 Реалізовані у верхній і знизити з допомогою коду, як це. 658 00:29:23,840 --> 00:29:27,270 Але, знову ж таки, відповідно до ця ідея, абстрагуючись від, 659 00:29:27,270 --> 00:29:29,190 роду, нижній рівень Деталі реалізації. 660 00:29:29,190 --> 00:29:32,600 І стояв на плечах людей хто був до нас, за допомогою функції 661 00:29:32,600 --> 00:29:36,300 як у верхній і нижній, які досить дивно приємно роблять 662 00:29:36,300 --> 00:29:40,190 імені сказати, що вони роблять, є чудовий парадигма прийняти. 663 00:29:40,190 --> 00:29:44,040 >> Тепер, виходить, що якщо я читаю сторінка керівництва по, скажімо, у верхній, 664 00:29:44,040 --> 00:29:45,010 Я дізнатися щось ще. 665 00:29:45,010 --> 00:29:46,890 Так людина TOUPPER. 666 00:29:46,890 --> 00:29:48,050 Це трохи переважна. 667 00:29:48,050 --> 00:29:51,110 Але зауважте, ось що згадка про Файл заголовка, що я повинен використовувати. 668 00:29:51,110 --> 00:29:54,460 Як осторонь, бо це вводить в оману, функція 669 00:29:54,460 --> 00:29:59,070 використовує цілими замість символів з причин перевірки помилок. 670 00:29:59,070 --> 00:30:01,260 Але ми, можливо, прийти повернутися до цього в майбутньому. 671 00:30:01,260 --> 00:30:05,910 >> Але зверніть увагу, тут, на верхні новонавернених буква з у верхній регістр, якщо можливо. 672 00:30:05,910 --> 00:30:07,674 Так що це досить просто. 673 00:30:07,674 --> 00:30:09,340 А тепер давайте бути трохи більш конкретними. 674 00:30:09,340 --> 00:30:12,750 Давайте подивимося на частини Людина сторінки під що повертається. 675 00:30:12,750 --> 00:30:15,420 Значення, повернене в тому, що перетвореного листі. 676 00:30:15,420 --> 00:30:18,690 Або с, якщо перетворення не вдалося, 677 00:30:18,690 --> 00:30:20,250 де с є оригінальним вводу. 678 00:30:20,250 --> 00:30:24,140 Який я знаю звідси, з аргумент у верхній. 679 00:30:24,140 --> 00:30:25,780 >> Так в чому ж винесення з цього? 680 00:30:25,780 --> 00:30:28,060 Значення, повернене в тому, що перетвореного письма, 681 00:30:28,060 --> 00:30:32,110 або с, оригінал листа, якщо перетворення не вдалося. 682 00:30:32,110 --> 00:30:36,460 Що поліпшення я можу тому внести в дизайн мого коду в? 683 00:30:36,460 --> 00:30:37,146 Да? 684 00:30:37,146 --> 00:30:38,810 >> АУДИТОРІЯ: Ви можете зняти ще. 685 00:30:38,810 --> 00:30:40,810 David J. Малан: я можу видалити ще о, 686 00:30:40,810 --> 00:30:42,510 і не тільки іншу заяву. 687 00:30:42,510 --> 00:30:44,150 >> АУДИТОРІЯ: Ви можете видалити [нерозбірливо]. 688 00:30:44,150 --> 00:30:46,310 >> David J. Малан: я можу видалити всю вилку 689 00:30:46,310 --> 00:30:48,209 в дорозі, якщо ще в цілому. 690 00:30:48,209 --> 00:30:50,250 Так дійсно, дозвольте мені відкрити Остаточний варіант цього, 691 00:30:50,250 --> 00:30:55,540 капіталізувати-2 і зверніть увагу, наскільки, якщо Ви, сексуальна, код тепер отримує, 692 00:30:55,540 --> 00:31:00,040 в тому, що я знижена з деяких сім або близько того лінії до всього чотири, 693 00:31:00,040 --> 00:31:03,850 функціональні можливості, які я мав намір просто дзвінок у верхній, 694 00:31:03,850 --> 00:31:09,410 проходячи в и кронштейна I, і друку з, із заповнювачем% С, 695 00:31:09,410 --> 00:31:11,090 що особливий характер. 696 00:31:11,090 --> 00:31:14,560 >> Тепер можливо, є помилка, або, принаймні ризик помилки, 697 00:31:14,560 --> 00:31:15,350 в цій програмі. 698 00:31:15,350 --> 00:31:18,200 Так що просто повернутися до більш раннього винос, 699 00:31:18,200 --> 00:31:21,820 що я повинен, ймовірно, також зробити в ця програма, щоб зробити його більш стійким, 700 00:31:21,820 --> 00:31:24,974 так що немає ніякого способу, він може крах, навіть у рідких випадках? 701 00:31:24,974 --> 00:31:26,390 АУДИТОРІЯ: Переконайтеся, що це не NULL. 702 00:31:26,390 --> 00:31:28,056 David J. Малан: Переконайтеся, що це не NULL. 703 00:31:28,056 --> 00:31:31,030 Так насправді, щоб зробити цей супер власне, я повинен зробити щось подібне, 704 00:31:31,030 --> 00:31:35,300 якщо з не NULL, то йти вперед і виконати 705 00:31:35,300 --> 00:31:38,470 ці рядки коду, які Я можу то відступ так, 706 00:31:38,470 --> 00:31:39,870 , А потім покласти в моїй закриває фігурну дужку. 707 00:31:39,870 --> 00:31:41,550 Так добре пов'язуючи разом двох ідей. 708 00:31:41,550 --> 00:31:42,429 Да? 709 00:31:42,429 --> 00:31:44,470 АУДИТОРІЯ: Чи не могли б ви використовувати зробити в той час як петлі, а? 710 00:31:44,470 --> 00:31:47,270 David J. Малан: Міг Я роблю робити під час циклу? 711 00:31:47,270 --> 00:31:50,020 АУДИТОРІЯ: той то ви! Хочете, щоб переконатися, що ви насправді [нерозбірливо]. 712 00:31:50,020 --> 00:31:51,728 David J. Малан: Міг Ви використовуєте робити під час? 713 00:31:51,728 --> 00:31:52,450 Коротка відповідь, немає. 714 00:31:52,450 --> 00:31:54,700 Тому що ви збираєтеся ввести ще кутовий випадок. 715 00:31:54,700 --> 00:31:56,660 Якщо рядок має нульову довжину. 716 00:31:56,660 --> 00:31:59,600 Якщо, наприклад, я просто вдарив Введіть, ніколи не набравши Zamyla. 717 00:31:59,600 --> 00:32:02,490 Я збираюся вручити вам назад фактична рядок, як ми будемо в кінцевому рахунку бачити, 718 00:32:02,490 --> 00:32:03,780 що має нульові символи. 719 00:32:03,780 --> 00:32:05,630 Це все ще рядок, це просто супер короткі. 720 00:32:05,630 --> 00:32:07,960 Але якщо ви використовуєте зробити в той час, ви збираєтеся сліпо 721 00:32:07,960 --> 00:32:10,050 спробувати зробити те з поважати в цьому рядку, 722 00:32:10,050 --> 00:32:12,537 і нічого не їстиме. 723 00:32:12,537 --> 00:32:18,607 >> АУДИТОРІЯ: Ну, якщо ви зробили зробити [нерозбірливо], а s-- 724 00:32:18,607 --> 00:32:21,190 David J. Малан: О, я бачу, тримайте отримую рядок від користувача. 725 00:32:21,190 --> 00:32:23,525 Так короткий відповідь, ви може, і тримати приставати 726 00:32:23,525 --> 00:32:26,150 їх, щоб дати вам рядок ось досить коротким, щоб поміститися в пам'яті. 727 00:32:26,150 --> 00:32:26,700 Абсолютно. 728 00:32:26,700 --> 00:32:27,630 Я просто вирішив не. 729 00:32:27,630 --> 00:32:30,505 Якщо вони не дають мені рядок введення хочете, Кидаю, я здаюся. 730 00:32:30,505 --> 00:32:33,260 Але абсолютно, для цієї мети, Ви могли абсолютно зробити це. 731 00:32:33,260 --> 00:32:37,500 >> Так файли заголовків бібліотеки, що ми тепер знайомі з такими є, тут. 732 00:32:37,500 --> 00:32:41,550 Стандартний введення / висновок, CS50.h, string.h, ctype.h, і є, насправді, інші. 733 00:32:41,550 --> 00:32:44,460 Деякі з вас виявили Математична бібліотека math.h, 734 00:32:44,460 --> 00:32:48,200 Але дозвольте мені представити вам, тепер, щоб це ресурс, який персонал CS50, Девін, 735 00:32:48,200 --> 00:32:50,630 і Роб, і Гейб зокрема зібрали. 736 00:32:50,630 --> 00:32:52,630 Це скоро посилаються на сайт Курсу. 737 00:32:52,630 --> 00:32:54,870 Вона називається CS50 посилання. 738 00:32:54,870 --> 00:32:58,230 >> Який просто щоб дати вам швидкий Смак цього, працює таким чином. 739 00:32:58,230 --> 00:33:00,740 Пустіть мене до reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Ви побачите на лівій руці сторону з величезним переліком 741 00:33:02,990 --> 00:33:04,595 функцій, які приходять з в. 742 00:33:04,595 --> 00:33:07,790 Але якщо я все одно, на даний момент, про щось на зразок STRLEN, 743 00:33:07,790 --> 00:33:08,746 Я можу надрукувати його там. 744 00:33:08,746 --> 00:33:10,870 Він фільтрує список вниз тільки те, що мене хвилює. 745 00:33:10,870 --> 00:33:11,940 Я збираюся натисніть його. 746 00:33:11,940 --> 00:33:14,740 А тепер зліва, ви побачите, що ми сподіваємося, 747 00:33:14,740 --> 00:33:18,290 є більш простим, людським доброзичливий пояснення того, як 748 00:33:18,290 --> 00:33:19,170 ця функція працює. 749 00:33:19,170 --> 00:33:20,600 >> Повертає довжину рядка. 750 00:33:20,600 --> 00:33:24,060 Ось короткий огляд, от як ви використовувати його в термінах файлу заголовка, 751 00:33:24,060 --> 00:33:27,430 і в плані того, що функції Схоже, з точки зору своїх аргументів. 752 00:33:27,430 --> 00:33:30,250 А потім тут, повертається довжина рядка. 753 00:33:30,250 --> 00:33:34,280 Але для тих з вас, більш комфортно, Ви можете фактично натисніть зручнішою, 754 00:33:34,280 --> 00:33:37,070 і зміст цього сторінка, зараз, зміниться 755 00:33:37,070 --> 00:33:41,660 бути значення за замовчуванням що Ви отримуєте, використовуючи довідкову сторінку. 756 00:33:41,660 --> 00:33:44,100 >> Іншими словами, CS50 посилання спрощення 757 00:33:44,100 --> 00:33:46,220 сторінок керівництва по персоналу, для студентів. 758 00:33:46,220 --> 00:33:49,320 Зокрема, тих, менше знайомі і між ними, так що ви 759 00:33:49,320 --> 00:33:51,660 не повинні намагатися обернути ваш розум навколо, відверто кажучи, 760 00:33:51,660 --> 00:33:55,030 деякі досить загадковим синтаксис і документація то. 761 00:33:55,030 --> 00:33:57,650 >> Так що майте це на увазі, в прийдешні дні. 762 00:33:57,650 --> 00:33:59,560 Так ось, знову ж таки, є Zamyla. 763 00:33:59,560 --> 00:34:03,255 Давайте тепер поставити запитання ось трохи більше людського доступні. 764 00:34:03,255 --> 00:34:05,380 Завдяки Чанг, хто був друк більше слонів 765 00:34:05,380 --> 00:34:07,090 без зупинок протягом останніх декількох днів. 766 00:34:07,090 --> 00:34:09,730 У нас є можливість дати щонайменше, один з них же. 767 00:34:09,730 --> 00:34:13,239 Якби ми могли отримати тільки одного волонтера прийти на до малювати на екрані. 768 00:34:13,239 --> 00:34:14,530 Як тут? 769 00:34:14,530 --> 00:34:15,340 >> Піднімайтеся. 770 00:34:15,340 --> 00:34:16,720 Як тебе звуть? 771 00:34:16,720 --> 00:34:17,219 ALEX: Алекс. 772 00:34:17,219 --> 00:34:17,760 David J. Малан: Алекс. 773 00:34:17,760 --> 00:34:18,259 Добре. 774 00:34:18,259 --> 00:34:19,388 Алекс, давай до. 775 00:34:19,388 --> 00:34:21,679 Ми збираємося, щоб побачити ваш рукописного тексту на екрані тут. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Гаразд, приємно познайомитися. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Хороший ви зустрітися з вами. 779 00:34:26,429 --> 00:34:27,512 >> David J. Малан: Добре. 780 00:34:27,512 --> 00:34:28,969 Так, супер проста вправа. 781 00:34:28,969 --> 00:34:31,440 Бар не є високою, щоб отримати слона сьогодні. 782 00:34:31,440 --> 00:34:33,439 Ви граєте роль GetString. 783 00:34:33,439 --> 00:34:35,980 І я збираюся просто сказати вам, рядок, коли ви отримали. 784 00:34:35,980 --> 00:34:38,080 І припустимо, що вас, GetString, були названі. 785 00:34:38,080 --> 00:34:42,480 І людина, як і я, має ввели в Zamyla, Z-A-Y-M-L-A. 786 00:34:42,480 --> 00:34:45,650 Просто йти вперед і написати Zamyla на Екран, як ніби ви отримали його 787 00:34:45,650 --> 00:34:47,250 і зберігається її в пам'яті ,. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Залишаючи місце для того, що буде кілька другий words-- це нормально, продовжуйте йти. 790 00:34:55,570 --> 00:34:59,620 >> [Сміх] 791 00:34:59,620 --> 00:35:00,800 >> Так Zamyla, Відмінно. 792 00:35:00,800 --> 00:35:04,880 Так тепер, що вам, GetString, називаються знову. 793 00:35:04,880 --> 00:35:09,350 І тому, я надати вам, в клавіатура, з іншим ім'ям, Белінда. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Добре. 796 00:35:18,060 --> 00:35:22,380 І тепер в наступний раз GetString є називається, я друкую в щось на зразок Гейба, 797 00:35:22,380 --> 00:35:27,560 Г-А-В-Е. Ви дійсно приймаючи з серцево-пам'яті з довільним доступом. 798 00:35:27,560 --> 00:35:29,631 Який малюнок все зовсім випадково. 799 00:35:29,631 --> 00:35:30,130 Добре. 800 00:35:30,130 --> 00:35:31,104 >> [Сміх] 801 00:35:31,104 --> 00:35:32,520 ALEX: На жаль мій почерк погано. 802 00:35:32,520 --> 00:35:33,770 David J. Малан: Ні, це нормально. 803 00:35:33,770 --> 00:35:40,480 А як щодо Роба, R-O-B. Добре. 804 00:35:40,480 --> 00:35:41,020 Добре. 805 00:35:41,020 --> 00:35:43,853 Так що я не очікував, вам буде роду лежали речі таким чином. 806 00:35:43,853 --> 00:35:45,020 Але ми можемо зробити цю роботу. 807 00:35:45,020 --> 00:35:48,810 Так як же ви йдете з приводу укладання з цих символів в пам'яті? 808 00:35:48,810 --> 00:35:51,310 Іншими словами, якщо ми думаємо про це прямокутний чорний екран 809 00:35:51,310 --> 00:35:53,550 як представляють комп'ютера RAM, або пам'яті. 810 00:35:53,550 --> 00:35:55,850 >> І нагадати, що оперативна пам'ять тільки ціла купа байтів, 811 00:35:55,850 --> 00:35:57,480 і байти ціла купа біт. 812 00:35:57,480 --> 00:35:59,350 І біти так чи інакше реалізовані, як правило, 813 00:35:59,350 --> 00:36:01,119 з деякою формою електрику на апаратному рівні. 814 00:36:01,119 --> 00:36:03,160 Так що свого роду нашарування ми говорили про 815 00:36:03,160 --> 00:36:04,510 і тепер може приймати як належне. 816 00:36:04,510 --> 00:36:07,020 Як ви йти про вирішити, де написати 817 00:36:07,020 --> 00:36:11,634 Роб проти Гейб проти Белінда проти Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Я тільки що зробив це в замовити, що ви сказали мені. 819 00:36:14,020 --> 00:36:15,650 >> David J. Малан: І то вірно. 820 00:36:15,650 --> 00:36:20,100 Але те, що регулюється, де ви поклали Ім'я Белінди та ім'я Гейба? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Нічого? 822 00:36:20,764 --> 00:36:22,930 David J. Малан: [Сміється] Так що працює, це нормально. 823 00:36:22,930 --> 00:36:25,290 Так комп'ютери трохи більш упорядкованим, ніж це. 824 00:36:25,290 --> 00:36:29,000 І тому, коли ми implement-- залишитися там протягом тільки moment-- коли ми насправді 825 00:36:29,000 --> 00:36:31,470 здійснити щось подібне GetString в комп'ютері, 826 00:36:31,470 --> 00:36:34,480 Zamyla може бути викладений в значній мірі як ви робили на екрані, є. 827 00:36:34,480 --> 00:36:36,660 >> І те, що є ключем до помітите тут, що Алекс зробив, 828 00:36:36,660 --> 00:36:40,260 Тобто це свого роду демаркації серед кожного з цих слів, чи не так? 829 00:36:40,260 --> 00:36:46,580 Ви не писав Z-А-М-Y-L-А-В-Е-Д-І-Н-Д-А-Г-А-В- 830 00:36:46,580 --> 00:36:49,740 іншими словами, є свого роду демаркаційна який, здається ,, 831 00:36:49,740 --> 00:36:52,370 роду, випадкова відстань між цими різними словами. 832 00:36:52,370 --> 00:36:54,120 Але це добре, тому що ми, люди, можемо зараз 833 00:36:54,120 --> 00:36:56,470 собі, що це чотири різних рядків. 834 00:36:56,470 --> 00:36:59,540 Це не просто одна послідовність безліч символів. 835 00:36:59,540 --> 00:37:04,190 Таким чином, комп'ютер, то, між тим, може зайняти рядок як Zamyla, 836 00:37:04,190 --> 00:37:07,220 покласти кожен з цих листів всередині байта в пам'яті. 837 00:37:07,220 --> 00:37:10,400 Але це число набагато більше, Звичайно, чим шести символів. 838 00:37:10,400 --> 00:37:11,690 >> Там ціла купа пам'яті. 839 00:37:11,690 --> 00:37:15,330 І так далі, це Сітка коробок збирається 840 00:37:15,330 --> 00:37:17,560 уявляти, що Алекс просто зробив тут на екрані. 841 00:37:17,560 --> 00:37:20,937 А тепер, Алекс, ми можемо запропонувати вам синій або помаранчевий слон з Чанг. 842 00:37:20,937 --> 00:37:22,270 ALEX: Я візьму синій слон. 843 00:37:22,270 --> 00:37:23,120 David J. Малан: синій слон. 844 00:37:23,120 --> 00:37:25,580 Так велике оплески, якби ми могли, для Алекса тут. 845 00:37:25,580 --> 00:37:26,100 >> [Оплески] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Спасибо. 847 00:37:26,766 --> 00:37:28,820 David J. Малан: Спасибо. 848 00:37:28,820 --> 00:37:36,230 Таким чином, винос в тому, що, незважаючи на те, зразок вид змінився з плином часу, тут 849 00:37:36,230 --> 00:37:40,430 на борту, там був цей демаркація між різними рядками 850 00:37:40,430 --> 00:37:42,610 що Алекс отримав для нас. 851 00:37:42,610 --> 00:37:45,230 Тепер комп'ютери, чесно кажучи, може зробити те ж саме. 852 00:37:45,230 --> 00:37:48,210 Вони могли роду грюкнути рядка в будь-якому місці в пам'яті. 853 00:37:48,210 --> 00:37:50,710 Тут, нагорі, тут, сюди, сюди. 854 00:37:50,710 --> 00:37:52,020 >> Вони могли зробити саме це. 855 00:37:52,020 --> 00:37:54,280 Але, звичайно, це ймовірно, не найкраще планування. 856 00:37:54,280 --> 00:37:54,780 Вірно? 857 00:37:54,780 --> 00:37:57,340 Якщо я питав Алекса отримати імена, ймовірно, він 858 00:37:57,340 --> 00:38:01,370 поставити ще кілька тут, може бути, до тут, тут, тут, зрештою, 859 00:38:01,370 --> 00:38:02,211 сюди. 860 00:38:02,211 --> 00:38:05,460 Але з планування трохи більше, звичайно, ми могли закласти речі більш акуратно. 861 00:38:05,460 --> 00:38:07,350 І справді, це те, що комп'ютер робить. 862 00:38:07,350 --> 00:38:10,720 >> Але заковика в тому, що якщо наступна рядок я отримую 863 00:38:10,720 --> 00:38:14,050 після Zamyla щось як Белінда, 864 00:38:14,050 --> 00:38:17,929 запропонувати, де ми могли б написати Лист б по відношенню до цієї сітці? 865 00:38:17,929 --> 00:38:18,720 Куди б ви вирушили? 866 00:38:18,720 --> 00:38:21,480 Для праворуч від A, нижче г, нижче а? 867 00:38:21,480 --> 00:38:23,204 Що б ваші перші інстинкти бути? 868 00:38:23,204 --> 00:38:24,120 АУДИТОРІЯ: Нижче м 869 00:38:24,120 --> 00:38:25,100 David J. Малан: Так нижче м 870 00:38:25,100 --> 00:38:26,530 І це значною просто, чи не так? 871 00:38:26,530 --> 00:38:29,321 Це почасти охайно, це те, що ми робимо на клавіатурі, коли ми потрапили Enter, 872 00:38:29,321 --> 00:38:31,770 або електронною поштою, роблячи маркований список речей. 873 00:38:31,770 --> 00:38:34,310 Але реальність така, що комп'ютери спробувати бути більш ефективним, 874 00:38:34,310 --> 00:38:37,170 і втиснути звичайно стільки даних в оперативній пам'яті, наскільки це можливо, 875 00:38:37,170 --> 00:38:38,890 так що вам не потрібно витрачати ніяких байт. 876 00:38:38,890 --> 00:38:41,545 Так що вам не потрібно витрачати будь-який екран нерухомості. 877 00:38:41,545 --> 00:38:44,170 І проблема, однак, полягає в тому, що якщо ми буквально поклав лист 878 00:38:44,170 --> 00:38:49,940 б після, як ми збираємося знати, де закінчується ім'я Zamyla в 879 00:38:49,940 --> 00:38:51,840 та ім'я Белінди починається? 880 00:38:51,840 --> 00:38:55,270 Так ви, люди, тільки що запропонував, ну, натисніть клавішу вводу, істотно. 881 00:38:55,270 --> 00:38:56,410 Поклади його нижче. 882 00:38:56,410 --> 00:38:59,750 Або навіть, як зробив Алекс, просто почати писати ім'я наступного нижче попереднього, 883 00:38:59,750 --> 00:39:01,583 і нижче, що один, і Потім нижче того. 884 00:39:01,583 --> 00:39:02,510 Це візуальний сигнал. 885 00:39:02,510 --> 00:39:05,960 >> Комп'ютери є ще один візуальний сигнал, але це трохи більш лаконічним. 886 00:39:05,960 --> 00:39:07,840 Саме цей боягузливий характер. 887 00:39:07,840 --> 00:39:11,890 Зворотна коса риса 0, яка, можливо, нагадує зворотної косою п, 888 00:39:11,890 --> 00:39:12,640 і так далі, в даний час. 889 00:39:12,640 --> 00:39:14,120 Спеціальні керуючі послідовності. 890 00:39:14,120 --> 00:39:19,120 Зворотна коса риса 0 є спосіб що представляють вісім нуль біт поспіль. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Те, як ви висловити це не означає, потрапив в число нуль на клавіатурі, 893 00:39:26,130 --> 00:39:28,140 тому що в тому, що являє собою ASCII-символ. 894 00:39:28,140 --> 00:39:30,990 Це виглядає як число, але насправді це десяткове число 895 00:39:30,990 --> 00:39:35,910 що являє собою циркуляр Символ, кругова шрифт. 896 00:39:35,910 --> 00:39:38,410 Між тим, зворотний слеш нуль означає, буквально 897 00:39:38,410 --> 00:39:40,700 покласти вісім нуль байт тут для мене. 898 00:39:40,700 --> 00:39:42,136 >> Так що це дещо довільно. 899 00:39:42,136 --> 00:39:44,260 Ми могли б використовувати будь-який візерунок бітів, але світ 900 00:39:44,260 --> 00:39:46,610 вирішив кілька років назад, що для подання 901 00:39:46,610 --> 00:39:49,710 кінець рядка в пам'яті, просто поставити цілу купу нулів. 902 00:39:49,710 --> 00:39:51,000 Тому що ми можемо виявити, що. 903 00:39:51,000 --> 00:39:54,790 Тепер це означає, що немає буква алфавіту можуть бути представлені нулями. 904 00:39:54,790 --> 00:39:58,480 >> Але це не страшно, ми вже бачили що ми використовуємо 65 на до в 97 і вище. 905 00:39:58,480 --> 00:40:00,290 Ми нічого не дала закрити для всіх нулів. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Так Белінди в пам'яті комп'ютера насправді відбувається, щоб піти сюди. 908 00:40:06,540 --> 00:40:09,764 Я намалював його в жовтий просто щоб привернути нашу увагу до нього. 909 00:40:09,764 --> 00:40:11,680 І зауважте, теж це абсолютно довільно. 910 00:40:11,680 --> 00:40:12,680 Я намалював її у вигляді сітки. 911 00:40:12,680 --> 00:40:14,460 Як, ОЗУ лише деякі фізичний об'єкт. 912 00:40:14,460 --> 00:40:17,300 Це не обов'язково рядків і стовпців, як такої. 913 00:40:17,300 --> 00:40:20,490 Це просто є ціла купа байтів реалізовані в апаратних засобах чи інакше. 914 00:40:20,490 --> 00:40:22,817 Але якщо після Belinda I набрав в імені Гейба, 915 00:40:22,817 --> 00:40:25,650 він буде в кінцевому підсумку тут, в пам'яті, і якщо я набрав в імені Daven в, 916 00:40:25,650 --> 00:40:27,316 наприклад, він буде в кінцевому підсумку тут. 917 00:40:27,316 --> 00:40:29,310 І я можу продовжувати написати навіть кілька імен. 918 00:40:29,310 --> 00:40:32,100 >> На жаль, якщо я намагаюся написати супер довге ім'я, 919 00:40:32,100 --> 00:40:33,730 Я в кінцевому підсумку може не вистачити пам'яті. 920 00:40:33,730 --> 00:40:37,810 В цьому випадку, GetString є збирається повернути NULL, як ми вже говорили. 921 00:40:37,810 --> 00:40:41,720 Але, на щастя, принаймні, в це візуальна тут, ми не добиралися так далеко. 922 00:40:41,720 --> 00:40:45,860 >> Тепер те, що приємно, що це Загальна ідея лікування речі 923 00:40:45,860 --> 00:40:49,720 як в коробках є Представник особливість C 924 00:40:49,720 --> 00:40:52,690 і багато мов, Відомо, у вигляді масиву. 925 00:40:52,690 --> 00:40:55,490 Масив являє собою інший тип даних. 926 00:40:55,490 --> 00:40:57,380 Це структура даних, якщо ви будете. 927 00:40:57,380 --> 00:41:01,160 Структура в сенсі його дійсно, вид, схожий на коробку, принаймні, 928 00:41:01,160 --> 00:41:02,320 в вашій уяві. 929 00:41:02,320 --> 00:41:09,680 Масив являє собою безперервний послідовність однакових типів даних, 930 00:41:09,680 --> 00:41:11,330 спина до спини до спини до спини. 931 00:41:11,330 --> 00:41:14,720 >> Так рядок, в іншому слова, являє собою масив символів. 932 00:41:14,720 --> 00:41:16,120 Масив символів. 933 00:41:16,120 --> 00:41:19,070 Але, виявляється, у вас може бути масиви грона речей. 934 00:41:19,070 --> 00:41:21,870 Насправді, ми можемо поставити навіть числа в масиві. 935 00:41:21,870 --> 00:41:23,920 Так, в якій формі ми збираємося почати 936 00:41:23,920 --> 00:41:26,590 заявляють, що це дані Структура відомі як масив 937 00:41:26,590 --> 00:41:28,250 також збирається використовувати квадратні дужки. 938 00:41:28,250 --> 00:41:31,500 Але ці квадратні дужки збираєтеся мають різне значення в цьому контексті. 939 00:41:31,500 --> 00:41:33,450 >> І давайте подивимося його в такий спосіб. 940 00:41:33,450 --> 00:41:36,780 Припустимо, що я відкрив до нового файлу тут. 941 00:41:36,780 --> 00:41:38,535 І я зберегти це як ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 І я врятую це в моїй папці тут. 944 00:41:43,470 --> 00:41:46,130 А тепер я збираюся йти вперед і почати друкувати то 945 00:41:46,130 --> 00:41:53,940 як включити CS50.h, включають stdio.h, тап_п порожнечу. 946 00:41:53,940 --> 00:41:57,370 А потім всередині тут, я хочу спочатку мати Int званий вік. 947 00:41:57,370 --> 00:42:01,371 >> І я збираюся використовувати це, щоб отримати Int від користувача для його віку. 948 00:42:01,371 --> 00:42:04,620 Але ця програма призначена для використання кілька людей, для будь-якому контексті. 949 00:42:04,620 --> 00:42:05,490 У мене є черга людей. 950 00:42:05,490 --> 00:42:08,281 Всі вони повинні ввести їх вік, можливо, деякі, я не знаю ,, 951 00:42:08,281 --> 00:42:10,530 конкуренція, або подія що вони прибули для. 952 00:42:10,530 --> 00:42:13,030 Так що наступного людина, я потрібно ще одну змінну. 953 00:42:13,030 --> 00:42:15,790 >> Тому що, якщо я просто роблю вік отримує GetInt, це 954 00:42:15,790 --> 00:42:18,500 збирається колошматити, або переписати вік попереднього людини. 955 00:42:18,500 --> 00:42:19,760 Так що немає нічого хорошого. 956 00:42:19,760 --> 00:42:21,790 Так мій перший інстинкт може бути, о, все в порядку, 957 00:42:21,790 --> 00:42:26,260 якщо я хочу, щоб отримати кілька народних ages-- давайте назвемо цей age1, 958 00:42:26,260 --> 00:42:31,280 Int age2 отримує Int, Int Age3 отримує GetInt. 959 00:42:31,280 --> 00:42:35,340 А тепер я збираюся використовувати деякі псевдокод код тут. 960 00:42:35,340 --> 00:42:37,679 >> Дії, передбачені цими цифрами. 961 00:42:37,679 --> 00:42:40,470 Ми залишимо на інший день, що ми там робимо, бо ми тільки 962 00:42:40,470 --> 00:42:44,200 догляд на даний момент про age1, age2, Age3. 963 00:42:44,200 --> 00:42:46,450 На жаль, як тільки я скомпілювати цю програму 964 00:42:46,450 --> 00:42:51,140 і поклав його перед реальних користувачів, що принципово поганий дизайн 965 00:42:51,140 --> 00:42:53,890 Рішення я, здається, зробили? 966 00:42:53,890 --> 00:42:54,624 Да? 967 00:42:54,624 --> 00:42:55,499 АУДИТОРІЯ: [нерозбірливо] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 David J. Малан: Так, Я навіть не намагався 970 00:42:59,820 --> 00:43:02,028 щоб з'ясувати, як багато століть я насправді хвилює? 971 00:43:02,028 --> 00:43:05,380 Якщо у мене є менше трьох осіб тут, і, отже, менше трьох віків, 972 00:43:05,380 --> 00:43:07,260 Я все ще сліпо очікували три. 973 00:43:07,260 --> 00:43:08,720 Не дай Бог, чотири людини з'являються. 974 00:43:08,720 --> 00:43:10,990 Моя програма просто не буде навіть підтримувати їх. 975 00:43:10,990 --> 00:43:13,280 >> І таким чином, це, довга історія Коротше кажучи, це не дуже гарна звичка. 976 00:43:13,280 --> 00:43:13,780 Вірно? 977 00:43:13,780 --> 00:43:16,530 Я був по суті копіювання та вставити код і просто настройки 978 00:43:16,530 --> 00:43:17,430 імена змінних. 979 00:43:17,430 --> 00:43:22,410 І, мій бог, якщо у вас, не три віків, але 10 або 100, або навіть 6500 980 00:43:22,410 --> 00:43:23,820 магістрантів, наприклад. 981 00:43:23,820 --> 00:43:26,950 Це не збирається бути особливо елегантний код, або стійке. 982 00:43:26,950 --> 00:43:29,200 Ви будете мати, щоб переписати програму кожен раз, 983 00:43:29,200 --> 00:43:30,760 ваш кількість людей зміни. 984 00:43:30,760 --> 00:43:35,090 >> Так, на щастя, у наш фактичне ages.c файл на сьогодні, 985 00:43:35,090 --> 00:43:36,970 у нас є більш розумне рішення. 986 00:43:36,970 --> 00:43:39,800 По-перше, я збираюся запозичувати побудувати ми використовували кілька разів, 987 00:43:39,800 --> 00:43:43,744 це зробити, в той час циклу, з тим щоб отримати кількість людей в кімнаті. 988 00:43:43,744 --> 00:43:46,910 Я просто збираюся приставати до користувача, знову і знову, поки він чи вона дає мені 989 00:43:46,910 --> 00:43:49,260 значення п, що це позитивне ціле число. 990 00:43:49,260 --> 00:43:51,590 >> Я міг би використовувати, в минулому Час перейдемо позитивний Int. 991 00:43:51,590 --> 00:43:53,720 Але ми не маємо, що по-справжньому, тому я пішов вперед 992 00:43:53,720 --> 00:43:55,660 і знову реалізували цю ідею. 993 00:43:55,660 --> 00:43:58,410 Тепер сюди, це новий трюк. 994 00:43:58,410 --> 00:44:02,260 У рядку 27, як і зауваження в лінії 26 передбачає, 995 00:44:02,260 --> 00:44:05,180 оголосити масив, в якому для зберігання вік кожного. 996 00:44:05,180 --> 00:44:09,320 >> Так що якщо ви хочете отримати, не один Int, чи не два цілих, але ціла купа цілими. 997 00:44:09,320 --> 00:44:13,800 Зокрема н цілі, були н мощі бути три, може бути 100, може бути 1000. 998 00:44:13,800 --> 00:44:17,570 Синтаксис, просто кажучи, є скажемо, який тип даних ви хочете? 999 00:44:17,570 --> 00:44:19,620 Що ви хочете подзвонити що частина пам'яті? 1000 00:44:19,620 --> 00:44:23,530 Що ви хочете подзвонити сітку що виглядає так образно? 1001 00:44:23,530 --> 00:44:27,700 >> І в дужках тут, ви говорите, як великий Ви хочете масив, щоб бути. 1002 00:44:27,700 --> 00:44:30,450 І так раніше, коли я сказав, Синтаксис трохи відрізняється тут, 1003 00:44:30,450 --> 00:44:33,614 ми до цих пір за допомогою квадратних дужок, але коли я оголошую масив, 1004 00:44:33,614 --> 00:44:35,530 число всередині Квадратні дужки кошти 1005 00:44:35,530 --> 00:44:37,610 наскільки велика ви хочете масив, щоб бути. 1006 00:44:37,610 --> 00:44:42,490 >> Навпаки, коли ми використовували S Кронштейн я хвилину тому, з, рядок, 1007 00:44:42,490 --> 00:44:46,820 насправді масив символів, але коли ви не оголошення змінної, 1008 00:44:46,820 --> 00:44:49,760 як з цим ключовим словом тут, ви просто отримувати 1009 00:44:49,760 --> 00:44:54,280 конкретної індекс, визначений елемент з цього масиву. 1010 00:44:54,280 --> 00:44:57,090 Після того, як ми знаємо, що, решта це дуже просто. 1011 00:44:57,090 --> 00:45:00,765 Якщо нова я перший буду роздрукувати що вік людини числа I. 1012 00:45:00,765 --> 00:45:03,890 Де я тільки що сказала людина номер один, людина номер два, людина номер три. 1013 00:45:03,890 --> 00:45:06,306 >> І я просто роблю арифметику, так що, як нормальні люди, 1014 00:45:06,306 --> 00:45:09,030 рахувати з варіантом Програма, а не від нуля. 1015 00:45:09,030 --> 00:45:13,620 Тоді я називаю GetInt, але я зберігаю відповідь у віці дужки I. 1016 00:45:13,620 --> 00:45:16,610 Який i-го вік в масиві. 1017 00:45:16,610 --> 00:45:21,640 Так в той час як останній раз ми були лікуванні ці коробки як символів для назви Zamyla в, 1018 00:45:21,640 --> 00:45:22,490 та інші. 1019 00:45:22,490 --> 00:45:26,530 Тепер, ці прямокутники представляють 32 біта, або чотири байти 1020 00:45:26,530 --> 00:45:29,510 , В якому ми можемо зберігати Int, Int, Int. 1021 00:45:29,510 --> 00:45:31,890 Все це, знову ж таки, той же тип даних. 1022 00:45:31,890 --> 00:45:33,890 >> Тепер я роблю дурість, як проходить час, просто 1023 00:45:33,890 --> 00:45:35,510 щоб виправдати написання цієї програми. 1024 00:45:35,510 --> 00:45:40,050 А потім сюди, я знову ітерації по масиву кажучи через рік, 1025 00:45:40,050 --> 00:45:43,090 людина номер один воля бути зайвим років. 1026 00:45:43,090 --> 00:45:45,010 І з'ясувати, що math-- Я маю на увазі, це 1027 00:45:45,010 --> 00:45:49,260 не дуже складно arithmetic-- Я просто додати один з їх віком. 1028 00:45:49,260 --> 00:45:51,240 Просто щоб показати, знову ж таки, це. 1029 00:45:51,240 --> 00:45:57,910 >> Так само, як я можу Індекс в рядок, с, так я можу Індекс в масиві віків, 1030 00:45:57,910 --> 00:45:59,950 як що. 1031 00:45:59,950 --> 00:46:03,340 Так де ж це буде брати нас? 1032 00:46:03,340 --> 00:46:07,070 Таким чином, ми побачимо, в кінцевому рахунку, кілька речей, в найближчі дні. 1033 00:46:07,070 --> 00:46:09,510 Один, весь цей час, коли писати власні програми, 1034 00:46:09,510 --> 00:46:11,239 як Маріо, жодного, кредит. 1035 00:46:11,239 --> 00:46:13,780 Ти вводити ім'я програма і удару Enter. 1036 00:46:13,780 --> 00:46:15,610 І тоді стає введення користувача. 1037 00:46:15,610 --> 00:46:18,137 >> З GetString, GetInt, getLongLong, або тому подібне. 1038 00:46:18,137 --> 00:46:20,720 Але виявляється, що підтримує Сі те, що називається командного рядка 1039 00:46:20,720 --> 00:46:25,740 Аргументи, який йде, щоб дозволити нам насправді отримати на слова, які ви друкуєте, 1040 00:46:25,740 --> 00:46:28,570 на мигаючу рядку після назви вашої програми. 1041 00:46:28,570 --> 00:46:31,430 >> Таким чином, в найближчі дні, вам можна ввести щось на зразок Цезаря, 1042 00:46:31,430 --> 00:46:34,950 або ./caesar число 13, після цього. 1043 00:46:34,950 --> 00:46:36,070 Подивимося, як це працює. 1044 00:46:36,070 --> 00:46:37,550 Тому що дійсно, в Проблема встановити два, ми 1045 00:46:37,550 --> 00:46:39,383 збирається познайомити вас в маленький-то 1046 00:46:39,383 --> 00:46:42,360 нагадує Релфі виклик раніше картографії. 1047 00:46:42,360 --> 00:46:43,970 Мистецтво дертися інформацію. 1048 00:46:43,970 --> 00:46:46,660 Це, по суті, є дуже нагадує, що зробив Ralphie. 1049 00:46:46,660 --> 00:46:51,380 >> Це приклад шифрування Алгоритм називається rot13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Що означає просто повернути букви в алфавіті 13 місць. 1051 00:46:54,910 --> 00:46:58,309 І якщо ви це зробите, ви побачите зараз що це, мабуть, знайома фраза. 1052 00:46:58,309 --> 00:47:01,100 Але те, як ми збираємося використовувати це, в остаточному підсумку, є в цілому. 1053 00:47:01,100 --> 00:47:04,390 >> В P встановити два, в стандартній версії, ви реалізуєте кілька шифрів, 1054 00:47:04,390 --> 00:47:06,720 одна називається Цезар, один називається Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Обидва вони є обертання шифри, в тому, що так чи інакше ви 1056 00:47:10,090 --> 00:47:11,826 перетворити одну букву в інший буквою. 1057 00:47:11,826 --> 00:47:12,950 І Цезар супер просто. 1058 00:47:12,950 --> 00:47:16,220 Ви додаєте один, ви додаєте 13, або деяке число до 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere робить, що на за листом основою. 1060 00:47:19,570 --> 00:47:22,140 Так Vigenere, як ви побачите в специфікації, є більш безпечним. 1061 00:47:22,140 --> 00:47:24,973 >> Але в кінці дня, що Ви будете реалізації та P встановити два, 1062 00:47:24,973 --> 00:47:29,050 є те, що ключ, який ви використовуєте обидва для шифрування і дешифрування. 1063 00:47:29,050 --> 00:47:32,160 Посилаючись на процес перетворення звичайний текст, деякі вихідне повідомлення, 1064 00:47:32,160 --> 00:47:34,490 в шифрувальника тексту, який це те, в зашифрованому вигляді. 1065 00:47:34,490 --> 00:47:36,220 А потім розшифровки його знову. 1066 00:47:36,220 --> 00:47:38,119 >> В хакерській видання, Між тим, ви будете 1067 00:47:38,119 --> 00:47:40,660 доручено щось подібне в дусі, де ми дамо вам 1068 00:47:40,660 --> 00:47:44,610 файлу, від типового Linux або Mac або Unix комп'ютер називається Etsy 1069 00:47:44,610 --> 00:47:47,800 пароль, який містить всю купа імен користувачів і паролів. 1070 00:47:47,800 --> 00:47:50,932 І ці паролі є всі був зашифрований, або хеш, 1071 00:47:50,932 --> 00:47:53,140 так сказати, більш правильно як ви побачите в специфікації. 1072 00:47:53,140 --> 00:47:57,090 >> І хакер видання буде оспорювати Ви з прийомом вхід, як це, 1073 00:47:57,090 --> 00:47:58,800 і злому пароля. 1074 00:47:58,800 --> 00:48:02,590 Тобто, з'ясувати, що пароль Людини насправді. 1075 00:48:02,590 --> 00:48:05,570 Тому що, дійсно, паролі як правило, не зберігаються у відкритому вигляді, 1076 00:48:05,570 --> 00:48:08,260 і взагалі паролі повинно бути важко здогадатися. 1077 00:48:08,260 --> 00:48:09,610 Це не часто буває. 1078 00:48:09,610 --> 00:48:12,110 >> І те, що я думав, що ми зробити, це укласти з пару хвилин 1079 00:48:12,110 --> 00:48:15,160 Погляд на особливо бідний вибір паролів 1080 00:48:15,160 --> 00:48:17,260 з фільму ви, можливо, пам'ятаєте ніжно. 1081 00:48:17,260 --> 00:48:18,915 А якщо ні, ви повинні орендувати. 1082 00:48:18,915 --> 00:48:20,070 >> [Відеовідтворення] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Ви лиходій, що відбувається? 1084 00:48:22,320 --> 00:48:24,240 Що ти робиш з моєю дочкою? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Мені уявити блискучий молодий пластичний хірург, 1086 00:48:28,010 --> 00:48:30,010 Доктор Філіп Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Найбільший робота носа людина в Весь всесвіт і Беверлі-Хіллз. 1088 00:48:35,020 --> 00:48:36,140 >> -Ваш Високість. 1089 00:48:36,140 --> 00:48:36,820 >> -Nose Робота? 1090 00:48:36,820 --> 00:48:37,700 Я не розумію. 1091 00:48:37,700 --> 00:48:39,070 Вона вже була робота ніс. 1092 00:48:39,070 --> 00:48:40,800 Це було її солодкий 16 присутня. 1093 00:48:40,800 --> 00:48:42,590 >> Ні, це не те, що ви думаєте. 1094 00:48:42,590 --> 00:48:44,490 Це набагато, набагато гірше. 1095 00:48:44,490 --> 00:48:48,160 Якщо ви не даєте мені Поєднання з повітря щита, 1096 00:48:48,160 --> 00:48:52,748 Лікар Schlotkin дасть свій дочку назад свій старий ніс. 1097 00:48:52,748 --> 00:48:53,748 - [Зітхає] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Де ти це взяв? 1100 00:48:59,652 --> 00:49:00,640 >> -Всі в порядку. 1101 00:49:00,640 --> 00:49:02,506 Я скажу, я скажу. 1102 00:49:02,506 --> 00:49:03,498 >> Ні, тато, ні. 1103 00:49:03,498 --> 00:49:04,490 Ви не повинні. 1104 00:49:04,490 --> 00:49:06,090 >> -Ти Право моя дорога. 1105 00:49:06,090 --> 00:49:07,390 Я буду сумувати за вашої нової ніс. 1106 00:49:07,390 --> 00:49:10,990 Але я не скажу їм в Поєднання ні на що. 1107 00:49:10,990 --> 00:49:12,450 >> -Добре. 1108 00:49:12,450 --> 00:49:14,830 Доктор Schlotkin, справа ваша. 1109 00:49:14,830 --> 00:49:15,744 >> -Мій Задоволення. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> -NO! 1112 00:49:20,800 --> 00:49:22,780 Зачекайте, зачекайте. 1113 00:49:22,780 --> 00:49:24,000 Я скажу. 1114 00:49:24,000 --> 00:49:25,830 Я скажу. 1115 00:49:25,830 --> 00:49:28,270 >> -I Знав, що це буде працювати. 1116 00:49:28,270 --> 00:49:31,390 Добре, дайте його мені. 1117 00:49:31,390 --> 00:49:36,220 >> Досліджено поєднання є одним. 1118 00:49:36,220 --> 00:49:36,740 >> -Один. 1119 00:49:36,740 --> 00:49:37,473 >> -Один. 1120 00:49:37,473 --> 00:49:37,972 -Два. 1121 00:49:37,972 --> 00:49:38,471 -Два. 1122 00:49:38,471 --> 00:49:39,800 -Два. 1123 00:49:39,800 --> 00:49:40,300 -Три. 1124 00:49:40,300 --> 00:49:40,800 -Три. 1125 00:49:40,800 --> 00:49:41,800 -Три. 1126 00:49:41,800 --> 00:49:42,300 -Чотири. 1127 00:49:42,300 --> 00:49:42,800 -Чотири. 1128 00:49:42,800 --> 00:49:44,707 -Чотири. 1129 00:49:44,707 --> 00:49:45,521 -П'ять. 1130 00:49:45,521 --> 00:49:46,430 -П'ять. 1131 00:49:46,430 --> 00:49:47,930 -П'ять. 1132 00:49:47,930 --> 00:49:53,480 -так Поєднання є одним, два, три, чотири, п'ять. 1133 00:49:53,480 --> 00:49:56,140 Це найдурніша комбінація Я коли-небудь чув у своєму житті. 1134 00:49:56,140 --> 00:49:58,640 Це та річ, ап ідіот матиме на своєму багажі. 1135 00:49:58,640 --> 00:50:00,000 >> Спасибі, ваше високість. 1136 00:50:00,000 --> 00:50:01,340 >> [ДУ CLICKS] 1137 00:50:01,340 --> 00:50:02,450 >> -Що Ти зробив? 1138 00:50:02,450 --> 00:50:03,800 >> -I Вимкнув стіну. 1139 00:50:03,800 --> 00:50:05,010 >> Ні, ви цього не зробили, ви вимкнений весь фільм. 1140 00:50:05,010 --> 00:50:06,220 >> -I Повинно бути, натиснув не ту кнопку. 1141 00:50:06,220 --> 00:50:07,064 >> Ну, поклав його назад на! 1142 00:50:07,064 --> 00:50:07,910 Покладіть відеофільм на! 1143 00:50:07,910 --> 00:50:08,300 >> Так, сер! 1144 00:50:08,300 --> 00:50:08,799 Так, сер. 1145 00:50:08,799 --> 00:50:09,660 -Давай Йти, Арнольд. 1146 00:50:09,660 --> 00:50:10,450 Приходьте, Гретхен. 1147 00:50:10,450 --> 00:50:12,533 Звичайно, ви знаєте, я буду повинні виставити рахунок за це. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 Ну? 1150 00:50:17,220 --> 00:50:17,802 Це спрацювало? 1151 00:50:17,802 --> 00:50:18,510 Де цар? 1152 00:50:18,510 --> 00:50:20,218 >> -It Працював, сер, ми мають комбінацію. 1153 00:50:20,218 --> 00:50:20,740 -Чудові. 1154 00:50:20,740 --> 00:50:24,810 Тепер ми можемо використовувати будь-яку останній подих свіжого повітря з планети Druidia. 1155 00:50:24,810 --> 00:50:25,890 Що комбінація? 1156 00:50:25,890 --> 00:50:28,155 >> -Один, Два, три, чотири, п'ять. 1157 00:50:28,155 --> 00:50:29,890 >> -Один, Два, три, чотири, п'ять? 1158 00:50:29,890 --> 00:50:30,390 Так. 1159 00:50:30,390 --> 00:50:31,110 -Це Дивно. 1160 00:50:31,110 --> 00:50:34,550 У мене те ж саме Поєднання на моєму багажі. 1161 00:50:34,550 --> 00:50:37,160 Підготуйте SpaceBall 1 для негайний виїзд. 1162 00:50:37,160 --> 00:50:38,160 >> Так, сер. 1163 00:50:38,160 --> 00:50:40,745 >> -И Змінити Поєднання на моєму багажі. 1164 00:50:40,745 --> 00:50:41,578 [Закриття дверцята SOUND] 1165 00:50:41,578 --> 00:50:42,064 [CLINK ДВЕРЕЙ УРАЖЕННЯ ШОЛОМ] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [END відеовідтворення] 1168 00:50:43,383 --> 00:50:46,700 David J. Малан: Ось саме для CS50, побачимося на наступному тижні. 1169 00:50:46,700 --> 00:50:49,883 Оповідач: І тепер, Deep Думки, по Daven Фарнем. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: Кодування в C є так набагато важче, ніж нуля. 1172 00:50:55,860 --> 00:50:57,320 Е, подряпин, було брехнею. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Сміх SOUNDBITE] 1175 00:51:01,430 --> 00:51:02,486