[Muziciranja] DAVID J. Malan: U redu. To je CS50, i to je kraj tjedna 2. Tako je danas, idemo nastaviti naš izgled kako mi predstavljaju stvari ispod hood-- udaljava od brojeva kao brojeva i pomičnim zarezom vrijednosti i fokusiranje na žice i u konačnici više zanimljivih programa. Ali, također ćemo uzeti pogledati Nekoliko domene specifične problems-- od kojih je prvo se uključuje kriptografiju, umjetnost remećenje informacije, u kojem vidite gore ovdje Slika je to radio Orphan Annie Tajna dekoder prsten od prošle godine. 

To je zapravo vrlo primitivni oblik i Obiteljski oblik cryptopgraphy pri čemu ovaj prsten ima dva disks-- jedna iznutra i jedan izvana. I okretanjem jedan od onih, možete suštini postroje slova poput do Z s drugim pismima kao i B kroz A. Drugim riječima, doslovce možete rotirati abecedu, Time dolazi s mapiranjem iz pisma slovima, tako da, ako htjela poslati tajnu poruku za nekoga poput Annie, mogli pisati dolje vaše poruke i rotirajte slova, pri čemu, ako misliš reći "A", te umjesto toga reći "B" misliš reći "B" umjesto toga reći "C" - ili nešto malo više pametan od to-- a onda, u konačnici, tako dugo dok je Annie ima tu dekoder prsten, ona može dešifrirati poruku. Sada, možete sjetiti, u stvari, da je ova korišten u vrlo poznatom filmu koji igra ad nauseum vrijeme Božić sezone. Idemo pogledati ovdje. Ralphie PARKER: "Budite ga Poznato je da sve u sažetku da je Ralph Parker imenuje član Little Orphan Annie Secret Krug i ima pravo na sve počasti i beneficije u toj proceduri. " 

Ralphie Parker (pripovijeda): Potpisan Little Orphan Annie. Supotpisali, Pierre Andre! U tinte. Priznanja i koristi, Već u dobi od devet godina. 

[Muziciranja] 

[RADIO lupetati] Ralphie PARKER: Hajde. Idemo s njim. Ne treba sve te gluposti O krijumčara i pirata. Radijski spiker: Poslušajte sutra noć za zaključni avanturu Crnog gusarskom brodu. Sada je vrijeme za Annie Tajna poruka za članove od Secret Circle. Sjeti se djeca, samo članove Annie Secret Circle može dekodirati Annie tajnu poruku. 

Zapamtite, Annie je ovisno o vama. Postavite svoje igle za B-2. Ovdje je message-- 12, 11, 2-- Ralphie Parker (pripovijeda): ja ja u svom prvom tajnom sastanku. Radijski spiker: --25, 14, 11, 18, 16-- Ralphie Parker (pripovijeda): Oh, Pierre je bio u velikom glasovnom večeras. Mogao bih reći da je večeras Poruka je jako važno. 

Radijski spiker: --3, 25. To je poruka od Annie sama. Zapamtite, nemojte nikome reći. 

[Zadihan] Ralphie Parker (pripovijeda): Devedeset sekundi kasnije, ja sam u jedinoj sobi u Kuća u kojoj dječak od devet mogao sjediti na privatnost i dekodiranje. Ah. "B" 

[Smijulji] 

Ralphie Parker (pripovijeda): Otišao sam u sljedeći. "E." Prva riječ je "biti." Da! Dolazilo je lakše sada. "U." 

[Smijulji] 

RANDY PARKER: Ajmo, Ralphie. Moram ići! 

Ralphie PARKER: Bit ću dolje, Ma. Gee čudo. "T." "O." "Budite sigurni da. "" Svakako "Što je? Što je Little Orphan Annie pokušavam reći? "Budite sigurni da se" što? MAJKA: Ralphie, Randy je dobio ići. Hoćete li, molim vas izaći? 

Ralphie PARKER: U redu, mama! Odmah ću se! Ralphie Parker (pripovijeda): Bio sam sve bliže sada. Napetost je bila strašna. Što je to bilo? Sudbina planete može držati u ravnoteži. 

MAJKA: Ralphie, Randy mora ići! 

Ralphie PARKER: Ja ću biti u pravu se, za Boga miloga! Ralphie PARKER (Pripovijeda): Gotovo postoji! Moji prsti letjeli! Moj um je bio čelik zamka. Svaka pora vibrirao. Bilo je gotovo jasno! Da! Da! Da! Da! 

Ralphie PARKER: "Budite sigurni popiti Ovaltine. " Ovaltine? Bijedno komercijalne? 

[Muziciranja] 

Ralphie PARKER: Gad jedan. 

[Smijeh] 

DAVID J. Malan: Pa da onda je pogled na ono kriptografije može biti za ovo-- a piti iz prošlost. Tako brzo najava. Ukoliko ste slobodni ova Petak u 13:15 i bi željeli da nam se pridruže za CS50 ručak, glava na ovaj URL ovdje. Prvi došao, prvi služiti kao i obično. No, s vremenom, mi ćemo biti sigurni da većina svatko tko želite sudjelovati može zakazati-mudar. 

Dakle žice. Imamo Zamyla-- kome Sada sam upoznao najvjerojatnije Problem je u Set 1-- čije Ime je precizirao čime. I pretpostavimo da upiše svoje ime u računalni program koji je s nečim poput getString. Da bi preuzeli one tipke, kako idemo o tome što predstavlja string, riječ, točka, ili više slova kao što su ovi ovdje? 

Razgovarali smo zadnji put o tome cijeli brojevi i problemi koji nastaju s cjelobrojnog preljeva i pomičnim zarezom vrijednosti i problemi koji nastaju u preciznosti. Sa žicama, mi barem imati malo više fleksibilnosti jer strings-- samo u stvarnom world-- može biti prilično proizvoljna duljina. Prilično kratka, prilično dugo. Ali čak i tada, idemo u Ocjenjuju da računala mogu ponekad ponestane memorije, a ne čak i pohraniti veliki dovoljno niz. 

Ali za sada, počnimo vizualizirati string kao nešto u tim kutijama ovdje. Dakle šest takve kutije, od kojih svaki predstavlja znak ili "Char." Dakle, podsjetiti da je "char" - C-H--R- je jedan od ugrađenih tipova podataka u C I ono što je lijepo je da možete koristiti da je na neki način kao sastavni blok, zagonetka komad, ako hoćete, da se formira Veći vrsta podataka koje ćemo i dalje nazvati "niz." 

Sada, ono što je korisno razmišljati o tome o stvarima kao što su žice na ovaj način? Pa, ispada da možemo zapravo iskoristiti ovu strukturu zapravo pristup pojedinih znakova na prilično jednostavan način. Ja ću ići naprijed i stvoriti spis pod nazivom "stringzero.c" ali ga možete zvati god želite. I na web stranici tečaja jest Već ovaj primjer unaprijed, tako da ne morate upišite sve van. 

I ja ću ići naprijed i prvo napraviti int main prazninu. I u roku od nekoliko dana, ćemo početi zafrkavati, osim ono praznina je tu, zašto je Int uz glavnu, i tako dalje. Ali za sada, neka je i dalje kopirati zalijepiti to. 

Idem proglasiti niz pod nazivom e. A ja ću se vratiti iz GetString bez obzira na vrstu korisnika u. To će biti jednostavna Program, nema nikakvih uputa, Samo ću na slijepo Očekujemo da korisnik zna što učiniti da i dalje ostane jednostavan. 

A sada ću imati za petlju. I unutar moje za petlje sam će imati int i dobiva nulu. I sam je, opet, samo konvencija, varijabla indeks za brojanje, ali ja bi mogao nazvati ovo što god želim. Ja ću učiniti sam manje than-- dobro Zamyla ime je šest slova. Tako da ću naporno kod koje postoji za sada. 

