1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Oddelek 4] [manj udoben] 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 >> V redu, dobrodošli nazaj k delu. 5 00:00:10,000 --> 00:00:13,000 V oddelku je ta teden bomo narediti nekaj stvari. 6 00:00:13,000 --> 00:00:17,000 Gremo v prvem nizu povzamem Problem 2, 7 00:00:17,000 --> 00:00:20,000 ki je Cezar in Vigenère problem set. 8 00:00:20,000 --> 00:00:23,000 In potem se bomo potapljali v pregled Quiz 0 9 00:00:23,000 --> 00:00:26,000 in preživite malo časa recapping kaj smo se pogovarjali o 10 00:00:26,000 --> 00:00:30,000 v vsakem od predavanj do sedaj, bomo tudi to nekaj težav 11 00:00:30,000 --> 00:00:32,000 od kvizov preteklega leta. 12 00:00:32,000 --> 00:00:36,000 Tako fantje imajo dober način za pripravo na to. 13 00:00:36,000 --> 00:00:40,000 >> Za začetek, sem škorenj ki gre gor nekaj dobrih rešitev 14 00:00:40,000 --> 00:00:45,000 Za prejšnjega niza problem, problem Set 2, v tem prostoru. 15 00:00:45,000 --> 00:00:48,000 Če vi vsi zadeti to povezavo, 16 00:00:48,000 --> 00:00:53,000 in če kliknete svoje ime in kliknite na moji prvi reviziji 17 00:00:53,000 --> 00:00:56,000 boste videli caesar.c, ki je točno tisto, kar sem iskal na. 18 00:00:56,000 --> 00:01:00,000 Pogovorimo se o tem res hitro. 19 00:01:00,000 --> 00:01:02,000 To je samo vzorec rešitev. 20 00:01:02,000 --> 00:01:05,000 To ni nujno najboljše rešitve. 21 00:01:05,000 --> 00:01:08,000 Obstaja veliko različnih načinov za napisati to, 22 00:01:08,000 --> 00:01:10,000 vendar pa obstaja nekaj stvari, ki sem jih želel izpostaviti 23 00:01:10,000 --> 00:01:13,000 da sem videl, ko sem razvrščanje, pogoste napake, ki mislim, da 24 00:01:13,000 --> 00:01:18,000 Ta rešitev pa zelo dobro delo z njimi. 25 00:01:18,000 --> 00:01:22,000 >> Prvi ima nekakšen komentar na vrhu glave. 26 00:01:22,000 --> 00:01:25,000 Na progah 1 do 7 vidite podrobnosti, 27 00:01:25,000 --> 00:01:28,000 Kaj natančno ta program počne. 28 00:01:28,000 --> 00:01:32,000 Dobro utečena praksa, ko pišete C kodo 29 00:01:32,000 --> 00:01:35,000 glede na to, če je vaš program vsebuje v eni datoteki ali 30 00:01:35,000 --> 00:01:38,000 ali je bilo razdeljeno na več datotek, da so neke vrste 31 00:01:38,000 --> 00:01:40,000 usmerjanje komentar na vrhu. 32 00:01:40,000 --> 00:01:43,000 To je tudi za ljudi, ki gredo ven in pisanje kode v resničnem svetu. 33 00:01:43,000 --> 00:01:47,000 To je, če oni dajo podatke o avtorskih pravicah. 34 00:01:47,000 --> 00:01:50,000 Spodaj # vključuje. 35 00:01:50,000 --> 00:01:55,000 On line 16 pa je to # define, ki jih bomo vrnili v zelo malo. 36 00:01:55,000 --> 00:01:59,000 In potem, ko je funkcija začne, ko se začne glavna, 37 00:01:59,000 --> 00:02:03,000 ker je ta program so vsi zajeti v enem samem delovanju 38 00:02:03,000 --> 00:02:09,000 Prva stvar, ki se zgodi, in to je zelo idiomatičen in tipično za C- 39 00:02:09,000 --> 00:02:14,000 da se v ukazni vrstici argumenti, je, da takoj preveri 40 00:02:14,000 --> 00:02:18,000 >> Za argument število, argc. 41 00:02:18,000 --> 00:02:24,000 Tukaj vidimo, da je ta program pričakuje 2 argumente natančno. 42 00:02:24,000 --> 00:02:27,000 Ne pozabite, to je to prva trditev, da je gradbena 1 43 00:02:27,000 --> 00:02:29,000 To je vedno ime programa, ki se je teči, 44 00:02:29,000 --> 00:02:31,000 ime izvedljive datoteke. 45 00:02:31,000 --> 00:02:36,000 In kaj je to ne preprečuje, da bi uporabnik pri izvajanju programa 46 00:02:36,000 --> 00:02:42,000 z bolj ali manj argumentov. 47 00:02:42,000 --> 00:02:44,000 Zato smo želeli preveriti za to takoj, ker 48 00:02:44,000 --> 00:02:52,000 ne moremo dejansko dostop do te argv paleto tukaj zanesljivo 49 00:02:52,000 --> 00:02:55,000 dokler ne bomo preverili, kako velik je. 50 00:02:55,000 --> 00:02:58,000 >> Ena od pogostih napak sem videl ljudi, ki bi takoj šel v 51 00:02:58,000 --> 00:03:01,000 in zgrabi argv [1]. 52 00:03:01,000 --> 00:03:06,000 Ti bi zgrabi osrednjo trditev iz tabele in storite, da preverim na to, 53 00:03:06,000 --> 00:03:11,000 in potem bi ti naredil test za argc, kot tudi naslednji test, 54 00:03:11,000 --> 00:03:16,000 ali je prvi argument je dejansko celo ob istem času, 55 00:03:16,000 --> 00:03:20,000 in da ne deluje, ker v primeru, da ni nobenih argumentov dobavljeno 56 00:03:20,000 --> 00:03:26,000 boš oprijemalne argument, da ni tam ali poskus, da zgrabite tisto, ki je ni bilo. 57 00:03:26,000 --> 00:03:29,000 >> Druga velika stvar, da opazite, da 58 00:03:29,000 --> 00:03:32,000 si vedno želeli natisniti neke vrste koristnih sporočilo o napaki 59 00:03:32,000 --> 00:03:34,000 za uporabnika usmerjati učence. 60 00:03:34,000 --> 00:03:37,000 Prepričan sem, da ste vsi zaganjali programe, kjer naenkrat se sesuje, 61 00:03:37,000 --> 00:03:41,000 in dobiš to smešno malo okno, ki pops gor in reče: 62 00:03:41,000 --> 00:03:44,000 nekaj hudo skrivnosten in morda vam daje kodo napake ali kaj podobnega 63 00:03:44,000 --> 00:03:47,000 da nima smisla. 64 00:03:47,000 --> 00:03:50,000 To je, če si res želite zagotoviti nekaj koristnih 65 00:03:50,000 --> 00:03:54,000 in usmerjena k uporabniku, tako da, ko jo vodijo gredo "Oh," face palm. 66 00:03:54,000 --> 00:03:58,000 "Točno vem, kaj naj storim. Vem, kako to popraviti." 67 00:03:58,000 --> 00:04:01,000 >> Če ne natisniti sporočilo, potem pa na koncu dejansko 68 00:04:01,000 --> 00:04:04,000 pri čemer si iti preveriti izvorno kodo 69 00:04:04,000 --> 00:04:07,000 ugotoviti, kaj je šlo narobe. 70 00:04:07,000 --> 00:04:11,000 Obstaja tudi nekaj časa, da boste uporabljali različne kode napak. 71 00:04:11,000 --> 00:04:14,000 Tukaj smo samo uporabil eno reči, da je bila napaka, 72 00:04:14,000 --> 00:04:16,000 je prišlo do napake, je prišlo do napake. 73 00:04:16,000 --> 00:04:20,000 Večji programi, programi, ki so pogosto imenovane drugih programov, 74 00:04:20,000 --> 00:04:25,000 se bo vrnil neke vrste posebnih kod napak v različnih scenarijih 75 00:04:25,000 --> 00:04:28,000 za programsko sporoči, kaj bi se sicer 76 00:04:28,000 --> 00:04:32,000 šele raba lep angleški sporočilo za. 77 00:04:32,000 --> 00:04:35,000 Kul. 78 00:04:35,000 --> 00:04:37,000 Ker delamo navzdol, lahko vidite, da potegnete ven ključ. 79 00:04:37,000 --> 00:04:40,000 Mi test, da vidim, če je ključ paše. 80 00:04:40,000 --> 00:04:42,000 Smo dobili sporočilo od uporabnika. 81 00:04:42,000 --> 00:04:46,000 Razlog, da to storite v to storijo, ko zanko in to je nekaj, kar bomo zajeli 82 00:04:46,000 --> 00:04:50,000 V malo, vendar se izkaže, da je, če vnesete nadzorno D 83 00:04:50,000 --> 00:04:54,000 ko prideš, da GetString poziv na terminalu 84 00:04:54,000 --> 00:04:59,000 Kaj v resnici pa je poslal poseben značaj 85 00:04:59,000 --> 00:05:01,000 za program. 86 00:05:01,000 --> 00:05:05,000 Imenuje se ELF ali na koncu datoteke značaja. 87 00:05:05,000 --> 00:05:08,000 In v tem primeru, se bo naše sporočilo niz je nična, 88 00:05:08,000 --> 00:05:14,000 tako da to ni nekaj, kar smo preverili v problem sama zastavila. 89 00:05:14,000 --> 00:05:17,000 >> Ampak, ko gremo naprej, zdaj, ko smo začeli govoriti o kazalci 90 00:05:17,000 --> 00:05:21,000 in dinamično dodeljevanje pomnilnika na kup, 91 00:05:21,000 --> 00:05:25,000 preverjanje za nično, ko imate funkcijo, ki bi lahko 92 00:05:25,000 --> 00:05:30,000 vrnitev nično kot vrednost, je nekaj, kar boste želeli priti v navado. 93 00:05:30,000 --> 00:05:33,000 To je tukaj predvsem za ilustracijo. 94 00:05:33,000 --> 00:05:36,000 Toda, ko boš videl GetString v prihodnosti, 95 00:05:36,000 --> 00:05:41,000 tako da iz problema Set 4 naprej, boste želeli obdržati to v mislih. 96 00:05:41,000 --> 00:05:44,000 Še enkrat, to ni vprašanje za Težava Set 3 bodisi ker smo ne zajema še. 97 00:05:44,000 --> 00:05:53,000 Na koncu smo prišli do tega dela, kjer pridemo do glavne zanke šifriranja, 98 00:05:53,000 --> 00:05:57,000 in obstaja nekaj stvari, ki se dogajajo tukaj. 99 00:05:57,000 --> 00:06:02,000 Najprej smo Ponovil skozi celoten niz sporočil sama. 100 00:06:02,000 --> 00:06:07,000 Tukaj smo ohranili strlen klic v stanju, 101 00:06:07,000 --> 00:06:12,000 ki več vas je opozoril, ni odličen način, da gredo. 102 00:06:12,000 --> 00:06:15,000 Izkazalo se je, v tem primeru je to tudi ni veliko, 103 00:06:15,000 --> 00:06:20,000 deloma zato, ker smo spreminjanje vsebine samega sporočila 104 00:06:20,000 --> 00:06:27,000 znotraj zanke for, tako da če imamo sporočilo, ki je 10 znakov, 105 00:06:27,000 --> 00:06:32,000 prvič smo začeli, da bodo za zanko strlen vrne kaj? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Ampak, če bomo potem spremeniti sporočilo, da smo spremeniti svoje 5. značaj, 108 00:06:40,000 --> 00:06:46,000 in vržemo v \ 0 značaja v 5. mesto, 109 00:06:46,000 --> 00:06:49,000 na naslednji iteraciji strlen (sporočilo) ne bo vrnil, kar je storil 110 00:06:49,000 --> 00:06:52,000 zelo prvič smo poudarili, 111 00:06:52,000 --> 00:06:56,000 ampak bo namesto tega vrne 5, ker smo metali v tej null terminator, 112 00:06:56,000 --> 00:06:59,000 in je opredeljena v nizu je dolžina 113 00:06:59,000 --> 00:07:03,000 po stališču te \ 0. 114 00:07:03,000 --> 00:07:09,000 V tem primeru je to odličen način, da gredo, ker smo to spremembo na mestu. 115 00:07:09,000 --> 00:07:13,000 Ampak ste opazili, da je to pravzaprav presenetljivo preprosta za šifriranje 116 00:07:13,000 --> 00:07:16,000 če lahko dobite matematika pravilna. 117 00:07:16,000 --> 00:07:19,000 Vse kar je potrebno je, da se preveri, ali je pismo, ki si ogleduje 118 00:07:19,000 --> 00:07:21,000 je velika črka ali male. 119 00:07:21,000 --> 00:07:24,000 >> Razlog, da imamo le preveriti za to in nimamo za preverjanje 120 00:07:24,000 --> 00:07:27,000 je alfa primer zato, ker 121 00:07:27,000 --> 00:07:30,000 Če je znak velike ali male črke, če je to 122 00:07:30,000 --> 00:07:33,000 potem je vsekakor črko, 123 00:07:33,000 --> 00:07:38,000 ker nimamo velikih in malih številk. 124 00:07:38,000 --> 00:07:41,000 Druga stvar, ki jo storite, in to je precej zapleteno, 125 00:07:41,000 --> 00:07:45,000 je smo spremenili standardni Cezarjeva šifra formule 126 00:07:45,000 --> 00:07:49,000 da je v opredelitvi težave set. 127 00:07:49,000 --> 00:07:52,000 Kakšna je razlika v tem, da smo odšteli 128 00:07:52,000 --> 00:07:58,000 V primeru velikimi črkami kapitala, nato pa smo dodali kapitala 129 00:07:58,000 --> 00:08:02,000 nazaj v konec. 130 00:08:02,000 --> 00:08:05,000 >> Vem, da nekateri od vas ste to storili v kodi. 131 00:08:05,000 --> 00:08:09,000 Ali kdo od vas to v svojih stališčih? 132 00:08:09,000 --> 00:08:13,000 Ti si to naredil. Lahko pojasnite, kaj to počne, Sahb? 133 00:08:13,000 --> 00:08:18,000 Z njegovo odšteje ven, ker si mod takoj po njej, 134 00:08:18,000 --> 00:08:21,000 boste morali vzeti ven, tako da način prejemanja [kašelj] položaj. 135 00:08:21,000 --> 00:08:25,000 In potem ga dodate pozneje lahko prenese več kot tista, ki jo je želel. 136 00:08:25,000 --> 00:08:27,000 Ja, točno tako. 137 00:08:27,000 --> 00:08:32,000 Kaj Sahb rekel je, da če želimo dodati 138 00:08:32,000 --> 00:08:36,000 naše sporočilo in naše ključne skupaj 139 00:08:36,000 --> 00:08:42,000 in nato mod, da mod, ki ga NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 če ne bomo merilu naše sporočilo v ustrezno 0-25 območju prvič, 141 00:08:50,000 --> 00:08:54,000 potem bomo morda na koncu dobili res čudno številko 142 00:08:54,000 --> 00:08:59,000 ker so vrednote, ki smo si ogleduje ko pogledamo sporočila [i], 143 00:08:59,000 --> 00:09:03,000 ko gledamo na i značaj naše gladke sporočila, 144 00:09:03,000 --> 00:09:08,000 je vrednost nekje na tem območju 65-122 145 00:09:08,000 --> 00:09:13,000 na podlagi ASCII vrednosti za velikimi A do Ž malih črk. 146 00:09:13,000 --> 00:09:18,000 In tako, ko smo ga mod po 26 ali NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 saj je bila naša # define v zgornjem desnem kotu tu gor, 148 00:09:23,000 --> 00:09:28,000 da se dogaja, da nam vrednost, ki je v območju 0-25, 149 00:09:28,000 --> 00:09:30,000 in moramo način, da potem obsegu, da nazaj gor 150 00:09:30,000 --> 00:09:32,000 in se je v ustreznem obsegu ASCII. 151 00:09:32,000 --> 00:09:36,000 Najlažji način za to je, da samo lestvici vse navzdol 152 00:09:36,000 --> 00:09:39,000 v razponu 0-25 na začetku, 153 00:09:39,000 --> 00:09:43,000 in nato prestavite vse nazaj gor na koncu. 154 00:09:43,000 --> 00:09:46,000 >> Druga pogosta napaka, da sem videl ljudi, ki vodijo v je, da 155 00:09:46,000 --> 00:09:50,000 če ne dejansko to storiti takoj, luščenje 156 00:09:50,000 --> 00:09:53,000 in dodate sporočilo in ključ skupaj in jih dodate, recimo, 157 00:09:53,000 --> 00:09:58,000 v char spremenljivko, problem s tem 158 00:09:58,000 --> 00:10:01,000 ker je sporočilo [i] je relativno velika številka za začetek- 159 00:10:01,000 --> 00:10:05,000 ne pozabite, da je vsaj 65, če je velika črka znakov 160 00:10:05,000 --> 00:10:09,000 Če imate velik ključ, recimo, nekaj takega kot 100, 161 00:10:09,000 --> 00:10:13,000 in dodate tiste 2 skupaj v podpisali znak, da boste dobili overflow. 162 00:10:13,000 --> 00:10:17,000 Vi boste dobili vrednost, ki je večja od 127, 163 00:10:17,000 --> 00:10:22,000 ki je največja vrednost, ki jo lahko char spremenljivka držite. 164 00:10:22,000 --> 00:10:26,000 Še enkrat, to je, zakaj bi si želeli narediti takšne stvari za začetek. 165 00:10:26,000 --> 00:10:29,000 Nekateri ljudje imajo po tej zadevi s tem, če drugega in testiranje 166 00:10:29,000 --> 00:10:33,000 da vidim, če bi se razlivala pred tem, da 167 00:10:33,000 --> 00:10:36,000 vendar ta način dobi okoli tega. 168 00:10:36,000 --> 00:10:40,000 In potem ta rešitev je natisnjen celoten niz na koncu. 169 00:10:40,000 --> 00:10:45,000 Drugi ljudje izpisal znak naenkrat. Oba sta super. 170 00:10:45,000 --> 00:10:51,000 Na tej točki, vidva imate kakršnakoli vprašanja, pripombe o tem? 171 00:10:51,000 --> 00:10:56,000 Stvari, ki vam je všeč, stvari, ki vam niso všeč? 172 00:10:56,000 --> 00:10:58,000 >> Imel sem vprašanje. 173 00:10:58,000 --> 00:11:01,000 Mogoče sem zamudil med vašo razlago, ampak kako ta program 174 00:11:01,000 --> 00:11:07,000 preskočite prostore za priključitev na tipko za dolžino besedila? 175 00:11:07,000 --> 00:11:10,000 To je samo Cezarjeva šifra. >> Oh, oprostite, ja. 176 00:11:10,000 --> 00:11:13,000 Ja, bomo videli. 177 00:11:13,000 --> 00:11:16,000 V šifra Caesar smo dobili okrog tega, ker 178 00:11:16,000 --> 00:11:18,000 le obrnil znakov. 179 00:11:18,000 --> 00:11:27,000 Mi jih samo zamenjali, če bi bile velike ali male črke. 180 00:11:27,000 --> 00:11:32,000 Ste zelo dober občutek glede tega? 181 00:11:32,000 --> 00:11:34,000 Vas prosimo, da kopirate to domov, ga vzemite, 182 00:11:34,000 --> 00:11:37,000 primerjati s tem, kar vi napisali. 183 00:11:37,000 --> 00:11:42,000 Zagotovo vas prosimo, da pošljete vprašanja o tem preveč. 184 00:11:42,000 --> 00:11:46,000 In spet, zavedati, da cilj tukaj z vašo težavo določa 185 00:11:46,000 --> 00:11:50,000 ne da bi dobili vi napisati popolno kodo za tvoj problem sklopov. 186 00:11:50,000 --> 00:11:57,000 To je učna izkušnja. Ja. 187 00:11:57,000 --> 00:12:01,000 >> Nazaj na storiti, medtem ko zanke, če je enaka nič, 188 00:12:01,000 --> 00:12:06,000 Tako null samo pomeni nič, samo zadeti nastopiti? 189 00:12:06,000 --> 00:12:12,000 Nič posebnega, je kazalec vrednosti, 190 00:12:12,000 --> 00:12:17,000 in jih uporabljamo za nično, če želimo povedati 191 00:12:17,000 --> 00:12:23,000 imamo kazalec spremenljivke, ki kažejo na nič. 192 00:12:23,000 --> 00:12:28,000 In tako običajno pomeni, da je ta spremenljivka, to sporočilo spremenljivka 193 00:12:28,000 --> 00:12:35,000 prazna, in tukaj, ker smo z CS50 posebno vrsto niza, 194 00:12:35,000 --> 00:12:37,000 kaj je CS50 string tip? 195 00:12:37,000 --> 00:12:42,000 Ste videli, kaj je to, ko je David potegnil nazaj pokrov na predavanju? 196 00:12:42,000 --> 00:12:44,000 To je funky, da je kazalec, kajne? 197 00:12:44,000 --> 00:12:48,000 Prav, ja. >> To je znak *. 198 00:12:48,000 --> 00:12:52,000 In tako res smo lahko zamenjate 199 00:12:52,000 --> 00:12:56,000 tukaj s sporočilom char *, 200 00:12:56,000 --> 00:13:04,000 in tako GetString funkcija, če ne uspešno dobili niz od uporabnika, 201 00:13:04,000 --> 00:13:08,000 ne more razčleniti niza in en primer, v katerem se ne more razčleniti niza 202 00:13:08,000 --> 00:13:11,000 je, če uporabnik vnese koncu značaja dokumentacije, nadzor D 203 00:13:11,000 --> 00:13:17,000 ki ni nekaj, kar ponavadi ne, če pa se to zgodi 204 00:13:17,000 --> 00:13:20,000 potem bo ta funkcija vrne ničelno vrednost kot način za povedati 205 00:13:20,000 --> 00:13:23,000 "Hej, nisem dobil niz." 206 00:13:23,000 --> 00:13:27,000 Kaj bi se zgodilo, če ne bomo dati sporočilo = null, 207 00:13:27,000 --> 00:13:30,000 kar je nekaj, kar še niso bili delaš? 208 00:13:30,000 --> 00:13:32,000 Zakaj bi bilo to narobe? 209 00:13:32,000 --> 00:13:38,000 Ker vem, da smo se pogovarjali malo na predavanje o pomnilniških puščanja. 210 00:13:38,000 --> 00:13:42,000 Ja, kaj je storil, in poglejmo, kaj se bo zgodilo. 211 00:13:42,000 --> 00:13:44,000 >> Vprašanje Basil je bilo, kaj se zgodi, če ne bomo dejansko imeli 212 00:13:44,000 --> 00:13:48,000 To sporočilo = null test? 213 00:13:48,000 --> 00:13:51,000 Naj se pomaknite do vrha. 214 00:13:51,000 --> 00:13:53,000 Vi lahko komentira to. 215 00:13:53,000 --> 00:13:55,000 Pravzaprav, bom ga shranite v reviziji. 216 00:13:55,000 --> 00:13:58,000 To bo revizija 3. 217 00:13:58,000 --> 00:14:02,000 Kaj boste morali storiti za zagon tega programa je, da boste morali kliknite to ikono zobnika tu gor, 218 00:14:02,000 --> 00:14:04,000 in boste morali dodati argument za to. 219 00:14:04,000 --> 00:14:10,000 Boste morali dati ključni argument, saj želimo prenesti na argument ukazne vrstice. 220 00:14:10,000 --> 00:14:13,000 Tukaj bom, da ga s številko 3. Všeč mi je 3. 221 00:14:13,000 --> 00:14:19,000 Zdaj povečave nazaj ven, pri izvajanju programa. 222 00:14:19,000 --> 00:14:24,000 To je tekmovanje v teku, prevajanje, oblikovanje. 223 00:14:24,000 --> 00:14:27,000 Pa gremo. Čaka, da se pozove. 224 00:14:27,000 --> 00:14:33,000 Če bi tip v nekaj takega kot zdravo, kam gre? 225 00:14:33,000 --> 00:14:38,000 Oh, moj program je trajalo predolgo, da delujejo. Bil sem jawing predolgo. 226 00:14:38,000 --> 00:14:40,000 Tukaj gre. 227 00:14:40,000 --> 00:14:43,000 Zdaj sem tipa v zdravo. 228 00:14:43,000 --> 00:14:46,000 Vidimo, da šifrira ustrezno. 229 00:14:46,000 --> 00:14:52,000 Zdaj, kaj se zgodi, če ne bomo hitro GetString vrniti nično? 230 00:14:52,000 --> 00:14:57,000 Ne pozabite, da sem rekel, da smo naredili, da s pritiskom na kontrolni D hkrati. 231 00:14:57,000 --> 00:14:59,000 Jaz bom pomikanje gor. Bomo teči znova. 232 00:14:59,000 --> 00:15:01,000 Building. Tu gre. 233 00:15:01,000 --> 00:15:04,000 Zdaj, ko sem zadel kontrolni D 234 00:15:04,000 --> 00:15:12,000 Imam to vrstico, ki pravi, opt/sandbox50/bin/run.sh Segmentacija napak. 235 00:15:12,000 --> 00:15:15,000 Ali vi fantje videli, da se pred? 236 00:15:15,000 --> 00:15:17,000 >> [Študent] Zakaj ni, >> Prosim? 237 00:15:17,000 --> 00:15:20,000 [Študent] Zakaj ni Posmrtni v tem primeru? 238 00:15:20,000 --> 00:15:26,000 Posmrtni je, vprašanje je, zakaj je tam ni Posmrtni tukaj? 239 00:15:26,000 --> 00:15:29,000 Vprašanje pa je, da se lahko zgodi, vendar je Posmrtni je datoteka 240 00:15:29,000 --> 00:15:31,000 , ki se shrani na trdem disku. 241 00:15:31,000 --> 00:15:34,000 V tem primeru smo onemogočeno ključne odlagališč 242 00:15:34,000 --> 00:15:37,000 o stečajnem strežniku, tako da ne bomo ljudje seg izjalovljen 243 00:15:37,000 --> 00:15:40,000 in izgradnjo ton glavnih odlagališč. 244 00:15:40,000 --> 00:15:46,000 Vendar pa lahko dobiš. 245 00:15:46,000 --> 00:15:48,000 Temeljni odlagališč so takšne stvari, ki jih lahko pogosto onemogočiti, 246 00:15:48,000 --> 00:15:52,000 in včasih ti. 247 00:15:52,000 --> 00:15:55,000 Segmentacija kriv, da odgovorim na vaše vprašanje, bazilika, 248 00:15:55,000 --> 00:16:00,000 se pravi, da smo poskušali za dostop do kazalec 249 00:16:00,000 --> 00:16:05,000 , ki ni bila nastavljena, da kaže na karkoli. 250 00:16:05,000 --> 00:16:09,000 Ne pozabite Binky v videu, ko Binky poskuša 251 00:16:09,000 --> 00:16:12,000 iti dostop kazalec, ki je ne kaže na nič? 252 00:16:12,000 --> 00:16:16,000 V tem primeru mislim, tehnično kazalec kaže na nekaj. 253 00:16:16,000 --> 00:16:20,000 To kaže, da nič, kar je tehnično 0, 254 00:16:20,000 --> 00:16:25,000 vendar je ta opredeljen kot v segmentu, ki ni dostopen 255 00:16:25,000 --> 00:16:28,000 po svojem programu, tako da boste dobili Napaka pri razčlenjenosti 256 00:16:28,000 --> 00:16:31,000 ker nisi dostop do pomnilnika, ki je v veljavnem segmentu 257 00:16:31,000 --> 00:16:38,000 kot kup segmentu ali dimnika segmenta ali podatkovnega segmenta. 258 00:16:38,000 --> 00:16:40,000 Kul. 259 00:16:40,000 --> 00:16:48,000 Vse več vprašanj o cesarju? 260 00:16:48,000 --> 00:16:51,000 >> Gremo naprej. Oglejmo si Revizija 2 res hitro. 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 bomo sprehodili po tale precej hitro, ker, spet, 264 00:17:06,000 --> 00:17:10,000 Vigenère in Cesar sta precej podobna. 265 00:17:10,000 --> 00:17:12,000 Glava komentar je pred 266 00:17:12,000 --> 00:17:17,000 # Define je pred izogniti z uporabo te čarobne številke. 267 00:17:17,000 --> 00:17:21,000 Za lepo stvar je, da smo želeli, da se premaknete 268 00:17:21,000 --> 00:17:23,000 drugačna abeceda, ali nekaj takega. 269 00:17:23,000 --> 00:17:26,000 Namesto da bi šel ročno spremeniti vse 26 je v kodeksu 270 00:17:26,000 --> 00:17:30,000 Lahko bi to spremenili do 27, ali jo spustite navzdol 271 00:17:30,000 --> 00:17:34,000 če smo z uporabo različnih abeced, različne jezike. 272 00:17:34,000 --> 00:17:38,000 Spet imamo to preverjanje argumentov štetja 273 00:17:38,000 --> 00:17:42,000 in res lahko skoraj vzeti kot predlogo. 274 00:17:42,000 --> 00:17:46,000 Precej vsak program, ki ga morajo imeti napisati- 275 00:17:46,000 --> 00:17:50,000 če je potrebno v ukazni vrstici argumenti, saj so nekateri zaporedje vrstic 276 00:17:50,000 --> 00:17:55,000 , ki se glasi takole na samem začetku. 277 00:17:55,000 --> 00:17:59,000 To je ena od prvih sanity testov, ki jih želite storiti. 278 00:17:59,000 --> 00:18:03,000 >> Tukaj je tisto, kar smo si bomo poskrbeli, da 279 00:18:03,000 --> 00:18:06,000 Ključna beseda je veljaven in da je bil drugi pregled, da smo storili. 280 00:18:06,000 --> 00:18:11,000 Obvestilo še, da smo ločeni od tega argc in 2. 281 00:18:11,000 --> 00:18:14,000 Upoštevajte, da je v tem primeru ena stvar, ki smo morali narediti, je bilo namesto 282 00:18:14,000 --> 00:18:18,000 uporabe na i smo želeli preveriti celoten niz, 283 00:18:18,000 --> 00:18:21,000 in za to, da si dejansko morali iti po znakih 284 00:18:21,000 --> 00:18:23,000 v nizu. 285 00:18:23,000 --> 00:18:29,000 Ni dober način, da neko stvar na njej 286 00:18:29,000 --> 00:18:31,000 ker tudi, na primer, da se bom vrnil 0 287 00:18:31,000 --> 00:18:37,000 če ga ni mogoče razčleniti celo število, tako da sploh ne deluje. 288 00:18:37,000 --> 00:18:42,000 Še enkrat, lepo sporočilo, da si točno to, kar se je zgodilo. 289 00:18:42,000 --> 00:18:45,000 Potem sem spet ukvarjamo s primerom, ko 290 00:18:45,000 --> 00:18:50,000 uporabnik vnese v nadzorni naključnega značaja D. 291 00:18:50,000 --> 00:18:54,000 >> In potem je vprašanje, Charlotte prej o tem, kako nam bo uspelo preskočiti prostore 292 00:18:54,000 --> 00:18:57,000 v našem nizu tukaj. 293 00:18:57,000 --> 00:19:00,000 To je nekako podobno, kar smo naredili s programom Myspace 294 00:19:00,000 --> 00:19:04,000 da smo v oddelku, in način, kako to delal 295 00:19:04,000 --> 00:19:08,000 je, da smo spremljali število črk, ki bi jih videl. 296 00:19:08,000 --> 00:19:13,000 Kot smo stopil sporočila niza, ko sva hodila po lastnostih, ki jih značaja, 297 00:19:13,000 --> 00:19:16,000 smo spremljali indeks kot del naše za zanke, potem pa spremljajo tudi 298 00:19:16,000 --> 00:19:21,000 število črk, zato ni posebnih znakov, ki niso števke, ki niso bele prostor 299 00:19:21,000 --> 00:19:27,000 da bomo videli v ločenem spremenljivke. 300 00:19:27,000 --> 00:19:33,000 In potem je ta rešitev spreminja ključ 301 00:19:33,000 --> 00:19:41,000 da bi dobili celo število dejansko ključno, in to ne da na letenje, 302 00:19:41,000 --> 00:19:47,000 tik preden je potem gre za šifriranje dejanski učinek sporočila. 303 00:19:47,000 --> 00:19:50,000 Tukaj je nekaj rešitev, ki so bile popolnoma veliko preveč 304 00:19:50,000 --> 00:19:58,000 da bi spremenil navzgor pri testiranju za veljavnost Ključ je. 305 00:19:58,000 --> 00:20:01,000 Poleg tega, da se prepričajte, da značaj in ključne besede 306 00:20:01,000 --> 00:20:05,000 je abecedni znak je tudi izkazalo, da v celo število 307 00:20:05,000 --> 00:20:13,000 V 0-25 razponu, da se potem preskočite bi morali storiti, da kasneje v ta zanka. 308 00:20:13,000 --> 00:20:18,000 Še enkrat, si lahko ogledate tukaj je to res točno isto kodo 309 00:20:18,000 --> 00:20:22,000 ki smo ga uporabili pri cesarju na tej točki. 310 00:20:22,000 --> 00:20:25,000 Ti delaš točno isto stvar, tako da je resnično trik je poskušal ugotoviti, 311 00:20:25,000 --> 00:20:30,000 kako spremeniti ključne besede v celo število. 312 00:20:30,000 --> 00:20:35,000 >> Ena stvar, ki smo tukaj, da se malo gosto 313 00:20:35,000 --> 00:20:39,000 je, da smo ponovno ta izraz, mislim, da lahko rečemo, 314 00:20:39,000 --> 00:20:45,000 3 ločeni krat na progah, 58, 59, 61 in. 315 00:20:45,000 --> 00:20:52,000 Mi lahko kdo razloži, kaj točno ta izraz ne? 316 00:20:52,000 --> 00:20:55,000 To je dostop značaja, kot si rekel. 317 00:20:55,000 --> 00:20:59,000 Ja, to je [neslišno] lik ključno besedo, 318 00:20:59,000 --> 00:21:04,000 in zato je število opaženih pisem, ker ste le premika vzdolž 319 00:21:04,000 --> 00:21:06,000 Ključna beseda, ko si videl pismo, 320 00:21:06,000 --> 00:21:10,000 tako da se bo to dejansko preskočite prostore in take stvari. 321 00:21:10,000 --> 00:21:12,000 Ja, točno tako. 322 00:21:12,000 --> 00:21:16,000 In potem, ko ste videli prazno ključnih besed si mod, tako da premakniti nazaj. 323 00:21:16,000 --> 00:21:18,000 Točno tako. To je odlična razlaga. 324 00:21:18,000 --> 00:21:23,000 Kaj je dejal Kevin je, da želimo, da indeks na ključno besedo. 325 00:21:23,000 --> 00:21:28,000 Želimo, da bi dobili num_letters_seen značaj, če hočete, 326 00:21:28,000 --> 00:21:32,000 če pa num_letters_seen presega dolžino ključno besedo 327 00:21:32,000 --> 00:21:37,000 način, kako priti nazaj v ustrezni vrsti se bomo uporabili mod operaterja 328 00:21:37,000 --> 00:21:40,000 učinkovito ovijte okoli. 329 00:21:40,000 --> 00:21:43,000 Na primer, kot je na kratki, naša ključna beseda je slanina, 330 00:21:43,000 --> 00:21:46,000 in to je 5 črk. 331 00:21:46,000 --> 00:21:50,000 Vendar pa smo videli 6 črk v naši navadnega besedila na tej točki 332 00:21:50,000 --> 00:21:52,000 6 in šifrirano. 333 00:21:52,000 --> 00:21:57,000 Na koncu bomo dostop do num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 kar je 6, mod dolžina ključne besede, 5, 335 00:22:00,000 --> 00:22:04,000 in tako bomo dobili 1, in kaj bomo naredili, je, da bomo 336 00:22:04,000 --> 00:22:14,000 Dostop do 1. notranjosti znakov naše ključne besede na tej točki. 337 00:22:14,000 --> 00:22:21,000 >> V redu, vsa vprašanja v zvezi Vigenère 338 00:22:21,000 --> 00:22:26,000 preden gremo naprej? 339 00:22:26,000 --> 00:22:31,000 Ste zelo dober občutek glede tega? 340 00:22:31,000 --> 00:22:35,000 Cool, super. 341 00:22:35,000 --> 00:22:38,000 Želim, da se prepriča, da fantje so dobili priložnost videti kodo 342 00:22:38,000 --> 00:22:48,000 da mislimo, da izgleda dobro in imeli priložnost, da se učijo od njega. 343 00:22:48,000 --> 00:22:53,000 To bo zadnja bomo uporabljali prostore za zdaj, 344 00:22:53,000 --> 00:22:59,000 in da bomo prehod zdaj, in sem šel na cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 tako da lahko naredimo malo pregleda kviz. 346 00:23:06,000 --> 00:23:10,000 Najboljši način, mislim, da začnete delaš kviz pregled 347 00:23:10,000 --> 00:23:15,000 je prišel na ta predavanja strani cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 in pod vsako tedna postavke, tako da če gledam tukaj na 0. teden, 349 00:23:20,000 --> 00:23:27,000 Vidim, da imamo seznam tem, ki jih je potrebno vključiti v tednu 0. 350 00:23:27,000 --> 00:23:31,000 >> Če kateri koli od teh tem se zdi, da vas ne poznajo 351 00:23:31,000 --> 00:23:34,000 boste zagotovo želeli vrniti nazaj in Ribiči skripta in morda 352 00:23:34,000 --> 00:23:39,000 celo posneto skozi predavanja, si jih ogledate še enkrat, če želite, 353 00:23:39,000 --> 00:23:44,000 da bi dobili občutek za to, kaj se dogaja z vsako od teh temah. 354 00:23:44,000 --> 00:23:49,000 Bom rekel še dodatno letos eno kul sredstev, ki smo jih dobili 355 00:23:49,000 --> 00:23:55,000 je te hlače, da smo ustvarili, in če pogledaš na teden 0, 356 00:23:55,000 --> 00:24:00,000 nimamo vseh temah, ki, ampak imamo kar nekaj izmed njih, 357 00:24:00,000 --> 00:24:03,000 nekatere težje tiste, tako gledal te hlače še enkrat 358 00:24:03,000 --> 00:24:08,000 je dober način, da prideš do hitrosti. 359 00:24:08,000 --> 00:24:15,000 Predvsem bom dal v vtič za 3 na dnu, saj sem jih. 360 00:24:15,000 --> 00:24:20,000 Ampak, če ste borila z binarno, hex, bitov, da vrsta stvari, 361 00:24:20,000 --> 00:24:22,000 binarno je odličen kraj za začetek. 362 00:24:22,000 --> 00:24:25,000 ASCII je še eden, ki je dobro tudi ogledati. 363 00:24:25,000 --> 00:24:31,000 Lahko tudi mi paziti na 1.5x hitrosti, če bom prepočasen za vas. 364 00:24:31,000 --> 00:24:35,000 Ker je pregled, vas prosimo, da to storim. 365 00:24:35,000 --> 00:24:40,000 >> Samo začeti zelo hitro, bomo šli skozi nekaj teh težav kviz 366 00:24:40,000 --> 00:24:44,000 Samo hitro churn skozi to. 367 00:24:44,000 --> 00:24:50,000 Na primer si oglejmo problem 16, da imam prav tukaj na forumu. 368 00:24:50,000 --> 00:24:54,000 Imamo to naslednji obračun v binarno, 369 00:24:54,000 --> 00:24:56,000 in želimo pokazati vsako delo. 370 00:24:56,000 --> 00:24:59,000 Ok, bom dal to priložnost. 371 00:24:59,000 --> 00:25:01,000 Vidva bi morala slediti skupaj s papirjem, 372 00:25:01,000 --> 00:25:04,000 in bomo to zelo hitro. 373 00:25:04,000 --> 00:25:06,000 Želimo, da opravlja naslednje izračun v binarno. 374 00:25:06,000 --> 00:25:16,000 Imam 00110010. 375 00:25:16,000 --> 00:25:27,000 In jaz bom dodal, da mu 00110010. 376 00:25:27,000 --> 00:25:30,000 Za matematiki geniji po skupaj doma, 377 00:25:30,000 --> 00:25:35,000 To je dejansko pomnožimo z 2. 378 00:25:35,000 --> 00:25:37,000 Začnimo. 379 00:25:37,000 --> 00:25:39,000 Bomo po isti algoritem dodatek, ki ga opravljamo 380 00:25:39,000 --> 00:25:43,000 ko smo dodali decimalne številke skupaj. 381 00:25:43,000 --> 00:25:46,000 Res je edina razlika v tem, da se zanka okoli nazaj 382 00:25:46,000 --> 00:25:51,000 ko bomo imeli 1 + 1, namesto enkrat pridemo do 10. 383 00:25:51,000 --> 00:25:53,000 >> Če začnemo z desne, res hitro, kaj je prvo mesto? 384 00:25:53,000 --> 00:25:55,000 [Študent] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Super, druga številka? 386 00:25:58,000 --> 00:26:00,000 [1] Študent. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Je 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.] Točno, kaj je znak, da sem napisal prav pod 2 tiste, dodanih skupaj? 390 00:26:08,000 --> 00:26:11,000 [Študent] 1, 0, ali 0, nato pa nosijo 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 in izvedbo 1, točno. 392 00:26:15,000 --> 00:26:18,000 Naslednja je ena gor, Basil, si. 393 00:26:18,000 --> 00:26:20,000 Kaj je tretja? >> [Basil] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, popolna. 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, in kaj naj storim? 397 00:26:30,000 --> 00:26:32,000 [Študent] 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] In kaj naj naredim? In potem sem nositi 1. 399 00:26:34,000 --> 00:26:36,000 Odlično, Sahb? >> [Sahb] Zdaj imate 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] In kaj naj storim tukaj? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Nato za naslednjo imate 1, ker ste prenesene 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Super, da sem ga lahko končal. 403 00:26:49,000 --> 00:26:51,000 Kul. 404 00:26:51,000 --> 00:26:54,000 [Študent] Ali 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, tako kot si rekel, je 10 ali 1, 0, ne. 407 00:27:01,000 --> 00:27:07,000 10 je napačno ime, saj mi 10 pomeni število 10, 408 00:27:07,000 --> 00:27:12,000 in to je Šala o tem, kako ga bomo zastopa, ko ga bomo pisno. 409 00:27:12,000 --> 00:27:20,000 Predstavljamo številko 2 za 1, 0, število 10 je nekoliko drugačna. 410 00:27:20,000 --> 00:27:23,000 >> Kaj je lepo o vrste binarno je, da res ne, da je veliko 411 00:27:23,000 --> 00:27:25,000 primerov, ki jih morate naučiti. 412 00:27:25,000 --> 00:27:30,000 Tam 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 je 0, in potem nadaljujte z 1, 414 00:27:34,000 --> 00:27:37,000 in potem si lahko ogledate tukaj na tretjem stolpcu, ki ga je prav 415 00:27:37,000 --> 00:27:40,000 smo imeli to 1, 1, 1 in. 416 00:27:40,000 --> 00:27:43,000 In 1 + 1 + 1 je 1, 417 00:27:43,000 --> 00:27:45,000 in nosiš še eno 1. 418 00:27:45,000 --> 00:27:48,000 Ko delaš binarno seštevanje, precej preprosta. 419 00:27:48,000 --> 00:27:51,000 Jaz bi naredil nekaj več od tega, da sami preverijo duševno zdravje 420 00:27:51,000 --> 00:27:54,000 Preden vstopite, ker je to 421 00:27:54,000 --> 00:28:00,000 Verjetno nekaj, kar bomo videli na kvizu. 422 00:28:00,000 --> 00:28:03,000 Zdaj pa to storiti naslednjič, kot dobro. 423 00:28:03,000 --> 00:28:06,000 Naredimo problema 17. 424 00:28:06,000 --> 00:28:12,000 Bomo pretvoriti naslednjo številko binarne v desetiško. 425 00:28:12,000 --> 00:28:28,000 Imam 10100111001. 426 00:28:28,000 --> 00:28:33,000 Ne pozabite, v binarni video, ki sem ga opravil 427 00:28:33,000 --> 00:28:36,000 Šel sem skozi nekaj primerov, in sem pokazal, kako 428 00:28:36,000 --> 00:28:41,000 vse deluje, ko boste to počeli v decimalno. 429 00:28:41,000 --> 00:28:45,000 Ko delate v decimalni zastopanja Mislim, da smo 430 00:28:45,000 --> 00:28:48,000 Na tej točki v naših življenjih, da tekoče govori to, da 431 00:28:48,000 --> 00:28:53,000 to je zelo enostavno prikriti mehanike, kako to dejansko deluje. 432 00:28:53,000 --> 00:28:59,000 >> Toda storiti hitro Rekapitulacija, če imam številko 137 433 00:28:59,000 --> 00:29:06,000 To pravzaprav pomeni, in še enkrat, to je v decimalni zastopanja, 434 00:29:06,000 --> 00:29:19,000 Številka 137 v desetiško pomeni, da imam 1 x 100 x 10 + 3 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 To je vse, da ostane na zaslonu. 436 00:29:22,000 --> 00:29:29,000 In potem, če pogledaš na teh številk tukaj, 437 00:29:29,000 --> 00:29:34,000 100, 10 in 1, boste videli, da oni dejansko vsa pooblastila za 10. 438 00:29:34,000 --> 00:29:43,000 Imam 10 m², 10 in 10 ¹ na nič. 439 00:29:43,000 --> 00:29:48,000 Imamo podobno reč v binarno, 440 00:29:48,000 --> 00:29:55,000 razen, da je naša osnova, kot mu pravimo, je 2 namesto 10. 441 00:29:55,000 --> 00:29:58,000 Ti 10s, da sem napisal tukaj na dnu, 442 00:29:58,000 --> 00:30:02,000 ta 10 m², 10 ¹, 10 do 10, nič je naša osnova, 443 00:30:02,000 --> 00:30:08,000 in eksponent, 0, 1 ali 2, 444 00:30:08,000 --> 00:30:14,000 je razvidna iz položaja številko v številki, ki smo napisali. 445 00:30:14,000 --> 00:30:21,000 1, če gledamo na to, to je 1 na 2. mestu. 446 00:30:21,000 --> 00:30:27,000 The 3 je v 1. mesto in 7 v 0. položaju. 447 00:30:27,000 --> 00:30:35,000 Tako smo dobili različne eksponenti spodaj za naše baze. 448 00:30:35,000 --> 00:30:40,000 >> Po vsem tem bova, pravzaprav, veste kaj? 449 00:30:40,000 --> 00:30:43,000 Naredili bomo, kje so moje undo gumb iti? 450 00:30:43,000 --> 00:30:45,000 Tu gre. 451 00:30:45,000 --> 00:30:47,000 Všeč mi je ta stvar razveljaviti. 452 00:30:47,000 --> 00:30:51,000 Po tem mislim, da mi vsaj 453 00:30:51,000 --> 00:30:54,000 Najlažji način, da začnete pretvorbo binarno število 454 00:30:54,000 --> 00:30:57,000 ali šestnajstiško število, kjer je osnova 16 455 00:30:57,000 --> 00:31:02,000 in ne 10 ali 2 je, da gredo naprej in zapišite 456 00:31:02,000 --> 00:31:09,000 osnove in eksponenti za vse številke v mojem binarno število na vrhu. 457 00:31:09,000 --> 00:31:14,000 Če začnemo z leve na desno še enkrat, 458 00:31:14,000 --> 00:31:17,000 ki je nekako protislovno, 459 00:31:17,000 --> 00:31:23,000 Vrnem spremenite v črno-tukaj imamo 2 na 0. mesto, 460 00:31:23,000 --> 00:31:27,000 in potem imamo 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 in potem 2 do 3, 2 do 4, 2 do 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9 in 10. 463 00:31:39,000 --> 00:31:41,000 Te številke sem izpisano so vsi eksponenti. 464 00:31:41,000 --> 00:31:48,000 Sem samo napisal osnove tukaj v prvem 3 samo za prostor. 465 00:31:48,000 --> 00:31:50,000 >> Na tej točki se bom, da gredo naprej in sem dejansko dogaja, da zbrišete 466 00:31:50,000 --> 00:31:53,000 Stvari, ki smo v decimalko, če je to v redu. 467 00:31:53,000 --> 00:31:57,000 Vi ste vsi dobili to. 468 00:31:57,000 --> 00:32:05,000 Tisti, ki ste gledali karte Prepričan sem, da bodo lahko, da me nazaj, če želite. 469 00:32:05,000 --> 00:32:07,000 Preklop nazaj na peresnik. 470 00:32:07,000 --> 00:32:12,000 Torej, kaj lahko storimo, če vidva nista povsem do hitrosti na svojih pooblastil 2, 471 00:32:12,000 --> 00:32:15,000 To je povsem v redu. 472 00:32:15,000 --> 00:32:18,000 To se zgodi. Razumem. 473 00:32:18,000 --> 00:32:23,000 Nekoč sem imel razgovor za službo, kjer so mi povedali, kar bi moral vedeti vsa pooblastila za 2 474 00:32:23,000 --> 00:32:26,000 skozi 2 do 30.. 475 00:32:26,000 --> 00:32:29,000 To ni delo imam. 476 00:32:29,000 --> 00:32:32,000 Kakorkoli že, lahko greste naprej in to v matematiki tukaj, 477 00:32:32,000 --> 00:32:35,000 vendar z binarno ni res smiselno, 478 00:32:35,000 --> 00:32:38,000 in niti ne smisla z decimalno ali šestnajstiško bodisi 479 00:32:38,000 --> 00:32:43,000 narediti math, kje ste ničel. 480 00:32:43,000 --> 00:32:49,000 Ogledate si lahko imam tukaj 0, 0 je tukaj, tukaj, 0, 0 tukaj, tukaj, 0, 0 tukaj. 481 00:32:49,000 --> 00:32:52,000 Zakaj se ne bi bilo smiselno, da to dejansko math 482 00:32:52,000 --> 00:32:56,000 pri izračunu višine moč 2 za ta položaj? 483 00:32:56,000 --> 00:32:59,000 Točno tako, kot je Charlotte je dejal, bo 0. 484 00:32:59,000 --> 00:33:05,000 Lahko pa tudi prihranite čas, če izračun moči 2 ni tvoja močna točka. 485 00:33:05,000 --> 00:33:10,000 V tem primeru potrebujemo le za izračun za 2 do 0, ki je-? 486 00:33:10,000 --> 00:33:12,000 [1] Študent. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 do 3, ki 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 do 4? 490 00:33:18,000 --> 00:33:21,000 [Študent] 2. Žal mi je, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 do 4, je 16, točno tako. 492 00:33:26,000 --> 00:33:28,000 2 do 5, Kevin? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 do 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 In 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.] Ja, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Ko imamo te številke lahko kilometrov jih vse gor. 500 00:33:57,000 --> 00:34:01,000 In to je, če je to res pomembno, da naredite nekaj stvari. 501 00:34:01,000 --> 00:34:07,000 Eden je šel počasi in preverite svoje delo. 502 00:34:07,000 --> 00:34:10,000 Lahko povem, da je 1 na koncu tega števila, 503 00:34:10,000 --> 00:34:15,000 zato sem zagotovo dobili liho število, kot moj rezultat, 504 00:34:15,000 --> 00:34:18,000 ker so vse ostale pa se bodo celo številke 505 00:34:18,000 --> 00:34:21,000 glede na to, da je binarno število. 506 00:34:21,000 --> 00:34:24,000 Druga stvar je, če prideš do te točke na testu 507 00:34:24,000 --> 00:34:27,000 in ste ga napisali tako daleč 508 00:34:27,000 --> 00:34:30,000 in ti zmanjkuje časa 509 00:34:30,000 --> 00:34:33,000 pogled na število točk, da je ta problem treba. 510 00:34:33,000 --> 00:34:40,000 Ta problem, kot lahko vidite, če se obrnete nazaj na moj laptop res hitro- 511 00:34:40,000 --> 00:34:44,000 Ta naloga je vredna 2 točki, tako da to ni vrsta Poleg tega 512 00:34:44,000 --> 00:34:47,000 ti bi moral iti skozi, če ste res v časovni stiski. 513 00:34:47,000 --> 00:34:52,000 Ampak bomo preklopiti nazaj na iPad, in bomo šli skozi to zelo hitro. 514 00:34:52,000 --> 00:34:54,000 >> Všeč mi je delal majhne številke 1. 515 00:34:54,000 --> 00:34:56,000 ker se mi zdi, da je lažje. 516 00:34:56,000 --> 00:35:00,000 Všeč mi je 32 in 8, ker gredo skupaj precej enostavno, in smo dobili 50. 517 00:35:00,000 --> 00:35:03,000 16 in 1 dobi 17. 518 00:35:03,000 --> 00:35:05,000 Tam smo dobili 57, 519 00:35:05,000 --> 00:35:14,000 in potem bomo lahko vse ostalo o tem, da lahko naredimo 57, 156. 520 00:35:14,000 --> 00:35:16,000 Daj no. 521 00:35:16,000 --> 00:35:19,000 Človek, no, pa poglejmo. 522 00:35:19,000 --> 00:35:27,000 Imeli smo 57, 256 in 1024. 523 00:35:27,000 --> 00:35:31,000 Na tej točki, bi raje šel skozi. 524 00:35:31,000 --> 00:35:35,000 Nimam pojma. Jasno sem morala bral o tem. 525 00:35:35,000 --> 00:35:40,000 7, 6, 4, dobiš 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Potem smo dobili 3, nato pa smo dobili 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Pirh, kdo? 530 00:35:55,000 --> 00:35:59,000 Ali kdo prepozna to številko? 531 00:35:59,000 --> 00:36:02,000 Chris prepozna številko. Kaj to pomeni, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, tako da, če pogledaš na to, da izgleda kot Leet. 534 00:36:11,000 --> 00:36:15,000 Hacker stvari. Pazi, da takih stvari z vmesnim ali kviz, namesto. 535 00:36:15,000 --> 00:36:19,000 Če vidite to vrsto stvari in se sprašujete, "Huh," 536 00:36:19,000 --> 00:36:22,000 ki bi lahko dejansko nekaj pomeni. 537 00:36:22,000 --> 00:36:24,000 Ne vem. David rad ga dajo noter 538 00:36:24,000 --> 00:36:26,000 To je dober način, da sanity check it. 539 00:36:26,000 --> 00:36:30,000 Kot v redu, vidim, kaj se dogaja. 540 00:36:30,000 --> 00:36:34,000 >> To je teden 0/Week 1 stvari. 541 00:36:34,000 --> 00:36:39,000 Če želimo preklopiti nazaj na naš laptop zdaj, 542 00:36:39,000 --> 00:36:46,000 pomanjšanje, in nekaj drugih stvari. 543 00:36:46,000 --> 00:36:50,000 Tam je ASCII, ki smo počeli veliko težav s nizov. 544 00:36:50,000 --> 00:36:55,000 Ta pojem kapitala A. Kaj je to res? 545 00:36:55,000 --> 00:36:57,000 Vedoč, da je decimalno število. 546 00:36:57,000 --> 00:37:00,000 65 je tisto, kar je razporejena v ASCII tabeli, 547 00:37:00,000 --> 00:37:03,000 in da je torej, kako računalnik ga zapiše, 548 00:37:03,000 --> 00:37:06,000 in to je, kako smo bili Pobegnili z dejansko pisanje 549 00:37:06,000 --> 00:37:09,000 znak kapitala in male črke znak 550 00:37:09,000 --> 00:37:14,000 V nekaterih od teh rešitev in problematičnih sklopov, ki ste ga opravljali. 551 00:37:14,000 --> 00:37:16,000 Nekaj ​​drugih stvari. 552 00:37:16,000 --> 00:37:25,000 Imamo izjave, matematične izraze, pogoje, zank, spremenljivke in niti. 553 00:37:25,000 --> 00:37:29,000 >> Tisti, ki vse zdi smiselno v večjem delu? 554 00:37:29,000 --> 00:37:35,000 Nekatere od teh izrazov je malo funky na trenutke. 555 00:37:35,000 --> 00:37:46,000 Rad mislim, da je izjava, kot za večino del nečesa, kar se konča s podpičjem. 556 00:37:46,000 --> 00:37:51,000 Izjave, kot so x = 7, ki določa spremenljivke, 557 00:37:51,000 --> 00:37:54,000 predvidoma imenovan x = 7. 558 00:37:54,000 --> 00:38:01,000 Verjetno x je tudi vrsta, ki lahko shranite številko 7, 559 00:38:01,000 --> 00:38:05,000 tako da je int ali morda Likvidna sredstva oziroma kratkoročno ali znak, 560 00:38:05,000 --> 00:38:07,000 nekaj takega. 561 00:38:07,000 --> 00:38:12,000 Boolean izraz uporablja te dvojni enaka 562 00:38:12,000 --> 00:38:17,000 in pok enaka ali ne znaša manj kot, večja od 563 00:38:17,000 --> 00:38:22,000 manjša ali enaka, vse to vrsto stvari. 564 00:38:22,000 --> 00:38:28,000 Razmere pa so, če else stavki. 565 00:38:28,000 --> 00:38:32,000 Bi se spomnil, da ne more imeti drugega, ne da bi ustrezno, če. 566 00:38:32,000 --> 00:38:37,000 Prav tako ne morete imeti drugje, če to ne ustreza, če. 567 00:38:37,000 --> 00:38:40,000 Loops, opozoriti na 3 vrste zank smo bili kovanje v vas 568 00:38:40,000 --> 00:38:43,000 za zadnjih nekaj problematičnih delov in sklopov. 569 00:38:43,000 --> 00:38:46,000 Uporaba tega pa, če ste dobili navodilo za vnos, 570 00:38:46,000 --> 00:38:51,000 uporabo, medtem ko zanke do posebnega pogoja, je res, 571 00:38:51,000 --> 00:38:56,000 in nato z uporabo tistih zank, če morate 572 00:38:56,000 --> 00:39:01,000 vedeti, katere ponovitev zanke ste trenutno je, kako mislim o tem. 573 00:39:01,000 --> 00:39:07,000 Ali pa, če delaš za vsak znak v nizu želim, da narediš nekaj, 574 00:39:07,000 --> 00:39:15,000 Za vsak element v matriki želim narediti nekaj, da ta element. 575 00:39:15,000 --> 00:39:18,000 >> Niti in prireditve. 576 00:39:18,000 --> 00:39:21,000 To smo ne pokriva tako izrecno C, 577 00:39:21,000 --> 00:39:23,000 vendar ne pozabite, to iz nič. 578 00:39:23,000 --> 00:39:26,000 To je pojem, ki ima drugačne abecede. 579 00:39:26,000 --> 00:39:32,000 To je tudi ta pojem oddajanje dogodek. 580 00:39:32,000 --> 00:39:37,000 Nekateri ljudje ne uporabljajo oddajati v svojih projektih na začetku, 581 00:39:37,000 --> 00:39:40,000 kar je popolnoma v redu, 582 00:39:40,000 --> 00:39:46,000 vendar so 2 različne načine za rokovanje s to večji problem, imenovane vzporednosti, 583 00:39:46,000 --> 00:39:49,000 ki je kako priti programi za izvajanje 584 00:39:49,000 --> 00:39:54,000 ali navidezno izvede ob istem času? 585 00:39:54,000 --> 00:39:59,000 Različne naloge izvaja druge naloge, hkrati pa so tudi teče. 586 00:39:59,000 --> 00:40:01,000 To je, kako je vaš operacijski sistem zdi, da dela. 587 00:40:01,000 --> 00:40:04,000 Zato je, čeprav, na primer, 588 00:40:04,000 --> 00:40:10,000 Sem dobil moj brskalnik teče, lahko vklopite tudi Spotify in igra pesem. 589 00:40:10,000 --> 00:40:14,000 To je bolj stvar konceptualnega razumevanja. 590 00:40:14,000 --> 00:40:17,000 Jaz bi si na kratko niti 591 00:40:17,000 --> 00:40:21,000 Če želite izvedeti več o tem. 592 00:40:21,000 --> 00:40:26,000 >> Poglejmo, verjamem, da bi lahko bil 593 00:40:26,000 --> 00:40:31,000 Problem pri tem v eni izmed njih. 594 00:40:31,000 --> 00:40:35,000 Še enkrat, mislim, da niti in dogodki niso nekaj, kar bomo zajeli v C 595 00:40:35,000 --> 00:40:41,000 samo zato, ker je to bistveno težje kot v Scratch. 596 00:40:41,000 --> 00:40:44,000 Ne bi smel skrbeti za to, toda zagotovo razumeli koncepte, 597 00:40:44,000 --> 00:40:47,000 razumeti, kaj se dogaja. 598 00:40:47,000 --> 00:40:52,000 Preden gremo naprej, vsa vprašanja na teden 0 gradivo? 599 00:40:52,000 --> 00:40:55,000 Vsi zelo dobro počutim? 600 00:40:55,000 --> 00:41:03,000 Razumevanje spremenljivke in kaj je spremenljivka? 601 00:41:03,000 --> 00:41:08,000 >> Gremo naprej. Teden 1. 602 00:41:08,000 --> 00:41:12,000 Nekaj ​​stvari tukaj, ki niso bili posebej zajeti 603 00:41:12,000 --> 00:41:21,000 V kvizu pregled nujno in tudi bolj konceptualne stvari, da misliti. 604 00:41:21,000 --> 00:41:30,000 Prvi je ta pojem, kar izvorno kodo, prevajalniki in objektno kodo so. 605 00:41:30,000 --> 00:41:32,000 Kdorkoli? Basil. 606 00:41:32,000 --> 00:41:37,000 Je objektno kodo, mislim izvorna koda je tisto, kar si dal v Jek, 607 00:41:37,000 --> 00:41:42,000 in objekt številka je tisto, kar Jek daje ven, tako da lahko računalnik bere program. 608 00:41:42,000 --> 00:41:44,000 Točno tako. 609 00:41:44,000 --> 00:41:47,000 Izvorna koda je koda C, ki ga dejansko tip gor. 610 00:41:47,000 --> 00:41:50,000 Šifra je tisto, kar boste dobili od Jek. 611 00:41:50,000 --> 00:41:54,000 To je 0s in 1s v tej binarni obliki. 612 00:41:54,000 --> 00:41:59,000 Torej, kaj se zgodi, če imate cel kup predmetov datotek, 613 00:41:59,000 --> 00:42:04,000 pravijo, da ste izdelavo projekta ali programa, ki uporablja več datotek izvorne kode, 614 00:42:04,000 --> 00:42:09,000 ki so po dogovoru glede na c datoteko. končnico. 615 00:42:09,000 --> 00:42:13,000 Zato imamo caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Če pišete programe Java jim daš končnico. Java. 617 00:42:18,000 --> 00:42:24,000 Python programov imajo končnico PY pogosto.. 618 00:42:24,000 --> 00:42:26,000 >> Ko imate več. Files C, jih prevesti. 619 00:42:26,000 --> 00:42:29,000 Jek izpljune vse to binarno smeti. 620 00:42:29,000 --> 00:42:33,000 Potem pa zato, ker si samo želim 1 programa 621 00:42:33,000 --> 00:42:37,000 imate povezovalnik povezavo vseh teh datotek predmeta skupaj 622 00:42:37,000 --> 00:42:40,000 1 v izvršljiv pila. 623 00:42:40,000 --> 00:42:45,000 To je tudi tisto, kar se zgodi, ko uporabljate CS50 knjižnico, na primer. 624 00:42:45,000 --> 00:42:50,000 Knjižnica CS50 je tako, da. H header datoteko 625 00:42:50,000 --> 00:42:53,000 da ste prebrali, da je # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 In potem je tudi posebno binarno datoteko knjižnice 627 00:42:58,000 --> 00:43:02,000 , ki je bila zbrati, da je 0s in 1s, 628 00:43:02,000 --> 00:43:08,000 in da, sem zastavo, tako da, če se vrnemo v naše prostore in pričakujemo zelo hitro 629 00:43:08,000 --> 00:43:11,000 V kaj se dogaja, ko se ozremo na naše Jek ukaz, 630 00:43:11,000 --> 00:43:15,000 tisto, kar smo dobili, je to naša izvorna koda datoteko tukaj. 631 00:43:15,000 --> 00:43:18,000 To so kup prevajalnikov zastav. 632 00:43:18,000 --> 00:43:22,000 In potem čisto na koncu, te-l oznake povezava v 633 00:43:22,000 --> 00:43:30,000 dejanske dvojiške datoteke za te 2 knjižnicah, CS50 knjižnico in nato math knjižnice. 634 00:43:30,000 --> 00:43:35,000 >> Razumevanje vsako vrsto namena datotek " 635 00:43:35,000 --> 00:43:38,000 V postopku zbiranja je nekaj, kar boste želeli, da bi lahko 636 00:43:38,000 --> 00:43:43,000 da vsaj visoko pregled ravni v. 637 00:43:43,000 --> 00:43:46,000 Izvorna koda pride noter Objektni kod pride ven. 638 00:43:46,000 --> 00:43:53,000 Datoteke koda objekta povezati, in dobiš lep, izvršljivo datoteko. 639 00:43:53,000 --> 00:43:55,000 Kul. 640 00:43:55,000 --> 00:43:58,000 To je tudi, kjer lahko dobite napake na več mestih 641 00:43:58,000 --> 00:44:00,000 V procesu zbiranja podatkov. 642 00:44:00,000 --> 00:44:04,000 To je, če, na primer, če se ta povezuje zastavo, 643 00:44:04,000 --> 00:44:10,000 CS50 zastavo, in ga izpustite iz prostorov ali če delate v svojo kodo, 644 00:44:10,000 --> 00:44:13,000 to je, če boste dobili napako v fazi povezovanja, 645 00:44:13,000 --> 00:44:18,000 in bo povezovalnik rekel: "Hej, imenovano funkcijo GetString 646 00:44:18,000 --> 00:44:20,000 da je v CS50 knjižnici. " 647 00:44:20,000 --> 00:44:25,000 "Rekel si mi, da je v CS50 knjižnico, in ne najdem kode za to." 648 00:44:25,000 --> 00:44:28,000 To je, kjer boste morali povezati v, in to je ločeno 649 00:44:28,000 --> 00:44:33,000 od prevajalnik napako, ker prevajalnik išče skladnje in takih stvari. 650 00:44:33,000 --> 00:44:38,000 To je dobro vedeti, kaj se dogaja, kdaj. 651 00:44:38,000 --> 00:44:42,000 >> Druge stvari, ki jih vem o tem. 652 00:44:42,000 --> 00:44:49,000 Jaz bi rekel, da si zagotovo želeli, da pogled na kratko na typecasting storiti z Jordanijo 653 00:44:49,000 --> 00:44:55,000 razumeti, kaj ints so pod pokrovom, 654 00:44:55,000 --> 00:44:58,000 kaj znakov so pod pokrovom. 655 00:44:58,000 --> 00:45:02,000 Ko govorimo o ASCII in ga dejansko pogled na ASCII tabelo, 656 00:45:02,000 --> 00:45:07,000 kaj počne nam daje pod pokrovom videz 657 00:45:07,000 --> 00:45:13,000 o tem, kako računalnik dejansko predstavlja kapital in številko 7 658 00:45:13,000 --> 00:45:17,000 in vejica in vprašaj. 659 00:45:17,000 --> 00:45:20,000 Računalnik ima tudi posebne načine za zastopanje 660 00:45:20,000 --> 00:45:23,000 Številka 7 je celo število. 661 00:45:23,000 --> 00:45:27,000 To je poseben način, ki zastopa več kot 7 spremenljivo število točk, 662 00:45:27,000 --> 00:45:29,000 in to so zelo različni. 663 00:45:29,000 --> 00:45:32,000 Typecasting je, kako poveste računalnik "Hej, hočem pretvoriti 664 00:45:32,000 --> 00:45:37,000 iz ene predstavitve v drugo predstavitev. " 665 00:45:37,000 --> 00:45:40,000 Zakaj ne bi pogled na to. 666 00:45:40,000 --> 00:45:44,000 >> Prav tako bi si na kratko o knjižnicah in kratko o prevajalniki. 667 00:45:44,000 --> 00:45:47,000 Tisti, ki govori o procesu zbiranja podatkov, 668 00:45:47,000 --> 00:45:53,000 kaj knjižnica in šel čez nekatera od teh vprašanj, da bi se vprašal tebe. 669 00:45:53,000 --> 00:45:55,000 Vprašanja v zvezi tedna 1 material? 670 00:45:55,000 --> 00:46:03,000 Ali obstajajo teme tukaj, da se zdi zastrašujoče, da želite kritje? 671 00:46:03,000 --> 00:46:07,000 Poskušam udarec po večini prejšnjih temah, tako da bomo lahko prišli do 672 00:46:07,000 --> 00:46:13,000 kazalci in naredil malo rekurzije. 673 00:46:13,000 --> 00:46:15,000 Misli? 674 00:46:15,000 --> 00:46:19,000 Karkoli kritje? 675 00:46:19,000 --> 00:46:21,000 Čas je za nekatere morda čokolado? 676 00:46:21,000 --> 00:46:23,000 Vi delate z njim. 677 00:46:23,000 --> 00:46:26,000 Bom obdržati na mojem srkanje kave. 678 00:46:26,000 --> 00:46:31,000 2. teden. 679 00:46:31,000 --> 00:46:34,000 Dobra ideja, dobra odločitev. 680 00:46:34,000 --> 00:46:38,000 V tednu 2 smo se pogovarjali malo več o funkcijah. 681 00:46:38,000 --> 00:46:43,000 >> V prvih nekaj problematičnih skupin nismo zares napisal nobene funkcije sploh 682 00:46:43,000 --> 00:46:45,000 razen kar deluje? 683 00:46:45,000 --> 00:46:47,000 [Študent] >> Main Main., Točno. 684 00:46:47,000 --> 00:46:51,000 In tako smo videli različne kostume, da je glavni nosi. 685 00:46:51,000 --> 00:46:54,000 Tam je tista, v kateri je potrebno nobenih argumentov, 686 00:46:54,000 --> 00:46:58,000 in smo pravkar rekel praznino v med oklepaju, 687 00:46:58,000 --> 00:47:01,000 in potem je tu še druga, če si želimo, da argumente v ukazni vrstici, 688 00:47:01,000 --> 00:47:08,000 in kot smo videli, da je, če imate int argc in argv paleto niz 689 00:47:08,000 --> 00:47:13,000 ali zdaj, ko smo dejansko izpostavljeni niz, da je char *, da je 690 00:47:13,000 --> 00:47:20,000 bomo začeli pisati kot char * argv in nato konzole. 691 00:47:20,000 --> 00:47:22,000 V Set Problem 3, fantje videli kup funkcij, 692 00:47:22,000 --> 00:47:27,000 in ti izvajajo kup funkcij, pripravi, poglej gor, Izokrenuti. 693 00:47:27,000 --> 00:47:31,000 Prototipov so bile vse napisano tam za vas. 694 00:47:31,000 --> 00:47:33,000 >> Kaj sem hotel govoriti o tukaj nalog, ki zelo hitro 695 00:47:33,000 --> 00:47:38,000 je, da so 3 deli zanje, ko ste napisali funkcijo. 696 00:47:38,000 --> 00:47:43,000 Moraš natančno povratno obliko funkcije. 697 00:47:43,000 --> 00:47:46,000 Moraš navesti ime funkcije, nato pa morate navesti 698 00:47:46,000 --> 00:47:51,000 seznam argumentov ali seznam parametrov. 699 00:47:51,000 --> 00:47:57,000 Na primer, če bi bil jaz napisati funkcijo, da povzamem kup celih 700 00:47:57,000 --> 00:48:03,000 in se nato vrne k meni vsoto, kar bi bila moja vrnitev tip 701 00:48:03,000 --> 00:48:06,000 če sem hotel, da bi povzeli cela in se nato vrne vsoto? 702 00:48:06,000 --> 00:48:12,000 Potem pa ime funkcije. 703 00:48:12,000 --> 00:48:27,000 Če grem naprej in pisati v zeleni barvi, ta del je vrnitev tip. 704 00:48:27,000 --> 00:48:34,000 Ta del je ime. 705 00:48:34,000 --> 00:48:40,000 In potem v oklepaju 706 00:48:40,000 --> 00:48:46,000 je, če sem dal argumente, 707 00:48:46,000 --> 00:48:56,000 pogosto skrajšano izbir, včasih imenovanih params za parametre. 708 00:48:56,000 --> 00:49:00,000 In če ga imate, ga samo določi enega. 709 00:49:00,000 --> 00:49:06,000 Če imate več jih ločite z vejico 1. 710 00:49:06,000 --> 00:49:13,000 In za vsak argument mu daš 2 stvari, ki so, Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Moraš dati na vrsto in nato ime. 712 00:49:18,000 --> 00:49:21,000 In potem ime, in ime je ime, ki ga boš uporabila 713 00:49:21,000 --> 00:49:25,000 da se sklicuje na to trditev v znesku funkcijo, 714 00:49:25,000 --> 00:49:27,000 v funkciji, ki jo trenutno piše. 715 00:49:27,000 --> 00:49:32,000 >> Saj ni treba, na primer, če bom povzamem, 716 00:49:32,000 --> 00:49:41,000 torej množica celih-Bomo naredil int array, 717 00:49:41,000 --> 00:49:46,000 in jaz dam nekaj zavitih oklepajih so- 718 00:49:46,000 --> 00:49:51,000 potem ko sem opraviti array funkcijo SUM 719 00:49:51,000 --> 00:49:55,000 Sem ga prenesti na prvem mestu na seznamu argumentov. 720 00:49:55,000 --> 00:49:59,000 Toda matrika, ki sem poslati v ne imeti ime Arr. 721 00:49:59,000 --> 00:50:07,000 Arr se bo, kako sem se nanašajo na to trditev v telesu funkcije. 722 00:50:07,000 --> 00:50:10,000 Druga stvar, da moramo upoštevati, 723 00:50:10,000 --> 00:50:14,000 in to je nekoliko drugačna od funkcije, ampak mislim, da je pomembno, 724 00:50:14,000 --> 00:50:20,000 je, da je v C, ko pišem funkcijo, kot je ta 725 00:50:20,000 --> 00:50:29,000 Kako naj vem, koliko elementi so v tem polju? 726 00:50:29,000 --> 00:50:31,000 To je neke vrste trik vprašanje. 727 00:50:31,000 --> 00:50:35,000 Pogovarjala sva se o tem malo v oddelku prejšnji teden. 728 00:50:35,000 --> 00:50:40,000 Kako naj vem, število elementov znotraj array v C? 729 00:50:40,000 --> 00:50:44,000 Ali obstaja način? 730 00:50:44,000 --> 00:50:49,000 >> Izkazalo se je, da ne obstaja način, da veš. 731 00:50:49,000 --> 00:50:52,000 Moraš jo prenesti na ločeno. 732 00:50:52,000 --> 00:50:55,000 Obstaja trik, da lahko narediš 733 00:50:55,000 --> 00:51:00,000 če ste v isti funkciji, v kateri je bila razglašena za niz, 734 00:51:00,000 --> 00:51:04,000 in delate z dimnika matrike. 735 00:51:04,000 --> 00:51:06,000 Ampak to deluje samo, če ste v isti funkciji. 736 00:51:06,000 --> 00:51:09,000 Ko boste opravili niz na drugo delovno mesto ali, če ste prijavljeni niz 737 00:51:09,000 --> 00:51:12,000 in si dal to vrsto na kup, ste uporabili malloc 738 00:51:12,000 --> 00:51:15,000  in da je vrsta stvari, so vse stave off. 739 00:51:15,000 --> 00:51:18,000 Potem boste dejansko morali opraviti približno 740 00:51:18,000 --> 00:51:21,000 poseben razlog ali drug parameter, 741 00:51:21,000 --> 00:51:23,000 vam pove, kako velik je matrika. 742 00:51:23,000 --> 00:51:28,000 V tem primeru, bi želeli uporabiti vejico Žal mi je, da se bo z zaslona tu- 743 00:51:28,000 --> 00:51:32,000 in sem se ustavila še v drugi argument 744 00:51:32,000 --> 00:51:40,000  in ga imenujemo int len ​​za dolžino. 745 00:51:40,000 --> 00:51:44,000 >> Ena stvar, ki bi lahko prišel na kvizu 746 00:51:44,000 --> 00:51:49,000 vas prosim, da napišete ali izvajajo določeno funkcijo, imenovano nekaj. 747 00:51:49,000 --> 00:51:54,000 Če ne bomo vam prototip, tako da je vse to tukaj, 748 00:51:54,000 --> 00:51:58,000 ves ta nered, se imenuje funkcija izjavo ali funkcijo prototip, 749 00:51:58,000 --> 00:52:01,000 To je ena od prvih stvari, ki jih boste želeli Zakovati, če je ne glede na 750 00:52:01,000 --> 00:52:03,000 vam takoj na kvizu. 751 00:52:03,000 --> 00:52:06,000 Drugi trik, ki sem se naučil, je, da 752 00:52:06,000 --> 00:52:11,000 rekel mi dal prototip funkcije, in mi rekel: "Hej, moraš napisati." 753 00:52:11,000 --> 00:52:16,000 Znotraj zavite oklepaje, ki jih imate na kvizu 754 00:52:16,000 --> 00:52:20,000 Če opazite, da je donosnost tip in opazite, da se vrnejo v 755 00:52:20,000 --> 00:52:25,000 je nekaj drugega kot praznina, kar pomeni, da funkcija ne vrne ničesar, 756 00:52:25,000 --> 00:52:28,000 nato pa eno stvar, ki jo zagotovo želeli storiti, je napisati 757 00:52:28,000 --> 00:52:33,000 nekakšno izjavo vrnitvi na samem koncu funkcije. 758 00:52:33,000 --> 00:52:40,000 Vrni se, v tem primeru bomo dal prazno, ker želimo, da izpolnite v prazno. 759 00:52:40,000 --> 00:52:44,000 Ampak to pride misliš na pravi način, kako bom se lotiti tega problema? 760 00:52:44,000 --> 00:52:49,000 In to vam pove, da boste morali vrniti vrednost 761 00:52:49,000 --> 00:52:51,000 s pojasnilom o funkciji. 762 00:52:51,000 --> 00:52:54,000 >> Ja. >> [Študent] Ali ime uporablja, ko bomo pisno kodo, na kvizu? 763 00:52:54,000 --> 00:52:58,000 Tako kot zatoka in da je vrsta stvari? >> [Študent] Ja. 764 00:52:58,000 --> 00:53:00,000 Ne, ni tako veliko. 765 00:53:00,000 --> 00:53:09,000 Mislim, da je veliko, to je nekaj, kar bomo pojasniti, na kvizu na dan, 766 00:53:09,000 --> 00:53:15,000 ampak ponavadi skrbi # obsega in vrste stvari, to je nekako zunaj. 767 00:53:15,000 --> 00:53:17,000 [Študent] Ali želite komentirati vaše lastnoročno kodo? 768 00:53:17,000 --> 00:53:19,000 Ali želite komentirati vaše lastnoročno kodo? 769 00:53:19,000 --> 00:53:24,000 Komentiranje je vedno dobro, če ste v skrbeh, delno kredita 770 00:53:24,000 --> 00:53:29,000 ali želite, da sporočijo svojo namero z grader. 771 00:53:29,000 --> 00:53:33,000 Ampak, spet bo pojasniti, na kvizu sam in na dan kviz, 772 00:53:33,000 --> 00:53:39,000 ampak ne verjamem, da boste morali pisati komentarje, ne. 773 00:53:39,000 --> 00:53:42,000 Ponavadi ne, ampak to je zagotovo reč, kjer 774 00:53:42,000 --> 00:53:45,000 lahko sporočijo svoje namere, kot: "Hej, to je, če grem z njo." 775 00:53:45,000 --> 00:53:49,000 In včasih, da lahko pomaga pri delni kredita. 776 00:53:49,000 --> 00:53:51,000 Kul. 777 00:53:51,000 --> 00:53:53,000 >> Basil. 778 00:53:53,000 --> 00:53:56,000 [Bazilika] Kakšna je razlika med razglasitvi, recimo, int Lang 779 00:53:56,000 --> 00:54:03,000 V argumentov ali parametrov v primerjavi razglasitvi spremenljivke v funkciji? 780 00:54:03,000 --> 00:54:05,000 Vau, kava znižala sapnika. 781 00:54:05,000 --> 00:54:07,000 [Bazilika] Kot stvari, ki jih želite dati v argumentih. 782 00:54:07,000 --> 00:54:09,000 Ja, to je veliko vprašanje. 783 00:54:09,000 --> 00:54:11,000 Kako se odločite, kaj stvari, ki jih želite dati v obrazložitvi 784 00:54:11,000 --> 00:54:17,000 v primerjavi Katere stvari morate storiti znotraj funkcije? 785 00:54:17,000 --> 00:54:24,000 V tem primeru smo vključili oboje kot argumente 786 00:54:24,000 --> 00:54:29,000 ker oni so nekaj, kdor se bo uporabil funkcijo vsote 787 00:54:29,000 --> 00:54:32,000 Treba je določiti tiste stvari. 788 00:54:32,000 --> 00:54:35,000 >> Vsota funkcije, kot smo govorili, ni mogoče vedeti, 789 00:54:35,000 --> 00:54:40,000 kako velik niz je dobil od klicatelja ali kdor uporablja funkcijo vsote. 790 00:54:40,000 --> 00:54:44,000 To nikakor ne more vedeti, kako velika je ta matrika. 791 00:54:44,000 --> 00:54:48,000 Razlog peljemo na tej dolžini tukaj kot argument 792 00:54:48,000 --> 00:54:51,000 zato, ker je to nekaj, kar smo v bistvu govori klicatelja funkcijo, 793 00:54:51,000 --> 00:54:55,000 Kdor bo uporabil funkcijo vsote, "Hej, ne samo, da boste morali, da nam niz 794 00:54:55,000 --> 00:54:59,000 od ints, imate tudi, da nam pove, kako velik niz, ki ste nam je. " 795 00:54:59,000 --> 00:55:03,000 [Bazilika] Tisti, ki bodo tako lahko argumenti v ukazni vrstici? 796 00:55:03,000 --> 00:55:06,000 Ne, to so dejanski argumenti, ki bi lahko preide na funkcijo. 797 00:55:06,000 --> 00:55:10,000 >> Naj jaz novo stran tukaj. 798 00:55:10,000 --> 00:55:13,000 Bi [Bazilika] Kot ime pass- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Če imam int main (void) 800 00:55:24,000 --> 00:55:27,000 in jaz bom dal v moji vrnitvi 0 dol na dnu, 801 00:55:27,000 --> 00:55:31,000 in povedati hočem, da pokličete funkcijo vsote. 802 00:55:31,000 --> 00:55:42,000 Hočem reči, int x = vsota (); 803 00:55:42,000 --> 00:55:46,000 Če želite uporabljati funkcijo vsote moram opraviti tako v polju, da želim, da bi povzeli 804 00:55:46,000 --> 00:55:51,000 in je dolžina niza, tako da to je, če 805 00:55:51,000 --> 00:55:54,000 ob predpostavki, da sem imel vrsto ints, 806 00:55:54,000 --> 00:56:12,000 reči sem imel int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 vrste uporabe, ki je vdrl do sintakso tam, 808 00:56:16,000 --> 00:56:21,000 potem kaj želim storiti, je, skratka bi želel prenesti v 809 00:56:21,000 --> 00:56:27,000 tako numbaz in številka 3 810 00:56:27,000 --> 00:56:30,000 povedati funkcijo vsote "V redu, tukaj je polje Želim si, da bi povzeli." 811 00:56:30,000 --> 00:56:34,000 "Tukaj je njegova velikost." 812 00:56:34,000 --> 00:56:39,000 Ima to smisel? Ali to odgovor na vaše vprašanje? 813 00:56:39,000 --> 00:56:42,000 >> V mnogih pogledih je pa vzporedno, kaj delamo z glavno 814 00:56:42,000 --> 00:56:44,000 ko bomo imeli argumente v ukazni vrstici. 815 00:56:44,000 --> 00:56:47,000 Program kot Cezarjeva šifra, na primer, da je potrebno 816 00:56:47,000 --> 00:56:53,000 argumenti v ukazni vrstici ne bi mogli storiti ničesar. 817 00:56:53,000 --> 00:56:57,000 Ne bi vedel, kako za šifriranje, če nisi povedal, kaj je ključno za uporabo 818 00:56:57,000 --> 00:57:03,000 ali, če tega nisi povedal, kaj si hotel niz za šifriranje. 819 00:57:03,000 --> 00:57:08,000 Pozove za vnos, to je, če imamo 2 različne mehanizme 820 00:57:08,000 --> 00:57:14,000 za sprejemanje vnosa od uporabnika, za sprejemanje informacij od uporabnika. 821 00:57:14,000 --> 00:57:19,000 Za Problem Set 1 smo videli to GetInt, GetString, GetFloat pot 822 00:57:19,000 --> 00:57:26,000 spodbudi za vhod in je pozval, da z uporabo standardnega vhodni tok. 823 00:57:26,000 --> 00:57:28,000 To je nekoliko drugačna. 824 00:57:28,000 --> 00:57:31,000 To je nekaj, kar lahko naredite naenkrat, v nasprotju z 825 00:57:31,000 --> 00:57:35,000 Ko odprete program, ob zagonu program teče. 826 00:57:35,000 --> 00:57:41,000 Argumenti ukazne vrstice so vsi navedeni ob zagonu program teče. 827 00:57:41,000 --> 00:57:47,000 Smo bili z mešanjem dveh od teh. 828 00:57:47,000 --> 00:57:52,000 Ko smo se uporabljati argumente za funkcijo, to je podobno kot argumenti v ukazni vrstici v glavni. 829 00:57:52,000 --> 00:57:56,000 To je, ko ga pokličeš funkcijo morate povedati 830 00:57:56,000 --> 00:58:05,000 kaj točno potrebuje za opravljanje svojih nalog. 831 00:58:05,000 --> 00:58:08,000 Še ena dobra stvar, ki si in bom pustil gledate na to v svojem prostem času, 832 00:58:08,000 --> 00:58:11,000 in je bila zajeta v kvizu, je ta pojem obsega 833 00:58:11,000 --> 00:58:15,000 in lokalne spremenljivke v primerjavi z globalnimi spremenljivkami. 834 00:58:15,000 --> 00:58:18,000 Ali pozorna na to. 835 00:58:18,000 --> 00:58:23,000 >> Zdaj, ko smo dobili na ostalih stvareh, 836 00:58:23,000 --> 00:58:27,000 v tednu 3 smo začeli govoriti o iskanju in razvrščanju. 837 00:58:27,000 --> 00:58:32,000 Iskanje in razvrščanje, vsaj v CS50, 838 00:58:32,000 --> 00:58:39,000 je zelo uvod v nekaj bolj teoretičnih delih računalništva. 839 00:58:39,000 --> 00:58:42,000 Problem iskanja, problem razvrščanja 840 00:58:42,000 --> 00:58:46,000 so velike, kanonske težave. 841 00:58:46,000 --> 00:58:52,000 Kako se vam zdi posebno številko v paleto milijard števil? 842 00:58:52,000 --> 00:58:55,000 Kako se vam zdi posebno ime znotraj imenika 843 00:58:55,000 --> 00:58:59,000 , ki je shranjena na vašem prenosnem računalniku? 844 00:58:59,000 --> 00:59:04,000 In tako smo se uvede ta pojem asimptotičnim vedno vodijo 845 00:59:04,000 --> 00:59:11,000 da bo res količinsko kako dolgo, kako težko je to problem so, 846 00:59:11,000 --> 00:59:14,000 kako dolgo traja, da rešiti. 847 00:59:14,000 --> 00:59:20,000 V Menim, da je kviz 2011 pa je problem, da mislim, da si zasluži 848 00:59:20,000 --> 00:59:27,000 zajema zelo hitro, kar je ta, problem 12. 849 00:59:27,000 --> 00:59:32,000 O ne, to je Omega. 850 00:59:32,000 --> 00:59:41,000 >> Tu govorimo o najhitrejšem možnem času delovanja 851 00:59:41,000 --> 00:59:46,000 za določen algoritem, nato pa najpočasnejši mogoče teči čas. 852 00:59:46,000 --> 00:59:52,000 To Omega in O so res samo bližnjice. 853 00:59:52,000 --> 00:59:55,000 Oni simbolov bližnjice za povedati 854 00:59:55,000 --> 00:59:59,000 kako hitro se v najboljšem možnem primeru bo naš algoritem run, 855 00:59:59,000 --> 01:00:06,000 in kako počasi v najslabšem možnem primeru bo naš algoritem deluje? 856 01:00:06,000 --> 01:00:10,000 Naredimo nekaj teh, te so zajemale tudi 857 01:00:10,000 --> 01:00:13,000 v kratkem na asimptotične zapis, ki sem ga zelo priporočam. 858 01:00:13,000 --> 01:00:17,000 Jackson je naredil res dobro delo. 859 01:00:17,000 --> 01:00:23,000 Z iskanjem binarni, govorimo o binarnem iskanju kot da algoritem, 860 01:00:23,000 --> 01:00:28,000 in smo ponavadi govorimo o tem po svoji veliki O. 861 01:00:28,000 --> 01:00:30,000 Kaj je velik O? 862 01:00:30,000 --> 01:00:34,000 Kaj je najpočasnejša možna čas delovanja binarnega iskanja? 863 01:00:34,000 --> 01:00:36,000 [Študent] N ²? 864 01:00:36,000 --> 01:00:41,000 Zapri, mislim, da je podobno. 865 01:00:41,000 --> 01:00:43,000 To je veliko hitreje kot to. 866 01:00:43,000 --> 01:00:45,000 [Študent] Binary? >> Ja, binarno iskanje. 867 01:00:45,000 --> 01:00:47,000 [Študent] je log n. 868 01:00:47,000 --> 01:00:49,000 Prijavite n, tako da kaj vpisati, n pomeni? 869 01:00:49,000 --> 01:00:51,000 To polovice ga vsako ponovitev. 870 01:00:51,000 --> 01:00:56,000 Točno, tako da v primeru morebitne najpočasnejši, 871 01:00:56,000 --> 01:01:00,000 torej, če imate urejen niz 872 01:01:00,000 --> 01:01:08,000 na milijon števil in števila iščete 873 01:01:08,000 --> 01:01:14,000 je bodisi zelo prvi element v matriki ali zadnjega elementa v matriki. 874 01:01:14,000 --> 01:01:18,000 Ne pozabite, binarno iskanje algoritem deluje tako, da si v srednji element, 875 01:01:18,000 --> 01:01:21,000 vidim, če je to tekma, ki jo iščete. 876 01:01:21,000 --> 01:01:23,000 Če je tako, potem super, da ste ga našli. 877 01:01:23,000 --> 01:01:27,000 >> V najboljšem možnem primeru, kako hitro naredi vožnjo binarno iskanje? 878 01:01:27,000 --> 01:01:29,000 [1] Študenti. 879 01:01:29,000 --> 01:01:32,000 1, je stalna čas, veliki O od 1. Ja. 880 01:01:32,000 --> 01:01:36,000 [Študent] Imam vprašanje. Ko rečeš prijavite n, misliš v zvezi z osnovo 2, kajne? 881 01:01:36,000 --> 01:01:40,000 Ja, to je pa druga stvar. 882 01:01:40,000 --> 01:01:44,000 Pravimo log n, in mislim, da ko sem bil v srednji šoli 883 01:01:44,000 --> 01:01:48,000 Vedno sem domneva, da je bila osnova 10 dnevnik. 884 01:01:48,000 --> 01:01:57,000 Ja, ja, se prijavite baza 2 običajno je tisto, kar bomo uporabili. 885 01:01:57,000 --> 01:02:02,000 Spet vrača v binarno iskanje, če iščete bodisi 886 01:02:02,000 --> 01:02:05,000 element na samem koncu pa element na samem začetku, 887 01:02:05,000 --> 01:02:08,000 ker začneš na sredini in potem zavržejo 888 01:02:08,000 --> 01:02:13,000 kar 1/2 ne izpolnjuje meril, ki jih iščete, 889 01:02:13,000 --> 01:02:15,000 in greš na naslednjo 1/2 in 1/2 naslednji in naslednji pol. 890 01:02:15,000 --> 01:02:19,000 Če sem iskal največji element v matriki celo milijonov 891 01:02:19,000 --> 01:02:25,000 Jaz jo bom prepolovila na najbolj dnevnik 1.000.000 krat 892 01:02:25,000 --> 01:02:28,000 preden sem končno testiranje in videli, da je element iščem 893 01:02:28,000 --> 01:02:33,000 je v največji ali najvišji indeks matrike, 894 01:02:33,000 --> 01:02:38,000 in bo to trajalo dnevnik n, se prijavite v višini 1 milijona časov. 895 01:02:38,000 --> 01:02:40,000 >> Bubble sort. 896 01:02:40,000 --> 01:02:43,000 Se vi spominjate algoritem razvrščanja mehurček? 897 01:02:43,000 --> 01:02:47,000 Kevin, mi lahko daš hitro Rekapitulacija o tem, kaj se je zgodilo v algoritem razvrščanja mehurček? 898 01:02:47,000 --> 01:02:50,000 [Kevin] V bistvu gre skozi vse na seznamu. 899 01:02:50,000 --> 01:02:52,000 Zdi se na prvi dve. 900 01:02:52,000 --> 01:02:55,000 Če je prva večja od druge 1 jim zamenjav. 901 01:02:55,000 --> 01:02:58,000 Potem se primerja drugi in tretji, isto, zamenjav, 902 01:02:58,000 --> 01:03:00,000 tretja in četrta, vse do konca. 903 01:03:00,000 --> 01:03:03,000 Večje število bo spremljala do konca. 904 01:03:03,000 --> 01:03:07,000 In potem, ko pa je več zank ste končali. 905 01:03:07,000 --> 01:03:11,000 Točno, kaj je rekel Kevin, je, da bomo gledal večje število 906 01:03:11,000 --> 01:03:15,000 bubble do konca niza. 907 01:03:15,000 --> 01:03:19,000 Na primer, ali nam lahko sprehod skozi ta primer, če je to naš niz? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Boste lahko 2 in 3. 909 01:03:21,000 --> 01:03:23,000 3 je večje od 2, tako da jih swap. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Prav tako smo zamenjali ti, in tako smo dobili 2, 3, 6, 4, in 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Potem pa primerjajte 3 in 6. 912 01:03:31,000 --> 01:03:33,000 3 je manjši od 6, zato jih pustite, 913 01:03:33,000 --> 01:03:37,000 in 6 in 4, bi jih zamenjali, ker je manjši od 4 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Prav tako sem dobil 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] in 9 je večji od 6, tako da ga zapusti. 916 01:03:46,000 --> 01:03:48,000 In ti pojdi nazaj skozi to še enkrat. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Sem naredil v tem trenutku? >> [Kevin] No 918 01:03:50,000 --> 01:03:52,000 In zakaj sem nisem naredil v tem trenutku? 919 01:03:52,000 --> 01:03:54,000 Ker izgleda, da je urejen moj polje. Gledam na to. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Pojdi skozi to še enkrat in se prepričajte, da ni več zamenjav 921 01:03:57,000 --> 01:04:00,000 preden boste lahko popolnoma ustavi. 922 01:04:00,000 --> 01:04:04,000 Točno, tako da boste morali voditi skozi in se prepričajte, da ne obstajajo zamenjave 923 01:04:04,000 --> 01:04:06,000 da si lahko na tej točki. 924 01:04:06,000 --> 01:04:08,000 To je bil res samo srečo, kot si rekel, da smo se znašli 925 01:04:08,000 --> 01:04:12,000 Samo da bi jim bilo 1 skozi in smo razvrščeni. 926 01:04:12,000 --> 01:04:16,000 Ampak za to v splošnem primeru bomo dejansko morali to storiti znova in znova. 927 01:04:16,000 --> 01:04:20,000 In v resnici je bil to primer na najboljši možen primeru, 928 01:04:20,000 --> 01:04:24,000 kot smo videli v težave. 929 01:04:24,000 --> 01:04:28,000 Videli smo, da je n najboljši možni primer. 930 01:04:28,000 --> 01:04:32,000 Šli smo skozi polja 1-krat. 931 01:04:32,000 --> 01:04:35,000 Kaj je najslabši možni primer za to algoritem? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 In kaj to izgleda? Kaj bi bi polje videti kot da bi n ² čas? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [neslišno] razvrščeni. 935 01:04:43,000 --> 01:04:51,000 Točno tako, če bi imel paleto 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 Najprej želi 9 mehurček vso pot navzgor. 937 01:04:54,000 --> 01:04:59,000 Po 1 ponovitvi bi imeli 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Potem pa bi se mehurček 7, 6, 5, 2, 7, 9 in tako naprej in tako naprej. 939 01:05:07,000 --> 01:05:13,000 >> Morali bi iti skozi celoten niz n-krat, 940 01:05:13,000 --> 01:05:16,000 in lahko dejansko dobil bolj natančen od tega 941 01:05:16,000 --> 01:05:23,000 ker ko smo premaknili 9 vso pot navzgor v svoji zadnji možni položaj 942 01:05:23,000 --> 01:05:26,000 vemo, da nikoli ne bo treba primerjati z tega elementa ponovno. 943 01:05:26,000 --> 01:05:29,000 Ko smo začeli z vpihavanjem 7 do 944 01:05:29,000 --> 01:05:35,000 vemo, da bomo lahko ustavi, ko je 7 je tik pred 9 945 01:05:35,000 --> 01:05:37,000 saj smo že v primerjavi z 9 nanj. 946 01:05:37,000 --> 01:05:46,000 Če to naredite v pameten način, da to ni res, mislim, da je veliko časa. 947 01:05:46,000 --> 01:05:49,000 Ne boš primerjati vse možne kombinacije [neslišno] 948 01:05:49,000 --> 01:05:55,000 vsakič ko greš skozi vsako ponovitev. 949 01:05:55,000 --> 01:05:59,000 Ampak še vedno, ko govorimo o tem zgornja meja rečemo, da je 950 01:05:59,000 --> 01:06:04,000 iščete na n ² primerjave vso pot skozi. 951 01:06:04,000 --> 01:06:12,000 >> Greva nazaj, in ker smo začeli malo kratko o času 952 01:06:12,000 --> 01:06:15,000 Jaz bi rekel, da je vsekakor treba iti skozi preostanek te tabele 953 01:06:15,000 --> 01:06:17,000 izpolniti vse ven. 954 01:06:17,000 --> 01:06:20,000 Pomislite na primer. Pomislite na konkretnih primerih. 955 01:06:20,000 --> 01:06:22,000 To je zelo priročen in koristen storiti. 956 01:06:22,000 --> 01:06:25,000 Ga potegnili. 957 01:06:25,000 --> 01:06:28,000 To je neke vrste tabelo, kot greš skozi v računalništvu 958 01:06:28,000 --> 01:06:32,000 kar bi bilo res začeli poznati te tako srce. 959 01:06:32,000 --> 01:06:34,000 To so vrste vprašanj, ki jih dobite v intervjujih. 960 01:06:34,000 --> 01:06:36,000 To so vrste stvari, ki jih je dobro vedeti, 961 01:06:36,000 --> 01:06:41,000 in razmišljati o tem roba primerih res poskušal ugotoviti, kako razmišljajo o 962 01:06:41,000 --> 01:06:45,000 vedoč, da za mehurček razvrstite najslabši možni nabor 963 01:06:45,000 --> 01:06:52,000 rešiti s tem je tista, ki je v obratnem vrstnem redu. 964 01:06:52,000 --> 01:06:58,000 >> Kazalci. Pogovorimo se malo o kazalca. 965 01:06:58,000 --> 01:07:03,000 V zadnjih nekaj minutah imamo tukaj 966 01:07:03,000 --> 01:07:11,000 Vem, da je to nekaj, skupaj z datoteko I / O tem je precej nova. 967 01:07:11,000 --> 01:07:19,000 Ko govorimo o namig, zakaj želimo govoriti o kazalci 968 01:07:19,000 --> 01:07:24,000 Kajti, ena, ko delamo v C 969 01:07:24,000 --> 01:07:33,000 smo res na precej nizki ravni, v primerjavi z večino sodobnih programskih jezikih. 970 01:07:33,000 --> 01:07:38,000 Mi smo dejansko sposobni manipulirati spremenljivke v pomnilniku, 971 01:07:38,000 --> 01:07:43,000 ugotoviti, kje se dejansko nahaja v našem RAM. 972 01:07:43,000 --> 01:07:46,000 Ko ste šli na tečaje za operacijski sistem, da boste videli 973 01:07:46,000 --> 01:07:48,000 da je to spet neke vrste abstrakcije. 974 01:07:48,000 --> 01:07:50,000 To dejansko ne drži. 975 01:07:50,000 --> 01:07:52,000 Imamo navidezni pomnilnik, ki je skrival te podatke od nas. 976 01:07:52,000 --> 01:07:58,000 >> Ampak za zdaj lahko domnevamo, da če imate program, 977 01:07:58,000 --> 01:08:02,000 na primer, ko ste začeli prikazovati Cezarjeva šifra za program 978 01:08:02,000 --> 01:08:06,000 Jaz bom preklopil nazaj na moj iPad res hitro- 979 01:08:06,000 --> 01:08:12,000 da je na samem začetku svojega programa, če imate, recimo, 980 01:08:12,000 --> 01:08:15,000 4 GB RAM-a na vaš prenosnik, 981 01:08:15,000 --> 01:08:21,000 boste dobili v prahi ta kos, mi pa bomo to imenujemo RAM. 982 01:08:21,000 --> 01:08:25,000 In začne se na mestu, ki ga bomo klic 0, 983 01:08:25,000 --> 01:08:30,000 in se konča na mestu, da bomo poklicali 4 GB. 984 01:08:30,000 --> 01:08:37,000 Res ne morem pisati. Človek, ki je vdrl. 985 01:08:37,000 --> 01:08:40,000 Ko se vaš program izvaja 986 01:08:40,000 --> 01:08:44,000 operacijski sistem reže do RAM, 987 01:08:44,000 --> 01:08:51,000 in določa različne segmente za različne dele svojega programa, da živijo palcev 988 01:08:51,000 --> 01:08:58,000 Tu spodaj je to področje nekako nikogaršnji zemlji. 989 01:08:58,000 --> 01:09:02,000 Ko greš malo dlje tukaj 990 01:09:02,000 --> 01:09:05,000 ste dejansko dobil mesto, kjer 991 01:09:05,000 --> 01:09:09,000 Koda za vaše programa življenja. 992 01:09:09,000 --> 01:09:13,000 To dejansko binarno kodo, da postane izvršljiva datoteka dejansko naložen v pomnilnik 993 01:09:13,000 --> 01:09:17,000 Ko zaženete program, in živi v segmentu kode. 994 01:09:17,000 --> 01:09:22,000 In kot tvoj program izvaja procesor izgleda v tem segmentu kode 995 01:09:22,000 --> 01:09:24,000 da ugotovimo, kaj je naslednje navodilo? 996 01:09:24,000 --> 01:09:27,000 Kaj je naslednja vrstica kode moram izvesti? 997 01:09:27,000 --> 01:09:31,000 >> Tam je tudi Podatkovni segment, in to je, če ti niz konstante 998 01:09:31,000 --> 01:09:34,000 se shranijo, da ste bili z uporabo. 999 01:09:34,000 --> 01:09:42,000 In potem naprej do tam je ta kraj, imenovan kup. 1000 01:09:42,000 --> 01:09:46,000 Imamo dostop do pomnilnika tam z malloc, 1001 01:09:46,000 --> 01:09:49,000 in nato v smeri sam vrh svojega programa 1002 01:09:49,000 --> 01:09:52,000 tam je kup, 1003 01:09:52,000 --> 01:09:57,000 in to je, če smo bili igranje za večino začetku. 1004 01:09:57,000 --> 01:09:59,000 To ni v merilu ali kaj podobnega. 1005 01:09:59,000 --> 01:10:03,000 Veliko tega je zelo odvisna od stroja, 1006 01:10:03,000 --> 01:10:10,000 operacijski sistem odvisen, toda to je relativno, kako se stvari chunked gor. 1007 01:10:10,000 --> 01:10:17,000 Ko zaženete program in ga razglasi spremenljivka se imenuje x- 1008 01:10:17,000 --> 01:10:27,000 Grem pripraviti novo okno spodaj, in to se bo RAM, kot dobro. 1009 01:10:27,000 --> 01:10:29,000 In jaz bom pogledal. 1010 01:10:29,000 --> 01:10:34,000 Mi bomo pripraviti nazobčane črte, ki označuje to je le majhen del pomnilnika RAM 1011 01:10:34,000 --> 01:10:38,000 in ne vsega, kot smo pripraviti na vrhu. 1012 01:10:38,000 --> 01:10:43,000 >> Če Izjavljam celoštevilsko spremenljivko z imenom x, 1013 01:10:43,000 --> 01:10:49,000 potem tisto, kar sem dejansko dobil je preslikava 1014 01:10:49,000 --> 01:10:54,000 , ki je shranjena v tabeli simbolov mojega programa 1015 01:10:54,000 --> 01:11:00,000 ki povezuje ime x na tem območju spomina, ki sem jih sestavijo 1016 01:11:00,000 --> 01:11:03,000 Tukaj med navpičnimi vrsticami. 1017 01:11:03,000 --> 01:11:08,000 Če imam vrstico kode v mojem programu, ki pravi x = 7 1018 01:11:08,000 --> 01:11:15,000 procesor ve, "Oh, v redu, jaz vem, da živi x na tej lokaciji v spomin." 1019 01:11:15,000 --> 01:11:25,000 "Jaz bom, da gredo naprej in napisati 7 tam." 1020 01:11:25,000 --> 01:11:28,000 Kako veš, kaj je to mesto v spomin? 1021 01:11:28,000 --> 01:11:30,000 No, da je vse narejeno v času prevajanja. 1022 01:11:30,000 --> 01:11:34,000 Prevajalnik skrbi za dodeljevanje kjer vsaka od spremenljivk so šli 1023 01:11:34,000 --> 01:11:40,000 ter ustanovitev posebnega preslikavo oziroma povezovanje pik 1024 01:11:40,000 --> 01:11:43,000 med simbolom in kam gre, variabilnega ime 1025 01:11:43,000 --> 01:11:46,000 in če se dogaja, da živijo v spominu. 1026 01:11:46,000 --> 01:11:50,000 Vendar se je izkazalo, da bomo lahko dejansko dostop v naše programe, kot dobro. 1027 01:11:50,000 --> 01:11:55,000 To postane pomembno, ko bomo začeli govoriti o nekaterih podatkovnih struktur, 1028 01:11:55,000 --> 01:11:58,000 , ki je pojem, da bomo uvesti kasneje. 1029 01:11:58,000 --> 01:12:09,000 >> Ampak za zdaj, kaj lahko vedeli, da lahko ustvarite kazalec na tej lokaciji x. 1030 01:12:09,000 --> 01:12:12,000 Na primer, lahko ustvarite kazalec spremenljivke. 1031 01:12:12,000 --> 01:12:16,000 Ko smo ustvarili kazalec spremenljivke, ki jih uporabljamo zvezdica zapis. 1032 01:12:16,000 --> 01:12:21,000 V tem primeru se to pravi, da grem, da ustvarite kazalec na int. 1033 01:12:21,000 --> 01:12:24,000 To je tip, tako kot vsaka druga. 1034 01:12:24,000 --> 01:12:27,000 Dajemo ga spremenljivke, kot y, 1035 01:12:27,000 --> 01:12:32,000 potem pa jo nastavite enak naslov, na naslov. 1036 01:12:32,000 --> 01:12:38,000 V tem primeru lahko postavimo y izpostaviti x 1037 01:12:38,000 --> 01:12:43,000 ob naslova X, ki ga opravljamo v ta znak, 1038 01:12:43,000 --> 01:12:55,000 nato pa smo postavili y opozoriti na to. 1039 01:12:55,000 --> 01:12:59,000 Kaj to v bistvu pa je, če se ozremo na našo RAM 1040 01:12:59,000 --> 01:13:02,000 To ustvari ločeno spremenljivko. 1041 01:13:02,000 --> 01:13:04,000 To se dogaja, da ga pokličete y, 1042 01:13:04,000 --> 01:13:06,000 in ko je ta vrstica kode izvede 1043 01:13:06,000 --> 01:13:13,000 to je dejansko dogaja, da ustvarite malo kazalec, ki smo ponavadi oblikuje kot puščica, 1044 01:13:13,000 --> 01:13:15,000 in postavlja y opozoriti na x. 1045 01:13:15,000 --> 01:13:17,000 Da. 1046 01:13:17,000 --> 01:13:19,000 [Študent] Če x že kazalec, bi si naredil 1047 01:13:19,000 --> 01:13:22,000 int * y = x namesto ob 'in' znak? 1048 01:13:22,000 --> 01:13:24,000 Da. 1049 01:13:24,000 --> 01:13:27,000 Če je x že kazalec, potem lahko nastavite 2 napotke enake med seboj, 1050 01:13:27,000 --> 01:13:30,000 v tem primeru y ne bi kazale na x, 1051 01:13:30,000 --> 01:13:34,000 vendar opozarja, da ne glede x kaže, da. 1052 01:13:34,000 --> 01:13:37,000 Žal nam je zmanjkalo časa. 1053 01:13:37,000 --> 01:13:44,000 >> Kaj bi rekel v tem trenutku lahko govorimo o tem brez povezave, 1054 01:13:44,000 --> 01:13:49,000 ampak jaz bi rekel začeti delati s tem problemom, # 14. 1055 01:13:49,000 --> 01:13:53,000 Vidite lahko, da je že malo izpolni za vas tukaj. 1056 01:13:53,000 --> 01:13:57,000 Vidite lahko, da ko se ugotovi, 2 kazalca, int * x in y *, 1057 01:13:57,000 --> 01:14:01,000 in ugotavljajo, da kaže na * poleg spremenljivke je nekaj, kar se je zgodilo lani. 1058 01:14:01,000 --> 01:14:05,000 Izkazalo se je, da je to podobno temu, kar počnemo v tem letu. 1059 01:14:05,000 --> 01:14:11,000 Ni važno, če pišete * ko si razglasitvi kazalec. 1060 01:14:11,000 --> 01:14:17,000 Vendar smo napisali * poleg vrste 1061 01:14:17,000 --> 01:14:24,000 ker je zelo jasno, da ste o razglasitvi kazalec spremenljivke. 1062 01:14:24,000 --> 01:14:27,000 Vidite lahko, da prijavlja 2 kazalci nam 2 škatle. 1063 01:14:27,000 --> 01:14:31,000 Tukaj ko smo postavili x enak knjižnične funkcije malloc 1064 01:14:31,000 --> 01:14:34,000 kaj je rekel je razveljavilo spomin na kup. 1065 01:14:34,000 --> 01:14:41,000 Ta mali okno tukaj, ta krog, ki se nahaja na kup. 1066 01:14:41,000 --> 01:14:43,000 X kaže na to. 1067 01:14:43,000 --> 01:14:46,000 Upoštevajte, da y še vedno ne kaže nič. 1068 01:14:46,000 --> 01:14:50,000 Da bi dobili pomnilnika, za shranjevanje številko 42 v x 1069 01:14:50,000 --> 01:14:55,000 želimo uporabiti kakšen zapis? 1070 01:14:55,000 --> 01:14:59,000 [Študent] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Točno, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 To pomeni slediti puščico in vrgel 42 tam. 1073 01:15:06,000 --> 01:15:09,000 Tu, kjer smo postavili Y in X smo y kaže na x. 1074 01:15:09,000 --> 01:15:13,000 Še enkrat, to je tako kot tisto, kar je povedal Kevin, kjer smo postavili y enaka x. 1075 01:15:13,000 --> 01:15:15,000 Y ne kaže x. 1076 01:15:15,000 --> 01:15:19,000 Namesto tega se kaže s tem, kar kaže na x, kot dobro. 1077 01:15:19,000 --> 01:15:24,000 >> In potem končno v zadnjem polju obstajajo 2 možne stvari, ki jih lahko delamo. 1078 01:15:24,000 --> 01:15:28,000 Ena je, da bi lahko rekli * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Druga stvar je, lahko bi rekli, Alex, ali veste, kaj bi lahko storili tukaj? 1080 01:15:33,000 --> 01:15:37,000 Lahko bi rekli, * x = 13 ali- 1081 01:15:37,000 --> 01:15:41,000 [Študent] Lahko bi rekli karkoli int. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Če bi bila ta označena kot int spremenljivko lahko naredimo to. 1083 01:15:45,000 --> 01:15:49,000 Lahko bi tudi rekli * y = 13, ker oni so tako kaže, da na istem mestu, 1084 01:15:49,000 --> 01:15:51,000 tako da smo lahko uporabili bodisi spremenljivo do tja. 1085 01:15:51,000 --> 01:15:56,000 Ja. >> [Študent] Kaj bi bilo videti, če bi samo rekel int x 13? 1086 01:15:56,000 --> 01:16:00,000 To bi lahko razglasi novo spremenljivko z imenom x, ki ne bi deloval. 1087 01:16:00,000 --> 01:16:04,000 Morali bi trk, ker smo prijavljeni x, da je kazalec gor. 1088 01:16:04,000 --> 01:16:10,000 [Študent] Če bi le imel to izjavo, samo po sebi, kaj bo to videti v obliki kroga? 1089 01:16:10,000 --> 01:16:14,000 Če bi imeli x = 13 potem bi imeli polje, namesto puščice 1090 01:16:14,000 --> 01:16:16,000 prihajajo iz škatle sva jo pripravi kot le 13 let. 1091 01:16:16,000 --> 01:16:19,000 [Študent] V polje. Ok. 1092 01:16:19,000 --> 01:16:24,000 >> Hvala za gledanje in srečno na kvizu 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]