1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [Přehrávání hudby] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 David J. Malan: Dobře. 5 00:00:12,660 --> 00:00:15,590 To je CS50, a to je start dvou týdnů. 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, samozřejmě, je chyba v programu, 8 00:00:20,974 --> 00:00:22,890 a budete mít velmi obeznámeni s touto koncepcí 9 00:00:22,890 --> 00:00:26,050 pokud jste nikdy programovat před. pset0 a teď pset1. 10 00:00:26,050 --> 00:00:29,280 Ale uvažujme něco trochu jednoduchý na prvním místě. 11 00:00:29,280 --> 00:00:32,189 Tento program zde, že jsem hodil dohromady v předem 12 00:00:32,189 --> 00:00:37,280 a tvrdím, že by to mělo tisknout 10 hvězdy na obrazovce pomocí printf, 13 00:00:37,280 --> 00:00:41,020 ale je to zřejmě kočárek nějakým způsobem. 14 00:00:41,020 --> 00:00:45,370 >> Vzhledem k tomu, že specifikace, které že by se měla vytisknout 10 hvězd, 15 00:00:45,370 --> 00:00:50,230 ale to není zřejmě, co byste 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 co 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ýborně. 22 00:01:10,410 --> 00:01:13,930 Tak jsme zadali počáteční hodnota nula pro i, 23 00:01:13,930 --> 00:01:18,399 a my jsme zadali n hodnotu 10, ale jsme použili menší než nebo rovnající se. 24 00:01:18,399 --> 00:01:21,190 A důvodem, že se jedná dva postavy a ne jen jeden symbol, 25 00:01:21,190 --> 00:01:22,630 jako v matematické knize, je to, že nemáte 26 00:01:22,630 --> 00:01:24,880 způsob, jak vyjádřit jeden znak ekvivalent. 27 00:01:24,880 --> 00:01:28,450 >> Takže to znamená, že méně než, ale pokud začnete počítat od nuly, 28 00:01:28,450 --> 00:01:31,690 ale počítat celou cestu vzhůru a rovna 10, 29 00:01:31,690 --> 00:01:34,170 jste samozřejmě bude počet 11 věcí celkem. 30 00:01:34,170 --> 00:01:35,900 A tak budete tisknout 11 hvězd. 31 00:01:35,900 --> 00:01:37,990 Takže to, co by mohlo být 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čí nastavit nižší než nebo rovna právě být menší než, 34 00:01:43,980 --> 00:01:46,250 a tam, tvrdím, možná jiné řešení, také. 35 00:01:46,250 --> 00:01:47,210 Co by mohlo ještě udělat? 36 00:01:47,210 --> 00:01:48,590 Jo? 37 00:01:48,590 --> 00:01:53,660 >> Takže začít rovnající to jedno, a opustit menší než nebo rovnající se. 38 00:01:53,660 --> 00:01:56,187 A upřímně řečeno, já bych tvrdit, , že pro typické člověka, 39 00:01:56,187 --> 00:01:57,770 to je pravděpodobně jednodušší. 40 00:01:57,770 --> 00:02:00,280 Začněte počítat od 1 a počítat až deset. 41 00:02:00,280 --> 00:02:01,690 V podstatě to, co máte na mysli. 42 00:02:01,690 --> 00:02:04,010 >> Ale realita je programování, jak jsme viděli, 43 00:02:04,010 --> 00:02:07,598 počítačoví odborníci a programátoři obecně se začíná počítat od nuly. 44 00:02:07,598 --> 00:02:09,389 A tak to je v pořádku, jakmile si na to zvyknout. 45 00:02:09,389 --> 00:02:12,640 Váš stav bude obvykle něco jako nižší než. 46 00:02:12,640 --> 00:02:14,910 Takže potom logicky chyba, že jsme mohli teď 47 00:02:14,910 --> 00:02:17,990 opravit a nakonec překompilovat to a dostat jen 10. 48 00:02:17,990 --> 00:02:19,610 >> Tak, jak o této chybě zde? 49 00:02:19,610 --> 00:02:24,200 Zde opět tvrdím, že mám Cílem tisku 10 stars-- 50 00:02:24,200 --> 00:02:28,140 jeden na řádek tentokrát, ale není tomu tak. 51 00:02:28,140 --> 00:02:30,940 Než jsme se navrhnout co oprava je to, co dělá tento 52 00:02:30,940 --> 00:02:34,640 tisknout vizuálně kdybych sestavit a spustit 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 >> Hvězda. 56 00:02:38,860 --> 00:02:41,690 Takže všechny hvězdy na stejném řádku je to, co jsem slyšel, 57 00:02:41,690 --> 00:02:43,391 a poté znak nového řádku. 58 00:02:43,391 --> 00:02:44,140 Takže pojďme to zkusit. 59 00:02:44,140 --> 00:02:48,710 Tak, aby buggy-1, zadejte, a vidím příkaz zvonění 60 00:02:48,710 --> 00:02:50,090 že jsme o tom mluvili minule. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, a opravdu vidím všech 10 hvězd na stejném řádku, i když tvrdím, 62 00:02:55,180 --> 00:02:58,690 v mém specifikaci jen komentář na vrcholu kód, který jsem měl v úmyslu udělat jeden na 63 00:02:58,690 --> 00:02:59,230 linka. 64 00:02:59,230 --> 00:03:00,580 Ale to vypadá dobře. 65 00:03:00,580 --> 00:03:04,620 >> Nyní linka 15 to vypadá, že jsem tisk hvězdu, a pak linka 16 66 00:03:04,620 --> 00:03:06,620 vypadá to, že jsem tisk znak nového řádku, 67 00:03:06,620 --> 00:03:09,560 a oni jsou oba tak odsazeny Jsem uvnitř smyčky jasně. 68 00:03:09,560 --> 00:03:13,610 Takže bych neměl dělat hvězdu, nová linka, hvězda, nový řádek, hvězda, nový řádek? 69 00:03:13,610 --> 00:03:14,110 Ano? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Ano, na rozdíl od jazyka jako Python, pokud jste obeznámeni, 72 00:03:21,240 --> 00:03:23,540 odsazení není tom, k počítači. 73 00:03:23,540 --> 00:03:25,280 To záleží pouze na člověka. 74 00:03:25,280 --> 00:03:29,860 Takže zatímco tady jsem vymyslel linky 15 a 16--, že vypadá krásně, 75 00:03:29,860 --> 00:03:31,330 ale počítač nestará. 76 00:03:31,330 --> 00:03:34,640 Počítač se stará o ve skutečnosti má složené závorky 77 00:03:34,640 --> 00:03:36,310 kolem těchto řádků kódu. 78 00:03:36,310 --> 00:03:39,520 >> Takže to je to clear-- stejně jako v Scratch-- že tyto dva řádky kódu 79 00:03:39,520 --> 00:03:40,450 by měl být proveden. 80 00:03:40,450 --> 00:03:44,390 Jako jeden z těch žlutých Scratch puzzle kusy znovu a znovu a znovu. 81 00:03:44,390 --> 00:03:50,920 >> Takže teď, když jsem znovu spustit tento program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Mám chybu teď. 83 00:03:51,770 --> 00:03:54,212 Co jsem zapomněl udělat? 84 00:03:54,212 --> 00:03:55,420 Jo, tak jsem se zkompilovat. 85 00:03:55,420 --> 00:03:56,740 Tak, aby buggy-2. 86 00:03:56,740 --> 00:03:59,840 Žádný takový soubor, protože jsem neměl vlastně sestavit druhou verzi. 87 00:03:59,840 --> 00:04:04,860 Takže teď zajímavé nehlášené proměnná-- ne 2. 88 00:04:04,860 --> 00:04:05,510 Děláme 1. 89 00:04:05,510 --> 00:04:11,050 Udělat buggy-1-- ./buggy-1-- a nyní každý z nich je na stejném řádku. 90 00:04:11,050 --> 00:04:13,880 >> Nyní je výjimka to má nárok můj 91 00:04:13,880 --> 00:04:15,520 že je třeba tyto složené závorky. 92 00:04:15,520 --> 00:04:20,160 Kdy je vlastně OK-- pokud jste Všiml v sekci nebo textbooks-- 93 00:04:20,160 --> 00:04:22,130 vynechat složené závorky? 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 >> Přesně tak. 97 00:04:26,870 --> 00:04:28,940 Když tam je jen jeden řádek kódu, který vám 98 00:04:28,940 --> 00:04:32,830 chtěl být spojován s smyčka jako v našem prvním příkladu. 99 00:04:32,830 --> 00:04:36,380 Je naprosto v pořádku vynechat složené závorky 100 00:04:36,380 --> 00:04:40,310 stejně jako druh pohodlí od kompilátor pro 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 Bylo by to být považováno za chybu styl? 105 00:04:45,500 --> 00:04:49,340 Rádi bychom promote-- jako CS50 stylu průvodce, URL, pro které 106 00:04:49,340 --> 00:04:51,926 je pset1--, že vždy používat složené závorky. 107 00:04:51,926 --> 00:04:53,550 Jistě, pokud jste k programování nového. 108 00:04:53,550 --> 00:04:56,800 Realita je taková, že nejsme ti zakázat 109 00:04:56,800 --> 00:04:58,680 v tom tyto vymoženosti. 110 00:04:58,680 --> 00:05:00,846 Ale pokud jste jen na to, do swingu věcí, 111 00:05:00,846 --> 00:05:04,020 naprosto stačí vždy kudrnaté šle, až se dostanete na kloub. 112 00:05:04,020 --> 00:05:04,640 Dobrá otázka. 113 00:05:04,640 --> 00:05:05,320 >> V pořádku. 114 00:05:05,320 --> 00:05:07,660 Takže to pak byla chyba. 115 00:05:07,660 --> 00:05:09,190 Alespoň v něčem docela jednoduché. 116 00:05:09,190 --> 00:05:11,260 A přesto byste si mohli myslet to je poměrně primitivní, že jo? 117 00:05:11,260 --> 00:05:13,635 To je něco jako prvního týdne pohledu na jazyk 118 00:05:13,635 --> 00:05:14,890 rád, vidět své chyby v něm. 119 00:05:14,890 --> 00:05:17,250 Ale realita se jedná o skutečně reprezentativní 120 00:05:17,250 --> 00:05:20,310 některých docela děsivé problémy které mohou nastat v reálném světě. 121 00:05:20,310 --> 00:05:23,530 >> Takže někteří z vás možná pamatujete pokud budete postupovat podle tech novinky, 122 00:05:23,530 --> 00:05:25,740 nebo dokonce chytil vítr to v únoru 123 00:05:25,740 --> 00:05:29,434 v posledním roce, že Apple měl udělal trochu chybu v obou iOS, 124 00:05:29,434 --> 00:05:31,350 operační systém jejich telefony, a také 125 00:05:31,350 --> 00:05:34,220 Mac OS, operační systém na svých stolních a přenosných počítačů. 126 00:05:34,220 --> 00:05:36,480 A viděla jste takové titulky jako to. 127 00:05:36,480 --> 00:05:41,120 A poté, Apple slíbil opravit tuto chybu, 128 00:05:41,120 --> 00:05:45,950 a velmi rychle udělal opravit v iOS, ale pak se nakonec opravili v Mac OS 129 00:05:45,950 --> 00:05:46,810 stejně. 130 00:05:46,810 --> 00:05:50,370 >> Nyní žádný z těchto titulků sám opravdu odhalit, co je základní problém byl, 131 00:05:50,370 --> 00:05:55,640 ale chyba byla nakonec snížena na chyba v SSL, Secure Sockets Layer. 132 00:05:55,640 --> 00:05:57,390 A dlouhý příběh krátký, to je software 133 00:05:57,390 --> 00:06:01,030 že naše prohlížeče a další Software slouží k čemu? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Kdybych řekl, že SSL je zapojen, když vás 136 00:06:06,860 --> 00:06:13,920 navštívit adresu URL, která začíná s HTTPS, co pak může SSL souviset? 137 00:06:13,920 --> 00:06:14,580 Šifrování. 138 00:06:14,580 --> 00:06:16,470 Takže budeme mluvit o to v nejbližších dnech. 139 00:06:16,470 --> 00:06:18,750 Šifrování, umění kódování informace. 140 00:06:18,750 --> 00:06:22,200 >> Ale dlouhý příběh krátký, Apple před časem udělal chybu 141 00:06:22,200 --> 00:06:25,970 při jejich provádění SSL, je software, který nakonec implementuje 142 00:06:25,970 --> 00:06:30,120 URL, jako je HTTPS nebo max Připojení tam taky. 143 00:06:30,120 --> 00:06:32,850 Výsledkem je, že vaše zapojení by mohlo potenciálně 144 00:06:32,850 --> 00:06:33,920 být zachyceny. 145 00:06:33,920 --> 00:06:37,130 A vaše připojení bylo ne nutně šifrována 146 00:06:37,130 --> 00:06:40,350 pokud byste měli nějaký špatný člověk mezi vy a webové stránky cíl, který 147 00:06:40,350 --> 00:06:42,170 věděl, jak využít to. 148 00:06:42,170 --> 00:06:45,090 >> Nyní Apple nakonec vyslán Oprava tohoto konečně, 149 00:06:45,090 --> 00:06:46,920 a popis jejich oprava byla tato. 150 00:06:46,920 --> 00:06:49,878 Bezpečná doprava, nepodařilo se ověřit pravost spojení. 151 00:06:49,878 --> 00:06:52,920 Problém byl vyřešen tím, obnovit chybějící validační kroky. 152 00:06:52,920 --> 00:06:57,250 >> Tak to je velmi ruka zvlněná vysvětlení prostě jen tím, že jsme se podělal. 153 00:06:57,250 --> 00:07:00,920 Tam je doslova jedna řádek kódu, který byl kočárek 154 00:07:00,920 --> 00:07:05,130 při jejich provádění SSL a pokud jste online a hledat pro tento 155 00:07:05,130 --> 00:07:07,210 můžete skutečně najít původní zdrojový kód. 156 00:07:07,210 --> 00:07:11,960 Například, to je snímek obrazovky jen část z poměrně velkého souboru, 157 00:07:11,960 --> 00:07:15,965 ale to je zřejmě funkce nazývá SSL ověřit znak serveru výměnu klíčů. 158 00:07:15,965 --> 00:07:17,840 A to trvá spoustu argumenty a vstupy. 159 00:07:17,840 --> 00:07:20,298 A my se budeme soustředit moc tam markantů, 160 00:07:20,298 --> 00:07:24,390 ale pokud se soustředíte na kód uvnitř té nejvyšší function-- LET'S 161 00:07:24,390 --> 00:07:25,590 přiblížit na to. 162 00:07:25,590 --> 00:07:28,140 Možná už tuší co chyba může 163 00:07:28,140 --> 00:07:31,230 být, i když nemáte tušení, v konečném důsledku to, co hledáte na. 164 00:07:31,230 --> 00:07:35,924 Tam je trochu anomálie tady, což je to, co? 165 00:07:35,924 --> 00:07:38,940 >> Jo, nemám opravdu rád pohled ze dvou GOTO nezdaří. 166 00:07:38,940 --> 00:07:42,060 Upřímně řečeno, já opravdu nevím, co goto selhání prostředky, ale s dvěma z nich 167 00:07:42,060 --> 00:07:42,810 zády k sobě. 168 00:07:42,810 --> 00:07:45,290 To mě jen tak tře intelektuálně špatně, 169 00:07:45,290 --> 00:07:48,910 a samozřejmě když jsme se zaměřit na jen ty linky, to je C. 170 00:07:48,910 --> 00:07:52,220 >> Takže hodně Apple kódu je sám napsán v jazyce C, 171 00:07:52,220 --> 00:07:55,780 a to zřejmě je opravdu equivalent-- 172 00:07:55,780 --> 00:07:59,060 není k této krásné odsazení verze, ale pokud poznáte skutečnost 173 00:07:59,060 --> 00:08:02,560 že není složené závorky, co Apple skutečně napsal, byl kód, který se dívá 174 00:08:02,560 --> 00:08:03,540 takhle. 175 00:08:03,540 --> 00:08:07,080 Tak jsem oddálení a já pevné odsazení v tom smyslu, 176 00:08:07,080 --> 00:08:10,690 že v případě, že to není složené závorky, že druhé goto selhání, které je ve žluté 177 00:08:10,690 --> 00:08:12,500 se chystá provést bez ohledu na to. 178 00:08:12,500 --> 00:08:15,540 Není to spojeno s pokud podmínka nad ním. 179 00:08:15,540 --> 00:08:19,590 >> Takže i znovu, pokud to není zcela porozumět tomu, co by to mohlo možná 180 00:08:19,590 --> 00:08:23,230 bude dělat, vím, že každý z nich conditions-- každé z těchto čar 181 00:08:23,230 --> 00:08:26,180 Je to velmi důležitý krok v procesu kontroly 182 00:08:26,180 --> 00:08:28,350 pokud vaše data je ve skutečnosti zašifrovány. 183 00:08:28,350 --> 00:08:31,710 Takže skákání jeden z nich kroky, není nejlepší nápad. 184 00:08:31,710 --> 00:08:34,840 >> Ale protože jsme to Druhý goto selhat ve žluté, 185 00:08:34,840 --> 00:08:36,840 a proto, že jakmile jsme trochu esteticky 186 00:08:36,840 --> 00:08:40,480 posuňte ji doleva, kde ho logicky je v tuto chvíli, co se 187 00:08:40,480 --> 00:08:43,230 to znamená na lince Kód nižší, než je druhá GOTO 188 00:08:43,230 --> 00:08:46,480 selhání by si o tom myslíte? 189 00:08:46,480 --> 00:08:48,860 Je to vždy bude přeskočen. 190 00:08:48,860 --> 00:08:52,100 Takže gotos jsou obecně odsuzována z důvodů, které se opravdu jdou do, 191 00:08:52,100 --> 00:08:54,940 a sice v CS50 máme tendenci se učit tento příkaz GOTO, 192 00:08:54,940 --> 00:08:58,130 ale můžete myslet GOTO selhání v tom smyslu, skočit 193 00:08:58,130 --> 00:08:59,600 na jiné části kódu. 194 00:08:59,600 --> 00:09:03,120 >> Jinými slovy, skákat přes úplně to poslední řádek, 195 00:09:03,120 --> 00:09:07,420 a tak se výsledek tohoto hloupý jednoduchá chyba, že byl jen 196 00:09:07,420 --> 00:09:10,330 Výsledek snad někoho kopírování a vkládání taky 197 00:09:10,330 --> 00:09:14,150 mnohokrát bylo, že celý bezpečnost iOS a Mac OS 198 00:09:14,150 --> 00:09:18,240 bylo náchylné k odposlechu zlí hoši na delší dobu. 199 00:09:18,240 --> 00:09:19,940 Až Apple konečně opravil toto. 200 00:09:19,940 --> 00:09:23,100 >> Nyní, když někteří z vás jsou vlastně běží starší verze iOS nebo Mac OS, 201 00:09:23,100 --> 00:09:27,250 můžete jít na gotofail.com které je webová stránka, že někdo nastavit 202 00:09:27,250 --> 00:09:29,190 se v podstatě určí programově 203 00:09:29,190 --> 00:09:30,980 pokud váš počítač je stále zranitelné. 204 00:09:30,980 --> 00:09:33,600 A upřímně řečeno, je-li, je to asi dobrý nápad 205 00:09:33,600 --> 00:09:36,870 aktualizovat telefon nebo Mac v tomto bodě. 206 00:09:36,870 --> 00:09:40,120 Ale tam, jen svědčí o tom, jak zhodnocení těchto nižších úrovní 207 00:09:40,120 --> 00:09:42,400 Podrobnosti a spravedlivě jednoduché nápady může opravdu 208 00:09:42,400 --> 00:09:44,590 přeložit do rozhodnutí a problémy, které 209 00:09:44,590 --> 00:09:47,320 affected-- v tomto case-- miliony lidí. 210 00:09:47,320 --> 00:09:49,107 >> Nyní pár slov o správě. 211 00:09:49,107 --> 00:09:50,690 Sekce začne letos v neděli. 212 00:09:50,690 --> 00:09:53,360 Obdržíte e-mail od víkend na úseku, na kterém místě 213 00:09:53,360 --> 00:09:55,290 Proces resectioning začne, pokud jste 214 00:09:55,290 --> 00:09:56,998 si uvědomil, máte nyní některé nové konflikty. 215 00:09:56,998 --> 00:10:00,180 Takže se to stane každý rok, a my jsme se ubytovat v příštích dnech. 216 00:10:00,180 --> 00:10:02,430 >> Office hours-- dělat, aby oko na tomto plánu zde. 217 00:10:02,430 --> 00:10:05,100 Změní trochu tento týden, zejména počáteční čas 218 00:10:05,100 --> 00:10:08,180 a umístění, takže se poraďte se že předtím, než se vydáte do pracovní doby 219 00:10:08,180 --> 00:10:09,520 některý z následujících čtyř noci. 220 00:10:09,520 --> 00:10:12,680 A nyní pár slov o posouzení, zejména pokud se ponoříte do problému 221 00:10:12,680 --> 00:10:14,350 stanovuje jeden a mimo ni. 222 00:10:14,350 --> 00:10:17,070 >> Takže dle specifikace, Tyto jsou obecně 223 00:10:17,070 --> 00:10:20,360 osy, podél níž budeme hodnotit svou práci. 224 00:10:20,360 --> 00:10:23,170 Rozsah se odkazuje na to, co míry Váš kód nářadí 225 00:10:23,170 --> 00:10:25,690 funkce požadované naše specifikace. 226 00:10:25,690 --> 00:10:28,290 Jinými slovy, jak moc dílná sada jsi ukousnout. 227 00:10:28,290 --> 00:10:30,440 Věděli jste to třetina z nich, polovina z nich, 100% ní. 228 00:10:30,440 --> 00:10:33,000 I v případě, že to není správné, kolik jste pokus? 229 00:10:33,000 --> 00:10:35,290 Takže zachytí úroveň úsilí a množství 230 00:10:35,290 --> 00:10:38,260 , ke kterému ukousl Problém SET je. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- tento, na jaké míry je váš kód 232 00:10:40,690 --> 00:10:43,150 v souladu s našimi specifikace a bez chyb. 233 00:10:43,150 --> 00:10:44,770 Tak to funguje správně? 234 00:10:44,770 --> 00:10:48,700 Dáme-li mu nějaký vstup, dělá to nám výstup, který očekáváme? 235 00:10:48,700 --> 00:10:52,570 Design-- teď je to první jsou zejména ty, kvalitativní 236 00:10:52,570 --> 00:10:56,180 nebo ty, které vyžadují lidský úsudek. 237 00:10:56,180 --> 00:10:59,690 A skutečně, to je důvod, proč máme zaměstnance tolika výuky kolegy a samozřejmě 238 00:10:59,690 --> 00:11:00,350 asistenti. 239 00:11:00,350 --> 00:11:03,480 Do jaké míry je váš kód napsaný dobře? 240 00:11:03,480 --> 00:11:05,810 >> A opět se jedná o velmi kvalitativní hodnocení 241 00:11:05,810 --> 00:11:09,100 že bude pracovat s vámi na obousměrně v příštích týdnech. 242 00:11:09,100 --> 00:11:12,060 Tak, že když se dostanete ne tak číselné výsledky, ale i 243 00:11:12,060 --> 00:11:16,682 Písemné skóre, nebo napsaný zpětná vazba, nebo písemné zpětné vazby v anglických slov. 244 00:11:16,682 --> 00:11:19,640 To je to, co budeme používat řídit vás k vlastně psát lepší kód. 245 00:11:19,640 --> 00:11:23,320 A v přednášce a části, budeme se snažit upozornit out-- tak často, jak bychom can-- 246 00:11:23,320 --> 00:11:26,420 to, co dělá program, a to nejen správné a funkčně dobře, 247 00:11:26,420 --> 00:11:28,200 ale i dobře navržené. 248 00:11:28,200 --> 00:11:31,850 Nejúčinnější by to mohlo být, nebo i nejkrásnější to může být. 249 00:11:31,850 --> 00:11:33,100 >> Což nás vede k stylu. 250 00:11:33,100 --> 00:11:36,876 Styl nakonec je estetický soud. 251 00:11:36,876 --> 00:11:38,750 Jste si vybral dobrý Jména pro vaše proměnné? 252 00:11:38,750 --> 00:11:40,330 Už jste správně odsazeny kód? 253 00:11:40,330 --> 00:11:44,010 Vypadá to dobře, a proto, to je snadné pro jiné lidské bytosti 254 00:11:44,010 --> 00:11:46,550 číst vaše příslušné na jeho správnost. 255 00:11:46,550 --> 00:11:50,300 >> Nyní obecně dle osnov, jsme skóre tyto věci na pětibodové stupnici. 256 00:11:50,300 --> 00:11:53,640 A dovolte mi, abych kladivo domů bod že se tři je opravdu dobrá. 257 00:11:53,640 --> 00:11:55,550 Velmi rychle se to lidi začít dělat aritmetiku. 258 00:11:55,550 --> 00:11:58,133 Když dostanete tři ze pět na správnost pro některé pset 259 00:11:58,133 --> 00:12:02,040 a myslí si, sakra, budu 60% , který je v podstatě D nebo E. 260 00:12:02,040 --> 00:12:03,980 >> To není způsob, jak myslíte, že z těchto čísel. 261 00:12:03,980 --> 00:12:06,880 Tři je opravdu dobrá, a to, co jsme obecně očekávají, že na začátku 262 00:12:06,880 --> 00:12:09,820 termínu je, že pokud jste se dostal banda three's-- možná pár 263 00:12:09,820 --> 00:12:12,540 veletrhů, pár fours-- nebo pár dvojky, pár fours-- 264 00:12:12,540 --> 00:12:13,748 že je to dobré místo pro start. 265 00:12:13,748 --> 00:12:16,320 A tak dlouho, jak vidíme nahoru trajektorie v průběhu času, 266 00:12:16,320 --> 00:12:18,540 jste v mimořádně dobrém místě. 267 00:12:18,540 --> 00:12:20,752 >> Vzorec, který používáme k Hmotnost věci je v podstatě 268 00:12:20,752 --> 00:12:22,710 to dle osnovy což právě znamená, že 269 00:12:22,710 --> 00:12:24,750 dát větší důraz na správnost. 270 00:12:24,750 --> 00:12:27,930 Vzhledem k tomu, že je to velmi často správnost který bere nejvíce času. 271 00:12:27,930 --> 00:12:28,760 Věř mi teď. 272 00:12:28,760 --> 00:12:31,190 Budete find-- alespoň v jednom pset--, které vás 273 00:12:31,190 --> 00:12:36,790 tráví 90% svého času pracuje na 10% problému. 274 00:12:36,790 --> 00:12:39,320 >> A všechno, co nějak funguje s výjimkou jednoho nebo dvou chyb, 275 00:12:39,320 --> 00:12:41,570 a to jsou chyby, které vás až pozdě v noci. 276 00:12:41,570 --> 00:12:43,380 To jsou ty, které nějak uniknout vás. 277 00:12:43,380 --> 00:12:45,560 Ale poté, co spí na něm, nebo se účastní úřední hodiny 278 00:12:45,560 --> 00:12:48,844 nebo klást otázky on-line, je když se dostanete do té 100% cíli, 279 00:12:48,844 --> 00:12:50,760 a to je důvod, proč jsme hmotnost správnost nejvíce. 280 00:12:50,760 --> 00:12:54,102 Navrhnout trochu méně, a styl trochu méně než to. 281 00:12:54,102 --> 00:12:56,060 Ale mějte na mind-- stylu je možná nejjednodušší 282 00:12:56,060 --> 00:12:58,890 z nich ukousnout dle stylu průvodce. 283 00:12:58,890 --> 00:13:01,580 >> A teď vážněji Pozor na akademické poctivosti. 284 00:13:01,580 --> 00:13:05,000 CS50 má neblahý vyznamenání je největším výrobcem Ad rady 285 00:13:05,000 --> 00:13:07,330 případy téměř každý rok historicky. 286 00:13:07,330 --> 00:13:11,012 To není proto, že studenti podvádět CS50 o nic víc než kterýkoli jiný třídy, 287 00:13:11,012 --> 00:13:13,720 ale proto, že podle povahy práce, Skutečnost, že je elektronický, 288 00:13:13,720 --> 00:13:16,636 Skutečnost, že se podíváme na to, a skutečnost jsme počítačoví odborníci, 289 00:13:16,636 --> 00:13:20,570 Mohu říci, že jsme bohužel velmi dobře odhalovat ji. 290 00:13:20,570 --> 00:13:22,710 >> Takže co to znamená v reálných hodnotách? 291 00:13:22,710 --> 00:13:24,820 Takže to, dle osnov, filozofie kurzu je 292 00:13:24,820 --> 00:13:28,090 opravdu redukuje být rozumný. 293 00:13:28,090 --> 00:13:31,684 Tam je to hranice mezi dělat svou práci na vlastní pěst 294 00:13:31,684 --> 00:13:34,100 a získat trochu přiměřená pomoc od přátel 295 00:13:34,100 --> 00:13:38,020 a přímo tím, že práci pro přítel, nebo zasláním mu svůj kód 296 00:13:38,020 --> 00:13:41,080 tak, že on nebo ona může jednoduše vzít nebo si ji půjčit z práva. 297 00:13:41,080 --> 00:13:43,580 A to překročí hranici , že byly v třídě. 298 00:13:43,580 --> 00:13:45,410 >> Viz osnovy v konečném důsledku pro řádky 299 00:13:45,410 --> 00:13:48,209 že čerpáme jako rozumné a nerozumné chování, 300 00:13:48,209 --> 00:13:50,000 ale je to opravdu vařit dolů k podstatě 301 00:13:50,000 --> 00:13:53,980 své práce museli být svým vlastním koncem. 302 00:13:53,980 --> 00:13:56,230 Nyní se, že řekl, je heuristický. 303 00:13:56,230 --> 00:13:58,980 Vzhledem k tomu, jak by se mohlo imagine-- z úředních hodin a vizuální 304 00:13:58,980 --> 00:14:01,060 a videa máme zobrazeny tak far-- CS50 305 00:14:01,060 --> 00:14:04,530 skutečně chtěl být jako spolupráce a jako družstvo a jako sociální 306 00:14:04,530 --> 00:14:06,450 jak je to možné. 307 00:14:06,450 --> 00:14:08,570 Například společné jak je pečlivý. 308 00:14:08,570 --> 00:14:11,314 >> Ale s tím řekl, heuristika, jak uvidíte v učebních osnovách, 309 00:14:11,314 --> 00:14:12,980 je, že když máte nějaký problém. 310 00:14:12,980 --> 00:14:16,470 Máte nějakou chybu v kódu, který vám nelze vyřešit, je rozumné pro vás 311 00:14:16,470 --> 00:14:18,039 ukázat svůj kód na někoho jiného. 312 00:14:18,039 --> 00:14:21,080 Přítel i ve třídě, přítel sedí vedle vás v úředních hodinách, 313 00:14:21,080 --> 00:14:22,680 nebo zaměstnanec. 314 00:14:22,680 --> 00:14:25,810 Ale nemusí zobrazit jejich kód na vás. 315 00:14:25,810 --> 00:14:27,710 >> Jinými slovy, odpověď na Váš question-- 316 00:14:27,710 --> 00:14:29,940 Musím help-- není oh, tady je můj kód. 317 00:14:29,940 --> 00:14:32,440 Podívejte se na to, a vyvodit z toho, co bude. 318 00:14:32,440 --> 00:14:34,580 Teď, samozřejmě, je tu způsob, jak jasně ke hře 319 00:14:34,580 --> 00:14:37,760 Tento systém, ve kterém jsem vám ukážu, můj kód před tím, než otázku. 320 00:14:37,760 --> 00:14:40,150 Můžete mi ukázat můj kód před tím, než otázku. 321 00:14:40,150 --> 00:14:45,870 Ale viz sylabus znovu jemnější detaily o tom, kde je tento řádek. 322 00:14:45,870 --> 00:14:50,606 >> Jen proto, aby se malovat obraz a sdílet transparentně, jak je to možné 323 00:14:50,606 --> 00:14:53,480 kde jsme na v posledních letech, To je počet případů Ad rady 324 00:14:53,480 --> 00:14:56,260 že CS50 má více než za posledních sedm let. 325 00:14:56,260 --> 00:14:58,717 14 případů této nejnovější podzim. 326 00:14:58,717 --> 00:15:01,300 Z hlediska zúčastněných studentů, to bylo 20 z nějakého zvláštního studenti 327 00:15:01,300 --> 00:15:02,490 letos na podzim. 328 00:15:02,490 --> 00:15:05,670 Tam byl vrchol 33 studenti před několika lety. 329 00:15:05,670 --> 00:15:08,830 Mnohé z nich jsou bohužel už tady na akademické půdě. 330 00:15:08,830 --> 00:15:13,100 >> Studenti se podílejí jako procento třída historicky v rozmezí od 0% 331 00:15:13,100 --> 00:15:17,300 na 5,3%, což je pouze říci, To je každoročně výzvou. 332 00:15:17,300 --> 00:15:20,390 A k tomuto účelu, co chceme udělat, je sdělit jednu 333 00:15:20,390 --> 00:15:24,310 že dd-- jen na tyto FYI-- spravedlnost pro ty studenty, kteří 334 00:15:24,310 --> 00:15:26,520 jsou následující řádek podle toho. 335 00:15:26,520 --> 00:15:29,620 Děláme porovnat všechny aktuální podání proti všem minulých misí 336 00:15:29,620 --> 00:15:30,840 z posledních mnoho let. 337 00:15:30,840 --> 00:15:33,620 >> Víme také, jak na Google po a najít úložiště kódu 338 00:15:33,620 --> 00:15:36,360 on-line, diskusní fóra on-line, práce stránkách online. 339 00:15:36,360 --> 00:15:41,580 Pokud se student může najít, můžeme jistě Je to stejně jako my s lítostí dělat. 340 00:15:41,580 --> 00:15:45,330 Takže to, co uvidíte v učebních osnovách i když je toto ustanovení lítost. 341 00:15:45,330 --> 00:15:47,500 Mohu rozhodně ocenit, a všichni jsme se 342 00:15:47,500 --> 00:15:50,870 Pracovníci, kteří provádí kurzu jako Tato, nebo tento sám o sobě v průběhu času, 343 00:15:50,870 --> 00:15:53,997 jistě víte, jaké to je, když život se dostane do cesty, když máte 344 00:15:53,997 --> 00:15:56,080 některé pozdě v noci deadline-- a to nejen v této třídě, 345 00:15:56,080 --> 00:15:58,660 ale another-- když jste zcela vyčerpán, stresu, 346 00:15:58,660 --> 00:16:00,659 mají nadměrné množství dalších věcí dělat. 347 00:16:00,659 --> 00:16:03,660 Budete dělat na nějakém místě v život určitě špatný, možná pozdě 348 00:16:03,660 --> 00:16:04,620 noc rozhodnutí. 349 00:16:04,620 --> 00:16:06,520 >> Takže dle osnovy je toto ustanovení, 350 00:16:06,520 --> 00:16:10,629 taková, že pokud do 72 hodin od výroby některé špatné rozhodnutí, můžete vlastnit až k němu 351 00:16:10,629 --> 00:16:12,670 a dostat se ke mně a jeden z vedoucích kurzu je 352 00:16:12,670 --> 00:16:14,300 a budeme mít rozhovor. 353 00:16:14,300 --> 00:16:16,220 Budeme řešit věci interně v naději, že 354 00:16:16,220 --> 00:16:18,770 z toho stává více Výuka moment nebo životní lekci, 355 00:16:18,770 --> 00:16:22,120 a ne něco, co se obzvláště drastické následky 356 00:16:22,120 --> 00:16:24,570 jak můžete vidět na následujících grafech zde. 357 00:16:24,570 --> 00:16:26,540 >> Tak to je velmi vážný tón. 358 00:16:26,540 --> 00:16:29,960 Zastavme jen za pár sekund prolomit napětí. 359 00:16:29,960 --> 00:16:34,442 >> [Přehrávání 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, jak to bylo pro Segue? 362 00:17:20,250 --> 00:17:22,059 Dnešních základních témat. 363 00:17:22,059 --> 00:17:23,859 První z nich je abstrakce. 364 00:17:23,859 --> 00:17:26,900 Další, z nichž bude reprezentace dat, což upřímně řečeno 365 00:17:26,900 --> 00:17:31,640 je opravdu suchý způsob, jak říct, jak můžeme jít o řešení problémů a myšlení 366 00:17:31,640 --> 00:17:33,250 o řešení problémů? 367 00:17:33,250 --> 00:17:37,285 Takže jste viděli v Scratch, a vy jste Viděl snad již v pset1 s C 368 00:17:37,285 --> 00:17:39,930 že nejen můžete použít funkce, jako printf, 369 00:17:39,930 --> 00:17:42,770 že ostatní lidé v minulých letech napsal pro tebe. 370 00:17:42,770 --> 00:17:45,340 Můžete také psát své vlastní funkce. 371 00:17:45,340 --> 00:17:48,440 >> A i když je možné, udělat to v C, a upřímně řečeno, v pset1 372 00:17:48,440 --> 00:17:51,866 nemáte opravdu potřebujete napsat svůj vlastní funkce protože problem-- 373 00:17:51,866 --> 00:17:53,990 zatímco možná skličující na První glance-- uvidíte 374 00:17:53,990 --> 00:17:57,910 může být v konečném důsledku vyřešit ne všechny, že mnoho řádků kódu. 375 00:17:57,910 --> 00:18:01,140 Ale s tím, že, co se týče psaní své vlastní funkce, 376 00:18:01,140 --> 00:18:03,570 Uvědomuji si, že C se dá vám tato schopnost. 377 00:18:03,570 --> 00:18:06,940 >> Chystám se jít v dnešní zdrojového kódu, který je k dispozici již on-line, 378 00:18:06,940 --> 00:18:10,900 a já jdu do toho a otevřený do programu s názvem funkce 0.C, 379 00:18:10,900 --> 00:18:14,620 a ve funkci nulové uvidíme pár věcí. 380 00:18:14,620 --> 00:18:19,160 V prvních řádků 18 až 23 je můj hlavní funkci. 381 00:18:19,160 --> 00:18:22,414 A teď, když jsme začali číst kód, který nejsme psaní na běhu, 382 00:18:22,414 --> 00:18:25,080 ale místo toho jsem napsal v předstihu nebo že jste na problém nastavit 383 00:18:25,080 --> 00:18:27,910 Může se zobrazit s byla napsána v předstihu. 384 00:18:27,910 --> 00:18:30,040 Dobrý způsob, jak začít čtení kódu někoho jiného 385 00:18:30,040 --> 00:18:31,400 , je podívat se na hlavní funkce. 386 00:18:31,400 --> 00:18:34,420 Zjistit, kde tuto položku Jde o to, spuštění programu, 387 00:18:34,420 --> 00:18:36,580 a pak ji logicky odtud. 388 00:18:36,580 --> 00:18:40,190 >> Tak tohle programu zřejmě tisky Vaše jméno následované dvojtečkou. 389 00:18:40,190 --> 00:18:42,490 My pak používáme getString z knihovny CS50 390 00:18:42,490 --> 00:18:46,050 získat řetězec nebo slovo nebo frázi od uživatele na klávesnici. 391 00:18:46,050 --> 00:18:48,390 A pak je tu to věc tady-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Nyní PrintName není funkce, která přichází s C. 393 00:18:51,420 --> 00:18:52,970 Není to ve standardním io.h. 394 00:18:52,970 --> 00:18:55,570 Není to v CS50.h. 395 00:18:55,570 --> 00:18:57,880 Je to spíše ve stejném souboru. 396 00:18:57,880 --> 00:19:01,000 Všimněte si, když jsem nalistujte A bit-- linky 25 na 27-- 397 00:19:01,000 --> 00:19:05,330 je to jen docela způsob komentování Váš kód pomocí hvězd a lomítka. 398 00:19:05,330 --> 00:19:07,320 Jedná se o multi-linie komentovat, a to je jen 399 00:19:07,320 --> 00:19:10,570 můj popis v modré barvě co tato funkce dělá. 400 00:19:10,570 --> 00:19:14,530 >> Vzhledem k tomu, linií, 28 až 31, Napsal jsem super jednoduchou funkci 401 00:19:14,530 --> 00:19:16,280 název, o jehož je PrintName. 402 00:19:16,280 --> 00:19:19,560 Trvá to, kolik Argumenty byste řekli? 403 00:19:19,560 --> 00:19:25,120 Takže jeden argument--, protože tam je jeden Argument uvedeny v závorkách. 404 00:19:25,120 --> 00:19:27,000 Typ, který je String. 405 00:19:27,000 --> 00:19:30,240 Což znamená, PrintName je takhle černé skříňky 406 00:19:30,240 --> 00:19:32,910 nebo funkce, která vezme jako vstupní řetězec. 407 00:19:32,910 --> 00:19:35,730 >> A název tohoto řetězce Pohodlně se bude Name. 408 00:19:35,730 --> 00:19:37,840 Ne S, ne N, ale jméno. 409 00:19:37,840 --> 00:19:41,090 Takže co PrintName dělat? 410 00:19:41,090 --> 00:19:42,210 Je to pěkné jednoduché. 411 00:19:42,210 --> 00:19:45,390 Stejně jako jeden řádek kódu pro printf, ale zřejmě to 412 00:19:45,390 --> 00:19:47,950 vytiskne "Dobrý den," tak a tak. 413 00:19:47,950 --> 00:19:50,070 V případě, že tak a tak vychází z argumentu. 414 00:19:50,070 --> 00:19:52,300 >> Teď to není obrovský inovační zde. 415 00:19:52,300 --> 00:19:56,710 Opravdu, jsem vzal program, který by mohl byly psány s jeden řádek kódu 416 00:19:56,710 --> 00:20:00,190 tím, že to tady, a změnil ho na něco 417 00:20:00,190 --> 00:20:04,920 který zahrnuje některé šest nebo sedm nebo tak nějak řádků kódu celou cestu sem. 418 00:20:04,920 --> 00:20:08,190 >> Ale je to nácvik princip známý jako abstrakce. 419 00:20:08,190 --> 00:20:12,550 Druh zapouzdření uvnitř nové funkce, která má jméno, a lépe 420 00:20:12,550 --> 00:20:14,590 přesto, že jméno doslovně říká, že to, co dělá. 421 00:20:14,590 --> 00:20:16,880 Myslím printf--, že to není zejména popisné. 422 00:20:16,880 --> 00:20:18,932 Pokud chci vytvořit skládačky, nebo jestli jsem 423 00:20:18,932 --> 00:20:21,140 Chcete vytvořit funkci, která tiskne něčí jméno, 424 00:20:21,140 --> 00:20:23,230 krása, jak to udělat je to, že mohu skutečně 425 00:20:23,230 --> 00:20:27,170 dát, že funkci její název , který popisuje, co to dělá. 426 00:20:27,170 --> 00:20:29,844 >> Nyní trvá na vstupu, který Jsem svévolně volal jméno, 427 00:20:29,844 --> 00:20:32,760 ale také se výborně popisný místo toho, aby se trochu více 428 00:20:32,760 --> 00:20:36,140 generic jako S. a neplatné, teď, prostě znamená, 429 00:20:36,140 --> 00:20:38,330 že tato funkce není ruce mi nic. 430 00:20:38,330 --> 00:20:41,127 Není to tak, že getString Doslova mi podá zpět řetězec 431 00:20:41,127 --> 00:20:43,960 jako jsme to udělali s kousky papíru se svými spolužáky minulý týden, 432 00:20:43,960 --> 00:20:45,990 ale to má jen vedlejší efekt. 433 00:20:45,990 --> 00:20:48,080 Vytiskne něco na obrazovku. 434 00:20:48,080 --> 00:20:53,880 >> Takže na konci dne, když dělat, aby funkce-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 uvidíme, že se zeptá na mé jméno. 436 00:20:55,450 --> 00:20:58,150 Píšu Davida, a to druhy se mé jméno. 437 00:20:58,150 --> 00:21:01,080 Pokud bych to znovu s Robem, to bude říkat "Ahoj, Robe." 438 00:21:01,080 --> 00:21:04,280 Takže jednoduchá myšlenka, ale možná odvodit z toho psychicky 439 00:21:04,280 --> 00:21:06,750 že pokud vaše programy se o něco složitější, 440 00:21:06,750 --> 00:21:10,290 a chcete napsat kus kód a volání, které code-- Vyvolat 441 00:21:10,290 --> 00:21:13,270 že code-- podle popisné pojmenovat jako PrintName, 442 00:21:13,270 --> 00:21:15,600 C dělá dovolit nám tuto možnost. 443 00:21:15,600 --> 00:21:17,660 >> Zde je další jednoduchý příklad. 444 00:21:17,660 --> 00:21:22,940 Například, když jsem otevřít soubor z dnes volal return.c, 445 00:21:22,940 --> 00:21:24,270 Všimněte si, co jsem tady udělal. 446 00:21:24,270 --> 00:21:26,330 Většina z této hlavní funkce je printf. 447 00:21:26,330 --> 00:21:30,360 Poprvé jsem se svévolně inicializovat Proměnná x se nazývá číslo 2. 448 00:21:30,360 --> 00:21:34,110 Pak jsem vytisknout "x je nyní % I "předávání v hodnotě x. 449 00:21:34,110 --> 00:21:35,500 Takže jsem jen říkám, co to je. 450 00:21:35,500 --> 00:21:37,208 >> Teď jsem jen směle prohlašovat se printf. 451 00:21:37,208 --> 00:21:42,050 Jsem Cubing, že hodnota x, a já jsem Přitom voláním funkce 452 00:21:42,050 --> 00:21:45,590 volal cube absolvování v X jako argument, 453 00:21:45,590 --> 00:21:49,300 a následným uložením výstupu v proměnné samotné, x. 454 00:21:49,300 --> 00:21:51,340 Takže jsem přepisování hodnotu x. 455 00:21:51,340 --> 00:21:53,380 Jsem převažující hodnota x s tím, co 456 00:21:53,380 --> 00:21:56,510 Výsledkem volání Tato funkce je kostka. 457 00:21:56,510 --> 00:21:59,530 A pak jsem jen vytisknout na některé načechraný věci tady říkat, co jsem udělal. 458 00:21:59,530 --> 00:22:01,600 >> Takže to, co pak je kostka? 459 00:22:01,600 --> 00:22:03,510 Všimněte si, co je v podstatě jinak tady. 460 00:22:03,510 --> 00:22:05,540 Dal jsem funkci název jako předtím. 461 00:22:05,540 --> 00:22:08,270 Jsem zadán název argumentu. 462 00:22:08,270 --> 00:22:11,650 Tentokrát je to jen n místo jména, ale to bych mohl říkat, co chci. 463 00:22:11,650 --> 00:22:12,650 Ale tohle je něco jiného. 464 00:22:12,650 --> 00:22:14,080 To, co na levé straně. 465 00:22:14,080 --> 00:22:16,290 Dříve to bylo to, co slovo? 466 00:22:16,290 --> 00:22:16,870 Boys. 467 00:22:16,870 --> 00:22:18,580 Teď je to samozřejmě int. 468 00:22:18,580 --> 00:22:20,630 >> Takže to, co je třeba vzít? 469 00:22:20,630 --> 00:22:24,090 Vzhledem k tomu, void znamená druh nicota, a to byl ten případ. 470 00:22:24,090 --> 00:22:25,970 PrintName vrátil nic. 471 00:22:25,970 --> 00:22:27,942 Je to něco udělal, ale to se mi vrátit 472 00:22:27,942 --> 00:22:30,650 něco, co bych mohl dát na levá strana rovnítko 473 00:22:30,650 --> 00:22:32,460 jako já jsem udělal tu na lince 22. 474 00:22:32,460 --> 00:22:36,780 >> Takže když řeknu, že v on-line 30, co je to pravděpodobně znamenat, 475 00:22:36,780 --> 00:22:38,610 o tom, co kostka dělá pro mě? 476 00:22:38,610 --> 00:22:41,110 Jo? 477 00:22:41,110 --> 00:22:42,310 Vrací celé číslo. 478 00:22:42,310 --> 00:22:44,590 Tak mi to předá zpět, pro instance, kus papíru 479 00:22:44,590 --> 00:22:46,580 na které napsal odpověď. 480 00:22:46,580 --> 00:22:50,130 2 kostičky nebo 3 kostičky, nebo 4 cubed-- co jsem prošel v roce, 481 00:22:50,130 --> 00:22:51,540 a jak jsem se realizovat to? 482 00:22:51,540 --> 00:22:54,810 No, právě n krát n krát n je, jak bych mohl kostka hodnotu. 483 00:22:54,810 --> 00:22:57,110 Takže znovu, super jednoduchý nápad, ale demonstrativní 484 00:22:57,110 --> 00:23:00,100 nyní, jak můžeme psát funkce že nás vlastně měl vrátit 485 00:23:00,100 --> 00:23:02,380 hodnoty, které by mohly být zajímavé. 486 00:23:02,380 --> 00:23:05,740 >> Pojďme se podívat na jeden poslední příklad zde volaná funkce jeden. 487 00:23:05,740 --> 00:23:08,530 V tomto příkladu, se začne získat více přesvědčivé. 488 00:23:08,530 --> 00:23:12,400 Takže ve funkci jeden, to program-- upozornění nakonec 489 00:23:12,400 --> 00:23:14,920 volání funkce volána GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt není Funkce v knihovně CS50, 491 00:23:17,800 --> 00:23:20,400 ale rozhodli jsme se, bych to existovat. 492 00:23:20,400 --> 00:23:24,550 >> Takže když jsme se posunout dolů později v souboru, Všimněte si, jak jsem se o provádění 493 00:23:24,550 --> 00:23:26,560 získat pozitivní int, a já říkají, že je to více přesvědčivý 494 00:23:26,560 --> 00:23:28,992 protože to je slušný Počet řádků kódu. 495 00:23:28,992 --> 00:23:30,700 Není to jen hloupá hračka programu. 496 00:23:30,700 --> 00:23:33,870 Je to vlastně má nějakou kontrolu chyb a dělat něco užitečného. 497 00:23:33,870 --> 00:23:38,470 >> Takže pokud jste ještě neviděli návod videa, která jsme vložené do pset1, 498 00:23:38,470 --> 00:23:42,350 vědět, že se jedná o typ smyčka v C, podobně jako v duchu 499 00:23:42,350 --> 00:23:44,270 na spoustu věcí Scratch se dá dělat. 500 00:23:44,270 --> 00:23:46,320 A to říká, že to udělat. 501 00:23:46,320 --> 00:23:47,500 Vytisknout na to. 502 00:23:47,500 --> 00:23:51,860 Pak jděte do toho a dostat n-- získat int a uložte jej na n, 503 00:23:51,860 --> 00:23:55,760 a pokračovat v tom to znovu a znovu a znovu tak dlouho, dokud n je menší než jedna. 504 00:23:55,760 --> 00:23:58,720 >> Tak n bude méně než jeden pouze v případě, že člověk není spolupracující. 505 00:23:58,720 --> 00:24:01,980 Jestliže on nebo ona je psaní v 0 nebo -1, nebo -50, 506 00:24:01,980 --> 00:24:04,790 Tato smyčka bude mít provádění znovu a znovu. 507 00:24:04,790 --> 00:24:07,549 A nakonec zjistíte, I jednoduše vrátit hodnotu. 508 00:24:07,549 --> 00:24:09,590 Takže teď máme funkci to by bylo hezké 509 00:24:09,590 --> 00:24:14,040 pokud CS50 by implementovat do CS50.h a CS50.c pro vás, 510 00:24:14,040 --> 00:24:16,520 ale tady můžeme nyní provedení tohoto sami. 511 00:24:16,520 --> 00:24:19,230 >> Ale dvě připomínky některých klíčových detailů. 512 00:24:19,230 --> 00:24:24,390 One-- proč Prohlašuji, int n, myslíš, že na lince 29 513 00:24:24,390 --> 00:24:27,139 místo toho jen to, to tady, což je 514 00:24:27,139 --> 00:24:28,930 více v souladu s to, co jsme dělali minulý týden? 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šlenka. 518 00:24:35,110 --> 00:24:37,080 Takže pokud bychom měli dát tady, je to, jako bychom 519 00:24:37,080 --> 00:24:39,110 udržovat ji znovu a znovu prohlašuje. 520 00:24:39,110 --> 00:24:42,000 To samo o sobě je není problematické, sama o sobě, 521 00:24:42,000 --> 00:24:43,940 protože budeme potřebovat pouze hodnota jednou a poté 522 00:24:43,940 --> 00:24:45,330 budeme si novou tak jako tak. 523 00:24:45,330 --> 00:24:45,940 Ale dobrá myšlenka. 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 >> Zavřít. 527 00:24:53,330 --> 00:24:59,030 Tak proto, že jsem prohlásil, n na řádek 29 mimo smyčky, 528 00:24:59,030 --> 00:25:01,390 je k dispozici v celém Celá tato funkce. 529 00:25:01,390 --> 00:25:05,400 Ne ostatní funkce, protože n je stále uvnitř těchto kudrnaté 530 00:25:05,400 --> 00:25:06,470 šle zde. 531 00:25:06,470 --> 00:25:07,940 Tak-- jistý. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Přesně tak. 534 00:25:12,940 --> 00:25:14,356 Tak to je ještě na místě. 535 00:25:14,356 --> 00:25:18,600 Pokud bychom místo toho prohlásil n tady na řádku 32, 536 00:25:18,600 --> 00:25:22,340 je to problematické, protože odhad kde jinde Musím se k nim dostat? 537 00:25:22,340 --> 00:25:25,620 Na řádku 34, a jednoduché pravidlo je 538 00:25:25,620 --> 00:25:30,060 že můžete použít proměnnou pouze uvnitř nejnovějších složených závorek 539 00:25:30,060 --> 00:25:31,420 , ve kterém je deklarována. 540 00:25:31,420 --> 00:25:35,230 >> Bohužel, řada 34 je jeden řádek příliš pozdě, 541 00:25:35,230 --> 00:25:38,560 protože jsem již uzavřena složená závorka na lince 33 542 00:25:38,560 --> 00:25:41,220 , která odpovídá složená závorka na lince 30. 543 00:25:41,220 --> 00:25:44,180 A tak to je způsob, jak říkat že tato proměnná int je rozsahem, 544 00:25:44,180 --> 00:25:46,970 abych tak řekl, jen uvnitř těchto složených závorek. 545 00:25:46,970 --> 00:25:48,910 Je to prostě neexistuje mimo ně. 546 00:25:48,910 --> 00:25:51,580 >> Takže opravdu, když jsem to udělat špatně, dovolte mi, abych uložit kód 547 00:25:51,580 --> 00:25:53,530 jak to je-- nesprávně napsaný. 548 00:25:53,530 --> 00:25:57,990 Nech mě jít dopředu a dělat, aby funkce 1 a notice-- chybě. 549 00:25:57,990 --> 00:26:03,502 Použití nehlášené identifikátor n na lince 35, která je tady. 550 00:26:03,502 --> 00:26:05,210 A pokud budeme posouvat nahoru další, ještě jeden. 551 00:26:05,210 --> 00:26:08,750 Použití načerno Identifikátor n na řádku 34. 552 00:26:08,750 --> 00:26:11,200 >> Takže kompilátor Clang, je si všiml, že to prostě 553 00:26:11,200 --> 00:26:13,720 neexistuje, i když jasně, že je to tam vizuálně. 554 00:26:13,720 --> 00:26:16,090 Takže jednoduchá oprava prohlašuje ji tam. 555 00:26:16,090 --> 00:26:18,790 >> Nyní mi dovolte přejděte na v horní části souboru. 556 00:26:18,790 --> 00:26:21,080 Co vyskočí na vás, jak je trochu jinak 557 00:26:21,080 --> 00:26:23,070 od věci jsme se podívali na minulý týden? 558 00:26:23,070 --> 00:26:26,990 Nejen, že mám jméno, a to nejen do Mám některé ostré patří do top, 559 00:26:26,990 --> 00:26:29,340 Mám něco, co jsem volání prototyp. 560 00:26:29,340 --> 00:26:36,100 Teď to vypadá strašně podobný tomu, co jsme právě viděli před chvílí na lince 27. 561 00:26:36,100 --> 00:26:39,230 >> Takže pojďme vyvodit z jiného chybové hlášení, proč jsem to udělal. 562 00:26:39,230 --> 00:26:42,050 Nech mě jít napřed a odstranit tyto řádky zde. 563 00:26:42,050 --> 00:26:44,240 A tak nevíme nic o prototyp. 564 00:26:44,240 --> 00:26:45,430 Remake tohoto souboru. 565 00:26:45,430 --> 00:26:46,890 Proveďte jednu funkci. 566 00:26:46,890 --> 00:26:48,090 A teď, sakra, čtyři chyby. 567 00:26:48,090 --> 00:26:50,220 Pojďme přejděte do první. 568 00:26:50,220 --> 00:26:55,070 >> Implicitní deklarace funkce získat pozitivní int je C99 neplatný. 569 00:26:55,070 --> 00:26:57,780 C99 prostě znamená, že v roce 1999 verze jazyka 570 00:26:57,780 --> 00:26:59,710 C, což je to, co jsme skutečně používáte. 571 00:26:59,710 --> 00:27:01,050 Takže co to znamená? 572 00:27:01,050 --> 00:27:05,250 No C-- a konkrétněji C compilers-- jsou docela hloupé programy. 573 00:27:05,250 --> 00:27:07,420 Oni jen vědí, co jste řekl jim, a to 574 00:27:07,420 --> 00:27:08,960 vlastně tématická z minulého týdne. 575 00:27:08,960 --> 00:27:12,910 >> Problém je, že když půjdu o provádění jméno tady, 576 00:27:12,910 --> 00:27:17,640 a zavolám funkci nazvanou GetPositiveInt zde na řádku 20, 577 00:27:17,640 --> 00:27:22,520 tato funkce technicky není existovat, dokud kompilátor vidí linii 27. 578 00:27:22,520 --> 00:27:25,450 Bohužel, kompilátor dělat věci nahoře, dole, vlevo, vpravo, 579 00:27:25,450 --> 00:27:29,580 tak proto, že není vidět realizace GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 ale vidí snažíš používat to tady, 581 00:27:32,400 --> 00:27:35,810 je to jen tak bail-- křičet na jste s chybou message-- možná 582 00:27:35,810 --> 00:27:38,440 mystický, a ne ve skutečnosti kompilaci souboru. 583 00:27:38,440 --> 00:27:41,940 >> Tak takzvaný prototyp až Zde je sice nadbytečná. 584 00:27:41,940 --> 00:27:47,870 Doslova jsem šel dolů a já sem kopírovat a vložit to, a dal jsem to sem. 585 00:27:47,870 --> 00:27:51,020 Void by bylo správné, takže budeme doslova zkopírujte a vložte ji tentokrát. 586 00:27:51,020 --> 00:27:52,854 Doslova jsem zkopírovat a vložit jej. 587 00:27:52,854 --> 00:27:54,270 Opravdu jen jako jako chleba drobeček. 588 00:27:54,270 --> 00:27:56,260 >> Trochu vodítkem pro kompilátor. 589 00:27:56,260 --> 00:27:58,860 Já nevím, co to dělá ještě, ale já jsem slíbil, že vás 590 00:27:58,860 --> 00:28:00,260 , že bude existovat nakonec. 591 00:28:00,260 --> 00:28:04,010 A to je důvod, proč to line-- v linka 16-- končí středníkem. 592 00:28:04,010 --> 00:28:05,486 To je nadbytečná záměrné. 593 00:28:05,486 --> 00:28:05,986 Ano? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Pokud jste propojit knihovnu na to-- oh, dobrá otázka. 596 00:28:14,360 --> 00:28:17,350 Sharp obsahuje soubor záhlaví inkluze. 597 00:28:17,350 --> 00:28:20,040 Potřebujete, aby bylo-- by téměř vždy na samém vrcholu 598 00:28:20,040 --> 00:28:23,270 souboru pro similar-- pro přesně stejný důvod, že ano. 599 00:28:23,270 --> 00:28:26,430 Vzhledem k tomu, ve standardní io.h je doslova linka 600 00:28:26,430 --> 00:28:30,560 jako je toto, ale se slovem printf, a s jeho argumenty a jeho návratový typ. 601 00:28:30,560 --> 00:28:33,310 A tak tím, že dělá ostrý obsahovat až zde to, co jste doslova dělat 602 00:28:33,310 --> 00:28:36,380 je kopírování a vkládání obsahu někoho jiného sepsal vrchol. 603 00:28:36,380 --> 00:28:39,660 Tím cluing kód do Skutečnost, že existují tyto funkce. 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 >> Přesně tak. 607 00:28:48,260 --> 00:28:51,690 Tak velmi chytrý a správné řešením by bylo, víš co? 608 00:28:51,690 --> 00:28:53,760 Já nevím, co prototyp je, ale vím, 609 00:28:53,760 --> 00:28:56,390 když jsem pochopil, že C je právě hloupí a rethinks shora dolů. 610 00:28:56,390 --> 00:28:57,820 Tak pojďme dát to, co chce. 611 00:28:57,820 --> 00:29:01,650 Pojďme snížit tento kód, vložte jej do top, a nyní stiskněte hlavní dole. 612 00:29:01,650 --> 00:29:03,470 I to by mělo problém vyřešit. 613 00:29:03,470 --> 00:29:07,409 >> Ale můžete velmi snadno přijít s scénář, ve kterém je třeba volat B, 614 00:29:07,409 --> 00:29:10,075 a možná i B zavolá zpět do A. Tento je něco, co nazývá rekurze, 615 00:29:10,075 --> 00:29:11,370 a vrátíme se k tomu. 616 00:29:11,370 --> 00:29:13,911 A to může nebo nemusí být dobrý věc, ale můžete určitě 617 00:29:13,911 --> 00:29:15,110 zlomit toto řešení. 618 00:29:15,110 --> 00:29:17,690 >> A navíc, já bych tvrdí, stylisticky, 619 00:29:17,690 --> 00:29:20,760 zvláště když své programy stát se tak dlouho a tak dlouho, 620 00:29:20,760 --> 00:29:23,064 je to prostě super pohodlné aby hlavní nahoře 621 00:29:23,064 --> 00:29:25,730 protože je to věc, kterou většina programátoři budou se starat o. 622 00:29:25,730 --> 00:29:28,150 A tak je to trochu čistší, pravděpodobně, udělat to tak, jak 623 00:29:28,150 --> 00:29:30,380 Původně jsem to udělal s prototypem i 624 00:29:30,380 --> 00:29:33,396 i když to vypadá trochu redundantní na první pohled. 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 líto, můžete to říct nahlas? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Máte-li změnit umístění provádění 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 Pokud znovu deklarovat to dolů tady, pojďme se podívat, co se děje. 632 00:29:53,780 --> 00:29:55,530 Takže pokud bych to dolů tady říkáš. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Oh, omlouvám se. 635 00:29:58,360 --> 00:29:58,859 Hlasitěji? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Ještě hlasitěji. 638 00:30:04,011 --> 00:30:04,760 Oh, dobrá otázka. 639 00:30:04,760 --> 00:30:05,860 By znehodnotit funkci? 640 00:30:05,860 --> 00:30:08,901 Víte, po všech těch letech, jsem se nikdy dát prototyp později. 641 00:30:08,901 --> 00:30:13,810 Takže pojďme udělat, aby funkce 1 po tom, že. 642 00:30:13,810 --> 00:30:15,279 >> [Mumlá] 643 00:30:15,279 --> 00:30:16,320 David J. Malan: Oh, počkej. 644 00:30:16,320 --> 00:30:17,944 Stále ještě musíme dát všechno, co se nahoře. 645 00:30:17,944 --> 00:30:21,400 Tak pojďme na to tady, když jsem pochopit vaši otázku správně. 646 00:30:21,400 --> 00:30:24,700 Dávám všechno, včetně prototyp výše uvedené hlavní, 647 00:30:24,700 --> 00:30:28,180 ale dávám prototyp pod provedení. 648 00:30:28,180 --> 00:30:33,190 >> Takže když udělám jedno, já jdu zpět error-- nepoužívané proměnné n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Oh, tady. 651 00:30:37,860 --> 00:30:38,360 Děkuji vám. 652 00:30:38,360 --> 00:30:39,430 Pojďme se podívat, zbavíme to. 653 00:30:39,430 --> 00:30:41,304 To je jiná chyba, tak se pojďme ignorovat. 654 00:30:41,304 --> 00:30:43,910 Pojďme se velmi rychle předělat to. 655 00:30:43,910 --> 00:30:48,100 >> OK, takže data argument, který nebyl používá formátovací řetězec 656 00:30:48,100 --> 00:30:52,310 n-- oh, je to proto, Změnil jsem se na to tady. 657 00:30:52,310 --> 00:30:55,885 Dobře víme, co je odpověď bude na-- v pořádku, jdeme na to. 658 00:30:55,885 --> 00:31:00,560 Aha, díky za pozitivní. 659 00:31:00,560 --> 00:31:03,430 Tak jo, budu opravit tento kód after-- ignorovat tuto konkrétní chybu 660 00:31:03,430 --> 00:31:08,300 protože to byl-- to funguje, je odpověď. 661 00:31:08,300 --> 00:31:11,560 >> Takže to nepřepíše to, co jste právě udělal. 662 00:31:11,560 --> 00:31:14,800 Mám podezření, že kompilátor je napsán takovým způsobem, 663 00:31:14,800 --> 00:31:18,420 že ignoruje prototypu protože v těle, abych tak řekl, 664 00:31:18,420 --> 00:31:20,922 z funkce již byla provedena výš. 665 00:31:20,922 --> 00:31:23,380 Já bych skutečně konzultovat manuál překladače 666 00:31:23,380 --> 00:31:26,171 pochopit, jestli existuje nějaký jiný implikace, ale na první pohled 667 00:31:26,171 --> 00:31:29,290 jen tím, že se snaží a experimentování, se zdá, že žádný vliv. 668 00:31:29,290 --> 00:31:30,730 Dobrá otázka. 669 00:31:30,730 --> 00:31:33,660 >> Takže pojďme kupředu nyní, pohybující se od nežádoucích účinků, které 670 00:31:33,660 --> 00:31:36,660 jsou funkce, které něco takového vizuálně na obrazovce printf, 671 00:31:36,660 --> 00:31:38,090 ale nevrací hodnotu. 672 00:31:38,090 --> 00:31:41,550 A funkce, které mají návratnost hodnoty, jako jsme právě viděli několik. 673 00:31:41,550 --> 00:31:45,350 Už jsme viděli tento pojem rozsahu, a uvidíme to znovu a znovu. 674 00:31:45,350 --> 00:31:47,210 Ale teď znovu, použít pravidlo 675 00:31:47,210 --> 00:31:51,410 že proměnná může být použita pouze uvnitř nejvíce nedávno otevřela 676 00:31:51,410 --> 00:31:54,350 a uzavřené složené závorky, jak jsme viděl v tomto konkrétním příkladu. 677 00:31:54,350 --> 00:31:56,910 >> A jak jste poukázal na to, je ability-- 678 00:31:56,910 --> 00:32:00,040 můžete vyřešit některé z těchto problémů tím, že proměnnou globálně 679 00:32:00,040 --> 00:32:01,290 na samém vrcholu souboru. 680 00:32:01,290 --> 00:32:03,630 Ale téměř ve všech případech bychom se šklebí na to, 681 00:32:03,630 --> 00:32:06,170 a dokonce ani jít do tohoto řešení pro teď. 682 00:32:06,170 --> 00:32:09,890 Takže teď, stánek s jídlem je, že proměnné mají tento pojem rozsahu. 683 00:32:09,890 --> 00:32:13,430 >> Ale teď se pojďme podívat na další suchou cestou skutečně hledá 684 00:32:13,430 --> 00:32:15,810 na některé docela zajímavé detaily implementace. 685 00:32:15,810 --> 00:32:17,810 Jak bychom mohli reprezentovat informace. 686 00:32:17,810 --> 00:32:20,370 A my už se na to v prvním týdnu třídy. 687 00:32:20,370 --> 00:32:23,320 Při pohledu na binární soubory, a připomenout si z desítkové soustavě. 688 00:32:23,320 --> 00:32:28,310 >> Ale pamatujete z minulého týdne, že C má různé typy dat a svazků více, 689 00:32:28,310 --> 00:32:30,600 ale nejužitečnější z nich teď by mohly být následující. 690 00:32:30,600 --> 00:32:36,030 Char, nebo znak, který se stane být jeden bajt, nebo osmi bitů celkem. 691 00:32:36,030 --> 00:32:40,060 A to znamená, že velikost z char je jen jeden bajt. 692 00:32:40,060 --> 00:32:45,370 Bajt je osm bitů, tak to znamená, že můžeme představovat, jak mnoho znaků. 693 00:32:45,370 --> 00:32:47,320 Kolik písmen nebo Symboly na klávesnici 694 00:32:47,320 --> 00:32:49,210 máme-li jeden byte nebo osmi bitů. 695 00:32:49,210 --> 00:32:51,546 Vzpomeňte si na týden nula. 696 00:32:51,546 --> 00:32:53,420 Pokud máte osm bitů, kolik celkové hodnoty 697 00:32:53,420 --> 00:32:55,503 můžete reprezentovat s vzory nul a jedniček? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 One-- víc než to. 700 00:33:00,260 --> 00:33:03,490 Takže 256 příspěvků, pokud vás začíná počítat od nuly. 701 00:33:03,490 --> 00:33:07,120 Takže pokud máte osm bits-- takže pokud měli své binární žárovky tady zase, 702 00:33:07,120 --> 00:33:12,180 bychom mohli zase ty žárovky na a pryč v kterémkoliv z 256 unikátních vzorů. 703 00:33:12,180 --> 00:33:13,640 >> Teď je to trochu problematické. 704 00:33:13,640 --> 00:33:16,857 Ani ne tak pro angličtinu a Románské jazyky, ale určitě 705 00:33:16,857 --> 00:33:19,190 když se zavést pro Například asijské jazyky, které 706 00:33:19,190 --> 00:33:22,580 mají daleko více symbolů, než jako 26 písmen abecedy. 707 00:33:22,580 --> 00:33:24,390 Vlastně bychom mohli potřebovat více než jeden bajt. 708 00:33:24,390 --> 00:33:28,240 A naštěstí v V posledních letech se společnost 709 00:33:28,240 --> 00:33:31,040 Přijaté další normy, které používají více než jeden bajt na jedno nabití. 710 00:33:31,040 --> 00:33:34,210 >> Ale teď v C, výchozí je jen jeden byte nebo osm bitů. 711 00:33:34,210 --> 00:33:38,195 Číslo, zatím, jsou čtyři bajtů, jinak známý jako 32 bitů. 712 00:33:38,195 --> 00:33:41,320 Což znamená, že to, co je co největší číslo můžeme reprezentovat pomocí int 713 00:33:41,320 --> 00:33:41,820 zřejmě? 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 čtyři miliardy dávat nebo brát. 717 00:33:46,760 --> 00:33:49,840 2 k 32th moc, kdybychom předpokládat žádné negativní čísla 718 00:33:49,840 --> 00:33:52,530 a stačí použít všechny pozitivní čísla, je to čtyři miliardy 719 00:33:52,530 --> 00:33:53,730 dávat nebo brát možnosti. 720 00:33:53,730 --> 00:33:57,890 Float, zatím, je jiný typ datového typu v jazyce C. Je to stále číslo, 721 00:33:57,890 --> 00:33:58,990 ale je to reálné číslo. 722 00:33:58,990 --> 00:34:00,660 Něco s desetinnou čárkou. 723 00:34:00,660 --> 00:34:03,000 A ukázalo se, že C také používá čtyři bajty 724 00:34:03,000 --> 00:34:05,340 představují plovoucí bodové hodnoty. 725 00:34:05,340 --> 00:34:09,420 >> Bohužel, kolik plovoucí bodové hodnoty jsou tam venku ve světě? 726 00:34:09,420 --> 00:34:11,582 Kolik reálná čísla jsou tam? 727 00:34:11,582 --> 00:34:13,540 Tam je nekonečný číslo, a když na to přijde 728 00:34:13,540 --> 00:34:15,164 tam je nekonečně mnoho celých čísel. 729 00:34:15,164 --> 00:34:18,070 Takže jsme už trochu kopat sami díru zde. 730 00:34:18,070 --> 00:34:21,780 Kdy zřejmě v computers-- na nejméně programy napsané v jazyce C na them-- 731 00:34:21,780 --> 00:34:24,110 může počítat jen tak vysoko, jak čtyři miliardy dávat nebo brát, 732 00:34:24,110 --> 00:34:26,260 a plovoucí desetinnou čárkou hodnoty může jen zdánlivě 733 00:34:26,260 --> 00:34:28,330 nějaké konečné množství přesnosti. 734 00:34:28,330 --> 00:34:30,810 Pouze tolik číslic za jejich desetinného místa. 735 00:34:30,810 --> 00:34:32,822 >> Vzhledem k tomu, samozřejmě, pokud máte pouze 32 bitů, 736 00:34:32,822 --> 00:34:36,030 Nevím, jak jsme jít o představuje skutečnou numbers-- pravděpodobně 737 00:34:36,030 --> 00:34:37,409 s různými typy vzorů. 738 00:34:37,409 --> 00:34:40,030 Ale je tu určitě konečný počet těchto vzorů, 739 00:34:40,030 --> 00:34:41,830 tak i zde, je to problematické. 740 00:34:41,830 --> 00:34:43,710 >> Nyní můžeme lehce vyhnout problému. 741 00:34:43,710 --> 00:34:45,710 Pokud nechcete používat plovák, můžete použít double 742 00:34:45,710 --> 00:34:50,230 v jazyce C, která vám dává osm bajtů, které je způsob, jak více možných vzory nul 743 00:34:50,230 --> 00:34:50,730 a ty. 744 00:34:50,730 --> 00:34:55,199 Ale je to ještě konečný, což se děje být problematické, pokud budete psát software 745 00:34:55,199 --> 00:34:57,670 pro grafiku nebo fantazie matematické vzorce. 746 00:34:57,670 --> 00:35:00,410 Takže můžete skutečně chtějí spočítat větší, než je. 747 00:35:00,410 --> 00:35:05,640 Dlouhý long-- hloupě named-- je také osm bajtů, nebo 64 bitů 748 00:35:05,640 --> 00:35:10,260 a je dvakrát tak dlouhá jako int, a je to na dlouhou celočíselnou hodnotu. 749 00:35:10,260 --> 00:35:15,655 >> Fun fact-- pokud int je čtyři byty, jak dlouho je dlouho v C obvykle? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 I čtyři byty, ale long long je osm bajtů, 752 00:35:21,560 --> 00:35:23,050 a to je z historických důvodů. 753 00:35:23,050 --> 00:35:26,450 >> Ale stánek s jídlem teď je jen, že data 754 00:35:26,450 --> 00:35:29,625 být zastoupeny v computer--, která je fyzické zařízení s elektřinou, 755 00:35:29,625 --> 00:35:32,190 to je obecně řízení ty nuly a ones-- 756 00:35:32,190 --> 00:35:34,320 s konečnými částkami přesnosti. 757 00:35:34,320 --> 00:35:35,620 Tak v čem je problém, a pak? 758 00:35:35,620 --> 00:35:37,480 >> No je tu problém celočíselného přetečení. 759 00:35:37,480 --> 00:35:39,780 Není to jen v C, ale v počítače obecně. 760 00:35:39,780 --> 00:35:42,590 Například, je-li toto je byte stojí bit-- 761 00:35:42,590 --> 00:35:45,120 takže pokud je osm bit-- vše z nichž je číslo jedna. 762 00:35:45,120 --> 00:35:47,300 Jaké číslo je to představuje, pokud budeme předpokládat, 763 00:35:47,300 --> 00:35:50,730 je to všechny pozitivní hodnoty v binární? 764 00:35:50,730 --> 00:35:54,410 >> 255, a to není 256, protože nula je nejnižší číslo. 765 00:35:54,410 --> 00:35:56,760 Takže 255 je nejvyšší jeden, ale problém 766 00:35:56,760 --> 00:36:00,330 Předpokládejme, že jsem chtěl, aby zvýšit tuto proměnnou, která 767 00:36:00,330 --> 00:36:04,030 používá osm bitů celkem když chci ji zvyšovat. 768 00:36:04,030 --> 00:36:07,160 >> No, jakmile jsem se přidat jeden až všechny tyto těch, 769 00:36:07,160 --> 00:36:10,500 můžete snad představit visually-- jen jako nesoucí jedno použití decimals-- 770 00:36:10,500 --> 00:36:12,300 něco děje proudit doleva. 771 00:36:12,300 --> 00:36:15,590 A skutečně, když jsem přidat číslo kdo to, co se děje v binární 772 00:36:15,590 --> 00:36:17,670 je to, že přetéká zpět na nulu. 773 00:36:17,670 --> 00:36:21,730 >> Takže pokud jste jen use-- není int, ale jeden byte počítat celá čísla 774 00:36:21,730 --> 00:36:27,170 v programu, podle default-- jakmile se dostanete na 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 přichází po 255, což asi není to, co 776 00:36:32,710 --> 00:36:34,790 uživatel bude očekávat. 777 00:36:34,790 --> 00:36:39,620 >> Nyní zatím v plovoucí desetinnou čárkou svět, Máte také podobný problém. 778 00:36:39,620 --> 00:36:42,670 Ani ne tak s největší number-- i když je to stále problém. 779 00:36:42,670 --> 00:36:45,360 Ale s množstvím přesnosti že můžete reprezentovat. 780 00:36:45,360 --> 00:36:49,490 Takže pojďme se podívat na tento příklad Zde také 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šimněte si, že je to super Jednoduchý program, který 783 00:36:54,280 --> 00:36:56,580 by zřejmě vytisknout, jakou hodnotu? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Co si vsadit, že to bude tisknout i když tam je trochu novou syntaxí 786 00:37:04,110 --> 00:37:05,540 tady? 787 00:37:05,540 --> 00:37:06,700 Tak doufejme, že 0.1. 788 00:37:06,700 --> 00:37:10,000 Takže ekvivalent jednu desetinu protože dělám 1 děleno 10. 789 00:37:10,000 --> 00:37:12,430 Já uložení odpověď v proměnné s názvem f. 790 00:37:12,430 --> 00:37:15,850 Že proměnná je typu float, který je klíčové slovo, jen jsem navrhl existoval. 791 00:37:15,850 --> 00:37:18,910 >> Jsme neviděli předtím, ale to je docela elegantní způsob, jak v printf 792 00:37:18,910 --> 00:37:22,110 určit, kolik číslic jste chtějí vidět po desetinnou čárkou. 793 00:37:22,110 --> 00:37:25,020 Takže tento zápis znamená jen že tady je zástupný symbol. 794 00:37:25,020 --> 00:37:27,900 Je to pro plovoucí desetinnou čárkou hodnota, a oh, mimochodem, 795 00:37:27,900 --> 00:37:31,389 ukázat, že s desetinnou čárkou s jedno číslo za desetinnou čárkou. 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 abych tak řekl, že možná budete chtít. 798 00:37:34,650 --> 00:37:40,450 >> Tak nech mě jít dál a dělat jak plovák-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 a zřejmě 1 děleno 10 je 0.0. 800 00:37:46,660 --> 00:37:47,760 A teď, proč to je? 801 00:37:47,760 --> 00:37:51,380 >> Tak znovu, je počítač s mě doslova, a napsal jsem 1 802 00:37:51,380 --> 00:37:56,680 a psal jsem 10, a hádat, co je předpokládaný typ dat u těchto dvou 803 00:37:56,680 --> 00:37:58,440 hodnoty? 804 00:37:58,440 --> 00:38:00,970 Int, je to technicky něco trochu jiného. 805 00:38:00,970 --> 00:38:04,150 Je to obvykle dlouho, ale je to nakonec integrální hodnota. 806 00:38:04,150 --> 00:38:06,030 Není hodnota s plovoucí čárkou. 807 00:38:06,030 --> 00:38:09,456 >> Což znamená, že pokud je tato je int a to je int, 808 00:38:09,456 --> 00:38:11,830 Problém je, že v počítači nemá schopnost 809 00:38:11,830 --> 00:38:13,680 dokonce uložit tento desetinnou čárkou. 810 00:38:13,680 --> 00:38:16,430 Takže když uděláte jeden rozdělený od 10 pomocí čísel 811 00:38:16,430 --> 00:38:20,950 jak čitatele a jmenovatel, odpověď by měla být 0,1. 812 00:38:20,950 --> 00:38:24,930 Ale protože computer-- ty jsou integers-- 813 00:38:24,930 --> 00:38:27,430 neví, co má dělat s 0,1. 814 00:38:27,430 --> 00:38:30,010 >> Takže to, co je jasně dělá? 815 00:38:30,010 --> 00:38:33,120 Je to jen házení je pryč, a to, co jsem viděl v konečném důsledku 816 00:38:33,120 --> 00:38:38,830 0.0 jen proto, že jsem trval na tom, že printf ukaž mi jedno desetinné místo. 817 00:38:38,830 --> 00:38:41,740 Ale problém je, že pokud dělit celé číslo na celé číslo, 818 00:38:41,740 --> 00:38:44,347 budete get-- podle definice z C-- celé číslo. 819 00:38:44,347 --> 00:38:46,680 A že to nebude dělat něco hezkého a pohodlně 820 00:38:46,680 --> 00:38:49,040 jako kolo to až do Nejbližší jeden nahoru nebo dolů. 821 00:38:49,040 --> 00:38:51,860 Bude to zkrátit vše za desetinnou čárkou. 822 00:38:51,860 --> 00:38:54,030 >> Takže jen intuitivně, co je pravděpodobně opravit? 823 00:38:54,030 --> 00:38:55,351 Co je to nejjednodušší oprava tady? 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 Přesně tak. 827 00:39:01,100 --> 00:39:04,200 Proč se prostě chovat jako ty efektivně s plovoucí desetinnou čárkou hodnoty 828 00:39:04,200 --> 00:39:05,860 a proměnili je v plováky nebo čtyřhra. 829 00:39:05,860 --> 00:39:10,500 A teď když to udělám, aby plováky-0, nebo když jsem sestavit plováky-1, 830 00:39:10,500 --> 00:39:12,570 , který je totožný s to, co bylo právě navrhla. 831 00:39:12,570 --> 00:39:16,400 A teď jsem to plave-0, teď budu mít 0,1. 832 00:39:16,400 --> 00:39:17,234 >> Teď je to úžasné. 833 00:39:17,234 --> 00:39:19,441 Ale teď budu dělat něco trochu jiného. 834 00:39:19,441 --> 00:39:22,280 Jsem zvědavý na to, co je opravdu děje pod kapotou, 835 00:39:22,280 --> 00:39:26,050 a budu tisknout se na 28 desetinných míst. 836 00:39:26,050 --> 00:39:29,730 Chci opravdu vidět 0.1000-- infinite-- 837 00:39:29,730 --> 00:39:32,710 [Neslyšitelné] 27 nuly po té 0,1. 838 00:39:32,710 --> 00:39:34,740 >> No uvidíme, jestli to je to, co jsem opravdu dostanete. 839 00:39:34,740 --> 00:39:39,430 Ujistěte se plave-0 stejný soubor. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Pojďme se zaměřit na dramatické odpověď. 842 00:39:44,380 --> 00:39:49,980 Celou tu dobu, co jste byli myšlení 1 děleno 10 je 10%, nebo 0,1. 843 00:39:49,980 --> 00:39:50,810 To ne. 844 00:39:50,810 --> 00:39:53,210 Alespoň pokud jde Počítač je znepokojen. 845 00:39:53,210 --> 00:39:57,060 >> Nyní why-- OK, to je kompletní lež 1 děleno 10 je 0,1. 846 00:39:57,060 --> 00:39:59,710 Ale to není why-- stánek s jídlem dnes. 847 00:39:59,710 --> 00:40:04,010 Tak proč se počítač myslet, Na rozdíl od nás všech v místnosti, 848 00:40:04,010 --> 00:40:06,870 že 1 děleno 10 je ve skutečnosti, že blázen hodnota? 849 00:40:06,870 --> 00:40:10,620 Co je to počítač dělá zřejmě? 850 00:40:10,620 --> 00:40:12,490 Co je to? 851 00:40:12,490 --> 00:40:13,785 >> Není to přetečení, sama o sobě. 852 00:40:13,785 --> 00:40:15,910 Přetečení je typicky při obtékání kolem hodnoty. 853 00:40:15,910 --> 00:40:18,970 Je to otázka nepřesnosti v hodnota s plovoucí čárkou 854 00:40:18,970 --> 00:40:22,220 kde máte pouze 32 nebo možná i 64 bit. 855 00:40:22,220 --> 00:40:25,230 Ale pokud tam je nekonečný počet reálných numbers-- 856 00:40:25,230 --> 00:40:27,940 čísla s desetinnými místy a čísla thereafter-- jistě 857 00:40:27,940 --> 00:40:29,380 si nemůže představovat všechny z nich. 858 00:40:29,380 --> 00:40:32,870 Takže počítač uveden nám nejbližší zápas 859 00:40:32,870 --> 00:40:37,090 na hodnotu, může představovat, že pomocí počet bitů na hodnotu vlastně chci, 860 00:40:37,090 --> 00:40:38,690 což je 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Bohužel, pokud máte začít dělat matematiku, nebo si 862 00:40:40,685 --> 00:40:44,360 začátek zahrnující tyto druhy plovoucí bodové hodnoty ve významných programs-- 863 00:40:44,360 --> 00:40:46,770 finanční software, vojenské software-- cokoliv 864 00:40:46,770 --> 00:40:49,090 kde je vnímání asi dost důležité. 865 00:40:49,090 --> 00:40:51,520 A začnete přidávat čísla, jako je tento, a začátek 866 00:40:51,520 --> 00:40:54,050 běží, že software s opravdu velkými vstupy 867 00:40:54,050 --> 00:40:56,890 nebo mnoho hodin nebo šarží dní nebo spoustu let, 868 00:40:56,890 --> 00:41:01,060 Tyto malinké chyby Jistě lze přidat až v průběhu času. 869 00:41:01,060 --> 00:41:04,252 >> Nyní jako stranou, pokud jste někdy Viděl Superman 3 nebo kancelářské prostory 870 00:41:04,252 --> 00:41:05,960 a vy byste mohli vyvolat jak ti kluci ukradli 871 00:41:05,960 --> 00:41:08,668 hodně peněz ze svého počítače pomocí plovoucí bodové hodnoty 872 00:41:08,668 --> 00:41:11,290 a sečtením malý Zbytky, doufejme, že film 873 00:41:11,290 --> 00:41:12,390 nyní dává větší smysl. 874 00:41:12,390 --> 00:41:14,930 To je to, co bylo zmiňovat se v tom filmu. 875 00:41:14,930 --> 00:41:16,710 Skutečnost, že většina společnosti nebude vypadat 876 00:41:16,710 --> 00:41:18,600 Po určitém počtu desetinných míst, 877 00:41:18,600 --> 00:41:20,009 ale to jsou zlomky centů. 878 00:41:20,009 --> 00:41:22,550 Takže začnete přidávat je do, můžete začít dělat spoustu peněz 879 00:41:22,550 --> 00:41:23,424 na váš bankovní účet. 880 00:41:23,424 --> 00:41:25,160 Tak to je Kancelářské prostory vysvětlil. 881 00:41:25,160 --> 00:41:28,220 >> Teď bohužel mimo Kancelářské prostory, tam 882 00:41:28,220 --> 00:41:31,794 jsou některé oprávněně trápí a významné dopady 883 00:41:31,794 --> 00:41:33,710 z těchto druhů podkladové rozhodnutí design, 884 00:41:33,710 --> 00:41:35,990 a opravdu jeden z důvodů, používáme C v průběhu 885 00:41:35,990 --> 00:41:39,640 je tak, že máte skutečně tento důvod up pochopení toho, jak počítače pracují, 886 00:41:39,640 --> 00:41:42,440 jak software funguje, a ne brát nic jako samozřejmost. 887 00:41:42,440 --> 00:41:45,820 >> A skutečně bohužel, i když že základní porozumění, 888 00:41:45,820 --> 00:41:47,370 my lidé dělají chyby. 889 00:41:47,370 --> 00:41:51,310 A to, co si myslel, jsem, že podělit se to osm minut video zde přijata 890 00:41:51,310 --> 00:41:56,980 z epizody Divy, které je vzdělávací pořad o tom, jak věci fungují 891 00:41:56,980 --> 00:42:00,370 že maluje dva obrázky kdy nesprávné použití 892 00:42:00,370 --> 00:42:02,540 a porozumění plovoucí čárkou 893 00:42:02,540 --> 00:42:05,610 vedly k některým významným nešťastné výsledky. 894 00:42:05,610 --> 00:42:06,363 Pojďme se podívat. 895 00:42:06,363 --> 00:42:07,029 [PŘEHRÁVÁNÍ] 896 00:42:07,029 --> 00:42:11,290 -My Nyní vrátit k "inženýrství Katastrofy "na Divy. 897 00:42:11,290 --> 00:42:12,940 Počítače. 898 00:42:12,940 --> 00:42:15,580 Všichni jsme si zvykli na často nepříjemné problémy, které 899 00:42:15,580 --> 00:42:20,960 Dostal se them-- chyby, viry a Software glitches-- pro malé ceny 900 00:42:20,960 --> 00:42:23,100 zaplatit za pohodlí. 901 00:42:23,100 --> 00:42:27,770 Ale v high-tech a vysokou rychlostí vojenské a vesmírný program aplikace, 902 00:42:27,770 --> 00:42:32,780 nejmenší problém může se zvětší do katastrofy. 903 00:42:32,780 --> 00:42:38,880 >> Dne 04.6.1996 zpracovali vědci zahájit bezpilotní Ariane 5 rakety. 904 00:42:38,880 --> 00:42:41,190 To nesl vědecké satelity navržený 905 00:42:41,190 --> 00:42:44,570 stanovit přesně, jak Zemské magnetické pole interaguje 906 00:42:44,570 --> 00:42:47,380 se solárními větry. 907 00:42:47,380 --> 00:42:50,580 Raketa byla postavena na Evropská kosmická agentura, 908 00:42:50,580 --> 00:42:54,400 a zvedl se od svého zařízení na pobřeží Francouzské Guyany. 909 00:42:54,400 --> 00:42:57,520 >> -Na Asi 37 sekund do let, se poprvé 910 00:42:57,520 --> 00:42:59,070 Všiml něco špatně. 911 00:42:59,070 --> 00:43:02,240 Že se trysky se otáčení takovým způsobem, že by se měl opravdu ne. 912 00:43:02,240 --> 00:43:06,550 Kolem 40 sekund do letu, jasně vozidlo bylo v potížích, 913 00:43:06,550 --> 00:43:08,820 a to je, když oni dělali rozhodnutí o jeho zničení. 914 00:43:08,820 --> 00:43:12,370 Bezpečnostní důstojník rozsah, s obrovské střeva, stiskl tlačítko 915 00:43:12,370 --> 00:43:18,030 a vyhodil raketu před tím, než mohl být nebezpečné pro veřejnou bezpečnost. 916 00:43:18,030 --> 00:43:21,010 >> Tohle byla panna plavba Ariane 5, 917 00:43:21,010 --> 00:43:23,920 a jeho zničení se místo, protože vady 918 00:43:23,920 --> 00:43:25,932 vložené do softwaru rakety. 919 00:43:25,932 --> 00:43:27,640 -The Problém na Ariane bylo, že 920 00:43:27,640 --> 00:43:30,500 bylo číslo, které vyžaduje 64 bitů k vyjádření, 921 00:43:30,500 --> 00:43:33,560 a chtěli převést je na 16-bitové číslo. 922 00:43:33,560 --> 00:43:36,820 Předpokládali, že počet se nikdy nebude moc velký. 923 00:43:36,820 --> 00:43:40,940 Že většina z těchto číslic v 64-bitové číslo bylo nulové. 924 00:43:40,940 --> 00:43:42,450 Se mýlili. 925 00:43:42,450 --> 00:43:45,000 >> -The Neschopnost jednoho software přijmout 926 00:43:45,000 --> 00:43:49,460 druh číslo generované jiný byl u kořene selhání. 927 00:43:49,460 --> 00:43:54,260 Vývoj softwaru se stala velmi nákladné součástí nové technologie. 928 00:43:54,260 --> 00:43:57,060 Ariane 4 Raketa měla byla velmi úspěšná. 929 00:43:57,060 --> 00:44:01,600 Tolik softwaru vytvořeného pro byla také použita v Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -The Základním problémem bylo to, že Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Byla faster-- zrychlil rychleji, a software se neúčtuje za to. 932 00:44:11,200 --> 00:44:14,910 >> -The Zničení rakety Byla to obrovská finanční katastrofa. 933 00:44:14,910 --> 00:44:18,630 Vše kvůli chybě minut softwaru. 934 00:44:18,630 --> 00:44:21,160 Ale to nebyl první problémy konverze dat časové 935 00:44:21,160 --> 00:44:24,770 soužil moderní raketové techniky. 936 00:44:24,770 --> 00:44:28,020 >> -V 1991 se zahájením z první války v Perském zálivu, 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 konverze číslo. 939 00:44:32,465 --> 00:44:36,760 A jako výsledek 28 lidé-- 28 Američtí soldiers-- bylo zabito, 940 00:44:36,760 --> 00:44:39,010 a asi sto dalších zraněno. 941 00:44:39,010 --> 00:44:42,830 Když Patriot, který měl na ochranu proti příchozí pluje, 942 00:44:42,830 --> 00:44:45,780 nedokázal vystřelit raketu. 943 00:44:45,780 --> 00:44:51,610 >> Kdy Irák napadl Kuvajt, a Ameriku zahájila Pouštní bouře na počátku roku 1991, 944 00:44:51,610 --> 00:44:55,720 Patriot raketové baterie byly rozmístěny k ochraně Saúdské Arábie a Izrael 945 00:44:55,720 --> 00:44:59,180 od iráckých Scud raketových útoků. 946 00:44:59,180 --> 00:45:03,080 Patriot je středního doletu US povrch-k-vysílat systém 947 00:45:03,080 --> 00:45:06,530 vyráběné společností Raytheon. 948 00:45:06,530 --> 00:45:09,500 >> -Velikost Patriot interceptor itself-- 949 00:45:09,500 --> 00:45:14,705 Je to o přibližně 20 metrů dlouhá, a váží asi 2.000 liber. 950 00:45:14,705 --> 00:45:19,090 A to s sebou nese bojovou hlavici asi, Myslím, že to je zhruba 150 liber. 951 00:45:19,090 --> 00:45:23,880 A hlavice je sám o sobě vysoce výbušný, který 952 00:45:23,880 --> 00:45:26,700 má fragmenty kolem něj. 953 00:45:26,700 --> 00:45:31,630 Takže pouzdro hlavice je navrženy tak, aby jednala jako brokovnice. 954 00:45:31,630 --> 00:45:34,040 >> -The Rakety jsou prováděny čtyři kontejneru, 955 00:45:34,040 --> 00:45:37,170 a jsou přepravovány na návěsu. 956 00:45:37,170 --> 00:45:44,880 >> -The Patriot Protiraketový systém sahá nejméně 20 let. 957 00:45:44,880 --> 00:45:48,380 Původně byl vyvinut jako protiletadlová raketová 958 00:45:48,380 --> 00:45:50,810 sestřelit nepřátelské letouny. 959 00:45:50,810 --> 00:45:54,410 V první válce v Perském zálivu když ta válka přišla, 960 00:45:54,410 --> 00:45:59,650 Armáda chtěla používat to, aby sestřelit pluje, ne letadel. 961 00:45:59,650 --> 00:46:03,580 Irácké letectvo bylo není tak velký problém, 962 00:46:03,580 --> 00:46:06,590 ale armáda byla starosti pluje. 963 00:46:06,590 --> 00:46:10,120 A tak se snažili upgrade Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Nepřítele raketa jede Mach 5 965 00:46:12,740 --> 00:46:15,670 se bude dost náročné. 966 00:46:15,670 --> 00:46:18,440 Ale když Patriot byl běhavý do provozu, 967 00:46:18,440 --> 00:46:22,580 armáda nebyla vědoma Irácký změna, která 968 00:46:22,580 --> 00:46:25,880 z jejich Pluje téměř nemožné ní. 969 00:46:25,880 --> 00:46:30,690 >> Co se stalo je, že pluje přicházely byly nestabilní. 970 00:46:30,690 --> 00:46:32,000 Byli vratký. 971 00:46:32,000 --> 00:46:37,210 Důvodem byla Iraqis-- za účelem získání 600 km z 972 00:46:37,210 --> 00:46:41,680 na 300 kilometrů rozsah missile-- vzal váhu z přední hlavice, 973 00:46:41,680 --> 00:46:43,340 a dělal hlavice lehčí. 974 00:46:43,340 --> 00:46:48,490 Takže teď Patriot se snaží přijít na Scud, a většina z time-- 975 00:46:48,490 --> 00:46:52,880 Drtivá většina time-- by to prostě létat plout. 976 00:46:52,880 --> 00:46:57,120 >> -Jakmile Provozovatelů Patriot systému si uvědomil, že Patriot minul svůj cíl, 977 00:46:57,120 --> 00:47:01,630 oni odpálili Patriot v hlavici aby se zabránilo možným nehodám případě, že 978 00:47:01,630 --> 00:47:04,440 měla dovoleno se dostat na zem. 979 00:47:04,440 --> 00:47:08,700 >> To bylo to, co většina lidí viděla jako velké ohnivé koule na obloze, 980 00:47:08,700 --> 00:47:14,180 a nepochopený jako zachytí Scud hlavic. 981 00:47:14,180 --> 00:47:18,020 >> -Although V noční obloze, Patriots Zdálo se, že úspěšně ničit 982 00:47:18,020 --> 00:47:23,280 Pluje, na Zahránu by mohlo být žádná chyba o jeho výkonu. 983 00:47:23,280 --> 00:47:27,930 Tam radarový systém Patriot ztratil na příchozí Scud 984 00:47:27,930 --> 00:47:30,260 a kvůli nikdy zahájena na softwarové chyby. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Byli to Izraelci, kteří jako první objevili , že čím delší je systém byl na, 987 00:47:38,880 --> 00:47:41,130 větší časový rozdíl se stala. 988 00:47:41,130 --> 00:47:44,770 Vzhledem k hodinami vložené v počítači v systému. 989 00:47:44,770 --> 00:47:48,190 >> -Asi Dva týdny před tragédie v Dhahran, 990 00:47:48,190 --> 00:47:50,720 Izraelci údajně Ministerstvo obrany 991 00:47:50,720 --> 00:47:52,410 , že systém ztrácí čas. 992 00:47:52,410 --> 00:47:54,410 Po asi osm hodin chodu, oni si všimli 993 00:47:54,410 --> 00:47:57,690 že systém je stále znatelně méně přesné. 994 00:47:57,690 --> 00:48:01,850 Ministerstvo obrany odpověděl tím, že vyprávění všech baterií Patriot 995 00:48:01,850 --> 00:48:04,800 nenechat systémy na dlouhou dobu. 996 00:48:04,800 --> 00:48:06,980 Oni nikdy neřekl, co dávno bylo. 997 00:48:06,980 --> 00:48:09,140 8 hodin, 10 hodin, tisíce hodin. 998 00:48:09,140 --> 00:48:11,300 Nikdo nevěděl. 999 00:48:11,300 --> 00:48:13,320 >> -The Patriot baterie umístěný v kasárnách 1000 00:48:13,320 --> 00:48:18,310 na Zahránu a jeho chybný interní hodiny byl na více než 100 hodin 1001 00:48:18,310 --> 00:48:21,520 v noci 25. února. 1002 00:48:21,520 --> 00:48:25,792 >> -Je Sledovat čas s přesností asi desetina sekundy. 1003 00:48:25,792 --> 00:48:27,950 Nyní desetiny sekundy je zajímavé číslo 1004 00:48:27,950 --> 00:48:31,850 protože nemůže být vyjádřena v binárním přesně, což 1005 00:48:31,850 --> 00:48:36,500 znamená, že nemůže být vyjádřen přesně v každém moderním digitálním počítači. 1006 00:48:36,500 --> 00:48:41,070 Je těžké tomu uvěřit, ale použít jako příklad. 1007 00:48:41,070 --> 00:48:43,420 >> Vezměme číslo třetina. 1008 00:48:43,420 --> 00:48:47,330 Jedna třetina nemůže být vyjádřené v desítkové soustavě přesně. 1009 00:48:47,330 --> 00:48:52,060 Jedna třetina je 0,333 děje na nekonečno. 1010 00:48:52,060 --> 00:48:56,420 Neexistuje žádný způsob, jak to udělat, aby se absolutní přesnost v desítkové soustavě. 1011 00:48:56,420 --> 00:48:59,530 To je přesně ten druh problému které se stalo v Patriot. 1012 00:48:59,530 --> 00:49:04,040 Čím delší je systém běžel, hůře se stal time error. 1013 00:49:04,040 --> 00:49:08,840 >> -Po 100 hodinách provozu, Chyba v té době byl jen asi třetina 1014 00:49:08,840 --> 00:49:10,440 sekundy. 1015 00:49:10,440 --> 00:49:14,150 Ale pokud jde o zaměření raketa jede Mach 5, 1016 00:49:14,150 --> 00:49:18,560 to vedlo ke sledování chyba více než 600 metrů. 1017 00:49:18,560 --> 00:49:21,870 Bylo by fatální chyba pro vojáky v Zahránu. 1018 00:49:21,870 --> 00:49:28,455 >> Co se stalo se Scud start byl zjištěna pomocí satelitů včasného varování, 1019 00:49:28,455 --> 00:49:32,710 a věděli Scud se blíží v jejich obecném směru. 1020 00:49:32,710 --> 00:49:35,150 Nevěděli, kde to přichází. 1021 00:49:35,150 --> 00:49:38,210 Bylo nyní na radaru součást systému Patriot 1022 00:49:38,210 --> 00:49:43,150 bránit Zahránu najít a udržet dráha příchozí nepřátelské rakety. 1023 00:49:43,150 --> 00:49:44,561 >> -The Radar byl velmi chytrý. 1024 00:49:44,561 --> 00:49:46,560 To by ve skutečnosti sledovat pozice Scud 1025 00:49:46,560 --> 00:49:48,930 a předvídat, kde to asi bude 1026 00:49:48,930 --> 00:49:51,380 příště radar poslal puls ven. 1027 00:49:51,380 --> 00:49:53,040 To se nazývá rozsah brána. 1028 00:49:53,040 --> 00:49:57,620 >> -Pak Jakmile Patriot rozhodne dost času má 1029 00:49:57,620 --> 00:50:02,400 prošel se vrátit a zkontrolovat další místo pro tento detekovaným objektem 1030 00:50:02,400 --> 00:50:03,550 se vrací. 1031 00:50:03,550 --> 00:50:07,820 Takže když se vrátil do špatné místo, to pak nevidí žádný objekt. 1032 00:50:07,820 --> 00:50:10,360 A rozhodne, že neexistuje žádný objekt. 1033 00:50:10,360 --> 00:50:13,630 To bylo falešné detekce a to klesne stopu. 1034 00:50:13,630 --> 00:50:16,970 >> -The Příchozí Scud zmizel z obrazovky radaru, 1035 00:50:16,970 --> 00:50:20,200 a vteřin později ho narazila do kasáren. 1036 00:50:20,200 --> 00:50:22,570 Scud zabil 28. 1037 00:50:22,570 --> 00:50:26,110 To bylo poslední, kdo vystřelil během první války v Perském zálivu. 1038 00:50:26,110 --> 00:50:31,920 Je tragické, že aktualizovaný software přišel za úsvitu následujícího dne. 1039 00:50:31,920 --> 00:50:34,870 Software vada měla bylo pevné, zavírací 1040 00:50:34,870 --> 00:50:39,150 jedna kapitola v problémové Historie Patriot rakety. 1041 00:50:39,150 --> 00:50:40,030 >> [END VIDEOPŘEHRÁVÁNÍ] 1042 00:50:40,030 --> 00:50:41,488 >> David J. Malan: To je pro CS50. 1043 00:50:41,488 --> 00:50:42,820 Uvidíme se ve středu. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [Přehrávání hudby] 1046 00:50:50,370 --> 00:54:23,446