SPEAKER 1: V redu. Dobrodošel nazaj. To je teden Dva CS50, in imamo Doslej so uporabo funkcij, vendar jih v veliki meri za samoumevno. Uporabili smo printf ki ima stranski učinek tiskanje stvari na zaslonu. Uporabili smo dobili, int, float dobili. Toda kaj, če si dejansko želite ustvariti lastne funkcije, kot nekateri ste morda že začelo stori za Problem Set One, čeprav ni nujno potrebno? No, gremo naprej in ponovno, da problem samo vprašam uporabnika za njihovo ime in tiskanje nekaj na zaslon, vendar poskusite dejavnik na nekatere o enotnosti, ki smo jo videli v našem zakoniku doslej. Torej, s tem mislim naslednje. Jaz grem naprej in ustvariti nov program, samo pokličite je hello.c kot ponavadi. Jaz grem naprej in sem dal vključujejo standardno io.h na vrhu. Bom jaz dal tudi preemptively CS50 knjižnico tako, da Da ne bom nadrla, ki jih prevajalnik. In zdaj bom šel naprej in razglasi int, glavno, nična. In potem je tukaj, to je, če hočem začeti oddajajo funkcionalnost kakšno drugo funkcijo, da sem sam gre za pisanje, vendar to ni Trenutno obstajajo. Recimo, da sem hotel napisati funkcijo, ki mi omogoča, da izpisal hello, vejice in potem nekaj uporabnikov ime. Namesto da bi še naprej printf storiti Pozdravljeni,% s, ne bi bilo lepo, če je bilo samo funkcijo imenovano Ne printf pa ime tisk? Torej, z drugimi besedami, želim, da bi lahko napisati program, ki počne nekaj kaj takega. Najprej bom printf povedati svoje Ime, s čimer se spodbudi uporabnik Daj mi njegovo ime, nato pa sem gre za uporabo že znanih String s, da razglasi niz. Daj mi spremenljivko tipa niz, to je klic, in shranjevanje, ki Rezultat kliče dobili niz. Zdaj pa v zadnjih tednih, bi moral Nekoliko tediously storiti Pozdravljeni,% s / n. In z drugimi besedami, smo to videli Primer kup časov, in to je trivialen primer zato, ker je samo ena vrstica kode, tako da je res ni big deal, da ponovno tipkanje. Recimo, da ta vrstica kode dejansko so postali breme, in to ni ena vrstica kode, ampak to je 10 vrstic kode nekaj tednov od zdaj, in ti si samo naveličal kopiranje in lepljenje ali Prekucavanje to isto kodo. Ne bi bilo lepo, namesto da delaš printf Pozdravljeni,% s in tako naprej, ne bi bilo lepo, če je bilo le Funkcija se imenuje ime tiskanja, ki je argument - z drugimi besedami, je potreben vložek - in potem podpičjem. Tako da funkcija, ne bi bilo je lepo, če bi obstajal? Potem mi ne bi bilo treba skrbeti za kar printf, kakšne% s in vse Ti zapleti, ki so ni vse tako zanimivo. Prav tako so koristne. Torej ime tisk, žal, ni bilo izumil nekaj pred 40 plus let. Nihče ni mislil, da ga napisali. Ampak to je lepota ob programski jezik, tako kot v Scratch lahko določite meri blokov, tako v C in najbolj vsak jezik, lahko opredeliti svojo funkcijo, lahko si določite svoje funkcije. Torej, čeprav smo dobili glavnega jih avtomatično zastonj, lahko razglasi naše naloge. Torej bom narediti nekaj prostora tu gor up top, in bom prijaviti moja lastna funkcija, ki pa bo skrbel malo čudno na prvi, ampak bomo prišli nazaj na to kmalu. Jaz bom rekel nična, s čimer navedbo te funkcije ne kar ima stranski učinek, vendar ne vrne nekaj, da me v enak način, da dobite int ali dobili niz sama. In jaz bom dal to funkcijo naštejemo imena tiskanja in bom opredeliti, da ta fant se dogaja, da sprejmejo niz, bom poklical, da Ime niz. Jaz bi ga poklical kar hočem, ampak jaz želim moja koda, da se sami dokumentiranje. Z drugimi besedami, če bi od vas odpreti to datoteko in jo prebral, bi lahko nekako izpeljati iz imena, ki vhod kakšno vlogo je moral igrati. In zdaj spodaj, da bom za začetek kodrasti naramnicami in zaprta kodrasti naramnicami, in tako opazili, da sem po isti vzorec na progah štiri do sedem, kot Sem bil po za dober teden, plus Zdaj med, recimo, devet linij in 14, ki sestavljajo glavni. Z drugimi besedami, natisniti ime je še ena funkcija. Zdaj, prevajalnik ne bo vedel poklicati to stvar samodejno ker sem dobesedno izumili, vendar bo še vedno vedel, da pokličete glavni samodejno, nato pa seveda v vrstica 13, kličem svojo funkcijo. In ker sem izjavil, da funkcija up na liniji štiri pred glavnimi, to se bo naučil prevajalnik kaj citiram, v navednicah, "ime print" pomeni in kaj bi morala storiti. Tako da sem nekako mu daje novo navado blok v kontekstu, recimo, Scratch. Torej tukaj, sem lahko dal to zelo pogosti ali ponavljajoči vzorec kode Držim pisanje v razredu, printf % S hello,% s / n ", - Kaj želim povedati tukaj? S? Torej, želim dati ime v tem kontekstu. Torej opazili malo dihotomija tukaj. Ker sem razglasila svojo funkcijo in sem nekoliko samovoljno imenuje natisne ime, in ker sem navedeno v oklepajih, da ta Funkcija vzame en argument, tip ki je niz - tako da je beseda ali fraza ali nekaj takega - in Poklical bom to ime argumenta, da pomeni samo spremenljivko, ki je v Področje, tako rekoč, je ime. S obstaja le med tem, kar dva Zaviti oklepaji, seveda? Pa res, tako kot vrstice 10 do 14, tako da tako kot v ponedeljek ne more uporabiti S, ampak kaj lahko storim je mimo S v imenu tiskanja. Natisnite ime prav tako se zgodi, da ga alias, sinonima vzdevek to ime kliče, in zdaj njegovo uporabo v tej vrstici. Torej, zdaj mi rešiti to, pomanjšanje. Dovolite mi, da gredo naprej in zdravo. Videti je v redu. Ni izpljunil nobene napake. . / Zdravo Enter. Kako mi je ime? David. In zdravo David. Torej ni vse tako razburljivo, ampak mislim zdaj. Zdaj imate to isto sestavino kot smo to storili v nič, da ustvarjanju svojih lastnih funkcij. Vendar je malo Razumem. Recimo, da nisem zares razmišljal to skozi in sem dejansko brez res razmišljam o tem napisal ki delujejo tukaj. Počutim se povsem smiselno. V nič ne obstaja pojem na lokaciji v vaše skripte. Lahko bi dal eno gor, ena tu gor, ena tu gor, in to bi lahko začeli pogledati malo grdo, če ne ga razpostavite lepo, vendar ne važno, kje fizično skripte so na zaslonu. Na žalost v C - in to je, za razliko od jezike, kot sta Java in Python in drugi, da bi lahko bili seznanjeni z - na žalost v C, da ne pomembno, ker gledam, kaj je se bo zgodilo zdaj. Privzeta funkcija, ki se dogaja izvesti, je, seveda, glavna. Glavni bo poklical ime tiska na linija osem, žal pa prevajalnik sploh ne bo vedel, da je ime tiska obstaja, dokler ne pride do linije 11, ki je žal bo prepozno. Torej, kaj je naredil, da zdravo. In zdaj prekleti, dve hudi ustvarila. Torej, zdaj naj se pomaknete do zelo prvič, ker moramo vedno narediti, in opazili, da je vpil na mene, "Implicitno izjavo o funkciji natisniti ime. " Tako smo videli to sporočilo pred implicitno izjavo funkcije. Ko smo videli te vrste napak? Ko nisem so knjižnice. Če sem pozabil cs50.h in bom dobil vpil za dobiti niz, ali pa int. Toda v tem primeru, je ta funkcija tiskanja Ime ni v knjižnici, kajne? To je dobesedno v tej datoteki, tako da kaj je res problem? No na žalost v C, da vas popelje tako zelo dobesedno, da če želite funkcijo imenovano ime natisni obstajajo, ali boste morali izvajati , ki delujejo na sam vrh vašega kode tako, da je dostopen za zniževanje funkcije, vendar odkrito povedano, da postane površen zelo hitro. Osebno mi je všeč dajanje glavni najprej ker potem je zelo jasno, kaj je to Program deluje na prvi pogled. In plus, lahko dobite v čudni kotu primerih, če je x želi poklicati y y pa lahko pokličete x, ki ste jo pravkar fizično ne morejo dejansko dal eno nad drugo. Ampak se je izkazalo v C, lahko rešili zelo preprosto. Bom dal malo prostora tu gor, in grem na preemptively, čeprav nekoliko redundantly, bo poučeval prevajalnik, da obstaja funkcija imenuje ime tiskanja, je potrebno niz, in bom poklical je ime podpičjem. Tako da je ta zdaj v skladu štirih, ki smo ni videl, je deklaracija imena tiskanja funkcijo, ampak to je le obljuba, da bo ta funkcija sčasoma je treba opredeliti, na koncu treba izvajati. To zdaj lahko pustite pri miru, ker Zdaj je to opredelitev, izvedba, nekako zadnji kilometer izvajanja te zlasti funkcija. Torej odkrito, da je neumno, da je nadležno, vendar je to način C, in je saj vam jemlje zelo dobesedno in, kot je računalnik odkrito smeli, samo, kaj točno je povedal, da zaradi tega, in da je urejanje pomembno. Tako da se vodijo v mislih in spet začeti Opazili ponovitve vzorcev. Kvota se boš, če tega še niste že začeli srečati sporočil , kot je ta, ki se na prvi pogled zdi, popolnoma nejasen, toda če začnete da si za te ključne besede, kot so "Implicitno izjavo," omenja funkcija v tem primeru - in po pravici povedano, si včasih celo dobili malo zeleno Simbol korenček, ki vam pove, kje Vprašanje je verjetno - lahko začnete delati svojo pot skozi Še nevidno sporočil o napakah. Vsa vprašanja o pisanju lastna funkcija na ta način? Naredimo nekaj, kar je Malo bolj prepričljiv. Ne le narediti nekaj, kar je stranski učinek tiskanje, spustite me naprej in shranite novo datoteko, mi pa bomo to imenujemo positive.c, čeprav je bo nekoliko drugače v primerjavi zadnjem času. In tokrat, bi rad ponovno izvajati positive.C Primer Zadnji čas je, ki je sila si, da bi me je pozitivno celo število. Vendar sem moral uporabiti dobiti int zadnji čas. Ali ne bi bilo lepo, če ne bi bilo Funkcija se imenuje dobili pozitivno int da sem lahko samo zunanji sodelavci kos funkcionalnosti? Torej je razlika tukaj je, da bomo izvajanje dobili pozitivno int, vendar za razliko od Ime tisk, ki je imela stranske učinke - to ni vrnil nekaj z mano število ali niz - se pozitivno int je seveda bo vrne, upajmo, pozitivno int. Torej, kaj je to. Vključujejo cs50.h, vsebuje standardne io.h. Int main nična. In zdaj je tukaj, jaz grem naprej in recimo int, da pokličete n, je enako dobili pozitivno int. In tako kot se int že obstaja ker osebje ga je napisal, bom prevzeti za trenutek, da bi dobili pozitivni int obstaja, in zdaj bom da gredo naprej in rekli printf, hvala za% i / n ", n. Torej, zdaj, če sem pripravi tega programa, kar se bo zgodilo v mojem terminalu Okno na dnu ekrana? Jaz bom verjetno dobil, da iste napake kot prej. Torej, dajmo poskusiti. Da pozitivno. In spet, implicitno izjavo funkcije, dobil pozitivno int. Tako da bomo lahko rešili to nekaj načinov. Bom naj bo enostavno in preprosto dam izjavo tu gor in se pozitivni int. Moram ti podpis. Podpis samo sklicuje za estetiko Prva vrstica programa. Torej, kaj naj bi dobili pozitiven int vrnitev? Torej int. Mislim, idealno pa bi vrnili nekaj podobnega pozitivnega notr, ampak da ne obstaja. Ne Videli smo, da je med našimi podatki vrste, zato se moramo ukvarjati z Dejstvo, da imamo zelo malo podatkovni tipi delati. Vendar pa se lahko vrnemo int in samo Verjamemo, da bo pozitiven. To se dogaja, da se imenuje dobili pozitivno int. In zdaj kaj o svojih argumentov? Traja vsak vhod? Ali je treba vse surovine? Torej ni treba vedeti vnaprej karkoli. Get niz ne, dobil int ne. Printf počne - to mora imeti nekaj vhod prešla v njej - in ime tisk potreboval nekaj vložek, ampak dobil Pozitiven int ne. Torej bom izrecno povej prevajalnik praznino. Void je odsotnost karkoli drugega. Zato nična pomeni nič ne dogaja v notranjosti teh oklepajev, podpičje. In zdaj na dnu mojega spisa - in še enkrat, jaz sem samo da nekako analni Tukaj dajanje glavni na vrhu, ki je dobra praksa, ker ta način kadarkoli vi ali kdo drug odpre datoteko, se Funkcionalnost je tam. Lahko se potopite v eni od kvadratni. Torej, zdaj bom podvajati to, dobili pozitivno int praznino, vendar nisem udaril podpičjem zdaj. Grem odpreti zavite oklepaje, in zdaj si moram sposoditi nekaj idej, od ponedeljka. Tako kot se spomnite, smo naredili nekaj rad pa naredite naslednje nekaj, kar je res. In kaj sem naredil? Naredil sem nekaj podobnega dati me je pozitivno celo število, Malo poziv. Lahko uporabite vse besede, ki jih želim. In potem sem kaj se uporablja? Int n enak dobili int, nobenih argumentov za to. In opazili razliko. Ko klic funkcije, ko uporabljate funkcije, ki jih ne dajo v praznini. Vam le, da pri razglasitvi Funkcija, poučevanje prevajalnik kaj to bi pričakovali. Torej vam ni treba dati izniči tam sami. In zdaj, kaj je bil moj pogoj? No, n ni enak pozitiven ampak to je samo psevdo-kodo. Torej, kako izraziti to bolj čisto? Torej manjša ali enaka nič. Torej še enkrat, opazili, lahko storite manjša ali enaka. Čeprav je dva ločena simboli, lahko to storite na tipkovnico kot take. Ampak tam je vedno bug, da Zajebal sem zadnjič preveč. Moram prijaviti - točno. Moram prijaviti n zunaj z zanko. Torej moram dati n tu gor, in jaz ne želite ponovno prijavijo tukaj da ne bom dobil novo spremenljivko. Želim samo za dodelitev vrednosti tukaj. In zdaj nisem povsem tu storiti. Dovolite mi, da bi dobili pred sebe in se pretvarjati, da sem storil. Da pozitivno, in zdaj tam je nova napaka. Nadzor doseže konec ne-nična funkcija. Torej novo sporočilo o napaki, če pa ste prijazni od Tease poleg vsakega besedami, Verjetno namiguje na tisto, kar je narobe. Nadzorovati. Nadzor pomeni samo, da naloga operacij v programu. Računalnik je v nadzoru in Nekaj ​​je šlo narobe. Tako da doseže konec ne-nična funkcijo. Kaj funkcija je očitno nanaša? Kaj funkcija ni ničen? Torej, dobil pozitivno int, in malo zmedo, da je dobro, to je nekako praznino. Ima specifikacijo praznino za svoje Argumenti, vendar njena proizvodnja se bo biti tipa n. Torej beseda je na levi tako imenovani tip donos. Beseda na notranji tukaj se nič ali več argumentov da funkcija potrebuje. Torej, kaj moram narediti? Na tej točki v mojem kodo, linije 21, kjer utripa hitro sedaj je, da sem imajo pozitiven int znotraj v spremenljivko n. Kako bi ga nazaj na glavno? Dobesedno. Vrni se n podpičjem. Torej, tako kot Colton vrnil kos Papir z odgovorom, da mi ga spustite da kos papirja v mali črni polje na mizi, na to, da je v kodo, si dobesedno samo napisati, vrnite n, in to je, kot da Colton bili mi deliti nekaj fizičnega nazaj. V tem primeru, kaj se dogaja, je dobil Pozitiven int se bo vrniti kaj je predvidoma pozitivna celo komu? Če pa to vrednost na koncu? To konča v te spremenljivke, n in Nato bomo nadaljevali z linijo devet. Torej, z drugimi besedami, da od operacije, začne ta program izvajanje in prevajalnik se zaveda, oh, želite knjižnico? Pusti me zgrabi vse, kar je notri to. Oh, želite standardno knjižnico IO? Pusti me zgrabi vse, kar je notri to. Kaj prevajalnik pravi, da sama ko se dotakne črte štiri? Oh, ti obljubil, da bo izvajala Funkcija imenuje dobili pozitivno, vendar bomo dobili nazaj, da kasneje, kaj podobnega. Int main void pomeni samo tukaj drobovje mojega programa. Line sedem je le kodrasti naramnicami. Line osem pravi na levi strani, da me 32 bitov za celo število, pravimo n. Na desni strani, to rekel bi dobili pozitiven int. Zdaj kaj je pavza, da zgodba, saj zdaj Ne premikaj se mi kurzor dol. Moj kazalec zdaj gre dol, ker zdaj dobili pozitiven int izvaja. Int n je razglašena. Naredite naslednje. Printf mi daje pozitivno celo število. Get int od uporabnika, ga shranite na n, in morda to znova in znova. Ta zanka pomeni, da bi lahko ta koda ponovno izvede gor in dol kot to in enkrat, ko pa si končno sodeluje in mi daje pozitivno int, sem udaril črto 21, na kateri točki Število je vrnil, in katera moram poudariti zdaj? Devet. Nadzor, tako rekoč, vrne poravnati devet. To je linija, ki je zdaj glavni. Tako da je tisto, kar se je dogajalo vse tokrat pod pokrovom, vendar ko smo uporabljanih funkcij, kot so printf ali celo dobili niz, da nekdo drug napisal za vas, je bil nadzor, ki se izročijo off nekoga drugega koda linija po vrsticah. To je samo nismo mogli videti in smo ne bi mogla zares prikazujejo v tem Program zato, ker je v nekaterih drugih Datoteka na trdem disku nevede nas. Torej, kaj je dejansko pripravijo in to deluje zdaj. Da pozitivno. Zbere, da je napredek. . / Pozitiven. Daj mi pozitivno celo število. Bodimo težko. Negativno 1. Nič. Dajmo ji 50. Hvala za 50 let, in tako nadzor se je zdaj vrnil. Vsa vprašanja, nato pa na to? Ja? [Neslišno]. Ponovi. Oh, dobro vprašanje. Torej boste morda opazili vzporednico, da Jaz sem nekako rezanje kotiček naprej. V vrstico 12, pravim, dobil pozitivno int vrne int, vendar ga ta isti Logika, da je zdaj Razumno, da je v linija šest, sem rekel, da je glavni vrne int, ampak tisto, kar še nikoli nismo je v katerem koli od naših programov? Nikoli nismo imeli omembe Ta ključna beseda donos. Tako se izkaže, da je v C, vsaj različica je, da smo z iz leta 1999, tehnično, to je samodejno dogaja za vami. Kadarkoli izvajati program in vi izvajati funkcijo imenovano glavno, da funkcija vrne nič do privzeto, če ne rečem drugače, in nič je samo konvencija. Svet vrne nič s tem kaže, da je vse dobro, nam učinkovito odhodu s štiri milijarde možne stvari, ki bi šel narobe, tako da če se bomo vrnili eno, da bi pomenilo kodo, ki pomeni to stvar je šlo narobe. Lahko vrne dva, kar pomeni ta druga stvar je šlo narobe. Lahko bi se vrnili štiri milijarde, ki pomeni to druga stvar je šlo narobe. In če zdaj razmišljam o sami PC ali Mac, boste morda opozarjajo, da Včasih dobiš kriptirana sporočila o napakah od programske opreme, ki ste uporabo, in ima včasih človek prijazen opis, vendar pa je pogosto kodo ali več na zaslonu? Če se to ne pride na misel, Samo pazi na to. To je ponavadi tisto, kar ti kode se nanašajo. Oni so vključene v Microsoft Wordu in drugi programi, tako da, če ste datoteko poročilo o napaki z družbo, lahko povej jim, oh, sem dobil številko napake 45. In nekateri programer nazaj v družbo lahko ogledate, da je v njegovo kodo in rekel, oh, to pa zato, ker sem to napako in to je razlog, zakaj si dobil to sporočilo. Vendar odkrito povedano, to je samo malo moteča in malo dolgočasno sklepati, da se vsaj na našem Prvih nekaj programov, zato smo so ga izpustimo. Ampak ves ta čas vsak od vaših Funkcije Glavni je na skrivaj imela ta vrstica samodejno doda za vas prevajalnik, samo z konvencija za prihranili nekaj časa. [Neslišno]. Vam ni treba, da ga vključite v glavnem. To je v redu. Si morate, da ga vključite, če ste bili izvajanje funkcije, kot je ta. Sicer funkcija stanovanje se ne bi delovalo. Ampak v glavnem, to ni potrebno. V tednu ali dveh, bomo začeli pridobivanje v to navado, ko smo želeli začeti ki pomeni napake. Res dobro vprašanje. Tako hitro verbalno odmor omeniti, da ta petek, ne bomo kosilu po sebi, ampak bomo večerjali z nekaj študentov in osebja. Če želite, da se nam pridružite, občutek proste roke, da cs50.net/rsvp. 06:00 ta petek. Prostor je, kot vedno, omejeno, vendar bomo še delaš ti na skoraj tedensko, če prostor zmanjka ta teden. Torej Alpinista, da smo končali na Ponedeljek je bil, da strune lahko dejansko se indeksira v, kar samo ti pomeni lahko dobite ob prvem znaku, Drugi znak, tretji znak in tako naprej, ker lahko dejansko mislim niz, kot je Pozdravljeni, kot da je v tem primeru pet Črke znotraj polj. In lahko dobite na vsaki od teh škatle s tem, kar smo naredili sintaksa uvesti v ponedeljek? Te oklepaje na tipkovnici. To samo pomeni, pojdite na lokacijo nič. Mi začnemo na ničlo, tako da nosilec nič pomeni h, nosilec enega pomeni e, in tako naprej. In tako ves čas, ko smo bili uporabi nizov in tipkanje v "zdravo" in "svet" in druge stvari, na zaslon, to je bilo shranjeno v škatle, kot je ta. In ugibati. Kaj vsako polje predstavlja fizično notranjost računalnika? [Neslišno]. Oprostite? Znakov. Torej znak, še zlasti v primeru nizov, in lik je samo osem bitov ali en bajt. Torej, verjetno ste vsaj bežno seznanjeni z dejstvom, da je vaš Računalnik ima spomin. To ima dve vrsti pomnilnika vsaj. Ena je trdi disk, kjer boste prihranili stvari trajno, in da je običajno velika, tako da lahko imate filme in glasbe in tako naprej. Potem imate drug tip pomnilnika imenujemo RAM, R-M, Random Access Pomnilnika, in to je tip pomnilnika , ki se uporablja, ko je računalnik teče, vendar če ste izgubili moč ali vaš baterija umre, karkoli, ki je shranjena v RAM izgine, če ste izgubili moč celoti, ker to ni vztrajen. Po navadi imajo v teh dneh, gig njega, dve nastopov, morda več. In glavo RAM je, da je veliko veliko, veliko hitreje kot trde diske ali celo SSD diski v teh dneh, ampak to je ponavadi dražji, tako imate manj. Torej, današnji pogovor res nanaša za RAM, da tip pomnilnika, ki obstaja samo, dokler je moč se vnašajo v računalnik. Torej, ko vnesete v H-E-L-L-O, Enter tipkovnica, H se dogaja v enem bajt RAM, E se dogaja v en bajt RAM, kot Preostanek besede. Torej spomniti, kaj nam je uspelo storiti, zadnjič je bilo to. Dovolite mi, da gredo naprej in odprli datoteko da smo poklicali string.c in odpoklic da je bilo videti malo kaj takega. Dovolite mi, da dejansko roll nazaj in spremenite je točno tisto, kar je izgledalo, Niz dolžina s. Torej pogled na programu tukaj. Štejemo CS50 knjižnico tako da bomo lahko uporabite dobili niz. Mi vključujejo standardno io.h tako da bomo lahko uporabite printf. Zakaj smo tudi string.h? To je bila nova v ponedeljek. Zato smo želeli dolžino niza. Str leng. Ljudje so se odločili že pred leti, Bodimo jedrnat. Namesto da "dolžina niza," kliče recimo ji "str leng" poklical in pustite svetovna osebnost, da ven, in tako, da je kaj smo dobili dostop do z string.h. To je znano. To je znano. To je znano. To je malo novega. V vrstico 22 - in se bomo vrnili za to, ampak za zdaj veste - in bi vedel, samo to iz ob preberite dokumentacijo, ali če ste vedeli C že - dobili niz včasih lahko zamočil. Če uporabnik res nasprotujočih ali zavrača sodelovanje, in on ali ona samo ne vnesete ničesar na tipkovnici ali Vrste toliko na tipkovnici, da ga premaga spomin računalnika, V teoriji bi dobili niz lahko vrnete nekaj drugega kot niz znakov. To bi lahko vrne posebno vrednost, imenovano NULL v vseh kape, N-U-L-l, in to je le tako imenovana kontrolna vrednost. To je posebna vrednost, ki pomeni nekaj slabega se je zgodilo v tem primeru. To je odsotnost nizu. Torej null sem iskal preprosto tako, da skrajšam zgodbo, str leng in druge funkcije, ki prihajajo s C, če pričakujejo niz, vendar jih prenese odsotnost niz, če se boste peljali jim nič, računalnik ali programa bo samo crash dokončno. To bo obesil. To bo navrgla nekaj sporočilo o napaki. Slabe stvari se bo zgodilo. Torej, čeprav je to še vedno niso dobro opredeljeni - to bo bolj smiselno v tednu ali dve - v vrstico 22, to je samo Primer samonadzora napaki obrambe samo v primeru, ko eden od gre milijonov nekaj narobe, pri Vsaj moj program ne bo crash. Torej, če je ne bo enaka nekaj slabega, Imam ta zanka, in to je bilo kjer smo imeli ta druga nov del sintakse. Imam zanka ponavljanjem od nič gor na dolžino s. In potem je tukaj, sem bila tiskanje iz ih Nosilec i, toda zakaj sem uporabo% c vse nenadna namesto% s celo čeprav je je niz? To je znak, kajne? S niz, vendar je nosilec nekaj, S podstavki i, kjer je i nič ali ena ali dve, da je posameznik znak v nizu, in tako za da je treba printf da so obveščeni o to je res znak pričakovati. In potem se spomnim, kaj je to Program dejansko storiti? Ga natisne v stolpcih. Ja, točno. Samo natisnjene besede, ki sem tip v stolpec, en znak na vrstico. Torej, poglejmo še enkrat. Zato poskrbite niz. Zbrati OK. . / Niz. Dovolite mi, da tip v H-E-L-L-O, Enter in res sem jo dobila, eno na vrstico. Torej, kaj mi naredil eno optimizacijo tukaj. Če menite o tem, še posebej, če ste programirani prej, obstaja verjetno neučinkovitost v skladu 24. Z drugimi besedami, to ni nujno najboljši dizajn. Enostavna, vsaj enkrat vas se spomnite, kaj str leng je, vendar je delaš nekaj neumnega potencialno. Kaj bi to lahko bilo? [Neslišno]. Točno tako. To je preverjanje za dolžino ih vsak čas, čeprav H-E-L-L-O je vedno tekoč do pet znakov. Vsakič, ko se skozi to zanko, pet se ne spreminja. Jaz bi lahko povečevanje i, ampak kaj je dolžina sekunde vsak ponovitev te zanke? To je pet, to je pet, to je pet, in vendar sem vseeno prosim te znova in znova in znova zaslišati. Zdaj odkrito povedano, računalnik je tako prekleto hitro, nihče ne bo opazil, Razlika je v tem primeru, vendar te vrste revnih konstrukcijskih odločitev lahko začnejo sešteti, če prevajalnik sam ne poskušajte popraviti to za vas, ki je običajno ne bi, na vsaj v napravi. Torej bom to naredil. Bom dodati vejico po moja prva spremenljivka, i. Grem dam drugo spremenljivka, ga kliče n, samo z Konvencija za številke, in potem sem dogaja, da določite n vrednosti niza dolžina s. In potem bom spremenila moj pogoj za kaj? Bom spremenila moje stanje da medtem ko je manj kot n. Torej, zdaj, kolikokrat sem preverjanje dolžine s? Enkrat, ampak to je v redu, da preverim proti n znova in znova, saj zdaj tisti, Vrednosti se dejansko ne spreminja. Zdaj za zdaj, samo vem, da lahko kadarkoli vas klic funkcije, tam je malo režijske stroške, ni dovolj, da bi vas odvrnila Res od kdaj uporabo funkcij, vendar Vsekakor, če obstaja vrstica kode všeč - in linije bodo dobili bolj zanimivo, preden dolgo - če obstaja možnost, da mislim, če sem vnesite to kodo, koliko krat Opravljala bo? Boste začeli videti sčasoma v delovanje vaših programov lahko res spremenilo. Pravzaprav je eden od problema postavlja smo jih narejeno v minulih letih vključuje izvajanje, kot se morda spomniš iz nič teden, črkovalnik, vendar črkovalnik, ki je namenjen podpori slovar 150.000 plus Besede, ki smo vam fantje. Ti bi morali napisati kodo, da obremenitve te besede v RAM, tako v škatle, kot smo videli na zaslonu trenutek nazaj, nato pa tako hitro, kot si ti Lahko, morate biti sposobni odgovoriti Vprašanje obliki, je ta beseda napačno črkovana? Ta beseda napačno črkovana? Ta beseda napačno črkovana? In nekaj podobnega, da tisto, kar smo jih opravljeno v letih, se je izkazalo v preteklosti, čeprav na opt-in prostovoljni podlagi, Tekmovanje z menoj, s katerim Učenci, ki uporabljajo manj pomnilnika in manj Čas, manj CPU cikle, na koncu bisernih do vrha malo Vodja odbora ali razvrstitev, da smo se na Domača stran predmeta, kot smo jih narejeno v preteklih letih. Še enkrat, popolnoma neobvezno, vendar govori oblikovalskih možnosti , ki so pred nami, ko smo začeli gradi na vrhu nekateri od teh osnovni gradniki. Naj se vrnem k temu diagramu za Samo trenutek in razkrivajo malo nekaj več. To je vsekakor niz, da smo zavzeli Prednost nekaj knjižnic, Standard io.h ki ima - Printf. Printf, med drugim. cs50.h, ki je dobil int in dobili niz in tako naprej, string.h, ki imel STR Leng. Vendar se izkaže, da je še en. Odkrito povedano, tam je veliko in veliko glavo datoteke, ki deklarirajo funkcije za knjižnice, ampak to je ctype.h dejansko dogaja, da se nekoliko ugodna, ker bom da gredo naprej in izvajanje enega drug program tukaj. Dovolite mi, da gredo naprej in odprli nekaj Sem napisal pred imenom capitalize.c in vzemimo Poglejte, kako to deluje. Obvestilo, da sem s pomočjo, v tej različici od tega tri znane datoteke. Opazili, da v vrstico 18, sem pridobivanje vrstico besedila. Obvestilo v skladu 21, sem trdil, da Naslednja koda bo izkoristiti s, kar Vtipkali leta, in kako delam to? No, jaz sem ob - izkušnja iz zadnjega časa - Jaz razglasitvi i in N ter ponavljanjem več znakov v nizu. In potem, kaj je to blok koda v skladu z 24. 27. početje v smislu navadnega je? Male črke nazaj. Točno tako. Če je nosilec i - tako da, če i- značaj s, ki je specifična znak v nizu, večja od ali enaka male in - Opozarjajo, da je dvojni znak & označi in - in isti lik, je nosilec i, je ali manj v male Z, to pomeni, da je ali b ali c ali pika, pika, pika, ali z, kar pomeni je male. Kaj hočem narediti v tem primeru? No, jaz lahko naredim to nekoliko cryptically, vendar kaj je to draži narazen. Grem printf poklicati, natisne% c ker želim natisnite ta znak na zaslonu. Jaz pa grem, da se nosilcem S Jaz, i-ta lik s, in zakaj počnem ta mali trik tukaj, male minus kapitala? Kaj se, da bo dal mi na splošno? [Neslišno]. Točno tako. Res ne pozabite - je bilo 65 za kapitalske A. Res ne se spomnite, kaj male črke, je, pa ni važno. Računalnik ne ve. Torej z besedami, male minus glavno, da je čudno, da je odšteje en sloj iz drugega, ampak kaj znakov, ki je pod pokrovom? Oni so samo številke. Torej, ne glede na te številke, Naj računalnik zapomnil namesto mene človek. Torej male negativni kapital je dogaja, da mi razliko. To se zgodi, da se 32, in da bi velja za male črke b in kapitala B in tako naprej. Ostane dosleden, na srečo. Torej sem v bistvu pravi, da male črke, odštevanje off, da Standard razlika, in da Učinkovito sprememb nosilcem S i od male črke, da, seveda, velike črke, brez moje res morali razmišljati o tem, ali ne pozabite, kaj so bili tisti, številke smo govorili, ko osem Prostovoljci prišel na oder? Zdaj pa se je v drugega, če to ni male črke, kot je določeno po liniji 24, samo ga natisnite. Želim samo dotakniti znaki, ki so bili pravzaprav prvotno male črke. Torej, da vidimo to. Naredite izkoristiti. Zbrati, v redu. . / Izkoristiti. In mi tip v H-E-L-L-O z malo začetnico, Enter. In opazil, da se pretvori v velikimi črkami. Dovolite mi, da to storite še enkrat z drugačna beseda. Kako o D-A-V-I-D s prvim D kapitalizirane kot ime je običajno? Enter. Obvestilo je še vedno pravilna. Samo outputted da najprej D nespremenjena po tem pa konstrukt. Torej, imejte v mislih, potem Nekaj ​​stvari tukaj. Ena, če si kdaj želeli, da preverite dva Pogoji naenkrat, lahko in jih skupaj kot smo napovedali. Lahko primerjate znake na ta način in učinkovito zdravljenje znakov, številke, vendar odkrito, to je tako prekleto skrivnosten Nikoli ne bom zapomniti kako bi prišli do tega iz nič brez obrazložitve s tem za dokaj malo časa. Ali ne bi bilo lepo, če bi nekdo tam napisal funkcijo imenovano je znižati, da bi lahko odgovorili zame pravo ali napačna, to je znak malimi? No na srečo, kdo je napisal ctype.h naredil točno to. Naj grem gor in dodajte ctype za c vrste, in zdaj mi gre dol in Reportaža te vrstice kot sledi. Torej, če se imenuje nižja, Trdim, s Nosilec i, potem bom izbrisati ti dve vrstici v celoti. Torej, zdaj nekdo drug, sem upal, je zapisal Funkcija imenuje nižja, in Izkazalo se je, in jih razglasi je notranjost ctype.h. In zdaj bom pustil linijo 27 sam bom zapustil linijo 31 sam, ampak obvestilo, koliko sem poostrila svojo kodo. To je zdaj čistejši. To je manj težko odmisliti ker zdaj funkcija, poleg tega tako čudovito je imenovan samo ne, kaj piše. Torej, zdaj bom rešiti to. Jaz grem za pomanjšanje. In tako kot v Scratch bi lahko imeli Booleans, vrednote Boolove res ali napačna, to je točno tisto, kar je nižja dejansko vrne. Naj ti prevedem. Dovolite mi, da ponovno rok. In zdaj pa še enkrat poskusil, H-E-L-L-O, Enter. To je zelo dobro. In poskusite znova, preverite, ali sem ni zajebal nekaj gor. , Ki se obračuna kot dobro. Vendar to ni dovolj dobro, saj Druga stvar, ki me ne bo nikoli spomnite, razen če delam z njim res previdno na, recimo, papir to prekleto linijo. Ne bi bilo lepo, če bi bilo Funkcija se imenuje na zgornji? No, izkazalo se je tam je v ctype.h kot dobro. Jaz grem naprej in tip - dovolite mi, da to vrstico nazaj. Namesto tega sem, naj gredo naprej in pravijo, nadomestek za% c je Rezultat te funkcije kliče Zgornja na i-ti značaja s. In sedaj opazili, da je pridobivanje Malo uravnoteženo. Moram slediti, koliko oklepaje sem odpirajo in zapirajo. Torej, zdaj je še čistejši. Zdaj ta program boljši in bolje zasnovani verjetno zato, ker je veliko, veliko bolj berljiva, ampak To ni dajmo popraviti. Naredite izkoristiti. . / Izkoristiti. H-E-L-L-O. Kaj je to spet teči, D-A-V-I-D. OK, tako da smo še vedno v zelo dobri formi. Zdaj pa se zgornji del. Predlagam, da obstaja še ena več izpopolnitev lahko naredimo, da bi res lepo, da bi lahko resnično zaostriti do te kode, in res nam pet od petih za oblikovanje, na primer. Kaj bi bilo lepo, da se znebite? No, poglej, kako prekleto dolgo ta blok Koda je le narediti nekaj preprostega. Zdaj, kot prahi, kot boste morda morali gledati v super oddelku v preteklem vikend, vam ni nujno potrebujemo Zaviti oklepaji, ko imate le eno vrstica kode, čeprav smo predlagali jih držimo tako, da naredi veliko bolj jasno, kot v obliki črke U na praske na bloki, kaj je notri podružnice. Toda ali ne bi bilo lepo, če na zgornji, ko je dal svoj prispevek, se je izkazalo v veliko začetnico, če to ni, in kaj bi bilo čudovito, v nasprotnem primeru, če to je že velike črke? Samo skozi in jo pusti pri miru. Mogoče je pa to. Jaz bi poskusil in samo upam, da se to, a mi dovoliš uvesti eno stvar. Namesto uporabe tega vgrajeni terminal okno dol, opozarjajo, da ta črna ikona kvadrat vam Večji terminal okno, ki se lahko polni pregledajo, če želim? Tako se izkaže, da si nekako čudno named, vendar pa je te stvari imenovanih man pages, ročni strani, človek na kratko, in sem lahko dostop do njih s tipkanje človek - Kaj hočem s tipom? Človek na zgornji del. In sedaj opazili, če obstaja deluje notranjost računalnika v V tem primeru je naprava, ki je prav Linux operacijski sistem, da se dogaja da mi nekoliko Grobni niz izhod, vendar boste našli več časa, da vedno je oblikovana precej Enako tako da začnete navadiš. Obvestilo na vrhu v zgornji del in Očitno je enako dokumentacijo Za nižje. Kdor je napisal je rezanje nekaj vogali in dal vse na eno stran. Namen teh stvareh "v življenje je za pretvorbo črka na zgornji ali malimi črkami. Opazili, da se pod Sinopsis, stran man me učil, kaj datoteka imam vključiti uporabljati to stvar. To mi je kar podpise za to funkcije, sta oba, celo čeprav smo zdaj le skrbi za enega. Tukaj je zdaj opis. Na zgornji pretvori črko c z veliko začetnico, če je to mogoče. Še vedno ni tako poučna, vendar mi dovolite Zdaj poglej pod vrnjene vrednosti, je stvar da se je vrnil. Torej vrednost vrne iz pretvori pismo ali c, če pretvorba ni bila mogoča. Kaj je c? Prvotni značaj. Prvotni značaj in vemo, , ki jih, še enkrat, bo do sinopsis, in kdor je to napisal Funkcija pravkar odločila, da vnos da se zgornji in spodnji je samo samovoljno dogaja, da se imenuje c. Lahko bi ga imenovali najbolj ničesar hočejo, vendar pa ga hranijo enostavno, kot c. Tako sem posvetoval s strani človeka. Ta stavek me prepričali, da če to ni male črke, to je dogaja, da me daj nazaj C, kar je popolna, kar pomeni, da sem lahko znebite moj drug pogoj. Naj gredo nazaj v gedit in Zdaj mi pa samo naredi to. Grem kopiram printf izjavo. Jaz grem naprej in desno v notranjosti za zanke izpisa, ki se izvajajo, in dobili rešimo zdaj to celo, če konstrukt. Ni slaba ideja, in je bilo zelo bolj pravilna in skladna s vse, kar smo pridigal, ampak ni potrebno. Takoj, ko se zavedaš, nekaj knjižnico funkcija obstaja, da je nekdo drug napisal, ali pa si napisal na drugem mestu v datoteko, jo lahko uporabljate, in res začetek poostriti kodo. In ko rečem stvari, kot dobro slogu, Dejstvo, da oseba, ki se imenuje deluje na zgornji ali prej je nižja je nadvse koristno, saj oni so zelo opisno. Saj ne bi rad, da pokličete svoje funkcije x in y in z, ki imajo veliko, veliko manj pomena. Vsa vprašanja o tej seriji izboljšave? Zato je dovolj reči eno takeaways je tudi kot svoj problem set - morda problem set, pač pa Vsekakor P nastaviti dva in tretjemu celo ko si pravilno ni nujno pomeni, da so kot nalašč ravno ali še posebej dobro zasnovan. To je drugi osi, začeti razmišljati o tem. Torej je ta niz znotraj vašega računalnika spomin, ampak če imate cel kup znakov, kot so H-E-L-L-O Notranjost RAM-a, in domnevam ki jih v svojem programu pokličite dobili niz večkrat, kot da vas pokličite dobili niz enkrat, potem pa pokličite spet dobili niz. No, kaj se dogaja na zgodilo v daljšem časovnem obdobju? Z drugimi besedami, če imate linijo Koda, čeprav iz konteksta, kot so Niz je dobil - kaj je to. String ime enako dobili niz. Torej, predvidevam, da je vrstica kode je namenjen vprašati uporabnika za njegovo ali njeno ime. Ta Naslednja vrstica kode je mišljeno, da zahteva uporabnik za njegovo ali njeno šolo, in ta druga skupina, in tako naprej. Recimo, da smo ostali prosi Uporabnik za drugo in še in še niz. Oni bodo ostali v spominu hkrati. Ena se ne bo clobber drugega. Šola se ne prepiše drugega. Ampak kje delajo vse končajo v spominu? No, če začnemo oblikovati na zaslonu, ki ga lahko uporabimo to stvar tukaj kot tablo, če je to črna pravokotnik predstavlja moj računalnik je spomin, bom samovoljno začeti ga deli na majhne kvadrate, vsak od njih predstavlja en bajt pomnilnika. Odkrito povedano, če imate gigabajt RAM v teh dneh, imate milijardo bajtov pomnilnika v računalniku, tako da milijard teh kvadratov. Zato je dovolj reči, to ni res v merilu. Vendar lahko hranimo pripravi vse te očitno niso v merilu kvadratov, in to skupaj predstavlja spomin mojega računalnika. Zdaj bomo pač pika, dot, pika. Torej, z drugimi besedami, ko sem zdaj poziv Uporabnik s get vrvico, da mi string, kaj se zgodi? Če uporabnik vnese v "zdravo", da se konča v H-E-L-L-O. Recimo potem uporabnik vrste v - pravzaprav, ne bi smel storiti Pozdravljeni, ker smo asking jim za njihovimi imeni. Torej pojdimo nazaj, če to lahko storim. Torej, če tip I in D-A-V-I-D za moje ime, vendar pa opozarjajo, da drugi vrstici Kodeks je bil spet dobil niz da bi dobili svojo šolo. Če je ta beseda, ki jo uporabnik vrste v šli naprej? No, morda pa bo šel v H-A-R-V-A-R-D. Torej, čeprav sem je sestavljen v dveh vrsticah, to je samo cel kup bajtov v vašem računalnika RAM. Tam je problem zdaj, ker zdaj, če sem uporabo RAM na to zelo smiselno ampak nekako naivne način, se lahko kaj ni očitno razlikuje? Če en začne in kje ena konča, kajne? Oni so nekako zabrisane skupaj. Tako se izkaže, da računalnik tega ne stori. Dovolite mi, da dejansko pomaknete nazaj v čas, v Nekaj ​​znakov, in namesto Harvardu grem takoj po uporabnikovem imenu, uporabnik dejansko dobi, zadaj Prizori, poseben značaj vstavi Računalnik za njim. / 0, sicer znan kot znak NUL nadležno imenovan N-U-L, ne N-U-L-L, ampak si ga napisal kot / 0. To je samo vse nič bitov je označevalec v med prvo besedo, ki uporabnika vnesli in drugi. Torej Harvard dejansko zdaj konča kot to zaporedje znakov in še eno / 0. Torej, z drugimi besedami, ki jih imajo ti kontrolne vrednosti, osem stikata nič bitov, lahko zdaj začeli razlikovati en znak od drugega. Torej, ves ta čas, kar je bilo "zdravo", je dejansko "zdravo" z / 0, in Medtem pa bi lahko zelo dobro precej malo več RAM notranjost računalnika. Dovolite mi, da naredite eno stvar zdaj. Izkazalo se je, da so vse te kvadratov smo bili risanje, so, da, strune, ampak bolj na splošno, te stvari so nizi. Array je samo kos pomnilnika da se je vrnil nazaj na hrbtni strani, in jih po navadi uporabljate niz v obliki te kvadratni nosilca zapisa. Tako da bomo videli te zelo malo sčasoma, ampak naj gredo naprej in odpreti, recimo ji starosti poklicati. In opazil, kaj lahko storimo z ti isti triki, malo malo več sintaksa tukaj. Torej, v skladu 17. člena tega programa - pravzaprav, mi zažene program prve tako da bomo lahko videli, kaj ta stvar počne. Poklical bom, da starost za pripravi tega programa. /. Starosti. Koliko ljudi je v sobi? Call it tri. Starost prvi osebi? 18, 19, in 20. In zdaj nekoliko smešno, sem so naredili program, da starost, tistim, trije ljudje. Torej je jasno priložnost Za nekaj zabave aritmetične tukaj. K sreči, je matematika pravilna. 18. odšel v 19., 19. šel na 20 in tako naprej. Ampak kaj je res mišljeno, da bo Nazoren je, kako bomo shranjevanje starost teh treh ljudi. Dovolite mi, da povečate na tisto, kar je dogaja. Torej, najprej je treba te prvih nekaj vrstic se že precej pozna. Jaz sem samo da bi od uporabnika število oseb v sobi. Potem sem s pomočjo dobil int in ne, medtem ko se to znova in znova in znova narediti. Videli smo, da se vzorec prej, vendar linija 27 je nov in pravzaprav precej koristno, in bo bolj koristno. Obvestilo, da tisto, kar je drugače v skladu 27. je, da sem se zdi, da se razglasi int imenovane starosti, vendar počakajte. To ni le int starost. Tam te oklepaje, znotraj katerih je n. Torej nosilec n v zvezi s tem ni notranjost printf izjavo tukaj, ampak V tem edinim liniji 27, ta vrstica rekel, da me n Ints, od katerih vsaka je tipa int. Torej je to vedro, tako rekoč v, v tem primeru tri cela števila nazaj na hrbtni strani, tako da sem dejansko imajo tri spremenljivke. Možnost, da se jasno, da bo ta. Če bi želel najprej študenta starost, jaz bi to naredil. Če sem hotel drugega študenta starost sem lahko to naredil. Če bi želel tretjega študenta starost, jaz bi to naredil. In bog ne daj, da moramo vsakogar starost v tej sobi - Mislim, da je to pekel od veliko izvoda, spet in ponovno prilepite. In plus, ko sem zbrati ta program, če en študent hodi več ven v ta vrata, zdaj moja številka spremenljivk je napačna. Torej, kaj je lepo o matriki je kot Takoj, ko začnete sami občutek kopiranja in lepljenja, so možnosti, da je ni najboljši pristop. Array je dinamičen potencialno. Ne vem vnaprej, koliko ljudi se bodo v prostoru vem pa moram n od njih, in bom ugotovimo, n, ko pride čas. Ta vrstica kode zdaj pomeni, da mi kos pomnilnika, ki je videti takole kjer je število polj na zaslonu je v celoti odvisen od n, ki uporabnik vtipka Torej, zdaj Preostanek tega programa je pravzaprav zelo podoben temu, kar smo pravkar storil z znaki. Obvestilo imam za zanko z začetkom v vrstici 30. Torej, takoj ko sem dobil niz, sem Ponovil od y enaka nič, na do n. Imam samo to poučno printf sporočilo samo rekel, da mi na starost osebe #% i, tako da številka ena, Številka dve, številka tri. In zakaj sem naredil to? Odkrito povedano, ljudje raje šteje od ena gor ker računalniški znanstveniki, nič gor. računalniški znanstveniki ne bodo uporabljate to vrsto programa, tako da smo bo šele začetek štetja na eni, kot normalni ljudje. In zdaj je v skladu 33, opazili rahlo drugačen del sintakse. I-starost v omenjeno spremenljivko tipa matrika bo dobil int. In zdaj končno, to je samo aritmetična tukaj. Sem se odločil v ločenem zanke zahtevku nekaj časa teče, in zdaj v tem ločene zanke, te vrstice izvršiti. Leto od sedaj, oseba, bom jaz let naj opazil to ni spremenljivki i. To je sedaj% i za notr. In obvestilo, kot prvo ogrado, sem plug i + 1, tako da računamo kot normalen človek. In potem se za vrednost njihove starosti, za star i let, vzamem starost, nosilec i - in zakaj to delam plus eno tukaj? Pravkar starosti. To je moja neumna izbira programov. Pravkar so stari eno leto. Jaz bi tip v poljubnem številu tej Pravzaprav hočem tam. Torej, kaj je pravzaprav vse ustreznost tukaj? No, naj dejansko pomaknete nazaj sem in barve sliko tega, kar je pred nami. Kaj bomo lahko delaš z naš naslednji Problem Set Dva se ukvarjali v svet kriptografije. Tako je ta niz znakov, tako Zaporedje več znakov, in kaj pa to rekel? To ni v spletni različici od diapozitivov. Zato trdim, da je to enako to, neumna reklama od mnogih letih nazaj, da bi lahko dejansko odpoklic ena od njenih izvorov. Torej je to primer šifriranja ali kriptografija. Izkazalo se je, da če hočeš dejansko poslali podatke ali pa delež Podatki z nekom, varno, podobno sporočilo, kot je ta, lahko Izokrenuti črke. Ampak ponavadi, so besede Ne umešana naključno. Oni permutira na nek način ali spremeniti na nek način, tako da - ojej. To je zabavno spojler za naslednjič. Torej lahko zemljevid tisto, kar je očitno O, B. Obvestila, ki vodi do kapitalizacija-pametno. Očitno r postane e. Očitno F-H-E-R postane S-U-R-E. Torej, se izkaže, da je kartiranje in V tem primeru pa je precej neumno kartiranje, če je kdo pogruntal? To je nekaj, kar se imenuje Rot 13, Zavrti 13. To je najbolj neumna šifriranja Mehanizmi, saj dobesedno Dodaja, 13 za vsako od črk, neumen, v smislu, da če si imajo malo prostega časa na vaših rokah in svinčnik, ali pa si samo mislite skozi v glavi, lahko poskusite vsi mogoči dodatki - Ena, dve, tri, pika, dot, pika, 25 za samo vrtenje popolno abecedo, in sčasoma boste razbrati kaj je to sporočilo. Torej, če si kaj takega v razred šola prehodu sporočila svojim najboljši prijatelj, če je vaša ocena šola učitelj preprosto prebrati sporočilo in surovo prisilno rešitev, ste morda gotten Odgovor s tem. Zdaj seveda, v realnem svetu, kriptografija je bolj zapletena. To je odlomek iz besedila računalniški sistem, ki ima uporabniških imen in Gesla, kot skoraj vse naše storiti, in To je tisto, kar bi lahko vaše geslo videti je všeč, če je shranjeno na trdem vožnje pa v šifrirani obliki. To ni samo vrtenje pisem, Je B in B C. To veliko bolj zapletene, temveč ga uporablja kar je splošno znano kot skrivni ključ kriptografija. Ta slika pove naslednje Zgodba z nekaj ikonami. Na levi strani imamo kaj bomo poklical golo besedilo. V svetu kriptografije, navaden Besedilo je le izvirno sporočilo napisana v angleščini ali francoščini ali nobenem jeziku. Če ga želite šifrirati, bomo mimo je slikovno skozi ključavnico, tako da nekatere vrste algoritma, nekatere funkcije ali program, da je nekdo napisal da pehanje črke upajmo več complicatedly kot samo dodal 13 za vsakega od njih. Kaj dobiš ven iz tega procesa, srednji tam se imenuje cyphertext. Tako nekako seksi besede. To samo pomeni, da je šifriran različica navadnega besedila. In samo, če imate to isto skrivnost, 13 ali minus 13, ste sposobni dešifrirati sporočilo, kot je ta. Torej Problem določili dve, med stvarmi boste storili, če v Hacker Izdaja, boste morali napisati kodo tresk teh gesel, ugotoviti kaj so in kako so bili šifrirana, vendar mi dal malo za usmerjanje na poti. V standardni različici, uvajamo Nekaj ​​šifre, šifriranje mehanizme, ena se imenuje Cezar, eden imenovano Vigenere, da so še vedno rotacijski šifrirne algoritme, kjer postane nekaj, B postane nekaj, vendar boste morali to storiti programsko ker bo dejansko skrivnost ključ, ki so vključeni običajno število ali ključna beseda, ki samo pošiljatelj in prejemnik teh Sporočila morajo razumeti. Zdaj, to dejansko ima inkarnacije v resničnem svetu. To, na primer, je malo sirota Annie skrivnost obroč dekoder, in si Lahko dejansko izvajanje teh rotacijski šifre - Postane nekaj, B postane nekaj - z nekaj koles, eno na zunanji strani, eno na notranji tak da če si zavrtite kolo ali obroč, lahko dejansko line up črke z različnimi črkami, dobili skrivno kodo. In tako kot Cliffhanger za danes, kaj sem mislil, da sem naredil, je malo Atavizam da če vklopite TV 24. decembra, si lahko ogledate Film oglas nauseum za 24 ur zapored. Ampak za danes, bom odprla tukaj in nam dal le dve minut pedagoško pomembne Božična zgodba z malo kolegi imenom Ralphie. [Predvajanje videa] -Se je znano, da vsi po vrsti, da Ralph Parker se imenuje član Little Orphan Annie skrivnost krog in je upravičen do vseh v čast in ugodnosti pojavljajo z njo. -Podpis, Mala sirota Annie. Sopodpiše, Pierre Andre s črnilom. Priznanja in koristi že pri devetih letih. [Kričanje na Radiu] Pridi, greva na z njim. Jaz ne potrebujem toliko jazz o tihotapci in pirati. -Poslušaj jutri zvečer za sklepanju pustolovščina črna piratska ladja. Zdaj je čas za Annie skrivnost Sporočilo za vas člane tajnega kroga. Ne pozabite, otroci. Samo člani Annie Secret kroga morejo dekodirati Annie skrivno sporočilo. Ne pozabite, Annie je odvisno od vas. Nastavite zatiči za B2. Tukaj je sporočilo. 12, 11, 2 - -Jaz sem v svojem prvem sestanku tajno. -25, 14, 11, 18, 16 - -Pierre je bil v veliki nocoj glas. Jaz lahko povem, sporočilo, da nocojšnji je res pomembno. -3, 25. To je sporočilo od Annie sama. Ne pozabite, ne povej nikomur. -90 Sekund kasneje, sem v edinem prostoru v hiši, kjer fant devetih bi lahko sedeli v zasebnost in dekodirati. Aha, B. sem šel na naslednjo. E. Prva beseda je "biti." S. Prihajal je zdaj lažje. U. 25. To je R. -Daj no, Ralphie. Moram iti. Takoj se dol, mama. Joj čarovnik. -T. O. Bodite prepričani, da. Bodite prepričani, da česa? Kaj je bilo malo Orphan Annie poskuša povedati? Bodite prepričani, da česa? -Ralphie, je Randy iti. Prosim, pridi ven? -V redu, mama. Takoj pridem ven. -Sem bil pridobivanje bliže zdaj. Napetost je bilo grozno. Kaj je bilo? Usoda našega planeta lahko visi na nitki. -Ralphie, Randy je oditi. Takoj se izvajajo za zjokat. -Skoraj tam. Moji prsti letel. Moj um je jeklena past. Vsak por vibrira. Bilo je skoraj jasno. Ja, ja, ja, ja, ja. -Bodite prepričani, da popij Ovaltine. Ovaltine? Crummy komercialno? Kurbin sin. [END predvajanje videa] Zvočnik 1: To je CS50 in da Problem bo postavila dva. Se vidiva naslednji teden. ZVOČNIK 2: Na naslednji CS50, se to zgodi. SPEAKER 1: Torej ena tema nimamo Pogledal doslej je da funkcijskih kazalcev. Zdaj, funkcija kazalec je samo naslov javnega funkcije, vendar podobno kot - sin -