[Predvajanje glasbe] DAVID J. Malan: Dobro. To je CS50, in to je konec 2 tedna. Torej, danes, greva nadaljevati naš pogled kako mi predstavljajo stvari pod hood-- oddaljuje iz številk, kot cela in plavajočo vejico in se osredotoča na strune in navsezadnje bolj zanimive programe. Vendar pa bomo lahko tudi pogled na Nekaj ​​domensko specifičnih problems-- od katerih bo prva lahko vključujejo kriptografije, umetnost kodiranja podatkov, v katerem vidite zgoraj tukaj je slika Radio Orphan Annie Skrivnost dekoder prstan iz minulih dni. 

To je pravzaprav zelo primitivna oblika in otrokom prijazna oblika cryptopgraphy pri čemer ima ta obroč dve disks-- ena znotraj in eno zunaj. In z vrtenjem enega od teh, ki jih lahko v bistvu line up črk kot do Z drugimi črkami kot B prek A. Z drugimi besedami, lahko dobesedno vrti abecedo, kar prihaja s preslikavo iz Črke na dopise, tako da, če ste hotel poslati tajno sporočilo za nekoga, kot Annie, lahko napišete dol vaše sporočilo in nato zavrtite črke, pri čemer, če misliš reči "A," si namesto tega rekli "B" misliš reči "B" ste namesto tega rekli "C" - ali kaj malo bolj pameten kot to-- in potem, na koncu, tako dolgo, kot je Annie ta dekoder ring, je mogoče dešifrirati sporočila. Zdaj se morda spomniš, v dejstvu, da je to je bila uporabljena v zelo znani film, ki predvaja oglas nauseum med božični čas. Poglejmo si oglejte tukaj. Ralphie PARKER: "Naj bo Znano je, da vse v povzetku da je Ralph Parker se imenuje član Little Orphan Annie Secret Krog in pravico za vse časti in koristi z njimi pojavljajo. " 

Ralphie PARKER (pripovedovanje): Podpisana Mali Orphan Annie. Sopodpiše, Pierre Andre! S črnilom. Priznanja in koristi, že pri devetih letih. 

[Predvajanje glasbe] 

[RADIO Zmenkar] Ralphie PARKER: Dajmo. Pojdiva s tem. Jaz ne potrebujem toliko jazz o tihotapcih in pirati. RADIO Napovedovalka: Poslušajte jutri noč sklepnem avanturo of The Black Pirate Ship. Zdaj je čas za Annie Secret Message za vas člane of The Secret Circle. Ne pozabite, otroci samo člani Annie je Secret Circle morejo dekodirati Annie skrivno sporočilo. 

Ne pozabite, Annie je odvisno od vas. Nastavite zatiči za B-2. Tukaj je message-- 12, 11, 2-- Ralphie PARKER (pripovedovanje): I sem v mojem prvem tajnem sestanku. RADIO Napovedovalka: --25, 14, 11, 18, 16-- Ralphie PARKER (pripovedovanje): Oh, Pierre je bil v veliko glasovno nocoj. Jaz lahko povem, da je nocoj Sporočilo je bilo zares pomembno. 

RADIO Napovedovalka: --3, 25. To je sporočilo od Annie sama. Ne pozabite, ne povej nikomur. 

[Zadihana] Ralphie PARKER (pripovedovanje): Devetdeset sekund kasneje, sem v edinem prostoru v Hiša, v kateri fant devet Lahko bi sedel v zasebnost in dekodiranje. Ah. "B." 

[Smeh] 

Ralphie PARKER (pripovedovanje): Šla sem na naslednjo. "E." Prva beseda je "biti". Yes! Prihajal je zdaj lažje. "U." 

[Smeh] 

RANDY PARKER: Ah, daj no, Ralphie. Moram iti! 

Ralphie PARKER: Takoj pridem dol, Ma. Gee čarovnik. "T." "O." "Bodite prepričani, za. "" Bodite prepričani, da se "kaj? Kaj je bilo malo Orphan Annie hočeš povedati? "Bodite prepričani, da se" kaj? MATI: Ralphie, je Randy iti. Bi, prosim, pridi ven? 

Ralphie PARKER: V redu, mama! Takoj bom ven! Ralphie PARKER (pripovedovanje): Bil sem že bližje zdaj. Napetost je bilo grozno. Kaj je bilo to? Usoda planeta lahko visi na nitki. 

MATI: Ralphie, Randy mora iti! 

Ralphie PARKER: bom out, za zjokat! Ralphie PARKER (Pripovedovanje): Skoraj tam! Moji prsti letel! Moj um je bil jeklena past. Vsak pore vibrira. Bilo je skoraj čisto! Yes! Yes! Yes! Yes! 

Ralphie PARKER: "Bodite prepričani, piti svojo Ovaltine. " Ovaltine? Crummy reklamo? 

[Predvajanje glasbe] 

Ralphie PARKER: Prasec. 

[Laughing] 

DAVID J. Malan: Torej, da je takrat pogled na kateri kriptografiji lahko za to-- a piti iz minulih dni. Tako hitro napoved. Če ste prost to Petek ob 13:15 in bi želi, da se nam pridružite na CS50 kosilo, glavo na tem URL tukaj. Prvi pride, prvi služi kot ponavadi. Čez čas pa bomo poskrbeli, da Najbolj kdo, ki bi želeli sodelovati lahko načrtuje-wise. 

Tako strune. Imamo Zamyla-- komu sedaj ste verjetno izpolnjeni V Težava Set 1-- katerih Ime je pira tako. In domnevam ste vnesli svoje ime v računalniški program, ki je uporabo nekaj podobnega getString. Za pridobivanje ti keystrokes, kako Ne bomo šli o zastopajo Niz, beseda, odstavek, ali več črk, kot ti tukaj? 

Pogovarjala sva se zadnjič o cela števila in težave ki se pojavljajo pri integer overflow in plavajočo vejico in težave, ki pojavijo se v natančnosti. S strunami, bomo vsaj imajo malo več prožnosti ker strings-- samo v resničnem world-- lahko precej poljubno dolžino. Precej kratka, precej dolgo. Toda tudi potem, gremo na Ugotovijo, da računalniki lahko včasih zmanjka pomnilnika in niti ne shranjevanje dovolj velik niz. 

Ampak za zdaj, začnimo vizualizirati niz, kot nekaj, kar v teh poljih tukaj. Torej šest take škatle, od katerih je vsaka predstavlja znak ali "char". Tako opozarjajo, da je "char" - c-h-a-r-- je eden od vgrajenih podatkovnih tipov v C In kaj je lepo je, da lahko uporabite da je nekako kot gradnik, puzzle piece, če hočete, da tvorijo Večje vrste podatkov, ki jih bomo še naprej na klic "niz". 

Zdaj, kaj je koristno misliti o stvareh, kot strune na ta način? No, izkazalo se je, da smo lahko dejansko vzvod za to strukturo dejansko dostop do posameznih znakov na zelo enostaven način. Jaz grem naprej in ustvariti datoteka z imenom "stringzero.c" vendar pa lahko pokličete karkoli želite. In na spletni strani predmeta je že ta primer vnaprej, tako da vam ni treba vnesite vse ven. 

In jaz grem naprej in najprej narediti int main praznino. In v nekaj dneh, bomo začeli narazen draži kakšna praznina je tu, zakaj je int poleg glavnega, in tako naprej. Ampak za zdaj, gremo naprej kopirate prilepite to. 

Bom razglasi niz imenovano s. In bom, da se vrnete iz GetString ne glede na vrste uporabnikov v. To se bo enostavna Program, navodila ne, Jaz bom samo slepo Pričakujemo, da uporabnik ve kaj storiti, da bo enostavno. 

