1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [Predvajanje glasbe] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. Malan: Dobro. 5 00:00:12,230 --> 00:00:16,440 To je CS50, in to je konec 2 tedna. 6 00:00:16,440 --> 00:00:18,480 Torej, danes, greva nadaljevati naš pogled 7 00:00:18,480 --> 00:00:21,150 kako mi predstavljajo stvari pod hood-- oddaljuje 8 00:00:21,150 --> 00:00:23,520 iz številk, kot cela in plavajočo vejico 9 00:00:23,520 --> 00:00:26,810 in se osredotoča na strune in navsezadnje bolj zanimive programe. 10 00:00:26,810 --> 00:00:30,140 Vendar pa bomo lahko tudi pogled na Nekaj ​​domensko specifičnih problems-- 11 00:00:30,140 --> 00:00:33,620 od katerih bo prva lahko vključujejo kriptografije, 12 00:00:33,620 --> 00:00:36,570 umetnost kodiranja podatkov, v katerem vidite zgoraj tukaj 13 00:00:36,570 --> 00:00:41,480 je slika Radio Orphan Annie Skrivnost dekoder prstan iz minulih dni. 14 00:00:41,480 --> 00:00:46,490 >> To je pravzaprav zelo primitivna oblika in otrokom prijazna oblika cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 pri čemer ima ta obroč dve disks-- ena znotraj in eno zunaj. 16 00:00:50,590 --> 00:00:54,740 In z vrtenjem enega od teh, ki jih lahko v bistvu line up črk kot 17 00:00:54,740 --> 00:00:59,520 do Z drugimi črkami kot B prek A. Z drugimi besedami, 18 00:00:59,520 --> 00:01:03,730 lahko dobesedno vrti abecedo, kar prihaja s preslikavo iz 19 00:01:03,730 --> 00:01:07,820 Črke na dopise, tako da, če ste hotel poslati tajno sporočilo 20 00:01:07,820 --> 00:01:11,820 za nekoga, kot Annie, lahko napišete dol vaše sporočilo in nato zavrtite 21 00:01:11,820 --> 00:01:15,370 črke, pri čemer, če misliš reči "A," si namesto tega rekli "B" 22 00:01:15,370 --> 00:01:17,280 misliš reči "B" ste namesto tega rekli "C" - 23 00:01:17,280 --> 00:01:20,240 ali kaj malo bolj pameten kot to-- in potem, na koncu, 24 00:01:20,240 --> 00:01:24,630 tako dolgo, kot je Annie ta dekoder ring, je mogoče dešifrirati sporočila. 25 00:01:24,630 --> 00:01:28,540 Zdaj se morda spomniš, v dejstvu, da je to je bila uporabljena v zelo znani film, ki 26 00:01:28,540 --> 00:01:31,140 predvaja oglas nauseum med božični čas. 27 00:01:31,140 --> 00:01:32,650 Poglejmo si oglejte tukaj. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie PARKER: "Naj bo Znano je, da vse v povzetku 30 00:01:37,210 --> 00:01:41,000 da je Ralph Parker se imenuje član Little Orphan Annie Secret 31 00:01:41,000 --> 00:01:44,860 Krog in pravico za vse časti in koristi z njimi pojavljajo. " 32 00:01:44,860 --> 00:01:47,410 >> Ralphie PARKER (pripovedovanje): Podpisana Mali Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Sopodpiše, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 S črnilom. 35 00:01:51,490 --> 00:01:55,494 Priznanja in koristi, že pri devetih letih. 36 00:01:55,494 --> 00:01:57,402 >> [Predvajanje glasbe] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO Zmenkar] 38 00:02:00,470 --> 00:02:01,470 Ralphie PARKER: Dajmo. 39 00:02:01,470 --> 00:02:02,344 Pojdiva s tem. 40 00:02:02,344 --> 00:02:06,029 Jaz ne potrebujem toliko jazz o tihotapcih in pirati. 41 00:02:06,029 --> 00:02:08,820 RADIO Napovedovalka: Poslušajte jutri noč sklepnem avanturo 42 00:02:08,820 --> 00:02:11,060 of The Black Pirate Ship. 43 00:02:11,060 --> 00:02:14,740 Zdaj je čas za Annie Secret Message za vas člane 44 00:02:14,740 --> 00:02:17,110 of The Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Ne pozabite, otroci samo člani Annie je Secret Circle 46 00:02:20,700 --> 00:02:23,270 morejo dekodirati Annie skrivno sporočilo. 47 00:02:23,270 --> 00:02:27,270 >> Ne pozabite, Annie je odvisno od vas. 48 00:02:27,270 --> 00:02:30,060 Nastavite zatiči za B-2. 49 00:02:30,060 --> 00:02:34,004 Tukaj je message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie PARKER (pripovedovanje): I sem v mojem prvem tajnem sestanku. 51 00:02:36,503 --> 00:02:40,041 RADIO Napovedovalka: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie PARKER (pripovedovanje): Oh, Pierre je bil v veliko glasovno nocoj. 53 00:02:42,790 --> 00:02:46,110 Jaz lahko povem, da je nocoj Sporočilo je bilo zares pomembno. 54 00:02:46,110 --> 00:02:47,930 >> RADIO Napovedovalka: --3, 25. 55 00:02:47,930 --> 00:02:49,940 To je sporočilo od Annie sama. 56 00:02:49,940 --> 00:02:52,182 Ne pozabite, ne povej nikomur. 57 00:02:52,182 --> 00:02:55,077 >> [Zadihana] 58 00:02:55,077 --> 00:02:57,285 Ralphie PARKER (pripovedovanje): Devetdeset sekund kasneje, sem 59 00:02:57,285 --> 00:03:00,090 v edinem prostoru v Hiša, v kateri fant devet 60 00:03:00,090 --> 00:03:04,380 Lahko bi sedel v zasebnost in 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 >> [Smeh] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie PARKER (pripovedovanje): Šla sem na naslednjo. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 Prva beseda je "biti". 67 00:03:11,641 --> 00:03:12,140 Yes! 68 00:03:12,140 --> 00:03:14,293 Prihajal je zdaj lažje. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Smeh] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Ah, daj no, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Moram iti! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie PARKER: Takoj pridem dol, Ma. 74 00:03:21,538 --> 00:03:22,504 Gee čarovnik. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Bodite prepričani, za. "" Bodite prepričani, da se "kaj? 77 00:03:31,220 --> 00:03:33,981 Kaj je bilo malo Orphan Annie hočeš povedati? "Bodite prepričani, da se" kaj? 78 00:03:33,981 --> 00:03:35,522 MATI: Ralphie, je Randy iti. 79 00:03:35,522 --> 00:03:36,735 Bi, prosim, pridi ven? 80 00:03:36,735 --> 00:03:38,190 >> Ralphie PARKER: V redu, mama! 81 00:03:38,190 --> 00:03:39,787 Takoj bom ven! 82 00:03:39,787 --> 00:03:41,995 Ralphie PARKER (pripovedovanje): Bil sem že bližje zdaj. 83 00:03:41,995 --> 00:03:43,370 Napetost je bilo grozno. 84 00:03:43,370 --> 00:03:44,794 Kaj je bilo to? 85 00:03:44,794 --> 00:03:47,656 Usoda planeta lahko visi na nitki. 86 00:03:47,656 --> 00:03:50,518 >> MATI: Ralphie, Randy mora iti! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie PARKER: bom out, za zjokat! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (Pripovedovanje): Skoraj tam! 89 00:03:55,343 --> 00:03:56,520 Moji prsti letel! 90 00:03:56,520 --> 00:03:58,500 Moj um je bil jeklena past. 91 00:03:58,500 --> 00:03:59,850 Vsak pore vibrira. 92 00:03:59,850 --> 00:04:01,806 Bilo je skoraj čisto! 93 00:04:01,806 --> 00:04:02,773 Yes! 94 00:04:02,773 --> 00:04:03,273 Yes! 95 00:04:03,273 --> 00:04:03,773 Yes! 96 00:04:03,773 --> 00:04:04,740 Yes! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie PARKER: "Bodite prepričani, piti svojo 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 Crummy reklamo? 101 00:04:17,539 --> 00:04:19,439 >> [Predvajanje glasbe] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie PARKER: Prasec. 103 00:04:21,724 --> 00:04:23,460 >> [Laughing] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. Malan: Torej, da je takrat pogled na kateri kriptografiji 105 00:04:27,070 --> 00:04:29,880 lahko za to-- a piti iz minulih dni. 106 00:04:29,880 --> 00:04:30,900 Tako hitro napoved. 107 00:04:30,900 --> 00:04:33,410 Če ste prost to Petek ob 13:15 in bi 108 00:04:33,410 --> 00:04:36,610 želi, da se nam pridružite na CS50 kosilo, glavo na tem URL tukaj. 109 00:04:36,610 --> 00:04:38,080 Prvi pride, prvi služi kot ponavadi. 110 00:04:38,080 --> 00:04:41,840 Čez čas pa bomo poskrbeli, da Najbolj kdo, ki bi želeli sodelovati 111 00:04:41,840 --> 00:04:43,640 lahko načrtuje-wise. 112 00:04:43,640 --> 00:04:45,170 >> Tako strune. 113 00:04:45,170 --> 00:04:47,940 Imamo Zamyla-- komu sedaj ste verjetno izpolnjeni 114 00:04:47,940 --> 00:04:50,750 V Težava Set 1-- katerih Ime je pira tako. 115 00:04:50,750 --> 00:04:53,570 In domnevam ste vnesli svoje ime v računalniški program, ki je 116 00:04:53,570 --> 00:04:55,710 uporabo nekaj podobnega getString. 117 00:04:55,710 --> 00:04:57,890 Za pridobivanje ti keystrokes, kako 118 00:04:57,890 --> 00:05:01,620 Ne bomo šli o zastopajo Niz, beseda, odstavek, 119 00:05:01,620 --> 00:05:03,960 ali več črk, kot ti tukaj? 120 00:05:03,960 --> 00:05:06,790 >> Pogovarjala sva se zadnjič o cela števila in težave 121 00:05:06,790 --> 00:05:09,960 ki se pojavljajo pri integer overflow in plavajočo vejico 122 00:05:09,960 --> 00:05:12,190 in težave, ki pojavijo se v natančnosti. 123 00:05:12,190 --> 00:05:16,080 S strunami, bomo vsaj imajo malo več prožnosti 124 00:05:16,080 --> 00:05:17,970 ker strings-- samo v resničnem world-- 125 00:05:17,970 --> 00:05:19,790 lahko precej poljubno dolžino. 126 00:05:19,790 --> 00:05:21,055 Precej kratka, precej dolgo. 127 00:05:21,055 --> 00:05:23,680 Toda tudi potem, gremo na Ugotovijo, da računalniki lahko včasih 128 00:05:23,680 --> 00:05:27,200 zmanjka pomnilnika in niti ne shranjevanje dovolj velik niz. 129 00:05:27,200 --> 00:05:30,840 >> Ampak za zdaj, začnimo vizualizirati niz, kot nekaj, kar v teh poljih 130 00:05:30,840 --> 00:05:31,340 tukaj. 131 00:05:31,340 --> 00:05:36,410 Torej šest take škatle, od katerih je vsaka predstavlja znak ali "char". 132 00:05:36,410 --> 00:05:40,646 Tako opozarjajo, da je "char" - c-h-a-r-- je eden od vgrajenih podatkovnih tipov v C 133 00:05:40,646 --> 00:05:43,520 In kaj je lepo je, da lahko uporabite da je nekako kot gradnik, 134 00:05:43,520 --> 00:05:47,880 puzzle piece, če hočete, da tvorijo Večje vrste podatkov, ki jih bomo še naprej 135 00:05:47,880 --> 00:05:49,410 na klic "niz". 136 00:05:49,410 --> 00:05:53,650 >> Zdaj, kaj je koristno misliti o stvareh, kot strune na ta način? 137 00:05:53,650 --> 00:05:57,720 No, izkazalo se je, da smo lahko dejansko vzvod za to strukturo 138 00:05:57,720 --> 00:06:01,420 dejansko dostop do posameznih znakov na zelo enostaven način. 139 00:06:01,420 --> 00:06:04,099 Jaz grem naprej in ustvariti datoteka z imenom "stringzero.c" 140 00:06:04,099 --> 00:06:05,765 vendar pa lahko pokličete karkoli želite. 141 00:06:05,765 --> 00:06:08,500 In na spletni strani predmeta je že ta primer vnaprej, 142 00:06:08,500 --> 00:06:10,430 tako da vam ni treba vnesite vse ven. 143 00:06:10,430 --> 00:06:13,820 >> In jaz grem naprej in najprej narediti int main praznino. 144 00:06:13,820 --> 00:06:15,980 In v nekaj dneh, bomo začeli narazen draži 145 00:06:15,980 --> 00:06:19,070 kakšna praznina je tu, zakaj je int poleg glavnega, in tako naprej. 146 00:06:19,070 --> 00:06:21,180 Ampak za zdaj, gremo naprej kopirate prilepite to. 147 00:06:21,180 --> 00:06:23,455 >> Bom razglasi niz imenovano s. 148 00:06:23,455 --> 00:06:26,920 In bom, da se vrnete iz GetString ne glede na vrste uporabnikov v. 149 00:06:26,920 --> 00:06:29,170 To se bo enostavna Program, navodila ne, 150 00:06:29,170 --> 00:06:31,336 Jaz bom samo slepo Pričakujemo, da uporabnik ve 151 00:06:31,336 --> 00:06:32,600 kaj storiti, da bo enostavno. 152 00:06:32,600 --> 00:06:34,220 >> In zdaj bom imel za zanko. 153 00:06:34,220 --> 00:06:37,450 In znotraj mojega za zanko sem dogaja, da imajo int i dobi nič. 154 00:06:37,450 --> 00:06:40,660 In i je, še enkrat, samo konvencija, indeks spremenljivka za štetje, 155 00:06:40,660 --> 00:06:42,350 ampak jaz bi to, kar hočem poklicati. 156 00:06:42,350 --> 00:06:46,275 Bom naredil jaz je manj than-- dobro Ime Zamyla je šest črk. 157 00:06:46,275 --> 00:06:48,150 Torej bom težko koda, da je za zdaj. 158 00:06:48,150 --> 00:06:49,730 >> In potem sem ++. 159 00:06:49,730 --> 00:06:53,190 In sedaj znotraj teh curly oporniki bom naredil printf, 160 00:06:53,190 --> 00:06:55,460 in želim natisniti eno znak naenkrat. 161 00:06:55,460 --> 00:06:58,227 Torej bom uporabila% c za morda prvič. 162 00:06:58,227 --> 00:07:00,560 In potem hočem natisniti vsak znak v svoji vrstici. 163 00:07:00,560 --> 00:07:02,550 Torej bom dal malo n poševnica nazaj tam. 164 00:07:02,550 --> 00:07:03,640 Zapri quote. 165 00:07:03,640 --> 00:07:06,250 >> In zdaj hočem nekaj narediti. 166 00:07:06,250 --> 00:07:10,610 Želim natisniti poseben znak v nizu, 167 00:07:10,610 --> 00:07:13,670 s, kot sem ponavljanjem od nič na do šest. 168 00:07:13,670 --> 00:07:17,150 Z drugimi besedami, želim, da natisniti i'th značaj s. 169 00:07:17,150 --> 00:07:18,420 Zdaj, kako lahko to storim? 170 00:07:18,420 --> 00:07:21,550 >> No, podobno kot grafičnem zastopani tu, 171 00:07:21,550 --> 00:07:25,560 vrste, pričarajo pojem boks Črke lahko podobno storili 172 00:07:25,560 --> 00:07:32,630 skladenjsko v C, ki ga preprosto z navedbo, Želim natisniti po e-jev i'th značaja. 173 00:07:32,630 --> 00:07:35,640 Uporaba oklepajev na tipkovnici računalnika 174 00:07:35,640 --> 00:07:38,910 da so na tipkovnici ZDA običajno nad vašo vrnitev ključ. 175 00:07:38,910 --> 00:07:42,630 >> Tako da to ni čisto v redu vendar, kot ste morda opazili. 176 00:07:42,630 --> 00:07:44,780 Ampak bom na vrsto slepo korak naprej tukaj. 177 00:07:44,780 --> 00:07:47,020 In bom naredil, da niz 0. 178 00:07:47,020 --> 00:07:50,860 Toda preden to storim, da vidimo, če smo ne moremo predvideti nekaj pogostih napak. 179 00:07:50,860 --> 00:07:52,844 Se bo to prevesti? 180 00:07:52,844 --> 00:07:54,510 Ne, mi manjka cel kup stvari. 181 00:07:54,510 --> 00:07:55,280 Knjižnice sem slišal. 182 00:07:55,280 --> 00:07:58,480 >> Torej, ki header datoteke Morda bi rad tu dodati? 183 00:07:58,480 --> 00:07:59,205 Ja. 184 00:07:59,205 --> 00:08:01,580 >> OBČINSTVO: Moraš Standard I / O [neslišno] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. Malan: Odlično. 186 00:08:02,663 --> 00:08:06,060 Tako da moram Standard I / O. Za kaj Namen storiti hočem standardne I / O? 187 00:08:06,060 --> 00:08:06,670 Za printf. 188 00:08:06,670 --> 00:08:09,220 Tako vključujejo stdio.h. 189 00:08:09,220 --> 00:08:13,490 In ti tudi predlagala, da bi vključil Knjižnica CS50 zakaj? 190 00:08:13,490 --> 00:08:14,650 Da imajo strune. 191 00:08:14,650 --> 00:08:17,780 Tako da bomo videli, kaj Knjižnica CS50 je počne 192 00:08:17,780 --> 00:08:19,260 ustvariti ta pojem niza. 193 00:08:19,260 --> 00:08:21,930 Ampak za zdaj, si lahko samo mislite nje kot dejanski podatkovni tip. 194 00:08:21,930 --> 00:08:23,596 >> Tako da se zdi, da se malo počistil. 195 00:08:23,596 --> 00:08:27,060 In zdaj bom, da gredo naprej in seveda se naredim niz 0. 196 00:08:27,060 --> 00:08:27,700 Zbrati. 197 00:08:27,700 --> 00:08:28,370 Torej, to je dobro. 198 00:08:28,370 --> 00:08:32,799 Torej ./string0 mi povečate tako da bomo lahko bolj natančno, kaj se dogaja vidim. 199 00:08:32,799 --> 00:08:33,850 Enter. 200 00:08:33,850 --> 00:08:37,789 Z-M-Y-L-vstop. 201 00:08:37,789 --> 00:08:39,440 In smo se natisne imena Zamyla je. 202 00:08:39,440 --> 00:08:40,409 >> Torej, to je zelo dobro. 203 00:08:40,409 --> 00:08:43,220 Torej, zdaj gremo naprej in ponovno zagnati ta program, 204 00:08:43,220 --> 00:08:45,659 in tip ven polno ime Daven je. 205 00:08:45,659 --> 00:08:46,450 Presenečenje, presenečenje. 206 00:08:46,450 --> 00:08:48,021 Enter. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Nismo natisnjena Daven je polno ime pravilno. 209 00:08:51,750 --> 00:08:54,250 Sedaj bi bilo to očitno v Če pogledam nazaj, zaradi česa, 210 00:08:54,250 --> 00:08:57,010 nekako neumen odločitev dizajn? 211 00:08:57,010 --> 00:08:59,590 >> Ja, težko kodirane šest notranjost moje zanko. 212 00:08:59,590 --> 00:09:01,610 Zdaj sem to storil le zato, ker Vedel sem ime Zamyla je 213 00:09:01,610 --> 00:09:02,776 je, da bo šest črk. 214 00:09:02,776 --> 00:09:04,720 Ampak zagotovo to ni splošno rešitev. 215 00:09:04,720 --> 00:09:07,720 Tako se izkaže, bomo lahko dinamično ugotovimo dolžino niza 216 00:09:07,720 --> 00:09:10,440 s klicem funkcijo imenovano strlen. 217 00:09:10,440 --> 00:09:12,840 >> Spet, namerno na kratko imenovan samo 218 00:09:12,840 --> 00:09:14,450 da bi bilo bolj priročno za tipkati. 219 00:09:14,450 --> 00:09:17,170 Ampak to je sinonim pridobivanje dolžino niza. 220 00:09:17,170 --> 00:09:23,190 Jaz grem nazaj v svoj terminal okna in ponovno zaženite prevajalnik. 221 00:09:23,190 --> 00:09:24,170 Ampak to je kričati name. 222 00:09:24,170 --> 00:09:29,130 Implicitno razglasi funkcijo knjižnice strlen s tipom unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Izgubil sem se. 224 00:09:29,780 --> 00:09:30,590 Celoti. 225 00:09:30,590 --> 00:09:32,940 >> Torej, še posebej vaš Oči začnejo glazuro nad 226 00:09:32,940 --> 00:09:36,000 sporočil o napakah, kot je ta, osredotočenost Iskreno na prvih nekaj besed. 227 00:09:36,000 --> 00:09:38,590 Vemo, da je težava v linije 8, kot je prikazano tukaj. 228 00:09:38,590 --> 00:09:40,500 In to je na vrvico 0.c. 229 00:09:40,500 --> 00:09:43,580 Implicitno razglasi Funkcija knjižnica strlen. 230 00:09:43,580 --> 00:09:47,000 Tako, da se na splošno bo biti vzorec sporočil o napakah. 231 00:09:47,000 --> 00:09:49,190 Implicitno razglasi nekaj. 232 00:09:49,190 --> 00:09:53,250 >> Torej, na kratko, kaj se je zdelo, da sem Opravili glede na linijo 8, tukaj. 233 00:09:53,250 --> 00:09:56,880 Kaj bi lahko rešitev še Če še nikoli niste uporabljali strlen sebe? 234 00:09:56,880 --> 00:09:58,907 >> OBČINSTVO: Part drugačne knjižnici? 235 00:09:58,907 --> 00:10:00,740 DAVID J. Malan: Part drugačne knjižnice. 236 00:10:00,740 --> 00:10:02,400 Zato je izjavil, da se tako izrazim. 237 00:10:02,400 --> 00:10:07,510 To je omenjeno v neki datoteki razen stdio.h in CS50.h. 238 00:10:07,510 --> 00:10:09,179 Zdaj, ko je definiran? 239 00:10:09,179 --> 00:10:12,220 Če sem iskren, ali boste morali samo to vedo off vrhu glave, 240 00:10:12,220 --> 00:10:13,640 ali pa vprašaš to in izvedeli. 241 00:10:13,640 --> 00:10:18,150 Ali veste, da sem odprl v CS50 napeljave za terminalski program, ki 242 00:10:18,150 --> 00:10:22,200 je samo velika, različica poln zaslon kaj je na dnu okna gedit je. 243 00:10:22,200 --> 00:10:24,970 >> In izkazalo se je, da obstaja podobno jedrnate ukaz, ki se imenuje 244 00:10:24,970 --> 00:10:29,280 man za navodila, kjer je, če ga boste vnesli v ime funkcije in pritisnite tipko Enter, 245 00:10:29,280 --> 00:10:32,240 boste dobili nazaj precej Skrivnosten dokumentacijo. 246 00:10:32,240 --> 00:10:35,299 To je samo besedilo, ki na splošno Izgleda Nekaj ​​takega. 247 00:10:35,299 --> 00:10:37,090 To je malo veliko na prvi pogled. 248 00:10:37,090 --> 00:10:39,048 Ampak odkrito bom Naj moje oči glazuro več 249 00:10:39,048 --> 00:10:41,930 in se osredotočiti le na delu Skrbi me za trenutek. 250 00:10:41,930 --> 00:10:42,780 >> Ki je to. 251 00:10:42,780 --> 00:10:45,470 Ki izgleda kot strukturno Nekaj ​​sem pozna. 252 00:10:45,470 --> 00:10:48,080 Dejansko stran man, tako rekoč, vam bo povedal, 253 00:10:48,080 --> 00:10:51,590 na kakšen header datoteko funkcijo kot strlen je opredeljen. 254 00:10:51,590 --> 00:10:54,170 Torej, jaz grem zdaj nazaj na gedit. 255 00:10:54,170 --> 00:10:59,070 In jaz grem naprej in dodajte tukaj #include 256 00:10:59,070 --> 00:11:00,480 in shranite datoteko. 257 00:11:00,480 --> 00:11:04,300 >> Grem, da počistite zaslon s Control L Če ste bili sprašujete. 258 00:11:04,300 --> 00:11:08,210 In bom ponovno zagnati znamko string.0, pripravlja tokrat. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Da se je zdelo, da deluje Pusti me naprej in ga ponovite z Davenport. 261 00:11:15,020 --> 00:11:15,860 Enter. 262 00:11:15,860 --> 00:11:17,730 In da je tudi zdelo, da deluje. 263 00:11:17,730 --> 00:11:21,220 >> Tako da lahko naredimo malo bolje kot to, čeprav, lahko začnemo urejene stvari 264 00:11:21,220 --> 00:11:23,257 up samo malo. 265 00:11:23,257 --> 00:11:25,590 In bom dejansko uvesti eno drugo stvar zdaj. 266 00:11:25,590 --> 00:11:28,930 Jaz grem naprej in shraniti ta v drugi datoteki. 267 00:11:28,930 --> 00:11:31,770 In bom poklical ta datoteka string1.c samo 268 00:11:31,770 --> 00:11:34,620 da so v skladu s kodeksom boste lahko našli na spletu. 269 00:11:34,620 --> 00:11:37,050 >> In kaj je osredotočeno na natanko isto kodo. 270 00:11:37,050 --> 00:11:39,000 Izkazalo se je, da sem bila vrsta pridobivanju 271 00:11:39,000 --> 00:11:42,600 samoumevno dejstvo, da moj laptop, in v zameno, CS50 aparata 272 00:11:42,600 --> 00:11:47,450 Ima veliko pomnilnika, veliko RAM, veliko bajtov prostora 273 00:11:47,450 --> 00:11:48,920 v katerem sem lahko shranite strune. 274 00:11:48,920 --> 00:11:53,560 >> Ampak realnost, če sem tipkal dolgo dovolj in dovolj tipkanja, 275 00:11:53,560 --> 00:11:56,170 Jaz bi se v vrsto teorije V več znakov 276 00:11:56,170 --> 00:11:58,830 kot moj računalnik fizično ima spomin za. 277 00:11:58,830 --> 00:11:59,830 In to je problematično. 278 00:11:59,830 --> 00:12:03,050 Podobno kot int lahko le računam tako visoke, v teoriji, 279 00:12:03,050 --> 00:12:06,600 lahko stlačil samo toliko znakov v računalniku RAM ali Random 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> Torej, sem se bolje odzivajo na ta problem, tudi 282 00:12:11,140 --> 00:12:13,660 čeprav bi bilo redko Kotiček za primer, če se tako izrazim. 283 00:12:13,660 --> 00:12:15,670 Ne zgodi se pogosto, bi se lahko zgodilo. 284 00:12:15,670 --> 00:12:18,815 In če se to zgodi in jaz ne predvideti in program za to, 285 00:12:18,815 --> 00:12:20,300 moj program bi lahko naredil kdo ve kaj. 286 00:12:20,300 --> 00:12:22,220 Zamrzne, visi, reboot, karkoli. 287 00:12:22,220 --> 00:12:24,490 Nekaj, kar bi se lahko zgodilo pričakovano. 288 00:12:24,490 --> 00:12:27,120 >> Torej, kaj bom naredil zdaj, odslej res, 289 00:12:27,120 --> 00:12:31,630 je, preden sem jih kdaj slepo uporabiti spremenljivko, kot S, ki 290 00:12:31,630 --> 00:12:36,790 je bil dodeljen vrne vrednost nekatere druge funkcije, kot so getstring, 291 00:12:36,790 --> 00:12:40,200 Bom se prepričajte da je njegova vrednost veljavna. 292 00:12:40,200 --> 00:12:44,280 Zato vem, samo od tega, da se glasi Dokumentacija za getstring CS50 je, 293 00:12:44,280 --> 00:12:49,020 ki v končni fazi vam bomo kazali na, da getstring vrne poseben simbol 294 00:12:49,020 --> 00:12:53,610 imenovane NULL, N-U-L-L v vseh kape, če gre kaj narobe. 295 00:12:53,610 --> 00:12:55,650 >> Tako običajno, da vrne niz. 296 00:12:55,650 --> 00:12:59,700 Sicer pa, če se vrne N-U-L-jaz-- bomo sčasoma videli, kaj to v resnici 297 00:12:59,700 --> 00:13:01,790 pomeni-- to samo sredstvo nekaj slabega zgodilo. 298 00:13:01,790 --> 00:13:05,560 Zdaj to pomeni, podobno kot v nič, Lahko preverite stanje tu v C, 299 00:13:05,560 --> 00:13:08,830 ce ni enaka NULL. 300 00:13:08,830 --> 00:13:11,930 Torej, če ste prej ni videl, To samo pomeni, da ni enako. 301 00:13:11,930 --> 00:13:15,290 >> Torej, to je nasprotje enakih enakih, ki se spomni, 302 00:13:15,290 --> 00:13:18,940 je drugačen od enotnega enaka, kar je naloga. 303 00:13:18,940 --> 00:13:23,030 Torej, če je ni enaka NULL, šele nato naredite 304 00:13:23,030 --> 00:13:25,980 Želim izvedbo teh vrstic kode. 305 00:13:25,980 --> 00:13:28,080 Torej, z drugimi besedami, preden sem se potopite v slepo 306 00:13:28,080 --> 00:13:30,919 in začeti ponavljanjem nad s, in zdravljenje 307 00:13:30,919 --> 00:13:33,710 kot da je zaporedje znaki, da bom najprej preverite, 308 00:13:33,710 --> 00:13:37,900 počakaj malo, je definitivno ne enako te posebne vrednosti, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Ker če je, se lahko zgodijo slabe stvari. 310 00:13:40,030 --> 00:13:43,080 In za zdaj predpostavimo, da slabe stvari dogaja, pomeni, da vaš program zruši, 311 00:13:43,080 --> 00:13:45,070 in ne moreš nujno obnoviti. 312 00:13:45,070 --> 00:13:46,800 Tako odkrito povedano, je videti grši. 313 00:13:46,800 --> 00:13:48,660 to je nekako zmedeno zdaj pogled na. 314 00:13:48,660 --> 00:13:50,780 Toda to bo postalo znano kmalu. 315 00:13:50,780 --> 00:13:52,920 >> Ampak bom predlagala zdaj ena izboljšava. 316 00:13:52,920 --> 00:13:54,660 To je izboljšava pravilnost. 317 00:13:54,660 --> 00:13:58,800 Moj program je zdaj bolj pravilno, saj v redkih primerih, da ni dovolj pomnilnika 318 00:13:58,800 --> 00:14:01,180 obstaja, bom zmogel, in bom naredil ničesar. 319 00:14:01,180 --> 00:14:02,680 Jaz vsaj ne bo crash. 320 00:14:02,680 --> 00:14:05,000 >> Ampak naredimo končno različico tukaj. 321 00:14:05,000 --> 00:14:07,690 In datoteko z imenom string2.c. 322 00:14:07,690 --> 00:14:10,190 Bom prilepiti da Isto kodo za trenutek, 323 00:14:10,190 --> 00:14:14,210 in bom izpostaviti to linija, 11, tu, le za trenutek. 324 00:14:14,210 --> 00:14:18,179 Zdaj je realnost pametnih prevajalniki kot da bi Jek popraviti to za nas 325 00:14:18,179 --> 00:14:19,970 zakulisju ne da bi mi kdaj vedel. 326 00:14:19,970 --> 00:14:24,670 Ampak kaj je razmišljati o tem bistveno kot problematično zasnovo. 327 00:14:24,670 --> 00:14:29,010 >> Ta vrstica kode je, seveda, rekoč inicializirati neko spremenljivko i na 0. 328 00:14:29,010 --> 00:14:30,260 To je precej enostavna. 329 00:14:30,260 --> 00:14:34,691 In kaj je spet to Izjava, tu i ++, delaš? 330 00:14:34,691 --> 00:14:37,066 Mi smo jo videli prej, vendar smo ni res govoriti o tem. 331 00:14:37,066 --> 00:14:37,900 >> OBČINSTVO: Povečevanje i. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. Malan: Povečevanje i. 333 00:14:39,191 --> 00:14:41,890 Torej, na vsaki ponovitvi skozi ta zanka, vsak cikel, 334 00:14:41,890 --> 00:14:43,570 ste povečevanje i po enega. 335 00:14:43,570 --> 00:14:45,740 Tako da postane večji in večji, in Večji dokler zanka konča. 336 00:14:45,740 --> 00:14:46,810 Kako se odpove? 337 00:14:46,810 --> 00:14:49,430 No pa je to middle pogoj, ki smo ga uporabili prej. 338 00:14:49,430 --> 00:14:52,500 Videli ste, in walkthroughs v P nizu. 339 00:14:52,500 --> 00:14:53,880 >> Toda kaj je to pravi? 340 00:14:53,880 --> 00:14:58,352 Naredite naslednje zanko, tako Dokler i manj kot kaj? 341 00:14:58,352 --> 00:14:59,810 PUBLIKA: dolžina niza. 342 00:14:59,810 --> 00:15:01,518 DAVID J. Malan: dolžina niza. 343 00:15:01,518 --> 00:15:04,300 Torej, to pomeni, zelo lepo za angleščino v tem smislu. 344 00:15:04,300 --> 00:15:08,810 Zdaj problem je, da vsakič, ko sem Ponovil skozi to zanko v teoriji, 345 00:15:08,810 --> 00:15:10,000 Jaz postavljam to vprašanje. 346 00:15:10,000 --> 00:15:12,250 Je i manjša od dolžine niza S? 347 00:15:12,250 --> 00:15:14,500 Je i manjša od dolžine niza S? 348 00:15:14,500 --> 00:15:18,380 >> Zdaj se i spreminja na vsaki ponovitvi? 349 00:15:18,380 --> 00:15:18,880 To je. 350 00:15:18,880 --> 00:15:19,629 Zaradi ++. 351 00:15:19,629 --> 00:15:21,700 Torej vsaka ponovitev i je vse večji. 352 00:15:21,700 --> 00:15:25,411 Vendar je s večji pridobivanje ali manjši ali spreminjanje sploh? 353 00:15:25,411 --> 00:15:25,910 Število 354 00:15:25,910 --> 00:15:30,240 Tako v smislu oblikovanja, enega od osi ob kateri smo poskušali oceniti kodo 355 00:15:30,240 --> 00:15:32,610 v razredu, to čuti malo butast. 356 00:15:32,610 --> 00:15:34,690 >> Tako kot ste dobesedno, na vsaki ponovitvi 357 00:15:34,690 --> 00:15:37,110 te zanke prosi spet isto prekleto vprašanje, 358 00:15:37,110 --> 00:15:40,770 in še enkrat in še enkrat, in dobesedno da se ne bo nikoli spremenilo. 359 00:15:40,770 --> 00:15:44,220 Vsaj, če jaz ne dotika s in poskuša spremeniti vsebino s. 360 00:15:44,220 --> 00:15:46,610 Tako da sem lahko naredil malo bolje kot to. 361 00:15:46,610 --> 00:15:49,530 >> In kaj bom storiti, je ne razglasi le eno spremenljivko i, 362 00:15:49,530 --> 00:15:53,330 ampak druga spremenljivka bom samovoljno, ampak običajno, pravijo n. 363 00:15:53,330 --> 00:15:55,940 Določi n enak dolžina niz s. 364 00:15:55,940 --> 00:15:59,090 In potem sem, grem na narediti pameten malo optimizacije, tako 365 00:15:59,090 --> 00:16:03,460 govoriti, da ob koncu dneva ni več pravilna ali nič manj pravilna 366 00:16:03,460 --> 00:16:04,260 kot prej. 367 00:16:04,260 --> 00:16:05,500 Vendar je bolje, dizajn. 368 00:16:05,500 --> 00:16:09,480 V dejstvu, da sem s pomočjo manj časa, manj CPU ciklov, tako 369 00:16:09,480 --> 00:16:14,040 rekoč, da odgovori enako Vprašanje, vendar le enkrat. 370 00:16:14,040 --> 00:16:17,870 >> Kakršna koli vprašanja o tem generalnega Načelo izboljšuje, 371 00:16:17,870 --> 00:16:21,294 pravijo, učinkovitost programa je? 372 00:16:21,294 --> 00:16:21,991 Ja? 373 00:16:21,991 --> 00:16:23,699 OBČINSTVO: Zakaj kajne uporabite [neslišno]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. Malan: Dobro vprašanje. 376 00:16:27,010 --> 00:16:30,690 Torej, zakaj smo se ++ na koncu i namesto začetek i? 377 00:16:30,690 --> 00:16:33,070 V tem primeru ima no funkcionalni učinek. 378 00:16:33,070 --> 00:16:36,670 In na splošno, sem se nagibajo k uporabite operator Postfix 379 00:16:36,670 --> 00:16:41,750 tako, da je malo bolj jasno, kot , ko se operacija dogaja. 380 00:16:41,750 --> 00:16:46,670 >> Za tiste, ki ne poznajo, obstaja še ena Izjave, s katerim lahko naredite ++ i. 381 00:16:46,670 --> 00:16:48,747 To so funkcionalno ekvivalent v tem primeru 382 00:16:48,747 --> 00:16:51,080 zato, ker ni nič drugega okoli tega stopnjevanja. 383 00:16:51,080 --> 00:16:54,435 Vendar lahko prišli do primeri in vrstic kode 384 00:16:54,435 --> 00:16:55,810 , v katerem da naredi razliko. 385 00:16:55,810 --> 00:16:57,810 Tako na splošno, ne bomo celo govoriti o tem. 386 00:16:57,810 --> 00:17:00,690 Ker odkrito povedano, da je vaše koda seksi, in nekako Pomodar, 387 00:17:00,690 --> 00:17:01,776 in manj znakov. 388 00:17:01,776 --> 00:17:04,859 Ampak realnost je, da je veliko težje, Mislim, da tudi mi zaviti svoj um 389 00:17:04,859 --> 00:17:07,319 okoli njega včasih, Vrstni red operacij. 390 00:17:07,319 --> 00:17:09,750 Tako kot prahi, če Res mi ni všeč, 391 00:17:09,750 --> 00:17:14,650 čeprav to je nekako seksi videti, lahko storite tudi i + = 1, 392 00:17:14,650 --> 00:17:18,880 ki je grši različica Ista ideja za Postfix stopnjevanja. 393 00:17:18,880 --> 00:17:22,250 >> To pravim in vas naj bi se norčevali iz njega, 394 00:17:22,250 --> 00:17:25,140 vendar boste prišli pogledat kodo, kot je nekaj lepega, preden dolgo. 395 00:17:25,140 --> 00:17:27,160 >> [Smeh] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. Malan: Right? 397 00:17:28,410 --> 00:17:29,360 Ja. 398 00:17:29,360 --> 00:17:30,480 Vprašanje sredini. 399 00:17:30,480 --> 00:17:32,146 >> OBČINSTVO: Ali morate povedati, int n? 400 00:17:32,146 --> 00:17:34,020 DAVID J. Malan: Saj Ni treba reči, int n. 401 00:17:34,020 --> 00:17:37,670 Zato, ker smo že povedali int, vam ni treba znova povedati. 402 00:17:37,670 --> 00:17:41,820 Bistvo je, da ima n do biti enak podatkovni tip kot jaz. 403 00:17:41,820 --> 00:17:43,310 Torej, to je samo priročno tukaj. 404 00:17:43,310 --> 00:17:44,058 Ja. 405 00:17:44,058 --> 00:17:47,806 >> OBČINSTVO: Ali lahko greš čez tiskalnega lik s bracket i spet? 406 00:17:47,806 --> 00:17:48,930 DAVID J. Malan: Vsekakor. 407 00:17:48,930 --> 00:17:52,110 Torej% c, odpokličejo od zadnje Tokrat je samo ograda. 408 00:17:52,110 --> 00:17:53,930 To pomeni, dal char tukaj. 409 00:17:53,930 --> 00:17:56,780 Nagibnica n, seveda, samo sredstvo dal prelom vrstice tukaj. 410 00:17:56,780 --> 00:17:59,540 Tako da samo pusti, zdaj, ta kos nove sintakse. 411 00:17:59,540 --> 00:18:03,730 In to je dobesedno rekel, grab Niz se imenuje i in pojdi po njegovi 412 00:18:03,730 --> 00:18:06,050 i'th značaj, tako rekoč. 413 00:18:06,050 --> 00:18:10,590 >> In sem kar naprej govorijo i'th značaja ker je na vsaki ponovitvi te zanke 414 00:18:10,590 --> 00:18:14,540 to je, kot da smo se tiskanje , prvič je nosilec 0, 415 00:18:14,540 --> 00:18:15,780 kot bi rekli programer. 416 00:18:15,780 --> 00:18:18,680 Nato s bracket 1, nato pa s nosilec 2, nato 3, nato 4. 417 00:18:18,680 --> 00:18:21,610 Seveda pa je spremenljivka, tako da sem ga izraziti z i. 418 00:18:21,610 --> 00:18:23,900 >> Ključ, čeprav je zavedati, še posebej, če ste ne 419 00:18:23,900 --> 00:18:26,358 je acclimating na tem svetu programiranja, kjer smo vse 420 00:18:26,358 --> 00:18:28,950 Zdi se, da računajo od nič, moram začnemo iz ničle zdaj. 421 00:18:28,950 --> 00:18:35,130 Ker strune, prvi znak, z v Zamyla je za boljše ali slabše 422 00:18:35,130 --> 00:18:40,490 bo živel na lokaciji številko ničelne. 423 00:18:40,490 --> 00:18:48,210 >> Dobro, naj mi prinese nas nazaj k Zamyla 424 00:18:48,210 --> 00:18:50,746 in videti, kaj se v resnici dogaja na pod pokrovom. 425 00:18:50,746 --> 00:18:52,370 Tako da je ta pojem tipa litje. 426 00:18:52,370 --> 00:18:53,800 Morda imate dejansko igral s tem že 427 00:18:53,800 --> 00:18:55,970 morda za hacker izdaja P en niz. 428 00:18:55,970 --> 00:19:00,320 Toda tipa vlivanje le nanaša Sposobnost v C in nekateri drugi jeziki 429 00:19:00,320 --> 00:19:03,170 pretvoriti eno vrsto podatkov za drugo. 430 00:19:03,170 --> 00:19:05,450 >> Zdaj, kako bi lahko v tem vidimo precej preprosteje? 431 00:19:05,450 --> 00:19:08,530 Torej to, odpoklic, je začetek angleške abecede. 432 00:19:08,530 --> 00:19:11,265 In kontekst, se spomni, od tako kot pred tednom dni, je ASCII. 433 00:19:11,265 --> 00:19:13,790 American Standard Code za izmenjavo informacij. 434 00:19:13,790 --> 00:19:17,080 Ki je le zelo dolga pot rekel preslikave iz črk 435 00:19:17,080 --> 00:19:19,370 s številkami, in od številk do črk. 436 00:19:19,370 --> 00:19:22,940 >> Torej prek M tu, dot dot, linije s, odpoklic, 437 00:19:22,940 --> 00:19:25,582 desetiško število 65 na up. 438 00:19:25,582 --> 00:19:27,290 In nisva govorila o tem izrecno, 439 00:19:27,290 --> 00:19:29,850 vendar zagotovo obstaja podobna številke za malimi črkami. 440 00:19:29,850 --> 00:19:30,820 In res, tam so. 441 00:19:30,820 --> 00:19:33,730 Svet sklenil, nekaj let Pred to malo, male črke, 442 00:19:33,730 --> 00:19:35,020 se bo 97. 443 00:19:35,020 --> 00:19:38,010 In malo b se dogaja da je 98, in tako naprej. 444 00:19:38,010 --> 00:19:40,200 >> In za katero koli drugo tipko na tipkovnici, tam je 445 00:19:40,200 --> 00:19:42,190 bo podoben vzorec bitov. 446 00:19:42,190 --> 00:19:44,540 Ali enakovredno desetiško število. 447 00:19:44,540 --> 00:19:47,110 Torej, vprašanje pri roki, torej, kako lahko 448 00:19:47,110 --> 00:19:49,400 dejansko videti pod pokrovom? 449 00:19:49,400 --> 00:19:51,539 Torej bom ponavljal, da gedit. 450 00:19:51,539 --> 00:19:53,330 In namesto da tip to ena od nič, 451 00:19:53,330 --> 00:19:55,330 Jaz grem naprej in pravkar odprla nekaj 452 00:19:55,330 --> 00:19:58,350 Z današnjega kode imenovani ASCII ničelno. 453 00:19:58,350 --> 00:20:01,210 >> In ASCII nič videti takole. 454 00:20:01,210 --> 00:20:02,710 Torej, kaj je zaviti naše misli okoli tega. 455 00:20:02,710 --> 00:20:04,969 Torej, najprej sem komentiral koda, ki je lepo. 456 00:20:04,969 --> 00:20:07,010 Ker je dobesedno mi povedali, kaj naj pričakujem, 457 00:20:07,010 --> 00:20:08,950 prikaz preslikave za velikimi črkami. 458 00:20:08,950 --> 00:20:13,690 Zdaj pa mi ni čisto vedel, kaj sem mislim s tem, tako da je sklepati. 459 00:20:13,690 --> 00:20:16,870 >> V angleščini, morda Nekoliko techie angleščina, 460 00:20:16,870 --> 00:20:20,660 kaj linija 18 se zdi da se delaš za nas? 461 00:20:20,660 --> 00:20:21,500 Samo linijo 18. 462 00:20:21,500 --> 00:20:22,430 Kaj je induciranje? 463 00:20:22,430 --> 00:20:25,192 Kaj se gre, da kick off tukaj? 464 00:20:25,192 --> 00:20:26,100 >> OBČINSTVO: zanka. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. Malan: zanka. 466 00:20:26,630 --> 00:20:28,463 In kolikokrat je da bo ponovitev? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 OBČINSTVO: [interposing GLAS] šestkrat. 469 00:20:33,270 --> 00:20:34,830 DAVID J. Malan: Ne šestkrat. 470 00:20:34,830 --> 00:20:35,840 OBČINSTVO: 26 krat. 471 00:20:35,840 --> 00:20:36,560 DAVID J. Malan: 26 krat. 472 00:20:36,560 --> 00:20:37,060 Ja, oprosti. 473 00:20:37,060 --> 00:20:37,960 26-krat. 474 00:20:37,960 --> 00:20:38,460 Zakaj? 475 00:20:38,460 --> 00:20:41,590 No, to je malo čudno, vendar Sem začel šteto od 65 let. 476 00:20:41,590 --> 00:20:43,300 Kar je čudno, ne pa narobe. 477 00:20:43,300 --> 00:20:44,610 To ni slabo na pravi. 478 00:20:44,610 --> 00:20:46,980 In delam, da je le ker za ta primer, 479 00:20:46,980 --> 00:20:50,455 Sem nekako predvidevanje da je kapital je bil 65. 480 00:20:50,455 --> 00:20:53,330 Zdaj to ni najbolj elegantna način za to, da se vrste trdega kodo 481 00:20:53,330 --> 00:20:56,130 ezoterične vrednote, ki jih nihče ne se vedno pričakuje, da se spomnimo. 482 00:20:56,130 --> 00:21:00,155 >> Toda za zdaj opazil, da sem to počne skozi 65 plus 26. 483 00:21:00,155 --> 00:21:03,030 Ker očitno sploh ne želijo storiti aritmetične v moji glavi. 484 00:21:03,030 --> 00:21:04,440 Torej bom pustil prevajalnik to. 485 00:21:04,440 --> 00:21:08,600 Ampak potem na vsaki zanki, vsaka ponovitev zanke, sem povečevanje i. 486 00:21:08,600 --> 00:21:10,196 >> Tako da zdaj zgleda malo skrivnosten. 487 00:21:10,196 --> 00:21:13,320 Vendar bi morali imeti osnovno zgradbo bloki, s katerimi bi to razumeli. 488 00:21:13,320 --> 00:21:15,510 % C je samo ograda za char. 489 00:21:15,510 --> 00:21:19,010 % I je ograda za notr. 490 00:21:19,010 --> 00:21:23,310 In izkazalo se je, da z uporabo tega novo sintakso, to oklepajih, tako da 491 00:21:23,310 --> 00:21:26,100 rekoč, da je podatkovni tip znotraj oklepajih, 492 00:21:26,100 --> 00:21:32,270 Ne morem prisiliti prevajalnik za zdravljenje i ne je celo število, ampak kot char. 493 00:21:32,270 --> 00:21:35,520 >> S tem mi je pokazal značaj ekvivalent tega števila. 494 00:21:35,520 --> 00:21:37,986 Zdaj sem dol, to kodo je precej enaki. 495 00:21:37,986 --> 00:21:39,860 Želel sem, da bi super eksplicitno dejstvo 496 00:21:39,860 --> 00:21:42,095 da sem začel pri 97, ki je male črke. 497 00:21:42,095 --> 00:21:44,080 Gor preko 26 več pisem. 498 00:21:44,080 --> 00:21:46,970 In sem spet doing--, litje i, tako rekoč. 499 00:21:46,970 --> 00:21:49,160 Ali vrsto casting i, tako rekoč. 500 00:21:49,160 --> 00:21:51,420 >> Od notr do char. 501 00:21:51,420 --> 00:21:55,760 Torej, končni rezultat pa se bo, odkrito povedano, informacije že vemo. 502 00:21:55,760 --> 00:21:59,411 Jaz bom, da bo ascii-0 ne dot-- dot c. 503 00:21:59,411 --> 00:22:02,160 Obvestilo, verjetno je, da napaka, kot sem storil nehote. 504 00:22:02,160 --> 00:22:03,820 Naredite ASCII-0. 505 00:22:03,820 --> 00:22:06,090 Zdaj bom naredil ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Bom povečate, in na žalost se dogaja, da se pomaknete zaslon. 507 00:22:09,050 --> 00:22:15,060 Vendar smo videli celotno tabelo kjer Karte za 97, b zemljevidi do 98, 508 00:22:15,060 --> 00:22:18,931 in če se pomaknete navzgor nadalje Seveda, preslika 65. 509 00:22:18,931 --> 00:22:21,180 Torej je to samo pomeni, da kaj smo se pridiga, 510 00:22:21,180 --> 00:22:25,310 je ta enakost, se v resnici dogaja v realnosti. 511 00:22:25,310 --> 00:22:28,000 Tako hitro spremembo tega. 512 00:22:28,000 --> 00:22:31,220 Dovolite mi, da odprejo ASCII 1.C. 513 00:22:31,220 --> 00:22:38,070 In opazili to pametno, nekako o, pojasnilo o tem. 514 00:22:38,070 --> 00:22:41,770 To je ascii-1.c in Opazili to noro stvar. 515 00:22:41,770 --> 00:22:45,120 >> In to res pride do srca kaj računalniki počnejo. 516 00:22:45,120 --> 00:22:48,150 Čeprav bi mi ljudje ne štejejo v smislu letters-- 517 00:22:48,150 --> 00:22:50,380 Jaz ne začnem razmišljati, vse v redu, potem b, 518 00:22:50,380 --> 00:22:52,590 in uporabite tiste, ki računajo fizične objekte. 519 00:22:52,590 --> 00:22:58,680 Zagotovo lahko rečemo, da želim inicializirati neko spremenljivko z imenom C- 520 00:22:58,680 --> 00:23:03,220 vendar bi jaz to imenoval anything-- zato je c inicializiran kapitalske A. 521 00:23:03,220 --> 00:23:07,560 >> Ker na koncu dneva, je računalnik ne briga, kaj si shranjevanje, 522 00:23:07,560 --> 00:23:10,170 se briga samo, kako želite predstaviti te informacije. 523 00:23:10,170 --> 00:23:13,560 Kako si želite, da računalnik razlagajo, da je vzorec bitov? 524 00:23:13,560 --> 00:23:16,320 Tako da to ni nekaj, kar sem bi na splošno priporočam početje. 525 00:23:16,320 --> 00:23:19,500 To je res samo primer, da sporočilo, da si lahko popolnoma 526 00:23:19,500 --> 00:23:22,049 inicializirati celo do char. 527 00:23:22,049 --> 00:23:24,090 Ker pod pokrov iz char, seveda, 528 00:23:24,090 --> 00:23:26,170 je le število med 0 in 255. 529 00:23:26,170 --> 00:23:28,540 >> Tako da lahko zagotovo ga znotraj notr. 530 00:23:28,540 --> 00:23:30,890 In kaj je to tako kaže, da smo 531 00:23:30,890 --> 00:23:34,040 lahko pretvorite iz ene tipa v drugega, tukaj, 532 00:23:34,040 --> 00:23:36,780 končno tiskanje isto stvar. 533 00:23:36,780 --> 00:23:44,760 In v resnici, bo to popravim online-- je bilo mišljeno, da to povem, spet tukaj. 534 00:23:44,760 --> 00:23:48,610 Dovolite mi, da je to čisto na spletu, in se bomo glej v spletni walkthrough, kot je potrebno, 535 00:23:48,610 --> 00:23:50,280 , kar je bilo predvideno. 536 00:23:50,280 --> 00:23:50,960 >> OK. 537 00:23:50,960 --> 00:23:53,892 Torej, zadnji primer zdaj vključuje A in B, nato pa se bomo 538 00:23:53,892 --> 00:23:54,850 vzeti stvari zarezo. 539 00:23:54,850 --> 00:23:58,330 Torej, z A-ja in B-ih in c je v kapitalizacijo 540 00:23:58,330 --> 00:24:01,560 in enakovrednost Pogodbe, dajva si oglejte ta primer tukaj. 541 00:24:01,560 --> 00:24:02,752 Drug primer kode. 542 00:24:02,752 --> 00:24:04,460 Bomo odprli enega, ki je že naredili, zato smo 543 00:24:04,460 --> 00:24:06,440 nimajo, da ga vnesite vse ven iz nič. 544 00:24:06,440 --> 00:24:09,420 >> In obvestilo v pričakovanju smo z uporabo multiple glavo 545 00:24:09,420 --> 00:24:13,240 datotek, med katerimi je naš novi prijatelj, string.h. 546 00:24:13,240 --> 00:24:15,597 Zdaj pa to izgleda na prvi pogled, malo skrivnosten. 547 00:24:15,597 --> 00:24:18,180 Vendar pa da vidimo, če ne moremo razmišljati skozi kaj se dogaja tukaj. 548 00:24:18,180 --> 00:24:21,150 Najprej sem dobil niz s strani uporabnika, in sem dal to niz v spremenljivko 549 00:24:21,150 --> 00:24:22,286 imenovane e. 550 00:24:22,286 --> 00:24:24,090 Kopirajte paste od prej. 551 00:24:24,090 --> 00:24:27,250 V vrstico 22, sem očitno počne točno to, kar 552 00:24:27,250 --> 00:24:30,760 Jaz sem malo prej, sem ponavljanjem več znakov v s. 553 00:24:30,760 --> 00:24:34,780 >> In novih trikov tukaj uporabljate Dolžina vrvice, minor optimizacija 554 00:24:34,780 --> 00:24:37,930 shranjevanja dolžino niza v N, namesto da bi spet strlen, 555 00:24:37,930 --> 00:24:38,850 in znova in znova. 556 00:24:38,850 --> 00:24:41,120 In samo preverjanje, da je i manj kot n. 557 00:24:41,120 --> 00:24:43,330 Zdaj tu, stvari malo zanimivo. 558 00:24:43,330 --> 00:24:45,980 Ampak to je samo uporaba te iste nove ideje. 559 00:24:45,980 --> 00:24:48,470 Kaj počne v angleškem jeziku s bracket i predstavlja? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> OBČINSTVO: Štetje vsak karakter [neslišno]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. Malan: Štetje vsak znak. 563 00:24:55,926 --> 00:24:58,680 In še bolj na kratko, s bracket i predstavlja, kaj? 564 00:24:58,680 --> 00:25:00,950 Bi rekli. 565 00:25:00,950 --> 00:25:04,084 Ne bi si dal na licu mesta tukaj. 566 00:25:04,084 --> 00:25:06,375 >> OBČINSTVO: No-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. Malan: Torej, če beseda je-- če Niz je Zamyla, ki starts-- 568 00:25:09,500 --> 00:25:12,380 OBČINSTVO: --you ukvarjajo z liki 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 tako. 571 00:25:14,190 --> 00:25:17,940 Square bracket zapis vam omogoča, dostop vsak znak posebej, 572 00:25:17,940 --> 00:25:21,120 tako s bracket 0 se bo Prvi znak v nizu. 573 00:25:21,120 --> 00:25:24,110 je nosilec 1 se bo drugi, in tako naprej. 574 00:25:24,110 --> 00:25:28,050 Torej vprašanje, vas prosim, Tu, v tem stanju je kaj? 575 00:25:28,050 --> 00:25:33,984 Je i'th lik i je višja ali enako v male? 576 00:25:33,984 --> 00:25:36,400 In kaj to pomeni, tukaj, z dvojnimi ampersands? 577 00:25:36,400 --> 00:25:36,800 PUBLIKA (SKUPAJ): In. 578 00:25:36,800 --> 00:25:37,210 DAVID J. Malan: In. 579 00:25:37,210 --> 00:25:38,418 To je samo enakovredna to. 580 00:25:38,418 --> 00:25:42,310 In ni ključna beseda v C, morate uporaba, zoprno, ampersand ampersand. 581 00:25:42,310 --> 00:25:47,520 In to, nasprotno, se sprašuješ e je i'th značaja manjša ali enaka 582 00:25:47,520 --> 00:25:49,030 v male črke z? 583 00:25:49,030 --> 00:25:52,440 In spet, tu je, če razumevanje osnovno 584 00:25:52,440 --> 00:25:54,550 Izvajanje Računalnik ima smisel. 585 00:25:54,550 --> 00:25:57,330 Opazimo, da, čeprav imam dot dot dot tam, 586 00:25:57,330 --> 00:26:04,410 Izgleda skozi vz z malimi črkami se vse sosednje vrednosti do od 97 gor. 587 00:26:04,410 --> 00:26:07,820 >> In enako za velikimi črkami se začne na 65 let. 588 00:26:07,820 --> 00:26:10,410 Torej, hrana za s seboj, potem pa, je, da je v angleščini, 589 00:26:10,410 --> 00:26:12,760 Kako bi opisali kaj linija 24 počne? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Ja? 592 00:26:16,728 --> 00:26:21,575 >> OBČINSTVO: 24. to je preverjam ali je vsak znak malimi črkami. 593 00:26:21,575 --> 00:26:24,700 DAVID J. Malan: To je preverjanje, ali vsak lik je malo črko. 594 00:26:24,700 --> 00:26:28,590 Torej, še bolj na kratko, je i'th lik i malimi črkami? 595 00:26:28,590 --> 00:26:30,690 To je vse, kar smo izražanje tukaj logično, 596 00:26:30,690 --> 00:26:33,750 malo cryptically, vendar v končni fazi precej preprosteje. 597 00:26:33,750 --> 00:26:36,480 Je S je i'th znakov malimi črkami? 598 00:26:36,480 --> 00:26:40,130 >> Če je temu tako, in tu je, če se stvari malo um upogibanje 599 00:26:40,130 --> 00:26:44,760 le za trenutek, če je odgovor pritrdilen, pojdite naprej in izpisal znak. 600 00:26:44,760 --> 00:26:47,360 Torej je to samo ograda, ampak kaj karakter? 601 00:26:47,360 --> 00:26:53,710 Zakaj počnem e nosilec i minus ta izraz tukaj? 602 00:26:53,710 --> 00:26:55,110 >> No opazili vzorec tukaj. 603 00:26:55,110 --> 00:26:57,380 Dejanske številke ne zadeva toliko. 604 00:26:57,380 --> 00:27:02,700 Ampak obvestilo, da je 97 kako daleč stran od 65 let? 605 00:27:02,700 --> 00:27:03,560 >> OBČINSTVO: 32. 606 00:27:03,560 --> 00:27:04,480 >> DAVID J. Malan: 32. 607 00:27:04,480 --> 00:27:06,890 Kako daleč je 98 od 66? 608 00:27:06,890 --> 00:27:07,740 >> OBČINSTVO: 32. 609 00:27:07,740 --> 00:27:09,890 >> DAVID J. Malan: Mali c od velikih C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Torej je 32 hmelja od eno črko za drugo. 612 00:27:14,550 --> 00:27:17,790 Tako odkrito I, lahko poenostaviti, da je to to. 613 00:27:17,790 --> 00:27:20,400 Ampak potem sem nekako težko kodiranje Ta nizka raven razumevanja 614 00:27:20,400 --> 00:27:21,740 da noben bralec nikoli boš razumel. 615 00:27:21,740 --> 00:27:25,080 Torej bom to posploševati, kot sem vem, da male črke so večje. 616 00:27:25,080 --> 00:27:28,400 Vem, da so velike črke so manjše vrednosti, ironično. 617 00:27:28,400 --> 00:27:33,216 >> Toda to je dejansko enaka rekoč odštejemo 32 iz ih nosilca i. 618 00:27:33,216 --> 00:27:35,430 Torej v okviru teh pisma, če pisma 619 00:27:35,430 --> 00:27:38,950 zgodi, da bo, male črke in sem odštejemo 32, 620 00:27:38,950 --> 00:27:43,442 kakšen učinek ima to, matematično, na male črke? 621 00:27:43,442 --> 00:27:44,400 OBČINSTVO: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 DAVID J. Malan: ga izkorišča. 623 00:27:45,691 --> 00:27:48,440 In res, zato naše Program se imenuje izkoristiti nič. 624 00:27:48,440 --> 00:27:51,590 Ta program, bodisi izkorišča pismo, 625 00:27:51,590 --> 00:27:54,580 Po preverjanju, če je res malo črko. 626 00:27:54,580 --> 00:27:59,810 V nasprotnem primeru, v skladu 30., kaj naj storim, če to ni malo črko, da sem 627 00:27:59,810 --> 00:28:02,852 gledaš na posebno ponovitev v zanki. 628 00:28:02,852 --> 00:28:03,890 Samo ga natisnite. 629 00:28:03,890 --> 00:28:07,010 >> Torej se ne spreminjajo stvari da sploh ni male črke. 630 00:28:07,010 --> 00:28:10,790 Omeji si malo po malo z. 631 00:28:10,790 --> 00:28:12,730 Zdaj je to precej skrivnostne. 632 00:28:12,730 --> 00:28:15,230 Toda na koncu dneva, to je, kako bomo, nekoč, 633 00:28:15,230 --> 00:28:16,460 so morale stvari. 634 00:28:16,460 --> 00:28:19,780 Če bi namesto open izkoristiti eno, oh hvala bogu. 635 00:28:19,780 --> 00:28:22,320 Tam je funkcija poklicani, da zgornji, da lahko 636 00:28:22,320 --> 00:28:25,410 storiti vse, kar smo pravkar storil na precej nizki ravni. 637 00:28:25,410 --> 00:28:28,752 >> Zdaj pa k zgornji Zanimivo ker je prijavljena v datoteki, 638 00:28:28,752 --> 00:28:31,210 in bi vedeli samo to s preverjanjem dokumentacije, 639 00:28:31,210 --> 00:28:35,730 ali pa je povedal, recimo, v razredu, kjer obstaja, v datoteki imenovani ctype.h. 640 00:28:35,730 --> 00:28:37,630 Tako da je to še ena nova prijateljica naših. 641 00:28:37,630 --> 00:28:40,750 In zgornji počne točno kar pove že ime. 642 00:28:40,750 --> 00:28:44,860 >> Lahko potujejo v, kot argument, med Te oklepaje, nekaj znakov. 643 00:28:44,860 --> 00:28:48,390 Grem mimo v i'th značaja o S pomočjo naše fancy nov zapis 644 00:28:48,390 --> 00:28:49,870 vključuje oklepajev. 645 00:28:49,870 --> 00:28:53,391 In si ugibati, kaj je povratna Vrednost za zgornji očitno dogaja 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 Črka. 649 00:28:57,770 --> 00:28:58,620 Črka. 650 00:28:58,620 --> 00:29:02,330 >> Torej, če sem mimo z malimi črkami a, upajmo, z opredelitvijo do zgornjega dela, 651 00:29:02,330 --> 00:29:05,600 da se bo vrnil velike črke A. V nasprotnem primeru, 652 00:29:05,600 --> 00:29:08,590 če to ni malo črko v prvo mesto, sem ga natisnite. 653 00:29:08,590 --> 00:29:10,800 In res, obvestilo drugi prijatelj. 654 00:29:10,800 --> 00:29:13,840 Ne samo, da zgornji obstaja, vendar pa je nižja, ki 655 00:29:13,840 --> 00:29:16,200 dejansko odgovarja na to vprašanje zame. 656 00:29:16,200 --> 00:29:19,730 >> Kdor zdaj napisal te stvari, 10s let nazaj, veš kaj? 657 00:29:19,730 --> 00:29:23,840 Izvajajo na zgornji in spustite s pomočjo kode, kot je ta. 658 00:29:23,840 --> 00:29:27,270 Ampak spet, v skladu z ta ideja abstrahiranja stran, 659 00:29:27,270 --> 00:29:29,190 nekako, nižja stopnja Podrobnosti o izvajanju. 660 00:29:29,190 --> 00:29:32,600 In stoji na ramenih ljudi ki so prišli pred nami, z uporabo funkcije 661 00:29:32,600 --> 00:29:36,300 kot so na zgornji in spodnji, ki Dovolj čudovito so lepo 662 00:29:36,300 --> 00:29:40,190 imenovan za povedati, kaj počnejo, je čudovito paradigma, da sprejme. 663 00:29:40,190 --> 00:29:44,040 >> Zdaj pa se je izkazalo, da če sem prebral stran man za, recimo, da se zgornja, 664 00:29:44,040 --> 00:29:45,010 Naučim nekaj drugega. 665 00:29:45,010 --> 00:29:46,890 Torej človek toUpper. 666 00:29:46,890 --> 00:29:48,050 To je malo veliko. 667 00:29:48,050 --> 00:29:51,110 Ampak obvestilo, tukaj je, da je omenjena header datoteko, ki naj bi uporabil. 668 00:29:51,110 --> 00:29:54,460 Kot sedmih, ker ta je zavajajoč, funkcija 669 00:29:54,460 --> 00:29:59,070 uporablja ints namesto znakov zaradi preverjanje napak. 670 00:29:59,070 --> 00:30:01,260 Vendar bomo morda prišli nazaj, da v prihodnosti. 671 00:30:01,260 --> 00:30:05,910 >> Ampak opazila sem, da se zgornji spreobrnjence črka c za velike črke, če je to mogoče. 672 00:30:05,910 --> 00:30:07,674 Torej, to je precej preprosta. 673 00:30:07,674 --> 00:30:09,340 In zdaj bodimo malo bolj specifični. 674 00:30:09,340 --> 00:30:12,750 Oglejmo si del man page pod vrne vrednost. 675 00:30:12,750 --> 00:30:15,420 Vrnjeno vrednost je, da pretvorjene pisma. 676 00:30:15,420 --> 00:30:18,690 Ali c, če pretvorba ni bilo mogoče, 677 00:30:18,690 --> 00:30:20,250 kjer je c prvotna vhod. 678 00:30:20,250 --> 00:30:24,140 Ki poznam od tukaj, od argument, da bi zgornji del. 679 00:30:24,140 --> 00:30:25,780 >> Torej, kaj je takeaway to? 680 00:30:25,780 --> 00:30:28,060 Vrnjeno vrednost je, da pretvorjene pisma, 681 00:30:28,060 --> 00:30:32,110 ali c, originalno pismo, če pretvorba ni bilo mogoče. 682 00:30:32,110 --> 00:30:36,460 Kaj izboljšanje morem zato da v oblikovanje moja koda je? 683 00:30:36,460 --> 00:30:37,146 Ja? 684 00:30:37,146 --> 00:30:38,810 >> OBČINSTVO: Lahko odstranite drugje. 685 00:30:38,810 --> 00:30:40,810 DAVID J. Malan: Ne morem odstranite izjavo drugega, 686 00:30:40,810 --> 00:30:42,510 in ne samo izjavo drugega. 687 00:30:42,510 --> 00:30:44,150 >> OBČINSTVO: lahko odstranite [neslišno]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. Malan: Ne morem odstraniti celotno vilice 689 00:30:46,310 --> 00:30:48,209 v cestnem prometu, če je povsem drugega. 690 00:30:48,209 --> 00:30:50,250 Torej res, naj odpre Končna različica tega, 691 00:30:50,250 --> 00:30:55,540 izkoristi-2 in opazil, kako, če boste, seksi, koda je zdaj dobili, 692 00:30:55,540 --> 00:31:00,040 s tem, da sem zmanjšal iz nekaj sedem ali tako vodi do samo štiri, 693 00:31:00,040 --> 00:31:03,850 funkcionalnost, ki sem nameraval ga preprosto kliče k zgornji, 694 00:31:03,850 --> 00:31:09,410 poteka v ih nosilec I, in tiskanje ven z mesta% c, 695 00:31:09,410 --> 00:31:11,090 da zlasti značaj. 696 00:31:11,090 --> 00:31:14,560 >> Zdaj verjetno, da je hrošč, ali vsaj nevarnost hrošč, 697 00:31:14,560 --> 00:31:15,350 v tem programu. 698 00:31:15,350 --> 00:31:18,200 Torej, samo da pridejo nazaj na zgodnejši takeaway, 699 00:31:18,200 --> 00:31:21,820 kaj naj jaz verjetno tudi ne v ta program, da bi bilo bolj robusten, 700 00:31:21,820 --> 00:31:24,974 tako da ni možnosti, da lahko crash, tudi v redkih primerih? 701 00:31:24,974 --> 00:31:26,390 OBČINSTVO: Prepričajte se, da ni NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. Malan: Prepričajte se, da ni NULL. 703 00:31:28,056 --> 00:31:31,030 Torej res, da bi to super Pravilno, naj naredim nekaj podobnega, 704 00:31:31,030 --> 00:31:35,300 če je ni NULL, potem iti naprej in izvrši 705 00:31:35,300 --> 00:31:38,470 teh vrstic kode, ki Ne morem potem alinea tako, 706 00:31:38,470 --> 00:31:39,870 in potem dal v tesnem opornico. 707 00:31:39,870 --> 00:31:41,550 Tako dobra vezava skupaj dveh idej. 708 00:31:41,550 --> 00:31:42,429 Ja? 709 00:31:42,429 --> 00:31:44,470 OBČINSTVO: Lahko uporabite storiti, medtem ko zanke, namesto tega? 710 00:31:44,470 --> 00:31:47,270 DAVID J. Malan: Bi Delam storila, medtem ko zanke? 711 00:31:47,270 --> 00:31:50,020 OBČINSTVO: --you želite zagotoviti, da ste dejansko [neslišno]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. Malan: Bi uporabljate storijo, ko? 713 00:31:51,728 --> 00:31:52,450 Kratek odgovor, ne. 714 00:31:52,450 --> 00:31:54,700 Ker ste na tem, da uvesti drugo kotno zadevo. 715 00:31:54,700 --> 00:31:56,660 Če niz ničelne dolžine. 716 00:31:56,660 --> 00:31:59,600 Če se na primer, sem udaril Vstopiti, ne da bi kdaj tipkanje Zamyla. 717 00:31:59,600 --> 00:32:02,490 Jaz te bom vrniti dejanski niz, saj bomo na koncu videli, 718 00:32:02,490 --> 00:32:03,780 da nič znakov. 719 00:32:03,780 --> 00:32:05,630 Še vedno je niz, to je samo zelo kratek. 720 00:32:05,630 --> 00:32:07,960 Ampak, če boste uporabili storila, medtem ko, greš na slepo 721 00:32:07,960 --> 00:32:10,050 poskusite narediti z nekaj upoštevati, da ta niz, 722 00:32:10,050 --> 00:32:12,537 in nič ne bo tam. 723 00:32:12,537 --> 00:32:18,607 >> OBČINSTVO: No, če si storiti [neslišno], medtem ko S-- 724 00:32:18,607 --> 00:32:21,190 DAVID J. Malan: Oh vidim, da dobili niz s strani uporabnika. 725 00:32:21,190 --> 00:32:23,525 Torej kratek odgovor, si bi lahko, in da zasleduje 726 00:32:23,525 --> 00:32:26,150 jim dal niz, ki je dovolj kratko, da se prilega v pomnilnik. 727 00:32:26,150 --> 00:32:26,700 Absolutno. 728 00:32:26,700 --> 00:32:27,630 Pravkar sem se odločil, da ne. 729 00:32:27,630 --> 00:32:30,505 Če ne mi niz I hočeš, jaz sem odnehal, sem obupal. 730 00:32:30,505 --> 00:32:33,260 Ampak absolutno, za ta namen, ste lahko popolnoma storiti. 731 00:32:33,260 --> 00:32:37,500 >> Torej header datoteke v knjižnico, da sedaj smo seznanjeni z so ti tukaj. 732 00:32:37,500 --> 00:32:41,550 Standard I / O, CS50.h, string.h, ctype.h, in tam so seveda drugi. 733 00:32:41,550 --> 00:32:44,460 Nekateri izmed vas ste odkrili math knjižnica math.h. 734 00:32:44,460 --> 00:32:48,200 Ampak naj vam predstavim, zdaj, da ta vir, da je osebje CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 in Rob in Gabe zlasti so sestavili. 736 00:32:50,630 --> 00:32:52,630 Da bo kmalu povezal na Spletna stran predmeta je. 737 00:32:52,630 --> 00:32:54,870 To se imenuje CS50 reference. 738 00:32:54,870 --> 00:32:58,230 >> Ki samo da vam hitro okus tega, deluje, kot sledi. 739 00:32:58,230 --> 00:33:00,740 Pusti me, da reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Boste videli na levi strani drugo prepričljivo seznam 741 00:33:02,990 --> 00:33:04,595 funkcij, ki prihajajo z c. 742 00:33:04,595 --> 00:33:07,790 Ampak, če me zanima, v tem trenutku, kaj takega strlen, 743 00:33:07,790 --> 00:33:08,746 Lahko ga vnesite tukaj. 744 00:33:08,746 --> 00:33:10,870 Filtrira določitvi seznama samo tisto, kar me skrbi. 745 00:33:10,870 --> 00:33:11,940 Bom ga kliknite. 746 00:33:11,940 --> 00:33:14,740 In zdaj na levo, boste videli, kaj želimo 747 00:33:14,740 --> 00:33:18,290 je bolj enostavno, human prijazno pojasnilo, kako 748 00:33:18,290 --> 00:33:19,170 Ta funkcija deluje. 749 00:33:19,170 --> 00:33:20,600 >> Vrne dolžino niza. 750 00:33:20,600 --> 00:33:24,060 Tukaj je povzetek, tukaj je, kako si ga uporabljajo v smislu glavi datoteke, 751 00:33:24,060 --> 00:33:27,430 in glede na to, kaj funkcije Izgleda kot v smislu njegovih argumentov. 752 00:33:27,430 --> 00:33:30,250 In potem tukaj, vrne dolžina niza. 753 00:33:30,250 --> 00:33:34,280 Toda za tiste, ki ste bolj udobno, lahko dejansko kliknite bolj udoben, 754 00:33:34,280 --> 00:33:37,070 in vsebina tega stran, zdaj, bo spremenila 755 00:33:37,070 --> 00:33:41,660 biti privzete vrednosti česa dobiš s pomočjo strani man. 756 00:33:41,660 --> 00:33:44,100 >> Z drugimi besedami, CS50 sklic je poenostavitev 757 00:33:44,100 --> 00:33:46,220 iz umetnih strani s strani osebja, za študente. 758 00:33:46,220 --> 00:33:49,320 Zlasti tistih manj udoben in med, tako da boste 759 00:33:49,320 --> 00:33:51,660 ne bi bilo treba poskusiti za zavijanje vaš um okoli, odkrito povedano, 760 00:33:51,660 --> 00:33:55,030 nekateri dokaj Grobni sintakso in dokumentacija kdaj. 761 00:33:55,030 --> 00:33:57,650 >> Tako da se vodijo v mislih V dneh, ki prihajajo. 762 00:33:57,650 --> 00:33:59,560 Torej, tukaj, še enkrat, je Zamyla. 763 00:33:59,560 --> 00:34:03,255 Pojdimo zdaj vprašati, ki je malo bolj človeški dostopna. 764 00:34:03,255 --> 00:34:05,380 Hvala Chang, ki je bil tiskanje več slonov 765 00:34:05,380 --> 00:34:07,090 nonstop v zadnjih nekaj dneh. 766 00:34:07,090 --> 00:34:09,730 Imamo priložnost, da vsaj eden izmed njih proč. 767 00:34:09,730 --> 00:34:13,239 Če bi lahko dobili samo enega prostovoljca da pridejo gor, da pripravi na zaslonu. 768 00:34:13,239 --> 00:34:14,530 Kaj pa tukaj? 769 00:34:14,530 --> 00:34:15,340 >> Pridi gor. 770 00:34:15,340 --> 00:34:16,720 Kako ti je 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 V redu. 774 00:34:18,259 --> 00:34:19,388 Alex, pridi gor. 775 00:34:19,388 --> 00:34:21,679 Mi smo na tem, da vidim vaš rokopisa na zaslonu tukaj. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 V redu, lepo da sva se spoznala. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Lepo vas veseli. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. Malan: Dobro. 780 00:34:27,512 --> 00:34:28,969 Torej, super preprosta vaja. 781 00:34:28,969 --> 00:34:31,440 Bar ni visoka, da dobili slona danes. 782 00:34:31,440 --> 00:34:33,439 Igrate vlogo getstring. 783 00:34:33,439 --> 00:34:35,980 In jaz ti bom samo povedal, niz, ki ste gotten. 784 00:34:35,980 --> 00:34:38,080 In domnevam, da vas, getstring, so bili imenovani. 785 00:34:38,080 --> 00:34:42,480 In človek, kot sem jaz, je vnesli v Zamyla, Ž-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Samo pojdi naprej in pisati Zamyla na zaslon, kot da ste jo gotten 787 00:34:45,650 --> 00:34:47,250 in je shranjena nekje v pomnilniku. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Zapusti prostor za tisto, kar bo več drugi words-- da je OK, nadaljuj. 790 00:34:55,570 --> 00:34:59,620 >> [Smeh] 791 00:34:59,620 --> 00:35:00,800 >> Torej Zamyla, odlično. 792 00:35:00,800 --> 00:35:04,880 Sedaj predpostavimo, da vas, getstring, se je spet klicala. 793 00:35:04,880 --> 00:35:09,350 In zato sem vam nudijo na tipkovnica, z drugim imenom, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 V redu. 796 00:35:18,060 --> 00:35:22,380 In zdaj naslednjič getstring je poklical, sem tip v nekaj podobnega Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Ste res ob srčni bralno-pisalnega pomnilnika. 798 00:35:27,560 --> 00:35:29,631 Ki pripravlja vse povsem naključno. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [Smeh] 801 00:35:31,104 --> 00:35:32,520 ALEX: Žal mi je moj rokopis je slabo. 802 00:35:32,520 --> 00:35:33,770 DAVID J. Malan: No, to je v redu. 803 00:35:33,770 --> 00:35:40,480 In kako o Robu, R-O-B. OK. 804 00:35:40,480 --> 00:35:41,020 Dobro. 805 00:35:41,020 --> 00:35:43,853 Zato ti niso predvideli bi nekako postaviti stvari na ta način. 806 00:35:43,853 --> 00:35:45,020 Vendar pa lahko to delo. 807 00:35:45,020 --> 00:35:48,810 Torej, kako si šel okoli o od teh znakov, v spomin? 808 00:35:48,810 --> 00:35:51,310 Z drugimi besedami, če pomislimo to pravokotne črn zaslon 809 00:35:51,310 --> 00:35:53,550 , kot da predstavlja računalnika RAM ali spomin. 810 00:35:53,550 --> 00:35:55,850 >> In opozarjajo, da RAM je samo Cel kup bajtov, 811 00:35:55,850 --> 00:35:57,480 in bajti cel kup bitov. 812 00:35:57,480 --> 00:35:59,350 In bit nekako izvajajo, v glavnem 813 00:35:59,350 --> 00:36:01,119 z neko obliko električne energije v strojni opremi. 814 00:36:01,119 --> 00:36:03,160 Torej, to je neke vrste plastenje smo se pogovarjali o 815 00:36:03,160 --> 00:36:04,510 in zdaj lahko jemljemo za samoumevno. 816 00:36:04,510 --> 00:36:07,020 Kako ste se lotili odločanju, kje pisati 817 00:36:07,020 --> 00:36:11,634 Rob proti Gabe versus Belinda primerjavi Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Pravkar sem to storil v odredi, da si mi povedal. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. Malan: In to je res. 820 00:36:15,650 --> 00:36:20,100 Toda kaj urejati, kjer ste postavili Ime Belinda in ime Gabe je? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Nič? 822 00:36:20,764 --> 00:36:22,930 DAVID J. Malan: [smeh] Tako, da deluje, da je v redu. 823 00:36:22,930 --> 00:36:25,290 Torej računalniki so malo bolj urejeno kot to. 824 00:36:25,290 --> 00:36:29,000 In tako, ko smo implement-- tam ostanejo za samo moment--, ko smo dejansko 825 00:36:29,000 --> 00:36:31,470 izvesti nekaj podobnega getstring v računalniku, 826 00:36:31,470 --> 00:36:34,480 Zamyla se lahko določeno precej kot si ti na zaslonu, tam. 827 00:36:34,480 --> 00:36:36,660 >> In tisto, kar je ključnega pomena za obvestilo tu, kaj Alex storil, 828 00:36:36,660 --> 00:36:40,260 je, da je neke vrste razmejitev Med vsako od teh besed, kajne? 829 00:36:40,260 --> 00:36:46,580 Nisi napisal Z-M-Y-L-A-B-E-L-I-N-D-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 z drugimi besedami, obstaja nekakšna o razmejitvi, ki se zdi, da je, 831 00:36:49,740 --> 00:36:52,370 nekako, naključno razmik med temi različnimi besedami. 832 00:36:52,370 --> 00:36:54,120 Ampak to je dobro, ker smo ljudje lahko zdaj 833 00:36:54,120 --> 00:36:56,470 predstavljati, da so ti štiri strune. 834 00:36:56,470 --> 00:36:59,540 To ni samo ena sekvenca lotov znakov. 835 00:36:59,540 --> 00:37:04,190 Torej računalnik, nato pa, medtem, lahko sprejme niz kot Zamyla, 836 00:37:04,190 --> 00:37:07,220 dal vsak od teh črk notranjost bajt pomnilnika. 837 00:37:07,220 --> 00:37:10,400 Vendar je to število veliko večje, Seveda, kot šestih znakov. 838 00:37:10,400 --> 00:37:11,690 >> Obstaja cel kup RAM. 839 00:37:11,690 --> 00:37:15,330 In tako odslej to grid zabojev se dogaja 840 00:37:15,330 --> 00:37:17,560 za zastopanje, kar Alex samo naredil tukaj na zaslonu. 841 00:37:17,560 --> 00:37:20,937 In zdaj, Alex, vam lahko tudi ponudimo modra ali oranžna slon iz Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: bom modrega slona. 843 00:37:22,270 --> 00:37:23,120 DAVID J. Malan: modra slon. 844 00:37:23,120 --> 00:37:25,580 Torej velik aplavz, če bi lahko, za Alex tukaj. 845 00:37:25,580 --> 00:37:26,100 >> [APLAVZ] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Hvala. 847 00:37:26,766 --> 00:37:28,820 DAVID J. Malan: Hvala. 848 00:37:28,820 --> 00:37:36,230 Torej takeaway je, da, čeprav vzorec nekako sčasoma spremenila, tu 849 00:37:36,230 --> 00:37:40,430 na krovu, to je bilo Razmejitev med različnimi godala 850 00:37:40,430 --> 00:37:42,610 da je Alex dobil za nas. 851 00:37:42,610 --> 00:37:45,230 Zdaj računalniki, odkrito povedano, bi naredil isto. 852 00:37:45,230 --> 00:37:48,210 Lahko bi nekako Pasti strings kjerkoli v RAM. 853 00:37:48,210 --> 00:37:50,710 Tukaj, tukaj, dol, dol. 854 00:37:50,710 --> 00:37:52,020 >> Lahko bi naredil točno to. 855 00:37:52,020 --> 00:37:54,280 Toda, seveda, da je Verjetno ne najbolje načrtovanje. 856 00:37:54,280 --> 00:37:54,780 Prav? 857 00:37:54,780 --> 00:37:57,340 Če bi spraševali Alex na dobili imena, verjetno je, da bi 858 00:37:57,340 --> 00:38:01,370 dal nekaj več tukaj, morda up tukaj, tukaj, tukaj, na koncu 859 00:38:01,370 --> 00:38:02,211 tukaj. 860 00:38:02,211 --> 00:38:05,460 Toda z malo več prostora, seveda, Lahko bi ležala stvari bolj gladko. 861 00:38:05,460 --> 00:38:07,350 In res, da je tisto, kar računalnik ne. 862 00:38:07,350 --> 00:38:10,720 >> Ampak catch je, da če naslednji niz dobim 863 00:38:10,720 --> 00:38:14,050 Po Zamyla je nekaj kot Belinda, 864 00:38:14,050 --> 00:38:17,929 predlagam, kjer lahko pišemo črka b v zvezi s tem omrežjem? 865 00:38:17,929 --> 00:38:18,720 Kam bi šel? 866 00:38:18,720 --> 00:38:21,480 Na desni strani a, pod Z, pod a? 867 00:38:21,480 --> 00:38:23,204 Kaj bi vaš prvi instinkt je? 868 00:38:23,204 --> 00:38:24,120 OBČINSTVO: Pod z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. Malan: Torej pod z. 870 00:38:25,100 --> 00:38:26,530 In to je precej enostavno, kajne? 871 00:38:26,530 --> 00:38:29,321 To je nekako urejeno, to je tisto, kar počnemo na tipkovnici, ko smo zadeti nastopiti, 872 00:38:29,321 --> 00:38:31,770 ali email, ko bodo Seznam z oznakami stvari. 873 00:38:31,770 --> 00:38:34,310 Ampak realnost je, da računalniki poskušajo biti bolj učinkoviti, 874 00:38:34,310 --> 00:38:37,170 in strpati gotovo toliko podatkov v RAM, kolikor je to mogoče, 875 00:38:37,170 --> 00:38:38,890 tako da vam ne zapravljajo nobene bajte. 876 00:38:38,890 --> 00:38:41,545 Tako da vam ne zapravljajo koli zaslon nepremičnin. 877 00:38:41,545 --> 00:38:44,170 In problem, čeprav je, da če bi dobesedno dal pismo 878 00:38:44,170 --> 00:38:49,940 b potem, kako bomo vem, kje ime Zamyla se konča 879 00:38:49,940 --> 00:38:51,840 in ime Belinda se začne? 880 00:38:51,840 --> 00:38:55,270 Torej ste se pri ljudeh pravkar predlagala, dobro, pritisnite tipko Enter, v bistvu. 881 00:38:55,270 --> 00:38:56,410 Odloži spodaj. 882 00:38:56,410 --> 00:38:59,750 Ali celo kot je to storil Alex, samo začnite pisati Naslednja ime pod prejšnjim, 883 00:38:59,750 --> 00:39:01,583 in pod to ena, in nato pod tem. 884 00:39:01,583 --> 00:39:02,510 To je vizualno iztočnico. 885 00:39:02,510 --> 00:39:05,960 >> Računalniki imajo še eno vizualno iztočnico, ampak to je malo bolj jedrnat. 886 00:39:05,960 --> 00:39:07,840 To je ta funky znak. 887 00:39:07,840 --> 00:39:11,890 Poševnica nazaj 0, kar je morda spominja n poševnica nazaj, 888 00:39:11,890 --> 00:39:12,640 in tako naprej, zdaj. 889 00:39:12,640 --> 00:39:14,120 Posebne zasilni izhod sekvence. 890 00:39:14,120 --> 00:39:19,120 Poševnica nazaj 0 je način predstavlja osem nič bitov v vrsti. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Tako ti izrazi, ki ni hit številko ničelne na tipkovnici, 893 00:39:26,130 --> 00:39:28,140 ker je v tem, da je znak ASCII. 894 00:39:28,140 --> 00:39:30,990 Izgleda kot število, vendar je pravzaprav decimalno število 895 00:39:30,990 --> 00:39:35,910 da predstavlja krožno pismenka, krožna tipografija. 896 00:39:35,910 --> 00:39:38,410 Medtem, poševnica nazaj nič dobesedno pomeni 897 00:39:38,410 --> 00:39:40,700 dal osem nič bajte tu za mene. 898 00:39:40,700 --> 00:39:42,136 >> Torej je to nekoliko arbitrarna. 899 00:39:42,136 --> 00:39:44,260 Ki smo jih lahko uporabili kakšen vzorec bitov, vendar svet 900 00:39:44,260 --> 00:39:46,610 odločila nekaj let nazaj, da predstavljajo 901 00:39:46,610 --> 00:39:49,710 Konec niza v pomnilniku, samo da cel kup ničel. 902 00:39:49,710 --> 00:39:51,000 Saj lahko zazna, da je. 903 00:39:51,000 --> 00:39:54,790 Zdaj pa to pomeni, da dopis, abeceda, je lahko predstavljen z ničlami. 904 00:39:54,790 --> 00:39:58,480 >> Ampak to je v redu, smo že videli da smo s pomočjo 65 gor v 97 gor. 905 00:39:58,480 --> 00:40:00,290 Nismo prišli nikamor zaprite vse ničle. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Torej Belinda v spomin računalnika se dejansko dogaja, da gredo tukaj. 908 00:40:06,540 --> 00:40:09,764 Sem ga potegnejo v rumeno pravkar da opozarjajo na to. 909 00:40:09,764 --> 00:40:11,680 In obvestilo, tudi to je popolnoma samovoljno. 910 00:40:11,680 --> 00:40:12,680 Sem ga nariše kot omrežje. 911 00:40:12,680 --> 00:40:14,460 Kot, RAM je le nekaj fizični objekt. 912 00:40:14,460 --> 00:40:17,300 To ni nujno, Vrstice in stolpci, per se. 913 00:40:17,300 --> 00:40:20,490 To je pravkar dobil cel kup bajtov izvajati v strojno opremo nekako. 914 00:40:20,490 --> 00:40:22,817 Ampak, če po Belinda I vnesli v imenu Gabe je, 915 00:40:22,817 --> 00:40:25,650 on se dogaja, da na koncu sem v spominu, in če sem tipkal v imenu Daven je, 916 00:40:25,650 --> 00:40:27,316 na primer, on bo končalo tukaj. 917 00:40:27,316 --> 00:40:29,310 In sem lahko še naprej napisati še več imen. 918 00:40:29,310 --> 00:40:32,100 >> Na žalost, če skušam napisati super dolgo ime, 919 00:40:32,100 --> 00:40:33,730 Jaz bi na koncu zmanjkalo pomnilnika. 920 00:40:33,730 --> 00:40:37,810 V tem primeru, je getstring vrača NULL, kot smo rekli. 921 00:40:37,810 --> 00:40:41,720 Toda na srečo, vsaj v tem vizualno tukaj, nismo dobili povsem tako daleč. 922 00:40:41,720 --> 00:40:45,860 >> Kaj je lepo, zdaj je, da ta Osnovna ideja o zdravljenju stvari 923 00:40:45,860 --> 00:40:49,720 kot da je v škatlah, je Predstavnik značilnostjo C 924 00:40:49,720 --> 00:40:52,690 in veliko jezikov, znan kot matrika. 925 00:40:52,690 --> 00:40:55,490 Niz je druga vrsta podatkov. 926 00:40:55,490 --> 00:40:57,380 To je struktura podatkov, če hočete. 927 00:40:57,380 --> 00:41:01,160 Struktura v smislu njega res, vrsta, ki je videti kot škatla, vsaj 928 00:41:01,160 --> 00:41:02,320 v oči vaš um. 929 00:41:02,320 --> 00:41:09,680 Niz se stikata zaporedje enakih podatkovnih tipov, 930 00:41:09,680 --> 00:41:11,330 back to back to back to back. 931 00:41:11,330 --> 00:41:14,720 >> Torej niz, v drugi besede, je niz znakov. 932 00:41:14,720 --> 00:41:16,120 Nabor znakov. 933 00:41:16,120 --> 00:41:19,070 Vendar se izkaže, da lahko imajo nizi grozdov stvari. 934 00:41:19,070 --> 00:41:21,870 V bistvu, lahko postavimo tudi Številke v array. 935 00:41:21,870 --> 00:41:23,920 Torej, v obliki, v kateri bomo začeli 936 00:41:23,920 --> 00:41:26,590 razglasitvi te podatke struktura znana kot niz 937 00:41:26,590 --> 00:41:28,250 se tudi dogaja, da uporabite oglate oklepaje. 938 00:41:28,250 --> 00:41:31,500 Vendar te oklepaje bodo imajo drugačen pomen v tem kontekstu. 939 00:41:31,500 --> 00:41:33,450 >> In kaj je to videti takole. 940 00:41:33,450 --> 00:41:36,780 Recimo, da sem odprl up novo datoteko tukaj. 941 00:41:36,780 --> 00:41:38,535 In rešim to kot ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 In jaz bom to shranim v mapo tukaj. 944 00:41:43,470 --> 00:41:46,130 In zdaj bom, da gredo naprej in začnite tipkati nekaj 945 00:41:46,130 --> 00:41:53,940 kot vključujejo CS50.h, vključujejo stdio.h, int main praznino. 946 00:41:53,940 --> 00:41:57,370 In potem je tu notri, hočem da imajo prvi int imenovano starosti. 947 00:41:57,370 --> 00:42:01,371 >> In bom za uporabo, da bi dobili int od uporabnika za njegovo starost. 948 00:42:01,371 --> 00:42:04,620 Vendar je ta program naj bi se jih uporablja več ljudi, ne glede na kontekst. 949 00:42:04,620 --> 00:42:05,490 Imam linijo ljudi. 950 00:42:05,490 --> 00:42:08,281 Vsi izmed njih so, da tip v svojih starost morda nekaj, ne vem, 951 00:42:08,281 --> 00:42:10,530 tekmovanje ali prireditev da oni prispelo. 952 00:42:10,530 --> 00:42:13,030 Torej, naslednjič, oseba, I Potrebujemo še eno spremenljivko. 953 00:42:13,030 --> 00:42:15,790 >> Ker če sem naredil starost dobi getInt, da je 954 00:42:15,790 --> 00:42:18,500 bo piąi prek ali prepisati starost prejšnjega osebe. 955 00:42:18,500 --> 00:42:19,760 Torej, to ni dobro. 956 00:42:19,760 --> 00:42:21,790 Torej moj prvi instinkt morda, oh, v redu, 957 00:42:21,790 --> 00:42:26,260 če želim, da bi dobili več Ljudske ages-- recimo to age1, 958 00:42:26,260 --> 00:42:31,280 int age2 dobi int, int age3 dobi getInt. 959 00:42:31,280 --> 00:42:35,340 In zdaj bom uporabila nekateri psevdokoda kodo tukaj. 960 00:42:35,340 --> 00:42:37,679 >> Nekaj ​​narediti s temi številkami. 961 00:42:37,679 --> 00:42:40,470 Pustili bomo še en dan, kar delamo tam, ker smo le 962 00:42:40,470 --> 00:42:44,200 skrb za trenutek o age1, age2, age3. 963 00:42:44,200 --> 00:42:46,450 Na žalost, ko sem prevesti ta program 964 00:42:46,450 --> 00:42:51,140 in ga dal pred dejanskim uporabnikom, kar je v bistvu slabo projektiranje 965 00:42:51,140 --> 00:42:53,890 Odločitev Zdi se, da je? 966 00:42:53,890 --> 00:42:54,624 Ja? 967 00:42:54,624 --> 00:42:55,499 OBČINSTVO: [neslišno] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. Malan: Ja, Nisem še poskusil 970 00:42:59,820 --> 00:43:02,028 da ugotovimo, koliko starosti jaz pravzaprav briga? 971 00:43:02,028 --> 00:43:05,380 Če imam manj kot tri ljudi tukaj, in torej manj kot tri starosti, 972 00:43:05,380 --> 00:43:07,260 Jaz sem še vedno slepo pričakujejo tri. 973 00:43:07,260 --> 00:43:08,720 Bog ne daj, štirje ljudje pokažejo. 974 00:43:08,720 --> 00:43:10,990 Moj program ne bo samo še njihovo podporo. 975 00:43:10,990 --> 00:43:13,280 >> In tako je to, dolga zgodba Skratka, ni dobra navada. 976 00:43:13,280 --> 00:43:13,780 Prav? 977 00:43:13,780 --> 00:43:16,530 Bil sem v bistvu kopiranje in prilepite kodo in le poteg 978 00:43:16,530 --> 00:43:17,430 imeni spremenljivk. 979 00:43:17,430 --> 00:43:22,410 In, moj bog, če bi imeli, ne tri starosti, vendar 10 ali 100 ali celo 6500 980 00:43:22,410 --> 00:43:23,820 Študentje, na primer. 981 00:43:23,820 --> 00:43:26,950 To se ne bo posebej Elegantna code, ali trajnostna. 982 00:43:26,950 --> 00:43:29,200 Boste morali Spremenite program vsakič 983 00:43:29,200 --> 00:43:30,760 vaše število ljudi spremembe. 984 00:43:30,760 --> 00:43:35,090 >> Torej, na srečo, v naš dejanski ages.c datoteke za danes, 985 00:43:35,090 --> 00:43:36,970 imamo bolj pametno rešitev. 986 00:43:36,970 --> 00:43:39,800 Najprej bom sposodil konstrukt, ki smo jih uporabili nekajkrat, 987 00:43:39,800 --> 00:43:43,744 To storite tako, medtem ko zanke, da bi dobili število ljudi v sobi. 988 00:43:43,744 --> 00:43:46,910 Jaz bom samo nadlegovanja uporabnika, spet in spet, dokler se on ali ona mi daje 989 00:43:46,910 --> 00:43:49,260 vrednost n, ki je pozitivno celo število. 990 00:43:49,260 --> 00:43:51,590 >> Lahko bi uporabili, zadnja Čas je dobil pozitivno int. 991 00:43:51,590 --> 00:43:53,720 Vendar nimamo, da zares, tako da sem šel naprej 992 00:43:53,720 --> 00:43:55,660 in ponovno izvesti to idejo. 993 00:43:55,660 --> 00:43:58,410 Zdaj tukaj, to je nov trik. 994 00:43:58,410 --> 00:44:02,260 V vrstici 27, kot pripombe V skladu 26. predlaga, 995 00:44:02,260 --> 00:44:05,180 razglasi niz, v katerem za shranjevanje starost vsakogar. 996 00:44:05,180 --> 00:44:09,320 >> Torej, če želite, da bi dobili, ne eno int, ne dve ints, ampak cel kup ints. 997 00:44:09,320 --> 00:44:13,800 Natančneje n celi števili, so n morda so trije, morda 100, morda 1000. 998 00:44:13,800 --> 00:44:17,570 Sintaksa, preprosto, je recimo, kakšen tip podatkov želiš? 999 00:44:17,570 --> 00:44:19,620 Kaj želite poklicati da je kos pomnilnika? 1000 00:44:19,620 --> 00:44:23,530 Kaj želite poklicati mreže da je videti takole slikovno? 1001 00:44:23,530 --> 00:44:27,700 >> In v oklepaju tukaj, praviš kako velik želite matrika biti. 1002 00:44:27,700 --> 00:44:30,450 In prej, ko sem rekel, sintaksa je malo drugačna tukaj 1003 00:44:30,450 --> 00:44:33,614 smo še vedno z oglatimi oklepaji, ampak ko sem razglasitvi niz, 1004 00:44:33,614 --> 00:44:35,530 število notranjost Oglati oklepaji sredstva 1005 00:44:35,530 --> 00:44:37,610 kako velik želite matrika biti. 1006 00:44:37,610 --> 00:44:42,490 >> Nasprotno, ko smo z uporabo s bracket i pred nekaj trenutki, s, niz, 1007 00:44:42,490 --> 00:44:46,820 je dejansko niz znakov, ampak ko ne razglasitvi spremenljivko 1008 00:44:46,820 --> 00:44:49,760 saj s to ključno besedo tukaj, ste preprosto dobili 1009 00:44:49,760 --> 00:44:54,280 poseben indeks, posebno element iz te matrike. 1010 00:44:54,280 --> 00:44:57,090 Ko vemo, da je ostalo o je to enostavno. 1011 00:44:57,090 --> 00:45:00,765 Če nova sem prvič dogaja, da natisnete kaj je starost osebe številko i. 1012 00:45:00,765 --> 00:45:03,890 Kje sem rekel, oseba, številka ena, Oseba številka dve, oseba, številka tri. 1013 00:45:03,890 --> 00:45:06,306 >> In jaz sem samo delaš aritmetike, tako da, kot normalni ljudje, 1014 00:45:06,306 --> 00:45:09,030 računamo iz ene za to Program, in ne od nič. 1015 00:45:09,030 --> 00:45:13,620 Potem sem poklical getint, ampak jaz shranjevanje odgovor v starosti oklepati i. 1016 00:45:13,620 --> 00:45:16,610 Ki je i'th starost v matriki. 1017 00:45:16,610 --> 00:45:21,640 Torej, ker so zadnjič, ko smo bili zdravljenje Te škatle so znakov za ime Zamyla je, 1018 00:45:21,640 --> 00:45:22,490 in drugi. 1019 00:45:22,490 --> 00:45:26,530 Sedaj so te škatle predstavljajo 32 bitov ali štiri bajte 1020 00:45:26,530 --> 00:45:29,510 , v katerem lahko shranite int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Od katerih so vsi, spet so isti tip podatkov. 1022 00:45:31,890 --> 00:45:33,890 >> Sedaj sem naredil nekaj neumno, kot čas teče, samo 1023 00:45:33,890 --> 00:45:35,510 utemeljiti pisanju tega programa. 1024 00:45:35,510 --> 00:45:40,050 In potem sem dol, sem še enkrat ponoviti čez polja rekel leto od sedaj, 1025 00:45:40,050 --> 00:45:43,090 Oseba številka ena volja biti stari nekaj, let. 1026 00:45:43,090 --> 00:45:45,010 In da ugotovimo, da math-- Mislim, to 1027 00:45:45,010 --> 00:45:49,260 ni zelo zapletena arithmetic-- Samo dodam nekaj na njihovo starost. 1028 00:45:49,260 --> 00:45:51,240 Samo dokazati, še enkrat, to. 1029 00:45:51,240 --> 00:45:57,910 >> Tako kot sem lahko indeks v niz, s, tako da lahko indeks I v paleto starosti, 1030 00:45:57,910 --> 00:45:59,950 kot da ni. 1031 00:45:59,950 --> 00:46:03,340 Torej, če je ta, ki nam bo pokazal? 1032 00:46:03,340 --> 00:46:07,070 Tako da bomo videli, na koncu, Nekaj ​​stvari v dneh, da pridejo. 1033 00:46:07,070 --> 00:46:09,510 Ena, ves ta čas, ko pisanje lastnih programov, 1034 00:46:09,510 --> 00:46:11,239 kot Mario, požrešna, kredita. 1035 00:46:11,239 --> 00:46:13,780 Ste bili z vnašanjem imena program in pritisnemo Enter. 1036 00:46:13,780 --> 00:46:15,610 In potem dobili vnos uporabnika. 1037 00:46:15,610 --> 00:46:18,137 >> Z getString, getInt, getLongLong ali podobno. 1038 00:46:18,137 --> 00:46:20,720 Vendar se je izkazalo, ki podpira C nekaj, kar se imenuje ukazni vrstici 1039 00:46:20,720 --> 00:46:25,740 Argumenti, ki nas bo pustil dejansko dobili na besede, ki jih vnesete, 1040 00:46:25,740 --> 00:46:28,570 na utripajočo poziv ko ime vašega programa. 1041 00:46:28,570 --> 00:46:31,430 >> Torej, v dneh, ki prihajajo, vam lahko vnesete nekaj podobnega cesarju, 1042 00:46:31,430 --> 00:46:34,950 ali ./caesar številka 13, potem. 1043 00:46:34,950 --> 00:46:36,070 Bomo videli, kako to deluje. 1044 00:46:36,070 --> 00:46:37,550 Saj res, v problem določiti dva, smo 1045 00:46:37,550 --> 00:46:39,383 dogaja, da vam predstavim da nekaj malega 1046 00:46:39,383 --> 00:46:42,360 spominja Ralphie je izpodbijanje prej kartografije. 1047 00:46:42,360 --> 00:46:43,970 Umetnost kodiranja podatkov. 1048 00:46:43,970 --> 00:46:46,660 Ta, v bistvu, je zelo spominja, kaj Ralphie storil. 1049 00:46:46,660 --> 00:46:51,380 >> To je primer za šifriranje algoritem imenuje ROT13, je R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Ki preprosto pomeni, zavrtite črk v abecedi 13 mestih. 1051 00:46:54,910 --> 00:46:58,309 In če boste to storili, boste videli zdaj kar je morda znano frazo. 1052 00:46:58,309 --> 00:47:01,100 Ampak način, bomo uporabili to, v končni fazi, je bolj na splošno. 1053 00:47:01,100 --> 00:47:04,390 >> V P nastavite dva, v standardni izdaji, boste izvajati nekaj šifre, 1054 00:47:04,390 --> 00:47:06,720 ena se imenuje Cezar, ena imenovana Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Oba sta vrtilna šifre, v tem nekako 1056 00:47:10,090 --> 00:47:11,826 nato eno črko v drugo črko. 1057 00:47:11,826 --> 00:47:12,950 In Cezar je zelo preprosta. 1058 00:47:12,950 --> 00:47:16,220 Dodate eno, dodate 13, ali nekaj številka do 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere počne na na pismu podlago. 1060 00:47:19,570 --> 00:47:22,140 Torej Vigenere, kot boste videli V spec, je bolj varna. 1061 00:47:22,140 --> 00:47:24,973 >> Toda na koncu dneva, kar vas bo izvajanje in P nastavite dva, 1062 00:47:24,973 --> 00:47:29,050 je, da je ključnega pomena, da uporabljate oboje za šifriranje in dešifriranje. 1063 00:47:29,050 --> 00:47:32,160 Sklicujoč se postopek obračanja plain text, nekateri izvirno sporočilo, 1064 00:47:32,160 --> 00:47:34,490 Cypher v besedilu, ki je nekaj šifrirana. 1065 00:47:34,490 --> 00:47:36,220 In ga nato ponovno dešifriranje. 1066 00:47:36,220 --> 00:47:38,119 >> V izdaji hacker, Medtem, boste 1067 00:47:38,119 --> 00:47:40,660 nalogo, da nekaj podobnega v duhu, kjer bomo vam 1068 00:47:40,660 --> 00:47:44,610 Datoteka, iz tipičnega Linux ali Mac ali Unix računalnik pozval Etsy 1069 00:47:44,610 --> 00:47:47,800 geslo, ki vsebuje celotno kup imen in gesel. 1070 00:47:47,800 --> 00:47:50,932 In tisti gesla so vse bila šifrirana, ali zgoščene, 1071 00:47:50,932 --> 00:47:53,140 če se tako izrazim, bolj pravilno kot boste videli v spec. 1072 00:47:53,140 --> 00:47:57,090 >> In bo izdaja hacker izziv ste s čemer vhod, kot je ta, 1073 00:47:57,090 --> 00:47:58,800 in pokanje geslo. 1074 00:47:58,800 --> 00:48:02,590 Da je poskušal ugotoviti, kaj Geslo Človeški je dejansko bilo. 1075 00:48:02,590 --> 00:48:05,570 Ker, seveda, gesla na splošno niso shranjeni v jasni, 1076 00:48:05,570 --> 00:48:08,260 in na splošno gesel bi smelo biti težko uganiti. 1077 00:48:08,260 --> 00:48:09,610 To ni pogosto dogaja. 1078 00:48:09,610 --> 00:48:12,110 >> In tisto, kar sem mislil, da bomo storili, je zaključim z nekaj minut 1079 00:48:12,110 --> 00:48:15,160 pogled na posebno slaba izbira gesel 1080 00:48:15,160 --> 00:48:17,260 iz filma si lahko spomnim zaljubljeno. 1081 00:48:17,260 --> 00:48:18,915 In če ne, bi morali najeti. 1082 00:48:18,915 --> 00:48:20,070 >> [VIDEO PREDVAJANJE] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet Ste fanatik, kaj se dogaja? 1084 00:48:22,320 --> 00:48:24,240 Kaj počneš z mojo hčerko? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Me, da uvede briljanten mlad plastični kirurg, 1086 00:48:28,010 --> 00:48:30,010 Zdravnik Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Največji nosu človek Celotno vesolje in Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> Tvoja visokost. 1089 00:48:36,140 --> 00:48:36,820 >> Nos Obleka za delo? 1090 00:48:36,820 --> 00:48:37,700 Ne razumem. 1091 00:48:37,700 --> 00:48:39,070 Ona je že imela operacijo nosu. 1092 00:48:39,070 --> 00:48:40,800 To je bil njen sladek 16. prisotna. 1093 00:48:40,800 --> 00:48:42,590 >> Ne, to ni tisto, kar misliš. 1094 00:48:42,590 --> 00:48:44,490 To je veliko, veliko slabše. 1095 00:48:44,490 --> 00:48:48,160 Če mi ne dajo Kombinacija za zračni ščit, 1096 00:48:48,160 --> 00:48:52,748 Zdravnik Schlotkin vam bo dal, hči nazaj svojo staro nos. 1097 00:48:52,748 --> 00:48:53,748 - [Gasps] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Kje si dobil to? 1100 00:48:59,652 --> 00:49:00,640 >> V redu. 1101 00:49:00,640 --> 00:49:02,506 Jaz bom povedal, bom povedal. 1102 00:49:02,506 --> 00:49:03,498 >> Ne, očka, ne. 1103 00:49:03,498 --> 00:49:04,490 Ne smeš. 1104 00:49:04,490 --> 00:49:06,090 >> Prav imaš draga. 1105 00:49:06,090 --> 00:49:07,390 Pogrešal bom svoj novi nos. 1106 00:49:07,390 --> 00:49:10,990 Ampak sem jim, da ne bo povedal, kombinacija, ni važno kaj. 1107 00:49:10,990 --> 00:49:12,450 >> -Zelo Dobro. 1108 00:49:12,450 --> 00:49:14,830 Zdravnik Schlotkin, da svoje najhujše. 1109 00:49:14,830 --> 00:49:15,744 >> Moja užitek. 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 Čakaj, čakaj. 1113 00:49:22,780 --> 00:49:24,000 Jaz bom povedal. 1114 00:49:24,000 --> 00:49:25,830 Jaz bom povedal. 1115 00:49:25,830 --> 00:49:28,270 >> Vedel, da bi delovalo. 1116 00:49:28,270 --> 00:49:31,390 V redu, daj mi. 1117 00:49:31,390 --> 00:49:36,220 >> -V Kombinacija je ena. 1118 00:49:36,220 --> 00:49:36,740 >> Ona. 1119 00:49:36,740 --> 00:49:37,473 >> Ona. 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 -Tri. 1124 00:49:40,300 --> 00:49:40,800 -Tri. 1125 00:49:40,800 --> 00:49:41,800 -Tri. 1126 00:49:41,800 --> 00:49:42,300 Štiri. 1127 00:49:42,300 --> 00:49:42,800 Štiri. 1128 00:49:42,800 --> 00:49:44,707 Štiri. 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 Torej kombinacija je ena, dva, tri, štiri, pet. 1133 00:49:53,480 --> 00:49:56,140 To je najbolj neumna kombinacija Kar sem jih kdaj slišal v mojem življenju. 1134 00:49:56,140 --> 00:49:58,640 To je nekako Stvar idiot bi imeli na svoji prtljagi. 1135 00:49:58,640 --> 00:50:00,000 >> Hvala vam, vaša visokost. 1136 00:50:00,000 --> 00:50:01,340 >> [REMOTE CLICKS] 1137 00:50:01,340 --> 00:50:02,450 >> Kaj si naredil? 1138 00:50:02,450 --> 00:50:03,800 >> Jaz izklopljen steno. 1139 00:50:03,800 --> 00:50:05,010 >> Ne, nisi, ti izklopi celoten film. 1140 00:50:05,010 --> 00:50:06,220 >> Jaz, moral je pritisnil napačen gumb. 1141 00:50:06,220 --> 00:50:07,064 >> No, ga nazaj! 1142 00:50:07,064 --> 00:50:07,910 Dal film nazaj! 1143 00:50:07,910 --> 00:50:08,300 >> Da, gospod! 1144 00:50:08,300 --> 00:50:08,799 Da, gospod. 1145 00:50:08,799 --> 00:50:09,660 -Gremo, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Pridi, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Seveda veš, da bom moral račun za to. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 No? 1150 00:50:17,220 --> 00:50:17,802 Je delovalo? 1151 00:50:17,802 --> 00:50:18,510 Kje je kralj? 1152 00:50:18,510 --> 00:50:20,218 >> -Delovalo, Gospod, imajo kombinacijo. 1153 00:50:20,218 --> 00:50:20,740 Izvrstno. 1154 00:50:20,740 --> 00:50:24,810 Zdaj bomo lahko vse do zadnjega diha svežega zraka iz planeta Druidia. 1155 00:50:24,810 --> 00:50:25,890 Kakšna je kombinacija? 1156 00:50:25,890 --> 00:50:28,155 >> Ena, dva, tri, štiri, pet. 1157 00:50:28,155 --> 00:50:29,890 >> Ena, dva, tri, štiri, pet? 1158 00:50:29,890 --> 00:50:30,390 Ja. 1159 00:50:30,390 --> 00:50:31,110 -To Neverjetno. 1160 00:50:31,110 --> 00:50:34,550 Imam enak Kombinacija na moji prtljagi. 1161 00:50:34,550 --> 00:50:37,160 Pripravite Spaceball 1 za takojšnji odhod. 1162 00:50:37,160 --> 00:50:38,160 >> Da, gospod. 1163 00:50:38,160 --> 00:50:40,745 >> In spremenite Kombinacija na moji prtljagi. 1164 00:50:40,745 --> 00:50:41,578 [Zapiranje vrat SOUND] 1165 00:50:41,578 --> 00:50:42,064 [Žvenketajo vrat UDARIL ČELADE] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [END VIDEO PREDVAJANJE] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. Malan: To je za CS50, se vidimo naslednji teden. 1169 00:50:46,700 --> 00:50:49,883 NARRATOR: In zdaj, Deep Misli, ki jih Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> DAVEN Farnham: Kodiranje v C je toliko težje kot nič. 1172 00:50:55,860 --> 00:50:57,320 printf je Scratch laž. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Smeh SOUNDBITE] 1175 00:51:01,430 --> 00:51:02,486