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