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 + 6 128; 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]