A onda i ++. I sada unutar njih kovrčava aparatić ću učiniti printf, i želim ispisati jednu lik u isto vrijeme. Tako da ću koristiti% C za možda prvi put. A onda želim ispisati svaki lik na vlastitu liniju. Zato ću staviti Malo Obrnuta kosa crta n postoji. Zatvori citat. 

A sada želim učiniti nešto ovdje. Želim ispisati specifično pismo u nizu, e, kao što sam iterating od nule na do šest. Drugim riječima, želim ispisati i'th karakter s. Sada kako mogu to učiniti? 

Pa baš kao i kutijama u ova reprezentacija ovdje, vrsta, dočarati pojam boks slova u, što na sličan način mogu to učiniti sintaktički u C jednostavnim navođenjem, Želim ispisati ť s-a i'th karaktera. Korištenje uglate zagrade na tipkovnici računala da je na US tipkovnici su uglavnom iznad povratnu tipku. 

Dakle, to nije baš točno ipak, kao što ste vjerojatno primijetili. Ali ja ću vrstom slijepo kretati ovdje. A ja ću učiniti da string 0. No, prije nego što sam to učiniti, neka je vidjeti ako mi Ne mogu predvidjeti neke uobičajene pogreške. Hoće li ovo prevesti? Ne, ja sam nedostaje cijela hrpa stvari. Knjižnice Čuo sam. 

Zato što header datoteke možda želim dodati ovdje? Da. 

PUBLIKA: Morate standardni I / O [nečujan] 

DAVID J. Malan: Izvrsno. Dakle, trebam standardni I / O. Za ono što Svrha želim standardnu ​​I / O? Za printf. Tako su stdio.h. I također predlaže da su CS50 knjižnica iz kojeg razloga? Da bi konce. Pa ćemo vidjeti što CS50 knjižnica radi stvoriti taj pojam nizu. No, za sada, možete samo misliti to kao stvarni tip podataka. 

Tako da se čini da se malo očistiti. A sada ću ići naprijed i doista ne čine niz 0. Sastavio. Dakle, to je dobro. Dakle ./string0 neka mi uvećali tako možemo pogledajte pobliže što se događa. Unesite. Z-A-M-Y-l-unos. I mi smo tiskati na Zamyla ime. 

Dakle, to je jako dobro. Dakle, sad idemo naprijed i pokrenuti ovaj program jednom, i tip iz Daven puno ime. Iznenađenje, iznenađenje. Unesite. Hmm. Nismo tiskani Daven-a puna ime ispravno. Sada bi to trebalo biti očito u osvrt zbog čega, vrsta, glupo dizajn odluka? 

Da, teško kodirano šest unutar moja za petlje. Sada sam to učinio samo zbog Znao sam Zamyla ime će biti šest slova. No, sigurno to nije opće rješenje. Tako ispada možemo dinamički shvatiti duljinu niza pozivom na funkciju nazvanu strlen. 

Opet, namjerno jezgrovito nazvan jednostavno da bi ga više prikladan za tip. No, to je sinonim uzimajući duljinu niza. Ja ću se vratiti u svoj terminal prozor i ponovno pokrenuti prevodilac. No, to je vikati na mene. Implicitno proglašenje funkciju knjižnicu strlen s tipom unsigned int const-- Ja sam izgubljen. Kompletno. 

Dakle, pogotovo što je vaš Oči početi glazuru preko s porukama o pogreškama kao što je ovaj, fokus iskreno se na prvih nekoliko riječi. Znamo da je problem u Linija 8, kao što je ovdje navedeno. I to je u string-0.c. Implicitno progla Funkcija knjižnica strlen. Tako da uglavnom ide biti uzorak poruka o pogreškama. Implicitno izjavljuje nešto. 

Dakle, ukratko, ono što se činilo da se učinili s obzirom da se postroje 8, ovdje. Što bi moglo biti rješenje biti još Ako ste nikada nije korišten strlen sebe? 

PUBLIKA: Dio drugačiji knjižnice? DAVID J. Malan: Dio od različitih knjižnica. Dakle, to je izjavio, da se tako izrazim. To se spominje u nekim datoteke osim stdio.h i CS50.h. A gdje je to definirano? Da budem iskren, ti ili opet samo znam ovo s vrha glave, ili Google Ovo i saznati. Ili to znaju, ja sam otvorio u CS50 aparati program terminala, koji je samo velika, preko cijelog zaslona verzija što je u dnu prozora gedit-a. 

I ispostavilo se da postoji Slično jezgrovit naredbe, pozvao Čovjek za uporabu, gdje, ako ste upisali naziv funkcije i pritisnite Enter, vi ćete se vratiti prilično Arcane dokumentacija. To je samo tekst koji se općenito izgleda malo nešto poput ovoga. To je malo neodoljiv na prvi pogled. Ali iskreno ću neka moje oči glazura nad a samo usredotočiti na dio Stalo mi je za trenutak. 

Koji je to. Koji izgleda kao strukturno nešto sam upoznat s. Doista stranica čovjek, tako govoriti, reći će u ono zaglavlje podnijeti funkciju kao strlen definiran. Zato ću se sada vratiti na gedit. I ja ću ići naprijed i dodajte ovdje #include i spremite datoteku. 

Idem za brisanje zaslona s Kontrola L Ako ste se pitali. A ja ću ponovno pokrenuti marku string.0, sastavlja ovaj put. ./string.0 Zamyla. To se činilo da rade Pusti me naprijed i to ponoviti sa Davenport. Unesite. I to je, također, činilo se da raditi. 

Dakle, možemo učiniti nešto bolje od toga, ipak, možemo početi s urednim stvari do samo malo. A ja ću se zapravo uvesti još jednu stvar sada. Ja ću ići naprijed i Spremi ovo u drugoj datoteci. A ja ću nazvati ovu sliku string1.c samo biti u skladu s pravilnikom moći ćete pronaći na internetu. 

I neka je usredotočiti se na isti broj. Ispada da sam je vrsta uzimanja zdravo za gotovo činjenicu da je moj laptop, i opet, CS50 aparat ima puno memorije, puno RAM-a, puno bajtova prostora u kojem mogu pohraniti nizove. 

No, stvarnost ako sam upisali dugo dovoljno i dovoljno tipke, Mogao bih u tipu teorije u više znakova od mog računala fizički ima memoriju za. A to je problematično. Slično kao int može samo računati tako visoko, u teoriji, možete strpati samo toliko znakova na vašem računalu RAM ili Random Access Memory. 

Tako sam bolje je predvidjeti taj problem, čak i iako bi to moglo biti rijetka Kutak za slučaj, da se tako izrazim. Ne dogoditi da se često, moglo dogoditi. A ako se to dogodi, a ja ne predvidjeti i program za njega, moj program bi mogao raditi tko zna što. Freeze, objesiti, ponovno podizanje sustava, što god. Nešto predviđa se može dogoditi. 

Dakle, ono što ću učiniti Sada, od sada doista, je prije nego što sam ikada slijepo koristiti varijablu kao da je s je dodijeljena povratnu vrijednost neke druge funkcije kao što su getstring, Idem kako bi bili sigurni da je njegova vrijednost vrijedi. Dakle, ja znam samo iz pročitavši CS50 je dokumentacija za getstring, što u konačnici ćemo vas uputiti na, da getstring vraća poseban simbol naziva NULL, N-U-l-L u svim kape, ako nešto pođe po zlu. 

Pa normalno, vraća string. Ali inače, ako se ne vrati N-U-L-ja-- smo na kraju ćemo vidjeti što to zapravo means-- to samo znači se nešto loše dogodilo. Sada to znači, baš kao u Scratch, Ja mogu provjeriti stanje ovdje u C, ukoliko ne podudara NULL. Dakle, ako ne ovo vidio, to samo znači da nije jednako. 

