[Musiikki soi] DAVID J. MALAN: Okei. Tämä on CS50, ja tämä on viikon lopussa 2. Joten tänään, aiomme jatkaa look miten me edustamme asiat alla hood-- luopumassa numeroista kuten kokonaislukuja ja liukulukuarvoja ja keskitytään jouset ja lopulta enemmän mielenkiintoisia ohjelmia. Mutta me myös katsomaan pari verkkotunnuskohtaisia ​​problems-- joista ensimmäinen tulee olla mukana salaus, taidetta muokkaamisella tietoa, jossa näet yllä täällä on kuva Radio Orphan Annie salainen dekooderi rengas menneiden. 

Tämä on itse asiassa hyvin alkeellinen muoto ja lapsiystävällinen muodossa cryptopgraphy jolloin tämä rengas on kaksi disks-- yksi sisällä ja toinen sen ulkopuolella. Ja kiertämällä yksi niistä, voit olennaisesti riviin kirjaimia kuten Z muiden kirjaimet kuten B-A kautta Toisin sanoen, voit kirjaimellisesti pyörittää aakkoset, Näin keksiä kartoitus kirjeitä kirjaimet niin, että jos halusi lähettää salaisen viestin joku kuten Annie, voisit kirjoittaa alas viestisi ja kierrä kirjeitä, jolloin, jos tarkoitat sanoa "," sinä sen sijaan sanoa "B" Tarkoititko sanoa "B" te sen sijaan sanoa "C" - tai jotain hieman viisaampi kuin that-- ja sitten lopulta niin kauan kuin Annie on tämä dekooderi rengas, hän pystyy purkamaan viestin. Nyt, ehkä muistatte, itse asiassa, että tämä käytettiin hyvin kuuluisa elokuva, joka toistaa loputtomiin aikana joulun aikaan. Katsotaanpa katsomaan täällä. Ralphie Parker: "Ole se kaikkien tiedossa yhteenvetona että Ralph Parker nimitetään jäsen Little Orphan Annie Secret Ympyrä ja on oikeutettu kaikkiin kunnianosoitukset ja hyödyt ilmenevät siihen. " 

Ralphie PARKER (kertomisen): Allekirjoitettu Pikku Orphan Annie. Varmentaa, Pierre Andre! Musteella. Kunnianosoitukset ja hyödyt, jo yhdeksän vuoden iässä. 

[Musiikki soi] 

[RADIO CHATTER] Ralphie Parker: Tulkaa. Mennään sen kanssa. En tarvitse All That Jazz noin salakuljettajia ja merirosvoja. Radiokuuluttajaa: Kuuntele huomenna yö loppusanoma seikkailu Black Pirate Ship. Nyt on aika Annien Salainen viesti sinulle jäsenille Secret Circle. Muista lapset, vain jäsenille Annie Secret Circle pystyy purkamaan Annien salainen viesti. 

Muista, Annie on riippuvaisia ​​sinusta. Aseta tapit B-2. Tässä on message-- 12, 11, 2-- Ralphie PARKER (kertomisen): I olen ensimmäinen salaisen kokouksen. Radiokuuluttajaa: --25, 14, 11, 18, 16-- Ralphie PARKER (kertomisen): Ai, Pierre oli hieno ääni tänään. Voisin kertoa, että illan Viesti oli todella tärkeä. 

Radiokuuluttajaa: vähintään 3, 25. Tuo viesti Annie itse. Muista, älä kerro kenellekään. 

[Huohottaen] Ralphie PARKER (kertomisen): Yhdeksänkymmentä sekuntia myöhemmin, olen ainoassa huoneessa talo, jossa poika yhdeksän voisi istua rauhassa ja purkaa. Ah. "B." 

[Naurahtaa] 

Ralphie PARKER (kertomisen): Menin seuraavaan. "E." Ensimmäinen sana on "olla." Kyllä! Se oli tulossa helpompaa nyt. "U." 

[Naurahtaa] 

RANDY Parker: Älä viitsi, Ralphie. Täytyy mennä! 

Ralphie Parker: Tulen alas, Ma. Jannu hurahtaa. "T." "O." "Muista to. "" Muista "mitä? Mikä oli Pikku Orphan Annie yrittää sanoa? "Muista" mitä? ÄITI: Ralphie, Randy on mentävä. Voisitko tulla ulos? 

Ralphie Parker: Okei, äiti! Tulen ulos! Ralphie PARKER (kertomisen): Olin lähestyy nyt. Jännitys oli kauhea. Mikä se oli? Planeetan kohtalo voi vaakalaudalla. 

ÄITI: Ralphie, Randy sai mennä! 

Ralphie Parker: Tulen pois, hyvänen aika! Ralphie PARKER (Kertomisen): Melkein! Sormiani lensi! Mieleni oli teräs ansa. Jokainen pore värähtelemään. Se oli melkein puhdas! Kyllä! Kyllä! Kyllä! Kyllä! 

Ralphie Parker: "Muista juoda Ovaltine. " Ovaltine? Crummy kaupallinen? 

[Musiikki soi] 

Ralphie Parker: Perhana. 

[Nauraa] 

DAVID J. MALAN: Niin että silloin on Vilkaisu mitä salakirjoitus voi olla this-- juoda eilisen. Joten nopea tiedotus. Jos olet vapaa tästä Perjantaina klo 13:15 ja olisi haluavat liittyä meihin CS50 lounas suunnata tätä URL täällä. Saapumisjärjestyksessä palvella kuten tavallista. Mutta ajan kuluessa, me varmista, että useimmat ketään joka haluaisi osallistua ajoittaa viisas. 

Niin jouset. Olemme Zamyla-- kenelle olet nyt tavannut todennäköisimmin in Harjoitus 1-- joiden nimi on kirjoitettu näin. Ja kai kirjoitit hänen nimensä tietokoneohjelmaan, joka on käyttäen jotain getString. Jotta noutaa ne painalluksia, miten osaamme edustavat merkkijono, sana, kohta, tai useampia kirjaimia kuten nämä täällä? 

Puhuimme viime kerralla noin kokonaislukuja ja ongelmia että syntyy kokonaisluvun ylivuoto ja liukulukuarvoja ja ongelmia, jotka Väliaikaisen tarkkuutta. Jousten, me ainakin on hieman enemmän joustavuutta koska strings-- vain todellisessa world-- voi olla melko mielivaltainen pituus. Melko lyhyt, melko pitkä. Mutta silloinkin, me aiomme toteavat, että tietokoneet voivat joskus muisti loppuu eikä edes Säilytä tarpeeksi iso jono. 

Mutta nyt, nyt alkaa visualisoida merkkijonon jotain näistä laatikoista täällä. Joten kuusi tällaista laatikkoa, joista jokainen edustaa merkin tai "merkkiä." Niin muistaa, että "merkkiä" - c-h-a-r-- on yksi sisäänrakennettu tietotyyppejä C. Ja mikä on mukavaa on, että voit käyttää että tällainen kuin rakennuspalikka, palapelin pala, jos haluatte, muodostaa suurempi tyyppisiä tietoja jatkamme kutsua "merkkijono". 

Nyt, mikä on hyödyllistä ajattelua asioita, kuten jouset tällä tavalla? No, näyttää siltä, ​​että voimme todella hyödyntää tätä rakennetta todella käyttää yksittäisiä merkkejä melko mutkattomasti. Aion mennä eteenpäin ja luoda tiedosto nimeltä "stringzero.c" mutta voit kutsua sitä mitä haluat. Ja kurssin kotisivuilla on jo tässä esimerkissä etukäteen, joten sinun ei tarvitse tyyppi kaiken pois. 

Ja aion mennä eteenpäin ja ensin tehdä int main void. Ja muutaman päivän, Aloitamme kiusata toisistaan mikä tyhjiö on täällä, miksi se on int vieressä tärkein, ja niin edelleen. Mutta nyt, nyt jatkaa kopioida liitä sitä. 

Aion ilmoittaa merkkijono nimeltään s. Ja aion palata GetString mitä käyttäjä on. Tämä tulee olemaan yksinkertainen ohjelma, mitään ohjeita, Menen vain sokeasti odottaa, että käyttäjä tietää mitä tehdä pidettävä yksinkertaisina. 

Ja nyt aion olla silmukka. Ja sisällä minun silmukan olen menossa on int i saa nolla. Ja i on jälleen vain yleissopimuksen, indeksimuuttujaa laskentaa, mutta voisin kutsua tätä mitä haluan. Aion tehdä i on pienempi than-- hyvin Zamyla nimi on kuusi merkkiä pitkä. Joten aion kovaa koodi, joka siellä nyt. 

