1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [MUSIC PŘEHRÁVÁNÍ] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> David J. Malan: Dobře, to je CS50. 5 00:00:16,240 --> 00:00:18,010 A to je jeden týden. 6 00:00:18,010 --> 00:00:22,050 Takže připomenout, že naposledy v týdnu nula, jsme se zaměřili na výpočetní myšlení. 7 00:00:22,050 --> 00:00:25,440 A my jsme přešli od toho, aby Scratch, grafické programování 8 00:00:25,440 --> 00:00:27,360 jazyka od našich přátel v Media Lab MIT. 9 00:00:27,360 --> 00:00:31,730 >> A s Scratch, jsme prozkoumat tedy ideje jako funkce, a podmínky, 10 00:00:31,730 --> 00:00:35,210 a smyčky, a proměnné, a to i události, a nitě a další. 11 00:00:35,210 --> 00:00:37,880 A dnes, budeme nadále používat ty nápady, 12 00:00:37,880 --> 00:00:40,630 a opravdu přičemž je pro samozřejmost, ale přeložit 13 00:00:40,630 --> 00:00:44,220 do jiného jazyka známého jako C. Now, C je více tradiční jazyk. 14 00:00:44,220 --> 00:00:46,020 Je to nižší úroveň Jazyk, chcete-li. 15 00:00:46,020 --> 00:00:47,300 >> Je to čistě textová. 16 00:00:47,300 --> 00:00:49,910 A tak na první pohled, je to vše bude vypadat poněkud záhadný 17 00:00:49,910 --> 00:00:51,430 pokud jste nikdy předtím naprogramován. 18 00:00:51,430 --> 00:00:53,530 Budeme mít středníky a závorky, 19 00:00:53,530 --> 00:00:55,150 a složené závorky a další. 20 00:00:55,150 --> 00:00:57,240 Ale uvědomit, že i i když je syntaxe 21 00:00:57,240 --> 00:01:00,600 asi vypadat trochu neznámá pro většinu z vás, vidět minulost. 22 00:01:00,600 --> 00:01:03,220 A pokusit se zjistit, nápady že jsou skutečně obeznámen, 23 00:01:03,220 --> 00:01:06,750 protože tady v týdnu jedno, co začneme udělat, je porovnat, 24 00:01:06,750 --> 00:01:08,980 zpočátku, Scratch proti C. 25 00:01:08,980 --> 00:01:12,350 >> Tak například, připomenout, že když realizován první z našich programů 26 00:01:12,350 --> 00:01:16,220 Naposled jsme měli blok, který vypadal trochu něco jako tohle-- když 27 00:01:16,220 --> 00:01:19,990 zelenou vlajkou klikli, a pak jsme měli jeden nebo více dílků pod ním, 28 00:01:19,990 --> 00:01:22,150 V tomto případě, řekněme, hello world. 29 00:01:22,150 --> 00:01:24,870 Takže, opravdu, ve Scratch, když kliknu, že zelený příznak 30 00:01:24,870 --> 00:01:27,390 spustit svůj program, takže mluvit, to jsou 31 00:01:27,390 --> 00:01:29,520 bloky, které se dostanou provedeny, nebo spustit. 32 00:01:29,520 --> 00:01:32,230 A konkrétně Scratch řekl, ahoj, svět. 33 00:01:32,230 --> 00:01:35,377 >> Teď jsem mohl specifikovány různá slova zde. 34 00:01:35,377 --> 00:01:37,960 Ale uvidíme, že mnohá z těchto blocks-- a opravdu, 35 00:01:37,960 --> 00:01:41,880 v jazyce C mnoho functions-- může být parametrized nebo přizpůsobené 36 00:01:41,880 --> 00:01:43,150 dělat různé věci. 37 00:01:43,150 --> 00:01:45,520 Ve skutečnosti, v C kdybychom chcete převést, teď, 38 00:01:45,520 --> 00:01:47,567 Tento Scratch programu do tohoto jiného jazyka, 39 00:01:47,567 --> 00:01:49,650 budeme psát Trochu něco takového. 40 00:01:49,650 --> 00:01:52,540 >> Je pravda, že tam je nějaká neznámá Syntaxe tam s největší pravděpodobností, int, 41 00:01:52,540 --> 00:01:54,380 a závorky a neplatné. 42 00:01:54,380 --> 00:01:57,740 Ale printf-- přestože byste myslím, že to bude jen tisk. 43 00:01:57,740 --> 00:02:00,120 Ale tisk znamená tisk formátován, jak budeme brzy vidět. 44 00:02:00,120 --> 00:02:02,140 To doslovně bude tisknout na obrazovku bez ohledu 45 00:02:02,140 --> 00:02:05,990 je uvnitř těchto závorkách, které Samozřejmě v tomto případě je, hello world. 46 00:02:05,990 --> 00:02:09,290 >> Ale všimněte si, některé další syntax, některé uvozovky, 47 00:02:09,290 --> 00:02:11,890 že závorky na konci, středník a podobně. 48 00:02:11,890 --> 00:02:15,027 Takže tam to trochu nad hlavou, tak říkajíc, a to jak kognitivně 49 00:02:15,027 --> 00:02:17,860 a syntakticky, že jedeme muset pamatovat zanedlouho. 50 00:02:17,860 --> 00:02:20,720 Ale uvědomit, že s praxí, to začne skákat na vás. 51 00:02:20,720 --> 00:02:24,920 >> Ve skutečnosti, pojďme zaměřit se na tomto jednom Funkce specifically-- v tomto případě, 52 00:02:24,920 --> 00:02:26,290 pozdravit svět. 53 00:02:26,290 --> 00:02:27,560 Takže říci, je funkce. 54 00:02:27,560 --> 00:02:31,320 Dobrý den, svět je jeho parametr, Argument nebo její přizpůsobení. 55 00:02:31,320 --> 00:02:34,320 >> A ekvivalence v C je jen Bude tento jeden řádek tady, 56 00:02:34,320 --> 00:02:38,710 kde printf je ekvivalentní, řekněme, dvojitý řetězec v uvozovkách, ahoj 57 00:02:38,710 --> 00:02:41,470 svět je ekvivalentní, samozřejmě, s tím, co je v bílém poli tam. 58 00:02:41,470 --> 00:02:45,680 A zpětné lomítko n, i když poněkud podivné a nepřítomný od nuly, 59 00:02:45,680 --> 00:02:49,380 prostě bude mít za následek Budeme viz v počítači, jako můj Mac nebo PC, 60 00:02:49,380 --> 00:02:51,660 pouhého Pohybem kurzor na další řádek. 61 00:02:51,660 --> 00:02:53,970 Je to jako bít Enter na klávesnici. 62 00:02:53,970 --> 00:02:55,580 >> Takže uvidíme, že zase zanedlouho. 63 00:02:55,580 --> 00:02:58,640 Ale první, pojďme se na to podívat Dalším příkladem v případě smyček. 64 00:02:58,640 --> 00:03:02,830 Měli jsme navždy smyčka minule, což byla série skládačky 65 00:03:02,830 --> 00:03:05,490 že udělal něco doslovně forever-- v tomto případě, 66 00:03:05,490 --> 00:03:08,360 říkají, Hello World, hello world, hello world, hello world. 67 00:03:08,360 --> 00:03:10,350 Takže je to nekonečné smyčce záměrné. 68 00:03:10,350 --> 00:03:14,580 >> V jazyce C, chceme-li implementovat toto Stejná myšlenka, mohli bychom prostě to udělat. 69 00:03:14,580 --> 00:03:19,570 I když pravda, world-- printf ahoj nyní zatímco jen sémanticky, druh 70 00:03:19,570 --> 00:03:23,090 vykouzlí představu o tom opět něco, a znovu a znovu, 71 00:03:23,090 --> 00:03:23,980 a na jak dlouho? 72 00:03:23,980 --> 00:03:27,990 No, true-- připomeňme, že pravda, je jen na jedno nebo. 73 00:03:27,990 --> 00:03:30,660 >> A pravda je, samozřejmě, vždy pravdivé. 74 00:03:30,660 --> 00:03:33,060 Takže je to jakýsi bezvýznamný Prohlášení jen říct pravdu. 75 00:03:33,060 --> 00:03:36,890 Ale ve skutečnosti, to je záměrné, protože pokud je to pravda, je prostě vždy pravdivý, 76 00:03:36,890 --> 00:03:40,850 než je sice pravda jen naznačuje, když trochu nepřímo 77 00:03:40,850 --> 00:03:44,070 že následující řádky kódu mezi těmito složenými závorkami 78 00:03:44,070 --> 00:03:48,320 měl prostě spustit znovu a znovu, a znovu a vlastně nikdy nezastaví. 79 00:03:48,320 --> 00:03:50,230 >> Pokud ale chcete, aby vaše smyčka zastavit, jako my 80 00:03:50,230 --> 00:03:54,500 minule se něco podobného toto opakujte následující 50krát, 81 00:03:54,500 --> 00:03:57,700 v jazyce C můžeme udělat totéž s tím, co je volal pro loop-- klíčové slovo 82 00:03:57,700 --> 00:03:59,330 není přitom, ale pro. 83 00:03:59,330 --> 00:04:03,290 A pak tu máme nějakou novou syntaxi tady, s int i = 0, i méně než 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 A vrátíme se k tomu. 86 00:04:05,430 --> 00:04:09,660 Ale to je prostě, jak bychom přeložit sadu Stírací bloků 87 00:04:09,660 --> 00:04:13,079 k souboru C řádků kódu. 88 00:04:13,079 --> 00:04:14,450 >> Mezitím, za proměnné. 89 00:04:14,450 --> 00:04:16,540 A ve skutečnosti, právě jsme viděl jeden před chvílí. 90 00:04:16,540 --> 00:04:21,220 A v případě Scratch, kdybychom chtěl deklarovat proměnnou jsem zavolal 91 00:04:21,220 --> 00:04:24,590 pro i je celé číslo, jen číslo, a chceme nastavit na libovolnou hodnotu, 92 00:04:24,590 --> 00:04:28,410 bychom použili oranžová blokovat here-- nastavit i na 0. 93 00:04:28,410 --> 00:04:30,800 >> A uvidíme dnes a mimo ni, stejně jako minulý týden, 94 00:04:30,800 --> 00:04:33,850 programátoři dělat téměř vždy začíná počítat od nuly, ale opravdu 95 00:04:33,850 --> 00:04:34,950 konvencí. 96 00:04:34,950 --> 00:04:37,250 Ale také proto, že stažení z naše diskuse o binární, 97 00:04:37,250 --> 00:04:39,990 Nejmenší číslo Můžete představují s libovolným počtem bitů 98 00:04:39,990 --> 00:04:41,640 Je jen bude 0 sám. 99 00:04:41,640 --> 00:04:45,190 A tak budeme obvykle zahajují inicializace i naše proměnné na hodnotu 0. 100 00:04:45,190 --> 00:04:47,710 >> A v jazyce C, aby učinili totéž, budeme říkat, int 101 00:04:47,710 --> 00:04:50,110 pro celé číslo, já jen konvencí. 102 00:04:50,110 --> 00:04:53,390 Mohl jsem volal tato proměnná cokoli chci, stejně jako v Scratch. 103 00:04:53,390 --> 00:04:57,770 A pak se rovná 0 právě nabyvatelé hodnota 0 z pravé 104 00:04:57,770 --> 00:05:01,319 a vloží jej do proměnné, nebo skladovací kontejner tam, na levé straně. 105 00:05:01,319 --> 00:05:04,360 A středník, jak budeme see-- a jsme viděli některé z těchto already-- 106 00:05:04,360 --> 00:05:06,530 prostě znamená konec myšlení. 107 00:05:06,530 --> 00:05:09,430 Přistoupit k dělat něco jiného na tratích, které následují. 108 00:05:09,430 --> 00:05:11,330 >> A teď, co Booleovských výrazech? 109 00:05:11,330 --> 00:05:14,320 Připomeňme, že v Scratch, tito byli výrazy 110 00:05:14,320 --> 00:05:16,740 že jsou buď pravdivé nebo false-- otázky, 111 00:05:16,740 --> 00:05:18,910 ve skutečnosti, že jsou buď pravdivé nebo nepravdivé. 112 00:05:18,910 --> 00:05:21,960 Takže v případě Scratch, mohli bychom položit jednoduchou otázku, jako je tato, 113 00:05:21,960 --> 00:05:24,586 je i nižší než 50 ° C? 114 00:05:24,586 --> 00:05:25,710 Tak jsem se, opět je celé číslo. 115 00:05:25,710 --> 00:05:27,210 Možná bychom ji používáte v programu Scratch 116 00:05:27,210 --> 00:05:29,310 sledovat skóre nebo něco takového. 117 00:05:29,310 --> 00:05:33,810 Takže tato syntaxe tady v Scratch prostě znamená, je i nižší než 50 ° C? 118 00:05:33,810 --> 00:05:37,330 No, naštěstí, je něco Jednoduchý v C. A překládat, 119 00:05:37,330 --> 00:05:41,780 Tento bychom jednoduše říci, že méně než 50 ° C, pomocí známého klíče 120 00:05:41,780 --> 00:05:42,850 na klávesnici. 121 00:05:42,850 --> 00:05:45,141 >> Zatím, pokud jste chtěli říkají obecnější něco, 122 00:05:45,141 --> 00:05:49,890 jako, no, je x menší než y, kde každý x a y jsou samy o sobě proměnné? 123 00:05:49,890 --> 00:05:52,280 Můžeme udělat totéž v C, tak dlouho, jak jsme 124 00:05:52,280 --> 00:05:53,942 vytvořil tyto proměnné již. 125 00:05:53,942 --> 00:05:55,650 A uvidíme, jak se tomu, že zanedlouho. 126 00:05:55,650 --> 00:05:58,590 Rádi bychom jednoduše říci x menší než y. 127 00:05:58,590 --> 00:06:00,530 >> Takže vy začínáte viz určité podobnosti. 128 00:06:00,530 --> 00:06:03,490 A ty lidi, kteří učinili Scratch byli jistě 129 00:06:03,490 --> 00:06:05,250 inspirovaný některé z těchto základních myšlenek. 130 00:06:05,250 --> 00:06:10,350 A uvidíte tento druh syntax v mnoha languages-- 131 00:06:10,350 --> 00:06:12,160 ne jen nuly, nikoli Jen C, ale Python, 132 00:06:12,160 --> 00:06:14,790 a JavaScript, a Jiné jazyky klidu. 133 00:06:14,790 --> 00:06:18,270 >> Podívejme se na další konstrukt z C, ponětí o stavu, 134 00:06:18,270 --> 00:06:20,370 dělat něco podmíněně. 135 00:06:20,370 --> 00:06:22,720 Je-li něco je pravda, to udělat. 136 00:06:22,720 --> 00:06:24,457 Pokud je pravda, něco jiného, ​​udělej to. 137 00:06:24,457 --> 00:06:27,040 Je to něco programování ekvivalent k rozcestí. 138 00:06:27,040 --> 00:06:29,730 Možná je to obousměrný vidlice, trojcestný vidlice, nebo více. 139 00:06:29,730 --> 00:06:32,800 A v Scratch, mohli bychom mít vidět něco takového. 140 00:06:32,800 --> 00:06:34,010 >> Takže tohle je jeden velký. 141 00:06:34,010 --> 00:06:36,750 Ale vzít v úvahu relativní jednoduchost logiky. 142 00:06:36,750 --> 00:06:44,010 Je-li x menší než y, pak říkají x méně než y, jinak, pokud x je větší než y, 143 00:06:44,010 --> 00:06:46,230 pak říkají, x je větší než y. 144 00:06:46,230 --> 00:06:48,300 A pak, logicky, pokud si myslíte, že zpět do nuly 145 00:06:48,300 --> 00:06:52,610 nebo jen svou vlastní lidskou intuici, dobře, pokud x není větší než y, a x 146 00:06:52,610 --> 00:06:57,000 není menší než y, pak se samozřejmě x bude rovno y. 147 00:06:57,000 --> 00:06:59,690 Takže v tomto případě by hnízdění Stírací tyto bloky, 148 00:06:59,690 --> 00:07:02,580 můžeme dosáhnout tři cesta rozcestí? 149 00:07:02,580 --> 00:07:04,980 >> Mezitím, pokud chceme to udělat v C, ale pravděpodobně 150 00:07:04,980 --> 00:07:08,420 Vypadá trochu simpler-- přinejmenším jakmile se seznámí se syntaxí. 151 00:07:08,420 --> 00:07:12,050 Pokud x je menší než y, printf x je menší než y. 152 00:07:12,050 --> 00:07:16,140 Else if x je větší než y, printf x je větší než y. 153 00:07:16,140 --> 00:07:21,210 Jiný printf x je rovno y- a, opět s těmi, lomítko končí jen 154 00:07:21,210 --> 00:07:24,160 u těch nových tratí, takže pokud máte vlastně běžel tento druh programu 155 00:07:24,160 --> 00:07:25,940 to by jen přesunout kurzor nakonec 156 00:07:25,940 --> 00:07:28,100 na další řádek obrazovky. 157 00:07:28,100 --> 00:07:31,270 >> Nyní se mezitím Scratch měl jiný sofistikovanější funkce, pouze 158 00:07:31,270 --> 00:07:34,320 z nichž některé budeme nejprve přejít do světa C. 159 00:07:34,320 --> 00:07:37,010 A jeden z nich byl volal seznam v Scratch. 160 00:07:37,010 --> 00:07:39,100 A to byl zvláštní typ proměnné 161 00:07:39,100 --> 00:07:42,840 povolena ukládat více věcí v ní zpátky k sobě, dozadu, dozadu. 162 00:07:42,840 --> 00:07:45,540 >> V C, nemá seznamy, samy o sobě, ale něco 163 00:07:45,540 --> 00:07:48,090 které jsou obecně s názvem pole, i když budeme 164 00:07:48,090 --> 00:07:50,590 vrátit později tento semestr se dívá na něco 165 00:07:50,590 --> 00:07:52,780 volal seznamu, nebo opravdu spojový seznam. 166 00:07:52,780 --> 00:07:55,510 Ale teď, nejbližší ekvivalent v C po dobu nás 167 00:07:55,510 --> 00:07:57,345 se bude něco zvané pole. 168 00:07:57,345 --> 00:07:59,740 A pole je jednoduše speciální typ proměnné 169 00:07:59,740 --> 00:08:03,160 který vám umožní ukládat data zpět k sobě, k sobě, k sobě. 170 00:08:03,160 --> 00:08:05,840 >> A skutečně, v Scratch, pokud chceme přistupovat 171 00:08:05,840 --> 00:08:09,030 první prvek pole nebo list-- a budu to říkat, 172 00:08:09,030 --> 00:08:13,600 Podle konvence argv, argumentace vektoru, ale o tom zanedlouho. 173 00:08:13,600 --> 00:08:17,090 Pokud chci se dostat na první prvek z argv, ve světě Scratch 174 00:08:17,090 --> 00:08:20,930 vlastně děláte obvykle začíná počítat od 1. 175 00:08:20,930 --> 00:08:22,850 >> A tak bych mohl dostat položky 1 argv. 176 00:08:22,850 --> 00:08:26,310 To je jen, jak implementována MIT pojem seznamů. 177 00:08:26,310 --> 00:08:29,860 Ale v C, jdu Více prostě jen říci, argv, 178 00:08:29,860 --> 00:08:32,758 což je opět jméno mého list-- nebo aby bylo jasné, pole. 179 00:08:32,758 --> 00:08:34,549 A když chci první prvky, jdu 180 00:08:34,549 --> 00:08:37,890 používat hranaté závorky, který vás nemusí často používány pod klávesnicí. 181 00:08:37,890 --> 00:08:40,150 >> Ale prostě znamená 0, dejte mi ten první. 182 00:08:40,150 --> 00:08:42,160 Tak příležitostně a jako plyne čas, jdeme 183 00:08:42,160 --> 00:08:44,570 začít vidět všechny tyto dichotomie mezi Scratch a C, 184 00:08:44,570 --> 00:08:46,070 přičemž Scratch používá. 185 00:08:46,070 --> 00:08:47,670 Jsme v jazyce C použít 0 zde. 186 00:08:47,670 --> 00:08:49,420 Ale budete rychle zjistit, jakmile pochopíte 187 00:08:49,420 --> 00:08:52,920 základy každého jazyka, aby tyto věci začnou dostat o to víc 188 00:08:52,920 --> 00:08:56,860 seznámí prostřednictvím praxe a praxe. 189 00:08:56,860 --> 00:08:59,700 >> Takže pojďme se vlastně vypadají nyní na programu. 190 00:08:59,700 --> 00:09:04,031 Zde je první naší C zdrojový kód pro kompletní programy. 191 00:09:04,031 --> 00:09:06,280 A program jdeme nabízet za úplatu 192 00:09:06,280 --> 00:09:09,340 je ten, který je rovnocenný na tomto dřívějším Scratch kus. 193 00:09:09,340 --> 00:09:13,210 >> Takže tady máme to, co je pravděpodobně nejjednodušší programu C 194 00:09:13,210 --> 00:09:15,410 můžete psát, že ve skutečnosti dělá něco. 195 00:09:15,410 --> 00:09:18,250 Nyní se podíváme kolem, Pro tuto chvíli má zahrnovat 196 00:09:18,250 --> 00:09:21,190 Standardní io.h, a tyto úhel držáky a int, a neplatná, 197 00:09:21,190 --> 00:09:22,840 a složené závorky, a podobně. 198 00:09:22,840 --> 00:09:25,390 >> A pojďme soustředit jen na co, alespoň intuitivně, 199 00:09:25,390 --> 00:09:26,860 mohl vyskočit na vás již. 200 00:09:26,860 --> 00:09:30,300 Ve skutečnosti je hlavní, nemám nutně vědět, co to je, 201 00:09:30,300 --> 00:09:34,580 ale podobně jako Scratch měl, že když zelenou vlajkou klepnutí kousek skládačky, 202 00:09:34,580 --> 00:09:39,070 tak dělá C jako programovací jazyk mají hlavní kus kódu, který 203 00:09:39,070 --> 00:09:43,380 dostane popraven ve výchozím nastavení. A opravdu, to doslova bude nazýván hlavní. 204 00:09:43,380 --> 00:09:44,720 >> Takže hlavní je funkce. 205 00:09:44,720 --> 00:09:48,720 A je to speciální funkce, která existuje v jazyce C, který při spuštění programu, 206 00:09:48,720 --> 00:09:52,720 to je hlavní, který se provozují default. Ve světě Scratch, 207 00:09:52,720 --> 00:09:56,970 to bylo obvykle, když zelená vlajka kliknul, která dostala spustí automaticky. 208 00:09:56,970 --> 00:10:01,130 >> Mezitím jsme viděli dříve, printf nebo vytisknout formátovaný, to je 209 00:10:01,130 --> 00:10:05,620 Bude to funkce, která přichází s C, spolu s celou partou druhých, 210 00:10:05,620 --> 00:10:10,140 že vůle čas od času a znovu, aby se dělat přesně 211 00:10:10,140 --> 00:10:12,450 jak již název napovídá, něco vytisknout. 212 00:10:12,450 --> 00:10:13,500 Co chcete vytisknout? 213 00:10:13,500 --> 00:10:15,770 No, uvidíme, že uzavřením charaktery 214 00:10:15,770 --> 00:10:18,680 jako these-- hello world, lomítko n v uvozovkách, 215 00:10:18,680 --> 00:10:23,040 můžeme říci přesně printf Co k tisku na obrazovce. 216 00:10:23,040 --> 00:10:26,430 >> Aby však bylo možné učinit že jsme se bohužel 217 00:10:26,430 --> 00:10:30,010 je třeba vzít něco, co je Již kryptické na nás lidi, 218 00:10:30,010 --> 00:10:34,510 ale aspoň je to poněkud readable-- ostré zahrnují standardní io.h, int, 219 00:10:34,510 --> 00:10:39,340 Hlavním, void, printf všechny magické zaklínání jsme právě viděli na obrazovce. 220 00:10:39,340 --> 00:10:42,470 Ale ve skutečnosti máme na jít ještě tajemné. 221 00:10:42,470 --> 00:10:47,140 nejprve musíme přeložit kód že píšeme do strojového kódu. 222 00:10:47,140 --> 00:10:51,370 A odvolávat z minulého týdne, že stroje, alespoň ty víme tady, 223 00:10:51,370 --> 00:10:54,450 Na konci dne jen porozumět nul a jedniček. 224 00:10:54,450 --> 00:10:58,100 >> A můj Bože, kdybychom museli psát tyto nuly a jedničky vlastně programu, 225 00:10:58,100 --> 00:11:01,260 bylo by velmi, velmi rychle vzít legraci ze všeho. 226 00:11:01,260 --> 00:11:05,150 Ale ukazuje se, za minulého týdne, že tyto vzory nul a jedniček 227 00:11:05,150 --> 00:11:06,400 Jen mají zvláštní význam. 228 00:11:06,400 --> 00:11:08,500 Za určitých okolností, by mohlo znamenat čísla. 229 00:11:08,500 --> 00:11:11,840 >> V některých kontextech, mohou znamenat dopisy, nebo barvy, nebo libovolný počet 230 00:11:11,840 --> 00:11:14,710 dalších abstrakcí tam na. 231 00:11:14,710 --> 00:11:18,450 Ale stejně jako má počítač CPU, Central Processing Unit, 232 00:11:18,450 --> 00:11:20,390 nebo mozky uvnitř počítače. 233 00:11:20,390 --> 00:11:22,240 Je to obvykle Intel uvnitř, protože to je 234 00:11:22,240 --> 00:11:24,900 jedna z největších firem která dělá procesorů pro počítače. 235 00:11:24,900 --> 00:11:28,910 >> No, Intel procesory a další prostě se rozhodli v předstihu 236 00:11:28,910 --> 00:11:33,970 že určité vzory nul a Ti se rozumí konkrétní věci. 237 00:11:33,970 --> 00:11:37,040 Některé vzory nul a jedniček bude znamenat, tisknout na obrazovku, 238 00:11:37,040 --> 00:11:39,710 nebo přidání těchto dvou čísel, nebo odečíst těchto dvou čísel, 239 00:11:39,710 --> 00:11:43,310 nebo přesunout tento kus dat z Paměť můj počítač je tady, 240 00:11:43,310 --> 00:11:47,870 nebo libovolný počet jiných velmi nízké úrovni, ale nakonec užitečné, operace. 241 00:11:47,870 --> 00:11:53,022 Ale, naštěstí, my lidé nebudou muset poznat tuto úroveň detailů. 242 00:11:53,022 --> 00:11:56,230 Ve skutečnosti, stejně jako minule, kde jsme abstrahovat znovu a znovu a znovu, 243 00:11:56,230 --> 00:11:58,930 Budova z velmi nízké úrovni primitiva jako nul a jedniček 244 00:11:58,930 --> 00:12:01,160 na vyšší úrovni pojmy jako čísla a písmena, 245 00:12:01,160 --> 00:12:04,330 a barvy a další, takže můžeme jako programátoři 246 00:12:04,330 --> 00:12:07,080 stojí na ramenou jiní, kteří přišli před námi 247 00:12:07,080 --> 00:12:11,260 a použitelný software, který ostatní lidé psali před us-- 248 00:12:11,260 --> 00:12:14,340 jmenovitě programy zvané kompilátory. 249 00:12:14,340 --> 00:12:17,770 >> C je jazyk, který je obvykle sestaveny, 250 00:12:17,770 --> 00:12:22,130 což znamená, přepočtena zdrojový kód do strojového kódu. 251 00:12:22,130 --> 00:12:25,230 Zejména, co to znamená je, že pokud máte zdroj 252 00:12:25,230 --> 00:12:29,530 kód, který si sami psát, jak jsme brzy bude za chvíli na obrazovce, 253 00:12:29,530 --> 00:12:33,140 a chcete převést v konečném důsledku ke stroji code-- 254 00:12:33,140 --> 00:12:37,100 ty nuly a ty, které Pouze váš Mac nebo PC 255 00:12:37,100 --> 00:12:41,230 understands-- máte první krmivo, které zdrojový kód se jako 256 00:12:41,230 --> 00:12:46,340 vstup pro speciální program s názvem kompilátor, 257 00:12:46,340 --> 00:12:48,974 jehož výstup jsme Uvidíme je strojový kód. 258 00:12:48,974 --> 00:12:51,890 A skutečně, minule jsme si povídali o, opravdu, na konci dne, 259 00:12:51,890 --> 00:12:52,610 řešení problému. 260 00:12:52,610 --> 00:12:53,360 Musíš vstupy. 261 00:12:53,360 --> 00:12:54,318 A máte výstupy. 262 00:12:54,318 --> 00:12:56,560 A máte nějakou algoritmu ve středu. 263 00:12:56,560 --> 00:12:59,830 >> Algoritmy může jistě být realizovány v softwaru, 264 00:12:59,830 --> 00:13:02,900 jak jsme viděli s pseudokódu minulého týdne a jak uvidíme se skutečným kódem 265 00:13:02,900 --> 00:13:03,490 tento týden. 266 00:13:03,490 --> 00:13:06,430 A tak kompilátor opravdu jen má sadu algoritmů uvnitř 267 00:13:06,430 --> 00:13:10,060 o tom, že vědí, jak převést speciální klíčová slova, 268 00:13:10,060 --> 00:13:12,180 jako hlavní a printf, a jiní, že jsme právě 269 00:13:12,180 --> 00:13:17,620 viděl do vzorů nul a ty, které Intel uvnitř a ostatní CPU 270 00:13:17,620 --> 00:13:20,020 ve skutečnosti chápe. 271 00:13:20,020 --> 00:13:22,460 Tak jak to uděláme? 272 00:13:22,460 --> 00:13:24,470 Kde získáme kompilátor? 273 00:13:24,470 --> 00:13:26,400 >> Většina z nás tady máte Mac nebo PC. 274 00:13:26,400 --> 00:13:29,152 A vy systémem Mac OS, nebo Windows nebo Linux, nebo Solaris, 275 00:13:29,152 --> 00:13:30,860 nebo libovolný počet jiných operační systémy. 276 00:13:30,860 --> 00:13:32,568 A vskutku, mohli bychom jít ven na web 277 00:13:32,568 --> 00:13:35,710 a stáhnout překladač pro váš Mac nebo PC 278 00:13:35,710 --> 00:13:37,360 pro příslušný operační systém. 279 00:13:37,360 --> 00:13:39,617 Ale všichni bychom být na Různé strany, tak říkajíc. 280 00:13:39,617 --> 00:13:41,450 Měli bychom mít mírně různé konfigurace. 281 00:13:41,450 --> 00:13:43,210 A věci nebude fungovat všechny stejné. 282 00:13:43,210 --> 00:13:45,280 A vskutku, v těchto dnech mnozí z nás nepoužívají 283 00:13:45,280 --> 00:13:47,516 software, který běží pouze na našich notebooků. 284 00:13:47,516 --> 00:13:49,390 Místo toho použít něco jako prohlížeč, který 285 00:13:49,390 --> 00:13:52,930 nám umožňuje přístup k web-based aplikace v cloudu. 286 00:13:52,930 --> 00:13:55,630 A později tento semestr, uděláme přesně to. 287 00:13:55,630 --> 00:13:59,660 Budeme psát aplikace, nebo software pomocí code-- ne C, 288 00:13:59,660 --> 00:14:02,860 ale jiné jazyky jako Python a JavaScript--, které pracují v cloudu. 289 00:14:02,860 --> 00:14:05,860 >> A k tomu, že my sami V průběhu semestru 290 00:14:05,860 --> 00:14:11,890 bude skutečně používat na bázi cloud- Prostředí známý jako CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 To je programovací webová životní prostředí, nebo integrovaný rozvoj 292 00:14:16,030 --> 00:14:20,610 Prostředí IDE, který je postaven na vrcholu některé open source software s názvem Cloud 9. 293 00:14:20,610 --> 00:14:22,966 A my jsme udělali některé pedagogický zjednodušení do ní 294 00:14:22,966 --> 00:14:25,840 tak, aby se skrýt určité funkce v v prvních týdnech, které nepotřebujeme, 295 00:14:25,840 --> 00:14:27,770 po kterém můžete odhalují je a dělat většinu 296 00:14:27,770 --> 00:14:29,400 co chcete s životním prostředím. 297 00:14:29,400 --> 00:14:32,470 >> A nám umožňuje také, aby předem nainstalovat určitý software. 298 00:14:32,470 --> 00:14:35,330 Věci jako tzv CS50 knihovna, která budeme brzy vidět 299 00:14:35,330 --> 00:14:39,210 nám poskytuje v jazyce C s některými další funkce. 300 00:14:39,210 --> 00:14:44,392 Takže pokud jdete nakonec CS50.io, budete vyzváni k přihlášení, 301 00:14:44,392 --> 00:14:46,350 a jakmile to uděláte a vytvářet účet zdarma, 302 00:14:46,350 --> 00:14:52,150 budete moci přistupovat k Prostředí, které vypadá docela takhle. 303 00:14:52,150 --> 00:14:53,760 >> Nyní, to je ve výchozím režimu. 304 00:14:53,760 --> 00:14:55,650 Vše je pěkné a světlý na obrazovce. 305 00:14:55,650 --> 00:14:57,941 Mnozí z nás mají ve zvyku pracuje na CS50 kus, který je 306 00:14:57,941 --> 00:14:59,150 poměrně pozdě do noci. 307 00:14:59,150 --> 00:15:02,400 A tak někteří z vás možná raději přeměnit ji na noční režim, tak říkajíc. 308 00:15:02,400 --> 00:15:05,550 >> Ale nakonec, co jste uvidí v rámci CS50 IDE 309 00:15:05,550 --> 00:15:08,340 Je tři odlišné areas-- oblast na ležet tam, kde 310 00:15:08,340 --> 00:15:12,604 soubory se bude v mrak, což je oblast v pravém horním rohu 311 00:15:12,604 --> 00:15:14,270 kde váš kód bude upravovat. 312 00:15:14,270 --> 00:15:16,650 Budete mít možnost otevřít Jednotlivé karty pro jakýkoli program 313 00:15:16,650 --> 00:15:19,670 že budete psát tento semestr uvnitř uvedeného pravém horním rohu. 314 00:15:19,670 --> 00:15:23,070 A pak s největší arcanely, a přesto mocně, 315 00:15:23,070 --> 00:15:26,610 bude tato věc u Dno známý jako okno terminálu. 316 00:15:26,610 --> 00:15:29,450 >> To je stará škola Command Line Interface, 317 00:15:29,450 --> 00:15:32,240 nebo CLI, který umožňuje můžete spouštět příkazy 318 00:15:32,240 --> 00:15:35,260 Na computer-- v tomto případě, Počítač v cloud-- 319 00:15:35,260 --> 00:15:39,090 dělat věci, jako je kompilace kódu ze zdrojového kódu do strojového kódu, 320 00:15:39,090 --> 00:15:43,600 spouštět programy, nebo začněte webový server, nebo pro přístup k databázi, 321 00:15:43,600 --> 00:15:47,454 a jakýkoliv počet dalších technik že začneme používat zanedlouho. 322 00:15:47,454 --> 00:15:49,370 Ale aby se tam dostat, jsme bude skutečně mít 323 00:15:49,370 --> 00:15:51,240 přejít do režimu online a začít hrát. 324 00:15:51,240 --> 00:15:54,399 A k tomu, že, pojďme nejprve začít šťourat se hlavní, 325 00:15:54,399 --> 00:15:55,940 a psát hlavní část programu. 326 00:15:55,940 --> 00:15:59,170 A pojďme použít tuto funkci printf, který jsme použili dříve, 327 00:15:59,170 --> 00:16:01,050 prostě něco říct. 328 00:16:01,050 --> 00:16:04,910 >> Tak jsem tady už uvnitř CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Já jsem předem přihlášen. 330 00:16:05,930 --> 00:16:07,360 A já na plný detekční okno. 331 00:16:07,360 --> 00:16:09,670 A tak nakonec budete také v příštích problémů 332 00:16:09,670 --> 00:16:12,960 budou následovat podobné kroky, které bude poskytovat dokumentaci online. 333 00:16:12,960 --> 00:16:16,360 Takže nemusíte se obávat absorbovat každý malý technický krok 334 00:16:16,360 --> 00:16:17,730 že já tady dnes. 335 00:16:17,730 --> 00:16:19,222 >> Ale budete mít obrazovku podobnou následující. 336 00:16:19,222 --> 00:16:20,430 I stalo, že se v nočním režimu. 337 00:16:20,430 --> 00:16:22,944 A můžete oživit vše up vypnutím noční režim. 338 00:16:22,944 --> 00:16:24,860 A na konci den, budete vidět 339 00:16:24,860 --> 00:16:30,090 Tyto tři hlavní areas-- souboru Prohlížeč vlevo, kódové jazýčky nahoru vrcholu, 340 00:16:30,090 --> 00:16:32,430 a okno terminálu v dolní části. 341 00:16:32,430 --> 00:16:34,890 >> Nech mě jít dopředu a napsat svůj první program. 342 00:16:34,890 --> 00:16:42,300 Chystám se preventivně jít do souboru, Ukládat a uložit svůj soubor jako hello.c. 343 00:16:42,300 --> 00:16:46,850 Ve skutečnosti, podle konvence, jakýkoli program, který jsme píší, že je napsán v jazyce C. 344 00:16:46,850 --> 00:16:49,739 by měly být pojmenovány něco tečka c, konvencí. 345 00:16:49,739 --> 00:16:53,030 Takže budu jmenovat to hello.c, protože Jen chci pozdravit svět. 346 00:16:53,030 --> 00:16:54,820 Teď jdu pro zvětšení out a na tlačítko Uložit. 347 00:16:54,820 --> 00:16:58,180 A to všechno teď mám tady je karta ve kterém mohu začít psát kód. 348 00:16:58,180 --> 00:16:59,490 >> To nebude kompilovat. 349 00:16:59,490 --> 00:17:00,300 To znamená, že nic. 350 00:17:00,300 --> 00:17:02,750 A tak i když jsem převedeny to nul a jedniček, 351 00:17:02,750 --> 00:17:05,390 CPU bude mít žádný Myšlenka, co se děje kolem. 352 00:17:05,390 --> 00:17:14,170 Ale jestli píšu řádky, které odpovídají up s C je conventions-- C bytosti, 353 00:17:14,170 --> 00:17:20,150 Znovu, toto language-- se syntaxí jako to, printf Dobrý den world-- I a jsem 354 00:17:20,150 --> 00:17:22,210 dostali pohodlně Přitom v průběhu času. 355 00:17:22,210 --> 00:17:24,510 Takže si nemyslím, že jsem udělal případné typografické chyby. 356 00:17:24,510 --> 00:17:27,910 >> Ale vždy, úplně první Doba tak učiníte, budete. 357 00:17:27,910 --> 00:17:31,090 A co se chystám udělat, by mohli velmi stejně nebude pracovat pro vás poprvé. 358 00:17:31,090 --> 00:17:33,610 A to je naprosto v pořádku, protože právě teď 359 00:17:33,610 --> 00:17:37,662 Možná jen vidět spoustu novosti, ale v průběhu doby, jakmile se seznámí 360 00:17:37,662 --> 00:17:39,870 s tímto prostředím, a Tento jazyk, a jiní, 361 00:17:39,870 --> 00:17:42,370 začnete vidět věci, které jsou buď správné nebo nesprávné. 362 00:17:42,370 --> 00:17:44,369 >> A to je to, co učební kolegy a samozřejmě 363 00:17:44,369 --> 00:17:48,780 asistenti dostat tak dobří v průběhu času, je špinění chyby nebo chyby v kódu. 364 00:17:48,780 --> 00:17:52,110 Ale tvrdím, že existuje V této kódu nejsou žádné chyby. 365 00:17:52,110 --> 00:17:53,990 Tak jsem teď chcete spustit tento program. 366 00:17:53,990 --> 00:17:57,440 >> Nyní na své vlastní Mac nebo PC, jsem v zvyk dvojitých ikon klepnutím 367 00:17:57,440 --> 00:17:59,350 když chci spustit nějaký program. 368 00:17:59,350 --> 00:18:01,080 Ale to není model zde. 369 00:18:01,080 --> 00:18:04,570 V tomto prostředí, které je CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Jsme s použitím provozní Systém s názvem Linux. 371 00:18:07,192 --> 00:18:09,900 Linux je připomínající další operační systém, obecně známý 372 00:18:09,900 --> 00:18:10,850 jako Unix. 373 00:18:10,850 --> 00:18:16,340 A Linux je zvláště známý pro mající prostředí příkazového řádku, CLI. 374 00:18:16,340 --> 00:18:20,070 Teď jsme pomocí specifického Chuť Linux s názvem Ubuntu. 375 00:18:20,070 --> 00:18:22,770 A Ubuntu je prostě jistá verze Linuxu. 376 00:18:22,770 --> 00:18:27,900 >> Ale tyto Linuxu v těchto dnech dělat vlastně přijít s grafickým uživatelským rozhraním. 377 00:18:27,900 --> 00:18:30,360 A ta, kterou jsme náhodou Zde bude používat je web-based. 378 00:18:30,360 --> 00:18:32,735 Tak to může vypadat i trochu odlišný od něčeho 379 00:18:32,735 --> 00:18:35,310 vy sám může mít viděli nebo spustit v minulosti. 380 00:18:35,310 --> 00:18:37,910 >> Takže budu pokračovat Nyní a proveďte následující. 381 00:18:37,910 --> 00:18:40,950 Já jsem zachránil tento soubor jako hello.c. 382 00:18:40,950 --> 00:18:47,350 Chystám se jít dopředu a Typ clanghello.c Tak Clang 383 00:18:47,350 --> 00:18:49,850 pro jazyk C je kompilátor. 384 00:18:49,850 --> 00:18:51,952 Je to pre-nainstalovány v CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 A můžete si stáhnout a absolutně nainstalovat tento na vlastním počítači Mac nebo PC. 386 00:18:54,910 --> 00:18:57,910 >> Ale opět, nebudete mít všechny pre-konfigurace pro tebe udělal. 387 00:18:57,910 --> 00:19:00,940 Takže teď jsem jen chystá spustit clanghello.c. 388 00:19:00,940 --> 00:19:03,240 A teď si všimnout tuto syntaxi Zde bude nakonec 389 00:19:03,240 --> 00:19:06,930 uvědomit, znamená, že jsem v složku nebo adresář s názvem Pracovní prostor. 390 00:19:06,930 --> 00:19:11,030 Tento znak dolaru je prostě konvence po smyslu, zadejte své příkazy zde. 391 00:19:11,030 --> 00:19:14,560 >> To, co se nazývá prompt, stačí konvencí je znak dolaru. 392 00:19:14,560 --> 00:19:19,130 A když půjdu napřed a hned na tlačítko Vstoupit, nic Zdá se, že se stalo. 393 00:19:19,130 --> 00:19:20,930 Ale to je vlastně dobrá věc. 394 00:19:20,930 --> 00:19:23,650 Čím méně se to stane na obrazovky, tím větší je pravděpodobnost 395 00:19:23,650 --> 00:19:26,710 váš kód je správný, alespoň syntakticky. 396 00:19:26,710 --> 00:19:29,120 >> Takže když chci spustit tento Program, co mám dělat? 397 00:19:29,120 --> 00:19:33,770 No, to ukáže, že Výchozí název konvencí 398 00:19:33,770 --> 00:19:38,854 pro programy, pokud nezadáte jmenovat váš program je jen a.out. 399 00:19:38,854 --> 00:19:41,270 A tato syntaxe příliš, budete seznámit se s zanedlouho. 400 00:19:41,270 --> 00:19:47,500 >> Dot lomítko prostě znamená, hej, CS50 IDE, spustit program s názvem a.out 401 00:19:47,500 --> 00:19:49,400 to je v mém aktuálním adresáři. 402 00:19:49,400 --> 00:19:51,520 Že tečka znamená aktuální adresář. 403 00:19:51,520 --> 00:19:55,040 A uvidíme, jaké další takové sekvence postav znamená, že zanedlouho. 404 00:19:55,040 --> 00:19:58,430 >> Tak jdeme na to, Enter, hello world. 405 00:19:58,430 --> 00:20:00,080 A všimněte si, že to, co se stalo? 406 00:20:00,080 --> 00:20:01,580 Nejenže tisknout hello world. 407 00:20:01,580 --> 00:20:05,990 To také přesunuta kurzor na další řádek. 408 00:20:05,990 --> 00:20:07,160 >> A proč to bylo? 409 00:20:07,160 --> 00:20:12,400 Jaký byl kód, který jsme psali dříve že zajistila, že se kurzor by 410 00:20:12,400 --> 00:20:14,882 pokračovat na dalším řádku? 411 00:20:14,882 --> 00:20:16,840 Legrační věc, o Počítač je to jen bude 412 00:20:16,840 --> 00:20:18,570 dělat doslova, co si to říct dělat. 413 00:20:18,570 --> 00:20:26,050 >> Takže pokud jste to říct, aby printf Dobrý den, čárka, mezera, svět, v blízkosti citace, 414 00:20:26,050 --> 00:20:29,090 to doslova jen bude vytisknout tyto znaky. 415 00:20:29,090 --> 00:20:31,980 Ale musel jsem tento speciální znak Na konci odvolání, zpětné lomítko n. 416 00:20:31,980 --> 00:20:34,230 A to je to, co zajištěna že postava šla 417 00:20:34,230 --> 00:20:36,570 na další řádek obrazovky. 418 00:20:36,570 --> 00:20:38,097 >> Ve skutečnosti, nech mě jít, a to udělat. 419 00:20:38,097 --> 00:20:39,430 Nech mě jít dopředu a smazat. 420 00:20:39,430 --> 00:20:41,180 Nyní si všimněte, že Horní část mé obrazovce je tu 421 00:20:41,180 --> 00:20:42,890 trochu červené světlo karta naznačuje, 422 00:20:42,890 --> 00:20:45,047 hej, jste neuložili souboru. 423 00:20:45,047 --> 00:20:47,880 Takže budu pokračovat s kontrolou S nebo příkaz S uložte soubor. 424 00:20:47,880 --> 00:20:51,130 Teď to goes-- šel na moment-- zelenou. 425 00:20:51,130 --> 00:20:53,760 A teď je to zpátky do jen být blízký ikona. 426 00:20:53,760 --> 00:21:01,860 >> Mám-li nyní spustit clanghello.c znovu, Enter, tečka lomítko, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 uvidíte, že to ještě funguje. 428 00:21:04,110 --> 00:21:06,020 Ale je to pravděpodobně trochu buggy. 429 00:21:06,020 --> 00:21:08,714 Právě teď, moje prompt-- pracovní prostor, a pak ten znak dolaru, 430 00:21:08,714 --> 00:21:10,880 a pak můj skutečný prompt-- vše je na stejném řádku. 431 00:21:10,880 --> 00:21:14,540 Tak to určitě estetický chyba, i když to není opravdu logická chyba. 432 00:21:14,540 --> 00:21:16,250 >> Takže jdu napravit to, co jsem právě udělal. 433 00:21:16,250 --> 00:21:18,560 Jdu znovu spustit a.out. 434 00:21:18,560 --> 00:21:22,710 Všimněte si, jsem přidal znak nového řádku zpět. 435 00:21:22,710 --> 00:21:24,280 Jsem uložení souboru. 436 00:21:24,280 --> 00:21:31,630 >> Takže jdu znovu spustit a.out, a-- sakra, chyba, chyba znamenat chybu. 437 00:21:31,630 --> 00:21:35,020 Takže chyba je, že ačkoli Přidal jsem zpětné lomítko n tam, 438 00:21:35,020 --> 00:21:41,180 re-uloží, znovu běžel program, chování byl stejný. 439 00:21:41,180 --> 00:21:42,640 Proč by to mělo být? 440 00:21:42,640 --> 00:21:43,910 >> Mi chybí krok, že jo? 441 00:21:43,910 --> 00:21:47,620 Že klíčový krok dříve bylo, že máte to-- když změníte zdrojový kód, 442 00:21:47,620 --> 00:21:49,610 to dopadá také spustit to přes překladač 443 00:21:49,610 --> 00:21:51,102 Znovu tak dostanete nový strojový kód. 444 00:21:51,102 --> 00:21:52,810 A strojový kód, nuly a ty, 445 00:21:52,810 --> 00:21:56,260 se bude téměř identické, ale není dokonale tak, protože potřebujeme, 446 00:21:56,260 --> 00:21:57,510 Samozřejmě, že nový řádek. 447 00:21:57,510 --> 00:22:02,640 >> Takže tento problém odstranit, budu potřebovat znovu spustit clanghello.c, vstupovat, tečka 448 00:22:02,640 --> 00:22:03,800 lomítko, a.out. 449 00:22:03,800 --> 00:22:08,402 A teď, hello world je zpět tam, kde jsem, že to bude. 450 00:22:08,402 --> 00:22:09,610 Tak to je vše v pořádku a dobré. 451 00:22:09,610 --> 00:22:13,150 Ale a.out je docela hloupé jméno pro Program, i když to se stane být, 452 00:22:13,150 --> 00:22:16,530 z historických důvodů default-- což znamená, montážní výstupy. 453 00:22:16,530 --> 00:22:20,780 >> Ale dovolte mi pokračovat zde a to jinak. 454 00:22:20,780 --> 00:22:24,760 Chci hello world skutečně nazvat Dobrý den. 455 00:22:24,760 --> 00:22:28,320 Takže pokud to bylo ikonu na mém desktop, to by nemělo být a.out. 456 00:22:28,320 --> 00:22:29,730 To by byl nazýván Dobrý den. 457 00:22:29,730 --> 00:22:33,660 >> Tak, jak to udělat, to dopadá že Clang, stejně jako mnoho programů, 458 00:22:33,660 --> 00:22:37,980 podporuje argumenty příkazového řádku, nebo vlajky, nebo přepínače, 459 00:22:37,980 --> 00:22:39,600 který jednoduše ovlivnit jeho chování. 460 00:22:39,600 --> 00:22:45,160 Konkrétně Clang podporuje pomlčka O příznak, který pak trvá druhé slovo. 461 00:22:45,160 --> 00:22:48,190 V tomto případě budu svévolně, ale rozumně, říkejte tomu ahoj. 462 00:22:48,190 --> 00:22:50,710 Ale já ji mohli nazvat něco Chci, s výjimkou a.out, který 463 00:22:50,710 --> 00:22:52,390 by bylo spíše vedle bodu. 464 00:22:52,390 --> 00:22:55,640 >> A pak stačí zadat jméno spisu já chci sestavit. 465 00:22:55,640 --> 00:22:59,190 Tak se i když na začátku příkazu mám ještě Clang, 466 00:22:59,190 --> 00:23:01,410 na konci příkazu Stále mám název souboru, 467 00:23:01,410 --> 00:23:05,520 Nyní mám tyto příkazový řádek argumenty, tyto příznaky, které říkají, 468 00:23:05,520 --> 00:23:11,180 oh, mimochodem, výstup-o, soubor s názvem Dobrý den, není výchozí a.out. 469 00:23:11,180 --> 00:23:13,810 >> Takže když jsem stiskněte klávesu Enter teď, nic Zdá se, že se stalo. 470 00:23:13,810 --> 00:23:17,900 A přece, teď můžu dělat dot lomítko Dobrý den. 471 00:23:17,900 --> 00:23:19,089 Takže je to stejný program. 472 00:23:19,089 --> 00:23:21,380 Nuly a ty jsou identický na konci dne. 473 00:23:21,380 --> 00:23:24,210 >> Ale jsou ve dvou odlišný files-- a.out, 474 00:23:24,210 --> 00:23:26,490 což je první verze a jen bláhově jmenován, 475 00:23:26,490 --> 00:23:30,250 a teď Dobrý den, což je mnohem přesvědčivější název programu. 476 00:23:30,250 --> 00:23:33,195 Ale upřímně, já jsem nikdy bude to zase pamatovat, 477 00:23:33,195 --> 00:23:34,070 a znovu a znovu. 478 00:23:34,070 --> 00:23:36,411 A skutečně, jak píšeme složitějších programů, 479 00:23:36,411 --> 00:23:38,160 povely nablízku budu muset psát 480 00:23:38,160 --> 00:23:40,920 se dostane i více komplikuje stále. 481 00:23:40,920 --> 00:23:41,940 >> A tak, aby se nebála. 482 00:23:41,940 --> 00:23:46,220 Ukazuje se, že lidé dříve abychom si uvědomili, že příliš 483 00:23:46,220 --> 00:23:47,530 měl tento přesně stejný problém. 484 00:23:47,530 --> 00:23:50,900 Oni příliš neužil museli typ poměrně dlouhé, tajemných příkazů, 485 00:23:50,900 --> 00:23:52,200 natož pak pamatovat si je. 486 00:23:52,200 --> 00:23:56,070 A tak lidé před námi dělali další programy, které usnadňují 487 00:23:56,070 --> 00:23:57,670 sestavit svůj software. 488 00:23:57,670 --> 00:24:01,609 >> A skutečně, jedním z takových program se nazývá Výrobek. 489 00:24:01,609 --> 00:24:03,150 Takže já jdu dopředu a to udělat. 490 00:24:03,150 --> 00:24:05,691 Chystám se vrátit všechno, co jsem právě udělal následujícím způsobem. 491 00:24:05,691 --> 00:24:07,690 Nech mě typ LS. 492 00:24:07,690 --> 00:24:10,980 A všimněte si tři things-- a.out, a hvězda, ahoj 493 00:24:10,980 --> 00:24:12,810 a hvězda a hello.c. 494 00:24:12,810 --> 00:24:14,730 Doufejme, mělo by to být trochu intuitivní, 495 00:24:14,730 --> 00:24:18,220 pokud již dříve došlo Nic v tomto prostoru. 496 00:24:18,220 --> 00:24:21,240 Nebylo nic, co bych měl vytvořit, dokud jsme začali třídu. 497 00:24:21,240 --> 00:24:22,840 >> A jsem vytvořil hello.c. 498 00:24:22,840 --> 00:24:24,544 Pak jsem ho sestavil, a nazval jej a.out. 499 00:24:24,544 --> 00:24:27,460 A pak jsem sestavil jej opět mírně odlišně a nazval jej pozdravit. 500 00:24:27,460 --> 00:24:32,830 Takže mám tři soubory v tomto adresáři, V této složce s názvem Pracovní prostor. 501 00:24:32,830 --> 00:24:35,005 Teď vidím, že stejně když jsem oddálit skutečnosti. 502 00:24:35,005 --> 00:24:37,530 >> Kdybych oddálit tady a podívejte na tu horní pravé ruky 503 00:24:37,530 --> 00:24:39,940 roh, jak bylo slíbeno levá na pravé straně obrazovky 504 00:24:39,940 --> 00:24:42,990 je vždy ukážu co je ve vašem účtu, co je 505 00:24:42,990 --> 00:24:44,790 Vnitřek CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 A tam jsou tři soubory tam. 507 00:24:46,680 --> 00:24:49,070 >> Takže chci se zbavit a.out a ahoj. 508 00:24:49,070 --> 00:24:51,275 A jak byste mohli si představit, intuitivně, vás 509 00:24:51,275 --> 00:24:53,400 mohl řadit kontrolního kliknutí nebo klikněte pravým tlačítkem myši na toto téma. 510 00:24:53,400 --> 00:24:54,590 A tato malá nabídka objeví. 511 00:24:54,590 --> 00:24:57,170 Zde si můžete stáhnout soubor, spusťte to, prohlédnout, obnovovací, přejmenování, 512 00:24:57,170 --> 00:24:57,700 nebo co ne. 513 00:24:57,700 --> 00:25:00,260 >> A mohl bych jen odstranit, a to by jít pryč. 514 00:25:00,260 --> 00:25:05,260 Ale pojďme dělat věci s příkazem linka pro tuto chvíli, tak, aby si pohodlně 515 00:25:05,260 --> 00:25:07,010 s tím, a to následujícím způsobem. 516 00:25:07,010 --> 00:25:12,345 Chystám se jít dopředu a vyjměte a.out zadáním doslova rma.out. 517 00:25:12,345 --> 00:25:14,890 Ukázalo se, že příkaz k odstranění nebo odstranění něčeho, 518 00:25:14,890 --> 00:25:16,280 není odstranit nebo odstranit. 519 00:25:16,280 --> 00:25:21,260 >> Je to stručněji RM, stačí uložit vám některé stisky kláves, a stiskněte klávesu Enter. 520 00:25:21,260 --> 00:25:24,707 Nyní budeme mít poněkud záhadně odstranit běžný soubor a.out. 521 00:25:24,707 --> 00:25:27,040 Já opravdu nevím, co je to nepravidelný soubor by bylo dosud. 522 00:25:27,040 --> 00:25:28,660 Ale já chci, aby jej odstranit. 523 00:25:28,660 --> 00:25:30,150 >> Takže jdu Napište A pro Ano. 524 00:25:30,150 --> 00:25:31,940 Nebo bych mohl psát to, a stiskněte klávesu Enter. 525 00:25:31,940 --> 00:25:33,440 A opět se zdánlivě nic neděje. 526 00:25:33,440 --> 00:25:35,840 Ale to je obecně dobrá věc. 527 00:25:35,840 --> 00:25:40,490 >> Kdybych typ LS tentokrát, co bych měl vidět? 528 00:25:40,490 --> 00:25:44,930 Doufejme, že jen ahoj a hello.c. 529 00:25:44,930 --> 00:25:47,286 Nyní, jak stranou, budete Všimněte si tuto hvězdu, hvězdička, 530 00:25:47,286 --> 00:25:48,660 to je na konci svých programů. 531 00:25:48,660 --> 00:25:50,201 A oni také objevil v zelené barvě. 532 00:25:50,201 --> 00:25:53,970 To je jen CS50 IDE cesta z cluing vás do skutečnosti, 533 00:25:53,970 --> 00:25:55,280 že to není zdrojový kód. 534 00:25:55,280 --> 00:25:58,880 To je spustitelný, je spustitelný program, který si můžete skutečně spustit 535 00:25:58,880 --> 00:26:01,020 tím, že dělá dot lomítko, a pak je to název. 536 00:26:01,020 --> 00:26:05,860 >> A teď, nech mě jít dopředu a vyjměte to, rm ahoj, Enter, odstranit pravidelná 537 00:26:05,860 --> 00:26:08,010 soubor Dobrý den, ano. 538 00:26:08,010 --> 00:26:11,180 A teď když jsem typ LS, jsme zpátky hello.c. 539 00:26:11,180 --> 00:26:13,917 Snažte se odstranit vaše Skutečná zdrojový kód. 540 00:26:13,917 --> 00:26:16,250 I když existuje funkce zabudované do CS50 IDE kde 541 00:26:16,250 --> 00:26:19,870 můžete projít historii revizí a vzad v čase Pokud omylem 542 00:26:19,870 --> 00:26:23,660 smazat něco dělat budou mít na zřeteli podle těchto výzev ano nebo ne, 543 00:26:23,660 --> 00:26:25,381 o tom, co vlastně chcete dělat. 544 00:26:25,381 --> 00:26:27,380 A když jsem jít až na vrchol levém rohu tady, 545 00:26:27,380 --> 00:26:30,696 vše, co zůstává, je hello.c. 546 00:26:30,696 --> 00:26:32,570 Takže tam svazky další příkazy, které jste 547 00:26:32,570 --> 00:26:37,550 může provádět ve světě Linuxu z nichž jedna je, opět, I. 548 00:26:37,550 --> 00:26:40,180 A budeme si vyrobit můj program nyní následovně. 549 00:26:40,180 --> 00:26:43,270 >> Místo toho, aby dělal řinčení, namísto toho, aby Clang-o, 550 00:26:43,270 --> 00:26:45,860 Jdu prostě Doslova typ, aby ahoj. 551 00:26:45,860 --> 00:26:49,630 A teď si všimnout, jsem nepíšete, aby hello.c. 552 00:26:49,630 --> 00:26:50,910 Jsem psaní dělat ahoj. 553 00:26:50,910 --> 00:26:54,840 >> A tento program, aby to přichází s CS50 IDE a další 554 00:26:54,840 --> 00:26:57,090 obecně s Linuxem, je program, který je 555 00:26:57,090 --> 00:26:59,120 chystá udělat program s názvem Dobrý den. 556 00:26:59,120 --> 00:27:03,680 A to bude předpokládat, podle konvence, že pokud tento program mohou být provedeny, 557 00:27:03,680 --> 00:27:09,030 to bude být vyrobeny ze zdroje Kód soubor končící v bodovém c, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Takže když jsem stiskněte klávesu Enter Nyní si všimněte, že Příkaz, který se vykonán 559 00:27:12,210 --> 00:27:14,340 je ve skutečnosti ještě déle Před než dříve. 560 00:27:14,340 --> 00:27:16,670 A to proto, že jsme předkonfigurované CS50 IDE mít 561 00:27:16,670 --> 00:27:19,878 Některé další funkce postavené v tom, že nepotřebujeme ještě ne, ale brzy bude. 562 00:27:19,878 --> 00:27:23,470 Ale klíčové si uvědomit Nyní mám program Dobrý den. 563 00:27:23,470 --> 00:27:27,080 >> Kdybych typ LS znovu, já mají ahoj program. 564 00:27:27,080 --> 00:27:32,070 A můžu běžet ji Tečka a.out lomítko, ne, 565 00:27:32,070 --> 00:27:35,590 protože celý smysl této Cvičení bylo tečka lomítko Dobrý den. 566 00:27:35,590 --> 00:27:38,089 A teď mám hello world. 567 00:27:38,089 --> 00:27:39,880 Takže kupředu, Jsme téměř vždy jen 568 00:27:39,880 --> 00:27:42,088 bude kompilovat naše programy příkazem Vytvořit. 569 00:27:42,088 --> 00:27:45,300 A pak budeme je provozován dot lomítko a název programu. 570 00:27:45,300 --> 00:27:49,610 Ale uvědomit si, co udělat, je dělá pro vy, je to, že není kompilátor. 571 00:27:49,610 --> 00:27:53,310 Je to jen výhoda programu že ví, jak vyvolat kompilátor 572 00:27:53,310 --> 00:27:56,470 běžet tak, že vy sami ji použít. 573 00:27:56,470 --> 00:28:00,220 >> Co další příkazy existují Linux, a podle pořadí CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Brzy vidět, že je tu Příkaz CD, změna Directory. 575 00:28:03,107 --> 00:28:05,190 To vám umožní v rámci Váš rozhraní příkazové řádky 576 00:28:05,190 --> 00:28:07,610 k pohybu vpřed a zpět, a otevírat různé složky 577 00:28:07,610 --> 00:28:08,860 bez použití myši. 578 00:28:08,860 --> 00:28:12,470 >> LS jsme viděli, což je zkratka pro seznam soubory v aktuálním adresáři. 579 00:28:12,470 --> 00:28:14,650 Udělat Dir, můžete asi začít odvozovat 580 00:28:14,650 --> 00:28:18,150 co to znamená now-- aby adresář, Chcete-li vytvořit složku. 581 00:28:18,150 --> 00:28:21,270 RM pro odstranění, RM Dir pro odebrat directory-- a ty, 582 00:28:21,270 --> 00:28:24,160 Znovu, jsou příkazového řádku ekvivalenty toho, co 583 00:28:24,160 --> 00:28:26,945 mohl dělat v CS50 IDE s myší. 584 00:28:26,945 --> 00:28:28,820 Ale budete brzy zjistí, že někdy je to jen 585 00:28:28,820 --> 00:28:30,610 mnohem rychleji dělat věci s klávesnicí, 586 00:28:30,610 --> 00:28:33,690 a nakonec mnohem silnější. 587 00:28:33,690 --> 00:28:36,440 >> Ale je to těžké tvrdit, že něco jsme dělali doposud 588 00:28:36,440 --> 00:28:39,990 je vše, co silný, když všichni jsme byli říkám, hello world. 589 00:28:39,990 --> 00:28:43,740 A ve skutečnosti, I napevno Slova ahoj svět do mého programu. 590 00:28:43,740 --> 00:28:45,530 Dosud neexistuje žádná dynamika. 591 00:28:45,530 --> 00:28:49,320 Scratch byl řádově zajímavější minulý týden. 592 00:28:49,320 --> 00:28:51,220 >> A tak se pojďme se tam dostat. 593 00:28:51,220 --> 00:28:55,310 Pojďme se krok směrem, který by způsob, jak některé z těchto funkcí. 594 00:28:55,310 --> 00:28:59,470 Takže nejenže C přijít s printf, a svazky dalších funkcí 595 00:28:59,470 --> 00:29:01,850 z nichž některé uvidíme v průběhu času, to není 596 00:29:01,850 --> 00:29:05,760 aby to všechno tak jednoduché, hned po vybalení brány v získávání uživatelských vstupů. 597 00:29:05,760 --> 00:29:08,140 >> Ve skutečnosti je jedním z nedostatků jazyků, jako je C, 598 00:29:08,140 --> 00:29:10,140 a dokonce i Java a přesto jiní, je, že to není 599 00:29:10,140 --> 00:29:15,860 usnadňují jen dostat věci, jako je celá čísla od uživatelů, nebo řetězců, slova, 600 00:29:15,860 --> 00:29:19,970 a fráze, natož věci jako hodnot s plovoucí čárkou, nebo reálná čísla 601 00:29:19,970 --> 00:29:23,240 s desetinnými místy a ve skutečnosti dlouhá čísla, jak jsme brzy uvidí. 602 00:29:23,240 --> 00:29:27,000 Takže tento seznam funkcí zde, tito jsou stejně jako ostatní Scratch dílků 603 00:29:27,000 --> 00:29:31,090 že jsme předinstalované v CS50 IDE, který budeme používat po dobu několika týdnů 604 00:29:31,090 --> 00:29:34,010 jak koleček druhů, a Nakonec je sundat, a podívejte se 605 00:29:34,010 --> 00:29:37,210 Pod kapotou zřejmě tím, jak jsou tyto věci realizovány. 606 00:29:37,210 --> 00:29:40,460 >> Ale jak to udělat, pojďme ve skutečnosti napsat program. 607 00:29:40,460 --> 00:29:41,770 Nech mě jít napřed teď. 608 00:29:41,770 --> 00:29:44,750 A já jdu k vytvoření nového soubor kliknutím na tento malý Plus, 609 00:29:44,750 --> 00:29:45,970 a klepnutím na tlačítko Nový soubor. 610 00:29:45,970 --> 00:29:49,250 >> Jdu zachránit tento další jeden jako, řekněme, string.c, 611 00:29:49,250 --> 00:29:50,750 protože chci hrát s řetězci. 612 00:29:50,750 --> 00:29:53,990 A řetězec v C je jen posloupnost znaků. 613 00:29:53,990 --> 00:29:56,090 Takže teď pojďme vpřed a proveďte následující. 614 00:29:56,090 --> 00:30:01,204 >> Zahrnují standardní IO.h-- a to dopadá standardní IO, 615 00:30:01,204 --> 00:30:03,360 IO prostě znamená vstup a výstup. 616 00:30:03,360 --> 00:30:05,920 Tak to dopadá, že Tato linka je zde to, co 617 00:30:05,920 --> 00:30:08,140 Je nám sousední použít printf. 618 00:30:08,140 --> 00:30:10,410 Printf, samozřejmě, produkuje výstup. 619 00:30:10,410 --> 00:30:15,000 Takže aby bylo možné používat printf, to dopadá out musíte mít tento řádek kódu 620 00:30:15,000 --> 00:30:16,040 V horní části souboru. 621 00:30:16,040 --> 00:30:18,456 >> A vrátíme k tomu, co že ve skutečnosti znamená, že zanedlouho. 622 00:30:18,456 --> 00:30:20,400 Ukazuje se, že v jakýkoli program v jazyce C píšu, 623 00:30:20,400 --> 00:30:23,640 Musím začít ji kód, který vypadá takto. 624 00:30:23,640 --> 00:30:26,860 A všimněte si CS50 IDE a ostatní integrované vývojové 625 00:30:26,860 --> 00:30:30,050 prostředí, jako je to, se pokusíme co nejlépe 626 00:30:30,050 --> 00:30:31,780 oni mohou dokončit své myšlenky. 627 00:30:31,780 --> 00:30:35,930 Ve skutečnosti, před chvílí, když undo co jsem udělal, jsem stiskněte klávesu Enter. 628 00:30:35,930 --> 00:30:39,160 >> Pak jsem trefil otevřený kudrnaté rovnátka, stiskněte klávesu Enter znovu. 629 00:30:39,160 --> 00:30:40,430 A to dokončil svou myšlenku. 630 00:30:40,430 --> 00:30:45,140 To mi dal nový řádek, odsazeny o nic méně pro příjemné stylistických důvodů, uvidíme. 631 00:30:45,140 --> 00:30:48,559 A pak se mi automaticky dal že složená závorka dokončit svou myšlenku. 632 00:30:48,559 --> 00:30:50,600 Teď to není vždy odhadnout, co chcete dělat. 633 00:30:50,600 --> 00:30:53,620 Ale z velké části, to dělá ušetří několik stisků kláves. 634 00:30:53,620 --> 00:30:59,560 Takže před chvílí jsme spustili tento program-- Dobrý den, svět, a poté jej sestavil, 635 00:30:59,560 --> 00:31:00,460 a pak ji běžel. 636 00:31:00,460 --> 00:31:01,867 Ale není zde žádná dynamika. 637 00:31:01,867 --> 00:31:03,700 Co kdybychom chtěli dělat něco jiného? 638 00:31:03,700 --> 00:31:07,630 No, co kdybych chtěl vlastně získat řetězec od uživatele? 639 00:31:07,630 --> 00:31:11,250 Jdu k použití kousek skládačky volal přesně že-- dostat řetězec. 640 00:31:11,250 --> 00:31:15,860 >> Ukázalo se, že v jazyce C, že když nechcete, poskytovat informace pro kousek skládačky, 641 00:31:15,860 --> 00:31:19,360 nebo více vhodně funkci, budete doslova prostě otevřené závorky, 642 00:31:19,360 --> 00:31:20,430 V blízkosti závorka. 643 00:31:20,430 --> 00:31:25,540 Takže je to, jako by tam žádný bílý rámeček psát do. 644 00:31:25,540 --> 00:31:27,720 Hlavní slovo blok před Měl malou bílou krabičku. 645 00:31:27,720 --> 00:31:29,660 Nemáme tu bílý rámeček teď. 646 00:31:29,660 --> 00:31:33,310 >> Ale když jsem volat get řetězec I chtít, aby výsledek někde jinde. 647 00:31:33,310 --> 00:31:37,680 Takže velmi časté paradigma v C je volání funkce, jako get řetězec tady, 648 00:31:37,680 --> 00:31:41,070 a pak uložit svou návratovou hodnotu. 649 00:31:41,070 --> 00:31:44,450 Je to výsledek jeho úsilí v něčem. 650 00:31:44,450 --> 00:31:47,630 >> A co je konstruovat v programování, 651 00:31:47,630 --> 00:31:53,450 ať už v základu, nebo teď C, abychom lze použít k uložení vlastně něco? 652 00:31:53,450 --> 00:31:55,990 Volal to proměnná, že jo? 653 00:31:55,990 --> 00:32:00,320 A v Scratch, my ne ve skutečnosti jedno, co se děje v proměnných. 654 00:32:00,320 --> 00:32:02,170 >> Ale v tomto případě jsme vlastně dělat. 655 00:32:02,170 --> 00:32:03,719 Jdu říct řetězec. 656 00:32:03,719 --> 00:32:05,510 A pak jsem mohl zavolat to, co chci. 657 00:32:05,510 --> 00:32:08,340 Jdu to nazvat jméno, dostane dostat řetězec. 658 00:32:08,340 --> 00:32:10,250 >> A teď i když jste trochu na tento nový, 659 00:32:10,250 --> 00:32:11,984 Všimněte si, že jsem chybí nějaký detail. 660 00:32:11,984 --> 00:32:13,150 Já zapomněla středníkem. 661 00:32:13,150 --> 00:32:14,400 Musím dokončit tuto myšlenku. 662 00:32:14,400 --> 00:32:17,480 Takže jdu pohnout kurzorem, a udeřil středník tam. 663 00:32:17,480 --> 00:32:19,130 A co jsem právě udělal? 664 00:32:19,130 --> 00:32:21,440 V tomto řádku kódu, číslo 5 v okamžiku, 665 00:32:21,440 --> 00:32:23,799 Volám get řetězec s žádnými vstupy. 666 00:32:23,799 --> 00:32:26,090 Takže není málo bílé obrazovka jako na Save blok má. 667 00:32:26,090 --> 00:32:28,590 >> Jen říkám, hej, počítač, dejte mi řetězec. 668 00:32:28,590 --> 00:32:31,390 Rovnítko není opravdu rovnítko, samy o sobě. 669 00:32:31,390 --> 00:32:33,790 Je to úkol operátor, což znamená, 670 00:32:33,790 --> 00:32:37,860 hej, počítač, posunout hodnotu Z pravé strany směrem doleva. 671 00:32:37,860 --> 00:32:40,480 A v levé strany, mám následující. 672 00:32:40,480 --> 00:32:43,580 >> Hele, počítač, dej mi string-- posloupnost znaků. 673 00:32:43,580 --> 00:32:45,637 A volat, že String Name. 674 00:32:45,637 --> 00:32:47,220 A já nemají ani říkat Name. 675 00:32:47,220 --> 00:32:49,970 >> I to mohl zavolat, konvenčně, něco jako S, 676 00:32:49,970 --> 00:32:52,900 stejně jako jsme použili i na volat proměnné i. 677 00:32:52,900 --> 00:32:54,829 Ale teď musím něco udělat s ním. 678 00:32:54,829 --> 00:32:57,370 To by bylo dost hloupé kompilace tento kód, běh 679 00:32:57,370 --> 00:32:59,410 tento program, i když Začínám řetězec, 680 00:32:59,410 --> 00:33:01,580 protože je to stále jen jít pozdravit svět. 681 00:33:01,580 --> 00:33:06,140 >> Ale co když chci to změnit. 682 00:33:06,140 --> 00:33:07,940 Proč to mám udělat? 683 00:33:07,940 --> 00:33:11,632 Procento s, čárka s. 684 00:33:11,632 --> 00:33:13,090 A to je ještě trochu záhadná. 685 00:33:13,090 --> 00:33:15,560 >> Takže mi dovolte, aby se mé proměnné jasnější. 686 00:33:15,560 --> 00:33:17,510 Dovolte mi, abych pojmenovat tento název proměnné. 687 00:33:17,510 --> 00:33:20,230 A uvidíme, jestli nemůžeme dráždit kromě toho, co se tady děje. 688 00:33:20,230 --> 00:33:22,770 >> Takže na lince pět, já začínám řetězec. 689 00:33:22,770 --> 00:33:25,620 A já ukládání tento řetězec, bez ohledu na uživatel zadal 690 00:33:25,620 --> 00:33:28,430 na své klávesnici, v proměnné nazvané názvu. 691 00:33:28,430 --> 00:33:30,590 A ukázalo se, že printf není jen 692 00:33:30,590 --> 00:33:34,220 trvat jeden argument ve dvoulůžkových citáty, jeden vstup do uvozovek. 693 00:33:34,220 --> 00:33:39,100 >> To může trvat dva nebo tři, nebo více, například že druhý, nebo třetí, nebo čtvrtý, 694 00:33:39,100 --> 00:33:42,320 jsou všechny názvy proměnných, nebo specificky váží, 695 00:33:42,320 --> 00:33:48,610 který chcete zapojit do, dynamicky, že řetězec v uvozovkách. 696 00:33:48,610 --> 00:33:52,110 Jinými slovy, to, co by bylo špatného? 697 00:33:52,110 --> 00:33:57,920 Kdybych jen pozdravil jméno, lomítko n, mi zachránil soubor, sestavil můj kód, 698 00:33:57,920 --> 00:34:01,660 a běžel to, co by se stalo? 699 00:34:01,660 --> 00:34:05,139 >> Je to prostě neřekne, ahoj pojmenovat, doslova N-A-M-E, 700 00:34:05,139 --> 00:34:07,900 což je tak trochu hloupý, protože to nijak neliší od světa. 701 00:34:07,900 --> 00:34:10,400 Takže něco v uvozovkách je co doslova se vytiskne. 702 00:34:10,400 --> 00:34:12,520 Takže pokud chci mít zástupný tam, 703 00:34:12,520 --> 00:34:14,422 Já vlastně nutné použít některé speciální syntaxe. 704 00:34:14,422 --> 00:34:17,380 A ukázalo se, pokud si přečíst Dokumentace pro funkci printf, 705 00:34:17,380 --> 00:34:21,320 to vám řekne, že Pokud používáte procent ů, 706 00:34:21,320 --> 00:34:23,920 můžete nahradit hodnotu následujícím způsobem. 707 00:34:23,920 --> 00:34:27,190 >> Po čárkou po tom dvojité uvozovky, stačí 708 00:34:27,190 --> 00:34:29,179 zapsat na jméno proměnná, která chcete 709 00:34:29,179 --> 00:34:33,790 zapojit do tohoto formátu kódu nebo Specifikátor formátu, 710 00:34:33,790 --> 00:34:35,469 procenta s pro smyčce. 711 00:34:35,469 --> 00:34:39,190 A teď, jestli jsem zachránil svůj soubor, Jdu zpátky do mého terminálu. 712 00:34:39,190 --> 00:34:42,870 A píšu Udělat řetězec, protože, opět, název této 713 00:34:42,870 --> 00:34:45,510 Soubor, který jsem si vybrala, než bude string.c. 714 00:34:45,510 --> 00:34:48,510 >> Tak jsem chtěl říct Udělat řetězec, vstoupit. 715 00:34:48,510 --> 00:34:51,550 Ach můj bože, podívejte se na všechny chyby jsme udělali už. 716 00:34:51,550 --> 00:34:55,540 A to je-- to, co je to opravdu jako šest, sedm řádek programu? 717 00:34:55,540 --> 00:34:57,790 Tak tohle je místo, kde to může velmi rychle získat ohromující. 718 00:34:57,790 --> 00:35:00,890 >> Toto okno terminálu má Nyní jen vyvrhoval 719 00:35:00,890 --> 00:35:03,230 obrovské množství chybových zpráv. 720 00:35:03,230 --> 00:35:07,560 Jistě, nemám větší chybu Zprávy než já řádky kódu. 721 00:35:07,560 --> 00:35:08,680 Takže to, co se děje? 722 00:35:08,680 --> 00:35:10,920 >> No, nejlepší strategie dělat kdykoliv 723 00:35:10,920 --> 00:35:13,710 se setkávají drtivá seznam chyb, jako je to, 724 00:35:13,710 --> 00:35:16,690 Je posouvat zpět, podívejte se na povel jste právě běžel, což v mém případě 725 00:35:16,690 --> 00:35:18,020 je vytvořit řetězec. 726 00:35:18,020 --> 00:35:21,630 Podívejte se, co dělají udělal, a to, že dlouhá Clang příkaz, neexistuje žádný velký problém. 727 00:35:21,630 --> 00:35:22,950 >> Ale červená je špatná. 728 00:35:22,950 --> 00:35:24,750 Green se snaží být jemný a užitečné. 729 00:35:24,750 --> 00:35:26,140 Ale je to pořád špatné, v tomto případě. 730 00:35:26,140 --> 00:35:27,510 Ale tam, kde je to špatné? 731 00:35:27,510 --> 00:35:31,450 >> String.c, linka pět, znak pět. 732 00:35:31,450 --> 00:35:32,930 Takže je to jen obyčejný konvence. 733 00:35:32,930 --> 00:35:36,060 Něco něco tlustého střeva znamená, Číslo linky a číslo charakter. 734 00:35:36,060 --> 00:35:41,080 Chyba, využití nedeklarovaný Řetězec identifikátoru. 735 00:35:41,080 --> 00:35:42,900 Měli jste na mysli standardem? 736 00:35:42,900 --> 00:35:45,530 >> Takže, bohužel, Clang se snaží být užitečný. 737 00:35:45,530 --> 00:35:46,850 Ale je to špatně, v tomto případě. 738 00:35:46,850 --> 00:35:49,350 Ne, Clang, neměl jsem na mysli standardní IO. 739 00:35:49,350 --> 00:35:51,070 Myslel jsem, že na prvním řádku, ano. 740 00:35:51,070 --> 00:35:53,420 >> Ale linka pět Je to jeden tady. 741 00:35:53,420 --> 00:35:57,040 A Clang není pochopit, S-T-R-j-n-G. 742 00:35:57,040 --> 00:36:01,490 Je to nedeklarovaný identifikátor, je Slovo to prostě nikdy předtím neviděl. 743 00:36:01,490 --> 00:36:05,730 A to proto, že C, jazyk píšeme kód právě teď, 744 00:36:05,730 --> 00:36:08,070 nemá proměnné zvané řetězce. 745 00:36:08,070 --> 00:36:11,380 >> To není ve výchozím nastavení podporu něco, co nazývá řetězec. 746 00:36:11,380 --> 00:36:16,750 To je CS50 kus žargon, ale velmi běžné. 747 00:36:16,750 --> 00:36:18,600 Ale můžu opravit následujícím způsobem. 748 00:36:18,600 --> 00:36:22,090 >> Mám-li přidat jeden řádek kódu v horní části tohoto programu, 749 00:36:22,090 --> 00:36:27,890 zahrnují CS50.h, což je další soubor Někde uvnitř CS50 IDE, někde 750 00:36:27,890 --> 00:36:30,820 na pevném disku, tak říkajíc, operačního systému Ubuntu 751 00:36:30,820 --> 00:36:33,590 že běžím, že je soubor, který je 752 00:36:33,590 --> 00:36:38,740 bude učit provozní Systém, co je řetězec, jen 753 00:36:38,740 --> 00:36:41,930 jako standardní io.h je soubor v operačním systému, který je 754 00:36:41,930 --> 00:36:44,430 bude učit to, co je printf. 755 00:36:44,430 --> 00:36:46,810 >> Ve skutečnosti bychom se dostali velmi podobná zpráva 756 00:36:46,810 --> 00:36:50,600 pokud IO připustil standardu IO.h a snažil použít printf. 757 00:36:50,600 --> 00:36:53,632 Takže já jdu dopředu a jen převzít kontrolu L, abych si pročistil obrazovku. 758 00:36:53,632 --> 00:36:56,340 Nebo můžete psát jasné a bude stačí zrušit okno terminálu. 759 00:36:56,340 --> 00:36:58,020 Ale stále můžete posouvat zpět v čase. 760 00:36:58,020 --> 00:37:01,100 >> A budu znovu spustit Udělat řetězec. 761 00:37:01,100 --> 00:37:03,660 Kříž prsty tentokrát Enter. 762 00:37:03,660 --> 00:37:05,380 Panebože, to fungovalo. 763 00:37:05,380 --> 00:37:09,280 to mi ukazuje dlouhý záhadný povel to je tím, co generována přes Clang, 764 00:37:09,280 --> 00:37:10,460 ale žádné chybové zprávy. 765 00:37:10,460 --> 00:37:12,460 Takže si uvědomit, přestože můžete získat zcela 766 00:37:12,460 --> 00:37:14,480 zahlceni počet chybových zpráv, 767 00:37:14,480 --> 00:37:17,540 že to může být tak nepříjemné kaskádových efekt, kdy Clang nerozumí 768 00:37:17,540 --> 00:37:19,620 Jedna věc, která ji pak znamená, nerozumí další slovo, 769 00:37:19,620 --> 00:37:20,560 nebo další řádek. 770 00:37:20,560 --> 00:37:22,850 A tak to prostě tlumivky kódu. 771 00:37:22,850 --> 00:37:24,440 Ale oprava by mohla být jednoduchá. 772 00:37:24,440 --> 00:37:27,822 A tak vždy zaměří na První řádek výstupu. 773 00:37:27,822 --> 00:37:29,530 A jestli ne pochopit, stačí se podívat 774 00:37:29,530 --> 00:37:32,480 klíčová slova, která by mohla být záchytné body, a číslo řádku, 775 00:37:32,480 --> 00:37:34,650 a charakter, pokud že chyba může být. 776 00:37:34,650 --> 00:37:40,328 >> Nyní mi dovolte jít dopředu a zadejte dot lomítko, řetězec, vstoupit. 777 00:37:40,328 --> 00:37:44,340 Hm, to není zdravit nic. 778 00:37:44,340 --> 00:37:46,210 Proč? 779 00:37:46,210 --> 00:37:48,170 No, vzpomínám, kde je to běží? 780 00:37:48,170 --> 00:37:53,730 >> Je to pravděpodobně uvízl v tuto chvíli ve smyčce, chcete-li na lince šest, 781 00:37:53,730 --> 00:37:56,950 protože Získat řetězec od návrhu, napsal zaměstnanci CS50, 782 00:37:56,950 --> 00:38:00,350 je doslova chtěl jen sedět čeká, a čeká, 783 00:38:00,350 --> 00:38:01,850 a čeká na provázku. 784 00:38:01,850 --> 00:38:03,792 Vše máme na mysli řetězce je vstup člověka. 785 00:38:03,792 --> 00:38:04,500 Tak víte co? 786 00:38:04,500 --> 00:38:05,166 Nech mě jít napřed. 787 00:38:05,166 --> 00:38:08,704 A právě z rozmaru, dovolte mi, abych typ mé jméno, David, vstoupit. 788 00:38:08,704 --> 00:38:10,120 Teď mám větší dynamický program. 789 00:38:10,120 --> 00:38:11,240 To řekl, ahoj David. 790 00:38:11,240 --> 00:38:16,280 >> Mám-li pokračovat a spustit to znovu, zkusím říci jméno Zamila, vstoupit. 791 00:38:16,280 --> 00:38:17,940 A teď máme dynamický program. 792 00:38:17,940 --> 00:38:19,380 Nemám pevně dáno svět. 793 00:38:19,380 --> 00:38:21,760 Nemám těžké kódované pojmenovat, nebo David, nebo Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Teď je to mnohem více jako programů Víme, kde pokud to trvat vstup, 795 00:38:25,350 --> 00:38:27,870 to produkuje trochu jiný výstup. 796 00:38:27,870 --> 00:38:31,020 Nyní, to není nejlepší uživatelské zkušenosti, nebo UX. 797 00:38:31,020 --> 00:38:33,000 I spustit program. 798 00:38:33,000 --> 00:38:35,830 >> Nevím, co mám dělat, pokud jsem vlastně prohlédnout 799 00:38:35,830 --> 00:38:37,290 nebo si pamatovat zdrojový kód. 800 00:38:37,290 --> 00:38:39,640 Takže pojďme udělat uživateli zažít trochu lépe 801 00:38:39,640 --> 00:38:41,240 s nejjednodušší věcí. 802 00:38:41,240 --> 00:38:44,782 Nech mě jít zpátky do toho Program a jednoduše říci printf. 803 00:38:44,782 --> 00:38:48,870 >> A nech mě jít dopředu a říkat jméno, tlustého střeva, a prostor, a pak středník. 804 00:38:48,870 --> 00:38:51,170 A jen pro zábavu, ne vůle n. 805 00:38:51,170 --> 00:38:52,980 A to je úmyslné, protože nechci 806 00:38:52,980 --> 00:38:54,590 výzvu pro přesun na další řádek. 807 00:38:54,590 --> 00:38:58,800 >> Chci, místo toho to, aby řetězec překompilovat svůj kód do nového stroje 808 00:38:58,800 --> 00:39:00,980 Kód tečka lomítko řetězec. 809 00:39:00,980 --> 00:39:02,460 Ach, to je mnohem hezčí. 810 00:39:02,460 --> 00:39:05,780 Teď už vím, co vlastně počítač chce, abych dělal, dát mu jméno. 811 00:39:05,780 --> 00:39:10,020 >> Takže já jdu dopředu a zadejte V Rob, vstupovat, a Dobrý den, Rob. 812 00:39:10,020 --> 00:39:13,640 Tak, si uvědomit, je to stále ještě na konci dne, jen devět řádek programu. 813 00:39:13,640 --> 00:39:15,090 Ale my jsme vzít tyto dětské krůčky. 814 00:39:15,090 --> 00:39:18,380 >> Psali jsme o jeden řádek, s nimiž znali, printf, hello world. 815 00:39:18,380 --> 00:39:19,980 Pak jsme odstranili trochu to. 816 00:39:19,980 --> 00:39:21,560 A my skutečně použita get řetězec. 817 00:39:21,560 --> 00:39:23,362 A my hodil tuto hodnotu v proměnné. 818 00:39:23,362 --> 00:39:26,070 A pak jsme šli dopředu a zlepšilo dále s třetím řádku. 819 00:39:26,070 --> 00:39:29,220 A to iterativní proces vypalovacím softwarem je opravdu klíčové. 820 00:39:29,220 --> 00:39:33,420 V CS50, av životě obecně, měli byste obecně ne sednout, 821 00:39:33,420 --> 00:39:36,800 mají program na mysli, a pokusit psaní celá ta zatracená věc najednou. 822 00:39:36,800 --> 00:39:40,810 >> To bude nevyhnutelně vést k cestě více chyb než my sami tu neviděl. 823 00:39:40,810 --> 00:39:44,070 Dokonce jsem až do dnešního dne, neustále provést další hloupé chyby, 824 00:39:44,070 --> 00:39:47,480 jsou vlastně tvrdší chyby které jsou těžší zjistit. 825 00:39:47,480 --> 00:39:52,095 Ale budete dělat další chyby tím více řádků kódu psát najednou. 826 00:39:52,095 --> 00:39:54,220 A tak to praxe, napsat trochu kódu 827 00:39:54,220 --> 00:39:57,930 který vám vyhovuje, kompilaci to, spusťte jej otestovat obecněji 828 00:39:57,930 --> 00:40:01,370 pak se přesunout on-- tak stejně jako my stále vrstvení a vrstvení minulý týden, 829 00:40:01,370 --> 00:40:04,190 budova z něčeho velmi jednoduché něco složitější, 830 00:40:04,190 --> 00:40:05,200 totéž tady. 831 00:40:05,200 --> 00:40:08,500 Nesedejte, a pokusit se napsat celý problém. 832 00:40:08,500 --> 00:40:10,780 Ve skutečnosti vzít tyto dětské krůčky. 833 00:40:10,780 --> 00:40:15,100 >> Nyní, řetězce nejsou všechny že užitečné sami sobě. 834 00:40:15,100 --> 00:40:18,210 Měli bychom ve skutečnosti, v ideálním případě, stejně jako na mají v našem souboru nástrojů něco jiného. 835 00:40:18,210 --> 00:40:20,990 Takže pojďme vlastně dělat přesně to. 836 00:40:20,990 --> 00:40:24,900 >> Nech mě jít dopředu a hned vybičovat trochu jiný program. 837 00:40:24,900 --> 00:40:28,320 A budeme nazývat int.c, na celé číslo. 838 00:40:28,320 --> 00:40:30,870 Chystám se, podobně, patří CS550.h. 839 00:40:30,870 --> 00:40:33,060 Jdu obsahovat standardní IO. 840 00:40:33,060 --> 00:40:36,630 A to bude docela obyčejný V těchto prvních dnech třídy. 841 00:40:36,630 --> 00:40:39,050 >> A budu připraven Sám s hlavní funkcí. 842 00:40:39,050 --> 00:40:43,370 A teď místo toho, jak se dostat řetězec, Pojďme dál a dostat int. 843 00:40:43,370 --> 00:40:49,285 Nazvěme to i, a volat to dostat int, úzkým parens, středník. 844 00:40:49,285 --> 00:40:51,410 A teď pojďme dělat něco s tím, printf. 845 00:40:51,410 --> 00:40:56,190 >> Řekněme, že něco podobného Dobrý den, lomítko n, čárka i. 846 00:40:56,190 --> 00:41:00,010 Takže jsem docela hodně napodobování co jsem udělal před chvílí. 847 00:41:00,010 --> 00:41:01,660 Mám zástupný zde. 848 00:41:01,660 --> 00:41:05,150 Jsem čárkou i tady, protože chci, zapojit i do tohoto zástupného symbolu. 849 00:41:05,150 --> 00:41:07,250 >> Tak pojďme do toho a zkuste sestavování tohoto programu. 850 00:41:07,250 --> 00:41:10,060 Soubor se nazývá int.c. 851 00:41:10,060 --> 00:41:12,920 Tak jsem chtěl říct, aby int, vstoupit. 852 00:41:12,920 --> 00:41:16,420 Ach můj bože, ale žádný velký problém, že jo? 853 00:41:16,420 --> 00:41:17,230 Tam je chyba. 854 00:41:17,230 --> 00:41:19,810 >> K dispozici je syntaktická chyba Zde taková, že program nemůže 855 00:41:19,810 --> 00:41:25,460 být sestaveny uvnitř int.c, řádek sedmimístné 27 formátu, chyba 856 00:41:25,460 --> 00:41:28,400 specifikuje typ char hvězda, co to je. 857 00:41:28,400 --> 00:41:30,020 Ale typ argument je int. 858 00:41:30,020 --> 00:41:33,110 >> Takže i zde nebudeme to-- i když dnes je spousta materiálu, 859 00:41:33,110 --> 00:41:35,710 budeme vás zahltit naprosto každý rys C, 860 00:41:35,710 --> 00:41:38,070 a programování obecněji V právě těchto prvních několika týdnů. 861 00:41:38,070 --> 00:41:40,400 Takže tam je často bude žargonu s nimiž nejste obeznámeni. 862 00:41:40,400 --> 00:41:43,350 A ve skutečnosti, char hvězda je něco jdeme vrátit do 863 00:41:43,350 --> 00:41:44,830 za týden až dva roky. 864 00:41:44,830 --> 00:41:47,530 >> Ale teď uvidíme, jestli můžeme analyzovat slova, která jsou obeznámeni. 865 00:41:47,530 --> 00:41:50,750 Formáty-- takže jsme slyšeli formát projektant formát kódu předtím. 866 00:41:50,750 --> 00:41:51,840 To je obeznámen. 867 00:41:51,840 --> 00:41:53,840 Type-- ale argument typu int. 868 00:41:53,840 --> 00:41:55,980 Počkej chvíli, já je int. 869 00:41:55,980 --> 00:41:59,230 >> Možná procent to vlastně má nějaký uvedený význam. 870 00:41:59,230 --> 00:42:00,230 A opravdu, to dělá. 871 00:42:00,230 --> 00:42:03,101 Celé číslo, pokud chcete printf jej nahradit, 872 00:42:03,101 --> 00:42:05,350 jste skutečně muset použít odlišný formát specifikátor. 873 00:42:05,350 --> 00:42:06,890 A vy byste to nevěděl Pokud vám někdo řekl, 874 00:42:06,890 --> 00:42:07,973 nebo jste měli to udělal předtím. 875 00:42:07,973 --> 00:42:10,490 Ale procent i je co mohou být běžně používané 876 00:42:10,490 --> 00:42:12,240 V printf pro připojování celé číslo. 877 00:42:12,240 --> 00:42:14,920 Můžete také použít procent d na desítkové celé číslo. 878 00:42:14,920 --> 00:42:16,490 Ale já je pěkný a jednoduchý zde. 879 00:42:16,490 --> 00:42:17,590 Takže půjdeme s tím. 880 00:42:17,590 --> 00:42:21,160 >> Nyní mi dovolte jít dopředu a opakování make int, Enter. 881 00:42:21,160 --> 00:42:23,328 To je dobře, žádné chyby. 882 00:42:23,328 --> 00:42:27,260 Dot lomítko int-- OK, špatné uživatelské zkušenosti, protože jsem se sám řekl, 883 00:42:27,260 --> 00:42:27,760 co dělat. 884 00:42:27,760 --> 00:42:28,426 Ale to je v pořádku. 885 00:42:28,426 --> 00:42:29,480 Jsem na lov rychle. 886 00:42:29,480 --> 00:42:36,260 >> A teď nech mě jít dopředu a zadejte Davida, OK, Zamila, Robe. 887 00:42:36,260 --> 00:42:37,820 OK, takže to je dobrá věc. 888 00:42:37,820 --> 00:42:41,710 Tentokrát jsem pomocí funkce, puzzle kus, nazvaný get int. 889 00:42:41,710 --> 00:42:44,230 A ukázalo se out-- a my viz později v term-- 890 00:42:44,230 --> 00:42:47,730 personál CS50 zavedla se řetězec, takovým způsobem, 891 00:42:47,730 --> 00:42:50,350 že bude pouze fyzikálně získat řetězec pro vás. 892 00:42:50,350 --> 00:42:54,340 >> Že provedl get int takovým způsobem, že to bude jen 893 00:42:54,340 --> 00:42:55,590 získat číslo pro vás. 894 00:42:55,590 --> 00:42:57,830 A pokud vás, člověk, nespolupracují, je to 895 00:42:57,830 --> 00:43:00,590 doslova jen tak říkají opakovat, opakovat, opakování, 896 00:43:00,590 --> 00:43:05,200 Doslova tam sedí smyčky, dokud budete zavázat s nějakým magickým číslem, 897 00:43:05,200 --> 00:43:07,670 jako je 50 ° C a 50 Dobrý den. 898 00:43:07,670 --> 00:43:11,440 >> Nebo když narazíme to znovu a zadejte 42, ahoj 42. 899 00:43:11,440 --> 00:43:15,750 A tak se funkce get int Uvnitř této skládačky 900 00:43:15,750 --> 00:43:19,050 je dost logické, dost myšlenka, přijít na to, co je to slovo? 901 00:43:19,050 --> 00:43:20,330 A co je to číslo? 902 00:43:20,330 --> 00:43:23,165 Pouze přijetí, nakonec i čísla. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Tak to dopadá, že toto není všechno, že expresivní. 905 00:43:30,230 --> 00:43:30,910 zatím. 906 00:43:30,910 --> 00:43:33,690 Takže hurá, naposledy jsme šlo docela rychle 907 00:43:33,690 --> 00:43:38,320 do prováděcích her a animací, a uměleckých děl v nuly. 908 00:43:38,320 --> 00:43:42,260 A tady jsme, že obsah s Hello World, a přivítejte 50. 909 00:43:42,260 --> 00:43:43,696 >> To není všechno, co inspirativní. 910 00:43:43,696 --> 00:43:46,070 A skutečně, tito první pár Příklady bude trvat nějaký čas 911 00:43:46,070 --> 00:43:47,510 rozjet vzrušením. 912 00:43:47,510 --> 00:43:49,854 Ale máme mnohem víc ovládat se ve skutečnosti. 913 00:43:49,854 --> 00:43:51,770 A budeme velmi rychle začít vrstvení 914 00:43:51,770 --> 00:43:53,870 v horní části těchto základních tvary. 915 00:43:53,870 --> 00:43:56,370 >> Ale první, pojďme rozumět jaké jsou omezení. 916 00:43:56,370 --> 00:43:58,620 Ve skutečnosti, jednou z věcí, Scratch není snadné 917 00:43:58,620 --> 00:44:00,990 dělejme opravdu vypadat Pod kapotou 918 00:44:00,990 --> 00:44:03,740 a pochopit, co je to Počítač je, co to může dělat, 919 00:44:03,740 --> 00:44:05,250 a jaké jsou jeho omezení. 920 00:44:05,250 --> 00:44:08,580 A opravdu, že nedostatek porozumění, potenciálně dlouhodobý 921 00:44:08,580 --> 00:44:12,520 může vést k našemu vlastnímu psaní mistakes-- chyby, psaní nezabezpečeného softwaru, který 922 00:44:12,520 --> 00:44:13,880 dostane hacknutý nějakým způsobem. 923 00:44:13,880 --> 00:44:17,130 >> Takže pojďme se některé kroky směrem Pochopení tohoto trochu lépe 924 00:44:17,130 --> 00:44:19,710 způsob, řekněme, následující příklad. 925 00:44:19,710 --> 00:44:23,550 Chystám se jít dopředu a realizovat real rychlý program s názvem zmije. 926 00:44:23,550 --> 00:44:25,134 Stejně jako, řekněme, přidat nějaké čísla dohromady. 927 00:44:25,134 --> 00:44:27,800 A jdu ke kódu některé rohy tady, a jen kopírovat a vkládat 928 00:44:27,800 --> 00:44:30,270 kde jsem byl předtím, jen takže můžeme jít dřív. 929 00:44:30,270 --> 00:44:33,090 Takže teď mám základní začátky z programu s názvem zmije. 930 00:44:33,090 --> 00:44:34,670 >> A pojďme do toho a toho dosáhnout. 931 00:44:34,670 --> 00:44:38,680 Chystám se jít dopředu a řekněme, intx dostane dostat int. 932 00:44:38,680 --> 00:44:39,430 A víte co? 933 00:44:39,430 --> 00:44:40,990 Pojďme udělat lepší uživatelskou zkušenost. 934 00:44:40,990 --> 00:44:45,740 >> Takže řekněme x a účinně vyzve uživatele, aby nám x. 935 00:44:45,740 --> 00:44:50,600 A nechte mě jít dopředu a říkat, printf jak se o y je tentokrát čeká 936 00:44:50,600 --> 00:44:53,140 dvě hodnoty od uživatele. 937 00:44:53,140 --> 00:44:59,759 A pak pojďme prostě jít dopředu a řekněme, printf součet x a y je. 938 00:44:59,759 --> 00:45:01,300 A teď nechci dělat procent ů. 939 00:45:01,300 --> 00:45:09,080 Chci dělat procent i, lomítko n, a potom připojte součet hodnoty. 940 00:45:09,080 --> 00:45:10,620 >> Tak jak můžu jít asi dělá? 941 00:45:10,620 --> 00:45:11,270 Víš co? 942 00:45:11,270 --> 00:45:12,840 Vím, jak používat proměnné. 943 00:45:12,840 --> 00:45:15,140 Nech mě vyhlásit novou, int Z. 944 00:45:15,140 --> 00:45:16,770 >> A budu hádat zde. 945 00:45:16,770 --> 00:45:21,470 Pokud nejsou rovné v tom znamení jazyk, možná můžu prostě X plus y, 946 00:45:21,470 --> 00:45:23,660 tak dlouho, jak jsem skončit můj Myslel s středníkem? 947 00:45:23,660 --> 00:45:28,170 Teď se můžu vrátit tady dole, zapojte do Z, dokončit tuto myšlenku se středníkem. 948 00:45:28,170 --> 00:45:33,160 A podívejme se nyní, pokud tyto Sekvence lines-- x je dostat int. 949 00:45:33,160 --> 00:45:34,770 Y je dostat int. 950 00:45:34,770 --> 00:45:37,980 >> Přidejte x a y, ukládat hodnotu v Z- tak opět vzpomenout na rovnítko 951 00:45:37,980 --> 00:45:38,560 není rovno. 952 00:45:38,560 --> 00:45:41,100 Je to úkol zprava doleva. 953 00:45:41,100 --> 00:45:45,180 A pojďme vytisknout že součet z X a Y není doslova z, 954 00:45:45,180 --> 00:45:46,830 ale to, co je uvnitř z. 955 00:45:46,830 --> 00:45:50,090 Takže pojďme udělat zmije - pěkné, žádné chyby tomto okamžiku. 956 00:45:50,090 --> 00:45:53,030 Dot lomítko zmije, vstupovat, x bude 1. 957 00:45:53,030 --> 00:45:55,380 >> Y bude 2. 958 00:45:55,380 --> 00:45:58,964 A součet x a y je 3. 959 00:45:58,964 --> 00:46:00,130 Takže to je všechno v pořádku a dobře. 960 00:46:00,130 --> 00:46:03,260 >> Takže byste si představit, že matematiku by měl pracovat v programu, jako je tento. 961 00:46:03,260 --> 00:46:04,040 Ale víte co? 962 00:46:04,040 --> 00:46:06,904 Je tato proměnná, řádek 12, dokonce nezbytné? 963 00:46:06,904 --> 00:46:09,820 Nemusíte se dostat ve zvyku pouhého ukládání věcí do proměnných 964 00:46:09,820 --> 00:46:10,980 jen proto, že je to možné. 965 00:46:10,980 --> 00:46:13,550 A ve skutečnosti, to je všeobecně považováno za špatné konstrukce 966 00:46:13,550 --> 00:46:18,100 Pokud vytváříte proměnnou, nazvaný z v tomto případě něco, co v něm skladování, 967 00:46:18,100 --> 00:46:21,390 a pak hned ji používat, ale nikdy znovu. 968 00:46:21,390 --> 00:46:24,700 Proč něco dát název stejně jako z Pokud jste doslova 969 00:46:24,700 --> 00:46:26,770 bude používat, že to pouze jednou, a to 970 00:46:26,770 --> 00:46:29,380 proximální k místu, kde jste vytvořili se v první řadě, 971 00:46:29,380 --> 00:46:31,052 tak blízko, pokud jde o řádků kódu? 972 00:46:31,052 --> 00:46:31,760 Tak víte co? 973 00:46:31,760 --> 00:46:34,480 Ukazuje se, že C je dost flexibilní. 974 00:46:34,480 --> 00:46:36,586 Kdybych skutečně chtějí plug-in hodnotách tady, 975 00:46:36,586 --> 00:46:38,210 Nepotřebuji vyhlásit novou proměnnou. 976 00:46:38,210 --> 00:46:41,680 Mohl bych plug-in X plus y, protože C rozumí 977 00:46:41,680 --> 00:46:43,390 aritmetika a matematické operátory. 978 00:46:43,390 --> 00:46:47,140 >> Takže můžu jednoduše říci, dělat tuto matematiku, x a y, ať už tyto hodnoty, 979 00:46:47,140 --> 00:46:50,780 zástrčka výsledný integer do tohoto řetězce. 980 00:46:50,780 --> 00:46:53,730 Takže by to mohlo být, ačkoli pouze jeden řádek kratší, 981 00:46:53,730 --> 00:46:58,480 lepší design, lepší program protože tam je méně kódu, a proto 982 00:46:58,480 --> 00:46:59,921 méně pro mě pochopit. 983 00:46:59,921 --> 00:47:01,920 A je to také jen čistší, pokud nejsme 984 00:47:01,920 --> 00:47:04,620 zavádění nových slov, nové symboly, stejně jako z, 985 00:47:04,620 --> 00:47:07,510 i když ne ve skutečnosti slouží velký účelu. 986 00:47:07,510 --> 00:47:12,890 >> Bohužel, matematika není všichni, že spolehlivé někdy. 987 00:47:12,890 --> 00:47:15,270 Pojďme dál a to udělat. 988 00:47:15,270 --> 00:47:18,200 Chystám se pokračovat Nyní a proveďte následující. 989 00:47:18,200 --> 00:47:27,650 >> Udělejme printf, procento i plus procenta I bude procenta i, n lomítko. 990 00:47:27,650 --> 00:47:32,240 A já udělám tohle-- XYX navíc y. 991 00:47:32,240 --> 00:47:34,821 Takže jsem prostě jít přepsat to trochu jinak zde. 992 00:47:34,821 --> 00:47:36,320 Nech mě to prostě udělat rychlou kontrolu zdravý rozum. 993 00:47:36,320 --> 00:47:37,986 Opět platí, pojďme se dostat před sebe. 994 00:47:37,986 --> 00:47:41,420 Udělat sčítačka, tečka lomítko výbavu. 995 00:47:41,420 --> 00:47:44,950 x je 1, y je 2, 1 a 2 je 3. 996 00:47:44,950 --> 00:47:45,870 Tak to je dobře. 997 00:47:45,870 --> 00:47:49,060 Ale pojďme zkomplikovat to teď bit, a vytvořit nový soubor. 998 00:47:49,060 --> 00:47:53,350 >> Jdu volat tento jeden, říkají, ints, množné číslo pro celá čísla. 999 00:47:53,350 --> 00:47:55,980 Začněme, kde jsem byl před chvílí. 1000 00:47:55,980 --> 00:47:57,770 Ale teď pojďme udělat několik dalších řádků. 1001 00:47:57,770 --> 00:48:03,430 Nech mě jít dopředu a udělat následující, printf, procento i, minus procenta i, 1002 00:48:03,430 --> 00:48:08,959 Je procenta i, čárka x, čárka yx minus y. 1003 00:48:08,959 --> 00:48:10,750 Tak jsem něco dělat jiná matematika tam. 1004 00:48:10,750 --> 00:48:11,624 Udělejme ještě jeden. 1005 00:48:11,624 --> 00:48:16,610 Takže procent i časy procent i je i procento, lomítko n. 1006 00:48:16,610 --> 00:48:21,430 Pojďme plug-in x a y a x y časy. 1007 00:48:21,430 --> 00:48:24,530 Budeme použít hvězdičku na počítač pro časy. 1008 00:48:24,530 --> 00:48:26,390 >> Nepoužívat x. x je název proměnné zde. 1009 00:48:26,390 --> 00:48:28,270 Můžete použít hvězda pro násobení. 1010 00:48:28,270 --> 00:48:29,020 Udělejme ještě jeden. 1011 00:48:29,020 --> 00:48:34,580 Printf procenta I, rozdělených podle procent I se procento i, 1012 00:48:34,580 --> 00:48:40,460 lomítko n. xy děleno y- takže můžete použít lomítko v jazyce C 1013 00:48:40,460 --> 00:48:41,502 dělat divize. 1014 00:48:41,502 --> 00:48:42,460 A jdem na jednu další. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Zbývající procenta I, rozdělených podle procent I, se procento i. 1017 00:48:55,240 --> 00:48:59,550 xy-- a teď zbytek je to, co zbude. 1018 00:48:59,550 --> 00:49:02,980 Při pokusu rozdělením jmenovatele do čitatele, 1019 00:49:02,980 --> 00:49:05,570 kolik zbude, že jste nemohli rozdělit ven? 1020 00:49:05,570 --> 00:49:07,910 >> Takže tam není opravdu, nezbytně, symbol 1021 00:49:07,910 --> 00:49:09,470 jsme použili na základní škole za to. 1022 00:49:09,470 --> 00:49:13,830 Ale tam v C. Můžete říkat x modulo y, kde 1023 00:49:13,830 --> 00:49:18,000 Tento znak procenta v tomto context-- zavádějícím způsobem, když jste uvnitř 1024 00:49:18,000 --> 00:49:20,170 z uvozovek, Uvnitř printf, procenta 1025 00:49:20,170 --> 00:49:21,830 se používá jako specifikátoru formátu. 1026 00:49:21,830 --> 00:49:25,420 >> Pokud použijete procent mimo že matematický výraz, 1027 00:49:25,420 --> 00:49:29,910 je to operátor modulo pro modulární arithmetic-- pro naše účely 1028 00:49:29,910 --> 00:49:33,650 tady, prostě znamená, jaká je Zbytek x děleno y? 1029 00:49:33,650 --> 00:49:36,130 Takže x děleno y je x lomítko y. 1030 00:49:36,130 --> 00:49:38,220 Jaký je zbytek x děleno y? 1031 00:49:38,220 --> 00:49:41,780 Je x mod y, což by programátor říct. 1032 00:49:41,780 --> 00:49:48,300 >> Takže když jsem se žádné chyby tady, dovolte mi, abych pokračovat a dělat ints, množné číslo, pěkný, 1033 00:49:48,300 --> 00:49:50,010 a tečka Slash ints. 1034 00:49:50,010 --> 00:49:55,270 A pojďme do toho a ano, řekněme, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Dobře, 1 plus 10 je 11, kontrola. 1036 00:49:58,390 --> 00:50:01,240 1 minus 10 je negativní 9, zkontrolovat. 1037 00:50:01,240 --> 00:50:03,420 >> 1 krát 10 je 10, kontrola. 1038 00:50:03,420 --> 00:50:07,090 1 děleno 10 je-- OK, budeme přeskočit, že jeden. 1039 00:50:07,090 --> 00:50:09,480 Zbývající část 1 děleno 10 je 1. 1040 00:50:09,480 --> 00:50:10,680 To je správně. 1041 00:50:10,680 --> 00:50:12,630 Ale je tu chyba tady. 1042 00:50:12,630 --> 00:50:15,390 >> Takže ten, který jsem dal můj předat, není správné. 1043 00:50:15,390 --> 00:50:16,670 Myslím, že je to blízko do 0 ° C. 1044 00:50:16,670 --> 00:50:20,670 1 děleno 10, víte, když jsme řezání některé rohy, jistě, je to nula. 1045 00:50:20,670 --> 00:50:28,050 Ale to by mělo být opravdu 1/10, 0,1, nebo 0,10, 0,1000, a tak dále. 1046 00:50:28,050 --> 00:50:30,600 >> To by nemělo být opravdu nulový. 1047 00:50:30,600 --> 00:50:35,990 No, ukázalo se, že je počítač dělá doslova to, co jsme to oznámili dělat. 1048 00:50:35,990 --> 00:50:39,460 Děláme matematiku jako x děleno y. 1049 00:50:39,460 --> 00:50:44,680 A oba x a y, za řádky kódu dříve, jsou celá čísla. 1050 00:50:44,680 --> 00:50:50,440 >> Kromě toho, na řádku 15, jsme říkat printf, hej, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 celé číslo, plug-in celé číslo, plug-in s integer-- specificky 1052 00:50:54,230 --> 00:50:57,580 x, y a pak, a pak x děleno y. x a y jsou ints. 1053 00:50:57,580 --> 00:50:59,060 Jsme tam dobře. 1054 00:50:59,060 --> 00:51:01,250 >> Ale co je x děleno x? 1055 00:51:01,250 --> 00:51:06,790 x děleno y by měly být, matematicky, desetina, nebo 0,1, 1056 00:51:06,790 --> 00:51:11,600 což je reálné číslo, reálné číslo mající potenciálně desetinnou čárku. 1057 00:51:11,600 --> 00:51:13,230 To není celé číslo. 1058 00:51:13,230 --> 00:51:18,290 >> Ale co je nejblíže číslo 1/10, nebo 0,1? 1059 00:51:18,290 --> 00:51:21,114 Jo, docela to je nula. 1060 00:51:21,114 --> 00:51:22,030 0.1 je takhle moc. 1061 00:51:22,030 --> 00:51:22,890 A 1 je to moc. 1062 00:51:22,890 --> 00:51:25,870 Takže 1/10 je blíže k 0, než je jedna. 1063 00:51:25,870 --> 00:51:30,800 >> A tak to, co C dělá pro us-- druh, protože jsme oznámili to to-- 1064 00:51:30,800 --> 00:51:32,600 Je zkracovat, že celé číslo. 1065 00:51:32,600 --> 00:51:40,540 Trvá to na hodnotu, která je opět má být něco jako 0,1000, 1066 00:51:40,540 --> 00:51:41,800 0, a tak dále. 1067 00:51:41,800 --> 00:51:45,320 A to vše zkrácení za desetinnou čárkou 1068 00:51:45,320 --> 00:51:47,510 tak, že to vše věci, protože to není 1069 00:51:47,510 --> 00:51:51,910 zapadají do konceptu celé číslo, které je jen číslo jako negativní 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 nahoru a dolů, to vše odhodí za desetinnou čárkou, protože jste 1071 00:51:55,830 --> 00:51:59,020 nevejde desetinnou čárku V celé číslo podle definice. 1072 00:51:59,020 --> 00:52:01,290 >> Takže odpověď je zde nulová. 1073 00:52:01,290 --> 00:52:02,600 Tak jak opravit? 1074 00:52:02,600 --> 00:52:04,400 Musíme jiné řešení dohromady. 1075 00:52:04,400 --> 00:52:06,880 A můžeme to udělat, a to následovně. 1076 00:52:06,880 --> 00:52:12,820 >> Nech mě jít dopředu a vytvořit novou Soubor, tentokrát s názvem floats.c. 1077 00:52:12,820 --> 00:52:16,500 A uložit jej zde v Stejný adresář, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 A nech mě jít dopředu a kopírování některé z těchto kódu z dříve. 1080 00:52:23,260 --> 00:52:27,690 >> Ale místo toho, jak se dostat int, jdeme na to. 1081 00:52:27,690 --> 00:52:31,037 Dej mi plovoucí bodovou hodnotu s názvem x. kde s pohyblivou řádovou čárkou 1082 00:52:31,037 --> 00:52:33,370 Hodnota je jen doslovně něco s plovoucí desetinnou čárkou. 1083 00:52:33,370 --> 00:52:34,410 Může se pohybovat doleva, doprava. 1084 00:52:34,410 --> 00:52:35,530 Je to reálné číslo. 1085 00:52:35,530 --> 00:52:38,050 >> A dovolte mi říkají ne dostat int, ale dostat se plavat, 1086 00:52:38,050 --> 00:52:41,420 který byl také mezi nabídce možností v knihovně C250. 1087 00:52:41,420 --> 00:52:43,220 Změňme r na hotovost. 1088 00:52:43,220 --> 00:52:45,000 Takže to bude mít float. 1089 00:52:45,000 --> 00:52:47,620 >> A teď nechceme připojit ints. 1090 00:52:47,620 --> 00:52:53,130 Ukazuje se, že musíme použít procenta f pro float, procento f pro float, 1091 00:52:53,130 --> 00:52:54,560 a nyní jej uložit. 1092 00:52:54,560 --> 00:53:01,220 A teď, palce, aby plováky, pěkné, dot lomítko plováky. 1093 00:53:01,220 --> 00:53:04,280 x bude jeden 1. y Bude 10 znovu. 1094 00:53:04,280 --> 00:53:08,240 >> A, pěkný, OK můj přírůstek je správný. 1095 00:53:08,240 --> 00:53:10,240 Doufal jsem, že po dobu delší, ale zapomněl jsem to napsat. 1096 00:53:10,240 --> 00:53:13,250 Takže pojďme a opravit tuto logickou chybu. 1097 00:53:13,250 --> 00:53:16,280 >> Pojďme dál a chytit následující. 1098 00:53:16,280 --> 00:53:18,080 Budeme prostě trochu kopírovat a vložit. 1099 00:53:18,080 --> 00:53:20,080 A budu říkat minus. 1100 00:53:20,080 --> 00:53:21,890 >> A budu říkat krát. 1101 00:53:21,890 --> 00:53:24,060 A já chtěl říct rozdělena. 1102 00:53:24,060 --> 00:53:28,240 A já nebudu dělat modulo, což není tak germaine zde, 1103 00:53:28,240 --> 00:53:33,690 děleno f, a doba plus-- OK, pojďme to udělat znovu. 1104 00:53:33,690 --> 00:53:44,210 >> Dělají plováky, tečka lomítko plováky, a 1, 10, a-- pěkný, ne, OK. 1105 00:53:44,210 --> 00:53:45,250 Takže jsem idiot. 1106 00:53:45,250 --> 00:53:47,000 Tak to je velmi častý v informatice 1107 00:53:47,000 --> 00:53:49,780 dělat hloupé chyby, jako je tato. 1108 00:53:49,780 --> 00:53:53,100 >> Pro pedagogické účely, co jsem opravdu chtěl dělat 1109 00:53:53,100 --> 00:53:57,410 byla-li změnit vědu zde na plus, mínus, do doby, 1110 00:53:57,410 --> 00:54:01,140 a rozdělit, jako vy snad Všiml během tohoto cvičení. 1111 00:54:01,140 --> 00:54:04,700 Takže teď pojďme re-kompilaci to Program, dělat dot lomítko plováky. 1112 00:54:04,700 --> 00:54:07,950 >> A potřetí, pojďme uvidíme, jestli to splňuje mé očekávání. 1113 00:54:07,950 --> 00:54:21,480 1, 10, vstupovat, ano, OK, 1,000, děleno 10.000, je 0,100000. 1114 00:54:21,480 --> 00:54:24,952 A ukázalo se můžeme kontrolovat, kolik Čísla jsou po těch desetinná místa. 1115 00:54:24,952 --> 00:54:25,660 ve skutečnosti budeme. 1116 00:54:25,660 --> 00:54:26,790 Vrátíme se k tomu. 1117 00:54:26,790 --> 00:54:28,440 >> Ale nyní, ve skutečnosti, že matematický je správné. 1118 00:54:28,440 --> 00:54:30,090 Takže, ještě jednou, co je tady stánek s jídlem? 1119 00:54:30,090 --> 00:54:33,050 Ukazuje se, že v C existují nejen jen strings-- a ve skutečnosti, 1120 00:54:33,050 --> 00:54:36,120 nejsou ve skutečnosti, protože my přidat ty s knihovnou CS50. 1121 00:54:36,120 --> 00:54:37,710 Ale tam nejsou jen ints. 1122 00:54:37,710 --> 00:54:38,990 >> K dispozici jsou také plave. 1123 00:54:38,990 --> 00:54:42,810 A ukázalo se, spoustu dalších údajů Typy také, že budeme používat zanedlouho. 1124 00:54:42,810 --> 00:54:46,270 Ukázalo se, že chcete-li jediný znak, nikoli řetězec znaků, 1125 00:54:46,270 --> 00:54:47,610 můžete použít jen znak. 1126 00:54:47,610 --> 00:54:52,350 >> Ukazuje se, že pokud chcete bool, logickou hodnotu pravda, nebo jen nepravdivé, 1127 00:54:52,350 --> 00:54:56,840 Díky knihovně CS50, máme přidán do C datový typ bool stejně. 1128 00:54:56,840 --> 00:54:59,180 Ale je to také přítomný v mnoho jiných jazyků stejně. 1129 00:54:59,180 --> 00:55:04,130 A ukázalo se, že někdy Potřebujete větší množství pak přijde ve výchozím nastavení 1130 00:55:04,130 --> 00:55:05,210 s ints a plováky. 1131 00:55:05,210 --> 00:55:10,590 >> A ve skutečnosti, dvojitý je číslo který používá ne 32 bitů, ale 64 bitů. 1132 00:55:10,590 --> 00:55:14,990 A long je číslo, které používá ne 32 bitů, ale 64 bitů, 1133 00:55:14,990 --> 00:55:19,190 respektive pro plovoucí desetinnou čárkou hodnoty a celá čísla, resp. 1134 00:55:19,190 --> 00:55:22,780 Tak ať to vlastně nyní vidět v akci. 1135 00:55:22,780 --> 00:55:26,150 >> Chystám se pokračovat zde a vybičovat jeden jiný program. 1136 00:55:26,150 --> 00:55:32,020 Zde budu pokračovat a to zahrnuje CS50.h. 1137 00:55:32,020 --> 00:55:34,910 A nech mě jít, zahrnují standardní IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> A všimněte si něco funky se tady děje. 1139 00:55:37,320 --> 00:55:40,592 Není to barevné kódování věci stejným způsobem, jako tomu bylo dříve. 1140 00:55:40,592 --> 00:55:43,550 A ukázalo se, že je to proto, že jsem nedal ta věc název souboru. 1141 00:55:43,550 --> 00:55:47,270 >> Jdu zavolat tenhle sizeof.c, a udeřil na Uložit. 1142 00:55:47,270 --> 00:55:51,039 A všimněte si, co se stane s mým velmi bílá kód proti tomuto černému pozadí. 1143 00:55:51,039 --> 00:55:52,830 A teď, aspoň je tu některé fialové tam. 1144 00:55:52,830 --> 00:55:54,490 A to je syntaxe zvýrazněny. 1145 00:55:54,490 --> 00:55:57,700 >> To proto, že zkrátka jsem řekl IDE, jaký typ souboru 1146 00:55:57,700 --> 00:56:01,060 je to tím, že mu jméno, a specificky příponu souboru. 1147 00:56:01,060 --> 00:56:03,620 Teď pojďme do toho a toho dosáhnout. 1148 00:56:03,620 --> 00:56:08,910 Chystám se jít dopředu a velmi jednoduše vytisknout following-- bool 1149 00:56:08,910 --> 00:56:11,080 Je procenta LU. 1150 00:56:11,080 --> 00:56:12,950 >> Vrátíme se k že za chvíli. 1151 00:56:12,950 --> 00:56:15,840 A pak jdu velikost tisku bool. 1152 00:56:15,840 --> 00:56:18,170 A teď, jen proto, aby ušetřit Sám nějaký čas, jsem 1153 00:56:18,170 --> 00:56:20,280 dělat celek banda z nich najednou. 1154 00:56:20,280 --> 00:56:24,620 A konkrétně, jdu změnit na char a char. 1155 00:56:24,620 --> 00:56:27,760 Ten, budu měnit na dvojnásobek a double. 1156 00:56:27,760 --> 00:56:31,440 >> Ten, budu měnit s plovákem a hotovost. 1157 00:56:31,440 --> 00:56:35,670 Ten, budu změnit na int a int. 1158 00:56:35,670 --> 00:56:38,660 A tenhle, budu Pro změnu na long. 1159 00:56:38,660 --> 00:56:40,840 A to stále trvají dlouhá doba, dlouhá dlouhá. 1160 00:56:40,840 --> 00:56:44,572 >> A pak konečně jsem dal Sám jeden příliš mnoho, řetězec. 1161 00:56:44,572 --> 00:56:47,030 Ukazuje se, že v jazyce C, je tu speciální operátor nazvaný 1162 00:56:47,030 --> 00:56:50,260 velikost, která je doslova bude při spuštění, 1163 00:56:50,260 --> 00:56:52,099 řekněte nám velikost každé z těchto proměnných. 1164 00:56:52,099 --> 00:56:53,890 A je to způsob, nyní můžeme připojit zpět 1165 00:56:53,890 --> 00:56:57,140 z minulého týdne diskuse dat a reprezentace. 1166 00:56:57,140 --> 00:57:00,330 >> Nech mě jít dopředu a kompilovat velikost bodového velikosti lomítko části. 1167 00:57:00,330 --> 00:57:01,210 A podívejme. 1168 00:57:01,210 --> 00:57:05,210 Ukazuje se, že v jazyce C, konkrétně na CS50 IDE 1169 00:57:05,210 --> 00:57:08,170 Zejména pokud jde o operační systém Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 což je 64-bitový operační Systém v tomto případě 1171 00:57:11,100 --> 00:57:14,189 boolovské se chystá pouze jeden bajt prostoru. 1172 00:57:14,189 --> 00:57:16,480 To je, jak se měří velikost, není v bitech, ale v bytech. 1173 00:57:16,480 --> 00:57:18,690 A připomínají, že jeden bajt je osm bitů. 1174 00:57:18,690 --> 00:57:22,030 Takže bool, přestože Technicky je třeba pouze 0 nebo 1, 1175 00:57:22,030 --> 00:57:24,092 je to trochu zbytečné Jak jsme implementoval. 1176 00:57:24,092 --> 00:57:26,800 Je to vlastně bude používat celek byte-- takže všechny nuly, jsou možná 1177 00:57:26,800 --> 00:57:31,050 všechny z nich, nebo něco takového, nebo jen jeden 1 mezi osm bitů. 1178 00:57:31,050 --> 00:57:34,962 >> Char, mezitím, který se používá pro znak jako ASCII znak za minulého týdne, 1179 00:57:34,962 --> 00:57:36,170 bude jeden znak. 1180 00:57:36,170 --> 00:57:42,340 A to synchs s naší představou přičemž ne více než 256 bits-- spíše, 1181 00:57:42,340 --> 00:57:45,360 synchs se s tím, že ne delší než 8 bitů, což 1182 00:57:45,360 --> 00:57:47,450 dává nám tolik jako 256 hodnot. 1183 00:57:47,450 --> 00:57:49,680 Dvojité se chystá být 8 bajtů nebo 64 bitů. 1184 00:57:49,680 --> 00:57:50,510 >> Plovoucí je 4. 1185 00:57:50,510 --> 00:57:51,690 Int je 4. 1186 00:57:51,690 --> 00:57:52,980 Dlouhý, dlouhý je 8. 1187 00:57:52,980 --> 00:57:54,716 A je řetězec 8. 1188 00:57:54,716 --> 00:57:55,840 Ale nebojte se o tom. 1189 00:57:55,840 --> 00:57:57,340 Budeme sloupněte tuto vrstvu. 1190 00:57:57,340 --> 00:57:59,940 Ukázalo se, že řetězce mohou být delší než 8 bajtů. 1191 00:57:59,940 --> 00:58:02,310 >> A opravdu, jsme napsali struny Již hello world, 1192 00:58:02,310 --> 00:58:03,700 delší než 8 bajtů. 1193 00:58:03,700 --> 00:58:06,270 Ale vrátíme do že za chvíli. 1194 00:58:06,270 --> 00:58:09,690 Ale odnést tady je následující. 1195 00:58:09,690 --> 00:58:15,320 >> Každý počítač má jen konečný množství paměti a prostoru. 1196 00:58:15,320 --> 00:58:17,860 Můžete ukládat pouze tolik soubory na počítači Mac nebo PC. 1197 00:58:17,860 --> 00:58:23,030 Můžete uložit jen tolik programů RAM běží najednou, nutně, a to i 1198 00:58:23,030 --> 00:58:26,360 s virtuální paměti, protože Máte omezené množství paměti RAM. 1199 00:58:26,360 --> 00:58:28,990 >> A jen proto, aby v případě, picture-- jste nikdy otevřel notebook 1200 00:58:28,990 --> 00:58:31,300 nebo objednat další paměť pro počítače, 1201 00:58:31,300 --> 00:58:33,670 nemusí vědět, že uvnitř počítače 1202 00:58:33,670 --> 00:58:36,590 je něco, co vypadá trochu jako je tento. 1203 00:58:36,590 --> 00:58:40,540 Takže je to jen obyčejný společnost s názvem Rozhodující, aby činí RAM pro počítače. 1204 00:58:40,540 --> 00:58:43,620 RAM je místo, kde programy žít, zatímco oni běží. 1205 00:58:43,620 --> 00:58:46,630 >> Takže na každém počítači Mac nebo PC při poklepání Klepněte na program, a to otevírá, 1206 00:58:46,630 --> 00:58:48,921 a otevírá nějaký dokument Word nebo něco takového, 1207 00:58:48,921 --> 00:58:51,764 uloží jej do paměti dočasně RAM, protože RAM je rychlejší 1208 00:58:51,764 --> 00:58:53,680 než pevný disk, nebo Váš solid state disk. 1209 00:58:53,680 --> 00:58:56,600 Takže je to právě tam, kde programy jít žít, když používáte, 1210 00:58:56,600 --> 00:58:58,060 nebo pokud jsou používány soubory. 1211 00:58:58,060 --> 00:59:00,890 >> Takže máte věci, které vypadají takhle uvnitř vašeho notebooku, 1212 00:59:00,890 --> 00:59:03,320 nebo mírně větší věci uvnitř počítače. 1213 00:59:03,320 --> 00:59:07,440 Ale klíč je máte jen konečný počet těchto věcí. 1214 00:59:07,440 --> 00:59:11,230 A je tu jen omezené množství hardware sedí na tomto stole vpravo 1215 00:59:11,230 --> 00:59:11,730 zde. 1216 00:59:11,730 --> 00:59:15,920 >> Takže určitě nemůžeme skladovat nekonečně dlouhá čísla. 1217 00:59:15,920 --> 00:59:19,030 A přesto, pokud si myslíte, zpět do obecná škola, kolik číslic může 1218 00:59:19,030 --> 00:59:21,400 Máte doprava o desetinnou čárkou? 1219 00:59:21,400 --> 00:59:24,680 Když na to přijde, kolik číslic může máte vlevo od desetinné čárky? 1220 00:59:24,680 --> 00:59:26,300 Opravdu, nekonečně mnoho. 1221 00:59:26,300 --> 00:59:30,840 >> Nyní, my lidé by mohl jen umět vyslovit milionů, 1222 00:59:30,840 --> 00:59:34,990 a miliardy, trillion, a kvadrilion a quintillion. 1223 00:59:34,990 --> 00:59:39,370 A já posouvat hranice mého understanding-- nebo my-- Rozumím 1224 00:59:39,370 --> 00:59:41,110 Čísla, ale my výslovnost čísel. 1225 00:59:41,110 --> 00:59:44,720 Ale oni mohou dostat nekonečně velké s nekonečně mnoho Číslice vlevo 1226 00:59:44,720 --> 00:59:47,050 nebo napravo od desetinné čárky. 1227 00:59:47,050 --> 00:59:50,040 >> Ale počítače mají pouze omezené množství paměti, 1228 00:59:50,040 --> 00:59:53,510 konečný počet tranzistorů, je konečný počet žárovek uvnitř. 1229 00:59:53,510 --> 00:59:57,350 Takže co se stane, když vám dojdou prostoru? 1230 00:59:57,350 --> 00:59:59,620 Jinými slovy, pokud vzpomenout na poslední týden 1231 00:59:59,620 --> 01:00:03,160 Když jsme mluvili o číslech samy o sobě jsou zastoupeny v binárním, 1232 01:00:03,160 --> 01:00:05,480 Domníváme se, že máme Tento 8-bitová hodnota zde. 1233 01:00:05,480 --> 01:00:08,290 >> A máme sedm 1 a jedna 0. 1234 01:00:08,290 --> 01:00:10,827 A předpokládám, že chceme přidat 1 k této hodnotě. 1235 01:00:10,827 --> 01:00:12,410 To je opravdu velké číslo právě teď. 1236 01:00:12,410 --> 01:00:16,610 >> To je 254, pokud si dobře vzpomínám matematický z minulého týdne vpravo. 1237 01:00:16,610 --> 01:00:19,480 Ale co když změním že nejpravější 0 na 1? 1238 01:00:19,480 --> 01:00:22,800 Celé číslo, ze Samozřejmě, že se stane osm 1 je. 1239 01:00:22,800 --> 01:00:24,050 Takže jsme pořád dobré. 1240 01:00:24,050 --> 01:00:27,204 >> A to pravděpodobně představuje 255, i když v závislosti na kontextu 1241 01:00:27,204 --> 01:00:29,120 mohlo by ve skutečnosti představovat záporné číslo. 1242 01:00:29,120 --> 01:00:31,240 Ale o tom až jindy. 1243 01:00:31,240 --> 01:00:34,220 Tento pocit, že to o tak vysoko, jak se mohu spolehnout. 1244 01:00:34,220 --> 01:00:35,290 >> Nyní je pouze 8 bitů. 1245 01:00:35,290 --> 01:00:38,170 A můj Mac, určitě má cestu více než 8 bitů paměti. 1246 01:00:38,170 --> 01:00:39,170 Ale to přece má konečný. 1247 01:00:39,170 --> 01:00:43,230 Takže stejný argument platí, i kdybychom mají více z těchto ty na obrazovce. 1248 01:00:43,230 --> 01:00:47,020 >> Ale co se stane, když jste uložení toto číslo, 255, 1249 01:00:47,020 --> 01:00:49,290 a chcete spočítat jeden kousek výš? 1250 01:00:49,290 --> 01:00:51,600 Chcete-li jít od 255 do 256. 1251 01:00:51,600 --> 01:00:55,800 Problémem ovšem je, že pokud začíná počítat od nuly, jako minulý týden, 1252 01:00:55,800 --> 01:00:59,670 nemůžete počítat jako s vysokým as 256, natož 257, 1253 01:00:59,670 --> 01:01:02,584 natož 258 m, protože to, co se stane, když přidáte 1? 1254 01:01:02,584 --> 01:01:05,000 Pokud tak učiníte starou základní školu přístup, dáte 1 tady, 1255 01:01:05,000 --> 01:01:08,150 a pak 1 plus 1 je 2, ale to je opravdu nula, můžete nést 1, 1256 01:01:08,150 --> 01:01:09,695 nést 1, nesou 1. 1257 01:01:09,695 --> 01:01:12,620 Všechny tyto věci, Tyto 1, přejděte na nulu. 1258 01:01:12,620 --> 01:01:17,820 A skončíš, ano, jako někoho, poukázal na to, 1 na levé straně. 1259 01:01:17,820 --> 01:01:22,540 Ale vše, co můžete skutečně vidět a vejde do paměti 1260 01:01:22,540 --> 01:01:27,960 Je jen osm 0 je, což znamená, na nějakém místě, pokud vás, počítač, 1261 01:01:27,960 --> 01:01:32,490 Zkoušel počítání dostatečně vysoko, že jste bude zalomit kolem, jak se zdá, 1262 01:01:32,490 --> 01:01:35,850 na nulu, nebo dokonce negativní Čísla, která jsou dokonce nižší než nula. 1263 01:01:35,850 --> 01:01:37,260 >> A můžeme trochu vidět. 1264 01:01:37,260 --> 01:01:39,900 Nech mě jít dopředu a psát skutečný rychlý programu zde. 1265 01:01:39,900 --> 01:01:43,690 Nech mě jít dopředu a psát program s názvem přetečení. 1266 01:01:43,690 --> 01:01:49,980 Patří CS50.h, zahrnují Standardní IO.h-- oh, 1267 01:01:49,980 --> 01:01:51,730 Opravdu zmeškal zvýrazňování syntaxe. 1268 01:01:51,730 --> 01:01:54,440 Takže pojďme uložit jako overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> A teď int main void-- a netrvalo dlouho, zmíníme 1270 01:01:57,084 --> 01:01:59,500 vrátit se k vysvětlením, proč držíme psaní int main neplatné. 1271 01:01:59,500 --> 01:02:02,080 Ale teď, ať to prostě udělat to, brát to jako samozřejmost. 1272 01:02:02,080 --> 01:02:06,200 Dejme sám int, a inicializovat ji na hodnotu 0. 1273 01:02:06,200 --> 01:02:11,716 >> Pojďme pak udělat pro int i získat zero-- ve skutečnosti, pojďme udělat nekonečnou smyčku 1274 01:02:11,716 --> 01:02:12,590 a uvidíme, co se stane. 1275 01:02:12,590 --> 01:02:22,440 I když pravda, pak pojďme vytisknout n Je procenta i, n lomítko, plug-in n. 1276 01:02:22,440 --> 01:02:27,200 Ale teď, pojďme dělat n dostane n plus 1. 1277 01:02:27,200 --> 01:02:29,660 >> Takže jinými slovy, na každém iterace tohoto nekonečné smyčky, 1278 01:02:29,660 --> 01:02:32,550 berme hodnotu n je, a přidat 1 k němu, a poté 1279 01:02:32,550 --> 01:02:34,350 uložení výsledku zpět do n na levé straně. 1280 01:02:34,350 --> 01:02:37,150 A ve skutečnosti, jsme viděli syntax Mírně takhle krátce. 1281 01:02:37,150 --> 01:02:39,730 Chladný trikem je namísto psaní to všechno pryč, 1282 01:02:39,730 --> 01:02:42,770 můžete skutečně říci n a rovná1. 1283 01:02:42,770 --> 01:02:47,480 >> Nebo opravdu chcete být fantazie, pokud si, můžete říci, n a navíc středník. 1284 01:02:47,480 --> 01:02:50,130 Ale tyto dva posledně jmenovaní jsou jen co bychom zavolat syntaktický cukr 1285 01:02:50,130 --> 01:02:50,790 Pro první věc. 1286 01:02:50,790 --> 01:02:53,456 >> První věc, kterou je jasnější, naprosto v pořádku, zcela správné. 1287 01:02:53,456 --> 01:02:55,470 Ale to je běžnější, řeknu. 1288 01:02:55,470 --> 01:02:57,210 Takže budeme to jen na chvíli. 1289 01:02:57,210 --> 01:03:01,685 >> Podívejme se nyní, aby přepad, který zní poněkud zlověstný, dot přetečení lomítko. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Podívejme se, n je stále dost velký. 1292 01:03:09,852 --> 01:03:11,310 Ale řekněme si, jak velký může dostat n? 1293 01:03:11,310 --> 01:03:12,870 >> n je int. 1294 01:03:12,870 --> 01:03:16,400 Viděli jsme před chvílí s velikostí Příkladem že int je čtyři bajty. 1295 01:03:16,400 --> 01:03:22,070 Víme, že od minulého týdne, čtyři byty je 32 bitů, protože 8 krát 4, to je 32. 1296 01:03:22,070 --> 01:03:23,460 Že to bude 4 miliardy. 1297 01:03:23,460 --> 01:03:25,802 >> A my jsme až 800,000. 1298 01:03:25,802 --> 01:03:28,510 To bude trvat věčně počítat tak vysoko, jak jsem jen možné. 1299 01:03:28,510 --> 01:03:30,635 Takže budu pokračovat, Jak jste si možná zanedlouho, 1300 01:03:30,635 --> 01:03:34,910 a stiskněte Control C- řečeno, Control C, hodně, kde se provádí kontrola C celkově 1301 01:03:34,910 --> 01:03:36,034 prostředky zrušit. 1302 01:03:36,034 --> 01:03:38,200 Bohužel, protože toto běží v cloudu, 1303 01:03:38,200 --> 01:03:41,190 Někdy oblak je plivat tolik věcí, 1304 01:03:41,190 --> 01:03:44,180 tolik výstup, bude to chvíli trvat pro můj vstup 1305 01:03:44,180 --> 01:03:45,630 se dostat do cloudu. 1306 01:03:45,630 --> 01:03:49,240 Takže i když jsem trefil Ovládací C před několika sekund, 1307 01:03:49,240 --> 01:03:53,110 je to určitě boční Účinek nekonečné smyčce. 1308 01:03:53,110 --> 01:03:56,070 >> A tak v takových případech, my jsme opustí to být. 1309 01:03:56,070 --> 01:03:59,050 A budeme přidávat další okno terminálu sem 1310 01:03:59,050 --> 01:04:03,186 s plus, což samozřejmě neklade takhle, protože je to stále myslí. 1311 01:04:03,186 --> 01:04:05,310 A pojďme do toho a bude trochu rozumnější. 1312 01:04:05,310 --> 01:04:07,768 >> Chystám se jít dopředu a dělat toto jen konečně mnohokrát. 1313 01:04:07,768 --> 01:04:10,047 Pojďme použít pro smyčce, který zmiňoval jsem se dříve. 1314 01:04:10,047 --> 01:04:10,630 Pojďme to udělat. 1315 01:04:10,630 --> 01:04:13,430 Dej mi ještě proměnnou int i dostane 0. 1316 01:04:13,430 --> 01:04:17,430 i je nižší než, řekněme, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 A teď nech mě jít dopředu a tisk out n je procento i, n čárka. 1318 01:04:24,010 --> 01:04:27,547 A pak n- je to stále bude trvat věčně. 1319 01:04:27,547 --> 01:04:28,130 Pojďme to udělat. 1320 01:04:28,130 --> 01:04:30,620 >> n dostane n-krát 2. 1321 01:04:30,620 --> 01:04:34,140 Nebo bychom mohli být ozdobný a to časy rovná 2. 1322 01:04:34,140 --> 01:04:37,120 Ale řekněme, že n rovná samotné krát 2. 1323 01:04:37,120 --> 01:04:39,321 Jinými slovy, v této Nová verze programu, 1324 01:04:39,321 --> 01:04:41,820 Já nechci čekat věčně od podobných 800.000 až 4 miliardy. 1325 01:04:41,820 --> 01:04:43,070 Řekněme to máme za sebou. 1326 01:04:43,070 --> 01:04:44,920 >> Pojďme skutečně zdvojnásobit n pokaždé. 1327 01:04:44,920 --> 01:04:47,660 Což, recall, je zdvojnásobení Opakem mají, samozřejmě. 1328 01:04:47,660 --> 01:04:50,035 A vzhledem k tomu minulý týden máme opět něco, a znovu, 1329 01:04:50,035 --> 01:04:52,200 a znovu, super rychlý, Zdvojnásobení budou jistě 1330 01:04:52,200 --> 01:04:58,080 dostat nás od 1 do největší možný hodnota, kterou můžeme počítat, aby s int. 1331 01:04:58,080 --> 01:04:59,750 >> Takže pojďme dělat přesně to. 1332 01:04:59,750 --> 01:05:01,720 A vrátíme se k tomu zanedlouho. 1333 01:05:01,720 --> 01:05:04,180 Ale to je opět stejně jako opakování blok v Scratch. 1334 01:05:04,180 --> 01:05:05,600 A budete používat tento zanedlouho. 1335 01:05:05,600 --> 01:05:10,170 >> To prostě znamená počítat od nuly až do, ale ne stejné, až 64. 1336 01:05:10,170 --> 01:05:14,285 A na každém opakování této smyčka, jen držet postupně i. 1337 01:05:14,285 --> 01:05:18,990 Takže i ++ - a tento obecný konstrukt Na řádku 7 je prostě super obyčejný způsob, 1338 01:05:18,990 --> 01:05:22,290 opakujících se několik řádků kód, někteří kolikrát. 1339 01:05:22,290 --> 01:05:23,362 Které řádků kódu? 1340 01:05:23,362 --> 01:05:25,570 Tyto složené závorky, jako vy může být sbírána od této chvíle, 1341 01:05:25,570 --> 01:05:26,780 znamená, postupujte následovně. 1342 01:05:26,780 --> 01:05:29,510 >> Je to v jako Scratch, když má žluté bloky 1343 01:05:29,510 --> 01:05:32,680 a jiné barvy, které druh objetí nebo obejmout dalších bloků. 1344 01:05:32,680 --> 01:05:34,750 To je to, co ty kudrnatý rovnátka jsou tady. 1345 01:05:34,750 --> 01:05:40,200 Takže když jsem dostal syntaxi right-- vás můžete vidět symbol mrkev v C prostředků 1346 01:05:40,200 --> 01:05:42,706 to je kolikrát jsem byl se snaží tento problém vyřešit. 1347 01:05:42,706 --> 01:05:45,330 Takže pojďme se zbavit že jeden dohromady, a zavřít to okno. 1348 01:05:45,330 --> 01:05:46,520 A budeme používat novou. 1349 01:05:46,520 --> 01:05:51,980 Udělat přepad, dot lomítko přepad, Enter, v pořádku, 1350 01:05:51,980 --> 01:05:53,090 to vypadá špatně na prvním místě. 1351 01:05:53,090 --> 01:05:56,200 Ale pojďme posunout zpět v čase, proto, že jsem to udělal 64-krát. 1352 01:05:56,200 --> 01:05:58,700 >> A Všimněte si, poprvé, n je 1. 1353 01:05:58,700 --> 01:06:03,110 Podruhé, n je 2, pak 4, pak 8, pak 16. 1354 01:06:03,110 --> 01:06:09,450 A zdá se, že jakmile I dostat do zhruba miliarda, 1355 01:06:09,450 --> 01:06:12,800 jestli jsem to dvakrát znovu, že by měl mi dát 2 miliardy. 1356 01:06:12,800 --> 01:06:14,980 Ale ukazuje se, že je to přímo na prahu. 1357 01:06:14,980 --> 01:06:18,930 >> A tak to vlastně přetečení int od 1 miliardu 1358 01:06:18,930 --> 01:06:23,514 zhruba negativní 2 miliardy, protože celé číslo, 1359 01:06:23,514 --> 01:06:25,430 Na rozdíl od čísel, která máme byly za předpokladu minulý týden, 1360 01:06:25,430 --> 01:06:28,397 může být jak pozitivní, tak negativní ve skutečnosti a v počítači. 1361 01:06:28,397 --> 01:06:30,730 A tak alespoň jeden z těch, bitů je účinně ukraden. 1362 01:06:30,730 --> 01:06:34,190 Takže jsme opravdu pouze 31 bitů, nebo 2 miliardy možných hodnot. 1363 01:06:34,190 --> 01:06:38,220 >> Ale teď, stánek s jídlem je docela Jednoduše řečeno, bez ohledu na tato čísla jsou 1364 01:06:38,220 --> 01:06:42,280 a to bez ohledu na matematika, se stane něco špatného nakonec, 1365 01:06:42,280 --> 01:06:46,980 protože nakonec se snažíte permutaci bitů jeden příliš mnohokrát. 1366 01:06:46,980 --> 01:06:51,060 A efektivně přejít ze všech 1 je pro všechny možná 0 je, nebo možná 1367 01:06:51,060 --> 01:06:54,260 Jen nějaký jiný vzor, ​​který ji Je zřejmé, že v závislosti na kontextu, 1368 01:06:54,260 --> 01:06:56,342 lze interpretovat jako záporné číslo. 1369 01:06:56,342 --> 01:06:59,300 A tak by se mohlo zdát nejvyšší I může počítat v tomto konkrétním programu 1370 01:06:59,300 --> 01:07:01,210 Pouze zhruba miliarda. 1371 01:07:01,210 --> 01:07:02,760 Ale je tu částečné řešení zde. 1372 01:07:02,760 --> 01:07:03,480 Víš co? 1373 01:07:03,480 --> 01:07:07,600 >> Dovolte mi, abych měnil z int k dlouhé dlouhé. 1374 01:07:07,600 --> 01:07:10,633 A nech mě jít napřed zde a say-- budu mít 1375 01:07:10,633 --> 01:07:12,290 tento stav změnit na unsigned long. 1376 01:07:12,290 --> 01:07:16,860 Nebo se podívejme, nikdy Vzpomínám si sám. 1377 01:07:16,860 --> 01:07:19,920 >> Pojďme dál a dělat přetečení. 1378 01:07:19,920 --> 01:07:21,860 Ne, to není ono, LLD, děkuji. 1379 01:07:21,860 --> 01:07:23,430 Takže někdy Clang může být užitečný. 1380 01:07:23,430 --> 01:07:27,550 Nepamatoval jsem si, jaký formát specifikátor byl na dlouhou dlouho. 1381 01:07:27,550 --> 01:07:28,950 >> Ale opravdu, Clang mi to řekl. 1382 01:07:28,950 --> 01:07:31,570 Green je nějaká dobrá, Stále znamená, že jste udělali chybu. 1383 01:07:31,570 --> 01:07:33,190 Je to hádat, že jsem měl na mysli LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Tak ať mi to brát radu, dlouhá dlouhá desetinné číslo, kromě toho, že. 1385 01:07:38,750 --> 01:07:43,190 A dovolte mi, abych ji znovu spustit, dot lomítko přetečení, Enter. 1386 01:07:43,190 --> 01:07:45,020 A teď, co je v pohodě, je to. 1387 01:07:45,020 --> 01:07:49,140 >> Kdybych posouvat zpět v čase, stále začít počítání na stejné place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Všimněte si, dostaneme všichni cesta až 1 miliardy. 1390 01:07:54,860 --> 01:07:57,070 Ale pak jsme se bezpečně dostat na 2 miliardy. 1391 01:07:57,070 --> 01:08:01,300 >> Pak jsme se dostat na 4 miliardy, pak 8000000000, 17000000000. 1392 01:08:01,300 --> 01:08:03,340 A my jít výš, a vyšší a vyšší. 1393 01:08:03,340 --> 01:08:05,740 Nakonec, i to zlomí. 1394 01:08:05,740 --> 01:08:09,350 >> Nakonec, s dlouhou dlouhá, což je 64-bitová hodnota, nikoliv 1395 01:08:09,350 --> 01:08:13,660 32-bitová hodnota, pokud počítáš příliš vysoká, můžete zabalit kolem 0. 1396 01:08:13,660 --> 01:08:16,410 A v tomto případě jsme se náhodou skončit s záporné číslo. 1397 01:08:16,410 --> 01:08:17,550 >> Takže se jedná o problém. 1398 01:08:17,550 --> 01:08:20,439 A ukázalo se, že toto Problém není všechno, že tajemný. 1399 01:08:20,439 --> 01:08:23,060 I přesto, že jsem úmyslně indukované to s těmito chybami, 1400 01:08:23,060 --> 01:08:26,149 to dopadá to vidíme trochu ze všeho kolem nás, nebo alespoň někteří z nás dělat. 1401 01:08:26,149 --> 01:08:28,939 >> Takže Lego Star Wars, pokud jste někdy hráli hru, 1402 01:08:28,939 --> 01:08:33,830 to dopadá můžete objet lámání, co se v LEGO světě, 1403 01:08:33,830 --> 01:08:36,640 a sbírání mincí v podstatě. 1404 01:08:36,640 --> 01:08:39,200 A pokud jste někdy hráli tato hra příliš mnoho času, 1405 01:08:39,200 --> 01:08:42,630 jako tento nejmenovaný jednotlivce tady dělal, celkový počet 1406 01:08:42,630 --> 01:08:46,700 mincí, které můžete sbírat znamená, že by se mohlo zdát, 4 miliardy. 1407 01:08:46,700 --> 01:08:48,240 >> Teď, když je to vlastně zaoblené. 1408 01:08:48,240 --> 01:08:50,239 Takže LEGO se snažila udržet věci uživatelsky přívětivý. 1409 01:08:50,239 --> 01:08:53,779 Oni to neudělali přesně 2 až 32 výkon, za minulého týdne. 1410 01:08:53,779 --> 01:08:55,310 Ale 4000000000 je důvod, proč. 1411 01:08:55,310 --> 01:08:58,979 Zdá se, že na základě těchto informací, že LEGO, a společnost, která 1412 01:08:58,979 --> 01:09:02,624 učinil toto aktuální software, rozhodl že maximální počet mincí 1413 01:09:02,624 --> 01:09:04,540 uživatel může hromadit Je skutečně 4000000000, 1414 01:09:04,540 --> 01:09:12,069 protože oni si vybrali v jejich kódu k použití není dlouhá dlouhá, zdá se, 1415 01:09:12,069 --> 01:09:16,140 ale jen celé číslo bez znaménka celé číslo, pouze kladné celé číslo, jehož 1416 01:09:16,140 --> 01:09:18,089 max hodnota je zhruba to. 1417 01:09:18,089 --> 01:09:19,380 No, tady je další legrační. 1418 01:09:19,380 --> 01:09:23,500 Takže ve hře Civilization, který někteří z vás by mohl být obeznámeni s 1419 01:09:23,500 --> 01:09:26,660 Ukazuje se, že tam před lety Byla to chyba v této hře, přičemž 1420 01:09:26,660 --> 01:09:28,750 pokud jste hrál roli Gándhího ve hře, 1421 01:09:28,750 --> 01:09:34,020 místo něj byl velmi pacifista, Místo toho byl neuvěřitelně, neskutečně 1422 01:09:34,020 --> 01:09:36,399 agresivní, za určitých okolností. 1423 01:09:36,399 --> 01:09:40,529 A zejména způsob, jakým civilizace Práce je, že pokud se hráč, 1424 01:09:40,529 --> 01:09:44,680 přijmou demokracii, vaše agresivita skóre dostane 1425 01:09:44,680 --> 01:09:48,130 sníží o dva, takže minus minus, a potom minus minus. 1426 01:09:48,130 --> 01:09:50,569 >> Takže si odečíst z 2 vaše skutečné Iterace. 1427 01:09:50,569 --> 01:09:56,650 Bohužel, pokud vaše Iterace je zpočátku 1, a odečíst 2 z něj 1428 01:09:56,650 --> 01:09:59,050 po přijetí demokracie jak Gandhi zde mohlo 1429 01:09:59,050 --> 01:10:02,200 udělal, protože byl velmi passive-- 1 v měřítku agresivity. 1430 01:10:02,200 --> 01:10:04,830 Ale když přijme demokracii, pak se pohybuje od 1 do negativní 1. 1431 01:10:04,830 --> 01:10:11,470 >> Bohužel, oni byli pomocí nepodepsané čísla, 1432 01:10:11,470 --> 01:10:15,400 což znamená, že ošetřené dokonce záporná Čísla jako by byly pozitivní. 1433 01:10:15,400 --> 01:10:19,780 A ukázalo se, že pozitivní ekvivalent negativní 1, 1434 01:10:19,780 --> 01:10:23,480 v typických počítačových programů, je 255. 1435 01:10:23,480 --> 01:10:27,250 Takže pokud Gandhi přijme demokracie má, a tudíž 1436 01:10:27,250 --> 01:10:32,470 Jeho agresivita skóre snížil, to vlastně valí kolem 255 1437 01:10:32,470 --> 01:10:35,470 a dělá ho nejvíce agresivní charakter ve hře. 1438 01:10:35,470 --> 01:10:36,930 Takže si můžete Googlu se na to. 1439 01:10:36,930 --> 01:10:39,380 A bylo to opravdu, což náhodná programování chyba, 1440 01:10:39,380 --> 01:10:43,010 ale to je docela vstoupil ten svět od té doby. 1441 01:10:43,010 --> 01:10:44,360 >> To je vše zábavné a roztomilé. 1442 01:10:44,360 --> 01:10:47,760 Děsivější je, když skutečná reálných zařízení, a ne hry, 1443 01:10:47,760 --> 01:10:48,820 mají tytéž chyby. 1444 01:10:48,820 --> 01:10:54,500 Ve skutečnosti, před rokem přišel článek out o Boeing 787. 1445 01:10:54,500 --> 01:10:56,850 >> A článek na prvním místě pohled zní trochu Arcane. 1446 01:10:56,850 --> 01:11:01,480 Ale to řekl, software zranitelnost v Boeing 1447 01:11:01,480 --> 01:11:04,790 Nová 787 Dreamliner má jet potenciál způsobit piloty 1448 01:11:04,790 --> 01:11:07,220 ztratit kontrolu letadlo, případně 1449 01:11:07,220 --> 01:11:11,750 V polovině letu, úředníci FAA varoval aerolinie v poslední době. 1450 01:11:11,750 --> 01:11:14,520 To bylo stanovení že model 787 1451 01:11:14,520 --> 01:11:19,770 letoun, který byl poháněn nepřetržitě po dobu 248 dní 1452 01:11:19,770 --> 01:11:24,880 může ztratit veškerý střídavý proud, AC, elektrické energie v důsledku generátoru 1453 01:11:24,880 --> 01:11:28,892 Řídicí jednotky, GCUs současně jít do nouzového režimu selhání. 1454 01:11:28,892 --> 01:11:29,850 Je to trochu mě ztratí. 1455 01:11:29,850 --> 01:11:35,390 Avšak memo uvedl, OK, teď mám, že podmínka byla způsobena softwarem 1456 01:11:35,390 --> 01:11:38,590 proti interní řídicí generátor 1457 01:11:38,590 --> 01:11:44,860 Jednotky, které přeteče po 248 dní nepřetržitého výkonu. 1458 01:11:44,860 --> 01:11:47,070 Jsme to vydávající Všimněte si, aby nedošlo ke ztrátě 1459 01:11:47,070 --> 01:11:49,300 Ze všeho střídavé elektrické energie, což by mohlo mít za následek 1460 01:11:49,300 --> 01:11:50,980 ke ztrátě kontroly letounu. 1461 01:11:50,980 --> 01:11:55,380 >> Takže doslova, tam je nějaké číslo, nebo nějaký ekvivalent datový typ, 1462 01:11:55,380 --> 01:11:57,960 se používá v softwaru ve skutečném letadle 1463 01:11:57,960 --> 01:12:00,756 že pokud budete mít vaše letadlo na dost dlouho, což zřejmě 1464 01:12:00,756 --> 01:12:03,880 může být v případě, pokud jste právě běží je neustále a nikdy odpojování 1465 01:12:03,880 --> 01:12:06,810 vaše letadlo, jak se zdá, nebo pouštění jeho vybijí baterie, 1466 01:12:06,810 --> 01:12:09,840 nakonec počítat nahoru a nahoru a nahoru a nahoru a nahoru, a nahoru. 1467 01:12:09,840 --> 01:12:12,150 >> A od přírody, je omezené množství paměti 1468 01:12:12,150 --> 01:12:15,880 přeteče, návratu k nula nebo některé záporné hodnoty, 1469 01:12:15,880 --> 01:12:19,920 vedlejší účinek, což je děsivě skutečné reality 1470 01:12:19,920 --> 01:12:23,970 že letadlo může potřebovat být restartován, efektivně, 1471 01:12:23,970 --> 01:12:27,290 nebo by mohly spadnout ještě hůře, jak to letí. 1472 01:12:27,290 --> 01:12:29,230 Takže tyto druhy otázek jsou stále s námi, 1473 01:12:29,230 --> 01:12:33,130 even-- to bylo 2015 článek, všechny ještě děsivější 1474 01:12:33,130 --> 01:12:36,100 když ne nutně pochopit, ocenit, nebo předvídat 1475 01:12:36,100 --> 01:12:38,640 tyto druhy chyb. 1476 01:12:38,640 --> 01:12:42,030 >> Tak to dopadá je tu ještě jedna další špatná věc, o reprezentaci dat. 1477 01:12:42,030 --> 01:12:47,080 Ukazuje se, že i plováky jsou druh chybné, protože plováky taky, 1478 01:12:47,080 --> 01:12:51,440 Navrhl jsem se 32 bitů, nebo Možná 64, pokud používáte double. 1479 01:12:51,440 --> 01:12:53,070 Ale to je ještě konečný. 1480 01:12:53,070 --> 01:12:57,070 >> A Háček je v tom, že pokud je to možné dát nekonečný počet čísel 1481 01:12:57,070 --> 01:12:59,460 za desetinnou čárkou, není tam žádný způsob, jak 1482 01:12:59,460 --> 01:13:02,690 mohou reprezentovat všechny možné čísla, která nás učili 1483 01:13:02,690 --> 01:13:04,990 V základní škole se mohou vyskytovat ve světě. 1484 01:13:04,990 --> 01:13:08,870 Počítač, v podstatě, musí zvolit podskupinu těchto čísel 1485 01:13:08,870 --> 01:13:10,200 reprezentovat přesně. 1486 01:13:10,200 --> 01:13:12,450 >> Nyní, nemůže-li počítač kolo možná trochu, 1487 01:13:12,450 --> 01:13:17,900 a může vám umožní zhruba obchodu libovolné číslo byste mohli přát. 1488 01:13:17,900 --> 01:13:20,940 Ale jen intuitivně, pokud vás mají konečný počet bitů, 1489 01:13:20,940 --> 01:13:24,560 můžete permutaci jen jim v mnoha konečných způsoby. 1490 01:13:24,560 --> 01:13:26,570 Takže si nemůže použít konečný počet 1491 01:13:26,570 --> 01:13:29,880 permutace bitů, vzory nul a jedniček, 1492 01:13:29,880 --> 01:13:32,940 reprezentovat nekonečný počet čísel, 1493 01:13:32,940 --> 01:13:37,370 což naznačuje, že by mohly počítače Velmi dobře se nám lže občas. 1494 01:13:37,370 --> 01:13:38,770 >> Ve skutečnosti, jdeme na to. 1495 01:13:38,770 --> 01:13:41,239 Nech mě jít zpátky do CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Nech mě jít dopředu a vytvořit malý program 1497 01:13:43,030 --> 01:13:47,940 tzv Nepřesnost, ukázat, že Počítače jsou skutečně nepřesné. 1498 01:13:47,940 --> 01:13:51,910 >> A nech mě jít dopředu a začít s některé z těchto kódu před rokem, 1499 01:13:51,910 --> 01:13:53,830 a teď jen provést následující. 1500 01:13:53,830 --> 01:14:03,640 Nech mě jít dopředu a udělat printf, procento f, n lomítko, 1 děleno 10. 1501 01:14:03,640 --> 01:14:07,430 Jinými slovy, pojďme ponořit hlouběji 1/10, jako je 1 a děleno 10. 1502 01:14:07,430 --> 01:14:09,760 Jistě, počítač může představovat 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Tak pojďme do toho a dělat nepřesnost. 1504 01:14:13,620 --> 01:14:14,390 Uvidíme. 1505 01:14:14,390 --> 01:14:16,210 Formát Určuje typ double. 1506 01:14:16,210 --> 01:14:18,160 Ale tento argument má typ int. 1507 01:14:18,160 --> 01:14:19,040 Co se děje? 1508 01:14:19,040 --> 01:14:21,970 >> Oh, zajímavý, takže je to ponaučení z předtím. 1509 01:14:21,970 --> 01:14:26,050 Říkám, hej, počítač zobrazit mi plovák s procenta f. 1510 01:14:26,050 --> 01:14:28,200 Ale já dávat to 2 celých čísel. 1511 01:14:28,200 --> 01:14:31,120 Tak to dopadá, mohu opravit to v několika ohledech. 1512 01:14:31,120 --> 01:14:38,430 >> Mohl jsem jen otočit jeden do 1,0, a 10 do 10,0, což by, samozřejmě, 1513 01:14:38,430 --> 01:14:42,390 má za následek převedení je do floats-- stále s nadějí 1514 01:14:42,390 --> 01:14:43,180 stejný počet. 1515 01:14:43,180 --> 01:14:45,880 Nebo se ukáže, je tu něco, uvidíme opět zanedlouho. 1516 01:14:45,880 --> 01:14:47,170 Dalo by se obsazení čísla. 1517 01:14:47,170 --> 01:14:49,880 >> Můžete pomocí tohoto kulatých závorek výrazem, můžete říci, 1518 01:14:49,880 --> 01:14:52,560 hej, počítač, vzít 10, o němž vím, je int. 1519 01:14:52,560 --> 01:14:54,660 Ale zacházet s tím, prosím, jako kdyby je to float. 1520 01:14:54,660 --> 01:14:56,680 Ale to cítí zbytečně složité. 1521 01:14:56,680 --> 01:14:59,040 >> Pro naše účely dnes, Řekněme, doslovně 1522 01:14:59,040 --> 01:15:02,700 činí je plovoucí bodové hodnoty s desetinnou čárkou, jako je tento. 1523 01:15:02,700 --> 01:15:07,060 Nech mě jít dopředu a opakování, aby nepřesnost, dobrá, dot lomítko 1524 01:15:07,060 --> 01:15:08,870 nepřesnost, vstoupit. 1525 01:15:08,870 --> 01:15:10,990 OK, máme dobrý vzhled. 1526 01:15:10,990 --> 01:15:18,194 >> 1 děleno 10, podle mého Mac tady, je vskutku 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Teď jsem se učil na základní škole tam by měl být nekonečný počet 0 let. 1528 01:15:21,360 --> 01:15:23,151 Takže pojďme se alespoň pokusit vidět některé z nich. 1529 01:15:23,151 --> 01:15:26,770 Ukazuje se, že printf je trochu milovník ještě než jsme používali. 1530 01:15:26,770 --> 01:15:30,890 Ukazuje se, že nemusíte specifikovat Jen procent f, nebo prostě procenta i. 1531 01:15:30,890 --> 01:15:33,830 Ve skutečnosti můžete zadat některé kontrolní možnosti zde. 1532 01:15:33,830 --> 01:15:36,470 >> Konkrétně Jdu říkat, hej, printf, 1533 01:15:36,470 --> 01:15:39,660 ve skutečnosti mi ukázat 10 desetinných míst. 1534 01:15:39,660 --> 01:15:40,820 Tak to vypadá trochu divně. 1535 01:15:40,820 --> 01:15:42,845 Ale říkáte procent, tečka, kolik čísel 1536 01:15:42,845 --> 01:15:44,970 Chcete-li vidět po desetinnou čárkou, a pak f 1537 01:15:44,970 --> 01:15:48,340 pro ploché, jen proto, že je co dokumentace říká. 1538 01:15:48,340 --> 01:15:50,080 Nech mě jít dopředu a kromě toho, že. 1539 01:15:50,080 --> 01:15:52,460 >> A všimněte si také, začínám unavený přepisování věci. 1540 01:15:52,460 --> 01:15:55,900 Takže jsem prostě nastavení nahoru a šipka dolů na mé klíče zde. 1541 01:15:55,900 --> 01:15:58,710 A když jsem pořád bít, ty můžete vidět všechny příkazy 1542 01:15:58,710 --> 01:16:01,090 že jsem udělal, nebo nesprávně vyrobeny. 1543 01:16:01,090 --> 01:16:04,630 >> A já jdu dopředu a hned Není vlastně používat, že zdánlivě. 1544 01:16:04,630 --> 01:16:11,416 Udělat Nepřesnost, tečka lomítko imprecision-- tak 1545 01:16:11,416 --> 01:16:13,290 co jsem se naučil v základní škole odhlásí. 1546 01:16:13,290 --> 01:16:19,010 Dokonce i když jsem ji vytisknout až 10 desítkové ji skutečně je 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Ale víte co? 1548 01:16:19,840 --> 01:16:21,150 >> Pojďme trochu chamtivý. 1549 01:16:21,150 --> 01:16:23,990 Řekněme, jako, ukaž mi 55 poukazuje za desetinnou čárkou. 1550 01:16:23,990 --> 01:16:26,160 Pojďme opravdu vzít naprogramovat ven na projížďku. 1551 01:16:26,160 --> 01:16:31,170 Nech mě předělat s make nepřesnost, tečka lomítko, nepřesnost. 1552 01:16:31,170 --> 01:16:32,390 >> A tady jdeme. 1553 01:16:32,390 --> 01:16:34,420 Vaše dětství byla lež. 1554 01:16:34,420 --> 01:16:48,410 Zdá se, že 1 děleno 10 je skutečně 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Co se děje? 1556 01:16:49,740 --> 01:16:53,360 Tak to dopadá, když se druh vypadat dost daleko do podkladových 1557 01:16:53,360 --> 01:16:55,950 Zastoupení tohoto číslo, to vlastně 1558 01:16:55,950 --> 01:17:00,400 není přesně 1/10, nebo 0,1 a nekonečný počet nul. 1559 01:17:00,400 --> 01:17:01,630 A teď, proč tomu tak je? 1560 01:17:01,630 --> 01:17:06,250 >> No, i když je to jednoduchý Číslo na nás lidi, 1 děleno 10, 1561 01:17:06,250 --> 01:17:10,910 je to stále jedna z nekonečně mnoho čísla, která jsme mohli vymyslet. 1562 01:17:10,910 --> 01:17:14,490 Ale počítač může představovat pouze konečně mnoho takže čísla. 1563 01:17:14,490 --> 01:17:18,710 A tak efektivně, co Počítač se ukazuje nám je jeho nejbližší 1564 01:17:18,710 --> 01:17:22,940 přibližování k číslu Chceme věřit, je 1/10, 1565 01:17:22,940 --> 01:17:27,760 nebo opravdu 0,10000 ad infinitum. 1566 01:17:27,760 --> 01:17:30,425 >> Spíše, když se jedná tak blízko, jak to může dostat. 1567 01:17:30,425 --> 01:17:32,300 A skutečně, když se podíváte Pod kapotou 1568 01:17:32,300 --> 01:17:37,050 jak jsme tady prohlížením 55 číslic za desetinnou čárkou, 1569 01:17:37,050 --> 01:17:39,990 jsme vlastně vidět, že realitu. 1570 01:17:39,990 --> 01:17:42,610 Nyní jako stranou, pokud jste někdy viděl movie-- 1571 01:17:42,610 --> 01:17:45,780 většina z vás pravděpodobně haven't-- ale před Superman 3 několika lety, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor v podstatě zadlužuje tento realita v jeho společnosti ukrást hodně 1573 01:17:49,500 --> 01:17:53,500 zlomků a zlomcích haléře, protože company-- pokud si dobře vzpomínám, 1574 01:17:53,500 --> 01:17:57,210 byl to while-- byla v zásadě zahodili všechno, co nezapadl 1575 01:17:57,210 --> 01:17:58,790 do pojmu centů. 1576 01:17:58,790 --> 01:18:01,480 >> Ale pokud sečtete všechny tyto malé, malé, drobné čísla znovu, 1577 01:18:01,480 --> 01:18:04,960 a znovu a znovu, můžete, stejně jako v jeho případ, udělat dobrý množství peněz. 1578 01:18:04,960 --> 01:18:08,010 >> Ten stejný nápad byl ošizen novější, ale teď starší 1579 01:18:08,010 --> 01:18:10,500 film, nazvaný Kancelářské prostory, kde kluci v tomto filmu, 1580 01:18:10,500 --> 01:18:13,501 udělal to samé, našroubovat ji úplně, skončil s cestou příliš mnoho 1581 01:18:13,501 --> 01:18:14,666 peníze na svůj bankovní účet. 1582 01:18:14,666 --> 01:18:15,800 Bylo to všechno velice podezřelé. 1583 01:18:15,800 --> 01:18:19,290 Ale na konci dne, nepřesnost je všude kolem nás. 1584 01:18:19,290 --> 01:18:22,240 >> A to také může být děsivě případ. 1585 01:18:22,240 --> 01:18:25,590 Ukazuje se, že Superman 3 Kancelářské prostory a stranou, tam 1586 01:18:25,590 --> 01:18:28,460 mohou být některé velmi reálné svět následky 1587 01:18:28,460 --> 01:18:32,290 z realit nepřesný reprezentace dat 1588 01:18:32,290 --> 01:18:34,770 že i my lidé do tento den nemusí nutně 1589 01:18:34,770 --> 01:18:38,230 chápat stejně jako bychom měli, nebo si pamatovat tak často, jak bychom měli. 1590 01:18:38,230 --> 01:18:42,950 A vskutku, následující klip z pohledu na některé velmi reálném světě 1591 01:18:42,950 --> 01:18:47,730 Důsledky, co se stane, když vás neváží nepřesnost, která 1592 01:18:47,730 --> 01:18:50,065 se může stát v číslech reprezentaci. 1593 01:18:50,065 --> 01:18:51,300 >> [VIDEOPŘEHRÁVÁNÍ] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, Všichni jsme si zvykli na jsou často nepříjemné problémy, které 1595 01:18:55,620 --> 01:19:00,310 jít s them-- chyb, virů, a softwarové závady, 1596 01:19:00,310 --> 01:19:03,130 Pro malé ceny platit pro pohodlí. 1597 01:19:03,130 --> 01:19:07,800 Ale v high-tech a vysokou rychlostí vojenský a kosmický program aplikace, 1598 01:19:07,800 --> 01:19:12,800 Nejmenší může problém zvětšovat do katastrofy. 1599 01:19:12,800 --> 01:19:18,900 >> Dne 4. června 1996, připravené vědci zahájit bezpilotní Ariane 5 rakety. 1600 01:19:18,900 --> 01:19:21,220 To nesl vědecké satelity navržen 1601 01:19:21,220 --> 01:19:24,600 stanovit přesně, jak se vzájemnému působení magnetického pole Země 1602 01:19:24,600 --> 01:19:27,410 se solárními větry. 1603 01:19:27,410 --> 01:19:30,800 Raketa byla postavena Evropská kosmická agentura, 1604 01:19:30,800 --> 01:19:34,370 a odstartovala z jejího zařízení na pobřeží Francouzské Guyany. 1605 01:19:34,370 --> 01:19:37,540 >> -Na Asi 37 sekund do let, se poprvé 1606 01:19:37,540 --> 01:19:39,270 Všiml se něco děje špatně. 1607 01:19:39,270 --> 01:19:42,250 Trysky byly otočné v způsob, jak se opravdu neměli. 1608 01:19:42,250 --> 01:19:46,580 Přibližně 40 sekund do letu, Je zřejmé, že vozidlo bylo v potížích. 1609 01:19:46,580 --> 01:19:48,850 >> A to je, když oni dělali rozhodnutí ho zničit. 1610 01:19:48,850 --> 01:19:52,780 Bezpečnostní důstojník rozsah, s obrovské střeva, stiskl tlačítko, 1611 01:19:52,780 --> 01:19:58,150 vyhodil raketu, předtím to mohlo představovat nebezpečí pro veřejnou bezpečnost. 1612 01:19:58,150 --> 01:20:01,060 >> Tohle byla panna plavba Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 A jeho zničení vzal místo z důvodu chyby 1614 01:20:03,960 --> 01:20:05,822 vložené do softwaru rakety. 1615 01:20:05,822 --> 01:20:08,280 -The Problém na Ariane byl že existuje celá řada, která 1616 01:20:08,280 --> 01:20:10,600 vyžadováno 64 bitů vyjádřit. 1617 01:20:10,600 --> 01:20:13,590 A chtěli převést to na 16-bitové číslo. 1618 01:20:13,590 --> 01:20:15,610 Se předpokládá, že číslo bylo nikdy 1619 01:20:15,610 --> 01:20:20,980 být velmi velká, že většina z nich Číslice v 64-bitové číslo byly nuly. 1620 01:20:20,980 --> 01:20:22,440 Mýlili se. 1621 01:20:22,440 --> 01:20:25,060 >> -The Neschopnost jednoho Softwarový program přijímat 1622 01:20:25,060 --> 01:20:29,510 druh číslo generované Dalším byl u kořene selhání. 1623 01:20:29,510 --> 01:20:34,350 Vývoj softwaru se stala velmi nákladné součástí nové technologie. 1624 01:20:34,350 --> 01:20:38,140 Raketa Ariane byly velmi úspěšný, tolik softwaru 1625 01:20:38,140 --> 01:20:41,550 vytvořen pro to bylo také použit v Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -The Základním problémem bylo to, že Ariane 5 byl rychlejší, urychlováním. 1627 01:20:47,940 --> 01:20:51,450 A software neměl účtuje za to. 1628 01:20:51,450 --> 01:20:55,060 >> -The Zničení rakety Byla to obrovská finanční katastrofa, 1629 01:20:55,060 --> 01:20:58,790 vše kvůli chybě minut softwaru. 1630 01:20:58,790 --> 01:21:01,210 Ale to nebyl první Problémy s konverzí dat časové 1631 01:21:01,210 --> 01:21:04,820 byl sužován moderní raketové techniky. 1632 01:21:04,820 --> 01:21:08,050 >> -in 1991, se startem první války v Perském zálivu, 1633 01:21:08,050 --> 01:21:10,570 Patriot Missile zažil podobný typ 1634 01:21:10,570 --> 01:21:12,800 konverzního číslo problému. 1635 01:21:12,800 --> 01:21:16,090 A jako výsledek, 28 lidí, 28 amerických vojáků, 1636 01:21:16,090 --> 01:21:19,080 bylo zabito a asi 100 dalších zraněno, 1637 01:21:19,080 --> 01:21:22,780 když Patriot, který měl chránit před přicházejícími scudy, 1638 01:21:22,780 --> 01:21:25,830 nedokázal vystřelit raketu. 1639 01:21:25,830 --> 01:21:31,670 >> -Když Irák napadl Kuvajt, a Ameriku zahájena Pouštní bouře počátkem roku 1991, 1640 01:21:31,670 --> 01:21:35,780 Patriot Missile baterie byly nasazeny chránit Saudskou Arábii a Izrael 1641 01:21:35,780 --> 01:21:39,230 z iráckých raketových útoků Scud. 1642 01:21:39,230 --> 01:21:43,810 Patriot je v USA středního doletu povrch vzduchového systému, vyráběné 1643 01:21:43,810 --> 01:21:45,770 od firmy Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -Velikost Patriot interceptor sama o sobě je asi zhruba 20 stop dlouhý. 1645 01:21:52,340 --> 01:21:55,230 A váží asi 2000 liber. 1646 01:21:55,230 --> 01:21:59,320 A to s sebou nese hlavici asi, Myslím, že to je zhruba 150 liber. 1647 01:21:59,320 --> 01:22:03,930 A hlavice je sám o sobě vysoce výbušný, který 1648 01:22:03,930 --> 01:22:07,330 Má fragmenty kolem něj. 1649 01:22:07,330 --> 01:22:11,680 Pouzdro hlavice je navrženy tak, aby chovat jako hrubé broky. 1650 01:22:11,680 --> 01:22:14,110 >> -The Rakety jsou prováděny čtyři na kontejner, 1651 01:22:14,110 --> 01:22:17,130 a jsou přepravovány pomocí návěsu. 1652 01:22:17,130 --> 01:22:24,930 >> -The Patriot protiraketový systém sahá nyní nejméně 20 let. 1653 01:22:24,930 --> 01:22:28,420 Původně byl vyvinut jako obranné rakety vzduchu 1654 01:22:28,420 --> 01:22:30,720 sestřelit nepřátelské letouny. 1655 01:22:30,720 --> 01:22:34,500 V první války v Perském zálivu, když ta válka přišla, 1656 01:22:34,500 --> 01:22:39,745 Armáda ji chtěl použít k sestřelit scudy, ne letadel. 1657 01:22:39,745 --> 01:22:43,620 >> Irácké letectvo bylo Není tak velký problém. 1658 01:22:43,620 --> 01:22:46,670 Ale armáda byla starosti scudy. 1659 01:22:46,670 --> 01:22:50,170 A tak se snažili upgrade Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Nepřítele raketa jede mach 5 1661 01:22:52,800 --> 01:22:55,830 šel být dost náročné. 1662 01:22:55,830 --> 01:22:58,490 Ale když Patriot byl běhavý do provozu 1663 01:22:58,490 --> 01:23:02,860 armáda nebyl vědom Irácký modifikace, která vyrobený 1664 01:23:02,860 --> 01:23:05,930 jejich Pluje téměř nemožné zasáhnout. 1665 01:23:05,930 --> 01:23:10,740 >> Co se stalo je, že Pluje přicházely byly nestabilní. 1666 01:23:10,740 --> 01:23:11,692 Byly kymácení. 1667 01:23:11,692 --> 01:23:14,910 Důvodem je to Iráčané za účelem 1668 01:23:14,910 --> 01:23:18,280 získat 600 kilometrů z 300 kilometr 1669 01:23:18,280 --> 01:23:21,700 doletu, vzal váhu z přední hlavice. 1670 01:23:21,700 --> 01:23:23,390 Udělali hlavice lehčí. 1671 01:23:23,390 --> 01:23:27,330 >> Takže teď je Patriot snaží se přijít na Scud. 1672 01:23:27,330 --> 01:23:30,230 A většinu času, Drtivá většina z času, 1673 01:23:30,230 --> 01:23:32,940 to by jen létat podle Scud. 1674 01:23:32,940 --> 01:23:37,260 Jakmile provozovatelé Systém Patriot si uvědomil, že Patriot minul svůj cíl, 1675 01:23:37,260 --> 01:23:41,690 oni odpálili Patriot v hlavici aby se zabránilo případným obětem pokud se 1676 01:23:41,690 --> 01:23:44,570 nechá spadnout na zem. 1677 01:23:44,570 --> 01:23:48,790 >> -To Je to, co většina lidí viděla, Ty velké ohnivé koule na obloze, 1678 01:23:48,790 --> 01:23:54,550 a nepochopený as zachytí Scud hlavic. 1679 01:23:54,550 --> 01:23:56,630 >> -Although V noci nebe, Patriots se objevil 1680 01:23:56,630 --> 01:24:00,370 být úspěšně ničit scudy na Zahránu, 1681 01:24:00,370 --> 01:24:03,360 tam mohl být žádná chyba o jeho výkonnosti. 1682 01:24:03,360 --> 01:24:07,970 Tam, radarový systém Patriot ztratil na příchozí Scud, 1683 01:24:07,970 --> 01:24:10,721 a nikdy zahájen v důsledku na software chybu. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Bylo Izraelce, kteří poprvé objeven že čím delší je systém byl na, 1686 01:24:18,940 --> 01:24:22,690 tím větší je časový nesoulad se stal v důsledku hodiny vložené 1687 01:24:22,690 --> 01:24:24,810 V počítači systému. 1688 01:24:24,810 --> 01:24:28,210 >> -O Dva týdny před Tragédie v Dhahran, 1689 01:24:28,210 --> 01:24:30,770 Izraelci hlášeno ministerstvo obrany 1690 01:24:30,770 --> 01:24:32,590 že systém ztrácí čas. 1691 01:24:32,590 --> 01:24:35,360 Po asi osm hodin nebo běh, si všimli, že v systému 1692 01:24:35,360 --> 01:24:37,720 stal se nápadně méně přesné. 1693 01:24:37,720 --> 01:24:41,900 Ministerstvo obrany reagovala říkat všechny baterie Patriot 1694 01:24:41,900 --> 01:24:44,950 nenechat systémy na dlouhou dobu. 1695 01:24:44,950 --> 01:24:49,160 Oni nikdy neřekl, co je to dlouhá doba was-- osm hodin, 10 hodin, 1000 hodin. 1696 01:24:49,160 --> 01:24:51,360 Nikdo nevěděl. 1697 01:24:51,360 --> 01:24:53,380 >> -The Patriot baterie umístěný v kasárnách 1698 01:24:53,380 --> 01:24:58,350 na Zahránu a její chybné interní Hodiny byl na více než 100 hodin 1699 01:24:58,350 --> 01:25:01,670 v noci z 25. února. 1700 01:25:01,670 --> 01:25:05,917 >> -Je Sledoval čas s přesností asi desetinu sekundy. 1701 01:25:05,917 --> 01:25:08,000 Nyní desetin sekundy je zajímavé číslo, 1702 01:25:08,000 --> 01:25:11,920 protože nemůže být vyjádřena v binárním přesně, což 1703 01:25:11,920 --> 01:25:16,820 znamená, že nemůže být vyjádřen přesně v každém moderním digitálním počítači. 1704 01:25:16,820 --> 01:25:18,540 Je těžké tomu uvěřit. 1705 01:25:18,540 --> 01:25:21,210 >> Ale použít jako příklad. 1706 01:25:21,210 --> 01:25:23,540 Vezměme si číslo jedna třetina. 1707 01:25:23,540 --> 01:25:27,350 Třetina nemůže být vyjádřené v desítkové soustavě přesně. 1708 01:25:27,350 --> 01:25:32,080 Jedna třetina je 0,333 děje na nekonečno. 1709 01:25:32,080 --> 01:25:36,480 >> Neexistuje žádný způsob, jak to udělat s absolutní přesnost v desítkové soustavě. 1710 01:25:36,480 --> 01:25:39,560 To je přesně ten druh problému která se stala v Patriot. 1711 01:25:39,560 --> 01:25:44,100 Čím delší je systém běžel se hůře se stala chyba čas. 1712 01:25:44,100 --> 01:25:48,890 >> -Po 100 hodinách provozu Chyba v době byl jen asi třetina 1713 01:25:48,890 --> 01:25:50,600 sekundy. 1714 01:25:50,600 --> 01:25:54,210 Ale pokud jde o cílení raketa jede Mach 5, 1715 01:25:54,210 --> 01:25:58,710 to vedlo ke sledování Chyba více než 600 metrů. 1716 01:25:58,710 --> 01:26:02,120 Bylo by fatální chyba pro vojáky o tom, co 1717 01:26:02,120 --> 01:26:08,940 Stalo je Scud start byl detekovány satelity včasného varování 1718 01:26:08,940 --> 01:26:12,860 a oni věděli, že Scud byl přichází ve svém obecném směru. 1719 01:26:12,860 --> 01:26:15,320 Nevěděli, kde se blíží. 1720 01:26:15,320 --> 01:26:18,250 >> -To Byl nyní na radaru součást systému Patriot 1721 01:26:18,250 --> 01:26:23,190 bránit Zahránu najít a udržet Trať příchozí nepřátelské rakety. 1722 01:26:23,190 --> 01:26:24,609 >> -The Radar byl velmi chytrý. 1723 01:26:24,609 --> 01:26:26,650 To by ve skutečnosti sledovat poloha Scud, 1724 01:26:26,650 --> 01:26:30,350 a pak předpovědět, kde to asi bude příště radar odesláno 1725 01:26:30,350 --> 01:26:31,420 puls ven. 1726 01:26:31,420 --> 01:26:33,110 Který byl nazýván řada brána. 1727 01:26:33,110 --> 01:26:37,660 >> -Tak, Jakmile Patriot Rozhodne dost času má 1728 01:26:37,660 --> 01:26:42,450 předán vrátit a zkontrolovat další umístění tohoto detekovaným objektem, 1729 01:26:42,450 --> 01:26:43,600 se vrací. 1730 01:26:43,600 --> 01:26:48,650 Takže když se vrátil k špatný Místo toho pak nevidí žádný objekt. 1731 01:26:48,650 --> 01:26:52,160 A to se rozhodne, že neexistuje objekt, šlo o falešné detekce, 1732 01:26:52,160 --> 01:26:53,930 a upustí stopu. 1733 01:26:53,930 --> 01:26:57,030 >> -The Příchozí Scud zmizel z obrazovky radaru. 1734 01:26:57,030 --> 01:27:00,260 A vteřin později jej narazila do kasáren. 1735 01:27:00,260 --> 01:27:06,150 Plout zabila 28, a byl poslední jeden vystřelil během první války v Perském zálivu. 1736 01:27:06,150 --> 01:27:11,960 >> Je tragické, že aktualizovaný software dorazil Zahránu následující den. 1737 01:27:11,960 --> 01:27:14,930 Software vada měla Bylo opraveno, zavírání 1738 01:27:14,930 --> 01:27:19,806 jedna kapitola v problémové Historie Patriot rakety. 1739 01:27:19,806 --> 01:27:20,729 >> [VIDEOPŘEHRÁVÁNÍ] 1740 01:27:20,729 --> 01:27:23,520 David J. Malan: Tak tohle je všechno říci, že tyto otázky přepadu 1741 01:27:23,520 --> 01:27:25,860 a nepřesnosti jsou až příliš reálné. 1742 01:27:25,860 --> 01:27:26,920 Tak jak jsme se sem dostali? 1743 01:27:26,920 --> 01:27:28,895 Začali jsme si povídali o printf. 1744 01:27:28,895 --> 01:27:31,270 Opět platí, že tato funkce, která vytiskne něco na obrazovku, 1745 01:27:31,270 --> 01:27:33,450 a zavedli jsme poté několik dalších funkcí 1746 01:27:33,450 --> 01:27:34,945 z tzv knihovny CS50 je. 1747 01:27:34,945 --> 01:27:36,910 A budeme i nadále viz nich ve stanovené lhůtě. 1748 01:27:36,910 --> 01:27:40,760 A my, a to zejména, který se používá get řetězec, a získat int, a nyní také získat float, 1749 01:27:40,760 --> 01:27:44,410 a přesto jiní stále se setkáváme s a používat sami zanedlouho. 1750 01:27:44,410 --> 01:27:47,220 >> Ale občas, mají jsme již viděli potřebu 1751 01:27:47,220 --> 01:27:50,520 ukládat, co tyto funkce ruka zpátky? 1752 01:27:50,520 --> 01:27:52,920 Oni nás zpět řetězec ruky, nebo int, nebo float. 1753 01:27:52,920 --> 01:27:56,070 A někdy musíme dát, že řetězec, nebo int, nebo float, někde. 1754 01:27:56,070 --> 01:28:00,100 >> A ukládat ty věci, připomínají jen stejně jako v Scratch, máme proměnné. 1755 01:28:00,100 --> 01:28:03,260 Ale na rozdíl od Scratch, v jazyce C máme skutečné typy 1756 01:28:03,260 --> 01:28:05,530 z variables-- dat typy, více generally-- 1757 01:28:05,530 --> 01:28:08,640 mezi nimi, řetězec, int, je plavat, a ti ostatní v klidu. 1758 01:28:08,640 --> 01:28:12,321 >> A tak, když budeme deklarovat proměnné v jazyce C, budeme muset deklarovat naše datové typy. 1759 01:28:12,321 --> 01:28:14,820 To není něco, co bude muset udělat později v průběhu semestru 1760 01:28:14,820 --> 01:28:16,810 jak jsme přechod do jiných jazyků. 1761 01:28:16,810 --> 01:28:19,610 Ale teď, my potřebujeme se a priori v předstihu, 1762 01:28:19,610 --> 01:28:24,370 vysvětlit, jaký typ počítače proměnné chceme, aby nám dát. 1763 01:28:24,370 --> 01:28:27,290 >> Nyní se mezitím pro tisk tyto druhy datových typů, 1764 01:28:27,290 --> 01:28:29,570 musíme říci printf, co může očekávat. 1765 01:28:29,570 --> 01:28:32,450 A my jsme viděli procent ů pro smyčce, a procento i pro celá čísla, 1766 01:28:32,450 --> 01:28:33,790 a několik dalších již. 1767 01:28:33,790 --> 01:28:37,237 A ty jsou prostě požadavky pro vizuální prezentace 1768 01:28:37,237 --> 01:28:38,070 těchto informací. 1769 01:28:38,070 --> 01:28:42,080 >> A každý z nich může být ve skutečnosti parametrized nebo vylepšil nějakým způsobem, 1770 01:28:42,080 --> 01:28:45,370 Chcete-li dále ovládat typ výstup, který dostanete. 1771 01:28:45,370 --> 01:28:49,604 A ve skutečnosti se ukázalo, že nejenom Je tam zpětné lomítko n pro nový řádek. 1772 01:28:49,604 --> 01:28:52,520 Je tu ještě něco nazývá zpětné lomítko R pro návrat vozíku, což 1773 01:28:52,520 --> 01:28:54,360 je více podobný k old school psací stroj, 1774 01:28:54,360 --> 01:28:57,690 a také Windows používá po mnoho let. 1775 01:28:57,690 --> 01:28:59,690 >> Tam je zpětné lomítko t na kartách. 1776 01:28:59,690 --> 01:29:03,170 Ukázalo se, že pokud chcete dvojité uvozovky uvnitř řetězce, 1777 01:29:03,170 --> 01:29:05,000 Připomeňme si, že jsme použili uvozovky double 1778 01:29:05,000 --> 01:29:07,900 citát vlevo a vpravo Konce našich řetězcích tak daleko. 1779 01:29:07,900 --> 01:29:09,420 To by Zdá se zmást věci. 1780 01:29:09,420 --> 01:29:12,503 >> Chcete-li dát uvozovky v Uprostřed string-- a samozřejmě, 1781 01:29:12,503 --> 01:29:13,670 to je matoucí vidět. 1782 01:29:13,670 --> 01:29:17,120 A tak budete muset utéct, takže se mluvit, s něčím, co si uvozovky 1783 01:29:17,120 --> 01:29:18,860 jako je doslova zpětná lomítka uvozovky. 1784 01:29:18,860 --> 01:29:20,230 A je tu ještě několik dalších. 1785 01:29:20,230 --> 01:29:24,540 A uvidíme více z těch, ve skutečném užívání zanedlouho. 1786 01:29:24,540 --> 01:29:27,930 >> Takže pojďme teď přechod od dat a reprezentace, 1787 01:29:27,930 --> 01:29:30,820 a aritmetické operátory, vše z nichž nám dal nějakou budovu 1788 01:29:30,820 --> 01:29:32,070 bloky, s nimiž hrát. 1789 01:29:32,070 --> 01:29:34,481 Ale teď pojďme skutečně dát us zbytek slovníku 1790 01:29:34,481 --> 01:29:36,230 že jsme již měli minulý týden Scratch 1791 01:29:36,230 --> 01:29:39,350 tím, že se podívat na některé další konstrukty C- ne všechny z nich. 1792 01:29:39,350 --> 01:29:41,680 Ale myšlenky jsme asi vidět opravdu jen 1793 01:29:41,680 --> 01:29:45,610 zdůraznit překlad z jeden jazyk, Scratch, do druhého, C. 1794 01:29:45,610 --> 01:29:48,470 >> A v průběhu času, budeme vyzvednout Další nástroje pro naši Toolkit 1795 01:29:48,470 --> 01:29:49,820 tak říkajíc, syntakticky. 1796 01:29:49,820 --> 01:29:54,190 A skutečně, uvidíte, že myšlenky jsou nyní spíše známé z minulého týdne. 1797 01:29:54,190 --> 01:29:55,200 Tak jdeme na to. 1798 01:29:55,200 --> 01:29:58,870 >> Pojďme dál a vybičovat program že ve skutečnosti používá některé výrazy, 1799 01:29:58,870 --> 01:30:00,720 Boolean výraz. 1800 01:30:00,720 --> 01:30:02,810 Nech mě jít napřed zde a vytvořit nový soubor. 1801 01:30:02,810 --> 01:30:06,090 Zavolám tento condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Nech mě jít dopředu a zahrnout knihovnu CS50. 1803 01:30:09,350 --> 01:30:12,640 A nech mě jít dopředu a zahrnují Standardní IO.h pro naše funkce, 1804 01:30:12,640 --> 01:30:14,690 a printf, a další, resp. 1805 01:30:14,690 --> 01:30:18,900 Dovolte mi, abych sám sebe, že často používaný ve int main neplatné, jehož vysvětlení zmíníme 1806 01:30:18,900 --> 01:30:20,360 vrátit se v budoucnosti. 1807 01:30:20,360 --> 01:30:23,820 >> Nyní mi dovolte jít dopředu a dát Sám int přes get int. 1808 01:30:23,820 --> 01:30:25,970 Tak mě nech jít dopředu a to udělat. 1809 01:30:25,970 --> 01:30:30,150 Chci říct, jestli i je less-- pojďme rozlišovat mezi pozitivní, negativní, 1810 01:30:30,150 --> 01:30:31,260 nebo nulové hodnoty. 1811 01:30:31,260 --> 01:30:36,630 >> Takže pokud i je menší než nula, dovolte mi, abych stačí tento program jednoduše říci, 1812 01:30:36,630 --> 01:30:42,370 negativní zpětné lomítko n, jinak pokud i je větší než nula. 1813 01:30:42,370 --> 01:30:47,030 Teď jsem samozřejmě chtěl říct printf pozitivní, zpětné lomítko n. 1814 01:30:47,030 --> 01:30:50,690 A pak ještě if-- bych mohl udělat. 1815 01:30:50,690 --> 01:30:53,410 >> Mohl bych dělal, kdybych rovná 0. 1816 01:30:53,410 --> 01:30:55,840 Ale já bych třeba dělat na alespoň už jedna chyba. 1817 01:30:55,840 --> 01:30:59,480 Připomeňme si, že rovnítko je nerovná, jak my lidé to vědí. 1818 01:30:59,480 --> 01:31:01,010 >> Ale je to operátor přiřazení. 1819 01:31:01,010 --> 01:31:05,640 A my nechceme, aby se na 0 vpravo a vložte jej do i na levé straně. 1820 01:31:05,640 --> 01:31:11,810 Tak, aby se vyhnuli nejasnostem, nebo Možná zneužití rovnítka, 1821 01:31:11,810 --> 01:31:14,740 Lidé se rozhodl před několika lety že v mnoha programovacích jazycích 1822 01:31:14,740 --> 01:31:18,000 když chcete zkontrolovat rovnost mezi levým a vpravo, 1823 01:31:18,000 --> 01:31:19,635 budete skutečně používat rovná rovná. 1824 01:31:19,635 --> 01:31:21,010 Takže jste hit rovnítko dvakrát. 1825 01:31:21,010 --> 01:31:25,600 Chcete-li přiřadit zprava doleva, můžete použít jediný rovnítko. 1826 01:31:25,600 --> 01:31:29,360 Takže jsme mohli udělat jinak tohle-- pokud i rovná se rovná nule. 1827 01:31:29,360 --> 01:31:31,710 >> Mohl bych pak jít a otevřu složené závorky, 1828 01:31:31,710 --> 01:31:36,087 a říkají, printf 0, lomítko n, hotovo. 1829 01:31:36,087 --> 01:31:38,170 Ale pamatujte, jak tyto vidličky na silnici může fungovat. 1830 01:31:38,170 --> 01:31:39,836 A opravdu, jen přemýšlet o logice. 1831 01:31:39,836 --> 01:31:41,510 i je číslo. 1832 01:31:41,510 --> 01:31:43,320 Je to celé číslo, konkrétně. 1833 01:31:43,320 --> 01:31:48,600 A to znamená, že to bude méně než 0 nebo větší než 0, nebo 0. 1834 01:31:48,600 --> 01:31:51,600 Takže tam je v jistém smyslu to implicitní standardní případ. 1835 01:31:51,600 --> 01:31:54,920 >> A tak bychom mohli, stejně jako Scratch, upustit od else if, 1836 01:31:54,920 --> 01:31:55,747 a prostě říct jinde. 1837 01:31:55,747 --> 01:31:57,830 Logicky, pokud vám programátor vědět, že je to jen 1838 01:31:57,830 --> 01:32:01,635 Tři kbelíky, do kterého scénář může fall-- první, 1839 01:32:01,635 --> 01:32:03,510 druhý, nebo třetí v tomto case-- ne 1840 01:32:03,510 --> 01:32:07,100 obtěžovat přidání dalšího přesnost a další logika tam. 1841 01:32:07,100 --> 01:32:09,690 Prostě jít dopředu s Výchozí případ od jiného. 1842 01:32:09,690 --> 01:32:11,950 >> Nyní se pojďme vpřed po uložení to, aby 1843 01:32:11,950 --> 01:32:15,760 Podmínky dot lomítko conditions-- Není to skvělý uživatelské rozhraní, 1844 01:32:15,760 --> 01:32:18,914 Protože nejsem pobízet Uživatel, jak jsem již zmínil. 1845 01:32:18,914 --> 01:32:19,580 Ale to je v pořádku. 1846 01:32:19,580 --> 01:32:20,454 Necháme to jednoduché. 1847 01:32:20,454 --> 01:32:21,890 Zkusme číslo 42. 1848 01:32:21,890 --> 01:32:23,240 A to je pozitivní. 1849 01:32:23,240 --> 01:32:26,120 Zkusme číslo Negativní 42, negativní. 1850 01:32:26,120 --> 01:32:28,244 >> Zkusme hodnotu 0. 1851 01:32:28,244 --> 01:32:29,160 A skutečně to funguje. 1852 01:32:29,160 --> 01:32:33,900 Nyní uvidíte s problémy předtím, než Dlouhé testování věci třikrát, 1853 01:32:33,900 --> 01:32:34,980 pravděpodobně není dostačující. 1854 01:32:34,980 --> 01:32:37,438 Pravděpodobně budete chtít vyzkoušet některé Větší čísla, některé menší 1855 01:32:37,438 --> 01:32:40,520 Čísla, některé rohové případy, as dojdeme k jejich popisu. 1856 01:32:40,520 --> 01:32:42,500 >> Ale teď je to docela jednoduchý program. 1857 01:32:42,500 --> 01:32:45,160 A jsem si jistá, logicky, že spadá do třech případech. 1858 01:32:45,160 --> 01:32:49,360 A skutečně, i když jsme jen zaměřila na potenciální stinné stránky 1859 01:32:49,360 --> 01:32:53,480 nepřesnost a přepadu, v reality, kde je mnoho problémů CS50 je, 1860 01:32:53,480 --> 01:32:56,000 nebudeme se bát o, po celou dobu, 1861 01:32:56,000 --> 01:32:59,050 tyto otázky přepadu a nepřesnost, protože ve skutečnosti, v C, 1862 01:32:59,050 --> 01:33:01,889 je to vlastně není vše, snadno vyhnout se ty věci. 1863 01:33:01,889 --> 01:33:04,180 Chcete-li spočítat větší a větší a větší, 1864 01:33:04,180 --> 01:33:07,510 to dopadá existují techniky, které Můžete použít, často zahrnovat věci zvané 1865 01:33:07,510 --> 01:33:11,240 knihoven, sbírek kódu, aby ostatní lidé psali, které můžete použít, 1866 01:33:11,240 --> 01:33:13,910 a jiné jazyky, jako je Java a další, ve skutečnosti 1867 01:33:13,910 --> 01:33:15,800 aby bylo mnohem jednodušší počítat ještě vyšší. 1868 01:33:15,800 --> 01:33:19,810 Takže je to opravdu některé z těchto nebezpečí funkcí jazyka, který používáte. 1869 01:33:19,810 --> 01:33:22,710 A v příštích týdnech budeme vidět, jak nebezpečné C ve skutečnosti 1870 01:33:22,710 --> 01:33:24,950 může být, pokud nechcete používat správně. 1871 01:33:24,950 --> 01:33:27,610 Ale odtud, as Python a JavaScript, bude 1872 01:33:27,610 --> 01:33:32,620 máme vrstvu na některé dodatečné ochrany, a spustit méně těchto rizik. 1873 01:33:32,620 --> 01:33:35,820 >> Takže pojďme udělat trochu víc Zajímavý logika v našem programu. 1874 01:33:35,820 --> 01:33:39,110 Tak nech mě jít dopředu a vytvořit program s názvem Logical 1875 01:33:39,110 --> 01:33:43,804 Jen tak mohu hrát s některými Skutečná logika, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Budu stačí zkopírovat a vložit některé Kód z dřívějška, takže se vrátím 1877 01:33:46,870 --> 01:33:49,950 k této pěkné výchozího bodu. 1878 01:33:49,950 --> 01:33:53,980 >> Nechť mi tentokrát dělat char C. Jsem chystá dát mu jméno C 1879 01:33:53,980 --> 01:33:58,510 jen proto, že je to obvyklé, získat charakter od uživatele. 1880 01:33:58,510 --> 01:34:00,730 A pojďme předstírat, Já se provádí část 1881 01:34:00,730 --> 01:34:04,130 Rm tohoto programu je odstranit Program před tím vyzvání uživatele 1882 01:34:04,130 --> 01:34:05,400 k odstranění souboru. 1883 01:34:05,400 --> 01:34:06,750 Jak bychom mohli udělat? 1884 01:34:06,750 --> 01:34:11,090 >> Chci říci, jestli C se rovná rovná, citace konec citátu, 1885 01:34:11,090 --> 01:34:16,304 y, pak budu předpokládat, že uživatel zvolil ano. 1886 01:34:16,304 --> 01:34:17,470 Právě jdu k tisku ano. 1887 01:34:17,470 --> 01:34:19,440 Pokud by bylo skutečně psaní Program odstranění, 1888 01:34:19,440 --> 01:34:21,420 můžeme odebrat soubor s více řádků kódu. 1889 01:34:21,420 --> 01:34:22,461 Ale budeme držet to jednoduchý. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Else if c rovná se rovná n- a teď tady, budu říkat, 1892 01:34:31,250 --> 01:34:32,980 uživatel musí mít znamená ne. 1893 01:34:32,980 --> 01:34:34,360 A pak ještě, víte co? 1894 01:34:34,360 --> 01:34:36,200 Nevím, co jiného Uživatel bude psát. 1895 01:34:36,200 --> 01:34:38,533 Takže jsem jen chtěl říct, že že je chyba, bez ohledu 1896 01:34:38,533 --> 01:34:40,070 on nebo ona vlastně napsal. 1897 01:34:40,070 --> 01:34:41,180 >> Takže to, co se tady děje? 1898 01:34:41,180 --> 01:34:44,530 Tam je zásadní rozdíl proti, co jsem udělal v minulosti. 1899 01:34:44,530 --> 01:34:49,300 Uvozovky, uvozovky, dvojité citace, a přesto jednoduché uvozovky, 1900 01:34:49,300 --> 01:34:50,170 jednoduché uvozovky. 1901 01:34:50,170 --> 01:34:52,860 Ukazuje se, že v C, že když Chcete-li napsat řetězec 1902 01:34:52,860 --> 01:34:56,680 použijete uvozovky, stejně jako máme Používám celou tu dobu se printf. 1903 01:34:56,680 --> 01:35:02,030 >> Ale pokud chcete řešit jen Jeden znak, tzv char, 1904 01:35:02,030 --> 01:35:03,780 pak jste skutečně používat apostrofy. 1905 01:35:03,780 --> 01:35:05,450 Ti z vás, kteří si naprogramovat dříve, pravděpodobně nebude mít 1906 01:35:05,450 --> 01:35:07,850 musel starat o to Rozdíl v některých jazycích. 1907 01:35:07,850 --> 01:35:09,450 V jazyce C, to záleží. 1908 01:35:09,450 --> 01:35:12,560 A tak když jsem si char a já chci přistoupit k porovnání tohoto char pomocí rovná 1909 01:35:12,560 --> 01:35:18,350 se rovná nějaké písmeno, jako je y nebo N, já, ve skutečnosti, je třeba mít apostrofy. 1910 01:35:18,350 --> 01:35:19,770 >> Teď pojďme do toho a toho dosáhnout. 1911 01:35:19,770 --> 01:35:26,180 Pojďme dál a dělat, aby logické tečka lomítko logické. 1912 01:35:26,180 --> 01:35:27,305 A teď jsem byli vyzváni. 1913 01:35:27,305 --> 01:35:30,638 Takže, podle všeho, lepší uživatelskou zkušenost by mi vlastně říct, co dělat tady. 1914 01:35:30,638 --> 01:35:33,030 Ale jdu jen slepě říkají, Y ano, OK, pěkný. 1915 01:35:33,030 --> 01:35:35,780 >> Řekněme to znovu spustit, n po dobu ne, pěkný. 1916 01:35:35,780 --> 01:35:39,610 Předpokládejme, že stejně jako u některých lidí, které znám, mí Caps Lock klíč je příliš často. 1917 01:35:39,610 --> 01:35:43,740 Takže já kapitál Y, vstupovat, došlo k chybě. 1918 01:35:43,740 --> 01:35:46,130 OK, to není přesně to, co jsem očekával. 1919 01:35:46,130 --> 01:35:48,170 Ve skutečnosti, že počítač dělá doslova co 1920 01:35:48,170 --> 01:35:51,794 Řekl jsem to do-- kontrolu malá písmena Y a malá písmena n. 1921 01:35:51,794 --> 01:35:53,960 To nemá pocit, že dobrá uživatelské zkušenosti, ačkoli. 1922 01:35:53,960 --> 01:35:59,010 Zeptám se pro a přijímám buď malá písmena nebo velká písmena. 1923 01:35:59,010 --> 01:36:02,090 Tak to dopadá, možná budete chtít říkat něco jako ve Scratch, 1924 01:36:02,090 --> 01:36:08,150 stejně jako doslovně nebo C se rovná rovná se kapitálu jednotné citovanou y. 1925 01:36:08,150 --> 01:36:11,400 Ukázalo se, že C nemá tento doslovný klíčové slovo nebo. 1926 01:36:11,400 --> 01:36:12,880 >> Ale má dvě svislé pruhy. 1927 01:36:12,880 --> 01:36:15,463 Musíte se držet Shift obvykle, Pokud používáte americkou klávesnici, 1928 01:36:15,463 --> 01:36:18,910 a udeřil na svislý pruh Klíčovým nad zpáteční klíč. 1929 01:36:18,910 --> 01:36:22,410 Ale to svislá čára svislá čára znamená nebo. 1930 01:36:22,410 --> 01:36:26,220 >> Pokud naopak, chtěli jsme říkat a stejně jako v Scratch, 1931 01:36:26,220 --> 01:36:28,180 bychom mohli udělat ampersand ampersandu. 1932 01:36:28,180 --> 01:36:31,330 To nedává logický smysl tady, protože člověk nemohl 1933 01:36:31,330 --> 01:36:37,110 zadali oba y a malá písmena y a kapitál Y jako stejný znak. 1934 01:36:37,110 --> 01:36:39,470 Takže nebo je to, co máme v úmyslu zde. 1935 01:36:39,470 --> 01:36:46,280 >> Takže když jsem to udělat v obou místech nebo C rovná se rovná kapitál N, nyní znovu spustit, 1936 01:36:46,280 --> 01:36:49,390 make logické, spusťte logické. 1937 01:36:49,390 --> 01:36:51,200 Teď můžu psát y. 1938 01:36:51,200 --> 01:36:53,920 A můžu to udělat znovu kapitál Y, nebo kapitál N. 1939 01:36:53,920 --> 01:36:56,630 A mohl bych přidat další kombinace klidu. 1940 01:36:56,630 --> 01:36:58,810 >> Tak tohle je logickým Program pokud nyní 1941 01:36:58,810 --> 01:37:01,940 Já kontrola logicky pro tato hodnota nebo je tato hodnota. 1942 01:37:01,940 --> 01:37:06,420 A nemám na nezbytně přijít s dalšími dvěma IFS Anebo kdyby. 1943 01:37:06,420 --> 01:37:09,960 Mohu skutečně spojit některé z související logiku dohromady tímto způsobem. 1944 01:37:09,960 --> 01:37:11,950 Takže by to bylo lepší navrženy tak, než jen 1945 01:37:11,950 --> 01:37:17,490 řka: Jestliže C se rovná malými písmeny y, tisknout ano, jinak jestli c rovná kapitálu Y, 1946 01:37:17,490 --> 01:37:20,074 tisknout ano, jinak jestli c rovná lower-- jinými slovy, 1947 01:37:20,074 --> 01:37:21,990 nemusíte mít stále více a více poboček. 1948 01:37:21,990 --> 01:37:28,840 Můžete kombinovat některé z ekvivalentu větve Logicky tudíž tímto způsobem. 1949 01:37:28,840 --> 01:37:34,150 >> Takže pojďme se podívat na jen jeden finální přísada, jeden Finální konstrukt, 1950 01:37:34,150 --> 01:37:34,847 který umožňuje C. 1951 01:37:34,847 --> 01:37:36,930 A vrátíme se v Budoucí ostatním ještě. 1952 01:37:36,930 --> 01:37:41,400 A pak budeme uzavírat prohlížením o teplotě správnosti code-- 1953 01:37:41,400 --> 01:37:46,070 dostat kód work-- ale design kódu, a zasadit semínka ty brzy. 1954 01:37:46,070 --> 01:37:51,337 >> Tak nech mě jít dopředu a otevírají nový soubor zde. 1955 01:37:51,337 --> 01:37:51,920 Víš co? 1956 01:37:51,920 --> 01:37:54,450 Chystám se znovu zavést že stejný program, 1957 01:37:54,450 --> 01:37:55,940 ale s použitím jiného konstruktu. 1958 01:37:55,940 --> 01:38:00,110 >> Tak mi dejte rychle dát sám Přístup zahrnout CS50.h 1959 01:38:00,110 --> 01:38:04,150 pro knihovnu CS50, Standardní Io.h pro printf. 1960 01:38:04,150 --> 01:38:06,510 Dej mi moje int main neplatné. 1961 01:38:06,510 --> 01:38:09,310 A pak tady, ať mě jít dopředu a to udělat. 1962 01:38:09,310 --> 01:38:12,010 >> Char c dostane dostat char, stejně jako předtím. 1963 01:38:12,010 --> 01:38:16,770 A budu používat nový konstrukt now-- spínač, na jaký charakter? 1964 01:38:16,770 --> 01:38:19,820 Takže přepínač je něco jako spínání koleje. 1965 01:38:19,820 --> 01:38:22,070 Nebo, opravdu, to je v jistém smyslu if jiného, ​​pokud else if, 1966 01:38:22,070 --> 01:38:23,980 ale psaný poněkud jinak. 1967 01:38:23,980 --> 01:38:25,490 >> Přepínač vypadá takto. 1968 01:38:25,490 --> 01:38:29,060 Máte vypínač a pak to, co znak nebo číslo, které chcete prohlédnout, 1969 01:38:29,060 --> 01:38:32,000 pak některé složené závorky jako v Scratch, stačí říct dělat tohle. 1970 01:38:32,000 --> 01:38:33,480 A pak máte různé případy. 1971 01:38:33,480 --> 01:38:34,830 >> Nemusíte použít, pokud a jinde. 1972 01:38:34,830 --> 01:38:37,050 Doslova používat případ slovo. 1973 01:38:37,050 --> 01:38:38,790 A vy byste říci něco takového. 1974 01:38:38,790 --> 01:38:43,820 >> Takže v případě malými písmeny y, nebo v případě, že Y kapitálu, 1975 01:38:43,820 --> 01:38:47,350 pokračujte a vytisknout ano. 1976 01:38:47,350 --> 01:38:49,020 A pak vypukne spínače. 1977 01:38:49,020 --> 01:38:49,580 A je to. 1978 01:38:49,580 --> 01:38:50,880 Máme hotovo. 1979 01:38:50,880 --> 01:38:57,270 >> Else if, tak říkajíc, malá písmena n, nebo N kapitál, 1980 01:38:57,270 --> 01:39:02,560 pak jděte do toho a tisk out ne, a pak zlomit. 1981 01:39:02,560 --> 01:39:08,022 Else-- a tento druh je standardní případ indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 a jen pro jistotu, ačkoli Logicky tato přestávka není nutné 1983 01:39:10,980 --> 01:39:12,896 proto, že jsme na konci přepínače tak jako tak, 1984 01:39:12,896 --> 01:39:14,520 Já jsem teď vypadla z přepínače. 1985 01:39:14,520 --> 01:39:16,280 Takže to vypadá trochu jinak. 1986 01:39:16,280 --> 01:39:18,272 >> Ale logicky, je to ve skutečnosti ekvivalentní. 1987 01:39:18,272 --> 01:39:19,980 A proč byste měli používat jeden nad druhým? 1988 01:39:19,980 --> 01:39:23,220 Někdy prostě osobní preference, Někdy estetika, 1989 01:39:23,220 --> 01:39:25,420 když jsem se podíval na to Nyní je tu něco, 1990 01:39:25,420 --> 01:39:27,510 třeba říci, pro čitelnost tohoto kódu. 1991 01:39:27,510 --> 01:39:30,690 Myslím, nevadí skutečnost, že toto Kód je nová pro mnohé z nás v místnosti. 1992 01:39:30,690 --> 01:39:33,515 >> Ale to jen tak je dost. 1993 01:39:33,515 --> 01:39:37,760 Vidíte malá písmena Y, Y kapitálu, malá písmena n, kapitál N default, 1994 01:39:37,760 --> 01:39:40,150 to jen trochu skoky na vás takovým způsobem, 1995 01:39:40,150 --> 01:39:42,200 že pravděpodobně, možná Předchozí příklad 1996 01:39:42,200 --> 01:39:45,780 s IFS a svislé pruhy, a jinde IFS, nemusí mít. 1997 01:39:45,780 --> 01:39:51,600 Tak to je opravdu věc osobní volba, opravdu, nebo čitelnost, 1998 01:39:51,600 --> 01:39:52,360 kódu. 1999 01:39:52,360 --> 01:39:58,230 >> Ale pokud jde o funkčnost, dovolte mi, abych pokračovat a dělat spínač, dot lomítko 2000 01:39:58,230 --> 01:40:05,830 switch, a teď psát malými písmeny y, kapitál Y, malé n, kapitál N, 2001 01:40:05,830 --> 01:40:09,250 David, znovu protože to je ani jeden znak. 2002 01:40:09,250 --> 01:40:12,050 Udělejme x, chyba, jak se očekávalo. 2003 01:40:12,050 --> 01:40:15,640 A logically-- a to je něco, Chtěl bych povzbudit v general-- dokonce 2004 01:40:15,640 --> 01:40:17,790 i když jsme pouze poškrábání Povrch některé z těchto funkcí. 2005 01:40:17,790 --> 01:40:20,560 >> A to nemusí být zřejmé, když vás si sednout na klávesnici, 2006 01:40:20,560 --> 01:40:21,370 Jak to funguje? 2007 01:40:21,370 --> 01:40:22,240 Co by to udělat? 2008 01:40:22,240 --> 01:40:25,630 Krásná věc, o které mají notebook nebo desktop, nebo přístup 2009 01:40:25,630 --> 01:40:29,290 k počítači pomocí překladače, a s editoru kódu, jako je tato, 2010 01:40:29,290 --> 01:40:32,990 se můžete téměř vždy odpovědět na tyto otázky pro sebe jen pokouší. 2011 01:40:32,990 --> 01:40:36,570 >> Například, pokud je rétorická otázka po ruce byly, 2012 01:40:36,570 --> 01:40:39,540 co se stane, když zapomenete přestávky na výroky? 2013 01:40:39,540 --> 01:40:41,400 Což je vlastně velmi časté, co dělat, 2014 01:40:41,400 --> 01:40:43,540 protože to nevypadá jako byste opravdu potřebují. 2015 01:40:43,540 --> 01:40:46,790 Nemají opravdu dokončit svůj myslel jako závorce nebo kudrnaté 2016 01:40:46,790 --> 01:40:47,714 rovnátka dělá. 2017 01:40:47,714 --> 01:40:49,630 Pojďme dál a překompilovat kód a uvidíme. 2018 01:40:49,630 --> 01:40:53,690 Tak, aby spínač, tečka lomítko přepínač. 2019 01:40:53,690 --> 01:40:56,435 Pojďme psát malými písmeny y, vrchní případ, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Tak jsem napsal y. 2022 01:41:00,700 --> 01:41:04,420 >> Program řekl, že ano, ne, chyba, jako by to bylo mění svůj názor. 2023 01:41:04,420 --> 01:41:09,280 Ale docela to bylo, protože to, co se děje s vypínačem se o první případ, že 2024 01:41:09,280 --> 01:41:13,899 Zápas v podstatě znamená, hej počítač, provést všechny kód pod ní. 2025 01:41:13,899 --> 01:41:16,690 A pokud nechcete říci zlomu, nebo Neříkejte pauzu, nebo neříkejte pauzu, 2026 01:41:16,690 --> 01:41:19,540 Počítač bude foukat přes všechny ty linky 2027 01:41:19,540 --> 01:41:22,779 a provádět všechny z nich, dokud se dostane do té složenou závorkou. 2028 01:41:22,779 --> 01:41:24,320 Takže brzdy jsou skutečně nezbytné. 2029 01:41:24,320 --> 01:41:27,120 Ale stánek s jídlem tady je, když pochybností, zkusit něco. 2030 01:41:27,120 --> 01:41:29,510 Možná uložit první kód, nebo je uložit do jiného souboru 2031 01:41:29,510 --> 01:41:32,930 pokud jste opravdu starosti popletl a museli obnovit 2032 01:41:32,930 --> 01:41:34,430 dílo, které víte, že funguje. 2033 01:41:34,430 --> 01:41:35,410 >> Ale zkuste věci. 2034 01:41:35,410 --> 01:41:38,074 A nebuďte jako strach, snad, z toho, co počítač může dělat, 2035 01:41:38,074 --> 01:41:39,490 nebo že byste mohli něco rozbít. 2036 01:41:39,490 --> 01:41:42,790 Vždy se můžete vrátit zpět do jisté starší verze. 2037 01:41:42,790 --> 01:41:45,640 >> Takže pojďme končí pohledem při konstrukci kódu. 2038 01:41:45,640 --> 01:41:49,020 Máme nyní tuto schopnost psát Podmínky a zápis smyčky, 2039 01:41:49,020 --> 01:41:50,850 a proměnné a funkce volání. 2040 01:41:50,850 --> 01:41:54,590 Takže upřímně řečeno, jsme trochu zpátky na kde jsme byli před týdnem se Scratch, 2041 01:41:54,590 --> 01:42:00,120 byť s méně přesvědčivé textové Prostředí než Scratch dovolí. 2042 01:42:00,120 --> 01:42:03,990 >> Ale všimněte si, jak rychle jsme získali že slovní zásobu, i když je to 2043 01:42:03,990 --> 01:42:07,570 bude chvíli trvat propadat, tak, že nyní můžeme použít tento slovní zásobu 2044 01:42:07,570 --> 01:42:10,320 psát další zajímavé programy. 2045 01:42:10,320 --> 01:42:12,940 A pojďme se dítě krok ke které takto. 2046 01:42:12,940 --> 01:42:14,890 Nech mě jít dopředu a vytvoření nového souboru zde. 2047 01:42:14,890 --> 01:42:17,750 >> Jdu to nazývat prototype.c, a zavést 2048 01:42:17,750 --> 01:42:20,954 Poprvé, schopnost vytvořit svůj vlastní funkce. 2049 01:42:20,954 --> 01:42:22,870 Někteří z vás mohou mít udělal to s Scratch, 2050 01:42:22,870 --> 01:42:25,430 kde si můžete vytvořit svůj vlastní uživatelské bloky v základu, 2051 01:42:25,430 --> 01:42:27,892 a pak přetáhnout na místo všude tam, kde byste chtěli v C. 2052 01:42:27,892 --> 01:42:30,100 A ve většině programů jazyky, můžete to udělat přesně to, 2053 01:42:30,100 --> 01:42:33,580 že-- vytvořit svůj vlastní funkce, v případě, že již neexistují. 2054 01:42:33,580 --> 01:42:38,660 >> Tak například, nechte mě jít napřed a zahrnují CS50.h, a zahrnují 2055 01:42:38,660 --> 01:42:43,110 Standardní IO.h, int main neplatné. 2056 01:42:43,110 --> 01:42:46,020 A teď máme zástupného připraven jít. 2057 01:42:46,020 --> 01:42:48,550 Pořád tisk věci stejně jako jména lidí dnes. 2058 01:42:48,550 --> 01:42:51,910 A to cítí jako-- by neměl být hezké, kdyby tam 2059 01:42:51,910 --> 01:42:53,936 byly funkci nazvanou název tiskového? 2060 01:42:53,936 --> 01:42:55,060 Nemám použít printf. 2061 01:42:55,060 --> 01:42:56,976 Nechci mít na paměti, Všechny formátu kódy. 2062 01:42:56,976 --> 01:43:00,050 Proč ne já, nebo proč ne někdo přede mnou, 2063 01:43:00,050 --> 01:43:02,980 Vytvoření funkce nazývá tisk jméno, že vzhledem k tomu nějaké jméno, 2064 01:43:02,980 --> 01:43:03,980 prostě vytiskne jej ven? 2065 01:43:03,980 --> 01:43:08,700 >> Jinými slovy, když řeknu, hej, počítač, dej mi řetězec 2066 01:43:08,700 --> 01:43:11,870 tím, že žádá uživatele o takové, pomocí funkce get řetězec CS50 je. 2067 01:43:11,870 --> 01:43:15,090 Hele, počítač, dal, že řetězec proměnná na levé straně, 2068 01:43:15,090 --> 01:43:16,150 a nazvat to. 2069 01:43:16,150 --> 01:43:22,150 A pak, hej počítač, pokračuj a vytisknout to jméno osoby, hotovo. 2070 01:43:22,150 --> 01:43:26,240 >> Teď by to bylo hezké, protože tento program, příhodně pojmenovaný, 2071 01:43:26,240 --> 01:43:29,170 mi řekne, co to má dělat prostřednictvím jmen těch, fungovaly je. 2072 01:43:29,170 --> 01:43:32,930 Nech mě jít a dělat prototyp, Enter. 2073 01:43:32,930 --> 01:43:34,930 A, bohužel, toto se nebude létat. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, řádek 7, znak 5, chyba, implicitní prohlášení 2075 01:43:39,430 --> 01:43:42,960 z funkce jména tiskového je neplatný v C99, C99 2076 01:43:42,960 --> 01:43:45,130 znamenat verzi C která vyšla v roce 1999. 2077 01:43:45,130 --> 01:43:45,730 To je vše. 2078 01:43:45,730 --> 01:43:48,780 >> Tak nevím, co To vše znamená, že dosud. 2079 01:43:48,780 --> 01:43:50,810 Ale mám rozpoznat chybu v červené barvě. 2080 01:43:50,810 --> 01:43:51,770 To je docela zřejmé. 2081 01:43:51,770 --> 01:43:53,769 >> A zdá se, že s zelená znak zde, 2082 01:43:53,769 --> 01:43:57,520 je problém s názvem tisku, otevřený paren s, zavřít závorka, semi-tlustého střeva. 2083 01:43:57,520 --> 01:44:01,800 Ale implicitní prohlášení Funkce jsme krátce předtím viděl. 2084 01:44:01,800 --> 01:44:04,880 To znamená, prostě, že Clang neví, co mám na mysli. 2085 01:44:04,880 --> 01:44:09,000 >> Použil jsem slovo, slovní zásobu, že je Nikdy neviděl, ani učili předtím. 2086 01:44:09,000 --> 01:44:11,950 A tak to musím naučit co tato funkce znamená. 2087 01:44:11,950 --> 01:44:13,590 Takže já jdu dopředu a udělat to. 2088 01:44:13,590 --> 01:44:17,970 >> Chystám se jít dopředu a realizovat mé vlastní volání funkce Print Name. 2089 01:44:17,970 --> 01:44:24,720 A budu říkat, jak vyplývá, že Dělá to, printf, ahoj, procenta 2090 01:44:24,720 --> 01:44:27,760 s, lomítko n, jméno, středník. 2091 01:44:27,760 --> 01:44:29,250 Tak co jsem právě udělal? 2092 01:44:29,250 --> 01:44:31,325 >> Tak to dopadá, aby implementovat své vlastní funkce, 2093 01:44:31,325 --> 01:44:33,845 jsme trochu půjčit některé stejnou strukturu jako hlavní 2094 01:44:33,845 --> 01:44:35,720 že jsme právě byli považována za samozřejmost, a já 2095 01:44:35,720 --> 01:44:37,730 vím jen kopírování a vkládání přesně to, co 2096 01:44:37,730 --> 01:44:39,170 Psal jsem v minulosti. 2097 01:44:39,170 --> 01:44:40,570 Ale všimněte si vzor zde. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, Void, budeme šprýmaři odděleně netrvalo dlouho, co to vlastně znamená. 2099 01:44:43,750 --> 01:44:46,160 >> Ale pro dnešek, jen Všimněte si, souběžnost. 2100 01:44:46,160 --> 01:44:48,210 Void, tisk názvu, string name, takže je tu 2101 01:44:48,210 --> 01:44:50,310 nachový klíčových slov, která jdeme na začátek 2102 01:44:50,310 --> 01:44:54,067 volá návratový typ, název funkce, a potom vstup. 2103 01:44:54,067 --> 01:44:56,400 Takže ve skutečnosti, lze destilovat tento druh jako minulého týdne 2104 01:44:56,400 --> 01:44:59,030 protože se jedná o název nebo Algoritmus kódu kterém jsme 2105 01:44:59,030 --> 01:45:00,761 bude write-- algoritmus podkladových 2106 01:45:00,761 --> 01:45:02,010 Kód budeme psát. 2107 01:45:02,010 --> 01:45:03,180 >> To je jeho vklad. 2108 01:45:03,180 --> 01:45:04,670 To je jeho výstup. 2109 01:45:04,670 --> 01:45:08,730 Tato funkce, název tisk, je navrženy tak, aby řetězec s názvem název, 2110 01:45:08,730 --> 01:45:11,350 nebo cokoliv jiného, ​​jako vstup, a pak neplatné. 2111 01:45:11,350 --> 01:45:13,904 To nic nevrací, jako dostat řetězec nebo získat int dělá. 2112 01:45:13,904 --> 01:45:15,570 Tak to bude mi něco předat zpět. 2113 01:45:15,570 --> 01:45:17,960 Je to jen bude mít Vedlejším efektem, tak říkajíc, 2114 01:45:17,960 --> 01:45:19,570 tisknout jméno osoby. 2115 01:45:19,570 --> 01:45:22,260 Takže si všimnout, řádek 7, I mohou volat jména tisku. 2116 01:45:22,260 --> 01:45:25,920 Řádek 10, mohu definovat nebo zavést název tisku. 2117 01:45:25,920 --> 01:45:28,450 Ale, bohužel, to nestačí. 2118 01:45:28,450 --> 01:45:31,230 >> Nech mě jít dopředu a překompilovat to po uložení. 2119 01:45:31,230 --> 01:45:33,910 Whoa, teď jsem to udělal horší, by se mohlo zdát. 2120 01:45:33,910 --> 01:45:37,027 Takže implicitní prohlášení název funkce tisku je neplatná. 2121 01:45:37,027 --> 01:45:38,360 A opět je tu další chyby. 2122 01:45:38,360 --> 01:45:41,430 Ale jak jsem varoval již dříve, a to i pokud se dostanete zahlceni, 2123 01:45:41,430 --> 01:45:44,850 nebo trochu smutné vidět tolik Chyby, zaměřit se pouze na první 2124 01:45:44,850 --> 01:45:47,500 zpočátku, protože by to mohlo jen měly kaskádový účinek. 2125 01:45:47,500 --> 01:45:51,970 Takže C, nebo Clang konkrétněji, stále nerozpozná název tisku. 2126 01:45:51,970 --> 01:45:54,580 >> A to proto, že Clang, záměrné, je tak trochu hloupý. 2127 01:45:54,580 --> 01:45:56,280 To jen dělá to, co si to říct dělat. 2128 01:45:56,280 --> 01:46:00,950 A to dělá jen proto, v pořadí ve kterém se říci dělat. 2129 01:46:00,950 --> 01:46:05,270 >> Tak jsem definovány hlavní on-line čtyři, stejně jako jsme dělali dost často. 2130 01:46:05,270 --> 01:46:07,980 Já jsem je definován název tiskového na řádku 10. 2131 01:46:07,980 --> 01:46:11,793 Ale já se snažím používat název tiskového na lince sedm. 2132 01:46:11,793 --> 01:46:13,670 >> Je to příliš brzy, ještě neexistuje. 2133 01:46:13,670 --> 01:46:19,150 Takže jsem mohl být chytrý, a to jako, OK, takže pojďme jen hrát spolu, 2134 01:46:19,150 --> 01:46:23,680 a pohybovat název tiskového nahoru tady, a znovu sestavit. 2135 01:46:23,680 --> 01:46:24,550 Ó můj bože. 2136 01:46:24,550 --> 01:46:25,260 Fungovalo to. 2137 01:46:25,260 --> 01:46:26,670 Bylo to tak jednoduché, jak to. 2138 01:46:26,670 --> 01:46:28,120 >> Ale logika je přesně to. 2139 01:46:28,120 --> 01:46:30,870 Musíte se naučit, co to Clang je, že se nejprve definuje funkci. 2140 01:46:30,870 --> 01:46:31,920 Potom jej můžete použít. 2141 01:46:31,920 --> 01:46:33,940 Ale, upřímně řečeno, to cítí jako šikmou plochu. 2142 01:46:33,940 --> 01:46:35,773 >> Takže pokaždé, když jsem běžet na problém, jsem jen 2143 01:46:35,773 --> 01:46:39,450 bude pro zvýraznění a zkopírujte kód Napsal jsem, nakrájejte a vložte jej sem. 2144 01:46:39,450 --> 01:46:41,370 A jistě, mohli bychom vymyslet některé scénáře 2145 01:46:41,370 --> 01:46:43,286 kde jedna funkce by mohl je třeba volat jiný. 2146 01:46:43,286 --> 01:46:46,030 A vy prostě nemůže dát každý Funkce nad každý jiný. 2147 01:46:46,030 --> 01:46:47,930 >> Tak to dopadá tu lepším řešením. 2148 01:46:47,930 --> 01:46:50,100 Můžeme nechat to být. 2149 01:46:50,100 --> 01:46:53,677 A upřímně řečeno, je to obecně pěkné, a pohodlné, a dobrý design 2150 01:46:53,677 --> 01:46:56,760 aby hlavní první, protože, opět, Hlavním stejně jako při klepnutí zelená vlajka, 2151 01:46:56,760 --> 01:46:59,027 že je funkce, která dostane popraven ve výchozím nastavení. 2152 01:46:59,027 --> 01:47:01,110 Takže si klidně dát že v horní části souboru 2153 01:47:01,110 --> 01:47:03,560 takže když vy nebo některý Jiný člověk podívá na soubor 2154 01:47:03,560 --> 01:47:06,360 víte, co se děje pouhým přečtením hlavní první. 2155 01:47:06,360 --> 01:47:15,360 Tak to dopadá, můžeme říci Clang proaktivně, hej, Clang na lince čtyři, 2156 01:47:15,360 --> 01:47:17,940 Slibuji, že budu realizovat funkce nazvaná Tisk 2157 01:47:17,940 --> 01:47:22,600 Název, který má název řetězec s názvem jako vstup a vrátí nic, void. 2158 01:47:22,600 --> 01:47:24,770 A budu dostat kolem provádění později. 2159 01:47:24,770 --> 01:47:25,680 >> Přichází Main. 2160 01:47:25,680 --> 01:47:29,130 Hlavním nyní na lince 9 mohou používat Název tiskového protože Clang 2161 01:47:29,130 --> 01:47:32,600 důvěřuje, že nakonec, že narazí definici 2162 01:47:32,600 --> 01:47:34,880 implementace Print Name. 2163 01:47:34,880 --> 01:47:37,390 Takže poté, co mi zachránil souboru, ať mě jít dopředu a vytvořit prototyp, 2164 01:47:37,390 --> 01:47:38,498 vypadá dobře tentokrát. 2165 01:47:38,498 --> 01:47:43,470 Dot lomítko, prototyp, dovolte mi, abych pokračovat a zadat název. 2166 01:47:43,470 --> 01:47:48,440 David Ahoj Davide, Zamila, ahoj Zamila, a, opravdu, teď to funguje. 2167 01:47:48,440 --> 01:47:52,200 >> Takže složka je, že máme udělal vlastní funkce, jako zvyk 2168 01:47:52,200 --> 01:47:54,219 Scratch blok my ji volá. 2169 01:47:54,219 --> 01:47:57,010 Ale na rozdíl od nuly, kde si můžete Jen ji vytvořit a začít používat, 2170 01:47:57,010 --> 01:47:59,330 Nyní musíme být trochu pedantský, 2171 01:47:59,330 --> 01:48:03,410 a vlastně trénovat Clang používat, nebo ji čeká. 2172 01:48:03,410 --> 01:48:09,140 Nyní, jak stranou, proč celou tu dobu mají jsme byli jen slepě na víře, včetně 2173 01:48:09,140 --> 01:48:12,170 CS50.h, včetně standardního IO.h? 2174 01:48:12,170 --> 01:48:15,190 >> Tak to dopadá, Mezi několik dalších věcí, 2175 01:48:15,190 --> 01:48:18,550 vše, co je v těch dot h Soubory, které se dějí být souborů. 2176 01:48:18,550 --> 01:48:20,460 Jsou hlavičkové soubory, tak říkajíc. 2177 01:48:20,460 --> 01:48:23,270 Jsou stále napsaný v C. Ale oni jsou jiný typ souboru. 2178 01:48:23,270 --> 01:48:28,690 >> Pro tuto chvíli, můžete do značné míry předpokládat, že všechno, co je uvnitř CS50.h 2179 01:48:28,690 --> 01:48:33,360 Je někdo vtipy, jako je tato, nikoliv pro funkce s názvem Print Name, 2180 01:48:33,360 --> 01:48:36,840 ale k Get řetězec, Get Float, a několik dalších. 2181 01:48:36,840 --> 01:48:41,510 A existují podobné prototypy, jeden vložky, uvnitř standardního IO.h 2182 01:48:41,510 --> 01:48:46,241 pro printf, která je nyní v moje vlastní tisku název funkce. 2183 01:48:46,241 --> 01:48:49,490 Takže jinými slovy, celá tato doba máme právě slepě kopírování a vkládání 2184 01:48:49,490 --> 01:48:51,780 patří to, zahrnují to, co se děje? 2185 01:48:51,780 --> 01:48:55,310 To jsou jen trochu stopy k řinčení pokud jde o jaké funkce 2186 01:48:55,310 --> 01:49:00,170 jsou skutečně realizovány, jen jinde v různých souborů 2187 01:49:00,170 --> 01:49:02,440 jinde v systému. 2188 01:49:02,440 --> 01:49:05,160 >> Takže jsme implementován jméno tisku. 2189 01:49:05,160 --> 01:49:07,910 To přece má tento nežádoucí účinek tisk něco na obrazovce. 2190 01:49:07,910 --> 01:49:10,170 Ale to není ve skutečnosti podej mi něco zpět. 2191 01:49:10,170 --> 01:49:12,200 Jak můžeme jít o provádění programu, který 2192 01:49:12,200 --> 01:49:14,510 to mi podat něco pro sebe? 2193 01:49:14,510 --> 01:49:15,580 >> Dobře, zkusme to. 2194 01:49:15,580 --> 01:49:21,360 Nech mě jít dopředu a realizovat soubor nazvaný return.c 2195 01:49:21,360 --> 01:49:24,530 takže můžeme ukázat, jak něco stejně jako Get řetězec, nebo získat Int, 2196 01:49:24,530 --> 01:49:27,340 je vlastně vrací něco zpět uživateli. 2197 01:49:27,340 --> 01:49:29,840 Pojďme dál a definovat int main neplatné. 2198 01:49:29,840 --> 01:49:33,230 >> A opět v budoucnu, my budeme vysvětlí, co to int i tu prázdnotu 2199 01:49:33,230 --> 01:49:34,090 je ve skutečnosti dělá. 2200 01:49:34,090 --> 01:49:35,840 Ale pro dnešek, zmíníme brát jako samozřejmost. 2201 01:49:35,840 --> 01:49:39,970 Chystám se jít dopředu a printf, pro dobrou uživatelské zkušenosti, x je. 2202 01:49:39,970 --> 01:49:44,360 A pak budu čekat na Uživatel dát mi x s get int. 2203 01:49:44,360 --> 01:49:48,459 >> A pak budu pokračovat a vytisknout x na náměstí. 2204 01:49:48,459 --> 01:49:50,500 Takže když máte jen klávesnice, lidé obyčejně 2205 01:49:50,500 --> 01:49:52,600 použijte malou mrkev symbol na klávesnici 2206 01:49:52,600 --> 01:49:55,330 reprezentovat k napájení z ní nebo exponent. 2207 01:49:55,330 --> 01:49:58,960 SOx druhou je přítomen i. 2208 01:49:58,960 --> 01:50:00,660 >> A teď budu dělat. 2209 01:50:00,660 --> 01:50:03,940 Mohl bych do--, co je x na druhou? x Squared je x krát x. 2210 01:50:03,940 --> 01:50:06,690 >> A my jsme to udělali někteří Před časem již dnes. 2211 01:50:06,690 --> 01:50:08,730 To nemá pocit, vše, co velký pokrok. 2212 01:50:08,730 --> 01:50:09,570 Víš co? 2213 01:50:09,570 --> 01:50:13,100 Pojďme využít některé z této myšlenky od minule abstrakce. 2214 01:50:13,100 --> 01:50:16,080 >> Nebylo by hezké, kdyby tam je funkce nazvaná 2215 01:50:16,080 --> 01:50:18,460 čtverec, který dělá přesně to? 2216 01:50:18,460 --> 01:50:20,640 To ještě na konci den, dělá tu samou matematiku. 2217 01:50:20,640 --> 01:50:22,410 Ale pojďme abstraktní pryč myšlenky o věnování 2218 01:50:22,410 --> 01:50:25,280 jedno číslo vynásobí Dalším, a jen dát mu jméno, 2219 01:50:25,280 --> 01:50:27,360 jako čtverec tuto hodnotu. 2220 01:50:27,360 --> 01:50:29,560 >> A, jinými slovy, v C, pojďme vytvořit funkci 2221 01:50:29,560 --> 01:50:32,660 volal čtverec, který dělá přesně to. 2222 01:50:32,660 --> 01:50:34,600 Bude to nazvat čtverečních. 2223 01:50:34,600 --> 01:50:35,790 Bude to trvat int. 2224 01:50:35,790 --> 01:50:37,820 A my bude jen nazývají n, ve výchozím nastavení. 2225 01:50:37,820 --> 01:50:39,403 >> Ale my jsme mohli nazvat něco chceme. 2226 01:50:39,403 --> 01:50:42,900 A vše, co to bude ano, doslova, je návrat 2227 01:50:42,900 --> 01:50:45,810 výsledek n-krát n. 2228 01:50:45,810 --> 01:50:48,980 Ale proto, že je vracet něco, který 2229 01:50:48,980 --> 01:50:53,690 je klíčové slovo ve fialové máme Nikdy předtím neviděl, jsem na lince 11, 2230 01:50:53,690 --> 01:50:55,410 Nelze prostě říct void tentokrát. 2231 01:50:55,410 --> 01:51:01,320 >> Neplatné, v tomto příkladu jsme právě viděli spíše názvu tisku, prostě znamená, 2232 01:51:01,320 --> 01:51:02,190 dělej něco. 2233 01:51:02,190 --> 01:51:04,170 Ale není mi předat něco zpět. 2234 01:51:04,170 --> 01:51:06,790 V tomto případě, já chci Pro návrat n krát n, 2235 01:51:06,790 --> 01:51:08,460 nebo co to je, že číslo. 2236 01:51:08,460 --> 01:51:12,460 >> Takže nemohu říct, hej, počítač, Já nic vrátit, neplatné. 2237 01:51:12,460 --> 01:51:16,166 Bude to návrat ze své povahy, int. 2238 01:51:16,166 --> 01:51:17,790 A tak to je vše, co se tady děje. 2239 01:51:17,790 --> 01:51:20,070 >> Vstup na náměstí bude int. 2240 01:51:20,070 --> 01:51:24,760 A tak, že ji můžeme použít, musí mají jméno, N. To bude výstup 2241 01:51:24,760 --> 01:51:26,240 int, který nepotřebuje jméno. 2242 01:51:26,240 --> 01:51:29,590 Můžeme to nechat na hlavní, nebo ten, kdo je pomocí mě pamatovat tuto hodnotu Kdybychom 2243 01:51:29,590 --> 01:51:31,120 chtít s vlastním proměnné. 2244 01:51:31,120 --> 01:51:33,230 >> A opět, jedinou novou Zde je klíčové slovo Return. 2245 01:51:33,230 --> 01:51:34,480 A já jsem jen dělal nějakou matematiku. 2246 01:51:34,480 --> 01:51:41,825 Kdybych opravdu chtěl být zbytečné, Mohl bych říct, int výrobek dostane n-krát n. 2247 01:51:41,825 --> 01:51:44,170 >> A pak bych mohl říci, vrátit výrobek. 2248 01:51:44,170 --> 01:51:47,360 Ale opět, aby mého úhlu co nastane dříve to prostě není dobré design-- 2249 01:51:47,360 --> 01:51:50,060 podobně, proč zavést název, symbol, stejně jako výrobek, 2250 01:51:50,060 --> 01:51:51,570 jen proto, aby okamžitě vrátit? 2251 01:51:51,570 --> 01:51:53,670 Je to trochu čistší, o něco silnější, takže 2252 01:51:53,670 --> 01:51:59,380 mluvit, jen říct návrat n-krát n, zbavit se této linie úplně. 2253 01:51:59,380 --> 01:52:02,860 >> A je to jen méně kódu ke čtení, méně příležitostí k chybám. 2254 01:52:02,860 --> 01:52:05,180 A uvidíme, jestli to ve skutečnosti nyní pracuje. 2255 01:52:05,180 --> 01:52:09,380 Teď, já jdu dopředu a dělat návrat. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, implicitní deklarace funkce. 2257 01:52:11,460 --> 01:52:14,080 Udělal jsem tuto chybu předtím, žádný velký problém. 2258 01:52:14,080 --> 01:52:18,950 Dovolte mi psát, nebo zvýraznit a kopírovat, ten samý prototyp funkce, 2259 01:52:18,950 --> 01:52:21,342 nebo podpis, funkce tady. 2260 01:52:21,342 --> 01:52:22,800 Nebo bych mohl pohybovat celou funkci. 2261 01:52:22,800 --> 01:52:23,841 >> Ale to je trochu líný. 2262 01:52:23,841 --> 01:52:24,870 Takže nebudeme dělat. 2263 01:52:24,870 --> 01:52:27,960 Nyní mi dovolte vrátit Znovu dot návrat lomítko. 2264 01:52:27,960 --> 01:52:32,790 >> x je 2. x na druhou je 4. x je 3. x druhou 9. 2265 01:52:32,790 --> 01:52:35,300 A funkce se zdá Nyní je třeba pracovat. 2266 01:52:35,300 --> 01:52:36,550 Takže to, co je tady v tom rozdíl? 2267 01:52:36,550 --> 01:52:42,520 Mám funkci, která se nazývá čtverec, V tomto případě, který jsem dal na vstupu. 2268 01:52:42,520 --> 01:52:43,830 A já se vrátím výstup. 2269 01:52:43,830 --> 01:52:46,210 A přesto, dříve, pokud Otevřu jiný příklad 2270 01:52:46,210 --> 01:52:51,640 z dřívějška, což Byl nazýván prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Měl jsem tiskovou jméno, které vrátil neplatné, tak říkajíc, 2272 01:52:54,770 --> 01:52:58,730 Nebo se vrátila nic, a jednoduše měla nežádoucí účinek. 2273 01:52:58,730 --> 01:53:00,230 >> Takže to, co se tady děje? 2274 01:53:00,230 --> 01:53:03,520 No, zvažovat funkci dostat řetězec jen na okamžik. 2275 01:53:03,520 --> 01:53:06,570 Byli jsme pomocí funkce dostat řetězec v následujícím způsobem. 2276 01:53:06,570 --> 01:53:10,464 >> Měli jsme funkce dostat řetězec, jako například: CS50.h, 2277 01:53:10,464 --> 01:53:16,624 zahrnují standardní IO.h, int main, neplatné. 2278 01:53:16,624 --> 01:53:18,790 A pak pokaždé, když jsem volal get řetězec tak daleko, 2279 01:53:18,790 --> 01:53:23,260 Řekl jsem něco jako řetězec s dostane dostat řetězec, protože get string-- 2280 01:53:23,260 --> 01:53:27,880 říkejme tento get.c-- get řetězec Samotný vrací řetězec, který mohu poté 2281 01:53:27,880 --> 01:53:32,050 použít, a říkají, ahoj, čárka, procent s, lomítko n, s. 2282 01:53:32,050 --> 01:53:35,660 >> Tak tohle je stejný příklad, ve skutečnosti, že jsme měli dříve. 2283 01:53:35,660 --> 01:53:37,920 Tak se vrátí řetězec hodnotu. 2284 01:53:37,920 --> 01:53:41,260 Ale před chvílí, tiskový řetězec nevrací hodnotu. 2285 01:53:41,260 --> 01:53:42,721 To prostě má vedlejší účinky. 2286 01:53:42,721 --> 01:53:44,220 Tak to je zásadní rozdíl. 2287 01:53:44,220 --> 01:53:46,710 Viděli jsme odlišný typy funkcí nyní, 2288 01:53:46,710 --> 01:53:49,490 z nichž některé se vrátili hodnot, z nichž některé nejsou. 2289 01:53:49,490 --> 01:53:51,890 Takže možná je to řetězec nebo int, nebo float. 2290 01:53:51,890 --> 01:53:53,480 Nebo možná je to jen neplatné. 2291 01:53:53,480 --> 01:53:55,710 >> A rozdíl je že tyto funkce, které 2292 01:53:55,710 --> 01:53:59,940 získat data a vrátit hodnotu jsou vlastně přinášet něco zpátky ke stolu, 2293 01:53:59,940 --> 01:54:01,110 abych tak řekl. 2294 01:54:01,110 --> 01:54:03,710 Tak pojďme do toho a podívejte se na jeden poslední sadu 2295 01:54:03,710 --> 01:54:09,129 příkladů, které dává smysl, nyní z jak bychom mohli skutečně abstraktní lepší, 2296 01:54:09,129 --> 01:54:11,670 a lepší a lepší, nebo více, a další a další, v pořadí 2297 01:54:11,670 --> 01:54:13,810 psát, nakonec, lepší kód. 2298 01:54:13,810 --> 01:54:16,860 Pojďme do toho, a v duchu Scratch, proveďte následující kroky. 2299 01:54:16,860 --> 01:54:21,700 >> Nech mě jít dopředu a zahrnují CS50.h a standardní IO.h. 2300 01:54:21,700 --> 01:54:24,010 Nech mě jít dopředu a dát Sám int, hlavní, neplatné. 2301 01:54:24,010 --> 01:54:27,380 A nech mě jít napřed, volat toto cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> A nech mě jít dopředu a jen jako Scratch, vytisknout kašel / N. 2303 01:54:35,510 --> 01:54:37,170 A já chci udělat třikrát. 2304 01:54:37,170 --> 01:54:39,670 Takže jsem samozřejmě jen tak zkopírovat a vložit třikrát. 2305 01:54:39,670 --> 01:54:46,440 Já jsem teď bude dělat kašel dot lomítko kašel. 2306 01:54:46,440 --> 01:54:50,120 Dejme sám trochu více prostoru Zde, Enter, kašel, kašel, kašel. 2307 01:54:50,120 --> 01:54:53,970 >> Tam je, samozřejmě, již nyní příležitost pro zlepšení. 2308 01:54:53,970 --> 01:54:55,679 Já jsem zkopírovat a vložit párkrát dnes. 2309 01:54:55,679 --> 01:54:58,261 Ale to bylo jen tak já ne muset zadat tolik znaků. 2310 01:54:58,261 --> 01:55:00,250 I přesto co změnil tyto řádky kódu jsou. 2311 01:55:00,250 --> 01:55:04,240 >> Tyto tři řádky jsou identické, který se cítí líní, a samozřejmě tak, 2312 01:55:04,240 --> 01:55:07,110 a pravděpodobně není správný přístup. 2313 01:55:07,110 --> 01:55:11,029 Takže s tím, co přísada můžeme zlepšit tento kód? 2314 01:55:11,029 --> 01:55:12,570 Nemáme zkopírovat a vložit kód. 2315 01:55:12,570 --> 01:55:15,070 >> A vskutku, kdykoli máte pocit, yourself kopírování a vkládání, 2316 01:55:15,070 --> 01:55:17,700 a to dokonce ke změně kódu, šance jsou tam lepší způsob. 2317 01:55:17,700 --> 01:55:19,470 A opravdu, tam je. 2318 01:55:19,470 --> 01:55:22,510 Nech mě jít dopředu a udělat pro smyčce, i když možná ne syntaxe 2319 01:55:22,510 --> 01:55:24,570 přijít ještě přirozeně. 2320 01:55:24,570 --> 01:55:29,494 >> Tyto klávesy stiskněte třikrát, jednoduše tím, že dělá following-- 2321 01:55:29,494 --> 01:55:31,160 a já náhodou vím z praxe. 2322 01:55:31,160 --> 01:55:32,810 Ale máme řadu příkladů teď. 2323 01:55:32,810 --> 01:55:34,950 A uvidíte on-line Další reference v klidu. 2324 01:55:34,950 --> 01:55:37,790 >> To je syntaxe na řádku 6, které podobně jako Scratch, který se opakuje 2325 01:55:37,790 --> 01:55:40,090 blok, opakujte následující třikrát. 2326 01:55:40,090 --> 01:55:41,340 Je to trochu magické teď. 2327 01:55:41,340 --> 01:55:43,050 Ale to dostane víc, a známější. 2328 01:55:43,050 --> 01:55:45,050 >> A to bude opakovat linka osm třikrát, 2329 01:55:45,050 --> 01:55:52,390 takže když jsem re-kompilaci make kašel, dot lomítko kašel, kašel, kašel, kašel. 2330 01:55:52,390 --> 01:55:54,030 To ještě pracuje stejným způsobem. 2331 01:55:54,030 --> 01:55:55,550 Takže to je všechno v pořádku a dobře. 2332 01:55:55,550 --> 01:55:58,200 Ale to není moc roztržitý. 2333 01:55:58,200 --> 01:55:59,371 >> Je to naprosto správné. 2334 01:55:59,371 --> 01:56:01,370 Ale je to pocit, jako by tam by mohlo být příležitostí, 2335 01:56:01,370 --> 01:56:03,750 jak ve světě Scratch, na druhem startu 2336 01:56:03,750 --> 01:56:07,530 sem přidat nějaké sémantiku, takže Nemám prostě něco pro smyčce, 2337 01:56:07,530 --> 01:56:09,867 a funkce, která říká: kašel, nebo se kašel. 2338 01:56:09,867 --> 01:56:10,450 Víš co? 2339 01:56:10,450 --> 01:56:12,620 Zkusím být málo chladnější než to, 2340 01:56:12,620 --> 01:56:16,090 a vlastně napsat funkci, která má některé nežádoucí účinky, které říkají, že kašel. 2341 01:56:16,090 --> 01:56:20,830 >> A to trvá žádný vstup, a nevrací žádnou hodnotu jako výstup. 2342 01:56:20,830 --> 01:56:22,680 Ale víte, co to dělá? 2343 01:56:22,680 --> 01:56:29,370 To dělá tohle-- printf, citát konec citátu, kašel. 2344 01:56:29,370 --> 01:56:32,380 >> A teď tady, jdu jít dopředu a pro int, 2345 01:56:32,380 --> 01:56:36,070 i dostane na nulu, i méně než tři, já a navíc. 2346 01:56:36,070 --> 01:56:39,770 Chystám se to udělat printf, která je pravděpodobně implementace nízká úroveň 2347 01:56:39,770 --> 01:56:40,270 detail. 2348 01:56:40,270 --> 01:56:41,353 Nezajímá mě, jak ke kašli. 2349 01:56:41,353 --> 01:56:43,240 Jen chci použít funkci kašel. 2350 01:56:43,240 --> 01:56:44,840 A já jsem prostě jít zavolat kašel. 2351 01:56:44,840 --> 01:56:46,204 >> Nyní si všimněte dichotomie. 2352 01:56:46,204 --> 01:56:49,370 Při volání funkce, pokud nemáte chtějí dát to vstupy, úplně v pohodě. 2353 01:56:49,370 --> 01:56:51,780 Prostě to otevřené závorka, v blízkém okolí paren, a máte hotovo. 2354 01:56:51,780 --> 01:56:56,271 >> Při definování funkce, nebo deklarovat prototyp funkci je, 2355 01:56:56,271 --> 01:56:58,770 pokud předem víte, že to není bude trvat žádné argumenty, 2356 01:56:58,770 --> 01:57:01,170 říkají neplatné tam těch závorkách. 2357 01:57:01,170 --> 01:57:05,660 A v tom je jisté, že vás nebude náhodně zneužít jej. 2358 01:57:05,660 --> 01:57:07,020 Nech mě jít dopředu a dělat kašel. 2359 01:57:07,020 --> 01:57:08,540 A samozřejmě jsem udělal chybu. 2360 01:57:08,540 --> 01:57:10,410 >> Sakra, tam je to implicitní prohlášení. 2361 01:57:10,410 --> 01:57:11,325 Ale to je v pořádku. 2362 01:57:11,325 --> 01:57:12,590 Je to snadné opravit. 2363 01:57:12,590 --> 01:57:18,240 Potřebuju jen prototyp výš v mém souboru, než jsem vlastně používat. 2364 01:57:18,240 --> 01:57:20,070 >> Takže teď mi dovolte kašel znovu, pěkný. 2365 01:57:20,070 --> 01:57:20,790 Teď to funguje. 2366 01:57:20,790 --> 01:57:22,930 Zkontrolujte, kašel, kašel, kašel, kašel. 2367 01:57:22,930 --> 01:57:25,930 Takže byste si mohli myslet, že jsme opravdu jen něco málo přes engineering tento problém. 2368 01:57:25,930 --> 01:57:26,763 A skutečně jsme. 2369 01:57:26,763 --> 01:57:28,870 To není dobrá kandidát programu 2370 01:57:28,870 --> 01:57:31,930 v okamžiku, kdy pro refactoring, a to, co je 2371 01:57:31,930 --> 01:57:35,645 volal hierarchický rozklad, kde budete mít nějaký kód, a poté 2372 01:57:35,645 --> 01:57:38,790 tak nějak faktor věci ven, tak jako připisovat více sémantiku k nim, 2373 01:57:38,790 --> 01:57:40,930 a opakovaně to nakonec z dlouhodobého hlediska. 2374 01:57:40,930 --> 01:57:43,490 Ale je to stavebním kamenem směrem sofistikovanější programy 2375 01:57:43,490 --> 01:57:45,600 že začneme psaní zanedlouho že 2376 01:57:45,600 --> 01:57:50,090 nám umožňuje mít slovní zásobu s nímž psát lepší kód. 2377 01:57:50,090 --> 01:57:52,920 A skutečně, podíváme se, jestli bychom nelze zobecnit to dál. 2378 01:57:52,920 --> 01:57:57,984 >> Zdá se, že trochu chromý, že já, hlavní, muset starat o této látat pro smyčce, 2379 01:57:57,984 --> 01:57:59,400 a volání kašel znovu a znovu. 2380 01:57:59,400 --> 01:58:03,050 Proč nemohu jen říct kašel, prosím kašel třikrát? 2381 01:58:03,050 --> 01:58:08,170 Jinými slovy, proč ne já jen dát impuls ke kašli a to udělat? 2382 01:58:08,170 --> 01:58:11,270 >> Proč nemohu jen říct, v Hlavním kašel třikrát. 2383 01:58:11,270 --> 01:58:13,150 A teď, to je druh kouzelné. 2384 01:58:13,150 --> 01:58:14,540 Je to tady velmi iterativní. 2385 01:58:14,540 --> 01:58:15,940 A je to opravdu malé dítě krok. 2386 01:58:15,940 --> 01:58:19,250 >> Ale právě schopnost říci linka osm, kašel třikrát, 2387 01:58:19,250 --> 01:58:20,730 je to tak mnohem čitelnější. 2388 01:58:20,730 --> 01:58:24,210 A navíc, nemám vědět nebo jedno, jak je implementován kašel. 2389 01:58:24,210 --> 01:58:26,460 A skutečně, později v Termín a závěrečných prací, 2390 01:58:26,460 --> 01:58:29,150 pokud budete řešit projekt s spolužák nebo dva spolužáci, 2391 01:58:29,150 --> 01:58:32,370 budete si uvědomit, že budete muset, nebo chcete, rozdělit práci. 2392 01:58:32,370 --> 01:58:34,650 >> A budete chtít rozhodnout v předstihu, kdo to bude dělat to, co, 2393 01:58:34,650 --> 01:58:35,483 a ve kterém kousky? 2394 01:58:35,483 --> 01:58:37,520 A nebylo by to bylo hezké pokud jste například, 2395 01:58:37,520 --> 01:58:40,100 postarat se o psaní Main, hotovo. 2396 01:58:40,100 --> 01:58:43,470 A váš spolubydlící, nebo Váš partnerské obecněji 2397 01:58:43,470 --> 01:58:45,230 se stará o provádění kašel. 2398 01:58:45,230 --> 01:58:49,540 >> A toto rozdělení, tito Stěny abstrakce, 2399 01:58:49,540 --> 01:58:52,310 nebo vrstvy abstrakce pokud budete, jsou super silné, 2400 01:58:52,310 --> 01:58:55,480 proto, že zejména pro větší, Složitější programy a systémy, 2401 01:58:55,480 --> 01:59:00,070 to umožňuje více lidem stavět věci dohromady, a nakonec 2402 01:59:00,070 --> 01:59:02,680 steh svou práci společně tímto způsobem. 2403 01:59:02,680 --> 01:59:05,332 Ale samozřejmě, my je třeba opravit teď kašel. 2404 01:59:05,332 --> 01:59:07,290 Musíme říci, kašel že hej, víš co? 2405 01:59:07,290 --> 01:59:11,230 Budeš muset vzít input-- tak není neplatný, ale int i teď. 2406 01:59:11,230 --> 01:59:15,170 Pojďme dopředu a dát do kašel int. i dostane na nulu. 2407 01:59:15,170 --> 01:59:16,890 >> i je menší než kolikrát. 2408 01:59:16,890 --> 01:59:18,550 Řekl jsem tři předtím. 2409 01:59:18,550 --> 01:59:20,420 Ale to není to, co chci. 2410 01:59:20,420 --> 01:59:25,520 Chci kašel, které mají být zobecněny na podporovat libovolný počet iterací. 2411 01:59:25,520 --> 01:59:28,800 >> Takže, opravdu, to je n, že chci, bez ohledu na uživatelské mi. 2412 01:59:28,800 --> 01:59:31,620 Teď můžu jít dopředu a říkat tisku kašel. 2413 01:59:31,620 --> 01:59:34,750 A bez ohledu na to, jaké číslo uživatel projde, 2414 01:59:34,750 --> 01:59:36,890 Budu se opakovat, že mnohokrát. 2415 01:59:36,890 --> 01:59:39,160 >> Takže na konci dne, Program je totožný. 2416 01:59:39,160 --> 01:59:42,820 Nevšimnout všechny tyto věci mohly by být i v jiném souboru. 2417 01:59:42,820 --> 01:59:45,620 Ve skutečnosti nevím at the moment, jak printf je implementována. 2418 01:59:45,620 --> 01:59:47,980 >> Nevím, v tuto chvíli, jak dostat řetězec, nebo získat int, nebo si plovák 2419 01:59:47,980 --> 01:59:48,646 jsou implementovány. 2420 01:59:48,646 --> 01:59:50,930 A já nechci je vidět na mé obrazovce. 2421 01:59:50,930 --> 01:59:55,320 Jak to je, začínám se zaměřit na můj program, ne ty funkce. 2422 01:59:55,320 --> 01:59:59,070 >> A tak, opravdu, jakmile vás spustit factoring kód, jako je tohle, 2423 01:59:59,070 --> 02:00:01,397 mohli bychom dokonce pohnout kašel do samostatného souboru? 2424 02:00:01,397 --> 02:00:02,730 Někdo jiný mohl realizovat. 2425 02:00:02,730 --> 02:00:06,810 A vy a váš program se stal velmi krásné a velmi čitelný, 2426 02:00:06,810 --> 02:00:10,830 pravděpodobně opravdu čtyři řádek programu právě tam. 2427 02:00:10,830 --> 02:00:13,510 >> Tak pojďme do toho teď a provést ještě jednu změnu. 2428 02:00:13,510 --> 02:00:16,180 Všimněte si, že můj prototyp se musí změnit up vrchol. 2429 02:00:16,180 --> 02:00:18,390 Dovolte mi tedy napravit tak Nechápu zařval. 2430 02:00:18,390 --> 02:00:22,580 >> Zkontrolujte, kašel, dovolte mi běžet kašel, jakmile více, stále dělá to samé. 2431 02:00:22,580 --> 02:00:26,010 Ale teď si všimněte, máme přísada pro jednu finální verzi. 2432 02:00:26,010 --> 02:00:26,940 Víš co? 2433 02:00:26,940 --> 02:00:29,040 Já nechci jen kašel, nutně. 2434 02:00:29,040 --> 02:00:30,802 Chci mít něco obecnější. 2435 02:00:30,802 --> 02:00:31,510 Tak víte co? 2436 02:00:31,510 --> 02:00:32,450 Chci to udělat. 2437 02:00:32,450 --> 02:00:37,140 Chci mít, podobně jako Scratch ano, vyjadřovat blok, ale ne jen 2438 02:00:37,140 --> 02:00:38,680 říct něco určitý počet opakování. 2439 02:00:38,680 --> 02:00:41,510 Chci, aby to říci velmi specifický řetězec. 2440 02:00:41,510 --> 02:00:43,850 A proto nemám chci, aby to jen říct kašel. 2441 02:00:43,850 --> 02:00:47,660 Chci, aby to říkat, co Řetězec předaný. 2442 02:00:47,660 --> 02:00:49,960 >> Takže si všimnout, jsem generalizované to tak, že nyní 2443 02:00:49,960 --> 02:00:53,110 dejme tomu cítí jako dobrého jména pro toto, jako Scratch, 2444 02:00:53,110 --> 02:00:55,530 přijímá dva argumenty, na rozdíl od nuly. 2445 02:00:55,530 --> 02:00:56,570 Jedním z nich je řetězec. 2446 02:00:56,570 --> 02:00:57,300 Jedním z nich je int. 2447 02:00:57,300 --> 02:00:58,130 >> A já je mohl přejít. 2448 02:00:58,130 --> 02:01:00,713 Jen jsem něco jako myšlenku říkají řetězec a teprve potom 2449 02:01:00,713 --> 02:01:01,940 kolikrát později. 2450 02:01:01,940 --> 02:01:03,970 Void to znamená, že stále nic nevrací. 2451 02:01:03,970 --> 02:01:06,428 To jsou jen vizuální stránka efekty, stejně jako u [? Jordan?] 2452 02:01:06,428 --> 02:01:08,240 slovní vedlejším účinkem křičí. 2453 02:01:08,240 --> 02:01:12,630 To ještě udělá něco n-krát, 0 až do, ale ne rovna n. 2454 02:01:12,630 --> 02:01:14,540 To znamená, že n celkem třikrát. 2455 02:01:14,540 --> 02:01:16,540 A pak už jen vytisknout co to je řetězec. 2456 02:01:16,540 --> 02:01:19,060 Takže jsem opravdu zobecnit tento řádek kódu. 2457 02:01:19,060 --> 02:01:22,460 Takže teď, jak mohu implementovat Funkce kašel? 2458 02:01:22,460 --> 02:01:25,520 >> Mohu dělat void kašel. 2459 02:01:25,520 --> 02:01:28,501 A můžu ještě trvat v tom, jak kolikrát budete chtít kašlat. 2460 02:01:28,501 --> 02:01:29,250 Ale víte co? 2461 02:01:29,250 --> 02:01:31,240 Nyní mohu punt říci. 2462 02:01:31,240 --> 02:01:36,540 >> Můžu zavolat říci s Slovo kašel, procházející v n. 2463 02:01:36,540 --> 02:01:40,410 A když chci také implementovat, jen tak pro zábavu, funkce kýchnutí, 2464 02:01:40,410 --> 02:01:42,290 Mohu kýchání určitý počet opakování. 2465 02:01:42,290 --> 02:01:47,300 A můžu mít znovupoužití n, protože Všimněte si, že m v tomto kontextu nebo rozsah 2466 02:01:47,300 --> 02:01:49,470 existuje pouze v této funkci. 2467 02:01:49,470 --> 02:01:52,767 >> A n v této souvislosti jen existuje v rámci této funkce zde. 2468 02:01:52,767 --> 02:01:54,600 Takže se vrátíme k Tyto otázky rozsahu. 2469 02:01:54,600 --> 02:02:01,160 A tady, já jen chtěl říct, achoo a potom n časy, středník. 2470 02:02:01,160 --> 02:02:04,340 >> A teď už stačí jen půjčit Tyto funkce podpisy tady. 2471 02:02:04,340 --> 02:02:06,290 Takže kašel je správná. 2472 02:02:06,290 --> 02:02:10,090 Void kýchnutí je nyní správná. 2473 02:02:10,090 --> 02:02:12,390 >> A já pořád stačí říct. 2474 02:02:12,390 --> 02:02:18,990 Tak jsem chtěl říct, řekněme řetězec s, int n, středník. 2475 02:02:18,990 --> 02:02:22,010 Tak jsem over-zkonstruoval sakra z tohoto programu. 2476 02:02:22,010 --> 02:02:23,760 >> A to není nutně znamenat, že se jedná 2477 02:02:23,760 --> 02:02:26,343 co byste měli dělat při psaní i ty nejjednodušší programů. 2478 02:02:26,343 --> 02:02:29,280 Udělejte něco, co je zjevně opravdu jednoduché, opravdu málo, 2479 02:02:29,280 --> 02:02:31,800 a re-implementovat ji s použitím příliš mnoho kódu. 2480 02:02:31,800 --> 02:02:34,560 Ale budete skutečně vidět, av čas ohlížet na tyto příklady, 2481 02:02:34,560 --> 02:02:38,610 a uvědomit si, ach, ty jsou kroky jsme se skutečně generalizovat, 2482 02:02:38,610 --> 02:02:40,797 faktor něco, až na konci dne 2483 02:02:40,797 --> 02:02:42,380 můj kód je vlastně docela rozumné. 2484 02:02:42,380 --> 02:02:45,960 Protože pokud chci kašel tři Časy pak kýchnout třikrát, 2485 02:02:45,960 --> 02:02:50,420 Já prostě jen znovu spustit to, Program dělat kašel a spusťte kašel. 2486 02:02:50,420 --> 02:02:53,620 A mám tři kašel a tři smrkání. 2487 02:02:53,620 --> 02:02:55,990 >> A tak to je základním paradigma, chcete-li, 2488 02:02:55,990 --> 02:03:00,110 za jak bychom mohli jít o ve skutečnosti provádění programu. 2489 02:03:00,110 --> 02:03:03,220 Ale pojďme se prostě vidět teď, co to je jsme dělali všechno této doby, 2490 02:03:03,220 --> 02:03:06,940 a co někteří z finálních kusů jsou za tímto jednoduchým příkazem. 2491 02:03:06,940 --> 02:03:09,620 Na konci dne, máme Byl pomocí Clang jako náš překladač. 2492 02:03:09,620 --> 02:03:11,494 Byli jsme psát zdroj kód, převedením 2493 02:03:11,494 --> 02:03:12,820 přes Clang do strojového kódu. 2494 02:03:12,820 --> 02:03:15,540 >> A my jsme používali jen Udělat s cílem usnadnit našim stisky kláves, takže 2495 02:03:15,540 --> 02:03:20,740 že nebudeme mít na paměti, ty zaklínání sama o sobě Clang. 2496 02:03:20,740 --> 02:03:22,640 Ale co je Ujistěte se vlastně dělá? 2497 02:03:22,640 --> 02:03:24,750 A, podle pořadí, co je Clang vlastně dělá? 2498 02:03:24,750 --> 02:03:28,790 >> Ukázalo se, že i když jsme zjednodušili dnešní diskuse tím, že říká, 2499 02:03:28,790 --> 02:03:33,090 budete mít zdrojový kód, předat jako vstup do kompilátor, který vám dává 2500 02:03:33,090 --> 02:03:35,750 Výkon stroje kód, dopadá tu 2501 02:03:35,750 --> 02:03:37,420 několik různých kroků tam uvnitř. 2502 02:03:37,420 --> 02:03:41,940 A kompilace se stane být deštník termín pro spoustu kroků. 2503 02:03:41,940 --> 02:03:43,970 Ale pojďme jen dráždit na to opravdu rychle. 2504 02:03:43,970 --> 02:03:48,070 >> Ukazuje se, že jsme dělali více věcí Pokaždé, když jsem spustit program, 2505 02:03:48,070 --> 02:03:50,990 nebo pokaždé, když jsem kompilaci programu dnes. 2506 02:03:50,990 --> 02:03:55,020 Tak se odkazuje na předzpracování tohle-- něco v programu C, 2507 02:03:55,020 --> 02:03:58,720 jak uvidíme znovu a znovu, který začíná tímto symbolem hash, 2508 02:03:58,720 --> 02:04:03,320 nebo hashtag symbol tady, znamená, je to direktiva preprocesoru. 2509 02:04:03,320 --> 02:04:07,330 To znamená, že v tomto případě, hej počítač, udělej něco s tímto souborem 2510 02:04:07,330 --> 02:04:09,430 než je skutečně sestavit svůj vlastní kód. 2511 02:04:09,430 --> 02:04:15,220 >> V tomto případě hash patří znamená, v podstatě, C je způsob, jak říct, 2512 02:04:15,220 --> 02:04:19,325 hej počítač, jdi obsah z CS50.h a vložit je zde. 2513 02:04:19,325 --> 02:04:22,170 Hej počítač, jít dostat Obsah standardního IO.h, 2514 02:04:22,170 --> 02:04:24,690 všude tam, kde to je na pevný disk, vložte jej sem. 2515 02:04:24,690 --> 02:04:27,390 Takže ty věci se dějí nejprve během předzpracování. 2516 02:04:27,390 --> 02:04:28,880 >> A Clang dělá vše za námi. 2517 02:04:28,880 --> 02:04:30,510 A to dělá tak zatraceně rychle, vy ani 2518 02:04:30,510 --> 02:04:32,000 zobrazit čtyři různé věci děje. 2519 02:04:32,000 --> 02:04:34,100 Ale to je první takový krok. 2520 02:04:34,100 --> 02:04:35,560 >> Co se vlastně bude dít dál? 2521 02:04:35,560 --> 02:04:38,320 No, další úředník krokem je kompilace. 2522 02:04:38,320 --> 02:04:40,385 A ukázalo se, že sestavování programu 2523 02:04:40,385 --> 02:04:44,060 technicky znamená jít od zdrojový kód, ty věci máme 2524 02:04:44,060 --> 02:04:47,890 píše dnes k něčemu volal shromáždění kód, něco 2525 02:04:47,890 --> 02:04:49,260 který vypadá trochu jinak. 2526 02:04:49,260 --> 02:04:51,050 >> A ve skutečnosti, můžeme vidět velmi rychle. 2527 02:04:51,050 --> 02:04:53,890 Nech mě skutečně jít do mého IDE. 2528 02:04:53,890 --> 02:04:58,050 Nech mě jít dopředu a otevřené hello.c, který je první program, se kterým jsme se 2529 02:04:58,050 --> 02:04:59,120 začala dnes. 2530 02:04:59,120 --> 02:05:04,130 A nech mě jít dopředu a spuštění zvonění A trochu jinak, Clang-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 který bude skutečně Dej mi jiný soubor hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> A budeme pravděpodobně nikdy znovu vidět tento druh kódu. 2533 02:05:10,330 --> 02:05:13,030 Pokud budete mít nižší úroveň Třída systémy jako CS61, 2534 02:05:13,030 --> 02:05:14,920 uvidíte mnohem víc tohoto druhu kódu. 2535 02:05:14,920 --> 02:05:17,020 Ale to je jazyk symbolických instrukcí. 2536 02:05:17,020 --> 02:05:22,050 To je X86 jazyk symbolických instrukcí že procesor, který je základem 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE skutečně rozumí. 2538 02:05:24,460 --> 02:05:27,060 >> A mystický, jak to dělá hele, to je něco, 2539 02:05:27,060 --> 02:05:29,180 Počítač rozumí docela dobře. 2540 02:05:29,180 --> 02:05:30,790 Sub q, to ​​je odečíst. 2541 02:05:30,790 --> 02:05:31,660 Je tu pohyby. 2542 02:05:31,660 --> 02:05:35,730 >> Je tu volání funkcí zde, x Výc, hnutí, doplněk, pop, 2543 02:05:35,730 --> 02:05:36,430 návrat. 2544 02:05:36,430 --> 02:05:38,850 Takže tam je nějaký velmi Návod k nízké úrovni 2545 02:05:38,850 --> 02:05:41,280 že CPU pochopili, že zmiňoval jsem se dříve. 2546 02:05:41,280 --> 02:05:43,100 To je to, co Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> K dispozici jsou vzory nuly a ty, které 2548 02:05:45,030 --> 02:05:51,800 mapovat tyto arcanely zní, ale poněkud dobře jmenován, instrukce, 2549 02:05:51,800 --> 02:05:52,780 abych tak řekl. 2550 02:05:52,780 --> 02:05:54,780 To je to, co se stane, když kompilaci kódu. 2551 02:05:54,780 --> 02:05:58,560 Získáte sestavu jazyk z toho, který 2552 02:05:58,560 --> 02:06:04,680 znamená, že třetí krok je sestavit že sestava kód do, nakonec, 2553 02:06:04,680 --> 02:06:09,080 strojní code-- nuly a jedničky, ne Text, který jsme právě viděli před chvílí. 2554 02:06:09,080 --> 02:06:13,370 >> Takže předzpracování to má najít a nahradit, a pár dalších věcí. 2555 02:06:13,370 --> 02:06:16,430 Kompilace trvá zdroj Kód z C, zdrojový kód 2556 02:06:16,430 --> 02:06:18,980 že jsme napsali, k montáži kód, který jsme právě podíval na. 2557 02:06:18,980 --> 02:06:22,170 Montáž trvá toto shromáždění Kód na nuly a ty 2558 02:06:22,170 --> 02:06:24,680 že procesor ve skutečnosti bude pochopit na konci dne. 2559 02:06:24,680 --> 02:06:27,630 A propojení je posledním krokem že se stane pro us-- znovu, 2560 02:06:27,630 --> 02:06:29,830 tak rychle, my ani notice--, který říká, 2561 02:06:29,830 --> 02:06:32,460 hej počítač, přijmou veškerá nuly a ty, které 2562 02:06:32,460 --> 02:06:36,750 vyplýval z kompilace Davida kód, a jeho hlavní funkcí je v tomto případě. 2563 02:06:36,750 --> 02:06:39,160 >> A hele počítač, jdi všechny nul a jedniček 2564 02:06:39,160 --> 02:06:42,180 že personál CS50 napsal uvnitř knihovny CS50. 2565 02:06:42,180 --> 02:06:43,440 Smíchejte ty se Davida. 2566 02:06:43,440 --> 02:06:46,648 A hele počítač, jdi všechny nuly a ty, které napsal někdo jiný let 2567 02:06:46,648 --> 02:06:47,470 Před pro printf. 2568 02:06:47,470 --> 02:06:49,880 A přidat ty, do Celá věc, takže máme 2569 02:06:49,880 --> 02:06:52,870 svý nul a jedniček, The nuly a jedničky CS50 personálu, 2570 02:06:52,870 --> 02:06:55,370 printf nuly a jedničky, a něco jiného užíváme. 2571 02:06:55,370 --> 02:07:00,410 >> Všichni si spojí dohromady do jednoho program s názvem, v tomto případě, ahoj. 2572 02:07:00,410 --> 02:07:03,141 Takže od nynějška budeme jen použít slovo kompilace. 2573 02:07:03,141 --> 02:07:06,390 A budeme brát za samozřejmost, že když říkáme, sestavit svůj program, to znamená, 2574 02:07:06,390 --> 02:07:08,849 hej provést předběžné zpracování, sestavování a propojování. 2575 02:07:08,849 --> 02:07:11,890 Ale je to vlastně šťavnaté některé věci tam děje pod kapotou. 2576 02:07:11,890 --> 02:07:13,723 A to zejména pokud zvědaví nějaký čas, 2577 02:07:13,723 --> 02:07:15,900 můžete začít strkat kolem sebe na této nižší úrovni. 2578 02:07:15,900 --> 02:07:19,660 Ale teď si uvědomit, že Mezi stánek s jídlem pro dnešek 2579 02:07:19,660 --> 02:07:23,420 jsou poměrně jednoduše začátek procesu, 2580 02:07:23,420 --> 02:07:26,700 jak se dostat pohodlně něco jako hello world. 2581 02:07:26,700 --> 02:07:29,575 Ve skutečnosti většina z toho, co jsme udělali dnes určitě nebude klesat v super rychle. 2582 02:07:29,575 --> 02:07:31,491 A to bude trvat nějaký čas, a někteří cvičí. 2583 02:07:31,491 --> 02:07:33,864 A šance jsou, budete řadit of chtějí zasáhnout klávesnice 2584 02:07:33,864 --> 02:07:34,780 nebo křičet na obrazovce. 2585 02:07:34,780 --> 02:07:35,880 A to vše je v pořádku. 2586 02:07:35,880 --> 02:07:38,320 I když, možná snažit se to v knihovně tolik. 2587 02:07:38,320 --> 02:07:40,820 >> A nakonec, budete být schopen i když pro začátek 2588 02:07:40,820 --> 02:07:44,580 vidění vzory, a to jak v dobrém kódu že jste napsali a chyb 2589 02:07:44,580 --> 02:07:45,370 že jste udělali. 2590 02:07:45,370 --> 02:07:48,965 A podobně jako proces stává TF nebo CA je jako, 2591 02:07:48,965 --> 02:07:51,590 začnete cítit lépe a lépe při pohledu na tyto vzory, 2592 02:07:51,590 --> 02:07:53,774 a právě řešení vašich vlastní problémy nakonec. 2593 02:07:53,774 --> 02:07:56,940 Do té doby, tam bude spousta z nás půjčovat ho podpořili, a dostanete 2594 02:07:56,940 --> 02:07:57,481 přes to. 2595 02:07:57,481 --> 02:07:59,450 A v write-up pro všechny problémy 2596 02:07:59,450 --> 02:08:01,366 budete provedeni všechny příkazy 2597 02:08:01,366 --> 02:08:05,330 že jsem jistě znají z hodně praxe teď, 2598 02:08:05,330 --> 02:08:07,380 ale mohl letět nad hlavou prozatím. 2599 02:08:07,380 --> 02:08:08,580 A to je naprosto v pořádku. 2600 02:08:08,580 --> 02:08:11,230 >> Ale nakonec, budete začít vidět vzory objevit. 2601 02:08:11,230 --> 02:08:14,260 A jakmile se dostat přes všechny hloupé detaily, jako jsou závorky, 2602 02:08:14,260 --> 02:08:16,710 a složené závorky a středníky, a věci, upřímně řečeno, 2603 02:08:16,710 --> 02:08:19,360 že není vůbec intelektuálně zajímavé. 2604 02:08:19,360 --> 02:08:22,690 A není cílem užívat jakýkoliv úvodní třídu. 2605 02:08:22,690 --> 02:08:24,410 Jsou to myšlenky, které jdou na hmotu. 2606 02:08:24,410 --> 02:08:26,659 >> To je smyčky, a podmínky a funkce, 2607 02:08:26,659 --> 02:08:30,552 a silněji abstrakce, a factoring kódu, 2608 02:08:30,552 --> 02:08:33,510 a dobrý design a dobrou styl, a nakonec správnost 2609 02:08:33,510 --> 02:08:37,330 z kódu, který je v konečném důsledku bude záležet nejvíce. 2610 02:08:37,330 --> 02:08:40,925 Takže příští týden, budeme brát tyto myšlenky, které jsme poprvé viděli v Scratch 2611 02:08:40,925 --> 02:08:42,800 a nyní přeloženy k C. A začneme 2612 02:08:42,800 --> 02:08:45,740 představit první z Samozřejmě je skutečný svět domén. 2613 02:08:45,740 --> 02:08:50,140 >> Budeme se soustředit na světě bezpečnosti, a konkrétněji kryptografie, 2614 02:08:50,140 --> 02:08:51,980 umění zakódování informace. 2615 02:08:51,980 --> 02:08:54,000 A mezi prvními Problémy vy sám 2616 02:08:54,000 --> 02:08:56,840 dostane psát mimo hrát s některými z syntaxe 2617 02:08:56,840 --> 02:08:59,880 a řešit některé logické Problémy, nakonec netrvalo dlouho, 2618 02:08:59,880 --> 02:09:03,960 Je skutečně zakódování, nebo šifrování, a nakonec dešifrování informací. 2619 02:09:03,960 --> 02:09:06,470 A všechno, co jsme udělali Dnes se poměrně nízký 2620 02:09:06,470 --> 02:09:09,190 Hladina se jen tak dovolit nám, aby jeden a jeden, 2621 02:09:09,190 --> 02:09:13,550 a další krok směrem k výše psaní přesto nejzajímavější kód. 2622 02:09:13,550 --> 02:09:15,050 >> Takže o tom až příští týden. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [VIDEOPŘEHRÁVÁNÍ] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> Co mi můžete říct o v poslední době jste ho viděl? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 Co můžu říct, opravdu? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Myslím, že to bylo jako každá jiná pre-produkce zkouška, 2631 02:09:35,340 --> 02:09:40,510 s výjimkou tam bylo něco, řekl na samém konci, který uvízl se mnou. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> Tohle byl CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -To Střih všichni, skvělou práci na zkoušku. 2636 02:09:52,190 --> 02:09:53,070 >> -To Oběd? 2637 02:09:53,070 --> 02:09:54,986 >> Jo, vy a já mohu chytit sendvič v trochu. 2638 02:09:54,986 --> 02:09:58,380 Nech mě vyslechnout s David opravdu rychle. 2639 02:09:58,380 --> 02:09:59,160 David? 2640 02:09:59,160 --> 02:10:01,260 David? 2641 02:10:01,260 --> 02:10:03,110 >> [END PŘEHRÁVÁNÍ]