1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] David J. Малан: Все правильно, это CS50, и это 2 00:00:11,630 --> 00:00:14,790 начала недели две. 3 00:00:14,790 --> 00:00:16,300 Спасибо. 4 00:00:16,300 --> 00:00:19,000 Давайте начнем вот с телефонного звонка. 5 00:00:19,000 --> 00:00:30,005 Я собираюсь набрать 617-BUG-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: Это CS50. 7 00:00:31,230 --> 00:00:33,930 Для Shuttle Boy, нажмите 1. 8 00:00:33,930 --> 00:00:36,660 Чтобы начать сначала, нажмите кнопку 9. 9 00:00:36,660 --> 00:00:38,180 David J. Малан: Так он сказал на Shuttle Boy, нажмите 1. 10 00:00:38,180 --> 00:00:41,560 Таким образом, мы собираемся нажмите 1. 11 00:00:41,560 --> 00:00:43,230 CS50: Каково ваше происхождение? 12 00:00:43,230 --> 00:00:45,340 Для четверых, нажмите 1. 13 00:00:45,340 --> 00:00:47,080 Mather, нажмите 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, нажмите 3. 15 00:00:49,240 --> 00:00:51,280 Ламонт, нажмите кнопку 4. 16 00:00:51,280 --> 00:00:53,210 Сувениры зал, пресс 5. 17 00:00:53,210 --> 00:00:55,660 Чтобы начать сначала, нажмите 0. 18 00:00:55,660 --> 00:00:59,590 David J. Малан: Мы будем нажмите 1 для четверых. 19 00:00:59,590 --> 00:01:03,610 CS50: Следующий шаттл уходит в эту самую минуту в PM 1:10 и 20 00:01:03,610 --> 00:01:09,820 Затем в 1:20 вечера, 1:30, 1:40 вечера. 21 00:01:09,820 --> 00:01:12,030 Это CS50. 22 00:01:12,030 --> 00:01:15,570 >> David J. Малан: Так что это голос CS50 в. 23 00:01:15,570 --> 00:01:18,030 И это пример вида окончательного проектов, 24 00:01:18,030 --> 00:01:19,500 Например, вы можете откусить к 25 00:01:19,500 --> 00:01:20,600 К концу семестра. 26 00:01:20,600 --> 00:01:23,840 Например, что shuttleboy.cs50.net существует - 27 00:01:23,840 --> 00:01:28,200 на самом деле проект, который я впервые написал после того, CS51 28 00:01:28,200 --> 00:01:29,740 назад, когда я был студентом. 29 00:01:29,740 --> 00:01:32,250 И вдохновение здесь было тогда, все, что они имели, было 30 00:01:32,250 --> 00:01:34,320 печатные автобус расписание, и не было 31 00:01:34,320 --> 00:01:35,970 Понятие ищет вещи в Интернете. 32 00:01:35,970 --> 00:01:38,730 А так я вроде голубя в один уик-энд, налил через 33 00:01:38,730 --> 00:01:41,460 печатной графике, и перенес его в компьютерной программе. 34 00:01:41,460 --> 00:01:43,790 В то время, компьютерная программа случилось быть написано 35 00:01:43,790 --> 00:01:47,110 в C. И вы на самом деле бежал, введя Shuttle Мальчик на 36 00:01:47,110 --> 00:01:48,600 мигать подскажут, как мы делали до сих пор. 37 00:01:48,600 --> 00:01:50,450 Но за эти годы, она превратилась в мгновение 38 00:01:50,450 --> 00:01:51,390 сообщениями бот. 39 00:01:51,390 --> 00:01:53,970 Она превратилась в последнее время в этом веб-сайте, в 40 00:01:53,970 --> 00:01:57,720 SMS-инструмента, а также в этот голос-инструмент. 41 00:01:57,720 --> 00:02:00,170 И это намекнуть на виды вещей, которые вы можете 42 00:02:00,170 --> 00:02:02,380 сделать для себя до конца семестра. 43 00:02:02,380 --> 00:02:05,490 >> Например, там, версия СМС Shuttle Boy происходит 44 00:02:05,490 --> 00:02:06,510 работать как следует. 45 00:02:06,510 --> 00:02:10,880 Если, на ваш мобильный телефон, отправить текстовое сообщение на 41411 и 46 00:02:10,880 --> 00:02:14,300 затем отправить специальную sboy символ, для Shuttle Boy, 47 00:02:14,300 --> 00:02:18,350 следует А и В, где А и B происхождения является 48 00:02:18,350 --> 00:02:19,070 пункт назначения - 49 00:02:19,070 --> 00:02:21,030 Например, Boylston космической Quad - 50 00:02:21,030 --> 00:02:23,330 то, что вы должны вернуться в течение нескольких секунд текст 51 00:02:23,330 --> 00:02:25,820 Сообщение от Shuttle Boy говорю вам точно, когда 52 00:02:25,820 --> 00:02:28,990 Следующие несколько шаттлы, с этой точки собираюсь, что 53 00:02:28,990 --> 00:02:29,640 точке В. 54 00:02:29,640 --> 00:02:32,510 И это более общий пример того, что известно как 55 00:02:32,510 --> 00:02:33,920 использованием API. 56 00:02:33,920 --> 00:02:36,930 >> Так, например, это здесь просто shuttleboy.cs50.net, 57 00:02:36,930 --> 00:02:39,300 фактический веб-воплощение этого. 58 00:02:39,300 --> 00:02:42,480 Но данные, которые подчеркивают эту и другие приложения, которые CS50 59 00:02:42,480 --> 00:02:45,560 разработаны все подвержены всем здесь в виде 60 00:02:45,560 --> 00:02:49,340 из API-интерфейсы, интерфейсы прикладного программирования. 61 00:02:49,340 --> 00:02:52,220 И это только причудливый способ сказать, что люди, как мы на 62 00:02:52,220 --> 00:02:56,010 Интернет и другие провели некоторое время на создание 63 00:02:56,010 --> 00:02:59,970 Программное обеспечение, которое можно использовать для того, чтобы получить данные от нас и 64 00:02:59,970 --> 00:03:02,510 затем построить собственные приложения поверх 65 00:03:02,510 --> 00:03:03,840 этого набора данных. 66 00:03:03,840 --> 00:03:06,610 Так, например, этот API Shuttle Boy странице здесь, которые 67 00:03:06,610 --> 00:03:09,390 оказывается в CS50 руководства, по существу документов 68 00:03:09,390 --> 00:03:13,080 как вы можете идти о выяснении CS50 серверы для хранения данных. 69 00:03:13,080 --> 00:03:16,240 Например, если вы знакомы с CSV файлами, запятая 70 00:03:16,240 --> 00:03:18,940 значения, разделенные, это просто как бы быстро и грязно 71 00:03:18,940 --> 00:03:20,310 Excel-подобные файлы. 72 00:03:20,310 --> 00:03:23,110 Таким образом, вы можете попросить Shuttle Boy для всех данных на всех 73 00:03:23,110 --> 00:03:25,090 домов и их GPS координаты, и вы получите 74 00:03:25,090 --> 00:03:27,300 назад, по сути, электронными таблицами так, что 75 00:03:27,300 --> 00:03:30,820 Вы можете читать в программу собственных, а затем 76 00:03:30,820 --> 00:03:33,250 получения результатов, как Shuttle Мальчик сам 77 00:03:33,250 --> 00:03:34,160 , случается, делают. 78 00:03:34,160 --> 00:03:37,030 Для тех, кто более знакомы, более современные представления данных 79 00:03:37,030 --> 00:03:39,420 включают JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Что-то придет к вам на 81 00:03:40,620 --> 00:03:41,720 К концу семестра. 82 00:03:41,720 --> 00:03:45,440 >> Но опять же, это всего лишь одна из нескольких собственных API, CS50 в. 83 00:03:45,440 --> 00:03:48,320 И захватывающая вещь сейчас, в эти дни, Facebook и 84 00:03:48,320 --> 00:03:51,110 Twitter и Google, и почти каждый из популярного веб-сайта 85 00:03:51,110 --> 00:03:54,130 там есть какая-то API, который означает, что если вы читаете 86 00:03:54,130 --> 00:03:56,620 Документация на их сайте, вы подпишитесь на 87 00:03:56,620 --> 00:03:59,980 учетной записи, вы можете начать писать программы на вершине 88 00:03:59,980 --> 00:04:03,680 все инструменты и данные, которые предоставляет компания существует. 89 00:04:03,680 --> 00:04:06,210 И вот один из наших парней преподавания пару лет назад 90 00:04:06,210 --> 00:04:07,620 написал версию Mac об этом. 91 00:04:07,620 --> 00:04:10,990 Таким образом, по ссылке под названием Mac здесь, в левом верхнем углу, вы можете на самом деле 92 00:04:10,990 --> 00:04:13,940 скачать виджеты Mac OS, которая работает на собственной Mac, чтобы сделать 93 00:04:13,940 --> 00:04:15,040 такие же вещи. 94 00:04:15,040 --> 00:04:17,970 Так что это все о строительстве в верхней части набора данных, как эти. 95 00:04:17,970 --> 00:04:21,839 Но об этом в конце семестра. 96 00:04:21,839 --> 00:04:25,780 >> Так давайте погрузимся в реальном быстро ошибка, просто чтобы получить вид 97 00:04:25,780 --> 00:04:27,990 вещи разогревается сегодня, и вспомнить о некоторых 98 00:04:27,990 --> 00:04:29,660 вещи, которые мы посмотрели на прошлой неделе. 99 00:04:29,660 --> 00:04:32,840 В частности, позвольте мне идти вперед и вырывать, скажем, 100 00:04:32,840 --> 00:04:34,080 этот пример здесь. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, это доступно на веб-сайте Конечно, если вы хотите 102 00:04:37,500 --> 00:04:40,250 хотелось, чтобы загрузить его и тыкать вокруг себя. 103 00:04:40,250 --> 00:04:43,520 Но давайте увеличить здесь, на этом довольно короткую программу, а просто 104 00:04:43,520 --> 00:04:46,550 Супер-быстрое повторение некоторых из основных строительных блоков, которые 105 00:04:46,550 --> 00:04:48,880 мы действительно собираемся просто начать принимать как должное. 106 00:04:48,880 --> 00:04:51,860 >> Таким образом, синие вещи, в строках с 1 по 9, всего лишь 107 00:04:51,860 --> 00:04:53,670 софтбол вопросы. 108 00:04:53,670 --> 00:04:54,590 Так что это просто комментарий. 109 00:04:54,590 --> 00:04:56,230 Они не имеют никакого функционального смысла. 110 00:04:56,230 --> 00:04:58,460 Но они комментарий в том смысле, что они отмечается, что 111 00:04:58,460 --> 00:05:02,010 Я, человек, сделал себе так, что в лекции и после 112 00:05:02,010 --> 00:05:04,340 лекции, я могу фактически помнить, что эта программа 113 00:05:04,340 --> 00:05:07,120 не обходится без того, чтобы прочитать его строка за строкой и 114 00:05:07,120 --> 00:05:08,990 воссоздания истории, на мой взгляд. 115 00:05:08,990 --> 00:05:11,000 Более того, если я вручаю эту программу, чтобы кто-то другой, как 116 00:05:11,000 --> 00:05:14,420 Вас, это гораздо яснее для вас, потому что комментарии, как это, 117 00:05:14,420 --> 00:05:16,680 то, что программа на самом деле делают, или, по крайней мере то, что 118 00:05:16,680 --> 00:05:18,210 Программы должны делать. 119 00:05:18,210 --> 00:05:20,760 Или нет, это правильно, это совсем другое дело. 120 00:05:20,760 --> 00:05:25,040 Теперь, С, многострочные комментарии, вспомним, что на линии 121 00:05:25,040 --> 00:05:27,880 один здесь является магическим символом, / *. 122 00:05:27,880 --> 00:05:30,380 Это значит, что вот идет начало комментария. 123 00:05:30,380 --> 00:05:34,560 И ничто другое не имеет значения, пока вы не дойдете до конца терминатор, 124 00:05:34,560 --> 00:05:36,700 который * /, наоборот. 125 00:05:36,700 --> 00:05:39,120 Поэтому тот факт, что у меня есть 80-странные звезды здесь с 126 00:05:39,120 --> 00:05:41,550 Слева направо на самом деле просто эстетическая деталь. 127 00:05:41,550 --> 00:05:43,370 Он не имеет функциональное значение. 128 00:05:43,370 --> 00:05:44,490 >> Теперь, как о линии 11? 129 00:05:44,490 --> 00:05:46,940 Что это делать с точки зрения непрофессионала? 130 00:05:51,560 --> 00:05:52,540 Что это? 131 00:05:52,540 --> 00:05:54,280 АУДИТОРИЯ: Включает в себя стандартный. 132 00:05:54,280 --> 00:05:54,740 David J. Малан: Хорошо, хорошо. 133 00:05:54,740 --> 00:05:57,500 Таким образом, она включает в себя библиотеку stdio.h. 134 00:05:57,500 --> 00:05:58,230 Так что же это значит? 135 00:05:58,230 --> 00:06:01,570 Ну, внутри этого файла, stdio.h, которые целый букет 136 00:06:01,570 --> 00:06:03,320 Функция декларации - 137 00:06:03,320 --> 00:06:05,290 то есть код, который написал кто-то другой. 138 00:06:05,290 --> 00:06:08,160 И прекрасный пример функции, которая объявлена ​​в 139 00:06:08,160 --> 00:06:10,250 stdio.h это - 140 00:06:10,250 --> 00:06:11,980 которая любимый сейчас? 141 00:06:11,980 --> 00:06:14,300 Так Printf, одним из наиболее распространенных из них использовать, конечно, 142 00:06:14,300 --> 00:06:15,840 на ранней стадии, из этой библиотеки есть. 143 00:06:15,840 --> 00:06:19,290 Если я исключаю, что строки кода, Clang будет кричать 144 00:06:19,290 --> 00:06:22,550 у меня что-то об использовании необъявленных символ. 145 00:06:22,550 --> 00:06:24,930 Что-то необъявленной, наверное, ключевое слово, потому что 146 00:06:24,930 --> 00:06:27,770 Мы не сообщил компилятору, что выглядит Printf 147 00:06:27,770 --> 00:06:29,230 нравится, если мы включим эту линию. 148 00:06:29,230 --> 00:06:31,830 И еще на Землю, на самом деле, то, что эта линия говорю, 149 00:06:31,830 --> 00:06:34,890 открыть этот файл, stdio.h, где он находится на сервере 150 00:06:34,890 --> 00:06:38,200 жесткий диск или жесткий диск прибора, и скопировать его 151 00:06:38,200 --> 00:06:40,240 тут же в моем файле, без моего 152 00:06:40,240 --> 00:06:41,730 того, чтобы сделать это вручную. 153 00:06:41,730 --> 00:06:44,420 >> Теперь, когда мы приступим здесь к основной, в скором времени мы начнем 154 00:06:44,420 --> 00:06:46,900 дразнят друг от друга, что Int и то, что пустота. 155 00:06:46,900 --> 00:06:48,430 Но сейчас, давайте посмотрим на три линии 156 00:06:48,430 --> 00:06:50,350 в пределах от 15 до 17. 157 00:06:50,350 --> 00:06:52,250 Такой вот я утверждаю, как багги. 158 00:06:52,250 --> 00:06:54,900 Линия 7 в своем комментарии говорит: "Должна печати 10 159 00:06:54,900 --> 00:06:59,410 звездочками, но не ". Почему это не печать, на самом деле, 160 00:06:59,410 --> 00:07:01,097 10 таких звезд? 161 00:07:01,097 --> 00:07:02,347 АУДИТОРИЯ: [неразборчиво]. 162 00:07:05,210 --> 00:07:05,800 David J. Малан: Совершенно верно. 163 00:07:05,800 --> 00:07:08,720 Таким образом, заметили, что мы начинаем считать от 0. 164 00:07:08,720 --> 00:07:10,780 И это на самом деле конвенции в области программирования и 165 00:07:10,780 --> 00:07:13,230 компьютерные науки в целом, начиная рассчитывать 166 00:07:13,230 --> 00:07:14,610 от 0 вместо 1. 167 00:07:14,610 --> 00:07:16,690 И это действительно просто вытекает из того факта, что для 168 00:07:16,690 --> 00:07:18,940 Например, когда у нас было восемь человек на сцене, когда 169 00:07:18,940 --> 00:07:20,680 никто не поднимал свои руки, они были 170 00:07:20,680 --> 00:07:22,340 Все эффективного нули. 171 00:07:22,340 --> 00:07:24,260 А так это просто вид компьютера конвенции, с тем, 172 00:07:24,260 --> 00:07:26,030 Таким образом, чтобы начать отсчет с 0. 173 00:07:26,030 --> 00:07:29,130 Если это наименьшее число можно представить в двоичном виде. 174 00:07:29,130 --> 00:07:32,270 >> Так вот мы начали инициализации я до 0. 175 00:07:32,270 --> 00:07:34,230 Мы установили я равна 0. 176 00:07:34,230 --> 00:07:37,780 Но потом я сделал эту ошибку здесь, говоря, что я меньше или 177 00:07:37,780 --> 00:07:38,820 равно 10. 178 00:07:38,820 --> 00:07:41,700 Но если вы думаете, что с помощью, если у меня начинаются с 0, а затем я иду 179 00:07:41,700 --> 00:07:46,410 до 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, на самом деле я собираюсь 180 00:07:46,410 --> 00:07:49,980 распечатайте 11 звезд на экран, потому что я выросла 181 00:07:49,980 --> 00:07:52,410 к и равно 10. 182 00:07:52,410 --> 00:07:55,090 Так легко исправить, вот тогда это что? 183 00:07:55,090 --> 00:07:56,070 АУДИТОРИЯ: [неразборчиво]. 184 00:07:56,070 --> 00:07:57,350 David J. Малан: просто измените его меньше. 185 00:07:57,350 --> 00:07:59,700 Если вы действительно хотите, вы можете сделать это. 186 00:07:59,700 --> 00:08:01,370 Но в целом, это неодобрительно. 187 00:08:01,370 --> 00:08:04,020 И так начинаем считать от 0 лишь то вы должны 188 00:08:04,020 --> 00:08:05,510 Обычно привыкнуть. 189 00:08:05,510 --> 00:08:07,810 Теперь, что вся эта конструкция сама по себе? 190 00:08:07,810 --> 00:08:10,640 Эта линия 15 demarks цикла. 191 00:08:10,640 --> 00:08:12,510 Так, не является функцией. 192 00:08:12,510 --> 00:08:13,640 Это просто заявление. 193 00:08:13,640 --> 00:08:16,180 Это циклической конструкцией, как мы видели в Scratch. 194 00:08:16,180 --> 00:08:17,600 И она состоит из трех частей. 195 00:08:17,600 --> 00:08:19,740 Обратите внимание, что это первая часть, чтобы 196 00:08:19,740 --> 00:08:21,350 Слева от точки с запятой. 197 00:08:21,350 --> 00:08:24,200 Там в средней части между двумя точками с запятой. 198 00:08:24,200 --> 00:08:26,250 А тут еще правая часть справа 199 00:08:26,250 --> 00:08:27,640 второй запятой. 200 00:08:27,640 --> 00:08:31,822 Теперь, первая из этих что делает? 201 00:08:31,822 --> 00:08:33,679 АУДИТОРИЯ: [неразборчиво]. 202 00:08:33,679 --> 00:08:34,270 David J. Малан: Back туда? 203 00:08:34,270 --> 00:08:34,816 Да? 204 00:08:34,816 --> 00:08:35,980 АУДИТОРИЯ: инициализация. 205 00:08:35,980 --> 00:08:36,850 >> David J. Малан: инициализация. 206 00:08:36,850 --> 00:08:37,840 Так что же это значит? 207 00:08:37,840 --> 00:08:40,690 Мы объявили переменную я. 208 00:08:40,690 --> 00:08:43,840 Это типа INT, потому что я указал Int я. 209 00:08:43,840 --> 00:08:46,470 И я инициализации я со значением 0. 210 00:08:46,470 --> 00:08:47,730 Так что же это на самом деле говорил? 211 00:08:47,730 --> 00:08:50,680 Это фактически говорит на компьютер Эй, дай мне достаточно 212 00:08:50,680 --> 00:08:53,660 памяти, достаточный объем оперативной памяти, чтобы соответствовать ряду, а затем положить 213 00:08:53,660 --> 00:08:56,130 номер 0 в том, что кусок памяти. 214 00:08:56,130 --> 00:08:59,100 И как в сторону, насколько велика Int обычно, по крайней мере внутри 215 00:08:59,100 --> 00:09:00,280 из прибора? 216 00:09:00,280 --> 00:09:01,000 АУДИТОРИЯ: 32 бит. 217 00:09:01,000 --> 00:09:01,670 David J. Малан: 32 бит. 218 00:09:01,670 --> 00:09:04,890 Значит, мне 32 бит, иначе известный как 4 байта, 219 00:09:04,890 --> 00:09:07,250 и поместить значение 0 в нем, что довольно легко, потому что 220 00:09:07,250 --> 00:09:09,110 Это просто означает, установить все биты в 0. 221 00:09:09,110 --> 00:09:11,690 >> Так вот, вторая часть здесь является состояние. 222 00:09:11,690 --> 00:09:14,590 И состояние, как следует из названия, является то, что проверено 223 00:09:14,590 --> 00:09:18,100 снова и снова, и снова, будет ли это правда или ложь. 224 00:09:18,100 --> 00:09:21,410 Так что это просто говорю, выполните следующие строки кода - 225 00:09:21,410 --> 00:09:23,950 а именно строка 16, потому что это единственный отступом 226 00:09:23,950 --> 00:09:24,820 внизу - 227 00:09:24,820 --> 00:09:26,980 Пока я меньше 10. 228 00:09:26,980 --> 00:09:30,520 И после каждой итерации этого цикла, сделайте 229 00:09:30,520 --> 00:09:33,840 приращение, которое в данном случае я + +. 230 00:09:33,840 --> 00:09:35,580 Теперь, она не должна быть я + +. 231 00:09:35,580 --> 00:09:37,610 Это может быть я -. 232 00:09:37,610 --> 00:09:39,860 Но если бы я сделал это, то, что поведение собирается 233 00:09:39,860 --> 00:09:41,370 чтобы быть эта программа? 234 00:09:41,370 --> 00:09:42,290 АУДИТОРИЯ: Это будет бесконечный цикл. 235 00:09:42,290 --> 00:09:44,060 David J. Малан: Это будет своего рода бесконечный цикл, 236 00:09:44,060 --> 00:09:47,720 если нам повезет после негативного 2 млрд или около того. 237 00:09:47,720 --> 00:09:51,320 Может быть, все будет обернуть вокруг, просто по своей природе конечной 238 00:09:51,320 --> 00:09:53,930 число битов, которые мы выделили для внутр. 239 00:09:53,930 --> 00:09:56,270 Но это, конечно, собираюсь повторять гораздо больше, чем 10 и 240 00:09:56,270 --> 00:09:58,630 конечно, более чем в 11 раз здесь. 241 00:09:58,630 --> 00:10:02,240 >> А теперь, как и в сторону, понимаешь, что я + +, и я - 242 00:10:02,240 --> 00:10:04,420 на самом деле просто синтаксический сахар. 243 00:10:04,420 --> 00:10:07,210 Это просто сокращенная запись для того, что немного больше 244 00:10:07,210 --> 00:10:08,720 явно записать следующим образом: 245 00:10:08,720 --> 00:10:11,200 I = I + 1. 246 00:10:11,200 --> 00:10:13,460 То есть идентичные я + +. 247 00:10:13,460 --> 00:10:15,860 Это просто какая-то выглядит красивее сказать, что я + +. 248 00:10:15,860 --> 00:10:17,490 Это более лаконичным, более читабельным. 249 00:10:17,490 --> 00:10:19,030 И поэтому большинство людей делают это вместо этого. 250 00:10:19,030 --> 00:10:21,840 Но это идентичных функционально 251 00:10:21,840 --> 00:10:22,900 то, что мы только что видели. 252 00:10:22,900 --> 00:10:27,770 Короче говоря, быстрых решений здесь просто сказать, я итерация 253 00:10:27,770 --> 00:10:30,690 от 0 вплоть до менее чем 10. 254 00:10:30,690 --> 00:10:32,700 И тогда мы действительно получим 10 звезд. 255 00:10:32,700 --> 00:10:33,430 >> Так давайте попробуем это. 256 00:10:33,430 --> 00:10:35,310 Позвольте мне открыть терминал в нижней части. 257 00:10:35,310 --> 00:10:37,420 Позвольте мне перейти в каталог, что это дюйма 258 00:10:37,420 --> 00:10:40,030 И я собираюсь собрать его вручную с помощью Clang на данный момент. 259 00:10:40,030 --> 00:10:44,880 И я собираюсь собрать это как buggy1.c, Enter. 260 00:10:44,880 --> 00:10:50,280 А теперь buggy1, почему нет такого файла или каталога 261 00:10:50,280 --> 00:10:52,026 buggy1 называется? 262 00:10:52,026 --> 00:10:53,850 АУДИТОРИЯ: [неразборчиво]. 263 00:10:53,850 --> 00:10:54,240 David J. Малан: Да. 264 00:10:54,240 --> 00:10:55,420 Так что это на самом деле называется a.out. 265 00:10:55,420 --> 00:10:57,480 Так Напомним если вы просто запустите Clang, где Clang является 266 00:10:57,480 --> 00:11:00,420 компилятор, а не указать имя, которое вы хотите 267 00:11:00,420 --> 00:11:03,550 дать вашей программы, это будет по умолчанию a.out. 268 00:11:03,550 --> 00:11:05,030 Так ведь если я Ls - 269 00:11:05,030 --> 00:11:05,510 упс. 270 00:11:05,510 --> 00:11:07,680 И я didn't - черно-белый вопроса некоторые из 271 00:11:07,680 --> 00:11:08,840 Вы сталкивались была исправлена. 272 00:11:08,840 --> 00:11:10,670 Но позвольте мне сделать это. 273 00:11:10,670 --> 00:11:14,570 Там у нас есть a.out на левой стороне. 274 00:11:14,570 --> 00:11:17,360 Поэтому мы должны работать a.out вместо buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Итак, позвольте мне идти вперед и делать это. 276 00:11:19,140 --> 00:11:22,840 . / A.out, Enter. 277 00:11:22,840 --> 00:11:26,160 И я, видимо, не делать? 278 00:11:26,160 --> 00:11:26,620 АУДИТОРИЯ: Сохранить. 279 00:11:26,620 --> 00:11:27,390 David J. Малан: Спасите мою файл. 280 00:11:27,390 --> 00:11:31,520 Так что легко решается, нажав Control S, или собирается 281 00:11:31,520 --> 00:11:33,450 Файл, Сохранить как и в большинстве программ. 282 00:11:33,450 --> 00:11:36,360 Отпусти меня сюда, очистить экран, запустите его снова. 283 00:11:36,360 --> 00:11:37,960 И есть еще ошибка. 284 00:11:37,960 --> 00:11:41,618 Так что же происходит - 285 00:11:41,618 --> 00:11:42,980 АУДИТОРИЯ: Вы не компилировать. 286 00:11:42,980 --> 00:11:44,040 David J. Малан: А, хорошо. 287 00:11:44,040 --> 00:11:45,010 Я не компиляции. 288 00:11:45,010 --> 00:11:47,250 Как идиот, я смотрю на код, чтобы посмотреть, что случилось. 289 00:11:47,250 --> 00:11:51,275 Таким образом, лязг buggy1.c, теперь a.out. 290 00:11:51,275 --> 00:11:52,640 И уф, сохранены. 291 00:11:52,640 --> 00:11:55,090 >> Так это выглядит немного уродливо, потому что нет новой линии 292 00:11:55,090 --> 00:11:55,970 в любом месте программы. 293 00:11:55,970 --> 00:11:57,390 Но опять же, это только эстетическая деталь. 294 00:11:57,390 --> 00:11:59,430 И по крайней мере, если считать те, мы должны 295 00:11:59,430 --> 00:12:01,160 теперь видим 10 таких звезд. 296 00:12:01,160 --> 00:12:03,260 Ну, что эта вторая разминка, например? 297 00:12:03,260 --> 00:12:07,750 Таким образом, в buggy2, я утверждаю, что эта версия тоже будет печатать 298 00:12:07,750 --> 00:12:10,110 10 звезд, по одному на строку. 299 00:12:10,110 --> 00:12:12,340 Поэтому в этот раз, у меня есть символ новой строки, просто чтобы убедиться, 300 00:12:12,340 --> 00:12:13,520 вещи немного красивее. 301 00:12:13,520 --> 00:12:15,410 Но вместо того, что я получаю это. 302 00:12:15,410 --> 00:12:19,590 Итак, позвольте мне сделать лязг buggy2.c, Enter. 303 00:12:19,590 --> 00:12:21,790 Теперь он вновь призвал a.out. 304 00:12:21,790 --> 00:12:23,130 Enter. 305 00:12:23,130 --> 00:12:26,900 Я вижу только одну новую линию, только самая последняя новая линия, которая 306 00:12:26,900 --> 00:12:29,370 перемещает мое приглашение на следующую строку. 307 00:12:29,370 --> 00:12:32,660 И все же ясно я печатью *, то новая линия, 308 00:12:32,660 --> 00:12:33,990 *, То новая строка. 309 00:12:33,990 --> 00:12:35,490 Но то, что ошибка здесь? 310 00:12:35,490 --> 00:12:35,974 Да? 311 00:12:35,974 --> 00:12:37,224 АУДИТОРИЯ: [неразборчиво]. 312 00:12:39,850 --> 00:12:40,470 >> David J. Малан: Совершенно верно. 313 00:12:40,470 --> 00:12:44,110 Таким образом, в отличие от некоторых языков, как Python, где отступы 314 00:12:44,110 --> 00:12:46,030 на самом деле имеет функциональное значение, в 315 00:12:46,030 --> 00:12:47,150 язык, как C - 316 00:12:47,150 --> 00:12:49,140 Как мы увидим, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 отступ на самом деле просто для пользы людей. 318 00:12:51,940 --> 00:12:55,690 Поэтому тот факт, что я красная строка 16 и 17 отлично выглядит, 319 00:12:55,690 --> 00:12:57,530 но он не имеет функциональное значение здесь. 320 00:12:57,530 --> 00:13:00,700 Если я хочу обе линии для выполнения как часть для 321 00:13:00,700 --> 00:13:05,140 петля, то я должен вложить их в фигурные скобки, делая это. 322 00:13:05,140 --> 00:13:08,540 Вы можете только сократить этот угол и опустить фигурные скобки, если 323 00:13:08,540 --> 00:13:10,036 в чем дело? 324 00:13:10,036 --> 00:13:10,410 АУДИТОРИЯ: Только одна строка. 325 00:13:10,410 --> 00:13:11,130 David J. Малан: Только одна строка. 326 00:13:11,130 --> 00:13:15,280 Вот только вид хороший вид синтаксиса подробно, чтобы 327 00:13:15,280 --> 00:13:17,900 Вы не тратите время на написание три линии, две из которых являются 328 00:13:17,900 --> 00:13:20,040 фигурные скобки, лишь бы написать ни одной строки кода. 329 00:13:20,040 --> 00:13:21,650 Но если у вас две или больше линий, мы 330 00:13:21,650 --> 00:13:22,860 действительно нужно это сделать. 331 00:13:22,860 --> 00:13:24,210 >> Так что теперь позвольте мне сохранить это. 332 00:13:24,210 --> 00:13:27,140 Позвольте мне идти вперед и повторно запустить Clang. 333 00:13:27,140 --> 00:13:31,375 Тогда позвольте мне повторно a.out, и теперь я получаю их по одному на строку. 334 00:13:31,375 --> 00:13:33,670 Теперь, a.out снова это своего рода немой имя для программы. 335 00:13:33,670 --> 00:13:37,500 Как я могу сказать Clang на самом деле дать мне имя файла 336 00:13:37,500 --> 00:13:39,820 , что более удобно, как buggy2 себя? 337 00:13:43,200 --> 00:13:44,466 Еще немного яснее? 338 00:13:44,466 --> 00:13:45,220 АУДИТОРИЯ: [неразборчиво]. 339 00:13:45,220 --> 00:13:47,810 David J. Малан: ОК, так что я могу на самом деле взять очень 340 00:13:47,810 --> 00:13:51,000 удобный ярлык и просто написать сделать buggy2. 341 00:13:51,000 --> 00:13:53,840 Я не уточняют. C в этом случае, и нажмите Enter. 342 00:13:53,840 --> 00:13:58,530 И то, что делает делает, он компилирует buggy2.c для меня 343 00:13:58,530 --> 00:14:00,260 Clang просят это сделать. 344 00:14:00,260 --> 00:14:05,100 В частности, он называет Clang, он работает Clang использовании намного больше, 345 00:14:05,100 --> 00:14:08,540 Аргументы командной строки или переключатели, чем я на самом деле нужно. 346 00:14:08,540 --> 00:14:11,270 В свое время мы вернемся к тому, что все эти различные 347 00:14:11,270 --> 00:14:13,810 загадочные выражения через дефис означает. 348 00:14:13,810 --> 00:14:16,910 Но сейчас, вот только что спас меня от труда 349 00:14:16,910 --> 00:14:19,600 того, чтобы помнить и того, чтобы вводить все эти 350 00:14:19,600 --> 00:14:21,150 различные дефис выражений. 351 00:14:21,150 --> 00:14:23,240 И верх в конечном итоге и является 352 00:14:23,240 --> 00:14:25,900 что теперь у меня есть buggy2. 353 00:14:25,900 --> 00:14:27,480 Если я хочу сделать это вручную, хотя, я 354 00:14:27,480 --> 00:14:28,775 может вместо этого - 355 00:14:28,775 --> 00:14:34,110 лязг-о buggy2, а затем buggy2.c. 356 00:14:34,110 --> 00:14:37,980 И это будет так же дать мне файл с именем buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Короче говоря, Clang это компилятор. 358 00:14:39,710 --> 00:14:43,080 Сделать это просто удобный инструмент, который мы будем использовать более 359 00:14:43,080 --> 00:14:44,420 и больше, потому что она только начинает 360 00:14:44,420 --> 00:14:47,330 упростить вещи для нас. 361 00:14:47,330 --> 00:14:49,430 И мы возвращаем 0, наконец. 362 00:14:49,430 --> 00:14:51,890 На данный момент, только потому, что, но мы начнем дразнят, что часть 363 00:14:51,890 --> 00:14:52,930 Сегодня и в среду. 364 00:14:52,930 --> 00:14:55,560 Любые вопросы по любой из этого? 365 00:14:55,560 --> 00:14:56,450 Да? 366 00:14:56,450 --> 00:14:58,234 АУДИТОРИЯ: [неразборчиво] 367 00:14:58,234 --> 00:15:00,020 Ls в кавычках там? 368 00:15:00,020 --> 00:15:01,710 David J. Малан: OK. 369 00:15:01,710 --> 00:15:05,880 Когда я набрал Ls в кавычки, что было мне делать некоторые магии 370 00:15:05,880 --> 00:15:07,160 за кулисами, чтобы исправить ошибку. 371 00:15:07,160 --> 00:15:09,370 Я забыл, как мы говорили многие из вас на 372 00:15:09,370 --> 00:15:11,600 доски обсуждений делать - 373 00:15:11,600 --> 00:15:17,220 Мы сделаем это сейчас - Суда ням-у обновление appliance50. 374 00:15:17,220 --> 00:15:19,790 Ой, что это пишется справа. 375 00:15:19,790 --> 00:15:23,240 Таким образом, прибор, как операционная система. 376 00:15:23,240 --> 00:15:25,650 Это работает эта операционная система под названием Fedora. 377 00:15:25,650 --> 00:15:27,450 А теперь из-за моей медленное подключение к Интернету, у меня 378 00:15:27,450 --> 00:15:28,260 действительно обливали его. 379 00:15:28,260 --> 00:15:31,620 Так работает Суда обновление ням, как мы говорим вам, чтобы сделать в 380 00:15:31,620 --> 00:15:34,080 Проблема набора, по существу, как работает автоматическое обновление 381 00:15:34,080 --> 00:15:35,420 В Mac OS или Windows. 382 00:15:35,420 --> 00:15:37,280 И причина для выполнения этого в самом начале 383 00:15:37,280 --> 00:15:39,640 Проблема набора потому что, когда мы создали прибор, я 384 00:15:39,640 --> 00:15:42,480 перепутались, и я случайно сделал все Ваши программы выглядят 385 00:15:42,480 --> 00:15:45,210 черное на черном экране, который является, почему вы не видите их 386 00:15:45,210 --> 00:15:45,860 по умолчанию. 387 00:15:45,860 --> 00:15:48,020 Но последняя версия прибора фиксирует это. 388 00:15:48,020 --> 00:15:50,500 И я починю, что во время перерыва, когда я в Интернет 389 00:15:50,500 --> 00:15:51,280 подключение. 390 00:15:51,280 --> 00:15:54,630 >> Таким образом, котировки просто скрывает свою ошибку, очень осторожно, 391 00:15:54,630 --> 00:15:55,730 по-видимому. 392 00:15:55,730 --> 00:15:56,980 Другие вопросы? 393 00:15:59,750 --> 00:16:00,668 Да? 394 00:16:00,668 --> 00:16:02,012 АУДИТОРИЯ: Где сделать взялось? 395 00:16:02,012 --> 00:16:03,810 [Неразборчиво] 396 00:16:03,810 --> 00:16:04,280 David J. Малан: Хороший вопрос. 397 00:16:04,280 --> 00:16:05,460 Где сделать взялось? 398 00:16:05,460 --> 00:16:09,390 Это Linux программа, которая существует уже много лет, задолго 399 00:16:09,390 --> 00:16:10,570 Перед CS50. 400 00:16:10,570 --> 00:16:12,930 И он приходит с операционной системы, как Fedora. 401 00:16:12,930 --> 00:16:14,830 Он не приходит с CS50 библиотеки. 402 00:16:14,830 --> 00:16:17,560 На самом деле, единственное, что от CS50 библиотеки 403 00:16:17,560 --> 00:16:20,470 до сих пор, что мы видели, являются GetString, GetInt, все 404 00:16:20,470 --> 00:16:25,550 Получить эти функции, и слово строки, и некоторые 405 00:16:25,550 --> 00:16:26,575 степени, слово BOOL. 406 00:16:26,575 --> 00:16:29,180 Но мы будем дразнить, что, помимо, когда мы погрузимся в CS50 407 00:16:29,180 --> 00:16:30,580 сам прибор. 408 00:16:30,580 --> 00:16:32,820 >> Так что, да, еще один вопрос. 409 00:16:32,820 --> 00:16:36,636 АУДИТОРИЯ: Когда вы сказали сделать, а затем багги, каким образом 410 00:16:36,636 --> 00:16:39,980 компьютер знаю [неразборчиво]? 411 00:16:39,980 --> 00:16:40,520 David J. Малан: Хороший вопрос. 412 00:16:40,520 --> 00:16:43,830 Итак, когда вы просто запустите сделать buggy1 или сделать buggy2, как 413 00:16:43,830 --> 00:16:45,220 делает знаете? 414 00:16:45,220 --> 00:16:49,900 Таким образом, по умолчанию, если вы введете сделать buggy1, сделать вид для 415 00:16:49,900 --> 00:16:52,330 Файл называется buggy1.c. 416 00:16:52,330 --> 00:16:55,570 И тогда она выполняет соответствующие команды Clang, 417 00:16:55,570 --> 00:17:00,380 тем самым перекрывая файл по умолчанию, выходной файл с именем a.out. 418 00:17:00,380 --> 00:17:03,670 В самом деле, если мы посмотрим на то, что сделать, что - 419 00:17:03,670 --> 00:17:04,839 Давайте выйти из этого. 420 00:17:04,839 --> 00:17:09,530 Если мы посмотрим на то, что делает на самом деле делают, делают buggy2, 421 00:17:09,530 --> 00:17:10,470 он уже в курсе. 422 00:17:10,470 --> 00:17:13,020 Итак, позвольте мне удалить RM команды, 423 00:17:13,020 --> 00:17:14,319 программы я написал раньше. 424 00:17:14,319 --> 00:17:17,319 Ввод Y-E-S, чтобы подтвердить, что я хочу, чтобы удалить его. 425 00:17:17,319 --> 00:17:20,480 Если я сейчас делаем, обратите внимание, что в этой очень длинной линии, 426 00:17:20,480 --> 00:17:22,980 есть это последняя вещь здесь,-о buggy2. 427 00:17:22,980 --> 00:17:26,959 Все делают это делает, кстати, что аргумент, так сказать, 428 00:17:26,959 --> 00:17:29,665 Clang, так что я не придется вводить его себе. 429 00:17:29,665 --> 00:17:32,660 >> Ладно, пару быстрых административных 430 00:17:32,660 --> 00:17:33,470 объявлениях. 431 00:17:33,470 --> 00:17:36,940 Таким образом, для разделов, которые официально начались предстоящий 432 00:17:36,940 --> 00:17:38,970 Воскресенье, вы всегда хотите принести, если 433 00:17:38,970 --> 00:17:40,120 у вас есть, ноутбук. 434 00:17:40,120 --> 00:17:42,570 Если у вас нет ноутбука, не дотянуться до меня 435 00:17:42,570 --> 00:17:43,580 падение мне письмо. 436 00:17:43,580 --> 00:17:44,810 И мы будем выяснить рабочего процесса. 437 00:17:44,810 --> 00:17:47,100 Что вообще вы найдете в разделе является то, что они являются частью 438 00:17:47,100 --> 00:17:48,770 концептуальных, часть практический. 439 00:17:48,770 --> 00:17:52,190 Мы специально использовать часть вопросов, часть из 440 00:17:52,190 --> 00:17:54,110 Проблема неделе набора, чтобы пройти через некоторые из 441 00:17:54,110 --> 00:17:55,820 концептуального материала лекции. 442 00:17:55,820 --> 00:17:57,480 И это все, что в текущем наборе проблемы. 443 00:17:57,480 --> 00:18:00,010 И мы также погрузиться в некоторых практических действиях, иногда 444 00:18:00,010 --> 00:18:02,190 которые должны будут быть представлены, иногда 445 00:18:02,190 --> 00:18:02,830 которая не будет. 446 00:18:02,830 --> 00:18:04,630 Например, это первая неделя, они предназначены как 447 00:18:04,630 --> 00:18:05,780 разминку упражнения. 448 00:18:05,780 --> 00:18:07,800 И вы увидите, что эти проблемы действительно так. 449 00:18:07,800 --> 00:18:10,220 Они предназначены, чтобы быть довольно маленьким, но не обязательно 450 00:18:10,220 --> 00:18:13,100 тривиальных программ, чтобы написать, что не обязательно 451 00:18:13,100 --> 00:18:16,230 захватывающих и сами по себе, но хорошие возможности для 452 00:18:16,230 --> 00:18:19,620 практиковаться с синтаксисом, с новыми функциями, в комфорте 453 00:18:19,620 --> 00:18:21,900 раздел, где у вас есть несколько своих одноклассников представить в виде 454 00:18:21,900 --> 00:18:22,870 а также ваши TF. 455 00:18:22,870 --> 00:18:26,210 >> И что мы будем делать в течение долгого времени, это использовать инструмент под названием CS50 пространства, 456 00:18:26,210 --> 00:18:28,940 которой вместо простого использования CS50 Appliance, вы 457 00:18:28,940 --> 00:18:32,450 Вместо перехода на веб-страницу в браузере, где вы сможете 458 00:18:32,450 --> 00:18:35,610 писать код, в окне браузера при разделе. 459 00:18:35,610 --> 00:18:38,240 И потом, если вы выберете, ваш парень обучения можно показать, 460 00:18:38,240 --> 00:18:40,980 то, что это вы печатаете на экране в Вашем браузере 461 00:18:40,980 --> 00:18:43,930 окна на фронте класса, будь то анонимно или 462 00:18:43,930 --> 00:18:47,250 публично, так, чтобы он или она может пройти через с 463 00:18:47,250 --> 00:18:50,080 одноклассниками, что ты сделал хорошо, что вы не очень хорошо. 464 00:18:50,080 --> 00:18:52,750 И еще, будьте уверены, все это может быть красиво выдается. 465 00:18:52,750 --> 00:18:54,410 Но это будет хорошая возможность для гораздо более 466 00:18:54,410 --> 00:18:56,810 интерактивности, чем что-то вроде лекции позволяет. 467 00:18:56,810 --> 00:18:58,910 >> В то же время, мы будем иметь эти вещи называют супер 468 00:18:58,910 --> 00:19:01,610 разделам, которые не являются обязательными, но открыты для всех в 469 00:19:01,610 --> 00:19:04,030 класс, так что вы можете сделать это в совокупности для более 470 00:19:04,030 --> 00:19:05,190 Проблема установить один. 471 00:19:05,190 --> 00:19:06,010 Вот график. 472 00:19:06,010 --> 00:19:08,870 Это также размещена на домашней странице cs50.net. 473 00:19:08,870 --> 00:19:10,850 Обратите внимание, что там будет хакера конкретных 474 00:19:10,850 --> 00:19:12,430 завтрашний день. 475 00:19:12,430 --> 00:19:15,460 И мы будем снимать до сегодняшнего дня и одну завтра, и опубликовать эти 476 00:19:15,460 --> 00:19:16,720 Интернет в течение 24 часов. 477 00:19:16,720 --> 00:19:19,370 Так что, если вы не можете сделать любой из этих времен, чтобы не волноваться. 478 00:19:19,370 --> 00:19:22,720 И снова, расписание на форуме в cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> С точки зрения секционирования себя, вы должны были получить 480 00:19:25,350 --> 00:19:28,520 по электронной почте с инструкциями по перейдите на главную страницу курса, чтобы найти 481 00:19:28,520 --> 00:19:29,610 Ваши разделе. 482 00:19:29,610 --> 00:19:32,890 Если жизнь изменилась, и вы должны изменить свой раздел, 483 00:19:32,890 --> 00:19:33,560 не проблема. 484 00:19:33,560 --> 00:19:37,900 Вернитесь в тот же URL, cs50.net/section, единственное, 485 00:19:37,900 --> 00:19:40,090 и вы будете заполнить подобную форму, так что вы можете 486 00:19:40,090 --> 00:19:41,260 Затем дайте нам ваши предпочтения. 487 00:19:41,260 --> 00:19:43,360 И мы будем следовать до к концу недели о том, что мы можем 488 00:19:43,360 --> 00:19:44,240 разместить. 489 00:19:44,240 --> 00:19:49,530 На прошлой неделе, напомним, что мы предложили использовать Обсудить CS50, 490 00:19:49,530 --> 00:19:51,370 обсуждение курса инструмента, в лекции. 491 00:19:51,370 --> 00:19:53,680 Так что мы были на 40 вопросов, которые были заданы и 492 00:19:53,680 --> 00:19:54,720 ответил во время лекции. 493 00:19:54,720 --> 00:19:56,280 Так что, казалось, работало хорошо, поэтому мы будем продолжать 494 00:19:56,280 --> 00:19:57,180 пытается это сделать. 495 00:19:57,180 --> 00:19:59,600 Если во время лекции, вы не просто чувствовать себя комфортно повышение 496 00:19:59,600 --> 00:20:00,780 Вашу руку, не проблема. 497 00:20:00,780 --> 00:20:04,640 К cs50.net/discuss, размещать там, и один из наших обучение 498 00:20:04,640 --> 00:20:07,270 стипендиаты будут либо ответить на него в электронном виде или повысить их 499 00:20:07,270 --> 00:20:10,620 руки от вашего имени анонимно, чтобы спросить, в зависимости 500 00:20:10,620 --> 00:20:12,470 от характера вопроса. 501 00:20:12,470 --> 00:20:15,000 И с точки зрения обратной связи, как правило, psets будет 502 00:20:15,000 --> 00:20:16,760 возвращены в течение недели. 503 00:20:16,760 --> 00:20:19,080 Потому что это занимает некоторое время для секций для достижения 504 00:20:19,080 --> 00:20:22,430 равновесии, первые PSET, 0 и 1, будет немного 505 00:20:22,430 --> 00:20:24,130 отложено, поскольку вещи успокоиться. 506 00:20:24,130 --> 00:20:27,130 Но следите за обновлениями, что в ближайшие недели. 507 00:20:27,130 --> 00:20:29,750 >> Ладно, так что позвольте мне поставить на мой серьезный 508 00:20:29,750 --> 00:20:31,040 Голос на мгновение. 509 00:20:31,040 --> 00:20:32,690 Так что это на самом деле интересный климат, чтобы быть 510 00:20:32,690 --> 00:20:35,210 имеющие эту дискуссию, что со всеми другими вещами 511 00:20:35,210 --> 00:20:37,310 происходит на территории кампуса, относящихся к ним. 512 00:20:37,310 --> 00:20:40,220 Но CS50, безусловно, были свои истории данного 513 00:20:40,220 --> 00:20:43,360 темы, в той мере, каждый год, это, конечно, для многих 514 00:20:43,360 --> 00:20:46,910 лет, Ad-платы примерно на 3% в классе. 515 00:20:46,910 --> 00:20:51,620 Это самый последний год, 2011, CS50 Ad-сели 35 студентов. 516 00:20:51,620 --> 00:20:54,120 Это не так, я думаю, из-за отсутствия ясности. 517 00:20:54,120 --> 00:20:56,760 Поймите, что в программе курса, есть страницы 518 00:20:56,760 --> 00:20:59,020 заявление, объясняющее, где линии. 519 00:20:59,020 --> 00:21:01,350 В том же заявлении повторяется на каждом из 520 00:21:01,350 --> 00:21:03,070 Проблема задает на первой странице. 521 00:21:03,070 --> 00:21:05,760 >> Поэтому я говорю об этом сегодня на самом деле просто сделать 522 00:21:05,760 --> 00:21:07,030 Люди помнить об этом. 523 00:21:07,030 --> 00:21:08,080 И мы попробовали разные вещи. 524 00:21:08,080 --> 00:21:10,630 И то, что я думал, что мы делаем сегодня просто воспользоваться моментом, чтобы 525 00:21:10,630 --> 00:21:13,830 реально взглянуть на некоторые из прошлых дел, которые придумали. 526 00:21:13,830 --> 00:21:16,160 Вместо того, чтобы держать их как грязные маленькие секреты, на самом деле 527 00:21:16,160 --> 00:21:19,170 Отметим, что студенты сделали и как мы обнаружили 528 00:21:19,170 --> 00:21:21,630 он и в самом деле, что всеобъемлющая мотивации для 529 00:21:21,630 --> 00:21:23,950 даже этот разговор. 530 00:21:23,950 --> 00:21:27,060 Таким образом, с учетом сказанного, линии по существу это - 531 00:21:27,060 --> 00:21:29,200 Согласно программе, вы приветствуется, рекомендуется, чтобы 532 00:21:29,200 --> 00:21:30,210 поговорить с одноклассниками. 533 00:21:30,210 --> 00:21:31,910 Вот и весь смысл наличия этих совместных 534 00:21:31,910 --> 00:21:34,470 Приемные часы в Annenberg и поощрение людей к 535 00:21:34,470 --> 00:21:35,755 Окончательный проект для совместной работы. 536 00:21:35,755 --> 00:21:38,590 Но линия, когда приходит время, чтобы действительно написать 537 00:21:38,590 --> 00:21:39,790 ваше окончательное решение. 538 00:21:39,790 --> 00:21:42,590 Говоря на английском, совершенно нормально, выступая в псевдо-код, 539 00:21:42,590 --> 00:21:43,400 совершенно нормально. 540 00:21:43,400 --> 00:21:46,340 Отправка вашего одноклассника PSET, позволяя им выглядеть более 541 00:21:46,340 --> 00:21:48,610 Экран, как руки продолжают печатать, 542 00:21:48,610 --> 00:21:50,110 на линии, а также. 543 00:21:50,110 --> 00:21:52,250 Вы посмотрите на программу для конкретной линии. 544 00:21:52,250 --> 00:21:55,850 >> Но только, чтобы нарисовать картину того, как это, к сожалению, 545 00:21:55,850 --> 00:21:58,370 реальность, понимают, что есть сайты, которые там 546 00:21:58,370 --> 00:22:01,490 имеют решения этого класса и много других классов. 547 00:22:01,490 --> 00:22:04,940 Дело в том, что вы или около 3% из вас знают, что это такое 548 00:22:04,940 --> 00:22:07,240 означает, что мы знаем, что это существует. 549 00:22:07,240 --> 00:22:09,340 Дело в том, что есть сайты, как эта, где вы 550 00:22:09,340 --> 00:22:11,540 может платить кому-то, чтобы на самом деле сделать ваш множества проблем - это было 551 00:22:11,540 --> 00:22:13,450 реальный случай, который придумал в прошлом году. 552 00:22:13,450 --> 00:22:15,790 Это веб-сайт под odesk.com. 553 00:22:15,790 --> 00:22:20,090 И Тиму было имя человека, кто был на объявление 554 00:22:20,090 --> 00:22:24,580 по этому сайту и спросил кого-то, чтобы сделать его PSET 7 в 555 00:22:24,580 --> 00:22:25,570 данном конкретном случае. 556 00:22:25,570 --> 00:22:28,350 Ну, odesk.com очень Google-возможности, и мы тоже 557 00:22:28,350 --> 00:22:30,310 очень хорошо на поиск в Google. 558 00:22:30,310 --> 00:22:32,360 Здесь тоже есть сайты - и это одна довольно 559 00:22:32,360 --> 00:22:34,234 зверский, честно говоря. 560 00:22:34,234 --> 00:22:38,050 [Смех] 561 00:22:38,050 --> 00:22:39,610 David J. Малан: Самое смешное об этом сайте, если 562 00:22:39,610 --> 00:22:41,970 Вы читали о странице, они говорят о своих корпоративных 563 00:22:41,970 --> 00:22:44,390 культура и как обслуживание клиентов является их номер один 564 00:22:44,390 --> 00:22:46,190 приоритет, чтобы убедиться, что ваши задания получите 565 00:22:46,190 --> 00:22:47,890 Оказалось вовремя. 566 00:22:47,890 --> 00:22:50,580 >> Но со всей серьезностью, опять же, тот факт, что эти сайты 567 00:22:50,580 --> 00:22:52,910 существует, понимаете, мы тоже осведомлены о 568 00:22:52,910 --> 00:22:53,730 эти виды сайтов. 569 00:22:53,730 --> 00:22:55,890 И чтобы дать вам ощущение того, что это в целом образует 570 00:22:55,890 --> 00:22:58,570 берет, мы вообще не имеют большой скандалов, где люди 571 00:22:58,570 --> 00:23:01,080 сотрудничают в любой массовый, а скорее 572 00:23:01,080 --> 00:23:04,540 именно эти ночные минуты слабости, когда у вас так 573 00:23:04,540 --> 00:23:07,550 многое предстоит сделать, это 4:00 утра, вы исчерпаны, и вы 574 00:23:07,550 --> 00:23:09,770 думать про себя, ну, позвольте мне взглянуть на мое 575 00:23:09,770 --> 00:23:11,770 соседа или код моего друга или тому подобное. 576 00:23:11,770 --> 00:23:14,800 И проявления этого, к сожалению включать Студенческая 577 00:23:14,800 --> 00:23:17,640 Представлении что-то вроде этого и представление студенческих B 578 00:23:17,640 --> 00:23:20,370 что-то вроде этого, что, безусловно, в компьютере 579 00:23:20,370 --> 00:23:23,830 наука класса, удивительно легко для компьютерных ученых 580 00:23:23,830 --> 00:23:25,690 обнаружить с помощью программного обеспечения. 581 00:23:25,690 --> 00:23:28,410 Это еще одна общая парадигма, где вы рода 582 00:23:28,410 --> 00:23:31,010 работал рядом с кем-то, может быть, говорят в 583 00:23:31,010 --> 00:23:32,360 Английский, просто отлично, псевдокод. 584 00:23:32,360 --> 00:23:35,080 Но потом приходит время, чтобы действительно представить, и psets 585 00:23:35,080 --> 00:23:37,910 просто получить обменялись по электронной почте или Dropbox или тому подобное. 586 00:23:37,910 --> 00:23:41,120 Но в попытке сделать его менее очевидно, что это 587 00:23:41,120 --> 00:23:44,830 что случилось, то это то, что представлено. 588 00:23:44,830 --> 00:23:47,880 Это тоже не сработал до хорошо написанные куски 589 00:23:47,880 --> 00:23:50,360 программное обеспечение, как мы есть на самом деле обнаружения 590 00:23:50,360 --> 00:23:51,280 такие вещи. 591 00:23:51,280 --> 00:23:53,760 И в самом деле, что мы делаем, это запустить программное обеспечение, которое сравнивает все 592 00:23:53,760 --> 00:23:55,540 В этом году в представлениях против всех прошлом году 593 00:23:55,540 --> 00:23:57,380 представлений, против всего, мы нашли на 594 00:23:57,380 --> 00:24:00,060 Интернет, против каждой работы сайта там. 595 00:24:00,060 --> 00:24:01,710 Это все очень автоматизировано. 596 00:24:01,710 --> 00:24:05,665 И так мы делаем это действительно большая справедливости по отношению к 97%, которые 597 00:24:05,665 --> 00:24:07,760 действительно работают их задниц в этой и в других 598 00:24:07,760 --> 00:24:11,530 Классы и положить во всех этих усилий, так что работа 599 00:24:11,530 --> 00:24:13,030 в конечном счете они представляют, является их собственным. 600 00:24:13,030 --> 00:24:14,220 И я могу пойти на целую вечность. 601 00:24:14,220 --> 00:24:16,030 >> Это всего лишь несколько случаев в прошлом году. 602 00:24:16,030 --> 00:24:19,350 Несколько студентов представили эти файлы одинаково для PSET 2, 603 00:24:19,350 --> 00:24:22,460 PSET 3, PSET 4, PSET 5, PSET 6, PSET 9. 604 00:24:22,460 --> 00:24:26,360 В этом случае, это был тест 0 и в прошлом году, когда два 605 00:24:26,360 --> 00:24:29,570 Студенты представили одинаково это предложение среди многих 606 00:24:29,570 --> 00:24:32,210 другие ", запрос типа -" точка, точка, точка. 607 00:24:32,210 --> 00:24:34,530 Таким образом, даже в классе из 600 ли мы обнаружить эту 608 00:24:34,530 --> 00:24:36,310 на представленных викторины. 609 00:24:36,310 --> 00:24:39,080 Короче говоря, это - честно говоря, я очень не хочу иметь такую 610 00:24:39,080 --> 00:24:41,300 разговор - но это действительно целенаправленные усилия 611 00:24:41,300 --> 00:24:43,540 В этом году, чтобы попытаться снизить эту цифру. 612 00:24:43,540 --> 00:24:45,650 Потому что даже если мы говорим такие вещи каждый 613 00:24:45,650 --> 00:24:48,100 год, я думаю, что реальность в том, остановился на нем в течение нескольких 614 00:24:48,100 --> 00:24:50,800 Еще секунд чем обычно, и на самом деле просто указывая 615 00:24:50,800 --> 00:24:53,600 что то, что может показаться, что ль, не такая большая проблема, по крайней мере, 616 00:24:53,600 --> 00:24:56,390 вспоминаю этот момент, как в справедливости по отношению к 617 00:24:56,390 --> 00:25:00,100 себя и своих одноклассников здесь. 618 00:25:00,100 --> 00:25:02,480 Так что если вы когда-нибудь у вас возникли вопросы о том, где линия 619 00:25:02,480 --> 00:25:04,290 это, пожалуйста, просто выйти на меня лично. 620 00:25:04,290 --> 00:25:07,190 Но ответ всегда, полностью подчеркнули в 621 00:25:07,190 --> 00:25:09,090 последнюю минуту, денежные средства в конце дня. 622 00:25:09,090 --> 00:25:11,080 Или, если это дело не имея никакого конца дней, 623 00:25:11,080 --> 00:25:12,900 честно говоря, напишите мне лично. 624 00:25:12,900 --> 00:25:14,110 Мы что-нибудь придумаем. 625 00:25:14,110 --> 00:25:17,480 Пожалуйста, не ставьте свое время здесь, в Гарварде в опасности. 626 00:25:17,480 --> 00:25:18,570 >> Теперь, я думал, что мы должны поднять настроение, поэтому я 627 00:25:18,570 --> 00:25:20,264 включить это как следующий слайд. 628 00:25:20,264 --> 00:25:22,770 [Смех] 629 00:25:22,770 --> 00:25:23,630 David J. Малан: Этот сайт был большим. 630 00:25:23,630 --> 00:25:24,820 Я на самом деле стало немного отвлекся. 631 00:25:24,820 --> 00:25:26,330 Там в это. 632 00:25:26,330 --> 00:25:29,590 А потом этот был удивительным. 633 00:25:29,590 --> 00:25:35,190 Ладно, думаю, что Котенок поздно вечером, когда делать 634 00:25:35,190 --> 00:25:36,040 эти решения. 635 00:25:36,040 --> 00:25:40,110 Ладно, вернуться к более приятным и менее серьезные вещи, как 636 00:25:40,110 --> 00:25:40,780 условиях. 637 00:25:40,780 --> 00:25:43,900 >> Хорошо, таким образом, мы кратко говорили об этом. 638 00:25:43,900 --> 00:25:46,080 Это то, что, наверное, хорошо знакомы с 639 00:25:46,080 --> 00:25:47,260 Мир Scratch. 640 00:25:47,260 --> 00:25:49,860 И в мире Scratch, у нас есть эта потребность иногда 641 00:25:49,860 --> 00:25:51,110 пойти сделать развилки. 642 00:25:51,110 --> 00:25:54,840 Либо сделать то или это, или это другая вещь здесь. 643 00:25:54,840 --> 00:25:58,990 И когда мы хотим это сделать, мы можем использовать в C сейчас, это, если 644 00:25:58,990 --> 00:26:00,860 еще построить. 645 00:26:00,860 --> 00:26:06,420 А то вот у нас есть логические выражения. 646 00:26:06,420 --> 00:26:09,260 Например, логические выражения здесь, мы можем или 647 00:26:09,260 --> 00:26:12,260 их вместе, в том смысле, что у нас есть это условие или 648 00:26:12,260 --> 00:26:13,200 это условие. 649 00:26:13,200 --> 00:26:15,100 Мы можем и их вместе, в том смысле, что мы хотим 650 00:26:15,100 --> 00:26:17,710 проверить это состояние и это условие. 651 00:26:17,710 --> 00:26:22,440 И здесь у нас есть переключатель заявление сейчас, что это не так 652 00:26:22,440 --> 00:26:26,040 синтаксически похожи на те виды условий, но 653 00:26:26,040 --> 00:26:30,160 позволяет нам делать эквивалент, если, иначе, если, иначе, если еще 654 00:26:30,160 --> 00:26:34,990 если и тому подобное просто перечисляя их индивидуальной 655 00:26:34,990 --> 00:26:36,670 от случая к случаю. 656 00:26:36,670 --> 00:26:38,370 Таким образом, мы увидели тех, кто в прошлый раз. 657 00:26:38,370 --> 00:26:40,430 И тогда мы начали касаясь вещей, как петли. 658 00:26:40,430 --> 00:26:42,070 Мы видели одну из этих мгновение назад. 659 00:26:42,070 --> 00:26:44,180 Но есть эти другие циклические конструкции. 660 00:26:44,180 --> 00:26:46,370 >> Например, это здесь. 661 00:26:46,370 --> 00:26:50,140 Так что пока (условие), сделать эту вещь снова и снова. 662 00:26:50,140 --> 00:26:53,070 Таким образом, принципиально, что, кажется, различных между этим 663 00:26:53,070 --> 00:26:55,760 цикл, и это в то время как петля здесь? 664 00:27:00,810 --> 00:27:05,045 Этот цикл, и это в то время как петля. 665 00:27:05,045 --> 00:27:07,840 Да? 666 00:27:07,840 --> 00:27:08,800 Что это? 667 00:27:08,800 --> 00:27:10,050 АУДИТОРИЯ: [неразборчиво]. 668 00:27:14,632 --> 00:27:15,120 David J. Малан: Хорошо. 669 00:27:15,120 --> 00:27:17,130 Таким образом, в то время как в цикле условие, там четко 670 00:27:17,130 --> 00:27:17,940 более синтаксиса. 671 00:27:17,940 --> 00:27:20,560 Там эта инициализации, там это обновление. 672 00:27:20,560 --> 00:27:23,820 В то время как цикл, там просто это условие. 673 00:27:23,820 --> 00:27:26,630 Поэтому кажется, что это немного урезанный по сравнению с для 674 00:27:26,630 --> 00:27:28,770 цикл, который означает, что если мы хотим иметь переменные, и мы хотим 675 00:27:28,770 --> 00:27:30,800 иметь приращение, мы на самом деле нужно 676 00:27:30,800 --> 00:27:32,500 этого сделать сами. 677 00:27:32,500 --> 00:27:34,420 >> Итак, позвольте мне идти вперед и открывать Gedit. 678 00:27:34,420 --> 00:27:36,320 Позвольте мне перейти на прибор. 679 00:27:36,320 --> 00:27:38,110 И давайте просто сделать быстрый маленький пример, что 680 00:27:38,110 --> 00:27:40,550 отличает одно из них от другого. 681 00:27:40,550 --> 00:27:42,490 А в глубине моего сознания здесь, я должен сказать одну вещь. 682 00:27:42,490 --> 00:27:44,120 Я специально упомянул имя Тима. 683 00:27:44,120 --> 00:27:47,740 Тим был на самом деле кто-то, что студент пытался найти, чтобы сделать 684 00:27:47,740 --> 00:27:48,680 домашнее задание для них. 685 00:27:48,680 --> 00:27:51,280 У нас не было Тиму в данном разделе. 686 00:27:51,280 --> 00:27:53,690 Так понимаю, чтобы мне не раскрыто студентом, это был не студент. 687 00:27:53,690 --> 00:27:55,720 Это был случайным человеком в интернете делать вещи 688 00:27:55,720 --> 00:27:57,180 по доверенности в прошлом году. 689 00:27:57,180 --> 00:27:58,670 Таким образом, мы видим, что, тоже. 690 00:27:58,670 --> 00:28:00,630 Поэтому в данном случае здесь, позвольте мне идти вперед и 691 00:28:00,630 --> 00:28:02,810 открывает новый файл. 692 00:28:02,810 --> 00:28:04,800 File, New. 693 00:28:04,800 --> 00:28:06,050 Это дает мне вкладке здесь. 694 00:28:06,050 --> 00:28:09,940 Позвольте мне идти вперед и сохранить его как loop.c. 695 00:28:09,940 --> 00:28:11,810 Позвольте мне пойти и нажмите кнопку Сохранить. 696 00:28:11,810 --> 00:28:15,340 А потом сюда, давайте идти вперед и начать писать 697 00:28:15,340 --> 00:28:16,605 # Включить . 698 00:28:19,116 --> 00:28:20,520 Позвольте мне изменить масштаб изображения 699 00:28:20,520 --> 00:28:23,410 Теперь мы будем делать Int основных (недействительными). 700 00:28:23,410 --> 00:28:30,020 Теперь позвольте мне идти вперед и делать для (INT = 0; I < 701 00:28:30,020 --> 00:28:33,480 ой, 10; я + +). 702 00:28:33,480 --> 00:28:36,620 А сейчас я собираюсь идти вперед и не печатать звезды, что я 703 00:28:36,620 --> 00:28:37,890 делали раньше. 704 00:28:37,890 --> 00:28:39,390 И тогда в конце этой программе, мы просто собираемся 705 00:28:39,390 --> 00:28:41,130 Печать на новую строку, просто так, что мои строки 706 00:28:41,130 --> 00:28:42,470 не выглядит грязным. 707 00:28:42,470 --> 00:28:45,170 возвращать 0. 708 00:28:45,170 --> 00:28:47,610 Казалось синтаксически правильные? 709 00:28:47,610 --> 00:28:48,040 До сих пор. 710 00:28:48,040 --> 00:28:48,560 Итак, давайте посмотрим. 711 00:28:48,560 --> 00:28:51,290 >> Итак, позвольте мне масштаб, перейдите в моем окне терминала. 712 00:28:51,290 --> 00:28:54,570 И позвольте мне идти вперед и запустить цикл, потому что я назвал эту 713 00:28:54,570 --> 00:28:55,690 вещь loop.c. 714 00:28:55,690 --> 00:28:56,780 Так что сделайте петлю. 715 00:28:56,780 --> 00:28:57,840 Кажется, для компиляции OK. 716 00:28:57,840 --> 00:29:00,210 Позвольте мне запустить цикл, и теперь Enter. 717 00:29:00,210 --> 00:29:01,820 И это, кажется, напечатанный 10 звезд. 718 00:29:01,820 --> 00:29:03,780 Так что давайте просто преобразовать это в то время как цикл и посмотреть, что 719 00:29:03,780 --> 00:29:05,220 виды вопросов, которые мы споткнуться. 720 00:29:05,220 --> 00:29:11,290 Таким образом, вместо этого, отпусти меня сюда и сказал, пока я есть 721 00:29:11,290 --> 00:29:12,760 меньше чем 10 - 722 00:29:12,760 --> 00:29:14,910 Позвольте мне избавиться от цикла. 723 00:29:14,910 --> 00:29:17,170 Итак, у нас есть несколько проблем уже. 724 00:29:17,170 --> 00:29:21,110 Таким образом, условия те же, но я явно не хватает 725 00:29:21,110 --> 00:29:21,680 инициализации. 726 00:29:21,680 --> 00:29:23,840 Мне не хватает приращения. 727 00:29:23,840 --> 00:29:28,020 Так что же компилятор вероятно, скажи мне, когда я пытаюсь 728 00:29:28,020 --> 00:29:29,170 скомпилировать эту программу? 729 00:29:29,170 --> 00:29:29,666 Да? 730 00:29:29,666 --> 00:29:31,154 АУДИТОРИЯ: [неразборчиво]. 731 00:29:31,154 --> 00:29:31,650 >> David J. Малан: Хорошо. 732 00:29:31,650 --> 00:29:34,180 Таким образом, он собирается сказать что-то вроде необъявленной - в этом 733 00:29:34,180 --> 00:29:35,280 случае, переменная я. 734 00:29:35,280 --> 00:29:37,980 И действительно, использование необъявленный идентификатор я. 735 00:29:37,980 --> 00:29:40,960 И это в отличие от языков, таких как PHP и 736 00:29:40,960 --> 00:29:43,120 Python и Ruby, с которой некоторые из вас могут быть знакомы, 737 00:29:43,120 --> 00:29:44,820 где вы можете просто какая-то начала использования переменных 738 00:29:44,820 --> 00:29:47,420 волей-неволей, а не придется беспокоиться об объявлении их 739 00:29:47,420 --> 00:29:48,560 явном всегда. 740 00:29:48,560 --> 00:29:51,770 В C и в языках, как Java и C + +, вы должны быть 741 00:29:51,770 --> 00:29:53,020 Супер явным. 742 00:29:53,020 --> 00:29:55,760 И если вы хотите переменной я, вы должны сказать мне, 743 00:29:55,760 --> 00:29:57,360 какие переменные он. 744 00:29:57,360 --> 00:29:59,360 Таким образом, мы будем иметь, чтобы исправить это следующим образом. 745 00:29:59,360 --> 00:30:05,510 Я собираюсь пойти вверх здесь и введите Int я, следовательно, 746 00:30:05,510 --> 00:30:07,860 Я объявил переменную я. 747 00:30:07,860 --> 00:30:09,180 Теперь, я пропустил один шаг. 748 00:30:09,180 --> 00:30:11,340 Я, очевидно, не инициализируются, но давайте посмотрим, что в 749 00:30:11,340 --> 00:30:13,650 мере делает Clang прекратить жаловаться. 750 00:30:13,650 --> 00:30:15,770 Итак, позвольте мне переделать эту программу. 751 00:30:15,770 --> 00:30:16,770 >> Ладно, сейчас это просто жаловаться 752 00:30:16,770 --> 00:30:17,870 по другой причине. 753 00:30:17,870 --> 00:30:21,130 "Переменная 'я' не инициализирована при использовании здесь". Ладно, 754 00:30:21,130 --> 00:30:22,340 это довольно явно. 755 00:30:22,340 --> 00:30:25,510 Initialized просто означает, положив ее равной ценности. 756 00:30:25,510 --> 00:30:30,820 И мы не сделали этого, поэтому позвольте мне попробовать равна 0. 757 00:30:30,820 --> 00:30:35,030 Теперь давайте попробуем это снова и снова запустить Clang. 758 00:30:35,030 --> 00:30:36,140 Составитель этого времени. 759 00:30:36,140 --> 00:30:37,210 И я собираюсь запустить его. 760 00:30:37,210 --> 00:30:43,120 Но большой старый бесконечный цикл, потому что я сделал 761 00:30:43,120 --> 00:30:45,530 инициализации, я сделал состояние, но я никогда не делал 762 00:30:45,530 --> 00:30:47,030 любое приращение. 763 00:30:47,030 --> 00:30:48,780 Так как же я могу сделать приращение? 764 00:30:48,780 --> 00:30:51,170 Ну, в то время как цикл, он чувствует, как я буду иметь 765 00:30:51,170 --> 00:30:54,180 сделать это внутри цикла, потому что так же, как первый 766 00:30:54,180 --> 00:30:56,570 неделю примеров делают циклических конструкций, как с 767 00:30:56,570 --> 00:30:59,040 носках и с собственным счета, мы должны были сделать 768 00:30:59,040 --> 00:31:01,550 что-то в самом конце, хотелось вернуться к следующей строке. 769 00:31:01,550 --> 00:31:05,040 Что делать, если я иду вперед и делаю это я + + здесь? 770 00:31:05,040 --> 00:31:06,030 Давайте даже не компиляции этого. 771 00:31:06,030 --> 00:31:06,890 Поймай меня уже. 772 00:31:06,890 --> 00:31:09,704 Что тут не так? 773 00:31:09,704 --> 00:31:10,690 АУДИТОРИЯ: [неразборчиво]. 774 00:31:10,690 --> 00:31:11,770 >> David J. Малан: Так что это определенно не Int. 775 00:31:11,770 --> 00:31:13,080 Это я. 776 00:31:13,080 --> 00:31:15,110 И фигурные скобки, как и прежде, 777 00:31:15,110 --> 00:31:16,800 отступ не достаточно. 778 00:31:16,800 --> 00:31:18,410 Так что теперь я эту конструкцию. 779 00:31:18,410 --> 00:31:21,780 Так что, хотя я меньше 10, распечатать звезды, 780 00:31:21,780 --> 00:31:23,220 Затем увеличиваем я. 781 00:31:23,220 --> 00:31:25,680 И то, как время цикла работ является то, что, как только вы нажмете 782 00:31:25,680 --> 00:31:29,630 конце цикла, который в данном случае выглядит как линия 10, 783 00:31:29,630 --> 00:31:32,880 он собирается вернуться в строке 6, в какой момент 784 00:31:32,880 --> 00:31:34,400 Условие будет еще раз проверено. 785 00:31:34,400 --> 00:31:37,500 И если я все еще меньше 10, мы сделаем линии 8 и 786 00:31:37,500 --> 00:31:41,250 то 9, то мы ударим 10, и вернитесь к 6, снова и 787 00:31:41,250 --> 00:31:45,580 снова и снова, и снова, пока я меньше 10. 788 00:31:45,580 --> 00:31:47,860 Так что давайте повторно запустить сделать здесь. 789 00:31:47,860 --> 00:31:48,940 >> Ладно, мы собрали все в порядке. 790 00:31:48,940 --> 00:31:50,300 Позвольте мне повтор цикла. 791 00:31:50,300 --> 00:31:52,620 И теперь он на самом деле, кажется, работает. 792 00:31:52,620 --> 00:31:55,100 Таким образом, плюсы и минусы здесь? 793 00:31:55,100 --> 00:31:58,910 Ну, до сих пор там на самом деле не все ООП - 794 00:31:58,910 --> 00:31:59,420 так мило. 795 00:31:59,420 --> 00:32:01,870 Ладно, что было - Ах, это был несчастный случай. 796 00:32:01,870 --> 00:32:05,200 Ладно, давайте вернемся к цикл. 797 00:32:05,200 --> 00:32:07,530 Таким образом, для петли хороши, потому что они очень четко. 798 00:32:07,530 --> 00:32:09,720 И хотя они немного неуклюжим, чтобы написать, что это 799 00:32:09,720 --> 00:32:11,500 очень мощный, и это позволяет сделать 800 00:32:11,500 --> 00:32:12,980 несколько вещей сразу. 801 00:32:12,980 --> 00:32:16,240 В то время как петли, кажется, не имеют огромную сумму стоимости всего 802 00:32:16,240 --> 00:32:18,500 Пока, потому что она чувствует, что мы просто должны делать больше работы. 803 00:32:18,500 --> 00:32:20,670 Мы должны поставить инициализации здесь, 804 00:32:20,670 --> 00:32:23,480 обновлять сюда, и мы должны помнить, чтобы делать все это. 805 00:32:23,480 --> 00:32:26,260 Таким образом, мы увидим во времени, в то время как на самом деле петли придают 806 00:32:26,260 --> 00:32:29,380 себя просто разные контексты, различных данных 807 00:32:29,380 --> 00:32:33,900 структур, как списки и хеш-таблицы, то, что мы доберемся до 808 00:32:33,900 --> 00:32:34,970 середине семестра. 809 00:32:34,970 --> 00:32:37,900 Но сейчас, знаю, что есть этот третий тип, известный как DO- 810 00:32:37,900 --> 00:32:38,480 время цикла. 811 00:32:38,480 --> 00:32:39,540 И мы видели это ненадолго. 812 00:32:39,540 --> 00:32:41,830 И это может быть очень полезным с PSET 1. 813 00:32:41,830 --> 00:32:45,570 Каждый раз, когда вы хотите что-то сделать, а затем проверить, если 814 00:32:45,570 --> 00:32:48,940 Пользователь сотрудничали, и если они этого не сделали, сделать это снова, делать- 815 00:32:48,940 --> 00:32:51,460 время цикла поддается такой логике. 816 00:32:51,460 --> 00:32:55,640 Потому что, как заказ сверху вниз здесь предполагает, 817 00:32:55,640 --> 00:32:57,750 сделать буквально означает это сделать. 818 00:32:57,750 --> 00:32:59,830 И делать это снова и снова, что это может быть? 819 00:32:59,830 --> 00:33:03,000 Может быть, это означает вызов GetInt или GetString, а затем 820 00:33:03,000 --> 00:33:05,830 проверив значение GetInt или GetString, а затем кричать 821 00:33:05,830 --> 00:33:08,260 на пользователей, если они не сотрудничали, попросив их 822 00:33:08,260 --> 00:33:10,100 снова и снова, и снова. 823 00:33:10,100 --> 00:33:11,730 Если вы хотите сделать что-то один раз, 824 00:33:11,730 --> 00:33:13,210 Затем проверить некоторые условия. 825 00:33:13,210 --> 00:33:14,110 >> Так давайте попробуем это. 826 00:33:14,110 --> 00:33:17,130 Позвольте мне на самом деле изменить эту ситуацию к DO-цикла. 827 00:33:17,130 --> 00:33:18,830 И я собираюсь пойти дальше и сделать следующее. 828 00:33:18,830 --> 00:33:21,830 Таким образом, выполните следующие действия. 829 00:33:21,830 --> 00:33:26,870 Давайте сделаем Int я = GetInt (), но давайте сначала сообщить пользователю 830 00:33:26,870 --> 00:33:27,410 что делать. 831 00:33:27,410 --> 00:33:29,050 Так мало чем отличается этот раз. 832 00:33:29,050 --> 00:33:31,270 "Дайте мне Int". 833 00:33:31,270 --> 00:33:32,910 Так что я буду использовать Printf для этого. 834 00:33:32,910 --> 00:33:35,740 А теперь я пойду сюда, и я собираюсь это сделать 835 00:33:35,740 --> 00:33:41,520 в то время как я есть, скажем, больше - 836 00:33:41,520 --> 00:33:47,540 Давайте посмотрим, у меня есть, скажем так, менее чем 0, или я это 837 00:33:47,540 --> 00:33:48,730 больше 10. 838 00:33:48,730 --> 00:33:51,810 Другими словами, я хочу число от 1 до 9, всего 839 00:33:51,810 --> 00:33:52,720 произвольно. 840 00:33:52,720 --> 00:33:55,290 Так что я с помощью комбинированного логическое выражение для 841 00:33:55,290 --> 00:33:59,930 убедиться, что я меньше 0 или больше 10, в которой 842 00:33:59,930 --> 00:34:02,530 случае я буду делать этого цикла здесь снова. 843 00:34:02,530 --> 00:34:04,400 Итак, еще раз, сделать это - 844 00:34:04,400 --> 00:34:08,480 а я меньше 0 или я больше 10. 845 00:34:08,480 --> 00:34:11,440 >> А теперь давайте идти вперед и сделать это один раз мы сделали это. 846 00:34:11,440 --> 00:34:13,270 Давайте просто сделать быструю проверку вменяемости. 847 00:34:13,270 --> 00:34:18,929 Е ("Спасибо, я это% D", I). 848 00:34:18,929 --> 00:34:21,350 Так что это простая программа запрашивает у пользователя Int, 849 00:34:21,350 --> 00:34:24,000 делает уверен, что это в некотором диапазоне от 1 до 9 включительно, 850 00:34:24,000 --> 00:34:26,280 , а затем благодарит пользователей, напоминая им, что они просто 851 00:34:26,280 --> 00:34:27,940 набрали, так же, как небольшой проверки вменяемости. 852 00:34:27,940 --> 00:34:30,659 Но давайте посмотрим, если это работает, как предполагалось. 853 00:34:30,659 --> 00:34:34,533 Отпусти меня головой вниз здесь и повторно запустить сделать петлю. 854 00:34:34,533 --> 00:34:35,350 Хм. 855 00:34:35,350 --> 00:34:38,600 "Использование необъявленный идентификатор" я "". Это странно. 856 00:34:38,600 --> 00:34:41,509 Я думал, мы решили, что. 857 00:34:45,489 --> 00:34:47,560 То же симптом, но другой код. 858 00:34:47,560 --> 00:34:47,899 Да? 859 00:34:47,899 --> 00:34:50,191 АУДИТОРИЯ: [неразборчиво] в два, мы должны 860 00:34:50,191 --> 00:34:52,639 [Неразборчиво]. 861 00:34:52,639 --> 00:34:53,260 >> David J. Малан: Совершенно верно. 862 00:34:53,260 --> 00:34:55,989 Так что это на самом деле приводит нас к теме известны как сфера. 863 00:34:55,989 --> 00:34:59,350 Оказывается, C, опять же, это действительно берет вас в буквальном смысле. 864 00:34:59,350 --> 00:35:02,970 И если вы делаете что-то вроде этого, где вы объявляете Int 865 00:35:02,970 --> 00:35:06,120 , а затем присвоить ему какое-то значение, но вы, что внутри 866 00:35:06,120 --> 00:35:09,840 пара фигурных скобок, что C делает это предполагает, что вы 867 00:35:09,840 --> 00:35:14,800 Только хочу, чтобы эти 32 бита известного как я существовать в 868 00:35:14,800 --> 00:35:18,200 контексте этих фигурных скобок, в рамках линии 869 00:35:18,200 --> 00:35:22,420 С 6 по 9. Так что я объявлен, и ему присваивается 870 00:35:22,420 --> 00:35:26,530 Значение в строке 8, но как только вы получаете за пределами 871 00:35:26,530 --> 00:35:30,270 строка 9 ниже фигурной скобкой, я уже не в 872 00:35:30,270 --> 00:35:31,910 сферы, так сказать. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Это уже не в правильном контексте. 874 00:35:35,030 --> 00:35:37,940 Так что теперь нет я, так что это как бы у нас не было даже 875 00:35:37,940 --> 00:35:38,770 заявил на всех. 876 00:35:38,770 --> 00:35:41,520 >> Так что исправление то что-то вроде этого, если 877 00:35:41,520 --> 00:35:44,300 Причина в том, что я объявлен в фигурные скобки, которые 878 00:35:44,300 --> 00:35:45,120 видимо плохо? 879 00:35:45,120 --> 00:35:45,410 Здесь? 880 00:35:45,410 --> 00:35:46,820 АУДИТОРИЯ: [неразборчиво]. 881 00:35:46,820 --> 00:35:47,150 David J. Малан: Да. 882 00:35:47,150 --> 00:35:48,710 Итак, мы можем инициализировать ее пределами. 883 00:35:48,710 --> 00:35:53,530 Итак, позвольте мне идти вперед и удалить объявление частей которой 884 00:35:53,530 --> 00:35:55,820 Я указать тип, и позвольте мне сделать это здесь. 885 00:35:55,820 --> 00:36:00,220 Таким образом, в строке 5, теперь он говорит: "Дайте мне Int." Назовите это я. 886 00:36:00,220 --> 00:36:03,400 Обратите внимание, в строке 9, я не хочу этого делать, потому что я 887 00:36:03,400 --> 00:36:04,830 уже есть 32 бит. 888 00:36:04,830 --> 00:36:06,140 Я не хочу попросить компьютер 889 00:36:06,140 --> 00:36:07,630 различными 32 бит. 890 00:36:07,630 --> 00:36:09,850 Я хочу использовать те же 32 бит. 891 00:36:09,850 --> 00:36:13,190 И сейчас, потому что я объявлен в строке 5, она по-прежнему законно 892 00:36:13,190 --> 00:36:16,550 использовать его в строке 11 и строке 12. 893 00:36:16,550 --> 00:36:19,310 >> Итак, позвольте мне попробовать перекомпилировать и посмотрим, 894 00:36:19,310 --> 00:36:20,490 если Clang прекращает кричать. 895 00:36:20,490 --> 00:36:22,380 сделать петлю. 896 00:36:22,380 --> 00:36:25,470 Так что теперь это "неявное объявление функции 897 00:36:25,470 --> 00:36:29,880 "GetInt" недопустим в C99. "Что это такое? 898 00:36:29,880 --> 00:36:30,400 Да? 899 00:36:30,400 --> 00:36:32,330 АУДИТОРИЯ: [неразборчиво]. 900 00:36:32,330 --> 00:36:32,690 David J. Малан: Да. 901 00:36:32,690 --> 00:36:35,520 Так что теперь я на самом деле использование GetInt, это не то, 902 00:36:35,520 --> 00:36:38,190 что просто приходит с C. Это происходит от CS50. 903 00:36:38,190 --> 00:36:39,890 Так что мы должны это здесь. 904 00:36:39,890 --> 00:36:41,450 И позвольте мне вернуться в строку вниз 905 00:36:41,450 --> 00:36:43,500 Здесь и повторно запустить сделать. 906 00:36:43,500 --> 00:36:44,160 Ладно, в конце концов. 907 00:36:44,160 --> 00:36:46,270 Теперь мы решили, что и другие ошибки. 908 00:36:46,270 --> 00:36:48,930 Позвольте мне теперь запустить цикл и посмотреть, что происходит. 909 00:36:48,930 --> 00:36:51,740 "Дайте мне Int." Я дам ему 11. 910 00:36:51,740 --> 00:36:53,100 Я дам ему -1. 911 00:36:53,100 --> 00:36:54,470 Я дам ему Foo. 912 00:36:54,470 --> 00:36:56,080 Я дам ему 5. 913 00:36:56,080 --> 00:36:57,450 И теперь это действительно работает. 914 00:36:57,450 --> 00:36:59,410 Но строке изменился по причине здесь. 915 00:36:59,410 --> 00:37:02,800 Почему он сказал повторить один из этих раз, но дайте мне 916 00:37:02,800 --> 00:37:03,920 Int другие три раза? 917 00:37:03,920 --> 00:37:05,500 Почему это поведение отличается? 918 00:37:05,500 --> 00:37:06,980 АУДИТОРИЯ: Бросил в него строку. 919 00:37:06,980 --> 00:37:07,830 David J. Малан: Простите? 920 00:37:07,830 --> 00:37:08,570 Зала: Вы дали ему строку. 921 00:37:08,570 --> 00:37:08,990 David J. Малан: Да. 922 00:37:08,990 --> 00:37:11,450 Таким образом, мы дали ему строку в этой третьей попытки, 923 00:37:11,450 --> 00:37:12,490 когда я набрал Foo. 924 00:37:12,490 --> 00:37:13,200 Foo является строкой. 925 00:37:13,200 --> 00:37:14,340 Очевидно, что это не Int. 926 00:37:14,340 --> 00:37:17,500 И то, как CS50 реализован GetInt том, что мы 927 00:37:17,500 --> 00:37:20,330 не проверять, если что-то не меньше 0 или больше 10 928 00:37:20,330 --> 00:37:22,260 для вас, потому что, как мы знаем заранее, какой вид 929 00:37:22,260 --> 00:37:23,130 Int вы хотите? 930 00:37:23,130 --> 00:37:25,880 Но мы можем минимально проверить тебя, не пользователь по крайней мере, 931 00:37:25,880 --> 00:37:26,730 Введите число? 932 00:37:26,730 --> 00:37:30,500 А если они этого не сделали, мы кричать на пользователей, набрав "повторить" на 933 00:37:30,500 --> 00:37:31,440 экран. 934 00:37:31,440 --> 00:37:34,210 >> Так что теперь у нас есть программа, которая циклов. Хорошо. 935 00:37:34,210 --> 00:37:37,070 Теперь, какой из них является своего рода лучше построить? 936 00:37:37,070 --> 00:37:39,060 Так вот где все становится немного грязным, 937 00:37:39,060 --> 00:37:42,360 То, что вы должны помнить, чтобы объявить переменную здесь 938 00:37:42,360 --> 00:37:44,630 если вы хотите использовать его внутри некоторых 939 00:37:44,630 --> 00:37:46,460 фигурные скобки и за ее пределами. 940 00:37:46,460 --> 00:37:48,490 Но даже если это выглядит немного загадочный на первый 941 00:37:48,490 --> 00:37:50,750 взгляд, просто еще раз, помните, простая логика. 942 00:37:50,750 --> 00:37:54,630 Для того, чтобы использовать все, что в C, является ли это функция или 943 00:37:54,630 --> 00:37:57,680 это переменная, вы должны включить его, если это функция 944 00:37:57,680 --> 00:37:59,770 В некоторых библиотек, или вам нужно объявить. 945 00:37:59,770 --> 00:38:02,405 Но теперь вы должны быть очень помня о том, что 946 00:38:02,405 --> 00:38:04,940 Вы объявив его в нужном объеме. 947 00:38:04,940 --> 00:38:08,150 Вы не поставив его слишком сильно внутри скобок. 948 00:38:08,150 --> 00:38:09,410 >> Поэтому позвольте мне на самом деле откат. 949 00:38:09,410 --> 00:38:12,660 Если мы вернемся к нашему например, от ранее, и я иду 950 00:38:12,660 --> 00:38:19,245 Вернуться к для Int, Int = 0; I <10; + + я, и я 951 00:38:19,245 --> 00:38:26,370 сделать Printf звезд, как это, и затем закройте парень, и теперь 952 00:38:26,370 --> 00:38:30,410 Printf я сейчас - 953 00:38:30,410 --> 00:38:33,500 в соответствии с той же логикой, что произойдет, когда я пытаюсь 954 00:38:33,500 --> 00:38:35,500 скомпилировать эту программу? 955 00:38:35,500 --> 00:38:36,790 АУДИТОРИЯ: Неверный идентификатор. 956 00:38:36,790 --> 00:38:38,560 David J. Малан: Так что это еще один неверный идентификатор, 957 00:38:38,560 --> 00:38:39,470 необъявленный идентификатор. 958 00:38:39,470 --> 00:38:41,810 Теперь, причина немного иная. 959 00:38:41,810 --> 00:38:44,370 Там, очевидно не фигурные скобки здесь, но то же самое 960 00:38:44,370 --> 00:38:46,790 Идея та же история сфера относится. 961 00:38:46,790 --> 00:38:50,340 Если вы объявили переменную, как я внутри 962 00:38:50,340 --> 00:38:53,960 цикл, даже если вы не написан фигурные 963 00:38:53,960 --> 00:38:56,980 скобки, думать о них мысленно все еще находится там, в которых 964 00:38:56,980 --> 00:39:00,310 случае, если я действительно только внутри цикла. 965 00:39:00,310 --> 00:39:03,080 Это не действительны, как только вы получите на следующей строке, которая в 966 00:39:03,080 --> 00:39:05,090 этом случае в настоящее время 10. 967 00:39:05,090 --> 00:39:09,060 Таким образом, всего за несколько вопросов сферы и тому подобное. 968 00:39:09,060 --> 00:39:12,620 Ладно, есть вопросы? 969 00:39:12,620 --> 00:39:15,310 >> Ладно, это вроде тривиальная небольшую программу, 970 00:39:15,310 --> 00:39:17,450 печать только немного звезд. 971 00:39:17,450 --> 00:39:20,400 Но давайте посмотрим, если вы помните эту песню здесь. 972 00:39:20,400 --> 00:39:22,530 Это невероятно раздражает песню дети будут петь на 973 00:39:22,530 --> 00:39:23,550 Школьный автобус и тому подобное. 974 00:39:23,550 --> 00:39:25,990 Но то, что хорошо о нем, что он имеет эту цикличность, 975 00:39:25,990 --> 00:39:27,910 которому это "99 бутылок пива на стене, 976 00:39:27,910 --> 00:39:28,520 99 бутылок пива. 977 00:39:28,520 --> 00:39:31,030 Возьмите одну вниз, передать его вокруг, 98 бутылок пива на 978 00:39:31,030 --> 00:39:34,330 стены ". И тогда песня повторяется 97, то 96, то 979 00:39:34,330 --> 00:39:38,040 95, затем 94, все, вплоть до 0, если вы действительно получили, что 980 00:39:38,040 --> 00:39:38,920 далеко на автобусе. 981 00:39:38,920 --> 00:39:41,960 Так что это хорошая программа для сортировки из орудия, потому что моя 982 00:39:41,960 --> 00:39:43,650 Бог, если можно просто реализовать это с помощью нескольких 983 00:39:43,650 --> 00:39:46,660 строк кода, вы могли бы выплюнуть всю лирику к этой 984 00:39:46,660 --> 00:39:48,240 Песня довольно быстро. 985 00:39:48,240 --> 00:39:50,420 Но на этом пути, мы можем начать сейчас дразнят друг от друга некоторыми 986 00:39:50,420 --> 00:39:52,460 из этих основных конструкций циклов, а теперь и 987 00:39:52,460 --> 00:39:55,830 Введем функции, что мы пишем сами, возвращать значения 988 00:39:55,830 --> 00:39:57,020 что мы обойти. 989 00:39:57,020 --> 00:39:58,910 Но, во-первых, почему бы нам не пойти дальше и принять наши пять минут 990 00:39:58,910 --> 00:39:59,320 разбить здесь? 991 00:39:59,320 --> 00:40:01,480 А когда мы вернемся, мы будем петь эту песню. 992 00:40:05,680 --> 00:40:08,760 >> Хорошо, таким образом, мы вернулись. 993 00:40:08,760 --> 00:40:11,850 И когда я говорю, что мы теперь будет петь эту песню, я имею в виду 994 00:40:11,850 --> 00:40:13,250 программно, а не в устной форме. 995 00:40:13,250 --> 00:40:19,370 Таким образом, здесь мы имеем beer1.c, который является одним осуществление этого 996 00:40:19,370 --> 00:40:20,580 конкретной песни. 997 00:40:20,580 --> 00:40:23,110 И чтобы было ясно, для тех, кто незнаком с тем, что 998 00:40:23,110 --> 00:40:24,460 эта вещь выглядит, позвольте мне идти вперед 999 00:40:24,460 --> 00:40:27,070 и сделать beer1, Enter. 1000 00:40:27,070 --> 00:40:30,400 Теперь позвольте мне выполнить beer1, и что мы увидим - сколько бутылок 1001 00:40:30,400 --> 00:40:31,140 пиво будет? 1002 00:40:31,140 --> 00:40:33,240 Я буду вводить в 99, как поется в песне. 1003 00:40:33,240 --> 00:40:34,040 Enter. 1004 00:40:34,040 --> 00:40:35,650 И теперь, если мы прокрутки - 1005 00:40:35,650 --> 00:40:38,280 упс - если мы прокручиваем через все это, мы увидим, что 1006 00:40:38,280 --> 00:40:41,350 это действительно петь всю песню. 1007 00:40:44,050 --> 00:40:44,540 Подождите минуту. 1008 00:40:44,540 --> 00:40:46,240 Мой прокрутки немного перепутались. 1009 00:40:46,240 --> 00:40:47,940 Давайте используем большие окна. 1010 00:40:47,940 --> 00:40:53,500 Так beer1, 99, там мы идем. 1011 00:40:53,500 --> 00:40:56,420 Так что здесь у нас есть целая песня, спетая гораздо быстрее, 1012 00:40:56,420 --> 00:40:58,450 компьютер, чем это могло бы быть нами. 1013 00:40:58,450 --> 00:41:00,340 Так заметить, однако, цикличность здесь. 1014 00:41:00,340 --> 00:41:03,380 Это говорит 99, а затем 99, затем "взять одну из них, передать его 1015 00:41:03,380 --> 00:41:04,740 вокруг ", то 98. 1016 00:41:04,740 --> 00:41:06,640 И теперь она повторяется снова и снова. 1017 00:41:06,640 --> 00:41:08,840 >> Так что на самом деле это прекрасная возможность для какой-то 1018 00:41:08,840 --> 00:41:10,400 Построим цикл. 1019 00:41:10,400 --> 00:41:12,950 Обратите внимание, что я немного резка угла здесь. 1020 00:41:12,950 --> 00:41:15,960 Обратите внимание, что я говорю "98 бутылок пива на стене, 1021 00:41:15,960 --> 00:41:19,010 97 бутылок пива на стене ", и это было просто так 1022 00:41:19,010 --> 00:41:21,640 что, когда мы добраться до одной бутылки пива, у меня нет 1023 00:41:21,640 --> 00:41:23,300 беспокоиться о грамматике английского языка. 1024 00:41:23,300 --> 00:41:25,790 Но мы также можем исправить это с немного, если 1025 00:41:25,790 --> 00:41:26,910 Условие, возможно. 1026 00:41:26,910 --> 00:41:30,110 Если это число особых, идти вперед и сказать: "Бутылка", 1027 00:41:30,110 --> 00:41:31,840 в противном случае, если это множественное число, скажем, "бутылки". 1028 00:41:31,840 --> 00:41:34,150 Но сейчас я полностью резки этом углу. 1029 00:41:34,150 --> 00:41:35,520 Итак, давайте посмотрим, что мы имеем здесь. 1030 00:41:35,520 --> 00:41:37,150 Таким образом, у нас есть некоторые комментарии в верхней части. 1031 00:41:37,150 --> 00:41:39,450 Я в том числе эти две библиотеки, а 1032 00:41:39,450 --> 00:41:41,140 Мы часто были. 1033 00:41:41,140 --> 00:41:43,610 А теперь позвольте мне прокрутите вниз до первого 1034 00:41:43,610 --> 00:41:44,990 фактические строки кода. 1035 00:41:44,990 --> 00:41:47,020 Строка 17 стартует основной. 1036 00:41:47,020 --> 00:41:50,610 Line 21 и 20 имеет, сколько бутылок пива будет? 1037 00:41:50,610 --> 00:41:52,060 И тогда я называю GetInt. 1038 00:41:52,060 --> 00:41:53,800 И теперь у меня есть немного здравомыслия проверки. 1039 00:41:53,800 --> 00:41:57,030 >> Таким образом, это соглашение, по которому мы будем начинать с принятия 1040 00:41:57,030 --> 00:41:59,620 более тщательно проверить введенные пользователем данные. 1041 00:41:59,620 --> 00:42:01,710 Иногда вы просто не хотите, чтобы побудить их снова 1042 00:42:01,710 --> 00:42:02,630 и снова и снова. 1043 00:42:02,630 --> 00:42:05,620 Если пользователь винты и не сотрудничает, хорошо. 1044 00:42:05,620 --> 00:42:07,430 Выйти и просто не иметь с ними дело. 1045 00:42:07,430 --> 00:42:08,990 И вот что я здесь делаю. 1046 00:42:08,990 --> 00:42:12,520 Если п меньше 1, то я просто буду кричать на пользователя, 1047 00:42:12,520 --> 00:42:14,330 "Извините, что не имеет смысла". А потом я собираюсь 1048 00:42:14,330 --> 00:42:16,650 произвольно возвращает 1. 1049 00:42:16,650 --> 00:42:18,550 Таким образом, опять же, это всего лишь условность, чтобы привыкнуть. 1050 00:42:18,550 --> 00:42:19,850 На данный момент, принять его на веру. 1051 00:42:19,850 --> 00:42:22,700 Но до сих пор, мы всегда возвращались 0, так как 1052 00:42:22,700 --> 00:42:25,204 Мы уже говорили возвращается 0 означает что? 1053 00:42:25,204 --> 00:42:26,000 АУДИТОРИЯ: Успех. 1054 00:42:26,000 --> 00:42:27,320 David J. Малан: успех, вот и все. 1055 00:42:27,320 --> 00:42:29,740 Так что теперь мы, наконец, начинаем думать о 1056 00:42:29,740 --> 00:42:31,330 без успехов - 1057 00:42:31,330 --> 00:42:33,760 Другими словами, угол случаи, ошибки условиях - 1058 00:42:33,760 --> 00:42:37,520 Теперь у меня есть бесконечный запас, или по крайней мере четыре миллиарда 1059 00:42:37,520 --> 00:42:39,790 возможных вещей, которые могут пойти не так в моей программы. 1060 00:42:39,790 --> 00:42:42,300 И я могу начать присвоение им индивидуальных номеров. 1061 00:42:42,300 --> 00:42:44,340 Сейчас, как правило, достаточно просто вернуться 1062 00:42:44,340 --> 00:42:45,730 нечто иное, чем 0. 1063 00:42:45,730 --> 00:42:48,040 Итак, мы собираемся, чтобы просто вернуть 1 на данный момент. 1064 00:42:48,040 --> 00:42:51,440 Но причина для возвращения 1, что, как только вы вернетесь 1065 00:42:51,440 --> 00:42:55,110 1, угадайте, что происходит с остальной частью программы? 1066 00:42:55,110 --> 00:42:55,720 Он останавливается. 1067 00:42:55,720 --> 00:42:56,560 Вот и все. 1068 00:42:56,560 --> 00:42:59,150 Таким образом, тот факт, что я возвращаюсь 1 является эффективным 1069 00:42:59,150 --> 00:43:02,950 короткое замыкание выполнения этой программы таким образом, чтобы 1070 00:43:02,950 --> 00:43:06,780 ничего ниже линии 27 будет продолжать выполнение. 1071 00:43:06,780 --> 00:43:09,210 Как только основная возвращается, что это такое. 1072 00:43:09,210 --> 00:43:13,160 >> Ладно, если пользователь делает сотрудничать и мы достигнем линии 30 1073 00:43:13,160 --> 00:43:15,680 потому что они ввели в законную номер, вот мой 1074 00:43:15,680 --> 00:43:16,990 осуществление этой песни. 1075 00:43:16,990 --> 00:43:19,050 Так я впервые распечатать символ новой строки, только для 1076 00:43:19,050 --> 00:43:19,880 эстетику. 1077 00:43:19,880 --> 00:43:21,500 Теперь у меня есть цикл. 1078 00:43:21,500 --> 00:43:22,930 И обратите внимание, что я делаю вещи немного 1079 00:43:22,930 --> 00:43:23,880 в другом направлении. 1080 00:43:23,880 --> 00:43:26,210 Я не должен делать менее, я не должен делать + +. 1081 00:43:26,210 --> 00:43:30,660 Я могу сказать вместо инициализации переменной я, установите его равным 1082 00:43:30,660 --> 00:43:35,080 п, число пользователей набрали, выполните следующие действия, чтобы 1083 00:43:35,080 --> 00:43:39,590 Пока я больше 0, то я - 1084 00:43:39,590 --> 00:43:42,070 как только вы закончили одну итерацию этого цикла. 1085 00:43:42,070 --> 00:43:44,310 Таким образом, мы можем рассчитывать вниз с помощью цикла, а также. 1086 00:43:44,310 --> 00:43:47,520 Теперь, это в значительной степени неделе один материал теперь, с Printf. 1087 00:43:47,520 --> 00:43:51,770 Таким печати "% D бутылок пива на стене". Печать "% D 1088 00:43:51,770 --> 00:43:54,990 бутылок пива. "" Возьмите одну вниз, передавать его ". для печати 1089 00:43:54,990 --> 00:43:58,880 "% D бутылок пива на стене". Так что это еще% D, но 1090 00:43:58,880 --> 00:44:02,770 заметить, что аргумент Printf меняется. 1091 00:44:02,770 --> 00:44:05,840 После запятой, у меня есть я, потому что я хочу сказать 99. 1092 00:44:05,840 --> 00:44:08,590 После этого запятой, у меня есть я, потому что я хочу сказать 99. 1093 00:44:08,590 --> 00:44:14,030 После этого запятой, у меня есть я - 1, потому что я хочу сказать, 98 в 1094 00:44:14,030 --> 00:44:16,260 это первая итерация, и так далее. 1095 00:44:16,260 --> 00:44:18,520 И теперь здесь, я просто глупые маленькие замечания. 1096 00:44:18,520 --> 00:44:22,270 И тогда линия 42, я возвращать 0 в соответствии с соглашением, показывая, что 1097 00:44:22,270 --> 00:44:23,650 все в порядке. 1098 00:44:23,650 --> 00:44:24,490 >> Так что, если я goofed? 1099 00:44:24,490 --> 00:44:26,350 Что может распространенная ошибка здесь может быть? 1100 00:44:26,350 --> 00:44:29,200 Ну, а если я случайно сказал хорошо, я хочу, чтобы подсчитать 1101 00:44:29,200 --> 00:44:31,640 до 0, я хочу, 0 бутылок пива на стене? 1102 00:44:31,640 --> 00:44:34,620 Поэтому я говорю, я больше или равна 0. 1103 00:44:34,620 --> 00:44:38,920 Что это будет признаком того, что я теперь вижу, если я перекомпилировать 1104 00:44:38,920 --> 00:44:41,173 beer1 и запустить его? 1105 00:44:41,173 --> 00:44:42,120 АУДИТОРИЯ: Отрицательно. 1106 00:44:42,120 --> 00:44:43,590 David J. Малан: Да, это пойдем отрицательным. 1107 00:44:43,590 --> 00:44:45,950 Это не совсем по одной ошибке, невероятно 1108 00:44:45,950 --> 00:44:47,270 Распространенной ошибкой сделать. 1109 00:44:47,270 --> 00:44:48,960 Давайте на самом деле вернуться в окно терминала и сделать это 1110 00:44:48,960 --> 00:44:50,620 Здесь, таким образом, мы можем увидеть в большем времени. 1111 00:44:50,620 --> 00:44:53,280 Введите, 99 бутылок пива. 1112 00:44:53,280 --> 00:44:56,580 Близко, но мы пошли чуть-чуть слишком далеко. 1113 00:44:56,580 --> 00:45:00,500 Мы пели песни слишком далеко, так, что мы сейчас попали в 1114 00:45:00,500 --> 00:45:01,510 отрицательное число. 1115 00:45:01,510 --> 00:45:03,680 Так что не совсем работает. 1116 00:45:03,680 --> 00:45:06,450 >> Ладно, так что мы можем легко исправить, что, возвращаясь к 1117 00:45:06,450 --> 00:45:07,650 как это было раньше. 1118 00:45:07,650 --> 00:45:10,360 Но то, что некоторые возможности сейчас 1119 00:45:10,360 --> 00:45:11,190 улучшение? 1120 00:45:11,190 --> 00:45:17,200 Хорошо, позвольте мне открыть beer2.c и прокрутите вниз, здесь и принять 1121 00:45:17,200 --> 00:45:19,310 посмотрите на эту версию. 1122 00:45:19,310 --> 00:45:21,370 Что первое, что бросается в глаза вам, как различные 1123 00:45:21,370 --> 00:45:23,715 В этой версии здесь? 1124 00:45:23,715 --> 00:45:24,190 АУДИТОРИЯ: [неразборчиво]. 1125 00:45:24,190 --> 00:45:26,510 David J. Малан: Да, так не я, потому что пришло в голову, 1126 00:45:26,510 --> 00:45:29,350 Мне знаете что, я спрашиваю у пользователя п, и тогда я 1127 00:45:29,350 --> 00:45:33,580 полагая в равной п, а затем я меняю я, но я никогда не 1128 00:45:33,580 --> 00:45:34,590 касаясь п раз. 1129 00:45:34,590 --> 00:45:37,390 Так какого черта была точка Вы выделении еще 32 1130 00:45:37,390 --> 00:45:45,210 битов называется просто мне так, что я могу иметь различные переменные? 1131 00:45:45,210 --> 00:45:47,960 Таким образом, в данном случае, я, конечно, признать, что ненужное 1132 00:45:47,960 --> 00:45:49,190 Особенностью конструкции. 1133 00:45:49,190 --> 00:45:52,730 И я сейчас собираюсь сказать в то время как п больше, чем 0, перейдите 1134 00:45:52,730 --> 00:45:56,180 вперед и распечатать ту же песню, проходя п к Printf как 1135 00:45:56,180 --> 00:46:00,210 Второй аргумент, и п - 1 в качестве второго аргумента здесь. 1136 00:46:00,210 --> 00:46:02,930 И тогда на каждой итерации этого цикла, идти вперед и только 1137 00:46:02,930 --> 00:46:05,080 уменьшения п себе. 1138 00:46:05,080 --> 00:46:06,960 Теперь, функционально, эта программа 1139 00:46:06,960 --> 00:46:08,010 будет одинаковым. 1140 00:46:08,010 --> 00:46:10,730 Если я печатаю в 99, п начинается на 99. 1141 00:46:10,730 --> 00:46:12,890 Я снижение, уменьшение, снижение, уменьшение. 1142 00:46:12,890 --> 00:46:15,875 Я собираюсь пройти весь путь до "Одна бутылка пива 1143 00:46:15,875 --> 00:46:16,740 стены, одна бутылка пива. 1144 00:46:16,740 --> 00:46:18,020 Возьмите одну вниз, передавать его. 1145 00:46:18,020 --> 00:46:21,480 0 бутылок пива на стене ". Конца, потому что я и сделал 1146 00:46:21,480 --> 00:46:23,200 получим условие правильной. 1147 00:46:23,200 --> 00:46:24,280 Это больше 0. 1148 00:46:24,280 --> 00:46:26,220 Я не делайте эту ошибку. 1149 00:46:26,220 --> 00:46:28,470 >> Так что же лучше, версия одной или второй вариант? 1150 00:46:31,380 --> 00:46:33,480 Я слышал кучу ропот на двоих. 1151 00:46:33,480 --> 00:46:34,730 Почему два? 1152 00:46:37,210 --> 00:46:38,225 Что это? 1153 00:46:38,225 --> 00:46:39,215 АУДИТОРИЯ: [неразборчиво]. 1154 00:46:39,215 --> 00:46:40,070 David J. Малан: О, все в порядке. 1155 00:46:40,070 --> 00:46:42,870 Таким образом, он не будет опускаться ниже 0, но помните, в первой версии, 1156 00:46:42,870 --> 00:46:45,870 Оригинальный правильная версия не опускалась ниже 0 либо. 1157 00:46:45,870 --> 00:46:48,340 Поэтому помните, что это правильная версия. 1158 00:46:48,340 --> 00:46:51,630 Так давайте хотя бы сравним два правильных версий. 1159 00:46:51,630 --> 00:46:53,300 Что аргумент в пользу версии 1160 00:46:53,300 --> 00:46:55,146 два из которых, ммм, лучше? 1161 00:46:55,146 --> 00:46:55,642 Да? 1162 00:46:55,642 --> 00:46:57,630 АУДИТОРИЯ: Он использует меньше пространства. 1163 00:46:57,630 --> 00:46:59,530 David J. Малан: Да, это занимает меньше места, верно? 1164 00:46:59,530 --> 00:47:02,900 В то время как версия, которая используется 32 бит для п, а потом еще 1165 00:47:02,900 --> 00:47:07,680 32 бита для меня. 1166 00:47:07,680 --> 00:47:10,060 Версия вторая использует только 32 бита для п, так что 1167 00:47:10,060 --> 00:47:11,700 кажется, это плюс. 1168 00:47:11,700 --> 00:47:12,950 Другие мысли? 1169 00:47:18,070 --> 00:47:21,520 Кто-нибудь хочет спорить в пользу одного? 1170 00:47:21,520 --> 00:47:22,070 Да? 1171 00:47:22,070 --> 00:47:25,240 АУДИТОРИЯ: Вы должны использовать дополнительные строки кода при п -. 1172 00:47:25,240 --> 00:47:26,090 >> David J. Малан: Хорошо, конечно. 1173 00:47:26,090 --> 00:47:26,960 Так что это справедливо. 1174 00:47:26,960 --> 00:47:29,040 Так что это просто, по крайней мере для меня - 1175 00:47:29,040 --> 00:47:31,940 Я имею в виду, это на самом деле чувствует себя немного грязнее, тем, что 1176 00:47:31,940 --> 00:47:35,120 Я не могу сортировать инкапсулировать все мои логики в одном 1177 00:47:35,120 --> 00:47:38,030 красивые линии, петли для, так как цикл может. 1178 00:47:38,030 --> 00:47:40,240 Вот, я как бы должны лавировать на этом п - 1179 00:47:40,240 --> 00:47:41,120 В конце цикла, потому что 1180 00:47:41,120 --> 00:47:42,550 это логически необходимо. 1181 00:47:42,550 --> 00:47:45,190 Но это вроде трется меня неправильно, просто потому, что 1182 00:47:45,190 --> 00:47:48,260 Кажется, отдельная от логики здесь, хотя, 1183 00:47:48,260 --> 00:47:49,430 опять же, это необходимо. 1184 00:47:49,430 --> 00:47:50,990 Другие мысли? 1185 00:47:50,990 --> 00:47:51,490 Да? 1186 00:47:51,490 --> 00:47:52,740 АУДИТОРИЯ: [неразборчиво]. 1187 00:47:57,990 --> 00:47:58,350 >> David J. Малан: Да. 1188 00:47:58,350 --> 00:48:00,730 Так что, если вы вместо этого, в конце песни, хотел 1189 00:48:00,730 --> 00:48:02,950 распечатать еще раз название песни? 1190 00:48:02,950 --> 00:48:05,660 Как "Спасибо за игру 99 бутылок пива", или что-то 1191 00:48:05,660 --> 00:48:06,690 глупо, как это? 1192 00:48:06,690 --> 00:48:09,750 Но дело в том, что вы хотели доступ к исходному значению. 1193 00:48:09,750 --> 00:48:13,180 Тот факт, что вы мутировал или изменился п на каждом 1194 00:48:13,180 --> 00:48:16,330 итерации и, следовательно, уничтожить свое первоначальное значение 1195 00:48:16,330 --> 00:48:18,650 означает, что вы просто не можете сделать это в конце. 1196 00:48:18,650 --> 00:48:20,660 Теперь, пожалуй, мы, очевидно, не хотят делать 1197 00:48:20,660 --> 00:48:21,450 , что в этой программе. 1198 00:48:21,450 --> 00:48:22,350 Так кого это волнует? 1199 00:48:22,350 --> 00:48:23,630 Но это очень правильный момент. 1200 00:48:23,630 --> 00:48:25,520 И, честно говоря, там действительно никто не 1201 00:48:25,520 --> 00:48:26,630 Право ответа здесь. 1202 00:48:26,630 --> 00:48:28,740 Они оба одинаково правильны. 1203 00:48:28,740 --> 00:48:30,210 Я мог убедиться в любом случае. 1204 00:48:30,210 --> 00:48:33,310 Я скажу, что, в общем, это хороший принцип, если Вы 1205 00:48:33,310 --> 00:48:36,030 спросил у пользователя некоторую ценность, и вы хранится в переменной 1206 00:48:36,030 --> 00:48:38,730 как и я, только вид в принципе, это, наверное, хороший 1207 00:48:38,730 --> 00:48:40,160 сохранить, что вокруг. 1208 00:48:40,160 --> 00:48:43,400 И любые данные, которые вы хотите мутировать снова и снова, только 1209 00:48:43,400 --> 00:48:46,030 дать себе копию этой переменной, просто так, что вы 1210 00:48:46,030 --> 00:48:47,830 иметь доступ к оригиналу. 1211 00:48:47,830 --> 00:48:51,040 Вы тратите еще 32 бита, но на самом деле это 1212 00:48:51,040 --> 00:48:53,490 Компьютер, как, двумя гигабайтами оперативной памяти в эти дни, 1213 00:48:53,490 --> 00:48:55,310 и мы спор по поводу 32 бит? 1214 00:48:55,310 --> 00:48:56,320 Действительно не такое уж большое дело. 1215 00:48:56,320 --> 00:48:58,550 И даже на этом устройстве здесь, с половины концерта или 1216 00:48:58,550 --> 00:49:01,700 гигабайтом оперативной памяти, 32 бит и 64 бит, 1217 00:49:01,700 --> 00:49:02,920 Не такое уж большое дело. 1218 00:49:02,920 --> 00:49:05,890 Конечно, сегодня, это будет путь поражены размером 1219 00:49:05,890 --> 00:49:08,400 самой программы, которая будет несколько сотен 1220 00:49:08,400 --> 00:49:10,890 килобайт, если бы не несколько мегабайт, в эти дни. 1221 00:49:10,890 --> 00:49:13,550 >> Таким образом, разумная озабоченность, ни один правильный ответ. 1222 00:49:13,550 --> 00:49:15,490 Но по крайней мере те мысли, которые должны начать 1223 00:49:15,490 --> 00:49:16,790 пройти через ваш ум? 1224 00:49:16,790 --> 00:49:19,600 Потому что в PSET 0, хотя мы действительно только ожидается 1225 00:49:19,600 --> 00:49:22,340 Правильность или, по крайней мере снимает с различными ошибками, что 1226 00:49:22,340 --> 00:49:25,440 Вы, возможно, сталкивались, как мы продвигаемся вперед, дизайн 1227 00:49:25,440 --> 00:49:27,910 будет еще один ключевой аспект, оба написания кода 1228 00:49:27,910 --> 00:49:29,770 а также наши оценки кода. 1229 00:49:29,770 --> 00:49:32,310 И так по крайней мере дать думал что-то вроде этого. 1230 00:49:32,310 --> 00:49:35,590 И только потому, что что-то работает не означает, что это хорошо, 1231 00:49:35,590 --> 00:49:37,130 не означает, что это хорошо разработан. 1232 00:49:37,130 --> 00:49:38,820 И это одна из вещей, обучение стажеров и 1233 00:49:38,820 --> 00:49:41,990 Проблема набора поможет нам дразнить часть с течением времени. 1234 00:49:41,990 --> 00:49:45,020 >> Ну, что, скажем, эта версия здесь? 1235 00:49:45,020 --> 00:49:49,090 Позвольте мне сделать что-нибудь сексуальное здесь в данный момент. 1236 00:49:49,090 --> 00:49:50,740 Прежде всего позвольте мне избавиться от этого. 1237 00:49:50,740 --> 00:49:54,120 А теперь давайте исправим эту грамматическую вопрос. 1238 00:49:54,120 --> 00:49:58,780 Таким образом, в этой версии, я хочу, чтобы исправить грамматику, так что, 1239 00:49:58,780 --> 00:50:02,460 , а не просто сказать скобках с, как "бутылка" 1240 00:50:02,460 --> 00:50:03,360 или "бутылки", - 1241 00:50:03,360 --> 00:50:04,900 Я не хочу, чтобы сократить этот угол - 1242 00:50:04,900 --> 00:50:08,350 Я также хочу, чтобы динамически распечатать слово "бутылки" 1243 00:50:08,350 --> 00:50:12,820 или "бутылку", тем самым используя эти заполнители% сегодняшних. 1244 00:50:12,820 --> 00:50:16,550 Так что мне нужно условно проверить, что это значение я. 1245 00:50:16,550 --> 00:50:19,590 И если это 1, я хочу сказать "бутылка", и если это ничего, 1246 00:50:19,590 --> 00:50:23,115 еще, я хочу сказать "бутылки". Так давайте попробуем это сделать. 1247 00:50:23,115 --> 00:50:31,340 Так что, если я == 1, то позвольте мне пойти дальше и объявить - 1248 00:50:31,340 --> 00:50:34,080 Мне нужна строка, поэтому позвольте мне сделать строку s1, потому что это 1249 00:50:34,080 --> 00:50:36,070 Первая строка меня волнует прямо сейчас. 1250 00:50:36,070 --> 00:50:40,980 Я собираюсь сказать: "Бутылка". И потом, давайте посмотрим, струнный 1251 00:50:40,980 --> 00:50:43,110 s2 - и я объясню, куда я иду в данный момент - 1252 00:50:43,110 --> 00:50:47,650 "Бутылки". Так Напомним, что в этой песне, мы должны быть в состоянии 1253 00:50:47,650 --> 00:50:50,580 печатать вещи, два разных слова потенциально. 1254 00:50:50,580 --> 00:50:53,590 Таким образом, если мы оглянемся назад здесь, заметили, что когда мы доберемся до 1255 00:50:53,590 --> 00:50:56,440 этот пример здесь ", две бутылки пива на стене, 1256 00:50:56,440 --> 00:50:59,490 две бутылки пива, возьмите одну вниз, передавать его ", я хочу 1257 00:50:59,490 --> 00:51:02,380 эта четвертая линия теперь говорят, "одна бутылка пива на 1258 00:51:02,380 --> 00:51:04,900 стена ". Таким образом, я должен решить, я хочу сказать" бутылки "или 1259 00:51:04,900 --> 00:51:07,780 "Бутылки"? Так что я собираюсь сколь угодно говорить, все в порядке, 1260 00:51:07,780 --> 00:51:10,530 Я собираюсь сейчас объявить переменную s1, строка 1261 00:51:10,530 --> 00:51:13,830 одно, что собирается получить подключены здесь, а также здесь, 1262 00:51:13,830 --> 00:51:16,070 потому что эти слова всегда одинаковые, только потому, что 1263 00:51:16,070 --> 00:51:17,290 характер песни. 1264 00:51:17,290 --> 00:51:20,100 И я буду называть s2 все слова я хочу 1265 00:51:20,100 --> 00:51:21,560 в конце концов появится здесь. 1266 00:51:21,560 --> 00:51:25,530 Сейчас, буквально, в 99 случаях из 100, то это будет 1267 00:51:25,530 --> 00:51:28,820 в обоих этих случаях, так как 3 множественное число, 2, 1268 00:51:28,820 --> 00:51:30,200 множественном числе, 4, множественное число. 1269 00:51:30,200 --> 00:51:34,640 Но в этом углу случай, когда мы доберемся до 2, а затем 1, или 1270 00:51:34,640 --> 00:51:37,250 даже 1 и 0, мне нужна эта логика. 1271 00:51:37,250 --> 00:51:41,020 Так что я должен провести некоторое время в моем коде получение этого права. 1272 00:51:41,020 --> 00:51:47,530 Так что, если я это сделаю, если я == 1, то множество S1 равно "бутылка" 1273 00:51:47,530 --> 00:51:52,010 и s2 равны "бутылки", потому что это будет в течение 1 1274 00:51:52,010 --> 00:51:56,340 бутылки, и это будет для 0 бутылки. 1275 00:51:56,340 --> 00:51:58,250 И это здесь, что это представляете? 1276 00:51:58,250 --> 00:51:59,780 Просто чтобы быть ясно. 1277 00:51:59,780 --> 00:52:00,620 Это просто комментарий. 1278 00:52:00,620 --> 00:52:03,730 Поэтому тот факт, что вы можете иметь однострочные комментарии означает, что вы 1279 00:52:03,730 --> 00:52:06,110 Комментировать могут коде, как это, но другого общего 1280 00:52:06,110 --> 00:52:09,050 парадигмы, тоже является то, что если у вас есть супер-короткие фразы, 1281 00:52:09,050 --> 00:52:11,410 Вы хотите поставить себя, и это просто более удобным для чтения, чтобы положить 1282 00:52:11,410 --> 00:52:13,270 это право в конце строки кода, вы можете 1283 00:52:13,270 --> 00:52:15,230 Абсолютно сделать что-то вроде этого. 1284 00:52:15,230 --> 00:52:20,150 >> Так что теперь, если я сделаю это? Иначе, если я не равна 1. 1285 00:52:20,150 --> 00:52:21,620 Так взрыва равна - 1286 00:52:21,620 --> 00:52:23,150 Восклицательный знак известен как "взрыв". 1287 00:52:23,150 --> 00:52:25,080 Таким образом, взрыв = 1. 1288 00:52:25,080 --> 00:52:28,530 Так что, если я не равна 1, что я вместо того, хотите сделать? 1289 00:52:28,530 --> 00:52:31,700 Ну, первое слово, которое я хочу быть что? 1290 00:52:34,620 --> 00:52:40,030 Таким образом, строка 1 должна быть "бутылки" для множественного бутылки, 1291 00:52:40,030 --> 00:52:42,440 и тогда это будет множественное число "бутылки", а также, на данный момент. 1292 00:52:42,440 --> 00:52:43,800 И мы увидим, если это на самом деле заставляет нас 1293 00:52:43,800 --> 00:52:44,870 куда мы хотим идти. 1294 00:52:44,870 --> 00:52:47,680 Так что теперь, если я прокрутите вниз здесь, заметили, что я подключением 1295 00:52:47,680 --> 00:52:50,170 Не только я, но s1. 1296 00:52:50,170 --> 00:52:51,860 Я подключением я и s1. 1297 00:52:51,860 --> 00:52:54,440 А потом сюда, я минус 1, который так же, как 1298 00:52:54,440 --> 00:52:55,920 раньше, но s2. 1299 00:52:55,920 --> 00:52:58,730 Другими словами, я хочу, чтобы английское слово, чтобы изменить основе 1300 00:52:58,730 --> 00:52:59,930 На этой логики. 1301 00:52:59,930 --> 00:53:03,310 Теперь, уже есть некоторые проблемы в этом коде. 1302 00:53:03,310 --> 00:53:08,460 Что разбито уже из ворот здесь? 1303 00:53:08,460 --> 00:53:10,796 Да? 1304 00:53:10,796 --> 00:53:13,210 АУДИТОРИЯ: [неразборчиво]. 1305 00:53:13,210 --> 00:53:13,800 >> David J. Малан: Совершенно верно. 1306 00:53:13,800 --> 00:53:16,030 Так что я уже нарушил урок из области видимости. 1307 00:53:16,030 --> 00:53:19,610 Таким образом, я заявил S1 и S2, но я сделал это внутри 1308 00:53:19,610 --> 00:53:22,980 фигурные скобки, что означает, что да, этот код будет работать до 1309 00:53:22,980 --> 00:53:27,430 до линии 42, но как только я попал линии 43, думаю, что нет 1310 00:53:27,430 --> 00:53:28,900 больше не существует? 1311 00:53:28,900 --> 00:53:32,600 Ну, думаю, что это больше не по масштабу - ни S1 и S2. 1312 00:53:32,600 --> 00:53:33,780 Поэтому мы должны это исправить. 1313 00:53:33,780 --> 00:53:36,180 Итак, позвольте мне удалить деклараций. 1314 00:53:36,180 --> 00:53:39,320 И я оставлю имена переменных и удаления этого здесь 1315 00:53:39,320 --> 00:53:40,120 и удалите это здесь. 1316 00:53:40,120 --> 00:53:43,557 И в каком направлении я должен действительно объявить эти вещи? 1317 00:53:43,557 --> 00:53:44,960 АУДИТОРИЯ: [неразборчиво]. 1318 00:53:44,960 --> 00:53:45,410 David J. Малан: Да, так, вероятно, 1319 00:53:45,410 --> 00:53:46,850 прямо здесь, 33-иш. 1320 00:53:46,850 --> 00:53:50,670 Таким образом, строки s1 и строки s2. 1321 00:53:50,670 --> 00:53:51,950 И оказывается, я могу это сделать. 1322 00:53:51,950 --> 00:53:54,260 Если вы объявления двух переменных такого же типа, 1323 00:53:54,260 --> 00:53:57,420 вы можете просто использовать запятую и сделать это в С. Все 1324 00:53:57,420 --> 00:53:58,970 Право, так что теперь у меня есть две переменные - 1325 00:53:58,970 --> 00:53:59,860 S1 и S2. 1326 00:53:59,860 --> 00:54:02,000 Я присвоения им значений в этих 1327 00:54:02,000 --> 00:54:04,210 Условия здесь, или здесь. 1328 00:54:04,210 --> 00:54:06,690 И тогда я использую их вниз. 1329 00:54:06,690 --> 00:54:10,960 Как она теперь будет работать? 1330 00:54:10,960 --> 00:54:12,740 >> Ну, это еще немного глючит, но давайте хотя бы увидеть 1331 00:54:12,740 --> 00:54:13,730 как далеко мы получили. 1332 00:54:13,730 --> 00:54:16,500 Итак, позвольте мне пойти дальше и сделать beer3. 1333 00:54:16,500 --> 00:54:17,695 Это beer3? 1334 00:54:17,695 --> 00:54:19,410 Да, это beer3. 1335 00:54:19,410 --> 00:54:21,510 А теперь позвольте мне идти вперед и работать beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Мы, вероятно, может пропустить большинство из них. 1338 00:54:25,840 --> 00:54:29,100 И сюда, посмотри на это. 1339 00:54:29,100 --> 00:54:31,110 "Одна бутылка пива на стене, одна бутылка пива, принять 1340 00:54:31,110 --> 00:54:34,306 один вниз, передавать его, 0 бутылок пива на стене ". 1341 00:54:34,306 --> 00:54:37,570 Но я обращаю ваше внимание лишь половина решения. 1342 00:54:37,570 --> 00:54:39,620 Вид облажался здесь. 1343 00:54:39,620 --> 00:54:43,030 Так что, похоже, что угол случаи возникают, когда я равно, что 1344 00:54:43,030 --> 00:54:44,030 два значения? 1345 00:54:44,030 --> 00:54:45,020 АУДИТОРИЯ: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 David J. Малан: 2 и 1. 1347 00:54:46,190 --> 00:54:48,180 Это не 1, а не 1. 1348 00:54:48,180 --> 00:54:51,890 Это действительно просто эти последние две строфы этой песни. 1349 00:54:51,890 --> 00:54:53,890 Итак, что я вместо этого хотите сделать? 1350 00:54:53,890 --> 00:54:58,890 Так что я, кажется, поймал случай, когда, если г == 1, 1351 00:54:58,890 --> 00:55:02,240 то первое слово "бутылка", а второе слово 1352 00:55:02,240 --> 00:55:07,230 является "бутылки". Но здесь, я хочу изменить это, чтобы быть == 2. 1353 00:55:07,230 --> 00:55:08,570 И если это так, то, что я хочу 1354 00:55:08,570 --> 00:55:09,620 Первое слово быть? 1355 00:55:09,620 --> 00:55:10,430 АУДИТОРИЯ: "Бутылки". 1356 00:55:10,430 --> 00:55:12,890 David J. Малан: "Бутылки", так и для двух бутылок. 1357 00:55:12,890 --> 00:55:14,690 И тогда это слово здесь должно быть - 1358 00:55:14,690 --> 00:55:15,340 АУДИТОРИЯ: "Бутылка". 1359 00:55:15,340 --> 00:55:17,316 David J. Малан: "Бутылка", особая. 1360 00:55:20,430 --> 00:55:25,160 >> Ладно, давайте масштаб, вернуться сюда, повторные сделать, 1361 00:55:25,160 --> 00:55:28,590 повторные beer3, Тип 99 раз. 1362 00:55:28,590 --> 00:55:30,710 Ладно, "Ошибка сегментации (ядро сбрасывали)". 1363 00:55:30,710 --> 00:55:32,780 Что я сделал не так? 1364 00:55:36,050 --> 00:55:38,722 АУДИТОРИЯ: Вы не имеют значения [неразборчиво]. 1365 00:55:38,722 --> 00:55:40,480 David J. Малан: Ах, отличная точка. 1366 00:55:40,480 --> 00:55:43,310 Ладно, так что тут не так? 1367 00:55:43,310 --> 00:55:45,450 Таким образом, сегментация вина, и мы фактически увидим 1368 00:55:45,450 --> 00:55:49,020 это довольно много раз в будущем, сознательно. 1369 00:55:49,020 --> 00:55:51,030 Но сейчас, что это на самом деле означает? 1370 00:55:51,030 --> 00:55:53,620 Сегментация вина почти всегда означает, что у вас есть 1371 00:55:53,620 --> 00:55:56,760 как-то пытался получить доступ к памяти, оперативной памяти в компьютере, 1372 00:55:56,760 --> 00:56:00,600 что у вас нет, что вы, собственно, не просил 1373 00:56:00,600 --> 00:56:02,050 операционная система для. 1374 00:56:02,050 --> 00:56:04,440 Таким образом, в этом случае, обратите внимание, что я сделал, что 1375 00:56:04,440 --> 00:56:05,870 недостатки в моей логике. 1376 00:56:05,870 --> 00:56:09,500 Я назначен S1 и S2 значение, если я равна 1. 1377 00:56:09,500 --> 00:56:11,590 Я также сделал, что если я равна 2. 1378 00:56:11,590 --> 00:56:13,710 Но я не сделал это в бесконечное число других 1379 00:56:13,710 --> 00:56:14,690 Возможности - 1380 00:56:14,690 --> 00:56:17,940 В частности, 3 или 4 или точка, точка, точка, 99. 1381 00:56:17,940 --> 00:56:20,100 Так что исправить это может быть просто давайте 1382 00:56:20,100 --> 00:56:22,190 есть другое состояние. 1383 00:56:22,190 --> 00:56:26,780 И отпустил меня сюда и сказал s1 равно - 1384 00:56:26,780 --> 00:56:28,180 какой она должна быть здесь? 1385 00:56:28,180 --> 00:56:28,750 АУДИТОРИЯ: [неразборчиво]. 1386 00:56:28,750 --> 00:56:30,460 >> David J. Малан: "Бутылки", потому что в общем случае, 1387 00:56:30,460 --> 00:56:32,020 это просто то же самое. 1388 00:56:32,020 --> 00:56:35,580 Так равна цитата, конец цитаты ", бутылки". Так что для множественного 1389 00:56:35,580 --> 00:56:41,010 бутылки, а затем здесь, на множественное число бутылок. 1390 00:56:41,010 --> 00:56:44,580 Итак, теперь позвольте мне вернуться к моей окно терминала, 1391 00:56:44,580 --> 00:56:47,200 перекомпиляция, вновь запустить его. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Вот так. 1394 00:56:49,150 --> 00:56:50,610 И давайте сделаем быструю проверку вменяемости. 1395 00:56:50,610 --> 00:56:52,400 Технически, мы хотели бы, чтобы прочитать все из них, чтобы убедиться, что 1396 00:56:52,400 --> 00:56:53,370 они правы, но давайте посмотрим на 1397 00:56:53,370 --> 00:56:54,640 наименее известных преступников. 1398 00:56:54,640 --> 00:56:57,370 3 бутылки, 2 бутылки, 2 бутылки, 1 1399 00:56:57,370 --> 00:57:00,380 Бутылка, 1 бутылка, 0 бутылки. 1400 00:57:00,380 --> 00:57:03,080 Мы, кажется, по крайней мере, установил его на данный момент. 1401 00:57:03,080 --> 00:57:06,010 Но загвоздка в том, что то, что Бог ужасный беспорядок, это 1402 00:57:06,010 --> 00:57:07,470 просто решить глупо 1403 00:57:07,470 --> 00:57:09,540 один символ грамматических деталей. 1404 00:57:09,540 --> 00:57:11,150 Так что отчасти причиной того, что я вырезал этот уголок 1405 00:57:11,150 --> 00:57:14,090 Ранее, потому что она просто полностью раздражает необходимость 1406 00:57:14,090 --> 00:57:15,020 написать столько кода. 1407 00:57:15,020 --> 00:57:17,530 Но оказывается, что есть чуть более элегантным способами 1408 00:57:17,530 --> 00:57:20,110 выражающих одно и то же. 1409 00:57:20,110 --> 00:57:22,040 И мы можем сделать это следующим образом. 1410 00:57:22,040 --> 00:57:23,890 >> Позвольте мне оставить это на экране на мгновение и 1411 00:57:23,890 --> 00:57:27,320 ввести нечто, известное как тройной оператор. 1412 00:57:27,320 --> 00:57:29,600 Это своего рода одну строчку, что просто хотел сделать нашу 1413 00:57:29,600 --> 00:57:31,880 Живет немного сексуальнее, как и обещал. 1414 00:57:31,880 --> 00:57:33,130 И я собираюсь сделать это следующим образом. 1415 00:57:33,130 --> 00:57:35,810 Дайте мне строки называется s1, и позвольте мне 1416 00:57:35,810 --> 00:57:37,200 назначить его следующим образом. 1417 00:57:37,200 --> 00:57:39,900 (Я == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Бутылка", иначе "бутылки". String s2 получает (я == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Бутылка", иначе "бутылки". 1420 00:57:52,670 --> 00:57:57,050 Итак, что же тогда разница? 1421 00:57:57,050 --> 00:57:59,370 Эти две строки кода, я считаю, может 1422 00:57:59,370 --> 00:58:02,200 заменить весь этот бардак. 1423 00:58:02,200 --> 00:58:04,280 Так я называю это беспорядок, только потому, что она как бы трется меня 1424 00:58:04,280 --> 00:58:05,940 неправильным образом, что он так много строк кода. 1425 00:58:05,940 --> 00:58:06,650 Не неправильно. 1426 00:58:06,650 --> 00:58:07,700 Это не плохой дизайн. 1427 00:58:07,700 --> 00:58:10,140 Мол, это совершенно правильный и прекрасно. 1428 00:58:10,140 --> 00:58:12,970 Но кодирование становится утомительным, если у вас есть, чтобы выразить себя так, 1429 00:58:12,970 --> 00:58:15,530 Черт специально снова и снова, и снова с простым 1430 00:58:15,530 --> 00:58:16,620 Сценарий, как это. 1431 00:58:16,620 --> 00:58:19,470 Так что C имеет некоторые ярлыки, как это. 1432 00:58:19,470 --> 00:58:24,270 Так что это по существу говорит объявить строку называется S1 и 1433 00:58:24,270 --> 00:58:32,610 назначить его либо это значение или это значение, если г == - 1434 00:58:32,610 --> 00:58:35,290 Простите, я должен сказать, что это более четко. 1435 00:58:35,290 --> 00:58:41,680 Объявление переменной s1, присвоить ему это значение, если это правда. 1436 00:58:41,680 --> 00:58:44,280 В противном случае, присвоить ему это значение. 1437 00:58:44,280 --> 00:58:47,220 Итак, другими словами, это своего рода одна линия способом 1438 00:58:47,220 --> 00:58:51,490 говорят, если иное делать уступки по пути. 1439 00:58:51,490 --> 00:58:55,540 Так что, если я равна 1, а затем пойти дальше и называют это "бутылки". И 1440 00:58:55,540 --> 00:58:59,830 то это другое, называют его "бутылки". Между тем, s2, 1441 00:58:59,830 --> 00:59:04,060 Второе слово, что мы должны определить, если я равна 2, мы будем 1442 00:59:04,060 --> 00:59:08,350 установите переключатель S2 в "бутылке". В противном случае, установите его в "бутылки". И то, что 1443 00:59:08,350 --> 00:59:11,460 это означает, что теперь я могу пройти через это и удалить все 1444 00:59:11,460 --> 00:59:12,860 эти строки кода. 1445 00:59:12,860 --> 00:59:17,220 И когда я говорю, немного смешно, что это сейчас 1446 00:59:17,220 --> 00:59:20,060 сексуальнее, это сексуальнее в своего рода стилистические смысле. 1447 00:59:20,060 --> 00:59:22,660 Тот факт, что функционально этот код на самом деле происходит в 1448 00:59:22,660 --> 00:59:24,610 сделать точно такую ​​же вещь. 1449 00:59:24,610 --> 00:59:26,890 И хотя это может выглядеть немного загадочные на первый 1450 00:59:26,890 --> 00:59:29,250 взгляд, потому что мы не видели эту конструкцию раньше, я бы 1451 00:59:29,250 --> 00:59:31,850 утверждают, что это в конечном счете будет гораздо больше 1452 00:59:31,850 --> 00:59:34,820 чтения и намного проще для людей, чтобы мы вроде 1453 00:59:34,820 --> 00:59:36,830 понять, потому что теперь вы можете просто прочитать 1454 00:59:36,830 --> 00:59:38,830 Код все на одной линии. 1455 00:59:38,830 --> 00:59:41,550 Он по-прежнему близки по духу, если там, где это 1456 00:59:41,550 --> 00:59:44,920 состояние и тогда, это то, что внутри, если и это 1457 00:59:44,920 --> 00:59:46,480 это то, что находится внутри другого. 1458 00:59:46,480 --> 00:59:49,450 Но мы можем сделать это, только гораздо более элегантно. 1459 00:59:49,450 --> 00:59:52,650 >> И если я теперь вернуться к моим терминал, удалив все 1460 00:59:52,650 --> 00:59:55,530 из этих линий и заменили их только те два, 1461 00:59:55,530 --> 01:00:00,150 перекомпиляции, повторные бутылки пива с 99 Обратите внимание, что моя 1462 01:00:00,150 --> 01:00:03,350 грамматики является, по сути, по-прежнему верны. 1463 01:00:03,350 --> 01:00:06,160 Итак, еще раз, что-то начать. 1464 01:00:06,160 --> 01:00:08,840 2 бутылки пива, 1 бутылку пива. 1465 01:00:08,840 --> 01:00:09,370 Выглядит права. 1466 01:00:09,370 --> 01:00:10,100 Да. 1467 01:00:10,100 --> 01:00:13,900 Так что у нас есть гораздо более емкие решения. 1468 01:00:13,900 --> 01:00:16,020 Так что это тоже, как вы получите более комфортно с C, не 1469 01:00:16,020 --> 01:00:18,630 обязательно с первого PSET или даже секунды, но 1470 01:00:18,630 --> 01:00:21,170 понимаю, что эти конструкции может позволить нам делать вещи, когда-либо 1471 01:00:21,170 --> 01:00:22,810 более элегантно. 1472 01:00:22,810 --> 01:00:25,200 Теперь давайте сделаем еще одну вещь здесь. 1473 01:00:25,200 --> 01:00:31,460 Позвольте мне идти вперед и открывать return1.c. 1474 01:00:31,460 --> 01:00:34,340 Теперь давайте начнем решить еще одну проблему таким образом, что 1475 01:00:34,340 --> 01:00:37,140 позволяет написать более сложный код. 1476 01:00:37,140 --> 01:00:39,960 >> Итак, вот простая маленькая программа, цель которой в жизни 1477 01:00:39,960 --> 01:00:41,870 это для увеличения значения. 1478 01:00:41,870 --> 01:00:43,100 А на самом деле, давайте сделаем шаг назад. 1479 01:00:43,100 --> 01:00:44,400 Позвольте мне сделать это вручную. 1480 01:00:44,400 --> 01:00:52,200 Позвольте мне сделать включать и Int основных (недействительными). 1481 01:00:52,200 --> 01:00:53,450 И позвольте мне называть это increment.c. 1482 01:00:57,150 --> 01:00:58,570 И то, что я хочу делать? 1483 01:00:58,570 --> 01:01:02,240 Я собираюсь идти вперед и сказать что-то вроде - 1484 01:01:02,240 --> 01:01:04,280 мы будем называть числа же - 1485 01:01:04,280 --> 01:01:04,980 Int х. 1486 01:01:04,980 --> 01:01:13,670 Так Int х получает 2; Printf х% й, новая линия, х. 1487 01:01:13,670 --> 01:01:16,780 Так что я печатаю быстро, но вроде знакомые вещи сейчас. 1488 01:01:16,780 --> 01:01:18,830 Тогда я буду делать X + +. 1489 01:01:18,830 --> 01:01:21,710 Тогда я иду к печати в том же предложение еще раз. 1490 01:01:21,710 --> 01:01:24,550 А потом я собираюсь возвращать 0 только для выхода из программы. 1491 01:01:24,550 --> 01:01:25,960 Ладно, так это программы, которые 1492 01:01:25,960 --> 01:01:26,960 приращения числа. 1493 01:01:26,960 --> 01:01:29,830 Это первый выход для инициализации что-то 2, а затем это 1494 01:01:29,830 --> 01:01:33,470 собирается увеличивать его и распечатать его снова. 1495 01:01:33,470 --> 01:01:36,930 >> Так что давайте работать прирост, невероятно простой программы. 1496 01:01:36,930 --> 01:01:40,940 Но предположим теперь, что я хочу куб значение, так что 1497 01:01:40,940 --> 01:01:42,490 что-то несколько произвольно. 1498 01:01:42,490 --> 01:01:45,140 И я на самом деле хочу делать х получает куб ее. 1499 01:01:45,140 --> 01:01:47,570 Так что я мог бы использовать то, что называется функцией военнопленных, но я не 1500 01:01:47,570 --> 01:01:48,650 действительно знаю, где это пока. 1501 01:01:48,650 --> 01:01:50,580 Так что я собираюсь сделать это старомодным способом. 1502 01:01:50,580 --> 01:01:54,550 х раз в этом равных х раз х раз х. 1503 01:01:54,550 --> 01:01:56,880 Так что я кубатуры значение, умножив ее на себя снова 1504 01:01:56,880 --> 01:02:00,440 и снова и снова, так что мы получаем власть 1505 01:02:00,440 --> 01:02:02,050 3-в этом случае. 1506 01:02:02,050 --> 01:02:06,000 Так что теперь числа я должен распечатать и должно быть, как мы увидим 1507 01:02:06,000 --> 01:02:08,450 здесь - сделать шаг, так что это на самом деле не совсем увеличить 1508 01:02:08,450 --> 01:02:10,260 больше, но мы оставим только название - 1509 01:02:10,260 --> 01:02:11,590 2, а затем 8. 1510 01:02:11,590 --> 01:02:17,670 Теперь у нас есть зачатки возможность для уточнения 1511 01:02:17,670 --> 01:02:21,570 Здесь, в которой эта вещь измерения кубатуры умножения числа 1512 01:02:21,570 --> 01:02:24,680 сама по себе сама по себе сама по себе чувствует, как это может быть просто 1513 01:02:24,680 --> 01:02:27,920 Полезно иметь как функция, так же, как кто-то решил, 1514 01:02:27,920 --> 01:02:30,430 лет назад - Вы знаете, вроде полезно, если один из нас садится 1515 01:02:30,430 --> 01:02:33,120 и пишет Printf, так что остальной мир может его использовать, 1516 01:02:33,120 --> 01:02:36,160 Почему бы нам не сесть и написать функцию, называется кубом 1517 01:02:36,160 --> 01:02:39,250 , что делает это измерения кубатуры для нас, поэтому мы не должны вручную 1518 01:02:39,250 --> 01:02:41,500 осуществление понятие кубатуры значения здесь? 1519 01:02:41,500 --> 01:02:44,040 >> Таким образом, простой пример, но давайте идти вперед и использовать это в качестве 1520 01:02:44,040 --> 01:02:46,280 возможность написать свою функцию. 1521 01:02:46,280 --> 01:02:49,110 Таким образом, до сих пор мы использовали только основные, и мы использовали другие 1522 01:02:49,110 --> 01:02:51,780 Народный функции, но мы еще не написали наш собственный. 1523 01:02:51,780 --> 01:02:52,650 Таким образом, здесь мы идем. 1524 01:02:52,650 --> 01:02:56,330 Я собираюсь пойти дальше и написать функцию, называется кубом. 1525 01:02:56,330 --> 01:02:58,490 И я буду иметь это займет вход. 1526 01:02:58,490 --> 01:03:02,070 Таким образом, ее вход будет целое число. 1527 01:03:02,070 --> 01:03:03,570 И то, что он собирается делать? 1528 01:03:03,570 --> 01:03:08,500 Это собирается объявить Int выход = вход раза вход 1529 01:03:08,500 --> 01:03:09,880 раз вход. 1530 01:03:09,880 --> 01:03:12,190 А потом он собирается вернуться, что выход. 1531 01:03:12,190 --> 01:03:14,500 И тогда я должен быть конкретным сейчас. 1532 01:03:14,500 --> 01:03:16,820 Эта функция будет возвращать Int. 1533 01:03:16,820 --> 01:03:19,130 Так вот то, как Вы бы написать свои собственные функции. 1534 01:03:19,130 --> 01:03:20,850 Сначала решите, что имя 1535 01:03:20,850 --> 01:03:21,720 Функция будет. 1536 01:03:21,720 --> 01:03:23,964 И вообще, что-то пояснительной хорошо, так что я 1537 01:03:23,964 --> 01:03:25,060 называют его куб. 1538 01:03:25,060 --> 01:03:27,180 Затем вы должны указать, что он собирается вернуться, что 1539 01:03:27,180 --> 01:03:28,240 его выход будет. 1540 01:03:28,240 --> 01:03:29,595 И мы не так уж много вариантов пока нет. 1541 01:03:29,595 --> 01:03:32,260 Int, Char, дробный, логический, строка. 1542 01:03:32,260 --> 01:03:34,260 А сейчас я собираюсь придерживаться Int, потому что я хочу, 1543 01:03:34,260 --> 01:03:35,880 для возврата целого числа. 1544 01:03:35,880 --> 01:03:38,770 Тогда вы должны указать, что его входов, если таковые имеются. 1545 01:03:38,770 --> 01:03:41,570 И если куб принимает аргумент, берет что-то между 1546 01:03:41,570 --> 01:03:44,970 скобки, вы должны дать аргумент, что имя, чтобы 1547 01:03:44,970 --> 01:03:47,860 Вы можете назвать это то, как вы реализуете или записи 1548 01:03:47,860 --> 01:03:50,550 эту функцию, и вы должны дать ему типом, который в этом 1549 01:03:50,550 --> 01:03:51,810 случае будет Int. 1550 01:03:51,810 --> 01:03:54,690 Короче говоря, куба это функция, которая принимает целое 1551 01:03:54,690 --> 01:03:57,560 качестве входных данных и возвращает целое число в качестве вывода. 1552 01:03:57,560 --> 01:03:59,240 >> Так что же делать с этим входом? 1553 01:03:59,240 --> 01:04:03,710 Ну, а в строке 14, я объявляю переменную выходные, и я 1554 01:04:03,710 --> 01:04:07,410 присвоить ему значение, вход раз входные раз вход. 1555 01:04:07,410 --> 01:04:11,490 А потом я вернусь выход. 1556 01:04:11,490 --> 01:04:14,890 Так как я могу использовать это тогда? 1557 01:04:14,890 --> 01:04:19,210 Что я могу изменить эти подчеркнул символов в строке 1558 01:04:19,210 --> 01:04:21,006 7 должны быть, как вы думаете? 1559 01:04:21,006 --> 01:04:21,800 АУДИТОРИЯ: [неразборчиво]. 1560 01:04:21,800 --> 01:04:25,570 David J. Малан: Да, так кубе х. 1561 01:04:25,570 --> 01:04:28,290 Так что х является переменной, которая означает, что она имеет некоторое значение. 1562 01:04:28,290 --> 01:04:30,190 К счастью, это тип целого числа. 1563 01:04:30,190 --> 01:04:34,280 И потому х INT, это означает, что я могу передать его в куб. 1564 01:04:34,280 --> 01:04:39,500 И хотя я переопределения значения х со значением 1565 01:04:39,500 --> 01:04:42,780 куба х, как это было в случае до сих пор, в любое время 1566 01:04:42,780 --> 01:04:46,150 имеют знак равенства и строки кода, материал на право 1567 01:04:46,150 --> 01:04:49,090 запускается на выполнение, а затем получает назначение в 1568 01:04:49,090 --> 01:04:50,150 Значение слева. 1569 01:04:50,150 --> 01:04:52,950 Таким образом, порядок операций так, как мы хотели бы надеяться. 1570 01:04:52,950 --> 01:04:56,620 Так это работает? 1571 01:04:56,620 --> 01:04:58,410 Ну, отпусти меня сюда. 1572 01:04:58,410 --> 01:04:59,970 Позвольте мне открыть мое окно терминала. 1573 01:04:59,970 --> 01:05:03,610 Позвольте мне сделать шаг, Enter. 1574 01:05:03,610 --> 01:05:07,140 "Неявное объявление" куб "функция не работает в 1575 01:05:07,140 --> 01:05:13,700 C99. «Как в стороне, C99 относится к языку C, как это было 1576 01:05:13,700 --> 01:05:16,790 определен в 1999 году, которое было обновление на версию с 1577 01:05:16,790 --> 01:05:19,360 1989 года, который является обновлением по сравнению с первоначальной. 1578 01:05:19,360 --> 01:05:21,740 Так что все это значит. 1579 01:05:21,740 --> 01:05:24,250 >> Так что же это значит, что "неявное объявление 1580 01:05:24,250 --> 01:05:26,790 "куб" функция не работает? "Это прямо здесь. 1581 01:05:26,790 --> 01:05:28,430 Это прямо там, в строке 12. 1582 01:05:28,430 --> 01:05:30,460 АУДИТОРИЯ: [неразборчиво]. 1583 01:05:30,460 --> 01:05:30,730 David J. Малан: Что это? 1584 01:05:30,730 --> 01:05:32,470 АУДИТОРИЯ: Это не раньше. 1585 01:05:32,470 --> 01:05:33,540 David J. Малан: Это не раньше. 1586 01:05:33,540 --> 01:05:34,740 Так вот в чем дело. 1587 01:05:34,740 --> 01:05:38,190 С видом глуп, или компиляторов являются своего рода глупым. 1588 01:05:38,190 --> 01:05:41,060 Они действительно только то, что вы говорите им сделать. 1589 01:05:41,060 --> 01:05:44,770 А они, в частности, только читать ваш код сверху вниз, 1590 01:05:44,770 --> 01:05:45,620 слева направо. 1591 01:05:45,620 --> 01:05:49,140 Так что, если компилятор, Clang, читает ваш код, линия 1, 1592 01:05:49,140 --> 01:05:50,120 выясняет, как это сделать. 1593 01:05:50,120 --> 01:05:50,940 Ах, вот идет основной. 1594 01:05:50,940 --> 01:05:53,000 Хорошо, позвольте мне пойти дальше и объявить переменную х. 1595 01:05:53,000 --> 01:05:54,160 Позвольте мне напечатать что-нибудь. 1596 01:05:54,160 --> 01:05:55,890 Линия 7, что же такое куб? 1597 01:05:55,890 --> 01:05:58,230 Это не объявлена ​​в stdio.h. 1598 01:05:58,230 --> 01:06:00,950 Он не приходит с С. Я понятия не имею, что делать. 1599 01:06:00,950 --> 01:06:03,960 И так Clang просто останавливается и выходит с сообщением об ошибке. 1600 01:06:03,960 --> 01:06:05,850 Таким образом мы можем исправить это в несколько способов. 1601 01:06:05,850 --> 01:06:10,530 Мы можем научить Clang, что куб является просто перемещение которых 1602 01:06:10,530 --> 01:06:11,820 декларация. 1603 01:06:11,820 --> 01:06:14,640 Так что я вырезал и вставил ее поверх основного. 1604 01:06:14,640 --> 01:06:17,770 Теперь понимаю, что только потому, что главное, уже не первый, это 1605 01:06:17,770 --> 01:06:19,150 по-прежнему выполняется по умолчанию. 1606 01:06:19,150 --> 01:06:20,060 Главные является основной. 1607 01:06:20,060 --> 01:06:21,022 Это имя по умолчанию функция. 1608 01:06:21,022 --> 01:06:22,930 Не имеет значения, где он находится в файле. 1609 01:06:22,930 --> 01:06:26,910 Но по крайней мере теперь Clang видел куба, прежде чем использовать его. 1610 01:06:26,910 --> 01:06:28,500 Итак, давайте посмотрим, если Clang является счастливым сейчас. 1611 01:06:28,500 --> 01:06:31,410 Сделайте шаг, она компиляции этого времени. 1612 01:06:31,410 --> 01:06:33,060 >> Позвольте мне выполнить приращение. 1613 01:06:33,060 --> 01:06:34,810 И в самом деле, кажется, работает. 1614 01:06:34,810 --> 01:06:36,810 Теперь вы можете придумать сценарии, где в конечном итоге 1615 01:06:36,810 --> 01:06:38,650 это не возможно поставить любой функции 1616 01:06:38,650 --> 01:06:39,740 выше всех других функций. 1617 01:06:39,740 --> 01:06:42,140 Вы застряли в этом бесконечном цикле в действительности, 1618 01:06:42,140 --> 01:06:43,480 где этот парень хочет быть здесь, но это 1619 01:06:43,480 --> 01:06:44,390 парень должен быть там. 1620 01:06:44,390 --> 01:06:45,830 Так что не всегда работает. 1621 01:06:45,830 --> 01:06:49,020 Так что, к счастью, C имеет более элегантное решение. 1622 01:06:49,020 --> 01:06:50,790 Я собираюсь поставить это туда, где она была, просто потому, что 1623 01:06:50,790 --> 01:06:53,390 предпочитают, как в принципе, что главное всегда быть 1624 01:06:53,390 --> 01:06:55,550 в верхней части, потому что это просто приятно видеть, что эта программа 1625 01:06:55,550 --> 01:06:56,920 делает по умолчанию. 1626 01:06:56,920 --> 01:06:58,950 И то, что я собираюсь сделать здесь это объявить, что называется 1627 01:06:58,950 --> 01:07:00,250 прототип. 1628 01:07:00,250 --> 01:07:05,730 Я собираюсь повторно заявляю о своем кубе функции, буквально 1629 01:07:05,730 --> 01:07:07,180 копирования и вставки. 1630 01:07:07,180 --> 01:07:08,290 На самом деле, это не в буквальном смысле. 1631 01:07:08,290 --> 01:07:13,060 Таким образом, буквально копируя и вставляя линии 15 1632 01:07:13,060 --> 01:07:15,160 до выше линии 6. 1633 01:07:15,160 --> 01:07:17,010 Это не имеет значения, какой линии это заканчивается на. 1634 01:07:17,010 --> 01:07:18,380 Это случается, в строке 4. 1635 01:07:18,380 --> 01:07:19,950 Но это должны быть, прежде чем основная. 1636 01:07:19,950 --> 01:07:21,150 Но заметите разницу. 1637 01:07:21,150 --> 01:07:24,100 4 линия заканчивается точкой с запятой, что означает, эй, 1638 01:07:24,100 --> 01:07:27,510 Clang, поверьте мне на слово, что существует функция 1639 01:07:27,510 --> 01:07:31,350 называется кубом, который принимает и возвращает Int Int. 1640 01:07:31,350 --> 01:07:33,020 Но я не скажу тебе, что это такое. 1641 01:07:33,020 --> 01:07:35,180 Просто знаю, что я обещаю рассказать вам в конце концов. 1642 01:07:35,180 --> 01:07:38,490 И действительно, сейчас это нормально, что это внизу. 1643 01:07:38,490 --> 01:07:41,275 >> Так что это, как правило, лучше, потому что тогда в верхней части 1644 01:07:41,275 --> 01:07:44,240 Ваш файл, вы можете просто отбарабанить, быстрого огня, одной строкой 1645 01:07:44,240 --> 01:07:46,470 каждая, что имена ваши функции, каковы их 1646 01:07:46,470 --> 01:07:49,120 Входы, что их выходы. 1647 01:07:49,120 --> 01:07:52,210 А если быть более ясным, как правило, означает ввод аргументов или 1648 01:07:52,210 --> 01:07:54,110 Параметр, синонимами. 1649 01:07:54,110 --> 01:07:56,890 Выходной означает возвращение стоимости, что делает это 1650 01:07:56,890 --> 01:07:58,700 руки ко мне спиной. 1651 01:07:58,700 --> 01:08:03,420 Поэтому в данном случае здесь, куб был объявлен в верхней части, но 1652 01:08:03,420 --> 01:08:06,940 определено, иначе известный как реализованы, в нижней части. 1653 01:08:06,940 --> 01:08:09,620 Итак, теперь давайте вернемся сюда и вновь запустить этот. 1654 01:08:09,620 --> 01:08:13,430 Так что теперь позвольте мне идти вперед и повторно запустить сделать, повторно запустить прирост. 1655 01:08:13,430 --> 01:08:16,500 И теперь, кажется, работает просто отлично. 1656 01:08:16,500 --> 01:08:19,450 Итак, теперь мы можем идти вперед и учитывать что-то вроде 1657 01:08:19,450 --> 01:08:23,720 Пиво пример в этой четвертой версии. 1658 01:08:23,720 --> 01:08:25,590 Итак, позвольте мне прокрутить вниз здесь. 1659 01:08:25,590 --> 01:08:28,149 И заметил, что я как бы принял этот урок близко к сердцу только сейчас. 1660 01:08:28,149 --> 01:08:31,140 Тот факт, что я пел то же строфе снова и 1661 01:08:31,140 --> 01:08:34,130 снова и снова, в той же строке хора в песне, чувствовал себя 1662 01:08:34,130 --> 01:08:36,439 Например, почему не я фактора, что из в функцию? 1663 01:08:36,439 --> 01:08:38,470 И действительно, это должно быть одним из мотивов. 1664 01:08:38,470 --> 01:08:40,960 Помимо того, что кто-то еще в мире может потребоваться 1665 01:08:40,960 --> 01:08:42,390 использовать куб функцию - 1666 01:08:42,390 --> 01:08:44,560 это хороший повод, чтобы разложить что-то и написать 1667 01:08:44,560 --> 01:08:45,720 собственные функции - 1668 01:08:45,720 --> 01:08:48,720 если есть кусок кода в вашей программе, которая просто делает 1669 01:08:48,720 --> 01:08:51,370 концептуальном смысле, что вы вроде хотите, чтобы дать ему 1670 01:08:51,370 --> 01:08:53,740 имя - как в данном случае, хора - 1671 01:08:53,740 --> 01:08:57,380 Вы можете так же написать, что в качестве отдельной функции. 1672 01:08:57,380 --> 01:08:59,560 Вы не должны написать все, в основном, если он только 1673 01:08:59,560 --> 01:09:02,609 чувствует себя чистой, чтобы отделить его и дать ему имя. 1674 01:09:02,609 --> 01:09:05,529 >> Поэтому в данном случае здесь, заметили, что у меня есть комментарий на вершине 1675 01:09:05,529 --> 01:09:06,859 это функция, которая просто поет о 1676 01:09:06,859 --> 01:09:08,630 указано количество бутылок. 1677 01:09:08,630 --> 01:09:10,609 Заметьте, что здесь мне не нужно называть эти 1678 01:09:10,609 --> 01:09:12,520 вещи вход и выход. 1679 01:09:12,520 --> 01:09:16,090 В самом деле, на этот раз я просто позвонил мой вклад б за бутылку. 1680 01:09:16,090 --> 01:09:19,960 И обратите внимание, здесь, пустота предлагает то, что? 1681 01:09:19,960 --> 01:09:21,309 Это хор - 1682 01:09:21,309 --> 01:09:22,660 АУДИТОРИЯ: Не вернуть его. 1683 01:09:22,660 --> 01:09:23,870 David J. Малан: не возвращает значения. 1684 01:09:23,870 --> 01:09:26,800 И в самом деле, функции не должны возвращать значения. 1685 01:09:26,800 --> 01:09:28,060 Они просто могут что-то сделать. 1686 01:09:28,060 --> 01:09:30,270 Они могут иметь так называемые побочные эффекты, которые в этом 1687 01:09:30,270 --> 01:09:33,109 случае это просто целая куча печати на экране. 1688 01:09:33,109 --> 01:09:36,580 Так заметить, что этот код здесь, я буквально только что украли у 1689 01:09:36,580 --> 01:09:37,680 в предыдущем примере. 1690 01:09:37,680 --> 01:09:39,930 Разница лишь в том, вместо использования я, как моя 1691 01:09:39,930 --> 01:09:42,890 переменных, я сейчас, используя б, как мой переменной. 1692 01:09:42,890 --> 01:09:45,880 Так что я б сюда, я б сюда, я б 1693 01:09:45,880 --> 01:09:47,109 минус 1 здесь. 1694 01:09:47,109 --> 01:09:49,279 Но код точно так же. 1695 01:09:49,279 --> 01:09:52,529 Но только, чтобы показать вам, как мы можем использовать это, отпусти меня 1696 01:09:52,529 --> 01:09:56,780 вперед и фактически изменить это будет цикл. 1697 01:09:56,780 --> 01:10:03,850 для (INT я = п;> п, I -). 1698 01:10:03,850 --> 01:10:06,230 >> Так что я украл, что из нашего предыдущего примера. 1699 01:10:06,230 --> 01:10:08,970 Ранее он находится в строке 37, что я бы начал 1700 01:10:08,970 --> 01:10:10,640 петь эту песню раздражает. 1701 01:10:10,640 --> 01:10:15,810 Но вместо этого, я просто хочу, чтобы теперь называют хором я. 1702 01:10:15,810 --> 01:10:16,870 Готово. 1703 01:10:16,870 --> 01:10:20,260 Так что теперь в каждой итерации этого цикла, я называю это другим 1704 01:10:20,260 --> 01:10:22,220 Функция, хор, который мне довелось писать. 1705 01:10:22,220 --> 01:10:24,110 Она не была написана кем-то еще год назад. 1706 01:10:24,110 --> 01:10:27,930 Но хор, тем временем, использует Printf для печати 1707 01:10:27,930 --> 01:10:29,840 из этих четырех линий. 1708 01:10:29,840 --> 01:10:32,720 Но то, что я звоню хор снова и снова 1709 01:10:32,720 --> 01:10:35,900 петля означает, что я собираюсь получить, в самом конце, 1710 01:10:35,900 --> 01:10:39,310 точно такую ​​же песню, как у меня до сих пор. 1711 01:10:39,310 --> 01:10:42,130 Короче говоря, теперь, если я оглядываюсь на свой код, даже если 1712 01:10:42,130 --> 01:10:44,240 функционально это равносильно, обратите внимание, что это 1713 01:10:44,240 --> 01:10:46,020 начинают получать еще более читаемыми. 1714 01:10:46,020 --> 01:10:48,410 Я точно не знаю, как GetInt 1715 01:10:48,410 --> 01:10:49,250 реализован. 1716 01:10:49,250 --> 01:10:52,050 Честно говоря, я не знаю, как хор реализован. 1717 01:10:52,050 --> 01:10:52,970 Но это не имеет значения для меня. 1718 01:10:52,970 --> 01:10:55,620 Меня не волнует, потому что теперь я могу сортировать, как человек, читать 1719 01:10:55,620 --> 01:10:57,050 это от верха до низа. 1720 01:10:57,050 --> 01:10:59,950 И потому, что функции называются по тому, что они 1721 01:10:59,950 --> 01:11:02,910 делать, мой код более читабельным. 1722 01:11:02,910 --> 01:11:05,190 А так как наши программы получить гораздо более сложной - 1723 01:11:05,190 --> 01:11:07,220 К концу семестра, вы будете писать сотни строк 1724 01:11:07,220 --> 01:11:10,970 кода в языках, как PHP и JavaScript и т.п. - 1725 01:11:10,970 --> 01:11:13,550 Вы увидите, что это гораздо проще, чем следить за 1726 01:11:13,550 --> 01:11:14,080 что вы сделали. 1727 01:11:14,080 --> 01:11:15,810 И когда вы начинаете сотрудничество с друзьями или 1728 01:11:15,810 --> 01:11:19,010 партнерам или коллегам, вы будете иметь возможность писать гораздо больше 1729 01:11:19,010 --> 01:11:22,910 массивных программ, начиная осуществлять эти основные 1730 01:11:22,910 --> 01:11:23,990 строительные блоки. 1731 01:11:23,990 --> 01:11:25,550 >> Таким образом, с учетом сказанного, почему мы не называем это день? 1732 01:11:25,550 --> 01:11:27,190 И мы будем видеть вас в среду. 1733 01:11:27,190 --> 01:11:33,611 [Аплодисменты]