SPEAKER 1: Dobre. Vitaj späť. To je týždeň Dva CS50, a máme Doteraz boli pomocou funkcie, ale z veľkej časti za samozrejmosť. Použili sme printf, ktorá má vedľajší efekt tlače veci na obrazovke. Použili sme get-int, float dostať. Ale čo keď naozaj chcete vytvoriť vlastné funkcie, ako sa niektorí Možno ste už začala urobiť pre Problem Set One, aj keď nie je nevyhnutne nutné? Dobre, poďme ďalej, a znova, že Problém sa pýtal na užívateľa ich meno a tlač niečo na obrazovke, ale skúste vytknúť niektoré o konformity, ktoré sme vidieť v našom kóde tak ďaleko. Takže mám na mysli nasledujúce. Chystám sa ísť dopredu a vytvoriť nový program, stačí zavolať to hello.c ako obvykle. Chystám sa ísť dopredu a dať sám zahŕňajú štandardný IO.H v hornej časti. Chystám sa tiež oddať preventívne CS50 knižnice tak, aby Nechápem kričal na prekladač. A teraz budem pokračovať a vyhlasujú, int, hlavné, za neplatné. A potom tu je to miesto, kde chcem začať zadávať funkčnosť niektoré ďalšie funkcie, ktoré ja sám som budem písať, ale to nie je v súčasnej dobe neexistuje. Predpokladajme napríklad, že som chcel napísať funkciu, ktorá mi umožňuje vytlačiť ahoj, čiarku a potom nejaké užívateľské meno. Namiesto toho, aby to printf Dobrý deň,% s, nebolo by pekné, keby tam bolo len volané funkcie nie je printf, ale print jmeno? Takže inými slovami, chcem byť schopný napísať program, ktorý robí len málo niečo také. Po prvé, ja som chcel povedať printf váš meno, čím vyzývajúci užívateľa k daj mi jeho alebo jej meno, a potom som bude používať známe reťazec s na deklarovať reťazec. Daj mi premennú typu reťazec, hovoria to a obchod v tom, že Výsledkom volanie sa reťazec. Ale teraz v posledných týždňoch, musel by som trochu nudne urobil Dobrý deň,% s / n A inými slovami, sme videli tento Príkladom banda časov, a to je triviálne príklad, pretože tam je len jeden riadok kódu, takže to naozaj nie je veľký problém udržať písať znova. Ale predpokladám, že tento riadok kódu skutočne stali príťažou, a nie je to jeden riadok kódu, ale je to 10 riadky kódu pred pár týždňami od teraz, a vy ste len unavení kopírovanie a vkladanie alebo prepisovanie rovnaký kód. Nebolo by pekné miesto vykonávania printf ahoj,% s, a tak ďalej, Nebolo by pekné, keby tam boli len volaná funkcia print jmeno, že má argument - inými slovami, že má vstup - a potom bodkočiarka. Takže funkcie, nebolo by to by pekné, keby to existovalo? Potom by som nemusel obávať čo printf je, čo% s a všetky Tieto komplikácie, ktoré sú nie je všetko tak zaujímavé. Sú užitočné. Takže print jmeno, bohužiaľ, nebol vymyslel nejaký 40 + rokmi. Nikto si to napísať. Ale to je krása mať programovací jazyk, rovnako ako v Scratch môžete definovať vlastné bloky tak, v C a takmer akýkoľvek jazyk, môžete definovať vlastné funkcie, môže môžete definovať svoje vlastné funkcie. Takže aj keď sa dostaneme do hlavnej automaticky zadarmo, môžeme vyhlásiť, naše vlastné funkcie. Takže budem robiť nejaké miesto tu hore hore a budem deklarovať my vlastné funkcie, ktorá bude vyzerať trochu divný, ale na prvý prídeme späť k tomu onedlho. Chystám sa povedať neplatné, a tým ukazuje táto funkcia niečo, má vedľajšie účinky, ale nevráti mi niečo v rovnakým spôsobom, ako sa int alebo dostať reťazec sama. A budem k tejto funkcii názov tlačového mená a budem určiť, že tento človek bude trvať reťazec, a ja budem volať, že Názov reťazca. Mohol by som hovoriť, čo chcem, ale ja chcem, aby moje kód byť self-dokumentovať. Inými slovami, ak je niekto z vás mal tento súbor otvoriť a čítať, mohli by ste druh odvodzovať z názvu, ktorý Vstup akú úlohu to má hrať. A teraz ďalej, že idem otvoriť zložená zátvorka a uzavreté zložená zátvorka, a tak zistíte Dodržal som rovnaký vzor na tratiach štyri až sedem ako Sledoval som na dobrý týždeň naviac teraz medzi, povedzme, vedenie a deväť 14, ktorý skladať hlavné. Inými slovami, tlačiť názov je ďalšie funkcie. Teraz, kompilátor nebude poznať volať túto vec automaticky pretože som doslova vymyslel, ale to bude vedieť ešte zavolať hlavný automaticky, a potom samozrejme v linka 13, Volám svoju vlastnú funkciu. A preto, že som vyhlásil, že funkcia sa na radový štvorvalec pred hlavnými, to bude učiť kompilátor čo citujem, koniec citátu, "print jmeno" znamená a čo by mala robiť. Takže som trochu dávať to nový zvyk zablokovať v rámci, povedzme, Scratch. Tak tu, môžem dať, že veľmi časté alebo opakujúce sa vzor kódu držím písanie v triede, printf % S ahoj,% s / n ", - Čo chcem, aby tu? S? Tak som chcel dať meno v tejto súvislosti. Takže si všimnúť trochu dichotómia tu. Pretože som vyhlásil svoju vlastnú funkciu a ja som trochu svojvoľne nazýva vytlačí meno, a pretože som je uvedené v zátvorkách, že sa funkcia má jeden argument, typ čo je reťazec - tak to je slovo, alebo slovné spojenie, alebo niečo také - a Volám tento argument názov, ktorý znamená iba premenná, ktoré je v priestor, aby som tak povedal, je názov. S existuje iba medzi tým, čo dvaja Zložené zátvorky, samozrejme? No naozaj, rovnako ako linky 10 cez 14, takže rovnako ako v pondelok nemožno použiť S, ale to, čo môžem urobiť, je prejsť S do tlače názvu. Vytlačiť meno len tak sa stane, že ju dám alias, synonymum, prezývka, volať to meno, a teraz použitie v tomto riadku. Takže teraz mi dovoľte zachrániť to, oddialiť. Nechaj ma ísť ďalej a robiť ahoj. Vyzerá to dobre. Vari vypľuť žiadne chyby. . / Ahoj Enter. Ako sa volám? David. A ahoj Dávid. Takže nie je tak vzrušujúce, ale len, že teraz. Teraz máte tú istú látku ako sme to urobili v nuly aby naše vlastné funkcie. Ale je tu trochu Gotcha. Dajme tomu, že som si naozaj myslel, to až do konca a ja vlastne bez naozaj premýšľať o tom písal že funkcie tu. Pocit úplne rozumné. V Scratch nie je pojem z miesta vo svojich skriptoch. Dalo by sa dal jeden sem, jeden sem, jeden tu, a to by mohlo začať vyzerať trochu chaotický, ak nemáte položte ju úhľadne, ale to nie je na tom, kde fyzicky skripty sa na obrazovke. Bohužiaľ v C - a to je na rozdiel od jazyky ako Java a Python a ďalšie, ktoré by vás mohli oboznámiť s - bohužial C, aby sa nezáleží, pretože hodinky to, čo je teraz stane. Predvolené funkcia, ktorá sa deje na vykonanie je, samozrejme, hlavné. Hlavné bude volať meno v tlači linka osem, ale bohužiaľ, kompilátor nebude ani vedieť, že tlačový meno existuje, kým sa dostane do riadku 11, čo je bohužiaľ bude príliš neskoro. Takže poďme urobiť ahoj. A teraz sakra, dve chyby generované. Takže teraz mi dovoľte prejdite do veľmi Po prvé, ako sme mali vždy, a Všimnite si, že je to na mňa reval, "Implicitná deklarácie funkcie tlačiť meno. " Takže sme videli, táto správa skôr, implicitné vyhlásenia funkcie. Keď sme videli, že takéto chyby? Keď som nezahŕňal knižnice. Ak som zabudol cs50.h a ja by som si zareval na pre získanie reťazca, alebo si int. Ale v tomto prípade, je táto funkcia tlače meno nie je v knižnici, nie? Je to doslova v tomto súbore, takže čo je naozaj problém? No bohužial C, to sa ti tak neuveriteľne doslova, že ak chcete funkciu nazvanú tlače na meno existujú, buď musieť implementovať ktoré fungujú na veľmi hornú časť kód tak, že je k dispozícii pre zníženie funkcie, ale úprimne povedané, to sa stane nedbalý veľmi rýchlo. Osobne som rád uvedenia prvej hlavnej pretože potom je úplne jasné, čo to program sa na prvý pohľad. A navyše sa môžete dostať do podivné rohu prípady, kedy, ak x chce volať y, ale y nazvať x, stačí fyzicky nemôže skutočne dať jeden nad sebou. Ale ukazuje sa v C, môžeme vyriešiť veľmi jednoducho. Chystám sa dať trochu priestoru tu, a ja som jednoducho ísť preventívne, aj keď trochu redundantne, bude učiť kompilátor, že existuje funkcia hovorí tlačový meno, to trvá reťazec, a ja idem volať to meno bodkočiarku. Tak to teraz v súlade štyri, ktoré sme ešte nevideli, je vyhlásenie z mena funkcie tlače, ale je to len sľub, že táto funkcia bude nakoniec byť definované, prípadne byť vykonávaná. To teraz môžem odísť sám, pretože Teraz sa jedná o definície, implementácie, niečo ako poslednú míľu vykonávanie tejto niektoré funkcie. Takže úprimne povedané, je to hlúposť, je to nepríjemné, ale toto je cesta C, a to pretože vás doslovne a ako by počítač úprimne, len robí presne to, čo si povedať, že sa robiť, a tak, že usporiadanie je dôležité. Takže majte na pamäti, že a znovu začať Všimnite si opakovanie vzorov. Kurzy sú, že áno, ak nemáte už začínajú stretnúť správy ako je táto, na prvý pohľad sa zdá úplne záhadné, ale keď začnete pozrieť sa na týchto kľúčových slov, ako "Implicitná vyhlásenie," zmienka o Funkcie v tomto prípade - a úprimne povedané, je niekedy dokonca dostať trochu zelený mrkva symbol, ktorý vám povie, kde problém asi je - môžete začať pracovať si cestu cez Zatiaľ neviditeľné chybové správy. Akékoľvek otázky týkajúce sa písania Vlastné funkcie týmto spôsobom? Poďme urobiť niečo, čo je trochu viac presvedčivé. Skôr než len robiť niečo, čo má vedľajší efekt tlače, nechaj ma ísť dopredu a uložiť nový súbor, a budeme nazývajú positive.c, aj keď je to Bude to trochu inak oproti minule. A tentoraz chcem znovu zaviesť Poslednou dobou je positive.C príklad, ktorý sila je užívateľ, aby mi kladné celé číslo. Ale musel som použiť dostať int minule. Nebolo by pekné, keby tam bol funkcia je volaná získať kladný int že som mohol len zadať túto kus funkčnosti? Takže rozdiel je stretneme realizovať získať pozitívny int, ale na rozdiel od print jmeno ktorý mal vedľajší účinok - nevrátil sa pre mňa niečo ako číslo alebo reťazec - sa pozitívny int je, samozrejme, bude vrátiť sa, dúfajme, že pozitívne int. Tak poďme na to. Zahrnúť cs50.h zahŕňajú štandardný io.h. Int main neplatné. A teraz tu, budem pokračovať a povedzme int, hovoria n, sa rovná získať kladný int. A rovnako ako sa int už existuje pretože zamestnanci to napísal, ja idem prevziať na chvíľu, že dostanete kladný int existuje, a teraz idem ísť ďalej a povedať printf, vďaka za% i / n ", n Takže teraz, keď som skompilovať tento program, čo sa bude diať v mojom termináli okno v dolnej časti obrazovky? Chystám sa pravdepodobne dostanete, že rovnaká chyba ako predtým. Takže poďme skúsiť. Urobiť pozitívne. A opäť, implicitné vyhlásenie funkcie, získať pozitívny int. Takže môžeme to vyriešiť v niekoľko spôsobov. Budem držať to jednoduchý a len dať svoje vyhlásenie sem a dostať pozitívny int. Musím tzv podpis. Podpis len odkazuje k estetike prvý riadok programu. Takže to, čo by mali dostať pozitívny int návrat? Tak int. Myslím ideálnom prípade by sa vrátiť niečo ako pozitívna int, ale neexistuje. Sme nevideli, že medzi našimi dátami typy, takže máme čo do činenia s Skutočnosť, že máme veľmi málo dátové typy pre prácu s Ale môžeme vrátiť int a len verím, že to bude pozitívny. Bude to nazvať získať kladný int. A teraz, ako o jeho argumenty? Trvá žiadny vstup? Znamená to potrebný žiadny vstup? Takže to nemusí vedieť dopredu čokoľvek. Získajte reťazec neobsahuje, dostať int nie je. Printf robí - je potrebné mať niektoré Vstup prešiel do neho - a tlačiť názov potreboval nejaký vstup, ale dostať int pozitívny nie je. Takže budem explicitne povedať kompilátora neplatné. Void je absencia čokoľvek iného. Tak void znamená, sa nič vo vnútri z tých zátvoriek, bodkočiarku. A teraz na dne môjho súboru - a znova, som len trochu análny tu uvedení hlavné v hornej časti, ktorý je dobrá prax, pretože týmto spôsobom, kedykoľvek vy alebo niekto iný otvorí súbor, na Funkcia je tu. Môžete sa potápať v jednom z námestí. Takže teraz budem duplikovať to, získať kladný int neplatné, ale nie som dopadne na bodkočiarku teraz. Idem otvoriť zložené zátvorky, a teraz musím požičať niektoré nápady od pondelka. Tak, ako si spomínate, sme urobili niečo ako vykonajte nasledujúce pri niečo, čo je pravda. A čo som urobil? Urobil som niečo ako dať mi kladné celé číslo, trochu výzva. Mohol by som použiť všetky slová, čo chcem. A potom som použil čo? Int n sa rovná dostať int, žiadne argumenty do nej. A všimnite si rozdiel. Keď voláte funkciu, pri použití funkcie, vy nie dať do prázdna. Môžete robiť len to, že pri deklarovaní funkcie, výučba kompilátor, čo by mal očakávať. Takže nemusíte dať zrušiť tam sami. A teraz, čo sa môj stav? Tak, n sa nerovná pozitívny, ale to je len pseudo-kód. Tak ako to mám vyjadriť čistejšie? Tak menšie ako alebo rovná nule. Takže znova, zistíte, čo môžete urobiť menšie alebo rovné. Aj keď je to dva samostatné symboly, môžete tak urobiť na klávesnica ako také. Ale je tu ešte problém, že Posral som to minule taky. Musím vyhlásiť - presne. Musím vyhlásiť n mimo zo slučky. Takže musím dať n sem, a ja nie chcem znovu vyhlásiť ju tu aby som si novú premennú. Len chcem priradiť hodnotu tu. A teraz som úplne hotoví. Dovoľte mi, aby som sa pred seba a predstierať, že som urobil. Urobiť pozitívne, a teraz je tu nová chyba. Control dosiahne koniec non-void funkcie. Takže nové chybové hlásenie, ale ak ste typ z srandista oddelene každý slovami, pravdepodobne naznačuje, čo sa deje. Ovládajte. Riadenie spočíva iba v poriadku operácií v programe. Počítač je pod kontrolou a sa niečo pokazilo. Tak sa dostane na koniec non-void funkcie. Aké funkcie je zrejme na mysli? Aká je funkcia non-void? Tak sa pozitívne int, a trochu mätúce, že dobre, je to druh prázdnoty. To má špecifikáciu neplatnosť jeho argumenty, ale jeho výstup bude byť typu n Takže slovo na ľavej strane je tzv návratový typ. Slovo na vnútornej strane je tu nulové alebo viac argumentov že funkcia má. Takže to, čo musím urobiť? Na tomto mieste v mojom kóde, riadok 21, kde bliká prompt teraz je, že som mať kladný int vnútri premenné s názvom n Ako môžem dať ho späť do Main? Doslova. Návrat n bodkočiarka. Teda rovnako ako u Colton vrátil kus papier s odpoveďou na mňa pri páde ten kus papiera, v malej čiernej krabice na stole, k tomu, že v kód, môžete doslova len napísať, vráti n, a je to, ako by boli Colton podal mi niečo fyzického späť. V tomto prípade, čo sa deje, je dostať kladný int sa chystá odovzdať späť čo je pravdepodobne pozitívny číslo pre koho? Kde sa táto hodnota skončí? , Ktorá končí v tejto premennej, n, a potom budeme pokračovať s líniou deväť. Takže inými slovami, aby z operácií, tento program spustí vykonávanie a kompilátor zistí, oh, chceš knižnicu? Nechaj ma ísť chytiť, čo je vo vnútri, že. Oh, chceš štandardné IO knižnice? Nechaj ma ísť chytiť, čo je vo vnútri, že. Čo kompilátor povedal sám keď to udrie linky štyri? Oh, si sľúbil realizovať Funkcia sa nazýva pozitívne, ale dostaneme späť na neskôr, niečo, čo v tomto smere. Int main void len znamená, že tu je vnútornosti môjho programu. Linka je len sedem zložená zátvorka. Linka osem hovorí na ľavej strane, dať mi 32 bitov na celé číslo, hovoria n Na pravej strane je to hovoriť si pozitívne int. Teraz sa poďme pozastaviť ten príbeh, pretože teraz Nechcem ďalej môj kurzor nadol. Môj Kurzor sa teraz chodia sem, pretože teraz získať kladný int spustí. Int n je deklarovaná. Vykonajte nasledujúce. Printf mi dáva kladné celé číslo. Získajte int od užívateľa, uložte ho na n, a možno to znova a znova. Tento cyklus znamená, že tento kód môže spustiť hore a dole takhle zase a znova, ale keď užívateľ konečne spolupracuje a dáva mi pozitívne int, som narazila riadok 21, na ktorom mieste číslo sa odovzdá späť, a ktorý z nich mal by som zdôrazniť teraz? Nine. Control, aby som tak povedal, vráti na linku deväť. To je línia, ktorá je teraz na starosti. Takže to, čo sa deje po tentoraz pod kapotou, ale keď sme použili funkcie ako printf alebo dokonca dostať reťazec, ktorý niekto iný napísal vám, kontrola bola odovzdaním off niekoho iného riadok kódu o riadok po riadku. Je to proste sme nemohli vidieť, a my by naozaj opísať to v tomto programu, pretože je to v niektorých iných Súbor na pevnom disku unbeknownst nám. Takže poďme sa vlastne zostaviť a spustiť hneď. Urobiť pozitívne. Kompilácia, to je pokrok. . / Pozitívne. Daj mi kladné celé číslo. Poďme byť ťažké. Negatívne 1. Zero. Dajme tomu 50. Vďaka za päťdesiat, a tak kontrola teraz sa vrátil. Akékoľvek otázky, potom o tom myslíte? Jo? [Nepočuteľný]. Povedz to znova. Oh, dobrá otázka. Takže si môžete všimnúť paralelu tu Som typ rezu na roh. V súlade 12, hovorím, získať pozitívny int vracia int, ale ten rovnaký logika, to teraz dá rozum, že v linka šesť, hovorím, že hlavné vráti int, ale to, čo sme ešte mal niektorý z našich programov? Nikdy sme nemali zmienku o toto kľúčové slovo return. Tak sa ukázalo, že v C, a to najmenej verzia toho, že sme pomocou z roku 1999, technicky, je to sa deje automaticky. Kedykoľvek budete vykonávať program a vy implementovať funkciu nazvanú main, že funkcia vráti nulové Predvolené ak nechcete hovoriť inak, a nula je len konvencie. Svet sa vracia nulu tým čo znamená, že je všetko v poriadku, účinne opúšťať nám štyri miliardy možné veci, ktoré by mohli ísť zle, takže keď sme sa vrátiť jednu, ktorá môže znamenať kód, ktorý znamená, že tento čo sa stalo. Mohli by sme sa vrátiť dve, čo znamená, tá druhá vec sa stala chyba. Mohli by sme sa vrátiť štyri miliardy, čo znamená, že táto vec sa stala chyba. A či si teraz premýšľať o svoje vlastné PC alebo Mac, môžete pripomenúť, že niekedy dostanete záhadné chybové správy od softvéru, ktorý ste použitie, a niekedy má človek Zrozumiteľný opis, ale je tu často kód alebo číslo na obrazovke? Ak to nepríde na myseľ, len dávať pozor na to. To je to, čo to typicky kódy na mysli. Sú zahrnuté v programe Microsoft Word a ďalšie programy, takže ak súbor bug report s firmou, môžete povedzte im, oh, mám číslo chyby 45. A niektorí programátor späť v spoločnosti môže vyzerať, že v jeho alebo jej kód a povedať, oh, to preto, že som urobil táto chyba a to je dôvod, prečo užívateľ dostala túto správu. Ale úprimne povedané, je to len trochu rušivo a trochu nudné k záveru, že aspoň na našich Prvých niekoľko programov, a tak sme sa vynechá to. Ale celú tú dobu každý jeden z vašich Hlavné funkcie tajne mal toto linka automaticky pridané pre vás kompilátor, len tým, že konvencie ušetrí nejaký čas. [Nepočuteľný]. Nemusíte zahrnúť do hlavnej. To je v poriadku. Je potrebné zahrnúť, ak ste boli vykonávanie funkcií, ako je tento. Inak sa funkcia bytu sa nebude fungovať. Ale hlavné, že to nie je nutné. Za týždeň alebo dva, začneme dostať do tohto zvyku, akonáhle chceme začať znamenať chyby. Naozaj dobrá otázka. Tak rýchlo slovné prestávka spomenúť, že tento piatok, nebudeme mať obed samo o sebe, ale my budeme mať večeru s niektorých študentov a zamestnancov. Ak by ste sa k nám pripojiť, pocit môže ísť do cs50.net/rsvp. 18:00 tento piatok. Vesmír je ako vždy obmedzená, ale budeme pokračovať v tom to na takmer raz týždenne, ak priestor Vypršal tento týždeň. Takže Cliffhanger, že sme skončili na Pondelok bolo, že reťazce môžu v skutočnosti byť indexované, čo práve znamená, že tie môže dostať na prvý znak, druhý znak, tretí znak a tak ďalej, pretože môžete efektívne myslieť na reťazce, napr Dobrý deň, ako v tomto prípade päť Písmená vnútri krabíc. A môžete získať v každom z týchto Krabica s tým, čo sme urobili syntaxe predstaví v pondelok? Tieto hranaté zátvorky na vašej klávesnici. To len chcel ísť do miesta nulové. Začneme počítať od nuly, takže držiak nula znamená h, držiak jeden E znamená, a tak ďalej. A tak po celú dobu, kedy sme boli pomocou reťazca a zadaním príkazu "ahoj" a "svet" a ďalšie veci na na obrazovke, to bolo uložené v krabiciach, ako je tento. A hádajte. Čo každý box predstavuje fyzicky vnútro vášho počítača? [Nepočuteľný]. Je nám ľúto? Postavy. Tak charakter, rozhodne v prípade, reťazcov a postava je len osem bitov alebo jeden byte. Takže ste pravdepodobne aspoň nejasne oboznámení s tým, že vaša počítač má pamäť. To má dva typy pamätí aspoň. Jedným z nich je pevný disk, kde ušetríte veci trvalo, a to typicky veľký, takže môžete mať filmy a hudbu a tak ďalej. Potom máte ďalší typ pamäte tzv RAM, R-A-M, Random Access Pamäť, a to je typ pamäte, , Ktorý sa používa, keď je počítač beží, ale ak už strácam silu alebo váš vybitia batérie, čokoľvek, čo je uložené v pamäti RAM zmizne, pokiaľ už strácam silu dohromady, pretože to nie je vytrvalý. Tie majú zvyčajne v týchto dňoch, koncert z toho dva koncerty, možno viac. A hore RAM je, že je to oveľa oveľa, oveľa rýchlejší ako pevné disky alebo dokonca solid state disky v týchto dňoch, ale je to zvyčajne drahšie, takže máte menej. Takže dnešný rozhovor skutočne odkazuje RAM, ktorý typ pamäte, ktorá existuje len keď tam je moc dodávané do počítača. Takže keď napíšete H-E-L-L-O, Enter klávesnice, H sa deje v jednom byte RAM, E sa deje v ďalší bajt pamäte RAM, ako je zvyšok slova. Takže spomenúť, čo sme boli schopní urobiť, minule to bolo. Nechaj ma ísť dopredu a otvoriť súbor že sme nazvali string.c a vyvolať že vyzeral trochu niečo také. Dovoľte mi, aby som skutočne vrátiť späť a zmeniť to presne to, čo vyzerá, dĺžka reťazca s Takže sa na programe tu. Sme patrí CS50 knižnicu tak že môžeme použiť získať reťazec. Použili sme štandardné IO.H takže môžeme použiť printf. Prečo sme ich string.h? To bol nový v pondelok. Takže sme chceli dĺžku reťazca. Str Leng. Ľudia sa rozhodli pred rokmi, buďme stručné. Namiesto toho, volať to "dĺžka reťazca," nazvime ju "str Leng" a nechajte Svet je číslo, ktoré sa, a tak to je to, čo dostaneme prístup k s string.h. To je dobre známa. To je dobre známa. To je dobre známa. Jedná sa o málo nových. V súlade 22 - a vrátime sa na to, ale teraz vieme - a vy by ste len vedieť to z nutnosti prečítajte si dokumentáciu, alebo ak ste vedel, že C už - dostať reťazec môže niekedy pokaziť. V prípade, že používateľ je skutočne nepriateľský alebo nespolupracujúce a on alebo ona len nemá nič písať na klávesnici alebo typy toľko na klávesnici, ktorá to premôže pamäte počítača, teoreticky dostať reťazec by sa mohol vrátiť niečo iné, než reťazec znakov. To by sa mohol vrátiť špeciálnu hodnotu s názvom NULL vo všetkých čiapky, N-U-L-L, a to je len tzv sentinel hodnotu. Je to zvláštne hodnotu, ktorá označuje, niečo zlé sa stalo v tomto prípade. To je absencia reťazca. Takže null som kontrolu jednoducho tak, dlhý príbeh krátky, str leng a ďalšie funkcie, ktoré prichádzajú s C, ak je očakávajú reťazec, ale predáte je absencia reťazca, predáte je NULL, počítač alebo program sa jednoducho zrúti úplne. To bude visieť. To sa bude hodiť do nejakej chybové hlásenie. Zlé veci sa bude diať. Takže aj keď je to stále nie je dobre definované - to bude dávať väčší zmysel v týždni alebo dve - v rade 22, je to len Príkladom vlastné obranné kontrolu chýb len v prípade, že jednou z miliónov sa niečo pokazí, na Aspoň môj program nebude padať. Takže ak to nie je rovná niečo zlé, Mám to pre sláčiky, a to bolo kde sme mali ten druhý nový kus syntaxe. Mám pre slučky iterácie od nula, až do dĺžky s A potom tu, bol som vytlačenie s držiak aj, ale prečo ja používam% c všetky Zrazu miesto% s ešte aj keď s je reťazec? Je to postava, nie? S je reťazec, ale s niečím držiak, Držiak s i, kde i je nulová alebo jeden alebo dva, to je individuálne znak v reťazci, a preto pre že printf musí byť informovaný, že je to naozaj postava očakávať. A potom si spomenúť, čo to urobil Program vlastne robiť? Vytlačené to v stĺpcoch. Jo, presne tak. Je to proste vytlačené slovo, ktoré som písať, stĺpec, jeden znak na riadku. Tak uvidíme znova. Tak, aby reťazec. Spracovala OK. . / String. Dovoľte mi, aby som zadajte H-E-L-L-O, Enter, a naozaj som si to, na každom riadku jeden. Takže mi dovoľte ešte jeden optimalizáciu tu. Pokiaľ si myslíte o tom, najmä ak ste naprogramované, je tu pravdepodobne neplatnosť v súlade 24. Inými slovami, nie je to nutne Najlepší dizajn. Jednoduchá, aspoň raz vás Pamätáš si, čo str Leng je, ale je to robiť niečo hlúpeho potenciálne. Čo by to mohlo byť? [Nepočuteľný]. Presne tak. Je kontrola dĺžky s zakaždým, aj keď H-E-L-L-O je vždycky sa päť znakov. Zakaždým, keď sa prostredníctvom tejto slučky, päť nemení. Mohol by som byť aj zvyšovanie, ale to, čo je dĺžka s na každom opakovanie tejto slučky? Je to päť, to je päť, to je päť, a napriek tomu som však pýtam otázku znova a znova a znova. Teraz úprimne povedané, počítač je tak sakramentsky rýchlo, nikto nevšimne Rozdiel je v tomto prípade, ale tieto druhy zlých rozhodnutí o návrhu môže začnú sčítavať, ak kompilátor sám Nesnaží sa opraviť to pre vás, ktorý zvyčajne to by nemal byť v aspoň v prístroji. Tak idem na to. Chystám sa pridať čiarku moja prvá premenná, i Chystám sa dať sám iný variabilný, volať to n, len tým, že konvencie pre čísla, a potom som bude priradiť n hodnotu reťazca dĺžka s A potom som sa zmení môj stav sa čo? Idem zmeniť svoj stav sa, keď som je menšia ako n. Takže teraz, koľkokrát som kontrolu dĺžky s? Raz, ale to je v poriadku kontrolovať aj proti n znova a znova, pretože teraz tie hodnoty sa skutočne mení. Teraz sa, len viem, že kedykoľvek volanie funkcie, je to trochu nad hlavou, nie je dosť odradiť naozaj od niekedy pomocou funkcií, ale iste, keď je riadok kódu páči - a linky budú mať zaujímavejšie onedlho - tam, kde je tu príležitosť premýšľať, či som zadajte tento kód, koľko krát to bude vykonávať? Začnete vidieť v priebehu času Výkon vašich programov môže naozaj zmeniť. V skutočnosti, jeden z problému sady máme urobil v minulých rokoch zahŕňa vykonávanie, ako si môže stiahnuť z týždeň nula, kontrola pravopisu, ale Kontrola pravopisu, ktorý je navrhnutý pre podporu slovník 150.000 a Slová, ktoré sme vám chalani. Budete musieť písať kód, ktorý načíta tieto slová do pamäte RAM, takže do krabice, ako sme videli na obrazovke na okamih rokmi, a potom rovnako rýchlo ako vy môžete, musíte byť schopní odpovedať otázka formy, je toto slovo chybne? Toto slovo je chybne? Toto slovo je chybne? A niečo také, čo máme urobil v minulých rokoch sa obrátil ju do, keď na opt-in dobrovoľnom základe, súťaž druhov, pričom študenti, ktorí používajú menej RAM a menej času, menej cykly procesora, skončí vyviera na vrchol málo leader board alebo poradí, ktoré kladieme na Kurz je úvodná stránka, ako máme prebiehala v rokoch minulých. Takže znova, úplne voliteľný, ale hovorí k návrhu príležitosti ktoré sú pred nami, akonáhle začneme budova na vrchole niektorej z nich základné stavebné kamene. Takže mi dovoľte vrátiť sa k tejto schéme pre len na chvíľu a odhaliť málo niečo viac. To je skutočne reťazec, a urobili sme Výhodou niekoľkých knižníc, štandardné IO.H ktorá má - Printf. Printf, okrem iného. cs50.h, ktorá sa int a získať reťazec a tak ďalej, string.h, ktorý mal str Leng. Ale ukazuje sa, že je ešte iný. Úprimne povedané, je tu veľa a veľa záhlavia Súbory, ktoré deklarujú funkcie pre knižnice, ale to je ctype.h v skutočnosti bude trochu výhodné, pretože idem ísť ďalej a realizovať jeden iný program tu. Nechaj ma ísť dopredu a otvoriť niečo Napísal som vopred s názvom capitalize.c, a poďme sa Pozrite sa, ako to funguje. Všimnite si, že som pomocou, v tejto verzii z toho tri známe súbory. Všimnite si, že v rade 18, som získanie riadok textu. Všimnite si riadku 21, som tvrdil, že Nasledujúci kód bude zarábať s, čo užívateľ napísal v roku, a ako to robím, že? No, ja si beriem - poučenie z minula - Ja som vyhlásil i a n a iterácie nad znaky v reťazci. A čo je to za blok kód v súlade 24 až 27. robí Laicky povedané? Malé písmeno späť. Presne tak. Ak je držiak s aj -, takže v prípade, že i-ty charakter s, čo je špecifický char v reťazci, je väčší než alebo rovnajúcu sa malé písmená a - pripomenúť, že dvojitý ampersand znamenajú a - a rovnaký charakter, s držiak i, je menší ako alebo rovnajúcu sa malé písmená Z, to znamená, že to, alebo b alebo c alebo dot, dot, dot, alebo Z, čo znamená, že to je malá. Čo chcem robiť v tomto prípade? No, môžem to urobiť trochu záhadne, ale poďme podpichovať to od seba. Idem zavolať printf, vytlačí% c pretože chcem dotlač tohto znak na obrazovke. Ja potom bude trvať s držiak ja, i-tý znak s, a prečo robím tento malý trik tu, malá mínus kapitálu je? Čo to bude dať ja všeobecne? [Nepočuteľný]. Presne tak. Nemám moc nepamätám - to bolo 65 na kapitálové A. naozaj nemám Pamätáš si, čo malá je, ale to nevadí. Počítač vie. Takže tým, že hovorí, malá znamienko mínus kapitálu, je to divné, že odpočíta jeden char od druhého, ale aké sú znaky pod pokrievku? Sú to len čísla. Takže bez ohľadu na tieto čísla, nechajte počítač si to pamätať skôr než ja človek. Tak malá mínus kapitál je bude mi rozdiel. To sa stáva, že je 32, a že by sa prípad malým b a kapitálu B a tak ďalej. To zostáva konzistentné, našťastie. Takže som v podstate povedal, sa malé písmeno, odpočítať z tej štadartný diferenciál, a že držiak účinne Zmeny S i od malé písmená, samozrejme, veľká, bez toho aby som naozaj majú myslieť o alebo si pamätať, čo boli tí, Čísla s ktorými sme hovorili o tom, kedy osem dobrovoľníkov prišla na pódium? Teraz medzitým, v inak, pokiaľ to nie je malé písmeno ako je stanovené linkou 24, stačí ju vytlačiť. Ja len chcem, aby ste sa nedotkli znaky, ktoré boli vlastne pôvodne malé písmená. Takže poďme sa pozrieť. Urobiť využiť. Spracovala, OK. . / Zarobiť. A dovoľte mi písať v H-E-L-L-O malými písmenami, Enter. A zistíte, že je prevedený na veľká. Nechaj ma to urobiť znova iný slovo. Ako sa o D-A-V-I-D s prvým D zarábal ako meno je obvykle? Enter. Všimnite si, že je stále platná. To len, že prvý výstup D bezo zmeny cez ktoré else. Takže majte na pamäti, potom pár vecí tu. Po prvé, ak ste niekedy chceli skontrolovať dva podmienky naraz, môžete im a spolu, ako sme predpovedali. Môžete porovnať znaky týmto spôsobom a účinne liečiť znaky ako čísla, ale úprimne povedané, je to tak sakramentsky mystický Nikdy nebudem pamätať ako prísť s tým od začiatku bez uvažovania cez to na celkom trochu času. Nebolo by pekné, keby niekto tam napísal funkciu nazvanú je zníženie, ktoré by mohli zodpovedať za mňa true alebo false, tento znak je malá? No našťastie, kto napísal ctype.h urobil presne to. Nechaj ma ísť sem a pridať Cdruh pre c typy, a teraz nechaj ma ísť sem dole a prepísať tento riadok takto. Takže ak sa to nazýva, je nižšia, tvrdím, je držiak i, potom idem zmazať tieto dva riadky dohromady. Takže teraz niekto iný, dúfam, napísal s názvom funkcie je nižšia, a to ukázalo sa, že to urobili, a oni deklarovali že vnútri ctype.h. A teraz idem nechať linku 27 sám, idem nechať linku 31 sám, ale všimnite si, ako veľmi som sprísnila svoj kód. Teraz je čistejšie. Je to menej ťažké prehliadnuť pretože sa funkcie, je navyše tak nádherne menoval to len robí to, čo hovorí. Takže teraz idem zachrániť to. Chystám sa oddialiť. A rovnako ako v Scratch by ste mohli mať Booleovské operácie, logické hodnoty true alebo false, to je presne to, čo je nižšia skutočne vráti. Dovoľte mi, aby som prekompilovať. Dovoľte mi, aby som re-run. A teraz skúsme to znova, H-E-L-L-O, Enter. To je celkom dobrý. A skúste to znova, uistite sa, že som sa nezničí niečo vymyslieť. To je aktivované rovnako. Ale to nie je dosť dobrý, pretože Ďalšia vec, ktorá ma nikdy spomeniete, ak pracujem cez to naozaj opatrne na, povedzme, papier to sakramentsky riadok. Nebolo by pekné, keby tam boli volaná funkcia na hornej? Tak to dopadá, že je v ctype.h rovnako. Chystám sa ísť dopredu a zadajte - dovoľte mi, aby som tento riadok späť. Namiesto toho tu, nechaj ma ísť napred a hovoria, nahrádzať% C Výsledkom volanie tejto funkcie Horný na i-tom charakteru s A teraz všimnete, že to stále trochu vyvážiť. Musím sledovať, koľko zátvorky som otvoriť a zatvoriť. Takže teraz je to ešte čistejšie. Teraz je tento program stále lepšie a lepšie navrhnuté pravdepodobne preto, že je oveľa, oveľa čitateľnejší, ale Nie je to poďme napraviť. Urobiť využiť. . / Zarobiť. H-E-L-L-O. Poďme spustiť znovu, D - V-I-D. OK, takže sme stále v celkom dobrej kondícii. Ale teraz k hornej. Navrhujem, že je tu ešte jedna zjemnenie môžeme robiť, že by bolo naozaj pekné, mohlo by to naozaj dotiahnuť do tohto kódu, a naozaj nám päť z piatich pre návrh, napríklad. Čo by bolo pekné, ako sa zbaviť? No, pozrite sa, ako sakramentsky dlhé tento blok Kód je len niečo jednoduché. Teraz, ako stranou, pretože môžete mať vidieť v super časti minulý víkend, nemusíte nevyhnutne potrebuje, Zložené zátvorky, keď stačí mať jeden riadok kódu, aj keď sme navrhli držať je tak, že je oveľa jasnejšie, ako v Scratch je v tvare písmena U bloky, čo je vo vnútri pobočky. Ale nebolo by to bolo pekné, keby na hornej, keď vzhľadom k jeho vstup, otočil sa do veľké písmená, ak tomu tak nie je, a to, čo by bolo úžasné v opačnom prípade, ak je to už veľká? Stačí prejsť cez a nechať to byť. Takže možno, že to robí. Mohol by som to skúsiť, a len dúfam, , Že nemá, ale dovoľte mi, aby som predstaviť jednu vec. Namiesto použitia tohto zabudovaný terminál Okno sa tu pripomenúť, že Toto námestie čierna ikona vám väčšie okno terminálu, že môžem plný obrazovky, ak chcem? Tak to dopadá, že sú nejako podivne menoval, ale je tu nazývajú veci manuálových stránok, manuálové stránky, muž v krátkosti, a ja k nim pristupovať podľa písanie muž - čo chcem písať na stroji? Človek do hornej. A teraz zistíte, ak existuje funkcie vnútri počítača, v V tomto prípade je prístroj, ktorý je práve operačný systém Linux, bude to aby mi trochu záhadný súbor výstup, ale zistíte, že v priebehu času vždy je formátovaný do značnej miery rovnaké, takže začnete to zvyknúť. Všimnite si, v hornej časti na hornej a zrejme je rovnaký dokumentácie na znížiť. Ten, kto písal, že to bolo nejaké rezanie rohy a dať to všetko na jednej stránke. Účelom týchto vecí "v život je previesť List hornej alebo malé písmená. Všimnite si, že v Synopsis manuálové stránky Učí ma, čo mám súbor zahrnúť používať túto vec. To mi dáva podpisy na nich funkcie, a to ako z nich, a to aj keď sme teraz len starostlivosť o jednom. Tu je teraz popis. Ak chcete horný prevádza list c veľká, ak je to možné. Stále nie je to poučné, ale dovoľte mi, aby som teraz pozrieť pod návratovú hodnotu, vec, ktorý je odovzdaný späť. Takže vrátená hodnota je, že prevedené písmeno alebo c, ak konverzie nebolo možné. Čo je to c? Pôvodný charakter. Pôvodný charakter a vieme, že by opäť stúpa do synopse, a ten, kto to napísal Funkcia sa rozhodli, že vstupné sa na hornej a spodnej, je len ľubovoľne sa mal volať c Mohli by hovorili, že väčšina niečo chcú, ale stále to jednoduché c Tak som konzultovala manuálovú stránku. Táto veta uisťuje ma, že ak to nie je malé písmeno, je to bude daj mi C, čo je perfektné, čo znamená, že môžete zbaviť môj iný stav. Tak nechaj ma ísť späť do gedit, a Teraz mi dovoľte to. Idem kopírovať mojej printf vyhlásenia. Chystám sa ísť dopredu a doprava vnútri slučky pre tlač, ktoré sa, a získať zbaviť sa tohto celku, ak by konštrukcia. Nebol to zlý nápad, a bolo to veľmi Koľko správne av súlade s všetko, čo sme kázali, ale jednoducho nie je nutné. Akonáhle si uvedomíte, niektoré knižnice funkcia existuje, že niekto iný písal, alebo možno ste napísal inde súboru, môžete ho použiť, a naozaj začať sprísniť kód. A keď hovorím veci ako dobrom štýle, skutočnosť, že sa táto osoba nazýva pracovať na hornej, alebo skôr, je nižšia je nádherne užitočná, pretože sú veľmi popisné. Tie by nechcel volať funkcie x a y a z, ktoré majú oveľa, oveľa menší význam. Akékoľvek otázky týkajúce sa tejto série vylepšenie? Takže stačí teda jeden z takeaways je dokonca ako svoj vlastný problém set - možno problém nastaviť jednu, ale Určite P nastaviť dva a dopredu, dokonca keď sú správne nemusí nutne znamenať, že sú perfektné len ešte, alebo veľmi dobre navrhnuté. To je ďalší osi začať premýšľať o tom. Takže to bol reťazec vnútri vášho pamäť počítača, ale ak máte celá partia postáv ako H-E-L-L-O v pamäti RAM, a predpokladajme, ktoré ste v programe volať získať reťazec niekoľkokrát taká, že zavolajte si reťazec raz, potom zavolajte si reťazec znova. No, čo sa deje na sa stalo v priebehu času? Inými slovami, ak máte linku kód, aj keď z kontextu, ako je string s dostane - poďme na to. String name rovná sa reťazec. Takže predpokladám, že riadok kódu je určená požiadať užívateľa o jeho alebo jej meno. Táto ďalší riadok kódu je chcel opýtať, užívateľ pre jeho alebo jej školy, a Táto ďalší riadok, a tak ďalej. Predpokladajme, že sme stále pýtajú užívateľa pre ďalšie a ďalšie a ďalšie reťazec. Chystajú sa zostať v pamäti v rovnakom čase. Jedným z nich je nebude handry druhej. Škola je neprepíše iný. Ale kam sa všetci skončí v pamäti? No, ak začneme kresliť na obrazovku, ktoré môžeme použiť túto vec tu ako tabuľu, ak je táto čierna obdĺžnik predstavuje môj počítač je pamäť, budem ľubovoľne začať rozdeliť ju na malé štvorčeky, z ktorých každá reprezentuje jeden bajt pamäte. Úprimne povedané, ak máte gigabajty pamäte RAM v týchto dňoch, máte miliardu bajtov pamäte vo vašom počítači, takže miliarda týchto štvorcov. Takže stačí povedať, to v skutočnosti nie je v mierke. Ale my sme mohli držať čerpanie všetkých týchto zjavne nie sú v mierke štvorca, a to súhrnne predstavuje mojej pamäti počítača. Teraz budeme proste bodka, bodka, bodka. Takže inými slovami, keď som teraz vyzve Užívateľ s get reťazca, aby mi reťazec, čo sa stane? Ak používateľ zadá "ahoj", ktorá sa končí v H-E-L-L-O. Ale predpokladajme, že Užívateľ potom druhy uvedené v - Vlastne by som nemal robiť Dobrý deň, pretože sa pýtame je ich názvy. Tak poďme naspäť, keď to zvládnem. Takže keď som typ D-A-V-I-D pre moje meno, ale pripomenúť, že druhý riadok Kód bol dostať reťazec znova získať ich školu. Kde je, že slovo, ktoré užívateľ druhy uvedené v ísť ďalej? No, možno to bude ísť do H-A-R-V-A-R-D. Takže aj keď som vypracovaný ako dvoch radoch, je to len celá partia bytoch vo vašom počítača RAM. Je tu problém teraz, pretože teraz, keď som pomocou RAM v tomto veľmi rozumné ale trochu naivný spôsobom, čo môžete nie je zrejme rozlišovať? Tam, kde jeden začína a kde jeden koniec, nie? Sú trochu rozmazaniu dohromady. Tak to dopadá počítač to nerobí. Dovoľte mi vlastne môžete vrátiť v čase a niekoľko znakov a miesto Harvarde bude ihneď po užívateľským menom, používateľ skutočne dostane, za scény, špeciálny znak vložil Počítač pre neho. / 0, inak známy ako znak NUL nepríjemne tzv N-U-L, nie N-U-L-L, ale píšete to ako / 0. Je to len všetky nulových bitov je marker medzi prvým slovom, ktoré užívateľa napísal a druhý. Takže Harvard vlastne teraz končí ako je sekvencia znakov a ešte jedna / 0. Takže inými slovami, tým, že tieto overovací hodnoty, osem susediace nula bity, si teraz môžete začať rozlišovať jeden znak z druhého. Takže celú tú dobu, čo bolo "ahoj" je vlastne "ahoj" s / 0, a Zatiaľ by sa tam veľmi dobre byť trochu viac pamäte RAM vnútri počítača. Nechaj ma urobiť jednu vec teraz. Ukazuje sa, že všetky z týchto štvorcov sme boli kreslenie, sú, áno, reťazca, ale všeobecne, tieto veci sú polia. Pole je len kus pamäte to je chrbtom k sebe k sebe k sebe, a zvyčajne používajú rad spôsobom tohto hranatá zátvorka zápisu. Takže budeme vidieť, ako sa trochu v priebehu času, ale dovoľte mi ísť dopredu a otvoriť, povedzme veku. A všimnite si, čo s nimi môžeme robiť tie isté triky, malé trochu syntaxe tu. Takže v rade 17 tohto programu - skutočnosti, dovoľte mi, aby som najprv spustiť program a tak môžeme vidieť, čo toto robí. Zavolám, aby na veky skompilovať tento program. . / Vek. Koľko ľudí je v miestnosti? Nazvime to tri. Vek prvej osobe? 18, 19, a 20. A teraz trochu smiešne, ja len urobili program, ktorý ages ty traja ľudia. Takže je tu jasne príležitosť pre nejakú zábavu aritmetiky tu. Našťastie, matematika je správna. 18 šiel do 19, 19 išiel do 20 a tak ďalej. Ale to, čo naozaj znamená byť Ilustratívny je, ako sme ukladanie vek týchto troch ľudí. Dovoľte mi priblížiť, čo je tu deje. Takže v prvom rade, by mali tieto prvý pár riadkov je stále dosť známe. Ja som len výzva k zvoleniu počet ľudí v miestnosti. Potom som pomocou dostať int a robiť, keď sa to znova a znova a znova. Videli sme, že vzor predtým, ale linka 27 je nový a celkom užitočné, a bude sa stále užitočné. Všimnite si, že to, čo je v súlade 27 je, že som sa zdajú byť vyhlásenie int tzv veky, ale počkajte. Nie je to len int veku. Tam je táto hranaté zátvorky, vnútri ktorej je n Takže držiak n v tejto súvislosti, nie vnútri printf vyhlásenie tu, ale V tejto jedinej linke 27, tento riadok povedal, daj mi n INT, z ktorých každá je typu int. Tak to je vedro, aby som tak povedal, z, v tomto prípade tri celé čísla späť do chrbtom k sebe, takže som skutočne má tri premenné. Alternatívou, aby sa jasné, že je to. Ak by som chcel najprv študenta vek, mohol by som to urobiť. Keby som chcel druhý študenta vek by som mohol urobiť. Keby som chcel tretie študenta vek, mohol by som to urobiť. A nedaj bože potrebujeme každého z nás vek v tejto miestnosti - Myslím, že je to sakra veľa kópie, vložiť znova a znova a znova. A navyše, keď som skompilovať tento program, ak ďalší študent chodí cez von z dverí, teraz moje číslo premenných je nesprávne. Takže to, čo je pekné o pole je Akonáhle sa začnete cítiť sami kopírovanie a vkladanie, je pravdepodobné, že je to nie je najlepší prístup. Pole je dynamická potenciálne. Neviem dopredu, koľko ľudí sa bude v miestnosti, ale viem, že musím n z nich, a budem zistiť, n, keď príde čas. Tento riadok kódu teraz znamená, daj mi kus pamäti, ktorá vyzerá takto kde počet schránok na obrazovke je úplne závislá na n ktoré Užívateľ napísal palcov Takže teraz zvyšok tohto programu je vlastne celkom podobné tomu, čo sme Len som sa znaky. Všimnite si, mám pre sláčiky začína v riadku 30. Takže hneď po som si pole, som prechádzať z y rovná nule až na n Len som to poučné printf správy len hovorím, daj mi vek osoby #% aj tak číslo jedna, číslo dva, číslo tri. A prečo som to urobil? Úprimne povedané, ľudia radšej počítať od jednej na hore, zatiaľ čo počítačoví vedci, nuly hore. počítačoví experti nebudú použiť tento druh programu, takže sme bude len začať počítať v jednom, ako normálnych ľudí. A teraz v súlade 33, všimnete mierne iný kus syntaxe. I-tý vek v tej premennej typu poľa dostane int. A teraz konečne, je to len aritmetický sem. Rozhodol som sa v samostatnej slučke tvrdí, nejaký čas ubieha, a teraz v tejto samostatná slučka, tieto riadky spustiť. Odo dneška za rok, človek i bude aj rokov, ale oznámenie nie je premennej i To je teraz% aj pre int. A oznámenia ako prvý zástupný symbol, Aj zapojte aj plus 1, takže počítame ako normálny človek. A potom sa za hodnotu ich veku, pre i rokov, beriem ages držiak i - a prečo to robím a jeden tu? Proste veku. Je to moja hlúpa voľba programov. Proste vo veku jedného roka. Mohol by som písať v akejkoľvek číslo, ktoré Ja vlastne chcem tam. Takže čo to vlastne všetko relevance tu? No, dovoľte mi vlastne listovať sem a namaľovať obraz toho, čo leží pred nami. Čo budeme robiť s našou ďalšou Problém nastaviť dva sa pustili do svet kryptografie. Takže to je reťazec znakov, takže sekvencie z viacerých znakov, a to, čo to hovorí? Nie je to v online verzii zo snímok. Takže tvrdím, že to sa rovná to, hlúpa reklama od mnohých rokov pred ktorý by mohol vyvolať jeden z jeho pôvodu. Tak to je príklad šifrovanie alebo šifrovanie. Ukazuje sa, že ak chcete v skutočnosti poslať informácie alebo zdieľať informácie s niekým bezpečne ako správy, ako je táto, môžete vyškriabať listy. Ale zvyčajne sú slová nie sú kódované náhodne. Sú deionizovaná nejakým spôsobom alebo zmeniť nejakým spôsobom, aby - oops. To je zábava spojler pre nabudúce. Takže si môžete zmapovať, čo je zrejme O všímať B., ktorý zoradí kapitalizácie ručičiek. Zrejme r e sa stane. Zdá sa F-H-E-R sa S-U-R-E. Tak Ukazuje sa, že je mapovanie, a V tomto prípade je to dosť hlúpy mapovanie, či má niekto na to prišiel? To je niečo, čo nazýva Rot 13, 13 Otočiť. Je to najhlúpejší šifrovanie mechanizmy, pretože to doslova pridáva 13 na každého z písmen, hlúpy v tom zmysle, že ak ste práve mať trochu voľného času na ruky a ceruzka, alebo si len myslím, že až v hlave, môžete skúsiť všetky možné obrázky - jeden, dva, tri, bodka, bodka, bodka, len 25 otočte celú abecedu a nakoniec budete zistiť, čo táto správa je. Takže ak ste niečo také v základnej školy odovzdávanie správ do najlepší priateľ, ak vaše základné školy Učiteľ len prečítať správy a brutálny nútení riešenie, Možno ste dostali odpoveď, že. Teraz samozrejme, v reálnom svete, kryptografie je zložitejšia. To je úryvok textu, ktorý je počítačový systém, ktorý má užívateľské meno a hesiel, ako takmer všetci z nás robia, a To je to, čo by mohlo vaše heslo vyzerať, ak je uložený na pevnom riadiť, ale v zašifrovanej forme. To nie je len rotácie listov, Je B a B je C. To je oveľa sofistikovanejšie, ale používa čo je všeobecne známe ako tajný kľúč kryptografie. Tento snímok rozpráva nasledujúce Príbeh s niekoľkými ikonami. Na ľavej strane, máme to, čo zavoláme obyčajný text. Vo svete kryptografia, prostý Text je pôvodný správu písaný v angličtine alebo francúzštine alebo jazyka vôbec. Ak chcete zašifrovať, budeme odovzdávať je obrazovo cez visiacim zámkom, takže niektoré druh algoritmu, niektoré funkcie alebo program, ktorý niekto napísal že sa perie písmená dúfajme viac komplikovane ako jednoduchým pridaním 13 ku každému z nich. Čo získate z tohto procesu, Uprostred sa nazýva cyphertext. Tak trochu sexy slová. To len znamená, že je šifrovaná verzia obyčajný text. A iba ak máte rovnaký tajomstvo, 13 alebo mínus 13, ste schopní dešifrovať správy takhle. Takže problém nastaviť dva, medzi vecami, budete robiť, keď v Hacker Edition, budete musieť napísať kód bezva tieto heslá, prísť na to, čo sú zač a ako boli zašifrované, ale my vám trochu z vedenia pozdĺž cesty. V Standard Edition, predstavíme pár šifier, šifrovanie mechanizmy, jeden s názvom Caesar, jeden volal Vigenère, ktoré sú stále rotačné šifry, kedy sa stane niečo, B sa stáva niečím, ale musíte to urobiť programovo pretože tam bude skutočne tajná kľúč zúčastnených, z ktorých je zvyčajne číslo alebo kľúčové slovo, ktoré iba odosielateľ a príjemca týchto správy by mal pochopiť. Teraz, to vlastne má inkarnácie v reálnom svete. Toto, napríklad, je málo orphan Annie je tajné dekodér prsteň, a môže skutočne realizovať tieto rotačné šifry - Sa stáva niečím, B sa stáva niečo - s niekoľkými kolesami, jeden na vonkajšej strane, druhá vnútri taká, že ak otočíte kolieskom alebo krúžok, môžete skutočne zarovnať listy s rôznymi písmenami, získanie tajného kódu. A tak ako Cliffhanger pre dnešok, čo som myslel, že to je trochu návrat, že ak zapnete televíziu 24. decembra, môžete sledovať Film najmenších podrobností pre 24 hodín v rade. Ale pre dnešok, otvorím to tu a dá nám len dve minúty z pedagogicky relevantné Vianočný príbeh s malým chlapíkom menom Ralphie. [PLAYBACK] -Či už je to známe všetkým a rôzne, že Ralph Parker je menovaný člen Malý sirota Annie tajomstvo kruh a je oprávnený na všetky so cťou a výhody vyskytujúce sa na ne vzťahujú. -Podpísané, Little Orphan Annie. Spolupodpísal, Pierre Andre atramentom. Vyznamenania a výhody už vo veku deviatich rokov. [Kričal na rozhlasových] Poď, ideme na to. Nepotrebujem All That Jazz o pašeráci a piráti. -Počúvajte zajtra pre uzavretie dobrodružstvo čierny pirátska loď. Teraz je čas na tajomstvo Annie Správa pre vás členmi tajného kruhu. Pamätajte si, deti. Iba členovia Secret Circle Annie vie dekódovať Annie tajnú správu. Pamätajte si, že Annie je závislá na vás. Nastaviť piny B2. Tu je správa. 12., 11, 2 - -Ja som vo svojom prvom tajnej schôdzke. -25, 14, 11, 18, 16 - -Pierre bol vo veľkej hlasové dnes. Som spoznal, že z dnešnej správy bolo naozaj dôležité. -3, 25. To je správa od Annie sama. Pamätajte si, že nikomu to nehovorte. -90 Sekúnd neskôr som v jedinej miestnosti v dome, kde deväťročný chlapec mohli sedieť v súkromí a dekódovanie. Aha, B. som išiel na ďalšie. E. Prvé slovo je "byť." S. Prichádzalo to teraz jednoduchšie. U. 25. To je R. -No tak, Ralphie. Musím ísť. -Hneď som dole, mami. Gee svišťanie. -T. O. Uistite sa, že. Uistite sa, že to, čo? Aký bol malý sirota Annie snaží povedať? Uistite sa, že to, čo? -Ralphie, Randy má ísť. Prosím vás vyjde? -Dobre, mami. Budem hneď späť. -Bol som stále bližšie do súčasnosti. Napätie bolo hrozné. Čo to bolo? Osud planéty môže visí na vlásku. -Ralphie, Randyho musím ísť. -Hneď som von kričať nahlas. -Už tam skoro sme. Prsty sa mi letel. Moja myseľ bola oceľová pasca. Každý pórov vibroval. To bolo skoro jasno. Áno, áno, áno, áno, áno. -Uistite sa, že piť Ovaltine. Ovaltine? Mizerný reklamu? Ten hajzel. [END PLAYBACK] Reproduktor 1: Toto je CS50, a že bude problém nastaviť dva. Uvidíme sa budúci týždeň. SPEAKER 2: Na ďalšom CS50, sa to stane. Reproduktor 1: Takže jednu tému, nemáme Pozrel sa na potiaľ je že funkčných ukazovateľov. Teraz, ukazovateľ funkcia je len adresu verejné funkcie, ale rovnako ako - syn -