1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [Přehrávání hudby] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 David J. Malan: Dobře. 5 00:00:12,230 --> 00:00:16,440 To je CS50, a to je konec týdne 2. 6 00:00:16,440 --> 00:00:18,480 Takže dnes, jdeme pokračovat v našem vzhled 7 00:00:18,480 --> 00:00:21,150 na to, jak reprezentovat věci pod hood-- vzdaluje 8 00:00:21,150 --> 00:00:23,520 z čísel jako čísel a plovoucí desetinnou čárkou hodnoty 9 00:00:23,520 --> 00:00:26,810 a zaměřit se na řetězce a nakonec další zajímavé programy. 10 00:00:26,810 --> 00:00:30,140 Ale budeme se také podívat na pár domény specifické problems-- 11 00:00:30,140 --> 00:00:33,620 z nichž první bude být zahrnující kryptografii, 12 00:00:33,620 --> 00:00:36,570 umění kódování informací, ve které vidíte výše zde 13 00:00:36,570 --> 00:00:41,480 je obraz Radio Orphan Annie Tajemství dekodér prsten z minulosti. 14 00:00:41,480 --> 00:00:46,490 >> To je vlastně velmi primitivní forma a dítě-přátelský forma cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 přičemž tento kroužek má dvě disks-- jeden vnitřní a jeden vnější. 16 00:00:50,590 --> 00:00:54,740 A otočením jednoho z těch, můžete v podstatě se seřadí písmena jako a 17 00:00:54,740 --> 00:00:59,520 až Z s jinými písmeny jako B prostřednictvím A. Jinými slovy, 18 00:00:59,520 --> 00:01:03,730 můžete doslova otočit abecedu, tak přijít s mapováním od 19 00:01:03,730 --> 00:01:07,820 dopisy dopisy tak, že pokud chtěl poslat tajnou zprávu 20 00:01:07,820 --> 00:01:11,820 s někým, jako je Annie, můžete napsat se svou zprávu a otočte 21 00:01:11,820 --> 00:01:15,370 dopisy, přičemž, pokud máte na mysli říkat "A", místo toho řekl "B" 22 00:01:15,370 --> 00:01:17,280 Chcete tím říct, "B" místo toho říkají "C" - 23 00:01:17,280 --> 00:01:20,240 nebo něco trochu chytřejší než to-- a pak, nakonec, 24 00:01:20,240 --> 00:01:24,630 tak dlouho, dokud Anna má tento dekodér prsten, umí dekódovat zprávu. 25 00:01:24,630 --> 00:01:28,540 Nyní můžete připomenout, ve skutečnosti, že tato byl použit ve velmi známého filmu, který 26 00:01:28,540 --> 00:01:31,140 hraje ad nauseum během Vánoce. 27 00:01:31,140 --> 00:01:32,650 Pojďme se podívat zde. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie PARKER: "Ať už je to známo, že vše v souhrnu 30 00:01:37,210 --> 00:01:41,000 že Ralph Parker je jmenován člen Little Orphan Annie Secret 31 00:01:41,000 --> 00:01:44,860 Circle a je oprávněn ke všem vyznamenání a výhody dochází k nim. " 32 00:01:44,860 --> 00:01:47,410 >> Ralphie PARKER (vyprávění): Podepsáno Malý sirotek Annie. 33 00:01:47,410 --> 00:01:50,070 Spolupodepsat, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 Inkoustem. 35 00:01:51,490 --> 00:01:55,494 Vyznamenání a výhody, Již ve věku devíti let. 36 00:01:55,494 --> 00:01:57,402 >> [Přehrávání hudby] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO klábosení] 38 00:02:00,470 --> 00:02:01,470 Ralphie PARKER: Pojď. 39 00:02:01,470 --> 00:02:02,344 Pojďme na to. 40 00:02:02,344 --> 00:02:06,029 Nepotřebuji All That Jazz o pašeráků a pirátů. 41 00:02:06,029 --> 00:02:08,820 Rozhlasový hlasatel: Poslouchejte zítra noc závěrečné dobrodružství 42 00:02:08,820 --> 00:02:11,060 The Black pirátské lodi. 43 00:02:11,060 --> 00:02:14,740 Nyní je čas pro Annie Tajná zpráva pro vás členy 44 00:02:14,740 --> 00:02:17,110 z The Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Nezapomeňte děti pouze členové Annie Secret Circle 46 00:02:20,700 --> 00:02:23,270 umí dekódovat Annie tajnou zprávu. 47 00:02:23,270 --> 00:02:27,270 >> Pamatujte si, že Annie je závislá na vás. 48 00:02:27,270 --> 00:02:30,060 Nastavte si piny pro B-2. 49 00:02:30,060 --> 00:02:34,004 Zde je message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie PARKER (vyprávění): I jsem v první tajné schůzce. 51 00:02:36,503 --> 00:02:40,041 Rozhlasový hlasatel: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie PARKER (vyprávění): Oh, Pierre byl ve skvělé hlasové večer. 53 00:02:42,790 --> 00:02:46,110 Mohl bych říct, že dnes je Zpráva byla opravdu důležité. 54 00:02:46,110 --> 00:02:47,930 >> Rozhlasový hlasatel: --3, 25. 55 00:02:47,930 --> 00:02:49,940 To je zpráva od Annie sama. 56 00:02:49,940 --> 00:02:52,182 Pamatujte si, že nikomu to neříkejte. 57 00:02:52,182 --> 00:02:55,077 >> [Lapal po dechu] 58 00:02:55,077 --> 00:02:57,285 Ralphie PARKER (vyprávění): Devadesát vteřin později jsem 59 00:02:57,285 --> 00:03:00,090 v jediné místnosti v Dům, ve kterém chlapec z devíti 60 00:03:00,090 --> 00:03:04,380 mohl sedět v soukromí a dekódovat. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B" 63 00:03:05,680 --> 00:03:06,524 >> [Zasměje se] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie PARKER (vyprávění): Šel jsem dál. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 První slovo je "být." 67 00:03:11,641 --> 00:03:12,140 Ano! 68 00:03:12,140 --> 00:03:14,293 Přicházelo to nyní snazší. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Zasměje se] 71 00:03:16,225 --> 00:03:18,157 >> Randy PARKER: Ale no tak, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Musím jít! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie PARKER: Hned jsem dole, mami. 74 00:03:21,538 --> 00:03:22,504 Gee svištět. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Ujistěte se, že na. "" Ujistěte se, že "Co je? 77 00:03:31,220 --> 00:03:33,981 Jaký byl malý sirotek Annie snaží říct? "Ujistěte se, že" to, co? 78 00:03:33,981 --> 00:03:35,522 MATKA: Ralphie, Randy má jít. 79 00:03:35,522 --> 00:03:36,735 Mohl byste, prosím ven? 80 00:03:36,735 --> 00:03:38,190 >> Ralphie PARKER: Dobře, mami! 81 00:03:38,190 --> 00:03:39,787 Hned jsem se! 82 00:03:39,787 --> 00:03:41,995 Ralphie PARKER (vyprávění): Byl jsem stále blíž. 83 00:03:41,995 --> 00:03:43,370 Napětí bylo hrozné. 84 00:03:43,370 --> 00:03:44,794 Co to bylo? 85 00:03:44,794 --> 00:03:47,656 Osud planety může viset na vlásku. 86 00:03:47,656 --> 00:03:50,518 >> MATKA: Ralphie, Randy musí jít! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie PARKER: Budu hned se, proboha! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (Vyprávění): Už jsme skoro tam! 89 00:03:55,343 --> 00:03:56,520 Prsty se mi letěl! 90 00:03:56,520 --> 00:03:58,500 Moje mysl byla ocelová past. 91 00:03:58,500 --> 00:03:59,850 Každý pór vibroval. 92 00:03:59,850 --> 00:04:01,806 Bylo skoro jasno! 93 00:04:01,806 --> 00:04:02,773 Ano! 94 00:04:02,773 --> 00:04:03,273 Ano! 95 00:04:03,273 --> 00:04:03,773 Ano! 96 00:04:03,773 --> 00:04:04,740 Ano! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie PARKER: "Ujistěte se, že pít svou Ovaltine. " 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Mizerný reklamu? 101 00:04:17,539 --> 00:04:19,439 >> [Přehrávání hudby] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie PARKER: Ten zkurvysyn. 103 00:04:21,724 --> 00:04:23,460 >> [Smích] 104 00:04:23,460 --> 00:04:27,070 >> David J. Malan: Takže to je pak letmý pohled na to, co kryptografie 105 00:04:27,070 --> 00:04:29,880 může být pro tohle-- A pít z minulosti. 106 00:04:29,880 --> 00:04:30,900 Tak rychlé oznámení. 107 00:04:30,900 --> 00:04:33,410 Jste-li bez této Pátek v 13:15 a bylo by 108 00:04:33,410 --> 00:04:36,610 se k nám připojit na CS50 oběd, hlava na této adrese zde. 109 00:04:36,610 --> 00:04:38,080 Kdo dřív přijde, ten dřív mele jako obvykle. 110 00:04:38,080 --> 00:04:41,840 Ale postupem času, budeme se ujistěte, že většina někdo, kdo by se chtěli zúčastnit 111 00:04:41,840 --> 00:04:43,640 může naplánovat-moudrý. 112 00:04:43,640 --> 00:04:45,170 >> Takže řetězce. 113 00:04:45,170 --> 00:04:47,940 Máme Zamyla-- koho jste se setkali s největší pravděpodobností 114 00:04:47,940 --> 00:04:50,750 v Zadání problému 1-- jehož název uveden takto. 115 00:04:50,750 --> 00:04:53,570 A předpokládám, že jste zadali své jméno do počítačového programu, který je 116 00:04:53,570 --> 00:04:55,710 používat něco jako getString. 117 00:04:55,710 --> 00:04:57,890 Aby bylo možné načíst ty stisky kláves, jak 118 00:04:57,890 --> 00:05:01,620 máme jít o zastupování řetězec, slovo, odstavec, 119 00:05:01,620 --> 00:05:03,960 nebo více písmen, jako jsou tyto tady? 120 00:05:03,960 --> 00:05:06,790 >> Mluvili jsme minule o celá čísla a problémy 121 00:05:06,790 --> 00:05:09,960 které vzniknou s přetečení celého čísla a plovoucí desetinnou čárkou hodnoty 122 00:05:09,960 --> 00:05:12,190 a problémy, které vznikají v rámci přesnosti. 123 00:05:12,190 --> 00:05:16,080 S řetězci jsme alespoň mají trochu větší flexibilitu 124 00:05:16,080 --> 00:05:17,970 protože strings-- jen v reálném svet 125 00:05:17,970 --> 00:05:19,790 může být docela libovolné délky. 126 00:05:19,790 --> 00:05:21,055 Pěkně řečeno, docela dlouho. 127 00:05:21,055 --> 00:05:23,680 Ale i pak, budeme zjistil, že počítače mohou někdy 128 00:05:23,680 --> 00:05:27,200 spustit z paměti, a dokonce ani uložit dost velký řetězec. 129 00:05:27,200 --> 00:05:30,840 >> Ale teď, pojďme začít vizualizovat řetězec jako něco, co v těchto krabicích 130 00:05:30,840 --> 00:05:31,340 zde. 131 00:05:31,340 --> 00:05:36,410 Takže šest takové krabičky, z nichž každá představuje znak nebo znak "." 132 00:05:36,410 --> 00:05:40,646 Takže připomenout, že "char" - c-h-a-r-- je jeden z vestavěných datových typů v jazyce C. 133 00:05:40,646 --> 00:05:43,520 A co je příjemné je, že můžete použít že druh jako stavební kámen, 134 00:05:43,520 --> 00:05:47,880 skládačky, chcete-li, k vytvoření Větší typ dat, které budeme i nadále 135 00:05:47,880 --> 00:05:49,410 volání "řetězec". 136 00:05:49,410 --> 00:05:53,650 >> A teď, co je užitečné, o myšlení o věcech, jako jsou řetězce tímto způsobem? 137 00:05:53,650 --> 00:05:57,720 No, ukázalo se, že můžeme skutečně využít tuto strukturu 138 00:05:57,720 --> 00:06:01,420 skutečně přístup k jednotlivé znaky v docela přímočaře. 139 00:06:01,420 --> 00:06:04,099 Chystám se jít dopředu a vytvořit Soubor s názvem "stringzero.c" 140 00:06:04,099 --> 00:06:05,765 ale můžete říkat, co chcete. 141 00:06:05,765 --> 00:06:08,500 A na internetových stránkách kursu je Již tento příklad předem, 142 00:06:08,500 --> 00:06:10,430 takže se nemusíte Typ všechno ven. 143 00:06:10,430 --> 00:06:13,820 >> A budu pokračovat a nejprve udělat int main neplatné. 144 00:06:13,820 --> 00:06:15,980 A během několika dnů, začneme dráždit sebe 145 00:06:15,980 --> 00:06:19,070 co void je tady, proč je to int vedle hlavní, a tak dále. 146 00:06:19,070 --> 00:06:21,180 Ale teď, pojďme pokračovat kopírovat vložit, že. 147 00:06:21,180 --> 00:06:23,455 >> Jdu vyhlásit řetězec s názvem s. 148 00:06:23,455 --> 00:06:26,920 A já se vrátit z GetString za jakýchkoliv uživatel zadá. 149 00:06:26,920 --> 00:06:29,170 To bude jednoduchý Program, žádné pokyny, 150 00:06:29,170 --> 00:06:31,336 Já jen tak naslepo Předpokládáme, že uživatel zná 151 00:06:31,336 --> 00:06:32,600 co dělat, aby to jednoduché. 152 00:06:32,600 --> 00:06:34,220 >> A teď budu mít pro smyčce. 153 00:06:34,220 --> 00:06:37,450 A uvnitř mé pro smyčce jsem bude mít int i dostane na nulu. 154 00:06:37,450 --> 00:06:40,660 A i je, opět, jen konvence, proměnná index pro počítání, 155 00:06:40,660 --> 00:06:42,350 ale já jsem mohl zavolat to, co chci. 156 00:06:42,350 --> 00:06:46,275 Chystám se udělat i méně than-- dobře Zamyla jméno je šest písmen dlouhé. 157 00:06:46,275 --> 00:06:48,150 Takže jdu tvrdě Kód, který tam teď. 158 00:06:48,150 --> 00:06:49,730 >> A pak jsem ++. 159 00:06:49,730 --> 00:06:53,190 A teď uvnitř těchto kudrnaté šle budu dělat printf, 160 00:06:53,190 --> 00:06:55,460 a chci vytisknout jednu znaků najednou. 161 00:06:55,460 --> 00:06:58,227 Takže budu používat% c pro snad poprvé. 162 00:06:58,227 --> 00:07:00,560 A pak chci tisknout každý znak na samostatném řádku. 163 00:07:00,560 --> 00:07:02,550 Tak jdu dát málo zpětné lomítko n tam. 164 00:07:02,550 --> 00:07:03,640 Close quote. 165 00:07:03,640 --> 00:07:06,250 >> A teď chci udělat něco tady. 166 00:07:06,250 --> 00:07:10,610 Chci vytisknout konkrétní písmeno v řetězci, 167 00:07:10,610 --> 00:07:13,670 s, jak jsem iterace z na do šesti nulu. 168 00:07:13,670 --> 00:07:17,150 Jinými slovy, chci vytisknout i'th charakter s. 169 00:07:17,150 --> 00:07:18,420 Nyní, jak to udělat? 170 00:07:18,420 --> 00:07:21,550 >> Tak podobně jako krabice v toto zastoupení zde 171 00:07:21,550 --> 00:07:25,560 druh, vykouzlit představu o boxu písmena, můžete to udělat podobně 172 00:07:25,560 --> 00:07:32,630 syntakticky v C jednoduchým zadáním, Chci vytisknout s'S i'th charakteru. 173 00:07:32,630 --> 00:07:35,640 Pomocí hranatých závorek na klávesnici počítače 174 00:07:35,640 --> 00:07:38,910 že na klávesnici a USA jsou obvykle nad vaší klávesu Enter. 175 00:07:38,910 --> 00:07:42,630 >> Takže to není úplně v pořádku přesto, jak jste si možná všimli. 176 00:07:42,630 --> 00:07:44,780 Ale budu druhu slepě kupředu zde. 177 00:07:44,780 --> 00:07:47,020 A já budu dělat, aby řetězec 0. 178 00:07:47,020 --> 00:07:50,860 Ale než jsem to, uvidíme, jestli budeme nemůže předvídat některé běžné chyby. 179 00:07:50,860 --> 00:07:52,844 To bude sestavujeme? 180 00:07:52,844 --> 00:07:54,510 Ne, mi chybí spoustu věcí. 181 00:07:54,510 --> 00:07:55,280 Knihovny jsem slyšel. 182 00:07:55,280 --> 00:07:58,480 >> Tak který hlavičkové soubory já bych mohl chtít přidat sem? 183 00:07:58,480 --> 00:07:59,205 Jo. 184 00:07:59,205 --> 00:08:01,580 >> Diváků: Potřebujete Standardní I / O [neslyšitelné] 185 00:08:01,580 --> 00:08:02,663 >> David J. Malan: Výborně. 186 00:08:02,663 --> 00:08:06,060 Tak jsem třeba Standard I / O. Za to, co Účelem nechci Standard I / O? 187 00:08:06,060 --> 00:08:06,670 Pro printf. 188 00:08:06,670 --> 00:08:09,220 Takže jsou stdio.h. 189 00:08:09,220 --> 00:08:13,490 A také navrhnout, aby mi patří knihovna CS50 jakého důvodu? 190 00:08:13,490 --> 00:08:14,650 Chcete-li mít řetězce. 191 00:08:14,650 --> 00:08:17,780 Tak uvidíme, co Knihovna CS50 je dělá 192 00:08:17,780 --> 00:08:19,260 vytvořit tento pojem řetězce. 193 00:08:19,260 --> 00:08:21,930 Ale teď, stačí přemýšlet to jako skutečný datový typ. 194 00:08:21,930 --> 00:08:23,596 >> Tak, že se zdá být trochu vyčistit. 195 00:08:23,596 --> 00:08:27,060 A teď budu pokračovat a opravdu to, aby řetězec 0. 196 00:08:27,060 --> 00:08:27,700 Sestaveno. 197 00:08:27,700 --> 00:08:28,370 Tak to je dobře. 198 00:08:28,370 --> 00:08:32,799 Takže ./string0 mi dovolte přiblížit, takže můžeme viz blíže, co se děje. 199 00:08:32,799 --> 00:08:33,850 Enter. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-vstoupit. 201 00:08:37,789 --> 00:08:39,440 A my jsme vytisknout na Zamyla jménem. 202 00:08:39,440 --> 00:08:40,409 >> Tak to je docela dobrý. 203 00:08:40,409 --> 00:08:43,220 Takže teď pojďme do toho a znovu spustit tento program, 204 00:08:43,220 --> 00:08:45,659 a zadejte z Daven je celé jméno. 205 00:08:45,659 --> 00:08:46,450 Překvapení, překvapení. 206 00:08:46,450 --> 00:08:48,021 Enter. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Nemáme vytisknout Daven je plné křestní jméno správně. 209 00:08:51,750 --> 00:08:54,250 Právě toto by mělo být zřejmé, v Retrospect protože to, co, 210 00:08:54,250 --> 00:08:57,010 druh rozhodnutí hloupý návrh? 211 00:08:57,010 --> 00:08:59,590 >> Jo, tvrdě jsem kódované šest uvnitř mé smyčky for. 212 00:08:59,590 --> 00:09:01,610 Teď jsem to udělal jen proto, že Věděl jsem, že Zamyla jméno 213 00:09:01,610 --> 00:09:02,776 to bude šest písmen. 214 00:09:02,776 --> 00:09:04,720 Ale určitě to není obecné řešení. 215 00:09:04,720 --> 00:09:07,720 Tak to dopadá můžeme dynamicky zjistit délku řetězce 216 00:09:07,720 --> 00:09:10,440 voláním funkce nazývá strlen. 217 00:09:10,440 --> 00:09:12,840 >> Opět platí, že úmyslně stručně pojmenovaný právě 218 00:09:12,840 --> 00:09:14,450 aby bylo pohodlnější psaní. 219 00:09:14,450 --> 00:09:17,170 Ale to je synonymem pro získání délku řetězce. 220 00:09:17,170 --> 00:09:23,190 Chystám se jít zpátky do svého terminálu okno a znovu spustit kompilátor. 221 00:09:23,190 --> 00:09:24,170 Ale je to na mě ječet. 222 00:09:24,170 --> 00:09:29,130 Implicitně deklarovat funkci knihovny strlen s typem unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Ztratil jsem se. 224 00:09:29,780 --> 00:09:30,590 Úplně. 225 00:09:30,590 --> 00:09:32,940 >> Tak, jak je to zejména vaše oči začnou pohasly 226 00:09:32,940 --> 00:09:36,000 se chybové zprávy, jako je tento, zaměření upřímně na prvních pár slov. 227 00:09:36,000 --> 00:09:38,590 Víme, že problém je v linka 8, jak je zde uvedeno. 228 00:09:38,590 --> 00:09:40,500 A to je v řetězci-0.c. 229 00:09:40,500 --> 00:09:43,580 Implicitně vyhlášení knihovní funkce strlen. 230 00:09:43,580 --> 00:09:47,000 Tak, že se obecně bude být vzor chybových zpráv. 231 00:09:47,000 --> 00:09:49,190 Implicitně prohlásil něco. 232 00:09:49,190 --> 00:09:53,250 >> Takže ve zkratce, co se zdálo, že jsem se učinil s ohledem na lince 8, zde. 233 00:09:53,250 --> 00:09:56,880 Co by mohlo být řešením ještě pokud jste nikdy nepoužívali strlen sebe? 234 00:09:56,880 --> 00:09:58,907 >> Diváků: Část jinou knihovnou? 235 00:09:58,907 --> 00:10:00,740 David J. Malan: Part z jiného knihovny. 236 00:10:00,740 --> 00:10:02,400 Tak to je deklarováno, abych tak řekl. 237 00:10:02,400 --> 00:10:07,510 To je uvedeno v nějakém souboru jiné než stdio.h a CS50.h. 238 00:10:07,510 --> 00:10:09,179 Tak kde je to definováno? 239 00:10:09,179 --> 00:10:12,220 Chcete-li být upřímný, buď máte jen že to z vrcholu vaší hlavy, 240 00:10:12,220 --> 00:10:13,640 nebo si to na Googlu a zjistit. 241 00:10:13,640 --> 00:10:18,150 Nebo vím, jsem otevřel v CS50 spotřebič terminálový program, který 242 00:10:18,150 --> 00:10:22,200 je prostě velký, verze plná obrazovka co je ve spodní části okna gedit je. 243 00:10:22,200 --> 00:10:24,970 >> A ukázalo se, že je tu Podobně stručný příkaz s názvem 244 00:10:24,970 --> 00:10:29,280 muž pro ruční, kde když zadáte název funkce a stiskněte klávesu Enter, 245 00:10:29,280 --> 00:10:32,240 dostanete zpět celkem Arcane dokumentace. 246 00:10:32,240 --> 00:10:35,299 Je to text, který obecně vypadá něco takového. 247 00:10:35,299 --> 00:10:37,090 Je to trochu ohromující na první pohled. 248 00:10:37,090 --> 00:10:39,048 Ale upřímně řečeno, já budu nechat oči pohasly 249 00:10:39,048 --> 00:10:41,930 a pouze se zaměřují na straně Starám se o pro tuto chvíli. 250 00:10:41,930 --> 00:10:42,780 >> Což je to. 251 00:10:42,780 --> 00:10:45,470 Který vypadá jako strukturálně něco, co jsem obeznámen se. 252 00:10:45,470 --> 00:10:48,080 Opravdu manuálové stránky, tak mluvit, vám řekne, 253 00:10:48,080 --> 00:10:51,590 v čem záhlaví souboru funkci jako strlen je definován. 254 00:10:51,590 --> 00:10:54,170 Takže jsem jít zpátky do gedit. 255 00:10:54,170 --> 00:10:59,070 A já jdu do toho a přidat sem # include 256 00:10:59,070 --> 00:11:00,480 a soubor uložte. 257 00:11:00,480 --> 00:11:04,300 >> Chystám se vyčistit obrazovku Control L Pokud jste přemýšlel. 258 00:11:04,300 --> 00:11:08,210 A já se znovu spustit make string.0 sestavuje tentokrát. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Zdálo se, že pracovat Nech mě jít dopředu a spusťte jej Davenport. 261 00:11:15,020 --> 00:11:15,860 Enter. 262 00:11:15,860 --> 00:11:17,730 A to také zdálo, že funguje. 263 00:11:17,730 --> 00:11:21,220 >> Takže, co můžeme udělat o něco lepší, než to, když můžeme začít uklizený věci 264 00:11:21,220 --> 00:11:23,257 se jen trochu. 265 00:11:23,257 --> 00:11:25,590 A já vlastně představit jednu věc nyní. 266 00:11:25,590 --> 00:11:28,930 Chystám se jít dopředu a uložit to v jiném souboru. 267 00:11:28,930 --> 00:11:31,770 A já jdu volat Tento soubor string1.c jen 268 00:11:31,770 --> 00:11:34,620 být v souladu s kódem budete moci najít na internetu. 269 00:11:34,620 --> 00:11:37,050 >> A pojďme zaměřit se na přesně stejný kód. 270 00:11:37,050 --> 00:11:39,000 Ukazuje se, že jsem byl druh odběru 271 00:11:39,000 --> 00:11:42,600 za samozřejmost to, že mého notebooku, a naopak, CS50 spotřebiče 272 00:11:42,600 --> 00:11:47,450 má spoustu paměti, hodně RAM, hodně bajtů prostoru 273 00:11:47,450 --> 00:11:48,920 , ve kterém mohu ukládat řetězce. 274 00:11:48,920 --> 00:11:53,560 >> Ale realita, pokud jsem napsal dlouhý dost a dost kláves, 275 00:11:53,560 --> 00:11:56,170 Mohl bych v typu teorie ve více znaků 276 00:11:56,170 --> 00:11:58,830 než můj počítač fyzicky má paměť pro. 277 00:11:58,830 --> 00:11:59,830 A to je problematické. 278 00:11:59,830 --> 00:12:03,050 Stejně jako int může pouze Počet tak vysoká, teoreticky, 279 00:12:03,050 --> 00:12:06,600 můžete nacpat jen tolik znaků do paměti RAM, nebo Random počítače 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> Tak jsem se lépe předvídat tento problém, dokonce 282 00:12:11,140 --> 00:12:13,660 i když to může být vzácné roh případ, abych tak řekl. 283 00:12:13,660 --> 00:12:15,670 Nestává tak často, by se mohlo stát. 284 00:12:15,670 --> 00:12:18,815 A pokud se to stane, a vůbec se mi nelíbí předvídat a program pro něj, 285 00:12:18,815 --> 00:12:20,300 můj program mohl dělat kdo ví co. 286 00:12:20,300 --> 00:12:22,220 Zmrazit, pověsit, restart, cokoliv. 287 00:12:22,220 --> 00:12:24,490 Něco se předpokládalo by se mohlo stát. 288 00:12:24,490 --> 00:12:27,120 >> Takže to, co budu dělat Nyní, od nynějška opravdu, 289 00:12:27,120 --> 00:12:31,630 je, než jsem vůbec naslepo použít proměnnou, jako s, které 290 00:12:31,630 --> 00:12:36,790 byla přiřazena návratovou hodnotu některé další funkce, jako getString, 291 00:12:36,790 --> 00:12:40,200 Jdu se ujistit že jeho hodnota je platná. 292 00:12:40,200 --> 00:12:44,280 Takže vím jen z přečtení Dokumentace CS50 pro getString, 293 00:12:44,280 --> 00:12:49,020 což v konečném důsledku budeme bod, v, že getString vrací speciální symbol 294 00:12:49,020 --> 00:12:53,610 názvem NULL, N-U-L-L ve všech čepice, když se něco pokazí. 295 00:12:53,610 --> 00:12:55,650 >> Tak normálně, vrátí řetězec. 296 00:12:55,650 --> 00:12:59,700 Ale jinak, pokud se vrátí N-u-L-já-- budeme nakonec vidět, co to ve skutečnosti 297 00:12:59,700 --> 00:13:01,790 means-- to jen znamená něco špatného stalo. 298 00:13:01,790 --> 00:13:05,560 Teď to znamená, že stejně jako v Scratch, Mohu zkontrolovat stav tady v C, 299 00:13:05,560 --> 00:13:08,830 pokud to není rovno NULL. 300 00:13:08,830 --> 00:13:11,930 Takže pokud jste ještě neviděli předtím, to jen znamená, že není rovno. 301 00:13:11,930 --> 00:13:15,290 >> Takže je to opak toho, stejné rovni, což vzpomínám, 302 00:13:15,290 --> 00:13:18,940 se liší od jediné rovná, což je úkol. 303 00:13:18,940 --> 00:13:23,030 Takže pokud to není rovno NULL, teprve poté 304 00:13:23,030 --> 00:13:25,980 Chci spustit tyto řádky kódu. 305 00:13:25,980 --> 00:13:28,080 Takže jinými slovy, předtím, než jsem se ponořit naslepo 306 00:13:28,080 --> 00:13:30,919 a začít iterace na s, a brát to 307 00:13:30,919 --> 00:13:33,710 jako by je posloupnost znaky, budu nejprve zkontrolovat, 308 00:13:33,710 --> 00:13:37,900 počkejte chvíli, je to určitě není rovnající se této zvláštní hodnoty, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Protože pokud ano, špatné věci se může stát. 310 00:13:40,030 --> 00:13:43,080 A teď, předpokládám, že špatné věci děje znamená, že program spadne, 311 00:13:43,080 --> 00:13:45,070 a nemůžete nutně obnovit. 312 00:13:45,070 --> 00:13:46,800 Takže upřímně řečeno, vypadá to ošklivější. 313 00:13:46,800 --> 00:13:48,660 Je to trochu matoucí, nyní, aby se podíval na. 314 00:13:48,660 --> 00:13:50,780 Ale toto se stane více seznámit zanedlouho. 315 00:13:50,780 --> 00:13:52,920 >> Ale budu navrhovat teď jeden další zlepšení. 316 00:13:52,920 --> 00:13:54,660 To je vylepšení správnost. 317 00:13:54,660 --> 00:13:58,800 Můj program je nyní přesnější, protože ve výjimečných případech, že není dostatek paměti 318 00:13:58,800 --> 00:14:01,180 existuje, bude to zvládnu, a já prostě nic. 319 00:14:01,180 --> 00:14:02,680 Já alespoň nespadne. 320 00:14:02,680 --> 00:14:05,000 >> Ale pojďme udělat konečné verzi zde. 321 00:14:05,000 --> 00:14:07,690 A soubor s názvem string2.c. 322 00:14:07,690 --> 00:14:10,190 Chystám se vložit, že stejný kód na chvíli, 323 00:14:10,190 --> 00:14:14,210 a já se zaměřím na to linka, 11, zde jen na chvíli. 324 00:14:14,210 --> 00:14:18,179 Nyní je skutečností, že chytré kompilátory jako Clang mohl opravit to pro nás 325 00:14:18,179 --> 00:14:19,970 zákulisí aniž bychom vůbec věděli. 326 00:14:19,970 --> 00:14:24,670 Ale pojďme si o tom myslíte zásadně za problematické konstrukce. 327 00:14:24,670 --> 00:14:29,010 >> Tento řádek kódu je, samozřejmě, říká, inicializovat nějakou proměnnou i na 0. 328 00:14:29,010 --> 00:14:30,260 To je docela jednoduché. 329 00:14:30,260 --> 00:14:34,691 A co je zase tohle prohlášení, tady, i ++, dělat? 330 00:14:34,691 --> 00:14:37,066 My jsem to neviděl, ale my se opravdu o tom mluvit. 331 00:14:37,066 --> 00:14:37,900 >> Diváků: Zvyšování i. 332 00:14:37,900 --> 00:14:39,191 >> David J. Malan: Zvyšování i. 333 00:14:39,191 --> 00:14:41,890 Takže v každé iteraci přes Tato smyčka, každý cyklus, 334 00:14:41,890 --> 00:14:43,570 jste zvyšování i po druhém. 335 00:14:43,570 --> 00:14:45,740 Takže to bude větší a větší, a větší než smyčka ukončí. 336 00:14:45,740 --> 00:14:46,810 Jak to skončí? 337 00:14:46,810 --> 00:14:49,430 No tam je to prostřední stav, který jsme použili předtím. 338 00:14:49,430 --> 00:14:52,500 Viděli jste, a průchody v sadě P. 339 00:14:52,500 --> 00:14:53,880 >> Ale co je to přísloví? 340 00:14:53,880 --> 00:14:58,352 Proveďte následující smyčku tak, pokud i je menší než co? 341 00:14:58,352 --> 00:14:59,810 Diváků: délka řetězce. 342 00:14:59,810 --> 00:15:01,518 David J. Malan: délka řetězce. 343 00:15:01,518 --> 00:15:04,300 Tak to překládá docela čistě do angličtiny v tomto smyslu. 344 00:15:04,300 --> 00:15:08,810 Nyní je problém je, že pokaždé, když jsem iterovat této smyčky v teorii, 345 00:15:08,810 --> 00:15:10,000 Ptám se na tuto otázku. 346 00:15:10,000 --> 00:15:12,250 Je i menší než délka řetězce s? 347 00:15:12,250 --> 00:15:14,500 Je i menší než délka řetězce s? 348 00:15:14,500 --> 00:15:18,380 >> Nyní se i mění na každé iteraci? 349 00:15:18,380 --> 00:15:18,880 To je. 350 00:15:18,880 --> 00:15:19,629 Vzhledem k ++. 351 00:15:19,629 --> 00:15:21,700 Takže každé iteraci i je stále větší. 352 00:15:21,700 --> 00:15:25,411 Ale je to stále větší, nebo menší, nebo měnící se vůbec? 353 00:15:25,411 --> 00:15:25,910 Ne 354 00:15:25,910 --> 00:15:30,240 Takže pokud jde o design, jedné z os podél které se snažíme vyhodnotit kód 355 00:15:30,240 --> 00:15:32,610 ve třídě, to cítí trochu hloupý. 356 00:15:32,610 --> 00:15:34,690 >> Stejně jako jste doslova, na každé iteraci 357 00:15:34,690 --> 00:15:37,110 této smyčky s dotazem Totéž opět zatraceně otázka, 358 00:15:37,110 --> 00:15:40,770 a znovu, a znovu, a doslova to se nikdy nezmění. 359 00:15:40,770 --> 00:15:44,220 Alespoň když jsem se dotkl s a Pokoušíte se změnit obsah s. 360 00:15:44,220 --> 00:15:46,610 Tak jsem si to trochu lepší než tohle. 361 00:15:46,610 --> 00:15:49,530 >> A to, co budu dělat, je to deklarovat jen jednu proměnnou i, 362 00:15:49,530 --> 00:15:53,330 ale druhá proměnná budu libovolně, ale konvenčně, říkají n. 363 00:15:53,330 --> 00:15:55,940 Přiřazení n rovno délka řetězce s. 364 00:15:55,940 --> 00:15:59,090 A pak tady, budu dělat chytrý trochu optimalizace, tak 365 00:15:59,090 --> 00:16:03,460 mluvit, že na konci dne už není správné, nebo ne méně správné 366 00:16:03,460 --> 00:16:04,260 než dříve. 367 00:16:04,260 --> 00:16:05,500 Ale je to lepší design. 368 00:16:05,500 --> 00:16:09,480 V tom, že já jsem s použitím méně času, méně cyklů procesoru, takže 369 00:16:09,480 --> 00:16:14,040 mluvit, odpovídat na stejný otázka, ale jen jednou. 370 00:16:14,040 --> 00:16:17,870 >> Jakékoliv dotazy týkající se tohoto obecného zásady zlepšování, 371 00:16:17,870 --> 00:16:21,294 říci, účinnost programu je? 372 00:16:21,294 --> 00:16:21,991 Jo? 373 00:16:21,991 --> 00:16:23,699 Diváků: Proč se použijte [neslyšitelné]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 David J. Malan: Dobrá otázka. 376 00:16:27,010 --> 00:16:30,690 Tak proč klademe ++ na konec i místo začátku i? 377 00:16:30,690 --> 00:16:33,070 V tomto případě, má žádná funkční dopad. 378 00:16:33,070 --> 00:16:36,670 A vůbec, mám tendenci použít operátor postfix 379 00:16:36,670 --> 00:16:41,750 takže je to trochu jasnější, jak , kdy je operace děje. 380 00:16:41,750 --> 00:16:46,670 >> Pro ty, kteří neznají, je tu další prohlášení, kterým byste mohli udělat ++ jsem. 381 00:16:46,670 --> 00:16:48,747 Jedná se o funkčně ekvivalent v tomto případě 382 00:16:48,747 --> 00:16:51,080 protože nic jiného kolem toho inkrementace. 383 00:16:51,080 --> 00:16:54,435 Ale můžete přijít s případy a řádků kódu 384 00:16:54,435 --> 00:16:55,810 ve kterém to dělá rozdíl. 385 00:16:55,810 --> 00:16:57,810 Takže obecně, my ne dokonce mluvit o tomhle. 386 00:16:57,810 --> 00:17:00,690 Vzhledem k tomu, upřímně řečeno, to je vaše Kód sexy a trochu pláštěnku, 387 00:17:00,690 --> 00:17:01,776 a méně znaků. 388 00:17:01,776 --> 00:17:04,859 Skutečnost je však taková, že je to mnohem těžší, Myslím, že i pro mě zabalit mou mysl 389 00:17:04,859 --> 00:17:07,319 kolem něj někdy, pořadí operací. 390 00:17:07,319 --> 00:17:09,750 Tak stranou, pokud Opravdu se mi nelíbí, 391 00:17:09,750 --> 00:17:14,650 i když to je docela sexy hledáte, můžete si také udělat i + = 1, 392 00:17:14,650 --> 00:17:18,880 který je ošklivější verze Stejný nápad pro postfix inkrementace. 393 00:17:18,880 --> 00:17:22,250 >> Říkám to i vás by se dělat si legraci z toho, 394 00:17:22,250 --> 00:17:25,140 ale přijde vidět kódu něco krásného zanedlouho. 395 00:17:25,140 --> 00:17:27,160 >> [SMÍCH] 396 00:17:27,160 --> 00:17:28,410 >> David J. Malan: Je to tak? 397 00:17:28,410 --> 00:17:29,360 Jo. 398 00:17:29,360 --> 00:17:30,480 Otázka uprostřed. 399 00:17:30,480 --> 00:17:32,146 >> Diváků: Potřebujete říci, int n? 400 00:17:32,146 --> 00:17:34,020 David J. Malan: Děláte Není třeba říkat, int n. 401 00:17:34,020 --> 00:17:37,670 Proto, že jsme již řekli int, nemusíte to říkat znovu. 402 00:17:37,670 --> 00:17:41,820 Háček je v tom, že n má být stejný datový typ jako já. 403 00:17:41,820 --> 00:17:43,310 Tak to je jen pohodlí zde. 404 00:17:43,310 --> 00:17:44,058 Jo. 405 00:17:44,058 --> 00:17:47,806 >> Diváků: Můžeš jít přes tiskového charakteru s držák i znovu? 406 00:17:47,806 --> 00:17:48,930 David J. Malan: Přesně tak. 407 00:17:48,930 --> 00:17:52,110 Takže% c, převezme zpět od poslední čas, je jen zástupný symbol. 408 00:17:52,110 --> 00:17:53,930 To znamená dát char zde. 409 00:17:53,930 --> 00:17:56,780 zpětné lomítko n, samozřejmě, jen znamená dát si pauzu zde. 410 00:17:56,780 --> 00:17:59,540 Tak to prostě odejde, teď, tento kus novou syntaxí. 411 00:17:59,540 --> 00:18:03,730 A to doslova říká, urvat řetězec s názvem S a jdi jeho 412 00:18:03,730 --> 00:18:06,050 i'th znak, abych tak řekl. 413 00:18:06,050 --> 00:18:10,590 >> A mějte říkám i'th charakter proto, že na každém opakování tohoto cyklu 414 00:18:10,590 --> 00:18:14,540 je to, jako bychom se tisknou v první řadě je držák 0, 415 00:18:14,540 --> 00:18:15,780 jako programátor by se říct. 416 00:18:15,780 --> 00:18:18,680 Pak to držák 1, pak s držák 2, pak 3, pak 4. 417 00:18:18,680 --> 00:18:21,610 Ale samozřejmě je to proměnná, tak jsem to vyjádřit i. 418 00:18:21,610 --> 00:18:23,900 >> Klíčové však je uvědomit si, zvláště pokud jste ne 419 00:18:23,900 --> 00:18:26,358 byl acclimating do tohoto světa programování, kde jsme se všichni 420 00:18:26,358 --> 00:18:28,950 Zdá se, že počítat od nuly, musím začíná počítat od nuly teď. 421 00:18:28,950 --> 00:18:35,130 Vzhledem k tomu, struny, první znak, z v Zamyla je k lepšímu nebo k horšímu 422 00:18:35,130 --> 00:18:40,490 žít na umístění čísla nula. 423 00:18:40,490 --> 00:18:48,210 >> Dobře, tak mi dovolte, aby nám sem do Zamyla 424 00:18:48,210 --> 00:18:50,746 a uvidíte, co se ve skutečnosti děje na pod kapotou. 425 00:18:50,746 --> 00:18:52,370 Takže tam je to představa typu odlitku. 426 00:18:52,370 --> 00:18:53,800 Možná, že jste ve skutečnosti hrál s tím již, 427 00:18:53,800 --> 00:18:55,970 Možná pro hackera vydání P nastavili. 428 00:18:55,970 --> 00:19:00,320 Ale přetypování jen se odkazuje na schopnosti v jazyce C a některé další jazyky 429 00:19:00,320 --> 00:19:03,170 převést jeden typ dat do druhého. 430 00:19:03,170 --> 00:19:05,450 >> Nyní, jak můžeme vidět docela přímočaře? 431 00:19:05,450 --> 00:19:08,530 Takže to, odvolání, je začátek anglické abecedy. 432 00:19:08,530 --> 00:19:11,265 A kontext, vzpomínám, od jako před týdnem, je ASCII. 433 00:19:11,265 --> 00:19:13,790 American Standard Code pro výměnu informací. 434 00:19:13,790 --> 00:19:17,080 Což je jen opravdu dlouhá cesta říkat mapování z dopisů 435 00:19:17,080 --> 00:19:19,370 čísel, a od počtu písmen. 436 00:19:19,370 --> 00:19:22,940 >> Takže až jsem tady, dot dot tečka, seřadí se, odvolání, 437 00:19:22,940 --> 00:19:25,582 desetinné číslo 65 nahoru. 438 00:19:25,582 --> 00:19:27,290 A my jsme nemluvili o tom výslovně, 439 00:19:27,290 --> 00:19:29,850 ale určitě je to podobné čísla pro malá písmena. 440 00:19:29,850 --> 00:19:30,820 A skutečně, tam jsou. 441 00:19:30,820 --> 00:19:33,730 Svět se rozhodl několik let dávno, že jen málo, malá písmena, 442 00:19:33,730 --> 00:19:35,020 bude 97. 443 00:19:35,020 --> 00:19:38,010 A malý b se děje jako 98, a tak dále. 444 00:19:38,010 --> 00:19:40,200 >> A pro jakýkoli jiný klíč na klávesnice, je tu 445 00:19:40,200 --> 00:19:42,190 bude podobný vzor bitů. 446 00:19:42,190 --> 00:19:44,540 Nebo ekvivalentně, desetinné číslo. 447 00:19:44,540 --> 00:19:47,110 Takže otázka po ruce, potom je, jak můžeme 448 00:19:47,110 --> 00:19:49,400 vlastně vidět pod kapotou? 449 00:19:49,400 --> 00:19:51,539 Takže jdu projít do gedit znovu. 450 00:19:51,539 --> 00:19:53,330 A spíše než typ to jeden z nuly, 451 00:19:53,330 --> 00:19:55,330 Chystám se jít dopředu a stačí otevřít něco 452 00:19:55,330 --> 00:19:58,350 z dnešního kódu ASCII s názvem nula. 453 00:19:58,350 --> 00:20:01,210 >> A ASCII nula vypadá takto. 454 00:20:01,210 --> 00:20:02,710 Takže pojďme zabalit své mysli kolem tohoto. 455 00:20:02,710 --> 00:20:04,969 Takže první, co jsem uvedl kód, což je hezké. 456 00:20:04,969 --> 00:20:07,010 Vzhledem k tomu, že je to doslova říká mi, co mám očekávat, 457 00:20:07,010 --> 00:20:08,950 zobrazit mapování velkými písmeny. 458 00:20:08,950 --> 00:20:13,690 Teď jsem vlastně pořádně nevíme, co jsem na mysli, že, tak se pojďme odvodit. 459 00:20:13,690 --> 00:20:16,870 >> V angličtině, možná poněkud techie Angličtina, 460 00:20:16,870 --> 00:20:20,660 co dělá linka 18 se objeví se, že dělá pro nás? 461 00:20:20,660 --> 00:20:21,500 Jen linka 18. 462 00:20:21,500 --> 00:20:22,430 Co to vyvolání? 463 00:20:22,430 --> 00:20:25,192 Co se to děje na kick off tady? 464 00:20:25,192 --> 00:20:26,100 >> Diváků: smyčka. 465 00:20:26,100 --> 00:20:26,630 >> David J. Malan: smyčka. 466 00:20:26,630 --> 00:20:28,463 A kolikrát je že bude opakovat? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 Diváků: [Přechodové VOICES] šestkrát. 469 00:20:33,270 --> 00:20:34,830 David J. Malan: Ne šestkrát. 470 00:20:34,830 --> 00:20:35,840 Diváků: 26 krát. 471 00:20:35,840 --> 00:20:36,560 David J. Malan: 26 krát. 472 00:20:36,560 --> 00:20:37,060 Jo, je mi líto. 473 00:20:37,060 --> 00:20:37,960 26 krát. 474 00:20:37,960 --> 00:20:38,460 Proč? 475 00:20:38,460 --> 00:20:41,590 No, je to trochu divné, ale Začal jsem počítat od 65 let. 476 00:20:41,590 --> 00:20:43,300 Což je divné, ale není špatné. 477 00:20:43,300 --> 00:20:44,610 To není špatné na to říct. 478 00:20:44,610 --> 00:20:46,980 A dělám to jen proto, že, v tomto příkladu, 479 00:20:46,980 --> 00:20:50,455 Jsem trochu předvídat že kapitál byl 65. 480 00:20:50,455 --> 00:20:53,330 Teď to není nejelegantnější způsob, jak to udělat, aby druh pevný kód 481 00:20:53,330 --> 00:20:56,130 esoterické hodnoty, které nikdo se stále očekává, že mít na paměti. 482 00:20:56,130 --> 00:21:00,155 >> Ale teď, všimněte si, že jsem Přitom se přes 65 a navíc 26. 483 00:21:00,155 --> 00:21:03,030 Vzhledem k tomu, zřejmě nemám ani nechci dělat aritmetiku v mé hlavě. 484 00:21:03,030 --> 00:21:04,440 Tak jsem si nechal kompilátor to. 485 00:21:04,440 --> 00:21:08,600 Ale pak na každé smyčky, každá iterace smyčky, já zvyšování i. 486 00:21:08,600 --> 00:21:10,196 >> Takže teď to vypadá trochu záhadné. 487 00:21:10,196 --> 00:21:13,320 Ale měli bychom mít základní budovu bloky, se kterými to pochopit. 488 00:21:13,320 --> 00:21:15,510 % C je jen zástupný symbol pro char. 489 00:21:15,510 --> 00:21:19,010 % I je zástupný symbol pro int. 490 00:21:19,010 --> 00:21:23,310 A ukázalo se, že při použití této Nová syntaxe, to kulatých závorek, tak 491 00:21:23,310 --> 00:21:26,100 mluvit, tak datového typu uvnitř závorek, 492 00:21:26,100 --> 00:21:32,270 Mohu donutit kompilátor k léčbě i to je číslo, ale jako char. 493 00:21:32,270 --> 00:21:35,520 >> Tím mi ukazuje charakter ekvivalent tohoto čísla. 494 00:21:35,520 --> 00:21:37,986 Teď sem tento kód je do značné míry shodné. 495 00:21:37,986 --> 00:21:39,860 Jen jsem chtěl, aby Super explicitní skutečnost, 496 00:21:39,860 --> 00:21:42,095 že jsem již od 97, která je malá písmena. 497 00:21:42,095 --> 00:21:44,080 On se přes 26 více písmen. 498 00:21:44,080 --> 00:21:46,970 A já doing-- znovu lití i, abych tak řekl. 499 00:21:46,970 --> 00:21:49,160 Nebo přetypování i, abych tak řekl. 500 00:21:49,160 --> 00:21:51,420 >> Z int na char. 501 00:21:51,420 --> 00:21:55,760 Takže konečným výsledkem bude, Upřímně řečeno, informace, už víme. 502 00:21:55,760 --> 00:21:59,411 Chystám se udělat ascii-0 dot-- není dot c. 503 00:21:59,411 --> 00:22:02,160 Všimněte si, pravděpodobně dělal to chyba, jak jsem to udělal omylem. 504 00:22:02,160 --> 00:22:03,820 Udělat ASCII 0. 505 00:22:03,820 --> 00:22:06,090 Teď budu dělat ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Budu přiblížit, a bohužel to bude posouvat mimo obrazovku. 507 00:22:09,050 --> 00:22:15,060 Ale vidíme celou diagramu, kde mapy do 97, b mapy do 98, 508 00:22:15,060 --> 00:22:18,931 a pokud budeme posouvat nahoru další , Samozřejmě, mapuje na 65. 509 00:22:18,931 --> 00:22:21,180 Takže je to jen říci, že co jsme byli kázání, 510 00:22:21,180 --> 00:22:25,310 je to ekvivalence, je Ve skutečnosti tomu tak ve skutečnosti. 511 00:22:25,310 --> 00:22:28,000 Tak rychlá změna to. 512 00:22:28,000 --> 00:22:31,220 Dovolte mi, abych otevřít ASCII 1.C. 513 00:22:31,220 --> 00:22:38,070 A všimněte si tento chytrý, třídění z, objasnění tohoto. 514 00:22:38,070 --> 00:22:41,770 To je ascii-1.c, a Všimněte si tento šílený věci. 515 00:22:41,770 --> 00:22:45,120 >> A to opravdu dostane do srdce z toho, co počítače dělají. 516 00:22:45,120 --> 00:22:48,150 I přesto, že my lidé by nepočítá, pokud jde o letters-- 517 00:22:48,150 --> 00:22:50,380 Nechci začít přemýšlet, v pořádku a pak b, 518 00:22:50,380 --> 00:22:52,590 a používat ty počítat fyzických objektů. 519 00:22:52,590 --> 00:22:58,680 Určitě můžete říct, že chci, aby inicializovat nějakou proměnnou s názvem C-- 520 00:22:58,680 --> 00:23:03,220 ale nemohl jsem si to nazval anything-- takže c je inicializován kapitálu A. 521 00:23:03,220 --> 00:23:07,560 >> Protože na konci dne, počítače není jedno, co jste skladování, 522 00:23:07,560 --> 00:23:10,170 je to jen zajímá, jak chcete prezentovat informace. 523 00:23:10,170 --> 00:23:13,560 Jak chcete, aby se počítač do vykládat tak, že vzor bitů? 524 00:23:13,560 --> 00:23:16,320 Takže to není něco, co jsem by obecně doporučujeme dělat. 525 00:23:16,320 --> 00:23:19,500 Je to opravdu jen příklad sdělit, že můžete zcela 526 00:23:19,500 --> 00:23:22,049 inicializovat celé číslo k char. 527 00:23:22,049 --> 00:23:24,090 Vzhledem k tomu, pod kapuce na char, samozřejmě, 528 00:23:24,090 --> 00:23:26,170 je jen číslo od 0 do 255. 529 00:23:26,170 --> 00:23:28,540 >> Takže si určitě dát to uvnitř int. 530 00:23:28,540 --> 00:23:30,890 A co to také ukazuje, že jsme 531 00:23:30,890 --> 00:23:34,040 lze převést z jednoho typu na jiný, tady, 532 00:23:34,040 --> 00:23:36,780 nakonec tisk totéž. 533 00:23:36,780 --> 00:23:44,760 A ve skutečnosti, to budu opravit online-- byl chtěl říci, opět zde. 534 00:23:44,760 --> 00:23:48,610 Dovolte mi, abych to vyčistit on-line, a budeme viz v on-line návodu podle potřeby, 535 00:23:48,610 --> 00:23:50,280 to, co bylo zamýšleno tam. 536 00:23:50,280 --> 00:23:50,960 >> OK. 537 00:23:50,960 --> 00:23:53,892 Takže poslední příklad se zapojit A je A a B a pak jsme si 538 00:23:53,892 --> 00:23:54,850 vzít věci do zářezu. 539 00:23:54,850 --> 00:23:58,330 Takže s a b a c je v kapitalizace 540 00:23:58,330 --> 00:24:01,560 a jejich rovnocennosti, pojďme podívejte se na tomto příkladu, zde. 541 00:24:01,560 --> 00:24:02,752 Další příklad kódu. 542 00:24:02,752 --> 00:24:04,460 Budeme otevírat ten, který je již bylo provedeno, a tak jsme 543 00:24:04,460 --> 00:24:06,440 Nemusíte to psát vše od nuly. 544 00:24:06,440 --> 00:24:09,420 >> A všimněte si v očekávání jsme pomocí více záhlaví 545 00:24:09,420 --> 00:24:13,240 obrázků, mezi nimiž je náš nový přítel, string.h. 546 00:24:13,240 --> 00:24:15,597 Teď to vypadá, na první pohled pohled, trochu záhadné. 547 00:24:15,597 --> 00:24:18,180 Ale podívejme se, jestli bychom nemohli uvažovat tím, co se tady děje. 548 00:24:18,180 --> 00:24:21,150 Nejprve jsem si řetězec od uživatele, a dal jsem tento řetězec v proměnné 549 00:24:21,150 --> 00:24:22,286 s názvem. 550 00:24:22,286 --> 00:24:24,090 Kopírovat Vložit před rokem. 551 00:24:24,090 --> 00:24:27,250 V souladu 22, jsem zřejmě dělá přesně to, co 552 00:24:27,250 --> 00:24:30,760 Já jsem před chvílí, jsem iterace nad postavami s. 553 00:24:30,760 --> 00:24:34,780 >> A nové triky jsou zde pomocí délka řetězce, menší optimalizace 554 00:24:34,780 --> 00:24:37,930 ukládání délku řetězce v N, spíše než volání znovu strlen, 555 00:24:37,930 --> 00:24:38,850 a znovu a znovu. 556 00:24:38,850 --> 00:24:41,120 A jen kontrolovat, že jsem je menší než n. 557 00:24:41,120 --> 00:24:43,330 A teď, co se trochu zajímavé. 558 00:24:43,330 --> 00:24:45,980 Ale je to jen aplikace ze stejné nové myšlenky. 559 00:24:45,980 --> 00:24:48,470 Co v angličtině dělá s držák i reprezentovat? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> Diváků: Počítání každý znak [neslyšitelné]. 562 00:24:54,260 --> 00:24:55,926 >> David J. Malan: Počítání každý znak. 563 00:24:55,926 --> 00:24:58,680 A ještě stručně, s držák i představují to, co? 564 00:24:58,680 --> 00:25:00,950 Řekl byste, že. 565 00:25:00,950 --> 00:25:04,084 Ne aby vás na místě zde. 566 00:25:04,084 --> 00:25:06,375 >> Diváků: Well-- 567 00:25:06,375 --> 00:25:09,500 David J. Malan: Takže v případě, že slovo je-- pokud řetězec je Zamyla, který starts-- 568 00:25:09,500 --> 00:25:12,380 Diváků: --you řešit znaky separately-- 569 00:25:12,380 --> 00:25:13,690 David J. Malan: Dobrý. 570 00:25:13,690 --> 00:25:14,190 Přesně tak. 571 00:25:14,190 --> 00:25:17,940 Hranatá závorka notace umožňuje přístup každý znak zvlášť, 572 00:25:17,940 --> 00:25:21,120 takže je držák 0 bude První znak v řetězci. 573 00:25:21,120 --> 00:25:24,110 Držák s 1 bude druhý, a tak dále. 574 00:25:24,110 --> 00:25:28,050 Takže otázka, ptám se, zde, v tomto stavu je to, co? 575 00:25:28,050 --> 00:25:33,984 Je i'th charakter s Greater než nebo rovnající se malá písmena? 576 00:25:33,984 --> 00:25:36,400 A co to znamená, tady, s dvojitými ampersandy? 577 00:25:36,400 --> 00:25:36,800 AUDIENCE (společně): a. 578 00:25:36,800 --> 00:25:37,210 David J. Malan: A. 579 00:25:37,210 --> 00:25:38,418 Je to ekvivalent k tomu. 580 00:25:38,418 --> 00:25:42,310 A není klíčové slovo v jazyce C, musíte použití, protivně, ampersand ampersand. 581 00:25:42,310 --> 00:25:47,520 A to, naopak, ptá se s je i'th znak menší než nebo rovno 582 00:25:47,520 --> 00:25:49,030 na malá písmena z? 583 00:25:49,030 --> 00:25:52,440 A opět, tady je místo, kde pochopení základní 584 00:25:52,440 --> 00:25:54,550 realizace Počítač má smysl. 585 00:25:54,550 --> 00:25:57,330 Všimněte si, že i když mám dot dot dot tam, 586 00:25:57,330 --> 00:26:04,410 vypadá to, až z malých písmen jsou všechny sousedící hodnoty až z 97 nahoru. 587 00:26:04,410 --> 00:26:07,820 >> A totéž pro velká písmena začínající na 65 let. 588 00:26:07,820 --> 00:26:10,410 Takže stánek s jídlem, a pak, je to v angličtině, 589 00:26:10,410 --> 00:26:12,760 Jak byste popsal co řádek 24 se dělá? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Jo? 592 00:26:16,728 --> 00:26:21,575 >> Diváků: Na 24 to kontroluje, zda je každý znak je malá. 593 00:26:21,575 --> 00:26:24,700 David J. Malan: Je to ověřit, zda Každý znak je malé písmeno. 594 00:26:24,700 --> 00:26:28,590 Takže i stručněji, je i'th charakter s malými písmeny? 595 00:26:28,590 --> 00:26:30,690 To je vše, co jsme vyjádření zde logicky, 596 00:26:30,690 --> 00:26:33,750 trochu záhadně, ale nakonec docela přímočaře. 597 00:26:33,750 --> 00:26:36,480 Je s to i'th znaků malými písmeny? 598 00:26:36,480 --> 00:26:40,130 >> Pokud tomu tak je, a tady je místo, kde se věci trochu mysl ohýbání 599 00:26:40,130 --> 00:26:44,760 jen na okamžik, a pokud ano, jděte dopředu a vytisknout znak. 600 00:26:44,760 --> 00:26:47,360 Takže je to jen zástupný symbol, ale to, co postava? 601 00:26:47,360 --> 00:26:53,710 Proč to dělám y držák i minus tento výraz zde? 602 00:26:53,710 --> 00:26:55,110 >> Tak zjistíte zde vzor. 603 00:26:55,110 --> 00:26:57,380 Skutečná čísla nezáleží tolik. 604 00:26:57,380 --> 00:27:02,700 Ale všimněte si, že 97 je jak daleko od 65? 605 00:27:02,700 --> 00:27:03,560 >> Diváků: 32. 606 00:27:03,560 --> 00:27:04,480 >> David J. Malan: 32. 607 00:27:04,480 --> 00:27:06,890 Jak daleko je 98 z 66? 608 00:27:06,890 --> 00:27:07,740 >> Diváků: 32. 609 00:27:07,740 --> 00:27:09,890 >> David J. Malan: Malý c od velkého C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Takže tam je 32 chmel od jedno písmeno do druhého. 612 00:27:14,550 --> 00:27:17,790 Takže upřímně řečeno, mohl zjednodušit tím, že. 613 00:27:17,790 --> 00:27:20,400 Ale pak jsem trochu těžké kódování Tato nízká úroveň porozumění 614 00:27:20,400 --> 00:27:21,740 že žádný čtenář je vždy bude rozumět. 615 00:27:21,740 --> 00:27:25,080 Takže budu generalizovat jako jsem vím, že malá písmena jsou větší. 616 00:27:25,080 --> 00:27:28,400 Vím, že písmena jsou menší hodnoty, ironicky. 617 00:27:28,400 --> 00:27:33,216 >> To je však skutečně ekvivalentní říká odečíst 32 od držáku s i. 618 00:27:33,216 --> 00:27:35,430 Takže v souvislosti s těmito dopisy, pokud dopisu 619 00:27:35,430 --> 00:27:38,950 náhodou, malá a já odečíst 32, 620 00:27:38,950 --> 00:27:43,442 jaký vliv to má, matematicky, na malá písmena? 621 00:27:43,442 --> 00:27:44,400 Diváků: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 David J. Malan: to zúročuje. 623 00:27:45,691 --> 00:27:48,440 A skutečně, to je důvod, proč naše program se nazývá využít nulu. 624 00:27:48,440 --> 00:27:51,590 Tento program buď těžící dopis, 625 00:27:51,590 --> 00:27:54,580 Po kontrole, zda je opravdu malé písmeno. 626 00:27:54,580 --> 00:27:59,810 V opačném případě, v souladu 30, co mám dělat, když to není malé písmeno, že jsem 627 00:27:59,810 --> 00:28:02,852 při pohledu na v určitém iterace ve smyčce. 628 00:28:02,852 --> 00:28:03,890 Stačí ji vytisknout. 629 00:28:03,890 --> 00:28:07,010 >> Takže se nemusíte měnit věci to není ani malá písmena. 630 00:28:07,010 --> 00:28:10,790 Omezit se na málo přes malou z. 631 00:28:10,790 --> 00:28:12,730 Teď je to docela tajemný. 632 00:28:12,730 --> 00:28:15,230 Ale na konci dne, to je, jak jsme se jednou za čas, 633 00:28:15,230 --> 00:28:16,460 musel provádět věci. 634 00:28:16,460 --> 00:28:19,780 Kdybych místo toho otevřít vydělávat jeden, oh díky bohu. 635 00:28:19,780 --> 00:28:22,320 K dispozici je funkce zavolal na horní, které mohou 636 00:28:22,320 --> 00:28:25,410 dělat vše, co jsme právě dělali na poměrně nízké úrovni. 637 00:28:25,410 --> 00:28:28,752 >> Nyní se horní je zajímavý protože je deklarována v souboru, 638 00:28:28,752 --> 00:28:31,210 a ty by jen vědět kontrolou dokumentace, 639 00:28:31,210 --> 00:28:35,730 nebo bylo řečeno, řekněme, ve třídě, kde existuje, v souboru s názvem ctype.h. 640 00:28:35,730 --> 00:28:37,630 Takže to je další nový přítel náš. 641 00:28:37,630 --> 00:28:40,750 A horní dělá přesně to, co její název napovídá. 642 00:28:40,750 --> 00:28:44,860 >> Můžete předat jako argument, mezi Tyto závorky, někteří charakter. 643 00:28:44,860 --> 00:28:48,390 Chystám se projít v i'th charakteru S pomocí naší fantazie nový zápis 644 00:28:48,390 --> 00:28:49,870 zahrnující hranatých závorek. 645 00:28:49,870 --> 00:28:53,391 A hádejte, co je návrat hodnota na horní zřejmě bude 646 00:28:53,391 --> 00:28:53,890 být? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Velké písmeno. 649 00:28:57,770 --> 00:28:58,620 Velké písmeno. 650 00:28:58,620 --> 00:29:02,330 >> Takže když jsem se projít malými písmeny a, doufejme, že z definice na horní, 651 00:29:02,330 --> 00:29:05,600 že to bude návrat velká písmena A. V opačném případě, 652 00:29:05,600 --> 00:29:08,590 pokud to není malé písmeno v první místo, jen jsem jej vytisknout. 653 00:29:08,590 --> 00:29:10,800 A opravdu si všimněte, Druhý přítel. 654 00:29:10,800 --> 00:29:13,840 Není to jen na horní existuje, , ale je menší, což 655 00:29:13,840 --> 00:29:16,200 vlastně odpoví, že otázka pro mě. 656 00:29:16,200 --> 00:29:19,730 >> Nyní každý, kdo napsal tyto věci, 10s let dříve, víš co? 657 00:29:19,730 --> 00:29:23,840 Realizovány horní a snížit pomocí kódu, jako je tento. 658 00:29:23,840 --> 00:29:27,270 Ale znovu, v souladu s Tato myšlenka oddělit pryč, 659 00:29:27,270 --> 00:29:29,190 druh, nižší úroveň detaily implementace. 660 00:29:29,190 --> 00:29:32,600 A stojí na ramenou lidí kteří přišli před námi, pomocí funkcí 661 00:29:32,600 --> 00:29:36,300 jako na horní a dolní, která tak nádherně, jsou pěkně 662 00:29:36,300 --> 00:29:40,190 jmenoval říci, co dělají, je nádherný vzor přijmout. 663 00:29:40,190 --> 00:29:44,040 >> Nyní se ukazuje, že když jsem četl manuálová stránka pro, řekněme, na horní, 664 00:29:44,040 --> 00:29:45,010 I něco naučit. 665 00:29:45,010 --> 00:29:46,890 Takže člověk toUpper. 666 00:29:46,890 --> 00:29:48,050 Je to trochu ohromující. 667 00:29:48,050 --> 00:29:51,110 Ale oznámení, tady je to zmínka o hlavičkový soubor, který bych měl použít. 668 00:29:51,110 --> 00:29:54,460 Jako stranou, protože toto je zavádějící, funkce 669 00:29:54,460 --> 00:29:59,070 používá ints místo znaků z důvodů kontroly chyb. 670 00:29:59,070 --> 00:30:01,260 Ale budeme možná přijde zpět k tomu v budoucnu. 671 00:30:01,260 --> 00:30:05,910 >> Ale nevšiml, tady, na horní konvertity písmeno c na velká písmena, pokud je to možné. 672 00:30:05,910 --> 00:30:07,674 Tak to je docela jednoduché. 673 00:30:07,674 --> 00:30:09,340 A teď buďme trochu konkrétnější. 674 00:30:09,340 --> 00:30:12,750 Pojďme se podívat na část muž strana pod návratovou hodnotu. 675 00:30:12,750 --> 00:30:15,420 Vrácená hodnota je to, že převedené písmeno. 676 00:30:15,420 --> 00:30:18,690 Nebo C, v případě, že převod nebylo možné, 677 00:30:18,690 --> 00:30:20,250 kde c je původní vstup. 678 00:30:20,250 --> 00:30:24,140 O němž vím, odtud, z argument na horní. 679 00:30:24,140 --> 00:30:25,780 >> Takže to, co je stánek s jídlem to? 680 00:30:25,780 --> 00:30:28,060 Vrácená hodnota je to, že převedené písmeno, 681 00:30:28,060 --> 00:30:32,110 nebo C, původní písmeno, pokud konverze nebylo možné. 682 00:30:32,110 --> 00:30:36,460 Jaké zlepšení mohu tedy aby do návrhu mém kódu je? 683 00:30:36,460 --> 00:30:37,146 Jo? 684 00:30:37,146 --> 00:30:38,810 >> Diváků: Můžete odstranit jiný. 685 00:30:38,810 --> 00:30:40,810 David J. Malan: mohu odebrat prohlášení jiného, 686 00:30:40,810 --> 00:30:42,510 a ne jen příkaz else. 687 00:30:42,510 --> 00:30:44,150 >> Diváků: Můžete odstranit [neslyšitelné]. 688 00:30:44,150 --> 00:30:46,310 >> David J. Malan: mohu odebrat celou vidlici 689 00:30:46,310 --> 00:30:48,209 na cestě, pokud úplně jinde. 690 00:30:48,209 --> 00:30:50,250 Takže opravdu, dovolte mi, abych otevřít Konečná verze, 691 00:30:50,250 --> 00:30:55,540 vydělávat-2 a všimněte si, jak, pokud budete, sexy, kód je nyní dostává, 692 00:30:55,540 --> 00:31:00,040 v tom, že jsem se snížil z některých sedm nebo tak linky do jen čtyři, 693 00:31:00,040 --> 00:31:03,850 funkce, které jsem měl v úmyslu pouhým voláním na horní, 694 00:31:03,850 --> 00:31:09,410 předáním s držákem I a tisk ven, s zástupný symbol% ​​C, 695 00:31:09,410 --> 00:31:11,090 že zvláštní charakter. 696 00:31:11,090 --> 00:31:14,560 >> Nyní pravděpodobně, že se jedná o problém, nebo přinejmenším riziko chyby, 697 00:31:14,560 --> 00:31:15,350 v tomto programu. 698 00:31:15,350 --> 00:31:18,200 Takže stačí, aby se vrátil na dřívější stánek s jídlem, 699 00:31:18,200 --> 00:31:21,820 Co bych měl asi také dělat v tento program, aby bylo více robustní, 700 00:31:21,820 --> 00:31:24,974 tak, že neexistuje způsob, jak to může havárii, a to i ve výjimečných případech? 701 00:31:24,974 --> 00:31:26,390 Diváků: Ujistěte se, že to není NULL. 702 00:31:26,390 --> 00:31:28,056 David J. Malan: Ujistěte se, že to není NULL. 703 00:31:28,056 --> 00:31:31,030 Takže opravdu, aby to Super správné, měl bych něco takového, 704 00:31:31,030 --> 00:31:35,300 pokud to není NULL, pak pokračovat a realizovat 705 00:31:35,300 --> 00:31:38,470 Tyto řádky kódu, které I pak mohou odrážka takhle, 706 00:31:38,470 --> 00:31:39,870 a pak dal v mé blízkosti kříže. 707 00:31:39,870 --> 00:31:41,550 Tak dobrá provázání dvou myšlenek. 708 00:31:41,550 --> 00:31:42,429 Jo? 709 00:31:42,429 --> 00:31:44,470 Diváků: Mohl byste použít dělat, zatímco smyčka, místo toho? 710 00:31:44,470 --> 00:31:47,270 David J. Malan: Mohl Já si dělat, zatímco smyčky? 711 00:31:47,270 --> 00:31:50,020 Diváků: --you chcete ujistit, že jste skutečně [neslyšitelné]. 712 00:31:50,020 --> 00:31:51,728 David J. Malan: Mohl Používáte dělat, když? 713 00:31:51,728 --> 00:31:52,450 Krátká odpověď, no. 714 00:31:52,450 --> 00:31:54,700 Vzhledem k tomu, že jste asi zavést další rohový případ. 715 00:31:54,700 --> 00:31:56,660 Pokud je řetězec nulové délky. 716 00:31:56,660 --> 00:31:59,600 Je-li například, jen jsem narazila Zadejte, aniž by se psaní Zamyla. 717 00:31:59,600 --> 00:32:02,490 Budu tě vrátit aktuální string, jak budeme nakonec vidět, 718 00:32:02,490 --> 00:32:03,780 , který má nulové znaky. 719 00:32:03,780 --> 00:32:05,630 Je to stále řetězec, je to prostě super krátký. 720 00:32:05,630 --> 00:32:07,960 Ale pokud používáte dělat, když, budete slepě 721 00:32:07,960 --> 00:32:10,050 pokusit se udělat něco s respektování tohoto řetězce, 722 00:32:10,050 --> 00:32:12,537 a nic se tam. 723 00:32:12,537 --> 00:32:18,607 >> DIVÁKŮ: No, pokud jste to [neslyšitelné], zatímco S-- 724 00:32:18,607 --> 00:32:21,190 David J. Malan: Aha, udržet dostat řetězec od uživatele. 725 00:32:21,190 --> 00:32:23,525 Takže krátká odpověď, můžete mohl, a držet otravovat 726 00:32:23,525 --> 00:32:26,150 je, aby vám řetězec, který je dostatečně krátký, aby se vešly do paměti. 727 00:32:26,150 --> 00:32:26,700 Přesně tak. 728 00:32:26,700 --> 00:32:27,630 Jen jsem se rozhodl se. 729 00:32:27,630 --> 00:32:30,505 Pokud tomu tak není, dejte mi řetězec I chci, já končím, dávám nahoru. 730 00:32:30,505 --> 00:32:33,260 Ale absolutně, za tímto účelem, můžete absolutně udělat. 731 00:32:33,260 --> 00:32:37,500 >> Takže hlavičkové soubory knihovny, které jsme se již seznámili se se to tady. 732 00:32:37,500 --> 00:32:41,550 Standard I / O, CS50.h, string.h, ctype.h, a tam jsou skutečně jiní. 733 00:32:41,550 --> 00:32:44,460 Někteří z vás zjistili, matematická knihovna v math.h. 734 00:32:44,460 --> 00:32:48,200 Ale dovolte mi, abych vám představil, teď, tento zdroj, že zaměstnanci CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 a Rob a Gabe zejména dali dohromady. 736 00:32:50,630 --> 00:32:52,630 Že bude brzy spojit na Webové stránky kurzu je. 737 00:32:52,630 --> 00:32:54,870 Říká se CS50 reference. 738 00:32:54,870 --> 00:32:58,230 >> Což jen aby vám rychle chuť na to, funguje následovně. 739 00:32:58,230 --> 00:33:00,740 Nech mě jít do reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Uvidíte na levé straně stranu ohromující seznam 741 00:33:02,990 --> 00:33:04,595 funkcí, které přicházejí s cca. 742 00:33:04,595 --> 00:33:07,790 Ale když mě to zajímá, pro tuto chvíli, o něčem, jako je strlen, 743 00:33:07,790 --> 00:33:08,746 I to můžete psát zde. 744 00:33:08,746 --> 00:33:10,870 Filtruje se stanoví seznam jen to, co mě zajímá. 745 00:33:10,870 --> 00:33:11,940 Chystám se na něj. 746 00:33:11,940 --> 00:33:14,740 A teď na levé straně, uvidíte, co doufáme, 747 00:33:14,740 --> 00:33:18,290 je jednodušší, lidský přátelské vysvětlení, jak 748 00:33:18,290 --> 00:33:19,170 Tato funkce funguje. 749 00:33:19,170 --> 00:33:20,600 >> Vrátí délku řetězce. 750 00:33:20,600 --> 00:33:24,060 Zde je stručné shrnutí, tady je návod, jak použití, pokud jde o záhlaví souboru, 751 00:33:24,060 --> 00:33:27,430 a co se týče toho, co funkce vypadá to, pokud jde o jeho argumentů. 752 00:33:27,430 --> 00:33:30,250 A pak tady, vrátí Délka řetězce. 753 00:33:30,250 --> 00:33:34,280 Ale pro ty z vás pohodlnější, můžete skutečně na tlačítko pohodlnější, 754 00:33:34,280 --> 00:33:37,070 a obsah tohoto strana, nyní se změní 755 00:33:37,070 --> 00:33:41,660 jako výchozí hodnoty z toho, co získáte pomocí man stránce. 756 00:33:41,660 --> 00:33:44,100 >> Jinými slovy, CS50 odkaz je zjednodušení 757 00:33:44,100 --> 00:33:46,220 z manuálových stránek ze strany zaměstnanců, pro studenty. 758 00:33:46,220 --> 00:33:49,320 Zejména těch méně pohodlné a mezi tím, takže si 759 00:33:49,320 --> 00:33:51,660 Nemusíte se snažit zabalit vaše mysl se, upřímně řečeno, 760 00:33:51,660 --> 00:33:55,030 některé docela mystický syntaxe a dokumentace někdy. 761 00:33:55,030 --> 00:33:57,650 >> Takže mějte na paměti, že v příštích dnech. 762 00:33:57,650 --> 00:33:59,560 Tak tady je opět Zamyla. 763 00:33:59,560 --> 00:34:03,255 Pojďme se zeptat, který je trochu lidštější přístup. 764 00:34:03,255 --> 00:34:05,380 Díky Chang, kdo byl tisk více slony 765 00:34:05,380 --> 00:34:07,090 nonstop za posledních pár dní. 766 00:34:07,090 --> 00:34:09,730 Máme příležitost vyjádřit alespoň jeden z nich pryč. 767 00:34:09,730 --> 00:34:13,239 Pokud bychom se mohli dostat jen jeden dobrovolník přijít až na kreslení na obrazovce. 768 00:34:13,239 --> 00:34:14,530 A co tady? 769 00:34:14,530 --> 00:34:15,340 >> Pojď nahoru. 770 00:34:15,340 --> 00:34:16,720 Jaké je vaše jméno? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 David J. Malan: Alex. 773 00:34:17,760 --> 00:34:18,259 V pořádku. 774 00:34:18,259 --> 00:34:19,388 Alexi, pojď nahoru. 775 00:34:19,388 --> 00:34:21,679 Chystáme se vidět své rukopis na obrazovce zde. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Tak jo, rád tě poznávám. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Nice si tě poznávám. 779 00:34:26,429 --> 00:34:27,512 >> David J. Malan: Dobře. 780 00:34:27,512 --> 00:34:28,969 Takže, super jednoduché cvičení. 781 00:34:28,969 --> 00:34:31,440 Bar není vysoká, aby dostat slona dnes. 782 00:34:31,440 --> 00:34:33,439 Hrajete roli getString. 783 00:34:33,439 --> 00:34:35,980 A já budu jen říct, řetězec, který jste dostali. 784 00:34:35,980 --> 00:34:38,080 A předpokládám, že vás, getString, byli povoláni. 785 00:34:38,080 --> 00:34:42,480 A člověk, jako já, má zadali Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Prostě jít dopředu a psát Zamyla na obrazovce, jako by jste dostali to 787 00:34:45,650 --> 00:34:47,250 a uložené někde v paměti. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Ponechává prostor pro to, co bude několik další words-- to je v pořádku, pokračuj. 790 00:34:55,570 --> 00:34:59,620 >> [SMÍCH] 791 00:34:59,620 --> 00:35:00,800 >> Takže Zamyla, Výborný. 792 00:35:00,800 --> 00:35:04,880 Takže předpokládám, že vás, getString, se ozval znovu. 793 00:35:04,880 --> 00:35:09,350 A proto jsem vám, u klávesnice, pod jiným názvem, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 V pořádku. 796 00:35:18,060 --> 00:35:22,380 A teď příště getString je volal jsem psát něco jako Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Jste opravdu užívat na srdeční paměti s náhodným přístupem. 798 00:35:27,560 --> 00:35:29,631 Která je kresba vše zcela náhodně. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [SMÍCH] 801 00:35:31,104 --> 00:35:32,520 ALEX: Omlouvám se můj rukopis je špatné. 802 00:35:32,520 --> 00:35:33,770 David J. Malan: Ne, to je v pořádku. 803 00:35:33,770 --> 00:35:40,480 A jak je to s Robem, R-O-B. OK. 804 00:35:40,480 --> 00:35:41,020 Dobře. 805 00:35:41,020 --> 00:35:43,853 Tak jsem se vás předvídat by druh ležel věci tímto způsobem. 806 00:35:43,853 --> 00:35:45,020 Ale můžeme tuto práci. 807 00:35:45,020 --> 00:35:48,810 Tak jak se vám jít o kterou se z těchto znaků v paměti? 808 00:35:48,810 --> 00:35:51,310 Jinými slovy, pokud si myslíme, že Tento obdélníkový černá obrazovka 809 00:35:51,310 --> 00:35:53,550 jako zastupující počítače RAM nebo paměti. 810 00:35:53,550 --> 00:35:55,850 >> A připomínají, že RAM je jen celá parta bajtů, 811 00:35:55,850 --> 00:35:57,480 a bytech je celá banda bitů. 812 00:35:57,480 --> 00:35:59,350 A bity jsou nějakým způsobem provedeny, obecně 813 00:35:59,350 --> 00:36:01,119 s nějakou formou elektrické energie v hardwaru. 814 00:36:01,119 --> 00:36:03,160 Tak to je druh vrstvení jsme mluvili o 815 00:36:03,160 --> 00:36:04,510 a nyní je možné brát jako samozřejmost. 816 00:36:04,510 --> 00:36:07,020 Jak jste jít o rozhodování o tom, kam napsat 817 00:36:07,020 --> 00:36:11,634 Rob proti Gabe proti Belinda proti Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Jen jsem to udělal v nařídit, aby jsi mi to řekla. 819 00:36:14,020 --> 00:36:15,650 >> David J. Malan: A to je pravda. 820 00:36:15,650 --> 00:36:20,100 Ale to, co řídí, kam umístit Belindina jméno a Gabe jméno? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Nic? 822 00:36:20,764 --> 00:36:22,930 David J. Malan: [směje se] Tak to funguje, je to v pořádku. 823 00:36:22,930 --> 00:36:25,290 Takže počítače jsou málo řádnější než to. 824 00:36:25,290 --> 00:36:29,000 A tak když jsme implement-- zůstat jen na moment-- když jsme vlastně 825 00:36:29,000 --> 00:36:31,470 zavést něco jako getString v počítači, 826 00:36:31,470 --> 00:36:34,480 Zamyla by mohlo být stanoveno do značné míry jako jsi to udělal na obrazovce, tam. 827 00:36:34,480 --> 00:36:36,660 >> A co je klíčem k všimnete zde to, co udělal Alex, 828 00:36:36,660 --> 00:36:40,260 je, že je tak trochu vymezení mezi každou z těchto slov, že? 829 00:36:40,260 --> 00:36:46,580 Vy jste to napsat Z--M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 Jinými slovy, tam je nějaký druh z vymezení, které se zdá být, 831 00:36:49,740 --> 00:36:52,370 druh, náhodné rozteč Mezi těmito různými slovy. 832 00:36:52,370 --> 00:36:54,120 Ale to je dobře, protože my lidé mohou nyní 833 00:36:54,120 --> 00:36:56,470 představit, že se jedná čtyři různé řetězce. 834 00:36:56,470 --> 00:36:59,540 Není to jen jedna sekvence spousty postav. 835 00:36:59,540 --> 00:37:04,190 Takže počítač, a pak, zatím, může trvat řetězec jako Zamyla, 836 00:37:04,190 --> 00:37:07,220 dát každé z těchto písmen uvnitř bajtu paměti. 837 00:37:07,220 --> 00:37:10,400 Ale to číslo je mnohem větší, Samozřejmě, než šest znaků. 838 00:37:10,400 --> 00:37:11,690 >> Je tu celá banda RAM. 839 00:37:11,690 --> 00:37:15,330 A tak dále, to mřížka krabic se děje 840 00:37:15,330 --> 00:37:17,560 reprezentovat to, co Alex jen dělal tady na obrazovce. 841 00:37:17,560 --> 00:37:20,937 A teď, Alex, můžeme vám nabídnout modrá nebo oranžová slon z Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Vezmu modrý slon. 843 00:37:22,270 --> 00:37:23,120 David J. Malan: modrý slon. 844 00:37:23,120 --> 00:37:25,580 Tak velký potlesk, kdybychom mohli, Alexe zde. 845 00:37:25,580 --> 00:37:26,100 >> [APPLAUSE] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Děkuji. 847 00:37:26,766 --> 00:37:28,820 David J. Malan: Děkuji. 848 00:37:28,820 --> 00:37:36,230 Tak je stánek s jídlem, které, i když vzor trochu měnily v průběhu času zde 849 00:37:36,230 --> 00:37:40,430 na desce, tam byl tento vymezení mezi jednotlivými řetězci 850 00:37:40,430 --> 00:37:42,610 že Alex má pro nás. 851 00:37:42,610 --> 00:37:45,230 Nyní počítače, upřímně řečeno, mohl udělat totéž. 852 00:37:45,230 --> 00:37:48,210 Mohli druh plop řetězce kdekoli v paměti RAM. 853 00:37:48,210 --> 00:37:50,710 Až tady, tady, tady, tady dole. 854 00:37:50,710 --> 00:37:52,020 >> Mohli by dělat přesně to. 855 00:37:52,020 --> 00:37:54,280 Ale, samozřejmě, to je asi není nejlepší plánování. 856 00:37:54,280 --> 00:37:54,780 Je to tak? 857 00:37:54,780 --> 00:37:57,340 Pokud jsem si žádá Alex se se jména, pravděpodobně, že by 858 00:37:57,340 --> 00:38:01,370 dát ještě víc tady, možná až tady, tady, tady, nakonec 859 00:38:01,370 --> 00:38:02,211 sem. 860 00:38:02,211 --> 00:38:05,460 Ale s trochu více plánování, jistě, můžeme položit věci čistěji. 861 00:38:05,460 --> 00:38:07,350 A vskutku, to je to, co počítač dělá. 862 00:38:07,350 --> 00:38:10,720 >> Ale úlovek je, že v případě, že další řetězec dostanu 863 00:38:10,720 --> 00:38:14,050 po Zamyla je něco, co jako Belinda, 864 00:38:14,050 --> 00:38:17,929 navrhnout, kde bychom mohli napsat písmeno b s ohledem na tuto mřížku? 865 00:38:17,929 --> 00:38:18,720 Kam by jste šli? 866 00:38:18,720 --> 00:38:21,480 Na pravé straně a, pod z, pod A? 867 00:38:21,480 --> 00:38:23,204 Co by vaše první instinkt je? 868 00:38:23,204 --> 00:38:24,120 Diváků: Pod z. 869 00:38:24,120 --> 00:38:25,100 David J. Malan: Takže pod z. 870 00:38:25,100 --> 00:38:26,530 A to je dost jednoduché, že? 871 00:38:26,530 --> 00:38:29,321 Je to docela hezké, to je to, co děláme na klávesnici, když stisknete klávesu Enter, 872 00:38:29,321 --> 00:38:31,770 nebo e-mail při vytváření seznam s odrážkami věcí. 873 00:38:31,770 --> 00:38:34,310 Ale realita je, že počítače se snaží být efektivnější, 874 00:38:34,310 --> 00:38:37,170 a nacpat rozhodně tolik data do paměti, jak je to možné, 875 00:38:37,170 --> 00:38:38,890 takže nemusíte ztrácet bajtů. 876 00:38:38,890 --> 00:38:41,545 Takže nemusíte ztrácet jakékoliv obrazovky nemovitostí. 877 00:38:41,545 --> 00:38:44,170 A problém však je, že pokud budeme doslova dal dopis 878 00:38:44,170 --> 00:38:49,940 b poté, jak se budeme vědět, kde Zamyla jméno končí 879 00:38:49,940 --> 00:38:51,840 a Belinda jméno začíná? 880 00:38:51,840 --> 00:38:55,270 Takže jste pro člověka právě navrhla, dobře, stiskněte klávesu Enter, v podstatě. 881 00:38:55,270 --> 00:38:56,410 Dej to dole. 882 00:38:56,410 --> 00:38:59,750 Nebo dokonce stejně jako Alex, stačí začít psát další název pod předchozí, 883 00:38:59,750 --> 00:39:01,583 a dále, že jeden, a pak pod tímto jeden. 884 00:39:01,583 --> 00:39:02,510 To je vizuální podnět. 885 00:39:02,510 --> 00:39:05,960 >> Počítače mají další vizuální podnět, ale je to trochu stručnější. 886 00:39:05,960 --> 00:39:07,840 Je to funky charakter. 887 00:39:07,840 --> 00:39:11,890 Lomítko 0, což je možná připomínající obrácené lomítko n, 888 00:39:11,890 --> 00:39:12,640 a tak dále, se. 889 00:39:12,640 --> 00:39:14,120 Speciální escape sekvence. 890 00:39:14,120 --> 00:39:19,120 Zpětné lomítko 0 je způsob, jak což představuje osm nula bitů v řadě. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Způsob, jak vyjádřit, že není hit číslo nula na klávesnici, 893 00:39:26,130 --> 00:39:28,140 protože ve skutečnosti, že je ASCII char. 894 00:39:28,140 --> 00:39:30,990 Vypadá to, že čísla, ale je vlastně desetinné číslo 895 00:39:30,990 --> 00:39:35,910 který představuje oběžník glyph, kruhový písmo. 896 00:39:35,910 --> 00:39:38,410 Mezitím, zpětné lomítko Nula znamená, doslova 897 00:39:38,410 --> 00:39:40,700 dal osm nula bajtů tu pro mě. 898 00:39:40,700 --> 00:39:42,136 >> Tak tohle je poněkud arbitrární. 899 00:39:42,136 --> 00:39:44,260 Mohli jsme použít žádný vzor bitů, ale svět 900 00:39:44,260 --> 00:39:46,610 rozhodla o několik let před, že představují 901 00:39:46,610 --> 00:39:49,710 konec řetězce v paměti, jen dát spoustu nul. 902 00:39:49,710 --> 00:39:51,000 Vzhledem k tomu, můžeme zjistit, že. 903 00:39:51,000 --> 00:39:54,790 Teď to znamená, že žádný dopis abeceda může být reprezentován nulami. 904 00:39:54,790 --> 00:39:58,480 >> Ale to je v pořádku, jsme již viděli že jsme použili 65 o až v 97 nahoru. 905 00:39:58,480 --> 00:40:00,290 Jsme neměli nikam téměř na samé nuly. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Takže Belinda v paměti počítače je vlastně jít sem. 908 00:40:06,540 --> 00:40:09,764 Já jsem nakreslil ve žluté jen k tomu naši pozornost. 909 00:40:09,764 --> 00:40:11,680 A oznámení, taky to je zcela libovolné. 910 00:40:11,680 --> 00:40:12,680 Já jsem nakreslil jako mřížka. 911 00:40:12,680 --> 00:40:14,460 Jako RAM je jen nějaký fyzický objekt. 912 00:40:14,460 --> 00:40:17,300 Nemusí to nutně mít řádky a sloupce, sám o sobě. 913 00:40:17,300 --> 00:40:20,490 Je to jen má spoustu bajtů implementovány v hardwaru nějak. 914 00:40:20,490 --> 00:40:22,817 Ale pokud po Belinda I zadali Gabe jménem, 915 00:40:22,817 --> 00:40:25,650 on skončí tady v paměti, a když jsem napsal v Daven jménem, 916 00:40:25,650 --> 00:40:27,316 Například, on skončí tady. 917 00:40:27,316 --> 00:40:29,310 A mohu i nadále napsat i více jmen. 918 00:40:29,310 --> 00:40:32,100 >> Bohužel, když se pokusím napsat super dlouhý název, 919 00:40:32,100 --> 00:40:33,730 Možná nakonec k vyčerpání paměti. 920 00:40:33,730 --> 00:40:37,810 V takovém případě je getString bude vrátit NULL, jak jsme řekli. 921 00:40:37,810 --> 00:40:41,720 Ale naštěstí, alespoň v této vizuální tady jsme se nedostali tak daleko. 922 00:40:41,720 --> 00:40:45,860 >> Co je pěkné je, že teď to Obecná myšlenka léčení věci 923 00:40:45,860 --> 00:40:49,720 jako v krabicích je zástupce rys C 924 00:40:49,720 --> 00:40:52,690 a mnoho jazyků, známý jako pole. 925 00:40:52,690 --> 00:40:55,490 Pole je jiný typ dat. 926 00:40:55,490 --> 00:40:57,380 Je to datová struktura, chcete-li. 927 00:40:57,380 --> 00:41:01,160 Struktura ve smyslu toho opravdu, druh, vypadá jako krabice, alespoň 928 00:41:01,160 --> 00:41:02,320 ve své mysli. 929 00:41:02,320 --> 00:41:09,680 Pole je souvislá posloupnost stejných datových typů, 930 00:41:09,680 --> 00:41:11,330 zády k sobě k sobě k sobě. 931 00:41:11,330 --> 00:41:14,720 >> Takže řetězec, v jiných slova, je pole znaků. 932 00:41:14,720 --> 00:41:16,120 Řada znaků. 933 00:41:16,120 --> 00:41:19,070 Ale ukazuje se, můžete mít pole hroznů věcí. 934 00:41:19,070 --> 00:41:21,870 Ve skutečnosti, můžeme dát i čísla v poli. 935 00:41:21,870 --> 00:41:23,920 Takže formě, v níž jdeme na začátek 936 00:41:23,920 --> 00:41:26,590 prohlašuje, tato data struktura známá jako matici 937 00:41:26,590 --> 00:41:28,250 bude také používat hranaté závorky. 938 00:41:28,250 --> 00:41:31,500 Ale tyto hranaté závorky budou mají různý význam v tomto kontextu. 939 00:41:31,500 --> 00:41:33,450 >> A ať se na to takto. 940 00:41:33,450 --> 00:41:36,780 Představme si, že jsem otevřel do nového souboru zde. 941 00:41:36,780 --> 00:41:38,535 A já jsem uložit jako ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 A já budu uložit to v mé složce zde. 944 00:41:43,470 --> 00:41:46,130 A teď budu pokračovat a začněte psát něco 945 00:41:46,130 --> 00:41:53,940 jako patří CS50.h, patří stdio.h, int main prázdnotu. 946 00:41:53,940 --> 00:41:57,370 A pak uvnitř tady, chci nejprve mít int s názvem věku. 947 00:41:57,370 --> 00:42:01,371 >> A já budu používat to, aby si int od uživatele na jeho věku. 948 00:42:01,371 --> 00:42:04,620 Ale tento program je určen pro použití více lidí, z jakéhokoli kontextu. 949 00:42:04,620 --> 00:42:05,490 Mám řadu lidí. 950 00:42:05,490 --> 00:42:08,281 Všechny z nich mají psát ve svých věk možná nějaký, já nevím, 951 00:42:08,281 --> 00:42:10,530 soutěže nebo akce , že jsem přišel na. 952 00:42:10,530 --> 00:42:13,030 Takže další člověk, jsem Potřebuju další proměnné. 953 00:42:13,030 --> 00:42:15,790 >> Protože když jsem to věk dostane vezmi_int, to je 954 00:42:15,790 --> 00:42:18,500 jít na hadry, nebo přepsat věk předchozího osoby. 955 00:42:18,500 --> 00:42:19,760 Takže to není dobré. 956 00:42:19,760 --> 00:42:21,790 Takže můj první instinkt může být, oh, všechno v pořádku, 957 00:42:21,790 --> 00:42:26,260 když chci získat více lidí'S ages-- říkejme tuto age1, 958 00:42:26,260 --> 00:42:31,280 int age2 dostane int, int Age3 dostane vezmi_int. 959 00:42:31,280 --> 00:42:35,340 A teď budu používat nějaký pseudokód kód zde. 960 00:42:35,340 --> 00:42:37,679 >> Udělejte něco s těmi čísly. 961 00:42:37,679 --> 00:42:40,470 Necháme na další den, co děláme tam, protože jsme jen 962 00:42:40,470 --> 00:42:44,200 péče o chvíli o age1, age2, Age3. 963 00:42:44,200 --> 00:42:46,450 Bohužel, jakmile jsem zkompilovat tento program 964 00:42:46,450 --> 00:42:51,140 a dát ji do přední části skutečných uživatelů, co je zásadně špatný tvar 965 00:42:51,140 --> 00:42:53,890 rozhodnutí, které jsem Zdá se, že udělal? 966 00:42:53,890 --> 00:42:54,624 Jo? 967 00:42:54,624 --> 00:42:55,499 Diváků: [neslyšitelné] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 David J. Malan: Ano, Ani jsem se snažil 970 00:42:59,820 --> 00:43:02,028 přijít na to, jak mnoho věků to vlastně zajímá? 971 00:43:02,028 --> 00:43:05,380 Mám-li méně než tři lidé tady, a tedy méně než tři věkové kategorie, 972 00:43:05,380 --> 00:43:07,260 Jsem stále slepě očekával tři. 973 00:43:07,260 --> 00:43:08,720 Bůh chraň, čtyři lidé objeví. 974 00:43:08,720 --> 00:43:10,990 Můj program prostě nebude ani podporovat je. 975 00:43:10,990 --> 00:43:13,280 >> A tak to, dlouhý příběh Stručně řečeno, je to dobrý zvyk. 976 00:43:13,280 --> 00:43:13,780 Je to tak? 977 00:43:13,780 --> 00:43:16,530 Byl jsem v podstatě kopírování a vložení kódu a jen ladění 978 00:43:16,530 --> 00:43:17,430 názvy proměnných. 979 00:43:17,430 --> 00:43:22,410 A můj bože, kdyby jste měli, ne tři věku, ale 10 nebo 100, nebo dokonce 6500 980 00:43:22,410 --> 00:43:23,820 vysokoškoláci, například. 981 00:43:23,820 --> 00:43:26,950 To nebude zvlášť elegantní kód, nebo udržitelné. 982 00:43:26,950 --> 00:43:29,200 Budeš muset Změňte program pokaždé 983 00:43:29,200 --> 00:43:30,760 Váš Počet osob změn. 984 00:43:30,760 --> 00:43:35,090 >> Takže naštěstí, v naší aktuální ages.c soubor pro dnešek, 985 00:43:35,090 --> 00:43:36,970 Máme více chytré řešení. 986 00:43:36,970 --> 00:43:39,800 Za prvé, já jdu si půjčit konstrukci jsme použili několikrát, 987 00:43:39,800 --> 00:43:43,744 to dělat, zatímco smyčky, aby si počet lidí v místnosti. 988 00:43:43,744 --> 00:43:46,910 Jdu jen obtěžovat uživatele, znovu a znovu, dokud on nebo ona mi dává 989 00:43:46,910 --> 00:43:49,260 hodnota n, které je kladné celé číslo. 990 00:43:49,260 --> 00:43:51,590 >> Mohl jsem použít, poslední čas se dostat pozitivní int. 991 00:43:51,590 --> 00:43:53,720 Ale my nemáme, že pro skutečné, tak jsem šel dopředu 992 00:43:53,720 --> 00:43:55,660 a znovu realizovat tuto myšlenku. 993 00:43:55,660 --> 00:43:58,410 A teď tady dole, to je nový trik. 994 00:43:58,410 --> 00:44:02,260 V souladu 27, jako komentáře v řádku 26 naznačuje, 995 00:44:02,260 --> 00:44:05,180 deklarovat pole, ve kterém uložit věku každého. 996 00:44:05,180 --> 00:44:09,320 >> Takže pokud se chcete dostat, a ne jeden int, ne dva ints, ale celá parta ints. 997 00:44:09,320 --> 00:44:13,800 Konkrétně n celá čísla, byly n mohlo být tři, může být 100, může být 1000. 998 00:44:13,800 --> 00:44:17,570 Syntax, prostě, je řekněme, jaký typ dat chcete? 999 00:44:17,570 --> 00:44:19,620 Co chcete volat že kus paměti? 1000 00:44:19,620 --> 00:44:23,530 Co chcete volat do sítě že vypadá takhle obrazně? 1001 00:44:23,530 --> 00:44:27,700 >> A v závorce tady, říkáš jak velký chcete pole být. 1002 00:44:27,700 --> 00:44:30,450 A tak dříve, když jsem řekl, že Syntaxe je tu trochu jiný, 1003 00:44:30,450 --> 00:44:33,614 jsme stále pomocí hranatých závorek, ale když jsem prohlásil pole, 1004 00:44:33,614 --> 00:44:35,530 počet vnitřek Hranaté závorky prostředky 1005 00:44:35,530 --> 00:44:37,610 jak velký chcete pole být. 1006 00:44:37,610 --> 00:44:42,490 >> Naproti tomu, když jsme používali s držák i před chvílí, to, řetězec, 1007 00:44:42,490 --> 00:44:46,820 je skutečně řada znaků, ale i když nejste deklarování proměnné, 1008 00:44:46,820 --> 00:44:49,760 jak se toto klíčové slovo zde, jste prostě dostat 1009 00:44:49,760 --> 00:44:54,280 specifický index, specifický prvek z tohoto pole. 1010 00:44:54,280 --> 00:44:57,090 Jakmile víme, že ostatní to je jednoduché. 1011 00:44:57,090 --> 00:45:00,765 Pokud se objeví nové já poprvé bude k vytištění co je věk osoby čísla i. 1012 00:45:00,765 --> 00:45:03,890 Tam, kde jsem jen říct, osoba číslo jedna, osoba číslo dvě, osoba číslo tři. 1013 00:45:03,890 --> 00:45:06,306 >> A já jsem jen dělal aritmetiku, tak, že stejně jako normální lidé, 1014 00:45:06,306 --> 00:45:09,030 počítáme od jednoho pro tento programu, a to od nuly. 1015 00:45:09,030 --> 00:45:13,620 Pak jsem zavolat vezmi_int, ale uložit odpověď ve věku bracketing i. 1016 00:45:13,620 --> 00:45:16,610 Což je i'th věk v poli. 1017 00:45:16,610 --> 00:45:21,640 Takže zatímco poslední době jsme byli léčení Tyto boxy jsou znaky pro Zamyla jménem, 1018 00:45:21,640 --> 00:45:22,490 a další. 1019 00:45:22,490 --> 00:45:26,530 Nyní, tyto krabice představují 32 bitů, nebo čtyři bajty 1020 00:45:26,530 --> 00:45:29,510 ve kterých je možné uložit int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Z nichž všechny, opět, jsou stejného datového typu. 1022 00:45:31,890 --> 00:45:33,890 >> Teď dělám něco hloupé, jako čas ubíhá, jen 1023 00:45:33,890 --> 00:45:35,510 ospravedlnit psaní tohoto programu. 1024 00:45:35,510 --> 00:45:40,050 A pak tady dole, jsem zase opakovat přes pole říká, ode dneška za rok, 1025 00:45:40,050 --> 00:45:43,090 osoba číslo jedna vůle něco let. 1026 00:45:43,090 --> 00:45:45,010 A přijít na to, že math-- Myslím, že to 1027 00:45:45,010 --> 00:45:49,260 není příliš složité arithmetic-- Jen jsem přidat jeden jejich věku. 1028 00:45:49,260 --> 00:45:51,240 Stačí prokázat, opět to. 1029 00:45:51,240 --> 00:45:57,910 >> Stejně jako mohu index do řetězce, s, Takže můžu index do pole věků, 1030 00:45:57,910 --> 00:45:59,950 takhle tam. 1031 00:45:59,950 --> 00:46:03,340 Takže tam, kde to bude možné, že nás? 1032 00:46:03,340 --> 00:46:07,070 Tak uvidíme, nakonec, pár věcí, které v příštích dnech. 1033 00:46:07,070 --> 00:46:09,510 Jeden, celou tu dobu, kdy psaní vlastních programů, 1034 00:46:09,510 --> 00:46:11,239 jako je Mario, chamtivý, úvěru. 1035 00:46:11,239 --> 00:46:13,780 Byli jste psát název program a stisknutím klávesy Enter. 1036 00:46:13,780 --> 00:46:15,610 A pak se dostat vstup uživatele. 1037 00:46:15,610 --> 00:46:18,137 >> S getString, vezmi_int, getLongLong, nebo podobně. 1038 00:46:18,137 --> 00:46:20,720 Ale ukazuje se, že C podpěry něco, co nazývá příkazový řádek 1039 00:46:20,720 --> 00:46:25,740 argumenty, které nás bude nechat ve skutečnosti se na slova, která zadáte, 1040 00:46:25,740 --> 00:46:28,570 na blikající řádku za jménem vašeho programu. 1041 00:46:28,570 --> 00:46:31,430 >> Takže v příštích dnech, vám mohl psát něco jako Caesar, 1042 00:46:31,430 --> 00:46:34,950 nebo ./caesar číslo 13, později. 1043 00:46:34,950 --> 00:46:36,070 Uvidíme, jak to funguje. 1044 00:46:36,070 --> 00:46:37,550 Protože ve skutečnosti, v problém nastavit dva, my jsme 1045 00:46:37,550 --> 00:46:39,383 tě představit aby ještě něco 1046 00:46:39,383 --> 00:46:42,360 připomíná Ralphie je napadnout dříve kartografie. 1047 00:46:42,360 --> 00:46:43,970 Umění zakódování informací. 1048 00:46:43,970 --> 00:46:46,660 To ve skutečnosti, je velmi připomíná, co Ralphie udělal. 1049 00:46:46,660 --> 00:46:51,380 >> Toto je příklad šifrování algoritmus nazvaný ROT13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Což jednoduše znamená otočit písmena v abecedě 13 míst. 1051 00:46:54,910 --> 00:46:58,309 A pokud to uděláte, uvidíte nyní co je snad známá fráze. 1052 00:46:58,309 --> 00:47:01,100 Ale způsob, jakým budeme používat Tato, v konečném důsledku, je obecně. 1053 00:47:01,100 --> 00:47:04,390 >> V P set dva, ve standardní verzi, budete realizovat několik šifer, 1054 00:47:04,390 --> 00:47:06,720 jeden s názvem Caesar, jeden s názvem Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Oba jsou rotační šifry, v tom, že se nějak 1056 00:47:10,090 --> 00:47:11,826 zase jeden dopis na jiné písmeno. 1057 00:47:11,826 --> 00:47:12,950 A Caesar je super jednoduché. 1058 00:47:12,950 --> 00:47:16,220 Můžete přidat jeden, přidejte 13, nebo nějaké číslo až do 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere dělá, že na jedno písmeno základ. 1060 00:47:19,570 --> 00:47:22,140 Takže Vigenère, jak uvidíte v spec, je bezpečnější. 1061 00:47:22,140 --> 00:47:24,973 >> Ale na konci dne, co budete zavádění a P nastavit dva, 1062 00:47:24,973 --> 00:47:29,050 je to klíč, který používáte oba pro šifrování a dešifrování. 1063 00:47:29,050 --> 00:47:32,160 S odkazem na procesu soustružení prostý text, některé původní zprávy, 1064 00:47:32,160 --> 00:47:34,490 do Cypher textu, který je něco, co šifrována. 1065 00:47:34,490 --> 00:47:36,220 A pak ji znovu dešifrování. 1066 00:47:36,220 --> 00:47:38,119 >> V hacker vydání, Mezitím, budete 1067 00:47:38,119 --> 00:47:40,660 za úkol něco podobného v duchu, kde budeme vám 1068 00:47:40,660 --> 00:47:44,610 soubor, z typického Linux, nebo Mac nebo Unix počítač s názvem Etsy 1069 00:47:44,610 --> 00:47:47,800 heslo, které obsahuje jeden celek banda uživatelských jmen a hesel. 1070 00:47:47,800 --> 00:47:50,932 A ty hesla mají všechny bylo zakódováno, nebo hash, 1071 00:47:50,932 --> 00:47:53,140 abych tak řekl, přesněji jak uvidíte v spec. 1072 00:47:53,140 --> 00:47:57,090 >> A hacker vydání bude výzvou jste se při vstupní takhle, 1073 00:47:57,090 --> 00:47:58,800 a praskání heslo. 1074 00:47:58,800 --> 00:48:02,590 To znamená, že přijít na to, co je heslo Lidský vlastně byl. 1075 00:48:02,590 --> 00:48:05,570 Vzhledem k tomu, samozřejmě, hesla jsou obecně nejsou uloženy v jasné, 1076 00:48:05,570 --> 00:48:08,260 a obecně hesla by mělo být těžké uhodnout. 1077 00:48:08,260 --> 00:48:09,610 To není častý případ. 1078 00:48:09,610 --> 00:48:12,110 >> A to, co si myslel, že jsme si dělat, je závěr pár minut 1079 00:48:12,110 --> 00:48:15,160 pohled na zvláště špatná volba hesla 1080 00:48:15,160 --> 00:48:17,260 z filmu můžete připomenout láskou. 1081 00:48:17,260 --> 00:48:18,915 A pokud ne, měli byste pronajmout. 1082 00:48:18,915 --> 00:48:20,070 >> [PŘEHRÁVÁNÍ] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet Jste ďábel, co se děje? 1084 00:48:22,320 --> 00:48:24,240 Co to děláš s mou dcerou? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Mi představit brilantní mladý plastický chirurg, 1086 00:48:28,010 --> 00:48:30,010 Doktor Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Největší Rhinoplastika muž Celý vesmír a Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> -Váš Výsosti. 1089 00:48:36,140 --> 00:48:36,820 >> -Nose Práce? 1090 00:48:36,820 --> 00:48:37,700 Nerozumím tomu. 1091 00:48:37,700 --> 00:48:39,070 Už měl nos. 1092 00:48:39,070 --> 00:48:40,800 Bylo jí sweet 16 k dispozici. 1093 00:48:40,800 --> 00:48:42,590 >> Ne, to není to, co si myslíte. 1094 00:48:42,590 --> 00:48:44,490 Je to mnohem, mnohem horší. 1095 00:48:44,490 --> 00:48:48,160 Pokud si nepřejete, aby mi Kombinace s leteckou štít, 1096 00:48:48,160 --> 00:48:52,748 Lékař Schlotkin dám svůj dceru svou starou nos. 1097 00:48:52,748 --> 00:48:53,748 - [Vzdechy] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Kde jsi to vzal? 1100 00:48:59,652 --> 00:49:00,640 >> -Dobře. 1101 00:49:00,640 --> 00:49:02,506 Řeknu, řeknu. 1102 00:49:02,506 --> 00:49:03,498 >> Ne, tati, no. 1103 00:49:03,498 --> 00:49:04,490 Nesmíte. 1104 00:49:04,490 --> 00:49:06,090 >> Máš pravdu drahá. 1105 00:49:06,090 --> 00:49:07,390 Budeš mi chybět váš nový nos. 1106 00:49:07,390 --> 00:49:10,990 Ale já jim na to říct kombinace bez ohledu na to, co se děje. 1107 00:49:10,990 --> 00:49:12,450 >> -Velmi Dobře. 1108 00:49:12,450 --> 00:49:14,830 Doktor Schlotkin, dělat to nejhorší. 1109 00:49:14,830 --> 00:49:15,744 >> -Můj Potěšení. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> Ne! 1112 00:49:20,800 --> 00:49:22,780 Počkat, počkat. 1113 00:49:22,780 --> 00:49:24,000 Řeknu. 1114 00:49:24,000 --> 00:49:25,830 Řeknu. 1115 00:49:25,830 --> 00:49:28,270 >> Já věděl, že to bude fungovat. 1116 00:49:28,270 --> 00:49:31,390 Dobře, dej mi to. 1117 00:49:31,390 --> 00:49:36,220 >> -The Kombinace je jedna. 1118 00:49:36,220 --> 00:49:36,740 >> Onu. 1119 00:49:36,740 --> 00:49:37,473 >> Onu. 1120 00:49:37,473 --> 00:49:37,972 -Dvě. 1121 00:49:37,972 --> 00:49:38,471 -Dvě. 1122 00:49:38,471 --> 00:49:39,800 -Dvě. 1123 00:49:39,800 --> 00:49:40,300 -Tři. 1124 00:49:40,300 --> 00:49:40,800 -Tři. 1125 00:49:40,800 --> 00:49:41,800 -Tři. 1126 00:49:41,800 --> 00:49:42,300 -Čtyři. 1127 00:49:42,300 --> 00:49:42,800 -Čtyři. 1128 00:49:42,800 --> 00:49:44,707 -Čtyři. 1129 00:49:44,707 --> 00:49:45,521 -Pět. 1130 00:49:45,521 --> 00:49:46,430 -Pět. 1131 00:49:46,430 --> 00:49:47,930 -Pět. 1132 00:49:47,930 --> 00:49:53,480 Takže kombinace je jeden, dva, tři, čtyři, pět. 1133 00:49:53,480 --> 00:49:56,140 To je ten nejhloupější kombinace Co jsem kdy slyšel v mém životě. 1134 00:49:56,140 --> 00:49:58,640 To je ten druh věcí an idiot bude mít na jeho zavazadlech. 1135 00:49:58,640 --> 00:50:00,000 >> Děkuji, Vaše Výsosti. 1136 00:50:00,000 --> 00:50:01,340 >> [REMOTE CLICKS] 1137 00:50:01,340 --> 00:50:02,450 >> Co jste udělal? 1138 00:50:02,450 --> 00:50:03,800 >> Já vypnutý zdi. 1139 00:50:03,800 --> 00:50:05,010 >> Ne, ty ne, ty vypne celý film. 1140 00:50:05,010 --> 00:50:06,220 >> Já muselo stiskl špatné tlačítko. 1141 00:50:06,220 --> 00:50:07,064 >> No, dal ji zpět na! 1142 00:50:07,064 --> 00:50:07,910 Dejte film zpět! 1143 00:50:07,910 --> 00:50:08,300 >> Ano, pane! 1144 00:50:08,300 --> 00:50:08,799 Ano, pane. 1145 00:50:08,799 --> 00:50:09,660 -Jdeme, Arnolde. 1146 00:50:09,660 --> 00:50:10,450 Pojď, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Samozřejmě, že vím, že jsem to muset účtovat za to. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 No? 1150 00:50:17,220 --> 00:50:17,802 Zabralo to? 1151 00:50:17,802 --> 00:50:18,510 Kde je král? 1152 00:50:18,510 --> 00:50:20,218 >> -Je Pracoval, pane, my mají kombinaci. 1153 00:50:20,218 --> 00:50:20,740 Skvěle. 1154 00:50:20,740 --> 00:50:24,810 Nyní můžeme vzít i tu poslední dech čerstvého vzduchu z planety Druidia. 1155 00:50:24,810 --> 00:50:25,890 Co je to kombinace? 1156 00:50:25,890 --> 00:50:28,155 >> Onu, dva, tři, čtyři, pět. 1157 00:50:28,155 --> 00:50:29,890 >> Onu, dva, tři, čtyři, pět? 1158 00:50:29,890 --> 00:50:30,390 Ano. 1159 00:50:30,390 --> 00:50:31,110 -To Je úžasné. 1160 00:50:31,110 --> 00:50:34,550 Mám stejný kombinace na mém zavazadle. 1161 00:50:34,550 --> 00:50:37,160 Připravte Spaceball 1 pro okamžitý odjezd. 1162 00:50:37,160 --> 00:50:38,160 >> Ano, pane. 1163 00:50:38,160 --> 00:50:40,745 >> -A Změnit kombinace na mém zavazadle. 1164 00:50:40,745 --> 00:50:41,578 [Uzavírání dveří SOUND] 1165 00:50:41,578 --> 00:50:42,064 [Cinkání DVEŘÍ bít PŘILBY] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [END VIDEOPŘEHRÁVÁNÍ] 1168 00:50:43,383 --> 00:50:46,700 David J. Malan: To je pro CS50, uvidíme se příští týden. 1169 00:50:46,700 --> 00:50:49,883 Vypravěč: A teď, Hluboká Myšlenky, podle Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: Kódování v jazyce C je tak mnohem těžší, než Scratch. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch byla lež. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [SMÍCH SoundBITE] 1175 00:51:01,430 --> 00:51:02,486