1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [Prehrávanie hudby] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 David J. Malan: Dobre. 5 00:00:12,660 --> 00:00:15,590 To je CS50, a to je štart dvoch týždňov. 6 00:00:15,590 --> 00:00:19,120 Takže začneme dnes s chybou. 7 00:00:19,120 --> 00:00:20,974 Chyba, samozrejme, je chyba v programe, 8 00:00:20,974 --> 00:00:22,890 a budete mať veľmi oboznámení s touto koncepciou 9 00:00:22,890 --> 00:00:26,050 ak ste nikdy programovať pred. pset0 a teraz pset1. 10 00:00:26,050 --> 00:00:29,280 Ale uvažujme niečo trochu jednoduchý na prvom mieste. 11 00:00:29,280 --> 00:00:32,189 Tento program tu, že som hodil dohromady vo vopred 12 00:00:32,189 --> 00:00:37,280 a tvrdím, že by to malo tlačiť 10 hviezdy na obrazovke pomocou printf, 13 00:00:37,280 --> 00:00:41,020 ale je to zrejme kočík nejakým spôsobom. 14 00:00:41,020 --> 00:00:45,370 >> Vzhľadom k tomu, že špecifikácie, ktoré že by sa mala vytlačiť 10 hviezd, 15 00:00:45,370 --> 00:00:50,230 ale to nie je zrejme, čo by ste nárok je chyba? 16 00:00:50,230 --> 00:00:52,004 Jo? 17 00:00:52,004 --> 00:00:54,420 Takže je to posunuté o jednu chybu, a čo myslíš, že? 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 Výborne. 22 00:01:10,410 --> 00:01:13,930 Tak sme zadali počiatočná hodnota nula pre i, 23 00:01:13,930 --> 00:01:18,399 a my sme zadali n hodnotu 10, ale sme použili menší ako alebo rovnajúcu sa. 24 00:01:18,399 --> 00:01:21,190 A dôvodom, že sa jedná dva postavy a nie len jeden symbol, 25 00:01:21,190 --> 00:01:22,630 ako v matematickej knihe, je to, že nemáte 26 00:01:22,630 --> 00:01:24,880 spôsob, ako vyjadriť jeden znak ekvivalent. 27 00:01:24,880 --> 00:01:28,450 >> Takže to znamená, že menej ako, ale ak začnete počítať od nuly, 28 00:01:28,450 --> 00:01:31,690 ale počítať celú cestu nahor a rovná 10, 29 00:01:31,690 --> 00:01:34,170 ste samozrejme bude počet 11 vecí celkom. 30 00:01:34,170 --> 00:01:35,900 A tak budete tlačiť 11 hviezd. 31 00:01:35,900 --> 00:01:37,990 Takže to, čo by mohlo byť oprava na to? 32 00:01:37,990 --> 00:01:39,970 Jo? 33 00:01:39,970 --> 00:01:43,980 >> Takže stačí nastaviť nižšie než alebo rovná práve byť menšie ako, 34 00:01:43,980 --> 00:01:46,250 a tam, tvrdím, možno iné riešenie, tiež. 35 00:01:46,250 --> 00:01:47,210 Čo by mohlo ešte urobiť? 36 00:01:47,210 --> 00:01:48,590 Jo? 37 00:01:48,590 --> 00:01:53,660 >> Takže začať rovnajúcu to jedno, a opustiť menší ako alebo rovnajúcu sa. 38 00:01:53,660 --> 00:01:56,187 A úprimne povedané, ja by som tvrdiť, , Že pre typické človeka, 39 00:01:56,187 --> 00:01:57,770 to je pravdepodobne jednoduchšie. 40 00:01:57,770 --> 00:02:00,280 Začnite počítať od 1 a počítať až desať. 41 00:02:00,280 --> 00:02:01,690 V podstate to, čo máte na mysli. 42 00:02:01,690 --> 00:02:04,010 >> Ale realita je programovanie, ako sme videli, 43 00:02:04,010 --> 00:02:07,598 počítačoví odborníci a programátori všeobecne sa začína počítať od nuly. 44 00:02:07,598 --> 00:02:09,389 A tak to je v poriadku, akonáhle si na to zvyknúť. 45 00:02:09,389 --> 00:02:12,640 Váš stav bude zvyčajne niečo ako nižšia ako. 46 00:02:12,640 --> 00:02:14,910 Takže potom logicky chyba, že sme mohli teraz 47 00:02:14,910 --> 00:02:17,990 opraviť a nakoniec prekompilovať to a dostať len 10. 48 00:02:17,990 --> 00:02:19,610 >> Tak, ako o tejto chybe tu? 49 00:02:19,610 --> 00:02:24,200 Tu opäť tvrdím, že mám Cieľom tlače 10 stars-- 50 00:02:24,200 --> 00:02:28,140 jeden na riadok tentoraz, ale nie je tomu tak. 51 00:02:28,140 --> 00:02:30,940 Než sme sa navrhnúť čo oprava je to, čo robí tento 52 00:02:30,940 --> 00:02:34,640 tlačiť vizuálne keby som zostaviť a spustiť tento program si myslíte? 53 00:02:34,640 --> 00:02:35,140 Jo? 54 00:02:35,140 --> 00:02:38,360 55 00:02:38,360 --> 00:02:38,860 >> Hviezda. 56 00:02:38,860 --> 00:02:41,690 Takže všetky hviezdy na rovnakom riadku je to, čo som počul, 57 00:02:41,690 --> 00:02:43,391 a potom znak nového riadku. 58 00:02:43,391 --> 00:02:44,140 Takže poďme to skúsiť. 59 00:02:44,140 --> 00:02:48,710 Tak, aby buggy-1, zadajte, a vidím príkaz zvonenie 60 00:02:48,710 --> 00:02:50,090 že sme o tom hovorili minule. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, a naozaj vidím všetkých 10 hviezd na rovnakom riadku, aj keď tvrdím, 62 00:02:55,180 --> 00:02:58,690 v mojom špecifikácii len komentár na vrchole kód, ktorý som mal v úmysle urobiť jeden na 63 00:02:58,690 --> 00:02:59,230 linka. 64 00:02:59,230 --> 00:03:00,580 Ale to vyzerá dobre. 65 00:03:00,580 --> 00:03:04,620 >> Teraz linka 15 to vyzerá, že som tlač hviezdu, a potom linka 16 66 00:03:04,620 --> 00:03:06,620 vyzerá to, že som tlač znak nového riadku, 67 00:03:06,620 --> 00:03:09,560 a oni sú obaja tak odsadené Som vnútri slučky jasne. 68 00:03:09,560 --> 00:03:13,610 Takže by som nemal robiť hviezdu, nová linka, hviezda, nový riadok, hviezda, nový riadok? 69 00:03:13,610 --> 00:03:14,110 Áno? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Áno, na rozdiel od jazyka ako Python, ak ste oboznámení, 72 00:03:21,240 --> 00:03:23,540 odsadenie nie je tom, k počítaču. 73 00:03:23,540 --> 00:03:25,280 To záleží len na človeka. 74 00:03:25,280 --> 00:03:29,860 Takže zatiaľ čo tu som vymyslel linky 15 a 16--, že vyzerá krásne, 75 00:03:29,860 --> 00:03:31,330 ale počítač nestará. 76 00:03:31,330 --> 00:03:34,640 Počítač sa stará o v skutočnosti má zložené zátvorky 77 00:03:34,640 --> 00:03:36,310 okolo týchto riadkov kódu. 78 00:03:36,310 --> 00:03:39,520 >> Takže to je to clear-- rovnako ako v Scratch-- že tieto dva riadky kódu 79 00:03:39,520 --> 00:03:40,450 by mal byť vykonaný. 80 00:03:40,450 --> 00:03:44,390 Ako jeden z tých žltých Scratch puzzle kusy znovu a znovu a znovu. 81 00:03:44,390 --> 00:03:50,920 >> Takže teraz, keď som znova spustiť tento program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Mám chybu teraz. 83 00:03:51,770 --> 00:03:54,212 Čo som zabudol urobiť? 84 00:03:54,212 --> 00:03:55,420 Jo, tak som sa skompilovať. 85 00:03:55,420 --> 00:03:56,740 Tak, aby buggy-2. 86 00:03:56,740 --> 00:03:59,840 Žiadny takýto súbor, pretože som nemal vlastne zostaviť druhú verziu. 87 00:03:59,840 --> 00:04:04,860 Takže teraz zaujímavé nenahlásené proměnná-- nie 2. 88 00:04:04,860 --> 00:04:05,510 Robíme 1. 89 00:04:05,510 --> 00:04:11,050 Urobiť buggy-1-- ./buggy-1-- a teraz každý z nich je na rovnakom riadku. 90 00:04:11,050 --> 00:04:13,880 >> Teraz je výnimka to má nárok môj 91 00:04:13,880 --> 00:04:15,520 že je potrebné tieto zložené zátvorky. 92 00:04:15,520 --> 00:04:20,160 Kedy je vlastne Ok-- ak ste Všimol v sekcii alebo textbooks-- 93 00:04:20,160 --> 00:04:22,130 vynechať zložené zátvorky? 94 00:04:22,130 --> 00:04:22,630 Jo? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Presne tak. 97 00:04:26,870 --> 00:04:28,940 Keď tam je len jeden riadok kódu, ktorý vám 98 00:04:28,940 --> 00:04:32,830 chcel byť spájaný s slučka ako v našom prvom príklade. 99 00:04:32,830 --> 00:04:36,380 Je úplne v poriadku vynechať zložené zátvorky 100 00:04:36,380 --> 00:04:40,310 rovnako ako druh pohodlie od kompilátor pre vás. 101 00:04:40,310 --> 00:04:40,810 Jo? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Dobrá otázka. 104 00:04:43,930 --> 00:04:45,500 Bolo by to byť považované za chybu štýl? 105 00:04:45,500 --> 00:04:49,340 Radi by sme promote-- ako CS50 štýlu sprievodca, URL, pre ktoré 106 00:04:49,340 --> 00:04:51,926 je pset1--, že vždy používať zložené zátvorky. 107 00:04:51,926 --> 00:04:53,550 Iste, ak ste k programovaniu nové. 108 00:04:53,550 --> 00:04:56,800 Realita je taká, že nie sme ti zakázať 109 00:04:56,800 --> 00:04:58,680 v tom tieto vymoženosti. 110 00:04:58,680 --> 00:05:00,846 Ale ak ste len na to, do swingu vecí, 111 00:05:00,846 --> 00:05:04,020 úplne stačí vždy kučeravé traky, až sa dostanete na kĺb. 112 00:05:04,020 --> 00:05:04,640 Dobrá otázka. 113 00:05:04,640 --> 00:05:05,320 >> V poriadku. 114 00:05:05,320 --> 00:05:07,660 Takže to potom bola chyba. 115 00:05:07,660 --> 00:05:09,190 Aspoň v niečom celkom jednoduché. 116 00:05:09,190 --> 00:05:11,260 A napriek tomu by ste si mohli myslieť to je pomerne primitívne, že jo? 117 00:05:11,260 --> 00:05:13,635 To je niečo ako prvého týždňa pohľadu na jazyk 118 00:05:13,635 --> 00:05:14,890 rád, vidieť svoje chyby v ňom. 119 00:05:14,890 --> 00:05:17,250 Ale realita sa jedná o skutočne reprezentatívne 120 00:05:17,250 --> 00:05:20,310 niektorých docela desivé problémy ktoré môžu nastať v reálnom svete. 121 00:05:20,310 --> 00:05:23,530 >> Takže niektorí z vás možno pamätáte ak budete postupovať podľa tech novinky, 122 00:05:23,530 --> 00:05:25,740 alebo dokonca chytil vietor to vo februári 123 00:05:25,740 --> 00:05:29,434 v poslednom roku, že Apple mal urobil trochu chybu v oboch iOS, 124 00:05:29,434 --> 00:05:31,350 operačný systém ich telefóny, a tiež 125 00:05:31,350 --> 00:05:34,220 Mac OS, operačný systém na svojich stolných a prenosných počítačov. 126 00:05:34,220 --> 00:05:36,480 A videla ste také titulky ako to. 127 00:05:36,480 --> 00:05:41,120 A potom, Apple sľúbil opraviť túto chybu, 128 00:05:41,120 --> 00:05:45,950 a veľmi rýchlo urobil opraviť v iOS, ale potom sa nakoniec opravili v Mac OS 129 00:05:45,950 --> 00:05:46,810 rovnako. 130 00:05:46,810 --> 00:05:50,370 >> Teraz žiadny z týchto titulkov sám naozaj odhaliť, čo je základný problém bol, 131 00:05:50,370 --> 00:05:55,640 ale chyba bola nakoniec znížená na chyba v SSL, Secure Sockets Layer. 132 00:05:55,640 --> 00:05:57,390 A dlhý príbeh krátky, to je softvér 133 00:05:57,390 --> 00:06:01,030 že naše prehliadača a ďalšie Softvér slúži k čomu? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Keby som povedal, že SSL je zapojený, keď vás 136 00:06:06,860 --> 00:06:13,920 navštíviť adresu URL, ktorá začína s HTTPS, čo potom môže SSL súvisieť? 137 00:06:13,920 --> 00:06:14,580 Šifrovania. 138 00:06:14,580 --> 00:06:16,470 Takže budeme hovoriť o to v najbližších dňoch. 139 00:06:16,470 --> 00:06:18,750 Šifrovanie, umenie kódovanie informácie. 140 00:06:18,750 --> 00:06:22,200 >> Ale dlhý príbeh krátky, Apple pred časom urobil chybu 141 00:06:22,200 --> 00:06:25,970 pri ich vykonávaní SSL, je softvér, ktorý nakoniec implementuje 142 00:06:25,970 --> 00:06:30,120 URL, ako je HTTPS alebo max Pripojenie tam taky. 143 00:06:30,120 --> 00:06:32,850 Výsledkom je, že vaša zapojenie by mohlo potenciálne 144 00:06:32,850 --> 00:06:33,920 byť zachytené. 145 00:06:33,920 --> 00:06:37,130 A vaše pripojenie bolo nie nutne šifrovaná 146 00:06:37,130 --> 00:06:40,350 ak by ste mali nejaký zlý človek medzi vy a webové stránky cieľ, ktorý 147 00:06:40,350 --> 00:06:42,170 vedel, ako využiť to. 148 00:06:42,170 --> 00:06:45,090 >> Teraz Apple nakoniec vyslaný Oprava tohto konečne, 149 00:06:45,090 --> 00:06:46,920 a popis ich oprava bola táto. 150 00:06:46,920 --> 00:06:49,878 Bezpečná doprava, nepodarilo sa overiť pravosť spojenie. 151 00:06:49,878 --> 00:06:52,920 Problém bol vyriešený tým, obnoviť chýbajúce validačné kroky. 152 00:06:52,920 --> 00:06:57,250 >> Tak to je veľmi ruka zvlnená vysvetlenie jednoducho len tým, že sme sa podelal. 153 00:06:57,250 --> 00:07:00,920 Tam je doslova jedna riadok kódu, ktorý bol kočík 154 00:07:00,920 --> 00:07:05,130 pri ich vykonávaní SSL a ak ste online a hľadať pre tento 155 00:07:05,130 --> 00:07:07,210 môžete skutočne nájsť pôvodný zdrojový kód. 156 00:07:07,210 --> 00:07:11,960 Napríklad, to je snímka obrazovky len časť z pomerne veľkého súboru, 157 00:07:11,960 --> 00:07:15,965 ale to je zrejme funkcia nazýva SSL overiť znak servera výmenu kľúčov. 158 00:07:15,965 --> 00:07:17,840 A to trvá veľa argumenty a vstupy. 159 00:07:17,840 --> 00:07:20,298 A my sa budeme sústrediť moc tam markantov, 160 00:07:20,298 --> 00:07:24,390 ale ak sa sústredíte na kód vnútri tej najvyššej function-- LET'S 161 00:07:24,390 --> 00:07:25,590 priblížiť na to. 162 00:07:25,590 --> 00:07:28,140 Možno už tušia čo chyba môže 163 00:07:28,140 --> 00:07:31,230 byť, aj keď nemáte tušenie, v konečnom dôsledku to, čo hľadáte na. 164 00:07:31,230 --> 00:07:35,924 Tam je trochu anomália tu, čo je to, čo? 165 00:07:35,924 --> 00:07:38,940 >> Jo, nemám naozaj rád pohľad z dvoch GOTO zlyhá. 166 00:07:38,940 --> 00:07:42,060 Úprimne povedané, ja naozaj neviem, čo goto zlyhanie prostriedky, ale s dvoma z nich 167 00:07:42,060 --> 00:07:42,810 chrbtom k sebe. 168 00:07:42,810 --> 00:07:45,290 To ma len tak trie intelektuálne zle, 169 00:07:45,290 --> 00:07:48,910 a samozrejme keď sme sa zamerať na len tie linky, to je C. 170 00:07:48,910 --> 00:07:52,220 >> Takže veľa Apple kódu je sám napísaný v jazyku C, 171 00:07:52,220 --> 00:07:55,780 a to zrejme je naozaj equivalent-- 172 00:07:55,780 --> 00:07:59,060 nie je k tejto krásnej odsadenie verzie, ale ak spoznáte skutočnosť 173 00:07:59,060 --> 00:08:02,560 že nie je zložené zátvorky, čo Apple skutočne napísal, bol kód, ktorý sa pozerá 174 00:08:02,560 --> 00:08:03,540 takto. 175 00:08:03,540 --> 00:08:07,080 Tak som oddialenie a ja pevné odsadenie v tom zmysle, 176 00:08:07,080 --> 00:08:10,690 že v prípade, že to nie je zložené zátvorky, že druhej goto zlyhanie, ktoré je v žltej 177 00:08:10,690 --> 00:08:12,500 sa chystá vykonať bez ohľadu na to. 178 00:08:12,500 --> 00:08:15,540 Nie je to spojené s ak podmienka nad ním. 179 00:08:15,540 --> 00:08:19,590 >> Takže aj znova, ak to nie je úplne porozumieť tomu, čo by to mohlo možno 180 00:08:19,590 --> 00:08:23,230 bude robiť, viem, že každý z nich conditions-- každej z týchto čiar 181 00:08:23,230 --> 00:08:26,180 Je to veľmi dôležitý krok v procese kontroly 182 00:08:26,180 --> 00:08:28,350 ak vaše dáta je v skutočnosti zašifrované. 183 00:08:28,350 --> 00:08:31,710 Takže skákanie jeden z nich kroky, nie je najlepší nápad. 184 00:08:31,710 --> 00:08:34,840 >> Ale pretože sme to Druhý goto zlyhať v žltej, 185 00:08:34,840 --> 00:08:36,840 a preto, že akonáhle sme trochu esteticky 186 00:08:36,840 --> 00:08:40,480 posuňte ju doľava, kde ho logicky je v tejto chvíli, čo sa 187 00:08:40,480 --> 00:08:43,230 to znamená na linke Kód nižšia, než je druhá GOTO 188 00:08:43,230 --> 00:08:46,480 zlyhanie by si o tom myslíte? 189 00:08:46,480 --> 00:08:48,860 Je to vždy bude preskočený. 190 00:08:48,860 --> 00:08:52,100 Takže gotos sú všeobecne odsudzovaná z dôvodov, ktoré sa naozaj idú do, 191 00:08:52,100 --> 00:08:54,940 a síce v CS50 máme tendenciu sa učiť tento príkaz GOTO, 192 00:08:54,940 --> 00:08:58,130 ale môžete myslieť GOTO zlyhanie v tom zmysle, skočiť 193 00:08:58,130 --> 00:08:59,600 na inej časti kódu. 194 00:08:59,600 --> 00:09:03,120 >> Inými slovami, skákať cez úplne to posledný riadok, 195 00:09:03,120 --> 00:09:07,420 a tak sa výsledok tohto hlúpy jednoduchá chyba, že bol len 196 00:09:07,420 --> 00:09:10,330 Výsledok snáď niekoho kopírovanie a vkladanie taky 197 00:09:10,330 --> 00:09:14,150 mnohokrát bolo, že celý bezpečnosť iOS a Mac OS 198 00:09:14,150 --> 00:09:18,240 bolo náchylné na odpočúvanie zlí chlapci na dlhšiu dobu. 199 00:09:18,240 --> 00:09:19,940 Až Apple konečne opravil toto. 200 00:09:19,940 --> 00:09:23,100 >> Teraz, keď niektorí z vás sú vlastne beží staršie verzie iOS alebo Mac OS, 201 00:09:23,100 --> 00:09:27,250 môžete ísť na gotofail.com ktoré je webová stránka, že niekto nastaviť 202 00:09:27,250 --> 00:09:29,190 sa v podstate určí programovo 203 00:09:29,190 --> 00:09:30,980 ak váš počítač je stále zraniteľné. 204 00:09:30,980 --> 00:09:33,600 A úprimne povedané, ak je, je to asi dobrý nápad 205 00:09:33,600 --> 00:09:36,870 aktualizovať telefón alebo Mac v tomto bode. 206 00:09:36,870 --> 00:09:40,120 Ale tam, len svedčí o tom, ako zhodnotenie týchto nižších úrovní 207 00:09:40,120 --> 00:09:42,400 Podrobnosti a spravodlivo jednoduché nápady môže naozaj 208 00:09:42,400 --> 00:09:44,590 preložiť do rozhodnutia a problémy, ktoré 209 00:09:44,590 --> 00:09:47,320 affected-- v tomto case-- milióny ľudí. 210 00:09:47,320 --> 00:09:49,107 >> Teraz pár slov o správe. 211 00:09:49,107 --> 00:09:50,690 Sekcia začne tento rok v nedeľu. 212 00:09:50,690 --> 00:09:53,360 Dostanete e-mail od víkend na úseku, na ktorom mieste 213 00:09:53,360 --> 00:09:55,290 Proces resectioning začne, ak ste 214 00:09:55,290 --> 00:09:56,998 si uvedomil, máte teraz niektoré nové konflikty. 215 00:09:56,998 --> 00:10:00,180 Takže sa to stane každý rok, a my sme sa ubytovať v najbližších dňoch. 216 00:10:00,180 --> 00:10:02,430 >> Office hours-- robiť, aby oko na tomto pláne tu. 217 00:10:02,430 --> 00:10:05,100 Zmení trochu tento týždeň, najmä počiatočný čas 218 00:10:05,100 --> 00:10:08,180 a umiestnenia, takže sa poraďte so že predtým, než sa vydáte do pracovného času 219 00:10:08,180 --> 00:10:09,520 niektorý z nasledujúcich štyroch noci. 220 00:10:09,520 --> 00:10:12,680 A teraz pár slov o posúdenie, najmä ak sa ponoríte do problému 221 00:10:12,680 --> 00:10:14,350 stanovuje jeden a mimo nej. 222 00:10:14,350 --> 00:10:17,070 >> Takže podľa špecifikácie, Tieto sú všeobecne 223 00:10:17,070 --> 00:10:20,360 osi, pozdĺž ktorej budeme hodnotiť svoju prácu. 224 00:10:20,360 --> 00:10:23,170 Rozsah sa odkazuje na to, čo miery Váš kód náradia 225 00:10:23,170 --> 00:10:25,690 funkcie požadované naše špecifikácie. 226 00:10:25,690 --> 00:10:28,290 Inými slovami, ako moc dielna sada si odhryznúť. 227 00:10:28,290 --> 00:10:30,440 Vedeli ste to tretina z nich, polovica z nich, 100% nej. 228 00:10:30,440 --> 00:10:33,000 Aj v prípade, že to nie je správne, koľko ste pokus? 229 00:10:33,000 --> 00:10:35,290 Takže zachytí úroveň úsilie a množstvo 230 00:10:35,290 --> 00:10:38,260 , Ku ktorému odhryzol Problém SET je. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- tento, na akej miery je váš kód 232 00:10:40,690 --> 00:10:43,150 v súlade s našimi špecifikácie a bez chýb. 233 00:10:43,150 --> 00:10:44,770 Tak to funguje správne? 234 00:10:44,770 --> 00:10:48,700 Ak dáme mu nejaký vstup, robí to nám výstup, ktorý očakávame? 235 00:10:48,700 --> 00:10:52,570 Design-- teraz je to prvý sú najmä tie, kvalitatívne 236 00:10:52,570 --> 00:10:56,180 alebo tie, ktoré vyžadujú ľudský úsudok. 237 00:10:56,180 --> 00:10:59,690 A skutočne, to je dôvod, prečo máme zamestnanca toľkých výučby kolegami a samozrejme 238 00:10:59,690 --> 00:11:00,350 asistenti. 239 00:11:00,350 --> 00:11:03,480 Do akej miery je váš kód napísaný dobre? 240 00:11:03,480 --> 00:11:05,810 >> A opäť sa jedná o veľmi kvalitatívne hodnotenie 241 00:11:05,810 --> 00:11:09,100 že bude pracovať s vami na obojsmerne v najbližších týždňoch. 242 00:11:09,100 --> 00:11:12,060 Tak, že keď sa dostanete nie tak číselné výsledky, ale aj 243 00:11:12,060 --> 00:11:16,682 Písomné skóre, alebo napísaný spätná väzba, alebo písomnej spätnej väzby v anglických slov. 244 00:11:16,682 --> 00:11:19,640 To je to, čo budeme používať riadiť vás k vlastne písať lepšie kód. 245 00:11:19,640 --> 00:11:23,320 A v prednáške a časti, budeme sa snažiť upozorniť out-- tak často, ako by sme can-- 246 00:11:23,320 --> 00:11:26,420 to, čo robí program, a to nielen správne a funkčne dobre, 247 00:11:26,420 --> 00:11:28,200 ale aj dobre navrhnuté. 248 00:11:28,200 --> 00:11:31,850 Najúčinnejšie by to mohlo byť, alebo aj najkrajšie to môže byť. 249 00:11:31,850 --> 00:11:33,100 >> Čo nás vedie k štýlu. 250 00:11:33,100 --> 00:11:36,876 Štýl nakoniec je estetický súd. 251 00:11:36,876 --> 00:11:38,750 Ste si vybral dobrý Mená pre vaše premenné? 252 00:11:38,750 --> 00:11:40,330 Už ste správne odsadené kód? 253 00:11:40,330 --> 00:11:44,010 Vyzerá to dobre, a preto, to je ľahké pre iné ľudské bytosti 254 00:11:44,010 --> 00:11:46,550 čítať vaše príslušné na jeho správnosť. 255 00:11:46,550 --> 00:11:50,300 >> Teraz všeobecne podľa osnov, sme skóre tieto veci na päťbodovej stupnici. 256 00:11:50,300 --> 00:11:53,640 A dovoľte mi, aby som kladivo domov bod že sa tri je naozaj dobrá. 257 00:11:53,640 --> 00:11:55,550 Veľmi rýchlo sa to ľudí začať robiť aritmetiku. 258 00:11:55,550 --> 00:11:58,133 Keď dostanete tri zo päť na správnosť pre niektoré pset 259 00:11:58,133 --> 00:12:02,040 a myslí si, sakra, budem 60% , Ktorý je v podstate D alebo E. 260 00:12:02,040 --> 00:12:03,980 >> To nie je spôsob, ako myslíte, že z týchto čísel. 261 00:12:03,980 --> 00:12:06,880 Tri je naozaj dobrá, a to, čo sme všeobecne očakávajú, že na začiatku 262 00:12:06,880 --> 00:12:09,820 termínu je, že ak ste sa dostal banda three's-- možno pár 263 00:12:09,820 --> 00:12:12,540 veľtrhov, pár fours-- alebo pár dvojky, pár fours-- 264 00:12:12,540 --> 00:12:13,748 že je to dobré miesto pre štart. 265 00:12:13,748 --> 00:12:16,320 A tak dlho, ako vidíme hore trajektórie v priebehu času, 266 00:12:16,320 --> 00:12:18,540 ste v mimoriadne dobrom mieste. 267 00:12:18,540 --> 00:12:20,752 >> Vzorec, ktorý používame na Hmotnosť veci je v podstate 268 00:12:20,752 --> 00:12:22,710 to podľa osnovy čo práve znamená, že 269 00:12:22,710 --> 00:12:24,750 dať väčší dôraz na správnosť. 270 00:12:24,750 --> 00:12:27,930 Vzhľadom k tomu, že je to veľmi často správnosť ktorý berie najviac času. 271 00:12:27,930 --> 00:12:28,760 Ver mi teraz. 272 00:12:28,760 --> 00:12:31,190 Budete find-- aspoň v jednom pset--, ktoré vás 273 00:12:31,190 --> 00:12:36,790 trávia 90% svojho času pracuje na 10% problému. 274 00:12:36,790 --> 00:12:39,320 >> A všetko, čo nejako funguje s výnimkou jedného alebo dvoch chýb, 275 00:12:39,320 --> 00:12:41,570 a to sú chyby, ktoré vás až neskoro v noci. 276 00:12:41,570 --> 00:12:43,380 To sú tie, ktoré nejako uniknúť vás. 277 00:12:43,380 --> 00:12:45,560 Ale potom, čo spí na ňom, alebo sa zúčastňuje úradné hodiny 278 00:12:45,560 --> 00:12:48,844 alebo klásť otázky on-line, je keď sa dostanete do tej 100% cieľu, 279 00:12:48,844 --> 00:12:50,760 a to je dôvod, prečo sme hmotnosť správnosť najviac. 280 00:12:50,760 --> 00:12:54,102 Navrhnúť trochu menej, a štýl trochu menej než to. 281 00:12:54,102 --> 00:12:56,060 Ale majte na mind-- štýle je najjednoduchšie 282 00:12:56,060 --> 00:12:58,890 z nich odhryznúť podľa štýlu sprievodca. 283 00:12:58,890 --> 00:13:01,580 >> A teraz vážnejšie Pozor na akademickej poctivosti. 284 00:13:01,580 --> 00:13:05,000 CS50 má neblahý vyznamenania je najväčším výrobcom Ad rady 285 00:13:05,000 --> 00:13:07,330 prípady takmer každý rok historicky. 286 00:13:07,330 --> 00:13:11,012 To nie je preto, že študenti podvádzať CS50 o nič viac než ktorýkoľvek iný triedy, 287 00:13:11,012 --> 00:13:13,720 ale preto, že podľa povahy práce, Skutočnosť, že je elektronický, 288 00:13:13,720 --> 00:13:16,636 Skutočnosť, že sa pozrieme na to, a skutočnosť sme počítačoví odborníci, 289 00:13:16,636 --> 00:13:20,570 Môžem povedať, že sme bohužiaľ veľmi dobre odhaľovať ju. 290 00:13:20,570 --> 00:13:22,710 >> Takže čo to znamená v reálnych hodnotách? 291 00:13:22,710 --> 00:13:24,820 Takže to, podľa osnov, filozofia kurzu je 292 00:13:24,820 --> 00:13:28,090 naozaj redukuje byť rozumný. 293 00:13:28,090 --> 00:13:31,684 Tam je to hranica medzi robiť svoju prácu na vlastnú päsť 294 00:13:31,684 --> 00:13:34,100 a získať trochu primeraná pomoc od priateľov 295 00:13:34,100 --> 00:13:38,020 a priamo tým, že prácu pre priateľ, alebo zaslaním mu svoj kód 296 00:13:38,020 --> 00:13:41,080 tak, že on alebo ona môže jednoducho vziať alebo si ju požičať z práva. 297 00:13:41,080 --> 00:13:43,580 A to prekročí hranicu , Že boli v triede. 298 00:13:43,580 --> 00:13:45,410 >> Pozri osnovy v konečnom dôsledku pre riadky 299 00:13:45,410 --> 00:13:48,209 že čerpáme ako rozumné a nerozumné správanie, 300 00:13:48,209 --> 00:13:50,000 ale je to naozaj variť dole k podstate 301 00:13:50,000 --> 00:13:53,980 svojej práce museli byť svojim vlastným koncom. 302 00:13:53,980 --> 00:13:56,230 Teraz sa, že povedal, je heuristický. 303 00:13:56,230 --> 00:13:58,980 Vzhľadom k tomu, ako by sa mohlo imagine-- z úradných hodín a vizuálne 304 00:13:58,980 --> 00:14:01,060 a videa máme zobrazené tak far-- CS50 305 00:14:01,060 --> 00:14:04,530 skutočne chcel byť ako spolupráca a ako družstvo a ako sociálny 306 00:14:04,530 --> 00:14:06,450 ako je to možné. 307 00:14:06,450 --> 00:14:08,570 Napríklad spoločné ako je starostlivý. 308 00:14:08,570 --> 00:14:11,314 >> Ale s tým povedal, heuristika, ako uvidíte v učebných osnovách, 309 00:14:11,314 --> 00:14:12,980 je, že keď máte problém. 310 00:14:12,980 --> 00:14:16,470 Máte nejakú chybu v kóde, ktorý vám nemožno vyriešiť, je rozumné pre vás 311 00:14:16,470 --> 00:14:18,039 ukázať svoj kód na niekoho iného. 312 00:14:18,039 --> 00:14:21,080 Priateľ aj v triede, priateľ sedí vedľa vás v úradných hodinách, 313 00:14:21,080 --> 00:14:22,680 alebo zamestnanec. 314 00:14:22,680 --> 00:14:25,810 Ale nemusí zobraziť ich kód na vás. 315 00:14:25,810 --> 00:14:27,710 >> Inými slovami, odpoveď na Váš question-- 316 00:14:27,710 --> 00:14:29,940 Musím help-- nie oh, tu je môj kód. 317 00:14:29,940 --> 00:14:32,440 Pozrite sa na to, a vyvodiť z toho, čo bude. 318 00:14:32,440 --> 00:14:34,580 Teraz, samozrejme, je tu spôsob, ako jasne k hre 319 00:14:34,580 --> 00:14:37,760 Tento systém, v ktorom som vám ukážem, môj kód pred tým, než otázku. 320 00:14:37,760 --> 00:14:40,150 Môžete mi ukázať môj kód pred tým, než otázku. 321 00:14:40,150 --> 00:14:45,870 Ale viď sylabus znova jemnejšie detaily o tom, kde je tento riadok. 322 00:14:45,870 --> 00:14:50,606 >> Len preto, aby sa maľovať obraz a zdieľať transparentne, ako je to možné 323 00:14:50,606 --> 00:14:53,480 kde sme na v posledných rokoch, To je počet prípadov Ad rady 324 00:14:53,480 --> 00:14:56,260 že CS50 má viac ako za posledných sedem rokov. 325 00:14:56,260 --> 00:14:58,717 14 prípadov tejto najnovšej jeseň. 326 00:14:58,717 --> 00:15:01,300 Z hľadiska zúčastnených študentov, to bolo 20 z nejakého zvláštneho študenti 327 00:15:01,300 --> 00:15:02,490 tento rok na jeseň. 328 00:15:02,490 --> 00:15:05,670 Tam bol vrchol 33 študenti pred niekoľkými rokmi. 329 00:15:05,670 --> 00:15:08,830 Mnohé z nich sú bohužiaľ už tu na akademickej pôde. 330 00:15:08,830 --> 00:15:13,100 >> Študenti sa podieľajú ako percento trieda historicky v rozmedzí od 0% 331 00:15:13,100 --> 00:15:17,300 na 5,3%, čo je len povedať, To je každoročne výzvou. 332 00:15:17,300 --> 00:15:20,390 A na tento účel, čo chceme urobiť, je povedať jednu 333 00:15:20,390 --> 00:15:24,310 že dd-- len na tieto FYI-- spravodlivosť pre tých študentov, ktorí 334 00:15:24,310 --> 00:15:26,520 sú nasledujúce riadok podľa toho. 335 00:15:26,520 --> 00:15:29,620 Robíme porovnať všetky aktuálne podanie proti všetkým minulých misií 336 00:15:29,620 --> 00:15:30,840 z posledných mnoho rokov. 337 00:15:30,840 --> 00:15:33,620 >> Vieme tiež, ako na Google po a nájsť úložisko kódu 338 00:15:33,620 --> 00:15:36,360 on-line, Diplofix on-line, práca stránkach online. 339 00:15:36,360 --> 00:15:41,580 Ak sa študent môže nájsť, môžeme určite Je to rovnako ako my s ľútosťou robiť. 340 00:15:41,580 --> 00:15:45,330 Takže to, čo uvidíte v učebných osnovách aj keď je toto ustanovenie ľútosť. 341 00:15:45,330 --> 00:15:47,500 Môžem rozhodne oceniť, a všetci sme sa 342 00:15:47,500 --> 00:15:50,870 Pracovníci, ktorí vykonávajú kurzu ako Táto, alebo tento sám o sebe v priebehu času, 343 00:15:50,870 --> 00:15:53,997 iste viete, aké to je, keď život sa dostane do cesty, keď máte 344 00:15:53,997 --> 00:15:56,080 niektoré neskoro v noci deadline-- a to nielen v tejto triede, 345 00:15:56,080 --> 00:15:58,660 ale another-- keď ste úplne vyčerpaný, stresu, 346 00:15:58,660 --> 00:16:00,659 majú nadmerné množstvo ďalších vecí robiť. 347 00:16:00,659 --> 00:16:03,660 Budete robiť na nejakom mieste v život určite zlý, možno neskoro 348 00:16:03,660 --> 00:16:04,620 noc rozhodnutia. 349 00:16:04,620 --> 00:16:06,520 >> Takže podľa osnovy je toto ustanovenie, 350 00:16:06,520 --> 00:16:10,629 taká, že ak do 72 hodín od výroby niektoré zlé rozhodnutia, môžete vlastniť až k nemu 351 00:16:10,629 --> 00:16:12,670 a dostať sa ku mne a jeden z vedúcich kurzu je 352 00:16:12,670 --> 00:16:14,300 a budeme mať rozhovor. 353 00:16:14,300 --> 00:16:16,220 Budeme riešiť veci interne v nádeji, že 354 00:16:16,220 --> 00:16:18,770 z toho stáva viac Výučba moment alebo životnú lekciu, 355 00:16:18,770 --> 00:16:22,120 a nie niečo, čo sa mimoriadne drastické následky 356 00:16:22,120 --> 00:16:24,570 ako môžete vidieť na nasledujúcich grafoch tu. 357 00:16:24,570 --> 00:16:26,540 >> Tak to je veľmi vážny tón. 358 00:16:26,540 --> 00:16:29,960 Zastavme len za pár sekúnd prelomiť napätia. 359 00:16:29,960 --> 00:16:34,442 >> [Prehrávanie hudby] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> David J. Malan: Tak jo, tak, ako to bolo pre Segue? 362 00:17:20,250 --> 00:17:22,059 Dnešných základných tém. 363 00:17:22,059 --> 00:17:23,859 Prvý z nich je abstrakcia. 364 00:17:23,859 --> 00:17:26,900 Ďalší, z ktorých bude reprezentácie dát, čo úprimne povedané 365 00:17:26,900 --> 00:17:31,640 je naozaj suchý spôsob, ako povedať, ako môžeme ísť o riešenie problémov a myslenie 366 00:17:31,640 --> 00:17:33,250 o riešenie problémov? 367 00:17:33,250 --> 00:17:37,285 Takže ste videli v Scratch, a vy ste Videl snáď už v pset1 s C 368 00:17:37,285 --> 00:17:39,930 že nielen môžete použiť funkcie, ako printf, 369 00:17:39,930 --> 00:17:42,770 že ostatní ľudia v minulých rokoch napísal pre teba. 370 00:17:42,770 --> 00:17:45,340 Môžete tiež písať svoje vlastné funkcie. 371 00:17:45,340 --> 00:17:48,440 >> A aj keď je možné, urobiť to v C, a úprimne povedané, v pset1 372 00:17:48,440 --> 00:17:51,866 nemáte naozaj potrebujete napísať svoj vlastné funkcie pretože problem-- 373 00:17:51,866 --> 00:17:53,990 zatiaľ čo možná skľučujúca na Prvý glance-- uvidíte 374 00:17:53,990 --> 00:17:57,910 môže byť v konečnom dôsledku vyriešiť nie všetky, že veľa riadkov kódu. 375 00:17:57,910 --> 00:18:01,140 Ale s tým, že, čo sa týka písanie svoje vlastné funkcie, 376 00:18:01,140 --> 00:18:03,570 Uvedomujem si, že C sa dá vám táto schopnosť. 377 00:18:03,570 --> 00:18:06,940 >> Chystám sa ísť v dnešnej zdrojového kódu, ktorý je k dispozícii už on-line, 378 00:18:06,940 --> 00:18:10,900 a ja idem do toho a otvorený do programu s názvom funkcie 0.C, 379 00:18:10,900 --> 00:18:14,620 a vo funkcii nulovej uvidíme pár vecí. 380 00:18:14,620 --> 00:18:19,160 V prvých riadkov 18 až 23 je môj hlavnú funkciu. 381 00:18:19,160 --> 00:18:22,414 A teraz, keď sme začali čítať kód, ktorý nie sme písanie na behu, 382 00:18:22,414 --> 00:18:25,080 ale namiesto toho som napísal v predstihu alebo že ste na problém nastaviť 383 00:18:25,080 --> 00:18:27,910 Môže sa zobraziť s bola napísaná v predstihu. 384 00:18:27,910 --> 00:18:30,040 Dobrý spôsob, ako začať čítanie kódu niekoho iného 385 00:18:30,040 --> 00:18:31,400 , Je pozrieť sa na hlavné funkcie. 386 00:18:31,400 --> 00:18:34,420 Zistiť, kde túto položku Ide o to, spustenie programu, 387 00:18:34,420 --> 00:18:36,580 a potom ju logicky odtiaľ. 388 00:18:36,580 --> 00:18:40,190 >> Tak toto programe zrejme výtlačky Vaše meno nasledované dvojbodkou. 389 00:18:40,190 --> 00:18:42,490 My potom používame getString z knižnice CS50 390 00:18:42,490 --> 00:18:46,050 získať reťazec alebo slovo alebo frázu od užívateľa na klávesnici. 391 00:18:46,050 --> 00:18:48,390 A potom je tu to vec tady-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Teraz PrintName nie je funkcia, ktorá prichádza s C. 393 00:18:51,420 --> 00:18:52,970 Nie je to v štandardnom io.h. 394 00:18:52,970 --> 00:18:55,570 Nie je to v CS50.h. 395 00:18:55,570 --> 00:18:57,880 Je to skôr v rovnakom súbore. 396 00:18:57,880 --> 00:19:01,000 Všimnite si, keď som nalistujte A bit-- linky 25 na 27-- 397 00:19:01,000 --> 00:19:05,330 je to len celkom spôsob komentovanie Váš kód pomocou hviezd a lomítka. 398 00:19:05,330 --> 00:19:07,320 Jedná sa o multi-línie komentovať, a to je len 399 00:19:07,320 --> 00:19:10,570 môj popis v modrej farbe čo táto funkcia robí. 400 00:19:10,570 --> 00:19:14,530 >> Vzhľadom k tomu, línií, 28 až 31, Napísal som super jednoduchú funkciu 401 00:19:14,530 --> 00:19:16,280 názov, ktorého je PrintName. 402 00:19:16,280 --> 00:19:19,560 Trvá to, koľko Argumenty by ste povedali? 403 00:19:19,560 --> 00:19:25,120 Takže jeden argument--, pretože tam je jeden Tvrdenie uvedené v zátvorkách. 404 00:19:25,120 --> 00:19:27,000 Typ, ktorý je String. 405 00:19:27,000 --> 00:19:30,240 Čo znamená, PrintName je takhle čierne skrinky 406 00:19:30,240 --> 00:19:32,910 alebo funkcie, ktorá zoberie ako vstupný reťazec. 407 00:19:32,910 --> 00:19:35,730 >> A názov tohto reťazca Pohodlne sa bude Name. 408 00:19:35,730 --> 00:19:37,840 Nie S, nie N, ale meno. 409 00:19:37,840 --> 00:19:41,090 Takže čo PrintName robiť? 410 00:19:41,090 --> 00:19:42,210 Je to pekné jednoduché. 411 00:19:42,210 --> 00:19:45,390 Rovnako ako jeden riadok kódu pre printf, ale zrejme to 412 00:19:45,390 --> 00:19:47,950 vytlačí "Dobrý deň," tak a tak. 413 00:19:47,950 --> 00:19:50,070 V prípade, že tak a tak vychádza z argumentu. 414 00:19:50,070 --> 00:19:52,300 >> Teraz to nie je obrovský inovačný tu. 415 00:19:52,300 --> 00:19:56,710 Naozaj, som vzal program, ktorý by mohol boli písané s jeden riadok kódu 416 00:19:56,710 --> 00:20:00,190 tým, že to tu, a zmenil ho na niečo 417 00:20:00,190 --> 00:20:04,920 ktorý zahŕňa niektoré šesť alebo sedem alebo tak nejako riadkov kódu celú cestu sem. 418 00:20:04,920 --> 00:20:08,190 >> Ale je to nácvik princíp známy ako abstrakcie. 419 00:20:08,190 --> 00:20:12,550 Druh zapuzdrenie vnútri nové funkcia, ktorá má meno, a lepšie 420 00:20:12,550 --> 00:20:14,590 napriek tomu, že meno doslovne hovorí, že to, čo robí. 421 00:20:14,590 --> 00:20:16,880 Myslím printf--, že to nie je najmä opisné. 422 00:20:16,880 --> 00:20:18,932 Ak chcem vytvoriť skladačky, alebo či som 423 00:20:18,932 --> 00:20:21,140 Chcete vytvoriť funkciu, ktorá tlačí niečí meno, 424 00:20:21,140 --> 00:20:23,230 krása, ako to urobiť je to, že môžem skutočne 425 00:20:23,230 --> 00:20:27,170 dať, že funkciu jej názov , Ktorý popisuje, čo to robí. 426 00:20:27,170 --> 00:20:29,844 >> Teraz trvá na vstupe, ktorý Som svojvoľne volal meno, 427 00:20:29,844 --> 00:20:32,760 ale tiež sa výborne opisný namiesto toho, aby sa trochu viac 428 00:20:32,760 --> 00:20:36,140 generic ako S. a neplatné, teraz, jednoducho znamená, 429 00:20:36,140 --> 00:20:38,330 že táto funkcia nie je ruky mi nič. 430 00:20:38,330 --> 00:20:41,127 Nie je to tak, že getString Doslova mi podá späť reťazec 431 00:20:41,127 --> 00:20:43,960 ako sme to urobili s kúskami papiera so svojimi spolužiakmi minulý týždeň, 432 00:20:43,960 --> 00:20:45,990 ale to má len vedľajší efekt. 433 00:20:45,990 --> 00:20:48,080 Vytlačí niečo na obrazovku. 434 00:20:48,080 --> 00:20:53,880 >> Takže na konci dňa, keď robiť, aby funkcia-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 uvidíme, že sa spýta na moje meno. 436 00:20:55,450 --> 00:20:58,150 Píšem Davida, a to druhy sa moje meno. 437 00:20:58,150 --> 00:21:01,080 Ak by som to znovu s Robom, to bude hovoriť "Ahoj, Robe." 438 00:21:01,080 --> 00:21:04,280 Takže jednoduchá myšlienka, ale možno odvodiť z toho psychicky 439 00:21:04,280 --> 00:21:06,750 že ak vaša programy sa o niečo zložitejšie, 440 00:21:06,750 --> 00:21:10,290 a chcete napísať kus kód a volanie, ktoré code-- Vyvolať 441 00:21:10,290 --> 00:21:13,270 že code-- podľa popisné pomenovať ako PrintName, 442 00:21:13,270 --> 00:21:15,600 C robí dovoliť nám túto možnosť. 443 00:21:15,600 --> 00:21:17,660 >> Tu je ďalší jednoduchý príklad. 444 00:21:17,660 --> 00:21:22,940 Napríklad, keď som otvoriť súbor z dnes volal return.c, 445 00:21:22,940 --> 00:21:24,270 Všimnite si, čo som tu urobil. 446 00:21:24,270 --> 00:21:26,330 Väčšina z tejto hlavnej funkcie je printf. 447 00:21:26,330 --> 00:21:30,360 Prvýkrát som sa svojvoľne inicializovať Premenná x sa nazýva číslo 2. 448 00:21:30,360 --> 00:21:34,110 Potom som vytlačiť "x je teraz % I "odovzdávanie v hodnote x. 449 00:21:34,110 --> 00:21:35,500 Takže som len hovorím, čo to je. 450 00:21:35,500 --> 00:21:37,208 >> Teraz som len smelo vyhlasovať sa printf. 451 00:21:37,208 --> 00:21:42,050 Som Cubing, že hodnota x, a ja som Pritom volaním funkcie 452 00:21:42,050 --> 00:21:45,590 volal cube absolvovaní v X ako argument, 453 00:21:45,590 --> 00:21:49,300 a následným uložením výstupu v premennej samotnej, x. 454 00:21:49,300 --> 00:21:51,340 Takže som prepisovanie hodnotu x. 455 00:21:51,340 --> 00:21:53,380 Som prevažujúci hodnota x s tým, čo 456 00:21:53,380 --> 00:21:56,510 Výsledkom volania Táto funkcia je kocka. 457 00:21:56,510 --> 00:21:59,530 A potom som len vytlačiť na niektoré našuchorený veci tu hovoriť, čo som urobil. 458 00:21:59,530 --> 00:22:01,600 >> Takže to, čo potom je kocka? 459 00:22:01,600 --> 00:22:03,510 Všimnite si, čo je v podstate inak tu. 460 00:22:03,510 --> 00:22:05,540 Dal som funkciu názov ako predtým. 461 00:22:05,540 --> 00:22:08,270 Som zadaný názov argumentu. 462 00:22:08,270 --> 00:22:11,650 Tentoraz je to len n miesto mena, ale to by som mohol hovoriť, čo chcem. 463 00:22:11,650 --> 00:22:12,650 Ale toto je niečo iné. 464 00:22:12,650 --> 00:22:14,080 To, čo na ľavej strane. 465 00:22:14,080 --> 00:22:16,290 Predtým to bolo to, čo slovo? 466 00:22:16,290 --> 00:22:16,870 Boys. 467 00:22:16,870 --> 00:22:18,580 Teraz je to samozrejme int. 468 00:22:18,580 --> 00:22:20,630 >> Takže to, čo je potrebné vziať? 469 00:22:20,630 --> 00:22:24,090 Vzhľadom k tomu, void znamená druh ničota, a to bol ten prípad. 470 00:22:24,090 --> 00:22:25,970 PrintName vrátil nič. 471 00:22:25,970 --> 00:22:27,942 Je to niečo urobil, ale to sa mi vrátiť 472 00:22:27,942 --> 00:22:30,650 niečo, čo by som mohol dať na ľavá strana znamienko rovnosti 473 00:22:30,650 --> 00:22:32,460 ako ja som urobil tú na linke 22. 474 00:22:32,460 --> 00:22:36,780 >> Takže keď poviem, že v on-line 30, čo je to pravdepodobne znamenať, 475 00:22:36,780 --> 00:22:38,610 o tom, čo kocka robí pre mňa? 476 00:22:38,610 --> 00:22:41,110 Jo? 477 00:22:41,110 --> 00:22:42,310 Vracia celé číslo. 478 00:22:42,310 --> 00:22:44,590 Tak mi to odovzdá späť, pre inštancie, kus papiera 479 00:22:44,590 --> 00:22:46,580 na ktoré napísal odpoveď. 480 00:22:46,580 --> 00:22:50,130 2 kocky alebo 3 kocky, alebo 4 cubed-- čo som prešiel v roku, 481 00:22:50,130 --> 00:22:51,540 a ako som sa realizovať to? 482 00:22:51,540 --> 00:22:54,810 No, práve n krát n krát n je, ako by som mohol kocka hodnotu. 483 00:22:54,810 --> 00:22:57,110 Takže znova, super jednoduchý nápad, ale demonštratívny 484 00:22:57,110 --> 00:23:00,100 teraz, ako môžeme písať funkcie že nás vlastne mal vrátiť 485 00:23:00,100 --> 00:23:02,380 hodnoty, ktoré by mohli byť zaujímavé. 486 00:23:02,380 --> 00:23:05,740 >> Poďme sa pozrieť na jeden posledný príklad tu volané funkcie jeden. 487 00:23:05,740 --> 00:23:08,530 V tomto príklade, sa začne získať viac presvedčivé. 488 00:23:08,530 --> 00:23:12,400 Takže vo funkcii jeden, to program-- upozornenia nakoniec 489 00:23:12,400 --> 00:23:14,920 volanie funkcie volaná GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt nie je Funkcie v knižnici CS50, 491 00:23:17,800 --> 00:23:20,400 ale rozhodli sme sa, by som to existovať. 492 00:23:20,400 --> 00:23:24,550 >> Takže keď sme sa posunúť dole neskôr v súbore, Všimnite si, ako som sa o realizácii 493 00:23:24,550 --> 00:23:26,560 získať pozitívne int, a ja hovoria, že je to viac presvedčivý 494 00:23:26,560 --> 00:23:28,992 pretože to je slušný Počet riadkov kódu. 495 00:23:28,992 --> 00:23:30,700 Nie je to len hlúpa hračka programu. 496 00:23:30,700 --> 00:23:33,870 Je to vlastne má nejakú kontrolu chýb a robiť niečo užitočného. 497 00:23:33,870 --> 00:23:38,470 >> Takže ak ste ešte nevideli návod videá, ktoré sme vložené do pset1, 498 00:23:38,470 --> 00:23:42,350 vedieť, že sa jedná o typ slučka v C, podobne ako v duchu 499 00:23:42,350 --> 00:23:44,270 na veľa vecí Scratch sa dá robiť. 500 00:23:44,270 --> 00:23:46,320 A to hovorí, že to urobiť. 501 00:23:46,320 --> 00:23:47,500 Vytlačiť na to. 502 00:23:47,500 --> 00:23:51,860 Potom choďte do toho a dostať n-- získať int a uložte ho na n, 503 00:23:51,860 --> 00:23:55,760 a pokračovať v tom to znova a znova a znova tak dlho, kým n je menšia ako jedna. 504 00:23:55,760 --> 00:23:58,720 >> Tak n bude menej ako jeden iba v prípade, že človek nie je spolupracujúci. 505 00:23:58,720 --> 00:24:01,980 Ak on alebo ona je písanie v 0 alebo -1, alebo -50, 506 00:24:01,980 --> 00:24:04,790 Táto slučka bude mať vykonávanie znova a znova. 507 00:24:04,790 --> 00:24:07,549 A nakoniec zistíte, I jednoducho vrátiť hodnotu. 508 00:24:07,549 --> 00:24:09,590 Takže teraz máme funkciu to by bolo pekné 509 00:24:09,590 --> 00:24:14,040 ak CS50 by implementovať do CS50.h a CS50.c pre vás, 510 00:24:14,040 --> 00:24:16,520 ale tu môžeme teraz vykonanie tohto sami. 511 00:24:16,520 --> 00:24:19,230 >> Ale dve pripomienky niektorých kľúčových detailov. 512 00:24:19,230 --> 00:24:24,390 One-- prečo Prehlasujem, int n, myslíš, že na linke 29 513 00:24:24,390 --> 00:24:27,139 namiesto toho len to, to tu, čo je 514 00:24:27,139 --> 00:24:28,930 viac v súlade s to, čo sme robili minulý týždeň? 515 00:24:28,930 --> 00:24:29,430 Jo? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Dobrá myšlienka. 518 00:24:35,110 --> 00:24:37,080 Takže ak by sme mali dať tu, je to, ako by sme 519 00:24:37,080 --> 00:24:39,110 udržiavať ju znova a znova potvrdzuje. 520 00:24:39,110 --> 00:24:42,000 To samo o sebe je nie je problematické, sama o sebe, 521 00:24:42,000 --> 00:24:43,940 pretože budeme potrebovať iba hodnota raz a potom 522 00:24:43,940 --> 00:24:45,330 budeme si novú tak ako tak. 523 00:24:45,330 --> 00:24:45,940 Ale dobrá myšlienka. 524 00:24:45,940 --> 00:24:46,440 Jo? 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 Tak preto, že som vyhlásil, n na riadok 29 mimo slučky, 528 00:24:59,030 --> 00:25:01,390 je k dispozícii v celom Celá táto funkcia. 529 00:25:01,390 --> 00:25:05,400 Nie ostatné funkcie, pretože n je stále vo vnútri týchto kučeravé 530 00:25:05,400 --> 00:25:06,470 traky tu. 531 00:25:06,470 --> 00:25:07,940 Tak-- istý. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Presne tak. 534 00:25:12,940 --> 00:25:14,356 Tak to je ešte na mieste. 535 00:25:14,356 --> 00:25:18,600 Ak by sme namiesto toho vyhlásil n tu na riadku 32, 536 00:25:18,600 --> 00:25:22,340 je to problematické, pretože odhad kde inde Musím sa k nim dostať? 537 00:25:22,340 --> 00:25:25,620 Na riadku 34, a jednoduché pravidlo je 538 00:25:25,620 --> 00:25:30,060 že môžete použiť premennú iba vnútri najnovších zložených zátvoriek 539 00:25:30,060 --> 00:25:31,420 , V ktorom je deklarovaná. 540 00:25:31,420 --> 00:25:35,230 >> Bohužiaľ, rad 34 je jeden riadok príliš neskoro, 541 00:25:35,230 --> 00:25:38,560 pretože som už uzavretá zložená zátvorka na linke 33 542 00:25:38,560 --> 00:25:41,220 , Ktorá zodpovedá zložená zátvorka na linke 30. 543 00:25:41,220 --> 00:25:44,180 A tak to je spôsob, ako hovoriť že táto premenná int je rozsahom, 544 00:25:44,180 --> 00:25:46,970 aby som tak povedal, len vnútri týchto zložených zátvoriek. 545 00:25:46,970 --> 00:25:48,910 Je to jednoducho neexistuje mimo nich. 546 00:25:48,910 --> 00:25:51,580 >> Takže naozaj, keď som to urobiť zle, dovoľte mi, aby som uložiť kód 547 00:25:51,580 --> 00:25:53,530 ako to je-- nesprávne napísaný. 548 00:25:53,530 --> 00:25:57,990 Nechaj ma ísť dopredu a robiť, aby funkcie 1 a notice-- chybe. 549 00:25:57,990 --> 00:26:03,502 Použitie nelegálnej identifikátor n na linke 35, ktorá je tu. 550 00:26:03,502 --> 00:26:05,210 A ak budeme posúvať nahor ďalší, ešte jeden. 551 00:26:05,210 --> 00:26:08,750 Použitie načierno Identifikátor n na riadku 34. 552 00:26:08,750 --> 00:26:11,200 >> Takže kompilátor Clang, je si všimol, že to jednoducho 553 00:26:11,200 --> 00:26:13,720 neexistuje, aj keď jasne, že je to tam vizuálne. 554 00:26:13,720 --> 00:26:16,090 Takže jednoduchá oprava prehlasuje ju tam. 555 00:26:16,090 --> 00:26:18,790 >> Teraz mi dovoľte prejdite na v hornej časti súboru. 556 00:26:18,790 --> 00:26:21,080 Čo vyskočí na vás, ako je trochu inak 557 00:26:21,080 --> 00:26:23,070 od veci sme sa pozreli na minulý týždeň? 558 00:26:23,070 --> 00:26:26,990 Nielen, že mám meno, a to nielen do Mám niektoré ostré patrí do top, 559 00:26:26,990 --> 00:26:29,340 Mám niečo, čo som volanie prototyp. 560 00:26:29,340 --> 00:26:36,100 Teraz to vyzerá strašne podobný tomu, čo sme práve videli pred chvíľou na linke 27. 561 00:26:36,100 --> 00:26:39,230 >> Takže poďme vyvodiť z iného chybové hlásenie, prečo som to urobil. 562 00:26:39,230 --> 00:26:42,050 Nechaj ma ísť napred a odstrániť tieto riadky tu. 563 00:26:42,050 --> 00:26:44,240 A tak nevieme nič o prototyp. 564 00:26:44,240 --> 00:26:45,430 Remake tohto súboru. 565 00:26:45,430 --> 00:26:46,890 Vykonajte jednu funkciu. 566 00:26:46,890 --> 00:26:48,090 A teraz, sakra, štyri chyby. 567 00:26:48,090 --> 00:26:50,220 Poďme prejdite do prvej. 568 00:26:50,220 --> 00:26:55,070 >> Implicitné deklarácia funkcie získať pozitívne int je C99 neplatný. 569 00:26:55,070 --> 00:26:57,780 C99 jednoducho znamená, že v roku 1999 verzia jazyka 570 00:26:57,780 --> 00:26:59,710 C, čo je to, čo sme skutočne používate. 571 00:26:59,710 --> 00:27:01,050 Takže čo to znamená? 572 00:27:01,050 --> 00:27:05,250 No C-- a konkrétnejšie C compilers-- sú celkom hlúpe programy. 573 00:27:05,250 --> 00:27:07,420 Oni len vedia, čo ste povedal im, a to 574 00:27:07,420 --> 00:27:08,960 vlastne tematická z minulého týždňa. 575 00:27:08,960 --> 00:27:12,910 >> Problém je, že keď pôjdem o vykonávaní meno tu, 576 00:27:12,910 --> 00:27:17,640 a zavolám funkciu nazvanú GetPositiveInt tu na riadku 20, 577 00:27:17,640 --> 00:27:22,520 táto funkcia nie je technicky existovať, kým kompilátor vidí líniu 27. 578 00:27:22,520 --> 00:27:25,450 Bohužiaľ, kompilátor robiť veci hore, dole, vľavo, vpravo, 579 00:27:25,450 --> 00:27:29,580 tak preto, že nie je vidieť realizácia GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 ale vidí snažíš používať to tu, 581 00:27:32,400 --> 00:27:35,810 je to len tak bail-- kričať na ste s chybou message-- možná 582 00:27:35,810 --> 00:27:38,440 mystický, a nie v skutočnosti kompiláciu súboru. 583 00:27:38,440 --> 00:27:41,940 >> Tak takzvaný prototyp až Tu je síce nadbytočná. 584 00:27:41,940 --> 00:27:47,870 Doslova som šiel dole a ja sem kopírovať a vložiť to, a dal som to sem. 585 00:27:47,870 --> 00:27:51,020 Void by bolo správne, takže budeme doslova skopírujte a vložte ju tentoraz. 586 00:27:51,020 --> 00:27:52,854 Doslova som skopírovať a vložiť ho. 587 00:27:52,854 --> 00:27:54,270 Naozaj len ako ako chleba drobček. 588 00:27:54,270 --> 00:27:56,260 >> Trochu vodítkom pre kompilátor. 589 00:27:56,260 --> 00:27:58,860 Ja neviem, čo to robí ešte, ale ja som sľúbil, že vás 590 00:27:58,860 --> 00:28:00,260 , Že bude existovať nakoniec. 591 00:28:00,260 --> 00:28:04,010 A to je dôvod, prečo to line-- v linka 16-- končí bodkočiarkou. 592 00:28:04,010 --> 00:28:05,486 To je nadbytočná zámerné. 593 00:28:05,486 --> 00:28:05,986 Áno? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Ak ste prepojiť knižnicu na to-- oh, dobrá otázka. 596 00:28:14,360 --> 00:28:17,350 Sharp obsahuje súbor hlavičky inklúzia. 597 00:28:17,350 --> 00:28:20,040 Potrebujete, aby bylo-- by takmer vždy na samom vrchole 598 00:28:20,040 --> 00:28:23,270 súboru pre similar-- pre presne rovnaký dôvod, že áno. 599 00:28:23,270 --> 00:28:26,430 Vzhľadom k tomu, v štandardnej IO.H je doslova linka 600 00:28:26,430 --> 00:28:30,560 ako je toto, ale so slovom printf, a s jeho argumenty a jeho návratový typ. 601 00:28:30,560 --> 00:28:33,310 A tak tým, že robí ostrý obsahovať až tu to, čo ste doslova robiť 602 00:28:33,310 --> 00:28:36,380 je kopírovanie a vkladanie obsahu niekoho iného spísal vrchol. 603 00:28:36,380 --> 00:28:39,660 Tým cluing kód do Skutočnosť, že existujú tieto funkcie. 604 00:28:39,660 --> 00:28:40,160 Jo? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Presne tak. 607 00:28:48,260 --> 00:28:51,690 Tak veľmi šikovný a správne riešením by bolo, vieš čo? 608 00:28:51,690 --> 00:28:53,760 Ja neviem, čo prototyp je, ale viem, 609 00:28:53,760 --> 00:28:56,390 keď som pochopil, že C je práve hlúpi a rethinks zhora nadol. 610 00:28:56,390 --> 00:28:57,820 Tak poďme dať to, čo chce. 611 00:28:57,820 --> 00:29:01,650 Poďme znížiť tento kód, vložte ho do top, a teraz stlačte hlavný dole. 612 00:29:01,650 --> 00:29:03,470 Aj to by malo problém vyriešiť. 613 00:29:03,470 --> 00:29:07,409 >> Ale môžete veľmi ľahko prísť s scenár, v ktorom je potrebné volať B, 614 00:29:07,409 --> 00:29:10,075 a možno aj B zavolá späť do A. Tento je niečo, čo nazýva rekurzia, 615 00:29:10,075 --> 00:29:11,370 a vrátime sa k tomu. 616 00:29:11,370 --> 00:29:13,911 A to môže alebo nemusí byť dobrý vec, ale môžete určite 617 00:29:13,911 --> 00:29:15,110 zlomiť toto riešenie. 618 00:29:15,110 --> 00:29:17,690 >> A navyše, ja by som tvrdí, štylisticky, 619 00:29:17,690 --> 00:29:20,760 najmä keď svoje programy stať sa tak dlho a tak dlho, 620 00:29:20,760 --> 00:29:23,064 je to proste super pohodlné aby hlavný hore 621 00:29:23,064 --> 00:29:25,730 pretože je to vec, ktorú väčšina programátori budú sa starať o. 622 00:29:25,730 --> 00:29:28,150 A tak je to trochu čistejšie, pravdepodobne, urobiť to tak, ako 623 00:29:28,150 --> 00:29:30,380 Pôvodne som to urobil s prototypom i 624 00:29:30,380 --> 00:29:33,396 aj keď to vyzerá trochu redundantné na prvý pohľad. 625 00:29:33,396 --> 00:29:33,895 Jo? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Je nám ľúto, môžete to povedať nahlas? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Ak máte zmeniť umiestnenie vykonávanie a prototyp? 630 00:29:49,580 --> 00:29:51,270 Tak to je dobrá otázka. 631 00:29:51,270 --> 00:29:53,780 Ak znovu deklarovať to dole tu, poďme sa pozrieť, čo sa deje. 632 00:29:53,780 --> 00:29:55,530 Takže ak by som to dole tu hovoríš. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Oh, ospravedlňujem sa. 635 00:29:58,360 --> 00:29:58,859 Hlasnejšie? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Ešte hlasnejšie. 638 00:30:04,011 --> 00:30:04,760 Oh, dobrá otázka. 639 00:30:04,760 --> 00:30:05,860 By znehodnotiť funkciu? 640 00:30:05,860 --> 00:30:08,901 Viete, po všetkých tých rokoch, som sa nikdy dať prototyp neskôr. 641 00:30:08,901 --> 00:30:13,810 Takže poďme urobiť, aby funkcie 1 po tom, že. 642 00:30:13,810 --> 00:30:15,279 >> [Mrmle] 643 00:30:15,279 --> 00:30:16,320 David J. Malan: Oh, počkaj. 644 00:30:16,320 --> 00:30:17,944 Stále ešte musíme dať všetko, čo sa hore. 645 00:30:17,944 --> 00:30:21,400 Tak poďme na to tu, keď som pochopiť vašu otázku správne. 646 00:30:21,400 --> 00:30:24,700 Dávam všetko, vrátane prototyp vyššie uvedené hlavné, 647 00:30:24,700 --> 00:30:28,180 ale dávam prototyp pod prevedenie. 648 00:30:28,180 --> 00:30:33,190 >> Takže keď urobím jedno, ja idem späť error-- nepoužívané premennej n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Oh, tu. 651 00:30:37,860 --> 00:30:38,360 Ďakujem vám. 652 00:30:38,360 --> 00:30:39,430 Poďme sa pozrieť, zbavíme to. 653 00:30:39,430 --> 00:30:41,304 To je iná chyba, tak sa poďme ignorovať. 654 00:30:41,304 --> 00:30:43,910 Poďme sa veľmi rýchlo prerobiť to. 655 00:30:43,910 --> 00:30:48,100 >> OK, takže dáta argument, ktorý nebol používa formátovací reťazec 656 00:30:48,100 --> 00:30:52,310 n-- oh, je to preto, Zmenil som sa na to tu. 657 00:30:52,310 --> 00:30:55,885 Dobre vieme, čo je odpoveď bude na-- v poriadku, ideme na to. 658 00:30:55,885 --> 00:31:00,560 Aha, vďaka za pozitívny. 659 00:31:00,560 --> 00:31:03,430 Tak jo, budem opraviť tento kód after-- ignorovať túto konkrétnu chybu 660 00:31:03,430 --> 00:31:08,300 pretože to byl-- to funguje, je odpoveď. 661 00:31:08,300 --> 00:31:11,560 >> Takže to neprepíše to, čo ste práve urobil. 662 00:31:11,560 --> 00:31:14,800 Mám podozrenie, že kompilátor je napísaný takým spôsobom, 663 00:31:14,800 --> 00:31:18,420 že ignoruje prototypu pretože v tele, aby som tak povedal, 664 00:31:18,420 --> 00:31:20,922 z funkcie už bola vykonaná vyššie. 665 00:31:20,922 --> 00:31:23,380 Ja by som skutočne konzultovať manuál prekladača 666 00:31:23,380 --> 00:31:26,171 pochopiť, či existuje nejaký iný implikácie, ale na prvý pohľad 667 00:31:26,171 --> 00:31:29,290 len tým, že sa snaží a experimentovanie, sa zdá, že žiadny vplyv. 668 00:31:29,290 --> 00:31:30,730 Dobrá otázka. 669 00:31:30,730 --> 00:31:33,660 >> Takže poďme vpred teraz, pohybujúce sa od nežiaducich účinkov, ktoré 670 00:31:33,660 --> 00:31:36,660 sú funkcie, ktoré niečo také vizuálne na obrazovke printf, 671 00:31:36,660 --> 00:31:38,090 ale nevracia hodnotu. 672 00:31:38,090 --> 00:31:41,550 A funkcie, ktoré majú návratnosť hodnoty, ako sme práve videli niekoľko. 673 00:31:41,550 --> 00:31:45,350 Už sme videli tento pojem rozsahu, a uvidíme to znova a znova. 674 00:31:45,350 --> 00:31:47,210 Ale teraz znovu, použiť pravidlo 675 00:31:47,210 --> 00:31:51,410 že premenná môže byť použitá iba vnútri najviac nedávno otvorila 676 00:31:51,410 --> 00:31:54,350 a uzavreté zložené zátvorky, ako sme videl v tomto konkrétnom príklade. 677 00:31:54,350 --> 00:31:56,910 >> A ako ste poukázal na to, je ability-- 678 00:31:56,910 --> 00:32:00,040 môžete vyriešiť niektoré z týchto problémov tým, že premennú globálne 679 00:32:00,040 --> 00:32:01,290 na samom vrchole súboru. 680 00:32:01,290 --> 00:32:03,630 Ale takmer vo všetkých prípadoch by sme sa škerí na to, 681 00:32:03,630 --> 00:32:06,170 a dokonca ani ísť do tohto riešenia pre teraz. 682 00:32:06,170 --> 00:32:09,890 Takže teraz, stánok s jedlom je, že premenné majú tento pojem rozsahu. 683 00:32:09,890 --> 00:32:13,430 >> Ale teraz sa poďme pozrieť na ďalšie suchou cestou skutočne hľadá 684 00:32:13,430 --> 00:32:15,810 na niektoré celkom zaujímavé detaily implementácie. 685 00:32:15,810 --> 00:32:17,810 Ako by sme mohli reprezentovať informácie. 686 00:32:17,810 --> 00:32:20,370 A my už sa na to v prvom týždni triedy. 687 00:32:20,370 --> 00:32:23,320 Pri pohľade na binárne súbory, a pripomenúť si z desiatkovej sústave. 688 00:32:23,320 --> 00:32:28,310 >> Ale pamätáte z minulého týždňa, že C má rôzne typy dát a zväzkov viac, 689 00:32:28,310 --> 00:32:30,600 ale najužitočnejšie z nich teraz by mohli byť nasledujúce. 690 00:32:30,600 --> 00:32:36,030 Char, alebo znak, ktorý sa stane byť jeden bajt, alebo ôsmich bitov celkom. 691 00:32:36,030 --> 00:32:40,060 A to znamená, že veľkosť z char je len jeden bajt. 692 00:32:40,060 --> 00:32:45,370 Bajt je osem bitov, tak to znamená, že môžeme predstavovať, ako veľa znakov. 693 00:32:45,370 --> 00:32:47,320 Koľko písmen alebo Symboly na klávesnici 694 00:32:47,320 --> 00:32:49,210 ak máme jeden byte alebo ôsmich bitov. 695 00:32:49,210 --> 00:32:51,546 Spomeňte si na týždeň nula. 696 00:32:51,546 --> 00:32:53,420 Ak máte osem bitov, koľko celkovej hodnoty 697 00:32:53,420 --> 00:32:55,503 môžete reprezentovať s vzory núl a jednotiek? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 One-- viac než to. 700 00:33:00,260 --> 00:33:03,490 Takže 256 príspevkov, ak vás začína počítať od nuly. 701 00:33:03,490 --> 00:33:07,120 Takže ak máte osem bits-- takže ak mali svoje binárne žiarovky tu zase, 702 00:33:07,120 --> 00:33:12,180 by sme mohli zase tie žiarovky na a preč v ktoromkoľvek z 256 unikátnych vzorov. 703 00:33:12,180 --> 00:33:13,640 >> Teraz je to trochu problematické. 704 00:33:13,640 --> 00:33:16,857 Ani nie tak pre angličtinu a Románske jazyky, ale určite 705 00:33:16,857 --> 00:33:19,190 keď sa zaviesť pre Napríklad ázijské jazyky, ktoré 706 00:33:19,190 --> 00:33:22,580 majú ďaleko viac symbolov, než ako 26 písmen abecedy. 707 00:33:22,580 --> 00:33:24,390 Vlastne by sme mohli potrebovať viac ako jeden bajt. 708 00:33:24,390 --> 00:33:28,240 A našťastie v V posledných rokoch sa spoločnosť 709 00:33:28,240 --> 00:33:31,040 Prijaté ďalšie normy, ktoré používajú viac ako jeden bajt na jedno nabitie. 710 00:33:31,040 --> 00:33:34,210 >> Ale teraz v C, predvolené je len jeden bajt alebo osem bitov. 711 00:33:34,210 --> 00:33:38,195 Číslo, zatiaľ, sú štyri bajtov, inak známy ako 32 bitov. 712 00:33:38,195 --> 00:33:41,320 Čo znamená, že to, čo je čo najväčší číslo môžeme reprezentovať pomocou int 713 00:33:41,320 --> 00:33:41,820 zrejme? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 S miliardy. 716 00:33:45,050 --> 00:33:46,760 Takže je to štyri miliardy dávať alebo brať. 717 00:33:46,760 --> 00:33:49,840 2 k 32th moc, keby sme predpokladať žiadne negatívne čísla 718 00:33:49,840 --> 00:33:52,530 a stačí použiť všetky pozitívne čísla, je to štyri miliardy 719 00:33:52,530 --> 00:33:53,730 dávať alebo brať možnosti. 720 00:33:53,730 --> 00:33:57,890 Float, zatiaľ, je iný typ dátového typu v jazyku C. Je to stále číslo, 721 00:33:57,890 --> 00:33:58,990 ale je to reálne číslo. 722 00:33:58,990 --> 00:34:00,660 Niečo s desatinnou čiarkou. 723 00:34:00,660 --> 00:34:03,000 A ukázalo sa, že C tiež používa štyri bajty 724 00:34:03,000 --> 00:34:05,340 predstavujú plávajúce bodové hodnoty. 725 00:34:05,340 --> 00:34:09,420 >> Bohužiaľ, koľko plávajúce bodové hodnoty sú tam vonku vo svete? 726 00:34:09,420 --> 00:34:11,582 Koľko reálne čísla sú tam? 727 00:34:11,582 --> 00:34:13,540 Tam je nekonečný číslo, a keď na to príde 728 00:34:13,540 --> 00:34:15,164 tam je nekonečne veľa celých čísel. 729 00:34:15,164 --> 00:34:18,070 Takže sme už trochu kopať sami dieru tu. 730 00:34:18,070 --> 00:34:21,780 Kedy zrejme v computers-- na najmenej programy napísané v jazyku C na them-- 731 00:34:21,780 --> 00:34:24,110 môže počítať len tak vysoko, ako štyri miliardy dávať alebo brať, 732 00:34:24,110 --> 00:34:26,260 a plávajúcou desatinnou čiarkou hodnoty môže len zdanlivo 733 00:34:26,260 --> 00:34:28,330 nejaké konečné množstvo presnosti. 734 00:34:28,330 --> 00:34:30,810 Iba toľko číslic za ich desatinného miesta. 735 00:34:30,810 --> 00:34:32,822 >> Vzhľadom k tomu, samozrejme, ak máte iba 32 bitov, 736 00:34:32,822 --> 00:34:36,030 Neviem, ako sme ísť o predstavuje skutočnú numbers-- pravdepodobne 737 00:34:36,030 --> 00:34:37,409 s rôznymi typmi vzorov. 738 00:34:37,409 --> 00:34:40,030 Ale je tu určite konečný počet týchto vzorov, 739 00:34:40,030 --> 00:34:41,830 tak aj tu, je to problematické. 740 00:34:41,830 --> 00:34:43,710 >> Teraz môžeme ľahko vyhnúť problému. 741 00:34:43,710 --> 00:34:45,710 Ak nechcete používať plavák, môžete použiť double 742 00:34:45,710 --> 00:34:50,230 v jazyku C, ktorá vám dáva osem bajtov, ktoré je spôsob, ako viac možných vzory núl 743 00:34:50,230 --> 00:34:50,730 a ty. 744 00:34:50,730 --> 00:34:55,199 Ale je to ešte konečný, čo sa deje byť problematické, ak budete písať softvér 745 00:34:55,199 --> 00:34:57,670 pre grafiku alebo fantázie matematické vzorce. 746 00:34:57,670 --> 00:35:00,410 Takže môžete skutočne chcú spočítať väčšie, než je. 747 00:35:00,410 --> 00:35:05,640 Dlhý long-- hlúpo named-- je tiež osem bajtov, alebo 64 bitov 748 00:35:05,640 --> 00:35:10,260 a je dvakrát tak dlhá ako int, a je to na dlhú celočíselnú hodnotu. 749 00:35:10,260 --> 00:35:15,655 >> Fun fact-- ak int je štyri byty, ako dlho je dlho v C zvyčajne? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Aj štyri byty, ale long long je osem bajtov, 752 00:35:21,560 --> 00:35:23,050 a to je z historických dôvodov. 753 00:35:23,050 --> 00:35:26,450 >> Ale stánok s jedlom teraz je len, že dáta 754 00:35:26,450 --> 00:35:29,625 byť zastúpené v computer--, ktorá je fyzické zariadenie s elektrinou, 755 00:35:29,625 --> 00:35:32,190 to je všeobecne riadenie tie nuly a ones-- 756 00:35:32,190 --> 00:35:34,320 s konečnými sumami presnosti. 757 00:35:34,320 --> 00:35:35,620 Tak v čom je problém, a potom? 758 00:35:35,620 --> 00:35:37,480 >> No je tu problém celočíselného pretečeniu. 759 00:35:37,480 --> 00:35:39,780 Nie je to len v C, ale v počítača všeobecne. 760 00:35:39,780 --> 00:35:42,590 Napríklad, ak je toto je bajt stojí bit-- 761 00:35:42,590 --> 00:35:45,120 takže ak je osem bit-- všetko z ktorých je číslo jedna. 762 00:35:45,120 --> 00:35:47,300 Aké číslo je to predstavuje, ak budeme predpokladať, 763 00:35:47,300 --> 00:35:50,730 je to všetky pozitívne hodnoty v binárnej? 764 00:35:50,730 --> 00:35:54,410 >> 255, a to nie je 256, pretože nula je najnižšie číslo. 765 00:35:54,410 --> 00:35:56,760 Takže 255 je najvyšší jeden, ale problém 766 00:35:56,760 --> 00:36:00,330 Predpokladajme, že som chcel, aby zvýšiť túto premennú, ktorá 767 00:36:00,330 --> 00:36:04,030 používa osem bitov celkom keď chcem ju zvyšovať. 768 00:36:04,030 --> 00:36:07,160 >> No, akonáhle som sa pridať jeden až všetky tieto tých, 769 00:36:07,160 --> 00:36:10,500 môžete snáď predstaviť visually-- len ako nesúce jedno použitie decimals-- 770 00:36:10,500 --> 00:36:12,300 niečo deje prúdiť doľava. 771 00:36:12,300 --> 00:36:15,590 A skutočne, keď som pridať číslo kto to, čo sa deje v binárnej 772 00:36:15,590 --> 00:36:17,670 je to, že preteká späť na nulu. 773 00:36:17,670 --> 00:36:21,730 >> Takže ak ste len use-- nie je int, ale jeden bajt počítať celé čísla 774 00:36:21,730 --> 00:36:27,170 v programe, podľa default-- akonáhle sa dostanete na 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 prichádza po 255, čo asi nie je to, čo 776 00:36:32,710 --> 00:36:34,790 užívateľ bude očakávať. 777 00:36:34,790 --> 00:36:39,620 >> Teraz zatiaľ v plávajúcou desatinnou čiarkou svet, Máte tiež podobný problém. 778 00:36:39,620 --> 00:36:42,670 Ani nie tak s najväčšou number-- aj keď je to stále problém. 779 00:36:42,670 --> 00:36:45,360 Ale s množstvom presnosti že môžete reprezentovať. 780 00:36:45,360 --> 00:36:49,490 Takže poďme sa pozrieť na tento príklad Tu tiež od dnešného zdrojového code-- 781 00:36:49,490 --> 00:36:52,070 float-0.c. 782 00:36:52,070 --> 00:36:54,280 >> A všimnite si, že je to super Jednoduchý program, ktorý 783 00:36:54,280 --> 00:36:56,580 by zrejme vytlačiť, akú hodnotu? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Čo si staviť, že to bude tlačiť aj keď tam je trochu novou syntaxou 786 00:37:04,110 --> 00:37:05,540 tu? 787 00:37:05,540 --> 00:37:06,700 Tak dúfajme, že 0.1. 788 00:37:06,700 --> 00:37:10,000 Takže ekvivalent jednu desatinu pretože robím 1 deleno 10. 789 00:37:10,000 --> 00:37:12,430 Ja uloženie odpoveď v premennej s názvom f. 790 00:37:12,430 --> 00:37:15,850 Že premenná je typu float, ktorý je kľúčové slovo, len som navrhol existoval. 791 00:37:15,850 --> 00:37:18,910 >> Sme nevideli predtým, ale to je celkom elegantný spôsob, ako v printf 792 00:37:18,910 --> 00:37:22,110 určiť, koľko číslic ste chcú vidieť po desatinnou čiarkou. 793 00:37:22,110 --> 00:37:25,020 Takže tento zápis znamená len že tu je zástupný symbol. 794 00:37:25,020 --> 00:37:27,900 Je to pre plávajúcou desatinnou čiarkou hodnota, a oh, mimochodom, 795 00:37:27,900 --> 00:37:31,389 ukázať, že s desatinnou čiarkou s jedno číslo za desatinnou čiarkou. 796 00:37:31,389 --> 00:37:33,180 Tak to je číslo platných číslic, 797 00:37:33,180 --> 00:37:34,650 aby som tak povedal, že možno budete chcieť. 798 00:37:34,650 --> 00:37:40,450 >> Tak nechaj ma ísť ďalej a robiť ako plavák-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 a zrejme 1 deleno 10 je 0.0. 800 00:37:46,660 --> 00:37:47,760 A teraz, prečo to je? 801 00:37:47,760 --> 00:37:51,380 >> Tak znovu, je počítač s ma doslova, a napísal som 1 802 00:37:51,380 --> 00:37:56,680 a písal som 10, a hádať, čo je predpokladaný typ dát u týchto dvoch 803 00:37:56,680 --> 00:37:58,440 hodnoty? 804 00:37:58,440 --> 00:38:00,970 Int, je to technicky niečo trochu iné. 805 00:38:00,970 --> 00:38:04,150 Je to zvyčajne dlho, ale je to nakoniec integrálne hodnota. 806 00:38:04,150 --> 00:38:06,030 Nie je hodnota s plávajúcou čiarkou. 807 00:38:06,030 --> 00:38:09,456 >> Čo znamená, že ak je táto je int a to je int, 808 00:38:09,456 --> 00:38:11,830 Problém je, že v počítači nemá schopnosť 809 00:38:11,830 --> 00:38:13,680 dokonca uložiť tento desatinnou čiarkou. 810 00:38:13,680 --> 00:38:16,430 Takže keď urobíte jeden rozdelený od 10 pomocou čísel 811 00:38:16,430 --> 00:38:20,950 ako čitateľa a menovateľ, odpoveď by mala byť 0,1. 812 00:38:20,950 --> 00:38:24,930 Ale pretože computer-- tie sú integers-- 813 00:38:24,930 --> 00:38:27,430 nevie, čo má robiť s 0,1. 814 00:38:27,430 --> 00:38:30,010 >> Takže to, čo je jasne robí? 815 00:38:30,010 --> 00:38:33,120 Je to len hádzanie je preč, a to, čo som videl v konečnom dôsledku 816 00:38:33,120 --> 00:38:38,830 0.0 len preto, že som trval na tom, že printf ukáž mi jedno desatinné miesto. 817 00:38:38,830 --> 00:38:41,740 Ale problém je, že ak deliť celé číslo na celé číslo, 818 00:38:41,740 --> 00:38:44,347 budete get-- podľa definície z C-- celé číslo. 819 00:38:44,347 --> 00:38:46,680 A že to nebude robiť niečo pekné a pohodlne 820 00:38:46,680 --> 00:38:49,040 ako koleso to až do Najbližšie jeden hore alebo dole. 821 00:38:49,040 --> 00:38:51,860 Bude to skrátiť všetko za desatinnou čiarkou. 822 00:38:51,860 --> 00:38:54,030 >> Takže len intuitívne, čo je pravdepodobne opraviť? 823 00:38:54,030 --> 00:38:55,351 Čo je to najjednoduchšie oprava tu? 824 00:38:55,351 --> 00:38:55,850 Jo? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Presne tak. 827 00:39:01,100 --> 00:39:04,200 Prečo sa jednoducho správať ako ty efektívne s plávajúcou desatinnou čiarkou hodnoty 828 00:39:04,200 --> 00:39:05,860 a premenili ich v plavákmi alebo štvorhra. 829 00:39:05,860 --> 00:39:10,500 A teraz keď to urobím, aby plaváky-0, alebo keď som zostaviť plaváky-1, 830 00:39:10,500 --> 00:39:12,570 , Ktorý je totožný s to, čo bolo práve navrhla. 831 00:39:12,570 --> 00:39:16,400 A teraz som to pláva-0, teraz budem mať 0,1. 832 00:39:16,400 --> 00:39:17,234 >> Teraz je to úžasné. 833 00:39:17,234 --> 00:39:19,441 Ale teraz budem robiť niečo trochu iné. 834 00:39:19,441 --> 00:39:22,280 Som zvedavý na to, čo je naozaj deje pod kapotou, 835 00:39:22,280 --> 00:39:26,050 a budem tlačiť sa na 28 desatinných miest. 836 00:39:26,050 --> 00:39:29,730 Chcem naozaj vidieť 0.1000-- infinite-- 837 00:39:29,730 --> 00:39:32,710 [Nepočuteľné] 27 nuly po tej 0,1. 838 00:39:32,710 --> 00:39:34,740 >> No uvidíme, či to je to, čo som naozaj dostanete. 839 00:39:34,740 --> 00:39:39,430 Uistite sa pláva-0 rovnaký súbor. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Poďme sa zamerať na dramatické odpoveď. 842 00:39:44,380 --> 00:39:49,980 Celú tú dobu, čo ste boli myslenie 1 deleno 10 je 10%, alebo 0,1. 843 00:39:49,980 --> 00:39:50,810 To nie. 844 00:39:50,810 --> 00:39:53,210 Aspoň pokiaľ ide Počítač je znepokojený. 845 00:39:53,210 --> 00:39:57,060 >> Teraz why-- OK, to je kompletný lož 1 deleno 10 je 0,1. 846 00:39:57,060 --> 00:39:59,710 Ale to nie je why-- stánok s jedlom dnes. 847 00:39:59,710 --> 00:40:04,010 Tak prečo sa počítač myslieť, Na rozdiel od nás všetkých v miestnosti, 848 00:40:04,010 --> 00:40:06,870 že 1 deleno 10 je v skutočnosti, že blázon hodnota? 849 00:40:06,870 --> 00:40:10,620 Čo je to počítač robí zrejme? 850 00:40:10,620 --> 00:40:12,490 Čo je to? 851 00:40:12,490 --> 00:40:13,785 >> Nie je to pretečeniu, sama o sebe. 852 00:40:13,785 --> 00:40:15,910 Pretečeniu je typicky pri obtekanie okolo hodnoty. 853 00:40:15,910 --> 00:40:18,970 Je to otázka nepresnosti v hodnota s plávajúcou čiarkou 854 00:40:18,970 --> 00:40:22,220 kde máte len 32 alebo možno aj 64 bit. 855 00:40:22,220 --> 00:40:25,230 Ale ak tam je nekonečný počet reálnych numbers-- 856 00:40:25,230 --> 00:40:27,940 čísla s desatinnými miestami a čísla thereafter-- iste 857 00:40:27,940 --> 00:40:29,380 si nemôže predstavovať všetky z nich. 858 00:40:29,380 --> 00:40:32,870 Takže počítač uvedený nám najbližší zápas 859 00:40:32,870 --> 00:40:37,090 na hodnotu, môže predstavovať, že pomocou počet bitov na hodnotu vlastne chcem, 860 00:40:37,090 --> 00:40:38,690 čo je 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Bohužiaľ, ak máte začať robiť matematiku, alebo si 862 00:40:40,685 --> 00:40:44,360 začiatok zahŕňajúce tieto druhy plávajúce bodovej hodnoty vo významných programs-- 863 00:40:44,360 --> 00:40:46,770 finančný softvér, vojenskej software-- čokoľvek 864 00:40:46,770 --> 00:40:49,090 kde je vnímanie asi dosť dôležité. 865 00:40:49,090 --> 00:40:51,520 A začnete pridávať čísla, ako je tento, a začiatok 866 00:40:51,520 --> 00:40:54,050 beží, že softvér s naozaj veľkými vstupmi 867 00:40:54,050 --> 00:40:56,890 alebo mnoho hodín alebo šarží dní alebo veľa rokov, 868 00:40:56,890 --> 00:41:01,060 Tieto malinké chyby Iste možno pridať až v priebehu času. 869 00:41:01,060 --> 00:41:04,252 >> Teraz ako stranou, ak ste niekedy Videl Superman 3 alebo kancelárske priestory 870 00:41:04,252 --> 00:41:05,960 a vy by ste mohli vyvolať ako ti chlapci ukradli 871 00:41:05,960 --> 00:41:08,668 veľa peňazí zo svojho počítača pomocou plávajúce bodovej hodnoty 872 00:41:08,668 --> 00:41:11,290 a sčítaním malý Zvyšky, dúfajme, že film 873 00:41:11,290 --> 00:41:12,390 teraz dáva väčší zmysel. 874 00:41:12,390 --> 00:41:14,930 To je to, čo bolo zmieňovať sa v tom filme. 875 00:41:14,930 --> 00:41:16,710 Skutočnosť, že väčšina spoločnosti nebude vyzerať 876 00:41:16,710 --> 00:41:18,600 Po určitom počte desatinných miest, 877 00:41:18,600 --> 00:41:20,009 ale to sú zlomky centov. 878 00:41:20,009 --> 00:41:22,550 Takže začnete pridávať ich do, môžete začať robiť veľa peňazí 879 00:41:22,550 --> 00:41:23,424 na váš bankový účet. 880 00:41:23,424 --> 00:41:25,160 Tak to je Kancelárske priestory vysvetlil. 881 00:41:25,160 --> 00:41:28,220 >> Teraz bohužiaľ mimo Kancelárske priestory, tam 882 00:41:28,220 --> 00:41:31,794 sú niektoré oprávnene trápi a významné dopady 883 00:41:31,794 --> 00:41:33,710 z týchto druhov podkladové rozhodnutia dizajn, 884 00:41:33,710 --> 00:41:35,990 a naozaj jeden z dôvodov, používame C v priebehu 885 00:41:35,990 --> 00:41:39,640 je tak, že máte skutočne tento dôvod up pochopenie toho, ako počítače pracujú, 886 00:41:39,640 --> 00:41:42,440 ako softvér funguje, a nie brať nič ako samozrejmosť. 887 00:41:42,440 --> 00:41:45,820 >> A skutočne bohužiaľ, aj keď že základné porozumenie, 888 00:41:45,820 --> 00:41:47,370 my ľudia robia chyby. 889 00:41:47,370 --> 00:41:51,310 A to, čo si myslel, som, že podeliť sa to osem minút video tu prijatá 890 00:41:51,310 --> 00:41:56,980 z epizódy Divy, ktoré je vzdelávacie reláciu o tom, ako veci fungujú 891 00:41:56,980 --> 00:42:00,370 že maľuje dva obrázky kedy nesprávne použitie 892 00:42:00,370 --> 00:42:02,540 a porozumenie plávajúce čiarkou 893 00:42:02,540 --> 00:42:05,610 viedli k niektorým významným nešťastné výsledky. 894 00:42:05,610 --> 00:42:06,363 Poďme sa pozrieť. 895 00:42:06,363 --> 00:42:07,029 [PREHRÁVANIE] 896 00:42:07,029 --> 00:42:11,290 -My Teraz vrátiť k "inžinierstvo Katastrofy "na Divy. 897 00:42:11,290 --> 00:42:12,940 Počítača. 898 00:42:12,940 --> 00:42:15,580 Všetci sme si zvykli na často nepríjemné problémy, ktoré 899 00:42:15,580 --> 00:42:20,960 Dostal sa them-- chyby, vírusy a Softvér glitches-- pre malé ceny 900 00:42:20,960 --> 00:42:23,100 zaplatiť za pohodlie. 901 00:42:23,100 --> 00:42:27,770 Ale v high-tech a vysokou rýchlosťou vojenské a vesmírny program aplikácie, 902 00:42:27,770 --> 00:42:32,780 najmenší problém môže sa zväčší do katastrofy. 903 00:42:32,780 --> 00:42:38,880 >> Dňa 04.6.1996 spracovali vedci začať bezpilotné Ariane 5 rakety. 904 00:42:38,880 --> 00:42:41,190 To niesol vedecké satelity navrhnutý 905 00:42:41,190 --> 00:42:44,570 stanoviť presne, ako Zemské magnetické pole interaguje 906 00:42:44,570 --> 00:42:47,380 so solárnymi vetry. 907 00:42:47,380 --> 00:42:50,580 Raketa bola postavená na Európska kozmická agentúra, 908 00:42:50,580 --> 00:42:54,400 a zdvihol sa od svojho zariadenia na pobreží Francúzskej Guyany. 909 00:42:54,400 --> 00:42:57,520 >> -na Asi 37 sekúnd do rokov, sa prvýkrát 910 00:42:57,520 --> 00:42:59,070 Všimol niečo zle. 911 00:42:59,070 --> 00:43:02,240 Že sa trysky sa otáčania takým spôsobom, že by sa mal naozaj nie. 912 00:43:02,240 --> 00:43:06,550 Okolo 40 sekúnd do letu, jasne vozidlo bolo v ťažkostiach, 913 00:43:06,550 --> 00:43:08,820 a to je, keď oni robili rozhodnutie o jeho zničenie. 914 00:43:08,820 --> 00:43:12,370 Bezpečnostný dôstojník rozsah, s obrovské čreva, stlačil tlačidlo 915 00:43:12,370 --> 00:43:18,030 a vyhodil raketu pred tým, než mohol byť nebezpečné pre verejnú bezpečnosť. 916 00:43:18,030 --> 00:43:21,010 >> Toto bola panna plavba Ariane 5, 917 00:43:21,010 --> 00:43:23,920 a jeho zničenie sa miesto, pretože vady 918 00:43:23,920 --> 00:43:25,932 vložené do softvéru rakety. 919 00:43:25,932 --> 00:43:27,640 -The Problém na Ariane bolo, že 920 00:43:27,640 --> 00:43:30,500 bolo číslo, ktoré vyžaduje 64 bitov na vyjadrenie, 921 00:43:30,500 --> 00:43:33,560 a chceli previesť je na 16-bitové číslo. 922 00:43:33,560 --> 00:43:36,820 Predpokladali, že počet sa nikdy nebude moc veľký. 923 00:43:36,820 --> 00:43:40,940 Že väčšina z týchto číslic v 64-bitové číslo bolo nulové. 924 00:43:40,940 --> 00:43:42,450 Sa mýlili. 925 00:43:42,450 --> 00:43:45,000 >> -The Neschopnosť jedného softvér prijať 926 00:43:45,000 --> 00:43:49,460 druh číslo generované iný bol pri koreni zlyhania. 927 00:43:49,460 --> 00:43:54,260 Vývoj softvéru sa stala veľmi nákladné súčasťou novej technológie. 928 00:43:54,260 --> 00:43:57,060 Ariane 4 Raketa mala bola veľmi úspešná. 929 00:43:57,060 --> 00:44:01,600 Toľko softvéru vytvoreného pre bola tiež použitá v Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -The Základným problémom bolo to, že Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Bola faster-- zrýchlil rýchlejšie, a softvér sa neúčtuje za to. 932 00:44:11,200 --> 00:44:14,910 >> -The Zničenie rakety Bola to obrovská finančná katastrofa. 933 00:44:14,910 --> 00:44:18,630 Všetko kvôli chybe minút softvéru. 934 00:44:18,630 --> 00:44:21,160 Ale to nebol prvý problémy konverzie dát časovej 935 00:44:21,160 --> 00:44:24,770 sužoval modernej raketovej techniky. 936 00:44:24,770 --> 00:44:28,020 >> -V 1991 so začatím z prvej vojny v Perzskom zálive, 937 00:44:28,020 --> 00:44:30,540 Patriot raketa zažil podobný typ 938 00:44:30,540 --> 00:44:32,465 problému konverzie číslo. 939 00:44:32,465 --> 00:44:36,760 A ako výsledok 28 lidé-- 28 Americkí soldiers-- bolo zabitých, 940 00:44:36,760 --> 00:44:39,010 a asi sto ďalších zranených. 941 00:44:39,010 --> 00:44:42,830 Keď Patriot, ktorý mal na ochranu proti prichádzajúce pláva, 942 00:44:42,830 --> 00:44:45,780 nedokázal vystreliť raketu. 943 00:44:45,780 --> 00:44:51,610 >> Kedy Irak napadol Kuvajt, a Ameriku začala Púštna búrka na začiatku roku 1991, 944 00:44:51,610 --> 00:44:55,720 Patriot raketové batérie boli rozmiestnené k ochrane Saudskej Arábie a Izrael 945 00:44:55,720 --> 00:44:59,180 od irackých Scud raketových útokov. 946 00:44:59,180 --> 00:45:03,080 Patriot je stredného doletu US povrch-k-vysielať systém 947 00:45:03,080 --> 00:45:06,530 vyrábané spoločnosťou Raytheon. 948 00:45:06,530 --> 00:45:09,500 >> -veľkosť Patriot Interceptor itself-- 949 00:45:09,500 --> 00:45:14,705 Je to o približne 20 metrov dlhá, a váži asi 2.000 libier. 950 00:45:14,705 --> 00:45:19,090 A to so sebou nesie bojovú hlavicu asi, Myslím, že to je zhruba 150 libier. 951 00:45:19,090 --> 00:45:23,880 A hlavica je sám o sebe vysoko výbušný, ktorý 952 00:45:23,880 --> 00:45:26,700 má fragmenty okolo neho. 953 00:45:26,700 --> 00:45:31,630 Takže puzdro hlavica je navrhnuté tak, aby konala ako brokovnice. 954 00:45:31,630 --> 00:45:34,040 >> -The Rakety sú vykonávané štyri kontajnera, 955 00:45:34,040 --> 00:45:37,170 a sú prepravované na návese. 956 00:45:37,170 --> 00:45:44,880 >> -The Patriot Protiraketový systém siaha najmenej 20 rokov. 957 00:45:44,880 --> 00:45:48,380 Pôvodne bol vyvinutý ako protilietadlová raketová 958 00:45:48,380 --> 00:45:50,810 zostreliť nepriateľské lietadlá. 959 00:45:50,810 --> 00:45:54,410 V prvej vojne v Perzskom zálive keď tá vojna prišla, 960 00:45:54,410 --> 00:45:59,650 Armáda chcela používať to, aby zostreliť pláva, nie lietadiel. 961 00:45:59,650 --> 00:46:03,580 Iracké letectvo bolo nie je tak veľký problém, 962 00:46:03,580 --> 00:46:06,590 ale armáda bola starosti pláva. 963 00:46:06,590 --> 00:46:10,120 A tak sa snažili upgrade Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Nepriateľa raketa jede Mach 5 965 00:46:12,740 --> 00:46:15,670 sa bude dosť náročné. 966 00:46:15,670 --> 00:46:18,440 Ale keď Patriot bol behave do prevádzky, 967 00:46:18,440 --> 00:46:22,580 armáda nebola vedomá Iracký zmena, ktorá 968 00:46:22,580 --> 00:46:25,880 z ich Pláva takmer nemožné nej. 969 00:46:25,880 --> 00:46:30,690 >> Čo sa stalo je, že pláva prichádzali boli nestabilné. 970 00:46:30,690 --> 00:46:32,000 Boli vratký. 971 00:46:32,000 --> 00:46:37,210 Dôvodom bola Iraqis-- za účelom získania 600 km z 972 00:46:37,210 --> 00:46:41,680 na 300 kilometrov rozsah missile-- vzal váhu z prednej hlavice, 973 00:46:41,680 --> 00:46:43,340 a robil hlavice ľahší. 974 00:46:43,340 --> 00:46:48,490 Takže teraz Patriot sa snaží prísť na Scud, a väčšina z time-- 975 00:46:48,490 --> 00:46:52,880 Drvivá väčšina time-- by to proste lietať plávať. 976 00:46:52,880 --> 00:46:57,120 >> -Akonáhle Prevádzkovateľov Patriot systému si uvedomil, že Patriot minul svoj cieľ, 977 00:46:57,120 --> 00:47:01,630 oni odpálili Patriot v hlavici aby sa zabránilo možným nehodám prípade, že 978 00:47:01,630 --> 00:47:04,440 mala dovolené sa dostať na zem. 979 00:47:04,440 --> 00:47:08,700 >> To bolo to, čo väčšina ľudí videla ako veľké ohnivé gule na oblohe, 980 00:47:08,700 --> 00:47:14,180 a nepochopený ako zachytí Scud hlavíc. 981 00:47:14,180 --> 00:47:18,020 >> -Although V nočnej oblohe, Patriots Zdalo sa, že úspešne ničiť 982 00:47:18,020 --> 00:47:23,280 Pláva, na zahranie by mohlo byť žiadna chyba o jeho výkone. 983 00:47:23,280 --> 00:47:27,930 Tam radarový systém Patriot stratil na prichádzajúce Scud 984 00:47:27,930 --> 00:47:30,260 a kvôli nikdy zahájená na softvérové ​​chyby. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Boli to Izraelčania, ktorí ako prví objavili , Že čím dlhšia je systém bol na, 987 00:47:38,880 --> 00:47:41,130 väčší časový rozdiel sa stala. 988 00:47:41,130 --> 00:47:44,770 Vzhľadom k hodinami vloženej v počítači v systéme. 989 00:47:44,770 --> 00:47:48,190 >> -Asi Dva týždne pred tragédie v Dhahran, 990 00:47:48,190 --> 00:47:50,720 Izraelčania údajne Ministerstvo obrany 991 00:47:50,720 --> 00:47:52,410 , Že systém stráca čas. 992 00:47:52,410 --> 00:47:54,410 Po asi osem hodín chodu, oni si všimli 993 00:47:54,410 --> 00:47:57,690 že systém je stále znateľne menej presné. 994 00:47:57,690 --> 00:48:01,850 Ministerstvo obrany odpovedal tým, že rozprávanie všetkých batérií Patriot 995 00:48:01,850 --> 00:48:04,800 nenechať systémy na dlhú dobu. 996 00:48:04,800 --> 00:48:06,980 Oni nikdy nepovedal, čo dávno bolo. 997 00:48:06,980 --> 00:48:09,140 8 hodín, 10 hodín, tisíce hodín. 998 00:48:09,140 --> 00:48:11,300 Nikto nevedel. 999 00:48:11,300 --> 00:48:13,320 >> -The Patriot batérie umiestnený v kasárňach 1000 00:48:13,320 --> 00:48:18,310 na zahranie a jeho chybná interné hodiny bol na viac ako 100 hodín 1001 00:48:18,310 --> 00:48:21,520 v noci 25. februára. 1002 00:48:21,520 --> 00:48:25,792 >> -je Sledovať čas s presnosťou asi desatina sekundy. 1003 00:48:25,792 --> 00:48:27,950 Teraz desatiny sekundy je zaujímavé číslo 1004 00:48:27,950 --> 00:48:31,850 pretože nemôže byť vyjadrená v binárnom presne, čo 1005 00:48:31,850 --> 00:48:36,500 znamená, že nemôže byť vyjadrený presne v každom modernom digitálnom počítači. 1006 00:48:36,500 --> 00:48:41,070 Je ťažké tomu uveriť, ale použiť ako príklad. 1007 00:48:41,070 --> 00:48:43,420 >> Vezmime číslo tretina. 1008 00:48:43,420 --> 00:48:47,330 Jedna tretina nemôže byť vyjadrené v desiatkovej sústave presne. 1009 00:48:47,330 --> 00:48:52,060 Jedna tretina je 0,333 deje na nekonečno. 1010 00:48:52,060 --> 00:48:56,420 Neexistuje žiadny spôsob, ako to urobiť, aby sa absolútna presnosť v desiatkovej sústave. 1011 00:48:56,420 --> 00:48:59,530 To je presne ten druh problému ktoré sa stalo v Patriot. 1012 00:48:59,530 --> 00:49:04,040 Čím dlhšia je systém bežal, horšie sa stal time error. 1013 00:49:04,040 --> 00:49:08,840 >> -po 100 hodinách prevádzky, Chyba v tej dobe bol len asi tretina 1014 00:49:08,840 --> 00:49:10,440 sekundy. 1015 00:49:10,440 --> 00:49:14,150 Ale pokiaľ ide o zameranie raketa jede Mach 5, 1016 00:49:14,150 --> 00:49:18,560 to viedlo k sledovaniu chyba viac ako 600 metrov. 1017 00:49:18,560 --> 00:49:21,870 Bolo by fatálna chyba pre vojakov v zahrani. 1018 00:49:21,870 --> 00:49:28,455 >> Čo sa stalo so Scud štart bol zistená pomocou satelitov včasného varovania, 1019 00:49:28,455 --> 00:49:32,710 a vedeli Scud sa blíži v ich všeobecnom smere. 1020 00:49:32,710 --> 00:49:35,150 Nevedeli, kde to prichádza. 1021 00:49:35,150 --> 00:49:38,210 Bolo teraz na radare súčasť systému Patriot 1022 00:49:38,210 --> 00:49:43,150 brániť zahraní nájsť a udržať dráha prichádzajúce nepriateľské rakety. 1023 00:49:43,150 --> 00:49:44,561 >> -The Radar bol veľmi šikovný. 1024 00:49:44,561 --> 00:49:46,560 To by v skutočnosti sledovať pozície Scud 1025 00:49:46,560 --> 00:49:48,930 a predvídať, kde to asi bude 1026 00:49:48,930 --> 00:49:51,380 nabudúce radar poslal pulz von. 1027 00:49:51,380 --> 00:49:53,040 To sa nazýva rozsah brána. 1028 00:49:53,040 --> 00:49:57,620 >> -Potom Akonáhle Patriot rozhodne dosť času má 1029 00:49:57,620 --> 00:50:02,400 prešiel sa vrátiť a skontrolovať ďalšie miesto pre tento detekovaným objektom 1030 00:50:02,400 --> 00:50:03,550 sa vracia. 1031 00:50:03,550 --> 00:50:07,820 Takže keď sa vrátil do zlej miesto, to potom nevidí žiadny objekt. 1032 00:50:07,820 --> 00:50:10,360 A rozhodne, že neexistuje žiadny objekt. 1033 00:50:10,360 --> 00:50:13,630 To bolo falošné detekcie a to klesne stopu. 1034 00:50:13,630 --> 00:50:16,970 >> -The Prichádzajúce Scud zmizol z obrazovky radaru, 1035 00:50:16,970 --> 00:50:20,200 a sekúnd neskôr ho narazila do kasární. 1036 00:50:20,200 --> 00:50:22,570 Scud zabil 28. 1037 00:50:22,570 --> 00:50:26,110 To bolo posledné, kto vystrelil počas prvej vojny v Perzskom zálive. 1038 00:50:26,110 --> 00:50:31,920 Je tragické, že aktualizovaný softvér prišiel za úsvitu nasledujúceho dňa. 1039 00:50:31,920 --> 00:50:34,870 Softvér vada mala bolo pevné, zatváracie 1040 00:50:34,870 --> 00:50:39,150 jedna kapitola v problémovej História Patriot rakety. 1041 00:50:39,150 --> 00:50:40,030 >> [END Videoprehrávanie] 1042 00:50:40,030 --> 00:50:41,488 >> David J. Malan: To je pre CS50. 1043 00:50:41,488 --> 00:50:42,820 Uvidíme sa v stredu. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [Prehrávanie hudby] 1046 00:50:50,370 --> 00:54:23,446