In zdaj bom imel za zanko. In znotraj mojega za zanko sem dogaja, da imajo int i dobi nič. In i je, še enkrat, samo konvencija, indeks spremenljivka za štetje, ampak jaz bi to, kar hočem poklicati. Bom naredil jaz je manj than-- dobro Ime Zamyla je šest črk. Torej bom težko koda, da je za zdaj. 

In potem sem ++. In sedaj znotraj teh curly oporniki bom naredil printf, in želim natisniti eno znak naenkrat. Torej bom uporabila% c za morda prvič. In potem hočem natisniti vsak znak v svoji vrstici. Torej bom dal malo n poševnica nazaj tam. Zapri quote. 

In zdaj hočem nekaj narediti. Želim natisniti poseben znak v nizu, s, kot sem ponavljanjem od nič na do šest. Z drugimi besedami, želim, da natisniti i'th značaj s. Zdaj, kako lahko to storim? 

No, podobno kot grafičnem zastopani tu, vrste, pričarajo pojem boks Črke lahko podobno storili skladenjsko v C, ki ga preprosto z navedbo, Želim natisniti po e-jev i'th značaja. Uporaba oklepajev na tipkovnici računalnika da so na tipkovnici ZDA običajno nad vašo vrnitev ključ. 

Tako da to ni čisto v redu vendar, kot ste morda opazili. Ampak bom na vrsto slepo korak naprej tukaj. In bom naredil, da niz 0. Toda preden to storim, da vidimo, če smo ne moremo predvideti nekaj pogostih napak. Se bo to prevesti? Ne, mi manjka cel kup stvari. Knjižnice sem slišal. 

Torej, ki header datoteke Morda bi rad tu dodati? Ja. 

OBČINSTVO: Moraš Standard I / O [neslišno] 

DAVID J. Malan: Odlično. Tako da moram Standard I / O. Za kaj Namen storiti hočem standardne I / O? Za printf. Tako vključujejo stdio.h. In ti tudi predlagala, da bi vključil Knjižnica CS50 zakaj? Da imajo strune. Tako da bomo videli, kaj Knjižnica CS50 je počne ustvariti ta pojem niza. Ampak za zdaj, si lahko samo mislite nje kot dejanski podatkovni tip. 

Tako da se zdi, da se malo počistil. In zdaj bom, da gredo naprej in seveda se naredim niz 0. Zbrati. Torej, to je dobro. Torej ./string0 mi povečate tako da bomo lahko bolj natančno, kaj se dogaja vidim. Enter. Z-M-Y-L-vstop. In smo se natisne imena Zamyla je. 

Torej, to je zelo dobro. Torej, zdaj gremo naprej in ponovno zagnati ta program, in tip ven polno ime Daven je. Presenečenje, presenečenje. Enter. Hmm. Nismo natisnjena Daven je polno ime pravilno. Sedaj bi bilo to očitno v Če pogledam nazaj, zaradi česa, nekako neumen odločitev dizajn? 

Ja, težko kodirane šest notranjost moje zanko. Zdaj sem to storil le zato, ker Vedel sem ime Zamyla je je, da bo šest črk. Ampak zagotovo to ni splošno rešitev. Tako se izkaže, bomo lahko dinamično ugotovimo dolžino niza s klicem funkcijo imenovano strlen. 

Spet, namerno na kratko imenovan samo da bi bilo bolj priročno za tipkati. Ampak to je sinonim pridobivanje dolžino niza. Jaz grem nazaj v svoj terminal okna in ponovno zaženite prevajalnik. Ampak to je kričati name. Implicitno razglasi funkcijo knjižnice strlen s tipom unsigned int const-- Izgubil sem se. Celoti. 

Torej, še posebej vaš Oči začnejo glazuro nad sporočil o napakah, kot je ta, osredotočenost Iskreno na prvih nekaj besed. Vemo, da je težava v linije 8, kot je prikazano tukaj. In to je na vrvico 0.c. Implicitno razglasi Funkcija knjižnica strlen. Tako, da se na splošno bo biti vzorec sporočil o napakah. Implicitno razglasi nekaj. 

Torej, na kratko, kaj se je zdelo, da sem Opravili glede na linijo 8, tukaj. Kaj bi lahko rešitev še Če še nikoli niste uporabljali strlen sebe? 

OBČINSTVO: Part drugačne knjižnici? DAVID J. Malan: Part drugačne knjižnice. Zato je izjavil, da se tako izrazim. To je omenjeno v neki datoteki razen stdio.h in CS50.h. Zdaj, ko je definiran? Če sem iskren, ali boste morali samo to vedo off vrhu glave, ali pa vprašaš to in izvedeli. Ali veste, da sem odprl v CS50 napeljave za terminalski program, ki je samo velika, različica poln zaslon kaj je na dnu okna gedit je. 

In izkazalo se je, da obstaja podobno jedrnate ukaz, ki se imenuje man za navodila, kjer je, če ga boste vnesli v ime funkcije in pritisnite tipko Enter, boste dobili nazaj precej Skrivnosten dokumentacijo. To je samo besedilo, ki na splošno Izgleda Nekaj ​​takega. To je malo veliko na prvi pogled. Ampak odkrito bom Naj moje oči glazuro več in se osredotočiti le na delu Skrbi me za trenutek. 

Ki je to. Ki izgleda kot strukturno Nekaj ​​sem pozna. Dejansko stran man, tako rekoč, vam bo povedal, na kakšen header datoteko funkcijo kot strlen je opredeljen. Torej, jaz grem zdaj nazaj na gedit. In jaz grem naprej in dodajte tukaj #include in shranite datoteko. 

Grem, da počistite zaslon s Control L Če ste bili sprašujete. In bom ponovno zagnati znamko string.0, pripravlja tokrat. ./string.0 Zamyla. Da se je zdelo, da deluje Pusti me naprej in ga ponovite z Davenport. Enter. In da je tudi zdelo, da deluje. 

Tako da lahko naredimo malo bolje kot to, čeprav, lahko začnemo urejene stvari up samo malo. In bom dejansko uvesti eno drugo stvar zdaj. Jaz grem naprej in shraniti ta v drugi datoteki. In bom poklical ta datoteka string1.c samo da so v skladu s kodeksom boste lahko našli na spletu. 

In kaj je osredotočeno na natanko isto kodo. Izkazalo se je, da sem bila vrsta pridobivanju samoumevno dejstvo, da moj laptop, in v zameno, CS50 aparata Ima veliko pomnilnika, veliko RAM, veliko bajtov prostora v katerem sem lahko shranite strune. 

Ampak realnost, če sem tipkal dolgo dovolj in dovolj tipkanja, Jaz bi se v vrsto teorije V več znakov kot moj računalnik fizično ima spomin za. In to je problematično. Podobno kot int lahko le računam tako visoke, v teoriji, lahko stlačil samo toliko znakov v računalniku RAM ali Random Access Memory. 

Torej, sem se bolje odzivajo na ta problem, tudi čeprav bi bilo redko Kotiček za primer, če se tako izrazim. Ne zgodi se pogosto, bi se lahko zgodilo. In če se to zgodi in jaz ne predvideti in program za to, moj program bi lahko naredil kdo ve kaj. Zamrzne, visi, reboot, karkoli. Nekaj, kar bi se lahko zgodilo pričakovano. 

Torej, kaj bom naredil zdaj, odslej res, je, preden sem jih kdaj slepo uporabiti spremenljivko, kot S, ki je bil dodeljen vrne vrednost nekatere druge funkcije, kot so getstring, Bom se prepričajte da je njegova vrednost veljavna. Zato vem, samo od tega, da se glasi Dokumentacija za getstring CS50 je, ki v končni fazi vam bomo kazali na, da getstring vrne poseben simbol imenovane NULL, N-U-L-L v vseh kape, če gre kaj narobe. 

