[Powered by Google Translate] David J. Malan: Olgu. See on CS50, ja see on nädala lõpuks kaks. Kui arvate, et näljane Umbes samal ajal homme, tean, et me ei kavatse kutsuda kokku väike rühm homme, neljapäeval, 1:15. Seal on see link siin, kui soovite RSVP. Kosmos on piiratud, nii et palun andeks, kui vorm on täis selleks ajaks, kui täitke see ära. Teine link küll, et võiks huvi on see. Nii et peaaegu kuu aega, muidugi saab olema kättesaadav kõik laiemalt kaudu EDX, mille kaudu inimesed Internetis saab võimalik jälgida mööda, tegeleda muidugi üsna aktiivselt, tegelikult. Nad kasutavad CS50 Appliance ja CS50 arutada ja enamik erinevate tarkvara vahendeid, mis meil juba on kasutanud sel semestril. Ja üks algatused tahaksime võtta kui katset sel aastal on näha, kui palju sisu saame tõlkida teiste rääkinud ja kirjakeelt. Nii et kui teil olla huvi osaleda selles projektis, mille anname inglise ärakirju ja subtiitrid kursuse loengud ja lühikesed püksid ja seminarid ja lõigud jms - kui te räägite soravalt või kirjutada ladusalt mõnda muud keelt, oleksime armastan kaasata teid selle projekti, mille alusel te võtate ühe või mitme videod, tõlkides need keel mida sa tead väga hästi. Et anda teile tunne liides, seal on see veebipõhine kasutajaliides et me kasutame, mis loob sisuliselt UI niimoodi. See oli mulle õpetada mõned Halloween tagasi. Ja paremal pool on must kõrval need ajatemplid, näete erinevaid asju, mis tuli mu suust, et päev. Ja siis selle all, saate tõlkida mõnda muud keelt. Täpselt, mida kaardistamine on vahel, antud juhul inglise ja, ütleme, Hispaania. Nii et see on tegelikult väga kasutajasõbralik vahend. Võite tagasikerimiseks liigutage väga kergesti klaviatuuri otseteed. Nii et kui soovid osaleda selles eksperimendis ja olla oma sõnu näha ja lugeda potentsiaalselt tuhanded inimesed seal, siis ei tunne tasuta osaleda. Nüüd üks sõna kassipoeg alates esmaspäevast, muidu oleme saatnud liiga hirmutav sõnum. Kas mõistad, et kui tööaega soovitan ja lõigud näitavad, Projekteerimise käigus on väga palju on õpilasi koostööd ja räägi läbi töötada probleem komplekti ja probleemid koos. Ja tõesti liin lihtsalt taandub taas tööd sa lõpuks peaks esitama peaks olema oma. Ja nii see on, ausalt öeldes - ka tööaega, see on täiesti normaalne - see on täiesti ootuspärane, isegi - tuleb jututoas mõned sõbrad sinu kõrval. Kui ta üritab mõne teema, ja sa oled nagu, oh, hästi ma annan sulle pilguheit mõned rida koodi, mille ma kirjutasin. Ongi hea. Seda juhtub. Ja see on väga soodusta, ma arvan, kus õppimise protsessis. Kui joon, jälle saab ületada on kui pea on omamoodi kallutada üle siin on liiga palju sekundit või minutit, et tegelikult on lihtsalt olnud torustikupuhastusvahendid võimalus oma sõber. Ja kindlasti, kui asjad vahetatud e-posti teel ja Dropbox ja nagu ka seal on joon. Nii kõigi vahenditega, mugav ja tunnevad julgustas vestelda sõpradega ja klassikaaslastega umbes psets ja rohkem. Ja just aru, et mida sa lõpuks esitama peaks tõesti olema toode oma loomingu ja mitte keegi teine. Nii et samas vaimus ja kaisu olendid, siis võib tead see kutt siin. Nii et see on hirmsalt cheesy filmi aastat tagasi. Igaüks siin näinud Spaceballs? Hea küll. Nii hea number siin. Nii et see on meie imeliselt akadeemilise viis kehtestada täna lõpuks mõistet krüptograafia. Ja nii üks domeen eriprobleemid pset 2, mis tulevad välja homme hilisõhtul, on sukelduda maailma krüptograafia, mis on kunst krüptimine või skrambleerimise andmed. Ja see lõppkokkuvõttes on seotud maailma julgeolekut. Nüüd turvalisust kõige juures on kujul üsna Ilmalik mehhanismid. Kõigil meil on kasutajanimed ja paroolid. Ja meil kõigil on väga halb kasutajanimed ja paroolid, kõige tõenäolisem. Kui teie parool on sama paljudel veebisaitidel, et ilmselt ei ole parim idee, kui me arutame poole semestri lõpus. Kui teie parool on kirjutatud Kleepmärkme - no nali - oma monitori, et liiga ei ole tingimata parim disain, kuid üsna levinud nähtus. Ja kui te ei kasuta krüptograafia krüptimiseks paroolid, nad on eriti haavatavad. Nii et kui sa arvad, et oled super tark omades varjatud Word dokumenteerima kuskil kõvakettal, mis on kõik oma paroolid kuid see kausta, et keegi läheb vaatama, et liiga ei ole väga turvaline mehhanism. Ja mis pset 2 tutvustab on see kunst krüptograafia ja skrambleerimise teavet nii, et asjad paroolid on kõik turvalisemaks. Et motiveerida seda väga reaalse probleemi, millel on väga mitte-reaalse stsenaarium, lubage mul tutvustada teile üks meie lemmik klippe siit sellest filmi, Spaceballs. [VIDEO PLAYBACK] -Kiiver, sa paharet, mis toimub? Mida sa teed minu tütar? -Lubage mul tutvustada hiilgav noor plastist kirurg dr Philip Schlotkin, suurim nina töökoha mees kogu universum ja Beverly Hills. -Teie Kõrgeausus. -Nina töökoha? Ma ei saa aru. Ta oli juba nina tööd. See oli magus 16 kohal. -Ei, see pole see, mida sa arvad. See on palju, palju hullem. Kui te ei anna mulle kombinatsioon õhku kilp, Dr Schlotkin tahe anna oma tütart tagasi oma vana nina. -Ei! Kust sa selle said? -Hea küll. Ma ütlen. Ma ütlen. -Ei, issi, ei. Te ei tohi. -Sul on õigus, mu kallis. Ma igatsen endale nina. Aga ma ei ütle neile kombinatsioon ükskõik mida. -Väga hästi. Dr Schlotkin, tee oma halvim. -Minu rõõm. -Ei! Oota, oota. Ma ütlen. Ma ütlen. -Ma teadsin, et see toimib. Olgu, anna see mulle. -Kombinatsioon on üks. -Üks. -Üks. Kaks. Kaks. Kaks. Kolm -Kolm. -Kolm. -Neli. -Neli. -Neli. Viis Viis. Viis. -Nii et kombinatsioon on üks, kaks, kolm, neli, viis. See on kõige lollim kombinatsioon, mida ma kunagi kuulnud olen. See on selline asi, idioot oleks oma pagasi. -Tänan, teie kõrgeausus. -Mida sa tegid? -Keerasin maha seina. -Ei, sa ei teinud seda. Sa välja lülitatud kogu filmi. -Ma vist vajutanud vale nuppu. -Noh, pane see tagasi. Pane filmi tagasi. -Jah, sir. Jah, söör. -Lähme, Erna. Tule, Gretchen. Muidugi sa tead, et ma ikka pean teile arve selle eest. -Noh, kas see toimib? Kus on värav? -See toimis, söör. Meil on koos. -Tore. Nüüd saame võtta iga viimane sõõm värsket õhku planeedi Druidia. Mis on kombinatsioon? -Üks, kaks, kolm, neli, viis. -Üks, kaks, kolm, neli, viis? -Jah. -See on hämmastav. Mul sama kombinatsioon minu pagas. Valmista Spaceball 1 viivitamatut lahkumist. -Jah, sir. Ja muuta kombinatsioon minu pagas. -Oi! [END VIDEO PLAYBACK] David J. Malan: hämmastav film siis peaks nüüd kõik näha. Nii et kontekst on selles, et on ebakindlad andmed tuleb võimaluse krüptimiseks ja rüselus see. Ja nii see näiteks on näide krüpteeritud sõnum. See tegelikult ütleb midagi inglise keeles. Aga see kindlasti ei ole täielikult selge. Ja me täisringi täna tease peale mida see saladus sõnum on siin. Aga reaalses maailmas arvuteid, asjad ei paista isegi need võivad inglise väljendeid. Näiteks see, mida te võite leida standard Linux või Mac või Unix arvuti fail, mis oli kunagi ammu kutsus salasõna faili. Tänapäeval on see viidud teistesse kohtadesse. Aga kui sa vaatad õiges kohas süsteem, näete mitte ainult oma kasutajanimi või teiste inimeste kaudu, kuid näete krüpteeritud versioon oma parool. Tõepoolest, sõna krüpt on näidanud, et kodus asjad on krüpteeritud. Ja see rida näiliselt juhuslike tähtede ja märkide ja numbrite jne saab dekrüpteerida vaid üldiselt teada mõned saladus - salajane sõna, salajane number. Ja nii tõesti, kunst krüptograafia lõpuks taandub usaldada mõne sorteerida ning teades midagi, mida keegi teine ​​ei tee. Uurime seda veidi üksikasjalikumalt täna ja pset tulla. Ja nüüd sõna läbimise / mitteläbimise. Nii et eriti, nagu mõned teist on sukeldunud pset 1 aparaat, ja väga uus maailm ise, mõistsin, et pettumusi ja segadust ja lihtsalt tehnilised raskused on oodata. Eriti esimene pset, kus on nii palju uut, lihtsalt saada tuttav ls ja cd ja kõik need kauge käsud uues keskkonnas. Ja see on eraldi tegeliku materjali ja programmeerimine ise. Nii mõistame ka, et seal on kindlasti tööaega, mis eksisteerivad tugistruktuur. Sektsioonid algab sel pühapäeval. Aga mis kõige tähtsam, kui te ei tunne lihtsalt, et see ei ole maailma sa aru, et see tõesti ei lihtsalt võtab aega. Ja kui poleks seda võimalust aastat tagasi minu jaoks võtmise klass katse läbimise / mitteläbimise, ausalt, ma ei oleks isegi jalg klassiruumis. Ja te võite seda muuta, kuni, ütleme, viienda esmaspäeval käigus. Seega, kui olete äärel nüüd aru, et mitte pea mõnda muud vetes kokku, ei kindlasti kaaluda lihtsalt lendama katse läbimise / mitteläbimise. Jällegi, ei ole tõesti see kultuur siin Harvardi võtta asju katse läbimise / mitteläbimise sest igaüks tahab saavutada või overachieve. Aga ausalt öeldes, see on suurepärane võimalus proovida midagi, mis ei pruugi olema tuttav teile. Ja sa lõpuks teed, enamasti üsna hästi, võib-olla palju oma üllatuseks. Ja konkreetsemalt, mida ma arvan katse läbimise / mitteläbimise üldiselt teeb, eriti kui sa võisid kogenud pset 0, kui olete panna 10 tundi, 15 tundi, 25 tundi mõnda pset - ja sa oled lihtsalt peksma oma pead vastu seina, ja see muutub super hilja õhtul, aga te olete võtnud pset nagu 90% teest, sa tead, sa lihtsalt ei saa aru, üks asi - katse läbimise / mitteläbimise tõesti võtab serv off klassi meeldib see, kus saate sortida on õnnelikult öelda, okei, ma tean, et see pole täiuslik. Aga ma töötasin my ass off selle. Ma olen päris rahul, kui ta sattus. Ja mis vastavad ootused läbimise / mitteläbimise. Nii et ärge hoidke seda silmas pidades. Hea küll. Nii neile, kes on võidelnud kasutada Harvardi ülikooli wifi tea et seal on CS50 SSID, Wi-Fi ühendus ujuvad ringi, et te võib olla parem õnne. See on natuke irooniline, et parool - kui te tahaksite proovida ühendades sellele parema kiiruse ja andke teada, kui see pole parem - on üks, kaks, kolm, neli, viis, kõik viis kuni kaheksa sest kaheksa on turvalisem kui viis. Nii et kui teil on vaja wifi parooli, ühendada CS50 juhtmevabalt siin. Üks, kaks, kolm, neli, viis, kuus, seitse, kaheksa. Ja postitustesse CS50 Arutle, kui sul on veel vahelduva ühenduvust küsimusi, ja laseme volitusi, et olla teavad seda ruumi. Hea küll. Nii kiire teaser, eriti neile, kes on fänn poiste ja tüdrukute kõik asjad Apple. Mida ma kaevasin üles mõned aastad tagasi oli see fail siin, ilock.c, lihtsalt omamoodi teha rohkem konkreetseid ja keerulisem mõned rohkem põhilisi C programme oleme olnud kirjalikult. Nii et ma avanud seda faili ilock.c. See on saadaval loenguid lehel täna. Vasakul servas, näed pikka nimekirja funktsioone. Nii et mehe, kes kirjutas selle kirjutasin üles palju funktsioone, enamat kui lihtsalt põhiline. Ta kasutas terve hulk raamatukogude siin. Ja kui hakkame sirvimiseks, mida see tegelikult on väga Esiteks, ma usun, crack originaal iPhone. Kui sa tahad Jailbreak originaal iPhone, mis tähendab untether see AT & T ja tegelikult installida spetsiaalne tarkvara peal ja teevad asju et Apple ei taha, et inimesed teevad - noh, keegi võttis aega, et aru saada, kuidas täpselt nad võiksid kasutada tarkvara vead, vead, vead, Apple tarkvara. Ja nõnda sündis ilock.c. Et kui sa koostatakse see arvutis ja installitud see peale iPhone, et oli ühendatud arvuti kaudu, ütleme, USB kaabel, see annaks sulle haldus-või administraatoriõigusi oma iPhone ja saate teha päris palju mida iganes sa tahad. Ja seega ei ole see põnev kassi-hiire mängu vahel Apple ja mujal maailmas eriti kui nad, nagu paljud ettevõtted, proovida lukustada oma kraami maha, nii et saate teha ainult seda, mida nad kavatsevad. Kuid tänu inimestele meeldib see ja nad mõistavad madala üksikasjad ja sel juhul, C programmeerimine ja palju tuttavaid konstrueerib et oleme hakanud mängides, siis on võimalik tõesti võimendavat riistvara viisil näed ja ei pruugi mõned äriühinguks. Nii näiteks, ma ei tea, mida see kõik teeb. Aga GetVersion kõlab üsna lihtne. Ja tundub, et see on funktsioon, mis see inimene kirjutas. Võtke mingi täisarv argumendina, ei tagasta midagi, kuid tundub ahelaks jaoks silmus siin ja kui tingimus, kui tingimus, murda, ja kuidagi seotud versiooni numbrit. Kui me keri - kuigi palju need märksõnad ei kavatse olla uus, ja seal on kogu palju funktsioone siin me pole kunagi näinud ja ei pruugi kunagi näha üle käigus poolaasta - aasta lõpus päev, see kehtivad samad reeglid ja loogika, et me oleme olnud mängib siiani. Nii et see on liiga vana crack oma iPhone 3s või 4s või peatselt 5s, nendel päevadel, kuid tean, et see kõik on väga palju saadud siin maailmas, et me oleme sukeldus. Võtame pilk veidi lihtsa näite. See üks, lihtsalt saada soojendada mõned süntaks ja ka mõned muud andmed tüüp, mis me rääkisime, kuid pole tõesti näinud C. Nii et see on fail nimega positive1.c. Ja kohta märkusi ülaosas, see lihtsalt nõuab, et kasutaja anda positiivne arv. Nii et see on näide do-kui ahela, mis on kena kasutaja interaktiivne programme, kus sa pead ütlema kasutaja midagi teha. Ja kui nad ei tee koostööd, siis karju neile või tagasi lükata oma panuse. Asjas, ma teen read 19 kuni 24, nii kaua, kui kasutaja on ei andnud mulle positiivse numbriga. Nüüd on see detail siin on line 18, miks ma kuulutada N üle kogu see silmuspõletamise ehitada mitte kohe eelarverida 22, kus ma tegelikult hoolivad saada n? Jah? [Kuuldamatu] David J. Malan: Jah, nii see küsimus ulatust. Ja üldarusaadavat valimisperiood, mida ei reguleerimisala hõlmab? Jah? [Kuuldamatu] David J. Malan: Kas te räägite veidi valjem? SPEAKER 1: Kui pääsete konkreetse tunnuse. David J. Malan: Perfect. Kui pääsete konkreetse tunnuse. Ja üldiselt, rusikareegel on seni olnud, et reguleerimisala mõned Muutuja on määratletud ka kõige uuemad looksulg, et olete näinud. Ja nii sel juhul, kui ma tegin vea tunnistamise n real 22, et rida oleks töö. Ma saaksin int, ja ma paneks see, et muutuja n eelarverida 22. Aga mis koodirida oleks nüüd ei tea, mida ma räägin? Nii et 25, ja tuleb välja, 24 ning samuti, sest sel juhul jääb Euroopa looksulg. Nii lihtsalt natuke ebameeldivalt, kuid väga kergesti lahendada lihtsalt kuulutatakse muutuja väljaspool funktsiooni. Nüüd näeme hiljem täna, võid minna ühe sammu edasi. Ja siis võiks isegi natuke laisk - ja seda ei soovitata üldiselt - aga sa võiksid isegi saada laisk ja panna muutuja globaalselt, kui nii võib öelda, ei sees funktsiooni, mitte sees silmus, kuid faili ennast, väljaspool Kõiki funktsioone olete kirjutanud, kui ma siin tegin real 15. Aga see on üldiselt kortsutas kulmu. Aga aru, et see on lahendus, mõnikord muid probleeme, nagu me lõpuks näha. Nii et nüüd jätame selle nii. Aga vaatame, kas me saame selle ümber kirjutada lihtsalt alustada eneseväljendamisel natuke teistmoodi. Nii et see programm, et asi selge oleks, on positive1. Lubage mul minna siin ja minu terminaliakent teha positive1, Enter. Koostab, eks. Ma lähen jooksma positive1, Enter. Ma nõuan, et sa annad mulle positiivne täisarv. Ma ütlen -1. See ei õnnestunud. 0, 99, mis näib toimivat. Võib-olla mitte kõige range katse. Aga vähemalt on see kena meelerahu kontrolli, et me oleme õigel teel. Nüüd lubage mul edasi minna ja avada versioon kaks seda. Ja mis on erinev juba? Ta rakendab sama asi. Aga mis hüppas selgelt erinev seekord? Jah, nii see bool roheline. Gedit on rõhutatud roheline see märksõna tuntud bool, mis on andmetüüp. See ei tule ehitatud, et kõik versioonid C. Sa pead lisama konkreetse raamatukogu. Meie puhul ma ka CS50 raamatukogu, nii et me juurdepääs bool. Aga liin 18, me tundub, et on Boole'i ​​väärtus siin nimetatakse tänulik. Nii et ma võinuks see midagi. Aga ma helistasin talle tänulik lihtsalt selline edasi mõned semantiline tähendus. Nii et esialgu on line 18, ma olen ilmselt mitte tänulik, sest Tõeväärtuse tänulik vastab algselt vale eelarverea 18. Ja siis tundub, mida ma olen teinud siin ridades 21 kuni 23 on mul lihtsalt omamoodi ümber minu loogika. Seega ei ole funktsionaalselt erinevad. Aga eelarverida 22 nüüd, ma kontrollin kui int kasutaja on andnud on suurem kui 0, siis ma lihtsalt väärtust muuta tänulikud tõsi. Ja miks ma seda teen? Kuna vastavalt 25, ilmselt, ma lähen vaatan seisukorras. Kas see tsükkel while tänulik on vale. Nii et pakun seda alternatiivina versioon, sest see on vähemalt natuke rohkem intuitiivne, võib-olla. See on veidi rohkem maandatud inglise keeles. Nii et tehke järgmist ajal ei ole tänulik või kui tänulik on vale. Ja seekord ka, ma ilmselt ei huvita mäleta, mida kasutaja sisestatud aastal, sest teate pole muutuja n. Nii et tegelikult ma - väike valge vale seal. Funktsionaalselt programm on natuke teistsugune kui saame põhjale sest ma ei mäleta mida n. Aga ma tahtsin näidata ka siin, et kuigi me oleme näinud GetInt ja GetString kasutatakse paremal servas võrdusmärk seni nii, et me mäletame väärtus, tehniliselt, see pole hädavajalik. Kui mingil põhjusel sa lihtsalt ei huvita, et säästa raha, tahad lihtsalt kontrollida väärtus, märkate, et me lihtsalt kirjutada seda GetInt avatud paren lähedal paren. See funktsioon ei kavatse naasta väärtus, nagu me oleme öelnud. See läheb teile tagasi int. Ja kui sa vaimselt arvan see juhtub, kui ma kirjuta 99, GetInt tagastab arvu 99. Ja nii kontseptuaalselt, see on nagu minu kood oli tegelikult see. Nii et kui 99 on tõepoolest suurem kui 0, siis tänulikud muutub tõsi. Siis rida 25 realiseerib ooh, me oleme valmis, sest ma olen nüüd tänulik. Ja rida 26, me lihtsalt öelda, aitäh positiivne täisarv, mis iganes see juhtus olema. Nüüd teeme veidi süntaktiline suhkru siin, nii rääkida. Vaatame, kas me saame puhastada seda joont 25 koos selle Kolmas ja viimane dispersioon aastal positive3. Nii märkate ainus erinevus nüüd ongi rida koodi? Jah, nii 25. Ja me pole tegelikult näinud seda trikki veel. Aga me ei vaata hüüumärk esmaspäeval, mis tähendab mida? Nii ei või eitus. Nii, et võta tõeväärtuse ja klapp selle väärtust. Tõsi muutub vale. Vale muutub tõsi. Nii et see, ma teeksin ettepaneku, on isegi natuke rohkem intuitiivne ja viis kirjalikult koodi, sest ma ikka initsialiseerida tänulikud vale. Ma ikka teha järgmist. Seadsin tänulikud tõsi, kui saabub aeg. Aga nüüd saab tõesti lihtsalt tõlkida see kood verbaalselt vasakult paremale, samas ei tänulik. Sest pauk, või hüüumärk, tähendab mõiste ei, nii et kui ei tänulik. Nii et taas, me ei ole kasutusele mingeid uusi mõisteid iseenesest. Me rääkisime tõeväärtused tagasi, kui me mängisime koos Scratch. Aga mõistan nüüd me võime lihtsalt hakake meie koodi mitmel erineval viisil. Nii et eriti pset1, kui sa oled omamoodi hädas nuputada viis kirjutada mõned programm, koefitsiendid sa oled õnne, sest seal saab olla mitmeid lahendusi, mida saab peale sattuma. Näiteks, see on lihtsalt kolm isegi kõige lihtsamaid programme. Hea küll. Ja nüüd meenutada esmaspäeval, jätsime selle teadmiseks tagasi väärtused. Nii et väga esimest korda, me kirjutasime programmi, mis ei ole ainult peamine, see on ka oma kohandatud funktsiooni, et ma kirjutasin siin. Nii real 31 kuni 34, olen rakendatud kuubik funktsioon. See ei ole keeruline. See on lihtsalt korda korda, sel juhul. Aga mis on tähtis on see, et ma olen võttes sisend kujul ja Ma tagastades toodangut kujul korda korda. Nii et nüüd on mul võimalus, palju nagu ma harjunud koos printf üksi, helistada See funktsioon helistades kuubik funktsioon. Ja kuubik funktsioon võtab mõned sisend. Ja kuubik tagastab funktsioon mõned väljund. Ja nii seevastu printf lihtsalt tegid midagi. See ei tagastanud midagi, et me hoolis - kuigi, nagu kõrvale, see tagastab väärtuse. Sa lihtsalt üldiselt ignoreerida. Printf lihtsalt tegid midagi. See oli kõrvalmõjuna trükkimine ekraanile. Seevastu siin, meil on kuubik funktsioon, mis tegelikult tagastab midagi. Nii et see on üldiselt - Neile, kes teavad seda, see on üsna lihtne idee. Aga neile vähem tuttav selle idee läbivad sisendite ja saada tagasi väljundid, proovime lihtsalt midagi super lihtne. Kas keegi mugav tulemas laval lühidalt? Sa pead olema rahul kaamera teile, samuti. Jah. Olgu, mis su nimi on? KEN: Ken. David J. Malan: Ken. Olgu, Ken. Tule üles. Nii Ken saab olema funktsioon sordib siin. Ja olgem minna ja seda teha. Lähme natuke uhke. Meeldiv kohtuda. Tere tulemast keskpunkti. Hea küll. Asume teele seda nuppu siin. Hea küll. Nii et siin on kaasaegne kriiditahvel. Ja mis ma olen on peamine funktsioon, näiteks. Ja ma ei pea iPadi minu poolt. Ma tõesti ei mäleta, kuidas - noh, tegelikult ei saa öelda, et. Ma tõesti ei ole hea käekiri. Ja nii seepärast, ma tahan printida midagi ekraanil minu jaoks. Nii et ma oleks põhiprogrammi. Ja ma ei sa öelda seda, kirjutades selle oma kana nullist ja siis kulgeb teil sisend. Nii nagu rumal kuigi see harjutus on, mõiste funktsioonid ja kutsudes funktsioon ja tagasi funktsioon tõesti taandub sellele. Olen peamine. Ma olen lihtsalt kirjutada printf ("midagi") ekraanil. Ma töötab selle programmi. Ja niipea, kui printf saab nimetada, see võtab üks argument - või ühe parameetri, mõnikord - vahel jutumärgid. Siin on see argument. Ma panen selle Ken. Nüüd on ta musta kasti kirjutada mõned mitu aastat tagasi, et ilmselt ainult teab, kuidas printida asju ekraanil. Nii täita. See ei ole halb. Nii, väga hea. Nüüd Ken tehakse täidesaatva. Kas ta pead anda mulle midagi tagasi? Nii ei ole, et me oleme näinud siiani. Jällegi printf ei tegelikult naasta arv. Aga me eirata, et nüüd, sest me pole kunagi seda kasutanud. Nii et see on mu Ken. Ja nüüd peamine tuleb tagasi ellu - Peamised võtab üle kontrolli programm uuesti, sest see rida koodi, printf, tehakse täidesaatva. Ja meil minna oma teed täidesaatva tahes teistel liinidel on olemas. Hea küll. Nüüd proovime veidi teistsugune näide. Ja seekord siin, olgem kõigepealt selgeks ekraani siin. Ja seekord, me teeme cubing funktsioon. Aga seekord, ma eeldan toodangu väärtus. Nii lähme edasi ja tee seda. Nii et nüüd on mul rida koodi, mis ütleb, x = kuup (x). Nii et tegelikult let's - rida koodi, mäletate, näeb välja selline. x = kuup (x). Niisiis, kuidas see läheb tööle? Nii lähme edasi ja annab teile valge ekraan uuesti. Ja ma kirjutan nüüd maha x väärtus, mis käesoleval ajal aega juhtub olema, ütleme, 2, hoida lihtsa. Nii et ma olen kirjutanud alla paberile väärtus 2, mis on minu x väärtust. Ma käsi selle Ken. KEN: Ja ma lihtsalt kirjutan vastuse? David J. Malan: Jah, teeme lihtsalt kirjutada vastus. Okei. Ja nüüd on ta tagasi mulle midagi. Nii et - täiuslik. Tore segue. Nii et nüüd ta käed mulle tagasi raha, 8., käesoleval juhul. Ja mida ma sellega teen? Noh, tegelikult, vaatame. Saada see õige. Mida ma sellega teha? Nüüd ma lähen seda väärtust ja tegelikult seda säilitada need sama bittide mälu. Aga teate, ma olen selline hädas siin. Ma olen natuke segaduses, sest kui ma tegelikult kirjutada x väärtus? Sest ma olen lihtsalt teinud on füüsiliselt käsi Ken paberile et oli väärtus 2, mis oli x. Ja tõepoolest, see on täpselt, mis juhtub. Nii tuleb välja, et kui te helistate funktsiooni, ja te kaotate ka argument nagu "tere maailm" või te kaotate ka argument, nagu 2, üldiselt, sa oled läbivad koopia sellest argumendist. Ja nii nagu ma kirjutasin number 2 siin ja andis selle Ken; et peab tähendab, et mul on veel koopia väärtus 2. kusagil. Sest tõepoolest, nüüd, et ma olen saanud tagasi raha 8, ma pean minema tagasi RAM ja tegelikult kirjutada 8 Kui ma ükskord oli number 2. Nii visuaalselt mäletan seda mõistet läbivad sõna otseses mõttes koopia väärtus. Ken teeb oma asja, ulatab mulle tagasi midagi - sel juhul väärtus nagu 8. Ja siis ma pean tegema midagi, et raha, kui ma tahan hoida seda ümber. Nii et see kõik on liigagi tuttav enne pikk. Tänan sind nii palju see demo siia, Ken. Hea küll. Väga hästi tehtud. Nii et vaatame, kuidas see lõpuks puudutab mõningaid funktsioon helistaja, et me oleme siin teinud. Nii et lubage mul minna ja tuua meid tagasi cubing näiteks siin. Ja märkate, et kui me tahame tegelikult alustavad selles edasi, me läheme et pead olema teadlik sellest, et arv x, mis kuramuse vastu võetud siin on erinev sellest, mida on tegelikult läks funktsioon. Nii et jällegi, see möödus koopia läheb muutunud üsna Sobiv vaid hetk. Võtame pilk midagi, mis ei ole päris tööd õige veel. Ma lähen edasi minna ja avada 1/3 lollakas näide, mis on ekslik iseloomuga. Ja seda nimetatakse buggy3, ja ta rakendab Vahetatakse funktsioon. Nii et siin on meil peamine funktsioon, mis on x ja y omavoliliselt initsialiseeritud 1 ja 2 nimetatud isikud. Me võiksime kasutada GetInt, kuid me lihtsalt vaja lihtne kasutada. Nii et see on kodeeritud nagu 1 ja 2. Aastal read 21 ja 22, me ilmselt välja printida x ja y, üks rea kohta. Siis on line 23, Väidan, ma vahetada neid väärtusi, dot, dot, dot. Ma ilmselt helistada funktsiooni Rida 24 nimega swap , mis võtab kaks argumenti. See on täiesti legit funktsioonide võtta kaks argumenti. Me oleme näinud printf seda juba. Nii swap ilmselt on X ja Y. Ja nagu nimigi ütleb, ma loodan, et see läheb swap nende kahe väärtuse. Nii siis ma väita real 25, vahetasid. Ja ma kordustrükk x ja y eeldusel, et nad on tõepoolest vahetasid. Aga kui ma tegelikult käivitada programm - lubage mul avada terminali aknas. Lubage mul teha buggy3. Nagu nimigi ütleb, see ei lõpe hästi. Sest kui ma Enter, märkate, et x on 1. y on 2. Ja veel lõpus programm, nad on ikka tegelikult sama. Nii põhineb demonstratsioon just Ken, mis tegelikult toimub? Noh, olgem sukelduda sellesse swap funktsiooni. See on super lühike. See on ainult paar rida koodi pikk. Aga mis on põhiprobleem põhineb lihtne lugu rääkis siin Ken? Miks on vahetustehingu katki? [Kuuldamatu] Täpselt. Nii et me ladustamiseks kuni koopia, mitte muutuja ise. Teisisõnu, swap ilmselt võtab kaks argumenti, int. Ja see on meelevaldselt nimetatakse a ja b. Ja siin üleval, ma olen sooritanud x ja y, mis on vastavalt 1 ja 2. Aga ma ei sõna otseses mõttes möödaminnes x. Ma ei sõna otseses mõttes möödaminnes y. Ma panen koopia x ja koopia y. See on nagu peaaegu nagu sa kopeerida ja kleepida vahetada väärtused sa tahad seda tõesti manipuleerida. Nii et kui see on nii, kui ma, programmi alustada täidesaatva rida 35, siis 36 - kui ma saan rida 37, siinkohal lugu, mis on väärtus? Sel hetkel lugu, liin 37, mis on väärtus selles punktis? Nii et see peaks just olema 1. Eks? Kuna x võeti vastu esimese argumendina. Ja see funktsioon lihtsalt suvaliselt helistab Esimese argumendiga. Samamoodi on y teine ​​argument. Ja see on lihtsalt suvaliselt helistades teine ​​argument b. Nüüd on see kahestumine on tegelikult üsna lihtsalt ja arusaadavalt. Mõtle sellele. Keegi meist pole täidetud isikule, kes kirjutas printf. Nii et kindlasti, tal pole aimugi, mida meie muutujate 30 aastat hiljem hakkavad mida nimetatakse. Nii et seal peab olema vahet, mida te nimetate muutujad funktsioonid olete kirjalikult ja mida te nimetate muutujate funktsioonid sa oled helistades või kasutades. Nii et teiste sõnadega, ma olen kirjutanud minu muutujaid x ja y. Aga kui keegi oli kirjutanud swap funktsiooni, ta kindlasti ei tea, mida mu muutujad nimetama hakatakse. Nii mõistavad, et see on põhjus, miks teil on see duaalsus nimed. Tehniliselt, ma võiks seda teha kokkusattumus. Aga nad ikkagi vastu võetud koopiana. See oleks lihtsalt puhas juhus esteetiliselt kui see inimene, kes kirjutas swap oli kasutanud samad nimed. Hea küll. Nii et siinkohal lugu, joon 37, 1. b on 2. Ja nüüd ma jätkan vahetada neid. Noh esiteks, las ma tegelikult seda teha palju lihtsamalt. Ma ei tea, mida need kolm rida koodi tegid. Lubage mul seda teha. b saab. saab b. Valmis. Miks on see purustatud, loogiliselt? See on selline intuitiivne asi, eks? Nii muutub b. Ja B muutub. Probleem on aga selles, et niipea kui rida 37 hukatakse, mis on väärtus ja b? Sama, 1. Kuna olete clobbered, nii et rääkida, sa oled muutunud b võrdseks. Nii et kui rida 37 täidetakse, on see suurepärane. Sul on nüüd kaks eksemplari nr 1 sees seda funktsiooni. Siis kui sa ütled kooskõlas 38, saab b, noh, sa oled natuke kruvitud. Sest sa oled lihtsalt määrates 1-1. Sa oled selline kaotanud väärtust sa hoolisid. Nii originaal versioon sellest, märkate, mida ma tegin. Ma asemel oli kolmas rida koodi, mis nägi välja selline. Kinnitan ajutise muutuja - tmp on väga levinud nimi Tähtajalise muutuja. See on int, sest see peab sobima, mida ma tahan teha koopia. Ma salvestada koopia sees tmp. Nii et kui rida 37 on täidetud, väärtus on - kiire meelerahu vaadata - 1. Väärtus b on 2. Ja väärtus tmp on ka 1. Nii et nüüd ma täita rida 38. Nii et kui liini nr 38 hukatakse, võtab väärtuse kohta b. Ja b oli 2. Nii on nüüd 2. Nii et siinkohal lugu, on 2, b = 2, ja tmp on 1. Nii et nüüd loogiliselt, saame lihtsalt sulpsti tmp väärtust arvesse B. Ja me oleme valmis. Nii oleme lahendanud selle probleemi. Kahjuks, kui ma saan selle programmi selles vormis, see ei ole tegelikult vahetada mis tahes väärtusi. Aga peab olema selge, miks? Ma parandasin loogiline probleemi hetk tagasi. Aga jälle, kui ma saan selle programmi, x ja y ei muutu aasta lõpuks programmi täitmist. [Kuuldamatu] David J. Malan: Nii et me ei tagastata midagi. Nii et see on tõsi. Aga selgub, seal on natuke probleem siin, sest seni Ainuke asi, me oleme suutnud tagasi on üks asi. Ja see on piirang C. Võite ainult naasta tõesti üks väärtus, sel juhul, ma olen selline ummikus siin sest ma tagasi uue väärtuse x ja ma võin tagasi uus väärtus y. Aga ma tahan nii tagasi. Nii et tagasi ei lihtsat lahendust. Aga probleem põhimõtteliselt on miks? Mida me tegelikult vahetasid? a ja b. Aga a ja b on koopiad x ja y, mis tähendab, et me lihtsalt ei kõik see töö - me lihtsalt kulutada nagu kolm minutit rääkida swap funktsioon ja kõik need kolm muutujat. Ja see on suur, täiesti õige isoleeritult. Aga a ja b reguleerimisalasse üksnes on need read siin. Nii nagu loop, kui te deklareerite täisarv i sees jaoks loop - sarnaselt, kui sa kuulutatakse a ja b sees funktsiooni olete kirjutanud, nad on ainus kehtiv sees, et funktsioon. Mis tähendab, niipea kui swap tehakse täidesaatva ja läheme realt 24 joon 25, x ja y ei ole üldse muutunud. Sa raiskasid palju aega vahetada koopiaid muutujad. Nii selgub, et lahendus on tegelikult mitte-ilmne. See ei ole päris piisav, et tagastada väärtused, sest saame ainult tagastama ühe väärtuse. Ja ma tõesti tahan vahetada nii x ja y samal ajal. Nii et me ei kavatse tagasi tulla seda. Aga nüüd aru, et küsimus põhimõtteliselt tuleneb asjaolust, et a ja b on koopiad. Ja nad on oma ulatuse. Noh, proovime seda probleemi lahendada mingil moel. Lubage mul tegelikult kerida siia tagasi ja avada, oletame, neljandat varianti Selle, buggy4. Ja mis sellest? See on sarnane, kuid lihtsam probleem vaadata enne kui me võtke torkehaav at lahendamiseks. See programm on kutsutud juurdekasvu. Ja see ilmselt käivitab x täisarv 1 rida 18. Siis ma väita, x on 1. Ma siis väita incrementing, dot, dot, dot. Ma siis helista juurdekasvu. Aga siis ridadel 22 ja 23, ma väidavad, et see on olnud suurendatakse. Väidan x on nüüd iganes see on, 2 arvatavasti. Aga see programm on lollakas. Milles probleem? Jah? [Kuuldamatu] David J. Malan: Täpselt. Nii et x on kuulutatud ilmselt eelarverea 18. See on sees peamine on looksulg. Nii lihtne vastus on see, et, noh, x on olemas siin. See ei ole real 32. Nii et see programm tegelikult isegi ei kompileerida. Kompilaator, kui üritan koostada see kood, läheb minu peale karjuma mõningate deklareerimata tunnus või midagi selle kohta. Tegelikult proovime. See on teha buggy4. Siin see on. Kasutage deklareerimata tunnus x real 32. Ja tegelikult, olgem selgem täna siin, nii et see on kasulik tööaega ja kodus. Pange tähele, et see on natuke cryptically kirjutatud. Kuid tõsiasi, et rõkkama on karjus meile, öeldes: buggy4.c: 32:5, on tegelikult kasulik. See tähendab, et viga on line 32 on sümboli positsioon viis. Nii et üks, kaks, kolm, neli, viis. See on tegelikult kui probleem on. Ja ka meeles pidada, kontoris tundi ja kodus, ma olen õnnelik siin. Mul on üks viga. See saab olema suhteliselt lihtne kindlaks määrata. Aga kui sa saad terve ekraani täis valdav veateateid taas mõistma, et alumise võiks lihtsalt olla põhjustatud tähtsaim ones. Nii et alati Chase ette oma vigadest ülevalt alla. Sest seal võib olla ainult pärgühendusega efekti oletada te on nii rohkem probleeme kui sa tegelikult teha. Niisiis, kuidas me saaksime seda parandada, kui minu eesmärk on juurdekasvu x? Mis see on? Okei. Nii et me saame x globaalne. Võtame otsetee, et ma hoiatanud varem. Aga kuradit, me lihtsalt vaja kiiresti lahendada. Nii et ütleme lihtsalt int x siin. See teeb x globaalne. Nii et nüüd peamine on juurdepääs sellele. Ja juurdekasv on juurdepääs sellele. Ja las ma edasi minna ja koostada selle nüüd. Tee buggy4, Enter. Tundub, et koguda nüüd. Lähme sõitma buggy4, ja tundub, et tegelikult töötavad. Nüüd see on üks neist asjadest - tee nagu ma ütlen, mitte nagu mina, nagu ma olen lihtsalt teinud siin. Sest üldiselt meie programmid ei hakka palju huvitavam ja palju enam kui see. Ja kui teie lahendus elu probleemid on lihtsalt ah, pange kõik muutujad ülaosas oma faili väga kiiresti teha programme saada hirmsalt raske juhtida. See muutub raskemaks mõelda uusi muutujate nimed. See muutub raskemaks mõista, mida muutuja mida teeb. Ja nii üldiselt, et see ei ole hea lahendus. Teeme seda parem. Me ei taha kasutada globaalse muutuja siit. Ma ei taha, et juurdekasvu x. Nii et ma võiks ilmselt - aasta lõpus päev, see on selline rumal lugu, sest me lihtsalt seda teha. Aga kui ma ei teadnud, et käitaja, ega ma ei lubatud muuta see peamiseks ise, kuidas ma võiksin rakendada Ken siia, see aega mitte kuubik kuid juurdekasvu? Kuidas muuta seda asja siin? Jah. [Kuuldamatu] David J. Malan: Okei, hästi. Miks ma ei läbida x? Ja siis mitte tagastada, miks ei ma lihtsalt ei tagasipöördumist x + 1? Nüüd veel paar asjad peavad muutuma siin. Ma olen õigel teel. Mida veel ma pean näpistama? Keegi teine. Jah? [Kuuldamatu] David J. Malan: mul on vaja muuta tüübi tagastamise juurdekasvu sest see ei ole tühine. Tühjus ei tähenda midagi teada tagastatakse. Aga selge, et nüüd on. Nii et see peab muutma int olema kooskõlas ükskõik Ma olen tegelikult tagasi. Nüüd midagi on ikka lollakas siin. Jah? [Kuuldamatu] David J. Malan: Nii et ma pean juurdekasvu x? [Kuuldamatu] David J. Malan: Ah, et mul on vaja läbida x. Nii et ma pean seda tegema siin. Nii prototüüp, ma pean seda muuta siin. Nii et see peab muutuma int. See peab muutuma - hmm. Tegelikult on mul viga siin. Olgem määrata selle ühe esimesena. Mida peaks see tegelikult olema? Nii see ju olema int midagi. See võib olla x. Aga ausalt öeldes, kui te alustada kutsudes kõiki oma muutujad x, see läheb aina vähem selge, mis on mis. Nii et olgem lihtsalt suvaliselt valida erinevate nimereeglistik minu helper funktsioone, funktsioonid Ma kirjutan. Me kutsume seda. Või me võiksime seda nimetada - olgem nimetame seda even_number olla isegi selgemalt. Siis ma pean tagasi arvust olenemata on pluss 1. Ja nüüd ma pean muutma veel üks asi siin üleval ja üks Teine asi siin üleval. Mida ma pean muutma on line 21 esimene? Pean määrata selle x. Nii et ma ei saa lihtsalt helistada juurdekasvu x. Pean mäleta vastust, muutes väärtus x, vasakul pool. Ja kuigi x on nüüd vasakul ja paremal, see on täiesti trahvi, sest paremal pool saab teostada esimene siis saab plopped arvesse vasakul Samas asi, x käesolevas asjas. Ja siis lõpuks, see on lihtne määrata nüüd. See peaks lihtsalt mängu mis on allapoole. Int arv. Hea küll. Nii et terve hulk muudatusi tõesti loll funktsioon. Aga esindaja asju, mida me järjest teha tahad. Nii et buggy4. Olen silmamunad kusagil. Oh jumal. Viis vigu, nagu, 6-line programm. Nii et mis viga on line 18, iseloomu 5? Hea küll. Nii et ma pean deklareerima int. Hea küll. Nii et vaatame, terve hunnik muid vigu. Oh my god. 19, 18, 21. Aga jälle, lihtsalt selge ekraan - Kontroll L siin - ja re-run rõkkama. Nii 5 probleemid on tegelikult just see üks. Nii et nüüd lähme jooksma buggy4, Enter. Whew. x on suurendatakse õigesti. Hea küll. Kõik küsimused selle kohta, kuidas juurdekasvu numbrid? Jah? SPEAKER 2: Miks on nii, et saate lihtsalt muuta x number muutuja nimetada ja see teab, mida sa silmas pead? David J. Malan: Hea küsimus. Kuidas on nii, et ma ei lihtsalt muuta x arvu ja programm teadma kohe? Nii et taas, ma arvan et kui see abstraktsioon. Nii et kui ma olen pea-ja Ken on kronoloogiline, ausalt, mind ei huvita Mis Ken kutsub oma iPad. Mind ei huvita, mida ta nimetab kõike, mis on pistmist tema rakendamine Selle funktsionaalsus. Nii et see on rakendamise üksikasju, et mina, peamine, ärge pea hooli. Ja nii lihtsalt muuta see järjekindlalt sees funktsiooni number siin ja number siin, on kõik see võtab nii kaua, kui ma kompileeri. See on omamoodi nagu kui sa arvad - paljud meist, neile, teile juhi litsentsid, kes olen sõita, või kui olete isegi sõidetakse auto - enamik meist ei tea, kuidas auto töötab all kapuuts. Ja sõna otseses mõttes, kui te avada kapuuts, enamik meist - mina kaasa arvatud - ei kavatse tea, mida me vaatame. Selline nagu sa võid tunda koos selliseid asju kohe. Aga me tõesti ei pea hooli sellest, kuidas auto töötab. Me ei pea hooli, mida kõik vardad ja kolvid ja kaablid sees auto on tegelikult seda. Nii et midagi, mida te nimetate kolb ei ole oluline siin antud juhul. Sama mõte. Jah? [Kuuldamatu] David J. Malan: Kui oleks rohkem kasutab muutuja xa Hetk tagasi te, programmeerija, oleks muuta neid kõikjal. Või võid sõna otseses mõttes teha Fail Menüü ja seejärel Otsi / Asenda, midagi sellist. Aga sa ei kavatse on teha need muudatused ise. Sa pead olema järjekindel. [Kuuldamatu] David J. Malan: kindlas järjekorras nagu siin? Kui see oli int teine ​​number? Jah. Nii et küsimustes, kui helistate funktsiooni. Nii et kui ma kutsusid juurdekasvu siin midagi koma midagi, seal on otsene kaardistamine. Esimene muutuja, mis iganes seda nimetatakse, on valmistatud koopia esimese argument siin. Vabandame, see ei peaks olema sulgudes. Teine argument ridade järele teine. Nii et, jah, küsimustes. Hea küll. Vabandust võtsin pikk tee sinna jõuda. Muud küsimused? Hea küll. Nii et vaatame, kui me ei saa maalida pilti sellest, mis tegelikult toimub siin all kapuuts, nii rääkida. Nii et see on ristkülik, mis võivad viidata arvuti mälu. Nii et isegi kui sul pole aimugi, kuidas mälu töötab või kuidas RAM töötab, vähemalt eeldada, et teil on kobarad see nendel päevadel. Sul megabaiti ta. Sul gigabaiti seda. Ja me teame nädal nulli, et bait on just see, mida? 8 bitti. Õige, nii 8 nullidega ja ones. Nii et kui arvuti on kaarik RAM, kaks kontserti RAM nendel päevadel, teil on miljardit eurot ehk 2 miljardit baiti mälu, või umbes 8 miljardit või 16000000000 bitti, sees arvuti. Nüüd erinevalt vähe Karvane Willy näiteks, see ei ole magnetilisi osakesi tavaliselt enam. Üha sülearvutid vähemalt, see on SSD ketastele SSDs, et lihtsalt ei ole liikuvaid osi. See kõik on elektrooniline. See kõik elektri aluseks. Nii et arvan küll, selle ristküliku kui lihtsalt esindavad üks või kaks gigabaiti mälu, et teil on. Nii et see on patakas mälu. Nüüd on maailm infotehnoloogia on omamoodi piiretega tükkideks mälu teha erinevaid asju. Nii näiteks, kui see on teie arvuti RAM - nagu soovitas ristkülik seal - Selgub, et tavapäraselt ülaosas oma RAM, nii rääkida, on üldiselt see, mida nimetatakse tekstiosa. Need on nullidega ja need, mida on koostanud. Nii et kui me vaatasime all kapuuts, mida a.out on kõik nullidega ja neist - kui te käivitate programmi, need nullidega ja need laaditakse teie raske sõitke midagi, mida nimetatakse RAM. Ja RAM, nad panna ülaosas. Nüüd vahepeal on teil muid asju. Vormindatud andmed, uninitialized andmed. Need kaks vaalu mälu viidata globaalsed muutujad, mis te ei kasutavad sageli. Aga mõnikord, kui te seda teete, nad lõpuks sinna samuti. Siis on mõned muud kraami. Keskkonnamuutujaid, mida me ei kuluta palju aega. Aga siis kaks olulist asja, mis tulevad tagasi kogu selle semester, korstnat ja hunnik. Nii et enamik arvuti mälu on reserveeritud sõites programmi midagi, mida nimetatakse korstnat ja midagi, mida nimetatakse hunnik. Ja me ei hakka rääkima hunnik täna, kuid me rääkida pinu. Ja pakk on mõeldud võluda välimusega nagu söögisaal jahu plaate Ema Maja või kus iganes juhtub olema, kus söögisaal personal puhastada neid iga päev. Nad korstnat neid kuni põranda üles. Ja täpselt samamoodi mälu on see idee panna midagi Kestab, pannes midagi virna, pannes midagi pinu. Ja mida me öelda? Noh, olgem suumida ainult alumises pooles seda pilti, arvuti RAM, esitades järgmised. Selgub, et kui te käivitate programmi nagu a.out või tere, olenemata programm on, et olete kirjutanud, jälle need nullidega ja need laaditakse arvuti kõvakettalt - mille on pikaajaliseks säilitamiseks, jääb sinna ka siis, kui te tõmmake alati pistikust - laaditud RAM. RAM on kiirem kui kõvakettad. See on väiksem kui kõvakettad. Aga see, kus programmid elavad samas näed neid. Nii et te topeltklõps programmi Mac või PC - see on laaditud kõvaketas mällu. Niipea, kui see on laaditud RAM, nullidega ja need lähevad kell viis üles, nn tekstiosa. Aga siis kohe, kui teie programm tegelikult käivitub, peamine funktsiooni nimetatakse. Ja peamine, nagu oleme näinud, on sageli lokaalsed muutujad. Ja see on ints ja keelpillidele ja tähed jms. Seega, kui teie programm, et olete kirjutanud või programm, mis teil on topelt klõpsatud kasutatud mõned muutujad sees peamine, nad lõpuks kell alt oma pakk mälu, kui nii võib öelda. Nüüd konkreetsemalt, mida see tegelikult tähendab? See lihtsalt tähendab, et kui me ei kavatse numbrile asjad - kui me ei kavatse arv baiti RAM arvuti, märkate, et see võib olla baidi number null. See võib olla baidi number üks, kaks, kolm, neli, viis, kuus, kõik tee kuni meeldib - 2000000000 oleks kõik viis kuni seal tipus. Nii et teiste sõnadega, kui me räägime RAM või mälu poolest baiti, tähendab lihtsalt, et keegi on otsustanud, mida nummerdada iga need mäluhulka. Nii et kui teil on vaja 32 bitti jaoks int, või vajate 8 bitti jaoks char, kus nad jõuavad mälu? Noh põhimõtteliselt, nad lihtsalt lõpuks allosas see asi nimega pinu. Aga mis on huvitav nüüd on siis peamised kutsub funktsioon. Oletame funktsioon nimega foo, lihtsalt suvaline nimi. Mis juhtub on see peamine on allosas see pakk mälu. Foo nüüd pannakse peal peamised mällu. Nii et kõik kohalikud muutujad, et suva on lõpuks omamoodi kontseptuaalselt üle need, peamised. Kui foo helistab teisele funktsioon nimega baar, need muutujad sattusin. Kui Kõnede midagi muud, siin, siin, siin. Mis siis huvitavat programmi käivitamist on see, et kui te helistate funktsiooni, ja kui need ülesanded kutsuvad funktsioone, ja kui need ülesanded kutsuvad funktsioone, teil ehitada see pakk funktsioonide mälu. Ja alles siis, kui funktsioon tagastab sa alustada saada, et mälu tagasi. Nii et üks lihtsamaid viise otsa mälu arvutiprogramm peab kirjutada funktsioone, mis kunagi tagasi. Nii näiteks olgem näidata nii palju koos tahtlikult lollakas programm. Lubage mul minna ja teha # include , int main (void). Ja ma teen samal ajal (2> 1), mis ilmselt ei ole kunagi muuta meid. Ja lubage mul minna nüüd ja teha printf. Tegelikult, see saab olema vähem visuaalselt huvitav. Teeme seda. INT (i = 0; i> 0). Teeme seda viga, i + +. Ja ärgem printf siin. Olgem tava, mida ma jutlustada. Teeme meetod siin. Void kooris, ja me ütleme int i. Ja siis ma lähen ütlen, printf - oh, teeme selle huvitavamaks. Olgem tegelikult ei prindi üldse midagi. Lihtsalt teeme seda. Refrään (i). Hea küll. Nii et see on lollakas, sest miks? Ma kujutan seda ette kui ma lähen, sest programm ei ole tegelikult midagi teha huvi. Aga see pole eesmärk. Eesmärk on kirjutada programm, mille peamine funktsioon teeb seda, mida ilmselt? Helista ise. Ja tegelikult, me ei pea silmus. Olgem isegi lihtsustada seda lihtsalt, et mitte unustada tõesti põhiline viga. Peamised kõned koori laulma mõned koori. Siis ma tegin midagi rumalat, ja mul oli refrään kõne koori, sest ma eeldasin keegi pidi seda rakendada võibolla. Ja nüüd see ei kavatse koostada veel. Ma pean tegema mida? Vajan prototüüp, mäletan. Nii et ma pean olema siin tühine koori (int i);. Nii et nüüd, kui ma lähen siia alla - tegelikult, olgem kasutada suuremas aknas. Lähme edasi ja teha refrään. Lähme edasi ja teha refrään. Kasutage tuvastamata väljamängija i. Oh, see oli loll. Me ei vaja argument. Lihtsalt teeme seda. Oleks meil hakkas sel viisil. Oleks olnud palju lihtsam programmi kirjutada. Nii seal. Lähme nüüd üle mu terminaliakent, uue ringi rõkkama. Ja siin me läheme. See oli tõesti kiire. Mis tegelikult juhtus, kuigi? Noh, nüüd ma lisada trüki rea, et saaksime näha. Nii et lubage mul öelda printf, oletame, et ma olen siin. Okei, ei muutujad, jätame selle niimoodi. Lubage mul uuesti käivitada teha. Las ma uue ringi koori. Ja tule. Lase edasi. Nagu kõrvale, miks on see ole veel kokku varisenud? Killustatust süü juhtus ülikiire enne. [Kuuldamatu] David J. Malan: Täpselt. Nii et see võtab aega printida. See lihtsalt võtab rohkem tööd arvuti osa. Ja siin see on. Segmenteerimine süü. Nii märkate, kuidas kiire programme. Kui te ei prindi midagi, super kiire. Aga saime ikka seda killustatust süü, sest mis juhtub? Noh, kui te arvate, kuidas teie arvuti mälus on sätestatud, seda juhtub olema peamine. Aga siin - Ütleme nii, see refrään, ja olgem nimetame seda koori. Ja nüüd, kui ma teen oma esteetika õigus, see on lihtsalt ütlen kooris, kooris, koori, koori, koori, koori, koori, reklaami nauseum. Ja lõpuks, mis juhtub? Kui suur pilt sõna otseses mõttes on see, mis lihtsalt juhtub kontseptuaalselt? Korstnat ületamise hunnik. Või veel hullem, sa lihtsalt ületanud kõik, sealhulgas teksti segment, mis on nullidega ja need, mis kujutavad oma programmi. Lühidalt, see on lihtsalt super, super halb. Eks? Teie programm on spiraled kontrolli. Sa kasutad nii rohkem mälu kui sa ette kõik, sest loll viga sel juhul. Või antud juhul väga teadlikult teinud funktsiooni kutsutakse ise. Nüüd ei ole see kõik halb. Funktsioonid kutsuvad end tegelikult on suurriik kui te kasutate seda õigesti. Ma ei ole kasutanud seda õigesti siin. Nii et see ei ole kõik halb. Kuid tõsiasi, et ma ei ole kunagi tegelikult ärge kutsuge ise on põhiline nõrkus siin selle programmi. Nii et kui me läheme selle kõigega? Noh, mis tegelikult toimub? Kui ma kutsun juurdekasvu funktsioon, nagu me tegime ka neid näiteid, Mul on raha nagu 1, et annan sisse Ma läbida koopia number üks. Nii et järgmine juhtub. Nii et lähme sisse juurdekasvu näiteks. Ja see kutt siin. Nii et siin on, mis tegelikult toimub. Kui ma helistasin juurdekasvu, ja ma läbida x, piltlikult mis on siin toimub on see - kui mul on väärtus 1 ladustatud siin, ja ma tegelikult helistada juurdekasv, mis on nüüdsest koori - Jah, see on viskamine mind siin maha. Nii et olgem nimetame seda juurdekasvu. Ja me ei tea, mis see järgmine funktsioon saab olema. Nii et mis tegelikult toimub on siin kusagil peamine, mul patakas mälu, mis on hoidmiseks number 1. Kui ma kutsun juurdekasvu, ma kasutan teise tüki mälu, aga nüüd ma on koopia 1. Kui ma juurdekasvu, et väärtus, see saab 2 - jubedalt kirjutatud ekraan siin. Aga siis, mis juhtub niipea kui juurdekasvu tulu? See mälu lihtsalt saab kätte tagasi operatsioonisüsteemi, mis tähendab kõiki sa oled teinud midagi kasulikku. Üks, mis oli algselt esitatud peamised on ikka tegelikult olemas. Nii et kui me läheme seda? Noh, tuleb välja, et mälu sul on see seljad jada baiti, mida saab panna asju sisse Ja selgub, et me oleme juba näinud midagi, mis hõlmab pannes asjad seljad et seljad. Mis on string, mis põhineb nädalal ja nüüd nädal kaks? Nii et see on lihtsalt kogumise tähemärki. Nii selgub, just nagu saate panna numbrid mällu, samamoodi saab panna märke mälu. Ja kui me alustada pannes tähemärki mälu tagasi seljad kuni tagasi, selgub, et kasutades kõige lihtsamaid asju nagu loop või samas silmus, saame kinnitada, - vasakult paremale üle märkide jada - ja alustada massaging neid erinevaid märke täielikult. Võib saada B. võiks saada C. Nii et lõppkokkuvõttes saame Inglise lause, et tegelikult on mõistlik ja teisendada iga nimetatud tähed ükshaaval jalgsi läbi meie arvuti mällu jäänud õigus tegelikult varjata. Võtame meie viieminutiline paus siin, ja kui me tagasi tuleme, siis me alustada seda protsessi skrambleerimise andmed. Hea küll. Nii et enne kui me sukelduda mõned krüpto ja neid asju nimetatakse massiivid, las ma pausi küsimusi, sest ma tunnen, et ma tõesti selline segane mõned neid teemasid. Nii et olgem määrata nüüd, kui saame. Nii et me lihtsalt rääkisime tagasi väärtused. Me rääkisime argumendid. Ja me rääkisime seda mõistet, mis me tuleme tagasi sisse nädalat tulema, vaatamise mälu terve hunnik neid kuhjata plaate, nii rääkida. Alt ülesse, nii et iga salve, et saab panna virna esindab funktsioon, mis on praegu nimetatakse. Kas on küsimusi? Niisiis, kuidas umbes - las ma proovin küsimuse esitamist. Hoian Soovida seda, kuid nüüd see on - you've kõik näinud poisi nägu. Nii et me tuleme tagasi selle. Nii et lubage mul küsida küsimus siia. Lubage mul seda lihtsustada tagasi see oli enne mõned meie varasem Q & A. Ja asjaolu, et juurdekasv on avatud sulgudes, int arv, suletud sulgudes. Mis int number koosneb? [Kuuldamatu] David J. Malan: argument. Okei, aga mis on argument? [Kuuldamatu] David J. Malan: Vabandust, mis see on? SPEAKER 3: Midagi te kaotate sisse David J. Malan: Okei. Nii et midagi, mis te kaotate sisse Ja üldiselt see on lihtsalt sisend. Kui kirjutate funktsioon ja mis funktsiooni eesmärk elus on teha midagi veidi erinev iga kord, kui seda kasutada, siis ainus viis, sel juhtuda tõesti tundub olevat seda anda oma panuse, nii et see saab teha midagi erinevat selle sisendi iga kord. Nii et teil on vaja täpsustada kahte asja, kui funktsioon võtab sisendeid. Sa pead täpsustama nimi, mida soovite anda selle sisend, puhtalt oma mugavuse nii et saad vaadata seda funktsiooni, mida ise kirjutad, nagu ma siin tegin real 32. Aga siis tuleb ka määrata oma tüüp, sest C on programmeerimiskeel et lihtsalt nõuab et kui sa tahad muutuja, peate ütleb arvuti, mida andmetüüp on, suures osas nii, et ta teab, kui palju bitti eraldada, et muutuja. Sest see võib olla 6 - Vabandust, see ei ole kuue. See võib olla 16. See võib olla 8. See võib olla 32, isegi 64. Aga arvuti peab teadma. Nüüd int vasakul servas näitab, mida seevastu? [Kuuldamatu] David J. Malan: Mis see on? [Kuuldamatu] David J. Malan: tüüpi funktsioon ja täpsemalt tüüpi toodangut. Õigus. Nii et arvestades asja sulgudes tähistab oma panuse, kui üldse, asi vasakule esindab oma toodangut. Ja sel juhul, juurdekasv ilmselt tagastab int. Ja nii int on tüübi tagastamise seda funktsiooni. Mis see tähendab, et vastutasuks? Sõna otseses mõttes, kui kasutate märksõna tagasi. Ja siis, kui see, mida sa naased paremal märksõna on täisarv, siis see on tõepoolest kooskõlas sellega, mida oleme lubanud. Sa ei saa teha midagi sellist - hello, world - sest see on string. Muidugi ei ole täisarv. Nii lühike, koorem on tõesti meile, programmeerija, et olla täpne et mida me tagasi ja siis tegelikult minna selle tagasi. Ja siis teha tad rohkem selge kontekstis - seal ta on uuesti. Kontekstis - suur üllatus tulemas üks hetk. Kontekstis siin nüüd on, et arvuti mälu on taas gigabyte kaks gigabaiti, mida iganes. Ehk rohkem. Võib-olla on vähem. Aga arvuti peab seda on eri osades. Midagi läheb sinna alla. Midagi muud läheb sinna. Erinevad asjad lähevad keskel. Ja täna me lihtsalt hakkame ütlen seda lugu. Aga me tuleme tagasi selle aja jooksul. Praegu ainult tükk mälu me tõesti hoolivad on tekstiosa sest see lihtsalt näitab nulli ja need et rõkkama on väljastada. Nii et kui sa jooksed käsk klaviatuuri nagu a.out, või sa topelt kliki ikooni Mac OS või Windows, oma programmi laadida oma raske sõitke RAM. Ja see on plopped ülaosas oma arvuti RAM, nii rääkida. Nüüd vahepeal oma programmi käivitub ja peamised läheb kutsutud programmi sa kirjutasid või programmi Microsoft või Apple kirjutas, tema kohalike muutujate lõpuks seal allosas arvuti mälu. Aga kui peamine helistab teisele funktsioon, mis ise on muutujate või argumente, nad lõpuks kohale. Ja kui see funktsioon nõuab midagi, nad lõpuks kohal, kõrgemal, selle kohal. Ja alles siis, kui funktsioon on teinud täidesaatva teeb virna plaate, nii et rääkida, hakkama saada väiksem ja väiksem. Ja see on siis, lühikokkuvõte, seletab, kui helistate kuubik - või helistate juurdekasvu - sa läbides koopia väärtus. Ja mida see tähendab piltlikult, et sa sõna otseses mõttes kirjalikult number 1 teises osas mälu, muutes selle 1 kuni 2, kui tegemist on juurdekasvu - või 8, kui tegemist on kuubik - ja siis visata, et mälu ära niipea, kui juurdekasv või kuubik tagastab funktsioon. Küsimus. [Kuuldamatu] David J. Malan: Kui - globaalsed muutujad hoitakse mis on Praegu nimetatakse vormindatud andmed või uninitialized andmed. Erinevus on, kui sul on globaalne muutuja, ja siis anna see kohe väärtus võrdusmärki, see jõuab ülaosas seal. Ja kui sa ütlesid int x semikooloniga koos mingit väärtust, see jõuab kergelt madalam RAM lihtsalt kokkuleppeliselt. Muud küsimused. Hea küll. Nii et see pilt tulevad tagasi, kui saame võimsamaks mida me saame teha koos arvutiga. Aga nüüd, olgem on lühike sissejuhatus krüptograafia, konkreetset tüüpi krüptograafia see ei lahenda kõiki maailma probleeme, aga ei lahenda mõned neist. Sel juhul on meil midagi, mida nimetatakse salajase võtme krüptograafia. Ja saladus võtme krüptograafia, nagu nimigi ütleb, saab oma turvalisuse alates saladus. Nii näiteks, kui sa oled tagasi algkooli ja sa möödaminnes väike saladus armastus kirja poiss või tüdruk sa oled purustamine kohta - kui te tahtsin edasi, et läbi publiku, siis ilmselt ei kirjuta selline märkus inglise või mis iganes teie emakeel, vaid te võib varjata seda. Või võite lihtsalt saata sõnum nendel päevadel. Aga sa võiksid tegelikult andke neile teadmiseks kogu klassiruumis. Ja seda teha turvaliselt, nii et teie sõbrad ja õpetaja ei tea, mida olete kirjalikult, siis võib tulla üsna lihtne algoritm - noor kuigi võite olla - lihtsalt rüselus sõnu. Nii et selle asemel kirjalikult, sa võiksid kirjutada B. Selle asemel, B, sa võiksid kirjutada C. asemel C, sa võiksid kirjutada D, ja nii edasi. Või siis võiks tulla keerukamaid tõlge tähed erinevate tähtedega. Aga saak on poiss või tüdruk, kellele saadate teadmiseks vaja tea midagi. Mis on mis, ilmselt? Nagu, mida teie saladus on. Nagu, mis see on kaardistamise vahel As ja Bs ja Cs ja DS? Kas see on lihtsalt lisada üks, nii et rääkida, et iga tähti minna Punktist A punkti B, B C? Kas see keerulisem kui see? Nii et teie ja teie purustada pea olema see saladus teavet. Aga seal on mingi saak-22 siin. Kui see on esimene kord, kui saadate selle armastuskirja kaudu klass, kuidas on see poiss või tüdruk läheb teada, mis saladus isegi on? Nii salajane võti krüpto ei lahenda kõiki maailma probleeme. Ja seal on tegelikult suhe, et me tuleme tagasi suunas semestri lõpuks. Samamoodi on keegi meist ilmselt kunagi saatnud - Samamoodi ei enamik meist ei tea keegi, mis töötab näiteks kell Amazon.com. Ja veel, paljud meist on ilmselt ostetud kraami Amazon.com. Ja me oleme õpetanud oletada, et nende e-kaubanduse tehingud on turvaline. Eks? URL ilmselt ütleb https. Seal on võibolla rumal vähe tabaluku ikoon kuskil. Seal on mingi krüptograafia kindlustada oma krediitkaardi andmed Teie ja Amazon.com. Ja veel, kui krüptograafia hõlmab teades mõned salajased, ja veel ma ei tea keegi Amazonist ja ma kindlasti ei korraldatud mingeid saladus kellegagi Amazonist, kuidas on minu arvutis või minu brauser seda teed? Noh, selgub seal on teist liiki krüptograafia kokku, et lahendada et probleem. Aga täna, me keskenduma lihtne, kus saab korraldada ka eelnevalt teada mõned saladus, nagu pluss 1 või mõned kaardistamise vahel As ja Bs. Ja protsess krüptograafia tähendab tavaliselt seda. Sul on mõned lihttekstina kujutatud siin vasakul. Sa kestab see läbi mingi algoritm või menetluse krüpteerimiseks ta. Ehk on see lihtsalt muutub B, B muutub C. Ja siis lõpuks koos salakiri teksti. Vahepeal, kui oma kiindumuste saab saladus tähele, ta peab siis dekrüpteerida üldiselt tagurdades, et algoritm, et saada tagasi lihttekstina. Nüüd on füüsilise inkarnatsiooni seda. Näiteks see on väike saladus decoder ring. Ja see on ring selles mõttes, et seal on kaks valib siin. Väljastpoolt perifeeria see asi, seal on tähed A kuni Z, kuigi nad on suvalises järjekorras. Ja sees, seal on tegelikult mõned numbrid, nii et selle ring saab omamoodi omakorda väljaspool, kuid mitte sees, et rivistama numbrid tähed. Ja klipp sa parasjagu näha - millest mõned olete näinud 24/7 umbes Jõulud filmi nimega jõulujutt. Sa näed, et vähe Ralphie oli nii innukas, et aru saada, mis vähe harva Annie salajane sõnum oli temale, mis oli edastatud, ma arvan, moodustavad arvuliste sõnumeid seerianumber kasti. Ja sa pidid kogunema kõik vähe kaarte, mis tuli aastal teravilja kasti. Sul oli posti neid sisse Sa pidid tagasi minema salajane decoder ring, nii et saate lõpuks aru välja, mida kaardistamine on vahel tähti ja numbreid, või tähed ja tähed. Nii et ma annan teile selle lühikese klipi jõulujutt motiveerida pset 2 ja meie arutelu, hetk, massiivid. Nii et siin on meil Ralphie. [VIDEO PLAYBACK] -Olgu teada, et igaüht, et Ralph Parker nimetatakse liige Little harva Annie Secret Circle ning tal on õigus kõik kiitusega ja kasu esinevad lisa. Allkirjastatud, Little harva Annie. Allkirjastas Pierre Andre! Tindiga! Kiitusega ja hüvitised, juba üheksa-aastaselt. Tule, lähme edasi. Ma ei pea kõik see jazz umbes salakaubavedajate ja piraatidest. -Kuula homme õhtul sõlmida seiklus Black Piraatlaeva. Nüüd on aeg Annie salajane sõnum teile kohal Euroopa Secret Circle. Pea meeles, lapsed, vaid 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 - -Ma olen minu esimene salajane kohtumine. -14, 11, 18, 16 - -Pierre oli suur hääl täna. Ma võiksin öelda, et täna sõnum oli tõepoolest oluline. -3, 25. See on sõnum Annie ise. Pea meeles, et ei räägi kellelegi. -90 Hetk, ma olen ainult tuba majast, kus poiss üheksa võiks istuda privaatsust ja dekodeerida. Aha, B. Ma läksin järgmise. E. esimene sõna on olla. S. See tuli lihtsam nüüd. U. -Oh, tule, Ralphie. Ma pean minema. -Tulen kohe alla, ma. -Gee viuhti. -T, O. Kindlasti. Kindlasti mida? Mis oli Little harva Annie üritab öelda? Kindlasti mida? -Ralphie! Randy on saanud minna. Kas sa palun tule välja? -Olgu, ma. Ma tulen kohe välja. -Ma olin jõudmas nüüd. Pinge oli kohutav. Mis see oli? Saatus planeet võib vaekausil. -Ralphie! Randy peab minema. -Tulen kohe välja, taevas appi. -Gee, peaaegu seal. Minu sõrmed lendas. Minu arvates oli terasest lõksu. Igast poorist vibreerima. See oli peaaegu selge. Jah, jah, jah, jah. -Kindlasti juua oma Ovaltine. Ovaltine? Trullakas kaubandus? Litapoeg. [END VIDEO PLAYBACK] David J. Malan: Nii et meil on krüptograafia. Niisiis, kuidas arvuti me saame minna rakendamisel või esindavad selliseid asju? Noh, me vajame viis väljendada end natuke paindlikumalt kui meie muutujad on seni lubatud. Meil on olnud ints. Meil on olnud tähemärki. Meil on olnud ujukite ja kahekohalised ja mõned teised. Aga need on eravalduses mälu, mis tegelikult ei võimalda meil väljendada asjad sõnu ja lauseid ja fraase. Tõepoolest, me oleme kutsutud selliseid asju stringid. Aga me lubasime, et see on tõesti vaid lihtsustamise CS50 raamatukogu, et me kavatseb koor tagasi. Ja nii alustame seda teha siin. Lubage mul minna ja avada fail - kõik need failid on saadaval nagu tavaliselt internetis - nimetatakse array.c lahendada probleemi mitteseotud stringid kuid kes värvivad pilt siin on, kuidas me võiksime kasutada midagi, mida nimetatakse massiivi. Massiiv on andmetüüp. See on tüüpi muutuja, kehvasti, et on mitmeid väiksemaid andmetüübid sees on seljad et seljad. Nii näiteks, kui me tahame kirjutada väike programm, mis annab teile teie viktoriin keskmiselt muidugi nagu 50, mis on kaks viktoriinid, võid väga kergesti kirjutage see programm - põhineb isegi mõned eelmisel nädalal materjal - kasutades GetInt ja paar muutujad. Int quiz1, int quiz2, ja see on üsna lihtne. See on võibolla 10, 20 rida koodi, maks, et rakendada programmi, mis küsib kasutaja kahe viktoriini skoorid ja siis arvutab nende keskmise lisades need koos, jagades kaks ja seejärel printida tulemust. Võiksime tõenäoliselt teha päris kergesti nüüd pärast mõned minutite arv. Probleem on aga selles, et oletame, et 50 oli kolm viktoriinid või neli. Oletame, et sa tahtsid kasutada sama programmi klassi, mis oli iganädalane viktoriinid. Mõtle klassi, mis on iganädalane viktoriinid. Kui seal on nagu 16 või nii nädalat semester, nüüd on 16 näitajat - int quiz1, int quiz2, int quiz3, int quiz4. Niipea kui hakkate nägema seda koondamine, see kopeerida ja kleepida koodi, see peaks hakkama sind soovin, et oleks parem. Ja õnneks, sest massiivid on. Nii et teeme seda. Esiteks lubage mul tutvustada väga lihtne asi, et me pole kasutatud seni kuid näete seda vahetevahel kood. See on see, mida on üldiselt nimetatakse samaks. Nii et see on pidev selles mõttes, et see väärtus ei muutu kunagi. Inimeste konventsiooni loomisel pidevalt on kasutada kõiki kapitali tähed, just nii, et see tõesti paistab silma oma koodi. Ja eriline märksõna, mida saate kasutada C # define. Nii et kui sa ütled # define, siis ruumi, siis sõna, mida soovite kasutada pidev nimi ja seejärel väärtus samaks. Nii teate, see erineb määrates midagi muutuja. Pole mingit võrdusmärki. Pole semikooloniga. See on see, mida on üldiselt tuntud kui eeltöötluse direktiiv, kuid rohkem et teine ​​kord. Praegu tekitab see muutumatu väärtus nimega TESTID kelle tegelik arvuline väärtus on 2. Nii et kuskil näed viktoriine, interaktiivseid viktoriine kogu seda faili, mis on lihtsalt number 2. Nüüd, kui ma vaatan peamised nüüd, vaatame, kuidas see töötab. Alguses tundub veidi segasena. Aga see on kõik kraami nädal üks. Küsi kasutajalt klassid. Kuidas me seda teeme? Noh, vastavalt 22 - see on tõesti mahlane osa - Kinnitan, float, kuid mitte ainult ühe sularahaga. Ma kuulutatakse pigem massiivi murdarve. See muutuja nimetama hakatakse hindeid, kui sellele viitab siin. Aga ainult tükk uus süntaks siis on need nurksulud, asjaolu, et ma olen öelnud float klassid ja siis sulg ja siis number. Teate, kui see on pidev, see on nagu me seda tegime. See tähendab, hei arvuti, anna mulle mõlemad ujukid, ja olgem ühiselt kutsuda neid klasse. See on kontrastiks palju tüütu protsess niimoodi. Float Grade1, float Grade2, ja nii edasi. Nii massiivi võimaldab meil rakendada seda ideed, kuid palju vähem räpakalt, et nii, et me saame kirjutada üks rida koodi asemel, ütleme, 16, 16 nädal poolaastal. Nii et ma ei tahtnud kõva-kood 2, sest kui sina arvad sellest nüüd loogiliselt - oletame järgmisel aastal CS50 muudatusi kuni 3 viktoriinid asemel. Ja mul oli number 2 siin. Mul oli number 2 siin. Mul oli number 2 siin. Mul oli number 2 siin. See muutub väga tüütu ja väga lihtne kägardama ja kogemata muuta ühe väärtuse 3 ja jäta mõned muud väärtust 2. Nii et ma lähen selle asemel abstraktne see ära ja kasutavad seda pidevalt, et tema nimigi ütleb, ei muutu kunagi. Ja nüüd, ükskõik kas meil on erinevad viktoriinid sel aastal või järgmisel, ma lihtsalt seda muuta ühes kohas, siin üleval. Nii et kõik on konstant. Vahepeal uut kontseptuaalset omadus on, et massiivi. Nii nurksulgudes anna mulle seda palju ujukite ja laseb mul ühiselt helista neile hinded siin. Nüüd vaatame, mida ma teen. Siin Rida 24 on algusest jaoks silmus. See on tõesti midagi meeldib. See on lihtsalt kasutades viktoriinid asemel püsiprogrammeeritud arv. Aga seal on midagi intellektuaalselt erinevate sinna eelmisel nädalal. See on lihtsalt printf. Nii printf ("viktoriini arv% d% d"), sest ma tahan välja printida mulle viktoriin Number üks kahest ja siis kaks kahest. Nii et see on puhtalt esteetiline asi. Aga huvitav osa nüüd on rida 27. Selleks, et täita üks kahest kohatäited koos ujukoma väärtus, siis jälle kasutada nurksulgudes. Sel juhul ma kasutan i, sest see loop on alanud i võrdub Mis väärtus, ilmselt? 0. Nii et esimese iteratsiooni see ahel, see on nii, nagu ma Kirjutasin selle koodina. Aga teist iteratsiooni see silmus, see on nii, nagu ma Kirjutasin selle oma koodi. Kuid tõsiasi, et ma kasutan muutuja on täiuslik, sest, nagu nimigi soovitab, see on erinev selle väärtus igal iteratsiooni. Nii et ma täita see massiivi ühe kohapeal korraga. Mida see massiivi välja näeb? Noh, põhjus ma joonistasin seda super lihtne ristkülik ekraanil siin enne oli sel põhjusel. Massiiv on lihtsalt patakas mälu järgneb teine ​​patakas mälu, järgneb teine ​​patakas mälu ja nii edasi. Nii et kui minu rida on suurus 2, antud juhul siin, kõik, mida ma teeks poolt kirjutades minu viktoriini skoorid, nagu siin. Ma sain 100 seda. Ja siis ma sain 99 see üks. Siis see mälu ei pruugi isegi kasutada, sest ma olen ainult palus arvuti massiivi suurus 2. Need väljakud on ikka veel seal. Eks? Teil on veel kaks gigabaiti operatiivmälu, isegi kui sa oled ainult paludes mõlemad ujukid. Nii et idee massiivid on see, et arvuti lihtsalt võtab tüki mälu ja siis jaotab väiksemateks tükkideks seljad et seljad. Ja nii ongi kõik massiiv on. See on külgnevas patakas mälu, mille sees saab panna asjad. Nüüd see juhtub siis tee lihtsalt mingi igav aritmeetika. Kui ma keri siin on see, kus ma siis itereerime massiivi. Ma tulla liitmise kõik väärtuste massiivi. Ja siis ma kasutan ringi funktsioon siin tegelikult teha Kokkuvõttes jagatakse viktoriine. Aga las ma siputan kätt, et kui omamoodi piisavalt aritmeetika nüüd. Aga kõik, mis teeb minu jaoks lõppkokkuvõttes on arvuti keskmine. Nii et esimene viktoriin pluss 2. viktoriin, jagatuna 2 ja seejärel printimise see välja nagu int. Aga olgem nüüd ülemineku erinevaid Näiteks nimetatakse string1, mis on samamoodi, kuid kasutades stringid. Lubage mul minna ja lihtsustada seda hetkeks. Ja anna taandus nüüd. Teade kooskõlas 19. Selles näites ma saan stringi kasutaja. Aga teate, mis ma järgmisena teeb eelarveridadel 22 aastast. Ma olen tegelikult itereerimise alates i kuni - ja see on uus trikk - strlen, string pikkusega. See on funktsioon, mis on koos C et kui te kaotate see nöör, see ütleb kui palju märke on, et nöör. See on kõik. Asjaolu, et see on strlen asemel stringi pikkus on lihtsalt sellepärast, et see on sisutihe. 30 aastat tagasi, inimesed tahtnud kirjutada asju lühidalt kui võimalik. Nii oleme hoitakse selle konventsiooni siin. i + + tähendab lihtsalt juurdekasvu i iga iteratsiooni. Ja nüüd märgata seda, mis on tõesti huvitav. Nii kooskõlas 24, ma ütlen arvuti, anna mulle märk, kaheksa bitti, ja nimetavad seda c. Aga milline on see paremal pool räägib? Inglise keeles, mida see koosneb? [Kuuldamatu] David J. Malan: Täpselt. Anna mulle esimene märk massiiv. Või üldisemalt, anna mulle i-nda märgi massiiv. Ja mõistma, et see on oluline nüüd, et kui arvuti teadlased, me oleme tegelikult lugedes 0. Sul ei ole kaalutlusõigust nüüd hakata seda tegema. Nüüd on teil käituda vastavalt arvuti ootustele ja loe nullist, sest [0] saab olema esimene märgi string. [1] saab olema teine. [2] saab olema kolmas ja nii edasi. Nii et see programm, kui ma kompileerida - see on jällegi string1. Nii et string1. Ja nüüd ma saan string1 minu terminaliakent. See ootab sisend, nii et ma lähen sisestada, ütleme, David. Enter. Ja nüüd ta prindib DAVID kõik erinevatel teedel, sest teate, mis ma teen. Ma printimise üks täht korraga. Nüüd me ei hakka üksikasjalikult täna selle. Aga ma välja hetk tagasi selle kontrolli siin. Selgub, et kui kasutaja ei toimi, võistlevuse, või lihtsalt segaduses, saab tegelikult ei anna string põhjalikkusega. Kui põrkad vale klahvi klaviatuuril, siis võiks anda no string üldse. Või kui sa oled pahatahtlik, võite proovida kleepida GB väärtuses essee, et täita seda stringi. Ja kui arvuti mälu, tuleb välja, et me ei kavatse et saada tagasi see eriline väärtus nimega null. Nii et nüüd lihtsalt tean, et seal on see eriline väärtus nimega null, et annab meile võimaluse vaadata, kui me mälu, muu hulgas. Aga kui ma avada nüüd string2, märkate üks erinevus siin. Teade üks erinevus siin string2. Mis string2, seda silmus on veidi erinev. Las ma kustutan nulls et saaksime rääkida need muul ajal. Aga mis on erinev umbes jaoks silmus seekord? Ja ma ei saa minna tagasi eelmise näite puhul. Nii et see versioon kaks. See on versioon üks. Üks, kaks, üks kaks. Nii strlen kõne on kus? See on esimene osa jaoks silmus. Kõik mõtted, miks ma seda teen? Jah. [Kuuldamatu] David J. Malan: Nii et me ei sea funktsiooni iga kord. Täpselt. Meenuta alates jaoks silmuseid, et nad on super lihtne, kui sa omamoodi aru, et see on käivitamise, seisukorras ja uuendatud. Probleem on selles, et tingimus juhtub iga iteratsiooni silmus. Ja nii see näide, mis on halb sellest, et see on minu tingimus? Helistate strlen uuesti ja uuesti ja uuesti. Aga kui ma olen sisestatud DAVID, pikkus, et string on viis. Ja see ei muutu iga iteratsiooni silmus sest string on ikka D-V-I-D. Nii et see on vihje, mis hakkab muutuma üha tähtsamaks idee tuntud disaini otsus, kus - lihtsalt ei teha arvuti teha lisatöö. Nüüd nagu vargsi eelvaade pset 2 pset 2 Standard Edition on kavatse vaidlustada sa tegelikult rakendada teatud arvu ciphers, mõned arvu krüpteerimisalgoritmide nii, et saate nii krüpteerimiseks ja dekrüpteerimiseks SECRET kuuluvate sõnumitega, palju nagu üks Ralphie seal dekodeerida. Kui häkker väljaanne pset 2, me läheme veidi kaugemale. Me läheme käe faili tegelik arvutisüsteemi, mis sisaldab terve hunnik kasutajanimesid ja tegelikke krüpteeritud paroolid ja väljakutse jaoks häkker väljaanne saab olema crack need paroolid ja joonis välja, mida krüptograafia või mis saladus kasutati tegelikult tekitavad need paroolid. Ja me ei kavatse seda teha, kasutades uut funktsiooni siin C et ma annan sa lihtsalt demo, mida tuntakse käsurea argumente. Nii selgub, nagu mõned teist ehk märganud jaos või õpikutes, Peamised alati ei pea olema tühine sulgudes. Tuleb välja, et peamised võib kirjutada ka niimoodi, kusjuures kaks argumenti, argc ja argv, kus argc on sõnade arv tipite pärast Programmi nime oma käsurida. Ja argv on tegelikud sõnad. Ja nagu nurksulud seal näitavad, argv on ilmselt massiivi. See saab olema string pärast string pärast stringi mälu. Nii et me ei kavatse olla võimeline tegema, alustades pset 2, on midagi sellist. Kui ma argv1, mis on näide me tuleme tagasi esmaspäeval ja käivitage see, märkate, et see ei tundu midagi teha veel. See lihtsalt trükib välja oma nime all. Aga kui ma hüvasti klass, teate, et see programm ilmselt kordab üle iga sõna, mis olid kirjutatud käsureale. Ja vahendid, mille abil me pääseda sõnad, et kasutaja on kirjutate kiire on, muutes peamine, alustades sel nädalavahetusel, alates int main (void) int main (argc, argv). Ja nõnda sünnib käsurea argumente. Ja kui sa tõesti kogenud seda, sa pead olema võimeline kirjutama tõesti trippy programmid, nagu see siin, mis läheb üle ja kaugemale mõned funktsioonid oleme seni teinud vaid kõik üsna võimas. Nii et jätame selle selle ekraanil. Ja me näeme esmaspäeval.