Dakle, to je suprotno od jednake jednakima, koji je, podsjetimo, razlikuje od jednog jednaka, što je zadatak. Dakle, ako i nije jednako NULL, tek onda napraviti Želim da izvrši ove linije koda. Dakle, drugim riječima, prije nego što sam zaroniti u slijepo i početi Ponavljanje i kroz S, a to liječenje kao da se radi o slijedu likovi, ja ću prvo provjeriti, čekaj malo, je definitivno ne jednak ovom posebnom vrijednosti, NULL? 

Jer ako je, loše stvari mogu dogoditi. A za sada, pretpostaviti da loše stvari događa znači vaš program ruši, a vi ne možete nužno oporaviti. Pa iskreno, to izgleda ružnije. To je vrsta zbunjujuće sada niti pogledati. No, to će postati više upoznati prije dugo. 

Ali ja ću predložiti sad jedna druga poboljšanja. To je poboljšanje za ispravnost. Moj program je sada više točno, jer U rijetkim slučajevima kad nema dovoljno memorije postoji, ja ću ga nositi, a ja ću učiniti ništa. Ja barem neće srušiti. 

Ali ajmo napraviti konačnu verziju ovdje. I spis pod nazivom string2.c. Ja ću zalijepiti da Isti broj samo na trenutak, i ja ću naglasiti ovo linija, 11, evo, samo na trenutak. Sada stvarnost je da pametne prevodiocima kao jeka mogao popraviti ovo za nas iza kulisa bez našeg ikada znao. No, razmislimo o ovome osnovi kao problemski dizajn. 

Ova linija koda je, naravno, govoreći, inicijalizirati varijablu neke sam s 0. To je prilično jednostavan. A opet što je to izjava, evo, i ++, radi? Mi smo to vidjeli, ali smo nije stvarno pričati o tome. 

PUBLIKA: povećavati ja. 

DAVID J. Malan: povećavati ja. Pa na svakoj iteraciji kroz Ova petlja, svaki ciklus, ti si ja povećavati za jedan. Tako se dobiva veći i veći, a Veći do petlje prestaje. Kakav je raskinuti? Pa tu je ovaj srednji stanje koje smo koristili prije. Vidjeli ste i na korak po korak u P setu. 

Ali što je to rekao? Učinite sljedeće petlju tako dok sam je manje od onoga? PUBLIKA: duljina niza. DAVID J. Malan: duljina niza. Dakle, to prevodi prilično čisto na engleskom jeziku u tom smislu. Sada je problem je u tome što svaki put kada sam ponoviti kroz tu petlju u teoriji, Ja tražim ovo pitanje. Je li manje od duljine niza s? Je li manje od duljine niza s? 

Sada je i promjenu na svakoj iteraciji? To je. Zbog ++. Dakle, svaka iteracija i sve je veća. Ali je i sve je veća, ili manja, ili promjena uopće? Ne Dakle, u pogledu dizajna, jedne od osi duž koje ćemo pokušati procijeniti kôd u razredu, to se osjeća glupo. 

Kao što doslovno, na svakoj iteraciji ove petlje tražeći Isto prokleto pitanje opet, i opet, i opet, i doslovno nikada se neće promijeniti. Barem ako se ne dira s, a pokušava promijeniti sadržaj s. Dakle, ja mogu napraviti nešto bolje od ovoga. 

A ono što ću učiniti je ne proglasiti samo jedan varijable i, ali druga varijabla ću samovoljno, ali konvencionalno, zovu ga n. Dodjela n jednak Duljina niz s. I onda ovdje, ja ću napraviti pametan malo optimizacije, tako reći, da je na kraju dan više nije točna ili ne manje točna nego prije. No, to je bolji dizajn. U činjenici da sam koristeći manje vremena, manje procesora, tako razgovarati, odgovoriti na isti Pitanje, ali samo jednom. 

Bilo kakva pitanja o tom generalu načelo usavršavanja, kažu, program je učinkovitost? Da? PUBLIKA: Zašto ti koristiti [nečujan]? DAVID J. Malan: Dobro pitanje. Pa zašto mi staviti ++ na kraju I umjesto da se početak I? U ovom slučaju, to je nema funkcionalni utjecaj. I općenito, ja imaju tendenciju da upotrijebite operator Postfix tako da je malo jasnije kako je kada je operacija se događa. 

Za one koji nisu upoznati, postoji još jedan izjave kojom bi mogli raditi ++ sam se. To su funkcionalno protuvrijednost u ovom slučaju jer ne postoji ništa drugo oko tog incrementation. Ali možete smisliti slučajevi i linija koda u kojem to čini razliku. Dakle, generalno, mi ne čak i razgovarati o ovom jednom. Jer iskreno, to čini vaš Kod seksi, a vrsta kabanicu, i manje znakova. No, stvarnost je da je puno teže, Mislim, čak i za mene završiti moj um oko nje se ponekad, redoslijed operacija. Dakle, kao što je na stranu, ako stvarno ne sviđa, iako je to nekako seksi potrazi, također možete napraviti i + = 1, koji je ružniji verzija Ista ideja za Postfix incrementation. 

Kažem to i ti treba ismijavati njega, ali će doći vidjeti kod kao nešto lijepo prije dugo. 

[Smijeh] 

DAVID J. Malan: Pravo? Da. Pitanje je u sredini. 

PUBLIKA: Da li je potrebno reći int n? DAVID J. Malan: Radiš Nije potrebno reći int n. Pa zato što smo već rekli int, ne trebate ga ponovno reći. Kvaka je u tome što je n mora biti isti tip podataka kao i. Dakle, to je samo praktičnost ovdje. Da. 

PUBLIKA: Možete li ići preko tiskanih Znak s nosača ja opet? DAVID J. Malan: Apsolutno. Dakle% c, pozvati iz prošlog Vrijeme je samo rezervirano mjesto. To znači staviti char ovdje. backslash n, naravno, jednostavno sredstvo stavi u novi redak ovdje. Tako da samo ostavlja, sada, Ovaj komad nove sintakse. A to je doslovno govoreći, zgrabite Niz zove e i ići dobiti svoj i'th karakter, da se tako izrazim. 

A ja bi rekao i'th karakter jer na svakoj iteraciji ove petlje to je kao da smo se ispisuje van, prvi nosač s 0, kao programer može reći. Zatim s nosača 1, a zatim s Nosač 2, zatim 3, zatim 4. Ali, naravno, to je promjenjiva, pa sam samo to izraziti i. 

Ključ je, međutim, da shvatite, pogotovo ako ste ne bio acclimating na ovome svijetu programiranja, gdje smo sve Čini se brojati od nule, moraš početi brojati od nule sada. Jer žice, prvi znak, Z u Zamyla je za dobru iu zlu će živjeti na mjesto broj nula. 

U redu, neka mi dovedu nas ovdje na Zamyla i vidjeti što se zapravo događa na ispod haube. Dakle, postoji taj pojam tipa lijevanje. Možda ste zapravo igrao s tim već, možda i za hakera izdanje P postaviti jedno. Ali tip lijevanje samo se odnosi na Sposobnost u C i neki drugi jezici pretvoriti jednu vrstu podataka u drugu. 

Sada kako bismo mogli vidjeti prilično otvoreno iznese? Dakle, to, podsjetimo, je početak od engleske abecede. A kontekst, podsjetimo, od kao i prije tjedan dana je ASCII. American Standard Code za Razmjena informacija. Koji je samo jako dug put govoreći preslikavanje iz pisama brojevima, a od brojeva do slova. 