Tako običajno, da vrne niz. Sicer pa, če se vrne N-U-L-jaz-- bomo sčasoma videli, kaj to v resnici pomeni-- to samo sredstvo nekaj slabega zgodilo. Zdaj to pomeni, podobno kot v nič, Lahko preverite stanje tu v C, ce ni enaka NULL. Torej, če ste prej ni videl, To samo pomeni, da ni enako. 

Torej, to je nasprotje enakih enakih, ki se spomni, je drugačen od enotnega enaka, kar je naloga. Torej, če je ni enaka NULL, šele nato naredite Želim izvedbo teh vrstic kode. Torej, z drugimi besedami, preden sem se potopite v slepo in začeti ponavljanjem nad s, in zdravljenje kot da je zaporedje znaki, da bom najprej preverite, počakaj malo, je definitivno ne enako te posebne vrednosti, NULL? 

Ker če je, se lahko zgodijo slabe stvari. In za zdaj predpostavimo, da slabe stvari dogaja, pomeni, da vaš program zruši, in ne moreš nujno obnoviti. Tako odkrito povedano, je videti grši. to je nekako zmedeno zdaj pogled na. Toda to bo postalo znano kmalu. 

Ampak bom predlagala zdaj ena izboljšava. To je izboljšava pravilnost. Moj program je zdaj bolj pravilno, saj v redkih primerih, da ni dovolj pomnilnika obstaja, bom zmogel, in bom naredil ničesar. Jaz vsaj ne bo crash. 

Ampak naredimo končno različico tukaj. In datoteko z imenom string2.c. Bom prilepiti da Isto kodo za trenutek, in bom izpostaviti to linija, 11, tu, le za trenutek. Zdaj je realnost pametnih prevajalniki kot da bi Jek popraviti to za nas zakulisju ne da bi mi kdaj vedel. Ampak kaj je razmišljati o tem bistveno kot problematično zasnovo. 

Ta vrstica kode je, seveda, rekoč inicializirati neko spremenljivko i na 0. To je precej enostavna. In kaj je spet to Izjava, tu i ++, delaš? Mi smo jo videli prej, vendar smo ni res govoriti o tem. 

OBČINSTVO: Povečevanje i. 

DAVID J. Malan: Povečevanje i. Torej, na vsaki ponovitvi skozi ta zanka, vsak cikel, ste povečevanje i po enega. Tako da postane večji in večji, in Večji dokler zanka konča. Kako se odpove? No pa je to middle pogoj, ki smo ga uporabili prej. Videli ste, in walkthroughs v P nizu. 

Toda kaj je to pravi? Naredite naslednje zanko, tako Dokler i manj kot kaj? PUBLIKA: dolžina niza. DAVID J. Malan: dolžina niza. Torej, to pomeni, zelo lepo za angleščino v tem smislu. Zdaj problem je, da vsakič, ko sem Ponovil skozi to zanko v teoriji, Jaz postavljam to vprašanje. Je i manjša od dolžine niza S? Je i manjša od dolžine niza S? 

Zdaj se i spreminja na vsaki ponovitvi? To je. Zaradi ++. Torej vsaka ponovitev i je vse večji. Vendar je s večji pridobivanje ali manjši ali spreminjanje sploh? Število Tako v smislu oblikovanja, enega od osi ob kateri smo poskušali oceniti kodo v razredu, to čuti malo butast. 

Tako kot ste dobesedno, na vsaki ponovitvi te zanke prosi spet isto prekleto vprašanje, in še enkrat in še enkrat, in dobesedno da se ne bo nikoli spremenilo. Vsaj, če jaz ne dotika s in poskuša spremeniti vsebino s. Tako da sem lahko naredil malo bolje kot to. 

In kaj bom storiti, je ne razglasi le eno spremenljivko i, ampak druga spremenljivka bom samovoljno, ampak običajno, pravijo n. Določi n enak dolžina niz s. In potem sem, grem na narediti pameten malo optimizacije, tako govoriti, da ob koncu dneva ni več pravilna ali nič manj pravilna kot prej. Vendar je bolje, dizajn. V dejstvu, da sem s pomočjo manj časa, manj CPU ciklov, tako rekoč, da odgovori enako Vprašanje, vendar le enkrat. 

Kakršna koli vprašanja o tem generalnega Načelo izboljšuje, pravijo, učinkovitost programa je? Ja? OBČINSTVO: Zakaj kajne uporabite [neslišno]? DAVID J. Malan: Dobro vprašanje. Torej, zakaj smo se ++ na koncu i namesto začetek i? V tem primeru ima no funkcionalni učinek. In na splošno, sem se nagibajo k uporabite operator Postfix tako, da je malo bolj jasno, kot , ko se operacija dogaja. 

Za tiste, ki ne poznajo, obstaja še ena Izjave, s katerim lahko naredite ++ i. To so funkcionalno ekvivalent v tem primeru zato, ker ni nič drugega okoli tega stopnjevanja. Vendar lahko prišli do primeri in vrstic kode , v katerem da naredi razliko. Tako na splošno, ne bomo celo govoriti o tem. Ker odkrito povedano, da je vaše koda seksi, in nekako Pomodar, in manj znakov. Ampak realnost je, da je veliko težje, Mislim, da tudi mi zaviti svoj um okoli njega včasih, Vrstni red operacij. Tako kot prahi, če Res mi ni všeč, čeprav to je nekako seksi videti, lahko storite tudi i + = 1, ki je grši različica Ista ideja za Postfix stopnjevanja. 

To pravim in vas naj bi se norčevali iz njega, vendar boste prišli pogledat kodo, kot je nekaj lepega, preden dolgo. 

[Smeh] 

DAVID J. Malan: Right? Ja. Vprašanje sredini. 

OBČINSTVO: Ali morate povedati, int n? DAVID J. Malan: Saj Ni treba reči, int n. Zato, ker smo že povedali int, vam ni treba znova povedati. Bistvo je, da ima n do biti enak podatkovni tip kot jaz. Torej, to je samo priročno tukaj. Ja. 

OBČINSTVO: Ali lahko greš čez tiskalnega lik s bracket i spet? DAVID J. Malan: Vsekakor. Torej% c, odpokličejo od zadnje Tokrat je samo ograda. To pomeni, dal char tukaj. Nagibnica n, seveda, samo sredstvo dal prelom vrstice tukaj. Tako da samo pusti, zdaj, ta kos nove sintakse. In to je dobesedno rekel, grab Niz se imenuje i in pojdi po njegovi i'th značaj, tako rekoč. 

In sem kar naprej govorijo i'th značaja ker je na vsaki ponovitvi te zanke to je, kot da smo se tiskanje , prvič je nosilec 0, kot bi rekli programer. Nato s bracket 1, nato pa s nosilec 2, nato 3, nato 4. Seveda pa je spremenljivka, tako da sem ga izraziti z i. 

Ključ, čeprav je zavedati, še posebej, če ste ne je acclimating na tem svetu programiranja, kjer smo vse Zdi se, da računajo od nič, moram začnemo iz ničle zdaj. Ker strune, prvi znak, z v Zamyla je za boljše ali slabše bo živel na lokaciji številko ničelne. 

Dobro, naj mi prinese nas nazaj k Zamyla in videti, kaj se v resnici dogaja na pod pokrovom. Tako da je ta pojem tipa litje. Morda imate dejansko igral s tem že morda za hacker izdaja P en niz. Toda tipa vlivanje le nanaša Sposobnost v C in nekateri drugi jeziki pretvoriti eno vrsto podatkov za drugo. 

Zdaj, kako bi lahko v tem vidimo precej preprosteje? Torej to, odpoklic, je začetek angleške abecede. In kontekst, se spomni, od tako kot pred tednom dni, je ASCII. American Standard Code za izmenjavo informacij. Ki je le zelo dolga pot rekel preslikave iz črk s številkami, in od številk do črk. 