Ja sitten i ++. Ja nyt sisälle näistä kihara henkselit Aion tehdä printf, ja haluan tulostaa yhden merkki kerrallaan. Joten aion käyttää% C ehkä ensimmäistä kertaa. Ja sitten haluan tulostaa jokaisen merkki on omalla rivillään. Joten aion laittaa pikku kenoviiva n siellä. Sulje lainaus. 

Ja nyt haluan tehdä jotain täällä. Haluan tulostaa erityinen kirje merkkijono, s, koska olen iteroidessaan nollasta jopa kuusi. Toisin sanoen haluan tulostaa i'th luonnetta s. Nyt miten voin tehdä tämän? 

Hyvin paljon, kuten laatikot tämä esitys täällä, sellainen, loihtia käsite nyrkkeily kirjaimet, voit samalla tehdä syntaktisesti C yksinkertaisesti määrittämällä, Haluan tulostaa s: n i'th luonnetta. Käyttämällä hakasulkeet tietokoneen näppäimistön että Yhdysvaltain näppäimistö ovat yleensä yli oman enteriä. 

Joten tämä ei ole aivan oikea vielä, kuten olet ehkä huomannut. Mutta aion sellaista sokeasti eteenpäin täällä. Ja aion tehdä tehdä merkkijono 0. Mutta ennen kuin teen tämän, katsotaanpa jos me voi ennakoida joitakin yleisiä virheitä. Tämä tulee kääntää? Ei, olen puuttuu koko joukko asioita. Kirjastot kuulin. 

Joten mikä header-tiedostot ehkä haluan lisätä täällä? Joo. 

Yleisö: Tarvitset vakio-I / O [kuulumaton] 

DAVID J. MALAN: Erinomainen. Joten minun on vakio-I / O. Mitä tarkoitus tehdä Haluan vakio I / O? Varten printf. Niin kuuluu stdio.h. Ja voit myös ehdottaa, että sisällytän CS50 kirjasto mistä syystä? On jouset. Niin näemme mitä CS50 kirjasto tekee luoda tätä käsitettä merkkijono. Mutta nyt, voit vain ajatella on se todellinen tietotyyppi. 

Niin että näyttää hieman siivottu. Ja nyt aion mennä eteenpäin ja todellakin tehdä tehdä merkkijono 0. Koottu. Niin se on hyvä. Joten ./string0 haluan zoomata niin voimme Katso tarkemmin mitä tapahtuu. Enter. Z--M-Y-L-enter. Ja olemme painettu ulos Zamyla nimi. 

Joten se on melko hyvä. Joten nyt mennään eteenpäin ja suorittaa tämän ohjelman uudelleen, ja kirjoittamiseen Daven täydellinen nimi. Yllätys, yllätys. Enter. Hmm. Emme ole painettu Daven n etunimien oikein. Nyt tämän pitäisi olla itsestään selvää Jälkeenpäin koska mitä, tavallaan, tyhmä suunnittelu päätös? 

Joo, olen kova koodattu kuusi sisällä minun silmukan. Nyt tein sen vain siksi, Tiesin Zamyla nimi piti olla kuusi kirjainta. Tämä ei kuitenkaan ole yleinen ratkaisu. Niin se kääntyy pois voimme dynaamisesti selvittää pituus merkkijonon kutsumalla toiminto nimeltään strlen. 

Jälleen tarkoituksella ytimekkäästi nimetty vain tehdä helpompaa kirjoittaa. Mutta se on synonyymi saada merkkijonon pituuden. Aion mennä takaisin minun terminaalin ikkuna ja uusinnassa kääntäjä. Mutta se huutaa minua. Epäsuorasti julistamisesta kirjaston funktion strlen tyypin unsigned int const-- Olen eksynyt. Kokonaan. 

Niin, varsinkin kun teidän silmät alkavat lasite yli häiriöilmoituksella näin, painopiste rehellisesti ensimmäiset sanat. Tiedämme, ongelma on linja 8, kuten täällä. Ja se on string-0.c. Epäsuorasti julistamisesta kirjaston funktion strlen. Niin että yleensä menee olla malli virheilmoituksia. Implisiittisesti julistaa jotain. 

Niin lyhyt, mitä olen näyttänyt ovat tehneet suhteessa linja 8, täällä. Mikä voisi olla ratkaisu olla jopa jos et ole koskaan käyttänyt strlen itse? 

Yleisö: Osa eri kirjastosta? DAVID J. MALAN: Part erilainen kirjaston. Joten se on julistettu, niin sanoakseni. Se mainitaan joitakin tiedostoon muut kuin stdio.h ja CS50.h. Nyt mihin se määritellään? Ollakseni rehellinen, sinulla on joko vain tietää tämän pois top of your head, tai voit googlettaa tätä ja selvittää. Tai tiedä tätä, olen avautunut CS50 laitet pääteohjelma, joka on vain iso, koko näytön versio mitä pohjassa gedit ikkunasta. 

Ja käy ilmi, että on olemassa Samoin ytimekäs komennon, kutsutaan mies manuaalista, jossa jos kirjoitat nimi toiminto ja paina Enter, saat takaisin melko mystistä asiakirjat. Se on vain teksti, että yleisesti näyttää vähän jotain tällaista. Se on vähän ylivoimainen ensi silmäyksellä. Mutta suoraan sanottuna aion anna silmäni lasittuvat ja vain keskittyä osa Välitän tällä hetkellä. 

Mikä on tämä. Joka näyttää rakenteellisesti kuin jotain olen perehtynyt. Itse man-sivun, niin puhua, kertoo mitä header-tiedosto toiminto kuten strlen on määritelty. Joten aion palata nyt gedit. Ja aion mennä eteenpäin ja lisätä tänne # include ja tallenna tiedosto. 

Aion tyhjentää näytön kanssa Ohjaus L Jos olet ihmetellyt. Ja aion ajaa uudelleen make string.0, kokoaa tällä kertaa. ./string.0 Zamyla. Että tuntui toimivan Päästä minut eteenpäin ja uusintana se Davenport. Enter. Ja sekin tuntui toimivan. 

Jotta voimme tehdä hieman parempi kuin tämä, kuitenkin, voimme alkaa siistiä asioita ylös vain vähän. Ja aion todellakin käyttöön yhden asian nyt. Aion mennä eteenpäin ja tallentaa eri tiedostomuodossa. Ja aion soittaa tämä tiedosto string1.c vain oltava sopusoinnussa koodi voit löytää verkossa. 

Ja lähdetään painopiste on täsmälleen sama koodi. On käynyt ilmi, että olen ollut sellainen ottaminen selvänä, että minun laptop, ja vuorostaan, CS50 laite on paljon muistia, on paljon RAM-muistia, paljon tavuja tilaa jossa voin tallentaa jouset. 

Mutta todellisuus jos olen kirjoittanut pitkään tarpeeksi, ja tarpeeksi näppäimistön, En voisi teoriassa tyyppi enemmän merkkejä kuin tietokone fyysisesti on muisti. Ja tämä on ongelmallista. Aivan kuten int voi vain laskea niin suuri, teoriassa, voit vain ahtaa niin monta merkkiä tietokoneen RAM tai Random Access Memory. 

Joten olin paremmin ennakoimaan tätä ongelmaa, vaikka kuin se onkin harvinainen nurkkaan tapauksessa niin sanotusti. Ei tapahdu kovin usein, voisi tapahtua. Ja jos se sattuu enkä ennakoida ja ohjelma sen, Oma ohjelma voisi tehdä ties mitä. Freeze, roikkua, reboot riippumatta. Jotain odotettavissa voi tapahtua. 

Joten mitä aion tehdä nyt tästä lähtien todella, on ennen kuin olin edes sokeasti käyttää muuttujaa kuten tuo on annettu palauttaa arvon muuna kuin getstring, Aion varmistaa että sen arvo on voimassa. Joten tiedän vain lukeneensa CS50 dokumentaatiosta getstring, joka lopulta me kohta sinua, että getstring palauttaa erikoissymboli nimeltään NULL, N-U-L-L kaikissa lippikset, jos jotain menee pieleen. 

Niin normaalisti se palauttaa merkkijonon. Mutta muuten jos se palaa N-U-L-minä-- me lopulta nähdä, mitä se todella means-- että vain keino jotain pahaa tapahtui. Nyt tämä tarkoittaa, aivan kuten Scratch, Voin tarkistaa kunto täällä C, Jos S ei ole yhtä NULL. Joten jos et ole nähnyt tätä ennen, tämä tarkoittaa vain ei ole sama. 