Dakle, kroz sam ovdje, dot dot točaka, linija s, podsjetimo, decimalni broj 65 na gore. I nismo razgovarali o tome izrijekom, ali sigurno postoji slična brojevi za mala slova. I doista, postoje. Svijet odlučio nekoliko godina Prije da je mala, mala slova, će biti 97. I malo b ide da se 98, i tako dalje. 

A za bilo koju drugu tipku na vaša tipkovnica, postoji će biti sličan uzorak bitova. Ili ekvivalentno, decimalni broj. Dakle, pitanje pri ruci, dakle, kako možemo zapravo vidjeti ispod haube? Tako da ću ići preko gedit opet. I umjesto da tipu ovo je jedan od nule, Ja ću ići naprijed i Samo otvori nešto iz današnje koda zove ASCII nula. 

I ASCII nula izgleda ovako. Tako ćemo zamotajte naše umove oko ovoga. Dakle, prvo, ja sam komentirao kod države, što je lijepo. Zato što je to doslovno mi reći što da očekujem, prikazati mapiranje za velikih slova. Sad ja ne znam točno što sam time reći, pa ćemo zaključiti. 

U engleskom jeziku, možda Nešto techie engleski, što se linija 18 pojaviti da se radi za nas? Samo 18 linija. Što to izaziva? Što će to kick off ovdje? 

PUBLIKA: petlja. 

DAVID J. Malan: petlja. I koliko puta je Hoće li to ponoviti? PUBLIKA: [ubacivanjem Glasovi] šest puta. DAVID J. Malan: Nisu šest puta. PUBLIKA: 26 puta. DAVID J. Malan: 26 puta. Da, žao mi je. 26 puta. Zašto? Pa, to je malo čudno, ali Ja sam počeo brojati od 65 godina. Što je čudno, ali nije u redu. Nije loše za reći. I ja radim to samo jer, za ovaj primjer, Ja sam vrsta anticipirajući da je kapital bio 65. Sada to nije najelegantniji način da to učinite, vrsti tvrdi koda ezoterične vrijednosti koje nitko ne je ikada očekuje da zapamtite. 

Ali za sada, primijetiti da sam Time se kroz 65 plus 26. Jer očito sam i ja uopće ne želim učiniti aritmetičke u mojoj glavi. Dakle, ja ću pustiti prevodilac to učiniti. No, tada na svakoj petlji, svaka iteracija petlje, ja sam povećavati ja. 

Dakle, sada to izgleda malo zagonetan. Ali mi bi trebali imati osnovnu zgradu blokovi s kojima se razumije. % C je samo rezervirano za char. % I je rezervirano za int. I ispada da pomoću toga Novi sintakse, ovo usputna, tako govoriti, pa je tip podataka unutar zagrada, Ja mogu prisiliti prevodilac za liječenje Nisam je cijeli broj, ali kao char. 

Time mi pokazuje karakter protuvrijednost tog broja. Sada ovdje dolje, ovaj kod je skoro identično. Samo sam htjela napraviti Super eksplicitan činjenica da sam s početkom u 97, koja je mala slova. Na gore kroz više od 26 slova. A ja sam opet doing--, lijevanja i, da se tako izrazim. Ili tipa lijevanje ja, da se tako izrazim. 

Od int na char. Dakle, krajnji rezultat će biti, iskreno, informacije već znamo. Ja ću napraviti ascii-0 ne dot-- točke c. Obavijest, vjerojatno je da pogreška što sam upravo učinio slučajno. Napraviti ASCII-0. Sada ću učiniti ./ascii-0. Ja ću zumirati, a na žalost to će za pomicanje off zaslonu. Ali vidimo cijelu tablicu gdje Karte za 97, b karata do 98, a ako smo dođite do daljnjeg Naravno, mape 65. Dakle, ovo je samo reći da je Što smo propovijedanje, Tu je ovo ekvivalenciju, u stvari slučaj u stvarnosti. Tako brzo modifikacija to. Dopustite mi da se otvori ascii-1.c. I primijetiti pametan, neka vrsta od, pojašnjenje toga. To je ascii-1.c, i primijetiti ovu ludu stvar. 

I to stvarno dobiva na srcu što računala rade. Iako mi ljudi bi ne računaju se u smislu letters-- Ne počnu razmišljati, sve u redu onda b, i koristiti one brojati fizičke predmete. Vi naravno možete reći da želim inicijalizirati neki varijablu nazvanu c-- ali mogao sam to nazvao anything-- tako da c je inicijalno kapitala A. 

Jer na kraju dana, na računalu ne zanima me što ste skladištenje, to je samo stalo kako želite iznijeti tu informaciju. Kako želite da računalo na tumače da je uzorak bitova? Dakle, to nije nešto što sam bi općenito preporučiti radi. To je zapravo samo primjer prenijeti da možete apsolutno formatirati cijeli broj na char. Jer ispod poklopac od char naravno je samo broj 0-255. 

Dakle, možete sigurno staviti ga unutar int. A što je ovo također pokazuje je da smo može pretvoriti iz jednog upisati u drugu, ovdje, konačnici ispisuje istu stvar. A u stvari, to ću popraviti online-- je trebao reći, opet, ovdje. Dopustite mi da ovo počistiti on-line, a mi ćemo vidi u online prohod po potrebi, ono što je bilo namijenjeno. 

U redu. Tako posljednji primjer sada uključuje A-ih i B i onda ćemo uzeti stvari na višu razinu. Dakle, s tih i b-ih i c-a u kapitalizaciji i ekvivalencije istih, ajmo pogledajte na ovom primjeru, ovdje. Još jedan primjer koda. Otvorit ćemo jedan koji je Već je napravio, pa smo ne morate ga upisati sve iz nule. 

I primijetiti u očekivanju koristimo više zaglavlje slika, među kojima je naš novi prijatelj, string.h. Sada to izgleda, na prvi pogled pogled, pomalo zagonetan. No, da vidimo, ako ne možemo razmišljati kroz ono što se ovdje događa. Prvo sam se niz od korisnika, i ja staviti taj niz u varijablu pod nazivom e. Copy paste od prije. U liniji 22, ja sam očito radi upravo ono što Ja sam maloprije, ja iterating više likova u sekundi. 

A nove trikove ovdje koriste Duljina niza, maloljetnik optimizacija pohranjivanja duljinu niza u N, umjesto da zovete opet strlen, i opet, i opet. I samo provjerite da li je manji od n. Sada ovdje, stvari se Malo zanimljiva. Ali to je samo prijava tog istog novu ideju. Ono što na engleskom ne a nosač i predstavlja? 

PUBLIKA: Brojanje svaka znakova [nečujan]. 

DAVID J. Malan: Brojanje svaki lik. I još više jezgrovito, a nosač i predstavljaju ono? Biste li rekli. Ne bi vas na licu mjesta ovdje. 

PUBLIKA: Well-- DAVID J. Malan: Dakle, ako je riječ je-- ako Niz je Zamyla, koji starts-- PUBLIKA: --Morate bave likovi separately-- DAVID J. Malan: Dobro. Točno. Uglata zagrada zapis vam omogućuje pristupiti svaki lik pojedinačno, pa e nosač 0 će biti Prvi znak u nizu. a nosač 1 će biti drugi, i tako dalje. Dakle, postavlja se pitanje što tražim, Ovdje, u ovom stanju je što? Je i'th karakter s Greater od ili jednak mala slova? A što to znači, ovdje, s dvostrukim znakove za? PUBLIKA (ZAJEDNO): I. DAVID J. Malan: I. To je samo ekvivalent za to. I nije ključna u C, morate Korištenje, dosadno, znak za struju znak za struju. A to, s druge strane, traži se s je i'th karaktera manji ili jednak u mala slova Z? A opet, ovdje gdje razumijevanje temeljni Provedba Računalo ima smisla. Uočite da, iako imam dot dot dot tamo, Izgleda kroz z malim slovima su Sve susjedne vrijednosti iz 97 gore. 

