1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [Predvajanje glasbe] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 DAVID J. Malan: Dobro. 5 00:00:12,660 --> 00:00:15,590 To je CS50, in to je začetek dva tedna. 6 00:00:15,590 --> 00:00:19,120 Torej, začnimo danes z napako. 7 00:00:19,120 --> 00:00:20,974 Napako, je seveda napaka v programu, 8 00:00:20,974 --> 00:00:22,890 in boste dobili zelo seznanjeni s tem konceptom 9 00:00:22,890 --> 00:00:26,050 če ste nikoli programirana pred. pset0 in zdaj pset1. 10 00:00:26,050 --> 00:00:29,280 Ampak, kaj menijo, nekaj malo preprosta na prvi. 11 00:00:29,280 --> 00:00:32,189 Ta program sem, da sem vrgel skupaj vnaprej, 12 00:00:32,189 --> 00:00:37,280 in trdim, da bi moral ta natisnete 10 zvezd na zaslonu s pomočjo printf, 13 00:00:37,280 --> 00:00:41,020 vendar je očitno buggy na nek način. 14 00:00:41,020 --> 00:00:45,370 >> Glede na to, da je specifikacija, ki bi moral natisniti 10 zvezd, 15 00:00:45,370 --> 00:00:50,230 vendar pa ni očitno, kaj bi trdite je bug? 16 00:00:50,230 --> 00:00:52,004 Ja? 17 00:00:52,004 --> 00:00:54,420 Torej, to je off za eno napako, in kaj misliš s tem? 18 00:00:54,420 --> 00:01:00,991 19 00:01:00,991 --> 00:01:01,490 OK. 20 00:01:01,490 --> 00:01:09,820 21 00:01:09,820 --> 00:01:10,410 Odlično. 22 00:01:10,410 --> 00:01:13,930 Zato smo določeno začeti vrednost nič za i, 23 00:01:13,930 --> 00:01:18,399 in smo podali vrednost n 10, vendar smo uporabili manjša ali enaka. 24 00:01:18,399 --> 00:01:21,190 In razlog, da je to dva znakov in ne samo en simbol, 25 00:01:21,190 --> 00:01:22,630 kot v matematičnem knjigi, je, da nimate 26 00:01:22,630 --> 00:01:24,880 način izražanja en ekvivalent znak. 27 00:01:24,880 --> 00:01:28,450 >> To pomeni manj kot, vendar če začnemo pri ničli, 28 00:01:28,450 --> 00:01:31,690 ampak šteješ vso pot skozi in je enaka 10, 29 00:01:31,690 --> 00:01:34,170 ste seveda bo računamo 11 stvari v celoti. 30 00:01:34,170 --> 00:01:35,900 In tako si bomo tiskali 11 zvezd. 31 00:01:35,900 --> 00:01:37,990 Torej, kaj lahko fix za to? 32 00:01:37,990 --> 00:01:39,970 Ja? 33 00:01:39,970 --> 00:01:43,980 >> Torej samo prilagoditi manj kot enaka ali le manj kot, 34 00:01:43,980 --> 00:01:46,250 in tam je, Trdim, morda druga rešitev, preveč. 35 00:01:46,250 --> 00:01:47,210 Kaj bi lahko še kaj naredim? 36 00:01:47,210 --> 00:01:48,590 Ja? 37 00:01:48,590 --> 00:01:53,660 >> Torej začeli višini do 1, in pusti manj kot ali enaka. 38 00:01:53,660 --> 00:01:56,187 In odkrito povedano jaz bi trdil, da za tipične humani 39 00:01:56,187 --> 00:01:57,770 to je verjetno bolj enostavno. 40 00:01:57,770 --> 00:02:00,280 Začnemo na 1. in prešteti do 10. 41 00:02:00,280 --> 00:02:01,690 V bistvu to, kar misliš. 42 00:02:01,690 --> 00:02:04,010 >> Ampak realnost je, v programiranje, kot smo videli, 43 00:02:04,010 --> 00:02:07,598 računalniški znanstveniki in programerji običajno ne začnemo na nič. 44 00:02:07,598 --> 00:02:09,389 In tako, da je v redu, ko se navadiš nanj. 45 00:02:09,389 --> 00:02:12,640 Vaše stanje bo običajno bilo kaj takega manj kot. 46 00:02:12,640 --> 00:02:14,910 Tako preprosto logično napaka, da smo lahko zdaj 47 00:02:14,910 --> 00:02:17,990 popraviti in na koncu prevedem to in dobili le 10. 48 00:02:17,990 --> 00:02:19,610 >> No, kaj pa ta bug tukaj? 49 00:02:19,610 --> 00:02:24,200 Tukaj, še enkrat, trdim, da imam Cilj tiskanje 10 stars-- 50 00:02:24,200 --> 00:02:28,140 eno na vrstico tem času, vendar pa ne. 51 00:02:28,140 --> 00:02:30,940 Preden smo predlagali, kaj fix je, kaj to 52 00:02:30,940 --> 00:02:34,640 tiskanje vizualno, če bi bil zbrati in zaženete ta program, pa ti misliš? 53 00:02:34,640 --> 00:02:35,140 Ja? 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 Torej vse zvezde na Ista vrstica je tisto, kar sem slišal, 57 00:02:41,690 --> 00:02:43,391 in nato novo vrstico znak. 58 00:02:43,391 --> 00:02:44,140 Torej, dajmo poskusiti. 59 00:02:44,140 --> 00:02:48,710 Torej, da buggy-1, začne, in vidim ukaz Jek 60 00:02:48,710 --> 00:02:50,090 da smo se pogovarjali o zadnjem času. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, in dejansko vidim vse 10 zvezd na isti liniji, čeprav trdim, 62 00:02:55,180 --> 00:02:58,690 v moji specifikaciji samo komentar na vrhu kodo, ki sem nameraval narediti eno na 63 00:02:58,690 --> 00:02:59,230 linija. 64 00:02:59,230 --> 00:03:00,580 Ampak to izgleda v redu. 65 00:03:00,580 --> 00:03:04,620 >> Zdaj linija 15 je videti, kot da sem tiskanje zvezdo, nato pa linija 16 66 00:03:04,620 --> 00:03:06,620 Izgleda, da sem za tiskanje Nova linija značaj, 67 00:03:06,620 --> 00:03:09,560 in oni so tako zamaknjeni, tako Jaz sem v notranjosti zanke jasno. 68 00:03:09,560 --> 00:03:13,610 Torej, jaz ne bi smel početi zvezdo, nova linija, zvezda, nova linija, zvezda, nova linija? 69 00:03:13,610 --> 00:03:14,110 Ja? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Ja, za razliko od jezika kot Python, če ste seznanjeni, 72 00:03:21,240 --> 00:03:23,540 vdolbina ne zadevo na računalnik. 73 00:03:23,540 --> 00:03:25,280 Važno je le človeku. 74 00:03:25,280 --> 00:03:29,860 Torej, ker so tukaj sem izumil linij 15 in 16-- da izgleda lepo, 75 00:03:29,860 --> 00:03:31,330 vendar računalnik ne briga. 76 00:03:31,330 --> 00:03:34,640 Računalnik skrbi dejansko ima zavite oklepaje 77 00:03:34,640 --> 00:03:36,310 okrog teh vrstic kode. 78 00:03:36,310 --> 00:03:39,520 >> Tako, da je clear-- tako kot v Scratch-- da teh dveh vrstic kode 79 00:03:39,520 --> 00:03:40,450 je treba izvršiti. 80 00:03:40,450 --> 00:03:44,390 Kot eden od teh rumeno Scratch sestavljanke kosov znova in znova in znova. 81 00:03:44,390 --> 00:03:50,920 >> Torej, zdaj, če sem ponovno zagnati-ta program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Imam napako zdaj. 83 00:03:51,770 --> 00:03:54,212 Kaj sem pozabil, da naredim? 84 00:03:54,212 --> 00:03:55,420 Ja, tako da nisem še prevesti. 85 00:03:55,420 --> 00:03:56,740 Torej, da buggy-2. 86 00:03:56,740 --> 00:03:59,840 No takšno datoteko, ker nisem dejansko zbere drugo različico. 87 00:03:59,840 --> 00:04:04,860 Torej, zdaj zanimivo neprijavljeno variable-- ne 2. 88 00:04:04,860 --> 00:04:05,510 Delamo 1. 89 00:04:05,510 --> 00:04:11,050 Naredite buggy-1-- ./buggy-1-- in zdaj vsak od njih je na isti liniji. 90 00:04:11,050 --> 00:04:13,880 >> Zdaj je izjema To naj bi trditev moj 91 00:04:13,880 --> 00:04:15,520 da morate te zavite oklepaje. 92 00:04:15,520 --> 00:04:20,160 Kdaj je pravzaprav OK-- Če ste Opazil v oddelku ali textbooks-- 93 00:04:20,160 --> 00:04:22,130 da izpustijo zavitimi oklepaji? 94 00:04:22,130 --> 00:04:22,630 Ja? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Točno tako. 97 00:04:26,870 --> 00:04:28,940 Če obstaja samo ena vrstica kode, ki vas 98 00:04:28,940 --> 00:04:32,830 želijo biti povezane z zanke kot v našem prvem primeru. 99 00:04:32,830 --> 00:04:36,380 To je povsem legitimno da izpustijo zavitimi oklepaji 100 00:04:36,380 --> 00:04:40,310 samo kot neke vrste ugodnosti od prevajalnika za vas. 101 00:04:40,310 --> 00:04:40,810 Ja? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Dobro vprašanje. 104 00:04:43,930 --> 00:04:45,500 Bi se zdelo napaka slog? 105 00:04:45,500 --> 00:04:49,340 Mi bi promote-- kot CS50 slogovni priročnik, URL, za katerega 106 00:04:49,340 --> 00:04:51,926 V pset1-- da vedno uporabite zavitimi oklepaji. 107 00:04:51,926 --> 00:04:53,550 Zagotovo, če ste novi v programiranje. 108 00:04:53,550 --> 00:04:56,800 Realnost je, da nismo vas bo prepove 109 00:04:56,800 --> 00:04:58,680 od delaš te udobje. 110 00:04:58,680 --> 00:05:00,846 Ampak, če ste ravno v zamahu stvari, 111 00:05:00,846 --> 00:05:04,020 absolutno samo vedno uporabite curly naramnice, dokler ne boste dobili visi za to. 112 00:05:04,020 --> 00:05:04,640 Dobro vprašanje. 113 00:05:04,640 --> 00:05:05,320 >> V redu. 114 00:05:05,320 --> 00:05:07,660 Tako da takrat je bil bug. 115 00:05:07,660 --> 00:05:09,190 Vsaj v nečem dokaj preprosta. 116 00:05:09,190 --> 00:05:11,260 In vendar si morda to mislite je precej pomanjkljiv, kajne? 117 00:05:11,260 --> 00:05:13,635 To je vrsta prvem tednu gledanja na jeziku 118 00:05:13,635 --> 00:05:14,890 všeč, si oglejte hroščev v njem. 119 00:05:14,890 --> 00:05:17,250 Ampak realnost to so dejansko zastopnik 120 00:05:17,250 --> 00:05:20,310 nekaterih precej zastrašujoče težav , ki se lahko pojavijo v realnem svetu. 121 00:05:20,310 --> 00:05:23,530 >> Torej, nekateri od vas morda spomni če boste sledili tech novice, 122 00:05:23,530 --> 00:05:25,740 ali morda celo ujela Veter je to v februarju 123 00:05:25,740 --> 00:05:29,434 od tega preteklo leto, ki je imel Apple je malo napako v obeh iOS, 124 00:05:29,434 --> 00:05:31,350 operacijski sistem na njihove telefone, in tudi 125 00:05:31,350 --> 00:05:34,220 Mac OS, operacijski sistem na svojih namiznih in prenosnih računalnikov. 126 00:05:34,220 --> 00:05:36,480 In da ste videli takšne naslove, kot je ta. 127 00:05:36,480 --> 00:05:41,120 In potem, Apple obljubil, da popraviti to napako, 128 00:05:41,120 --> 00:05:45,950 in zelo hitro naredil to popraviti v iOS, potem pa na koncu ga določi v operacijskem sistemu Mac OS 129 00:05:45,950 --> 00:05:46,810 kot dobro. 130 00:05:46,810 --> 00:05:50,370 >> Zdaj pa nobeden od teh naslovov, sam res pokažejo, kaj je osnovni problem je bil, 131 00:05:50,370 --> 00:05:55,640 vendar je bil bug končno zniža na bug v SSL Secure Sockets Layer. 132 00:05:55,640 --> 00:05:57,390 In skrajšam zgodbo, to je programska oprema 133 00:05:57,390 --> 00:06:01,030 da naši brskalniki in drugi programska oprema se uporablja za kaj? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Če bi rekel, da je SSL vključene, kadar se ti 136 00:06:06,860 --> 00:06:13,920 obiščite URL, ki se začne s HTTPS, kaj potem lahko SSL povezana s? 137 00:06:13,920 --> 00:06:14,580 Šifriranje. 138 00:06:14,580 --> 00:06:16,470 Torej bomo govorili o to v prihodnjih dneh. 139 00:06:16,470 --> 00:06:18,750 Šifriranje, umetnost kodiranja informacij. 140 00:06:18,750 --> 00:06:22,200 >> Vendar skrajšam zgodbo, Apple kdaj nazaj je naredil napako 141 00:06:22,200 --> 00:06:25,970 pri njihovem izvajanju SSL, je programska oprema, ki v končni fazi izvaja 142 00:06:25,970 --> 00:06:30,120 URL-ji, kot so HTTPS ali max povezave tam. 143 00:06:30,120 --> 00:06:32,850 Posledica je, da je vaš povezave lahko potencialno 144 00:06:32,850 --> 00:06:33,920 se pobral. 145 00:06:33,920 --> 00:06:37,130 In vaše povezave so bile Ni nujno, šifrirana 146 00:06:37,130 --> 00:06:40,350 če si imel nekaj slab človek med ti in spletna destinacija, ki 147 00:06:40,350 --> 00:06:42,170 znali izkoristiti to. 148 00:06:42,170 --> 00:06:45,090 >> Sedaj Apple končno objavljen popraviti za to na koncu, 149 00:06:45,090 --> 00:06:46,920 in opis njihove fix je bilo to. 150 00:06:46,920 --> 00:06:49,878 Varen promet ni uspelo, da bi preverili pristnost povezave. 151 00:06:49,878 --> 00:06:52,920 Vprašanjem se je ukvarjala z obnavljanje manjkajoče korake potrjevanja. 152 00:06:52,920 --> 00:06:57,250 >> Tako da je to zelo valovita roko razlaga za preprosto reči, da smo zajebali. 153 00:06:57,250 --> 00:07:00,920 Obstaja dobesedno ena vrstica kode, ki je bil buggy 154 00:07:00,920 --> 00:07:05,130 pri njihovem izvajanju SSL in če greš na spletu in iskanje za to 155 00:07:05,130 --> 00:07:07,210 lahko dejansko našli Prvotni izvorno kodo. 156 00:07:07,210 --> 00:07:11,960 Na primer, to je zaslon strel samo del dokaj veliko datoteko 157 00:07:11,960 --> 00:07:15,965 vendar je to funkcija očitno imenovano SSL preveri znak strežnika Exchange Key. 158 00:07:15,965 --> 00:07:17,840 In je potrebno kup argumenti in vhodi. 159 00:07:17,840 --> 00:07:20,298 In ne bomo osredotočiti preveč na minucijo tam, 160 00:07:20,298 --> 00:07:24,390 ampak če se osredotočite na kodo notri te vrhunskih function-- Pojdimo 161 00:07:24,390 --> 00:07:25,590 povečate na to. 162 00:07:25,590 --> 00:07:28,140 Morda ste že sumijo kaj bi lahko napaka 163 00:07:28,140 --> 00:07:31,230 se tudi, če nimate pojma navsezadnje, kaj gledaš. 164 00:07:31,230 --> 00:07:35,924 Obstaja nekakšna anomalija tu, ki je kaj? 165 00:07:35,924 --> 00:07:38,940 >> Ja, mi ni res všeč videz dveh goto ne uspe. 166 00:07:38,940 --> 00:07:42,060 Odkrito povedano, ne vem, kaj goto ne pomeni, vendar imajo dva izmed njih 167 00:07:42,060 --> 00:07:42,810 na hrbtni strani. 168 00:07:42,810 --> 00:07:45,290 To nekako me drgne razumsko napačen način, 169 00:07:45,290 --> 00:07:48,910 in seveda, če povečate samo teh vrstic, to je C. 170 00:07:48,910 --> 00:07:52,220 >> Torej, veliko kode Apple je sam napisal v C, 171 00:07:52,220 --> 00:07:55,780 in to očitno res equivalent-- 172 00:07:55,780 --> 00:07:59,060 da ne bo to lepo zarezo različica, če pa priznati dejstvo, 173 00:07:59,060 --> 00:08:02,560 da ni nobenih zavitimi oklepaji, kar Apple res napisal je koda, ki je videti 174 00:08:02,560 --> 00:08:03,540 kot je ta. 175 00:08:03,540 --> 00:08:07,080 Tako sem pomanjšana in sem določen zamik v smislu 176 00:08:07,080 --> 00:08:10,690 da če je ne zavite oklepaje, da se Drugi goto ne da je v rumeni barvi 177 00:08:10,690 --> 00:08:12,500 gre za izvršitev ni važno kaj. 178 00:08:12,500 --> 00:08:15,540 To ni povezano s če pogoj nad njo. 179 00:08:15,540 --> 00:08:19,590 >> Torej še enkrat, če ne povsem razumeli, kaj to lahko morebiti 180 00:08:19,590 --> 00:08:23,230 se delaš, vedo, da je vsak od teh conditions-- vsako od teh vrstic 181 00:08:23,230 --> 00:08:26,180 je zelo pomemben korak v postopku preverjanja 182 00:08:26,180 --> 00:08:28,350 Če so vaši podatki v resnici šifrirani. 183 00:08:28,350 --> 00:08:31,710 Torej preskoči eno od teh koraki, ni najboljša ideja. 184 00:08:31,710 --> 00:08:34,840 >> Ampak zato, ker imamo to Drugi goto ne rumeno, 185 00:08:34,840 --> 00:08:36,840 in ker, ko smo nekako estetsko 186 00:08:36,840 --> 00:08:40,480 premakniti na levo, kjer je Logično je v tem trenutku, kaj 187 00:08:40,480 --> 00:08:43,230 to pomeni za linijo kode pod tem drugem goto 188 00:08:43,230 --> 00:08:46,480 ne bi si mislil? 189 00:08:46,480 --> 00:08:48,860 To se vedno dogaja, da je treba preskočiti. 190 00:08:48,860 --> 00:08:52,100 Torej gotos splošno namrščil razlogov ne bomo res gredo v, 191 00:08:52,100 --> 00:08:54,940 in seveda v CS50 težimo ne naučiti to izjavo goto, 192 00:08:54,940 --> 00:08:58,130 vendar si lahko zamislite goto ne v smislu, go jump 193 00:08:58,130 --> 00:08:59,600 na drug del kode. 194 00:08:59,600 --> 00:09:03,120 >> Z drugimi besedami preskakovati ta zadnja vrstica v celoti, 195 00:09:03,120 --> 00:09:07,420 in da je rezultat tega nor enostavna napaka, da je bil samo 196 00:09:07,420 --> 00:09:10,330 Rezultat verjetno nekdo kopiranje in lepljenje eno preveč 197 00:09:10,330 --> 00:09:14,150 kolikorkrat je, da celotno varnost iOS in Mac OS 198 00:09:14,150 --> 00:09:18,240 je občutljiva za prestrezanje slabi fantje za kar nekaj časa. 199 00:09:18,240 --> 00:09:19,940 Dokler Apple končno odpravljena. 200 00:09:19,940 --> 00:09:23,100 >> Zdaj, če so nekateri od vas dejansko teče stare različice iOS in Mac OS, 201 00:09:23,100 --> 00:09:27,250 lahko greš na gotofail.com ki je spletna stran, da nekdo ustanovi 202 00:09:27,250 --> 00:09:29,190 v bistvu določanje programsko 203 00:09:29,190 --> 00:09:30,980 Če je vaš računalnik še vedno ranljiva. 204 00:09:30,980 --> 00:09:33,600 In odkrito povedano, če je, je to verjetno dobra ideja 205 00:09:33,600 --> 00:09:36,870 Če želite telefon posodobiti ali vaš Mac na tej točki. 206 00:09:36,870 --> 00:09:40,120 Vendar pa, samo dokaz, da kako Presoja teh nižji ravni 207 00:09:40,120 --> 00:09:42,400 Podrobnosti in pošteno enostavne ideje lahko resnično 208 00:09:42,400 --> 00:09:44,590 prevesti v odločbah in težave, ki 209 00:09:44,590 --> 00:09:47,320 affected-- v tem case-- na milijone ljudi. 210 00:09:47,320 --> 00:09:49,107 >> Zdaj beseda o upravi. 211 00:09:49,107 --> 00:09:50,690 Strokovna skupina bo začela ta prihaja nedelja. 212 00:09:50,690 --> 00:09:53,360 Prejeli boste e-poštno sporočilo, ki ga vikend o odseku, na kateri točki 213 00:09:53,360 --> 00:09:55,290 Postopek resekcijo se bo začelo, če ste jih 214 00:09:55,290 --> 00:09:56,998 spoznal, imate zdaj nekateri novi konflikti. 215 00:09:56,998 --> 00:10:00,180 Tako da to vsako leto zgodi, pa smo se sprejme v dneh, ki prihajajo. 216 00:10:00,180 --> 00:10:02,430 >> Pisarna hours-- storiti naprej oko na tem seznamu tukaj. 217 00:10:02,430 --> 00:10:05,100 Spremeni malo ta teden, posebej čas začetka 218 00:10:05,100 --> 00:10:08,180 in mesto, tako da se posvetuje da pred naslovom uradnih ur 219 00:10:08,180 --> 00:10:09,520 koli od naslednjih štirih noči. 220 00:10:09,520 --> 00:10:12,680 In sedaj beseda o ocenjevanju, še posebej, ko se potopite v problemu 221 00:10:12,680 --> 00:10:14,350 določa eno in še dlje. 222 00:10:14,350 --> 00:10:17,070 >> Torej, po specifikaciji, to so na splošno 223 00:10:17,070 --> 00:10:20,360 osi, vzdolž katere ocenjujemo svoje delo. 224 00:10:20,360 --> 00:10:23,170 Področje se nanaša na to, kar meri svojo kodo pripomočki 225 00:10:23,170 --> 00:10:25,690 lastnosti zahtevajo z našimi specifikacijami. 226 00:10:25,690 --> 00:10:28,290 Z drugimi besedami, koliko delni set si se odgrizne. 227 00:10:28,290 --> 00:10:30,440 Si naredil eno tretjino tega, pol tega, 100% nje. 228 00:10:30,440 --> 00:10:33,000 Tudi če to ni pravilno, koliko ste poskušali? 229 00:10:33,000 --> 00:10:35,290 Tako da zajame raven truda in zneskom 230 00:10:35,290 --> 00:10:38,260 na katero ste odgriznil Težave problema, ki je. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- je ta, da se v kolikšni meri je vaša koda 232 00:10:40,690 --> 00:10:43,150 v skladu z našimi specifikacije in brez hroščev. 233 00:10:43,150 --> 00:10:44,770 Torej, ali je pravilno deluje? 234 00:10:44,770 --> 00:10:48,700 Če damo nekaj vhod, kajne nam dajejo moč, da smo pričakovali? 235 00:10:48,700 --> 00:10:52,570 Design-- zdaj je to prvi od so predvsem kvalitativni tisti, 236 00:10:52,570 --> 00:10:56,180 ali tisti, ki zahtevajo človeške sodbe. 237 00:10:56,180 --> 00:10:59,690 In res, to je razlog, zakaj imamo zaposlenih toliko učnih štipendistov in seveda 238 00:10:59,690 --> 00:11:00,350 pomočniki. 239 00:11:00,350 --> 00:11:03,480 V kolikšni meri je vaša koda napisana dobro? 240 00:11:03,480 --> 00:11:05,810 >> In spet je to zelo Ocena kakovosti 241 00:11:05,810 --> 00:11:09,100 da bodo skupaj z vami na dvosmerno v prihodnjih tednih. 242 00:11:09,100 --> 00:11:12,060 Tako da, ko boste dobili ne le numerične rezultati, ampak tudi 243 00:11:12,060 --> 00:11:16,682 pisno rezultati ali natipkan feedback, ali pisne povratne informacije v angleških besed. 244 00:11:16,682 --> 00:11:19,640 To je tisto, kar bomo uporabili, da vozite proti dejansko pisanje boljše kode. 245 00:11:19,640 --> 00:11:23,320 In v predavanju in oddelku, bomo poskušali izpostaviti out-- tako pogosto, kot smo lahko-- 246 00:11:23,320 --> 00:11:26,420 kaj naredi program, ne samo pravilno in funkcionalno dobro, 247 00:11:26,420 --> 00:11:28,200 ampak tudi dobro oblikovana. 248 00:11:28,200 --> 00:11:31,850 Najbolj učinkovita bi lahko bilo, ali celo najlepši je lahko. 249 00:11:31,850 --> 00:11:33,100 >> Kar nas pripelje do stilu. 250 00:11:33,100 --> 00:11:36,876 Style je navsezadnje estetska sodba. 251 00:11:36,876 --> 00:11:38,750 Ste se odločili dobro Imena za vaše spremenljivke? 252 00:11:38,750 --> 00:11:40,330 Ste pravilno zamaknjen kodo? 253 00:11:40,330 --> 00:11:44,010 Ali je videti dobro, in zato, je enostaven za drugo človeško bitje 254 00:11:44,010 --> 00:11:46,550 brati vaše vsakokratni njegove pravilnosti. 255 00:11:46,550 --> 00:11:50,300 >> Zdaj na splošno po predmetniku, smo dosegli te stvari na pet stopenjski lestvici. 256 00:11:50,300 --> 00:11:53,640 In mi kladivo domov točka da je tri je res dobra. 257 00:11:53,640 --> 00:11:55,550 Zelo hitro naredite ljudje začeti početje aritmetiko. 258 00:11:55,550 --> 00:11:58,133 Ko so dobili tri od pet na pravilnost za nekaj pset 259 00:11:58,133 --> 00:12:02,040 in mislijo, prekleto, jaz grem do 60% ki je v bistvu D ali E. 260 00:12:02,040 --> 00:12:03,980 >> To ni način, kako mislim, od teh številk. 261 00:12:03,980 --> 00:12:06,880 Tri je res dobro in kaj smo splošno pričakujemo na začetku 262 00:12:06,880 --> 00:12:09,820 izraza je, da če ste dobili kup three's-- morda par 263 00:12:09,820 --> 00:12:12,540 sejmov, nekaj fours-- ali nekaj dvojke, nekaj fours-- 264 00:12:12,540 --> 00:12:13,748 To je dober kraj za začetek. 265 00:12:13,748 --> 00:12:16,320 In tako dolgo, kot smo videli krivulja navzgor skozi čas, 266 00:12:16,320 --> 00:12:18,540 ste v zelo dobrem mestu. 267 00:12:18,540 --> 00:12:20,752 >> Formula, ki jih uporabljamo za teža stvari, ki je v bistvu 268 00:12:20,752 --> 00:12:22,710 To po predmetniku, ki samo pomeni, da smo 269 00:12:22,710 --> 00:12:24,750 dati večjo težo korektnosti. 270 00:12:24,750 --> 00:12:27,930 Ker je to zelo pogosto pravilnost ki traja največ časa. 271 00:12:27,930 --> 00:12:28,760 Verjemi mi zdaj. 272 00:12:28,760 --> 00:12:31,190 Boste find-- vsaj v eni pset--, ki vas 273 00:12:31,190 --> 00:12:36,790 porabijo 90% svojega časa delajo na 10% problema. 274 00:12:36,790 --> 00:12:39,320 >> In vse, kar nekako deluje razen ene ali dveh hroščev, 275 00:12:39,320 --> 00:12:41,570 in tistih, ki so hrošči, ki vas pozno ponoči. 276 00:12:41,570 --> 00:12:43,380 To so tisti, ki nekako vam pobegniti. 277 00:12:43,380 --> 00:12:45,560 Ampak, ko spi na njej, ali se udeležujejo uradnih ur 278 00:12:45,560 --> 00:12:48,844 ali postavljanje vprašanj na spletu, ki je Ko boste prišli do te 100% cilja, 279 00:12:48,844 --> 00:12:50,760 in da je, zakaj smo se teža pravilnost in najbolj. 280 00:12:50,760 --> 00:12:54,102 Oblikujte malo manj, in stil malo manj kot to. 281 00:12:54,102 --> 00:12:56,060 Vendar ne mind-- slogu je morda najlažje 282 00:12:56,060 --> 00:12:58,890 od tega za off ugriz kot na slogovnega priročnika. 283 00:12:58,890 --> 00:13:01,580 >> In zdaj, bolj resno Upoštevajte, akademsko poštenostjo. 284 00:13:01,580 --> 00:13:05,000 CS50 je nesrečno razlikovanje pri čemer je največja proizvajalka oglasov sveta 285 00:13:05,000 --> 00:13:07,330 primeri skoraj vsako leto v zgodovini. 286 00:13:07,330 --> 00:13:11,012 To ni zato, ker študentje goljufija v CS50 več tako kot kateri koli drugi razred, 287 00:13:11,012 --> 00:13:13,720 vendar je zaradi narave dela, Dejstvo, da je elektronski, 288 00:13:13,720 --> 00:13:16,636 Dejstvo, da smo si za to, in Dejstvo smo računalniški znanstveniki, 289 00:13:16,636 --> 00:13:20,570 Lahko rečem, smo žal Zelo dobra je odkrivanje. 290 00:13:20,570 --> 00:13:22,710 >> Torej, kaj to pomeni realno? 291 00:13:22,710 --> 00:13:24,820 Torej to, po predmetniku, Tečaj filozofija 292 00:13:24,820 --> 00:13:28,090 res ne omejijo, da so smiselne. 293 00:13:28,090 --> 00:13:31,684 Tam je to meja med delaš nekega dela na svoje 294 00:13:31,684 --> 00:13:34,100 in dobili malo razumno pomoč od prijatelja, 295 00:13:34,100 --> 00:13:38,020 in popolna delaš to delo za vaš Prijatelj, ali mu svojo kodo pošiljanje 296 00:13:38,020 --> 00:13:41,080 tako, da je ali je lahko preprosto vzemi ali sposoditi ven pravico. 297 00:13:41,080 --> 00:13:43,580 In da prečka črto da smo pripravljeni v razredu. 298 00:13:43,580 --> 00:13:45,410 >> Glej, učni načrt navsezadnje za proge 299 00:13:45,410 --> 00:13:48,209 da se pripravi kot razumno in nerazumno obnašanje, 300 00:13:48,209 --> 00:13:50,000 ampak res ne zavre navzdol v bistvu 301 00:13:50,000 --> 00:13:53,980 za svoje delo potrebujejo, da biti svoj na koncu. 302 00:13:53,980 --> 00:13:56,230 Zdaj s tem je dejal, je hevristično. 303 00:13:56,230 --> 00:13:58,980 Ker, kot si morda imagine-- iz uradnih urah in vizualne 304 00:13:58,980 --> 00:14:01,060 in videi ki smo jih prikazano tako far-- CS50 305 00:14:01,060 --> 00:14:04,530 je res mišljeno, da se v primeru sodelovanja in kot zadruge in kot družbena 306 00:14:04,530 --> 00:14:06,450 kot je mogoče. 307 00:14:06,450 --> 00:14:08,570 So sodelovanje, saj je strog. 308 00:14:08,570 --> 00:14:11,314 >> Ampak s tem je dejal, hevristična, kot boste videli v predmetniku, 309 00:14:11,314 --> 00:14:12,980 je, da ko imate nekaj težav. 310 00:14:12,980 --> 00:14:16,470 Imate kakšno napako v kodi, ki vas ne more rešiti, je smiselno za vas 311 00:14:16,470 --> 00:14:18,039 pokazati svojo kodo nekomu drugemu. 312 00:14:18,039 --> 00:14:21,080 Prijatelj tudi v razredu, prijatelj sedi poleg vas na uradne ure, 313 00:14:21,080 --> 00:14:22,680 ali član osebja. 314 00:14:22,680 --> 00:14:25,810 Vendar pa ne smejo pokazati svojo kodo za vas. 315 00:14:25,810 --> 00:14:27,710 >> Z drugimi besedami, odgovoriti na vaše question-- 316 00:14:27,710 --> 00:14:29,940 Rabim help-- ni oh, tukaj je moja koda. 317 00:14:29,940 --> 00:14:32,440 Oglejte si to in sklepati iz tega, kar želiš. 318 00:14:32,440 --> 00:14:34,580 Zdaj, seveda, tam Tako je jasno, da igro 319 00:14:34,580 --> 00:14:37,760 ta sistem, v katerem vam bom pokazal, moja koda, preden vprašanje. 320 00:14:37,760 --> 00:14:40,150 Pokaži mi svojo kodo preden vprašanje. 321 00:14:40,150 --> 00:14:45,870 Ampak spet videti učni načrt za drobnejše podatke o tem, kje je ta linija. 322 00:14:45,870 --> 00:14:50,606 >> Samo, da je sedaj slikati sliko in deliti kot transparentno, kot je mogoče 323 00:14:50,606 --> 00:14:53,480 kjer smo v zadnjih letih, to je število primerov Ad sveta 324 00:14:53,480 --> 00:14:56,260 da CS50 je imel več V zadnjih sedmih letih. 325 00:14:56,260 --> 00:14:58,717 14 primerov je to zadnjo jesen. 326 00:14:58,717 --> 00:15:01,300 V smislu vključenih dijakov, je bilo 20 nekaj čudno študente 327 00:15:01,300 --> 00:15:02,490 Preteklo jesen. 328 00:15:02,490 --> 00:15:05,670 Tam je bil vrhunec 33 študentje pred nekaj leti. 329 00:15:05,670 --> 00:15:08,830 Mnogi od njih so na žalost ni več tukaj na kampusu. 330 00:15:08,830 --> 00:15:13,100 >> Študenti, ki sodelujejo kot odstotek Razred je v preteklosti gibala od 0% 331 00:15:13,100 --> 00:15:17,300 do 5,3%, kar je samo reči to je vsako leto izziv. 332 00:15:17,300 --> 00:15:20,390 In proti temu koncu, kaj želimo narediti je posredovati eno 333 00:15:20,390 --> 00:15:24,310 da smo dd-- samo FYI-- primerjati na pravičnosti za tiste študente, ki 334 00:15:24,310 --> 00:15:26,520 so zato naslednji linijo. 335 00:15:26,520 --> 00:15:29,620 Mi primerjati vse tok stališča proti vsem preteklih misijah 336 00:15:29,620 --> 00:15:30,840 iz zadnjih mnogo let. 337 00:15:30,840 --> 00:15:33,620 >> Vemo tudi, kako se vprašaš okrog in najti kode zbirke 338 00:15:33,620 --> 00:15:36,360 online, diskusijski forumi online, prosta delovna mesta na spletu. 339 00:15:36,360 --> 00:15:41,580 Če lahko študent najti, lahko zagotovo zdi, da toliko, kot smo žal storiti. 340 00:15:41,580 --> 00:15:45,330 Torej, kaj boste videli v predmetniku čeprav je ta klavzula obžalovanje. 341 00:15:45,330 --> 00:15:47,500 Ne morem zagotovo cenim, in vsi smo je 342 00:15:47,500 --> 00:15:50,870 Osebje, ki je naredil tečaj, kot to, ali je to samo ena sčasoma 343 00:15:50,870 --> 00:15:53,997 Zagotovo vem, kaj je to všeč, ko življenje v napoto, ko imate 344 00:15:53,997 --> 00:15:56,080 nekateri pozno ponoči deadline-- ne le v tem razredu, 345 00:15:56,080 --> 00:15:58,660 vendar another-- ko ste popolnoma izčrpan, pod stresom, 346 00:15:58,660 --> 00:16:00,659 imajo neizmerno število drugih stvari za početi. 347 00:16:00,659 --> 00:16:03,660 Vas bo na neki točki v življenje prav gotovo slabo, morda prepozno 348 00:16:03,660 --> 00:16:04,620 Odločitev noč. 349 00:16:04,620 --> 00:16:06,520 >> Torej po predmetniku, da je ta klavzula, 350 00:16:06,520 --> 00:16:10,629 tak, da če v roku 72 ur, kar nekatere slabe odločitve, imate do nje 351 00:16:10,629 --> 00:16:12,670 in stik z mano in eden od vodij tečaja je 352 00:16:12,670 --> 00:16:14,300 in bomo imeli pogovor. 353 00:16:14,300 --> 00:16:16,220 Bomo ročaj stvari interno v upanju, 354 00:16:16,220 --> 00:16:18,770 za to vse bolj postaja poučevanje trenutek ali življenjsko lekcijo, 355 00:16:18,770 --> 00:16:22,120 in ni nekaj, s posebej drastične posledice 356 00:16:22,120 --> 00:16:24,570 kot lahko vidite na teh lestvicah tukaj. 357 00:16:24,570 --> 00:16:26,540 >> Torej, to je zelo resna tone. 358 00:16:26,540 --> 00:16:29,960 Dovolite nam, premor za samo nekaj sekund, da razbijem napetost. 359 00:16:29,960 --> 00:16:34,442 >> [Predvajanje glasbe] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> DAVID J. Malan: Dobro, Torej, kako je bilo, da je za segue? 362 00:17:20,250 --> 00:17:22,059 Današnjih glavnih temah. 363 00:17:22,059 --> 00:17:23,859 Prvi od katerih je abstrakcija. 364 00:17:23,859 --> 00:17:26,900 Drug ki se bo predstavitev podatkov, ki odkrito 365 00:17:26,900 --> 00:17:31,640 je res suh način rekel, kako lahko lotili reševanja problemov in razmišljanja 366 00:17:31,640 --> 00:17:33,250 o reševanju težav? 367 00:17:33,250 --> 00:17:37,285 Torej ste videli v nič, in ste videl morda že v pset1 s C 368 00:17:37,285 --> 00:17:39,930 , da ne samo, da lahko uporabite Funkcije, kot so printf, 369 00:17:39,930 --> 00:17:42,770 da drugi ljudje v let preteklosti napisal za vas. 370 00:17:42,770 --> 00:17:45,340 Napišete lahko tudi svoje funkcije. 371 00:17:45,340 --> 00:17:48,440 >> In čeprav morda ne boste imeli to storjeno v C, in odkrito v pset1 372 00:17:48,440 --> 00:17:51,866 ne boste res potrebujejo, da napišete lastna funkcija, saj je problem-- 373 00:17:51,866 --> 00:17:53,990 medtem ko je morda zastrašujoče na Prvi glance-- boste videli 374 00:17:53,990 --> 00:17:57,910 lahko končno rešili z ni vse, da je veliko vrstic kode. 375 00:17:57,910 --> 00:18:01,140 Toda s tem, da omenjeni v smislu pisanja svojo funkcijo, 376 00:18:01,140 --> 00:18:03,570 Zavedam se, da C ne daje si to sposobnost. 377 00:18:03,570 --> 00:18:06,940 >> Jaz grem v današnjem izvorno kodo, ki je že na voljo na spletu, 378 00:18:06,940 --> 00:18:10,900 in bom, da gredo naprej in odprt up program, imenovan funkcija 0.C, 379 00:18:10,900 --> 00:18:14,620 in v funkciji nič bomo videli nekaj stvari. 380 00:18:14,620 --> 00:18:19,160 V prvih vrsticah 18 do 23 je moja glavna naloga. 381 00:18:19,160 --> 00:18:22,414 In zdaj, ko sva začeli brati koda, da ne bomo pisal na letenje, 382 00:18:22,414 --> 00:18:25,080 ampak sem napisal vnaprej ali pa, da si v problem nastaviti 383 00:18:25,080 --> 00:18:27,910 lahko prejmejo ob bila napisana vnaprej. 384 00:18:27,910 --> 00:18:30,040 Dober način za začetek branje kodo nekoga drugega 385 00:18:30,040 --> 00:18:31,400 so si za glavno funkcijo. 386 00:18:31,400 --> 00:18:34,420 Ugotovimo, kje ta vnos Bistvo je, da teče program, 387 00:18:34,420 --> 00:18:36,580 in jo nato logično od tam. 388 00:18:36,580 --> 00:18:40,190 >> Tako da je ta program navidezno odtisi tvoje ime sledi dvopičje. 389 00:18:40,190 --> 00:18:42,490 Nato smo uporabili GetString iz knjižnice CS50 390 00:18:42,490 --> 00:18:46,050 da bi dobili niz, ali besedo ali frazo od uporabnika na tipkovnico. 391 00:18:46,050 --> 00:18:48,390 In potem je to stvar tu-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Zdaj PrintName ni Funkcija, ki prihaja s C. 393 00:18:51,420 --> 00:18:52,970 To ni v standardni io.h. 394 00:18:52,970 --> 00:18:55,570 To ni v CS50.h. 395 00:18:55,570 --> 00:18:57,880 To je precej v isti datoteki. 396 00:18:57,880 --> 00:19:01,000 Obvestilo, če sem se pomaknite navzdol a bit-- vrstice 25 do 27-- 397 00:19:01,000 --> 00:19:05,330 to je samo lepa način komentiranja kodo z uporabo zvezde in poševnico. 398 00:19:05,330 --> 00:19:07,320 To je multi-linija pripombe, in to je samo 399 00:19:07,320 --> 00:19:10,570 moj opis v modrino kaj ta funkcija ne. 400 00:19:10,570 --> 00:19:14,530 >> Ker v vrsticah 28 do 31, Napisal sem super enostavno funkcijo 401 00:19:14,530 --> 00:19:16,280 čigar ime je PrintName. 402 00:19:16,280 --> 00:19:19,560 To traja, koliko argumenti, bi rekli? 403 00:19:19,560 --> 00:19:25,120 Torej ena argument-- zato, ker je eden argument naštete so v oklepaje. 404 00:19:25,120 --> 00:19:27,000 Vrsta, ki je niz. 405 00:19:27,000 --> 00:19:30,240 Kar pomeni PrintName je kot te črne škatle 406 00:19:30,240 --> 00:19:32,910 ali funkcija, ki traja kot vhodni niz. 407 00:19:32,910 --> 00:19:35,730 >> In ime tega String prikladno bo ime. 408 00:19:35,730 --> 00:19:37,840 Ne S, ne N, ampak ime. 409 00:19:37,840 --> 00:19:41,090 Torej, kaj PrintName storiti? 410 00:19:41,090 --> 00:19:42,210 Lepo je preprost. 411 00:19:42,210 --> 00:19:45,390 Tako kot ene vrstice kode za printf, ampak očitno je 412 00:19:45,390 --> 00:19:47,950 natisne "Hello", tako in tako. 413 00:19:47,950 --> 00:19:50,070 Kadar je tako in tako prihaja iz argumenta. 414 00:19:50,070 --> 00:19:52,300 >> Zdaj to ni veliko inovacij tukaj. 415 00:19:52,300 --> 00:19:56,710 Res sem sprejela program, ki bi lahko so bile napisane z eno vrstico kode 416 00:19:56,710 --> 00:20:00,190 s tem da je to tukaj, in ga spremenili v nekaj 417 00:20:00,190 --> 00:20:04,920 ki vključuje nekatere šest ali sedem ali tako vrstic kode vso pot dol. 418 00:20:04,920 --> 00:20:08,190 >> Vendar je prakticiranje od imenovano načelo abstrakcije. 419 00:20:08,190 --> 00:20:12,550 Vrsta zakapsulacijsko notranjosti novega funkcija, ki ima ime in bolje 420 00:20:12,550 --> 00:20:14,590 še, da je ime dobesedno pravi, kaj počne. 421 00:20:14,590 --> 00:20:16,880 Mislim printf--, da to ni predvsem opisno. 422 00:20:16,880 --> 00:20:18,932 Če želim ustvariti puzzle piece, ali če I 423 00:20:18,932 --> 00:20:21,140 želite ustvariti funkcijo da natisne ime nekoga, 424 00:20:21,140 --> 00:20:23,230 lepota tem je, da sem lahko dejansko 425 00:20:23,230 --> 00:20:27,170 daje tej funkciji ime , ki opisuje, kaj počne. 426 00:20:27,170 --> 00:20:29,844 >> Sedaj je potrebno na vhod, ki Sem samovoljno imenuje ime, 427 00:20:29,844 --> 00:20:32,760 ampak to je preveč čudovito opisna namesto da bi malo več 428 00:20:32,760 --> 00:20:36,140 generična kot S. in nična, za zdaj, samo pomeni, 429 00:20:36,140 --> 00:20:38,330 da ta funkcija ne Daj mi nazaj ničesar. 430 00:20:38,330 --> 00:20:41,127 To ni všeč GetString da Dobesedno mi roke nazaj niz 431 00:20:41,127 --> 00:20:43,960 tako kot smo to storili s koščki papirja s svojimi sošolci prejšnji teden, 432 00:20:43,960 --> 00:20:45,990 ampak ima samo stranski učinek. 433 00:20:45,990 --> 00:20:48,080 Natisne nekaj zaslonu. 434 00:20:48,080 --> 00:20:53,880 >> Torej, na koncu dneva, če Ne bo funkcija-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 bomo videli, da se prosi za moje ime. 436 00:20:55,450 --> 00:20:58,150 Sem tip Davida, in vrst iz mojega imena. 437 00:20:58,150 --> 00:21:01,080 Če bi še enkrat z Robom, to bo rekel "Zdravo, Rob." 438 00:21:01,080 --> 00:21:04,280 Tako preprosta ideja, ampak morda ekstrapolirati ta duševno 439 00:21:04,280 --> 00:21:06,750 da so dobili svoje programe malo bolj zapletena, 440 00:21:06,750 --> 00:21:10,290 in želite napisati kos kodo in klic, ki code-- sklicevati 441 00:21:10,290 --> 00:21:13,270 da code-- nekateri opisni poimenovati kot PrintName, 442 00:21:13,270 --> 00:21:15,600 C ne privoščijo nam te sposobnosti. 443 00:21:15,600 --> 00:21:17,660 >> Tu je še en preprost primer. 444 00:21:17,660 --> 00:21:22,940 Na primer, če sem odprla pila od danes imenuje return.c, 445 00:21:22,940 --> 00:21:24,270 opazil, kaj sem storil tukaj. 446 00:21:24,270 --> 00:21:26,330 Večina te glavne funkcije je printf. 447 00:21:26,330 --> 00:21:30,360 Najprej sem samovoljno inicializacijo spremenljivka imenuje x število 2. 448 00:21:30,360 --> 00:21:34,110 Nato sem izpisal "x je sedaj % I ", ki poteka v vrednosti x. 449 00:21:34,110 --> 00:21:35,500 Torej, jaz sem samo rekel, kaj je to. 450 00:21:35,500 --> 00:21:37,208 >> Zdaj sem le pogumno trdijo z printf. 451 00:21:37,208 --> 00:21:42,050 Jaz sem cubing da vrednost x, in sem to s klicem funkcije 452 00:21:42,050 --> 00:21:45,590 imenovana kocka kratki vx kot argument, 453 00:21:45,590 --> 00:21:49,300 in nato shranite izhod v spremenljivko samem, x. 454 00:21:49,300 --> 00:21:51,340 Torej sem clobbering vrednost x. 455 00:21:51,340 --> 00:21:53,380 Jaz nujni vrednost x z karkoli 456 00:21:53,380 --> 00:21:56,510 Rezultat kliče ta funkcija kocka. 457 00:21:56,510 --> 00:21:59,530 In potem sem izpisal nekaj puhasto stvari sem rekel, kar sem storil. 458 00:21:59,530 --> 00:22:01,600 >> Torej, kaj potem je kocka? 459 00:22:01,600 --> 00:22:03,510 Opazili, kaj je bistveno tukaj drugačna. 460 00:22:03,510 --> 00:22:05,540 Dal sem funkcijo ime kot prej. 461 00:22:05,540 --> 00:22:08,270 Sem določeno ime za argument. 462 00:22:08,270 --> 00:22:11,650 Tokrat se imenuje n namesto imena vendar bi jaz poklical kaj hočem. 463 00:22:11,650 --> 00:22:12,650 Toda to je drugačna. 464 00:22:12,650 --> 00:22:14,080 Ta stvar na levi strani. 465 00:22:14,080 --> 00:22:16,290 Prej je bilo tisto ključno besedo? 466 00:22:16,290 --> 00:22:16,870 Boys. 467 00:22:16,870 --> 00:22:18,580 Zdaj je očitno int. 468 00:22:18,580 --> 00:22:20,630 >> Torej, kaj je mogoče vzeti? 469 00:22:20,630 --> 00:22:24,090 Ker je nična znanilec nekako niča, in da je bilo tako. 470 00:22:24,090 --> 00:22:25,970 PrintName vrnil ničesar. 471 00:22:25,970 --> 00:22:27,942 To je naredil nekaj, ampak ni me vrniti 472 00:22:27,942 --> 00:22:30,650 nekaj, kar bi lahko dal na Leva stran enačaj 473 00:22:30,650 --> 00:22:32,460 kot da sem tukaj naredil on line 22. 474 00:22:32,460 --> 00:22:36,780 >> Torej, če rečem v vrstici 30, kaj je to verjetno kar pomeni, 475 00:22:36,780 --> 00:22:38,610 kaj kocka ne za mene? 476 00:22:38,610 --> 00:22:41,110 Ja? 477 00:22:41,110 --> 00:22:42,310 Se vrne celo število. 478 00:22:42,310 --> 00:22:44,590 Tako da mi roke nazaj, za primer, kos papirja 479 00:22:44,590 --> 00:22:46,580 , na katerem je napisan odgovor. 480 00:22:46,580 --> 00:22:50,130 2 kubikov, ali 3 kubikov, ali 4 cubed-- karkoli sem opravil leta, 481 00:22:50,130 --> 00:22:51,540 in kako sem to izvesti? 482 00:22:51,540 --> 00:22:54,810 No, samo n krat n krat n je, kako bi jaz CUBE vrednost. 483 00:22:54,810 --> 00:22:57,110 Torej še enkrat, super enostavna ideja, vendar demonstrativen 484 00:22:57,110 --> 00:23:00,100 Zdaj, kako lahko napišemo funkcije ki nas dejansko imela nazaj 485 00:23:00,100 --> 00:23:02,380 Vrednosti, ki bi bili lahko zanimivi. 486 00:23:02,380 --> 00:23:05,740 >> Oglejmo si en zadnji primer tukaj se imenuje funkcija ena. 487 00:23:05,740 --> 00:23:08,530 V tem primeru, se začne , da bi dobili bolj prepričljivi. 488 00:23:08,530 --> 00:23:12,400 Torej v funkciji eni, to program-- obvestilo koncu 489 00:23:12,400 --> 00:23:14,920 poziva funkcijo imenovano GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt ni Funkcija v knjižnici CS50, 491 00:23:17,800 --> 00:23:20,400 vendar pa smo se odločili, želi, da bi obstajal. 492 00:23:20,400 --> 00:23:24,550 >> Torej, če smo se pomaknite navzdol, nato v datoteko, opazili, kako sem šel okoli izvajanju 493 00:23:24,550 --> 00:23:26,560 dobili pozitivno int, in jaz pravijo, da je bolj prepričljiv 494 00:23:26,560 --> 00:23:28,992 ker je to dostojno Število vrstic kode. 495 00:23:28,992 --> 00:23:30,700 To ni samo neumna Malo programa igrača. 496 00:23:30,700 --> 00:23:33,870 To je dejansko dobil nekaj preverjanje napak in delaš kaj bolj koristnega. 497 00:23:33,870 --> 00:23:38,470 >> Torej, če si niste videli potopis videoposnetke, ki smo vgrajeni v pset1, 498 00:23:38,470 --> 00:23:42,350 vedo, da je ta vrsta zanka v C, pisane v duhu 499 00:23:42,350 --> 00:23:44,270 na vrste stvari Scratch lahko storim. 500 00:23:44,270 --> 00:23:46,320 In to pravi, da to storite. 501 00:23:46,320 --> 00:23:47,500 Natisni to. 502 00:23:47,500 --> 00:23:51,860 Potem pa pojdi naprej in se n-- dobili int in ga shranite na n, 503 00:23:51,860 --> 00:23:55,760 in da to znova in znova in delaš spet tako dolgo, kot je n manj kot ena. 504 00:23:55,760 --> 00:23:58,720 >> Torej n se bo manj kot en samo, če človek ne sodeluje. 505 00:23:58,720 --> 00:24:01,980 Če on ali ona je tipkanje v 0 ali -1 ali -50, 506 00:24:01,980 --> 00:24:04,790 ta zanka se dogaja, da znova in znova izvršitve. 507 00:24:04,790 --> 00:24:07,549 In na koncu opazil, sem preprosto vrne vrednost. 508 00:24:07,549 --> 00:24:09,590 Torej, zdaj imamo funkcijo da si bi bilo lepo 509 00:24:09,590 --> 00:24:14,040 če bi CS50 izvajati CS50.h in CS50.c za vas, 510 00:24:14,040 --> 00:24:16,520 ampak tukaj smo lahko zdaj izvajanje tega sami. 511 00:24:16,520 --> 00:24:19,230 >> Ampak dva ugotovitve o nekaterih ključnih podrobnosti. 512 00:24:19,230 --> 00:24:24,390 One-- zakaj Izjavljam int n, misliš, na liniji 29 513 00:24:24,390 --> 00:24:27,139 namesto samo delaš to tukaj, ki je 514 00:24:27,139 --> 00:24:28,930 bolj v skladu z kaj smo naredili prejšnji teden? 515 00:24:28,930 --> 00:24:29,430 Ja? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Dobra misel. 518 00:24:35,110 --> 00:24:37,080 Torej, če bi ga tukaj, je, kot da mi 519 00:24:37,080 --> 00:24:39,110 da ga znova in znova o razglasitvi. 520 00:24:39,110 --> 00:24:42,000 To samo po sebi je ni problematično, po sebi, 521 00:24:42,000 --> 00:24:43,940 saj potrebujemo le Vrednost enkrat in nato 522 00:24:43,940 --> 00:24:45,330 bomo dobili novega anyway. 523 00:24:45,330 --> 00:24:45,940 Ampak dobra misel. 524 00:24:45,940 --> 00:24:46,440 Ja? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Close. 527 00:24:53,330 --> 00:24:59,030 Zato, ker sem izjavila n na vrstica 29 zunaj zanke, 528 00:24:59,030 --> 00:25:01,390 je dostopen na celotnem ves ta funkcija. 529 00:25:01,390 --> 00:25:05,400 Ne pa tudi druge funkcije, saj n je še vedno znotraj teh Curly 530 00:25:05,400 --> 00:25:06,470 naramnice tukaj. 531 00:25:06,470 --> 00:25:07,940 Tako-- prepričan. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Točno tako. 534 00:25:12,940 --> 00:25:14,356 Torej je to še bolj do točke. 535 00:25:14,356 --> 00:25:18,600 Če bomo namesto tega izjavila n tukaj na liniji 32, 536 00:25:18,600 --> 00:25:22,340 to je problematično, ker guess kam moram priti do njih? 537 00:25:22,340 --> 00:25:25,620 Na liniji 34, in Preprosto pravilo palca je, 538 00:25:25,620 --> 00:25:30,060 ki jih lahko uporabite samo spremenljivka znotraj najnovejših zavitimi oklepaji 539 00:25:30,060 --> 00:25:31,420 v kateri ste ga razglasi. 540 00:25:31,420 --> 00:25:35,230 >> Žal, vrstica 34 je ena vrstica prepozno, 541 00:25:35,230 --> 00:25:38,560 ker sem že zaprta curly brace na liniji 33 542 00:25:38,560 --> 00:25:41,220 da ustreza curly brace on line 30. 543 00:25:41,220 --> 00:25:44,180 In tako je ta način rekel da je ta spremenljivka int scoped, 544 00:25:44,180 --> 00:25:46,970 tako rekoč, le v notranjosti teh zavitimi oklepaji. 545 00:25:46,970 --> 00:25:48,910 Prav tako ne obstaja zunaj njih. 546 00:25:48,910 --> 00:25:51,580 >> Torej res, če naredim to narobe, dovolite mi, shranite kode 547 00:25:51,580 --> 00:25:53,530 kot je-- je napačno napisana. 548 00:25:53,530 --> 00:25:57,990 Dovolite mi, da gredo naprej in ne predstavljajo Funkcija-1, in notice-- napake. 549 00:25:57,990 --> 00:26:03,502 Uporaba neprijavljenega identifikator n na liniji 35, ki je prav tukaj. 550 00:26:03,502 --> 00:26:05,210 In če smo se pomaknite navzgor nadalje, eden. 551 00:26:05,210 --> 00:26:08,750 Uporaba neprijavljenega identifikator n on line 34. 552 00:26:08,750 --> 00:26:11,200 >> Torej prevajalnik, Jek, je opazil, da je to samo 553 00:26:11,200 --> 00:26:13,720 ne obstajajo, čeprav jasno, da je tam vizualno. 554 00:26:13,720 --> 00:26:16,090 Tako preprosto je to fix razglasitvi tam. 555 00:26:16,090 --> 00:26:18,790 >> Zdaj pa me pomaknite na začetek datoteke. 556 00:26:18,790 --> 00:26:21,080 Kaj skoči ven na vas, kot pa malo drugačna 557 00:26:21,080 --> 00:26:23,070 od stvari, ki jih pogledal zadnjem tednu? 558 00:26:23,070 --> 00:26:26,990 Ne samo, da imam ime, ne le Imam nekaj ostrih vključuje up top, 559 00:26:26,990 --> 00:26:29,340 Nekaj ​​sem kliče prototip. 560 00:26:29,340 --> 00:26:36,100 Zdaj, ko je videti strašno podobno temu, kar pravkar smo videli pred nekaj trenutki na liniji 27. 561 00:26:36,100 --> 00:26:39,230 >> Torej sklepam iz drugačne sporočilo o napaki, zakaj sem to storil. 562 00:26:39,230 --> 00:26:42,050 Dovolite mi, da gredo naprej in izbrisati te vrstice ni. 563 00:26:42,050 --> 00:26:44,240 In tako vemo nič o prototipu. 564 00:26:44,240 --> 00:26:45,430 Remake to datoteko. 565 00:26:45,430 --> 00:26:46,890 Naredite eno od funkcij. 566 00:26:46,890 --> 00:26:48,090 In zdaj, prekleto, štiri napake. 567 00:26:48,090 --> 00:26:50,220 Pojdimo se pomaknite do prvega. 568 00:26:50,220 --> 00:26:55,070 >> Implicitno izjavo o funkciji dobili pozitivno int je ničen v C99. 569 00:26:55,070 --> 00:26:57,780 C99 samo pomeni 1.999 različica jezika 570 00:26:57,780 --> 00:26:59,710 C, kar je tisto, kar smo dejansko uporabo. 571 00:26:59,710 --> 00:27:01,050 Torej, kaj to pomeni? 572 00:27:01,050 --> 00:27:05,250 No C- natančneje C compilers-- so precej neumni programi. 573 00:27:05,250 --> 00:27:07,420 Oni samo vedo, kaj ste jim je povedal, in to je 574 00:27:07,420 --> 00:27:08,960 dejansko tematsko iz prejšnjega tedna. 575 00:27:08,960 --> 00:27:12,910 >> Problem je, da če grem o izvajanju ime tu gor, 576 00:27:12,910 --> 00:27:17,640 in kličem funkcijo imenovano GetPositiveInt tukaj na liniji 20, 577 00:27:17,640 --> 00:27:22,520 da funkcija tehnično ne obstaja, dokler prevajalnik vidi linijo 27. 578 00:27:22,520 --> 00:27:25,450 Na žalost, je prevajalnik počne stvari top, dol, levo, desno, 579 00:27:25,450 --> 00:27:29,580 zato, ker ni videl Izvajanje GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 vendar vidi skušaš da ga uporabljate tu gor, 581 00:27:32,400 --> 00:27:35,810 to je le, da bo bail-- vpij ste z napako message-- morda 582 00:27:35,810 --> 00:27:38,440 skrivnosten, in ne dejansko prevesti datoteko. 583 00:27:38,440 --> 00:27:41,940 >> Tako ti prototip navzgor Tu je seveda odveč. 584 00:27:41,940 --> 00:27:47,870 Dobesedno, sem šel dol in sem prekopiral in prilepili to, in sem jo dal sem gor. 585 00:27:47,870 --> 00:27:51,020 Void bi bilo bolj pravilno, da se bomo dobesedno kopirate in prilepite ta čas. 586 00:27:51,020 --> 00:27:52,854 Sem dobesedno kopirali in prilepili. 587 00:27:52,854 --> 00:27:54,270 Res enako kot drobtine kruha. 588 00:27:54,270 --> 00:27:56,260 >> Malo namig, da prevajalnik. 589 00:27:56,260 --> 00:27:58,860 Ne vem, kaj to počne še ni, vendar sem obljubil, da vas 590 00:27:58,860 --> 00:28:00,260 da bo obstajala koncu. 591 00:28:00,260 --> 00:28:04,010 In to je, zakaj je ta line-- v linija 16-- konča s podpičjem. 592 00:28:04,010 --> 00:28:05,486 To je odveč by design. 593 00:28:05,486 --> 00:28:05,986 Ja? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Če niste povezali knjižnice da -Hej oh, dobro vprašanje. 596 00:28:14,360 --> 00:28:17,350 Sharp tudi header datotek vključkov. 597 00:28:17,350 --> 00:28:20,040 Morali bilo-- smeli skoraj vedno na samem vrhu 598 00:28:20,040 --> 00:28:23,270 datoteke za similar-- za točno istega razloga, ja. 599 00:28:23,270 --> 00:28:26,430 Ker v standardni io.h je dobesedno vrstica 600 00:28:26,430 --> 00:28:30,560 kot je ta, ampak z besedo printf in s svojimi argumenti in tipu vračanja. 601 00:28:30,560 --> 00:28:33,310 In tako s tem oster in vključuje tu, kaj ste dobesedno delaš 602 00:28:33,310 --> 00:28:36,380 je kopiranje in lepljenje vsebine nekdo drug napisal do vrha. 603 00:28:36,380 --> 00:28:39,660 Čimer cluing kodo v za Dejstvo, da te funkcije ne obstajajo. 604 00:28:39,660 --> 00:28:40,160 Ja? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Absolutno. 607 00:28:48,260 --> 00:28:51,690 Torej, zelo pametno in pravilno Rešitev bi bila, veš kaj? 608 00:28:51,690 --> 00:28:53,760 Ne vem, kaj Prototip je, vendar vem, 609 00:28:53,760 --> 00:28:56,390 če sem razumel, da je C samo dumb in rethinks vrha do dna. 610 00:28:56,390 --> 00:28:57,820 Pa kaj je to dal, kar želi. 611 00:28:57,820 --> 00:29:01,650 Odprimo to kodo, prilepite gor top, zdaj pa potisnite glavni dol. 612 00:29:01,650 --> 00:29:03,470 S tem bi tudi rešili problem. 613 00:29:03,470 --> 00:29:07,409 >> Vendar pa lahko zelo hitro prišli do Scenarij, po katerem je treba poklicati B, 614 00:29:07,409 --> 00:29:10,075 in morda B pokliče nazaj na A. Ta je nekaj, kar se imenuje rekurzija, 615 00:29:10,075 --> 00:29:11,370 in se bomo vrnili na to. 616 00:29:11,370 --> 00:29:13,911 In je lahko ali pa ne bo dobro stvar, vendar lahko zagotovo 617 00:29:13,911 --> 00:29:15,110 prekinil to rešitev. 618 00:29:15,110 --> 00:29:17,690 >> In poleg tega, jaz bi trdijo, slogovno, 619 00:29:17,690 --> 00:29:20,760 še posebej, če svoje programe postanejo tako dolgo in tako dolgo, 620 00:29:20,760 --> 00:29:23,064 to je samo zelo priročen naj glavni na vrhu 621 00:29:23,064 --> 00:29:25,730 ker je to stvar, ki najbolj programerji bodo skrbi. 622 00:29:25,730 --> 00:29:28,150 In tako se je nekoliko čistejši, verjetno, da to storite tako, 623 00:29:28,150 --> 00:29:30,380 Sprva sem to storil s prototipom še 624 00:29:30,380 --> 00:29:33,396 čeprav izgleda malo odveč, na prvi pogled. 625 00:29:33,396 --> 00:29:33,895 Ja? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Žal mi je, lahko pa rečem glasneje? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Če preklopite lokacije izvajanje in prototip? 630 00:29:49,580 --> 00:29:51,270 Torej, to je dobro vprašanje. 631 00:29:51,270 --> 00:29:53,780 Če to ponovno razglasila navzdol tukaj, da vidimo, kaj se zgodi. 632 00:29:53,780 --> 00:29:55,530 Torej, če sem dal to navzdol tu govoriš. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Oh, žal mi je. 635 00:29:58,360 --> 00:29:58,859 Glasneje? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Še glasnejši. 638 00:30:04,011 --> 00:30:04,760 Oh, dobro vprašanje. 639 00:30:04,760 --> 00:30:05,860 Bi razveljavili funkcijo? 640 00:30:05,860 --> 00:30:08,901 Veš, po vseh teh letih, sem nikoli dal prototip kasneje. 641 00:30:08,901 --> 00:30:13,810 Torej, kaj je storiti, da bi funkcijo-1 po tem. 642 00:30:13,810 --> 00:30:15,279 >> [Mrmra] 643 00:30:15,279 --> 00:30:16,320 DAVID J. Malan: Oh, počakaj. 644 00:30:16,320 --> 00:30:17,944 Še vedno moramo dati vse do vrha. 645 00:30:17,944 --> 00:30:21,400 Torej, dajmo to narediti tukaj, če sem razumevanje vaše vprašanje pravilno. 646 00:30:21,400 --> 00:30:24,700 Bom dal vse, vključno z prototip nad glavno, 647 00:30:24,700 --> 00:30:28,180 ampak bom dal prototip nadaljevanju izvajanja. 648 00:30:28,180 --> 00:30:33,190 >> Torej, če naredim eno, sem že nazaj error-- unused spremenljivka n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Oh, tam. 651 00:30:37,860 --> 00:30:38,360 Hvala. 652 00:30:38,360 --> 00:30:39,430 Poglejmo, se znebimo tega. 653 00:30:39,430 --> 00:30:41,304 To je drugačen bug, tako da je prezreti, da je. 654 00:30:41,304 --> 00:30:43,910 Kaj je res hitro remake to. 655 00:30:43,910 --> 00:30:48,100 >> OK, tako da argument podatki ne ga formata String uporablja 656 00:30:48,100 --> 00:30:52,310 n-- oh, to je zato, ker Spremenil sem, da ti tukaj. 657 00:30:52,310 --> 00:30:55,885 Dobro vemo, kaj je odgovor bo da-- vse v redu, gremo. 658 00:30:55,885 --> 00:31:00,560 Ah, hvala za pozitivno. 659 00:31:00,560 --> 00:31:03,430 V redu, bom popraviti to kodo after-- prezreti to posebno napako 660 00:31:03,430 --> 00:31:08,300 saj to bilo-- deluje, je odgovor. 661 00:31:08,300 --> 00:31:11,560 >> Tako da ne prepiše kar ste storili. 662 00:31:11,560 --> 00:31:14,800 Sumim prevajalnik je napisan tako 663 00:31:14,800 --> 00:31:18,420 da zanemarja svoj prototip ker telo, tako rekoč, 664 00:31:18,420 --> 00:31:20,922 o ima funkcijo že bili izvedeni višje. 665 00:31:20,922 --> 00:31:23,380 Jaz bi moral dejansko posvetujejo priročnik prevajalnik 666 00:31:23,380 --> 00:31:26,171 razumeti, če je kdo drug posledice, vendar na prvi pogled 667 00:31:26,171 --> 00:31:29,290 le s poskušanjem in eksperimentiranje, se zdi, da ni nobenega učinka. 668 00:31:29,290 --> 00:31:30,730 Dobro vprašanje. 669 00:31:30,730 --> 00:31:33,660 >> Torej, kaj je sedaj korak naprej, ki se gibljejo stran od neželenih učinkov, ki 670 00:31:33,660 --> 00:31:36,660 so funkcije, naredite nekaj podobnega vidno na zaslonu z printf, 671 00:31:36,660 --> 00:31:38,090 vendar ne vrne vrednosti. 672 00:31:38,090 --> 00:31:41,550 In funkcije, ki so vrnitev vrednote, kot smo pravkar videl nekaj. 673 00:31:41,550 --> 00:31:45,350 Smo že videli to pojmovanje obsega, in s tem bomo znova videli. 674 00:31:45,350 --> 00:31:47,210 Ampak za zdaj, še enkrat, uporabiti pravilo palca 675 00:31:47,210 --> 00:31:51,410 , ki se lahko uporabljajo samo spremenljivka Notranjost nedavno odprli 676 00:31:51,410 --> 00:31:54,350 in zaprte zavitimi oklepaji, kot smo videl v tem konkretnem primeru. 677 00:31:54,350 --> 00:31:56,910 >> In kot ste poudarili, je ability-- 678 00:31:56,910 --> 00:32:00,040 bi lahko rešili nekatere od teh težav s tem da je globalno spremenljivko 679 00:32:00,040 --> 00:32:01,290 na samem vrhu datoteke. 680 00:32:01,290 --> 00:32:03,630 Toda v skoraj vseh primerih mi bi jezijo, da 681 00:32:03,630 --> 00:32:06,170 in v resnici sploh ne gre v to rešitev za zdaj. 682 00:32:06,170 --> 00:32:09,890 Torej za zdaj, hrana za s seboj, da spremenljivke imajo ta pojem obsega. 683 00:32:09,890 --> 00:32:13,430 >> Ampak zdaj si oglejmo drugo suhi način dejansko iščejo 684 00:32:13,430 --> 00:32:15,810 na nekatere zelo zanimivo Podrobnosti o izvajanju. 685 00:32:15,810 --> 00:32:17,810 Kako bi lahko predstavljajo podatke. 686 00:32:17,810 --> 00:32:20,370 In smo že pogledal to v prvem tednu razreda. 687 00:32:20,370 --> 00:32:23,320 Če pogledamo na binarne datoteke, in sebe spominja na decimalko. 688 00:32:23,320 --> 00:32:28,310 >> Ampak spomnite iz prejšnjega tedna, da ima C različne vrste podatkov in šopke več, 689 00:32:28,310 --> 00:32:30,600 Ampak najbolj uporabni tisti za zdaj bi bilo to. 690 00:32:30,600 --> 00:32:36,030 Char, ali znak, ki se zgodi da je en bajt, ali osem bitov skupaj. 691 00:32:36,030 --> 00:32:40,060 In to pomeni, da je velikost iz char je samo en bajt. 692 00:32:40,060 --> 00:32:45,370 Bajt je osem bitov, tako da to pomeni, da moremo predstavljati, koliko znakov. 693 00:32:45,370 --> 00:32:47,320 Koliko črk ali simboli na tipkovnici 694 00:32:47,320 --> 00:32:49,210 če imamo en zlog ali osem bitov. 695 00:32:49,210 --> 00:32:51,546 Pomisli nazaj na nič teden. 696 00:32:51,546 --> 00:32:53,420 Če imate osem bitov, koliko skupne vrednote 697 00:32:53,420 --> 00:32:55,503 lahko predstavljajo z vzorci ničel in enic? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 One-- več kot to. 700 00:33:00,260 --> 00:33:03,490 Torej, 256 objav, če vas začnemo iz nič. 701 00:33:03,490 --> 00:33:07,120 Torej, če imate osem bits-- tako, če bomo imeli svoje binarne žarnice do tu, 702 00:33:07,120 --> 00:33:12,180 smo se lahko spremeni te žarnice na in izklop kateremkoli od 256 edinstvenih vzorcev. 703 00:33:12,180 --> 00:33:13,640 >> Zdaj je to malo problematično. 704 00:33:13,640 --> 00:33:16,857 Ne toliko za angleščino in Romanski jeziki, vendar gotovo 705 00:33:16,857 --> 00:33:19,190 ko uvedejo za primer azijski jeziki, ki 706 00:33:19,190 --> 00:33:22,580 imajo veliko več simbolov, kot podobno 26 črk abecede. 707 00:33:22,580 --> 00:33:24,390 Dejansko smo morda potrebovali več kot en bajt. 708 00:33:24,390 --> 00:33:28,240 In na srečo v V zadnjih letih je družba 709 00:33:28,240 --> 00:33:31,040 sprejete drugi standardi, ki uporabljajo več kot en bajt z enim polnjenjem. 710 00:33:31,040 --> 00:33:34,210 >> Vendar za zdaj v C, privzeto je samo en bajt ali osem bitov. 711 00:33:34,210 --> 00:33:38,195 Celo, medtem ko je štiri bajtov, sicer znan kot 32 bitov. 712 00:33:38,195 --> 00:33:41,320 Kar pomeni, da tisto, kar je največja možna Številka moremo predstavljati pri notr 713 00:33:41,320 --> 00:33:41,820 očitno? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 Z milijardo. 716 00:33:45,050 --> 00:33:46,760 Torej, to je štiri milijarde gor ali dol. 717 00:33:46,760 --> 00:33:49,840 2 k 32th moči, če bomo prevzemajo nobene negativne številke 718 00:33:49,840 --> 00:33:52,530 in samo uporabo vseh pozitivnih številke, to je štiri milijarde 719 00:33:52,530 --> 00:33:53,730 dati ali vzeti možnosti. 720 00:33:53,730 --> 00:33:57,890 Float, medtem pa je drugačen tip vrste podatkov v C. To je še vedno številka, 721 00:33:57,890 --> 00:33:58,990 ampak to je realno število. 722 00:33:58,990 --> 00:34:00,660 Nekaj ​​z decimalno vejico. 723 00:34:00,660 --> 00:34:03,000 In se izkaže, da C uporablja tudi štiri bajte 724 00:34:03,000 --> 00:34:05,340 za zastopanje s plavajočo vejico. 725 00:34:05,340 --> 00:34:09,420 >> Na žalost, koliko plavajoče Vrednosti točke so tam na svetu? 726 00:34:09,420 --> 00:34:11,582 Koliko real številke so tam? 727 00:34:11,582 --> 00:34:13,540 Obstaja neskončno številko, in da glede na to, 728 00:34:13,540 --> 00:34:15,164 obstaja neskončno število celih števil. 729 00:34:15,164 --> 00:34:18,070 Torej smo že nekako kopati sami luknjo tukaj. 730 00:34:18,070 --> 00:34:21,780 Pri čemer je očitno v computers-- na Najmanj programi napisani v C o them-- 731 00:34:21,780 --> 00:34:24,110 lahko računajo le tako visoko, kot štiri milijarde gor ali dol, 732 00:34:24,110 --> 00:34:26,260 in plavajočo vejico lahko le navidezno 733 00:34:26,260 --> 00:34:28,330 nekaj končno količino natančnosti. 734 00:34:28,330 --> 00:34:30,810 Le toliko številke po njihova decimalno vejico. 735 00:34:30,810 --> 00:34:32,822 >> Ker, seveda, če imate samo 32 bitov, 736 00:34:32,822 --> 00:34:36,030 Ne vem, kako se bomo lotili predstavlja resnično numbers-- verjetno 737 00:34:36,030 --> 00:34:37,409 z različnimi tipi vzorcev. 738 00:34:37,409 --> 00:34:40,030 Ampak tam je zagotovo končnih Število teh vzorcev, 739 00:34:40,030 --> 00:34:41,830 tako da tudi tu, je to problematično. 740 00:34:41,830 --> 00:34:43,710 >> Zdaj bomo lahko izognili težavam rahlo. 741 00:34:43,710 --> 00:34:45,710 Če ne boste uporabili plovec, lahko uporabite dvojni 742 00:34:45,710 --> 00:34:50,230 v C-ju, ki vam daje osem bajtov, ki je veliko več možne vzorce ničel 743 00:34:50,230 --> 00:34:50,730 in tisti. 744 00:34:50,730 --> 00:34:55,199 Vendar je še vedno omejen, kar se dogaja problematično, če ste napisali programsko opremo 745 00:34:55,199 --> 00:34:57,670 za grafiko ali domišljija matematične formule. 746 00:34:57,670 --> 00:35:00,410 Tako da boste morda dejansko želijo za štetje do večje od tega. 747 00:35:00,410 --> 00:35:05,640 Dokler long-- neumno named-- je tudi osem bajtov ali 64 bitov, 748 00:35:05,640 --> 00:35:10,260 in to je dvakrat daljši kot int, in to je dolgo celo vrednost. 749 00:35:10,260 --> 00:35:15,655 >> Fun fact-- če int je štiri bajte, kako dolgo je dolgo v C tipično? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Tudi štiri bajte, ampak dolgo časa je osem bajtov, 752 00:35:21,560 --> 00:35:23,050 in to je iz zgodovinskih razlogov. 753 00:35:23,050 --> 00:35:26,450 >> Vendar takeaway zdaj je le, da ima podatke 754 00:35:26,450 --> 00:35:29,625 morajo biti zastopane v computer--, ki je fizična naprava z električno energijo, 755 00:35:29,625 --> 00:35:32,190 to je običajno vožnjo tiste ničle in ones-- 756 00:35:32,190 --> 00:35:34,320 z omejenimi količinami natančnosti. 757 00:35:34,320 --> 00:35:35,620 Torej, kaj je problem potem? 758 00:35:35,620 --> 00:35:37,480 >> No, tam je problem of integer overflow. 759 00:35:37,480 --> 00:35:39,780 Ne samo v C, vendar računalnike na splošno. 760 00:35:39,780 --> 00:35:42,590 Na primer, če je to je bajt vredno bit-- 761 00:35:42,590 --> 00:35:45,120 tako da, če je to osem bit-- vse katerih število ena. 762 00:35:45,120 --> 00:35:47,300 Katero število je to zastopanje, če predpostavimo 763 00:35:47,300 --> 00:35:50,730 to je vse pozitivne vrednote v binarno? 764 00:35:50,730 --> 00:35:54,410 >> 255, in to ni 256, ker nič je najnižja številka. 765 00:35:54,410 --> 00:35:56,760 Torej 255 je najvišja ena, ampak problem 766 00:35:56,760 --> 00:36:00,330 se predpostavlja, da sem želel prirastek te spremenljivke, ki 767 00:36:00,330 --> 00:36:04,030 uporablja osem bitov skupaj če ga hočem prirastek. 768 00:36:04,030 --> 00:36:07,160 >> No, takoj ko dodam eden za vse te tiste, 769 00:36:07,160 --> 00:36:10,500 si lahko morda predstavljate visually-- samo kot nosi eno uporabo decimals-- 770 00:36:10,500 --> 00:36:12,300 nekaj se dogaja, da teče v levo. 771 00:36:12,300 --> 00:36:15,590 In res, če dodam številko ena za to, kaj se zgodi v dvojiškem 772 00:36:15,590 --> 00:36:17,670 je, da se prelije nazaj na nič. 773 00:36:17,670 --> 00:36:21,730 >> Torej, če ste le use-- ne int, ampak en sam bajt za štetje števil 774 00:36:21,730 --> 00:36:27,170 v programu, ki ga default-- takoj ko prideš do 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 prihaja po 255, ki je verjetno kaj ne 776 00:36:32,710 --> 00:36:34,790 Uporabnik bo lahko pričakujete. 777 00:36:34,790 --> 00:36:39,620 >> Zdaj pa je medtem v plavajočo vejico svet, imate tudi podoben problem. 778 00:36:39,620 --> 00:36:42,670 Ne toliko z največjim number-- kljub temu, da je še vedno problem. 779 00:36:42,670 --> 00:36:45,360 Vendar z zneskom natančnosti da si lahko predstavljam. 780 00:36:45,360 --> 00:36:49,490 Torej, vzemimo si na tem primeru tu tudi iz današnje vira code-- 781 00:36:49,490 --> 00:36:52,070 float 0.c. 782 00:36:52,070 --> 00:36:54,280 >> In opazil, da je super preprost program, ki 783 00:36:54,280 --> 00:36:56,580 naj bi očitno natisniti kakšno vrednost? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Kaj bi stavil, da bo to tiskanje čeprav je malo novega sintakse 786 00:37:04,110 --> 00:37:05,540 tukaj? 787 00:37:05,540 --> 00:37:06,700 Torej upajmo, 0.1. 788 00:37:06,700 --> 00:37:10,000 Torej enako kot desetino ker delam 1 deljeno z 10. 789 00:37:10,000 --> 00:37:12,430 Jaz shranjevanje odgovor v spremenljivko imenovano f. 790 00:37:12,430 --> 00:37:15,850 Da spremenljivka je tipa float, ki je ključna beseda sem predlagal obstajala. 791 00:37:15,850 --> 00:37:18,910 >> Smo jih nismo videli že prej, vendar to je nekako čeden način v printf 792 00:37:18,910 --> 00:37:22,110 določiti, koliko številk ste želijo videti po decimalno vejico. 793 00:37:22,110 --> 00:37:25,020 Tako da je ta zapis samo pomeni, da tukaj je ograda. 794 00:37:25,020 --> 00:37:27,900 Gre za plavajočo vejico vrednost, in oh, mimogrede, 795 00:37:27,900 --> 00:37:31,389 pokazati z decimalno vejico s ena številka za decimalno vejico. 796 00:37:31,389 --> 00:37:33,180 Tako, da je število pomembnih številk, 797 00:37:33,180 --> 00:37:34,650 tako rekoč, da si morda želeli. 798 00:37:34,650 --> 00:37:40,450 >> Zato naj gredo naprej in narediti bi float-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 in očitno 1 deljeno z 10 je 0,0. 800 00:37:46,660 --> 00:37:47,760 Zdaj, zakaj je to? 801 00:37:47,760 --> 00:37:51,380 >> No spet je računalnik pokazal me dobesedno, in sem napisal 1 802 00:37:51,380 --> 00:37:56,680 in sem napisal 10, in si ugibati, kaj je prevzela vrsto podatkov za ti dve 803 00:37:56,680 --> 00:37:58,440 vrednosti? 804 00:37:58,440 --> 00:38:00,970 Int, to je tehnično nekaj malo drugačen. 805 00:38:00,970 --> 00:38:04,150 To je običajno dolg, vendar je končno sestavni vrednost. 806 00:38:04,150 --> 00:38:06,030 Ne vrednosti točke lebdenja. 807 00:38:06,030 --> 00:38:09,456 >> Kar pomeni, da če je to je int, in to je int 808 00:38:09,456 --> 00:38:11,830 Problem je, da v računalnik nima sposobnosti 809 00:38:11,830 --> 00:38:13,680 celo shranite to decimalno vejico. 810 00:38:13,680 --> 00:38:16,430 Torej, ko boš 1 razdeljen s 10 uporabljajo celih 811 00:38:16,430 --> 00:38:20,950 tako v števcu in imenovalec, bi moral biti odgovor 0.1. 812 00:38:20,950 --> 00:38:24,930 Ampak zato, ker computer-- tistih, ki so integers-- 813 00:38:24,930 --> 00:38:27,430 ne vedo, kaj storiti z 0,1. 814 00:38:27,430 --> 00:38:30,010 >> Torej, kaj je jasno kaj? 815 00:38:30,010 --> 00:38:33,120 To je samo metanje stran, in kaj sem nazadnje videl 816 00:38:33,120 --> 00:38:38,830 je 0,0 samo zato, ker sem vztrajala, da printf pokaži mi eno decimalno vejico. 817 00:38:38,830 --> 00:38:41,740 Ampak problem je, da če vas razdeliti celo za celo, 818 00:38:41,740 --> 00:38:44,347 boste get-- po definiciji od C- celo število. 819 00:38:44,347 --> 00:38:46,680 In to ne boš naredil nekaj lepo in udobno 820 00:38:46,680 --> 00:38:49,040 kot krog je do najbližja ena gor ali dol. 821 00:38:49,040 --> 00:38:51,860 To se dogaja, da izrežete Vse po decimalko. 822 00:38:51,860 --> 00:38:54,030 >> Torej, samo intuitivno, kar je verjetno fix? 823 00:38:54,030 --> 00:38:55,351 Kaj je najenostavnejši fix tukaj? 824 00:38:55,351 --> 00:38:55,850 Ja? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Točno tako. 827 00:39:01,100 --> 00:39:04,200 Zakaj ne bi raje obravnavajo te kot učinkovito plavajočo vejico 828 00:39:04,200 --> 00:39:05,860 njiju v plovci ali dvojic. 829 00:39:05,860 --> 00:39:10,500 In zdaj, če to storim, da plava-0, ali če prevedem plovce-1, 830 00:39:10,500 --> 00:39:12,570 ki je enaka kaj se je pravkar predlagala. 831 00:39:12,570 --> 00:39:16,400 In sedaj delam boje-0, zdaj dobim 0.1. 832 00:39:16,400 --> 00:39:17,234 >> Zdaj je to neverjetno. 833 00:39:17,234 --> 00:39:19,441 Ampak zdaj bom naredil nekaj malo drugačen. 834 00:39:19,441 --> 00:39:22,280 Radovedna sem, da vidim, kaj je res dogaja pod pokrovom, 835 00:39:22,280 --> 00:39:26,050 in bom natisni ven na 28 decimalk. 836 00:39:26,050 --> 00:39:29,730 Želim, da bo res videti 0.1000-- infinite-- 837 00:39:29,730 --> 00:39:32,710 [Neslišno] 27 ničlami ​​po tem 0,1. 838 00:39:32,710 --> 00:39:34,740 >> No, da vidimo, če je to kaj sem res dobil. 839 00:39:34,740 --> 00:39:39,430 Da plava-0 iste datoteke. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Pojdimo povečate o dramatičnem odgovor. 842 00:39:44,380 --> 00:39:49,980 Ves ta čas, ko ste bili razmišljanje 1 deljeno z 10, je 10% ali 0,1. 843 00:39:49,980 --> 00:39:50,810 Saj ni. 844 00:39:50,810 --> 00:39:53,210 Vsaj kolikor Računalnik je zaskrbljena. 845 00:39:53,210 --> 00:39:57,060 >> Zdaj why-- OK, to je popolna laž 1 deljeno z 10 je 0,1. 846 00:39:57,060 --> 00:39:59,710 Toda why-- da ni takeaway danes. 847 00:39:59,710 --> 00:40:04,010 Torej, zakaj ne računalnik misli, za razliko od vseh nas v sobi, 848 00:40:04,010 --> 00:40:06,870 da je 1 deljeno z 10, je pravzaprav, da je nor vrednost? 849 00:40:06,870 --> 00:40:10,620 Kaj je računalnik počne očitno? 850 00:40:10,620 --> 00:40:12,490 Kaj je to? 851 00:40:12,490 --> 00:40:13,785 >> To ni razlivala po sebi. 852 00:40:13,785 --> 00:40:15,910 Overflow je običajno pri si ovijte okoli vrednost. 853 00:40:15,910 --> 00:40:18,970 Je to vprašanje nenatančen v plavajočo vejico vrednost 854 00:40:18,970 --> 00:40:22,220 kjer imate samo 32 ali morda celo 64 bit. 855 00:40:22,220 --> 00:40:25,230 Ampak, če obstaja neskončno število real numbers-- 856 00:40:25,230 --> 00:40:27,940 števila s pikami in številke thereafter-- zagotovo 857 00:40:27,940 --> 00:40:29,380 si ne more predstavljati vse od njih. 858 00:40:29,380 --> 00:40:32,870 Torej je računalnik dal nam najbližja tekmo 859 00:40:32,870 --> 00:40:37,090 vrednosti lahko predstavljajo uporabo, da koliko bitov v vrednosti dejansko želim, 860 00:40:37,090 --> 00:40:38,690 kar je 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Na žalost, če vas začeti početje matematike, ali pa 862 00:40:40,685 --> 00:40:44,360 začni vključuje tovrstnih plavajočih točkovni vrednosti v pomembnem programs-- 863 00:40:44,360 --> 00:40:46,770 finančne programske opreme, Vojaška software-- karkoli 864 00:40:46,770 --> 00:40:49,090 kjer je percepcija verjetno precej pomembno. 865 00:40:49,090 --> 00:40:51,520 In začnete dodajanje številke, kot je ta, in start 866 00:40:51,520 --> 00:40:54,050 deluje s to programsko opremo z zelo velikimi vložki 867 00:40:54,050 --> 00:40:56,890 ali za veliko ur ali serij dni ali veliko let, 868 00:40:56,890 --> 00:41:01,060 Te drobne majhne napake zagotovo lahko dodate skozi čas. 869 00:41:01,060 --> 00:41:04,252 >> Zdaj, kot prahi, če ste kdaj videl Superman 3 ali Office Space 870 00:41:04,252 --> 00:41:05,960 in morda odpoklic kako ti fantje ukradli 871 00:41:05,960 --> 00:41:08,668 Veliko denarja iz svojega računalnika s pomočjo plavajočo vejico 872 00:41:08,668 --> 00:41:11,290 in sešteva malo ostanki, upajmo, da film 873 00:41:11,290 --> 00:41:12,390 Zdaj je bolj smiselno. 874 00:41:12,390 --> 00:41:14,930 To je tisto, kar so bili namiguje, da v tem filmu. 875 00:41:14,930 --> 00:41:16,710 Dejstvo, da je večina podjetja ne bi bilo videti 876 00:41:16,710 --> 00:41:18,600 Po določenem številu decimalnih mest, 877 00:41:18,600 --> 00:41:20,009 ampak to so frakcije centov. 878 00:41:20,009 --> 00:41:22,550 Tako da jih začneš sešteva, začnete, da bi veliko denarja 879 00:41:22,550 --> 00:41:23,424 na vaš bančni račun. 880 00:41:23,424 --> 00:41:25,160 Torej, to je Office Space je pojasnil. 881 00:41:25,160 --> 00:41:28,220 >> Zdaj žal presegajo Office Space, je 882 00:41:28,220 --> 00:41:31,794 so nekateri upravičeno zaskrbljujoče in pomembne vplive 883 00:41:31,794 --> 00:41:33,710 teh vrst Temeljne odločitve projektiranja, 884 00:41:33,710 --> 00:41:35,990 in dejansko eden od razlogov smo uporabili C v teku 885 00:41:35,990 --> 00:41:39,640 je tako, da imate res ta razlog do razumevanja, kako računalniki delujejo, 886 00:41:39,640 --> 00:41:42,440 kako programska oprema deluje, in ne bo ničesar za samoumevno. 887 00:41:42,440 --> 00:41:45,820 >> In res žal, tudi z to temeljno razumevanje, 888 00:41:45,820 --> 00:41:47,370 smo ljudje delajo napake. 889 00:41:47,370 --> 00:41:51,310 In tisto, kar sem mislil, da sem deliti je to osem minutni video sem sprejeti 890 00:41:51,310 --> 00:41:56,980 iz Sodobni čudeži epizodo, ki je izobraževalna oddaja o tem, kako stvari delujejo 891 00:41:56,980 --> 00:42:00,370 da naslika dve sliki kdaj nepravilna uporaba 892 00:42:00,370 --> 00:42:02,540 in razumevanje plavajočo vejico 893 00:42:02,540 --> 00:42:05,610 privedlo do nekaterih pomembna nesrečne rezultati. 894 00:42:05,610 --> 00:42:06,363 Oglejmo pogled. 895 00:42:06,363 --> 00:42:07,029 [VIDEO PREDVAJANJE] 896 00:42:07,029 --> 00:42:11,290 -smo Zdaj nazaj na "Engineering Katastrofe "na moderne čudeže. 897 00:42:11,290 --> 00:42:12,940 Računalniki. 898 00:42:12,940 --> 00:42:15,580 Vsi smo prišli, da sprejme pogosto frustrirajuće težave, ki 899 00:42:15,580 --> 00:42:20,960 dobil z them-- hroščev, virusov in Programska oprema glitches-- za male cene 900 00:42:20,960 --> 00:42:23,100 plačati za udobje. 901 00:42:23,100 --> 00:42:27,770 Toda v visoke tehnologije in visoke hitrosti vojaški in vesoljski program aplikacije, 902 00:42:27,770 --> 00:42:32,780 najmanjši problem lahko se poveča v katastrofo. 903 00:42:32,780 --> 00:42:38,880 >> 4. junija 1996, pripravili znanstveniki začeti brez posadke Ariane 5 raketo. 904 00:42:38,880 --> 00:42:41,190 To izvajanje znanstveno bila sateliti zasnovan 905 00:42:41,190 --> 00:42:44,570 natančno, kako vzpostaviti Združljiva magnetno polje Zemlje 906 00:42:44,570 --> 00:42:47,380 s solarnimi vetrovi. 907 00:42:47,380 --> 00:42:50,580 Raketa je bila zgrajena za Evropska vesoljska agencija, 908 00:42:50,580 --> 00:42:54,400 in dvignjen od njegovega objekta na obali Francoske Gvajane. 909 00:42:54,400 --> 00:42:57,520 >> -Ob Približno 37 sekund v let, so najprej 910 00:42:57,520 --> 00:42:59,070 opazil, kaj je šlo narobe. 911 00:42:59,070 --> 00:43:02,240 Da šobe so vrtljiva na način, da res ne bi smeli. 912 00:43:02,240 --> 00:43:06,550 Približno 40 sekund, v letalu, jasno je bilo vozilo v težavah, 913 00:43:06,550 --> 00:43:08,820 in da je, ko so naredili Odločitev, da jo uniči. 914 00:43:08,820 --> 00:43:12,370 Uradnik za varnost območje, s ogromno poguma, pritisnete gumb 915 00:43:12,370 --> 00:43:18,030 in razneslo raketo, preden se lahko postala nevarnost za javno varnost. 916 00:43:18,030 --> 00:43:21,010 >> Tole je bil dekliški Potovanje Ariane 5, 917 00:43:21,010 --> 00:43:23,920 in njeno uničenje je postaviti, ker je napaka 918 00:43:23,920 --> 00:43:25,932 vgrajeni v programsko opremo rakete. 919 00:43:25,932 --> 00:43:27,640 -V Problem na Ariane je bila, da 920 00:43:27,640 --> 00:43:30,500 je število, ki je potrebna 64 bitov za izražanje, 921 00:43:30,500 --> 00:43:33,560 in bi želeli spremeniti je za 16-bitno številko. 922 00:43:33,560 --> 00:43:36,820 Domnevali so, da je število ni bil nikoli bo zelo velika. 923 00:43:36,820 --> 00:43:40,940 Da je večina teh številk v 64-bitna številka bili ničle. 924 00:43:40,940 --> 00:43:42,450 Da je bilo narobe. 925 00:43:42,450 --> 00:43:45,000 >> -V Nesposobnost ene programska oprema za sprejem 926 00:43:45,000 --> 00:43:49,460 vrsta števila ustvari druga pa je bila vzrok za neuspeh. 927 00:43:49,460 --> 00:43:54,260 Razvoj programske opreme je postala zelo drago del nove tehnologije. 928 00:43:54,260 --> 00:43:57,060 Ariane 4 raketa je imela bil zelo uspešen. 929 00:43:57,060 --> 00:44:01,600 Toliko programske opreme ustvaril za je bila uporabljena tudi v Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -V Osnovni problem je bil, da Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Je faster-- pospešila hitreje in Programska oprema ni predstavljal, da je. 932 00:44:11,200 --> 00:44:14,910 >> -V Uničenje rakete je bil velik finančni polom. 933 00:44:14,910 --> 00:44:18,630 Vse zaradi napake na minuto programske opreme. 934 00:44:18,630 --> 00:44:21,160 Vendar to ni bil prvi Težave pretvorbe podatkov čas 935 00:44:21,160 --> 00:44:24,770 je pesti sodobno raketno tehnologijo. 936 00:44:24,770 --> 00:44:28,020 >> -v 1991 z začetkom od prve zalivske vojne, 937 00:44:28,020 --> 00:44:30,540 Patriot projektil doživel kaj podobnega 938 00:44:30,540 --> 00:44:32,465 problema pretvorbe številko. 939 00:44:32,465 --> 00:44:36,760 In kot rezultat 28 ljudi-- 28 Ameriški soldiers-- je bilo ubitih, 940 00:44:36,760 --> 00:44:39,010 in približno sto drugih ranjenih. 941 00:44:39,010 --> 00:44:42,830 Ko Patriot, ki naj za zaščito pred dohodne rakete Scud, 942 00:44:42,830 --> 00:44:45,780 ni na ogenj izstrelkov. 943 00:44:45,780 --> 00:44:51,610 >> Kdaj Irak napadel Kuvajt in Ameriko začela Desert Storm v začetku leta 1991, 944 00:44:51,610 --> 00:44:55,720 Patriot raketne baterije so bile razporejene zaščititi Saudova Arabija in Izrael 945 00:44:55,720 --> 00:44:59,180 iraških raketnimi napadi Oblaki. 946 00:44:59,180 --> 00:45:03,080 Patriot je srednje območje ZDA zemlja-zrak sistema 947 00:45:03,080 --> 00:45:06,530 ki jih je podjetje Raytheon izdelan. 948 00:45:06,530 --> 00:45:09,500 >> -V Velikost Patriot interceptor itself-- 949 00:45:09,500 --> 00:45:14,705 to je približno približno 20 metrov dolgo, in tehta približno 2000 kilogramov. 950 00:45:14,705 --> 00:45:19,090 In to nosi bojno glavo okoli, Mislim, da je okoli 150 kg. 951 00:45:19,090 --> 00:45:23,880 In bojna glava sama visoko eksplozivne, ki 952 00:45:23,880 --> 00:45:26,700 ima fragmente okoli njega. 953 00:45:26,700 --> 00:45:31,630 Torej ohišje bombo je zasnovan tako, da deluje kot velike šibre. 954 00:45:31,630 --> 00:45:34,040 >> -Kamen Rakete izvajajo štiri na posodo, 955 00:45:34,040 --> 00:45:37,170 in se prevažajo z polprikolici. 956 00:45:37,170 --> 00:45:44,880 >> -V Sistem Patriot protiraketnem sega zdaj vsaj 20 let. 957 00:45:44,880 --> 00:45:48,380 To je bila prvotno zasnovana kot obrambno raketo zraka 958 00:45:48,380 --> 00:45:50,810 sestrelili sovražnik letal. 959 00:45:50,810 --> 00:45:54,410 V prvi zalivski vojni ko da je vojna prišla na, 960 00:45:54,410 --> 00:45:59,650 vojska želela, da jo uporabljajo za sestrelili rakete Scud, ne letal. 961 00:45:59,650 --> 00:46:03,580 Je bila iraška Air Force ni tako velik problem, 962 00:46:03,580 --> 00:46:06,590 ampak vojska je skrbelo rakete Scud. 963 00:46:06,590 --> 00:46:10,120 In tako so skušali nadgraditi Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Sovražnika projektil potuje Mach 5 965 00:46:12,740 --> 00:46:15,670 je, da bo dovolj izziv. 966 00:46:15,670 --> 00:46:18,440 Toda, ko Patriot je planila v službi, 967 00:46:18,440 --> 00:46:22,580 vojska ni vedela Iraški sprememba, ki 968 00:46:22,580 --> 00:46:25,880 so njihove rakete Scud skoraj nemogoče. 969 00:46:25,880 --> 00:46:30,690 >> Kaj se je zgodilo, da so rakete Scud napadli, so bile nestabilne. 970 00:46:30,690 --> 00:46:32,000 Bili so wobbly. 971 00:46:32,000 --> 00:46:37,210 Razlog za to je bil Iraqis-- da bi dobili 600 kilometrov od 972 00:46:37,210 --> 00:46:41,680 od 300 kilometrov razdalje missile-- je teža iz sprednjega bojno glavo, 973 00:46:41,680 --> 00:46:43,340 in je bojna glava vžigalnik. 974 00:46:43,340 --> 00:46:48,490 Torej, zdaj Patriot poskuša priti na Oblaki, in večino enkrat bom vprašal 975 00:46:48,490 --> 00:46:52,880 velika večina enkrat bom vprašal bi samo letenje, ki jih Oblaki. 976 00:46:52,880 --> 00:46:57,120 >> -Ko Sistemskih operaterjev Patriot spoznal Patriot zgrešil svoj cilj, 977 00:46:57,120 --> 00:47:01,630 jim eksplodirajo Patriot je bojno glavo da bi se izognili morebitnim žrtev, če je 978 00:47:01,630 --> 00:47:04,440 pustimo, da pade na tla. 979 00:47:04,440 --> 00:47:08,700 >> To je bilo tisto, kar večina ljudi je videlo kot veliki fireballs na nebu, 980 00:47:08,700 --> 00:47:14,180 in napačno razumljen kot odseka na Oblaki bojnih glav. 981 00:47:14,180 --> 00:47:18,020 >> -Čeprav V nočnih neba, Patriots Zdi se, da se uspešno uničuje 982 00:47:18,020 --> 00:47:23,280 Rakete Scud na Dhahranu bi lahko bilo ne bo pomote o njeni uspešnosti. 983 00:47:23,280 --> 00:47:27,930 Tam radar sistem Patriot Izgubil track dohodni Oblaki 984 00:47:27,930 --> 00:47:30,260 in nikoli ni začela zaradi programski pomanjkljivost. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> To je bil Izraelcem, ki je prvi odkril da je več sistem na, 987 00:47:38,880 --> 00:47:41,130 večja čas neskladje postalo. 988 00:47:41,130 --> 00:47:44,770 Zaradi uro vgrajeni V računalniku sistema. 989 00:47:44,770 --> 00:47:48,190 >> Okrog dva tedna pred Tragedija v Dhahranu, 990 00:47:48,190 --> 00:47:50,720 Izraelci poročajo, da Oddelek za obrambo 991 00:47:50,720 --> 00:47:52,410 da je sistem izgube časa. 992 00:47:52,410 --> 00:47:54,410 Po približno osmih urah za delovanje, so opazili 993 00:47:54,410 --> 00:47:57,690 da je sistem postaja opazno manj natančna. 994 00:47:57,690 --> 00:48:01,850 Obrambno ministrstvo je odgovorila z povedal vse Patriot baterije 995 00:48:01,850 --> 00:48:04,800 ne pustite sistemov na za dolgo časa. 996 00:48:04,800 --> 00:48:06,980 Ti nisem rekel, kar je bilo dolgo časa. 997 00:48:06,980 --> 00:48:09,140 8 ur, 10 ur, tisoč ur. 998 00:48:09,140 --> 00:48:11,300 Nihče ni vedel. 999 00:48:11,300 --> 00:48:13,320 >> -V Patriot baterije nameščene v vojašnicah 1000 00:48:13,320 --> 00:48:18,310 na Dhahranu in njegovo neustrezno notranjo ura je bila za več kot 100 ur 1001 00:48:18,310 --> 00:48:21,520 v noči na 25. februar. 1002 00:48:21,520 --> 00:48:25,792 >> -To Bager časa z natančnostjo približno desetinko sekunde. 1003 00:48:25,792 --> 00:48:27,950 Zdaj desetinka sekunde je zanimiva številka 1004 00:48:27,950 --> 00:48:31,850 ker ne more biti izražena binarno točno, kateri 1005 00:48:31,850 --> 00:48:36,500 to pomeni, da ne more biti izražena natančno v vsakem sodobnem digitalnem računalniku. 1006 00:48:36,500 --> 00:48:41,070 Težko je verjeti, ampak uporabiti to kot primer. 1007 00:48:41,070 --> 00:48:43,420 >> Vzemimo število eno tretjino. 1008 00:48:43,420 --> 00:48:47,330 Ena tretjina ne more biti izraženo v decimalko natančno. 1009 00:48:47,330 --> 00:48:52,060 Ena tretjina je 0,333 dogaja v neskončnost. 1010 00:48:52,060 --> 00:48:56,420 Ni šans, da to, da z absolutna natančnost v decimalkah. 1011 00:48:56,420 --> 00:48:59,530 To je točno vrsta problema , ki se je zgodilo v Patriot. 1012 00:48:59,530 --> 00:49:04,040 Več sistem tekel, slabši čas napaka postala. 1013 00:49:04,040 --> 00:49:08,840 >> -po 100 ur dela, Napaka v času je bil le približno ena tretjina 1014 00:49:08,840 --> 00:49:10,440 sekunde. 1015 00:49:10,440 --> 00:49:14,150 Ampak v smislu ciljnih projektil potuje Mach 5, 1016 00:49:14,150 --> 00:49:18,560 je povzročilo sledenje Napaka več kot 600 metrov. 1017 00:49:18,560 --> 00:49:21,870 To bi bila usodna napaka za vojake na Dhahranu. 1018 00:49:21,870 --> 00:49:28,455 >> Kaj se je zgodilo je bil začetek Scud sateliti zgodnjega opozarjanja zazna, 1019 00:49:28,455 --> 00:49:32,710 in so vedeli Scud prihaja v njihov splošni smeri. 1020 00:49:32,710 --> 00:49:35,150 Niso vedeli, kje je prišel. 1021 00:49:35,150 --> 00:49:38,210 To je zdaj do radarja komponenta sistema Patriot 1022 00:49:38,210 --> 00:49:43,150 brani Dhahran najti in obdržati tir na dohodne sovražnik izstrelkov. 1023 00:49:43,150 --> 00:49:44,561 >> -V Radar je bil zelo pameten. 1024 00:49:44,561 --> 00:49:46,560 To bi dejansko slediti Stališče Oblaki 1025 00:49:46,560 --> 00:49:48,930 in nato napovedati kadar bi bilo verjetno 1026 00:49:48,930 --> 00:49:51,380 Naslednjič, ko radar poslala impulz ven. 1027 00:49:51,380 --> 00:49:53,040 Da je bil imenovan gate območje. 1028 00:49:53,040 --> 00:49:57,620 >> Potem ko Patriot odloči dovolj časa ima 1029 00:49:57,620 --> 00:50:02,400 minilo, da se vrnete in preverite Naslednja lokacija za te zaznani predmet 1030 00:50:02,400 --> 00:50:03,550 gre nazaj. 1031 00:50:03,550 --> 00:50:07,820 Torej, ko se je vrnil, da narobe mesto, potem ne vidi nobenega predmeta. 1032 00:50:07,820 --> 00:50:10,360 In sklene, da ni bilo nobenega predmeta. 1033 00:50:10,360 --> 00:50:13,630 Da je bilo lažno zaznavanje in se spusti skladbo. 1034 00:50:13,630 --> 00:50:16,970 >> -V Incoming Scud izginil iz radarskega zaslona, 1035 00:50:16,970 --> 00:50:20,200 in sekund kasneje, je trčil v vojašnice. 1036 00:50:20,200 --> 00:50:22,570 Oblaki ubitih 28. 1037 00:50:22,570 --> 00:50:26,110 Zadnji je bil odpuščen med prvo zalivsko vojno. 1038 00:50:26,110 --> 00:50:31,920 Tragično je, posodobljeno programsko opremo prispeli ob zori na naslednji dan. 1039 00:50:31,920 --> 00:50:34,870 Napaka software imel bil določen, zapiranje 1040 00:50:34,870 --> 00:50:39,150 eno poglavje v težavah Zgodovina Patriot izstrelka. 1041 00:50:39,150 --> 00:50:40,030 >> [END VIDEO PREDVAJANJE] 1042 00:50:40,030 --> 00:50:41,488 >> DAVID J. Malan: To je za CS50. 1043 00:50:41,488 --> 00:50:42,820 Vas bomo videli v sredo. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [Predvajanje glasbe] 1046 00:50:50,370 --> 00:54:23,446