[Prehrávanie hudby] David J. Malan: Dobre. To je CS50, a to je koniec týždňa 2. Takže dnes, ideme pokračovať v našom vzhľad na to, ako reprezentovať veci pod hood-- vzďaľuje z čísel ako čísel a plávajúcou desatinnou čiarkou hodnoty a zamerať sa na reťazca a nakoniec ďalšie zaujímavé programy. Ale budeme sa tiež pozrieť na pár domény špecifické problems-- z ktorých prvý bude byť zahŕňajúce kryptografiu, umenie kódovanie informácií, v ktorej vidíte vyššie tu je obraz Radio Orphan Annie Tajomstvo dekodér prsteň z minulosti. To je vlastne veľmi primitívna forma a dieťa-priateľský forma cryptopgraphy pričom tento krúžok má dve disks-- jeden vnútorný a jeden vonkajší. A otočením jedného z tých, môžete v podstate sa zoradia písmená ako a až Z s inými písmenami ako B prostredníctvom A. Inými slovami, môžete doslova otočiť abecedu, tak prísť s mapovaním od listy listy tak, že ak chcel poslať tajnú správu s niekým, ako je Annie, môžete napísať so svoju správu a otočte listy, pričom, ak máte na mysli hovoriť "A", namiesto toho povedal "B" Chcete tým povedať, "B" namiesto toho hovoria "C" - alebo niečo trochu múdrejší než to-- a potom, nakoniec, tak dlho, kým Anna má tento dekodér prsteň, vie dekódovať správu. Teraz môžete pripomenúť, v skutočnosti, že táto bol použitý vo veľmi známeho filmu, ktorý hrá najmenších podrobností počas Vianoce. Poďme sa pozrieť tu. Ralphie PARKER: "Či už je to známe, že všetko v súhrne že Ralph Parker je menovaný člen Little Orphan Annie Secret Circle a je oprávnený na všetky vyznamenania a výhody dochádza k nim. " Ralphie PARKER (rozprávanie): Podpísané Malý sirota Annie. Spolupodpísať, Pierre Andre! Atramentom. Vyznamenania a výhody, Už vo veku deviatich rokov. [Prehrávanie hudby] [RADIO klábosení] Ralphie PARKER: Poď. Poďme na to. Nepotrebujem All That Jazz o pašerákov a pirátov. Rozhlasový hlásateľ: Počúvajte zajtra noc záverečné dobrodružstvo The Black pirátskej lodi. Teraz je čas pre Annie Tajná správa pre vás členov z The Secret Circle. Nezabudnite deti len členovia Annie Secret Circle vie dekódovať Annie tajnú správu. Pamätajte si, že Annie je závislá na vás. Nastavte si piny pre B-2. Tu je message-- 12, 11, 2-- Ralphie PARKER (rozprávanie): I som v prvej tajnej schôdzke. Rozhlasový hlásateľ: --25, 14, 11, 18, 16-- Ralphie PARKER (rozprávanie): Oh, Pierre bol vo skvelej hlasovej večer. Mohol by som povedať, že dnes je Správa bola naozaj dôležité. Rozhlasový hlásateľ: --3, 25. To je správa od Annie sama. Pamätajte si, že nikomu to nehovorte. [Lapal po dychu] Ralphie PARKER (rozprávanie): Deväťdesiat sekúnd neskôr som v jedinej miestnosti v Dom, v ktorom chlapec z deviatich mohol sedieť v súkromí a dekódovať. Ah. "B" [Zasmeje sa] Ralphie PARKER (rozprávanie): Išiel som ďalej. "E." Prvé slovo je "byť." Áno! Prichádzalo to teraz jednoduchšie. "U." [Zasmeje sa] Randy PARKER: Ale no tak, Ralphie. Musím ísť! Ralphie PARKER: Hneď som dole, mami. Gee svišťať. "T." "O." "Uistite sa, že na. "" Uistite sa, že "Čo je? Aký bol malý sirota Annie snaží povedať? "Uistite sa, že" to, čo? MATKA: Ralphie, Randy má ísť. Mohli by ste, prosím von? Ralphie PARKER: Dobre, mami! Hneď som sa! Ralphie PARKER (rozprávanie): Bol som stále bližšie. Napätie bolo hrozné. Čo to bolo? Osud planéty môže visieť na vlásku. MATKA: Ralphie, Randy musí ísť! Ralphie PARKER: Budem hneď sa, preboha! Ralphie PARKER (Rozprávanie): Už sme skoro tam! Prsty sa mi letel! Moja myseľ bola oceľová pasca. Každý pór vibroval. Bolo skoro jasno! Áno! Áno! Áno! Áno! Ralphie PARKER: "Uistite sa, že piť svoju Ovaltine. " Ovaltine? Mizerný reklamu? [Prehrávanie hudby] Ralphie PARKER: Ten skurvysyn. [Smiech] David J. Malan: Takže to je potom letmý pohľad na to, čo kryptografie môže byť pre tohle-- A piť z minulosti. Tak rýchle oznámenia. Ak ste bez tejto Piatok v 13:15 a bolo by sa k nám pripojiť na CS50 obed, hlava na tejto adrese tu. Kto skôr príde, ten skôr melie ako obvykle. Ale postupom času, budeme sa uistite, že väčšina niekto, kto by sa chceli zúčastniť môže naplánovať-múdry. Takže reťazca. Máme Zamyla-- koho ste sa stretli s najväčšou pravdepodobnosťou v Zadanie problému 1-- ktorého názov uvedený takto. A predpokladám, že ste zadali svoje meno do počítačového programu, ktorý je používať niečo ako getString. Aby bolo možné načítať tie stlačenia klávesov, ako máme ísť o zastupovaní reťazec, slovo, odsek, alebo viac písmen, ako sú tieto tu? Hovorili sme minule o celé čísla a problémy ktoré vzniknú s pretečeniu celého čísla a plávajúcou desatinnou čiarkou hodnoty a problémy, ktoré vznikajú v rámci presnosti. S reťazci sme aspoň majú trochu väčšiu flexibilitu pretože strings-- len v reálnom svet môže byť docela ľubovoľnej dĺžky. Pekne povedané, dosť dlho. Ale aj potom, budeme zistil, že počítače môžu niekedy spustiť z pamäte, a dokonca ani uložiť dosť veľký reťazec. Ale teraz, poďme začať vizualizovať reťazec ako niečo, čo v týchto škatuliach tu. Takže šesť také škatuľky, z ktorých každá predstavuje znak alebo znak "." Takže pripomenúť, že "char" - c-h-a-r-- je jeden z vstavaných dátových typov v jazyku C. A čo je príjemné je, že môžete použiť že druh ako stavebný kameň, skladačky, ak chcete, k vytvoreniu Väčší typ dát, ktoré budeme aj naďalej volanie "reťazec". A teraz, čo je užitočné, o myslení o veciach, ako sú reťazce týmto spôsobom? No, ukázalo sa, že môžeme skutočne využiť túto štruktúru skutočne prístup k jednotlivé znaky v celkom priamočiaro. Chystám sa ísť dopredu a vytvoriť Súbor s názvom "stringzero.c" ale môžete hovoriť, čo chcete. A na internetových stránkach kurzu je Už tento príklad vopred, takže sa nemusíte Typ všetko von. A budem pokračovať a najprv urobiť int main neplatné. A v priebehu niekoľkých dní, začneme dráždiť seba čo void je tu, prečo je to int vedľa hlavnej, a tak ďalej. Ale teraz, poďme pokračovať kopírovať vložiť, že. Idem vyhlásiť reťazec s názvom s. A ja sa vrátiť z GetString za akýchkoľvek užívateľ zadá. To bude jednoduchý Program, žiadne pokyny, Ja len tak naslepo Predpokladáme, že užívateľ pozná čo robiť, aby to jednoduché. A teraz budem mať pre sláčiky. A vnútri mojej pre sláčiky som bude mať int aj dostane na nulu. A aj je, opäť, len konvencie, premenná index pre počítanie, ale ja som mohol zavolať to, čo chcem. Chystám sa urobiť aj menej than-- dobre Zamyla meno je šesť písmen dlhé. Takže idem tvrdo Kód, ktorý tam teraz. A potom som ++. A teraz vnútri týchto kučeravé traky budem robiť printf, a chcem vytlačiť jednu znakov naraz. Takže budem používať% c pre snáď prvýkrát. A potom chcem tlačiť každý znak na samostatnom riadku. Tak idem dať málo spätné lomítko n tam. Close quote. A teraz chcem urobiť niečo tu. Chcem vytlačiť konkrétne písmeno v reťazci, s, ako som iterácie z na do šiestich nulu. Inými slovami, chcem vytlačiť i'th charakter s. Teraz, ako to urobiť? Tak podobne ako krabica v toto zastúpenie tu druh, vykúzliť predstavu o boxe písmená, môžete to urobiť podobne syntakticky v C jednoduchým zadaním, Chcem vytlačiť s'S i'th charakteru. Pomocou hranatých zátvoriek na klávesnici počítača že na klávesnici a USA sú zvyčajne nad vašou kláves Enter. Takže to nie je úplne v poriadku napriek tomu, ako ste si možno všimli. Ale budem druhu slepo dopredu tu. A ja budem robiť, aby reťazec 0. Ale ako som to, uvidíme, či budeme nemôže predvídať niektoré bežné chyby. To bude zostaviť? Nie, mi chýba veľa vecí. Knižnice som počul. Tak ktorý hlavičkové súbory ja by som mohol chcieť pridať sem? Jo. Divákov: Potrebujete Štandardné I / O [nepočuteľné] David J. Malan: Výborne. Tak som potrebné Standard I / O. Za to, čo Účelom nechcem Standard I / O? Pre printf. Takže sú stdio.h. A tiež navrhnúť, aby mi patrí knižnica CS50 akého dôvodu? Ak chcete mať reťazca. Tak uvidíme, čo Knižnica CS50 je robí vytvoriť tento pojem reťazca. Ale teraz, stačí premýšľať to ako skutočný dátový typ. Tak, že sa zdá byť trochu vyčistiť. A teraz budem pokračovať a naozaj to, aby reťazec 0. Zostavené. Tak to je dobre. Takže ./string0 mi dovoľte priblížiť, takže môžeme viď bližšie, čo sa deje. Enter. Z-A-M-Y-L-vstúpiť. A my sme vytlačiť na Zamyla menom. Tak to je celkom dobrý. Takže teraz poďme do toho a znova spustiť tento program, a zadajte z Daven je celé meno. Prekvapenie, prekvapenie. Enter. Hmm. Nemáme vytlačiť Daven je plné krstné meno správne. Práve toto by malo byť zrejmé, v Retrospect pretože to, čo, druh rozhodnutia hlúpy návrh? Jo, tvrdo som kódované šesť vnútri mojej slučky for. Teraz som to urobil len preto, že Vedel som, že Zamyla meno to bude šesť písmen. Ale určite to nie je všeobecné riešenie. Tak to dopadá môžeme dynamicky zistiť dĺžku reťazca volaním funkcie nazýva strlen. Opäť platí, že úmyselne stručne pomenovaný práve aby bolo pohodlnejšie písanie. Ale to je synonymom pre získanie dĺžku reťazca. Chystám sa ísť späť do svojho terminálu okno a znovu spustiť kompilátor. Ale je to na mňa jačať. Implicitne deklarovať funkciu knižnice strlen s typom unsigned int const-- Stratil som sa. Úplne. Tak, ako je to najmä vaša oči začnú pohasly sa chybové správy, ako je tento, zameranie úprimne na prvých pár slov. Vieme, že problém je v linka 8, ako je tu uvedené. A to je v reťazci-0.c. Implicitne vyhlásení knižničný funkcie strlen. Tak, že sa všeobecne bude byť vzor chybových správ. Implicitne vyhlásil niečo. Takže v skratke, čo sa zdalo, že som sa urobil s ohľadom na linke 8, tu. Čo by mohlo byť riešením ešte ak ste nikdy nepoužívali strlen seba? Divákov: Časť inou knižnicou? David J. Malan: Part z iného knižnice. Tak to je deklarované, aby som tak povedal. To je uvedené v nejakom súbore iné ako stdio.h a CS50.h. Tak kde je to definované? Ak chcete byť úprimný, buď máte len že to z vrcholu vašej hlavy, alebo si to na Googli a zistiť. Alebo viem, som otvoril v CS50 spotrebič terminálový program, ktorý je jednoducho veľký, verzia plná obrazovka čo je v spodnej časti okna gedit je. A ukázalo sa, že je tu Podobne stručný príkaz s názvom muž pre ručné, kde keď zadáte názov funkcie a stlačte klávesu Enter, dostanete späť celkom Arcane dokumentácie. Je to text, ktorý všeobecne vyzerá niečo také. Je to trochu ohromujúce na prvý pohľad. Ale úprimne povedané, ja budem nechať oči pohasla a iba sa zameriavajú na strane Starám sa o pre túto chvíľu. Čo je to. Ktorý vyzerá ako štrukturálne niečo, čo som oboznámený sa. Naozaj manuálové stránky, tak hovoriť, vám povie, v čom hlavičky súboru funkciu ako strlen je definovaný. Takže som ísť späť do gedit. A ja idem do toho a pridať sem # include a súbor uložte. Chystám sa vyčistiť obrazovku Control L Ak ste premýšľal. A ja sa znova spustiť make string.0 zostavuje tentoraz. ./string.0 Zamyla. Zdalo sa, že pracovať Nechaj ma ísť dopredu a spustite ho Davenport. Enter. A to tiež zdalo, že funguje. Takže, čo môžeme urobiť o niečo lepšie, než to, keď môžeme začať uprataný veci sa len trochu. A ja vlastne predstaviť jednu vec teraz. Chystám sa ísť dopredu a uložiť to v inom súbore. A ja idem volať Tento súbor string1.c len byť v súlade s kódom budete môcť nájsť na internete. A poďme zamerať sa na presne rovnaký kód. Ukazuje sa, že som bol druh odberu za samozrejmosť to, že môjho notebooku, a naopak, CS50 spotrebiče má veľa pamäte, veľa RAM, veľa bajtov priestoru , V ktorom môžem ukladať reťazca. Ale realita, ak som napísal dlhý dosť a dosť klávesov, Mohol by som v type teórie vo viacerých znakov ako môj počítač fyzicky má pamäť pre. A to je problematické. Rovnako ako int môže iba Počet tak vysoká, teoreticky, môžete napchať len toľko znakov do pamäte RAM, alebo Random počítača Access Memory. Tak som sa lepšie predvídať tento problém, dokonca aj keď to môže byť vzácne roh prípad, aby som tak povedal. Nestáva tak často, by sa mohlo stať. A ak sa to stane, a vôbec sa mi nepáči predvídať a program pre neho, môj program mohol robiť kto vie čo. Zmraziť, zavesiť, reštart, čokoľvek. Niečo sa predpokladalo by sa mohlo stať. Takže to, čo budem robiť Teraz, odteraz naozaj, je, ako som vôbec naslepo použiť premennú, ako s, ktoré bola priradená návratovú hodnotu niektoré ďalšie funkcie, ako getString, Idem sa uistiť že jeho hodnota je platná. Takže viem len z prečítania Dokumentácia CS50 pre getString, čo v konečnom dôsledku budeme bod, v, že getString vracia špeciálny symbol názvom NULL, N-U-L-L vo všetkých čiapky, keď sa niečo pokazí. Tak normálne, vráti reťazec. Ale inak, ak sa vráti N-u-L-ja-- budeme nakoniec vidieť, čo to v skutočnosti means-- to len znamená niečo zlé stalo. Teraz to znamená, že rovnako ako v Scratch, Môžem skontrolovať stav tu v C, ak to nie je rovné NULL. Takže ak ste ešte nevideli predtým, to len znamená, že nie je rovné. Takže je to opak toho, rovnaké rovní, čo spomínam, sa líši od jedinej rovná, čo je úloha. Takže ak to nie je presne NULL, až potom Chcem spustiť tieto riadky kódu. Takže inými slovami, predtým, než som sa ponoriť naslepo a začať iterácie na s, a brať to ako by ich postupnosť znaky, budem najprv skontrolovať, počkajte chvíľu, je to určite nie je rovnajúce sa tejto zvláštnej hodnoty, NULL? Pretože ak áno, zlé veci sa môže stať. A teraz, predpokladám, že zlé veci deje znamená, že program spadne, a nemôžete nutne obnoviť. Takže úprimne povedané, vyzerá to škaredšie. Je to trochu mätúce, teraz, aby sa pozrel na. Ale toto sa stane viac zoznámiť onedlho. Ale budem navrhovať teraz jeden ďalšie zlepšenie. To je vylepšenie správnosť. Môj program je teraz presnejšia, pretože vo výnimočných prípadoch, že nie je dostatok pamäte existuje, bude to zvládnem, a ja proste nič. Ja aspoň nespadne. Ale poďme urobiť konečné verziu tu. A súbor s názvom string2.c. Chystám sa vložiť, že rovnaký kód na chvíľu, a ja sa zameriam na to linka, 11, tu len na chvíľu. Teraz je skutočnosťou, že chytré kompilátory ako Clang mohol opraviť to pre nás zákulisia bez toho aby sme vôbec vedeli. Ale poďme si o tom myslíte zásadne za problematické konštrukcie. Tento riadok kódu je, samozrejme, hovorí, inicializovať nejakú premennú i na 0. To je celkom jednoduché. A čo je zase toto vyhlásenie, tu, aj ++, robiť? My som to nevidel, ale my sa naozaj o tom hovoriť. Divákov: Zvyšovanie i. David J. Malan: Zvyšovanie i. Takže v každej iterácii cez Táto slučka, každý cyklus, ste zvyšovanie aj po druhom. Takže to bude väčšie a väčšie, a väčší ako slučka ukončí. Ako to skončí? No tam je to prostredný stav, ktorý sme použili predtým. Videli ste, a priechody v sade P. Ale čo je to príslovie? Vykonajte nasledujúce slučku tak, ak aj je menšia než čo? Divákov: dĺžka reťazca. David J. Malan: dĺžka reťazca. Tak to prekladá docela čisto do angličtiny v tomto zmysle. Teraz je problém je, že zakaždým, keď som iterovat tejto slučky v teórii, Pýtam sa na túto otázku. Je aj menšia ako dĺžka reťazca s? Je aj menšia ako dĺžka reťazca s? Teraz sa aj mení na každej iterácii? To je. Vzhľadom k ++. Takže každé iterácii aj je stále väčší. Ale je to stále väčšia, alebo menšie, alebo meniace sa vôbec? Nie Takže pokiaľ ide o dizajn, jednej z osí pozdĺž ktorej sa snažíme vyhodnotiť kód v triede, to cíti trochu hlúpy. Rovnako ako ste doslova, na každej iterácii tejto slučky s dotazom To isté opäť sakramentsky otázka, a znova, a znova, a doslova to sa nikdy nezmení. Aspoň keď som sa dotkol s a Pokúšate sa zmeniť obsah s. Tak som si to trochu lepšie ako toto. A to, čo budem robiť, je to uviesť len jednu premennú i, ale druhá premenná budem ľubovoľne, ale konvenčne, hovoria n. Priradenie n rovné dĺžka reťazca s. A potom tu, budem robiť šikovný trochu optimalizácia, tak hovoriť, že na konci dňa už nie je správne, alebo nie menej správne ako predtým. Ale je to lepší dizajn. V tom, že ja som s použitím menej času, menej cyklov procesora, takže hovoriť, odpovedať na rovnaký otázka, ale len raz. Akékoľvek otázky týkajúce sa tohto všeobecného zásady zlepšovania, povedať, účinnosť programu je? Jo? Divákov: Prečo sa použite [nepočuteľné]? David J. Malan: Dobrá otázka. Tak prečo kladieme ++ na koniec aj miesto začiatku i? V tomto prípade, má žiadna funkčná dopad. A vôbec, mám tendenciu použiť operátor postfix takže je to trochu jasnejšie, ako , Kedy je operácia deje. Pre tých, ktorí nepoznajú, je tu ďalší vyhlásenie, ktorým by ste mohli urobiť ++ som. Jedná sa o funkčne ekvivalent v tomto prípade pretože nič iné okolo toho inkrementácia. Ale môžete prísť s prípady a riadkov kódu v ktorom to robí rozdiel. Takže všeobecne, my nie dokonca hovoriť o tomto. Vzhľadom k tomu, úprimne povedané, to je vaša Kód sexy a trochu pláštenku, a menej znakov. Skutočnosť je však taká, že je to oveľa ťažšie, Myslím, že aj pre mňa zabaliť moju myseľ okolo neho niekedy, poradie operácií. Tak bokom, ak Naozaj sa mi nepáči, aj keď to je celkom sexi hľadáte, môžete si tiež urobiť i + = 1, ktorý je škaredšie verzia Rovnaký nápad pre postfix inkrementácia. Hovorím to aj vás by sa robiť si žarty z toho, ale príde vidieť kódu niečo krásneho onedlho. [SMIECH] David J. Malan: Je to tak? Jo. Otázka uprostred. Divákov: Potrebujete povedať, int n? David J. Malan: Robíte Netreba hovoriť, int n. Preto, že sme už povedali int, nemusíte to hovoriť znova. Háčik je v tom, že n má byť rovnaký dátový typ ako ja. Tak to je len pohodlie tu. Jo. Divákov: Môžeš ísť cez tlačového charakteru s držiak aj znova? David J. Malan: Presne tak. Takže% c, prevezme späť od poslednej čas, je len zástupný symbol. To znamená dať char tu. spätné lomítko n, samozrejme, len znamená dať si pauzu tu. Tak to proste odíde, teraz, tento kus novú syntaxou. A to doslova hovorí, urvat reťazec s názvom S a choď jeho i'th znak, aby som tak povedal. A majte hovorím i'th charakter preto, že na každom opakovaní tohto cyklu je to, ako by sme sa tlačia v prvom rade je držiak 0, ako programátor by sa povedať. Potom to držiak 1, potom s držiak 2, potom 3, potom 4. Ale samozrejme je to premenná, tak som to vyjadriť aj. Kľúčové však je uvedomiť si, najmä ak ste nie bol acclimating do tohto sveta programovanie, kde sme sa všetci Zdá sa, že počítať od nuly, musím začína počítať od nuly teraz. Vzhľadom k tomu, struny, prvý znak, z v Zamyla je k lepšiemu alebo k horšiemu žiť na umiestnenie čísla nula. Dobre, tak mi dovoľte, aby nám sem do Zamyla a uvidíte, čo sa v skutočnosti deje na pod kapotou. Takže tam je to predstava typu odliatku. Možno, že ste v skutočnosti hral s tým už, Možno pre hackera vydanie P nastavili. Ale pretypovanie len sa odvoláva na schopnosti v jazyku C a niektoré ďalšie jazyky previesť jeden typ údajov do druhého. Teraz, ako môžeme vidieť celkom priamočiaro? Takže to, odvolania, je začiatok anglickej abecedy. A kontext, spomínam, od ako pred týždňom, je ASCII. American Standard Code pre výmenu informácií. Čo je len naozaj dlhá cesta hovoriť mapovanie z listov čísel, a od počtu písmen. Takže až som tu, dot dot bodka, zoradia sa, odvolanie, desatinné číslo 65 nahor. A my sme nehovorili o tom výslovne, ale určite je to podobné čísla pre malé písmená. A skutočne, tam sú. Svet sa rozhodol niekoľko rokov dávno, že len málo, malé písmená, bude 97. A malý b sa deje ako 98, a tak ďalej. A pre akýkoľvek iný kľúč na klávesnice, je tu bude podobný vzor bitov. Alebo ekvivalentne, desatinné číslo. Takže otázka po ruke, potom je, ako môžeme vlastne vidieť pod kapotou? Takže idem prejsť do gedit znova. A skôr než typ to jeden z nuly, Chystám sa ísť dopredu a stačí otvoriť niečo z dnešného kódu ASCII s názvom nula. A ASCII nula vyzerá takto. Takže poďme zabaliť svojej mysli okolo tohto. Takže prvé, čo som uviedol kód, čo je pekné. Vzhľadom k tomu, že je to doslova hovorí mi, čo mám očakávať, zobraziť mapovanie veľkými písmenami. Teraz som vlastne poriadne nevieme, čo som na mysli, že, tak sa poďme odvodiť. V angličtine, možno trochu techie Angličtina, čo robí linka 18 sa objaví sa, že robí pre nás? Len linka 18. Čo to vyvolanie? Čo sa to deje na kick off tu? Divákov: slučka. David J. Malan: slučka. A koľkokrát je že bude opakovať? Divákov: [Prechodové VOICES] šesťkrát. David J. Malan: Nie šesťkrát. Divákov: 26 krát. David J. Malan: 26 krát. Jo, je mi ľúto. 26 krát. Prečo? No, je to trochu divné, ale Začal som počítať od 65 rokov. Čo je divné, ale nie je zlé. To nie je zlé na to povedať. A robím to len preto, že, v tomto príklade, Som trochu predvídať že kapitál bol 65. Teraz to nie je najelegantnejší spôsob, ako to urobiť, aby druh pevný kód ezoterickej hodnoty, ktoré nikto sa stále očakáva, že mať na pamäti. Ale teraz, všimnite si, že som Pritom sa cez 65 a navyše 26. Vzhľadom k tomu, zrejme nemám ani nechcem robiť aritmetiku v mojej hlave. Tak som si nechal kompilátor to. Ale potom na každej slučky, každá iterácia slučky, ja zvyšovanie i. Takže teraz to vyzerá trochu záhadné. Ale mali by sme mať základné budovu bloky, s ktorými to pochopiť. % C je len zástupný symbol pre char. % Aj je zástupný symbol pre int. A ukázalo sa, že pri použití tejto Nová syntaxe, to okrúhlych zátvoriek, tak hovoriť, tak dátového typu vnútri zátvoriek, Môžem donútiť kompilátor na liečbu aj to je číslo, ale ako char. Tým mi ukazuje charakter ekvivalent tohto čísla. Teraz sem tento kód je do značnej miery zhodné. Len som chcel, aby Super explicitné skutočnosť, že som už od 97, ktorá je malé písmená. On sa cez 26 viac písmen. A ja doing-- znova liatie aj, aby som tak povedal. Alebo pretypovanie aj, aby som tak povedal. Z int na char. Takže konečným výsledkom bude, Úprimne povedané, informácie, už vieme. Chystám sa urobiť ascii-0 dot-- nie je dot c. Všimnite si, pravdepodobne robil to chyba, ako som to urobil omylom. Urobiť ASCII 0. Teraz budem robiť ./ascii-0. Budem priblížiť, a bohužiaľ to bude posúvať mimo obrazovku. Ale vidíme celú diagramu, kde mapy do 97, b mapy do 98, a ak budeme posúvať nahor ďalšie , Samozrejme, mapuje na 65. Takže je to len povedať, že čo sme boli kázne, je to ekvivalencie, je V skutočnosti tomu tak v skutočnosti. Tak rýchla zmena to. Dovoľte mi, aby som otvoriť ASCII 1.C. A všimnite si tento šikovný, triedenie z, objasnenie tohto. To je ascii-1.c, a Všimnite si tento šialený veci. A to naozaj dostane do srdca z toho, čo počítače robia. Aj napriek tomu, že my ľudia by nepočíta, pokiaľ ide o letters-- Nechcem začať premýšľať, v poriadku a potom b, a používať tie počítať fyzických objektov. Určite môžete povedať, že chcem, aby inicializovať nejakú premennú s názvom C-- ale nemohol som si to nazval anything-- takže c je inicializovaný kapitálu A. Pretože na konci dňa, počítače nie je jedno, čo ste skladovanie, je to len zaujíma, ako chcete prezentovať informácie. Ako chcete, aby sa počítač do vykladať tak, že vzor bitov? Takže to nie je niečo, čo som by vo všeobecnosti odporúčame robiť. Je to naozaj len príklad oznámiť, že môžete úplne inicializovať celé číslo k char. Vzhľadom k tomu, pod kapucňa na char, samozrejme, je len číslo od 0 do 255. Takže si určite dať to vnútri int. A čo to tiež ukazuje, že sme možno previesť z jedného typu na iný, tu, nakoniec tlač to isté. A v skutočnosti, to budem opraviť online-- bol chcel povedať, opäť tu. Dovoľte mi, aby som to vyčistiť on-line, a budeme pozri v on-line návode podľa potreby, to, čo bolo zamýšľané tam. OK. Takže posledný príklad sa zapojiť A je A a B a potom sme si vziať veci do zárezu. Takže s a b a c je v kapitalizácie a ich rovnocennosti, poďme pozrite sa na tomto príklade, tu. Ďalší príklad kódu. Budeme otvárať ten, ktorý je už bolo vykonané, a tak sme Nemusíte to písať všetko od nuly. A všimnite si v očakávaní sme pomocou viac záhlavia obrázkov, medzi ktorými je náš nový priateľ, string.h. Teraz to vyzerá, na prvý pohľad pohľad, trochu záhadné. Ale pozrime sa, či by sme nemohli uvažovať tým, čo sa tu deje. Najprv som si reťazec od užívateľa, a dal som tento reťazec v premennej s názvom. Kopírovať Vložiť pred rokom. V súlade 22, som zrejme robí presne to, čo Ja som pred chvíľou, som iterácie nad postavami s. A nové triky sú tu pomocou dĺžka reťazca, menšia optimalizácia ukladanie dĺžku reťazca v N, skôr než volanie znova strlen, a znovu a znovu. A len kontrolovať, že som je menšie ako n. A teraz, čo sa trochu zaujímavé. Ale je to len aplikácia z rovnakej nové myšlienky. Čo v angličtine robí s držiak aj reprezentovať? Divákov: Počítanie každý znak [nepočuteľné]. David J. Malan: Počítanie každý znak. A ešte stručne, s držiak aj predstavujú to, čo? Povedali by ste, že. Nie aby vás na mieste tu. Divákov: Well-- David J. Malan: Takže v prípade, že slovo je-- ak reťazec je Zamyla, ktorý starts-- Divákov: --you riešiť znaky separately-- David J. Malan: Dobrý. Presne tak. Hranatá zátvorka notácie umožňuje prístup každý znak zvlášť, takže je držiak 0 bude Prvý znak v reťazci. Držiak s 1 bude druhý, a tak ďalej. Takže otázka, pýtam sa, tu, v tomto stave je to, čo? Je i'th charakter s Greater ako alebo rovnajúcu sa malé písmená? A čo to znamená, tu, s dvojitými ampersand? AUDIENCE (spoločne): a. David J. Malan: A. Je to ekvivalent k tomu. A nie je kľúčové slovo v jazyku C, musíte použitie, protivne, ampersand ampersand. A to, naopak, pýta sa s je i'th znak menšie alebo rovné na malé písmená z? A opäť, tu je miesto, kde pochopenie základnej realizácia Počítač má zmysel. Všimnite si, že aj keď mám dot dot dot tam, vyzerá to, až z malých písmen sú všetky susediace hodnoty až z 97 nahor. A to isté pre veľké písmena začínajúce na 65 rokov. Takže stánok s jedlom, a potom, je to v angličtine, Ako by ste opísali čo riadok 24 sa robí? Jo? Divákov: Na 24 to kontroluje, či je každý znak je malá. David J. Malan: Je to overiť, či Každý znak je malé písmeno. Takže aj stručnejšie, je i'th charakter s malými písmenami? To je všetko, čo sme vyjadrenia tu logicky, trochu záhadne, ale nakoniec celkom priamočiaro. Je s to i'th znakov malými písmenami? Ak tomu tak je, a tu je miesto, kde sa veci trochu myseľ ohýbanie len na okamih, a ak áno, choďte dopredu a vytlačiť znak. Takže je to len zástupný symbol, ale to, čo postava? Prečo to robím y držiak aj mínus tento výraz tu? Tak zistíte tu vzor. Skutočné čísla nezáleží toľko. Ale všimnite si, že 97 je ako ďaleko od 65? Divákov: 32. David J. Malan: 32. Ako ďaleko je 98 z 66? Divákov: 32. David J. Malan: Malý c od veľkého C? 32. Takže tam je 32 chmeľ od jedno písmeno do druhého. Takže úprimne povedané, mohol zjednodušiť tým, že. Ale potom som trochu ťažké kódovanie Táto nízka úroveň porozumenia že žiadny čitateľ je vždy bude rozumieť. Takže budem generalizovať ako som viem, že malé písmená sú väčšie. Viem, že písmená sú menšie hodnoty, ironicky. To je však skutočne ekvivalentná hovorí odpočítať 32 od držiaka s i. Takže v súvislosti s týmito listy, ak listu náhodou, malá a ja odpočítať 32, aký vplyv to má, matematicky, na malé písmená? Divákov: Capitalizes-- David J. Malan: to zúročuje. A skutočne, to je dôvod, prečo naše program sa nazýva využiť nulu. Tento program buď ťažiace list, Po kontrole, či je naozaj malé písmeno. V opačnom prípade, v súlade 30, čo mám robiť, keď to nie je malé písmeno, že som pri pohľade na v určitom iterácie v slučke. Stačí ju vytlačiť. Takže sa nemusíte meniť veci to nie je ani malé písmená. Obmedziť sa na málo cez malú z. Teraz je to celkom tajomný. Ale na konci dňa, to je, ako sme sa raz za čas, musel vykonávať veci. Keby som namiesto toho otvoriť zarábať jeden, oh vďaka bohu. K dispozícii je funkcia zavolal na hornej, ktoré môžu robiť všetko, čo sme práve robili na pomerne nízkej úrovni. Teraz sa horná je zaujímavý pretože je deklarovaná v súbore, a tie by len vedieť kontrolou dokumentácie, alebo bolo povedané, povedzme, v triede, kde existuje, v súbore s názvom ctype.h. Takže to je ďalší nový priateľ náš. A horný robí presne to, čo jej názov napovedá. Môžete odovzdať ako argument, medzi Tieto zátvorky, niektorí charakter. Chystám sa prejsť v i'th charakteru S pomocou našej fantázie nový zápis zahŕňajúce hranatých zátvoriek. A hádajte, čo je návrat hodnota na hornej zrejme bude byť? Veľké písmeno. Veľké písmeno. Takže keď som sa prejsť malými písmenami a, dúfajme, že z definície na hornej, že to bude návrat veľké písmená A. V opačnom prípade, ak to nie je malé písmeno v prvé miesto, len som ho vytlačiť. A naozaj si všimnite, Druhý priateľ. Nie je to len na hornej existuje, , Ale je menšia, čo vlastne odpovie, že otázka pre mňa. Teraz každý, kto napísal tieto veci, 10s rokov skôr, vieš čo? Realizované horné a znížiť pomocou kódu, ako je tento. Ale znovu, v súlade s Táto myšlienka oddeliť preč, druh, nižšia úroveň detaily implementácie. A stojí na ramenách ľudí ktorí prišli pred nami, pomocou funkcií ako na hornej a dolnej, ktorá tak nádherne, sú pekne menoval povedať, čo robia, je nádherný vzor prijať. Teraz sa ukazuje, že keď som čítal manuálová stránka pre, povedzme, na hornej, Aj niečo naučiť. Takže človek toupper. Je to trochu ohromujúce. Ale oznámenia, tu je to zmienka o hlavičkový súbor, ktorý by som mal použiť. Ako stranou, pretože toto je zavádzajúce, funkcia používa ints miesto znakov z dôvodu kontroly chýb. Ale budeme možno príde späť k tomu v budúcnosti. Ale nevšimol, tu, na hornej konvertitov písmeno c na veľké písmená, pokiaľ je to možné. Tak to je celkom jednoduché. A teraz buďme trochu konkrétnejší. Poďme sa pozrieť na časť muž strana pod návratovú hodnotu. Vrátená hodnota je to, že prevedené písmeno. Alebo C, v prípade, že prevod nebolo možné, kde c je pôvodný vstup. O ktorom viem, odtiaľ, z argument na hornej. Takže to, čo je stánok s jedlom to? Vrátená hodnota je to, že prevedené písmeno, alebo C, pôvodné písmeno, ak konverzie nebolo možné. Aké zlepšenia môžem teda aby do návrhu mojom kódu je? Jo? Divákov: Môžete odstrániť iný. David J. Malan: môžem odobrať vyhlásenie iného, a nie len príkaz else. Divákov: Môžete odstrániť [nepočuteľné]. David J. Malan: môžem odobrať celú vidlicu na ceste, ak úplne inde. Takže naozaj, dovoľte mi, aby som otvoriť Konečná verzia, zarábať-2 a všimnite si, ako, ak budete, sexy, kód je teraz dostáva, v tom, že som sa znížil z niektorých sedem alebo tak linky do len štyri, funkcie, ktoré som mal v úmysle jednoduchým volaním na hornej, odovzdaním s držiakom I a tlač von, s zástupný symbol% ​​C, že osobitný charakter. Teraz pravdepodobne, že ide o problém, alebo prinajmenšom riziko chyby, v tomto programe. Takže stačí, aby sa vrátil na skoršie stánok s jedlom, Čo by som mal asi tiež robiť v tento program, aby bolo viac robustný, tak, že neexistuje spôsob, ako to môže havárii, a to aj vo výnimočných prípadoch? Divákov: Uistite sa, že to nie je NULL. David J. Malan: Uistite sa, že to nie je NULL. Takže naozaj, aby to Super správne, mal by som niečo také, ak to nie je NULL, potom pokračovať a realizovať Tieto riadky kódu, ktoré Aj potom môžu zarážka takto, a potom dal v mojej blízkosti kríža. Tak dobrá previazanie dvoch myšlienok. Jo? Divákov: Mohli by ste použiť robiť, kým slučka, namiesto toho? David J. Malan: Mohol Ja si robiť, zatiaľ čo slučky? Divákov: --you chcete byť istý, že ste skutočne [nepočuteľné]. David J. Malan: Mohol Používate robiť, keď? Krátka odpoveď, no. Vzhľadom k tomu, že ste asi zaviesť ďalšie rohový prípad. Ak je reťazec nulovej dĺžky. Ak je napríklad, len som narazila Zadajte, bez toho aby sa písanie Zamyla. Budem ťa vrátiť aktuálne string, ako budeme nakoniec vidieť, , Ktorý má nulové znaky. Je to stále reťazec, je to proste super krátky. Ale ak používate robiť, keď, budete slepo pokúsiť sa urobiť niečo s rešpektovanie tohto reťazca, a nič sa tam. DIVÁKOV: No, ak ste to [nepočuteľné], zatiaľ čo s-- David J. Malan: Aha, udržať dostať reťazec od užívateľa. Takže krátka odpoveď, môžete mohol, a držať otravovať je, aby vám reťazec, ktorý je dostatočne krátky, aby sa zmestili do pamäte. Presne tak. Len som sa rozhodol sa. Ak tomu tak nie je, dajte mi reťazec I chcem, ja končím, dávam hore. Ale absolútne, za týmto účelom, môžete absolútne urobiť. Takže hlavičkové súbory knižnice, ktoré sme sa už zoznámili sa so to tu. Standard I / O, CS50.h, string.h, ctype.h, a tam sú skutočne iní. Niektorí z vás zistili, matematická knižnica v math.h. Ale dovoľte mi, aby som vám predstavil, teraz, tento zdroj, že zamestnanci CS50, Davin, a Rob a Gabe najmä dali dokopy. Že bude čoskoro spojiť na Webové stránky kurzu je. Hovorí sa CS50 referencie. Čo len aby vám rýchlo chuť na to, funguje nasledovne. Nechaj ma ísť do reference.cs50.net. Uvidíte na ľavej strane stranu ohromujúci zoznam funkcií, ktoré prichádzajú s cca. Ale keď ma to zaujíma, pre túto chvíľu, o niečom, ako je strlen, Aj to môžete písať tu. Filtruje sa ustanovuje zoznam len to, čo ma zaujíma. Chystám sa na neho. A teraz na ľavej strane, uvidíte, čo dúfame, je jednoduchšie, ľudský priateľské vysvetlenie, ako Táto funkcia funguje. Vráti dĺžku reťazca. Tu je stručné zhrnutie, tu je návod, ako použitie, pokiaľ ide o hlavičky súboru, a čo sa týka toho, čo funkcia vyzerá to, pokiaľ ide o jeho argumentov. A potom tu, vráti Dĺžka reťazca. Ale pre tých z vás pohodlnejšie, môžete skutočne na tlačidlo pohodlnejšie, a obsah tohto strana, teraz sa zmení ako predvolené hodnoty z toho, čo získate pomocou man stránke. Inými slovami, CS50 odkaz je zjednodušenie z manuálových stránok zo strany zamestnancov, pre študentov. Najmä tých menej pohodlné a medzi tým, takže si Nemusíte sa snažiť zabaliť vaša myseľ sa, úprimne povedané, niektoré docela mystický syntaxe a dokumentácie niekedy. Takže majte na pamäti, že v najbližších dňoch. Tak tu je opäť Zamyla. Poďme sa opýtať, ktorý je trochu ľudskejší prístup. Vďaka Chang, kto bol tlač viacerých slony nonstop za posledných pár dní. Máme príležitosť vyjadriť aspoň jeden z nich preč. Ak by sme sa mohli dostať len jeden dobrovoľník prísť až na kreslenie na obrazovke. A čo tu? Poď hore. Aké je vaše meno? ALEX: Alex. David J. Malan: Alex. V poriadku. Alexi, poď hore. Chystáme sa vidieť svoje rukopis na obrazovke tu. Tak jo, rád ťa spoznávam. ALEX: Nice si ťa spoznávam. David J. Malan: Dobre. Takže, super jednoduché cvičenie. Bar nie je vysoká, aby dostať slona dnes. Hráte úlohu getString. A ja budem len povedať, reťazec, ktorý ste dostali. A predpokladám, že vás, getString, boli povolaní. A človek, ako ja, má zadali Zamyla, Z-A-M-Y-L-A. Jednoducho ísť dopredu a písať Zamyla na obrazovke, ako by ste dostali to a uložené niekde v pamäti. Ponecháva priestor pre to, čo bude niekoľko ďalšie words-- to je v poriadku, pokračuj. [SMIECH] Takže Zamyla, Výborný. Takže predpokladám, že vás, getString, sa ozval znova. A preto som vám, u klávesnica, pod iným názvom, Belinda. V poriadku. A teraz nabudúce getString je volal som písať niečo ako Gabe, G-A-B-E. Ste naozaj užívať na srdcové pamäte s náhodným prístupom. Ktorá je kresba všetko úplne náhodne. OK. [SMIECH] ALEX: Ospravedlňujem sa môj rukopis je zlé. David J. Malan: Nie, to je v poriadku. A ako je to s Robom, R-O-B. OK. Dobre. Tak som sa vás predvídať by druh ležal veci týmto spôsobom. Ale môžeme túto prácu. Tak ako sa vám ísť o ktorú sa z týchto znakov v pamäti? Inými slovami, ak si myslíme, že Tento obdĺžnikový čierna obrazovka ako zastupujúci počítača RAM alebo pamäti. A pripomínajú, že RAM je len celá partia bajtov, a bytoch je celá banda bitov. A bity sú nejakým spôsobom vykonané, všeobecne s nejakou formou elektrickej energie v hardvéri. Tak to je druh vrstvenie sme hovorili o a teraz je možné brať ako samozrejmosť. Ako ste ísť o rozhodovanie o tom, kam napísať Rob proti Gabe proti Belinda proti Zamyla? ALEX: Len som to urobil v nariadiť, aby si mi to povedala. David J. Malan: A to je pravda. Ale to, čo riadi, kam umiestniť Belindina meno a Gabe meno? ALEX: Nič? David J. Malan: [smeje sa] Tak to funguje, je to v poriadku. Takže počítače sú málo poriadnejšia než to. A tak keď sme implement-- zostať len na moment-- keď sme vlastne zaviesť niečo ako getString v počítači, Zamyla by mohli byť stanovené do značnej miery ako si to urobil na obrazovke, tam. A čo je kľúčom k všimnete tu to, čo urobil Alex, je, že je tak trochu vymedzenie medzi každou z týchto slov, že? Vy ste to napísať Z - M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- Inými slovami, tam je nejaký druh z vymedzenia, ktoré sa zdá byť, druh, náhodné rozteč Medzi týmito rôznymi slovami. Ale to je dobre, pretože my ľudia môžu teraz predstaviť, že sa jedná štyri rôzne reťazca. Nie je to len jedna sekvencia hŕbu postáv. Takže počítač, a potom, zatiaľ, môže trvať reťazec ako Zamyla, dať každej z týchto písmen vnútri bajtu pamäte. Ale to číslo je oveľa väčšie, Samozrejme, ako šesť znakov. Je tu celá banda RAM. A tak ďalej, to mriežka krabíc sa deje reprezentovať to, čo Alex len robil tu na obrazovke. A teraz, Alex, môžeme vám ponúknuť modrá alebo oranžová slon z Chang. ALEX: Vezmem modrý slon. David J. Malan: modrý slon. Tak veľký potlesk, keby sme mohli, Alexa tu. [APPLAUSE] ALEX: Ďakujem. David J. Malan: Ďakujem. Tak je stánok s jedlom, ktoré, aj keď vzor trochu menili v priebehu času tu na doske, tam bol tento vymedzenie medzi jednotlivými reťazcami že Alex má pre nás. Teraz počítače, úprimne povedané, mohol urobiť to isté. Mohli druh PLOP reťazca kdekoľvek v pamäti RAM. Až tu, tu, tu, tu dole. Mohli by robiť presne to. Ale, samozrejme, to je asi nie je najlepší plánovania. Je to tak? Ak som si žiada Alex sa sa mená, pravdepodobne, že by dať ešte viac tu, možno až tu, tu, tu, nakoniec sem. Ale s trochu viac plánovania, iste, môžeme položiť veci čistejšie. A vskutku, to je to, čo počítač robí. Ale úlovok je, že v prípade, že ďalší reťazec dostanem po Zamyla je niečo, čo ako Belinda, navrhnúť, kde by sme mohli napísať písmeno b s ohľadom na túto mriežku? Kam by ste išli? Na pravej strane a, pod z, pod A? Čo by vaše prvé inštinkt je? Divákov: Pod z. David J. Malan: Takže pod z. A to je dosť jednoduché, že? Je to celkom pekné, to je to, čo robíme na klávesnici, keď stlačíte klávesu Enter, alebo e-mail pri vytváraní zoznam s odrážkami vecí. Ale realita je, že počítače sa snaží byť efektívnejšie, a napchať rozhodne toľko dáta do pamäte, ako je to možné, takže nemusíte strácať bajtov. Takže nemusíte strácať akejkoľvek obrazovky nehnuteľností. A problém však je, že ak budeme doslova dal list b potom, ako sa budeme vedieť, kde Zamyla meno končí a Belinda meno začína? Takže ste pre človeka práve navrhla, dobre, stlačte klávesu Enter, v podstate. Daj to dole. Alebo dokonca rovnako ako Alex, stačí začať písať ďalší názov pod predchádzajúce, a ďalej, že jeden, a potom pod týmto jeden. To je vizuálny podnet. Počítače majú ďalšie vizuálny podnet, ale je to trochu stručnejší. Je to funky charakter. Lomítko 0, čo je možno pripomínajúce obrátené lomítko n, a tak ďalej, sa. Špeciálny escape sekvencie. Spätné lomítko 0 je spôsob, ako čo predstavuje osem nula bitov v rade. 0000 0000. Spôsob, ako vyjadriť, že nie je hit číslo nula na klávesnici, pretože v skutočnosti, že je ASCII char. Vyzerá to, že čísla, ale je vlastne desatinné číslo ktorý predstavuje obežník glyph, kruhový písmo. Medzitým, spätné lomítko Nula znamená, doslova dal osem nula bajtov tu pre mňa. Tak toto je trochu arbitrárny. Mohli sme použiť žiadny vzor bitov, ale svet rozhodla o niekoľko rokov pred, že predstavujú koniec reťazca v pamäti, len dať veľa núl. Vzhľadom k tomu, môžeme zistiť, že. Teraz to znamená, že žiadny list abeceda môže byť reprezentovaný nulami. Ale to je v poriadku, sme už videli že sme použili 65 o až v 97 nahor. Sme nemali nikam takmer na samé nuly. Takže Belinda v pamäti počítača je vlastne ísť sem. Ja som nakreslil v žltej len k tomu našu pozornosť. A oznámenia, taky to je úplne ľubovoľné. Ja som nakreslil ako mriežka. Ako RAM je len nejaký fyzický objekt. Nemusí to nutne mať riadky a stĺpce, sám o sebe. Je to len má veľa bajtov implementované v hardvéru nejako. Ale ak po Belinda I zadali Gabe menom, on skončí tu v pamäti, a keď som napísal v Daven menom, Napríklad, on skončí tu. A môžem aj naďalej napísať aj viacej mien. Bohužiaľ, keď sa pokúsim napísať super dlhý názov, Možno nakoniec k vyčerpaniu pamäte. V takom prípade je getString bude vrátiť NULL, ako sme povedali. Ale našťastie, aspoň v tejto vizuálnej tu sme sa nedostali tak ďaleko. Čo je pekné je, že teraz to Všeobecná myšlienka liečenie veci ako v krabiciach je zástupca rys C a mnoho jazykov, známy ako pole. Pole je iný typ dát. Je to dátová štruktúra, ak chcete. Štruktúra v zmysle toho naozaj, druh, vyzerá ako krabica, aspoň vo svojej mysli. Pole je súvislá postupnosť rovnakých dátových typov, chrbtom k sebe k sebe k sebe. Takže reťazec, v iných slova, je pole znakov. Rad znakov. Ale ukazuje sa, môžete mať polia hrozna vecí. V skutočnosti, môžeme dať aj čísla v poli. Takže forme, v ktorej ideme na začiatok prehlasuje, tieto dáta štruktúra známa ako maticu bude tiež používať hranaté zátvorky. Ale tieto hranaté zátvorky budú majú rôzny význam v tomto kontexte. A nech sa na to takto. Predstavme si, že som otvoril do nového súboru tu. A ja som uložiť ako ages.c. A ja budem uložiť to v mojej zložke tu. A teraz budem pokračovať a začnite písať niečo ako patrí CS50.h, patrí stdio.h, int main prázdnotu. A potom vnútri tu, chcem najprv mať int s názvom veku. A ja budem používať to, aby si int od užívateľa na jeho veku. Ale tento program je určený pre použitie viac ľudí, z akéhokoľvek kontextu. Mám rad ľudí. Všetky z nich majú písať vo svojich vek možno nejaký, ja neviem, súťaže alebo podujatia , Že som prišiel na. Takže ďalší človek, som Potrebujem ďalšie premenné. Pretože keď som to vek dostane vezmi_int, to je ísť na handry, alebo prepísať vek predchádzajúceho osoby. Takže to nie je dobré. Takže môj prvý inštinkt môže byť, oh, všetko v poriadku, keď chcem získať viac ľudí'S ages-- hovorme túto age1, int age2 dostane int, int Age3 dostane vezmi_int. A teraz budem používať nejaký pseudokód kód tu. Urobte niečo s tými číslami. Necháme na ďalší deň, čo robíme tam, pretože sme len starostlivosť o chvíľu o age1, age2, Age3. Bohužiaľ, akonáhle som skompilovať tento program a dať ju do prednej časti skutočných užívateľov, čo je zásadne zlý tvar rozhodnutie, ktoré som Zdá sa, že urobil? Jo? Divákov: [nepočuteľné] David J. Malan: Áno, Ani som sa snažil prísť na to, ako veľa vekov to vlastne zaujíma? Ak mám menej ako traja ľudia tu, a teda menej ako tri vekové kategórie, Som stále slepo očakával tri. Boh chráň, štyria ľudia objavia. Môj program jednoducho nebude ani podporovať ich. A tak to, dlhý príbeh Stručne povedané, je to dobrý zvyk. Je to tak? Bol som v podstate kopírovanie a vloženie kódu a len ladenie názvy premenných. A môj bože, keby ste mali, nie tri veku, ale 10 alebo 100, alebo dokonca 6500 vysokoškoláci, napríklad. To nebude zvlášť elegantný kód, alebo udržateľné. Budeš musieť Zmeňte program zakaždým Váš Počet osôb zmien. Takže našťastie, v našej aktuálnej ages.c súbor pre dnešok, Máme viac šikovné riešenie. Po prvé, ja idem si požičať konštrukciu sme použili niekoľkokrát, to robiť, zatiaľ čo slučky, aby si počet ľudí v miestnosti. Idem len obťažovať užívateľa, znova a znovu, kým on alebo ona mi dáva hodnota n, ktoré je kladné celé číslo. Mohol som použiť, posledný čas sa dostať pozitívne int. Ale my nemáme, že pre skutočné, tak som išiel dopredu a znovu realizovať túto myšlienku. A teraz tu dole, to je nový trik. V súlade 27, ako komentáre v riadku 26 naznačuje, deklarovať pole, v ktorom uložiť veku každého. Takže ak sa chcete dostať, a nie jeden int, nie dva ints, ale celá partia ints. Konkrétne n celé čísla, boli n mohlo byť tri, môže byť 100, môže byť 1000. Syntax, jednoducho, je povedzme, aký typ dát chcete? Čo chcete volať že kus pamäte? Čo chcete volať do siete že vyzerá takto obrazne? A v zátvorke tu, hovoríš ako veľký chcete poľa byť. A tak skôr, keď som povedal, že Syntax je tu trochu iný, sme stále pomocou hranatých zátvoriek, ale keď som vyhlásil poľa, počet vnútro Hranaté zátvorky prostriedky ako veľký chcete poľa byť. Naproti tomu, keď sme používali s držiak aj pred chvíľou, to, reťazec, je skutočne rad znakov, ale aj keď nie ste deklarovanie premennej, ako sa toto kľúčové slovo tu, ste jednoducho dostať špecifický index, špecifický prvok z tohto poľa. Akonáhle vieme, že ostatné to je jednoduché. Ak sa objavia nové ja prvýkrát bude na vytlačenie čo je vek osoby čísla i. Tam, kde som len povedať, osoba číslo jedna, osoba číslo dva, osoba číslo tri. A ja som len robil aritmetiku, tak, že rovnako ako normálny ľudia, počítame od jedného pre tento programu, a to od nuly. Potom som zavolať vezmi_int, ale uložiť odpoveď vo veku bracketing i. Čo je i'th vek v poli. Takže zatiaľ čo poslednej dobe sme boli liečení Tieto boxy sú znaky pre Zamyla menom, a ďalšie. Teraz, tieto krabice predstavujú 32 bitov, alebo štyri bajty v ktorých je možné uložiť int, int, int. Z ktorých všetky, opäť, sú rovnakého dátového typu. Teraz robím niečo hlúpe, ako čas ubieha, len ospravedlniť písania tohto programu. A potom tu dole, som zase opakovať cez pole hovorí, odo dneška za rok, osoba číslo jedna vôľa niečo rokov. A prísť na to, že math-- Myslím, že to nie je príliš zložité arithmetic-- Len som pridať jeden ich veku. Stačí dokázať, opäť to. Rovnako ako môžem index do reťazca, s, Takže môžem index do poľa vekov, takhle tam. Takže tam, kde to bude možné, že nás? Tak uvidíme, nakoniec, pár vecí, ktoré v najbližších dňoch. Jeden, celú tú dobu, kedy písanie vlastných programov, ako je Mario, chamtivý, úveru. Boli ste písať názov program a stlačením klávesu Enter. A potom sa dostať vstup používateľa. S getString, vezmi_int, getLongLong, alebo podobne. Ale ukazuje sa, že C podpery niečo, čo nazýva príkazový riadok argumenty, ktoré nás bude nechať v skutočnosti sa na slová, ktoré zadáte, na blikajúce riadku za menom vášho programu. Takže v najbližších dňoch, vám mohol písať niečo ako Caesar, alebo ./caesar číslo 13, neskôr. Uvidíme, ako to funguje. Pretože v skutočnosti, v problém nastaviť dva, my sme ťa predstaviť aby ešte niečo pripomína Ralphie je napadnúť skôr kartografia. Umenie zakódovanie informácií. To v skutočnosti, je veľmi pripomína, čo Ralphie urobil. Toto je príklad šifrovanie algoritmus nazvaný ROT13, R-O-T 13. Čo jednoducho znamená otočiť písmená v abecede 13 miest. A ak to urobíte, uvidíte teraz čo je snáď známa frázy. Ale spôsob, akým budeme používať Táto, v konečnom dôsledku, je všeobecne. V P set dva, v štandardnej verzii, budete realizovať niekoľko šifier, jeden s názvom Caesar, jeden s názvom Vigener. Obaja sú rotačné šifry, v tom, že sa nejako zase jeden list na iné písmeno. A Caesar je super jednoduché. Môžete pridať jeden, pridajte 13, alebo nejaké číslo až do 26. Vigener robí, že na jedno písmeno základ. Takže Vigener, ako uvidíte v spec, je bezpečnejšie. Ale na konci dňa, čo budete zavádzanie a P nastaviť dva, je to kľúč, ktorý používate obaja pre šifrovanie a dešifrovanie. S odkazom na procese sústruženie obyčajný text, niektoré pôvodné správy, do Cypher textu, ktorý je niečo, čo šifrovaná. A potom ju znova dešifrovanie. V hacker vydaní, Medzitým, budete za úlohu niečo podobné v duchu, kde budeme vám súbor, z typického Linux, alebo Mac alebo Unix počítač s názvom Etsy heslo, ktoré obsahuje jeden celok banda používateľských mien a hesiel. A tie heslá majú všetky bolo zakódované, alebo hash, aby som tak povedal, presnejšie ako uvidíte v špec. A hacker vydanie bude výzvou ste sa pri vstupnej takto, a praskanie heslo. To znamená, že prísť na to, čo je heslo Ľudský vlastne bol. Vzhľadom k tomu, samozrejme, heslá sú všeobecne nie sú uložené v jasnej, a všeobecne heslá by malo byť ťažké uhádnuť. To nie je častý prípad. A to, čo si myslel, že sme si robiť, je záver pár minút pohľad na zvlášť zlá voľba hesla z filmu môžete pripomenúť láskou. A ak nie, mali by ste prenajať. [PREHRÁVANIE] -Helmet Ste diabol, čo sa deje? Čo to robíš s mojou dcérou? -Permit Mi predstaviť brilantný mladý plastický chirurg, Doktor Phillip Schlotkin. Najväčší Rhinoplastika muž Celý vesmír a Beverly Hills. -Váš Výsosti. -Nose Práca? Nerozumiem tomu. Už mal nos. Bolo jej sweet 16 k dispozícii. Nie, to nie je to, čo si myslíte. Je to oveľa, oveľa horšie. Ak si neželáte, aby mi Kombinácia s leteckou štít, Lekár Schlotkin dám svoj dcéru svoju starú nos. - [Vzdychy] Nooooooooooooo. Kde si to zobral? -Dobre. Poviem, poviem. Nie, oci, no. Nesmiete. Máš pravdu drahá. Budeš mi chýbať váš nový nos. Ale ja im na to povedať kombinácie bez ohľadu na to, čo sa deje. -veľmi Dobre. Doktor Schlotkin, robiť to najhoršie. -Môj Potešenie. Nie! Počkať, počkať. Poviem. Poviem. Ja som vedel, že to bude fungovať. Dobre, daj mi to. -The Kombinácia je jedna. Onu. Onu. -Dve. -Dve. -Dve. -tri. -tri. -tri. -Štyri. -Štyri. -Štyri. -Pět. -Pět. -Pět. Takže kombinácia je jeden, dva, tri, štyri, päť. To je ten najhlúpejší kombinácia Čo som kedy počul v mojom živote. To je ten druh vecí an idiot bude mať na jeho batožine. Ďakujem, Vaša Výsosť. [REMOTE CLICKS] Čo ste urobil? Ja vypnutý múru. Nie, ty nie, ty vypne celý film. Ja muselo stlačil zlé tlačidlo. No, dal ju späť na! Dajte film späť! Áno, pane! Áno, pane. -Ideme, Arnold. Poď, Gretchen. Samozrejme, že viem, že som to musieť účtovať za to. No? Zabralo to? Kde je kráľ? -je Pracoval, pane, my majú kombináciu. Skvele. Teraz môžeme vziať aj tú poslednú dych čerstvého vzduchu z planéty Druidia. Čo je to kombinácia? Onú, dva, tri, štyri, päť. Onú, dva, tri, štyri, päť? Áno. -to Je úžasné. Mám rovnaký kombinácia na mojom batožine. Pripravte Spaceball 1 pre okamžitý odchod. Áno, pane. -A Zmeniť kombinácia na mojom batožine. [Uzatváranie dverí SOUND] [Cinkanie DVERÍ biť PRILBY] -Ahh. [END Videoprehrávanie] David J. Malan: To je pre CS50, uvidíme sa budúci týždeň. Rozprávač: A teraz, Hlboká Myšlienky, podľa Daven Farnham. Daven FARNHAM: Kódovanie v jazyku C je tak oveľa ťažšie, než Scratch. printf, Scratch bola lož. [SMIECH SoundBITE]