Torej prek M tu, dot dot, linije s, odpoklic, desetiško število 65 na up. In nisva govorila o tem izrecno, vendar zagotovo obstaja podobna številke za malimi črkami. In res, tam so. Svet sklenil, nekaj let Pred to malo, male črke, se bo 97. In malo b se dogaja da je 98, in tako naprej. 

In za katero koli drugo tipko na tipkovnici, tam je bo podoben vzorec bitov. Ali enakovredno desetiško število. Torej, vprašanje pri roki, torej, kako lahko dejansko videti pod pokrovom? Torej bom ponavljal, da gedit. In namesto da tip to ena od nič, Jaz grem naprej in pravkar odprla nekaj Z današnjega kode imenovani ASCII ničelno. 

In ASCII nič videti takole. Torej, kaj je zaviti naše misli okoli tega. Torej, najprej sem komentiral koda, ki je lepo. Ker je dobesedno mi povedali, kaj naj pričakujem, prikaz preslikave za velikimi črkami. Zdaj pa mi ni čisto vedel, kaj sem mislim s tem, tako da je sklepati. 

V angleščini, morda Nekoliko techie angleščina, kaj linija 18 se zdi da se delaš za nas? Samo linijo 18. Kaj je induciranje? Kaj se gre, da kick off tukaj? 

OBČINSTVO: zanka. 

DAVID J. Malan: zanka. In kolikokrat je da bo ponovitev? OBČINSTVO: [interposing GLAS] šestkrat. DAVID J. Malan: Ne šestkrat. OBČINSTVO: 26 krat. DAVID J. Malan: 26 krat. Ja, oprosti. 26-krat. Zakaj? No, to je malo čudno, vendar Sem začel šteto od 65 let. Kar je čudno, ne pa narobe. To ni slabo na pravi. In delam, da je le ker za ta primer, Sem nekako predvidevanje da je kapital je bil 65. Zdaj to ni najbolj elegantna način za to, da se vrste trdega kodo ezoterične vrednote, ki jih nihče ne se vedno pričakuje, da se spomnimo. 

Toda za zdaj opazil, da sem to počne skozi 65 plus 26. Ker očitno sploh ne želijo storiti aritmetične v moji glavi. Torej bom pustil prevajalnik to. Ampak potem na vsaki zanki, vsaka ponovitev zanke, sem povečevanje i. 

Tako da zdaj zgleda malo skrivnosten. Vendar bi morali imeti osnovno zgradbo bloki, s katerimi bi to razumeli. % C je samo ograda za char. % I je ograda za notr. In izkazalo se je, da z uporabo tega novo sintakso, to oklepajih, tako da rekoč, da je podatkovni tip znotraj oklepajih, Ne morem prisiliti prevajalnik za zdravljenje i ne je celo število, ampak kot char. 

S tem mi je pokazal značaj ekvivalent tega števila. Zdaj sem dol, to kodo je precej enaki. Želel sem, da bi super eksplicitno dejstvo da sem začel pri 97, ki je male črke. Gor preko 26 več pisem. In sem spet doing--, litje i, tako rekoč. Ali vrsto casting i, tako rekoč. 

Od notr do char. Torej, končni rezultat pa se bo, odkrito povedano, informacije že vemo. Jaz bom, da bo ascii-0 ne dot-- dot c. Obvestilo, verjetno je, da napaka, kot sem storil nehote. Naredite ASCII-0. Zdaj bom naredil ./ascii-0. Bom povečate, in na žalost se dogaja, da se pomaknete zaslon. Vendar smo videli celotno tabelo kjer Karte za 97, b zemljevidi do 98, in če se pomaknete navzgor nadalje Seveda, preslika 65. Torej je to samo pomeni, da kaj smo se pridiga, je ta enakost, se v resnici dogaja v realnosti. Tako hitro spremembo tega. Dovolite mi, da odprejo ASCII 1.C. In opazili to pametno, nekako o, pojasnilo o tem. To je ascii-1.c in Opazili to noro stvar. 

In to res pride do srca kaj računalniki počnejo. Čeprav bi mi ljudje ne štejejo v smislu letters-- Jaz ne začnem razmišljati, vse v redu, potem b, in uporabite tiste, ki računajo fizične objekte. Zagotovo lahko rečemo, da želim inicializirati neko spremenljivko z imenom C- vendar bi jaz to imenoval anything-- zato je c inicializiran kapitalske A. 

Ker na koncu dneva, je računalnik ne briga, kaj si shranjevanje, se briga samo, kako želite predstaviti te informacije. Kako si želite, da računalnik razlagajo, da je vzorec bitov? Tako da to ni nekaj, kar sem bi na splošno priporočam početje. To je res samo primer, da sporočilo, da si lahko popolnoma inicializirati celo do char. Ker pod pokrov iz char, seveda, je le število med 0 in 255. 

Tako da lahko zagotovo ga znotraj notr. In kaj je to tako kaže, da smo lahko pretvorite iz ene tipa v drugega, tukaj, končno tiskanje isto stvar. In v resnici, bo to popravim online-- je bilo mišljeno, da to povem, spet tukaj. Dovolite mi, da je to čisto na spletu, in se bomo glej v spletni walkthrough, kot je potrebno, , kar je bilo predvideno. 

OK. Torej, zadnji primer zdaj vključuje A in B, nato pa se bomo vzeti stvari zarezo. Torej, z A-ja in B-ih in c je v kapitalizacijo in enakovrednost Pogodbe, dajva si oglejte ta primer tukaj. Drug primer kode. Bomo odprli enega, ki je že naredili, zato smo nimajo, da ga vnesite vse ven iz nič. 

In obvestilo v pričakovanju smo z uporabo multiple glavo datotek, med katerimi je naš novi prijatelj, string.h. Zdaj pa to izgleda na prvi pogled, malo skrivnosten. Vendar pa da vidimo, če ne moremo razmišljati skozi kaj se dogaja tukaj. Najprej sem dobil niz s strani uporabnika, in sem dal to niz v spremenljivko imenovane e. Kopirajte paste od prej. V vrstico 22, sem očitno počne točno to, kar Jaz sem malo prej, sem ponavljanjem več znakov v s. 

In novih trikov tukaj uporabljate Dolžina vrvice, minor optimizacija shranjevanja dolžino niza v N, namesto da bi spet strlen, in znova in znova. In samo preverjanje, da je i manj kot n. Zdaj tu, stvari malo zanimivo. Ampak to je samo uporaba te iste nove ideje. Kaj počne v angleškem jeziku s bracket i predstavlja? 

OBČINSTVO: Štetje vsak karakter [neslišno]. 

DAVID J. Malan: Štetje vsak znak. In še bolj na kratko, s bracket i predstavlja, kaj? Bi rekli. Ne bi si dal na licu mesta tukaj. 

OBČINSTVO: No-- DAVID J. Malan: Torej, če beseda je-- če Niz je Zamyla, ki starts-- OBČINSTVO: --you ukvarjajo z liki separately-- DAVID J. Malan: Dobro. Točno tako. Square bracket zapis vam omogoča, dostop vsak znak posebej, tako s bracket 0 se bo Prvi znak v nizu. je nosilec 1 se bo drugi, in tako naprej. Torej vprašanje, vas prosim, Tu, v tem stanju je kaj? Je i'th lik i je višja ali enako v male? In kaj to pomeni, tukaj, z dvojnimi ampersands? PUBLIKA (SKUPAJ): In. DAVID J. Malan: In. To je samo enakovredna to. In ni ključna beseda v C, morate uporaba, zoprno, ampersand ampersand. In to, nasprotno, se sprašuješ e je i'th značaja manjša ali enaka v male črke z? In spet, tu je, če razumevanje osnovno Izvajanje Računalnik ima smisel. Opazimo, da, čeprav imam dot dot dot tam, Izgleda skozi vz z malimi črkami se vse sosednje vrednosti do od 97 gor. 

