1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [§ 4] [méně komfortní] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Harvard University] 3 00:00:04,000 --> 00:00:07,000 [To je CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Dobře, vítejte zpět do oddílu. 5 00:00:10,000 --> 00:00:13,000 V tomto týdnu se části budeme dělat pár věcí. 6 00:00:13,000 --> 00:00:17,000 Budeme nejprve nastavit rekapitulace Problém 2, 7 00:00:17,000 --> 00:00:20,000 která je Caesar a Vigenère problém set. 8 00:00:20,000 --> 00:00:23,000 A pak budeme ponořit se do Quiz hodnocení 0 9 00:00:23,000 --> 00:00:26,000 a strávit trochu času rekapituluje, co jsme mluvili o 10 00:00:26,000 --> 00:00:30,000 v každém z přednášek tak daleko, a my také udělat několik problémů 11 00:00:30,000 --> 00:00:32,000 z předchozího roku kvízy. 12 00:00:32,000 --> 00:00:36,000 Tak vy máte dobrý způsob, jak se připravit na to. 13 00:00:36,000 --> 00:00:40,000 >> Chcete-li začít, jsem nastartoval až na pár dobrých řešení 14 00:00:40,000 --> 00:00:45,000 pro předchozí problému nastavení, Problem Set 2, do tohoto prostoru. 15 00:00:45,000 --> 00:00:48,000 Pokud jste vše hit odkaz, 16 00:00:48,000 --> 00:00:53,000 a pokud kliknete moje jméno a klikněte na své první revizi 17 00:00:53,000 --> 00:00:56,000 uvidíte caesar.c, což je přesně to, co jsem při pohledu na. 18 00:00:56,000 --> 00:01:00,000 Pojďme si o tom promluvit opravdu rychle. 19 00:01:00,000 --> 00:01:02,000 To je jen ukázka řešení. 20 00:01:02,000 --> 00:01:05,000 Toto není nutně dokonalé řešení. 21 00:01:05,000 --> 00:01:08,000 Existuje mnoho různých způsobů, jak napsat to, 22 00:01:08,000 --> 00:01:10,000 ale existuje několik věcí, které jsem chtěl zdůraznit 23 00:01:10,000 --> 00:01:13,000 že jsem viděl, když jsem byl třídění, časté chyby, které si myslím, že 24 00:01:13,000 --> 00:01:18,000 Toto řešení má velmi dobrou práci manipulaci. 25 00:01:18,000 --> 00:01:22,000 >> První má nějaký záhlaví komentáři nahoře. 26 00:01:22,000 --> 00:01:25,000 Na tratích 1 až 7 se zobrazí podrobnosti, 27 00:01:25,000 --> 00:01:28,000 Co přesně tento program dělá. 28 00:01:28,000 --> 00:01:32,000 Dobrý běžná praxe, když píšete kód v jazyce C 29 00:01:32,000 --> 00:01:35,000 bez ohledu na to, pokud je váš program obsaženy v jediném souboru nebo 30 00:01:35,000 --> 00:01:38,000 ať už je to rozděleno na více souborů, je mít nějaký 31 00:01:38,000 --> 00:01:40,000 orientovat komentář nahoře. 32 00:01:40,000 --> 00:01:43,000 To je také pro lidi, kteří jdou ven a psát kód v reálném světě. 33 00:01:43,000 --> 00:01:47,000 To je místo, kde se bude dát informace o autorských právech. 34 00:01:47,000 --> 00:01:50,000 Níže jsou # obsahuje. 35 00:01:50,000 --> 00:01:55,000 Na řádku 16 je tu tento # define, která se vrátíme v jen trochu. 36 00:01:55,000 --> 00:01:59,000 A pak, jakmile se spustí funkce, jednou hlavní startů, 37 00:01:59,000 --> 00:02:03,000 protože tento program byl obsaženy v jediném funkci 38 00:02:03,000 --> 00:02:09,000 Úplně první věc, která se stane a to je velmi frazeologie a typické programu C 39 00:02:09,000 --> 00:02:14,000 který bere v příkazovém řádku argumentů, je to, že okamžitě zkontroluje 40 00:02:14,000 --> 00:02:18,000 >> pro počet argumentů, argc. 41 00:02:18,000 --> 00:02:24,000 Právě zde vidíme, že tento program je čeká 2 argumenty přesně. 42 00:02:24,000 --> 00:02:27,000 Pamatujte si, že to, že první argument, že je to výjimečný 43 00:02:27,000 --> 00:02:29,000 to je vždy název programu, který je provozován, 44 00:02:29,000 --> 00:02:31,000 je název spustitelného souboru. 45 00:02:31,000 --> 00:02:36,000 A tak to, co to dělá, je, že zabrání uživateli spuštění programu 46 00:02:36,000 --> 00:02:42,000 s více nebo méně argumentů. 47 00:02:42,000 --> 00:02:44,000 Důvodem chceme zkontrolovat tohoto práva daleko je, protože 48 00:02:44,000 --> 00:02:52,000 nemůžeme skutečně přístup k této argv pole tady spolehlivě 49 00:02:52,000 --> 00:02:55,000 dokud jsem zkontroloval, jak je velký. 50 00:02:55,000 --> 00:02:58,000 >> Jedním ze společných chyb, které jsem viděl byli lidé by okamžitě jít 51 00:02:58,000 --> 00:03:01,000 a drapák argv [1]. 52 00:03:01,000 --> 00:03:06,000 Oni si urvat klíče argumentu z pole a se liší až i kontrolu na to, 53 00:03:06,000 --> 00:03:11,000 a pak by udělat test na argc, stejně jako další test, 54 00:03:11,000 --> 00:03:16,000 zda je či není první argument byl skutečně celé číslo ve stejnou dobu, 55 00:03:16,000 --> 00:03:20,000 a že nefunguje, protože v případě, že nejsou dodávané argumenty 56 00:03:20,000 --> 00:03:26,000 budete popadat argument, že tam není, či se pokouší chytit ten, který tam není. 57 00:03:26,000 --> 00:03:29,000 >> Další velkou věc, kterou byste měli všimnout, je, že 58 00:03:29,000 --> 00:03:32,000 vždy chcete vytisknout nějaký užitečných chybové zprávy 59 00:03:32,000 --> 00:03:34,000 pro uživatele orientovat je. 60 00:03:34,000 --> 00:03:37,000 Jsem si jistý, že jste všichni spouštět programy, kde najednou spadne, 61 00:03:37,000 --> 00:03:41,000 a stáhni směšný malý dialog, který se objeví a řekne 62 00:03:41,000 --> 00:03:44,000 něco hrozně tajemné a možná vám chybový kód nebo něco takového 63 00:03:44,000 --> 00:03:47,000 to nedává smysl. 64 00:03:47,000 --> 00:03:50,000 To je místo, kde si opravdu chcete, aby něco užitečného 65 00:03:50,000 --> 00:03:54,000 a cílené na uživatele tak, že při spuštění to jdou "Ach," tvář dlaň. 66 00:03:54,000 --> 00:03:58,000 "Vím přesně, co dělat. Vím, jak to opravit." 67 00:03:58,000 --> 00:04:01,000 >> Pokud nechcete vytisknout zprávu, pak můžete skončit ve skutečnosti 68 00:04:01,000 --> 00:04:04,000 takže uživatel jít prozkoumat svůj zdrojový kód 69 00:04:04,000 --> 00:04:07,000 přijít na to, co se stalo. 70 00:04:07,000 --> 00:04:11,000 Tam jsou také některé časy, které budete používat různé chybové kódy. 71 00:04:11,000 --> 00:04:14,000 Zde jsme jen použit jeden říct, že byla chyba, 72 00:04:14,000 --> 00:04:16,000 došlo k chybě, došlo k chybě. 73 00:04:16,000 --> 00:04:20,000 Větší programy, často programy, které jsou volány jinými programy, 74 00:04:20,000 --> 00:04:25,000 vrátí nějaký zvláštní chybových kódů v různých situacích 75 00:04:25,000 --> 00:04:28,000 programově komunikovat to, co byste jinak 76 00:04:28,000 --> 00:04:32,000 stačí použít pěknou anglickou zprávu pro. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Protože pracujeme se, můžete vidět, že vytáhnout klíč z. 79 00:04:37,000 --> 00:04:40,000 Testujeme, zda klíč zapadá. 80 00:04:40,000 --> 00:04:42,000 Dostáváme zprávu od uživatele. 81 00:04:42,000 --> 00:04:46,000 Důvod, proč jsme to v tom dělat, když smyčka-a to je něco, co se budeme zabývat 82 00:04:46,000 --> 00:04:50,000 v trochu, ale ukázalo se, že pokud zadáte ovládání D 83 00:04:50,000 --> 00:04:54,000 když se dostanete, že GetString řádku na terminálu 84 00:04:54,000 --> 00:04:59,000 co to vlastně dělá, je, že pošle speciální znak 85 00:04:59,000 --> 00:05:01,000 programu. 86 00:05:01,000 --> 00:05:05,000 Je to tzv. ELF nebo konec souboru znak. 87 00:05:05,000 --> 00:05:08,000 A v tomto případě, bude naše zpráva řetězec je null, 88 00:05:08,000 --> 00:05:14,000 takže to není něco, co jsme prověřili v problému sama stanovila. 89 00:05:14,000 --> 00:05:17,000 >> Ale jak budeme pokračovat, teď, když jsme začali mluvit o ukazatele 90 00:05:17,000 --> 00:05:21,000 a dynamické přidělování paměti na haldě, 91 00:05:21,000 --> 00:05:25,000 kontrola null, kdykoli máte funkci, která by mohla 92 00:05:25,000 --> 00:05:30,000 vrátit hodnotu null jako hodnota je něco, co budete chtít dostat ve zvyku dělat. 93 00:05:30,000 --> 00:05:33,000 To je zde především pro ilustraci. 94 00:05:33,000 --> 00:05:36,000 Ale když vidím GetString v budoucnu, 95 00:05:36,000 --> 00:05:41,000 tak z problému Vytvořit 4 na, budete chtít, aby to na paměti. 96 00:05:41,000 --> 00:05:44,000 Opět, to není otázka pro problém Set 3 buď, protože jsme se nevztahuje to ještě. 97 00:05:44,000 --> 00:05:53,000 Nakonec jsme se k této části, kde se dostaneme do hlavního šifrování smyčky, 98 00:05:53,000 --> 00:05:57,000 a je tu pár věcí tady děje. 99 00:05:57,000 --> 00:06:02,000 Za prvé, jsme se iterovat přes celý řetězec zprávy samotné. 100 00:06:02,000 --> 00:06:07,000 Zde jsme drželi strlen volání ve stavu, 101 00:06:07,000 --> 00:06:12,000 které řada z vás poukázali, není skvělý způsob, jak jít. 102 00:06:12,000 --> 00:06:15,000 Ukázalo se, že v tomto případě je to také není velký, 103 00:06:15,000 --> 00:06:20,000 částečně proto, že jsme modifikaci obsahu samotné zprávy 104 00:06:20,000 --> 00:06:27,000 uvnitř smyčky for, takže pokud máme zprávu, která je 10 znaků, 105 00:06:27,000 --> 00:06:32,000 poprvé jsme kdo, že pro vedení strlen vrátí co? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Ale pokud jsme pak upravit zprávu, že jsme změnit jeho 5. charakter, 108 00:06:40,000 --> 00:06:46,000 a hodíme do \ 0 znak v 5. pozici, 109 00:06:46,000 --> 00:06:49,000 na následné iteraci strlen (zpráva) se nevrátí to, co udělal 110 00:06:49,000 --> 00:06:52,000 Vůbec poprvé jsme zopakovali, 111 00:06:52,000 --> 00:06:56,000 ale místo toho vrátí 5, protože jsme hodili v tomto null terminátor, 112 00:06:56,000 --> 00:06:59,000 a řetězec je délka je definována 113 00:06:59,000 --> 00:07:03,000 podle polohy tohoto \ 0. 114 00:07:03,000 --> 00:07:09,000 V tomto případě, je to skvělý způsob, jak jít, protože jsme úpravou na místě. 115 00:07:09,000 --> 00:07:13,000 Ale zjistíte, že je to vlastně překvapivě jednoduché šifrování 116 00:07:13,000 --> 00:07:16,000 pokud můžete získat matematika správné. 117 00:07:16,000 --> 00:07:19,000 Vše, co je nutné je zkontrolovat, zda nebo ne dopis, který jste při pohledu na 118 00:07:19,000 --> 00:07:21,000 je velká nebo malá písmena. 119 00:07:21,000 --> 00:07:24,000 >> Důvod, proč jsme jen pro kontrolu, že a nemáme pro kontrolu 120 00:07:24,000 --> 00:07:27,000 je alfa případ je, protože 121 00:07:27,000 --> 00:07:30,000 pokud znak je velká nebo, pokud je to malé 122 00:07:30,000 --> 00:07:33,000 pak je to určitě abecední znak, 123 00:07:33,000 --> 00:07:38,000 protože nemáme malá a velká číslice. 124 00:07:38,000 --> 00:07:41,000 Druhá věc, kterou děláme, a to je trochu složitější, 125 00:07:41,000 --> 00:07:45,000 je jsme upravili standardní Caesara vzorce 126 00:07:45,000 --> 00:07:49,000 že jsme dali ve specifikaci problému set. 127 00:07:49,000 --> 00:07:52,000 Jaký je rozdíl tady je, že odečte 128 00:07:52,000 --> 00:07:58,000 v případě velkým kapitálem, a pak jsme přidali kapitál A 129 00:07:58,000 --> 00:08:02,000 zpět na konci. 130 00:08:02,000 --> 00:08:05,000 >> Vím, že někteří z vás to udělal ve vašem kódu. 131 00:08:05,000 --> 00:08:09,000 Bylo někdo z vás to ve vašich příspěvků? 132 00:08:09,000 --> 00:08:13,000 To jsi udělal ty. Můžete mi vysvětlit, co to dělá, Sahb? 133 00:08:13,000 --> 00:08:18,000 Odečtením to, protože jste mod hned po něm, 134 00:08:18,000 --> 00:08:21,000 budete muset vzít to tak, že způsob, jakým se dostat [kašel] pozice. 135 00:08:21,000 --> 00:08:25,000 A pak přidáním zpět později si přehodili ten, který jste chtěli. 136 00:08:25,000 --> 00:08:27,000 Jo, přesně tak. 137 00:08:27,000 --> 00:08:32,000 Co Sahb řekl, bylo, že když budeme chtít přidat 138 00:08:32,000 --> 00:08:36,000 naše poselství a naším hlavním společně 139 00:08:36,000 --> 00:08:42,000 a pak mod, že mod že NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 pokud se neshromažďují naší zprávu do příslušné 0-25 rozsahu jako první, 141 00:08:50,000 --> 00:08:54,000 pak bychom mohli skončit dostat opravdu divný číslo 142 00:08:54,000 --> 00:08:59,000 protože hodnoty, které jsme při pohledu na, když se podíváme na zprávy [i], 143 00:08:59,000 --> 00:09:03,000 když se podíváme na té charakteru naší prostý textové zprávy, 144 00:09:03,000 --> 00:09:08,000 je hodnota někde v tomto rozsahu 65 až 122 145 00:09:08,000 --> 00:09:13,000 na základě hodnot ASCII pro velká a až malá písmena z.. 146 00:09:13,000 --> 00:09:18,000 A tak, když jsme mod ji 26 nebo NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 protože to byl náš # define vpravo nahoře tady, 148 00:09:23,000 --> 00:09:28,000 , co se děje, aby nám hodnotu, která je v rozmezí 0 až 25, 149 00:09:28,000 --> 00:09:30,000 a my potřebujeme způsob, jak pak škálování, že zálohovat 150 00:09:30,000 --> 00:09:32,000 a dostat se do příslušné ASCII rozsahu. 151 00:09:32,000 --> 00:09:36,000 Nejjednodušší způsob, jak to udělat, je jen měřítko všechno dolů 152 00:09:36,000 --> 00:09:39,000 do 0-25 rozmezí začít, 153 00:09:39,000 --> 00:09:43,000 a pak se posune vše zpět až na konci. 154 00:09:43,000 --> 00:09:46,000 >> Další častou chybou, že jsem viděl lidi běžet do je, že 155 00:09:46,000 --> 00:09:50,000 pokud nemáte skutečně udělat škálování hned 156 00:09:50,000 --> 00:09:53,000 a přidat zprávu a klíč dohromady a přidat je, řekněme, 157 00:09:53,000 --> 00:09:58,000 do char proměnné, problém s tím 158 00:09:58,000 --> 00:10:01,000 je od zprávy [i] je poměrně velký počet začít s- 159 00:10:01,000 --> 00:10:05,000 pamatujte, že je to minimálně 65, pokud je to velká postava- 160 00:10:05,000 --> 00:10:09,000 Pokud máte velký klíč, řekněme, něco jako 100, 161 00:10:09,000 --> 00:10:13,000 a přidáte ty 2 spolu do podepsána char budeš dostat přetečení. 162 00:10:13,000 --> 00:10:17,000 Budeš si hodnotu, která je větší než 127, 163 00:10:17,000 --> 00:10:22,000 což je největší hodnota, kterou char proměnná může držet. 164 00:10:22,000 --> 00:10:26,000 Opět platí, že je to důvod, proč byste chtěli dělat takové věci začít. 165 00:10:26,000 --> 00:10:29,000 Někteří lidé dostali kolem tomto případě tím, že dělá-li jinde a testování 166 00:10:29,000 --> 00:10:33,000 vidět, když by přetečení před tím, že 167 00:10:33,000 --> 00:10:36,000 ale tento způsob se dostane kolem toho. 168 00:10:36,000 --> 00:10:40,000 A pak se v tomto řešení jsme vytisknout celý řetězec až na samém konci. 169 00:10:40,000 --> 00:10:45,000 Ostatní lidé vytisknout znak v čase. Oba jsou úžasné. 170 00:10:45,000 --> 00:10:51,000 V tomto bodě, to vy máte nějaké dotazy, připomínky ohledně této? 171 00:10:51,000 --> 00:10:56,000 Co se vám líbí, věci se vám nelíbí? 172 00:10:56,000 --> 00:10:58,000 >> Měl jsem otázku. 173 00:10:58,000 --> 00:11:01,000 Možná mi to uniklo během vysvětlení, ale jak se tento program 174 00:11:01,000 --> 00:11:07,000 přeskočit mezery pro připojení klíč k délce textu? 175 00:11:07,000 --> 00:11:10,000 To je jen Caesarova šifra. >> Oh, promiň, jo. 176 00:11:10,000 --> 00:11:13,000 Jo, uvidíme, že. 177 00:11:13,000 --> 00:11:16,000 V kódu Caesar jsme kolem toho, protože 178 00:11:16,000 --> 00:11:18,000 my jen převrácený znaky. 179 00:11:18,000 --> 00:11:27,000 Máme jen otočil je, pokud byli velká nebo malá písmena. 180 00:11:27,000 --> 00:11:32,000 Vy pocit docela dobrý o tom? 181 00:11:32,000 --> 00:11:34,000 Neváhejte kopírovat tento domov, vezměte si ji, 182 00:11:34,000 --> 00:11:37,000 porovnání s tím, co jste napsal. 183 00:11:37,000 --> 00:11:42,000 Rozhodně neváhejte a pošlete otázky o tom taky. 184 00:11:42,000 --> 00:11:46,000 A opět si uvědomit, že cílem zde se svým problémem sety 185 00:11:46,000 --> 00:11:50,000 není dostat vy psát dokonalé kód pro vaše problémové soubory. 186 00:11:50,000 --> 00:11:57,000 Je to vzdělávací zkušenost. Jo. 187 00:11:57,000 --> 00:12:01,000 >> Zpět dělat, zatímco smyčka, pokud se rovná nula, 188 00:12:01,000 --> 00:12:06,000 takže null jen znamená nic, prostě stiskněte klávesu Enter? 189 00:12:06,000 --> 00:12:12,000 Null je speciální ukazatel hodnoty, 190 00:12:12,000 --> 00:12:17,000 a používáme null, když chceme říci, 191 00:12:17,000 --> 00:12:23,000 máme ukazatel proměnnou, která směřovala k ničemu. 192 00:12:23,000 --> 00:12:28,000 A tak typicky to znamená, že tato proměnná, tato zpráva proměnná 193 00:12:28,000 --> 00:12:35,000 je prázdný, a tady, protože jsme pomocí CS50 speciální typ řetězce, 194 00:12:35,000 --> 00:12:37,000 co je CS50 string typ? 195 00:12:37,000 --> 00:12:42,000 Už jste viděli, co to je, když David vytáhl kapuci v přednášce? 196 00:12:42,000 --> 00:12:44,000 Je to funky-je to ukazatel, že jo? 197 00:12:44,000 --> 00:12:48,000 Dobře, jo. >> Je to char *. 198 00:12:48,000 --> 00:12:52,000 A tak opravdu jsme mohli nahradit tento 199 00:12:52,000 --> 00:12:56,000 tady s char * zprávy, 200 00:12:56,000 --> 00:13:04,000 a tak GetString funkce, pokud to není úspěšně dostat řetězec od uživatele, 201 00:13:04,000 --> 00:13:08,000 nemůže analyzovat řetězec, a jeden případ, v němž se nemůže analyzovat řetězec 202 00:13:08,000 --> 00:13:11,000 je-li uživatel zadá konec souboru znak, kontrolní D, 203 00:13:11,000 --> 00:13:17,000 což není něco, co obvykle dělají, ale když se to stane 204 00:13:17,000 --> 00:13:20,000 pak funkce vrátí tuto hodnotu null jako způsob, jak říká 205 00:13:20,000 --> 00:13:23,000 "Hele, já jsem nedostal řetězec." 206 00:13:23,000 --> 00:13:27,000 Co by se stalo, kdybychom nedávejte message = null, 207 00:13:27,000 --> 00:13:30,000 což je něco, jsme to dělali ještě? 208 00:13:30,000 --> 00:13:32,000 Proč by to být problém tady? 209 00:13:32,000 --> 00:13:38,000 Protože vím, že jsme spolu mluvili trochu v přednášce o nevracení paměti. 210 00:13:38,000 --> 00:13:42,000 Jo, pojďme to udělat, a uvidíme, co se stane. 211 00:13:42,000 --> 00:13:44,000 >> Vasila Blaženého otázka byla, co se stane, když vlastně nemáte 212 00:13:44,000 --> 00:13:48,000 Tato zpráva = null test? 213 00:13:48,000 --> 00:13:51,000 Pojďme přejděte až na vrchol. 214 00:13:51,000 --> 00:13:53,000 Vy můžete komentovat to. 215 00:13:53,000 --> 00:13:55,000 Vlastně, já budu šetřit ho v revizi. 216 00:13:55,000 --> 00:13:58,000 To bude revize 3. 217 00:13:58,000 --> 00:14:02,000 Co budete muset udělat, aby spuštění tohoto programu je budete muset kliknout na tento ikonu ozubeného kolečka tady, 218 00:14:02,000 --> 00:14:04,000 a budete muset přidat argument k tomu. 219 00:14:04,000 --> 00:14:10,000 Budete muset dát Klíčovým argumentem, protože chceme předat argument příkazového řádku. 220 00:14:10,000 --> 00:14:13,000 Tady budu dávat mu číslo 3. Líbí se mi 3. 221 00:14:13,000 --> 00:14:19,000 Nyní zoom zpět, spuštění programu. 222 00:14:19,000 --> 00:14:24,000 Je to běh, sestavování, stavebniny. 223 00:14:24,000 --> 00:14:27,000 Jdeme na to. Je to čeká na vyzvání. 224 00:14:27,000 --> 00:14:33,000 Pokud píšu v něčem jako hello-li to šlo? 225 00:14:33,000 --> 00:14:38,000 Oh, můj program trvalo příliš dlouho běžet. Byl jsem jawing příliš dlouho. 226 00:14:38,000 --> 00:14:40,000 Tady to jde. 227 00:14:40,000 --> 00:14:43,000 Teď jsem psát ahoj. 228 00:14:43,000 --> 00:14:46,000 Vidíme, že šifruje vhodně. 229 00:14:46,000 --> 00:14:52,000 Teď, co se stane, když budeme dělat rychlé GetString vrátit null? 230 00:14:52,000 --> 00:14:57,000 Nezapomeň, že říci, že jsme, že po stisknutí ovládacího D ve stejnou dobu. 231 00:14:57,000 --> 00:14:59,000 Budu procházet sem. Uděláme to znovu. 232 00:14:59,000 --> 00:15:01,000 Budova. Tam to jde. 233 00:15:01,000 --> 00:15:04,000 Teď, když jsem narazila ovládání D 234 00:15:04,000 --> 00:15:12,000 Dostal jsem tento řádek, který říká opt/sandbox50/bin/run.sh, segmentation fault. 235 00:15:12,000 --> 00:15:15,000 Už jste viděli, že předtím? 236 00:15:15,000 --> 00:15:17,000 >> [Student] Proč není->> líto? 237 00:15:17,000 --> 00:15:20,000 [Student] Proč není core dump v tomto případě? 238 00:15:20,000 --> 00:15:26,000 Jádro dump je-otázka je proč není core dump tady? 239 00:15:26,000 --> 00:15:29,000 Otázkou je, že může být, ale jádro dump soubor 240 00:15:29,000 --> 00:15:31,000 , který se uloží na pevný disk. 241 00:15:31,000 --> 00:15:34,000 V tomto případě jsme zakázána core dump 242 00:15:34,000 --> 00:15:37,000 na útěku serveru tak, aby nemáme lidi seg kritizovat 243 00:15:37,000 --> 00:15:40,000 a vybudování tun core dump. 244 00:15:40,000 --> 00:15:46,000 Ale můžete si ho. 245 00:15:46,000 --> 00:15:48,000 Základní skládek jsou takové věci, které můžete často zakázat, 246 00:15:48,000 --> 00:15:52,000 a někdy to. 247 00:15:52,000 --> 00:15:55,000 Segmentace chyba, abych odpověděl na vaši otázku, Basil, 248 00:15:55,000 --> 00:16:00,000 se říká, že jsme se snažili přistupovat ukazatel 249 00:16:00,000 --> 00:16:05,000 , který nebyl nastaven, aby ukazoval na cokoliv. 250 00:16:05,000 --> 00:16:09,000 Nezapomeňte Binky ve videu, kdy Binky snaží 251 00:16:09,000 --> 00:16:12,000 jít přístup ukazatel, který není směřující k ničemu? 252 00:16:12,000 --> 00:16:16,000 V tomto případě myslím, že technicky ukazatel ukazuje na něco. 253 00:16:16,000 --> 00:16:20,000 Je to ukazuje na null, což je technicky 0, 254 00:16:20,000 --> 00:16:25,000 ale, který je definován jako v segmentu, který není přístupný 255 00:16:25,000 --> 00:16:28,000 váš program, takže získáte segmentation fault 256 00:16:28,000 --> 00:16:31,000 protože nejste přístup paměť, která je v platné segmentu 257 00:16:31,000 --> 00:16:38,000 jako haldy segmentu nebo zásobníku segment nebo datového segmentu. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Nějaké další otázky o Caesarovi? 260 00:16:48,000 --> 00:16:51,000 >> Pojďme dál. Pojďme se podívat na revize 2 opravdu rychle. 261 00:16:51,000 --> 00:17:00,000 To je Vigenère. 262 00:17:00,000 --> 00:17:04,000 Tady v Vigenère 263 00:17:04,000 --> 00:17:06,000 projdeme tenhle docela rychle, protože znovu, 264 00:17:06,000 --> 00:17:10,000 Vigenère a Caesar jsou velmi podobné. 265 00:17:10,000 --> 00:17:12,000 Header komentář je dříve, 266 00:17:12,000 --> 00:17:17,000 # Define je před vyhnout se používání těchto magických čísel. 267 00:17:17,000 --> 00:17:21,000 Pěkná věc je, že jsme chtěli přejít na 268 00:17:21,000 --> 00:17:23,000 jiný abeceda nebo něco takového. 269 00:17:23,000 --> 00:17:26,000 Spíše než by museli jít ručně změnit všechny 26 let v kódu 270 00:17:26,000 --> 00:17:30,000 můžeme to změnit na 27 nebo pádu dolů 271 00:17:30,000 --> 00:17:34,000 pokud jsme používali různé abecedy, různé jazyky. 272 00:17:34,000 --> 00:17:38,000 Opět, máme tuto kontrolu na počet argumentů, 273 00:17:38,000 --> 00:17:42,000 a opravdu můžete téměř brát jako šablonu. 274 00:17:42,000 --> 00:17:46,000 Skoro každý program, který by měl mít zápis- 275 00:17:46,000 --> 00:17:50,000 kdyby to mělo trvat argumentů na příkazovém řádku-některé sekvence z linek 276 00:17:50,000 --> 00:17:55,000 že čte takhle na začátku. 277 00:17:55,000 --> 00:17:59,000 To je jedna z prvních zdravý rozum testů, které chcete dělat. 278 00:17:59,000 --> 00:18:03,000 >> Zde, co jsme udělali, bylo jsme jisti, že 279 00:18:03,000 --> 00:18:06,000 klíčové slovo je platný, a že byl druhý kontrola, že jsme udělali. 280 00:18:06,000 --> 00:18:11,000 Všimněte si, opět, že jsme se rozešli to z argc a 2. 281 00:18:11,000 --> 00:18:14,000 Všimněte si, že v tomto případě jedna věc, že ​​jsme museli udělat, bylo místo 282 00:18:14,000 --> 00:18:18,000 použití až i my jsme chtěli ověřit celý řetězec, 283 00:18:18,000 --> 00:18:21,000 a aby k tomu, že jste skutečně jít znak po znaku 284 00:18:21,000 --> 00:18:23,000 přes řetězec. 285 00:18:23,000 --> 00:18:29,000 Neexistuje žádný dobrý způsob, jak volat něco na něm 286 00:18:29,000 --> 00:18:31,000 protože i, například, až i vrátí 0 287 00:18:31,000 --> 00:18:37,000 , pokud není analyzovat celé číslo, tak, že se ani pracovat. 288 00:18:37,000 --> 00:18:42,000 Opět, pěkný zpráva musí uživateli sdělit, co přesně se stalo. 289 00:18:42,000 --> 00:18:45,000 Pak tady, zase jsme také zvládnout případ, kdy 290 00:18:45,000 --> 00:18:50,000 uživatel zadá do ovládacího D náhodný charakter. 291 00:18:50,000 --> 00:18:54,000 >> A pak Charlotte měl otázku dříve, o tom, jak se nám podaří přeskočit mezery 292 00:18:54,000 --> 00:18:57,000 v našem řetězci zde. 293 00:18:57,000 --> 00:19:00,000 To bylo trochu podobné tomu, co jsme dělali s Myspace programu 294 00:19:00,000 --> 00:19:04,000 že jsme v bodě, a tak to fungovalo 295 00:19:04,000 --> 00:19:08,000 je to, že jsme sledovali počet dopisů, které jsme viděli. 296 00:19:08,000 --> 00:19:13,000 Když jsme šli přes zprávy řetězce, jak jsme šli přes znak po znaku, 297 00:19:13,000 --> 00:19:16,000 jsme sledovali index jako součást naší smyčky for, a pak jsme také sledována 298 00:19:16,000 --> 00:19:21,000 počet písmen, tak non-speciální znaky, non-číslice, non-white space 299 00:19:21,000 --> 00:19:27,000 že jsme viděli v samostatné proměnné. 300 00:19:27,000 --> 00:19:33,000 A pak toto řešení upravuje klíč 301 00:19:33,000 --> 00:19:41,000 získat aktuální klíč celé číslo, a to dělá, že za běhu, 302 00:19:41,000 --> 00:19:47,000 přímo před to pak jde k zašifrování aktuální zprávy charakter. 303 00:19:47,000 --> 00:19:50,000 Tam jsou některá řešení, které byly dokonale taky skvělé 304 00:19:50,000 --> 00:19:58,000 které by změnit klíč se při testování pro klíč platnosti. 305 00:19:58,000 --> 00:20:01,000 Kromě toho, že se ujistil, že charakter a klíčové slovo 306 00:20:01,000 --> 00:20:05,000 byl znak abecedy rovněž ukázalo, že na celé číslo 307 00:20:05,000 --> 00:20:13,000 v 0-25 rozsahu, aby pak přejděte museli dělat, že později v tomto pro smyčce. 308 00:20:13,000 --> 00:20:18,000 Opět, zde vidíte je to opravdu přesně stejný kód 309 00:20:18,000 --> 00:20:22,000 že jsme použili Caesar v tomto bodě. 310 00:20:22,000 --> 00:20:25,000 Děláte přesně to samé, takže skutečný trik je přijít na to, 311 00:20:25,000 --> 00:20:30,000 jak proměnit klíčové slovo do celé číslo. 312 00:20:30,000 --> 00:20:35,000 >> Jedna věc, že ​​jsme zde, že je málo hustá 313 00:20:35,000 --> 00:20:39,000 je, že jsme zopakoval tuto frázi, myslím, že byste mohli nazvat, 314 00:20:39,000 --> 00:20:45,000 3 samostatné časy na tratích 58, 59, a 61. 315 00:20:45,000 --> 00:20:52,000 Může mi někdo vysvětlit, co přesně tato fráze dělá? 316 00:20:52,000 --> 00:20:55,000 Je to přístup postavu, jak jsi řekl. 317 00:20:55,000 --> 00:20:59,000 Jo, je to [neslyšitelné] znak na klíčové slovo, 318 00:20:59,000 --> 00:21:04,000 a tak je to číslo viděli písmen, protože jste jen pohybující se 319 00:21:04,000 --> 00:21:06,000 klíčové slovo, jakmile jste viděli ten dopis, 320 00:21:06,000 --> 00:21:10,000 tak, že se to skutečně přeskočit mezery a tak podobně. 321 00:21:10,000 --> 00:21:12,000 Jo, přesně tak. 322 00:21:12,000 --> 00:21:16,000 A pak, jakmile jste viděli klíčové slovo prázdné stačí mod takže se vrátit kolem. 323 00:21:16,000 --> 00:21:18,000 Přesně tak. To je perfektní vysvětlení. 324 00:21:18,000 --> 00:21:23,000 Co Kevin řekl, je, že chceme, aby index do klíčové slovo. 325 00:21:23,000 --> 00:21:28,000 Chceme získat num_letters_seen charakter, chcete-li, 326 00:21:28,000 --> 00:21:32,000 ale když num_letters_seen přesahuje délku klíčových slov, 327 00:21:32,000 --> 00:21:37,000 tak, jak jsme se dostali zpět do náležitého rozsahu je budeme používat mod operátora 328 00:21:37,000 --> 00:21:40,000 efektivně zabalit kolem. 329 00:21:40,000 --> 00:21:43,000 Například, stejně jako v krátkém, naše klíčové slovo je slanina, 330 00:21:43,000 --> 00:21:46,000 a je to 5 znaků dlouhé. 331 00:21:46,000 --> 00:21:50,000 Ale my jsme viděli 6 písmen v našem formátu prostého textu v tomto bodě 332 00:21:50,000 --> 00:21:52,000 a šifrované 6. 333 00:21:52,000 --> 00:21:57,000 Budeme skončit přístup k num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 což je 6, mod délka klíčového slova, 5, 335 00:22:00,000 --> 00:22:04,000 a tak dostaneme 1, a tak to, co budeme dělat, je potkáme 336 00:22:04,000 --> 00:22:14,000 přístup první znak uvnitř našeho klíčového slova v tomto bodě. 337 00:22:14,000 --> 00:22:21,000 >> Dobře, nějaké otázky na Vigenère 338 00:22:21,000 --> 00:22:26,000 dříve než přejdeme? 339 00:22:26,000 --> 00:22:31,000 Vy pocit docela dobrý o tom? 340 00:22:31,000 --> 00:22:35,000 Cool, skvělé. 341 00:22:35,000 --> 00:22:38,000 Chci se ujistit, že vy jste dostat šanci vidět kód 342 00:22:38,000 --> 00:22:48,000 že si myslíme, že vypadá dobře a mají šanci učit se od něj. 343 00:22:48,000 --> 00:22:53,000 To bude poslední budeme pomocí mezer v současné době, 344 00:22:53,000 --> 00:22:59,000 a budeme přechod teď, a já jít na cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 takže můžeme udělat trochu přezkum kvíz. 346 00:23:06,000 --> 00:23:10,000 Nejlepší způsob, jak si myslím, začít dělat kvíz recenze 347 00:23:10,000 --> 00:23:15,000 je přijít na této stránce přednášky, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 a pod každou z týdne čísel, takže když jsem se podívat tady v týdnu 0, 349 00:23:20,000 --> 00:23:27,000 Vidím, že máme seznam témat, která jsme probrali v týdnu 0. 350 00:23:27,000 --> 00:23:31,000 >> Pokud některý z těchto témat se zdá neznámé pro vás 351 00:23:31,000 --> 00:23:34,000 budete určitě chtít vrátit zpět a pročesat skripta a možná 352 00:23:34,000 --> 00:23:39,000 dokonce proletět přednášek, dívat se na ně znovu, pokud chcete 353 00:23:39,000 --> 00:23:44,000 získat pocit, pro to, co se děje s každým z těchto témat. 354 00:23:44,000 --> 00:23:49,000 Řeknu navíc letos jeden z chladných zdrojů jsme dostali 355 00:23:49,000 --> 00:23:55,000 je, že tyto šortky, které jsme vytvořili, a když se podíváte v týdnu 0, 356 00:23:55,000 --> 00:24:00,000 nemáme všechny probíraných tématech, ale máme docela málo z nich, 357 00:24:00,000 --> 00:24:03,000 některé složitější, proto je sledování těchto krátkých znovu 358 00:24:03,000 --> 00:24:08,000 je dobrý způsob, jak se dostat až do rychlosti. 359 00:24:08,000 --> 00:24:15,000 Zejména, já dám do zásuvky pro 3 na dně, protože jsem dělal ty. 360 00:24:15,000 --> 00:24:20,000 Ale pokud jste zápasí s binární, bity, šestihranné, že tyhle věci, 361 00:24:20,000 --> 00:24:22,000 binární je skvělé místo pro start. 362 00:24:22,000 --> 00:24:25,000 ASCII je ještě jeden, který je dobrý pro zobrazení příliš. 363 00:24:25,000 --> 00:24:31,000 Můžete dokonce sledovat mě na 1.5x rychlosti, pokud budu příliš pomalý pro vás. 364 00:24:31,000 --> 00:24:35,000 Protože je to hodnocení, neváhejte to udělat. 365 00:24:35,000 --> 00:24:40,000 >> Stačí začít opravdu rychle, budeme projít pár těchto vědomostních problémů 366 00:24:40,000 --> 00:24:44,000 jen rychle chrlit přes tyto. 367 00:24:44,000 --> 00:24:50,000 Například, pojďme se podívat na problém 16, že mám přímo tady na stole. 368 00:24:50,000 --> 00:24:54,000 Máme tento následující výpočet v binární, 369 00:24:54,000 --> 00:24:56,000 a chceme ukázat nějakou práci. 370 00:24:56,000 --> 00:24:59,000 Dobře, já ti dám to výstřel. 371 00:24:59,000 --> 00:25:01,000 Vy by měla následovat spolu s papírem, 372 00:25:01,000 --> 00:25:04,000 a my uděláme to opravdu rychle. 373 00:25:04,000 --> 00:25:06,000 Chceme-li provádět následující výpočet v binárním kódu. 374 00:25:06,000 --> 00:25:16,000 Mám 00110010. 375 00:25:16,000 --> 00:25:27,000 A budu se přidat k ní 00.110.010. 376 00:25:27,000 --> 00:25:30,000 Pro matematiky géniů po spolu doma, 377 00:25:30,000 --> 00:25:35,000 je to skutečně vynásobením 2. 378 00:25:35,000 --> 00:25:37,000 Pojďme začít. 379 00:25:37,000 --> 00:25:39,000 Budeme sledovat stejný sčítání algoritmus, který my 380 00:25:39,000 --> 00:25:43,000 když přidáme desetinná čísla dohromady. 381 00:25:43,000 --> 00:25:46,000 Opravdu jediný rozdíl je, že jsme smyčka zpět kolem 382 00:25:46,000 --> 00:25:51,000 jakmile budeme mít 1 + 1 místo, jakmile jsme se dostali do 10. 383 00:25:51,000 --> 00:25:53,000 >> Vyjdeme-li z práva, opravdu rychle, co je první číslice? 384 00:25:53,000 --> 00:25:55,000 [Student] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Skvělé, druhá číslice? 386 00:25:58,000 --> 00:26:00,000 [Student] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Je to 1? 1 + 1 je? 388 00:26:02,000 --> 00:26:04,000 [Student] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Přesně tak, takže to, co je číslice, že píšu přímo pod 2 ty sčítají? 390 00:26:08,000 --> 00:26:11,000 [Student] 1, 0, nebo 0 a pak nést 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 a nést 1, přesně. 392 00:26:15,000 --> 00:26:18,000 Dále jeden nahoru, Basile, ty jsi vzhůru. 393 00:26:18,000 --> 00:26:20,000 Co je to třetí? >> [Basil] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, perfektní. Kevin? 395 00:26:23,000 --> 00:26:27,000 [Kevin] 0. >> [Nate H.] 0, Charlotte? 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0. >> [Nate H.] Jo, a co mám dělat? 397 00:26:30,000 --> 00:26:32,000 [Student] 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] A co mám dělat? A pak jsem nést 1. 399 00:26:34,000 --> 00:26:36,000 Perfektní, Sahb? >> [Sahb] Nyní máte 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] A mám dělat tady něco? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Pak pro příští máte 1, protože jste prováděli znovu 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Skvělé, takže zde můžeme dokončit ji. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Student] Má 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, jak jsi řekl, je 10, nebo 1, 0, spíše. 407 00:27:01,000 --> 00:27:07,000 10 je chybný, protože se mi 10 znamená počet 10, 408 00:27:07,000 --> 00:27:12,000 a je to vtípek, jak jsme reprezentovat to, když jsme psaní. 409 00:27:12,000 --> 00:27:20,000 Zastupujeme číslo 2 v 1, 0, a číslo 10 je mírně odlišná. 410 00:27:20,000 --> 00:27:23,000 >> Co je to docela hezké o binární je, že tam opravdu není, že mnoho 411 00:27:23,000 --> 00:27:25,000 případech musíte naučit. 412 00:27:25,000 --> 00:27:30,000 K dispozici je 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 je 0, a pak nést 1, 414 00:27:34,000 --> 00:27:37,000 a pak můžete vidět zde na třetím sloupci zprava 415 00:27:37,000 --> 00:27:40,000 jsme měli 1, 1, a 1. 416 00:27:40,000 --> 00:27:43,000 A 1 + 1 + 1 je 1, 417 00:27:43,000 --> 00:27:45,000 a nosíte další 1. 418 00:27:45,000 --> 00:27:48,000 Když děláte binární sčítání, velmi jednoduchý. 419 00:27:48,000 --> 00:27:51,000 Já bych to ještě pár z nich do sanity check sami 420 00:27:51,000 --> 00:27:54,000 předtím, než jdete do systému, protože je to 421 00:27:54,000 --> 00:28:00,000 Asi něco, co uvidíme na kvíz. 422 00:28:00,000 --> 00:28:03,000 Nyní pojďme to udělat příští stejně. 423 00:28:03,000 --> 00:28:06,000 Pojďme udělat problém 17. 424 00:28:06,000 --> 00:28:12,000 Budeme převést následující binární číslo na desítkové. 425 00:28:12,000 --> 00:28:28,000 Mám 10100111001. 426 00:28:28,000 --> 00:28:33,000 Zapamatovat si mě na binární videu, že jsem to udělal 427 00:28:33,000 --> 00:28:36,000 Prošel jsem pár příkladů, a jsem ukazoval, jak 428 00:28:36,000 --> 00:28:41,000 vše funguje, když děláte to v desítkové soustavě. 429 00:28:41,000 --> 00:28:45,000 Když pracujete v desítkové soustavy Myslím, že jsme 430 00:28:45,000 --> 00:28:48,000 v tomto bodě v našem životě tak plynně v tom, že 431 00:28:48,000 --> 00:28:53,000 je to docela snadné zakrýt mechaniku, jak to vlastně funguje. 432 00:28:53,000 --> 00:28:59,000 >> Ale udělat rychlou rekapitulaci, když mám číslo 137 433 00:28:59,000 --> 00:29:06,000 to vlastně znamená a znovu, je to v desítkové soustavy, 434 00:29:06,000 --> 00:29:19,000 číslo 137 v desítkové soustavě znamená, že mám 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 To vše je zůstat na obrazovce. 436 00:29:22,000 --> 00:29:29,000 A pak, když se podíváte na těchto číslech tady, 437 00:29:29,000 --> 00:29:34,000 100, 10 a 1, zjistíte, že jsou to vlastně všechny síly 10. 438 00:29:34,000 --> 00:29:43,000 Mám 10 m², 10 ¹, a 10 na nulu. 439 00:29:43,000 --> 00:29:48,000 Máme podobný druh věci v binární, 440 00:29:48,000 --> 00:29:55,000 kromě toho, že naše základna, jak mu říkáme, je 2 místo 10. 441 00:29:55,000 --> 00:29:58,000 Tyto 10s, že jsem napsal tady na dně, 442 00:29:58,000 --> 00:30:02,000 Tento 10 ², 10 ¹, 10 až nulové, 10 je naše základna, 443 00:30:02,000 --> 00:30:08,000 a exponent, 0, 1, nebo 2, 444 00:30:08,000 --> 00:30:14,000 je naznačeno na pozici číslice v čísle, které píšeme. 445 00:30:14,000 --> 00:30:21,000 1, pokud se na něj podíváme, to 1 je v 2. poloze. 446 00:30:21,000 --> 00:30:27,000 3 je v první poloze, a 7 je v poloze 0.. 447 00:30:27,000 --> 00:30:35,000 To je, jak jsme si různé exponenty níže na našich základen. 448 00:30:35,000 --> 00:30:40,000 >> Po vše Dáme-vlastně, víš co? 449 00:30:40,000 --> 00:30:43,000 Uděláme-li se můj tlačítko Zpět jít? 450 00:30:43,000 --> 00:30:45,000 Tam to jde. 451 00:30:45,000 --> 00:30:47,000 I love this vrátit věc. 452 00:30:47,000 --> 00:30:51,000 Po tomto Myslím, že aspoň pro mě 453 00:30:51,000 --> 00:30:54,000 Nejjednodušší způsob, jak začít konverzi binární číslo 454 00:30:54,000 --> 00:30:57,000 nebo šestnáctkové číslo, kde základ je 16 455 00:30:57,000 --> 00:31:02,000 a ne 10 nebo 2, je jít dopředu a zapsat 456 00:31:02,000 --> 00:31:09,000 podklady a exponenty pro všechna čísla v mé binární číslo na vrcholu. 457 00:31:09,000 --> 00:31:14,000 Pokud začneme zleva doprava znovu, 458 00:31:14,000 --> 00:31:17,000 který je tak trochu neintuitivní, 459 00:31:17,000 --> 00:31:23,000 Budu změnit zpět na černou tady, máme 2 do 0. polohy, 460 00:31:23,000 --> 00:31:27,000 a pak máme 2 ¹, ² 2, 461 00:31:27,000 --> 00:31:33,000 a pak 2 na 3, 2 na 4, 2 na 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9, a 10. 463 00:31:39,000 --> 00:31:41,000 Tato čísla jsem napsal ven, jsou všechny exponenty. 464 00:31:41,000 --> 00:31:48,000 Jen jsem napsal základy tady v první 3 jen pro prostor. 465 00:31:48,000 --> 00:31:50,000 >> Na tomto místě budu pokračovat, a já jsem vlastně jít smazat 466 00:31:50,000 --> 00:31:53,000 věci, které jsme udělali v desítkové soustavě, pokud je to v pořádku. 467 00:31:53,000 --> 00:31:57,000 Vy jste všichni dostali to. 468 00:31:57,000 --> 00:32:05,000 Ti z vás, sledování on-line Jsem si jistý, že bude moci přetočit mě, jestli byste chtěli. 469 00:32:05,000 --> 00:32:07,000 Přepnutí zpět na pero. 470 00:32:07,000 --> 00:32:12,000 Teď, co se dá dělat-li vy nejste úplně až na rychlost na vašich pravomocí 2, 471 00:32:12,000 --> 00:32:15,000 to je úplně v pohodě. 472 00:32:15,000 --> 00:32:18,000 To se stává. Chápu. 473 00:32:18,000 --> 00:32:23,000 Jednou jsem měl pohovor, kde mi bylo řečeno, co bych měl vědět všechny síly 2 474 00:32:23,000 --> 00:32:26,000 až přes 2 do 30.. 475 00:32:26,000 --> 00:32:29,000 Nebylo to práce, kterou jsem dostal. 476 00:32:29,000 --> 00:32:32,000 Každopádně, může vy jděte do toho a to spočítejte tady, 477 00:32:32,000 --> 00:32:35,000 ale s binární nemá moc smysl, 478 00:32:35,000 --> 00:32:38,000 a ani to smysl s desítkové, nebo šestnáctkové buď, 479 00:32:38,000 --> 00:32:43,000 si to spočítejte, kde budete mít nuly. 480 00:32:43,000 --> 00:32:49,000 Můžete vidět mám 0 tady, je tady 0, 0 tady, 0 tady, 0 tady, 0 zde. 481 00:32:49,000 --> 00:32:52,000 Proč by to nemělo smysl dělat skutečné matematiky 482 00:32:52,000 --> 00:32:56,000 pro výpočet odpovídající sílu 2 pro tuto pozici? 483 00:32:56,000 --> 00:32:59,000 Přesně, jak řekla Charlotte, bude to 0. 484 00:32:59,000 --> 00:33:05,000 Klidně ušetřit čas, pokud výpočtu síly 2 není vaše silná stránka. 485 00:33:05,000 --> 00:33:10,000 V tomto případě se stačí spočítat pro 2 na 0, který je-? 486 00:33:10,000 --> 00:33:12,000 [Student] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 na 3, která je-? 488 00:33:14,000 --> 00:33:16,000 [Student] 8. >> [Nate H.] 8. 489 00:33:16,000 --> 00:33:18,000 2 až 4? 490 00:33:18,000 --> 00:33:21,000 [Student] 2. Je mi líto, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 do 4 je 16, přesně. 492 00:33:26,000 --> 00:33:28,000 2 k 5, Kevin? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 na 8? 494 00:33:32,000 --> 00:33:38,000 [Student] 32 x 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] Perfect. 496 00:33:41,000 --> 00:33:43,000 A 2 na 10? 497 00:33:43,000 --> 00:33:45,000 [Student] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Jo, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Jakmile jsme dostali tato čísla můžeme shrnují je všechny. 500 00:33:57,000 --> 00:34:01,000 A to je místo, kde je to opravdu důležité, aby to pár věcí. 501 00:34:01,000 --> 00:34:07,000 Jedním z nich je jít pomalu a zkontrolovat svou práci. 502 00:34:07,000 --> 00:34:10,000 Můžete říct, že je tu 1 na konci tohoto čísla, 503 00:34:10,000 --> 00:34:15,000 tak jsem určitě dostat liché číslo jako můj výsledek, 504 00:34:15,000 --> 00:34:18,000 protože všechny ty ostatní se bude i čísla 505 00:34:18,000 --> 00:34:21,000 vzhledem k tomu, že je to binární číslo. 506 00:34:21,000 --> 00:34:24,000 Druhá věc, kterou musíte udělat, je, pokud se dostanete do tohoto bodu na zkoušky 507 00:34:24,000 --> 00:34:27,000 a vy jste to napsal tak daleko 508 00:34:27,000 --> 00:34:30,000 a máte málo času 509 00:34:30,000 --> 00:34:33,000 podívat se na počet bodů, které tento problém stojí. 510 00:34:33,000 --> 00:34:40,000 Tento problém, jak můžete vidět, když jsem otočit zpět do svého notebooku opravdu rychle- 511 00:34:40,000 --> 00:34:44,000 tento problém je za 2 body, takže to není ten druh Kromě 512 00:34:44,000 --> 00:34:47,000 měli byste jít přes pokud jste opravdu v časové tísni. 513 00:34:47,000 --> 00:34:52,000 Ale budeme přepnout zpět na iPad, a půjdeme přes to opravdu rychle. 514 00:34:52,000 --> 00:34:54,000 >> Líbí se mi dělat malé množství prvního 515 00:34:54,000 --> 00:34:56,000 protože jsem zjistil, že jednodušší. 516 00:34:56,000 --> 00:35:00,000 Líbí se mi 32 a 8, protože oni jdou spolu docela snadno, a dostaneme 50. 517 00:35:00,000 --> 00:35:03,000 16 a 1 dostane 17. 518 00:35:03,000 --> 00:35:05,000 Tam jsme se 57, 519 00:35:05,000 --> 00:35:14,000 a pak můžeme udělat zbytek tohoto, tak můžeme udělat 57, 156. 520 00:35:14,000 --> 00:35:16,000 Pojď. 521 00:35:16,000 --> 00:35:19,000 Man, dobře, uvidíme. 522 00:35:19,000 --> 00:35:27,000 Měli jsme 57, 256, a 1024. 523 00:35:27,000 --> 00:35:31,000 V tomto bodě, bych raději projít. 524 00:35:31,000 --> 00:35:35,000 Nemám tušení. Jasně jsem třeba, aby si přečetli na toto téma. 525 00:35:35,000 --> 00:35:40,000 7, 6, a 4, dostanete 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Pak dostaneme 3, a pak jsme si 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Velikonoční vajíčko, někdo? 530 00:35:55,000 --> 00:35:59,000 Někdo poznat toto číslo? 531 00:35:59,000 --> 00:36:02,000 Chris rozpozná číslo. Co to znamená, Chrisi? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, takže když se podíváte na to, vypadá to, že leet. 534 00:36:11,000 --> 00:36:15,000 Hacker věci. Dejte si pozor na takové věci na střednědobé nebo kvíz, spíše. 535 00:36:15,000 --> 00:36:19,000 Pokud vidíte, že takové věci a jste přemýšlel "Hm," 536 00:36:19,000 --> 00:36:22,000 , který by mohl něco znamenat. 537 00:36:22,000 --> 00:36:24,000 Nevím. David rád uvedení dovnitř 538 00:36:24,000 --> 00:36:26,000 Je to dobrý způsob, jak zdravý rozum zkontrolovat. 539 00:36:26,000 --> 00:36:30,000 Stejně jako v pořádku, mohu vidět, co se děje. 540 00:36:30,000 --> 00:36:34,000 >> To je týden 0/Week 1 věci. 541 00:36:34,000 --> 00:36:39,000 Pokud bychom přepnete zpět do našeho notebooku teď, 542 00:36:39,000 --> 00:36:46,000 oddálit, a pár dalších věcí. 543 00:36:46,000 --> 00:36:50,000 Tam je ASCII, které jsme dělali hodně s problémovými sad. 544 00:36:50,000 --> 00:36:55,000 Tento pojem kapitálu A. Co je to vlastně? 545 00:36:55,000 --> 00:36:57,000 Vědět, že je to desetinné číslo. 546 00:36:57,000 --> 00:37:00,000 65 je to, co je mapována v ASCII tabulce, 547 00:37:00,000 --> 00:37:03,000 a to proto, jak počítač píše to, 548 00:37:03,000 --> 00:37:06,000 a to je, jak jsme se dostat pryč se psaním 549 00:37:06,000 --> 00:37:09,000 charakter kapitálu a znak malá písmena 550 00:37:09,000 --> 00:37:14,000 v některých z těchto řešení a problémů sad, které jste dělali. 551 00:37:14,000 --> 00:37:16,000 Pár dalších věcí. 552 00:37:16,000 --> 00:37:25,000 Máme prohlášení, logické výrazy, podmínky, cykly, proměnné a vláken. 553 00:37:25,000 --> 00:37:29,000 >> Ti všichni vypadají, že smysl pro nejvíce se rozdělit? 554 00:37:29,000 --> 00:37:35,000 Některé z této terminologie je trochu funky občas. 555 00:37:35,000 --> 00:37:46,000 Rád si o prohlášení jako nejvíce část něčeho, co končí středníkem. 556 00:37:46,000 --> 00:37:51,000 Prohlášení jako x = 7, který stanoví proměnné, 557 00:37:51,000 --> 00:37:54,000 pravděpodobně jen x = 7. 558 00:37:54,000 --> 00:38:01,000 Pravděpodobně x je také typ, který je možné uložit číslo 7, 559 00:38:01,000 --> 00:38:05,000 takže je to int případně float nebo krátký nebo char, 560 00:38:05,000 --> 00:38:07,000 něco takového. 561 00:38:07,000 --> 00:38:12,000 Boolean výraz je použití těchto dvojníka se rovná 562 00:38:12,000 --> 00:38:17,000 a prásk rovná nebo není rovná, méně než, větší než, 563 00:38:17,000 --> 00:38:22,000 menší nebo rovno, všechny takové věci. 564 00:38:22,000 --> 00:38:28,000 Podmínky jsou tedy v případě else. 565 00:38:28,000 --> 00:38:32,000 Já bych si, že nemůžete mít else bez odpovídající, pokud. 566 00:38:32,000 --> 00:38:37,000 Stejně tak, nemůžete mít else pokud je to bez odpovídající, pokud. 567 00:38:37,000 --> 00:38:40,000 Smyčky, připomínají 3 druhů smyček jsme byli kladivy do tebe 568 00:38:40,000 --> 00:38:43,000 za posledních pár oddílů a problémových souborů. 569 00:38:43,000 --> 00:38:46,000 Použití se zatímco když jste se dostal vstup od uživatele, 570 00:38:46,000 --> 00:38:51,000 pomocí while dokud určité podmínky, je pravda, 571 00:38:51,000 --> 00:38:56,000 a pak pomocí těm, pro smyčky, pokud potřebujete 572 00:38:56,000 --> 00:39:01,000 vědět, který iterace smyčky se právě on je, jak jsem o tom přemýšlet. 573 00:39:01,000 --> 00:39:07,000 Nebo pokud děláte pro každý znak v řetězci bych chtěl něco udělat, 574 00:39:07,000 --> 00:39:15,000 pro každý prvek pole chci udělat něco k tomuto prvku. 575 00:39:15,000 --> 00:39:18,000 >> Vlákna a události. 576 00:39:18,000 --> 00:39:21,000 Ty jsme nevztahuje tak explicitně v C, 577 00:39:21,000 --> 00:39:23,000 pamatujte však že tímto od nuly. 578 00:39:23,000 --> 00:39:26,000 To je představa mít různé skripty. 579 00:39:26,000 --> 00:39:32,000 To je také tento pojem vysílání událost. 580 00:39:32,000 --> 00:39:37,000 Někteří lidé neměli používat vysílání ve svých projektech zpočátku, 581 00:39:37,000 --> 00:39:40,000 která je zcela chladný, 582 00:39:40,000 --> 00:39:46,000 ale to jsou 2 různé způsoby zacházení s tímto větší problém tzv. souběžnosti, 583 00:39:46,000 --> 00:39:49,000 které je, jak se vám programy spustit 584 00:39:49,000 --> 00:39:54,000 nebo zdánlivě provést současně? 585 00:39:54,000 --> 00:39:59,000 Různé úkoly běží, zatímco ostatní úkoly jsou také běží. 586 00:39:59,000 --> 00:40:01,000 To je, jak operační systém vypadá, že pracuje. 587 00:40:01,000 --> 00:40:04,000 To je proto, i když, například, 588 00:40:04,000 --> 00:40:10,000 Já jsem dostal můj prohlížeč běží, mohu také obrátit na Spotify a hrát píseň. 589 00:40:10,000 --> 00:40:14,000 To je víc koncepční věci pochopit. 590 00:40:14,000 --> 00:40:17,000 Já bych se podívat na závity krátkých 591 00:40:17,000 --> 00:40:21,000 Pokud se chcete dozvědět více o tom. 592 00:40:21,000 --> 00:40:26,000 >> Pojďme se podívat, jsem přesvědčen, že by mohl být 593 00:40:26,000 --> 00:40:31,000 problém na to v jedné z nich. 594 00:40:31,000 --> 00:40:35,000 Opět si myslím, že nitě a akce nejsou něco, co se bude týkat v C 595 00:40:35,000 --> 00:40:41,000 jen proto, že je to podstatně obtížnější než v Scratch. 596 00:40:41,000 --> 00:40:44,000 Měli byste si s tím starosti tam, ale rozhodně pochopit pojmy, 597 00:40:44,000 --> 00:40:47,000 pochopit, co se děje. 598 00:40:47,000 --> 00:40:52,000 Ještě než se vrhneme na jakékoliv otázky týkající se týdnu 0 materiálu? 599 00:40:52,000 --> 00:40:55,000 Všichni cítí docela dobře? 600 00:40:55,000 --> 00:41:03,000 Pochopení proměnné a co je proměnná? 601 00:41:03,000 --> 00:41:08,000 >> Dál. Týden 1. 602 00:41:08,000 --> 00:41:12,000 Pár věcí tady, že se nijak zvlášť pokryty 603 00:41:12,000 --> 00:41:21,000 v kvízu přezkumu nutně a také jsou více koncepční věci myslet. 604 00:41:21,000 --> 00:41:30,000 První z nich je tato představa o tom, co zdrojového kódu, překladače a objektových kódů jsou. 605 00:41:30,000 --> 00:41:32,000 Někdo? Basil. 606 00:41:32,000 --> 00:41:37,000 Je objektový kód, myslím zdrojový kód je to, co jste vložili do Clang, 607 00:41:37,000 --> 00:41:42,000 a objektový kód je to, co řinčet vyhlásí tak, že váš počítač může číst program. 608 00:41:42,000 --> 00:41:44,000 Přesně tak. 609 00:41:44,000 --> 00:41:47,000 Zdrojový kód je kód C, že jste vlastně psát nahoru. 610 00:41:47,000 --> 00:41:50,000 Objektový kód je to, co dostanete z kovový zvuk. 611 00:41:50,000 --> 00:41:54,000 Je to 0s a 1s v tomto binárním formátu. 612 00:41:54,000 --> 00:41:59,000 Tak co se stane, je, když máte spoustu objektových souborů, 613 00:41:59,000 --> 00:42:04,000 říct, že jste sestavování projektu nebo programu, který používá více souborů zdrojového kódu, 614 00:42:04,000 --> 00:42:09,000 které podle konvence jsou uvedeny na. C příponu. 615 00:42:09,000 --> 00:42:13,000 To je důvod, proč máme caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Pokud píšete Java programy, které jim rozšíření. Java. 617 00:42:18,000 --> 00:42:24,000 Python programy mají příponu. Py často. 618 00:42:24,000 --> 00:42:26,000 >> Jakmile budete mít více. C souborů, můžete zkompilovat. 619 00:42:26,000 --> 00:42:29,000 Řinčení vyplivne všechno binární harampádí. 620 00:42:29,000 --> 00:42:33,000 Pak, protože si chcete pouze 1 programu 621 00:42:33,000 --> 00:42:37,000 máte linker odkaz všech těchto objektových souborů společně 622 00:42:37,000 --> 00:42:40,000 do 1 spustitelného souboru. 623 00:42:40,000 --> 00:42:45,000 To je také to, co se stane, když použijete CS50 knihovnu, například. 624 00:42:45,000 --> 00:42:50,000 Knihovna CS50 je tak, že. H hlavičkový soubor 625 00:42:50,000 --> 00:42:53,000 že budete číst, že # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 A pak je to také speciální binární soubor knihovny 627 00:42:58,000 --> 00:43:02,000 , která byla sestavena, aby je 0s a 1s, 628 00:43:02,000 --> 00:43:08,000 a že-l, takže pokud se vrátíme k našim prostory a my se opravdu rychle, 629 00:43:08,000 --> 00:43:11,000 na to, co se tady děje, když se podíváme na naši řinčet příkaz, 630 00:43:11,000 --> 00:43:15,000 to, co máme, je to náš zdrojový kód souboru tady. 631 00:43:15,000 --> 00:43:18,000 Jedná se banda kompilátor. 632 00:43:18,000 --> 00:43:22,000 A pak se na samém konci, to-l vlajky odkaz v 633 00:43:22,000 --> 00:43:30,000 skutečné binární soubory pro tyto 2 knihovny, CS50 knihovna a pak matematická knihovna. 634 00:43:30,000 --> 00:43:35,000 >> Pochopení každý typ účelu souborů ' 635 00:43:35,000 --> 00:43:38,000 v procesu kompilace je něco, co budete chtít mít možnost 636 00:43:38,000 --> 00:43:43,000 obsahovat alespoň na vysoké úrovni přehled. 637 00:43:43,000 --> 00:43:46,000 Zdrojový kód vypovídací Object code vyjde. 638 00:43:46,000 --> 00:43:53,000 Objektové soubory kód propojit, a dostanete krásnou, spustitelný soubor. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 To je také, kde můžete získat chyby na více místech 641 00:43:58,000 --> 00:44:00,000 v procesu kompilace. 642 00:44:00,000 --> 00:44:04,000 To je místo, kde, například, pokud budete mít tuto propojení vlajkou, 643 00:44:04,000 --> 00:44:10,000 CS50 vlajka, a jej vynecháte v prostorech nebo když vedete svůj kód, 644 00:44:10,000 --> 00:44:13,000 to je místo, kde budete mít chybu v propojení fázi, 645 00:44:13,000 --> 00:44:18,000 a linker bude říkat, "Hele, jsi volal funkce GetString 646 00:44:18,000 --> 00:44:20,000 že je v CS50 knihovně. " 647 00:44:20,000 --> 00:44:25,000 "Řekl jsi mi, že je v CS50 knihovně, a nemůžu najít kód pro něj." 648 00:44:25,000 --> 00:44:28,000 To je místo, kde budete muset připojit do, a to zvlášť 649 00:44:28,000 --> 00:44:33,000 od kompilátoru chyby, protože kompilátor hledá syntaxe a takové věci. 650 00:44:33,000 --> 00:44:38,000 Je dobré vědět, co se děje, když. 651 00:44:38,000 --> 00:44:42,000 >> Ostatní věci vědět. 652 00:44:42,000 --> 00:44:49,000 Řekl bych, že budete určitě chtít podívat na krátký na obsadit provádí Jordan 653 00:44:49,000 --> 00:44:55,000 rozumět tomu, co ints jsou pod kapotou, 654 00:44:55,000 --> 00:44:58,000 Co znaky jsou pod kapotou. 655 00:44:58,000 --> 00:45:02,000 Když mluvíme o ASCII a my skutečně podívat na ASCII tabulky, 656 00:45:02,000 --> 00:45:07,000 co to dělá je, že nám pod kapotou vzhled 657 00:45:07,000 --> 00:45:13,000 na to, jak počítač ve skutečnosti představuje kapitál a číslice 7 658 00:45:13,000 --> 00:45:17,000 a čárka a otazník. 659 00:45:17,000 --> 00:45:20,000 Počítač má také zvláštní způsoby, které reprezentují 660 00:45:20,000 --> 00:45:23,000 číslo 7 jako celé číslo. 661 00:45:23,000 --> 00:45:27,000 To má zvláštní způsob, jak reprezentovat číslo 7 jako číslo s plovoucí čárkou, 662 00:45:27,000 --> 00:45:29,000 a ty jsou velmi odlišné. 663 00:45:29,000 --> 00:45:32,000 Obsadit je, jak říct, že počítač "Hej, chci převést 664 00:45:32,000 --> 00:45:37,000 z jedné reprezentace do jiné reprezentace. " 665 00:45:37,000 --> 00:45:40,000 Proč bychom se na to podívat. 666 00:45:40,000 --> 00:45:44,000 >> Také bych se podívat na krátký, o knihovnách a krátké na překladače. 667 00:45:44,000 --> 00:45:47,000 Ti hovoří o procesu kompilace, 668 00:45:47,000 --> 00:45:53,000 Co je knihovna, a jít přes některé z těchto otázek, které by vás mohly ptají. 669 00:45:53,000 --> 00:45:55,000 Otázky týkající se týden 1 materiálu? 670 00:45:55,000 --> 00:46:03,000 Existují témata Tady, které se zdají skličující byste chtěli pokrýt? 671 00:46:03,000 --> 00:46:07,000 Snažím se vyhodit většinu těchto dřívějších témat tak, že se můžeme dostat do 672 00:46:07,000 --> 00:46:13,000 ukazatele a udělat trochu rekurze. 673 00:46:13,000 --> 00:46:15,000 Myšlenky? 674 00:46:15,000 --> 00:46:19,000 Něco na pokrytí? 675 00:46:19,000 --> 00:46:21,000 Čas na nějaké čokolády možná? 676 00:46:21,000 --> 00:46:23,000 Vy pracujete přes to. 677 00:46:23,000 --> 00:46:26,000 Budu držet popíjení kafe. 678 00:46:26,000 --> 00:46:31,000 2. týden. 679 00:46:31,000 --> 00:46:34,000 Dobrý nápad, dobrá výzva. 680 00:46:34,000 --> 00:46:38,000 V týdnu 2 jsme si povídali trochu více o funkcích. 681 00:46:38,000 --> 00:46:43,000 >> V prvních několika problémových setech jsem opravdu psát žádné funkce vůbec 682 00:46:43,000 --> 00:46:45,000 jiné než které funkce? 683 00:46:45,000 --> 00:46:47,000 [Student] Hlavní. >> Hlavní, přesně. 684 00:46:47,000 --> 00:46:51,000 A tak jsme viděli různé kostýmy, které nosí hlavní. 685 00:46:51,000 --> 00:46:54,000 Tam je ten, v němž je neakceptuje žádné argumenty, 686 00:46:54,000 --> 00:46:58,000 a řekneme prázdnotu mezi závorky, 687 00:46:58,000 --> 00:47:01,000 a pak je tu druhý, kde jsme si chcete vzít argumenty příkazového řádku, 688 00:47:01,000 --> 00:47:08,000 a jak jsme viděli, že je místo, kde budete mít int argc a argv string array 689 00:47:08,000 --> 00:47:13,000 nebo teď, když jsme skutečně vystaveni řetězec být char *, že je 690 00:47:13,000 --> 00:47:20,000 budeme začít psát jako char * argv a pak držáků. 691 00:47:20,000 --> 00:47:22,000 V problému Set 3, vy viděl spoustu funkcí, 692 00:47:22,000 --> 00:47:27,000 a jste zavedli spoustu funkcí, kreslit, podívejte se, tahanice. 693 00:47:27,000 --> 00:47:31,000 Prototypy byly všechny napsané tu pro vás. 694 00:47:31,000 --> 00:47:33,000 >> Co jsem chtěl mluvit o tom tady s funkcemi opravdu rychle 695 00:47:33,000 --> 00:47:38,000 je to, že tam jsou 3 díly, kdykoli se budete napsat funkci. 696 00:47:38,000 --> 00:47:43,000 Musíte zadat návratový typ funkce. 697 00:47:43,000 --> 00:47:46,000 Musíte zadat název funkce, a pak se budete muset zadat 698 00:47:46,000 --> 00:47:51,000 seznam argumentů nebo seznam parametrů. 699 00:47:51,000 --> 00:47:57,000 Například, když jsem měl napsat funkci shrnul spoustu celých čísel 700 00:47:57,000 --> 00:48:03,000 a pak se vrátit ke mně součet toho, co by můj návrat typ 701 00:48:03,000 --> 00:48:06,000 kdybych chtěl shrnout celá čísla a pak se vrátit částku? 702 00:48:06,000 --> 00:48:12,000 Pak je název funkce. 703 00:48:12,000 --> 00:48:27,000 Pokud bych do toho pusťte a napište zeleně, tato část je návratový typ. 704 00:48:27,000 --> 00:48:34,000 Tato část je název. 705 00:48:34,000 --> 00:48:40,000 A pak v závorkách 706 00:48:40,000 --> 00:48:46,000 je místo, kde jsem se dát argumenty, 707 00:48:46,000 --> 00:48:56,000 často zkrátil jako args, někdy volal params pro parametry. 708 00:48:56,000 --> 00:49:00,000 A pokud máte jeden, stačí zadat jeden. 709 00:49:00,000 --> 00:49:06,000 Pokud máte více oddělte každý z nich s čárkou. 710 00:49:06,000 --> 00:49:13,000 A pro každý argument si dát 2 věci, které jsou, Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Musíte dát typ a pak jméno. 712 00:49:18,000 --> 00:49:21,000 A pak jméno, a jméno je jméno, které budete používat 713 00:49:21,000 --> 00:49:25,000 odkazovat na tento argument v rámci součtu funkcí, 714 00:49:25,000 --> 00:49:27,000 ve funkci, že jste v současné době psaní. 715 00:49:27,000 --> 00:49:32,000 >> Nemusíte se-například, když jdu shrnout, 716 00:49:32,000 --> 00:49:41,000 říkají, pole celých čísel-Dáme to int pole, 717 00:49:41,000 --> 00:49:46,000 a já dávám nějaké složené závorky tam- 718 00:49:46,000 --> 00:49:51,000 pak, když jsem se předat pole na funkci SUMA 719 00:49:51,000 --> 00:49:55,000 Minul jsem ji na první pozici v seznamu argumentů. 720 00:49:55,000 --> 00:49:59,000 Ale pole, které jsem předat nemusí mít název arr. 721 00:49:59,000 --> 00:50:07,000 Arr bude, jak jsem odkazovat na tento argument v těle funkce. 722 00:50:07,000 --> 00:50:10,000 Další věc, která je třeba vzít v úvahu, 723 00:50:10,000 --> 00:50:14,000 a to je mírně odlišné od funkcí, ale myslím, že je to důležitý bod, 724 00:50:14,000 --> 00:50:20,000 je, že v C, když píšu funkci, jako je tento 725 00:50:20,000 --> 00:50:29,000 Jak mám vědět, kolik prvků je v tomto poli? 726 00:50:29,000 --> 00:50:31,000 To je poněkud chyták. 727 00:50:31,000 --> 00:50:35,000 Mluvili jsme o tom trochu minulý týden v oddílu. 728 00:50:35,000 --> 00:50:40,000 Jak mám vědět, počet prvků uvnitř pole v C? 729 00:50:40,000 --> 00:50:44,000 Je tam způsob, jak? 730 00:50:44,000 --> 00:50:49,000 >> Ukazuje se, že neexistuje žádný způsob, jak vědět. 731 00:50:49,000 --> 00:50:52,000 Musíte projít do samostatně. 732 00:50:52,000 --> 00:50:55,000 Tam je trik, který můžete dělat 733 00:50:55,000 --> 00:51:00,000 pokud jste ve stejné funkci ve kterém pole bylo prohlášeno, 734 00:51:00,000 --> 00:51:04,000 a pracujete s zásobníku pole. 735 00:51:04,000 --> 00:51:06,000 Ale to funguje pouze pokud jste ve stejné funkci. 736 00:51:06,000 --> 00:51:09,000 Jakmile předat pole na jinou funkci, nebo pokud jste prohlásil pole 737 00:51:09,000 --> 00:51:12,000 a dáte, že pole na haldě, které jste použili malloc 738 00:51:12,000 --> 00:51:15,000  a tento druh věcí, pak jsou všechny sázky jsou pryč. 739 00:51:15,000 --> 00:51:18,000 Pak jste skutečně projít kolem 740 00:51:18,000 --> 00:51:21,000 zvláštní argument nebo jiný parametr, který 741 00:51:21,000 --> 00:51:23,000 ti, jak velká pole je. 742 00:51:23,000 --> 00:51:28,000 V tomto případě, chtěl bych použít čárky to líto, že to bude mimo obrazovku zde- 743 00:51:28,000 --> 00:51:32,000 a já bych předat v jiném argumentu 744 00:51:32,000 --> 00:51:40,000  a nazývat to int len ​​na délku. 745 00:51:40,000 --> 00:51:44,000 >> Jedna věc, která by mohla přijít na kvíz 746 00:51:44,000 --> 00:51:49,000 je výzvou k psaní nebo zavést určitou funkci s názvem něco. 747 00:51:49,000 --> 00:51:54,000 Pokud se vám nedávají prototyp, tak celá tahle věc tady, 748 00:51:54,000 --> 00:51:58,000 celý tento nepořádek je nazýván deklarace funkce nebo funkční prototyp, 749 00:51:58,000 --> 00:52:01,000 To je jedna z prvních věcí, které budete chtít donutit, pokud to není uveden 750 00:52:01,000 --> 00:52:03,000 na vás hned na kvíz. 751 00:52:03,000 --> 00:52:06,000 Další trik jsem se naučil, je, že 752 00:52:06,000 --> 00:52:11,000 říct, že jsme to vám prototyp pro funkci, a my říkáme, "Hele, musíš napsat." 753 00:52:11,000 --> 00:52:16,000 Uvnitř složených závorek, které máte v kvízu 754 00:52:16,000 --> 00:52:20,000 pokud si všimnete, že je návratový typ a zjistíte, že návratový typ 755 00:52:20,000 --> 00:52:25,000 je něco jiného, ​​než prázdna, což znamená, že funkce nevrací nic, 756 00:52:25,000 --> 00:52:28,000 pak jedna věc, budete určitě chtít udělat, je napsat 757 00:52:28,000 --> 00:52:33,000 nějaký return na samém konci funkce. 758 00:52:33,000 --> 00:52:40,000 Návrat, a v tomto případě, dáme prázdné, protože chceme, aby vyplnit prázdné. 759 00:52:40,000 --> 00:52:44,000 Ale to vás dostane myšlení správným způsobem o tom, jak budu přistupovat k tomuto problému? 760 00:52:44,000 --> 00:52:49,000 A to připomíná budete muset vrátit hodnotu 761 00:52:49,000 --> 00:52:51,000 k volajícímu funkce. 762 00:52:51,000 --> 00:52:54,000 >> Jo. >> [Student] Má styl použije, když jsme psát kód na kvíz? 763 00:52:54,000 --> 00:52:58,000 Jako odsazení a takové věci? >> [Student] Jo. 764 00:52:58,000 --> 00:53:00,000 Ne, ne tolik. 765 00:53:00,000 --> 00:53:09,000 Myslím, že hodně-to je něco, co budeme vyjasnit na kvíz v den, 766 00:53:09,000 --> 00:53:15,000 ale obvykle starosti # obsahuje a tento druh věcí, je to trochu mimo. 767 00:53:15,000 --> 00:53:17,000 [Student] Potřebujete, aby se vyjádřil své vlastnoruční kód? 768 00:53:17,000 --> 00:53:19,000 Potřebujete, aby se vyjádřil své vlastnoruční kód? 769 00:53:19,000 --> 00:53:24,000 V komentáři je vždy dobré, pokud máte obavy o částečné úvěru 770 00:53:24,000 --> 00:53:29,000 nebo chcete-li sdělit svůj záměr na srovnávač. 771 00:53:29,000 --> 00:53:33,000 Ale já, zase, bude vyjasnit na testu sám a na den kvízu, 772 00:53:33,000 --> 00:53:39,000 ale já nevěřím, že budete muset psát komentáře, no. 773 00:53:39,000 --> 00:53:42,000 Obvykle není, ale je to určitě jedna z těch věcí, kde 774 00:53:42,000 --> 00:53:45,000 můžete komunikovat svůj záměr, jako "Hej, to je místo, kde budu s ním." 775 00:53:45,000 --> 00:53:49,000 A někdy, že vám mohou pomoci s částečným úvěru. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Basil. 778 00:53:53,000 --> 00:53:56,000 [Basil] Jaký je rozdíl mezi prohlašuje, řekněme, int LANG 779 00:53:56,000 --> 00:54:03,000 v argumentech nebo parametry oproti deklarování proměnné ve funkci? 780 00:54:03,000 --> 00:54:05,000 Wow, káva šel průdušnici. 781 00:54:05,000 --> 00:54:07,000 [Basil] Jako, které věci chceme dát v argumentech. 782 00:54:07,000 --> 00:54:09,000 Jo, to je velká otázka. 783 00:54:09,000 --> 00:54:11,000 Jak si vybrat to, co věci, které chcete dát do argumentů 784 00:54:11,000 --> 00:54:17,000 proti jaké věci byste měli udělat, uvnitř funkce? 785 00:54:17,000 --> 00:54:24,000 V tomto případě jsme zařadili obě tyto jako argumenty 786 00:54:24,000 --> 00:54:29,000 proto, že jsou něco, co každý, kdo se bude používat funkci SUMA 787 00:54:29,000 --> 00:54:32,000 musí specifikovat ty věci. 788 00:54:32,000 --> 00:54:35,000 >> Součet funkce, jako jsme mluvili o tom, nemá žádný způsob, jak zjistit, 789 00:54:35,000 --> 00:54:40,000 jak velký je pole se dostane z jeho volajícího nebo komukoliv používá součet funkce. 790 00:54:40,000 --> 00:54:44,000 To má žádný způsob, jak zjistit, jak velké toto pole je. 791 00:54:44,000 --> 00:54:48,000 Důvodem míjíme v této délce tady jako argument 792 00:54:48,000 --> 00:54:51,000 Je tomu tak proto, že je to něco, co jsme v podstatě vyprávění volající funkce, 793 00:54:51,000 --> 00:54:55,000 kdo je bude používat funkci SUMA, "Hej, nejen že budete muset dát nám pole 794 00:54:55,000 --> 00:54:59,000 z ints, budete také muset říct nám, jak velký je pole, které jste nám je. " 795 00:54:59,000 --> 00:55:03,000 [Basil] Ti budou obě argumenty z příkazové řádky? 796 00:55:03,000 --> 00:55:06,000 Ne, to jsou skutečné argumenty, které byste předat funkci. 797 00:55:06,000 --> 00:55:10,000 >> Dovolte mi, abych to novou stránku zde. 798 00:55:10,000 --> 00:55:13,000 [Basil] Jako jméno by pass- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Pokud mám int main (void), 800 00:55:24,000 --> 00:55:27,000 a já dám v mém návratu 0 sem v dolní části, 801 00:55:27,000 --> 00:55:31,000 a že chci volat funkci SUMA. 802 00:55:31,000 --> 00:55:42,000 Chci říct, int x = sum (); 803 00:55:42,000 --> 00:55:46,000 Chcete-li použít funkci SUMA musím projít v obou pole, které chci shrnout 804 00:55:46,000 --> 00:55:51,000 a délka pole, takže je-li 805 00:55:51,000 --> 00:55:54,000 za předpokladu, že jsem měl celou řadu ints, 806 00:55:54,000 --> 00:56:12,000 že jsem měl int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 druh použití, které naboural do syntaxe tady, 808 00:56:16,000 --> 00:56:21,000 pak to, co budu dělat, je v součtu bych chtěl předat 809 00:56:21,000 --> 00:56:27,000 jak numbaz a číslo 3 810 00:56:27,000 --> 00:56:30,000 říci částku funkci "Dobře, tady je pole chci, abyste sečíst." 811 00:56:30,000 --> 00:56:34,000 "Tady je jeho velikost." 812 00:56:34,000 --> 00:56:39,000 Dává to smysl? Znamená to, že odpověď na vaši otázku? 813 00:56:39,000 --> 00:56:42,000 >> V mnoha ohledech to dělá paralelně, co děláme s hlavní 814 00:56:42,000 --> 00:56:44,000 když máme argumenty příkazového řádku. 815 00:56:44,000 --> 00:56:47,000 Program, jako Caesara, například, že potřeba 816 00:56:47,000 --> 00:56:53,000 Argumenty příkazového řádku nebudou moci nic dělat. 817 00:56:53,000 --> 00:56:57,000 Nebylo by vědět, jak šifrovat, pokud jste si říct, že to, co klíč k použití 818 00:56:57,000 --> 00:57:03,000 nebo pokud jste neřekl to, co jste chtěli řetězec k zašifrování. 819 00:57:03,000 --> 00:57:08,000 Dotazování pro vstup, to je místo, kde máme 2 různé mechanismy 820 00:57:08,000 --> 00:57:14,000 pro přijetí vstup od uživatele, přičemž pro informace od uživatele. 821 00:57:14,000 --> 00:57:19,000 Pro Problém Set 1 jsme viděli tento GetInt, GetString, GetFloat cestu 822 00:57:19,000 --> 00:57:26,000 z výzvy pro vstup, a to je volán pomocí standardního vstupního proudu. 823 00:57:26,000 --> 00:57:28,000 Je to trochu odlišné. 824 00:57:28,000 --> 00:57:31,000 Je to něco, co můžete udělat, najednou na rozdíl od 825 00:57:31,000 --> 00:57:35,000 při vyvolání programu, při spuštění program běží. 826 00:57:35,000 --> 00:57:41,000 Argumenty příkazového řádku všichni jsou specifikovány při spuštění programu běh. 827 00:57:41,000 --> 00:57:47,000 Byli jsme míchání dva z nich. 828 00:57:47,000 --> 00:57:52,000 Když používáme argumenty funkce, je to podobně jako argumenty příkazového řádku pro hlavní. 829 00:57:52,000 --> 00:57:56,000 Je to, když vyvoláte funkci, kterou potřebujete sdělit, 830 00:57:56,000 --> 00:58:05,000 co přesně potřebuje k plnění svých úkolů. 831 00:58:05,000 --> 00:58:08,000 Další dobrá věc dívat se na a já tě nechám na to podívat ve svém volném čase, 832 00:58:08,000 --> 00:58:11,000 a to byla pokryta v kvízu, byl tento pojem působnosti 833 00:58:11,000 --> 00:58:15,000 a lokální proměnné oproti globálních proměnných. 834 00:58:15,000 --> 00:58:18,000 Do věnovat pozornost. 835 00:58:18,000 --> 00:58:23,000 >> Teď, když jsme stále na této jiné věci, 836 00:58:23,000 --> 00:58:27,000 v týdnu 3 jsme začali mluvit o vyhledávání a řazení. 837 00:58:27,000 --> 00:58:32,000 Vyhledávání a třídění, alespoň v CS50, 838 00:58:32,000 --> 00:58:39,000 je velmi úvod do některé z teoretické části výpočetní techniky. 839 00:58:39,000 --> 00:58:42,000 Problém vyhledávání, problém třídění 840 00:58:42,000 --> 00:58:46,000 jsou velké, kanonické problémy. 841 00:58:46,000 --> 00:58:52,000 Jak si najít konkrétní číslo v poli miliard celých čísel? 842 00:58:52,000 --> 00:58:55,000 Jak si najít konkrétní jméno v telefonním seznamu 843 00:58:55,000 --> 00:58:59,000 , který je uložený na vašem notebooku? 844 00:58:59,000 --> 00:59:04,000 A tak jsme zavést tento pojem asymptotické doby běhu 845 00:59:04,000 --> 00:59:11,000 opravdu kvantifikovat, jak dlouho, jak těžké to problém je, 846 00:59:11,000 --> 00:59:14,000 jak dlouho berou řešit. 847 00:59:14,000 --> 00:59:20,000 V, věřím, 2011 v kvízu je tu problém, že jsem si zasluhuje 848 00:59:20,000 --> 00:59:27,000 pokrývající velmi rychle, což je tento, problém 12. 849 00:59:27,000 --> 00:59:32,000 O ne, je to Omega. 850 00:59:32,000 --> 00:59:41,000 >> Zde mluvíme o nejrychlejším možném běhu 851 00:59:41,000 --> 00:59:46,000 pro konkrétní algoritmus a pak nejpomalejší možné běhu. 852 00:59:46,000 --> 00:59:52,000 Tento Omega a O jsou opravdu jen zkratky. 853 00:59:52,000 --> 00:59:55,000 Jsou notační zkratky pro ostatní 854 00:59:55,000 --> 00:59:59,000 jak rychle v nejlepší možný případ bude náš algoritmus run, 855 00:59:59,000 --> 01:00:06,000 a jak pomalu v nejhorším možném případě bude náš algoritmus běží? 856 01:00:06,000 --> 01:00:10,000 Pojďme udělat pár z nich, a ty byly také zahrnuty 857 01:00:10,000 --> 01:00:13,000 v krátké na asymptotické notaci, která vřele doporučuji. 858 01:00:13,000 --> 01:00:17,000 Jackson odvedl opravdu dobrou práci. 859 01:00:17,000 --> 01:00:23,000 S binární vyhledávání, mluvíme o binární vyhledávání jako je algoritmus, 860 01:00:23,000 --> 01:00:28,000 a většinou si povídáme o tom, pokud jde o jeho velké O. 861 01:00:28,000 --> 01:00:30,000 Co je to velký O? 862 01:00:30,000 --> 01:00:34,000 Co je nejpomalejší možná doba chodu binárního vyhledávání? 863 01:00:34,000 --> 01:00:36,000 [Student] N ²? 864 01:00:36,000 --> 01:00:41,000 Zavřít, myslím, že podobně jako. 865 01:00:41,000 --> 01:00:43,000 Je to mnohem rychlejší, než to. 866 01:00:43,000 --> 01:00:45,000 [Student] Binary? >> Jo, binární vyhledávání. 867 01:00:45,000 --> 01:00:47,000 [Student] Je to log n. 868 01:00:47,000 --> 01:00:49,000 Přihlásit n, takže to, co dělá přihlásit n znamená? 869 01:00:49,000 --> 01:00:51,000 To půlky při každém opakování. 870 01:00:51,000 --> 01:00:56,000 Přesně tak, v nejpomalejší možný případ, 871 01:00:56,000 --> 01:01:00,000 říct, jestli máte seřazena pole 872 01:01:00,000 --> 01:01:08,000 milionu celých čísel a počet hledáte 873 01:01:08,000 --> 01:01:14,000 je buď první prvek v poli, nebo poslední prvek v poli. 874 01:01:14,000 --> 01:01:18,000 Pamatujte si, že binární vyhledávací algoritmus pracuje tak, že při pohledu na prostřední prvek, 875 01:01:18,000 --> 01:01:21,000 zjistit, jestli je to zápas, který hledáte. 876 01:01:21,000 --> 01:01:23,000 Pokud je, pak skvělé, jste ji našli. 877 01:01:23,000 --> 01:01:27,000 >> V nejlepším možném případě, jak rychle se binární vyhledávací běh? 878 01:01:27,000 --> 01:01:29,000 [Studenti] 1. 879 01:01:29,000 --> 01:01:32,000 1, je konstantní čas, velký O ze dne 1.. Jo. 880 01:01:32,000 --> 01:01:36,000 [Student] Mám dotaz. Když se řekne log n, myslíš s ohledem na základně 2, ne? 881 01:01:36,000 --> 01:01:40,000 Ano, tak to je jiná věc. 882 01:01:40,000 --> 01:01:44,000 Říkáme protokolu n, a myslím, že když jsem byl na střední škole 883 01:01:44,000 --> 01:01:48,000 Vždycky jsem předpokládal, že log je základ 10. 884 01:01:48,000 --> 01:01:57,000 Jo, takže ano, přihlaste základna 2 je obvykle to, co používáme. 885 01:01:57,000 --> 01:02:02,000 Opět platí, že návrat do binárního vyhledávání, pokud hledáte pro jeden 886 01:02:02,000 --> 01:02:05,000 prvek na samém konci, nebo prvek na samém začátku, 887 01:02:05,000 --> 01:02:08,000 protože začnete ve středu, a pak je vyhodíte 888 01:02:08,000 --> 01:02:13,000 podle toho, co polovina nesplňuje kritéria, která hledáte, 889 01:02:13,000 --> 01:02:15,000 a jdete na další polovinu a další polovina a další polovina. 890 01:02:15,000 --> 01:02:19,000 Pokud jsem hledal největší prvek v milionech integer pole 891 01:02:19,000 --> 01:02:25,000 Jdu na polovinu je nanejvýš protokolu 1000000 krát 892 01:02:25,000 --> 01:02:28,000 než jsem se konečně vyzkoušet a uvidíte, že element Hledám 893 01:02:28,000 --> 01:02:33,000 je v největší nebo v nejvyšší index pole, 894 01:02:33,000 --> 01:02:38,000 a že bude trvat log n, přihlaste 1 milion krát. 895 01:02:38,000 --> 01:02:40,000 >> Bubble sort. 896 01:02:40,000 --> 01:02:43,000 Myslíte si, kluci si na bubliny řazení algoritmus? 897 01:02:43,000 --> 01:02:47,000 Kevin, můžete mi dát rychlý rekapitulaci toho, co se stalo v algoritmu bubble sort? 898 01:02:47,000 --> 01:02:50,000 [Kevin] V podstatě to jde přes všechno v seznamu. 899 01:02:50,000 --> 01:02:52,000 Vypadá to na první dva. 900 01:02:52,000 --> 01:02:55,000 Je-li první z nich je větší než druhý to swap nich. 901 01:02:55,000 --> 01:02:58,000 Pak se porovnává druhý a třetí, to samé, swapy, 902 01:02:58,000 --> 01:03:00,000 třetí a čtvrté, celou cestu dolů. 903 01:03:00,000 --> 01:03:03,000 Větší čísla budou následovat až do konce. 904 01:03:03,000 --> 01:03:07,000 A po mnoha cyklech však máte hotovo. 905 01:03:07,000 --> 01:03:11,000 Přesně tak, to, co Kevin řekl, je, že budeme sledovat větší počty 906 01:03:11,000 --> 01:03:15,000 bublina až do konce pole. 907 01:03:15,000 --> 01:03:19,000 Například, nebude vám vadit, pěší nám prostřednictvím tohoto příkladu, pokud je to naše pole? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Budete mít 2 a 3. 909 01:03:21,000 --> 01:03:23,000 3 je větší než 2, takže je swap. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Dobře, tak vyměníme tyto, a tak jsme si 2, 3, 6, 4, a 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Pak budete porovnávat 3 a 6. 912 01:03:31,000 --> 01:03:33,000 3 je menší než 6, tak je necháte, 913 01:03:33,000 --> 01:03:37,000 a 6 a 4, měli byste vyměnit, protože 4 je menší než 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Dobře, tak jsem si 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] A 9 je větší než 6, takže si nechte ho. 916 01:03:46,000 --> 01:03:48,000 A vy byste se vrátit přes to znovu. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Mám udělat na tomto místě? >> [Kevin] č. 918 01:03:50,000 --> 01:03:52,000 A proč jsem neudělal v této chvíli? 919 01:03:52,000 --> 01:03:54,000 Vzhledem k tomu, to vypadá, že moje pole je řazen. Dívám se na něj. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Projděte si to znovu a ujistěte se, že nejsou žádné další swapy 921 01:03:57,000 --> 01:04:00,000 než budete moci plně zastavit. 922 01:04:00,000 --> 01:04:04,000 Přesně, takže je třeba jít dál až do konce a ujistěte se, že nejsou žádné swapy 923 01:04:04,000 --> 01:04:06,000 že je možné provést v tomto bodě. 924 01:04:06,000 --> 01:04:08,000 Bylo to opravdu jen štěstí, jak jsi říkal, že jsme skončili 925 01:04:08,000 --> 01:04:12,000 pouze musel platit 1 průchod a my seřazeny. 926 01:04:12,000 --> 01:04:16,000 Ale udělat to v obecném případě budeme skutečně muset udělat to znovu a znovu. 927 01:04:16,000 --> 01:04:20,000 A ve skutečnosti, to bylo příkladem nejlepší možný případ, 928 01:04:20,000 --> 01:04:24,000 jak jsme viděli v problému. 929 01:04:24,000 --> 01:04:28,000 Viděli jsme, že nejlepší možný případ byl n. 930 01:04:28,000 --> 01:04:32,000 Šli jsme přes pole 1 krát. 931 01:04:32,000 --> 01:04:35,000 Co je nejhorší možný případ tohoto algoritmu? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 A co to vypadá? Co by pole vypadat, že by se n? Čas? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [neslyšitelné] seřazeny. 935 01:04:43,000 --> 01:04:51,000 Přesně, takže když jsem měl pole 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 Nejprve 9 by bublina celou cestu nahoru. 937 01:04:54,000 --> 01:04:59,000 Po 1 iteraci budeme mít 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Pak 7 by bublina nahoru, 6, 5, 2, 7, 9, a tak dále, a tak dále. 939 01:05:07,000 --> 01:05:13,000 >> Museli bychom jít přes celé pole n časy, 940 01:05:13,000 --> 01:05:16,000 a můžete skutečně dostat o něco přesnější než toto 941 01:05:16,000 --> 01:05:23,000 protože jakmile jsme přesunuli 9 po celou cestu až do svého posledního možného postavení 942 01:05:23,000 --> 01:05:26,000 víme, že nikdy nebudete muset porovnat proti tomuto prvku znovu. 943 01:05:26,000 --> 01:05:29,000 Jakmile začneme bublá na 7 až 944 01:05:29,000 --> 01:05:35,000 víme, že se můžeme zastavit, jakmile 7 je přímo před 9 945 01:05:35,000 --> 01:05:37,000 neboť jsme už porovnali 9 k němu. 946 01:05:37,000 --> 01:05:46,000 Pokud to uděláte v inteligentním způsobem, že to není opravdu, myslím, že moc času. 947 01:05:46,000 --> 01:05:49,000 Nebudete porovnat všechny možné [neslyšitelné] kombinace 948 01:05:49,000 --> 01:05:55,000 pokaždé projít každé iteraci. 949 01:05:55,000 --> 01:05:59,000 Ale přesto, když mluvíme o tom horní mez můžeme říci, že 950 01:05:59,000 --> 01:06:04,000 se díváte na n ² srovnání celou cestu přes. 951 01:06:04,000 --> 01:06:12,000 >> Vraťme se zpátky, a od té doby jsme začínám trochu málo času 952 01:06:12,000 --> 01:06:15,000 Řekl bych, že byste se měli rozhodně jít přes zbytek této tabulky, 953 01:06:15,000 --> 01:06:17,000 vyplnit to všechno ven. 954 01:06:17,000 --> 01:06:20,000 Myslete na příkladech. Myslete na konkrétních příkladech. 955 01:06:20,000 --> 01:06:22,000 To je opravdu šikovný a užitečné udělat. 956 01:06:22,000 --> 01:06:25,000 Nakreslete to. 957 01:06:25,000 --> 01:06:28,000 Toto je druh tabulky, které, jak si projít v informatice 958 01:06:28,000 --> 01:06:32,000 měli byste opravdu začít znát tyto strany srdce. 959 01:06:32,000 --> 01:06:34,000 Jedná se o druhy otázek dostanete v rozhovorech. 960 01:06:34,000 --> 01:06:36,000 Jedná se o druhy věcí, které jsou dobré vědět, 961 01:06:36,000 --> 01:06:41,000 a myslím, že na ty hrany případech, opravdu přijít na to, jak přemýšlet o 962 01:06:41,000 --> 01:06:45,000 věděl, že pro bubliny třídit nejhorší možné spektrum 963 01:06:45,000 --> 01:06:52,000 třídit s tím je ten, který je v opačném pořadí. 964 01:06:52,000 --> 01:06:58,000 >> Ukazatele. Pojďme trochu pohovořit o ukazatele. 965 01:06:58,000 --> 01:07:03,000 V posledních několika minutách jsme se zde 966 01:07:03,000 --> 01:07:11,000 Já vím, že to je něco, co spolu se souborem I / O, která je poměrně nový. 967 01:07:11,000 --> 01:07:19,000 Když mluvíme o ukazatelích důvod chceme mluvit o ukazatele 968 01:07:19,000 --> 01:07:24,000 Je tomu tak proto, jeden, když pracujeme v C 969 01:07:24,000 --> 01:07:33,000 jsme opravdu na poměrně nízké úrovni v porovnání s většinou moderních programovacích jazyků. 970 01:07:33,000 --> 01:07:38,000 Jsme skutečně schopni manipulovat proměnné v paměti, 971 01:07:38,000 --> 01:07:43,000 zjistit, kde oni jsou ve skutečnosti nachází v naší paměti RAM. 972 01:07:43,000 --> 01:07:46,000 Jakmile jste se rozhodli, aby přijal tříd operační systém, který uvidíte 973 01:07:46,000 --> 01:07:48,000 že je opět jakýmsi abstrakce. 974 01:07:48,000 --> 01:07:50,000 To není ve skutečnosti pravda. 975 01:07:50,000 --> 01:07:52,000 Máme virtuální paměť, která se skrývá tyto údaje od nás. 976 01:07:52,000 --> 01:07:58,000 >> Ale teď můžete předpokládat, že když máte program, 977 01:07:58,000 --> 01:08:02,000 Například, když začnou svůj Caesara programu- 978 01:08:02,000 --> 01:08:06,000 Budu přepnout zpět do mého iPad opravdu rychle- 979 01:08:06,000 --> 01:08:12,000 že na samém začátku programu, pokud máte, řekněme, 980 01:08:12,000 --> 01:08:15,000 4 GB RAM na vašem notebooku, 981 01:08:15,000 --> 01:08:21,000 vám zrušil tento kus, a my Vám zavoláme tuto RAM. 982 01:08:21,000 --> 01:08:25,000 A začíná v místě, budeme volat 0, 983 01:08:25,000 --> 01:08:30,000 a končí na místě, které budeme nazývat 4 GB. 984 01:08:30,000 --> 01:08:37,000 Já opravdu nemohu psát. Člověk, se hacknutý, že. 985 01:08:37,000 --> 01:08:40,000 Když váš program provede 986 01:08:40,000 --> 01:08:44,000 operační systém vyřezává paměť RAM, 987 01:08:44,000 --> 01:08:51,000 a specifikuje různé segmenty pro různé části vašeho programu žijete 988 01:08:51,000 --> 01:08:58,000 Tady dole tato oblast je tak trochu země nikoho. 989 01:08:58,000 --> 01:09:02,000 Když jdete nahoru kousek dál zde 990 01:09:02,000 --> 01:09:05,000 máte skutečně na místo, kde 991 01:09:05,000 --> 01:09:09,000 kód pro umístění programových život. 992 01:09:09,000 --> 01:09:13,000 Že skutečné binární kód, ve skutečnosti, že spustitelný soubor se nahraje do paměti 993 01:09:13,000 --> 01:09:17,000 při spuštění programu, a to žije v kódu segmentu. 994 01:09:17,000 --> 01:09:22,000 A jak váš program spustí procesor se dívá na tomto kódu segmentu 995 01:09:22,000 --> 01:09:24,000 přijít na to, jaký je další instrukce? 996 01:09:24,000 --> 01:09:27,000 Jaký je další řádek kódu musím spustit? 997 01:09:27,000 --> 01:09:31,000 >> K dispozici je také datový segment, a to je tam, kde se tyto řetězce konstanty 998 01:09:31,000 --> 01:09:34,000 se uloží, které jste dosud používali. 999 01:09:34,000 --> 01:09:42,000 A pak dál tam je to místo nazývá haldy. 1000 01:09:42,000 --> 01:09:46,000 Máme přístup k paměti tam pomocí malloc, 1001 01:09:46,000 --> 01:09:49,000 a pak směrem k vrcholu svého programu 1002 01:09:49,000 --> 01:09:52,000 je tu hromada, 1003 01:09:52,000 --> 01:09:57,000 a to je, kde jsme hráli po většinu začátku. 1004 01:09:57,000 --> 01:09:59,000 To není v měřítku nebo tak něco. 1005 01:09:59,000 --> 01:10:03,000 Mnoho z toho je velmi závislá na systému, 1006 01:10:03,000 --> 01:10:10,000 operační systém závislý, ale to je poměrně, jak se věci blokového up. 1007 01:10:10,000 --> 01:10:17,000 Při spuštění programu a deklarovat proměnnou s názvem x- 1008 01:10:17,000 --> 01:10:27,000 Budu čerpat další krabici dole, a to se bude RAM stejně. 1009 01:10:27,000 --> 01:10:29,000 A budu vypadat. 1010 01:10:29,000 --> 01:10:34,000 Budeme kreslit zubaté čáry uvést toto je jen malá část paměti RAM 1011 01:10:34,000 --> 01:10:38,000 a ne všichni to, jak jsme tomu v horní části. 1012 01:10:38,000 --> 01:10:43,000 >> Pokud Prohlašuji celočíselnou proměnnou nazvanou x, 1013 01:10:43,000 --> 01:10:49,000 pak to, co jsem vlastně si je mapování 1014 01:10:49,000 --> 01:10:54,000 , který je uložen v tabulce symbolů svého programu 1015 01:10:54,000 --> 01:11:00,000 které spojuje jméno x do této oblasti paměti, které jsem vypracovány 1016 01:11:00,000 --> 01:11:03,000 tady mezi svislými pruhy. 1017 01:11:03,000 --> 01:11:08,000 Když budu mít řádek kódu v mém programu, který říká, že x = 7 1018 01:11:08,000 --> 01:11:15,000 procesor ví "Ach, ano, já vím, že x žije v této lokalitě v paměti." 1019 01:11:15,000 --> 01:11:25,000 "Chystám se jít dopředu a napsat 7 tam." 1020 01:11:25,000 --> 01:11:28,000 Jak to vědět, co to je místo v paměti? 1021 01:11:28,000 --> 01:11:30,000 No, to, že vše je hotovo v době kompilace. 1022 01:11:30,000 --> 01:11:34,000 Kompilátor se stará o přidělování, kde každé proměnné se chystáte jít 1023 01:11:34,000 --> 01:11:40,000 a vytvořit speciální mapování či spíše připojení tečky 1024 01:11:40,000 --> 01:11:43,000 mezi symbolem a, kde to bude, proměnná je jméno 1025 01:11:43,000 --> 01:11:46,000 a, kde to bude žít v paměti. 1026 01:11:46,000 --> 01:11:50,000 Ale ukázalo se, že skutečně můžeme k nim přistupovat v našich programech stejně. 1027 01:11:50,000 --> 01:11:55,000 To dostane důležité, když začneme mluvit o některých datových struktur, 1028 01:11:55,000 --> 01:11:58,000 což je pojem, který budeme zavádět později. 1029 01:11:58,000 --> 01:12:09,000 >> Ale teď, co můžete vědět, je to, že mohu vytvořit ukazatel na toto místo, x. 1030 01:12:09,000 --> 01:12:12,000 Například, mohu vytvořit proměnnou ukazatele. 1031 01:12:12,000 --> 01:12:16,000 Když jsme se vytvořit proměnnou ukazatele používáme hvězdy notaci. 1032 01:12:16,000 --> 01:12:21,000 V tomto případě, to říká budu vytvořit ukazatel na int. 1033 01:12:21,000 --> 01:12:24,000 Je to typ, stejně jako každý jiný. 1034 01:12:24,000 --> 01:12:27,000 Dáváme mu proměnnou jako y, 1035 01:12:27,000 --> 01:12:32,000 a pak nastavit tak, rovná adresu, na adrese. 1036 01:12:32,000 --> 01:12:38,000 V tomto případě, můžeme nastavit y poukázat na x 1037 01:12:38,000 --> 01:12:43,000 tím, že adresu x, které nesouvisí s tímto ampersand, 1038 01:12:43,000 --> 01:12:55,000 a pak jsme se vydali y, aby ukazoval na něj. 1039 01:12:55,000 --> 01:12:59,000 Co to v podstatě dělá, je, když se podíváme na naši RAM 1040 01:12:59,000 --> 01:13:02,000 vytváří samostatnou proměnnou. 1041 01:13:02,000 --> 01:13:04,000 Bude to říkat y, 1042 01:13:04,000 --> 01:13:06,000 a když tento řádek kódu provede 1043 01:13:06,000 --> 01:13:13,000 to je vlastně chystáte vytvořit malý ukazatel, který jsme obvykle čerpat jako šíp, 1044 01:13:13,000 --> 01:13:15,000 a nastaví y poukázat na x. 1045 01:13:15,000 --> 01:13:17,000 Ano. 1046 01:13:17,000 --> 01:13:19,000 [Student] Pokud x je již ukazatel, byste prostě 1047 01:13:19,000 --> 01:13:22,000 int * y = x namísto ampersand? 1048 01:13:22,000 --> 01:13:24,000 Ano. 1049 01:13:24,000 --> 01:13:27,000 Pokud x je již ukazatel, pak si můžete nastavit 2 ukazatele ve výši rovnající se navzájem, 1050 01:13:27,000 --> 01:13:30,000 v takovém případě by se y poukázat na x, 1051 01:13:30,000 --> 01:13:34,000 ale to by chtěl poukázat na cokoliv x ukazuje. 1052 01:13:34,000 --> 01:13:37,000 Bohužel, jsme mimo čas. 1053 01:13:37,000 --> 01:13:44,000 >> Co bych řekl v tomto bodě, můžeme si o tom promluvit režimu offline, 1054 01:13:44,000 --> 01:13:49,000 ale já bych začít pracovat prostřednictvím tohoto problému, # 14. 1055 01:13:49,000 --> 01:13:53,000 Můžete vidět, že je to už trochu vyplněn tu pro Vás. 1056 01:13:53,000 --> 01:13:57,000 Můžete vidět, že když my deklarujeme 2 ukazatele, int * x a y *, 1057 01:13:57,000 --> 01:14:01,000 a všimněte si, že nasměrování * vedle proměnné bylo něco, co bylo provedeno v loňském roce. 1058 01:14:01,000 --> 01:14:05,000 Ukazuje se, že je to podobné tomu, co děláme v tomto roce. 1059 01:14:05,000 --> 01:14:11,000 Nezáleží na tom, kde jste napsat *, když jste prohlásil ukazatel. 1060 01:14:11,000 --> 01:14:17,000 Ale my jsme psali * vedle typu 1061 01:14:17,000 --> 01:14:24,000 proto, že je velmi jasné, že jste deklarovat proměnnou ukazatele. 1062 01:14:24,000 --> 01:14:27,000 Můžete vidět, že prohlásí 2 ukazatele nám 2 krabičky. 1063 01:14:27,000 --> 01:14:31,000 Zde, když jsme x se rovná malloc 1064 01:14:31,000 --> 01:14:34,000 co to říká je zrušení paměti v haldě. 1065 01:14:34,000 --> 01:14:41,000 Tento malý box tady, to kruh, se nachází na haldě. 1066 01:14:41,000 --> 01:14:43,000 X ukazuje na něj. 1067 01:14:43,000 --> 01:14:46,000 Všimněte si, že y je stále neukazuje na nic. 1068 01:14:46,000 --> 01:14:50,000 Chcete-li získat paměť k uložení čísla 42 do x 1069 01:14:50,000 --> 01:14:55,000 bychom použili co notaci? 1070 01:14:55,000 --> 01:14:59,000 [Student] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Přesně, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 To znamená, že za šipkou a hodit 42 tam. 1073 01:15:06,000 --> 01:15:09,000 Zde, kde jsme se vydali y a x jsme y ukazuje na x. 1074 01:15:09,000 --> 01:15:13,000 Opět platí, že je to přesně to, co Kevin řekl, kde jsme se vydali y rovno x. 1075 01:15:13,000 --> 01:15:15,000 Y neukazuje na x. 1076 01:15:15,000 --> 01:15:19,000 Spíše, je to ukázal na to, co x ukazuje na stejně. 1077 01:15:19,000 --> 01:15:24,000 >> A pak se konečně v tomto posledním okně jsou 2 možné věci, které bychom mohli dělat. 1078 01:15:24,000 --> 01:15:28,000 Jedním z nich je dalo by se říci * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Druhá věc je, že jsme mohli říct: Alex, víš, co bychom mohli dělat? 1080 01:15:33,000 --> 01:15:37,000 Dalo by se říci, * x = 13 nebo- 1081 01:15:37,000 --> 01:15:41,000 [Student] Dalo by se říci, int cokoliv. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Pokud byl odkazoval se na jako int proměnné jsme mohli udělat. 1083 01:15:45,000 --> 01:15:49,000 Mohli bychom také říci, * y = 13, protože jsou oba ukázal na stejném místě, 1084 01:15:49,000 --> 01:15:51,000 tak bychom mohli použít buď proměnná se tam dostat. 1085 01:15:51,000 --> 01:15:56,000 Jo. >> [Student] Co by to vypadalo, kdybychom jen říct, int x je 13? 1086 01:15:56,000 --> 01:16:00,000 To by bylo deklarovat novou proměnnou s názvem x, který by nefungoval. 1087 01:16:00,000 --> 01:16:04,000 Měli bychom mít kolizi, protože je deklarována x za ukazatel tady. 1088 01:16:04,000 --> 01:16:10,000 [Student] Kdybychom měli toto prohlášení samo o sobě, co by to vypadat, pokud jde o kruhu? 1089 01:16:10,000 --> 01:16:14,000 Pokud bychom měli x = 13 a pak budeme mít pole, a spíše než na šipku 1090 01:16:14,000 --> 01:16:16,000 přichází po vybalení z krabice bychom nakreslit jako jen 13. 1091 01:16:16,000 --> 01:16:19,000 [Student] V poli. Dobře. 1092 01:16:19,000 --> 01:16:24,000 >> Děkujeme vám za sledování, a hodně štěstí na Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]