Joten se on vastakohta yhtä tasavertaisessa, joka muistuttaa, on erilainen kuin yhden vastaa, joka on tehtävä. Joten jos s ei ole sama NULL, vasta silloin Haluan toteuttaa nämä riviä koodia. Eli toisin sanoen, ennen kuin sukeltaa sokeasti ja aloittaa iteroimalla yli s, ja käsittelemällä sitä ikään kuin se on sekvenssi merkkiä, aion ensin tarkistaa, Hetkinen, ei ei ainakaan sama kuin tämä erityinen arvo, NULL? 

Koska jos se on, pahoja asioita voi tapahtua. Ja nyt olettaa, että pahoja asioita tapahtuu tarkoittaa ohjelma kaatuu, ja et voi välttämättä palauttaa. Niin rehellisesti, se näyttää rumempi. Se on tavallaan hämmentävää nyt vilkaista. Mutta tämä tulee enemmän tuttu ennen pitkää. 

Mutta aion ehdottaa nyt yksi muu parannus. Se parannus oikeellisuutta. Oma ohjelma on nyt oikeampi, koska harvoissa tapauksissa, että muisti ei riitä olemassa, aion käsitellä sitä, ja minä vain tee mitään. Minä ainakin ei kaadu. 

Mutta tehkäämme lopullinen versio täältä. Ja tiedosto nimeltä string2.c. Aion liittää että Sama koodi vain hetken, ja aion korostaa tätä linja, 11, täällä vain hetken. Nyt todellisuus on, että älykkäät kääntäjät kuten kalahtaa voisi korjata meille kulissien takana ilman meidän koskaan tietämättä. Mutta katsotaanpa miettiä tätä pohjimmiltaan niin ongelmallinen muotoilu. 

Tämä linja koodi on, tietenkin, sanomalla, alustaa joitakin muuttuja i 0. Se on melko yksinkertainen. Ja mikä taas on tämän lausuma, täällä, i ++, tekee? Olemme nähneet sen ennenkin, mutta me ei oikeastaan ​​puhua siitä. 

Yleisö: kasvattamalla i. 

DAVID J. MALAN: kasvamisen i. Joten jokaisen iteraation kautta Tämän silmukan, joka ajan, olet monesko i kerrallaan. Joten se saa isompi, ja isompi, ja isompi kunnes silmukka päättyy. Miten se päättyy? No on tämä keski- edellytys, jota olemme käyttäneet ennen. Olet nähnyt ja walkthroughs P asetettu. 

Mutta mikä on tämä sanonta? Tee seuraava lenkki, kauan kuin i on pienempi kuin mitä? Yleisö: pituus merkkijono. DAVID J. MALAN: merkkijonon pituus. Joten se kääntää ihan siististi ja Englanti siinä mielessä. Nyt ongelmana on, että joka kerta kun kerrata läpi tämän silmukan teoriassa, Kysyn tämän kysymyksen. On i alle merkkijonon pituus s? On i alle merkkijonon pituus s? 

Nyt on i vaihtua jokaisen iteraation? Se on. Koska ++. Joten jokainen iteraatio i on saada suurempi. Mutta on s saada isompi, tai pienempi, tai muuttamalla ollenkaan? Ei Joten kannalta suunnittelu, yksi akseleista jota pitkin yritämme arvioida koodi luokassa, tämä tuntuu typerää. 

Kuten olet kirjaimellisesti, jokaisen iteraation Tämän silmukan pyytää Sama hemmetin kysymys uudelleen, ja uudestaan, ja uudestaan, ja kirjaimellisesti se ei koskaan muutu. Ainakin jos En koske s ja yrittää muuttaa sisältöä s. Voin siis tehdä hieman parempi kuin tämä. 

Ja mitä aion tehdä, ei ole julistaa vain yksi muuttuja i, mutta toinen vaihteleva Tulen mielivaltaisesti, mutta perinteisesti, kutsuvat sitä n. Määritä n yhtä merkkijonon pituus s. Ja sitten tänne, aion tehdä ovela pikku optimointi, joten puhua, että lopussa päivä ei ole oikeampi tai yhtä oikeaa kuin ennen. Mutta se on parempi suunnittelu. Siinä, että käytän vähemmän aikaa, vähemmän suorittimen käytön, niin puhua, vastata samaan kysymys, mutta vain kerran. 

Kysyttävää että yleinen periaatteen parantaminen, sanoa, ohjelman tehokkuus? Joo? Yleisö: Miksi Käytä [äänetön]? DAVID J. MALAN: Hyvä kysymys. Joten miksi laittaa ++ päähän i sijasta alussa i? Tässä tapauksessa se on ole toiminnallista vaikutusta. Ja yleensä, minulla on tapana Käytä postfix operaattori niin että se on hieman selkeämpi kuin milloin toiminta tapahtuu. 

Niille tunne, on toinen lausuntoja jolloin voisit tehdä ++ i. Nämä ovat toiminnallisesti vastaa tässä tapauksessa koska ei ole mitään muuta noin, että kasvattaminen. Mutta voit keksiä tapaukset ja riviä koodia jossa joka tekee eron. Niin yleisesti, emme edes puhua tästä. Koska suoraan sanottuna, se tekee koodi seksikkäämpi, ja tavallaan sadetakki, ja vähemmän merkkejä. Mutta todellisuus on se on paljon vaikeampaa, Luulen, jopa minulle kääri mieleeni noin joskus, Jotta toiminnan. Niin syrjään, jos todellakaan pidä tästä, vaikka tämä on tavallaan seksikäs näköinen, voit myös tehdä i + = 1, joka on uglier versio Sama ajatus Postfixin kasvattaminen. 

Sanon tämän ja sinua pitäisi pilkata sitä, mutta tulet näkemään koodin jotain kaunista ennen pitkää. 

[Naurua] 

DAVID J. MALAN: Oikea? Joo. Kysymys keskellä. 

Yleisö: Tarvitsetko sanoa int n? DAVID J. MALAN: Teet ei tarvitse sanoa int n. Niin, koska olemme jo sanoneet int, sinun ei tarvitse sanoa sitä uudelleen. Saalis on, että n on olla samaa tietotyyppiä kuin minä. Niin, että vain mukavuussyistä täällä. Joo. 

Yleisö: Voitko mennä yli print merkki s kiinnike i uudelleen? DAVID J. MALAN: Ehdottomasti. Joten% c, muistaa viime aikaa, on vain paikanvaraajaan. Se tarkoittaa laittaa char täällä. kenoviivan n, tietenkin vain keino laittaa rivinvaihdon täällä. Niin että vain lehdet, nyt tämä pala uuden syntaksin. Ja tämä on kirjaimellisesti sanoen, napata merkkijono kutsutaan s ja hae sen i'th hahmo, niin sanoakseni. 

Ja pidän sanomalla i'th merkki koska jokaisella iteraation tämän silmukan se on ikään kuin olemme tulostus ensinnäkin s kiinnike 0, ohjelmoijana voisi sanoa. Niin S kiinnike 1, sitten s kiinnike 2, sitten 3, sitten 4. Mutta tietenkin se muuttuja, joten olen vain ilmaista sen i. 

Avain on kuitenkin ymmärtää, varsinkin jos et ole on acclimating tähän maailmaan ohjelmoinnin, jossa me kaikki näyttävät laskea nollasta, täytyy alkaa laskea nollasta nyt. Koska jouset, ensimmäinen merkki, z Zamyla on parempi tai huonompi aio elää paikassa numero nolla. 

Okei, joten haluan tuoda meidät takaisin tänne Zamyla ja nähdä mitä todella tapahtuu on alla huppu. Joten ei tämä käsite tyypin valu. Saatat olla todella pelataan tämän jo, ehkä hakkeri painos P asetettu. Mutta tyyppi valu vain viittaa kyky C ja joillakin muilla kielillä muuntaa yksi tieto tyypistä toiseen. 

Nyt kuinka me saatamme nähdä tämän melko suoraviivaisesti? Joten tämä, muistaa, on alku ja Englanti aakkoset. Ja yhteydessä muistaa, alkaen kuin viikko sitten on ASCII. American Standard Code for Information Interchange. Joka on vain todella pitkä matka sanoa kartoitus kirjaimia numeroihin, ja numeroita kirjaimia. 

