1 00:00:00,000 --> 00:00:10,920 >> [Přehrávání hudby] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J Malan: Tak jo, vítejte zpátky CS50. 3 00:00:14,680 --> 00:00:16,500 To je začátek týdne dva. 4 00:00:16,500 --> 00:00:18,940 Slovo od jednoho z našich přátelé na akademické půdě - 5 00:00:18,940 --> 00:00:22,620 Máte-li zájem, možná, a to buď nyní nebo v nějakém budoucím období 6 00:00:22,620 --> 00:00:25,670 ještě jednou pohodlnější, výuka studenti středních škol trochu 7 00:00:25,670 --> 00:00:27,680 něco o informatice, dělat hlavu, aby tuto adresu URL. 8 00:00:27,680 --> 00:00:32,360 Oni potřebují především teď na učitelé, zejména pokud máte 9 00:00:32,360 --> 00:00:34,700 měl nějaký projev na informatice. 10 00:00:34,700 --> 00:00:38,060 >> Takže připomenout, že minule jsme zavedli několik datových typů v jazyce C, a 11 00:00:38,060 --> 00:00:40,590 které jste začali dostat své špinavé ruce s těmito dosud 12 00:00:40,590 --> 00:00:41,940 v problému nastavit jeden. 13 00:00:41,940 --> 00:00:43,230 A my jsme měli char. 14 00:00:43,230 --> 00:00:49,100 Takže v poněkud technického hlediska, co je char, jak jej známe dnes? 15 00:00:49,100 --> 00:00:51,050 >> Takže je to postava, ale pojďme Přesněji řečeno teď. 16 00:00:51,050 --> 00:00:53,735 Co máme na mysli znakem nebo individuální char? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Nenumerický charakter - 19 00:00:59,500 --> 00:01:00,670 tak nemusí být. 20 00:01:00,670 --> 00:01:04,580 Ukazuje se, že sudá čísla, a to i interpunkce a písmena jsou 21 00:01:04,580 --> 00:01:06,980 zastoupeny s těmito daty typ známý jako char. 22 00:01:06,980 --> 00:01:09,440 Takže to není nezbytně abecedy. 23 00:01:09,440 --> 00:01:11,100 Jo? 24 00:01:11,100 --> 00:01:12,275 >> Takže je to ASCII znak. 25 00:01:12,275 --> 00:01:15,510 Takže pokud si myslíte, že zpět do týdne nula, když jsme měli byte dobrovolníků 26 00:01:15,510 --> 00:01:19,150 přijít a buď držet jejich ruce nebo ne všechny, jsou zastoupeny bity. 27 00:01:19,150 --> 00:01:22,450 Ale společně jako skupina osmi představovaly byte. 28 00:01:22,450 --> 00:01:26,030 A jsme zavedli pojem ASCII V té přednášce, která prostě 29 00:01:26,030 --> 00:01:28,170 mapování mezi čísly a písmeny. 30 00:01:28,170 --> 00:01:32,010 A ASCII použití, jako ti lidé předpokládaných, osm bitů 31 00:01:32,010 --> 00:01:33,660 představují znak. 32 00:01:33,660 --> 00:01:36,890 >> Tak podle toho, mohou být v případě osmi bitů Každý se na jednom ze dvou hodnot - 33 00:01:36,890 --> 00:01:38,010 nula nebo jedna - 34 00:01:38,010 --> 00:01:40,280 to znamená, že tam byly dvě možnosti pro tuto osobu - 35 00:01:40,280 --> 00:01:41,230 nula nebo jedna - 36 00:01:41,230 --> 00:01:44,070 dvě pro tuto osobu, dvě pro tento osoba, dvě pro tento jeden. 37 00:01:44,070 --> 00:01:47,450 Takže celkem dvakrát dvakrát dva krát dva krát dva - 38 00:01:47,450 --> 00:01:49,700 tak dva osmý celkově. 39 00:01:49,700 --> 00:01:54,320 Takže tam je celkový počet znaků 256 je to možné, že můžete 40 00:01:54,320 --> 00:01:55,750 představují s osmi bity. 41 00:01:55,750 --> 00:01:59,210 >> Nyní, ti z vás, kteří mluví asijské jazyků by mohl vědět, že je tu více 42 00:01:59,210 --> 00:02:02,620 znaky ve světě, než jen AS a BS a CS a DS. 43 00:02:02,620 --> 00:02:06,130 A skutečně, ASCII nestačí pro Mnoho světových jazyků. 44 00:02:06,130 --> 00:02:07,760 Ale o tom až jindy. 45 00:02:07,760 --> 00:02:11,240 Prozatím víme, že v C, pokud chcete reprezentovat dopis, kus 46 00:02:11,240 --> 00:02:15,780 interpunkce, nebo prostě něco, co postava v přírodě, používáme char. 47 00:02:15,780 --> 00:02:18,240 A to je jeden byte nebo osm bitů. 48 00:02:18,240 --> 00:02:19,690 >> Co int? 49 00:02:19,690 --> 00:02:20,780 No, int je celé číslo. 50 00:02:20,780 --> 00:02:23,175 Kolik bitů, pokud si vzpomínáte, bylo celé číslo obvykle? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Každý, kdo odvolání? 53 00:02:27,512 --> 00:02:29,600 Takže je to obvykle 32. 54 00:02:29,600 --> 00:02:32,120 Je to vlastně závisí na počítači že používáte. 55 00:02:32,120 --> 00:02:35,770 Ale v zařízení, a v mnoha počítače, je to 32 bitů nebo čtyři 56 00:02:35,770 --> 00:02:37,140 bajtů - osmkrát čtyři. 57 00:02:37,140 --> 00:02:39,790 A ints právě používají pro ukládání čísla, a to buď negativní, 58 00:02:39,790 --> 00:02:41,610 pozitivní, nebo nula. 59 00:02:41,610 --> 00:02:45,250 >> A pokud máte 32 bitů a stačí pouze péče o kladných čísel, můžete 60 00:02:45,250 --> 00:02:48,960 někdo přibližný, kolik je to možné celá počítač může představovat z 61 00:02:48,960 --> 00:02:51,820 na nulu up? 62 00:02:51,820 --> 00:02:56,130 Tak to by bylo dva na 32, což je zhruba čtyři miliardy. 63 00:02:56,130 --> 00:02:59,720 Takže tyto síly dva se bude opakující se témata v informatice. 64 00:02:59,720 --> 00:03:03,930 Jak uvidíme, jsou velmi pohodlné pracovat, i když to není zcela 65 00:03:03,930 --> 00:03:05,790 snadné dělat matematiku v něčí hlavě. 66 00:03:05,790 --> 00:03:07,000 >> Takže budeme říkat zhruba čtyři miliardy. 67 00:03:07,000 --> 00:03:08,620 Nyní, long long - 68 00:03:08,620 --> 00:03:09,770 můžete trochu hádat. 69 00:03:09,770 --> 00:03:10,480 Je to déle než int. 70 00:03:10,480 --> 00:03:12,440 Kolik bitů? 71 00:03:12,440 --> 00:03:14,250 Takže 64 bitů nebo osm bajtů. 72 00:03:14,250 --> 00:03:17,480 To prostě znamená, že můžete reprezentovat i vyšší číslo, větší nebo pozitivní 73 00:03:17,480 --> 00:03:19,160 větší záporná čísla. 74 00:03:19,160 --> 00:03:20,060 >> A co plavou? 75 00:03:20,060 --> 00:03:22,260 To je plovoucí desetinnou čárkou hodnota 32 bitů. 76 00:03:22,260 --> 00:03:25,180 To je jen reálné číslo, něco s desetinnou čárkou. 77 00:03:25,180 --> 00:03:30,100 Ale pokud potřebujete více místa místo za desetinnou čárkou nebo chcete-li 78 00:03:30,100 --> 00:03:33,720 představují větší počet s některými frakce po ní, můžete použít 79 00:03:33,720 --> 00:03:36,260 double, což je 64 bitů. 80 00:03:36,260 --> 00:03:38,240 >> Ale je to zajímavý stánek s jídlem zde. 81 00:03:38,240 --> 00:03:42,890 Takže pokud se ints omezen 32 bitů a i dlouhé dlouhé výrobky jsou omezeny 64 82 00:03:42,890 --> 00:03:46,180 bity, něco vyvolává otázku, co když opravdu chcete počítat 83 00:03:46,180 --> 00:03:48,790 vyšší než 4 miliardy na int? 84 00:03:48,790 --> 00:03:50,330 No, stačí použít long long. 85 00:03:50,330 --> 00:03:54,200 Ale co když chcete počítat více než dva až 64., dávat nebo brát? 86 00:03:54,200 --> 00:03:55,810 >> Nyní, to je obrovské množství. 87 00:03:55,810 --> 00:03:59,250 Ale nakonec, možná jste skutečně péče o tyto druhy hodnot, 88 00:03:59,250 --> 00:04:03,070 zejména pokud používáte databázi a začíná sbírat spoustu a spoustu 89 00:04:03,070 --> 00:04:06,190 a velké množství dat a přiřazení jedinečné Čísla každého kusu těchto údajů. 90 00:04:06,190 --> 00:04:07,430 Tak jsme trochu problém. 91 00:04:07,430 --> 00:04:10,700 A podobně, s plovoucí desetinnou čárkou hodnoty - plováky nebo čtyřhra - 92 00:04:10,700 --> 00:04:14,290 pokud máte pouze konečný počet bitů, kolik by si celkový počet 93 00:04:14,290 --> 00:04:16,980 možná představují? 94 00:04:16,980 --> 00:04:19,540 >> No, je to tak jasné, když zahrnovat desetinnou čárkou. 95 00:04:19,540 --> 00:04:20,899 Ale je to jistě konečný. 96 00:04:20,899 --> 00:04:24,390 Máte-li konečný počet bitů, konečný počet lidí, konečný 97 00:04:24,390 --> 00:04:27,350 počet žárovek, určitě můžete představují jen konečný počet 98 00:04:27,350 --> 00:04:28,510 s plovoucí desetinnou čárkou hodnoty. 99 00:04:28,510 --> 00:04:33,170 Ale kolik reálných čísel jsou jejich ve světě? 100 00:04:33,170 --> 00:04:33,680 Tam je nekonečný. 101 00:04:33,680 --> 00:04:37,280 Tak to je trochu problém, protože jsme nemají nekonečné množství 102 00:04:37,280 --> 00:04:39,970 Paměť RAM nebo uvnitř našich počítačů. 103 00:04:39,970 --> 00:04:41,780 Takže některé náročné věci se může stát. 104 00:04:41,780 --> 00:04:43,900 >> Tak pojďme do toho a zkuste to vyjádřit zde. 105 00:04:43,900 --> 00:04:46,240 Nech mě jít dopředu a otevřít gedit. 106 00:04:46,240 --> 00:04:50,360 Chystám se jít dopředu a uložit soubor s názvem "floats0.c" jen proto, aby se 107 00:04:50,360 --> 00:04:54,630 v souladu s příkladem, který je K dispozici on-line, pokud byste chtěli. 108 00:04:54,630 --> 00:04:58,080 A já jdu dál a definovat takto - 109 00:04:58,080 --> 00:05:01,540 Chystám se jít dál a říct, int Hlavní neplatné, jak často. 110 00:05:01,540 --> 00:05:07,190 >> A pak v tomto programu, budu prohlásit sám plovák, tak 32-bit 111 00:05:07,190 --> 00:05:09,700 proměnné s názvem f libovolně. 112 00:05:09,700 --> 00:05:13,910 A pak budu ukládat v něm Nevím, desetiny, takže 0,1. 113 00:05:13,910 --> 00:05:16,590 Takže budu vyjádřit, že jako jeden děleno 10, který je zcela 114 00:05:16,590 --> 00:05:17,790 legitimní C. 115 00:05:17,790 --> 00:05:20,460 >> A pak se na druhém řádku, prostě jsem chcete vytisknout tuto hodnotu. 116 00:05:20,460 --> 00:05:22,950 Takže připomínám, že můžeme použít seznámit printf. 117 00:05:22,950 --> 00:05:25,420 Nechceme používat% i pro int. 118 00:05:25,420 --> 00:05:28,360 Chceme využít% F na plováku. 119 00:05:28,360 --> 00:05:33,080 A pak budu dělat zpětné lomítko n, zavřít Nabídka, čárka, f, středník. 120 00:05:33,080 --> 00:05:34,400 >> Tak tady je můj program. 121 00:05:34,400 --> 00:05:35,820 Je tu už jedna chyba. 122 00:05:35,820 --> 00:05:38,640 Má někdo pro koho to kliknul už chci upozornit alespoň 123 00:05:38,640 --> 00:05:40,220 jeden bug jsem udělal? 124 00:05:40,220 --> 00:05:42,470 Jo? 125 00:05:42,470 --> 00:05:42,800 Jo. 126 00:05:42,800 --> 00:05:47,860 Zapomněl jsem "# include" na top, ale příznak, který, když se pokusím 127 00:05:47,860 --> 00:05:50,490 sestavit to bude, že překladač bude na mě křičet, 128 00:05:50,490 --> 00:05:52,770 říká nedefinovanou symbol nebo něco v tom smyslu. 129 00:05:52,770 --> 00:05:55,360 To není něco pochopit jako printf. 130 00:05:55,360 --> 00:05:59,380 >> Takže budu dělat "# include ", Soubor uložte. 131 00:05:59,380 --> 00:06:00,400 A teď je v lepším stavu. 132 00:06:00,400 --> 00:06:02,690 Ale já také bude bod se jeden nový údaj dnes. 133 00:06:02,690 --> 00:06:08,620 Kromě určení místa Držáky jako% f% i% s, můžete 134 00:06:08,620 --> 00:06:12,320 někdy ovlivňují chování tohoto zástupného symbolu. 135 00:06:12,320 --> 00:06:15,540 Například, v případě plovoucí Bodová hodnota, pokud chci jen 136 00:06:15,540 --> 00:06:22,200 Pro zobrazení jedno desetinné místo po období, můžu vlastně dělat 0.1f. 137 00:06:22,200 --> 00:06:26,830 Takže jinými slovy, oddělte f a znak procenta s 0,1, jen 138 00:06:26,830 --> 00:06:30,200 vyprávění printf, můžete mít celý banda čísel za desetinnou čárkou 139 00:06:30,200 --> 00:06:30,930 bod pro mě. 140 00:06:30,930 --> 00:06:32,870 Ale já jen chci vidět jeden z nich. 141 00:06:32,870 --> 00:06:36,280 >> Takže budu pokračovat nyní a ušetřete tento program, jděte do svého terminálu 142 00:06:36,280 --> 00:06:41,870 okno, a já jdu do toho a typ, aby plovák 0, zadejte. 143 00:06:41,870 --> 00:06:44,930 Vidím, že poněkud záhadný řádek, který začnou dávat větší smysl, jak jsme 144 00:06:44,930 --> 00:06:46,900 škádlit ji odlišuje tento týden a další. 145 00:06:46,900 --> 00:06:50,480 Teď budu pokračovat a spusťte float nulu. 146 00:06:50,480 --> 00:06:52,020 A sakra. 147 00:06:52,020 --> 00:06:54,880 >> Takže je tu další chyba zde z nějakého důvodu. 148 00:06:54,880 --> 00:07:02,490 Jsem si jistý, že jedna desetina, nebo jeden děleno 10, není 0,0. 149 00:07:02,490 --> 00:07:04,590 Možná jsem prostě hledáte na dostatečný počet číslic. 150 00:07:04,590 --> 00:07:08,580 Tak proč říkám, dva 0,2 vidět dva desetinná místa, ne jen jeden. 151 00:07:08,580 --> 00:07:11,810 Nech mě jít zpátky do mého okna terminálu tady a nastartování párkrát na 152 00:07:11,810 --> 00:07:12,840 viz můj historii. 153 00:07:12,840 --> 00:07:15,910 Ještě aby float nula znovu, a pak znovu. 154 00:07:15,910 --> 00:07:17,730 A nyní zadat. 155 00:07:17,730 --> 00:07:20,000 >> A teď jsem si jistý, že je to špatně. 156 00:07:20,000 --> 00:07:23,030 A já jsem mohl dělat tři a čtyři, a já jsem pravděpodobně bude držet vidět nuly. 157 00:07:23,030 --> 00:07:24,880 Tak kde je chyba? 158 00:07:24,880 --> 00:07:27,910 Jeden děleno 10 by měl být 0,1. 159 00:07:27,910 --> 00:07:30,310 Někdo chtít píchnout, co Základním problémem je,? 160 00:07:30,310 --> 00:07:32,400 Jo? 161 00:07:32,400 --> 00:07:33,420 Oba jsou celá čísla. 162 00:07:33,420 --> 00:07:33,920 No a co? 163 00:07:33,920 --> 00:07:37,820 Takže s jedním děleno 10, která je co mám dělat v aritmetice. 164 00:07:37,820 --> 00:07:41,185 A já jsem si 0,1. 165 00:07:41,185 --> 00:07:41,660 >> Jo. 166 00:07:41,660 --> 00:07:43,240 A tak to je opravdu to problém. 167 00:07:43,240 --> 00:07:46,700 Když budete mít celé číslo v počítači a rozdělit jej jiným číslo, 168 00:07:46,700 --> 00:07:50,430 Počítač je ve výchozím nastavení bude Předpokládejme, že chcete celé číslo. 169 00:07:50,430 --> 00:07:54,620 Problém však, samozřejmě, je že 0,1 není celé číslo. 170 00:07:54,620 --> 00:07:55,680 Je to reálné číslo. 171 00:07:55,680 --> 00:07:59,610 A tak to, co dělá počítač podle Výchozí nastavení je to prostě vyhodí 172 00:07:59,610 --> 00:08:01,070 vše za desetinnou čárkou. 173 00:08:01,070 --> 00:08:03,380 Není zaokrouhlit nahoru nebo dolů o sobě. 174 00:08:03,380 --> 00:08:06,480 Je to prostě zahodí vše za desetinnou čárkou. 175 00:08:06,480 --> 00:08:07,430 A teď to dává smysl. 176 00:08:07,430 --> 00:08:09,740 Protože teď jsme jasně odešel s nulou. 177 00:08:09,740 --> 00:08:10,250 >> Ale počkejte chvilku. 178 00:08:10,250 --> 00:08:11,840 Nevidím int nula. 179 00:08:11,840 --> 00:08:14,910 Já jsem vlastně viděl 0,00. 180 00:08:14,910 --> 00:08:16,340 Tak jak to mám smířit teď? 181 00:08:16,340 --> 00:08:22,850 Pokud se jedna děleno 10 je nulová, ale já jsem 0,00 vidět, kde je stále 182 00:08:22,850 --> 00:08:24,250 převeden zpět do reálné číslo? 183 00:08:24,250 --> 00:08:25,500 Jo. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Přesně tak. 186 00:08:30,630 --> 00:08:35,600 >> Tak tady v souladu pět, když jsem vlastně ukládání, že 0,1, který je pak 187 00:08:35,600 --> 00:08:39,549 zkráceny na nulu, uvnitř plováku, to byly stejné 188 00:08:39,549 --> 00:08:42,100 uložením ne jako int, ale Ve skutečnosti, jak plováku. 189 00:08:42,100 --> 00:08:46,540 Navíc jsem pak pomocí printf na výslovně tisku, že číslo dvě 190 00:08:46,540 --> 00:08:49,740 desetinná místa, i když tam nemusí být ve skutečnosti žádné. 191 00:08:49,740 --> 00:08:51,020 >> Tak to je na houby, ne? 192 00:08:51,020 --> 00:08:53,640 Zřejmě nemůžete dělat matematiku, alespoň na této úrovni 193 00:08:53,640 --> 00:08:55,600 přesnost, v počítači. 194 00:08:55,600 --> 00:08:56,930 Ale určitě existuje řešení. 195 00:08:56,930 --> 00:09:00,410 Co je to nejjednodušší oprava bychom mohli možná ano, i jen intuitivně zde 196 00:09:00,410 --> 00:09:01,130 vyřešit? 197 00:09:01,130 --> 00:09:02,380 Jo? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Otočte celá čísla do - 200 00:09:06,574 --> 00:09:06,976 jo. 201 00:09:06,976 --> 00:09:10,420 I když si nejsem jistý, co je Opravdu se tady děje, je-li 202 00:09:10,420 --> 00:09:13,440 zásadně má co do činění s těmito i je ints, no, proč ne já 203 00:09:13,440 --> 00:09:18,230 aby to 10,0, takže to 1.0, soubor znovu uložit. 204 00:09:18,230 --> 00:09:20,990 Nech mě jít zpátky do dno a překompilovat. 205 00:09:20,990 --> 00:09:23,030 Dovolte mi, abych znovu. 206 00:09:23,030 --> 00:09:23,420 A tam - 207 00:09:23,420 --> 00:09:27,690 teď mám svou desetina reprezentován jako 0,10. 208 00:09:27,690 --> 00:09:28,420 >> Dobrá. 209 00:09:28,420 --> 00:09:29,220 Takže to není špatné. 210 00:09:29,220 --> 00:09:31,730 A dovolte mi poukázat na jednu jinou cestu mohli jsme to vyřešil. 211 00:09:31,730 --> 00:09:35,580 Dovolte mi, abych vlastně vrátit zpět v čase kdy jsme měli to jako jeden 212 00:09:35,580 --> 00:09:36,680 Desátý před chvílí. 213 00:09:36,680 --> 00:09:40,800 A dovolte mi, abych do toho pusťte a znovu uložit tento soubor jako jiný název souboru, jen aby 214 00:09:40,800 --> 00:09:41,750 mít trochu checkpoint. 215 00:09:41,750 --> 00:09:43,450 Takže to byla verze jedna. 216 00:09:43,450 --> 00:09:45,520 A teď mi dovolte pokračovat a ještě jednu verzi. 217 00:09:45,520 --> 00:09:48,540 Zavoláme tuto verzi dva nula indexovány. 218 00:09:48,540 --> 00:09:51,280 >> A já budu místo toho to - víte co? 219 00:09:51,280 --> 00:09:54,400 Přidání tečka nula pracuje v tomto případě. 220 00:09:54,400 --> 00:09:56,060 Ale předpokládejme, že jeden byl variabilní. 221 00:09:56,060 --> 00:09:57,680 Předpokládaná 10 byla proměnná. 222 00:09:57,680 --> 00:10:00,680 Jinými slovy, předpokládáme, že jsem nemohl jen těžko kód 0,0 na konci 223 00:10:00,680 --> 00:10:02,340 tohoto aritmetický výraz. 224 00:10:02,340 --> 00:10:05,820 No, můžu něco dělat v závorkách tzv. lití. 225 00:10:05,820 --> 00:10:11,920 Mohu cast že celé číslo od 10 do plováku, a já obsadil že celé číslo jedna na 226 00:10:11,920 --> 00:10:12,800 plavat, stejně. 227 00:10:12,800 --> 00:10:17,190 Pak matematika, co se děje třeba udělat je účinně 1.0 dělí o 10,0, 228 00:10:17,190 --> 00:10:19,250 výsledek, který jde v f jako předtím. 229 00:10:19,250 --> 00:10:26,130 Takže když jsem překompilovat to jako dělat plováky 2, a teď vznáší 2, mám stejný 230 00:10:26,130 --> 00:10:27,020 odpovědět stejně. 231 00:10:27,020 --> 00:10:29,640 >> Tak to je docela nepřirozený příklad, jak vyřešit tento problém 232 00:10:29,640 --> 00:10:31,400 zavedením casting. 233 00:10:31,400 --> 00:10:34,410 Ale obecně, odlévání to bude silná věc, a to zejména pro 234 00:10:34,410 --> 00:10:38,180 problém nastavit dvě za týden době, kdy Chcete-li převést jeden typ dat 235 00:10:38,180 --> 00:10:41,800 další, že na konci dne jsou zastoupeny stejným způsobem. 236 00:10:41,800 --> 00:10:44,970 Na konci dne, každý co jsme mluvili dosud je 237 00:10:44,970 --> 00:10:46,710 jen ints pod pokličku. 238 00:10:46,710 --> 00:10:48,950 Nebo jestli je to příliš nízké úrovni pro vy, jsou to jen čísla 239 00:10:48,950 --> 00:10:49,750 pod kapotou. 240 00:10:49,750 --> 00:10:52,850 Dokonce i postavy, opět připomenout týden od nuly, jsou čísla 241 00:10:52,850 --> 00:10:53,990 pod kapotou. 242 00:10:53,990 --> 00:10:57,240 >> Což znamená, že můžeme převést mezi různé typy telefonních čísel, 243 00:10:57,240 --> 00:10:58,060 jsou to jen kousky. 244 00:10:58,060 --> 00:11:01,020 Můžeme převádět mezi čísly a písmena, pokud jsou to jen 245 00:11:01,020 --> 00:11:02,580 bitů a naopak. 246 00:11:02,580 --> 00:11:07,170 A odlévání tímto způsobem je mechanismus programování, který umožňuje násilně 247 00:11:07,170 --> 00:11:10,970 změna jednoho datového typu na jiný. 248 00:11:10,970 --> 00:11:14,570 Bohužel to není tak jednoduché, jak bych si přál. 249 00:11:14,570 --> 00:11:19,220 >> Chystám se jít zpět do plováky 1, který byl jednodušší, 250 00:11:19,220 --> 00:11:22,830 přímočará s 0,0 přidán do každé z nich. 251 00:11:22,830 --> 00:11:25,260 A stejně jako rychlý opakovací, nech mě jít napřed a rekompilovat 252 00:11:25,260 --> 00:11:27,670 to, aby plováky 2 - 253 00:11:27,670 --> 00:11:30,300 Omlouvám se, je to, aby plováky 1. 254 00:11:30,300 --> 00:11:32,050 A teď pojďme spustit plováky 1. 255 00:11:32,050 --> 00:11:34,810 A na dně, všimněte si, že jsem opravdu dostat 0,1. 256 00:11:34,810 --> 00:11:36,165 Takže, problém je vyřešen. 257 00:11:36,165 --> 00:11:37,280 >> Ale ještě ne. 258 00:11:37,280 --> 00:11:40,000 Já jsem teď bude trochu zvědavý, a já jdu zpátky do svého 259 00:11:40,000 --> 00:11:41,620 printf prohlášení a Poslyšte, víte co? 260 00:11:41,620 --> 00:11:44,090 Chtěl bych potvrdit, že tento je opravdu jedna desetina. 261 00:11:44,090 --> 00:11:47,890 A budu chtít vidět , řekněme, pět desetinných míst. 262 00:11:47,890 --> 00:11:48,570 To není problém. 263 00:11:48,570 --> 00:11:52,020 Změním dva na pět, Jsem překompilovat s make. 264 00:11:52,020 --> 00:11:53,770 I to, jak znovu plave 1. 265 00:11:53,770 --> 00:11:54,990 Hledáte docela dobře. 266 00:11:54,990 --> 00:11:58,570 Zdravý rozum kontroly může skončit tam, ale Začínám trochu odvážnější. 267 00:11:58,570 --> 00:12:00,330 Chystám se změnit 0,5-0,10. 268 00:12:00,330 --> 00:12:03,440 Chci vidět 10 číslic za desetinné místo. 269 00:12:03,440 --> 00:12:09,060 >> A já jdu dál a překompilovat to a znovu plave 1. 270 00:12:09,060 --> 00:12:13,060 Tak nějak jsem litovat, že testováno dál, protože moje matematika není tak 271 00:12:13,060 --> 00:12:14,320 opravit už, zdá se. 272 00:12:14,320 --> 00:12:15,630 Ale počkej, možná to je jen náhoda. 273 00:12:15,630 --> 00:12:17,810 Možná, že počítač pracuje trochu divné. 274 00:12:17,810 --> 00:12:21,810 Nech mě jít dál a dělat 20 desetinných míst a ujistil jsem se, že vím, 275 00:12:21,810 --> 00:12:22,540 jak na matematiku. 276 00:12:22,540 --> 00:12:23,460 Vím, jak programovat. 277 00:12:23,460 --> 00:12:26,960 Udělat plováky 1, překompilovat a sakra. 278 00:12:26,960 --> 00:12:31,110 To je opravdu, ale opravdu dostat daleko od značky. 279 00:12:31,110 --> 00:12:32,490 >> Tak co se to tu děje? 280 00:12:32,490 --> 00:12:36,050 Intuitivně, na základě našich předpokladů dříve o velikosti datových typů, 281 00:12:36,050 --> 00:12:38,040 Co třeba tady děje pod kapotou? 282 00:12:38,040 --> 00:12:39,290 Jo? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Přesně tak. 285 00:12:43,590 --> 00:12:46,480 Chcete-li tolik přesnost a to je sakra hodně přesnosti - 286 00:12:46,480 --> 00:12:48,770 20 čísel za desetinnou čárkou. 287 00:12:48,770 --> 00:12:51,990 Nemůžeš představovat libovolný počet, pokud máte 288 00:12:51,990 --> 00:12:52,930 libovolný počet bitů. 289 00:12:52,930 --> 00:12:54,190 Ale my ne. 290 00:12:54,190 --> 00:12:57,200 Pro plováku, máme jen 32 bitů. 291 00:12:57,200 --> 00:13:02,260 >> Takže, pokud je 32 bitů pouze v deionizovaná způsobem - stejně jako naše lidi na, fáze 292 00:13:02,260 --> 00:13:05,780 ruce nahoru a dolů - v konečném počtu způsoby, je jen konečný počet 293 00:13:05,780 --> 00:13:08,640 reálných čísel, která mohou představovat s těmito kousky. 294 00:13:08,640 --> 00:13:10,500 A tak se nakonec počítač se bude muset 295 00:13:10,500 --> 00:13:11,730 začít řezat zatáčky. 296 00:13:11,730 --> 00:13:15,500 Počítač může skrývat tyto údaje od nás trochu času. 297 00:13:15,500 --> 00:13:18,880 Ale pokud začneme strkat na čísla a díval se dál a dál na 298 00:13:18,880 --> 00:13:23,220 koncové čísla v celé řadě, pak začneme vidět, že je to 299 00:13:23,220 --> 00:13:26,480 vlastně sbližování Myšlenka na jednu desetinu. 300 00:13:26,480 --> 00:13:29,860 >> A tak to dopadá, tragicky, je tu nekonečný počet čísel 301 00:13:29,860 --> 00:13:35,060 se nemůže představovat právě počítač, alespoň s konečnou 302 00:13:35,060 --> 00:13:38,030 počet bitů, konečný množství paměti RAM. 303 00:13:38,030 --> 00:13:41,210 Teď to bohužel někdy má reálné následky. 304 00:13:41,210 --> 00:13:45,980 Pokud lidé nebudou dost vážím nebo druh brát za samozřejmost fakt, 305 00:13:45,980 --> 00:13:48,310 že jejich počítač bude jen to, co řeknou to udělat, a ne 306 00:13:48,310 --> 00:13:51,430 pochopit tyto základní zastoupení detaily - 307 00:13:51,430 --> 00:13:55,290 který, upřímně řečeno, v některých jazycích jsou skrytých před uživatelem, na rozdíl od C - 308 00:13:55,290 --> 00:13:56,500 některé špatné věci se může stát. 309 00:13:56,500 --> 00:13:58,650 >> A co jsem myslel, že bych udělal je krok zpět. 310 00:13:58,650 --> 00:14:00,420 A to je o osm minut videa. 311 00:14:00,420 --> 00:14:04,200 To vysílalo před několika lety, a to dává vhled do toho, co ve skutečnosti může jít 312 00:14:04,200 --> 00:14:09,290 špatně, když si nedoceňují těchto druhy detailů ve velmi all-moc 313 00:14:09,290 --> 00:14:10,080 reálný svět. 314 00:14:10,080 --> 00:14:12,965 Pokud bychom mohli ztlumit světla po dobu několika minut. 315 00:14:12,965 --> 00:14:14,360 >> SPEAKER 1: Nyní se vrátíme k technice 316 00:14:14,360 --> 00:14:17,160 katastrofy na Divy. 317 00:14:17,160 --> 00:14:18,680 >> Počítače - 318 00:14:18,680 --> 00:14:21,340 jsme všichni zvykli na to, často nepříjemné problémy 319 00:14:21,340 --> 00:14:23,170 které jdou s nimi. 320 00:14:23,170 --> 00:14:27,570 Chyby, viry a softwarové závady jsou malé ceny platit za 321 00:14:27,570 --> 00:14:28,960 pohodlí. 322 00:14:28,960 --> 00:14:32,040 Ale v high-tech a high-speed vojenský a kosmický program 323 00:14:32,040 --> 00:14:38,650 aplikace, nejmenší problém lze zvětšit do katastrofy. 324 00:14:38,650 --> 00:14:44,480 >> 4. června 1996, vědci připraveni spustit bezpilotní raketa Ariane 5. 325 00:14:44,480 --> 00:14:48,700 To nesl vědecké družice navržena tak, aby přesně zjistit, jak 326 00:14:48,700 --> 00:14:53,250 zemské magnetické pole ovlivňuje se solárními větry. 327 00:14:53,250 --> 00:14:57,540 Raketa byla postavena pro evropský Kosmickou agenturou a odstartovala z jeho 328 00:14:57,540 --> 00:14:59,906 zařízení na pobřeží z Francouzské Guyany. 329 00:14:59,906 --> 00:15:03,660 >> JACK GANSSLE: U asi 37 sekund do let, ale nejprve si všiml 330 00:15:03,660 --> 00:15:04,910 něco špatně. 331 00:15:04,910 --> 00:15:08,130 Trysky byly výkyvné v způsob, jakým by se měl opravdu ne. 332 00:15:08,130 --> 00:15:12,380 Přibližně 40 sekund do letu, jasně vozidlo bylo v potížích. 333 00:15:12,380 --> 00:15:14,400 A to je, když oni dělali Rozhodnutí zničit. 334 00:15:14,400 --> 00:15:18,520 Rozsah Bezpečnostní technik s obrovské střeva stisknutí tlačítka 335 00:15:18,520 --> 00:15:23,900 vyhodil raketu před tím, než by se nebezpečí pro veřejnou bezpečnost. 336 00:15:23,900 --> 00:15:27,810 >> SPEAKER 1: To bylo první plavbě z Ariane 5, a jejich zničení 337 00:15:27,810 --> 00:15:32,020 se konala kvůli vložené chybu V raketě je software. 338 00:15:32,020 --> 00:15:33,980 >> JACK GANSSLE: Problém na Ariane bylo, že existuje celá řada 339 00:15:33,980 --> 00:15:36,390 která je požadována 64 bitů vyjádřit. 340 00:15:36,390 --> 00:15:39,420 A chtěli převést k 16-bitové číslo. 341 00:15:39,420 --> 00:15:43,130 Se předpokládá, že bylo nikdy bude velmi velký, že většina 342 00:15:43,130 --> 00:15:46,810 tyto číslice v 64-bit řada z nich nuly. 343 00:15:46,810 --> 00:15:48,270 Mýlili se. 344 00:15:48,270 --> 00:15:51,380 >> SPEAKER 1: Neschopnost jednoho softwaru Program přijmout takové 345 00:15:51,380 --> 00:15:55,350 číslo generované jiným byl u kořene selhání. 346 00:15:55,350 --> 00:15:59,970 Vývoj softwaru se stala velmi nákladné součástí nové technologie. 347 00:15:59,970 --> 00:16:03,980 Ariane 4 raketa byla velmi úspěšný, tolik softwaru 348 00:16:03,980 --> 00:16:07,480 vytvořen pro to bylo také používané v Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP Coyle: Základním problémem bylo že Ariane 5 byl rychlejší, 350 00:16:11,980 --> 00:16:13,720 urychlováním. 351 00:16:13,720 --> 00:16:17,250 A software neměl představoval, že. 352 00:16:17,250 --> 00:16:20,770 >> SPEAKER 1: Zničení rakety Byl to obrovský finanční katastrofu, 353 00:16:20,770 --> 00:16:24,200 vše v důsledku nepatrné chyby softwaru. 354 00:16:24,200 --> 00:16:27,820 Ale to nebylo poprvé, kdy údaje konverze problémy soužil moderní 355 00:16:27,820 --> 00:16:30,620 raketová technika. 356 00:16:30,620 --> 00:16:34,480 >> JACK GANSSLE: V roce 1991, se zahájením první války v Perském zálivu, Patriot 357 00:16:34,480 --> 00:16:38,610 Střela zažil podobný typ o početně konverze problém. 358 00:16:38,610 --> 00:16:44,910 V důsledku toho, 28 amerických vojáků byly zabito a asi 100 dalších zraněno 359 00:16:44,910 --> 00:16:48,600 když Patriot, který měl na ochranu proti příchozí pluje, 360 00:16:48,600 --> 00:16:51,630 nedokázal vystřelit raketu. 361 00:16:51,630 --> 00:16:55,110 >> SPEAKER 1: Když Irák napadl Kuvajt a Amerika zahájila Pouštní bouře v roce 362 00:16:55,110 --> 00:17:00,570 brzy 1991, baterie Patriot rakety byly nasazeny na ochranu Saúdské Arábie 363 00:17:00,570 --> 00:17:04,760 a Izrael z irácké Scud raketové útoky. 364 00:17:04,760 --> 00:17:09,720 Patriot je americký středního doletu povrch-k-air systém vyrábí 365 00:17:09,720 --> 00:17:11,569 společnost Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> THEODORE Postol: Velikost Patriot interceptor sám je zhruba 367 00:17:16,410 --> 00:17:17,710 20 stop dlouhý. 368 00:17:17,710 --> 00:17:20,800 A váží asi 2000 liber. 369 00:17:20,800 --> 00:17:22,940 A to s sebou nese bojovou hlavici o cca - 370 00:17:22,940 --> 00:17:24,905 Myslím, že je to zhruba 150 liber. 371 00:17:24,905 --> 00:17:31,030 A hlavice je sám o sobě brizantní výbušnina, která má 372 00:17:31,030 --> 00:17:33,270 fragmenty kolem něj. 373 00:17:33,270 --> 00:17:37,490 Kryt hlavice je určena jednat jako brokovnice. 374 00:17:37,490 --> 00:17:40,720 >> SPEAKER 1: Rakety jsou prováděny čtyři na obalu a jsou přepravovány 375 00:17:40,720 --> 00:17:43,050 o návěsu. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP Coyle: Patriot protiraketový Systém se vrátí na 377 00:17:47,490 --> 00:17:50,710 minimálně 20 let. 378 00:17:50,710 --> 00:17:54,350 Původně byl navržen jako obrany raketa vzduchu na 379 00:17:54,350 --> 00:17:56,190 sestřelit nepřátelské letouny. 380 00:17:56,190 --> 00:18:02,490 V první války v Perském zálivu, kdy ta válka přišel, armáda chtěli použít 381 00:18:02,490 --> 00:18:05,535 sestřelit Scuds, ne letadel. 382 00:18:05,535 --> 00:18:09,310 Irácké letectvo nebylo tak velký problém. 383 00:18:09,310 --> 00:18:12,450 Ale armáda byla starosti pluje. 384 00:18:12,450 --> 00:18:15,950 A tak se snažil upgradovat Patriot. 385 00:18:15,950 --> 00:18:18,750 >> SPEAKER 1: přepady nepřítele raketu jede mach pět bylo 386 00:18:18,750 --> 00:18:20,890 bude dost náročné. 387 00:18:20,890 --> 00:18:25,590 Ale když byl Patriot spěchal do služby, armáda nebyla vědoma 388 00:18:25,590 --> 00:18:31,710 Irácký změny, které dělaly jejich Pluje téměř nemožné zasáhnout. 389 00:18:31,710 --> 00:18:35,240 >> THEODORE Postol: Co se stalo je Pluje, které byly 390 00:18:35,240 --> 00:18:36,570 přichází velmi nestabilní. 391 00:18:36,570 --> 00:18:37,532 Byli viklání. 392 00:18:37,532 --> 00:18:43,220 Důvodem byla Iráčané, ve S cílem získat 600km z 393 00:18:43,220 --> 00:18:47,530 300-kilometr-doletu, se hmotnost z předního hlavice. 394 00:18:47,530 --> 00:18:49,290 Udělali hlavice lehčí. 395 00:18:49,290 --> 00:18:53,110 Takže teď Patriot se snaží přijít na Scud. 396 00:18:53,110 --> 00:18:56,470 A většinu času, převážná většinu času, bylo by to jen 397 00:18:56,470 --> 00:18:58,730 létat Scud. 398 00:18:58,730 --> 00:19:01,760 >> SPEAKER 1: Jakmile je systém Patriot Provozovatelé si uvědomil, že Patriot ujít 399 00:19:01,760 --> 00:19:06,690 svůj cíl, se odpálil Patriots hlavice, aby se zabránilo možné 400 00:19:06,690 --> 00:19:10,300 ztráty, pokud byla povolena padat na zem. 401 00:19:10,300 --> 00:19:14,540 >> THEODORE Postol: To je to, co většina lidé viděli, jak velké ohnivé koule na obloze 402 00:19:14,540 --> 00:19:20,350 a nepochopený jako odposlechů Scud hlavic. 403 00:19:20,350 --> 00:19:23,320 >> Reproduktor 1: I když v nočním nebi Vlastenci se zdá být úspěšně 404 00:19:23,320 --> 00:19:27,530 ničit Scuds na Zahránu tam mohl pochybovat o tom jeho 405 00:19:27,530 --> 00:19:29,140 výkon. 406 00:19:29,140 --> 00:19:34,180 Tam, Patriot radarový systém ztratil sledovat příchozí Scud a nikdy 407 00:19:34,180 --> 00:19:36,380 zahájen v důsledku softwarové chyby. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Byl to Izraelci, který jako první objevil , že čím delší je systém 410 00:19:42,700 --> 00:19:48,020 se na, větší časový nesoulad se stal v důsledku hodiny 411 00:19:48,020 --> 00:19:50,470 vložené do systému počítače. 412 00:19:50,470 --> 00:19:54,640 >> JACK GANSSLE: Asi před dvěma týdny Tragédie v Dhahran, Izraelci 413 00:19:54,640 --> 00:19:58,440 hlásí ministerstvo obrany že systém ztrácel čas. 414 00:19:58,440 --> 00:20:01,280 Po asi osmi hodinách provozu, si všimli, že tento systém je 415 00:20:01,280 --> 00:20:03,530 stává znatelně méně přesné. 416 00:20:03,530 --> 00:20:07,710 Ministerstvo obrany reagoval vyprávění všechny Patriot baterií 417 00:20:07,710 --> 00:20:10,500 nenechat systémy po dlouhou dobu. 418 00:20:10,500 --> 00:20:12,430 Oni nikdy neřekl, co byl dlouhou dobu. 419 00:20:12,430 --> 00:20:13,330 Osm hodin? 420 00:20:13,330 --> 00:20:13,810 10 hodin? 421 00:20:13,810 --> 00:20:14,990 1000 hodin? 422 00:20:14,990 --> 00:20:17,150 Nikdo nevěděl. 423 00:20:17,150 --> 00:20:20,220 >> SPEAKER 1: Patriot baterie umístěné v kasárnách na Zahránu 424 00:20:20,220 --> 00:20:24,660 a jeho vadný vnitřní hodiny byly na více než 100 hodin v noci 425 00:20:24,660 --> 00:20:27,470 25.února. 426 00:20:27,470 --> 00:20:31,770 >> JACK GANSSLE: Je sledován čas Přesnost asi desetinu sekundy. 427 00:20:31,770 --> 00:20:34,480 Nyní desetina sekundy je zajímavé číslo, protože to nemůže být 428 00:20:34,480 --> 00:20:39,940 vyjádřené v binární přesně, což znamená, že že nelze vyjádřit přesně 429 00:20:39,940 --> 00:20:42,500 nějaký moderní digitální počítač. 430 00:20:42,500 --> 00:20:46,920 Je těžké tomu uvěřit, ale použít jako příklad. 431 00:20:46,920 --> 00:20:49,000 Pojďme se počtu jednu třetinu. 432 00:20:49,000 --> 00:20:53,150 Jedna třetina nelze vyjádřit v desítkové soustavě přesně. 433 00:20:53,150 --> 00:20:57,500 Jedna třetina je 0,333 děje na na nekonečno. 434 00:20:57,500 --> 00:21:02,270 Neexistuje žádný způsob, jak to udělat s absolutní přesnost v desítkové soustavě. 435 00:21:02,270 --> 00:21:05,370 To je přesně stejný druh problému která se stala v Patriot. 436 00:21:05,370 --> 00:21:09,880 Čím delší je provozován, Nejhorší time error stalo. 437 00:21:09,880 --> 00:21:13,840 >> SPEAKER 1: Po 100 hodinách provozu, chyba v čase jen 438 00:21:13,840 --> 00:21:16,140 asi jedna třetina druhá. 439 00:21:16,140 --> 00:21:20,800 Ale pokud jde o zaměření rakety cestování u Macha pět, to mělo za následek 440 00:21:20,800 --> 00:21:24,410 Tracking Error více než 600 metrů. 441 00:21:24,410 --> 00:21:27,670 Bylo by fatální chyba vojáci na Zahránu. 442 00:21:27,670 --> 00:21:33,450 >> THEODORE Postol: Stalo se Scud zahájení byla zjištěna brzy 443 00:21:33,450 --> 00:21:34,280 výstražné družice. 444 00:21:34,280 --> 00:21:38,550 A věděli, že se blíží Scud v jejich obecném směru. 445 00:21:38,550 --> 00:21:41,000 Oni nevěděli, kam že se to stane. 446 00:21:41,000 --> 00:21:43,900 >> Reproduktor 1: Bylo nyní na radaru složka systém Patriot 447 00:21:43,900 --> 00:21:48,910 bránit Zahránu najít a udržet sledovat z příchozí nepřátelské rakety. 448 00:21:48,910 --> 00:21:50,580 >> JACK GANSSLE: radar Byl velmi chytrý. 449 00:21:50,580 --> 00:21:53,770 To by ve skutečnosti sledovat polohu Scud a pak předpovědět, kde se 450 00:21:53,770 --> 00:21:57,160 pravděpodobně by se příště radar poslal puls ven. 451 00:21:57,160 --> 00:21:58,870 To se nazývá rozsah brána. 452 00:21:58,870 --> 00:22:04,020 >> THEODORE Postol: Pak, jakmile Patriot rozhodne dost času uplynulo jít 453 00:22:04,020 --> 00:22:09,420 zpět a zkontrolujte následující umístění Tento detekovaný objekt, se vrací. 454 00:22:09,420 --> 00:22:14,450 Takže když se vrátil do špatné místo, pak nevidí žádný objekt. 455 00:22:14,450 --> 00:22:18,200 A rozhodne, že tam byl žádný objekt, to byl falešný odhalování a 456 00:22:18,200 --> 00:22:19,680 klesne trať. 457 00:22:19,680 --> 00:22:22,970 >> SPEAKER 1: Příchozí Scud zmizel z radarové obrazovky, a 458 00:22:22,970 --> 00:22:26,050 sekund později narazila do kasáren. 459 00:22:26,050 --> 00:22:31,950 Scud zabil 28 a byl poslední vypálil během první války v Perském zálivu. 460 00:22:31,950 --> 00:22:37,700 Je tragické, že aktualizovaný software přišel na Zahránu následující den. 461 00:22:37,700 --> 00:22:41,800 Tento software chyba byla stanovena, uzavření jedné kapitoly v problémové 462 00:22:41,800 --> 00:22:43,690 Historie Patriot rakety. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot je vlastně zkratka pro sledování fázového pole 465 00:22:50,710 --> 00:22:51,960 Intercept cíle. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J Malan: Dobře, takže vystřízlivění příklad, to je jisté. 468 00:23:00,840 --> 00:23:03,430 A naštěstí, tyto nižší úroveň chyby nejsou něco, co my budeme 469 00:23:03,430 --> 00:23:06,220 typicky ocenit, rozhodně ne některé z našich 470 00:23:06,220 --> 00:23:07,360 Nejdříve programů. 471 00:23:07,360 --> 00:23:10,450 Naopak, většina chyb, budete setkání bude logické povahy, 472 00:23:10,450 --> 00:23:12,900 syntaktické povahy, přičemž kód prostě nefunguje správně. 473 00:23:12,900 --> 00:23:14,140 A víte, že docela rychle. 474 00:23:14,140 --> 00:23:16,850 >> Ale zvláště když se dostaneme do konec semestru, bude to 475 00:23:16,850 --> 00:23:20,620 stále více a více možností opravdu přemýšlet o designu 476 00:23:20,620 --> 00:23:22,960 z vašich programů a souvisejících zastoupení 477 00:23:22,960 --> 00:23:24,520 tam taky, dat. 478 00:23:24,520 --> 00:23:28,010 Například, budeme zavádět MySQL, která je populární databázový stroj 479 00:23:28,010 --> 00:23:30,850 které můžete použít s webovými stránkami na ukládání dat na zadním konci. 480 00:23:30,850 --> 00:23:34,630 A budete muset začít rozhodovat, konec pololetí nejen to, co 481 00:23:34,630 --> 00:23:38,790 typy dat v tomto směru k použití ale přesně, kolik bitů k použití, 482 00:23:38,790 --> 00:23:42,740 zda chcete uložit data jako data a času, jako vždy, a také 483 00:23:42,740 --> 00:23:46,890 věci, jako jak velký chceš jedinečné ID, které mají být, řekněme, že uživatelé 484 00:23:46,890 --> 00:23:47,680 v databázi. 485 00:23:47,680 --> 00:23:51,210 >> Ve skutečnosti, pokud někteří z vás jste měl Facebook představuje nějakou dobu, 486 00:23:51,210 --> 00:23:53,680 a víte, jak získat přístup do vašeho ID uživatele - 487 00:23:53,680 --> 00:23:57,930 které se někdy objeví ve vaší profilu se URL, pokud jste zvolili 488 00:23:57,930 --> 00:24:02,070 přezdívka pro adresu URL, nebo pokud jste Použité Facebook je graf API, 489 00:24:02,070 --> 00:24:05,510 veřejně dostupné API, kterou si může požádat Facebook pro surových dat - 490 00:24:05,510 --> 00:24:07,580 můžete vidět, jaké jsou vaše číselná ID je. 491 00:24:07,580 --> 00:24:10,880 A před několika lety, Facebook podstatě musel změnit používat 492 00:24:10,880 --> 00:24:15,980 ekvivalent ints na dlouhé vzdálenosti s využitím dlouho, protože v průběhu času, jak uživatelé přicházejí 493 00:24:15,980 --> 00:24:19,780 a jít a vytvořit spoustu účtů a falešné účty, i oni velmi snadno 494 00:24:19,780 --> 00:24:24,630 byli schopni vyčerpat něco jako 4 miliard možnou hodnotu jako int. 495 00:24:24,630 --> 00:24:28,340 >> Takže více na ty druhy otázek po silnici, stejně. 496 00:24:28,340 --> 00:24:30,750 Dobře, takže to bylo obsazení. 497 00:24:30,750 --> 00:24:31,670 To je nepřesnost. 498 00:24:31,670 --> 00:24:32,730 Pár rychlých oznámení. 499 00:24:32,730 --> 00:24:35,710 Takže sekce formálně začne letos Neděle, pondělí, úterý. 500 00:24:35,710 --> 00:24:39,080 Uslyšíte prostřednictvím e-mailu později tento týden jak k přiřazení sekce. 501 00:24:39,080 --> 00:24:42,570 A budete zde také v tomto bodě, jak změnit část, pokud váš 502 00:24:42,570 --> 00:24:45,660 Plán se nyní změnilo, nebo vaše úroveň pohodlí se nyní změnilo. 503 00:24:45,660 --> 00:24:49,380 Mezitím P-set a jeden hacker jeden ar kvůli tento čtvrtek s možností 504 00:24:49,380 --> 00:24:52,450 prodloužení této lhůty za Specifikace až pátek 505 00:24:52,450 --> 00:24:53,830 v obvyklým způsobem. 506 00:24:53,830 --> 00:24:57,500 >> Uvědomte si, že součástí problému set specifikace jsou uvedeny pokyny týkající se 507 00:24:57,500 --> 00:25:02,770 jak používat CS50 spotřebiče zkontrolujte, stejně jako některé specifické nástroje CS50 508 00:25:02,770 --> 00:25:06,540 jako u modelu 50, který vám může poskytnout se zpětnou vazbou dynamicky 509 00:25:06,540 --> 00:25:10,230 kvalita vašeho kódu stylu a také zkontrolovat 50, který vám může poskytnout 510 00:25:10,230 --> 00:25:13,160 dynamická zpětná vazba, aby vaši kodexu správnost. 511 00:25:13,160 --> 00:25:16,850 Odpusťte, že jsme stále žehlení z několika smyček s kontrolou 50. 512 00:25:16,850 --> 00:25:21,490 Několik svých spolužáků, kteří se začínají asi čtyři AM v pátek večer, kdy 513 00:25:21,490 --> 00:25:25,130 spec šel si všimli, od té doby několik chyb, že pracujeme 514 00:25:25,130 --> 00:25:29,010 díky, a omlouvám se pro každého, kdo zažil zbytečné frustrace. 515 00:25:29,010 --> 00:25:30,340 Na vině je moje. 516 00:25:30,340 --> 00:25:34,080 Ale budeme sledovat na CS50 dohodnout se, kdy že je vyřešen. 517 00:25:34,080 --> 00:25:35,700 >> Takže slovo na skóre sami. 518 00:25:35,700 --> 00:25:38,990 Tak to bude týden nebo dva před vámi začnete se dostat zpětnou vazbu na základní problémové okruhy 519 00:25:38,990 --> 00:25:40,640 protože jste ještě nemáte Výuka chlapík. 520 00:25:40,640 --> 00:25:44,510 A i pak, začneme hodnotit Problém C stanovuje, než jsme 521 00:25:44,510 --> 00:25:46,970 vraťte se zpět a zhodnotit tak poškrábání že dostanete více relevantní 522 00:25:46,970 --> 00:25:48,150 zpětná vazba rychleji. 523 00:25:48,150 --> 00:25:51,870 Ale obecně na školních osnov, CS50 základní problémové okruhy jsou hodnoceny podle 524 00:25:51,870 --> 00:25:53,580 po čtyři osy - 525 00:25:53,580 --> 00:25:55,760 rozsah, správnost, design a styl. 526 00:25:55,760 --> 00:25:59,210 >> Rozsah bude řada typicky mezi nula a pěti, které se 527 00:25:59,210 --> 00:26:01,830 zachycuje, kolik kus, který si ukousl. 528 00:26:01,830 --> 00:26:03,750 Obvykle budete chtít to být pět. 529 00:26:03,750 --> 00:26:05,300 Můžete alespoň vyzkoušeli všechno. 530 00:26:05,300 --> 00:26:09,330 A všimněte si, že je to multiplikativní faktor tak, že dělá jen část 531 00:26:09,330 --> 00:26:12,520 Problém sada není nejlepší strategie. 532 00:26:12,520 --> 00:26:15,610 >> Mezitím je více zřejmé význam správnosti - 533 00:26:15,610 --> 00:26:18,620 Jen je váš program korektně respektovat specifikace? 534 00:26:18,620 --> 00:26:21,510 To je váha úmyslně více těžce než ostatní dvě osy podle 535 00:26:21,510 --> 00:26:24,450 až třikrát, protože si uvědomujeme, že obvykle budete trávit 536 00:26:24,450 --> 00:26:28,600 mnohem více času honí nějaké chyby, jak se váš kód do práce, pak jste 537 00:26:28,600 --> 00:26:31,540 jsou odsazení a výběrem odpovídající názvy proměnných a 538 00:26:31,540 --> 00:26:33,800 podobně, která je na druhém konci spektra stylu. 539 00:26:33,800 --> 00:26:36,160 >> To neznamená, že styl není důležité a budeme kázat ji 540 00:26:36,160 --> 00:26:37,920 čas i na přednáškách av úsecích. 541 00:26:37,920 --> 00:26:40,520 Styl odkazuje na estetiku vašeho kódu. 542 00:26:40,520 --> 00:26:43,980 Vybrali jste dobře-pojmenované proměnné které jsou krátké, ale poněkud 543 00:26:43,980 --> 00:26:44,680 popisné? 544 00:26:44,680 --> 00:26:47,840 Je váš kód členité, jak jste viděli v přednáška a v souladu 545 00:26:47,840 --> 00:26:49,070 ve velkém stylu 50? 546 00:26:49,070 --> 00:26:51,220 >> Konečně je k průmyslovým vzorům tam uprostřed. 547 00:26:51,220 --> 00:26:54,090 Design je těžší, kdo dal prst, protože je to mnohem 548 00:26:54,090 --> 00:26:55,000 subjektivní. 549 00:26:55,000 --> 00:26:58,610 Ale to je snad nejdůležitější tři osy z hlediska pedagogické 550 00:26:58,610 --> 00:27:02,050 hodnota v průběhu času, a že to bude učitelské kolegy je příležitost 551 00:27:02,050 --> 00:27:04,110 poskytnout vám kvalitativní zpětné vazby. 552 00:27:04,110 --> 00:27:08,100 Opravdu, v CS50 přestože máme Tyto vzorce a výsledky, na konci 553 00:27:08,100 --> 00:27:11,350 dne se jedná o velmi záměrně velmi malé kbelíky - bodové hodnoty 554 00:27:11,350 --> 00:27:13,460 mezi nulou a třemi a nula a pět. 555 00:27:13,460 --> 00:27:17,800 Nesnažíme čerpat velmi hrubé linky mezi základní problémové okruhy nebo mezi 556 00:27:17,800 --> 00:27:21,490 studenti, ale spíše soustředit, stejně jako můžeme na kvalitativní, latinka 557 00:27:21,490 --> 00:27:25,490 zpětná vazba, a to buď na psacím stroji nebo slovní od vaše konkrétní učební kolegy, 558 00:27:25,490 --> 00:27:27,050 budete poznat docela dobře. 559 00:27:27,050 --> 00:27:32,340 >> Ale obecně ty, které jsou váhy že různé osy budou mít. 560 00:27:32,340 --> 00:27:35,480 Mezitím, taky to stojí za to udržet v paměti, že byste neměli předpokládat, že 561 00:27:35,480 --> 00:27:38,870 Tři z pěti je 60% a tedy zhruba selhávají. 562 00:27:38,870 --> 00:27:41,410 Tři záměrně chtěl být druh uprostřed silnice dobré. 563 00:27:41,410 --> 00:27:43,480 Pokud jste stále na trojky začátku semestru, to je 564 00:27:43,480 --> 00:27:46,340 opravdu chtěl být dobrým místo, kde začít. 565 00:27:46,340 --> 00:27:50,510 Pokud jste stále dvojky, jarmarky, je tu určitě nějakou práci zaplatit o něco 566 00:27:50,510 --> 00:27:53,250 více pozornosti, využít sekcí a úřední hodiny. 567 00:27:53,250 --> 00:27:54,590 >> Pokud jste stále čtyřky a pětky, skvělé. 568 00:27:54,590 --> 00:27:57,430 Ale opravdu, doufáme, že se trajektorie mezi studenty - velmi 569 00:27:57,430 --> 00:28:00,575 individuálně na jednoho studenta, ale začíná semestr zde v jakési 570 00:28:00,575 --> 00:28:04,100 dva až tři řady, ale končí tady v čtyři-pět rozsahu. 571 00:28:04,100 --> 00:28:05,440 To je to, co opravdu hledáte. 572 00:28:05,440 --> 00:28:09,590 A mějte na paměti, že deltu můžete vystavovat mezi nulou týden a týden 573 00:28:09,590 --> 00:28:12,170 12, když dělám známky. 574 00:28:12,170 --> 00:28:16,380 Nezáleží na tom, jak se k nám zcela jste veletrh na začátku, pokud váš 575 00:28:16,380 --> 00:28:19,330 dráha je opravdu nahoru a silný. 576 00:28:19,330 --> 00:28:24,000 >> Akademický upřímnost - a tak mi dovolte dát na mé vážnější hlas jen na chvíli. 577 00:28:24,000 --> 00:28:28,510 Tak to samozřejmě má vyznamenání odesílání více studentů než jiné 578 00:28:28,510 --> 00:28:30,950 v historii na reklamní tabuli, věřím. 579 00:28:30,950 --> 00:28:34,220 Máme druh ztratil na to bod, jak často se to stane. 580 00:28:34,220 --> 00:28:37,090 A to ne proto, že studenti v 50 jsou nic víc než jejich nepoctivost 581 00:28:37,090 --> 00:28:38,690 spolužáci jinde. 582 00:28:38,690 --> 00:28:42,800 Ale uvědomit si také, že jsme velmi dobře na odhalování takové věci. 583 00:28:42,800 --> 00:28:45,920 >> A to je výhoda, že computer science třída má v tom, že 584 00:28:45,920 --> 00:28:49,110 může a my porovnat všechny studenty Problém nastaví párové proti každé 585 00:28:49,110 --> 00:28:51,470 jiná, a to nejen v tomto roce ale všechny předchozí roky. 586 00:28:51,470 --> 00:28:55,080 Máme schopnost, stejně jako studenty třídy, na Google a najít kód 587 00:28:55,080 --> 00:28:57,440 na stránkách jako GitHub a diskusních fór. 588 00:28:57,440 --> 00:29:00,840 Tam jsou naprosto řešení CS50 je p-nastaví plovoucí kolem tam. 589 00:29:00,840 --> 00:29:02,710 Ale pokud můžete najít, můžeme najít. 590 00:29:02,710 --> 00:29:07,130 A to vše je velmi automatizován a snadné a smutné pro nás najít. 591 00:29:07,130 --> 00:29:10,990 >> Ale chci zdůraznit také to, že Samozřejmě akademická poctivost politika 592 00:29:10,990 --> 00:29:13,960 moc má být velmi opak tomto duchu. 593 00:29:13,960 --> 00:29:17,506 Opravdu, v tomto roce jsme přeformulovat věci v učebních osnovách být tak, tečka 594 00:29:17,506 --> 00:29:19,790 dot dot, se podrobněji v učebních osnovách. 595 00:29:19,790 --> 00:29:22,860 Ale zastřešující téma v průběhu opravdu být rozumný. 596 00:29:22,860 --> 00:29:26,160 Jsme si vědomi toho, že dochází k významnému množství pedagogických 597 00:29:26,160 --> 00:29:30,550 hodnota o spolupráci, do určité míry, se spolužáky, kdy si 598 00:29:30,550 --> 00:29:33,700 dva nebo tři nebo více jsou stojící na bílou tabuli 599 00:29:33,700 --> 00:29:35,670 Whiteboarding se, aby se mluvit své myšlenky - 600 00:29:35,670 --> 00:29:39,480 zápis z pseudocode v obrazech, diagramů, co by mělo být, pokud Mario 601 00:29:39,480 --> 00:29:41,350 byste měli napsat, že první v pseudokódu. 602 00:29:41,350 --> 00:29:43,240 Co by hladový algoritmus - 603 00:29:43,240 --> 00:29:46,100 jak by se chovat za Problém nastaví jeden? 604 00:29:46,100 --> 00:29:50,440 >> A tak si uvědomit, že chování které doporučujeme je velmi 605 00:29:50,440 --> 00:29:51,470 hodně v tomto směru. 606 00:29:51,470 --> 00:29:53,890 A v učebních osnovách, uvidíte celá parta kulky pod 607 00:29:53,890 --> 00:29:57,740 přiměřené kategorie a není rozumné kategorie, která pomáhá nám pomoci 608 00:29:57,740 --> 00:30:00,740 si zabalit svou mysl v okolí, kde my čerpat tento řádek. 609 00:30:00,740 --> 00:30:04,340 A obecně, slušné pravidlo je, že pokud jste se snaží řešit 610 00:30:04,340 --> 00:30:07,990 některé chyby a váš přítel nebo spolužák sedí vedle vás, je to 611 00:30:07,990 --> 00:30:11,530 rozumné pro vás ukázat mu nebo jí váš kód a říct, hej, můžete pomoci 612 00:30:11,530 --> 00:30:13,700 me zjistit, co se děje špatně? 613 00:30:13,700 --> 00:30:17,110 >> Nechceme typicky zahrnovat na opačné straně. 614 00:30:17,110 --> 00:30:20,730 To není správná odpověď na vaši přítel nebo spolužák tady, abych řekl, oh, 615 00:30:20,730 --> 00:30:22,510 stačí se podívat na moje postava a že se z toho. 616 00:30:22,510 --> 00:30:24,400 To je trochu nesmyslné. 617 00:30:24,400 --> 00:30:27,750 Ale mít někoho jiného, ​​jiný mozek, další pár očí se podívat na 618 00:30:27,750 --> 00:30:31,620 obrazovka nebo se podívejte na kódu a říkají, že jsou si jisti, že chcete 619 00:30:31,620 --> 00:30:32,760 mít smyčky tu? 620 00:30:32,760 --> 00:30:34,800 Nebo jste jisti, že chcete že středník tady? 621 00:30:34,800 --> 00:30:37,090 Nebo oh, to znamená, že tato chybová zpráva. 622 00:30:37,090 --> 00:30:39,580 Ti jsou velmi rozumné a podporováno chování. 623 00:30:39,580 --> 00:30:44,010 >> Případy, na které jsem se zmiňovat dříve se redukuje, když jsou studenti 624 00:30:44,010 --> 00:30:47,350 pozdě v noci, takže špatný úsudek, rozhodnutí a jejich posílání e-mailů kód 625 00:30:47,350 --> 00:30:50,130 nebo někdo jiný jen říkám, tady, je to v Dropbox nebo 626 00:30:50,130 --> 00:30:51,610 Googling pozdě v noci. 627 00:30:51,610 --> 00:30:54,880 A tak bych povzbudit a naléhavě vás prosím, Pokud máte ty nevyhnutelné 628 00:30:54,880 --> 00:30:58,450 chvíle stresu, jste narážela do proti termínu, nemáte pozdě 629 00:30:58,450 --> 00:31:01,490 den, protože je to již v pátek od které bod, email průběhu hlavami nebo 630 00:31:01,490 --> 00:31:02,330 sám přímo. 631 00:31:02,330 --> 00:31:04,790 Řekněme, poslouchej, já jsem v mém prasknutí zde. 632 00:31:04,790 --> 00:31:06,660 Pojďme se bavit a na to přijít. 633 00:31:06,660 --> 00:31:10,400 Uchýlit se k internetu nebo jiné ne rozumné chování není nikdy 634 00:31:10,400 --> 00:31:13,070 řešení, a příliš mnoho z vašich spolužáci jsou již zde na 635 00:31:13,070 --> 00:31:15,150 Areál kvůli tomu špatný úsudek. 636 00:31:15,150 --> 00:31:17,840 Ale je to velmi snadné obcházet tento řádek. 637 00:31:17,840 --> 00:31:22,950 >> A tady je malý obrázek pro zpestření jste se z Reddit takže nyní 638 00:31:22,950 --> 00:31:25,720 bude vše v pořádku. 639 00:31:25,720 --> 00:31:30,210 >> Tak rychlou rekapitulaci, tedy , kde jsme přestali. 640 00:31:30,210 --> 00:31:33,690 Takže minulý týden, připomenout, že jsme zavedli podmínky, není Scratch 641 00:31:33,690 --> 00:31:34,880 ale v C tentokrát. 642 00:31:34,880 --> 00:31:38,300 A tam byla nějaká nová syntaxe, ale opravdu žádné nové nápady samy o sobě. 643 00:31:38,300 --> 00:31:42,630 Měli jsme logické výrazy, které bychom mohli nebo společně s dvěma svislými 644 00:31:42,630 --> 00:31:46,490 pruhy nebo a spolu se dvěma ampersandy s tím, že po levé 645 00:31:46,490 --> 00:31:49,990 a právo musí být pravda aby to vykonat. 646 00:31:49,990 --> 00:31:53,150 Pak jsme měli spínače, které jsme se zaměřili na krátce, ale navrhuji, jsou opravdu 647 00:31:53,150 --> 00:31:56,830 prostě jiné syntaxe pro dosažení Stejný druh cíle, pokud víte, 648 00:31:56,830 --> 00:31:59,270 předem, jaké jsou vaše případy se bude. 649 00:31:59,270 --> 00:32:00,160 >> Podívali jsme se na smyčky. 650 00:32:00,160 --> 00:32:03,340 For je snad nejčastější, nebo alespoň jeden, že lidé 651 00:32:03,340 --> 00:32:05,330 typicky dosáhnout pro instinktivně. 652 00:32:05,330 --> 00:32:08,240 I když to vypadá trochu tajemný, uvidíte mnoho, mnoho příkladů tohoto 653 00:32:08,240 --> 00:32:11,590 Netrvalo dlouho, jak jste již koncem minulého týdne. 654 00:32:11,590 --> 00:32:14,280 While může podobně dosáhnout totéž. 655 00:32:14,280 --> 00:32:17,550 Ale pokud chcete dělat žádné inkrementace nebo aktualizaci 656 00:32:17,550 --> 00:32:20,230 proměnné hodnoty, musíte to více než ručně 657 00:32:20,230 --> 00:32:22,440 pro smyčce, než dovolí. 658 00:32:22,440 --> 00:32:25,310 A pak je tu do-while, což nám umožňuje něco udělat 659 00:32:25,310 --> 00:32:28,460 alespoň jednou při co jinak je to pravda. 660 00:32:28,460 --> 00:32:31,550 A to je zvláště dobré pro programy nebo hry na místo, kam chcete 661 00:32:31,550 --> 00:32:33,810 vyzvat uživatele k něčemu alespoň jednou. 662 00:32:33,810 --> 00:32:37,110 A pak, pokud on nebo ona nespolupracuje, možná budete chtít, aby to 663 00:32:37,110 --> 00:32:38,420 znovu a znovu. 664 00:32:38,420 --> 00:32:41,270 >> S proměnnými, mezitím jsme měli linky kódu, jako je tento, což by mohlo 665 00:32:41,270 --> 00:32:41,950 být dva řádky. 666 00:32:41,950 --> 00:32:44,830 Dalo by se prohlásit názvem int čítač, středník. 667 00:32:44,830 --> 00:32:47,660 Nebo můžete jen deklarovat a definovat to, abych tak řekl. 668 00:32:47,660 --> 00:32:49,950 Dát jí hodnotu současně. 669 00:32:49,950 --> 00:32:51,890 >> A pak konečně, jsme si povídali o funkcích. 670 00:32:51,890 --> 00:32:54,270 A to byl pěkný příklad v pocit, že to ukazuje, 671 00:32:54,270 --> 00:32:55,840 dva typy funkcí. 672 00:32:55,840 --> 00:32:59,030 Jedním z nich je GetString (), která opět dostane řetězec od uživatele. 673 00:32:59,030 --> 00:33:02,040 Ale GetString () je docela zajímavé, pokud jsme použili, 674 00:33:02,040 --> 00:33:05,620 protože jsme vždycky s něco na levé straně 675 00:33:05,620 --> 00:33:06,600 znaménko rovná se. 676 00:33:06,600 --> 00:33:09,830 To znamená, že GetString () vrací hodnotu. 677 00:33:09,830 --> 00:33:11,970 Vrací se samozřejmě řetězec. 678 00:33:11,970 --> 00:33:15,130 A pak na levé straně, my jsme prostě šetří tento řetězec uvnitř 679 00:33:15,130 --> 00:33:16,580 proměnné s názvem jméno. 680 00:33:16,580 --> 00:33:21,100 >> Toto se liší, v jistém smyslu, z printf protože printf, alespoň v našich 681 00:33:21,100 --> 00:33:23,540 Použití zde nic nevrací. 682 00:33:23,540 --> 00:33:24,960 Mimochodem, to něco vracet. 683 00:33:24,960 --> 00:33:26,380 My prostě nezajímá, co to je. 684 00:33:26,380 --> 00:33:29,090 Ale má to, co je tzv. vedlejší účinky. 685 00:33:29,090 --> 00:33:31,840 A to, co je to, že vedlejší účinek v každém případ, že bychom viděli tak daleko? 686 00:33:31,840 --> 00:33:34,720 Co printf dělat? 687 00:33:34,720 --> 00:33:37,780 Tiskne něco na obrazovku, zobrazuje text nebo čísla, nebo tak něco 688 00:33:37,780 --> 00:33:38,380 na obrazovce. 689 00:33:38,380 --> 00:33:41,170 A to je jen za vedlejší efekt protože to není opravdu předání 690 00:33:41,170 --> 00:33:41,900 mi to zpátky. 691 00:33:41,900 --> 00:33:44,770 To není odpověď uvnitř černé skříňky, které jsem pak mohou 692 00:33:44,770 --> 00:33:46,130 dostat do a chytit. 693 00:33:46,130 --> 00:33:49,160 Je to prostě dělá to na jeho vlastní, moc jako Colton byl zapojen do tohoto 694 00:33:49,160 --> 00:33:52,560 černá skříňka minulý týden, a nějak magicky kreslil na tabuli 695 00:33:52,560 --> 00:33:54,500 beze mě vlastně jedná. 696 00:33:54,500 --> 00:33:55,560 To by bylo nežádoucí účinek. 697 00:33:55,560 --> 00:33:59,100 Ale když jsem se vlastně musel dostat zpátky tady a říkají, ach, tady je řetězec 698 00:33:59,100 --> 00:34:02,040 od uživatele, který by být návratová hodnota. 699 00:34:02,040 --> 00:34:05,650 >> A tak daleko jsme se používá pouze funkce že ostatní lidé psali. 700 00:34:05,650 --> 00:34:09,219 Ale můžeme skutečně udělat to druhy věcí sami. 701 00:34:09,219 --> 00:34:12,730 Takže jsem jít do CS50 spotřebič znovu. 702 00:34:12,730 --> 00:34:16,020 Dovolte mi, abych zavřít kartu, že jsme se otevře před chvílí. 703 00:34:16,020 --> 00:34:18,530 A dovolte mi jít dopředu a vytvořit nový soubor. 704 00:34:18,530 --> 00:34:22,400 A já jdu dál a zavolejte tuhle positive.c. 705 00:34:22,400 --> 00:34:24,770 Tak jsem chtěl udělat něco s kladná čísla zde. 706 00:34:24,770 --> 00:34:27,219 Takže jsem jít dál a dělat int - 707 00:34:27,219 --> 00:34:28,000 Omlouvám se - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 Nedělejme to stejné chyba jako předtím. 710 00:34:34,280 --> 00:34:40,020 Int main (void), otevřený kudrnaté rovnátka, uzavřená složená závorka. 711 00:34:40,020 --> 00:34:41,639 >> A teď chci udělat následující. 712 00:34:41,639 --> 00:34:44,600 Chci napsat program, který trvá na tom, že uživatel zadá 713 00:34:44,600 --> 00:34:46,770 mi kladné celé číslo. 714 00:34:46,770 --> 00:34:50,969 Takže není GetPositiveInt funkce v knihovně CS50. 715 00:34:50,969 --> 00:34:52,610 Je tu jen GetInt (). 716 00:34:52,610 --> 00:34:55,790 Ale to je v pořádku, protože mám pojmy, s nimiž mohu uložit 717 00:34:55,790 --> 00:34:59,360 trochu více omezení na tuto hodnotu. 718 00:34:59,360 --> 00:35:00,990 Co jsem mohl udělat něco takového. 719 00:35:00,990 --> 00:35:02,780 >> Takže int n - 720 00:35:02,780 --> 00:35:04,920 a pokud jste psát dál, jen si uvědomit, Chystám se vrátit a 721 00:35:04,920 --> 00:35:06,430 změnit některé věci v okamžiku - 722 00:35:06,430 --> 00:35:09,960 takže int n se rovná GetInt (). 723 00:35:09,960 --> 00:35:11,780 A to se děje, aby int uvnitř n. 724 00:35:11,780 --> 00:35:13,830 A nech mě být více popisný. 725 00:35:13,830 --> 00:35:23,270 Dovolte mi říci něco jako: Žádám, aby mi dát kladné celé číslo. 726 00:35:23,270 --> 00:35:23,550 >> Dobrá. 727 00:35:23,550 --> 00:35:25,250 Tak jen trochu instrukcí. 728 00:35:25,250 --> 00:35:26,270 A teď co s tím mám dělat? 729 00:35:26,270 --> 00:35:29,840 No, já už vím, z mé jednoduché podmínky nebo poboček, stejně jako já 730 00:35:29,840 --> 00:35:36,100 měl v Scratch, mohl bych něco říct jako když n je menší než nebo rovna 731 00:35:36,100 --> 00:35:44,460 nula, pak chci něco udělat jako, že není pozitivní. 732 00:35:44,460 --> 00:35:45,560 A pak jsem mohl udělat - 733 00:35:45,560 --> 00:35:47,310 OK, ale já opravdu chci, aby si to int. 734 00:35:47,310 --> 00:35:52,020 Takže jsem mohl jít sem, a já mohl trochu kopie této odrážky a to. 735 00:35:52,020 --> 00:35:52,570 A pak na tlačítko OK. 736 00:35:52,570 --> 00:35:56,990 Takže, pokud n je menší než nebo rovna nule to. 737 00:35:56,990 --> 00:35:58,900 >> A teď, co když uživatel nespolupracuje? 738 00:35:58,900 --> 00:36:01,560 No, tak já jdu půjčit zde. 739 00:36:01,560 --> 00:36:03,130 A pak jdu sem a tady a tady. 740 00:36:03,130 --> 00:36:06,420 Takže to zjevně není řešení, ne? 741 00:36:06,420 --> 00:36:07,810 Vzhledem k tomu, že je konec je v nedohlednu. 742 00:36:07,810 --> 00:36:13,100 Chci-li požadovat, aby uživatel zadá mi kladné celé číslo, mohu 743 00:36:13,100 --> 00:36:14,150 skutečně dostat int. 744 00:36:14,150 --> 00:36:15,620 Pak mohu zkontrolovat tento int. 745 00:36:15,620 --> 00:36:18,570 Ale pak chci podívat se na to znovu a podívat se na to znovu a znovu zkontrolujte. 746 00:36:18,570 --> 00:36:21,680 Tak samozřejmě, co je lepší konstrukci, že se pomocí zde? 747 00:36:21,680 --> 00:36:22,840 Dobře, takže nějaké smyčky. 748 00:36:22,840 --> 00:36:25,430 >> Takže budu se zbavit téměř vše. 749 00:36:25,430 --> 00:36:27,320 A já chci, aby si to int alespoň jednou. 750 00:36:27,320 --> 00:36:28,890 Takže jsem chtěl říct to - 751 00:36:28,890 --> 00:36:32,110 a vrátím se zatímco za chvíli - 752 00:36:32,110 --> 00:36:33,050 teď, co? 753 00:36:33,050 --> 00:36:35,860 Chystám se udělat pravý n dostane GetInt (). 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Tak to je docela dobré. 756 00:36:37,250 --> 00:36:39,750 A teď, jak často Chci to udělat? 757 00:36:39,750 --> 00:36:45,770 >> Dovolte mi, abych dal printf uvnitř smyčky takže můžu žádat znovu a znovu, 758 00:36:45,770 --> 00:36:46,740 v případě potřeby. 759 00:36:46,740 --> 00:36:49,720 A co to chci dokud je podmínka dělat? 760 00:36:49,720 --> 00:36:53,870 Chci v tom pokračovat zatímco to, co je tak? 761 00:36:53,870 --> 00:36:54,125 Jo. 762 00:36:54,125 --> 00:36:55,390 N je menší než nebo rovna nule. 763 00:36:55,390 --> 00:36:58,180 Tak už máme výrazně vyčistit tento kód do. 764 00:36:58,180 --> 00:37:00,700 Jsme si půjčili velmi jednoduché konstrukci - do-while. 765 00:37:00,700 --> 00:37:04,690 Jsem ukradl pouze důležité řádky kódu, který jsem začal kopírování a 766 00:37:04,690 --> 00:37:05,960 vkládání, což nebylo moudré. 767 00:37:05,960 --> 00:37:09,790 A tak teď budu vlastně vložit to sem a udělej to jednou. 768 00:37:09,790 --> 00:37:12,990 >> A teď to, co chci dělat na velmi konec tohoto programu? 769 00:37:12,990 --> 00:37:16,810 Já si jen říct něco jednoduchého, líbí, díky za - a 770 00:37:16,810 --> 00:37:18,980 Udělám% i pro int - 771 00:37:18,980 --> 00:37:23,270 zpětné lomítko n, čárka, a pak zapojte n, středník. 772 00:37:23,270 --> 00:37:23,910 >> Dobrá. 773 00:37:23,910 --> 00:37:27,290 Tak uvidíme, co se stane teď když jsem spustit tento program. 774 00:37:27,290 --> 00:37:30,600 Chystám se jít dopředu a dělat, aby pozitivní. 775 00:37:30,600 --> 00:37:30,880 Sakra. 776 00:37:30,880 --> 00:37:31,600 Několik chyb. 777 00:37:31,600 --> 00:37:32,960 Takže dovolte mi, abych se posunout zpět k prvnímu. 778 00:37:32,960 --> 00:37:34,020 Nepracujte přes ně dozadu. 779 00:37:34,020 --> 00:37:37,000 Práce přes ně ze shora dolů lest oni kaskády a pouze 780 00:37:37,000 --> 00:37:38,630 jedna věc se mýlit. 781 00:37:38,630 --> 00:37:42,532 Implicitní prohlášení Funkce GetInt (). 782 00:37:42,532 --> 00:37:43,020 Jo. 783 00:37:43,020 --> 00:37:44,420 Takže to nebylo dost. 784 00:37:44,420 --> 00:37:46,760 Tak nějak jsem udělal stejnou chybu, ale trochu jinak, tentokrát. 785 00:37:46,760 --> 00:37:51,940 Musím zahrnují nejen stdio.h, ale také cs50.h, který zahrnuje 786 00:37:51,940 --> 00:37:56,770 tzv. prohlášení o získání int, což naučit přístroj, nebo učí 787 00:37:56,770 --> 00:37:58,760 C co GetInt () je. 788 00:37:58,760 --> 00:37:59,550 >> Takže dovolte mi, abych znovu uložit. 789 00:37:59,550 --> 00:38:02,040 Budu ignorovat další chyby protože budu doufat, že to 790 00:38:02,040 --> 00:38:05,210 nějak souvisí s chybou Jsem již opravena. 791 00:38:05,210 --> 00:38:08,710 Tak mě nech jít dopředu a rekompilovat s make pozitivní, Enter. 792 00:38:08,710 --> 00:38:09,020 Sakra. 793 00:38:09,020 --> 00:38:09,985 Tři chyby, stále. 794 00:38:09,985 --> 00:38:12,650 Dovolte mi, přejděte do první. 795 00:38:12,650 --> 00:38:14,320 Nepoužité proměnné n. 796 00:38:14,320 --> 00:38:15,850 Jsme neviděli předtím. 797 00:38:15,850 --> 00:38:17,200 A to je také trochu záhadné. 798 00:38:17,200 --> 00:38:18,850 Toto je výstup kompilátoru. 799 00:38:18,850 --> 00:38:23,610 A co že zvýrazněná linka tam - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 říká, že to říká on-line devíti positive.c, na 13. znaku, 801 00:38:28,960 --> 00:38:31,510 13. sloupec, jsi tuto chybu. 802 00:38:31,510 --> 00:38:34,230 >> A především, je to vyprávění mě nevyužité proměnné n. 803 00:38:34,230 --> 00:38:35,790 Tak uvidíme - 804 00:38:35,790 --> 00:38:37,150 linka devět. 805 00:38:37,150 --> 00:38:40,430 Já používám n v tom smyslu, že Dávám jí hodnotu. 806 00:38:40,430 --> 00:38:44,200 Ale co kompilátor nemá rád, je že nejsem zdánlivě používat. 807 00:38:44,200 --> 00:38:45,560 Ale počkej, já používám ho. 808 00:38:45,560 --> 00:38:48,170 V souladu jedenáct, já používám ho zde. 809 00:38:48,170 --> 00:38:52,430 Ale když jsem se posunout dolů další na positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 tak na řádek 11, znak 12 Kompilátor mi říká, využívání 811 00:38:56,230 --> 00:38:58,670 nedeklarovaný identifikátor n. 812 00:38:58,670 --> 00:39:02,760 >> Takže nehlášení znamená, že mám neurčeno to jako 813 00:39:02,760 --> 00:39:04,970 proměnná s datovým typem. 814 00:39:04,970 --> 00:39:05,500 Ale počkejte chvilku. 815 00:39:05,500 --> 00:39:09,150 Udělal jsem přesně to, že v souladu devět. 816 00:39:09,150 --> 00:39:11,100 Takže někdo je opravdu zmatený zde. 817 00:39:11,100 --> 00:39:14,900 Je to buď já, nebo proto, že kompilátor v souladu devíti, opět jsem prohlásil 818 00:39:14,900 --> 00:39:18,650 int n, a já jsem přiřazením vrátí hodnotu GetInt (). 819 00:39:18,650 --> 00:39:22,930 Pak jsem pomocí této proměnné n v souladu 11 a kontrolu, zda je jeho hodnota nižší 820 00:39:22,930 --> 00:39:24,050 než nebo roven nule. 821 00:39:24,050 --> 00:39:27,430 Ale to je patrně špatné a zlomený proč? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Řekni to znovu? 824 00:39:32,490 --> 00:39:35,690 >> Ach, musím prohlásit, n před vstupu do smyčky. 825 00:39:35,690 --> 00:39:36,370 Ale proč? 826 00:39:36,370 --> 00:39:39,830 Myslím, že jsme právě navrhla trochu dávno, že to je v pořádku deklarovat proměnné 827 00:39:39,830 --> 00:39:43,600 vše na jednom řádku a pak přiřadit jim nějakou hodnotu. 828 00:39:43,600 --> 00:39:46,790 Globální proměnná - pojďme vrátit na tuto myšlenku za chvíli. 829 00:39:46,790 --> 00:39:48,690 Proč chcete, abych dal je mimo smyčku? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 To je. 832 00:40:03,830 --> 00:40:06,780 Přesně tak. 833 00:40:06,780 --> 00:40:09,610 >> Takže, i když poněkud neintuitivní, dovolte mi shrnout. 834 00:40:09,610 --> 00:40:13,510 Když deklarujete n uvnitř z DO bloku tam - 835 00:40:13,510 --> 00:40:16,320 zejména uvnitř ty složené závorky - 836 00:40:16,320 --> 00:40:19,210 tato proměnná n má to, co je nazývá rozsah - 837 00:40:19,210 --> 00:40:23,210 nesouvisí s naší bodovacího systému Kurz - ale má rozsah, který je 838 00:40:23,210 --> 00:40:25,190 omezeny na ty složených závorek. 839 00:40:25,190 --> 00:40:28,460 Jinými slovy, pokud se obvykle deklarovat proměnná v souboru 840 00:40:28,460 --> 00:40:33,370 Složené závorky, tato proměnná existuje pouze Uvnitř těchto složených závorek. 841 00:40:33,370 --> 00:40:37,320 Takže této logiky sám, i když Já jsem prohlásil, n v souladu devět, to 842 00:40:37,320 --> 00:40:41,910 v podstatě zmizí z rozsahu, zmizí z paměti, abych tak řekl, 843 00:40:41,910 --> 00:40:43,370 v době, kdy jsem narazila linku 11. 844 00:40:43,370 --> 00:40:47,370 Vzhledem k tomu, linka 11, bohužel, je mimo těch složených závorek. 845 00:40:47,370 --> 00:40:51,540 >> Tak jsem se bohužel nemůže opravit tím, že se vrací s tím, co jsem dělal předtím. 846 00:40:51,540 --> 00:40:53,370 Můžete nejprve udělat. 847 00:40:53,370 --> 00:40:56,370 Ale to, co jste teď není cyklicky dělá? 848 00:40:56,370 --> 00:40:58,260 Vy jste zřejmě nedostávají int cyklicky. 849 00:40:58,260 --> 00:41:01,320 Takže můžeme nechat GetInt () a my by měl opustit GetInt () uvnitř 850 00:41:01,320 --> 00:41:04,420 smyčky, protože to je to, co chceme, aby obtěžovat uživatele k znovu a znovu. 851 00:41:04,420 --> 00:41:08,660 Ale to nestačí jít do souladu, řekněme, šest. 852 00:41:08,660 --> 00:41:10,150 Int n, středník. 853 00:41:10,150 --> 00:41:12,990 Nedávejte jí hodnotu, protože ještě nemusíte jen zatím. 854 00:41:12,990 --> 00:41:16,220 >> Ale teď tady dole Oznámení zadávacího řízení - to by bylo velmi snadné chyba. 855 00:41:16,220 --> 00:41:19,440 Nechci, aby můj stín předchozí Prohlášení o n.. 856 00:41:19,440 --> 00:41:22,830 Chci použít n které skutečně existuje. 857 00:41:22,830 --> 00:41:25,780 A tak nyní v řádku 10, I přiřadit n hodnotu. 858 00:41:25,780 --> 00:41:28,580 Ale v souladu šesti prohlašuji, n. 859 00:41:28,580 --> 00:41:32,940 A tak můžu nebo nemůžu použít v souladu 12 teď? 860 00:41:32,940 --> 00:41:37,120 Nemůžu, protože mezi kterými kudrnaté šle je n prohlášen teď? 861 00:41:37,120 --> 00:41:38,770 Ten tady na lince pět. 862 00:41:38,770 --> 00:41:40,330 K jednomu tady na lince 14. 863 00:41:40,330 --> 00:41:49,770 Takže když jsem se vzdálíte, uložit tento soubor, přejděte zpět na a spusťte make pozitivní, 864 00:41:49,770 --> 00:41:50,820 sestavil tuto dobu. 865 00:41:50,820 --> 00:41:51,940 Tak to už je pokrok. 866 00:41:51,940 --> 00:41:53,640 Slash. . / Pozitivní, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Žádám vás, abyste mi kladné celé číslo. 868 00:41:56,060 --> 00:41:57,750 Negativní 1. 869 00:41:57,750 --> 00:41:59,020 Negativní 2. 870 00:41:59,020 --> 00:42:00,680 Negativní 3. 871 00:42:00,680 --> 00:42:01,760 Zero. 872 00:42:01,760 --> 00:42:03,000 Jeden. 873 00:42:03,000 --> 00:42:05,130 A díky za ten je co se nyní tiskne. 874 00:42:05,130 --> 00:42:07,400 >> Nech mě zkusit něco jiného, ze zvědavosti. 875 00:42:07,400 --> 00:42:09,600 Jsem bylo řečeno, ke vstupu na celé číslo. 876 00:42:09,600 --> 00:42:12,870 Ale co kdybych místo toho zadat beránek? 877 00:42:12,870 --> 00:42:14,460 Takže nyní vidíte jiný dotaz - 878 00:42:14,460 --> 00:42:15,350 zkuste to znovu. 879 00:42:15,350 --> 00:42:17,670 Ale nikde v mém kódu jsem psát zkuste to znovu. 880 00:42:17,670 --> 00:42:22,320 Tak kde, pravděpodobně, je to opakování výzva přichází, byste řekli? 881 00:42:22,320 --> 00:42:23,540 Jo, od GetInt () sám. 882 00:42:23,540 --> 00:42:26,650 Takže jedna z věcí, CS50 personál dělá pro vás, alespoň v těchto prvních několika 883 00:42:26,650 --> 00:42:30,400 týdnů, je, že jsme psali nějaké množství kontroly chyb, které v případě 884 00:42:30,400 --> 00:42:34,260 zavoláte GetInt (), budete alespoň vrátit int od uživatele. 885 00:42:34,260 --> 00:42:35,460 Nebudete mít řetězec. 886 00:42:35,460 --> 00:42:36,440 Nebudete mít char. 887 00:42:36,440 --> 00:42:39,660 Nebudete něco úplně jinde. 888 00:42:39,660 --> 00:42:40,510 Dostanete int. 889 00:42:40,510 --> 00:42:41,890 >> Teď to nemusí být pozitivní. 890 00:42:41,890 --> 00:42:42,770 To nemusí být negativní. 891 00:42:42,770 --> 00:42:44,550 Neděláme žádné záruky obejít. 892 00:42:44,550 --> 00:42:48,960 Ale budeme obtěžovat uživatele opakovat, opakování, opakování, dokud on nebo ona vlastně 893 00:42:48,960 --> 00:42:49,810 spolupracuje. 894 00:42:49,810 --> 00:42:53,085 Stejně tak, pokud mám 1,23, to není int. 895 00:42:53,085 --> 00:42:58,400 Ale když se mi psát, řekněme, 50, že mi dává hodnotu, která jsem chtěl. 896 00:42:58,400 --> 00:42:59,050 >> Dobrá. 897 00:42:59,050 --> 00:43:01,380 Takže to není špatné. 898 00:43:01,380 --> 00:43:04,780 Jakékoliv dotazy na to, co jsme právě udělali? 899 00:43:04,780 --> 00:43:07,930 Klíčem je stánek s jídlem, aby bylo jasno, není tak smyčka, která jsme viděli 900 00:43:07,930 --> 00:43:10,880 ještě předtím, než když máme opravdu používat, ale otázka rozsahu, kde 901 00:43:10,880 --> 00:43:17,045 proměnné mohou být mohou být použity pouze během stanovené působnosti. 902 00:43:17,045 --> 00:43:19,830 >> Dobře, dovolte mi, abych návrh jste se dříve, že z 903 00:43:19,830 --> 00:43:20,860 globální proměnná. 904 00:43:20,860 --> 00:43:24,880 Mimochodem, ukázalo se, že další Řešení tohoto problému, ale 905 00:43:24,880 --> 00:43:28,880 obvykle správným řešením nebo špatně navržené řešení, je 906 00:43:28,880 --> 00:43:31,670 deklarovat svou proměnnou jako to, co je tzv. globální proměnná. 907 00:43:31,670 --> 00:43:34,610 Teď jsem trochu porušil svou definici rozsah, protože existuje 908 00:43:34,610 --> 00:43:37,680 žádné složené závorky na vrchol a velmi dolní části souboru. 909 00:43:37,680 --> 00:43:40,190 Ale důsledky, které je to, že nyní v souladu čtyři, 910 00:43:40,190 --> 00:43:41,710 n je globální proměnná. 911 00:43:41,710 --> 00:43:44,460 A jak už název napovídá, je to jen dostupné všude. 912 00:43:44,460 --> 00:43:45,790 >> Scratch ve skutečnosti má tato. 913 00:43:45,790 --> 00:43:48,650 Pokud jste použili proměnnou, možná si vzpomenete, si musel vybrat, jestli je to pro 914 00:43:48,650 --> 00:43:50,780 Tento sprite nebo pro všechny skřítky. 915 00:43:50,780 --> 00:43:54,270 No, všichni skřítci je jen jasnější způsob, jak říkat globální. 916 00:43:54,270 --> 00:43:55,520 Jo? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ach, opravdu dobrá otázka. 919 00:44:10,990 --> 00:44:14,310 >> Takže připomínám, že v první verzi v mém kódu, když jsem špatně 920 00:44:14,310 --> 00:44:17,700 deklarovat a n v souladu devět - 921 00:44:17,700 --> 00:44:19,980 Prohlásil jsem to jako proměnná a dal jsem jí hodnotu s 922 00:44:19,980 --> 00:44:21,160 operátor přiřazení - 923 00:44:21,160 --> 00:44:22,520 To mi dávalo dvě chyby. 924 00:44:22,520 --> 00:44:26,560 Jeden z nich, že n nebyl použit, a za druhé, že v souladu 11 925 00:44:26,560 --> 00:44:27,770 Prostě to není deklarován. 926 00:44:27,770 --> 00:44:31,120 Takže první, co jsem neměl Adresa v té době. 927 00:44:31,120 --> 00:44:35,130 To není striktně chyba prohlásit, variabilní, ale nepoužívejte ho. 928 00:44:35,130 --> 00:44:38,540 Ale jedna z věcí, které jsme udělali v CS50 zařízení, záměrně, 929 00:44:38,540 --> 00:44:43,340 pedagogicky, je jsme zalomený nahoru očekávání kompilátoru, aby 930 00:44:43,340 --> 00:44:46,970 Ujistěte se, že děláte věci, a to nejen správně, ale opravdu správně. 931 00:44:46,970 --> 00:44:51,520 >> Protože pokud jste deklarování proměnné jako n a nikdy ji používat, nebo jej používáte 932 00:44:51,520 --> 00:44:53,700 správně, pak to, co je to tam dělá? 933 00:44:53,700 --> 00:44:55,650 Je to opravdu nemá smysl. 934 00:44:55,650 --> 00:44:58,980 A je to velmi snadné, v průběhu času, pokud nenastavíte vlastní počítač v 935 00:44:58,980 --> 00:45:01,960 Tímto způsobem, jen mít kód, který má malé zbytky tady, tam zbytky. 936 00:45:01,960 --> 00:45:04,390 A pak měsíce později se podíváte zpět a jsi jako, proč je tato řada 937 00:45:04,390 --> 00:45:05,060 Kód tam? 938 00:45:05,060 --> 00:45:07,940 A pokud není dobrý důvod, je netěží vás nebo vaše kolegy 939 00:45:07,940 --> 00:45:10,650 po silnici muset zakopnout to pak. 940 00:45:10,650 --> 00:45:12,540 >> Mimochodem, kde je že jde? 941 00:45:12,540 --> 00:45:16,410 No, připomněl, že pokaždé, když jsme sestavit Program, všechno tohle je 942 00:45:16,410 --> 00:45:17,380 tiskne. 943 00:45:17,380 --> 00:45:18,350 Takže se vrátíme k tomu. 944 00:45:18,350 --> 00:45:22,230 Ale na druhou stranu, aby je nástroj, který automatizuje proces shromažďování podle 945 00:45:22,230 --> 00:45:24,830 spuštění kompilátoru aktuální tzv. zvonění. 946 00:45:24,830 --> 00:45:27,650 Ta věc, budeme nakonec vidět, má co do činění s ladění se zvláštním 947 00:45:27,650 --> 00:45:29,060 program s názvem ladicí program. 948 00:45:29,060 --> 00:45:32,150 To má co do činění s optimalizací kód - o tom více v budoucnu. 949 00:45:32,150 --> 00:45:33,620 Std = C99 - 950 00:45:33,620 --> 00:45:37,870 to znamená jen použít verzi 1999 C. C to už asi ještě déle než 951 00:45:37,870 --> 00:45:40,830 , ale oni dělali nějaký pěkný Změny 10 a lety. 952 00:45:40,830 --> 00:45:42,690 >> A tady je příslušná ty. 953 00:45:42,690 --> 00:45:45,880 Říkáme, aby něco, co by dříve byli varování 954 00:45:45,880 --> 00:45:48,560 Chyba brání studenta z kompilace. 955 00:45:48,560 --> 00:45:51,400 A stěnou se rozumí to, že pro celá parta věcí, ne 956 00:45:51,400 --> 00:45:53,060 souvisí jen s proměnnými. 957 00:45:53,060 --> 00:45:54,700 A pak mi dovolte přejděte na na konci tohoto řádku. 958 00:45:54,700 --> 00:45:56,430 A to taky, budeme nakonec se vrací. 959 00:45:56,430 --> 00:45:59,040 To je samozřejmě název soubor jsem kompilaci. 960 00:45:59,040 --> 00:46:02,160 To připomíná název souboru Jsem výstup jako název 961 00:46:02,160 --> 00:46:04,070 mého runnable programu. 962 00:46:04,070 --> 00:46:08,970 To prostě znamená, lcs50 použít CS50 knihovna, a všechny nul a jedniček, že 963 00:46:08,970 --> 00:46:12,390 Zaměstnanci napsal a sestavil dříve v letošním roce, integrovat 964 00:46:12,390 --> 00:46:13,490 je do svého programu. 965 00:46:13,490 --> 00:46:16,130 >> A někdo, co-LM je? 966 00:46:16,130 --> 00:46:18,150 Je to matematická knihovna, která je právě tam, i když jste 967 00:46:18,150 --> 00:46:19,320 nedělá žádnou matematiku. 968 00:46:19,320 --> 00:46:22,620 Je to prostě automaticky za předpokladu, nám dělat. 969 00:46:22,620 --> 00:46:26,540 >> No, dovolte mi ještě jednu další příklad zde otevírá nový soubor. 970 00:46:26,540 --> 00:46:30,560 A dovolte mi zachránit tohle jako string.c. 971 00:46:30,560 --> 00:46:37,980 Ukazuje se, že pokud hovoříme o datech Typy dnes, je tu ještě 972 00:46:37,980 --> 00:46:40,630 děje pod kapotou než jsme viděli doposud. 973 00:46:40,630 --> 00:46:42,290 Takže dovolte mi, abych se rychle udělat rychlý program. 974 00:46:42,290 --> 00:46:44,510 Zahrnout stdio.h. 975 00:46:44,510 --> 00:46:45,730 A já kromě toho, že. 976 00:46:45,730 --> 00:46:48,110 A víte, dejte mi neudělá stejnou chybu znovu a znovu. 977 00:46:48,110 --> 00:46:50,540 Zahrnout cs50.h. 978 00:46:50,540 --> 00:46:54,870 A dovolte mi, abych do toho teď a to int main (void). 979 00:46:54,870 --> 00:46:58,790 >> A teď prostě chci udělat program že to dělá - deklarovat řetězcovou 980 00:46:58,790 --> 00:47:03,610 volal sa dostat řetězec od uživatele. 981 00:47:03,610 --> 00:47:05,820 A dovolte mi udělat malý návod zde - 982 00:47:05,820 --> 00:47:09,960 Dejte mi prosím řetězec - tak uživatel ví, co má dělat. 983 00:47:09,960 --> 00:47:13,190 A pak tady dole pod touto Chci udělat následující - 984 00:47:13,190 --> 00:47:16,060 pro int i dostane na nulu. 985 00:47:16,060 --> 00:47:18,580 Opět platí, že počítač vědci typicky začít počítat od nuly, ale mohli bychom 986 00:47:18,580 --> 00:47:20,340 dělat, že jeden, pokud jsme skutečně chtěli. 987 00:47:20,340 --> 00:47:27,240 Teď budu dělat i menší než délka řetězce s. 988 00:47:27,240 --> 00:47:28,430 Tak strlen - 989 00:47:28,430 --> 00:47:29,510 S-T-R-L-E-N - 990 00:47:29,510 --> 00:47:31,650 znovu, je to výstižné, protože je to jednodušší, psát, i když je to 991 00:47:31,650 --> 00:47:32,590 trochu záhadná. 992 00:47:32,590 --> 00:47:35,290 >> Že je funkce jsme nepoužívá dříve, ale doslova to dělá - 993 00:47:35,290 --> 00:47:37,810 návrat na mě číslo, které představuje délka řetězce 994 00:47:37,810 --> 00:47:38,690 že uživatel napsal. 995 00:47:38,690 --> 00:47:41,740 Pokud zadali ahoj, to by se vrátit pět, protože tam je pět 996 00:47:41,740 --> 00:47:42,890 písmena ahoj. 997 00:47:42,890 --> 00:47:45,390 Poté, při každém opakování Tato smyčka, i plus plus. 998 00:47:45,390 --> 00:47:49,170 Takže znovu, standardní konstrukci, i když si nejste zcela příliš pohodlně, nebo 999 00:47:49,170 --> 00:47:50,420 obeznámeni s tím ještě. 1000 00:47:50,420 --> 00:47:53,220 >> Ale nyní při každém opakování tohoto cyklu, Všimněte si, co budu dělat. 1001 00:47:53,220 --> 00:47:56,690 Chci jít do toho a vytisknout z jednoho znaku - 1002 00:47:56,690 --> 00:47:59,940 tak% c n lomítko na nový řádek. 1003 00:47:59,940 --> 00:48:00,990 A pak, víš, co chci dělat? 1004 00:48:00,990 --> 00:48:05,090 Ať už je slovo, které uživatel zadá v jako ahoj, chci vytisknout 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O, jeden znak na každém řádku. 1006 00:48:09,530 --> 00:48:13,080 Jinými slovy, já se chci dostat na Jednotlivé znaky v řetězci, 1007 00:48:13,080 --> 00:48:16,770 přičemž až do teď má řetězec jen Byl posloupnost znaků. 1008 00:48:16,770 --> 00:48:21,690 >> A ukázalo se, co můžu udělat s, držák, i, závorka, zavřete 1009 00:48:21,690 --> 00:48:23,580 závorka, středník. 1010 00:48:23,580 --> 00:48:25,640 A mám udělat ještě jednu věc. 1011 00:48:25,640 --> 00:48:30,570 Je to v souboru s názvem string.h že strlen je deklarována. 1012 00:48:30,570 --> 00:48:33,190 Takže pokud chci používat tuto funkci, Musím říci kompilátoru, 1013 00:48:33,190 --> 00:48:34,450 očekávat, že ji používat. 1014 00:48:34,450 --> 00:48:37,040 Teď mě nech jít dál a dělat program s názvem řetězec. 1015 00:48:37,040 --> 00:48:39,150 Dot, lomítko, řetězec. 1016 00:48:39,150 --> 00:48:40,130 >> Prosím, dejte mi řetězec. 1017 00:48:40,130 --> 00:48:40,900 Půjdu do toho a zadejte jej. 1018 00:48:40,900 --> 00:48:43,040 Dobrý den, ve všech velkých písmenech, Enter. 1019 00:48:43,040 --> 00:48:47,390 A teď jsem si všimnout, vytisknou jeden znak za druhým. 1020 00:48:47,390 --> 00:48:51,450 Takže nový údaj, je to, že řetězec, Na konci dne, může být 1021 00:48:51,450 --> 00:48:54,810 přístupné prostřednictvím jeho osoby znaky zavedením náměstí 1022 00:48:54,810 --> 00:48:55,840 držák notace. 1023 00:48:55,840 --> 00:48:59,090 A to proto, že řetězec pod kryt je skutečně posloupnost 1024 00:48:59,090 --> 00:48:59,810 znaků. 1025 00:48:59,810 --> 00:49:02,010 Ale to, co je hezké o nich je v paměti RAM počítače - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, co to je - jsou to doslova zády k sobě - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 na individuální, vedle bajtů paměti. 1029 00:49:09,920 --> 00:49:13,210 >> Takže pokud se chcete dostat na osmou takovou byte, který v této smyčky by 1030 00:49:13,210 --> 00:49:16,900 držák nula, jeden držák, držák dva, držák tři, čtyři držák - 1031 00:49:16,900 --> 00:49:18,890 to je nula indexovány až do pěti let - 1032 00:49:18,890 --> 00:49:23,330 , že se vytiskne H-E-L-L-O na vlastním řádku. 1033 00:49:23,330 --> 00:49:26,320 >> Nyní, jako ukázku, dovolte mi ukázat vám druhy věcí, které budete nakonec 1034 00:49:26,320 --> 00:49:31,950 rozumět, alespoň s některými blízko hledáte. 1035 00:49:31,950 --> 00:49:35,610 Za prvé, to, co jsme do dnešní příklady, pokud byste chtěli, je ve skutečnosti 1036 00:49:35,610 --> 00:49:38,300 jeden z prvních Jailbreaks pro iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking znamená praskání telefon takže se můžete skutečně použít na 1038 00:49:40,800 --> 00:49:43,380 jiný dopravce nebo instalace vlastní software. 1039 00:49:43,380 --> 00:49:45,660 A všimněte si, že to vypadá zcela tajemný, s největší pravděpodobností. 1040 00:49:45,660 --> 00:49:46,520 Ale podívejte se na tohle. 1041 00:49:46,520 --> 00:49:50,420 IPhone byl zřejmě přeskakoval pro smyčce, pokud podmínka, jinak 1042 00:49:50,420 --> 00:49:52,580 stav, parta funkcí jsme neviděli. 1043 00:49:52,580 --> 00:49:54,230 >> A opět, nebudete na první pohled pravděpodobně 1044 00:49:54,230 --> 00:49:55,620 pochopit, jak to funguje. 1045 00:49:55,620 --> 00:49:58,940 Ale všechno, co nějak se za samozřejmost v našich moderních životech 1046 00:49:58,940 --> 00:50:02,040 ve skutečnosti má tendenci snižovat i na některé z těchto základů jsme byli 1047 00:50:02,040 --> 00:50:02,820 dívá. 1048 00:50:02,820 --> 00:50:06,680 Nech mě jít dopředu a otevřete jednu jiný program, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Takže i to je něco, co by opravdu nevím. 1050 00:50:08,970 --> 00:50:12,440 Ani nikdo z personálu nebo jsem mohl pravděpodobně přijít se na to při pohledu na 1051 00:50:12,440 --> 00:50:15,450 to proto, že to byl něčí kód , který byl předložen na to, co je 1052 00:50:15,450 --> 00:50:19,630 historicky známý jako obfuscated C soutěž, kde můžete napsat program 1053 00:50:19,630 --> 00:50:24,670 který sestavuje a vede, ale je tak zatraceně mystický žádný člověk nemůže pochopit, co 1054 00:50:24,670 --> 00:50:27,530 bude to dělat do té skutečně spustit. 1055 00:50:27,530 --> 00:50:29,940 >> Takže opravdu, když se podíváte na to kód, vidím vypínač. 1056 00:50:29,940 --> 00:50:30,870 Vidím hlavní. 1057 00:50:30,870 --> 00:50:33,800 Vidím tyto hranaté závorky z čehož vyplývá, nějaký druh pole. 1058 00:50:33,800 --> 00:50:35,970 Má někdo chtěl hádat, co tento program skutečně 1059 00:50:35,970 --> 00:50:37,220 dělá, když spustím Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Ano. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Výborně. 1064 00:50:44,690 --> 00:50:48,090 Takže jen zaměstnanci a nemůžu přijít co tyto věci dělat. 1065 00:50:48,090 --> 00:50:51,670 >> A teď konečně, nech mě jít napřed a otevřít jeden jiný program. 1066 00:50:51,670 --> 00:50:53,440 Tahle - 1067 00:50:53,440 --> 00:50:55,550 znovu, uděláme zdrojový kód k dispozici online - tohle je jen 1068 00:50:55,550 --> 00:50:57,480 docela hezké na pohled. 1069 00:50:57,480 --> 00:50:59,750 Všechno, co udělal, je hit mezerníku docela dost. 1070 00:50:59,750 --> 00:51:01,320 Ale to je skutečný kód. 1071 00:51:01,320 --> 00:51:04,790 Takže pokud si myslíte, že je to hezké, kdybychom vlastně tento příkaz na příkazovém řádku, 1072 00:51:04,790 --> 00:51:08,970 nakonec uvidíte, jak se může dělat věci, jako je tento. 1073 00:51:08,970 --> 00:51:14,008 >> Tak jsme vás nechám v takovém případě a uvidíme se ve středu. 1074 00:51:14,008 --> 00:51:18,440 >> [Přehrávání hudby] 1075 00:51:18,440 --> 00:51:23,380 >> SPEAKER 2: V dalším CS50, TFS uspořádat vzpouru. 1076 00:51:23,380 --> 00:51:24,112 >> SPEAKER 3: Tady je. 1077 00:51:24,112 --> 00:51:25,362 Dostaňte ho! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Přehrávání hudby]