[Powered by Google Translate] [Viikko 2, jatkuu] [David J. Malan, Harvardin yliopisto] [Tämä on CS50. - CS50.TV] Selvä. Tämä on CS50, ja tämä on viikon 2 lopussa. Jos odottaa nälkäinen näihin aikoihin huomenna, tietää, että aiomme koolle niin pieni ryhmä huomenna, torstaina 13:15. On tämä URL täällä jos haluat vastata kutsuun. Avaruus on rajoitettu, joten anteeksi jos lomake on täytetty mennessä täytät tätä ulos. Toinen URL kuitenkin, että saattaisi olla kiinnostunut tämä. Vain noin kuukauden ajan, kurssi tulee olemaan saatavilla kaikki laajemmin kautta EDX, jonka kautta ihmiset Internetissä voi seurata pitkin, harjoittaa tietenkin melko aktiivisesti, itse asiassa. He käyttää CS50 Appliance ja CS50 Keskustele ja suurin osa eri ohjelmistoja, joita meillä jo on käytössä tällä lukukaudella. Ja yksi aloitteista haluaisimme ottaa koska kokeilu tänä vuonna on nähdä, kuinka paljon sisältöä voimme kääntää muihin puhutut ja kirjoitetut kielet. Joten jos saatat olla kiinnostunut osallistumaan hankkeeseen jonka annamme Englanti selostukset ja tekstitykset kurssin luennot ja shortsit sekä seminaareja ja osat ja vastaavat, jos puhut sujuvaa tai kirjoittaa sujuvasti muulla kielellä, me haluamme harjoittaa sinua tässä hankkeessa, jossa otat yhteen tai useampaan videoita, kääntämällä ne kieli tiedätte varsin hyvin. Annan teille tunteen käyttöliittymä on tämä web-pohjainen käyttöliittymä että me voidaan käyttää joka luo lähinnä UI näin. Tämä minua opettamaan joitakin Halloween sitten ja oikealla puolella on musta vieressä näiden aikaleimat, näet eri asioita, jotka tulivat suustani, että päivä, ja sitten sen alla voit kääntää jotain muuta kieltä mitä kartoitus välillä, tässä tapauksessa, Englanti ja vaikkapa espanja. Joten se on todella hyvin käyttäjäystävällinen työkalu. Voit kelata ja nopeasti eteenpäin erittäin helposti näppäimistöltä. Joten jos haluat osallistua tähän kokeiluun ja pyydä sanoja nähdä ja lukea mukaan mahdollisesti tuhannet ihmiset siellä, ota rohkeasti osallistua. Yksi sana pennun maanantaista. Ettei olemme lähettäneet liian pelottava sanoma, tee ymmärtää, että virka ehdottaa ja osat viittaavat siihen, suunnittelu tietenkin on hyvin paljon pitänyt opiskelijoiden yhteistyötä ja puhuvat työn kautta ongelma sarjaa ja ongelmia yhdessä, ja oikeastaan ​​linja vain tulee alas, uudelleen, työtä olet lopulta lähettää pitäisi olla oma. Ja niin aivan rehellisesti, että virka on täysin normaalia, se on täysin odotettavissa jopa olla chattailuun joitakin ystäväsi vieressäsi. Jos hän kamppailee joitakin aihe ja et pidä, "No, minä annan sinulle Hanko joidenkin koodirivin että kirjoitin, että" on hienoa, näin tapahtuu, ja se on hyvin paljon suotuisa, luulen, jossa oppimisprosessi. Jos linja saa ylitti on, kun pää on tavallaan kallellaan täällä aivan liian monta sekuntia tai minuuttia, jotka todella ovat vain olleet Unblocking mahdollisuus ystäväsi, ja varmasti sitten kun vaihdetaan sähköpostitse ja Dropbox ja muut vastaavat, sielläkin on viiva. Joten kaikin keinoin viihtyvät ja rohkaistava jutella ystävien kanssa ja luokkatoverit noin psets ja yhä vain ymmärrä, että mitä lopulta jättää pitäisi oikeastaan ​​olla tuotteen oman luomisen eikä joku muu. Ja niin yksi domain-erityisiä ongelmia pset2, joka tulee myöhään huomisiltana, on sukeltaa maailmaan salauksen, mikä on taidetta salaamisesta tai muokkaamisella tietoa, ja tämä koskee kuitenkin viime kädessä maailman turvallisuutta. Nyt turvallisuus useimmille meistä tulee muodossa melko arkipäiväinen mekanismeja. Kaikilla meillä on käyttäjätunnuksia ja salasanoja, ja meillä kaikilla on erittäin huono käyttäjätunnuksia ja salasanoja, todennäköisesti. Jos salasana on sama useita sivustoja, se on luultavasti ole paras idea, kuten tulemme keskustelemaan kohti lukukauden lopussa. Jos salasana on kirjoitettu tarralapulle - no vitsi - Näytöstä sekin ole välttämättä paras malli mutta varsin yleinen ilmiö. Ja jos et käytä salausta salata salasanojen, ne ovat erityisen haavoittuvia. Joten jos luulet on erittäin nokkela pyytämällä piilotettu Word jonnekin kiintolevyllesi, että on kaikki salasanat mutta se on kansiossa että kukaan menee katsomaan, sekin ole kovin turvallinen mekanismi. Ja niin mitä pset2 esittelee tämä taidetta salauksen ja salaus tietoa, jotta asiat kuten salasanat ovat turvallisempia. Konteksti tässä on, että epävarma tieto tulee mahdollisuus salata sitä ja muokkaamaan sitä. Ja niin tämä, esimerkiksi, on esimerkki salatun viestin. Tämä sanoo jotakin Englanti, mutta se ei selvästikään ole täysin selvä. Ja me tulemme täysi ympyrä tänään erottaa toisistaan, mitä tämä salainen viesti tässä on. Mutta todellisessa maailmassa tietokoneiden, asiat eivät edes näyttävät ne saattavat olla Englanti lauseita. Esimerkiksi tämä on mitä saatat löytää standardi Linux tai Mac tai UNIX-tietokoneesta on tiedosto oli aikoinaan nimeltään salasana tiedosto. Nykyään se on siirretty muualle. Mutta jos tarkastellaan oikeassa paikassa järjestelmään, näet paitsi käyttäjätunnuksesi tai muiden ihmisten järjestelmään, mutta näet salatun version salasanansa. Itse asiassa sana krypta siellä ehdottaa, että seuraavat jutut on salattu, ja tämä sarja sattumanvaraiselta kirjaimia ja merkkejä ja numeroita, ja niin edelleen voidaan purkaa vain yleisesti tietää joitakin salaisia ​​- salainen sana, salainen numero - ja näin todellakin taidetta salauksen lopulta kuihtuu luottaa jonkinlainen ja tietäen jotain, että joku muu ei. Joten me tutkia tätä hieman tarkemmin tänään ja PSET tulla. Ja nyt sana pass / fail. Varsinkin kun jotkut teistä sukelsi pset1, Appliance, ja aivan uusi maailma itse, ymmärtää, että pettymyksiä ja sekaannusta ja vain tekniset vaikeudet ovat melko odotettavissa, erityisesti ensimmäisen PSET, missä on vain niin paljon uutta, vain tottuminen ls ja cd ja kaikki nämä mystistä komennot ja uuteen ympäristöön, ja se on erillään varsinaisesta materiaalista ja ohjelmoinnin itse. Niin ymmärtää myös, että on varmasti virka että olemassa tukirakenne. Osiot alkaa tulevana sunnuntaina. Mutta mikä tärkeintä, jos et tunne vain, että tämä ei ole sinulle maailman, ymmärtävät, että se todella vain ottaa aikaa. Ja jos se ei tätä tilaisuutta vuotta sitten minulle ottaa luokan hyväksytty / hylätty, rehellisesti, en olisi ikinä edes asettaa jalka luokkahuoneessa. Ja voit muuttaa saakka, sanovat, viides maanantaina tietenkin joten jos olet reunalla nyt ymmärtää, että mieluummin kuin pää johonkin toiseen vesille kokonaan, ei varmasti harkita vain vaihtamalla hyväksytty / hylätty. Jälleen, ei ole oikeastaan ​​tätä kulttuuria täällä Harvardissa ottaa asioista hyväksytty / hylätty koska jokainen todella haluaa saavuttaa tai ylittääkseen, mutta suoraan sanottuna tämä on loistava tapa yrittää jotain jotka eivät ehkä ole tuttuja sinulle, ja voit päätyä tekemään useimmissa tapauksissa varsin hieno, ehkä paljon teidän yllätys. Ja konkreettisemmin, mitä luulen hyväksytty / hylätty yleensä tekee, varsinkin kun olet ehkä kokenut pset0, Jos laitat 10 tuntia, 15 tuntia, 25 tuntia johonkin PSET ja olet vain hakkaa päätäsi seinään ja se alkaa erittäin myöhään yöllä mutta olet ottanut PSET 90% ja te vain voi selvittää yksi asia, hyväksytty / hylätty todella vie reunan pois luokan näin, jossa voit tavallaan onneksi sanoa, "Okei, tiedän, että se ei ole täydellinen, mutta olen työskennellyt my ass off tästä, olen melko tyytyväinen, jos se päätyi " ja jotka täyttävät odotukset hyväksytty / hylätty. Joten älä pidä mielessä. Selvä. Joten ne teistä, jotka ovat taistelleet käyttää Harvardin yliopiston Wi-Fi, tietää, että siellä on CS50 SSID, Wi-Fi-yhteys, kelluva noin että saatat olla parempi onni. Se on vähän ironista, että salasanaa, jos haluat yrittää yhdistää tähän paremmin nopeudet - ja meille se ole parempi - on 12345, kaikki tavalla jopa 8 koska 8 on turvallisempi kuin 5. Joten jos tarvitset Wi-Fi-salasanan, yhteyden CS50 langattomasti täällä, 12345678, ja viesti CS50 Keskustele jos sinulla on vielä ajoittaisia ​​yhteysongelmia, ja me ilmoitamme, että vallanpitäjät tietävät tämän tilan. Selvä. Joten nopea teaser, erityisesti niille teistä, jotka ovat fani poikia tai tyttöjä kaiken Apple. Mitä minä kaivetaan muutama vuosi sitten oli tämä tiedosto täällä, iUnlock.c, vain eräänlainen antaa konkreettisempi ja monimutkaisempia jotkut enemmän perus C-ohjelmia olemme kirjallisesti. Joten olen avannut tämän tiedoston, iUnlock.c. Se on saatavissa Luennot sivulla tänään. Vasemmalla puolella näet pitkän listan toimintoja. Joten kaveri joka kirjoitti tämän kirjoitti jopa paljon toimintoja, enemmän kuin vain tärkeimmät. Hän käytti koko joukko kirjastoja täällä, ja jos alamme selata, Mitä tämä oikeastaan ​​on on ensimmäinen, uskon, crack alkuperäisen iPhonen. Kun halusi karkaaminen alkuperäinen iPhone, joka tarkoittaa untether se AT & T ja itse asentaa erityisiä ohjelmistoja sitä ja tehdä asioita, joita Apple ei halua ihmisten tehdä, joku vei aikaa selvittää, miten ne voisivat hyödyntää ohjelmiston puutteita, virheitä, bugeja, Apple ohjelmisto, ja näin syntyi iUnlock.c-- että jos käännetty se tietokoneellesi ja asentaa sen päälle iPhone joka oli kytketty tietokoneeseen kautta, vaikkapa USB-kaapeli, Tämä antaisi sinulle hallinnollisia tai pääkäyttäjän oikeudet iPhonessa ja voit tehdä aika paljon mitä haluat. Ja niin siellä on ollut tämä kiehtova kissa ja hiiri-leikkiä välillä Apple ja muualla maailmassa erityisesti ne, kuten monet yritykset, yrittävät lukita niiden juttuja alas niin, että voit vain tehdä sen kanssa mitä he aikovat. Mutta kiitos ihmisiä kuin tämä ja ymmärrystä matalan tason yksityiskohdat - ja tässä tapauksessa C ohjelmointi - ja paljon tuttuja rakenteita että olemme alkaneet leikkiä, voit todella hyödyntää laitteiston tavalla näette eikä välttämättä jotkut yritystoimija. Niinpä esimerkiksi, minulla ei ole aavistustakaan, mitä tämä kaikki tekee, mutta GetVersion kuulostaa melko yksinkertainen, ja se näyttää tältä on toiminto, että tämä henkilö kirjoitti. Se vie jonkinlainen kokonaisluvun argumenttina, ei palauta mitään, mutta näyttää silmukan varten silmukka täällä ja jos tila, jos ehto tauko, ja jotenkin liittyy versionumerot jos selaa alaspäin vaikka monet näistä avainsanoista aiotaan uusia. Ja siellä paljon toimintoja täällä olemme koskaan nähneet ja ehkä koskaan näe aikana lukukauden. Lopussa päivän, se noudattaa samoja sääntöjä ja logiikkaa, että olemme pelannut toistaiseksi. Joten tämä on aivan liian vanha halki iPhoneen 3s tai 4s tai pian 5s näinä päivinä, mutta tiedän, että se on kaikki hyvin johdettu tässä maailmassa olemme sukelsi. Katsotaanpa katsomaan hieman yksinkertainen esimerkki: tämä vain saada lämmennyt joitakin syntaksia ja myös joitakin muita tietotyyppi että me olemme puhuneet, mutta eivät todellakaan nähnyt C. Tämä on tiedosto nimeltä positive1.c, ja kohti kommentit huipulla, tämä vain vaatii, että käyttäjä antaa positiivinen numero. Joten se on esimerkki do-while-silmukka, joka on mukava käyttäjälle interaktiivisten ohjelmien jossa sinun täytyy kertoa käyttäjälle tekemään jotain, ja jos ne eivät toimi yhteistyössä huudat niitä tai hylätä heidän panostaan. Asia kohtaan: aion tehdä linjat 19 kautta 24 niin kauan kuin käyttäjä ei ole antanut minulle positiivinen numero. Tämä yksityiskohta täällä line 18, miksi Vakuutan n yläpuolella koko tämän silmukkaa rakentaa toisin kuin vieressä rivi 22, jossa olen todella kiinnostaa saada n? Joo. [Opiskelija] Scope. >> Joo, joten tämä asia soveltamisalan. Ja maallikon termein, mitä soveltamisala viittaa? Joo. >> [Äänetön opiskelijan vastausta] >> Voitteko puhua hieman kovempaa? [Opiskelija] Mistä voit käyttää tähän muuttujaan. >> Perfect. Mistä voit käyttää tietty muuttuja. Ja yleensä nyrkkisääntö on tähän mennessä ollut, että soveltamisala joidenkin muuttujan määritellään viimeisimmän aaltosulkeita että olet nähnyt. Ja niin tässä tapauksessa, jos tein virheen julistamalla n verkossa 22, että linja toimisi. Haluaisin saada int, ja haluaisin laittaa sitä, että muuttujan n linjassa 22, mutta joka koodiriviä olisi nyt ei ole aavistustakaan, mitä puhun? >> [Opiskelija] 25. [Malan] 25, ja se osoittautuu 24 sekä sillä tässä tapauksessa se jää ulkopuolelle aaltosulkeita. Joten vähän haittaa, mutta hyvin helposti ratkaistavissa yksinkertaisesti julistamalla muuttujan ulkopuolella toimintaa itse. Näemme myöhemmin tänään voit mennä pidemmälle ja voit jopa saada hieman laiska. Ja tämä ei ole suositeltavaa yleisesti, mutta voit jopa saada laiska ja laittaa vaihteleva maailmanlaajuisesti, niin sanotusti, ei sisällä on funktio, ei ole silmukan sisällä, mutta itse tiedosto, ulkopuolella kaikki toiminnot olet kirjoittanut, niin kuin tein täällä line 15. Tämä on yleisesti paheksutaan, mutta ymmärtää tämä on ratkaisu joskus muita ongelmia, kuten me lopulta nähdä. Joten nyt jätämme sen näin, mutta katsotaanpa jos voimme kirjoittaa tämän vain käynnistää ilmaista itseämme hieman eri. Tämä ohjelma vain olla selkeä, on positive1. Anna minun mennä eteenpäin tänne ja minun pääteikkunaan tehdä positive1, Enter. Kokoaa kunnossa. Aion ajaa positive1, Enter. Vaadin, että annat minulle positiivinen kokonaisluku. Sanon -1. Se ei toimi. 0, 99. Se tuntuu toimivan. Ehkä ei kaikkein ankarimmat testi, mutta ainakin se on kiva järki tarkistaa että olemme oikealla tiellä. Joten nyt haluan mennä eteenpäin ja avata versio 2 tästä, ja mikä on eri jo? Se toteuttaa sama asia, mutta mitä hyppäämällä ulos selvästi erilaista tällä kertaa? Tämä bool vihreänä. Se on korostettuna vihreänä, tällä avainsanalla tunnetaan bool, joka on tietotyyppi. Se ei tule rakennettu kaikki versiot C. Sinun täytyy sisällyttää erityinen kirjasto. Meidän tapauksessa olen mukana CS50 kirjastoon jotta meillä on pääsy bool. Mutta linja 18, meillä näyttää olevan totuusarvon täällä kutsutaan kiitollinen. Olen voinut soittaa tätä kaikkea, mutta kutsuin sitä kiitollinen vain eräänlainen välittää joidenkin semanttinen. Joten aluksi linja 18, en ilmeisesti ole kiitollinen koska Boolen arvo kiitollinen alustetaan false linjassa 18. Ja sitten näyttää mitä olen tehnyt täällä linjat 21 kautta 23 on Olen juuri sellainen uusiksi minun logiikkaa. Joten ei toiminnallisesti erilaisia, mutta linja 22 nyt voin tarkistaa jos int käyttäjä on antanut on suurempi kuin 0, niin en yksinkertaisesti muuttaa arvoa kiitolliset totta. Ja miksi niin? Koska linja 25, ilmeisesti aion tarkistaa kunnossa. Tee tämä silmukka taas kiitollinen on väärä. Joten ehdotin tätä vaihtoehtona versio 1 koska se on ainakin hieman enemmän intuitiivinen ehkä se on hieman enemmän maadoitettu Englanti. Joten tee seuraavat kun et ole kiitollinen tai kun kiitollinen on väärä. Ja tälläkin kertaa en ilmeisesti välitä muistaa mitä käyttäjä kirjoitettu koska ilmoitus ei ole muuttujan n, niin todellisuudessa, pieni valkoinen valhe sinne. Toiminnallisesti ohjelma on hieman erilainen, kun saamme pohjaan se koska en muistaa mitä n on. Mutta halusin osoittaa myös tässä, että vaikka olemme nähneet GetInt ja GetString käytetään oikealla puolella yhtäläisyysmerkkiä toistaiseksi niin että muistamme arvon, teknisesti, se ei ole välttämätöntä. Jos jostain syystä et vain välitä tallentaa arvon, haluat vain tarkistaa arvoa, huomaat, että voimme yksinkertaisesti kirjoittaa tätä GetInt, auki Paren, sulje paren. Tämä toiminto tulee palauttaa arvo, kuten olemme sanoneet. Se tulee antamaan sinulle takaisin int. Ja niin jos henkisesti ajatella näin tapahtuu, kun kirjoitat 99, GetInt palauttaa numero 99, ja niin käsitteellisesti, se on ikään kuin minun koodi olisi todella tätä. Joten jos 99 on todellakin suurempi kuin 0, niin kiitollisia tulee tosi, Sitten line 25 tajuaa ooh, olemme tehneet koska olen nyt kiitollinen, ja linja 26, me yksinkertaisesti sanoa, "Kiitos positiivinen kokonaisluku!" mitä se sattui olemaan. Nyt tehdä hieman syntaktinen sokeri täällä, niin sanoakseni. Katsotaan jos voimme siivota tämä rivi 25 ja tämä kolmas ja viimeinen muunnos positive3. Huomaa ainoa ero on nyt mitä rivi koodia? >> [Opiskelija] 25. >> [Malan] Joo, 25. Ja olemme oikeastaan ​​nähnyt tämän tempun ihan vielä, mutta emme näe huutomerkki maanantaina joka tarkoittaa mitä? >> [Opiskelija] Ei. >> Ei tai negaatio. Joten ota totuusarvon ja kääntää sen arvoa. True tulee epätosi, väärä tulee totta. Joten tämä, ehdotan, on vielä hieman enemmän intuitiivinen tapa kirjoittaa koodia koska olen edelleen alustaa kiitollinen väärä, en vieläkään seuraavasti, Asetin kiitollinen totta, kun se aika tulee, mutta nyt voit todella vain kääntää tämän koodin suullisesti vasemmalta oikealle, while (! kiitollinen), koska bang tai huutomerkki tarkoittaa käsite ei joten vaikka ei kiitollinen. Joten jälleen, emme ole ottaneet käyttöön mitään uusia käsitteitä sinänsä. Puhuimme booleans takaisin, kun soitimme Scratch, mutta ymmärtää nyt voimme vain alkaa kirjoittaa meidän koodia monin eri tavoin. Joten varsinkin pset1 jos olet tavallaan kamppailee selvittää tapa kirjoittaa jotain ohjelmaa, kertoimet ovat olet onnea, koska siellä voi olla useita ratkaisuja että voit tapahtua heti. Esimerkiksi, tämä on vain 3 edes yksinkertaisimpia ohjelmia. Selvä. Ja nyt muistaa maanantaina lähdimme tähän merkille paluuarvot. Joten ensimmäistä kertaa kirjoitimme ohjelma, joka ei vain ole tärkein; se on myös oma custom-toiminto, jonka kirjoitin tänne. Joten linjan 31 kautta 34 Olen toteuttanut datakuutiofunktioiden. Se ei ole monimutkaista. Se on vain * * tässä tapauksessa. Mutta mikä on tärkeää on se, että otan syöttää muodossa ja olen palaamassa tuotoksen muodossa * *. Joten nyt minulla on kyky, aivan kuten käytin kanssa prinf yksin, kutsua tätä toimintoa kutsumalla datakuutiofunktioiden. Ja datakuutiofunktioiden vie jonkin tulon, ja kuution funktio palauttaa jonkin lähdön. Sen sijaan printf vain teki jotain. Se ei palauta mitään, että me välittänyt, vaikka sillä sivuun se ei palauta arvoa; juuri yleensä sivuuttaa sitä. Printf vain teki jotain. Se oli sivuvaikutus tulostamisen näytölle. Sitä vastoin tässä, meillä on kuutio-toiminto, joka itse asiassa palauttaa jotain. Joten ne tuntevat tämän, se on melko yksinkertainen idea. Mutta niille vähemmän tuttu ajatus kulkee Panosten ja saada takaisin lähdöt, Kokeillaan vain jotain erittäin yksinkertaista. Onko joku mukava tulossa lavalle hetkeksi? Sinun täytyy olla mukava kamera sinulle samoin. Niin? Okei. Mikä sinun nimesi on? >> [Opiskelija] Ken. >> Ken. Selvä. Ken, tule ylös. Ken tulee olemaan funktio lajittelee tässä. Mennään eteenpäin ja tehdä tämän. Mennään hieman fancy. Hauska tavata. Tervetuloa keskiöön. Selvä. Katsotaanpa osuma tätä painiketta täällä. Selvä. Joten tässä on moderni liitutaulu, ja mitä olen on tärkein ominaisuus, esimerkiksi ja minulla ei ole iPad kädessäni. En todellakaan muista, miten - No, en voi sanoa että. En todellakaan ole hyvä käsiala, Ja siksi haluan tulostaa jotain ruudulla minulle. Olen joka pääohjelma, ja aion saada sanot tästä kirjoittamalla se minun kanaa naarmu ja sitten kulkee sinun syöttää. Niin typerä vaikka tämä harjoitus on käsite toimintoja ja kutsuvan funktion ja palauttaa funktio todella kuihtuu tätä. Olen pääasiassa, olen juuri kirjoittanut printf, lainaus-lainaus päättyy jotain ruudulla, Olen käynnissä tätä ohjelmaa, ja niin pian kuin printf saa kutsutaan, se kestää yhden argumentin tai yhden parametrin joskus välillä lainausmerkkeihin. Tässä on tämän väitteen. Olen ohimennen sen Ken. Hän on musta laatikko kirjoittanut joitakin vuosia sitten että ilmeisesti vain osaa tulostaa asiat näytöltä. Niin suorittaa. Se ei ole paha. Erittäin hyvä. Joten nyt Ken on tehty täytäntöönpanovaltion. Tarvitseeko hän luovuttaa minulle mitään takaisin? Ei siksi, että olemme nähneet tähän mennessä. Jälleen printf ei oikeastaan ​​palata useita, mutta aiomme sivuuttaa, että nyt koska emme ole koskaan käyttäneet sitä. Niin, että se Ken. Ja nyt tärkein ottaa haltuunsa ohjelman uudelleen koska koodirivin, printf, tehdään täytäntöönpanovaltion. Ja me menemme noin tiemme, täytäntöönpanovaltion mitä muut linjat ovat siellä. Joten nyt yritetään hieman erilainen esimerkki. Tällä kertaa tässä mennään ensin tyhjentää näytön, ja tällä kertaa teemme cubing toiminto, mutta tällä kertaa odotan lähtöarvo. Joten mene eteenpäin ja tehdä tämän. Nyt minulla on rivi koodia, joka sanoo x saa kuution x. Koodirivin, Recall, näyttää tältä: x = cube (x); Joten miten tämä tulee toimimaan? Mennään eteenpäin ja antaa sinulle valkokangas uudelleen. Aion kirjoittaa nyt arvo x, joka tällä hetkellä sattuu olemaan, sanokaamme, 2 pitää se yksinkertainen. Olen kirjoittanut alas paperille arvon 2, joka on minun arvo x. Minä ojennan sen Ken. >> Ja minä vain kirjoittaa vastauksen? >> Joo, mennään vain kirjoittaa vastauksen. Okei. Ja nyt hän on takaisin minulle jotain. Perfect. Nice SEGUE. Joten nyt hän ojentaa minulle takaisin arvoon 8 tässä tapauksessa, ja mitä teen sen kanssa? Oikeastaan ​​- Katsotaan, saat tämän oikeuden. Mitä aion tehdä? Nyt aion ottaa tämän arvon ja todella säilytä samat bitit muistiin. Mutta huomaa olen sellainen kamppailee täällä. Olen hieman hämmentynyt, sillä mistä minä itse kirjoittaa arvo x, sillä mitä olen juuri tehnyt on fyysisesti käsin Ken paperinpala joka oli arvo 2, joka oli x, ja todellakin, se on juuri sitä, mitä tapahtui. Joten näyttää siltä, ​​että kun soitat toiminto ja kulkea argumentti kuten Hei, maailma tai ohitat argumentti, kuten 2, Yleisesti, olet ohimennen kopion tämän väitteen. Ja niin aivan kuten kirjoitin numero 2 täällä ja ojensi sen Ken, että täytyy tarkoittaa, että minulla on vielä kopio arvon 2 jonnekin koska todellakin, nyt kun olen saanut takaisin arvoon 8, minun täytyy mennä takaisin RAM ja oikeastaan ​​kirjoittaa 8 jossa minulla oli kerran numero 2. Niin visuaalisesti, muistakaa tämä käsite ohimennen, kirjaimellisesti, kopio arvosta. Ken tekee hänen asia, ojentaa minulle jotain - tässä tapauksessa arvo kuin 8 - ja sitten minun täytyy tehdä jotain, että arvo jos haluan pitää sen ympärillä. Joten tämä kaikki tulee takaisin on liiankin tuttu ennen pitkää. Kiitos paljon tästä demo täällä, Ken. [Aplodit] Hyvin tehty. Katsotaanpa, miten se lopulta liittyy joitakin funktion kutsuvan että olemme täällä. Anna minun mennä eteenpäin ja tuoda meidät takaisin cubing esimerkki tästä. Huomaa, että jos haluamme todella aloitat edelleen aiomme olla tietoinen siitä, että määrä x, joka on siirrellään täällä eroaa mitä todella hyväksyttiin toimintoon. Joten jälleen, tällä ohi kopio on tulossa varsin germane vain hetken. Katsotaanpa katsomaan jotain, joka ei ole aivan toimi oikein vielä. Aion mennä eteenpäin ja avata kolmas buginen esimerkki, jota on virheellinen luonteeltaan, ja sitä kutsutaan buggy3 ja se toteuttaa vaihtamalla toimintoa. Meillä on tässä tärkein ominaisuus, joka on x-ja y mielivaltaisesti alustetaan 1 ja 2, vastaavasti. Voisimme käyttää GetInt, mutta meidän täytyy vain yksinkertainen käyttää, joten on vaikea koodattu kuin 1 ja 2. Riveillä 21 ja 22, me ilmeisesti tulostaa x ja y, 1 per rivi. Sitten linja 23, väitän minä vaihtava näitä arvoja, piste, piste, piste. Olen ilmeisesti soittaa funktio linjalla 24 sanottujen swap, joka vie 2 perustelut. Se on täysin legit toiminnoissa ottaa 2 argumentteja. Olemme nähneet printf tehdä se jo. Joten swap ilmeisesti vie x ja y, ja nimensä, Toivon, että se tulee vaihtaa nämä 2 arvoja. Joten Väitän linjalla 25 "vaihtaa!" ja minä uusintapainoksia x ja y olettaen, että he ovat todellakin vaihdettu. Mutta jos olen itse suorittaa tämän ohjelman - haluan avata terminaali-ikkunan, haluan tehdä buggy3 - kuten nimestä voi päätellä, tämä ei lopu hyvin koska kun lyön Enter, huomaat, että x on 1, y = 2, ja vielä lopussa ohjelman, ne ovat edelleen, itse asiassa sama. Joten perustuvat mielenosoitus juuri nyt Ken, mitä todella tapahtuu? Katsotaanpa sukeltaa tähän swap toiminto. Se on super lyhyt. Se on vain muutaman rivin koodia pitkä. Mutta mitä perusongelma perustuu yksinkertainen tarina kerrotaan täällä Ken? Miksi swap rikki? [Opiskelija] Olet tallennetaan kopioon, ei muuttuja. Aivan. Olemme tallennetaan kopioon, ei muuttuja itse. Toisin sanoen, swap ilmeisesti kestää 2 argumentteja, int, ja se on mielivaltaisesti kutsutaan a ja b, ja täällä olen läpäissyt vuonna x ja y, jotka ovat vastaavasti 1 ja 2, mutta en kirjaimellisesti ohimennen x, en kirjaimellisesti ohimennen y, Olen ohimennen kopio x ja kopion y. Se on melkein kuin olisit kopioida ja liittää swap arvot että haluat todella manipuloida. Eli jos näin on, kun ohjelma alusta täytäntöönpanovaltion line 35 jälkeen 36, kun saan linja 37, tässä vaiheessa tarinan, mikä on arvo? Tässä vaiheessa tarinan, rivi 37, mikä on arvo tässä vaiheessa? >> [Opiskelija] 1. [Malan] On vain oltava 1, oikea, koska x hyväksyttiin ensimmäisenä argumenttina, ja tämä toiminto vain mielivaltaisesti vaatii ensimmäisen väitteen. Samoin on y Toisen väitteen ja se on vain mielivaltaisesti soittaa toinen argumentti b. Tämä kahtiajako on oikeastaan ​​melko yksinkertaisesti selitetty. Mieti sitä. Kukaan meistä ovat tavanneet henkilö kirjoitti printf, niin varmasti, hänellä ei ole aavistustakaan, mitä muuttujia 30 vuotta myöhemmin aiotaan kutsua. Joten siellä on tehtävä ero, mitä te kutsutte funktioissa olet kirjoittamassa ja mitä te kutsutte funktioissa soitat tai käyttämällä. Eli toisin sanoen, olen kirjoittanut omat muuttujat x ja y, mutta jos joku muu olisi kirjoittanut swap-toiminto, hän ei olisi varmastikaan tiedä mitä minun muuttujia aiotaan kutsutaan, niin ymmärtää, että tämä on siksi sinulla on kaksinaisuuden nimiä. Teknisesti voisin tehdä tämän sattumalta, mutta ne olisivat kuitenkin kului kuin kopioita. Se olisi vain sattumaa esteettisesti jos henkilö, joka kirjoitti swap oli käytetty samoja nimiä. Joten tässä vaiheessa tarinan, rivi 37, on 1, b on 2, ja nyt jatkan vaihtaa niitä. Ensinnäkin haluan todella tehdä tämän paljon yksinkertaisemmin. En tiedä mitä nuo 3 riviä koodia tekivät. Haluan vain tehdä tämän: b =; = b; tehty. Miksi tämä rikki, loogisesti? Se on tavallaan intuitiivinen asia, eikö? Joten tulee b ja b muuttuu, mutta ongelmana on, että heti kun linja 37 teloitetaan, mikä arvo ja b? Sama, 1, koska olette clobbered, niin sanotusti, olet muuttanut b yhtä. Joten kun linja 37 on suoritettu, että on hienoa, sinulla on nyt 2 kappaletta numero 1 sisällä tätä toimintoa, niin sitten kun sanot linjassa 38 = b, olet sellainen ruuvattu, koska olet vain määrittämällä 1-1. Olet tavallaan menetetty arvo, jota välittänyt. Joten alkuperäinen versio, huomaa mitä tein. Minä sen sijaan oli kolmannella rivillä koodia, joka näytti tältä. Julistan väliaikainen muuttuja. Tmp on hyvin yleinen nimi väliaikainen muuttuja, ja se on int koska se on sovittaa mitä haluan tehdä kopion. I tallentaa kopion sisällä TMP, joten kun linja 37 on suoritettu, arvo on - nopea järki tarkistaa - 1, arvo b on 2, ja arvo tmp on myös 1. Joten nyt toteuttaa linjan 38. Kun linja 38 suorittaa, vie arvo b. Ja B 2, niin on nyt 2. Joten tässä vaiheessa tarina, a on 2, b on 2, ja tmp on 1, joten nyt loogisesti, voimme vain plop tmp arvon huomioon b ja olemme tehneet. Joten olemme ratkaisseet tämän ongelman. Valitettavasti, kun ohjelma suoritetaan tässä muodossa, se ei oikeastaan ​​vaihtaa mitään arvoja. Mutta on selvää, miksi? Korjasin looginen ongelma juuri hetki sitten, mutta jälleen kerran, jos en suorita tämä ohjelma, x ja y ennallaan loppuun mennessä ohjelman toteuttamista. [Äänetön opiskelija kommentti] >> Emme ole palautettu mitään, niin se on totta. Mutta se muuttuu siellä on hieman ongelma, sillä tähän mennessä Ainoa asia olemme voineet palata on yksi asia, ja tämä on rajoitus C. Voit vain palauttaa oikeastaan ​​yksi arvo, jolloin olen sellainen jumissa täällä koska en voi palauttaa uuden arvon x-tai I voisi palauttaa uuden y: n arvo, mutta haluan molemmat takaisin. Joten takaisin ei yksinkertaista ratkaisua. Mutta ongelma pohjimmiltaan on miksi? Mitä me oikeastaan ​​vaihdettu? [Opiskelija] a ja b. >> A ja b. Mutta a ja b ovat kopioita x ja y, mikä tarkoittaa, teimme kaikki tämä työ, me juuri viettänyt 3 minuutin puhuu swap-toiminto ja kaikki 3 näistä muuttujista, ja se on hienoa, aivan oikein erikseen, vaan ja b soveltamisala vain on näitä rivejä tänne. Eli aivan kuten varten silmukka, jos julistaa kokonaisluvun I Inside for silmukan, Samoin jos olet julistamista ja b sisällä funktion, että olet kirjoittanut, he kelvollinen vain kyseisen toiminnon, mikä tarkoittaa heti kun vaihto on tehty suorittamalla ja menemme linjan 24 linja 25, x ja y eivät ole muuttuneet lainkaan. Olet juuri tuhlannut paljon aikaa vaihtava kopioita muuttujia. Joten näyttää siltä, ​​että ratkaisu tähän on todella ei-ilmeinen. Se ei ole aivan riittävää palauttaa arvoja, koska voimme vain palata 1 arvo, ja en todellakaan halua vaihtaa sekä x ja y samaan aikaan, joten aiomme täytyy palata tähän. Mutta nyt ymmärtää, että kysymys pohjimmiltaan peräisin siitä, että a ja b ovat kopioita ja he ovat omassa soveltamisalaan. Yritetään ratkaista jollakin tavalla. Saanen todella siirry takaisin tänne ja avata, sanokaamme, neljättä tästä, buggy4. Mitä tästä? Tämä on samanlainen, mutta yksinkertaisempi ongelma katsoa ennen kuin ryhdymme puukottaa ratkaisemiseksi. Tämä ohjelma on nimeltään lisäys, ja se ilmeisesti alustaa x kokonaisluvun 1 mukainen 18. Sitten väittävät x on 1, minä sitten väittävät "mukaa ..." Sitten soittaa lisäys, mutta sitten linjat 22 ja 23, väitän se on kasvatettu, Väitän x on nyt mitä se on - 2, oletettavasti - mutta tämä ohjelma on buginen. Mikä on ongelmana? Joo. >> [Äänetön opiskelijan vastausta] >> Aivan. Joten x on julistettu tietenkin linjalla 18. Se on sisällä tärkein on aaltosulkeita. Niin yksinkertainen vastaus tähän on, että vaikka x olemassa täällä, se ei ole linjassa 32, joten tämä ohjelma itse asiassa ei edes kääntää. Kääntäjä kun yritän koota tämä koodi tulee huutaa minulle joitakin pimeän tunnus tai jotakin tämänsuuntaista. Itse asiassa yritetään. Tämä on merkki buggy4. Siellä se on. Käytä pimeän tunniste "x" linjassa 32. Ja itse asiassa, olkaamme selkeämpi täällä tänään, jotta tämä on hyödyllistä toimistossa tuntia ja kotona. Huomaa, että se on hieman arvoituksellisesti kirjoitettu. Mutta se, että clang on huusi meille, sanoen buggy4.c: 32:5, on todella hyödyllinen. Se tarkoittaa sitä, että virhe on linjalla 32 merkkipaikkaan 5. Joten 1, 2, 3, 4, 5. Se on, itse asiassa, missä ongelma on. Ja myös, myös pitää mielessä toimistossa tuntia ja kotona, olen onnekas täällä. Minulla on yksi virhe. Se tulee olemaan suhteellisen helppo korjata. Mutta jos saat koko ruudun täynnä ylivoimainen virheilmoituksia, jälleen ymmärtää, että alimmainen voisi vain olla oire ylimmän One. Joten aina jahdata alas bugeja ylhäältä alaspäin koska voi vain olla ketjuttaa vaikutus joka ehdottaa sinulla on paljon enemmän ongelmia kuin sinä itse tehdä. Joten miten voisimme korjata tämän, jos tavoite on kasvattaa x? >> [Opiskelija] Make x maailmanlaajuisesti. Okei, joten voimme tehdä x maailmanlaajuisia. Otetaan pikakuvakkeen että olen varoittanut aiemmin, mutta pahus, meidän täytyy vain hätäratkaisu, joten sanotaanko int x tänne. Se tekee x maailmanlaajuisesti. Joten nyt tärkein on pääsy siihen ja lisäys on pääsy siihen, ja niin haluan mennä eteenpäin ja kokoaa nyt. Tee buggy4, Enter. Näyttää koota nyt. Mennään juosta buggy4. Ja se tuntuu todella toimivat. Tämä on yksi näistä asioista, on niin kuin minä sanon, ei niin kuin minä teen, koska olen juuri tehnyt tänne, koska yleensä Meidän ohjelmat menevät paljon mielenkiintoista ja paljon pidempi, ja jos ratkaisu elämän ongelmiin on vain laittaa kaikki muuttujat yläreunassa tiedoston, nopeasti tehdä ohjelmia saa järkyttävän vaikea hallita. Se saa vaikeampi keksiä uuden muuttujan nimeä, se saa vaikeampi ymmärtää, mitä muuttuja tekee mitä, ja niin yleensä, tämä ei ole hyvä ratkaisu. Joten tehdä tämän paremmin. Emme halua käyttää globaali muuttuja täällä. En halua kasvattaa x, joten voisin tietysti - lopussa päivä, tämä on tavallaan typerä tarina, koska me vain teemme tätä - mutta jos en tiedä, että toimija tai en saanut muuttaa sitä pääasiassa itse, Miten muuten voisin toteuttaa Ken täällä tällä kertaa ole kuutio vaan kasvattaa? Miten voin muuttaa tämän asian täällä? Joo. [Opiskelija] Pass x ja palata sitten [kuulumattomissa] >> Okei, hyvä. Miksi en kulkea x ja sitten kuin palauttaa se, miksi en vain ei palauta x + 1. Pari enemmän asioiden on muututtava täällä. Olen oikealla tiellä. Mitä muuta pitää nipistää? Joku muu. Joo. [Äänetön opiskelija vastausta] Minun täytyy vaihtaa paluuta tyyppiä kasvu, koska se ei mitätöidä. Void tarkoittaa mitään palautetaan, mutta selvästi nyt on, joten tämä tarvitsee vaihtaa - >> [opiskelija] int. int oltava johdonmukaisia ​​mitä olen itse takaisin. Nyt jotain muuta on vielä buginen täällä. Joo. [Äänetön opiskelija vastausta] >> [Malan] Joten minun täytyy kasvattaa x? [Äänetön opiskelija vastausta] >> [Malan] Ah, niin minun täytyy kulkea x. Joten minun täytyy tehdä tämä täällä. >> [Äänetön opiskelija kommentti] [Malan] Joten prototyyppi, minun täytyy muuttaa tänne. Joten tämä on tullut int, tämä on tullut - hmm, Minulla on oikeastaan ​​vika täällä. Katsotaanpa korjata ensin. Mitä pitäisi tämä oikeastaan ​​on? Sen täytyy olla int jotain. Se voisi olla x, mutta suoraan sanottuna, jos alkaa soittaa kaikki muuttujat x, se tulee saamaan vähemmän selvää, mikä on mikäkin. Joten vain mielivaltaisesti valita eri nimeämiskäytäntöä minun auttaja toimintoihin, toiminnot Kirjoitan. Me kutsumme sitä, tai voimme kutsua sitä - Kutsun sitä määrää olisi vieläkin selvempi. Joten sitten on palattava lukumäärästä riippumatta on plus 1, ja nyt minun täytyy vaihtaa 1 muu juttu täällä ja yksi muu asia täällä. Mitä minun täytyy vaihtaa linjan 21 ensin? >> [Äänetön opiskelijan vastausta] [Malan] Minun täytyy antaa se x. En voi vain soittaa lisäys (x). Minun täytyy muistaa vastauksen muuttamalla arvoa x vasemmalla puolella. Ja vaikka x on nyt vasemmalle ja oikealle, se on täysin hieno koska oikea puoli saa suorittaa ensimmäinen sitten saa plopped osaksi vasen juttu - x tässä tapauksessa. Ja sitten lopuksi, tämä on helppo korjata nyt. Tämä pitäisi vain vastata mitä alhaalla, int numero. Joten koko joukko muutoksia todella tyhmä toiminto mutta edustaja asioita me yhä haluamme tehdä. Joten tee buggy4. Olen mokasin jonnekin. Voi luoja. Viisi virheitä 6-line-ohjelma. Joten mikä hätänä linjalla 18, merkki 5? Joten minun täytyy todeta tämän, int. Katsotaanpa. On koko joukko muita virheitä. Voi luoja - 19, 18, 21 - mutta jälleen kerran, haluan vain tyhjentää näytön, ohjaus L täällä, ja uusintana clang. Joten 5 ongelmista on oikeastaan ​​vain se 1. Joten nyt mennään juosta buggy4, Enter. Vau, x on kasvatetaan oikein. Selvä. Kaikki kysymykset siitä, miten kasvattaa numeroita? Joo. [Äänetön opiskelija kysymys] >> Hyvä kysymys. Miten on mahdollista, että voin vain vaihtaa x numeroon ja ohjelma tietää heti? Jälleen ajattele sitä tällä abstraktio. Joten jos olen tärkein ja Ken on lisäys, suoraan sanottuna, en välitä mitä Ken kutsuu iPad. En välitä, mitä hän kutsuu mitään, että on tekemistä hänen täytäntöönpanon tätä toimintoa. Tämä on täytäntöönpanon yksityiskohta, että minä, tärkein, ei tarvitse välittää. Ja niin yksinkertaisesti muuttamalla sitä johdonmukaisesti sisällä toiminto - numero täällä ja numero täällä - on kaikki se kestää niin kauan kuin minä kääntää. Se on tavallaan kuin jos ajattelee monet meistä, ne teistä, joilla ajokorttien jotka ovat ajaneet tai jos olet edes ajanut autoa, useimmat meistä ei ole aavistustakaan siitä, miten auto toimii alla huppu. Ja kirjaimellisesti, jos avaa huppu, useimmat meistä - minä mukaan lukien - aio todellakaan tiedä mitä me tarkastelemme, ikään kuin saatat tuntea juttuja kuten tämä nyt. Mutta meidän ei todellakaan tarvitse huolehtia miten auto toimii, meillä ei tarvitse välittää mitä kaikki tangot ja männät ja kaapelit auton sisä- todella tekevät. Eli jotain mitä te kutsutte mäntä ei ole väliä tässä tapauksessa. Sama idea. Joo. >> [Äänetön opiskelija kysymys] Jos on muita käyttötarkoituksia muuttujaa xa hetki sitten, te, ohjelmoija, olisi muutettava niitä kaikkialla. Tai voit kirjaimellisesti tehdä Tiedosto-valikko, ja valitse sitten Etsi, Korvaa - jotain - mutta olet menossa on tehdä muutokset itse. Sinun täytyy olla johdonmukainen. >> [Opiskelija] Jos on useita muuttujia [kuulumattomissa] Tietyssä järjestyksessä, kuten täällä, jos tämä oli KANS toiseen numeroon? >> [Opiskelija] Oikea. [Malan] Joo. Tilaa väliä kun soitat toimintoa. Joten jos olisin vaativat lisäys tänne jotain pilkulla jotain, siellä suoraan kartoitus. Ensimmäinen muuttuja, mikä sen nimi, on valmistettu kopio ensimmäistä väitettä tänne. Anteeksi. Tämän ei pitäisi olla suluissa. Toinen perustelu on linjassa toinen. Joten tilaa, kyllä ​​asiat. Selvä. Anteeksi. Otin pitkän matkan päästä sinne. Muita kysymyksiä? Selvä. Joten jos voimme olla maalata kuvan siitä, mitä todella tapahtuu täällä alla huppu, niin sanoakseni. Tämä on suorakulmio, joka voisi edustaa tietokoneen muistiin. Vaikka sinulla ei ole aavistustakaan siitä, miten muisti toimii ja miten RAM toimii, ainakin olettaa, että sinulla on rypäleterttuja se näinä päivinä. Sinulla megatavua se, sinulla gigatavua siitä, ja me tiedämme viikolla 0 että tavu on juuri mitä? >> [Opiskelija] 8 bittiä. 8 bittiä, eikö? Joten 8 nollia ja 1. Joten jos tietokoneessa on keikka RAM, 2 gigan RAM näinä päivinä, sinulla on miljardi tai 2000000000 tavua muistia tai noin 8 miljardia euroa eli 16 miljardia bittiä tietokoneesi sisälle. Toisin pikku Wooly Willy esimerkiksi se ei ole magneettisia hiukkasia yleensä enää. Yhä - läppäreissä ainakin - se on solid state drives, SSD, että vain ei ole liikkuvia osia. Se on sähköinen. Se kaikki sähkö-pohjainen. Joten ajatella tämän suorakulmion kuin vain edustavat 1 tai 2 gigatavua muistia, että sinulla on. Joten se kimpale muistia. Maailma tietojenkäsittelytiede on eräänlainen osioitu pois paloina muisti tehdä eri asioita. Esimerkiksi, jos tämä on tietokoneen RAM, ehdottivat suorakulmio siellä, käy ilmi, että sopimuksen mukaan, yläreunassa teidän RAM, niin sanotusti, on yleensä mitä kutsutaan tekstin segmentti. Nämä ovat 0 ja 1s jotka olet kääntänyt. Joten kun teimme alla huppu, mitä a.out on, kaikki nämä 0s ja 1s, kun suoritat ohjelman, nämä 0s ja 1s ladataan kiintolevyltä jotain kutsutaan RAM, ja RAM he laittaa yläosassa. Samalla sinulla on muita asioita: alustaa data, uninitialize tietoja. Nämä 2 karhoa muistia viittaavat globaaleja muuttujia, joita et käytä usein mutta joskus jos et, he päätyvät sinne myös. Sitten on joitakin muita juttuja: ympäristömuuttujat, joita emme viettää paljon aikaa, mutta sitten 2 tärkeää asiaa, jotka tulevat takaisin koko lukukauden, pino ja keko. Joten useimmat tietokoneen muistista on varattu ajettaessa ohjelmaa jotain kutsutaan pino ja jotain kutsutaan kasaan. Emme aio puhua kasan tänään, mutta puhumme pino. Pino on tarkoitus loihtia visuaalinen ruokasalin ateria lokerot Mather House tai missä satut olemaan missä ruokasali henkilökunta puhdistaa niitä joka päivä, he pinota ne ylös lattiasta ylös, ja vastaavasti muistissa, on tämä ajatus, että laittaisit jotain pino, laittaa jotain pino, laittaa jotain pinoon. Ja mitä me tarkoitamme tällä? Katsotaanpa zoomata vain alaosassa Kuvan, tietokoneen RAM, ehdottaa seuraavaa. On käynyt ilmi, että kun ajaa ohjelmaa, kuten a.out tai hei - mikä ohjelma on, että olet kirjoittanut - uudelleen, ne 0s ja 1s ladataan kiintolevyltä, joka on pitkäaikainen varastointi, pysyy siellä vaikka vedät pistokkeen, ladataan keskusmuistiin. RAM on nopeampaa kuin kiintolevyt - se on pienempi kuin kiintolevyt - mutta se on jos ohjelmia elää kun käytät niitä. Joten kaksoisnapsautat ohjelman Mac tai PC, se ladataan kiintolevyltä keskusmuistiin. Heti kun se on ladattu RAM, 0s ja 1s mentävä way top, ns tekstin segmentti, mutta sitten heti, kun ohjelma itse asiassa käynnistyy, päätehtävä on nimeltään, ja tärkein, kuten olemme nähneet, on usein paikallisia muuttujia, ja se on ints ja jousille sekä merkkiä ja vastaavat. Joten jos ohjelma että olet kirjoittanut tai ohjelma, jonka olet kaksinkertainen napsautetaan käyttää joitakin muuttujia sisällä tärkein, he päätyvät alareunassa stäkistäsi muistia, niin sanoakseni. Konkreettisemmin, mitä tämä oikeastaan ​​tarkoittaa? Tämä tarkoittaa vain sitä, että jos aioimme määrän tavua RAM tietokoneeseen, huomata, että tämä voisi olla tavu numero 0, tämä voi olla tavu numero 1, 2, 3, 4, 5, 6, kaikki tavalla jopa 2 miljardia olisi aina siellä huipulla. Eli toisin sanoen, kun puhumme RAM tai muistin kannalta tavua, se tarkoittaa vain sitä, että joku on päättänyt mitä numeroida kunkin palasina muistia. Joten kun tarvitset 32 ​​bittiä int tai tarvitset 8 bittiä char, jos ne päätyvät muistissa? Käsitteellisesti ne vain päätyvät alareunassa tämä asia sanottu pino. Mutta mitä mielenkiintoista nyt kun tärkein kutsuu toiminto - Oletetaan toiminto nimeltään foo vain mielivaltainen nimi - mitä tapahtuu, on tärkein on alaosassa tämän pinon muistia; foo nyt laittaa päälle tärkeimmistä muistiin. Joten kaikki paikalliset muuttujat foo on lopulta eräänlainen käsitteellisesti edellä kuin pääasiassa. Jos foo kutsuu toista toiminto nimeltään baari, nuo muuttujat päätyvät tänne. Jos palkki soittaa jotain muuta, täällä, täällä, täällä. Joten mitä kiinnostavaa käynnissä ohjelma on, että soitat toiminnot ja kuin toiminnot edellyttävät tehtävät ja kuin toiminnot edellyttävät toiminnot, voit rakentaa tämän pinon toimintoja muistiin. Ja vain kerran funktio palaa sinä alkaa saada että muisti takaisin. Joten yksi helpoimmista tavoista loppuu muisti tietokoneohjelma on kirjoittaa toiminnot eivät koskaan palaa. Niinpä esimerkiksi mennään osoittaa niin paljon kanssa tarkoituksellisesti buginen ohjelma. Anna minun mennä eteenpäin ja tehdä # include , int main (void) ja aion tehdä, kun (2> 1), joka luultavasti ei koskaan muutu meitä, ja anna minun mennä eteenpäin nyt ja tehdä printf. Oikeastaan, se tulee olemaan vähemmän visuaalisesti kiinnostavia. Tehdään tämä. Saat int i = 0; i> 0 - Tehdään tämä virhe - i + +. Ja älkäämme printf täällä. Katsotaanpa käytännössä mitä olin saarnaamassa. Mennään menetelmänä, mitätön chorus, ja me sanomme int i, ja sitten aion sanoa printf - no, tehkäämme tähän mielenkiintoisempia. Katsotaanpa oikeastaan ​​ei tulosta mitään. Toivotaan vain tehdä tämän: Chorus (i). Selvä. Joten tämä on buginen koska miksi? Teen tämän ylös kuin menen, koska ohjelma ei oikeastaan ​​tee mitään kiinnostavaa. Mutta se ei ole tavoite. Tavoitteena on kirjoittaa ohjelma, jonka päätehtävä tekee mitä, ilmeisesti? Soita itse. Ja itse asiassa, emme tarvitse silmukka. Katsotaanpa vaikka yksinkertaistaa tätä juuri niin kuin ei unohtaa todella perustavanlaatuinen vika. Tärkeimmät puhelut kertosäe laulamaan kuoro, Sitten tein jotain typerää ja jouduin kuorossa puhelu kertosäe koska oletin joku muu aikoi toteuttaa sen ehkä, ja nyt tämä ei tule kerätä vielä. Minun täytyy tehdä mitä? Tarvitsen prototyyppi, muistan. Joten minun täytyy olla täällä void kuoro (int i); Joten nyt jos menen tänne - todella, mennään käytä isompi ikkuna. Mennään eteenpäin ja tehdä kertosäkeen. Mennään eteenpäin ja tehdä kertosäkeen. Käytä pimeän tunnisteen i. Voi, se oli typerää. Emme tarvitse väitettä. Toivotaan vain tehdä tämän. Toivoisin alkanut tällä tavalla. Olisi ollut paljon helpompi ohjelma kirjoittaa. Siellä. Nyt mennään yli minun pääteikkunaa uusinta clang, ja tässä mennään. Se oli todella nopea. Mitä oikeastaan ​​vain tapahtui, vaikka? No, nyt minä lisätä tulostuksen rivi jotta voimme nähdä. Sanon printf ("Olen täällä") - no muuttujia. Jätämme sen näin. Saanen uusintana tehdä. Saanen uusintana kuoro. Ja ... Tule. Jatka. Sivuhuomautuksena, miksi se ei ole kaatunut vielä? Segmentointi vika tapahtui erittäin nopeasti ennen. [Äänetön opiskelija vastausta] >> Aivan. Joten se vie aikaa tulostaa, eikö? Se vain vie enemmän työtä tietokoneen osa. Ja siellä se on: segmentointi vika. Joten huomaa miten nopeasti ohjelmista. Jos et pysty tulostamaan mitään, huippunopea. Mutta saimme kuitenkin tämän segmentoitumisen vika koska mitä oli tapahtumassa? Jos ajattelee, miten tietokoneen muisti on vahvistetut, tämä sattuu olemaan tärkein, mutta tässä mennään vain kutsuvat tätä chorus, ja kutsukaamme tätä Chorus. Ja nyt jos minä teen estetiikka oikeassa, tämä on juuri menossa sanoa chorus, kuoro, kuoro, chorus, kuoro, kuoro, kuoro, loputtomiin, ja lopulta, mitä tulee tapahtumaan? Jos iso kuva, kirjaimellisesti, tämä on, mitä sattuu käsitteellisesti? Pino ylitykset kasaan. Tai pahempaa, juuri ylittynyt kaiken, myös tekstin segmentti, joka on 0 ja 1s jotka edustavat ohjelman. Lyhyesti sanottuna tämä on aivan super, super huono. Ohjelmasi on kasvaneet käsistä. Käytät paljon enemmän muistia kuin tarkoitit kaikki johtuu typerän virheen tässä asiassa, tai tässä tapauksessa hyvin tarkoituksellisesti tehnyt toiminnon kutsuvan itseään. Nyt tämä ei ole lainkaan huono. Toiminnot, jotka kutsuvat itseään todella on suuri voima, kun käytät sitä oikein. En ole käyttänyt sitä oikein täällä. Joten tämä ei ole lainkaan huono, mutta se, että en koskaan lopeta kutsuvan itseäni on olennainen heikkous täällä tämän ohjelman. Joten missä olemme menossa tämän kaiken kanssa? Mitä todella tapahtuu? Kun Kutsun lisäys toimivat kuten teimme näissä esimerkeissä, Minulla arvo kuin 1 että välitän sisään Minä kulkea kopion numero 1, joten tapahtuu seuraavaa. Mennään kasvu Esimerkiksi tämä kaveri on täällä. Tässä mitä todella tapahtuu. Kun pyydän kasvu ja välitän vuonna x, kuvallisesti, mitä täällä tapahtuu on tämä. Jos minulla on arvo 1 varastoitu täällä ja olen oikeastaan ​​soittaa lisäys, joka on nyt nimeltään kuoro - iPad on heittää minut pois täältä. Soitetaan tätä lisäystä, ja emme tiedä, mitä tämä seuraavaksi toiminto tulee olemaan. Joten mitä todella tapahtuu on täällä jossain pääasiassa olen kimpale muistin , joka on tallennetaan numero 1. Kun pyydän lisäys, olen käyttäen toista kimpale muistia, mutta nyt minulla on kopio 1. Kun minä kasvattaa tätä arvoa, tämä tulee 2, mutta mitä sitten tapahtuu kun kasvu palaa? Tämä muisti vain saa luovuttaa takaisin käyttöjärjestelmä, mikä tarkoittaa kaikkia olet tehnyt mitään hyödyllistä. 1 että alun perin sisältyvä tärkein on yhä todella siellä. Joten missä olemme menossa tähän? On käynyt ilmi, että muisti on tämä back-to-back järjestyksessä tavuja että voit laittaa kamaa, ja käy ilmi, että olemme jo nähneet jotain että kuuluu laittaa asiat takaisin takaisin takaisin takaisin. Mikä on merkkijono perustuva viikolla 1 ja nyt viikko 2? Se on vain kokoelma merkkiä. Joten se osoittautuu aivan kuten voit laittaa numerot muistiin, Vastaavasti voit laittaa merkkejä muistiin. Ja kun aloitamme laittamalla merkkejä muistin takaisin takaisin takaisin takaisin, käy ilmi, että käyttämällä yksinkertaisimpia asioita, kuten for-silmukka tai while-silmukka, voimme toistaa vasemmalta oikealle yli merkkijonon merkkejä ja alkaa hierovat niitä eri merkkejä kokonaan - voisi tulla b, b voisi tulla c - niin että lopulta voimme ottaa Englanti lause, joka todella on järkeä ja muuntaa kunkin näiden kirjeiden yksi kerrallaan kävelemällä kautta tietokoneen muistiin vasemmalta oikealle todella salata. Joten otamme viiden minuutin tauon, ja kun palaamme, me aloitamme tämän prosessin sekoitus tietoa. Selvä. Ennen kuin voimme sukeltaa joitakin crypto ja näitä asioita kutsutaan matriiseja, haluan pysähtyä kysyttävää, koska minusta tuntuu todella sellainen sekava joitakin niistä aiheista. Joten korjata nyt, jos voimme. Me vain puhuimme paluuarvot, puhuimme argumentteja, ja puhuimme tästä käsitteestä, jonka tulemme takaisin vuonna tulevina viikkoina, katsella muistiin koko joukko näistä lokerot pinosta, niin sanotusti, alhaalta ylös, niin että jokainen lokero että saa laittaa pinoon edustaa funktio, joka on parhaillaan kutsutaan. Kysyttävää? Saanen kysyä kysymyksen tänne. Saanen yksinkertaistaa tämän takaisin siihen, mitä se oli ennen joitakin aikaisempien Q & A. Se, että kasvu on avoin sulkumerkki, int numero, suljettu suluissa - Mitä int numero edustaa? [Opiskelija] argumentti. >> Argumentti. Okei. Mutta mitä argumentti? [Äänetön opiskelija vastausta] >> Mikä tuo on? >> [Opiskelija] Jotain että välität sisään Okei, joten jotain että välität tuumaa ja yleensä se on vain tulo. Jos olit kirjallisesti funktio ja funktion tarkoitusta elämään on tehdä jotain hieman erilaista joka kerta kun käytät sitä, silloin ainoa tapa, että tapahtuu todella näyttäisi olevan toimittamaan panos jotta se voi tehdä jotain erilaista, joka syöttää joka kerta. Joten sinun täytyy määrittää kaksi asiaa, kun toiminto vie tulo. Sinun täytyy määrittää nimi, jonka haluat antaa, että tulo puhtaasti oman mukavuuden, jotta voit viitata siihen on toiminto, joka itse kirjoitat, kuten tein täällä line 32. Mutta sinun on myös määrittää huoneen tyyppi, koska C on ohjelmointikieli että vain vaatii, että jos haluat muuttuja, sinun täytyy kertoa tietokoneen mitä tietotyyppi on, suurimmaksi osaksi siten, että se tietää, kuinka monta bittiä jakaa kyseisen muuttujan koska se voi olla 6 - pahoillani, se ei tule olemaan 6. Se voi olla 16, se voi olla 8, se voi olla 32, jopa 64, mutta tietokone tarvitsee tietää. Nyt, int vasemmalla puolella edustaa mitä vastoin? [Äänetön opiskelija vastausta] >> Mikä tuo on? >> [Opiskelija] tyyppi toiminto. Tyypin funktiona, ja tarkemmin sanottuna, tyyppi sen ulostuloon. Oikea. Joten taas asia suluissa edustaa sen tulon, jos jokin, asia vasemmalle edustaa sen lähdön. Ja tässä tapauksessa, lisäys ilmeisesti palauttaa int- ja niin int on palautuva tämän toiminnon. Mitä se tarkoittaa palaamaan? Kirjaimellisesti, voit käyttää avainsanan paluuta ja sitten jos mitä olet palaamassa oikealle avainsanan on kokonaisluku, niin se on todella sopusoinnussa sen kanssa, mitä olemme luvanneet. Voisit tehdä jotain tällaista - Hei, maailma - koska se on merkkijono. On selvää, että ei ole kokonaisluku. Eli lyhyesti sanottuna, taakka on todella meille, ohjelmoija, erityiseksi mitä olemme palaamassa ja sitten itse mennä noin palauttamalla sen. Konteksti tässä nyt on, että tietokoneen muisti on gigatavu, 2 gigatavua - mitä - ehkä se on enemmän, ehkä se on vähemmän, mutta tietokone näkee sen olevan eri osissa. Jotain menee sinne, jotain muuta menee sinne, erilaisia ​​juttuja menee keskellä, ja tänään me vain alkaa kertoa tarinaa, mutta me palaamme tähän ajan. Toistaiseksi ainoa pala muistia emme välitä on teksti segmentti sillä, että juuri edustaa 0 ja 1s, että clang on lähtönä. Joten kun suoritat komennon näppäimistön kuten a.out tai kaksoisnapsautat kuvaketta Mac OS tai Windows- ohjelma ladataan kiintolevyltä RAM ja se plopped yläreunassa tietokoneen RAM, niin sanoakseni. Samaan aikaan, kun ohjelma käynnistyy ja pääasialliset saa kutsutaan ohjelmassa kirjoittamasi tai ohjelman Microsoft tai Apple kirjoitti sen paikallisten muuttujien päätyvät sinne alareunassa tietokoneen muistiin. Mutta jos tärkeimmät puhelut toiseen toimintoon että itse on muuttujia tai väitteitä, ne päätyvät sen yläpuolella. Ja jos tämä funktio kutsuu jotain, ne päätyvät sen yläpuolella, sen yläpuolella, sen yläpuolella. Ja vain kerran toiminto tapahtuu täytäntöönpanovaltion ei pinon tarjottimia, niin sanoakseni, alkavat saada vähemmän ja vähemmän. Ja tämä on mitä sitten, pähkinänkuoressa, selittää soitat kuutio tai soitat lisäys, olet ohimennen kopion arvosta. Ja mitä se tarkoittaa kuvallisesti että olet kirjaimellisesti kirjallisesti numero 1 toisessa osassa muistia, muuttuvat, että 1-2 tapauksessa kasvu tai 8 tapauksessa kuution ja sitten heittää että muisti pois kun lisäys tai datakuutiofunktioiden palaa. Kysymys. [Opiskelija] Missä globaaleja muuttujia säilytetään? Global muuttujat tallennetaan mitä tällä hetkellä kutsutaan alustetaan tiedot tai alustamattoman tiedot, erona jos sinulla on globaali muuttuja ja liität sen heti arvo kanssa yhtäläisyysmerkkiä, se päätyy huipulla siellä, ja jos vain sanoa int x; ilman arvoa, se päätyy hieman pienempi RAM yksinkertaisesti yleissopimuksessa. Muita kysymyksiä? Selvä. Joten tämä kuva tulee takaisin kun saamme tehokkaampi mitä voimme tehdä tietokoneella, mutta nyt, otetaanpa lyhyt esittely salausta, tietyntyyppisen salausta, joka ei ratkaise kaikkia maailman ongelmia mutta ei ratkaista joitakin niistä. Tässä tapauksessa täällä, meillä on jotain kutsutaan salaisen avaimen salausta. Secret-avaimen salausta, kuten nimestä voi päätellä, johtuu se turvaa salaisuus. Esimerkiksi, jos olit takaisin alakoulussa ja olit kulkee pieni salaisuus rakkauskirje sen poika tai tyttö olit murskaus päälle, jos halusi siirtää tämän muistion läpi yleisölle, luultavasti ei kirjoita tällaista huomautuksen Englanti tai mikä tahansa äidinkieli on. Pikemminkin, saatat salata sitä tai ehkä vain lähettää heille tekstiviestin näinä päivinä. Mutta ehkä todella välittää heille huomautuksen koko luokkahuoneessa. Ja tehdä tämän turvallisesti siten, että ystävien ja opettaja eivät tiedä, mitä olet kirjallisesti, saatat keksiä melko yksinkertainen algoritmi, Nuoret vaikka saatat olla vain ryntäily sanat. Joten kirjoittamisen sijaan voit kirjoittaa b, sijaan b saatat kirjoittaa C, sen sijaan, että c saatat kirjoittaa d, ja niin edelleen. Tai voit keksiä entistä kehittyneempiä käännös kirjeitä eri kirjaimia. Mutta saalis on poika tai tyttö, jolle olet lähetät tämän huomautuksen tarvitsee tietää jotakin, mikä on mitä, ilmeisesti? >> [Opiskelija] Mitä aiot lähettää. Mikä salaisuutesi on, kuin mitä se kartoitus n ja b: n ja c: n ja D: n. Onko se vain lisäämällä 1 kullekin kirjeitä mennä ja b, b ja c? Onko se monimutkaisempaa kuin? Joten sinun ja murskata tarvitsevat tätä salaista tietoa, mutta siellä on eräänlainen catch-22 täällä. Jos tämä on ensimmäinen kerta, kun lähetät tämän rakkauskirje kautta luokka, miten on, että poika tai tyttö tulee tietää, mitä salaisuus edes on? Niin salainen avain crypto ei ratkaise kaikkia maailman ongelmia, ja siellä todella suhde tässä, että me palaamme kohti lukukauden lopussa. Samoin useimmat meistä eivät tiedä joku, joka toimii esimerkiksi osoitteessa Amazon.com, ja vielä monet meistä ovat luultavasti ostanut tavaraa Amazon.com, ja olemme opetettu olettaa, että nämä verkkokauppatapahtumia ovat turvallisia. URL luultavasti sanoo https, siellä ehkä typerä pikku munalukkokuvake jonnekin, olemassa jonkinlainen salausta turvata luottokorttisi tiedot sinun ja Amazon.com. Ja vielä jos salaus liittyy tietää joitakin salaisia ja vielä en tiedä ketään Amazon ja olen varmasti ole järjestetty minkäänlaista salaisuus jonkun Amazon, miten tietokone tai selain tekee tämän? On käynyt ilmi, on olemassa muita salausta kokonaan, että ongelma ratkaistaan. Mutta nyt, me keskitymme yksinkertainen jossa voit järjestää etukäteen tietää joitakin salaisia kuten +1 tai jotkut kartoitus n ja B: n. Ja prosessi salauksen liittyy yleensä tätä. Sinulla on joitakin pelkkää tekstiä, kuvattu täällä vasemmalla te ajaa se läpi jonkinlaisen algoritmin tai menettelyn salaamiseen sitä - Ehkä se on vain muuttuu b, b muuttuu c - ja sitten voit päätyä salakieli. Samalla kun ihastus saa tämän salaisuuden huomautuksen, hän on sitten purkaa se yleisesti peruutettaessa että algoritmi jotta saat takaisin tekstimuodossa. On olemassa fyysinen inkarnaatioihin tämän. Esimerkiksi tämä on pieni salaisuus dekooderi rengas, ja tämä on rengas siinä mielessä, että siellä on kaksi soittaa täällä. Ulkopuolella kehän tämä asia, siellä on kirjaimet A-Z, vaikka he satunnaisessa järjestyksessä, ja sisäpuolella, siellä on todella joitakin numeroita niin että tämä rengas voi tavallaan kääntää ulkopuolelta, mutta ei sisällä jotta riviin numeroita kirjaimia. Alkaen elokuvan nimeltä Christmas Story, huomaat että pikku Ralphie oli niin innokas selvittää, mitä Pikku Orphan Annie salaisuus viesti oli hänelle joka oli ilmoitettu, luulen, muodossa numeerinen viestejä vilja laatikko ja sinun piti kerätä kaikki pikku kortit tuli vilja-ruutuun sinun piti postittaa ne, sinun piti saada takaisin salaisuus dekooderi rengas joten voit vihdoin selvittää, mitä kartoitus on kirjainten ja numeroiden tai kirjaimia ja kirjaimia. Miten tietokone voimme edetä toteuttamisessa tai edustavat asioita, kuten tämä? Tarvitsemme tapa ilmaista itseämme hieman joustavammin kuin meidän muuttujia on toistaiseksi sallittu. Meillä on ollut ints, meillä on ollut merkkiä, meillä oli kellukkeet ja tuplaa ja muutamat muut, mutta ne ovat yksittäisiä muistia, jotka eivät todellakaan anna meille ilmaista asioita kuten sanoja ja lauseita ja fraaseja. Itse asiassa me olemme kutsuneet tällaisia ​​asioita jouset, mutta lupaamme, että tämä on todellakin vain yksinkertaistaa CS50 kirjastossa että olemme aikovat kuori takaisin. Ja niin aloitamme tehdä sitä täällä. Anna minun mennä eteenpäin ja avata tiedosto - kaikki nämä tiedostot ovat, kuten tavallista, online - kutsuttu array.c ratkaista ongelma liity merkkijonoja vaan maalaa kuvaa täällä miten voisimme käyttää jotain kutsutaan array. Array on tietotyyppi. Se on tyyppiä muuttujan tapaisena, jossa on useita pienempiä tietotyypit sen sisällä takaisin takaisin takaisin takaisin. Niinpä esimerkiksi, jos haluamme kirjoittaa pieni ohjelma, joka antaa sinulle tietokilpailu keskimäärin kurssille kuten 50, joka on 2 tietokilpailuja, voit helposti kirjoittaa tämä ohjelma perustuu edes joitakin viime viikolla materiaali käyttämällä GetInt ja pari muuttujat: int quiz1, int quiz2. Ja se on melko yksinkertainen. Se on ehkä 10, 20 riviä koodia max toteuttaa ohjelman joka kysyy käyttäjältä 2 tietovisan tulokset ja sitten laskee niiden keskiarvon lisäämällä ne yhteen, jakamalla 2, ja sitten tulostaa tuloksia. Voisimme ehkä tehdä melko helposti nyt jonkin ajan minuutteina. Mutta ongelma on, että oletetaan, että 50 oli 3 tietokilpailuja tai 4. Oletetaan, että halusitte käyttää samaa ohjelmaa luokka, joka oli viikoittain tietokilpailuja. Ajattele luokka, joka on viikoittain tietokilpailuja. Jos on 16 tai niin viikkoa lukukauden, nyt sinulla on 16 muuttujaa: int quiz1, int quiz2, int quiz3, int quiz4. Heti kun alkaa nähdä tämän redundanssin tämä kopioimalla koodin, sen pitäisi alkaa tehdä haluat siellä oli parempi tapa. Ja onneksi, sillä paneelit on. Joten tehdään tämä. Ensinnäkin haluan esitellä hyvin yksinkertainen asia, että olemme ei käytetty tähän mennessä, mutta näet sen satunnaisesti koodia. Tämä on se, mitä kutsutaan yleisesti vakio. Joten se on vakiona siinä mielessä, että tämä arvo ei koskaan muutu. Ihmisen yleissopimus luotaessa vakio on käyttää kaikkia isoja kirjaimia vain niin, että se todella erottuu koodissa, ja erikois että käytät C # define. Joten sanomme # define sitten tilaa, niin sana jota haluat käyttää vakiona nimi ja sitten arvo vakiona. Huomaa tämä eroaa määrittämällä jotain muuttuja. Ei ole yhtäläisyysmerkkiä, ei ole puolipiste. Tämä on se, mitä on yleisesti tunnettu Esiprosessorin direktiivi, mutta siitä lisää toisella kertaa. Nyt tämä luo muuttumaton arvo nimeltään tietovisat joiden todellinen numeerinen arvo on 2. Joten missä näet tietokilpailuja, tietokilpailuja, Tietokilpailut koko tämän tiedoston, se on vain numero 2. Jos katson pääasiassa nyt katsotaanpas miten tämä toimii. Ensin se näyttää hieman arvoituksellisesti, mutta se on kaikki jutut viikosta 1. Kysy käyttäjä arvosanoja. Miten teemme tämän? Yhdenmukaisesti 22 - tämä on todella mehukas osa - Julistan float mutta ei vain yhden float. Olen julistaa pikemminkin joukko liukulukuja arvot. Muuttuja on menossa kutsutaan laatuja, kuten ehdotetun tässä, mutta vain osa uuden syntaksin sitten ovat nämä hakasulkeita. Se, että olen sanonut float arvosanoja ja sitten alkusulkumerkki ja sitten numero - huomaa, jos tämä on vakio tämä on aivan kuten teimme tämän - Tämä tarkoittaa, "Hei tietokone, anna minulle 2 kellukkeet ja mennään yhdessä kutsuvat niitä laatuja." Tämä on toisin kuin paljon työläs prosessi, kuten tämä: float Grade1; float Grade2, ja niin edelleen. Joten array voimme toteuttaa tätä ajatusta, mutta paljon vähemmän messily, niin että voimme kirjoittaa 1 koodirivin sijaan, sanovat, 16 16 viikon lukukauden. En halua koodata 2 koska jos ajattelet tästä nyt loogisesti, Oletetaan ensi vuonna CS50 muutoksia 3 tietokilpailuja sijaan ja minulla oli numero 2 täällä, minulla oli numero 2 täällä, Minulla oli numero 2 täällä, numero 2 täällä. Se tulee hyvin ikävä ja erittäin helppo tyriä ja vahingossa muuttaa 1 arvoksi 3 ja kaipaamaan joitakin muita arvoa 2. Joten aion vaan abstrakteja tämän pois ja käyttää tätä jatkuvaa että Kuten nimestäkin voi päätellä, ei koskaan muutu. Ja nyt ei ole väliä, onko meillä erilaiset tietovisat tänä vuonna tai ensi- Minun täytyy vain vaihtaa se yhteen paikkaan täällä ylhäällä. Niin, että kaikki vakio on. Myös uusi käsitteellinen ominaisuus on se, että joukko. Joten hakasuluissa anna minulle monia kellukkeet ja antaa minulle kollektiivisesti soittaa heille arvosanoja tänne. Joten nyt katsotaanpas mitä aion tehdä. Täällä linjalla 24 on alku ja silmukka. Tämä ei oikeastaan ​​mitään fancy. Se vain käyttää tietokilpailut sijasta kovakoodatuilla numero. Mutta ei ole mitään älyllisesti eri siellä viime viikolla. Tämä on vain printf, joten printf ("Quiz #% d% d:") koska haluan vain tulostaa antaa minulle tentata numero 1 2 ja sitten 2 of 2. Joten tämä on puhtaasti esteettinen juttu. Mutta mielenkiintoinen osa on nyt linjassa 27. Jotta täyttää toinen paikkamerkit liukulukuarvo, taas käyttää hakasulkeissa. Tässä tapauksessa, olen käyttäen i koska tämä silmukka on aloitettu i vastaten mitä arvoa, ilmeisesti? [Opiskelija] 0. >> [Malan] 0. Joten ensimmäistä iterointia tämän silmukan, se on ikään kuin kirjoitin tämän koodin, mutta toisen iteroinnin tämän silmukan, se on ikään kuin kirjoitin tämän minun koodi. Mutta se, että olen käyttäen muuttuja on täydellinen, koska nimensä se vaihtelee sen arvo jokaisessa iteroinnissa joten olen täyttämällä tämän array yksi paikalla kerrallaan. Mitä tämä array näyttää? Syy Piirsin super yksinkertainen suorakulmio ruudulla täällä ennen oli tästä syystä. Array on vain kimpale muistin seurasi toinen kimpale muistia seurasi toinen möhkäle muistia ja niin edelleen. Joten jos minun joukko on kooltaan 2 tässä tapauksessa täällä, en tekisi kirjoittamalla minun tietokilpailuun tulokset kuin täällä - Sain 100 tässä yksi ja sitten sain 99 tämän yhden - Sitten tämä muisti ei välttämättä edes saa käyttää, koska olen vain pyytänyt tietokone varten erilaisia ​​kooltaan 2. Nämä neliöt ovat edelleen olemassa, eikö? Sinulla on vielä 2 gigatavua RAM, vaikka olet vain pyytänyt 2 kelluu. Joten ajatus paneelit on, että tietokone vie palan muistia ja sitten jakautuu niiden paloitellun takaisin takaisin takaisin takaisin. Ja jotta kaikki array on. Se on yhtenäinen kimpale muistia jonka sisällä voit laittaa asioita. Tämä tapahtuu niin tee vain joitakin tylsää aritmeettinen. Jos minä selaa täällä, tässä minä sitten iteroida yli array. Olen keksiä summattu kaikki arvot array, ja sitten käytän kierroksen toimintoa täällä todella tehdä summa jaettuna tietokilpailuja. Mutta minäpä heilutella kättäni tuohon koska tavallaan tarpeeksi aritmeettinen nyt. Mutta kaikki tämä tekee minulle lopulta on laskemisessa keskimäärin. Joten ensimmäinen tietokilpailu plus toinen tietokilpailu jaettuna 2 ja sitten tulostaa sen ulos int. Mutta katsotaanpa nyt siirtymistä eri esimerkin nimeltään merkkijono1, joka maalaa samanlaisen kuvan, mutta käyttäen merkkijonoja. Anna minun mennä eteenpäin ja yksinkertaistaa tämä vain hetken. Anteeksi sisennystä nyt. Ilmoitus vastaa 19 tämän esimerkin, saan merkkijono käyttäjältä. Mutta huomaa, mitä olen seuraavaksi tekemässä linjat 22 eteenpäin. Olen oikeastaan ​​iteroimalla i: jopa - ja tämä on uusi temppu - strlen, merkkijonon pituus. Tämä toiminto tulee C että jos ohitat sen merkkijono, Se kertoo, kuinka monta merkkiä on merkkijonon. Siinä kaikki. Ja että se on strlen sijasta merkkijonon pituus on vain koska se on enemmän ytimekäs. Kolmekymmentä vuotta sitten, ihmiset pitivät kirjoittaa asioita niin ytimekkäästi kuin mahdollista, joten olemme pitäneet kyseisen yleissopimuksen täällä. i + + tarkoittaa vain kasvattaa i jokaisen iteraation. Ja nyt huomaa, mikä on todella mielenkiintoinen. Linjalla 24, sanon, "Computer, anna minulle merkki, 8 bittiä, ja kutsuvat sitä c." Mutta mikä on tämä oikealla puolella sanovat? Englanti, mitä se edustaa? [Opiskelija] ensimmäinen merkki array. Aivan. Anna minulle ensimmäisen merkin jono. Tai yleisemmin, anna minulle nnen merkin jono. Ja ymmärtää sitä tärkeää nyt, että tietotekniikan tutkijoita, olemme todella laskien 0. Sinulla ei ole harkintavaltaa nyt alkaa tehdä tätä. Nyt sinun täytyy käyttäytyä mukaisesti tietokoneen odotukset ja laskea 0 koska [0] tulee olemaan ensimmäisen merkin merkkijono, [1] tulee olemaan toinen, [2] tulee olemaan kolmas, ja niin edelleen. Joten tämä ohjelma, jos kääntää se, tämä on taas string1, joten varmista merkkijono1, ja nyt olen ajaa merkkijono1 minun pääteikkunassa. Se odottaa syötteitä, joten aion kirjoittaa David, Anna, ja nyt se tulostaa David kaikki eri riveille, koska ilmoitus mitä olen tekemässä. Olen tulostetaan yksi merkki kerrallaan. Emme aio mennä yksityiskohtiin tänään, mutta poistin hetki sitten tämän tarkistuksen täällä. On käynyt ilmi, että jos käyttäjä on huonosti, vastavuoroisuus, tai vain hämmentynyt, voit itse pysty antamaan merkkijono melko pitkään. Jos osut väärään näppäintä, saatat antaa mitään string ollenkaan, tai jos olet ilkeä, saatat yrittää liittää vuonna gigatavu verran essee täyttämään tämän merkkijono, ja jos tietokone loppuu muisti, käy ilmi, että aiomme palata tähän erityistä arvoa nimeltään NULL. Joten nyt vain tietää, että tämä on erityinen arvo nimeltään NULL jonka avulla voimme tarkistaa, kun olemme muisti, muun muassa. Mutta jos avaan nyt merkkijono2, havaitaan yksi ero täällä. Havaitaan yksi ero täällä merkkijono2. Kanssa merkkijono2, tämä silmukka on hieman erilainen. Saanen poistaa nollat ​​jotta voimme puhua niistä toisen kerran. Mitä erilaista on silmukka tällä kertaa? Voin palata edellisen esimerkin. Niin, että versio 2, tämä on versio 1. 1, 2. 1, 2. Strlen puhelu minne? Se on ensimmäinen osa on silmukka. Mitään ajatuksia siitä, miksi teen tätä? Joo. [Opiskelija] Joten et soita funktio joka ikinen kerta. [Malan] Joten emme soita funktio joka ikinen kerta. Aivan. Muistamme Silmukoiden että he super yksinkertainen Kun tavallaan ymmärtää, että tämä on alustus, ehto, ja päivityksen. Ongelmana on, että ehto tapahtuu jokaisen iteroinnin silmukan. Ja niin tässä esimerkki tästä, mikä on huonoa, että tämä on minun ehto? [Opiskelija] soitat strlen. [Malan] soitat strlen uudestaan ​​ja uudestaan ​​ja uudestaan. Mutta kun olen kirjoittanut David, pituus merkkijonon on 5, ja se ei aio muuttaa jokaisen iterointia silmukan koska merkkijono on edelleen D-a-v-i-d. Joten tämä on vihje mitä on tulossa yhä tärkeämpi idea tunnetaan suunnittelu päätös, jossa eivät vain tee tietokoneen tehdä turhaa työtä. Aivan kuten esimakua pset2, pset2 standardin painos aikoo haastaa sinut todella toteuttaa joitakin määrä ciphers, jotkut määrä salausalgoritmeja, jotta voit molemmat salata ja purkaa salaisten viestien paljon kuin yksi Ralphie on dekoodattu. Vuonna hakkeri painos pset2, aiomme mennä hieman pidemmälle. Aiomme ojentaa sinulle tiedoston todellinen tietokonejärjestelmä joka sisältää läjän käyttäjätunnusten ja todellisten salattuja salasanoja, ja haaste hakkeri painos tulee olemaan murtaa nämä salasanat ja selvittää, mitä salauksen tai mitä salaisuus käytettiin itse tuottaa nämä salasanat. Ja me aiomme tehdä tämän käyttämällä uutta ominaisuutta täällä C että minä annan sinulle vain demo tunnetaan komentorivin argumentteja. On käynyt ilmi, kuten jotkut teistä ehkä nähnyt jaksossa tai oppikirjoissa, tärkein ei aina tarvitse olla mitätön suluissa. On käynyt ilmi, että pääasiassa voidaan kirjoittaa myös näin, kaksi argumentteja, argc ja argv, jossa argc on sanojen määrä että kirjoitat jälkeen ohjelman nimi komentorivi ja argv on todellisia sanoja. Ja kuten hakasulkeita siellä ehdottaa, argv on ilmeisesti joukko. Se tulee olemaan merkkijono jälkeen merkkijono jälkeen merkkijono muistiin. Joten mitä aiomme pystyä tekemään alkaen PSET 2 on jotain tällaista. Jos teen argv1, joka on esimerkki tulemme takaisin maanantaina, ja suorita se, huomaa, että se ei näytä mitään vielä. Se vain tulostaa omalla nimellään. Mutta jos sanon hyvästit luokka, huomaa, että tämä ohjelma ilmeisesti toistetaan enemmän kuin sanat, joita kirjoitettuna kehotteeseen. Ja keinoja, joilla voimme päästä sanoista että käyttäjä on kirjoittanut kehoitteeseen On muuttamalla tärkein alkavat tänä viikonloppuna int main (void) int main (argc, argv) ja näin syntyy komentorivin argumentteja. Ja kun saat todella hienostunut tässä, voit kirjoittaa todella trippy ohjelmat kuten tämä tässä, joka menee edellä ja sen jälkeen joitakin toimintoja olemme tehneet tähän mennessä, mutta kaikki melko voimakas. Joten me lähdemme tästä tällä ruudulla, ja näemme sinut maanantaina. [CS50.TV]