Joten M kautta täällä, dot dot dot, on linjassa, muistaa, desimaaliluku 65 ylös. Ja emme puhu tästä nimenomaisesti, mutta varmasti siellä on samanlainen numerot pieniä kirjaimia. Ja todellakin, on olemassa. Maailman päätti joitakin vuosia sitten se pieni, pieniä kirjaimia, tulee olemaan 97. Ja pikku b on menossa on 98, ja niin edelleen. 

Ja muihin näppäintä näppäimistön, siellä olemaan samanlainen kuvio bittejä. Tai vastaavasti, desimaaliluku. Joten kysymys käsillä, onkin, kuinka voimme itse nähdä tämän alla huppu? Joten aion siirtyä gedit uudelleen. Ja sen sijaan tyyppi tämä tyhjästä, Aion mennä eteenpäin ja vain avata jotain nykypäivän koodia kutsutaan ASCII nolla. 

Ja ASCII nolla näyttää tältä. Joten kääri mielemme ympärille. Joten ensimmäinen, olen kommentoinut koodia, mikä on mukavaa. Koska se on kirjaimellisesti kertoi minulle mitä odottaa, Näytä kartoitusta isoja kirjaimia. Nyt en oikein tiedä, mitä minä tarkoitat, joten katsotaanpa päätellä. 

Englanti, ehkä hieman techie Englanti, mitä linjaa 18 näkyvät tekevän meille? Vain linja 18. Mitä se asiakkuutta? Mitä se tulee potkia pois täältä? 

Yleisö: silmukka. 

DAVID J. MALAN: silmukka. Ja kuinka monta kertaa on että menossa kerrata? Yleisö: [väliin ÄÄNTÄ] kuusi kertaa. DAVID J. MALAN: Ei kuusi kertaa. Yleisö: 26 kertaa. DAVID J. MALAN: 26 kertaa. Joo, anteeksi. 26 kertaa. Miksi? No, se on vähän outo, mutta Olen alkanut laskien 65. Joka on outo, mutta ei väärässä. Se ei ole paha per sanoa. Ja olen tekemässä, että vain koska tässä esimerkissä, Olen sellainen ennakointi että pääoma oli 65. Nyt tämä ei ole kaikkein tyylikäs tapa tehdä tämä, on aika vaikeaa koodi esoteerinen arvot että kukaan ei koskaan odottaa muistaa. 

Mutta nyt huomaan, että olen Näin läpi 65 plus 26. Koska ilmeisesti en edes halua tehdä aritmeettinen päähäni. Joten annan kääntäjä tehdä se. Mutta sitten jokaiseen kaareen, jokaisen iteraation silmukan, olen kasvattamalla i. 

Joten nyt tämä näyttää hieman arvoituksellinen. Mutta meillä pitäisi olla perustiedot rakennuksen lohkoja, jotka auttavat ymmärtämään tätä. % C on vain paikanpitäjä merkkiä. % I on tilavaraus int. Ja käy ilmi, että käyttämällä tätä uusi syntaksi, tämä sulkeissa olevan, joten puhua, joten tietotyyppi sisällä suluissa, Voin pakottaa kääntäjä hoitoon En ole on kokonaisluku, vaan merkkiä. 

Mikä osoittaa minulle merkki vastaava tuosta määrästä. Nyt tänne, tämä koodi on melko samanlainen. Halusin vain tehdä Super nimenomainen seikka että olen alkanut klo 97, joka on pieniksi. Jopa läpi 26 enemmän kirjaimia. Ja olen doing-- uudelleen, valu i, niin sanoakseni. Tai tyyppi valu i, niin sanoakseni. 

Alkaen int char. Niin lopputulos tulee olemaan, rehellisesti, tietoja me jo tiedämme. Aion tehdä ASCII-0 dot-- ei piste c. Varoitusajalla, luultavasti tehnyt, että virhettä kuin tein vahingossa. Tee ascii-0. Nyt aion tehdä ./ascii-0. Minä lähentää, ja valitettavasti se tulee vierittää pois ruudulta. Mutta me näemme koko kaavio, jossa karttoja 97, b kartat 98, ja jos me siirry entisestään Tietenkin, kartat 65. Joten tämä on vain sanoa, että mitä olemme saarnanneet, on tämä vastaavuus, itse asiassa todellisuudessa. Niin nopeasti tapahtuvat muutokset. Saanen avata ascii-1.c. Ja huomaa tämä fiksu, lajitella ja selventäminen tämän. Tämä on ascii-1.c, ja huomata tämän hullu juttu. 

Ja tämä todella pääsee sydämeen mitä tietokoneet ovat tekemässä. Vaikka me ihmiset olisi ei lasketa kannalta letters-- En alkaa miettiä, okei sitten b, ja käyttää niitä laskea fyysisiä esineitä. Voit varmasti sanoa, että haluan alustaa joitakin muuttuja nimeltään C-- mutta en voinut soittaa tätä mitään-- joten c alustetaan pääoman A. 

Koska lopussa päivän, tietokone ei välitä mitä olet tallentamiseen, se vain välitä miten haluat esittää, että tietoja. Miten haluat tietokoneen tulkita, että malli bittiä? Joten tämä ei ole jotain olisi yleisesti suosittelen tekemään. Se on oikeastaan ​​vain esimerkki välittää että voit aivan alustaa kokonaisluvun merkkiä. Koska alla huppu, nieriä, tietenkin, on vain numero 0-255. 

Joten voit varmasti laita se sisällä int. Ja mitä tämä myös osoittaa, että meidän voi muuntaa yhdestä tyypistä toiseen, täällä, lopulta tulostus sama asia. Ja itse asiassa tämä aion korjata online-- oli tarkoitus sanoa jälleen täällä. Saanen puhdista ylös verkossa, ja me nähdä verkossa läpikäynti tarpeen, mitä oli tarkoitus siellä. 

OK. Joten viimeinen esimerkki nyt mukana n ja b: n ja sitten me ottaa asioita lovi. Joten: n ja b: n ja c: n arvo ja vastaavuutta sen, katsotaanpa katsomaan tätä esimerkkiä, täällä. Toinen koodi esimerkki. Avaamme yksi, joka on jo tehty, joten ei tarvitse kirjoittaa sitä kaikki ulos tyhjästä. 

Ja huomaa ennakoiden Käytämme useita header tiedostoja, joista on uusi ystävämme, string.h. Nyt tämä näyttää ensi silmäyksellä, hieman arvoituksellinen. Mutta katsotaan jos emme voi järkeillä kautta, mitä täällä tapahtuu. Ensin saan merkkijonon käyttäjä, ja laitoin että merkkijonon muuttujaan nimeltään s. Kopioi liitä entuudestaan. Linjassa 22, olen ilmeisesti tekee mitä Tein hetki sitten, olen iteroidessaan yli merkkiä s. 

Ja uusia temppuja tässä käytät merkkijonon pituus, pienet optimointi tallentamiseksi merkkijonon pituus n, eivätkä käyttäisi strlen uudelleen, ja uudestaan, ja uudestaan. Ja vain tarkistaa, että i on pienempi kuin n. Nyt täällä, asiat saavat hieman mielenkiintoinen. Mutta se on vain sovellus Tämän saman uuden idean. Mitä Englanti tekee s kiinnike edustan? 

Yleisö: Counting jokaisen merkki [äänetön]. 

DAVID J. MALAN: Counting kunkin merkin. Ja vielä enemmän ytimekkäästi, s kiinnike Edustan mitä? Voisitko sanoa. Ei laittaa sinut paikan päällä täällä. 

Yleisö: ja-- DAVID J. MALAN: Eli jos sana on-- jos merkkijono on Zamyla, joka starts-- Yleisö: --you käsitellä merkkiä separately-- DAVID J. MALAN: Hyvä. Täsmälleen. Hakasulkeen merkintätapa mahdollistaa käyttää kunkin merkin erikseen, niin s kiinnike 0 tulee olemaan ensimmäinen merkki merkkijonon. s kiinnike 1 tulee olemaan toinen, ja niin edelleen. Joten kysymys kysyn, täällä, tässä kunnossa on, mitä? On i'th luonnetta suuremmasta kuin tai yhtä pieniksi? Ja mitä tämä tarkoittaa, täällä, kanssa kaksinkertainen-merkkejä? YLEISÖ (yhdessä): Ja. DAVID J. MALAN: Ja. Se on vain vastaavan tätä. Ja ei ole avainsana C, joudut käyttöä, ärsyttävän, et-et-merkki. Ja tämä, päinvastoin, kysyy on s: n i'th luonnetta pienempi tai yhtä suuri kuin pieniksi z? Ja vielä, tässä tarina ymmärtää niiden taustalla olevia täytäntöönpano tietokone järkevää. Huomaa, että vaikka minulla on dot dot dot tuolla, näyttää Z pienillä kirjaimilla on kaikki peräkkäisiä arvoja ylös 97 ylös. 

