1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [МУЗЫКА] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> DAVID J. Малан: Хорошо, это CS50. 5 00:00:16,240 --> 00:00:18,010 И это одна неделя. 6 00:00:18,010 --> 00:00:22,050 Так Напомним, что в последний раз в нулевой неделе, мы сосредоточились на вычислительной мышления. 7 00:00:22,050 --> 00:00:25,440 И мы перешли от того, чтобы Царапины, графическое программирование 8 00:00:25,440 --> 00:00:27,360 язык от наших друзей в медиа-лаборатории Массачусетского технологического института. 9 00:00:27,360 --> 00:00:31,730 >> И с нуля, так и мы исследуем идеи, как функции и условия, 10 00:00:31,730 --> 00:00:35,210 и петли, и переменные, и даже события и темы, и многое другое. 11 00:00:35,210 --> 00:00:37,880 И сегодня, мы будем продолжать использовать эти идеи, 12 00:00:37,880 --> 00:00:40,630 и действительно принимая их за как должное, но перевести их 13 00:00:40,630 --> 00:00:44,220 на другой язык, известный как C. Теперь, C представляет собой более традиционный язык. 14 00:00:44,220 --> 00:00:46,020 Это более низкий уровень язык, если вы будете. 15 00:00:46,020 --> 00:00:47,300 >> Это чисто текстуально. 16 00:00:47,300 --> 00:00:49,910 И так, на первый взгляд, это все будет выглядеть довольно загадочным 17 00:00:49,910 --> 00:00:51,430 если вы никогда не программировали ранее. 18 00:00:51,430 --> 00:00:53,530 Мы будем иметь точка с запятой, и круглые скобки, 19 00:00:53,530 --> 00:00:55,150 и фигурные скобки, и многое другое. 20 00:00:55,150 --> 00:00:57,240 Но поймите, что даже хотя синтаксис 21 00:00:57,240 --> 00:01:00,600 о том, чтобы выглядеть немного незнакомой большинству из вас, видеть прошлое. 22 00:01:00,600 --> 00:01:03,220 И попытаться увидеть идеи что, действительно, знакомые, 23 00:01:03,220 --> 00:01:06,750 потому что здесь, в неделю один, что мы начнем делать это сравнение, 24 00:01:06,750 --> 00:01:08,980 Первоначально, Царапины по сравнению с C. 25 00:01:08,980 --> 00:01:12,350 >> Так, например, вспомнить, что, когда мы реализован первый из наших программ 26 00:01:12,350 --> 00:01:16,220 в прошлый раз, у нас был блок, который выглядел немного что-то вроде this-- когда это 27 00:01:16,220 --> 00:01:19,990 зеленый флаг щелкнул, а затем мы имели один или более частей головоломки под ним, 28 00:01:19,990 --> 00:01:22,150 в этом случае, скажем, привет мир. 29 00:01:22,150 --> 00:01:24,870 Так что, на самом деле, в пустом месте, когда я нажимаю, что зеленый флаг 30 00:01:24,870 --> 00:01:27,390 чтобы запустить свою программу, так говорить, это 31 00:01:27,390 --> 00:01:29,520 блоки, которые получают выполняются, или бежать. 32 00:01:29,520 --> 00:01:32,230 И, в частности, к царапинам сказал, привет, мир. 33 00:01:32,230 --> 00:01:35,377 >> Теперь, я мог бы уточнили разные слова здесь. 34 00:01:35,377 --> 00:01:37,960 Но мы видим, что, действительно, многие из этих blocks-- и на самом деле, 35 00:01:37,960 --> 00:01:41,880 в C много functions-- может быть параметризовано или заказной 36 00:01:41,880 --> 00:01:43,150 делать разные вещи. 37 00:01:43,150 --> 00:01:45,520 В самом деле, в C, если мы хотите конвертировать, в настоящее время, 38 00:01:45,520 --> 00:01:47,567 эта программа Царапина на этот другой язык, 39 00:01:47,567 --> 00:01:49,650 мы собираемся написать мало что-то вроде этого. 40 00:01:49,650 --> 00:01:52,540 >> Конечно, есть некоторые незнакомые синтаксис там, скорее всего, Int, 41 00:01:52,540 --> 00:01:54,380 и круглые скобки и недействительными. 42 00:01:54,380 --> 00:01:57,740 Но printf-- даже если вы бы думаю, что это будет просто распечатать. 43 00:01:57,740 --> 00:02:00,120 Но печать означает печать отформатирован, как мы скоро увидим. 44 00:02:00,120 --> 00:02:02,140 Это в буквальном смысле будет печатать к экрану независимо 45 00:02:02,140 --> 00:02:05,990 находится внутри этих скобок, которая Конечно, в данном случае, привет мир. 46 00:02:05,990 --> 00:02:09,290 >> Но вы заметите некоторые другие Синтаксис, некоторые двойные кавычки, 47 00:02:09,290 --> 00:02:11,890 что круглые скобки в конце, полу-ободочной кишки и тому подобное. 48 00:02:11,890 --> 00:02:15,027 Таким образом, есть несколько накладных расходов, так сказать, как познавательно 49 00:02:15,027 --> 00:02:17,860 и синтаксически, что мы собираемся чтобы помнить, прежде чем долго. 50 00:02:17,860 --> 00:02:20,720 Но понимаю, что с практикой, это начнет выскакивать на вас. 51 00:02:20,720 --> 00:02:24,920 >> На самом деле, давайте сосредоточимся на том Функция specifically-- в этом случае, 52 00:02:24,920 --> 00:02:26,290 сказать привет мир. 53 00:02:26,290 --> 00:02:27,560 Так сказать, это функция. 54 00:02:27,560 --> 00:02:31,320 Привет мир является параметром, или аргумент, его настройки. 55 00:02:31,320 --> 00:02:34,320 >> И эквивалентность в С просто будет это одна строка здесь, 56 00:02:34,320 --> 00:02:38,710 где Printf эквивалентно, скажем, двойной кавычки, привет 57 00:02:38,710 --> 00:02:41,470 мир эквивалентно, конечно же, к тому, что в белой коробке там. 58 00:02:41,470 --> 00:02:45,680 И обратный слеш н, хоть сколько-нибудь странно и отсутствует на пустом месте, 59 00:02:45,680 --> 00:02:49,380 просто будет иметь эффект, мы будем см в компьютере, как мой Mac или PC, 60 00:02:49,380 --> 00:02:51,660 просто перемещая курсор на следующую строку. 61 00:02:51,660 --> 00:02:53,970 Это как удар Введите на клавиатуре. 62 00:02:53,970 --> 00:02:55,580 >> Таким образом, мы видим, что снова в скором времени. 63 00:02:55,580 --> 00:02:58,640 Но во-первых, давайте взглянем на это Другой пример, в случае петель. 64 00:02:58,640 --> 00:03:02,830 Мы должны были это навсегда петлю в последний раз, который был ряд головоломки 65 00:03:02,830 --> 00:03:05,490 что сделал что-то в буквальном смысле forever-- в данном случае, 66 00:03:05,490 --> 00:03:08,360 сказать, привет мир, привет мир, привет мир, привет мир. 67 00:03:08,360 --> 00:03:10,350 Так что это бесконечный цикл, в соответствии с проектом. 68 00:03:10,350 --> 00:03:14,580 >> В C, если мы хотим, чтобы это реализовать Та же идея, мы могли бы просто сделать это. 69 00:03:14,580 --> 00:03:19,570 В то время как верно, Printf привет world-- прямо сейчас в то время, как раз семантически, вид 70 00:03:19,570 --> 00:03:23,090 навевает мысль делать что-то снова, и снова, и снова, 71 00:03:23,090 --> 00:03:23,980 и как долго? 72 00:03:23,980 --> 00:03:27,990 Что ж, напомним, что true-- правда, это только на один или. 73 00:03:27,990 --> 00:03:30,660 >> И правда, это, конечно же, всегда верно. 74 00:03:30,660 --> 00:03:33,060 Так что это своего рода бессмысленная заявление просто сказать, правда. 75 00:03:33,060 --> 00:03:36,890 Но на самом деле, это преднамеренное, потому что, если правда, то как раз всегда верно, 76 00:03:36,890 --> 00:03:40,850 чем в то время как верно как раз подразумевает, если немного косвенно, 77 00:03:40,850 --> 00:03:44,070 что следующие строки кода между этими фигурными скобками 78 00:03:44,070 --> 00:03:48,320 нужно просто выполнить снова, и снова, и снова, и никогда не останавливаться. 79 00:03:48,320 --> 00:03:50,230 >> Но если вы хотите, чтобы ваши петля, чтобы остановить, как мы 80 00:03:50,230 --> 00:03:54,500 в прошлый раз с чем-то вроде это, повторите следующие 50 раз, 81 00:03:54,500 --> 00:03:57,700 в С мы можем сделать то же самое с тем, что называется для loop-- ключевое слово 82 00:03:57,700 --> 00:03:59,330 не будучи в то время как, но для. 83 00:03:59,330 --> 00:04:03,290 И тогда у нас есть некоторый новый синтаксис здесь, с междунар я равен 0, я меньше, чем 50, 84 00:04:03,290 --> 00:04:03,880 я ++. 85 00:04:03,880 --> 00:04:05,430 И мы вернемся к этому. 86 00:04:05,430 --> 00:04:09,660 Но это просто как бы мы перевести множество блоков скреста 87 00:04:09,660 --> 00:04:13,079 к набору C строк кода. 88 00:04:13,079 --> 00:04:14,450 >> В то же время, рассматривать переменные. 89 00:04:14,450 --> 00:04:16,540 И в самом деле, мы просто видел один минуту назад. 90 00:04:16,540 --> 00:04:21,220 И в случае нуля, если мы хотел объявить переменную I 91 00:04:21,220 --> 00:04:24,590 для я быть целым числом, просто число, и мы хотим, чтобы установить его до некоторого значения, 92 00:04:24,590 --> 00:04:28,410 мы будем использовать этот оранжевый блок here-- установить я до 0. 93 00:04:28,410 --> 00:04:30,800 >> И мы видим сегодня и за его пределами, так же, как на прошлой неделе, 94 00:04:30,800 --> 00:04:33,850 программисты делают почти всегда начать отсчет с нуля, на самом деле 95 00:04:33,850 --> 00:04:34,950 условно. 96 00:04:34,950 --> 00:04:37,250 Но и потому, что отзывает наше обсуждение двоичной, 97 00:04:37,250 --> 00:04:39,990 наименьшее число вы можете представлять с любым количеством битов 98 00:04:39,990 --> 00:04:41,640 только собирается быть 0 сама. 99 00:04:41,640 --> 00:04:45,190 И поэтому мы как правило, начинают инициализируя даже наши переменные 0. 100 00:04:45,190 --> 00:04:47,710 >> А в С, чтобы сделать то же самое, мы будем говорить Int 101 00:04:47,710 --> 00:04:50,110 для целого числа, я только по соглашению. 102 00:04:50,110 --> 00:04:53,390 Я мог бы назвать эту переменную все, что я хочу, так же, как в пустом месте. 103 00:04:53,390 --> 00:04:57,770 И тогда равна 0 только правопреемников значение 0 с правой стороны 104 00:04:57,770 --> 00:05:01,319 и помещает его в переменную, или контейнер для хранения там, на левой стороне. 105 00:05:01,319 --> 00:05:04,360 И полу-ободочной кишки, как мы see-- и мы уже видели некоторые из этих already-- 106 00:05:04,360 --> 00:05:06,530 просто означает конец мысли. 107 00:05:06,530 --> 00:05:09,430 Продолжайте делать что-то другое на линиях, которые следуют. 108 00:05:09,430 --> 00:05:11,330 >> Теперь, что касается логических выражений? 109 00:05:11,330 --> 00:05:14,320 Напомним, что в пустом месте, они были выражением 110 00:05:14,320 --> 00:05:16,740 которые являются либо истинными или false-- вопросы, 111 00:05:16,740 --> 00:05:18,910 на самом деле, которые являются либо истинными, либо ложными. 112 00:05:18,910 --> 00:05:21,960 Таким образом, в случае нуля, мы могли бы задать простой вопрос, как это, 113 00:05:21,960 --> 00:05:24,586 это я меньше, чем 50? 114 00:05:24,586 --> 00:05:25,710 Так что я, опять же, является целым числом. 115 00:05:25,710 --> 00:05:27,210 Может быть, мы используем его в программе Скретч 116 00:05:27,210 --> 00:05:29,310 следить за счетом или что-то типа того. 117 00:05:29,310 --> 00:05:33,810 Так что этот синтаксис здесь в пустом месте просто означает, это я меньше, чем 50? 118 00:05:33,810 --> 00:05:37,330 Ну, к счастью, что-то простой в C. И переводить, 119 00:05:37,330 --> 00:05:41,780 это мы бы просто сказать, что я меньше чем 50, используя знакомый ключ 120 00:05:41,780 --> 00:05:42,850 на клавиатуре. 121 00:05:42,850 --> 00:05:45,141 >> В то же время, если вы хотите сказать что-то более общее, 122 00:05:45,141 --> 00:05:49,890 как, хорошо, х меньше у, где каждый х и у сами по себе являются переменными? 123 00:05:49,890 --> 00:05:52,280 Мы можем сделать то же самое в С, до тех пор, как мы 124 00:05:52,280 --> 00:05:53,942 создали эти переменные уже. 125 00:05:53,942 --> 00:05:55,650 И мы увидим, как сделать это в скором времени. 126 00:05:55,650 --> 00:05:58,590 Мы просто сказали бы х меньше у. 127 00:05:58,590 --> 00:06:00,530 >> Таким образом, вы начинаете увидеть некоторые общие черты. 128 00:06:00,530 --> 00:06:03,490 И те люди, которые сделали Царапины были, конечно, 129 00:06:03,490 --> 00:06:05,250 вдохновлены некоторые из этих основных идей. 130 00:06:05,250 --> 00:06:10,350 И вы увидите, этот вид Синтаксис во многих languages-- 131 00:06:10,350 --> 00:06:12,160 а не просто на пустом месте, не просто C, но Python, 132 00:06:12,160 --> 00:06:14,790 и JavaScript, и другие языки до сих пор. 133 00:06:14,790 --> 00:06:18,270 >> Рассмотрим другую конструкцию от C, понятие состояния, 134 00:06:18,270 --> 00:06:20,370 делать что-то условно. 135 00:06:20,370 --> 00:06:22,720 Если что-то верно, то это сделать. 136 00:06:22,720 --> 00:06:24,457 Если что-то еще, правда, сделать это. 137 00:06:24,457 --> 00:06:27,040 Это своего рода программирование эквивалент развилки. 138 00:06:27,040 --> 00:06:29,730 Может быть, это двусторонняя вилка, трехходовой вилка, или больше. 139 00:06:29,730 --> 00:06:32,800 И в пустом месте, мы могли бы иметь видел что-то вроде этого. 140 00:06:32,800 --> 00:06:34,010 >> Так что это одна большая одна. 141 00:06:34,010 --> 00:06:36,750 Но рассмотрим относительное Простота логики. 142 00:06:36,750 --> 00:06:44,010 Если х меньше у, то говорят х меньше чем у, иначе, если х больше у, 143 00:06:44,010 --> 00:06:46,230 то говорят х больше у. 144 00:06:46,230 --> 00:06:48,300 И тогда, по логике вещей, если вы вспомните нуля 145 00:06:48,300 --> 00:06:52,610 или просто свой собственный человеческой интуиции, хорошо, если х не больше, чем у, и х 146 00:06:52,610 --> 00:06:57,000 не меньше, чем у, то, конечно, х будет равен у. 147 00:06:57,000 --> 00:06:59,690 Так что в этом случае, по вложенности эти Скретч блоки, 148 00:06:59,690 --> 00:07:02,580 мы можем достичь трех способ развилка? 149 00:07:02,580 --> 00:07:04,980 >> В то же время, если мы хотим сделать это в C, это возможно 150 00:07:04,980 --> 00:07:08,420 выглядит немного simpler-- по крайней мере, как только вы получите знакомы с синтаксисом. 151 00:07:08,420 --> 00:07:12,050 Если х меньше у, Printf х меньше у. 152 00:07:12,050 --> 00:07:16,140 Иначе, если х больше у, Printf х больше у. 153 00:07:16,140 --> 00:07:21,210 Иначе Printf х равно y-- и, опять же, с теми, обратная косая черта заканчивается просто 154 00:07:21,210 --> 00:07:24,160 для тех новых линий, так что если вы на самом деле запустили этот вид программы 155 00:07:24,160 --> 00:07:25,940 было бы просто переместить курсор в конечном счете, 156 00:07:25,940 --> 00:07:28,100 к следующей строке экрана. 157 00:07:28,100 --> 00:07:31,270 >> Теперь, тем временем Царапина была другая более сложные функции, только 158 00:07:31,270 --> 00:07:34,320 некоторые из которых мы собираемся изначально двигаться по всему миру, С. 159 00:07:34,320 --> 00:07:37,010 И один из них был называется списком в пустом месте. 160 00:07:37,010 --> 00:07:39,100 И это был особенный тип переменной, 161 00:07:39,100 --> 00:07:42,840 позволило хранить несколько вещей в нем назад, к спине, к спине, к спине. 162 00:07:42,840 --> 00:07:45,540 >> В C, он не имеет списки, сами по себе, но что-то 163 00:07:45,540 --> 00:07:48,090 которые в более общем смысле называется массивы, хотя мы 164 00:07:48,090 --> 00:07:50,590 вернуться позже в этом семестре смотреть на что-то 165 00:07:50,590 --> 00:07:52,780 называется список, или действительно связанный список. 166 00:07:52,780 --> 00:07:55,510 Но сейчас, ближе всего эквивалент в C для нас 167 00:07:55,510 --> 00:07:57,345 будет что-то называется массивом. 168 00:07:57,345 --> 00:07:59,740 И массив просто особый тип переменной 169 00:07:59,740 --> 00:08:03,160 что позволяет хранить данные назад, к спине, к спине, к спине. 170 00:08:03,160 --> 00:08:05,840 >> И действительно, в пустом месте, если мы хотим получить доступ 171 00:08:05,840 --> 00:08:09,030 первый элемент массива или list-- и я буду называть его, 172 00:08:09,030 --> 00:08:13,600 По соглашению, ARGV, аргумент вектор, но об этом в скором времени. 173 00:08:13,600 --> 00:08:17,090 Если я хочу, чтобы получить на первом элементе из ARGV, в мире нуля 174 00:08:17,090 --> 00:08:20,930 вы на самом деле, как правило, начать отсчет с 1. 175 00:08:20,930 --> 00:08:22,850 >> И таким образом я мог бы получить пункт 1 ARGV. 176 00:08:22,850 --> 00:08:26,310 Это просто, как реализуется MIT понятие списков. 177 00:08:26,310 --> 00:08:29,860 Но в C, я собираюсь проще просто сказать, ARGV, 178 00:08:29,860 --> 00:08:32,758 что опять-таки это имя моего list-- или быть ясно, массив. 179 00:08:32,758 --> 00:08:34,549 А если я хочу первым элементы, я собираюсь 180 00:08:34,549 --> 00:08:37,890 использовать квадратные скобки, которых вы возможно, не часто используется под клавиатурой. 181 00:08:37,890 --> 00:08:40,150 >> Но 0 просто означает, поймите меня первым. 182 00:08:40,150 --> 00:08:42,160 Так что в некоторых случаях, и как проходит время, мы будем 183 00:08:42,160 --> 00:08:44,570 чтобы начать видеть эти дихотомии между нуля и С, 184 00:08:44,570 --> 00:08:46,070 в результате чего Царапина использует один. 185 00:08:46,070 --> 00:08:47,670 Мы в C использовать 0 здесь. 186 00:08:47,670 --> 00:08:49,420 Но вы быстро поймете, как только вы понимаете 187 00:08:49,420 --> 00:08:52,920 основы каждого языка, т.е. эти вещи начинают становиться все более 188 00:08:52,920 --> 00:08:56,860 знакомую по практике и практике. 189 00:08:56,860 --> 00:08:59,700 >> Так что давайте на самом деле теперь посмотрите на программу. 190 00:08:59,700 --> 00:09:04,031 Здесь должно быть первым из нашей C Исходный код для полных программ. 191 00:09:04,031 --> 00:09:06,280 А программа, которую мы предложить для рассмотрения 192 00:09:06,280 --> 00:09:09,340 это тот, который эквивалентен к этому ранее Скретч кусок. 193 00:09:09,340 --> 00:09:13,210 >> Так что здесь, у нас есть то, что возможно, самая простая программа C 194 00:09:13,210 --> 00:09:15,410 Вы можете написать, что на самом деле что-то делает. 195 00:09:15,410 --> 00:09:18,250 Теперь мы рассмотрим прошлое, на данный момент, уже включают в себя, 196 00:09:18,250 --> 00:09:21,190 стандарт io.h, и эти угол скобки, и INT, и пустота, 197 00:09:21,190 --> 00:09:22,840 и фигурных скобок, и тому подобное. 198 00:09:22,840 --> 00:09:25,390 >> И давайте просто сосредоточиться на то, что, по крайней мере, интуитивно, 199 00:09:25,390 --> 00:09:26,860 может выскочить на тебя уже. 200 00:09:26,860 --> 00:09:30,300 На самом деле, главным образом, я не обязательно знать, что это такое, 201 00:09:30,300 --> 00:09:34,580 но так же, как было нуля, что, когда зеленый флаг щелкнул кусок головоломки, 202 00:09:34,580 --> 00:09:39,070 так что делает C в качестве языка программирования имеют основную часть кода, который 203 00:09:39,070 --> 00:09:43,380 запускается на выполнение по умолчанию. И действительно, это в буквальном смысле будет называться главной. 204 00:09:43,380 --> 00:09:44,720 >> Таким образом, основная функция. 205 00:09:44,720 --> 00:09:48,720 И это специальная функция, которая существует в C, что при запуске программы, 206 00:09:48,720 --> 00:09:52,720 это главный, который получает в ведении по умолчанию. В мире нуля, 207 00:09:52,720 --> 00:09:56,970 это, как правило, когда зеленый флаг нажал, что получил по умолчанию запускается. 208 00:09:56,970 --> 00:10:01,130 >> В то же время, мы уже видели это раньше, Printf или печать отформатирован, это 209 00:10:01,130 --> 00:10:05,620 будет функция, которая поставляется с C, наряду с целым букетом других, 210 00:10:05,620 --> 00:10:10,140 что будет время и время от опять же, для того, чтобы сделать точно 211 00:10:10,140 --> 00:10:12,450 как предполагает его название, напечатать что-нибудь. 212 00:10:12,450 --> 00:10:13,500 Что мы хотим напечатать? 213 00:10:13,500 --> 00:10:15,770 Ну, мы увидим, что заключая символов 214 00:10:15,770 --> 00:10:18,680 как these-- привет мир, обратная косая п в двойных кавычках, 215 00:10:18,680 --> 00:10:23,040 мы можем сказать точно Printf что печатать на экране. 216 00:10:23,040 --> 00:10:26,430 >> Но для того, чтобы сделать что мы, к сожалению, 217 00:10:26,430 --> 00:10:30,010 нужно взять что-то уже загадочным для нас, людей, 218 00:10:30,010 --> 00:10:34,510 но по крайней мере это несколько readable-- острые включают, стандарт io.h, INT, 219 00:10:34,510 --> 00:10:39,340 Основной, недействительным, Printf, все магические заговоры мы только что видели на экране. 220 00:10:39,340 --> 00:10:42,470 Но мы на самом деле должны пойти более аркан до сих пор. 221 00:10:42,470 --> 00:10:47,140 Сначала нужно перевести код что мы пишем в машинный код. 222 00:10:47,140 --> 00:10:51,370 И помните из прошлой недели, что машины, по крайней мере, те, которые мы знаем здесь, 223 00:10:51,370 --> 00:10:54,450 в конце дня только понимать, нули и единицы. 224 00:10:54,450 --> 00:10:58,100 >> И, Боже мой, если бы нам пришлось писать эти нули и единицы на самом деле программы, 225 00:10:58,100 --> 00:11:01,260 это было бы очень, очень быстро принять удовольствие от чего-либо. 226 00:11:01,260 --> 00:11:05,150 Но оказывается, за последнюю неделю, что эти модели нулей и единиц 227 00:11:05,150 --> 00:11:06,400 просто имеют особое значение. 228 00:11:06,400 --> 00:11:08,500 В некоторых контекстах, они могут означать число. 229 00:11:08,500 --> 00:11:11,840 >> В некоторых случаях, они могут означать буквы, или цвета, или любое количество 230 00:11:11,840 --> 00:11:14,710 других абстракций там на. 231 00:11:14,710 --> 00:11:18,450 Но так же, как ваш компьютер имеет центральный процессор, центральный процессор, 232 00:11:18,450 --> 00:11:20,390 или мозги внутри вашего компьютера. 233 00:11:20,390 --> 00:11:22,240 Это, как правило, Intel внутри, потому что это 234 00:11:22,240 --> 00:11:24,900 одна из крупнейших компаний что делает процессоры для компьютеров. 235 00:11:24,900 --> 00:11:28,910 >> Ну, процессоры Intel и другие просто решили заранее 236 00:11:28,910 --> 00:11:33,970 что некоторые модели нулей и из них означают конкретные вещи. 237 00:11:33,970 --> 00:11:37,040 Некоторые модели нулей и единиц будет означать, распечатать это на экран, 238 00:11:37,040 --> 00:11:39,710 или добавить эти два числа, или вычесть эти два числа, 239 00:11:39,710 --> 00:11:43,310 или переместить эту часть данных из память моего компьютера здесь, 240 00:11:43,310 --> 00:11:47,870 или любое количество других очень низкого уровня, но в конечном счете, полезно, операции. 241 00:11:47,870 --> 00:11:53,022 Но, к счастью, мы, люди не собираются необходимо знать этот уровень детализации. 242 00:11:53,022 --> 00:11:56,230 В самом деле, так же, как в прошлый раз, когда мы абстрагируется снова, и снова, и снова, 243 00:11:56,230 --> 00:11:58,930 Здание с очень низкого уровня примитивы как нулей и единиц 244 00:11:58,930 --> 00:12:01,160 к повышению уровня понятий как цифры и буквы, 245 00:12:01,160 --> 00:12:04,330 и цвета, и многое другое, так мы можем как программисты 246 00:12:04,330 --> 00:12:07,080 стоять на плечах другие, которые приходят перед нами 247 00:12:07,080 --> 00:12:11,260 и использовать программное обеспечение, что и другие люди писали ранее us-- 248 00:12:11,260 --> 00:12:14,340 а именно программы называется компиляторы. 249 00:12:14,340 --> 00:12:17,770 >> C является языком, который как правило, составляются, 250 00:12:17,770 --> 00:12:22,130 что означает преобразованы из Исходный код в машинный код. 251 00:12:22,130 --> 00:12:25,230 В частности, это означает, что в том, что если у вас есть свой источник 252 00:12:25,230 --> 00:12:29,530 код, который вы сами пишете, как мы скоро будет через мгновение на экране, 253 00:12:29,530 --> 00:12:33,140 и вы хотите, чтобы преобразовать его в конечном счете, к машине code-- 254 00:12:33,140 --> 00:12:37,100 эти нули и единицы, которые только ваш Mac или ваш компьютер 255 00:12:37,100 --> 00:12:41,230 understands-- вы получили первый кормить этот исходный код в качестве 256 00:12:41,230 --> 00:12:46,340 вход в специальный Программа под названием компилятор, 257 00:12:46,340 --> 00:12:48,974 выход которого мы увидим это машинный код. 258 00:12:48,974 --> 00:12:51,890 И, действительно, в прошлый раз мы говорили о, на самом деле, в конце концов, 259 00:12:51,890 --> 00:12:52,610 решение проблем. 260 00:12:52,610 --> 00:12:53,360 У вас есть входы. 261 00:12:53,360 --> 00:12:54,318 И у вас есть выходы. 262 00:12:54,318 --> 00:12:56,560 И у вас есть какие-то алгоритма в середине. 263 00:12:56,560 --> 00:12:59,830 >> Алгоритмы могут быть, конечно, реализованы в программном обеспечении, 264 00:12:59,830 --> 00:13:02,900 как мы видели с псевдокода на прошлой неделе и, как мы увидим, с фактическим кодом 265 00:13:02,900 --> 00:13:03,490 на этой неделе. 266 00:13:03,490 --> 00:13:06,430 И поэтому компилятор на самом деле просто имеет набор алгоритмов внутри 267 00:13:06,430 --> 00:13:10,060 об этом, что знают, как преобразовать специальные ключевые слова, 268 00:13:10,060 --> 00:13:12,180 как основной, и Printf, и другие, которые мы просто 269 00:13:12,180 --> 00:13:17,620 увидел в узорах и нулей те, что Intel внутри и другие процессоры 270 00:13:17,620 --> 00:13:20,020 на самом деле понимает. 271 00:13:20,020 --> 00:13:22,460 Итак, как мы это сделаем? 272 00:13:22,460 --> 00:13:24,470 Откуда мы получаем компилятор? 273 00:13:24,470 --> 00:13:26,400 >> Большинство из нас здесь есть Mac или ПК. 274 00:13:26,400 --> 00:13:29,152 И вы работаете Mac OS, или Для Windows или Linux или Solaris, 275 00:13:29,152 --> 00:13:30,860 или любое количество других операционные системы. 276 00:13:30,860 --> 00:13:32,568 И действительно, мы могли бы выйти на сеть 277 00:13:32,568 --> 00:13:35,710 и скачать компилятор для вашего Mac или ПК 278 00:13:35,710 --> 00:13:37,360 для конкретной операционной системы. 279 00:13:37,360 --> 00:13:39,617 Но мы все были бы на разные страницы, так сказать. 280 00:13:39,617 --> 00:13:41,450 Мы должны были бы немного различные конфигурации. 281 00:13:41,450 --> 00:13:43,210 И вещи не будут работать все равно. 282 00:13:43,210 --> 00:13:45,280 И, действительно, в эти дни многие из нас не используют 283 00:13:45,280 --> 00:13:47,516 программное обеспечение, которое работает только на наших ноутбуках. 284 00:13:47,516 --> 00:13:49,390 Вместо этого мы используем что-то как в браузере, 285 00:13:49,390 --> 00:13:52,930 позволяет нам получить доступ к веб- приложения в облаке. 286 00:13:52,930 --> 00:13:55,630 А позже в этом семестре, мы будем делать именно это. 287 00:13:55,630 --> 00:13:59,660 Мы будем писать приложения или программного обеспечения с использованием code-- не C, 288 00:13:59,660 --> 00:14:02,860 но и другие языки, такие как Python и JavaScript--, которые работают в облаке. 289 00:14:02,860 --> 00:14:05,860 >> И сделать это, мы сами в течение семестра 290 00:14:05,860 --> 00:14:11,890 будет на самом деле использовать облако основе среда известна как CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 Это веб-программирование охрана окружающей среды, или комплексное развитие 292 00:14:16,030 --> 00:14:20,610 среда, язь, который построен на вершине некоторых Программное обеспечение с открытым исходным кодом под названием Cloud 9. 293 00:14:20,610 --> 00:14:22,966 И мы сделали некоторые педагогические упрощений к нему 294 00:14:22,966 --> 00:14:25,840 с тем, чтобы скрыть определенные черты первые недели, которые нам не нужны, 295 00:14:25,840 --> 00:14:27,770 после чего вы можете раскрыть их и сделать большинство 296 00:14:27,770 --> 00:14:29,400 все, что вы хотите с окружающей средой. 297 00:14:29,400 --> 00:14:32,470 >> И это позволяет нам, тоже, чтобы предварительно установить определенное программное обеспечение. 298 00:14:32,470 --> 00:14:35,330 Такие вещи, как так называемый CS50 библиотека, которую мы скоро увидим 299 00:14:35,330 --> 00:14:39,210 дает нам в C с некоторыми дополнительные функциональные возможности. 300 00:14:39,210 --> 00:14:44,392 Так что если вы идете, в конечном счете, CS50.io, Вам будет предложено войти в систему, 301 00:14:44,392 --> 00:14:46,350 и как только вы делаете, и создать счет бесплатно, 302 00:14:46,350 --> 00:14:52,150 вы будете иметь возможность получения доступа к среда, которая выглядит совсем так. 303 00:14:52,150 --> 00:14:53,760 >> Теперь, это находится в режиме по умолчанию. 304 00:14:53,760 --> 00:14:55,650 Все красиво и ярко на экране. 305 00:14:55,650 --> 00:14:57,941 Многие из нас имеют привычку работающих на CS50 кусок, что это 306 00:14:57,941 --> 00:14:59,150 довольно поздно в ночь. 307 00:14:59,150 --> 00:15:02,400 И вот некоторые из вас могли бы предпочесть превратить его в ночной режим, если можно так выразиться. 308 00:15:02,400 --> 00:15:05,550 >> Но, в конечном счете, что вы собирается увидеть в CS50 IDE 309 00:15:05,550 --> 00:15:08,340 есть три различных areas-- область на левой части, где 310 00:15:08,340 --> 00:15:12,604 ваши файлы будут в облако, область в правом верхнем углу 311 00:15:12,604 --> 00:15:14,270 где ваш код будет редактировать. 312 00:15:14,270 --> 00:15:16,650 Вы сможете открыть отдельные вкладки для любой программы 313 00:15:16,650 --> 00:15:19,670 что вы пишете в этом семестре внутри этого в верхнем правом углу. 314 00:15:19,670 --> 00:15:23,070 И тогда самый arcanely, и тем не менее мощно, 315 00:15:23,070 --> 00:15:26,610 будет ли это быть на снизу известный как окно терминала. 316 00:15:26,610 --> 00:15:29,450 >> Это старая школа Интерфейс командной строки, 317 00:15:29,450 --> 00:15:32,240 или CLI, что позволяет выполнять команды 318 00:15:32,240 --> 00:15:35,260 на computer-- в данном случае, компьютер в cloud-- 319 00:15:35,260 --> 00:15:39,090 делать такие вещи, как скомпилировать код из исходного кода в машинный код, 320 00:15:39,090 --> 00:15:43,600 запускать программы, или начать свой веб-сервер, или для доступа к базе данных, 321 00:15:43,600 --> 00:15:47,454 и любое количество других методов что мы начнем использовать в скором времени. 322 00:15:47,454 --> 00:15:49,370 Но чтобы попасть туда, мы собирается на самом деле есть 323 00:15:49,370 --> 00:15:51,240 выходить в интернет и начать играть. 324 00:15:51,240 --> 00:15:54,399 И сделать это, давайте сначала начать мастерить с главной, 325 00:15:54,399 --> 00:15:55,940 и написать основную часть программы. 326 00:15:55,940 --> 00:15:59,170 И давайте использовать эту функцию Printf, который мы использовали ранее, 327 00:15:59,170 --> 00:16:01,050 просто что-то сказать. 328 00:16:01,050 --> 00:16:04,910 >> Так вот я уже внутри CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Я вошел заранее. 330 00:16:05,930 --> 00:16:07,360 И я полный скрининг окно. 331 00:16:07,360 --> 00:16:09,670 И так, в конечном счете, вы тоже в ближайшие проблемы 332 00:16:09,670 --> 00:16:12,960 будут следовать аналогичные шаги, предоставит документацию. 333 00:16:12,960 --> 00:16:16,360 Так что вам не нужно беспокоиться о поглощая каждый маленький технический шаг 334 00:16:16,360 --> 00:16:17,730 что я делаю здесь сегодня. 335 00:16:17,730 --> 00:16:19,222 >> Но вы получите экран, как это. 336 00:16:19,222 --> 00:16:20,430 Я, случается в ночном режиме. 337 00:16:20,430 --> 00:16:22,944 И вы можете украсить все вверх путем отключения ночного режима. 338 00:16:22,944 --> 00:16:24,860 И в конце день, вы будете видеть 339 00:16:24,860 --> 00:16:30,090 эти три основных areas-- файла браузер слева, кодовые вкладки наверху, 340 00:16:30,090 --> 00:16:32,430 и окно терминала в нижней части. 341 00:16:32,430 --> 00:16:34,890 >> Позвольте мне идти вперед и написать свою первую программу. 342 00:16:34,890 --> 00:16:42,300 Я собираюсь превентивно идти в файл, Сохранить и сохраните свой файл как hello.c. 343 00:16:42,300 --> 00:16:46,850 Действительно, в соответствии с соглашением, любая программа, которую мы пишут, что написано на языке C 344 00:16:46,850 --> 00:16:49,739 должен быть назван что-то точка с, в соответствии с соглашением. 345 00:16:49,739 --> 00:16:53,030 Так что я собираюсь назвать его hello.c, потому что Я просто хочу сказать привет к миру. 346 00:16:53,030 --> 00:16:54,820 Теперь я собираюсь увеличить , и нажмите кнопку Сохранить. 347 00:16:54,820 --> 00:16:58,180 И все, что я сейчас здесь вкладка в котором я могу начать писать код. 348 00:16:58,180 --> 00:16:59,490 >> Это не будет компилировать. 349 00:16:59,490 --> 00:17:00,300 Это ничего не значит. 350 00:17:00,300 --> 00:17:02,750 И поэтому даже если я преобразовал это нулей и единиц, 351 00:17:02,750 --> 00:17:05,390 процессор будет иметь не Идея, что происходит вокруг. 352 00:17:05,390 --> 00:17:14,170 Но если я пишу строки, которые соответствуют с conventions-- C представляют собой С, в 353 00:17:14,170 --> 00:17:20,150 опять же, это language-- с синтаксисом, как это, Printf привет world-- и я имею 354 00:17:20,150 --> 00:17:22,210 получили комфортно делая это в течение долгого времени. 355 00:17:22,210 --> 00:17:24,510 Так что я не думаю, что я сделал любые типографские ошибки. 356 00:17:24,510 --> 00:17:27,910 >> Но неизменно, самый первый раз, когда вы сделаете это, вы будете. 357 00:17:27,910 --> 00:17:31,090 И то, что я собираюсь сделать, может очень а не работать для вас в первый раз. 358 00:17:31,090 --> 00:17:33,610 И это совершенно нормально, потому что прямо сейчас вы 359 00:17:33,610 --> 00:17:37,662 может просто увидеть целую много новизне, но с течением времени, как только вы освоитесь 360 00:17:37,662 --> 00:17:39,870 с этой средой, и этот язык, и другие, 361 00:17:39,870 --> 00:17:42,370 вы начнете видеть вещи, которые либо правильно или неправильно. 362 00:17:42,370 --> 00:17:44,369 >> И это то, что обучения стипендиатов и конечно 363 00:17:44,369 --> 00:17:48,780 помощники получают так хорошо в течение долгого времени, является пятнистость ошибки или ошибки в коде. 364 00:17:48,780 --> 00:17:52,110 Но я утверждаю, что есть нет ошибок в этом коде. 365 00:17:52,110 --> 00:17:53,990 Так что я теперь хочу, чтобы запустить эту программу. 366 00:17:53,990 --> 00:17:57,440 >> Теперь на моем собственном Mac или PC, я в привычка двойных иконок щелкая 367 00:17:57,440 --> 00:17:59,350 когда я хочу, чтобы запустить какую-то программу. 368 00:17:59,350 --> 00:18:01,080 Но это не модель здесь. 369 00:18:01,080 --> 00:18:04,570 В этой среде, которая является CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Мы используем операционную Система под названием Linux. 371 00:18:07,192 --> 00:18:09,900 Linux напоминает другое операционная система, как правило, известны 372 00:18:09,900 --> 00:18:10,850 в Unix. 373 00:18:10,850 --> 00:18:16,340 И Linux особенно известен имеющий командной строки по окружающей среде, CLI. 374 00:18:16,340 --> 00:18:20,070 Теперь мы используем специфически вкус Linux под названием Ubuntu. 375 00:18:20,070 --> 00:18:22,770 И Ubuntu просто определенная версия Linux. 376 00:18:22,770 --> 00:18:27,900 >> Но эти системы Linux в эти дни делают на самом деле поставляются с графическим интерфейсом пользователя. 377 00:18:27,900 --> 00:18:30,360 И тот, который мы, случается, использовать здесь веб-. 378 00:18:30,360 --> 00:18:32,735 Так что это может выглядеть даже немного отличается от чего-то 379 00:18:32,735 --> 00:18:35,310 Вы сами могли бы иметь видел или запустить в прошлом. 380 00:18:35,310 --> 00:18:37,910 >> Так что я собираюсь идти вперед сейчас и сделайте следующее. 381 00:18:37,910 --> 00:18:40,950 Я сохранил этот файл как hello.c. 382 00:18:40,950 --> 00:18:47,350 Я собираюсь идти вперед и Тип clanghello.c Так Clang 383 00:18:47,350 --> 00:18:49,850 для языка C является компилятор. 384 00:18:49,850 --> 00:18:51,952 Это предварительно установлена ​​в CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 И вы можете загрузить и абсолютно установить это на вашем собственном Mac или PC. 386 00:18:54,910 --> 00:18:57,910 >> Но, опять же, вы бы не все предварительная конфигурация делается для вас. 387 00:18:57,910 --> 00:19:00,940 Так что на данный момент, я просто собирается запустить clanghello.c. 388 00:19:00,940 --> 00:19:03,240 А теперь обратите внимание этот синтаксис здесь, в конечном счете 389 00:19:03,240 --> 00:19:06,930 понимают, просто означает, что я нахожусь в папку или каталог с именем рабочего пространства. 390 00:19:06,930 --> 00:19:11,030 Этот знак доллара просто конвенция смысла, введите ваши команды здесь. 391 00:19:11,030 --> 00:19:14,560 >> Это то, что называется быстрое, просто по соглашению является знак доллара. 392 00:19:14,560 --> 00:19:19,130 И если я иду вперед сейчас и нажмите Enter, ничего, кажется, не произошло. 393 00:19:19,130 --> 00:19:20,930 Но это на самом деле хорошая вещь. 394 00:19:20,930 --> 00:19:23,650 Чем меньше, что происходит на ваш экран, тем более вероятно, 395 00:19:23,650 --> 00:19:26,710 ваш код должен быть правильным, по крайней мере, синтаксически. 396 00:19:26,710 --> 00:19:29,120 >> Так что, если я хочу, чтобы запустить эту программа, что мне делать? 397 00:19:29,120 --> 00:19:33,770 Что ж, получается, что имя по умолчанию в соответствии с соглашением 398 00:19:33,770 --> 00:19:38,854 для программ, когда вы не укажете Фамилия, имя, ваша программа просто a.out. 399 00:19:38,854 --> 00:19:41,270 И этот синтаксис тоже, вы будете ознакомиться с ранее долго. 400 00:19:41,270 --> 00:19:47,500 >> Дот слэш просто означает, эй, CS50 IDE, запустите программу под названием a.out 401 00:19:47,500 --> 00:19:49,400 что внутри моего текущего каталога. 402 00:19:49,400 --> 00:19:51,520 Это точка означает текущий каталог. 403 00:19:51,520 --> 00:19:55,040 И мы посмотрим, что другие такие последовательности символов означает, в скором времени. 404 00:19:55,040 --> 00:19:58,430 >> Так что здесь мы идем, Enter, привет мир. 405 00:19:58,430 --> 00:20:00,080 И вы заметите, что случилось? 406 00:20:00,080 --> 00:20:01,580 Мало того, что это напечатать привет мир. 407 00:20:01,580 --> 00:20:05,990 Он также переместил курсор на следующую строку. 408 00:20:05,990 --> 00:20:07,160 >> И почему это было? 409 00:20:07,160 --> 00:20:12,400 Какой код, который мы писали ранее что гарантировал, что курсор будет 410 00:20:12,400 --> 00:20:14,882 перейти на следующую строку? 411 00:20:14,882 --> 00:20:16,840 Забавно, что про компьютер это только собирается 412 00:20:16,840 --> 00:20:18,570 делать буквально то, что вы скажете ей сделать. 413 00:20:18,570 --> 00:20:26,050 >> Так что если вы скажите ему PRINTF привет, запятая, пробел, мир, близко цитаты, 414 00:20:26,050 --> 00:20:29,090 это буквально только собирается печатать эти символы. 415 00:20:29,090 --> 00:20:31,980 Но у меня был этот особый характер в конце, напомним, обратной косой п. 416 00:20:31,980 --> 00:20:34,230 И вот что обеспечило что персонаж пошел 417 00:20:34,230 --> 00:20:36,570 к следующей строке экрана. 418 00:20:36,570 --> 00:20:38,097 >> На самом деле, позвольте мне пойти и сделать это. 419 00:20:38,097 --> 00:20:39,430 Позвольте мне идти вперед и удалить это. 420 00:20:39,430 --> 00:20:41,180 Теперь, обратите внимание, что Верхняя часть моего экрана есть 421 00:20:41,180 --> 00:20:42,890 маленький красный свет в вкладка с указанием, 422 00:20:42,890 --> 00:20:45,047 Эй, вы не сохранили файл. 423 00:20:45,047 --> 00:20:47,880 Так что я собираюсь идти вперед с контролем S или команду S, сохраните файл. 424 00:20:47,880 --> 00:20:51,130 Теперь goes-- пошел на moment-- зеленый. 425 00:20:51,130 --> 00:20:53,760 А теперь он вернулся к просто быть рядом значок. 426 00:20:53,760 --> 00:21:01,860 >> Если я теперь запустить clanghello.c снова, Enter, точка слэш, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 вы увидите, что она по-прежнему работает. 428 00:21:04,110 --> 00:21:06,020 Но это, возможно, немного глючит. 429 00:21:06,020 --> 00:21:08,714 Сейчас мой prompt-- рабочее пространство, а затем, что знак доллара, 430 00:21:08,714 --> 00:21:10,880 а затем мой фактический prompt-- все в той же строке. 431 00:21:10,880 --> 00:21:14,540 Так что это, конечно, эстетическая ошибка, даже если это на самом деле не логическая ошибка. 432 00:21:14,540 --> 00:21:16,250 >> Так что я собираюсь отменить то, что я только что сделал. 433 00:21:16,250 --> 00:21:18,560 Я собираюсь повторно запустить a.out. 434 00:21:18,560 --> 00:21:22,710 Обратите внимание, я добавил символ новой строки обратно. 435 00:21:22,710 --> 00:21:24,280 Я сохранил файл. 436 00:21:24,280 --> 00:21:31,630 >> Так что я собираюсь повторно запустить a.out, и-- Проклятье, ошибка, ошибка, это означает ошибку. 437 00:21:31,630 --> 00:21:35,020 Таким образом, ошибка в том, что несмотря на то, Я добавил обратный слэш н там, 438 00:21:35,020 --> 00:21:41,180 повторно сохранены, повторно запустил программу, поведение было то же самое. 439 00:21:41,180 --> 00:21:42,640 Почему бы это? 440 00:21:42,640 --> 00:21:43,910 >> Я отсутствует шаг, не так ли? 441 00:21:43,910 --> 00:21:47,620 Это ключевой шаг раньше было то, что у вас есть когда вы, целью которых изменить исходный код, 442 00:21:47,620 --> 00:21:49,610 оказывается также запустить это через компилятор 443 00:21:49,610 --> 00:21:51,102 снова так что вы получите новый машинный код. 444 00:21:51,102 --> 00:21:52,810 И машинный код, нули и единицы, 445 00:21:52,810 --> 00:21:56,260 будут почти идентичны, но не совсем так, потому что нам нужно, 446 00:21:56,260 --> 00:21:57,510 конечно, что новая линия. 447 00:21:57,510 --> 00:22:02,640 >> Таким образом, чтобы исправить это, я буду нуждаться перезапускать clanghello.c, введите, точка 448 00:22:02,640 --> 00:22:03,800 слэш, a.out. 449 00:22:03,800 --> 00:22:08,402 И теперь, привет мир вернулся туда, где я ожидаю, что это будет. 450 00:22:08,402 --> 00:22:09,610 Так что это все прекрасно и хорошо. 451 00:22:09,610 --> 00:22:13,150 Но a.out это довольно глупое имя для программа, даже если это случается, 452 00:22:13,150 --> 00:22:16,530 по историческим причинам, default-- означает монтажные выходы. 453 00:22:16,530 --> 00:22:20,780 >> Но позвольте мне идти вперед здесь и делать это по-разному. 454 00:22:20,780 --> 00:22:24,760 Я хочу, чтобы мой привет мир программа на самом деле можно назвать привет. 455 00:22:24,760 --> 00:22:28,320 Так что, если бы это был значок на моем рабочий стол, он не будет a.out. 456 00:22:28,320 --> 00:22:29,730 Это будет называться привет. 457 00:22:29,730 --> 00:22:33,660 >> Таким образом, чтобы сделать это, оказывается, что Clang, как и многие другие программы, 458 00:22:33,660 --> 00:22:37,980 поддерживает аргументы командной строки, или флаги, или переключатели, 459 00:22:37,980 --> 00:22:39,600 которые просто влияют на его поведение. 460 00:22:39,600 --> 00:22:45,160 В частности, Clang поддерживает тире O флаг, который затем занимает второе слово. 461 00:22:45,160 --> 00:22:48,190 В этом случае, я буду как угодно, но разумно, назвать это привет. 462 00:22:48,190 --> 00:22:50,710 Но я мог бы назвать это ничего Я хочу, за исключением того, что a.out 463 00:22:50,710 --> 00:22:52,390 бы скорее к тому же точки. 464 00:22:52,390 --> 00:22:55,640 >> А потом просто указать имя файла я хочу собрать. 465 00:22:55,640 --> 00:22:59,190 Так что теперь, даже если в начале команды я до сих пор есть Clang, 466 00:22:59,190 --> 00:23:01,410 в конце команды Я до сих пор имя файла, 467 00:23:01,410 --> 00:23:05,520 Теперь у меня есть эти командной строки аргументы, эти флаги, которые говорят, 468 00:23:05,520 --> 00:23:11,180 ой, кстати, вывод-о, файл называется привет, а не a.out по умолчанию. 469 00:23:11,180 --> 00:23:13,810 >> Так что, если я ударил Введите сейчас, ничего по-видимому, произошло. 470 00:23:13,810 --> 00:23:17,900 И, тем не менее, теперь я могу сделать точечный слэш привет. 471 00:23:17,900 --> 00:23:19,089 Так что это та же программа. 472 00:23:19,089 --> 00:23:21,380 Нули и единицы идентичны в конце дня. 473 00:23:21,380 --> 00:23:24,210 >> Но они в двух разные files-- a.out, 474 00:23:24,210 --> 00:23:26,490 которая является первой версией и просто по-дурацки имени, 475 00:23:26,490 --> 00:23:30,250 и теперь алло, который является намного более убедительным название программы. 476 00:23:30,250 --> 00:23:33,195 Но, если честно, я никогда будет помнить это снова, 477 00:23:33,195 --> 00:23:34,070 и снова, и снова. 478 00:23:34,070 --> 00:23:36,411 И, на самом деле, как мы пишем более сложные программы, 479 00:23:36,411 --> 00:23:38,160 команды, которые вы будете придется написать 480 00:23:38,160 --> 00:23:40,920 собираются получить даже Чем сложнее еще. 481 00:23:40,920 --> 00:23:41,940 >> И так, чтобы не волноваться. 482 00:23:41,940 --> 00:23:46,220 Оказывается, что люди, прежде чем мы поняли, что они слишком 483 00:23:46,220 --> 00:23:47,530 было это точно такая же проблема. 484 00:23:47,530 --> 00:23:50,900 Они тоже не получили того, чтобы типа довольно длинные, загадочные команды, 485 00:23:50,900 --> 00:23:52,200 не говоря уже помню их. 486 00:23:52,200 --> 00:23:56,070 И так люди перед нами сделали другие программы, которые облегчают 487 00:23:56,070 --> 00:23:57,670 для компиляции программного обеспечения. 488 00:23:57,670 --> 00:24:01,609 >> И в самом деле, одним из таких Программа называется Make. 489 00:24:01,609 --> 00:24:03,150 Так что я собираюсь идти вперед и делать это. 490 00:24:03,150 --> 00:24:05,691 Я собираюсь отменить все, что я только что сделал следующим образом. 491 00:24:05,691 --> 00:24:07,690 Позвольте мне типа LS. 492 00:24:07,690 --> 00:24:10,980 И вы заметите три things-- a.out, и звезда, привет 493 00:24:10,980 --> 00:24:12,810 и звезда, и hello.c. 494 00:24:12,810 --> 00:24:14,730 Будем надеяться, что это должно быть немного интуитивными, 495 00:24:14,730 --> 00:24:18,220 поскольку ранее было нет ничего в этом рабочем пространстве. 496 00:24:18,220 --> 00:24:21,240 Там не было ничего, что у меня было создан, пока мы не начали класс. 497 00:24:21,240 --> 00:24:22,840 >> И я создал hello.c. 498 00:24:22,840 --> 00:24:24,544 Затем я скомпилировал его, и назвал его a.out. 499 00:24:24,544 --> 00:24:27,460 А потом я скомпилировал его снова слегка по-другому и назвал его привет. 500 00:24:27,460 --> 00:24:32,830 Поэтому у меня есть три файла в этом каталоге, в этой папке под названием Workspace. 501 00:24:32,830 --> 00:24:35,005 Теперь я могу видеть, что а если я на самом деле уменьшения изображения. 502 00:24:35,005 --> 00:24:37,530 >> Если я просигналить здесь и смотреть на эту верхнюю правую руку 503 00:24:37,530 --> 00:24:39,940 угол, как и обещал левый правая часть экрана 504 00:24:39,940 --> 00:24:42,990 всегда собирается показать вам, что в вашем аккаунте, что 505 00:24:42,990 --> 00:24:44,790 внутри CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 И есть три файла там. 507 00:24:46,680 --> 00:24:49,070 >> Поэтому я хочу, чтобы избавиться от a.out и привет. 508 00:24:49,070 --> 00:24:51,275 И, как вы могли бы представьте себе интуитивно, вам 509 00:24:51,275 --> 00:24:53,400 может сортировать контрольной мыши или нажмите правой кнопкой мыши на этом. 510 00:24:53,400 --> 00:24:54,590 И это маленькое всплывающее меню. 511 00:24:54,590 --> 00:24:57,170 Вы можете скачать файл, запустите она, просмотреть его, обновить, переименовать, 512 00:24:57,170 --> 00:24:57,700 или что нет. 513 00:24:57,700 --> 00:25:00,260 >> И я мог бы просто удалить, и он уйдет. 514 00:25:00,260 --> 00:25:05,260 Но давайте делать вещи с командой линия на данный момент, с тем, чтобы получить удобный 515 00:25:05,260 --> 00:25:07,010 с этим, и сделайте следующее. 516 00:25:07,010 --> 00:25:12,345 Я собираюсь идти вперед и удалить a.out, введя буквально rma.out. 517 00:25:12,345 --> 00:25:14,890 Оказывается, команду для удаление или удаление что-то, 518 00:25:14,890 --> 00:25:16,280 не удалить или удалить. 519 00:25:16,280 --> 00:25:21,260 >> Это более лаконично RM, чтобы сэкономить вы несколько нажатий клавиш, и нажмите Enter. 520 00:25:21,260 --> 00:25:24,707 Теперь мы собираемся быть несколько загадочно удалить регулярные a.out файл. 521 00:25:24,707 --> 00:25:27,040 Я действительно не знаю, что такое нерегулярные файл будет еще. 522 00:25:27,040 --> 00:25:28,660 Но я хочу, чтобы удалить его. 523 00:25:28,660 --> 00:25:30,150 >> Так что я собираюсь ввести у для да. 524 00:25:30,150 --> 00:25:31,940 Или я мог бы ввести его, и нажать клавишу Enter. 525 00:25:31,940 --> 00:25:33,440 И, опять же, ничего не кажется, случается. 526 00:25:33,440 --> 00:25:35,840 Но это, как правило, хорошая вещь. 527 00:25:35,840 --> 00:25:40,490 >> Если я типа LS на этот раз, что я должен видеть? 528 00:25:40,490 --> 00:25:44,930 Будем надеяться, что просто привет и hello.c. 529 00:25:44,930 --> 00:25:47,286 Теперь, как в сторону, вы будете заметить эту звезду, звездочки, 530 00:25:47,286 --> 00:25:48,660 что это в конце моих программ. 531 00:25:48,660 --> 00:25:50,201 И они также демонстрируют в зеленый цвет. 532 00:25:50,201 --> 00:25:53,970 Это просто способ CS50 среды IDE из cluing вас в том, 533 00:25:53,970 --> 00:25:55,280 что это не исходный код. 534 00:25:55,280 --> 00:25:58,880 Это исполняемый файл, запускаемым программа, которую можно реально работать 535 00:25:58,880 --> 00:26:01,020 делая точечный слэш, а затем его имя. 536 00:26:01,020 --> 00:26:05,860 >> Теперь, позвольте мне идти вперед и удалить это, гт привет, Enter, удалить регулярные 537 00:26:05,860 --> 00:26:08,010 подать привет, да. 538 00:26:08,010 --> 00:26:11,180 А теперь, если я типа LS, мы вернулись к hello.c. 539 00:26:11,180 --> 00:26:13,917 Старайтесь не полностью удалить фактический исходный код. 540 00:26:13,917 --> 00:26:16,250 Несмотря на то, есть особенности встроенный в CS50 IDE где 541 00:26:16,250 --> 00:26:19,870 вы можете пройти через историю изменений и назад во времени, если вы случайно 542 00:26:19,870 --> 00:26:23,660 удалить что-то, делать иметь в виду в соответствии с этими подсказками да или нет, 543 00:26:23,660 --> 00:26:25,381 от того, что вы на самом деле хотите сделать. 544 00:26:25,381 --> 00:26:27,380 И если я иду к вершине левый угол здесь, 545 00:26:27,380 --> 00:26:30,696 все, что остается hello.c. 546 00:26:30,696 --> 00:26:32,570 Таким образом, есть сгустки другие команды, которые вы 547 00:26:32,570 --> 00:26:37,550 может выполнять в мире Linux, один из которых, опять же, сделать. 548 00:26:37,550 --> 00:26:40,180 И мы собираемся сделать моя программа в настоящее время следующим образом. 549 00:26:40,180 --> 00:26:43,270 >> Вместо того чтобы делать лязг, вместо того, чтобы делать лязг-о, 550 00:26:43,270 --> 00:26:45,860 Я собираюсь просто в буквальном смысле типа, сделать привет. 551 00:26:45,860 --> 00:26:49,630 А теперь обратите внимание, я не печатает сделать hello.c. 552 00:26:49,630 --> 00:26:50,910 Я печатаю сделать привет. 553 00:26:50,910 --> 00:26:54,840 >> И эта программа сделать что поставляется с CS50 IDE и многое другое 554 00:26:54,840 --> 00:26:57,090 как правило, с Linux, это программа, которая это 555 00:26:57,090 --> 00:26:59,120 собирается сделать программу под названием Hello. 556 00:26:59,120 --> 00:27:03,680 И он собирается взять на себя, по соглашению, что если эта программа может быть сделано, 557 00:27:03,680 --> 00:27:09,030 это будет сделано из источника код файл, заканчивающийся на дот с, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Так что, если я ударил Enter Теперь, обратите внимание, что команда, которая запускается на выполнение 559 00:27:12,210 --> 00:27:14,340 на самом деле даже больше до того, чем раньше. 560 00:27:14,340 --> 00:27:16,670 И это потому, что мы предварительно CS50 IDE, чтобы иметь 561 00:27:16,670 --> 00:27:19,878 некоторые дополнительные функции, встроенные в том, что нам не нужно просто еще, но скоро будет. 562 00:27:19,878 --> 00:27:23,470 Но главное, чтобы понять, Теперь у меня есть программа Hello. 563 00:27:23,470 --> 00:27:27,080 >> Если я снова ввести LS, я есть программа приветствия. 564 00:27:27,080 --> 00:27:32,070 И я могу запустить его с точка слэш a.out, нет, 565 00:27:32,070 --> 00:27:35,590 так как весь смысл этого упражнение было точка слэш привет. 566 00:27:35,590 --> 00:27:38,089 А теперь у меня есть свой привет мир программа. 567 00:27:38,089 --> 00:27:39,880 Так двигаться вперед, мы почти всегда только 568 00:27:39,880 --> 00:27:42,088 собирается собрать наши программы используя команду Make. 569 00:27:42,088 --> 00:27:45,300 И тогда мы будем запускать их точка слэш, и название программы. 570 00:27:45,300 --> 00:27:49,610 Но понимаю, что делает делает для Вы, это сама не компилятор. 571 00:27:49,610 --> 00:27:53,310 Это просто программа удобства что знает, как вызвать компилятор 572 00:27:53,310 --> 00:27:56,470 бежать так, что вы сами можете использовать его. 573 00:27:56,470 --> 00:28:00,220 >> Какие существуют другие команды в Linux, и в свою очередь CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Мы скоро увидим, что есть Команда CD, Изменить каталог. 575 00:28:03,107 --> 00:28:05,190 Это позволяет в считанные ваш интерфейс командной строки 576 00:28:05,190 --> 00:28:07,610 чтобы двигаться вперед и назад, и открыть различные папки 577 00:28:07,610 --> 00:28:08,860 без использования мыши. 578 00:28:08,860 --> 00:28:12,470 >> LS мы видели, который выступает за список файлы в текущем каталоге. 579 00:28:12,470 --> 00:28:14,650 Сделайте Dir, вы можете вероятно, начинают вывод 580 00:28:14,650 --> 00:28:18,150 что они означают now-- сделать каталог, если вы хотите создать папку. 581 00:28:18,150 --> 00:28:21,270 RM для удалить, RM Dir для удалить directory-- и они, 582 00:28:21,270 --> 00:28:24,160 опять же, это командная строка эквиваленты того, что вы 583 00:28:24,160 --> 00:28:26,945 могли бы сделать в CS50 IDE с помощью мыши. 584 00:28:26,945 --> 00:28:28,820 Но вы скоро найдете что иногда это просто 585 00:28:28,820 --> 00:28:30,610 намного быстрее, чтобы сделать вещи с клавиатуры, 586 00:28:30,610 --> 00:28:33,690 и в конечном счете гораздо более мощным. 587 00:28:33,690 --> 00:28:36,440 >> Но это трудно утверждать, что все, что мы делали до сих пор 588 00:28:36,440 --> 00:28:39,990 это все, что мощные, когда все мы говорили есть привет мир. 589 00:28:39,990 --> 00:28:43,740 И в самом деле, я жестко закодировал Слова привет мир в моей программе. 590 00:28:43,740 --> 00:28:45,530 Там нет динамичность еще. 591 00:28:45,530 --> 00:28:49,320 Царапина была на порядок более интересным на прошлой неделе. 592 00:28:49,320 --> 00:28:51,220 >> И так давайте там. 593 00:28:51,220 --> 00:28:55,310 Давайте шаг к что путь некоторых из этих функций. 594 00:28:55,310 --> 00:28:59,470 Так что не только C поставляются с Printf, и гроздья других функций 595 00:28:59,470 --> 00:29:01,850 некоторые из которых мы увидим в течение долгого времени, это не имеет 596 00:29:01,850 --> 00:29:05,760 сделать все, что легко прямо ворот в получении ввод данных пользователем. 597 00:29:05,760 --> 00:29:08,140 >> На самом деле, одно из слабых мест таких языков, как C, 598 00:29:08,140 --> 00:29:10,140 и даже Java и еще другие, в том, что она не 599 00:29:10,140 --> 00:29:15,860 сделать его легко просто получить такие вещи, как целые числа от пользователей или строк, слов, 600 00:29:15,860 --> 00:29:19,970 и фразы, не говоря уже о вещи, как значения с плавающей точкой, или действительные числа 601 00:29:19,970 --> 00:29:23,240 с десятичными точками, и действительно длинные числа, как мы скоро увидим. 602 00:29:23,240 --> 00:29:27,000 Так что этот список функций здесь, эти , как и другие кусочки головоломки к царапинам 603 00:29:27,000 --> 00:29:31,090 что мы предварительно установлены в CS50 IDE, который мы будем использовать в течение нескольких недель 604 00:29:31,090 --> 00:29:34,010 как тренировочные колеса разного рода, и в конце концов, принять их, и смотреть 605 00:29:34,010 --> 00:29:37,210 под капотом, возможно, в как эти вещи реализуются. 606 00:29:37,210 --> 00:29:40,460 >> Но чтобы сделать это, давайте на самом деле написать программу. 607 00:29:40,460 --> 00:29:41,770 Позвольте мне идти вперед прямо сейчас. 608 00:29:41,770 --> 00:29:44,750 И я собираюсь создать новую файл, нажав на эту плюсик, 609 00:29:44,750 --> 00:29:45,970 и нажав кнопку New File. 610 00:29:45,970 --> 00:29:49,250 >> Я собираюсь сохранить этот следующий один, как, скажем, string.c, 611 00:29:49,250 --> 00:29:50,750 потому что я хочу, чтобы играть со строками. 612 00:29:50,750 --> 00:29:53,990 И строка в C просто последовательность символов. 613 00:29:53,990 --> 00:29:56,090 Так что теперь давайте идти вперед и выполните следующие действия. 614 00:29:56,090 --> 00:30:01,204 >> Включают в себя стандартные IO.h-- и оказывается стандартный ввод-вывод, 615 00:30:01,204 --> 00:30:03,360 IO просто означает, что вход и выход. 616 00:30:03,360 --> 00:30:05,920 Так получается, что эта линия вот что 617 00:30:05,920 --> 00:30:08,140 является соседней с нами, чтобы использовать Printf. 618 00:30:08,140 --> 00:30:10,410 Printf, конечно, производит вывод. 619 00:30:10,410 --> 00:30:15,000 Поэтому для того, чтобы использовать Printf, получается что Вы должны иметь эту строку кода 620 00:30:15,000 --> 00:30:16,040 в верхней части файла. 621 00:30:16,040 --> 00:30:18,456 >> И мы вернемся к тому, что что на самом деле означает в скором времени. 622 00:30:18,456 --> 00:30:20,400 Оказывается, что в любая программа C Я пишу, 623 00:30:20,400 --> 00:30:23,640 Я должен начать это с код, который выглядит следующим образом. 624 00:30:23,640 --> 00:30:26,860 И вы заметите CS50 IDE и другое комплексное развитие 625 00:30:26,860 --> 00:30:30,050 среды, как он, будем стараться как лучше 626 00:30:30,050 --> 00:30:31,780 они могут закончить свою мысль. 627 00:30:31,780 --> 00:30:35,930 На самом деле, минуту назад, если я отменить что я только что сделал, я ударил Enter. 628 00:30:35,930 --> 00:30:39,160 >> Затем я попал открытый фигурные скобка, нажмите Enter еще раз. 629 00:30:39,160 --> 00:30:40,430 И он закончил свою мысль. 630 00:30:40,430 --> 00:30:45,140 Это дало мне новую линию, не отступом не менее для хороших стилистических причин, почему мы будем видеть. 631 00:30:45,140 --> 00:30:48,559 И тогда он автоматически дал мне что фигурной скобки, чтобы закончить свою мысль. 632 00:30:48,559 --> 00:30:50,600 Теперь, это не всегда угадать, что вы хотите сделать. 633 00:30:50,600 --> 00:30:53,620 Но в большей части, это делает сохранить вам несколько нажатий клавиш. 634 00:30:53,620 --> 00:30:59,560 Так что минуту назад, мы запустили этот program-- привет, мир, а затем он был скомпилирован, 635 00:30:59,560 --> 00:31:00,460 а затем побежал. 636 00:31:00,460 --> 00:31:01,867 Но нет здесь динамизм. 637 00:31:01,867 --> 00:31:03,700 Что делать, если мы хотим делать что-то другое? 638 00:31:03,700 --> 00:31:07,630 Ну, что если бы я хотел на самом деле получить строку от пользователя? 639 00:31:07,630 --> 00:31:11,250 Я собираюсь использовать кусок головоломки называется именно that-- получить строку. 640 00:31:11,250 --> 00:31:15,860 >> Оказывается, в C, что, когда вы не хотите внести свой вклад в кусок головоломки, 641 00:31:15,860 --> 00:31:19,360 или более правильно к функции, вы буквально только что делать открывающую скобку, 642 00:31:19,360 --> 00:31:20,430 закрывающей скобкой. 643 00:31:20,430 --> 00:31:25,540 Так что, как будто есть нет белого ящика не вводить в. 644 00:31:25,540 --> 00:31:27,720 Скажем блок перед тем была маленькая белая коробка. 645 00:31:27,720 --> 00:31:29,660 У нас нет, что белая коробка прямо сейчас. 646 00:31:29,660 --> 00:31:33,310 >> Но когда я называю получения строки, я хотите поместить результат где-то. 647 00:31:33,310 --> 00:31:37,680 Таким образом, очень распространенная парадигма в C является вызова функции, как здесь получения строки, 648 00:31:37,680 --> 00:31:41,070 а затем сохранить его возвращаемое значение. 649 00:31:41,070 --> 00:31:44,450 Это результат его усилие в чем-то. 650 00:31:44,450 --> 00:31:47,630 >> А что такое построить в программировании, 651 00:31:47,630 --> 00:31:53,450 будь то в пустом месте или в настоящее время C, что мы можно использовать на самом деле хранить что-нибудь? 652 00:31:53,450 --> 00:31:55,990 Вызывается это переменная, не так ли? 653 00:31:55,990 --> 00:32:00,320 А в пустом месте, мы не очень-то все равно, что происходит в переменных. 654 00:32:00,320 --> 00:32:02,170 >> Но в данном случае, мы на самом деле делаем. 655 00:32:02,170 --> 00:32:03,719 Я собираюсь сказать строку. 656 00:32:03,719 --> 00:32:05,510 И тогда я мог бы назвать это все, что я хочу. 657 00:32:05,510 --> 00:32:08,340 Я буду называть его имя, получает получить строку. 658 00:32:08,340 --> 00:32:10,250 >> И теперь, даже если вы немного новичок в этом, 659 00:32:10,250 --> 00:32:11,984 обратите внимание, что я не хватает какой-то детали. 660 00:32:11,984 --> 00:32:13,150 Я забыл точка с запятой. 661 00:32:13,150 --> 00:32:14,400 Мне нужно, чтобы закончить эту мысль. 662 00:32:14,400 --> 00:32:17,480 Так что я буду двигать курсор, и ударил запятой там. 663 00:32:17,480 --> 00:32:19,130 И что я только что сделал? 664 00:32:19,130 --> 00:32:21,440 В этой строке кода, номер 5 в данный момент, 665 00:32:21,440 --> 00:32:23,799 Я звоню получения строки без каких-либо входов. 666 00:32:23,799 --> 00:32:26,090 Так что нет маленький белый как коробка Сохранить блок имеет. 667 00:32:26,090 --> 00:32:28,590 >> Я просто говорю, эй, компьютер, получить мне строку. 668 00:32:28,590 --> 00:32:31,390 Знак равенства не очень знак равенства, само по себе. 669 00:32:31,390 --> 00:32:33,790 Это назначение оператор, а это значит, 670 00:32:33,790 --> 00:32:37,860 эй, компьютер, переместить значение с правой стороны на левую. 671 00:32:37,860 --> 00:32:40,480 А слева, у меня есть следующее. 672 00:32:40,480 --> 00:32:43,580 >> Эй, компьютер, дайте мне string-- последовательность символов. 673 00:32:43,580 --> 00:32:45,637 И называть эту строку имени. 674 00:32:45,637 --> 00:32:47,220 И я даже не называть его имени. 675 00:32:47,220 --> 00:32:49,970 >> Я мог бы назвать это, условно, что-то вроде S, 676 00:32:49,970 --> 00:32:52,900 так же, как мы использовали, чтобы я вызова переменной I. 677 00:32:52,900 --> 00:32:54,829 Но теперь мне нужно сделать что-то с ним. 678 00:32:54,829 --> 00:32:57,370 Было бы довольно глупо попробуйте скомпилировать этот код, бег 679 00:32:57,370 --> 00:32:59,410 эта программа, несмотря на то, Я получаю строку, 680 00:32:59,410 --> 00:33:01,580 потому что это еще только собирается сказать привет мир. 681 00:33:01,580 --> 00:33:06,140 >> Но что, если я хочу, чтобы изменить это. 682 00:33:06,140 --> 00:33:07,940 Почему бы мне не сделать это? 683 00:33:07,940 --> 00:33:11,632 Процент s, запятая s. 684 00:33:11,632 --> 00:33:13,090 И это немного загадочными до сих пор. 685 00:33:13,090 --> 00:33:15,560 >> Итак, позвольте мне сделать мои переменные более ясным. 686 00:33:15,560 --> 00:33:17,510 Позвольте мне назвать имя этой переменной. 687 00:33:17,510 --> 00:33:20,230 И давайте посмотрим, если мы не можем дразнить помимо того, что здесь происходит. 688 00:33:20,230 --> 00:33:22,770 >> Так что на линии пять, я получаю строку. 689 00:33:22,770 --> 00:33:25,620 И я хранить эту строку, независимо от того, как пользователь ввел 690 00:33:25,620 --> 00:33:28,430 на его клавиатуре, в переменной с именем Name. 691 00:33:28,430 --> 00:33:30,590 И получается, что Printf не просто 692 00:33:30,590 --> 00:33:34,220 принять один аргумент в два раза котировки, один вход в двойных кавычках. 693 00:33:34,220 --> 00:33:39,100 >> Это может занять два, или три, или больше, например что второй, или третий, или четвертый, 694 00:33:39,100 --> 00:33:42,320 все имена переменных, или конкретно ценности, 695 00:33:42,320 --> 00:33:48,610 что вы хотите подключиться к, динамически, эта строка в кавычках. 696 00:33:48,610 --> 00:33:52,110 Другими словами, то, что было бы неправильно с этим? 697 00:33:52,110 --> 00:33:57,920 Если я только что сказал привет имя, обратный слэш п, спас мой файл, составленный мой код, 698 00:33:57,920 --> 00:34:01,660 и побежал это, что бы произошло? 699 00:34:01,660 --> 00:34:05,139 >> Это просто будет сказать, привет имя, в буквальном смысле N-А-М-Е, 700 00:34:05,139 --> 00:34:07,900 который отчасти глупо, потому что она ничем не отличается от мира. 701 00:34:07,900 --> 00:34:10,400 Так что ничего в кавычках то, что буквально распечатана. 702 00:34:10,400 --> 00:34:12,520 Так что, если я хочу иметь заполнитель там, 703 00:34:12,520 --> 00:34:14,422 Я на самом деле нужно использовать какой-то особый синтаксис. 704 00:34:14,422 --> 00:34:17,380 И получается, если вы читаете документация для функции PRINTF, 705 00:34:17,380 --> 00:34:21,320 он скажет вам, что если вы используете процента с, 706 00:34:21,320 --> 00:34:23,920 вы можете заменить значение следующим образом. 707 00:34:23,920 --> 00:34:27,190 >> После запятой после этого двойные кавычки, вы просто 708 00:34:27,190 --> 00:34:29,179 напишите название из переменная, которую вы хотите 709 00:34:29,179 --> 00:34:33,790 подключить в этот формат кода или спецификатор формата, 710 00:34:33,790 --> 00:34:35,469 процентов s для строк. 711 00:34:35,469 --> 00:34:39,190 И теперь, если я сохранил мой файл, Я возвращаюсь вниз к моему терминалу. 712 00:34:39,190 --> 00:34:42,870 И я типа Make String, потому что, опять же, название этого 713 00:34:42,870 --> 00:34:45,510 файл, который я выбрал, прежде чем это string.c. 714 00:34:45,510 --> 00:34:48,510 >> Так что я собираюсь сказать, сделать строку, введите. 715 00:34:48,510 --> 00:34:51,550 О боже мой, посмотри на все ошибки, которые мы сделали уже. 716 00:34:51,550 --> 00:34:55,540 И это is--, что это на самом деле как, семь программ шести линии? 717 00:34:55,540 --> 00:34:57,790 Так что это, где это может очень быстро получить подавляющее. 718 00:34:57,790 --> 00:35:00,890 >> Это окно терминала имеет теперь просто выплюнул 719 00:35:00,890 --> 00:35:03,230 огромное количество сообщений об ошибках. 720 00:35:03,230 --> 00:35:07,560 Конечно, у меня нет больше ошибка сообщений, чем у меня есть строки кода. 721 00:35:07,560 --> 00:35:08,680 Так, что происходит? 722 00:35:08,680 --> 00:35:10,920 >> Ну, лучшая стратегия делать в любое время вы 723 00:35:10,920 --> 00:35:13,710 действительно сталкиваются с подавляющим Список ошибок, как, что, 724 00:35:13,710 --> 00:35:16,690 будет прокрутить назад, искать команды вы просто побежал, что в моем случае 725 00:35:16,690 --> 00:35:18,020 это сделать строку. 726 00:35:18,020 --> 00:35:21,630 Посмотрите, что делают сделал, и это что долго Clang команда, нет ничего особенного там. 727 00:35:21,630 --> 00:35:22,950 >> Но красный плохо. 728 00:35:22,950 --> 00:35:24,750 Зеленый пытается быть нежный и полезно. 729 00:35:24,750 --> 00:35:26,140 Но это все-таки плохо, в этом случае. 730 00:35:26,140 --> 00:35:27,510 Но где же это плохо? 731 00:35:27,510 --> 00:35:31,450 >> String.c, линия пять, пять символов. 732 00:35:31,450 --> 00:35:32,930 Так что это просто общее соглашение. 733 00:35:32,930 --> 00:35:36,060 Что-то значит что-то двоеточие номер строки и номер символа. 734 00:35:36,060 --> 00:35:41,080 Ошибка, использование необъявленная Идентификатор строки. 735 00:35:41,080 --> 00:35:42,900 Возможно, вы имели в виду стандарт? 736 00:35:42,900 --> 00:35:45,530 >> Так что, к сожалению, Clang пытается быть полезным. 737 00:35:45,530 --> 00:35:46,850 Но это не так, и в этом случае. 738 00:35:46,850 --> 00:35:49,350 Нет, Clang, я не имел в виду стандартный ввод-вывод. 739 00:35:49,350 --> 00:35:51,070 Я имел в виду, что на первой линии, да. 740 00:35:51,070 --> 00:35:53,420 >> Но линия пять это один здесь. 741 00:35:53,420 --> 00:35:57,040 И Clang не понимать, S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 Это необъявленный идентификатор, A Слово это просто никогда не видел раньше. 743 00:36:01,490 --> 00:36:05,730 И это потому, что C, язык мы пишем код прямо сейчас, 744 00:36:05,730 --> 00:36:08,070 нет переменных, называемых строками. 745 00:36:08,070 --> 00:36:11,380 >> Это не произойдет, по умолчанию, поддержка то, что называется строку. 746 00:36:11,380 --> 00:36:16,750 Это CS50 кусок жаргон, но весьма условен. 747 00:36:16,750 --> 00:36:18,600 Но я могу исправить это следующим образом. 748 00:36:18,600 --> 00:36:22,090 >> Если добавить одну строку кода в верхней части этой программы, 749 00:36:22,090 --> 00:36:27,890 включают CS50.h, который является другой файл где-то внутри CS50 IDE, где-то 750 00:36:27,890 --> 00:36:30,820 на жестком диске, так сказать, операционной системы Ubuntu 751 00:36:30,820 --> 00:36:33,590 что я бегу, что это файл, который 752 00:36:33,590 --> 00:36:38,740 собирается учить операционной Система какая строка, просто 753 00:36:38,740 --> 00:36:41,930 как стандартный io.h является файл в операционной системе, что это 754 00:36:41,930 --> 00:36:44,430 буду учить его, что Printf есть. 755 00:36:44,430 --> 00:36:46,810 >> Действительно, мы получили бы очень похожее сообщение 756 00:36:46,810 --> 00:36:50,600 если IO признал стандарт Io.h и пытался использовать Printf. 757 00:36:50,600 --> 00:36:53,632 Так что я собираюсь идти вперед и просто взять под свой контроль L, чтобы очистить экран. 758 00:36:53,632 --> 00:36:56,340 Или вы можете ввести ясно, и он будет просто очистить окно терминала. 759 00:36:56,340 --> 00:36:58,020 Но вы все еще можете прокручивать назад во времени. 760 00:36:58,020 --> 00:37:01,100 >> И я буду перезапускать Сделать String. 761 00:37:01,100 --> 00:37:03,660 Крест мои пальцы на этот раз, Enter. 762 00:37:03,660 --> 00:37:05,380 Боже мой, это сработало. 763 00:37:05,380 --> 00:37:09,280 он показывает мне длинную маскировочную команду то есть то, что делает генерироваться с помощью Clang, 764 00:37:09,280 --> 00:37:10,460 но никаких сообщений об ошибках. 765 00:37:10,460 --> 00:37:12,460 Так понимают, несмотря на то, вы можете получить полностью 766 00:37:12,460 --> 00:37:14,480 завалены количество сообщений об ошибках, 767 00:37:14,480 --> 00:37:17,540 он просто может быть это раздражает каскадных эффект, где Clang не понимает 768 00:37:17,540 --> 00:37:19,620 одна вещь, которая означает, что он тогда не понимает следующее слово, 769 00:37:19,620 --> 00:37:20,560 или следующая строка. 770 00:37:20,560 --> 00:37:22,850 А так он просто задыхается от вашего кода. 771 00:37:22,850 --> 00:37:24,440 Но исправление может быть простым. 772 00:37:24,440 --> 00:37:27,822 И так всегда сосредоточены на Самая первая строка вывода. 773 00:37:27,822 --> 00:37:29,530 И если вы этого не сделаете понять это, просто посмотрите 774 00:37:29,530 --> 00:37:32,480 для ключевых слов, которые могли бы быть ключи и номер строки, 775 00:37:32,480 --> 00:37:34,650 и характер, где эта ошибка может быть. 776 00:37:34,650 --> 00:37:40,328 >> Теперь позвольте мне идти вперед и ввести точка слэш, строка, введите. 777 00:37:40,328 --> 00:37:44,340 Хм, это не поздоровавшись ничего. 778 00:37:44,340 --> 00:37:46,210 Зачем? 779 00:37:46,210 --> 00:37:48,170 Ну, помните, где он работает? 780 00:37:48,170 --> 00:37:53,730 >> Это, вероятно, застрял в данный момент в цикле, если вы будете, на шестой строке, 781 00:37:53,730 --> 00:37:56,950 потому Получить строку дизайн, написаны сотрудниками CS50, 782 00:37:56,950 --> 00:38:00,350 буквально означало просто сидеть там ждет, и ждет, 783 00:38:00,350 --> 00:38:01,850 и ожидание строки. 784 00:38:01,850 --> 00:38:03,792 Все, что мы подразумеваем под строкой ввода является человек. 785 00:38:03,792 --> 00:38:04,500 Таким образом, вы знаете, что? 786 00:38:04,500 --> 00:38:05,166 Позвольте мне идти вперед. 787 00:38:05,166 --> 00:38:08,704 И только по наитию, позвольте мне введите свое имя, Дэвид, введите. 788 00:38:08,704 --> 00:38:10,120 Теперь у меня есть более динамичной программы. 789 00:38:10,120 --> 00:38:11,240 Он сказал, привет Дэвид. 790 00:38:11,240 --> 00:38:16,280 >> Если я иду вперед и запустить это снова, позвольте мне попытаться сказать имя Zamila, введите. 791 00:38:16,280 --> 00:38:17,940 И теперь у нас есть динамическая программа. 792 00:38:17,940 --> 00:38:19,380 Я не жестко закодированы мир. 793 00:38:19,380 --> 00:38:21,760 Я не жестко закодированы имя, или Дэвид или Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Теперь это гораздо больше похоже программ мы знаем, где, если принимать входной сигнал, 795 00:38:25,350 --> 00:38:27,870 он производит несколько иной вывод. 796 00:38:27,870 --> 00:38:31,020 Теперь, это не самый лучший опыт пользователя или UX. 797 00:38:31,020 --> 00:38:33,000 Я запустить программу. 798 00:38:33,000 --> 00:38:35,830 >> Я не знаю, что я должен делать, если я на самом деле не смотреть на 799 00:38:35,830 --> 00:38:37,290 или запомнить исходный код. 800 00:38:37,290 --> 00:38:39,640 Так давайте пользователю опыт немного лучше 801 00:38:39,640 --> 00:38:41,240 с простейших вещей. 802 00:38:41,240 --> 00:38:44,782 Позвольте мне вернуться в этот программы, а просто сказать Printf. 803 00:38:44,782 --> 00:38:48,870 >> И позвольте мне идти вперед и сказать имя, двоеточие, и пространство, а затем точка с запятой. 804 00:38:48,870 --> 00:38:51,170 И как раз для пинков, не люфтит н. 805 00:38:51,170 --> 00:38:52,980 И это преднамеренное, потому что я не хочу 806 00:38:52,980 --> 00:38:54,590 приглашение, чтобы перейти к следующей строке. 807 00:38:54,590 --> 00:38:58,800 >> Я хочу, вместо того, сделать это, сделать строку перекомпилировать свой код в новую машину 808 00:38:58,800 --> 00:39:00,980 Код точка слэш строку. 809 00:39:00,980 --> 00:39:02,460 Ах, это гораздо симпатичнее. 810 00:39:02,460 --> 00:39:05,780 Теперь я на самом деле знаю, что компьютер хочет, чтобы я, дать ему имя. 811 00:39:05,780 --> 00:39:10,020 >> Так что я собираюсь идти вперед и ввести в Робе, войти, и привет, Роб. 812 00:39:10,020 --> 00:39:13,640 Таким образом, понимают, что это до сих пор, в конце дня, только программа девять линий. 813 00:39:13,640 --> 00:39:15,090 Но мы сделали эти шаги ребенка. 814 00:39:15,090 --> 00:39:18,380 >> Мы написали одну строку, с которой мы были знакомы, Printf, привет мир. 815 00:39:18,380 --> 00:39:19,980 Тогда мы расстегнула немного этого. 816 00:39:19,980 --> 00:39:21,560 И мы на самом деле использовали получения строки. 817 00:39:21,560 --> 00:39:23,362 И мы бросили это значение в переменной. 818 00:39:23,362 --> 00:39:26,070 А потом мы пошли вперед и совершенствоваться Кроме того, он с третьей линией. 819 00:39:26,070 --> 00:39:29,220 И этот повторяющийся процесс написание программного обеспечения является действительно ключом. 820 00:39:29,220 --> 00:39:33,420 В CS50, так и в жизни в целом, Вы должны, как правило, не сесть, 821 00:39:33,420 --> 00:39:36,800 имеют в виду программу, и попробуйте писать вся хреновина все сразу. 822 00:39:36,800 --> 00:39:40,810 >> Это неизбежно будет приводить к пути больше ошибок, чем мы сами видели здесь. 823 00:39:40,810 --> 00:39:44,070 Даже я, и по сей день, постоянно делать другие глупые ошибки, 824 00:39:44,070 --> 00:39:47,480 на самом деле сложнее ошибки что труднее выяснить. 825 00:39:47,480 --> 00:39:52,095 Но вы будете делать больше ошибок, тем больше строк кода вы пишете все сразу. 826 00:39:52,095 --> 00:39:54,220 И поэтому эта практика, написать немного кода 827 00:39:54,220 --> 00:39:57,930 что вы комфортно, компилировать это, запустить его, протестировать его в более общем плане, 828 00:39:57,930 --> 00:40:01,370 затем переместите on-- так же, как мы держали отводками и отводками на прошлой неделе, 829 00:40:01,370 --> 00:40:04,190 строительство от чего-то очень просто что-то более сложное, 830 00:40:04,190 --> 00:40:05,200 сделать то же самое здесь. 831 00:40:05,200 --> 00:40:08,500 Не садитесь, и попытаться написать целую проблему. 832 00:40:08,500 --> 00:40:10,780 На самом деле эти шаги ребенка. 833 00:40:10,780 --> 00:40:15,100 >> Теперь, строки не все что полезно им самим. 834 00:40:15,100 --> 00:40:18,210 Мы бы на самом деле, в идеале, как и в есть кое-что еще в нашем инструментарии. 835 00:40:18,210 --> 00:40:20,990 Так что давайте на самом деле сделать именно это. 836 00:40:20,990 --> 00:40:24,900 >> Позвольте мне идти вперед сейчас и нагнетать немного другая программа. 837 00:40:24,900 --> 00:40:28,320 И мы будем называть этот int.c, для целого числа. 838 00:40:28,320 --> 00:40:30,870 Я собираюсь, так же, включают CS550.h. 839 00:40:30,870 --> 00:40:33,060 Я собираюсь включать стандартные IO. 840 00:40:33,060 --> 00:40:36,630 И это будет довольно распространенным в эти первые несколько дней класса. 841 00:40:36,630 --> 00:40:39,050 >> И я буду готов сам с основной функцией. 842 00:40:39,050 --> 00:40:43,370 И теперь вместо того, чтобы получить строку, давайте идти вперед и получить Int. 843 00:40:43,370 --> 00:40:49,285 Давайте назовем это я и называю это получить INT, близкие круглые скобки, точка с запятой. 844 00:40:49,285 --> 00:40:51,410 А теперь давайте сделаем что-то с ним, Printf. 845 00:40:51,410 --> 00:40:56,190 >> Скажем, что-то вроде привет, обратная косая п, запятая я. 846 00:40:56,190 --> 00:41:00,010 Так что я в значительной степени имитируя что я сделал только минуту назад. 847 00:41:00,010 --> 00:41:01,660 У меня есть заполнитель здесь. 848 00:41:01,660 --> 00:41:05,150 Я запятая я здесь, потому что я хочу для подключения I в этот заполнитель. 849 00:41:05,150 --> 00:41:07,250 >> Так что давайте идти вперед и попробовать компиляции этой программы. 850 00:41:07,250 --> 00:41:10,060 Файл называется int.c. 851 00:41:10,060 --> 00:41:12,920 Так что я собираюсь сказать, сделать Int, введите. 852 00:41:12,920 --> 00:41:16,420 Боже мой, но не большое дело, не так ли? 853 00:41:16,420 --> 00:41:17,230 Там ошибка. 854 00:41:17,230 --> 00:41:19,810 >> Там в синтаксической ошибке вот такая, что программа не может 855 00:41:19,810 --> 00:41:25,460 составляться внутри int.c, линии семь, символ 27, формат ошибка 856 00:41:25,460 --> 00:41:28,400 определяет тип полукокса звезда, что бы это ни. 857 00:41:28,400 --> 00:41:30,020 Но тип аргумента Int. 858 00:41:30,020 --> 00:41:33,110 >> Так что здесь тоже, мы не собираемся, целью которых даже если сегодня много материала, 859 00:41:33,110 --> 00:41:35,710 мы будем подавлять вас с абсолютно каждый признак C, 860 00:41:35,710 --> 00:41:38,070 и программирование в более общем смысле, всего за эти первые несколько недель. 861 00:41:38,070 --> 00:41:40,400 Так что часто будет жаргон с которыми вы не знакомы. 862 00:41:40,400 --> 00:41:43,350 И в самом деле, символ звезды что-то мы собираемся вернуться к 863 00:41:43,350 --> 00:41:44,830 в течение недели или времени до двух. 864 00:41:44,830 --> 00:41:47,530 >> Но сейчас, давайте посмотрим, если мы можем разобрать слова, которые знакомы. 865 00:41:47,530 --> 00:41:50,750 Formats-- так что мы слышали формат спецификатор, код формата раньше. 866 00:41:50,750 --> 00:41:51,840 Это знакомо. 867 00:41:51,840 --> 00:41:53,840 Type-- но аргумент имеет тип Int. 868 00:41:53,840 --> 00:41:55,980 Подождите, я это Int. 869 00:41:55,980 --> 00:41:59,230 >> Может быть, на самом деле процентов s имеет некоторый определенный смысл. 870 00:41:59,230 --> 00:42:00,230 И действительно, это делает. 871 00:42:00,230 --> 00:42:03,101 Целое число, если вы хотите PRINTF, чтобы заменить его, 872 00:42:03,101 --> 00:42:05,350 вы на самом деле нужно использовать другой формат спецификатор. 873 00:42:05,350 --> 00:42:06,890 И вы не знали бы это если кто-то сказал вам, 874 00:42:06,890 --> 00:42:07,973 или вы сделали это раньше. 875 00:42:07,973 --> 00:42:10,490 Но процентов я есть что может быть широко используется 876 00:42:10,490 --> 00:42:12,240 в Printf для подключения целого. 877 00:42:12,240 --> 00:42:14,920 Вы можете также использовать процент d для десятичного целого числа. 878 00:42:14,920 --> 00:42:16,490 Но я просто и красиво здесь. 879 00:42:16,490 --> 00:42:17,590 Таким образом, мы будем идти с этим. 880 00:42:17,590 --> 00:42:21,160 >> Теперь позвольте мне идти вперед и перекладка марка INT, Enter. 881 00:42:21,160 --> 00:42:23,328 Это не хорошо, никаких ошибок. 882 00:42:23,328 --> 00:42:27,260 Дот слэш int-- OK, плохой пользовательский опыт, потому что я не сказал себе 883 00:42:27,260 --> 00:42:27,760 что делать. 884 00:42:27,760 --> 00:42:28,426 Но это нормально. 885 00:42:28,426 --> 00:42:29,480 Я быстро завоевывают. 886 00:42:29,480 --> 00:42:36,260 >> А теперь позвольте мне идти вперед и ввести Давида, OK, Zamila, Роб. 887 00:42:36,260 --> 00:42:37,820 ОК, так что это хорошая вещь. 888 00:42:37,820 --> 00:42:41,710 На этот раз, я использую функцию, головоломка кусок, который называется Get Int. 889 00:42:41,710 --> 00:42:44,230 И получается out-- и мы см это позже в term-- 890 00:42:44,230 --> 00:42:47,730 персонал CS50 осуществил получить строку таким образом, 891 00:42:47,730 --> 00:42:50,350 что она будет только физически получить строку для вас. 892 00:42:50,350 --> 00:42:54,340 >> Он реализован в Int Получить таким образом, что это будет только 893 00:42:54,340 --> 00:42:55,590 получить целое число для вас. 894 00:42:55,590 --> 00:42:57,830 И если вы, человек, не сотрудничают, это 895 00:42:57,830 --> 00:43:00,590 буквально только собирается сказать, повторите, повторите, повторите, 896 00:43:00,590 --> 00:43:05,200 буквально сидел там зацикливание, пока вы обязывают с каким-то магическим числом, 897 00:43:05,200 --> 00:43:07,670 как 50, и привет 50. 898 00:43:07,670 --> 00:43:11,440 >> Или, если мы выполним это снова и тип в 42, 42 привет. 899 00:43:11,440 --> 00:43:15,750 И поэтому функция Get INT внутри этого кусок головоломки 900 00:43:15,750 --> 00:43:19,050 достаточно логики, достаточно мысль, чтобы выяснить, что такое слово? 901 00:43:19,050 --> 00:43:20,330 А что такое число? 902 00:43:20,330 --> 00:43:23,165 Только принятие, в конечном счете, цифры. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Так получается, что это не все, что выразительно. 905 00:43:30,230 --> 00:43:30,910 так далеко. 906 00:43:30,910 --> 00:43:33,690 Так, яй, последний раз, когда мы пошел довольно быстро 907 00:43:33,690 --> 00:43:38,320 в исполнителей игр и анимации, и художественные произведения, в пустом месте. 908 00:43:38,320 --> 00:43:42,260 И вот, мы довольствуясь с привет мир, и привет 50. 909 00:43:42,260 --> 00:43:43,696 >> Это не все, что вдохновляет. 910 00:43:43,696 --> 00:43:46,070 И действительно, эти первые несколько примеры займет некоторое время 911 00:43:46,070 --> 00:43:47,510 сползать в волнении. 912 00:43:47,510 --> 00:43:49,854 Но у нас есть так много больше контролировать сейчас, на самом деле. 913 00:43:49,854 --> 00:43:51,770 И мы будем очень быстро начать отводками 914 00:43:51,770 --> 00:43:53,870 на верхней части этих основных примитивов. 915 00:43:53,870 --> 00:43:56,370 >> Но во-первых, давайте разберемся какие ограничения. 916 00:43:56,370 --> 00:43:58,620 На самом деле, одна из вещей, Царапины не легко 917 00:43:58,620 --> 00:44:00,990 давайте сделаем это реально смотреть под капотом, 918 00:44:00,990 --> 00:44:03,740 и понять, что компьютер, что он может сделать, 919 00:44:03,740 --> 00:44:05,250 и каковы его ограничения. 920 00:44:05,250 --> 00:44:08,580 И действительно, что отсутствие понимание, потенциально, долгосрочное 921 00:44:08,580 --> 00:44:12,520 может привести к нашей собственной mistakes-- письменной форме ошибок, написание небезопасного программного обеспечения, 922 00:44:12,520 --> 00:44:13,880 получает взломали в некотором роде. 923 00:44:13,880 --> 00:44:17,130 >> Итак, давайте некоторые шаги в направлении понимая это немного лучше 924 00:44:17,130 --> 00:44:19,710 способ, скажем, следующий пример. 925 00:44:19,710 --> 00:44:23,550 Я собираюсь идти вперед и реализовать реальный быстрый программа под названием Adder. 926 00:44:23,550 --> 00:44:25,134 Мол, давайте добавим некоторые цифры вместе. 927 00:44:25,134 --> 00:44:27,800 И я собираюсь кодировать некоторые углы здесь, и просто скопировать и вставить 928 00:44:27,800 --> 00:44:30,270 где я был раньше, просто так что мы можем начать работать раньше. 929 00:44:30,270 --> 00:44:33,090 Так что теперь у меня есть основные начала программы под названием Adder. 930 00:44:33,090 --> 00:44:34,670 >> И давайте идти вперед и делать это. 931 00:44:34,670 --> 00:44:38,680 Я собираюсь идти вперед и скажем, IntX получает получить Int. 932 00:44:38,680 --> 00:44:39,430 И знаешь, что? 933 00:44:39,430 --> 00:44:40,990 Давайте сделаем лучший пользовательский опыт. 934 00:44:40,990 --> 00:44:45,740 >> Так что давайте просто скажем х, и эффективно подсказать пользователю, чтобы дать нам х. 935 00:44:45,740 --> 00:44:50,600 А потом дайте мне идти вперед и сказать, Printf как насчет у есть, на этот раз ожидая 936 00:44:50,600 --> 00:44:53,140 два значения от пользователя. 937 00:44:53,140 --> 00:44:59,759 А потом давайте просто идти вперед и скажем, Printf, сумма х и у. 938 00:44:59,759 --> 00:45:01,300 А теперь я не хочу делать процентов с. 939 00:45:01,300 --> 00:45:09,080 Я хочу сделать процент I, обратной косой черты п, а затем подключить значение суммы. 940 00:45:09,080 --> 00:45:10,620 >> Так как я могу идти об этом? 941 00:45:10,620 --> 00:45:11,270 Знаешь что? 942 00:45:11,270 --> 00:45:12,840 Я знаю, как использовать переменные. 943 00:45:12,840 --> 00:45:15,140 Позвольте мне просто объявить новый, Int г. 944 00:45:15,140 --> 00:45:16,770 >> И я собираюсь сделать предположение здесь. 945 00:45:16,770 --> 00:45:21,470 Если имеются равные знаки в этом язык, может быть, я просто не могу сделать х плюс у, 946 00:45:21,470 --> 00:45:23,660 до тех пор, как я закончу свою думал с запятой? 947 00:45:23,660 --> 00:45:28,170 Теперь я могу вернуться сюда, подключить г, закончить эту мысль с запятой. 948 00:45:28,170 --> 00:45:33,160 И давайте посмотрим теперь, если они последовательности lines-- х, это получить Int. 949 00:45:33,160 --> 00:45:34,770 Y это получить Int. 950 00:45:34,770 --> 00:45:37,980 >> Добавить х и у, сохраняют значение в z-- так, опять же, помните, знак равенства 951 00:45:37,980 --> 00:45:38,560 не равна. 952 00:45:38,560 --> 00:45:41,100 Это назначение справа налево. 953 00:45:41,100 --> 00:45:45,180 И давайте печатать, что сумма х и у не буквально г, 954 00:45:45,180 --> 00:45:46,830 но что внутри г. 955 00:45:46,830 --> 00:45:50,090 Так давайте сделаем Adder - не красиво, никаких ошибок в этот раз. 956 00:45:50,090 --> 00:45:53,030 Дот слэш Adder, введите, х будет 1. 957 00:45:53,030 --> 00:45:55,380 >> Y будет 2. 958 00:45:55,380 --> 00:45:58,964 А сумма х и у равна 3. 959 00:45:58,964 --> 00:46:00,130 Так что это все прекрасно и хорошо. 960 00:46:00,130 --> 00:46:03,260 >> Таким образом, вы бы себе представить, что математику должны работать в программе, как это. 961 00:46:03,260 --> 00:46:04,040 Но вы знаете, что? 962 00:46:04,040 --> 00:46:06,904 Является ли эта переменная, строка 12, даже необходимо? 963 00:46:06,904 --> 00:46:09,820 Вам не нужно, чтобы войти в привычку просто хранения вещей в переменных 964 00:46:09,820 --> 00:46:10,980 только потому, что вы можете. 965 00:46:10,980 --> 00:46:13,550 И в самом деле, это как правило, считается плохой дизайн 966 00:46:13,550 --> 00:46:18,100 если вы создаете переменную, называется Z в этом случае, хранение что-то в нем, 967 00:46:18,100 --> 00:46:21,390 а затем сразу же используя его, но никогда. 968 00:46:21,390 --> 00:46:24,700 Зачем давать что-то имя как г, если вы в буквальном смысле 969 00:46:24,700 --> 00:46:26,770 собирается использовать это предмет только один раз, и так 970 00:46:26,770 --> 00:46:29,380 проксимальнее где вы создали это, в первую очередь, 971 00:46:29,380 --> 00:46:31,052 так близко с точки зрения строк кода? 972 00:46:31,052 --> 00:46:31,760 Таким образом, вы знаете, что? 973 00:46:31,760 --> 00:46:34,480 Оказывается, что C является довольно гибким. 974 00:46:34,480 --> 00:46:36,586 Если я на самом деле хочу плагин значений здесь, 975 00:46:36,586 --> 00:46:38,210 Мне не нужно, чтобы объявить новую переменную. 976 00:46:38,210 --> 00:46:41,680 Я мог бы просто плагин х плюс у, потому что понимает, C 977 00:46:41,680 --> 00:46:43,390 арифметические и математические операторы. 978 00:46:43,390 --> 00:46:47,140 >> Так что я могу просто сказать, это сделать математику, х плюс у, какими бы эти значения, 979 00:46:47,140 --> 00:46:50,780 подключите результирующий целое число в этой строке. 980 00:46:50,780 --> 00:46:53,730 Таким образом, это могло бы быть, если бы только одна строка короче, 981 00:46:53,730 --> 00:46:58,480 лучший дизайн, лучшая программа, потому что там меньше кода, поэтому 982 00:46:58,480 --> 00:46:59,921 меньше для меня понять. 983 00:46:59,921 --> 00:47:01,920 И это также просто чище, постольку, поскольку мы не 984 00:47:01,920 --> 00:47:04,620 вводя новые слова, новые символы, как и г, 985 00:47:04,620 --> 00:47:07,510 даже если они на самом деле не служить много цели. 986 00:47:07,510 --> 00:47:12,890 >> К сожалению, математика не является все, что надежные иногда. 987 00:47:12,890 --> 00:47:15,270 Давайте идти вперед и делать это. 988 00:47:15,270 --> 00:47:18,200 Я собираюсь идти вперед сейчас и сделайте следующее. 989 00:47:18,200 --> 00:47:27,650 >> Давайте сделаем Printf, процент I, плюс процент я, должно быть процентов я, обратная косая п. 990 00:47:27,650 --> 00:47:32,240 И я собираюсь сделать this-- хух плюс у. 991 00:47:32,240 --> 00:47:34,821 Так что я просто хочу переписать это немного по-другому здесь. 992 00:47:34,821 --> 00:47:36,320 Позвольте мне сделать быструю проверку вменяемости. 993 00:47:36,320 --> 00:47:37,986 Опять же, давайте не будем забегать вперед. 994 00:47:37,986 --> 00:47:41,420 Сделать сумматор, точка слэш гадюка. 995 00:47:41,420 --> 00:47:44,950 х равен 1, у 2, 1 плюс 2 равно 3. 996 00:47:44,950 --> 00:47:45,870 Так что это хорошо. 997 00:47:45,870 --> 00:47:49,060 Но давайте усложнить это сейчас немного, и создать новый файл. 998 00:47:49,060 --> 00:47:53,350 >> Я буду называть этот, говорят, Интс, множественное число для целых чисел. 999 00:47:53,350 --> 00:47:55,980 Позвольте мне начать, где я был минуту назад. 1000 00:47:55,980 --> 00:47:57,770 Но теперь давайте сделаем несколько других линий. 1001 00:47:57,770 --> 00:48:03,430 Позвольте мне идти вперед и делать следующее, Printf, процент я, минус процент я, 1002 00:48:03,430 --> 00:48:08,959 это процент я, запятая х, запятая ух минус у. 1003 00:48:08,959 --> 00:48:10,750 Так что я немного делаю другая математика там. 1004 00:48:10,750 --> 00:48:11,624 Давайте сделаем еще один. 1005 00:48:11,624 --> 00:48:16,610 Таким образом, процент I раза процентов я это процент я, обратная косая п. 1006 00:48:16,610 --> 00:48:21,430 Давайте плагин х и у, и х раз у. 1007 00:48:21,430 --> 00:48:24,530 Мы будем использовать звездочку ваш компьютер в течение времени. 1008 00:48:24,530 --> 00:48:26,390 >> Вам не нужно использовать х. х имя переменной здесь. 1009 00:48:26,390 --> 00:48:28,270 Вы можете использовать звезду для умножения. 1010 00:48:28,270 --> 00:48:29,020 Давайте сделаем еще один. 1011 00:48:29,020 --> 00:48:34,580 Printf процента I, разделить на процент I, является процент я, 1012 00:48:34,580 --> 00:48:40,460 обратная косая п. ху, деленная на y-- так что вы используете слэш в C 1013 00:48:40,460 --> 00:48:41,502 сделать разделение. 1014 00:48:41,502 --> 00:48:42,460 И давайте сделаем друг друга. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Remainder процента I, разделенный на процент I, является процент я. 1017 00:48:55,240 --> 00:48:59,550 xy-- и теперь осталось это то, что осталось. 1018 00:48:59,550 --> 00:49:02,980 При попытке деления знаменателя в числитель, 1019 00:49:02,980 --> 00:49:05,570 сколько осталось над этим Вы не могли бы разделить вне дома? 1020 00:49:05,570 --> 00:49:07,910 >> Так что не очень, обязательно, символ 1021 00:49:07,910 --> 00:49:09,470 мы использовали в начальной школе для этого. 1022 00:49:09,470 --> 00:49:13,830 Но есть в C. Вы можете говорят х по модулю у, где 1023 00:49:13,830 --> 00:49:18,000 этот знак процента в этом context-- когда вы смутно находитесь внутри 1024 00:49:18,000 --> 00:49:20,170 двойных кавычках, внутри от Printf, процентов 1025 00:49:20,170 --> 00:49:21,830 используется в качестве спецификатора формата. 1026 00:49:21,830 --> 00:49:25,420 >> При использовании процентов за пределами что в математическом выражении, 1027 00:49:25,420 --> 00:49:29,910 это оператор по модулю для модульного arithmetic-- для наших целей 1028 00:49:29,910 --> 00:49:33,650 здесь, просто означает, что такое Остальная часть х делится на у? 1029 00:49:33,650 --> 00:49:36,130 Так х делится на у есть х слэш у. 1030 00:49:36,130 --> 00:49:38,220 Что остальная часть делится на х у? 1031 00:49:38,220 --> 00:49:41,780 Это х мод у, как программист мог бы сказать. 1032 00:49:41,780 --> 00:49:48,300 >> Так что, если я не сделал ни одной ошибки здесь, позвольте мне идти вперед и сделать Интс, множественное число, приятно, 1033 00:49:48,300 --> 00:49:50,010 и точка слэш Интс. 1034 00:49:50,010 --> 00:49:55,270 И давайте идти вперед и делать, скажем, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Хорошо, 1 плюс 10 равно 11, проверка. 1036 00:49:58,390 --> 00:50:01,240 1 минус 10 отрицательный 9, проверьте. 1037 00:50:01,240 --> 00:50:03,420 >> 1 раз в 10: 10, проверка. 1038 00:50:03,420 --> 00:50:07,090 1 делится на 10 is-- Хорошо, мы пропустим что один. 1039 00:50:07,090 --> 00:50:09,480 Остаток 1 делится на 10 равно 1. 1040 00:50:09,480 --> 00:50:10,680 Правильно. 1041 00:50:10,680 --> 00:50:12,630 Но есть ошибка здесь. 1042 00:50:12,630 --> 00:50:15,390 >> Таким образом, тот, который я кладу сдать, не правильно. 1043 00:50:15,390 --> 00:50:16,670 Я имею в виду, что это близко к 0. 1044 00:50:16,670 --> 00:50:20,670 1 делится на 10, вы знаете, если мы резки некоторые углы, конечно, это ноль. 1045 00:50:20,670 --> 00:50:28,050 Но это должно быть действительно 1/10, 0,1 или 0,10, 0,1000, или тому подобное. 1046 00:50:28,050 --> 00:50:30,600 >> Она не должна действительно быть равна нулю. 1047 00:50:30,600 --> 00:50:35,990 Что ж, получается, что компьютер делать буквально то, что мы сказали это сделать. 1048 00:50:35,990 --> 00:50:39,460 Мы делаем математику как х, деленное на у. 1049 00:50:39,460 --> 00:50:44,680 И оба х и у, на линии кода ранее, являются целыми числами. 1050 00:50:44,680 --> 00:50:50,440 >> Кроме того, по линии 15, мы говоря Printf, эй, Printf плагин 1051 00:50:50,440 --> 00:50:54,230 целое число, вставной целое число, плагин в integer-- специально 1052 00:50:54,230 --> 00:50:57,580 х, а затем у, а затем х делится на у. х и у Интс. 1053 00:50:57,580 --> 00:50:59,060 Мы там хорошо. 1054 00:50:59,060 --> 00:51:01,250 >> Но что х делится на х? 1055 00:51:01,250 --> 00:51:06,790 х делится на у и должно быть, математически, 1/10, или 0,1, 1056 00:51:06,790 --> 00:51:11,600 которая представляет собой действительное число, вещественное число имея, потенциально, десятичную точку. 1057 00:51:11,600 --> 00:51:13,230 Это не является целым числом. 1058 00:51:13,230 --> 00:51:18,290 >> Но то, что ближе всего целое число, 1/10, или 0,1? 1059 00:51:18,290 --> 00:51:21,114 Да, это своего рода равна нулю. 1060 00:51:21,114 --> 00:51:22,030 0,1, как это много. 1061 00:51:22,030 --> 00:51:22,890 И 1 это много. 1062 00:51:22,890 --> 00:51:25,870 Таким образом, 1/10 ближе к 0, чем к одному. 1063 00:51:25,870 --> 00:51:30,800 >> И так, что C делает для us-- вид, потому что мы сказали это, целью которых 1064 00:51:30,800 --> 00:51:32,600 является усечения, что целое число. 1065 00:51:32,600 --> 00:51:40,540 Он принимает значение, что опять-таки является должно быть что-то вроде 0,1000, 1066 00:51:40,540 --> 00:51:41,800 0 и так далее. 1067 00:51:41,800 --> 00:51:45,320 И это все, что усечение после десятичной точки 1068 00:51:45,320 --> 00:51:47,510 так что все это материал, потому что это не 1069 00:51:47,510 --> 00:51:51,910 вписывается в понятие целого числа, что это просто число, как отрицательный 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 вверх и вниз, он отбрасывает все после десятичной точки, потому что вы 1071 00:51:55,830 --> 00:51:59,020 не может соответствовать десятичную точку в целое число, по определению. 1072 00:51:59,020 --> 00:52:01,290 >> Таким образом, ответ здесь равен нулю. 1073 00:52:01,290 --> 00:52:02,600 Так как же мы это исправить? 1074 00:52:02,600 --> 00:52:04,400 Нам нужно другое решение все вместе. 1075 00:52:04,400 --> 00:52:06,880 И мы можем сделать это следующим образом. 1076 00:52:06,880 --> 00:52:12,820 >> Позвольте мне идти вперед и создать новый Файл, на этот раз называется floats.c. 1077 00:52:12,820 --> 00:52:16,500 И сохранить его здесь, в тот же каталог, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 И позвольте мне идти вперед и скопировать часть этого кода из ранее. 1080 00:52:23,260 --> 00:52:27,690 >> Но вместо того, чтобы INT, давайте сделаем это. 1081 00:52:27,690 --> 00:52:31,037 Дайте мне значение с плавающей запятой называется х. где с плавающей точкой 1082 00:52:31,037 --> 00:52:33,370 значение только в буквальном смысле что-то с плавающей точкой. 1083 00:52:33,370 --> 00:52:34,410 Он может перемещаться влево, вправо. 1084 00:52:34,410 --> 00:52:35,530 Это вещественное число. 1085 00:52:35,530 --> 00:52:38,050 >> И позвольте мне не называть получить Int, но получить с плавающей точкой, 1086 00:52:38,050 --> 00:52:41,420 который также был одним из меню опций в библиотеке C250. 1087 00:52:41,420 --> 00:52:43,220 Давайте изменим у к поплавку. 1088 00:52:43,220 --> 00:52:45,000 Так что это будет получить с плавающей точкой. 1089 00:52:45,000 --> 00:52:47,620 >> А теперь, мы не хотим, чтобы подключить Интс. 1090 00:52:47,620 --> 00:52:53,130 Оказывается, мы должны использовать процентов е для поплавка, процент F для поплавка, 1091 00:52:53,130 --> 00:52:54,560 и теперь сохранить его. 1092 00:52:54,560 --> 00:53:01,220 А теперь, скрестив пальцы, сделайте поплавки, красиво, точка слэш поплавки. 1093 00:53:01,220 --> 00:53:04,280 х будет одним 1. у Будет 10 раз. 1094 00:53:04,280 --> 00:53:08,240 >> И, хорошо, хорошо мое дополнение является правильным. 1095 00:53:08,240 --> 00:53:10,240 Я надеялся на более, но я забыл написать. 1096 00:53:10,240 --> 00:53:13,250 Так что давайте идти и исправить эту логическую ошибку. 1097 00:53:13,250 --> 00:53:16,280 >> Давайте идти вперед и захватить следующее. 1098 00:53:16,280 --> 00:53:18,080 Мы просто делаем немного копирования и вставки. 1099 00:53:18,080 --> 00:53:20,080 И я хочу сказать, минус. 1100 00:53:20,080 --> 00:53:21,890 >> И я хочу сказать, раз. 1101 00:53:21,890 --> 00:53:24,060 И я хочу сказать, разделились. 1102 00:53:24,060 --> 00:53:28,240 И я не буду делать по модулю, которая не является, как релевантный здесь, 1103 00:53:28,240 --> 00:53:33,690 делится на F, и раз plus-- Хорошо, давайте сделаем это снова. 1104 00:53:33,690 --> 00:53:44,210 >> Сделать поплавки, точка слэш поплавки, и 1, 10, и-- хорошо, нет, ОК. 1105 00:53:44,210 --> 00:53:45,250 Так что я идиот. 1106 00:53:45,250 --> 00:53:47,000 Так что это очень распространенная в информатике 1107 00:53:47,000 --> 00:53:49,780 чтобы сделать глупые ошибки, как это. 1108 00:53:49,780 --> 00:53:53,100 >> Для педагогических целей, что я действительно хотел сделать 1109 00:53:53,100 --> 00:53:57,410 был изменить науку здесь на плюс, в минус, к временам, 1110 00:53:57,410 --> 00:54:01,140 и разделить, как вы, надеюсь, заметили во время этого упражнения. 1111 00:54:01,140 --> 00:54:04,700 Итак, теперь давайте заново скомпилировать Программа, делать точечные слэш поплавки. 1112 00:54:04,700 --> 00:54:07,950 >> И в третий раз, давайте увидеть, если она отвечает моим ожиданиям. 1113 00:54:07,950 --> 00:54:21,480 1, 10, введите, да, хорошо, 1.000, разделенный на 10000, это 0,100000. 1114 00:54:21,480 --> 00:54:24,952 И получается, что мы можем контролировать, сколько цифры после этих знаков после запятой. 1115 00:54:24,952 --> 00:54:25,660 Мы на самом деле будет. 1116 00:54:25,660 --> 00:54:26,790 Мы вернемся к этому. 1117 00:54:26,790 --> 00:54:28,440 >> Но теперь, по сути, математика является правильным. 1118 00:54:28,440 --> 00:54:30,090 Так что, опять же, что вынос здесь? 1119 00:54:30,090 --> 00:54:33,050 Оказывается, что в C, есть не только strings-- и, на самом деле, 1120 00:54:33,050 --> 00:54:36,120 есть не очень, потому что мы добавить те, с библиотекой CS50. 1121 00:54:36,120 --> 00:54:37,710 Но есть не только Интс. 1122 00:54:37,710 --> 00:54:38,990 >> Есть также плавает. 1123 00:54:38,990 --> 00:54:42,810 И получается, кучу других данных типа также, что мы будем использовать в скором времени. 1124 00:54:42,810 --> 00:54:46,270 Оказывается, если вы хотите один характер, а не строка символов, 1125 00:54:46,270 --> 00:54:47,610 вы можете использовать только символ. 1126 00:54:47,610 --> 00:54:52,350 >> Оказывается, что если вы хотите, логическое значение, логическое значение, истина или ложь только, 1127 00:54:52,350 --> 00:54:56,840 благодаря библиотеке CS50, мы добавляется к C типу данных BOOL, а также. 1128 00:54:56,840 --> 00:54:59,180 Но это также присутствует в многих других языках, а также. 1129 00:54:59,180 --> 00:55:04,130 И получается, что иногда вам нужны большие цифры, а затем приходят по умолчанию 1130 00:55:04,130 --> 00:55:05,210 с Интс и поплавками. 1131 00:55:05,210 --> 00:55:10,590 >> И, по сути, двойной ряд который использует не 32 бита, но 64 бита. 1132 00:55:10,590 --> 00:55:14,990 И долго долго это число, использует не 32, биты, но 64 бита, 1133 00:55:14,990 --> 00:55:19,190 соответственно, операций с плавающей точкой значения и целые числа, соответственно. 1134 00:55:19,190 --> 00:55:22,780 Так что давайте на самом деле в настоящее время увидеть это в действии. 1135 00:55:22,780 --> 00:55:26,150 >> Я собираюсь идти вперед здесь и нагнетать одну другую программу. 1136 00:55:26,150 --> 00:55:32,020 Здесь я собираюсь идти вперед и не включают CS50.h. 1137 00:55:32,020 --> 00:55:34,910 И позвольте мне идти, включают в себя стандартные IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> И вы заметите что-то фанки здесь происходит. 1139 00:55:37,320 --> 00:55:40,592 Это не цветовое кодирование вещи точно так же, как это было раньше. 1140 00:55:40,592 --> 00:55:43,550 И оказывается, что это потому, что я не дали вещь имя файла. 1141 00:55:43,550 --> 00:55:47,270 >> Я буду называть этот sizeof.c, и нажмите кнопку Сохранить. 1142 00:55:47,270 --> 00:55:51,039 И обратите внимание, что происходит с моей очень белый код против этого черный фон. 1143 00:55:51,039 --> 00:55:52,830 Теперь, по крайней мере есть некоторые фиолетовые там. 1144 00:55:52,830 --> 00:55:54,490 И это синтаксис выделен. 1145 00:55:54,490 --> 00:55:57,700 >> Это потому, что довольно просто, у меня есть рассказал, какой тип файла IDE 1146 00:55:57,700 --> 00:56:01,060 это, давая ему имя, и в частности, расширение файла. 1147 00:56:01,060 --> 00:56:03,620 Теперь, давайте идти вперед и делать это. 1148 00:56:03,620 --> 00:56:08,910 Я собираюсь идти вперед и очень просто распечатать following-- Ьоо 1149 00:56:08,910 --> 00:56:11,080 это процент LU. 1150 00:56:11,080 --> 00:56:12,950 >> Мы вернемся к что в мгновение. 1151 00:56:12,950 --> 00:56:15,840 А потом я собираюсь размер печати BOOL. 1152 00:56:15,840 --> 00:56:18,170 И теперь, чтобы сэкономить я какое-то время, я 1153 00:56:18,170 --> 00:56:20,280 собирается сделать целое букет из них сразу. 1154 00:56:20,280 --> 00:56:24,620 И, в частности, я собираюсь изменить это к гольца и голец. 1155 00:56:24,620 --> 00:56:27,760 Это одно, я собираюсь изменить к двойной и двойной. 1156 00:56:27,760 --> 00:56:31,440 >> Это одно, я собираюсь изменить к поплавку и поплавком. 1157 00:56:31,440 --> 00:56:35,670 Это одно, я собираюсь изменится на Int и Int. 1158 00:56:35,670 --> 00:56:38,660 А это, я собираюсь чтобы изменить долго долго. 1159 00:56:38,660 --> 00:56:40,840 И он по-прежнему принимает долго, долго долго. 1160 00:56:40,840 --> 00:56:44,572 >> И тогда, наконец, я дал я слишком много, строка. 1161 00:56:44,572 --> 00:56:47,030 Оказывается, что в C, есть специальный оператор называется 1162 00:56:47,030 --> 00:56:50,260 размер, что буквально собирается, при запуске, 1163 00:56:50,260 --> 00:56:52,099 скажите нам размер каждая из этих переменных. 1164 00:56:52,099 --> 00:56:53,890 И это путь, в настоящее время, мы можем соединиться назад 1165 00:56:53,890 --> 00:56:57,140 для обсуждения на прошлой неделе данных и представления. 1166 00:56:57,140 --> 00:57:00,330 >> Позвольте мне идти вперед и компилировать размер точечного размера Слэш. 1167 00:57:00,330 --> 00:57:01,210 И давайте посмотрим. 1168 00:57:01,210 --> 00:57:05,210 Оказывается, что в C, в частности, на CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 в частности, на Операционная система Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 который является 64-разрядной операционной Система в этом случае, 1171 00:57:11,100 --> 00:57:14,189 логическое значение будет использовать один байт пространства. 1172 00:57:14,189 --> 00:57:16,480 Вот как измеряется размер, не в битах, а в байтах. 1173 00:57:16,480 --> 00:57:18,690 И помните, что один байт восемь бит. 1174 00:57:18,690 --> 00:57:22,030 Так BOOL, даже если вы технически нужно только 0 или 1, 1175 00:57:22,030 --> 00:57:24,092 это немного расточительно как мы реализовали. 1176 00:57:24,092 --> 00:57:26,800 Это на самом деле собирается использовать весь byte-- так все нули, являются, возможно, 1177 00:57:26,800 --> 00:57:31,050 все те, или что-то подобное, или только один 1 из восьми битов. 1178 00:57:31,050 --> 00:57:34,962 >> Полукокса, тем временем, используется для символа как символ Ascii за последнюю неделю, 1179 00:57:34,962 --> 00:57:36,170 будет один символ. 1180 00:57:36,170 --> 00:57:42,340 И это синхронизируется с нашим понятием не будучи не более 256 bits-- а, 1181 00:57:42,340 --> 00:57:45,360 синхронизируется с ним быть не длиннее, чем 8 бит, что 1182 00:57:45,360 --> 00:57:47,450 дает нам целых 256 значений. 1183 00:57:47,450 --> 00:57:49,680 Двойной собирается составляет 8 байт или 64 бита. 1184 00:57:49,680 --> 00:57:50,510 >> Поплавок 4. 1185 00:57:50,510 --> 00:57:51,690 ИНТ 4. 1186 00:57:51,690 --> 00:57:52,980 Длинный, длинный 8. 1187 00:57:52,980 --> 00:57:54,716 И строка 8. 1188 00:57:54,716 --> 00:57:55,840 Но не беспокойтесь об этом. 1189 00:57:55,840 --> 00:57:57,340 Мы собираемся отогните этот слой. 1190 00:57:57,340 --> 00:57:59,940 Оказывается, строки могут быть длиннее 8 байт. 1191 00:57:59,940 --> 00:58:02,310 >> И действительно, мы написали строки уже, привет мир, 1192 00:58:02,310 --> 00:58:03,700 больше, чем 8 байт. 1193 00:58:03,700 --> 00:58:06,270 Но мы вернемся к что в мгновение. 1194 00:58:06,270 --> 00:58:09,690 Но заберите здесь заключается в следующем. 1195 00:58:09,690 --> 00:58:15,320 >> Любой компьютер имеет только конечное объем памяти и пространства. 1196 00:58:15,320 --> 00:58:17,860 Вы можете только хранить так много файлы на вашем Mac или PC. 1197 00:58:17,860 --> 00:58:23,030 Вы можете только хранить так много программ RAM работает сразу, обязательно, даже 1198 00:58:23,030 --> 00:58:26,360 с виртуальной памятью, потому что у вас есть ограниченное количество оперативной памяти. 1199 00:58:26,360 --> 00:58:28,990 >> И только если picture-- вы никогда не открыли ноутбук 1200 00:58:28,990 --> 00:58:31,300 или заказать дополнительную память для компьютера, вы 1201 00:58:31,300 --> 00:58:33,670 может не знать, что внутри вашего компьютера 1202 00:58:33,670 --> 00:58:36,590 это то, что выглядит немного как это. 1203 00:58:36,590 --> 00:58:40,540 Так что это просто обычная компания под названием Решающее значение, что делает оперативной памяти для компьютеров. 1204 00:58:40,540 --> 00:58:43,620 И оперативная память, где программы жить в то время как они работают. 1205 00:58:43,620 --> 00:58:46,630 >> Так что на каждом Mac или PC, при двойном выберите программу, и она открывает, 1206 00:58:46,630 --> 00:58:48,921 и это открывает какой-то документ Word, или что-то типа того, 1207 00:58:48,921 --> 00:58:51,764 он сохраняет ее на некоторое время в RAM, поскольку оперативная память быстрее 1208 00:58:51,764 --> 00:58:53,680 чем ваш жесткий диск, или ваш твердотельный накопитель. 1209 00:58:53,680 --> 00:58:56,600 Так что это просто, где программы идут жить, когда они работают, 1210 00:58:56,600 --> 00:58:58,060 или когда используются файлы. 1211 00:58:58,060 --> 00:59:00,890 >> Так что у вас есть вещи, которые выглядят как это внутри вашего ноутбука, 1212 00:59:00,890 --> 00:59:03,320 или немного больше вещей внутри вашего рабочего стола. 1213 00:59:03,320 --> 00:59:07,440 Но ключ у вас есть только конечное число этих вещей. 1214 00:59:07,440 --> 00:59:11,230 И есть только конечное количество аппаратное обеспечение, сидя на этом столе правой 1215 00:59:11,230 --> 00:59:11,730 Вот. 1216 00:59:11,730 --> 00:59:15,920 >> Так что, конечно же, мы не можем хранить бесконечно длинных чисел. 1217 00:59:15,920 --> 00:59:19,030 И, тем не менее, если вы думаете, обратно начальной школы, сколько цифр может 1218 00:59:19,030 --> 00:59:21,400 вы должны права из десятичной точки? 1219 00:59:21,400 --> 00:59:24,680 В этом отношении, сколько цифр может у вас есть слева от десятичной точки? 1220 00:59:24,680 --> 00:59:26,300 Действительно, бесконечно много. 1221 00:59:26,300 --> 00:59:30,840 >> Теперь мы, люди могли бы только знаете, как произносится миллион, 1222 00:59:30,840 --> 00:59:34,990 и миллиард, триллион, и квадриллионов и квинтильонов. 1223 00:59:34,990 --> 00:59:39,370 И я раздвигают границы моего understanding-- или my-- Я понимаю, 1224 00:59:39,370 --> 00:59:41,110 цифры, но мой произношение чисел. 1225 00:59:41,110 --> 00:59:44,720 Но они могут получить бесконечно большой с бесконечно много цифр слева 1226 00:59:44,720 --> 00:59:47,050 или справа от десятичной точки. 1227 00:59:47,050 --> 00:59:50,040 >> Но компьютеры есть только конечное количество памяти, 1228 00:59:50,040 --> 00:59:53,510 конечное число транзисторов, A конечное число лампочек внутри. 1229 00:59:53,510 --> 00:59:57,350 Так что же происходит, когда вы бежите из космоса? 1230 00:59:57,350 --> 00:59:59,620 Другими словами, если вы думаю, что вернуться к прошлой неделе 1231 00:59:59,620 --> 01:00:03,160 когда мы говорили о цифрах Сами представлены в двоичном виде, 1232 01:00:03,160 --> 01:00:05,480 Предположим, что у нас есть это 8-битное значение здесь. 1233 01:00:05,480 --> 01:00:08,290 >> И у нас есть семь 1 и один 0. 1234 01:00:08,290 --> 01:00:10,827 И предположим, что мы хотим добавить 1 к этому значению. 1235 01:00:10,827 --> 01:00:12,410 Это действительно большое число прямо сейчас. 1236 01:00:12,410 --> 01:00:16,610 >> Это 254, если я помню математика с прошлой недели справа. 1237 01:00:16,610 --> 01:00:19,480 Но что, если я изменить что крайний справа от 0 до 1? 1238 01:00:19,480 --> 01:00:22,800 Целое число, из Конечно, будет восемь 1-х. 1239 01:00:22,800 --> 01:00:24,050 Таким образом, мы по-прежнему хорошо. 1240 01:00:24,050 --> 01:00:27,204 >> И это, вероятно, представляет 255, хотя в зависимости от контекста 1241 01:00:27,204 --> 01:00:29,120 он может на самом деле представляют отрицательное число. 1242 01:00:29,120 --> 01:00:31,240 Но об этом в другой раз. 1243 01:00:31,240 --> 01:00:34,220 Это чувство, что речь идет о столь же высоко, как я могу рассчитывать. 1244 01:00:34,220 --> 01:00:35,290 >> Теперь, это только 8 бит. 1245 01:00:35,290 --> 01:00:38,170 И мой Mac, конечно же, есть путь более 8 бит памяти. 1246 01:00:38,170 --> 01:00:39,170 Но у него есть конечное. 1247 01:00:39,170 --> 01:00:43,230 Таким образом, тот же аргумент применим, даже если мы имеют более из этих единиц на экране. 1248 01:00:43,230 --> 01:00:47,020 >> Но что произойдет, если вы хранения этого числа, 255, 1249 01:00:47,020 --> 01:00:49,290 и вы хотите считать 1 немного выше? 1250 01:00:49,290 --> 01:00:51,600 Вы хотите перейти от 255 до 256. 1251 01:00:51,600 --> 01:00:55,800 Проблема, конечно, в том, что если вы начать отсчет с нуля, как на прошлой неделе, 1252 01:00:55,800 --> 01:00:59,670 вы не можете рассчитывать, как высокий в 256, не говоря уже о 257, 1253 01:00:59,670 --> 01:01:02,584 не говоря уже о 258, м, потому что происходит, когда вы добавляете 1? 1254 01:01:02,584 --> 01:01:05,000 Если вы делаете старую начальную школу подход, вы положили 1 здесь, 1255 01:01:05,000 --> 01:01:08,150 а затем 1 плюс 1 равно 2, но это на самом деле ноль, вы носите 1, 1256 01:01:08,150 --> 01:01:09,695 нести 1, нести 1. 1257 01:01:09,695 --> 01:01:12,620 Все эти вещи, эти 1, перейдите к нулю. 1258 01:01:12,620 --> 01:01:17,820 И ветер, да, как кто-то указал, что в 1 на левой стороне. 1259 01:01:17,820 --> 01:01:22,540 Но все, что вы можете на самом деле увидеть и помещается в памяти 1260 01:01:22,540 --> 01:01:27,960 находится всего в восьми 0, который должен сказать, в какой-то момент, если вы, компьютер, 1261 01:01:27,960 --> 01:01:32,490 судимый подсчета достаточно высоко, вы собирается обернуть вокруг, казалось бы, 1262 01:01:32,490 --> 01:01:35,850 к нулю, или, может быть даже отрицательным цифры, которые даже ниже нуля. 1263 01:01:35,850 --> 01:01:37,260 >> И мы можем рода увидеть это. 1264 01:01:37,260 --> 01:01:39,900 Позвольте мне идти вперед и написать реальная быстрая программа здесь. 1265 01:01:39,900 --> 01:01:43,690 Позвольте мне идти вперед и написать программа под названием перелива. 1266 01:01:43,690 --> 01:01:49,980 Включите CS50.h, включите стандарт IO.h-- о, 1267 01:01:49,980 --> 01:01:51,730 Я действительно пропустил мой подсветку синтаксиса. 1268 01:01:51,730 --> 01:01:54,440 Так давайте сохраним это как overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> А теперь главный INT void-- и до тех пор, мы будем 1270 01:01:57,084 --> 01:01:59,500 вернуться к объяснению, почему мы продолжаем писать Int основную пустоту. 1271 01:01:59,500 --> 01:02:02,080 Но сейчас, давайте просто делать она, принимая его как само собой разумеющееся. 1272 01:02:02,080 --> 01:02:06,200 Давайте дать себе Int, и инициализировать его до 0. 1273 01:02:06,200 --> 01:02:11,716 >> Давайте тогда сделать для Int я получаю zero-- на самом деле, давайте делать бесконечный цикл 1274 01:02:11,716 --> 01:02:12,590 и посмотреть, что происходит. 1275 01:02:12,590 --> 01:02:22,440 В то время как верно, то давайте распечатать п это процент я, обратная косая черта п, плагин п. 1276 01:02:22,440 --> 01:02:27,200 Но теперь, давайте п получает п плюс 1. 1277 01:02:27,200 --> 01:02:29,660 >> Итак, другими словами, на каждый итерация этого бесконечного цикла, 1278 01:02:29,660 --> 01:02:32,550 давайте рассмотрим значения п, в и добавить к нему 1, а затем 1279 01:02:32,550 --> 01:02:34,350 сохранить результат в п на левой стороне. 1280 01:02:34,350 --> 01:02:37,150 И в самом деле, мы уже видели синтаксис немного, как это, на короткое время. 1281 01:02:37,150 --> 01:02:39,730 Прохладный трюк вместо этого писать все это, 1282 01:02:39,730 --> 01:02:42,770 вы можете сказать, п ​​плюс равен 1. 1283 01:02:42,770 --> 01:02:47,480 >> Или, если вы действительно хотите быть фантазии, Вы можете сказать, п ​​плюс плюс точка с запятой. 1284 01:02:47,480 --> 01:02:50,130 Но эти последние два просто то, что мы назвали бы синтаксический сахар 1285 01:02:50,130 --> 01:02:50,790 для первой вещи. 1286 01:02:50,790 --> 01:02:53,456 >> Первое, что является более явным, совершенно нормально, совершенно правильно. 1287 01:02:53,456 --> 01:02:55,470 Но это чаще, я скажу. 1288 01:02:55,470 --> 01:02:57,210 Таким образом, мы будем делать это на мгновение. 1289 01:02:57,210 --> 01:03:01,685 >> Давайте теперь сделать переполнение, которая звучит довольно зловеще, точка переполнения косой черты. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Давайте посмотрим, п становится довольно большой. 1292 01:03:09,852 --> 01:03:11,310 Но давайте подумаем, насколько велика может получить п? 1293 01:03:11,310 --> 01:03:12,870 >> п является Int. 1294 01:03:12,870 --> 01:03:16,400 Мы видели минуту назад с размером пример, что INT четыре байта. 1295 01:03:16,400 --> 01:03:22,070 Мы знаем, что с прошлой недели, четыре байта является 32 бита, потому что в 8 раз 4, это 32. 1296 01:03:22,070 --> 01:03:23,460 Это будет 4 млрд. 1297 01:03:23,460 --> 01:03:25,802 >> И мы до 800,000. 1298 01:03:25,802 --> 01:03:28,510 Это будет длиться вечно рассчитывать так высоко, как я, возможно, может. 1299 01:03:28,510 --> 01:03:30,635 Так что я собираюсь идти вперед, как вы могли бы в скором времени, 1300 01:03:30,635 --> 01:03:34,910 и ударил управления c-- откровенно, контроль C, много, где управление C в целом 1301 01:03:34,910 --> 01:03:36,034 средство отмены. 1302 01:03:36,034 --> 01:03:38,200 К сожалению, так как этот работает в облаке, 1303 01:03:38,200 --> 01:03:41,190 иногда облако выплевывая так много вещей, 1304 01:03:41,190 --> 01:03:44,180 так много вывода, он собирается занять некоторое время для моего ввода 1305 01:03:44,180 --> 01:03:45,630 чтобы добраться до облака. 1306 01:03:45,630 --> 01:03:49,240 Так что, хотя я ударил Контроль C несколько секунд назад, 1307 01:03:49,240 --> 01:03:53,110 это, безусловно, сторона эффект бесконечного цикла. 1308 01:03:53,110 --> 01:03:56,070 >> И поэтому в таких случаях, мы собирается оставить это быть. 1309 01:03:56,070 --> 01:03:59,050 И мы собираемся добавить еще окно терминала здесь 1310 01:03:59,050 --> 01:04:03,186 с плюсом, который, конечно, не как это, так как он все еще думает. 1311 01:04:03,186 --> 01:04:05,310 И давайте идти вперед и быть чуть более разумным. 1312 01:04:05,310 --> 01:04:07,768 >> Я собираюсь идти вперед и делать это лишь конечное число раз. 1313 01:04:07,768 --> 01:04:10,047 Давайте использовать цикл, которые я упоминал ранее. 1314 01:04:10,047 --> 01:04:10,630 Давай сделаем это. 1315 01:04:10,630 --> 01:04:13,430 Дайте мне другую переменную Int я получает 0. 1316 01:04:13,430 --> 01:04:17,430 я меньше, чем, скажем, 64 я ++. 1317 01:04:17,430 --> 01:04:24,010 А теперь позвольте мне идти вперед и печать из п процентов я, запятая п. 1318 01:04:24,010 --> 01:04:27,547 И тогда это N-, до сих пор собирается взять навсегда. 1319 01:04:27,547 --> 01:04:28,130 Давай сделаем это. 1320 01:04:28,130 --> 01:04:30,620 >> п получает п раз 2. 1321 01:04:30,620 --> 01:04:34,140 Или мы могли бы быть фантазии и делать раз равна 2. 1322 01:04:34,140 --> 01:04:37,120 Но давайте просто скажем, п равно сама по себе, раз 2. 1323 01:04:37,120 --> 01:04:39,321 Другими словами, в этом Новая версия программы, 1324 01:04:39,321 --> 01:04:41,820 Я не хочу ждать вечно от 800 000, как до 4 миллиардов. 1325 01:04:41,820 --> 01:04:43,070 Давайте просто покончим с этим. 1326 01:04:43,070 --> 01:04:44,920 >> Давайте на самом деле в два раза п каждый раз. 1327 01:04:44,920 --> 01:04:47,660 Который, напомним, является удвоением напротив того, конечно. 1328 01:04:47,660 --> 01:04:50,035 И в то время как на прошлой неделе у нас есть что-то снова и снова, 1329 01:04:50,035 --> 01:04:52,200 и снова, супер быстрый, Удвоение, безусловно, 1330 01:04:52,200 --> 01:04:58,080 получить нас от 1 до самой большой возможно значение, которое мы можем рассчитывать, чтобы с междунар. 1331 01:04:58,080 --> 01:04:59,750 >> Так что давайте делать именно это. 1332 01:04:59,750 --> 01:05:01,720 И мы вернемся к этому в скором времени. 1333 01:05:01,720 --> 01:05:04,180 Но это, опять же, как и повтор блока в пустом месте. 1334 01:05:04,180 --> 01:05:05,600 И вы будете использовать это до тех пор. 1335 01:05:05,600 --> 01:05:10,170 >> Это просто означает, что отсчет от нуля до, но не равны, до 64 лет. 1336 01:05:10,170 --> 01:05:14,285 И на каждой итерации этого цикл, просто держать приращением я. 1337 01:05:14,285 --> 01:05:18,990 Так что я ++ - и эта общая конструкция в строке 7 это просто супер распространенный способ 1338 01:05:18,990 --> 01:05:22,290 повторять несколько строк код, некоторое количество раз. 1339 01:05:22,290 --> 01:05:23,362 Какие строки кода? 1340 01:05:23,362 --> 01:05:25,570 Эти фигурные скобки, как вы возможно, почерпнутые теперь, 1341 01:05:25,570 --> 01:05:26,780 означает, сделайте следующее. 1342 01:05:26,780 --> 01:05:29,510 >> Это в такой царапины, когда он имеет желтые блоки 1343 01:05:29,510 --> 01:05:32,680 и другие цвета, вид принять или обнимают другие блоки. 1344 01:05:32,680 --> 01:05:34,750 Вот что эти фигурные брекеты делают здесь. 1345 01:05:34,750 --> 01:05:40,200 Так что, если я получил свой синтаксис right-- вас можно увидеть символ морковь в средствах C 1346 01:05:40,200 --> 01:05:42,706 вот сколько раз я был пытаясь решить эту проблему. 1347 01:05:42,706 --> 01:05:45,330 Так что давайте избавиться от этого одного в целом, и закрыть это окно. 1348 01:05:45,330 --> 01:05:46,520 И мы будем использовать новый. 1349 01:05:46,520 --> 01:05:51,980 Сделать переполнения, точка слэш Переполнение, Enter, все в порядке, 1350 01:05:51,980 --> 01:05:53,090 это выглядит плохо на первый взгляд. 1351 01:05:53,090 --> 01:05:56,200 Но давайте прокручивать назад во времени, потому что я сделал это 64 раз. 1352 01:05:56,200 --> 01:05:58,700 >> И заметьте, в первый раз, п равно 1. 1353 01:05:58,700 --> 01:06:03,110 Второй раз, п = 2, затем 4, затем 8, затем 16. 1354 01:06:03,110 --> 01:06:09,450 И мне кажется, что как только Я получаю примерно 1 млрд, 1355 01:06:09,450 --> 01:06:12,800 если я снова удвоить ее, что должен дать мне 2 миллиарда долларов. 1356 01:06:12,800 --> 01:06:14,980 Но оказывается, это прямо на пороге. 1357 01:06:14,980 --> 01:06:18,930 >> И это на самом деле переливается INT с 1 млрд 1358 01:06:18,930 --> 01:06:23,514 грубо отрицательное 2 млрд, так как целое число, 1359 01:06:23,514 --> 01:06:25,430 в отличие от чисел мы принимают на себя на прошлой неделе, 1360 01:06:25,430 --> 01:06:28,397 может быть как положительным, так и отрицательным на самом деле, и в компьютере. 1361 01:06:28,397 --> 01:06:30,730 И так по крайней мере, один из тех, биты эффективно украдены. 1362 01:06:30,730 --> 01:06:34,190 Таким образом, мы действительно только 31 бит, или 2 миллиарда возможных значений. 1363 01:06:34,190 --> 01:06:38,220 >> Но на данный момент, еда на дом вполне просто, каковы бы ни были эти цифры 1364 01:06:38,220 --> 01:06:42,280 и независимо от того математика, что-то плохое случается в конце концов, 1365 01:06:42,280 --> 01:06:46,980 потому что в конце концов, вы пытаетесь переставляют биты слишком много раз. 1366 01:06:46,980 --> 01:06:51,060 И вы эффективно перейти от всех 1-х, может быть, все 0, или, может быть, 1367 01:06:51,060 --> 01:06:54,260 просто какой-то другой модели, что оно Очевидно, что в зависимости от контекста, 1368 01:06:54,260 --> 01:06:56,342 может быть истолковано как отрицательное число. 1369 01:06:56,342 --> 01:06:59,300 И вот, казалось бы, самый высокий I может рассчитывать в этой конкретной программе 1370 01:06:59,300 --> 01:07:01,210 составляет всего около 1 млрд. 1371 01:07:01,210 --> 01:07:02,760 Но есть частичное решение здесь. 1372 01:07:02,760 --> 01:07:03,480 Знаешь что? 1373 01:07:03,480 --> 01:07:07,600 >> Позвольте мне изменить из Int на долгое долго. 1374 01:07:07,600 --> 01:07:10,633 И позвольте мне идти вперед здесь и say-- я буду иметь 1375 01:07:10,633 --> 01:07:12,290 чтобы изменить это без знака долго. 1376 01:07:12,290 --> 01:07:16,860 Или, давайте посмотрим, я никогда не помню себя. 1377 01:07:16,860 --> 01:07:19,920 >> Давайте идти вперед и сделать переполнение. 1378 01:07:19,920 --> 01:07:21,860 Нет, это не так, ДНУ, спасибо. 1379 01:07:21,860 --> 01:07:23,430 Так что иногда Clang может быть полезным. 1380 01:07:23,430 --> 01:07:27,550 Я не помню, какой формат Спецификатор был долго долго. 1381 01:07:27,550 --> 01:07:28,950 >> Но, на самом деле, Clang сказал мне. 1382 01:07:28,950 --> 01:07:31,570 Зеленый является своего рода хорошо, по-прежнему означает, что вы сделали ошибку. 1383 01:07:31,570 --> 01:07:33,190 Это догадываясь, что я имел в виду LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Итак, позвольте мне взять это совет, длинный длинный десятичное число, кроме того, что. 1385 01:07:38,750 --> 01:07:43,190 И позвольте мне снова запустить его, точка слэш переполнение, Enter. 1386 01:07:43,190 --> 01:07:45,020 А теперь, что это круто это. 1387 01:07:45,020 --> 01:07:49,140 >> Если я прокручиваю назад во времени, мы до сих пор начать считая в то же place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Обратите внимание, мы получаем все вплоть до 1 млрд. 1390 01:07:54,860 --> 01:07:57,070 Но тогда мы благополучно добраться до 2 млрд. 1391 01:07:57,070 --> 01:08:01,300 >> Тогда мы получим 4 млрд, затем 8 млрд, 17 млрд. 1392 01:08:01,300 --> 01:08:03,340 И мы идем выше, и выше и выше. 1393 01:08:03,340 --> 01:08:05,740 В конце концов, это тоже ломается. 1394 01:08:05,740 --> 01:08:09,350 >> В конце концов, с тех пор долго, который является 64-битное значение, а не 1395 01:08:09,350 --> 01:08:13,660 32-битное значение, если считать слишком высоко, вы обтекать 0. 1396 01:08:13,660 --> 01:08:16,410 И в этом случае, мы оказались в конечном итоге с отрицательным числом. 1397 01:08:16,410 --> 01:08:17,550 >> Так что это проблема. 1398 01:08:17,550 --> 01:08:20,439 И получается, что это Проблема в том, что не все аркан. 1399 01:08:20,439 --> 01:08:23,060 Даже если я намеренно подвигло его с этими ошибками, 1400 01:08:23,060 --> 01:08:26,149 получается, мы видим, что это вроде все вокруг нас, или, по крайней мере, некоторые из нас. 1401 01:08:26,149 --> 01:08:28,939 >> Так что в Lego Star Wars, если вы когда-либо играли в эту игру, 1402 01:08:28,939 --> 01:08:33,830 получается, вы можете ходить ломать вещи в LEGO мире, 1403 01:08:33,830 --> 01:08:36,640 и собирать монеты, по существу. 1404 01:08:36,640 --> 01:08:39,200 И если вы когда-либо играли эта игра слишком много времени, 1405 01:08:39,200 --> 01:08:42,630 как это безымянного человека здесь же, общее число 1406 01:08:42,630 --> 01:08:46,700 монет, которые вы можете получить это, казалось бы, 4 млрд. 1407 01:08:46,700 --> 01:08:48,240 >> Теперь, когда он на самом деле закруглены. 1408 01:08:48,240 --> 01:08:50,239 Так что LEGO пытался держать вещи дружественным к пользователю. 1409 01:08:50,239 --> 01:08:53,779 Они не делали это точно от 2 до 32 мощности, за последнюю неделю. 1410 01:08:53,779 --> 01:08:55,310 Но 4 млрд причина. 1411 01:08:55,310 --> 01:08:58,979 Кажется, основываясь на этой информации, что LEGO, и компания, которая 1412 01:08:58,979 --> 01:09:02,624 сделал это фактическое программное обеспечение, решил что максимальное количество монет 1413 01:09:02,624 --> 01:09:04,540 пользователь может накапливаться это, по сути, 4 миллиарда, 1414 01:09:04,540 --> 01:09:12,069 потому что они выбрали в своем коде использовать не долго долго, по-видимому, 1415 01:09:12,069 --> 01:09:16,140 но только целое число, без знака целое число, только положительное целое число, чьи 1416 01:09:16,140 --> 01:09:18,089 максимальное значение составляет примерно это. 1417 01:09:18,089 --> 01:09:19,380 Ну, вот еще забавный. 1418 01:09:19,380 --> 01:09:23,500 Так что в игре Цивилизация, которая некоторые из вас могут быть знакомы с 1419 01:09:23,500 --> 01:09:26,660 выясняется, что несколько лет назад там была ошибка в этой игре в результате чего 1420 01:09:26,660 --> 01:09:28,750 если вы играли роль Ганди в игре, 1421 01:09:28,750 --> 01:09:34,020 вместо него был очень пацифистом, вместо того, чтобы было невероятно, невероятно 1422 01:09:34,020 --> 01:09:36,399 агрессивный, в некоторых обстоятельствах. 1423 01:09:36,399 --> 01:09:40,529 В частности, так, что цивилизация работы является то, что если вы, игрок, 1424 01:09:40,529 --> 01:09:44,680 принять демократию, ваш Агрессивность оценка получает 1425 01:09:44,680 --> 01:09:48,130 декрементируется на два, поэтому минус минус, а затем минус минус. 1426 01:09:48,130 --> 01:09:50,569 >> Таким образом, вы вычесть 2 из фактическая итерация. 1427 01:09:50,569 --> 01:09:56,650 К сожалению, если ваш итерация является первоначально 1, и вычесть из него 2 1428 01:09:56,650 --> 01:09:59,050 после принятия демократии Ганди, как здесь может 1429 01:09:59,050 --> 01:10:02,200 сделал, потому что он был очень passive-- 1 по шкале агрессивности. 1430 01:10:02,200 --> 01:10:04,830 Но если он принимает демократию, то он идет от 1 до отрицательного 1. 1431 01:10:04,830 --> 01:10:11,470 >> К сожалению, они были с помощью чисел без знака, 1432 01:10:11,470 --> 01:10:15,400 что означает, что они обрабатывают даже отрицательным числа, как если бы они были положительными. 1433 01:10:15,400 --> 01:10:19,780 И получается, что положительный эквивалент отрицательного 1, 1434 01:10:19,780 --> 01:10:23,480 в типичных компьютерных программ, составляет 255. 1435 01:10:23,480 --> 01:10:27,250 Так что если Ганди принимает , И, следовательно, демократия 1436 01:10:27,250 --> 01:10:32,470 его оценка агрессивности уменьшилась, он на самом деле катается до 255 1437 01:10:32,470 --> 01:10:35,470 и делает его самым агрессивный характер в игре. 1438 01:10:35,470 --> 01:10:36,930 Таким образом, вы Google может на этом. 1439 01:10:36,930 --> 01:10:39,380 И это было, действительно, случайное программирование ошибка, 1440 01:10:39,380 --> 01:10:43,010 но это совсем вошел традиционные практические знания до сих пор. 1441 01:10:43,010 --> 01:10:44,360 >> Это все весело и мило. 1442 01:10:44,360 --> 01:10:47,760 Страшнее, когда фактическая реального мира устройств, а не игры, 1443 01:10:47,760 --> 01:10:48,820 имеют те же самые ошибки. 1444 01:10:48,820 --> 01:10:54,500 На самом деле, всего год назад статья пришла вне о Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> И статья в первой Взгляд читает немного Arcane. 1446 01:10:56,850 --> 01:11:01,480 Но это сказал, программное обеспечение Уязвимость в Боинг 1447 01:11:01,480 --> 01:11:04,790 новый 787 Dreamliner струя имеет потенциал, чтобы вызвать пилотов 1448 01:11:04,790 --> 01:11:07,220 потерять контроль над самолет, возможно, 1449 01:11:07,220 --> 01:11:11,750 в середине полета, чиновники FAA предупрежден авиакомпании в последнее время. 1450 01:11:11,750 --> 01:11:14,520 Это было определение что модель 787 1451 01:11:14,520 --> 01:11:19,770 самолет, который был включен непрерывно в течение 248 дней 1452 01:11:19,770 --> 01:11:24,880 может потерять все переменный ток, переменный ток, электрическая мощность из-за генератора 1453 01:11:24,880 --> 01:11:28,892 блоки управления, ГПА, одновременно входя в отказоустойчивый режим. 1454 01:11:28,892 --> 01:11:29,850 Это вроде меня потерять. 1455 01:11:29,850 --> 01:11:35,390 Но в меморандуме говорится, хорошо, теперь я получил, что, состояние было вызвано программным обеспечением 1456 01:11:35,390 --> 01:11:38,590 противостоять внутренним по отношению к управление генератором 1457 01:11:38,590 --> 01:11:44,860 единицы, которые будут переполняться 248 дней непрерывной мощности. 1458 01:11:44,860 --> 01:11:47,070 Мы выпускаем этот обратите внимание, чтобы предотвратить потерю 1459 01:11:47,070 --> 01:11:49,300 всего переменного электрического мощность, что может привести к 1460 01:11:49,300 --> 01:11:50,980 в потере контроля над самолетом. 1461 01:11:50,980 --> 01:11:55,380 >> Таким образом, в буквальном смысле, есть некоторое целое число, или некоторый эквивалентный тип данных, 1462 01:11:55,380 --> 01:11:57,960 используется в программном обеспечении в реальном самолете 1463 01:11:57,960 --> 01:12:00,756 что если вы держите ваш самолет достаточно долго, по-видимому 1464 01:12:00,756 --> 01:12:03,880 может быть в случае, если вы просто работаете они постоянно и никогда не отсоединив 1465 01:12:03,880 --> 01:12:06,810 ваш самолет, кажется, или позволяя его батареи умирают, 1466 01:12:06,810 --> 01:12:09,840 в конечном итоге подсчитать, и вверх, и выше, и выше, и выше, и выше. 1467 01:12:09,840 --> 01:12:12,150 >> И, по природе, конечное количество памяти 1468 01:12:12,150 --> 01:12:15,880 переполнится, откате ноль или некоторое отрицательное значение, 1469 01:12:15,880 --> 01:12:19,920 побочным эффектом которого является пугающе реальная реальность 1470 01:12:19,920 --> 01:12:23,970 что самолет, возможно, потребуется быть перезагружен, эффективно, 1471 01:12:23,970 --> 01:12:27,290 или может упасть, что еще хуже, так как она летит. 1472 01:12:27,290 --> 01:12:29,230 Таким образом, эти виды вопросов все еще с нами, 1473 01:12:29,230 --> 01:12:33,130 even-- это было 2015 статьи, все более пугающей 1474 01:12:33,130 --> 01:12:36,100 когда вы не обязательно понимают, ценят, или предвидеть 1475 01:12:36,100 --> 01:12:38,640 те виды ошибок. 1476 01:12:38,640 --> 01:12:42,030 >> Так получается, есть еще одна Плохая вещь о представлении данных. 1477 01:12:42,030 --> 01:12:47,080 Оказывается, что даже поплавки рода недостатки, потому что поплавки тоже, 1478 01:12:47,080 --> 01:12:51,440 Я предложил 32 бита, или может быть 64, если вы используете двойной. 1479 01:12:51,440 --> 01:12:53,070 Но это все-таки конечна. 1480 01:12:53,070 --> 01:12:57,070 >> И улов в том, что если вы можете положить бесконечное число цифр 1481 01:12:57,070 --> 01:12:59,460 после десятичной точки, нет никакого способа, вы 1482 01:12:59,460 --> 01:13:02,690 может представлять все возможные числа, которые нас учили 1483 01:13:02,690 --> 01:13:04,990 в начальной школе может существовать в мире. 1484 01:13:04,990 --> 01:13:08,870 Компьютер, по существу, должен выбрать подмножество этих чисел 1485 01:13:08,870 --> 01:13:10,200 для представления точно. 1486 01:13:10,200 --> 01:13:12,450 >> Теперь, компьютер может раунд может быть, немного, 1487 01:13:12,450 --> 01:13:17,900 и может позволить вам примерно магазин любое число, которое вы могли бы возможно хотеть. 1488 01:13:17,900 --> 01:13:20,940 Но только интуитивно, если вы имеют конечное число битов, 1489 01:13:20,940 --> 01:13:24,560 вы можете только переставлять их во многих конечных путей. 1490 01:13:24,560 --> 01:13:26,570 Таким образом, вы не можете, возможно, использовать конечное число 1491 01:13:26,570 --> 01:13:29,880 перестановки битов, шаблоны нулей и единиц, 1492 01:13:29,880 --> 01:13:32,940 представлять бесконечное количество чисел, 1493 01:13:32,940 --> 01:13:37,370 который предполагает, что компьютеры могут быть очень хорошо быть лжет нам иногда. 1494 01:13:37,370 --> 01:13:38,770 >> На самом деле, давайте сделаем это. 1495 01:13:38,770 --> 01:13:41,239 Позвольте мне вернуться в CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Позвольте мне идти вперед и создать небольшую программу 1497 01:13:43,030 --> 01:13:47,940 называется Неточность, чтобы показать, что компьютеры, на самом деле, неточны. 1498 01:13:47,940 --> 01:13:51,910 >> И позвольте мне идти вперед и начать с некоторые из этого кода из ранее, 1499 01:13:51,910 --> 01:13:53,830 и теперь просто сделать следующее. 1500 01:13:53,830 --> 01:14:03,640 Позвольте мне идти вперед и делать PRINTF, процент е, обратная косая п, 1 делится на 10. 1501 01:14:03,640 --> 01:14:07,430 Другими словами, давайте нырять глубже 1/10, как 1 и делится на 10. 1502 01:14:07,430 --> 01:14:09,760 Конечно, компьютер может представлять 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Так что давайте идти вперед и сделать неточностей. 1504 01:14:13,620 --> 01:14:14,390 Посмотрим. 1505 01:14:14,390 --> 01:14:16,210 Формат задает тип дважды. 1506 01:14:16,210 --> 01:14:18,160 Но аргумент имеет тип Int. 1507 01:14:18,160 --> 01:14:19,040 Что происходит? 1508 01:14:19,040 --> 01:14:21,970 >> О, интересно, так это Урок, извлеченный из ранее. 1509 01:14:21,970 --> 01:14:26,050 Я говорю, эй, компьютер шоу я поплавок с процентами ф. 1510 01:14:26,050 --> 01:14:28,200 Но я даю ему 2 Интс. 1511 01:14:28,200 --> 01:14:31,120 Так что получается, что я могу исправить это несколькими способами. 1512 01:14:31,120 --> 01:14:38,430 >> Я мог бы просто превратить один в 1,0 и 10 в 10.0, которая, на самом деле, 1513 01:14:38,430 --> 01:14:42,390 иметь эффект преобразования их в floats-- все еще надеюсь, 1514 01:14:42,390 --> 01:14:43,180 то же число. 1515 01:14:43,180 --> 01:14:45,880 Или оказывается, есть кое-что мы увидим снова в скором времени. 1516 01:14:45,880 --> 01:14:47,170 Вы могли бы бросить число. 1517 01:14:47,170 --> 01:14:49,880 >> Вы можете, используя этот вводными выражение, можно сказать, 1518 01:14:49,880 --> 01:14:52,560 эй, компьютер, возьми 10, который я знаю, является Int. 1519 01:14:52,560 --> 01:14:54,660 Но относиться к ней, пожалуйста, как будто это поплавок. 1520 01:14:54,660 --> 01:14:56,680 Но это чувствует себя излишне сложным. 1521 01:14:56,680 --> 01:14:59,040 >> Для наших целей сегодня, давайте просто буквально 1522 01:14:59,040 --> 01:15:02,700 делают их значения с плавающей точкой с десятичной точкой, как это. 1523 01:15:02,700 --> 01:15:07,060 Позвольте мне идти вперед и перекладка, сделать Неточность, хорошо, точка слэш 1524 01:15:07,060 --> 01:15:08,870 Неточность, введите. 1525 01:15:08,870 --> 01:15:10,990 Хорошо, мы хорошо выглядеть. 1526 01:15:10,990 --> 01:15:18,194 >> 1 делится на 10, в соответствии с моим Mac здесь, в самом деле, 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Теперь, я преподавал в начальной школе должно быть бесконечное число 0 '. 1528 01:15:21,360 --> 01:15:23,151 Итак, давайте по крайней мере попробовать чтобы увидеть некоторые из них. 1529 01:15:23,151 --> 01:15:26,770 Оказывается, что Printf немного искуснее, чем до сих пор мы использовали. 1530 01:15:26,770 --> 01:15:30,890 Оказывается, вы не должны указывать только процентов е, или просто процента я. 1531 01:15:30,890 --> 01:15:33,830 Можно указать на самом деле некоторые опции управления здесь. 1532 01:15:33,830 --> 01:15:36,470 >> В частности, я собираюсь сказать, эй, Printf, 1533 01:15:36,470 --> 01:15:39,660 на самом деле показать мне 10 знаков после запятой. 1534 01:15:39,660 --> 01:15:40,820 Так это выглядит немного странно. 1535 01:15:40,820 --> 01:15:42,845 Но вы говорите, процентов, Дот, сколько чисел 1536 01:15:42,845 --> 01:15:44,970 вы хотите видеть после того, как десятичной точки, а затем е 1537 01:15:44,970 --> 01:15:48,340 для плоских, только потому, что это что говорит документация. 1538 01:15:48,340 --> 01:15:50,080 Позвольте мне идти вперед и спасти. 1539 01:15:50,080 --> 01:15:52,460 >> И заметьте тоже, я получаю устал от перепечатывания вещей. 1540 01:15:52,460 --> 01:15:55,900 Так что я просто установив вверх и стрелка вниз на мои ключи здесь. 1541 01:15:55,900 --> 01:15:58,710 И если я продолжаю бить, вы может видеть все команды 1542 01:15:58,710 --> 01:16:01,090 что я сделал, или неправильно сделал. 1543 01:16:01,090 --> 01:16:04,630 >> И я собираюсь идти вперед сейчас и на самом деле не использовать, что, по-видимому. 1544 01:16:04,630 --> 01:16:11,416 Сделать неточностей, точка слэш imprecision-- так 1545 01:16:11,416 --> 01:16:13,290 чему меня учили в класс школы проверяет. 1546 01:16:13,290 --> 01:16:19,010 Даже если я печатаю его до 10 десятичной ставит его, на самом деле, это 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Но вы знаете, что? 1548 01:16:19,840 --> 01:16:21,150 >> Давайте немного жадный. 1549 01:16:21,150 --> 01:16:23,990 Скажем, как, покажи мне 55 указывает после запятой. 1550 01:16:23,990 --> 01:16:26,160 Давайте действительно принять это программировать для вращения. 1551 01:16:26,160 --> 01:16:31,170 Позвольте мне переделать его с макияж Неточность, точка слэш, неточностей. 1552 01:16:31,170 --> 01:16:32,390 >> И здесь мы идем. 1553 01:16:32,390 --> 01:16:34,420 Ваше детство было ложью. 1554 01:16:34,420 --> 01:16:48,410 По-видимому, 1 делится на 10, действительно, 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Что происходит? 1556 01:16:49,740 --> 01:16:53,360 Что ж, получается, если вы вид выглядят достаточно далеко в основной 1557 01:16:53,360 --> 01:16:55,950 представление этого номер, он на самом деле 1558 01:16:55,950 --> 01:17:00,400 не точно 1/10, или 0,1 и бесконечное число нулей. 1559 01:17:00,400 --> 01:17:01,630 Теперь, почему это? 1560 01:17:01,630 --> 01:17:06,250 >> Что ж, несмотря на то, что это просто число для нас, людей, 1 делится на 10, 1561 01:17:06,250 --> 01:17:10,910 она по-прежнему один из бесконечно много цифры, которые мы могли бы придумать. 1562 01:17:10,910 --> 01:17:14,490 Но компьютер может представлять только конечное число так чисел. 1563 01:17:14,490 --> 01:17:18,710 И так, по сути, то, что Компьютер показывает нам является его ближайшим 1564 01:17:18,710 --> 01:17:22,940 приближение к числу мы хотим верить в 1/10, 1565 01:17:22,940 --> 01:17:27,760 или действительно 0,10000 бесконечности. 1566 01:17:27,760 --> 01:17:30,425 >> Скорее всего, однако, это так близко, как он может получить. 1567 01:17:30,425 --> 01:17:32,300 И действительно, если посмотреть под капотом, 1568 01:17:32,300 --> 01:17:37,050 как мы здесь, глядя 55 цифр после запятой, 1569 01:17:37,050 --> 01:17:39,990 мы действительно видим, что реальность. 1570 01:17:39,990 --> 01:17:42,610 Теперь, как в сторону, если вы имеете когда-либо видел movie-- 1571 01:17:42,610 --> 01:17:45,780 большинство из вас, вероятно, haven't-- но Супермен 3 несколько лет назад, 1572 01:17:45,780 --> 01:17:49,500 Ричард Прайор, по существу заемных средств это на данный момент в его компании, чтобы украсть много 1573 01:17:49,500 --> 01:17:53,500 фракций и фракций гроши, потому что company-- как я помню, 1574 01:17:53,500 --> 01:17:57,210 это было while-- было по существу выбрасывая все, что не укладывалось 1575 01:17:57,210 --> 01:17:58,790 в понятие центов. 1576 01:17:58,790 --> 01:18:01,480 >> Но если сложить все эти крошечные, крошечные, крошечные числа снова, 1577 01:18:01,480 --> 01:18:04,960 и снова, и снова, вы можете, как в его дело, сделать хорошую сумму денег. 1578 01:18:04,960 --> 01:18:08,010 >> Это та же самая идея была сорваны более свежая, но до сих пор в настоящее время старше 1579 01:18:08,010 --> 01:18:10,500 фильм, который называется Office Space, где ребята в этом фильме, 1580 01:18:10,500 --> 01:18:13,501 сделал то же самое, напортачил полностью, в конечном итоге с слишком много 1581 01:18:13,501 --> 01:18:14,666 денег на банковском счете. 1582 01:18:14,666 --> 01:18:15,800 Все это было очень подозрительно. 1583 01:18:15,800 --> 01:18:19,290 Но в конце концов, Неточность все вокруг нас. 1584 01:18:19,290 --> 01:18:22,240 >> И это тоже может быть Пугает дело. 1585 01:18:22,240 --> 01:18:25,590 Оказывается, что Супермен 3 и офисные помещения в сторону, там 1586 01:18:25,590 --> 01:18:28,460 может быть какой-то очень реально мировые последствия 1587 01:18:28,460 --> 01:18:32,290 реалии неточным представление данных 1588 01:18:32,290 --> 01:18:34,770 что даже мы, люди, к В этот день не обязательно 1589 01:18:34,770 --> 01:18:38,230 понять, как мы должны, или вспомнить, как часто, как мы должны. 1590 01:18:38,230 --> 01:18:42,950 И, действительно, следующий клип от взгляда на какой-то очень реальный мир 1591 01:18:42,950 --> 01:18:47,730 Последствия того, что произойдет, если вы не ценят точностей, 1592 01:18:47,730 --> 01:18:50,065 может произойти в представлении чисел. 1593 01:18:50,065 --> 01:18:51,300 >> [ПРОИГРЫВАНИЕ ВИДЕО] 1594 01:18:51,300 --> 01:18:55,620 >> -Компьютеры, Мы все пришли, чтобы принять что часто расстраивает проблемы, 1595 01:18:55,620 --> 01:19:00,310 идти с them-- ошибки, вирусы, и программные глюки, 1596 01:19:00,310 --> 01:19:03,130 за небольшие цены платить для удобства. 1597 01:19:03,130 --> 01:19:07,800 Но в области высоких технологий и высокой скорости военные и космические программные приложения, 1598 01:19:07,800 --> 01:19:12,800 самая маленькая проблема может возвеличится в бедствие. 1599 01:19:12,800 --> 01:19:18,900 >> 4 июня 1996 года, ученые подготовили чтобы запустить беспилотный Ariane 5 ракеты. 1600 01:19:18,900 --> 01:19:21,220 На его борту научно спутники предназначены 1601 01:19:21,220 --> 01:19:24,600 чтобы точно установить, каким образом взаимодействует магнитное поле Земли 1602 01:19:24,600 --> 01:19:27,410 с солнечными ветрами. 1603 01:19:27,410 --> 01:19:30,800 Ракета была построена для Европейское космическое агентство, 1604 01:19:30,800 --> 01:19:34,370 и оторвался от своего объекта на побережье Французской Гвианы. 1605 01:19:34,370 --> 01:19:37,540 >> -На Около 37 секунд в полет, они сначала 1606 01:19:37,540 --> 01:19:39,270 заметил, что что-то происходит не так. 1607 01:19:39,270 --> 01:19:42,250 Форсунки были в поворотное путь они на самом деле не должны. 1608 01:19:42,250 --> 01:19:46,580 Около 40 секунд в полете, ясно, что автомобиль был в беде. 1609 01:19:46,580 --> 01:19:48,850 >> И вот, когда они сделали решение уничтожить его. 1610 01:19:48,850 --> 01:19:52,780 Офицер безопасности по высоте, с огромные кишки, нажал на кнопку, 1611 01:19:52,780 --> 01:19:58,150 взорвали ракету, прежде чем она сможет стать угрозой для общественной безопасности. 1612 01:19:58,150 --> 01:20:01,060 >> -Это Была девичья плавание на Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 И его разрушение взял место из-за ошибки 1614 01:20:03,960 --> 01:20:05,822 встроенные в программное обеспечение ракеты. 1615 01:20:05,822 --> 01:20:08,280 -The Проблема на Ariane была что существует число, 1616 01:20:08,280 --> 01:20:10,600 требуется 64 бит, чтобы выразить. 1617 01:20:10,600 --> 01:20:13,590 И они хотели, чтобы преобразовать это до 16-битного числа. 1618 01:20:13,590 --> 01:20:15,610 Они предположили, что номер никогда не собирался 1619 01:20:15,610 --> 01:20:20,980 должно быть очень большим, что большинство из тех, цифры в 64-битного числа были нули. 1620 01:20:20,980 --> 01:20:22,440 Они были не правы. 1621 01:20:22,440 --> 01:20:25,060 >> -The Неспособность одного программное обеспечение, чтобы принять 1622 01:20:25,060 --> 01:20:29,510 вид номер, который генерируется другой был в корне сбоя. 1623 01:20:29,510 --> 01:20:34,350 Разработка программного обеспечения стала очень затратная часть новой технологии. 1624 01:20:34,350 --> 01:20:38,140 Ariane ракеты были очень успешным, так что большая часть программного обеспечения 1625 01:20:38,140 --> 01:20:41,550 созданный для него было также используемый в Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -The Основная проблема заключалась в том, что Ariane 5 был быстрее, ускоряется быстрее. 1627 01:20:47,940 --> 01:20:51,450 И программное обеспечение не было приходилось за это. 1628 01:20:51,450 --> 01:20:55,060 >> -The Уничтожение ракеты была огромная финансовая катастрофа, 1629 01:20:55,060 --> 01:20:58,790 все из-за ошибки минут программного обеспечения. 1630 01:20:58,790 --> 01:21:01,210 Но это был не первый Проблемы преобразования данных о времени 1631 01:21:01,210 --> 01:21:04,820 мучило современной ракетной технологии. 1632 01:21:04,820 --> 01:21:08,050 >> -В 1991, с началом первой войны в Персидском заливе, 1633 01:21:08,050 --> 01:21:10,570 Патриот Ракетный испытал подобного рода 1634 01:21:10,570 --> 01:21:12,800 задачи преобразования число. 1635 01:21:12,800 --> 01:21:16,090 И в результате, 28 человек, 28 американских солдат, 1636 01:21:16,090 --> 01:21:19,080 были убиты, и около 100 человек получили ранения, 1637 01:21:19,080 --> 01:21:22,780 когда Patriot, который должен был для защиты от входящих бокоплавов, 1638 01:21:22,780 --> 01:21:25,830 не удалось выстрелить ракетой. 1639 01:21:25,830 --> 01:21:31,670 >> -Когда Ирак вторгся в Кувейт, и Америку Буря в пустыне начал в начале 1991 года, 1640 01:21:31,670 --> 01:21:35,780 Патриот ракетные батареи были развернуты чтобы защитить Саудовскую Аравию и Израиль 1641 01:21:35,780 --> 01:21:39,230 от иракских ракетных атак Скад. 1642 01:21:39,230 --> 01:21:43,810 Patriot является американской средней дальности поверхность воздушной системы, производства 1643 01:21:43,810 --> 01:21:45,770 компанией Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -The Размер перехватчика Patriot сама по себе имеет длину около примерно 20 футов. 1645 01:21:52,340 --> 01:21:55,230 И весит около 2000 фунтов. 1646 01:21:55,230 --> 01:21:59,320 И она несет боеголовку около, Я думаю, что это примерно 150 фунтов. 1647 01:21:59,320 --> 01:22:03,930 А сама боеголовка является высокая взрывчатого вещества, который 1648 01:22:03,930 --> 01:22:07,330 есть фрагменты вокруг него. 1649 01:22:07,330 --> 01:22:11,680 Корпус боеголовка разработан, чтобы действовать как картечь. 1650 01:22:11,680 --> 01:22:14,110 >> -The Ракеты перевозятся четыре в контейнере, 1651 01:22:14,110 --> 01:22:17,130 и транспортируются полуприцепом. 1652 01:22:17,130 --> 01:22:24,930 >> -The Patriot системы ПРО восходит по крайней мере, 20 лет. 1653 01:22:24,930 --> 01:22:28,420 Первоначально он был разработан как противоракетная оборона воздушного 1654 01:22:28,420 --> 01:22:30,720 чтобы сбивать вражеские самолеты. 1655 01:22:30,720 --> 01:22:34,500 В первой войне в Персидском заливе, когда эта война пришла вместе, 1656 01:22:34,500 --> 01:22:39,745 Армия хотела использовать его сбивать бокоплавов, а не самолеты. 1657 01:22:39,745 --> 01:22:43,620 >> ВВС Ирака было не так много проблем. 1658 01:22:43,620 --> 01:22:46,670 Но армия волновалась о бокоплавов. 1659 01:22:46,670 --> 01:22:50,170 И таким образом они пытались обновить Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Врага Ракета путешествия в 5М 1661 01:22:52,800 --> 01:22:55,830 собирается быть сложным достаточно. 1662 01:22:55,830 --> 01:22:58,490 Но когда Patriot был доставлен в эксплуатацию, 1663 01:22:58,490 --> 01:23:02,860 Армия не известно о Иракский модификация, которая сделала 1664 01:23:02,860 --> 01:23:05,930 их бокоплавы почти невозможно попасть. 1665 01:23:05,930 --> 01:23:10,740 >> -Что Случилось это бокоплавы, что прибывали в неустойчивы. 1666 01:23:10,740 --> 01:23:11,692 Они были покачиваясь. 1667 01:23:11,692 --> 01:23:14,910 Причиной этого было иракцы, в порядке 1668 01:23:14,910 --> 01:23:18,280 чтобы получить 600 километров из 300 км 1669 01:23:18,280 --> 01:23:21,700 Ракета диапазон, взяли вес из передней боеголовкой. 1670 01:23:21,700 --> 01:23:23,390 Они сделали боеголовка светлее. 1671 01:23:23,390 --> 01:23:27,330 >> Так что теперь Патриот пытаясь прийти в Scud. 1672 01:23:27,330 --> 01:23:30,230 И большую часть времени, Подавляющее большинство времени, 1673 01:23:30,230 --> 01:23:32,940 было бы просто летать на Scud. 1674 01:23:32,940 --> 01:23:37,260 После того, как операторы системы Patriot понял, что Patriot пропустил свою цель, 1675 01:23:37,260 --> 01:23:41,690 они детонировать боеголовку Патриотического чтобы избежать возможных потерь, если она 1676 01:23:41,690 --> 01:23:44,570 было позволено упасть на землю. 1677 01:23:44,570 --> 01:23:48,790 >> -Вот Было то, что большинство людей видели, эти большие огненные шары в небе, 1678 01:23:48,790 --> 01:23:54,550 и не поняли, как перехватывает Скад боеголовок. 1679 01:23:54,550 --> 01:23:56,630 >> -Хотя В ночное время небо, патриоты появились 1680 01:23:56,630 --> 01:24:00,370 чтобы быть успешно уничтожая Скада, в Дахране, 1681 01:24:00,370 --> 01:24:03,360 не может быть никакой ошибки о его исполнении. 1682 01:24:03,360 --> 01:24:07,970 Там, радиолокационная система Патриотического потерял след входящего Scud, 1683 01:24:07,970 --> 01:24:10,721 и никогда не запущен из-за к программному изъян. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Это было израильтян, которые впервые обнаружен что чем дольше система была включена, 1686 01:24:18,940 --> 01:24:22,690 тем больше время расхождения стали, из-за часами внедренного 1687 01:24:22,690 --> 01:24:24,810 в компьютере системы. 1688 01:24:24,810 --> 01:24:28,210 >> -О За две недели до трагедия в Дахране, 1689 01:24:28,210 --> 01:24:30,770 Израильтяне сообщили Министерство обороны 1690 01:24:30,770 --> 01:24:32,590 что система теряет время. 1691 01:24:32,590 --> 01:24:35,360 Примерно через восемь часов или бега, они заметили, что система 1692 01:24:35,360 --> 01:24:37,720 становится заметно менее точным. 1693 01:24:37,720 --> 01:24:41,900 Министерство обороны в ответ говоря все батарейки Patriot 1694 01:24:41,900 --> 01:24:44,950 не оставлять системы в течение долгого времени. 1695 01:24:44,950 --> 01:24:49,160 Они никогда не говорили, что долгое время was-- восемь часов, 10 часов, 1000 часов. 1696 01:24:49,160 --> 01:24:51,360 Никто не знал. 1697 01:24:51,360 --> 01:24:53,380 >> -The Батареи Patriot размещенных в казарме 1698 01:24:53,380 --> 01:24:58,350 в Дахране и его недостатки внутренней Часы были на более чем 100 часов 1699 01:24:58,350 --> 01:25:01,670 в ночь на 25 февраля. 1700 01:25:01,670 --> 01:25:05,917 >> -Он Отслеживаться время с точностью около одной десятой доли секунды. 1701 01:25:05,917 --> 01:25:08,000 Теперь, десятую секунды это интересное число, 1702 01:25:08,000 --> 01:25:11,920 так как оно не может быть выражено в двоичной системе точно, что 1703 01:25:11,920 --> 01:25:16,820 означает, что она не может быть выражено точно в любом современном цифровом компьютере. 1704 01:25:16,820 --> 01:25:18,540 В это трудно поверить. 1705 01:25:18,540 --> 01:25:21,210 >> Но использовать это в качестве примера. 1706 01:25:21,210 --> 01:25:23,540 Давайте возьмем номер на одну треть. 1707 01:25:23,540 --> 01:25:27,350 Одна треть не может быть выражается в десятичной системе счисления в точности. 1708 01:25:27,350 --> 01:25:32,080 Одна треть является 0,333 происходит на бесконечности. 1709 01:25:32,080 --> 01:25:36,480 >> Там нет никакого способа сделать это с абсолютная точность в десятичной системе счисления. 1710 01:25:36,480 --> 01:25:39,560 Это именно та проблема что случилось в Patriot. 1711 01:25:39,560 --> 01:25:44,100 Чем дольше система побежала, хуже стала ошибка времени. 1712 01:25:44,100 --> 01:25:48,890 >> -После 100 часов работы, Ошибка в то время был только около одной трети 1713 01:25:48,890 --> 01:25:50,600 секунды. 1714 01:25:50,600 --> 01:25:54,210 Но с точки зрения ориентируетесь на Ракета путешествия в 5М, 1715 01:25:54,210 --> 01:25:58,710 это привело к отслеживанию Погрешность более 600 метров. 1716 01:25:58,710 --> 01:26:02,120 Было бы фатальной ошибкой для солдат на том, что 1717 01:26:02,120 --> 01:26:08,940 произошло это запуск Scud был детектируется ранних спутников предупреждения 1718 01:26:08,940 --> 01:26:12,860 и они знали, что Scud был приходят в их общем направлении. 1719 01:26:12,860 --> 01:26:15,320 Они не знали, откуда он исходит. 1720 01:26:15,320 --> 01:26:18,250 >> -Это Был теперь до радара компонент системы Patriot 1721 01:26:18,250 --> 01:26:23,190 защищая Дахране, чтобы найти и сохранить след приближающейся ракеты противника. 1722 01:26:23,190 --> 01:26:24,609 >> -The Радар был очень умен. 1723 01:26:24,609 --> 01:26:26,650 Это будет на самом деле трек положение Scud, 1724 01:26:26,650 --> 01:26:30,350 а затем предсказать, где это возможно будет в следующий раз послал радар 1725 01:26:30,350 --> 01:26:31,420 импульса вне. 1726 01:26:31,420 --> 01:26:33,110 Это называется ряд ворот. 1727 01:26:33,110 --> 01:26:37,660 >> -Тогда, Как только Patriot решает достаточно времени 1728 01:26:37,660 --> 01:26:42,450 прошел, чтобы вернуться и проверить следующий место для этого обнаруженного объекта, 1729 01:26:42,450 --> 01:26:43,600 оно восходит. 1730 01:26:43,600 --> 01:26:48,650 Поэтому, когда он вернулся к неправильному место, тогда не видит объект. 1731 01:26:48,650 --> 01:26:52,160 И это не решит, что не было объект, это было ложное обнаружение, 1732 01:26:52,160 --> 01:26:53,930 и капли трек. 1733 01:26:53,930 --> 01:26:57,030 >> -The Входящий Скад исчез с экрана радара. 1734 01:26:57,030 --> 01:27:00,260 И через несколько секунд, это врезался в казармы. 1735 01:27:00,260 --> 01:27:06,150 Скад погибли 28 и был последним один выстрелил во время первой войны в Персидском заливе. 1736 01:27:06,150 --> 01:27:11,960 >> Трагично, обновленное программное обеспечение прибыл в Дахране на следующий день. 1737 01:27:11,960 --> 01:27:14,930 Программное обеспечение ошибка была было зафиксировано, закрытие 1738 01:27:14,930 --> 01:27:19,806 одна глава в мутной История ракеты Patriot. 1739 01:27:19,806 --> 01:27:20,729 >> [ПРОИГРЫВАНИЕ ВИДЕО] 1740 01:27:20,729 --> 01:27:23,520 DAVID J. Малан: Так что это все сказать, что эти вопросы переполнения 1741 01:27:23,520 --> 01:27:25,860 и неточностей все слишком реально. 1742 01:27:25,860 --> 01:27:26,920 Так как же мы сюда попали? 1743 01:27:26,920 --> 01:27:28,895 Мы начали с просто говорим о Printf. 1744 01:27:28,895 --> 01:27:31,270 Опять же, эта функция, печатает что-то на экране, 1745 01:27:31,270 --> 01:27:33,450 и мы ввели в дальнейшем несколько других функций 1746 01:27:33,450 --> 01:27:34,945 из так называемой библиотеки CS50 в. 1747 01:27:34,945 --> 01:27:36,910 И мы будем продолжать увидеть их в свое время. 1748 01:27:36,910 --> 01:27:40,760 И мы, в частности, используется получения строки, и получить Int, а теперь также получить с плавающей точкой, 1749 01:27:40,760 --> 01:27:44,410 и все же другие все еще будет мы сталкиваемся и использовать себя в скором времени. 1750 01:27:44,410 --> 01:27:47,220 >> Но в некоторых случаях, есть мы уже видели необходимость 1751 01:27:47,220 --> 01:27:50,520 чтобы сохранить то, что эти функции руки обратно? 1752 01:27:50,520 --> 01:27:52,920 Они раздают нас назад строку, или INT, или с плавающей точкой. 1753 01:27:52,920 --> 01:27:56,070 И иногда нам нужно положить, что строка, или INT, или с плавающей точкой, где-то. 1754 01:27:56,070 --> 01:28:00,100 >> И хранить эти вещи, вспомнить, как в пустом месте, у нас есть переменные. 1755 01:28:00,100 --> 01:28:03,260 Но в отличие от нуля, в C мы имеем фактические типы 1756 01:28:03,260 --> 01:28:05,530 из данных variables-- типы, больше generally-- 1757 01:28:05,530 --> 01:28:08,640 среди них, строка, INT, A плавать, и эти другие до сих пор. 1758 01:28:08,640 --> 01:28:12,321 >> И поэтому, когда мы объявляем переменные в C, мы должны объявить наши типы данных. 1759 01:28:12,321 --> 01:28:14,820 Это не то, что мы будем должны сделать позже в семестр 1760 01:28:14,820 --> 01:28:16,810 как мы переход на другие языки. 1761 01:28:16,810 --> 01:28:19,610 Но сейчас нам нужно к априорно заранее, 1762 01:28:19,610 --> 01:28:24,370 объяснить компьютеру, какой тип переменной мы хотим, чтобы дать нам. 1763 01:28:24,370 --> 01:28:27,290 >> Теперь, между тем, чтобы напечатать те виды типов данных, 1764 01:28:27,290 --> 01:28:29,570 мы должны сказать PRINTF, чего ожидать. 1765 01:28:29,570 --> 01:28:32,450 И мы увидели процент с для строк, и процент я для целых чисел, 1766 01:28:32,450 --> 01:28:33,790 и некоторые другие уже. 1767 01:28:33,790 --> 01:28:37,237 И это просто требования для визуального представления 1768 01:28:37,237 --> 01:28:38,070 этой информации. 1769 01:28:38,070 --> 01:28:42,080 >> И каждый из них может быть на самом деле параметризовано или переделаны, в некотором роде, 1770 01:28:42,080 --> 01:28:45,370 если вы хотите, чтобы в дальнейшем контроль тип вывода, который вы получите. 1771 01:28:45,370 --> 01:28:49,604 И, на самом деле, оказывается, что не только есть обратная косая п для новой линии. 1772 01:28:49,604 --> 01:28:52,520 Там кое-что еще называется обратной косой черты г для возврата каретки, которая 1773 01:28:52,520 --> 01:28:54,360 это больше похоже на старая школа пишущая машинка, 1774 01:28:54,360 --> 01:28:57,690 а также для Windows используется на протяжении многих лет. 1775 01:28:57,690 --> 01:28:59,690 >> Там в обратной косой черты т для вкладок. 1776 01:28:59,690 --> 01:29:03,170 Оказывается, что если вы хотите двойные кавычки внутри строки, 1777 01:29:03,170 --> 01:29:05,000 напомним, что мы использовали двойные кавычки дважды 1778 01:29:05,000 --> 01:29:07,900 цитата слева и справа концы наших строк до сих пор. 1779 01:29:07,900 --> 01:29:09,420 Это, казалось бы, все запутать. 1780 01:29:09,420 --> 01:29:12,503 >> Если вы хотите поставить двойные кавычки в середина string-- и, действительно, 1781 01:29:12,503 --> 01:29:13,670 это сбивает с толку, чтобы увидеть. 1782 01:29:13,670 --> 01:29:17,120 И поэтому вы должны бежать, так говорят, двойные кавычки с чем-то 1783 01:29:17,120 --> 01:29:18,860 как, в буквальном смысле, обратной косой черты двойные кавычки. 1784 01:29:18,860 --> 01:29:20,230 И есть несколько других до сих пор. 1785 01:29:20,230 --> 01:29:24,540 И мы увидим больше тех, в реальных условиях эксплуатации до тех пор. 1786 01:29:24,540 --> 01:29:27,930 >> Так давайте теперь переход от данных, а также представление, 1787 01:29:27,930 --> 01:29:30,820 и арифметические операторы, все из которых дал нам некоторые здания 1788 01:29:30,820 --> 01:29:32,070 блоки, с которыми играть. 1789 01:29:32,070 --> 01:29:34,481 Но теперь давайте на самом деле дать нам остальная часть словаря 1790 01:29:34,481 --> 01:29:36,230 что у нас уже было На прошлой неделе с нуля 1791 01:29:36,230 --> 01:29:39,350 принимая взглянуть на некоторые другие Конструкции в C-- не все из них. 1792 01:29:39,350 --> 01:29:41,680 Но идеи мы о том, чтобы увидеть на самом деле просто 1793 01:29:41,680 --> 01:29:45,610 чтобы подчеркнуть перевод с один язык, к царапинам, к другому, C. 1794 01:29:45,610 --> 01:29:48,470 >> И со временем, мы подберем больше инструментов для нашего инструментария, 1795 01:29:48,470 --> 01:29:49,820 так сказать, синтаксически. 1796 01:29:49,820 --> 01:29:54,190 И, на самом деле, вы увидите, что идеи В настоящее время довольно знакомы с прошлой недели. 1797 01:29:54,190 --> 01:29:55,200 Так давайте сделаем это. 1798 01:29:55,200 --> 01:29:58,870 >> Давайте идти вперед и нагнетать программу что на самом деле использует некоторые выражения, 1799 01:29:58,870 --> 01:30:00,720 логическое выражение. 1800 01:30:00,720 --> 01:30:02,810 Позвольте мне идти вперед здесь и создать новый файл. 1801 01:30:02,810 --> 01:30:06,090 Я буду называть это condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Позвольте мне идти вперед и включают в себя библиотеку CS50. 1803 01:30:09,350 --> 01:30:12,640 И позвольте мне идти вперед и включают в себя стандарт io.h для наших функций, 1804 01:30:12,640 --> 01:30:14,690 и Printf, и соответственно больше. 1805 01:30:14,690 --> 01:30:18,900 Позвольте мне дать себе, что шаблонного из INT главная пустота, чье объяснение, которое мы будем 1806 01:30:18,900 --> 01:30:20,360 вернуться в будущем. 1807 01:30:20,360 --> 01:30:23,820 >> Теперь позвольте мне идти вперед и дать сам через INT получите Int. 1808 01:30:23,820 --> 01:30:25,970 Тогда позвольте мне идти вперед и делать это. 1809 01:30:25,970 --> 01:30:30,150 Я хочу сказать, если я это less-- давайте различия между положительным, отрицательным, 1810 01:30:30,150 --> 01:30:31,260 или нулевые значения. 1811 01:30:31,260 --> 01:30:36,630 >> Так что, если я меньше нуля, дайте мне просто эта программа просто сказать, 1812 01:30:36,630 --> 01:30:42,370 отрицательный, обратная косая черта п, иначе если я больше нуля. 1813 01:30:42,370 --> 01:30:47,030 Сейчас я, конечно, хочу сказать, PRINTF положительный результат, обратной косой н. 1814 01:30:47,030 --> 01:30:50,690 А потом еще if-- я мог бы сделать это. 1815 01:30:50,690 --> 01:30:53,410 >> Я мог бы сделать, если я равен 0. 1816 01:30:53,410 --> 01:30:55,840 Но я бы делать на хотя бы одна ошибка уже. 1817 01:30:55,840 --> 01:30:59,480 Напомним, что знак равенства не равно, как и мы, люди, знаем это. 1818 01:30:59,480 --> 01:31:01,010 >> Но это оператор присваивания. 1819 01:31:01,010 --> 01:31:05,640 И мы не хотим принимать 0 на право и положить его в I на левой стороне. 1820 01:31:05,640 --> 01:31:11,810 Таким образом, чтобы избежать путаницы, или возможно злоупотребление знака равенства, 1821 01:31:11,810 --> 01:31:14,740 люди решили несколько лет назад что во многих языках программирования 1822 01:31:14,740 --> 01:31:18,000 если вы хотите, чтобы проверить на равенство между левыми и правыми, 1823 01:31:18,000 --> 01:31:19,635 вы на самом деле использовать равняется равных. 1824 01:31:19,635 --> 01:31:21,010 Таким образом, вы попали в знак равенства дважды. 1825 01:31:21,010 --> 01:31:25,600 Если вы хотите назначить справа налево, использовать один знак равенства. 1826 01:31:25,600 --> 01:31:29,360 Таким образом, мы могли бы сделать еще this-- если я равен равен нулю. 1827 01:31:29,360 --> 01:31:31,710 >> Тогда я мог бы пойти и открыть мои фигурные скобки, 1828 01:31:31,710 --> 01:31:36,087 и сказать, Printf 0, обратная косая черта п, сделано. 1829 01:31:36,087 --> 01:31:38,170 Но помните, как эти развилок может работать. 1830 01:31:38,170 --> 01:31:39,836 И, на самом деле, просто подумайте о логике. 1831 01:31:39,836 --> 01:31:41,510 я это число. 1832 01:31:41,510 --> 01:31:43,320 Это целое число, в частности. 1833 01:31:43,320 --> 01:31:48,600 И это означает, что она будет меньше, чем 0 или больше 0, или 0. 1834 01:31:48,600 --> 01:31:51,600 Таким образом, есть вид этого подразумеваемой случай по умолчанию. 1835 01:31:51,600 --> 01:31:54,920 >> И таким образом мы могли, так же, как Царапины, обойтись без другого, если, 1836 01:31:54,920 --> 01:31:55,747 и просто сказать еще. 1837 01:31:55,747 --> 01:31:57,830 По логике вещей, если ты программист знаю, что есть только 1838 01:31:57,830 --> 01:32:01,635 три ведра, в которые Сценарий может fall-- первый, 1839 01:32:01,635 --> 01:32:03,510 второй, или третий в этом case-- не 1840 01:32:03,510 --> 01:32:07,100 заморачиваться добавляя дополнительную точность и дополнительная логика там. 1841 01:32:07,100 --> 01:32:09,690 Просто идти вперед с Дело по умолчанию здесь еще. 1842 01:32:09,690 --> 01:32:11,950 >> Теперь, давайте идти вперед после сохранения этого сделать 1843 01:32:11,950 --> 01:32:15,760 условия точка слэш conditions-- не большой пользовательский интерфейс, 1844 01:32:15,760 --> 01:32:18,914 потому что я не побудило пользователь, как я упоминал ранее. 1845 01:32:18,914 --> 01:32:19,580 Но это нормально. 1846 01:32:19,580 --> 01:32:20,454 Мы будем держать его просто. 1847 01:32:20,454 --> 01:32:21,890 Давайте попробуем число 42. 1848 01:32:21,890 --> 01:32:23,240 И это положительно. 1849 01:32:23,240 --> 01:32:26,120 Давайте попробуем номер 42 отрицательное, отрицательный. 1850 01:32:26,120 --> 01:32:28,244 >> Давайте попробуем значение 0. 1851 01:32:28,244 --> 01:32:29,160 И действительно, она работает. 1852 01:32:29,160 --> 01:32:33,900 Теперь вы будете видеть проблемы перед длинные, тестирование вещи в три раза, 1853 01:32:33,900 --> 01:32:34,980 вероятно, не является достаточным. 1854 01:32:34,980 --> 01:32:37,438 Вы, вероятно, хотите, чтобы проверить некоторые большие числа, некоторые меньше, 1855 01:32:37,438 --> 01:32:40,520 номера, некоторые частные случаи, как мы приедем, чтобы описать их. 1856 01:32:40,520 --> 01:32:42,500 >> Но на сегодняшний день это довольно простая программа. 1857 01:32:42,500 --> 01:32:45,160 И я уверен, что, по логике вещей, что он попадает в трех случаях. 1858 01:32:45,160 --> 01:32:49,360 И действительно, даже если мы просто сосредоточены на потенциальные недостатки 1859 01:32:49,360 --> 01:32:53,480 неточностей и переполнения, в реальность, где многие из проблем CS50, в 1860 01:32:53,480 --> 01:32:56,000 мы не будем беспокоиться о том, все время, 1861 01:32:56,000 --> 01:32:59,050 эти вопросы переполнения и Неточность, так как, по сути, в C, 1862 01:32:59,050 --> 01:33:01,889 это на самом деле не все, что легко избежать этих вещей. 1863 01:33:01,889 --> 01:33:04,180 Если вы хотите, чтобы подсчитать больше, и больше, и больше, 1864 01:33:04,180 --> 01:33:07,510 оказывается, есть методы, которые Вы можно использовать, часто с участием вещи, называемые 1865 01:33:07,510 --> 01:33:11,240 библиотеки, коллекции кода, что другие люди писали, что вы можете использовать, 1866 01:33:11,240 --> 01:33:13,910 и другие языки, такие как Java и другие, на самом деле 1867 01:33:13,910 --> 01:33:15,800 сделать это намного проще рассчитывать еще выше. 1868 01:33:15,800 --> 01:33:19,810 Так что на самом деле некоторые из этих опасностей функцией используемого вами языка. 1869 01:33:19,810 --> 01:33:22,710 И в ближайшие недели, мы будем увидеть, как опасный C действительно 1870 01:33:22,710 --> 01:33:24,950 может быть, если вы не используете его правильно. 1871 01:33:24,950 --> 01:33:27,610 Но оттуда, и с Python и JavaScript, будет 1872 01:33:27,610 --> 01:33:32,620 мы слой на некоторые дополнительные средства защиты, и запустить меньше этих рисков. 1873 01:33:32,620 --> 01:33:35,820 >> Так давайте сделаем немного больше интересная логика в нашей программе. 1874 01:33:35,820 --> 01:33:39,110 Итак, позвольте мне идти вперед и создать программа под названием Logical 1875 01:33:39,110 --> 01:33:43,804 только так я могу играть с некоторыми Фактическая логика, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Я просто скопировать и вставить некоторые кода из ранее, так что я вернусь 1877 01:33:46,870 --> 01:33:49,950 к этой хорошей отправной точкой. 1878 01:33:49,950 --> 01:33:53,980 >> Позвольте мне на этот раз сделать сЬаг C. Я собирается дать ему имя C 1879 01:33:53,980 --> 01:33:58,510 только потому, что обычные, получить символ от пользователя. 1880 01:33:58,510 --> 01:34:00,730 А давайте представим, как Я часть реализации 1881 01:34:00,730 --> 01:34:04,130 из этой программы Rm, то удалить Программа до этого запроса пользователю 1882 01:34:04,130 --> 01:34:05,400 для удаления файла. 1883 01:34:05,400 --> 01:34:06,750 Как мы можем это сделать? 1884 01:34:06,750 --> 01:34:11,090 >> Я хочу сказать, если С равен равно, цитата Unquote, 1885 01:34:11,090 --> 01:34:16,304 у, то я буду считать, что пользователь выбрал да. 1886 01:34:16,304 --> 01:34:17,470 Я просто хочу, чтобы напечатать да. 1887 01:34:17,470 --> 01:34:19,440 Если бы это было на самом деле писать программа удаления, 1888 01:34:19,440 --> 01:34:21,420 мы могли бы удалить файл с большим количеством строк кода. 1889 01:34:21,420 --> 01:34:22,461 Но мы будем держать его просто. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Иначе, если с равно равен N-, и теперь здесь, я собираюсь сказать, 1892 01:34:31,250 --> 01:34:32,980 пользователь должен иметь в виду нет. 1893 01:34:32,980 --> 01:34:34,360 А потом еще, вы знаете, что? 1894 01:34:34,360 --> 01:34:36,200 Я не знаю, что еще пользователь собирается ввести. 1895 01:34:36,200 --> 01:34:38,533 Так что я просто хочу сказать, что то есть ошибка, то, 1896 01:34:38,533 --> 01:34:40,070 он или она на самом деле набрали. 1897 01:34:40,070 --> 01:34:41,180 >> Так что же здесь происходит? 1898 01:34:41,180 --> 01:34:44,530 Существует принципиальная разница против того, что я сделал в прошлом. 1899 01:34:44,530 --> 01:34:49,300 Двойные кавычки, двойные кавычки, двойные котировки, и, тем не менее, одиночные кавычки, 1900 01:34:49,300 --> 01:34:50,170 одиночные кавычки. 1901 01:34:50,170 --> 01:34:52,860 Оказывается, в C, что, когда Вы хотите написать строку, 1902 01:34:52,860 --> 01:34:56,680 Вы делаете двойные кавычки, так же, как мы использую все это время с Printf. 1903 01:34:56,680 --> 01:35:02,030 >> Но если вы хотите иметь дело с просто одиночный символ, так называемый символ, 1904 01:35:02,030 --> 01:35:03,780 то вы на самом деле использовать одиночные кавычки. 1905 01:35:03,780 --> 01:35:05,450 Те из вас, кто запрограммирован перед тем, вы не могли бы 1906 01:35:05,450 --> 01:35:07,850 приходилось беспокоиться об этом Различие в некоторых языках. 1907 01:35:07,850 --> 01:35:09,450 В C, это действительно имеет значение. 1908 01:35:09,450 --> 01:35:12,560 И поэтому, когда я получаю полукокса и я хочу для сравнения, что символ с использованием равных 1909 01:35:12,560 --> 01:35:18,350 равна некоторой буквы как у или п, я, на самом деле, нужно иметь одиночные кавычки. 1910 01:35:18,350 --> 01:35:19,770 >> Теперь, давайте идти вперед и делать это. 1911 01:35:19,770 --> 01:35:26,180 Давайте идти вперед и делают логические точка слэш логично. 1912 01:35:26,180 --> 01:35:27,305 И теперь я быть пробужденным. 1913 01:35:27,305 --> 01:35:30,638 Так что, по-видимому, лучший пользовательский опыт будет на самом деле сказать, что мне делать здесь. 1914 01:35:30,638 --> 01:35:33,030 Но я собираюсь просто слепо скажем у для да, хорошо, хорошо. 1915 01:35:33,030 --> 01:35:35,780 >> Давайте запустим его снова, п для нет, хорошо. 1916 01:35:35,780 --> 01:35:39,610 Предположим, например, некоторые люди, которых я знаю, мои крышки блокировки ключ на слишком часто. 1917 01:35:39,610 --> 01:35:43,740 Так что я капитал Y, введите, ошибку. 1918 01:35:43,740 --> 01:35:46,130 Хорошо, это не совсем то, что я ожидал. 1919 01:35:46,130 --> 01:35:48,170 В самом деле, компьютер делает то, что в буквальном смысле 1920 01:35:48,170 --> 01:35:51,794 Я рассказал это do-- проверить в нижнем регистре у и строчные буквы п. 1921 01:35:51,794 --> 01:35:53,960 Это не чувствует себя хорошо пользовательский интерфейс, хотя. 1922 01:35:53,960 --> 01:35:59,010 Позвольте мне просить и принять либо в нижнем регистре или в верхнем регистре. 1923 01:35:59,010 --> 01:36:02,090 Так что получается, вы можете захотеть сказать что-то, как в пустом месте, 1924 01:36:02,090 --> 01:36:08,150 как буквально или C равна равняется капитала одного цитируемый у. 1925 01:36:08,150 --> 01:36:11,400 Оказывается, C не имеет это ключевое слово или буквальным. 1926 01:36:11,400 --> 01:36:12,880 >> Но у него есть две вертикальные полосы. 1927 01:36:12,880 --> 01:36:15,463 Вам необходимо удерживать клавишу Shift, как правило, если вы используете США клавиатуры, 1928 01:36:15,463 --> 01:36:18,910 и ударил вертикальную полосу клавишу, расположенную выше вашего возвращения ключа. 1929 01:36:18,910 --> 01:36:22,410 Но это вертикальная полоса Вертикальная черта означает или. 1930 01:36:22,410 --> 01:36:26,220 >> Если же, напротив, мы хотим сказать, и, как в пустом месте, 1931 01:36:26,220 --> 01:36:28,180 мы могли бы сделать амперсанд амперсанд. 1932 01:36:28,180 --> 01:36:31,330 Это не имеет никакого логического смысла здесь, потому что человек не мог 1933 01:36:31,330 --> 01:36:37,110 набрали как у и в нижнем регистре у и капитал Y, как тот же характер. 1934 01:36:37,110 --> 01:36:39,470 Так или то, что мы намерены здесь. 1935 01:36:39,470 --> 01:36:46,280 >> Так что, если я делаю это в обоих местах, или C равняется капитала равна N, теперь снова запустить, 1936 01:36:46,280 --> 01:36:49,390 делать логические, перезапускать логично. 1937 01:36:49,390 --> 01:36:51,200 Теперь я могу ввести у. 1938 01:36:51,200 --> 01:36:53,920 И я могу сделать это снова капитал Y, или капитал N. 1939 01:36:53,920 --> 01:36:56,630 И я мог бы добавить в дополнительный Комбинации до сих пор. 1940 01:36:56,630 --> 01:36:58,810 >> Так что это логично Программа, поскольку в настоящее время 1941 01:36:58,810 --> 01:37:01,940 Я проверяю логически для это значение или это значение. 1942 01:37:01,940 --> 01:37:06,420 И я не должен, обязательно, придумать еще два МФС или же МФС. 1943 01:37:06,420 --> 01:37:09,960 Я могу на самом деле объединить некоторые из связанных с логикой вместе таким образом. 1944 01:37:09,960 --> 01:37:11,950 Так что это было бы лучше разработаны, чем просто 1945 01:37:11,950 --> 01:37:17,490 говоря, если С равен строчную у, печать да, иначе, если с равно капитала Y, 1946 01:37:17,490 --> 01:37:20,074 печать да, иначе, если с равно lower-- другими словами, 1947 01:37:20,074 --> 01:37:21,990 вы не должны иметь все больше и больше филиалов. 1948 01:37:21,990 --> 01:37:28,840 Вы можете объединить некоторые из эквивалента ветви логично, так как в этом пути. 1949 01:37:28,840 --> 01:37:34,150 >> Итак, давайте рассмотрим только один Окончательный ингредиент, один конечная конструкция, 1950 01:37:34,150 --> 01:37:34,847 что C позволяет. 1951 01:37:34,847 --> 01:37:36,930 И мы вернемся в будущее другим еще. 1952 01:37:36,930 --> 01:37:41,400 И тогда мы заключаем, посмотрев при не правильности code-- 1953 01:37:41,400 --> 01:37:46,070 получение кода work-- но дизайн кода, и посадить эти семена на ранних стадиях. 1954 01:37:46,070 --> 01:37:51,337 >> Итак, позвольте мне идти вперед и открыть новый файл здесь. 1955 01:37:51,337 --> 01:37:51,920 Знаешь что? 1956 01:37:51,920 --> 01:37:54,450 Я собираюсь повторно реализовать та же программа, 1957 01:37:54,450 --> 01:37:55,940 но используя другую конструкцию. 1958 01:37:55,940 --> 01:38:00,110 >> Итак, позвольте мне быстро отдамся доступ к включают CS50.h 1959 01:38:00,110 --> 01:38:04,150 для библиотеки CS50, стандарт io.h для Printf. 1960 01:38:04,150 --> 01:38:06,510 Дайте мне мою INT главную пустоту. 1961 01:38:06,510 --> 01:38:09,310 А потом здесь, пусть мне идти вперед и делать это. 1962 01:38:09,310 --> 01:38:12,010 >> Чар с получает получить символ, так же, как и раньше. 1963 01:38:12,010 --> 01:38:16,770 И я собираюсь использовать новую конструкцию now-- переключатель, на какой характер? 1964 01:38:16,770 --> 01:38:19,820 Так переключатель вроде как Переключение железнодорожных путей. 1965 01:38:19,820 --> 01:38:22,070 Или, на самом деле, это своего рода Условный еще, если еще, если, 1966 01:38:22,070 --> 01:38:23,980 но написано несколько иначе. 1967 01:38:23,980 --> 01:38:25,490 >> Переключатель выглядит следующим образом. 1968 01:38:25,490 --> 01:38:29,060 У вас есть переключатель, и что потом символ или номер, который вы хотите посмотреть, 1969 01:38:29,060 --> 01:38:32,000 то некоторые фигурные скобки как в Царапины, просто скажем, сделать этот материал. 1970 01:38:32,000 --> 01:38:33,480 И тогда у вас есть разные случаи. 1971 01:38:33,480 --> 01:38:34,830 >> Вам не следует использовать, если и еще. 1972 01:38:34,830 --> 01:38:37,050 Вы в буквальном смысле использовать слово случай. 1973 01:38:37,050 --> 01:38:38,790 И вы могли бы сказать что-то вроде этого. 1974 01:38:38,790 --> 01:38:43,820 >> Так что в случае строчной у, или в случае заглавной буквы Y, 1975 01:38:43,820 --> 01:38:47,350 идти вперед и распечатать да. 1976 01:38:47,350 --> 01:38:49,020 А потом вспыхнуть переключателя. 1977 01:38:49,020 --> 01:38:49,580 Вот и все. 1978 01:38:49,580 --> 01:38:50,880 Были сделаны. 1979 01:38:50,880 --> 01:38:57,270 >> Иначе, если, так сказать, нижний регистр п, или капитал, N, 1980 01:38:57,270 --> 01:39:02,560 затем идти вперед и печать вне нет, а затем перерыв. 1981 01:39:02,560 --> 01:39:08,022 Else-- и этот вид является кейс по умолчанию indeed-- Printf error-- 1982 01:39:08,022 --> 01:39:10,980 и просто для хорошей мерой, хотя логически этот перерыв не нужен 1983 01:39:10,980 --> 01:39:12,896 потому что мы находимся в конце переключателя в любом случае, 1984 01:39:12,896 --> 01:39:14,520 Я сейчас вспыхивают переключателя. 1985 01:39:14,520 --> 01:39:16,280 Так это выглядит немного по-другому. 1986 01:39:16,280 --> 01:39:18,272 >> Но, по логике вещей, это на самом деле эквивалентны. 1987 01:39:18,272 --> 01:39:19,980 И почему бы вы использовать один над другим? 1988 01:39:19,980 --> 01:39:23,220 Иногда, только личные предпочтения, иногда эстетика, 1989 01:39:23,220 --> 01:39:25,420 если я смотрю на это Теперь, есть кое-что 1990 01:39:25,420 --> 01:39:27,510 Надо сказать для читаемость этого кода. 1991 01:39:27,510 --> 01:39:30,690 Я имею в виду, не говоря уже о том, что это код является новым для многих из нас в комнате. 1992 01:39:30,690 --> 01:39:33,515 >> Но это только отчасти довольно. 1993 01:39:33,515 --> 01:39:37,760 Вы видите в нижнем регистре у, капитала Y, нижний регистр N, N капитал по умолчанию, 1994 01:39:37,760 --> 01:39:40,150 это только отчасти прыжки на вас в пути 1995 01:39:40,150 --> 01:39:42,200 что, возможно, может быть, предыдущий пример 1996 01:39:42,200 --> 01:39:45,780 с МСФ и вертикальных стержней, а остальное МФС, не могли бы иметь. 1997 01:39:45,780 --> 01:39:51,600 Так что это действительно вопрос личного выбор, на самом деле, или читаемость, 1998 01:39:51,600 --> 01:39:52,360 кода. 1999 01:39:52,360 --> 01:39:58,230 >> Но с точки зрения функциональности, позвольте мне идти вперед и сделать выключатель, точка слэш 2000 01:39:58,230 --> 01:40:05,830 переключатель, и теперь ввести в нижнем регистре у, капитал Y, строчные буквы п, капитал N, 2001 01:40:05,830 --> 01:40:09,250 Дэвид, повторить попытку, потому что это ни одного символа. 2002 01:40:09,250 --> 01:40:12,050 Давайте сделаем х, ошибка, как и ожидалось. 2003 01:40:12,050 --> 01:40:15,640 И, logically-- и это то, Я хотел бы призвать в general-- даже 2004 01:40:15,640 --> 01:40:17,790 хотя мы только поцарапать Поверхность некоторых из этих особенностей. 2005 01:40:17,790 --> 01:40:20,560 >> И это может быть не очевидно, когда вы самостоятельно сесть за клавиатуру, 2006 01:40:20,560 --> 01:40:21,370 как это работает? 2007 01:40:21,370 --> 01:40:22,240 Что бы это сделать? 2008 01:40:22,240 --> 01:40:25,630 Красивая вещь о том, ноутбук или настольный компьютер, или доступ 2009 01:40:25,630 --> 01:40:29,290 к компьютеру с помощью компилятора, и с редактором кода, как это, 2010 01:40:29,290 --> 01:40:32,990 это почти всегда можно ответить на эти вопросы для себя просто попробовать. 2011 01:40:32,990 --> 01:40:36,570 >> Например, если риторическая Вопрос под рукой были, 2012 01:40:36,570 --> 01:40:39,540 что произойдет, если вы забыли ваши заявления перерыв? 2013 01:40:39,540 --> 01:40:41,400 Что на самом деле очень распространенная вещь, чтобы сделать, 2014 01:40:41,400 --> 01:40:43,540 потому что он не выглядит как вам действительно нужны. 2015 01:40:43,540 --> 01:40:46,790 Они не действительно завершить думали, как круглые скобки или фигурные 2016 01:40:46,790 --> 01:40:47,714 скобка делает. 2017 01:40:47,714 --> 01:40:49,630 Давайте идти вперед и перекомпилировать код и посмотреть. 2018 01:40:49,630 --> 01:40:53,690 Так сделайте выключатель, точка переключения слэш. 2019 01:40:53,690 --> 01:40:56,435 Давайте типа в нижнем регистре у, верхний случай, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Таким образом, я напечатал у. 2022 01:41:00,700 --> 01:41:04,420 >> Программа говорит, да, нет, ошибка, как если бы это было изменение его ум. 2023 01:41:04,420 --> 01:41:09,280 Но это отчасти было, потому что происходит с переключателем первый случай, 2024 01:41:09,280 --> 01:41:13,899 Матч по существу означает, эй компьютер, выполнить весь код под ним. 2025 01:41:13,899 --> 01:41:16,690 И если вы не говорите, перерыв, или не говорите, перерыв, или не говорят перерыв, 2026 01:41:16,690 --> 01:41:19,540 компьютер будет дуть через все эти линии 2027 01:41:19,540 --> 01:41:22,779 и не выполнять их все до он получает к этому фигурной скобкой. 2028 01:41:22,779 --> 01:41:24,320 Поэтому тормоза, действительно, необходимо. 2029 01:41:24,320 --> 01:41:27,120 Но здесь еда на дом, когда есть сомнения, попробуйте что-нибудь. 2030 01:41:27,120 --> 01:41:29,510 Может быть, сохранить свой код во-первых, или сохранить его в дополнительный файл 2031 01:41:29,510 --> 01:41:32,930 если вы действительно обеспокоены Мессинг и того, чтобы восстановить 2032 01:41:32,930 --> 01:41:34,430 работа, которую вы знаете, работает. 2033 01:41:34,430 --> 01:41:35,410 >> Но попробовать вещи. 2034 01:41:35,410 --> 01:41:38,074 И не так страшно, может быть, о том, что компьютер может сделать, 2035 01:41:38,074 --> 01:41:39,490 или что вы могли бы что-нибудь сломать. 2036 01:41:39,490 --> 01:41:42,790 Вы всегда можете вернуться назад в какой-то более ранней версии. 2037 01:41:42,790 --> 01:41:45,640 >> Так что давайте закончим, глядя при проектировании кода. 2038 01:41:45,640 --> 01:41:49,020 У нас есть эта способность теперь писать условия и циклы записи, 2039 01:41:49,020 --> 01:41:50,850 и переменные и функции обработки вызовов. 2040 01:41:50,850 --> 01:41:54,590 Так что, честно говоря, мы вроде обратно в где мы были неделю назад с нуля, 2041 01:41:54,590 --> 01:42:00,120 хотя и с менее убедительным текстуально Среда, чем нуля позволяет. 2042 01:42:00,120 --> 01:42:03,990 >> Но обратите внимание, как быстро мы приобрели что словарный запас, даже если это 2043 01:42:03,990 --> 01:42:07,570 собирается занять некоторое время, чтобы утонуть в, так что теперь мы можем использовать этот словарь 2044 01:42:07,570 --> 01:42:10,320 писать более интересные программы. 2045 01:42:10,320 --> 01:42:12,940 И давайте шаг ребенка к что, как следует. 2046 01:42:12,940 --> 01:42:14,890 Позвольте мне идти вперед и создать новый файл здесь. 2047 01:42:14,890 --> 01:42:17,750 >> Я буду называть это prototype.c, и ввести 2048 01:42:17,750 --> 01:42:20,954 в первый раз, способность чтобы сделать свои собственные функции. 2049 01:42:20,954 --> 01:42:22,870 Некоторые из вас, возможно, сделал это с нуля, 2050 01:42:22,870 --> 01:42:25,430 в котором вы можете создать свой собственные блоки нуля, 2051 01:42:25,430 --> 01:42:27,892 а затем перетащить их на место везде, где вы хотели бы в C. 2052 01:42:27,892 --> 01:42:30,100 И в большинстве программ языки, вы можете сделать именно 2053 01:42:30,100 --> 01:42:33,580 that-- сделать свои собственные функции, если они уже не существуют. 2054 01:42:33,580 --> 01:42:38,660 >> Так, например, позвольте мне идти вперед и включают CS50.h, и включают в себя 2055 01:42:38,660 --> 01:42:43,110 стандарт io.h, INT главный недействительным. 2056 01:42:43,110 --> 01:42:46,020 И теперь у нас есть заполнителя готов к работе. 2057 01:42:46,020 --> 01:42:48,550 Я держу печати вещи как имена людей сегодня. 2058 01:42:48,550 --> 01:42:51,910 И это чувствует себя like-- не было бы неплохо, если бы 2059 01:42:51,910 --> 01:42:53,936 были функция называется имя печати? 2060 01:42:53,936 --> 01:42:55,060 Я не должен использовать Printf. 2061 01:42:55,060 --> 01:42:56,976 Я не должен помнить все коды формата. 2062 01:42:56,976 --> 01:43:00,050 Почему не я, и почему не сделал кто-то передо мной, 2063 01:43:00,050 --> 01:43:02,980 создать функцию под названием печати имя, что дано какое-то название, 2064 01:43:02,980 --> 01:43:03,980 просто печатает его? 2065 01:43:03,980 --> 01:43:08,700 >> Другими словами, если я говорю, эй, компьютер, дайте мне строку 2066 01:43:08,700 --> 01:43:11,870 спрашивая у пользователя, например, с помощью функции получения строки CS50 в. 2067 01:43:11,870 --> 01:43:15,090 Эй, компьютер, поместить эту строку в переменная в левой части, 2068 01:43:15,090 --> 01:43:16,150 и называют это S. 2069 01:43:16,150 --> 01:43:22,150 А потом, эй компьютер, идти вперед и печать, что имя человека, сделано. 2070 01:43:22,150 --> 01:43:26,240 >> Теперь, было бы неплохо, потому что эта программа, метко назвал, 2071 01:43:26,240 --> 01:43:29,170 говорит мне, что он должен делать путем имен тех, функции. 2072 01:43:29,170 --> 01:43:32,930 Позвольте мне пойти и сделать прототип, Enter. 2073 01:43:32,930 --> 01:43:34,930 И, к сожалению, это не будет летать. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, строка 7, характер 5, ошибка, неявное объявление 2075 01:43:39,430 --> 01:43:42,960 функции печати имени недопустим в C99, C99 2076 01:43:42,960 --> 01:43:45,130 означает версию C который вышел в 1999 году. 2077 01:43:45,130 --> 01:43:45,730 Это все. 2078 01:43:45,730 --> 01:43:48,780 >> Так что я не знаю, что все это означает, что до сих пор. 2079 01:43:48,780 --> 01:43:50,810 Но я признать ошибку в красном цвете. 2080 01:43:50,810 --> 01:43:51,770 Это довольно очевидно. 2081 01:43:51,770 --> 01:43:53,769 >> И мне кажется, что с зеленый символ здесь, 2082 01:43:53,769 --> 01:43:57,520 проблема связана с именем печати, откройте PAREN s, близкие PAREN, полусинтетические толстой кишки. 2083 01:43:57,520 --> 01:44:01,800 Но неявное декларация функция, которую мы видели кратко ранее. 2084 01:44:01,800 --> 01:44:04,880 Это означает, просто, что Clang не знает, что я имею в виду. 2085 01:44:04,880 --> 01:44:09,000 >> Я использовал Кодовое слово, что это никогда не видел и не учили раньше. 2086 01:44:09,000 --> 01:44:11,950 И поэтому мне нужно, чтобы научить его что значит эта функция. 2087 01:44:11,950 --> 01:44:13,590 Так что я собираюсь идти вперед и делать это. 2088 01:44:13,590 --> 01:44:17,970 >> Я собираюсь идти вперед и реализовать моя собственная функция называется Print Name. 2089 01:44:17,970 --> 01:44:24,720 И я буду говорить, как это следует, что он делает это, PRINTF, привет, процентов 2090 01:44:24,720 --> 01:44:27,760 s, обратный слэш н, имя, точка с запятой. 2091 01:44:27,760 --> 01:44:29,250 Так что же я только что сделал? 2092 01:44:29,250 --> 01:44:31,325 >> Так что получается, чтобы реализовать свою собственную функцию, 2093 01:44:31,325 --> 01:44:33,845 мы как-то позаимствовать некоторые из та же структура, как главный 2094 01:44:33,845 --> 01:44:35,720 что мы только что были нечто само собой разумеющееся, и я 2095 01:44:35,720 --> 01:44:37,730 знаю, просто скопировать и приклеивание довольно много, что 2096 01:44:37,730 --> 01:44:39,170 Я писал в прошлом. 2097 01:44:39,170 --> 01:44:40,570 Но обратите внимание на образец здесь. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, Пустота, мы будем дразнить друг от друга до того долго, что это на самом деле означает. 2099 01:44:43,750 --> 01:44:46,160 >> Но на сегодняшний день, как раз обратите внимание на параллелизм. 2100 01:44:46,160 --> 01:44:48,210 Пустота, имя печати, имя строки, так что есть 2101 01:44:48,210 --> 01:44:50,310 фиолетовое ключевое слово, который мы собираемся начать 2102 01:44:50,310 --> 01:44:54,067 вызывая тип возвращаемого значения, имя функция, а затем ввод. 2103 01:44:54,067 --> 01:44:56,400 Так что, на самом деле, мы можем перегонять этот вид, как на прошлой неделе 2104 01:44:56,400 --> 01:44:59,030 поскольку это имя или алгоритм кода мы находимся 2105 01:44:59,030 --> 01:45:00,761 собирается write-- алгоритм, лежащий в основе 2106 01:45:00,761 --> 01:45:02,010 код, который мы собираемся написать. 2107 01:45:02,010 --> 01:45:03,180 >> Это его вход. 2108 01:45:03,180 --> 01:45:04,670 Это его выход. 2109 01:45:04,670 --> 01:45:08,730 Эта функция, имя печати, является разработан, чтобы взять строку с именем имя, 2110 01:45:08,730 --> 01:45:11,350 или независимо от того, в качестве входных данных, а затем аннулируются. 2111 01:45:11,350 --> 01:45:13,904 Она не возвращает ничего, как получить строку или получить INT делает. 2112 01:45:13,904 --> 01:45:15,570 Так что он собирается передать мне что-нибудь. 2113 01:45:15,570 --> 01:45:17,960 Это просто будет иметь побочный эффект, так сказать, 2114 01:45:17,960 --> 01:45:19,570 печатать имя человека. 2115 01:45:19,570 --> 01:45:22,260 Так обратите внимание, строка 7, я можно назвать имя печати. 2116 01:45:22,260 --> 01:45:25,920 Строка 10, я могу определить или реализуют имя печати. 2117 01:45:25,920 --> 01:45:28,450 Но, к сожалению, этого недостаточно. 2118 01:45:28,450 --> 01:45:31,230 >> Позвольте мне идти вперед и перекомпилировать это после сохранения. 2119 01:45:31,230 --> 01:45:33,910 Вау, теперь, я сделал это хуже, казалось бы. 2120 01:45:33,910 --> 01:45:37,027 Таким образом, неявное объявление имя функции печати недействителен. 2121 01:45:37,027 --> 01:45:38,360 И, опять же, есть больше ошибок. 2122 01:45:38,360 --> 01:45:41,430 Но, как я предупредил ранее, даже если вы получаете завалены, 2123 01:45:41,430 --> 01:45:44,850 или немного грустно видеть так много Ошибки, сосредоточиться только на первый 2124 01:45:44,850 --> 01:45:47,500 на начальном этапе, так как это может быть просто имели каскадный эффект. 2125 01:45:47,500 --> 01:45:51,970 Так C или Clang более конкретно, до сих пор не признает имя печати. 2126 01:45:51,970 --> 01:45:54,580 >> И это потому, что Clang, дизайн, это своего рода немой. 2127 01:45:54,580 --> 01:45:56,280 Это только делает то, что вы скажете ей сделать. 2128 01:45:56,280 --> 01:46:00,950 И это только делает это в порядке в котором вы скажете ей сделать. 2129 01:46:00,950 --> 01:46:05,270 >> Таким образом, я определил главный на четвертой строке, как мы делали довольно часто. 2130 01:46:05,270 --> 01:46:07,980 Я определил имя печати в строке 10. 2131 01:46:07,980 --> 01:46:11,793 Но я пытаюсь использовать печатать имя на линии семь. 2132 01:46:11,793 --> 01:46:13,670 >> Это слишком рано, пока не существует. 2133 01:46:13,670 --> 01:46:19,150 Так что я мог быть умным, и быть, как, ОК, так что давайте просто играть вместе, 2134 01:46:19,150 --> 01:46:23,680 и переместить имя печати вверх здесь, и пересобрать. 2135 01:46:23,680 --> 01:46:24,550 О мой Бог. 2136 01:46:24,550 --> 01:46:25,260 Это сработало. 2137 01:46:25,260 --> 01:46:26,670 Это было так просто. 2138 01:46:26,670 --> 01:46:28,120 >> Но логика именно это. 2139 01:46:28,120 --> 01:46:30,870 Вы должны научить Clang, что это является путем определения функции первого. 2140 01:46:30,870 --> 01:46:31,920 После этого вы можете использовать его. 2141 01:46:31,920 --> 01:46:33,940 Но, честно говоря, это чувствует как скользкого. 2142 01:46:33,940 --> 01:46:35,773 >> Так что каждый раз, когда я бегу в проблему, я просто 2143 01:46:35,773 --> 01:46:39,450 собирается выделить и скопировать код Я написал, вырезать его и вставить его сюда. 2144 01:46:39,450 --> 01:46:41,370 И, конечно, мы могли бы изловчиться некоторые сценарии 2145 01:46:41,370 --> 01:46:43,286 где одна функция может нужно позвонить другому. 2146 01:46:43,286 --> 01:46:46,030 И вы просто не можете поместить каждый функция выше любой другой. 2147 01:46:46,030 --> 01:46:47,930 >> Так получается, что есть лучшее решение. 2148 01:46:47,930 --> 01:46:50,100 Мы можем оставить это быть. 2149 01:46:50,100 --> 01:46:53,677 И, честно говоря, это вообще приятно, и удобно, и хороший дизайн 2150 01:46:53,677 --> 01:46:56,760 поставить главный во-первых, потому что, опять же, Главным же, как когда зеленый флаг щелкнул, 2151 01:46:56,760 --> 01:46:59,027 то есть функция, запускается на выполнение по умолчанию. 2152 01:46:59,027 --> 01:47:01,110 Таким образом, вы можете также поместить она в верхней части файла 2153 01:47:01,110 --> 01:47:03,560 так что, когда вы или любой другой человек смотрит на файл 2154 01:47:03,560 --> 01:47:06,360 Вы знаете, что происходит просто прочитав главный первый. 2155 01:47:06,360 --> 01:47:15,360 Так что получается, мы можем сказать Clang проактивно, эй, Clang, на четвертой строке, 2156 01:47:15,360 --> 01:47:17,940 Я обещаю реализовать функция называется Print 2157 01:47:17,940 --> 01:47:22,600 Имя, которое принимает строку называется имя в качестве входных данных и возвращает ничего, пустота. 2158 01:47:22,600 --> 01:47:24,770 И я обойти реализации его позже. 2159 01:47:24,770 --> 01:47:25,680 >> Здесь приходит Main. 2160 01:47:25,680 --> 01:47:29,130 Главное теперь в строке 9 можно использовать Печать имени, потому что Clang 2161 01:47:29,130 --> 01:47:32,600 надеющийся, что, в конце концов, она будет сталкиваться с определением 2162 01:47:32,600 --> 01:47:34,880 осуществления печати Название. 2163 01:47:34,880 --> 01:47:37,390 Таким образом, после сохранения мой файл, пусть мне идти вперед и сделать прототип, 2164 01:47:37,390 --> 01:47:38,498 выглядит хорошо на этот раз. 2165 01:47:38,498 --> 01:47:43,470 Дот слэш, прототип, позвольте мне идти вперед и ввести имя. 2166 01:47:43,470 --> 01:47:48,440 Дэвид, привет David, Zamila, привет Zamila, и, на самом деле, теперь он работает. 2167 01:47:48,440 --> 01:47:52,200 >> Таким образом, компонент здесь является то, что мы в сделал пользовательскую функцию, как обычай 2168 01:47:52,200 --> 01:47:54,219 Царапина блок мы называем его. 2169 01:47:54,219 --> 01:47:57,010 Но в отличие от нуля, где вы можете просто создать его и начать использовать его, 2170 01:47:57,010 --> 01:47:59,330 Теперь мы должны быть немного более педантичным, 2171 01:47:59,330 --> 01:48:03,410 и на самом деле поезд Clang использовать, или ожидать его. 2172 01:48:03,410 --> 01:48:09,140 Теперь, как в сторону, почему все это время мы были просто слепо на веру, включая 2173 01:48:09,140 --> 01:48:12,170 CS50.h, и в том числе стандартных io.h? 2174 01:48:12,170 --> 01:48:15,190 >> Что ж, получается, среди нескольких других вещей, 2175 01:48:15,190 --> 01:48:18,550 все, что в этих точек ч файлы, которые, случается, файлы. 2176 01:48:18,550 --> 01:48:20,460 Они файлы заголовков, так сказать. 2177 01:48:20,460 --> 01:48:23,270 Они по-прежнему написаны на C. Но они другой тип файла. 2178 01:48:23,270 --> 01:48:28,690 >> На данный момент, вы можете в значительной степени предположить, что все, что находится внутри CS50.h 2179 01:48:28,690 --> 01:48:33,360 это некоторые остротами, как это, не для функций, вызываемых печати Имя, 2180 01:48:33,360 --> 01:48:36,840 но для получения строки, получить Поплавок, и несколько других. 2181 01:48:36,840 --> 01:48:41,510 И есть подобные прототипы, лайнеры, внутри стандартного io.h 2182 01:48:41,510 --> 01:48:46,241 для Printf, который сейчас находится в моя собственная функция печати Имя. 2183 01:48:46,241 --> 01:48:49,490 Итак, другими словами, все это время мы в просто слепо копируя и вставляя 2184 01:48:49,490 --> 01:48:51,780 включить это, включают в себя что, что происходит? 2185 01:48:51,780 --> 01:48:55,310 Это просто вид подсказок звенеть относительно того, что функции 2186 01:48:55,310 --> 01:49:00,170 которые, действительно, реализованы, просто в других местах в разных файлах 2187 01:49:00,170 --> 01:49:02,440 в другом месте в системе. 2188 01:49:02,440 --> 01:49:05,160 >> Таким образом, мы реализовали имя печати. 2189 01:49:05,160 --> 01:49:07,910 У него есть этот побочный эффект печать что-то на экране. 2190 01:49:07,910 --> 01:49:10,170 Но это не на самом деле передать мне что-нибудь. 2191 01:49:10,170 --> 01:49:12,200 Как мы идти о реализации программы, которая 2192 01:49:12,200 --> 01:49:14,510 это передать мне что-нибудь? 2193 01:49:14,510 --> 01:49:15,580 >> Что ж, давайте попробуем это. 2194 01:49:15,580 --> 01:49:21,360 Позвольте мне идти вперед и реализовать файл с именем return.c 2195 01:49:21,360 --> 01:49:24,530 так что мы можем показать, как что-то как получить строку, или получить Int, 2196 01:49:24,530 --> 01:49:27,340 на самом деле возвращение что-то обратно пользователю. 2197 01:49:27,340 --> 01:49:29,840 Давайте идти вперед и определить Int основную пустоту. 2198 01:49:29,840 --> 01:49:33,230 >> И, опять же, в будущем, мы будем объяснить, что это Int и эту пустоту 2199 01:49:33,230 --> 01:49:34,090 на самом деле делает. 2200 01:49:34,090 --> 01:49:35,840 Но на сегодняшний день, мы будем принимать как должное. 2201 01:49:35,840 --> 01:49:39,970 Я собираюсь идти вперед и Printf, для хорошего пользовательского опыта, х. 2202 01:49:39,970 --> 01:49:44,360 А потом я буду ждать Пользователь, чтобы дать мне х с GET Int. 2203 01:49:44,360 --> 01:49:48,459 >> А потом я собираюсь идти вперед и распечатать х на площадь. 2204 01:49:48,459 --> 01:49:50,500 Поэтому, когда у вас есть только клавиатура, люди часто 2205 01:49:50,500 --> 01:49:52,600 использовать маленькую морковь символ на клавиатуре 2206 01:49:52,600 --> 01:49:55,330 представлять к власти из, или показатель. 2207 01:49:55,330 --> 01:49:58,960 Так что х в квадрате присутствует я. 2208 01:49:58,960 --> 01:50:00,660 >> А теперь я собираюсь сделать это. 2209 01:50:00,660 --> 01:50:03,940 Я мог бы просто do-- что х в квадрате? х в квадрате х раз х. 2210 01:50:03,940 --> 01:50:06,690 >> И мы сделали это некоторые давно уже сегодня. 2211 01:50:06,690 --> 01:50:08,730 Это не похоже все, что значительный прогресс. 2212 01:50:08,730 --> 01:50:09,570 Знаешь что? 2213 01:50:09,570 --> 01:50:13,100 Давайте использовать некоторые из этой идеи от последнего времени абстракции. 2214 01:50:13,100 --> 01:50:16,080 >> Не было бы хорошо, если есть функция, называемая 2215 01:50:16,080 --> 01:50:18,460 квадрат, который делает именно это? 2216 01:50:18,460 --> 01:50:20,640 Он по-прежнему, в конце день, делает то же математику. 2217 01:50:20,640 --> 01:50:22,410 Но давайте абстрактные прочь идея взятия 2218 01:50:22,410 --> 01:50:25,280 одно число, умноженное на другой, а просто дать ему имя, 2219 01:50:25,280 --> 01:50:27,360 как квадрат это значение. 2220 01:50:27,360 --> 01:50:29,560 >> И, другими словами, в C, давайте создадим функцию 2221 01:50:29,560 --> 01:50:32,660 называется квадрат, который делает именно это. 2222 01:50:32,660 --> 01:50:34,600 Это будет называться квадрат. 2223 01:50:34,600 --> 01:50:35,790 Он собирается принять Int. 2224 01:50:35,790 --> 01:50:37,820 И мы будем просто называть его п, по умолчанию. 2225 01:50:37,820 --> 01:50:39,403 >> Но мы могли бы назвать это все, что мы хотим. 2226 01:50:39,403 --> 01:50:42,900 И все, что он собирается делать, в буквальном смысле, является возвращение 2227 01:50:42,900 --> 01:50:45,810 результат п раз п. 2228 01:50:45,810 --> 01:50:48,980 Но так как это возвращая что-то, что 2229 01:50:48,980 --> 01:50:53,690 является ключевым словом в фиолетовый мы в никогда не видел раньше, я, в строке 11, 2230 01:50:53,690 --> 01:50:55,410 не может просто сказать, пустота на этот раз. 2231 01:50:55,410 --> 01:51:01,320 >> Пустота, в примере, который мы только что видели а названия печати, просто означает, 2232 01:51:01,320 --> 01:51:02,190 сделай что-нибудь. 2233 01:51:02,190 --> 01:51:04,170 Но не дай мне что-нибудь. 2234 01:51:04,170 --> 01:51:06,790 В этом случае, я хочу для возврата в п раз п, 2235 01:51:06,790 --> 01:51:08,460 или независимо от того, что есть, это число. 2236 01:51:08,460 --> 01:51:12,460 >> Так что я не могу сказать, эй, компьютер, Я не вернусь ничего, пустота. 2237 01:51:12,460 --> 01:51:16,166 Это собирается вернуться, по своей природе, в Int. 2238 01:51:16,166 --> 01:51:17,790 И так, что это все, что здесь происходит. 2239 01:51:17,790 --> 01:51:20,070 >> Вход на площадь собирается быть инт. 2240 01:51:20,070 --> 01:51:24,760 И так, что мы можем использовать его, он должен есть имя, N. Это собирается выводить 2241 01:51:24,760 --> 01:51:26,240 INT, который не нужно имя. 2242 01:51:26,240 --> 01:51:29,590 Мы можем оставить его на главную, или тот, кто используя меня, чтобы помнить это значение, если мы 2243 01:51:29,590 --> 01:51:31,120 хочет со своей собственной переменной. 2244 01:51:31,120 --> 01:51:33,230 >> И, опять же, только новый Ключевое слово здесь Return. 2245 01:51:33,230 --> 01:51:34,480 И я просто делаю некоторые математике. 2246 01:51:34,480 --> 01:51:41,825 Если бы я действительно хотел быть ненужным, Я мог бы сказать INT продукт получает п раз п. 2247 01:51:41,825 --> 01:51:44,170 >> И тогда я мог бы сказать, вернуть продукт. 2248 01:51:44,170 --> 01:51:47,360 Но, опять же, к моей точке ранее из это просто не быть хорошим design-- 2249 01:51:47,360 --> 01:51:50,060 как, зачем вводить имя, символ, как продукт, 2250 01:51:50,060 --> 01:51:51,570 просто немедленно вернуть его? 2251 01:51:51,570 --> 01:51:53,670 Это немного чище, немного жестче, так 2252 01:51:53,670 --> 01:51:59,380 говорить, просто сказать, возвращение п раз п, чтобы избавиться от этой линии в целом. 2253 01:51:59,380 --> 01:52:02,860 >> И это как раз меньше кода, чтобы читать, меньше возможностей для ошибок. 2254 01:52:02,860 --> 01:52:05,180 И давайте посмотрим, если это на самом деле в настоящее время работает. 2255 01:52:05,180 --> 01:52:09,380 Теперь, я собираюсь пойти вперед и сделать возврат. 2256 01:52:09,380 --> 01:52:11,460 >> Ой-ой, неявное объявление функции. 2257 01:52:11,460 --> 01:52:14,080 Я сделал эту ошибку раньше, не составило большого труда. 2258 01:52:14,080 --> 01:52:18,950 Позвольте мне просто напечатать, или выделить и скопировать, точно такой же прототип функции, 2259 01:52:18,950 --> 01:52:21,342 или подписи, функции здесь. 2260 01:52:21,342 --> 01:52:22,800 Или я мог бы переместить всю функцию. 2261 01:52:22,800 --> 01:52:23,841 >> Но это немного ленивый. 2262 01:52:23,841 --> 01:52:24,870 Таким образом, мы не будем этого делать. 2263 01:52:24,870 --> 01:52:27,960 Теперь, позвольте мне сделать возвращение опять же, точка возврата косой черты. 2264 01:52:27,960 --> 01:52:32,790 >> х в квадрате 2. х 4. х квадрат 3. х 9. 2265 01:52:32,790 --> 01:52:35,300 И функция кажется Теперь, чтобы работать. 2266 01:52:35,300 --> 01:52:36,550 Так какая разница здесь? 2267 01:52:36,550 --> 01:52:42,520 У меня есть функция, которая называется квадрат, в этом случае, который я поставил в качестве вклада. 2268 01:52:42,520 --> 01:52:43,830 И я получаю обратно выход. 2269 01:52:43,830 --> 01:52:46,210 И тем не менее, ранее, если Я открываю другой пример 2270 01:52:46,210 --> 01:52:51,640 от ранее, что был назван prototype.c, 2271 01:52:51,640 --> 01:52:54,770 У меня было имя печати, который вернулся недействительным, если можно так выразиться, 2272 01:52:54,770 --> 01:52:58,730 Или это не дал ничего, и просто имел побочный эффект. 2273 01:52:58,730 --> 01:53:00,230 >> Так что же здесь происходит? 2274 01:53:00,230 --> 01:53:03,520 Что ж, рассмотрим функцию получить строку на мгновение. 2275 01:53:03,520 --> 01:53:06,570 Мы используем функцию получить строку следующим образом. 2276 01:53:06,570 --> 01:53:10,464 >> У нас было функция получить строка, как включать CS50.h, 2277 01:53:10,464 --> 01:53:16,624 включают в себя стандартные io.h, INT, основной, недействительным. 2278 01:53:16,624 --> 01:53:18,790 И тогда каждый раз, когда я называется получения строки до сих пор, 2279 01:53:18,790 --> 01:53:23,260 Я сказал что-то вроде, строка s получает получить строку, потому что string-- Get 2280 01:53:23,260 --> 01:53:27,880 давайте назовем эту get.c-- строку GET сама возвращает строку, я могу потом 2281 01:53:27,880 --> 01:53:32,050 использовать, и сказать, привет, запятая, процентов s, обратная косая п, з. 2282 01:53:32,050 --> 01:53:35,660 >> Так что это тот же самый пример, на самом деле, что у нас было раньше. 2283 01:53:35,660 --> 01:53:37,920 Так что строка возвращает значение. 2284 01:53:37,920 --> 01:53:41,260 Но мгновение назад, строка для печати не возвращает значение. 2285 01:53:41,260 --> 01:53:42,721 Он просто имеет побочный эффект. 2286 01:53:42,721 --> 01:53:44,220 Так что это принципиальная разница. 2287 01:53:44,220 --> 01:53:46,710 Мы видели разные типы функций в настоящее время, 2288 01:53:46,710 --> 01:53:49,490 некоторые из которых вернулись значения, некоторые из которых не делают. 2289 01:53:49,490 --> 01:53:51,890 Так может быть, это строка, или INT, или с плавающей точкой. 2290 01:53:51,890 --> 01:53:53,480 Или, может быть, это просто пустота. 2291 01:53:53,480 --> 01:53:55,710 >> И разница что эти функции, 2292 01:53:55,710 --> 01:53:59,940 получить данные и возвращает значение, на самом деле в результате чего-то обратно к столу, 2293 01:53:59,940 --> 01:54:01,110 так сказать. 2294 01:54:01,110 --> 01:54:03,710 Так что давайте идти вперед и смотреть на один окончательный набор 2295 01:54:03,710 --> 01:54:09,129 примеров, что дает ощущение, теперь, как мы могли бы, в самом деле, абстрактные лучше, 2296 01:54:09,129 --> 01:54:11,670 и лучше, и лучше, или больше, и больше, и больше, для того, 2297 01:54:11,670 --> 01:54:13,810 писать, в конечном счете, лучший код. 2298 01:54:13,810 --> 01:54:16,860 Давайте идти вперед, и в духе скретч, сделайте следующее. 2299 01:54:16,860 --> 01:54:21,700 >> Позвольте мне идти вперед и включают в себя CS50.h и стандарт IO.h. 2300 01:54:21,700 --> 01:54:24,010 Позвольте мне идти вперед и дать я INT, главным образом, пустота. 2301 01:54:24,010 --> 01:54:27,380 И позвольте мне идти вперед, называем это cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> И позвольте мне идти вперед и просто как царапина, распечатать кашель / п. 2303 01:54:35,510 --> 01:54:37,170 И я хочу сделать это три раза. 2304 01:54:37,170 --> 01:54:39,670 Так что я, конечно, просто собирается скопировать и вставить три раза. 2305 01:54:39,670 --> 01:54:46,440 Я сейчас собираюсь сделать кашель точка слэш кашель. 2306 01:54:46,440 --> 01:54:50,120 Давайте дадим себе немного больше места здесь, Enter, кашель, кашель, кашель. 2307 01:54:50,120 --> 01:54:53,970 >> Там в, очевидно, уже возможность для улучшения. 2308 01:54:53,970 --> 01:54:55,679 Я скопировал и вставил несколько раз сегодня. 2309 01:54:55,679 --> 01:54:58,261 Но это было только поэтому я не сделал должны набрать столько символов. 2310 01:54:58,261 --> 01:55:00,250 Я до сих пор изменилось, что эти строки кода. 2311 01:55:00,250 --> 01:55:04,240 >> Эти три линии идентичны, который чувствует себя ленивым и в самом деле есть, 2312 01:55:04,240 --> 01:55:07,110 и, вероятно, не правильный подход. 2313 01:55:07,110 --> 01:55:11,029 Так с какой ингредиент мы могли бы улучшить этот код? 2314 01:55:11,029 --> 01:55:12,570 Мы не должны копировать код. 2315 01:55:12,570 --> 01:55:15,070 >> И действительно, в любое время вы чувствуете самостоятельно копирования и вставки, 2316 01:55:15,070 --> 01:55:17,700 и даже не меняя код, Шансы есть лучший способ. 2317 01:55:17,700 --> 01:55:19,470 И, действительно, есть. 2318 01:55:19,470 --> 01:55:22,510 Позвольте мне идти вперед и сделать цикл, даже при том, что синтаксис не может 2319 01:55:22,510 --> 01:55:24,570 приходят, естественно, пока нет. 2320 01:55:24,570 --> 01:55:29,494 >> Сделайте это три раза, просто , делая following-- 2321 01:55:29,494 --> 01:55:31,160 и я знаю это из практики. 2322 01:55:31,160 --> 01:55:32,810 Но у нас есть ряд примеров, в настоящее время. 2323 01:55:32,810 --> 01:55:34,950 И вы увидите онлайн больше ссылок до сих пор. 2324 01:55:34,950 --> 01:55:37,790 >> Это синтаксис в строке 6, что так же, как нуля, который повторяется 2325 01:55:37,790 --> 01:55:40,090 блок, повторите следующие три раза. 2326 01:55:40,090 --> 01:55:41,340 Это немного волшебный сейчас. 2327 01:55:41,340 --> 01:55:43,050 Но это будет получить больше, и более знакомым. 2328 01:55:43,050 --> 01:55:45,050 >> И это будет повторяться линия восемь три раза, 2329 01:55:45,050 --> 01:55:52,390 так что если я перекомпилирует макияж кашель, точка слэш кашель, кашель, кашель, кашель. 2330 01:55:52,390 --> 01:55:54,030 Он по-прежнему работает точно так же. 2331 01:55:54,030 --> 01:55:55,550 Так что это все прекрасно и хорошо. 2332 01:55:55,550 --> 01:55:58,200 Но это не очень абстрактно. 2333 01:55:58,200 --> 01:55:59,371 >> Это совершенно правильно. 2334 01:55:59,371 --> 01:56:01,370 Но он чувствует, как там может быть возможность, 2335 01:56:01,370 --> 01:56:03,750 как и в мире Царапины, чтобы вид старта 2336 01:56:03,750 --> 01:56:07,530 чтобы добавить некоторую семантику здесь, так что Я не просто какой-то цикл, 2337 01:56:07,530 --> 01:56:09,867 и функция, которая говорит кашель, или же кашель. 2338 01:56:09,867 --> 01:56:10,450 Знаешь что? 2339 01:56:10,450 --> 01:56:12,620 Позвольте мне быть немного холоднее, чем, 2340 01:56:12,620 --> 01:56:16,090 и на самом деле написать функцию, которая имеет некоторые побочные эффекты, называют его кашель. 2341 01:56:16,090 --> 01:56:20,830 >> И это не имеет никакого ввода и не возвращает значения в качестве вывода. 2342 01:56:20,830 --> 01:56:22,680 Но вы знаете, что он делает? 2343 01:56:22,680 --> 01:56:29,370 Он делает this-- Printf, цитата Unquote, кашель. 2344 01:56:29,370 --> 01:56:32,380 >> И теперь здесь, я собираюсь идти вперед и для Int, 2345 01:56:32,380 --> 01:56:36,070 я получает ноль, я меньше, чем 3, я плюс плюс. 2346 01:56:36,070 --> 01:56:39,770 Я собираюсь не делать Printf, что возможно, реализация низкого уровня 2347 01:56:39,770 --> 01:56:40,270 подробно. 2348 01:56:40,270 --> 01:56:41,353 Меня не волнует, как кашель. 2349 01:56:41,353 --> 01:56:43,240 Я просто хочу, чтобы использовать функцию от кашля. 2350 01:56:43,240 --> 01:56:44,840 И я просто буду называть кашель. 2351 01:56:44,840 --> 01:56:46,204 >> Теперь обратите внимание на дихотомии. 2352 01:56:46,204 --> 01:56:49,370 При вызове функции, если вы этого не сделаете хотят, чтобы дать ему входы, совершенно нормально. 2353 01:56:49,370 --> 01:56:51,780 Просто сделайте открытые скобка, близко скобка, и вы сделали. 2354 01:56:51,780 --> 01:56:56,271 >> При определении функции, или объявить прототип функции во, 2355 01:56:56,271 --> 01:56:58,770 если вы заранее знаете, это не собирается принимать какие-либо аргументы, 2356 01:56:58,770 --> 01:57:01,170 говорят, пустота в этих скобках там. 2357 01:57:01,170 --> 01:57:05,660 И это гарантирует, что вам не случайно неправильного обращения с ним. 2358 01:57:05,660 --> 01:57:07,020 Позвольте мне идти вперед и сделать кашель. 2359 01:57:07,020 --> 01:57:08,540 И, конечно же, я сделал ошибку. 2360 01:57:08,540 --> 01:57:10,410 >> Проклятье, есть то, что неявное объявление. 2361 01:57:10,410 --> 01:57:11,325 Но это нормально. 2362 01:57:11,325 --> 01:57:12,590 Это легко исправить. 2363 01:57:12,590 --> 01:57:18,240 Мне просто нужно прототип выше в моем файле, чем я на самом деле использовать его. 2364 01:57:18,240 --> 01:57:20,070 >> Так что теперь позвольте мне сделать кашель снова, приятно. 2365 01:57:20,070 --> 01:57:20,790 Теперь она работает. 2366 01:57:20,790 --> 01:57:22,930 Сделать кашель, кашель, кашель, кашель. 2367 01:57:22,930 --> 01:57:25,930 Таким образом, вы можете подумать, что мы на самом деле чуть более инженерных эту проблему. 2368 01:57:25,930 --> 01:57:26,763 И действительно, мы. 2369 01:57:26,763 --> 01:57:28,870 Это не очень хорошая кандидат программы 2370 01:57:28,870 --> 01:57:31,930 на данный момент для рефакторинга, и делать то, что 2371 01:57:31,930 --> 01:57:35,645 называется иерархическое разложение, где вы берете какой-то код, а затем 2372 01:57:35,645 --> 01:57:38,790 вы вроде фактора вещи, так что, как приписывать больше семантики к ним, 2373 01:57:38,790 --> 01:57:40,930 и использовать его в конечном счете, более длительный срок. 2374 01:57:40,930 --> 01:57:43,490 Но это строительный блок в сторону более сложные программы 2375 01:57:43,490 --> 01:57:45,600 что мы начнем письменной форме до тех пор, что 2376 01:57:45,600 --> 01:57:50,090 позволяет нам иметь словарный запас с которой лучше писать код. 2377 01:57:50,090 --> 01:57:52,920 И действительно, давайте посмотрим, если мы не может обобщить это дальше. 2378 01:57:52,920 --> 01:57:57,984 >> Это кажется немного хромает, что я, главным образом, нужно беспокоиться об этом штопать для цикла, 2379 01:57:57,984 --> 01:57:59,400 и вызывая кашель снова и снова. 2380 01:57:59,400 --> 01:58:03,050 Почему я не могу просто сказать кашель, пожалуйста, кашель в три раза? 2381 01:58:03,050 --> 01:58:08,170 Другими словами, почему я не могу просто дают вклад в кашель и сделать это? 2382 01:58:08,170 --> 01:58:11,270 >> Почему я не могу просто сказать, в Основной кашель в три раза. 2383 01:58:11,270 --> 01:58:13,150 И теперь, это своего рода магическое. 2384 01:58:13,150 --> 01:58:14,540 Это очень итерационный здесь. 2385 01:58:14,540 --> 01:58:15,940 И это, действительно, шаг ребенка. 2386 01:58:15,940 --> 01:58:19,250 >> Но только способность говорить на линия восемь, кашель в три раза, 2387 01:58:19,250 --> 01:58:20,730 это просто так гораздо более удобным для чтения. 2388 01:58:20,730 --> 01:58:24,210 И, плюс, я не должен знать или все равно, как осуществляется кашель. 2389 01:58:24,210 --> 01:58:26,460 И действительно, позже в срок и для окончательных проектов, 2390 01:58:26,460 --> 01:58:29,150 если вы решать проект с одноклассник или два одноклассники, 2391 01:58:29,150 --> 01:58:32,370 вы поймете, что вы собираетесь должны, или хотите, разделить работу. 2392 01:58:32,370 --> 01:58:34,650 >> И вы будете хотеть, чтобы решить, заранее, кто будет делать то, что, 2393 01:58:34,650 --> 01:58:35,483 и в какие части? 2394 01:58:35,483 --> 01:58:37,520 И не было бы приятно если вы, например, 2395 01:58:37,520 --> 01:58:40,100 взять на себя ответственность написания главным образом, сделано. 2396 01:58:40,100 --> 01:58:43,470 А ваш сосед по комнате, или ваш партнер в более общем плане, 2397 01:58:43,470 --> 01:58:45,230 заботится о реализации кашель. 2398 01:58:45,230 --> 01:58:49,540 >> И это разделение, эти стены абстракции, 2399 01:58:49,540 --> 01:58:52,310 или слои абстракции если вы, супер мощный, 2400 01:58:52,310 --> 01:58:55,480 потому что особенно для больших, более сложные программы и системы, 2401 01:58:55,480 --> 01:59:00,070 она позволяет нескольким людям строить все вместе, и в конечном счете 2402 01:59:00,070 --> 01:59:02,680 сшить их совместную работу таким образом. 2403 01:59:02,680 --> 01:59:05,332 Но, конечно, мы нужно исправить прямо сейчас кашель. 2404 01:59:05,332 --> 01:59:07,290 Мы должны сказать кашель что, эй, вы знаете, что? 2405 01:59:07,290 --> 01:59:11,230 Вы будете нуждаться, чтобы взять input-- поэтому не пустота, а INT и теперь. 2406 01:59:11,230 --> 01:59:15,170 Давайте идти вперед и положить в кашель ИНТ. я получает ноль. 2407 01:59:15,170 --> 01:59:16,890 >> я меньше, чем во сколько раз. 2408 01:59:16,890 --> 01:59:18,550 Я сказал три раньше. 2409 01:59:18,550 --> 01:59:20,420 Но это не то, что я хочу. 2410 01:59:20,420 --> 01:59:25,520 Я хочу, чтобы кашель быть обобщена поддерживать любое количество итераций. 2411 01:59:25,520 --> 01:59:28,800 >> Так что, на самом деле, это п, что я хочу, все, что пользователь говорит мне. 2412 01:59:28,800 --> 01:59:31,620 Теперь я могу идти вперед и сказать печати кашель. 2413 01:59:31,620 --> 01:59:34,750 И независимо от того, какой номер пользователь переходит в, 2414 01:59:34,750 --> 01:59:36,890 Я буду повторять, что во много раз. 2415 01:59:36,890 --> 01:59:39,160 >> Таким образом, в конце концов, Программа идентична. 2416 01:59:39,160 --> 01:59:42,820 Но обратите внимание на все эти вещи может быть даже в другом файле. 2417 01:59:42,820 --> 01:59:45,620 На самом деле, я не знаю, на Момент, как Printf реализуется. 2418 01:59:45,620 --> 01:59:47,980 >> Я не знаю, на данный момент, как получить строка, или получить Int, или получить с плавающей точкой 2419 01:59:47,980 --> 01:59:48,646 реализуются. 2420 01:59:48,646 --> 01:59:50,930 И я не хочу увидеть их на моем экране. 2421 01:59:50,930 --> 01:59:55,320 Как это, я начинаю сосредоточиться на моя программа, а не те функции. 2422 01:59:55,320 --> 01:59:59,070 >> И так, в самом деле, как только вы начать факторинга код, как это, 2423 01:59:59,070 --> 02:00:01,397 мы могли бы даже двигаться кашель в отдельный файл? 2424 02:00:01,397 --> 02:00:02,730 Кто-то другой мог бы осуществить это. 2425 02:00:02,730 --> 02:00:06,810 И вы и ваша программа стала очень красивый, и очень легко читаются, 2426 02:00:06,810 --> 02:00:10,830 возможно, на самом деле четыре линии программы прямо там. 2427 02:00:10,830 --> 02:00:13,510 >> Так что давайте идти вперед прямо сейчас и сделать еще одно изменение. 2428 02:00:13,510 --> 02:00:16,180 Обратите внимание на то, что мой прототип должен измениться до вершины. 2429 02:00:16,180 --> 02:00:18,390 Итак, позвольте мне исправить что так Я не получаю кричал на. 2430 02:00:18,390 --> 02:00:22,580 >> Сделать кашель, позвольте мне бежать кашель один раз Более того, по-прежнему делает то же самое. 2431 02:00:22,580 --> 02:00:26,010 Но теперь, заметьте, мы имеем ингредиент для одной окончательной версии. 2432 02:00:26,010 --> 02:00:26,940 Знаешь что? 2433 02:00:26,940 --> 02:00:29,040 Я не хочу, чтобы просто кашель, обязательно. 2434 02:00:29,040 --> 02:00:30,802 Я хочу иметь что-то более общее. 2435 02:00:30,802 --> 02:00:31,510 Таким образом, вы знаете, что? 2436 02:00:31,510 --> 02:00:32,450 Я хочу сделать это. 2437 02:00:32,450 --> 02:00:37,140 Я хочу иметь, так же, как нуля делает, блок скажем, но не только 2438 02:00:37,140 --> 02:00:38,680 сказать что-то некоторое количество раз. 2439 02:00:38,680 --> 02:00:41,510 Я хочу сказать, очень конкретную строку. 2440 02:00:41,510 --> 02:00:43,850 И, следовательно, я не хочу, чтобы просто сказать, кашель. 2441 02:00:43,850 --> 02:00:47,660 Я хочу сказать, что бы ни строка передается в. 2442 02:00:47,660 --> 02:00:49,960 >> Поэтому обратите внимание, я обобщил это так, что в настоящее время 2443 02:00:49,960 --> 02:00:53,110 скажем чувствует себя доброе имя для этого, как нуля, 2444 02:00:53,110 --> 02:00:55,530 принимает два аргумента, в отличие от нуля. 2445 02:00:55,530 --> 02:00:56,570 Одним из них является строкой. 2446 02:00:56,570 --> 02:00:57,300 Одним из них является Int. 2447 02:00:57,300 --> 02:00:58,130 >> И я мог переключаться между ними. 2448 02:00:58,130 --> 02:01:00,713 Я просто вроде как идея говорят строку, а затем 2449 02:01:00,713 --> 02:01:01,940 сколько раз позже. 2450 02:01:01,940 --> 02:01:03,970 Пустота означает, что он до сих пор ничего не возвращает. 2451 02:01:03,970 --> 02:01:06,428 Это лишь визуальная сторона эффекты, как с [? Джордан,?] 2452 02:01:06,428 --> 02:01:08,240 словесное побочный эффект орать. 2453 02:01:08,240 --> 02:01:12,630 Он по-прежнему делает что-то п раз, 0 до, но не равно п. 2454 02:01:12,630 --> 02:01:14,540 Это означает, что общее время п. 2455 02:01:14,540 --> 02:01:16,540 А потом просто распечатать что бы это ни строка. 2456 02:01:16,540 --> 02:01:19,060 Так что я действительно обобщена эта строка кода. 2457 02:01:19,060 --> 02:01:22,460 Так что теперь, как я могу реализовать функция от кашля? 2458 02:01:22,460 --> 02:01:25,520 >> Я могу сделать недействительным кашель. 2459 02:01:25,520 --> 02:01:28,501 И я все еще могу взять в том, много раз вы хотите, чтобы кашель. 2460 02:01:28,501 --> 02:01:29,250 Но вы знаете, что? 2461 02:01:29,250 --> 02:01:31,240 Теперь я могу сказать, Пунт. 2462 02:01:31,240 --> 02:01:36,540 >> Я могу позвонить сказать с слово кашель, переходя в п. 2463 02:01:36,540 --> 02:01:40,410 И если я хочу также осуществить, просто для удовольствия, функция чиханье, 2464 02:01:40,410 --> 02:01:42,290 Я могу чиханье некоторое количество раз. 2465 02:01:42,290 --> 02:01:47,300 И я могу многократно использовать п, потому что обратите внимание, что т в данном контексте или объема 2466 02:01:47,300 --> 02:01:49,470 существует только внутри этой функции. 2467 02:01:49,470 --> 02:01:52,767 >> И п в этом контексте только существует в рамках этой функции здесь. 2468 02:01:52,767 --> 02:01:54,600 Таким образом, мы вернемся к эти вопросы сферы. 2469 02:01:54,600 --> 02:02:01,160 И вот, я просто хочу сказать, Achoo, а затем п раз, точка с запятой. 2470 02:02:01,160 --> 02:02:04,340 >> А теперь, мне просто нужно занять эти функции подписи здесь. 2471 02:02:04,340 --> 02:02:06,290 Так что кашель является правильным. 2472 02:02:06,290 --> 02:02:10,090 Пустота чих теперь правильно. 2473 02:02:10,090 --> 02:02:12,390 >> И я до сих пор просто нужно сказать. 2474 02:02:12,390 --> 02:02:18,990 Так что я буду говорить, скажем строка s, Int N, точка с запятой. 2475 02:02:18,990 --> 02:02:22,010 Таким образом, я чрезмерно спроектировали черт из этой программы. 2476 02:02:22,010 --> 02:02:23,760 >> И это не обязательно означает, что это 2477 02:02:23,760 --> 02:02:26,343 что вы должны сделать при написании даже самые простые программы. 2478 02:02:26,343 --> 02:02:29,280 Возьмите что-то, что, очевидно, очень просто, очень короткий, 2479 02:02:29,280 --> 02:02:31,800 и повторно реализовать его используя слишком много кода. 2480 02:02:31,800 --> 02:02:34,560 Но вы на самом деле видите, и в время оглянуться назад на этих примерах, 2481 02:02:34,560 --> 02:02:38,610 и осознать, о, это те шаги мы взяли на самом деле обобщать, 2482 02:02:38,610 --> 02:02:40,797 фактор что-то, до тех пор, пока в конце дня 2483 02:02:40,797 --> 02:02:42,380 мой код на самом деле довольно разумно. 2484 02:02:42,380 --> 02:02:45,960 Потому что, если я хочу, чтобы кашель три раз затем чихнуть три раза, 2485 02:02:45,960 --> 02:02:50,420 Я просто собираюсь запустить повторно, Программа делает кашель, и запустить кашель. 2486 02:02:50,420 --> 02:02:53,620 И у меня есть три кашляет и три чихает. 2487 02:02:53,620 --> 02:02:55,990 >> И так это основной парадигма, если вы будете, 2488 02:02:55,990 --> 02:03:00,110 за то, как мы могли бы идти о на самом деле реализации программы. 2489 02:03:00,110 --> 02:03:03,220 Но давайте просто посмотрим, что теперь это мы делаем все это время, 2490 02:03:03,220 --> 02:03:06,940 и то, что некоторые из заключительных частей позади этой простой команды. 2491 02:03:06,940 --> 02:03:09,620 В конце концов, мы использовали Clang в качестве нашего компилятора. 2492 02:03:09,620 --> 02:03:11,494 Мы писали источник код, превращая его 2493 02:03:11,494 --> 02:03:12,820 с помощью Clang в машинный код. 2494 02:03:12,820 --> 02:03:15,540 >> И мы используем только сделать чтобы облегчить наши нажатия клавиш так 2495 02:03:15,540 --> 02:03:20,740 что мы не должны помнить, эти заклинания самого Clang. 2496 02:03:20,740 --> 02:03:22,640 Но что это сделать на самом деле делать? 2497 02:03:22,640 --> 02:03:24,750 И, в свою очередь, является то, что Clang на самом деле делать? 2498 02:03:24,750 --> 02:03:28,790 >> Оказывается, хотя мы упростили сегодняшнее обсуждение, сказав, 2499 02:03:28,790 --> 02:03:33,090 вы берете исходный код, передать его в качестве вход компилятора, который дает вам 2500 02:03:33,090 --> 02:03:35,750 Выход машины код, оказывается, есть 2501 02:03:35,750 --> 02:03:37,420 несколько различных шагов внутри там. 2502 02:03:37,420 --> 02:03:41,940 И компилирование случается зонтик термин для целого ряда шагов. 2503 02:03:41,940 --> 02:03:43,970 Но давайте просто дразнить на это очень быстро. 2504 02:03:43,970 --> 02:03:48,070 >> Оказывается, что мы делаем больше вещей, каждый раз, когда я запустить программу, 2505 02:03:48,070 --> 02:03:50,990 или каждый раз, когда я скомпилировать программу сегодня. 2506 02:03:50,990 --> 02:03:55,020 Таким образом, предварительная обработка относится к this-- ничего в программе C, 2507 02:03:55,020 --> 02:03:58,720 как мы увидим снова и снова, который начинается с этой хэш-символа, 2508 02:03:58,720 --> 02:04:03,320 или символ Хештег здесь, означает, это директива препроцессора. 2509 02:04:03,320 --> 02:04:07,330 Это означает, что, в данном случае, эй компьютер, сделать что-то с этим файлом 2510 02:04:07,330 --> 02:04:09,430 прежде чем вы на самом деле скомпилировать мой собственный код. 2511 02:04:09,430 --> 02:04:15,220 >> В этом случае, хэш включают есть, по сути, путь C способ сказать, 2512 02:04:15,220 --> 02:04:19,325 эй компьютер, перейдите получить содержимое из CS50.h и вставить их здесь. 2513 02:04:19,325 --> 02:04:22,170 Эй компьютер, пойти получить содержание стандартного io.h, 2514 02:04:22,170 --> 02:04:24,690 везде, где это находится на жесткий диск, вставить его здесь. 2515 02:04:24,690 --> 02:04:27,390 Так что эти вещи случаются сначала во время предварительной обработки. 2516 02:04:27,390 --> 02:04:28,880 >> И Clang делает все это для нас. 2517 02:04:28,880 --> 02:04:30,510 И это делает это так штопать быстро, вы даже не 2518 02:04:30,510 --> 02:04:32,000 увидеть четыре различных вещей происходит. 2519 02:04:32,000 --> 02:04:34,100 Но это первый такой шаг. 2520 02:04:34,100 --> 02:04:35,560 >> Что на самом деле происходит дальше? 2521 02:04:35,560 --> 02:04:38,320 Ну, следующий официальный шаг компиляции. 2522 02:04:38,320 --> 02:04:40,385 И получается, что составление программы 2523 02:04:40,385 --> 02:04:44,060 технически означает переход от исходный код, то материал, который мы 2524 02:04:44,060 --> 02:04:47,890 писал сегодня, к чему-то называется код сборки, что-то 2525 02:04:47,890 --> 02:04:49,260 что выглядит несколько иначе. 2526 02:04:49,260 --> 02:04:51,050 >> И в самом деле, мы можем видеть это очень быстро. 2527 02:04:51,050 --> 02:04:53,890 Позвольте мне на самом деле пойти в мой IDE. 2528 02:04:53,890 --> 02:04:58,050 Позвольте мне идти вперед и открыть hello.c, который самая первая программа, с которой мы 2529 02:04:58,050 --> 02:04:59,120 начался сегодня. 2530 02:04:59,120 --> 02:05:04,130 И позвольте мне идти вперед и запустить Clang A немного по-другому, Clang-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 которая на самом деле собирается дайте мне еще один файл hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> И мы, вероятно, никогда снова увидеть этот вид кода. 2533 02:05:10,330 --> 02:05:13,030 Если взять более низкий уровень Системы класса, как CS61, 2534 02:05:13,030 --> 02:05:14,920 вы увидите намного больше из такого кода. 2535 02:05:14,920 --> 02:05:17,020 Но это язык сборки. 2536 02:05:17,020 --> 02:05:22,050 Это X86 ассемблере что процессор, который лежит в основе 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE на самом деле понимает. 2538 02:05:24,460 --> 02:05:27,060 >> И загадочно, как это делает смотрите, это что-то 2539 02:05:27,060 --> 02:05:29,180 компьютер понимает очень хорошо. 2540 02:05:29,180 --> 02:05:30,790 Sub кв, это вычитать. 2541 02:05:30,790 --> 02:05:31,660 Там в движение. 2542 02:05:31,660 --> 02:05:35,730 >> Там звонит функций здесь, х ORing, движение, надстройка, поп, 2543 02:05:35,730 --> 02:05:36,430 возвращение. 2544 02:05:36,430 --> 02:05:38,850 Так что есть какая-то очень инструкции низкого уровня 2545 02:05:38,850 --> 02:05:41,280 что процессоры понимают, что Я упоминал ранее. 2546 02:05:41,280 --> 02:05:43,100 То есть то, что Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Есть модели нули и единицы, что 2548 02:05:45,030 --> 02:05:51,800 сопоставить эти arcanely формулировку, однако несколько хорошо имени, инструкции, 2549 02:05:51,800 --> 02:05:52,780 так сказать. 2550 02:05:52,780 --> 02:05:54,780 Это то, что происходит, когда компиляции кода. 2551 02:05:54,780 --> 02:05:58,560 Вы получаете сборки язык из него, который 2552 02:05:58,560 --> 02:06:04,680 означает, третий шаг заключается в сборке что код сборки в конечном счете, 2553 02:06:04,680 --> 02:06:09,080 машина code-- нули и единицы, а не текст, который мы только что видели минуту назад. 2554 02:06:09,080 --> 02:06:13,370 >> Таким образом, предварительная обработка делает, что найти и заменить, и несколько других вещей. 2555 02:06:13,370 --> 02:06:16,430 Компиляция принимает ваш источник кода из C, исходный код 2556 02:06:16,430 --> 02:06:18,980 что мы уже писали, в сборе код, который мы только что посмотрел на. 2557 02:06:18,980 --> 02:06:22,170 Сборка занимает эту сборку код нулей и единиц 2558 02:06:22,170 --> 02:06:24,680 что процессор действительно будет понять, в конце рабочего дня. 2559 02:06:24,680 --> 02:06:27,630 И связывание является последним шагом что происходит из-за us-- снова, 2560 02:06:27,630 --> 02:06:29,830 так быстро мы не делаем даже notice--, что говорит, 2561 02:06:29,830 --> 02:06:32,460 эй компьютер, взять все нули и единицы, которые 2562 02:06:32,460 --> 02:06:36,750 в результате компиляции кода Давида, и его основной функцией в этом случае. 2563 02:06:36,750 --> 02:06:39,160 >> И эй компьютер, иди все нули и единицы 2564 02:06:39,160 --> 02:06:42,180 что сотрудники CS50 писал внутри библиотеки CS50. 2565 02:06:42,180 --> 02:06:43,440 Смешайте те, с Дэвида. 2566 02:06:43,440 --> 02:06:46,648 И эй компьютер, пойти получить все нули и те, что кто-то написал несколько лет 2567 02:06:46,648 --> 02:06:47,470 назад для Printf. 2568 02:06:47,470 --> 02:06:49,880 И добавить таких устройств в Все это, так что мы 2569 02:06:49,880 --> 02:06:52,870 получил мои нули и единицы, тем нули и единицы персонале CS50, в 2570 02:06:52,870 --> 02:06:55,370 то PRINTF нули и единицы, и все остальное, что мы используем. 2571 02:06:55,370 --> 02:07:00,410 >> Все они получают объединены в одну Программа под названием, в данном случае, привет. 2572 02:07:00,410 --> 02:07:03,141 Так что отныне мы будем просто использовать слово компиляции. 2573 02:07:03,141 --> 02:07:06,390 И мы считаем само собой разумеющимся, что, когда мы говорим, скомпилировать программу, то это означает, 2574 02:07:06,390 --> 02:07:08,849 эй делать предварительную обработку, монтаж и связь. 2575 02:07:08,849 --> 02:07:11,890 Но есть на самом деле некоторые сочные вещи там происходит под капотом. 2576 02:07:11,890 --> 02:07:13,723 И особенно если вы получить любопытную некоторое время, 2577 02:07:13,723 --> 02:07:15,900 вы можете начать тыкать вокруг на этом более низком уровне. 2578 02:07:15,900 --> 02:07:19,660 Но сейчас понимаю, что среди на сегодняшний день еды на дом 2579 02:07:19,660 --> 02:07:23,420 довольно просто начало процесса, 2580 02:07:23,420 --> 02:07:26,700 получения комфортно что-то вроде привет мир. 2581 02:07:26,700 --> 02:07:29,575 Действительно, большая часть того, что мы сделали сегодня конечно же, не будет тонуть в супер быстро. 2582 02:07:29,575 --> 02:07:31,491 И это займет некоторое время, и некоторые практики. 2583 02:07:31,491 --> 02:07:33,864 И шансы, вы будете сортировать от того, хотят ударить клавиатуры 2584 02:07:33,864 --> 02:07:34,780 или кричать на экране. 2585 02:07:34,780 --> 02:07:35,880 И все это нормально. 2586 02:07:35,880 --> 02:07:38,320 Хотя, возможно, стараюсь не сделать это в библиотеке так много. 2587 02:07:38,320 --> 02:07:40,820 >> И в конечном счете, вы будете быть в состоянии, хотя, чтобы начать 2588 02:07:40,820 --> 02:07:44,580 видя картины, как в хорошем коде что вы написали и в ошибках 2589 02:07:44,580 --> 02:07:45,370 что вы сделали. 2590 02:07:45,370 --> 02:07:48,965 И так же, как процесс став TF или СА, как, 2591 02:07:48,965 --> 02:07:51,590 вы начнете становиться все лучше и лучше видеть эти модели, 2592 02:07:51,590 --> 02:07:53,774 и просто решения ваших собственные проблемы в конечном счете. 2593 02:07:53,774 --> 02:07:56,940 В то же время, там будет много из нас, чтобы оказать вам поддержку, и вы получите 2594 02:07:56,940 --> 02:07:57,481 сквозь это. 2595 02:07:57,481 --> 02:07:59,450 А в записи окна для всех проблем, 2596 02:07:59,450 --> 02:08:01,366 вы будете руководствоваться через все команды 2597 02:08:01,366 --> 02:08:05,330 что я, конечно, знаю, из много практики в настоящее время, 2598 02:08:05,330 --> 02:08:07,380 но, возможно, прилетел над головой на данный момент. 2599 02:08:07,380 --> 02:08:08,580 И это совершенно нормально. 2600 02:08:08,580 --> 02:08:11,230 >> Но, в конечном счете, вы собираетесь чтобы начать видеть закономерности. 2601 02:08:11,230 --> 02:08:14,260 И как только вы пройти все из тупые детали, такие как круглые скобки, 2602 02:08:14,260 --> 02:08:16,710 и фигурные скобки и точки с запятой, и вещи, честно говоря, 2603 02:08:16,710 --> 02:08:19,360 что не на всех интеллектуально интересным. 2604 02:08:19,360 --> 02:08:22,690 И это не цель принимая любой вводный класс. 2605 02:08:22,690 --> 02:08:24,410 Это идеи, которые идут к материи. 2606 02:08:24,410 --> 02:08:26,659 >> Это петли, и условий, а также функции, 2607 02:08:26,659 --> 02:08:30,552 и более мощно абстракция, и факторинговая кода, 2608 02:08:30,552 --> 02:08:33,510 и хороший дизайн, и хорошее стиль, и в конечном счете правильность 2609 02:08:33,510 --> 02:08:37,330 вашего кода, что в конечном счете собирается иметь значение больше всего. 2610 02:08:37,330 --> 02:08:40,925 Так что на следующей неделе, мы будем принимать эти идеи, которые мы впервые увидели в пустом месте 2611 02:08:40,925 --> 02:08:42,800 и теперь переведены до C. И мы начнем 2612 02:08:42,800 --> 02:08:45,740 ввести первый из реального мира домены курса. 2613 02:08:45,740 --> 02:08:50,140 >> Мы сосредоточимся на мир безопасности, и более конкретно криптография, 2614 02:08:50,140 --> 02:08:51,980 искусство карабкаться информации. 2615 02:08:51,980 --> 02:08:54,000 И в числе первых проблемы вы сами 2616 02:08:54,000 --> 02:08:56,840 получите писать дальше играя с некоторыми из синтаксиса 2617 02:08:56,840 --> 02:08:59,880 и решая некоторые логические проблемы, в конечном счете, в скором времени, 2618 02:08:59,880 --> 02:09:03,960 это на самом деле засекретить, или зашифровать, и в конечном счете расшифровать информацию. 2619 02:09:03,960 --> 02:09:06,470 И все, что мы сделали сегодня, будет достаточно низким 2620 02:09:06,470 --> 02:09:09,190 уровень, только собирается, чтобы позволить нам взять один, и один, 2621 02:09:09,190 --> 02:09:13,550 и еще один шаг в сторону выше написание самый интересный код еще. 2622 02:09:13,550 --> 02:09:15,050 >> Так что больше на этом на следующей неделе. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [ПРОИГРЫВАНИЕ ВИДЕО] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> Что вы можете рассказать мне о в последний раз вы видели его? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Что Я могу сказать, на самом деле? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Я имею в виду, это было как и любой другой подготовка производства репетиция, 2631 02:09:35,340 --> 02:09:40,510 за исключением того, что-то было, он сказал: в самом конце, что застрял со мной. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -Это Был CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -Вот Вырезать все, отличная работа на репетиции. 2636 02:09:52,190 --> 02:09:53,070 >> обед -Вот? 2637 02:09:53,070 --> 02:09:54,986 >> -Да, Ты и я могу захватить бутерброд немного. 2638 02:09:54,986 --> 02:09:58,380 Позвольте мне просто опрашивать с Дэвид очень быстро. 2639 02:09:58,380 --> 02:09:59,160 Дэвид? 2640 02:09:59,160 --> 02:10:01,260 Дэвид? 2641 02:10:01,260 --> 02:10:03,110 >> [КОНЕЦ ВОСП]