1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Проходження - Проблема Set 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Гарвардський університет] 3 00:00:05,170 --> 00:00:07,490 [Це CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Добре. Привіт всім, і ласкаво просимо Покрокове керівництво 2. 5 00:00:10,750 --> 00:00:14,330 По-перше, я хочу привітати вас з обробкою PSET 1. 6 00:00:14,330 --> 00:00:18,140 Я знаю, що це могло б бути трохи жорстким для деяких з вас, 7 00:00:18,140 --> 00:00:20,460 могла б бути ваша перша комп'ютерна програма, що ви написали, 8 00:00:20,460 --> 00:00:24,500 але пам'ятайте, що в кінці цього, коли ви озираєтеся назад в кінці семестру, 9 00:00:24,500 --> 00:00:29,820 Ви будете виглядати на PSET 1, і ви скажете: "Ей, я міг би зробити, що через 5 хвилин". 10 00:00:29,820 --> 00:00:35,700 Так знати і вірити, що в кінці цього ви обов'язково знайдете PSET 1 досить проста. 11 00:00:35,700 --> 00:00:40,640 Але зараз це величезне досягнення, і поздоровлення для отримання зробив. 12 00:00:40,640 --> 00:00:44,010 Тепер, також швидко записку, перш ніж ми перейдемо до м'яса керівництва. 13 00:00:44,010 --> 00:00:48,340 Я просто хочу зробити невелике зауваження, що я іноді не вистачає часу 14 00:00:48,340 --> 00:00:52,500 в покрокових посібників, щоб пройти через кожен спосіб зробити поставленого завдання 15 00:00:52,500 --> 00:00:56,140 і досить просто, може бути зосереджені на 1 або 2 види реалізації, 16 00:00:56,140 --> 00:00:57,750 способів, якими ви могли б зробити це. 17 00:00:57,750 --> 00:01:01,970 Але це не означає, що ви заборонили робити це іншим способом. 18 00:01:01,970 --> 00:01:05,980 Є часто, як і комп'ютерні науки, численні способи ведення справ, 19 00:01:05,980 --> 00:01:12,190 і так виразно не соромтеся використовувати різні типи рішень, чим я, можливо, представила. 20 00:01:12,190 --> 00:01:14,520 [PSET 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. Секція питання - 1. Цезар - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Добре. Таким чином, проблема встановити 2: Crypto це весело один. 23 00:01:20,650 --> 00:01:24,500 Знову ж таки, з кожним PSET ви почнете з розділом питання 24 00:01:24,500 --> 00:01:29,600 яка буде проводитися в секції з вашим призначеним навчання людина. 25 00:01:29,600 --> 00:01:31,670 Ми не збираємося пройти через це за проходження гри, 26 00:01:31,670 --> 00:01:35,100 але вони безумовно допоможуть вам завершити PSET. 27 00:01:35,100 --> 00:01:38,100 Таким чином, перша частина проблеми набору Цезаря. 28 00:01:38,100 --> 00:01:43,470 І так в Caesar хтось пройде повз вас ключ з цілим, 29 00:01:43,470 --> 00:01:48,420 і ви будете шифрувати рядок тексту, який вони дають вам 30 00:01:48,420 --> 00:01:50,670 і повернути їх назад зашифровані речі. 31 00:01:50,670 --> 00:01:56,050 Якщо хто дивився Різдвяна історія, є приклад того, що є. 32 00:01:56,050 --> 00:01:59,090 Тоді друга частина проблеми набору Vigenere, 33 00:01:59,090 --> 00:02:01,790 , Який є більш просунутою техніці шифрування. 34 00:02:01,790 --> 00:02:05,640 І таким чином ми збираємося, щоб зашифрувати шматок тексту, 35 00:02:05,640 --> 00:02:09,600 винятком, а не тільки з одним цілим, ми насправді збираємося кодувати 36 00:02:09,600 --> 00:02:13,340 з ключовим словом, яке користувач буде надавати нам. 37 00:02:16,270 --> 00:02:22,090 Отже, перший інструмент в панелі інструментів сьогодні фактично буде оновлення обладнання. 38 00:02:22,090 --> 00:02:26,430 На дошці обговорень ми побачимо щось на кшталт: «Чому це не працює?" 39 00:02:26,430 --> 00:02:28,110 "Чому не Прислати 50 робочих?" 40 00:02:28,110 --> 00:02:31,830 і часто рішення насправді просто оновити ваш пристрій. 41 00:02:31,830 --> 00:02:36,730 І так, якщо ви просто запустити у вікні терміналу в ваш прилад Суду ням-у - 42 00:02:36,730 --> 00:02:40,040 це прапор кажучи, так, всі оновлення - оновлення, 43 00:02:40,040 --> 00:02:42,280 , То ваш прилад буде оновлюватися, якщо це буде необхідно. 44 00:02:42,280 --> 00:02:46,960 І це не зашкодить, якщо ви вже знаходитеся на самій останній версії приладу. 45 00:02:46,960 --> 00:02:51,280 Тоді це буде просто сказати немає нових оновлень, і ви можете продовжувати працювати разом. 46 00:02:51,280 --> 00:02:55,800 Але це добре, щоб виконувати навіть кожен раз, коли ви відкриваєте прилад 47 00:02:55,800 --> 00:02:57,140 тому що ми ще дуже багато чого - 48 00:02:57,140 --> 00:03:00,320 Іноді, якщо ми прийдемо на помилку - фіксація її в прилад. 49 00:03:00,320 --> 00:03:03,180 Тому переконайтеся, що у вас остання версія приладу 50 00:03:03,180 --> 00:03:07,710 і запустити оновлення там. 51 00:03:07,710 --> 00:03:14,360 Добре. Таким чином, оскільки ми маємо справу з листами і зміни, шифрування речі, 52 00:03:14,360 --> 00:03:20,410 ми збираємося дійсно хочемо стати кращими друзями з нашими ASCII графіці. 53 00:03:20,410 --> 00:03:24,350 Є численні з них в Інтернеті, якщо ви знайдете. Може бути, навіть створити свій власний. 54 00:03:24,350 --> 00:03:29,950 В принципі, з кожною буквою, і кожен номер і кожну характер 55 00:03:29,950 --> 00:03:32,210 існує ряд пов'язаних з ними, 56 00:03:32,210 --> 00:03:38,670 і так приємно бачити їх ASCII значення поряд з фактичними лист. 57 00:03:38,670 --> 00:03:42,310 Це, безумовно, допоможе вам у завданні безліч. 58 00:03:42,310 --> 00:03:45,750 Одна річ, яка дійсно допомогла мені в цій проблемі набір був насправді роздрукувати його, 59 00:03:45,750 --> 00:03:48,380 і, як я переживала, я б малювати на ньому, 60 00:03:48,380 --> 00:03:51,150 пишуть: «Якщо це повинно йти туди, то ...» 61 00:03:51,150 --> 00:03:55,270 Вид малювати на ньому і позначити його, стають кращими друзями з вашим ASCII таблиці. 62 00:03:57,240 --> 00:04:00,750 Тоді у нас є декілька інших інструментів, наявних в нашому розпорядженні. 63 00:04:00,750 --> 00:04:03,750 На цей раз замість того, щоб фактично пропонуючи користувачеві для всіх своїх вхідних 64 00:04:03,750 --> 00:04:05,230 Ми збираємося зробити комбінацію. 65 00:04:05,230 --> 00:04:06,880 Ми збираємося, щоб підштовхнути їх для деяких введення, 66 00:04:06,880 --> 00:04:11,350 але ми також збираємося просто використовувати аргументи командного рядка. 67 00:04:11,350 --> 00:04:15,600 Тому, коли вони працюють свої програми, як правило, скажете ви. / Привіт, наприклад, 68 00:04:15,600 --> 00:04:17,310 якщо ваша програма була hello.c. 69 00:04:17,310 --> 00:04:22,500 Але на цей раз замість того, щоб просто кажу, що вони можуть поставити слова, аргументи згодом. 70 00:04:22,500 --> 00:04:27,210 І тому ми збираємося використовувати те, що вони проходять у до нас, як їхній внесок, а також, 71 00:04:27,210 --> 00:04:31,720 так що виходить за рамки просто запитом ціле, але також за допомогою аргументів командного рядка. 72 00:04:31,720 --> 00:04:36,590 А потім ми підемо в масиви і рядки, які ми будемо використовувати багато, як добре. 73 00:04:41,460 --> 00:04:44,810 Ось тільки один приклад з 1 міні-ASCII графіці. 74 00:04:44,810 --> 00:04:48,460 Як я вже сказав, кожна буква відповідає числу, 75 00:04:48,460 --> 00:04:52,510 і таким чином ознайомитися з цим. Це стане в нагоді. 76 00:04:52,510 --> 00:04:55,610 А потім, коли ми починаємо робити деякі ASCIIMath справу з числами - 77 00:04:55,610 --> 00:05:00,110 додавання, віднімання них - то безумовно добре, щоб звернутися до цієї таблиці. 78 00:05:02,860 --> 00:05:06,920 Отже, ось приклад шифр Цезаря - те, що ви, можливо, грав з. 79 00:05:06,920 --> 00:05:11,190 Це всього лише колеса. По суті, є зовнішній алфавіт, а потім є внутрішній алфавіт. 80 00:05:11,190 --> 00:05:15,290 Так що прямо ось приклад шифру Цезаря, але з ключем 0. 81 00:05:15,290 --> 00:05:21,540 По суті, суміщений з A, B суміщена з B, аж до Z. 82 00:05:21,540 --> 00:05:26,590 Але те, що ми хочемо ключ 3, наприклад. 83 00:05:26,590 --> 00:05:33,280 Тоді ми б повернути внутрішнє колесо, так що тепер співпаде з D, і т.д. 84 00:05:33,280 --> 00:05:35,250 І це, по суті, що ми збираємося робити. 85 00:05:35,250 --> 00:05:38,340 Ми не маємо колесо, але те, що ми збираємося зробити, це наша програма 86 00:05:38,340 --> 00:05:44,490 вид зрушити алфавіт разом з нами певної кількості номерів. 87 00:05:44,490 --> 00:05:48,650 Отже, як я вже говорив, ми будемо мати справу з аргументами командного рядка 88 00:05:48,650 --> 00:05:50,390 а також отримати ціле число. 89 00:05:50,390 --> 00:05:55,050 Таким чином, що користувач буде працювати ваша програма Цезаря, кажучи. / Цезар 90 00:05:55,050 --> 00:05:58,090 , А потім ввести номер після цього. 91 00:05:58,090 --> 00:06:01,130 І це число являє собою ключ, зсув, 92 00:06:01,130 --> 00:06:06,740 скільки разів ви будете обертання внутрішнього колеса вашого шифр Цезаря. 93 00:06:06,740 --> 00:06:08,390 І ось ви бачите тут приклад. 94 00:06:08,390 --> 00:06:14,550 Якщо ми увійшли в літери від А до L в нашій шифр Цезаря, 95 00:06:14,550 --> 00:06:19,520 то це буде вхід D через O тому що кожна буква перейшла в 3 рази, 96 00:06:19,520 --> 00:06:22,080 так само, як на прикладі колеса, яке я показав вам. 97 00:06:22,080 --> 00:06:25,300 Отже, якщо ви ввели, наприклад, це CS50! 98 00:06:25,300 --> 00:06:27,960 Потім він також перемістити всі листи. 99 00:06:27,960 --> 00:06:31,040 І це головне в обох Цезаря і Віженер 100 00:06:31,040 --> 00:06:34,890 є те, що ми збираємося пропустити будь-який не-букв. 101 00:06:34,890 --> 00:06:39,160 Таким чином, будь-які пробіли, символи і т.д., цифри, ми збираємося, щоб тримати їх те ж саме. 102 00:06:39,160 --> 00:06:42,920 Ми тільки збираємося перенести літери в цьому випадку. 103 00:06:42,920 --> 00:06:45,870 Отже, як ви бачите на колесі, у нас є тільки літери доступні для нас, 104 00:06:45,870 --> 00:06:50,150 таким чином, ми тільки хочемо, щоб зрушити букви і шифрувати листи. 105 00:06:51,370 --> 00:06:56,720 Тому перше, що потрібно зробити, ви побачили, що використання для Цезаря в задачу встановити 2 106 00:06:56,720 --> 00:07:05,280 є запуск Цезаря, а потім введіть номер, коли ви запустите її в терміналі. 107 00:07:05,280 --> 00:07:10,940 Отже, що ми повинні зробити, щоб хоч якось отримати цей ключ і доступ до нього. 108 00:07:10,940 --> 00:07:14,730 І тому ми хочемо, щоб хоч якось бачити, що це буде другий аргумент командного рядка. 109 00:07:14,730 --> 00:07:20,950 Перший буде. / Цезар, а наступний буде номер ключа. 110 00:07:22,190 --> 00:07:29,200 Тому, перш ніж ми мали Int основних (недійсними), щоб почати наші програми C. 111 00:07:29,200 --> 00:07:31,790 Ми збираємося відігніть шар трохи 112 00:07:31,790 --> 00:07:34,720 а насправді бачимо, що замість передачі в порожнечу нашої основною функцією 113 00:07:34,720 --> 00:07:37,920 Ми дійсно маємо справу з 2 параметрами. 114 00:07:37,920 --> 00:07:44,070 У нас є ціле число імені агдс, а потім масив рядків, званий argv. 115 00:07:44,070 --> 00:07:46,030 Так агдс ціле, 116 00:07:46,030 --> 00:07:49,640 і являє собою кількість аргументів на свою програму. 117 00:07:49,640 --> 00:07:53,590 А потім ARGV насправді список аргументів. 118 00:07:53,590 --> 00:08:00,820 Всі аргументи рядки, і так ARGV являє собою масив, список рядків. 119 00:08:01,830 --> 00:08:03,990 Давайте поговоримо про масивах небагато. 120 00:08:03,990 --> 00:08:05,940 Масиви є принципово нова структура даних. 121 00:08:05,940 --> 00:08:09,660 У нас є цілих чисел, ми в два рази, у нас є рядки, і тепер у нас є масиви. 122 00:08:09,660 --> 00:08:13,820 Масиви структур даних, які можуть містити кілька значень одного і того ж типу, 123 00:08:13,820 --> 00:08:18,320 Так по суті, список будь-якого типу ви хочете. 124 00:08:18,320 --> 00:08:24,400 По суті, якщо ви хотіли списку цілих чисел все в 1 змінну, 125 00:08:24,400 --> 00:08:29,090 Потім ви повинні створити нову змінну, яка була типу масив Int. 126 00:08:29,090 --> 00:08:34,450 Так масиви нульового індексуються, це означає, що перший елемент масиву має індекс 0. 127 00:08:34,450 --> 00:08:41,799 Якщо масив має довжину 4, як в цьому прикладі, то ваш останній елемент буде з індексом 3, 128 00:08:41,799 --> 00:08:44,810 , Що на 4 - 1. 129 00:08:45,940 --> 00:08:48,420 Таким чином, щоб створити масив, ви могли б зробити щось на зразок цього. 130 00:08:48,420 --> 00:08:51,440 Скажи, що ти хотів подвійного масиву. 131 00:08:51,440 --> 00:08:56,520 Це відноситься до будь-якого типу тип даних, однак. 132 00:08:56,520 --> 00:09:00,210 Так що ви хочете подвійного масиву. Скажімо, ви хочете назвати це поштову скриньку. 133 00:09:00,210 --> 00:09:04,760 Так само, як ви б ініціалізувати будь-які інші подвійні, 134 00:09:04,760 --> 00:09:09,760 Ви сказали б подвійну, а потім ім'я, але на цей раз ми ставимо квадратні дужки, 135 00:09:09,760 --> 00:09:13,570 і то число буде довжина масиву. 136 00:09:13,570 --> 00:09:16,840 Відзначимо, що в масивах ми ніколи не можемо змінити довжину, 137 00:09:16,840 --> 00:09:21,230 так що ви завжди повинні визначити і вибрати, скільки ящиків, 138 00:09:21,230 --> 00:09:25,440 скільки значень вашого масиву збирається провести. 139 00:09:25,440 --> 00:09:31,820 Таким чином, щоб встановити різні значення у вашому масиві, ви збираєтеся використовувати цей синтаксис, 140 00:09:31,820 --> 00:09:33,200 як ви бачите на слайді. 141 00:09:33,200 --> 00:09:37,620 У вас є поштова скринька індекс 0 буде встановлений в 1,2, 142 00:09:37,620 --> 00:09:42,180 Індекс повідомлення 1 комплект до 2,4, і т.д. 143 00:09:42,180 --> 00:09:47,910 Так що тепер ми розглянули масивів трохи, давайте повернемося до ARGC і ARGV. 144 00:09:47,910 --> 00:09:52,220 Ми знаємо, що зараз ARGV масив рядків. 145 00:09:52,220 --> 00:09:55,080 Таким чином, коли користувач переходить в - кажуть, що вони працюють програми - 146 00:09:55,080 --> 00:09:58,740 вони говорять. / Hello David Malan, 147 00:09:58,740 --> 00:10:05,160 що програма буде робити для вас уже фактично придумав, що ARGC і ARGV є. 148 00:10:05,160 --> 00:10:07,620 Так що вам не потрібно турбуватися про це. 149 00:10:07,620 --> 00:10:14,370 ARGC в цьому випадку буде 3, оскільки він бачить 3 окремих слів, розділених пробілами. 150 00:10:14,370 --> 00:10:18,850 І так, то масив в даному випадку, перший індекс буде. / Привіт, 151 00:10:18,850 --> 00:10:21,770 Наступний Давида, наступного Малан. 152 00:10:21,770 --> 00:10:25,640 Хто-небудь бачити відразу, що відносини між ARGV, 153 00:10:25,640 --> 00:10:28,990  масиві, і ARGC є? 154 00:10:32,820 --> 00:10:38,090 Так. Ми увійдемо в тому, що в якості прикладу в args.c. 155 00:10:38,090 --> 00:10:42,880 Давайте подивимося, якщо ми можемо скористатися відносин між 2. 156 00:10:42,880 --> 00:10:46,550 Тут ви можете виявити, що в пристрій додаток за замовчуванням 157 00:10:46,550 --> 00:10:49,450 відкрити. с файлами іноді Emacs. 158 00:10:49,450 --> 00:10:54,660 Але ми хочемо мати справу з Gedit, так що ви можете зробити, ви можете натиснути правою кнопкою на файлі C, 159 00:10:54,660 --> 00:11:04,580 виберіть Властивості, Відкрити за допомогою, а потім виберіть Gedit, встановити за замовчуванням, 160 00:11:04,580 --> 00:11:13,020 і тепер ваша програма повинна відкрити в Gedit замість Emacs. 161 00:11:14,710 --> 00:11:16,290 Perfect. 162 00:11:17,120 --> 00:11:25,520 Так от у мене є програма, що я хочу, щоб роздрукувати кожен аргумент командного рядка. 163 00:11:25,520 --> 00:11:32,050 Тому, що б користувач вводить, я хочу суті повернути його назад до них на новій рядку. 164 00:11:32,050 --> 00:11:36,710 Так що структури, які ми можемо використовувати для перебору щось - 165 00:11:36,710 --> 00:11:40,380 те, що ви, ймовірно, використовували в своїй PSET 1? 166 00:11:40,380 --> 00:11:45,840 Якщо ви хочете, щоб пройти через певну кількість речей? >> [Студент] Для циклу. 167 00:11:45,840 --> 00:11:48,910 Для циклу. Саме так. Отже, давайте почнемо з циклу. 168 00:11:48,910 --> 00:11:56,900 У нас є для Int = 0. Давайте почнемо зі стандартною ініціалізації змінної. 169 00:11:56,900 --> 00:12:02,370 Я збираюся залишити умовою для набору, а потім сказати, що я + +, збираюся робити речі. 170 00:12:02,370 --> 00:12:04,090 Добре. 171 00:12:04,090 --> 00:12:11,590 Таким чином, згадуючи ARGV, якщо ARGV це список аргументів, переданих в програму 172 00:12:11,590 --> 00:12:15,380 і ARGC число аргументів на програму, 173 00:12:15,380 --> 00:12:21,280 то це означає, що агдс, по суті, довжина ARGV, право, 174 00:12:21,280 --> 00:12:28,970 тому що там буде стільки аргументів, значення ARGC. 175 00:12:28,970 --> 00:12:35,910 Тому якщо ми хочемо, щоб перебору кожного елемента в ARGV, 176 00:12:35,910 --> 00:12:43,290 ми збираємося хочете кожен раз звертатися до змінної в ARGV в даний індекс. 177 00:12:43,290 --> 00:12:49,060 Це може бути представлена ​​з цим, вірно? 178 00:12:49,060 --> 00:12:53,430 Ця змінна тут являє собою певну рядок в даному випадку 179 00:12:53,430 --> 00:12:57,030 тому що це масив рядків - рядок зокрема, що даний індекс. 180 00:12:57,030 --> 00:13:00,690 Те, що ми хочемо зробити, в цьому випадку ми хочемо, щоб роздрукувати його, так скажемо Printf. 181 00:13:00,690 --> 00:13:04,680 А тепер ARGV є рядком, тому ми хочемо покласти, що заповнювач там. 182 00:13:04,680 --> 00:13:08,430 Ми хочемо, щоб новий рядок просто щоб зробити його добре виглядати. 183 00:13:08,430 --> 00:13:12,530 Таким чином, тут ми маємо цикл. У нас немає умов поки немає. 184 00:13:12,530 --> 00:13:20,020 Так що я починається з 0, а потім кожен раз, коли він збирається друкувати цей рядок 185 00:13:20,020 --> 00:13:22,980 в даний індекс в масиві. 186 00:13:22,980 --> 00:13:28,410 Тому, коли ми хочемо, щоб зупинити друк з елементів у масиві? 187 00:13:28,410 --> 00:13:35,720 Коли ми закінчили, вірно? Коли ми дійшли до кінця масиву. 188 00:13:35,720 --> 00:13:38,870 Таким чином, ми не хочемо перевищувати минулого довжина масиву, 189 00:13:38,870 --> 00:13:43,700 і ми вже знаємо, нам не потрібно насправді активно з'ясувати, що довжина ARGV є 190 00:13:43,700 --> 00:13:47,520 тому що воно нам дано, і що це таке? ARGC. Саме так. 191 00:13:47,520 --> 00:13:56,640 Таким чином, ми хочемо зробити цей процес ARGC число раз. 192 00:13:56,640 --> 00:13:59,550 Я не в праві каталогу. 193 00:14:02,100 --> 00:14:03,490 Добре. 194 00:14:03,490 --> 00:14:08,990 Тепер давайте зробимо аргументи. Немає помилок, і це здорово. 195 00:14:08,990 --> 00:14:11,430 Так що давайте просто запустити аргументи. 196 00:14:11,430 --> 00:14:15,130 Що це збирається повернутися до нас? Це просто буде друкувати його назад. 197 00:14:15,130 --> 00:14:18,320 "Ви вводяться аргументи на програму, я збираюся дати його назад до вас". 198 00:14:18,320 --> 00:14:23,170 Так скажімо, ми хочемо сказати, аргументи, то Foo Bar. 199 00:14:23,170 --> 00:14:26,570 Так то воно виводить її назад до нас. Все в порядку? 200 00:14:26,570 --> 00:14:30,790 Так що є приклад того, як можна використовувати ARGC і ARGV 201 00:14:30,790 --> 00:14:33,460 знаючи, що агдс представляє довжину ARGV. 202 00:14:33,460 --> 00:14:42,750 Переконайтеся, що ви ніколи не з масивами доступ до одного за межі довжини масиву 203 00:14:42,750 --> 00:14:45,140 тому що C, безумовно, кричати на тебе. 204 00:14:45,140 --> 00:14:47,560 Ви отримаєте те, що називається збоєм сегментації, 205 00:14:47,560 --> 00:14:52,470 який ніколи не весело, в основному говорять, що ви намагаєтеся отримати доступ щось 206 00:14:52,470 --> 00:14:55,000 що не існує, не належать вам. 207 00:14:55,000 --> 00:14:59,430 Тому переконайтеся, особливо з нульовою індексації, ми не хочемо - 208 00:14:59,430 --> 00:15:02,390 Як, наприклад, якщо у нас є масив довжини 4, 209 00:15:02,390 --> 00:15:07,240 , Що індекс масиву 4 не існує, тому що ми починаються з 0, при нульовій індекс. 210 00:15:07,240 --> 00:15:11,730 Вона стане другою натурою, як і для петель, коли ми починаємо з 0. 211 00:15:11,730 --> 00:15:13,610 Так що майте це на увазі. 212 00:15:13,610 --> 00:15:22,590 Ви ж не хочете, щоб коли-небудь отримати доступ до індексу масиву, що це за межами вашої досяжності. 213 00:15:26,710 --> 00:15:32,560 Таким чином, ми можемо бачити зараз, як ми можемо вид доступу 214 00:15:32,560 --> 00:15:35,930 аргументи командного рядка, які передаються дюйма 215 00:15:35,930 --> 00:15:41,330 Але, як ви бачили рядок, ARGV насправді масив рядків. 216 00:15:41,330 --> 00:15:45,740 Так що це насправді не є цілим числом клієнтів, але в Caesar ми хочемо мати справу з цілими числами. 217 00:15:45,740 --> 00:15:54,430 На щастя, є функції створені для нас, які дійсно можуть перетворити рядок в ціле число. 218 00:15:54,430 --> 00:15:58,710 Крім того, тут ми маємо справу не з користувальницького введення, де ми спонукаючи їх 219 00:15:58,710 --> 00:16:03,740 для входу тут ключ, тому ми не можемо насправді reprompt і сказати, 220 00:16:03,740 --> 00:16:07,840 "О, дайте мені інше ціле число, скажімо, якщо це не діє". 221 00:16:07,840 --> 00:16:10,540 Але ми як і раніше необхідно перевірити правильність використання. 222 00:16:10,540 --> 00:16:13,520 У Цезаря вони тільки дозволили пройти в 1 номер, 223 00:16:13,520 --> 00:16:18,030 і тому вони повинні виконуватися. / цезар, а потім вони повинні дати вам номер. 224 00:16:18,030 --> 00:16:23,660 Так агдс має бути певна кількість. 225 00:16:23,660 --> 00:16:29,060 Яке число це буде, якщо вони повинні передати вам. / Цезар, а потім ключ? 226 00:16:29,060 --> 00:16:32,920 Що таке агдс? >> [Студент] 2. Два >>. Саме так. 227 00:16:32,920 --> 00:16:35,490 Отже, ви хочете, щоб переконатися, що агдс дорівнює 2. 228 00:16:35,490 --> 00:16:39,620 В іншому випадку ви в принципі відмовитися від запуску програми. 229 00:16:39,620 --> 00:16:43,040 В основному це функція, яка говорить Int основний, 230 00:16:43,040 --> 00:16:47,360 Таким чином, ми завжди добре 0 повернення практики в кінці успішної програми. 231 00:16:47,360 --> 00:16:50,840 Таким чином, якщо, скажімо, вони дають вам 3 аргументів командного рядка, а не 2 232 00:16:50,840 --> 00:16:54,350 або дати вам 1, наприклад, те, що ви будете робити це ви будете хотіти, щоб перевірити, що 233 00:16:54,350 --> 00:16:59,900 , А потім повертають 1 кажу, ні, я не можу продовжити цю програму. 234 00:16:59,900 --> 00:17:03,190 [Студент] Там не може бути місця у вашому тексті. >> Вибачте? 235 00:17:03,190 --> 00:17:06,780 [Студент] Там не може бути місця в тексті ви намагаєтеся зашифрувати. 236 00:17:06,780 --> 00:17:08,480 Ах! 237 00:17:08,480 --> 00:17:11,280 З точки зору тексту, який ми намагаємося шифрування, що насправді відбувається пізніше 238 00:17:11,280 --> 00:17:13,970 коли ми даємо цьому тексту. 239 00:17:13,970 --> 00:17:18,260 Так що зараз ми просто приймаючи в якості аргументів команди фактичної кількості, 240 00:17:18,260 --> 00:17:21,579 фактичний зсув для шифрування Цезаря. 241 00:17:21,579 --> 00:17:27,569 [Студент] Чому потрібно 2, на відміну від усього лише 1 агдс? Там виразно 1 число. 242 00:17:27,569 --> 00:17:32,200 Право. Причина, чому ми повинні 2 для агдс замість 1 243 00:17:32,200 --> 00:17:36,260 Тому що, коли ви запускаєте програму і говорити. / Цезар або. / Привіт, 244 00:17:36,260 --> 00:17:38,280 що насправді вважається як аргумент командного рядка. 245 00:17:38,280 --> 00:17:43,020 Отже, що вже займає 1 і так, то ми введенні 1 додатковий. 246 00:17:45,030 --> 00:17:49,440 Отже, ви насправді введенні рядка в аргумент командного рядка. 247 00:17:49,440 --> 00:17:52,730 Те, що ви хочете зробити, для Цезаря ми хочемо мати справу з цілим, 248 00:17:52,730 --> 00:17:57,180 так що ви можете використовувати цю функцію atoi. 249 00:17:57,180 --> 00:18:02,850 А в принципі, ви передаєте його в рядок, а потім він поверне вас назад цілим 250 00:18:02,850 --> 00:18:06,070 якщо це можливо, щоб зробити цей рядок в ціле число. 251 00:18:06,070 --> 00:18:10,960 Тепер пам'ятаєте, коли ми маємо справу з Printf або GetString, тощо, 252 00:18:10,960 --> 00:18:13,390 ми включаємо бібліотек, які є специфічними для нас. 253 00:18:13,390 --> 00:18:19,450 Таким чином, на початку ми починаємо з хеш-тегом стандартного вводу / виводу. Ч, щось на зразок цього. 254 00:18:19,450 --> 00:18:22,430 Ну, atoi не в одній з цих бібліотек, 255 00:18:22,430 --> 00:18:26,600 Отже, що ми повинні зробити, ми повинні включати в себе право бібліотеку для цього. 256 00:18:26,600 --> 00:18:32,720 Так Нагадаємо назад Проходження 1, де я обговорював керівництві функція. 257 00:18:32,720 --> 00:18:37,110 Ви вводите людини в терміналі, а потім іде ім'я функції. 258 00:18:37,110 --> 00:18:39,720 І так, що з'явиться цілий список його використання, 259 00:18:39,720 --> 00:18:42,890 але також вона буде виховувати якого бібліотека, яка належить. 260 00:18:42,890 --> 00:18:47,000 Так що я залишу це вам використовувати функцію ручний з atoi 261 00:18:47,000 --> 00:18:53,360 і з'ясувати, які бібліотеки потрібно включити, щоб мати можливість використовувати atoi функції. 262 00:18:54,450 --> 00:18:57,670 Отже, ми отримали ключ, і тепер справа доходить до отримання простого тексту, 263 00:18:57,670 --> 00:19:01,820 і так, що насправді буде користувальницького введення, де ви підкажете. 264 00:19:01,820 --> 00:19:05,540 Ми мали справу з GetInt і GetFloat, і тому в тому ж дусі 265 00:19:05,540 --> 00:19:07,670 ми будемо мати справу з GetString. 266 00:19:07,670 --> 00:19:12,440 Але в даному випадку ми не повинні робити яких-небудь робити під час або під час петлі для перевірки. 267 00:19:12,440 --> 00:19:14,480 GetString, безумовно, дає нам рядки, 268 00:19:14,480 --> 00:19:17,630 і ми збираємося, щоб зашифрувати будь-який користувач дає нам. 269 00:19:17,630 --> 00:19:23,770 Таким чином, можна припустити, що всі ці введеної користувачем рядка є правильними. 270 00:19:23,770 --> 00:19:24,670 Великий. 271 00:19:24,670 --> 00:19:27,270 Отже, як тільки ви отримали ключ, і як тільки ви отримали текст, 272 00:19:27,270 --> 00:19:31,660 Тепер те, що залишилося, це у вас є, щоб зашифрувати текст. 273 00:19:31,660 --> 00:19:36,530 Просто, щоб швидко охопити більш жаргон, текст є те, що користувач дає вам, 274 00:19:36,530 --> 00:19:41,030 і зашифрованого тексту є те, що ви повернетеся до них. 275 00:19:42,450 --> 00:19:45,850 Так рядків, щоб бути в змозі пройти насправді буква за буквою 276 00:19:45,850 --> 00:19:48,550 тому що ми повинні перейти кожну букву, 277 00:19:48,550 --> 00:19:51,390 Ми розуміємо, що рядки, якщо ми якось відігніть шару, 278 00:19:51,390 --> 00:19:54,130 ми бачимо, що вони просто дійсно список символів. 279 00:19:54,130 --> 00:19:55,930 Один йде за іншим. 280 00:19:55,930 --> 00:20:01,690 І тому ми можемо розглядати рядки як масиви, тому що вони є масивами символів. 281 00:20:01,690 --> 00:20:05,640 Так що у вас є рядок з ім'ям тексту, 282 00:20:05,640 --> 00:20:09,400 і в рамках цієї змінної текст зберігається Це CS50. 283 00:20:09,400 --> 00:20:15,680 Потім текст з індексом 0 буде великої літери, індекс 1 буде ч, і т.д. 284 00:20:17,530 --> 00:20:23,970 А потім з масивами, в ARGC наприклад, в args.c, 285 00:20:23,970 --> 00:20:27,090 ми побачили, що у нас було перебрати масив 286 00:20:27,090 --> 00:20:32,440 і тому нам довелося повторювати від = 0 до I менше, ніж довжина. 287 00:20:32,440 --> 00:20:35,560 Так що нам потрібно якимось чином з'ясувати, що довжина наших рядок 288 00:20:35,560 --> 00:20:37,090 якщо ми збираємося перебрати його. 289 00:20:37,090 --> 00:20:42,300 На щастя, знову ж таки, є функція існує для нас, хоча пізніше в CS50 290 00:20:42,300 --> 00:20:45,860 Ви безумовно зможете реалізувати і зробити свої власні функції 291 00:20:45,860 --> 00:20:48,260 що можна обчислити довжину рядка. 292 00:20:48,260 --> 00:20:52,120 Але зараз ми збираємося використовувати довжину рядка, так StrLen. 293 00:20:52,120 --> 00:21:00,440 Ви проходите в рядок, а потім він поверне вас Int, яка представляє довжину вашої рядки. 294 00:21:00,440 --> 00:21:05,840 Давайте подивимося на приклад того, як ми могли б для перебору кожного символу в рядку 295 00:21:05,840 --> 00:21:08,470 і щось зробити з цим. 296 00:21:08,470 --> 00:21:13,250 Те, що ми хочемо зробити, це перебір кожного символу рядка, 297 00:21:13,250 --> 00:21:19,150 і те, що ми хочемо зробити, це ми виводимо назад кожен символ 1 на 1 298 00:21:19,150 --> 00:21:22,060 крім нас щось додати поряд з ним. 299 00:21:22,060 --> 00:21:27,020 Отже, давайте почнемо з циклу. Int = 0. 300 00:21:27,020 --> 00:21:30,070 Ми збираємося залишити простір для стану. 301 00:21:32,700 --> 00:21:36,840 Ми хочемо, щоб повторювати, поки не досягнемо кінця рядка, вірно? 302 00:21:36,840 --> 00:21:41,340 Отже, які функції дає нам довжину рядка? 303 00:21:41,340 --> 00:21:43,160 [Нерозбірливо відповідь студента] 304 00:21:43,160 --> 00:21:46,420 Ось довжину аргументів командного рядка. 305 00:21:46,420 --> 00:21:50,650 Але для струнного ми хочемо використовувати функцію, яка дає нам довжину рядка. 306 00:21:50,650 --> 00:21:53,090 Так от довжина рядка. 307 00:21:53,090 --> 00:21:57,130 І так, то ви повинні передати в рядок до нього. 308 00:21:57,130 --> 00:21:59,760 Він повинен знати, що рядок для цього потрібно обчислити довжину. 309 00:21:59,760 --> 00:22:03,160 Таким чином, то в цьому випадку ми маємо справу з рядком с. 310 00:22:04,790 --> 00:22:05,860 Великий. 311 00:22:05,860 --> 00:22:10,770 Таким чином, те, що ми хочемо зробити, давайте Printf. 312 00:22:10,770 --> 00:22:14,850 Тепер ми хочемо мати справу з символами. Ми хочемо, щоб роздрукувати кожен індивідуальний характер. 313 00:22:14,850 --> 00:22:22,150 Якщо ви хочете, щоб роздрукувати поплавок, можна використовувати як заповнювач% ф. 314 00:22:22,150 --> 00:22:24,580 З Int ви повинні використовувати% р. 315 00:22:24,580 --> 00:22:30,890 І аналогічно, з характером, ви використовуєте% з сказати, що я збираюся бути печатка з символьною 316 00:22:30,890 --> 00:22:34,570 , Яка зберігається в змінної. 317 00:22:34,570 --> 00:22:40,840 Так що у нас це, і давайте додамо період і місце для цього. 318 00:22:40,840 --> 00:22:45,430 Який характер ми використовуємо? 319 00:22:45,430 --> 00:22:49,780 Ми будемо використовувати все, що характер ми на струни. 320 00:22:49,780 --> 00:22:52,890 Отже, ми збираємося використовувати щось з рядком, 321 00:22:52,890 --> 00:22:56,420 але ми хочемо, щоб отримувати доступ до певних характером там. 322 00:22:56,420 --> 00:23:02,740 Таким чином, якщо рядок просто масив, то як ми отримуємо доступ до елементів масиву? 323 00:23:02,740 --> 00:23:06,480 У нас є ці квадратні дужки, а потім покласти індекс там. 324 00:23:06,480 --> 00:23:11,820 Тому у нас є квадратні дужки. Наш індекс в цьому випадку ми можемо просто використовувати я. Саме так. 325 00:23:15,290 --> 00:23:22,370 Отже, ми говоримо, що ми збираємося друку, за яким слідує крапка і простір, 326 00:23:22,370 --> 00:23:30,870 і що характер буде й буквою в нашу рядок з. 327 00:23:32,920 --> 00:23:39,330 Я просто хочу, щоб врятувати. Добре. 328 00:23:42,510 --> 00:23:46,840 Тепер я збираюся працювати довжини рядка. 329 00:23:46,840 --> 00:23:53,440 Тому ми змушені були рядки називається OMG, і тепер вона підкреслила, навіть більше. 330 00:23:53,440 --> 00:23:57,870 Точно так само, скажімо, ми насправді хочемо отримати рядок від користувача. 331 00:23:57,870 --> 00:23:59,580 Як ми можемо це зробити? 332 00:23:59,580 --> 00:24:01,610 До цього, як ми отримаємо ціле число? 333 00:24:01,610 --> 00:24:08,040 Ми сказали GetInt, вірно? Але це не є цілим числом, так що давайте GetString. 334 00:24:11,780 --> 00:24:17,770 Давайте зробимо довжини рядка. Тут ми не ввести спеціальну рядок. 335 00:24:17,770 --> 00:24:19,940 Таким чином, я не знаю. 336 00:24:19,940 --> 00:24:23,820 Я збираюся поставити свій підпис тут і так, то що я можу зробити одна з тих речей 337 00:24:23,820 --> 00:24:29,600 де я призначити слова для кожної букви або щось на зразок цього. Cool. 338 00:24:29,600 --> 00:24:31,900 Так от довжина рядка. 339 00:24:33,000 --> 00:24:34,640 Таким чином, ми повернулися до Цезаря. 340 00:24:34,640 --> 00:24:38,620 У нас є кілька інструментів, як ми перебору рядка, 341 00:24:38,620 --> 00:24:41,250 як ми отримуємо доступ до кожного елементу. 342 00:24:41,250 --> 00:24:44,720 Так що тепер ми можемо повернутися до програми. 343 00:24:44,720 --> 00:24:48,650 Як я згадував раніше, в ASCII таблиці, ваш кращий друг, 344 00:24:48,650 --> 00:24:52,300 Ви збираєтеся бачити, що числа, які пов'язані з кожною буквою. 345 00:24:52,300 --> 00:24:55,900 Так от сказати, що наш текст є Я запаморочення! 346 00:24:55,900 --> 00:25:01,090 Тоді кожен з цих символів буде мати номер і ASCII значення, пов'язане з ним, 347 00:25:01,090 --> 00:25:04,710 навіть апостроф, навіть простір, навіть знак оклику, 348 00:25:04,710 --> 00:25:06,600 так що ви хочете мати це на увазі. 349 00:25:06,600 --> 00:25:12,360 Так що сказати, що наш ключ, який користувач входить в їх аргументів командного рядка дорівнює 6. 350 00:25:12,360 --> 00:25:17,770 Це означає, що в першому листі, який я, яка представлена ​​на 73, 351 00:25:17,770 --> 00:25:25,610 Ви хочете повернути їм все, що лист представляє ASCII значення 73 + 6. 352 00:25:25,610 --> 00:25:29,020 В даному випадку це було б 79. 353 00:25:30,840 --> 00:25:35,040 Тепер ми хочемо, щоб перейти до наступного символу. 354 00:25:35,040 --> 00:25:40,960 Так що в наступний в індексі 1 з тексту було б апостроф. 355 00:25:40,960 --> 00:25:46,780 Але пам'ятайте, ми тільки хочемо, щоб зашифрувати букви. 356 00:25:46,780 --> 00:25:50,040 Таким чином, ми хочемо переконатися, що апостроф насправді залишається тією ж, 357 00:25:50,040 --> 00:25:54,310 що ми не зміниться від 39 до 45 це все. 358 00:25:54,310 --> 00:25:57,150 Ми хочемо зберегти його як апостроф. 359 00:25:57,150 --> 00:26:00,780 Таким чином, ми хочемо пам'ятати тільки зашифрувати букви 360 00:26:00,780 --> 00:26:04,560 тому що ми хочемо, щоб всі інші символи залишаються незмінними в нашій програмі. 361 00:26:04,560 --> 00:26:07,130 Інша справа, що ми хочемо зберегти капіталізацію. 362 00:26:07,130 --> 00:26:10,250 Тому, коли у вас є заголовної букви, вона повинна залишатися, як у верхньому регістрі. 363 00:26:10,250 --> 00:26:12,830 Нижній регістр повинен залишитися в нижньому регістрі. 364 00:26:13,620 --> 00:26:19,480 Таким чином, деякі корисні функції, щоб бути в змозі мати справу тільки з шифруванням літери 365 00:26:19,480 --> 00:26:22,380 і тримати збереженні капіталізації речі 366 00:26:22,380 --> 00:26:25,130 це функції ISALPHA, ISUPPER, IsLower. 367 00:26:25,130 --> 00:26:29,270 І тому ці функції, які повертають вас логічне значення. 368 00:26:29,270 --> 00:26:34,180 В принципі, істинним або хибним. Це прописні? Чи є це алфавітно-цифровий? 369 00:26:34,180 --> 00:26:37,180 Цей лист, по суті. 370 00:26:37,180 --> 00:26:41,070 Так от 3 приклади того, як можна використовувати цю функцію. 371 00:26:41,070 --> 00:26:47,060 В принципі, ви можете перевірити, чи є значення, повернене вам, що функція є істинним або хибним 372 00:26:47,060 --> 00:26:49,400 на основі цього входу. 373 00:26:49,400 --> 00:26:54,880 Або не зашифровувати щось або зашифрувати його або переконатися, що це прописні і т.д. 374 00:26:54,880 --> 00:27:01,080 [Студент] Чи можете ви пояснити тільки тим, ще трохи і як ви їх використовуєте? >> Так, звичайно. 375 00:27:01,080 --> 00:27:08,470 Таким чином, якщо ми оглянемося назад, то тут ми маємо капіталу I, чи не так? 376 00:27:08,470 --> 00:27:14,550 Отже, ми знаємо, що я йде до О, тому що я + 6 є O. 377 00:27:14,550 --> 00:27:18,740 Але ми хочемо, щоб переконатися, що висновок буде столицею O. 378 00:27:18,740 --> 00:27:22,940 Так в основному, що це свого роду збираємося міняти наші входу. 379 00:27:22,940 --> 00:27:26,870 Чи так це прописні або не буде вид зміниться таким чином, що ми маємо справу з ним. 380 00:27:26,870 --> 00:27:32,360 Отже, якщо ми використовуємо ISUPPER функції на даному індексі, 381 00:27:32,360 --> 00:27:36,480 так ISUPPER ("Я"), який повертає нас так, щоб ми знали, що це верхня. 382 00:27:36,480 --> 00:27:40,360 Так от грунтуючись на цьому, потім ми поїдемо в формулу 383 00:27:40,360 --> 00:27:42,750 що ви будете використовувати, щоб перекласти речі в Цезаря, 384 00:27:42,750 --> 00:27:46,560 так, то в принципі, там буде дещо іншою формулою, якщо це прописні 385 00:27:46,560 --> 00:27:50,670 на відміну від нижнього регістра. Сенс? 386 00:27:51,020 --> 00:27:52,760 Так. Не турбуйтеся. 387 00:27:54,900 --> 00:27:58,990 Я говорив трохи про додавання 6 до листа, яке не зовсім сенсу 388 00:27:58,990 --> 00:28:05,500 винятком випадків, коли ми якось розуміємо, що ці символи 389 00:28:05,500 --> 00:28:08,920 є свого роду взаємозамінні з цілими числами. 390 00:28:08,920 --> 00:28:11,250 Що ми робимо це, ми вид використання неявних лиття. 391 00:28:11,250 --> 00:28:18,100 Ми підемо в лиття трохи пізніше, де ви берете значення, і ви перетворите його в інший тип 392 00:28:18,100 --> 00:28:20,440 ніж це спочатку було. 393 00:28:20,440 --> 00:28:25,910 Але з цим PSET ми зможемо виду взаємозамінні використовувати символи 394 00:28:25,910 --> 00:28:30,880 і відповідні їм цілі значення. 395 00:28:30,880 --> 00:28:35,140 Так що, якщо ви просто накрити характер тільки з одинарними лапками, 396 00:28:35,140 --> 00:28:40,390 Потім ви зможете працювати з ним з цілими числами, впоратися з ним як ціле. 397 00:28:40,390 --> 00:28:48,040 Таким чином, столиця C відноситься до 67. Рядкові F відноситься до 102. 398 00:28:48,040 --> 00:28:51,480 Знову ж таки, якщо ви хочете знати ці значення, подивіться на свій ASCII таблиці. 399 00:28:51,480 --> 00:28:56,160 Так що давайте увійдемо в деякі приклади того, як ви могли б відняти і додати, 400 00:28:56,160 --> 00:29:03,130 як ви можете дійсно працювати з цими символами, використовувати їх як взаємозамінні. 401 00:29:03,870 --> 00:29:11,350 Я кажу, що ASCIIMath буде обчислити додаванням символу в ціле 402 00:29:11,350 --> 00:29:17,590 , А потім відображає результуючий характер, а також результуюче значення ASCII. 403 00:29:17,590 --> 00:29:22,290 І ось я кажу - МИ впоратися з цією частиною пізніше - 404 00:29:22,290 --> 00:29:29,100 але в основному, я кажу, що користувач повинен запустити сказати ASCIIMath разом з ключем, 405 00:29:29,100 --> 00:29:30,880 і я кажу, що цей ключ буде число 406 00:29:30,880 --> 00:29:34,600 , З якої ми збираємося додати цей персонаж. 407 00:29:34,600 --> 00:29:38,560 Так от помітив, що, так як я вимагає ключа, 408 00:29:38,560 --> 00:29:40,590 так як я вимагаючи, щоб вони дали мені 1 річ, 409 00:29:40,590 --> 00:29:45,600 Я тільки хочу, щоб їх прийняти. / Asciimath і ключ. 410 00:29:45,600 --> 00:29:49,330 Так що я буду вимагати, щоб агдс дорівнює 2. 411 00:29:49,330 --> 00:29:54,360 Якщо це не так, то я збираюся повернути 1, і програма завершиться. 412 00:29:55,070 --> 00:29:58,540 Тому я кажу, що ключ не буде першого аргументу командного рядка, 413 00:29:58,540 --> 00:30:05,080 це буде другий, і, як ви бачите тут, 414 00:30:05,080 --> 00:30:11,790 Я збираюся перетворити його в ціле число. 415 00:30:15,740 --> 00:30:19,230 Тоді я збираюся встановити символ, який буде р. 416 00:30:19,230 --> 00:30:23,970 Зверніть увагу, що тип змінної ХР насправді ціле. 417 00:30:23,970 --> 00:30:30,480 Таким чином, що я можу використовувати Г як ціле є упаковуючи його з цим одинарні лапки. 418 00:30:33,850 --> 00:30:40,560 Отже, повернемося до наших Printf заяву, в якій у нас є заповнювач для характеру 419 00:30:40,560 --> 00:30:43,590 , А потім прототипом для цілого, 420 00:30:43,590 --> 00:30:49,450 символ представляється КПЧ, і ціле є ключовим. 421 00:30:49,450 --> 00:30:54,320 І таким чином ми збираємося в результаті додати 2 разом. 422 00:30:54,320 --> 00:30:58,420 Таким чином, ми збираємося додати все, що г + ключ, 423 00:30:58,420 --> 00:31:03,520 а потім ми збираємося надрукувати результат цього. 424 00:31:06,210 --> 00:31:14,220 Так давайте зробимо asciimath. Це до дати, так що давайте просто запустити asciimath. 425 00:31:14,220 --> 00:31:18,290 Так, але бачите, це не робити нічого, тому що ми насправді не дати йому ключ. 426 00:31:18,290 --> 00:31:23,850 Тому, коли він тільки що повернувся 1, наша основна функція, вона щойно повернулася назад до нас. 427 00:31:23,850 --> 00:31:29,250 Отже перейдемо в ключ. Хтось дав мені номер. >> [Студент] 4. 428 00:31:29,250 --> 00:31:30,920 4. Добре. 429 00:31:30,920 --> 00:31:39,280 Таким чином, г збільшився на 4 збирається дати нам V, що відповідає ASCII значення 118. 430 00:31:39,280 --> 00:31:43,880 І тоді вона як би має сенс, що - 431 00:31:43,880 --> 00:31:51,250 Насправді, чи можу я запитати вас, що ви думаєте ASCII значення г, якщо г + 4 становить 118? 432 00:31:53,070 --> 00:31:55,470 Тоді так, г 114. 433 00:31:55,470 --> 00:32:03,010 Так що, якщо ви подивитеся на таблицю ASCII, то, звичайно ж, ви побачите, що г представлена ​​114. 434 00:32:03,010 --> 00:32:08,610 Так що тепер ми знаємо, що ми можемо додати цілих чисел, символів, це здається досить простим. 435 00:32:08,610 --> 00:32:12,740 Ми просто збираємося для перебору рядків, як ми бачили в прикладі раніше. 436 00:32:12,740 --> 00:32:17,170 Ми перевіримо, якщо цей лист. 437 00:32:17,170 --> 00:32:20,420 Якщо це так, тоді ми будемо перекладати її на будь-який ключ. 438 00:32:20,420 --> 00:32:23,650 Досить просто, крім випадків, коли ви отримаєте це подобається, 439 00:32:23,650 --> 00:32:32,140 Ви бачите, що г, представлений на 122, то дасть вам іншого характеру. 440 00:32:32,140 --> 00:32:37,770 Ми насправді хочемо залишатися в рамках нашого алфавіту, правильно? 441 00:32:37,770 --> 00:32:43,180 Таким чином, ми повинні з'ясувати, якимось чином вигляд обтікання. 442 00:32:43,180 --> 00:32:47,190 Коли ви досягнете Zed, і ви хочете збільшити на певне число, 443 00:32:47,190 --> 00:32:51,230 Ви не хочете йти в межі ASCII розділі алфавіту; 444 00:32:51,230 --> 00:32:54,140 Ви хочете, щоб обернути весь шлях назад до А. 445 00:32:54,140 --> 00:32:58,550 Але майте на увазі, ви все ще зберігаючи той випадок. 446 00:32:58,550 --> 00:33:00,980 Таким чином, знаючи, що листи не можуть стати символами 447 00:33:00,980 --> 00:33:05,290 як символи не будуть також змінюється. 448 00:33:05,290 --> 00:33:08,170 В останні PSET ви напевне не потрібно, 449 00:33:08,170 --> 00:33:14,310 але варіант повинен був реалізувати свої жадібні PSET за допомогою модуля функції. 450 00:33:14,310 --> 00:33:17,230 Але тепер ми насправді збираємося потрібно використовувати модуль, 451 00:33:17,230 --> 00:33:19,900 так що давайте просто йти цим небагато. 452 00:33:19,900 --> 00:33:26,920 По суті, коли у вас є х по модулю у, який дає вам частину, що залишилася х ділиться на у. 453 00:33:26,920 --> 00:33:30,930 Ось кілька прикладів. У нас є 27% 15. 454 00:33:30,930 --> 00:33:36,200 В основному, коли потрібно відняти 15 з 27 стільки разів, скільки можливо, не отримавши негативну 455 00:33:36,200 --> 00:33:39,060 , То ви отримаєте 12 залишилося. 456 00:33:39,060 --> 00:33:44,650 Так що ніби як в математиці контексті, але як ми можемо використовувати це? 457 00:33:44,650 --> 00:33:47,100 Це буде корисно для наших зап `ах. 458 00:33:47,100 --> 00:33:55,420 Для цього, давайте просто скажемо, я запитав вас всіх розділити на 3 групи. 459 00:33:55,420 --> 00:33:58,010 Іноді ви робите це в групах і щось на зразок цього. 460 00:33:58,010 --> 00:34:01,320 Скажімо, я сказав: "Добре, я хочу, щоб ви бути розділені на 3". 461 00:34:01,320 --> 00:34:04,240 Як ви могли б це зробити? 462 00:34:04,240 --> 00:34:06,810 [Нерозбірливо відповідь студента] Так, саме так. Відрахуйте. Добре. 463 00:34:06,810 --> 00:34:10,260 Давайте насправді зробити це. Ви хочете, щоб почати? 464 00:34:10,260 --> 00:34:13,810 [Студентам відраховуючи] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Але пам'ятайте ... >> [Студент] Ой, вибачте. 466 00:34:16,620 --> 00:34:18,730 Це дійсно гарне питання. 467 00:34:18,730 --> 00:34:24,130 Ви сказали, що 4, але ми насправді хочемо, щоб ви говорите 1, тому що ми хочемо тільки 3 групи. 468 00:34:24,130 --> 00:34:30,159 Отже, яким - Ні, це дійсно хороший приклад, тому що те, як ви могли б сказати 1? 469 00:34:30,159 --> 00:34:33,370 Які відносини між 4 і 1? 470 00:34:33,370 --> 00:34:36,760 Ну, 4 мод 3, 1. 471 00:34:36,760 --> 00:34:41,460 Так що, якщо ви будете продовжувати, то буде 2. 472 00:34:41,460 --> 00:34:44,540 Тому у нас є 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Знову ж таки, ви насправді 5-го людини. Як ви знаєте, говорити 2, а не 5? 474 00:34:49,420 --> 00:34:53,760 Ви кажете, що 5 Mod 3, 2. 475 00:34:53,760 --> 00:34:59,100 Я хочу бачити, як багато груп з 3 залишилося більше, то в якому порядку я! 476 00:34:59,100 --> 00:35:02,860 І таким чином, якщо б ми продовжували по всій кімнаті, 477 00:35:02,860 --> 00:35:07,760 то ми побачили б, що ми завжди насправді застосування мода функція собі 478 00:35:07,760 --> 00:35:09,990 у вигляді відраховувати. 479 00:35:09,990 --> 00:35:14,490 Це більш виду наочний приклад того, як можна використовувати по модулю 480 00:35:14,490 --> 00:35:17,960 тому що я впевнений, що більшість з нас, ймовірно, пройшли через цей процес 481 00:35:17,960 --> 00:35:19,630 де ми повинні були відраховувати. 482 00:35:19,630 --> 00:35:21,840 Будь-які питання по модулю? 483 00:35:21,840 --> 00:35:25,360 Це буде дуже важливо розібратися в поняттях цього, 484 00:35:25,360 --> 00:35:28,640 тому я хочу, щоб переконатися, що ви, хлопці, розумієте. 485 00:35:28,640 --> 00:35:34,660 [Студент] Якщо є без залишку, це дає вам реальне число? 486 00:35:34,660 --> 00:35:40,430 Якщо одна з перших 3 з них зробили це, чи буде це дали їм те, що вони були насправді, 487 00:35:40,430 --> 00:35:43,310 або ж він дав їм [нерозбірливо] >> Це хороше питання. 488 00:35:43,310 --> 00:35:48,750 При відсутності залишку за модулем - так що у вас є 6 Mod 3 - 489 00:35:48,750 --> 00:35:52,340 що насправді дає вам 0. 490 00:35:53,670 --> 00:35:57,290 Ми поговоримо про це трохи пізніше. 491 00:35:58,810 --> 00:36:07,720 Ах так, наприклад, 3-ї особи - 3 мода 3 насправді 0, але вона сказала 3. 492 00:36:07,720 --> 00:36:14,900 Так що ніби як внутрішнього видобутку, наприклад, 493 00:36:14,900 --> 00:36:17,620 як добре, якщо мода дорівнює 0, то я буду 3-ї особи. 494 00:36:17,620 --> 00:36:22,740 Але ми увійдемо в роді того, як ми могли б мати справу з тим, що 0 не пізніше. 495 00:36:22,740 --> 00:36:32,750 Так що тепер ми якось повинні спосіб відображення Zed праворуч листі. 496 00:36:32,750 --> 00:36:34,920 Отже, тепер ми пройшли через ці приклади, 497 00:36:34,920 --> 00:36:37,880 ми ніби бачимо, як Цезар може працювати. 498 00:36:37,880 --> 00:36:42,640 Ви бачите, 2 алфавіту, а потім ви бачите їх переміщення. 499 00:36:42,640 --> 00:36:44,430 Так давайте спробуємо висловити це в термінах формули. 500 00:36:44,430 --> 00:36:46,940 Ця формула дійсно дається вам у специфікації, 501 00:36:46,940 --> 00:36:52,070 Але давайте вид погляду через те, що кожна змінна засоби. 502 00:36:52,070 --> 00:36:55,000 Наш кінцевий результат буде зашифрованого тексту. 503 00:36:55,000 --> 00:36:58,300 Таким чином, це говорить про те, що го характеру зашифрований текст 504 00:36:58,300 --> 00:37:02,500 буде відповідати го характеру тексту. 505 00:37:02,500 --> 00:37:08,130 Це має сенс, тому що ми хочемо, щоб завжди бути підкладка ці речі. 506 00:37:08,130 --> 00:37:13,480 Так що це буде го характеру зашифрованого тексту плюс до, який є нашим ключем - 507 00:37:13,480 --> 00:37:17,230 , Яка має сенс - а то у нас ця мода 26. 508 00:37:17,230 --> 00:37:19,860 Пам'ятаєте, коли ми були Zed 509 00:37:19,860 --> 00:37:24,190 ми не хочемо, щоб потрапити в характер, тому ми хотіли, щоб це мода 510 00:37:24,190 --> 00:37:26,540 і вид обернути навколо алфавіту. 511 00:37:26,540 --> 00:37:33,430 Після Zed ви підете до A, B, C, D, поки ви не дісталися до потрібної кількості. 512 00:37:33,430 --> 00:37:44,690 Отже, ми знаємо, що Zed, якщо + 6, дасть нам е, тому що після Zed приходить A, B, C, D, E, F. 513 00:37:44,690 --> 00:37:52,530 Отже, давайте пам'ятати, що ми знаємо напевно, що Zed + 6 збирається дати нам ф. 514 00:37:52,530 --> 00:38:03,530 В ASCII значення, г становить 122 і Р 102. 515 00:38:03,530 --> 00:38:10,570 Тому ми повинні знайти спосіб зробити наш Цезар формула дасть нам 102 516 00:38:10,570 --> 00:38:13,590 після прийняття в 122. 517 00:38:13,590 --> 00:38:19,550 Так що, якщо ми просто застосувати цю формулу, ('Z' + 6) 26%, що насправді дає вам 24 518 00:38:19,550 --> 00:38:25,980 тому що 122 + 6128; 128% 26 дає вам 24 залишку. 519 00:38:25,980 --> 00:38:29,140 Але це насправді не означає, ф. Це безумовно не 102. 520 00:38:29,140 --> 00:38:33,590 Це також не 6-й буквою в алфавіті. 521 00:38:33,590 --> 00:38:41,550 Таким чином, очевидно, що ми повинні мати певний спосіб налаштування цього небагато. 522 00:38:42,970 --> 00:38:51,340 У термінах регулярних алфавіту, ми знаємо, що г 26 букви і F є 6-м. 523 00:38:51,340 --> 00:38:55,460 Але ми в інформатиці, так що ми збираємося індексу 0. 524 00:38:55,460 --> 00:39:00,690 І тоді замість г-число 26, ми будемо говорити, що це номер 25 525 00:39:00,690 --> 00:39:02,630 тому що це 0. 526 00:39:02,630 --> 00:39:04,770 Отже, тепер давайте застосуємо цю формулу. 527 00:39:04,770 --> 00:39:11,710 Ми маємо г представлені 25 + 6, яка дає вам 31. 528 00:39:11,710 --> 00:39:15,790 І 31 мод 26 дає вам 5 як залишку. 529 00:39:15,790 --> 00:39:20,500 Це чудово, тому що ми знаємо, що F є 5-й буквою в алфавіті. 530 00:39:20,500 --> 00:39:26,400 Але це ще не е, вірно? Він як і раніше не 102. 531 00:39:26,400 --> 00:39:32,730 Таким чином, то для цього PSET, виклик буде намагатися з'ясувати відносини 532 00:39:32,730 --> 00:39:36,910 між конвертацію між цими значеннями ASCII і алфавітний покажчик. 533 00:39:36,910 --> 00:39:40,280 По суті, те, що ви хочете робити, ви хочете, щоб почати з ASCII значення, 534 00:39:40,280 --> 00:39:45,390 а то ви хочете, щоб хоч якось перевести це в алфавітному покажчику 535 00:39:45,390 --> 00:39:52,610 Потім розрахувати, які листи він повинен бути - в основному, те, що його Алфавітний покажчик 536 00:39:52,610 --> 00:39:57,660 шифру характер - те, що перевести назад в ASCII значення. 537 00:39:57,660 --> 00:40:04,870 Так що якщо ви вихопити вашу ASCII таблиці, а потім спробувати знайти взаємозв'язок між, скажімо, 102 і 5 538 00:40:04,870 --> 00:40:10,440 або 122 та 25. 539 00:40:12,140 --> 00:40:15,690 Ми отримали наш ключ від аргументів командного рядка, ми отримали текст, 540 00:40:15,690 --> 00:40:17,520 Ми зашифровано його. 541 00:40:17,520 --> 00:40:19,820 Тепер все, що нам залишилося зробити, це роздрукувати його. 542 00:40:19,820 --> 00:40:22,040 Ми могли б зробити це кількома різними способами. 543 00:40:22,040 --> 00:40:24,570 Що ми можемо зробити, це насправді друкувати як ми йдемо разом. 544 00:40:24,570 --> 00:40:28,250 Як ми перебору символів в рядку, 545 00:40:28,250 --> 00:40:31,660 ми могли б просто просто роздрукувати прямо тоді, коли ми її розрахунку. 546 00:40:31,660 --> 00:40:36,030 Крім того, можна також зберігати його в масив, а масив символів 547 00:40:36,030 --> 00:40:39,280 і в кінці ітерації, що весь масив і роздрукувати його. 548 00:40:39,280 --> 00:40:40,980 Таким чином, у вас є кілька варіантів для цього. 549 00:40:40,980 --> 00:40:47,280 І пам'ятайте, що з% буде заповнювач для друку характеру. 550 00:40:47,280 --> 00:40:50,420 Так що у нас є Цезар, і тепер ми переходимо до Vigenere, 551 00:40:50,420 --> 00:40:57,580 який дуже схожий на Цезаря, але трохи складніше. 552 00:40:57,580 --> 00:41:03,310 Так по суті з Vigenere це ви будете проходить в ключове слово. 553 00:41:03,310 --> 00:41:06,510 Таким чином, замість номера, ви будете мати рядки, 554 00:41:06,510 --> 00:41:09,200 і так, що збирається виступати в якості ключового слова. 555 00:41:09,200 --> 00:41:14,440 Потім, як звичайно, ви збираєтеся отримати підказку для рядка від користувача 556 00:41:14,440 --> 00:41:19,050 , А потім зашифрувати його, а потім дати їм назад зашифрованого тексту. 557 00:41:19,050 --> 00:41:24,650 Отже, як я вже сказав, це дуже схожий на Цезаря, тільки замість переходу на певне число, 558 00:41:24,650 --> 00:41:30,620 кількість фактично збирається міняти кожного разу від персонажа до персонажа. 559 00:41:30,620 --> 00:41:34,890 Щоб уявити, що фактичне число перекласти, він представлений на клавіатурі літери. 560 00:41:34,890 --> 00:41:43,150 Так що, якщо ви входите в зміщенні, наприклад, те, що буде відповідати зсуву 0. 561 00:41:43,150 --> 00:41:45,900 Так що це ще раз повернутися до алфавітним покажчиком. 562 00:41:45,900 --> 00:41:49,100 Що може бути корисно, якщо ви бачите, що ми дійсно маємо справу з ASCII значення 563 00:41:49,100 --> 00:41:51,790 а також листи, а також алфавітний покажчик, 564 00:41:51,790 --> 00:41:58,020 можливо, знайти або створити свій власний ASCII таблиця, яка показує алфавітний покажчик від 0 до 25, 565 00:41:58,020 --> 00:42:03,750 через г, а ASCII значення, так що ви можете бачити вид відносин 566 00:42:03,750 --> 00:42:07,020 і намітити і спробувати знайти деякі закономірності. 567 00:42:07,020 --> 00:42:11,010 Точно так само, якщо б ви були зсуву в певній інстанції F - 568 00:42:11,010 --> 00:42:21,110 і це або рядковими або прописними F - те, що відповідало б 5. 569 00:42:21,110 --> 00:42:24,180 Хіба ми добре досі? 570 00:42:25,770 --> 00:42:30,050 Формула для Vigenere трохи відрізняється. 571 00:42:30,050 --> 00:42:32,960 В принципі, ви побачите, що це так само, як Цезар, 572 00:42:32,960 --> 00:42:37,390 винятком, а не тільки до маємо до індексом J. 573 00:42:37,390 --> 00:42:44,810 Зверніть увагу, що ми не використовуємо, бо я по суті, довжина ключового слова 574 00:42:44,810 --> 00:42:49,850 не обов'язково довжини нашого зашифрованого тексту. 575 00:42:49,850 --> 00:42:56,130 Це буде трохи ясніше, коли ми бачимо, наприклад, що у мене є трохи пізніше. 576 00:42:56,130 --> 00:43:03,160 В принципі, якщо ви запустите програму з ключовим словом Ohai, 577 00:43:03,160 --> 00:43:08,560 то це означає, що кожного разу, Ohai буде вашою зміни. 578 00:43:08,560 --> 00:43:11,060 Тому в залежності від того, що позиції ви знаходитеся в ваше ключове слово, 579 00:43:11,060 --> 00:43:15,800 Ви збираєтеся перенести ваш певний характер зашифрованого тексту на цю суму. 580 00:43:15,800 --> 00:43:19,630 Знову ж таки, як Цезар, ми хочемо переконатися, що ми збережемо капіталізації речі 581 00:43:19,630 --> 00:43:22,900 і ми тільки зашифрувати букви, а не символи або прогалини. 582 00:43:22,900 --> 00:43:26,330 Так озирнутися назад, щоб Цезар на функції, які ви можете використовувати, 583 00:43:26,330 --> 00:43:32,570 так, що ви вирішили, як перекласти речі, і застосувати це до вашої програми. 584 00:43:32,570 --> 00:43:35,260 Так що давайте карта цьому. 585 00:43:35,260 --> 00:43:39,680 У нас є текст, який ми отримали від користувачів з GetString 586 00:43:39,680 --> 00:43:44,090 Сказавши це ... є CS50! 587 00:43:44,090 --> 00:43:47,090 Тоді у нас є ключове слово Ohai. 588 00:43:47,090 --> 00:43:50,930 Перші 4 символу, досить прості. 589 00:43:50,930 --> 00:43:55,580 Ми знаємо, що T збирається бути зрушені на о, 590 00:43:55,580 --> 00:44:01,990 Тоді Н буде зрушений на годину, я маю намір бути зрушені. 591 00:44:01,990 --> 00:44:04,610 Тут ви бачите, що являє собою 0, 592 00:44:04,610 --> 00:44:11,940 так, то кінцеве значення насправді просто ж літери, що і раніше. 593 00:44:11,940 --> 00:44:15,250 Потім з зсувається на мене. 594 00:44:15,250 --> 00:44:19,370 Але тоді у вас є ці періоди тут. 595 00:44:19,370 --> 00:44:25,960 Ми не хочемо, щоб зашифрувати, що, таким чином, то ми не змінити, нічого 596 00:44:25,960 --> 00:44:31,280 і просто роздрукувати період незмінним. 597 00:44:31,280 --> 00:44:38,020 [Студент] Я не розумію, як ви знаєте, що це зрушена на - Де ти - >> Ой, вибачте. 598 00:44:38,020 --> 00:44:41,620 У верхній Тут ви бачите, що аргумент командного рядка Ohai тут, 599 00:44:41,620 --> 00:44:43,740 що це буде ключовим словам. 600 00:44:43,740 --> 00:44:49,550 А так в основному, ви велосипедного більше символів у ключових слів. 601 00:44:49,550 --> 00:44:52,020 [Студент] Таким чином, висновок буде зрушуючи ж - 602 00:44:52,020 --> 00:44:56,260 Так O відповідає певний номер в алфавіті. 603 00:44:56,260 --> 00:44:58,400 [Студент] Вірно. Але з чого ти взяв CS50 частина з? 604 00:44:58,400 --> 00:45:02,540 Ох. Це в GetString, де ви, як: «Дайте мені рядки для кодування". 605 00:45:02,540 --> 00:45:07,510 [Студент] Вони збираються дати вам, що аргумент перейти на 606 00:45:07,510 --> 00:45:09,380 і тоді ви будете просити вашої першого рядка. >> Да. 607 00:45:09,380 --> 00:45:12,440 Тому, коли вони запустіть програму, вони будуть включати ключові слова 608 00:45:12,440 --> 00:45:14,740 У їх аргументи командного рядка, коли вони запустіть його. 609 00:45:14,740 --> 00:45:19,740 Потім, коли ви перевірили, що вони насправді дав вам 1 і не більше, не менше, 610 00:45:19,740 --> 00:45:23,750 Потім ви йдете, щоб підштовхнути їх до рядка, скажімо, "Дайте мені рядки". 611 00:45:23,750 --> 00:45:27,630 Так ось де в цьому випадку вони дали вам це ... є CS50! 612 00:45:27,630 --> 00:45:32,090 Отже, ви збираєтеся використовувати, що і використанні Ohai і перебирати. 613 00:45:32,090 --> 00:45:38,200 Зверніть увагу, що тут ми пропустили шифрування періоди, 614 00:45:38,200 --> 00:45:51,660 але з точки зору нашої позиції по Ohai, наступний ми використовували о. 615 00:45:51,660 --> 00:45:54,990 В даному випадку це трохи складніше побачити, бо це 4, 616 00:45:54,990 --> 00:45:57,710 так давайте продовжимо трохи. Просто дотримуйтеся зі мною тут. 617 00:45:57,710 --> 00:46:02,960 Тоді я і S, які потім переводяться на про і год відповідно. 618 00:46:02,960 --> 00:46:09,370 Тоді у нас є простір, і так, то ми знаємо, що ми не збираємося, щоб зашифрувати простору. 619 00:46:09,370 --> 00:46:18,930 Але зауважте, що замість того, щоб в цьому місці прямо тут, 620 00:46:18,930 --> 00:46:28,330 Ми шифрування по - Я не знаю, якщо ви бачите, що - прямо тут. 621 00:46:28,330 --> 00:46:33,710 Так що це не схоже на тебе фактично зумовлена, скажімо, йде тут про, ч тут йде, 622 00:46:33,710 --> 00:46:39,200 йде тут, я тут йде, O, H, A, I, O, H, A, I. Ви не робите цього. 623 00:46:39,200 --> 00:46:43,760 Ви тільки змінити свою позицію в ключових слів 624 00:46:43,760 --> 00:46:51,020 коли ви знаєте, що ви насправді будете шифрування фактичної листі. 625 00:46:51,020 --> 00:46:53,920 Чи є такий сенс? 626 00:46:53,920 --> 00:46:55,800 Добре. 627 00:46:56,490 --> 00:46:58,500 Так що деякі нагадування. 628 00:46:58,500 --> 00:47:03,760 Ви хочете, щоб переконатися, що ви тільки перейти до наступного листа в ваше ключове слово 629 00:47:03,760 --> 00:47:06,390 якщо персонаж у відкритий текст листа. 630 00:47:06,390 --> 00:47:09,120 Так що сказати, що ми знаходимося на о. 631 00:47:09,120 --> 00:47:19,310 Відзначимо, що наступний символ, індекс Я з тексту, є числом, наприклад. 632 00:47:19,310 --> 00:47:31,630 Тоді ми не висувають J, індекс для нашого ключового слова, поки ми не досягнемо ще один лист. 633 00:47:31,630 --> 00:47:36,230 Знову ж таки, ви також хочете, щоб переконатися, що ви запахом до початку ключового слова 634 00:47:36,230 --> 00:47:37,770 коли ви знаходитесь в кінці його. 635 00:47:37,770 --> 00:47:42,030 Якщо ви бачите, тут ми знаходимося я, наступний повинен бути о. 636 00:47:42,030 --> 00:47:47,690 Отже, ви хочете знайти якийсь спосіб, щоб бути здатним запахом на початку ваших ключових слів 637 00:47:47,690 --> 00:47:49,470 кожен раз, коли ви дійдете до кінця. 638 00:47:49,470 --> 00:47:55,040 І так знову, який оператор корисний в цьому випадку для обгортання навколо? 639 00:47:56,630 --> 00:47:59,840 Як і в відраховуючи приклад. 640 00:47:59,840 --> 00:48:03,710 [Студент] знак відсотка. >> Да, знак відсотка, що є по модулю. 641 00:48:03,710 --> 00:48:11,250 Таким чином, по модулю нагоді, якщо хочете, щоб обернути по індексу в Ohai. 642 00:48:11,250 --> 00:48:17,700 І так само швидко підказка: спробуйте думати про обгортання за ключовим словом трохи схожий на відлік, 643 00:48:17,700 --> 00:48:23,590 де, якщо є 3 групи, 4 людини, 644 00:48:23,590 --> 00:48:30,610 їх кількість, що вони сказали, було 4 мод 3, яка була 1. 645 00:48:30,610 --> 00:48:32,880 Так що спробуйте і думати по-іншому. 646 00:48:34,770 --> 00:48:42,740 Як ви бачили у формулі, де у вас є CI а потім пі, але потім кДж, 647 00:48:42,740 --> 00:48:44,700 Ви хочете, щоб переконатися, що ви стежити за тим. 648 00:48:44,700 --> 00:48:47,580 Вам не потрібно називати це я, вам не потрібно називати це J, 649 00:48:47,580 --> 00:48:53,270 але ви хочете, щоб переконатися, що ви відстежувати позиції, що ви в в текст 650 00:48:53,270 --> 00:48:55,790 а також з того, що ви на ваше ключове слово в 651 00:48:55,790 --> 00:48:59,840 тому що ті, які не обов'язково буде те ж саме. 652 00:48:59,840 --> 00:49:06,400 Не тільки ключове слово - воно може бути абсолютно різної довжини, ніж ваш текст. 653 00:49:06,400 --> 00:49:09,140 Крім того, ваш текст, є цифри і символи, 654 00:49:09,140 --> 00:49:14,450 так що це не буде ідеально відповідати разом. Так. 655 00:49:14,450 --> 00:49:19,280 [Студент] Є функція змінити справу? 656 00:49:19,280 --> 00:49:24,530 Чи можете ви змінити в столицю? >> Да, там безумовно є. 657 00:49:24,530 --> 00:49:27,890 Ви можете перевірити - Я вважаю, що це ToUpper, всі 1 слово. 658 00:49:30,650 --> 00:49:36,310 Але коли ви намагаєтеся зашифрувати речі і зберегти текст, 659 00:49:36,310 --> 00:49:39,350 краще в основному мати окремі випадки. 660 00:49:39,350 --> 00:49:42,040 Якщо це великі літери, то ви хочете перейти по цій 661 00:49:42,040 --> 00:49:46,460 тому що у формулі, коли ви озираєтеся назад, як ми повинні виду ходу 662 00:49:46,460 --> 00:49:50,900 взаємозамінні між ASCII спосіб представлення чисел 663 00:49:50,900 --> 00:49:55,020 і фактичного алфавітний покажчик, ми хочемо переконатися, що 664 00:49:55,020 --> 00:50:01,850 там буде якийсь шаблон, який ви збираєтеся використовувати. 665 00:50:01,850 --> 00:50:04,580 Ще одне зауваження по шаблону, на самом деле. 666 00:50:04,580 --> 00:50:07,250 Ви будете виразно мати справу з цифрами. 667 00:50:07,250 --> 00:50:11,280 Намагайтеся не використовувати магію чисел, яке є прикладом стилю. 668 00:50:11,280 --> 00:50:18,470 Так що ви хочете, щоб кожного разу, коли щось зрушення подобається - 669 00:50:18,470 --> 00:50:22,400 Отже, натяк, інший спойлер, коли ви збираєтеся щось ч. 670 00:50:22,400 --> 00:50:26,310 на певну величину, стараюся не уявляти, що, фактичне число 671 00:50:26,310 --> 00:50:32,810 а спробувати і подивитися, якщо ви можете використовувати ASCII значення, яке начебто більше сенсу. 672 00:50:32,810 --> 00:50:35,470 Ще одне зауваження: Тому що ми маємо справу з формулами, 673 00:50:35,470 --> 00:50:41,200 навіть якщо ваш TF буде вид знаємо, що картина ви могли б використовувати, 674 00:50:41,200 --> 00:50:44,430 Найкраще у вашому коментарі виду пояснити логіку, як, 675 00:50:44,430 --> 00:50:51,880 "Я використовую цю модель, тому що ..." і почасти пояснити картину коротко в своєму коментарі. 676 00:50:54,090 --> 00:50:58,990 [Це було проходження 2] Якщо немає ніяких інших питань, то я залишуся тут небагато. 677 00:50:58,990 --> 00:51:04,370 Успіхів вам у ваших PSET 2: Crypto і спасибі за увагу. 678 00:51:06,070 --> 00:51:08,620 [Студент] Спасибо. >> Спасибо. 679 00:51:09,220 --> 00:51:10,800 [Media Offline Intro]