[Muusika mängimine] DAVID J. Humala: Olgu. See on CS50 ja see on lõpuks 2. nädal. Nii et täna me ei kavatse jätkata meie välimus kuidas me esindame asjad all hood-- loobumas numbritelt nagu täisarvud ujukoma väärtused ja keskendudes stringid ja lõppkokkuvõttes rohkem huvitavaid programme. Aga me ka võtta pilk Paar erialaspetsiifilisi probleeme-- Esimene mis olema kaasatud krüptograafia, art skrambleerimisbittide info kus sa näed eespool siin on pilt Radio harva Annie saladus dekooder sõrmuse Läinud. See on tegelikult väga primitiivne vorm ja lapsesõbraliku kujul cryptopgraphy kusjuures see ring on kaks disks-- üks sees ja teine ​​väljaspool. Ja keerates üks neist, saate sisuliselt rivistama tähed nagu läbi Z teiste tähtede nagu B kaudu A. Teisisõnu saab sõna otseses mõttes pöörlema ​​tähestik, seeläbi tulemas kujutus tähed tähed nii, et kui sa tahtsin saata salajane sõnum keegi nagu Annie, võid kirjutada maha oma sõnum ja seejärel pöörake kirjad, mille kohaselt juhul, kui sa mõtled öelda "," sa selle asemel öelda "B" sa taha öelda, "B" te asemel öelda "C" - või midagi natuke targem kui et-- ja siis lõpuks nii kaua, kui Annie on see dekooder ring, ta saab dekodeerida sõnumit. Nüüd võite meelde tuletada, et tegelikult see kasutati väga kuulus film, mis mängib ad nauseum ajal jõulud. Võtame pilk siia. Ralphie PARKER: "Olgu see teada, et kõik kokkuvõte et Ralph Parker nimetatakse liige Little harva Annie Secret Circle ning tal on õigus kõik kiitusega ja kasu esinevad nendega. " Ralphie PARKER (jutustamise): Allkirjastatud Little harva Annie. Allkirjastas Pierre Andre! Tindiga. Kiitusega ja hüvitised, juba üheksa-aastaselt. [Muusika mängimine] [RAADIO Vestluse] Ralphie PARKER: Tule. Lähme edasi. Ma ei pea kõik, mis jazz umbes salakaubavedajate ja piraatide. Raadiodiktor Kuulake homme õhtu lõpetatakse seiklus Musta Pirate Ship. Nüüd on aeg Annie Salajane sõnum teile kohal Secret Circle. Pea meeles, lapsed, ainult liikmetele Annie Secret Circle saab dekodeerida Annie salajane sõnum. Pea meeles, et Annie on sõltuvalt teile. Määra oma sõrmed B-2. Siin on message-- 12, 11, 2-- Ralphie PARKER (jutustamise): I olen oma esimese salajane koosolek. Raadiodiktor: --25, 14, 11, 18, 16-- Ralphie PARKER (jutustamise): Oh, Pierre oli suurepärane hääl täna. Ma võiksin öelda, et tänane sõnum oli väga oluline. Raadiodiktor: vähemalt 3, 25. See on sõnum Annie ise. Pea meeles, et ei räägi kellelegi. [Hingeldamine] Ralphie PARKER (jutustamise): Üheksakümmend sekundit hiljem, ma olen aastal ainus tuba maja, kus poiss üheksa võiks istuda privaatsust ja dekodeerida. Ah. "B." [Chuckles] Ralphie PARKER (jutustamise): Ma läksin edasi. "E." Esimene sõna on "olla." Jah! See tuli lihtsam nüüd. "U." [Chuckles] Randy PARKER: Ah, ole nüüd, Ralphie. Ma pean minema! Ralphie PARKER: Ma tulen kohe alla, ema. Gee viuhti. "T." "O." "Kindlasti kuni. "" Kindlasti, "mida? Mis oli Little harva Annie vestlemisel? "Kindlasti" Mis? EMA: Ralphie, Randy peab kaduma. Kas sa palun tule välja? Ralphie PARKER: Olgu, ema! Ma tulen kohe välja! Ralphie PARKER (jutustamise): Ma olin jõudmas nüüd. Pinge oli kohutav. Mis see oli? Planeedi saatuse võib riputada tasakaalu. EMA: Ralphie, Randy peab minema! Ralphie PARKER: Ma tulen kohe välja, nutt valjusti! Ralphie PARKER (Jutustamise): Peaaegu! Minu sõrmed lendas! Minu arvates oli terase lõksu. Igast poorist vibreerima. See oli peaaegu selge! Jah! Jah! Jah! Jah! Ralphie PARKER: "Kindlasti juua oma Ovaltine. " Ovaltine? Trullakas kaubanduslik? [Muusika mängimine] Ralphie PARKER: Son of a bitch. [LAUGHING] DAVID J. Humala: Nii, et siis on pilguheit mida krüptograafia võib olla see-- juua Läinud. Nii kiire teadaanne. Kui oled vaba seda Reedel kell 13:15 ja oleks tahan liituda meiega CS50 lunch, pea see URL siia. Kes ees, see toimib alati. Aga aja jooksul, me veenduge, et Kõige kes tahaks osaleda võib ajastada tark. Nii stringe. Meil on Zamyla-- kellele olete nüüd täidetud kõige tõenäolisem aastal Ülesanded 1-- kelle nimi kirjutatakse nii. Ja arvan, et sa kirjutasid oma nime arvutisse programmi, mis on kasutades midagi getString. Et laadida need klahvivajutused, kuidas me minna esindavad string, sõna, lõigu või mitu tähte, nagu need siin? Me rääkisime eelmisel korral umbes täisarvud ja probleemid mis tekivad täisarv ülevool ujukoma väärtused ja probleeme, mis tekivad täpsusega. Mis stringid, me vähemalt on veidi rohkem paindlikkust sest strings-- lihtsalt reaalses aasta Maailma võib olla üsna suvalise pikkusega. Päris lühike, üsna pikk. Aga isegi siis, me ei kavatse leiavad, et arvutid võivad mõnikord mälu täis ja ei ole isegi salvestada piisavalt suur string. Aga nüüd, alustame visualiseerida stringi midagi neid karpe siin. Nii kuus sellist kastid, millest igaüks tähistab märk või "char". Nii et meelde tuletada, et "char" - c-h-a-r-- on üks sisseehitatud andmete liigid C. Ja mis on tore on, et saate kasutada et omamoodi nagu ehituskivi, puzzle tükk, kui soovite, et moodustada suurem tüüpi andmeid me jätkame helistada "string." Nüüd, mis on kasulik mõtlemist asju nagu stringid niimoodi? Noh, selgub, et suudame tegelikult võimendada selle struktuuri tegelikult juurdepääs üksikute märkide aastal üsna otsekohene viisil. Ma lähen edasi minna ja luua fail nimega "stringzero.c" kuid võite helistada see, mida sa soovid. Ja muidugi veebilehel on juba selles näites eelnevalt nii et sa ei pea kirjuta kõike välja. Ja ma lähen edasi minna ja esimene tee int main void. Ja paari päeva jooksul, hakkame tease peale mis tühine on siin, miks see int kõrval peamine, ja nii edasi. Aga nüüd, olgem jätkata kopeerida kleebi see. Ma kinnitan, string nimega s. Ja ma lähen tagasi alates GetString iganes kasutaja liigid. See saab olema lihtne programmi, ei juhiseid, Ma lihtsalt pimesi eeldada, et kasutaja teab mida teha, et hoida lihtsa. Ja nüüd ma lähen on silmus. Ja sees minu jaoks silmus olen läheb on int i saab nulli. Ja ma jällegi vaid konventsiooni index muutuja lugemist aga ma nimetan seda, mida tahan. Ma lähen tegema, i on väiksem kui-- hästi Zamyla nimi on kuus tähte pikk. Nii et ma lähen kõvasti kood, mis seal nüüd. Ja siis ma ++. Ja nüüd sees need lokkis traksid ma teen printf, ja ma tahan printida ühe märgi korraga. Nii et ma lähen kasutada% C võibolla esmakordselt. Ja siis ma tahan printida iga märgi oma rida. Nii et ma lähen üles vähe längkriipsu n seal. Sulge tsiteerida. Ja nüüd ma tahan teha midagi. Ma tahan välja printida konkreetse kirja string, s, kui ma iterating alates null kuni kuus. Teisisõnu, ma tahan prindi -nda iseloomu s. Nüüd, kuidas ma saan seda teha? Hästi palju nagu kastid see esitus siin liiki, võluda mõiste poks tähed, saad samamoodi teha süntaktiliselt C lihtsalt täpsustades, Ma tahan välja printida s on i-nda iseloomu. Kasutades nurksulgudes arvuti klaviatuuri et USA klaviatuur on üldiselt üle oma Enter. Nii et see ei ole päris õige veel, nagu te võib-olla märganud. Aga ma lähen liiki pimesi edasi liikuda siin. Ja ma ei tee string 0. Aga enne kui ma seda teen, vaatame, kas me ei saa ette näha mõningaid ühiseid vigu. Kas see läheb kompileerida? Ei, ma kadunud terve hunnik asju. Raamatukogud kuulsin. Nii et mis päisefailiga võib Tahan lisada siia? Jah. Sihtrühm: Sa pead standard I / O [kuuldamatu] DAVID J. Humala: Suurepärane. Nii et ma pean standard I / O. Sest mis Selleks ma tahan standard I / O? Printf. Nii hõlmavad stdio.h. Ja sa ka ettepaneku, et ma lisama CS50 raamatukogu, mis põhjusel? Et on stringid. Nii me näeme, mida CS50 raamatukogu teeb luua selle mõiste string. Aga nüüd, saate lihtsalt arvan, sellest, kui tegelikud andmed tüüp. Nii et tundub, et veidi koristanud. Ja nüüd ma lähen edasi minna ja tõesti ei tee string 0. Koostanud. Nii et see on hea. Nii ./string0 lase mind sisse suumida, et saaksime vaata lähemalt, mis toimub. Sisesta. Z-A-M-Y-L-sisestada. Ja me oleme välja printida kuni Zamyla nimi. Nii et see on päris hea. Nüüd lähme edasi ja Käivita see programm uuesti, ja kirjuta välja Daven täisnimi. Üllatus, üllatus. Sisesta. Hmm. Me ei ole trükitud Daven on täiseesnime õigesti. Nüüd peaks see olema ilmne tagasivaade sest mida, omamoodi, loll disain otsus? Jah, ma kõva kodeeritud kuue sees minu jaoks silmus. Nüüd ma tegin seda ainult sellepärast, Ma teadsin Zamyla nimi pidi olema kuus tähte. Aga kindlasti ei ole see üldine lahendus. Nii selgub saame dünaamiliselt nuputada pikkus string kutsudes funktsiooni nimetatakse strlen. Jällegi tahtlikult tabavalt nimeks lihtsalt et oleks mugavam kirjutada. Aga see on sünonüüm saada pikkus string. Ma lähen tagasi oma terminali akna ja uuesti käivitada tõlkija. Aga see on minu peale karjumine. Kaudselt kuulutatakse raamatukogu funktsiooni strlen tüüpi allkirjastamata int const-- Ma olen eksinud. Täielikult. Seega, eriti kui teie hakkavad silmad glasuur üle veateateid nagu see, keskendudes ausalt paar esimest sõna. Me teame, et probleem on rida 8, nagu on näidatud siin. Ja see on string-0.c. Kaudselt kuulutatakse raamatukogu funktsiooni strlen. Nii et üldiselt läheb olema muster veateateid. Kaudselt kuulutatakse midagi. Nii et lühidalt öeldes, mis on I näis on teinud seoses rida 8, siin. Mis võib olla lahus olla isegi Kui olete kunagi kasutanud strlen ise? Sihtrühm: Osa erinevad raamatukogu? DAVID J. Humala: Osa ning erinevate raamatukogu. Nii et see on välja kuulutatud, kui nii võib öelda. Seda mainitakse mõnda faili va stdio.h ja CS50.h. Nüüd, kus on see määratletud? Kui aus olla, siis on kas lihtsalt tean, et see välja peal oma peaga, või sa googeldada seda ja teada saada. Või teavad seda, ma olen avanenud CS50 seadmega terminali programm, mis on lihtsalt suur, täisekraani versioon mis on põhja gedit aknas. Ja selgub, et seal on sarnaselt sisutihe käsk, mida nimetatakse mees käsitsi, kui siis, kui sa kirjutad nimi funktsioon ja vajuta Enter, saad tagasi üsna kauge dokumentatsiooni. See on lihtsalt tekst, et üldiselt tundub natuke midagi sellist. See on natuke suur esimesel pilgul. Aga ausalt öeldes ma lähen lase oma silmad glasuur üle ja keskenduda vaid osa Ma hoolin hetkel. Milline on see. Milline näeb välja struktuurilt nagu midagi, mida ma olen tuttav. Tõepoolest mees lehele, nii rääkida, ütlen teile, millises päisefailist funktsioon nagu strlen on määratletud. Nii et ma lähen nüüd tagasi gedit. Ja ma lähen edasi minna ja lisada siin #include ja salvestage fail. Ma lähen selge ekraan koos Kontroll L Kui oled olnud mõtlesin. Ja ma lähen uuesti käivitada make string.0, koostab seekord. ./string.0 Zamyla. See tundus töötada Lase mul minna edasi ja korrake seda Davenport. Sisesta. Ja see ka, tundus, et töötada. Nii saame teha natuke parem kui see, aga saame hakkama kasitud asjad üles natuke. Ja ma tegelikult tutvustada üks asi nüüd. Ma lähen edasi minna ja salvestada selle teise faili. Ja ma lähen helistada Faili string1.c lihtsalt olema kooskõlas koodi Teil on võimalik leida internetis. Ja olgem keskenduda täpselt sama koodi. Tuleb välja, et ma olen olnud omamoodi võtmist enesestmõistetavaks, et minu laptop, ja omakorda CS50 seade on palju mälu, palju RAM, palju baiti ruumi kus ma saan salvestada stringe. Aga reaalsus kui ma kirjutada pikk piisavalt ja piisavalt klahvivajutusi, Ma võiks teoreetiliselt tüüp rohkem tähemärki kui mu arvuti füüsiliselt on mälu. Ja see on problemaatiline. Palju nagu int võib ainult loota, et kõrge teoreetiliselt saab ainult tuupima nii palju märke oma arvuti RAM või Random Access Memory. Nii et mul oli paremini ennetada Selle probleemi isegi ehkki see võib olla haruldane nurga puhul, nii rääkida. Ei juhtu, et tihti võib juhtuda. Ja kui see juhtub, ja ma ei ole ennetada ja programm see, minu programm võiks teha, kes teab mida. Paigal, riputada, reboot, mis iganes. Midagi oodata võib juhtuda. Niisiis, mida ma lähen tegema nüüd, nüüdsest tõesti, on enne kui ma kunagi pimesi kasutada muutuja nagu s, et on määratud tagastatav väärtus mõned muud ülesanded, nagu getString, Ma lähen veenduda et selle väärtus ei kehti. Nii et ma tean ainult lugenud CS50 dokumentatsioonist getString, mis lõppkokkuvõttes me juhtida teid, et getString naaseb eriline sümbol kutsus NULL, N-U-L-L kõikides Mütsid, kui midagi läheb valesti. Nii et tavaliselt, siis tagastab stringi. Aga muidu, kui ta naaseb N-U-L-ma-- me lõpuks näha, mis tegelikult means-- et lihtsalt vahendid midagi halba juhtunud. Nüüd tähendab see, palju nagu Scratch, Võin kontrollima seisukorras siin C, kui te ei võrdu NULL. Nii et kui te pole näinud seda enne, tähendab see lihtsalt ei ole võrdne. Nii et see on vastupidine võrdne võrdsete, mis meenutavad, erineb ühe võrdne, mis on ülesanne. Nii et kui te ei ole võrdne NULL, siis alles Ma tahan, et täita neid ridu koodi. Nii teisisõnu enne kui ma sukelduda pimesi ja alustada iterating üle s, ja selle pidamine nagu ta on järjestus tegelased, ma lähen kõigepealt kontrollida, Oota, on S kindlasti mitte võrdub see eriline väärtus, NULL? Sest kui see on, halbu asju võib juhtuda. Ja nüüd, eeldame, et halvad asjad toimub tähendab, et teie programm jookseb kokku, ja sa ei pruugi taastuda. Nii et ausalt öeldes tundub koledam. see on natuke segane nüüd pilk. Kuid see muutub tuttav enne pikk. Aga ma lähen ettepaneku nüüd ühe teise paranemist. See paranemine õigsust. Minu programm on nüüd õigem, sest harvadel juhtudel, mis ei ole piisavalt mälu olemas, ma tegelen sellega, ja ma lihtsalt ei tee midagi. Ma vähemalt ei ole viga. Aga teeme lõplik versioon siit. Ja faili nimega string2.c. Ma lähen kleebi et sama kood hetk, ja ma lähen seda rõhutada line, 11, siin, just praegu. Nüüd reaalsus on see, et tark koostajad nagu rõkkama võiks määrata see meile kulisside taga ilma meie kunagi teada. Aga mõtleme sellele põhimõtteliselt nagu problemaatiline disain. See rida koodi on muidugi öeldes initsialiseerida mõned muutuja i 0. See on päris lihtne. Ja mis veel on see avalduse, siin ma ++ teed? Me oleme näinud seda enne, kuid me tegelikult ei räägi sellest. Sihtrühm: incrementing i. DAVID J. Humala: incrementing i. Nii et iga iteratsiooni kaudu see silmus, iga tsükli sa incrementing i ühe võrra. Nii et see muutub suuremaks ja suuremaks, ja suurem kuni silmus lõpeb. Kuidas see lõpetada? Noh seal on see keskel seisund, mida me oleme varem kasutanud. Olete näinud ja walkthroughs on P komplekti. Aga milline on see sõna? Kas järgmine ring nii Niikaua kui ma väiksem kui see, mida? Sihtrühm: stringi pikkusena. DAVID J. Humala: stringi pikkusena. Nii et see tähendab päris puhtalt Inglise selles mõttes. Nüüd on probleem selles, et iga kord, kui ma itereerima läbi selle silmuse teoreetiliselt Ma palun sellele küsimusele. Kas ma alla string pikkusega s? Kas ma alla string pikkusega s? Nüüd on i muutes iga iteratsiooni? On. Kuna ++. Nii et iga iteratsiooni i on üha suurem. Kuid kas s muutub suuremaks, või väiksem, või muutuvad üldse? Ei Nii et nii disaini, üheks teljeks mida mööda me püüame hinnata kood klassis, see tundub tobe. Nagu te olete sõna otseses mõttes, iga iteratsiooni Selle ahela paludes samas kuradi küsimus uuesti, ja uuesti ja uuesti ja sõna otseses mõttes see kunagi ei muutu. Vähemalt siis, kui ma ei puutu s ja katsed muuta sisu s. Ma võin teha natuke parem kui see. Ja mida ma lähen tegema, ei ole kuulutada vaid üks muutuja i, aga teine ​​muutuja panen omavoliliselt, aga tavapäraselt, nimetame seda n. Määra n võrdne string pikkusega s. Ja siis siin, ma lähen teha väike nutikas optimeerimine, nii rääkida, et lõpus päeval ei ole enam õige või mitte vähem õige kui enne. Aga see on parem disain. Selles, et ma kasutan vähem aega, vähem CPU tsüklit, nii rääkida, vastata sama küsimus, kuid ainult üks kord. On küsimusi, mis üldiselt parandamise põhimõte, öelda, programmi tõhusust? Jah? Sihtrühm: Miks sa kasutada [kuuldamatu]? DAVID J. Humala: Hea küsimus. Miks me paneme ++ aasta lõpuks i asemel alguses i? Sellisel juhul peab no funktsionaalne mõju. Ja üldiselt, ma pigem kasuta Postfix operaator nii et see on natuke rohkem selge kui et kui operatsioon toimub. Neile ei tunne, on teine avaldused, mille sa võiksid teha ++ i. Need on funktsionaalselt samaväärsed selles asjas sest seal on midagi muud ümber, et incrementation. Aga sa võid tulla juhtudel ja rida koodi kus, mis muudab erinevus. Nii et üldiselt, me ei pea isegi räägiks. Sest ausalt öeldes, see teeb oma kood seksikam, ja omamoodi vihmamantel, ja vähem tähemärki. Kuid reaalsus on see, et seda on palju raskem, Ma arvan, et isegi minu jaoks, et murrab oma meelt ümber mõnikord Tehete järjekord. Nii nagu kõrvale, kui te tõesti ei meeldi see, kuigi see on seksikas vaadates, saate ka teha i + = 1, mis on koledam versioon Sama idee Postfix incrementation. Ma ütlen seda, ja te peaks nalja tegema seda, kuid siis tulevad vaatama, nii nagu see midagi ilusat enne pikk. [Naer] DAVID J. Humala: Right? Jah. Küsimus keskel. Sihtrühm: Kas teil on vaja öelda, int n? DAVID J. Humala: Sa teed pole vaja öelda, int n. Niisiis, kuna oleme juba öelnud, int, sa ei pea ütlema, et see uuesti. Saak on see, et n on olema sama andmetüüp nagu i. Nii et see on lihtsalt mugavuse siin. Jah. Sihtrühm: Kas te lähete üle print iseloomu s sulg i uuesti? DAVID J. Humala: Absoluutselt. Nii% c, mäletate viimast aega, on lihtsalt kohatäide. See tähendab panna char siin. längkriipsu n muidugi lihtsalt abil panna reavahetus siin. Nii et lihtsalt jätab, nüüd, see tükk uus süntaks. Ja see on sõna otseses mõttes öelda, ostke string nimega s ja too oma i-nda iseloomu, nii rääkida. Ja ma saan öelda, i-nda iseloomu sest iga iteratsiooni Selle ahela see on nii, nagu me printimisel esiteks s sulg 0, programmeerijana öelda. Siis s sulg 1, siis s Rühma 2, siis 3, siis 4. Aga muidugi on see muutuja, nii et ma lihtsalt väljendada seda i. Key, aga on mõista, eriti kui sa oled ei on acclimating selle maailma programmeerimine, kus me kõik Tundub, et loota nullist, pead hakka lugema nullist nüüd. Kuna stringid, esimene märk, z Zamyla on hea või halb läheb elama asukoha number null. Olgu, lubage mul tuua meid tagasi siia Zamyla ja näha, mis tegelikult toimub seal all on kapuuts. Nii et see mõiste tüüpi valu. Sul võib olla tegelikult mängitakse seda juba, äkki häkker väljaanne P seatud üks. Kuid tüüpi valu vaid viitab võime C ja mõnedes teistes keeltes teisendada üks andmete tüübist teise. Nüüd, kuidas võiks me näeme seda päris arusaadav? Nii et see, mäletate, on algusest inglise tähestikku. Ja seoses meenutada, alates nagu nädal tagasi on ASCII. American Standard Code infovahetuse. Mis on lihtsalt väga pikk tee öelda kujutus kirjad numbritele, ja numbrid tähed. Nii läbi olen siin, dot dot dot, ridade järele, tagasikutsumine, koma number 65 üles. Ja me ei räägi sellest selgesõnaliselt, kuid kindlasti on olemas sarnane numbrid väiketähti. Ja tõepoolest on. Maailma otsustas paar aastat tagasi, et vähe, väiketähed, saab olema 97. Ja vähe b läheb olema 98, ja nii edasi. Ja ühegi muu klahvi klaviatuuri, seal saab olema sarnane muster bitti. Või võrreldavalt kümnendkohani. Seega on küsimus käepärast, seega, kuidas me saame tegelikult näha selle all kapuuts? Nii et ma lähen üle gedit uuesti. Ja mitte tüüp see nullist, Ma lähen edasi minna ja lihtsalt avada midagi tänapäeva kood nimetatakse ASCII null. Ja ASCII null näeb välja selline. Nii et olgem murrab meie mõtetes ümber selle. Nii et esimene, ma olen kommenteeris kood, mis on tore. Sest see on sõna otseses mõttes mulle, mida oodata, näidata kaardistamine suurtähti. Nüüd ma ei saa päris hästi aru, mida ma mõtled, niiet järeldada. Inglise, võibolla mõnevõrra Techie inglise, mida see rida 18 ilmub et teeme meie? Just rida 18. Mida see indutseerivate? Mis läheb avalöögi siin? Sihtrühm: silmus. DAVID J. Humala: silmus. Ja mitu korda on et läheb itereerima? Sihtrühm: [astudes VOICES] kuus korda. DAVID J. Humala: Mitte kuus korda. Sihtrühm: 26 korda. DAVID J. Humala: 26 korda. Jah, vabandust. 26 korda. Miks? Noh, see on natuke imelik, kuid Olen hakanud lugedes 65. Mis on imelik, aga mitte vale. See ei ole halb kohta öelda. Ja ma teen, et ainult sest selle näiteks Ma olen selline prognoosimine et kapital oli 65. Nüüd ei ole see kõige elegantsem kuidas seda teha, et selline raske koodi esoteeriliste väärtuste, et keegi on kunagi oodata mäleta. Aga nüüd, teate, et ma olen seda teed üles läbi 65 pluss 26. Sest ilmselt ma isegi ei taha arvutama minu peas. Nii et ma lasen koostaja teha. Aga siis iga silmus, iga iteratsiooni silmus, ma incrementing i. Nüüd tundub see veidi segasena. Aga meil peaks olema põhilised ehitusplokid plokid, mille abil mõista seda. % C on lihtsalt kohatäide char. % I on kohatäide int. Ja selgub, et kasutades seda uus süntaks, see Sulgudes, nii rääkida, et andmete tüüp sees sulgudes, Ma ei saa sundida koostaja raviks i ole täisarv, kuid char. Seejuures näitab mulle märgi samaväärne selle number. Nüüd siin see kood on päris palju identne. Tahtsin teha super selge fakt et ma hakkan kell 97, mis on väiketähed. On üles läbi veel 26 tähte. Ja ma doing-- jälle casting i, nii rääkida. Või tüüpi casting i, nii rääkida. Alates int et char. Nii et lõpptulemus saab olema, ausalt öeldes teavet me juba teame. Ma lähen tegema ASCII-0 dot-- mitte dot c. Teate, te ilmselt näha, et viga, mis ma just tegin kogemata. Tee ASCII-0. Nüüd ma lähen tegema ./ascii-0. Ma suumida ja kahjuks see saab kerida ekraanilt. Aga me näeme kogu diagrammi, kus kaarte kuni 97, b kaarte kuni 98, ja kui me liikuge üles veelgi Loomulikult kaarte kuni 65. Nii et see on ainult öelda, et mida me oleme jutlustab, on selle samaväärsust, on Tegelikult puhul tegelikult. Nii kiire muutmise selles. Lubage mul avada ASCII-1.c. Ja teate see tark, omamoodi kohta, selgituse selle kohta. See on ASCII-1.c ja teate see hull asi. Ja see tõesti läheb südamesse mida arvutid teevad. Kuigi me inimestel oleks ei lähe nii Kirjad-- Ma ei hakata mõtlema, Olgu siis b, ja kasutada neid lugema füüsilised objektid. Te saate kindlasti öelda, et ma tahan initsialiseerida mõned muutuja nimega c-- aga ma oleks seda nimetanud midagi-- nii c käivitub kapitalile A. Sest lõpus päeval, arvuti ei huvita, mida sa ladustamiseks, see ainult hoolib, kuidas soovite kuni selle teabe. Kuidas te soovite, et arvuti tõlgendada, et muster bitti? Nii et see ei ole midagi, mida ma oleks üldiselt soovitaks seda. See on tõesti lihtsalt eeskujuks edasi, et saate täiesti initsialiseerida täisarv char. Sest alla kapuuts char muidugi on lihtsalt number 0-255. Nii saate kindlasti pane see sees int. Ja mis see ka näitab, et me saab teisendada ühest kirjuta teise, siin, lõpuks trükkimine sama asi. Ja tegelikult, seda ma määrab online-- pidi ütlema seda jälle siin. Las ma puhastan selle üles online, ja me näed poes ülevaadet, kui vaja, mis oli mõeldud seal. OK. Nii et viimane näide nüüd kaasates ja B ja siis me võtta asju pügala. Nii ja B ning c on kapitalisatsiooni ja nende samaväärsuse, olgem vaatleme seda näiteks siit. Teine koodi näide. Me avame üks, mis on juba tehtud, nii et me ei pea seda kõik välja nullist. Ja teate ootuses me kasutame mitme kaudu faili, mille hulgas on Meie uus sõber, string. Nüüd tundub, esimesel pilgul, veidi segasena. Aga vaatame, kas me ei ole põhjust kaudu, mis toimub siin. Esiteks ma saan stringi kasutaja, ja panin seda stringi muutuja nimetatakse s. Kopeeri kleebi varem. Vastavalt 22, ma olen ilmselt teeb täpselt seda, mida Tegin hetk tagasi, ma iterating üle tähemärki s. Ja uusi trikke siin kasutate string pikkusega, alaealise optimeerimine ladustamiseks string pikkusega n, pigem kui helistaja strlen jälle ja uuesti ja uuesti. Ja lihtsalt kontrollida, et i on väiksem kui n. Nüüd aga, kui asjad natuke huvitav. Aga see on lihtsalt rakendus sellesama uue idee. Mis inglise teeb s sulg i esindama? Sihtrühm: Counting iga iseloomu [kuuldamatu]. DAVID J. Humala: Counting iga märk. Ja veelgi lühidalt s sulg ma esindan, mis? Sa ütleksid. Mitte panna teid kohapeal siin. Sihtrühm: Nojah DAVID J. Humala: Nii et kui sõna on-- kui string on Zamyla, mis starts-- Sihtrühm: --you tegelema tegelased separately-- DAVID J. Humala: Hea. Täpselt. Nurksulg märke saate pääseda iga märgi ükshaaval nii s sulg 0 saab olema esimene märk string. s sulg 1 saab olema Teine, ja nii edasi. Seega on küsimus ma küsin, siin, see tingimus on see, mida? Kas i-nda iseloomu s suurem võrdne või väiketähtedes? Ja mida see tähendab, siin, topeltpõhja ja-märgid? Kuulajaskond (koos): Ja. DAVID J. Humala: Ja. See on lihtsalt samaväärsed käesoleva. Ja ei ole märksõna C, pead kasutamine, tüütult, ampersand ampersand. Ja see, vastupidi, küsib on s on i-nda iseloomu väiksem või võrdne väiketähtedeks z? Ja jälle siin, kus mõista aluseks rakendamine arvuti mõtet. Pange tähele, et kuigi mul on dot dot dot seal, näeb välja nagu läbi z väiketähtedega on kõik lainelised väärtused kuni 97 üles. Ja sama suure algustähega algusega kell 65. Nii Buffee, siis on see, et inglise keeles, Kuidas te kirjeldaksite mida joon 24 teed? Jah? Sihtrühm: 24. see kontrollimist, kas iga märk on väiketähed. DAVID J. Humala: See on kontrollida, kas iga märk on väiketäht. Nii et isegi rohkem tabavalt, on i-nda iseloomu s väiketähed? See on kõik, mida me oleme väljendades siit loogiliselt, veidi salapäraselt, kuid lõpuks päris arusaadav. Kas s on i-nda iseloomu väiketähed? Kui see on nii, ja siin on, kus asjad natuke meeles painutamine hetkeks, kui jah, siis edasi ja välja printida iseloomu. Nii et see on lihtsalt kohatäide, aga mis laadi? Miks ma teen s sulg i miinus see väljend siin? Noh teate muster siin. Tegelik arv ei loe nii palju. Aga teate, et 97 on Kuidas kaugel 65? Sihtrühm: 32. DAVID J. Humala: 32. Kui kaugel on 98 66? Sihtrühm: 32. DAVID J. Humala: Little c suurte C? 32. Nii et seal on 32 humala üks täht teise. Nii et ausalt öeldes, võiks lihtsustada selle. Aga siis ma olen selline kõva kodeerimine madala taseme mõistmist et lugeja on kunagi kavatse aru. Ma lähen üldistada seda, ma tean väiketähti suuremad. Tean suurtähtedega on väiksemad väärtused, irooniliselt. Aga see on samaväärne öeldes lahutama 32 alates s sulg i. Nii Seoses nende kirjad, kui kirja juhtub olema, väiketähed ja ma lahutan 32, Milline mõju, mis on, matemaatiliselt, on väiketähed? Sihtrühm: Capitalizes-- DAVID J. Humala: suurtäheks seda. Ja tõepoolest, see on põhjus, miks meie Programm on kutsutud ära null. See programm kas suurtäheks kirja, pärast kontrollimist, kui see on tõepoolest väiketäht. Muidu vastavalt 30, mida ma pean tegema, kui see ei ole väike täht, et ma olen vaadates ühe konkreetse iteratsiooni silmus. Lihtsalt printida. Seega ei muuda asju see pole isegi väiketähed. Piirata ennast vähe läbi vähe z. Nüüd on see üsna kauge. Aga lõpuks päev, see on see, kuidas me kunagi ammu, pidi rakendama asju. Kui ma selle asemel open ära üks, oh jumal tänatud. Seal on funktsioon hüüdis ülemine, mida saab teha kõike tegime küllaltki madalal tasemel. Nüüd ülemine on huvitav sest see on deklareeritud faili ja sa tead ainult seda kontrollides dokumentatsioon, või öeldakse, ütleme, klass, kus see on olemas, faili nimega ctype.h. Nii et see on veel üks uus sõber meie. Ja ülemine ei täpselt mida nimigi ütleb. Võite liigu, nagu argument, vahel need sulgudesse, mõned iseloomu. Ma lähen liigu -nda iseloomu s, kasutades meie väljamõeldud uus märke kaasates nurksulgudes. Ja võta oletus, mis on tulu väärtuse ülemise ilmselt läheb olema? Suurtähega. Suurtähega. Nii et kui ma edasi väiketähtedega, loodetavasti määratluse kohta, et ülemine, see läheb tagasi suurtäheks A. Vastasel juhul kui see ei ole väike täht Esiteks, ma lihtsalt printida. Ja tõepoolest, teate Teine sõber siin. Mitte ainult, et ülemine olemas, kuid on madalam, mis tegelikult vastab sellele küsimusele minu jaoks. Nüüd kes kirjutas need asjad, 10s aastat tagasi, sa tead, mida? Rakendatud ülemise ja vähendada kasutades koodi niimoodi. Kuid jällegi, kooskõlas Selle idee refereerimine ära omamoodi, madalamal tasemel rakendamise üksikasju. Ja seistes õlgadele inimesed kes olid enne meid, kasutades funktsioone nagu ülemiste ja madalam, mis imeliselt piisavalt kenasti nime öelda, mida nad teevad, on imeline paradigmas võtta. Nüüd tuleb välja, et kui ma loen man-leheküljelt, ütleme, et ülemises, Ma õppida midagi muud. Nii mees toUpper. See on veidi suur. Aga teate, siin on, et mainitud header fail, et ma peaks kasutama. Nagu kõrvale, sest see on eksitav, funktsioon kasutab ints asemel tähemärki põhjustel vigade kontrolli. Aga me võib-olla tulevad tagasi, et tulevikus. Aga teate, siin, et ülemine teisendab C-täht suurtäheks kui võimalik. Nii et see on üsna lihtne. Ja nüüd olgem veidi täpsemad. Vaatame osa mees lehelt tagastatav väärtus. Raha tagasi, et konverteeritud kirja. Või c, kui muundamise polnud võimalik kus c on originaal sisend. Mis ma tean siit alates argument, et ülemine. Mis on Buffee seda? Raha tagasi, et konverteeritud kirja, või c algse kirja, kui konversiooni ei olnud võimalik. Mida saab teha aga ma seetõttu tegema oma koodi disaini? Jah? Sihtrühm: Saate eemaldada mujal. DAVID J. Humala: suudan eemaldage muud avalduses, ja mitte ainult muu avalduse. Sihtrühm: Saate eemaldada [kuuldamatu]. DAVID J. Humala: suudan eemaldage kogu kahvel maantee, kui teine ​​hoopis. Nii et tõepoolest, lubage mul avada lõplik versioon sellest, ära-2 ja teate, kuidas, kui siis, seksikas, kood on nüüd saada, aastal, et ma olen vähendanud mõnest seitse või nii ridade vaid neli, funktsioone, mis ma ette lihtsalt helistasin, et ülemine, möödaminnes s sulg i ja trükkimine välja, mille kohatäitja% c, et erilist iseloomu. Nüüd väidetavalt on viga, või vähemalt risk viga, selles programmis. Nii lihtsalt tagasi tulla varasema Buffee, mida ma peaksin ilmselt ka teha Selle programmi, et muuta see tugevam, nii et ei ole nii, see ei crash, isegi harvadel juhtudel? Sihtrühm: Veenduge, et see ei ole null. DAVID J. Humala: Veenduge, et see ei ole null. Nii et tõesti, et muuta see super õige, ma peaks tegema midagi sellist, Kui te ei ole NULL, siis minna ja täita Nende rida koodi, mis Ma ei siis taane niimoodi, ja siis pane minu lähedal traksidega. Nii hea sidumine koos ideid. Jah? Sihtrühm: Kas te kasutate teha samas loop asemel? DAVID J. Humala: kas Ma do samas loop? Sihtrühm: --you soovite veenduda et sa tegelikult [kuuldamatu]. DAVID J. Humala: kas kasutate do ajal? Lühike vastus ei. Sest sa oled umbes kasutusele teise nurga puhul. Kui string on null pikkusega. Kui näiteks, ma lihtsalt tabanud Sisesta ilma kunagi kirjutades Zamyla. Ma anna sulle tagasi tegelik string, kui me lõpuks näha, mis on null tähemärki. See on ikka string, see on lihtsalt super lühike. Aga kui te kasutate do samas, sa lähed pimesi üritan teha midagi suhtes, et string, ja midagi ei kavatse olla seal. Sihtrühm: Noh, kui sa ei teha [kuuldamatu] samas s-- DAVID J. Humala: Oh ma näen, hoida saada string kasutaja. Nii lühike vastus, siis võiks, ja hoida pestering neid teile string, mis on piisavalt lühike, et mahtuda mälu. Absoluutselt. Ma lihtsalt ei tahtnud. Kui nad ei anna mulle string I tahad, ma lahkun, ma loobunud. Aga absoluutselt, selleks, võid absoluutselt teha. Nii teegi kaudu faile me oleme nüüd tuttavad on need siin. Standard I / O, CS50.h, string, ctype.h, ja seal on tõepoolest teised. Mõned teist on avastanud matemaatika raamatukogu math.h. Aga lubage mul tutvustada teile nüüd, et seda ressurssi, et CS50 personal Davin, ja Rob ja Gabe eriti on kokku pandud. Et varsti lingi Muidugi kodulehel. Seda nimetatakse CS50 viidet. Mis lihtsalt annab sulle kiire maitse seda, toimib järgmiselt. Lubage mul minna reference.cs50.net. Näete vasakul küljele valdav nimekirja funktsioone, mis tulevad koos c. Aga kui ma hoolin, hetkel, midagi nagu strlen, Ma ei kirjuta seda seal. See filtreerib alla nimekiri et just see, mida ma hoolin. Ma vajutan seda. Ja nüüd vasakul, näed, mida me loodame, on kõige lihtsam inimene sõbralik selgitus, kuidas See funktsioon toimib. Annab pikkus string. Siin on ülevaade, siin on, kuidas sa seda kasutada nii header faili ja selles osas, milline funktsioon Tundub nii oma argumendid. Ja siis siin, naaseb pikkusega stringi. Aga neile, mugavamaks, tegelikult võite klõpsata hubane, ja sisuga lehele, nüüd muutub olema vaikimisi väärtused, mida saad abil inimene leheküljel. Teisisõnu CS50 Viitamise lihtsustamiseks mees pages töötajate poolt, üliõpilastele. Eriti need, vähem mugav ja vahel, nii et sa ei pea püüdma mähkida meelt ümber, öeldes, mõned üsna segasena süntaks ja dokumentatsioon millalgi. Nii et hoidke seda silmas pidades päevil tulla. Nii et siin jälle on Zamyla. Olgem nüüd küsida, mis on veidi inimlikumaks kättesaadav. Tänu Chang, kes on olnud printimise rohkem elevanti nonstop viimase paari päeva jooksul. Meil on võimalus anda vähemalt üks neist eemale. Kui me võiksime saada vaid ühe vabatahtliku tulla kuni juhtida ekraanil. Kuidas siin? Tule. Mis su nimi on? ALEX: Alex. DAVID J. Humala: Alex. Olgu. Alex, tule üles. Oleme umbes, et näha oma käekirja ekraanil siin. Olgu, tore kohtuda. ALEX: Nice te kohtuda. DAVID J. Humala: Olgu. Niisiis, super lihtne kasutada. Baar ei ole suur, saada elevant täna. Sa mängid rolli getString. Ja ma lihtsalt öelda, string, et olete saanud. Ja arvan, et sa, getString, on nn. Ja inimene, nagu mina, on tipitud Zamyla, Z-A-M-Y-L-. Lihtsalt minna ja kirjutada Zamyla kohta ekraanil nagu sa oleks saanud seda ja hoitakse seda kuskil mälus. Jättes ruumi, mida saab mitu teiste words-- et on OK, edasi. [Naer] Nii Zamyla, Suurepärane. Nüüd oletame, et sa, getString, kutsutakse uuesti. Ja seetõttu, ma teile, on klaviatuur, teise nimega Belinda. Olgu. Ja nüüd järgmine kord getString on nimetatakse, ma kirjuta midagi Gabe, G--B-E. Sa oled tõesti võttes südamesse muutmälu. Mis joonistab kõik täiesti juhuslikult. OK. [Naer] ALEX: Vabandust mu käekiri on halb. DAVID J. Humala: Ei, see on OK. Ja kuidas Rob, R-O-B. OK. Väga hea. Nii et ma ei osanud oodata soovid liiki panna asjad niimoodi. Aga me ei saa teha seda tööd. Niisiis, kuidas sa minna kohta, millega välja need sümbolid mälu? Teisisõnu, kui me mõtleme see ristkülikukujuline must ekraan esindab arvuti RAM või mälu. Ja meenutada, et RAM on lihtsalt terve hulk baite ja baidid on terve hunnik bitte. Ja bitti on kuidagi rakendatud, üldiselt mingid elektri riistvara. Nii et see on omamoodi kihilisus me rääkisime ja nüüd peame enesestmõistetavaks. Kuidas sa minna Otsustades, kus kirjutada Rob versus Gabe versus Belinda versus Zamyla? ALEX: ma tegin seda et te mulle. DAVID J. Humala: Ja see on tõsi. Aga mis reguleerib, kui paned Belinda nimi ja Gabe nimi? ALEX: Midagi? DAVID J. Humala: [naerab] Nii, et töötab, see on hea. Nii et arvutid on vähe korrastatum kui see. Ja kui me implement-- seal vaid moment-- kui me tegelikult rakendada midagi getString arvutis, Zamyla võib olla sätestatud päris palju nagu sa tegid ekraanile seal. Ja mis on väga oluline märgata siin, mida Alex tegi, on olemas selline piiritlemine hulgas iga sõna, eks? Sa ei kirjuta Z-M-Y-L--B-E-L-I-N-D--G--B-- Teisisõnu, seal on mingi piiritlemis- mis näib olevat, omamoodi, juhuslik vahe nende eri sõnu. Aga see on hea, sest meie, inimesed saavad nüüd visualiseerida, et need on neli erinevat keelt. See ei ole lihtsalt üks jada partiidest tähemärki. Nii arvuti, siis vahepeal võib võtta string nagu Zamyla, panna kõik need tähed sees bait mälu. Aga see arv on palju suurem, muidugi, kui kuus tähemärki. Seal on terve hunnik RAM. Ja nii edaspidi, seda ruudustik karbid läheb esindama mida Alex lihtsalt tegin siin ekraanil. Ja nüüd, Alex, pakume sinine või oranž elevant Chang. ALEX: Ma võtan sinine elevant. DAVID J. Humala: sinine elevant. Nii suur aplaus, Kui me suudaksime, Alex siin. [APPLAUSE] ALEX: Aitäh. DAVID J. Humala: Aitäh. Nii Buffee on see, et kuigi muster omamoodi aja jooksul muutunud, siin laual oli see piiritlemine erinevate stringid et Alex sai meile. Nüüd arvutid, öeldes, võiks teha sama asi. Nad võiksid sellist sulpsti stringid kõikjal RAM. Siin, siin, siia alla, siia alla. Nad võiksid teha just nii. Kuid muidugi, et see ilmselt ei ole parim planeerimine. Eks ole? Kui ma küsinud, et Alex saada nimed, ilmselt ta tahaks pane veel siia, äkki üles siin, siin, siin, lõpuks siia. Aga natuke rohkem planeerimist, kindlasti, me võiks panna asjad puhtamalt. Ja tõepoolest, see on, mida arvuti teeb. Aga saak on see, et Kui järgmine string saan pärast Zamyla on midagi nagu Belinda, ettepaneku, kus me võiks kirjutada punkt b seoses selle võrku? Kuhu soovite minna? Paremal, Allpool z, alla? Milline oleks teie esimene instinkt olla? Sihtrühm: Allpool z. DAVID J. Humala: Nii allapoole z. Ja see on päris lihtne, eks? See on selline puhas, see on mida me teeme klaviatuuril kui me Enter, või e-posti tegemisel täpploendit asju. Kuid reaalsus on see, et arvutid püüan olla tõhusam, ja tuupima kindlasti sama andmete RAM võimalikult nii et sa ei raiska baiti. Nii et te ei raiska iga ekraani kinnisvara. Ja probleem, kuigi see, et kui me sõna otseses mõttes panna kirja b pärast, kuidas me saame tea, kus Zamyla nimi lõpeb ja Belinda nimi algab? Nii et teie, inimesed lihtsalt ettepaneku, noh, vajuta Enter klahvi, sisuliselt. Pane see allapoole. Või isegi kui Alex tegi, lihtsalt alustada kirjalikult Järgmise nime all eelmine, ja allapoole, et üks ja siis alla selle. See on visuaalne kii. Arvutid on teine ​​visuaalne kii aga see on veidi lühemalt. See on see funky iseloomu. Kurakaldkriips 0, mis on võib-olla meenutab tagurpidi kaldkriipsuga n, ja nii edasi, nüüd. Eriline põgeneda järjestusi. Kurakaldkriips 0 on viis esindavad kaheksa null bitti reas. 0000 0000. Väljendusviisi, mida ei tabas number null klaviatuuril, sest tegelikult see on ASCII tähemärk. Tundub, et number, kuid on tegelikult koma number mis moodustab ümmarguse tähemärkide, ümmarguse kirjatüüp. Vahepeal längkriipsu null tähendab sõna-sõnalt pane kaheksa null baiti siin minu jaoks. Nii et see on mõnevõrra meelevaldne. Me oleksime kasutanud muster bittide, kuid maailma otsustasid mõned aastad tagasi, et esindada lõpus stringi mälu lihtsalt panna terve hunnik nulle. Kuna me ei tuvasta seda. Nüüd see tähendab, et ei ole kirjas tähestik saab esitada nullidega. Aga see on OK, me oleme juba näinud, et me kasutame 65 kohta kuni 97 üles. Me ei kuhugi Sulge kõik nullid. Nii Belinda sisse arvuti mällu tegelikult lähen siin. Olen juhtinud selle kollasega lihtsalt juhtida meie tähelepanu. Ja teate ka seda on täiesti meelevaldne. Olen juhtinud seda võrku. Like, RAM on vaid mõned füüsiline objekt. See ei pea tingimata Ridade ja veergude per se. See on just kogu kamp baiti rakendatakse riistvara kuidagi. Aga kui pärast Belinda I tipitud Gabe nimi, ta läheb lõpuks siin mälu ja kui ma kirjutada Daven nimi, Näiteks, ta läheb lõpuks siin. Ja ma ei saa jätkata kirjuta veelgi nimed. Kahjuks, kui ma püüan kirjuta super pikk nimi, Ma võib lõpuks otsa mälu. Millisel juhul, getString on läheb tagasi NULL, nagu me ütlesime. Aga õnneks, vähemalt selles visuaalne Siin me ei saa päris nii kaugele. Nüüd sellest, mis on tore on see, et üldine idee ravivad asjad olevaks kastid on esindaja tunnuseks C ja palju keeli, tuntakse massiivi. Massiiv on teist tüüpi andmed. See on andmestruktuur, kui soovite. Struktuuri mõttes tõesti, liiki, mis näeb välja nagu kast, vähemalt oma vaimusilmas. Massiiv on külgnevas jada identsed andmetüüpe seljad et seljad. Nii et string, teistes sõnad on massiivi tähemärki. Array tähemärki. Aga selgub, sul võib olla massiivid kobarad asju. Tegelikult saame panna isegi numbrite massiivi. Niisiis, millisel kujul me ei kavatse hakata kuulutanud andmed struktuur, mida nimetatakse massiivi Samuti ei kavatse kasutada nurksulgudes. Aga need nurksulud ei kavatse on erinev tähendus selles kontekstis. Ja vaatame seda järgmiselt. Oletame, et ma avasin üles uus fail siit. Ja ma hoian seda ages.c. Ja ma jätan selle minu kausta siin. Ja nüüd ma lähen edasi minna ja hakake kirjutama midagi nagu hulka CS50.h sisaldama stdio.h, int main void. Ja siis sees siin, ma tahan kõigepealt on int nimetatakse vanusest. Ja ma lähen kasutada, et saada int kasutaja jaoks tema vanust. Aga see programm on mõeldud kasutada mitu inimest, ükskõik mis kontekstis. Mul on rida inimesi. Kõik nad on sisestada oma vanuse-olla mõned, ma ei tea, konkurentsi, või juhul et nad on saabunud. Nii et järgmine inimene, ma pead teise muutuja. Sest kui ma lihtsalt ei vanus muutub getInt, mis on läheb Tellida või kirjutada Eelmise isiku vanust. Nii et see ei ole hea. Nii et minu esimene instinkt võib olla, oh, eks, kui ma tahan saada mitme inimese ages-- olgem nimetame seda age1, int east2 saab int, int east3 saab getInt. Ja nüüd ma lähen kasutada mõned pseudokoodi koodi siin. Kas midagi need numbrid. Me lahkume teisele päevale, mida me teeme seal, sest me ainult hoolitseda hetk umbes age1, east2, east3. Kahjuks, kui ma koostab selle programmi ja pane see ees tegelikke kasutajaid, mis on põhimõtteliselt halb disain Otsuse Mulle tundub, et on teinud? Jah? Sihtrühm: [kuuldamatu] DAVID J. Humala: Jah, Ma ei ole isegi proovinud aru saada, kui palju igas vanuses ma tegelikult hoolin? Kui mul on vähem kui kolm inimest siin, ja seega vähem kui kolme aegade Ma olen ikka pimesi oodanud kolm. Jumal hoidku neli inimest näha. Minu programm lihtsalt isegi ei toeta neid. Ja nii see pikk lugu Lühidalt, ei ole hea harjumus. Eks ole? Olin sisuliselt kopeerides ja kleepides kood ja lihtsalt tutistamine muutujate nimed. Ja jumal, kui sa olid, mitte kolm vanuses, kuid 10 või 100 või isegi 6500 üliõpilastele, näiteks. See ei saa olema eriti elegantne koodi või jätkusuutlik. Sa lähed pea kirjutada programm iga kord Sinu inimeste arv muutub. Nii et õnneks meie tegelik ages.c faili täna meil on rohkem nutikas lahendus. Esiteks, ma laenata ehitada oleme kasutanud paar korda, seda teha, samas silmus, et saada inimeste arvu ruumis. Ma lihtsalt vaevama kasutaja, uuesti ja uuesti, kuni ta annab mulle n väärtus, mis on positiivne täisarv. Ma oleks võinud kasutada, viimane aeg on saada positiivne int. Kuid me ei ole seda reaalne, et ma läksin edasi ja uuesti rakendada seda ideed. Nüüd siin, see on uus trikk. Vastavalt 27, kui kommentaarid vastavalt 26 ütleb, kuulutada array, kus talletada kõik vanusest. Nii et kui sa tahad saada, mitte üks keskmine, mitte kaks ints, kuid terve hulk ints. Täpsemalt n täisarvu, olid n võiks kolm, võib olla 100, võib olla 1000. Süntaks, lihtsalt, on ütleme, millised andmed tüüpi sa tahad? Mida sa tahad, et helistada et patakas mälu? Mida sa tahad, et helistada võre mis näeb välja nagu see piltlikult? Ja sulgudes siin, te ütlete kui suur sa tahad massiivi olla. Ja nii varem, kui ma ütlesin, süntaks on veidi erinev siin, oleme endiselt kasutades nurksulgudesse aga kui ma kuulutatakse massiiv, arvu sees Nurksulgudes vahendid kui suur sa tahad massiivi olla. Seevastu kui olime kasutades s sulg i hetk tagasi, s, string, on tõepoolest massiivi tähemärki, kuid kui sa ei ole kuulutab muutuja, kui selle märksõna siin, sa lihtsalt saada konkreetsed indeks, konkreetse element selle massiivi. Kui me teame, et ülejäänud see on lihtne. Kui uus ma kõigepealt läheb välja trükkida Mis vanusest isikunumbrist i. Kui ma ütlen isik number üks, isiku number kaks, inimene number kolm. Ja ma teen ainult aritmeetika, et nagu normaalsed inimesed, me loota ühest selle programmi, mitte nullist. Siis ma kutsun getint, kuid ma hoida vastus vanuses ümbritsevad i. Milline on i-nda vanus massiivi. Nii et arvestades viimase aja olime ravivad neid karpe nagu tähemärki eest Zamyla nimi, ja teised. Nüüd on need kastid esindama 32 bitti või neli baiti kus saame salvestada int, int, int. Kõik, mis jällegi on sama andmetüüp. Nüüd ma midagi rumal, nagu aja kulgedes, vaid õigustada kirjutamise programm. Ja siis siin ma taas kinnitada, üle hulga öelda aasta pärast, isik number üks on midagi-aastane. Ja aru saada, et math-- Ma mõtlen, et see ei ole väga keeruline arithmetic-- Ma lihtsalt lisada üks nende vanusest. Lihtsalt, et näidata, jälle see. Just nagu ma ei indeks string, s, nii ma saan index massiivi vanuses, niimoodi on. Nii et kui see läheb tuleb meid? Nii me näeme lõpuks mõned asjad päeva ees. Üks, kõik see aeg, mil kirjalikult oma programme, nagu Mario, ahne, krediidi. Sa oled kirjutades nime programmi ja lööb Enter. Ja siis saada kasutaja sisend. Mis getString, getInt, getLongLong või sarnased. Aga selgub, et C toed midagi, mida nimetatakse käsurida argumendid, mis läheb meile tegelikult saada on sõnad, mis sa kirjutad, juures vilgub kiiresti, pärast teie programmi nime. Nii et päeva tulema, siis võib kirjuta midagi nagu Caesar, või ./caesar number 13, pärast seda. Me näeme, kuidas see toimib. Sest tõepoolest sisse probleem seatud kaks, me oleme läheb teile tutvustada et natuke midagi meenutab Ralphie on vaidlustada varasema kartograafia. Art skrambleerimisbittide teavet. See, et tegelikult on väga meenutab, mida Ralphie tegi. See on näide krüpteerimist algoritmi nimetatakse ROT13, R-O-T 13. Mis tähendab lihtsalt seda, pöörake tähed tähestikus 13 kohtades. Ja kui sa seda teed, näete nüüd mis on võib-olla tuttav lause. Aga kuidas me ei kavatse kasutada Selle lõpuks on üldisemalt. P määrata kaheks, Standard Edition, saate rakendada paar ciphers ühe nimega Caesar, üks nn Vigenere. Mõlemad on vahelduva salakirjad, et kuidagi sa omakorda üks täht arvesse erinevaid kirja. Ja Caesar on super lihtne. Sa lisage esimene kommentaar, kui lisate 13 või mingi arvu kuni 26. Vigenere kas see on tähe kohta eraldi. Nii Vigenere, kui näete aastal spec, on turvalisem. Aga lõpus päeval, mis saate rakendamise ja P panevad kaks, on see, et võti, mida kasutada nii kodeerimiseks ja dekodeerimiseks. Viidates protsess keerates lihttekstina mõned algse sõnumi, arvesse salakiri teksti, mis on midagi, krüpteeritud. Ja siis dekrüpteerimiseks uuesti. Kui häkker väljaanne, Vahepeal, saate kelle ülesanne on midagi sarnast vaimus, kus me anname teile fail, alates tüüpiline Linux või Mac või Unix arvuti nimega Etsy parooli, mis sisaldab kogu hunnik kasutajanimed ja paroolid. Ja need paroolid on kõik krüptitud või räsitud, niiöelda enam korralikult nagu näete, on spec. Ja häkker väljaanne väljakutse Teile võttes sisend niimoodi, ja lõhenemist parooli. See tähendab, et välja selgitada, millised Inimese salasõna tegelikult oli. Sest tõepoolest, paroolid on üldiselt ei säilitata selge, ja üldiselt paroolid peaks olema raske ära arvata. See ei ole sageli juhtunud. Ja ma arvasin, et me tahaks teha, on sõlmida paar minutit Pilk eriti halb valik paroolid alates film võite meenutada hellalt. Ja kui ei ole, siis tuleb rentida. [VIDEO PLAYBACK] -Helmet, Sa paharet, mis toimub? Mida sa teed, et mu tütar? -Permit Mul tutvustada geniaalne noor plastikakirurg, Doctor Phillip Schlotkin. Suurim nina mees Kogu universum ja Beverly Hills. Su kõrgeausus. -Nose Tööd? Ma ei saa aru. Ta on juba oma nina. See oli tema magusa 16. kohal. Ei, see pole see, mida sa arvad. See on palju, palju hullem. Kui sa ei anna mulle kombinatsioon õhku kilp, Arst Schlotkin annab oma tütart tagasi oma vana nina. - [Gasps] Nooooooooooooo. Kust sa selle said? Olgu. Ma ütlen, ma ütlen. Ei, issi, no. Te ei tohi. Sa oled õige mu kallis. Ma igatsen endale nina. Aga ma ei ütle neile, kombinatsiooni ükskõik mida. Väga hästi. Doctor Schlotkin tehke oma halvim. Mu rõõm. Ei! Oota, oota. Ma ütlen. Ma ütlen. Ma teadsin, et see töötab. Olgu, anna see mulle. -The Kombinatsioon on üks. Oon. Oon. Kaks. Kaks. Kaks. -Kolm. -Kolm. -Kolm. Neli. Neli. Neli. Viis. Viis. Viis. -Nii Kombinatsioon on üks, kaks, kolm, neli, viis. See on kõige lollim kombinatsioon Ma kunagi kuulnud olen. See on selline asi, idioot oleks oma pagasi. Tänan teid, Teie Kõrgeausus. [REMOTE CLICKS] Mida sa tegid? Ma välja lülitatud seina. Ei, sa ei ole, sa välja lülitatud kogu filmi. Ma vist vajutanud vale nuppu. Noh, pane see tagasi! Pane filmi tagasi! Jah, söör! Jah, sir. Lähme, Arnold. Tule, Gretchen. Muidugi tean, et ma pean teile arve selle eest. Noh? Kas see toimib? Kus on kuningas? -See Töötanud, sir, me on kombinatsioon. Tore. Nüüd saame võtta iga viimase hinge värske õhk planeedi Druidia. Mis kombinatsioon? Ooni, kaks, kolm, neli, viis. Ooni, kaks, kolm, neli, viis? Jah. -See Hämmastav. Mul on sama kombinatsioon minu pagas. Valmistage Spaceball 1 viivitamatut lahkumist. Jah, söör. Ja muuta kombinatsioon minu pagas. [Uste sulgemine SOUND] [CLINK Väravad tabamine KIIVER] -Ahh. [END VIDEO PLAYBACK] DAVID J. Humala: Ongi CS50, me näeme järgmisel nädalal. Jutustaja: Ja nüüd, Deep Mõtted, mida Daven Farnham. Daven FARNHAM: kodeerimist C on nii palju raskem kui nullist. printf, Scratch, oli vale. [Naer soundbite]