Ja sama isoja alkaen 65. Niin nouto, sitten on, että Englanti, Miten kuvailisit mikä linja 24 tekee? Joo? 

Yleisö: 24 se tarkistaa, onko jokainen merkki on pieniä. DAVID J. MALAN: Se tarkistaa, onko jokainen merkki on pieni kirjain. Joten vieläkin ytimekkäästi, on i'th luonne s pieniä? Siinä kaikki olemme ilmentävät tässä loogisesti, hieman arvoituksellisesti, mutta lopulta melko mutkattomasti. On s: n i'th hahmo pieniä? 

Jos näin on, ja täällä on, jos asiat saada hieman mielen taivutus vain hetken, jos niin, mene eteenpäin ja tulostaa merkki. Joten tämä on vain paikanvaraajassa mutta mitä merkki? Miksi minä teen s kiinnike i miinus tämä ilmaus täällä? 

Hyvin huomaa kuvio täällä. Todelliset luvut eivät ole väliä niin paljon. Mutta huomaa, että 97 on kuinka kaukana 65? 

Yleisö: 32. 

DAVID J. MALAN: 32. Kuinka kaukana on 98 66? 

Yleisö: 32. 

DAVID J. MALAN: Pikku C isoista C? 32. Joten siellä on 32 humalan yhden kirjaimen toiseen. Joten suoraan sanottuna, voisi yksinkertaistamiseksi tähän. Mutta sitten olen sellainen kova koodaus tämä alhainen käsitys että ei lukija ei koskaan menossa ymmärtää. Joten aion yleistää sitä, minä tietää pienet kirjaimet ovat isompia. Tiedän isot kirjaimet ovat pienempiä arvoja, ironisesti. 

Mutta tämä on käytännössä vastaa sanoen vähentää 32 S kiinnike i. Joten näissä yhteyksissä kirjeet, jos kirje sattuu olemaan, pieniä , ja minä vähentää 32, Millaisia ​​vaikutuksia, jotka ovat, matemaattisesti, on pieniksi? Yleisö: Capitalizes-- DAVID J. MALAN: isoksi sitä. Ja todellakin, siksi meidän Ohjelmaa kutsutaan hyödyntää nolla. Tämä ohjelma joko aktivoi kirjeen, tarkastuksen jälkeen, jos se on todellakin pieni kirjain. Muuten linjassa 30, mitä teen, jos se ei ole pieni kirjain, että olen tarkastellaan tietyllä iterointia silmukan. Vain tulostaa sen. 

Joten älä muuta tavaraa että ei ole edes pieniä. Rajoita itse pikku läpi hieman z. Nyt tämä on melko vaikeaselkoisia. Mutta lopussa päivä, tämä Näin me, Olipa kerran, täytyi panna asioita. Jos minä sen sijaan avata isolla yksi, oi kiitos jumala. Ei toimintoa kutsuttu ylempi joka voi teemme kaiken juuri teki melko alhaisella tasolla. 

Nyt ylempi on mielenkiintoinen koska se on ilmoitettu tiedoston, ja te vain tiedä tätä tarkistamalla asiakirjat, tai sanotaan vaikkapa luokassa, jossa se on olemassa, on tiedosto nimeltä ctype.h. Joten tämä on uusi ystävämme. Ja ylempi tekee juuri kuin nimensä. 

Voit kulkea, koska väite, välillä Näiden sulkuja, jokin merkki. Aion kulkea i'th merkki S käyttämällä fancy uusi merkintätapa joihin hakasuluissa. Ja yrittää arvata, mikä on paluu arvo ylempään ilmeisesti menossa olla? Isolla kirjaimella. Isolla kirjaimella. 

Jos siis kulkea pienillä kirjaimilla, toivon mukaan määritelmä ylempään, se tulee palauttaa isoja A. Muussa tapauksessa jos se ei ole pieni kirjain vuonna Ensinnäkin, olen vain tulostaa sen. Ja todellakin, huomaa Toinen ystävä täällä. Ei vain ylemmän olemassa, mutta on alhaisempi, mikä todella vastaa tähän kysymykseen minulle. 

Nyt jokainen, joka kirjoitti näistä asioista, 10s vuotta sitten, tiedätkö mitä? Toteutetaan ylempi ja on Laske koodilla näin. Mutta jälleen, sopusoinnussa tämä ajatus abstracting pois, tavallaan, alemman tason toteutuksen yksityiskohdat. Ja seisoo hartiat ihmisiä jotka tulivat ennen meitä, funktioiden kuten ylempään ja alempaan, joka Ihanan tarpeeksi ovat kauniisti nimeltään sanoa, mitä he tekevät, on ihana paradigman hyväksyä. 

Nyt on käynyt ilmi, että jos luen man-sivulta, sanovat, ylempi, Opin jotain muuta. Niin mies toupper. Se on vähän ylivoimainen. Mutta ilmoitus, tässä on, että maininta header-tiedosto, että minun pitäisi käyttää. Sivuhuomautuksena, koska tämä on harhaanjohtava, toiminto käyttää ints sijasta merkkiä syistä virheentarkistus. Mutta me ehkä tulla takaisin, että tulevaisuudessa. 

Mutta huomaa, täällä, ylemmän käännynnäisiä C-kirjaimen isoksi, jos mahdollista. Joten se on melko yksinkertainen. Ja nyt olkaamme hieman tarkempi. Katsotaanpa osa man sivun alle tuottoarvo. Palauttama arvo on, että muunnetun kirjeen. Tai c, jos muuntaminen ei ollut mahdollista, jossa c on alkuperäinen panos. Jonka tiedän täältä, argumentti ylempään. 

Niin mikä on takeaway tämän? Palauttama arvo on, että muunnetun kirjeen, tai c, alkuperäinen kirje, jos muuntaminen ei ollut mahdollista. Mitä parannuksia voin siis tehdä minun koodi suunnittelussa? Joo? 

Yleisö: Voit poistaa muuten. DAVID J. MALAN: voin poista muu selvitys, eikä vain muu selvitys. 

Yleisö: Voit poistaa [kuultavissa]. 

DAVID J. MALAN: voin poistaa koko haarukka tien, jos aivan muuta. Joten todellakin, haluaisin avata lopullinen versio, hyödyntää-2 ja huomaat kuinka, jos te, seksikäs, koodi on nyt tulossa, että olen vähentänyt joidenkin seitsemän tai niin riviä vain neljä, toiminnallisuus että aioin yksinkertaisesti soittamalla ylemmälle, ohimennen s kiinnike i, ja tulostus ulos, jossa paikanvaraaja% c, että erityistä luonnetta. 

Nyt luultavasti, on bugi, tai ainakin riski bugi, tässä ohjelmassa. Niin vain tulla takaisin aiempaan takeaway, mitä minun pitäisi varmaan myös tehdä Tämän ohjelman, jotta se olisi vahva, niin että ei ole mitään tapaa se voi kaatua, vaikka harvoissa tapauksissa? Yleisö: Varmista, että se ei ole NULL. DAVID J. MALAN: Varmista, että se ei ole NULL. Siis todella, jotta tämä super oikea, minun pitäisi tehdä jotain, Jos S ei ole nolla, niin mennä eteenpäin ja toteuttaa nämä riviä koodia, joka Voin sitten luetelmakohdassa sellaista, ja sitten laittaa minun lähellä ahdin. Niin hyvä sitominen yhteen kaksi ideaa. Joo? Yleisö: Voisitko käyttää do while-silmukka, sen sijaan? DAVID J. MALAN: Voisivatko En tehdä, kun silmukka? Yleisö: --you haluat varmistaa että olet itse [kuultavissa]. DAVID J. MALAN: Voisivatko käytät tehdä, kun? Lyhyt vastaus, ei. Koska olet aikeissa käyttöön toiseen nurkkaan tapauksessa. Jos merkkijono on nolla pituus. Jos esimerkiksi minä vain osuma Anna ilman koskaan kirjoittamalla Zamyla. Aion käden takaisin todellinen merkkijono, kuten me lopulta nähdä, että on nolla merkkiä. Se on edelleen merkkijono, se on vain erittäin lyhyt. Mutta jos käytät tehdä, kun, aiot sokeasti yrittää tehdä jotain kyseisestä merkkijono, ja mitään tulee olemaan siellä. 

