[Muzikos grojimo] David J. Malan: Gerai. Tai CS50, ir tai yra 2 savaitės pabaigoje. Taigi, šiandien mes ketiname tęsti savo išvaizdą tuo, kaip mes atstovaujame dalykus po hood-- tolsta iš numerius, pavyzdžiui, sveikieji skaičiai ir slankiojo kablelio vertybes ir sutelkiant dėmesį į eilutes ir galiausiai daugiau įdomių programų. Tačiau mes taip pat priimsime išvaizdą pora domeno specifinis problems-- kurių pirmasis bus būti įtraukti kriptografiją, iš kodavimo informaciją menas, , kurioje pamatysite kaip čia yra radijo Našlaitis Annie nuotraukos paslaptis dekoderis žiedas iš pasekėjai. Tai iš tikrųjų yra labai primityvi forma ir vaikas draugiškas forma cryptopgraphy , kai šis žiedas turi du disks-- viena viduje ir viena lauke. Ir sukasi vienas iš tų, galite esmės išsirikiuoti laiškus kaip iki Z su kitais raštais kaip B naudojant A. Kitaip tariant, Jūs galite tiesiog pasukti abėcėlę, taip ateina su žemėlapių nuo laiškai laiškus taip, kad, jei norėjo siųsti slaptą žinutę kad kažkas panašaus Annie, galite rašyti žemyn jūsų pranešimą ir tada pasukite raidės, pagal kurią, jei jūs turite galvoje pasakyti "A", jūs vietoj pasakyti "B" jūs norėjote pasakyti "B" Jūs, o ne sakyti, "C" - ar kažką šiek tiek daugiau protingas nei that-- ir tada, galiausiai, kol Annie turi šią dekoderis žiedas, ji gali iššifruoti pranešimą. Dabar, jums gali prisiminti, iš tikrųjų, kad ši buvo naudojamas labai garsaus filmo, kad vaidina ad nauseum metu Kalėdų sezoną. Paimkime pažvelgti čia. Ralphie PARKER: "Būk Žinoma, kad visi santrauka kad Ralph Parkeris yra skiriamas Mažosios Orphan Annie Secret narys Draugų ir turi teisę visi pagyrimu ir nauda pasireiškia tuo. " Ralphie PARKER (pasakojama): Pasirašyta Little Našlaitis Annie. Parašu, Pierre Andre! Be rašalu. Garbės ir nauda, jau nuo devynerių metų. [Muzikos grojimo] [RADIJO Pašnekovo] Ralphie PARKER: Nagi. Leiskite grįžti į ją. Man nereikia visą tą džiazą apie kontrabandininkus ir piratai. RADIJO Komentatorius: Klausykitės rytoj naktį baigiamajame nuotykių The Black Pirate Ship. Dabar atėjo laikas Annie Slapta pasakyti nariai iš Secret Circle. Prisiminti vaikams, tik nariams Annie Secret Circle gali dekoduoti Annie slaptą žinutę. Atminkite, Annie priklauso nuo jūsų. Nustatykite savo smeigtukai B-2. Čia yra Message 12, 11, 2-- Ralphie PARKER (pasakojama): Aš esu savo pirmąją slaptą susitikimą. RADIJO Komentatorius: --25, 14, 11, 18, 16-- Ralphie PARKER (pasakojama): O, Pierre buvo labai balso vakarą. Galėčiau pasakyti, kad vakaro žinia buvo tikrai svarbus. RADIJO Komentatorius: --3, 25. Štai iš Annie pati žinutė. Atminkite, kad nereikia niekam. [Tapyba] Ralphie PARKER (pasakojama): Vėliau nei devyniasdešimt sekundžių, aš vieninteliame kambaryje namas, kuriame iš devynių berniukas gali sėdėti privatumo ir iššifruoti. Ak. "B." [Kikenimu] Ralphie PARKER (pasakojama): Nuėjau į kitą. "E." Pirmasis žodis yra "būti". Taip! Jis artėjo lengviau dabar. "U." [Kikenimu] RANDY PARKER: Aw, nagi, Ralphie. Turiu eiti! Ralphie PARKER: aš būsiu teisus žemyn, Ma. Gee nusišvilpti. "T." "O." "Būtinai į. "Būtinai", ką? Koks buvo Little Našlaitis Annie bando pasakyti? "Būtinai", ką? MOTINA: Ralphie Randy gavo eiti. Ar galite išeiti? Ralphie PARKER: Gerai, mama! Aš būsiu ne! Ralphie PARKER (pasakojama): Man buvo vis arčiau dabar. Įtampa buvo baisi. Kokia ji buvo? Planetos likimas gali pakabinti ant plauko. MOTINA: Ralphie, Randy turiu eiti! Ralphie PARKER: aš būsiu teisus out, šaukė garsiai! Ralphie PARKER (Pasakoja): Beveik ten! Mano pirštai atskrido! Mano protas buvo plieno spąstai. Kiekvienas porų vibruoja. Tai buvo beveik aišku! Taip! Taip! Taip! Taip! Ralphie PARKER: "Būtinai gerti savo Ovaltine ". Ovaltine? Prastas komercinis? [Muzikos grojimo] Ralphie PARKER: Kalės vaikas. [Atsakyti] David J. Malan: Taigi, kad tada yra kokia kriptografija žvilgsnis gali būti, this-- a gerti iš pasekėjai. Taigi greitai paskelbimas. Jei esate nemokamai tai Penktadienį 13:15 ir būtų norėčiau prisijungti prie mūsų CS50 pietūs, galva į šį URL čia. Pirmas atėjai, pirmas tarnauti kaip įprasta. Tačiau laikui bėgant, mes pasirūpinsime, kad Patys visiems, kurie norite dalyvauti gali planuoti išmintingas. Taigi stygos. Mes turime Zamyla-- KURIUO jūs dabar susitiko greičiausiai į problemą, 1-- kurio pavadinimas rašomas taip. Ir manau, kad jūs įvedėte savo vardą į kompiuterio programą, kad manimi naudojant kažką panašaus getString. Kad gauti tie klavišų, kaip mes eiti apie atstovaujantis eilutė, žodis, pastraipa, arba kelis laiškus, kaip šie čia? Mes kalbėjomės paskutinį kartą apie sveikieji skaičiai ir problemos kurie kyla su sveikojo skaičiaus perpildymo ir slankiojo kablelio vertybes ir problemos, su kuriomis atsiranda per tikslumu. Su stygos, mes bent turėti šiek tiek daugiau lankstumo nes strings-- tik realiame world-- gali būti gana savavališkas ilgis. Gana trumpas, gana ilgai. Bet net ir tada, mes ketiname mano, kad kompiuteriai gali kartais paleisti iš atminties, o ne dar laikyti pakankamai didelis eilutę. Bet dabar, pradėkime vizualizuoti eilutė, kaip kažkas šiose dėžėse čia. Taigi šešių tokios dėžės, kurių kiekvienas atstovauja simbolį arba "char". Taigi prisiminti, kad "char", - c-h--r-- yra vienas iš built-in duomenų tipų C. Ir kas malonu yra tai, kad jūs galite naudoti kad tarsi kaip statybinis blokas, dėlionės gabalas, jei norite, kad susidarytų didesnis duomenų tipas, kad mes ir toliau skambinti "eilutę". Dabar, kas yra naudinga apie mąstymo apie tokius dalykus kaip stygos šiuo būdu? Na, it turns out, kad mes galime realiai išnaudoti šią struktūrą faktiškai pasiekti atskirus simbolius į gana nesudėtingai. Aš ruošiuosi eiti į priekį ir kurti failas, vadinamas "stringzero.c" bet jūs galite jį vadiname viską, ką norite. Ir nuo kurso tinklalapyje yra jau šis pavyzdys iš anksto, taigi jums nereikės reikia įrašykite viską iš. Ir aš ruošiuosi eiti į priekį ir pirmą kartą padaryti int main negaliojančiu. Ir per kelias dienas, mes pradėsime erzinti išskyrus kas tuščia čia, kodėl tai int šalia pagrindinė ir kt. Bet dabar, tegul toliau kopijuoti įklijuokite kad. Aš ruošiuosi paskelbti eilutę, vadinamą Š. Ir aš ruošiuosi grįžti iš GetString kokiomis vartotojo tipus. Tai bus paprasta programa, jokių nurodymų, Aš tik ketina aklai tikėtis, kad vartotojas žino ką daryti, kad laikyti jį paprasta. Ir dabar aš ruošiuosi už linijos. Ir viduje mano už kilpa aš teks int i gauna nulį. Ir aš, vėlgi, tik konvencija, rodyklė kintamasis skaičiavimas, bet aš negalėjau tai vadiname, ką noriu. Aš ruošiuosi daryti i mažiau than-- gerai Zamyla vardas šešių simbolių ilgio. Taigi, aš ruošiuosi sunku kodas, kuris yra dabar. Ir tada i ++. Ir dabar viduje jie garbanoti petnešos aš ruošiuosi daryti printf, ir aš noriu spausdinti vieną charakteris metu. Taigi, aš ruošiuosi naudoti% C ir galbūt pirmą kartą. Ir tada aš noriu spausdinti kiekvieną charakteris atskiroje eilutėje. Taigi, aš ruošiuosi įdėti mažai Backslash n ten. Uždaryti citata. Ir dabar aš noriu padaryti kažką čia. Noriu atsispausdinti konkretus laiškas į eilutę, ai, kaip aš Iteracja nuo nulio iki šešių. Kitaip tariant, aš noriu spausdinti i'th charakterį s. Dabar, kaip aš galiu tai padaryti? Na panašiai kaip langeliuose atstovavimas čia rūšies, įsivaizduoti, kad bokso sąvoką raidės, galite taip pat padaryti, kad sintaksiškai C tiesiog nurodant, Noriu atsispausdinti S i'th pobūdžio. Naudojant skliaustus ant kompiuterio klaviatūros kad JAV klaviatūros yra paprastai virš jūsų grąžinimo raktu. Taigi tai yra ne visai teisus dar, kaip jūs galbūt jau pastebėjote. Bet aš ruošiuosi natūra aklai išsiveržia į priekį čia. Ir aš ruošiuosi daryti, kad string 0. Tačiau prieš tai padaryti, tegul pamatyti, jei mes negali numatyti kai kurių bendrų klaidų. Ar tai kompiliuoti? Ne, aš trūksta visa krūva daiktų. Bibliotekos išgirdau. Taigi, kuris header failus gali Noriu pridurti? Taip. PUBLIKA: Jums reikia standartinis I / O [nesigirdi] David J. Malan: Puikiai. Taigi man reikia standartinio I / O. Už ką tikslas aš noriu standartinį I / O? Dėl printf. Taigi yra stdio.h. Ir jūs taip pat pasiūlyti, kad aš taip pat CS50 biblioteka, dėl kokių priežasčių? Norėdami turėti stygos. Taigi, mes pamatyti, ką CS50 biblioteka daro sukurti šią eilutę sąvoką. Bet dabar, jūs tiesiog galite galvoti apie tai, kaip faktinė duomenų tipą. Taigi, atrodo, kad būti šiek tiek išvalyti. Ir dabar aš ruošiuosi eiti į priekį ir iš tiesų tai padaryti eilutę 0. Parengė. Taigi, kad gerai. Taigi ./string0 leiskite padidinti, todėl mes galime labiau, kas vyksta pamatyti. Įveskite. Z-M-Y-L-Enter. Ir mes išspausdintas su Zamyla vardu. Taigi tai gana geras. Taigi dabar eikime į priekį ir paleisti šią programą iš naujo, ir tipo iš Daven savo vardą ir pavardę. Staigmena, staigmena. Įveskite. Hmm. Mes ne atspausdintas Daven s pilnas vardas teisingai. Dabar tai turėtų būti akivaizdu Retrospekcja dėl ko, rūšiuoti, kvailas dizainas sprendimas? Taip, aš sunkiai koduojami šešių viduje mano už linijos. Dabar aš padariau, kad tik todėl, kad Žinojau Zamyla vardą buvau ketinate būti šešios raidės. Bet tikrai tai nėra bendras sprendimas. Taigi paaiškėja, mes galime dinamiškai išsiaiškinti tam eilutės ilgis paskambinę funkcija vadinama strlen. Vėlgi, sąmoningai trumpai vadinamas tiesiog kad ji taptų patogi tipo. Bet tai sinonimas gauti tam eilutės ilgis. Aš ruošiuosi grįžti į savo terminalą langą ir iš naujo paleisti kompiliatorių. Bet tai šaukiantį į mane. Spėti skelbiantis bibliotekos funkciją strlen su tipo unsigned int const-- Aš prarado. Visiškai. Taigi, visų pirma savo akys pradeda glazūra per su klaidų pranešimus, kaip tai, dėmesio sąžiningai apie pirmuosius keletą žodžių. Mes žinome, problema yra linija 8, kaip nurodyta čia. Ir tai virvele-0.c. Spėti skelbiantis bibliotekos funkcija strlen. Taigi, kad paprastai vyksta būti klaidų pranešimų raštas. Spėti skelbiantis kažką. Taigi trumpai tariant, tai, ką aš turiu, atrodo, padariau atžvilgiu linija 8, čia. Kas gali būti sprendimas dar jei jūs niekada nesinaudojo strlen sau? PUBLIKA: Dalis kitokio bibliotekoje? David J. Malan: Dalis skirtingo bibliotekoje. Taigi jis pareiškė, kad kalbėti. Ji minima kai byla išskyrus stdio.h ir CS50.h. Dabar, kai jis apibrėžtas? Tiesą sakant, jūs arba turi tik žinau, tai ne jūsų galvos viršuje, ar jums paieškos serveriuose tai ir sužinoti. Arba žinoti, aš atvėrė į CS50 Prietaiso nustatymas terminalo programą, kuri yra tik didelis, per visą ekraną portalo kas į gedit lango apačioje. Ir it turns out, kad yra Panašiai lakoniškas komandą, vadinama žmogus vadovą, kur, jei įvedate iš funkcijos pavadinimas ir paspauskite "Enter", jūs gausite atgal gana paslaptinga dokumentai. Tai tiesiog tekstas, paprastai atrodo šiek tiek kažką panašaus į tai. Tai šiek tiek absoliuti iš pirmo žvilgsnio. Bet atvirai aš ruošiuosi tegul mano akys glazūra per ir tik sutelkti dėmesį į iš dalies Aš rūpintis šiuo metu. Kuris yra tai. Kuris atrodo struktūriškai kaip ką aš esu susipažinęs su. Iš tiesų žmogus puslapis, taip kalbėti, pasakys kokia antraštė failą funkcija kaip strlen apibrėžiama. Taigi, aš ruošiuosi grįžti dabar gedit. Ir aš ruošiuosi eiti į priekį ir pridėti čia Include ir išsaugokite failą. Aš einu išvalyti ekraną Valdymo L Jei jau įdomu. Ir aš ruošiuosi vėl paleisti markę string.0, sudaro šį kartą. ./string.0 Zamyla. Atrodė, kad dirbti Leiskite man eiti į priekį ir iš naujo paleisti jį su Davenport. Įveskite. Ir tai taip pat atrodė, kad dirbti. Taigi, mes galime padaryti šiek tiek geriau, nei tai, nors, mes galime pradėti su tvarkinga dalykų iki tik šiek tiek. Ir aš ruošiuosi iš tikrųjų pristatyti dar vieną dalyką dabar. Aš ruošiuosi eiti į priekį ir išsaugoti tai į kitą failą. Ir aš ruošiuosi skambinti šią bylą string1.c tik turi būti suderinti su kodu Galėsite rasti internete. Ir tegul sutelkti dėmesį į lygiai tas pats kodas. Pasirodo, kad aš buvo rūšies paėmimo savaime suprantamu dalyku tai, kad mano nešiojamas, ir, savo ruožtu, CS50 prietaisas turi daug atminties, daug daug RAM baitų daug erdvės į kurį galiu laikyti eilutes. Tačiau tikrovė, jei aš įvedėte ilgai pakankamai ir pakankamai klavišų, Aš teoriškai tipą daugiau simbolių nei mano kompiuteryje fiziškai turi atmintį. Ir tai yra problemiškas. Panašiai kaip int gali tik skaičius toks didelis, teoriškai, jūs galite tik prisikimšti tiek daug simbolių, į kompiuterio RAM arba su atsitiktiniais Access Memory. Taigi aš geriau numatyti ši problema, net nors tai gali būti retos kampe atveju, taip sakant. Ar negali atsitikti, kad dažnai gali atsitikti. Ir jei tai atsitinka ir aš ne numatyti ir programa jį, mano programa galėtų padaryti, kas žino ką. Freeze, pakabinti, perkrauti, whatever. Kažkas tikėtasi gali atsitikti. Taigi, ką aš ruošiuosi daryti dabar nuo šiol tikrai, yra prieš aš kada nors aklai naudoti kintamąjį kaip s, kad buvo priskirtas sugrįžimo vertę kai kurios kitos funkcijos kaip getstring, Aš ruošiuosi įsitikinti kad jo vertė yra galiojanti. Taigi aš žinau, tik gražu skaityti CS50 dokumentacijoje getstring, kuri galiausiai mes jums turi būti nukreiptas, kad getstring grįžta ypatingą simbolį vadinamas NULL, N-U-L-l visi kepurės, jei kažkas negerai. Taigi paprastai, jis grąžina eilutę. Bet kitaip, jei jis grįžta N-U-L-L-- mes galų gale pamatyti, ką tai iš tikrųjų means-- kad tik reiškia, kažkas blogai atsitiko. Dabar tai reiškia, panašiai kaip nulio, Galiu patikrinti sąlygą čia C, jei s daro ne vienodą NULL. Taigi, jei jūs dar nematėte prieš tai, tai tiesiog reiškia, kad nėra lygūs. Taigi tai iš priešais lygių lygybės, kuri, primename, skiriasi nuo vieno lygi, kuris yra užduotis. Taigi, jei ai nėra lygi NULL, tik tada daryti Noriu atlikti šias kodo eilutes. Taigi, kitaip tariant, kol aš pasinerti aklai ir pradėti Iteracja per s, ir jį gydyti kaip nors tai iš eilės simbolių, aš pirmiausia patikrinti, palauk, tai s tikrai ne lygi šios specialios vertės, NULL? Nes jei jis yra, blogi dalykai gali atsitikti. Ir dabar, tarkime, kad blogus dalykus vyksta reiškia, kad jūsų programa sugenda, ir jūs galite nebūtinai atsigauti. Taigi atvirai, atrodo mažiau akivaizdus. tai tipo painu dabar žvilgsnio. Tačiau tai taps susipažinęs prieš ilgas. Bet aš ruošiuosi pasiūlyti dabar vienas kitas patobulinimas. Štai patobulinimas teisingumą. Mano programa dabar yra labiau tinkamas, nes retais atvejais, kad nepakanka atminties egzistuoja, tvarkyti, ir aš tiesiog nieko nedaryti. Aš bent jau nebus katastrofos. Bet darykime galutinę versiją čia. Ir byla vadinama string2.c. Aš ruošiuosi įdėti, kad Tas pats kodas truputi, ir aš ruošiuosi pabrėžti tai linija, 11, čia tik už akimirką. Dabar realybė yra tai, kad protingas kompiliatoriai kaip Zaszczękać galėtų išspręsti šią problemą mums užkulisiuose be mūsų nuolat nežinant. Bet pagalvokime apie tai iš esmės kaip probleminio dizainas. Šis kodo eilutę, žinoma, sakydamas, inicijuoti kai kintamasis I 0. Tai gana paprasta. Ir kas kartą tai teiginys, čia i ++, darai? Mes matėme anksčiau, bet mes nelabai apie tai kalbėti. PUBLIKA: leidžiama didinti i. David J. Malan: leidžiama didinti i. Taigi ant kiekvieno pakartojimo per šis ciklas, kiekvienas ciklas, jūs incrementing i viena. Taigi ji tampa didesni ir didesni, ir didesni, kol kilpa nutraukė. Kaip ji nutraukti? Na ten tai vidutinio sąlyga, kuri mes naudojamas anksčiau. Jūs mačiau ir Walkthroughs į P rinkinys. Bet kas tai yra posakis? Ar šią kilpą taip kol i yra mažesnis nei ką? PUBLIKA: Virvės ilgis. David J. Malan: ilgis eilutę. Taigi verčia gana švariai į anglų šia prasme. Dabar problema yra tai, kad kiekvieną kartą, kai aš pakartoti per šią kilpą teoriškai Aš prašau šį klausimą. Ar aš mažiau nei eilutės ilgis ir s? Ar aš mažiau nei eilutės ilgis ir s? Dabar yra i kinta nuo kiekvienos iteracijos? Tai. Dėl ++. Taigi kiekvienas pakartojimas man vis didesni. Bet darosi didesni, arba mažesnis arba keičiant ne visi? Ne Taigi kalbant apie dizainą, viena iš krypčių , išilgai kurio mes bandome įvertinti kodą klasėje, tai jaučiasi rūšies kvailas. Kaip jūs pažodžiui, ant kiekvieno pakartojimo Šios kilpos klausia pats velniškai klausimas vėl, ir vėl, ir vėl, ir tiesiogine prasme ji niekada pakeisti. Bent jei aš ne liesti s ir bando pakeisti s turinį. Taigi aš galiu padaryti šiek tiek geriau nei šis. Ir tai, ką aš ruošiuosi daryti nėra paskelbti tik vieną kintamąjį i, bet antra kintamasis gausit savavališkai, bet tradiciškai, jį vadiname n. Priskirti n lygi Styga ilgis s. Ir tada per čia, aš ruošiuosi padaryti protingas mažai optimizavimas, taip kalbėti, kad dienos pabaigoje yra ne daugiau teisinga, ar ne mažiau teisinga nei anksčiau. Bet tai geriau dizainas. Be to, kad aš naudoju mažiau laiko, mažiau CPU ciklų, todėl kalbėti, atsakyti į tą patį klausimas, tačiau tik vieną kartą. Bet toje Bendrieji klausimai principas gerinimas pasakyti, programos efektyvumas? Taip? PUBLIKA: Kodėl jums naudokite [nesigirdi]? David J. Malan: Geras klausimas. Taigi, kodėl mes įdėti ++ nuo pabaigos i vietoj AŠ pradžia? Šiuo atveju, ji turi funkcinis poveikis. Ir apskritai, esu linkęs naudoti postfix operatorius kad tai šiek tiek daugiau aišku, kada operacija vyksta. Tiems, nepažįstamas, yra dar vienas pareiškimai, kuriais galima padaryti ++ i. Tai yra funkciškai atitinka šiuo atveju nes ten nieko aplink, kad rodmenų didėjimas. Bet jūs galite sugalvoti atvejai ir eilučių kodo , kurioje, kad daro skirtumą. Taigi apskritai, mes neturime net kalbėti apie šį vieną. Nes tiesą sakant, jis daro savo kodas seksualesnis, ir tarsi Lietusmētelis, ir mažiau simbolių. Tačiau tikrovė yra tokia, kad tai daug sunkiau, Manau, net ir man, į kuriuos vyniojami savo protą aplink jį, kartais, Veiklos tvarka. Taigi, kaip panaikinti, jei tikrai nepatinka tai, nors tai yra rūšies seksualus ieško, jūs taip pat gali tai padaryti i + = 1, kuris yra mažiau akivaizdus portalo pati idėja postfix rodmenų didėjimas. Aš tai sakau ir jums turėtų pasijuokti iš jo, bet jums bus pamatyti kodą kažkas gražus prieš ilgas. [Juokas] David J. Malan: Teisė? Taip. Klausimas viduryje. PUBLIKA: Ar jums reikia pasakyti, int n? David J. Malan: Jūs darote nereikia sakyti, int n. Taigi todėl, kad mes jau minėjome, int Jums nereikia sakyt. Laimikis, kad n turi būti pats duomenų tipas, kaip i. Taigi tai tiesiog patogumo čia. Taip. PUBLIKA: Ar jūs einate per išsiųs personažo s laikiklis i naujo? David J. Malan: Absoliučiai. Taigi% c, prisiminti nuo praėjusių laikas, yra tik vietos rezervavimo ženklas. Tai reiškia, įdėti char čia. Backslash n, žinoma, tik priemonė įdėti eilutės lūžį čia. Taigi, kad tik lapai, dabar, šis naujos sintaksės gabalas. Ir tai yra tiesiog sakydamas, patraukti eilutė vadinama s ir eikite gauti jos i'th pobūdį, taip sakant. Ir aš nuolat sako i'th charakterį nes kiekvienoje šio ciklo iteracijos tai kaip nors mes spausdinti , pirma s laikiklis 0, kaip programuotojas gali pasakyti. Tada ai laikiklis 1, tada ai laikiklis 2, tada 3, tada 4. Bet, žinoma, tai kintamasis, todėl aš tiesiog išreikšti ją su i. Raktas, nors, yra suprasti, ypač jei jūs ne buvo Acclimating į šį pasaulį programavimo, kur mes visi atrodo skaičiuoti nuo nulio, turiu pradėti skaičiuoti nuo nulio dabar. Nes stygos, pirmasis simbolis, z Zamyla yra geriau ar blogiau ketina gyventi vietos nulis. Visos teisės, todėl leiskite man duoti mums atgal čia Zamyla ir pamatyti, kas iš tikrųjų vyksta apie po gaubtu. Taigi, čia yra tai tipo liejimo sąvoka. Galbūt iš tikrųjų grojo su tai jau, gal hakeris leidimas P nustatyti vieną. Bet tipo liejimas tiesiog reiškia gebėjimas C ir kai kurias kitas kalbas konvertuoti vieną duomenų tipą į kitą. Dabar, kaip gali mes matome tai gana tiesmukai? Taigi, tai, prisiminti, yra pradžia anglų abėcėlės. Ir kontekstas, pamenu, iš kaip prieš savaitę yra ASCII. Amerikos standartinis kodas skirtas informacijos mainams. Kuris yra tik tikrai ilgas kelias sakydamas žemėlapių iš raidžių numeriais, ir iš numerių raides. Taigi per M čia, dot dot taškų, linijų su, prisiminti, dešimtainis skaičius 65 ant up. Ir mes ne kalbėti Apie tai aiškiai, bet tikrai yra labai panašus numeriai mažosiomis raidėmis. Ir iš tiesų, yra. Pasaulis nusprendė keletą metų prieš, kad mažai, mažosiomis, bus 97. Ir šiek tiek b vyksta būti 98 ir kt. Ir bet kuriuo kitu klavišu klaviatūra, ten bus panašus modelis bitai. Arba analogiškai, dešimtainis skaičius. Taigi po ranka klausimas, tada, kaip mes galime realiai pamatyti tai po kapotu? Taigi, aš ruošiuosi eiti per su gedit dar kartą. Ir užuot tipą tai vienas iš nulio, Aš ruošiuosi eiti į priekį ir tiesiog atverti kažką iš šiandienos kodas vadinama ASCII nulio. Ir ASCII nulis atrodo taip. Taigi leiskite susivynioti mūsų protus aplink tai. Taigi, pirmiausia, aš komentavo kodas, kuris yra gražus. Nes tai tiesiog pasakojo, ko tikėtis, rodyti už didžiąsias raides žemėlapių. Dabar aš ne visai žinoti, ką aš reiškia, kad, todėl galime daryti išvadą. Anglų kalba, gal šiek tiek techniką Anglų, ką eilutė 18 atrodo daryti tai, už mus? Tiesiog linija 18. Kas tai paskatinti? Kas jis ketina nusimesti čia? PUBLIKA: kilpa. David J. Malan: kilpa. Ir kiek kartų yra kad ketina pakartoti? PUBLIKA: [Tarpines BALSAS] šešis kartus. David J. Malan: ne šešis kartus. PUBLIKA: 26 kartų. David J. Malan: 26 kartų. Taip, atsiprašau. 26 kartus. Kodėl? Na, tai truputį keistai, bet Aš pradėjau skaičiuoti nuo 65. Kuris yra keista, bet ne blogai. Tai nėra blogai už Say aprašymą. Ir aš darau, kad tik nes, šiame pavyzdyje, Aš rūšies numatymas kad kapitalas buvo 65. Dabar tai yra ne pats elegantiškas būdas tai padaryti, kad tokio pobūdžio sunkaus kodas ezoterinės reikšmės, kad niekas kada nors tikimasi, kad prisiminti. Bet dabar, pastebėsite, kad aš tai daryti ne per 65 plius 26. Nes, matyt, aš net nenoriu daryti aritmetiką, mano galva. Taigi aš tegul sudarytojas daryti. Bet tada ant kiekvieno ciklo, kiekvienos iteracijos kilpos, aš incrementing i. Taigi, dabar tai atrodo mažai paslaptingas. Bet mes turime turėti pagrindinį pastatą blokai, su kuriais tai suprasti. % C yra tik už char vietos rezervavimo ženklas. % I už int vietos rezervavimo ženklas. Ir it turns out, kad naudojant šį nauja sintaksė, tai įterptinis, todėl kalbėti, todėl duomenų tipą viduje skliausteliuose, Galiu priversti kompiliatorių gydyti i ne, yra sveikas, bet kaip char. Taip rodo man simbolį ekvivalentas šio skaičiaus. Dabar žemyn čia, šis kodas yra gana daug vienodi. Aš tik norėjau, kad super aiškus faktas kad aš pradedant 97, kuris yra mažosios raidės. Dėl aukštyn per 26 daugiau raidžių. Ir aš doing-- vėl, liejimo i, taip sakant. Arba tipas liejimo i taip sakant. Vyksta į char int. Taigi galutinis rezultatas bus, tiesą sakant, informacija, kurią mes jau žinome. Aš ruošiuosi padaryti ASCII-0 dot-- ne dot c. Pranešimas, kad tu tikriausiai jau, kad klaida, nes aš tiesiog padarė netyčia. Padaryti ASCII 0. Dabar aš ruošiuosi daryti ./ascii-0. Aš padidinti, ir, deja, jis ketina pereiti nuo ekrano. Tačiau mes matome visą diagramą kur žemėlapiai į 97, b žemėlapiai 98, ir jei mes slinkite aukštyn toliau Žinoma, žemėlapiai 65. Taigi tai yra tik pasakyti, kad Ką mes pamokslavo, yra tai lygiavertiškumas, yra Iš tikrųjų iš tikrųjų atvejis. Taigi greitai modifikacija tai. Leiskite atverti ascii-1.c. Ir atkreipkite dėmesį tai protingas, tarsi d paaiškinti tai. Tai ASCII-1.c ir pastebėti šio crazy dalykas. Ir tai tikrai gauna į širdį ką kompiuteriai darai. Nors mes, žmonės būtų nesiskaito požiūriu letters-- Nemanau, pradėti galvoti, viskas gerai tada b ir naudoti tuos skaičiuoti fizinius objektus. Jūs tikrai negali pasakyti, kad aš noriu inicijuoti kai kintamasis vadinamas c-- bet aš galėjo tai pavadino anything-- taip c yra inicializuoti kapitalo A. Nes pabaigoje dienos, kompiuterio nerūpi, ką jūs saugoti, ji tik rūpinasi, kaip norite pateikti šią informaciją. Kaip norite, kad kompiuteris interpretuoti, kad bitai modelį? Taigi tai yra ne tai, ką aš kuris paprastai rekomenduoja daryti. Tai tikrai tik pavyzdys perteikti, kad jūs galite visiškai inicijuoti žinutę į char sveikasis skaičius. Kadangi po gaubtas iš char, žinoma, yra tik skaičių nuo 0 iki iki 255. Taigi jūs tikrai gali įdėti jį viduje int. Ir ką tai taip pat rodo, kad mes gali konvertuoti iš vienos įrašykite į kitą, čia, galiausiai spausdinti tą patį. Ir iš tiesų, tai aš nustatyti online-- turėjo tai pasakyti, vėlgi, čia. Leiskite išvalyti tai iki internete, ir mes matyti internetinėje rankos, kiek reikia, tai, kas buvo skirta ten. Gerai. Taigi paskutinis pavyzdys dabar dalyvauja a-ųjų ir b-ųjų ir tada mes imtis dalykų vienu žingsniu. Taigi su per-aisiais ir B-aisiais ir c 's kapitalizaciją ir lygiavertiškumas dalį, tegul imtis šiame pavyzdyje atrodo, čia. Kitas kodas pavyzdys. Mes atidaryti vieną, kad jau, kad mes neturite jį įrašyti visi iš nulio. Ir atkreipkite dėmesį, tikintis mes naudojame kelis antraštę bylos, tarp kurių yra Mūsų naujas draugas, string.h. Dabar tai atrodo, iš pradžių žvilgsnis, šiek tiek paslaptingas. Bet pažiūrėkime, jei mes negalime samprotauti per tai, kas vyksta čia. Pirma gaunu eilutę iš vartotojo, ir aš įdėti, kad eilutę kintamasis vadinami s. Pasta Kopijuoti iš anksčiau. Pagal 22, aš, matyt, daro, ką Aš prieš akimirką, aš Iteracja per s simbolių. Ir naujų triukų čia yra naudojant eilutės ilgis, nepilnametis optimizavimas saugoti eilutės ilgis yra N, o ne skambinti dar kartą strlen, ir vėl, ir vėl. Ir tik patikrinti, kad aš yra mažesnis nei n. Dabar čia viskas susitvarko tiek įdomu. Bet tai tik paraiškos Šio naują tą pačią idėją. Kas anglų kalba nėra ai laikiklis i atstovauti? PUBLIKA: Skaičiavimo kiekvienas charakteris [nesigirdi]. David J. Malan: Skaičiavimo kiekvieną simbolį. Ir dar trumpai, ai laikiklis aš atstovauju, ką? Ar galite pasakyti. Ne įdėti jums vietoje čia. PUBLIKA: Well-- David J. Malan: Taigi, jei žodis is-- jei eilutė yra Zamyla, kuris starts-- PUBLIKA: --Prieš spręsti simbolių separately-- David J. Malan: Geras. Būtent. Kvadratinių laikiklis notacija leidžia jums pasiekti kiekvieną simbolį atskirai, taip ai laikiklis 0 bus Pirmasis simbolis eilutę. ai laikiklis 1 bus antra, ir taip toliau. Taigi klausimas aš prašau, čia, šios būklės yra kas? Ar i'th pobūdis ių Greater nei arba lygus mažosiomis? Ir ką tai reiškia, čia, su dvigubo jungimo ženklus? PUBLIKA (KARTU): Ir. David J. Malan: Ir. Tai tiesiog prilygsta tai. Ir nėra C raktažodį, jūs turite naudojimas, annoyingly, ampersand ampersand. Ir tai, priešingai, prašo yra S i'th pobūdžio mažesnis arba lygus mažosiomis raidėmis z? Ir vėl, štai kur suprasti pagrindinis įgyvendinimas kompiuteris turi prasmę. Atkreipkite dėmesį, kad, nors turiu dot dot dot ten, atrodo iki z mažosiomis raidėmis yra visi gretimi vertės iki nuo 97 d iki. Ir pats didžiosiomis raidėmis, pradedant nuo 65. Taigi Takeaway, tada, yra tai, kad anglų kalba, Kaip jūs apibūdintumėte ką linija 24 daro? Taip? PUBLIKA: 24 tai patikrinti pamatyti ar kiekvienas personažas yra mažosios. David J. Malan: Tai patikrinti, ar kiekvienas personažas yra mažoji raidė. Taigi dar trumpai, yra i'th pobūdis ių mažosiomis raidėmis? Tai viskas, mes išreikšti čia logiškai, mažai cryptically, bet galiausiai gana tiesmukai. Ar S i'th simbolių mažosiomis raidėmis? Jei taip, ir čia, kur viskas gauti šiek tiek proto lenkimo už truputi, jei taip, eiti į priekį ir atsispausdinti simbolį. Taigi tai yra tik vietos rezervavimo ženklas, tačiau tai, ką charakteris? Kodėl aš darau ai kronšteiną i atėmus šis posakis čia? Na pastebėsite modelis čia. Faktiniai skaičiai neturi reikšmės tiek daug. Tačiau pastebite, kad 97 yra kaip toli nuo 65? PUBLIKA: 32. David J. Malan: 32. Kaip toli yra 98 iš 66? PUBLIKA: 32. David J. Malan: Little c iš didžiojo C? 32. Taigi, čia yra 32 apyniai viena raidė į kitą. Taigi atvirai aš, galėtų supaprastinti tai, kad. Bet tada aš tipo sunku kodavimo tai žemo lygio supratimas kad skaitytojas yra kada nors supras. Taigi, aš ruošiuosi apibendrinti kaip aš žinau, mažosios raidės yra didesnės. Aš žinau, kad didžiosios raidės yra mažesni dydžiai, ironiškai. Bet tai iš esmės atitinka sakydamas atimti 32 iš S laikiklio i. Taigi, iš šių kontekste laiškus, jei laiško atsitinka būti, mažosiomis raidėmis ir aš atimti 32, kokį poveikį tai turi bendro, matematiškai, ant mažosiomis? PUBLIKA: Capitalizes-- David J. Malan: pasinaudojama jį. Ir iš tiesų, tai yra, kodėl mūsų Programa vadinama pasinaudoti nuliui. Ši programa arba pasinaudos laišką, po patikrinimo, jei tai yra iš tiesų mažoji raidė. Priešingu atveju, 30 eilutėje, ką man daryti, jei tai ne mažoji raidė, kad aš žiūri ne pirma iteracijos kilpa. Tiesiog atspausdinti jį. Taigi nereikia keisti stuff kad net ne mažosiomis raidėmis. Apriboti save tiek per mažai z. Dabar tai yra gana neaiškus. Bet dienos pabaigoje, tai kaip mes, kadaise, turėjo įgyvendinti dalykų. Jei aš vietoj atidaryti pasinaudoti vienas, oi ačiū Dievui. Yra funkcija vadinamas viršutinių kad gali daryti viską, ką tik padariau ne gana žemo lygio. Dabar į viršutinę įdomu nes ji yra deklaruota failą, ir jums bus tik žinau, tai patikrinę dokumentus, ar buvo pasakyta, tarkim, klasėje, kur tai yra, failo vadinamas ctype.h. Taigi, tai yra dar vienas naujas draugas mūsų. Ir viršutinė ar tiksliai ką rodo jo pavadinimas. Jūs galite pereiti į, kaip argumentą, tarp šie skliaustai, kai personažas. Aš ruošiuosi pereiti į i'th pobūdžio S naudojant mūsų išgalvotas naują žymėjimą įtraukiant laužtiniuose skliaustuose. Ir atspėti, kas yra grąža vertė į viršutinę matyt vyksta būti? Didžioji raidė. Didžioji raidė. Taigi, jei aš pereiti į mažąsias a, tikiuosi, apibrėžiamos kaip į viršutinę, jis ketina grįžti didžiąsias A. Priešingu atveju, jei tai ne mažosiomis raidė Pirmoji vieta, aš tiesiog atsispausdinti jį. Ir iš tiesų, pastebėsite, Antrasis draugas čia. Ne tik, kad viršutinė egzistuoja, bet yra mažesnė, o tikrai atsakys, kad klausimas man. Dabar kas parašė šiuos dalykus, 10s ir prieš metus, jūs žinote, ką? Įvykdyta į viršutinę ir sumažinti naudojant kodą, kaip šis. Bet vėl, suderinama su šis atsiribotų toli idėja, rūšiuoti, žemesnio lygio įgyvendinimo informacija. Ir stovi ant žmonių pečių kuris atėjo prieš mus, naudojant funkcijas kaip į viršutinę ir mažesnis, o nuostabiai pakankamai gražiai pavadintas pasakyti, ką jie daro, yra puikus paradigma priimti. Dabar paaiškėja, kad, jei aš perskaičiau vyras puslapis, tarkim, į viršutinę, Aš kažko išmokti daugiau. Taigi vyras toUpper. Tai šiek tiek absoliuti. Tačiau pranešimas, štai, kad paminėti header failą, kad turėčiau naudotis. Kaip panaikinti, nes tai yra klaidinantis, funkcija naudoja int vietoj simbolių dėl priežasčių, susijusių klaidų tikrinimas. Bet mes galbūt ateis atgal į tą, kuris ateityje. Tačiau pastebite, čia į viršutinį atsivertusių laiškas C didžiąsias, jei įmanoma. Taigi tai gana paprasta. Ir dabar būkime šiek tiek siauresni. Pažvelkime į dalis vyras puslapis pagal grįžimo vertės. Grąžinta reikšmė yra ta, kad konvertuojamos laiške. Arba c, jei konvertavimas buvo neįmanoma, kur c yra originalus įėjimas. Kuris žinau iš čia, iš argumentas, kad viršutinis. Taigi, kas yra tai Takeaway? Grąžinta reikšmė yra ta, kad konvertuojamos laiške, arba c originalus raštas, jei konversija buvo neįmanoma. Kas tobulinimas galiu todėl padaryti savo kodą dizainą? Taip? PUBLIKA: Jūs galite pašalinti kitur. David J. Malan: galiu pašalinti else, ir ne tik else. PUBLIKA: Galite pašalinti [nesigirdi]. David J. Malan: galiu pašalinti visą šakę kelyje, jei dar apskritai. Taigi iš tiesų, leiskite man atidaryti Galutinis variantas tai, kapitalizuoti-2 ir pastebėsite, kiek, jei jūs, seksualus, kodas yra dabar vis, tuo, kad aš sumažėjo nuo kai septynis ar taip linijas tiesiog keturių, funkcionalumas, kad aš skirti tiesiog paskambinę į viršutinę, einančios ių laikiklio i, ir spausdinimo , dalyvaujant rezervuotos vietos% c, kad ypač charakteris. Dabar, be abejo, yra klaidų, arba bent jau apie klaidą rizika, šioje programoje. Taigi tiesiog grįžti į ankstesnį takeaway, ką turėčiau tikriausiai taip pat daryti šią programą, kad ji labiau patikimas, kad nėra jokio būdo tai gali katastrofos, net retais atvejais? PUBLIKA: Įsitikinkite, kad jis yra ne NULL. David J. Malan: Įsitikinkite, kad jis yra ne NULL. Taigi tikrai, kad šis super tinkamas, turėčiau daryti kažką panašaus, jei s ne NULL, tada eiti į priekį ir paleisti šie kodo eilutes, kurios Galiu tada įtrauka, kaip kad, ir tada įdėti į mano glaudžiai petnešomis. Taigi gera susiejimas kartu iš dviejų idėjų. Taip? PUBLIKA: Ar jūs naudojate daryti, o kilpos, o ne? David J. Malan: Could Aš padaryti, o do kilpa? PUBLIKA: --Prieš norite įsitikinti, kad jūs iš tikrųjų [nesigirdi]. David J. Malan: Could jūs naudojate daryti, o? Trumpas atsakymas, Nr. Kadangi jūs ketinate pristatyti kito kampo bylą. Jei eilutė yra nulinė ilgio. Jei, pavyzdžiui, aš tiesiog paspauskite Įveskite, be galimybės kada nors rašyti Zamyla. Aš ruošiuosi perduoti jums atgal faktinis eilutė, kaip mes galų gale pamatyti, kad nulinis simbolių. Jis vis dar seka, tai tiesiog super trumpa. Tačiau, jei jūs naudojate daryti, o, jūs ketinate aklai pabandyti padaryti kažką gerbti tą eilutę, ir nieko vyksta ten. PUBLIKA: Na, jei tu daryti [nesigirdi] o s-- David J. Malan: O aš matau, išlaikyti gauti iš naudotojo eilutę. Taigi trumpas atsakymas, jūs gali ir išlaikyti paerzinti jiems suteikti jums eilutę, kad yra pakankamai trumpas, kad tilptų atmintyje. Absoliučiai. Aš tiesiog pasirinko ne. Jei jie nesuteikia man string I nori, aš mesti, aš mesti. Tačiau visiškai šiuo tikslu, galite visiškai padaryti. Taigi bibliotekos header files, kad mes dabar susipažinę su yra šie, čia. Standartinio I / O, CS50.h, string.h, ctype.h, ir yra, tiesą sakant, kt. Kai kurie iš jūsų atrado matematikos biblioteka math.h. Bet leiskite man pristatyti jums, dabar, siekiant tai išteklių, kad CS50 darbuotojai, Davin, ir Rob ir Gabe ypač kartu sudėjus. Tai netrukus nuorodą Kursas tinklapyje. Tai vadinama CS50 nuoroda. Kuris tiesiog suteikti jums greitai skonis tai veikia taip, kaip nurodyta toliau. Leiskite man eiti į reference.cs50.net. Pamatysite ant kairės rankos puse didžioji sąrašą funkcijų, kad ateiti su c. Bet jei aš rūpinuosi, šiuo metu, apie kažką panašaus strlen, Galiu įveskite jį čia. Jis filtruoja žemyn sąrašą į ką aš rūpi. Aš ruošiuosi jį spustelėkite. Ir dabar į kairę, pamatysite, ką mes tikimės, yra paprastesnis, žmogaus draugiškas paaiškinimas, kaip ši funkcija veikia. Grąžina eilutę ilgį. Štai trumpa apžvalga, Štai kaip naudoti atsižvelgiant į failo antraštės, ir kalbant apie tai, ką funkcija atrodo pagal savo argumentams pagrįsti. Ir tada čia sugrįžta iš eilutės ilgis. Bet tiems iš jūsų, patogesnis, jūs iš tikrųjų galite spustelėti daugiau patogūs, ir šio turinys puslapis, dabar bus pakeisti būti numatytąsias vertes, ką jums naudojant žinyno puslapį. Kitaip tariant, CS50 Nuorodos supaprastinimas iš žinyno puslapių, pagal personalo, studentų. Ypač tie, mažiau patogus ir tarp jų, taip, kad jūs neturite pabandyti wrap jūsų protas aplink, tiesą sakant, kai gana paslaptingas sintaksė ir dokumentacija kažkada. Taigi keep that in mind dienomis ateiti. Taigi čia, vėlgi, yra Zamyla. Leiskite dabar užduoti klausimą, kad yra šiek tiek daugiau žmonių prieinama. Ačiū Chang, kas buvo spausdinti daugiau drambliai be sustojimo per pastaruosius keletą dienų. Mes turime galimybę suteikti bent vienas iš jų toli. Jei galėtume gauti tik vieną savanorį ateiti iki atkreipti ekrane. Kaip apie čia? Nagi iki. Kas yra jūsų vardas? ALEX: Alex. David J. Malan: Alex. Viskas gerai. Alex, nagi iki. Mes pasiruošę žiūrėt savo rašysenos ekrane čia. Gerai, nice to meet you. ALEX: Nicos jums susitikti su jumis. David J. Malan: Gerai. Taigi, super paprasta naudotis. Baras nėra didelis, gauti dramblį šiandien. Tu žaidi su getstring vaidmenį. Ir aš ruošiuosi tik pasakyti, eilutė, kad jūs Dotarłeś. Ir manau, kad jūs, getstring buvo vadinamas. Ir žmogaus, kaip ir aš, turi įvedėte Zamyla, Z-A-M-Y-L-A. Tiesiog eikite į priekį ir rašyti Zamyla ant ekranas kaip nors jūs Dotarłeś ir saugomi kažkur atmintyje. Palikus kambarys, koks bus kelias kitas words-- kad viskas OK, nesustoti. [Juokas] Taigi Zamyla, puikus. Taigi dabar manau, kad jūs, getstring, vadinami dar kartą. Ir todėl aš pateikti jums, bent klaviatūra, su kitu pavadinimu, Belinda. Viskas gerai. Ir dabar, kai kitą kartą getstring yra vadinamas, aš tipo kažkas panašaus Gabe, G--B-E. Jūs tikrai vartojate širdies laisvosios kreipties atminties. Kuris rengia viską visiškai atsitiktinai. Gerai. [Juokas] ALEX: Atsiprašome mano rašysena yra blogai. David J. Malan: Ne, tai viskas OK. Ir kaip apie Rob, R-O-B. Gerai. Geras. Taigi aš ne tikėtis jums būtų rūšies nustatyti dalykus tokiu būdu. Tačiau mes galime padaryti šį darbą. Taigi, kaip jums eiti apie nustatantis iš šių simbolių atmintyje? Kitaip tariant, jei mes manome, tai stačiakampio juodas ekranas kaip atstovaujanti kompiuterio RAM arba atminties. Ir prisiminti, kad RAM yra tiesiog visa krūva baitų, ir baitai visa krūva bitai. Ir bitai yra kažkaip įgyvendinti, paprastai su tam tikra forma elektros aparatūros. Taigi, kad tarsi sluoksniavimasis mes kalbėjome apie ir dabar gali savaime suprantamu dalyku. Kaip jums eiti apie nuspręsti, kur rašyti Robas palyginti Gabe palyginti Belinda palyginti Zamyla? ALEX: Aš ką tik padarė jį nurodyti, kad jūs man pasakė. David J. Malan: Ir tai yra tiesa. Bet kas reglamentuoja, kur jūs įdėti Belinda pavadinimas ir Gabe vardas? ALEX: Nieko? David J. Malan: [Juokiasi] Taigi, kad veikia, tai gerai. Taigi kompiuterių mažai daugiau tvarkingai, kad ne. Ir todėl, kai mes implement-- ten tik už moment-- kai mes iš tikrųjų įgyvendinti kažką panašaus getstring kompiuteryje, Zamyla gali būti išdėstyti gana daug kaip tu ant ekrano, ten. Ir kas svarbiausia pastebėti čia ką Aleksas padarė, ten yra natūra iš demarkacijos tarp kiekvienos iš šių žodžių, tiesa? Jūs nerašė Z-M-Y-L--B-E L-I-N-D--G--B-- Kitaip tariant, yra keletas rūšių demarkacijos kuris, atrodo,, rūšiuoti, atsitiktinis tarpai tarp šių įvairių žodžių. Bet tai gerai, nes mes, žmonės dabar gali vizualizuoti, kad tai yra keturios skirtingos stygos. Tai ne tik vienas seka iš daug simbolių. Taigi kompiuteris, tada, tuo tarpu, gali užtrukti eilutę kaip Zamyla, įdėti kiekvieną iš šių laiškų viduje iš atminties baito. Tačiau šis skaičius yra žymiai didesnis, Žinoma, kaip šešių simbolių. Yra visa krūva RAM. Ir taip, nuo šiol, tai tinklelis dėžių vyksta atstovauti, ką Aleksas tiesiog padarė čia ekrane. Ir dabar, Aleksas, mes Jums galime pasiūlyti pasiūlyti mėlynos arba oranžinės spalvos dramblys iš Chang. ALEX: Imsiu mėlyną dramblį. David J. Malan: mėlyna dramblys. Taigi didelis audringi plojimai, jei mes galėtų būti, Alex čia. [Plojimai] ALEX: Ačiū. David J. Malan: Ačiū. Taigi Takeaway yra tai, kad, nors modelis rūšies pasikeitė laikui bėgant, čia lentoje, ten buvo toks Takoskyra tarp įvairių stygų Alex gavo už mus. Dabar kompiuteriai, tiesą sakant, galėtų padaryti tą patį. Jie gali rūšies pūkštelėti stygos niekur RAM. Iki čia per čia žemyn čia, žemyn čia. Jie gali padaryti būtent tai. Bet, žinoma, tai tikriausiai ne geriausias planavimas. Teisė? Jei aš nuolat klausia Alex vardai, pavardės, tikriausiai jis nori įdėti šiek tiek daugiau žemyn čia, gal iki čia per čia, daugiau čia galiausiai čia. Bet su šiek tiek daugiau planavimo, žinoma, galėtume nustatyti dalykus daugiau švariai. Ir iš tiesų, tai, ką kompiuteris daro. Bet laimikis, kad jei šalia styginių man po Zamyla yra kažkas kaip Belinda, pasiūlyti kur mes galime rašyti b punktas, atsižvelgiant į šios tinklelį? Kur eitumėte? Norėdami į teisę, žemiau z, mažesnis už A? Ką jūsų pirmieji instinktai būti? PUBLIKA: Žemiau z. David J. Malan: Taigi žemiau z. Ir tai gana paprasta, tiesa? Tai tipo tvarkingas, tai, ką mes darome ant klaviatūros, kai mes paspauskite Enter, arba siųsti priimant ženkleliais sąrašas dalykų. Tačiau realybė yra ta, kad kompiuteriai stengiuosi būti efektyvesnis, ir prisikimšti tikrai kiek duomenis į RAM, kiek įmanoma, taip, kad jums nereikia gaišti jokių baitų. Taigi, kad jums nereikia gaišti bet ekranas nekilnojamojo turto. Ir problema, nors, yra tai, kad jei mes tiesiog įdėti laišką b po, kaip mes ketiname žinoti, kur Zamyla pavadinimas baigiasi o Belinda vardas prasideda? Taigi jūs žmogus nuolatos tiesiog pasiūlė, gerai, Enter klavišą, iš esmės. Įdėkite jį žemyn žemiau. Arba net padarė Alex, tiesiog pradėkite rašyti Kitas pavadinimas žemiau ankstesnės, ir toliau, kad vienas, ir tada toliau, kad vienas. Štai vaizdo užuomina. Kompiuteriai turite kitą vaizdinę lazda, bet tai šiek tiek daugiau glausta. Tai tai funky simbolių. Kairinis pasvirasis brūkšnys 0, kuris yra galbūt primena pasvirąjį n, ir taip toliau, dabar. Specialūs evakuacijos sekas. Kairinis pasvirasis brūkšnys 0 yra būdas atstovaujančių aštuonių nulis bitai iš eilės. 0000 0000. Būdas jums išreikšti tai nereiškia, nukentėjo nulis klaviatūroje, nes tai, kad yra ASCII char. Atrodo, skaičių, tačiau iš tikrųjų yra dešimtainis skaičius kuri atstovauja cirkuliarą glifų, apskritas šrifto. Tuo tarpu, Backslash nulis reiškia, pažodžiui įdėti aštuonis nulis baitų čia man. Taigi, tai yra šiek tiek savavališka. Galėtume jau naudojamas bet koks modelis Bitų, bet pasaulis nusprendė keletą metų prieš, kad atstovauti Styga pabaigos atmintyje, tiesiog įdėti visa krūva nulių. Kadangi mes galime aptikti, kad. Dabar tai reiškia, kad joks laiškas abėcėlė gali būti atstovaujama su nuliais. Bet tai gerai, mes jau matėme kad mes naudojame 65 d iki 97 d viršų. Mes ne gauti bet uždaryti visi nuliai. Taigi Belinda į kompiuterio atmintį iš tikrųjų ketinate eiti čia. Aš sudarytas jį geltonai tik atkreipti dėmesį į jį. Ir pranešimas, taip pat tai yra visiškai savavališkas. Aš sudarytas jį kaip tinklelis. Kaip, RAM tik kai fizinis objektas. Tai nebūtinai turi eilutes ir stulpelius, per se. Jis ką tik gavo visa krūva baitų įgyvendinamos techninės kažkaip. Bet jei po Belinda I įvedėte Gabe pavadinimas, jis ketina baigti čia iš atminties, ir jei aš įvedėte Daven pavadinimas, Pavyzdžiui, jis ketina baigti čia. Ir aš galiu toliau rašyti net daugiau vardų. Deja, jei aš stengiuosi rašyti super ilgą pavadinimą, Galėčiau galiausiai paleisti iš atminties. Tokiu atveju, getstring yra ketina grįžti NULL, kaip mes sakėme. Bet laimei, bent jau šis vaizdo čia mes ne gauti gana, kad toli. Dabar, kas yra gražus, kad tai Bendra idėja gydyti dalykų kaip dėžėse yra atstovas C funkcija ir kalbų daug, žinomas kaip masyvą. Masyvas yra dar vienas duomenų tipas. Tai duomenų struktūra, jei bus. Struktūra ir jo prasme tikrai, rūšies, atrodo kaip dėžutės, bent jau savo proto akis. Masyvas yra greta seka identiškų duomenų tipų, atgal atgal atgal į nugarą. Taigi seka, kitais žodžiai yra iš simbolių masyvas. Simbolių masyvas. Tačiau paaiškėja, jūs galite turėti matricos kekių dalykų. Iš tiesų, mes galime įdėti net numeriai masyvą. Taigi tokios formos, kokios mes ketiname pradėti skelbiantis šiuos duomenis struktūra žinomas kaip masyvo taip pat ketina naudoti skliaustus. Tačiau šie Kvadrātiekavas ketinate turi skirtingą reikšmę ir šiame kontekste. Ir pažiūrėkime, kaip nurodyta toliau. Tarkime, kad aš atidariau iki naujo failo čia. Ir aš tai išsaugoti kaip ages.c. Ir aš tai išsaugoti savo aplanką čia. Ir dabar aš ruošiuosi eiti į priekį ir pradėkite rašyti kažką kaip įtraukti CS50.h, apima stdio.h, int main negaliojančiu. Ir tada viduje čia, aš noriu pirmiausia turi int vadinamas amžiaus. Ir aš ruošiuosi naudoti, kad gauti int iš jo ar jos amžiaus vartotojui. Tačiau ši programa yra skirtas būti naudojamas keli žmonės, nepriklausomai nuo konteksto. Aš turiu žmonių liniją. Visi jie turi įvesti savo amžius gal kai aš nežinau, konkurencija, ar įvykis kad jie atvyko. Taigi kitam asmeniui, aš reikia kito kintamojo. Nes jei aš tiesiog padaryti amžiaus gauna getInt, tai ketina Bylų, ar perrašyti praėjusių asmens amžius. Taigi, kad nieko gero. Taigi mano pirmasis instinktas Gali būti, oi, viskas gerai, jei aš noriu gauti daug žmonių-ųjų ages-- tegul pavadinkime šį age1, int age2 gauna int, int age3 gauna getInt. Ir dabar aš ruošiuosi naudoti kai Pseudocode kodas čia. Ar kažką su tais numeriais. Mes išvykti į kitą dieną, kas mes darome čia, nes mes tik rūpintis metu apie age1, age2, age3. Deja, kai aš kaupia šią programą ir įdėti jį į priešais tikriesiems vartotojams, kas iš esmės prastas dizainas sprendimas man atrodo, kad padarė? Taip? PUBLIKA: [nesigirdi] David J. Malan: Taip, Aš net bandė išsiaiškinti, kaip daug amžių man iš tikrųjų rūpi? Jeigu aš turiu mažiau nei trys žmonės čia ir todėl mažiau kaip tris amžiaus, Aš vis dar aklai tikintis tris. Neduok Dieve keturi žmonės parodyti. Mano programa tiesiog nebus net padėti jiems. Ir todėl tai, ilga istorija Trumpai tariant, nėra geras įprotis. Teisė? Aš iš esmės buvo nukopijuoti ir įklijuoti kodą ir tiesiog truputį keisdami kad kintamųjų vardai. Ir, mano Dieve, jei jūs turėjo ne tris amžių, tačiau 10 arba 100, arba net 6500 bakalaurai, pavyzdžiui. Tai nesiruošia būti ypač elegantiškas kodas, arba tvarus. Jūs ketinate turėti perrašyti programos kiekvieną kartą jūsų telefono numeris keisis. Taigi, laimei, mūsų tikrasis ages.c byla šiandien, mes turime daugiau protingas sprendimas. Pirma, aš ruošiuosi skolintis statyti, mes naudojamas kelis kartus, tai daryti, o kilpa, siekiant gauti žmonių į kambarį skaičius. Aš tik ketina kvaršinti vartotojui, vėl ir vėl, kol jis ar ji man duoda vertė n tai teigiamas sveikasis skaičius. Aš galėjo naudoti, naujausia laikas get teigiamą int. Bet mes neturime, kad nekilnojamojo, todėl nuėjau į priekį ir vėl įgyvendinti šią idėją. Dabar žemyn čia, tai yra naujas triukas. Pagal 27, kaip komentarus linijiniai 26 rodo, paskelbti masyvą, kuriame saugoti kiekvieno žmogaus amžių. Taigi, jei norite gauti ne vieną int, o ne du ints, bet visa krūva int. Tiksliau n sveikieji skaičiai, n buvo might būti trijų, gali būti 100, gali būti 1000. Sintaksė, paprasčiausiai, yra tarkim, kas duomenų tipas norite? Ką norite skambinti kad atminties riekė? Ką norite skambinti tinklelį kad atrodo taip pavaizduotomis piktogramo-? Ir skliausteliuose čia, jūs sakote kaip didelis norite masyvas būti. Ir taip anksčiau, kai aš sakiau sintaksė mažai kuo skiriasi čia mes vis dar naudojate laužtiniuose skliaustuose, bet kai aš skelbiantis masyvą, viduje skaičius laužtiniuose skliaustuose priemonės kaip didelis norite masyvas būti. Priešingai, kai mes buvome naudojant s laikiklis i prieš akimirką, s, eilutė, Iš tiesų iš simbolių masyvas, bet kai esate ne skelbiantis kintamąjį, kaip su šiuo raktažodžiu čia jūs tiesiog gauti specifinis rodiklis, specifinis elementas iš tos masyvo. Kai mes žinome, kad likusios tai yra paprasta. Jei yra nauja aš pirmą ketinate spausdinti kas iš asmens numerio i amžiaus. Kur aš tiesiog pasakyti žmogus numeris vienas, asmuo numeris du, asmens kodas trys. Ir aš tiesiog daro aritmetines, taip, kad, pavyzdžiui, normalūs žmonės, tikimės iš vieno už tai programa, o ne nuo nulio. Tada aš vadinu getint, bet aš laikyti į amžių atsakymas laikiklis i. Kuris yra i'th amžius masyve. Todėl nors paskutinį kartą mes žiūrėjome šie langeliai kaip simbolių, skirtų Zamyla pavadinimas, ir kt. Dabar šie langeliai atstovauti 32 bitų ar keturių baitų , kurioje mes galime laikyti int, int, int. Visa tai, vėlgi, yra tas pats duomenų tipas. Dabar darau kažką kvaila, kaip laikas eina, tiesiog pateisinti raštu šią programą. Ir tada žemyn čia, aš dar kartą pakartoti per masyvo sakydamas metų nuo dabar, asmuo numeris vienas valia būti kažkas metai. Ir suprasti, kad math-- Aš turiu galvoje, tai nėra labai sudėtinga arithmetic-- Aš tiesiog pridėti vieną į jų amžių. Tiesiog dar kartą įrodyti, tai. Lygiai taip pat aš galiu puslapis į eilutę, S, taip galiu puslapis į kurio amžiaus masyvas, kaip kad. Taigi, kur tai vyksta, imasi mus? Taigi mes matome, galų gale, Keletas dalykų, kuriuos per kelias dienas į priekį. Vienas iš jų, visą šį laiką, kai raštu savo programas, kaip Mario, gobšus, kreditą. Jūs buvote įvedę vardą programa ir pataikyti Enter. Ir tada gauti vartotojo įvesties. Su getString, getInt, getLongLong arba pan. Tačiau paaiškėja, kad C atramas kažkas vadinamas komandų eilutės argumentai, kurie ruošiasi leisti mus faktiškai gauti ne žodžiais, kad jūs tipo, ne mirksi eilutę po savo programos pavadinimą. Taigi dienų ateiti, jums gali įvesti kažką panašaus Cezaris, arba ./caesar numeris 13, po to. Pamatysime, kaip tai veikia. Nes iš tiesų, problema nustatyti du, mes ketina pristatyti Jums su šiek tiek kažką primena Ralphie s nuginčyti iš kartografijos. Iš kodavimo informaciją menas. Tai, iš tiesų, yra labai primena, kas Ralphie padarė. Tai iš šifravimo pavyzdys algoritmas vadinamas ROT13 R-O-P 13. Kuris tiesiog reiškia pasukti raidės abėcėlės 13 vietose. Ir jei jūs darote, kad jūs pamatysite dabar kas yra, ko gero, žino frazė. Bet kaip mes ketiname naudoti tai galiausiai yra apskritai. P nustatyti du, į standartinę versiją, jums įgyvendinti keletą šifrai pora, vienas vadinamas Cezaris, vienas vadinamas Vigenere. Abu jie yra sukimosi šifrai, nes kažkaip įjungti vieną raidę į kitą laišką. Ir Cezaris yra super paprasta. Jūs pridėti dar vieną, jūs pridedate 13, arba kai iki 26 skaičius. Vigenere daro, kad už laiško pagrindas. Taigi Vigenere, kaip jūs pamatysite į spec, yra saugesnis. Bet dienos pabaigoje, ko jums bus įgyvendinti ir P nustatyti du, yra tai, kad raktas, kurį naudoja tiek kai šifravimui ir iššifravimui. Kalbėdamas apie tekinimo proceso teksto, kai originalus pranešimą, į Cypher tekstą, kuris yra kažkas užkoduota. Ir tada iškodavimo jį dar kartą. Be hacker leidimas, Tuo tarpu, jūs būsite pavesta kažką panašaus dvasia, kur mes suteiksime jums failą, iš tipiškų Linux, arba Mac, Unix kompiuteris vadinamas Etsy slaptažodis, kurį sudaro visumą krūva vardų ir slaptažodžių. Ir tie slaptažodžiai turi visi buvo užšifruotas, arba maiša, taip daugiau kalbėti tinkamai, kaip jūs pamatysite spec. Ir įsilaužėlis leidimas bus iššūkis jūs su atsižvelgiant įvestį, kaip tai, ir krekingo slaptažodį. Tai reiškia, kad suprasti, ką Žmogaus slaptažodį tikrųjų buvo. Nes, tiesą sakant, slaptažodžiai paprastai nėra saugomi aišku, ir apskritai slaptažodžius turėtų būti sunku atspėti. Tai nėra dažnas atvejis. Ir tai, ką aš maniau, mes norime padaryti, tai sudaryti su pora minučių žvilgsnis ypač prastas pasirinkimas slaptažodžių iš filmo jūs tikriausiai pamenate, kad meile. O jei ne, jums reikia išsinuomoti. [VIDEO PLAYBACK] -Helmet, Jūs fanatikas, kas vyksta? Ką tu darai su mano dukra? -Permit Man pristatyti jaunas puikus plastikos chirurgas, Gydytojas Phillip Schlotkin. Didžiausias nosis darbas žmogus Visa visata ir Beverly Hills. -Your Didenybė. -Nose Darbo? Aš nesuprantu. Ji jau turėjo nosies darbą. Tai buvo jos saldus 16 metu. Ne, tai ne tai, ką jūs manote. Tai daug, daug blogiau. Jei jūs neturite duoti man derinys oro skydas, Gydytojas Schlotkin duos savo dukra atsarginę savo seną nosį. - [Gūsių] Nooooooooooooo. Kur tu jį gavai? -Gerai. Pasakysiu aš jums pasakysiu. Ne, tėti, ne. Jūs turite ne. -Tu Teisė my dear. Aš praleisti savo naują nosį. Bet aš ne pasakykite jiems, kad derinys, nesvarbu koks. -Labai Gerai. Gydytojas Schlotkin, tai blogiausias. -My Malonumas. -no! Palauk, palauk. Aš pasakysiu. Aš pasakysiu. -Aš Žinojo, kad tai veikia. Gerai, kad tai man. -The Derinys yra vienas. -Vienas. -Vienas. -Dvi. -Dvi. -Dvi. -Three. -Three. -Three. Keturi. Keturi. Keturi. -Five. -Five. -Five. -Taigi Derinys yra vienas, du, trys, keturi penki. Štai stupidest derinys Aš kada nors išgirsti mano gyvenime. Štai iš dalykas, natūra idiotas turės savo bagažo. -Ačiū, Jūsų Didenybe. [REMOTE PASPAUDIMAI] -Ko Tu padarei? -Aš Išjungtas sieną. Ne, tu negali, tu išjungtas visą filmą. -Aš Tikriausiai paspaudėte klaidingą mygtuką. Na, padėkite jį atgal! Įdėkite filmą atgal! Taip, sere! Taip, sere. -Paleiskite Keliaukime, Arnold. Ateik, Gretchen. Žinoma, jūs žinote, aš jums turi sąskaitą už tai. Na? Ar jis veikia? Kur karalius? -Ji Dirbo, pone, mes turi derinys. -Great. Dabar mes galime imtis visų paskutinio atodūsio šviežio oro iš planetos Druidia. Kas derinys? -Vienas, Du, trys, keturi penki. -Vienas, Du, trys, keturios, penkios? Taip. -Tai Nuostabi. Aš turiu tą patį derinys mano bagažą. Paruoškite SPACEBALL 1 už neatidėliotinas išvykimas. Taip, sere. -Ir Keisti derinys mano bagažą. [Durų uždarymo SOUND] [Clink DURŲ pataikyti šalmas] -Ahh. [END VIDEO PLAYBACK] David J. Malan: Štai ir viskas už CS50, mes pasimatysime kitą savaitę. Narrator: Ir dabar, Deep Mintys, pagal Daven Farnham. DAVEN Farnham: Kodai C yra tiek daug sunkiau, nei nulio. printf, įbrėžimams buvo melas. [Juokas SOUNDBITE]