I isto za velika slova s ​​početkom u 65. Dakle takeaway, a zatim, je da je na engleskom jeziku, Kako biste opisali što linija 24 radi? Da? 

PUBLIKA: Dana 24. to je ček vidjeti da li je svaki lik je malo slovo. DAVID J. Malan: To je provjeriti jesu li Svaki lik je malo slovo. Dakle, čak i više jezgrovito, je i'th karakter s malim slovima? To je sve što smo izražavajući ovdje logično, malo zagonetno, ali konačnici prilično otvoreno iznese. Je S-a i'th znakova malim slovima? 

Ako je tako, a evo gdje stvari dobili mali um savijanje samo na trenutak, ako je tako, idite naprijed i ispisati karakter. Dakle, to je samo rezervirano mjesto, ali ono lik? Zašto ja to radim a ja nosač umanjen za taj izraz ovdje? 

Pa primijetiti uzorak ovdje. Stvarne brojke ne smeta toliko. Ali primijetite da je 97 koliko smo daleko od 65 godina? 

PUBLIKA: 32. 

DAVID J. Malan: 32. Koliko daleko je 98 od 66? 

PUBLIKA: 32. 

DAVID J. Malan: Malo c iz Big C? 32. Dakle, tu je 32 hmelja iz jedno slovo u drugu. Pa iskreno, mogao pojednostaviti ovaj na to. Ali onda sam vrsta teško kodiranja Ova niska razina razumijevanja da nijedan čitatelj je ikada će razumjeti. Tako ću ga generalizirati kako sam Znam da mala slova su veći. Znam da su velika slova su manjih vrijednosti, ironično. 

No, to je učinkovito ekvivalent rekavši oduzmite 32 iz S nosača i. Tako je u okviru tih slova, ako je riječ se događa da se, mala slova , a ja oduzeti 32, kakav učinak to ima, matematički, na mala slova? PUBLIKA: Capitalizes-- DAVID J. Malan: to kapitalizira. I doista, to je razlog zašto naš Program se zove kapitalizirati nuli. Ovaj program ili kapitalizira pismo, nakon provjere, ako je to Doista malo slovo. Inače, u liniji 30, što trebam učiniti ako to nije malo slovo da sam gledajući na određeni iteracija u petlji. Samo ga isprintati. 

Dakle, ne mijenjaju stvari to nije ni malo slovo. Se ograničiti na Malo po malo z. Sada je to prilično kompliciranih. Ali na kraju dana, to Tako smo, jednom davno, morao provesti stvari. Ako sam umjesto toga otvoriti kapitalizirati jedan, Oh, hvala Bogu. Tu je funkcija zove se gornja koji može učiniti sve što smo upravo učinili na prilično niskoj razini. 

Sada se gornja Interesantno jer je proglašena u datoteci, i ti bi samo znali ovo provjerom dokumentacije, ili se javi, recimo, u razredu, gdje ona postoji, u datoteci naziva ctype.h. Dakle, ovo je još jedna nova prijateljica. I gornja radi upravo ono što mu ime sugerira. 

Možete proći u, kao argument, između ove zagrade, neki lik. Ja ću proći u i'th karaktera od S pomoću naše zavoljeti novi zapis uključuje uglate zagrade. I pokušajte pogoditi, što je povratak Vrijednost na gornji očito ide biti? Slovom. Slovom. 

Dakle, ako sam proći malim slovima A, nadamo se, po definiciji se gornja, to će se vratiti veliko A. Inače, ako to nije malo slovo u Prvo mjesto, samo sam ga isprintati. I doista, primijetiti Drugi prijatelj ovdje. Ne samo da postoji gornja, ali je niža, što zapravo odgovara na to pitanje za mene. 

Sada tko je pisao ove stvari, 10s prije više godina, znate što? Provodi se gornja i smanjiti pomoću koda kao što je ovaj. Ali opet, u skladu s ova ideja o odvajanju daleko, vrsta, niža razina Provedbeni detalji. I stoji na ramenima ljudi koji su došli prije nas, pomoću funkcije kao i na gornji i niži, što predivno dovoljno su lijepo imenovan je reći ono što im je činiti, je divno paradigma usvojiti. 

Sada ispada da ako sam pročitao Stranica čovjek za, recimo, da se gornja, Učim nešto drugo. Dakle, čovjek toUpper. To je malo neodoljiv. No, obavijest, ovdje je to spominjanje zaglavlje datoteke koje trebam koristiti. Kao na stranu, jer je to je zabludu, funkcija koristi ints umjesto znakova iz razloga provjere pogreške. Ali mi možda ćemo doći natrag na koje u budućnosti. 

Ali primijetiti, ovdje, na gornjim obraćenika Pismo C u velika slova, ako je to moguće. Dakle, to je prilično jednostavan. A sad budimo malo precizniji. Pogledajmo dio Čovjek stranica pod povratnu vrijednost. Vrijednost vratio je da u adaptiranom pismu. Ili C, ako je konverzija Nije bilo moguće gdje je c izvorni ulaz. Koji znam odavde, iz Argument da se gornja. 

Dakle, ono što je takeaway toga? Vrijednost vratio je da od adaptiranom pismu, ili c, izvorno pismo, ako pretvorbe nije bilo moguće. Što poboljšanja mogu sam, dakle da se moj broj je dizajn? Da? 

PUBLIKA: možete ukloniti drugdje. DAVID J. Malan: Mogu uklonite izjavu drugo, a ne samo izjava drugo. 

PUBLIKA: možete ukloniti [nečujan]. 

DAVID J. Malan: Mogu izvadite cijelu vilicu na cesti, ako je drugo uopce. Dakle, doista, neka mi se otvoriti Konačna verzija toga, kapitalizirati-2 i primijetiti koliko je, ako ćete, seksi, kod je sada sve, U to sam smanjio od nekih sedam ili tako linije na samo četiri, funkcionalnosti koje sam namjeravao jednostavnim pozivom na gornji, prolaze u S zagrada I, i ispis igrače, a rezervirano% C, slovo. 

Sada vjerojatno postoji bug, ili barem rizik od buga, u ovom programu. Dakle, samo da se vrati na raniju takeaway, Što bih trebao vjerojatno učiniti u ovaj program da bi ga više robustan, , tako da nema šanse da to može pad, čak iu rijetkim slučajevima? PUBLIKA: Uvjerite se da nije NULL. DAVID J. Malan: Uvjerite se da nije NULL. Pa stvarno, kako bi ovaj super pravilno, trebam napraviti nešto slično, ukoliko nije NULL, a zatim ići naprijed i izvršiti ta linija koda, što I onda mogu alineja tako, a zatim staviti u mojoj neposrednoj braće. Pa dobro vezanje zajedno od dvije ideje. Da? PUBLIKA: Možete li koristiti učiniti dok petlje, umjesto toga? DAVID J. Malan: Može Ja to učiniti dok petlje? PUBLIKA: --Morate želite biti sigurni da ste zapravo [nečujan]. DAVID J. Malan: Može Koristite li učiniti dok? Kratak odgovor, nema. Zato što ste o uvesti još jedan kutak slučaj. Ako je niz nulte duljine. Ako, na primjer, samo sam pogodio Ulaz, bez tipkanja Zamyla. Ja ću vam predati natrag stvarna niz, kao što smo na kraju ćemo vidjeti, da ima nula znakova. To je još uvijek niz, to je samo iznimno kratko. Ali ako koristite učiniti dok, idete na slijepo pokušati učiniti nešto s odnosu na tu žicu, i ništa ne će biti tamo. 

