1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Odjeljak 4] [Manje Ugodno] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Sveučilište Harvard] 3 00:00:04,000 --> 00:00:07,000 [Ovo je CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> U redu, dobrodošli natrag u sekciji. 5 00:00:10,000 --> 00:00:13,000 U ovotjednom dijelu ćemo učiniti nekoliko stvari. 6 00:00:13,000 --> 00:00:17,000 Idemo u prvom setu rekapitulacija problema 2, 7 00:00:17,000 --> 00:00:20,000 koji je skup i Caesar Vigenère problem. 8 00:00:20,000 --> 00:00:23,000 A onda ćemo zaroniti u Kviz 0 pregled 9 00:00:23,000 --> 00:00:26,000 i provesti malo vremena recapping što smo razgovarali o tome 10 00:00:26,000 --> 00:00:30,000 u svakoj od predavanja do sada, a također ćemo napraviti nekoliko problema 11 00:00:30,000 --> 00:00:32,000 iz prethodne godine kvizovima. 12 00:00:32,000 --> 00:00:36,000 Na taj način vi imate dobar način da se pripremi za to. 13 00:00:36,000 --> 00:00:40,000 >> Za početak, ja dignete nekoliko dobrih rješenja 14 00:00:40,000 --> 00:00:45,000 za prethodni problema setu, problem Set 2, u ovom prostoru. 15 00:00:45,000 --> 00:00:48,000 Ako ste vi svi pogodio ovaj link, 16 00:00:48,000 --> 00:00:53,000 i ako kliknete moje ime i kliknite na mojoj prvoj reviziji 17 00:00:53,000 --> 00:00:56,000 vidjet ćete caesar.c, što je točno ono što sam gleda. 18 00:00:56,000 --> 00:01:00,000 Ajmo pričati o tome jako brzo. 19 00:01:00,000 --> 00:01:02,000 Ovo je samo uzorak rješenje. 20 00:01:02,000 --> 00:01:05,000 To ne mora nužno biti savršeno rješenje. 21 00:01:05,000 --> 00:01:08,000 Postoji mnogo različitih načina da se ovo pišemo, 22 00:01:08,000 --> 00:01:10,000 ali postoji nekoliko stvari koje sam htjela istaknuti 23 00:01:10,000 --> 00:01:13,000 da sam vidio dok sam bio klasiranje, uobičajene pogreške koje mislim 24 00:01:13,000 --> 00:01:18,000 ovo rješenje čini vrlo dobar posao rukovanje. 25 00:01:18,000 --> 00:01:22,000 >> Prvi ima nekakvu naslovnom komentaru na vrhu. 26 00:01:22,000 --> 00:01:25,000 Na linijama 1 do 7 vidite pojedinosti, 27 00:01:25,000 --> 00:01:28,000 Što je točno taj program radi. 28 00:01:28,000 --> 00:01:32,000 Dobra praksa kada pišete C koda 29 00:01:32,000 --> 00:01:35,000 bez obzira je li vaš program je sadržana unutar jedne datoteke ili 30 00:01:35,000 --> 00:01:38,000 da li je podijeljen na više datoteka je imati nekakvu 31 00:01:38,000 --> 00:01:40,000 usmjeravajući komentar na vrhu. 32 00:01:40,000 --> 00:01:43,000 To je i za ljude koji idu van i pisati kod u stvarnom svijetu. 33 00:01:43,000 --> 00:01:47,000 Ovo je mjesto gdje će staviti informacije o autorskim pravima. 34 00:01:47,000 --> 00:01:50,000 Ispod su # obuhvaća. 35 00:01:50,000 --> 00:01:55,000 Na liniji 16 bilo je to # define, koje ćemo se vratiti u samo malo. 36 00:01:55,000 --> 00:01:59,000 I onda kad je funkcija počinje, nakon glavne počinje, 37 00:01:59,000 --> 00:02:03,000 jer ovaj program je sve bio sadržan u jednoj funkciji 38 00:02:03,000 --> 00:02:09,000 vrlo prva stvar koja se događa, a to je vrlo idiomatski i tipično C programu 39 00:02:09,000 --> 00:02:14,000 koji uzima u zapovjednoj liniji argumenti-je da se odmah provjerava 40 00:02:14,000 --> 00:02:18,000 >> za argument count, argc. 41 00:02:18,000 --> 00:02:24,000 Ovdje vidimo da je ovaj program očekuje dva argumente točno. 42 00:02:24,000 --> 00:02:27,000 Zapamtite tu je da je prvi argument da je posebna 43 00:02:27,000 --> 00:02:29,000 to je uvijek ime programa koji je se pokrenuti, 44 00:02:29,000 --> 00:02:31,000 naziv izvršne datoteke. 45 00:02:31,000 --> 00:02:36,000 I tako ono što ovaj radi je to sprječava korisnika izvodi program 46 00:02:36,000 --> 00:02:42,000 s više ili manje argumenata. 47 00:02:42,000 --> 00:02:44,000 Razlog želimo provjeriti za ovaj odmah je zato 48 00:02:44,000 --> 00:02:52,000 mi zapravo ne može pristupiti ovom argv lepezu ovdje pouzdano 49 00:02:52,000 --> 00:02:55,000 dok smo provjeriti da vidi koliko je velika. 50 00:02:55,000 --> 00:02:58,000 >> Jedan od najčešćih pogrešaka sam vidio je ljudi odmah će ići u 51 00:02:58,000 --> 00:03:01,000 i zgrabite argv [1]. 52 00:03:01,000 --> 00:03:06,000 Oni bi zgrabite ključ argument iz polja i učinite da sam provjeriti na njemu, 53 00:03:06,000 --> 00:03:11,000 i onda bih napraviti test za argc, kao i sljedeći test, 54 00:03:11,000 --> 00:03:16,000 hoće li ili ne prvi argument je doista cijeli u isto vrijeme, 55 00:03:16,000 --> 00:03:20,000 i to ne uspije, jer u slučaju da ne postoje argumenti isporučene 56 00:03:20,000 --> 00:03:26,000 ćete biti grabbing argument da je ne postoji ili pokušavaju uhvatiti jedan koji nije tamo. 57 00:03:26,000 --> 00:03:29,000 >> Druga velika stvar koju treba primijetiti je da 58 00:03:29,000 --> 00:03:32,000 uvijek želite ispisati nekakvu korisne poruke o pogrešci 59 00:03:32,000 --> 00:03:34,000 korisniku na orijentirati ih. 60 00:03:34,000 --> 00:03:37,000 Siguran sam da ste sve pokretati programe gdje odjednom se ruši, 61 00:03:37,000 --> 00:03:41,000 i dobijete ovo smiješno malo dijalog koji pops gore i kaže: 62 00:03:41,000 --> 00:03:44,000 nešto strašno zagonetna i možda vam daje kod pogreške ili nešto slično 63 00:03:44,000 --> 00:03:47,000 da nema smisla. 64 00:03:47,000 --> 00:03:50,000 To je mjesto gdje se stvarno želite dati nešto korisne 65 00:03:50,000 --> 00:03:54,000 i usmjereni na korisnika, tako da kad ga pokrenuti idu "Oh," lice dlan. 66 00:03:54,000 --> 00:03:58,000 "Znam točno što učiniti. Znam kako to popraviti." 67 00:03:58,000 --> 00:04:01,000 >> Ako ne ispisati poruku, onda ćete završiti zapravo 68 00:04:01,000 --> 00:04:04,000 ostavljajući korisniku da ide ispitati svoj izvorni kod 69 00:04:04,000 --> 00:04:07,000 shvatiti što je pošlo po zlu. 70 00:04:07,000 --> 00:04:11,000 Tu su i neki puta da ćete koristiti različite kodove pogrešaka. 71 00:04:11,000 --> 00:04:14,000 Ovdje smo samo koristiti jedan reći da je bio pogreška, 72 00:04:14,000 --> 00:04:16,000 došlo je do pogreške, došlo je do pogreške. 73 00:04:16,000 --> 00:04:20,000 Veći programi, često programi koji se nazivaju drugim programima, 74 00:04:20,000 --> 00:04:25,000 će se vratiti nekakav posebnim šiframa pogrešaka u različitim scenarijima 75 00:04:25,000 --> 00:04:28,000 za programsko komunicirati ono što bi inače 76 00:04:28,000 --> 00:04:32,000 samo koristiti lijep engleski poruku za. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Kao što smo raditi prema dolje, možete vidjeti ćemo povući ključnu out. 79 00:04:37,000 --> 00:04:40,000 Mi test da vidi ako je ključ odgovara. 80 00:04:40,000 --> 00:04:42,000 Mi smo dobili poruku od korisnika. 81 00:04:42,000 --> 00:04:46,000 Razlog mi to učiniti u ovoj učiniti dok petlja-a to je nešto što ćemo pokriti 82 00:04:46,000 --> 00:04:50,000 u malo-ali ispada da ako upišete kontrolni D 83 00:04:50,000 --> 00:04:54,000 kada ste dobili da GetString brz na terminalu 84 00:04:54,000 --> 00:04:59,000 što to zapravo je to šalje poseban karakter 85 00:04:59,000 --> 00:05:01,000 programu. 86 00:05:01,000 --> 00:05:05,000 To se zove ELF ili kraj datoteke karaktera. 87 00:05:05,000 --> 00:05:08,000 I u tom slučaju, naš niz poruka će biti nula, 88 00:05:08,000 --> 00:05:14,000 tako da to nije nešto što smo provjeriti u problemu se postaviti. 89 00:05:14,000 --> 00:05:17,000 >> No, kao što smo ići dalje, sada kada smo počeli razgovarati o pokazivače 90 00:05:17,000 --> 00:05:21,000 i dinamička dodjela memorije na hrpi, 91 00:05:21,000 --> 00:05:25,000 provjere null kad imate funkciju koja bi mogla 92 00:05:25,000 --> 00:05:30,000 vratiti null, kao vrijednost je nešto što ćete želite da biste dobili u naviku radi. 93 00:05:30,000 --> 00:05:33,000 To je ovdje prvenstveno za ilustraciju. 94 00:05:33,000 --> 00:05:36,000 Ali kad vidim GetString u budućnosti, 95 00:05:36,000 --> 00:05:41,000 tako da od problema Set 4 dana, da ćete želite imati na umu. 96 00:05:41,000 --> 00:05:44,000 Opet, to nije pitanje za problem Set 3 ili jer mi nije ga pokriva još. 97 00:05:44,000 --> 00:05:53,000 Konačno, možemo doći do tog dijela gdje smo dobili na glavni šifriranja petlje, 98 00:05:53,000 --> 00:05:57,000 a tu su i par stvari događaju ovdje. 99 00:05:57,000 --> 00:06:02,000 Prvo, mi iteraciju nad cijelu poruku niza sama. 100 00:06:02,000 --> 00:06:07,000 Ovdje smo čuvali strlen poziv u stanju, 101 00:06:07,000 --> 00:06:12,000 koji broj od vas su istaknuli nije velik put to ići. 102 00:06:12,000 --> 00:06:15,000 Ispada, u ovom slučaju to je također nije velika, 103 00:06:15,000 --> 00:06:20,000 dijelom zato što smo izmjenom sadržaj poruke sama 104 00:06:20,000 --> 00:06:27,000 unutar for petlje, tako da ako imamo poruku da je 10 znakova, 105 00:06:27,000 --> 00:06:32,000 Prvi put smo započeli da za petlju strlen će se vratiti što? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Ali ako ćemo onda mijenjati poruku, reći ćemo mijenjati svoj peti karakter, 108 00:06:40,000 --> 00:06:46,000 i bacamo u \ 0 lik u 5. poziciju, 109 00:06:46,000 --> 00:06:49,000 na iteraciji strlen (poruka) neće vratiti ono što je učinio 110 00:06:49,000 --> 00:06:52,000 Prvi put smo ponovljena, 111 00:06:52,000 --> 00:06:56,000 ali umjesto toga će se vratiti pet jer smo bacili u tom null terminator, 112 00:06:56,000 --> 00:06:59,000 i stringa je duljina je definirana 113 00:06:59,000 --> 00:07:03,000 po položaju tog \ 0. 114 00:07:03,000 --> 00:07:09,000 U ovom slučaju, to je odličan način da ide, jer smo ga mijenja u mjestu. 115 00:07:09,000 --> 00:07:13,000 Ali primijetite da je to zapravo iznenađujuće jednostavan za šifriranje 116 00:07:13,000 --> 00:07:16,000 ako možete dobiti matematika točna. 117 00:07:16,000 --> 00:07:19,000 Sve što je potrebno je provjeriti je li ili nije slovo koje ste u potrazi na 118 00:07:19,000 --> 00:07:21,000 je veliko ili malo slovo. 119 00:07:21,000 --> 00:07:24,000 >> Razlog imamo samo provjeriti da i mi nemamo za provjeru 120 00:07:24,000 --> 00:07:27,000 IS alfa slučaj je zato 121 00:07:27,000 --> 00:07:30,000 ako je lik veliko ili ako je mala 122 00:07:30,000 --> 00:07:33,000 onda je definitivno slovo abecede, 123 00:07:33,000 --> 00:07:38,000 jer mi nemamo velikih i malih brojki. 124 00:07:38,000 --> 00:07:41,000 Druga je stvar što radimo, a to je malo lukav- 125 00:07:41,000 --> 00:07:45,000 je da smo izmijenjeni standardni Cezarova šifra formulu 126 00:07:45,000 --> 00:07:49,000 da mi je dao u specifikaciji problema set. 127 00:07:49,000 --> 00:07:52,000 Što je drugačije ovdje je da mi oduzmu 128 00:07:52,000 --> 00:07:58,000 u slučaju velikih slova kapitala, a zatim smo dodali kapital A 129 00:07:58,000 --> 00:08:02,000 natrag u na kraju. 130 00:08:02,000 --> 00:08:05,000 >> Znam neke od vas su to učinili u svom kodu. 131 00:08:05,000 --> 00:08:09,000 Je li itko od vas to učiniti u svojim podnescima? 132 00:08:09,000 --> 00:08:13,000 Vi to učinio. Možete li objasniti što to znači, Sahb? 133 00:08:13,000 --> 00:08:18,000 Po to oduzimanjem van, jer ste napravili mod odmah nakon njega, 134 00:08:18,000 --> 00:08:21,000 morate ga uzeti, pa na taj način možete dobiti [kašlja] položaj. 135 00:08:21,000 --> 00:08:25,000 A onda ga dodavati kasnije prebacio preko jednog koji ste željeli. 136 00:08:25,000 --> 00:08:27,000 Da, točno. 137 00:08:27,000 --> 00:08:32,000 Što Sahb rekao je da kada želimo dodati 138 00:08:32,000 --> 00:08:36,000 naša poruka i naš ključni zajedno 139 00:08:36,000 --> 00:08:42,000 i onda mod da mod da NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 ako mi ne ljestvici našu poruku u odgovarajuću 0-25 rasponu prvi, 141 00:08:50,000 --> 00:08:54,000 onda bismo mogli završiti uzimajući stvarno čudan broj 142 00:08:54,000 --> 00:08:59,000 jer su vrijednosti koje smo gleda kada gledamo poruke [i], 143 00:08:59,000 --> 00:09:03,000 kada gledamo i ti lik našeg običnog SMS poruke, 144 00:09:03,000 --> 00:09:08,000 je vrijednost negdje u ovom 65-122 rasponu 145 00:09:08,000 --> 00:09:13,000 na temelju ASCII vrijednosti za velikim slovima A kroz malim slovom z. 146 00:09:13,000 --> 00:09:18,000 I tako kad smo ga mod po 26 ili NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 budući da je naš # define u gornjem desnom kutu gore, 148 00:09:23,000 --> 00:09:28,000 da će nam dati vrijednost koja je u rasponu 0-25, 149 00:09:28,000 --> 00:09:30,000 i trebamo način da onda ljestvici da back up 150 00:09:30,000 --> 00:09:32,000 i dobiti ga u odgovarajućem ASCII rasponu. 151 00:09:32,000 --> 00:09:36,000 Najlakši način da to učinite je da samo skalirati sve dolje 152 00:09:36,000 --> 00:09:39,000 u 0-25 raspona za početak, 153 00:09:39,000 --> 00:09:43,000 a zatim pomak sve natrag na kraju. 154 00:09:43,000 --> 00:09:46,000 >> Druga uobičajena pogreška da sam vidio ljude izvoditi u je da 155 00:09:46,000 --> 00:09:50,000 ako zapravo ne učiniti ovo skaliranje odmah 156 00:09:50,000 --> 00:09:53,000 i dodati poruku i ključ zajedno i dodati ih, kažu, 157 00:09:53,000 --> 00:09:58,000 u char varijable, problem s tim 158 00:09:58,000 --> 00:10:01,000 je od poruka [i] je relativno velik broj početi sa- 159 00:10:01,000 --> 00:10:05,000 zapamtite da je barem 65, ako to je veliko lik- 160 00:10:05,000 --> 00:10:09,000 ako imate veliku tipku, recimo, nešto poput 100, 161 00:10:09,000 --> 00:10:13,000 i dodate one dvije zajedno u potpisali char ćete dobiti prelijevanje. 162 00:10:13,000 --> 00:10:17,000 Ti ćeš dobiti vrijednost koja je veća od 127, 163 00:10:17,000 --> 00:10:22,000 što je najveća vrijednost koja char varijabla može držati. 164 00:10:22,000 --> 00:10:26,000 Opet, to je razlog zašto biste željeli raditi takve stvari na početak. 165 00:10:26,000 --> 00:10:29,000 Neki ljudi dobio oko tog slučaja radeći ako drugdje i testiranje 166 00:10:29,000 --> 00:10:33,000 da vidi da li će se prelijevati prije nego što to, 167 00:10:33,000 --> 00:10:36,000 ali ovaj način dobiva oko toga. 168 00:10:36,000 --> 00:10:40,000 I onda u tom rješenju mi ​​ispisati cijeli niz na samom kraju. 169 00:10:40,000 --> 00:10:45,000 Drugi ljudi ispisuju znak na vrijeme. Obje su strašan. 170 00:10:45,000 --> 00:10:51,000 U ovom trenutku, to vi imate pitanja, nikakve komentare o ovome? 171 00:10:51,000 --> 00:10:56,000 Stvari koje vam se sviđaju, stvari koje se ne sviđaju? 172 00:10:56,000 --> 00:10:58,000 >> Imao sam pitanje. 173 00:10:58,000 --> 00:11:01,000 Možda sam to propustio tijekom objašnjenje, ali kako se ovaj program 174 00:11:01,000 --> 00:11:07,000 preskočite prostore za spajanje na tipku duljini teksta? 175 00:11:07,000 --> 00:11:10,000 Ovo je samo Cezarova šifra. >> Oprosti, jesam. 176 00:11:10,000 --> 00:11:13,000 Da, vidjet ćemo da je. 177 00:11:13,000 --> 00:11:16,000 U Cezarova šifra smo dobili okolo da zbog 178 00:11:16,000 --> 00:11:18,000 mi samo zrcaljeno znakove. 179 00:11:18,000 --> 00:11:27,000 Mi ih samo zakrenuti ako su velika slova ili mala slova. 180 00:11:27,000 --> 00:11:32,000 Vi osjeća prilično dobro o tome? 181 00:11:32,000 --> 00:11:34,000 Slobodno kopirajte ovaj dom, uzmi ga, 182 00:11:34,000 --> 00:11:37,000 ga usporediti s onim što ste vi pisali. 183 00:11:37,000 --> 00:11:42,000 Definitivno slobodno pošaljite na pitanja o tome previše. 184 00:11:42,000 --> 00:11:46,000 I opet, shvatite da je cilj ovdje sa svojim problemom postavlja 185 00:11:46,000 --> 00:11:50,000 nije da se vi napisati savršen kod za tvoj problem setovima. 186 00:11:50,000 --> 00:11:57,000 To je iskustvo učenja. Da. 187 00:11:57,000 --> 00:12:01,000 >> Povratak na učiniti dok petlja, ako je jednak null, 188 00:12:01,000 --> 00:12:06,000 pa null samo znači ništa, oni samo pritisnite enter? 189 00:12:06,000 --> 00:12:12,000 Nula je posebna vrijednost pokazivač, 190 00:12:12,000 --> 00:12:17,000 i mi koristimo null kada želimo reći 191 00:12:17,000 --> 00:12:23,000 imamo pokazivač varijablu koja pokazuje ništa. 192 00:12:23,000 --> 00:12:28,000 I tako obično to znači da je ova varijabla, ovu poruku varijabla 193 00:12:28,000 --> 00:12:35,000 je prazna, i ovdje, jer smo pomoću CS50 posebnu string tip, 194 00:12:35,000 --> 00:12:37,000 što je CS50 tip niza? 195 00:12:37,000 --> 00:12:42,000 Jeste li vidjeli što je to kada je David povukla sjenilo u predavanju? 196 00:12:42,000 --> 00:12:44,000 To je funky-to je pokazivač, zar ne? 197 00:12:44,000 --> 00:12:48,000 Dobro, da. >> To je char *. 198 00:12:48,000 --> 00:12:52,000 I tako smo stvarno mogao zamijeniti ovu 199 00:12:52,000 --> 00:12:56,000 ovdje s char * poruka, 200 00:12:56,000 --> 00:13:04,000 i tako GetString funkcija, ako ne uspješno dobiti niz od korisnika, 201 00:13:04,000 --> 00:13:08,000 ne može analizirati niz, a jedan slučaj u kojem se ne može analizirati niz 202 00:13:08,000 --> 00:13:11,000 je ako korisnik unese kraja datoteke karaktera, kontrola D, 203 00:13:11,000 --> 00:13:17,000 koji nije nešto što se obično učiniti, ali ako se to dogodi 204 00:13:17,000 --> 00:13:20,000 tada funkcija će vratiti ovaj null vrijednost kao način govori 205 00:13:20,000 --> 00:13:23,000 "Hej, nisam dobio niz." 206 00:13:23,000 --> 00:13:27,000 Što će se dogoditi ako ne stavimo poruke = null, 207 00:13:27,000 --> 00:13:30,000 što je nešto što nismo radili još? 208 00:13:30,000 --> 00:13:32,000 Zašto bi to biti problem? 209 00:13:32,000 --> 00:13:38,000 Jer znam da smo razgovarali malo u predavanju o memorijskim curenja. 210 00:13:38,000 --> 00:13:42,000 Da, hajdemo to učiniti, pa da vidimo što će se dogoditi. 211 00:13:42,000 --> 00:13:44,000 >> Basil je pitanje je što će se dogoditi ako ne zapravo imaju 212 00:13:44,000 --> 00:13:48,000 ova poruka = ​​null test? 213 00:13:48,000 --> 00:13:51,000 Ajmo dođite do vrha. 214 00:13:51,000 --> 00:13:53,000 Vi možete komentirati ovo. 215 00:13:53,000 --> 00:13:55,000 Zapravo, ja ću ga spremiti u reviziji. 216 00:13:55,000 --> 00:13:58,000 To će biti Revizija 3. 217 00:13:58,000 --> 00:14:02,000 Što ćete učiniti da pokrenete ovaj program je da ćete morati kliknuti na ovu ikonu zupčanika ovdje, 218 00:14:02,000 --> 00:14:04,000 a vi ćete morati dodati argument za njega. 219 00:14:04,000 --> 00:14:10,000 Morat ćete mu dati ključ argument jer želimo proći u argument naredbenog retka. 220 00:14:10,000 --> 00:14:13,000 Ovdje ću dati broj tri. Sviđa mi tri. 221 00:14:13,000 --> 00:14:19,000 Sada zumiranje natrag, trčanje program. 222 00:14:19,000 --> 00:14:24,000 To je trčanje, sastavljanje, izgradnju. 223 00:14:24,000 --> 00:14:27,000 Ovdje ćemo ići. To čeka da se zatraži. 224 00:14:27,000 --> 00:14:33,000 Ako sam upisati nešto poput halo-gdje si da ide? 225 00:14:33,000 --> 00:14:38,000 Oh, moj program je predugo za pokretanje. Bio sam jawing predugo. 226 00:14:38,000 --> 00:14:40,000 Ovdje to ide. 227 00:14:40,000 --> 00:14:43,000 Sada sam upisati u bok. 228 00:14:43,000 --> 00:14:46,000 Mi vidimo da je to šifrira odgovarajući način. 229 00:14:46,000 --> 00:14:52,000 Sada ono što će se dogoditi ako radimo brz GetString vratiti null? 230 00:14:52,000 --> 00:14:57,000 Zapamtite, rekao sam da mi je to učinio pritiskom kontrolu D u isto vrijeme. 231 00:14:57,000 --> 00:14:59,000 Ja ću dođite ovdje. Mi ćemo ga ponovno pokrenuti. 232 00:14:59,000 --> 00:15:01,000 Građevinsko. Ima to ide. 233 00:15:01,000 --> 00:15:04,000 Sada kada sam pogodio kontrolu D 234 00:15:04,000 --> 00:15:12,000 Dobio sam ovu liniju koja kaže opt/sandbox50/bin/run.sh, Segmentacija kvara. 235 00:15:12,000 --> 00:15:15,000 Jeste vi vidjeli da je prije? 236 00:15:15,000 --> 00:15:17,000 >> [Studentski] Zašto nema->> Žao? 237 00:15:17,000 --> 00:15:20,000 [Studentski] Zašto nema jezgra deponij u ovom slučaju? 238 00:15:20,000 --> 00:15:26,000 Jezgra deponij je-pitanje je zašto je nema jezgra deponij ovdje? 239 00:15:26,000 --> 00:15:29,000 Pitanje je da postoji svibanj biti, ali jezgra deponij je datoteka 240 00:15:29,000 --> 00:15:31,000 da dobiva pohranjena na tvrdom disku. 241 00:15:31,000 --> 00:15:34,000 U ovom slučaju smo onemogućen osnovne smeća 242 00:15:34,000 --> 00:15:37,000 na radnom poslužitelju, tako da mi ne su ljudi SEG rasjedanja 243 00:15:37,000 --> 00:15:40,000 i izgradnju tona temeljnih deponija. 244 00:15:40,000 --> 00:15:46,000 No, možete dobiti jedan. 245 00:15:46,000 --> 00:15:48,000 Temeljni deponijama su jedna od onih stvari koje se često može onemogućiti, 246 00:15:48,000 --> 00:15:52,000 a ponekad to učinite. 247 00:15:52,000 --> 00:15:55,000 Segmentaciju kriv, odgovoriti na vaše pitanje, bosiljak, 248 00:15:55,000 --> 00:16:00,000 govori da smo pokušali pristupiti pokazivač 249 00:16:00,000 --> 00:16:05,000 da nije bio postavljen ukazati na ništa. 250 00:16:05,000 --> 00:16:09,000 Sjeti se Binky u videu kad Binky pokušava 251 00:16:09,000 --> 00:16:12,000 ići pristupiti pokazivač koji ne pokazuje na nešto? 252 00:16:12,000 --> 00:16:16,000 U ovom slučaju mislim da je tehnički pokazivač pokazuje na nešto. 253 00:16:16,000 --> 00:16:20,000 To je ukazujući na null, koji je tehnički 0, 254 00:16:20,000 --> 00:16:25,000 ali da definira se u segmentu koji nije dostupan 255 00:16:25,000 --> 00:16:28,000 po svom programu, tako da ćete dobiti grešku segmentacije 256 00:16:28,000 --> 00:16:31,000 jer niste pristup memoriju koja je u važećem segmentu 257 00:16:31,000 --> 00:16:38,000 kao hrpa segmentu ili stog segment ili podataka segmentu. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Bilo više pitanja o caru? 260 00:16:48,000 --> 00:16:51,000 >> Idemo dalje. Pogledajmo reviziju dvije jako brzo. 261 00:16:51,000 --> 00:17:00,000 To je Vigenère. 262 00:17:00,000 --> 00:17:04,000 Ovdje u Vigenère 263 00:17:04,000 --> 00:17:06,000 ćemo kroz ovaj jedan prilično brzo, jer, opet, 264 00:17:06,000 --> 00:17:10,000 Vigenère i Cezar su vrlo slični. 265 00:17:10,000 --> 00:17:12,000 Zaglavlje komentar je prije, 266 00:17:12,000 --> 00:17:17,000 # Define je prije kako bi se izbjeglo korištenje ove magične brojeve. 267 00:17:17,000 --> 00:17:21,000 Lijepo je stvar je reći da smo htjeli da se presele u 268 00:17:21,000 --> 00:17:23,000 drugačije pismo ili nešto slično. 269 00:17:23,000 --> 00:17:26,000 Umjesto da se ide ručno promijeniti sve 26-ih u kodu 270 00:17:26,000 --> 00:17:30,000 bismo mogli promijeniti to 27 ili ga spustiti 271 00:17:30,000 --> 00:17:34,000 ako smo koristili različite abecedu, različitih jezika. 272 00:17:34,000 --> 00:17:38,000 Opet, imamo ovu provjeru argument count, 273 00:17:38,000 --> 00:17:42,000 i stvarno gotovo da možete uzeti kao predložak. 274 00:17:42,000 --> 00:17:46,000 Prilično mnogo svaki program možete pisati treba imati- 275 00:17:46,000 --> 00:17:50,000 ako je potrebno naredbenog retka argumente-neki slijed linija 276 00:17:50,000 --> 00:17:55,000 koji glasi ovako na samom početku. 277 00:17:55,000 --> 00:17:59,000 To je jedan od prvih testova razum želite učiniti. 278 00:17:59,000 --> 00:18:03,000 >> Evo što mi nije bila napravili smo sigurni da 279 00:18:03,000 --> 00:18:06,000 ključna riječ je bila valjana, a to je bio drugi ček da jesmo. 280 00:18:06,000 --> 00:18:11,000 Obavijest opet da smo odvojeni od ova argc i dva. 281 00:18:11,000 --> 00:18:14,000 Imajte na umu da u ovom slučaju jedna stvar da smo morali napraviti je umjesto 282 00:18:14,000 --> 00:18:18,000 korištenja na i. htjeli smo provjeriti cijeli niz, 283 00:18:18,000 --> 00:18:21,000 i kako bi se učiniti da ste zapravo morati ići slovo po slovo 284 00:18:21,000 --> 00:18:23,000 preko niza. 285 00:18:23,000 --> 00:18:29,000 Nema dobar način da se zovu nešto o njemu 286 00:18:29,000 --> 00:18:31,000 jer čak i, primjerice, da ću se vratiti 0 287 00:18:31,000 --> 00:18:37,000 ako se ne može analizirati integer, tako da čak i ne rade. 288 00:18:37,000 --> 00:18:42,000 Opet, lijepo poruka objasniti korisniku što se točno dogodilo. 289 00:18:42,000 --> 00:18:45,000 Onda ovdje, opet, mi također preopterećena gdje 290 00:18:45,000 --> 00:18:50,000 korisnik upiše u kontrolnoj D slučajnog karaktera. 291 00:18:50,000 --> 00:18:54,000 >> A onda Charlotte je imao pitanje ranije o tome kako smo uspjeli preskočiti prostore 292 00:18:54,000 --> 00:18:57,000 u našem nizu ovdje. 293 00:18:57,000 --> 00:19:00,000 To je vrsta slično onome što smo učinili s Myspace programa 294 00:19:00,000 --> 00:19:04,000 da smo napravili u poglavlju, a način na koji se radi 295 00:19:04,000 --> 00:19:08,000 je da smo pratili broj pisama koje smo vidjeli. 296 00:19:08,000 --> 00:19:13,000 Kao što smo hodali preko poruka nizu, kao što smo hodali preko lika po karakteru, 297 00:19:13,000 --> 00:19:16,000 smo pratili indeks kao dio naše za petlje, a zatim smo također prati 298 00:19:16,000 --> 00:19:21,000 broj slova, tako da ne sadrži posebne znakove, ne-znamenke, non-bijeli prostor 299 00:19:21,000 --> 00:19:27,000 da smo vidjeli u zasebna varijabla. 300 00:19:27,000 --> 00:19:33,000 I onda je ovo rješenje modificira tipku 301 00:19:33,000 --> 00:19:41,000 da biste dobili stvarni ključ cijeli, i to da se na letu, 302 00:19:41,000 --> 00:19:47,000 neposredno prije to onda ide za šifriranje stvarnu poruku karakter. 303 00:19:47,000 --> 00:19:50,000 Postoje neka rješenja koja su savršeno previše velik 304 00:19:50,000 --> 00:19:58,000 da bi izmijenili tipku gore pri testiranju za ključ valjanosti. 305 00:19:58,000 --> 00:20:01,000 Osim pazeći da je lik i ključna 306 00:20:01,000 --> 00:20:05,000 je slovo abecede je također pokazalo da je u cijeli 307 00:20:05,000 --> 00:20:13,000 u 0-25 rasponu onda preskočiti što učiniti da se kasnije u ovo za petlju. 308 00:20:13,000 --> 00:20:18,000 Opet, možete vidjeti ovdje ovo je stvarno isti broj 309 00:20:18,000 --> 00:20:22,000 da smo koristili u Cezara u ovom trenutku. 310 00:20:22,000 --> 00:20:25,000 Vi radite točno istu stvar, tako da je pravi trik je figuring out 311 00:20:25,000 --> 00:20:30,000 kako pretvoriti riječ u cijeli broj. 312 00:20:30,000 --> 00:20:35,000 >> Jedna stvar koja mi je ovdje da je malo gusta 313 00:20:35,000 --> 00:20:39,000 je ponovili smo taj izraz, mislim da to može tako nazvati, 314 00:20:39,000 --> 00:20:45,000 3 zasebna puta na linijama 58, 59 i 61. 315 00:20:45,000 --> 00:20:52,000 Može li netko objasniti što je točno taj izraz ne? 316 00:20:52,000 --> 00:20:55,000 To je pristup karakter, kao što ste rekli. 317 00:20:55,000 --> 00:20:59,000 Da, to je [nečujno] lik u ključnoj riječi, 318 00:20:59,000 --> 00:21:04,000 i tako je broj pisama vidio jer ste samo kreće zajedno 319 00:21:04,000 --> 00:21:06,000 ključna riječ kada ste vidjeli pismo, 320 00:21:06,000 --> 00:21:10,000 tako da će učinkovito preskočiti prostore i slično. 321 00:21:10,000 --> 00:21:12,000 Da, točno. 322 00:21:12,000 --> 00:21:16,000 I onda kad ste vidjeli ključne prazno samo mod tako da se presele natrag. 323 00:21:16,000 --> 00:21:18,000 Točno. To je savršeno objašnjenje. 324 00:21:18,000 --> 00:21:23,000 Što Kevin je da želimo indeks u ključnoj riječi. 325 00:21:23,000 --> 00:21:28,000 Želimo dobiti num_letters_seen karakter, ako hoćete, 326 00:21:28,000 --> 00:21:32,000 ali ako num_letters_seen premašuje duljinu ključne riječi, 327 00:21:32,000 --> 00:21:37,000 način na koji smo se vratiti u odgovarajući raspon je mi koristimo mod operator 328 00:21:37,000 --> 00:21:40,000 učinkovito zaokrenuti. 329 00:21:40,000 --> 00:21:43,000 Na primjer, kao što je u Ukratko, naša ključna je slanina, 330 00:21:43,000 --> 00:21:46,000 a to je pet slova. 331 00:21:46,000 --> 00:21:50,000 No, vidjeli smo šest slova u našem običnom tekstu u ovom trenutku 332 00:21:50,000 --> 00:21:52,000 i kodiran šest. 333 00:21:52,000 --> 00:21:57,000 Mi ćemo završiti pristup num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 koji je 6, mod duljina ključne riječi, 5, 335 00:22:00,000 --> 00:22:04,000 i tako ćemo dobiti jedan, i tako što ćemo napraviti je da ćemo 336 00:22:04,000 --> 00:22:14,000 pristup prvu znakova unutar naše ključne riječi u tom trenutku. 337 00:22:14,000 --> 00:22:21,000 >> U redu, bilo kakva pitanja o Vigenère 338 00:22:21,000 --> 00:22:26,000 prije nego što smo prešli na? 339 00:22:26,000 --> 00:22:31,000 Vi osjeća prilično dobro o tome? 340 00:22:31,000 --> 00:22:35,000 Cool, super. 341 00:22:35,000 --> 00:22:38,000 Želim da biste bili sigurni da su ti dečki uzimajući priliku vidjeti kod 342 00:22:38,000 --> 00:22:48,000 da mi mislimo da izgleda dobro i imati priliku učiti od njega. 343 00:22:48,000 --> 00:22:53,000 To će biti posljednja ćemo koristiti prostore za sada, 344 00:22:53,000 --> 00:22:59,000 i idemo u tranziciji sada, a ja ću ići na cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 tako možemo napraviti malo kviz pregled. 346 00:23:06,000 --> 00:23:10,000 Najbolji način mislim početi raditi komentar pregled 347 00:23:10,000 --> 00:23:15,000 je došao na ovaj Predavanja stranici, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 , a ispod svakog od tjedan naslova, pa ako gledam ovdje u tjednu 0, 349 00:23:20,000 --> 00:23:27,000 Vidim da imamo popis tema koje smo pokriven u tjednu 0. 350 00:23:27,000 --> 00:23:31,000 >> Ako bilo koji od ovih tema čini upoznati vas 351 00:23:31,000 --> 00:23:34,000 definitivno ćete ga poželjeti vratiti i švrljati skripte i eventualno 352 00:23:34,000 --> 00:23:39,000 čak i prelistati predavanja, gledati ih opet ako želite 353 00:23:39,000 --> 00:23:44,000 da biste dobili osjećaj za ono što se događa sa svakom od tih tema. 354 00:23:44,000 --> 00:23:49,000 Reći ću dodatno ove godine jedan od cool sredstava smo dobili 355 00:23:49,000 --> 00:23:55,000 je ove hlačice koje smo stvorili, a ako pogledate tjednu 0, 356 00:23:55,000 --> 00:24:00,000 mi nemamo sve od tema, ali imamo dosta od njih, 357 00:24:00,000 --> 00:24:03,000 neke od trickier one, tako da gledate ove gaćice opet 358 00:24:03,000 --> 00:24:08,000 je dobar način da dođete do brzine. 359 00:24:08,000 --> 00:24:15,000 Konkretno, ja ću staviti u plug za 3 na dnu, jer sam one. 360 00:24:15,000 --> 00:24:20,000 Ali, ako ste se bori s binarnom, bita, hex, takve stvari, 361 00:24:20,000 --> 00:24:22,000 binarni je veliko mjesto za početak. 362 00:24:22,000 --> 00:24:25,000 ASCII je još jednom da je to dobro za pogledati previše. 363 00:24:25,000 --> 00:24:31,000 Možete čak i gledati me na 1.5x brzina ako idem prespor za vas. 364 00:24:31,000 --> 00:24:35,000 Budući da je pregled, slobodno to učiniti. 365 00:24:35,000 --> 00:24:40,000 >> Samo za početak jako brzo, idemo proći kroz nekoliko tih problema kviz 366 00:24:40,000 --> 00:24:44,000 Jednostavno brzo gubitaka kroz njih. 367 00:24:44,000 --> 00:24:50,000 Na primjer, pogledajmo problema 16 koje sam dobio pravo ovdje na brodu. 368 00:24:50,000 --> 00:24:54,000 Dobili smo sljedeće izračun u binarnom, 369 00:24:54,000 --> 00:24:56,000 i želimo pokazati bilo kakav posao. 370 00:24:56,000 --> 00:24:59,000 Ok, ja ću dati ovo metak. 371 00:24:59,000 --> 00:25:01,000 Vi bi trebali slijediti zajedno s papira, 372 00:25:01,000 --> 00:25:04,000 a mi ćemo to učiniti vrlo brzo. 373 00:25:04,000 --> 00:25:06,000 Želimo to obaviti sljedeće izračun u binarnom. 374 00:25:06,000 --> 00:25:16,000 Imam 00.110.010. 375 00:25:16,000 --> 00:25:27,000 A ja ću dodati da je 00110010. 376 00:25:27,000 --> 00:25:30,000 Za matematici genija sljedeće zajedno kod kuće, 377 00:25:30,000 --> 00:25:35,000 ovo je učinkovito pomnoži sa dva. 378 00:25:35,000 --> 00:25:37,000 Počnimo. 379 00:25:37,000 --> 00:25:39,000 Mi ćemo slijediti isti dodatak algoritam koji radimo 380 00:25:39,000 --> 00:25:43,000 kada smo dodali decimalne brojeve zajedno. 381 00:25:43,000 --> 00:25:46,000 Stvarno jedina razlika je u tome što smo povratna petlja oko 382 00:25:46,000 --> 00:25:51,000 kada imamo 1 + 1 umjesto jednom smo doći do 10. 383 00:25:51,000 --> 00:25:53,000 >> Ako pođemo od desne, jako brzo, što je prva znamenka? 384 00:25:53,000 --> 00:25:55,000 [Studentski] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Velika, druga znamenka? 386 00:25:58,000 --> 00:26:00,000 [Studentski] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Je li to jedan? 1 + 1? 388 00:26:02,000 --> 00:26:04,000 [Studentski] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Točno, tako što je znamenka koja pišem neposredno ispod dvije one dodaju zajedno? 390 00:26:08,000 --> 00:26:11,000 [Student] 1, 0, ili 0, a zatim nositi 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 i nose jedan, točno. 392 00:26:15,000 --> 00:26:18,000 Sljedeća jedan gore, bosiljak, ti ​​si gore. 393 00:26:18,000 --> 00:26:20,000 Što je treći? >> [Bosiljak] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, savršen. 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.] Da, i što da radim? 397 00:26:30,000 --> 00:26:32,000 [Student] Spoj 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] A što da radim? I onda sam nositi jedan. 399 00:26:34,000 --> 00:26:36,000 Savršeno, Sahb? >> [Sahb] Sada imate jedan. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] I trebam učiniti ništa ovdje? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Onda za sljedeću imate jedan zato što provodi nad jednom. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Odlično, tako da ovdje možemo ga završiti. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Studentski] Zar 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, kao što ste rekli, je 10, ili 1, 0, radije. 407 00:27:01,000 --> 00:27:07,000 10 je pogrešan naziv, jer mi je 10 znači da je broj 10, 408 00:27:07,000 --> 00:27:12,000 i to je dosjetka kako smo ga predstavlja kad smo ga pisati. 409 00:27:12,000 --> 00:27:20,000 Mi predstavljaju broj 2 do 1, 0, a broj 10 je malo drugačiji. 410 00:27:20,000 --> 00:27:23,000 >> Što je vrsta lijepo o binarnom je da tamo stvarno ne da su mnogi 411 00:27:23,000 --> 00:27:25,000 slučajevi morate naučiti. 412 00:27:25,000 --> 00:27:30,000 Tu je 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 je 0, a zatim nositi 1, 414 00:27:34,000 --> 00:27:37,000 a onda možete vidjeti ovdje na trećem stupcu iz prava 415 00:27:37,000 --> 00:27:40,000 imali smo taj 1, 1, 1 i. 416 00:27:40,000 --> 00:27:43,000 I 1 + 1 + 1 je 1, 417 00:27:43,000 --> 00:27:45,000 i nositi još jednom. 418 00:27:45,000 --> 00:27:48,000 Kada radite binarni toga, prilično jednostavna. 419 00:27:48,000 --> 00:27:51,000 Ja bih napraviti par više njih na razum sami provjeriti 420 00:27:51,000 --> 00:27:54,000 prije nego što krenete u, jer je to 421 00:27:54,000 --> 00:28:00,000 vjerojatno nešto što ćemo vidjeti na kvizu. 422 00:28:00,000 --> 00:28:03,000 Sada ćemo to učiniti sljedeći kao dobro. 423 00:28:03,000 --> 00:28:06,000 Učinimo problema 17. 424 00:28:06,000 --> 00:28:12,000 Mi ćemo pretvoriti sljedeće binarni broj u decimalni. 425 00:28:12,000 --> 00:28:28,000 Imam 10100111001. 426 00:28:28,000 --> 00:28:33,000 Sjeti se u binarnom video koji sam učinio 427 00:28:33,000 --> 00:28:36,000 Hodao sam kroz par primjera, a ja sam pokazao kako 428 00:28:36,000 --> 00:28:41,000 sve radi kada ste to radili u decimalama. 429 00:28:41,000 --> 00:28:45,000 Kada radite u decimalnom reprezentacije Mislim da smo 430 00:28:45,000 --> 00:28:48,000 u ovom trenutku u naše živote, tako tečno govori to da 431 00:28:48,000 --> 00:28:53,000 to je prilično lako prijeći preko mehaniku kako se to zapravo radi. 432 00:28:53,000 --> 00:28:59,000 >> Ali to učiniti brzo rekapitulacija, ako imam broj 137 433 00:28:59,000 --> 00:29:06,000 to zapravo znači i opet, to je u decimalnom reprezentacije- 434 00:29:06,000 --> 00:29:19,000 broj 137 u decimalni znači da imam jedan x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 To je sve ostati na zaslonu. 436 00:29:22,000 --> 00:29:29,000 I onda ako pogledate ove brojeve ovdje, 437 00:29:29,000 --> 00:29:34,000 100, 10 i 1, vidjet ćete da su oni zapravo sve ovlasti 10. 438 00:29:34,000 --> 00:29:43,000 Imam 10 ², 10 ¹ i 10 na nulu. 439 00:29:43,000 --> 00:29:48,000 Imamo sličnu vrstu stvar u binarnom, 440 00:29:48,000 --> 00:29:55,000 osim da je naša baza, kao što smo ga zovu, je 2 umjesto 10. 441 00:29:55,000 --> 00:29:58,000 Ove 10s da sam napisao ovdje dolje na dnu, 442 00:29:58,000 --> 00:30:02,000 ovaj 10 ², 10 ¹, 10 do nula, 10 je naša baza, 443 00:30:02,000 --> 00:30:08,000 i eksponent, 0, 1, ili 2, 444 00:30:08,000 --> 00:30:14,000 Podrazumijeva se po položaju znamenka u broju koji smo pisali. 445 00:30:14,000 --> 00:30:21,000 1, ako ćemo gledati na to, ovo je jedan u drugi položaj. 446 00:30:21,000 --> 00:30:27,000 S 3 je u 1. položaju, a 7 je u 0. položaju. 447 00:30:27,000 --> 00:30:35,000 To je kako smo dobili različite eksponentima u nastavku za naše baze. 448 00:30:35,000 --> 00:30:40,000 >> Nakon svega ovoga hrapavi zapravo, znate što? 449 00:30:40,000 --> 00:30:43,000 Mi ćemo učiniti-gdje si moja poništiti gumb ići? 450 00:30:43,000 --> 00:30:45,000 Ima to ide. 451 00:30:45,000 --> 00:30:47,000 Volim ovo poništiti stvar. 452 00:30:47,000 --> 00:30:51,000 Nakon toga mislim barem za mene 453 00:30:51,000 --> 00:30:54,000 najlakši način za početak pretvaranja binarni broj 454 00:30:54,000 --> 00:30:57,000 ili heksadecimalni broj gdje baza je 16 455 00:30:57,000 --> 00:31:02,000 a ne 10 ili 2 je ići naprijed i napisati 456 00:31:02,000 --> 00:31:09,000 osnove i predstavnicima za sve brojeve u mom binarni broj na vrhu. 457 00:31:09,000 --> 00:31:14,000 Ako počnemo s lijeva na desno i opet, 458 00:31:14,000 --> 00:31:17,000 koja je vrsta counterintuitive, 459 00:31:17,000 --> 00:31:23,000 Ja ću se vratiti na crno ovdje, imamo dva do 0. položaj, 460 00:31:23,000 --> 00:31:27,000 a onda imamo dvije ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 i zatim 2 do 3, 2 do 4, 2 do 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9, i 10. 463 00:31:39,000 --> 00:31:41,000 Ove brojke sam pisani out su svi eksponenti. 464 00:31:41,000 --> 00:31:48,000 Samo sam napisao baze ovdje u prvom 3 samo za prostor. 465 00:31:48,000 --> 00:31:50,000 >> U ovom trenutku ja ću ići naprijed, a ja sam zapravo će izbrisati 466 00:31:50,000 --> 00:31:53,000 stvari koje smo učinili u decimalu, ako je to u redu. 467 00:31:53,000 --> 00:31:57,000 Svi ste je dobio to. 468 00:31:57,000 --> 00:32:05,000 Oni od vas gleda online siguran sam da će biti u mogućnosti da me premotati ako želite. 469 00:32:05,000 --> 00:32:07,000 Prebacivanje natrag na olovke. 470 00:32:07,000 --> 00:32:12,000 Sada, ono što možemo učiniti, ako ti dečki nisu potpuno do brzine na svojim moćima 2, 471 00:32:12,000 --> 00:32:15,000 to je totalno cool. 472 00:32:15,000 --> 00:32:18,000 To se događa. Ja razumijem. 473 00:32:18,000 --> 00:32:23,000 Jednom sam imao intervju za posao, gdje sam bio rekao da bi trebao znati sve ovlasti 2 474 00:32:23,000 --> 00:32:26,000 gore kroz 2 do 30.. 475 00:32:26,000 --> 00:32:29,000 To nije posao koji sam dobio. 476 00:32:29,000 --> 00:32:32,000 U svakom slučaju, vi možete ići naprijed i učiniti math ovdje, 477 00:32:32,000 --> 00:32:35,000 ali s binarnom to zapravo ne smisla, 478 00:32:35,000 --> 00:32:38,000 i niti smisla s decimalnom ili heksadecimalni bilo, 479 00:32:38,000 --> 00:32:43,000 učiniti math gdje imate nula. 480 00:32:43,000 --> 00:32:49,000 Možete vidjeti imam 0 ovdje, a ovdje 0, 0 ovdje, 0 ovdje, 0 ovdje, 0 ovdje. 481 00:32:49,000 --> 00:32:52,000 Zašto bi to nema smisla raditi stvarni matematiku 482 00:32:52,000 --> 00:32:56,000 izračunati odgovarajuću moć 2 za tu poziciju? 483 00:32:56,000 --> 00:32:59,000 Točno, kao što su Charlotte rekao, to će biti 0. 484 00:32:59,000 --> 00:33:05,000 Možda te uštedjeti vrijeme, ako izračuna ovlasti dvije nije tvoj jaka odijelo. 485 00:33:05,000 --> 00:33:10,000 U ovom slučaju mi ​​samo treba da ga izračunati za dva do 0 što je-? 486 00:33:10,000 --> 00:33:12,000 [Studentski] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 na 3, koji je-? 488 00:33:14,000 --> 00:33:16,000 [Studentski] 8. >> [Nate H.] 8. 489 00:33:16,000 --> 00:33:18,000 2 4? 490 00:33:18,000 --> 00:33:21,000 [Student] 2. Žao mi je, jednom. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 u 4 je 16, točno. 492 00:33:26,000 --> 00:33:28,000 2 na 5, Kevin? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 na 8? 494 00:33:32,000 --> 00:33:38,000 [Studentski] 32 x 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] Savršeno. 496 00:33:41,000 --> 00:33:43,000 I 2 na 10? 497 00:33:43,000 --> 00:33:45,000 [Studentski] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Da, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Nakon što smo dobili ove brojeve možemo zbroj ih sve gore. 500 00:33:57,000 --> 00:34:01,000 I to je mjesto gdje je stvarno važno učiniti nekoliko stvari. 501 00:34:01,000 --> 00:34:07,000 Jedan je ići sporo i provjerite svoj posao. 502 00:34:07,000 --> 00:34:10,000 Možete reći da je jedan na kraju tog broja, 503 00:34:10,000 --> 00:34:15,000 tako da sam definitivno trebao dobiti neparan broj kao moj rezultat, 504 00:34:15,000 --> 00:34:18,000 jer su sve one druge će biti čak i brojevi 505 00:34:18,000 --> 00:34:21,000 s obzirom da je to binarni broj. 506 00:34:21,000 --> 00:34:24,000 Druga stvar koju treba učiniti je ako dođete do ove točke na testu 507 00:34:24,000 --> 00:34:27,000 a vi ste ga piše ovako daleko 508 00:34:27,000 --> 00:34:30,000 a ti ponestaje vremena 509 00:34:30,000 --> 00:34:33,000 pogledati broj bodova da je ovaj problem vrijedan. 510 00:34:33,000 --> 00:34:40,000 Ovaj problem, kao što možete vidjeti, ako sam okrenuti leđa na moj laptop jako brzo- 511 00:34:40,000 --> 00:34:44,000 ovaj problem je vrijedan dva boda, tako da to nije vrsta toga 512 00:34:44,000 --> 00:34:47,000 trebali biti prolazi kroz ako ste stvarno u stisci s vremenom. 513 00:34:47,000 --> 00:34:52,000 No, mi ćemo se vratiti na iPad, a mi ćemo proći kroz njega jako brzo. 514 00:34:52,000 --> 00:34:54,000 >> Volim raditi male brojeve prvi 515 00:34:54,000 --> 00:34:56,000 jer sam naći da lakše. 516 00:34:56,000 --> 00:35:00,000 Sviđa mi se 32 i 8, jer oni idu zajedno prilično lako, a mi smo dobili 50. 517 00:35:00,000 --> 00:35:03,000 16 i 1 dobiva 17. 518 00:35:03,000 --> 00:35:05,000 Tu smo dobili 57, 519 00:35:05,000 --> 00:35:14,000 i onda možemo napraviti ostatak ove, tako da možemo napraviti 57, 156. 520 00:35:14,000 --> 00:35:16,000 Hajde. 521 00:35:16,000 --> 00:35:19,000 Čovječe, dobro, neka je vidjeti. 522 00:35:19,000 --> 00:35:27,000 Imali smo 57, 256, i 1024. 523 00:35:27,000 --> 00:35:31,000 U ovom trenutku, ja bih radije samo proći. 524 00:35:31,000 --> 00:35:35,000 Ja nemam pojma. Ja očito trebati pročitati na to. 525 00:35:35,000 --> 00:35:40,000 7, 6, 4, te dobiti 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Tada smo dobili tri, a onda smo dobili jedan. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Uskršnje jaje, tko? 530 00:35:55,000 --> 00:35:59,000 Svatko prepoznaje ovaj broj? 531 00:35:59,000 --> 00:36:02,000 Chris prepoznaje broj. Što to znači, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, pa ako pogledate ovo, to izgleda kao Leet. 534 00:36:11,000 --> 00:36:15,000 Hacker stvari. Pazi za tu vrstu stvari na polovici ili kviz, a. 535 00:36:15,000 --> 00:36:19,000 Ako ste vidjeli takve stvari i pitate "Huh" 536 00:36:19,000 --> 00:36:22,000 da zapravo moglo značiti nešto. 537 00:36:22,000 --> 00:36:24,000 Ne znam. David voli stavljajući ga u. 538 00:36:24,000 --> 00:36:26,000 To je dobar način da se razum to provjeriti. 539 00:36:26,000 --> 00:36:30,000 Kao ok, ja mogu vidjeti što se događa. 540 00:36:30,000 --> 00:36:34,000 >> To je tjedan 0/Week jednom stvari. 541 00:36:34,000 --> 00:36:39,000 Ako smo se vratili na naš laptop sada, 542 00:36:39,000 --> 00:36:46,000 smanjivanje, i par drugih stvari. 543 00:36:46,000 --> 00:36:50,000 Tu je ASCII, koji smo radili puno problema sa seta. 544 00:36:50,000 --> 00:36:55,000 Taj pojam grada A. Što je to zapravo? 545 00:36:55,000 --> 00:36:57,000 Znajući da je decimalni broj. 546 00:36:57,000 --> 00:37:00,000 65 je ono što se mapirati u ASCII tablici, 547 00:37:00,000 --> 00:37:03,000 i da je stoga kako računalo ga piše, 548 00:37:03,000 --> 00:37:06,000 a to je kako smo bili uzimajući daleko sa zapravo pisanje 549 00:37:06,000 --> 00:37:09,000 glavni lik i lik mala slova 550 00:37:09,000 --> 00:37:14,000 u nekim od tih rješenja i problema postavlja da ste radili. 551 00:37:14,000 --> 00:37:16,000 Par drugih stvari. 552 00:37:16,000 --> 00:37:25,000 Imamo izjave, Boolean izraza, uvjeti, petlje, varijable i teme. 553 00:37:25,000 --> 00:37:29,000 >> Oni sve čini da ima smisla za najveći dio? 554 00:37:29,000 --> 00:37:35,000 Neki od ove terminologije je malo funky vremena na vrijeme. 555 00:37:35,000 --> 00:37:46,000 Volim misliti i gubitka kao i za većinu dio nečega što završava sa zarezom. 556 00:37:46,000 --> 00:37:51,000 Izjave poput x = 7, koji postavlja varijablu, 557 00:37:51,000 --> 00:37:54,000 valjda se zove x = 7. 558 00:37:54,000 --> 00:38:01,000 Vjerojatno x je tip koji može pohraniti broj 7, 559 00:38:01,000 --> 00:38:05,000 tako da je int ili eventualno plovak ili kratka ili char, 560 00:38:05,000 --> 00:38:07,000 nešto slično. 561 00:38:07,000 --> 00:38:12,000 Boolean izraz koristi ove double jednak 562 00:38:12,000 --> 00:38:17,000 i prasak jednak ili ne jednaka, manje od, veći od, 563 00:38:17,000 --> 00:38:22,000 manje od ili jednako, sve takve stvari. 564 00:38:22,000 --> 00:38:28,000 Uvjeti su onda, ako drugdje izjave. 565 00:38:28,000 --> 00:38:32,000 Ja bih se sjetiti da se ne može imati drugo bez odgovarajuće ako. 566 00:38:32,000 --> 00:38:37,000 Isto tako, ne možete imati drugo ako ne odgovara ako. 567 00:38:37,000 --> 00:38:40,000 Petlje, podsjećaju na tri vrste petlji smo udaranja u vas 568 00:38:40,000 --> 00:38:43,000 za posljednjih nekoliko sekcija i problematičnih seta. 569 00:38:43,000 --> 00:38:46,000 Korištenje ne dok kad ste dobivanje korisničkog unosa, 570 00:38:46,000 --> 00:38:51,000 koristite dok petlje do određenog stanja je istina, 571 00:38:51,000 --> 00:38:56,000 , a zatim koristite one za petlje ako je potrebno 572 00:38:56,000 --> 00:39:01,000 znati što iteracija petlje ste trenutno na je kako sam razmišljati o tome. 573 00:39:01,000 --> 00:39:07,000 Ili, ako radite za svakog lika u nizu želim učiniti nešto, 574 00:39:07,000 --> 00:39:15,000 za svaki element u polju želim učiniti nešto da taj element. 575 00:39:15,000 --> 00:39:18,000 >> Teme i događanja. 576 00:39:18,000 --> 00:39:21,000 To nismo pokriveni tako izričito u C, 577 00:39:21,000 --> 00:39:23,000 ali zapamtite ovo od nule. 578 00:39:23,000 --> 00:39:26,000 To je pojam imaju različite scenarije. 579 00:39:26,000 --> 00:39:32,000 To je također i pojam emitiranje događaja. 580 00:39:32,000 --> 00:39:37,000 Neki ljudi nisu koristili emitirati u svojim projektima u početku, 581 00:39:37,000 --> 00:39:40,000 što je totalno cool, 582 00:39:40,000 --> 00:39:46,000 ali to su dva različita načina rukovanja ovu veći problem zove konkurenciji, 583 00:39:46,000 --> 00:39:49,000 koji je kako ti se programi za izvršenje 584 00:39:49,000 --> 00:39:54,000 ili naizgled izvršiti u isto vrijeme? 585 00:39:54,000 --> 00:39:59,000 Različiti zadaci trčanje, dok drugi poslovi su također prikazuju. 586 00:39:59,000 --> 00:40:01,000 Ovo je način kako vaš operativni sustav čini se da rade. 587 00:40:01,000 --> 00:40:04,000 To je razlog zašto, iako, primjerice, 588 00:40:04,000 --> 00:40:10,000 Ja sam dobio moj preglednik trčanje, ja također mogu uključiti Spotify i igrati pjesmu. 589 00:40:10,000 --> 00:40:14,000 To je više od idejnog stvar za razumjeti. 590 00:40:14,000 --> 00:40:17,000 Ja bih pogledati nitima kratkim 591 00:40:17,000 --> 00:40:21,000 ako želite saznati više o tome. 592 00:40:21,000 --> 00:40:26,000 >> Hajdemo vidjeti, ja vjerujem da bi moglo biti 593 00:40:26,000 --> 00:40:31,000 Problem na to u jednoj od njih. 594 00:40:31,000 --> 00:40:35,000 Opet, mislim teme i događaji nisu nešto što ćemo pokriti u C 595 00:40:35,000 --> 00:40:41,000 Upravo zato što je znatno teže nego u nule. 596 00:40:41,000 --> 00:40:44,000 Vi ne bi trebali brinuti o njemu, ali definitivno razumiju koncepte, 597 00:40:44,000 --> 00:40:47,000 shvatiti što se događa. 598 00:40:47,000 --> 00:40:52,000 Prije nego što smo prešli na, sva pitanja na Tjednu 0 materijalni? 599 00:40:52,000 --> 00:40:55,000 Svatko osjeća prilično dobro? 600 00:40:55,000 --> 00:41:03,000 Razumijevanje varijable i što je varijabla? 601 00:41:03,000 --> 00:41:08,000 >> Premještanje na. Tjedan 1. 602 00:41:08,000 --> 00:41:12,000 Par stvari ovdje koje nisu posebno pokrivene 603 00:41:12,000 --> 00:41:21,000 u kvizu pregledu nužno, a također su više konceptualne stvari koje treba razmišljati o tome. 604 00:41:21,000 --> 00:41:30,000 Prvi je taj pojam od onoga izvornog koda, prevodioci i objektnog koda su. 605 00:41:30,000 --> 00:41:32,000 Svatko? Bosiljak. 606 00:41:32,000 --> 00:41:37,000 Je li objekt kodnog mislim koda je ono što ste stavili u zveka, 607 00:41:37,000 --> 00:41:42,000 i objekt kod je ono zveka stavlja tako da je vaše računalo može pročitati program. 608 00:41:42,000 --> 00:41:44,000 Točno. 609 00:41:44,000 --> 00:41:47,000 Izvorni kod je C koda da ste zapravo upišite gore. 610 00:41:47,000 --> 00:41:50,000 Objekt code je ono što ste dobili od zveka. 611 00:41:50,000 --> 00:41:54,000 To je 0s i 1s u tom binarnom formatu. 612 00:41:54,000 --> 00:41:59,000 Zatim što se događa kada imate hrpu objekata datoteka, 613 00:41:59,000 --> 00:42:04,000 reći da ste sastavljanje projekt ili program koji koristi više datoteka izvornog koda, 614 00:42:04,000 --> 00:42:09,000 koje po konvenciji su dati. C ekstenziju. 615 00:42:09,000 --> 00:42:13,000 To je razlog zašto smo caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Ako ste pisanje Java programa možete im dati proširenje. Java. 617 00:42:18,000 --> 00:42:24,000 Python programi imaju ekstenziju. PY često. 618 00:42:24,000 --> 00:42:26,000 >> Kada imate više. C datoteke, što ih prevesti. 619 00:42:26,000 --> 00:42:29,000 Jeka ispljune sve ovo binarni smeće. 620 00:42:29,000 --> 00:42:33,000 Zatim, jer želite samo jednog programa 621 00:42:33,000 --> 00:42:37,000 imate linker vezu svih tih predmeta datoteka zajedno 622 00:42:37,000 --> 00:42:40,000 u jednom izvršnu datoteku. 623 00:42:40,000 --> 00:42:45,000 To je ono što se događa kada koristite CS50 knjižnicu, na primjer. 624 00:42:45,000 --> 00:42:50,000 The CS50 knjižnica je i to. H datoteka zaglavlja 625 00:42:50,000 --> 00:42:53,000 da ste pročitali, da je # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 A onda je i posebna binarna datoteka knjižnica 627 00:42:58,000 --> 00:43:02,000 , koji je bio sastavljen da je 0s i 1s, 628 00:43:02,000 --> 00:43:08,000 i da-l zastava, pa ako se vratimo na naše prostore, a mi izgledaju jako brzo 629 00:43:08,000 --> 00:43:11,000 na što se ovdje događa kada gledamo naš zveka zapovijedanja, 630 00:43:11,000 --> 00:43:15,000 ono što mi imamo je ovo naš izvorni kod datoteka ovdje. 631 00:43:15,000 --> 00:43:18,000 To su hrpa prevodilac zastave. 632 00:43:18,000 --> 00:43:22,000 I onda na samom kraju, te-l zastave karika u 633 00:43:22,000 --> 00:43:30,000 stvarne binarne datoteke za ove dvije knjižnice, CS50 knjižnica i onda matematika knjižnica. 634 00:43:30,000 --> 00:43:35,000 >> Razumijevanje svaku vrstu datoteke 'svrhu 635 00:43:35,000 --> 00:43:38,000 u kompilacijski proces je nešto što ćete želite biti u mogućnosti da 636 00:43:38,000 --> 00:43:43,000 dati barem visoku razinu pregled. 637 00:43:43,000 --> 00:43:46,000 Izvorni kod dolazi u. objekta broj izlazi. 638 00:43:46,000 --> 00:43:53,000 Šifra objekta datoteka povezati, a vi dobiti lijepu, izvršnu datoteku. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 To je također mjesto gdje možete dobiti greška na više točaka 641 00:43:58,000 --> 00:44:00,000 u izračunu procesu. 642 00:44:00,000 --> 00:44:04,000 Ovo je mjesto gdje, na primjer, ako se uzmu ovu povezuje zastavu, 643 00:44:04,000 --> 00:44:10,000 CS50 zastava, a vi ga izostaviti u prostore ili kad radite svoj kôd, 644 00:44:10,000 --> 00:44:13,000 ovo je mjesto gdje ćete dobiti greška u fazi povezivanja, 645 00:44:13,000 --> 00:44:18,000 i linker će reći: "Hej, što se zove funkcija GetString 646 00:44:18,000 --> 00:44:20,000 da je u CS50 knjižnici. " 647 00:44:20,000 --> 00:44:25,000 "Vi ste mi rekli da je u CS50 knjižnici, a ja ne mogu naći kod za njega." 648 00:44:25,000 --> 00:44:28,000 To je mjesto gdje morate ga povezati u, a to je zasebna 649 00:44:28,000 --> 00:44:33,000 iz prevodilac pogreške jer prevodilac gleda sintakse i takve stvari. 650 00:44:33,000 --> 00:44:38,000 To je dobro znati što se događa kada. 651 00:44:38,000 --> 00:44:42,000 >> Druge stvari znati. 652 00:44:42,000 --> 00:44:49,000 Rekao bih vam svakako želite pogledati na kratko typecasting učinio Jordana 653 00:44:49,000 --> 00:44:55,000 razumjeti što Ints su ispod haube, 654 00:44:55,000 --> 00:44:58,000 što znakovi su ispod haube. 655 00:44:58,000 --> 00:45:02,000 Kada govorimo o ASCII i mi zapravo pogledati ASCII tablice, 656 00:45:02,000 --> 00:45:07,000 što to radi daje nam ispod haube izgled 657 00:45:07,000 --> 00:45:13,000 na koliko se računalo zapravo predstavlja kapital i brojku 7 658 00:45:13,000 --> 00:45:17,000 i zarez i upitnik. 659 00:45:17,000 --> 00:45:20,000 Računalo također ima posebne načine predstavljaju 660 00:45:20,000 --> 00:45:23,000 broj 7 kao cijeli broj. 661 00:45:23,000 --> 00:45:27,000 Ona ima poseban način da predstavljaju broj 7 kao pomičnim zarezom broj, 662 00:45:27,000 --> 00:45:29,000 i oni su vrlo različiti. 663 00:45:29,000 --> 00:45:32,000 Typecasting je kako kažeš računalo "Hej, želim vam da pretvoriti 664 00:45:32,000 --> 00:45:37,000 iz jedne reprezentacije u drugu reprezentacije. " 665 00:45:37,000 --> 00:45:40,000 Zašto ne bismo pogledati to. 666 00:45:40,000 --> 00:45:44,000 >> Također bih pogledati kratki o knjižnicama i na kratko prevodiocima. 667 00:45:44,000 --> 00:45:47,000 Oni govore o procesu izrade, 668 00:45:47,000 --> 00:45:53,000 što je knjižnica, i ići preko neke od tih pitanja koje ste mogli dobiti pitao. 669 00:45:53,000 --> 00:45:55,000 Pitanja o tjedna 1 materijala? 670 00:45:55,000 --> 00:46:03,000 Ima li kakvih teme u ovdje, čini se da zastrašiti želite pokriti? 671 00:46:03,000 --> 00:46:07,000 Pokušavam puhati kroz većinu tih ranijih temama, tako da možemo doći do 672 00:46:07,000 --> 00:46:13,000 upućuje i učiniti malo rekurzije. 673 00:46:13,000 --> 00:46:15,000 Misli? 674 00:46:15,000 --> 00:46:19,000 Bilo da pokrije? 675 00:46:19,000 --> 00:46:21,000 Vrijeme je za neke čokolade možda? 676 00:46:21,000 --> 00:46:23,000 Vi dečki rade kroz njega. 677 00:46:23,000 --> 00:46:26,000 Ja ću držati ispijanje kave na mom. 678 00:46:26,000 --> 00:46:31,000 Tjedan 2. 679 00:46:31,000 --> 00:46:34,000 Dobro poziv, dobar poziv. 680 00:46:34,000 --> 00:46:38,000 U tjednu dva razgovarali smo malo više o funkcijama. 681 00:46:38,000 --> 00:46:43,000 >> U prvih nekoliko problematičnih seta nismo stvarno pisati nikakve funkcije na sve 682 00:46:43,000 --> 00:46:45,000 osim što funkcija? 683 00:46:45,000 --> 00:46:47,000 [Studentski] Glavni. >> Glavni, točno. 684 00:46:47,000 --> 00:46:51,000 I tako smo vidjeli različite kostime koje nosi glavni. 685 00:46:51,000 --> 00:46:54,000 Tu je onaj u kojem je potrebno bez argumenata, 686 00:46:54,000 --> 00:46:58,000 a mi samo reći prazninu između zagradama, 687 00:46:58,000 --> 00:47:01,000 i onda je onaj drugi gdje mi žele uzeti argumente naredbenog retka, 688 00:47:01,000 --> 00:47:08,000 i kao što smo vidjeli, to je mjesto gdje imate int argc i argv string lepezu 689 00:47:08,000 --> 00:47:13,000 ili sada da smo zapravo smo izloženi nizu biti char * da je 690 00:47:13,000 --> 00:47:20,000 idemo ga početi pisati kao char * argv i onda zagrade. 691 00:47:20,000 --> 00:47:22,000 U Problem Set 3, vi vidjeli gomilu funkcija, 692 00:47:22,000 --> 00:47:27,000 i provodi hrpa funkcija, crtati, gledati, otimati. 693 00:47:27,000 --> 00:47:31,000 Prototipova sve su napisane tu za vas. 694 00:47:31,000 --> 00:47:33,000 >> Ono što sam želio govoriti o ovdje s funkcijama stvarno brzo 695 00:47:33,000 --> 00:47:38,000 je da postoje tri dijelovi za njih kad god napisati funkciju. 696 00:47:38,000 --> 00:47:43,000 Morate navesti povratni tip funkcije. 697 00:47:43,000 --> 00:47:46,000 Morate navesti naziv funkcije, a zatim morate odrediti 698 00:47:46,000 --> 00:47:51,000 the argument popis ili lista parametara. 699 00:47:51,000 --> 00:47:57,000 Na primjer, ako bih napisati funkciju sumirati hrpa brojeva 700 00:47:57,000 --> 00:48:03,000 , a zatim se vratiti na mene zbroj onoga što će biti moj povratak putovanja 701 00:48:03,000 --> 00:48:06,000 ako sam htio da zaključimo prirodna broja, a zatim se vratiti iznos? 702 00:48:06,000 --> 00:48:12,000 Tada je naziv funkcije. 703 00:48:12,000 --> 00:48:27,000 Ako sam ići naprijed i pisati u zelenom, ovaj dio je povratni tip. 704 00:48:27,000 --> 00:48:34,000 Ovaj dio je ime. 705 00:48:34,000 --> 00:48:40,000 A onda u zagradi između 706 00:48:40,000 --> 00:48:46,000 gdje dajem argumente, 707 00:48:46,000 --> 00:48:56,000 često skraćeno kao args, ponekad se nazivaju parametri za parametara. 708 00:48:56,000 --> 00:49:00,000 A ako imate jedan, samo navesti jedan. 709 00:49:00,000 --> 00:49:06,000 Ako imate više možete razdvojiti jedan sa zarezom. 710 00:49:06,000 --> 00:49:13,000 A za svaki argument ga dati dvije stvari koje su Kevin-? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Morate dati tip i onda ime. 712 00:49:18,000 --> 00:49:21,000 A onda je ime, a ime je ime koje idete na korištenje 713 00:49:21,000 --> 00:49:25,000 koje se odnose na taj argument unutar sum funkciji, 714 00:49:25,000 --> 00:49:27,000 u funkciji koju trenutno pišete. 715 00:49:27,000 --> 00:49:32,000 >> Vi ne morate, na primjer, ako ću sumirati, 716 00:49:32,000 --> 00:49:41,000 recimo, niz cijelih brojeva-hrapavi učiniti int niz, 717 00:49:41,000 --> 00:49:46,000 a ja ću osobno dati neke kovrčave aparatić tu- 718 00:49:46,000 --> 00:49:51,000 onda kad sam proći niz na funkciju sum 719 00:49:51,000 --> 00:49:55,000 Sam ga proći na prvoj poziciji u popis argumenata. 720 00:49:55,000 --> 00:49:59,000 Ali polje koje sam prošla u ne mora imati ime arr. 721 00:49:59,000 --> 00:50:07,000 Arr će biti kako sam se odnose na taj argument unutar tijela funkcije. 722 00:50:07,000 --> 00:50:10,000 Druga je stvar da moramo uzeti u obzir, 723 00:50:10,000 --> 00:50:14,000 a to je malo drugačiji od funkcija, ali mislim da je važna točka, 724 00:50:14,000 --> 00:50:20,000 je da u C kada pišem funkciju ovako 725 00:50:20,000 --> 00:50:29,000 kako znam koliko su elementi u tom nizu? 726 00:50:29,000 --> 00:50:31,000 To je nešto od trik pitanje. 727 00:50:31,000 --> 00:50:35,000 Razgovarali smo o tome malo u prošlotjednom dijelu. 728 00:50:35,000 --> 00:50:40,000 Kako ću znati broj elemenata unutar polja u C? 729 00:50:40,000 --> 00:50:44,000 Je li način? 730 00:50:44,000 --> 00:50:49,000 >> Ispada da ne postoji način da se zna. 731 00:50:49,000 --> 00:50:52,000 Morate ga proći odvojeno. 732 00:50:52,000 --> 00:50:55,000 Tu je trik koji možete učiniti 733 00:50:55,000 --> 00:51:00,000 ako ste u istoj funkciji u kojoj je polje bila prijavljena, 734 00:51:00,000 --> 00:51:04,000 i radite s stog niz. 735 00:51:04,000 --> 00:51:06,000 No, to radi samo ako ste u istoj funkciji. 736 00:51:06,000 --> 00:51:09,000 Nakon što prođe niz na drugu funkciju, ili ako ste proglašeni niz 737 00:51:09,000 --> 00:51:12,000 i staviti da niz na hrpu, koju ste koristili malloc 738 00:51:12,000 --> 00:51:15,000  i da takve stvari, sve oklade su off. 739 00:51:15,000 --> 00:51:18,000 Tada ćete zapravo morati proći oko 740 00:51:18,000 --> 00:51:21,000 posebna argument ili drugi parametar 741 00:51:21,000 --> 00:51:23,000 vam reći koliko je velika polja je. 742 00:51:23,000 --> 00:51:28,000 U tom slučaju, ja bih htio koristiti zarez-Žao mi je, to će isključiti zaslon ovdje- 743 00:51:28,000 --> 00:51:32,000 i ja bih proći u drugi argument 744 00:51:32,000 --> 00:51:40,000  i to nazvati int len ​​za duljinu. 745 00:51:40,000 --> 00:51:44,000 >> Jedna stvar koja bi mogla doći do na kvizu 746 00:51:44,000 --> 00:51:49,000 vas traži da pisati ili provesti određenu funkciju zove nešto. 747 00:51:49,000 --> 00:51:54,000 Ako mi ne daju vam prototip, tako da je cijela ova stvar ovdje, 748 00:51:54,000 --> 00:51:58,000 cijeli ovaj nered se zove funkcije izjavu ili funkcije prototip, 749 00:51:58,000 --> 00:52:01,000 ovo je jedna od prvih stvari koje ćete želite utvrditi, ako to nije dao 750 00:52:01,000 --> 00:52:03,000 da vas odmah na kvizu. 751 00:52:03,000 --> 00:52:06,000 Drugi trik sam saznao je da 752 00:52:06,000 --> 00:52:11,000 kažu mi da vam dati prototip za funkciju, a mi reći, "Hej, moraš ga pisati." 753 00:52:11,000 --> 00:52:16,000 Unutar vitičastih zagrada koje imate na kvizu 754 00:52:16,000 --> 00:52:20,000 ako primijetite da je povratni tip i primijetite da povratni tip 755 00:52:20,000 --> 00:52:25,000 je nešto drugo od praznine, što znači da funkcija ne vraća ništa, 756 00:52:25,000 --> 00:52:28,000 onda jedna stvar koju definitivno želim učiniti je napisati 757 00:52:28,000 --> 00:52:33,000 neka vrsta povratka izjavu na samom kraju funkciji. 758 00:52:33,000 --> 00:52:40,000 Povratak, au ovom slučaju, mi ćemo staviti prazno jer želimo ispuniti u prazno. 759 00:52:40,000 --> 00:52:44,000 Ali to dobiva li razmišlja na pravi način o tome kako ću pristupiti ovaj problem? 760 00:52:44,000 --> 00:52:49,000 I to vas podsjeća da ćeš morati vratiti vrijednost 761 00:52:49,000 --> 00:52:51,000 pozivatelju funkcije. 762 00:52:51,000 --> 00:52:54,000 >> Da. >> [Studentski] Da li stil primijeniti kada smo pisanje koda na kvizu? 763 00:52:54,000 --> 00:52:58,000 Kao što je uvlačenje i takve stvari? >> [Studentski] Aha. 764 00:52:58,000 --> 00:53:00,000 Ne, ne toliko. 765 00:53:00,000 --> 00:53:09,000 Mislim puno-to je nešto što ćemo pojasniti na kvizu na dan, 766 00:53:09,000 --> 00:53:15,000 ali obično brige o # uključuje i takve stvari, to je vrsta izvana. 767 00:53:15,000 --> 00:53:17,000 [Studentski] Trebate li komentirati svoj rukopisu kod? 768 00:53:17,000 --> 00:53:19,000 Trebate li komentirati svoj rukopisu kod? 769 00:53:19,000 --> 00:53:24,000 Komentiranje je uvijek dobro, ako ste zabrinuti za djelomični kredit 770 00:53:24,000 --> 00:53:29,000 ili želite komunicirati svoju namjeru za greder. 771 00:53:29,000 --> 00:53:33,000 Ali sam, opet, će pojasniti na kvizu i sama na kviz dana, 772 00:53:33,000 --> 00:53:39,000 ali ja ne vjerujem da ćete se morati pisati komentare, br. 773 00:53:39,000 --> 00:53:42,000 Obično ne, ali to je definitivno jedna od onih stvari gdje 774 00:53:42,000 --> 00:53:45,000 možete komunicirati svoju namjeru, poput "Hej, ovo je mjesto gdje ću s njim." 775 00:53:45,000 --> 00:53:49,000 A ponekad da mogu pomoći s djelomičnom kredit. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Bosiljak. 778 00:53:53,000 --> 00:53:56,000 [Bosiljak] Koja je razlika između izjavljuje, recimo, int Lang 779 00:53:56,000 --> 00:54:03,000 u argumentima ili parametara u odnosu na deklariranje varijable unutar funkcije? 780 00:54:03,000 --> 00:54:05,000 Wow, kava siđe dušnik. 781 00:54:05,000 --> 00:54:07,000 [Bosiljak] Kao što stvari koje želite staviti u argumentima. 782 00:54:07,000 --> 00:54:09,000 Da, to je veliko pitanje. 783 00:54:09,000 --> 00:54:11,000 Kako odabrati što stvari koje želite staviti u argumente 784 00:54:11,000 --> 00:54:17,000 u odnosu na što stvari koje treba učiniti unutar funkcije? 785 00:54:17,000 --> 00:54:24,000 U ovom slučaju smo uključeni oboje ih kao argumente 786 00:54:24,000 --> 00:54:29,000 jer oni su nešto što se tko će se koristiti zbroj funkcija 787 00:54:29,000 --> 00:54:32,000 treba odrediti one stvari. 788 00:54:32,000 --> 00:54:35,000 >> Zbroj funkcija, kao što smo razgovarali o tome, nema načina znajući 789 00:54:35,000 --> 00:54:40,000 kako je veliki niz je to dobiva od svoje pozivatelja ili tko koristi zbroj funkciju. 790 00:54:40,000 --> 00:54:44,000 To nema načina znajući koliko je velika da je niz. 791 00:54:44,000 --> 00:54:48,000 Razlog prolazimo u ovom dužini ovdje kao argument 792 00:54:48,000 --> 00:54:51,000 jer to je nešto što mi zapravo govorite pozivatelja funkcije, 793 00:54:51,000 --> 00:54:55,000 tko će se koristiti zbroj funkcija, "Hej, ne samo da ćete morati dati nam niz 794 00:54:55,000 --> 00:54:59,000 od Ints, također imate li nam reći koliko je velika polja koja ste nam dali je. " 795 00:54:59,000 --> 00:55:03,000 [Bosiljak] Oni će oboje biti argumenata naredbenog retka? 796 00:55:03,000 --> 00:55:06,000 Ne, to su stvarni argumenti da će proći u funkciju. 797 00:55:06,000 --> 00:55:10,000 >> Dopustite mi napraviti novu stranicu ovdje. 798 00:55:10,000 --> 00:55:13,000 [Bosiljak] Kao i ime će proći- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Ako imam int main (void), 800 00:55:24,000 --> 00:55:27,000 i ja ću staviti u mom povratku 0 ovdje dolje na dnu, 801 00:55:27,000 --> 00:55:31,000 i reći želim pozvati zbroj funkciju. 802 00:55:31,000 --> 00:55:42,000 Želim reći int x = suma (); 803 00:55:42,000 --> 00:55:46,000 Da biste koristili funkciju zbroj moram proći u oba polja da želim sumirati 804 00:55:46,000 --> 00:55:51,000 i duljina niza, tako da je to gdje 805 00:55:51,000 --> 00:55:54,000 pretpostavku imao sam niz Ints, 806 00:55:54,000 --> 00:56:12,000 da sam se int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 vrsta uporabe koji sjeckan do sintaksu tamo, 808 00:56:16,000 --> 00:56:21,000 onda ono što ću učiniti je zbroj bih želio da prođe u 809 00:56:21,000 --> 00:56:27,000 i numbaz i broj 3 810 00:56:27,000 --> 00:56:30,000 reći funkciju zbroj "Ok, ovdje je niz želim da zaključimo." 811 00:56:30,000 --> 00:56:34,000 "Evo njegova veličina." 812 00:56:34,000 --> 00:56:39,000 Ima li to smisla? Je li to odgovor na vaše pitanje? 813 00:56:39,000 --> 00:56:42,000 >> Na mnoge načine to ne paralelno što radimo s glavni 814 00:56:42,000 --> 00:56:44,000 kada imamo argumente naredbenog retka. 815 00:56:44,000 --> 00:56:47,000 Program kao Cezarova šifra, na primjer, da je potrebno 816 00:56:47,000 --> 00:56:53,000 zapovjedna linija argumenti ne bi mogli učiniti ništa. 817 00:56:53,000 --> 00:56:57,000 To ne bi znali kako kodirati ako nije rekao to što je ključ za korištenje 818 00:56:57,000 --> 00:57:03,000 ili ako to nije reći što ste htjeli niz za šifriranje. 819 00:57:03,000 --> 00:57:08,000 Poticanje za ulaz, ovo je mjesto gdje imamo dvije različite mehanizme 820 00:57:08,000 --> 00:57:14,000 za uzimanje ulaz u od korisnika, za uzimanje podatke od korisnika. 821 00:57:14,000 --> 00:57:19,000 Za problem Set 1 vidjeli smo to GetInt, GetString, GetFloat način 822 00:57:19,000 --> 00:57:26,000 od pitajući za ulaz, a to se zove koristite standardni ulazni stream. 823 00:57:26,000 --> 00:57:28,000 To je malo drugačija. 824 00:57:28,000 --> 00:57:31,000 To je nešto što možete učiniti u jednom trenutku, za razliku od 825 00:57:31,000 --> 00:57:35,000 kada pozvati program, kada pokrenete program pokrenut. 826 00:57:35,000 --> 00:57:41,000 Naredbenog retka argumente svi su naveli kada ste pokrenuli program pokrenut. 827 00:57:41,000 --> 00:57:47,000 Mi smo bili miješanje dvije od tih. 828 00:57:47,000 --> 00:57:52,000 Kada smo koristiti argumente za funkciju, to je slično kao naredbenog retka glavni argumenti. 829 00:57:52,000 --> 00:57:56,000 To je kad se pozovete funkciju morate reći 830 00:57:56,000 --> 00:58:05,000 točno ono što je potrebno kako bi se obavljaju svoje zadatke. 831 00:58:05,000 --> 00:58:08,000 Još jedna dobra stvar za pogledati, a ja ću vam na to gledate u svoje slobodno vrijeme, 832 00:58:08,000 --> 00:58:11,000 i to je bio pokriven u kvizu-bio je to pojam djelokruga 833 00:58:11,000 --> 00:58:15,000 i lokalne varijable u odnosu na globalnim varijablama. 834 00:58:15,000 --> 00:58:18,000 Učinite obratite pozornost na to. 835 00:58:18,000 --> 00:58:23,000 >> Sada kada smo dobivanje na ovom drugih stvari, 836 00:58:23,000 --> 00:58:27,000 u tjednu 3 smo počeli govoriti o potrazi i sortiranje. 837 00:58:27,000 --> 00:58:32,000 Traženje i sortiranje, barem u CS50, 838 00:58:32,000 --> 00:58:39,000 je vrlo uvod u neke od teoretskih dijelova računalnih znanosti. 839 00:58:39,000 --> 00:58:42,000 Problem traženja, problem sortiranja 840 00:58:42,000 --> 00:58:46,000 su veliki, kanonska problemi. 841 00:58:46,000 --> 00:58:52,000 Kako vam određeni broj u niz milijardama brojeva? 842 00:58:52,000 --> 00:58:55,000 Kako vam određeni naziv unutar telefonskog imenika 843 00:58:55,000 --> 00:58:59,000 koja je pohranjena na vašem prijenosnom računalu? 844 00:58:59,000 --> 00:59:04,000 I tako smo predstaviti ovaj pojam asimptotska premijerne puta 845 00:59:04,000 --> 00:59:11,000 stvarno kvantificirati koliko dugo, koliko je teško to problem su, 846 00:59:11,000 --> 00:59:14,000 koliko dugo su se riješiti. 847 00:59:14,000 --> 00:59:20,000 U, vjerujem, 2011 u kvizu postoji problem koji mislim da zaslužuje 848 00:59:20,000 --> 00:59:27,000 pokrivaju vrlo brzo, što je ova, 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 >> Ovdje govorimo o najbrže moguće vrijeme izvođenja 851 00:59:41,000 --> 00:59:46,000 za određeni algoritam, a zatim najsporije moguće pokrenuti vrijeme. 852 00:59:46,000 --> 00:59:52,000 Ovo Omega i O su zapravo samo kratice. 853 00:59:52,000 --> 00:59:55,000 Oni Opisi Prečaci za reći 854 00:59:55,000 --> 00:59:59,000 koliko brzo na najbolji mogući slučaju će naš algoritam mali, 855 00:59:59,000 --> 01:00:06,000 i kako spor u najgorem mogućem slučaju će naš algoritam pokrenuti? 856 01:00:06,000 --> 01:00:10,000 Ajmo napraviti nekoliko njih, a to su također pokriveni 857 01:00:10,000 --> 01:00:13,000 u kratko asimptotska zapis, koji sam visoko preporučiti. 858 01:00:13,000 --> 01:00:17,000 Jackson učinio jako dobar posao. 859 01:00:17,000 --> 01:00:23,000 S binarnog pretraživanja, govorimo o binarnom pretraživanje kao što je algoritam, 860 01:00:23,000 --> 01:00:28,000 a mi obično govorimo o tome u smislu njegovog velikog O. 861 01:00:28,000 --> 01:00:30,000 Što je veliki O? 862 01:00:30,000 --> 01:00:34,000 Što je najsporiji moguće pokrenuti vrijeme od binarnog traženja? 863 01:00:34,000 --> 01:00:36,000 [Studentski] N ²? 864 01:00:36,000 --> 01:00:41,000 Zatvori, pretpostavljam slično tome. 865 01:00:41,000 --> 01:00:43,000 To je puno brže od toga. 866 01:00:43,000 --> 01:00:45,000 [Studentski] Binarni? >> Da, binarno pretraživanje. 867 01:00:45,000 --> 01:00:47,000 [Studentski] To je log n. 868 01:00:47,000 --> 01:00:49,000 Prijavite n, tako što se prijavite n znači? 869 01:00:49,000 --> 01:00:51,000 To poluvremena ga svake iteracije. 870 01:00:51,000 --> 01:00:56,000 Točno, pa u najsporiji mogući slučaju, 871 01:00:56,000 --> 01:01:00,000 recimo ako imate sortirani niz 872 01:01:00,000 --> 01:01:08,000 od milijun brojeva i broj tražite 873 01:01:08,000 --> 01:01:14,000 je bilo vrlo prvi element u polju ili posljednjeg elementa u polju. 874 01:01:14,000 --> 01:01:18,000 Zapamtite, binarni algoritam za pretraživanje radi gleda na sredini elementa, 875 01:01:18,000 --> 01:01:21,000 vidim ako je to utakmica koja ste u potrazi za. 876 01:01:21,000 --> 01:01:23,000 Ako je tako, onda super, što ste ga našli. 877 01:01:23,000 --> 01:01:27,000 >> U najbolji mogući slučaju, kako brzo se izvoditi binarnog pretraživanja? 878 01:01:27,000 --> 01:01:29,000 [Studenti] 1. 879 01:01:29,000 --> 01:01:32,000 1, to je konstanta vrijeme, velika O u jednom. Da. 880 01:01:32,000 --> 01:01:36,000 [Studentski] imam pitanje. Kada kažeš prijavite n, što znači s obzirom na bazu 2, zar ne? 881 01:01:36,000 --> 01:01:40,000 Da, tako da je druga stvar. 882 01:01:40,000 --> 01:01:44,000 Kažemo log n, i mislim da kad sam bio u srednjoj školi 883 01:01:44,000 --> 01:01:48,000 Uvijek sam pretpostavljala da je zapisnik bio baza 10. 884 01:01:48,000 --> 01:01:57,000 Da, tako da, prijavite baza 2 obično je ono što ćemo koristiti. 885 01:01:57,000 --> 01:02:02,000 Opet, ide natrag u binarnom traženju, ako ste u potrazi za bilo 886 01:02:02,000 --> 01:02:05,000 element na samom kraju ili element na samom početku, 887 01:02:05,000 --> 01:02:08,000 jer ti početi u sredini, a zatim ga bacite 888 01:02:08,000 --> 01:02:13,000 god polovine ne zadovoljava kriterije da ste u potrazi za, 889 01:02:13,000 --> 01:02:15,000 i idete na sljedeću poluvremena i sljedeći pol i sljedeću pol. 890 01:02:15,000 --> 01:02:19,000 Ako sam u potrazi za najveći element u integer milijuna niz 891 01:02:19,000 --> 01:02:25,000 Ja ću ga prepoloviti na većini zapisniku milijun puta 892 01:02:25,000 --> 01:02:28,000 prije nego što sam konačno testirati i vidjeti da je element tražim 893 01:02:28,000 --> 01:02:33,000 je najveći ili u najvišoj indeksa polja, 894 01:02:33,000 --> 01:02:38,000 i da će se zapisnik n, prijavite od milijun puta. 895 01:02:38,000 --> 01:02:40,000 >> Bubble vrsta. 896 01:02:40,000 --> 01:02:43,000 Nemojte vi sjećate algoritam sortiranja mjehurić? 897 01:02:43,000 --> 01:02:47,000 Kevin, možete li mi dati brzo rekapitulacija onoga što se dogodilo u algoritmu bubble sortiranje? 898 01:02:47,000 --> 01:02:50,000 [Kevin] Uglavnom to ide kroz sve što je u popisu. 899 01:02:50,000 --> 01:02:52,000 To izgleda na prve dvije. 900 01:02:52,000 --> 01:02:55,000 Ako prvi je veći od drugog jedan ona ih swaps. 901 01:02:55,000 --> 01:02:58,000 Zatim uspoređuje drugi i treći, istu stvar, zamjene, 902 01:02:58,000 --> 01:03:00,000 Treća i četvrta, sve do kraja. 903 01:03:00,000 --> 01:03:03,000 Veće brojevi će slijediti do kraja. 904 01:03:03,000 --> 01:03:07,000 I nakon međutim mnogo petlje ste učinili. 905 01:03:07,000 --> 01:03:11,000 Točno, tako što Kevin je da ćemo gledati veće brojeve 906 01:03:11,000 --> 01:03:15,000 mjehurić do kraja niza. 907 01:03:15,000 --> 01:03:19,000 Na primjer, ne možete smeta nam šetnju kroz ovaj primjer, ako je to naš niz? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Vi ćete uzeti dva i tri. 909 01:03:21,000 --> 01:03:23,000 3 je veći od 2, tako da ih zamijene. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Točno, pa smo zamijenili to, i tako smo dobili dvije, tri, šest, četiri i devet. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Onda usporediti tri i šest. 912 01:03:31,000 --> 01:03:33,000 3 je manji od šest, tako da ih napuste, 913 01:03:33,000 --> 01:03:37,000 i 6 i 4, da bih ih zamijeniti zato što je 4 manji od šest. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Točno, pa sam se dva, tri, četiri, šest, devet. 915 01:03:42,000 --> 01:03:46,000 [Kevin] A 9 je veći od šest, tako da ga napuste. 916 01:03:46,000 --> 01:03:48,000 A ti bi se vratiti kroz nju opet. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Jesam li ja učinio u ovom trenutku? >> [Kevin] Ne 918 01:03:50,000 --> 01:03:52,000 A zašto ja ne učinjeno u ovom trenutku? 919 01:03:52,000 --> 01:03:54,000 Budući da to izgleda kao moj polje je riješeno. Gledam na to. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Prođite kroz njega opet i pobrinite se da ne postoje više swaps 921 01:03:57,000 --> 01:04:00,000 prije nego što u potpunosti ne može zaustaviti. 922 01:04:00,000 --> 01:04:04,000 Točno, tako da ćete morati držati prolazi kroz i pobrinite se da ne postoje zamjene 923 01:04:04,000 --> 01:04:06,000 koje možete napraviti u ovom trenutku. 924 01:04:06,000 --> 01:04:08,000 To je zapravo samo sretan, kao što ste rekli, da smo završili 925 01:04:08,000 --> 01:04:12,000 samo da bi jednom proći kroz te smo razvrstani. 926 01:04:12,000 --> 01:04:16,000 No, za to se u općem slučaju mi ​​zapravo ćete to učiniti opet i opet. 927 01:04:16,000 --> 01:04:20,000 A u stvari, to je bio primjer na najbolji mogući slučaju, 928 01:04:20,000 --> 01:04:24,000 kao što smo vidjeli u problemu. 929 01:04:24,000 --> 01:04:28,000 Vidjeli smo da je najbolji mogući slučaj je n. 930 01:04:28,000 --> 01:04:32,000 Mi smo išli kroz polja jednog vremena. 931 01:04:32,000 --> 01:04:35,000 Što je najgore moguće slučaj za ovog algoritma? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 A što to izgledati? Što bi pogled niz kao da će uzeti vremena n ²? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [nečujno] razvrstani. 935 01:04:43,000 --> 01:04:51,000 Točno, pa ako sam imao niz 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 prvo devet bi mjehur skroz gore. 937 01:04:54,000 --> 01:04:59,000 Nakon jedne iteracije ćemo imati 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Tada 7 bi mjehurić, 6, 5, 2, 7, 9, i tako dalje i tako dalje. 939 01:05:07,000 --> 01:05:13,000 >> Morali bismo proći kroz cijeli niz n puta, 940 01:05:13,000 --> 01:05:16,000 i zapravo možete dobiti nešto precizniji od toga 941 01:05:16,000 --> 01:05:23,000 jer jednom smo se preselili 9 skroz gore u svom posljednjem mogućem položaju 942 01:05:23,000 --> 01:05:26,000 znamo da nikada ne morate usporediti protiv tog elementa opet. 943 01:05:26,000 --> 01:05:29,000 Nakon što smo početi bubbling od 7 do 944 01:05:29,000 --> 01:05:35,000 znamo da možemo zaustaviti jednom sedam je pravo prije 9 945 01:05:35,000 --> 01:05:37,000 budući da smo već usporedili 9 do njega. 946 01:05:37,000 --> 01:05:46,000 Ako ste to učinili u pametan način to nije uistinu, mislim da puno vremena. 947 01:05:46,000 --> 01:05:49,000 Nećeš usporediti sve moguće [nečujne] kombinacije 948 01:05:49,000 --> 01:05:55,000 svaki put kad ide kroz svake iteracije. 949 01:05:55,000 --> 01:05:59,000 Ali ipak, kad govorimo o tome gornja granica možemo reći da je 950 01:05:59,000 --> 01:06:04,000 tražite na n ² usporedbe sve na putu kroz. 951 01:06:04,000 --> 01:06:12,000 >> Vratimo se, a budući da smo počinju da se malo na kratko vrijeme 952 01:06:12,000 --> 01:06:15,000 Rekao bih svakako trebao ići kroz ostatak ove tablice, 953 01:06:15,000 --> 01:06:17,000 ispunite sve van. 954 01:06:17,000 --> 01:06:20,000 Razmislite o primjerima. Razmislite o konkretnim primjerima. 955 01:06:20,000 --> 01:06:22,000 To je jako zgodan i koristan za napraviti. 956 01:06:22,000 --> 01:06:25,000 Ga izvući. 957 01:06:25,000 --> 01:06:28,000 To je vrsta tablici da kao što ste proći kroz u informatici 958 01:06:28,000 --> 01:06:32,000 vi stvarno trebali početi znati ove napamet. 959 01:06:32,000 --> 01:06:34,000 To su vrste pitanja ćete dobiti u intervjuima. 960 01:06:34,000 --> 01:06:36,000 To su vrste stvari koje su dobro znati, 961 01:06:36,000 --> 01:06:41,000 i razmišljam o tim rubnim slučajevima, stvarno figuring out kako razmišljati o 962 01:06:41,000 --> 01:06:45,000 znajući da je za balon sortirati najgori mogući niz 963 01:06:45,000 --> 01:06:52,000 sortirati s koje je onaj koji je u obrnutom redoslijedu. 964 01:06:52,000 --> 01:06:58,000 >> Upućuje. Pričajmo malo o pokazivače. 965 01:06:58,000 --> 01:07:03,000 U posljednjih nekoliko minuta imamo ovdje 966 01:07:03,000 --> 01:07:11,000 Znam da je to nešto zajedno s datotekom I / O tom je prilično nova. 967 01:07:11,000 --> 01:07:19,000 Kada govorimo o pokazivače razlog želimo razgovarati o pokazivače 968 01:07:19,000 --> 01:07:24,000 jer, jedna, kada radimo u C 969 01:07:24,000 --> 01:07:33,000 mi smo stvarno na prilično niskoj razini u odnosu na većinu modernih programskih jezika. 970 01:07:33,000 --> 01:07:38,000 Mi smo zapravo u mogućnosti da manipuliraju varijable u memoriji, 971 01:07:38,000 --> 01:07:43,000 shvatiti gdje oni zapravo nalazi unutar našeg RAM-a. 972 01:07:43,000 --> 01:07:46,000 Nakon što sam otišao na da se nastava operacijskih sustava vidjet ćete 973 01:07:46,000 --> 01:07:48,000 da je to, opet, svojevrsna apstrakcija. 974 01:07:48,000 --> 01:07:50,000 To je zapravo nije slučaj. 975 01:07:50,000 --> 01:07:52,000 Imamo virtualne memorije koja se skriva te detalje od nas. 976 01:07:52,000 --> 01:07:58,000 >> No, za sada se može pretpostaviti da kada imate program, 977 01:07:58,000 --> 01:08:02,000 Na primjer, kada se početi prikazivati ​​svoj Cezarova šifra programa- 978 01:08:02,000 --> 01:08:06,000 Ja ću se vratiti na moj ipad stvarno brzo- 979 01:08:06,000 --> 01:08:12,000 da je na samom početku svog programa, ako imate, recimo, 980 01:08:12,000 --> 01:08:15,000 4 gigabajta RAM-a na vašem prijenosnom računalu, 981 01:08:15,000 --> 01:08:21,000 što se izdvojiti ovaj komad, a mi ćemo nazvati ovaj RAM-a. 982 01:08:21,000 --> 01:08:25,000 I to počinje u mjestu idemo na poziv 0, 983 01:08:25,000 --> 01:08:30,000 a završava na mjestu koje ćemo nazvati četiri gigabajta. 984 01:08:30,000 --> 01:08:37,000 Ja stvarno ne mogu pisati. Čovjek, koji je hakirana. 985 01:08:37,000 --> 01:08:40,000 Kada vaš program izvršava 986 01:08:40,000 --> 01:08:44,000 operativni sustav urezuje RAM, 987 01:08:44,000 --> 01:08:51,000 i to određuje različite segmente za različite dijelove svog programa da živite u. 988 01:08:51,000 --> 01:08:58,000 Dolje ovdje ovo područje je vrsta ničijoj zemlji. 989 01:08:58,000 --> 01:09:02,000 Kada ići gore malo dalje ovdje 990 01:09:02,000 --> 01:09:05,000 imaš zapravo mjesto gdje 991 01:09:05,000 --> 01:09:09,000 kod za svoje programske životima. 992 01:09:09,000 --> 01:09:13,000 To stvarna binarni kod, da izvršna datoteka zapravo se učitava u memoriju 993 01:09:13,000 --> 01:09:17,000 kada pokrenete program, a živi u kodu segmentu. 994 01:09:17,000 --> 01:09:22,000 I kao što je vaš program izvršava procesor izgleda u ovom segmentu koda 995 01:09:22,000 --> 01:09:24,000 shvatiti što je sljedeći upute? 996 01:09:24,000 --> 01:09:27,000 Što je sljedeće linija koda moram izvršiti? 997 01:09:27,000 --> 01:09:31,000 >> Tu je također i podaci segment, a to je gdje su oni string konstante 998 01:09:31,000 --> 01:09:34,000 pohranjuju se da ste koristili. 999 01:09:34,000 --> 01:09:42,000 I onda dalje tamo je ovo mjesto koje se zove gomila. 1000 01:09:42,000 --> 01:09:46,000 Mi pristupili memorije tamo pomoću malloc, 1001 01:09:46,000 --> 01:09:49,000 , a zatim prema samom vrhu svog programa 1002 01:09:49,000 --> 01:09:52,000 tu je stog, 1003 01:09:52,000 --> 01:09:57,000 i to je gdje smo bili igrajući za većinu od početka. 1004 01:09:57,000 --> 01:09:59,000 To nije u mjerilu ili ništa. 1005 01:09:59,000 --> 01:10:03,000 Puno je to vrlo stroj ovisan, 1006 01:10:03,000 --> 01:10:10,000 ovisan o operativnom sustavu, ali to je relativno kako se stvari blokovima gore. 1007 01:10:10,000 --> 01:10:17,000 Kada pokrenete program i proglasiti varijabla zove x- 1008 01:10:17,000 --> 01:10:27,000 Ja ću povući još jedan okvir dolje, a to će biti RAM-a, kao dobro. 1009 01:10:27,000 --> 01:10:29,000 I ja ću gledati. 1010 01:10:29,000 --> 01:10:34,000 Mi ćemo izvući nazubljene linije ukazuju na to je samo mali dio RAM-a 1011 01:10:34,000 --> 01:10:38,000 a ne sve to što smo izvući na vrhu. 1012 01:10:38,000 --> 01:10:43,000 >> Ako Izjavljujem integer varijable zvane x, 1013 01:10:43,000 --> 01:10:49,000 onda ono što sam zapravo dobiti je mapiranje 1014 01:10:49,000 --> 01:10:54,000 koji je pohranjen u tablici simbola mog programa 1015 01:10:54,000 --> 01:11:00,000 koji povezuje ime x na ovim prostorima memorije koje sam nacrtana 1016 01:11:00,000 --> 01:11:03,000 ovdje između vertikalnih rešetaka. 1017 01:11:03,000 --> 01:11:08,000 Ako imam liniju koda u mom programu koji kaže da je x = 7 1018 01:11:08,000 --> 01:11:15,000 procesor zna "Oh, ok, znam da je x živi na tom mjestu u memoriji." 1019 01:11:15,000 --> 01:11:25,000 "Ja ću ići naprijed i napisati 7 tamo." 1020 01:11:25,000 --> 01:11:28,000 Kako to znati što je to mjesto u memoriji? 1021 01:11:28,000 --> 01:11:30,000 Pa, da je sve učinjeno u vrijeme prevođenja. 1022 01:11:30,000 --> 01:11:34,000 Prevodilac brine o raspodjeli gdje svaka od varijabli ići 1023 01:11:34,000 --> 01:11:40,000 i stvaranje posebnog mapiranje odnosno povezuje točkice 1024 01:11:40,000 --> 01:11:43,000 između simbola i gdje to ide, varijabla je naziv 1025 01:11:43,000 --> 01:11:46,000 i gdje će živjeti u sjećanju. 1026 01:11:46,000 --> 01:11:50,000 No, ispada da zapravo možemo pristupiti u našim programima kao dobro. 1027 01:11:50,000 --> 01:11:55,000 To dobiva važno kada smo počeli govoriti o nekim strukturama podataka, 1028 01:11:55,000 --> 01:11:58,000 što je koncept koji ćemo predstaviti kasnije. 1029 01:11:58,000 --> 01:12:09,000 >> Ali za sada, ono što možete znati je da sam može stvoriti pokazivač na ovoj lokaciji, x. 1030 01:12:09,000 --> 01:12:12,000 Na primjer, mogu stvoriti varijablu pokazivača. 1031 01:12:12,000 --> 01:12:16,000 Kada smo stvoriti pokazivač varijablu koristimo zvijezda zapis. 1032 01:12:16,000 --> 01:12:21,000 U ovom slučaju, to govori da ću stvoriti pokazivač na int. 1033 01:12:21,000 --> 01:12:24,000 To je vrsta baš kao i svaka druga. 1034 01:12:24,000 --> 01:12:27,000 Dajemo mu varijablu kao y, 1035 01:12:27,000 --> 01:12:32,000 i onda smo ga postaviti jednako na adresu, na adresu. 1036 01:12:32,000 --> 01:12:38,000 U tom slučaju, možemo postaviti y ukazati na x 1037 01:12:38,000 --> 01:12:43,000 uzimajući adresu X, koji smo veze s ovim ampersand, 1038 01:12:43,000 --> 01:12:55,000 i onda smo krenuli y ukazati na njega. 1039 01:12:55,000 --> 01:12:59,000 Što to zapravo znači je, ako ćemo gledati na našem RAM 1040 01:12:59,000 --> 01:13:02,000 to stvara posebnu varijablu. 1041 01:13:02,000 --> 01:13:04,000 To će se zvati y, 1042 01:13:04,000 --> 01:13:06,000 i kad ova linija koda izvršava 1043 01:13:06,000 --> 01:13:13,000 to se zapravo događa stvoriti malo pokazivač koji mi obično izvlačenje kao strijela, 1044 01:13:13,000 --> 01:13:15,000 i to postavlja y ukazati na x. 1045 01:13:15,000 --> 01:13:17,000 Da. 1046 01:13:17,000 --> 01:13:19,000 [Studentski] Ako je x već pokazivač, da li bi samo napraviti 1047 01:13:19,000 --> 01:13:22,000 int * y = x, umjesto da se ampersand? 1048 01:13:22,000 --> 01:13:24,000 Da. 1049 01:13:24,000 --> 01:13:27,000 Ako je x već pokazivač, onda možete postaviti dva upućuje jednake jedni druge, 1050 01:13:27,000 --> 01:13:30,000 u kojem slučaju y ne ukazuju na x, 1051 01:13:30,000 --> 01:13:34,000 ali to bi ukazivalo na ono što je x pokazujući. 1052 01:13:34,000 --> 01:13:37,000 Nažalost, mi smo izvan vremena. 1053 01:13:37,000 --> 01:13:44,000 >> Ono što bih reći u ovom trenutku, možemo govoriti o ovom odsutan, 1054 01:13:44,000 --> 01:13:49,000 ali rekao bih početi raditi kroz ovaj problem, # 14. 1055 01:13:49,000 --> 01:13:53,000 Možete vidjeti da je već malo popuniti za vas ovdje. 1056 01:13:53,000 --> 01:13:57,000 Možete vidjeti da kad smo proglasiti dva pokazivača, int * x i y *, 1057 01:13:57,000 --> 01:14:01,000 i napomena da pokazujući * pored varijable je nešto što je učinjeno prošle godine. 1058 01:14:01,000 --> 01:14:05,000 Ispada da je to slično onome što radimo ove godine. 1059 01:14:05,000 --> 01:14:11,000 Nije bitno gdje ste pisati * Kada ste proglašenja pokazivač. 1060 01:14:11,000 --> 01:14:17,000 No, mi smo napisali * uz vrsti 1061 01:14:17,000 --> 01:14:24,000 jer, što ga čini vrlo jasno da ste deklariranje pokazivača varijablu. 1062 01:14:24,000 --> 01:14:27,000 Možete vidjeti da je proglašenje dva upućuje nam daje dvije kutije. 1063 01:14:27,000 --> 01:14:31,000 Evo kada smo postavili x jednak malloc 1064 01:14:31,000 --> 01:14:34,000 što to govori se poništaj sjećanje na hrpi. 1065 01:14:34,000 --> 01:14:41,000 Ova mala kutija ovdje, ovaj krug, nalazi se na hrpi. 1066 01:14:41,000 --> 01:14:43,000 X je pokazujući na njega. 1067 01:14:43,000 --> 01:14:46,000 Imajte na umu da je y se još uvijek ne pokazuje ništa. 1068 01:14:46,000 --> 01:14:50,000 Da biste dobili memorije za pohranu broj 42 u x. 1069 01:14:50,000 --> 01:14:55,000 mi bi koristiti ono zapis? 1070 01:14:55,000 --> 01:14:59,000 [Studentski] * 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 znači slijediti strelicu i baciti 42 tamo. 1073 01:15:06,000 --> 01:15:09,000 Ovdje gdje smo postavili y i x y mi smo pokazujući x. 1074 01:15:09,000 --> 01:15:13,000 Opet, ovo je baš kao što je Kevin gdje smo postavili y jednak x.. 1075 01:15:13,000 --> 01:15:15,000 Y ne ukazuje na x. 1076 01:15:15,000 --> 01:15:19,000 Umjesto toga, to je ukazujući na ono što je x ističući da kao dobro. 1077 01:15:19,000 --> 01:15:24,000 >> I onda napokon u ovoj posljednjoj kutiji postoje dvije moguće stvari koje smo mogli učiniti. 1078 01:15:24,000 --> 01:15:28,000 Jedan od njih je mogli bismo reći * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Druga stvar je da smo mogli reći-Alex, znaš ono što smo mogli učiniti ovdje? 1080 01:15:33,000 --> 01:15:37,000 Moglo bi se reći * x = 13 ili- 1081 01:15:37,000 --> 01:15:41,000 [Studentski] Moglo bi se reći int štogod. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Ako je ovo upućeno je kao int varijabla smo mogli učiniti. 1083 01:15:45,000 --> 01:15:49,000 Također smo mogli reći * y = 13 jer su oboje upućuju na isto mjesto, 1084 01:15:49,000 --> 01:15:51,000 tako da smo mogli koristiti bilo varijabla doći. 1085 01:15:51,000 --> 01:15:56,000 Da. >> [Studentski] Što bi to izgledati ako mi samo reći int x 13? 1086 01:15:56,000 --> 01:16:00,000 To će biti proglašenje novu varijablu nazvanu x, koji ne bi raditi. 1087 01:16:00,000 --> 01:16:04,000 Mi bi sudar jer smo proglasili x biti pokazivač ovdje. 1088 01:16:04,000 --> 01:16:10,000 [Studentski] Ako mi samo imao tu izjavu po sebi što bi to izgledati u smislu kruga? 1089 01:16:10,000 --> 01:16:14,000 Ako smo imali x = 13 onda ćemo imati okvir, i umjesto da ima strelicu 1090 01:16:14,000 --> 01:16:16,000 izlazi iz okvira ćemo ga izvući samo kao 13. 1091 01:16:16,000 --> 01:16:19,000 [Studentski] U okviru. Ok. 1092 01:16:19,000 --> 01:16:24,000 >> Hvala za gledanje, i sretno na kvizu 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]