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 Дејвид Џ 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 А бубачка, се разбира, е грешка во програмата, 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 ѕвезди на екран со користење printf, 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 Во ред. 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 и ние сме наведени на n вредност од 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 >> Ѕвезда. 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 >> Да, за разлика од еден јазик како Пајтон, ако сте запознаени, 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 Како еден од оние жолта гребење загатка парчиња повторно и повторно и повторно. 81 00:03:44,390 --> 00:03:50,920 >> Па сега ако јас повторно ја извршите оваа program-- ./buggy-2-- Хм. 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 Па сега интересен непријавени не variable-- 2. 88 00:04:04,860 --> 00:04:05,510 Ние сме прави 1. 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 Енкрипција. 138 00:06:14,580 --> 00:06:16,470 Па ние ќе зборуваме за ова во наредните денови. 139 00:06:16,470 --> 00:06:18,750 Енкрипција, уметноста на scrambling информации. 140 00:06:18,750 --> 00:06:22,200 >> Но скратам приказната, Епл Пред некое време беше направил грешка 141 00:06:22,200 --> 00:06:25,970 во нивната имплементација на SSL, софтвер кој на крајот ја спроведува 142 00:06:25,970 --> 00:06:30,120 Адреси како 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 Безбеден транспорт не успеа да се провери автентичноста на врската. 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 И ние нема да се фокусира премногу на minutia таму, 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 и навистина, ако ние зумирате на само оние линии, ова е В. 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 дека нема големи загради, што Јаболко навистина напишал беше кодот што изгледа 174 00:08:02,560 --> 00:08:03,540 вака. 175 00:08:03,540 --> 00:08:07,080 Па јас zoomed надвор и јас само фиксна вовлекувањето во смисла 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 но може да се мисли на Отиди не како значење скокаме 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 >> Канцеларија 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 или E. 260 00:12:02,040 --> 00:12:03,980 >> Тоа не е начинот на кој ние мислам на овие броеви. 261 00:12:03,980 --> 00:12:06,880 А три е навистина добро, а она што ние генерално очекуваат на почетокот 262 00:12:06,880 --> 00:12:09,820 на терминот е дека ако сте добивање еден куп на three's-- можеби неколку 263 00:12:09,820 --> 00:12:12,540 на саеми, неколку fours-- или неколку twos, неколку 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 има несреќна разлика на е најголем производител на рекламирање одбор 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 >> Со други зборови, одговориме на вашата question-- 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 каде што ние сме во последниве години, ова е бројот на рекламирање одбор случаи 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 >> Знаеме како да се премногу Google околу и да се најде код складишта 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 >> Дејвид Џ 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 Значи сте виделе во нула, и сте види можеби веќе во pset1 со C 368 00:17:37,285 --> 00:17:39,930 дека вие не само што може да се користи функции, како printf, 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 сфатат дека С дава можете оваа способност. 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 А потоа, тука е тоа нешто here-- 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 Видот на која е стринг. 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 >> И името на таа Стринг погодно ќе биде име. 408 00:19:35,730 --> 00:19:37,840 Не е, не 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 Само како една линија на кодот за на printf, но очигледно тоа 412 00:19:45,390 --> 00:19:47,950 печати "Здраво", така и така. 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 генерички како С. А празнина, за сега, само значи 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 Јас тип Давид, и видови на моето име. 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-- повика 441 00:21:10,290 --> 00:21:13,270 дека code-- со некој описен именува како PrintName, 442 00:21:13,270 --> 00:21:15,600 Ц не си ни оваа способност. 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 Поголемиот дел од оваа главна функција е printf. 447 00:21:26,330 --> 00:21:30,360 Јас прв произволно иницијализира променлива наречена x на бројот 2. 448 00:21:30,360 --> 00:21:34,110 Јас тогаш се печати "x е сега % I "преминува во вредност од x. 449 00:21:34,110 --> 00:21:35,500 Па јас сум само велејќи дека тоа што е. 450 00:21:35,500 --> 00:21:37,208 >> Сега сум само храбро тврдејќи со printf. 451 00:21:37,208 --> 00:21:42,050 Јас сум во местење Рубикова коцка таа вредност X, и јас сум Притоа со повик на функција 452 00:21:42,050 --> 00:21:45,590 наречен коцка полагање во X како аргумент, 453 00:21:45,590 --> 00:21:49,300 и потоа заштеда на излез во променлива себе, x. 454 00:21:49,300 --> 00:21:51,340 Па јас сум clobbering вредноста на x. 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 Овој пат тоа се нарекува n наместо име, но можев да го наречеме нешто што сакам. 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 Момци. 467 00:22:16,870 --> 00:22:18,580 Сега тоа е очигледно int. 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 >> Значи, ако јас се каже во on-line 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 cubed, или 3 коцки, или 4 cubed-- она ​​што го донесе во, 481 00:22:50,130 --> 00:22:51,540 и како можам спроведе ова? 482 00:22:51,540 --> 00:22:54,810 Па, само е n пати n пати n е како би можел коцка вредност. 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 на видови на нештата нула може да се направи. 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 и да ја задржите тоа повторно и повторно и повторно се додека n е помалку од една. 504 00:23:55,760 --> 00:23:58,720 >> Па n се случува да биде помалку од една само ако човекот не е соработува. 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 One-- зошто Изјавувам int 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 >> Блиску. 527 00:24:53,330 --> 00:24:59,030 Така, бидејќи јас сум прогласена n на линија 29 надвор од јамка, 528 00:24:59,030 --> 00:25:01,390 тоа е достапна во текот на целата оваа функција. 529 00:25:01,390 --> 00:25:05,400 Не други функции, бидејќи n е сеуште во внатрешноста на овие кадрава 530 00:25:05,400 --> 00:25:06,470 протези тука. 531 00:25:06,470 --> 00:25:07,940 So-- сигурни. 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 Ако ние наместо да прогласи N токму тука на линија 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 е scoped, 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 како што погрешно is-- напишано. 548 00:25:53,530 --> 00:25:57,990 Дозволете ми да оди напред и да прават функција-1, и notice-- грешка. 549 00:25:57,990 --> 00:26:03,502 Употреба на непријавена идентификатор n на линијата 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 Ц, што е она што ние сме навистина го користите. 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 Празнина ќе биде повеќе правилно, па ќе буквално копирајте го и ставете го ова време. 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 >> Ако не водат вашата библиотека да the-- ох, добро прашање. 596 00:28:14,360 --> 00:28:17,350 Остри вклучува хедер датотека подмножества. 597 00:28:17,350 --> 00:28:20,040 Треба да be-- треба речиси секогаш да биде во самиот врв 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 вака, но со зборот printf, и со своите аргументи и нејзиното враќање тип. 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 е само неми и rethinks врвот до дното. 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 >> Но можете многу лесно може да излезе со сценарио во кое има потреба да се јавам Б, 614 00:29:07,409 --> 00:29:10,075 а можеби Б повикува назад А. ја е нешто што се нарекува рекурзија, 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 Погласни? 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 Дејвид Џ 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-- неискористени променлива n. 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 >> Добро, така што податоците аргумент не се користи од страна формат стринг 656 00:30:48,100 --> 00:30:52,310 n-- ох, тоа е затоа што Ја променив на овие овде. 657 00:30:52,310 --> 00:30:55,885 Добро, знаеме што одговорот ќе to-- ред, одиме. 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 бидејќи ова was-- таа работи е одговорот. 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 се функции кои го прават нешто како визуелно на екранот со printf, 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 А знак, или карактер, што се случува да биде еден бајт, или осум вкупно битови. 691 00:32:36,030 --> 00:32:40,060 И тоа е да се каже дека големината на знак е само еден бајт. 692 00:32:40,060 --> 00:32:45,370 А бајт е осум битови, па тоа значи дека ние може да претставува колку знаци. 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 One-- повеќе од тоа. 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 Што значи она што е најголем можен број може да се претставуваат со int 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 А плови, пак, е различен тип на податочен тип во 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 И излегува дека Ц, исто така, користи четири бајти 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 и ова е два пати толку долго како int, и тоа е за долго целобројна вредност. 749 00:35:10,260 --> 00:35:15,655 >> Забава fact-- ако int е четири бајти, колку долго е долг во 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 >> Значи, ако сте само што не use-- еден int, но еден бајт да се избројат броеви 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 Не толку со најголем number-- иако тоа е се уште проблем. 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 Така што е еквивалентно на една десетина затоа што јас го правам 1 поделено со 10. 789 00:37:10,000 --> 00:37:12,430 Јас сум чување на одговор во променлива наречена f. 790 00:37:12,430 --> 00:37:15,850 Таа променлива е од тип float, кои е клучен збор јас само предложени постоел. 791 00:37:15,850 --> 00:37:18,910 >> Не сум го видел пред, но ова е вид на уредни начин на printf 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 >> И повторно, компјутерот е преземање мене буквално, и имам напишано 1 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 На 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 >> Кој е да се каже дека ако оваа е int и ова е int, 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 Па кога ќе се направи 1 поделени 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 само затоа што инсистираше на тоа дека printf покажи ми еден децимална точка. 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 >> Сега why-- во ред, тоа е целосна лага 1 поделено со 10 е 0,1. 846 00:39:57,060 --> 00:39:59,710 Но why-- тоа не е денес на готова брза. 847 00:39:59,710 --> 00:40:04,010 Па зошто компјутерот мислам, за разлика од сите нас во собата, 848 00:40:04,010 --> 00:40:06,870 дека 1 поделено со 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 или деловен простор 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 Па тоа е Канцелариски простор објасни. 881 00:41:25,160 --> 00:41:28,220 >> Сега за жал надвор Канцелариски простор, има 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 [Видео репродукција] 896 00:42:07,029 --> 00:42:11,290 -Ние Сега се врати на "Инжинерство Катастрофи "на Модерни чуда. 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 година, научниците подготвени да започне беспилотно Аријана 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 -На Проблем на Аријана беше тоа што таму 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 >> -На Основниот проблем беше дека Ariane 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 Патриот проектили доживеа сличен вид 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 Кога патриот, кој требаше за заштита од влезните Scuds, 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 >> -На Големината на Патриот пресретнувачи itself-- 949 00:45:09,500 --> 00:45:14,705 тоа е за околу 20 метри долга, и тежи околу 2.000 фунти. 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 Па обвивка на боева глава е дизајниран да се однесува како buckshot. 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 >> -На Патриот анти-ракетен систем навраќа најмалку 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 Армијата сакаше да го користат за да соборат Scuds, не авиони. 961 00:45:59,650 --> 00:46:03,580 Ирачката воздухопловната беше не толку голем дел од проблемот, 962 00:46:03,580 --> 00:46:06,590 Меѓутоа, армијата се загрижени за Scuds. 963 00:46:06,590 --> 00:46:10,120 И така тие се обиделе да надградба на Патриотскиот. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Непријател проектили патуваат со Мах 5 965 00:46:12,740 --> 00:46:15,670 требаше да биде предизвик доволно. 966 00:46:15,670 --> 00:46:18,440 Но кога Патриот бил пренесен во употреба, 967 00:46:18,440 --> 00:46:22,580 Армијата не бил свесен за ирачки модификација дека 968 00:46:22,580 --> 00:46:25,880 заземаа своите scuds речиси невозможно за него. 969 00:46:25,880 --> 00:46:30,690 >> Што се случи е дека Scuds кои доаѓаат во се нестабилни. 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 Па сега Патриот се обидува да дојде на Скад, и поголемиот дел од 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 Scuds, во Дахран може да има Не прават грешка за неговата ефикасност. 983 00:47:23,280 --> 00:47:27,930 Таму Патриот на радарски систем губеше на дојдовен Скад 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 >> -За Две недели пред трагедијата во Дахран, 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 >> -На Патриот батерии стационирани во касарните 1000 00:48:13,320 --> 00:48:18,310 на Дахран и нејзините недостатоци внатрешна часовникот бил на повеќе од 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 Тоа е токму оној вид на проблем што се случи во патриот. 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 Но во однос на таргетирање на проектили патуваат со Мах 5, 1016 00:49:14,150 --> 00:49:18,560 тоа резултираше со следење на грешка од над 600 метри. 1017 00:49:18,560 --> 00:49:21,870 Тоа ќе биде фатална грешка за војниците во Дахран. 1018 00:49:21,870 --> 00:49:28,455 >> Што се случи е лансирањето Скад беше откриени од страна на сателити за рано предупредување, 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 Сега тоа е до радарот компонента на системот Патриот 1022 00:49:38,210 --> 00:49:43,150 одбрана Дахран да се лоцираат и да ја задржите пратите на влезните непријател проектили. 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 >> -На Дојдовни Скад исчезна од радарот екран, 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 едно поглавје во проблематичниот историјата на Патриот проектили. 1041 00:50:39,150 --> 00:50:40,030 >> [END видео репродукција] 1042 00:50:40,030 --> 00:50:41,488 >> Дејвид Џ 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