PUBLIKA: Pa, ako je učiniti [nečujan] dok S- DAVID J. Malan: Ma vidim, zadržati uzimajući niz od korisnika. Dakle, kratki odgovor, što mogao, i držati maltretirati im da vam dati niz koji je dovoljno kratko da stane u memoriju. Apsolutno. Upravo sam odlučio da ne. Ako oni ne daju mi ​​string I želim, dajem otkaz, ja odustajem. No, apsolutno, u tu svrhu, vi apsolutno može učiniti. 

Dakle knjižnice zaglavlje datoteke koje sad smo upoznati sa su to, ovdje. Standardna I / O, CS50.h, string.h, ctype.h, a tu su, zapravo, drugi. Neki od vas su otkrili matematike knjižnica u math.h. No, dopustite mi da vas upoznam, sada, da se ovaj resurs koji CS50 osoblje, Davin, i Rob, a Gabe posebice su sastavili. To će uskoro povezati na Web stranica Tečaj je. To se zove CS50 referenca. 

Koji samo da vam dati brzi Okus joj, radi na sljedeći način. Pusti me da reference.cs50.net. Vidjet ćete na lijevoj ruci stranu neodoljiv popis funkcija koje dolaze s c. Ali, ako mi je stalo, za sada, o nečemu poput strlen, Mogu ga upisati tamo. On filtrira po spisku samo ono što mi je stalo. Ja ću ga kliknite. A sada na lijevo, vidjet ćete što se nadamo je izravnija, ljudski prijateljski objašnjenje kako Ova funkcija radi. 

Vraća duljinu niza. Evo sinopsis, evo kako koristite ga u smislu zaglavlja datoteke, iu smislu onoga što funkciji Izgleda da je u pogledu svojih argumenata. I onda ovdje, vraća duljina niza. No, za one od vas više udoban, zapravo možete kliknuti udobniji, a sadržaj toga stranica, sada, neće mijenjati da su zadane vrijednosti onoga što dobivate pomoću man stranicu. 

Drugim riječima, CS50 Referentna je pojednostavljenje umjetnih stranicama od strane osoblja, za studente. Osobito, oni manje udobno i između, tako da ne moraju pokušati wrap vaš um okolo, iskreno, Neki prilično zagonetan sintakse i dokumentacija negdje. 

Dakle, imajte to na umu u danima koji dolaze. Pa evo, opet, je Zamyla. Idemo sada postaviti pitanje koje je malo humaniji dostupni. Zahvaljujući Chang, koji je bio ispis više slonova nonstop u posljednjih nekoliko dana. Imamo priliku dati najmanje jedan ih. Ako smo mogli dobiti samo jedan volonter doći na do crtanje po zaslonu. Kako je ovdje? 

Dođi gore. Koje je tvoje ime? ALEX: Alex. DAVID J. Malan: Alex. U redu. Alex, dođi gore. Mi smo o tome kako bi vidjeli svoje rukopisa na zaslonu ovdje. U redu, lijepo da zadovolji vas. 

ALEX: Lijepo ste se upoznali. 

DAVID J. Malan: U redu. Dakle, super jednostavna vježba. Bar nije visoka da dobili slona i danas. Vi ste u ulozi getstring. A ja ću samo reći niz koji ste stečen. I pretpostavljam da je vama, getstring, su pozvani. A čovjek, poput mene, ima upisali u Zamyla, Z-A-M-Y-L-a. Samo ići naprijed i pisati Zamyla na Zaslon se kao da ste ga stečen i spremio negdje u sjećanju. 

Ostavljanje prostora za ono što će biti nekoliko drugi words-- to je u redu, zadržati ide. 

[Smijeh] 

Dakle Zamyla, Izvrsno. Pa sad pretpostavljam da je vama, getstring, nazivaju se opet. I zato, ja Vam, na tipkovnica, s drugim imenom, Belinda. U redu. A sad sljedeći put getstring je nazvao sam upisati nešto poput Gabea, G-A-B-E. Vi stvarno uzimanje do srčanog radnu memoriju. Koji je crtež sve posve slučajno. U redu. 

[Smijeh] ALEX: Žao mi je moj rukopis je loše. DAVID J. Malan: Ne, to je u redu. A što je s Robom, R-O-B. U redu. Dobro. Pa nisam vam predviđaju bi vrsta stavi stvari na taj način. Ali možemo napraviti ovaj posao. Pa kako ste to polaganje iz tih kao broj znakova u sjećanju? Drugim riječima, ako mislimo to pravokutna crni ekran što predstavlja računala RAM-a ili memorije. 

I podsjetiti da je RAM-a je samo cijela hrpa bitova, i bajtova su cijela hrpa bitova. I bitovi su nekako provodi, u pravilu s nekim oblikom električne energije u hardver. Dakle, to je neka vrsta raslojavanje smo razgovarali o a sada se može uzeti zdravo za gotovo. Kako ste to odlučivanja gdje pisati Rob odnosu Gabe odnosu Belinda odnosu Zamyla? 

ALEX: Upravo sam to učinio u narediti da ste mi rekli. 

DAVID J. Malan: I to je istina. No, ono što upravlja gdje ste stavili Belinda je ime i Gabe ime? 

ALEX: Ništa? DAVID J. Malan: [smijeh] Tako to radi, to je u redu. Dakle, računala su malo sređenije od toga. I tako kad smo implement-- ostati tamo za samo moment-- kada smo zapravo provesti nešto takvo getstring u računalu, Zamyla mogla biti izložena prilično kao što ste učinili na zaslonu, tamo. 

A ono što je ključ za primijetiti ovdje, ono što je Alex učinio, je tu je vrsta razgraničenja među svaka od ovih riječi, zar ne? Nisi pisati Z-A-M-Y-L-A-B-E-l-l-N-D-A-G-A-B- Drugim riječima, postoji neka vrsta razgraničenja koji je čini se, vrsta, slučajni razmak između tih različitih riječi. No, to je dobro, jer mi ljudi sada mogu zamišljati da su to četiri različite žice. To je ne samo jedan slijed od puno znakova. Dakle, računalo, a zatim je, u međuvremenu, možda se niz kao Zamyla, staviti svaki od tih pisama unutar jednog bajta memorije. No, taj broj je znatno veći, Naravno, od šest znakova. 

Postoji cijela hrpa RAM-a. I tako od sada, to Rešetka kutija ide da predstavljaju ono što je Alex samo napravio ovdje na zaslonu. A sada, Alex, možemo vam ponuditi plave ili narančaste slona od Chang. ALEX: Ja ću uzeti plavu slona. DAVID J. Malan: plavi slon. Dakle, veliki pljesak, ako smo mogli, za Alex ovdje. 

[Pljesak] 

ALEX: Hvala vam. DAVID J. Malan: Hvala vam. Dakle Pakirani da, iako uzorak vrsta promijenila tijekom vremena, ovdje na brodu, bilo je to razgraničenje između različitih nizova Alex je dobio za nas. Sada računala, iskreno, mogao učiniti istu stvar. Mogli vrsta pasti žice nigdje u RAM-a. Ovdje gore, ovdje, ovdje, ovdje dolje. 

Oni su mogli učiniti upravo to. Ali, naravno, to je Vjerojatno nije najbolji planiranja. Zar ne? Ako sam zadržao molba Alex se dobili imena, vjerojatno je da će staviti još malo ovdje, možda se Ovdje, ovdje, ovdje, na kraju ovamo. No, s malo više planiranja, svakako, mogli bismo postaviti stvari više čisto. I doista, to je ono što računalo radi. 

