1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [§ 4] [menej 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 >> Dobre, vitajte späť do oddielu. 5 00:00:10,000 --> 00:00:13,000 V tomto týždni sa časti budeme robiť pár vecí. 6 00:00:13,000 --> 00:00:17,000 Budeme najprv nastaviť rekapitulácia Problém 2, 7 00:00:17,000 --> 00:00:20,000 ktorá je Caesar a Vigenère problém set. 8 00:00:20,000 --> 00:00:23,000 A potom budeme ponoriť sa do Quiz hodnotenie 0 9 00:00:23,000 --> 00:00:26,000 a stráviť trochu času rekapituluje, čo sme hovorili o tom 10 00:00:26,000 --> 00:00:30,000 v každom z prednášok tak ďaleko, a my tiež urobiť niekoľko problémov 11 00:00:30,000 --> 00:00:32,000 z predchádzajúceho roka kvízy. 12 00:00:32,000 --> 00:00:36,000 Tak vy máte dobrý spôsob, ako sa pripraviť na to. 13 00:00:36,000 --> 00:00:40,000 >> Ak chcete začať, som naštartoval až na pár dobrých riešení 14 00:00:40,000 --> 00:00:45,000 pre predchádzajúce problému nastavenie, Problem Set 2, do tohto priestoru. 15 00:00:45,000 --> 00:00:48,000 Ak ste všetko hit odkaz, 16 00:00:48,000 --> 00:00:53,000 a ak kliknete moje meno a kliknite na svoje prvé revíziu 17 00:00:53,000 --> 00:00:56,000 uvidíte caesar.c, čo je presne to, čo som pri pohľade na. 18 00:00:56,000 --> 00:01:00,000 Poďme si o tom pohovoriť naozaj rýchlo. 19 00:01:00,000 --> 00:01:02,000 To je len ukážka riešenia. 20 00:01:02,000 --> 00:01:05,000 Toto nie je nevyhnutne dokonalé riešenie. 21 00:01:05,000 --> 00:01:08,000 Existuje mnoho rôznych spôsobov, ako napísať to, 22 00:01:08,000 --> 00:01:10,000 ale existuje niekoľko vecí, ktoré som chcel zdôrazniť 23 00:01:10,000 --> 00:01:13,000 že som videl, keď som bol triedenie, časté chyby, ktoré si myslím, že 24 00:01:13,000 --> 00:01:18,000 Toto riešenie má veľmi dobrú prácu manipuláciu. 25 00:01:18,000 --> 00:01:22,000 >> Prvý má nejaký hlavičke komentármi hore. 26 00:01:22,000 --> 00:01:25,000 Na tratiach 1 až 7 sa zobrazia podrobnosti, 27 00:01:25,000 --> 00:01:28,000 čo presne tento program robí. 28 00:01:28,000 --> 00:01:32,000 Dobrý bežná prax, keď píšete kód v jazyku C 29 00:01:32,000 --> 00:01:35,000 bez ohľadu na to, ak je váš program obsiahnuté v jednom súbore alebo 30 00:01:35,000 --> 00:01:38,000 či už je to rozdelené na viac súborov, je mať nejaký 31 00:01:38,000 --> 00:01:40,000 orientovať komentár hore. 32 00:01:40,000 --> 00:01:43,000 To je tiež pre ľudí, ktorí idú von a písať kód v reálnom svete. 33 00:01:43,000 --> 00:01:47,000 To je miesto, kde sa bude dať informácie o autorských právach. 34 00:01:47,000 --> 00:01:50,000 Nižšie sú # obsahuje. 35 00:01:50,000 --> 00:01:55,000 Na riadku 16 je tu tento # define, ktorá sa vrátime v len trochu. 36 00:01:55,000 --> 00:01:59,000 A potom ešte raz spustí funkcie, jednou hlavnou štartov, 37 00:01:59,000 --> 00:02:03,000 pretože tento program bol obsiahnuté v jedinom funkciu 38 00:02:03,000 --> 00:02:09,000 Úplne prvá vec, ktorá sa stane a to je veľmi frazeológie a typické programu C 39 00:02:09,000 --> 00:02:14,000 ktorý berie v príkazovom riadku argumentov, je to, že okamžite skontroluje 40 00:02:14,000 --> 00:02:18,000 >> pre počet argumentov, argc. 41 00:02:18,000 --> 00:02:24,000 Práve tu vidíme, že tento program ich čaká 2 argumenty presne. 42 00:02:24,000 --> 00:02:27,000 Pamätajte si, že to, že prvý argument, že je to výnimočný 43 00:02:27,000 --> 00:02:29,000 že je vždy názov programu, ktorý je prevádzkovaný, 44 00:02:29,000 --> 00:02:31,000 názov spustiteľného súboru. 45 00:02:31,000 --> 00:02:36,000 A tak, čo to robí, je, že zabráni užívateľovi spustenie programu 46 00:02:36,000 --> 00:02:42,000 s viac alebo menej argumentov. 47 00:02:42,000 --> 00:02:44,000 Dôvodom chceme skontrolovať tohto práva ďaleko je, pretože 48 00:02:44,000 --> 00:02:52,000 nemôžeme skutočne prístup k tejto ArGV poľa tu spoľahlivo 49 00:02:52,000 --> 00:02:55,000 kým som skontroloval, ako je veľký. 50 00:02:55,000 --> 00:02:58,000 >> Jedným zo spoločných chýb, ktoré som videl boli ľudia by okamžite ísť 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 kľúče argumentu z poľa a to sa aj kontrolu na to, 53 00:03:06,000 --> 00:03:11,000 a potom by urobiť test na argc, rovnako ako ďalší test, 54 00:03:11,000 --> 00:03:16,000 či je alebo nie je prvý argument bol skutočne celé číslo v rovnakom čase, 55 00:03:16,000 --> 00:03:20,000 a že nefunguje, pretože v prípade, že nie sú dodávané argumenty 56 00:03:20,000 --> 00:03:26,000 budete popada argument, že tam nie je, alebo sa pokúša chytiť ten, ktorý tam nie je. 57 00:03:26,000 --> 00:03:29,000 >> Ďalšia veľká vec, že ​​si všimnete, je, že 58 00:03:29,000 --> 00:03:32,000 vždy chcete vytlačiť nejaký užitočných chybové správy 59 00:03:32,000 --> 00:03:34,000 pre užívateľov orientovať je. 60 00:03:34,000 --> 00:03:37,000 Som si istý, že ste všetci spúšťať programy, kde zrazu spadne, 61 00:03:37,000 --> 00:03:41,000 a získajte tento smiešny malý dialóg, ktorý sa objaví a povie 62 00:03:41,000 --> 00:03:44,000 niečo hrozne tajomné a možno vám chybový kód alebo niečo také 63 00:03:44,000 --> 00:03:47,000 to nedáva zmysel. 64 00:03:47,000 --> 00:03:50,000 To je miesto, kde si naozaj chcete, aby niečo užitočného 65 00:03:50,000 --> 00:03:54,000 a cielené na užívateľa tak, že pri spustení to idú "Ach," tvár dlaň. 66 00:03:54,000 --> 00:03:58,000 "Viem presne, čo robiť. Viem, ako to opraviť." 67 00:03:58,000 --> 00:04:01,000 >> Ak nechcete vytlačiť správu, potom môžete skončiť v skutočnosti 68 00:04:01,000 --> 00:04:04,000 takže užívateľ ísť preskúmať svoj zdrojový kód 69 00:04:04,000 --> 00:04:07,000 prísť na to, čo sa stalo. 70 00:04:07,000 --> 00:04:11,000 Tam sú tiež niektoré časy, ktoré budete používať rôzne chybové kódy. 71 00:04:11,000 --> 00:04:14,000 Tu sme len použitý jeden povedať, že bola chyba, 72 00:04:14,000 --> 00:04:16,000 došlo k chybe, došlo k chybe. 73 00:04:16,000 --> 00:04:20,000 Väčšie programy, často programy, ktoré sú volány inými programami, 74 00:04:20,000 --> 00:04:25,000 vráti nejaký osobitný chybových kódov v rôznych situáciách 75 00:04:25,000 --> 00:04:28,000 programovo komunikovať to, čo by inak 76 00:04:28,000 --> 00:04:32,000 stačí použiť peknou anglickou správu pre. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Pretože pracujeme sa, môžete vidieť, že vytiahnuť kľúč z 79 00:04:37,000 --> 00:04:40,000 Testujeme, či kľúč zapadá. 80 00:04:40,000 --> 00:04:42,000 Dostávame správu od užívateľa. 81 00:04:42,000 --> 00:04:46,000 Dôvod, prečo sme to v tom robiť, keď slučka-a to je niečo, čo sa budeme zaoberať 82 00:04:46,000 --> 00:04:50,000 v trochu, ale ukázalo sa, že ak zadáte ovládanie D 83 00:04:50,000 --> 00:04:54,000 keď sa dostanete, že GetString riadku na termináli 84 00:04:54,000 --> 00:04:59,000 čo to vlastne robí, je, že pošle špeciálny znak 85 00:04:59,000 --> 00:05:01,000 programu. 86 00:05:01,000 --> 00:05:05,000 Hovorí sa tomu ELF alebo koniec súboru znak. 87 00:05:05,000 --> 00:05:08,000 A v tomto prípade, bude naša správa reťazec je null, 88 00:05:08,000 --> 00:05:14,000 takže to nie je niečo, čo sme preverili v problému sama stanovila. 89 00:05:14,000 --> 00:05:17,000 >> Ale ako budeme pokračovať, teraz, keď sme začali hovoriť o ukazovatele 90 00:05:17,000 --> 00:05:21,000 a dynamické prideľovanie pamäte na haldy, 91 00:05:21,000 --> 00:05:25,000 kontrola null, kedykoľvek máte funkciu, ktorá by mohla 92 00:05:25,000 --> 00:05:30,000 vrátiť hodnotu null ako hodnota je niečo, čo budete chcieť dostať vo zvyku robiť. 93 00:05:30,000 --> 00:05:33,000 To je tu predovšetkým pre ilustráciu. 94 00:05:33,000 --> 00:05:36,000 Ale keď vidím GetString v budúcnosti, 95 00:05:36,000 --> 00:05:41,000 tak z problému Vytvoriť 4 na, budete chcieť, aby to na pamäti. 96 00:05:41,000 --> 00:05:44,000 Opäť, to nie je otázka pre problém Set 3 buď, pretože sme sa nevzťahuje to ešte. 97 00:05:44,000 --> 00:05:53,000 Nakoniec sme sa k tejto časti, kde sa dostaneme do hlavného šifrovanie slučky, 98 00:05:53,000 --> 00:05:57,000 a je tu pár vecí tu deje. 99 00:05:57,000 --> 00:06:02,000 Po prvé, sme sa určiť iteráciou cez celý reťazec správy samotnej. 100 00:06:02,000 --> 00:06:07,000 Tu sme držali strlen volanie v stave, 101 00:06:07,000 --> 00:06:12,000 ktoré mnohí z vás upozornili, nie je skvelý spôsob, ako ísť. 102 00:06:12,000 --> 00:06:15,000 Ukázalo sa, že v tomto prípade je to tiež nie je veľký, 103 00:06:15,000 --> 00:06:20,000 čiastočne preto, že sme modifikáciu obsahu samotnej správy 104 00:06:20,000 --> 00:06:27,000 vnútri slučky for, takže ak máme správu, ktorá je 10 znakov, 105 00:06:27,000 --> 00:06:32,000 prvýkrát sme kto, že pre vedenie strlen vráti čo? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Ale ak sme potom upraviť správu, že sme zmeniť jeho 5. charakter, 108 00:06:40,000 --> 00:06:46,000 a hodíme do \ 0 znak v 5. pozícii, 109 00:06:46,000 --> 00:06:49,000 na následné iterácii strlen (správa) sa nevráti to, čo urobil 110 00:06:49,000 --> 00:06:52,000 Vôbec prvýkrát sme zopakovali, 111 00:06:52,000 --> 00:06:56,000 ale namiesto toho vráti 5, pretože sme hodili v tomto null terminátor, 112 00:06:56,000 --> 00:06:59,000 a reťazec je dĺžka je definovaná 113 00:06:59,000 --> 00:07:03,000 podľa polohy tohto \ 0. 114 00:07:03,000 --> 00:07:09,000 V tomto prípade, je to skvelý spôsob, ako ísť, pretože sme úpravou na mieste. 115 00:07:09,000 --> 00:07:13,000 Ale zistíte, že je to vlastne prekvapivo jednoduché šifrovanie 116 00:07:13,000 --> 00:07:16,000 ak môžete získať matematika správne. 117 00:07:16,000 --> 00:07:19,000 Všetko, čo je potrebné je skontrolovať, či alebo nie list, ktorý ste pri pohľade na 118 00:07:19,000 --> 00:07:21,000 je veľká alebo malé písmená. 119 00:07:21,000 --> 00:07:24,000 >> Dôvod, prečo sme len pre kontrolu, že a nemáme pre kontrolu 120 00:07:24,000 --> 00:07:27,000 je alfa prípad je, pretože 121 00:07:27,000 --> 00:07:30,000 ak znak je veľká alebo, ak je to malé 122 00:07:30,000 --> 00:07:33,000 potom je to určite abecedný znak, 123 00:07:33,000 --> 00:07:38,000 pretože nemáme malá a veľká číslice. 124 00:07:38,000 --> 00:07:41,000 Ďalšia vec, ktorú robíme, a to je trochu zložitejšie, 125 00:07:41,000 --> 00:07:45,000 je sme upravili štandardný Caesara vzorca 126 00:07:45,000 --> 00:07:49,000 že sme dali v špecifikácii problému set. 127 00:07:49,000 --> 00:07:52,000 Aký je rozdiel tu je, že odpočíta 128 00:07:52,000 --> 00:07:58,000 v prípade veľkým kapitálom, a potom sme pridali kapitál A 129 00:07:58,000 --> 00:08:02,000 späť na konci. 130 00:08:02,000 --> 00:08:05,000 >> Viem, že niektorí z vás to urobil vo vašom kóde. 131 00:08:05,000 --> 00:08:09,000 Bolo niekto z vás to vo vašich príspevkov? 132 00:08:09,000 --> 00:08:13,000 To si urobil ty. Môžete mi vysvetliť, čo to robí, Sahb? 133 00:08:13,000 --> 00:08:18,000 Odpočítaním to, pretože ste mod hneď po ňom, 134 00:08:18,000 --> 00:08:21,000 budete musieť vziať to tak, že spôsob, akým sa dostať [kašeľ] pozície. 135 00:08:21,000 --> 00:08:25,000 A potom pridaním späť neskôr si prehodili ten, ktorý ste chceli. 136 00:08:25,000 --> 00:08:27,000 Jo, presne tak. 137 00:08:27,000 --> 00:08:32,000 What Sahb povedal, bolo, že keď budeme chcieť pridať 138 00:08:32,000 --> 00:08:36,000 naše posolstvo a naším hlavným spoločne 139 00:08:36,000 --> 00:08:42,000 a potom mod, že mod že NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 ak sa nezhromažďujú našej správu do príslušnej 0-25 rozsahu ako prvý, 141 00:08:50,000 --> 00:08:54,000 potom by sme mohli skončiť dostať naozaj divný číslo 142 00:08:54,000 --> 00:08:59,000 pretože hodnoty, ktoré sme pri pohľade na, keď sa pozrieme na správy [i], 143 00:08:59,000 --> 00:09:03,000 keď sa pozrieme na tej charakteru našej prostý textové správy, 144 00:09:03,000 --> 00:09:08,000 je hodnota niekde v tomto rozsahu 65 až 122 145 00:09:08,000 --> 00:09:13,000 na základe hodnôt ASCII pre veľké a až malé písmená z 146 00:09:13,000 --> 00:09:18,000 A tak, keď sme mod ju 26 alebo NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 pretože to bol náš # define vpravo hore tu, 148 00:09:23,000 --> 00:09:28,000 , Čo sa deje, aby nám hodnotu, ktorá je v rozmedzí 0 až 25, 149 00:09:28,000 --> 00:09:30,000 a my potrebujeme spôsob, ako potom škálovanie, že zálohovať 150 00:09:30,000 --> 00:09:32,000 a dostať sa do príslušnej ASCII rozsahu. 151 00:09:32,000 --> 00:09:36,000 Najjednoduchší spôsob, ako to urobiť, je len mierka všetko dole 152 00:09:36,000 --> 00:09:39,000 do 0-25 rozmedzí začať, 153 00:09:39,000 --> 00:09:43,000 a potom sa posunie všetko späť až na konci. 154 00:09:43,000 --> 00:09:46,000 >> Ďalšou častou chybou, že som videl ľudí bežať do je, že 155 00:09:46,000 --> 00:09:50,000 ak nemáte skutočne urobiť škálovanie hneď 156 00:09:50,000 --> 00:09:53,000 pridať správu a kľúč dohromady a pridať ich, povedzme, 157 00:09:53,000 --> 00:09:58,000 do char premenné, problém s tým 158 00:09:58,000 --> 00:10:01,000 je od správy [i] je pomerne veľký počet začať s- 159 00:10:01,000 --> 00:10:05,000 pamätajte, že je to minimálne 65, ak je to veľká postava- 160 00:10:05,000 --> 00:10:09,000 Ak máte veľký kľúč, povedzme, niečo ako 100, 161 00:10:09,000 --> 00:10:13,000 a pridáte tie 2 spolu do podpísaná char budeš dostať pretečeniu. 162 00:10:13,000 --> 00:10:17,000 Budeš si hodnotu, ktorá je väčšia ako 127, 163 00:10:17,000 --> 00:10:22,000 čo je najväčšia hodnota, ktorú char premenná môže držať. 164 00:10:22,000 --> 00:10:26,000 Opäť platí, že je to dôvod, prečo by ste chceli robiť takéto veci začať. 165 00:10:26,000 --> 00:10:29,000 Niektorí ľudia dostali okolo tomto prípade tým, že robí ak inde a testovanie 166 00:10:29,000 --> 00:10:33,000 vidieť, keď by pretečeniu pred tým, že 167 00:10:33,000 --> 00:10:36,000 ale tento spôsob sa dostane okolo toho. 168 00:10:36,000 --> 00:10:40,000 A potom sa v tomto riešení sme vytlačiť celý reťazec až na samom konci. 169 00:10:40,000 --> 00:10:45,000 Ostatní ľudia vytlačiť znak v čase. Obaja sú úžasné. 170 00:10:45,000 --> 00:10:51,000 V tomto bode, to vy máte nejaké otázky, pripomienky ohľadne tejto? 171 00:10:51,000 --> 00:10:56,000 Čo sa vám páči, veci sa vám nepáči? 172 00:10:56,000 --> 00:10:58,000 >> Mal som otázku. 173 00:10:58,000 --> 00:11:01,000 Možno mi to uniklo počas vysvetlenie, ale ako sa tento program 174 00:11:01,000 --> 00:11:07,000 preskočiť medzery pre pripojenie kľúč k dĺžke textu? 175 00:11:07,000 --> 00:11:10,000 To je len Caesarovho šifra. >> Oh, prepáč, 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óde Caesar sme okolo toho, pretože 178 00:11:16,000 --> 00:11:18,000 my len prevrátený znaky. 179 00:11:18,000 --> 00:11:27,000 Máme len otočil je, ak boli veľké alebo malé písmená. 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áhajte kopírovať tento domov, vezmite si ju, 182 00:11:34,000 --> 00:11:37,000 porovnaní s tým, čo ste napísal. 183 00:11:37,000 --> 00:11:42,000 Rozhodne neváhajte a pošlite otázky o tom taky. 184 00:11:42,000 --> 00:11:46,000 A opäť si uvedomiť, že cieľom tu so svojim problémom sety 185 00:11:46,000 --> 00:11:50,000 nie je dostať vy písať dokonalé kód pre vaše problémové súbory. 186 00:11:50,000 --> 00:11:57,000 Je to vzdelávacia skúsenosť. Jo. 187 00:11:57,000 --> 00:12:01,000 >> Späť na DO, kým slučka, ak sa rovná nula, 188 00:12:01,000 --> 00:12:06,000 takže null len znamená nič, jednoducho stlačte klávesu Enter? 189 00:12:06,000 --> 00:12:12,000 Null je špeciálny ukazovateľ hodnoty, 190 00:12:12,000 --> 00:12:17,000 a používame null, keď chceme povedať, 191 00:12:17,000 --> 00:12:23,000 máme ukazovateľ premennú, ktorá smerovala k ničomu. 192 00:12:23,000 --> 00:12:28,000 A tak typicky to znamená, že táto premenná, táto správa premenná 193 00:12:28,000 --> 00:12:35,000 je prázdny, a tu, pretože sme pomocou CS50 špeciálny typ reťazca, 194 00:12:35,000 --> 00:12:37,000 čo je CS50 string typ? 195 00:12:37,000 --> 00:12:42,000 Už ste videli, čo to je, keď Dávid vytiahol kapucni v prednáške? 196 00:12:42,000 --> 00:12:44,000 Je to funky-je to ukazovateľ, že jo? 197 00:12:44,000 --> 00:12:48,000 Dobre, jo. >> Je to char *. 198 00:12:48,000 --> 00:12:52,000 A tak naozaj sme mohli nahradiť tento 199 00:12:52,000 --> 00:12:56,000 tu s char * správy, 200 00:12:56,000 --> 00:13:04,000 a tak GetString funkcie, ak to nie je úspešne dostať reťazec od užívateľa, 201 00:13:04,000 --> 00:13:08,000 nemôže analyzovať reťazec, a jeden prípad, v ktorom sa nemôže analyzovať reťazec 202 00:13:08,000 --> 00:13:11,000 ak je užívateľ zadá koniec súboru znak, ovládacie D, 203 00:13:11,000 --> 00:13:17,000 čo nie je niečo, čo zvyčajne robia, ale keď sa to stane 204 00:13:17,000 --> 00:13:20,000 potom funkcia vráti túto hodnotu null ako spôsob, ako hovorí 205 00:13:20,000 --> 00:13:23,000 "Hej, ja som nedostal reťazec." 206 00:13:23,000 --> 00:13:27,000 Čo by sa stalo, keby sme nedávajte message = null, 207 00:13:27,000 --> 00:13:30,000 čo je niečo, sme to robili ešte? 208 00:13:30,000 --> 00:13:32,000 Prečo by to byť problém tu? 209 00:13:32,000 --> 00:13:38,000 Pretože viem, že sme spolu hovorili trochu v prednáške o pretečeniu pamäte. 210 00:13:38,000 --> 00:13:42,000 Jo, poďme to urobiť, a uvidíme, čo sa stane. 211 00:13:42,000 --> 00:13:44,000 >> Vasila Blaženého otázka bola, čo sa stane, ak nebudeme skutočne mať 212 00:13:44,000 --> 00:13:48,000 Táto správa = null test? 213 00:13:48,000 --> 00:13:51,000 Poďme prejdite až na vrchol. 214 00:13:51,000 --> 00:13:53,000 Vy môžete komentovať to. 215 00:13:53,000 --> 00:13:55,000 Vlastne, ja budem šetriť ho v revízii. 216 00:13:55,000 --> 00:13:58,000 To bude revízia 3. 217 00:13:58,000 --> 00:14:02,000 Čo budete musieť urobiť, aby spustenie tohto programu je budete musieť kliknúť na tento ikonu ozubeného kolieska tu, 218 00:14:02,000 --> 00:14:04,000 a budete musieť pridať argument k tomu. 219 00:14:04,000 --> 00:14:10,000 Budete musieť dať Kľúčovým argumentom, pretože chceme odovzdať argument príkazového riadku. 220 00:14:10,000 --> 00:14:13,000 Tu budem dávať mu číslo 3. Páči sa mi 3. 221 00:14:13,000 --> 00:14:19,000 Teraz zoom späť, spustenie programu. 222 00:14:19,000 --> 00:14:24,000 Je to beh, zostavovanie, stavebniny. 223 00:14:24,000 --> 00:14:27,000 Ideme na to. Je to čaká na vyzvanie. 224 00:14:27,000 --> 00:14:33,000 Ak píšem v niečom ako hello ak to šlo? 225 00:14:33,000 --> 00:14:38,000 Oh, môj program trvalo príliš dlho bežať. Bol som jawing príliš dlho. 226 00:14:38,000 --> 00:14:40,000 Tu to ide. 227 00:14:40,000 --> 00:14:43,000 Teraz som písať ahoj. 228 00:14:43,000 --> 00:14:46,000 Vidíme, že šifruje vhodne. 229 00:14:46,000 --> 00:14:52,000 Teraz, čo sa stane, keď budeme robiť rýchle GetString vrátiť null? 230 00:14:52,000 --> 00:14:57,000 Nezabudni, že povedať, že sme, že po stlačení ovládacieho D v rovnakom čase. 231 00:14:57,000 --> 00:14:59,000 Budem prechádzať sem. Urobíme to znova. 232 00:14:59,000 --> 00:15:01,000 Budova. Tam to ide. 233 00:15:01,000 --> 00:15:04,000 Teraz, keď som narazila ovládanie D 234 00:15:04,000 --> 00:15:12,000 Dostal som tento riadok, ktorý hovorí opt/sandbox50/bin/run.sh, Segmentation fault. 235 00:15:12,000 --> 00:15:15,000 Už ste videli, že predtým? 236 00:15:15,000 --> 00:15:17,000 >> [Študent] Prečo nie >> ľúto? 237 00:15:17,000 --> 00:15:20,000 [Študent] Prečo nie je core dump v tomto prípade? 238 00:15:20,000 --> 00:15:26,000 Jadro dump je-otázka je prečo nie je core dump tu? 239 00:15:26,000 --> 00:15:29,000 Otázka je, že môže byť, ale core dump je súbor 240 00:15:29,000 --> 00:15:31,000 , Ktorý sa uloží na pevný disk. 241 00:15:31,000 --> 00:15:34,000 V tomto prípade sme zakázaná core dump 242 00:15:34,000 --> 00:15:37,000 na úteku serveri tak, aby nemáme ľudí seg kritizovať 243 00:15:37,000 --> 00:15:40,000 a vybudovanie ton 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ádok sú také veci, ktoré môžete často zakázať, 246 00:15:48,000 --> 00:15:52,000 a niekedy to. 247 00:15:52,000 --> 00:15:55,000 Segmentation fault, aby som odpovedal na vašu otázku, Basil, 248 00:15:55,000 --> 00:16:00,000 sa hovorí, že sme sa snažili pristupovať ukazovateľ 249 00:16:00,000 --> 00:16:05,000 , Ktorý nebol nastavený, aby ukazoval na čokoľvek. 250 00:16:05,000 --> 00:16:09,000 Nezabudnite Binky vo videu, kedy Binky sa snaží 251 00:16:09,000 --> 00:16:12,000 ísť prístup ukazovateľ, ktorý nie je smerujúce k ničomu? 252 00:16:12,000 --> 00:16:16,000 V tomto prípade myslím, že technicky ukazovateľ ukazuje na niečo. 253 00:16:16,000 --> 00:16:20,000 Je to ukazuje na null, čo je technicky 0, 254 00:16:20,000 --> 00:16:25,000 ale, ktorý je definovaný ako v segmente, ktorý nie je prístupný 255 00:16:25,000 --> 00:16:28,000 váš program, takže získate Segmentation fault 256 00:16:28,000 --> 00:16:31,000 pretože nie ste prístup pamäť, ktorá je v platnej segmente 257 00:16:31,000 --> 00:16:38,000 ako haldy segmentu alebo zásobníka segment alebo dátového segmentu. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Nejaké ďalšie otázky o Caesarovi? 260 00:16:48,000 --> 00:16:51,000 >> Poďme ďalej. Poďme sa pozrieť na revízie 2 naozaj rýchlo. 261 00:16:51,000 --> 00:17:00,000 To je Vigenère. 262 00:17:00,000 --> 00:17:04,000 Tu v Vigenère 263 00:17:04,000 --> 00:17:06,000 prejdeme tento docela rýchlo, pretože znovu, 264 00:17:06,000 --> 00:17:10,000 Vigenère a Caesar sú veľmi podobné. 265 00:17:10,000 --> 00:17:12,000 Header komentár je skôr, 266 00:17:12,000 --> 00:17:17,000 # Define je pred vyhnúť sa používanie týchto magických čísel. 267 00:17:17,000 --> 00:17:21,000 Pekná vec je, že sme chceli prejsť na 268 00:17:21,000 --> 00:17:23,000 iný abeceda alebo niečo také. 269 00:17:23,000 --> 00:17:26,000 Skôr než by museli ísť ručne zmeniť všetky 26 rokov v kóde 270 00:17:26,000 --> 00:17:30,000 môžeme to zmeniť na 27 alebo pádu dole 271 00:17:30,000 --> 00:17:34,000 ak sme používali rôzne abecedy, rôzne jazyky. 272 00:17:34,000 --> 00:17:38,000 Opäť, máme túto kontrolu na počet argumentov, 273 00:17:38,000 --> 00:17:42,000 a naozaj môžete takmer brať ako šablónu. 274 00:17:42,000 --> 00:17:46,000 Skoro každý program, ktorý by mal mať zápis- 275 00:17:46,000 --> 00:17:50,000 keby to malo trvať argumentov na príkazovom riadku-niektoré sekvencie z liniek 276 00:17:50,000 --> 00:17:55,000 že číta takto na začiatku. 277 00:17:55,000 --> 00:17:59,000 To je jedna z prvých zdravý rozum testov, ktoré chcete robiť. 278 00:17:59,000 --> 00:18:03,000 >> Tu, čo sme urobili, bolo sme iste, že 279 00:18:03,000 --> 00:18:06,000 kľúčové slovo je platný, a že bol druhý kontrola, že sme urobili. 280 00:18:06,000 --> 00:18:11,000 Všimnite si, opäť, že sme sa rozišli to z argc a 2. 281 00:18:11,000 --> 00:18:14,000 Všimnite si, že v tomto prípade jedna vec, že ​​sme museli urobiť, bolo miesto 282 00:18:14,000 --> 00:18:18,000 použitie až aj my sme chceli overiť celý reťazec, 283 00:18:18,000 --> 00:18:21,000 a aby k tomu, že ste skutočne ísť znak po znaku 284 00:18:21,000 --> 00:18:23,000 cez reťazec. 285 00:18:23,000 --> 00:18:29,000 Neexistuje žiadny dobrý spôsob, ako volať niečo na ňom 286 00:18:29,000 --> 00:18:31,000 pretože aj, napríklad, až i vráti 0 287 00:18:31,000 --> 00:18:37,000 , Pokiaľ nie je analyzovať celé číslo, tak, že sa ani pracovať. 288 00:18:37,000 --> 00:18:42,000 Opäť, pekný správa musí užívateľovi oznámiť, čo presne sa stalo. 289 00:18:42,000 --> 00:18:45,000 Potom tu, zase sme tiež zvládnuť prípad, kedy 290 00:18:45,000 --> 00:18:50,000 používateľ zadá do ovládacieho D náhodný charakter. 291 00:18:50,000 --> 00:18:54,000 >> A potom Charlotte mal otázku skôr, o tom, ako sa nám podarí preskočiť medzery 292 00:18:54,000 --> 00:18:57,000 v našom reťazci tu. 293 00:18:57,000 --> 00:19:00,000 To bolo trochu podobné tomu, čo sme robili s Myspace programu 294 00:19:00,000 --> 00:19:04,000 že sme v bode, a tak to fungovalo 295 00:19:04,000 --> 00:19:08,000 je to, že sme sledovali počet listov, ktoré sme videli. 296 00:19:08,000 --> 00:19:13,000 Keď sme šli cez správy reťazca, ako sme šli cez znak po znaku, 297 00:19:13,000 --> 00:19:16,000 sme sledovali index ako súčasť našej slučky for, a potom sme tiež sledovaná 298 00:19:16,000 --> 00:19:21,000 počet písmen, tak non-špeciálne znaky, non-číslice, non-white space 299 00:19:21,000 --> 00:19:27,000 že sme videli v samostatnej premennej. 300 00:19:27,000 --> 00:19:33,000 A potom toto riešenie upravuje kľúč 301 00:19:33,000 --> 00:19:41,000 získať aktuálne kľúč celé číslo, a to robí, že za behu, 302 00:19:41,000 --> 00:19:47,000 priamo pred to potom ide na zašifrovanie aktuálne správy charakter. 303 00:19:47,000 --> 00:19:50,000 Tam sú niektoré riešenia, ktoré boli dokonale taky skvelé 304 00:19:50,000 --> 00:19:58,000 ktoré by zmeniť kľúč sa pri testovaní pre kľúč platnosti. 305 00:19:58,000 --> 00:20:01,000 Okrem toho, že sa uistil, že charakter a kľúčové slovo 306 00:20:01,000 --> 00:20:05,000 bol znak abecedy tiež ukázalo, že na celé číslo 307 00:20:05,000 --> 00:20:13,000 v rozmedzí 0 až 25, aby potom prejdite majú čo do činenia, že neskôr v tomto pre slučke. 308 00:20:13,000 --> 00:20:18,000 Opäť, tu vidíte je to naozaj presne rovnaký kód 309 00:20:18,000 --> 00:20:22,000 že sme použili Caesar v tomto bode. 310 00:20:22,000 --> 00:20:25,000 Robíte presne to isté, takže skutočný trik je prísť na to, 311 00:20:25,000 --> 00:20:30,000 ako premeniť na základe kľúčového slova na celé číslo. 312 00:20:30,000 --> 00:20:35,000 >> Jedna vec, že ​​sme tu, že je málo hustá 313 00:20:35,000 --> 00:20:39,000 je, že sme zopakoval túto frázu, myslím, že by ste mohli nazvať, 314 00:20:39,000 --> 00:20:45,000 3 samostatné časy na tratiach 58, 59, a 61. 315 00:20:45,000 --> 00:20:52,000 Môže mi niekto vysvetliť, čo presne táto fráza robí? 316 00:20:52,000 --> 00:20:55,000 Je to prístup postavu, ako si povedal. 317 00:20:55,000 --> 00:20:59,000 Jo, je to [nepočuteľné] znak na kľúčové slovo, 318 00:20:59,000 --> 00:21:04,000 a tak je to číslo videli písmen, pretože ste len pohybujúce sa 319 00:21:04,000 --> 00:21:06,000 kľúčové slovo, akonáhle ste videli ten list, 320 00:21:06,000 --> 00:21:10,000 tak, že sa to skutočne preskočiť medzery a tak podobne. 321 00:21:10,000 --> 00:21:12,000 Jo, presne tak. 322 00:21:12,000 --> 00:21:16,000 A potom, akonáhle ste videli kľúčové slovo prázdne stačí mod takže sa vrátiť okolo. 323 00:21:16,000 --> 00:21:18,000 Presne tak. To je perfektné vysvetlenie. 324 00:21:18,000 --> 00:21:23,000 To, čo Kevin povedal, je, že chceme, aby index do dané kľúčové slovo. 325 00:21:23,000 --> 00:21:28,000 Chceme sa dostať na num_letters_seen charakter, ak chcete, 326 00:21:28,000 --> 00:21:32,000 ale keď num_letters_seen presahuje dĺžku kľúčových slov, 327 00:21:32,000 --> 00:21:37,000 spôsob, akým sa dostať späť do náležitého rozsahu ich budeme používať mod operátora 328 00:21:37,000 --> 00:21:40,000 efektívne zabaliť okolo. 329 00:21:40,000 --> 00:21:43,000 Napríklad, rovnako ako v krátkej, naše kľúčové slovo je slanina, 330 00:21:43,000 --> 00:21:46,000 a je to 5 znakov dlhé. 331 00:21:46,000 --> 00:21:50,000 Ale my sme videli 6 písmen v našom formáte obyčajného textu v tomto bode 332 00:21:50,000 --> 00:21:52,000 a šifrované 6. 333 00:21:52,000 --> 00:21:57,000 Budeme skončiť prístup k num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 čo je 6, mod dĺžka kľúčového slova, 5, 335 00:22:00,000 --> 00:22:04,000 a tak dostaneme 1, a tak čo budeme robiť, je stretneme 336 00:22:04,000 --> 00:22:14,000 prístup prvý znak vo vnútri nášho kľúčového slova v tomto bode. 337 00:22:14,000 --> 00:22:21,000 >> Dobre, nejaké otázky na Vigenère 338 00:22:21,000 --> 00:22:26,000 skôr než prejdeme? 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, skvelé. 341 00:22:35,000 --> 00:22:38,000 Chcem sa uistiť, že vy ste dostať šancu vidieť kód 342 00:22:38,000 --> 00:22:48,000 že si myslíme, že vyzerá dobre a majú šancu učiť sa od neho. 343 00:22:48,000 --> 00:22:53,000 To bude posledná budeme pomocou medzier v súčasnej dobe, 344 00:22:53,000 --> 00:22:59,000 a budeme prechod teraz, a ja ísť na cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 takže môžeme urobiť trochu preskúmanie kvíz. 346 00:23:06,000 --> 00:23:10,000 Najlepší spôsob, ako si myslím, začať robiť kvíz recenzia 347 00:23:10,000 --> 00:23:15,000 je prísť na tejto stránke prednášky, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 a pod každou z týždňa čísel, takže keď som sa pozrieť tu v týždni 0, 349 00:23:20,000 --> 00:23:27,000 Vidím, že máme zoznam tém, ktoré sme prebrali v týždni 0. 350 00:23:27,000 --> 00:23:31,000 >> Ak niektorý z týchto tém sa zdá neznáme pre vás 351 00:23:31,000 --> 00:23:34,000 budete určite chcieť vrátiť späť a prečesať skriptá a možno 352 00:23:34,000 --> 00:23:39,000 dokonca preletieť prednášok, pozerať sa na ne znova, ak chcete 353 00:23:39,000 --> 00:23:44,000 získať pocit, pre to, čo sa deje s každým z týchto tém. 354 00:23:44,000 --> 00:23:49,000 Poviem navyše tento rok jeden z chladných zdrojov sme dostali 355 00:23:49,000 --> 00:23:55,000 je, že tieto šortky, ktoré sme vytvorili, a keď sa pozriete v týždni 0, 356 00:23:55,000 --> 00:24:00,000 nemáme všetky preberaných témach, ale máme docela málo z nich, 357 00:24:00,000 --> 00:24:03,000 niektoré zložitejšie, preto je sledovanie týchto krátkych znova 358 00:24:03,000 --> 00:24:08,000 je dobrý spôsob, ako sa dostať až do rýchlosti. 359 00:24:08,000 --> 00:24:15,000 Najmä, ja dám do zásuvky pre 3 na dne, pretože som robil ty. 360 00:24:15,000 --> 00:24:20,000 Ale ak ste zápasí s binárne, bity, šesťhranné, že druh veci, 361 00:24:20,000 --> 00:24:22,000 binárny je skvelé miesto pre štart. 362 00:24:22,000 --> 00:24:25,000 ASCII je ešte jeden, ktorý je dobrý pre zobrazenie príliš. 363 00:24:25,000 --> 00:24:31,000 Môžete dokonca sledovať ma na 1.5x rýchlosti, ak budem príliš pomalý pre vás. 364 00:24:31,000 --> 00:24:35,000 Pretože je to hodnotenie, neváhajte to urobiť. 365 00:24:35,000 --> 00:24:40,000 >> Stačí začať naozaj rýchlo, budeme prejsť pár týchto vedomostných problémov 366 00:24:40,000 --> 00:24:44,000 len rýchlo chrliť cez tieto. 367 00:24:44,000 --> 00:24:50,000 Napríklad, poďme sa pozrieť na problém 16, že mám priamo tu na stole. 368 00:24:50,000 --> 00:24:54,000 Máme tento nasledujúci výpočet v binárnej, 369 00:24:54,000 --> 00:24:56,000 a chceme ukázať nejakú prácu. 370 00:24:56,000 --> 00:24:59,000 Dobre, ja ti dám to výstrel. 371 00:24:59,000 --> 00:25:01,000 Vy by mala nasledovať spolu s papierom, 372 00:25:01,000 --> 00:25:04,000 a my urobíme to naozaj rýchlo. 373 00:25:04,000 --> 00:25:06,000 Ak chceme vykonávať nasledujúce výpočet v binárnom kóde. 374 00:25:06,000 --> 00:25:16,000 Mám 00110010. 375 00:25:16,000 --> 00:25:27,000 A budem sa pridať k nej 00.110.010. 376 00:25:27,000 --> 00:25:30,000 Pre matematiky géniov po spolu doma, 377 00:25:30,000 --> 00:25:35,000 je to skutočne vynásobením 2. 378 00:25:35,000 --> 00:25:37,000 Poďme začať. 379 00:25:37,000 --> 00:25:39,000 Budeme sledovať rovnaký sčítanie algoritmus, ktorý my 380 00:25:39,000 --> 00:25:43,000 keď pridáme desatinné čísla dohromady. 381 00:25:43,000 --> 00:25:46,000 Naozaj jediný rozdiel je, že sme slučka späť okolo 382 00:25:46,000 --> 00:25:51,000 akonáhle budeme mať 1 + 1 miesto, akonáhle sme sa dostali do 10. 383 00:25:51,000 --> 00:25:53,000 >> Ak vychádzame z práva, naozaj rýchlo, čo je prvá číslica? 384 00:25:53,000 --> 00:25:55,000 [Študent] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Skvelé, druhá číslica? 386 00:25:58,000 --> 00:26:00,000 [Študent] 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 [Študent] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Presne tak, takže to, čo je číslica, že píšem priamo pod 2 tie sčítajú? 390 00:26:08,000 --> 00:26:11,000 [Študent] 1, 0, alebo 0 a potom niesť 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 a niesť 1, presne. 392 00:26:15,000 --> 00:26:18,000 Ďalej jeden hore, Basile, ty si hore. 393 00:26:18,000 --> 00:26:20,000 Čo je to tretie? >> [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 čo mám robiť? 397 00:26:30,000 --> 00:26:32,000 [Študent] 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] A čo mám robiť? A potom som niesť 1. 399 00:26:34,000 --> 00:26:36,000 Perfektné, Sahb? >> [Sahb] Teraz máte 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] A mám robiť tu niečo? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Potom pre budúci máte 1, pretože ste robili znova 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Skvelé, takže tu môžeme dokončiť ju. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Študent] 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, ako si povedal, je 10, alebo 1, 0, skôr. 407 00:27:01,000 --> 00:27:07,000 10 je chybný, pretože sa mi 10 znamená počet 10, 408 00:27:07,000 --> 00:27:12,000 a je to vtip, ako sme reprezentovať to, keď sme písanie. 409 00:27:12,000 --> 00:27:20,000 Zastupujeme číslo 2 v 1, 0, a číslo 10 je mierne odlišná. 410 00:27:20,000 --> 00:27:23,000 >> Čo je celkom pekné o binárny je, že tam naozaj nie je, že veľa 411 00:27:23,000 --> 00:27:25,000 prípadoch musíte naučiť. 412 00:27:25,000 --> 00:27:30,000 K dispozícii je 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 je 0, a potom niesť 1, 414 00:27:34,000 --> 00:27:37,000 a potom môžete vidieť tu na treťom stĺpci sprava 415 00:27:37,000 --> 00:27:40,000 sme mali 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 ďalšie 1. 418 00:27:45,000 --> 00:27:48,000 Keď robíte binárne sčítanie, veľmi jednoduchý. 419 00:27:48,000 --> 00:27:51,000 Ja by som to ešte pár z nich do sanity check sami 420 00:27:51,000 --> 00:27:54,000 predtým, než idete do systému, pretože je to 421 00:27:54,000 --> 00:28:00,000 Asi niečo, čo uvidíme na kvíz. 422 00:28:00,000 --> 00:28:03,000 Teraz poďme to urobiť budúci rovnako. 423 00:28:03,000 --> 00:28:06,000 Poďme urobiť problém 17. 424 00:28:06,000 --> 00:28:12,000 Budeme previesť nasledujúce binárne číslo na desiatkové. 425 00:28:12,000 --> 00:28:28,000 Mám 10100111001. 426 00:28:28,000 --> 00:28:33,000 Zapamätať si ma na binárne videu, že som to urobil 427 00:28:33,000 --> 00:28:36,000 Prešiel som pár príkladov, a som ukazoval, ako 428 00:28:36,000 --> 00:28:41,000 všetko funguje, keď robíte to v desiatkovej sústave. 429 00:28:41,000 --> 00:28:45,000 Keď pracujete v desiatkovej sústavy Myslím, že sme 430 00:28:45,000 --> 00:28:48,000 v tomto bode v našom živote tak plynule v tom, že 431 00:28:48,000 --> 00:28:53,000 je to celkom ľahké zakryť mechaniku, ako to vlastne funguje. 432 00:28:53,000 --> 00:28:59,000 >> Ale urobiť rýchlu rekapituláciu, keď mám číslo 137 433 00:28:59,000 --> 00:29:06,000 to vlastne znamená a znova, je to v desiatkovej sústavy, 434 00:29:06,000 --> 00:29:19,000 číslo 137 v desiatkovej sústave znamená, že mám 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 To všetko je zostať na obrazovke. 436 00:29:22,000 --> 00:29:29,000 A potom, keď sa pozriete na týchto číslach tu, 437 00:29:29,000 --> 00:29:34,000 100, 10 a 1, zistíte, že sú to vlastne všetky sily 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 veci v binárnej, 440 00:29:48,000 --> 00:29:55,000 okrem toho, že naša základňa, ako mu hovoríme, je 2 miesto 10. 441 00:29:55,000 --> 00:29:58,000 Tieto 10s, že som napísal tu na dne, 442 00:29:58,000 --> 00:30:02,000 Tento 10 ², 10 ¹, 10 k nulovej, 10 je naša základňa, 443 00:30:02,000 --> 00:30:08,000 a exponent, 0, 1, alebo 2, 444 00:30:08,000 --> 00:30:14,000 je naznačené na pozícii číslice v čísle, ktoré píšeme. 445 00:30:14,000 --> 00:30:21,000 1, ak sa na neho pozrieme, to 1 v 2. pozícii. 446 00:30:21,000 --> 00:30:27,000 3 je v prvej polohe, a 7 je v polohe 0.. 447 00:30:27,000 --> 00:30:35,000 To je, ako sme si rôzne exponentmi nižšie na našich základní. 448 00:30:35,000 --> 00:30:40,000 >> Po všetko Dáme-vlastne, vieš čo? 449 00:30:40,000 --> 00:30:43,000 Urobíme Ak sa môj tlačidlo Späť ísť? 450 00:30:43,000 --> 00:30:45,000 Tam to ide. 451 00:30:45,000 --> 00:30:47,000 I love this vrátiť vec. 452 00:30:47,000 --> 00:30:51,000 Po tomto Myslím, že aspoň pre mňa 453 00:30:51,000 --> 00:30:54,000 Najjednoduchší spôsob, ako začať konverziu binárne číslo 454 00:30:54,000 --> 00:30:57,000 alebo šestnástkovej číslo, kde základ je 16 455 00:30:57,000 --> 00:31:02,000 a nie 10 alebo 2, je ísť dopredu a zapísať 456 00:31:02,000 --> 00:31:09,000 podklady a exponentmi pre všetky čísla v mojej binárne číslo na vrchole. 457 00:31:09,000 --> 00:31:14,000 Ak začneme zľava doprava znova, 458 00:31:14,000 --> 00:31:17,000 ktorý je tak trochu neintuitívne, 459 00:31:17,000 --> 00:31:23,000 Budem zmeniť späť na čiernu tu, máme 2 do 0. polohy, 460 00:31:23,000 --> 00:31:27,000 a potom máme 2 ¹, ² 2, 461 00:31:27,000 --> 00:31:33,000 a potom 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 Tieto čísla som napísal von, sú všetky exponenty. 464 00:31:41,000 --> 00:31:48,000 Len som napísal základy tu v prvej 3 len pre priestor. 465 00:31:48,000 --> 00:31:50,000 >> Na tomto mieste budem pokračovať, a ja som vlastne ísť zmazať 466 00:31:50,000 --> 00:31:53,000 veci, ktoré sme urobili v desiatkovej sústave, ak je to v poriadku. 467 00:31:53,000 --> 00:31:57,000 Vy ste všetci dostali to. 468 00:31:57,000 --> 00:32:05,000 Tí z vás, sledovanie on-line Som si istý, že bude môcť pretočiť ma, či by ste chceli. 469 00:32:05,000 --> 00:32:07,000 Prepnutie späť na pero. 470 00:32:07,000 --> 00:32:12,000 Teraz, čo sa dá robiť ak vy nie ste úplne až na rýchlosť na vašich právomocí 2, 471 00:32:12,000 --> 00:32:15,000 to je úplne v pohode. 472 00:32:15,000 --> 00:32:18,000 To sa stáva. Chápem. 473 00:32:18,000 --> 00:32:23,000 Raz som mal pohovor, kde mi bolo povedané, čo by som mal vedieť všetky sily 2 474 00:32:23,000 --> 00:32:26,000 až cez 2 do 30.. 475 00:32:26,000 --> 00:32:29,000 Nebolo to práca, ktorú som dostal. 476 00:32:29,000 --> 00:32:32,000 Mimochodom, môžete vy choďte do toho a to spočítajte tu, 477 00:32:32,000 --> 00:32:35,000 ale s binárne nemá moc zmysel, 478 00:32:35,000 --> 00:32:38,000 a ani to zmysel s desiatkovej, alebo šestnástkovej buď, 479 00:32:38,000 --> 00:32:43,000 si to spočítajte, kde budete mať nuly. 480 00:32:43,000 --> 00:32:49,000 Môžete vidieť mám 0 tu, je tu 0, 0 tu, 0 tu, 0 tu, 0 tu. 481 00:32:49,000 --> 00:32:52,000 Prečo by to nemalo zmysel robiť skutočné matematiky 482 00:32:52,000 --> 00:32:56,000 pre výpočet zodpovedajúcej silu 2 pre túto pozíciu? 483 00:32:56,000 --> 00:32:59,000 Presne, ako povedala Charlotte, bude to 0. 484 00:32:59,000 --> 00:33:05,000 Pokojne ušetriť čas, ak výpočtu sily 2 nie je vaša silná stránka. 485 00:33:05,000 --> 00:33:10,000 V tomto prípade sa stačí spočítať pre 2 na 0, ktorý je-? 486 00:33:10,000 --> 00:33:12,000 [Študent] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 na 3, ktorá je-? 488 00:33:14,000 --> 00:33:16,000 [Študent] 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 [Študent] 2. Je mi ľúto, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 do 4 je 16, presne. 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 [Študent] 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 [Študent] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Jo, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Akonáhle sme dostali tieto čísla môžeme zhŕňajú ich všetky. 500 00:33:57,000 --> 00:34:01,000 A to je miesto, kde je to naozaj dôležité, aby to pár vecí. 501 00:34:01,000 --> 00:34:07,000 Jedným z nich je ísť pomaly a skontrolovať svoju prácu. 502 00:34:07,000 --> 00:34:10,000 Môžete povedať, že je tu 1 na konci tohto čísla, 503 00:34:10,000 --> 00:34:15,000 tak som určite dostať nepárne číslo ako môj výsledok, 504 00:34:15,000 --> 00:34:18,000 pretože všetky tie ostatné sa bude aj čísla 505 00:34:18,000 --> 00:34:21,000 vzhľadom k tomu, že je to binárne číslo. 506 00:34:21,000 --> 00:34:24,000 Druhá vec, ktorú musíte urobiť, je, ak sa dostanete do tohto bodu na skúšky 507 00:34:24,000 --> 00:34:27,000 a vy ste to napísal tak ďaleko 508 00:34:27,000 --> 00:34:30,000 a máte málo času 509 00:34:30,000 --> 00:34:33,000 pozrieť sa na počet bodov, ktoré tento problém stojí. 510 00:34:33,000 --> 00:34:40,000 Tento problém, ako môžete vidieť, keď som otočiť späť do svojho notebooku naozaj rýchlo- 511 00:34:40,000 --> 00:34:44,000 tento problém je za 2 body, takže to nie je ten druh Okrem 512 00:34:44,000 --> 00:34:47,000 mali by ste ísť cez ak ste naozaj v časovej tiesni. 513 00:34:47,000 --> 00:34:52,000 Ale budeme prepnúť späť na iPad, a pôjdeme cez to naozaj rýchlo. 514 00:34:52,000 --> 00:34:54,000 >> Páči sa mi robiť malé množstvo prvého 515 00:34:54,000 --> 00:34:56,000 pretože som zistil, že jednoduchšie. 516 00:34:56,000 --> 00:35:00,000 Páči sa mi 32 a 8, pretože oni idú spolu celkom ľahko, 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 sme sa 57, 519 00:35:05,000 --> 00:35:14,000 a potom môžeme urobiť zvyšok tohto, tak môžeme urobiť 57, 156. 520 00:35:14,000 --> 00:35:16,000 Poď. 521 00:35:16,000 --> 00:35:19,000 Man, dobre, uvidíme. 522 00:35:19,000 --> 00:35:27,000 Mali sme 57, 256, a 1024. 523 00:35:27,000 --> 00:35:31,000 V tomto bode, by som radšej prejsť. 524 00:35:31,000 --> 00:35:35,000 Nemám tušenie. Jasne som potrebné, aby si prečítali na túto tému. 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 Potom dostaneme 3, a potom sme si 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Veľkonočné vajíčko, niekto? 530 00:35:55,000 --> 00:35:59,000 Niekto spoznať toto číslo? 531 00:35:59,000 --> 00:36:02,000 Chris rozpozná číslo. Čo 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 keď sa pozriete na to, vyzerá to, že Leet. 534 00:36:11,000 --> 00:36:15,000 Hacker veci. Dajte si pozor na takéto veci na strednodobé alebo kvíz, skôr. 535 00:36:15,000 --> 00:36:19,000 Ak vidíte, že takéto veci a ste premýšľal "Hm," 536 00:36:19,000 --> 00:36:22,000 , Ktorý by mohol niečo znamenať. 537 00:36:22,000 --> 00:36:24,000 Neviem. David rád uvedenie dovnútra 538 00:36:24,000 --> 00:36:26,000 Je to dobrý spôsob, ako zdravý rozum skontrolovať. 539 00:36:26,000 --> 00:36:30,000 Rovnako ako v poriadku, môžem vidieť, čo sa deje. 540 00:36:30,000 --> 00:36:34,000 >> To je týždeň 0/Week 1 veci. 541 00:36:34,000 --> 00:36:39,000 Ak by sme prepnete späť do nášho notebooku teraz, 542 00:36:39,000 --> 00:36:46,000 oddialiť, a pár ďalších vecí. 543 00:36:46,000 --> 00:36:50,000 Tam je ASCII, ktoré sme robili veľa s problémovými sad. 544 00:36:50,000 --> 00:36:55,000 Tento pojem kapitálu A. Čo je to vlastne? 545 00:36:55,000 --> 00:36:57,000 Vedieť, že je to desatinné číslo. 546 00:36:57,000 --> 00:37:00,000 65 je to, čo je mapovaná v ASCII tabuľke, 547 00:37:00,000 --> 00:37:03,000 a to preto, ako počítač píše to, 548 00:37:03,000 --> 00:37:06,000 a to je, ako sme sa dostať preč sa písaním 549 00:37:06,000 --> 00:37:09,000 charakter kapitálu a charakter malé písmená 550 00:37:09,000 --> 00:37:14,000 v niektorých z týchto riešení a problémov sád, ktoré ste robili. 551 00:37:14,000 --> 00:37:16,000 Pár ďalších vecí. 552 00:37:16,000 --> 00:37:25,000 Máme vyhlásenie, logické výrazy, podmienky, cykly, premenné a vlákien. 553 00:37:25,000 --> 00:37:29,000 >> Tí všetci Zdá sa, že zmysel pre najviac sa rozdeliť? 554 00:37:29,000 --> 00:37:35,000 Niektoré z tejto terminológie je trochu funky občas. 555 00:37:35,000 --> 00:37:46,000 Rád si o vyhlásenie ako najviac časť niečoho, čo končí bodkočiarkou. 556 00:37:46,000 --> 00:37:51,000 Vyhlásenie ako x = 7, ktorý stanovuje premenné, 557 00:37:51,000 --> 00:37:54,000 pravdepodobne len x = 7. 558 00:37:54,000 --> 00:38:01,000 Pravdepodobne x je tiež typ, ktorý je možné uložiť číslo 7, 559 00:38:01,000 --> 00:38:05,000 takže je to int prípadne float alebo krátky alebo char, 560 00:38:05,000 --> 00:38:07,000 niečo také. 561 00:38:07,000 --> 00:38:12,000 Boolean výraz je použitie týchto dvojníka sa rovná 562 00:38:12,000 --> 00:38:17,000 a prásk rovná alebo nie je rovná, menej než, väčšie ako, 563 00:38:17,000 --> 00:38:22,000 menšie alebo rovné, všetky takéto veci. 564 00:38:22,000 --> 00:38:28,000 Podmienky sú teda v prípade else. 565 00:38:28,000 --> 00:38:32,000 Ja by som si, že nemôžete mať else bez zodpovedajúcej, ak. 566 00:38:32,000 --> 00:38:37,000 Rovnako tak, nemôžete mať else ak je to bez zodpovedajúcej, ak. 567 00:38:37,000 --> 00:38:40,000 Slučky, pripomínajú 3 druhov slučiek sme boli kladivami do teba 568 00:38:40,000 --> 00:38:43,000 za posledných pár oddielov a problémových súborov. 569 00:38:43,000 --> 00:38:46,000 Použitie so zatiaľ čo keď ste sa dostal vstup od užívateľa, 570 00:38:46,000 --> 00:38:51,000 pomocou while kým určité podmienky, je pravda, 571 00:38:51,000 --> 00:38:56,000 a potom pomocou tým, pre slučky, ak potrebujete 572 00:38:56,000 --> 00:39:01,000 vedieť, ktorý iterácia slučky sa práve on je, ako som o tom premýšľať. 573 00:39:01,000 --> 00:39:07,000 Alebo ak robíte pre každý znak v reťazci by som chcel niečo urobiť, 574 00:39:07,000 --> 00:39:15,000 pre každý prvok poľa chcem urobiť niečo k tomuto prvku. 575 00:39:15,000 --> 00:39:18,000 >> Vlákna a udalosti. 576 00:39:18,000 --> 00:39:21,000 Tie sme nevzťahuje tak explicitne v C, 577 00:39:21,000 --> 00:39:23,000 pamätajte však že týmto od nuly. 578 00:39:23,000 --> 00:39:26,000 To je predstava mať rôzne skripty. 579 00:39:26,000 --> 00:39:32,000 To je tiež tento pojem vysielanie udalosť. 580 00:39:32,000 --> 00:39:37,000 Niektorí ľudia nemali používať vysielania vo svojich projektoch spočiatku, 581 00:39:37,000 --> 00:39:40,000 ktorá je úplne chladný, 582 00:39:40,000 --> 00:39:46,000 ale to sú 2 rôzne spôsoby zaobchádzania s týmto väčší problém tzv súbežnosti, 583 00:39:46,000 --> 00:39:49,000 ktoré je, ako sa vám programy spustiť 584 00:39:49,000 --> 00:39:54,000 alebo zdanlivo vykonať súčasne? 585 00:39:54,000 --> 00:39:59,000 Rôzne úlohy beží, zatiaľ čo ostatné úlohy sú tiež beží. 586 00:39:59,000 --> 00:40:01,000 To je, ako operačný systém vyzerá, že pracuje. 587 00:40:01,000 --> 00:40:04,000 To je preto, aj keď, napríklad, 588 00:40:04,000 --> 00:40:10,000 Ja som dostal môj prehliadač beží, môžem tiež obrátiť na Spotify a hrať pieseň. 589 00:40:10,000 --> 00:40:14,000 To je viac koncepčné veci pochopiť. 590 00:40:14,000 --> 00:40:17,000 Ja by som sa pozrieť na závity krátkych 591 00:40:17,000 --> 00:40:21,000 Ak sa chcete dozvedieť viac o tom. 592 00:40:21,000 --> 00:40:26,000 >> Poďme sa pozrieť, som presvedčený, že by mohol byť 593 00:40:26,000 --> 00:40:31,000 problém na to v jednej z nich. 594 00:40:31,000 --> 00:40:35,000 Opäť si myslím, že nite a akcie nie sú niečo, čo sa bude týkať v C 595 00:40:35,000 --> 00:40:41,000 len preto, že je to podstatne ťažšie ako v Scratch. 596 00:40:41,000 --> 00:40:44,000 Mali by ste si s tým starosti tam, ale rozhodne pochopiť pojmy, 597 00:40:44,000 --> 00:40:47,000 pochopiť, čo sa deje. 598 00:40:47,000 --> 00:40:52,000 Ešte než sa vrhneme na akékoľvek otázky týkajúce sa týždni 0 materiálu? 599 00:40:52,000 --> 00:40:55,000 Všetci cítia celkom dobre? 600 00:40:55,000 --> 00:41:03,000 Pochopenie premenné a čo je premenná? 601 00:41:03,000 --> 00:41:08,000 >> Ďalej. Týždeň 1. 602 00:41:08,000 --> 00:41:12,000 Pár vecí tu, že sa nijako zvlášť pokryté 603 00:41:12,000 --> 00:41:21,000 v kvíze preskúmania nutne a tiež sú viac koncepčné veci myslieť. 604 00:41:21,000 --> 00:41:30,000 Prvá z nich je táto predstava o tom, čo zdrojového kódu, prekladača a objektových kódov sú. 605 00:41:30,000 --> 00:41:32,000 Niekto? Basil. 606 00:41:32,000 --> 00:41:37,000 Je objektový kód, myslím zdrojový kód je to, čo ste vložili do Clang, 607 00:41:37,000 --> 00:41:42,000 a objektový kód je to, čo rinčať vyhlási tak, že váš počítač môže čítať program. 608 00:41:42,000 --> 00:41:44,000 Presne tak. 609 00:41:44,000 --> 00:41:47,000 Zdrojový kód je kód C, že ste vlastne písať hore. 610 00:41:47,000 --> 00:41:50,000 Objektový kód je to, čo dostanete z kovový zvuk. 611 00:41:50,000 --> 00:41:54,000 Je to 0s a 1s v tomto binárnom formáte. 612 00:41:54,000 --> 00:41:59,000 Tak čo sa stane, je, keď máte veľa objektových súborov, 613 00:41:59,000 --> 00:42:04,000 povedať, že ste zostavovaní projektu alebo programu, ktorý používa viac súborov zdrojového kódu, 614 00:42:04,000 --> 00:42:09,000 ktoré podľa konvencie sú uvedené na. C príponu. 615 00:42:09,000 --> 00:42:13,000 To je dôvod, prečo máme caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Ak píšete Java programy, ktoré im rozšírenie. Java. 617 00:42:18,000 --> 00:42:24,000 Python programy majú príponu. Py často. 618 00:42:24,000 --> 00:42:26,000 >> Akonáhle budete mať viac. C súborov, môžete skompilovať. 619 00:42:26,000 --> 00:42:29,000 Rinčanie vypľuje všetko binárne haraburdie. 620 00:42:29,000 --> 00:42:33,000 Potom, pretože si chcete iba 1 programu 621 00:42:33,000 --> 00:42:37,000 máte linker odkaz všetkých týchto objektových súborov spoločne 622 00:42:37,000 --> 00:42:40,000 do 1 spustiteľného súboru. 623 00:42:40,000 --> 00:42:45,000 To je tiež to, čo sa stane, keď použijete CS50 knižnicu, napríklad. 624 00:42:45,000 --> 00:42:50,000 Knižnica CS50 je tak, že. H hlavičkový súbor 625 00:42:50,000 --> 00:42:53,000 že budete čítať, že # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 A potom je to aj špeciálne binárny súbor knižnice 627 00:42:58,000 --> 00:43:02,000 , Ktorá bola zostavená, aby ich 0s a 1s, 628 00:43:02,000 --> 00:43:08,000 a že-l, takže ak sa vrátime k našim priestory a my sa naozaj rýchlo, 629 00:43:08,000 --> 00:43:11,000 na to, čo sa tu deje, keď sa pozrieme na našu rinčať príkaz, 630 00:43:11,000 --> 00:43:15,000 to, čo máme, je to náš zdrojový kód súboru tu. 631 00:43:15,000 --> 00:43:18,000 Jedná sa banda kompilátor. 632 00:43:18,000 --> 00:43:22,000 A potom sa na samom konci, to-l vlajky odkaz v 633 00:43:22,000 --> 00:43:30,000 skutočné binárne súbory pre tieto 2 knižnice, CS50 knižnica a potom matematická knižnica. 634 00:43:30,000 --> 00:43:35,000 >> Pochopenie každý typ účelu súborov ' 635 00:43:35,000 --> 00:43:38,000 v procese kompilácie je niečo, čo budete chcieť, aby sa mohli 636 00:43:38,000 --> 00:43:43,000 obsahovať aspoň na vysokej úrovni prehľad. 637 00:43:43,000 --> 00:43:46,000 Zdrojový kód vypovedaciu Object code vyjde. 638 00:43:46,000 --> 00:43:53,000 Objektové súbory kód prepojiť, a dostanete krásnu, spustiteľný súbor. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 To je tiež, kde môžete získať chyby na viacerých miestach 641 00:43:58,000 --> 00:44:00,000 v procese kompilácie. 642 00:44:00,000 --> 00:44:04,000 To je miesto, kde, napríklad, ak budete mať túto prepojenie vlajkou, 643 00:44:04,000 --> 00:44:10,000 CS50 vlajka, a ho vynecháte v priestoroch alebo keď vediete svoj kód, 644 00:44:10,000 --> 00:44:13,000 to je miesto, kde budete mať chybu v prepojení fáze, 645 00:44:13,000 --> 00:44:18,000 a linker bude hovoriť, "Hele, si volal funkcie GetString 646 00:44:18,000 --> 00:44:20,000 že je v CS50 knižnici. " 647 00:44:20,000 --> 00:44:25,000 "Povedal si mi, že je v CS50 knižnici, a nemôžem nájsť kód pre neho." 648 00:44:25,000 --> 00:44:28,000 To je miesto, kde budete musieť pripojiť do, a to zvlášť 649 00:44:28,000 --> 00:44:33,000 od kompilátora chyby, pretože kompilátor hľadá syntaxe a také veci. 650 00:44:33,000 --> 00:44:38,000 Je dobré vedieť, čo sa deje, keď. 651 00:44:38,000 --> 00:44:42,000 >> Ostatné veci vedieť. 652 00:44:42,000 --> 00:44:49,000 Povedal by som, že budete určite chcieť, aby sa pozrieť na krátky na obsadiť vykonáva Jordan 653 00:44:49,000 --> 00:44:55,000 rozumieť tomu, čo ints sú pod kapotou, 654 00:44:55,000 --> 00:44:58,000 what znaky sú pod kapotou. 655 00:44:58,000 --> 00:45:02,000 Keď hovoríme o ASCII a my skutočne pozrieť na ASCII tabuľky, 656 00:45:02,000 --> 00:45:07,000 čo to robí je, že nám pod kapotou vzhľad 657 00:45:07,000 --> 00:45:13,000 na to, ako počítač v skutočnosti predstavuje kapitál a číslice 7 658 00:45:13,000 --> 00:45:17,000 a čiarka a otáznik. 659 00:45:17,000 --> 00:45:20,000 Počítač má tiež zvláštne spôsoby, ktoré reprezentujú 660 00:45:20,000 --> 00:45:23,000 číslo 7 ako celé číslo. 661 00:45:23,000 --> 00:45:27,000 To má zvláštny spôsob, ako reprezentovať číslo 7 ako číslo s plávajúcou čiarkou, 662 00:45:27,000 --> 00:45:29,000 a tie sú veľmi odlišné. 663 00:45:29,000 --> 00:45:32,000 Obsadiť je, ako povedať, že počítač "Hej, chcem previesť 664 00:45:32,000 --> 00:45:37,000 z jednej reprezentácie do inej reprezentácie. " 665 00:45:37,000 --> 00:45:40,000 Prečo by sme sa na to pozrieť. 666 00:45:40,000 --> 00:45:44,000 >> Tiež by som sa pozrieť na krátky, o knižniciach a krátke na prekladača. 667 00:45:44,000 --> 00:45:47,000 Tí hovoria o procese kompilácie, 668 00:45:47,000 --> 00:45:53,000 Čo je knižnica, a ísť cez niektoré z týchto otázok, ktoré by vás mohli pýtajú. 669 00:45:53,000 --> 00:45:55,000 Otázky týkajúce sa týždeň 1 materiálu? 670 00:45:55,000 --> 00:46:03,000 Existujú témy Tu, ktoré sa zdajú skľučujúca by ste chceli pokryť? 671 00:46:03,000 --> 00:46:07,000 Snažím sa vyhodiť väčšinu týchto predchádzajúcich tém tak, že sa môžeme dostať do 672 00:46:07,000 --> 00:46:13,000 ukazovatele a urobiť trochu rekurzie. 673 00:46:13,000 --> 00:46:15,000 Myšlienky? 674 00:46:15,000 --> 00:46:19,000 Niečo na pokrytie? 675 00:46:19,000 --> 00:46:21,000 Čas na nejaké čokolády možná? 676 00:46:21,000 --> 00:46:23,000 Vy pracujete cez to. 677 00:46:23,000 --> 00:46:26,000 Budem držať popíjanie kafe. 678 00:46:26,000 --> 00:46:31,000 2. týždeň. 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ýždni 2 sme si rozprávali trochu viac o funkciách. 681 00:46:38,000 --> 00:46:43,000 >> V prvých niekoľkých problémových setoch som naozaj písať žiadne funkcie vôbec 682 00:46:43,000 --> 00:46:45,000 iné než ktoré funkcie? 683 00:46:45,000 --> 00:46:47,000 [Študent] Hlavné. >> Hlavné, presne. 684 00:46:47,000 --> 00:46:51,000 A tak sme videli rôzne kostýmy, ktoré nosia hlavné. 685 00:46:51,000 --> 00:46:54,000 Tam je ten, v ktorom je neakceptuje žiadne argumenty, 686 00:46:54,000 --> 00:46:58,000 a povieme prázdnotu medzi zátvorky, 687 00:46:58,000 --> 00:47:01,000 a potom je tu druhý, kde sme si chcete vziať argumenty príkazového riadku, 688 00:47:01,000 --> 00:47:08,000 a ako sme videli, že je miesto, kde budete mať int argc a ArGV string array 689 00:47:08,000 --> 00:47:13,000 alebo teraz, keď sme skutočne vystavení reťazec byť char *, že je 690 00:47:13,000 --> 00:47:20,000 budeme začať písať ako char * ArGV a potom držiakov. 691 00:47:20,000 --> 00:47:22,000 V problému Set 3, vy videl veľa funkcií, 692 00:47:22,000 --> 00:47:27,000 a ste zaviedli veľa funkcií, kresliť, pozrite sa, ťahanice. 693 00:47:27,000 --> 00:47:31,000 Prototypy boli všetky napísané tu pre vás. 694 00:47:31,000 --> 00:47:33,000 >> Čo som chcel hovoriť o tom tu s funkciami naozaj rýchlo 695 00:47:33,000 --> 00:47:38,000 je to, že tam sú 3 diely, kedykoľvek sa budete napísať funkciu. 696 00:47:38,000 --> 00:47:43,000 Musíte zadať návratový typ funkcie. 697 00:47:43,000 --> 00:47:46,000 Musíte zadať názov funkcie, a potom sa budete musieť zadať 698 00:47:46,000 --> 00:47:51,000 zoznam argumentov alebo zoznam parametrov. 699 00:47:51,000 --> 00:47:57,000 Napríklad, keď som mal napísať funkciu zhrnul veľa celých čísel 700 00:47:57,000 --> 00:48:03,000 a potom sa vrátiť ku mne súčet toho, čo by môj návrat typ 701 00:48:03,000 --> 00:48:06,000 keby som chcel zhrnúť celé čísla a potom sa vrátiť čiastku? 702 00:48:06,000 --> 00:48:12,000 Potom názov funkcie. 703 00:48:12,000 --> 00:48:27,000 Ak by som do toho pustite a napíšte zelene, táto časť je návratový typ. 704 00:48:27,000 --> 00:48:34,000 Táto časť je názov. 705 00:48:34,000 --> 00:48:40,000 A potom v zátvorkách 706 00:48:40,000 --> 00:48:46,000 je miesto, kde som sa dať argumenty, 707 00:48:46,000 --> 00:48:56,000 často skrátil ako args, niekedy volal params pre parametre. 708 00:48:56,000 --> 00:49:00,000 A ak máte jeden, stačí zadať jeden. 709 00:49:00,000 --> 00:49:06,000 Ak máte viac oddeľte každý z nich s čiarkou. 710 00:49:06,000 --> 00:49:13,000 A pre každý argument si dať 2 veci, ktoré sú, Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Musíte dať typ a potom meno. 712 00:49:18,000 --> 00:49:21,000 A potom meno, a meno je meno, ktoré budete používať 713 00:49:21,000 --> 00:49:25,000 odkazovať na tento argument v rámci súčtu funkcií, 714 00:49:25,000 --> 00:49:27,000 vo funkcii, že ste v súčasnej dobe písania. 715 00:49:27,000 --> 00:49:32,000 >> Nemusíte sa-napríklad, keď idem zhrnúť, 716 00:49:32,000 --> 00:49:41,000 hovoria, pole celých čísel-Dáme to int pole, 717 00:49:41,000 --> 00:49:46,000 a ja dávam nejaké zložené zátvorky tam- 718 00:49:46,000 --> 00:49:51,000 potom, keď som sa odovzdať pole na funkciu SUM 719 00:49:51,000 --> 00:49:55,000 Minul som ju na prvej pozícii v zozname argumentov. 720 00:49:55,000 --> 00:49:59,000 Ale pole, ktoré som odovzdať nemusí mať názov ARR. 721 00:49:59,000 --> 00:50:07,000 Arr bude, ako som odkazovať na tento argument v tele funkcie. 722 00:50:07,000 --> 00:50:10,000 Ďalšia vec, ktorá je potrebné vziať do úvahy, 723 00:50:10,000 --> 00:50:14,000 a to je mierne odlišné od funkcií, ale myslím, že je to dôležitý bod, 724 00:50:14,000 --> 00:50:20,000 je, že v C, keď píšem funkciu, ako je tento 725 00:50:20,000 --> 00:50:29,000 Ako mám vedieť, koľko prvkov je v tomto poli? 726 00:50:29,000 --> 00:50:31,000 To je trochu chyták. 727 00:50:31,000 --> 00:50:35,000 Hovorili sme o tom trochu minulý týždeň v oddiele. 728 00:50:35,000 --> 00:50:40,000 Ako mám vedieť, počet prvkov vo vnútri poľa v C? 729 00:50:40,000 --> 00:50:44,000 Je tam spôsob, ako? 730 00:50:44,000 --> 00:50:49,000 >> Ukazuje sa, že neexistuje žiadny spôsob, ako vedieť. 731 00:50:49,000 --> 00:50:52,000 Musíte prejsť do samostatne. 732 00:50:52,000 --> 00:50:55,000 Tam je trik, ktorý môžete robiť 733 00:50:55,000 --> 00:51:00,000 ak ste v rovnakej funkcii v ktorom pole bolo vyhlásené, 734 00:51:00,000 --> 00:51:04,000 a pracujete s zásobníka poľa. 735 00:51:04,000 --> 00:51:06,000 Ale to funguje len ak ste v rovnakej funkcii. 736 00:51:06,000 --> 00:51:09,000 Akonáhle odovzdať pole na inú funkciu, alebo ak ste vyhlásil poľa 737 00:51:09,000 --> 00:51:12,000 a dáte, že pole na halde, ktoré ste použili malloc 738 00:51:12,000 --> 00:51:15,000  a tento druh vecí, potom sú všetky stávky sú preč. 739 00:51:15,000 --> 00:51:18,000 Potom ste skutočne prejsť okolo 740 00:51:18,000 --> 00:51:21,000 zvláštne tvrdenie alebo iný parameter, ktorý 741 00:51:21,000 --> 00:51:23,000 ti, aká veľká pole je. 742 00:51:23,000 --> 00:51:28,000 V tomto prípade, chcel by som použiť čiarky to ľúto, že to bude mimo obrazovku tu- 743 00:51:28,000 --> 00:51:32,000 a ja by som odovzdať v inom argumente 744 00:51:32,000 --> 00:51:40,000  a nazývať to int ľan na dĺžku. 745 00:51:40,000 --> 00:51:44,000 >> Jedna vec, ktorá by mohla prísť na kvíz 746 00:51:44,000 --> 00:51:49,000 je výzvou na písanie alebo zaviesť určitú funkciu s názvom niečo. 747 00:51:49,000 --> 00:51:54,000 Ak sa vám nedávajú prototyp, tak celá táto vec tu, 748 00:51:54,000 --> 00:51:58,000 celý tento neporiadok je nazývaný deklarácie funkcie alebo funkčný prototyp, 749 00:51:58,000 --> 00:52:01,000 To je jedna z prvých vecí, ktoré budete chcieť donútiť, ak to nie je uvedený 750 00:52:01,000 --> 00:52:03,000 na vás hneď na kvíz. 751 00:52:03,000 --> 00:52:06,000 Ďalšie trik som sa naučil, je, že 752 00:52:06,000 --> 00:52:11,000 povedať, že sme to vám prototyp pre funkciu, a my hovoríme, "Hele, musíš napísať." 753 00:52:11,000 --> 00:52:16,000 Vnútri zložených zátvoriek, ktoré máte v kvíze 754 00:52:16,000 --> 00:52:20,000 ak si všimnete, že je návratový typ a zistíte, že návratový typ 755 00:52:20,000 --> 00:52:25,000 je niečo iné, než prázdna, čo znamená, že funkcia nevracia nič, 756 00:52:25,000 --> 00:52:28,000 potom jedna vec, budete určite chcieť urobiť, je napísať 757 00:52:28,000 --> 00:52:33,000 nejaký return na samom konci funkcie. 758 00:52:33,000 --> 00:52:40,000 Návrat, a v tomto prípade, dáme prázdne, pretože chceme, aby vyplniť prázdne. 759 00:52:40,000 --> 00:52:44,000 Ale to vás dostane myslenie správnym spôsobom o tom, ako budem pristupovať k tomuto problému? 760 00:52:44,000 --> 00:52:49,000 A to pripomína budete musieť vrátiť hodnotu 761 00:52:49,000 --> 00:52:51,000 k volajúcemu funkcie. 762 00:52:51,000 --> 00:52:54,000 >> Jo. >> [Študent] Má štýl použije, keď sme písať kód na kvíz? 763 00:52:54,000 --> 00:52:58,000 Ako je odsadenie a také veci? >> [Študent] Jo. 764 00:52:58,000 --> 00:53:00,000 Nie, nie toľko. 765 00:53:00,000 --> 00:53:09,000 Myslím, že veľa-to je niečo, čo budeme objasniť na kvíz v deň, 766 00:53:09,000 --> 00:53:15,000 ale zvyčajne starosti # obsahuje a tento druh vecí, je to trochu mimo. 767 00:53:15,000 --> 00:53:17,000 [Študent] Potrebujete, aby sa vyjadril svoje vlastnoručné kód? 768 00:53:17,000 --> 00:53:19,000 Potrebujete, aby sa vyjadril svoje vlastnoručné kód? 769 00:53:19,000 --> 00:53:24,000 V poznámkach je vždy dobré, ak máte obavy o čiastočné úveru 770 00:53:24,000 --> 00:53:29,000 alebo ak chcete oznámiť svoj zámer na porovnávač. 771 00:53:29,000 --> 00:53:33,000 Ale ja, zase, bude objasniť na teste sám a na deň kvízu, 772 00:53:33,000 --> 00:53:39,000 ale ja neverím, že budete musieť písať komentáre, no. 773 00:53:39,000 --> 00:53:42,000 Zvyčajne nie je, ale je to určite jedna z tých vecí, kde 774 00:53:42,000 --> 00:53:45,000 môžete komunikovať svoj zámer, ako "Hej, to je miesto, kde budem s ním." 775 00:53:45,000 --> 00:53:49,000 A niekedy, že vám môžu pomôcť s čiastočným úveru. 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] Aký je rozdiel medzi prehlasuje, povedzme, int LANG 779 00:53:56,000 --> 00:54:03,000 v argumentoch alebo parametre oproti deklarovaní premennej vo funkcii? 780 00:54:03,000 --> 00:54:05,000 Wow, káva išiel priedušnici. 781 00:54:05,000 --> 00:54:07,000 [Basil] Ako, ktoré veci chceme dať v argumentoch. 782 00:54:07,000 --> 00:54:09,000 Jo, to je veľká otázka. 783 00:54:09,000 --> 00:54:11,000 Ako si vybrať to, čo veci, ktoré chcete dať do argumentov 784 00:54:11,000 --> 00:54:17,000 proti aké veci by ste mali urobiť, vnútri funkcie? 785 00:54:17,000 --> 00:54:24,000 V tomto prípade sme zaradili obe tieto ako argumenty 786 00:54:24,000 --> 00:54:29,000 preto, že sú niečo, čo každý, kto sa bude používať funkciu SUM 787 00:54:29,000 --> 00:54:32,000 musí špecifikovať tie veci. 788 00:54:32,000 --> 00:54:35,000 >> Súčet funkcie, ako sme hovorili o tom, nemá žiadny spôsob, ako zistiť, 789 00:54:35,000 --> 00:54:40,000 aký veľký je pole sa dostane z jeho volajúceho alebo ten, kto je pomocou funkcie SUM. 790 00:54:40,000 --> 00:54:44,000 To má žiadny spôsob, ako zistiť, aké veľké toto pole je. 791 00:54:44,000 --> 00:54:48,000 Dôvod, prečo sme prejsť v tejto dĺžke tu ako argument 792 00:54:48,000 --> 00:54:51,000 Je tomu tak preto, že je to niečo, čo sme v podstate rozprávanie volajúci funkcie, 793 00:54:51,000 --> 00:54:55,000 kto ich bude používať funkciu SUM, "Hej, nielen že budete musieť dať nám poľa 794 00:54:55,000 --> 00:54:59,000 z ints, budete tiež musieť povedať nám, aký veľký je pole, ktoré ste nám je. " 795 00:54:59,000 --> 00:55:03,000 [Basil] Tí budú obe argumenty z príkazového riadku? 796 00:55:03,000 --> 00:55:06,000 Nie, to sú skutočné argumenty, ktoré by ste odovzdať funkciu. 797 00:55:06,000 --> 00:55:10,000 >> Dovoľte mi, aby som to novú stránku tu. 798 00:55:10,000 --> 00:55:13,000 [Basil] Ako meno by pass- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Ak mám int main (void), 800 00:55:24,000 --> 00:55:27,000 a ja dám v mojom návrate 0 sem v dolnej časti, 801 00:55:27,000 --> 00:55:31,000 a že chcem volať funkciu SUM. 802 00:55:31,000 --> 00:55:42,000 Chcem povedať, int x = sum (); 803 00:55:42,000 --> 00:55:46,000 Ak chcete použiť funkciu SUM musím prejsť v oboch pole, ktoré chcem zhrnúť 804 00:55:46,000 --> 00:55:51,000 a dĺžka poľa, takže ak je 805 00:55:51,000 --> 00:55:54,000 za predpokladu, že som mal celý rad ints, 806 00:55:54,000 --> 00:56:12,000 že som mal int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 druh použitia, ktoré nabúral do syntaxe tu, 808 00:56:16,000 --> 00:56:21,000 potom to, čo budem robiť, je v súčte by som chcel odovzdať 809 00:56:21,000 --> 00:56:27,000 ako numbaz a číslo 3 810 00:56:27,000 --> 00:56:30,000 povedať sumu funkciu "Dobre, tu je pole chcem, aby ste spočítať." 811 00:56:30,000 --> 00:56:34,000 "Tu je jeho veľkosť." 812 00:56:34,000 --> 00:56:39,000 Dáva to zmysel? Znamená to, že odpoveď na vašu otázku? 813 00:56:39,000 --> 00:56:42,000 >> V mnohých ohľadoch to robí paralelne, čo robíme s hlavnou 814 00:56:42,000 --> 00:56:44,000 keď máme argumenty príkazového riadku. 815 00:56:44,000 --> 00:56:47,000 Program, ako Caesara, napríklad, že potreba 816 00:56:47,000 --> 00:56:53,000 Argumenty príkazového riadku nebudú môcť nič robiť. 817 00:56:53,000 --> 00:56:57,000 Nebolo by vedieť, ako šifrovať, ak ste si povedať, že to, čo kľúč na použitie 818 00:56:57,000 --> 00:57:03,000 alebo ak ste nepovedal to, čo ste chceli reťazec na zašifrovanie. 819 00:57:03,000 --> 00:57:08,000 Dopytovanie pre vstup, to je miesto, kde máme 2 rôzne mechanizmy 820 00:57:08,000 --> 00:57:14,000 pre prijatie vstup od užívateľa, pričom pre informácie od užívateľa. 821 00:57:14,000 --> 00:57:19,000 Pre Problém Set 1 sme videli tento GetInt, GetString, GetFloat cestu 822 00:57:19,000 --> 00:57:26,000 z výzvy pre vstup, a to je volaný pomocou štandardného vstupného prúdu. 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 niečo, čo môžete urobiť, zrazu na rozdiel od 825 00:57:31,000 --> 00:57:35,000 pri vyvolaní programu, pri spustení program beží. 826 00:57:35,000 --> 00:57:41,000 Argumenty príkazového riadku všetci sú špecifikované pri spustení programu beh. 827 00:57:41,000 --> 00:57:47,000 Boli sme miešanie dva z nich. 828 00:57:47,000 --> 00:57:52,000 Keď používame argumenty funkcie, je to podobne ako argumenty príkazového riadku na hlavnej. 829 00:57:52,000 --> 00:57:56,000 Je to, keď vyvoláte funkciu, ktorú potrebujete oznámiť, 830 00:57:56,000 --> 00:58:05,000 čo presne potrebuje na plnenie svojich úloh. 831 00:58:05,000 --> 00:58:08,000 Ďalšia dobrá vec pozerať sa na a ja ťa nechám na to pozrieť vo svojom voľnom čase, 832 00:58:08,000 --> 00:58:11,000 a to bola pokrytá v kvíze, bol tento pojem pôsobnosti 833 00:58:11,000 --> 00:58:15,000 a lokálne premenné oproti globálnych premenných. 834 00:58:15,000 --> 00:58:18,000 Do venovať pozornosť. 835 00:58:18,000 --> 00:58:23,000 >> Teraz, keď sme stále na tejto inej veci, 836 00:58:23,000 --> 00:58:27,000 v týždni 3 sme začali hovoriť o vyhľadávanie a radenie. 837 00:58:27,000 --> 00:58:32,000 Vyhľadávanie a triedenie, aspoň v CS50, 838 00:58:32,000 --> 00:58:39,000 je veľmi úvod do niektorej z teoretickej časti výpočtovej techniky. 839 00:58:39,000 --> 00:58:42,000 Problém hľadanie, problém triedenie 840 00:58:42,000 --> 00:58:46,000 sú veľké, kanonické problémy. 841 00:58:46,000 --> 00:58:52,000 Ako si nájsť konkrétne číslo v poli miliárd celých čísel? 842 00:58:52,000 --> 00:58:55,000 Ako si nájsť konkrétne meno v telefónnom zozname 843 00:58:55,000 --> 00:58:59,000 , Ktorý je uložený na vašom notebooku? 844 00:58:59,000 --> 00:59:04,000 A tak sme zaviesť tento pojem asymptotickej doby behu 845 00:59:04,000 --> 00:59:11,000 naozaj kvantifikovať, ako dlho, ako ťažké to problém je, 846 00:59:11,000 --> 00:59:14,000 ako dlho berú riešiť. 847 00:59:14,000 --> 00:59:20,000 V, verím, 2011 v kvíze je tu problém, že som si zasluhuje 848 00:59:20,000 --> 00:59:27,000 pokrývajúci veľmi rýchlo, čo je tento, problém 12. 849 00:59:27,000 --> 00:59:32,000 O nie, je to Omega. 850 00:59:32,000 --> 00:59:41,000 >> Tu hovoríme o najrýchlejšom možnom behu 851 00:59:41,000 --> 00:59:46,000 k určitému algoritmu a potom najpomalší možné behu. 852 00:59:46,000 --> 00:59:52,000 Tento Omega a O sú naozaj len skratky. 853 00:59:52,000 --> 00:59:55,000 Sú notační skratky pre ostatné 854 00:59:55,000 --> 00:59:59,000 ako rýchlo v najlepší možný prípad bude náš algoritmus run, 855 00:59:59,000 --> 01:00:06,000 a ako pomaly v najhoršom možnom prípade bude náš algoritmus beží? 856 01:00:06,000 --> 01:00:10,000 Poďme urobiť pár z nich, a tie boli tiež zahrnuté 857 01:00:10,000 --> 01:00:13,000 v krátkej na asymptotickej notáciu, ktorá vrelo odporúčam. 858 01:00:13,000 --> 01:00:17,000 Jackson odviedol naozaj dobrú prácu. 859 01:00:17,000 --> 01:00:23,000 S binárne vyhľadávanie, hovoríme o binárne vyhľadávanie ako je algoritmus, 860 01:00:23,000 --> 01:00:28,000 a väčšinou si rozprávame o tom, pokiaľ ide o jeho veľké O. 861 01:00:28,000 --> 01:00:30,000 Čo je to veľký O? 862 01:00:30,000 --> 01:00:34,000 Čo je najpomalší možná doba chodu binárneho vyhľadávania? 863 01:00:34,000 --> 01:00:36,000 [Študent] N ²? 864 01:00:36,000 --> 01:00:41,000 Zavrieť, myslím, že podobne ako. 865 01:00:41,000 --> 01:00:43,000 Je to oveľa rýchlejšie, než to. 866 01:00:43,000 --> 01:00:45,000 [Študent] Binary? >> Jo, binárne vyhľadávanie. 867 01:00:45,000 --> 01:00:47,000 [Študent] Je to log n 868 01:00:47,000 --> 01:00:49,000 Prihlásiť n, takže to, čo robí prihlásiť n znamená? 869 01:00:49,000 --> 01:00:51,000 To polovičky pri každom opakovaní. 870 01:00:51,000 --> 01:00:56,000 Presne tak, v najpomalší možný prípad, 871 01:00:56,000 --> 01:01:00,000 povedať, či máte zoradené poľa 872 01:01:00,000 --> 01:01:08,000 milióna celých čísel a počet hľadáte 873 01:01:08,000 --> 01:01:14,000 je buď prvý prvok v poli, alebo posledný prvok v poli. 874 01:01:14,000 --> 01:01:18,000 Nezabudnite, binárne vyhľadávacie algoritmus pracuje tak, že pri pohľade na prostredný prvok, 875 01:01:18,000 --> 01:01:21,000 zistiť, či je to zápas, ktorý hľadáte. 876 01:01:21,000 --> 01:01:23,000 Ak je, potom skvelé, ste ju našli. 877 01:01:23,000 --> 01:01:27,000 >> V najlepšom možnom prípade, ako rýchlo sa binárny vyhľadávací beh? 878 01:01:27,000 --> 01:01:29,000 [Študenti] 1. 879 01:01:29,000 --> 01:01:32,000 1, je konštantný čas, veľký O z 1.. Jo. 880 01:01:32,000 --> 01:01:36,000 [Študent] Mám dotaz. Keď sa povie log n, myslíš vzhľadom na základni 2, nie? 881 01:01:36,000 --> 01:01:40,000 Áno, tak to je iná vec. 882 01:01:40,000 --> 01:01:44,000 Hovoríme protokolu n, a myslím, že keď som bol na strednej škole 883 01:01:44,000 --> 01:01:48,000 Vždy som predpokladal, že log je základ 10. 884 01:01:48,000 --> 01:01:57,000 Jo, takže áno, prihláste základňa 2 je zvyčajne to, čo používame. 885 01:01:57,000 --> 01:02:02,000 Opäť platí, že návrat do binárneho vyhľadávania, ak hľadáte pre jeden 886 01:02:02,000 --> 01:02:05,000 prvok na samom konci, alebo prvok na samom začiatku, 887 01:02:05,000 --> 01:02:08,000 pretože začnete v stredu, a potom je vyhodíte 888 01:02:08,000 --> 01:02:13,000 podľa toho, čo polovica nespĺňa kritériá, ktoré hľadáte, 889 01:02:13,000 --> 01:02:15,000 a idete na ďalšiu polovicu a ďalšia polovica a ďalšia polovica. 890 01:02:15,000 --> 01:02:19,000 Ak som hľadal najväčší prvok v miliónoch integer poľa 891 01:02:19,000 --> 01:02:25,000 Idem na polovicu je nanajvýš protokolu 1000000 krát 892 01:02:25,000 --> 01:02:28,000 ako som sa konečne vyskúšať a uvidíte, že element Hľadám 893 01:02:28,000 --> 01:02:33,000 je v najväčšej alebo v najvyššej index poľa, 894 01:02:33,000 --> 01:02:38,000 a že bude trvať log n, prihláste 1 milión 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, chlapci si na bubliny radenie algoritmus? 897 01:02:43,000 --> 01:02:47,000 Kevin, môžete mi dať rýchly rekapituláciu toho, čo sa stalo v algoritme bubble sort? 898 01:02:47,000 --> 01:02:50,000 [Kevin] V podstate to ide cez všetko v zozname. 899 01:02:50,000 --> 01:02:52,000 Vyzerá to na prvé dva. 900 01:02:52,000 --> 01:02:55,000 Ak je prvý z nich je väčší ako druhý to swap nich. 901 01:02:55,000 --> 01:02:58,000 Potom sa porovnáva druhý a tretí, to isté, swapy, 902 01:02:58,000 --> 01:03:00,000 tretej a štvrtej, celú cestu dole. 903 01:03:00,000 --> 01:03:03,000 Väčšie čísla budú nasledovať až do konca. 904 01:03:03,000 --> 01:03:07,000 A po mnohých cykloch však máte hotovo. 905 01:03:07,000 --> 01:03:11,000 Presne tak, to, čo Kevin povedal, je, že budeme sledovať väčšie počty 906 01:03:11,000 --> 01:03:15,000 bublina až do konca poľa. 907 01:03:15,000 --> 01:03:19,000 Napríklad, nebude vám vadiť, pešia nám prostredníctvom tohto príkladu, ak je to naše pole? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Budete mať 2 a 3. 909 01:03:21,000 --> 01:03:23,000 3 je väčší ako 2, takže je swap. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Dobre, tak vymeníme tieto, a tak sme si 2, 3, 6, 4, a 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Potom budete porovnávať 3 a 6. 912 01:03:31,000 --> 01:03:33,000 3 je menší ako 6, tak ich necháte, 913 01:03:33,000 --> 01:03:37,000 a 6 a 4, mali by ste vymeniť, pretože 4 je menší ako 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Dobre, tak som si 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] A 9 je väčší ako 6, takže si nechajte ho. 916 01:03:46,000 --> 01:03:48,000 A vy by ste sa vrátiť cez to znova. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Mám urobiť na tomto mieste? >> [Kevin] č 918 01:03:50,000 --> 01:03:52,000 A prečo som nespravil v tejto chvíli? 919 01:03:52,000 --> 01:03:54,000 Vzhľadom k tomu, to vyzerá, že moja pole je radený. Pozerám sa na neho. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Prejdite si to znova a uistite sa, že nie sú žiadne ďalšie swapy 921 01:03:57,000 --> 01:04:00,000 než budete môcť plne zastaviť. 922 01:04:00,000 --> 01:04:04,000 Presne, takže treba ísť ďalej až do konca a uistite sa, že nie sú žiadne swapy 923 01:04:04,000 --> 01:04:06,000 že je možné vykonať v tomto bode. 924 01:04:06,000 --> 01:04:08,000 Bolo to naozaj len šťastie, ako si hovoril, že sme skončili 925 01:04:08,000 --> 01:04:12,000 iba musel platiť 1 priechod a my zoradené. 926 01:04:12,000 --> 01:04:16,000 Ale urobiť to vo všeobecnom prípade budeme skutočne musieť urobiť to znova a znova. 927 01:04:16,000 --> 01:04:20,000 A v skutočnosti, to bolo príkladom najlepší možný prípad, 928 01:04:20,000 --> 01:04:24,000 ako sme videli v problému. 929 01:04:24,000 --> 01:04:28,000 Videli sme, že najlepší možný prípad bol n 930 01:04:28,000 --> 01:04:32,000 Išli sme cez pole 1 krát. 931 01:04:32,000 --> 01:04:35,000 Čo je najhorší možný prípad tohto algoritmu? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 A čo to vyzerá? Čo by pole vyzerať, že by sa n? Čas? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [nepočuteľné] zoradené. 935 01:04:43,000 --> 01:04:51,000 Presne, takže keď som mal pole 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 Najprv 9 by bublina celú cestu hore. 937 01:04:54,000 --> 01:04:59,000 Po 1 iterácii budeme mať 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Potom 7 by bublina hore, 6, 5, 2, 7, 9, a tak ďalej, a tak ďalej. 939 01:05:07,000 --> 01:05:13,000 >> Museli by sme ísť cez celé pole n časy, 940 01:05:13,000 --> 01:05:16,000 a môžete skutočne dostať o niečo presnejšie ako toto 941 01:05:16,000 --> 01:05:23,000 pretože akonáhle sme presunuli 9 po celú cestu až do svojho posledného možného postavenie 942 01:05:23,000 --> 01:05:26,000 vieme, že nikdy nebudete musieť porovnať proti tomuto prvku znova. 943 01:05:26,000 --> 01:05:29,000 Akonáhle začneme buble na 7 až 944 01:05:29,000 --> 01:05:35,000 vieme, že sa môžeme zastaviť, akonáhle 7 je priamo pred 9 945 01:05:35,000 --> 01:05:37,000 lebo sme už porovnali 9 k nemu. 946 01:05:37,000 --> 01:05:46,000 Ak to urobíte v inteligentným spôsobom, že to nie je naozaj, myslím, že veľa času. 947 01:05:46,000 --> 01:05:49,000 Nebudete porovnať všetky možné [nepočuteľné] kombinácie 948 01:05:49,000 --> 01:05:55,000 zakaždým prejsť každej iterácii. 949 01:05:55,000 --> 01:05:59,000 Ale napriek tomu, keď hovoríme o tom hornú hranicu môžeme povedať, že 950 01:05:59,000 --> 01:06:04,000 sa pozeráte na n ² porovnaní celú cestu cez. 951 01:06:04,000 --> 01:06:12,000 >> Vráťme sa späť, a od tej doby sme začínam trochu málo času 952 01:06:12,000 --> 01:06:15,000 Povedal by som, že by ste sa mali rozhodne ísť cez zvyšok tejto tabuľky, 953 01:06:15,000 --> 01:06:17,000 vyplniť to všetko von. 954 01:06:17,000 --> 01:06:20,000 Myslite na príkladoch. Myslite na konkrétnych príkladoch. 955 01:06:20,000 --> 01:06:22,000 To je naozaj šikovný a užitočné urobiť. 956 01:06:22,000 --> 01:06:25,000 Nakreslite to. 957 01:06:25,000 --> 01:06:28,000 Toto je druh tabuľky, ktoré, ako si prejsť v informatike 958 01:06:28,000 --> 01:06:32,000 mali by ste naozaj začať poznať tieto strany srdca. 959 01:06:32,000 --> 01:06:34,000 Jedná sa o druhy otázok dostanete v rozhovoroch. 960 01:06:34,000 --> 01:06:36,000 Ide o druhy vecí, ktoré sú dobré vedieť, 961 01:06:36,000 --> 01:06:41,000 a myslím, že na tie hrany prípadoch, naozaj prísť na to, ako premýšľať o 962 01:06:41,000 --> 01:06:45,000 s vedomím, že pre bubliny triediť najhoršie možnú poľa 963 01:06:45,000 --> 01:06:52,000 triediť s tým je ten, ktorý je v opačnom poradí. 964 01:06:52,000 --> 01:06:58,000 >> Ukazovatele. Poďme trochu pohovoriť o ukazovatele. 965 01:06:58,000 --> 01:07:03,000 V posledných niekoľkých minútach sme sa tu 966 01:07:03,000 --> 01:07:11,000 Ja viem, že to je niečo, čo spolu so súborom I / O, ktorá je pomerne nový. 967 01:07:11,000 --> 01:07:19,000 Keď hovoríme o ukazovateľoch dôvod chceme hovoriť o ukazovatele 968 01:07:19,000 --> 01:07:24,000 Je tomu tak preto, jeden, keď pracujeme v C 969 01:07:24,000 --> 01:07:33,000 sme naozaj na pomerne nízkej úrovni v porovnaní s väčšinou moderných programovacích jazykov. 970 01:07:33,000 --> 01:07:38,000 Sme skutočne schopní manipulovať premenné v pamäti, 971 01:07:38,000 --> 01:07:43,000 zistiť, kde oni sú v skutočnosti nachádza v našej pamäti RAM. 972 01:07:43,000 --> 01:07:46,000 Akonáhle ste sa rozhodli, aby prijal tried operačný systém, ktorý uvidíte 973 01:07:46,000 --> 01:07:48,000 že je opäť akýmsi abstrakcie. 974 01:07:48,000 --> 01:07:50,000 To nie je v skutočnosti pravda. 975 01:07:50,000 --> 01:07:52,000 Máme virtuálna pamäť, ktorá sa skrýva tieto údaje od nás. 976 01:07:52,000 --> 01:07:58,000 >> Ale teraz môžete predpokladať, že keď máte program, 977 01:07:58,000 --> 01:08:02,000 Napríklad, keď začnú svoj Caesara programu- 978 01:08:02,000 --> 01:08:06,000 Budem prepnúť späť do môjho iPad naozaj rýchlo- 979 01:08:06,000 --> 01:08:12,000 že na samom začiatku programu, ak máte, povedzme, 980 01:08:12,000 --> 01:08:15,000 4 GB RAM na vašom notebooku, 981 01:08:15,000 --> 01:08:21,000 vám zrušil tento kus, a my Vám zavoláme túto RAM. 982 01:08:21,000 --> 01:08:25,000 A začína v mieste, budeme volať 0, 983 01:08:25,000 --> 01:08:30,000 a končí na mieste, ktoré budeme nazývať 4 GB. 984 01:08:30,000 --> 01:08:37,000 Ja naozaj nemôžem písať. Človek, sa hacknut, že. 985 01:08:37,000 --> 01:08:40,000 Keď váš program vykoná 986 01:08:40,000 --> 01:08:44,000 operačný systém vyrezáva pamäť RAM, 987 01:08:44,000 --> 01:08:51,000 a špecifikuje rôzne segmenty pre rôzne časti vášho programu žijete 988 01:08:51,000 --> 01:08:58,000 Tu dole táto oblasť je tak trochu zeme nikoho. 989 01:08:58,000 --> 01:09:02,000 Keď idete hore kúsok ďalej tu 990 01:09:02,000 --> 01:09:05,000 máte skutočne na miesto, kde 991 01:09:05,000 --> 01:09:09,000 kód pre umiestnenie programových život. 992 01:09:09,000 --> 01:09:13,000 Že skutočné binárny kód, v skutočnosti, že spustiteľný súbor sa nahrá do pamäte 993 01:09:13,000 --> 01:09:17,000 pri spustení programu, a to žije v kóde segmente. 994 01:09:17,000 --> 01:09:22,000 A ako váš program spustí procesor sa pozerá na tomto kóde segmente 995 01:09:22,000 --> 01:09:24,000 prísť na to, aký je ďalšie inštrukcie? 996 01:09:24,000 --> 01:09:27,000 Aký je ďalší riadok kódu musím spustiť? 997 01:09:27,000 --> 01:09:31,000 >> K dispozícii je tiež dátový segment, a to je tam, kde sa tieto reťazce konštanty 998 01:09:31,000 --> 01:09:34,000 sa uloží, ktoré ste doteraz používali. 999 01:09:34,000 --> 01:09:42,000 A potom ďalej tam je to miesto zvané haldy. 1000 01:09:42,000 --> 01:09:46,000 Máme prístup k pamäti tam pomocou malloc, 1001 01:09:46,000 --> 01:09:49,000 a potom smerom k vrcholu svojho 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 sme hrali po väčšinu začiatku. 1004 01:09:57,000 --> 01:09:59,000 To nie je v mierke alebo tak niečo. 1005 01:09:59,000 --> 01:10:03,000 Mnoho z toho je veľmi závislá na systéme, 1006 01:10:03,000 --> 01:10:10,000 operačný systém závislý, ale to je pomerne, ako sa veci blokového up. 1007 01:10:10,000 --> 01:10:17,000 Pri spustení programu a deklarovať premennú s názvom x- 1008 01:10:17,000 --> 01:10:27,000 Budem čerpať ďalšie krabicu dole, a to sa bude RAM rovnako. 1009 01:10:27,000 --> 01:10:29,000 A budem vyzerať. 1010 01:10:29,000 --> 01:10:34,000 Budeme kresliť zubaté čiary uviesť toto je len malá časť pamäte RAM 1011 01:10:34,000 --> 01:10:38,000 a nie všetci to, ako sme tomu v hornej časti. 1012 01:10:38,000 --> 01:10:43,000 >> Ak Prehlasujem celočíselnú premennú nazvanú x, 1013 01:10:43,000 --> 01:10:49,000 potom to, čo som vlastne si ich mapovanie 1014 01:10:49,000 --> 01:10:54,000 , Ktorý je uložený v tabuľke symbolov svojho programu 1015 01:10:54,000 --> 01:11:00,000 ktoré spája meno x do tejto oblasti pamäte, ktoré som vypracované 1016 01:11:00,000 --> 01:11:03,000 tu medzi zvislými pruhmi. 1017 01:11:03,000 --> 01:11:08,000 Keď budem mať riadok kódu v mojom programe, ktorý hovorí, že x = 7 1018 01:11:08,000 --> 01:11:15,000 procesor vie "Ach, áno, ja viem, že x žije v tejto lokalite v pamäti." 1019 01:11:15,000 --> 01:11:25,000 "Chystám sa ísť dopredu a napísať 7 tam." 1020 01:11:25,000 --> 01:11:28,000 Ako to vedieť, čo to je miesto v pamäti? 1021 01:11:28,000 --> 01:11:30,000 No, to, že všetko je hotové v čase kompilácie. 1022 01:11:30,000 --> 01:11:34,000 Kompilátor sa stará o prideľovaní, kde každé premenné sa chystáte ísť 1023 01:11:34,000 --> 01:11:40,000 a vytvoriť špeciálne mapovanie či skôr pripojenie bodky 1024 01:11:40,000 --> 01:11:43,000 medzi symbolom a, kde to bude, premenná je meno 1025 01:11:43,000 --> 01:11:46,000 a, kde to bude žiť v pamäti. 1026 01:11:46,000 --> 01:11:50,000 Ale ukázalo sa, že skutočne môžeme k nim pristupovať v našich programoch rovnako. 1027 01:11:50,000 --> 01:11:55,000 To dostane dôležité, keď začneme hovoriť o niektorých dátových štruktúr, 1028 01:11:55,000 --> 01:11:58,000 čo je pojem, ktorý budeme zavádzať neskôr. 1029 01:11:58,000 --> 01:12:09,000 >> Ale teraz, čo môžete vedieť, je to, že môžem vytvoriť ukazovateľ na toto miesto, x. 1030 01:12:09,000 --> 01:12:12,000 Napríklad, môžem vytvoriť premennú ukazovatele. 1031 01:12:12,000 --> 01:12:16,000 Keď sme sa vytvoriť premennú ukazovatele používame hviezdy notáciu. 1032 01:12:16,000 --> 01:12:21,000 V tomto prípade, to hovorí budem vytvoriť ukazovateľ na int. 1033 01:12:21,000 --> 01:12:24,000 Je to typ, rovnako ako každý iný. 1034 01:12:24,000 --> 01:12:27,000 Dávame mu premennú ako y, 1035 01:12:27,000 --> 01:12:32,000 a potom nastaviť tak, rovná adresu, na adrese. 1036 01:12:32,000 --> 01:12:38,000 V tomto prípade, môžeme nastaviť y poukázať na x 1037 01:12:38,000 --> 01:12:43,000 tým, že adresu x, ktoré nesúvisia s týmto ampersand, 1038 01:12:43,000 --> 01:12:55,000 a potom sme sa vydali y, aby ukazoval na neho. 1039 01:12:55,000 --> 01:12:59,000 Čo to v podstate robí, je, keď sa pozrieme na našu RAM 1040 01:12:59,000 --> 01:13:02,000 vytvára samostatnú premennú. 1041 01:13:02,000 --> 01:13:04,000 Bude to hovoriť y, 1042 01:13:04,000 --> 01:13:06,000 a keď tento riadok kódu vykoná 1043 01:13:06,000 --> 01:13:13,000 to je vlastne chystáte vytvoriť malý ukazovateľ, ktorý sme zvyčajne čerpať ako šíp, 1044 01:13:13,000 --> 01:13:15,000 a nastaví y poukázať na x. 1045 01:13:15,000 --> 01:13:17,000 Áno. 1046 01:13:17,000 --> 01:13:19,000 [Študent] Ak x je už ukazovateľ, by ste jednoducho 1047 01:13:19,000 --> 01:13:22,000 int * y = x namiesto ampersand? 1048 01:13:22,000 --> 01:13:24,000 Áno. 1049 01:13:24,000 --> 01:13:27,000 Ak x je už ukazovateľ, potom si môžete nastaviť 2 ukazovatele vo výške rovnajúcej sa navzájom, 1050 01:13:27,000 --> 01:13:30,000 v takom prípade by sa y poukázať na x, 1051 01:13:30,000 --> 01:13:34,000 ale to by chcel poukázať na čokoľvek x ukazuje. 1052 01:13:34,000 --> 01:13:37,000 Bohužiaľ, sme mimo čas. 1053 01:13:37,000 --> 01:13:44,000 >> Čo by som povedal v tomto bode, môžeme sa o tom porozprávať režime offline, 1054 01:13:44,000 --> 01:13:49,000 ale ja by som začať pracovať prostredníctvom tohto problému, # 14. 1055 01:13:49,000 --> 01:13:53,000 Môžete vidieť, že je to už trochu vyplnený tu pre Vás. 1056 01:13:53,000 --> 01:13:57,000 Môžete vidieť, že keď my deklarujeme 2 ukazovatele, int * x a y *, 1057 01:13:57,000 --> 01:14:01,000 a všimnite si, že ukázal na * vedľa premenné bolo niečo, čo bolo vykonané v minulom roku. 1058 01:14:01,000 --> 01:14:05,000 Ukazuje sa, že je to podobné tomu, čo robíme v tomto roku. 1059 01:14:05,000 --> 01:14:11,000 Nezáleží na tom, kde ste napísať *, keď ste vyhlásil ukazovateľ. 1060 01:14:11,000 --> 01:14:17,000 Ale my sme písali * vedľa typu 1061 01:14:17,000 --> 01:14:24,000 preto, že je veľmi jasné, že ste deklarovať premennú ukazovatele. 1062 01:14:24,000 --> 01:14:27,000 Môžete vidieť, že vyhlási 2 ukazovatele nám 2 krabičky. 1063 01:14:27,000 --> 01:14:31,000 Tu, keď sme x sa rovná malloc 1064 01:14:31,000 --> 01:14:34,000 čo to hovorí je zrušenie pamäte v halde. 1065 01:14:34,000 --> 01:14:41,000 Tento malý box tu, to kruh, sa nachádza na halde. 1066 01:14:41,000 --> 01:14:43,000 X ukazuje na neho. 1067 01:14:43,000 --> 01:14:46,000 Všimnite si, že y je stále neukazuje na nič. 1068 01:14:46,000 --> 01:14:50,000 Ak chcete získať pamäť na uloženie čísla 42 do x 1069 01:14:50,000 --> 01:14:55,000 by sme použili čo notáciu? 1070 01:14:55,000 --> 01:14:59,000 [Študent] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Presne, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 To znamená, že za šípkou a hodiť 42 tam. 1073 01:15:06,000 --> 01:15:09,000 Tu, kde sme sa vydali y a x sme y ukazuje na x. 1074 01:15:09,000 --> 01:15:13,000 Opäť platí, že je to presne to, čo Kevin povedal, kde sme sa vydali y rovné x. 1075 01:15:13,000 --> 01:15:15,000 Y neukazuje na x. 1076 01:15:15,000 --> 01:15:19,000 Skôr, je to ukázal na to, čo x ukazuje na rovnako. 1077 01:15:19,000 --> 01:15:24,000 >> A potom sa konečne v tomto poslednom okne sú 2 možné veci, ktoré by sme mohli robiť. 1078 01:15:24,000 --> 01:15:28,000 Jedným z nich je dalo by sa povedať * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Druhá vec je, že sme mohli povedať: Alex, vieš, čo by sme mohli robiť? 1080 01:15:33,000 --> 01:15:37,000 Dalo by sa povedať, * x = 13 alebo- 1081 01:15:37,000 --> 01:15:41,000 [Študent] Dalo by sa povedať, int čokoľvek. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Ak bol odvolával sa na ako int premenné sme mohli urobiť. 1083 01:15:45,000 --> 01:15:49,000 Mohli by sme tiež povedať, * y = 13, pretože sú obaja ukázal na rovnakom mieste, 1084 01:15:49,000 --> 01:15:51,000 tak by sme mohli použiť buď premenná sa tam dostať. 1085 01:15:51,000 --> 01:15:56,000 Jo. >> [Študent] Čo by to vyzeralo, keby sme len povedať, int x je 13? 1086 01:15:56,000 --> 01:16:00,000 To by bolo deklarovať novú premennú s názvom x, ktorý by nefungoval. 1087 01:16:00,000 --> 01:16:04,000 Mali by sme mať kolízii, pretože je deklarovaná x za ukazovateľ tu. 1088 01:16:04,000 --> 01:16:10,000 [Študent] Keby sme mali toto vyhlásenie samo o sebe, čo by to vyzerať, pokiaľ ide o kruhu? 1089 01:16:10,000 --> 01:16:14,000 Ak by sme mali x = 13 a potom budeme mať pole, a skôr než na šípku 1090 01:16:14,000 --> 01:16:16,000 prichádza po vybalení z krabice by sme nakresliť ako len 13. 1091 01:16:16,000 --> 01:16:19,000 [Študent] V poli. Dobre. 1092 01:16:19,000 --> 01:16:24,000 >> Ďakujeme vám za sledovanie, a veľa šťastia na Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]