1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [Muziciranja] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 DAVID J. Malan: U redu. 5 00:00:12,660 --> 00:00:15,590 To je CS50, i to je početak tjedan-dva. 6 00:00:15,590 --> 00:00:19,120 Stoga započnimo danas s bug. 7 00:00:19,120 --> 00:00:20,974 Bug, naravno, pogreška u programu, 8 00:00:20,974 --> 00:00:22,890 a vi ćete dobiti vrlo upoznati s ovim konceptom 9 00:00:22,890 --> 00:00:26,050 Ako ste nikada nije programiran prije. pset0 a sada pset1. 10 00:00:26,050 --> 00:00:29,280 Ali razmotrimo nešto Malo jednostavan na prvi. 11 00:00:29,280 --> 00:00:32,189 Ovaj program ovdje da sam Bacio zajedno unaprijed, 12 00:00:32,189 --> 00:00:37,280 a ja tvrdim da to treba ispisati 10 zvjezdica na zaslonu pomoću printf, 13 00:00:37,280 --> 00:00:41,020 ali očito je lud na neki način. 14 00:00:41,020 --> 00:00:45,370 >> S obzirom da je specifikacija koja to bi trebalo ispisati 10 zvijezda, 15 00:00:45,370 --> 00:00:50,230 , ali to ne čini, što bi vi tvrdite je bug? 16 00:00:50,230 --> 00:00:52,004 Da? 17 00:00:52,004 --> 00:00:54,420 Dakle, to je isključiti jednu pogrešku, a što ti misliš? 18 00:00:54,420 --> 00:01:00,991 19 00:01:00,991 --> 00:01:01,490 U redu. 20 00:01:01,490 --> 00:01:09,820 21 00:01:09,820 --> 00:01:10,410 Izvrsno. 22 00:01:10,410 --> 00:01:13,930 Tako smo navedeno početi vrijednost nula za i, 23 00:01:13,930 --> 00:01:18,399 a mi smo naveli n vrijednost od 10, ali smo se koristi manje od ili jednako. 24 00:01:18,399 --> 00:01:21,190 A razlog da je ovo dvoje likovi i ne samo jedan simbol, 25 00:01:21,190 --> 00:01:22,630 kao u matematici knjizi, je u tome što ne morate 26 00:01:22,630 --> 00:01:24,880 način izražavanja jedan ekvivalent znak. 27 00:01:24,880 --> 00:01:28,450 >> Dakle, to znači da je manje od, ali ako počnete računajući na nulu, 28 00:01:28,450 --> 00:01:31,690 ali vi brojati sve kroz te jednak 10, 29 00:01:31,690 --> 00:01:34,170 ti si, naravno, ide na Točka 11 stvari u ukupno. 30 00:01:34,170 --> 00:01:35,900 I tako ti ćeš tiskati 11 zvijezde. 31 00:01:35,900 --> 00:01:37,990 Dakle, ono što bi moglo biti fix za to? 32 00:01:37,990 --> 00:01:39,970 Da? 33 00:01:39,970 --> 00:01:43,980 >> Tako je samo prilagoditi manje od ili jednaka samo biti manje od, 34 00:01:43,980 --> 00:01:46,250 i tu je, tvrdim, možda Drugo rješenje, previše. 35 00:01:46,250 --> 00:01:47,210 Što bi drugo što učiniti? 36 00:01:47,210 --> 00:01:48,590 Da? 37 00:01:48,590 --> 00:01:53,660 >> Dakle, početi ga je ravno do 1, a vratiti manje od ili jednako. 38 00:01:53,660 --> 00:01:56,187 I iskreno bih tvrditi da, za prosječnog čovjeka, 39 00:01:56,187 --> 00:01:57,770 ovo je vjerojatno izravnija. 40 00:01:57,770 --> 00:02:00,280 Počnite računajući na dan 1. i brojati do 10. 41 00:02:00,280 --> 00:02:01,690 U suštini to što misliš. 42 00:02:01,690 --> 00:02:04,010 >> No, stvarnost je u programiranje, kao što smo vidjeli, 43 00:02:04,010 --> 00:02:07,598 računalni znanstvenici i programeri uglavnom ne počnu brojati od nule. 44 00:02:07,598 --> 00:02:09,389 I to je u redu kada ste naviknuti na to. 45 00:02:09,389 --> 00:02:12,640 Vaše stanje će se općenito biti nešto poput manje od. 46 00:02:12,640 --> 00:02:14,910 Tako jednostavno i logično pogreške koje smo danas mogli 47 00:02:14,910 --> 00:02:17,990 popraviti i na kraju kompilirati to i dobiti samo 10. 48 00:02:17,990 --> 00:02:19,610 >> Pa kako o tom bug ovdje? 49 00:02:19,610 --> 00:02:24,200 Evo, opet, tvrdim da imam Cilj tiskanje 10 stars-- 50 00:02:24,200 --> 00:02:28,140 jedan po retku ovaj put, ali to ipak nije. 51 00:02:28,140 --> 00:02:30,940 Prije predlažemo što Fix je, što to 52 00:02:30,940 --> 00:02:34,640 ispisati vizualno da sam sastaviti i pokrenuti ovaj program ti misliš? 53 00:02:34,640 --> 00:02:35,140 Da? 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 Dakle, sve zvijezde na Ista crta je ono što sam čuo, 57 00:02:41,690 --> 00:02:43,391 a onda nova linija karakter. 58 00:02:43,391 --> 00:02:44,140 Tako ćemo pokušati. 59 00:02:44,140 --> 00:02:48,710 Tako bi buggy-1, ući, i vidim Zveket naredbu 60 00:02:48,710 --> 00:02:50,090 da smo razgovarali o posljednjem trenutku. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, i doista ne vidim svih 10 zvijezda na istoj liniji, iako tvrdim 62 00:02:55,180 --> 00:02:58,690 u mojoj specifikaciji samo komentar na vrhu kod koje sam namjeravao učiniti jedan po 63 00:02:58,690 --> 00:02:59,230 linije. 64 00:02:59,230 --> 00:03:00,580 No, to izgleda u pravu. 65 00:03:00,580 --> 00:03:04,620 >> Sada linija 15 izgleda kao da sam ispis zvijezdu, a zatim crta 16 66 00:03:04,620 --> 00:03:06,620 izgleda da sam ispis Nova linija lik, 67 00:03:06,620 --> 00:03:09,560 i oni su oba razvedena tako Ja sam unutar petlje jasno. 68 00:03:09,560 --> 00:03:13,610 Dakle, ne bi li se radi zvijezdu, nova linije, zvijezda, nova linija, zvijezda, nova linija? 69 00:03:13,610 --> 00:03:14,110 Da? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Da, za razliku od jezika kao Python, ako ste upoznati, 72 00:03:21,240 --> 00:03:23,540 udubljenje ne obzira na računalo. 73 00:03:23,540 --> 00:03:25,280 To je samo važno da se na čovjeka. 74 00:03:25,280 --> 00:03:29,860 Dakle, dok je ovdje sam izumio linije 15 i 16-- da izgleda lijepo, 75 00:03:29,860 --> 00:03:31,330 ali računalo ne zanima. 76 00:03:31,330 --> 00:03:34,640 Računalo je stalo zapravo imaju vitičastim zagradama 77 00:03:34,640 --> 00:03:36,310 oko tih linija koda. 78 00:03:36,310 --> 00:03:39,520 >> Tako da je clear-- baš kao u Scratch-- da te dvije linije koda 79 00:03:39,520 --> 00:03:40,450 treba izvršiti. 80 00:03:40,450 --> 00:03:44,390 Kao jedan od onih žute Scratch slagalice komada opet i opet i opet. 81 00:03:44,390 --> 00:03:50,920 >> Pa sad, ako sam ponovno pokrenuti taj program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Imam pogrešku sada. 83 00:03:51,770 --> 00:03:54,212 Što sam zaboraviti učiniti? 84 00:03:54,212 --> 00:03:55,420 Da, pa nisam ga sastaviti. 85 00:03:55,420 --> 00:03:56,740 Tako bi buggy-2. 86 00:03:56,740 --> 00:03:59,840 Nema takve datoteke, jer nisam zapravo sastaviti drugu verziju. 87 00:03:59,840 --> 00:04:04,860 Tako sada interesantno neprijavljeni variable-- ne 2. 88 00:04:04,860 --> 00:04:05,510 Radimo 1. 89 00:04:05,510 --> 00:04:11,050 Make-buggy 1-- ./buggy-1-- i sada svaka od njih je na istoj liniji. 90 00:04:11,050 --> 00:04:13,880 >> Sada postoji iznimka ovo trebalo tvrdnja rudnika 91 00:04:13,880 --> 00:04:15,520 koja vam je potrebna ova vitičastim zagradama. 92 00:04:15,520 --> 00:04:20,160 Kad je to zapravo OK-- ako ste Primijetio u sekciji ili textbooks-- 93 00:04:20,160 --> 00:04:22,130 izostaviti kovrčavom aparatić? 94 00:04:22,130 --> 00:04:22,630 Da? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Točno. 97 00:04:26,870 --> 00:04:28,940 Kada postoji samo jedan linija koda koji vas 98 00:04:28,940 --> 00:04:32,830 žele biti povezane s petlje kao u našem prvom primjeru. 99 00:04:32,830 --> 00:04:36,380 To je posve legitimno izostaviti vitičastim zagradama 100 00:04:36,380 --> 00:04:40,310 baš kao svojevrsno pogodnost iz prevodilac za vas. 101 00:04:40,310 --> 00:04:40,810 Da? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Dobro pitanje. 104 00:04:43,930 --> 00:04:45,500 Bi li se u obzir pogreška stil? 105 00:04:45,500 --> 00:04:49,340 Mi bi promote-- kao u CS50 stil vodič, URL za koje 106 00:04:49,340 --> 00:04:51,926 je u pset1-- koja uvijek koristiti vitičastim zagradama. 107 00:04:51,926 --> 00:04:53,550 Dakako, ako ste novi u programiranju. 108 00:04:53,550 --> 00:04:56,800 Realnost je da nismo će ti zabraniti 109 00:04:56,800 --> 00:04:58,680 od činjenja tih pogodnosti. 110 00:04:58,680 --> 00:05:00,846 Ali, ako ste samo dobivanje u zamahu stvari, 111 00:05:00,846 --> 00:05:04,020 Apsolutno baš uvijek koristiti kovrčava aparatić dok ne dobijete dokučiti ga. 112 00:05:04,020 --> 00:05:04,640 Dobro pitanje. 113 00:05:04,640 --> 00:05:05,320 >> U redu. 114 00:05:05,320 --> 00:05:07,660 Pa da onda je bug. 115 00:05:07,660 --> 00:05:09,190 Barem u nečemu prilično jednostavan. 116 00:05:09,190 --> 00:05:11,260 Pa ipak, možda mislite da je ovo je prilično rudimentarno, zar ne? 117 00:05:11,260 --> 00:05:13,635 To je neka vrsta prvog tjedna gledanja na jeziku 118 00:05:13,635 --> 00:05:14,890 kao, vidjeti svoje greške u njemu. 119 00:05:14,890 --> 00:05:17,250 No stvarnost to su zapravo predstavnik 120 00:05:17,250 --> 00:05:20,310 nekih prilično zastrašujućih problema koje se mogu pojaviti u stvarnom svijetu. 121 00:05:20,310 --> 00:05:23,530 >> Dakle, neki od vas možda podsjetiti ako slijedite tech vijesti, 122 00:05:23,530 --> 00:05:25,740 ili možda čak uhvaćen Vjetar toga u veljači 123 00:05:25,740 --> 00:05:29,434 ove protekle godine da je Apple imao napravili malo pogrešku u oba iOS, 124 00:05:29,434 --> 00:05:31,350 operativni sustav na njihove telefone, ali i 125 00:05:31,350 --> 00:05:34,220 Mac OS, operativni sustav na svojim osobnim računalima i laptopima. 126 00:05:34,220 --> 00:05:36,480 A ti vidio takve naslove kao ovaj. 127 00:05:36,480 --> 00:05:41,120 A nakon toga, Apple obećao da će popraviti ovaj bug, 128 00:05:41,120 --> 00:05:45,950 i vrlo brzo je to popraviti u iOS, ali onda u konačnici to fiksna u Mac OS 129 00:05:45,950 --> 00:05:46,810 te. 130 00:05:46,810 --> 00:05:50,370 >> Sada nitko od tih naslova na miru stvarno otkriti što je temeljni problem bio, 131 00:05:50,370 --> 00:05:55,640 ali bug u konačnici bila smanjena na bug u SSL, Secure Sockets Layer. 132 00:05:55,640 --> 00:05:57,390 I ne duljimo, To je softver 133 00:05:57,390 --> 00:06:01,030 da su naši preglednici i ostale softver koji se koristi za napraviti što? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Ako sam rekao da je SSL uključen, kad god vas 136 00:06:06,860 --> 00:06:13,920 posjetite URL koji počinje s https, što je onda moglo biti povezano s SSL? 137 00:06:13,920 --> 00:06:14,580 Šifriranje. 138 00:06:14,580 --> 00:06:16,470 Dakle, mi ćemo govoriti o to u narednim danima. 139 00:06:16,470 --> 00:06:18,750 Šifriranje, umjetnost remećenje informacije. 140 00:06:18,750 --> 00:06:22,200 >> Ali ne duljimo, Apple negdje prije je pogriješio 141 00:06:22,200 --> 00:06:25,970 u njihovoj implementaciji SSL, na softver koji u konačnici provodi 142 00:06:25,970 --> 00:06:30,120 URL-ova kao što su HTTPS ili max veze tamo. 143 00:06:30,120 --> 00:06:32,850 Rezultat kojih je da je vaš veza bi potencijalno 144 00:06:32,850 --> 00:06:33,920 biti prisluškivanja. 145 00:06:33,920 --> 00:06:37,130 A tvoje veze bile ne nužno kodiran 146 00:06:37,130 --> 00:06:40,350 ako je neki negativac između vi i web odredište koje 147 00:06:40,350 --> 00:06:42,170 znao iskoristiti to. 148 00:06:42,170 --> 00:06:45,090 >> Sada Apple je u konačnici objavljena popraviti za to konačno, 149 00:06:45,090 --> 00:06:46,920 i opis njihovog popravka je bio ovaj. 150 00:06:46,920 --> 00:06:49,878 Sigurna promet nije uspio potvrditi autentičnost veze. 151 00:06:49,878 --> 00:06:52,920 Pitanje se obratili vraćanje nestalih korake valjanosti. 152 00:06:52,920 --> 00:06:57,250 >> Dakle, to je vrlo ruka valovita objašnjenje za samo reći da smo zeznuli. 153 00:06:57,250 --> 00:07:00,920 Tu je doslovno samo jednom linija koda koji je bio lud 154 00:07:00,920 --> 00:07:05,130 u njihovoj implementaciji SSL, i Ako idete online i potraga za to 155 00:07:05,130 --> 00:07:07,210 zapravo možete pronaći izvorni izvorni kod. 156 00:07:07,210 --> 00:07:11,960 Na primjer, ovo je slika od Samo dio prilično veliku datoteku, 157 00:07:11,960 --> 00:07:15,965 a to je funkcija očito naziva SSL potvrdili znak servera ključnu razmjenu. 158 00:07:15,965 --> 00:07:17,840 I to traje hrpa argumenti i ulaza. 159 00:07:17,840 --> 00:07:20,298 I nećemo se fokusirati previše na minutia tamo, 160 00:07:20,298 --> 00:07:24,390 ali ako se usredotočite na koda unutar te najviši function-- Idemo 161 00:07:24,390 --> 00:07:25,590 uvećanje na to. 162 00:07:25,590 --> 00:07:28,140 Vi možda već sumnjate ono grešci 163 00:07:28,140 --> 00:07:31,230 biti čak i ako nemate pojma u konačnici ono što gledate. 164 00:07:31,230 --> 00:07:35,924 Postoji vrsta anomalija ovdje, što je ono? 165 00:07:35,924 --> 00:07:38,940 >> Da, ja stvarno ne sviđa Izgled dva goto ne uspije. 166 00:07:38,940 --> 00:07:42,060 Iskreno, ja stvarno ne znam što goto ne znači, ali ima dva od njih 167 00:07:42,060 --> 00:07:42,810 natrag na leđa. 168 00:07:42,810 --> 00:07:45,290 To je nekako me trlja intelektualno pogrešan način, 169 00:07:45,290 --> 00:07:48,910 i doista, ako smo povećali samo one linije, to je C. 170 00:07:48,910 --> 00:07:52,220 >> Dakle, puno Appleov koda je sama napisan u C, 171 00:07:52,220 --> 00:07:55,780 a to očito stvarno equivalent-- 172 00:07:55,780 --> 00:07:59,060 Ne bi tu lijepu razvedenosti verzija, ali ako prepoznajete činjenicu 173 00:07:59,060 --> 00:08:02,560 da nema vitičastim zagradama, što Apple je stvarno bio napisao kod koji izgleda 174 00:08:02,560 --> 00:08:03,540 kao što je ovaj. 175 00:08:03,540 --> 00:08:07,080 Tako sam se povećali, a ja samo fiksne uvlačenje u smislu 176 00:08:07,080 --> 00:08:10,690 da, ako nema vitičastim zagradama, to Drugi goto uspjeti da je u žuto 177 00:08:10,690 --> 00:08:12,500 će se izvršiti bez obzira na sve. 178 00:08:12,500 --> 00:08:15,540 To nije povezano s ako je uvjet iznad njega. 179 00:08:15,540 --> 00:08:19,590 >> Pa čak i opet, ne ako to sasvim razumijem što bi to moglo eventualno 180 00:08:19,590 --> 00:08:23,230 se radi, znam da je svaki od tih conditions-- svaki od ovih redaka 181 00:08:23,230 --> 00:08:26,180 je vrlo važan korak u proces provjere 182 00:08:26,180 --> 00:08:28,350 Ako vaši podaci zapravo šifrirana. 183 00:08:28,350 --> 00:08:31,710 Dakle, preskakanje jedan od tih koraka, nije najbolja ideja. 184 00:08:31,710 --> 00:08:34,840 >> Ali zato imamo ovo Drugi goto uspjeti u žuto, 185 00:08:34,840 --> 00:08:36,840 i jer nakon što smo svojevrsni estetski 186 00:08:36,840 --> 00:08:40,480 ga premjestiti na lijevo, gdje ga logično je u ovom trenutku, što 187 00:08:40,480 --> 00:08:43,230 to znači za liniju koda ispod tog drugog goto 188 00:08:43,230 --> 00:08:46,480 ne bi mislite? 189 00:08:46,480 --> 00:08:48,860 To uvijek će biti preskočen. 190 00:08:48,860 --> 00:08:52,100 Dakle gotos uglavnom ne odobravaju iz razloga što stvarno neće ići u, 191 00:08:52,100 --> 00:08:54,940 i doista u CS50 smo skloni ne učiti ovu izjavu Goto, 192 00:08:54,940 --> 00:08:58,130 ali možete misliti goto uspjeti kao smisao go skoka 193 00:08:58,130 --> 00:08:59,600 na nekom drugom dijelu koda. 194 00:08:59,600 --> 00:09:03,120 >> Drugim riječima preskočiti ova zadnja linija uopce, 195 00:09:03,120 --> 00:09:07,420 i tako rezultat ovaj glupi jednostavna pogreška koja je samo 196 00:09:07,420 --> 00:09:10,330 rezultat vjerojatno netko kopiranje i lijepljenje jedan previše 197 00:09:10,330 --> 00:09:14,150 mnogo puta je bio da se cijeli sigurnost iOS i Mac OS 198 00:09:14,150 --> 00:09:18,240 bio ranjiv na presretanja loši dečki za neko vrijeme. 199 00:09:18,240 --> 00:09:19,940 Dok Apple napokon fiksne ovo. 200 00:09:19,940 --> 00:09:23,100 >> Sada, ako neki od vas su zapravo trčanje stare verzije iOS ili Mac OS, 201 00:09:23,100 --> 00:09:27,250 možete ići na gotofail.com koji je web stranica koja je netko postavio 202 00:09:27,250 --> 00:09:29,190 na osnovi utvrditi programatski 203 00:09:29,190 --> 00:09:30,980 Ako je vaše računalo je još uvijek ranjiv. 204 00:09:30,980 --> 00:09:33,600 I iskreno, ako je, to je vjerojatno dobra ideja 205 00:09:33,600 --> 00:09:36,870 ažurirati svoj telefon ili Mac u ovom trenutku. 206 00:09:36,870 --> 00:09:40,120 No, tu, samo dokaz koliko uvažavanje tih nižoj razini 207 00:09:40,120 --> 00:09:42,400 Pojedinosti i pošteno jednostavne ideje mogu stvarno 208 00:09:42,400 --> 00:09:44,590 prevesti u odlukama i problemi koji 209 00:09:44,590 --> 00:09:47,320 affected-- u ovom case-- milijuni ljudi. 210 00:09:47,320 --> 00:09:49,107 >> Sada riječ o administraciji. 211 00:09:49,107 --> 00:09:50,690 Sekcija će početi ovaj dolazak nedjelju. 212 00:09:50,690 --> 00:09:53,360 Vi ćete primiti e-poštu od strane vikenda O dijelu, u kojem trenutku 213 00:09:53,360 --> 00:09:55,290 Proces resekcija počet će, ako ste 214 00:09:55,290 --> 00:09:56,998 shvatio sada imate neke nove sukobe. 215 00:09:56,998 --> 00:10:00,180 Dakle, to se događa svake godine, a mi će primiti u danima koji dolaze. 216 00:10:00,180 --> 00:10:02,430 >> Ured hours-- učiniti zadržati očiju na tom planu ovdje. 217 00:10:02,430 --> 00:10:05,100 Mijenja malo ovaj tjedan, Posebno vrijeme početka 218 00:10:05,100 --> 00:10:08,180 i položaj, tako da se konzultirati da prije odlaska na radno vrijeme 219 00:10:08,180 --> 00:10:09,520 bilo koji od sljedeća četiri dana. 220 00:10:09,520 --> 00:10:12,680 A sada riječ o procjeni, Posebno kao što zaronite u problemu 221 00:10:12,680 --> 00:10:14,350 postavlja jedno i izvan nje. 222 00:10:14,350 --> 00:10:17,070 >> Dakle, po specifikaciji, To su uglavnom 223 00:10:17,070 --> 00:10:20,360 osi duž koje možemo procijeniti svoj rad. 224 00:10:20,360 --> 00:10:23,170 Opseg se odnosi na ono što mjeri svoj kod implementira 225 00:10:23,170 --> 00:10:25,690 značajke potrebna naš specifikaciji. 226 00:10:25,690 --> 00:10:28,290 Drugim riječima, koliko komad set si odgristi. 227 00:10:28,290 --> 00:10:30,440 Jeste li učinili trećinu od toga, pola od toga, 100% od toga. 228 00:10:30,440 --> 00:10:33,000 Čak i ako to nije točno, koliko si ti pokušati? 229 00:10:33,000 --> 00:10:35,290 Dakle, koji bilježi razinu truda i iznosa 230 00:10:35,290 --> 00:10:38,260 na koji si odgrizao Problem je postavljen. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- ovaj jedan, da koliko je vaš broj 232 00:10:40,690 --> 00:10:43,150 U skladu s našim specifikacije i bez bugova. 233 00:10:43,150 --> 00:10:44,770 Tako se to radi ispravno? 234 00:10:44,770 --> 00:10:48,700 Ako smo dali neki doprinos, zar ne daju nam izlaz koji očekujemo? 235 00:10:48,700 --> 00:10:52,570 Design-- sada je to prvi od one osobito kvalitativne, 236 00:10:52,570 --> 00:10:56,180 ili one koje zahtijevaju ljudsku prosudbu. 237 00:10:56,180 --> 00:10:59,690 I doista, to je razlog zašto imamo osoblje tolikih nastavnih bližnjima i naravno 238 00:10:59,690 --> 00:11:00,350 pomoćnici. 239 00:11:00,350 --> 00:11:03,480 U kojoj mjeri je vaše kod napisan dobro? 240 00:11:03,480 --> 00:11:05,810 >> I opet je to vrlo kvalitativna procjena 241 00:11:05,810 --> 00:11:09,100 koji će raditi s vama na dvosmjerno u tjednima koji dolaze. 242 00:11:09,100 --> 00:11:12,060 Tako da kada se ne samo brojčani rezultat, ali i 243 00:11:12,060 --> 00:11:16,682 pismeni rezultat, ili upisali povratne informacije, ili pisanu povratnu informaciju u engleskim riječima. 244 00:11:16,682 --> 00:11:19,640 To je ono što ćemo iskoristiti da vas odveze ka zapravo pisanje bolje kod. 245 00:11:19,640 --> 00:11:23,320 A u predavanju i dijelu, mi ćemo pokušati ukazati greda-- onoliko često koliko smo can-- 246 00:11:23,320 --> 00:11:26,420 ono što čini program ne samo točne i funkcionalno dobro, 247 00:11:26,420 --> 00:11:28,200 ali i dobro osmišljen. 248 00:11:28,200 --> 00:11:31,850 Najučinkovitiji bi to moglo biti, ili čak i najljepše što može biti. 249 00:11:31,850 --> 00:11:33,100 >> Što nas dovodi do stilu. 250 00:11:33,100 --> 00:11:36,876 Stil je u konačnici estetske prosudbe. 251 00:11:36,876 --> 00:11:38,750 Jeste li izabrati dobro imena za svoje varijable? 252 00:11:38,750 --> 00:11:40,330 Jeste li razvedena svoj kod ispravno? 253 00:11:40,330 --> 00:11:44,010 Da li to izgleda dobro, i stoga, da je to lako za drugo ljudsko biće 254 00:11:44,010 --> 00:11:46,550 čitati odgovarajućeg njegove ispravnosti. 255 00:11:46,550 --> 00:11:50,300 >> Sada uglavnom po nastavnom planu, možemo zabiti ove stvari o pet točaka ljestvici. 256 00:11:50,300 --> 00:11:53,640 I neka mi čekić home točka koji je tri je doista dobra. 257 00:11:53,640 --> 00:11:55,550 Vrlo brzo napraviti ljudi početi raditi aritmetiku. 258 00:11:55,550 --> 00:11:58,133 Kad su dobili tri od pet na korektnosti za neke pset 259 00:11:58,133 --> 00:12:02,040 i misle osuditi, ja ću 60% koji je u biti D ili E. 260 00:12:02,040 --> 00:12:03,980 >> To nije način na koji smo razmišljaju o tim brojevima. 261 00:12:03,980 --> 00:12:06,880 Tri je doista dobra, i što smo općenito očekuju na početku 262 00:12:06,880 --> 00:12:09,820 pojma je da ako ste uzimajući hrpa three's-- možda par 263 00:12:09,820 --> 00:12:12,540 sajmova, par fours-- ili par dvojke, par fours-- 264 00:12:12,540 --> 00:12:13,748 to je dobro mjesto za početak. 265 00:12:13,748 --> 00:12:16,320 I tako dok smo vidjeli naviše putanja s vremenom, 266 00:12:16,320 --> 00:12:18,540 ti si u posebno dobrom mjestu. 267 00:12:18,540 --> 00:12:20,752 >> Formula možemo koristiti za težina stvari bitno 268 00:12:20,752 --> 00:12:22,710 to po nastavnom planu, što samo znači da smo mi 269 00:12:22,710 --> 00:12:24,750 daju više težine na ispravnost. 270 00:12:24,750 --> 00:12:27,930 Zato što je to vrlo često ispravnost koji oduzima najviše vremena. 271 00:12:27,930 --> 00:12:28,760 Vjeruj mi sada. 272 00:12:28,760 --> 00:12:31,190 Vi ćete find-- najmanje u jednom pset-- da vas 273 00:12:31,190 --> 00:12:36,790 troše 90% svog vremena radi na 10% problema. 274 00:12:36,790 --> 00:12:39,320 >> I sve na neki način radi osim za jednu ili dvije bugova, 275 00:12:39,320 --> 00:12:41,570 a to su greške koje držati vas kasno u noć. 276 00:12:41,570 --> 00:12:43,380 Oni su ti koji vrsta te pobjeći. 277 00:12:43,380 --> 00:12:45,560 No, nakon što spava na njemu, ili pohađaju radno vrijeme 278 00:12:45,560 --> 00:12:48,844 ili postavljanje pitanja na internetu, je kad dođete do tog cilja 100%, 279 00:12:48,844 --> 00:12:50,760 i to je razlog zašto smo težine najviše ispravnosti. 280 00:12:50,760 --> 00:12:54,102 Dizajn malo manje, i stil malo manje od toga. 281 00:12:54,102 --> 00:12:56,060 No, imajte na mind-- stilu je možda najlakše 282 00:12:56,060 --> 00:12:58,890 od tih odgristi kao i po stilu vodiča. 283 00:12:58,890 --> 00:13:01,580 >> A sada, ozbiljniji Napomena o akademskom poštenju. 284 00:13:01,580 --> 00:13:05,000 CS50 ima nesretni razlika kao najveći proizvođač Ad odbora 285 00:13:05,000 --> 00:13:07,330 slučajevi gotovo svake godine kroz povijest. 286 00:13:07,330 --> 00:13:11,012 To nije zato što studenti varaju u CS50 bilo više od bilo koje druge klase, 287 00:13:11,012 --> 00:13:13,720 nego zato što po prirodi posla, Činjenica da je elektronska, 288 00:13:13,720 --> 00:13:16,636 Činjenica da smo u potrazi za njega, a Činjenica da su računalni znanstvenici, 289 00:13:16,636 --> 00:13:20,570 Mogu reći da smo, nažalost, vrlo dobri u otkrivanju ga. 290 00:13:20,570 --> 00:13:22,710 >> Dakle, što to znači realno? 291 00:13:22,710 --> 00:13:24,820 Tako da, po nastavnom planu, Filozofija Tečaj je 292 00:13:24,820 --> 00:13:28,090 Stvarno ne svode se razumni. 293 00:13:28,090 --> 00:13:31,684 Tu je to linija između radi nečijeg rada na svoju ruku 294 00:13:31,684 --> 00:13:34,100 i uzimajući malo razumno pomoć od prijatelja, 295 00:13:34,100 --> 00:13:38,020 i iskreno raditi taj posao za svoje Prijatelj, ili njega ili nju svoj kod slanja 296 00:13:38,020 --> 00:13:41,080 tako da on ili ona može jednostavno uzeti ili posuditi ga pravo. 297 00:13:41,080 --> 00:13:43,580 I to prelazi granicu da smo izvučeni u klasi. 298 00:13:43,580 --> 00:13:45,410 >> Vidi, plan i program u konačnici za linije 299 00:13:45,410 --> 00:13:48,209 da crtamo kao razumna i nerazumno ponašanje, 300 00:13:48,209 --> 00:13:50,000 ali to stvarno ne kuhati do suštine 301 00:13:50,000 --> 00:13:53,980 svog rada trebaju biti svoj na kraju. 302 00:13:53,980 --> 00:13:56,230 Sada s tim, rekao je, Tu je heuristička. 303 00:13:56,230 --> 00:13:58,980 Jer kao što ste mogli imagine-- od radnog vremena i vizualnim 304 00:13:58,980 --> 00:14:01,060 a video mi smo pokazalo tako far-- CS50 305 00:14:01,060 --> 00:14:04,530 je doista značilo da se kao zajednički i kao kooperativni i kao društveni 306 00:14:04,530 --> 00:14:06,450 moguće. 307 00:14:06,450 --> 00:14:08,570 Kao međusobno surađuje, kao što je strog. 308 00:14:08,570 --> 00:14:11,314 >> No, s tim je rekao, heuristička, kao što ćete vidjeti u programu, 309 00:14:11,314 --> 00:14:12,980 je da kada vi imate neki problem. 310 00:14:12,980 --> 00:14:16,470 Imate neki bug u kodu koji vas ne može riješiti, razumno je za vas 311 00:14:16,470 --> 00:14:18,039 pokazati svoj kod na nekoga drugoga. 312 00:14:18,039 --> 00:14:21,080 Prijatelj čak u razredu, prijatelj sjedi pored vas u uredu sati, 313 00:14:21,080 --> 00:14:22,680 ili član osoblja. 314 00:14:22,680 --> 00:14:25,810 Ali oni ne mogu pokazati svoj kod za vas. 315 00:14:25,810 --> 00:14:27,710 >> Drugim riječima, odgovoriti na vaše question-- 316 00:14:27,710 --> 00:14:29,940 Trebam help-- ne Oh, ovdje je moj broj. 317 00:14:29,940 --> 00:14:32,440 Bacite pogled na ovo i zaključiti iz toga što hoćete. 318 00:14:32,440 --> 00:14:34,580 Sada, naravno, tu je način jasno za igru 319 00:14:34,580 --> 00:14:37,760 ovaj sustav u kojem ću vam pokazati moj broj prije nego što je pitanje. 320 00:14:37,760 --> 00:14:40,150 Možete pokazati mi moju svoj kod Prije nego što je pitanje. 321 00:14:40,150 --> 00:14:45,870 Ali opet vidjeti nastavni plan i program za sitnije detalje gdje je linija. 322 00:14:45,870 --> 00:14:50,606 >> Upravo sada slikati sliku i podijeliti kao transparentno što je više moguće 323 00:14:50,606 --> 00:14:53,480 gdje smo u posljednjih nekoliko godina, ovo je broj slučajeva oglasa odbora 324 00:14:53,480 --> 00:14:56,260 da je CS50 je imao više U posljednjih sedam godina. 325 00:14:56,260 --> 00:14:58,717 Sa 14 slučajeva ova najnovija jesen. 326 00:14:58,717 --> 00:15:01,300 Što se tiče studenata koji su uključeni, bilo je 20-ak neki studenti 327 00:15:01,300 --> 00:15:02,490 ove protekle jeseni. 328 00:15:02,490 --> 00:15:05,670 Tu je bio vrhunac 33 studenti prije nekoliko godina. 329 00:15:05,670 --> 00:15:08,830 Mnogi od njih su, nažalost, više nije ovdje na kampusu. 330 00:15:08,830 --> 00:15:13,100 >> Studenti koji su uključeni u postotku Klasa je povijesno u rasponu od 0% 331 00:15:13,100 --> 00:15:17,300 na 5,3%, što je samo reći to je godišnje izazov. 332 00:15:17,300 --> 00:15:20,390 I prema tom cilju, što želimo učiniti je prenijeti jednu 333 00:15:20,390 --> 00:15:24,310 da smo dd-- samo FYI-- usporediti na pravičnost za one studente koji 334 00:15:24,310 --> 00:15:26,520 su slijedeći liniju u skladu s tim. 335 00:15:26,520 --> 00:15:29,620 Mi radimo usporediti sve trenutne podnesci protiv svih dosadašnjih misija 336 00:15:29,620 --> 00:15:30,840 od posljednjih mnogo godina. 337 00:15:30,840 --> 00:15:33,620 >> Znamo također kako na Google okolo i pronaći kod spremišta 338 00:15:33,620 --> 00:15:36,360 online, forumima online, online posao sučelja. 339 00:15:36,360 --> 00:15:41,580 Ako student može ga naći, možemo sigurno Smatraju da koliko god smo sa žaljenjem učiniti. 340 00:15:41,580 --> 00:15:45,330 Dakle, ono što ćete vidjeti u programu iako je to žaljenje klauzula. 341 00:15:45,330 --> 00:15:47,500 Ja mogu sigurno cijenim, i svi smo se 342 00:15:47,500 --> 00:15:50,870 osoblja nakon što je učinio tijek kao to, ili ovo samo po sebi tijekom vremena, 343 00:15:50,870 --> 00:15:53,997 Sigurno znate kako je to kad život dobiva na putu kada imate 344 00:15:53,997 --> 00:15:56,080 Neki kasno navečer deadline-- ne samo u ovoj klasi, 345 00:15:56,080 --> 00:15:58,660 ali another-- kada ste potpuno iscrpljen, pod stresom, 346 00:15:58,660 --> 00:16:00,659 ima prekomjeran broj drugih stvari koje treba učiniti. 347 00:16:00,659 --> 00:16:03,660 Vi ćete napraviti u nekom trenutku u Život svakako loša, možda kasno 348 00:16:03,660 --> 00:16:04,620 noć odluka. 349 00:16:04,620 --> 00:16:06,520 >> Dakle, po nastavnom planu, ne postoji ta točka, 350 00:16:06,520 --> 00:16:10,629 tako da ako u roku od 72 sata od donošenja Neki loša odluka, imate do njega 351 00:16:10,629 --> 00:16:12,670 i doprijeti do mene i jedan od šefova tečaja je 352 00:16:12,670 --> 00:16:14,300 , a mi ćemo imati razgovor. 353 00:16:14,300 --> 00:16:16,220 Mi ćemo nositi stvari interno u nadi 354 00:16:16,220 --> 00:16:18,770 o to postaje više Nastava trenutak ili život lekciju, 355 00:16:18,770 --> 00:16:22,120 i nije nešto s osobito drastične posljedice 356 00:16:22,120 --> 00:16:24,570 kao što ste mogli vidjeti na ovim kartama ovdje. 357 00:16:24,570 --> 00:16:26,540 >> Dakle, to je vrlo ozbiljan ton. 358 00:16:26,540 --> 00:16:29,960 Zadržimo se za samo nekoliko sekundi razbiti napetost. 359 00:16:29,960 --> 00:16:34,442 >> [Muziciranja] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> DAVID J. Malan: U redu, pa kako je to bilo za Segue? 362 00:17:20,250 --> 00:17:22,059 Za današnje osnovne teme. 363 00:17:22,059 --> 00:17:23,859 Prvi od kojih je apstrakcija. 364 00:17:23,859 --> 00:17:26,900 Još jedan od kojih će biti prikaz podataka, koji iskreno 365 00:17:26,900 --> 00:17:31,640 je stvarno suha način da se kaže kako možemo ići oko rješavanja problema i razmišljanja 366 00:17:31,640 --> 00:17:33,250 O rješavanju problema? 367 00:17:33,250 --> 00:17:37,285 Pa vidjeli ste u nule, a vi ste Vidio je možda već u pset1 s C 368 00:17:37,285 --> 00:17:39,930 da ne samo da možete koristiti funkcije, kao što su printf, 369 00:17:39,930 --> 00:17:42,770 da drugi ljudi u posljednjih godina pisao za vas. 370 00:17:42,770 --> 00:17:45,340 Također možete napisati svoje funkcije. 371 00:17:45,340 --> 00:17:48,440 >> A čak i ako ne bi mogli imati to učinio u C, a iskreno u pset1 372 00:17:48,440 --> 00:17:51,866 ti stvarno ne trebaju napisati svoje vlastitu funkciju, jer je problem-- 373 00:17:51,866 --> 00:17:53,990 a možda i zastrašujuće u Prvi glance-- vidjet ćete 374 00:17:53,990 --> 00:17:57,910 može u konačnici biti riješen s nije sve što je mnogo linija koda. 375 00:17:57,910 --> 00:18:01,140 Ali s tim, rekao je, u smislu pisanja svoju funkciju, 376 00:18:01,140 --> 00:18:03,570 shvatili da je C ne daju li ta sposobnost. 377 00:18:03,570 --> 00:18:06,940 >> Ja ću otići u današnjem izvornog koda, koji je dostupan već na internetu, 378 00:18:06,940 --> 00:18:10,900 i ja ću ići naprijed i otvoriti se program pod nazivom funkcija 0.C, 379 00:18:10,900 --> 00:18:14,620 au funkciji nula vidjet ćemo nekoliko stvari. 380 00:18:14,620 --> 00:18:19,160 U prvim linijama 18 kroz 23 mi je glavna funkcija. 381 00:18:19,160 --> 00:18:22,414 I sad kad smo počeli čitati kod koji mi ne pišete u letu, 382 00:18:22,414 --> 00:18:25,080 ali umjesto toga sam napisao unaprijed ili da ste u problemu postaviti 383 00:18:25,080 --> 00:18:27,910 moglo primiti što napisano unaprijed. 384 00:18:27,910 --> 00:18:30,040 Dobar način za početak čitajući tuđe kôd 385 00:18:30,040 --> 00:18:31,400 je tražiti glavne funkcije. 386 00:18:31,400 --> 00:18:34,420 Shvatiti gdje da je ulazak Stvar je u tome da se izvodi program, 387 00:18:34,420 --> 00:18:36,580 i zatim ga slijede logično od tamo. 388 00:18:36,580 --> 00:18:40,190 >> Dakle, ovaj programski očito ispisuje Vaše ime slijede dvotočka. 389 00:18:40,190 --> 00:18:42,490 Mi smo tada koristiti GetString iz CS50 knjižnici 390 00:18:42,490 --> 00:18:46,050 dobiti niz, ili riječ ili frazu od korisnika na tipkovnici. 391 00:18:46,050 --> 00:18:48,390 A tu je i ovo stvar ovdje-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Sada PrintName nije funkcija koja dolazi s C. 393 00:18:51,420 --> 00:18:52,970 To nije u standardnom io.h. 394 00:18:52,970 --> 00:18:55,570 To nije u CS50.h. 395 00:18:55,570 --> 00:18:57,880 To je već u istoj datoteci. 396 00:18:57,880 --> 00:19:01,000 Uočite da sam se pomaknite prema dolje A bit-- linije 25 do 27-- 397 00:19:01,000 --> 00:19:05,330 to je samo lijepa način komentiranja Vaš kod pomoću zvijezde i kose crte. 398 00:19:05,330 --> 00:19:07,320 To je multi-line komentirati, a to je samo 399 00:19:07,320 --> 00:19:10,570 moj opis u plavetnilu ono što je ova funkcija radi. 400 00:19:10,570 --> 00:19:14,530 >> Budući da u redovima 28. do 31., Ja sam napisao super jednostavnu funkciju 401 00:19:14,530 --> 00:19:16,280 čije se ime PrintName. 402 00:19:16,280 --> 00:19:19,560 To traje koliko argumenti bi ti rekao? 403 00:19:19,560 --> 00:19:25,120 Dakle, jedan argument-- jer postoji jedan Argument navedene unutar zagrada. 404 00:19:25,120 --> 00:19:27,000 Tip koji je Gudački. 405 00:19:27,000 --> 00:19:30,240 Koji je reći PrintName je poput ove crne kutije 406 00:19:30,240 --> 00:19:32,910 ili funkcija koja traje kao ulazni niz. 407 00:19:32,910 --> 00:19:35,730 >> I ime tog String povoljno će biti ime. 408 00:19:35,730 --> 00:19:37,840 Ne S, ne N, ali ime. 409 00:19:37,840 --> 00:19:41,090 Dakle, što to PrintName učiniti? 410 00:19:41,090 --> 00:19:42,210 Lijepo je jednostavna. 411 00:19:42,210 --> 00:19:45,390 Baš kao jedan redak koda za printf, ali očito ga 412 00:19:45,390 --> 00:19:47,950 ispisuje "Hello", tako i tako. 413 00:19:47,950 --> 00:19:50,070 Gdje je taj i taj dolazi iz argumenta. 414 00:19:50,070 --> 00:19:52,300 >> Sada to nije velika inovacija ovdje. 415 00:19:52,300 --> 00:19:56,710 Stvarno, ja sam uzeo program koji bi mogao napisane su s jedne linije koda 416 00:19:56,710 --> 00:20:00,190 stavljajući to ovdje, i to promijenio u nešto 417 00:20:00,190 --> 00:20:04,920 koji uključuje neke od šest ili sedam ili tako linija koda skroz ovdje dolje. 418 00:20:04,920 --> 00:20:08,190 >> Ali to je prakticiranje Princip poznat kao apstrakcije. 419 00:20:08,190 --> 00:20:12,550 Vrsta inkapsulacijskim unutar nova funkcija koja ima ime, i bolje 420 00:20:12,550 --> 00:20:14,590 ali to ime je doslovno kaže ono što čini. 421 00:20:14,590 --> 00:20:16,880 Mislim printf-- to nije Posebno opisno. 422 00:20:16,880 --> 00:20:18,932 Ako želim stvoriti zagonetka komad, ili ako sam 423 00:20:18,932 --> 00:20:21,140 želite stvoriti funkciju koji ispisuje nečije ime, 424 00:20:21,140 --> 00:20:23,230 Ljepota to je da mogu zapravo 425 00:20:23,230 --> 00:20:27,170 dati tu funkciju ime koji opisuje ono što čini. 426 00:20:27,170 --> 00:20:29,844 >> Sada je potrebno u ulaz koji Ja sam svojevoljno pozvao ime, 427 00:20:29,844 --> 00:20:32,760 ali i to je predivno opisno umjesto da bude malo više 428 00:20:32,760 --> 00:20:36,140 generički kao S. i nevažeće, za sada, samo znači 429 00:20:36,140 --> 00:20:38,330 da ova funkcija ne ruka me nazad ništa. 430 00:20:38,330 --> 00:20:41,127 To nije kao da GetString Doslovno mi ruke natrag niz 431 00:20:41,127 --> 00:20:43,960 kao što smo učinili s komadićima papira sa svojim kolegama prošlog tjedna, 432 00:20:43,960 --> 00:20:45,990 nego je to samo ima nuspojavu. 433 00:20:45,990 --> 00:20:48,080 Ona ispisuje nešto na zaslonu. 434 00:20:48,080 --> 00:20:53,880 >> Dakle, na kraju dana, ako ne bi funkcija-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 vidjet ćemo da je pita za moje ime. 436 00:20:55,450 --> 00:20:58,150 I tip Davida, a vrste iz moje ime. 437 00:20:58,150 --> 00:21:01,080 Ako sam to učiniti opet s Robom, to će reći: "Zdravo, Rob." 438 00:21:01,080 --> 00:21:04,280 Tako jednostavna ideja, ali možda ekstrapolirati toga psihički 439 00:21:04,280 --> 00:21:06,750 da kao vaši programi dobiti malo kompliciranije, 440 00:21:06,750 --> 00:21:10,290 i što želite napisati komad broj i poziv da code-- Pozovi 441 00:21:10,290 --> 00:21:13,270 da code-- neki opisno ime kao PrintName, 442 00:21:13,270 --> 00:21:15,600 C ne priuštiti nam tu mogućnost. 443 00:21:15,600 --> 00:21:17,660 >> Evo još jedan jednostavan primjer. 444 00:21:17,660 --> 00:21:22,940 Na primjer, ako sam otvoriti file od danas zove return.c, 445 00:21:22,940 --> 00:21:24,270 primijetiti ono što sam učinio ovdje. 446 00:21:24,270 --> 00:21:26,330 Većina tog glavna funkcija je printf. 447 00:21:26,330 --> 00:21:30,360 Prvi put sam proizvoljno formatirati varijabla zove x na broj 2. 448 00:21:30,360 --> 00:21:34,110 I onda isprintati "x je sada % I "prolazi u vrijednosti od x. 449 00:21:34,110 --> 00:21:35,500 Dakle, ja sam samo rekao ono što je. 450 00:21:35,500 --> 00:21:37,208 >> Sada sam samo hrabro tvrdeći sa printf. 451 00:21:37,208 --> 00:21:42,050 Ja sam rotacije tu vrijednost x, a ja sam Pritom pozivom funkcije 452 00:21:42,050 --> 00:21:45,590 zove kocka donošenje u X kao argument, 453 00:21:45,590 --> 00:21:49,300 a zatim spremite izlaz u samoj varijable, x. 454 00:21:49,300 --> 00:21:51,340 Tako sam clobbering vrijednost x. 455 00:21:51,340 --> 00:21:53,380 Ja sam preskakanja Vrijednost x s god 456 00:21:53,380 --> 00:21:56,510 Rezultat poziva Ova funkcija je kocka. 457 00:21:56,510 --> 00:21:59,530 I onda sam samo isprintati neke pahuljasto stvari ovdje rekao ono što sam učinio. 458 00:21:59,530 --> 00:22:01,600 >> Pa što onda je kocka? 459 00:22:01,600 --> 00:22:03,510 Obavijest ono što je bitno drugačija. 460 00:22:03,510 --> 00:22:05,540 Ja sam s obzirom na funkciju naziv kao i prije. 461 00:22:05,540 --> 00:22:08,270 Ja sam navedeno ime za argument. 462 00:22:08,270 --> 00:22:11,650 Ovaj put to se zove n umjesto imena, ali ja bi se moglo nazvati god hoću. 463 00:22:11,650 --> 00:22:12,650 Ali ovo je drugačije. 464 00:22:12,650 --> 00:22:14,080 Ova stvar na lijevoj strani. 465 00:22:14,080 --> 00:22:16,290 Ranije je to bilo ono što ključne riječi? 466 00:22:16,290 --> 00:22:16,870 Dječaci. 467 00:22:16,870 --> 00:22:18,580 Sada je očito int. 468 00:22:18,580 --> 00:22:20,630 >> Dakle, ono što je možda to oduzeti? 469 00:22:20,630 --> 00:22:24,090 Dok nevažećih označava svojevrsni ništavilo, a to je bio slučaj. 470 00:22:24,090 --> 00:22:25,970 PrintName vratio ništa. 471 00:22:25,970 --> 00:22:27,942 To nije nešto, ali to mi nije ruku natrag 472 00:22:27,942 --> 00:22:30,650 nešto što bih mogla staviti na lijeva strana je znak jednakosti 473 00:22:30,650 --> 00:22:32,460 kao što sam učinio ovdje na liniji 22. 474 00:22:32,460 --> 00:22:36,780 >> Dakle, ako ja kažem u na liniji 30, što je to vjerojatno podrazumijeva 475 00:22:36,780 --> 00:22:38,610 o tome što kocka čini za mene? 476 00:22:38,610 --> 00:22:41,110 Da? 477 00:22:41,110 --> 00:22:42,310 To vraća cijeli broj. 478 00:22:42,310 --> 00:22:44,590 Tako da mi ruke natrag, za instanca, komad papira 479 00:22:44,590 --> 00:22:46,580 na kojoj je napisao odgovor. 480 00:22:46,580 --> 00:22:50,130 2 kubu, ili 3 kubu, ili 4 cubed-- sve što sam prošao u, 481 00:22:50,130 --> 00:22:51,540 i kako sam provesti ovo? 482 00:22:51,540 --> 00:22:54,810 Pa, baš n puta n puta n Tako sam mogao kocke vrijednost. 483 00:22:54,810 --> 00:22:57,110 Pa opet, super jednostavna Ideja, ali demonstrativno 484 00:22:57,110 --> 00:23:00,100 sada kako možemo pisati funkcije koja nas zapravo imali natrag 485 00:23:00,100 --> 00:23:02,380 vrijednosti koje bi mogle biti od interesa. 486 00:23:02,380 --> 00:23:05,740 >> Pogledajmo jedan zadnji primjer ovdje zove funkcija jedan. 487 00:23:05,740 --> 00:23:08,530 U ovom primjeru, ona počinje dobiti više uvjerljiv. 488 00:23:08,530 --> 00:23:12,400 Tako je u funkciji jednom, ovaj program-- obavijest u konačnici 489 00:23:12,400 --> 00:23:14,920 poziva funkcija zove GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt nije funkcija u CS50 knjižnici, 491 00:23:17,800 --> 00:23:20,400 No, mi smo odlučili Željeli to postojati. 492 00:23:20,400 --> 00:23:24,550 >> Dakle, ako smo se pomaknite prema dolje kasnije u spisu, primijetiti kako sam otišao o provedbi 493 00:23:24,550 --> 00:23:26,560 dobili pozitivan int, a ja kažu da je uvjerljiviji 494 00:23:26,560 --> 00:23:28,992 jer ovo je pristojan broj linija koda. 495 00:23:28,992 --> 00:23:30,700 To je ne samo glup mala igračka programa. 496 00:23:30,700 --> 00:23:33,870 To je zapravo dobio neki provjerama i radite nešto više koristan. 497 00:23:33,870 --> 00:23:38,470 >> Dakle, ako ne ste vidjeli prohod Video koji smo ugrađeni u pset1, 498 00:23:38,470 --> 00:23:42,350 Znam da je to vrsta petlja u C, slični u duhu 499 00:23:42,350 --> 00:23:44,270 na vrste stvari ispočetka može učiniti. 500 00:23:44,270 --> 00:23:46,320 I to kaže to učiniti. 501 00:23:46,320 --> 00:23:47,500 Ispis ovo. 502 00:23:47,500 --> 00:23:51,860 Onda ići naprijed i dobiti n- dobiti int i pohraniti ga u N, 503 00:23:51,860 --> 00:23:55,760 i zadržati to opet i opet i opet tako dugo dok n je manje od jedan. 504 00:23:55,760 --> 00:23:58,720 >> Dakle, n će biti manje od jedan samo ako je ljudsko ne surađuje. 505 00:23:58,720 --> 00:24:01,980 Ako on ili ona je tipkati u 0 ili -1 ili -50, 506 00:24:01,980 --> 00:24:04,790 Ova petlja će se zadržati i opet izvršenja. 507 00:24:04,790 --> 00:24:07,549 I na kraju primijetiti, ja jednostavno vratiti vrijednost. 508 00:24:07,549 --> 00:24:09,590 Tako sada imamo funkciju kako bi bilo lijepo 509 00:24:09,590 --> 00:24:14,040 ako bi CS50 implementirati u CS50.h i CS50.c za vas, 510 00:24:14,040 --> 00:24:16,520 ali evo sada možemo provesti ovo sami. 511 00:24:16,520 --> 00:24:19,230 >> No, dva Komentari na nekim ključnim detaljima. 512 00:24:19,230 --> 00:24:24,390 One-- zašto Izjavljujem int n, mislite li da, na liniji 29. 513 00:24:24,390 --> 00:24:27,139 umjesto da samo radi ovo ovdje, što je 514 00:24:27,139 --> 00:24:28,930 više u skladu s što smo radili prošli tjedan? 515 00:24:28,930 --> 00:24:29,430 Da? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Dobra misao. 518 00:24:35,110 --> 00:24:37,080 Dakle, ako bismo ga stavili ovdje, to je kao da smo 519 00:24:37,080 --> 00:24:39,110 zadržati i opet ga progla. 520 00:24:39,110 --> 00:24:42,000 To samo po sebi je nije problem, sami po sebi, 521 00:24:42,000 --> 00:24:43,940 jer mi samo treba nakon i vrijednost 522 00:24:43,940 --> 00:24:45,330 ćemo dobiti novu svejedno. 523 00:24:45,330 --> 00:24:45,940 No, dobra misao. 524 00:24:45,940 --> 00:24:46,440 Da? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Zatvori. 527 00:24:53,330 --> 00:24:59,030 Pa zato sam proglasila n o Linija 29 izvan petlje, 528 00:24:59,030 --> 00:25:01,390 to je dostupan u cijelom Cijela ova funkcija. 529 00:25:01,390 --> 00:25:05,400 Ne i druge funkcije, jer n je još uvijek unutar tih kovrčava 530 00:25:05,400 --> 00:25:06,470 aparatić ovdje. 531 00:25:06,470 --> 00:25:07,940 So-- sigurni. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Točno. 534 00:25:12,940 --> 00:25:14,356 Dakle, ovo je još do točke. 535 00:25:14,356 --> 00:25:18,600 Ako umjesto proglasila N upravo ovdje na liniji 32, 536 00:25:18,600 --> 00:25:22,340 to je problematično, jer pogodak gdje drugdje moram mu pristupiti? 537 00:25:22,340 --> 00:25:25,620 Na liniji 34, i jednostavno pravilo je 538 00:25:25,620 --> 00:25:30,060 da možete koristiti samo varijabla unutar najnovijim vitičastim zagradama 539 00:25:30,060 --> 00:25:31,420 u kojem ste ga proglasili. 540 00:25:31,420 --> 00:25:35,230 >> Nažalost, linija 34 je jedna linija prekasno, 541 00:25:35,230 --> 00:25:38,560 jer sam već zatvorila kovrčava braće na liniji 33 542 00:25:38,560 --> 00:25:41,220 koji odgovara kovrčava braće na liniji 30. 543 00:25:41,220 --> 00:25:44,180 I tako je to način da se kaže da je ova varijabla int je scoped, 544 00:25:44,180 --> 00:25:46,970 da se tako izrazim, da samo unutar od onih vitičastih zagrada. 545 00:25:46,970 --> 00:25:48,910 To jednostavno ne postoji izvan njih. 546 00:25:48,910 --> 00:25:51,580 >> Pa doista, ako sam to učiniti krivu, dopustite mi da spasi kôd 547 00:25:51,580 --> 00:25:53,530 kao što je to pogrešno je-- napisano. 548 00:25:53,530 --> 00:25:57,990 Dopustite mi ići naprijed i čine Funkcija-1, i notice-- pogreške. 549 00:25:57,990 --> 00:26:03,502 Korištenje neprijavljenog identifikator n na liniji 35, koji je upravo ovdje. 550 00:26:03,502 --> 00:26:05,210 A ako mi se pomicali gore Nadalje, još jedan. 551 00:26:05,210 --> 00:26:08,750 Korištenje neprijavljeni Oznaka N na liniji 34. 552 00:26:08,750 --> 00:26:11,200 >> Dakle, prevodilac, jeka, je primijetio da je to samo 553 00:26:11,200 --> 00:26:13,720 ne postoji čak jasno da je tamo vizualno. 554 00:26:13,720 --> 00:26:16,090 Tako jednostavan škripac je to proglašenje tamo. 555 00:26:16,090 --> 00:26:18,790 >> Sada neka mi dođite do vrhu datoteke. 556 00:26:18,790 --> 00:26:21,080 Ono što skače na vas kao biti malo drugačije 557 00:26:21,080 --> 00:26:23,070 od stvari smo gledali u zadnjih tjedan dana? 558 00:26:23,070 --> 00:26:26,990 Ne samo da imam ime, ne samo da Imam neke oštre uključuje do vrha, 559 00:26:26,990 --> 00:26:29,340 Imam nešto što sam nazivajući prototip. 560 00:26:29,340 --> 00:26:36,100 Sada kada je izgleda jako slično onome što samo smo vidjeli maloprije na liniji 27. 561 00:26:36,100 --> 00:26:39,230 >> Tako ćemo zaključiti iz drugačije Poruka o pogrešci zašto sam to učinio. 562 00:26:39,230 --> 00:26:42,050 Dopustite mi ići naprijed i izbrisati ove linije postoji. 563 00:26:42,050 --> 00:26:44,240 I tako ne znamo ništa o prototipu. 564 00:26:44,240 --> 00:26:45,430 Remake ovu sliku. 565 00:26:45,430 --> 00:26:46,890 Napravite funkciju jednog. 566 00:26:46,890 --> 00:26:48,090 A sada, prokleto, četiri pogreške. 567 00:26:48,090 --> 00:26:50,220 Idemo dođite do prvog. 568 00:26:50,220 --> 00:26:55,070 >> Implicitni izjava o funkciji dobili pozitivan int nije valjan u C99. 569 00:26:55,070 --> 00:26:57,780 C99 samo znači 1999 verzija jeziku 570 00:26:57,780 --> 00:26:59,710 C, što je ono što doista koristite. 571 00:26:59,710 --> 00:27:01,050 Dakle, što to znači? 572 00:27:01,050 --> 00:27:05,250 Pa C-- i točnije C compilers-- su prilično glupi programi. 573 00:27:05,250 --> 00:27:07,420 Oni znaju samo ono što ste Rekao im, a to je 574 00:27:07,420 --> 00:27:08,960 zapravo tematsko od prošlog tjedna. 575 00:27:08,960 --> 00:27:12,910 >> Problem je u tome da ako odem o provedbi ime ovdje, 576 00:27:12,910 --> 00:27:17,640 i ja pozvati funkciju nazvanu GetPositiveInt ovdje na liniji 20, 577 00:27:17,640 --> 00:27:22,520 da je funkcija tehnički ne postojati sve dok prevodilac vidi liniju 27. 578 00:27:22,520 --> 00:27:25,450 Nažalost, prevodilac obavljanja stvari gore, dolje, lijevo, desno, 579 00:27:25,450 --> 00:27:29,580 pa zato što nije vidio Provedba GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 ali vidi ti pokušavaš ga koristiti ovdje, 581 00:27:32,400 --> 00:27:35,810 to samo ide na bail-- vikati na što s pogreškom message-- možda 582 00:27:35,810 --> 00:27:38,440 grobni, a ne zapravo sastaviti datoteku. 583 00:27:38,440 --> 00:27:41,940 >> Tako tzv prototip gore Ovdje je doduše suvišan. 584 00:27:41,940 --> 00:27:47,870 Doslovno, otišao sam ovdje i ja kopirati i zalijepiti ovo i stavio sam ovdje. 585 00:27:47,870 --> 00:27:51,020 Praznina će biti više pravilno, pa ćemo doslovno kopirati i zalijepiti ovaj put. 586 00:27:51,020 --> 00:27:52,854 Doslovno sam kopirati i zalijepiti. 587 00:27:52,854 --> 00:27:54,270 Stvarno jednako kao mrvica kruha. 588 00:27:54,270 --> 00:27:56,260 >> Malo trag na prevodilac. 589 00:27:56,260 --> 00:27:58,860 Ne znam što se to radi još, ali ja sam obećao da će vas 590 00:27:58,860 --> 00:28:00,260 da će postojati na kraju. 591 00:28:00,260 --> 00:28:04,010 I to je razlog zašto ovaj line-- u Linija 16-- završava zarezom. 592 00:28:04,010 --> 00:28:05,486 To je suvišan po dizajnu. 593 00:28:05,486 --> 00:28:05,986 Da? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Ako niste povezati svoju knjižnicu do do- Oh, dobro pitanje. 596 00:28:14,360 --> 00:28:17,350 Sharp uključuje zaglavlje datoteke inkluzije. 597 00:28:17,350 --> 00:28:20,040 Trebate be-- trebalo gotovo uvijek biti na samom vrhu 598 00:28:20,040 --> 00:28:23,270 datoteke za similar-- za isti razlog, da. 599 00:28:23,270 --> 00:28:26,430 Budući da je u standardnom io.h je doslovno linija 600 00:28:26,430 --> 00:28:30,560 kao što je ovaj, ali s riječju printf, a sa svojim argumentima i njegovom tipu povratka. 601 00:28:30,560 --> 00:28:33,310 I tako su radili oštro su se ovdje, ono što ste radili doslovno 602 00:28:33,310 --> 00:28:36,380 je kopirati i zalijepiti sadržaj netko drugi napisao gore na vrh. 603 00:28:36,380 --> 00:28:39,660 Time cluing svoj kod u Činjenica da postoje one funkcije. 604 00:28:39,660 --> 00:28:40,160 Da? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Apsolutno. 607 00:28:48,260 --> 00:28:51,690 Dakle, vrlo pametan i ispravan rješenje bi bilo, znate što? 608 00:28:51,690 --> 00:28:53,760 Ne znam što Prototip je, ali znam 609 00:28:53,760 --> 00:28:56,390 ako ja razumijem da je C je samo nijem i ponovno promisi vrha do dna. 610 00:28:56,390 --> 00:28:57,820 Pa ajmo to dati ono što želi. 611 00:28:57,820 --> 00:29:01,650 Idemo smanjiti taj kod, zalijepiti ga vrhu, a sada gurati glavni dolje. 612 00:29:01,650 --> 00:29:03,470 To bi također riješiti problem. 613 00:29:03,470 --> 00:29:07,409 >> No, što bi vrlo lako doći do Scenarij u kojem trebate zvati B, 614 00:29:07,409 --> 00:29:10,075 a možda i B poziva natrag u A. Ovo nešto što se zove rekurzija, 615 00:29:10,075 --> 00:29:11,370 a mi ćemo se vratiti na to. 616 00:29:11,370 --> 00:29:13,911 I to može i ne mora biti dobra stvar, ali definitivno može 617 00:29:13,911 --> 00:29:15,110 razbiti ovo rješenje. 618 00:29:15,110 --> 00:29:17,690 >> A osim toga, ja bih tvrde stilski, 619 00:29:17,690 --> 00:29:20,760 pogotovo kada svoje programe postanu ovako dugo i ovako dugo, 620 00:29:20,760 --> 00:29:23,064 to je samo super povoljno staviti na vrhu glavne 621 00:29:23,064 --> 00:29:25,730 jer to je stvar najviše programeri će stalo. 622 00:29:25,730 --> 00:29:28,150 I tako je malo čišći, nedvojbeno, kako to učiniti na način 623 00:29:28,150 --> 00:29:30,380 Ja izvorno je to učinio s prototip čak 624 00:29:30,380 --> 00:29:33,396 iako to izgleda malo suvišan na prvi pogled. 625 00:29:33,396 --> 00:29:33,895 Da? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Žao nam je, može li se reći glasnije? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Ako se prebacite na mjestima Provedba i prototip? 630 00:29:49,580 --> 00:29:51,270 Dakle, to je dobro pitanje. 631 00:29:51,270 --> 00:29:53,780 Ako ponovno proglasi ovaj dolje ovdje, da vidimo što će se dogoditi. 632 00:29:53,780 --> 00:29:55,530 Dakle, ako sam stavio ovaj dolje Ovdje, vi govorite. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Oh, ispričavam se. 635 00:29:58,360 --> 00:29:58,859 Glasnije? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Čak i glasnije. 638 00:30:04,011 --> 00:30:04,760 Ah, dobro pitanje. 639 00:30:04,760 --> 00:30:05,860 Bi li to poništiti funkciju? 640 00:30:05,860 --> 00:30:08,901 Znate, nakon svih ovih godina, ja nikada nisu stavili prototip nakon toga. 641 00:30:08,901 --> 00:30:13,810 Tako ćemo učiniti da funkciju-1 nakon što da radi. 642 00:30:13,810 --> 00:30:15,279 >> [Mrmlja] 643 00:30:15,279 --> 00:30:16,320 DAVID J. Malan: Oh, čekaj. 644 00:30:16,320 --> 00:30:17,944 Mi i dalje morati staviti sve do vrha. 645 00:30:17,944 --> 00:30:21,400 Dakle, učinimo to ovdje, ako sam razumijevanje vaše pitanje ispravno. 646 00:30:21,400 --> 00:30:24,700 Ja sam stavljajući sve, uključujući Prototip je gore glavni, 647 00:30:24,700 --> 00:30:28,180 ali ja sam stavljajući prototip nastavku provedbe. 648 00:30:28,180 --> 00:30:33,190 >> Dakle, ako sam napraviti jednu, ciljam natrag error-- neiskorištena varijabla n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Oh, tamo. 651 00:30:37,860 --> 00:30:38,360 Hvala vam. 652 00:30:38,360 --> 00:30:39,430 Da vidimo, možemo riješiti ovo. 653 00:30:39,430 --> 00:30:41,304 To je drugačija bug, pa neka je ignorirati. 654 00:30:41,304 --> 00:30:43,910 Idemo jako brzo preurediti to. 655 00:30:43,910 --> 00:30:48,100 >> U redu, tako da su podaci argument nije koristi format string 656 00:30:48,100 --> 00:30:52,310 n- Oh, to je zato što Promijenio sam da to ovdje. 657 00:30:52,310 --> 00:30:55,885 U redu, znamo što je odgovor ide to-- redu, idemo. 658 00:30:55,885 --> 00:31:00,560 Ah, hvala za pozitivni. 659 00:31:00,560 --> 00:31:03,430 U redu, ja ću popraviti ovaj kod after-- ignorirati ovu posebnu bug 660 00:31:03,430 --> 00:31:08,300 jer to was-- to radi je odgovor. 661 00:31:08,300 --> 00:31:11,560 >> Dakle, to ne prepisati ono što ste upravo učinio. 662 00:31:11,560 --> 00:31:14,800 Sumnjam prevodilac je napisan tako 663 00:31:14,800 --> 00:31:18,420 da je ignoriranje svoj prototip jer tijelo, da se tako izrazim, 664 00:31:18,420 --> 00:31:20,922 od funkcija već provedene su viši. 665 00:31:20,922 --> 00:31:23,380 Ja bi se stvarno konzultirati priručnik o prevodilac 666 00:31:23,380 --> 00:31:26,171 razumjeti ako postoji bilo koji drugi Implikacija, ali na prvi pogled 667 00:31:26,171 --> 00:31:29,290 Upravo tako težak i eksperimentiranje, čini se da nema utjecaja. 668 00:31:29,290 --> 00:31:30,730 Dobro pitanje. 669 00:31:30,730 --> 00:31:33,660 >> Tako ćemo se kretati sada, kreće daleko od nuspojava koje 670 00:31:33,660 --> 00:31:36,660 Funkcije koje su učiniti nešto slično vizualno na zaslonu s printf, 671 00:31:36,660 --> 00:31:38,090 ali ne vratiti vrijednost. 672 00:31:38,090 --> 00:31:41,550 I funkcija koje imaju povrat Vrijednosti kao što smo upravo vidjeli nekoliko. 673 00:31:41,550 --> 00:31:45,350 Već smo vidjeli ovaj pojam opsega, pa ćemo vidjeti to opet i opet. 674 00:31:45,350 --> 00:31:47,210 Ali za sada, opet, koristiti pravilo 675 00:31:47,210 --> 00:31:51,410 da varijabla se može koristiti samo Unutrašnjost je nedavno otvorila 676 00:31:51,410 --> 00:31:54,350 i zatvorenih vitičastim zagradama Kao što smo Vidio je u tom primjeru. 677 00:31:54,350 --> 00:31:56,910 >> I kao što je istaknuo, je ability-- 678 00:31:56,910 --> 00:32:00,040 mogli riješiti neke od tih problema stavljajući varijablu na globalnoj razini 679 00:32:00,040 --> 00:32:01,290 na samom vrhu datoteke. 680 00:32:01,290 --> 00:32:03,630 No, u gotovo svim slučajevima mi bi namrštiti na to, 681 00:32:03,630 --> 00:32:06,170 i doista ni ići u tu otopinu za sada. 682 00:32:06,170 --> 00:32:09,890 Dakle, za sada, takeaway je da varijable imaju taj pojam opsega. 683 00:32:09,890 --> 00:32:13,430 >> Ali sada pogledajmo još jedan suhi način zapravo u potrazi 684 00:32:13,430 --> 00:32:15,810 na neki prilično zanimljivi Provedbeni detalji. 685 00:32:15,810 --> 00:32:17,810 Kako bismo mogli predstavlja informaciju. 686 00:32:17,810 --> 00:32:20,370 A mi već pogledao ovaj u prvom tjednu nastave. 687 00:32:20,370 --> 00:32:23,320 Gledajući izvršne datoteke, a sebe podsjećajući decimale. 688 00:32:23,320 --> 00:32:28,310 >> Ali sjećam od prošlog tjedna da C ima različite vrste podataka i trsovi više, 689 00:32:28,310 --> 00:32:30,600 No, najviše oni korisni za sada bi moglo biti to. 690 00:32:30,600 --> 00:32:36,030 Char, ili karakter, što se događa da se jedan bajt, ili osam bitova ukupno. 691 00:32:36,030 --> 00:32:40,060 I to je reći da je veličina od pougljenjenih je samo jedan bajt. 692 00:32:40,060 --> 00:32:45,370 Bajt je osam bitova, pa to znači da možemo predstavljati koliko znakova. 693 00:32:45,370 --> 00:32:47,320 Koliko slova ili simboli na tipkovnici 694 00:32:47,320 --> 00:32:49,210 Ako imamo jedan bajt ili osam bitova. 695 00:32:49,210 --> 00:32:51,546 Sjetite se da tjedan nula. 696 00:32:51,546 --> 00:32:53,420 Ako imate osam bitova, Koliko vrijednosti ukupnog 697 00:32:53,420 --> 00:32:55,503 može li predstavlja s obrasci nula i jedinica? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 One-- više od toga. 700 00:33:00,260 --> 00:33:03,490 Dakle, 256 ukupno, ako vas početi brojati od nule. 701 00:33:03,490 --> 00:33:07,120 Dakle, ako imate osam bits-- pa ako mi imali naše binarnih lukovice opet ovdje, 702 00:33:07,120 --> 00:33:12,180 možemo okrenuti onima žarulje na i isključiti u bilo kojem od 256 jedinstvenih uzoraka. 703 00:33:12,180 --> 00:33:13,640 >> Sada je to malo problematično. 704 00:33:13,640 --> 00:33:16,857 Ne toliko za engleski i romanski jezici, ali sigurno 705 00:33:16,857 --> 00:33:19,190 kada uvesti, za Primjerice, azijski jezici, koji se 706 00:33:19,190 --> 00:33:22,580 imaju daleko više simbola nego kao 26 slova abecede. 707 00:33:22,580 --> 00:33:24,390 Mi zapravo možda trebati više od jedne riječi. 708 00:33:24,390 --> 00:33:28,240 I srećom u posljednjih godina društvo 709 00:33:28,240 --> 00:33:31,040 Usvojene druge standarde koje koriste više od jedne riječi po punjenju. 710 00:33:31,040 --> 00:33:34,210 >> No, za sada u C, zadana je samo jedan bajt ili osam bitova. 711 00:33:34,210 --> 00:33:38,195 Cijeli broj, u međuvremenu, je četiri bajtova, inače poznat kao 32 bita. 712 00:33:38,195 --> 00:33:41,320 Što znači ono što je najveća moguća broj možemo predstavljati s int 713 00:33:41,320 --> 00:33:41,820 očito? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 S milijardu. 716 00:33:45,050 --> 00:33:46,760 Dakle, to je četiri milijarde dati ili uzeti. 717 00:33:46,760 --> 00:33:49,840 2 na 32th moći, ako mi Pretpostavljam nema negativne brojeve 718 00:33:49,840 --> 00:33:52,530 i samo koristiti sve pozitivno brojevi, to je četiri milijarde 719 00:33:52,530 --> 00:33:53,730 dati ili uzeti mogućnosti. 720 00:33:53,730 --> 00:33:57,890 Plutaju, u međuvremenu, je drugačiji tip vrste podataka u C. To je još uvijek broj, 721 00:33:57,890 --> 00:33:58,990 ali to je pravi broj. 722 00:33:58,990 --> 00:34:00,660 Nešto s decimalne točke. 723 00:34:00,660 --> 00:34:03,000 I ispada da C također koristi četiri bajta 724 00:34:03,000 --> 00:34:05,340 za zastupanje s pomičnim zarezom vrijednosti. 725 00:34:05,340 --> 00:34:09,420 >> Nažalost, koliko plutajući point vrijednosti postoje u svijetu? 726 00:34:09,420 --> 00:34:11,582 Koliko je realna brojevi su tu? 727 00:34:11,582 --> 00:34:13,540 Postoji beskonačan broj, a što se toga tiče 728 00:34:13,540 --> 00:34:15,164 postoji beskonačno mnogo prirodnih brojeva. 729 00:34:15,164 --> 00:34:18,070 Dakle, mi smo već vrsta kopanje sebi rupu ovdje. 730 00:34:18,070 --> 00:34:21,780 Čime očito u computers-- na najmanje programi pisani u C na njih-- 731 00:34:21,780 --> 00:34:24,110 može računati samo kao visok kao četiri milijarde više ili manje, 732 00:34:24,110 --> 00:34:26,260 i pomičnim zarezom vrijednosti mogu samo naizgled 733 00:34:26,260 --> 00:34:28,330 imaju neku konačnu količinu preciznosti. 734 00:34:28,330 --> 00:34:30,810 Samo toliko znamenki nakon njihov decimalne točke. 735 00:34:30,810 --> 00:34:32,822 >> Budući da je, naravno, ako imate samo 32 bita, 736 00:34:32,822 --> 00:34:36,030 Ne znam kako ćemo ići o predstavlja pravi numbers-- vjerojatno 737 00:34:36,030 --> 00:34:37,409 s različitim vrstama uzoraka. 738 00:34:37,409 --> 00:34:40,030 No, tu je sigurno konačnih Broj takvih uzoraka, 739 00:34:40,030 --> 00:34:41,830 tako i ovdje, također, to je problematično. 740 00:34:41,830 --> 00:34:43,710 >> Sada možemo izbjeći problem malo. 741 00:34:43,710 --> 00:34:45,710 Ako ne koristite plovak, možete koristiti bračni 742 00:34:45,710 --> 00:34:50,230 u C, što vam daje osam bajtova, koji je način više moguće obrasci nula 743 00:34:50,230 --> 00:34:50,730 i one. 744 00:34:50,730 --> 00:34:55,199 No, to je još uvijek konačna, što se događa biti problematično ako pisanje softvera 745 00:34:55,199 --> 00:34:57,670 za grafike ili fantazija matematičke formule. 746 00:34:57,670 --> 00:35:00,410 Dakle, možda zapravo žele brojati do veći od toga. 747 00:35:00,410 --> 00:35:05,640 Dugo long-- glupo named-- Također je osam bajtova ili 64 bita, 748 00:35:05,640 --> 00:35:10,260 a to je dvostruko dulje od int, i to je za dugo cjelobrojna vrijednost. 749 00:35:10,260 --> 00:35:15,655 >> Zabava fact-- ako int četiri bajta, koliko je dugo u C obično? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Također četiri bajta, ali dugo dok je osam bajtova, 752 00:35:21,560 --> 00:35:23,050 a ovo je iz povijesnih razloga. 753 00:35:23,050 --> 00:35:26,450 >> Ali sada takeaway je samo da su podaci 754 00:35:26,450 --> 00:35:29,625 biti predstavljeni u computer-- koji je fizički uređaj sa strujom, 755 00:35:29,625 --> 00:35:32,190 to je općenito vožnje one nule i ones-- 756 00:35:32,190 --> 00:35:34,320 s konačnim količinama preciznosti. 757 00:35:34,320 --> 00:35:35,620 Pa u čemu je problem onda? 758 00:35:35,620 --> 00:35:37,480 >> Pa postoji problem od cjelobrojnog preljeva. 759 00:35:37,480 --> 00:35:39,780 Ne samo u C, ali u računala u cjelini. 760 00:35:39,780 --> 00:35:42,590 Na primjer, ako je to je bajt vrijedno bit-- 761 00:35:42,590 --> 00:35:45,120 pa ako je to osam bit-- sve od kojih su broj jedan. 762 00:35:45,120 --> 00:35:47,300 Koji je to broj zastupanje ako pretpostavimo 763 00:35:47,300 --> 00:35:50,730 to je sve pozitivne vrijednosti u binarnom? 764 00:35:50,730 --> 00:35:54,410 >> 255, i to ne 256, jer je nula je najmanji broj. 765 00:35:54,410 --> 00:35:56,760 Dakle, 255 je najviša jedan, ali problem 766 00:35:56,760 --> 00:36:00,330 je pretpostaviti da sam htjela prirast ovu varijablu koja 767 00:36:00,330 --> 00:36:04,030 koristi osam bitova ukupno ako želim ga povećavati. 768 00:36:04,030 --> 00:36:07,160 >> Pa čim dodam jedan svim tim one, 769 00:36:07,160 --> 00:36:10,500 što možda može zamisliti visually-- samo kao što nosi jedan pomoću decimals-- 770 00:36:10,500 --> 00:36:12,300 nešto će teći u lijevo. 771 00:36:12,300 --> 00:36:15,590 I doista, ako dodam broj jedan je to, što se događa u binarnom 772 00:36:15,590 --> 00:36:17,670 je da nabuja vratiti na nulu. 773 00:36:17,670 --> 00:36:21,730 >> Dakle, ako ste samo use-- ne int, ali jedan bajt računati cijelih brojeva 774 00:36:21,730 --> 00:36:27,170 u programu, koje default-- čim li doći do 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 dolazi nakon 255, koji vjerojatno nije ono što 776 00:36:32,710 --> 00:36:34,790 Korisnik će očekivati. 777 00:36:34,790 --> 00:36:39,620 >> Sada je u međuvremenu u pomičnim zarezom svijet, također imaju sličan problem. 778 00:36:39,620 --> 00:36:42,670 Ne toliko s najvećim number-- Iako je to još uvijek problem. 779 00:36:42,670 --> 00:36:45,360 No, s iznosom od preciznosti koje mogu predstavljati. 780 00:36:45,360 --> 00:36:49,490 Tako ćemo pogledati na ovom primjeru Ovdje je također iz današnje izvora code-- 781 00:36:49,490 --> 00:36:52,070 plutaju-0.c. 782 00:36:52,070 --> 00:36:54,280 >> I primijetiti da je super jednostavan program koji 783 00:36:54,280 --> 00:36:56,580 treba očito isprintati koju vrijednost? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Što se kladiti da će ovo za ispis iako je malo nove sintakse 786 00:37:04,110 --> 00:37:05,540 ovdje? 787 00:37:05,540 --> 00:37:06,700 Dakle, nadam se 0.1. 788 00:37:06,700 --> 00:37:10,000 Dakle ekvivalent jedne desetine jer radim 1 podijeljen s 10. 789 00:37:10,000 --> 00:37:12,430 Ja spremanje odgovor u varijabli zove f. 790 00:37:12,430 --> 00:37:15,850 To je varijabla tipa float, koji je ključna riječ samo sam predložio postojala. 791 00:37:15,850 --> 00:37:18,910 >> Nismo Vidjeli smo to i prije, ali To je vrsta uredan način u printf 792 00:37:18,910 --> 00:37:22,110 navesti koliko znamenaka ste žele vidjeti nakon decimalne točke. 793 00:37:22,110 --> 00:37:25,020 Dakle, to samo znači zapis da ovdje je rezervirano mjesto. 794 00:37:25,020 --> 00:37:27,900 To je za plutajuće točke vrijednost, i oh, usput, 795 00:37:27,900 --> 00:37:31,389 pokazuju ga s decimalnog zareza s jedan broj nakon decimalne točke. 796 00:37:31,389 --> 00:37:33,180 Tako da je broj značajnih znamenki, 797 00:37:33,180 --> 00:37:34,650 da se tako izrazim, da možda želite. 798 00:37:34,650 --> 00:37:40,450 >> Pa neka mi ići naprijed i učiniti da plutaju-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 i po svemu sudeći 1 podijeljeno s 10 je 0,0. 800 00:37:46,660 --> 00:37:47,760 Sad zašto je to? 801 00:37:47,760 --> 00:37:51,380 >> Pa opet, računalo je uzimanje ja doslovno, a ja sam napisao 1 802 00:37:51,380 --> 00:37:56,680 i ja napisao 10, i pokušajte pogoditi što je preuzeo vrsta podataka za ta dva 803 00:37:56,680 --> 00:37:58,440 Vrijednosti? 804 00:37:58,440 --> 00:38:00,970 Interesi, to je tehnički nešto malo drugačije. 805 00:38:00,970 --> 00:38:04,150 To je obično dugo, ali to je konačnici sastavni vrijednost. 806 00:38:04,150 --> 00:38:06,030 Ne plutajuće vrijednost točka. 807 00:38:06,030 --> 00:38:09,456 >> Što će reći da ako to je int, a to je int, 808 00:38:09,456 --> 00:38:11,830 Problem je u tome što na računalu nema sposobnost 809 00:38:11,830 --> 00:38:13,680 čak i pohraniti tu decimalne točke. 810 00:38:13,680 --> 00:38:16,430 Dakle, kada vam je činiti 1 podijeljene za 10 pomoću brojeva 811 00:38:16,430 --> 00:38:20,950 za i brojnik i nazivnik, odgovor bi trebao biti 0.1. 812 00:38:20,950 --> 00:38:24,930 Ali computer-- jer oni su integers-- 813 00:38:24,930 --> 00:38:27,430 ne znam što da radim sa 0,1. 814 00:38:27,430 --> 00:38:30,010 >> Pa što je to očito radi? 815 00:38:30,010 --> 00:38:33,120 To je samo ga baca, i što vidim u konačnici 816 00:38:33,120 --> 00:38:38,830 je 0,0 samo zato što sam inzistirao na tome da printf pokažite mi jednu decimalne točke. 817 00:38:38,830 --> 00:38:41,740 No, problem je u tome, ako vas podijeliti cijeli broj po cijeli broj, 818 00:38:41,740 --> 00:38:44,347 ćete get-- po definiciji od C-- cijeli broj. 819 00:38:44,347 --> 00:38:46,680 A to neće učiniti nešto lijepo i povoljno 820 00:38:46,680 --> 00:38:49,040 kao i cijele ga do Najbliža jedan gore ili dolje. 821 00:38:49,040 --> 00:38:51,860 To će se skratiti sve nakon decimale. 822 00:38:51,860 --> 00:38:54,030 >> Dakle, samo intuitivno, što je vjerojatno popraviti? 823 00:38:54,030 --> 00:38:55,351 Što je najjednostavniji popraviti ovdje? 824 00:38:55,351 --> 00:38:55,850 Da? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Točno. 827 00:39:01,100 --> 00:39:04,200 Zašto ne bismo tretirati ih kao pomičnim zarezom vrijednosti učinkovito 828 00:39:04,200 --> 00:39:05,860 pretvarajući ih u kola ili u parovima. 829 00:39:05,860 --> 00:39:10,500 A sada, ako mi je činiti da pluta-0, ili ako sam sastaviti pluta-1, 830 00:39:10,500 --> 00:39:12,570 koji je identičan ono je samo predložio. 831 00:39:12,570 --> 00:39:16,400 I sad ja pluta-0, sada ću dobiti 0,1. 832 00:39:16,400 --> 00:39:17,234 >> Sada je to nevjerojatna. 833 00:39:17,234 --> 00:39:19,441 Ali sada ću učiniti nešto malo drugačije. 834 00:39:19,441 --> 00:39:22,280 Ja sam znatiželjan vidjeti što je stvarno događa ispod haube, 835 00:39:22,280 --> 00:39:26,050 i ja ću ispisati na 28 decimalna mjesta. 836 00:39:26,050 --> 00:39:29,730 Želim da se stvarno vidi 0.1000-- infinite-- 837 00:39:29,730 --> 00:39:32,710 [Nečujan] 27 nule nakon toga 0.1. 838 00:39:32,710 --> 00:39:34,740 >> Pa da vidimo je li to ono što sam doista dobiti. 839 00:39:34,740 --> 00:39:39,430 Napravite lebdi-0 istu sliku. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Idemo uvećanje na dramatičan odgovor. 842 00:39:44,380 --> 00:39:49,980 Sve to vrijeme, bio si razmišljam 1 podijeljena 10 je 10%, odnosno 0.1. 843 00:39:49,980 --> 00:39:50,810 Nije. 844 00:39:50,810 --> 00:39:53,210 Barem tako daleko Računalo je u pitanju. 845 00:39:53,210 --> 00:39:57,060 >> Sada why-- OK, to je kompletna Laž 1 podijeljeno s 10 je 0,1. 846 00:39:57,060 --> 00:39:59,710 Ali why-- to nije takeaway danas. 847 00:39:59,710 --> 00:40:04,010 Pa zašto ne računalo misle, za razliku od svih nas u sobi, 848 00:40:04,010 --> 00:40:06,870 1 koja je podijeljena 10 zapravo to ludo vrijednost? 849 00:40:06,870 --> 00:40:10,620 Što je računalo radi očito? 850 00:40:10,620 --> 00:40:12,490 Što je to? 851 00:40:12,490 --> 00:40:13,785 >> Nije se prelijevati, sama po sebi. 852 00:40:13,785 --> 00:40:15,910 Overflow je obično kada što zaokrenuti vrijednost. 853 00:40:15,910 --> 00:40:18,970 Bilo je to pitanje nepreciznosti u Krajnja vrijednost 854 00:40:18,970 --> 00:40:22,220 gdje imate samo 32 ili možda čak i 64 bita. 855 00:40:22,220 --> 00:40:25,230 Ali, ako postoji beskonačna broj realnom numbers-- 856 00:40:25,230 --> 00:40:27,940 brojeva s decimalnim mjestima i brojevi thereafter-- sigurno 857 00:40:27,940 --> 00:40:29,380 ne može predstavljati sve njih. 858 00:40:29,380 --> 00:40:32,870 Dakle, računalo je dao nama najbliža vrijednost 859 00:40:32,870 --> 00:40:37,090 na vrijednost može predstavljati pomoću koje mnogi bita u vrijednosti sam zapravo želite, 860 00:40:37,090 --> 00:40:38,690 što je 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Nažalost, ako vas početi raditi matematiku, ili ste 862 00:40:40,685 --> 00:40:44,360 start koji uključuje takve plutajuće točka vrijednosti u važnom programs-- 863 00:40:44,360 --> 00:40:46,770 financijski software, Vojni software-- ništa 864 00:40:46,770 --> 00:40:49,090 gdje je percepcija Vjerojatno prilično važno. 865 00:40:49,090 --> 00:40:51,520 I početi dodavanjem Brojevi kao što je ovaj, i početi 866 00:40:51,520 --> 00:40:54,050 pokrenut taj softver s jako velikim ulazima 867 00:40:54,050 --> 00:40:56,890 ili za puno sati ili puno dana ili mnogo godina, 868 00:40:56,890 --> 00:41:01,060 ove sitne male pogreške sigurno može zbrojiti s vremenom. 869 00:41:01,060 --> 00:41:04,252 >> Sada kao na stranu, ako ste ikada Vidio Superman 3 ili Office Space 870 00:41:04,252 --> 00:41:05,960 i možda ćete se sjetiti kako su ti dečki ukrali 871 00:41:05,960 --> 00:41:08,668 Mnogo novca iz svojih računala pomoću pomičnim zarezom vrijednosti 872 00:41:08,668 --> 00:41:11,290 i zbrajanju malo zaostaci, nadamo se da je film 873 00:41:11,290 --> 00:41:12,390 Sada ima više smisla. 874 00:41:12,390 --> 00:41:14,930 To je ono što su bili aludirajući na taj film. 875 00:41:14,930 --> 00:41:16,710 Činjenica da je većina poduzeća ne bi izgledalo 876 00:41:16,710 --> 00:41:18,600 Nakon određenog broja decimalnih mjesta, 877 00:41:18,600 --> 00:41:20,009 ali oni su udjeli centi. 878 00:41:20,009 --> 00:41:22,550 Tako ih počnete zbrajanju, počnete napraviti mnogo novca 879 00:41:22,550 --> 00:41:23,424 u svoj bankovni račun. 880 00:41:23,424 --> 00:41:25,160 Dakle, to je objasnio Office Space. 881 00:41:25,160 --> 00:41:28,220 >> Sada, nažalost, izvan Office Space, postoji 882 00:41:28,220 --> 00:41:31,794 neki su opravdano zabrinjavajući i značajni utjecaji 883 00:41:31,794 --> 00:41:33,710 od tih vrsta temeljne odluke o dizajnu, 884 00:41:33,710 --> 00:41:35,990 i doista je jedan od razloga koristimo C u tijeku 885 00:41:35,990 --> 00:41:39,640 je tako da stvarno imati tu zemlju do razumijevanja o tome kako računala rade, 886 00:41:39,640 --> 00:41:42,440 kako softver radi, i ne poduzeti ništa zdravo za gotovo. 887 00:41:42,440 --> 00:41:45,820 >> I doista, nažalost, čak i uz da temeljno razumijevanje, 888 00:41:45,820 --> 00:41:47,370 Mi ljudi čine pogreške. 889 00:41:47,370 --> 00:41:51,310 I ono što sam mislio bih podijeliti je to osam minuta video ovdje uzeti 890 00:41:51,310 --> 00:41:56,980 od modernog čuda epizodi, što je edukativna predstava o tome kako se stvari rade 891 00:41:56,980 --> 00:42:00,370 koji oslikava dvije slike od kada je nepravilnog korištenja 892 00:42:00,370 --> 00:42:02,540 i razumijevanje pomičnim zarezom vrijednosti 893 00:42:02,540 --> 00:42:05,610 dovelo do neke značajne nesretne rezultata. 894 00:42:05,610 --> 00:42:06,363 Idemo pogledati. 895 00:42:06,363 --> 00:42:07,029 [Video reprodukciju] 896 00:42:07,029 --> 00:42:11,290 -Mi Sada vratiti na "inženjerstvo Katastrofe "na modernim čudima. 897 00:42:11,290 --> 00:42:12,940 Računala. 898 00:42:12,940 --> 00:42:15,580 Svi smo došli prihvatiti često frustrirajući problemi koji 899 00:42:15,580 --> 00:42:20,960 dobio s njih-- bugova, virusa, i Softver glitches-- za male cijene 900 00:42:20,960 --> 00:42:23,100 platiti za praktičnost. 901 00:42:23,100 --> 00:42:27,770 No, u visoke tehnologije i velike brzine vojne i svemirske programske aplikacije, 902 00:42:27,770 --> 00:42:32,780 najmanji problem može biti uvećana u katastrofu. 903 00:42:32,780 --> 00:42:38,880 >> Na 4. lipanj 1996, znanstvenici su pripremili lansirati bespilotnu Ariane 5 raketa. 904 00:42:38,880 --> 00:42:41,190 On je nosio znanstveni sateliti dizajnirani 905 00:42:41,190 --> 00:42:44,570 utvrditi točno kako Zemljino magnetsko polje u interakciju 906 00:42:44,570 --> 00:42:47,380 sa solarnim vjetrovima. 907 00:42:47,380 --> 00:42:50,580 Raketa je izgrađen za Europska svemirska agencija, 908 00:42:50,580 --> 00:42:54,400 i odignuti od svog objekta na obali u Francuskoj Gvajani. 909 00:42:54,400 --> 00:42:57,520 >> -Na Oko 37 sekundi u leta, su se prvi put 910 00:42:57,520 --> 00:42:59,070 Primijetio je nešto krenulo naopako. 911 00:42:59,070 --> 00:43:02,240 To su mlaznice su zakretanjem na način da se zapravo ne bi trebao. 912 00:43:02,240 --> 00:43:06,550 Oko 40 sekundi u letu, jasno je vozilo u nevolji, 913 00:43:06,550 --> 00:43:08,820 a to je kad su napravili Odluka da ga uništi. 914 00:43:08,820 --> 00:43:12,370 Sigurnosni časnik raspon, s ogromne hrabrosti, pritisne gumb 915 00:43:12,370 --> 00:43:18,030 i raznio raketu prije nego što je mogao postalo opasnost za javnu sigurnost. 916 00:43:18,030 --> 00:43:21,010 >> -Ovo Je djevojačko Put od Ariane 5, 917 00:43:21,010 --> 00:43:23,920 i njegovo uništenje uzeo stavite zbog mana 918 00:43:23,920 --> 00:43:25,932 ugrađen u raketi softveru. 919 00:43:25,932 --> 00:43:27,640 -The Problem na Ariane je da postoji 920 00:43:27,640 --> 00:43:30,500 je broj koji je potrebno 64 bita izraziti, 921 00:43:30,500 --> 00:43:33,560 i oni su htjeli pretvoriti je na 16-bitni broj. 922 00:43:33,560 --> 00:43:36,820 Pretpostavili su da je broj se nikada ne će biti vrlo velika. 923 00:43:36,820 --> 00:43:40,940 Da je većina od tih brojki u 64-bitni broj bile nule. 924 00:43:40,940 --> 00:43:42,450 Bili su u krivu. 925 00:43:42,450 --> 00:43:45,000 >> -The Nesposobnost jedne softverski program za prihvaćanje 926 00:43:45,000 --> 00:43:49,460 vrsta broja generira drugi je bio u korijenu neuspjeha. 927 00:43:49,460 --> 00:43:54,260 Razvoj softvera postali vrlo skupo dio nove tehnologije. 928 00:43:54,260 --> 00:43:57,060 Ariane 4 raketa imala bio vrlo uspješan. 929 00:43:57,060 --> 00:44:01,600 Toliko od softvera stvorena za Također je bio korišten u Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -The Osnovni problem bio je da Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Je faster-- ubrzao brže, a Softver nije činio zbog toga. 932 00:44:11,200 --> 00:44:14,910 >> -The Uništavanje raketa bio veliki financijski katastrofa. 933 00:44:14,910 --> 00:44:18,630 Sve zbog minutu softvera pogreške. 934 00:44:18,630 --> 00:44:21,160 No, to nije bio prvi Vrijeme problemi podaci o pretvorbi 935 00:44:21,160 --> 00:44:24,770 je udario moderne raketne tehnologije. 936 00:44:24,770 --> 00:44:28,020 >> -U 1991 s početka od prvog Zaljevskog rata, 937 00:44:28,020 --> 00:44:30,540 Patriot raketnih doživio sličnu vrstu 938 00:44:30,540 --> 00:44:32,465 problema broj pretvorbe. 939 00:44:32,465 --> 00:44:36,760 I kao rezultat 28 ljudi-- 28 Američki soldiers-- poginulo, 940 00:44:36,760 --> 00:44:39,010 a oko stotinu je ranjeno. 941 00:44:39,010 --> 00:44:42,830 Kad Patriot, koja je trebala kako bi se zaštitili od dolaznih Scuds, 942 00:44:42,830 --> 00:44:45,780 nije uspio ispaliti raketu. 943 00:44:45,780 --> 00:44:51,610 >> Kad je Irak napao Kuvajt i Ameriku pokrenula Pustinjska oluja početkom 1991, 944 00:44:51,610 --> 00:44:55,720 Patriot raketne baterije su razmještene zaštititi Saudijsku Arabiju i Izrael 945 00:44:55,720 --> 00:44:59,180 iz iračkih raketnih napada Scud. 946 00:44:59,180 --> 00:45:03,080 Patriot je američki srednjeg dometa zemlja-zrak sustav 947 00:45:03,080 --> 00:45:06,530 proizveden od strane tvrtke Raytheon. 948 00:45:06,530 --> 00:45:09,500 >> -The Veličina Patriot presretač itself-- 949 00:45:09,500 --> 00:45:14,705 to je otprilike oko 20 metara dug, i teži oko 2.000 kilograma. 950 00:45:14,705 --> 00:45:19,090 I to nosi bojnu glavu oko, Mislim da je to otprilike 150 £. 951 00:45:19,090 --> 00:45:23,880 I sama je bojna glava visoki eksploziv, koji je 952 00:45:23,880 --> 00:45:26,700 ima fragmente oko njega. 953 00:45:26,700 --> 00:45:31,630 Dakle, kućište od projektila je zamišljen je kao sačme. 954 00:45:31,630 --> 00:45:34,040 >> -The Rakete provedena četiri po kontejneru, 955 00:45:34,040 --> 00:45:37,170 i prevoze polu prikolice. 956 00:45:37,170 --> 00:45:44,880 >> -The Patriot anti-raketni sustav seže najmanje 20 godina. 957 00:45:44,880 --> 00:45:48,380 To je bio izvorno dizajniran kao obrambene rakete zrak 958 00:45:48,380 --> 00:45:50,810 pucati dolje neprijateljske zrakoplove. 959 00:45:50,810 --> 00:45:54,410 U prvom Zaljevskom ratu kada je taj rat Izašao 960 00:45:54,410 --> 00:45:59,650 Vojska želi ga koristiti za oboriti Scuds, a ne avioni. 961 00:45:59,650 --> 00:46:03,580 Irački ratnog zrakoplovstva bio je Nije toliko problem, 962 00:46:03,580 --> 00:46:06,590 ali vojska je zabrinut oko Scuds. 963 00:46:06,590 --> 00:46:10,120 I tako su pokušali nadograditi Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Neprijatelja projektil putuje na Mach 5 965 00:46:12,740 --> 00:46:15,670 će biti dovoljno izazovan. 966 00:46:15,670 --> 00:46:18,440 Ali kad Patriot je potrčala u službu, 967 00:46:18,440 --> 00:46:22,580 Vojska nije bio svjestan Irački izmjene koje 968 00:46:22,580 --> 00:46:25,880 napravili njihovi scuds gotovo nemoguće. 969 00:46:25,880 --> 00:46:30,690 >> Što se dogodilo je da je Scuds su dolazili u bilo nestabilno. 970 00:46:30,690 --> 00:46:32,000 Bili su nesiguran. 971 00:46:32,000 --> 00:46:37,210 Razlog za to bio je Iraqis-- kako bi dobili 600 km van 972 00:46:37,210 --> 00:46:41,680 od 300-kilometarskog raspon missile-- uzeo težinu iz prednjeg bojne glave, 973 00:46:41,680 --> 00:46:43,340 i napravio bojna glava upaljača. 974 00:46:43,340 --> 00:46:48,490 Tako sada Patriot pokušava doći Na Scud i većina put-- 975 00:46:48,490 --> 00:46:52,880 Velika većina put-- to bi samo letjeti po Scud. 976 00:46:52,880 --> 00:46:57,120 >> -Nakon Operatora Patriot sustava shvatio Patriot promašio svoj cilj, 977 00:46:57,120 --> 00:47:01,630 oni detonirao The Patriot-a bojnu glavu kako bi se izbjegle eventualne žrtve ako se 978 00:47:01,630 --> 00:47:04,440 je dopušteno da padne na zemlju. 979 00:47:04,440 --> 00:47:08,700 >> To je bilo ono što većina ljudi vidjeli kao velike vatrene kugle na nebu, 980 00:47:08,700 --> 00:47:14,180 i pogrešno kao presreće od Scud bojevih glava. 981 00:47:14,180 --> 00:47:18,020 >> -Although U noćnim nebom, Patriotsa Činilo se da je uspješno uništavaju 982 00:47:18,020 --> 00:47:23,280 Scuds, u Dhahran bi moglo biti Ne sumnjajte u njegovu učinkovitost. 983 00:47:23,280 --> 00:47:27,930 Postoji The Patriot-a radarski sustav izgubio trag o dolaznom Scud 984 00:47:27,930 --> 00:47:30,260 i nikada nije pokrenut zbog do programskog mana. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Bilo je Izraelce koji je prvi otkrio da je više sustav bio uključen, 987 00:47:38,880 --> 00:47:41,130 veće odstupanje vremena postala. 988 00:47:41,130 --> 00:47:44,770 Zbog sat ugrađen u računalo sustava. 989 00:47:44,770 --> 00:47:48,190 >> -Oko Dva tjedna prije Tragedija u Dhahran, 990 00:47:48,190 --> 00:47:50,720 Izraelci su izvijestili da Ministarstvo obrane 991 00:47:50,720 --> 00:47:52,410 da sustav gubi vrijeme. 992 00:47:52,410 --> 00:47:54,410 Nakon što je oko osam sati trčanja, uočili 993 00:47:54,410 --> 00:47:57,690 da sustav postaje osjetno manje točna. 994 00:47:57,690 --> 00:48:01,850 Ministarstvo obrane je reagirala govori sve Patriot baterija 995 00:48:01,850 --> 00:48:04,800 da ne ostavljaju sustave na duže vrijeme. 996 00:48:04,800 --> 00:48:06,980 Oni nikada nije rekao ono što je dugo vremena bio. 997 00:48:06,980 --> 00:48:09,140 8 sati, 10 sati, tisuću sati. 998 00:48:09,140 --> 00:48:11,300 Nitko nije znao. 999 00:48:11,300 --> 00:48:13,320 >> -The Patriot baterija stacioniran u vojarni 1000 00:48:13,320 --> 00:48:18,310 u Dhahran i njegova mana interna Sat je bio na više od 100 sati 1001 00:48:18,310 --> 00:48:21,520 u noći 25. veljače. 1002 00:48:21,520 --> 00:48:25,792 >> -To Pratiti vrijeme na točnost od oko desetine sekunde. 1003 00:48:25,792 --> 00:48:27,950 Sada desetinu sekunde je zanimljiv broj 1004 00:48:27,950 --> 00:48:31,850 jer se ne može izraziti u binarnom točno, što 1005 00:48:31,850 --> 00:48:36,500 znači da se ne može izraziti točno u bilo kojem modernom digitalnom računalu. 1006 00:48:36,500 --> 00:48:41,070 Teško je vjerovati, ali koristiti kao primjer. 1007 00:48:41,070 --> 00:48:43,420 >> Uzmimo broj trećinu. 1008 00:48:43,420 --> 00:48:47,330 Jedna trećina ne može biti izražena u decimale točno. 1009 00:48:47,330 --> 00:48:52,060 Jedna trećina je 0.333 događa za beskonačnost. 1010 00:48:52,060 --> 00:48:56,420 Nema načina da to učiniti s apsolutna točnost u decimale. 1011 00:48:56,420 --> 00:48:59,530 To je točno vrsta problema koja se dogodila u Patriot. 1012 00:48:59,530 --> 00:49:04,040 Više sustav ran, gora postala time error. 1013 00:49:04,040 --> 00:49:08,840 >> Poslije 100 sati rada, Pogreška je u to vrijeme bio samo oko jedne trećine 1014 00:49:08,840 --> 00:49:10,440 sekunde. 1015 00:49:10,440 --> 00:49:14,150 No, s obzirom na ciljanje projektil putuje na Mach 5, 1016 00:49:14,150 --> 00:49:18,560 što je dovelo do praćenja Pogreška od preko 600 metara. 1017 00:49:18,560 --> 00:49:21,870 Bilo bi fatalna pogreška za vojnike u Dhahran. 1018 00:49:21,870 --> 00:49:28,455 >> Što se dogodilo je Scud Lansiranje je otkriven satelita za rano upozoravanje, 1019 00:49:28,455 --> 00:49:32,710 i znali su Scud dolazi u njihovom smjeru. 1020 00:49:32,710 --> 00:49:35,150 Nisu znali gdje je došao. 1021 00:49:35,150 --> 00:49:38,210 To je sada na radaru komponenta Patriot sustava 1022 00:49:38,210 --> 00:49:43,150 braneći Dhahran locirati i zadržati Staza od dolazne neprijateljskih projektila. 1023 00:49:43,150 --> 00:49:44,561 >> -The Radarski bio jako pametan. 1024 00:49:44,561 --> 00:49:46,560 To bi zapravo pratiti položaj Scud 1025 00:49:46,560 --> 00:49:48,930 a zatim predvidjeti gdje to će vjerojatno biti 1026 00:49:48,930 --> 00:49:51,380 Sljedeći put radar poslao puls van. 1027 00:49:51,380 --> 00:49:53,040 To se zove raspon vrata. 1028 00:49:53,040 --> 00:49:57,620 >> Onda odjednom The Patriot odluči dovoljno vremena ima 1029 00:49:57,620 --> 00:50:02,400 prošli se vratiti i provjeriti sljedeći mjesto za ovaj objekt otkriven 1030 00:50:02,400 --> 00:50:03,550 to ide natrag. 1031 00:50:03,550 --> 00:50:07,820 Dakle, kada se vratio u krivu mjesto, to onda ne vidi objekt. 1032 00:50:07,820 --> 00:50:10,360 I to ne odluči da nema objekta. 1033 00:50:10,360 --> 00:50:13,630 To je bilo lažno otkrivanje i ona padne na stazu. 1034 00:50:13,630 --> 00:50:16,970 >> -The Dolazni Scud nestali sa zaslona radara, 1035 00:50:16,970 --> 00:50:20,200 i sekundi kasnije, to udario u vojarnu. 1036 00:50:20,200 --> 00:50:22,570 Scud ubio 28. 1037 00:50:22,570 --> 00:50:26,110 To je posljednja otkaz tijekom prvog Zaljevskog rata. 1038 00:50:26,110 --> 00:50:31,920 Tragično, ažurirani softver stigao je u zoru sljedećeg dana. 1039 00:50:31,920 --> 00:50:34,870 Softver mana je imao bila fiksna, zatvaranje 1040 00:50:34,870 --> 00:50:39,150 jedno poglavlje u nevolji Povijest Patriot rakete. 1041 00:50:39,150 --> 00:50:40,030 >> [END video reprodukciju] 1042 00:50:40,030 --> 00:50:41,488 >> DAVID J. Malan: To je to za CS50. 1043 00:50:41,488 --> 00:50:42,820 Mi ćemo vas vidjeti u srijedu. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [Muziciranja] 1046 00:50:50,370 --> 00:54:23,446