1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [Muziciranja] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. Malan: U redu. 5 00:00:12,230 --> 00:00:16,440 To je CS50, i to je kraj tjedna 2. 6 00:00:16,440 --> 00:00:18,480 Tako je danas, idemo nastaviti naš izgled 7 00:00:18,480 --> 00:00:21,150 kako mi predstavljaju stvari ispod hood-- udaljava 8 00:00:21,150 --> 00:00:23,520 od brojeva kao brojeva i pomičnim zarezom vrijednosti 9 00:00:23,520 --> 00:00:26,810 i fokusiranje na žice i u konačnici više zanimljivih programa. 10 00:00:26,810 --> 00:00:30,140 Ali, također ćemo uzeti pogledati Nekoliko domene specifične problems-- 11 00:00:30,140 --> 00:00:33,620 od kojih je prvo se uključuje kriptografiju, 12 00:00:33,620 --> 00:00:36,570 umjetnost remećenje informacije, u kojem vidite gore ovdje 13 00:00:36,570 --> 00:00:41,480 Slika je to radio Orphan Annie Tajna dekoder prsten od prošle godine. 14 00:00:41,480 --> 00:00:46,490 >> To je zapravo vrlo primitivni oblik i Obiteljski oblik cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 pri čemu ovaj prsten ima dva disks-- jedna iznutra i jedan izvana. 16 00:00:50,590 --> 00:00:54,740 I okretanjem jedan od onih, možete suštini postroje slova poput 17 00:00:54,740 --> 00:00:59,520 do Z s drugim pismima kao i B kroz A. Drugim riječima, 18 00:00:59,520 --> 00:01:03,730 doslovce možete rotirati abecedu, Time dolazi s mapiranjem iz 19 00:01:03,730 --> 00:01:07,820 pisma slovima, tako da, ako htjela poslati tajnu poruku 20 00:01:07,820 --> 00:01:11,820 za nekoga poput Annie, mogli pisati dolje vaše poruke i rotirajte 21 00:01:11,820 --> 00:01:15,370 slova, pri čemu, ako misliš reći "A", te umjesto toga reći "B" 22 00:01:15,370 --> 00:01:17,280 misliš reći "B" umjesto toga reći "C" - 23 00:01:17,280 --> 00:01:20,240 ili nešto malo više pametan od to-- a onda, u konačnici, 24 00:01:20,240 --> 00:01:24,630 tako dugo dok je Annie ima tu dekoder prsten, ona može dešifrirati poruku. 25 00:01:24,630 --> 00:01:28,540 Sada, možete sjetiti, u stvari, da je ova korišten u vrlo poznatom filmu koji 26 00:01:28,540 --> 00:01:31,140 igra ad nauseum vrijeme Božić sezone. 27 00:01:31,140 --> 00:01:32,650 Idemo pogledati ovdje. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie PARKER: "Budite ga Poznato je da sve u sažetku 30 00:01:37,210 --> 00:01:41,000 da je Ralph Parker imenuje član Little Orphan Annie Secret 31 00:01:41,000 --> 00:01:44,860 Krug i ima pravo na sve počasti i beneficije u toj proceduri. " 32 00:01:44,860 --> 00:01:47,410 >> Ralphie Parker (pripovijeda): Potpisan Little Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Supotpisali, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 U tinte. 35 00:01:51,490 --> 00:01:55,494 Priznanja i koristi, Već u dobi od devet godina. 36 00:01:55,494 --> 00:01:57,402 >> [Muziciranja] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO lupetati] 38 00:02:00,470 --> 00:02:01,470 Ralphie PARKER: Hajde. 39 00:02:01,470 --> 00:02:02,344 Idemo s njim. 40 00:02:02,344 --> 00:02:06,029 Ne treba sve te gluposti O krijumčara i pirata. 41 00:02:06,029 --> 00:02:08,820 Radijski spiker: Poslušajte sutra noć za zaključni avanturu 42 00:02:08,820 --> 00:02:11,060 Crnog gusarskom brodu. 43 00:02:11,060 --> 00:02:14,740 Sada je vrijeme za Annie Tajna poruka za članove 44 00:02:14,740 --> 00:02:17,110 od Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Sjeti se djeca, samo članove Annie Secret Circle 46 00:02:20,700 --> 00:02:23,270 može dekodirati Annie tajnu poruku. 47 00:02:23,270 --> 00:02:27,270 >> Zapamtite, Annie je ovisno o vama. 48 00:02:27,270 --> 00:02:30,060 Postavite svoje igle za B-2. 49 00:02:30,060 --> 00:02:34,004 Ovdje je message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie Parker (pripovijeda): ja ja u svom prvom tajnom sastanku. 51 00:02:36,503 --> 00:02:40,041 Radijski spiker: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie Parker (pripovijeda): Oh, Pierre je bio u velikom glasovnom večeras. 53 00:02:42,790 --> 00:02:46,110 Mogao bih reći da je večeras Poruka je jako važno. 54 00:02:46,110 --> 00:02:47,930 >> Radijski spiker: --3, 25. 55 00:02:47,930 --> 00:02:49,940 To je poruka od Annie sama. 56 00:02:49,940 --> 00:02:52,182 Zapamtite, nemojte nikome reći. 57 00:02:52,182 --> 00:02:55,077 >> [Zadihan] 58 00:02:55,077 --> 00:02:57,285 Ralphie Parker (pripovijeda): Devedeset sekundi kasnije, ja sam 59 00:02:57,285 --> 00:03:00,090 u jedinoj sobi u Kuća u kojoj dječak od devet 60 00:03:00,090 --> 00:03:04,380 mogao sjediti na privatnost i dekodiranje. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B" 63 00:03:05,680 --> 00:03:06,524 >> [Smijulji] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie Parker (pripovijeda): Otišao sam u sljedeći. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 Prva riječ je "biti." 67 00:03:11,641 --> 00:03:12,140 Da! 68 00:03:12,140 --> 00:03:14,293 Dolazilo je lakše sada. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Smijulji] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Ajmo, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Moram ići! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie PARKER: Bit ću dolje, Ma. 74 00:03:21,538 --> 00:03:22,504 Gee čudo. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Budite sigurni da. "" Svakako "Što je? 77 00:03:31,220 --> 00:03:33,981 Što je Little Orphan Annie pokušavam reći? "Budite sigurni da se" što? 78 00:03:33,981 --> 00:03:35,522 MAJKA: Ralphie, Randy je dobio ići. 79 00:03:35,522 --> 00:03:36,735 Hoćete li, molim vas izaći? 80 00:03:36,735 --> 00:03:38,190 >> Ralphie PARKER: U redu, mama! 81 00:03:38,190 --> 00:03:39,787 Odmah ću se! 82 00:03:39,787 --> 00:03:41,995 Ralphie Parker (pripovijeda): Bio sam sve bliže sada. 83 00:03:41,995 --> 00:03:43,370 Napetost je bila strašna. 84 00:03:43,370 --> 00:03:44,794 Što je to bilo? 85 00:03:44,794 --> 00:03:47,656 Sudbina planete može držati u ravnoteži. 86 00:03:47,656 --> 00:03:50,518 >> MAJKA: Ralphie, Randy mora ići! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie PARKER: Ja ću biti u pravu se, za Boga miloga! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (Pripovijeda): Gotovo postoji! 89 00:03:55,343 --> 00:03:56,520 Moji prsti letjeli! 90 00:03:56,520 --> 00:03:58,500 Moj um je bio čelik zamka. 91 00:03:58,500 --> 00:03:59,850 Svaka pora vibrirao. 92 00:03:59,850 --> 00:04:01,806 Bilo je gotovo jasno! 93 00:04:01,806 --> 00:04:02,773 Da! 94 00:04:02,773 --> 00:04:03,273 Da! 95 00:04:03,273 --> 00:04:03,773 Da! 96 00:04:03,773 --> 00:04:04,740 Da! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie PARKER: "Budite sigurni popiti Ovaltine. " 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Bijedno komercijalne? 101 00:04:17,539 --> 00:04:19,439 >> [Muziciranja] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie PARKER: Gad jedan. 103 00:04:21,724 --> 00:04:23,460 >> [Smijeh] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. Malan: Pa da onda je pogled na ono kriptografije 105 00:04:27,070 --> 00:04:29,880 može biti za ovo-- a piti iz prošlost. 106 00:04:29,880 --> 00:04:30,900 Tako brzo najava. 107 00:04:30,900 --> 00:04:33,410 Ukoliko ste slobodni ova Petak u 13:15 i bi 108 00:04:33,410 --> 00:04:36,610 željeli da nam se pridruže za CS50 ručak, glava na ovaj URL ovdje. 109 00:04:36,610 --> 00:04:38,080 Prvi došao, prvi služiti kao i obično. 110 00:04:38,080 --> 00:04:41,840 No, s vremenom, mi ćemo biti sigurni da većina svatko tko želite sudjelovati 111 00:04:41,840 --> 00:04:43,640 može zakazati-mudar. 112 00:04:43,640 --> 00:04:45,170 >> Dakle žice. 113 00:04:45,170 --> 00:04:47,940 Imamo Zamyla-- kome Sada sam upoznao najvjerojatnije 114 00:04:47,940 --> 00:04:50,750 Problem je u Set 1-- čije Ime je precizirao čime. 115 00:04:50,750 --> 00:04:53,570 I pretpostavimo da upiše svoje ime u računalni program koji je 116 00:04:53,570 --> 00:04:55,710 s nečim poput getString. 117 00:04:55,710 --> 00:04:57,890 Da bi preuzeli one tipke, kako 118 00:04:57,890 --> 00:05:01,620 idemo o tome što predstavlja string, riječ, točka, 119 00:05:01,620 --> 00:05:03,960 ili više slova kao što su ovi ovdje? 120 00:05:03,960 --> 00:05:06,790 >> Razgovarali smo zadnji put o tome cijeli brojevi i problemi 121 00:05:06,790 --> 00:05:09,960 koji nastaju s cjelobrojnog preljeva i pomičnim zarezom vrijednosti 122 00:05:09,960 --> 00:05:12,190 i problemi koji nastaju u preciznosti. 123 00:05:12,190 --> 00:05:16,080 Sa žicama, mi barem imati malo više fleksibilnosti 124 00:05:16,080 --> 00:05:17,970 jer strings-- samo u stvarnom world-- 125 00:05:17,970 --> 00:05:19,790 može biti prilično proizvoljna duljina. 126 00:05:19,790 --> 00:05:21,055 Prilično kratka, prilično dugo. 127 00:05:21,055 --> 00:05:23,680 Ali čak i tada, idemo u Ocjenjuju da računala mogu ponekad 128 00:05:23,680 --> 00:05:27,200 ponestane memorije, a ne čak i pohraniti veliki dovoljno niz. 129 00:05:27,200 --> 00:05:30,840 >> Ali za sada, počnimo vizualizirati string kao nešto u tim kutijama 130 00:05:30,840 --> 00:05:31,340 ovdje. 131 00:05:31,340 --> 00:05:36,410 Dakle šest takve kutije, od kojih svaki predstavlja znak ili "Char." 132 00:05:36,410 --> 00:05:40,646 Dakle, podsjetiti da je "char" - C-H--R- je jedan od ugrađenih tipova podataka u C 133 00:05:40,646 --> 00:05:43,520 I ono što je lijepo je da možete koristiti da je na neki način kao sastavni blok, 134 00:05:43,520 --> 00:05:47,880 zagonetka komad, ako hoćete, da se formira Veći vrsta podataka koje ćemo i dalje 135 00:05:47,880 --> 00:05:49,410 nazvati "niz." 136 00:05:49,410 --> 00:05:53,650 >> Sada, ono što je korisno razmišljati o tome o stvarima kao što su žice na ovaj način? 137 00:05:53,650 --> 00:05:57,720 Pa, ispada da možemo zapravo iskoristiti ovu strukturu 138 00:05:57,720 --> 00:06:01,420 zapravo pristup pojedinih znakova na prilično jednostavan način. 139 00:06:01,420 --> 00:06:04,099 Ja ću ići naprijed i stvoriti spis pod nazivom "stringzero.c" 140 00:06:04,099 --> 00:06:05,765 ali ga možete zvati god želite. 141 00:06:05,765 --> 00:06:08,500 I na web stranici tečaja jest Već ovaj primjer unaprijed, 142 00:06:08,500 --> 00:06:10,430 tako da ne morate upišite sve van. 143 00:06:10,430 --> 00:06:13,820 >> I ja ću ići naprijed i prvo napraviti int main prazninu. 144 00:06:13,820 --> 00:06:15,980 I u roku od nekoliko dana, ćemo početi zafrkavati, osim 145 00:06:15,980 --> 00:06:19,070 ono praznina je tu, zašto je Int uz glavnu, i tako dalje. 146 00:06:19,070 --> 00:06:21,180 Ali za sada, neka je i dalje kopirati zalijepiti to. 147 00:06:21,180 --> 00:06:23,455 >> Idem proglasiti niz pod nazivom e. 148 00:06:23,455 --> 00:06:26,920 A ja ću se vratiti iz GetString bez obzira na vrstu korisnika u. 149 00:06:26,920 --> 00:06:29,170 To će biti jednostavna Program, nema nikakvih uputa, 150 00:06:29,170 --> 00:06:31,336 Samo ću na slijepo Očekujemo da korisnik zna 151 00:06:31,336 --> 00:06:32,600 što učiniti da i dalje ostane jednostavan. 152 00:06:32,600 --> 00:06:34,220 >> A sada ću imati za petlju. 153 00:06:34,220 --> 00:06:37,450 I unutar moje za petlje sam će imati int i dobiva nulu. 154 00:06:37,450 --> 00:06:40,660 I sam je, opet, samo konvencija, varijabla indeks za brojanje, 155 00:06:40,660 --> 00:06:42,350 ali ja bi mogao nazvati ovo što god želim. 156 00:06:42,350 --> 00:06:46,275 Ja ću učiniti sam manje than-- dobro Zamyla ime je šest slova. 157 00:06:46,275 --> 00:06:48,150 Tako da ću naporno kod koje postoji za sada. 158 00:06:48,150 --> 00:06:49,730 >> A onda i ++. 159 00:06:49,730 --> 00:06:53,190 I sada unutar njih kovrčava aparatić ću učiniti printf, 160 00:06:53,190 --> 00:06:55,460 i želim ispisati jednu lik u isto vrijeme. 161 00:06:55,460 --> 00:06:58,227 Tako da ću koristiti% C za možda prvi put. 162 00:06:58,227 --> 00:07:00,560 A onda želim ispisati svaki lik na vlastitu liniju. 163 00:07:00,560 --> 00:07:02,550 Zato ću staviti Malo Obrnuta kosa crta n postoji. 164 00:07:02,550 --> 00:07:03,640 Zatvori citat. 165 00:07:03,640 --> 00:07:06,250 >> A sada želim učiniti nešto ovdje. 166 00:07:06,250 --> 00:07:10,610 Želim ispisati specifično pismo u nizu, 167 00:07:10,610 --> 00:07:13,670 e, kao što sam iterating od nule na do šest. 168 00:07:13,670 --> 00:07:17,150 Drugim riječima, želim ispisati i'th karakter s. 169 00:07:17,150 --> 00:07:18,420 Sada kako mogu to učiniti? 170 00:07:18,420 --> 00:07:21,550 >> Pa baš kao i kutijama u ova reprezentacija ovdje, 171 00:07:21,550 --> 00:07:25,560 vrsta, dočarati pojam boks slova u, što na sličan način mogu to učiniti 172 00:07:25,560 --> 00:07:32,630 sintaktički u C jednostavnim navođenjem, Želim ispisati ť s-a i'th karaktera. 173 00:07:32,630 --> 00:07:35,640 Korištenje uglate zagrade na tipkovnici računala 174 00:07:35,640 --> 00:07:38,910 da je na US tipkovnici su uglavnom iznad povratnu tipku. 175 00:07:38,910 --> 00:07:42,630 >> Dakle, to nije baš točno ipak, kao što ste vjerojatno primijetili. 176 00:07:42,630 --> 00:07:44,780 Ali ja ću vrstom slijepo kretati ovdje. 177 00:07:44,780 --> 00:07:47,020 A ja ću učiniti da string 0. 178 00:07:47,020 --> 00:07:50,860 No, prije nego što sam to učiniti, neka je vidjeti ako mi Ne mogu predvidjeti neke uobičajene pogreške. 179 00:07:50,860 --> 00:07:52,844 Hoće li ovo prevesti? 180 00:07:52,844 --> 00:07:54,510 Ne, ja sam nedostaje cijela hrpa stvari. 181 00:07:54,510 --> 00:07:55,280 Knjižnice Čuo sam. 182 00:07:55,280 --> 00:07:58,480 >> Zato što header datoteke možda želim dodati ovdje? 183 00:07:58,480 --> 00:07:59,205 Da. 184 00:07:59,205 --> 00:08:01,580 >> PUBLIKA: Morate standardni I / O [nečujan] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. Malan: Izvrsno. 186 00:08:02,663 --> 00:08:06,060 Dakle, trebam standardni I / O. Za ono što Svrha želim standardnu ​​I / O? 187 00:08:06,060 --> 00:08:06,670 Za printf. 188 00:08:06,670 --> 00:08:09,220 Tako su stdio.h. 189 00:08:09,220 --> 00:08:13,490 I također predlaže da su CS50 knjižnica iz kojeg razloga? 190 00:08:13,490 --> 00:08:14,650 Da bi konce. 191 00:08:14,650 --> 00:08:17,780 Pa ćemo vidjeti što CS50 knjižnica radi 192 00:08:17,780 --> 00:08:19,260 stvoriti taj pojam nizu. 193 00:08:19,260 --> 00:08:21,930 No, za sada, možete samo misliti to kao stvarni tip podataka. 194 00:08:21,930 --> 00:08:23,596 >> Tako da se čini da se malo očistiti. 195 00:08:23,596 --> 00:08:27,060 A sada ću ići naprijed i doista ne čine niz 0. 196 00:08:27,060 --> 00:08:27,700 Sastavio. 197 00:08:27,700 --> 00:08:28,370 Dakle, to je dobro. 198 00:08:28,370 --> 00:08:32,799 Dakle ./string0 neka mi uvećali tako možemo pogledajte pobliže što se događa. 199 00:08:32,799 --> 00:08:33,850 Unesite. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-l-unos. 201 00:08:37,789 --> 00:08:39,440 I mi smo tiskati na Zamyla ime. 202 00:08:39,440 --> 00:08:40,409 >> Dakle, to je jako dobro. 203 00:08:40,409 --> 00:08:43,220 Dakle, sad idemo naprijed i pokrenuti ovaj program jednom, 204 00:08:43,220 --> 00:08:45,659 i tip iz Daven puno ime. 205 00:08:45,659 --> 00:08:46,450 Iznenađenje, iznenađenje. 206 00:08:46,450 --> 00:08:48,021 Unesite. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Nismo tiskani Daven-a puna ime ispravno. 209 00:08:51,750 --> 00:08:54,250 Sada bi to trebalo biti očito u osvrt zbog čega, 210 00:08:54,250 --> 00:08:57,010 vrsta, glupo dizajn odluka? 211 00:08:57,010 --> 00:08:59,590 >> Da, teško kodirano šest unutar moja za petlje. 212 00:08:59,590 --> 00:09:01,610 Sada sam to učinio samo zbog Znao sam Zamyla ime 213 00:09:01,610 --> 00:09:02,776 će biti šest slova. 214 00:09:02,776 --> 00:09:04,720 No, sigurno to nije opće rješenje. 215 00:09:04,720 --> 00:09:07,720 Tako ispada možemo dinamički shvatiti duljinu niza 216 00:09:07,720 --> 00:09:10,440 pozivom na funkciju nazvanu strlen. 217 00:09:10,440 --> 00:09:12,840 >> Opet, namjerno jezgrovito nazvan jednostavno 218 00:09:12,840 --> 00:09:14,450 da bi ga više prikladan za tip. 219 00:09:14,450 --> 00:09:17,170 No, to je sinonim uzimajući duljinu niza. 220 00:09:17,170 --> 00:09:23,190 Ja ću se vratiti u svoj terminal prozor i ponovno pokrenuti prevodilac. 221 00:09:23,190 --> 00:09:24,170 No, to je vikati na mene. 222 00:09:24,170 --> 00:09:29,130 Implicitno proglašenje funkciju knjižnicu strlen s tipom unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Ja sam izgubljen. 224 00:09:29,780 --> 00:09:30,590 Kompletno. 225 00:09:30,590 --> 00:09:32,940 >> Dakle, pogotovo što je vaš Oči početi glazuru preko 226 00:09:32,940 --> 00:09:36,000 s porukama o pogreškama kao što je ovaj, fokus iskreno se na prvih nekoliko riječi. 227 00:09:36,000 --> 00:09:38,590 Znamo da je problem u Linija 8, kao što je ovdje navedeno. 228 00:09:38,590 --> 00:09:40,500 I to je u string-0.c. 229 00:09:40,500 --> 00:09:43,580 Implicitno progla Funkcija knjižnica strlen. 230 00:09:43,580 --> 00:09:47,000 Tako da uglavnom ide biti uzorak poruka o pogreškama. 231 00:09:47,000 --> 00:09:49,190 Implicitno izjavljuje nešto. 232 00:09:49,190 --> 00:09:53,250 >> Dakle, ukratko, ono što se činilo da se učinili s obzirom da se postroje 8, ovdje. 233 00:09:53,250 --> 00:09:56,880 Što bi moglo biti rješenje biti još Ako ste nikada nije korišten strlen sebe? 234 00:09:56,880 --> 00:09:58,907 >> PUBLIKA: Dio drugačiji knjižnice? 235 00:09:58,907 --> 00:10:00,740 DAVID J. Malan: Dio od različitih knjižnica. 236 00:10:00,740 --> 00:10:02,400 Dakle, to je izjavio, da se tako izrazim. 237 00:10:02,400 --> 00:10:07,510 To se spominje u nekim datoteke osim stdio.h i CS50.h. 238 00:10:07,510 --> 00:10:09,179 A gdje je to definirano? 239 00:10:09,179 --> 00:10:12,220 Da budem iskren, ti ili opet samo znam ovo s vrha glave, 240 00:10:12,220 --> 00:10:13,640 ili Google Ovo i saznati. 241 00:10:13,640 --> 00:10:18,150 Ili to znaju, ja sam otvorio u CS50 aparati program terminala, koji 242 00:10:18,150 --> 00:10:22,200 je samo velika, preko cijelog zaslona verzija što je u dnu prozora gedit-a. 243 00:10:22,200 --> 00:10:24,970 >> I ispostavilo se da postoji Slično jezgrovit naredbe, pozvao 244 00:10:24,970 --> 00:10:29,280 Čovjek za uporabu, gdje, ako ste upisali naziv funkcije i pritisnite Enter, 245 00:10:29,280 --> 00:10:32,240 vi ćete se vratiti prilično Arcane dokumentacija. 246 00:10:32,240 --> 00:10:35,299 To je samo tekst koji se općenito izgleda malo nešto poput ovoga. 247 00:10:35,299 --> 00:10:37,090 To je malo neodoljiv na prvi pogled. 248 00:10:37,090 --> 00:10:39,048 Ali iskreno ću neka moje oči glazura nad 249 00:10:39,048 --> 00:10:41,930 a samo usredotočiti na dio Stalo mi je za trenutak. 250 00:10:41,930 --> 00:10:42,780 >> Koji je to. 251 00:10:42,780 --> 00:10:45,470 Koji izgleda kao strukturno nešto sam upoznat s. 252 00:10:45,470 --> 00:10:48,080 Doista stranica čovjek, tako govoriti, reći će 253 00:10:48,080 --> 00:10:51,590 u ono zaglavlje podnijeti funkciju kao strlen definiran. 254 00:10:51,590 --> 00:10:54,170 Zato ću se sada vratiti na gedit. 255 00:10:54,170 --> 00:10:59,070 I ja ću ići naprijed i dodajte ovdje #include 256 00:10:59,070 --> 00:11:00,480 i spremite datoteku. 257 00:11:00,480 --> 00:11:04,300 >> Idem za brisanje zaslona s Kontrola L Ako ste se pitali. 258 00:11:04,300 --> 00:11:08,210 A ja ću ponovno pokrenuti marku string.0, sastavlja ovaj put. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 To se činilo da rade Pusti me naprijed i to ponoviti sa Davenport. 261 00:11:15,020 --> 00:11:15,860 Unesite. 262 00:11:15,860 --> 00:11:17,730 I to je, također, činilo se da raditi. 263 00:11:17,730 --> 00:11:21,220 >> Dakle, možemo učiniti nešto bolje od toga, ipak, možemo početi s urednim stvari 264 00:11:21,220 --> 00:11:23,257 do samo malo. 265 00:11:23,257 --> 00:11:25,590 A ja ću se zapravo uvesti još jednu stvar sada. 266 00:11:25,590 --> 00:11:28,930 Ja ću ići naprijed i Spremi ovo u drugoj datoteci. 267 00:11:28,930 --> 00:11:31,770 A ja ću nazvati ovu sliku string1.c samo 268 00:11:31,770 --> 00:11:34,620 biti u skladu s pravilnikom moći ćete pronaći na internetu. 269 00:11:34,620 --> 00:11:37,050 >> I neka je usredotočiti se na isti broj. 270 00:11:37,050 --> 00:11:39,000 Ispada da sam je vrsta uzimanja 271 00:11:39,000 --> 00:11:42,600 zdravo za gotovo činjenicu da je moj laptop, i opet, CS50 aparat 272 00:11:42,600 --> 00:11:47,450 ima puno memorije, puno RAM-a, puno bajtova prostora 273 00:11:47,450 --> 00:11:48,920 u kojem mogu pohraniti nizove. 274 00:11:48,920 --> 00:11:53,560 >> No, stvarnost ako sam upisali dugo dovoljno i dovoljno tipke, 275 00:11:53,560 --> 00:11:56,170 Mogao bih u tipu teorije u više znakova 276 00:11:56,170 --> 00:11:58,830 od mog računala fizički ima memoriju za. 277 00:11:58,830 --> 00:11:59,830 A to je problematično. 278 00:11:59,830 --> 00:12:03,050 Slično kao int može samo računati tako visoko, u teoriji, 279 00:12:03,050 --> 00:12:06,600 možete strpati samo toliko znakova na vašem računalu RAM ili Random 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> Tako sam bolje je predvidjeti taj problem, čak i 282 00:12:11,140 --> 00:12:13,660 iako bi to moglo biti rijetka Kutak za slučaj, da se tako izrazim. 283 00:12:13,660 --> 00:12:15,670 Ne dogoditi da se često, moglo dogoditi. 284 00:12:15,670 --> 00:12:18,815 A ako se to dogodi, a ja ne predvidjeti i program za njega, 285 00:12:18,815 --> 00:12:20,300 moj program bi mogao raditi tko zna što. 286 00:12:20,300 --> 00:12:22,220 Freeze, objesiti, ponovno podizanje sustava, što god. 287 00:12:22,220 --> 00:12:24,490 Nešto predviđa se može dogoditi. 288 00:12:24,490 --> 00:12:27,120 >> Dakle, ono što ću učiniti Sada, od sada doista, 289 00:12:27,120 --> 00:12:31,630 je prije nego što sam ikada slijepo koristiti varijablu kao da je s 290 00:12:31,630 --> 00:12:36,790 je dodijeljena povratnu vrijednost neke druge funkcije kao što su getstring, 291 00:12:36,790 --> 00:12:40,200 Idem kako bi bili sigurni da je njegova vrijednost vrijedi. 292 00:12:40,200 --> 00:12:44,280 Dakle, ja znam samo iz pročitavši CS50 je dokumentacija za getstring, 293 00:12:44,280 --> 00:12:49,020 što u konačnici ćemo vas uputiti na, da getstring vraća poseban simbol 294 00:12:49,020 --> 00:12:53,610 naziva NULL, N-U-l-L u svim kape, ako nešto pođe po zlu. 295 00:12:53,610 --> 00:12:55,650 >> Pa normalno, vraća string. 296 00:12:55,650 --> 00:12:59,700 Ali inače, ako se ne vrati N-U-L-ja-- smo na kraju ćemo vidjeti što to zapravo 297 00:12:59,700 --> 00:13:01,790 means-- to samo znači se nešto loše dogodilo. 298 00:13:01,790 --> 00:13:05,560 Sada to znači, baš kao u Scratch, Ja mogu provjeriti stanje ovdje u C, 299 00:13:05,560 --> 00:13:08,830 ukoliko ne podudara NULL. 300 00:13:08,830 --> 00:13:11,930 Dakle, ako ne ovo vidio, to samo znači da nije jednako. 301 00:13:11,930 --> 00:13:15,290 >> Dakle, to je suprotno od jednake jednakima, koji je, podsjetimo, 302 00:13:15,290 --> 00:13:18,940 razlikuje od jednog jednaka, što je zadatak. 303 00:13:18,940 --> 00:13:23,030 Dakle, ako i nije jednako NULL, tek onda napraviti 304 00:13:23,030 --> 00:13:25,980 Želim da izvrši ove linije koda. 305 00:13:25,980 --> 00:13:28,080 Dakle, drugim riječima, prije nego što sam zaroniti u slijepo 306 00:13:28,080 --> 00:13:30,919 i početi Ponavljanje i kroz S, a to liječenje 307 00:13:30,919 --> 00:13:33,710 kao da se radi o slijedu likovi, ja ću prvo provjeriti, 308 00:13:33,710 --> 00:13:37,900 čekaj malo, je definitivno ne jednak ovom posebnom vrijednosti, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Jer ako je, loše stvari mogu dogoditi. 310 00:13:40,030 --> 00:13:43,080 A za sada, pretpostaviti da loše stvari događa znači vaš program ruši, 311 00:13:43,080 --> 00:13:45,070 a vi ne možete nužno oporaviti. 312 00:13:45,070 --> 00:13:46,800 Pa iskreno, to izgleda ružnije. 313 00:13:46,800 --> 00:13:48,660 To je vrsta zbunjujuće sada niti pogledati. 314 00:13:48,660 --> 00:13:50,780 No, to će postati više upoznati prije dugo. 315 00:13:50,780 --> 00:13:52,920 >> Ali ja ću predložiti sad jedna druga poboljšanja. 316 00:13:52,920 --> 00:13:54,660 To je poboljšanje za ispravnost. 317 00:13:54,660 --> 00:13:58,800 Moj program je sada više točno, jer U rijetkim slučajevima kad nema dovoljno memorije 318 00:13:58,800 --> 00:14:01,180 postoji, ja ću ga nositi, a ja ću učiniti ništa. 319 00:14:01,180 --> 00:14:02,680 Ja barem neće srušiti. 320 00:14:02,680 --> 00:14:05,000 >> Ali ajmo napraviti konačnu verziju ovdje. 321 00:14:05,000 --> 00:14:07,690 I spis pod nazivom string2.c. 322 00:14:07,690 --> 00:14:10,190 Ja ću zalijepiti da Isti broj samo na trenutak, 323 00:14:10,190 --> 00:14:14,210 i ja ću naglasiti ovo linija, 11, evo, samo na trenutak. 324 00:14:14,210 --> 00:14:18,179 Sada stvarnost je da pametne prevodiocima kao jeka mogao popraviti ovo za nas 325 00:14:18,179 --> 00:14:19,970 iza kulisa bez našeg ikada znao. 326 00:14:19,970 --> 00:14:24,670 No, razmislimo o ovome osnovi kao problemski dizajn. 327 00:14:24,670 --> 00:14:29,010 >> Ova linija koda je, naravno, govoreći, inicijalizirati varijablu neke sam s 0. 328 00:14:29,010 --> 00:14:30,260 To je prilično jednostavan. 329 00:14:30,260 --> 00:14:34,691 A opet što je to izjava, evo, i ++, radi? 330 00:14:34,691 --> 00:14:37,066 Mi smo to vidjeli, ali smo nije stvarno pričati o tome. 331 00:14:37,066 --> 00:14:37,900 >> PUBLIKA: povećavati ja. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. Malan: povećavati ja. 333 00:14:39,191 --> 00:14:41,890 Pa na svakoj iteraciji kroz Ova petlja, svaki ciklus, 334 00:14:41,890 --> 00:14:43,570 ti si ja povećavati za jedan. 335 00:14:43,570 --> 00:14:45,740 Tako se dobiva veći i veći, a Veći do petlje prestaje. 336 00:14:45,740 --> 00:14:46,810 Kakav je raskinuti? 337 00:14:46,810 --> 00:14:49,430 Pa tu je ovaj srednji stanje koje smo koristili prije. 338 00:14:49,430 --> 00:14:52,500 Vidjeli ste i na korak po korak u P setu. 339 00:14:52,500 --> 00:14:53,880 >> Ali što je to rekao? 340 00:14:53,880 --> 00:14:58,352 Učinite sljedeće petlju tako dok sam je manje od onoga? 341 00:14:58,352 --> 00:14:59,810 PUBLIKA: duljina niza. 342 00:14:59,810 --> 00:15:01,518 DAVID J. Malan: duljina niza. 343 00:15:01,518 --> 00:15:04,300 Dakle, to prevodi prilično čisto na engleskom jeziku u tom smislu. 344 00:15:04,300 --> 00:15:08,810 Sada je problem je u tome što svaki put kada sam ponoviti kroz tu petlju u teoriji, 345 00:15:08,810 --> 00:15:10,000 Ja tražim ovo pitanje. 346 00:15:10,000 --> 00:15:12,250 Je li manje od duljine niza s? 347 00:15:12,250 --> 00:15:14,500 Je li manje od duljine niza s? 348 00:15:14,500 --> 00:15:18,380 >> Sada je i promjenu na svakoj iteraciji? 349 00:15:18,380 --> 00:15:18,880 To je. 350 00:15:18,880 --> 00:15:19,629 Zbog ++. 351 00:15:19,629 --> 00:15:21,700 Dakle, svaka iteracija i sve je veća. 352 00:15:21,700 --> 00:15:25,411 Ali je i sve je veća, ili manja, ili promjena uopće? 353 00:15:25,411 --> 00:15:25,910 Ne 354 00:15:25,910 --> 00:15:30,240 Dakle, u pogledu dizajna, jedne od osi duž koje ćemo pokušati procijeniti kôd 355 00:15:30,240 --> 00:15:32,610 u razredu, to se osjeća glupo. 356 00:15:32,610 --> 00:15:34,690 >> Kao što doslovno, na svakoj iteraciji 357 00:15:34,690 --> 00:15:37,110 ove petlje tražeći Isto prokleto pitanje opet, 358 00:15:37,110 --> 00:15:40,770 i opet, i opet, i doslovno nikada se neće promijeniti. 359 00:15:40,770 --> 00:15:44,220 Barem ako se ne dira s, a pokušava promijeniti sadržaj s. 360 00:15:44,220 --> 00:15:46,610 Dakle, ja mogu napraviti nešto bolje od ovoga. 361 00:15:46,610 --> 00:15:49,530 >> A ono što ću učiniti je ne proglasiti samo jedan varijable i, 362 00:15:49,530 --> 00:15:53,330 ali druga varijabla ću samovoljno, ali konvencionalno, zovu ga n. 363 00:15:53,330 --> 00:15:55,940 Dodjela n jednak Duljina niz s. 364 00:15:55,940 --> 00:15:59,090 I onda ovdje, ja ću napraviti pametan malo optimizacije, tako 365 00:15:59,090 --> 00:16:03,460 reći, da je na kraju dan više nije točna ili ne manje točna 366 00:16:03,460 --> 00:16:04,260 nego prije. 367 00:16:04,260 --> 00:16:05,500 No, to je bolji dizajn. 368 00:16:05,500 --> 00:16:09,480 U činjenici da sam koristeći manje vremena, manje procesora, tako 369 00:16:09,480 --> 00:16:14,040 razgovarati, odgovoriti na isti Pitanje, ali samo jednom. 370 00:16:14,040 --> 00:16:17,870 >> Bilo kakva pitanja o tom generalu načelo usavršavanja, 371 00:16:17,870 --> 00:16:21,294 kažu, program je učinkovitost? 372 00:16:21,294 --> 00:16:21,991 Da? 373 00:16:21,991 --> 00:16:23,699 PUBLIKA: Zašto ti koristiti [nečujan]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. Malan: Dobro pitanje. 376 00:16:27,010 --> 00:16:30,690 Pa zašto mi staviti ++ na kraju I umjesto da se početak I? 377 00:16:30,690 --> 00:16:33,070 U ovom slučaju, to je nema funkcionalni utjecaj. 378 00:16:33,070 --> 00:16:36,670 I općenito, ja imaju tendenciju da upotrijebite operator Postfix 379 00:16:36,670 --> 00:16:41,750 tako da je malo jasnije kako je kada je operacija se događa. 380 00:16:41,750 --> 00:16:46,670 >> Za one koji nisu upoznati, postoji još jedan izjave kojom bi mogli raditi ++ sam se. 381 00:16:46,670 --> 00:16:48,747 To su funkcionalno protuvrijednost u ovom slučaju 382 00:16:48,747 --> 00:16:51,080 jer ne postoji ništa drugo oko tog incrementation. 383 00:16:51,080 --> 00:16:54,435 Ali možete smisliti slučajevi i linija koda 384 00:16:54,435 --> 00:16:55,810 u kojem to čini razliku. 385 00:16:55,810 --> 00:16:57,810 Dakle, generalno, mi ne čak i razgovarati o ovom jednom. 386 00:16:57,810 --> 00:17:00,690 Jer iskreno, to čini vaš Kod seksi, a vrsta kabanicu, 387 00:17:00,690 --> 00:17:01,776 i manje znakova. 388 00:17:01,776 --> 00:17:04,859 No, stvarnost je da je puno teže, Mislim, čak i za mene završiti moj um 389 00:17:04,859 --> 00:17:07,319 oko nje se ponekad, redoslijed operacija. 390 00:17:07,319 --> 00:17:09,750 Dakle, kao što je na stranu, ako stvarno ne sviđa, 391 00:17:09,750 --> 00:17:14,650 iako je to nekako seksi potrazi, također možete napraviti i + = 1, 392 00:17:14,650 --> 00:17:18,880 koji je ružniji verzija Ista ideja za Postfix incrementation. 393 00:17:18,880 --> 00:17:22,250 >> Kažem to i ti treba ismijavati njega, 394 00:17:22,250 --> 00:17:25,140 ali će doći vidjeti kod kao nešto lijepo prije dugo. 395 00:17:25,140 --> 00:17:27,160 >> [Smijeh] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. Malan: Pravo? 397 00:17:28,410 --> 00:17:29,360 Da. 398 00:17:29,360 --> 00:17:30,480 Pitanje je u sredini. 399 00:17:30,480 --> 00:17:32,146 >> PUBLIKA: Da li je potrebno reći int n? 400 00:17:32,146 --> 00:17:34,020 DAVID J. Malan: Radiš Nije potrebno reći int n. 401 00:17:34,020 --> 00:17:37,670 Pa zato što smo već rekli int, ne trebate ga ponovno reći. 402 00:17:37,670 --> 00:17:41,820 Kvaka je u tome što je n mora biti isti tip podataka kao i. 403 00:17:41,820 --> 00:17:43,310 Dakle, to je samo praktičnost ovdje. 404 00:17:43,310 --> 00:17:44,058 Da. 405 00:17:44,058 --> 00:17:47,806 >> PUBLIKA: Možete li ići preko tiskanih Znak s nosača ja opet? 406 00:17:47,806 --> 00:17:48,930 DAVID J. Malan: Apsolutno. 407 00:17:48,930 --> 00:17:52,110 Dakle% c, pozvati iz prošlog Vrijeme je samo rezervirano mjesto. 408 00:17:52,110 --> 00:17:53,930 To znači staviti char ovdje. 409 00:17:53,930 --> 00:17:56,780 backslash n, naravno, jednostavno sredstvo stavi u novi redak ovdje. 410 00:17:56,780 --> 00:17:59,540 Tako da samo ostavlja, sada, Ovaj komad nove sintakse. 411 00:17:59,540 --> 00:18:03,730 A to je doslovno govoreći, zgrabite Niz zove e i ići dobiti svoj 412 00:18:03,730 --> 00:18:06,050 i'th karakter, da se tako izrazim. 413 00:18:06,050 --> 00:18:10,590 >> A ja bi rekao i'th karakter jer na svakoj iteraciji ove petlje 414 00:18:10,590 --> 00:18:14,540 to je kao da smo se ispisuje van, prvi nosač s 0, 415 00:18:14,540 --> 00:18:15,780 kao programer može reći. 416 00:18:15,780 --> 00:18:18,680 Zatim s nosača 1, a zatim s Nosač 2, zatim 3, zatim 4. 417 00:18:18,680 --> 00:18:21,610 Ali, naravno, to je promjenjiva, pa sam samo to izraziti i. 418 00:18:21,610 --> 00:18:23,900 >> Ključ je, međutim, da shvatite, pogotovo ako ste ne 419 00:18:23,900 --> 00:18:26,358 bio acclimating na ovome svijetu programiranja, gdje smo sve 420 00:18:26,358 --> 00:18:28,950 Čini se brojati od nule, moraš početi brojati od nule sada. 421 00:18:28,950 --> 00:18:35,130 Jer žice, prvi znak, Z u Zamyla je za dobru iu zlu 422 00:18:35,130 --> 00:18:40,490 će živjeti na mjesto broj nula. 423 00:18:40,490 --> 00:18:48,210 >> U redu, neka mi dovedu nas ovdje na Zamyla 424 00:18:48,210 --> 00:18:50,746 i vidjeti što se zapravo događa na ispod haube. 425 00:18:50,746 --> 00:18:52,370 Dakle, postoji taj pojam tipa lijevanje. 426 00:18:52,370 --> 00:18:53,800 Možda ste zapravo igrao s tim već, 427 00:18:53,800 --> 00:18:55,970 možda i za hakera izdanje P postaviti jedno. 428 00:18:55,970 --> 00:19:00,320 Ali tip lijevanje samo se odnosi na Sposobnost u C i neki drugi jezici 429 00:19:00,320 --> 00:19:03,170 pretvoriti jednu vrstu podataka u drugu. 430 00:19:03,170 --> 00:19:05,450 >> Sada kako bismo mogli vidjeti prilično otvoreno iznese? 431 00:19:05,450 --> 00:19:08,530 Dakle, to, podsjetimo, je početak od engleske abecede. 432 00:19:08,530 --> 00:19:11,265 A kontekst, podsjetimo, od kao i prije tjedan dana je ASCII. 433 00:19:11,265 --> 00:19:13,790 American Standard Code za Razmjena informacija. 434 00:19:13,790 --> 00:19:17,080 Koji je samo jako dug put govoreći preslikavanje iz pisama 435 00:19:17,080 --> 00:19:19,370 brojevima, a od brojeva do slova. 436 00:19:19,370 --> 00:19:22,940 >> Dakle, kroz sam ovdje, dot dot točaka, linija s, podsjetimo, 437 00:19:22,940 --> 00:19:25,582 decimalni broj 65 na gore. 438 00:19:25,582 --> 00:19:27,290 I nismo razgovarali o tome izrijekom, 439 00:19:27,290 --> 00:19:29,850 ali sigurno postoji slična brojevi za mala slova. 440 00:19:29,850 --> 00:19:30,820 I doista, postoje. 441 00:19:30,820 --> 00:19:33,730 Svijet odlučio nekoliko godina Prije da je mala, mala slova, 442 00:19:33,730 --> 00:19:35,020 će biti 97. 443 00:19:35,020 --> 00:19:38,010 I malo b ide da se 98, i tako dalje. 444 00:19:38,010 --> 00:19:40,200 >> A za bilo koju drugu tipku na vaša tipkovnica, postoji 445 00:19:40,200 --> 00:19:42,190 će biti sličan uzorak bitova. 446 00:19:42,190 --> 00:19:44,540 Ili ekvivalentno, decimalni broj. 447 00:19:44,540 --> 00:19:47,110 Dakle, pitanje pri ruci, dakle, kako možemo 448 00:19:47,110 --> 00:19:49,400 zapravo vidjeti ispod haube? 449 00:19:49,400 --> 00:19:51,539 Tako da ću ići preko gedit opet. 450 00:19:51,539 --> 00:19:53,330 I umjesto da tipu ovo je jedan od nule, 451 00:19:53,330 --> 00:19:55,330 Ja ću ići naprijed i Samo otvori nešto 452 00:19:55,330 --> 00:19:58,350 iz današnje koda zove ASCII nula. 453 00:19:58,350 --> 00:20:01,210 >> I ASCII nula izgleda ovako. 454 00:20:01,210 --> 00:20:02,710 Tako ćemo zamotajte naše umove oko ovoga. 455 00:20:02,710 --> 00:20:04,969 Dakle, prvo, ja sam komentirao kod države, što je lijepo. 456 00:20:04,969 --> 00:20:07,010 Zato što je to doslovno mi reći što da očekujem, 457 00:20:07,010 --> 00:20:08,950 prikazati mapiranje za velikih slova. 458 00:20:08,950 --> 00:20:13,690 Sad ja ne znam točno što sam time reći, pa ćemo zaključiti. 459 00:20:13,690 --> 00:20:16,870 >> U engleskom jeziku, možda Nešto techie engleski, 460 00:20:16,870 --> 00:20:20,660 što se linija 18 pojaviti da se radi za nas? 461 00:20:20,660 --> 00:20:21,500 Samo 18 linija. 462 00:20:21,500 --> 00:20:22,430 Što to izaziva? 463 00:20:22,430 --> 00:20:25,192 Što će to kick off ovdje? 464 00:20:25,192 --> 00:20:26,100 >> PUBLIKA: petlja. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. Malan: petlja. 466 00:20:26,630 --> 00:20:28,463 I koliko puta je Hoće li to ponoviti? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 PUBLIKA: [ubacivanjem Glasovi] šest puta. 469 00:20:33,270 --> 00:20:34,830 DAVID J. Malan: Nisu šest puta. 470 00:20:34,830 --> 00:20:35,840 PUBLIKA: 26 puta. 471 00:20:35,840 --> 00:20:36,560 DAVID J. Malan: 26 puta. 472 00:20:36,560 --> 00:20:37,060 Da, žao mi je. 473 00:20:37,060 --> 00:20:37,960 26 puta. 474 00:20:37,960 --> 00:20:38,460 Zašto? 475 00:20:38,460 --> 00:20:41,590 Pa, to je malo čudno, ali Ja sam počeo brojati od 65 godina. 476 00:20:41,590 --> 00:20:43,300 Što je čudno, ali nije u redu. 477 00:20:43,300 --> 00:20:44,610 Nije loše za reći. 478 00:20:44,610 --> 00:20:46,980 I ja radim to samo jer, za ovaj primjer, 479 00:20:46,980 --> 00:20:50,455 Ja sam vrsta anticipirajući da je kapital bio 65. 480 00:20:50,455 --> 00:20:53,330 Sada to nije najelegantniji način da to učinite, vrsti tvrdi koda 481 00:20:53,330 --> 00:20:56,130 ezoterične vrijednosti koje nitko ne je ikada očekuje da zapamtite. 482 00:20:56,130 --> 00:21:00,155 >> Ali za sada, primijetiti da sam Time se kroz 65 plus 26. 483 00:21:00,155 --> 00:21:03,030 Jer očito sam i ja uopće ne želim učiniti aritmetičke u mojoj glavi. 484 00:21:03,030 --> 00:21:04,440 Dakle, ja ću pustiti prevodilac to učiniti. 485 00:21:04,440 --> 00:21:08,600 No, tada na svakoj petlji, svaka iteracija petlje, ja sam povećavati ja. 486 00:21:08,600 --> 00:21:10,196 >> Dakle, sada to izgleda malo zagonetan. 487 00:21:10,196 --> 00:21:13,320 Ali mi bi trebali imati osnovnu zgradu blokovi s kojima se razumije. 488 00:21:13,320 --> 00:21:15,510 % C je samo rezervirano za char. 489 00:21:15,510 --> 00:21:19,010 % I je rezervirano za int. 490 00:21:19,010 --> 00:21:23,310 I ispada da pomoću toga Novi sintakse, ovo usputna, tako 491 00:21:23,310 --> 00:21:26,100 govoriti, pa je tip podataka unutar zagrada, 492 00:21:26,100 --> 00:21:32,270 Ja mogu prisiliti prevodilac za liječenje Nisam je cijeli broj, ali kao char. 493 00:21:32,270 --> 00:21:35,520 >> Time mi pokazuje karakter protuvrijednost tog broja. 494 00:21:35,520 --> 00:21:37,986 Sada ovdje dolje, ovaj kod je skoro identično. 495 00:21:37,986 --> 00:21:39,860 Samo sam htjela napraviti Super eksplicitan činjenica 496 00:21:39,860 --> 00:21:42,095 da sam s početkom u 97, koja je mala slova. 497 00:21:42,095 --> 00:21:44,080 Na gore kroz više od 26 slova. 498 00:21:44,080 --> 00:21:46,970 A ja sam opet doing--, lijevanja i, da se tako izrazim. 499 00:21:46,970 --> 00:21:49,160 Ili tipa lijevanje ja, da se tako izrazim. 500 00:21:49,160 --> 00:21:51,420 >> Od int na char. 501 00:21:51,420 --> 00:21:55,760 Dakle, krajnji rezultat će biti, iskreno, informacije već znamo. 502 00:21:55,760 --> 00:21:59,411 Ja ću napraviti ascii-0 ne dot-- točke c. 503 00:21:59,411 --> 00:22:02,160 Obavijest, vjerojatno je da pogreška što sam upravo učinio slučajno. 504 00:22:02,160 --> 00:22:03,820 Napraviti ASCII-0. 505 00:22:03,820 --> 00:22:06,090 Sada ću učiniti ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Ja ću zumirati, a na žalost to će za pomicanje off zaslonu. 507 00:22:09,050 --> 00:22:15,060 Ali vidimo cijelu tablicu gdje Karte za 97, b karata do 98, 508 00:22:15,060 --> 00:22:18,931 a ako smo dođite do daljnjeg Naravno, mape 65. 509 00:22:18,931 --> 00:22:21,180 Dakle, ovo je samo reći da je Što smo propovijedanje, 510 00:22:21,180 --> 00:22:25,310 Tu je ovo ekvivalenciju, u stvari slučaj u stvarnosti. 511 00:22:25,310 --> 00:22:28,000 Tako brzo modifikacija to. 512 00:22:28,000 --> 00:22:31,220 Dopustite mi da se otvori ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 I primijetiti pametan, neka vrsta od, pojašnjenje toga. 514 00:22:38,070 --> 00:22:41,770 To je ascii-1.c, i primijetiti ovu ludu stvar. 515 00:22:41,770 --> 00:22:45,120 >> I to stvarno dobiva na srcu što računala rade. 516 00:22:45,120 --> 00:22:48,150 Iako mi ljudi bi ne računaju se u smislu letters-- 517 00:22:48,150 --> 00:22:50,380 Ne počnu razmišljati, sve u redu onda b, 518 00:22:50,380 --> 00:22:52,590 i koristiti one brojati fizičke predmete. 519 00:22:52,590 --> 00:22:58,680 Vi naravno možete reći da želim inicijalizirati neki varijablu nazvanu c-- 520 00:22:58,680 --> 00:23:03,220 ali mogao sam to nazvao anything-- tako da c je inicijalno kapitala A. 521 00:23:03,220 --> 00:23:07,560 >> Jer na kraju dana, na računalu ne zanima me što ste skladištenje, 522 00:23:07,560 --> 00:23:10,170 to je samo stalo kako želite iznijeti tu informaciju. 523 00:23:10,170 --> 00:23:13,560 Kako želite da računalo na tumače da je uzorak bitova? 524 00:23:13,560 --> 00:23:16,320 Dakle, to nije nešto što sam bi općenito preporučiti radi. 525 00:23:16,320 --> 00:23:19,500 To je zapravo samo primjer prenijeti da možete apsolutno 526 00:23:19,500 --> 00:23:22,049 formatirati cijeli broj na char. 527 00:23:22,049 --> 00:23:24,090 Jer ispod poklopac od char naravno 528 00:23:24,090 --> 00:23:26,170 je samo broj 0-255. 529 00:23:26,170 --> 00:23:28,540 >> Dakle, možete sigurno staviti ga unutar int. 530 00:23:28,540 --> 00:23:30,890 A što je ovo također pokazuje je da smo 531 00:23:30,890 --> 00:23:34,040 može pretvoriti iz jednog upisati u drugu, ovdje, 532 00:23:34,040 --> 00:23:36,780 konačnici ispisuje istu stvar. 533 00:23:36,780 --> 00:23:44,760 A u stvari, to ću popraviti online-- je trebao reći, opet, ovdje. 534 00:23:44,760 --> 00:23:48,610 Dopustite mi da ovo počistiti on-line, a mi ćemo vidi u online prohod po potrebi, 535 00:23:48,610 --> 00:23:50,280 ono što je bilo namijenjeno. 536 00:23:50,280 --> 00:23:50,960 >> U redu. 537 00:23:50,960 --> 00:23:53,892 Tako posljednji primjer sada uključuje A-ih i B i onda ćemo 538 00:23:53,892 --> 00:23:54,850 uzeti stvari na višu razinu. 539 00:23:54,850 --> 00:23:58,330 Dakle, s tih i b-ih i c-a u kapitalizaciji 540 00:23:58,330 --> 00:24:01,560 i ekvivalencije istih, ajmo pogledajte na ovom primjeru, ovdje. 541 00:24:01,560 --> 00:24:02,752 Još jedan primjer koda. 542 00:24:02,752 --> 00:24:04,460 Otvorit ćemo jedan koji je Već je napravio, pa smo 543 00:24:04,460 --> 00:24:06,440 ne morate ga upisati sve iz nule. 544 00:24:06,440 --> 00:24:09,420 >> I primijetiti u očekivanju koristimo više zaglavlje 545 00:24:09,420 --> 00:24:13,240 slika, među kojima je naš novi prijatelj, string.h. 546 00:24:13,240 --> 00:24:15,597 Sada to izgleda, na prvi pogled pogled, pomalo zagonetan. 547 00:24:15,597 --> 00:24:18,180 No, da vidimo, ako ne možemo razmišljati kroz ono što se ovdje događa. 548 00:24:18,180 --> 00:24:21,150 Prvo sam se niz od korisnika, i ja staviti taj niz u varijablu 549 00:24:21,150 --> 00:24:22,286 pod nazivom e. 550 00:24:22,286 --> 00:24:24,090 Copy paste od prije. 551 00:24:24,090 --> 00:24:27,250 U liniji 22, ja sam očito radi upravo ono što 552 00:24:27,250 --> 00:24:30,760 Ja sam maloprije, ja iterating više likova u sekundi. 553 00:24:30,760 --> 00:24:34,780 >> A nove trikove ovdje koriste Duljina niza, maloljetnik optimizacija 554 00:24:34,780 --> 00:24:37,930 pohranjivanja duljinu niza u N, umjesto da zovete opet strlen, 555 00:24:37,930 --> 00:24:38,850 i opet, i opet. 556 00:24:38,850 --> 00:24:41,120 I samo provjerite da li je manji od n. 557 00:24:41,120 --> 00:24:43,330 Sada ovdje, stvari se Malo zanimljiva. 558 00:24:43,330 --> 00:24:45,980 Ali to je samo prijava tog istog novu ideju. 559 00:24:45,980 --> 00:24:48,470 Ono što na engleskom ne a nosač i predstavlja? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> PUBLIKA: Brojanje svaka znakova [nečujan]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. Malan: Brojanje svaki lik. 563 00:24:55,926 --> 00:24:58,680 I još više jezgrovito, a nosač i predstavljaju ono? 564 00:24:58,680 --> 00:25:00,950 Biste li rekli. 565 00:25:00,950 --> 00:25:04,084 Ne bi vas na licu mjesta ovdje. 566 00:25:04,084 --> 00:25:06,375 >> PUBLIKA: Well-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. Malan: Dakle, ako je riječ je-- ako Niz je Zamyla, koji starts-- 568 00:25:09,500 --> 00:25:12,380 PUBLIKA: --Morate bave likovi separately-- 569 00:25:12,380 --> 00:25:13,690 DAVID J. Malan: Dobro. 570 00:25:13,690 --> 00:25:14,190 Točno. 571 00:25:14,190 --> 00:25:17,940 Uglata zagrada zapis vam omogućuje pristupiti svaki lik pojedinačno, 572 00:25:17,940 --> 00:25:21,120 pa e nosač 0 će biti Prvi znak u nizu. 573 00:25:21,120 --> 00:25:24,110 a nosač 1 će biti drugi, i tako dalje. 574 00:25:24,110 --> 00:25:28,050 Dakle, postavlja se pitanje što tražim, Ovdje, u ovom stanju je što? 575 00:25:28,050 --> 00:25:33,984 Je i'th karakter s Greater od ili jednak mala slova? 576 00:25:33,984 --> 00:25:36,400 A što to znači, ovdje, s dvostrukim znakove za? 577 00:25:36,400 --> 00:25:36,800 PUBLIKA (ZAJEDNO): I. 578 00:25:36,800 --> 00:25:37,210 DAVID J. Malan: I. 579 00:25:37,210 --> 00:25:38,418 To je samo ekvivalent za to. 580 00:25:38,418 --> 00:25:42,310 I nije ključna u C, morate Korištenje, dosadno, znak za struju znak za struju. 581 00:25:42,310 --> 00:25:47,520 A to, s druge strane, traži se s je i'th karaktera manji ili jednak 582 00:25:47,520 --> 00:25:49,030 u mala slova Z? 583 00:25:49,030 --> 00:25:52,440 A opet, ovdje gdje razumijevanje temeljni 584 00:25:52,440 --> 00:25:54,550 Provedba Računalo ima smisla. 585 00:25:54,550 --> 00:25:57,330 Uočite da, iako imam dot dot dot tamo, 586 00:25:57,330 --> 00:26:04,410 Izgleda kroz z malim slovima su Sve susjedne vrijednosti iz 97 gore. 587 00:26:04,410 --> 00:26:07,820 >> I isto za velika slova s ​​početkom u 65. 588 00:26:07,820 --> 00:26:10,410 Dakle takeaway, a zatim, je da je na engleskom jeziku, 589 00:26:10,410 --> 00:26:12,760 Kako biste opisali što linija 24 radi? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Da? 592 00:26:16,728 --> 00:26:21,575 >> PUBLIKA: Dana 24. to je ček vidjeti da li je svaki lik je malo slovo. 593 00:26:21,575 --> 00:26:24,700 DAVID J. Malan: To je provjeriti jesu li Svaki lik je malo slovo. 594 00:26:24,700 --> 00:26:28,590 Dakle, čak i više jezgrovito, je i'th karakter s malim slovima? 595 00:26:28,590 --> 00:26:30,690 To je sve što smo izražavajući ovdje logično, 596 00:26:30,690 --> 00:26:33,750 malo zagonetno, ali konačnici prilično otvoreno iznese. 597 00:26:33,750 --> 00:26:36,480 Je S-a i'th znakova malim slovima? 598 00:26:36,480 --> 00:26:40,130 >> Ako je tako, a evo gdje stvari dobili mali um savijanje 599 00:26:40,130 --> 00:26:44,760 samo na trenutak, ako je tako, idite naprijed i ispisati karakter. 600 00:26:44,760 --> 00:26:47,360 Dakle, to je samo rezervirano mjesto, ali ono lik? 601 00:26:47,360 --> 00:26:53,710 Zašto ja to radim a ja nosač umanjen za taj izraz ovdje? 602 00:26:53,710 --> 00:26:55,110 >> Pa primijetiti uzorak ovdje. 603 00:26:55,110 --> 00:26:57,380 Stvarne brojke ne smeta toliko. 604 00:26:57,380 --> 00:27:02,700 Ali primijetite da je 97 koliko smo daleko od 65 godina? 605 00:27:02,700 --> 00:27:03,560 >> PUBLIKA: 32. 606 00:27:03,560 --> 00:27:04,480 >> DAVID J. Malan: 32. 607 00:27:04,480 --> 00:27:06,890 Koliko daleko je 98 od 66? 608 00:27:06,890 --> 00:27:07,740 >> PUBLIKA: 32. 609 00:27:07,740 --> 00:27:09,890 >> DAVID J. Malan: Malo c iz Big C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Dakle, tu je 32 hmelja iz jedno slovo u drugu. 612 00:27:14,550 --> 00:27:17,790 Pa iskreno, mogao pojednostaviti ovaj na to. 613 00:27:17,790 --> 00:27:20,400 Ali onda sam vrsta teško kodiranja Ova niska razina razumijevanja 614 00:27:20,400 --> 00:27:21,740 da nijedan čitatelj je ikada će razumjeti. 615 00:27:21,740 --> 00:27:25,080 Tako ću ga generalizirati kako sam Znam da mala slova su veći. 616 00:27:25,080 --> 00:27:28,400 Znam da su velika slova su manjih vrijednosti, ironično. 617 00:27:28,400 --> 00:27:33,216 >> No, to je učinkovito ekvivalent rekavši oduzmite 32 iz S nosača i. 618 00:27:33,216 --> 00:27:35,430 Tako je u okviru tih slova, ako je riječ 619 00:27:35,430 --> 00:27:38,950 se događa da se, mala slova , a ja oduzeti 32, 620 00:27:38,950 --> 00:27:43,442 kakav učinak to ima, matematički, na mala slova? 621 00:27:43,442 --> 00:27:44,400 PUBLIKA: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 DAVID J. Malan: to kapitalizira. 623 00:27:45,691 --> 00:27:48,440 I doista, to je razlog zašto naš Program se zove kapitalizirati nuli. 624 00:27:48,440 --> 00:27:51,590 Ovaj program ili kapitalizira pismo, 625 00:27:51,590 --> 00:27:54,580 nakon provjere, ako je to Doista malo slovo. 626 00:27:54,580 --> 00:27:59,810 Inače, u liniji 30, što trebam učiniti ako to nije malo slovo da sam 627 00:27:59,810 --> 00:28:02,852 gledajući na određeni iteracija u petlji. 628 00:28:02,852 --> 00:28:03,890 Samo ga isprintati. 629 00:28:03,890 --> 00:28:07,010 >> Dakle, ne mijenjaju stvari to nije ni malo slovo. 630 00:28:07,010 --> 00:28:10,790 Se ograničiti na Malo po malo z. 631 00:28:10,790 --> 00:28:12,730 Sada je to prilično kompliciranih. 632 00:28:12,730 --> 00:28:15,230 Ali na kraju dana, to Tako smo, jednom davno, 633 00:28:15,230 --> 00:28:16,460 morao provesti stvari. 634 00:28:16,460 --> 00:28:19,780 Ako sam umjesto toga otvoriti kapitalizirati jedan, Oh, hvala Bogu. 635 00:28:19,780 --> 00:28:22,320 Tu je funkcija zove se gornja koji može 636 00:28:22,320 --> 00:28:25,410 učiniti sve što smo upravo učinili na prilično niskoj razini. 637 00:28:25,410 --> 00:28:28,752 >> Sada se gornja Interesantno jer je proglašena u datoteci, 638 00:28:28,752 --> 00:28:31,210 i ti bi samo znali ovo provjerom dokumentacije, 639 00:28:31,210 --> 00:28:35,730 ili se javi, recimo, u razredu, gdje ona postoji, u datoteci naziva ctype.h. 640 00:28:35,730 --> 00:28:37,630 Dakle, ovo je još jedna nova prijateljica. 641 00:28:37,630 --> 00:28:40,750 I gornja radi upravo ono što mu ime sugerira. 642 00:28:40,750 --> 00:28:44,860 >> Možete proći u, kao argument, između ove zagrade, neki lik. 643 00:28:44,860 --> 00:28:48,390 Ja ću proći u i'th karaktera od S pomoću naše zavoljeti novi zapis 644 00:28:48,390 --> 00:28:49,870 uključuje uglate zagrade. 645 00:28:49,870 --> 00:28:53,391 I pokušajte pogoditi, što je povratak Vrijednost na gornji očito ide 646 00:28:53,391 --> 00:28:53,890 biti? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Slovom. 649 00:28:57,770 --> 00:28:58,620 Slovom. 650 00:28:58,620 --> 00:29:02,330 >> Dakle, ako sam proći malim slovima A, nadamo se, po definiciji se gornja, 651 00:29:02,330 --> 00:29:05,600 to će se vratiti veliko A. Inače, 652 00:29:05,600 --> 00:29:08,590 ako to nije malo slovo u Prvo mjesto, samo sam ga isprintati. 653 00:29:08,590 --> 00:29:10,800 I doista, primijetiti Drugi prijatelj ovdje. 654 00:29:10,800 --> 00:29:13,840 Ne samo da postoji gornja, ali je niža, što 655 00:29:13,840 --> 00:29:16,200 zapravo odgovara na to pitanje za mene. 656 00:29:16,200 --> 00:29:19,730 >> Sada tko je pisao ove stvari, 10s prije više godina, znate što? 657 00:29:19,730 --> 00:29:23,840 Provodi se gornja i smanjiti pomoću koda kao što je ovaj. 658 00:29:23,840 --> 00:29:27,270 Ali opet, u skladu s ova ideja o odvajanju daleko, 659 00:29:27,270 --> 00:29:29,190 vrsta, niža razina Provedbeni detalji. 660 00:29:29,190 --> 00:29:32,600 I stoji na ramenima ljudi koji su došli prije nas, pomoću funkcije 661 00:29:32,600 --> 00:29:36,300 kao i na gornji i niži, što predivno dovoljno su lijepo 662 00:29:36,300 --> 00:29:40,190 imenovan je reći ono što im je činiti, je divno paradigma usvojiti. 663 00:29:40,190 --> 00:29:44,040 >> Sada ispada da ako sam pročitao Stranica čovjek za, recimo, da se gornja, 664 00:29:44,040 --> 00:29:45,010 Učim nešto drugo. 665 00:29:45,010 --> 00:29:46,890 Dakle, čovjek toUpper. 666 00:29:46,890 --> 00:29:48,050 To je malo neodoljiv. 667 00:29:48,050 --> 00:29:51,110 No, obavijest, ovdje je to spominjanje zaglavlje datoteke koje trebam koristiti. 668 00:29:51,110 --> 00:29:54,460 Kao na stranu, jer je to je zabludu, funkcija 669 00:29:54,460 --> 00:29:59,070 koristi ints umjesto znakova iz razloga provjere pogreške. 670 00:29:59,070 --> 00:30:01,260 Ali mi možda ćemo doći natrag na koje u budućnosti. 671 00:30:01,260 --> 00:30:05,910 >> Ali primijetiti, ovdje, na gornjim obraćenika Pismo C u velika slova, ako je to moguće. 672 00:30:05,910 --> 00:30:07,674 Dakle, to je prilično jednostavan. 673 00:30:07,674 --> 00:30:09,340 A sad budimo malo precizniji. 674 00:30:09,340 --> 00:30:12,750 Pogledajmo dio Čovjek stranica pod povratnu vrijednost. 675 00:30:12,750 --> 00:30:15,420 Vrijednost vratio je da u adaptiranom pismu. 676 00:30:15,420 --> 00:30:18,690 Ili C, ako je konverzija Nije bilo moguće 677 00:30:18,690 --> 00:30:20,250 gdje je c izvorni ulaz. 678 00:30:20,250 --> 00:30:24,140 Koji znam odavde, iz Argument da se gornja. 679 00:30:24,140 --> 00:30:25,780 >> Dakle, ono što je takeaway toga? 680 00:30:25,780 --> 00:30:28,060 Vrijednost vratio je da od adaptiranom pismu, 681 00:30:28,060 --> 00:30:32,110 ili c, izvorno pismo, ako pretvorbe nije bilo moguće. 682 00:30:32,110 --> 00:30:36,460 Što poboljšanja mogu sam, dakle da se moj broj je dizajn? 683 00:30:36,460 --> 00:30:37,146 Da? 684 00:30:37,146 --> 00:30:38,810 >> PUBLIKA: možete ukloniti drugdje. 685 00:30:38,810 --> 00:30:40,810 DAVID J. Malan: Mogu uklonite izjavu drugo, 686 00:30:40,810 --> 00:30:42,510 a ne samo izjava drugo. 687 00:30:42,510 --> 00:30:44,150 >> PUBLIKA: možete ukloniti [nečujan]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. Malan: Mogu izvadite cijelu vilicu 689 00:30:46,310 --> 00:30:48,209 na cesti, ako je drugo uopce. 690 00:30:48,209 --> 00:30:50,250 Dakle, doista, neka mi se otvoriti Konačna verzija toga, 691 00:30:50,250 --> 00:30:55,540 kapitalizirati-2 i primijetiti koliko je, ako ćete, seksi, kod je sada sve, 692 00:30:55,540 --> 00:31:00,040 U to sam smanjio od nekih sedam ili tako linije na samo četiri, 693 00:31:00,040 --> 00:31:03,850 funkcionalnosti koje sam namjeravao jednostavnim pozivom na gornji, 694 00:31:03,850 --> 00:31:09,410 prolaze u S zagrada I, i ispis igrače, a rezervirano% C, 695 00:31:09,410 --> 00:31:11,090 slovo. 696 00:31:11,090 --> 00:31:14,560 >> Sada vjerojatno postoji bug, ili barem rizik od buga, 697 00:31:14,560 --> 00:31:15,350 u ovom programu. 698 00:31:15,350 --> 00:31:18,200 Dakle, samo da se vrati na raniju takeaway, 699 00:31:18,200 --> 00:31:21,820 Što bih trebao vjerojatno učiniti u ovaj program da bi ga više robustan, 700 00:31:21,820 --> 00:31:24,974 , tako da nema šanse da to može pad, čak iu rijetkim slučajevima? 701 00:31:24,974 --> 00:31:26,390 PUBLIKA: Uvjerite se da nije NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. Malan: Uvjerite se da nije NULL. 703 00:31:28,056 --> 00:31:31,030 Pa stvarno, kako bi ovaj super pravilno, trebam napraviti nešto slično, 704 00:31:31,030 --> 00:31:35,300 ukoliko nije NULL, a zatim ići naprijed i izvršiti 705 00:31:35,300 --> 00:31:38,470 ta linija koda, što I onda mogu alineja tako, 706 00:31:38,470 --> 00:31:39,870 a zatim staviti u mojoj neposrednoj braće. 707 00:31:39,870 --> 00:31:41,550 Pa dobro vezanje zajedno od dvije ideje. 708 00:31:41,550 --> 00:31:42,429 Da? 709 00:31:42,429 --> 00:31:44,470 PUBLIKA: Možete li koristiti učiniti dok petlje, umjesto toga? 710 00:31:44,470 --> 00:31:47,270 DAVID J. Malan: Može Ja to učiniti dok petlje? 711 00:31:47,270 --> 00:31:50,020 PUBLIKA: --Morate želite biti sigurni da ste zapravo [nečujan]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. Malan: Može Koristite li učiniti dok? 713 00:31:51,728 --> 00:31:52,450 Kratak odgovor, nema. 714 00:31:52,450 --> 00:31:54,700 Zato što ste o uvesti još jedan kutak slučaj. 715 00:31:54,700 --> 00:31:56,660 Ako je niz nulte duljine. 716 00:31:56,660 --> 00:31:59,600 Ako, na primjer, samo sam pogodio Ulaz, bez tipkanja Zamyla. 717 00:31:59,600 --> 00:32:02,490 Ja ću vam predati natrag stvarna niz, kao što smo na kraju ćemo vidjeti, 718 00:32:02,490 --> 00:32:03,780 da ima nula znakova. 719 00:32:03,780 --> 00:32:05,630 To je još uvijek niz, to je samo iznimno kratko. 720 00:32:05,630 --> 00:32:07,960 Ali ako koristite učiniti dok, idete na slijepo 721 00:32:07,960 --> 00:32:10,050 pokušati učiniti nešto s odnosu na tu žicu, 722 00:32:10,050 --> 00:32:12,537 i ništa ne će biti tamo. 723 00:32:12,537 --> 00:32:18,607 >> PUBLIKA: Pa, ako je učiniti [nečujan] dok S- 724 00:32:18,607 --> 00:32:21,190 DAVID J. Malan: Ma vidim, zadržati uzimajući niz od korisnika. 725 00:32:21,190 --> 00:32:23,525 Dakle, kratki odgovor, što mogao, i držati maltretirati 726 00:32:23,525 --> 00:32:26,150 im da vam dati niz koji je dovoljno kratko da stane u memoriju. 727 00:32:26,150 --> 00:32:26,700 Apsolutno. 728 00:32:26,700 --> 00:32:27,630 Upravo sam odlučio da ne. 729 00:32:27,630 --> 00:32:30,505 Ako oni ne daju mi ​​string I želim, dajem otkaz, ja odustajem. 730 00:32:30,505 --> 00:32:33,260 No, apsolutno, u tu svrhu, vi apsolutno može učiniti. 731 00:32:33,260 --> 00:32:37,500 >> Dakle knjižnice zaglavlje datoteke koje sad smo upoznati sa su to, ovdje. 732 00:32:37,500 --> 00:32:41,550 Standardna I / O, CS50.h, string.h, ctype.h, a tu su, zapravo, drugi. 733 00:32:41,550 --> 00:32:44,460 Neki od vas su otkrili matematike knjižnica u math.h. 734 00:32:44,460 --> 00:32:48,200 No, dopustite mi da vas upoznam, sada, da se ovaj resurs koji CS50 osoblje, Davin, 735 00:32:48,200 --> 00:32:50,630 i Rob, a Gabe posebice su sastavili. 736 00:32:50,630 --> 00:32:52,630 To će uskoro povezati na Web stranica Tečaj je. 737 00:32:52,630 --> 00:32:54,870 To se zove CS50 referenca. 738 00:32:54,870 --> 00:32:58,230 >> Koji samo da vam dati brzi Okus joj, radi na sljedeći način. 739 00:32:58,230 --> 00:33:00,740 Pusti me da reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Vidjet ćete na lijevoj ruci stranu neodoljiv popis 741 00:33:02,990 --> 00:33:04,595 funkcija koje dolaze s c. 742 00:33:04,595 --> 00:33:07,790 Ali, ako mi je stalo, za sada, o nečemu poput strlen, 743 00:33:07,790 --> 00:33:08,746 Mogu ga upisati tamo. 744 00:33:08,746 --> 00:33:10,870 On filtrira po spisku samo ono što mi je stalo. 745 00:33:10,870 --> 00:33:11,940 Ja ću ga kliknite. 746 00:33:11,940 --> 00:33:14,740 A sada na lijevo, vidjet ćete što se nadamo 747 00:33:14,740 --> 00:33:18,290 je izravnija, ljudski prijateljski objašnjenje kako 748 00:33:18,290 --> 00:33:19,170 Ova funkcija radi. 749 00:33:19,170 --> 00:33:20,600 >> Vraća duljinu niza. 750 00:33:20,600 --> 00:33:24,060 Evo sinopsis, evo kako koristite ga u smislu zaglavlja datoteke, 751 00:33:24,060 --> 00:33:27,430 iu smislu onoga što funkciji Izgleda da je u pogledu svojih argumenata. 752 00:33:27,430 --> 00:33:30,250 I onda ovdje, vraća duljina niza. 753 00:33:30,250 --> 00:33:34,280 No, za one od vas više udoban, zapravo možete kliknuti udobniji, 754 00:33:34,280 --> 00:33:37,070 a sadržaj toga stranica, sada, neće mijenjati 755 00:33:37,070 --> 00:33:41,660 da su zadane vrijednosti onoga što dobivate pomoću man stranicu. 756 00:33:41,660 --> 00:33:44,100 >> Drugim riječima, CS50 Referentna je pojednostavljenje 757 00:33:44,100 --> 00:33:46,220 umjetnih stranicama od strane osoblja, za studente. 758 00:33:46,220 --> 00:33:49,320 Osobito, oni manje udobno i između, tako da 759 00:33:49,320 --> 00:33:51,660 ne moraju pokušati wrap vaš um okolo, iskreno, 760 00:33:51,660 --> 00:33:55,030 Neki prilično zagonetan sintakse i dokumentacija negdje. 761 00:33:55,030 --> 00:33:57,650 >> Dakle, imajte to na umu u danima koji dolaze. 762 00:33:57,650 --> 00:33:59,560 Pa evo, opet, je Zamyla. 763 00:33:59,560 --> 00:34:03,255 Idemo sada postaviti pitanje koje je malo humaniji dostupni. 764 00:34:03,255 --> 00:34:05,380 Zahvaljujući Chang, koji je bio ispis više slonova 765 00:34:05,380 --> 00:34:07,090 nonstop u posljednjih nekoliko dana. 766 00:34:07,090 --> 00:34:09,730 Imamo priliku dati najmanje jedan ih. 767 00:34:09,730 --> 00:34:13,239 Ako smo mogli dobiti samo jedan volonter doći na do crtanje po zaslonu. 768 00:34:13,239 --> 00:34:14,530 Kako je ovdje? 769 00:34:14,530 --> 00:34:15,340 >> Dođi gore. 770 00:34:15,340 --> 00:34:16,720 Koje je tvoje ime? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 DAVID J. Malan: Alex. 773 00:34:17,760 --> 00:34:18,259 U redu. 774 00:34:18,259 --> 00:34:19,388 Alex, dođi gore. 775 00:34:19,388 --> 00:34:21,679 Mi smo o tome kako bi vidjeli svoje rukopisa na zaslonu ovdje. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 U redu, lijepo da zadovolji vas. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Lijepo ste se upoznali. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. Malan: U redu. 780 00:34:27,512 --> 00:34:28,969 Dakle, super jednostavna vježba. 781 00:34:28,969 --> 00:34:31,440 Bar nije visoka da dobili slona i danas. 782 00:34:31,440 --> 00:34:33,439 Vi ste u ulozi getstring. 783 00:34:33,439 --> 00:34:35,980 A ja ću samo reći niz koji ste stečen. 784 00:34:35,980 --> 00:34:38,080 I pretpostavljam da je vama, getstring, su pozvani. 785 00:34:38,080 --> 00:34:42,480 A čovjek, poput mene, ima upisali u Zamyla, Z-A-M-Y-L-a. 786 00:34:42,480 --> 00:34:45,650 Samo ići naprijed i pisati Zamyla na Zaslon se kao da ste ga stečen 787 00:34:45,650 --> 00:34:47,250 i spremio negdje u sjećanju. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Ostavljanje prostora za ono što će biti nekoliko drugi words-- to je u redu, zadržati ide. 790 00:34:55,570 --> 00:34:59,620 >> [Smijeh] 791 00:34:59,620 --> 00:35:00,800 >> Dakle Zamyla, Izvrsno. 792 00:35:00,800 --> 00:35:04,880 Pa sad pretpostavljam da je vama, getstring, nazivaju se opet. 793 00:35:04,880 --> 00:35:09,350 I zato, ja Vam, na tipkovnica, s drugim imenom, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 U redu. 796 00:35:18,060 --> 00:35:22,380 A sad sljedeći put getstring je nazvao sam upisati nešto poput Gabea, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Vi stvarno uzimanje do srčanog radnu memoriju. 798 00:35:27,560 --> 00:35:29,631 Koji je crtež sve posve slučajno. 799 00:35:29,631 --> 00:35:30,130 U redu. 800 00:35:30,130 --> 00:35:31,104 >> [Smijeh] 801 00:35:31,104 --> 00:35:32,520 ALEX: Žao mi je moj rukopis je loše. 802 00:35:32,520 --> 00:35:33,770 DAVID J. Malan: Ne, to je u redu. 803 00:35:33,770 --> 00:35:40,480 A što je s Robom, R-O-B. U redu. 804 00:35:40,480 --> 00:35:41,020 Dobro. 805 00:35:41,020 --> 00:35:43,853 Pa nisam vam predviđaju bi vrsta stavi stvari na taj način. 806 00:35:43,853 --> 00:35:45,020 Ali možemo napraviti ovaj posao. 807 00:35:45,020 --> 00:35:48,810 Pa kako ste to polaganje iz tih kao broj znakova u sjećanju? 808 00:35:48,810 --> 00:35:51,310 Drugim riječima, ako mislimo to pravokutna crni ekran 809 00:35:51,310 --> 00:35:53,550 što predstavlja računala RAM-a ili memorije. 810 00:35:53,550 --> 00:35:55,850 >> I podsjetiti da je RAM-a je samo cijela hrpa bitova, 811 00:35:55,850 --> 00:35:57,480 i bajtova su cijela hrpa bitova. 812 00:35:57,480 --> 00:35:59,350 I bitovi su nekako provodi, u pravilu 813 00:35:59,350 --> 00:36:01,119 s nekim oblikom električne energije u hardver. 814 00:36:01,119 --> 00:36:03,160 Dakle, to je neka vrsta raslojavanje smo razgovarali o 815 00:36:03,160 --> 00:36:04,510 a sada se može uzeti zdravo za gotovo. 816 00:36:04,510 --> 00:36:07,020 Kako ste to odlučivanja gdje pisati 817 00:36:07,020 --> 00:36:11,634 Rob odnosu Gabe odnosu Belinda odnosu Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Upravo sam to učinio u narediti da ste mi rekli. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. Malan: I to je istina. 820 00:36:15,650 --> 00:36:20,100 No, ono što upravlja gdje ste stavili Belinda je ime i Gabe ime? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Ništa? 822 00:36:20,764 --> 00:36:22,930 DAVID J. Malan: [smijeh] Tako to radi, to je u redu. 823 00:36:22,930 --> 00:36:25,290 Dakle, računala su malo sređenije od toga. 824 00:36:25,290 --> 00:36:29,000 I tako kad smo implement-- ostati tamo za samo moment-- kada smo zapravo 825 00:36:29,000 --> 00:36:31,470 provesti nešto takvo getstring u računalu, 826 00:36:31,470 --> 00:36:34,480 Zamyla mogla biti izložena prilično kao što ste učinili na zaslonu, tamo. 827 00:36:34,480 --> 00:36:36,660 >> A ono što je ključ za primijetiti ovdje, ono što je Alex učinio, 828 00:36:36,660 --> 00:36:40,260 je tu je vrsta razgraničenja među svaka od ovih riječi, zar ne? 829 00:36:40,260 --> 00:36:46,580 Nisi pisati Z-A-M-Y-L-A-B-E-l-l-N-D-A-G-A-B- 830 00:36:46,580 --> 00:36:49,740 Drugim riječima, postoji neka vrsta razgraničenja koji je čini se, 831 00:36:49,740 --> 00:36:52,370 vrsta, slučajni razmak između tih različitih riječi. 832 00:36:52,370 --> 00:36:54,120 No, to je dobro, jer mi ljudi sada mogu 833 00:36:54,120 --> 00:36:56,470 zamišljati da su to četiri različite žice. 834 00:36:56,470 --> 00:36:59,540 To je ne samo jedan slijed od puno znakova. 835 00:36:59,540 --> 00:37:04,190 Dakle, računalo, a zatim je, u međuvremenu, možda se niz kao Zamyla, 836 00:37:04,190 --> 00:37:07,220 staviti svaki od tih pisama unutar jednog bajta memorije. 837 00:37:07,220 --> 00:37:10,400 No, taj broj je znatno veći, Naravno, od šest znakova. 838 00:37:10,400 --> 00:37:11,690 >> Postoji cijela hrpa RAM-a. 839 00:37:11,690 --> 00:37:15,330 I tako od sada, to Rešetka kutija ide 840 00:37:15,330 --> 00:37:17,560 da predstavljaju ono što je Alex samo napravio ovdje na zaslonu. 841 00:37:17,560 --> 00:37:20,937 A sada, Alex, možemo vam ponuditi plave ili narančaste slona od Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Ja ću uzeti plavu slona. 843 00:37:22,270 --> 00:37:23,120 DAVID J. Malan: plavi slon. 844 00:37:23,120 --> 00:37:25,580 Dakle, veliki pljesak, ako smo mogli, za Alex ovdje. 845 00:37:25,580 --> 00:37:26,100 >> [Pljesak] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Hvala vam. 847 00:37:26,766 --> 00:37:28,820 DAVID J. Malan: Hvala vam. 848 00:37:28,820 --> 00:37:36,230 Dakle Pakirani da, iako uzorak vrsta promijenila tijekom vremena, ovdje 849 00:37:36,230 --> 00:37:40,430 na brodu, bilo je to razgraničenje između različitih nizova 850 00:37:40,430 --> 00:37:42,610 Alex je dobio za nas. 851 00:37:42,610 --> 00:37:45,230 Sada računala, iskreno, mogao učiniti istu stvar. 852 00:37:45,230 --> 00:37:48,210 Mogli vrsta pasti žice nigdje u RAM-a. 853 00:37:48,210 --> 00:37:50,710 Ovdje gore, ovdje, ovdje, ovdje dolje. 854 00:37:50,710 --> 00:37:52,020 >> Oni su mogli učiniti upravo to. 855 00:37:52,020 --> 00:37:54,280 Ali, naravno, to je Vjerojatno nije najbolji planiranja. 856 00:37:54,280 --> 00:37:54,780 Zar ne? 857 00:37:54,780 --> 00:37:57,340 Ako sam zadržao molba Alex se dobili imena, vjerojatno je da će 858 00:37:57,340 --> 00:38:01,370 staviti još malo ovdje, možda se Ovdje, ovdje, ovdje, na kraju 859 00:38:01,370 --> 00:38:02,211 ovamo. 860 00:38:02,211 --> 00:38:05,460 No, s malo više planiranja, svakako, mogli bismo postaviti stvari više čisto. 861 00:38:05,460 --> 00:38:07,350 I doista, to je ono što računalo radi. 862 00:38:07,350 --> 00:38:10,720 >> No, kvaka je u tome što Ako sljedeći niz dobijem 863 00:38:10,720 --> 00:38:14,050 Nakon Zamyla je nešto kao Belinda, 864 00:38:14,050 --> 00:38:17,929 predlažu gdje smo mogli pisati Pismo B u odnosu na toj mreži? 865 00:38:17,929 --> 00:38:18,720 Kamo bi otišao? 866 00:38:18,720 --> 00:38:21,480 Za desno od A, ispod Z, ispod a? 867 00:38:21,480 --> 00:38:23,204 Što bi vaši prvi instinkt bio? 868 00:38:23,204 --> 00:38:24,120 PUBLIKA: Ispod z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. Malan: Dakle, ispod z. 870 00:38:25,100 --> 00:38:26,530 I to je prilično jednostavno, zar ne? 871 00:38:26,530 --> 00:38:29,321 To je vrsta uredan, to je ono što mi radimo na tipkovnici, kada smo udarili Enter, 872 00:38:29,321 --> 00:38:31,770 ili e-mail prilikom Popis s grafičkim oznakama stvari. 873 00:38:31,770 --> 00:38:34,310 No, stvarnost je da računala pokušati biti učinkovitiji, 874 00:38:34,310 --> 00:38:37,170 i nagurati sigurno koliko podataka u RAM-a što je više moguće, 875 00:38:37,170 --> 00:38:38,890 tako da ne otpada bilo bajtova. 876 00:38:38,890 --> 00:38:41,545 Tako da ne otpada bilo kojem zaslonu za nekretnine. 877 00:38:41,545 --> 00:38:44,170 A problem je, međutim, da ako smo doslovno staviti pismo 878 00:38:44,170 --> 00:38:49,940 b nakon, kako ćemo znam gdje Zamyla ime završava 879 00:38:49,940 --> 00:38:51,840 a Belinda je ime počinje? 880 00:38:51,840 --> 00:38:55,270 Tako da ljudi samo predložio, dobro, pritisnite tipku Enter, bitno. 881 00:38:55,270 --> 00:38:56,410 Stavite ga dolje. 882 00:38:56,410 --> 00:38:59,750 Ili čak i Alex učinio, samo počnite pisati Sljedeći ime ispod prethodnog, 883 00:38:59,750 --> 00:39:01,583 i ispod tog jednog, a zatim ispod tog jednog. 884 00:39:01,583 --> 00:39:02,510 To je vizualni znak. 885 00:39:02,510 --> 00:39:05,960 >> Računala su još vizualnog znaka, ali to je malo kratak. 886 00:39:05,960 --> 00:39:07,840 To je to funky znak. 887 00:39:07,840 --> 00:39:11,890 Kosa crtica 0, što je možda podsjeća na obrnute kose crte n, 888 00:39:11,890 --> 00:39:12,640 i tako dalje, sada. 889 00:39:12,640 --> 00:39:14,120 Posebni escape sekvence. 890 00:39:14,120 --> 00:39:19,120 Kosa crtica 0 je način zastupa osam nula bitova u nizu. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Način izraziti da se ne pogoditi broj nula na tipkovnici, 893 00:39:26,130 --> 00:39:28,140 jer je u činjenici da je ASCII char. 894 00:39:28,140 --> 00:39:30,990 To izgleda kao broj, ali je zapravo decimalni broj 895 00:39:30,990 --> 00:39:35,910 koji predstavlja kružnoj glif, kružna pisma. 896 00:39:35,910 --> 00:39:38,410 U međuvremenu, Obrnuta kosa crta nula znači, doslovno 897 00:39:38,410 --> 00:39:40,700 stavio osam nula bajtova ovdje za mene. 898 00:39:40,700 --> 00:39:42,136 >> Dakle, to je nešto proizvoljno. 899 00:39:42,136 --> 00:39:44,260 Mogli smo koristiti bilo koji uzorak bitova, ali svijet 900 00:39:44,260 --> 00:39:46,610 odlučio nekoliko godina Prije, koja se predstavlja 901 00:39:46,610 --> 00:39:49,710 kraj nizu u memoriju, Samo stavite hrpu nula. 902 00:39:49,710 --> 00:39:51,000 Budući da možemo otkriti da. 903 00:39:51,000 --> 00:39:54,790 Sada to znači da ni slovo abeceda može biti zastupljen s nulama. 904 00:39:54,790 --> 00:39:58,480 >> Ali to je u redu, već smo vidjeli da mi koristimo 65 do 97 gore. 905 00:39:58,480 --> 00:40:00,290 Nismo se nigdje u blizini svih nula. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Dakle Belinda u memoriju računala zapravo će ići ovdje. 908 00:40:06,540 --> 00:40:09,764 Ja sam ga izvući na žuto samo skrenuti pozornost na njega. 909 00:40:09,764 --> 00:40:11,680 I obavijest, također, ovo posve je proizvoljna. 910 00:40:11,680 --> 00:40:12,680 Ja sam ga privlači kao mreža. 911 00:40:12,680 --> 00:40:14,460 Kao, RAM je samo neki fizički objekt. 912 00:40:14,460 --> 00:40:17,300 To ne mora nužno redaka i stupaca, sama po sebi. 913 00:40:17,300 --> 00:40:20,490 To samo je dobio hrpu bajtova ugraditi u hardver nekako. 914 00:40:20,490 --> 00:40:22,817 Ali ako nakon Belinda I. upisali u Gabe ime, 915 00:40:22,817 --> 00:40:25,650 on će završiti ovdje u memoriji, a ako sam upisali u Daven ime, 916 00:40:25,650 --> 00:40:27,316 Na primjer, on će završiti ovdje. 917 00:40:27,316 --> 00:40:29,310 I ja mogu i dalje pisati još više imena. 918 00:40:29,310 --> 00:40:32,100 >> Na žalost, ako ja pokušati napisati izrazito dugi naziv, 919 00:40:32,100 --> 00:40:33,730 Možda ću na kraju ostati bez memorije. 920 00:40:33,730 --> 00:40:37,810 U tom slučaju, getstring je će se vratiti NULL, kao što smo rekli. 921 00:40:37,810 --> 00:40:41,720 No, srećom, barem u ovom vizualnom ovdje, nismo dobili baš tako daleko. 922 00:40:41,720 --> 00:40:45,860 >> Ono što je lijepo sad je da je ova Generalna ideja liječenja stvari 923 00:40:45,860 --> 00:40:49,720 kao da su u kutije je Predstavnik značajka C 924 00:40:49,720 --> 00:40:52,690 i puno jezika, poznat kao polje. 925 00:40:52,690 --> 00:40:55,490 Niz je drugi tip podataka. 926 00:40:55,490 --> 00:40:57,380 To je struktura podataka, ako hoćete. 927 00:40:57,380 --> 00:41:01,160 Struktura u smislu toga stvarno, vrsta, izgleda kao kutija, najmanje 928 00:41:01,160 --> 00:41:02,320 u vašem umu cijev. 929 00:41:02,320 --> 00:41:09,680 Niz je granično slijed istih tipova podataka, 930 00:41:09,680 --> 00:41:11,330 natrag na leđa na leđa na leđa. 931 00:41:11,330 --> 00:41:14,720 >> Dakle, niz, u drugom Riječi je niz broj znakova. 932 00:41:14,720 --> 00:41:16,120 Niz znakova. 933 00:41:16,120 --> 00:41:19,070 No, ispostavilo se da možete imati nizovi hrpe stvari. 934 00:41:19,070 --> 00:41:21,870 Zapravo, možemo staviti čak brojevi u nizu. 935 00:41:21,870 --> 00:41:23,920 Dakle, u obliku u kojem idemo za početak 936 00:41:23,920 --> 00:41:26,590 progla ove podatke struktura poznata kao polje 937 00:41:26,590 --> 00:41:28,250 također će koristiti uglate zagrade. 938 00:41:28,250 --> 00:41:31,500 Ali ovi četvornih nosači će imaju različito značenje u ovom kontekstu. 939 00:41:31,500 --> 00:41:33,450 >> I neka je vidjeti što slijedi. 940 00:41:33,450 --> 00:41:36,780 Pretpostavimo da sam otvorio do nove datoteke ovdje. 941 00:41:36,780 --> 00:41:38,535 I sam spasiti to kao ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 I ja ću spasiti to u mojoj mapi ovdje. 944 00:41:43,470 --> 00:41:46,130 A sada ću ići naprijed i počnite tipkati nešto 945 00:41:46,130 --> 00:41:53,940 kao što su CS50.h, uključuju stdio.h, int glavni prazninu. 946 00:41:53,940 --> 00:41:57,370 I onda unutar ovdje, želim prvo imati int zove dobi. 947 00:41:57,370 --> 00:42:01,371 >> A ja ću koristiti da bi dobili int od korisnika za njegovu ili njezinu dob. 948 00:42:01,371 --> 00:42:04,620 No, ovaj program je značilo da se koristi više ljudi, iz bilo kojeg konteksta. 949 00:42:04,620 --> 00:42:05,490 Imam niz ljudi. 950 00:42:05,490 --> 00:42:08,281 Svi oni moraju upisati u njihovom dob možda neki, ne znam, 951 00:42:08,281 --> 00:42:10,530 natjecanje ili događaj da ste stigli na. 952 00:42:10,530 --> 00:42:13,030 Dakle, sljedeća osoba, ja trebamo još jednu varijablu. 953 00:42:13,030 --> 00:42:15,790 >> Jer ako sam samo učiniti Dob dobiva getInt, to je 954 00:42:15,790 --> 00:42:18,500 će izmlatiti, ili prepisati Starost prethodne osobe. 955 00:42:18,500 --> 00:42:19,760 Dakle, to nije dobro. 956 00:42:19,760 --> 00:42:21,790 Dakle, moj prvi instinkt Možda, oh, u redu, 957 00:42:21,790 --> 00:42:26,260 ako želim dobiti više pučke ages-- nazovimo to age1, 958 00:42:26,260 --> 00:42:31,280 int života2 dobiva int, int age3 dobiva getInt. 959 00:42:31,280 --> 00:42:35,340 A sada ću koristiti Neki pseudocode kod ovdje. 960 00:42:35,340 --> 00:42:37,679 >> Učinite nešto s tim brojevima. 961 00:42:37,679 --> 00:42:40,470 Mi ćemo ostaviti za neki drugi dan ono radimo tamo, jer mi samo 962 00:42:40,470 --> 00:42:44,200 briga za trenutak O age1, života2, age3. 963 00:42:44,200 --> 00:42:46,450 Nažalost, jednom kad sam sastaviti ovaj program 964 00:42:46,450 --> 00:42:51,140 i stavio ga pred stvarnim korisnicima, ono što je bitno siromašni dizajn 965 00:42:51,140 --> 00:42:53,890 Odluka čini mi se da su napravili? 966 00:42:53,890 --> 00:42:54,624 Da? 967 00:42:54,624 --> 00:42:55,499 PUBLIKA: [nečujan] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. Malan: Da, Nisam ni pokušao 970 00:42:59,820 --> 00:43:02,028 shvatiti kako mnoge dobi ja zapravo stalo? 971 00:43:02,028 --> 00:43:05,380 Ako imam manje od troje ljudi ovdje, i stoga manje od tri uzrasta, 972 00:43:05,380 --> 00:43:07,260 Ja sam još uvijek slijepo očekuju tri. 973 00:43:07,260 --> 00:43:08,720 Ne daj Bože četvero ljudi pojaviti. 974 00:43:08,720 --> 00:43:10,990 Moj program jednostavno neće ni ih podržati. 975 00:43:10,990 --> 00:43:13,280 >> I tako to, duga priča Ukratko, nije dobra navika. 976 00:43:13,280 --> 00:43:13,780 Zar ne? 977 00:43:13,780 --> 00:43:16,530 Bio sam u biti kopiranje i Unošenjem koda i samo ugađati 978 00:43:16,530 --> 00:43:17,430 varijabilni imena. 979 00:43:17,430 --> 00:43:22,410 A, Bože moj, ako je imao, ne tri vijeku, ali je 10, ili 100, ili čak 6.500 980 00:43:22,410 --> 00:43:23,820 studenti, na primjer. 981 00:43:23,820 --> 00:43:26,950 Ovo neće biti osobito Elegantna broj, ili održivi. 982 00:43:26,950 --> 00:43:29,200 Ti si idući u morati prepisati programa svaki put 983 00:43:29,200 --> 00:43:30,760 Vaš broj ljudi promjene. 984 00:43:30,760 --> 00:43:35,090 >> Dakle, srećom, u naš stvarni ages.c datoteka za danas, 985 00:43:35,090 --> 00:43:36,970 imamo više pametno rješenje. 986 00:43:36,970 --> 00:43:39,800 Prvo, ja ću posuditi izgraditi smo koristiti nekoliko puta, 987 00:43:39,800 --> 00:43:43,744 to učiniti dok petlji, kako bi se broj ljudi u sobi. 988 00:43:43,744 --> 00:43:46,910 Samo ću se gnjaviti korisniku, opet i opet, sve dok on ili ona mi daje 989 00:43:46,910 --> 00:43:49,260 vrijednost n to je pozitivan cijeli broj. 990 00:43:49,260 --> 00:43:51,590 >> Mogao sam koristiti, posljednja Vrijeme je dobiti pozitivan int. 991 00:43:51,590 --> 00:43:53,720 No, mi nemamo što za real, pa sam otišao naprijed 992 00:43:53,720 --> 00:43:55,660 i ponovno provesti tu ideju. 993 00:43:55,660 --> 00:43:58,410 Sada ovdje, ovo je novi trik. 994 00:43:58,410 --> 00:44:02,260 U liniji 27, kao i na komentare u 26 linija sugerira, 995 00:44:02,260 --> 00:44:05,180 Izjavljujem niz u kojem pohraniti svačija starost. 996 00:44:05,180 --> 00:44:09,320 >> Dakle, ako želite da biste dobili, a ne jedan int, ne Dva ori-, ali cijela hrpa ints. 997 00:44:09,320 --> 00:44:13,800 Naime n prirodni brojevi, n su možda biti tri, možda 100, možda 1000. 998 00:44:13,800 --> 00:44:17,570 Sintakse, sasvim jednostavno, jest recimo, koje podatke tipa želiš? 999 00:44:17,570 --> 00:44:19,620 Što želite nazvati koji komad memorije? 1000 00:44:19,620 --> 00:44:23,530 Što želite nazvati mrežu da izgleda ovako slikovito? 1001 00:44:23,530 --> 00:44:27,700 >> I na tipkovnici ovdje, kažeš koliko je velik želite niz biti. 1002 00:44:27,700 --> 00:44:30,450 I tako je i ranije, kad sam rekao sintaksa je malo drugačija, 1003 00:44:30,450 --> 00:44:33,614 mi smo još uvijek koriste uglate zagrade, ali kad sam objavljujući niz, 1004 00:44:33,614 --> 00:44:35,530 broj unutar uglate zagrade sredstva 1005 00:44:35,530 --> 00:44:37,610 koliko je velik želite niz biti. 1006 00:44:37,610 --> 00:44:42,490 >> Za razliku od toga, kad smo bili sa s Nosač sam maloprije, s, niz, 1007 00:44:42,490 --> 00:44:46,820 je doista niz broj znakova, ali kada ne izjavljuje varijable, 1008 00:44:46,820 --> 00:44:49,760 kao s tom ključnom riječi ovdje, ti si jednostavno uzimajući 1009 00:44:49,760 --> 00:44:54,280 specifični indeks, specifičan Element iz tog niza. 1010 00:44:54,280 --> 00:44:57,090 Kada znamo da je, ostatak za to je jednostavan. 1011 00:44:57,090 --> 00:45:00,765 Ako novi sam prvi put će ispisati što je dob osobe broj i. 1012 00:45:00,765 --> 00:45:03,890 Gdje sam samo reći osoba broj jedan, Osoba broj dva, osoba broj tri. 1013 00:45:03,890 --> 00:45:06,306 >> A ja samo radim aritmetika, tako da kao normalni ljudi, 1014 00:45:06,306 --> 00:45:09,030 brojimo od jedan za to Program, a ne od nule. 1015 00:45:09,030 --> 00:45:13,620 Tada sam nazvati getint, ali ja pohraniti Odgovor je u dobi zagrada ja. 1016 00:45:13,620 --> 00:45:16,610 Koji je i'th dobi u nizu. 1017 00:45:16,610 --> 00:45:21,640 Dakle, dok su posljednji put bili smo liječenje Te kutije su kao broj znakova za Zamyla ime, 1018 00:45:21,640 --> 00:45:22,490 i drugi. 1019 00:45:22,490 --> 00:45:26,530 Sada, ove kutije predstavljaju 32 bita, ili četiri bajta 1020 00:45:26,530 --> 00:45:29,510 u kojem možemo pohraniti int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Svi koji, opet, su isti tip podataka. 1022 00:45:31,890 --> 00:45:33,890 >> Sada sam napraviti nešto glupo, kao i vrijeme prolazi, samo 1023 00:45:33,890 --> 00:45:35,510 opravdati pisanja ovog programa. 1024 00:45:35,510 --> 00:45:40,050 I onda ovdje, ja opet ponoviti preko niza govore godinu dana, 1025 00:45:40,050 --> 00:45:43,090 Osoba broj jedan volja biti nešto godina. 1026 00:45:43,090 --> 00:45:45,010 I shvatiti da je math-- Mislim, ovo 1027 00:45:45,010 --> 00:45:49,260 nije jako komplicirano arithmetic-- Ja samo dodati jednu njihovoj dobi. 1028 00:45:49,260 --> 00:45:51,240 Dovoljno je da pokažu, opet, ovo. 1029 00:45:51,240 --> 00:45:57,910 >> Baš kao što sam ja indeks u nizu, s, Dakle, mogu indeksa u niz dobi, 1030 00:45:57,910 --> 00:45:59,950 kao da ne postoji. 1031 00:45:59,950 --> 00:46:03,340 Dakle, gdje će to biti nas vode? 1032 00:46:03,340 --> 00:46:07,070 Dakle, vidjet ćemo, u konačnici, Nekoliko stvari u danima koji dolaze. 1033 00:46:07,070 --> 00:46:09,510 Jedan od njih, sve ovo vrijeme, kad pisanje svoje vlastite programe, 1034 00:46:09,510 --> 00:46:11,239 kao što je Mario, pohlepni, kredit. 1035 00:46:11,239 --> 00:46:13,780 Vi ste bili tipkati ime Program i tipke Enter. 1036 00:46:13,780 --> 00:46:15,610 A zatim uzimajući korisnika ulaz. 1037 00:46:15,610 --> 00:46:18,137 >> S getString, getInt, getLongLong, ili slično. 1038 00:46:18,137 --> 00:46:20,720 No, ispostavilo se da je C potpore nešto što se zove naredbenog retka 1039 00:46:20,720 --> 00:46:25,740 Argumenti, koji će nas pustiti zapravo se na riječi koje upisujete, 1040 00:46:25,740 --> 00:46:28,570 na trepćući redak Nakon imena svoga programa. 1041 00:46:28,570 --> 00:46:31,430 >> Dakle, u danima koji dolaze, te mogao upisati nešto poput Cezara, 1042 00:46:31,430 --> 00:46:34,950 ili ./caesar broj 13, nakon toga. 1043 00:46:34,950 --> 00:46:36,070 Vidjet ćemo kako se to radi. 1044 00:46:36,070 --> 00:46:37,550 Jer doista, u Problem postaviti dva, mi smo 1045 00:46:37,550 --> 00:46:39,383 će vas upoznati da malo nešto 1046 00:46:39,383 --> 00:46:42,360 podsjeća Ralphie-a izazov ranije kartografije. 1047 00:46:42,360 --> 00:46:43,970 Umjetnost remećenje informacije. 1048 00:46:43,970 --> 00:46:46,660 To je, u stvari, vrlo je podsjeća na ono što Ralphie učinio. 1049 00:46:46,660 --> 00:46:51,380 >> Ovo je primjer za šifriranje Algoritam se zove rot13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Što jednostavno znači okretati slova abecede 13 mjesta. 1051 00:46:54,910 --> 00:46:58,309 A ako to učinite, vidjet ćete sada ono što je, možda, poznato izraz. 1052 00:46:58,309 --> 00:47:01,100 No, način na koji ćemo koristiti to, u konačnici, je više općenito. 1053 00:47:01,100 --> 00:47:04,390 >> U P postaviti dva, u standardnom izdanju, ćete provesti nekoliko šifri, 1054 00:47:04,390 --> 00:47:06,720 jedan se zove Caesar, jedan se zove Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Obojica su okretni šifre, u to nekako 1056 00:47:10,090 --> 00:47:11,826 okrenuti jedno slovo u drugu pismu. 1057 00:47:11,826 --> 00:47:12,950 A Cezar je super jednostavna. 1058 00:47:12,950 --> 00:47:16,220 Možete dodati jednu, dodate 13, ili neki broj i do 26 godina. 1059 00:47:16,220 --> 00:47:19,570 Vigenere to radi na po slovo osnova. 1060 00:47:19,570 --> 00:47:22,140 Dakle Vigenere, kao što ćete vidjeti u spec, je sigurnije. 1061 00:47:22,140 --> 00:47:24,973 >> Ali na kraju dana, što vi ćete biti provedbi i P postaviti dva, 1062 00:47:24,973 --> 00:47:29,050 Ključ je u tome da koristite oboje za šifriranje i dešifriranje. 1063 00:47:29,050 --> 00:47:32,160 Pozivajući se na proces pretvaranja običan tekst, neka izvorna poruka, 1064 00:47:32,160 --> 00:47:34,490 u Cypher teksta, koji je nešto kodiran. 1065 00:47:34,490 --> 00:47:36,220 A onda ga opet dešifriranja. 1066 00:47:36,220 --> 00:47:38,119 >> U hakerske izdanju, U međuvremenu, vi ćete biti 1067 00:47:38,119 --> 00:47:40,660 zadužena s nečim sličnim u duhu, gdje ćemo vam dati 1068 00:47:40,660 --> 00:47:44,610 datoteka, od tipičnog Linux, ili Mac ili Unix računalo pod nazivom Etsy 1069 00:47:44,610 --> 00:47:47,800 lozinku, koja sadrži cjelinu Hrpa korisnička imena i lozinke. 1070 00:47:47,800 --> 00:47:50,932 I oni su sve lozinke kodiran, ili raspršen, 1071 00:47:50,932 --> 00:47:53,140 da se tako izrazim, točnije kao što ćete vidjeti u spec. 1072 00:47:53,140 --> 00:47:57,090 >> A haker izdanje će izazov li uzimanje ulaz kao što je ovaj, 1073 00:47:57,090 --> 00:47:58,800 i pucanja lozinke. 1074 00:47:58,800 --> 00:48:02,590 To je, figuring out ono što Lozinka čovjekova zapravo bio. 1075 00:48:02,590 --> 00:48:05,570 Jer, doista, lozinke uglavnom ne pohranjuju se u jasan, 1076 00:48:05,570 --> 00:48:08,260 i općenito lozinke bi trebalo biti teško pogoditi. 1077 00:48:08,260 --> 00:48:09,610 To nije čest slučaj. 1078 00:48:09,610 --> 00:48:12,110 >> I ono što sam mislio da ćemo učiniti je zaključiti s par minuta 1079 00:48:12,110 --> 00:48:15,160 pogled na posebno Loš izbor lozinki 1080 00:48:15,160 --> 00:48:17,260 iz filma možda sjetiti nježno. 1081 00:48:17,260 --> 00:48:18,915 A ako ne, trebali iznajmiti. 1082 00:48:18,915 --> 00:48:20,070 >> [Video reprodukciju] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Što đavo, što se događa? 1084 00:48:22,320 --> 00:48:24,240 Što to radite mojoj kćeri? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Me uvesti briljantni mladi plastični kirurg, 1086 00:48:28,010 --> 00:48:30,010 Liječnik Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Najveći nos posao čovjek u Cijeli svemir i Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> Tvoja Visosti. 1089 00:48:36,140 --> 00:48:36,820 >> -Nose Posao? 1090 00:48:36,820 --> 00:48:37,700 Ne razumijem. 1091 00:48:37,700 --> 00:48:39,070 Već je imao operaciju nosa. 1092 00:48:39,070 --> 00:48:40,800 To je bio njezin slatki 16 prisutna. 1093 00:48:40,800 --> 00:48:42,590 >> Ne, to nije ono što mislite. 1094 00:48:42,590 --> 00:48:44,490 To je mnogo, mnogo gore. 1095 00:48:44,490 --> 00:48:48,160 Ako mi ne daju Kombinacija na zračni štit, 1096 00:48:48,160 --> 00:48:52,748 Liječnik će vam dati Schlotkin kćer natrag svoju staru nos. 1097 00:48:52,748 --> 00:48:53,748 - [Bori] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Odakle vam to? 1100 00:48:59,652 --> 00:49:00,640 >> -Sve Pravu. 1101 00:49:00,640 --> 00:49:02,506 Ja ću reći, ja ću reći. 1102 00:49:02,506 --> 00:49:03,498 >> Ne, tata, ne. 1103 00:49:03,498 --> 00:49:04,490 Ne smijete. 1104 00:49:04,490 --> 00:49:06,090 >> Ti si u pravu draga moja. 1105 00:49:06,090 --> 00:49:07,390 Nedostajat će mi tvoj novi nos. 1106 00:49:07,390 --> 00:49:10,990 Ali neću im reći Kombinacija bez obzira. 1107 00:49:10,990 --> 00:49:12,450 >> Vrlo dobro. 1108 00:49:12,450 --> 00:49:14,830 Liječnik Schlotkin, učiniti svoje najgore. 1109 00:49:14,830 --> 00:49:15,744 >> Moja zadovoljstvo. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> Ne! 1112 00:49:20,800 --> 00:49:22,780 Čekaj, čekaj. 1113 00:49:22,780 --> 00:49:24,000 Ja ću reći. 1114 00:49:24,000 --> 00:49:25,830 Ja ću reći. 1115 00:49:25,830 --> 00:49:28,270 >> -Ja Znao da će to raditi. 1116 00:49:28,270 --> 00:49:31,390 U redu, daj ga meni. 1117 00:49:31,390 --> 00:49:36,220 >> -The Kombinacija je jedan. 1118 00:49:36,220 --> 00:49:36,740 >> Jedan. 1119 00:49:36,740 --> 00:49:37,473 >> Jedan. 1120 00:49:37,473 --> 00:49:37,972 -Dva. 1121 00:49:37,972 --> 00:49:38,471 -Dva. 1122 00:49:38,471 --> 00:49:39,800 -Dva. 1123 00:49:39,800 --> 00:49:40,300 Troje. 1124 00:49:40,300 --> 00:49:40,800 Troje. 1125 00:49:40,800 --> 00:49:41,800 Troje. 1126 00:49:41,800 --> 00:49:42,300 -Četiri. 1127 00:49:42,300 --> 00:49:42,800 -Četiri. 1128 00:49:42,800 --> 00:49:44,707 -Četiri. 1129 00:49:44,707 --> 00:49:45,521 Pet. 1130 00:49:45,521 --> 00:49:46,430 Pet. 1131 00:49:46,430 --> 00:49:47,930 Pet. 1132 00:49:47,930 --> 00:49:53,480 Znači kombinacija je jedan, dva, tri, četiri, pet. 1133 00:49:53,480 --> 00:49:56,140 To je najgluplji kombinacija Sam ikad čuo u životu. 1134 00:49:56,140 --> 00:49:58,640 To je vrsta stvar koju idiot bi imati na svojoj prtljazi. 1135 00:49:58,640 --> 00:50:00,000 >> Hvala, Vaše Veličanstvo. 1136 00:50:00,000 --> 00:50:01,340 >> [REMOTE klikova] 1137 00:50:01,340 --> 00:50:02,450 >> Što si učinio? 1138 00:50:02,450 --> 00:50:03,800 >> -Ja Isključen zid. 1139 00:50:03,800 --> 00:50:05,010 >> Ne, nisi, ti isključen cijeli film. 1140 00:50:05,010 --> 00:50:06,220 >> -Ja Zacijelo pritisnuo krivi gumb. 1141 00:50:06,220 --> 00:50:07,064 >> Pa, vratite ga na! 1142 00:50:07,064 --> 00:50:07,910 Stavite film ponovno! 1143 00:50:07,910 --> 00:50:08,300 >> Da, gospodine! 1144 00:50:08,300 --> 00:50:08,799 Da, gospodine. 1145 00:50:08,799 --> 00:50:09,660 Pusti idemo, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Dođite, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Naravno da znam da ću moram vam naplatiti za to. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 Pa? 1150 00:50:17,220 --> 00:50:17,802 Je li uspjelo? 1151 00:50:17,802 --> 00:50:18,510 Gdje je kralj? 1152 00:50:18,510 --> 00:50:20,218 >> -To Radili, gospodine, mi imaju kombinaciju. 1153 00:50:20,218 --> 00:50:20,740 Sjajno. 1154 00:50:20,740 --> 00:50:24,810 Sada možemo uzeti svaki zadnji dah svježeg zraka iz planeti Druidia. 1155 00:50:24,810 --> 00:50:25,890 Što je kombinacija? 1156 00:50:25,890 --> 00:50:28,155 >> Jedan, dva, tri, četiri, pet. 1157 00:50:28,155 --> 00:50:29,890 >> Jedan, dva, tri, četiri, pet? 1158 00:50:29,890 --> 00:50:30,390 Da. 1159 00:50:30,390 --> 00:50:31,110 -To Je nevjerojatna. 1160 00:50:31,110 --> 00:50:34,550 Imam isti Kombinacija na svoju prtljagu. 1161 00:50:34,550 --> 00:50:37,160 Pripremite SpaceBall 1 za Neposredna odlazak. 1162 00:50:37,160 --> 00:50:38,160 >> Da, gospodine. 1163 00:50:38,160 --> 00:50:40,745 >> -I Promijeniti Kombinacija na svoju prtljagu. 1164 00:50:40,745 --> 00:50:41,578 [VRATA ZATVARANJE SOUND] 1165 00:50:41,578 --> 00:50:42,064 [Zveckanje VRATA udaranja kacigom] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [END video reprodukciju] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. Malan: To je to za CS50, vidimo se sljedeći tjedan. 1169 00:50:46,700 --> 00:50:49,883 Narator: A sada, duboko Misli, po Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> DAVEN FARNHAM: Coding u C je Puno teže nego ispočetka. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch je laž. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Smijeh TON] 1175 00:51:01,430 --> 00:51:02,486