Yleisö: No, jos et tehdä [äänetön] kun S-- DAVID J. MALAN: Oi katso, pitää saada merkkijonon käyttäjältä. Joten lyhyt vastaus, te voi, ja pitää kiusanneet heitä antamaan sinulle merkkijono, joka on lyhyt, että se mahtuu muistiin. Ehdottomasti. En vain ole halunnut. Jos he eivät anna minulle merkkijono I haluavat, olen lopettamista, olen luopumassa. Mutta ehdottomasti, tätä tarkoitusta varten, voisit ehdottomasti tehdä. 

Joten kirjaston header tiedostot olemme nyt tuttuja ovat nämä, täällä. Vakio I / O, CS50.h, string.h, ctype.h, ja on todellakin toiset. Jotkut teistä ovat huomanneet matematiikka kirjasto math.h. Mutta haluan esitellä teille nyt, Tämän resurssin että CS50 henkilöstö, Davin, ja Rob, ja Gabe erityisesti koonneet. Että pian linkkiä Kurssin kotisivulla. Sitä kutsutaan CS50 viite. 

Joka vain antaa sinulle nopean mausta, toimii seuraavasti. Anna minun mennä reference.cs50.net. Näet vasemmalla puolella ylivoimainen lista toimintoja, jotka tulevat c. Mutta jos välitän, että tällä hetkellä noin jotain strlen, Voin kirjoittaa sen sinne. Se suodattaa listaa alaspäin vain mitä minä välitän. Aion klikkaa sitä. Ja nyt vasemmalla, näet mitä toivomme on suoraviivaisempi, ihmisen ystävällinen selvitys siitä, miten tämä toiminto toimii. 

Palauttaa merkkijonon pituuden. Tässä on synopsis, näin poistat käyttää sitä suhteen header-tiedosto, ja siitä, mitä funktion näyttää suhteen sen perustelut. Ja sitten täällä, palaa merkkijonon pituuden. Mutta ne teistä mukavampaa, voit itse valitse lisää mukavia, ja sisältö sivu, nyt muuttuu olla oletusarvot mitä saat käyttämällä man-sivulta. 

Toisin sanoen, CS50 viittaus on yksinkertaistaminen Ihmisen sivuja henkilökunnan, opiskelijoiden. Erityisesti nämä vähemmän mukavat ja siltä väliltä, ​​niin että te ei tarvitse yrittää paketoida mieltäsi ympärille, rehellisesti, jotkut melko arvoituksellinen syntaksin ja dokumentointi joskus. 

Niin pitää tämä mielessä vuonna lähipäivinä. Joten tässä taas on Zamyla. Katsotaanpa nyt esittää kysymyksen, joka on hieman enemmän ihmisten saataville. Kiitos Chang, joka on ollut tulostus enemmän norsuja tauotta viime päivinä. Meillä on mahdollisuus antaa ainakin yksi niistä pois. Jos voisimme saada vain yksi vapaaehtoinen tulla jopa piirtää ruudulle. Entä täällä? 

Tule ylös. Mikä on nimesi? ALEX: Alex. DAVID J. MALAN: Alex. Kunnossa. Alex, tule ylös. Olemme tulleet sinun käsialan ruudulla täällä. Okei, kiva tavata. 

ALEX: Nice tapaat. 

DAVID J. MALAN: Okei. Niin, super yksinkertainen käyttää. Baari ei ole korkea saada norsu tänään. Pelaat rooli getstring. Ja aion vain kertoa merkkijono, joka olet saanut. Ja olettaa, että te, getstring, on kutsuttu. Ja ihminen, kuten minä, on kirjoitettu Zamyla, Z-A-M-Y-L-. Vain mennä eteenpäin ja kirjoittaa Zamyla päälle näyttö ikään kuin olet saanut sen ja varastoi sen jonnekin muistiin. 

Jättävät tilaa mitä tulee useita muut words-- se on OK, jatkakaa. 

[Naurua] 

Niin Zamyla, Excellent. Joten nyt olettaa, että te, getstring, kutsutaan uudelleen. Ja siksi annan sinulle, milloin näppäimistö, toisella nimellä, Belinda. Kunnossa. Ja nyt seuraavan kerran getstring on nimeltään, kirjoitan jotain Gabe, G-A-B-E-. Olet todella ottaen sydämeen työmuistiin. Joka vetää kaiken täysin satunnaisesti. OK. 

[Naurua] ALEX: Anteeksi minun käsiala on huono. DAVID J. MALAN: Ei, se on OK. Ja miten Rob, R-O-B. OK. Hyvä. Joten en ennakoida voisitte Tällainen lay asioita tällä tavalla. Mutta voimme tehdä tätä työtä. Joten miten voit mennä noin muuttamisesta nämä merkkiä muistiin? Toisin sanoen, jos ajattelemme Tämän suorakulmainen musta ruutu edustavan tietokoneen RAM tai muistia. 

Ja muistuttaa, että RAM on vain koko joukko tavuja, ja tavut ovat koko joukko bittejä. Ja bitit ovat jotenkin toteutetaan yleensä jonkinlaiseen Sähkön laitteisto. Niin, että tavallaan kerrospukeutuminen olemme puhuneet ja voivat nyt ottaa itsestäänselvyytenä. Miten te sitten päättää mistä kirjoittaa Rob vs. Gabe vastaan Belinda vs. Zamyla? 

ALEX: Tein sen määrätä, että kerroit minulle. 

DAVID J. MALAN: Ja se on totta. Mutta mitä sovelletaan mihin on Belinda nimi ja Gabe nimi? 

ALEX: Ei mitään? DAVID J. MALAN: [LAUGHS] Niin että toimii, se käy hyvin. Joten tietokoneet ovat hieman hallitumpi kuin. Ja niin kun me implement-- siellä vain moment-- kun me itse toteuttaa jotain getstring tietokoneessa, Zamyla voidaan säädettyihin melko paljon kuten teit ruudulla, siellä. 

Ja mikä on avain huomata täällä, mitä Alex teki, on olemassa sellainen rajanveto Kummassakin näistä sanoista, eikö? Et kirjoittanut Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- Toisin sanoen, on olemassa jonkinlainen rajaamisongelmiin joka näyttää olevan, tavallaan, satunnainen väli näiden eri sanoja. Mutta se on hyvä, koska me ihmiset voivat nyt visualisoida, että nämä ovat neljä eri jouset. Se ei ole vain yksi jakso erien merkkiä. Niin tietokone, sitten puolestaan saattaa kestää merkkijono kuten Zamyla, laittaa jokainen näistä kirjeistä sisällä tavun muistia. Mutta että määrä on paljon suurempi, tietenkin, kuin kuusi merkkiä. 

On koko joukko muistia. Ja niin vastedes, tämä ruudukko laatikot on menossa edustamaan mitä Alex vain ei täällä ruudulla. Ja nyt, Alex, voimme tarjota sinulle sininen tai oranssi norsu Chang. ALEX: Otan sininen elefantti. DAVID J. MALAN: sininen elefantti. Joten aplodit, jos voisimme, Alex täällä. 

[APPLAUSE] 

ALEX: Kiitos. DAVID J. MALAN: Kiitos. Joten nouto on se, että, vaikka kuvio tavallaan muuttunut ajan myötä, tänne taululle, oli tämä rajaaminen keskuudessa eri jouset Alex sai meille. Nyt tietokoneet, rehellisesti, voisi tehdä saman. Ne voisivat sellainen plop jouset kaikkialla RAM. Täällä, täällä, täällä, täällä. 

He voisivat tehdä juuri näin. Mutta tietenkin, että on ehkä ole paras suunnittelua. Oikea? Jos Kyselin Alex saada nimiä, luultavasti hän osaisimme laittaa lisää tänne, ehkä jopa täällä, täällä, täällä, lopulta tänne. Mutta hieman suunnittelua, varmasti, voisimme antaa asioita puhtaammin. Ja todellakin, se mitä tietokone tekee. 