In enako za velikimi črkami se začne na 65 let. Torej, hrana za s seboj, potem pa, je, da je v angleščini, Kako bi opisali kaj linija 24 počne? Ja? 

OBČINSTVO: 24. to je preverjam ali je vsak znak malimi črkami. DAVID J. Malan: To je preverjanje, ali vsak lik je malo črko. Torej, še bolj na kratko, je i'th lik i malimi črkami? To je vse, kar smo izražanje tukaj logično, malo cryptically, vendar v končni fazi precej preprosteje. Je S je i'th znakov malimi črkami? 

Če je temu tako, in tu je, če se stvari malo um upogibanje le za trenutek, če je odgovor pritrdilen, pojdite naprej in izpisal znak. Torej je to samo ograda, ampak kaj karakter? Zakaj počnem e nosilec i minus ta izraz tukaj? 

No opazili vzorec tukaj. Dejanske številke ne zadeva toliko. Ampak obvestilo, da je 97 kako daleč stran od 65 let? 

OBČINSTVO: 32. 

DAVID J. Malan: 32. Kako daleč je 98 od 66? 

OBČINSTVO: 32. 

DAVID J. Malan: Mali c od velikih C? 32. Torej je 32 hmelja od eno črko za drugo. Tako odkrito I, lahko poenostaviti, da je to to. Ampak potem sem nekako težko kodiranje Ta nizka raven razumevanja da noben bralec nikoli boš razumel. Torej bom to posploševati, kot sem vem, da male črke so večje. Vem, da so velike črke so manjše vrednosti, ironično. 

Toda to je dejansko enaka rekoč odštejemo 32 iz ih nosilca i. Torej v okviru teh pisma, če pisma zgodi, da bo, male črke in sem odštejemo 32, kakšen učinek ima to, matematično, na male črke? OBČINSTVO: Capitalizes-- DAVID J. Malan: ga izkorišča. In res, zato naše Program se imenuje izkoristiti nič. Ta program, bodisi izkorišča pismo, Po preverjanju, če je res malo črko. V nasprotnem primeru, v skladu 30., kaj naj storim, če to ni malo črko, da sem gledaš na posebno ponovitev v zanki. Samo ga natisnite. 

Torej se ne spreminjajo stvari da sploh ni male črke. Omeji si malo po malo z. Zdaj je to precej skrivnostne. Toda na koncu dneva, to je, kako bomo, nekoč, so morale stvari. Če bi namesto open izkoristiti eno, oh hvala bogu. Tam je funkcija poklicani, da zgornji, da lahko storiti vse, kar smo pravkar storil na precej nizki ravni. 

Zdaj pa k zgornji Zanimivo ker je prijavljena v datoteki, in bi vedeli samo to s preverjanjem dokumentacije, ali pa je povedal, recimo, v razredu, kjer obstaja, v datoteki imenovani ctype.h. Tako da je to še ena nova prijateljica naših. In zgornji počne točno kar pove že ime. 

Lahko potujejo v, kot argument, med Te oklepaje, nekaj znakov. Grem mimo v i'th značaja o S pomočjo naše fancy nov zapis vključuje oklepajev. In si ugibati, kaj je povratna Vrednost za zgornji očitno dogaja biti? Črka. Črka. 

Torej, če sem mimo z malimi črkami a, upajmo, z opredelitvijo do zgornjega dela, da se bo vrnil velike črke A. V nasprotnem primeru, če to ni malo črko v prvo mesto, sem ga natisnite. In res, obvestilo drugi prijatelj. Ne samo, da zgornji obstaja, vendar pa je nižja, ki dejansko odgovarja na to vprašanje zame. 

Kdor zdaj napisal te stvari, 10s let nazaj, veš kaj? Izvajajo na zgornji in spustite s pomočjo kode, kot je ta. Ampak spet, v skladu z ta ideja abstrahiranja stran, nekako, nižja stopnja Podrobnosti o izvajanju. In stoji na ramenih ljudi ki so prišli pred nami, z uporabo funkcije kot so na zgornji in spodnji, ki Dovolj čudovito so lepo imenovan za povedati, kaj počnejo, je čudovito paradigma, da sprejme. 

Zdaj pa se je izkazalo, da če sem prebral stran man za, recimo, da se zgornja, Naučim nekaj drugega. Torej človek toUpper. To je malo veliko. Ampak obvestilo, tukaj je, da je omenjena header datoteko, ki naj bi uporabil. Kot sedmih, ker ta je zavajajoč, funkcija uporablja ints namesto znakov zaradi preverjanje napak. Vendar bomo morda prišli nazaj, da v prihodnosti. 

Ampak opazila sem, da se zgornji spreobrnjence črka c za velike črke, če je to mogoče. Torej, to je precej preprosta. In zdaj bodimo malo bolj specifični. Oglejmo si del man page pod vrne vrednost. Vrnjeno vrednost je, da pretvorjene pisma. Ali c, če pretvorba ni bilo mogoče, kjer je c prvotna vhod. Ki poznam od tukaj, od argument, da bi zgornji del. 

Torej, kaj je takeaway to? Vrnjeno vrednost je, da pretvorjene pisma, ali c, originalno pismo, če pretvorba ni bilo mogoče. Kaj izboljšanje morem zato da v oblikovanje moja koda je? Ja? 

OBČINSTVO: Lahko odstranite drugje. DAVID J. Malan: Ne morem odstranite izjavo drugega, in ne samo izjavo drugega. 

OBČINSTVO: lahko odstranite [neslišno]. 

DAVID J. Malan: Ne morem odstraniti celotno vilice v cestnem prometu, če je povsem drugega. Torej res, naj odpre Končna različica tega, izkoristi-2 in opazil, kako, če boste, seksi, koda je zdaj dobili, s tem, da sem zmanjšal iz nekaj sedem ali tako vodi do samo štiri, funkcionalnost, ki sem nameraval ga preprosto kliče k zgornji, poteka v ih nosilec I, in tiskanje ven z mesta% c, da zlasti značaj. 

Zdaj verjetno, da je hrošč, ali vsaj nevarnost hrošč, v tem programu. Torej, samo da pridejo nazaj na zgodnejši takeaway, kaj naj jaz verjetno tudi ne v ta program, da bi bilo bolj robusten, tako da ni možnosti, da lahko crash, tudi v redkih primerih? OBČINSTVO: Prepričajte se, da ni NULL. DAVID J. Malan: Prepričajte se, da ni NULL. Torej res, da bi to super Pravilno, naj naredim nekaj podobnega, če je ni NULL, potem iti naprej in izvrši teh vrstic kode, ki Ne morem potem alinea tako, in potem dal v tesnem opornico. Tako dobra vezava skupaj dveh idej. Ja? OBČINSTVO: Lahko uporabite storiti, medtem ko zanke, namesto tega? DAVID J. Malan: Bi Delam storila, medtem ko zanke? OBČINSTVO: --you želite zagotoviti, da ste dejansko [neslišno]. DAVID J. Malan: Bi uporabljate storijo, ko? Kratek odgovor, ne. Ker ste na tem, da uvesti drugo kotno zadevo. Če niz ničelne dolžine. Če se na primer, sem udaril Vstopiti, ne da bi kdaj tipkanje Zamyla. Jaz te bom vrniti dejanski niz, saj bomo na koncu videli, da nič znakov. Še vedno je niz, to je samo zelo kratek. Ampak, če boste uporabili storila, medtem ko, greš na slepo poskusite narediti z nekaj upoštevati, da ta niz, in nič ne bo tam. 