No, kvaka je u tome što Ako sljedeći niz dobijem Nakon Zamyla je nešto kao Belinda, predlažu gdje smo mogli pisati Pismo B u odnosu na toj mreži? Kamo bi otišao? Za desno od A, ispod Z, ispod a? Što bi vaši prvi instinkt bio? PUBLIKA: Ispod z. DAVID J. Malan: Dakle, ispod z. I to je prilično jednostavno, zar ne? To je vrsta uredan, to je ono što mi radimo na tipkovnici, kada smo udarili Enter, ili e-mail prilikom Popis s grafičkim oznakama stvari. No, stvarnost je da računala pokušati biti učinkovitiji, i nagurati sigurno koliko podataka u RAM-a što je više moguće, tako da ne otpada bilo bajtova. Tako da ne otpada bilo kojem zaslonu za nekretnine. A problem je, međutim, da ako smo doslovno staviti pismo b nakon, kako ćemo znam gdje Zamyla ime završava a Belinda je ime počinje? Tako da ljudi samo predložio, dobro, pritisnite tipku Enter, bitno. Stavite ga dolje. Ili čak i Alex učinio, samo počnite pisati Sljedeći ime ispod prethodnog, i ispod tog jednog, a zatim ispod tog jednog. To je vizualni znak. 

Računala su još vizualnog znaka, ali to je malo kratak. To je to funky znak. Kosa crtica 0, što je možda podsjeća na obrnute kose crte n, i tako dalje, sada. Posebni escape sekvence. Kosa crtica 0 je način zastupa osam nula bitova u nizu. 0000 0000. 

Način izraziti da se ne pogoditi broj nula na tipkovnici, jer je u činjenici da je ASCII char. To izgleda kao broj, ali je zapravo decimalni broj koji predstavlja kružnoj glif, kružna pisma. U međuvremenu, Obrnuta kosa crta nula znači, doslovno stavio osam nula bajtova ovdje za mene. 

Dakle, to je nešto proizvoljno. Mogli smo koristiti bilo koji uzorak bitova, ali svijet odlučio nekoliko godina Prije, koja se predstavlja kraj nizu u memoriju, Samo stavite hrpu nula. Budući da možemo otkriti da. Sada to znači da ni slovo abeceda može biti zastupljen s nulama. 

Ali to je u redu, već smo vidjeli da mi koristimo 65 do 97 gore. Nismo se nigdje u blizini svih nula. Dakle Belinda u memoriju računala zapravo će ići ovdje. Ja sam ga izvući na žuto samo skrenuti pozornost na njega. I obavijest, također, ovo posve je proizvoljna. Ja sam ga privlači kao mreža. Kao, RAM je samo neki fizički objekt. To ne mora nužno redaka i stupaca, sama po sebi. To samo je dobio hrpu bajtova ugraditi u hardver nekako. Ali ako nakon Belinda I. upisali u Gabe ime, on će završiti ovdje u memoriji, a ako sam upisali u Daven ime, Na primjer, on će završiti ovdje. I ja mogu i dalje pisati još više imena. 

Na žalost, ako ja pokušati napisati izrazito dugi naziv, Možda ću na kraju ostati bez memorije. U tom slučaju, getstring je će se vratiti NULL, kao što smo rekli. No, srećom, barem u ovom vizualnom ovdje, nismo dobili baš tako daleko. 

Ono što je lijepo sad je da je ova Generalna ideja liječenja stvari kao da su u kutije je Predstavnik značajka C i puno jezika, poznat kao polje. Niz je drugi tip podataka. To je struktura podataka, ako hoćete. Struktura u smislu toga stvarno, vrsta, izgleda kao kutija, najmanje u vašem umu cijev. Niz je granično slijed istih tipova podataka, natrag na leđa na leđa na leđa. 

Dakle, niz, u drugom Riječi je niz broj znakova. Niz znakova. No, ispostavilo se da možete imati nizovi hrpe stvari. Zapravo, možemo staviti čak brojevi u nizu. Dakle, u obliku u kojem idemo za početak progla ove podatke struktura poznata kao polje također će koristiti uglate zagrade. Ali ovi četvornih nosači će imaju različito značenje u ovom kontekstu. 

I neka je vidjeti što slijedi. Pretpostavimo da sam otvorio do nove datoteke ovdje. I sam spasiti to kao ages.c. I ja ću spasiti to u mojoj mapi ovdje. A sada ću ići naprijed i počnite tipkati nešto kao što su CS50.h, uključuju stdio.h, int glavni prazninu. I onda unutar ovdje, želim prvo imati int zove dobi. 

A ja ću koristiti da bi dobili int od korisnika za njegovu ili njezinu dob. No, ovaj program je značilo da se koristi više ljudi, iz bilo kojeg konteksta. Imam niz ljudi. Svi oni moraju upisati u njihovom dob možda neki, ne znam, natjecanje ili događaj da ste stigli na. Dakle, sljedeća osoba, ja trebamo još jednu varijablu. 

Jer ako sam samo učiniti Dob dobiva getInt, to je će izmlatiti, ili prepisati Starost prethodne osobe. Dakle, to nije dobro. Dakle, moj prvi instinkt Možda, oh, u redu, ako želim dobiti više pučke ages-- nazovimo to age1, int života2 dobiva int, int age3 dobiva getInt. A sada ću koristiti Neki pseudocode kod ovdje. 

Učinite nešto s tim brojevima. Mi ćemo ostaviti za neki drugi dan ono radimo tamo, jer mi samo briga za trenutak O age1, života2, age3. Nažalost, jednom kad sam sastaviti ovaj program i stavio ga pred stvarnim korisnicima, ono što je bitno siromašni dizajn Odluka čini mi se da su napravili? Da? PUBLIKA: [nečujan] DAVID J. Malan: Da, Nisam ni pokušao shvatiti kako mnoge dobi ja zapravo stalo? Ako imam manje od troje ljudi ovdje, i stoga manje od tri uzrasta, Ja sam još uvijek slijepo očekuju tri. Ne daj Bože četvero ljudi pojaviti. Moj program jednostavno neće ni ih podržati. 

I tako to, duga priča Ukratko, nije dobra navika. Zar ne? Bio sam u biti kopiranje i Unošenjem koda i samo ugađati varijabilni imena. A, Bože moj, ako je imao, ne tri vijeku, ali je 10, ili 100, ili čak 6.500 studenti, na primjer. Ovo neće biti osobito Elegantna broj, ili održivi. Ti si idući u morati prepisati programa svaki put Vaš broj ljudi promjene. 

Dakle, srećom, u naš stvarni ages.c datoteka za danas, imamo više pametno rješenje. Prvo, ja ću posuditi izgraditi smo koristiti nekoliko puta, to učiniti dok petlji, kako bi se broj ljudi u sobi. Samo ću se gnjaviti korisniku, opet i opet, sve dok on ili ona mi daje vrijednost n to je pozitivan cijeli broj. 

Mogao sam koristiti, posljednja Vrijeme je dobiti pozitivan int. No, mi nemamo što za real, pa sam otišao naprijed i ponovno provesti tu ideju. Sada ovdje, ovo je novi trik. U liniji 27, kao i na komentare u 26 linija sugerira, Izjavljujem niz u kojem pohraniti svačija starost. 

Dakle, ako želite da biste dobili, a ne jedan int, ne Dva ori-, ali cijela hrpa ints. Naime n prirodni brojevi, n su možda biti tri, možda 100, možda 1000. Sintakse, sasvim jednostavno, jest recimo, koje podatke tipa želiš? Što želite nazvati koji komad memorije? Što želite nazvati mrežu da izgleda ovako slikovito? 

I na tipkovnici ovdje, kažeš koliko je velik želite niz biti. I tako je i ranije, kad sam rekao sintaksa je malo drugačija, mi smo još uvijek koriste uglate zagrade, ali kad sam objavljujući niz, broj unutar uglate zagrade sredstva koliko je velik želite niz biti. 