Mutta saalis on, että jos seuraava merkkijono saan jälkeen Zamyla on jotain kuten Belinda, ehdottaa missä voisimme kirjoittaa kirje b suhteessa tähän verkkoon? Minne menisit? Oikealle, Alla z, alla? Mikä olisi ensimmäinen vaistot olla? Yleisö: Alla z. DAVID J. MALAN: Eli alle z. Ja se on aika yksinkertaista, eikö? Se on tavallaan siisti, se mitä me teemme näppäimistön kun Enter, tai sähköpostitse tehtäessä luettelomerkeillä asioita. Mutta tosiasia on, että tietokoneet yrittää olla tehokkaampia, ja ahtaa varmasti niin paljon data RAM kuin mahdollista, niin, että et tuhlaa tavua. Jotta et tuhlaa kaikki näytön kiinteistöjä. Ja ongelma on kuitenkin se, että jos me kirjaimellisesti laittaa kirjeen b jälkeen, miten aiomme tietää, missä Zamyla nimi päättyy ja Belinda nimi alkaa? Joten te ihmiset vain ehdotti, hyvin, osuma Enter-näppäintä, lähinnä. Laita se alas alla. Tai jopa Alex teki, vain aloittaa kirjoittamisen Seuraavan nimi alle edellisen, ja alle yksi, ja sitten alle yhden. Se on visuaalinen vihje. 

Tietokoneissa on toinen visuaalisen, mutta se on hieman suppea. Se on tämä funky hahmo. Kenoviiva 0, joka on ehkä muistuttaa kenoviiva n, ja niin edelleen, nyt. Erityinen ohjausmerkkijonoja. Kenoviiva 0 on tapa eli kahdeksan nolla bittiä peräkkäin. 0000 0000. 

Miten ilmaista, että ei ole osuma numero nolla näppäimistöllä, koska itse asiassa se on ASCII-merkkiä. Se näyttää numeron, mutta on todella desimaaliluku joka edustaa pyöreä kuvion, pyöreä kirjasintyyppi. Samaan aikaan, kenoviiva nolla tarkoittaa, kirjaimellisesti laittaa kahdeksan nolla tavua täällä minulle. 

Joten tämä on jossain määrin mielivaltainen. Olisimme voineet käyttää mitä tahansa mallia bittejä, mutta maailma päätti joitakin vuosia sitten, että edustamaan loppuun merkkijonon muistiin, vain laittaa koko joukko nollia. Koska voimme havaita, että. Nyt se tarkoittaa, että ei ole kirjain aakkoset voidaan esittää nollilla. 

Mutta se on OK, olemme jo nähneet että käytämme 65 jopa 97 ylös. Emme pääse mihinkään lähes kaikki nollia. Joten Belinda tietokoneen muistiin on todella menossa täällä. Olen laatinut sen keltaisella vain kiinnittää huomiomme siihen. Ja varoitusajalla, tämä on täysin mielivaltaista. Olen laatinut sen verkkoon. Like, RAM on vain joitakin fyysinen esine. Se ei välttämättä ole rivejä ja sarakkeita, sinänsä. Se on juuri koko joukko tavua toteuttaa laitteistolla jotenkin. Mutta jos sen jälkeen Belinda I kirjoitit Gabe nimi, hän aikoo päätyä tänne muistiin, ja jos olen kirjoittanut Daven nimi, Esimerkiksi hän aikoo päätyä tänne. Ja voin jatkaa kirjoittaa vielä enemmän nimiä. 

Valitettavasti, jos yritän kirjoittaa erittäin pitkä nimi, Saatan lopulta loppuu muisti. Jolloin, getstring on aio palata NULL, kuten sanoimme. Mutta onneksi, ainakin tällä visuaalinen täällä, emme saaneet ihan niin pitkälle. 

Nyt mitä mukavaa on, että tämä yleinen ajatus hoitoon asioita olevan laatikoissa on tyypillinen piirre C ja paljon kieliä, tunnetaan joukko. Array on toinen tiedon. Se on tietorakenne, jos haluatte. Rakenne siinä mielessä se todella, sellainen, näköisenä laatikko, ainakin sielusi silmin. Asetelma on yhtenäinen sarjasta keskenään samanlaisia ​​tietotyyppejä, takaisin takaisin takaisin takaisin. 

Joten merkkijono, toisin Eli on joukko merkkiä. Joukko merkkiä. Mutta se osoittautuu voit olla paneelit rypäleterttuja asioita. Itse asiassa, voimme laittaa jopa numerot jono. Joten muodossa, jossa aiomme aloittaa julistaa tämän datan rakenne tunnetaan array aikoo myös käyttää hakasulkeissa. Mutta nämä hakasuluissa ovat menossa on eri merkitys tässä yhteydessä. 

Ja katsotaanpa sitä seuraavasti. Oletetaan, että olen avannut uuden tiedoston täältä. Ja minä tallentaa tämän ages.c. Ja minä tallentaa tämän minun kansioon täällä. Ja nyt aion mennä eteenpäin ja kirjoittamalla jotain kuten muun muassa CS50.h, kuuluvat stdio.h, int main mitätön. Ja sitten sisällä täältä, haluan ensin on int nimeltään ikä. 

Ja aion käyttää sitä saada int käyttäjän hänen ikänsä. Mutta tämä ohjelma on tarkoitus käyttää useita ihmisiä, jostain yhteydessä. Minulla rivi ihmisiä. Kaikki ne täytyy kirjoittaa niiden ikä ehkä jotkut, en tiedä, kilpailun tai tapahtuman että he ovat saapuneet. Joten seuraava henkilö, minä Tarvitsen toisen muuttujan. 

Koska jos en vain ikä saa getInt, joka on menossa hakata, tai korvata Edellisen henkilön ikä. Joten se ei ole hyvä. Joten minun ensimmäinen vaisto saattaa olla, oh, okei, jos haluan saada useita ihmisten ages-- kutsukaamme tätä age1, int age2 saa int, int iästä lähtien3 saa getInt. Ja nyt aion käyttää Joissakin pseudokoodilla koodi tähän. 

Tehdä jotain ne numerot. Lähdemme toiseen kertaan mitä teemme siellä, koska me vain hoitaa tällä hetkellä noin age1, age2, iästä lähtien3. Valitettavasti, kun olen kääntää tämän ohjelman ja laita se eteen todellisten käyttäjien, mitä pohjimmiltaan huono suunnittelu Päätös Olen ilmeisesti tehnyt? Joo? Yleisö: [kuulumaton] DAVID J. MALAN: Joo, En ole edes kokeillut selvittää, kuinka monta ikäisille voin oikeastaan ​​välitä? Jos minulla on vähemmän kuin kolme ihmistä täällä, ja siis vähemmän kuin kolme ikäisille, Olen edelleen sokeasti odottaa kolme. Jumala varjelkoon neljä ihmisiä paikalle. Oma ohjelma vain ei edes tue niitä. 

Ja niin tämä, pitkä tarina lyhyt, ei ole hyvä tapa. Oikea? Olin lähinnä kopiointi ja liittämällä koodin ja vain säätämistä muuttujien nimet. Ja luoja, jos sinulla oli, ei kolme ikäisille, mutta 10 tai 100, tai jopa 6500 opiskelijoista, esimerkiksi. Tämä ei tule olemaan erityisen tyylikäs koodia, tai kestävä. Olet menossa tarvitse kirjoittaa ohjelma joka kerta teidän ihmisten määrä muutoksia. 

Niin onneksi meidän todellinen ages.c tiedoston tänään, meillä on viisaampi ratkaisu. Ensiksi aion lainata rakentaa olemme käyttäneet muutaman kerran, Tämän do while-silmukka, saadakseen ihmisten määrä huoneeseen. Olen juuri menossa kiusata käyttäjälle, jälleen ja uudelleen, kunnes hän antaa minulle n: n arvo, joka on positiivinen kokonaisluku. 

Olisin voinut käyttää, viimeksi Aika saada myönteisiä int. Mutta meillä ei ole, että oikeasti, joten menin eteenpäin ja uudelleen toteuttaa tätä ajatusta. Nyt tänne, tämä on uusi temppu. Linjassa 27, koska kommentit linjassa 26 ehdottaa, julistaa array, jossa tallentaa kaikkien ikä. 

Joten jos haluat saada, ei yksi int, ei kaksi ints, mutta koko joukko ints. Tarkemmin n kokonaislukuja, olivat n pitää kolme, ehkä 100, ehkä 1000. Syntaksin, yksinkertaisesti, on sanoa, mitä tietotyyppiä haluat? Mitä haluat soittaa että kimpale muistia? Mitä haluat soittaa verkkoon joka näyttää tältä kuvallisesti? 

Ja suluissa täällä, te sanotte kuinka iso haluat array olla. Ja niin aiemmin, kun sanoin syntaksi on hieman erilainen täällä, olemme yhä hakasulkuja, mutta kun olen julistetaan array, numero sisällä hakasuluissa välineet kuinka iso haluat array olla. 