OBČINSTVO: No, če si storiti [neslišno], medtem ko S-- DAVID J. Malan: Oh vidim, da dobili niz s strani uporabnika. Torej kratek odgovor, si bi lahko, in da zasleduje jim dal niz, ki je dovolj kratko, da se prilega v pomnilnik. Absolutno. Pravkar sem se odločil, da ne. Če ne mi niz I hočeš, jaz sem odnehal, sem obupal. Ampak absolutno, za ta namen, ste lahko popolnoma storiti. 

Torej header datoteke v knjižnico, da sedaj smo seznanjeni z so ti tukaj. Standard I / O, CS50.h, string.h, ctype.h, in tam so seveda drugi. Nekateri izmed vas ste odkrili math knjižnica math.h. Ampak naj vam predstavim, zdaj, da ta vir, da je osebje CS50, Davin, in Rob in Gabe zlasti so sestavili. Da bo kmalu povezal na Spletna stran predmeta je. To se imenuje CS50 reference. 

Ki samo da vam hitro okus tega, deluje, kot sledi. Pusti me, da reference.cs50.net. Boste videli na levi strani drugo prepričljivo seznam funkcij, ki prihajajo z c. Ampak, če me zanima, v tem trenutku, kaj takega strlen, Lahko ga vnesite tukaj. Filtrira določitvi seznama samo tisto, kar me skrbi. Bom ga kliknite. In zdaj na levo, boste videli, kaj želimo je bolj enostavno, human prijazno pojasnilo, kako Ta funkcija deluje. 

Vrne dolžino niza. Tukaj je povzetek, tukaj je, kako si ga uporabljajo v smislu glavi datoteke, in glede na to, kaj funkcije Izgleda kot v smislu njegovih argumentov. In potem tukaj, vrne dolžina niza. Toda za tiste, ki ste bolj udobno, lahko dejansko kliknite bolj udoben, in vsebina tega stran, zdaj, bo spremenila biti privzete vrednosti česa dobiš s pomočjo strani man. 

Z drugimi besedami, CS50 sklic je poenostavitev iz umetnih strani s strani osebja, za študente. Zlasti tistih manj udoben in med, tako da boste ne bi bilo treba poskusiti za zavijanje vaš um okoli, odkrito povedano, nekateri dokaj Grobni sintakso in dokumentacija kdaj. 

Tako da se vodijo v mislih V dneh, ki prihajajo. Torej, tukaj, še enkrat, je Zamyla. Pojdimo zdaj vprašati, ki je malo bolj človeški dostopna. Hvala Chang, ki je bil tiskanje več slonov nonstop v zadnjih nekaj dneh. Imamo priložnost, da vsaj eden izmed njih proč. Če bi lahko dobili samo enega prostovoljca da pridejo gor, da pripravi na zaslonu. Kaj pa tukaj? 

Pridi gor. Kako ti je ime? ALEX: Alex. DAVID J. Malan: Alex. V redu. Alex, pridi gor. Mi smo na tem, da vidim vaš rokopisa na zaslonu tukaj. V redu, lepo da sva se spoznala. 

ALEX: Lepo vas veseli. 

DAVID J. Malan: Dobro. Torej, super preprosta vaja. Bar ni visoka, da dobili slona danes. Igrate vlogo getstring. In jaz ti bom samo povedal, niz, ki ste gotten. In domnevam, da vas, getstring, so bili imenovani. In človek, kot sem jaz, je vnesli v Zamyla, Ž-A-M-Y-L-A. Samo pojdi naprej in pisati Zamyla na zaslon, kot da ste jo gotten in je shranjena nekje v pomnilniku. 

Zapusti prostor za tisto, kar bo več drugi words-- da je OK, nadaljuj. 

[Smeh] 

Torej Zamyla, odlično. Sedaj predpostavimo, da vas, getstring, se je spet klicala. In zato sem vam nudijo na tipkovnica, z drugim imenom, Belinda. V redu. In zdaj naslednjič getstring je poklical, sem tip v nekaj podobnega Gabe, G-A-B-E. Ste res ob srčni bralno-pisalnega pomnilnika. Ki pripravlja vse povsem naključno. OK. 

[Smeh] ALEX: Žal mi je moj rokopis je slabo. DAVID J. Malan: No, to je v redu. In kako o Robu, R-O-B. OK. Dobro. Zato ti niso predvideli bi nekako postaviti stvari na ta način. Vendar pa lahko to delo. Torej, kako si šel okoli o od teh znakov, v spomin? Z drugimi besedami, če pomislimo to pravokotne črn zaslon , kot da predstavlja računalnika RAM ali spomin. 

In opozarjajo, da RAM je samo Cel kup bajtov, in bajti cel kup bitov. In bit nekako izvajajo, v glavnem z neko obliko električne energije v strojni opremi. Torej, to je neke vrste plastenje smo se pogovarjali o in zdaj lahko jemljemo za samoumevno. Kako ste se lotili odločanju, kje pisati Rob proti Gabe versus Belinda primerjavi Zamyla? 

ALEX: Pravkar sem to storil v odredi, da si mi povedal. 

DAVID J. Malan: In to je res. Toda kaj urejati, kjer ste postavili Ime Belinda in ime Gabe je? 

ALEX: Nič? DAVID J. Malan: [smeh] Tako, da deluje, da je v redu. Torej računalniki so malo bolj urejeno kot to. In tako, ko smo implement-- tam ostanejo za samo moment--, ko smo dejansko izvesti nekaj podobnega getstring v računalniku, Zamyla se lahko določeno precej kot si ti na zaslonu, tam. 

In tisto, kar je ključnega pomena za obvestilo tu, kaj Alex storil, je, da je neke vrste razmejitev Med vsako od teh besed, kajne? Nisi napisal Z-M-Y-L-A-B-E-L-I-N-D-G-A-B-- z drugimi besedami, obstaja nekakšna o razmejitvi, ki se zdi, da je, nekako, naključno razmik med temi različnimi besedami. Ampak to je dobro, ker smo ljudje lahko zdaj predstavljati, da so ti štiri strune. To ni samo ena sekvenca lotov znakov. Torej računalnik, nato pa, medtem, lahko sprejme niz kot Zamyla, dal vsak od teh črk notranjost bajt pomnilnika. Vendar je to število veliko večje, Seveda, kot šestih znakov. 

Obstaja cel kup RAM. In tako odslej to grid zabojev se dogaja za zastopanje, kar Alex samo naredil tukaj na zaslonu. In zdaj, Alex, vam lahko tudi ponudimo modra ali oranžna slon iz Chang. ALEX: bom modrega slona. DAVID J. Malan: modra slon. Torej velik aplavz, če bi lahko, za Alex tukaj. 

[APLAVZ] 

ALEX: Hvala. DAVID J. Malan: Hvala. Torej takeaway je, da, čeprav vzorec nekako sčasoma spremenila, tu na krovu, to je bilo Razmejitev med različnimi godala da je Alex dobil za nas. Zdaj računalniki, odkrito povedano, bi naredil isto. Lahko bi nekako Pasti strings kjerkoli v RAM. Tukaj, tukaj, dol, dol. 

Lahko bi naredil točno to. Toda, seveda, da je Verjetno ne najbolje načrtovanje. Prav? Če bi spraševali Alex na dobili imena, verjetno je, da bi dal nekaj več tukaj, morda up tukaj, tukaj, tukaj, na koncu tukaj. Toda z malo več prostora, seveda, Lahko bi ležala stvari bolj gladko. In res, da je tisto, kar računalnik ne. 

