SPEAKER 1: Olgu. Tere tulemast tagasi. See on nädal Kaks CS50, ja meil on siiani kasutades funktsioone, kuid suuresti võetud neid iseenesestmõistetavaks. Oleme kasutanud printf mis on kõrvalmõju trükkimine asjad ekraanil. Oleme kasutanud get-int, saada hõljuda. Aga mis siis, kui sa tegelikult tahad luua oma funktsioone, nagu mõned võite on juba alustanud teha Ülesanded Üks, kuigi mitte tingimata vajalik? Noh, lähme edasi ja vaadata, et probleem lihtsalt paludes kasutaja oma nimi ja trükkimine midagi ekraan, kuid proovige tegurdada mõned Euroopa ühtsust, mida me oleme näha meie kood siiani. Nii et ma mõtlen järgmise. Ma lähen edasi minna ja luua uus programm, helistage see hello.c nagu tavaliselt. Ma lähen edasi minna ja mina sisaldavad standard io.h ülaosas. Ma lähen ka siis ennast preemptively CS50 raamatukogu, nii et Ma ei saa aru karjus poolt tõlkija. Ja nüüd ma lähen edasi minna ja deklareerima int, peamine, tühine. Ja siis siin, see on koht, kus ma tahan alustada tellida funktsionaalsust mõne muu funktsiooni, et ma ise olen kavatsen kirjutada, kuid see ei praegu ei ole. Oletame näiteks, et ma tahtsin kirjutada funktsioon, mis võimaldab mul välja printida tere, koma ja siis mõned kasutaja nimi. Selle asemel, et jätkata seda, printf Tere,% s, kas ei oleks tore, kui oli lihtsalt funktsiooni nimega ei printf kuid print nimi? Nii teisisõnu, ma tahan, et oleks võimalik Kirjutada programm, mis teeb veidi midagi sellist. Esiteks, ma lähen ütlen printf oma nimi, mis ajendades kasutajal anna mulle tema nime, ja siis ma olen kavatse kasutada tuttav string s kuulutada string. Anna tüüpi muutuja stringi kutsume seda s ning kaupluse, et kaasa kutsudes saada string. Aga nüüd nädalat varem, oleksin veidi igavalt tehtud tere,% s / n. Ja Teisisõnu, me oleme näinud selles Näiteks kamp korda, ja see on triviaalne näide, sest seal on vaid üks koodirida nii see tõesti ei ole suur asi, et hoida kirjutades uuesti. Aga oletame, et see rida koodi tegelikult olid koormata, ja see ei ole üks rida koodi, kuid see on 10 rida koodi paar nädalat nüüd, ja sa oled lihtsalt väsinud kopeerimine ja kleepimine või tippida sama kood. Kas poleks tore, selle asemel et teha printf Tere,% s ja nii edasi, kas ei oleks tore, kui seal oli lihtsalt funktsioon nimega print nimi võtab argument - Teisisõnu, see võtab sisend - ja siis semikoolon. Nii et funktsioon, kas ei oleks Ole kena, kui see on olemas? Siis ma ei pea muretsema mida printf on, mida% s ja kõik neid keerukusi, mis on ei ole kõik nii huvitav. Need on kasulikud. Nii print nimi kahjuks ei olnud leiutas umbes 40 pluss aastat tagasi. Keegi arvas, et kirjutada seda. Aga mis on ilu, millel programmeerimiskeel, just nagu Scratch saate määrata kohandatud plokid, nii C ja kõige tahes keeles, sa saad määrata oma funktsiooni, saate sa määrata oma funktsioone. Nii et kuigi me saame peamine poolt automaatselt vabaks saame kuulutada oma funktsioone. Ma lähen tegema ruumi siin üleval ja ma lähen kuulutada minu oma funktsiooni, et läheb otsima natuke imelik alguses, kuid me tuleme tagasi selle enne pikk. Ma lähen ütlen tühine, seega näitab see funktsioon teeb midagi, on kõrvaltoime, kuid see ei tagasta mulle midagi Samamoodi, et saada int või saada string ise teeb. Ja ma annan selle funktsiooni nimi print nimi, ja ma lähen täpsustada, et see mees ei kavatse võtta string, ja ma lähen, et helistada, et string nimi. Ma võiksin nimetada seda, mida tahan, vaid ma tahan oma kood olla füüsilisest isikust dokumenteerimine. Teisisõnu, kui üks sa olid seda faili avada ja seda lugeda, siis võib omamoodi järeldavad nime, et sisend, millist rolli see peaks mängima. Ja nüüd alla, et ma lähen avama lokkis traksidega ja suletud lokkis traksidega, ja nii teate Olen järginud sama mustri rida neli läbi seitse nagu Olen jälginud hea nädal pluss nüüd vahel, ütleme, read üheksa ja 14, mis moodustavad peamise. Teisisõnu, printida nimi on teine ​​funktsioon. Nüüd koostaja ei kavatse teada helistada see asi automaatselt sest ma sõna otseses mõttes lihtsalt leiutas selle, kuid ta ei tea veel helistada peamine automaatselt ja siis muidugi line 13 kutsun ma oma funktsiooni. Ja kuna ma olen teatanud, et funktsioon up line neli enne peamisi, see läheb õpetama koostaja mida tsiteerin lõppeb, "print nimi" tähendab ja mida ta peaks tegema. Nii et ma olen omamoodi annab see uue kohandatud blokeerida kontekstis, ütleme, nullist. Nii et siin, ma ei saa panna, et väga sage või korduv muster kood Hoian kirjalikult klassi printf % S Tere,% s / n ", - Mida ma tahan panna siia? S? Nii et ma tahan panna nimi selles kontekstis. Nii märkate natuke dihhotoomia siin. Sest ma kuulutan oma funktsiooni ja ma olen mõnevõrra meelevaldselt nimetatakse see trükkida nimi ja kuna ma olen sulgudes täpsustatud, et see Funktsioon üks argument, tüüp mis on string - nii et see on sõna või fraas või midagi sellist - ja Ma helistan, et argument nimi, et sugugi ainus muutuja, mis on in reguleerimisala, nii et rääkida, on nimi. S ainult vahel, mida kaks looksulg muidugi? Noh tegelikult, nagu liin 10 kaudu 14, nii lihtsalt meeldib esmaspäeval ei saa kasutada S, kuid see, mida ma teha saan, on edasi S arvesse print nimi. Trüki nimi lihtsalt nii juhtub, et anda sellele alias, sünonüüm, hüüdnimi, nimetades seda nime, ja nüüd kasuta seda joont. Nüüd lubage mul päästa see, zoom out. Lubage mul minna ja teha tere. Paistab hea. Ei sülitama vigu. . / Hello Enter. Mis mu nimi on? David. Ja tere David. Nii et mitte kõik, põnev, kuid mõtle nüüd. Nüüd on teil, et sama koostisosa nagu me tegime Scratch et teha oma funktsioone. Aga seal on natuke gotcha. Oletame, et ma ei olnud tõesti arvasin see läbi ja ma tegelikult ilma tegelikult mõtlesin selle kirjutas et funktsioon siin. Tundub täiesti mõistlik. Scratch puudub mõiste Asukoha oma skripte. Sa võiksid panna ühe siia, üks siin, üks siin, ja see võib hakata vaadata veidi räpane, kui te ei näha seda korralikult, kuid see ei ole oluline, kus füüsiliselt skriptid olid ekraanil. Kahjuks C - ja see on erinevalt keeltes nagu Java ja Python ja teised, et võite olla tuttav koos - kahjuks C, et temal oluline, sest vaata, mis on juhtub nüüd. Vaikefunktsioon mis toimub täitmiseks on muidugi põhiline. Main läheb helistada print nime line kaheksa, kuid kahjuks koostaja ei tea isegi, et print nimi olemas enne, kui see jõuab liini 11, mis kahjuks on saab olema liiga hilja. Teeme teha tere. Ja nüüd neetud, kaks viga tekkinud. Nüüd lubage mul kerida kuni väga Esiteks, nagu me alati teeme, ja märgata, et see on minu peale karjumine, "Kaudne deklaratsiooni funktsioon prindi nimi. " Nii et me oleme näinud seda enne sõnumi, kaudne deklaratsiooni funktsioon. Millal me oleme näinud, et selline viga? Kui ma ei sisaldanud raamatukogu. Kui ma unustasin cs50.h ja ma saaksin karjus eest saada string või saada int. Aga sel juhul, selle funktsiooni print nime pole raamatukogu, eks? See on sõna otseses mõttes seda pilti, nii et mida on tõesti probleem? Noh kahjuks C, kulub teil nii uskumatult sõnalt, et kui sa soovite funktsiooni nimetatakse print nime olemas, siis kas rakendada mis toimivad väga peal oma koodi nii, et see on kättesaadav alandada funktsioone, kuid ausalt öeldes, et muutub lohakas väga kiiresti. Isiklikult mulle meeldib panna peamised esimene sest siis on väga selge, mida see programm teeb esimesel pilgul. Ja pluss, võite sattuda kummaline nurgas kui siis, kui x tahab helistada y kuid y võib helistada x, sa lihtsalt füüsiliselt ei saa tegelikult panna üks peale. Aga selgub, C, saame lahendada väga lihtsalt. Ma panen natuke ruumi siin, ja ma olen lihtsalt läheb ennetavalt, ehkki mõnevõrra liigselt, mida kavatsetakse õpetama hakata koostaja, et on olemas funktsioon nimetatakse print nimi, see võtab stringi, ja ma lähen helistada see nimi semikooloniga. Nii see nüüd vastavalt neli, mis me pole enne näinud, on deklaratsioon ning funktsiooni print nimi, kuid see on ainult luban, et see funktsioon lõpuks tuleb määratleda, lõpuks rakendada. See nüüd ma ei jäta üksi, sest Nüüd on see mõiste, rakendamise, omamoodi viimane miil rakendamise selles Konkreetse funktsiooni. Nii öeldes on see loll, see on tüütu, kuid see on tee C on, ja see on sest see viib teid väga sõna-sõnalt ja, kui arvuti öeldes peaks ainult ei täpselt, mida sa öelda seda, et teha, ja nii, et tellimine on oluline. Nii et hoidke seda silmas pidades, ja jälle hakata teate kordumise mustrid. Koefitsiendid on teil, kui te pole juba alustada kogevad sõnumeid nagu see, mis esmapilgul tunduvad täiesti segasena, kuid kui te alustate otsida need märksõnad nagu "Kaudne avaldus," mainitakse funktsioon sel juhul - ja ausalt, siis mõnikord isegi natuke roheline porgand sümbol, mis ütleb teile, kui küsimus ilmselt on - võite alustada tööd teed kaudu veel nähtamatu veateateid. Kõik küsimused on kirjalikult oma oma funktsiooni niimoodi? Teeme midagi, mis on natuke selgem. Selle asemel, et lihtsalt midagi teha, mis on kõrvalmõju trükkimine, lase mul minna minna ja salvestada uus fail ja me nimetame seda positive.c, kuigi see on kavatse olla natuke erinev versus viimast korda. Ja see kord, ma tahan uuesti rakendada viimane aeg on positive.C näiteks mis on sundida kasutaja anda mulle positiivne täisarv. Aga mul oli kasutada saada int viimast korda. Kas poleks olnud tore, kui seal oli funktsiooni nimetatakse saada positiivne int et ma võiks lihtsalt osta see tükk funktsionaalsust? Seega erinevus on selles, paneme rakendama saada positiivne int, kuid erinevalt print nimi mis oli kõrvalmõju - see ei andnud mulle midagi nagu number või string - saada positiivne int on muidugi läheb tagasi loodetavasti positiivne int. Teeme seda. Kaasa cs50.h sisaldab standard io.h. Int main tühine. Ja nüüd siin, ma lähen edasi minna ja oletame int, nimetame seda n, võrdub saada positiivne int. Ja just nagu saada int juba olemas sest töötajad kirjutas ta, ma lähen eeldada, et praegu, et saada positiivse int olemas, ja nüüd ma lähen minna ja öelda printf, tänud% i / n ", n. Nüüd, kui ma kompileerida seda programmi, mida juhtub minu terminal akna allosas ekraani? Ma ilmselt saan et sama viga nagu enne. Seega proovime seda. Tee positiivne. Ja jälle kaudne deklaratsioon funktsiooni, saate positiivse int. Nii saame lahendada seda paar võimalust. Ma lähen hoida lihtsa ja lihtsalt panen avaldus siin ja saada positiivse int. Mul on vaja nn allkirja. Allkiri lihtsalt viitab et esteetika esimesel real on programmi. Niisiis, mida peaks saama positiivne int tagasi? Nii int. Ma mõtlen ideaalis oleks tagasi midagi positiivset int, kuid et ei ole olemas. Me ei ole näinud, et üks meie andmed tüüpi, nii et me peame tegelema Asjaolu, et meil on väga vähe andmetüübid töötada. Aga me ei saa tagasi int ja lihtsalt usun, et see saab olema positiivne. See saab nimetada saada positiivne int. Ja nüüd, kui umbes tema argumendid? Kas see võtab iga sisend? Kas see vaja sisend? Nii et see ei ole vaja teada, ette midagi. Hangi string ei, saad int ei ole. Printf ei - see peab olema mingi input läks see - ja print nimi vaja mingit sisendit, kuid saavad positiivse int ei ole. Nii et ma lähen selgesõnaliselt ütle koostaja tühine. Void on ilma midagi muud. Nii void tähenda midagi läheb sees need sulgudesse, semikoolon. Ja nüüd allosas minu faili - ja jälle, ma olen lihtsalt selline anal siin paneb peamise ülaosas, mis on hea tava, kuna see viis, millal teie või keegi teine avab faili funktsionaalsus on seal. Võite sukelduda alates algusest. Nüüd ma lähen korrata seda, saada positiivne int tühine, aga ma ei ole läheb löögi semikooloniga nüüd. Ma lähen avama looksulg, ja nüüd ma pean laenama mõned ideed esmaspäevast. Nii nagu te mäletate, me tegime midagi meeldib teha järgmist ajal midagi on tõsi. Ja mida ma tegin? Ma tegin midagi anda mulle positiivne täisarv, natuke kiire. Ma ei kasuta sõnu, mida ma tahan. Ja siis ma kasutasin mida? Int n võrdub saada int, argumente pole seda. Ja märgata erinevust. Kui te helistate funktsiooni, kui kasutate funktsiooni, siis ei panna tühine. Sa ainult seda deklareerimisel funktsioon, õpetades koostaja mida tuleb oodata. Nii et sa ei pea tegema void seal ise. Ja nüüd, mis oli minu tingimus? Noh, n ei võrdu positiivne, kuid see on vaid pseudo-kood. Niisiis, kuidas ma väljendada seda puhtamalt? Nii on väiksem või võrdne nulliga. Nii et taas, teate saate teha väiksem või võrdne. Kuigi see on kaks eraldi sümboleid, saate seda teha klaviatuuri kui sellist. Aga seal on veel viga, mis Ma silmamunad viimane kord ka. Ma pean deklareerima - täpselt. Ma pean deklareerima n väljaspool silmus. Nii et ma vaja panna n siia üles, ja Ma ei ole soovite uuesti kuulutada siin et ma saan uue muutuja. Ma lihtsalt tahan, et määrata väärtus siin. Ja nüüd ma ei ole päris teha siin. Las ma saan enne ise ja teeselda, ma olen teinud. Tee positiivne ja nüüd seal on uus viga. Kontroll jõuab lõpuks mitte tühine funktsioon. Nii uus veateadet, aga kui sa lahke kohta tease peale iga sõna, see Ilmselt vihjab mis viga. Kontrollida. Kontroll tähendab lihtsalt, et operatsioonide programm. Arvuti kontrolli ja midagi läks valesti. Nii et see jõuab lõpuks mitte tühine funktsioon. Mis funktsioon on see ilmselt viidates? Mis ülesanne on mitte-tühine? Nii et saada positiivne int ja natuke segane, et hästi, see on selline tühine. See on kirjeldus void oma argumente, kuid tema toodang läheb olema tüüpi n. Nii sõna vasakul on niinimetatud tagastab tüüp. Sõna sees siin null või rohkem argumente et funktsioon võtab. Mida ma pean tegema? Siinkohal minu kood, joon 21, kus vilgub kiire praegu, ma positiivne int sees muutuja nimega n. Kuidas ma annan selle tagasi main? Sõna otseses mõttes. Tagasi n semikooloniga. Nii nagu Colton tagasi tükk paberile vastus mind visates et paberile väike must kast laual, seda teha koodi, siis sõna otseses mõttes lihtsalt kirjutada, tagasi n, ja see on nii, nagu Colton olid jagab mulle midagi füüsilist tagasi. Sel juhul, mis juhtub, on saada positiivse int läheb tagastama mis eeldatavasti positiivne täisarv kellele? Kuhu see raha lõpuks? See jõuab see muutuja, n, ja siis astume line üheksa. Nii teisisõnu, järjekorras toimingud, see programm hakkab täidesaatva ja koostaja mõistab, oh, sa tahad raamatukogu? Lubage mul minna haarata kõike, mis on sees, et. Oh, sa tahad standard IO raamatukogu? Lubage mul minna haarata kõike, mis on sees, et. Mis koostaja ütlen ise kui see tabab rida neli? Oh, sa lubasid, et rakendada funktsiooni nimetatakse saada positiivne, kuid me jõuame hiljem tagasi, midagi sarnast. Int main void lihtsalt tähendab siin julgust oma programmi. Line seitse on lihtsalt lokkis traksidega. Line kaheksa ütleb vasakul, anna minu 32-bitise täisarvu, nimetame seda n. Paremal pool, see on öeldes saan positiivse int. Nüüd paus, et lugu, sest nüüd Ma ei liigu edasi minu kursor alla. Minu kursor nüüd loojub siin, sest nüüd saan positiivse int hukatakse. Int n deklareeritakse. Tehke järgmist. Printf annab mulle positiivne täisarv. Get int kasutaja, hoidke seda n, ja võib-olla seda uuesti ja uuesti. See ahel tähendab, et see kood võib täitma üles-alla nagu see uuesti ja uuesti, kuid kui kasutaja lõpuks koostööd ja annab mulle positiivne int, ma tabanud rida 21, kus punkt number antakse tagasi, ja kus üks ma peaks esile nüüd? Üheksa. Kontrolli, nii et rääkida, tagastab liinile üheksa. See on joon, mis on nüüd tasuta. Nii et mis siin juhtunud kõik seekord all kapuuts, kuid kui meil kasutada funktsioone nagu printf või isegi saada string, et keegi kirjutas teie jaoks, kontroll oli sunnitud edasi off kellegi koodi rida poolt rida-realt. See on lihtsalt me ​​ei näe seda ja me ei saa tõesti kirjeldada seda selles programm, sest see on mõnes muus faili kõvakettale meile teadmata. Teeme tegelikult kompileerida ja kasutada seda nüüd. Tee positiivne. Koguda, et see edu. . / Positiivne. Anna positiivne täisarv. Olgem raske. Negatiivne 1. Zero. Anname ta 50. Täname 50, ja nii kontroll on nüüd tagasi. Kõik küsimused, siis on seda? Jah? [Kuuldamatu]. Ütle uuesti. Oh, hea küsimus. Nii võite märgata paralleelselt siin, et Ma olen selline lõikamine nurgas. Vastavalt 12, ma väidan, saad positiivse int tagastab int, kuid sama loogika, see nüüd loogiline, et line kuus, ma väidan, et peamine tulu int, kuid mis meil kunagi olid kõik meie programmid? Meil pole kunagi olnud mainitud see võtmesõnaks tagasi. Nii selgub, et C, vähemalt versioon see, et me kasutame valmistatud aastal 1999, tehniliselt, see on toimub automaatselt. Igakord kui rakendada programmi ja te rakendada funktsioon nimega peamine, et funktsioon tagastab nulli Vaikimisi, kui te ei öelda teisiti, ja null on vaid konventsiooni. Maailma tagastab null seeläbi näitab, et kõik on hästi, tõhusalt jättes meid 4000000000 võimalik asju, mis võiksid minna vale, nii et kui me tagasi üks, mis võib tähendada kood, mis tähendab, see asi läks valesti. Võiksime tagasi kaks, mis tähendab, see asi läks valesti. Võiksime tagasi 4000000000, mis tähendab see muu asi läks valesti. Ja kui te nüüd mõtlema oma PC või Mac, võite meelde tuletada, et mõnikord saad segasena veateateid alates tarkvara, mis sa oled kasutavad, ja mõnikord on tal inimese sõbralik kirjeldus, kuid seal sageli kood või number ekraanil? Kui see ei tule meelde, lihtsalt hoida silma peal seda. See on tavaliselt, mida need koodid viitavad. Nad kuuluvad Microsoft Word ja teised programmid, nii et kui sa faili veateatele firmaga, saate ütle neile, oh, ma sain viga number 45. Ja mõned programmeerija tagasi ettevõte saab vaadata, et kuni tema kood ja öelda, oh, see on sellepärast tegin see viga ja sellepärast kasutaja sain selle sõnumi. Aga ausalt, see on lihtsalt veidi häirivad ja natuke tüütu järeldada, et vähemalt meie Esimese paari programmid, et me oleme välja jättes ta. Aga kõik see aeg iga ühe oma funktsioone peamine on salaja oli see line lisatakse automaatselt teie poolt tõlkija, lihtsalt kokkuleppeliselt, et säästa aega. [Kuuldamatu]. Sul ei ole vaja lisada see peamine. See on hea. Sa ei vaja seda, kui sa olid rakendatakse funktsiooni niimoodi. Vastasel funktsioon korter välja ei tööta. Aga peamine, et see ei ole vajalik. In nädal või kaks, me alustada saada arvesse, et harjumus kui tahame alustada tähendades vigu. Tõesti hea küsimus. Nii kiire verbaalne break mainida, et Selle reede, me ei lõunatamas per se, vaid saadame őhtustan mõned õpilased ja töötajad. Kui soovite meiega liituda, võid tasuta minna cs50.net/rsvp. 06:00 see reede. Kosmos on, nagu alati, on piiratud, kuid me jätkata teed neid on peaaegu kord nädalas, kui ruumi otsa sel nädalal. Nii pinge et jätsime maha Esmaspäev oli, et stringe saab tegelikult indekseeritakse arvesse, mis tähendab, et sa saavad esimese märgi, teine ​​märk, kolmas märk ja nii edasi, sest sa võid tõhusalt mõelda string, nagu tere, nagu oleks sel juhul viis tähed sees kastid. Ja saad iga nimetatud lahtrid, mida süntaks kas me tutvustada esmaspäeval? Need nurksulgudes klaviatuuril. See lihtsalt tähendab, minge asukohta null. Alustame nullist, nii et sulg null tähistab h, sulg üks tähendab e, ja nii edasi. Ja nii kogu aeg, kui me oleme abil stringid ja kirjutama "tere" ja "maailm" ja muid asju ekraan, see on hoitud lahtrites niimoodi. Ja võtke oletus. Mis igas kastis esindama füüsiliselt sees arvuti? [Kuuldamatu]. Vabandust? Lõbu. Nii iseloomu, kindlasti puhul stringide ja iseloom on lihtsalt kaheksa bitti või üks bait. Nii et ilmselt on vähemalt ähmaselt tuttavad asjaoluga, et oma Arvutil on mälu. See on kahte tüüpi mälu vähemalt. Üks on kõvakettal, kuhu salvestada kraami püsivalt, ja see on tavaliselt suur, siis võite olla filme muusika ja nii edasi. Siis on teist tüüpi mälu nimetatakse RAM, R-A-M, Random Access Memory, ja see on tüüpi mälu mida kasutatakse siis, kui arvuti on töötab, aga kui sa kaotad võimu või oma aku sureb, midagi, mis on salvestatud RAM kaob, kui sa kaotad võimu üldse, sest see ei ole püsiv. Siis tavaliselt on need päevad, kaarik on kaks kontserti, võibolla rohkem. Ja teistpidi RAM on, et see on palju palju, palju kiiremini kui kõvakettad või isegi SSD kõvakettad nendel päevadel, aga see on tavaliselt kallimad, nii sul on vähem seda. Nii tänane vestlus tegelikult viitab RAM, mis tüüpi mälu, mis olemas ainult siis, kui seal on võim söödetakse arvutisse. Nii et kui sa kirjutad H-E-L-L-O, Enter klaviatuur, H läheb üks bait RAM, E läheb teine ​​bait RAM, nagu on ülejäänud sõna. Nii meenutada, mida me suutsime teha viimane kord oli see. Lubage mul minna ja avada fail et me kutsusime string.c ja meenutavad et see tundus vähe midagi sellist. Lubage mul tegelikult tagasi pöörata ja muuta see täpselt see, mida ta nägi, string pikkusega s. Nii vaatate programmi siin. Me sisaldama CS50 raamatukogu nii et saame kasutada saada string. Me sisaldama standard io.h nii saame kasutada printf. Miks me hulka string? See oli uus esmaspäeval. Nii et me tahtsime string pikkus. Str leng. Inimesed otsustas aastaid tagasi, Olgem lühidalt. Selle asemel, nimetades seda "string pikkus" kutsume seda "str leng" ja lasta maailma näitaja läbi, ja nii see on mida me pääse koos string. See on tuttav. See on tuttav. See on tuttav. See on natuke uus. Kooskõlas 22 - ja me tuleme tagasi sellele, kuid nüüd teame - ja sa oleks vaid tean seda omamast dokumentatsiooni lugeda või kui sa teadsid C juba - saada string mõnikord võib kägardama. Kui kasutaja on tõesti võistlev või koostöövalmiduse ja ta lihtsalt ei kirjuta midagi klaviatuuri või liigid niivõrd klaviatuur, mis see haarab arvuti mällu teoreetiliselt saada string võib naasta midagi muud kui märgijada. See võib naasta eriline väärtus nimega NULL kõik mütsid, T-U-L-L, ja see on lihtsalt nn valvur väärtus. See on eriline väärtus, mis tähendab midagi halba juhtunud käesolevas asjas. On puudumisel string. Nii tühjaks Ma kontrollin jaoks lihtsalt nii, et pikk lugu lühike, str leng ja muid funktsioone, mis tulevad koos C, kui nad ootavad string kuid te kaotate neid Kuna string, kui te kaotate neid nullimine, arvuti või programmi lihtsalt krahhi tähelepanuta. See riputada. See öökima mõned veateate. Halbu asju juhtub. Nii et kuigi see on veel mitte täpselt määratletud - seda mõttekam on nädalas või kaks - vastavalt 22, see on lihtsalt Näiteks füüsilisest kaitsev veatuvastuse igaks juhuks üks kord välja miljoni midagi läheb valesti, on Vähemalt minu programm ei krahhi. Nii et kui te ei ole võrdne midagi halba, Mul on seda loop, ja see oli kus meil oli, et teised uus tükk süntaks. Mul on silmus iterating alates null kuni pikkus s. Ja siis siin, olin trüki välja s sulg i, kuid miks ma kasutan% c kõik ootamatu asemel% s isegi kuigi s on string? See on märk, kas pole? S on string, kuid s sulg midagi, s sulg i kus i on null või üks või kaks, see on individuaalne märgi string, ja nii kohta et printf tuleb teavitada, et see on tõesti märk oodata. Ja siis meenutada, mis tegi programm tegelikult teeb? Trükitud see välja veerud. Jah, täpselt. See lihtsalt trükitud sõna, et ma kirjuta kolonn, üks märk igale reale. Vaatame seda uuesti. Nii et string. Koostanud OK. . / String. Las ma kirjuta H-E-L-L-O, Enter ja tõesti Ma saan aru, üks rea kohta. Nii et lubage mul teha üks optimeerimise siin. Kui mõtled seda, eriti kui oled programmeeritud enne, seal on väidetavalt ebatõhusus line 24. Teisisõnu, see ei ole tingimata parim disain. Arusaadav, vähemalt kui sa mäleta, mida str leng on, kuid see on midagi loll olla. Mis see võiks olla? [Kuuldamatu]. Täpselt. See kontrollimine pikkus s iga kord, kuigi H-E-L-L-O alati saab kuni viis tähemärki. Iga kord, kui läbi selle silmuse, viis ei muutu. Ma võiks incrementing i, kuid mida on pikkus s iga iteratsiooni see loop? See on viis, see on viis, see on viis, ja kuid ma olen siiski küsida seda küsimus uuesti ja uuesti ja uuesti. Nüüd ausalt öeldes arvuti on nii kuradi kiire, keegi läheb teade vahe sel juhul, kuid sellised halva disaini otsuseid võib hakkavad tõusta, kui koostaja ise ei püüa seda parandada teid, mis ta tavaliselt ei teeks, on vähemalt aparaat. Ma lähen seda tegema. Ma lähen Koma pärast minu esimene muutuja i. Ma annan endale veel muutuja, nimetades seda n, lihtsalt konventsiooni numbreid ja siis ma olen kavatse anda n väärtus string pikkus s. Ja siis ma lähen muuta minu tingimus oleks see, mida? Ma muudan tingimus et kui ma alla n. Nüüd, kui mitu korda olen ma kontrollides pikkus s? Kord, kuid see on OK, et kontrollida i vastu n ja jälle, sest nüüd need väärtused ei ole tegelikult muutumas. Nüüd kohe, lihtsalt teada, et millal helistada funktsioon, seal on natuke üldkulud, ei piisa, et takistada teid tegelikult enam kunagi kasutades funktsioone, kuid kindlasti, kui seal on rida koodi niimoodi - ja liinid saavad huvitavam enne pikk - kui seal on võimalus mõelda, kui ma kirjuta see kood, kui palju korda on ta ellu? Hakkate näha ajas täita oma programme saab tõepoolest muuta. Tegelikult üks probleem seab oleme teinud varasematel aastatel hõlmab rakendamisel, nagu te võib-olla mäletate alates nädal null, õigekirjakontrolli, kuid Õigekirja kontrollija, mis on kavandatud toetama sõnaraamat 150000 pluss sõnad, mis me teile poisid. Sa oleks kirjutada kood, mis laeb need sõnad RAM, nii et arvesse kastid nagu nägime ekraanil hetkeks tagasi, ja siis nii kiiresti kui ei, sa pead suutma vastata küsimus vormis, on see sõna valesti? Kas see sõna valesti? Kas see sõna valesti? Ja midagi sellist, mida me oleme teinud varasematel aastatel on välja see, ehkki opt-in vabatahtlikult konkurents kehvasti, kusjuures õpilased, kes kasutavad vähem RAM ja vähem ajal vähem protsessori, lõpetame vahustamine kuni tippu veidi juht pardal või pingerida et me panna Muidugi kodulehte nagu me oleme teinud varasematel aastatel. Nii et taas, täiesti vabatahtlik, kuid see räägib disaini võimalusi mis on ees, kui me hakkame hoone atop mõned neist ehituskive. Nii et lubage mul minna tagasi selle skeemi hetk ja paljastada vähe midagi enamat. See tõesti on string, ja me oleme võtnud ära mõned raamatukogud, standard io.h mis on - Printf. Printf, muu hulgas. cs50.h, mis on saada int ja saada string ja nii edasi, string, mis oli str leng. Aga selgub, seal on veel üks. Ausalt, seal on palju ja palju header faile, mis kuulutab funktsioonid raamatukogude, kuid see ctype.h on tegelikult saab olema mõnevõrra kasulik, sest ma lähen minna ja rakendada üks muu programm siin. Lubage mul minna ja avada midagi Kirjutasin eelnevalt kutsunud capitalize.c ja võtame Vaata, kuidas see töötab. Pange tähele, et ma kasutan, et see versioon see, kolm tuttav faile. Pane tähele, et rida 18, ma olen saada rida teksti. Teade liin 21, ma olen väites, et järgmine kood läheb ära s, olenemata kasutaja sisestatud aastal, ja kuidas ma teen seda? Noh, ma võtan - õppetund viimast korda - Teatan i ja n ning iterating üle märkide string. Ja mis siis on see plokk koodi rida 24 kuni 27 teeme üldarusaadavat mõttes? Väiketäht tagasi. Täpselt. Kui te sulg i - nii et kui i-nda iseloomu s, mis on spetsiifiline char string on suurem kui võrdne või väiketähed ja - meelde tuletada, et topelt-märk tähistada ja - ja sama märk, s sulg i, on väiksem või võrdne väiketähed z, mis tähendab, et see või b või c või dot, dot, dot, või z, mis tähendab, see on väiketähed. Mida ma tahan teha sel juhul? Noh, ma ei saa seda teha mõnevõrra cryptically, kuid olgem kiusupunn see peale. Ma lähen kutsun printf, prindib% c sest ma tahan kordustrükk see märk ekraanile. Ma siis kavatseme s sulg i, i-nda märgi s ja siis miks ma teen seda veidi trikk siin väiketähed miinus kapitali? Mis on see, et annan mulle üldiselt? [Kuuldamatu]. Täpselt. Ma tõesti ei mäleta - see oli 65 kapital A. Ma tõesti ei mäleta, mida väiketähed on kuid ükski asi. Arvuti teab. Nii öeldes, väiketähed miinus kapitali, see on imelik olla lahutatakse üks char teise, kuid Millised on sümbolid all kapuuts? Nad on lihtsalt numbrid. Mida iganes need numbrid on, lase arvuti mäleta mitte mulle inimene. Nii väiketähed miinus kapitali on annan mina erinevus. See juhtub olema, 32, ja et oleks puhul väiketähti b ja kapitali B ja nii edasi. See püsib muutumatuna, õnneks. Nii et ma olen põhiliselt öeldes võtma väiketäht, lahutada maha, et standard erinevus, ning et tõhusalt muutuste s sulg i alates väiketähed, muidugi, suur-, ilma minu tõesti võttes mõelda kohta või mäletad, millised olid need numbreid me rääkisime, kui kaheksa vabatahtlikud tulid lavale? Nüüd vahepeal on muud, kui see ei ole väiketäht määratud realt 24, lihtsalt printida. Ma tahan ainult puudutada märgid, mis olid tegelikult algselt väiketähed. Vaatame seda. Tee ära. Koostanud, OK. . / Lõikama. Ja las ma kirjuta H-E-L-L-O väiketähtedega, Enter. Ja teate, mis on ümber arvesse suurtähtedega. Las ma teen seda jälle eri sõna. Kuidas D-A-V-I-D esimese D kapitaliseeritud nimi tavaliselt on? Enter. Teade see on ikka õige. See lihtsalt väljastada et esimene D muutmata kaudu, mis muidu ehitada. Nii et pidage meeles, siis paar asja siin. Üks, kui sa kunagi tahad, et kontrollida kaks tingimustel korraga, saad ja neid koos, kui me ennustada. Võite võrrelda tähemärki sel viisil ja tõhusalt ravida märgid numbrid, aga ausalt, see on nii kuradi segasena ma kunagi meeles kuidas tulla see nullist ilma põhjendusi läbi see täiesti natuke aega. Kas poleks olnud tore, kui keegi seal kirjutas funktsioon nimega on alandada, mis võiks vastata mulle tõeline või vale, see märk on väiketähed? Noh õnneks kes kirjutas ctype.h just tegigi. Lubage mul minna siia ja lisage ctype jaoks c liigid ja nüüd ma lähen alla ja Kirjutan selle rea järgmiselt. Nii et kui seda nimetatakse on väiksem, ma väita, s sulg i, siis ma lähen kustutada need kaks rida kokku. Nüüd keegi, ma loodan, kirjutas funktsioon nimega on väiksem, ja see Tuleb välja, et nad tegid ja nad kuulutatud see sees ctype.h. Ja nüüd ma lähen lahkuda line 27 üksi, ma lähen lahkuda line 31 üksi, kuid teate, kui palju ma olen karmistada oma kood. See on nüüd puhtam. See on vähem raske vaadata läbi sest nüüd funktsioon on lisaks nii imeliselt nimetas seda lihtsalt teeb mida ta ütleb. Nüüd ma lähen salvestada. Ma lähen välja suumida. Ja just nagu Scratch te oleksite Tõeväärtused Kahendmuutujad tõsi või vale, see on täpselt see, mida on alandab tõhusalt tulu. Las ma kompileerida. Lubage mul uuesti jooksma. Ja nüüd proovime uuesti, H-E-L-L-O, Enter. See on päris hea. Ja proovige uuesti, veendumaks, et ma ei kruvi midagi välja. See on kapitaliseeritud samuti. Aga see ei ole piisavalt hea, sest Teine asi, mida ma kunagi mäletan, kui ma töötan läbi see tõesti ettevaatlikult, ütleme, paber on see pagana joon. Kas poleks tore, kui oli funktsiooni nimetatakse ülemise? Noh selgub seal on ctype.h samuti. Ma lähen edasi minna ja kirjutada - lubage mul tuua selle joone taga. Selle asemel siin, lase mul minna ja öelda, asenda% c tulemusena kutsudes seda funktsiooni ülemine on i-nda iseloomu s. Ja nüüd teate, et see muutub veidi tasakaalustada. Mul on jälgida, kui palju Sulgudes Olen avatud ja suletud. Nüüd on see veelgi puhtamaks. Nüüd on see programm hakkab parem ja paremini kavandatud väidetavalt, sest see on palju, palju rohkem loetav kuid see ei lase nii. Tee ära. . / Lõikama. H-E-L-L-O. Olgem kasutada seda uuesti, D-A-V-I-D. OK, nii et me oleme ikka päris hea kuju. Aga nüüd, et ülemine. Pakun, et seal on veel üks täiustamise saaksime et oleks tore, et võiks tõesti pingutada kuni see kood ja tegelikult annab meile viis Viiest projekteerimiseks, näiteks. Mida oleks tore vabaneda? Noh, vaata kui kuradi kaua see plokk kood on lihtsalt teha midagi lihtsat. Nüüd kui kõrvale, nagu te võib-olla näha super osa möödunud nädalavahetus, siis ei ole rangelt vaja looksulg kui sa lihtsalt üks koodirida, kuigi me pakkusime hoida neid nii, et ta teeb palju veel selge, nagu Scratch U-kujuline plokid, mis seal sees on filiaali. Aga kas ei oleks tore, kui ülemise, kui andnud oma panuse, pöördus see suureks kui see ei ole, ja see, mida oleks imeline, vastupidisel juhul, kui see on juba suur-? Lihtsalt lastakse läbi ja jäta ta rahule. Nii et äkki ta ei tee seda. Ma võiks proovida ja lihtsalt loodan, et see, kuid lubage mul tutvustada veel üks asi. Selle asemel, see sisseehitatud terminal aken siia, meelde tuletada, et Selle ruudu must ikoon annab teile suurem terminal akna, et ma saan täis ekraani, kui ma tahan? Nii selgub, et nad omamoodi kummaliselt nime, kuid seal on neid asju nimetatakse man, manuaal lehti mees lühikeseks, ja ma saan kasutada neid, mida kirjutades mees - Mida ma tahan tüüpi? Man ülemine. Ja nüüd teate, kui on olemas funktsiooni sees arvuti, sisse Sel juhul on seade, mis on lihtsalt operatsioonisüsteemi Linux, see läheb mulle veidi segasena komplekt väljund, kuid leiad aja, et alati on vormindatud päris palju sama nii hakkate harjuda. Teade ülaosas ülemise ja ilmselt on sama dokumentatsioon jaoks alandada. Kes kirjutas ta lõikamise mõned nurgad ja panna see kõik ühel lehel. Need asjad "eesmärk elu on teisendada kirjas Suur-ja väiketähti. Pange tähele, et alla Synopsis, man õpetab mulle, mis fail on mul lisada, et kasutada seda asja. See annab mulle allkirju need funktsioonid, mõlemad on isegi kuigi me praegu ainult hooli üks. Siin on nüüd kirjeldus. Ülemise teisendab kirja c suureks kui võimalik. Ikka ei ole nii õpetlik, kuid lubage mul Nüüd vaadake tagasi raha, asi mis on kätega tagasi. Seega väärtus tagastatakse on see, et ümber tähe või c, kui muutmine ei ole võimalik. Mis on c? Algne iseloom. Originaal iseloomu ja me teame, et jälle läheb kuni ülevaate, ja kes iganes selle kirjutas funktsioon lihtsalt otsustas, et sisestada et ülemise ja alumise on lihtsalt omavoliliselt nimetama hakatakse c. Nad oleksid võinud seda nimetas kõige midagi nad tahavad, kuid nad hoidsid seda lihtne kui c. Nii et ma olen konsulteerinud mees lehele. See lause rahustab mind, et kui see ei ole väike täht, see on lähed anna mulle tagasi c, mis on täiuslik, mis tähendab, et ma saan lahti minu teine ​​tingimus. Nii et lubage mul minna tagasi gedit ja Nüüd lubage mul seda teha. Ma kopeerida minu printf avaldus. Ma lähen edasi minna ja õige sees loop print läbi, ja saada lahti nüüd kogu see kui ehitada. Kas ei ole halb mõte, ja see oli väga palju õige ja kooskõlas kõik oleme kuulutanud, kuid lihtsalt ei ole vaja. Niipea, kui sa mõistad, mõned raamatukogu funktsioon on olemas, et keegi kirjutas, või äkki sa kirjutasid mujal fail, saab seda kasutada ja tõesti alustada karmistada kood. Ja kui ma ütlen asju nagu hea stiil, Asjaolu, et see isik nimetatakse funktsiooni, et ülemine või varem on madalam on imeliselt kasulik, sest nad väga kirjeldav. Sa ei taha, et helistada oma ülesandeid x ja y ja z, mis on palju, palju vähem tähendust. Kõik küsimused selle seeria parandusi? Seega piisab, kui öelda üks takeaways on isegi oma probleem set - äkki lahendamist, vaid kindlasti P seatud kaks ja edasi, isegi kui nad on õige ei pruugi tähenda, et nad on täiuslik lihtsalt veel või hästi disainitud. See on teise telje hakata mõtlema. Nii et see oli string sees oma arvuti mällu, kuid kui teil on terve hunnik sümboleid, näiteks H-E-L-L-O sees RAM, ja arvan, et sinu programm helistada saada string mitu korda nii, et sa kutsuvad saada string kord, siis helistada saan stringi. Noh, mis läheb juhtub aja jooksul? Teisisõnu, kui teil on joon kood, ehkki kontekstist välja, nagu string s saab - Teeme seda. String nimi võrdub saada string. Olgu, oletame, et koodirida on mõeldud küsida kasutajalt tema nime. See järgmise koodirida mõeldakse küsida kasutaja jaoks tema kooli ja see järgmisele reale, ja nii edasi. Oletame, et me küsime endiselt kasutaja teise ja teine ​​ja teine ​​string. Nad ei kavatse jääda mälu samal ajal. Üks ei kavatse Tellida muud. Kool ei kirjuta muud. Aga kus nad kõik sattuda mälu? Noh, kui me hakkame juhtida ekraanil mida saame kasutada seda asja siin nagu tahvlile, kui see must ristkülik esindab minu arvuti mälu, ma lähen suvaliselt alustada jagades selle üles võetud väike ruutu, millest igaüks esindab üks bait mälu. Ausalt, kui teil on GB RAM Nendel päevadel, teil on miljard baiti mälu arvutisse, nii et miljardi need ruudud. Seega piisab, kui öelda, et see tegelikult ei ole skaalal. Aga me võiksime hoida joonistus kõik need selgelt ei ole mõõtkavas ruudud ja see kollektiivselt esindab mu arvuti mällu. Nüüd me lihtsalt teha dot, dot, dot. Nii teisisõnu, kui ma nüüd kiire kasutaja get string mulle string, mis juhtub? Kui kasutaja liigid "tere", mis lõpeb üles H-E-L-L-O. Aga oletame kasutaja siis liigid - tegelikult, ma ei oleks pidanud tere kuna me palume neid oma nime all. Seega lähme tagasi, kui ma ei tee seda. Nii et kui ma tüüpi D-A-V-I-D minu nimi, aga meelde tuletada, et teine ​​rida kood oli saada stringi saada oma koolis. Kus on see sõna, mida kasutaja liigid lähe edasi? Noh, võib-olla see läheb minema H-A-R-V-A-R-D. Nii et kuigi ma olen ära, kui kaks rida, see on lihtsalt terve hunnik baite oma arvuti RAM. Seal on probleem nüüd, sest nüüd, kui ma olen kasutades RAM selles väga mõistlik aga omamoodi naiivne tee, mida saate ei ilmselt vahet? Kui üks algab ja kus üks otsas, eks? Nad on omamoodi hägustumas kokku. Nii selgub arvuti ei tee seda. Las ma tegelikult liikuda ajas tagasi mõned märgid, ja selle asemel, et Harvard läheb kohe pärast kasutaja nimi, kasutaja tegelikult muutub, taga stseene, erimärk lisatud arvuti temale. / 0, muidu tuntud nul iseloomu tüütult nimega N-U-L, ei N-U-L-L, kuid sa kirjutad seda / 0. See on lihtsalt kõik null bitti on SM vahel esimene sõna, et kasutaja kirjutatud ja teine. Nii Harvard tegelikult nüüd jõuab kui see märgijada ja veel üks / 0. Nii teisisõnu, lastes need valvur väärtused, kaheksa külgnevas null bitti, saab nüüd hakata eristama üks märk teisest. Nii et kõik see aeg, mis on "tere" on tegelikult "Tere" / 0, ja Vahepeal võib väga hästi olla üsna natuke rohkem RAM arvuti sisemus. Lubage mul teha üks asi nüüd. Selgub, et kõik need väljakud oleme olnud joonistus, nad on, jah, stringid, kuid üldisemalt need asjad on massiivid. Massiiv on lihtsalt tüki mälu see on seljad et seljad, ja sa tavaliselt kasutada massiivi teel Selle nurksulg märke. Nii et me näeme neid üsna vähe aja jooksul, kuid lubage mul minna ja avama, ütleme vanuses. Ja teate, mis me saame teha koos neid samu trikke, veidi natuke rohkem süntaks siin. Nii rida 17 on see programm - tegelikult, las ma käivitada programmi esimene nii et me saame näha, mida see asi teeb. Las ma helistan teha vanuses koostada programmi. . / Aegade. Mitu inimest on ruumi? Kõne see kolm. Vanus esimese inimesena? 18, 19, ja 20. Ja nüüd veidi naeruväärselt, ma lihtsalt on teinud programmi, mis vanuses need kolm inimest. Nii et seal on selgelt võimalus lõbutseda aritmeetika siin. Õnneks matemaatika on õige. 18 läks 19, 19 läks 20 ja nii edasi. Aga mis tegelikult mõeldud olema illustreerivad siin on, kuidas me hoidmine Nende kolme inimese vanuses. Lubage mul suumida, mida on siin toimub. Nii et esimene, need paar esimest rida peaks saada üsna tuttav. Ma lihtsalt sunnib kasutaja inimeste arvu ruumis. Siis ma kasutan saada int ja teha samal ajal, et seda uuesti ja uuesti ja uuesti. Me oleme näinud, et muster enne, kuid line 27 on uus ja tegelikult üsna kasulik ning muutub enam kasulik. Pange tähele, et see, mis on erinev vastavalt 27 on see, et ma tundub, et kuulutatakse int nimega vanuses, kuid oota. See ei ole lihtsalt int aegade. Seal on need nurksulgudesse mille sees on n. Nii sulg n selles kontekstis ei sees printf avaldus siin aga Selles ainus liin 27, see liin on ütles mulle n ints, millest igaüks on tüüpi int. Nii et see on ämber, nii et rääkida, on, sel juhul kolm täisarvu tagasi seljad et ma tõhusalt on kolm muutujat. Alternatiivina oleks selge, oleks see. Kui ma tahtsin esimese õpilase vanusest, ma võin seda teha. Kui ma tahtsin teise õpilase vanus võin seda teha. Kui ma tahtsin kolmanda õpilase vanusest, ma võin seda teha. Ja jumal hoidku peame igaühe vanus selles ruumis - Ma mõtlen, et see on paganama palju koopia, pasta ja jälle ja jälle. Ja pluss kui ma kompileerida seda programmi, kui teine ​​üliõpilane kõnnib üle viia selle ukse, nüüd minu number muutujaid on vale. Mis on ilus umbes massiiv on niipea kui hakkate tunne ennast kopeerimine ja kleepimine, koefitsiendid on see mitte parim lahendus. Massiiv on dünaamiline potentsiaalselt. Ma ei tea ette, kui palju inimesi hakkavad olema ruumis, aga ma tean, mul on vaja n neist ja ma nuputada, n, kui aeg tuleb. See koodirida tähendab nüüd, anna mulle tüki mälu, mis näeb välja selline kus kastide arv ekraanil sõltub täielikult n, et kasutaja sisestatud sisse Nüüd ülejäänud seda programmi tegelikult üsna sarnane sellega, mida me tegin tegelastega. Teade mul silmus alates rida 30. Niisiis peale saan massiiv, I itereerima alates y võrdub null kuni n. Mul on ainult see õpetlik printf sõnum lihtsalt ütlen, anna mulle vanus Isiku #% i, nii et number üks, number kaks, number kolm. Ja miks ma seda teen? Ausalt, inimesed eelistavad lugeda ühest püsti et arvuti teadlased, nulli siia. arvuti teadlased ei kavatse kasutada sellist programmi, nii et me oleme läheb lihtsalt hakka lugema üks nagu normaalsed inimesed. Ja nüüd vastavalt 33, märkate veidi erinev tükk süntaks. I-nda vanuse mis tüüpi muutuja massiiv on hakka int. Ja nüüd lõpuks, see on lihtsalt aritmeetiline siin. Ma otsustasin eraldi loop nõuda mõnda aega möödub, ja nüüd on see eraldi loop, need read täita. Aasta pärast, inimene i saab i aastat vana, kuid teade ei ole muutujale i. See on nüüd% i jaoks int. Ja teate esimest kohatäide, I pistik i pluss 1, seega me loota, nagu normaalne inimene. Ja siis, et raha nende vanusest i-aastane, mul kuluda sulg i - ja miks ma teen pluss üks siin? Nad lihtsalt vanuses. See on minu loll programmide valiku. Nad lihtsalt aastastel. Ma ei kirjuta iga number, mis Ma tegelikult tahan seal. Mis on tegelikult kõik tekst siin? Noh, las ma tegelikult kerida tagasi siin ja maalida pilti mis ees ootab. Mida me teeme, meie kõrval Ülesanded Kaks on dabbling maailma krüptograafia. Nii et see on märgijada, nii jada mitu tähte, ja mida see ütleb? See ei ole online-versioon kohta slaidid. Nii et ma väita, et see võrdub see, loll reklaam paljude aastate tagasi, et võiks tegelikult meenutada üks selle päritolu. Nii et see on näide krüpteerimist või krüptograafia. Selgub, et kui sa tahad tegelikult saata teavet või osa teavet keegi kindlalt, nagu selline teade, saate rüselus tähed. Aga tavaliselt, sõnad ei Segipaisatud juhuslikult. Nad permuteeritakse mingil moel muutunud kuidagi nii, et - oih. See on lõbus spoiler järgmine kord. Nii saab kaardistada, mis on ilmselt O B. Pange tähele, et read üles kapitalisatsioon tark. Ilmselt r muutub e. Ilmselt F-H-E-R saab S-U-R-E. Nii Selgub seal kaardistamine ja Sel juhul on päris loll kaardistamine, kas keegi on aru saanud? See on midagi, mida nimetatakse Rot 13, Pööra 13. See on kõige lollim krüpteerimist mehhanisme, sest see sõna otseses mõttes lihtsalt lisab 13 iga üks tähti, loll selles mõttes, et kui sa lihtsalt on natuke vaba aega oma käed ja pliiats, või sa lihtsalt arvan, et see läbi oma peas, võid proovida kõik võimalikud lisandused - üks, kaks, kolm, dot, dot, dot, 25 lihtsalt pööramiseks kogu tähestikku ja lõpuks, siis saad aru, mida see sõnum on. Nii et kui sa tegid midagi sellist algkool kulgeb sõnumeid oma Parim sõber, kui oma algkool õpetaja lihtsalt läbi lugeda sõnum ja loomalik sunnitud lahus võite olla saanud Vastus, et. Nüüd muidugi, reaalses maailmas, krüptograafia on keerukamad. See on väljavõte teksti arvutisüsteem, mis on kasutajanimed ja paroole, nagu peaaegu kõik meie teha ja see on see, mida oma parooli võib nägema kui salvestatud raske sõita kuid krüpteeritud kujul. See ei ole lihtsalt rotatsiooni tähed On B ja B on C. See palju keerukam, kuid ta kasutab mis üldiselt tuntud kui salajane võti krüptograafia. See pilt ütleb järgmist lugu mõne ikoonid. Vasakul, meil on see, mida me kutsume lihttekstina. Tänapäeva maailmas on krüptograafia, tavaline tekst on lihtsalt algse sõnumi kirjutatud inglise või prantsuse või keel üldse. Kui soovite krüptida ta, siis me edasi see piltlikult läbi tabalukk, nii mõned liiki algoritmi mõne funktsiooni või programmi, et keegi kirjutas et ajaja tähed loodetavasti rohkem complicatedly kui lihtsalt lisades 13 igaühele neist. Mida sa välja, et protsessi keskel on kutsutud cyphertext. Nii omamoodi seksikas sõna. See tähendab lihtsalt, et see on krüpteeritud versioon lihttekstina. Ja ainult siis, kui sul on see sama salajane, 13 või miinus 13, on teil võimalik dekrüpteerimiseks sõnum niimoodi. Nii Ülesanded Kaks hulgas asjad saate teha, kui ka Hacker Edition, siis on vaja kirjutada koodi crack nende paroolide figuring mida nad olid ja kuidas nad olid krüpteeritud, kuigi me teeme teile natuke juhendamise teel. In Standard Edition, tutvustame paar ciphers krüpteerimine mehhanismid, üks nimega Caesar, üks nimetatakse Vigenere, mis on veel vahelduva ciphers kus saab midagi, B muutub midagi, kuid sa pead seda tegema programmiliselt sest seal on tõepoolest saladus võti kaasatud, mis on tavaliselt number või märksõna, mis ainult saatja ja saaja need kirjadest aru. Nüüd, see on tegelikult inkarnatsiooni reaalses maailmas. See on näiteks vähe harva Annie salajane decoder ring, ja sa saab tegelikult rakendada neid vahelduva ciphers - Muutub midagi, B muutub midagi - koos paari rattaid, üks väljaspool, üks sees nii et kui te pöörake ratast või ring, saab tegelikult rivistama tähed erinevate tähtedega, saada salakood. Ja nii nagu pinge täna, mida ma mõtlesin, et ma teha, on natuke Sarnasusi et kui lülitate TV 24. detsembril, saab vaadata film ad nauseum eest 24 tundi järjest. Aga täna, ma seda avatumaks siin ja anna meile ainult kaks minutit pedagoogiliselt asjakohane Christmas Story koos väikese mehe nimega Ralphie. [VIDEO PLAYBACK] -Olgu see kõigile teada ja mitmesugused et Ralph Parker nimetatakse liige Little Orphan Annie saladus ringi ning tal on õigus kõigile kiitusega ja hüvitised esinevad lisa. Allkirjastatud, Little Orphan Annie. Allkirjastas Pierre Andre tindiga. Kiitusega ja kasu juba aastaselt üheksa. [Karjumine raadio] Tule, lähme edasi. Ma ei pea kõik, mis jazz umbes salakaubavedajate ja piraatidest. Kuula homme õhtul sõlmides seiklus must Piraatlaeva. Nüüd on aeg Annie Secret Sõnum teile kohal saladus ringi. Pea meeles, et lapsed. Ainult liikmed Annie Secret Circle saab dekodeerida Annie salajane sõnum. Pea meeles, et Annie on sõltuvalt teile. Määra oma sõrmed B2. Siin on sõnum. 12, 11, 2 - -Ma olen oma esimese salajane koosolek. -25, 14, 11, 18, 16 - Pierre oli suurepärane hääl täna. Ma võiksin öelda, et tänase sõnum oli tõesti oluline. -3, 25. See on sõnum Annie ise. Pea meeles, et ei räägi kellelegi. -90 Sekundit hiljem, ma olen ainult tuba maja, kus poiss üheksa võiks istuda privaatsust ja dekodeerida. Aha, B. Ma läksin edasi. E. esimene sõna on "olema." S. See oli tulemas lihtsam nüüd. U. 25. See on R. Tule, Ralphie. Ma pean minema. -Ma kohe alla, ema. Gee viuhti. -T. O. Kindlasti. Kindlasti mida? Mis oli Little harva Annie sellega öelda tahad? Kindlasti mida? -Ralphie, Randy minema. Kas te välja tulema? -Olgu, ema. Ma tulen kohe välja. -Ma olin jõudmas nüüd. Pinge oli kohutav. Mis see oli? Saatus planeet võib vaekausil. -Ralphie, Randy pean minema. -Ma kohe välja Tule taevas appi. -Peaaegu valmis. Minu sõrmed lendas. Minu arvates oli teras lõksu. Iga pooride vibreerima. See oli peaaegu selge. Jah, jah, jah, jah, jah. -Kindlasti joo oma Ovaltine. Ovaltine? Trullakas kaubandus? Son of a bitch. [END VIDEO PLAYBACK] SPEAKER 1: See on CS50, ja et on probleem Set Two. Näeme järgmisel nädalal. SPEAKER 2: Järgmisel CS50, see juhtub. SPEAKER 1: Nii üks teema meil ei Vaatasin seni on et funktsiooni osuti. Nüüd funktsiooni osuti on lihtsalt aadress avaliku funktsioon, kuid palju nagu - poeg -