Za razliku od toga, kad smo bili sa s Nosač sam maloprije, s, niz, je doista niz broj znakova, ali kada ne izjavljuje varijable, kao s tom ključnom riječi ovdje, ti si jednostavno uzimajući specifični indeks, specifičan Element iz tog niza. Kada znamo da je, ostatak za to je jednostavan. Ako novi sam prvi put će ispisati što je dob osobe broj i. Gdje sam samo reći osoba broj jedan, Osoba broj dva, osoba broj tri. 

A ja samo radim aritmetika, tako da kao normalni ljudi, brojimo od jedan za to Program, a ne od nule. Tada sam nazvati getint, ali ja pohraniti Odgovor je u dobi zagrada ja. Koji je i'th dobi u nizu. Dakle, dok su posljednji put bili smo liječenje Te kutije su kao broj znakova za Zamyla ime, i drugi. Sada, ove kutije predstavljaju 32 bita, ili četiri bajta u kojem možemo pohraniti int, int, int. Svi koji, opet, su isti tip podataka. 

Sada sam napraviti nešto glupo, kao i vrijeme prolazi, samo opravdati pisanja ovog programa. I onda ovdje, ja opet ponoviti preko niza govore godinu dana, Osoba broj jedan volja biti nešto godina. I shvatiti da je math-- Mislim, ovo nije jako komplicirano arithmetic-- Ja samo dodati jednu njihovoj dobi. Dovoljno je da pokažu, opet, ovo. 

Baš kao što sam ja indeks u nizu, s, Dakle, mogu indeksa u niz dobi, kao da ne postoji. Dakle, gdje će to biti nas vode? Dakle, vidjet ćemo, u konačnici, Nekoliko stvari u danima koji dolaze. Jedan od njih, sve ovo vrijeme, kad pisanje svoje vlastite programe, kao što je Mario, pohlepni, kredit. Vi ste bili tipkati ime Program i tipke Enter. A zatim uzimajući korisnika ulaz. 

S getString, getInt, getLongLong, ili slično. No, ispostavilo se da je C potpore nešto što se zove naredbenog retka Argumenti, koji će nas pustiti zapravo se na riječi koje upisujete, na trepćući redak Nakon imena svoga programa. 

Dakle, u danima koji dolaze, te mogao upisati nešto poput Cezara, ili ./caesar broj 13, nakon toga. Vidjet ćemo kako se to radi. Jer doista, u Problem postaviti dva, mi smo će vas upoznati da malo nešto podsjeća Ralphie-a izazov ranije kartografije. Umjetnost remećenje informacije. To je, u stvari, vrlo je podsjeća na ono što Ralphie učinio. 

Ovo je primjer za šifriranje Algoritam se zove rot13, R-O-T 13. Što jednostavno znači okretati slova abecede 13 mjesta. A ako to učinite, vidjet ćete sada ono što je, možda, poznato izraz. No, način na koji ćemo koristiti to, u konačnici, je više općenito. 

U P postaviti dva, u standardnom izdanju, ćete provesti nekoliko šifri, jedan se zove Caesar, jedan se zove Vigenere. Obojica su okretni šifre, u to nekako okrenuti jedno slovo u drugu pismu. A Cezar je super jednostavna. Možete dodati jednu, dodate 13, ili neki broj i do 26 godina. Vigenere to radi na po slovo osnova. Dakle Vigenere, kao što ćete vidjeti u spec, je sigurnije. 

Ali na kraju dana, što vi ćete biti provedbi i P postaviti dva, Ključ je u tome da koristite oboje za šifriranje i dešifriranje. Pozivajući se na proces pretvaranja običan tekst, neka izvorna poruka, u Cypher teksta, koji je nešto kodiran. A onda ga opet dešifriranja. 

U hakerske izdanju, U međuvremenu, vi ćete biti zadužena s nečim sličnim u duhu, gdje ćemo vam dati datoteka, od tipičnog Linux, ili Mac ili Unix računalo pod nazivom Etsy lozinku, koja sadrži cjelinu Hrpa korisnička imena i lozinke. I oni su sve lozinke kodiran, ili raspršen, da se tako izrazim, točnije kao što ćete vidjeti u spec. 

A haker izdanje će izazov li uzimanje ulaz kao što je ovaj, i pucanja lozinke. To je, figuring out ono što Lozinka čovjekova zapravo bio. Jer, doista, lozinke uglavnom ne pohranjuju se u jasan, i općenito lozinke bi trebalo biti teško pogoditi. To nije čest slučaj. 

I ono što sam mislio da ćemo učiniti je zaključiti s par minuta pogled na posebno Loš izbor lozinki iz filma možda sjetiti nježno. A ako ne, trebali iznajmiti. 

[Video reprodukciju] 

-Helmet, Što đavo, što se događa? Što to radite mojoj kćeri? 

-Permit Me uvesti briljantni mladi plastični kirurg, Liječnik Phillip Schlotkin. Najveći nos posao čovjek u Cijeli svemir i Beverly Hills. 

Tvoja Visosti. 

-Nose Posao? Ne razumijem. Već je imao operaciju nosa. To je bio njezin slatki 16 prisutna. 

Ne, to nije ono što mislite. To je mnogo, mnogo gore. Ako mi ne daju Kombinacija na zračni štit, Liječnik će vam dati Schlotkin kćer natrag svoju staru nos. - [Bori] Nooooooooooooo. Odakle vam to? 

-Sve Pravu. Ja ću reći, ja ću reći. 

Ne, tata, ne. Ne smijete. 

Ti si u pravu draga moja. Nedostajat će mi tvoj novi nos. Ali neću im reći Kombinacija bez obzira. 

Vrlo dobro. Liječnik Schlotkin, učiniti svoje najgore. 

Moja zadovoljstvo. 

Ne! Čekaj, čekaj. Ja ću reći. Ja ću reći. 

-Ja Znao da će to raditi. U redu, daj ga meni. 

-The Kombinacija je jedan. 

Jedan. 

Jedan. -Dva. -Dva. -Dva. Troje. Troje. Troje. -Četiri. -Četiri. -Četiri. Pet. Pet. Pet. Znači kombinacija je jedan, dva, tri, četiri, pet. To je najgluplji kombinacija Sam ikad čuo u životu. To je vrsta stvar koju idiot bi imati na svojoj prtljazi. 

Hvala, Vaše Veličanstvo. 

[REMOTE klikova] 

Što si učinio? 

-Ja Isključen zid. 

Ne, nisi, ti isključen cijeli film. 

-Ja Zacijelo pritisnuo krivi gumb. 

Pa, vratite ga na! Stavite film ponovno! 

Da, gospodine! Da, gospodine. Pusti idemo, Arnold. Dođite, Gretchen. Naravno da znam da ću moram vam naplatiti za to. Pa? Je li uspjelo? Gdje je kralj? 

-To Radili, gospodine, mi imaju kombinaciju. Sjajno. Sada možemo uzeti svaki zadnji dah svježeg zraka iz planeti Druidia. Što je kombinacija? 

Jedan, dva, tri, četiri, pet. 

Jedan, dva, tri, četiri, pet? Da. -To Je nevjerojatna. Imam isti Kombinacija na svoju prtljagu. Pripremite SpaceBall 1 za Neposredna odlazak. 

Da, gospodine. 

-I Promijeniti Kombinacija na svoju prtljagu. [VRATA ZATVARANJE SOUND] [Zveckanje VRATA udaranja kacigom] -Ahh. [END video reprodukciju] DAVID J. Malan: To je to za CS50, vidimo se sljedeći tjedan. Narator: A sada, duboko Misli, po Daven Farnham. 

DAVEN FARNHAM: Coding u C je Puno teže nego ispočetka. printf, Scratch je laž. 

[Smijeh TON]