Ampak catch je, da če naslednji niz dobim Po Zamyla je nekaj kot Belinda, predlagam, kjer lahko pišemo črka b v zvezi s tem omrežjem? Kam bi šel? Na desni strani a, pod Z, pod a? Kaj bi vaš prvi instinkt je? OBČINSTVO: Pod z. DAVID J. Malan: Torej pod z. In to je precej enostavno, kajne? To je nekako urejeno, to je tisto, kar počnemo na tipkovnici, ko smo zadeti nastopiti, ali email, ko bodo Seznam z oznakami stvari. Ampak realnost je, da računalniki poskušajo biti bolj učinkoviti, in strpati gotovo toliko podatkov v RAM, kolikor je to mogoče, tako da vam ne zapravljajo nobene bajte. Tako da vam ne zapravljajo koli zaslon nepremičnin. In problem, čeprav je, da če bi dobesedno dal pismo b potem, kako bomo vem, kje ime Zamyla se konča in ime Belinda se začne? Torej ste se pri ljudeh pravkar predlagala, dobro, pritisnite tipko Enter, v bistvu. Odloži spodaj. Ali celo kot je to storil Alex, samo začnite pisati Naslednja ime pod prejšnjim, in pod to ena, in nato pod tem. To je vizualno iztočnico. 

Računalniki imajo še eno vizualno iztočnico, ampak to je malo bolj jedrnat. To je ta funky znak. Poševnica nazaj 0, kar je morda spominja n poševnica nazaj, in tako naprej, zdaj. Posebne zasilni izhod sekvence. Poševnica nazaj 0 je način predstavlja osem nič bitov v vrsti. 0000 0000. 

Tako ti izrazi, ki ni hit številko ničelne na tipkovnici, ker je v tem, da je znak ASCII. Izgleda kot število, vendar je pravzaprav decimalno število da predstavlja krožno pismenka, krožna tipografija. Medtem, poševnica nazaj nič dobesedno pomeni dal osem nič bajte tu za mene. 

Torej je to nekoliko arbitrarna. Ki smo jih lahko uporabili kakšen vzorec bitov, vendar svet odločila nekaj let nazaj, da predstavljajo Konec niza v pomnilniku, samo da cel kup ničel. Saj lahko zazna, da je. Zdaj pa to pomeni, da dopis, abeceda, je lahko predstavljen z ničlami. 

Ampak to je v redu, smo že videli da smo s pomočjo 65 gor v 97 gor. Nismo prišli nikamor zaprite vse ničle. Torej Belinda v spomin računalnika se dejansko dogaja, da gredo tukaj. Sem ga potegnejo v rumeno pravkar da opozarjajo na to. In obvestilo, tudi to je popolnoma samovoljno. Sem ga nariše kot omrežje. Kot, RAM je le nekaj fizični objekt. To ni nujno, Vrstice in stolpci, per se. To je pravkar dobil cel kup bajtov izvajati v strojno opremo nekako. Ampak, če po Belinda I vnesli v imenu Gabe je, on se dogaja, da na koncu sem v spominu, in če sem tipkal v imenu Daven je, na primer, on bo končalo tukaj. In sem lahko še naprej napisati še več imen. 

Na žalost, če skušam napisati super dolgo ime, Jaz bi na koncu zmanjkalo pomnilnika. V tem primeru, je getstring vrača NULL, kot smo rekli. Toda na srečo, vsaj v tem vizualno tukaj, nismo dobili povsem tako daleč. 

Kaj je lepo, zdaj je, da ta Osnovna ideja o zdravljenju stvari kot da je v škatlah, je Predstavnik značilnostjo C in veliko jezikov, znan kot matrika. Niz je druga vrsta podatkov. To je struktura podatkov, če hočete. Struktura v smislu njega res, vrsta, ki je videti kot škatla, vsaj v oči vaš um. Niz se stikata zaporedje enakih podatkovnih tipov, back to back to back to back. 

Torej niz, v drugi besede, je niz znakov. Nabor znakov. Vendar se izkaže, da lahko imajo nizi grozdov stvari. V bistvu, lahko postavimo tudi Številke v array. Torej, v obliki, v kateri bomo začeli razglasitvi te podatke struktura znana kot niz se tudi dogaja, da uporabite oglate oklepaje. Vendar te oklepaje bodo imajo drugačen pomen v tem kontekstu. 

In kaj je to videti takole. Recimo, da sem odprl up novo datoteko tukaj. In rešim to kot ages.c. In jaz bom to shranim v mapo tukaj. In zdaj bom, da gredo naprej in začnite tipkati nekaj kot vključujejo CS50.h, vključujejo stdio.h, int main praznino. In potem je tu notri, hočem da imajo prvi int imenovano starosti. 

In bom za uporabo, da bi dobili int od uporabnika za njegovo starost. Vendar je ta program naj bi se jih uporablja več ljudi, ne glede na kontekst. Imam linijo ljudi. Vsi izmed njih so, da tip v svojih starost morda nekaj, ne vem, tekmovanje ali prireditev da oni prispelo. Torej, naslednjič, oseba, I Potrebujemo še eno spremenljivko. 

Ker če sem naredil starost dobi getInt, da je bo piąi prek ali prepisati starost prejšnjega osebe. Torej, to ni dobro. Torej moj prvi instinkt morda, oh, v redu, če želim, da bi dobili več Ljudske ages-- recimo to age1, int age2 dobi int, int age3 dobi getInt. In zdaj bom uporabila nekateri psevdokoda kodo tukaj. 

Nekaj ​​narediti s temi številkami. Pustili bomo še en dan, kar delamo tam, ker smo le skrb za trenutek o age1, age2, age3. Na žalost, ko sem prevesti ta program in ga dal pred dejanskim uporabnikom, kar je v bistvu slabo projektiranje Odločitev Zdi se, da je? Ja? OBČINSTVO: [neslišno] DAVID J. Malan: Ja, Nisem še poskusil da ugotovimo, koliko starosti jaz pravzaprav briga? Če imam manj kot tri ljudi tukaj, in torej manj kot tri starosti, Jaz sem še vedno slepo pričakujejo tri. Bog ne daj, štirje ljudje pokažejo. Moj program ne bo samo še njihovo podporo. 

In tako je to, dolga zgodba Skratka, ni dobra navada. Prav? Bil sem v bistvu kopiranje in prilepite kodo in le poteg imeni spremenljivk. In, moj bog, če bi imeli, ne tri starosti, vendar 10 ali 100 ali celo 6500 Študentje, na primer. To se ne bo posebej Elegantna code, ali trajnostna. Boste morali Spremenite program vsakič vaše število ljudi spremembe. 

Torej, na srečo, v naš dejanski ages.c datoteke za danes, imamo bolj pametno rešitev. Najprej bom sposodil konstrukt, ki smo jih uporabili nekajkrat, To storite tako, medtem ko zanke, da bi dobili število ljudi v sobi. Jaz bom samo nadlegovanja uporabnika, spet in spet, dokler se on ali ona mi daje vrednost n, ki je pozitivno celo število. 

Lahko bi uporabili, zadnja Čas je dobil pozitivno int. Vendar nimamo, da zares, tako da sem šel naprej in ponovno izvesti to idejo. Zdaj tukaj, to je nov trik. V vrstici 27, kot pripombe V skladu 26. predlaga, razglasi niz, v katerem za shranjevanje starost vsakogar. 

Torej, če želite, da bi dobili, ne eno int, ne dve ints, ampak cel kup ints. Natančneje n celi števili, so n morda so trije, morda 100, morda 1000. Sintaksa, preprosto, je recimo, kakšen tip podatkov želiš? Kaj želite poklicati da je kos pomnilnika? Kaj želite poklicati mreže da je videti takole slikovno? 

In v oklepaju tukaj, praviš kako velik želite matrika biti. In prej, ko sem rekel, sintaksa je malo drugačna tukaj smo še vedno z oglatimi oklepaji, ampak ko sem razglasitvi niz, število notranjost Oglati oklepaji sredstva kako velik želite matrika biti. 

