1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [За възпроизвеждане на музика] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 DAVID J. Malan: Добре. 5 00:00:12,660 --> 00:00:15,590 Това е CS50, и този е началото на две седмици. 6 00:00:15,590 --> 00:00:19,120 Така че нека да започнем днес с бъг. 7 00:00:19,120 --> 00:00:20,974 A Bug, разбира се, е грешка в програма, 8 00:00:20,974 --> 00:00:22,890 и вие ще получите много запознати с тази концепция 9 00:00:22,890 --> 00:00:26,050 Ако никога не сте програмирали преди. pset0 и сега pset1. 10 00:00:26,050 --> 00:00:29,280 Но нека да разгледаме нещо малко просто на първо време. 11 00:00:29,280 --> 00:00:32,189 Тази програма тук, че аз хвърли заедно в аванс, 12 00:00:32,189 --> 00:00:37,280 и аз твърдя, че това трябва да отпечатате 10 звезди на екрана с помощта на ФОРМАТ, 13 00:00:37,280 --> 00:00:41,020 но това е очевидно бъги по някакъв начин. 14 00:00:41,020 --> 00:00:45,370 >> Като се има предвид, че техническите спецификации, тя трябва да отпечата 10 звезди, 15 00:00:45,370 --> 00:00:50,230 но това не е така очевидно, какво бихте твърдение е бъг? 16 00:00:50,230 --> 00:00:52,004 Да? 17 00:00:52,004 --> 00:00:54,420 Така че е почти от една грешка, и какво искаш да кажеш с това? 18 00:00:54,420 --> 00:01:00,991 19 00:01:00,991 --> 00:01:01,490 OK. 20 00:01:01,490 --> 00:01:09,820 21 00:01:09,820 --> 00:01:10,410 Отлично. 22 00:01:10,410 --> 00:01:13,930 Така че ние сме указали начало Нулева стойност на I, 23 00:01:13,930 --> 00:01:18,399 и ние сме определено п стойност от 10, но ние сме използвали по-малка или равна на. 24 00:01:18,399 --> 00:01:21,190 И поради това, че това е два символи, а не само един символ, 25 00:01:21,190 --> 00:01:22,630 като в математиката книга, е, че не е нужно 26 00:01:22,630 --> 00:01:24,880 начин на изразяване на един символ еквивалент. 27 00:01:24,880 --> 00:01:28,450 >> Така че това означава по-малко, отколкото, но ако започнете да брои до нула, 28 00:01:28,450 --> 00:01:31,690 но вие разчитате целия път нагоре през и равно на 10, 29 00:01:31,690 --> 00:01:34,170 вие сте на курс ще брои 11 неща общо. 30 00:01:34,170 --> 00:01:35,900 И така, ти започваш да отпечатате 11 звезди. 31 00:01:35,900 --> 00:01:37,990 Така че това, което може да бъде решение за това? 32 00:01:37,990 --> 00:01:39,970 Да? 33 00:01:39,970 --> 00:01:43,980 >> Така че просто се коригира по-малко от или равно на само по-малко от, 34 00:01:43,980 --> 00:01:46,250 и там е, аз твърдя, може би друго решение, също. 35 00:01:46,250 --> 00:01:47,210 Какво може друго да направиш? 36 00:01:47,210 --> 00:01:48,590 Да? 37 00:01:48,590 --> 00:01:53,660 >> Така че започнете да го равняващо се на 1, и оставя по-малко от или равно на. 38 00:01:53,660 --> 00:01:56,187 И честно казано аз бих твърдял че за типичен човешки, 39 00:01:56,187 --> 00:01:57,770 това е може би по-лесно. 40 00:01:57,770 --> 00:02:00,280 Започнете преброяване към 1 и брои до 10. 41 00:02:00,280 --> 00:02:01,690 По същество направи това, което искаш да кажеш. 42 00:02:01,690 --> 00:02:04,010 >> Но реалността е, в програмиране, както сме виждали, 43 00:02:04,010 --> 00:02:07,598 компютърни специалисти и програмисти обикновено започват преброяване на нула. 44 00:02:07,598 --> 00:02:09,389 И така, това е добре веднъж свикнете с него. 45 00:02:09,389 --> 00:02:12,640 Състоянието ви ще обикновено да бъде нещо като по-малко от. 46 00:02:12,640 --> 00:02:14,910 Така просто логично грешка, която бихме могли сега 47 00:02:14,910 --> 00:02:17,990 фиксира и в крайна сметка прекомпилирате това и да получите само 10. 48 00:02:17,990 --> 00:02:19,610 >> Ами какво ще кажете за този бъг тук? 49 00:02:19,610 --> 00:02:24,200 Тук, отново, аз твърдя, че имам цел на печат 10 stars-- 50 00:02:24,200 --> 00:02:28,140 по един на ред този път, но това не го прави. 51 00:02:28,140 --> 00:02:30,940 Преди да предложи това, което уговорката е, какво прави това 52 00:02:30,940 --> 00:02:34,640 отпечатате визуално, ако аз трябваше да съставят и стартирате тази програма мислиш? 53 00:02:34,640 --> 00:02:35,140 Да? 54 00:02:35,140 --> 00:02:38,360 55 00:02:38,360 --> 00:02:38,860 >> Star. 56 00:02:38,860 --> 00:02:41,690 Така че всички звезди на една и съща линия е това, което чух, 57 00:02:41,690 --> 00:02:43,391 и след това новата линия характер. 58 00:02:43,391 --> 00:02:44,140 Така че нека се опитаме това. 59 00:02:44,140 --> 00:02:48,710 Така че се бъги-1, влиза, и виждам командата трясък 60 00:02:48,710 --> 00:02:50,090 че ние говорихме за последен път. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, а всъщност виждам всички 10 звезди на същата линия, въпреки че аз твърдя, 62 00:02:55,180 --> 00:02:58,690 в моята спецификация просто коментар на върха кода, който възнамерявах да направя една на 63 00:02:58,690 --> 00:02:59,230 линия. 64 00:02:59,230 --> 00:03:00,580 Но това изглежда добре. 65 00:03:00,580 --> 00:03:04,620 >> Сега ред 15 тя изглежда сякаш съм отпечатване на една звезда, а след това линия 16 66 00:03:04,620 --> 00:03:06,620 тя изглежда като аз съм печат нова линия характер, 67 00:03:06,620 --> 00:03:09,560 и те двамата с отстъп така Аз съм вътре в контура ясно. 68 00:03:09,560 --> 00:03:13,610 Така че не трябва да се прави звезда, нова линия, звезда, нова линия, звезда, нова линия? 69 00:03:13,610 --> 00:03:14,110 Да? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Да, за разлика от един език като Python, ако сте запознати, 72 00:03:21,240 --> 00:03:23,540 отстъп не значение за компютъра. 73 00:03:23,540 --> 00:03:25,280 Това само има значение за човека. 74 00:03:25,280 --> 00:03:29,860 Така че тук съм изобретил линии 15 и 16-- че изглежда красива, 75 00:03:29,860 --> 00:03:31,330 но компютърът не го е грижа. 76 00:03:31,330 --> 00:03:34,640 Компютърът се грижи за всъщност като фигурни скоби 77 00:03:34,640 --> 00:03:36,310 около тези редове код. 78 00:03:36,310 --> 00:03:39,520 >> Така че това е clear-- точно като в Scratch--, че тези два реда код 79 00:03:39,520 --> 00:03:40,450 трябва да бъде изпълнена. 80 00:03:40,450 --> 00:03:44,390 Като един от тези, жълт Scratch пъзел парчета отново и отново, и отново. 81 00:03:44,390 --> 00:03:50,920 >> Така че сега, ако аз отново стартирате тази program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Имам една грешка сега. 83 00:03:51,770 --> 00:03:54,212 Какво съм забравяйте да го направите? 84 00:03:54,212 --> 00:03:55,420 Да, така че аз не го компилирате. 85 00:03:55,420 --> 00:03:56,740 Така че се бъги-2. 86 00:03:56,740 --> 00:03:59,840 Няма такъв файл, защото аз не всъщност съставят втората версия. 87 00:03:59,840 --> 00:04:04,860 Така че сега интересно недекларирания не променлива-- 2. 88 00:04:04,860 --> 00:04:05,510 Правим една. 89 00:04:05,510 --> 00:04:11,050 Уверете се, бъги-1-- ./buggy-1-- и сега всеки от тях е на една и съща линия. 90 00:04:11,050 --> 00:04:13,880 >> Сега там е изключение това предполага, че твърдението на мина 91 00:04:13,880 --> 00:04:15,520 че имате нужда от тези фигурни скоби. 92 00:04:15,520 --> 00:04:20,160 Когато това е всъщност OK-- Ако сте забелязал в раздел или textbooks-- 93 00:04:20,160 --> 00:04:22,130 да пропусне фигурните скоби? 94 00:04:22,130 --> 00:04:22,630 Да? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Точно така. 97 00:04:26,870 --> 00:04:28,940 Когато има само един линия на код, който 98 00:04:28,940 --> 00:04:32,830 искат да бъдат свързани с контур, както в първия ни пример. 99 00:04:32,830 --> 00:04:36,380 Тя е напълно законен да пропусне фигурните скоби 100 00:04:36,380 --> 00:04:40,310 просто като вид удобство от компилатора за вас. 101 00:04:40,310 --> 00:04:40,810 Да? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Добър въпрос. 104 00:04:43,930 --> 00:04:45,500 Искате ли да се счита за грешка стил? 105 00:04:45,500 --> 00:04:49,340 Бихме promote-- като в CS50 стил ръководство, на URL адреса, за които 106 00:04:49,340 --> 00:04:51,926 е в pset1-- че винаги използвате фигурните скоби. 107 00:04:51,926 --> 00:04:53,550 Разбира се, ако сте нов в програмирането. 108 00:04:53,550 --> 00:04:56,800 Реалността е, че ние не сме няма да ви се забрани 109 00:04:56,800 --> 00:04:58,680 от извършване на тези удобства. 110 00:04:58,680 --> 00:05:00,846 Но ако сте само за да се в люлка на нещата, 111 00:05:00,846 --> 00:05:04,020 абсолютно просто винаги използвайте къдрава скоби, докато не получите цаката. 112 00:05:04,020 --> 00:05:04,640 Добър въпрос. 113 00:05:04,640 --> 00:05:05,320 >> Добре. 114 00:05:05,320 --> 00:05:07,660 Така че след това е бъг. 115 00:05:07,660 --> 00:05:09,190 Поне в нещо доста просто. 116 00:05:09,190 --> 00:05:11,260 И все пак може би си мислите това е доста елементарен, нали? 117 00:05:11,260 --> 00:05:13,635 Това е вид на първата седмица гледа на езика 118 00:05:13,635 --> 00:05:14,890 като, видите вашите грешки в него. 119 00:05:14,890 --> 00:05:17,250 Но реалността те са всъщност представител 120 00:05:17,250 --> 00:05:20,310 на някои доста плашещи проблеми които могат да възникнат в реалния свят. 121 00:05:20,310 --> 00:05:23,530 >> Така че някои от вас може да се припомни, ако следвате технологични новини, 122 00:05:23,530 --> 00:05:25,740 или може би дори хвана вятър от тази през февруари 123 00:05:25,740 --> 00:05:29,434 на изминалата година, че Apple е имал направи малко от грешка в двете IOS, 124 00:05:29,434 --> 00:05:31,350 операционната система на телефоните си, а също и 125 00:05:31,350 --> 00:05:34,220 Mac OS, операционната система на своите настолни компютри и лаптопи. 126 00:05:34,220 --> 00:05:36,480 А ти видя такива заглавия като това. 127 00:05:36,480 --> 00:05:41,120 И след това, Apple обеща да оправи този бъг, 128 00:05:41,120 --> 00:05:45,950 и много бързо направих го оправя в IOS, но след това в крайна сметка го поправя в Mac OS 129 00:05:45,950 --> 00:05:46,810 както и. 130 00:05:46,810 --> 00:05:50,370 >> Сега никой от тези заглавия сам наистина разкрие какъв е основния проблем, 131 00:05:50,370 --> 00:05:55,640 но грешката е в крайна сметка намалява до бъг в SSL, Secure Sockets Layer. 132 00:05:55,640 --> 00:05:57,390 И дълга история кратко, това е софтуер 133 00:05:57,390 --> 00:06:01,030 че нашите браузъри и други софтуер, използван за какво? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Ако бях казал, че SSL е участва, когато 136 00:06:06,860 --> 00:06:13,920 посещение на URL, който започва с HTTPS, Какво тогава може да бъде свързана с SSL? 137 00:06:13,920 --> 00:06:14,580 Encryption. 138 00:06:14,580 --> 00:06:16,470 Така че ние ще говорим за това през следващите дни. 139 00:06:16,470 --> 00:06:18,750 Encryption, изкуството на кодиране на информация. 140 00:06:18,750 --> 00:06:22,200 >> Но дълга история кратко, Apple по някое време преди е направил грешка 141 00:06:22,200 --> 00:06:25,970 при тяхното изпълнение на SSL, на софтуер, който в крайна сметка изпълнява 142 00:06:25,970 --> 00:06:30,120 URLs като HTTPS или макс връзки там. 143 00:06:30,120 --> 00:06:32,850 Резултатът от които е, че вашият връзки може потенциално 144 00:06:32,850 --> 00:06:33,920 да бъдат засечени. 145 00:06:33,920 --> 00:06:37,130 И вашите връзки са не непременно криптирана 146 00:06:37,130 --> 00:06:40,350 ако сте имали някои лош човек в между вас и сайта на местоназначение, което 147 00:06:40,350 --> 00:06:42,170 знаеше как да се възползва от това. 148 00:06:42,170 --> 00:06:45,090 >> Сега Apple в крайна сметка е публикувал а оправи за това най-накрая, 149 00:06:45,090 --> 00:06:46,920 и описанието на тяхната корекция е това. 150 00:06:46,920 --> 00:06:49,878 Secure транспорт не успя да се утвърди автентичността на връзката. 151 00:06:49,878 --> 00:06:52,920 Въпросът беше разгледан от възстановяване на липсващите стъпки за валидиране. 152 00:06:52,920 --> 00:06:57,250 >> Така че това е един много ръка вълниста обяснение за просто казваме, че прецаках. 153 00:06:57,250 --> 00:07:00,920 Има буквално една линия на код, който е бъгав 154 00:07:00,920 --> 00:07:05,130 при тяхното изпълнение на SSL, и Ако отидете онлайн и търсене на тази 155 00:07:05,130 --> 00:07:07,210 всъщност можете да намерите оригиналния код. 156 00:07:07,210 --> 00:07:11,960 Например, това е снимка на екрана само част от един доста голям файл, 157 00:07:11,960 --> 00:07:15,965 но това е функция очевидно нарича SSL провери знак сървъра обмен на ключове. 158 00:07:15,965 --> 00:07:17,840 И това отнема куп аргументи и входове. 159 00:07:17,840 --> 00:07:20,298 И ние няма да се съсредоточи твърде много върху дреболии там, 160 00:07:20,298 --> 00:07:24,390 но ако се съсредоточи върху кода вътре на този най-горен function-- нека 161 00:07:24,390 --> 00:07:25,590 фокусирам върху това. 162 00:07:25,590 --> 00:07:28,140 Вие може би вече подозирате какво грешката може 163 00:07:28,140 --> 00:07:31,230 да бъде дори ако вие нямате представа в крайна сметка това, което търсите в. 164 00:07:31,230 --> 00:07:35,924 Има вид аномалия тук, което е това? 165 00:07:35,924 --> 00:07:38,940 >> Да, аз наистина не харесвам външния вид на два Гото провали. 166 00:07:38,940 --> 00:07:42,060 Честно казано, аз наистина не знам какво Гото провали средства, но като две от тях 167 00:07:42,060 --> 00:07:42,810 назад към гърба. 168 00:07:42,810 --> 00:07:45,290 Това просто вид ме трие интелектуално по грешен начин, 169 00:07:45,290 --> 00:07:48,910 и наистина, ако ние увеличите само тези линии, това е C. 170 00:07:48,910 --> 00:07:52,220 >> Така че много код на Apple сама по себе си, написани на C, 171 00:07:52,220 --> 00:07:55,780 и това очевидно е наистина equivalent-- 172 00:07:55,780 --> 00:07:59,060 не, че доста отстъп версия, но ако можете да разпознаете факта, 173 00:07:59,060 --> 00:08:02,560 че няма фигурни скоби, какво Apple наистина е написал е код, който изглежда 174 00:08:02,560 --> 00:08:03,540 по този начин. 175 00:08:03,540 --> 00:08:07,080 Така че аз съм в голям мащаб и аз просто фиксиран вдлъбнатината, в смисъл 176 00:08:07,080 --> 00:08:10,690 че ако няма фигурни скоби, че второ Иди провалят, че е в жълто 177 00:08:10,690 --> 00:08:12,500 ще се изпълни, без значение какво. 178 00:08:12,500 --> 00:08:15,540 Това не е свързано с , ако състоянието горе. 179 00:08:15,540 --> 00:08:19,590 >> Така че дори и отново, не, ако го направите доста разберем какво би могло да 180 00:08:19,590 --> 00:08:23,230 да се прави, да знаете, че всеки един от тях conditions-- всяка от тези линии 181 00:08:23,230 --> 00:08:26,180 е много важна стъпка в процес на проверка 182 00:08:26,180 --> 00:08:28,350 ако данните ви е в действителност кодирано. 183 00:08:28,350 --> 00:08:31,710 Така прескочите един от тях стъпки, а не най-добрата идея. 184 00:08:31,710 --> 00:08:34,840 >> Но тъй като ние имаме това второ Иди провали в жълто, 185 00:08:34,840 --> 00:08:36,840 и защото след като ние вид на естетически 186 00:08:36,840 --> 00:08:40,480 да го преместите в ляво, където логично е в момента, това, което 187 00:08:40,480 --> 00:08:43,230 означава това за линията на кода по-долу, че вторият Гото 188 00:08:43,230 --> 00:08:46,480 се провали ще си помислите? 189 00:08:46,480 --> 00:08:48,860 Тя винаги ще бъде пропуснат. 190 00:08:48,860 --> 00:08:52,100 Така gotos обикновено се гледат накриво по причини, ние не наистина ще отидат в, 191 00:08:52,100 --> 00:08:54,940 и наистина в CS50 ние не са склонни да преподават това изявление Гото, 192 00:08:54,940 --> 00:08:58,130 но можеш да се сетиш на Гото се провали в смисъл Go скок 193 00:08:58,130 --> 00:08:59,600 някаква друга част от кода. 194 00:08:59,600 --> 00:09:03,120 >> С други думи прескачат този последен ред изобщо, 195 00:09:03,120 --> 00:09:07,420 и по този начин резултатът от тази глупава просто грешка, която е само 196 00:09:07,420 --> 00:09:10,330 В резултат на вероятно някой копиране и вмъкване на един твърде 197 00:09:10,330 --> 00:09:14,150 много пъти е, че цялата сигурността на IOS и Mac OS 198 00:09:14,150 --> 00:09:18,240 е уязвима за подслушване от лошите момчета за доста дълго време. 199 00:09:18,240 --> 00:09:19,940 Докато Apple най-накрая определи това. 200 00:09:19,940 --> 00:09:23,100 >> Сега, ако някои от вас са всъщност използвате стари версии на IOS или Mac OS, 201 00:09:23,100 --> 00:09:27,250 можете да отидете на gotofail.com които е уебсайт, че някой създаде 202 00:09:27,250 --> 00:09:29,190 по същество определя програмно 203 00:09:29,190 --> 00:09:30,980 Ако компютърът ви е все още уязвимо. 204 00:09:30,980 --> 00:09:33,600 И честно казано, ако е така, това е може би е добра идея 205 00:09:33,600 --> 00:09:36,870 да актуализирате вашия телефон или Вашия Mac в този момент. 206 00:09:36,870 --> 00:09:40,120 Но там, просто доказателство за това колко оценка на тези по-ниско ниво 207 00:09:40,120 --> 00:09:42,400 детайли и справедливо прости идеи наистина може да 208 00:09:42,400 --> 00:09:44,590 се трансформира в решения и проблеми, които 209 00:09:44,590 --> 00:09:47,320 affected-- в тази case-- милиони хора. 210 00:09:47,320 --> 00:09:49,107 >> Сега няколко думи за администриране. 211 00:09:49,107 --> 00:09:50,690 Раздел ще започне идната неделя. 212 00:09:50,690 --> 00:09:53,360 Вие ще получите имейл от уикенд за точка, при която точка 213 00:09:53,360 --> 00:09:55,290 процеса на resectioning ще започне, ако сте 214 00:09:55,290 --> 00:09:56,998 Осъзнах, че сега имаме някои нови конфликти. 215 00:09:56,998 --> 00:10:00,180 Така че това се случва всяка година, а ние ще се настанят в идните дни. 216 00:10:00,180 --> 00:10:02,430 >> Office hours-- направя държи под око на този график тук. 217 00:10:02,430 --> 00:10:05,100 Променя малко тази седмица, особено времето за стартиране 218 00:10:05,100 --> 00:10:08,180 и мястото, така че да се консултира че преди да замине за работно време 219 00:10:08,180 --> 00:10:09,520 всяко от следващите четири нощи. 220 00:10:09,520 --> 00:10:12,680 А сега няколко думи за оценка, особено като се потопите в проблем 221 00:10:12,680 --> 00:10:14,350 задава един и извън нея. 222 00:10:14,350 --> 00:10:17,070 >> Така на спецификацията, по принцип тези картинки са 223 00:10:17,070 --> 00:10:20,360 осите, по който ние оценяваме вашата работа. 224 00:10:20,360 --> 00:10:23,170 Обхват се отнася до това, степен кодовите си сечива 225 00:10:23,170 --> 00:10:25,690 необходими функции от нашата спецификация. 226 00:10:25,690 --> 00:10:28,290 С други думи, колко от парче набор нали отхапе. 227 00:10:28,290 --> 00:10:30,440 Ти ли направи една трета от него, половината от него, 100% от него. 228 00:10:30,440 --> 00:10:33,000 Дори ако това не е правилно, колко ли се опитват? 229 00:10:33,000 --> 00:10:35,290 Така че, който улавя нивото на усилията и количеството 230 00:10:35,290 --> 00:10:38,260 към който отхапа проблеми проблем поставените му. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- този един, за да каква степен е вашият код 232 00:10:40,690 --> 00:10:43,150 в съответствие с нашата спецификации и без грешки. 233 00:10:43,150 --> 00:10:44,770 Така работи той правилно? 234 00:10:44,770 --> 00:10:48,700 Ако ние го дам някои вход, той прави ни даде резултат, който ние очакваме? 235 00:10:48,700 --> 00:10:52,570 Design-- сега това е първият от на особено качествени такива, 236 00:10:52,570 --> 00:10:56,180 или тези, които се нуждаят от човешката преценка. 237 00:10:56,180 --> 00:10:59,690 И наистина, това е защо ние имаме персонал на толкова много учебни сътрудници и разбира се 238 00:10:59,690 --> 00:11:00,350 асистенти. 239 00:11:00,350 --> 00:11:03,480 До каква степен е вашият код, написан добре? 240 00:11:03,480 --> 00:11:05,810 >> И отново това е много качествена оценка 241 00:11:05,810 --> 00:11:09,100 които ще работят с вас на двупосочно в идните седмици. 242 00:11:09,100 --> 00:11:12,060 Така че, когато не се само числови резултати, но също така 243 00:11:12,060 --> 00:11:16,682 на писмените резултати, или написали обратна връзка, или писмено обратна връзка в английските думи. 244 00:11:16,682 --> 00:11:19,640 Това е, което ние ще използваме, за да шофирате към пишейки по-добре код. 245 00:11:19,640 --> 00:11:23,320 И в лекция и раздел, ние ще се опитаме да посоча out-- толкова често, колкото ние can-- 246 00:11:23,320 --> 00:11:26,420 това, което прави една програма не само правилното и функционално добре, 247 00:11:26,420 --> 00:11:28,200 но също така и добре организиран. 248 00:11:28,200 --> 00:11:31,850 Най-ефективните тя може да бъде, или дори и най-красивите тя може да бъде. 249 00:11:31,850 --> 00:11:33,100 >> Което ни води до стил. 250 00:11:33,100 --> 00:11:36,876 Стил в крайна сметка е естетическо решение. 251 00:11:36,876 --> 00:11:38,750 Избрахте ли добър имена на променливи? 252 00:11:38,750 --> 00:11:40,330 Били ли сте с отстъп вашия код правилно? 253 00:11:40,330 --> 00:11:44,010 Има ли изглежда добре, и следователно, е лесен за друго човешко същество 254 00:11:44,010 --> 00:11:46,550 да четете съответната на неговата правилност. 255 00:11:46,550 --> 00:11:50,300 >> Сега обикновено на учебната програма, ние отбележи тези неща, по скала от пет точка. 256 00:11:50,300 --> 00:11:53,640 И нека ме чука дома точката че три е наистина добре. 257 00:11:53,640 --> 00:11:55,550 Много бързо направи хора започнете да правите аритметика. 258 00:11:55,550 --> 00:11:58,133 Когато те ще получат три от пет за вярност, за някои pset 259 00:11:58,133 --> 00:12:02,040 и те мислят по дяволите, отивам до 60% който е по същество D или Е. 260 00:12:02,040 --> 00:12:03,980 >> Това не е начинът, по който мисля, че на тези номера. 261 00:12:03,980 --> 00:12:06,880 A три е наистина добро, и това, което ние обикновено се очаква в началото 262 00:12:06,880 --> 00:12:09,820 на срока е, че ако сте се куп three's-- може би няколко 263 00:12:09,820 --> 00:12:12,540 на панаири, няколко fours-- или няколко двойки, няколко fours-- 264 00:12:12,540 --> 00:12:13,748 това е едно добро място да започнете. 265 00:12:13,748 --> 00:12:16,320 И така, докато ние виждаме нагоре траектория с течение на времето, 266 00:12:16,320 --> 00:12:18,540 вие сте в особено добро място. 267 00:12:18,540 --> 00:12:20,752 >> Формулата ние използваме, за да тегло неща е по същество 268 00:12:20,752 --> 00:12:22,710 тази на учебната програма, което просто означава, че ние 269 00:12:22,710 --> 00:12:24,750 придадат повече тежест на коректност. 270 00:12:24,750 --> 00:12:27,930 Защото това е много често коректност че отнема най-много време. 271 00:12:27,930 --> 00:12:28,760 Повярвай ми сега. 272 00:12:28,760 --> 00:12:31,190 Ще find-- най-малко в един pset-- че 273 00:12:31,190 --> 00:12:36,790 прекарват 90% от времето си работи на 10% от проблема. 274 00:12:36,790 --> 00:12:39,320 >> И всичко някак работи с изключение на една или две грешки, 275 00:12:39,320 --> 00:12:41,570 и тези, които са буболечки, че ви държи до късно през нощта. 276 00:12:41,570 --> 00:12:43,380 Това са тези, които нещо ви избяга. 277 00:12:43,380 --> 00:12:45,560 Но след спи върху него, или посещаване работно време 278 00:12:45,560 --> 00:12:48,844 или задаване на въпроси онлайн, се когато стигнем до тази цел 100%, 279 00:12:48,844 --> 00:12:50,760 и това е защо ние тегло коректност най-много. 280 00:12:50,760 --> 00:12:54,102 Проектиране на малко по-малко, и оформите по-малко от това. 281 00:12:54,102 --> 00:12:56,060 Но имайте mind-- стил е може би най-лесният 282 00:12:56,060 --> 00:12:58,890 от тях да отхапе според ръководството за стил. 283 00:12:58,890 --> 00:13:01,580 >> И сега, по-сериозна обърнете внимание на академична честност. 284 00:13:01,580 --> 00:13:05,000 CS50 има жалко разграничение на е най-големият производител на Ad Board 285 00:13:05,000 --> 00:13:07,330 случаи почти всяка година исторически. 286 00:13:07,330 --> 00:13:11,012 Това не е така, защото студентите мамят в CS50 повече, отколкото всеки друг клас, 287 00:13:11,012 --> 00:13:13,720 но тъй като по природа на работата, на факта, че е електронен, 288 00:13:13,720 --> 00:13:16,636 на факта, че ние го търсим, и факта, че са компютърни специалисти, 289 00:13:16,636 --> 00:13:20,570 Мога да кажа, ние сме за съжаление много добър в това откриване. 290 00:13:20,570 --> 00:13:22,710 >> И така, какво означава това в реални условия? 291 00:13:22,710 --> 00:13:24,820 Така че, на учебната програма, философия на курса 292 00:13:24,820 --> 00:13:28,090 наистина се свежда да бъдат разумни. 293 00:13:28,090 --> 00:13:31,684 Налице е тази линия между прави едно дело на собствения си 294 00:13:31,684 --> 00:13:34,100 и получаване на малко разумна помощ от приятел, 295 00:13:34,100 --> 00:13:38,020 и категорично прави тази работа за вашия приятел, или него или нея кода изпращане 296 00:13:38,020 --> 00:13:41,080 така че той или тя може просто да вземе или да го взема назаем от полето. 297 00:13:41,080 --> 00:13:43,580 И това пресича линията че изготвен в класа. 298 00:13:43,580 --> 00:13:45,410 >> Виж, учебната програма в крайна сметка за линиите 299 00:13:45,410 --> 00:13:48,209 че ние привличаме като разумен и неразумно поведение, 300 00:13:48,209 --> 00:13:50,000 но това наистина се свежда до същността 301 00:13:50,000 --> 00:13:53,980 Вашата работа е необходимо да се бъдете собствения си в края. 302 00:13:53,980 --> 00:13:56,230 Сега с това каза, има евристичен. 303 00:13:56,230 --> 00:13:58,980 Тъй като може да imagine-- от работното време и графика 304 00:13:58,980 --> 00:14:01,060 и видеоклипове, с които сме се показано по този начин far-- CS50 305 00:14:01,060 --> 00:14:04,530 наистина трябвало да бъде като съвместно и като кооперация и като социална 306 00:14:04,530 --> 00:14:06,450 възможно. 307 00:14:06,450 --> 00:14:08,570 Както сътрудничество, тъй като е строг. 308 00:14:08,570 --> 00:14:11,314 >> Но с това заяви, евристичните, както ще видите в учебната програма, 309 00:14:11,314 --> 00:14:12,980 е, че когато имате някакъв проблем. 310 00:14:12,980 --> 00:14:16,470 Имате някакъв бъг в кода си, че сте не може да реши, че е разумно за вас 311 00:14:16,470 --> 00:14:18,039 да се покаже вашия код на някой друг. 312 00:14:18,039 --> 00:14:21,080 Един приятел, дори и в класа, приятел който седи до вас в работно време, 313 00:14:21,080 --> 00:14:22,680 или член на персонала. 314 00:14:22,680 --> 00:14:25,810 Но те не могат да покажат своя код за вас. 315 00:14:25,810 --> 00:14:27,710 >> С други думи, една отговори на вашето въпрос- 316 00:14:27,710 --> 00:14:29,940 Имам нужда help-- не е о, тук е моят код. 317 00:14:29,940 --> 00:14:32,440 Обърнете внимание на това и извлече от него каквото искате. 318 00:14:32,440 --> 00:14:34,580 Сега, разбира се, има начин ясно да игра 319 00:14:34,580 --> 00:14:37,760 тази система, в която аз ще ви покажа моя код преди като въпрос. 320 00:14:37,760 --> 00:14:40,150 Вие ми покажете ми кода си преди като въпрос. 321 00:14:40,150 --> 00:14:45,870 Но виж учебната програма отново за фини подробности относно това къде тази линия е. 322 00:14:45,870 --> 00:14:50,606 >> Просто сега рисува картината и акции като прозрачно, колкото е възможно 323 00:14:50,606 --> 00:14:53,480 къде сме ние в през последните години, Това е броят на случаите Ad съвет 324 00:14:53,480 --> 00:14:56,260 че CS50 е имал над През последните седем години. 325 00:14:56,260 --> 00:14:58,717 В 14 от случаите това най-скорошно падане. 326 00:14:58,717 --> 00:15:01,300 По отношение на участващите студенти, това е 20 някои странни студенти 327 00:15:01,300 --> 00:15:02,490 през изминалата есен. 328 00:15:02,490 --> 00:15:05,670 Имаше пик от 33 студенти, преди няколко години. 329 00:15:05,670 --> 00:15:08,830 Много от тях са за съжаление вече не е тук, на територията на колежа. 330 00:15:08,830 --> 00:15:13,100 >> Учениците участват като процент от клас е исторически варира от 0% 331 00:15:13,100 --> 00:15:17,300 до 5,3%, което е само за да се каже, това е ежегодно предизвикателство. 332 00:15:17,300 --> 00:15:20,390 И към тази цел, това, което ние искаме да направим, е предам едно 333 00:15:20,390 --> 00:15:24,310 че ние dd-- просто FYI-- сравнявате най- на справедливост за тези студенти, които 334 00:15:24,310 --> 00:15:26,520 са следвайки линията съответно. 335 00:15:26,520 --> 00:15:29,620 Ние правим сравнение всички настоящи изявления срещу всички минали мисии 336 00:15:29,620 --> 00:15:30,840 от последните много години. 337 00:15:30,840 --> 00:15:33,620 >> Ние знаем също как да Гугъл около и да намерят код хранилища 338 00:15:33,620 --> 00:15:36,360 онлайн дискусионни форуми онлайн, сайтове за работа онлайн. 339 00:15:36,360 --> 00:15:41,580 Ако един ученик може да го намерите, ние със сигурност може да Определят го като толкова, колкото ние за съжаление направи. 340 00:15:41,580 --> 00:15:45,330 Така че това, което ще видите в учебната програма обаче, е тази клауза съжаление. 341 00:15:45,330 --> 00:15:47,500 Аз мога със сигурност оценявам, и всички ние трябва 342 00:15:47,500 --> 00:15:50,870 персонал е направил хода като това, или това се едно течение на времето, 343 00:15:50,870 --> 00:15:53,997 Със сигурност знам какво е, когато животът стане по начина, когато имате 344 00:15:53,997 --> 00:15:56,080 някои късно вечер deadline-- не само в този клас, 345 00:15:56,080 --> 00:15:58,660 но another-- когато сте напълно изтощени, стресирани, 346 00:15:58,660 --> 00:16:00,659 има прекалено много на други неща за вършене. 347 00:16:00,659 --> 00:16:03,660 Вие ще направи в някакъв момент в живот със сигурност е лошо, може би в края 348 00:16:03,660 --> 00:16:04,620 нощ решение. 349 00:16:04,620 --> 00:16:06,520 >> Така на учебната програма, има тази клауза, 350 00:16:06,520 --> 00:16:10,629 такива, че ако в рамките на 72 часа след вземане на някои лошо решение, което притежавате, за да го 351 00:16:10,629 --> 00:16:12,670 и да достигне до мен и една от главите на курса 352 00:16:12,670 --> 00:16:14,300 и ние ще имаме разговор. 353 00:16:14,300 --> 00:16:16,220 Ние ще се справят с неща, вътрешно в надежди 354 00:16:16,220 --> 00:16:18,770 той да се превърне по-скоро преподаване момент или житейски урок, 355 00:16:18,770 --> 00:16:22,120 а не нещо, с особено драстични последици 356 00:16:22,120 --> 00:16:24,570 както можете да видите на тези графики тук. 357 00:16:24,570 --> 00:16:26,540 >> Така че това е един много сериозен тон. 358 00:16:26,540 --> 00:16:29,960 Нека спрем за само няколко секунди, за да се прекъсне напрежението. 359 00:16:29,960 --> 00:16:34,442 >> [За възпроизвеждане на музика] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> DAVID J. Malan: Добре, И така, как беше, че за Segue? 362 00:17:20,250 --> 00:17:22,059 За днешните първични теми. 363 00:17:22,059 --> 00:17:23,859 Първият от които е абстракция. 364 00:17:23,859 --> 00:17:26,900 Друг от които ще бъде представяне на данни, което честно казано 365 00:17:26,900 --> 00:17:31,640 е наистина сух начин да се каже как можем да отида за разрешаване на проблеми и мислене 366 00:17:31,640 --> 00:17:33,250 за решаване на проблеми? 367 00:17:33,250 --> 00:17:37,285 Значи вие сте виждали в Scratch и сте виждал може би вече в pset1 с C 368 00:17:37,285 --> 00:17:39,930 че не само може да се използва функции, като ФОРМАТ, 369 00:17:39,930 --> 00:17:42,770 че други хора в последните години пише за вас. 370 00:17:42,770 --> 00:17:45,340 Можете също така да пишете свои собствени функции. 371 00:17:45,340 --> 00:17:48,440 >> И въпреки че не може да има направи това в C, и честно казано в pset1 372 00:17:48,440 --> 00:17:51,866 вие наистина не трябва да напишете вашето собствена функция, защото problem-- 373 00:17:51,866 --> 00:17:53,990 а може би и най-трудна първо glance-- ще видите 374 00:17:53,990 --> 00:17:57,910 в крайна сметка може да бъде решен с Не всички, че много редове код. 375 00:17:57,910 --> 00:18:01,140 Но с това каза, по отношение на писане на вашата собствена функция, 376 00:18:01,140 --> 00:18:03,570 осъзнават, че C не дава вие тази възможност. 377 00:18:03,570 --> 00:18:06,940 >> Отивам да отидат в днешния изходния код, който е на разположение вече онлайн, 378 00:18:06,940 --> 00:18:10,900 и аз отивам да вървим напред и отворен създаване на програма, наречена функция 0.C, 379 00:18:10,900 --> 00:18:14,620 и в зависимост нула ще видим няколко неща. 380 00:18:14,620 --> 00:18:19,160 В първите линии 18 чрез 23 е моята основна функция. 381 00:18:19,160 --> 00:18:22,414 И сега, че ние започваме да се чете код, който ние не пишеш в движение, 382 00:18:22,414 --> 00:18:25,080 но вместо това съм написал по-рано или че сте в проблем зададете 383 00:18:25,080 --> 00:18:27,910 може да получите като е написано предварително. 384 00:18:27,910 --> 00:18:30,040 Един добър начин да започнете четене код на някой друг 385 00:18:30,040 --> 00:18:31,400 е основната функция изглежда. 386 00:18:31,400 --> 00:18:34,420 Разбера, където този запис точка е за изпълнението на програмата, 387 00:18:34,420 --> 00:18:36,580 и след това да го следват логично от там. 388 00:18:36,580 --> 00:18:40,190 >> Щом тази схема очевидно отпечатъци си име, последвано от двоеточие. 389 00:18:40,190 --> 00:18:42,490 Ние след това използвайте GetString от библиотеката CS50 390 00:18:42,490 --> 00:18:46,050 за да получите низ, или една дума или фраза от потребителя на клавиатурата. 391 00:18:46,050 --> 00:18:48,390 И тогава там е това нещо тук-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Сега PrintName не е функция, която идва с C. 393 00:18:51,420 --> 00:18:52,970 Това не е в стандартен io.h. 394 00:18:52,970 --> 00:18:55,570 Това не е в CS50.h. 395 00:18:55,570 --> 00:18:57,880 Това е по-скоро в един и същи файл. 396 00:18:57,880 --> 00:19:01,000 Забележете, ако превъртете надолу а bit-- линии 25 до 27-- 397 00:19:01,000 --> 00:19:05,330 това е просто едно красиво начин на коментиране вашия код с помощта на звездите и наклонените черти. 398 00:19:05,330 --> 00:19:07,320 Това е мулти-лайн коментар, а това е просто 399 00:19:07,320 --> 00:19:10,570 описание ми в синьо на какво прави тази функция. 400 00:19:10,570 --> 00:19:14,530 >> Защото в редове от 28 до 31, Писал съм супер проста функция 401 00:19:14,530 --> 00:19:16,280 чието име е PrintName. 402 00:19:16,280 --> 00:19:19,560 Това отнема колко аргументи бихте казали? 403 00:19:19,560 --> 00:19:25,120 Така че един argument-- защото има един аргумент, изброени в скобите. 404 00:19:25,120 --> 00:19:27,000 В зависимост от типа на които е String. 405 00:19:27,000 --> 00:19:30,240 Което ще рече, PrintName е като тази черна кутия 406 00:19:30,240 --> 00:19:32,910 или функция, която се като вход низ. 407 00:19:32,910 --> 00:19:35,730 >> А името на тази String удобно ще бъде Name. 408 00:19:35,730 --> 00:19:37,840 Не е S, а не N, но име. 409 00:19:37,840 --> 00:19:41,090 Е, какво значи PrintName направя? 410 00:19:41,090 --> 00:19:42,210 Хубаво е проста. 411 00:19:42,210 --> 00:19:45,390 Точно както една линия на код за на ФОРМАТ, но очевидно го 412 00:19:45,390 --> 00:19:47,950 отпечатва "Hello", така и така. 413 00:19:47,950 --> 00:19:50,070 Когато така и така идва от аргумента. 414 00:19:50,070 --> 00:19:52,300 >> Сега това не е огромен иновациите тук. 415 00:19:52,300 --> 00:19:56,710 Наистина, аз съм взел програма, която би могла са написани с един ред код 416 00:19:56,710 --> 00:20:00,190 от въвеждането на този тук, и го променя на нещо 417 00:20:00,190 --> 00:20:04,920 , който включва някои шест или седем, или така реда код чак тук. 418 00:20:04,920 --> 00:20:08,190 >> Но това е упражняването на принцип, известен като абстракция. 419 00:20:08,190 --> 00:20:12,550 Вид на капсулиране вътрешността на нова функция, която има име, и по-добре 420 00:20:12,550 --> 00:20:14,590 Все още това име буквално казва това, което прави. 421 00:20:14,590 --> 00:20:16,880 Искам да кажа, че не е printf-- особено описателно. 422 00:20:16,880 --> 00:20:18,932 Ако искате да създадете пъзел парче, или ако 423 00:20:18,932 --> 00:20:21,140 искате да създадете функция който отпечатва нечие име, 424 00:20:21,140 --> 00:20:23,230 красотата на този начин е, че всъщност мога да 425 00:20:23,230 --> 00:20:27,170 даде тази функция име , който описва какво прави той. 426 00:20:27,170 --> 00:20:29,844 >> Сега е необходимо в един вход, че Аз съм произволно нарече, 427 00:20:29,844 --> 00:20:32,760 но това също е чудесно описателен вместо да бъде малко по- 428 00:20:32,760 --> 00:20:36,140 родово като S. и нищожен, за сега, просто означава, 429 00:20:36,140 --> 00:20:38,330 че тази функция не ми върне нищо. 430 00:20:38,330 --> 00:20:41,127 Това не е като GetString че буквално ми подава обратно низ 431 00:20:41,127 --> 00:20:43,960 както направихме с листчетата със съучениците си миналата седмица, 432 00:20:43,960 --> 00:20:45,990 а просто има страничен ефект. 433 00:20:45,990 --> 00:20:48,080 Той отпечатва нещо на екрана. 434 00:20:48,080 --> 00:20:53,880 >> Така че в края на деня, ако съм правят функция-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 ще видим, че тя пита за името ми. 436 00:20:55,450 --> 00:20:58,150 I тип Давид и го типове името ми. 437 00:20:58,150 --> 00:21:01,080 Ако аз го направя отново с Роб, тя ще каже: "Здравейте, Роб." 438 00:21:01,080 --> 00:21:04,280 Така че една проста идея, но може би екстраполира от този психически 439 00:21:04,280 --> 00:21:06,750 че като вашите програми получават малко по-сложно, 440 00:21:06,750 --> 00:21:10,290 и искате да напишете парче код и призив, че code-- Invoke 441 00:21:10,290 --> 00:21:13,270 че code-- от някои описателен име като PrintName, 442 00:21:13,270 --> 00:21:15,600 C прави позволят ни тази способност. 443 00:21:15,600 --> 00:21:17,660 >> Ето още един прост пример. 444 00:21:17,660 --> 00:21:22,940 Например, ако аз отворим файл от днес се нарича return.c, 445 00:21:22,940 --> 00:21:24,270 забележите това, което съм направил тук. 446 00:21:24,270 --> 00:21:26,330 Повечето от тази основна функция е ФОРМАТ. 447 00:21:26,330 --> 00:21:30,360 За първи път произволно инициализира променлива, наречена X до номер 2. 448 00:21:30,360 --> 00:21:34,110 Тогава аз разпечатате "х сега е % I "преминаване на стойността на х. 449 00:21:34,110 --> 00:21:35,500 Така че аз просто казвам какво е то. 450 00:21:35,500 --> 00:21:37,208 >> Сега съм просто смело твърдейки, с ФОРМАТ. 451 00:21:37,208 --> 00:21:42,050 Аз съм джуркате тази стойност х, и аз съм това, като се обадите функция 452 00:21:42,050 --> 00:21:45,590 наречена куб преминаване в х като аргумент, 453 00:21:45,590 --> 00:21:49,300 и след това го запишете на изхода в самата променлива, х. 454 00:21:49,300 --> 00:21:51,340 Така че аз съм докара пред стойността на х. 455 00:21:51,340 --> 00:21:53,380 Аз съм по-висш от стойност на X с каквото 456 00:21:53,380 --> 00:21:56,510 в резултат на обадите Кубът функция е. 457 00:21:56,510 --> 00:21:59,530 И тогава аз просто разпечатате някои пухкави неща тук казвайки това, което направих. 458 00:21:59,530 --> 00:22:01,600 >> Така че това, което след това е куб? 459 00:22:01,600 --> 00:22:03,510 Забележете, това, което е фундаментално различно тук. 460 00:22:03,510 --> 00:22:05,540 Дадох функцията име, както и преди. 461 00:22:05,540 --> 00:22:08,270 Аз определено име за аргумент. 462 00:22:08,270 --> 00:22:11,650 Този път тя се нарича п вместо име, но можех да го наричаме нещо, което искам. 463 00:22:11,650 --> 00:22:12,650 Но това е различно. 464 00:22:12,650 --> 00:22:14,080 Това нещо в ляво. 465 00:22:14,080 --> 00:22:16,290 Преди това е това, което ключовата дума? 466 00:22:16,290 --> 00:22:16,870 Boys. 467 00:22:16,870 --> 00:22:18,580 Сега е очевидно вътр. 468 00:22:18,580 --> 00:22:20,630 >> Така че това, което е може би най отнеме? 469 00:22:20,630 --> 00:22:24,090 Като има предвид, невалидни означава вид нищото, и че е било така. 470 00:22:24,090 --> 00:22:25,970 PrintName връща нищо. 471 00:22:25,970 --> 00:22:27,942 Тя направи нещо, но това не ме върне 472 00:22:27,942 --> 00:22:30,650 нещо, което бих могъл да постави на лявата страна на знака за равенство 473 00:22:30,650 --> 00:22:32,460 като съм направил тук, на ред 22. 474 00:22:32,460 --> 00:22:36,780 >> Така че, ако кажа в по линия 30, какво е това вероятно предполага 475 00:22:36,780 --> 00:22:38,610 за това, което куб прави за мен? 476 00:22:38,610 --> 00:22:41,110 Да? 477 00:22:41,110 --> 00:22:42,310 Тя връща цяло число. 478 00:22:42,310 --> 00:22:44,590 Така че това ми подава обратно, за Например, парче хартия 479 00:22:44,590 --> 00:22:46,580 , на която е написан отговора. 480 00:22:46,580 --> 00:22:50,130 2 кубчета или три кубчета или 4 cubed-- каквото минах в, 481 00:22:50,130 --> 00:22:51,540 и как съм приложи това? 482 00:22:51,540 --> 00:22:54,810 Ами, просто п пъти п пъти п как мога да Cube стойност. 483 00:22:54,810 --> 00:22:57,110 Така че отново, супер проста идея, но демонстративна 484 00:22:57,110 --> 00:23:00,100 сега как можем да напишем функции че всъщност ни беше с гръб 485 00:23:00,100 --> 00:23:02,380 ценности, които могат да бъдат от интерес. 486 00:23:02,380 --> 00:23:05,740 >> Нека разгледаме един последен пример тук се нарича една функция. 487 00:23:05,740 --> 00:23:08,530 В този пример, той започва за да получите по-наложителна. 488 00:23:08,530 --> 00:23:12,400 Така че в една функция, този program-- известие в крайна сметка 489 00:23:12,400 --> 00:23:14,920 призовава функция, наречена GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt не е функция в библиотеката CS50, 491 00:23:17,800 --> 00:23:20,400 но ние решихме бихме искали да съществуват. 492 00:23:20,400 --> 00:23:24,550 >> Така че, ако ние превъртете надолу, по-късно във файла, забележите как отидох за прилагане 493 00:23:24,550 --> 00:23:26,560 получите положителен INT, и аз Казват, че е по-убедителен 494 00:23:26,560 --> 00:23:28,992 защото това е един приличен брой редове код. 495 00:23:28,992 --> 00:23:30,700 Това не е просто една глупава малка програма играчка. 496 00:23:30,700 --> 00:23:33,870 Това е всъщност имам някои проверка за грешки и прави нещо по-полезно. 497 00:23:33,870 --> 00:23:38,470 >> Така че, ако не сте виждали помагалото видеоклипове, които сме вградени в pset1, 498 00:23:38,470 --> 00:23:42,350 Знам, че това е вид цикъл в C, подобно на дух 499 00:23:42,350 --> 00:23:44,270 за вида на неща Scratch да направя. 500 00:23:44,270 --> 00:23:46,320 И не казва да направите това. 501 00:23:46,320 --> 00:23:47,500 Печат това. 502 00:23:47,500 --> 00:23:51,860 След това отидете напред и да получите n-- получите INT и да го съхранява в N, 503 00:23:51,860 --> 00:23:55,760 и продължавате да правите това отново и отново, и отново доколкото п е по-малко от едно. 504 00:23:55,760 --> 00:23:58,720 >> Така че п ще бъде по-малко от една само ако човек не е оказал съдействие. 505 00:23:58,720 --> 00:24:01,980 Ако той или тя пише в 0 или -1 или -50, 506 00:24:01,980 --> 00:24:04,790 този цикъл ще се запази Изпълняващият отново и отново. 507 00:24:04,790 --> 00:24:07,549 И в крайна сметка забележите, аз просто върне стойност. 508 00:24:07,549 --> 00:24:09,590 Така че сега ние имаме функция че щеше да е хубаво 509 00:24:09,590 --> 00:24:14,040 ако CS50 ще въведе в CS50.h и CS50.c за вас, 510 00:24:14,040 --> 00:24:16,520 но тук можем да се приложи това себе си. 511 00:24:16,520 --> 00:24:19,230 >> Но две забележки относно някои ключови подробности. 512 00:24:19,230 --> 00:24:24,390 Едно-- защо Декларирам, вътр N, мислиш ли, че, по линия 29 513 00:24:24,390 --> 00:24:27,139 вместо просто да правиш този тук, който е 514 00:24:27,139 --> 00:24:28,930 по-последователно с това, което направихме миналата седмица? 515 00:24:28,930 --> 00:24:29,430 Да? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Една добра мисъл. 518 00:24:35,110 --> 00:24:37,080 Така че, ако бяхме да го сложи тук, това е като че ли 519 00:24:37,080 --> 00:24:39,110 да го декларира отново и отново. 520 00:24:39,110 --> 00:24:42,000 Това само по себе си е не са проблематични, сами по себе си, 521 00:24:42,000 --> 00:24:43,940 защото ние само трябва стойността веднъж и след това 522 00:24:43,940 --> 00:24:45,330 ние отиваме, за да получите нова или иначе. 523 00:24:45,330 --> 00:24:45,940 Но една добра мисъл. 524 00:24:45,940 --> 00:24:46,440 Да? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Close. 527 00:24:53,330 --> 00:24:59,030 Така че, тъй като съм обявен за п Онлайн 29 извън контура, 528 00:24:59,030 --> 00:25:01,390 това е достъпно през цялата тази функция. 529 00:25:01,390 --> 00:25:05,400 Не другите функции, защото п е все още вътре в тези къдрава 530 00:25:05,400 --> 00:25:06,470 скоби тук. 531 00:25:06,470 --> 00:25:07,940 Че-- сигурен. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Точно така. 534 00:25:12,940 --> 00:25:14,356 Така че това е още по-важно. 535 00:25:14,356 --> 00:25:18,600 Ако вместо обявена п точно тук на ред 32, 536 00:25:18,600 --> 00:25:22,340 това е проблематично, защото предполагам къде другаде трябва да го отворите? 537 00:25:22,340 --> 00:25:25,620 На линия 34, както и на просто правило на палеца е 538 00:25:25,620 --> 00:25:30,060 , които можете да използвате променлива само вътрешната страна на най-новите фигурни скоби 539 00:25:30,060 --> 00:25:31,420 в която го декларира. 540 00:25:31,420 --> 00:25:35,230 >> За съжаление, линия 34 е една линия, твърде късно, 541 00:25:35,230 --> 00:25:38,560 защото аз вече съм затворен на фигурна скоба на ред 33 542 00:25:38,560 --> 00:25:41,220 , която съответства на фигурна скоба на ред 30. 543 00:25:41,220 --> 00:25:44,180 И така, това е начин да се каже че тази променлива INT е с обхват, 544 00:25:44,180 --> 00:25:46,970 така да се каже, само вътре на тези фигурни скоби. 545 00:25:46,970 --> 00:25:48,910 Тя просто не съществува извън тях. 546 00:25:48,910 --> 00:25:51,580 >> Така че наистина, ако направя това грешна, нека ме спаси кода 547 00:25:51,580 --> 00:25:53,530 тъй като тя е-- неправилно написани. 548 00:25:53,530 --> 00:25:57,990 Нека да вървим напред и да се направи функция-1, и notice-- грешка. 549 00:25:57,990 --> 00:26:03,502 Използване на недекларирания идентификатор п по линия 35, което е точно тук. 550 00:26:03,502 --> 00:26:05,210 И ако ние се придвижите нагоре Освен това, още една. 551 00:26:05,210 --> 00:26:08,750 Използване на недекларирания идентификатор N по линия 34. 552 00:26:08,750 --> 00:26:11,200 >> Така компилатора, звъня, се забележи, че тя просто 553 00:26:11,200 --> 00:26:13,720 не съществува макар ясно, че е там визуално. 554 00:26:13,720 --> 00:26:16,090 Така че просто корекция е обявяването му там. 555 00:26:16,090 --> 00:26:18,790 >> Сега нека да преминете към в горната част на файла. 556 00:26:18,790 --> 00:26:21,080 Какво скача към теб като е малко по-различно 557 00:26:21,080 --> 00:26:23,070 от нещата, които погледна миналата седмица? 558 00:26:23,070 --> 00:26:26,990 Не само, че имам име, не само ги вършат Имам някакъв остър включва до върха, 559 00:26:26,990 --> 00:26:29,340 Имам нещо, което аз съм наричайки прототип. 560 00:26:29,340 --> 00:26:36,100 Сега, изглежда ужасно, подобен на това, което току-що видяхме преди малко по линия 27. 561 00:26:36,100 --> 00:26:39,230 >> Така че нека да се направи извод от различен съобщение за грешка, защо съм направил това. 562 00:26:39,230 --> 00:26:42,050 Нека да вървим напред и да изтриете тези линии там. 563 00:26:42,050 --> 00:26:44,240 И така, ние не знаем нищо за прототип. 564 00:26:44,240 --> 00:26:45,430 Римейк този файл. 565 00:26:45,430 --> 00:26:46,890 Направете една функция. 566 00:26:46,890 --> 00:26:48,090 И сега, по дяволите, четири грешки. 567 00:26:48,090 --> 00:26:50,220 Нека превъртете до първия милион. 568 00:26:50,220 --> 00:26:55,070 >> Скритият декларация на функция получите положителен INT е невалиден в C99. 569 00:26:55,070 --> 00:26:57,780 C99 просто означава 1999 версия на езика 570 00:26:57,780 --> 00:26:59,710 C, което е това, което ние наистина използвате. 571 00:26:59,710 --> 00:27:01,050 И така, какво означава това? 572 00:27:01,050 --> 00:27:05,250 Е C-- и по-специално C compilers-- са доста тъпи програми. 573 00:27:05,250 --> 00:27:07,420 Те знаят само това, което сте им казах, и това е 574 00:27:07,420 --> 00:27:08,960 всъщност тематична от миналата седмица. 575 00:27:08,960 --> 00:27:12,910 >> Проблемът е, че ако отида за прилагане на име тук, 576 00:27:12,910 --> 00:27:17,640 и аз призовавам функция, наречена GetPositiveInt тук по линия 20, 577 00:27:17,640 --> 00:27:22,520 тази функция технически не прави съществува, докато компилаторът вижда ред 27. 578 00:27:22,520 --> 00:27:25,450 За съжаление, компилаторът е правене на нещата отгоре, надолу, наляво, надясно, 579 00:27:25,450 --> 00:27:29,580 така, защото не е видял изпълнение на GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 но го вижда опитваш да го използвате до тук, 581 00:27:32,400 --> 00:27:35,810 това е просто ще bail-- крещиш ти с една грешка message-- може би 582 00:27:35,810 --> 00:27:38,440 загадъчен, а не действително компилира файла. 583 00:27:38,440 --> 00:27:41,940 >> Така че т.нар прототип нагоре тук е наистина излишно. 584 00:27:41,940 --> 00:27:47,870 Буквално, слязох тук и аз копирани и поставили това, и аз го слагам тук. 585 00:27:47,870 --> 00:27:51,020 Void би било по-правилно, така че ние ще буквално го копирайте и поставете този път. 586 00:27:51,020 --> 00:27:52,854 Аз буквално копирани и го поставили. 587 00:27:52,854 --> 00:27:54,270 Наистина, точно както като хляб троха. 588 00:27:54,270 --> 00:27:56,260 >> Малко ключ към компилатора. 589 00:27:56,260 --> 00:27:58,860 Аз не знам какво прави това все още, но аз обещавам да ви 590 00:27:58,860 --> 00:28:00,260 че в крайна сметка ще съществуват. 591 00:28:00,260 --> 00:28:04,010 И това е защо това line-- в Онлайн 16-- завършва с точка и запетая. 592 00:28:04,010 --> 00:28:05,486 Това е излишно, като дизайн. 593 00:28:05,486 --> 00:28:05,986 Да? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Ако не сте се свърже вашата библиотека да по-- О, добър въпрос. 596 00:28:14,360 --> 00:28:17,350 Sharp включва заглавния файл включвания. 597 00:28:17,350 --> 00:28:20,040 Необходимо е да се е-- трябва почти винаги да бъде на върха 598 00:28:20,040 --> 00:28:23,270 на файла за similar-- за точно по същата причина, да. 599 00:28:23,270 --> 00:28:26,430 Защото в стандарт io.h е буквално линия 600 00:28:26,430 --> 00:28:30,560 по този начин, но с думата ФОРМАТ, и със своите аргументи и неговия вид замяна. 601 00:28:30,560 --> 00:28:33,310 И така, като направите остър включва до тук, това, което вие сте буквално прави 602 00:28:33,310 --> 00:28:36,380 е копирането и поставянето на съдържанието на някой друг е написал до върха. 603 00:28:36,380 --> 00:28:39,660 По този начин cluing кода си в до факт е, че не съществуват тези функции. 604 00:28:39,660 --> 00:28:40,160 Да? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Абсолютно. 607 00:28:48,260 --> 00:28:51,690 Така че е много умен и правилен решение би било, знаеш ли какво? 608 00:28:51,690 --> 00:28:53,760 Аз не знам какво е прототип е, но знам, 609 00:28:53,760 --> 00:28:56,390 ако аз разбирам, че C е само тъп и преосмисля горе до долу. 610 00:28:56,390 --> 00:28:57,820 Ами нека да го даде това, което иска. 611 00:28:57,820 --> 00:29:01,650 Да се ​​намали този код, да го поставите до върха, а сега настоява основната по-долу. 612 00:29:01,650 --> 00:29:03,470 Това също би могла да разреши проблема. 613 00:29:03,470 --> 00:29:07,409 >> Но бихте могли много лесно да излезе с сценарий, при който е необходимо да се обадите B, 614 00:29:07,409 --> 00:29:10,075 а може би и B призовава обратно към А. Това е нещо, което се нарича рекурсия, 615 00:29:10,075 --> 00:29:11,370 и ние ще се върнем към това. 616 00:29:11,370 --> 00:29:13,911 И може или не може да бъде добър нещо, но определено може да се 617 00:29:13,911 --> 00:29:15,110 прекъсне този разтвор. 618 00:29:15,110 --> 00:29:17,690 >> И нещо повече, аз ще твърдят, стилистично, 619 00:29:17,690 --> 00:29:20,760 особено когато вашите програми стане това дълго и толкова дълго, 620 00:29:20,760 --> 00:29:23,064 това е просто супер удобно да постави основен в горната 621 00:29:23,064 --> 00:29:25,730 защото това е нещо, което най- програмисти, които ще се грижат за. 622 00:29:25,730 --> 00:29:28,150 И така, това е малко по-чисти, може би, за да го направим по начина, по който 623 00:29:28,150 --> 00:29:30,380 Аз първоначално го е направил с прототип дори 624 00:29:30,380 --> 00:29:33,396 въпреки че изглежда малко излишни на пръв поглед. 625 00:29:33,396 --> 00:29:33,895 Да? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 За съжаление, мога да ви го кажа по-силен? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Ако включите местоположенията на изпълнение и прототип? 630 00:29:49,580 --> 00:29:51,270 Така че това е добър въпрос. 631 00:29:51,270 --> 00:29:53,780 Ако отново декларира това надолу тук, нека да видим какво ще стане. 632 00:29:53,780 --> 00:29:55,530 Така че, ако го сложа надолу тук, което казваш. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 О, съжалявам. 635 00:29:58,360 --> 00:29:58,859 Louder? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Дори и по-силно. 638 00:30:04,011 --> 00:30:04,760 О, добър въпрос. 639 00:30:04,760 --> 00:30:05,860 Бихте го обезсили функцията? 640 00:30:05,860 --> 00:30:08,901 Знаеш ли, след всички тези години, аз никога не сложи прототип след това. 641 00:30:08,901 --> 00:30:13,810 Така че нека да направим направи функция-1 след като направим това. 642 00:30:13,810 --> 00:30:15,279 >> [Мърмори] 643 00:30:15,279 --> 00:30:16,320 DAVID J. Malan: О, чакай. 644 00:30:16,320 --> 00:30:17,944 Ние все още трябва да сложите всичко отгоре. 645 00:30:17,944 --> 00:30:21,400 Така че нека да направим това тук, ако съм разбиране на въпроса ви правилно. 646 00:30:21,400 --> 00:30:24,700 Слагам всичко, включително и прототипът над основната, 647 00:30:24,700 --> 00:30:28,180 но аз съм пускането на прототипа долу изпълнението. 648 00:30:28,180 --> 00:30:33,190 >> Така че, ако се направи една, аз съм се грубо error-- неизползван променлива п. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 О, има. 651 00:30:37,860 --> 00:30:38,360 Благодаря ви. 652 00:30:38,360 --> 00:30:39,430 Да видим, ще се отървем от това. 653 00:30:39,430 --> 00:30:41,304 Това е друг бъг, така че нека да се игнорира това. 654 00:30:41,304 --> 00:30:43,910 Нека наистина бързо римейк това. 655 00:30:43,910 --> 00:30:48,100 >> ОК, така че не аргумент данни използва от формат String 656 00:30:48,100 --> 00:30:52,310 n-- О, това е така, защото Смених с тези тук. 657 00:30:52,310 --> 00:30:55,885 Добре, ние знаем какво отговора ще да-- Добре, ето ни и нас. 658 00:30:55,885 --> 00:31:00,560 Ах, благодаря за положителното. 659 00:31:00,560 --> 00:31:03,430 Добре, аз ще се оправя този код after-- игнорира този бъг 660 00:31:03,430 --> 00:31:08,300 тъй като това беше-- тя работи е отговорът. 661 00:31:08,300 --> 00:31:11,560 >> Така че няма да презапише това, което току-що сте направили. 662 00:31:11,560 --> 00:31:14,800 Подозирам, че компилаторът е написана по такъв начин, 663 00:31:14,800 --> 00:31:18,420 че тя се игнорира си прототип защото тялото, така да се каже, 664 00:31:18,420 --> 00:31:20,922 на функцията вече са изпълнени по-нагоре. 665 00:31:20,922 --> 00:31:23,380 Аз ще трябва да всъщност се консултира ръководството на компилатора 666 00:31:23,380 --> 00:31:26,171 да се разбере дали има някаква друга Отражение, но на пръв поглед 667 00:31:26,171 --> 00:31:29,290 просто като се опитва и да експериментират, изглежда има никакво влияние. 668 00:31:29,290 --> 00:31:30,730 Добър въпрос. 669 00:31:30,730 --> 00:31:33,660 >> Така че нека да продължат напред сега, движещи далеч от нежелани реакции, които 670 00:31:33,660 --> 00:31:36,660 са функции, които правят нещо подобно визуално на екрана с ФОРМАТ, 671 00:31:36,660 --> 00:31:38,090 но не връщат стойност. 672 00:31:38,090 --> 00:31:41,550 И функции, които имат възвръщаемост ценности като току-що видяхме няколко от. 673 00:31:41,550 --> 00:31:45,350 Вече видяхме това понятие на обхват, и ще видим това отново и отново. 674 00:31:45,350 --> 00:31:47,210 Но за сега, отново, използвате правилото на палеца 675 00:31:47,210 --> 00:31:51,410 че променлива може да се използва само от вътрешната страна на най-наскоро отвори 676 00:31:51,410 --> 00:31:54,350 и затворени фигурни скоби, тъй като ние видях в този конкретен пример. 677 00:31:54,350 --> 00:31:56,910 >> И както ти посочи, има ability-- 678 00:31:56,910 --> 00:32:00,040 бихте могли да решим някои от тези проблеми чрез въвеждане на променлива в световен мащаб 679 00:32:00,040 --> 00:32:01,290 на самия връх на даден файл. 680 00:32:01,290 --> 00:32:03,630 Но в почти всички случаи, ние ще се мръщят на това, 681 00:32:03,630 --> 00:32:06,170 и наистина не дори да отидете в това решение за сега. 682 00:32:06,170 --> 00:32:09,890 Така че за сега, на храна за вкъщи е, че променливи имат тази идея за обхват. 683 00:32:09,890 --> 00:32:13,430 >> Но сега нека погледнем в друга сух начин всъщност търсите 684 00:32:13,430 --> 00:32:15,810 при някои доста интересно детайли за изпълнение. 685 00:32:15,810 --> 00:32:17,810 Как бихме могли да представляват информация. 686 00:32:17,810 --> 00:32:20,370 И ние вече разглеждали този в първата седмица на класа. 687 00:32:20,370 --> 00:32:23,320 С поглед към изпълними файлове, и да си припомним знак. 688 00:32:23,320 --> 00:32:28,310 >> Но спомням си от миналата седмица, че C е различни типове данни и букети повече, 689 00:32:28,310 --> 00:32:30,600 Но най-полезни тези за сега може да са тези. 690 00:32:30,600 --> 00:32:36,030 A Чар, или символ, което се случва, е един байт, или осем бита общо. 691 00:32:36,030 --> 00:32:40,060 И това е да се каже, че размерът на знак е само един байт. 692 00:32:40,060 --> 00:32:45,370 A байт е осем бита, така че това означава, че ние може да представлява колко символи. 693 00:32:45,370 --> 00:32:47,320 Колко писма или символи на клавиатурата 694 00:32:47,320 --> 00:32:49,210 ако имаме един байт или осем бита. 695 00:32:49,210 --> 00:32:51,546 Помислете обратно към нулево седмица. 696 00:32:51,546 --> 00:32:53,420 Ако имате осем бита, колко общите ценности 697 00:32:53,420 --> 00:32:55,503 може да ви представляват, с модели на нули и единици? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 Едно-- повече от това. 700 00:33:00,260 --> 00:33:03,490 Така 256 общо, ако започне броенето от нула. 701 00:33:03,490 --> 00:33:07,120 Така че, ако имате осем bits-- така че, ако ние Трябваше ни двоични крушки тук отново, 702 00:33:07,120 --> 00:33:12,180 ние може да се превърне тези крушки на и изключване във всяка от 256 уникални модели. 703 00:33:12,180 --> 00:33:13,640 >> Сега това е малко проблематично. 704 00:33:13,640 --> 00:33:16,857 Не толкова за английски и романски езици, но със сигурност 705 00:33:16,857 --> 00:33:19,190 когато се въведе, за Например, азиатски езици, които 706 00:33:19,190 --> 00:33:22,580 има много повече символи, отколкото като 26 букви от азбуката. 707 00:33:22,580 --> 00:33:24,390 Ние всъщност може да се наложи повече от един байт. 708 00:33:24,390 --> 00:33:28,240 И за щастие в последните години обществото 709 00:33:28,240 --> 00:33:31,040 приети други стандарти, които използват повече от един байт с едно зареждане. 710 00:33:31,040 --> 00:33:34,210 >> Но за сега в C, по подразбиране е само един байт или осем бита. 711 00:33:34,210 --> 00:33:38,195 Едно цяло число, междувременно, е четири байта, иначе известни като 32 бита. 712 00:33:38,195 --> 00:33:41,320 Което означава, че това, което е възможно най-голям брой можем да представим с вътр 713 00:33:41,320 --> 00:33:41,820 очевидно? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 С един милиард. 716 00:33:45,050 --> 00:33:46,760 Така че това е четири милиарда или да се даде. 717 00:33:46,760 --> 00:33:49,840 2 към 32th власт, ако ние не поемат отрицателни числа 718 00:33:49,840 --> 00:33:52,530 и просто да използвате всички положителни номера, това е четири милиарда 719 00:33:52,530 --> 00:33:53,730 или да се даде възможности. 720 00:33:53,730 --> 00:33:57,890 A плувка, междувременно, е различен тип на тип данни в C. Това е още един номер, 721 00:33:57,890 --> 00:33:58,990 но това е реално число. 722 00:33:58,990 --> 00:34:00,660 Нещо, с десетична запетая. 723 00:34:00,660 --> 00:34:03,000 И се оказва, че C също така използва четири байта 724 00:34:03,000 --> 00:34:05,340 да представляват числа с плаваща запетая. 725 00:34:05,340 --> 00:34:09,420 >> За съжаление колко плаващ точкови стойности има в света? 726 00:34:09,420 --> 00:34:11,582 Колко реални числа са там? 727 00:34:11,582 --> 00:34:13,540 Има един безкраен номер, и за този въпрос 728 00:34:13,540 --> 00:34:15,164 има безкраен брой числа. 729 00:34:15,164 --> 00:34:18,070 Така че ние вече сме вид се копае дупка тук. 730 00:34:18,070 --> 00:34:21,780 Чрез която очевидно в computers-- в най-програми, написани на C на them-- 731 00:34:21,780 --> 00:34:24,110 могат само да разчитат толкова висока, колкото четири милиарда или да се даде, 732 00:34:24,110 --> 00:34:26,260 и стойности с плаваща запетая може само привидно 733 00:34:26,260 --> 00:34:28,330 има някои ограничен размер на точност. 734 00:34:28,330 --> 00:34:30,810 Само толкова много цифри след им десетична запетая. 735 00:34:30,810 --> 00:34:32,822 >> Защото, разбира се, ако имате само 32 бита, 736 00:34:32,822 --> 00:34:36,030 Аз не знам как ще да отида за представляваща недвижими numbers-- вероятно 737 00:34:36,030 --> 00:34:37,409 с различни видове модели. 738 00:34:37,409 --> 00:34:40,030 Но има със сигурност един краен брой на такива модели, 739 00:34:40,030 --> 00:34:41,830 така че тук, също, това е проблематично. 740 00:34:41,830 --> 00:34:43,710 >> Сега можем да се избегне проблемът съвсем леко. 741 00:34:43,710 --> 00:34:45,710 Ако не се използва поплавък, бихте могли да използвате двойно 742 00:34:45,710 --> 00:34:50,230 в C, която ви дава осем байта, които е начин повече възможни модели на нули 743 00:34:50,230 --> 00:34:50,730 и единици. 744 00:34:50,730 --> 00:34:55,199 Но тя все още е ограничен, което се случва да бъде проблематично, ако пишете софтуер 745 00:34:55,199 --> 00:34:57,670 за графика или за фантазия математическите формули. 746 00:34:57,670 --> 00:35:00,410 Така че може би наистина искате да брои до по-голямо от това. 747 00:35:00,410 --> 00:35:05,640 А дълго long-- глупаво named-- е осем байта, или 64 бита, 748 00:35:05,640 --> 00:35:10,260 и това е два пъти по-дълго като междинно съединение, и това е за дълго цяло число. 749 00:35:10,260 --> 00:35:15,655 >> Fun fact-- ако пад е четири байта, колко дълго е дълго в C обикновено? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Също четири байта, но дълго време е осем байта, 752 00:35:21,560 --> 00:35:23,050 и това е по исторически причини. 753 00:35:23,050 --> 00:35:26,450 >> Но храна за вкъщи сега е само, че има данни 754 00:35:26,450 --> 00:35:29,625 които трябва да бъдат представени в computer-- това е физическо устройство с електричество, 755 00:35:29,625 --> 00:35:32,190 това е обикновено шофиране тези нули и ones-- 756 00:35:32,190 --> 00:35:34,320 с ограничени количества прецизност. 757 00:35:34,320 --> 00:35:35,620 Така че, какъв е проблемът тогава? 758 00:35:35,620 --> 00:35:37,480 >> Ами там е проблем на число преливник. 759 00:35:37,480 --> 00:35:39,780 Не само в C, но в компютри като цяло. 760 00:35:39,780 --> 00:35:42,590 Например, ако този е един байт струва bit-- 761 00:35:42,590 --> 00:35:45,120 Така че, ако това е осем bit-- всички от които са номер едно. 762 00:35:45,120 --> 00:35:47,300 Какъв номер е това представляваща ако приемем, 763 00:35:47,300 --> 00:35:50,730 това е всички положителни ценности в двоичен? 764 00:35:50,730 --> 00:35:54,410 >> 255, и това не е 256, защото нула е най-малък брой. 765 00:35:54,410 --> 00:35:56,760 Така че 255 е най-високата един, но проблемът 766 00:35:56,760 --> 00:36:00,330 е предполагам, че аз исках да увеличите тази променлива, която 767 00:36:00,330 --> 00:36:04,030 използва осем бита общо ако искам да я увеличите. 768 00:36:04,030 --> 00:36:07,160 >> Е, веднага след като добавите един на всички тези хора, 769 00:36:07,160 --> 00:36:10,500 Може би можете да си представите visually-- просто като носещ един използване decimals-- 770 00:36:10,500 --> 00:36:12,300 Нещо ще се влеят в ляво. 771 00:36:12,300 --> 00:36:15,590 И наистина, ако добавите номера едно с това, което се случва в двоичен 772 00:36:15,590 --> 00:36:17,670 е, че прелива обратно до нула. 773 00:36:17,670 --> 00:36:21,730 >> Така че, ако вие не само Използвай, едно цяло число, но един байт да брои числа 774 00:36:21,730 --> 00:36:27,170 в програма, от default-- веднага след като можете да получите до 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 идва след 255, които вероятно не това, което е 776 00:36:32,710 --> 00:36:34,790 потребител се случва да се очаква. 777 00:36:34,790 --> 00:36:39,620 >> Сега междувременно в плаваща запетая свят, и вие имате подобен проблем. 778 00:36:39,620 --> 00:36:42,670 Не е толкова много, с най-голям номера му въпреки че все още е проблем. 779 00:36:42,670 --> 00:36:45,360 Но с размера на точност , които можете да представляват. 780 00:36:45,360 --> 00:36:49,490 Така че нека да разгледаме този пример тук също така и от днешния източник code-- 781 00:36:49,490 --> 00:36:52,070 плаваш-0.c. 782 00:36:52,070 --> 00:36:54,280 >> И забележи, че е супер проста програма, която 783 00:36:54,280 --> 00:36:56,580 трябва очевидно разпечатате каква стойност? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Какво искаш да се обзаложа, че това ще да отпечатате въпреки че там е малко на нов синтаксис 786 00:37:04,110 --> 00:37:05,540 тук? 787 00:37:05,540 --> 00:37:06,700 Така че се надяваме 0.1. 788 00:37:06,700 --> 00:37:10,000 Така че еквивалентът на една десета защото аз правя един разделен на 10. 789 00:37:10,000 --> 00:37:12,430 Аз съм съхраняване на отговора в променлива, наречена F. 790 00:37:12,430 --> 00:37:15,850 Тази променлива е от тип поплавък, който е ключова дума, аз просто предложен съществувала. 791 00:37:15,850 --> 00:37:18,910 >> Ние не сме виждали това и преди, но това е вид чист начин в ФОРМАТ 792 00:37:18,910 --> 00:37:22,110 за да определите колко много цифри ви Искам да видя след десетичната запетая. 793 00:37:22,110 --> 00:37:25,020 Така че това просто означава, нотация че тук е запазено. 794 00:37:25,020 --> 00:37:27,900 Това е за плаваща запетая стойност, и о, между другото, 795 00:37:27,900 --> 00:37:31,389 го покаже с десетичната точка с един номер след десетичната точка. 796 00:37:31,389 --> 00:37:33,180 Така че това е броя на значещи цифри, 797 00:37:33,180 --> 00:37:34,650 така да се каже, че може да искате. 798 00:37:34,650 --> 00:37:40,450 >> Така че нека да вървим напред и да направим направи плувка-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 и очевидно 1 разделен от 10 е 0.0. 800 00:37:46,660 --> 00:37:47,760 А защо е това? 801 00:37:47,760 --> 00:37:51,380 >> Е отново, компютърът е като ми буквално, и съм написал една 802 00:37:51,380 --> 00:37:56,680 и писах 10, и да предположите какво е предполагаемата тип данни за тези две 803 00:37:56,680 --> 00:37:58,440 ценности? 804 00:37:58,440 --> 00:38:00,970 An INT, това е технически нещо малко по-различно. 805 00:38:00,970 --> 00:38:04,150 Това е обикновено дълго, но това е крайна сметка неразделна стойност. 806 00:38:04,150 --> 00:38:06,030 Не е на стойност с плаваща запетая. 807 00:38:06,030 --> 00:38:09,456 >> Което ще рече, че ако това е едно цяло число, а това е едно цяло число, 808 00:38:09,456 --> 00:38:11,830 проблемът е, че компютърът не са в състояние 809 00:38:11,830 --> 00:38:13,680 дори да се съхранява, че десетичната точка. 810 00:38:13,680 --> 00:38:16,430 Така че, когато правиш една разделена от 10, използвайки числа 811 00:38:16,430 --> 00:38:20,950 За двата числителя и знаменател, отговорът трябва да бъде 0,1. 812 00:38:20,950 --> 00:38:24,930 Но computer-- защото тези, които са integers-- 813 00:38:24,930 --> 00:38:27,430 не знам какво да правя с 0.1. 814 00:38:27,430 --> 00:38:30,010 >> Така че това, което е ясно правиш? 815 00:38:30,010 --> 00:38:33,120 Това е просто да го изхвърлите, и това, което аз виждам в крайна сметка 816 00:38:33,120 --> 00:38:38,830 е 0.0, само защото аз настоявах, че ФОРМАТ ми покаже един знак след десетичната точка. 817 00:38:38,830 --> 00:38:41,740 Но проблемът е, че ако разделят цяло число от цяло число, 818 00:38:41,740 --> 00:38:44,347 ще get-- по дефиниция C-- на цяло число. 819 00:38:44,347 --> 00:38:46,680 И това няма да правя нещо хубаво и удобно 820 00:38:46,680 --> 00:38:49,040 като около него до близката една нагоре или надолу. 821 00:38:49,040 --> 00:38:51,860 Това ще съкрати всичко след десетичната. 822 00:38:51,860 --> 00:38:54,030 >> Така че просто интуитивно, това, което най-вероятно е корекция? 823 00:38:54,030 --> 00:38:55,351 Какво е най-лесният начин тук? 824 00:38:55,351 --> 00:38:55,850 Да? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Точно така. 827 00:39:01,100 --> 00:39:04,200 Защо просто не се лекуват тези като ефективно стойности с плаваща запетая 828 00:39:04,200 --> 00:39:05,860 превръщането им в поплавъци или двойки. 829 00:39:05,860 --> 00:39:10,500 И сега, ако го направя да плувки-0, или ако компилирате плувки-1, 830 00:39:10,500 --> 00:39:12,570 която е идентична това, което е просто предложи. 831 00:39:12,570 --> 00:39:16,400 И сега аз правя плувки-0, сега аз да си взема 0.1. 832 00:39:16,400 --> 00:39:17,234 >> Сега това е невероятно. 833 00:39:17,234 --> 00:39:19,441 Но сега аз отивам да правя нещо малко по-различно. 834 00:39:19,441 --> 00:39:22,280 Любопитен съм да видя какво е наистина става под капака, 835 00:39:22,280 --> 00:39:26,050 и аз отивам да отпечатате тази до 28 знака след десетичната запетая. 836 00:39:26,050 --> 00:39:29,730 Искам наистина да видим 0.1000-- на infinite-- 837 00:39:29,730 --> 00:39:32,710 [Недоловим] 27 нули след това 0.1. 838 00:39:32,710 --> 00:39:34,740 >> Ами нека да видим дали това е това, което аз наистина се получи. 839 00:39:34,740 --> 00:39:39,430 Направете плувки-0 същия файл. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Нека да се фокусирам върху драматичната отговор. 842 00:39:44,380 --> 00:39:49,980 През цялото това време, вие сте били мислене 1 разделен от 10 е 10%, или 0.1. 843 00:39:49,980 --> 00:39:50,810 Това не е така. 844 00:39:50,810 --> 00:39:53,210 Поне доколкото компютър загрижен. 845 00:39:53,210 --> 00:39:57,060 >> Сега защо-- OK, това е пълна лъжа 1 разделен от 10 е 0.1. 846 00:39:57,060 --> 00:39:59,710 Но Защо-- че не е днес на храна за вкъщи. 847 00:39:59,710 --> 00:40:04,010 Така че, защо компютъра мисля, за разлика от всички нас в стаята, 848 00:40:04,010 --> 00:40:06,870 че един разделен от 10 е всъщност, че луд стойност? 849 00:40:06,870 --> 00:40:10,620 Какво е компютърът прави очевидно? 850 00:40:10,620 --> 00:40:12,490 Какво е това? 851 00:40:12,490 --> 00:40:13,785 >> Това не е прелее, само по себе си. 852 00:40:13,785 --> 00:40:15,910 Overflow е обикновено, когато ви обгърне стойност. 853 00:40:15,910 --> 00:40:18,970 Това е този въпрос на неточности в стойност с плаваща запетая 854 00:40:18,970 --> 00:40:22,220 където имате само 32 или може би дори 64 битов. 855 00:40:22,220 --> 00:40:25,230 Но ако има един безкраен номер на недвижими numbers-- 856 00:40:25,230 --> 00:40:27,940 числа с десетични точки и номера thereafter-- сигурност 857 00:40:27,940 --> 00:40:29,380 вие не може да представлява всички от тях. 858 00:40:29,380 --> 00:40:32,870 Така че компютърът е дал ни най-близкото съвпадение 859 00:40:32,870 --> 00:40:37,090 до стойност, която може да представлява използване на тази много бита на стойност Аз всъщност искам, 860 00:40:37,090 --> 00:40:38,690 което е 0.1. 861 00:40:38,690 --> 00:40:40,685 >> За съжаление, ако сте започнете да правите математика, или 862 00:40:40,685 --> 00:40:44,360 започнете с участието на тези видове плаващ точкови стойности във важни programs-- 863 00:40:44,360 --> 00:40:46,770 финансов софтуер, военна software-- нищо 864 00:40:46,770 --> 00:40:49,090 където възприятие е вероятно доста важно. 865 00:40:49,090 --> 00:40:51,520 И започнете да добавяте номера по този начин, и да започне 866 00:40:51,520 --> 00:40:54,050 използвате този софтуер с наистина големи входове 867 00:40:54,050 --> 00:40:56,890 или за много часове или много на ден или на много години, 868 00:40:56,890 --> 00:41:01,060 тези мънички грешки със сигурност може да добавите до течение на времето. 869 00:41:01,060 --> 00:41:04,252 >> Сега като настрана, ако някога сте виждал Супермен 3 или Office Space 870 00:41:04,252 --> 00:41:05,960 и може да се припомни, как тези момчета са откраднали 871 00:41:05,960 --> 00:41:08,668 много пари от компютъра си с помощта на числа с плаваща запетая 872 00:41:08,668 --> 00:41:11,290 и добавяне на малкото остатъци, да се надяваме, че филм 873 00:41:11,290 --> 00:41:12,390 Сега има повече смисъл. 874 00:41:12,390 --> 00:41:14,930 Това е, което те са били намеквайки в този филм. 875 00:41:14,930 --> 00:41:16,710 Фактът, че най- дружества, които не биха изглеждали 876 00:41:16,710 --> 00:41:18,600 след определен брой на знака след десетичната запетая, 877 00:41:18,600 --> 00:41:20,009 но тези, които са части от цента. 878 00:41:20,009 --> 00:41:22,550 Така че да започнете да ги добавяте нагоре, започнете да се правят много пари 879 00:41:22,550 --> 00:41:23,424 в банковата си сметка. 880 00:41:23,424 --> 00:41:25,160 Така че това е Office Space обясни. 881 00:41:25,160 --> 00:41:28,220 >> Сега за съжаление извън Office Space, има 882 00:41:28,220 --> 00:41:31,794 са някои законно тревожна и значителни въздействия 883 00:41:31,794 --> 00:41:33,710 на тези видове основните дизайнерски решения, 884 00:41:33,710 --> 00:41:35,990 и всъщност една от причините, ние използваме C в хода 885 00:41:35,990 --> 00:41:39,640 е, така че наистина трябва на това основание до разбиране за това как работят компютрите, 886 00:41:39,640 --> 00:41:42,440 как софтуер работи, и не приемайте нищо за даденост. 887 00:41:42,440 --> 00:41:45,820 >> И наистина, за съжаление, дори с това основно разбиране, 888 00:41:45,820 --> 00:41:47,370 ние, хората правят грешки. 889 00:41:47,370 --> 00:41:51,310 И това, което мислех, че ще споделя е това осем минути видео тук взето 890 00:41:51,310 --> 00:41:56,980 от епизод модерна чудеса, които е образователно шоу за това как работят нещата 891 00:41:56,980 --> 00:42:00,370 че рисува две картини кога неправилна употреба 892 00:42:00,370 --> 00:42:02,540 и разбиране на стойности с плаваща запетая 893 00:42:02,540 --> 00:42:05,610 довел до значително злощастни резултати. 894 00:42:05,610 --> 00:42:06,363 Нека хвърлим един поглед. 895 00:42:06,363 --> 00:42:07,029 [VIDEO PLAYBACK] 896 00:42:07,029 --> 00:42:11,290 -Ние Сега се върнем към "Engineering Бедствия "на съвременни чудеса. 897 00:42:11,290 --> 00:42:12,940 Компютри. 898 00:42:12,940 --> 00:42:15,580 Всички Дойдохме да приеме често разочароващ проблеми, които 899 00:42:15,580 --> 00:42:20,960 имам с them-- бъгове, вируси, и софтуер glitches-- за малки цени 900 00:42:20,960 --> 00:42:23,100 да плащат за удобство. 901 00:42:23,100 --> 00:42:27,770 Но във високи технологии и висока скорост военни и космическата програма на приложения, 902 00:42:27,770 --> 00:42:32,780 най-малкият проблем може да се възвеличи в бедствие. 903 00:42:32,780 --> 00:42:38,880 >> На 4 юни 1996 г., подготвени учени да започне безпилотен Ariane 5 ракета. 904 00:42:38,880 --> 00:42:41,190 Той е превозвал научна спътници, предназначени 905 00:42:41,190 --> 00:42:44,570 за да се установи как точно Магнитно поле взаимодейства Земята 906 00:42:44,570 --> 00:42:47,380 със слънчеви ветрове. 907 00:42:47,380 --> 00:42:50,580 Ракетата е била построена за Европейската космическа агенция, 908 00:42:50,580 --> 00:42:54,400 и излетя от неговото съоръжение на брега на Френска Гвиана. 909 00:42:54,400 --> 00:42:57,520 >> -При Около 37 секунди след на полета, те първа 910 00:42:57,520 --> 00:42:59,070 Забелязах, че нещо не е наред. 911 00:42:59,070 --> 00:43:02,240 Това, че дюзите са въртящи по начин, те наистина не трябва. 912 00:43:02,240 --> 00:43:06,550 Около 40 секунди след началото на полета, ясно на превозното средство е бил в беда, 913 00:43:06,550 --> 00:43:08,820 и това е, когато те направиха решението да го унищожи. 914 00:43:08,820 --> 00:43:12,370 Служителят по безопасността гама, с огромни вътрешности, натисна бутона 915 00:43:12,370 --> 00:43:18,030 и взриви ракетата, преди да може да се превърне в опасност за обществената безопасност. 916 00:43:18,030 --> 00:43:21,010 >> -Това Беше девойката Плаването на Ariane 5, 917 00:43:21,010 --> 00:43:23,920 и разрушаването му отне място, защото на пукнатината 918 00:43:23,920 --> 00:43:25,932 вградени в софтуера на ракетата. 919 00:43:25,932 --> 00:43:27,640 -Таблицата Проблем на Ariane е, че има 920 00:43:27,640 --> 00:43:30,500 е номер, който изисква 64 бита за да изразят, 921 00:43:30,500 --> 00:43:33,560 и те искаха да конвертирате да 16-битово число. 922 00:43:33,560 --> 00:43:36,820 Те Предполага се, че броят никога няма да бъде много голям. 923 00:43:36,820 --> 00:43:40,940 Че повечето от тези цифри в броя на 64-битов са нули. 924 00:43:40,940 --> 00:43:42,450 Те са били погрешно. 925 00:43:42,450 --> 00:43:45,000 >> -Таблицата Невъзможност на една софтуерна програма, за да приемете 926 00:43:45,000 --> 00:43:49,460 вида на номер, генериран от друг е бил в основата на провала. 927 00:43:49,460 --> 00:43:54,260 Разработка на софтуер се е превърнала в много скъпа част от новата технология. 928 00:43:54,260 --> 00:43:57,060 Ariane 4 ракета имаше бил много успешен. 929 00:43:57,060 --> 00:44:01,600 Така че голяма част от софтуера, създаден за Той също така е бил използван в Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -Таблицата Основен проблем беше, че Ариана 5. 931 00:44:04,790 --> 00:44:11,200 Беше faster-- ускори по-бързо и софтуерът не е отчело тази. 932 00:44:11,200 --> 00:44:14,910 >> -Таблицата Унищожаване на ракетата Беше огромна финансова катастрофа. 933 00:44:14,910 --> 00:44:18,630 Всичко се дължи на грешка в минута софтуер. 934 00:44:18,630 --> 00:44:21,160 Но това не е първият, време проблеми данни за реализациите 935 00:44:21,160 --> 00:44:24,770 преследвало модерна ракета технология. 936 00:44:24,770 --> 00:44:28,020 >> -В 1991 г. с началото на първата война в Персийския залив, 937 00:44:28,020 --> 00:44:30,540 ракетата Patriot преживя подобен вид 938 00:44:30,540 --> 00:44:32,465 проблем номер преобразуване. 939 00:44:32,465 --> 00:44:36,760 И като резултат 28 people-- 28 Американските soldiers-- са били убити, 940 00:44:36,760 --> 00:44:39,010 и около сто ранени. 941 00:44:39,010 --> 00:44:42,830 Когато Patriot, които е трябвало за защита срещу входящи ракети Скъд, 942 00:44:42,830 --> 00:44:45,780 не успя да изстреля ракета. 943 00:44:45,780 --> 00:44:51,610 >> Кога Ирак нахлу в Кувейт, и Америка стартира Пустинна буря в началото на 1991 г. 944 00:44:51,610 --> 00:44:55,720 Бяха разгърнати ракетни батареи Пейтриът за защита на Саудитска Арабия и Израел 945 00:44:55,720 --> 00:44:59,180 от иракски ракети Скъд атаки. 946 00:44:59,180 --> 00:45:03,080 Патриотът е среден обсег на САЩ повърхност-въздух система 947 00:45:03,080 --> 00:45:06,530 произведен от компанията Raytheon. 948 00:45:06,530 --> 00:45:09,500 >> -Таблицата Размер на Patriot прехващачи itself-- 949 00:45:09,500 --> 00:45:14,705 това е дълга около приблизително 20 фута, и тежи около 2000 паунда. 950 00:45:14,705 --> 00:45:19,090 И носи бойна глава от около, Мисля, че е около £ 150. 951 00:45:19,090 --> 00:45:23,880 И самата бойна глава е високо експлозивни, които 952 00:45:23,880 --> 00:45:26,700 има фрагменти около него. 953 00:45:26,700 --> 00:45:31,630 Така че в обвивката на бойната глава е проектирана да действа като едри сачми. 954 00:45:31,630 --> 00:45:34,040 >> -Таблицата Ракети са проведени четири на контейнер, 955 00:45:34,040 --> 00:45:37,170 и се транспортират с полуремарке. 956 00:45:37,170 --> 00:45:44,880 >> Система -Таблицата Patriot противоракетна датира най-малко 20 години. 957 00:45:44,880 --> 00:45:48,380 Тя е била първоначално проектирана като ракета въздушна отбрана 958 00:45:48,380 --> 00:45:50,810 да свалят вражески самолети. 959 00:45:50,810 --> 00:45:54,410 В първата война в Персийския залив когато тази война дойде, 960 00:45:54,410 --> 00:45:59,650 Армията искаше да го използвате, за да свалят ракети Скъд не, самолети. 961 00:45:59,650 --> 00:46:03,580 Иракското ВВС беше не е толкова голям проблем, 962 00:46:03,580 --> 00:46:06,590 но армията е притеснен за Скъд. 963 00:46:06,590 --> 00:46:10,120 И така, те се опитаха да ъпгрейд на Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Враг ракета пътуване в Mach 5 965 00:46:12,740 --> 00:46:15,670 щеше да бъде достатъчно голямо предизвикателство. 966 00:46:15,670 --> 00:46:18,440 Но когато Patriot се втурна в експлоатация, 967 00:46:18,440 --> 00:46:22,580 Армията не е бил наясно с иракски модификация, която 968 00:46:22,580 --> 00:46:25,880 направи си Скъд почти невъзможно да се. 969 00:46:25,880 --> 00:46:30,690 >> Какво се е случило е, че Скъд идваха бяха нестабилни. 970 00:46:30,690 --> 00:46:32,000 Те бяха колеблив. 971 00:46:32,000 --> 00:46:37,210 Причината за това е Iraqis-- За да получите 600 километра от 972 00:46:37,210 --> 00:46:41,680 на 300 км обхват missile-- взе тегло от предната бойна глава, 973 00:46:41,680 --> 00:46:43,340 и е направил бомбата запалка. 974 00:46:43,340 --> 00:46:48,490 Така че сега Patriot се опитва да дойде в Скъд, и повечето от time-- 975 00:46:48,490 --> 00:46:52,880 преобладаващото мнозинство от time-- тя просто ще лети от Скъд. 976 00:46:52,880 --> 00:46:57,120 >> -След Оператори Пейтриът система осъзнал Патриотът пропусна целта си, 977 00:46:57,120 --> 00:47:01,630 те взривена бойна глава на Патриотичния за да се избегнат евентуални жертви, ако 978 00:47:01,630 --> 00:47:04,440 се оставя да падне на земята. 979 00:47:04,440 --> 00:47:08,700 >> Това беше това, което видяха, повечето хора като големи огнени топки в небето, 980 00:47:08,700 --> 00:47:14,180 колкото и неразбрани подслушване на Скъд бойни глави. 981 00:47:14,180 --> 00:47:18,020 >> -Although В нощното небе, патриотите изглежда се успешно унищожаване 982 00:47:18,020 --> 00:47:23,280 Скъд, в Dhahran може да има Не се заблуждавайте за нейната ефективност. 983 00:47:23,280 --> 00:47:27,930 Има радарна система на Патриотичния Загубих представа за входящо Scud 984 00:47:27,930 --> 00:47:30,260 и никога не стартира поради до софтуерен недостатък. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Беше израелците, които първи открили че вече системата е било включено, 987 00:47:38,880 --> 00:47:41,130 толкова по-голямо разминаването време стана. 988 00:47:41,130 --> 00:47:44,770 Поради часовник вграден в компютъра на системата. 989 00:47:44,770 --> 00:47:48,190 >> -За Две седмици преди трагедията в Dhahran, 990 00:47:48,190 --> 00:47:50,720 израелците докладвани Министерството на отбраната 991 00:47:50,720 --> 00:47:52,410 че системата е загуба на време. 992 00:47:52,410 --> 00:47:54,410 След около осем часа на работа, те забелязали, 993 00:47:54,410 --> 00:47:57,690 че системата да стане забележимо по-малко точна. 994 00:47:57,690 --> 00:48:01,850 Министерството на отбраната отговори, като казвам на всички батериите Пейтриът 995 00:48:01,850 --> 00:48:04,800 да не напускат системите за дълго време. 996 00:48:04,800 --> 00:48:06,980 Те никога не каза какво е било дълго време. 997 00:48:06,980 --> 00:48:09,140 8 часа, 10 часа, хиляда часа. 998 00:48:09,140 --> 00:48:11,300 Никой не знаеше. 999 00:48:11,300 --> 00:48:13,320 >> -Таблицата Patriot батерия разположени в казармата 1000 00:48:13,320 --> 00:48:18,310 в Dhahran и неговата погрешна вътрешна часовник беше на повече от 100 часа 1001 00:48:18,310 --> 00:48:21,520 в нощта на 25-ти Февруари. 1002 00:48:21,520 --> 00:48:25,792 >> -Това Проследяват време с точност на около една десета от секундата. 1003 00:48:25,792 --> 00:48:27,950 Сега една десета от секундата е интересен номер 1004 00:48:27,950 --> 00:48:31,850 тъй като не може да се изрази в двоичен точно, което 1005 00:48:31,850 --> 00:48:36,500 означава, че не може да се изрази точно във всеки модерен цифров компютър. 1006 00:48:36,500 --> 00:48:41,070 Трудно е да се повярва, но използвате това като пример. 1007 00:48:41,070 --> 00:48:43,420 >> Да вземем брой една трета. 1008 00:48:43,420 --> 00:48:47,330 Една трета не може да бъде изразена в десетични точно. 1009 00:48:47,330 --> 00:48:52,060 Една трета е 0.333 става за безкрайност. 1010 00:48:52,060 --> 00:48:56,420 Няма начин да се направи това с абсолютна точност в десетична. 1011 00:48:56,420 --> 00:48:59,530 Това е точно вида на проблема , което се случи в Patriot. 1012 00:48:59,530 --> 00:49:04,040 Колкото по-дълго на системата се затича, за лошо грешката време стана. 1013 00:49:04,040 --> 00:49:08,840 >> -След 100 часа работа, грешка във времето е само около една трета 1014 00:49:08,840 --> 00:49:10,440 от секундата. 1015 00:49:10,440 --> 00:49:14,150 Но по отношение на насочването на ракета пътуване в Mach 5, 1016 00:49:14,150 --> 00:49:18,560 тя се превърна в проследяване грешка от над 600 метра. 1017 00:49:18,560 --> 00:49:21,870 Би било фатална грешка за войниците в Dhahran. 1018 00:49:21,870 --> 00:49:28,455 >> Какво се случи, е лансирането Scud е открити от спътници за ранно предупреждение, 1019 00:49:28,455 --> 00:49:32,710 и те са знаели, Скъд идваше в общата им посока. 1020 00:49:32,710 --> 00:49:35,150 Те не знаеха къде идва. 1021 00:49:35,150 --> 00:49:38,210 Това беше вече до радара компонент на системата Patriot 1022 00:49:38,210 --> 00:49:43,150 защитавайки Dhahran да се локализира и запази следите на входящи вражески ракети. 1023 00:49:43,150 --> 00:49:44,561 >> -Таблицата Радар беше много умен. 1024 00:49:44,561 --> 00:49:46,560 Това всъщност ще проследят позицията на Скъд 1025 00:49:46,560 --> 00:49:48,930 и след това се предскаже където то вероятно ще бъде 1026 00:49:48,930 --> 00:49:51,380 следващия път, когато радар изпрати импулс навън. 1027 00:49:51,380 --> 00:49:53,040 Това се нарича порта диапазон. 1028 00:49:53,040 --> 00:49:57,620 >> -Тогава Веднъж патриотът реши достатъчно време има 1029 00:49:57,620 --> 00:50:02,400 преминал да се върна и да се провери на следващия място за това открива обект 1030 00:50:02,400 --> 00:50:03,550 той се връща. 1031 00:50:03,550 --> 00:50:07,820 Така че, когато той се върна на неправилния място, то тогава не вижда обект. 1032 00:50:07,820 --> 00:50:10,360 И тя реши, че не е имало обект. 1033 00:50:10,360 --> 00:50:13,630 Това не е фалшиво откриване и тя пада на пистата. 1034 00:50:13,630 --> 00:50:16,970 >> -Таблицата Входящо Scud изчезна от екрана на радара, 1035 00:50:16,970 --> 00:50:20,200 и секунди по-късно, той блъсна в казармата. 1036 00:50:20,200 --> 00:50:22,570 Скъд убити 28. 1037 00:50:22,570 --> 00:50:26,110 Той бе уволнен последния един по време на първата война в Персийския залив. 1038 00:50:26,110 --> 00:50:31,920 Трагично е, че актуализирания софтуер пристигна призори на следващия ден. 1039 00:50:31,920 --> 00:50:34,870 Недостатък на софтуера е имал е фиксирана, затваряне 1040 00:50:34,870 --> 00:50:39,150 една глава в разтревожените история на ракети Patriot. 1041 00:50:39,150 --> 00:50:40,030 >> [END възпроизвеждане на видео] 1042 00:50:40,030 --> 00:50:41,488 >> DAVID J. Malan: Това е за CS50. 1043 00:50:41,488 --> 00:50:42,820 Ние ще се видим в сряда. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [За възпроизвеждане на музика] 1046 00:50:50,370 --> 00:54:23,446