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