Nasprotno, ko smo z uporabo s bracket i pred nekaj trenutki, s, niz, je dejansko niz znakov, ampak ko ne razglasitvi spremenljivko saj s to ključno besedo tukaj, ste preprosto dobili poseben indeks, posebno element iz te matrike. Ko vemo, da je ostalo o je to enostavno. Če nova sem prvič dogaja, da natisnete kaj je starost osebe številko i. Kje sem rekel, oseba, številka ena, Oseba številka dve, oseba, številka tri. 

In jaz sem samo delaš aritmetike, tako da, kot normalni ljudje, računamo iz ene za to Program, in ne od nič. Potem sem poklical getint, ampak jaz shranjevanje odgovor v starosti oklepati i. Ki je i'th starost v matriki. Torej, ker so zadnjič, ko smo bili zdravljenje Te škatle so znakov za ime Zamyla je, in drugi. Sedaj so te škatle predstavljajo 32 bitov ali štiri bajte , v katerem lahko shranite int, int, int. Od katerih so vsi, spet so isti tip podatkov. 

Sedaj sem naredil nekaj neumno, kot čas teče, samo utemeljiti pisanju tega programa. In potem sem dol, sem še enkrat ponoviti čez polja rekel leto od sedaj, Oseba številka ena volja biti stari nekaj, let. In da ugotovimo, da math-- Mislim, to ni zelo zapletena arithmetic-- Samo dodam nekaj na njihovo starost. Samo dokazati, še enkrat, to. 

Tako kot sem lahko indeks v niz, s, tako da lahko indeks I v paleto starosti, kot da ni. Torej, če je ta, ki nam bo pokazal? Tako da bomo videli, na koncu, Nekaj ​​stvari v dneh, da pridejo. Ena, ves ta čas, ko pisanje lastnih programov, kot Mario, požrešna, kredita. Ste bili z vnašanjem imena program in pritisnemo Enter. In potem dobili vnos uporabnika. 

Z getString, getInt, getLongLong ali podobno. Vendar se je izkazalo, ki podpira C nekaj, kar se imenuje ukazni vrstici Argumenti, ki nas bo pustil dejansko dobili na besede, ki jih vnesete, na utripajočo poziv ko ime vašega programa. 

Torej, v dneh, ki prihajajo, vam lahko vnesete nekaj podobnega cesarju, ali ./caesar številka 13, potem. Bomo videli, kako to deluje. Saj res, v problem določiti dva, smo dogaja, da vam predstavim da nekaj malega spominja Ralphie je izpodbijanje prej kartografije. Umetnost kodiranja podatkov. Ta, v bistvu, je zelo spominja, kaj Ralphie storil. 

To je primer za šifriranje algoritem imenuje ROT13, je R-O-T 13. Ki preprosto pomeni, zavrtite črk v abecedi 13 mestih. In če boste to storili, boste videli zdaj kar je morda znano frazo. Ampak način, bomo uporabili to, v končni fazi, je bolj na splošno. 

V P nastavite dva, v standardni izdaji, boste izvajati nekaj šifre, ena se imenuje Cezar, ena imenovana Vigenere. Oba sta vrtilna šifre, v tem nekako nato eno črko v drugo črko. In Cezar je zelo preprosta. Dodate eno, dodate 13, ali nekaj številka do 26. Vigenere počne na na pismu podlago. Torej Vigenere, kot boste videli V spec, je bolj varna. 

Toda na koncu dneva, kar vas bo izvajanje in P nastavite dva, je, da je ključnega pomena, da uporabljate oboje za šifriranje in dešifriranje. Sklicujoč se postopek obračanja plain text, nekateri izvirno sporočilo, Cypher v besedilu, ki je nekaj šifrirana. In ga nato ponovno dešifriranje. 

V izdaji hacker, Medtem, boste nalogo, da nekaj podobnega v duhu, kjer bomo vam Datoteka, iz tipičnega Linux ali Mac ali Unix računalnik pozval Etsy geslo, ki vsebuje celotno kup imen in gesel. In tisti gesla so vse bila šifrirana, ali zgoščene, če se tako izrazim, bolj pravilno kot boste videli v spec. 

In bo izdaja hacker izziv ste s čemer vhod, kot je ta, in pokanje geslo. Da je poskušal ugotoviti, kaj Geslo Človeški je dejansko bilo. Ker, seveda, gesla na splošno niso shranjeni v jasni, in na splošno gesel bi smelo biti težko uganiti. To ni pogosto dogaja. 

In tisto, kar sem mislil, da bomo storili, je zaključim z nekaj minut pogled na posebno slaba izbira gesel iz filma si lahko spomnim zaljubljeno. In če ne, bi morali najeti. 

[VIDEO PREDVAJANJE] 

-Helmet Ste fanatik, kaj se dogaja? Kaj počneš z mojo hčerko? 

-Permit Me, da uvede briljanten mlad plastični kirurg, Zdravnik Phillip Schlotkin. Največji nosu človek Celotno vesolje in Beverly Hills. 

Tvoja visokost. 

Nos Obleka za delo? Ne razumem. Ona je že imela operacijo nosu. To je bil njen sladek 16. prisotna. 

Ne, to ni tisto, kar misliš. To je veliko, veliko slabše. Če mi ne dajo Kombinacija za zračni ščit, Zdravnik Schlotkin vam bo dal, hči nazaj svojo staro nos. - [Gasps] Nooooooooooooo. Kje si dobil to? 

V redu. Jaz bom povedal, bom povedal. 

Ne, očka, ne. Ne smeš. 

Prav imaš draga. Pogrešal bom svoj novi nos. Ampak sem jim, da ne bo povedal, kombinacija, ni važno kaj. 

-Zelo Dobro. Zdravnik Schlotkin, da svoje najhujše. 

Moja užitek. 

Ne! Čakaj, čakaj. Jaz bom povedal. Jaz bom povedal. 

Vedel, da bi delovalo. V redu, daj mi. 

-V Kombinacija je ena. 

Ona. 

Ona. Dva. Dva. Dva. -Tri. -Tri. -Tri. Štiri. Štiri. Štiri. -Pet. -Pet. -Pet. Torej kombinacija je ena, dva, tri, štiri, pet. To je najbolj neumna kombinacija Kar sem jih kdaj slišal v mojem življenju. To je nekako Stvar idiot bi imeli na svoji prtljagi. 

Hvala vam, vaša visokost. 

[REMOTE CLICKS] 

Kaj si naredil? 

Jaz izklopljen steno. 

Ne, nisi, ti izklopi celoten film. 

Jaz, moral je pritisnil napačen gumb. 

No, ga nazaj! Dal film nazaj! 

Da, gospod! Da, gospod. -Gremo, Arnold. Pridi, Gretchen. Seveda veš, da bom moral račun za to. No? Je delovalo? Kje je kralj? 

-Delovalo, Gospod, imajo kombinacijo. Izvrstno. Zdaj bomo lahko vse do zadnjega diha svežega zraka iz planeta Druidia. Kakšna je kombinacija? 

Ena, dva, tri, štiri, pet. 

Ena, dva, tri, štiri, pet? Ja. -To Neverjetno. Imam enak Kombinacija na moji prtljagi. Pripravite Spaceball 1 za takojšnji odhod. 

Da, gospod. 

In spremenite Kombinacija na moji prtljagi. [Zapiranje vrat SOUND] [Žvenketajo vrat UDARIL ČELADE] -Ahh. [END VIDEO PREDVAJANJE] DAVID J. Malan: To je za CS50, se vidimo naslednji teden. NARRATOR: In zdaj, Deep Misli, ki jih Daven Farnham. 

DAVEN Farnham: Kodiranje v C je toliko težje kot nič. printf je Scratch laž. 

[Smeh SOUNDBITE]