1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [4. §] [Kevesebb Comfortable] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Harvard Egyetem] 3 00:00:04,000 --> 00:00:07,000 [Ez a CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Rendben, szívesen vissza szakasz. 5 00:00:10,000 --> 00:00:13,000 Az e heti részben fogunk csinálni egy pár dolgot. 6 00:00:13,000 --> 00:00:17,000 Megyünk az első bedugni Problem Set 2, 7 00:00:17,000 --> 00:00:20,000 amely a Caesar és Vigenère probléma set. 8 00:00:20,000 --> 00:00:23,000 És akkor fogunk belevetik magukat Quiz 0 vélemények 9 00:00:23,000 --> 00:00:26,000 , és eltölteni egy kis időt kanülök újbóli amit beszéltünk 10 00:00:26,000 --> 00:00:30,000 az egyes előadások eddig, és mi is ezt a néhány probléma 11 00:00:30,000 --> 00:00:32,000 az előző évi vetélkedők. 12 00:00:32,000 --> 00:00:36,000 Így nektek van egy jó módja annak, hogy felkészüljenek ezt. 13 00:00:36,000 --> 00:00:40,000 >> Elindításához, már elindult egy pár jó megoldás 14 00:00:40,000 --> 00:00:45,000 Az előző probléma beállított, Problem Set 2, ebbe a térbe. 15 00:00:45,000 --> 00:00:48,000 Ha a srácok az összes találatot meg ezt a linket, 16 00:00:48,000 --> 00:00:53,000 , és ha rákattint a nevem, és kattintson az én első felülvizsgálata 17 00:00:53,000 --> 00:00:56,000 meglátja caesar.c, ami pontosan az, amit én néztem. 18 00:00:56,000 --> 00:01:00,000 Beszéljük ezt nagyon gyorsan. 19 00:01:00,000 --> 00:01:02,000 Ez csak egy mintaoldatot. 20 00:01:02,000 --> 00:01:05,000 Ez nem feltétlenül a tökéletes megoldás. 21 00:01:05,000 --> 00:01:08,000 Sok különböző módon lehet írni ezt, 22 00:01:08,000 --> 00:01:10,000 de van néhány dolog, hogy én akartam, hogy kiemelje 23 00:01:10,000 --> 00:01:13,000 hogy láttam, ahogy én osztályozás, a gyakori hibákat, hogy azt hiszem, 24 00:01:13,000 --> 00:01:18,000 Ez a megoldás nem nagyon jó munkát a kezelés. 25 00:01:18,000 --> 00:01:22,000 >> Az első, amelynek valamilyen fejléc megjegyzés a tetején. 26 00:01:22,000 --> 00:01:25,000 A vonalak 1-től 7 látja a részleteket, 27 00:01:25,000 --> 00:01:28,000 pontosan mi ez a program csinál. 28 00:01:28,000 --> 00:01:32,000 Egy jó bevett gyakorlat, amikor írsz C kód 29 00:01:32,000 --> 00:01:35,000 függetlenül attól, hogy a program nem tartalmaz egyetlen fájlt, vagy 30 00:01:35,000 --> 00:01:38,000 függetlenül attól, hogy van osztva több fájl az, hogy valamilyen 31 00:01:38,000 --> 00:01:40,000 orientáló comment a tetején. 32 00:01:40,000 --> 00:01:43,000 Ez is az emberek, akik mennek, és írja a kódot a valós világban. 33 00:01:43,000 --> 00:01:47,000 Ez az, ahol azt fogják tenni szerzői jogi információkat. 34 00:01:47,000 --> 00:01:50,000 Az alábbiakban a # magában. 35 00:01:50,000 --> 00:01:55,000 On line 16 van ez a # define, amit akkor jön vissza, mindössze egy kicsit. 36 00:01:55,000 --> 00:01:59,000 És akkor, ha a funkció indul, ha fő indul, 37 00:01:59,000 --> 00:02:03,000 mert ez a program már minden szereplő egy funkció 38 00:02:03,000 --> 00:02:09,000 Az első dolog, ami történik, és ez nagyon köznyelvi, és jellemző a C program 39 00:02:09,000 --> 00:02:14,000 vevő a parancssori argumentumok, hogy azonnal ellenőrzi 40 00:02:14,000 --> 00:02:18,000 >> Az érvelés gróf argc. 41 00:02:18,000 --> 00:02:24,000 Itt azt látjuk, hogy ez a program vár 2 érveket pontosan. 42 00:02:24,000 --> 00:02:27,000 Emlékezz van, hogy az első érv, hogy ez a különleges 1 43 00:02:27,000 --> 00:02:29,000 ez mindig a program neve, ami alatt fut, 44 00:02:29,000 --> 00:02:31,000 a neve a futtatható fájlt. 45 00:02:31,000 --> 00:02:36,000 És hogy ez mire jó ez megakadályozza, hogy a felhasználó a program futtatása 46 00:02:36,000 --> 00:02:42,000 több vagy kevesebb érveket. 47 00:02:42,000 --> 00:02:44,000 Az ok, azt akarjuk, hogy ellenőrizze ezt rögtön, mert 48 00:02:44,000 --> 00:02:52,000 nem tudjuk valójában elérni ezt argv tömb itt megbízhatóan 49 00:02:52,000 --> 00:02:55,000 amíg mi már ellenőrizhető, hogy milyen nagy. 50 00:02:55,000 --> 00:02:58,000 >> Az egyik gyakori hibák láttam az emberek azonnal menjen 51 00:02:58,000 --> 00:03:01,000 és megragad argv [1]. 52 00:03:01,000 --> 00:03:06,000 Ők azt megragad a legfontosabb érv az a tömb, és nem az, hogy az én ellenőrizni azt, 53 00:03:06,000 --> 00:03:11,000 és akkor megtenné a teszt argc valamint a következő tesztet, 54 00:03:11,000 --> 00:03:16,000 függetlenül attól, hogy az első paraméterként volt valóban egy egész szám egy időben, 55 00:03:16,000 --> 00:03:20,000 és ez nem működik, mert abban az esetben, hogy nincs argumentumok 56 00:03:20,000 --> 00:03:26,000 akkor lehet lementeni egy érv, hogy nem létezik, vagy próbál megragad az egyik, hogy nincs ott. 57 00:03:26,000 --> 00:03:29,000 >> A másik nagy dolog, amit meg kell észrevenni, hogy a 58 00:03:29,000 --> 00:03:32,000 mindig a kinyomtatni kívánt valamilyen hasznos hibaüzenet 59 00:03:32,000 --> 00:03:34,000 a felhasználó számára, hogy eligazodjanak őket. 60 00:03:34,000 --> 00:03:37,000 Biztos vagyok benne, már minden run programokat, ahol hirtelen lefagy, 61 00:03:37,000 --> 00:03:41,000 és megkapod ezt a nevetséges kis párbeszédablakban előugrik, és azt mondja 62 00:03:41,000 --> 00:03:44,000 Valami rettenetesen rejtélyes és talán ad egy hibakód vagy valami ilyesmi 63 00:03:44,000 --> 00:03:47,000 , hogy nincs értelme. 64 00:03:47,000 --> 00:03:50,000 Ez az, ahol szeretné, hogy valami hasznos 65 00:03:50,000 --> 00:03:54,000 és célzott, hogy a felhasználó, hogy amikor futtatni mennek "Oh," face tenyerét. 66 00:03:54,000 --> 00:03:58,000 "Pontosan tudom, mit tegyek. Tudom, hogy erősít ez." 67 00:03:58,000 --> 00:04:01,000 >> Ha nem nyomtat egy üzenetet, akkor a végén tényleg 68 00:04:01,000 --> 00:04:04,000 így a felhasználó, hogy menjen vizsgálja meg a forráskódot 69 00:04:04,000 --> 00:04:07,000 , hogy kitaláljuk, mit rontottam el. 70 00:04:07,000 --> 00:04:11,000 Van még néhány alkalommal, hogy akkor használni a különböző hibakódok. 71 00:04:11,000 --> 00:04:14,000 Itt csak használt ilyet mondani, volt egy hiba, 72 00:04:14,000 --> 00:04:16,000 volt egy hiba, hiba történt. 73 00:04:16,000 --> 00:04:20,000 Nagyobb programok, sokszor programokat hívják más programok által, 74 00:04:20,000 --> 00:04:25,000 vissza fog térni valamilyen különleges hibakódok különböző forgatókönyvek 75 00:04:25,000 --> 00:04:28,000 programból kommunikálni, amit egyébként 76 00:04:28,000 --> 00:04:32,000 csak használja egy szép magyar üzenet. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Ahogy dolgozunk le, láthatjuk hogy húzza ki a kulcsot. 79 00:04:37,000 --> 00:04:40,000 Teszteljük, hogy ha a kulcs illeszkedik. 80 00:04:40,000 --> 00:04:42,000 Kapunk egy üzenetet a felhasználónak. 81 00:04:42,000 --> 00:04:46,000 Az ok, csináljuk e do while ciklus-, és ez olyan dolog, amit fedezi 82 00:04:46,000 --> 00:04:50,000 egy kicsit, de kiderül, hogy ha a beírt ellenőrző D 83 00:04:50,000 --> 00:04:54,000 ha kap, hogy getString prompt a terminál 84 00:04:54,000 --> 00:04:59,000 hogy mi valójában nem ez küld egy speciális karakter 85 00:04:59,000 --> 00:05:01,000 a programhoz. 86 00:05:01,000 --> 00:05:05,000 Úgy hívják az ELF, vagy a fájl vége karakter. 87 00:05:05,000 --> 00:05:08,000 És ebben az esetben, a mi üzenetünk karakterlánc null lesz, 88 00:05:08,000 --> 00:05:14,000 így ez nem olyasmi, amit ellenőrzik a problémás tűzte ki maga elé. 89 00:05:14,000 --> 00:05:17,000 >> De megyünk tovább, most, hogy már kezdett beszélni mutatók 90 00:05:17,000 --> 00:05:21,000 és dinamikus memória kiosztás a halom, 91 00:05:21,000 --> 00:05:25,000 ellenőrzésekor null, ha van egy funkció, amely esetleg 92 00:05:25,000 --> 00:05:30,000 vissza null értékként van valami, akkor szeretnénk, hogy a szokás csinál. 93 00:05:30,000 --> 00:05:33,000 Ez itt elsősorban illusztráció. 94 00:05:33,000 --> 00:05:36,000 De ha nem lát getString a jövőben, 95 00:05:36,000 --> 00:05:41,000 Tehát a probléma Set 4-es, akkor szeretné, hogy tartsa ezt szem előtt. 96 00:05:41,000 --> 00:05:44,000 Ismét, ez nem probléma a probléma Set 3 vagy hiszen még nem fedezte még. 97 00:05:44,000 --> 00:05:53,000 Végül eljutunk a rész, amikor eljutunk a fő titkosítási hurok, 98 00:05:53,000 --> 00:05:57,000 és van egy pár dolog folyik itt. 99 00:05:57,000 --> 00:06:02,000 Először is navigálhat a teljes üzenet szövegébe is. 100 00:06:02,000 --> 00:06:07,000 Itt már tartotta a strlen hívást a feltétellel, 101 00:06:07,000 --> 00:06:12,000 amely számos már rámutatott, nem egy nagyszerű módja annak, hogy megy. 102 00:06:12,000 --> 00:06:15,000 Kiderült, hogy ebben az esetben ez nem is nagy, 103 00:06:15,000 --> 00:06:20,000 részben azért, mert mi módosítja a tartalmát az üzenet maga 104 00:06:20,000 --> 00:06:27,000 belül a for ciklus, így ha van egy üzenet, hogy ez 10 karakter hosszú, 105 00:06:27,000 --> 00:06:32,000 először kezdjük, hogy a hurok strlen tér vissza mi? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> De ha majd módosítsa az üzenetet, azt mondjuk módosíthatja 5. jellegét, 108 00:06:40,000 --> 00:06:46,000 , és dobjon egy \ 0 karaktert az 5. pozíció, 109 00:06:46,000 --> 00:06:49,000 egy későbbi iterációs strlen (üzenet) nem fog visszatérni, amit meg is tett 110 00:06:49,000 --> 00:06:52,000 az első alkalom, hogy megismételte, 111 00:06:52,000 --> 00:06:56,000 de ez inkább vissza 5 mert dobta, hogy null terminátor, 112 00:06:56,000 --> 00:06:59,000 és a karakterlánc hosszának meghatározása 113 00:06:59,000 --> 00:07:03,000 az álláspontja, hogy a \ 0-ra. 114 00:07:03,000 --> 00:07:09,000 Ebben az esetben ez egy nagyszerű módja annak, hogy megy, mert mi módosítja a helyére. 115 00:07:09,000 --> 00:07:13,000 De te észre, hogy ez valójában meglepően egyszerű titkosításához 116 00:07:13,000 --> 00:07:16,000 ha nem kap a matematika helyes. 117 00:07:16,000 --> 00:07:19,000 Minden, ami szükséges, hogy ellenőrizze-e vagy sem a levelet, hogy nézel 118 00:07:19,000 --> 00:07:21,000 a nagybetűs vagy kisbetűs. 119 00:07:21,000 --> 00:07:24,000 >> Az ok már csak ellenőrizni az adott, és nem kell, hogy ellenőrizze a 120 00:07:24,000 --> 00:07:27,000 Az az alfa eset, mert 121 00:07:27,000 --> 00:07:30,000 ha egy karakter nagybetűs, vagy ha ez kisbetűs 122 00:07:30,000 --> 00:07:33,000 akkor ez biztosan egy betű, 123 00:07:33,000 --> 00:07:38,000 mert nincs nagybetűs és kisbetűs számjegy. 124 00:07:38,000 --> 00:07:41,000 A másik dolog, amit teszünk, és ez egy kicsit trükkös, 125 00:07:41,000 --> 00:07:45,000 A most már módosították a standard Caesar titkosítás formula 126 00:07:45,000 --> 00:07:49,000 hogy mi adta a probléma set specifikáció. 127 00:07:49,000 --> 00:07:52,000 Mi a különbség az, hogy le kell vonni 128 00:07:52,000 --> 00:07:58,000 A nagybetűs ügyben A főváros, és aztán ki A tőke 129 00:07:58,000 --> 00:08:02,000 Vissza a végén. 130 00:08:02,000 --> 00:08:05,000 >> Tudom, hogy néhányan ezt megtette a kódot. 131 00:08:05,000 --> 00:08:09,000 Volt valakinek ezt a beadványt? 132 00:08:09,000 --> 00:08:13,000 Te tetted ezt. Meg tudod magyarázni, hogy ez mit jelent, Sahb? 133 00:08:13,000 --> 00:08:18,000 Kivonásával ki, mert csináltam egy mod jog után, 134 00:08:18,000 --> 00:08:21,000 van, hogy ki, hogy így kap [köhögés] állásba. 135 00:08:21,000 --> 00:08:25,000 És akkor hozzáadásával vissza később tolódott át az egyik, amit akart. 136 00:08:25,000 --> 00:08:27,000 Igen, pontosan. 137 00:08:27,000 --> 00:08:32,000 Mi Sahb azt mondta, hogy amikor a hozzáadni kívánt 138 00:08:32,000 --> 00:08:36,000 mi üzenetet, és a legfontosabb, valamint 139 00:08:36,000 --> 00:08:42,000 majd a mod, hogy a mod, hogy a NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 ha nem átméretezni az üzenetet a megfelelő 0-25 tartomány első, 141 00:08:50,000 --> 00:08:54,000 akkor talán a végén kapok egy nagyon furcsa szám 142 00:08:54,000 --> 00:08:59,000 mivel az értékeket, amelyeket keresünk, amikor nézzük üzenet [i], 143 00:08:59,000 --> 00:09:03,000 ha megnézzük az i-edik karaktere a sima szöveges üzenet, 144 00:09:03,000 --> 00:09:08,000 az érték valahol ebben a tartományban 65-122 145 00:09:08,000 --> 00:09:13,000 alapuló ASCII értékeket nagybetűk A-tól Z-ig kisbetű. 146 00:09:13,000 --> 00:09:18,000 És amikor mod azt 26 vagy NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 mivel ez volt a # define a jobb felső itt, 148 00:09:23,000 --> 00:09:28,000 hogy fog nekünk egy értéket, ami a 0-25 tartományban, 149 00:09:28,000 --> 00:09:30,000 és szükségünk van egy módja annak, hogy majd bővíteni, hogy vissza 150 00:09:30,000 --> 00:09:32,000 és kap ez a megfelelő ASCII tartományban. 151 00:09:32,000 --> 00:09:36,000 A legegyszerűbb módja, hogy az, hogy csak a skála le mindent 152 00:09:36,000 --> 00:09:39,000 -ba a 0-25 tartományban kezdeni, 153 00:09:39,000 --> 00:09:43,000 majd váltani mindent vissza a végén. 154 00:09:43,000 --> 00:09:46,000 >> Egy másik gyakori hiba, hogy láttam az emberek befut, hogy 155 00:09:46,000 --> 00:09:50,000 ha nem ténylegesen ezt méretezés azonnal 156 00:09:50,000 --> 00:09:53,000 és hozzá az üzenetet és a kulcsfontosságú együtt, és felveszi őket, mondjuk, 157 00:09:53,000 --> 00:09:58,000 egy char változó, a probléma az, hogy a 158 00:09:58,000 --> 00:10:01,000 azóta is üzenet [i] egy viszonylag nagy számot kezdődik a- 159 00:10:01,000 --> 00:10:05,000 emlékszem, hogy ez legalább 65 ha ez egy nagybetűs karakter- 160 00:10:05,000 --> 00:10:09,000 ha van egy nagy kulcsot, mondjuk, valami ilyesmit 100, 161 00:10:09,000 --> 00:10:13,000 és adjunk hozzá a 2 együtt egy aláírt char fogsz kapni egy túlfolyó. 162 00:10:13,000 --> 00:10:17,000 Fogsz kapni egy értéket, ami nagyobb, mint 127, 163 00:10:17,000 --> 00:10:22,000 amely a legnagyobb értéke, hogy a char változó képes tárolni. 164 00:10:22,000 --> 00:10:26,000 Ismét, ezért azt akarom, hogy az a fajta dolog, hogy kezdődik. 165 00:10:26,000 --> 00:10:29,000 Néhány ember kapott körül az esetben, ha ezzel egy mást és tesztelése 166 00:10:29,000 --> 00:10:33,000 hogy ha ez lenne túlcsordulás előtt csinálja, 167 00:10:33,000 --> 00:10:36,000 de így kap körül, hogy. 168 00:10:36,000 --> 00:10:40,000 És akkor ez a megoldás is kinyomtatható az egész szöveg a legvégén. 169 00:10:40,000 --> 00:10:45,000 Más emberek kinyomtatható karakter egy időben. Mindkettő félelmetes. 170 00:10:45,000 --> 00:10:51,000 Ezen a ponton, srácok bármilyen kérdése van, észrevételek erről? 171 00:10:51,000 --> 00:10:56,000 Things tetszik, amit nem szeret? 172 00:10:56,000 --> 00:10:58,000 >> Volt egy kérdés. 173 00:10:58,000 --> 00:11:01,000 Talán hiányzott ez alatt a magyarázatot, de hogyan működik ez a program 174 00:11:01,000 --> 00:11:07,000 Átugrani a terek csatlakozó a legfontosabb, hogy a hossza a szöveget? 175 00:11:07,000 --> 00:11:10,000 Ez csak Caesar rejtjel. >> Ó, sajnálom, igen. 176 00:11:10,000 --> 00:11:13,000 Igen, látni fogjuk, hogy. 177 00:11:13,000 --> 00:11:16,000 A Caesar titkosítás kaptunk körül, mert 178 00:11:16,000 --> 00:11:18,000 csak tükrözött karakter. 179 00:11:18,000 --> 00:11:27,000 Mi csak forgatni őket, mintha nagy-vagy kisbetűs. 180 00:11:27,000 --> 00:11:32,000 Ti érzés nagyon jó ebben? 181 00:11:32,000 --> 00:11:34,000 Nyugodtan másolni a haza, vegye be, 182 00:11:34,000 --> 00:11:37,000 hasonlítsa össze, hogy mit írt srácok. 183 00:11:37,000 --> 00:11:42,000 Határozottan, bátran küldje el kapcsolatos kérdésekre is. 184 00:11:42,000 --> 00:11:46,000 És ismét, rájönnek, hogy a cél itt a probléma készletek 185 00:11:46,000 --> 00:11:50,000 nem kap titeket, hogy írjon tökéletes kódot a probléma készletek. 186 00:11:50,000 --> 00:11:57,000 Ez egy tanulási tapasztalat. Igen. 187 00:11:57,000 --> 00:12:01,000 >> Vissza a do while ciklus, ha értéke null, 188 00:12:01,000 --> 00:12:06,000 így null csak semmit nem jelent, csak nyomd meg az Entert? 189 00:12:06,000 --> 00:12:12,000 Null egy speciális mutató értékét, 190 00:12:12,000 --> 00:12:17,000 és az általunk használt null amikor azt szeretnénk mondani 191 00:12:17,000 --> 00:12:23,000 van egy pointer változó mutat semmit. 192 00:12:23,000 --> 00:12:28,000 És így általában azt jelenti, hogy ez a változó, ez az üzenet a változó 193 00:12:28,000 --> 00:12:35,000 üres, és itt, mert mi a CS50 speciális string típusú, 194 00:12:35,000 --> 00:12:37,000 mi a CS50 string típusú? 195 00:12:37,000 --> 00:12:42,000 Láttad, mi ez, ha David húzta vissza a fedelet az előadás? 196 00:12:42,000 --> 00:12:44,000 Ez egy funky-ez a mutató, igaz? 197 00:12:44,000 --> 00:12:48,000 Oké, igen. >> Ez egy char *. 198 00:12:48,000 --> 00:12:52,000 És így nagyon tudtuk helyettesíteni ezt 199 00:12:52,000 --> 00:12:56,000 Itt a char * üzenet 200 00:12:56,000 --> 00:13:04,000 és így a getString funkciót, ha nem kap egy sikeresen stringet a felhasználó, 201 00:13:04,000 --> 00:13:08,000 nem tudja feldolgozni a string, és az egyik eset, amikor nem tud feldolgozni egy karakterláncot 202 00:13:08,000 --> 00:13:11,000 az, ha a felhasználó beírja a file végére jellegű, az ellenőrzési D, 203 00:13:11,000 --> 00:13:17,000 ami nem az, amit általában csinálni, de ha ez megtörténik, 204 00:13:17,000 --> 00:13:20,000 akkor a függvény visszatérési e null értéket, mert így a mondás 205 00:13:20,000 --> 00:13:23,000 "Hé, nem kaptam egy string." 206 00:13:23,000 --> 00:13:27,000 Mi történne, ha nem teszünk message = null, 207 00:13:27,000 --> 00:13:30,000 ami olyan dolog, amit nem csinál még? 208 00:13:30,000 --> 00:13:32,000 Miért lenne ez a probléma? 209 00:13:32,000 --> 00:13:38,000 Mert tudom, hogy beszéltünk egy kicsit az előadás memóriavesztés. 210 00:13:38,000 --> 00:13:42,000 Igen, csináljuk ezt, és lássuk, mi történik. 211 00:13:42,000 --> 00:13:44,000 >> Basil a kérdés az volt, mi történik, ha valójában nem is 212 00:13:44,000 --> 00:13:48,000 this message = null teszt? 213 00:13:48,000 --> 00:13:51,000 Menjünk felfelé a csúcsra. 214 00:13:51,000 --> 00:13:53,000 Ti szólhatnak hozzá ezt. 215 00:13:53,000 --> 00:13:55,000 Igazából akkor mentse el a felülvizsgálatot. 216 00:13:55,000 --> 00:13:58,000 Ez lesz a Revision 3. 217 00:13:58,000 --> 00:14:02,000 Mit kell majd tennie, hogy futtatni ezt a programot akkor kell kattintania a fogaskerék ikonra ide, 218 00:14:02,000 --> 00:14:04,000 és akkor kell hozzá egy érv hozzá. 219 00:14:04,000 --> 00:14:10,000 Itt van, hogy ez a legfontosabb érv, mivel szeretnénk átadni egy parancssori argumentum. 220 00:14:10,000 --> 00:14:13,000 Itt fogom, hogy ez a 3-as szám. Szeretem a 3. 221 00:14:13,000 --> 00:14:19,000 Most zoom vissza, fut a program. 222 00:14:19,000 --> 00:14:24,000 Úgy fut, összeállítása, az épület. 223 00:14:24,000 --> 00:14:27,000 Itt vagyunk. Ez arra vár, hogy kéri. 224 00:14:27,000 --> 00:14:33,000 Ha írja be valami ilyesmit hello-hol, hogy menjen? 225 00:14:33,000 --> 00:14:38,000 Ó, a programot túl sokáig tartott, hogy fusson. Én jawing túl sokáig. 226 00:14:38,000 --> 00:14:40,000 Itt megy ez. 227 00:14:40,000 --> 00:14:43,000 Most írja be a hello. 228 00:14:43,000 --> 00:14:46,000 Látjuk, hogy titkosítja megfelelően. 229 00:14:46,000 --> 00:14:52,000 Most mi történik, ha nem teszünk azonnali getString vissza null? 230 00:14:52,000 --> 00:14:57,000 Ne feledje, hogy azt mondtam, hogy mi volt, hogy a gomb megnyomásával ellenőrzés D ugyanabban az időben. 231 00:14:57,000 --> 00:14:59,000 Én lapozzunk ide. Majd futtassa újra. 232 00:14:59,000 --> 00:15:01,000 Building. Ott megy ez. 233 00:15:01,000 --> 00:15:04,000 Most, amikor megüt ellenőrzési D 234 00:15:04,000 --> 00:15:12,000 Van ez a vonal, amely azt mondja opt/sandbox50/bin/run.sh, Segmentation fault. 235 00:15:12,000 --> 00:15:15,000 Láttátok-e már? 236 00:15:15,000 --> 00:15:17,000 >> [Student] Miért nincs->> Tessék? 237 00:15:17,000 --> 00:15:20,000 [Student] Miért nincs core dump ebben az esetben? 238 00:15:20,000 --> 00:15:26,000 A core dump jelentése a kérdés miért nincs core dump itt? 239 00:15:26,000 --> 00:15:29,000 A kérdés az, hogy lehet, de a mag kiíratás egy fájl 240 00:15:29,000 --> 00:15:31,000 hogy lesz tárolva a merevlemezen. 241 00:15:31,000 --> 00:15:34,000 Ebben az esetben mi már tiltva core dump 242 00:15:34,000 --> 00:15:37,000 a távon szerver, hogy mi nem az emberek seg hibás 243 00:15:37,000 --> 00:15:40,000 és kiépítése tonna core dump. 244 00:15:40,000 --> 00:15:46,000 De lehet, hogy kap egy. 245 00:15:46,000 --> 00:15:48,000 Core szeméttárolót a fajta dolog, amit gyakran letiltása, 246 00:15:48,000 --> 00:15:52,000 és néha te. 247 00:15:52,000 --> 00:15:55,000 A szegmentációs hiba, hogy válaszoljak a kérdésedre, Basil, 248 00:15:55,000 --> 00:16:00,000 azt mondja, hogy megpróbáltuk elérni a mutató 249 00:16:00,000 --> 00:16:05,000 hogy nem volt beállítva, hogy pont semmit. 250 00:16:05,000 --> 00:16:09,000 Emlékszel Muci a videó, amikor Muci próbál 251 00:16:09,000 --> 00:16:12,000 megy hozzá egy mutató, ami nem mutat semmit? 252 00:16:12,000 --> 00:16:16,000 Ebben az esetben azt hiszem, műszakilag a mutató mutat valamit. 253 00:16:16,000 --> 00:16:20,000 Ez mutat null, ami műszakilag 0, 254 00:16:20,000 --> 00:16:25,000 de ez határozza meg, hogy abban a szegmens, amely nem hozzáférhető 255 00:16:25,000 --> 00:16:28,000 az a program, így kap egy szegmentációs hiba 256 00:16:28,000 --> 00:16:31,000 azért, mert te nem a memóriát, hogy ez egy érvényes részes 257 00:16:31,000 --> 00:16:38,000 mint a heap szegmens vagy a verem szegmens vagy az adatok szegmensben. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Bármilyen további kérdése van Caesar? 260 00:16:48,000 --> 00:16:51,000 >> Menjünk tovább. Nézzük Rev. 2 nagyon gyorsan. 261 00:16:51,000 --> 00:17:00,000 Ez Vigenère. 262 00:17:00,000 --> 00:17:04,000 Itt Vigenère 263 00:17:04,000 --> 00:17:06,000 megyünk keresztül, ezt elég gyorsan, mert újra, 264 00:17:06,000 --> 00:17:10,000 Vigenère és Caesar meglehetősen hasonlóak. 265 00:17:10,000 --> 00:17:12,000 Header megjegyzés előtt, 266 00:17:12,000 --> 00:17:17,000 # Define előtt van, hogy ne használja ezeket a mágikus számok. 267 00:17:17,000 --> 00:17:21,000 A szép dolog mondani akartunk költözni 268 00:17:21,000 --> 00:17:23,000 egy másik ábécé, vagy valami ilyesmi. 269 00:17:23,000 --> 00:17:26,000 Ahelyett, hogy menjen manuálisan módosíthatja a 26 által a kódot 270 00:17:26,000 --> 00:17:30,000 tudtuk megváltoztatni ezt 27 vagy ejtse le 271 00:17:30,000 --> 00:17:34,000 ha az általunk használt különböző ábécék, különböző nyelveken. 272 00:17:34,000 --> 00:17:38,000 Ismét megvan az ellenőrzést az érvelés gróf 273 00:17:38,000 --> 00:17:42,000 és igazán akkor szinte ezt a sablont. 274 00:17:42,000 --> 00:17:46,000 Elég sok minden programot írsz, kell- 275 00:17:46,000 --> 00:17:50,000 ha úgy parancssori argumentumok-sorozat egyes vonalak 276 00:17:50,000 --> 00:17:55,000 hogy olvas, mint ez a legelején. 277 00:17:55,000 --> 00:17:59,000 Ez az egyik első józanság teszteket akarsz csinálni. 278 00:17:59,000 --> 00:18:03,000 >> Itt mi nem is tettünk róla, hogy 279 00:18:03,000 --> 00:18:06,000 a kulcsszó érvényes volt, és ez volt a második ellenőrzik, hogy megcsináltuk. 280 00:18:06,000 --> 00:18:11,000 Figyeljük meg újra, hogy elbúcsúztunk ezt honnan argc és 2. 281 00:18:11,000 --> 00:18:14,000 Ne feledje, hogy ebben az esetben egy dolog, hogy meg kellett tennem, hogy helyette 282 00:18:14,000 --> 00:18:18,000 használatának ai akartuk, hogy érvényesítse az egész string, 283 00:18:18,000 --> 00:18:21,000 és annak érdekében tenni, hogy ténylegesen menni karakterenként 284 00:18:21,000 --> 00:18:23,000 át a húr. 285 00:18:23,000 --> 00:18:29,000 Nincs jó módja annak, hogy hívja valamit rajta 286 00:18:29,000 --> 00:18:31,000 mivel még, például, hogy i egy vissza fog térni 0 287 00:18:31,000 --> 00:18:37,000 ha nem tudja feldolgozni az egész, úgy, hogy nem is működik. 288 00:18:37,000 --> 00:18:42,000 Ismét szép üzenet közölve a használókkal, hogy pontosan mi történt. 289 00:18:42,000 --> 00:18:45,000 Akkor itt, megint, mi is kezeli az esetben, ha 290 00:18:45,000 --> 00:18:50,000 a felhasználó beír egy ellenőrző D véletlenszerű karakter. 291 00:18:50,000 --> 00:18:54,000 >> És akkor Charlotte volt a kérdés korábban arról, hogy hogyan sikerül kihagyja terek 292 00:18:54,000 --> 00:18:57,000 a mi karakterlánc itt. 293 00:18:57,000 --> 00:19:00,000 Ez kedves volt hasonló ahhoz, amit tettünk a Myspace programmal 294 00:19:00,000 --> 00:19:04,000 hogy mi volt a szakaszban, és az, ahogy ez működött 295 00:19:04,000 --> 00:19:08,000 az, hogy mi követte a betűk száma, amit látott. 296 00:19:08,000 --> 00:19:13,000 Ahogy sétált az üzenetet húr, ahogy odament karakterenkénti 297 00:19:13,000 --> 00:19:16,000 követtük az index része a hurok, és akkor is nyomon 298 00:19:16,000 --> 00:19:21,000 a betűk száma, így a nem speciális karaktereket, nem számjegyek, nem-szóköz 299 00:19:21,000 --> 00:19:27,000 hogy látta a külön változót. 300 00:19:27,000 --> 00:19:33,000 És akkor ez a megoldás módosítja a kulcs 301 00:19:33,000 --> 00:19:41,000 kap egy aktuális kulcs értéke, és nem, hogy on the fly, 302 00:19:41,000 --> 00:19:47,000 közvetlenül előtte ezután titkosítani az aktuális üzenetet karaktert. 303 00:19:47,000 --> 00:19:50,000 Vannak olyan megoldások, amelyek tökéletesen kedvezményes túl 304 00:19:50,000 --> 00:19:58,000 amely módosítja a kulcsot, amikor vizsgálatát a kulcs érvényességét. 305 00:19:58,000 --> 00:20:01,000 Amellett, ügyelve arra, hogy a karaktert, és a kulcsszó 306 00:20:01,000 --> 00:20:05,000 volt egy alfabetikus karaktert az is kiderült, hogy egy egész 307 00:20:05,000 --> 00:20:13,000 A 0-25 tartomány ugorjon tekintettel kell csinálni, hogy később ebben a ciklusban. 308 00:20:13,000 --> 00:20:18,000 Ismét itt látsz, ez tényleg pontosan ugyanazt a kódot 309 00:20:18,000 --> 00:20:22,000 hogy mi használt Caesar ezen a ponton. 310 00:20:22,000 --> 00:20:25,000 Te csinálod pontosan ugyanaz a dolog, így az igazi trükk kitalálni 311 00:20:25,000 --> 00:20:30,000 hogyan kell bekapcsolni a kulcsszó egy egész. 312 00:20:30,000 --> 00:20:35,000 >> Az egyik dolog, hogy mi volt itt, hogy egy kicsit sűrű 313 00:20:35,000 --> 00:20:39,000 ez megismételtük ezt a kifejezést, azt hiszem, nevezhetjük azt, 314 00:20:39,000 --> 00:20:45,000 3 külön-szor vonalakon 58, 59, és 61.. 315 00:20:45,000 --> 00:20:52,000 Tud valaki magyarázni, hogy pontosan mit jelent ez a kifejezés? 316 00:20:52,000 --> 00:20:55,000 Ez hozzáférés egy karaktert, ahogy mondtad. 317 00:20:55,000 --> 00:20:59,000 Igen, ez [hallhatatlan] egy karaktert a kulcsszó, 318 00:20:59,000 --> 00:21:04,000 és így ez betűk száma látható, mert te csak mozog 319 00:21:04,000 --> 00:21:06,000 A következő kulcsszóval: ha már látta a levelet, 320 00:21:06,000 --> 00:21:10,000 így fog hatékonyan kihagyja terek és ilyesmi. 321 00:21:10,000 --> 00:21:12,000 Igen, pontosan. 322 00:21:12,000 --> 00:21:16,000 És akkor egyszer láttad a kulcsszó üres imént mod így hátrál körül. 323 00:21:16,000 --> 00:21:18,000 Pontosan. Ez egy tökéletes magyarázat. 324 00:21:18,000 --> 00:21:23,000 Mi Kevin azt mondta, hogy azt akarjuk, hogy index a kulcsszó. 325 00:21:23,000 --> 00:21:28,000 Azt akarjuk, hogy a num_letters_seen karaktert, ha úgy tetszik, 326 00:21:28,000 --> 00:21:32,000 de ha num_letters_seen meghaladja a hossza a kulcsszó, 327 00:21:32,000 --> 00:21:37,000 módon jutunk vissza a megfelelő tartományban használjuk a mod operátor 328 00:21:37,000 --> 00:21:40,000 hatékonyan köré. 329 00:21:40,000 --> 00:21:43,000 Például, mint a rövid, a kulcsszó bacon, 330 00:21:43,000 --> 00:21:46,000 és ez 5 betű hosszú. 331 00:21:46,000 --> 00:21:50,000 De láttuk 6 betű a mi szöveges ezen a ponton 332 00:21:50,000 --> 00:21:52,000 és titkosított 6. 333 00:21:52,000 --> 00:21:57,000 Mi lesz a vége, hozzáférés a num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 amely 6, mod a hossza a kulcsszó, 5, 335 00:22:00,000 --> 00:22:04,000 és így lesz 1, és így mit fogunk csinálni a fogunk 336 00:22:04,000 --> 00:22:14,000 eléréséhez az első karakter belső kulcsszó ezen a ponton. 337 00:22:14,000 --> 00:22:21,000 >> Rendben, bármilyen kérdése Vigenère 338 00:22:21,000 --> 00:22:26,000 mielőtt lépni? 339 00:22:26,000 --> 00:22:31,000 Ti érzés nagyon jó ebben? 340 00:22:31,000 --> 00:22:35,000 Cool, nagyszerű. 341 00:22:35,000 --> 00:22:38,000 Azt szeretnénk, hogy győződjön meg arról, hogy ti egyre a lehetőséget, hogy lássa kód 342 00:22:38,000 --> 00:22:48,000 hogy azt gondoljuk, jól néz ki, és a lehetőséget, hogy tanuljanak belőle. 343 00:22:48,000 --> 00:22:53,000 Ez lesz az utolsó fogjuk használni terek egyelőre, 344 00:22:53,000 --> 00:22:59,000 és megyünk átmenet most, és fogok menni cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 így nem tehetünk egy kis kvíz felülvizsgálatát. 346 00:23:06,000 --> 00:23:10,000 A legjobb módja, azt hiszem, hogy kezdeni ezzel kvíz értékelést 347 00:23:10,000 --> 00:23:15,000 hogy jön ehhez Előadások oldalra, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 és alatt minden héten fejezetek, így ha megnézem itt a 0. héten, 349 00:23:20,000 --> 00:23:27,000 Látom, hogy van egy lista, hogy mi témák tárgyalt Hét 0. 350 00:23:27,000 --> 00:23:31,000 >> Ha bármelyik ezek a témák úgy tűnik, ismeretlen az Ön számára 351 00:23:31,000 --> 00:23:34,000 akkor biztosan szeretné, hogy menjen vissza, és kutat a jegyzet, és esetleg 352 00:23:34,000 --> 00:23:39,000 még akkor is fusd át az előadások, nézni őket újra, ha azt szeretnénk, 353 00:23:39,000 --> 00:23:44,000 hogy kedvet kapjanak, mi folyik az egyes e téma. 354 00:23:44,000 --> 00:23:49,000 Azt fogják mondani továbbá ebben az évben az egyik hűvös források megvan 355 00:23:49,000 --> 00:23:55,000 ezek a rövidnadrág, hogy már létre, és ha megnézi a 0. héten, 356 00:23:55,000 --> 00:24:00,000 nem rendelkezik a témák, de van jó néhány közülük, 357 00:24:00,000 --> 00:24:03,000 néhány trükkösebb is, így figyeljük ezeket a nadrág újra 358 00:24:03,000 --> 00:24:08,000 egy jó módja, hogy neked fel a sebességet. 359 00:24:08,000 --> 00:24:15,000 Különösen fogok valósult meg a dugó a 3 az alsó, mert én tettem azokat. 360 00:24:15,000 --> 00:24:20,000 De ha küzd binárisan, bit, hex, ez a fajta dolog, 361 00:24:20,000 --> 00:24:22,000 bináris remek hely a kezdéshez. 362 00:24:22,000 --> 00:24:25,000 ASCII van egy másik, hogy jó, hogy többet is. 363 00:24:25,000 --> 00:24:31,000 Akár azt is nézni nekem 1.5x sebesség, ha megyek túl lassú az Ön számára. 364 00:24:31,000 --> 00:24:35,000 Mivel ez a felülvizsgálat, nyugodtan tedd ezt. 365 00:24:35,000 --> 00:24:40,000 >> Csak kezdeni tényleg gyorsan fogunk menni egy pár ilyen kvíz problémák 366 00:24:40,000 --> 00:24:44,000 csak azért, hogy gyorsan lemorzsolódás ezeken. 367 00:24:44,000 --> 00:24:50,000 Például, nézzük meg, hogy a probléma, 16 Van egészen itt a fórumon. 368 00:24:50,000 --> 00:24:54,000 Van ez a következő számítás bináris, 369 00:24:54,000 --> 00:24:56,000 és meg akarjuk mutatni bármilyen munkát. 370 00:24:56,000 --> 00:24:59,000 Oké, megyek, hogy ez egy lövés. 371 00:24:59,000 --> 00:25:01,000 Srácok kell követniük együtt papír, 372 00:25:01,000 --> 00:25:04,000 és mi ezt nagyon gyorsan. 373 00:25:04,000 --> 00:25:06,000 Azt akarjuk, hogy hajtsa végre az alábbi számítás bináris. 374 00:25:06,000 --> 00:25:16,000 Megvan 00110010. 375 00:25:16,000 --> 00:25:27,000 És fogok hozzá, hogy 00.110.010. 376 00:25:27,000 --> 00:25:30,000 A matematikai zsenik követő mentén at home, 377 00:25:30,000 --> 00:25:35,000 ez ténylegesen megszorozzuk 2-vel. 378 00:25:35,000 --> 00:25:37,000 Kezdjük. 379 00:25:37,000 --> 00:25:39,000 Megyünk, hogy ugyanezt az algoritmust kívül, amit mi 380 00:25:39,000 --> 00:25:43,000 ha hozzá tizedes számok együtt. 381 00:25:43,000 --> 00:25:46,000 Tényleg az egyetlen különbség az, hogy mi visszahurkoló körül 382 00:25:46,000 --> 00:25:51,000 egyszer már 1 + 1 helyett egyszer eljutunk 10-ig. 383 00:25:51,000 --> 00:25:53,000 >> Ha elkezdjük a jobb, nagyon gyorsan, mi az első számjegy? 384 00:25:53,000 --> 00:25:55,000 [Tanuló] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Nagyszerű, a második számjegy? 386 00:25:58,000 --> 00:26:00,000 [Student] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Ez egy 1? 1 + 1? 388 00:26:02,000 --> 00:26:04,000 [Student] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Pontosan, tehát mi a szám, hogy írok jog alatt a 2 közül ki együtt? 390 00:26:08,000 --> 00:26:11,000 [Student] 1, 0, vagy 0, majd folytassa az 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 és végrehajtani a 1, pontosan. 392 00:26:15,000 --> 00:26:18,000 Ezután egyet, Basil, te fel. 393 00:26:18,000 --> 00:26:20,000 Mi a harmadik? >> [Basil] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, tökéletes. 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.] Ja, és mit tegyek? 397 00:26:30,000 --> 00:26:32,000 [Student] Az 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] És mit tegyek? És aztán folytatni az 1. 399 00:26:34,000 --> 00:26:36,000 Tökéletes, Sahb? >> [Sahb] Most van 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] És tegyek valamit itt? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Aztán a következő egy van 1, mert átvitt 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Nagy, ezért itt be tudjuk fejezni azt. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Tanuló] e 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, ahogy mondtad, 10, vagy 1, 0, igen. 407 00:27:01,000 --> 00:27:07,000 10 egy helytelen elnevezés, mert nekem 10: a 10-es számú, 408 00:27:07,000 --> 00:27:12,000 és ez a trükkje, hogy hogyan vagyunk képviselő, amikor írunk rá. 409 00:27:12,000 --> 00:27:20,000 Mi képviseljük a 2-es szám 1, 0, és a 10-es számú némileg eltérő. 410 00:27:20,000 --> 00:27:23,000 >> Milyen fajta szép körülbelül bináris hogy tényleg nem sok 411 00:27:23,000 --> 00:27:25,000 esetekben meg kell tanulni. 412 00:27:25,000 --> 00:27:30,000 Van 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 értéke 0, és majd hordoznak 1, 414 00:27:34,000 --> 00:27:37,000 és akkor lehet látni itt a harmadik oszlopban jobbról 415 00:27:37,000 --> 00:27:40,000 volt ez 1, 1, és 1. 416 00:27:40,000 --> 00:27:43,000 És 1 + 1 + 1 egy 1, 417 00:27:43,000 --> 00:27:45,000 és szállítására másik 1. 418 00:27:45,000 --> 00:27:48,000 Ha csinálsz bináris kívül elég egyszerű. 419 00:27:48,000 --> 00:27:51,000 Csinálnék még egy pár ilyen a józanság megtekintéséhez magatokat 420 00:27:51,000 --> 00:27:54,000 mielőtt mész, mert ez 421 00:27:54,000 --> 00:28:00,000 Valószínűleg valami, látni fogjuk a kvíz. 422 00:28:00,000 --> 00:28:03,000 Most ezt következő egy is. 423 00:28:03,000 --> 00:28:06,000 Csináljuk problémája 17. 424 00:28:06,000 --> 00:28:12,000 Fogjuk átalakítani a következő bináris szám decimális. 425 00:28:12,000 --> 00:28:28,000 Megvan 10100111001. 426 00:28:28,000 --> 00:28:33,000 Ne feledje, a bináris videót tettem 427 00:28:33,000 --> 00:28:36,000 Mentem keresztül, egy pár példát, és bemutatta, hogyan 428 00:28:36,000 --> 00:28:41,000 minden működik, ha csinálod decimális. 429 00:28:41,000 --> 00:28:45,000 Amikor dolgozik decimális Azt hiszem, 430 00:28:45,000 --> 00:28:48,000 Ezen a ponton az életünkben, így folyékonyan beszél arról, hogy 431 00:28:48,000 --> 00:28:53,000 ez elég könnyű elkendőz a mechanika, hogyan is működik. 432 00:28:53,000 --> 00:28:59,000 >> De ahhoz, hogy egy gyors bedugni, ha megvan a 137-es 433 00:28:59,000 --> 00:29:06,000 ez valójában azt jelenti, és ez szintén a decimális- 434 00:29:06,000 --> 00:29:19,000 A 137-ban tizedes azt jelenti, hogy van 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 Ez mind tartózkodik a képernyőn. 436 00:29:22,000 --> 00:29:29,000 És aztán, ha megnézi ezeket a számokat itt, 437 00:29:29,000 --> 00:29:34,000 100, 10 és 1, akkor láthatjuk, hogy ők tulajdonképpen minden hatáskörét 10-ig. 438 00:29:34,000 --> 00:29:43,000 Én már 10 ², 10 ¹ és 10 a nulla. 439 00:29:43,000 --> 00:29:48,000 Van egy hasonló, az ilyesmit bináris, 440 00:29:48,000 --> 00:29:55,000 kivéve, hogy a bázis, ahogy mi nevezzük, a 2 helyett 10-ig. 441 00:29:55,000 --> 00:29:58,000 Ezek a 10s hogy én írtam ide az alján, 442 00:29:58,000 --> 00:30:02,000 A 10 ², 10 ¹, 10 a nulla, 10 a mi alap, 443 00:30:02,000 --> 00:30:08,000 és a kitevő, 0, 1, vagy 2, 444 00:30:08,000 --> 00:30:14,000 az által implikált helyzete számjegy a szám, amit írni. 445 00:30:14,000 --> 00:30:21,000 1, ha nézzük, ez az 1, a 2. pozícióba. 446 00:30:21,000 --> 00:30:27,000 A 3-ban az 1. pozíció, és a 7-ben a 0. helyzetben. 447 00:30:27,000 --> 00:30:35,000 Így kapjuk a különböző kitevők alább a bázisok. 448 00:30:35,000 --> 00:30:40,000 >> Miután mindez we'll-valójában, tudod mit? 449 00:30:40,000 --> 00:30:43,000 Megteszünk-hol a visszavonás gomb menni? 450 00:30:43,000 --> 00:30:45,000 Ott megy ez. 451 00:30:45,000 --> 00:30:47,000 Imádom ezt a visszavonás dolog. 452 00:30:47,000 --> 00:30:51,000 Ezt követően azt hiszem, nekem legalább 453 00:30:51,000 --> 00:30:54,000 a legegyszerűbb módja annak, hogy kezdeni konvertáló bináris szám 454 00:30:54,000 --> 00:30:57,000 vagy egy hexadecimális számot, ahol a bázis 16 455 00:30:57,000 --> 00:31:02,000 és nem 10 vagy 2, hogy menjen előre, és írja ki 456 00:31:02,000 --> 00:31:09,000 A bázisok és művelői az összes számot az én bináris számot a tetején. 457 00:31:09,000 --> 00:31:14,000 Ha elkezdjük balról jobbra újra, 458 00:31:14,000 --> 00:31:17,000 ami elég counterintuitive, 459 00:31:17,000 --> 00:31:23,000 Majd állítsa vissza fekete ide, megvan a 2 a 0. pozíció 460 00:31:23,000 --> 00:31:27,000 és akkor mi van 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 és majd a 2 a 3, 2-a 4-2 az 5, 6, 462 00:31:33,000 --> 00:31:39,000 7., 8., 9., és 10.. 463 00:31:39,000 --> 00:31:41,000 Ezek a számok írtam ki az összes exponensek. 464 00:31:41,000 --> 00:31:48,000 Én csak írtam a bázis itt az első 3 csak helyet. 465 00:31:48,000 --> 00:31:50,000 >> Ezen a ponton én megyek előre, és én tényleg fog törölni 466 00:31:50,000 --> 00:31:53,000 a dolgokat, hogy mi volt a decimális, ha nem baj. 467 00:31:53,000 --> 00:31:57,000 Már minden megvan. 468 00:31:57,000 --> 00:32:05,000 Akik ezt nézni interneten Biztos vagyok benne, képes lesz visszaforgatni velem, ha szeretné. 469 00:32:05,000 --> 00:32:07,000 Váltás vissza a tollat. 470 00:32:07,000 --> 00:32:12,000 Nos, mit tudunk tenni, ha a fiúk nem teljesen, hogy gyorsítsa meg a 2 hatványai, 471 00:32:12,000 --> 00:32:15,000 ez teljesen jó. 472 00:32:15,000 --> 00:32:18,000 Ez történik. Megértem. 473 00:32:18,000 --> 00:32:23,000 Egyszer volt egy állásinterjúra, ahol azt mondták, tudnom kellene valamennyi hatáskörét, 2 474 00:32:23,000 --> 00:32:26,000 egészen 2 a 30.. 475 00:32:26,000 --> 00:32:29,000 Nem volt munkám van. 476 00:32:29,000 --> 00:32:32,000 Különben is, ti is megy előre, és nem a matek itt, 477 00:32:32,000 --> 00:32:35,000 de bináris nem igazán értelme, 478 00:32:35,000 --> 00:32:38,000 , és az sem, hogy van értelme a decimális vagy hexadecimális sem, 479 00:32:38,000 --> 00:32:43,000 hogy nem a matek, hogy hol van nullát. 480 00:32:43,000 --> 00:32:49,000 Láthatjuk van 0 itt a 0 itt, 0 itt, 0 itt, 0 itt, 0 itt. 481 00:32:49,000 --> 00:32:52,000 Miért lehet, hogy nincs értelme, hogy ezt a konkrét matematikai 482 00:32:52,000 --> 00:32:56,000 kiszámításához a megfelelő 2-hatvány adott helyzetben? 483 00:32:56,000 --> 00:32:59,000 Pontosan, mint Charlotte mondta, ez 0 lesz. 484 00:32:59,000 --> 00:33:05,000 Lehet is menteni magát az időt, ha számítási hatáskörök 2 nem az erősséged. 485 00:33:05,000 --> 00:33:10,000 Ebben az esetben csak meg kell kiszámítani, hogy 2-től a 0, ami-? 486 00:33:10,000 --> 00:33:12,000 [Student] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2-a 3, amelyet az-? 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. Sajnálom, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 a 4 16, pontosan. 492 00:33:26,000 --> 00:33:28,000 2 az 5, Kevin? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 a 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.] Tökéletes. 496 00:33:41,000 --> 00:33:43,000 És 2. 10? 497 00:33:43,000 --> 00:33:45,000 [Student] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Ja, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Amint megvan ezek a számok tudjuk összefoglalni őket fel. 500 00:33:57,000 --> 00:34:01,000 És ez az, ahol ez nagyon fontos, hogy csinál egy pár dolgot. 501 00:34:01,000 --> 00:34:07,000 Az egyik megy lassú, és ellenőrizze a munkát. 502 00:34:07,000 --> 00:34:10,000 Azt lehet mondani, hogy van egy 1 a végén ez a szám, 503 00:34:10,000 --> 00:34:15,000 úgyhogy érdemes kap egy páratlan szám, mint az én eredményeként 504 00:34:15,000 --> 00:34:18,000 azért, mert az összes többi is lesznek páros számok 505 00:34:18,000 --> 00:34:21,000 tekintettel arra, hogy ez egy bináris szám. 506 00:34:21,000 --> 00:34:24,000 A másik dolog az, ha kap, hogy ezt a pontot a teszt 507 00:34:24,000 --> 00:34:27,000 és akkor írtam ki ilyen messzire 508 00:34:27,000 --> 00:34:30,000 és te fogy az idő 509 00:34:30,000 --> 00:34:33,000 nézd meg a pontok számát, hogy ez a probléma, érdemes. 510 00:34:33,000 --> 00:34:40,000 Ez a probléma, amint látod, ha fordítsa vissza a laptop nagyon gyorsan, 511 00:34:40,000 --> 00:34:44,000 ez a probléma 2 pont, tehát ez nem az a fajta kiegészítés 512 00:34:44,000 --> 00:34:47,000 ha kell megy keresztül, ha tényleg szorít az idő. 513 00:34:47,000 --> 00:34:52,000 De mi vissza akar váltani az iPad, és megyünk keresztül nagyon gyorsan. 514 00:34:52,000 --> 00:34:54,000 >> Szeretem ezt a kis számok 1. 515 00:34:54,000 --> 00:34:56,000 mert úgy találják, hogy könnyebb. 516 00:34:56,000 --> 00:35:00,000 Szeretem a 32 és 8, mert együtt jár elég könnyen, és kap 50. 517 00:35:00,000 --> 00:35:03,000 16 és 1 lesz 17. 518 00:35:03,000 --> 00:35:05,000 Ott kap 57, 519 00:35:05,000 --> 00:35:14,000 és akkor a többit e, így nem tehetünk 57, 156. 520 00:35:14,000 --> 00:35:16,000 Gyerünk. 521 00:35:16,000 --> 00:35:19,000 Ember, hát lássuk. 522 00:35:19,000 --> 00:35:27,000 Volt 57, 256, és 1024. 523 00:35:27,000 --> 00:35:31,000 Ezen a ponton inkább csak megy keresztül. 524 00:35:31,000 --> 00:35:35,000 Fogalmam sincs. Tisztán kell olvasni fel ezt. 525 00:35:35,000 --> 00:35:40,000 7, 6, 4, kapsz 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Aztán kap 3, akkor kap 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Húsvéti tojás, valaki? 530 00:35:55,000 --> 00:35:59,000 Aki ismeri ezt a számot? 531 00:35:59,000 --> 00:36:02,000 Chris felismeri a számot. Mit jelent ez, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, így ha ezt nézd meg, úgy néz ki leet. 534 00:36:11,000 --> 00:36:15,000 Hacker cucc. Vigyázz, hogy az ilyen dolgok a félidős vagy a teszt inkább. 535 00:36:15,000 --> 00:36:19,000 Ha látja, hogy ilyen dolgokat, és kíváncsi, "Huh" 536 00:36:19,000 --> 00:36:22,000 esetleg tényleg jelent valamit. 537 00:36:22,000 --> 00:36:24,000 Nem tudom. David szereti üzembe be! 538 00:36:24,000 --> 00:36:26,000 Ez egy jó módja annak, hogy józan ellenőrizni. 539 00:36:26,000 --> 00:36:30,000 Mint rendben, látom, mi folyik itt. 540 00:36:30,000 --> 00:36:34,000 >> Ez hét 0/Week 1 cucc. 541 00:36:34,000 --> 00:36:39,000 Ha vissza szeretne térni a laptop most 542 00:36:39,000 --> 00:36:46,000 kicsinyítés, és néhány más dolog. 543 00:36:46,000 --> 00:36:50,000 Van ASCII, amit csináltam sok a probléma készletek. 544 00:36:50,000 --> 00:36:55,000 Ez a fogalom a tőke A. Mi ez valójában? 545 00:36:55,000 --> 00:36:57,000 Tudva, hogy ez a decimális egész szám. 546 00:36:57,000 --> 00:37:00,000 65, amit ez leképezve az ASCII táblázat 547 00:37:00,000 --> 00:37:03,000 és ez így, hogy a számítógép írja azt, 548 00:37:03,000 --> 00:37:06,000 és ez hogyan már megússzák ténylegesen írásban 549 00:37:06,000 --> 00:37:09,000 a karakter A főváros és a karakter kisbetűsre a 550 00:37:09,000 --> 00:37:14,000 Néhány ezek a megoldások és probléma készletek, amit csináltál. 551 00:37:14,000 --> 00:37:16,000 Egy pár más dolog. 552 00:37:16,000 --> 00:37:25,000 Van nyilatkozatok, logikai kifejezések, feltételek, hurkok, változók és szálak. 553 00:37:25,000 --> 00:37:29,000 >> Ezeket minden úgy tűnik, hogy van értelme a legtöbb? 554 00:37:29,000 --> 00:37:35,000 Néhányan ezt a terminológiát egy kicsit funky időnként. 555 00:37:35,000 --> 00:37:46,000 Szeretném azt hinni, a nyilatkozat a legtöbb valami pontosvesszővel végződjön. 556 00:37:46,000 --> 00:37:51,000 Olyan kifejezés, mint x = 7, amely meghatározza a változó, 557 00:37:51,000 --> 00:37:54,000 feltehetőleg hívott x = 7. 558 00:37:54,000 --> 00:38:01,000 Feltehetően x szintén egyfajta, amely tárolja a 7-es számú, 559 00:38:01,000 --> 00:38:05,000 így ez egy int vagy esetleg egy úszó vagy egy rövid, vagy char, 560 00:38:05,000 --> 00:38:07,000 valami ilyesmi. 561 00:38:07,000 --> 00:38:12,000 A logikai kifejezés ezekkel a kettős egyenlő 562 00:38:12,000 --> 00:38:17,000 és bumm egyenlő vagy a nem egyenlő, kisebb, nagyobb, 563 00:38:17,000 --> 00:38:22,000 kisebb vagy egyenlő, minden ilyesmi. 564 00:38:22,000 --> 00:38:28,000 Feltételek akkor is, ha más nyilatkozatok. 565 00:38:28,000 --> 00:38:32,000 Azt ne feledd, hogy nem lehet egy máshol nem megfelelő, ha. 566 00:38:32,000 --> 00:38:37,000 Hasonlóképpen, akkor nincs más, ha nem megfelelő, ha. 567 00:38:37,000 --> 00:38:40,000 Loops, felidézni a 3 féle hurok voltunk kalapálás beléd 568 00:38:40,000 --> 00:38:43,000 Az utolsó pár szakaszok és probléma készletek. 569 00:38:43,000 --> 00:38:46,000 Használata nem pedig, amikor egyre felhasználói input, 570 00:38:46,000 --> 00:38:51,000 használatával miközben hurkok, amíg egy adott feltétel igaz, 571 00:38:51,000 --> 00:38:56,000 , majd használja azokat, hurkok, ha kell 572 00:38:56,000 --> 00:39:01,000 tudjuk, melyik iteráció a hurok te aktuálisan így gondolok rá. 573 00:39:01,000 --> 00:39:07,000 Vagy ha csinálsz egy minden karakter egy string akarok valamit, 574 00:39:07,000 --> 00:39:15,000 minden egyes eleme egy tömb akarok valamit az elemet. 575 00:39:15,000 --> 00:39:18,000 >> Témák és események. 576 00:39:18,000 --> 00:39:21,000 Ezek már nem tartoznak olyan kifejezetten C, 577 00:39:21,000 --> 00:39:23,000 de ne feledje, ez a semmiből. 578 00:39:23,000 --> 00:39:26,000 Ez a fogalom, különböző szkripteket. 579 00:39:26,000 --> 00:39:32,000 Ez is ezt a fogalmat a műsorszolgáltató az esemény. 580 00:39:32,000 --> 00:39:37,000 Vannak, akik nem használják műsorszolgáltatás a projektek kezdetben, 581 00:39:37,000 --> 00:39:40,000 amely teljesen hűvös, 582 00:39:40,000 --> 00:39:46,000 de ezek 2 különböző módon kezelik ezt a nagyobb probléma az úgynevezett konkurencia, 583 00:39:46,000 --> 00:39:49,000 ami hogyan kap programok végrehajtására 584 00:39:49,000 --> 00:39:54,000 vagy látszólag végre ugyanabban az időben? 585 00:39:54,000 --> 00:39:59,000 Különböző feladatok futtatása, miközben más feladatok is futnak. 586 00:39:59,000 --> 00:40:01,000 Így az operációs rendszer úgy tűnik, hogy működik. 587 00:40:01,000 --> 00:40:04,000 Ez az oka annak ellenére, például, 588 00:40:04,000 --> 00:40:10,000 Megvan a böngésző fut, én is bekapcsolni Spotify és játszani egy dalt. 589 00:40:10,000 --> 00:40:14,000 Ez inkább egy fogalmi dolog, hogy megértsék. 590 00:40:14,000 --> 00:40:17,000 Szeretnék venni egy pillantást a szálak rövid 591 00:40:17,000 --> 00:40:21,000 Ha szeretne többet megtudni ezt. 592 00:40:21,000 --> 00:40:26,000 >> Lássuk csak, azt hiszem, volna 593 00:40:26,000 --> 00:40:31,000 probléma ezzel az egyik ilyen. 594 00:40:31,000 --> 00:40:35,000 Ismét azt hiszem, szálak és események nem olyasmi, amit fedezi a C 595 00:40:35,000 --> 00:40:41,000 csak azért, mert ez jóval nehezebb, mint a Scratch. 596 00:40:41,000 --> 00:40:44,000 Nem kell aggódni, hogy ott, de határozottan megérteni a fogalmakat, 597 00:40:44,000 --> 00:40:47,000 érti, mi folyik itt. 598 00:40:47,000 --> 00:40:52,000 Mielőtt folytatnánk, bármilyen kérdése 0. héten anyagot? 599 00:40:52,000 --> 00:40:55,000 Mindenki érezte, elég jó? 600 00:40:55,000 --> 00:41:03,000 Megértése változók és mi a változó? 601 00:41:03,000 --> 00:41:08,000 >> Lépjünk tovább. 1. hét. 602 00:41:08,000 --> 00:41:12,000 Egy pár dolog, hogy itt nem voltak különösen vonatkozik 603 00:41:12,000 --> 00:41:21,000 A kvíz felülvizsgálat szükségszerűen és több fogalmi dolgot gondolni. 604 00:41:21,000 --> 00:41:30,000 Az első ez a fogalom, amit forráskód, fordítók és tárgykód vannak. 605 00:41:30,000 --> 00:41:32,000 Valaki? Basil. 606 00:41:32,000 --> 00:41:37,000 Is tárgykód-értem forráskód mit raksz bele csenget, 607 00:41:37,000 --> 00:41:42,000 és tárgykód, amit csenget teszi ki, hogy a számítógép tudja olvasni a program. 608 00:41:42,000 --> 00:41:44,000 Pontosan. 609 00:41:44,000 --> 00:41:47,000 Forráskód a C kód, amely ténylegesen írja fel. 610 00:41:47,000 --> 00:41:50,000 Tárgykód mit kap ki csenget. 611 00:41:50,000 --> 00:41:54,000 Ez a 0s és 1s, hogy bináris formátumban. 612 00:41:54,000 --> 00:41:59,000 Akkor mi történik, ha van egy csomó objektum fájlok, 613 00:41:59,000 --> 00:42:04,000 mondod összeállítása projekt vagy program, amely több forráskód fájlokat, 614 00:42:04,000 --> 00:42:09,000 amelyeket megegyezés kapnak. c fájl kiterjesztését. 615 00:42:09,000 --> 00:42:13,000 Ezért van caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Ha írsz Java programok megadja nekik a kiterjesztést. Java. 617 00:42:18,000 --> 00:42:24,000 Python programok kiterjesztése. Py gyakran. 618 00:42:24,000 --> 00:42:26,000 >> Miután több. C fájlokat, akkor fordítani őket. 619 00:42:26,000 --> 00:42:29,000 Zengés kiköpi mindezt bináris szemét. 620 00:42:29,000 --> 00:42:33,000 Akkor azért, mert csak szeretné 1 program 621 00:42:33,000 --> 00:42:37,000 megvan a linker linkre mindezek objektum fájlokkal együtt 622 00:42:37,000 --> 00:42:40,000 ba 1 futtatható fájlt. 623 00:42:40,000 --> 00:42:45,000 Ez is, hogy mi történik, amikor a CS50 könyvtárat, pl. 624 00:42:45,000 --> 00:42:50,000 A CS50 könyvtár mind ez, mind. H header file 625 00:42:50,000 --> 00:42:53,000 , hogy olvassa el, hogy a # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 És akkor ez is egy speciális bináris könyvtárfájlt 627 00:42:58,000 --> 00:43:02,000 hogy a már lefordított amely 0s és 1s, 628 00:43:02,000 --> 00:43:08,000 és hogy a-l flag, tehát ha megyünk vissza a Terek, nézünk nagyon gyorsan 629 00:43:08,000 --> 00:43:11,000 , hogy mi folyik itt, amikor nézzük a csengés parancsot, 630 00:43:11,000 --> 00:43:15,000 mi van ez a mi forráskód fájl itt. 631 00:43:15,000 --> 00:43:18,000 Ezek egy rakás fordító zászlók. 632 00:43:18,000 --> 00:43:22,000 És aztán a legvégén, ezek-l zászlók linkre, 633 00:43:22,000 --> 00:43:30,000 A tényleges bináris fájlokat e 2 könyvtárak, a CS50 könyvtár, majd a matematikai könyvtár. 634 00:43:30,000 --> 00:43:35,000 >> Megértése minden típusú fájlokat "cél 635 00:43:35,000 --> 00:43:38,000 A fordítási folyamat az, amit akar majd, hogy képes legyen 636 00:43:38,000 --> 00:43:43,000 azt legalább egy magas szintű áttekintését. 637 00:43:43,000 --> 00:43:46,000 Forráskód bejön objektum kódja jön ki. 638 00:43:46,000 --> 00:43:53,000 Tárgykód fájlok összeköti, és kapsz egy gyönyörű, futtatható fájlt. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 Ez is, ahol lehet kapni hibákat több ponton 641 00:43:58,000 --> 00:44:00,000 A fordítási folyamat. 642 00:44:00,000 --> 00:44:04,000 Ez az, ahol például, ha Ön ezt összekötő zászló, 643 00:44:04,000 --> 00:44:10,000 A CS50 zászló, és kihagyja azt a közös, vagy ha éppen fut a kód, 644 00:44:10,000 --> 00:44:13,000 ez az, ahol kapsz egy hiba az összekötő szakasz, 645 00:44:13,000 --> 00:44:18,000 és a linker fogja mondani, hogy "Hé, te hívott függvény getString 646 00:44:18,000 --> 00:44:20,000 ez a CS50 könyvtárban. " 647 00:44:20,000 --> 00:44:25,000 "Azt mondtad, ez volt a CS50 könyvtár, és nem találom a kódot is." 648 00:44:25,000 --> 00:44:28,000 Ez az, ahol be kell kapcsolni azt, és ez külön 649 00:44:28,000 --> 00:44:33,000 egy fordító hibát, mert a fordító nézi szintaktikai és ilyesmi. 650 00:44:33,000 --> 00:44:38,000 Jó tudni, hogy mi folyik itt, amikor. 651 00:44:38,000 --> 00:44:42,000 >> Más dolog tudni. 652 00:44:42,000 --> 00:44:49,000 Azt mondanám, akkor feltétlenül szeretnénk, hogy egy pillantást a rövid szóló typecasting végzett Jordan 653 00:44:49,000 --> 00:44:55,000 megérteni, hogy mit ints vannak a motorháztető, 654 00:44:55,000 --> 00:44:58,000 milyen karakterek vannak a háttérben. 655 00:44:58,000 --> 00:45:02,000 Amikor beszélünk ASCII, és ténylegesen nézd meg az ASCII táblázat 656 00:45:02,000 --> 00:45:07,000 hogy mit csinál ad nekünk a motorháztető alatt megjelenés 657 00:45:07,000 --> 00:45:13,000 meg, hogy a számítógép valóban képviseli a tőke A. és a karakteres, 7 658 00:45:13,000 --> 00:45:17,000 és egy vessző és egy kérdőjel. 659 00:45:17,000 --> 00:45:20,000 A számítógép is különleges módon képviselni 660 00:45:20,000 --> 00:45:23,000 A 7-es szám, mint egy egész. 661 00:45:23,000 --> 00:45:27,000 Ez egy különleges módon képviseli a 7-es szám, mint egy lebegőpontos szám, 662 00:45:27,000 --> 00:45:29,000 és ezek nagyon eltérőek. 663 00:45:29,000 --> 00:45:32,000 Typecasting hogy hogyan mondod el a számítógép "Hé, azt akarom, hogy konvertálni 664 00:45:32,000 --> 00:45:37,000 egyik képviselet másik ábrázolás. " 665 00:45:37,000 --> 00:45:40,000 Miért nem veszünk egy pillantást. 666 00:45:40,000 --> 00:45:44,000 >> Azt is vessen egy pillantást a rövid a könyvtárak, valamint a rövid a fordító. 667 00:45:44,000 --> 00:45:47,000 Azok beszélni a folyamat összeállítása, 668 00:45:47,000 --> 00:45:53,000 mi az a könyvtár, és menj át ezek közül néhány kérdésre, hogy lehet, hogy kérdezte. 669 00:45:53,000 --> 00:45:55,000 Kérdések 1. hét anyagot? 670 00:45:55,000 --> 00:46:03,000 Vannak olyan témák itt, hogy úgy tűnik ijesztőnek szeretné fedezni? 671 00:46:03,000 --> 00:46:07,000 Próbálom fújni keresztül a legtöbb ilyen korábbi témák, hogy mi lehet jutni 672 00:46:07,000 --> 00:46:13,000 mutatók és csinál egy kis rekurzió. 673 00:46:13,000 --> 00:46:15,000 Gondolatok? 674 00:46:15,000 --> 00:46:19,000 Bármi fedezésére? 675 00:46:19,000 --> 00:46:21,000 Itt az ideje egy kis csokit talán? 676 00:46:21,000 --> 00:46:23,000 Ti dolgoznak rajta. 677 00:46:23,000 --> 00:46:26,000 Fogom tartani kortyolgatva én kávét. 678 00:46:26,000 --> 00:46:31,000 2. hét. 679 00:46:31,000 --> 00:46:34,000 Jó ötlet, jó hívást. 680 00:46:34,000 --> 00:46:38,000 A 2. héten beszéltünk egy kicsit többet funkciókat. 681 00:46:38,000 --> 00:46:43,000 >> Az első néhány probléma készletek mi nem igazán írjon semmilyen funkciót egyáltalán 682 00:46:43,000 --> 00:46:45,000 kivételével, amelyek funkciója? 683 00:46:45,000 --> 00:46:47,000 [Student] Main. >> Main, pontosan. 684 00:46:47,000 --> 00:46:51,000 És láttuk, a különböző jelmezek fő visel. 685 00:46:51,000 --> 00:46:54,000 Itt az egyetlen, amelyben nincsenek argumentumai, 686 00:46:54,000 --> 00:46:58,000 és azt mondjuk void között a zárójelben 687 00:46:58,000 --> 00:47:01,000 és akkor ott van a másik, ahol akarok venni parancssori argumentumok, 688 00:47:01,000 --> 00:47:08,000 és ahogy láttam, hogy ott van, int argc és string argv tömb 689 00:47:08,000 --> 00:47:13,000 vagy most, hogy valóban ki vannak téve string az char *, hogy 690 00:47:13,000 --> 00:47:20,000 fogjuk írjuk azt char * argv majd zárójelben. 691 00:47:20,000 --> 00:47:22,000 A probléma Set 3, srácok látott egy csomó funkciók, 692 00:47:22,000 --> 00:47:27,000 és végre egy csomó funkció, dolgozzon, felnéz, tülekedés. 693 00:47:27,000 --> 00:47:31,000 A prototípus minden írásbeli ott van. 694 00:47:31,000 --> 00:47:33,000 >> Amit akartam beszélni itt funkciókkal nagyon gyorsan 695 00:47:33,000 --> 00:47:38,000 az, hogy van 3 részből őket, amikor írsz egy függvényt. 696 00:47:38,000 --> 00:47:43,000 Meg kell adni a visszatérési típusát a funkciót. 697 00:47:43,000 --> 00:47:46,000 Meg kell adnia egy nevet a funkciót, majd meg kell adnia 698 00:47:46,000 --> 00:47:51,000 a paraméterek listája vagy a paraméter listában. 699 00:47:51,000 --> 00:47:57,000 Például, ha én, hogy írjon egy funkciót összefoglalni egy csomó egészek 700 00:47:57,000 --> 00:48:03,000 , majd visszatér hozzám az összeg, hogy mi lenne a visszatérési típus 701 00:48:03,000 --> 00:48:06,000 ha akartam összefoglalni egész, majd vissza az összeget? 702 00:48:06,000 --> 00:48:12,000 Ezután a nevét a funkciót. 703 00:48:12,000 --> 00:48:27,000 Ha megy előre, és levelet, zöld, ez a rész a visszatérési típus. 704 00:48:27,000 --> 00:48:34,000 Ez a rész a név. 705 00:48:34,000 --> 00:48:40,000 És akkor zárójelbe 706 00:48:40,000 --> 00:48:46,000 ahol adok az érveket, 707 00:48:46,000 --> 00:48:56,000 gyakran rövidítve args, néha params a paraméterek. 708 00:48:56,000 --> 00:49:00,000 És ha van, akkor csak meg az egyik. 709 00:49:00,000 --> 00:49:06,000 Ha több akkor külön mindegyik vesszővel. 710 00:49:06,000 --> 00:49:13,000 És minden paraméter adod 2 dolog, amelyek, Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Meg kell adni a típusát, majd a nevet. 712 00:49:18,000 --> 00:49:21,000 És akkor a nevét, és a név az a név, hogy fogsz használni 713 00:49:21,000 --> 00:49:25,000 hivatkozni ez az érv összegén belül funkciót, 714 00:49:25,000 --> 00:49:27,000 a funkció, amelyet éppen ír. 715 00:49:27,000 --> 00:49:32,000 >> Nem kell a-például, ha megyek Összefoglalva, 716 00:49:32,000 --> 00:49:41,000 mondjuk egy sor egész-Majd do int tömb, 717 00:49:41,000 --> 00:49:46,000 és adok magamnak néhány kapcsos zárójelek ott- 718 00:49:46,000 --> 00:49:51,000 akkor, amikor elmegyek egy tömb az összeg függvény 719 00:49:51,000 --> 00:49:55,000 Azt adja át az első helyzetben a paraméterek listája. 720 00:49:55,000 --> 00:49:59,000 De a tömböt, hogy igazolványt, nem kell, hogy legyen a neve arr. 721 00:49:59,000 --> 00:50:07,000 ANL lesz, hogyan, nézze meg ezt az érvet a szervezetben a funkciót. 722 00:50:07,000 --> 00:50:10,000 A másik dolog, hogy meg kell figyelembe venni, 723 00:50:10,000 --> 00:50:14,000 és ez némileg eltér funkciókat, de azt hiszem, hogy ez egy fontos pont, 724 00:50:14,000 --> 00:50:20,000 az, hogy a C-ben, amikor írok egy függvényt, mint ez 725 00:50:20,000 --> 00:50:29,000 honnan tudom, hogy hány elem van ebben a tömbben? 726 00:50:29,000 --> 00:50:31,000 Ez némileg egy beugratós kérdés. 727 00:50:31,000 --> 00:50:35,000 Beszéltünk erről egy kicsit a múlt heti részben. 728 00:50:35,000 --> 00:50:40,000 Honnan tudom, hogy az elemek száma belsejében egy tömb C? 729 00:50:40,000 --> 00:50:44,000 Van-e mód? 730 00:50:44,000 --> 00:50:49,000 >> Kiderül, hogy nincs mód tudni. 731 00:50:49,000 --> 00:50:52,000 Meg kell adnod azt külön-külön. 732 00:50:52,000 --> 00:50:55,000 Van egy trükk, amit tehetünk 733 00:50:55,000 --> 00:51:00,000 ha az ugyanazt a funkciót, amely a tömbben nyilvánították, 734 00:51:00,000 --> 00:51:04,000 és te dolgozik egy stack tömb. 735 00:51:04,000 --> 00:51:06,000 De ez csak akkor működik, ha az ugyanazt a funkciót. 736 00:51:06,000 --> 00:51:09,000 Miután át egy tömböt egy másik funkciót vagy ha már bejelentett egy tömb 737 00:51:09,000 --> 00:51:12,000 és tedd tömb a halom, amit használt malloc 738 00:51:12,000 --> 00:51:15,000  és ez a fajta dolog, akkor valamennyi fogadás ki van kapcsolva. 739 00:51:15,000 --> 00:51:18,000 Akkor valójában átadni körül 740 00:51:18,000 --> 00:51:21,000 egy különleges érv vagy egy másik paramétert 741 00:51:21,000 --> 00:51:23,000 mondani, milyen nagy a tömb. 742 00:51:23,000 --> 00:51:28,000 Ebben az esetben, azt akarom, hogy használd a vesszőt-Sajnálom, ez megy ki a képernyőn itt- 743 00:51:28,000 --> 00:51:32,000 és én át egy másik érvet 744 00:51:32,000 --> 00:51:40,000  és hívja meg int len ​​a hosszát. 745 00:51:40,000 --> 00:51:44,000 >> Egy dolog, hogy esetleg jön a kvíz 746 00:51:44,000 --> 00:51:49,000 azt kéri, hogy írjon, vagy végre egy adott funkció nevezett valamit. 747 00:51:49,000 --> 00:51:54,000 Ha nem adja meg a prototípus, így ezt az egészet itt, 748 00:51:54,000 --> 00:51:58,000 ez az egész káosz nevezzük a függvény nyilatkozatot vagy a függvény prototípus, 749 00:51:58,000 --> 00:52:01,000 ez az egyik első dolog, akkor szeretné köröm le, ha ez nem adott 750 00:52:01,000 --> 00:52:03,000 az Ön rögtön a kvíz. 751 00:52:03,000 --> 00:52:06,000 A másik trükk Megtanultam, hogy a 752 00:52:06,000 --> 00:52:11,000 azt mondom, nem kapsz egy prototípus a funkciót, és azt mondjuk: "Hé, neked kell írni." 753 00:52:11,000 --> 00:52:16,000 Bent a kapcsos zárójelek, hogy van a kvíz 754 00:52:16,000 --> 00:52:20,000 ha azt veszi észre, hogy van egy visszatérési típusa és azt tapasztalja, hogy a visszatérési típus 755 00:52:20,000 --> 00:52:25,000 van valami más, mint üres, ami azt jelenti, hogy a függvény nem ad vissza semmit, 756 00:52:25,000 --> 00:52:28,000 majd az egyik dolog, amit feltétlenül akarok a levelet 757 00:52:28,000 --> 00:52:33,000 valamiféle return utasítás legvégén a funkciót. 758 00:52:33,000 --> 00:52:40,000 Return, és ebben az esetben, akkor tesz egy üres, mert azt akarjuk, hogy töltse ki az üres. 759 00:52:40,000 --> 00:52:44,000 De ez lesz gondolsz a helyes utat, hogy hogyan fogom megközelíteni ezt a problémát? 760 00:52:44,000 --> 00:52:49,000 És ez emlékezteti Önt fogsz kell vissza értéket 761 00:52:49,000 --> 00:52:51,000 a hívó a funkciót. 762 00:52:51,000 --> 00:52:54,000 >> Aha. >> [Student] e stílust kell alkalmazni, ha írunk kódot a kvíz? 763 00:52:54,000 --> 00:52:58,000 Mint például a behúzás és ilyesmi? >> [Student] Igen. 764 00:52:58,000 --> 00:53:00,000 Nem, nem annyira. 765 00:53:00,000 --> 00:53:09,000 Azt gondolom, hogy sok-e olyasmi, amit majd kifejteni a teszt napján, 766 00:53:09,000 --> 00:53:15,000 de általában aggódni # tartalmaz és ez a fajta dolog, ez a fajta külső. 767 00:53:15,000 --> 00:53:17,000 [Student] van szüksége a hozzászóláshoz kézzel írt kódot? 768 00:53:17,000 --> 00:53:19,000 Szüksége van, hogy észrevételeket a kézírásos kódot? 769 00:53:19,000 --> 00:53:24,000 Kommentálva mindig jó, ha aggódsz részlegesen elismerheti 770 00:53:24,000 --> 00:53:29,000 vagy szeretne kommunikálni a szándék a gréder. 771 00:53:29,000 --> 00:53:33,000 De én ismét tisztázni fogja a kvíz magát, és a kvíz napon, 772 00:53:33,000 --> 00:53:39,000 de én nem hiszem, hogy akkor kell szólhatnak hozzá, nem. 773 00:53:39,000 --> 00:53:42,000 Általában nem, de ez határozottan az a fajta dolog, ha 774 00:53:42,000 --> 00:53:45,000 tud kommunikálni a szándék, mint a "Hé, ez az, ahol megyek vele." 775 00:53:45,000 --> 00:53:49,000 És néha, amely segíthet a részleges hitel. 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] Mi a különbség a kimondó, mondjuk, int lang 779 00:53:56,000 --> 00:54:03,000 Az érvek, illetve paramétereinek versus nyilvánító változó a funkció? 780 00:54:03,000 --> 00:54:05,000 Wow, kávé lement a légcső. 781 00:54:05,000 --> 00:54:07,000 [Basil] Like amelyet dolgokat akarunk létrehozni érveket. 782 00:54:07,000 --> 00:54:09,000 Igen, ez egy nagy kérdés. 783 00:54:09,000 --> 00:54:11,000 Hogyan válassza ki milyen dolgokat szeretne tenni az érveket 784 00:54:11,000 --> 00:54:17,000 szemben milyen dolgokat kell tennie belsejében a funkció? 785 00:54:17,000 --> 00:54:24,000 Ebben az esetben szereplő mindkét argumentumként 786 00:54:24,000 --> 00:54:29,000 mert ők valamit, hogy aki használni fogja az összeget funkció 787 00:54:29,000 --> 00:54:32,000 meg kell határoznia azokat a dolgokat. 788 00:54:32,000 --> 00:54:35,000 >> Az összeg függvény, mint beszélgettünk, nem tudhatja, 789 00:54:35,000 --> 00:54:40,000 mekkora a tömb nem lesz annak hívó vagy akárki használja az összeg funkciót. 790 00:54:40,000 --> 00:54:44,000 Ez nem lehet tudni, milyen nagy, hogy a tömb. 791 00:54:44,000 --> 00:54:48,000 Az ok, amiért át e hosszon itt érvként 792 00:54:48,000 --> 00:54:51,000 azért van, mert ez valami, hogy mi alapvetően mondja a hívó függvény, 793 00:54:51,000 --> 00:54:55,000 aki használni fogja az összeget funkció, "Hé, nem csak meg kell adni nekünk egy tömb 794 00:54:55,000 --> 00:54:59,000 A ints, akkor is el kell mondani, hogy mekkora a tömb, amit adtál nekünk. " 795 00:54:59,000 --> 00:55:03,000 [Basil] Ezek lesznek mindketten parancssori argumentumok? 796 00:55:03,000 --> 00:55:06,000 Nem, ezek a tényleges érvek, hogy akkor adja át a funkciót. 797 00:55:06,000 --> 00:55:10,000 >> Hadd tegyek egy új oldalt itt. 798 00:55:10,000 --> 00:55:13,000 [Basil] Mint neve is át- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Ha van int main (void), 800 00:55:24,000 --> 00:55:27,000 és fogok tenni a saját return 0 ide az alján, 801 00:55:27,000 --> 00:55:31,000 és mondd akarom hívni az összeget funkciót. 802 00:55:31,000 --> 00:55:42,000 Azt akarom mondani, int x = sum (); 803 00:55:42,000 --> 00:55:46,000 Ahhoz, hogy a SZUM függvény azt át kell adni mind a tömbben, hogy szeretnék összefoglalni 804 00:55:46,000 --> 00:55:51,000 és a hossza a tömb, tehát ez az, ahol 805 00:55:51,000 --> 00:55:54,000 feltételezve, hogy volt egy sor ints, 806 00:55:54,000 --> 00:56:12,000 mondjuk Volt int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 fajta felhasználása feltört fel szintaxis ott, 808 00:56:16,000 --> 00:56:21,000 akkor tenném nyelven összeg szeretnék átadni 809 00:56:21,000 --> 00:56:27,000 mind numbaz és a 3-as szám 810 00:56:27,000 --> 00:56:30,000 hogy elmondja az összeg funkció "Oké, a tömb Azt akarom összefoglalni." 811 00:56:30,000 --> 00:56:34,000 "Itt van a mérete." 812 00:56:34,000 --> 00:56:39,000 Van ennek értelme? Ez azt választ a kérdésére? 813 00:56:39,000 --> 00:56:42,000 >> Sok szempontból ez párhuzamos mit csinálunk a fő 814 00:56:42,000 --> 00:56:44,000 amikor már a parancssori argumentumok. 815 00:56:44,000 --> 00:56:47,000 A program, mint Caesar titkosítást, például azt, hogy szükség van 816 00:56:47,000 --> 00:56:53,000 parancssori argumentumok nem lenne képes tenni semmit. 817 00:56:53,000 --> 00:56:57,000 Valójában nem tudom, hogyan kell titkosítani, ha nem mondja meg, mit kulcs használata 818 00:56:57,000 --> 00:57:03,000 vagy ha nem mondja meg, mit karakterlánc akartál titkosítani. 819 00:57:03,000 --> 00:57:08,000 Kéri a bemenet, ez az, ahol megvan 2 különböző mechanizmusok 820 00:57:08,000 --> 00:57:14,000 meghozatalának bemenet a felhasználó, az olyan információkat a felhasználó elől. 821 00:57:14,000 --> 00:57:19,000 A probléma szett 1 láttuk ezt getInt, getString, getFloat módja 822 00:57:19,000 --> 00:57:26,000 megkérdezése a bemeneti, és hogy hívják a standard input stream. 823 00:57:26,000 --> 00:57:28,000 Ez kicsit más. 824 00:57:28,000 --> 00:57:31,000 Ez valami olyasmi, amit tehetünk, egy időben, szemben a 825 00:57:31,000 --> 00:57:35,000 ha hivatkozhat a program, amikor elindítja a program fut. 826 00:57:35,000 --> 00:57:41,000 A parancssori argumentumok minden van megadva, amikor elindítja a programot futás. 827 00:57:41,000 --> 00:57:47,000 Már összekeverjük a két említett. 828 00:57:47,000 --> 00:57:52,000 Mikor használjuk érvek egy funkcióhoz, ez ugyanúgy, mint parancssori argumentumok a fő. 829 00:57:52,000 --> 00:57:56,000 Ez az, amikor élni a funkciót meg kell mondani, hogy 830 00:57:56,000 --> 00:58:05,000 hogy pontosan mi szükséges ahhoz, hogy a feladatai ellátásához. 831 00:58:05,000 --> 00:58:08,000 A másik jó dolog, hogy nézd meg, és én hagyom, hogy nézd meg a szabadidődben, 832 00:58:08,000 --> 00:58:11,000 és ez borította a kvíz-volt ez a fogalom hatálya alól 833 00:58:11,000 --> 00:58:15,000 és a helyi változók versus globális változók. 834 00:58:15,000 --> 00:58:18,000 Ne figyeljen erre. 835 00:58:18,000 --> 00:58:23,000 >> Most, hogy megvagyunk e más dolgok, 836 00:58:23,000 --> 00:58:27,000 A 3. hét kezdtünk beszélni keresés és válogatás. 837 00:58:27,000 --> 00:58:32,000 Keresés és rendezés, legalábbis CS50, 838 00:58:32,000 --> 00:58:39,000 nagyon bevezetés néhány a több elméleti része a számítógép-tudomány. 839 00:58:39,000 --> 00:58:42,000 A probléma a keresést, a probléma a válogatás 840 00:58:42,000 --> 00:58:46,000 nagy, kanonikus problémák. 841 00:58:46,000 --> 00:58:52,000 Hogyan lehet megtalálni egy adott számot egy sor milliárd egész? 842 00:58:52,000 --> 00:58:55,000 Hogyan lehet megtalálni egy adott nevet belsejében egy telefonkönyv 843 00:58:55,000 --> 00:58:59,000 ez tárolt laptop? 844 00:58:59,000 --> 00:59:04,000 És így bevezetni ezt a fogalmat az aszimptotikus futási idő 845 00:59:04,000 --> 00:59:11,000 igazán számszerűsíteni, hogy mennyi ideig, milyen nehéz ilyen probléma van, 846 00:59:11,000 --> 00:59:14,000 meddig vesznek megoldani. 847 00:59:14,000 --> 00:59:20,000 Ebben, azt hiszem, 2011-es kvíz van egy probléma, hogy azt hiszem, érdemi 848 00:59:20,000 --> 00:59:27,000 amely nagyon gyorsan, ami ez, problémamegoldás 12. 849 00:59:27,000 --> 00:59:32,000 Ó nem, ez az Omega. 850 00:59:32,000 --> 00:59:41,000 >> Itt beszélünk a lehető leggyorsabb futási idő 851 00:59:41,000 --> 00:59:46,000 egy adott algoritmus, majd a lehető leglassabb üzemidejét. 852 00:59:46,000 --> 00:59:52,000 Ez az Omega és az O tényleg csak hivatkozások. 853 00:59:52,000 --> 00:59:55,000 Ők jelölési parancsikonokat mondván: 854 00:59:55,000 --> 00:59:59,000 milyen gyorsan a lehető legjobb ügy algoritmusunk run, 855 00:59:59,000 --> 01:00:06,000 és milyen lassú a legrosszabb esetben is a mi algoritmus futni? 856 01:00:06,000 --> 01:00:10,000 Csináljuk egy pár ilyen, és ezeket is kiterjed 857 01:00:10,000 --> 01:00:13,000 A rövid az aszimptotikus jelölést, amelyet én nagyon ajánlom. 858 01:00:13,000 --> 01:00:17,000 Jackson volt egy igazán jó munkát végzett. 859 01:00:17,000 --> 01:00:23,000 A bináris keresés, beszélünk bináris keresés mint egy algoritmus, 860 01:00:23,000 --> 01:00:28,000 és mi általában beszélni róla szempontjából a nagy O. 861 01:00:28,000 --> 01:00:30,000 Mi az a nagy O? 862 01:00:30,000 --> 01:00:34,000 Mi az a leghosszabb futási idő a bináris keresés? 863 01:00:34,000 --> 01:00:36,000 [Student] N ²? 864 01:00:36,000 --> 01:00:41,000 Bezárás, azt hiszem, hasonló. 865 01:00:41,000 --> 01:00:43,000 Ez sokkal gyorsabb, mint ezt. 866 01:00:43,000 --> 01:00:45,000 [Student] Binary? >> Ja, bináris keresés. 867 01:00:45,000 --> 01:00:47,000 [Student] Ez log n. 868 01:00:47,000 --> 01:00:49,000 Log n, így mit log n jelent? 869 01:00:49,000 --> 01:00:51,000 Ez felezi meg minden iteráció. 870 01:00:51,000 --> 01:00:56,000 Pontosan, így a lehető leglassabb esetben, 871 01:00:56,000 --> 01:01:00,000 azt mondják, ha van egy rendezett tömbben 872 01:01:00,000 --> 01:01:08,000 egy millió egészek, és a szám, amit keres 873 01:01:08,000 --> 01:01:14,000 az vagy az első elem a tömbben, vagy az utolsó elem a tömbben. 874 01:01:14,000 --> 01:01:18,000 Ne feledje, hogy a bináris keresés algoritmus működik nézi most a középső elem, 875 01:01:18,000 --> 01:01:21,000 látta, ha ez a meccs, amit keres. 876 01:01:21,000 --> 01:01:23,000 Ha igen, akkor nagy, megtalálta. 877 01:01:23,000 --> 01:01:27,000 >> A legjobb esetben, hogy milyen gyorsan működik a bináris keresés futni? 878 01:01:27,000 --> 01:01:29,000 [Diákok] 1. 879 01:01:29,000 --> 01:01:32,000 1, ez az állandó idő, nagy O 1. Igen. 880 01:01:32,000 --> 01:01:36,000 [Diák] Nekem van egy kérdésem. Amikor azt mondod log n, érted képest 2-es alapú, ugye? 881 01:01:36,000 --> 01:01:40,000 Igen, úgy, hogy ez a másik dolog. 882 01:01:40,000 --> 01:01:44,000 Azt mondjuk log n, és azt hiszem, amikor én voltam a középiskolában 883 01:01:44,000 --> 01:01:48,000 Mindig is feltételezte, hogy log volt bázis 10. 884 01:01:48,000 --> 01:01:57,000 Igen, igen, jelentkezzen alap 2 tipikusan az, amit használ. 885 01:01:57,000 --> 01:02:02,000 Ismét megy vissza a bináris keresés, ha keres vagy 886 01:02:02,000 --> 01:02:05,000 az elem a legvégén, vagy az elemet a legelején, 887 01:02:05,000 --> 01:02:08,000 mert indul a közepén és akkor dobja 888 01:02:08,000 --> 01:02:13,000 melyik fele nem felel meg a kritériumoknak, amit keres, 889 01:02:13,000 --> 01:02:15,000 és megy a következő fél, és a következő félévben, és a következő félévben. 890 01:02:15,000 --> 01:02:19,000 Ha én keresem a legnagyobb elem a millió integer tömb 891 01:02:19,000 --> 01:02:25,000 Fogom felére ez legfeljebb log 1 millió alkalommal 892 01:02:25,000 --> 01:02:28,000 mielőtt véglegesen tesztelése és látom, hogy az elem keresem 893 01:02:28,000 --> 01:02:33,000 van a legnagyobb, vagy a legmagasabb index a tömb, 894 01:02:33,000 --> 01:02:38,000 és hogy lesz log n, jelentkezzen 1 millió alkalommal. 895 01:02:38,000 --> 01:02:40,000 >> Bubble sort. 896 01:02:40,000 --> 01:02:43,000 Srácok emlékszem a buborék rendezési algoritmus? 897 01:02:43,000 --> 01:02:47,000 Kevin, tudsz adni nekem egy gyors bedugni, hogy mi történt a buborék rendezési algoritmus? 898 01:02:47,000 --> 01:02:50,000 [Kevin] Alapvetően ez megy át mindent a listán. 899 01:02:50,000 --> 01:02:52,000 Úgy néz ki, az első kettő. 900 01:02:52,000 --> 01:02:55,000 Ha az első nagyobb, mint a második, hogy swap őket. 901 01:02:55,000 --> 01:02:58,000 Ezután összehasonlítja második és a harmadik, ugyanaz a dolog, swap, 902 01:02:58,000 --> 01:03:00,000 harmadik és negyedik, egészen. 903 01:03:00,000 --> 01:03:03,000 Nagyobb számok nyomon követi majd a végére. 904 01:03:03,000 --> 01:03:07,000 És miután azonban sok hurok kész. 905 01:03:07,000 --> 01:03:11,000 Pontosan, szóval mi Kevin azt mondta, hogy fogjuk nézni nagyobb szám 906 01:03:11,000 --> 01:03:15,000 buborék végéig a tömb. 907 01:03:15,000 --> 01:03:19,000 Például, nem bánja, séta nekünk ezt a példát, ha ez a tömb? 908 01:03:19,000 --> 01:03:21,000 [Kevin] You viszem 2 és 3. 909 01:03:21,000 --> 01:03:23,000 3 nagyobb, mint 2, ezért cserélni őket. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Jobb, ezért csere ezeket, és így kap 2, 3, 6, 4, és 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Ezután hasonlítsa össze a 3 és 6. 912 01:03:31,000 --> 01:03:33,000 3 kisebb, mint 6, így hagyjuk őket, 913 01:03:33,000 --> 01:03:37,000 és 6 és 4, akkor azt cserélni őket, mert a 4 kisebb, mint 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Rendben, tehát kapok 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] És 9 nagyobb mint 6, így hagyja. 916 01:03:46,000 --> 01:03:48,000 És mennék vissza az újra. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Am tettem ezen a ponton? >> [Kevin] Nem 918 01:03:50,000 --> 01:03:52,000 És miért nem vagyok kész ezen a ponton? 919 01:03:52,000 --> 01:03:54,000 Mert úgy néz ki, mint az én tömb rendezve. Én néztem rá. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Menj át újra, és győződjön meg róla, hogy nincs több swap 921 01:03:57,000 --> 01:04:00,000 mielőtt teljesen megáll. 922 01:04:00,000 --> 01:04:04,000 Pontosan, így meg kell, hogy megy keresztül, és győződjön meg arról, hogy nincsenek-ügyletek 923 01:04:04,000 --> 01:04:06,000 hogy tudod, hogy ezen a ponton. 924 01:04:06,000 --> 01:04:08,000 Ez tényleg csak a szerencsés, ahogy mondtad, hogy végül 925 01:04:08,000 --> 01:04:12,000 Csak kellene, hogy 1 áthaladnak és mi rendezve. 926 01:04:12,000 --> 01:04:16,000 De, hogy ezt az általános esetben akkor tényleg meg kell ezt újra és újra. 927 01:04:16,000 --> 01:04:20,000 És valóban, ez volt egy példát a lehető legjobb esetben, 928 01:04:20,000 --> 01:04:24,000 mint láttuk a problémát. 929 01:04:24,000 --> 01:04:28,000 Láttuk, hogy a lehető legjobb ügy n. 930 01:04:28,000 --> 01:04:32,000 Mentünk át a tömb 1 alkalommal. 931 01:04:32,000 --> 01:04:35,000 Mi az a lehető legrosszabb esetében ez az algoritmus? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 És mit jelent, hogy néz ki? Mi lenne egy tömböt úgy néz ki mint, hogy telne n ² idő? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [hallhatatlan] rendezve. 935 01:04:43,000 --> 01:04:51,000 Pontosan, úgyhogy ha lenne a tömb 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 1. A 9 lenne buborék egészen. 937 01:04:54,000 --> 01:04:59,000 Az elegyet 1 iteráció mi volna 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Majd a 7 lenne buborék fel, 6, 5, 2, 7, 9, és így tovább, és így tovább. 939 01:05:07,000 --> 01:05:13,000 >> Meg kéne, hogy menjen át az egész tömb n-szer, 940 01:05:13,000 --> 01:05:16,000 és akkor tényleg kap valamivel pontosabb, mint ez a 941 01:05:16,000 --> 01:05:23,000 mert egyszer már elköltözött a 9 egészen bele az utolsó lehetséges helyzetben 942 01:05:23,000 --> 01:05:26,000 tudjuk, hogy soha nem kell összehasonlítani ezt az elemet újra. 943 01:05:26,000 --> 01:05:29,000 Ha egyszer elkezdünk bugyogott a 7-ig 944 01:05:29,000 --> 01:05:35,000 tudjuk, hogy képes megállítani, ha a 7-igaza van, mielőtt a 9 945 01:05:35,000 --> 01:05:37,000 hiszen már összehasonlítottuk a 9 rá. 946 01:05:37,000 --> 01:05:46,000 Ha ezt olyan intelligens módon, ez nem igazán, azt hiszem, hogy sok időt. 947 01:05:46,000 --> 01:05:49,000 Nem fogod összehasonlítani az összes lehetséges [hallható] kombinációk 948 01:05:49,000 --> 01:05:55,000 minden egyes alkalommal, amikor megy keresztül minden iteráció. 949 01:05:55,000 --> 01:05:59,000 De mégis, amikor arról beszélünk, ezen felső határ azt mondjuk, hogy 950 01:05:59,000 --> 01:06:04,000 nézed n ² összehasonlítások végig. 951 01:06:04,000 --> 01:06:12,000 >> Menjünk vissza, és mivel kezdünk egy kicsit rövid idő alatt 952 01:06:12,000 --> 01:06:15,000 Azt mondanám, akkor feltétlenül menjen át a többi ebben a táblázatban, 953 01:06:15,000 --> 01:06:17,000 töltse ki mindent. 954 01:06:17,000 --> 01:06:20,000 Gondolj példák. Gondolj konkrét példák. 955 01:06:20,000 --> 01:06:22,000 Ez nagyon praktikus és hasznos csinálni. 956 01:06:22,000 --> 01:06:25,000 Rajzold ki. 957 01:06:25,000 --> 01:06:28,000 Ez a fajta tábla, mint te menj át a számítástechnikában 958 01:06:28,000 --> 01:06:32,000 akkor tényleg elkezd ismeri ezeket fejből. 959 01:06:32,000 --> 01:06:34,000 Ezek azok a kérdések kapsz interjúkat. 960 01:06:34,000 --> 01:06:36,000 Ezek olyan dolgok, hogy jó tudni, 961 01:06:36,000 --> 01:06:41,000 és arra gondolok, az él az esetekben valóban rájönni, hogyan kell gondolkodni 962 01:06:41,000 --> 01:06:45,000 tudva, hogy a buborék rendezheti a lehető legrosszabb tömb 963 01:06:45,000 --> 01:06:52,000 rendezni az, hogy az egyik, hogy ez fordított sorrendben. 964 01:06:52,000 --> 01:06:58,000 >> Mutatók. Beszéljünk egy kicsit a mutató. 965 01:06:58,000 --> 01:07:03,000 Az utolsó néhány perc van itt 966 01:07:03,000 --> 01:07:11,000 Tudom, hogy ez olyan dolog, együtt fájl I / O, hogy meglehetősen új. 967 01:07:11,000 --> 01:07:19,000 Amikor beszélünk mutató az oka akarunk beszélni mutatók 968 01:07:19,000 --> 01:07:24,000 azért van, mert az egyik, amikor dolgozunk C 969 01:07:24,000 --> 01:07:33,000 mi tényleg egy viszonylag alacsony szinten, mint a legtöbb modern programozási nyelv. 970 01:07:33,000 --> 01:07:38,000 Vagyunk valójában képesek manipulálni a változók a memóriában, 971 01:07:38,000 --> 01:07:43,000 kitalálni, hogy hol ők ténylegesen található a RAM. 972 01:07:43,000 --> 01:07:46,000 Miután elment, hogy az operációs rendszer osztályok meglátja 973 01:07:46,000 --> 01:07:48,000 , hogy ez megint csak egyfajta absztrakció. 974 01:07:48,000 --> 01:07:50,000 Ez valójában nem ez a helyzet. 975 01:07:50,000 --> 01:07:52,000 Megvan a virtuális memória, ami elrejti a részleteket tőlünk. 976 01:07:52,000 --> 01:07:58,000 >> De most akkor feltételezhető, hogy ha van egy program, 977 01:07:58,000 --> 01:08:02,000 Például, ha elindulnak a Caesar titkosító program- 978 01:08:02,000 --> 01:08:06,000 Majd kapcsolja vissza a iPad valóban gyors- 979 01:08:06,000 --> 01:08:12,000 hogy a kezdet kezdetén a program, ha van, mondjuk, 980 01:08:12,000 --> 01:08:15,000 4 gigabájt RAM a laptop, 981 01:08:15,000 --> 01:08:21,000 kapsz félre ezt a nagy darab, és hívjuk ezt a RAM. 982 01:08:21,000 --> 01:08:25,000 És kezdődik egy helyen fogunk hívni 0, 983 01:08:25,000 --> 01:08:30,000 és végződik egy hely, hívjuk 4 gigabyte. 984 01:08:30,000 --> 01:08:37,000 Én tényleg nem tud írni. Ember, mely csapkodott. 985 01:08:37,000 --> 01:08:40,000 Amikor a program végrehajtja 986 01:08:40,000 --> 01:08:44,000 Az operációs rendszer carves up RAM, 987 01:08:44,000 --> 01:08:51,000 és ez határozza meg a különböző szegmensek különböző részeit a program létét 988 01:08:51,000 --> 01:08:58,000 Le van ez a terület egyfajta senki földje. 989 01:08:58,000 --> 01:09:02,000 Amikor elmész egy kicsit távolabb van 990 01:09:02,000 --> 01:09:05,000 megvan valójában az a hely, ahol 991 01:09:05,000 --> 01:09:09,000 a kódot a program életében. 992 01:09:09,000 --> 01:09:13,000 Ez a tényleges bináris kód, hogy futtatható fájl ténylegesen lesz töltődik be a memóriába 993 01:09:13,000 --> 01:09:17,000 futtatásakor a program, és él a kód szegmensben. 994 01:09:17,000 --> 01:09:22,000 És ahogy a program végrehajtja a processzor nézi ezt a kódot részes 995 01:09:22,000 --> 01:09:24,000 hogy kitaláljuk, mi a következő utasítás? 996 01:09:24,000 --> 01:09:27,000 Mi a következő sort úgy kell végrehajtani? 997 01:09:27,000 --> 01:09:31,000 >> Van még egy adat szegmens, és ez az, ahol a karakterlánc konstansok 998 01:09:31,000 --> 01:09:34,000 kap tárolni, amit használ. 999 01:09:34,000 --> 01:09:42,000 Aztán feljebb van ez a hely az úgynevezett kupac. 1000 01:09:42,000 --> 01:09:46,000 Mi hozzáférés memória ott használatával malloc, 1001 01:09:46,000 --> 01:09:49,000 majd felé legtetején a program 1002 01:09:49,000 --> 01:09:52,000 ott van a verem, 1003 01:09:52,000 --> 01:09:57,000 és ez az, ahol már játszott a legtöbb elején. 1004 01:09:57,000 --> 01:09:59,000 Ez nem skála, vagy ilyesmi. 1005 01:09:59,000 --> 01:10:03,000 Sok ez nagyon gép függő, 1006 01:10:03,000 --> 01:10:10,000 operációs rendszer függő, de ez viszonylag mennyire dolgok chunked fel. 1007 01:10:10,000 --> 01:10:17,000 Ha fut a program, és állapítsa meg a változó nevű x- 1008 01:10:17,000 --> 01:10:27,000 Fogom felhívni a másik mezőben lent, és ez lesz a RAM is. 1009 01:10:27,000 --> 01:10:29,000 És fogok nézni. 1010 01:10:29,000 --> 01:10:34,000 Majd felhívni recés vonalak jelzik, ez csak egy kis része a RAM 1011 01:10:34,000 --> 01:10:38,000 és nem az egészet, ahogy felhívni a tetején. 1012 01:10:38,000 --> 01:10:43,000 >> Ha kijelentem, egy egész nevű változó x, 1013 01:10:43,000 --> 01:10:49,000 akkor, amit valójában kap egy leképezés 1014 01:10:49,000 --> 01:10:54,000 tárolt szimbóluma táblázatban a programom 1015 01:10:54,000 --> 01:11:00,000 amely összeköti a nevét x ennek a régiónak a memória, hogy én már kidolgozott 1016 01:11:00,000 --> 01:11:03,000 itt a függőleges vonalak. 1017 01:11:03,000 --> 01:11:08,000 Ha van egy sor kódot a saját programot, amely azt mondja, x = 7 1018 01:11:08,000 --> 01:11:15,000 A processzor tudja: "Ó, oké, tudom, hogy x él ezen a helyen a memóriában." 1019 01:11:15,000 --> 01:11:25,000 "Én megyek előre, és írjon a 7 ott." 1020 01:11:25,000 --> 01:11:28,000 Honnan tudja, hogy mi ez a helyszín van a memória? 1021 01:11:28,000 --> 01:11:30,000 Nos, ez mindezt fordítási időben. 1022 01:11:30,000 --> 01:11:34,000 A fordító gondoskodik felosztása, ahol az egyes változók menni 1023 01:11:34,000 --> 01:11:40,000 és létrehozhatna egy különleges mapping vagy inkább összeköti a pontokat 1024 01:11:40,000 --> 01:11:43,000 között, egy szimbólum, és hová megy, a változó neve 1025 01:11:43,000 --> 01:11:46,000 és ha ez fog élni a memóriában. 1026 01:11:46,000 --> 01:11:50,000 De kiderül, hogy mi is valójában elérheti a mi programokban is. 1027 01:11:50,000 --> 01:11:55,000 Ez lesz fontos, amikor elkezdünk beszélni néhány adatszerkezetek, 1028 01:11:55,000 --> 01:11:58,000 amelynek fogalmát, hogy fogunk bemutatni a későbbiekben. 1029 01:11:58,000 --> 01:12:09,000 >> De most, hogy mit tudok, hogy tudok létrehozni egy mutatót ezen a helyen, x. 1030 01:12:09,000 --> 01:12:12,000 Például, létrehozhat egy pointer változó. 1031 01:12:12,000 --> 01:12:16,000 Amikor létrehozunk egy pointer változót használjuk a csillag jelölést. 1032 01:12:16,000 --> 01:12:21,000 Ebben az esetben ez azt mondja, megyek, hogy hozzon létre egy mutatót int. 1033 01:12:21,000 --> 01:12:24,000 Ez a típus, mint bármely más. 1034 01:12:24,000 --> 01:12:27,000 Azt, hogy ez egy változó, mint y, 1035 01:12:27,000 --> 01:12:32,000 és aztán állítsa megegyezik a címet, egy címet. 1036 01:12:32,000 --> 01:12:38,000 Ebben az esetben tudjuk meg y pont az x 1037 01:12:38,000 --> 01:12:43,000 azáltal, hogy a címét x, amelyhez köze jel, 1038 01:12:43,000 --> 01:12:55,000 és aztán állítsa y mutasson rá. 1039 01:12:55,000 --> 01:12:59,000 Mi ez lényegében azt jelent, ha megvizsgáljuk a RAM 1040 01:12:59,000 --> 01:13:02,000 ez létrehoz egy külön változót. 1041 01:13:02,000 --> 01:13:04,000 Meg fog nevezni y, 1042 01:13:04,000 --> 01:13:06,000 és ha ezt a kódsort végrehajtja 1043 01:13:06,000 --> 01:13:13,000 ez valóban létre fog hozni egy kis mutató, amelyhez jellemzően készít, mint a nyíl, 1044 01:13:13,000 --> 01:13:15,000 és azt állítja, hogy pont y x. 1045 01:13:15,000 --> 01:13:17,000 Igen. 1046 01:13:17,000 --> 01:13:19,000 [Student] Ha x már a mutató, csak nem kíván 1047 01:13:19,000 --> 01:13:22,000 int * y = x ahelyett, hogy a jelet? 1048 01:13:22,000 --> 01:13:24,000 Igen. 1049 01:13:24,000 --> 01:13:27,000 Ha x már egy mutató, akkor készlet 2 mutató megegyezik egymással, 1050 01:13:27,000 --> 01:13:30,000 amely esetben y nem mutatnak x, 1051 01:13:30,000 --> 01:13:34,000 de utal arra, hogy bármi x mutat. 1052 01:13:34,000 --> 01:13:37,000 Sajnos kifogytunk az időből. 1053 01:13:37,000 --> 01:13:44,000 >> Azt mondanám, ezen a ponton, akkor erről beszélni offline, 1054 01:13:44,000 --> 01:13:49,000 de azt mondanám, kezdődjön meg a munka révén ezt a problémát, # 14. 1055 01:13:49,000 --> 01:13:53,000 Láthatjuk, van-e már egy kicsit töltve itt. 1056 01:13:53,000 --> 01:13:57,000 Láthatjuk, hogy amikor azt mondjuk, 2 mutatók, int * x * és y, 1057 01:13:57,000 --> 01:14:01,000 és vegye figyelembe, hogy a mutató a * mellett a változó volt valami, ami történt az elmúlt évben. 1058 01:14:01,000 --> 01:14:05,000 Kiderült, hogy ez hasonló ahhoz, amit csinálunk ebben az évben. 1059 01:14:05,000 --> 01:14:11,000 Nem számít, ha írsz a * amikor kimondja a mutatót. 1060 01:14:11,000 --> 01:14:17,000 De írt a * mellett a típus 1061 01:14:17,000 --> 01:14:24,000 mert ez egyértelművé teszi, hogy te nyilvánító pointer változó. 1062 01:14:24,000 --> 01:14:27,000 Láthatjuk, hogy kimondja a 2 mutatókat ad nekünk 2 doboz. 1063 01:14:27,000 --> 01:14:31,000 Itt, amikor elindultunk x egyenlő malloc 1064 01:14:31,000 --> 01:14:34,000 ez mit mond a hatályon kívül helyezését memória a kupac. 1065 01:14:34,000 --> 01:14:41,000 Ez a kis doboz itt, ebben a körben, található a kupac. 1066 01:14:41,000 --> 01:14:43,000 X mutat rá. 1067 01:14:43,000 --> 01:14:46,000 Ne feledje, hogy y még mindig nem mutat semmit. 1068 01:14:46,000 --> 01:14:50,000 Ahhoz, hogy memória tárolja a számot 42-ba x 1069 01:14:50,000 --> 01:14:55,000 szeretnénk használni, amit jelölést? 1070 01:14:55,000 --> 01:14:59,000 [Diák] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Pontosan, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 Ez azt jelenti, kövesse a nyilat, és dobja 42 ott. 1073 01:15:06,000 --> 01:15:09,000 Itt, ahol mi meg y és x már y mutat x. 1074 01:15:09,000 --> 01:15:13,000 Ez megint olyan, mint amit Kevin mondott, amikor elindultunk y egyenlő x-szel. 1075 01:15:13,000 --> 01:15:15,000 Y nem mutat x. 1076 01:15:15,000 --> 01:15:19,000 Inkább ez rámutatva, hogy milyen x mutat is. 1077 01:15:19,000 --> 01:15:24,000 >> És akkor végül ez utóbbi rovatban van 2 lehetséges dolog, amit tehettünk. 1078 01:15:24,000 --> 01:15:28,000 Az egyik, mondhatnánk * x = 13. 1079 01:15:28,000 --> 01:15:33,000 A másik dolog, mondhatnánk, Alex, tudod, mit tehetünk itt? 1080 01:15:33,000 --> 01:15:37,000 Mondhatjuk * x = 13 or- 1081 01:15:37,000 --> 01:15:41,000 [Student] Mondhatni int bármi. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Ha ezt nevezik int változót tudnánk csinálni. 1083 01:15:45,000 --> 01:15:49,000 Azt is mondhatnánk, * y = 13, mert ők mind mutat ugyanazon a helyen, 1084 01:15:49,000 --> 01:15:51,000 így lehet használni akár változó eljutni oda. 1085 01:15:51,000 --> 01:15:56,000 Aha. >> [Student] Mi lenne kinézni, ha csak mondjuk int x 13? 1086 01:15:56,000 --> 01:16:00,000 Ez lenne nyilvánításáról egy új változót nevű x, ami nem működik. 1087 01:16:00,000 --> 01:16:04,000 Mi volna az ütközést, mert kijelentette, x, hogy egy mutató itt. 1088 01:16:04,000 --> 01:16:10,000 [Student] Ha csak volt ez a kijelentés önmagában mi lenne kinézni szempontjából a kör? 1089 01:16:10,000 --> 01:16:14,000 Ha lenne x = 13, akkor mi volna egy dobozt, és ahelyett, hogy egy nyíl 1090 01:16:14,000 --> 01:16:16,000 jön ki a dobozból leszünk rajzolni, mint csak a 13. 1091 01:16:16,000 --> 01:16:19,000 [Student] A mezőbe. Oké. 1092 01:16:19,000 --> 01:16:24,000 >> Köszönöm, figyel, és sok szerencsét a Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]