Sitä vastoin, kun käytimme s kiinnike i hetki sitten, s, merkkijono, on todellakin joukko merkkiä, mutta kun et julistaa muuttuja, koska tällä avainsanalla täällä, olet yksinkertaisesti saada indeksi, erityinen elementti, että jono. Kun tiedämme, että loput Tämän on yksinkertaista. Jos uusi olen ensin menossa tulostaa mitä ikä henkilön numero i. Missä voin sanoa henkilön numero yksi, henkilö numero kaksi, henkilö numero kolme. 

Ja minä teen vain aritmeettinen, joten kuten tavalliset ihmiset, laskemme yhden tämän ohjelma, eikä nollasta. Soitan getint, mutta en säilytä Vastaus aikoihin haarukoida i. Joka on i'th ikä jono. Joten kun viime kerran lähdimme hoitoon Näiden laatikoiden merkkiä varten Zamyla nimi, ja muut. Nyt nämä laatikot edustavat 32 bittiä, tai neljä tavua jossa voimme varastoida int, int, int. Jotka kaikki, jälleen, ovat samaa tietotyyppiä. 

Nyt teen jotain typerää, kuten aika kuluu, vain perustelemaan kirjoitan tätä ohjelmaa. Ja sitten tänne, minä taas kerrata yli array sanomalla vuoden päästä, henkilö numero yksi tahto olla jotain vuotta vanha. Ja selvittää, että math-- Tarkoitan, tämä ei ole kovin monimutkainen arithmetic-- Minä vain lisätä yksi ikänsä. Vain osoittaa jälleen tämä. 

Aivan kuten voin indeksinä merkkijono, s, joten voin indeksinä joukko ikäisiä, niin siellä. Joten jos tämä tulee olla viemässä meitä? Niin näemme, lopulta, muutamia asioita lähipäivinä. Yksi, koko tämän ajan, jolloin kirjallisesti omia ohjelmia, kuten Mario, ahne, luotto. Olet ollut nimen kirjoittaminen ohjelma ja enteriä. Ja sitten saada käyttäjän syöttää. 

Kanssa getString, getInt, getLongLong, tai vastaavat. Mutta näyttää siltä, ​​että C tuet jotain kutsutaan komentoriviltä argumentteja, jotka on menossa olkaamme itse saada at sanoja, jotka kirjoitat, klo vilkkuu nopea, jälkeen ohjelman nimi. 

Joten lähipäivinä, sinun voisi kirjoittaa jotain Caesar, tai ./caesar numero 13, sen jälkeen. Saa nähdä miten se toimii. Koska todellakin, vuonna ongelma asettaa kaksi, olemme aio esitellä sinulle että jotain pientä muistuttaa Ralphien n aiemmassa vaiheessa riitauttaa kartografiasta. Taidetta muokkaamisella tietoa. Tämä itse asiassa on erittäin muistuttaa mitä Ralphie teki. 

Tämä on esimerkki salaus algoritmia kutsutaan ROT13, R-O-T-13. Joka tarkoittaa yksinkertaisesti kiertää kirjaimia 13 paikkaa. Ja jos teette sen, näet nyt mikä on ehkä tuttu lause. Mutta miten aiomme käyttää tämä lopulta on yleisemmin. 

P asettaa kaksi, perusversiossa, voit toteuttaa pari salaus, yksi nimeltään Caesar, yksi nimeltään Vigenere. Molemmat ovat rotaatio salaus, että jotenkin puolestaan ​​yksi kirjain tulee eri kirjain. Ja Caesar on erittäin yksinkertainen. Lisäät yhden, lisäät 13, tai tietty määrä jopa 26. Vigenere tekee, että per kirjeen perusteella. Niin Vigenere, niin näet spec, on turvallisempi. 

Mutta loppujen lopuksi mitä voit olla täytäntöönpanossa ja P asetettu kaksi, on se avain, että käytät molempia salaukseen ja salauksen. Viitaten prosessi kääntämällä pelkkää tekstiä, jotkut alkuperäisen viestin, osaksi Cypher tekstiä, joka on jotain salattu. Ja sitten purkaa se uudelleen. 

Vuonna hakkeri painos, Samaan aikaan, sinun on tehtäväksi jotain vastaavaa hengessä, jossa annamme sinulle tiedostosta, tyypillinen Linux, tai Mac tai Unix nimeltään Etsy salasana, joka sisältää kokonaan nippu käyttäjätunnuksia ja salasanoja. Ja ne salasanat ovat kaikki salattu, tai hajautettu, niin sanotusti, oikeammin kuten näet spec. 

Ja hakkeri painos haastaa sinulle kun tulon kuin tämä, ja halkeilua salasana. Eli mietitään, mitä Ihmisen salasana todellisuudessa oli. Koska todellakin salasanat ovat yleensä ole tallennettu selvä, ja yleensä salasanat pitäisi olla vaikea arvata. Se ei ole usein. 

Ja mitä minä ajattelimme tehdä on lopuksi pari minuuttia vilkaista erityisen huono valinta salasanoja alkaen elokuva saatat muistaa hellästi. Ja jos ei, sinun pitäisi vuokrata. 

[VIDEOTOISTOSTA] 

-Helmet, Voit riiviö, mitä on tekeillä? Mitä teet tyttärelleni? 

-Permit Minun esitellä loistava nuori plastiikkakirurgi, Tohtori Phillip Schlotkin. Suurin nenä työtä mies Koko maailmankaikkeus ja Beverly Hills. 

-Sinun Korkeutensa. 

-nenä Työpaikka? En ymmärrä. Hän oli jo nenä työtä. Se oli hänen makea 16 läsnä. 

Ei, se ei ole mitä luulet. Se on paljon, paljon pahempi. Jos et anna minulle yhdistelmä ilmasuojaan, Lääkäri Schlotkin antaa oman tytär takaisin hänen vanhan nenä. - [Henkäisee] Nooooooooooooo. Mistä sait sen? 

-Hyvä. Kerron, kerron. 

Ei, isi, ei. Et saa. 

Olet oikeassa kultaseni. Tulen kaipaamaan uusi nenä. Mutta en kerro heille yhdistelmä mitä tahansa. 

-Erittäin Hyvin. Lääkäri Schlotkin, tee pahin. 

-Ilomielin. 

-EI! Odota, odota. Kerron. Kerron. 

-I Tiesi, että se toimisi. Okei, anna se minulle. 

P yhdistelmä on yksi. 

Oni. 

Oni. Kaksi. Kaksi. Kaksi. Kolme. Kolme. Kolme. -Neljä. -Neljä. -Neljä. Viisi. Viisi. Viisi. -Joten Yhdistelmä on yksi, kaksi, kolme, neljä, viisi. Se on typerin yhdistelmä En koskaan kuullut elämässäni. Se on sellainen asia idiootti olisi hänen matkatavaroita. 

Kiitos, teidän korkeutenne. 

[KAUKO CLICKS] 

Mitä teit? 

-I Kääntyi pois seinästä. 

Ei, et, voit sammutetaan koko elokuvan. 

-I Varmaan painanut väärää nappia. 

-No, Laita se takaisin! Laittaa elokuva takaisin! 

Kyllä, sir! Kyllä, sir. Mennään, Arnold. Tule, Gretchen. Tietenkin tiedät Tulen täytyy laskuttaa sinua tästä. -No? Toimiko se? Missä kuningas? 

-se Toimi, sir, me on yhdistelmä. -Great. Nyt voimme ottaa viimeinenkin hengitys raitista ilmaa Planet druidi. Mikä yhdistelmä? 

Oni, kaksi, kolme, neljä, viisi. 

Oni, kaksi, kolme, neljä, viisi? Kyllä. Tuo on mahtavaa. Minulla sama yhdistelmä minun matkatavarat. Valmista Spaceball 1 välitön poistuminen. 

Kyllä, sir. 

-Ja Vaihtaa yhdistelmä minun matkatavarat. [Oven sulkeminen SOUND] [Kilinä OVET OSUU HELMET] -Ahh. [END VIDEOTOISTOSTA] DAVID J. MALAN: Se on se CS50, Nähdään ensi viikolla. Kertoja: Ja nyt, Deep Ajatuksia, joita Daven Farnham. 

Daven FARNHAM: Koodaus C on niin paljon vaikeampaa kuin tyhjästä. printf, Scratch oli valhe. 

[Naurua iskulauseestaan]