[Powered by Google Translate] David J. Malan: Olgu, see on CS50, ja see on algus nädalal kaks. Aitäh. Alustagem siin telefonikõne. Ma olen umbes helistada 617-BUG-CS50. CS50: See on CS50. Sest Shuttle Poiss, vajutage 1. Et alustada, vajutage 9. David J. Malan: Siis ta ütles jaoks Shuttle Poiss, vajutage 1. Nii et me ei kavatse vajutage 1. CS50: Mis on su päritolu? Quad, vajutage 1. Ema, vajutage 2. Boylston, vajutage 3. Lamont vajutage 4. Mem Hall, vajutage 5. Et alustada, vajutage 0. David J. Malan: Me vajuta 1 quad. CS50: Järgmine buss väljub seda väga minut 13:10, ja siis kell 1:20, 01:30, 01:40. See on CS50. David J. Malan: Nii et see on CS50 hääl. Ja see on näide sorti lõplik projektide jaoks Näiteks saab hammustada välja poole semestri lõpuks. Näiteks, et shuttleboy.cs50.net olemas - tegelikult projekti, et ma esimest kirjutasin pärast pildistamist CS51 tagasi, kui olin bakalaureuseõppe. Ja siit inspiratsiooni oli tollal, kõik nad olid olnud trükitud liinibuss sõiduplaanide, ja ei olnud mõiste otsin asju internetis. Ja nii ma omamoodi tuvi ühe nädalavahetusega, valatakse läbi trükitud ajakava ja teisaldatud selle arvutiprogramm. Ajal, mil arvutiprogramm juhtus olema kirjalik aastal C. Ja sa tegelikult jooksis ta kirjutades Shuttle poiss vilgub kiire nagu me oleme seda teinud siiani. Aga aastate jooksul on see kujunenud vahetu Sõnumid bot. See on arenenud viimasel käesoleval veebilehel sisseveo SMS-põhine tööriist, samuti sellesse hääl-põhine tööriist. Ja see on vihje asjadele, mida saate teha ise semestri lõpus. Näiteks seal, SMS versioon Shuttle Poiss juhtub tegutseda järgmiselt. Kui teie mobiiltelefon, saadate tekstsõnumi 41411 ja siis saatke eritähise sboy jaoks Shuttle Poiss, järgneb A ja B, kus on päritolu ja B on sihtkoht - Näiteks Boylston Kosmos Quad - mida sa peaksid tagasi minema mõne sekundi jooksul on tekst sõnum Shuttle Poiss ütleb teile täpselt, kui Järgmise paari süstikud on sellest hetkest alates on kavatse, et punkt B. Ja see on üldisem näide sellest, mis on tuntud kui kasutades API. Nii näiteks see siin on lihtsalt shuttleboy.cs50.net, tegelik veebipõhine kehastus see. Aga andmed, mis rõhutab selle ja teiste apps, mis CS50 on välja töötanud kõik puutume kõik siin kujul rakendusliideste, rakenduse programmeerimise liidesed. Ja see on ainult fancy viis öelda, et inimestele meeldib meie kohta Internet ja teised on mõnda aega luua tarkvara, mida saab kasutada, et haarata andmeid meile ja siis ehitada oma rakendusi peal Selle andmekogum. Nii näiteks see Shuttle Poiss API leht siin, mis juhtub olema CS50 kasutusjuhendi sisuliselt dokumendid kuidas saab minna umbes paludes CS50 serverite andmed. Näiteks, kui te olete juba tuttav CSV faili, koma eraldatud väärtused, need on lihtsalt omamoodi kiire ja räpane Excel-like faile. Nii et võite küsida Shuttle Poiss kõigi andmeid kõikide majade ja nende GPS-koordinaadid ja saad tagasi sisuliselt, arvutustabeli niimoodi, et võite lugeda meie programmi enda ja seejärel andma tulemusi, nagu Shuttle Poiss ise juhtub tegema. Neile rohkem tuttav, moodsam andmed esindused sisaldavad JSON, JavaScript Object Notation. Midagi tulevad sulle tagasi suunas semestri lõpuks. Aga jälle, see on vaid üks mitmete CS50 enda rakendusliideste. Ja põnev asi on nüüd, nendel päevadel, Facebooki ja Twitter ja Google ja päris palju iga populaarne veebileht välja seal on mingi API, mis tähendab, kui sa loed dokumendid oma veebilehel, kui sisse logida konto, saate siis hakake tarkvara peal mida iganes vahendeid või andmed, et ettevõte on ette näeb. Ja nii üks meie õpetamise stipendiaatide paar aastat tagasi kirjutas Mac versioon sellest. Nii et lingil Mac siin üleval vasakul, saate tegelikult lae Mac OS vidin, mis töötab oma Mac teha sama liiki asju. Nii et see on kõik umbes hoone peal andmekogud nagu need. Aga rohkem sellest poole semestri lõpuks. Nii et olgem sukelduda päris kiire putukas, lihtsalt selline saada asjad üles soojendada täna, ja mõtlen tagasi mõnele asjad me vaatasime eelmisel nädalal. Eelkõige lubage mul minna ja tõmba, ütleme, Selles näites siin. Buggy1.c, see on kättesaadav kursuse veebilehel, kui soovite soovite alla laadida, ja tuhnima ise. Aga olgem suumimiseks siin selles üsna lühike programm ja lihtsalt ülikiire sulgege mõned põhilised ehitusplokid et me tõesti tahame lihtsalt hakata võtma enesestmõistetavana. Nii sinine värk, ridadel 1 kuni 9, on vaid Softball küsimustele. Nii et need on lihtsalt kommentaarid. Neil puudub funktsionaalne tähendus. Aga nad märkusi selles mõttes, et nad märgib, et Mina, inimene, teha ise nii, et loengu ja pärast loeng, ma ei saa tegelikult mäleta, mida see programm Kas ilma see läbi lugeda rida realt ja taasloomine ajalugu minu meelest. Pealegi, kui ma käega seda programmi kellelegi meeldib teile, see on palju selgem teile, sest kommentaaride meeldib see, Mis programmi tegelikult teeme, või vähemalt see, mida Programmi pidanud tegema. Sõltumata sellest, kas see on õige on hoopis teine ​​küsimus. Nüüd, C, mitmeliiniline kommentaare, meelde tuletada, et on line üks siin on maagiline sümbol, / *. See tähendab, siin on algusest kommentaari. Ja miski muu ei loe, kuni jõuate lõpuks terminaator mis on * / vastupidine. Nii et mul on 80-mõned kummalised tärni siia Vasakult paremale on tõesti ainult esteetiline detail. Tal ei ole funktsionaalne tähendus. Nüüd kuidas line 11? Mida see teeb üldarusaadavat mõttes? Mis see on? Sihtrühm: Sisaldab standard. David J. Malan: OK, hea. Nii et see sisaldab stdio.h raamatukogu. Nii et mida see tähendab? Noh, sees, et fail, stdio.h, on terve hunnik funktsioon deklaratsioonid - see on kood, et keegi teine ​​kirjutas. Ja suurepärane näide funktsioon, mis on välja kuulutatud stdio.h on - mis lemmik nüüdseks? Nii printf, üks enim levinud kasutada, kindlasti varakult, st et raamatukogu on olemas. Kui ma välistada, et rida koodi, rõkkama hakkab lõugama mind midagi kasutades deklareerimata sümbol. Midagi deklareerimata on ilmselt märksõna, sest me ei ole teavitanud kompilaator mida printf välja meeldib kui me hulka, et liin. Ja rohkem alla maa, tõesti, mida see rida ütleb on avada see fail, stdio.h, kus iganes see on serveri kõvaketta või seadme kõvakettale, ja kopeeri-kleebi see seal minu pilti ilma minu võttes tegema, et käsitsi. Nüüd, kui saame siin all Otse enne pikka hakkame kiusasid peale mida int ja mida tühjus. Aga nüüd, vaatame kolm liini 15 kuni 17. See siin ma väita, nagu lollakas. Rida 7 minu kommentaarid ütleb: "Kui printida 10 tärne kuid ei. "Miks see ei prindi, kuigi tegelikult 10 sellist tähte? Sihtrühm: [kuuldamatu]. David J. Malan: Täpselt. Nii märkate, et oleme hakanud lugema 0-st. Ja see on tegelikult konventsiooni programmeerimine ja arvutiteadus üldisemalt hakanud lugema 0 1 asemel. Ja see on tõesti lihtsalt tuleneb asjaolust, et Näiteks, kui meil oli kaheksa inimest lavale, kui keegi ei tõsta oma käsi, need olid kõik tõhusalt nulli. Ja nii see on lihtsalt mingi arvuti konventsiooni nii, seetõttu, et alustada loendamist 0. Kui see on väiksem number saab esindada binaarne. Nii et siin me oleme alustanud initsialiseerimisel I 0. Oleme loonud i = 0. Aga siis ma tegin seda viga siin, öeldes i on väiksem või võrdne 10. Aga kui sa arvad, et läbi, kui ma hakkan 0 ja siis lähen kuni 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ma olen tegelikult läheb välja printida 11 tähte ekraani, sest ma olen kasvanud ja võrdne 10. Nii lihtne lahendus siin siis on mis? Sihtrühm: [kuuldamatu]. David J. Malan: Lihtsalt muuta see vähem kui. Kui sa tõesti tahad, siis võiks seda teha. Aga üldiselt, mis on kortsutas kulmu. Ja nii hakkab lugema 0-st on lihtsalt midagi, mida peaks tavaliselt harjuda. Nüüd, kuidas kogu see konstruktsioon ja ise? See rida 15 demarks jaoks silmus. Nii ei ole funktsioon. See on lihtsalt avalduse. See on silmuspõletamise ehitada, nagu me nägime Scratch. Ja see koosneb kolmest osast. Pange tähele, et seal on esimene osa vasakul semikooloniga. Seal keskel osa kahe semikoolonit. Ja siis on parempoolne osa paremal Teise semikooloniga. Nüüd, esimene neist teeb mida? Sihtrühm: [kuuldamatu]. David J. Malan: seal? Jah? Sihtrühm: ettekanne. David J. Malan: ettekanne. Mida see tähendab? Meil on deklareeritud muutuja nimega i. See on tüüpi int, sest ma olen täpsustatud int i. Ja ma initsialiseerimisel i väärtusega 0. Mis siis see tõesti öelda? See on tegelikult öelda, et arvuti Hei, anna mulle piisavalt mälu, piisavalt RAM, mis sobib number, ja seejärel panna number on 0, et patakas RAM. Ja kui kõrvale, kui suur on int tavaliselt, vähemalt sees seadmest välja? Sihtrühm: 32-bitine. David J. Malan: 32 bitti. Nii et see tähendab mulle 32 bitti, muidu tuntud 4 baiti, ja pane väärtuseks 0. see, mis on üsna lihtne, sest See tähendab lihtsalt seada kõik bitid 0-ga. Nüüd teine ​​osa on siin seisukorras. Ja seisukorras, nagu nimigi ütleb, on see, mida on kontrollitud uuesti ja uuesti ja uuesti, kas see on õige või vale. Nii et see on lihtsalt öeldes teha järgmist rida koodi - nimelt liin 16, sest see on ainus, liigestatud all - nii kaua kui ma alla 10. Ja pärast iga iteratsiooni kaudu see silmus, teha juurdekasvu, mis antud juhul on i + +. Nüüd, see ei pea olema i + +. See võiks olla i -. Aga kui ma tegin seda, mis seal käitumine läheb olema selle programmi? Sihtrühm: See saab olema lõputu silmuse. David J. Malan: See saab olema mingi lõputu silmuse, kui meil veab pärast negatiivne 2 miljardit või nii. Ehk asjad see murtakse, lihtsalt milline on piiratud bittide arvu, et oleme eraldatud int. Aga see on kindlasti kavatse kinnitada, kaugelt üle 10 ja kindlasti rohkem kui 11 korda siin. Ja nüüd, just nagu kõrvale, mõista, et i + + ja I - on tõesti ainult süntaktiline suhkur. See on lihtsalt stenografisti märke, mida on veidi rohkem selgesõnaliselt kirjutatud järgmiselt: i = i + 1. See on identne i + +. See lihtsalt selline näeb ilusam öelda i + +. See on sisutihe, loetavamaks. Ja nii enamik inimesi teha, et mitte. Aga see on identne funktsionaalselt mida me just nägime. Nii lühike, kiirparandus on siin lihtsalt öelda itereerima i 0 kõik viis kuni vähem kui 10. Ja siis me tõesti saada 10 tähte. Nii et proovime seda. Lubage mul avada terminali allosas. Lubage mul minna kataloogi, et see on sisse Ja ma lähen kompileerida käsitsi rõkkama nüüd. Ja ma lähen kompileerida seda buggy1.c, Enter. Ja nüüd buggy1, miks on sellist faili või kataloogi nimetatakse buggy1? Sihtrühm: [kuuldamatu]. David J. Malan: Jah. Nii et see on tegelikult nn a.out. Nii et meenutada, kui sa lihtsalt kulgema rõkkama, kus rõkkama on tõlkija, ja te ei määra nimi, mida soovite anda oma programmi, siis läheb vaikimisi a.out. Nii et tõepoolest, kui ma LS - oops. Ja ma ei - must-valge küsimus mõnede te silmitsi on fikseeritud. Aga lubage mul seda teha. Seal on meil a.out vasakul servas on olemas. Nii et me peame jooksma a.out asemel buggy1. Nii et lubage mul minna ja seda teha. . / A.out, Enter. Ja ma ilmselt ei tee mida? Sihtrühm: Salvesta. David J. Malan: Salvesta minu faili. Nii et kergelt lahendatav lööb Control S, või läheb File, Save, nagu enamikus programmides. Lubage mul minna siin, selge ekraan, käivitage see uuesti. Ja seal on veel viga. Nii et mis toimub - Sihtrühm: Sa ei kompileerida. David J. Malan: Ah, hea. Ma ei kompileerida. Nagu idioot, ma vaatan koodi näha, mis on valesti. Nii rõkkama buggy1.c, nüüd a.out. Ja phew, päästetud. Nii et tundub natuke kole, sest ei ole uue liini kõikjal programm. Aga jälle, see on ainult esteetiline detail. Ja vähemalt kui me loota need, peaksime nüüd vaata 10 sellist tähte. Noh, aga see teine ​​soojenduseks näiteks? Nii buggy2, Väidan, et see versioon ka, prinditakse 10 tähte, üks rea kohta. Nii et seekord on mul reavahetus sümbol, vaid teha asjad natuke ilusamaks. Kuid selle asemel, mida ma saan on see. Nii et las ma teen rõkkama buggy2.c, Enter. Nüüd on taas kutsutud a.out. Enter. Ma näen ainult ühte uut liini, vaid väga viimane uus liin, mis liigub minu kiire järgmisele reale. Ja veel selgelt Olen trükkimine *, siis uus liin, *, Siis uus rida. Aga mis viga siin? Jah? Sihtrühm: [kuuldamatu]. David J. Malan: Täpselt. Nii et erinevalt mõnest keeles, nagu Python, kus taandus tegelikult on funktsionaalne tähendus, mis keeles nagu C - nagu näeme, PHP, JavaScript - taandus on tõesti ainult inimesele kasuks. Nii et ma olen taandrea 16 ja 17 tundub hea, kuid see ei ole funktsionaalne tähendus siin. Kui ma tahan nii read täita osana jaoks loop, siis pean lisama neid looksulg seda teed. Võite ainult lõigata, et nurgas ja jätta looksulg kui Mis puhul? Sihtrühm: Lihtsalt üks rida. David J. Malan: Lihtsalt üks rida. Nii et see on lihtsalt mingi kena omamoodi süntaks üksikasjalikult, nii et sa ei raiska aega kirjalikult kolm rida, millest kaks on looksulg, lihtsalt kirjutada koodirida. Aga kui sul on kaks või enam rida, me tõesti vaja seda teha. Nüüd lubage mul päästa see. Lubage mul minna ja uuesti käivitada rõkkama. Siis andke mulle uuesti, a.out, ja nüüd ma saan neid üks rea kohta. Nüüd a.out jälle on selline loll nimi programm. Kuidas ma saan aru rõkkama tegelikult mulle faili nimi see on kasutajasõbralikum, nagu buggy2 ise? Vähe selgemalt? Sihtrühm: [kuuldamatu]. David J. Malan: OK, nii et ma ei saa tegelikult võtta väga kasutajasõbralik otsetee ja lihtsalt kirjutada tegema buggy2. Ma ei täpsustata. C antud juhul ja vajuta Enter. Ja mida teha ei ole see kompileerib buggy2.c minu poolt küsib rõkkama seda teha. Otsesõnu nõuab rõkkama, siis jookseb rõkkama kasutades nii rohkem käsurea argumente või lülitid, kui ma tegelikult vajan. Aja jooksul me tuleme tagasi, mida kõik need erinevad segasena sidekriipsuga väljendeid tähendab. Aga nüüd, et lihtsalt säästa mind vaevast vaja meeles pidada ja võttes tüüpi läbi kõik need erinevate sidekriipsuga väljendeid. Ja tagurpidi see lõppkokkuvõttes on et nüüd on mul buggy2. Kui ma tahan seda teha käsitsi, kuigi ma võib selle asemel tee seda - rõkkama-o buggy2 ja siis buggy2.c. Ja mis sarnaselt mulle fail nimega buggy2. Nii lühike, rõkkama on kompilaator. Tee on lihtsalt kasutajasõbralik vahend, et me kasutame rohkem ja veel, sest see lihtsalt hakkab lihtsustada asjad meie jaoks. Ja me tagastab 0, lõpuks. Praegu lihtsalt sellepärast, kuid hakkame kiusasid et osa täna ja kolmapäeval. Kõik küsimused kõik see? Jah? Sihtrühm: [kuuldamatu] Kas jutumärkides on? David J. Malan: OK. Kui ma tipitud ls hinnapakkumisi, mis oli mulle teeme mõned maagia kulisside taga määrata bug. Ma unustasin, nagu me oleme öelnud paljudel teist kohta Vestlusringide, mida teha - Me teeme seda nüüd - sudo yum-y uuendus appliance50. Oih, et see on kirjutatud. Nii et aparaat on nagu operatsioonisüsteemi. See töötab see operatsioonisüsteemi nimega Fedora. Ja nüüd, sest minu aeglane internetiühendus, ma olen tõesti hosed ta. Nii töötab sudo yum update, kui me ütleme teile, mida teha lahendamist, on sisuliselt nagu jooksmine automaatsed uuendused Mac OS või Windows. Ja põhjus töötab see päris algusest Ülesanded on, sest kui me loodud aparaat, ma messed up, ja ma kogemata tehtud kõik programmid vaadata must must ekraan, mis on, miks sa ei näe neid vaikimisi. Aga viimane versioon seade määrab selle. Ja ma parandan selle ajal pausi kui olen Internet ühendust. Nii tsiteerib lihtsalt peidab minu viga, väga diskreetselt, ilmselt. Muud küsimused? Jah? Sihtrühm: Kus teha tulevad? [Kuuldamatu] David J. Malan: Hea küsimus. Kui ei teha tulevad? See on Linux programm, mis on kestnud juba aastaid, pikk enne CS50. Ja see on kaasas operatsioonisüsteemi nagu Fedora. See ei ole pärit CS50 raamatukogu. Tegelikult ainsad asjad, mis tulevad CS50 raamatukogu seni, et me oleme näinud, on getString, GetInt kõik need Get funktsioone, ja sõna string, ja mingil määral, sõna bool. Aga me tease et peale kui me sukelduda CS50 seade ise. Nii et jah, veel üks küsimus siin. Sihtrühm: Kui te ütlesite teha ja siis lollakas, kuidas arvuti tean [kuuldamatu]? David J. Malan: Hea küsimus. Nii et kui sa lihtsalt kulgema teha buggy1 või teha buggy2, kuidas ei tee tead? Seega vaikimisi kui tipite teha buggy1 teha välimuse eest fail nimega buggy1.c. Ja siis ta täidab korral rõkkama käske, seeläbi ülekaaluka vaikimisi väljund fail nimega a.out. Tegelikult, kui me vaatame, mida teha, mida - olgem sulgege see. Kui me vaatame, mida teha oli tegelikult seda teha buggy2, see on juba kursis. Nii et lubage mul kustutada käsuga rm, Programmi ma kirjutasin enne. Kirjutades Y-E-S kinnitada, et ma tahan seda eemaldada. Kui ma nüüd ei tee, märkate, et selles väga pikas reas, seal on see viimane asi, mida siin-o buggy2. Kõik teeme teeb möödub see argument, kui nii võib öelda, et Rõkkama, nii et ma ei pea seda ise. Olgu, nii kiire paar haldus teadaandeid. Nii lõigud, mis ametlikult algas tuleval Pühapäev, saad alati tahan tuua, kui teil on üks, sülearvuti. Kui sul ei ole laptop, ei jõuaks mind kukutades mind talle. Ja me nuputada töövoo. Mis üldiselt leiad punktis on, et nad osa kontseptuaalne, osa praktilist. Me konkreetselt kasutada osa küsimusi, osa nädala probleem komplekt, et kõndida läbi mõned kontseptuaalne materjali loeng. Ja ongi kõik praeguse lahendamist. Ja me ka sukelduda mõned praktiliste tegevuste, mõnikord millest on vaja esitada, mõnikord mis mitte. Näiteks see esimene nädal, nad on mõeldud just nagu soojenduseks kasutada. Ja sa leiad, et need probleemid on tõesti just seda. Nad on mõeldud suhteliselt väike, kuid mitte tingimata triviaalne programme kirjutada, et ei ole tingimata põnev ja ise aga on head võimalused harjutada süntaks, uusi funktsioone, mugavalt sektsiooni, kus teil on paar oma klassikaaslastega esitada võimalikult samuti oma TF. Ja mida me teeme aja jooksul on kasutada tööriista nimega CS50 Spaces, mille asemel lihtsalt kasutades CS50 Appliance, siis saad asemel minna veebi brauseris, kus sa pead olema võimeline kirjutada koodi brauseri aknas ajal jagu. Ja siis, kui valite, oma õpetusega mehe saab siis näidata mis iganes see on tipite ekraanil oma brauseris akna üleval klassi ees, kas anonüümselt või avalikult, nii et ta saab siis kõndida läbi koos oma klassikaaslastega, mida sa tegid hästi, mida sa ei teinud seda hästi. Ja jälle, kindel see kõik saab kenasti anonüümseks. Aga see saab olema tore võimalus palju interaktiivsust kui midagi loeng võimaldab. Vahepeal me peame neid asju nimetatakse super lõigud, mis on vabatahtlik, kuid on avatud kõigile klassi, nii et seda saab teha rohkem kollektiivselt jaoks probleem seatud. Siin on ajakava. See on ka postitati kodulehel cs50.net. Pange tähele, et seal saad häkker-spetsiifilise 1 homme pärastlõunal. Ja me filmida üks täna ja homme üks ja postitada need Interneti 24 tunni jooksul. Nii et kui te ei saa teha ühtegi neist korda, ärge muretsege. Ja jälle ajakava on online praegu cs50.net. Seoses sektsioneerimispunktid ise, siis oleks saanud e juhendades teil minna muidugi kodulehte leida välja oma osa. Kui elu on muutunud ja sa pead muutma oma osa, ei ole probleem. Mine tagasi sama URL cs50.net/section, ainsuses, ja saate täitke jms kujul, nii et saate siis anna meile oma eelistustele. Ja me jälgida poolt nädala lõpus, et mida suudame mahutada. Eelmisel nädalal meelde tuletada, et me pakkusime kasutades CS50 arutada Muidugi arutelule vahend, loeng. Nii et meil oli 40 küsimust, mis Paluti ning vastas ajal loeng. Nii et see tundus töö hästi, nii et me jätkame üritab seda teha. Kui ajal loeng, siis ei ole lihtsalt mugav tõstmine oma käsi, ei ole probleem. Mine cs50.net/discuss, postita sinna, ja üks meie õpetamise stipendiaatide kas vastata elektrooniliselt või tõsta oma aga teie nimel anonüümselt küsida, sõltuvalt olemuse kohta küsimus. Ja nii tagasisidet, üldiselt psets on tagasi ühe nädala jooksul. Sest see võtab natuke aega, osad, et saavutada tasakaalu, esimene pset, 0 ja 1, on natuke hilineb asjad rahunema. Aga Hoia, et lähinädalatel. Olgu, las ma panna minu tõsine hääl hetkeks. Nii et see on tegelikult huvitav kliima olla seda arutelu, mida kõik muud asjad toimub ülikoolilinnakus sellega seotud kohustusi. Aga CS50 on kindlasti olnud oma ajaloos selle konkreetse teema, nii palju kui igal aastal, seda muidugi paljude aastat, Ad-Lauad ligikaudu 3% klassist. See viimane aasta, 2011, CS50 Ad-minnakse 35 üliõpilast. See ei ole, ma arvan, sest puudub selgus. Aru, et kursuse ainekava, seal on leheküljel avaldus, milles selgitatakse, kus seisab. Sama avalduse korratakse iga ühe probleem seab leheküljel üks. Nii et ma mainin seda täna tõesti lihtsalt teha inimesed arvestavad seda. Ja me oleme proovinud erinevaid asju. Ja mida ma arvasin, et me teeks täna on lihtsalt võtta hetk tegelikult mõningaid varasemate juhtumite et on tulla. Selle asemel, et hoida neid nagu väike räpane saladus, tegelikult meelde, mida õpilased on teinud ja kuidas me oleme avastatud see ja see, mida üldine motivatsioon on isegi seda vestlust. Nii et öelda, joon sisuliselt on see - kohta ainekava, sa oled teretulnud, siis soovitatakse, et rääkida klassikaaslastega. Ongi kogu eesmärk võttes need koostööl kontori tundi Annenberg ja julgustav inimesi lõplik projekt koos töötada. Aga tõmmatakse joon, kui on aeg tegelikult kirjutada oma lõpliku lahenduse. Rääkides inglise, täiesti korras, kõneldes pseudo kood, täiesti okei. Elekter klassivend oma pset, lastes neil vaadata üle ekraani käed jätkake tippimist, üle joone samuti. Ära vaata, et ainekava eelkõige read. Aga lihtsalt, et maalida pilti sellest, kuidas see on kahjuks Tegelikkuses aru, et seal on veebilehed seal, et on lahendusi selle klassi ja paljud muud liigid. Asjaolu, et teil või mõnel 3% teadsid, et see on olemas tähendab, et me teame, et see on olemas. Asjaolu, et seal on veebilehed nagu see, kus sa Tasuda saab keegi tegelikult teha teie probleem seab - see oli konkreetsest juhtumist, mis tulid eelmisel aastal. See on kodulehel nimetatakse odesk.com. Ja Tim oli isiku nimi siin, kes oli postitad sellel veebilehel ning küsis keegi teha oma pset 7 Sellel konkreetsel juhul. Noh, odesk.com on väga Google-võimeline, ja oleme ka väga hea Google'i abil. Ka siin on saite - ja see on pigem jõle, ausalt. [Naer] David J. Malan: Naljakas asi see sait on, kui Lugedes About page, nad räägivad oma ettevõtte kultuur ja kuidas klienditeenindus on nende number üks prioriteet, veendumaks, et oma ülesandeid saada välja õigel ajal. Aga täie tõsidusega, jälle see, et nende alade olemas, mõistame me, liiga, on teadlik Sellised alad. Ja teile tunde, mis moodustab see üldiselt võtab, me üldiselt ei ole suur skandaalide, kus inimesed teevad koostööd mis tahes liiki massiliselt, vaid pigem see on nende hilisõhtul hetki nõrkus, kus teil on nii palju teha, see on 04:00, sa oled kurnatud, ja te arvan, et ise, noh, las ma lihtsalt heita pilk minu toakaaslane on või mu sõbra kood vms. Ja ilminguid see kahjuks kaasata Student Esitades midagi sellist ja õppuritele B esitamisest midagi sellist, mis kindlasti, et arvuti teaduse klassi, on tähelepanuväärselt lihtne arvutiteadlaste tuvastada tarkvara. See on veel üks ühine paradigma, kus sa oled omamoodi töötanud kõrval keegi, äkki rääkima Inglise, just fine, pseudokoodi. Aga siis on aeg tegelikult esitada, ja psets lihtsalt saada vahetatud e-posti teel või Dropbox jms. Aga püüdes teha seda vähem ilmne, et see on mis juhtus, siis need ongi esitatud. Ka see ei kömmähdys hästi kirjutatud tükki tarkvara nagu meil tegelikult avastada selliseid asju. Ja tõepoolest see, mida me teeme, on käivitada tarkvara, mis võrdleb kõiki Tänavuse esitatu kõik möödunud aastal esildised, vastu kõike, mida me leida Internet, vastu iga töö kodulehel seal. See kõik on väga automatiseeritud. Ja nii me seda tõesti väga õigluse 97%, kes tõesti töötavad nende eeslid maha see ja teistes klasside ja kasutusele kõik selle pingutuse nii et töö nad lõpuks esitama on nende oma. Ja ma ei saa minna aegade. Need on vaid käputäis eelmisel aastal juhtudel. Mõned õpilased esitasid neid faile ühesuguselt pset 2 pset 3 pset 4 pset 5 pset 6, pset 9. Sellisel juhul oli see viktoriin 0 ja eelmisel aastal, kus kaks õpilased esitasid identselt see lause paljude teised, "taotluse liik -" dot, dot, dot. Nii et isegi klassi 600 tegime avastada selle kohta esitatud viktoriine. Nii lühike, see - ausalt öeldes, ma vihkan võttes selline vestlus - kuid see on tõesti läbimõeldud jõupingutusi Sel aastal püüda alandada, et number. Sest kuigi me ütleme selliseid asju iga aastal, ma arvan, et reaalsus olles rääkis, seda paar sekundit veel kui tavaliselt ja tegelikult lihtsalt juhtides tähelepanu et see, mida võib tunduda, eh, ei nii suur asi, vähemalt arvan, et tagasi seda eriti praegu, nii õigluse ennast ja oma klassikaaslastega siin. Nii et kui teil kunagi on küsimusi selle kohta, kus liin on, siis lihtsalt jõuda mind isiklikult. Aga vastus on alati, täiesti rõhutas viimasel minutil, sularaha hilja päev. Või kui see on küsimus, kellel ei ole hilja päeva, ausalt, kirjuta mulle isiklikult. Me mőtlen midagi välja. Palun ärge pange oma aega siin Harvardi ohus. Nüüd ma arvasin, et me peaks Tuju nii et ma lisatud seda järgmisele slaidile. [Naer] David J. Malan: See veebileht oli suurepärane. Ma tegelikult sain natuke segane. Seal on see üks. Ja siis see üks oli hämmastav. Okei, nii et mõtle, et kassipoeg hilisõhtuni tegemisel need otsused. Olgu, tagasi lõbusam ja kergem kraam, nagu tingimustel. Olgu, me rääkisime põgusalt neid. See on midagi, mis on ilmselt üsna tuttav maailma Scratch. Ja maailma Scratch, meil on see vajadus mõnikord minna teha kahvlid maantee. Kas teha seda või teist või see teine ​​asi siin. Ja kui me tahame teha seda, mida saame kasutada, C nüüd, see kui veel ehitada. Ja siis on meil siin Boole'i ​​avaldised. Näiteks Boole'i ​​avaldiste siin, saame või need kokku, selles mõttes, et meil on see tingimus või see tingimus. Me saame ja need kokku, selles mõttes, et me tahame kontrollida selle tingimuse Ja see tingimus. Ja siin on meil lüliti avaldus nüüd, mis ei ole nii sarnane süntaktiliselt neid erinevaid tingimusi, kuid see võimaldab meil teha samaväärne kui else if, else if, else kui, ja nagu lihtsalt loetleda neid juhtumipõhiselt poolt juhtumipõhiselt. Nii nägime neid viimast korda. Ja siis hakkasime puudutades asju nagu silmad. Me nägime ühte neist hetk tagasi. Kuid on ka neid teisi silmuspõletamise konstrueerib. Näiteks see siin. Niisiis, kui (tingimus), seda asja uuesti ja uuesti. Nii et põhimõtteliselt, mis tundub olevat erinev see jaoks silmus ja selle ajal ahela siin? See loop ja see samas silmus. Jah? Mis see on? Sihtrühm: [kuuldamatu]. David J. Malan: Hea. Nii et arvestades jaoks silmus seisukorras, seal on selgelt rohkem süntaks. Seal on see käivitamise, seal on see uuendus. Aastal samal ajal loop, seal on lihtsalt see tingimus. Seega tundub, et see on natuke reldes kehtestatakse versus jaoks ahel, mis tähendab, et kui me tahame muutujate ja me tahame on juurdekasvu, me tegelikult on seda asja endale. Nii et lubage mul minna ja avada gedit. Lubage mul minna üle seadme. Ja olgem lihtsalt teha kiire väike näide, et eristab neist teistest. Ja tagasi minu arvates siin, ma peaks ütlema ühte asja. Ma konkreetselt nimetatud nime Tim. Tim oli tegelikult keegi, et õpilane püüdnud leida seda teha oma kodutöö jaoks. Meil ei olnud Tim selles konkreetses punktis. Nii mõistma, et ma ei avaldata õpilane, ei olnud õpilane. See oli juhuslik isik Internetis asju volikirja alusel eelmisel aastal. Nii leiame, et liiga. Nii et antud juhul siin, lubage mul minna ja avada uus fail. Fail Uus. See annab mulle kaardi. Lubage mul minna ja salvestage see loop.c. Lase mind lahti ja klõpsake nuppu Salvesta. Ja siis siin, lähme edasi ja hakake # Include . Lubage mul suumimiseks Nüüd teen int main (void). Nüüd lubage mul minna ja teha jaoks (int i = 0; i < oh, 10; i + +). Ja nüüd ma lähen edasi minna ja ei prindi täht, et ma tegin varem. Ja siis lõpus selle programmi, me lihtsalt läheb printida uus liin, just nii, et minu kiire ei tundu kõik räpane. return 0. Tundub süntaktiliselt õige? Siiani. Nii et vaatame. Nii et lubage mul suumimiseks lähevad minu terminaliakent. Ja lubage mul minna ja joosta silmus, sest ma helistasin selle asi loop.c. Nii et silmuse. Tundub, et koostada OK. Ma jooksen silmus ja nüüd Enter. Ja tundub, et on trükitud 10 tähte. Nii et olgem lihtsalt teisendada see samas loop ja vaata, mida laadi küsimused me komistada. Nii et selle asemel see, lase mul minna siia ja ütle, kui ma ei vähem kui 10 - lubage mul vabaneda jaoks silmus. OK, nii et meil on paar probleemi juba. Nii tingimus on sama, aga ma ilmselt puudub ettekanne. Ma olen kadunud juurdekasvu. Mida peaks kompilaator tõenäoliselt ütle mulle, kui ma üritan koostada selle programmiga? Jah? Sihtrühm: [kuuldamatu]. David J. Malan: Hea. Nii see läheb öelda midagi deklareerimata - selles juhul muutuja i. Ja tõepoolest, kasutage deklareerimata tunnus i. Ja nii see on erinevalt keeltes nagu PHP ja Python ja Ruby, kellega mõned võite olla tuttav, kus saab lihtsalt selline algust kasutades muutujaid tahes-tahtmata ja ei pea muretsema neist teatamata selgesõnaliselt alati. C ja keeltes nagu Java ja C + +, peate olema super selge. Ja kui sa tahad muutuja nimega i, sa pead mulle ütlema millist muutuja on. Nii et me lähed on määrata see järgmiselt. Ma lähen minema siit-tüüpi int i, mistõttu Olen deklareeritud muutuja nimega i. Nüüd olen vahele jäänud üks samm. Olen ilmselt ei ole vormindatud, kuid vaatame, kas see on vähemalt marke rõkkama peatus kaevates. Nii et lubage mul uusversioon seda programmi. Hea küll, nüüd on see lihtsalt kaevates teisel põhjusel. "Muutuja" i "on uninitialized kui kasutada siin." Olgu, nii see on päris selge. Käivitub tähendab lihtsalt, millega see võrdne väärtus. Ja me oleme seda teinud, seega lubage mul proovida võrdub 0. Nüüd proovime seda uuesti ja uuesti käivitada rõkkama. Koostanud seekord. Ja ma olen umbes käivitada. Aga suur vana lõputu silmuse, sest ma olen teinud käivitamise, ma olen teinud seisukorras, kuid ma pole kunagi teinud mingit juurdekasvu. Niisiis, kuidas ma saan teha juurdekasvu? Noh, samas silmus, tundub, nagu ma lähen on seda teha sees silmus, sest palju nagu varem nädala näiteid teed kurvilised konstruktsioonidest, jms sokid ja ise loendada, pidime tegema midagi päris lõpus, meeldib minna tagasi järgmise rea. Aga kui ma edasi minna ja seda teha i + + siin? Ärme isegi kompileerida seda. Püüa mind juba. Mis viga siin? Sihtrühm: [kuuldamatu]. David J. Malan: Nii see kindlasti ei ole int. See on i. Ja looksulg, nagu enne, taandus ei piisa. Nii et nüüd ma olen seda ehitada. Nii et kui ma alla 10, printida täht, siis juurdekasvu i. Ja nii samas loop töötab, et niipea, kui olete tabanud põhja silmus, mis antud juhul paistab rida 10, see saab minna tagasi rida 6, misjärel tingimus kontrollitakse uuesti. Ja kui ma veel vähem kui 10, siis me teeme read 8 ja siis 9, siis me hit 10, ja minna tagasi 6, uuesti ja uuesti ja uuesti ja uuesti, nii kaua kui ma alla 10. Nii et olgem uuesti käivitada teha siin. Okei, oleme koostanud okei. Las ma uue ringi silmus. Ja nüüd ta tegelikult tundub töötavat. Nii plussid ja miinused siin? Noh, siiani seal tegelikult ei kogu PVO - nii armas. Olgu, see oli - ah, see oli õnnetus. Olgu, lähme tagasi loop. Nii silmuseid on tore, sest nad on super selge. Ja kuigi nad natuke kohmakad kirjutada, et see on väga võimas ja see võimaldab teil teha mitu asja korraga. Kuigi silmad ei tundu olevat väga palju raha lihtsalt veel, sest see tundub me lihtsalt peame tegema rohkem tööd. Meil on panna initsialiseerimise siin, uuendada siia alla, ja me peame meeles pidama, et kõike seda teha. Nii et me näeme kord, kui silmuseid tegelikult laenata end lihtsalt erinevates kontekstides, erinevate andmete struktuure nagu nimekirjad ja hash tabeleid, asjad jõuame keskel semester. Aga nüüd teame, et seal on see kolmas tüüp tuntud tee- samas silmus. Ja me oleme näinud seda lühidalt. Ja see võib olla super abivalmis pset 1. Iga kord, kui tahad midagi teha ja siis vaadata, kas kasutaja tegid, ja kui nad seda ei teinud, seda uuesti teha, do- samas silmus on sobiv selline loogika. Sest nagu tellimise ülalt siin ütleb, ei sõnalt tähendab seda tegema. Ja seda ikka ja jälle, milline võiks olla? Ehk see tähendab, kutsudes GetInt või getString ja seejärel kontrollimise väärtus GetInt või getString ja siis karjuma kell kasutajat, kui nad ei ole teinud koostööd, nõudes neilt uuesti ja uuesti ja uuesti. Kui sa tahad midagi teha üks kord, siis vaadata mõned seisukorras. Nii et proovime seda. Lubage mul tegelikult seda muuta nüüd do-kui ahela. Ja ma lähen edasi minna ja teha järgmist. Nii et tehke järgmist. Teeme int i = GetInt (), kuid olgem kõigepealt öelda kasutaja mida teha. Nii et natuke erinev seekord. "Anna mulle int". Nii et ma kasutan printf selle eest. Ja nüüd ma lähen siia alla, ja ma teen seda kuigi ma ei oletame, et on suurem kui - Vaatame, i, oletame, väiksem kui 0, või ma ei suurem kui 10. Teisisõnu, ma tahan number vahemikus 1 kuni 9, ainult omavoliliselt. Nii et ma kasutan kombineeritud Boole'i ​​avaldis siin veenduge, et mul on väiksem kui 0 või suurem kui 10, milles juhul teen seda silmus siin jälle. Nii et taas, seda teha - kuigi ma on väiksem kui 0 või I on suurem kui 10. Nüüd lähme edasi ja tee seda kohe, kui oleme seda teinud. Teeme lihtsalt teha kiire meelerahu kontrolli. printf ("Aitäh, i% d", i). Nii et see lihtne programm küsib kasutajalt int, tagab see jooksul mõned vahemikus 1 kuni 9 kaasav, ja siis tänu kasutaja, meenutades neile, mida nad lihtsalt tipitud, just nagu natuke meelerahu kontrolli. Aga vaatame, kas see toimib nagu ette nähtud. Lubage mul minna pea alla ja uuesti käivitada teha silmus. Hmm. "Kasuta deklareerimata tunnus" i "". See on imelik. Ma arvasin, et me lahendada seda. Sama sümptom, kuid erineva koodiga. Jah? Sihtrühm: [kuuldamatu] sees kaks, peame [Kuuldamatu]. David J. Malan: Täpselt. Nii see tegelikult viib meid teemat tuntakse ulatus. Selgub, et C, uuesti, see tõesti võtab siis sõna otseses mõttes. Ja kui sa midagi sellist, kus sa deklareerima int ja siis määrata see mingi väärtus, kuid sa seda sees paari looksulg, mida C teeb, on see eeldab, et sa tahan ainult need 32 bitti tuntakse i olemasolu jooksul kontekstis need looksulg kontekstis ridade 6 kuni 9. Nii et ma ei ole deklareeritud, ja see on määratud väärtus vastavalt 8, kuid niipea, kui sa väljas rida 9 allpool lokkis traksidega, ma ei ole enam reguleerimisala, nii rääkida. S-C-O-P-E. See ei ole enam õiges kontekstis. Nii et nüüd ei ole ma, nii et see on nagu me ei olnud isegi deklareeritud seda üldse. Mis siis fix siis midagi sellist, kui Põhjuseks on, et i on kuulutatud jooksul looksulg, mis on ilmselt halb? Siin? Sihtrühm: [kuuldamatu]. David J. Malan: Jah. Nii saame initsialiseerida ta väljaspool. Nii et lubage mul minna ja kustutada deklaratsiooni osad, mille Ma täpsustada, millist tüüpi ja las ma teen seda siin üleval. Nii et rida 5, siis nüüd ütleb: "Anna mulle int." Kõne see i. Teate reale 9, ma ei taha seda teha, sest ma juba 32 bitti. Ma ei taha küsida arvuti erinev 32 bitti. Ma tahan kasutada neid samu 32 bitti. Ja nüüd, sest mul on välja kuulutatud rida 5, see on ikka legit seda kasutada vastavalt 11 ja rida 12. Nii et lubage mul proovida kompileeri see ja vaata kui rõkkama peatub karjuma. teha silmus. Nii et nüüd on "kaudne deklaratsiooni funktsioon "GetInt" on kehtetu C99. "Mis see on? Jah? Sihtrühm: [kuuldamatu]. David J. Malan: Jah. Nüüd, et ma olen tegelikult kasutades GetInt, see ei ole midagi et lihtsalt kaasas C. See pärineb CS50. Nii et me vajame seda siin. Ja lubage mul tagasi minna kiiresti alla siin ja uuesti käivitada teha. Okei, lõpuks. Nüüd oleme otsustanud, et ja muud viga. Lubage mul nüüd jooksma silmuse ja näha, mis juhtub. "Anna mulle int." Ma annan selle 11. Ma annan selle -1. Ma annan selle suva. Ma annan talle 5. Ja nüüd see tõepoolest toimib. Aga kiiret muutunud põhjus siin. Miks ta öelda uuesti üks neist korda, kuid anna mulle int teised kolm korda? Miks see käitumine erinev? Sihtrühm: andsin selle stringi. David J. Malan: Vabandust? Sihtrühm: Sa andsid selle stringi. David J. Malan: Jah. Nii et me andsime ta stringi see kolmas katse, kui ma kirjutada suva. Foo on string. See on ilmselt mitte int. Ja nii, et CS50 on rakendanud GetInt on see, et me ei vaadata, kas midagi on väiksem kui 0 või suurem kui 10 Teile, sest kuidas me teame ette, millist int sa tahad? Aga me saame minimaalselt kontrollida sind, kasutaja vähemalt kirjuta täisarv? Ja kui nad seda ei teinud, me kisa kasutaja kirjutades "retry" kohta ekraan. Nii et nüüd on meil programm, mis on silmuspõletamise. Okei. Nüüd, kus neist on omamoodi parem ehitada? Nii et see on koht, kus asjad hakkavad natuke räpane, Asjaolu, et teil on meeles pidada kuulutada muutuja siia kui te soovite seda kasutada sees mõned looksulg ja väljaspool. Aga isegi kui see tundub veidi segasena esimesel lühidalt, lihtsalt uuesti, mäletad lihtne loogika. Selleks, et kasutada midagi C, kas see on funktsioon või see muutuja, peate lisama juhul, kui see on funktsioon mõnes raamatukogus, või peate kuulutada see. Aga nüüd sa pead olema ekstra tähelepanelik, et sa tunnistades selle õiges ulatuses. Sa ei lase seda liiga tihedalt sees sulgudes. Nii et lubage mul tegelikult tagasi pöörata. Kui me läheme tagasi näiteks varasemate, ja ma lähen tagasi võtta int, int i = 0; i <10; i + +, ja ma teha printf staaridega, nagu see ja seejärel lähedal paren, ja nüüd printf i on nüüd - vastavalt sama loogika, mis juhtub, kui ma püüan koostada selle programmiga? Sihtrühm: Vigane tunnus. David J. Malan: Nii see on teine ​​vigane tunnus, deklareerimata tunnus. Nüüd põhjus on natuke teistmoodi. Seal ilmselt ei looksulg siin, kuid samas idee, sama lugu ulatus kehtib. Kui teil on deklareerinud muutuja nagu ma sees jaoks silmus, isegi kui sa ei ole selgesõnaliselt kirjutatud lokkis traksid, mõtle neile vaimselt kui ikka on seal, kus juhul i kehtib ainult seestpoolt jaoks silmus. See ei kehti, kui sa saad järgmisele reale, mis Sel juhul on nüüd 10. Nii lihtsalt mõned küsimused ulatuse jms. Olgu, mingeid küsimusi? Olgu, see on selline triviaalne väike programm, trüki lihtsalt vähe tähti. Aga vaatame, kas sa mäletad seda laulu siin. See on uskumatult tüütu laul lapsed oleks laulda koolibuss jms. Aga mis on tore see on, et see on tema tsüklilisuse kusjuures see "99 pudelit õlut seinal, 99 pudelit õlut. Võtke üks maha, andke seda ümber, 98 pudelit õlut seina. "Ja siis laulu kordab 97, siis 96, siis 95, siis 94, kõik tee alla 0, kui te tegelikult sain selle kaugele bussi. Nii et see on kena programm sorteerida ning rakendada, sest minu Jumal, kui sa võiksid lihtsalt rakendada seda vähe rida koodi, siis võiks sülitama kogu lyrics sellele Laulu üsna kiiresti. Aga mööda teed, saame hakata nüüd tease peale mõned Nende põhiline silmuspõletamise konstrueerib ja nüüd ka tutvustada funktsioone, mis me kirjutame ise tagasi väärtused et võtame ringi. Aga kõigepealt, miks me ei võiks minna edasi ja võtta meie viieminutiline murda siin? Ja kui me tagasi tuleme, siis me laulame seda laulu. Olgu, nii et me oleme tagasi. Ja kui ma ütlen me nüüd laulda seda laulu, ma mõtlen programmiliselt, mitte suuliselt. Nii et siin on meil beer1.c, mis on üks rakendamise eriti laulu. Ja et asi selge oleks, neile võõras mida see asi välja näeb, andke minna ja teha beer1, Enter. Nüüd lubage mul joosta beer1, ja mida me näeme - kui palju pudeleid õlle on veel? Ma kirjuta 99, nagu laul ütleb. Enter. Ja nüüd, kui me kerida - Vabandust - kui me kerida kõik see, näeme, et see oli tõesti laulda kogu laulu. Oota üks hetk. Minu kerimisriba on natuke sassis. Olgem kasutada suuremas aknas. Nii beer1, 99, seal läheme. Nii et siin on meil kogu laulu lauldakse palju kiiremini arvuti kui seda oleks võinud meie poolt. Nii märkate, aga tsüklilisusest siin. Ta ütleb 99, siis 99, siis "võta üks alla, andke seda ümber ", siis 98. Ja nüüd see kordub ikka ja jälle. Nii et see on tegelikult suurepärane võimalus mingi silmuspõletamise ehitada. Pange tähele, et ma olen selline lõikamine nurgas siin. Pange tähele, et ma räägin "98 pudelit õlut seinal, 97 pudelit õlut seinal, "ja see oli lihtsalt nii et kui me ühe pudelit õlut, ma ei pea muretsema inglise keele grammatika. Aga me saame ka määrata seda natuke, kui tingimus, võib-olla. Kui see number on ainsuses, edasi minna ja öelda "pudel", muidu kui see on mitmuses, öelge "pudelid". Aga nüüd, ma olen täiesti lõikamine et nurgas. Nii et vaatame, mis meil siin. Nii et meil on mõned märkused ülaosas. Ma olen ka nende kahe raamatukogud, nagu me oleme tavaliselt olnud. Ja nüüd las ma kerin alla esimesele tegelik rida koodi. Rida 17 avalöögi peamine. Rida 21 ja 20 on mitu pudelit õlut on veel? Ja siis ma kutsun GetInt. Ja nüüd on mul natuke meelerahu kontrolli. Nii et see on konventsioon, mis me nüüd hakata vastu kuni rangemalt kontrollida kasutaja sisend. Mõnikord sa lihtsalt ei taha kallutada neid uuesti ja uuesti ja uuesti. Kui kasutaja kruvid üles ja ei tee koostööd trahvi. Lõpeta ja lihtsalt ei tegele nendega. Ja nii see on, mida ma siin teen. Kui n on väiksem kui 1, ma lihtsalt läheb peale karjuma kasutaja, "Vabandust, et ei ole mõtet." Ja siis ma lähen omavoliliselt return 1. Nii et jällegi, see on lihtsalt konventsiooni harjuda. Praegu võtavad seda usku. Aga siiani oleme alati tagasi 0, sest me oleme öelnud tagasi 0 tähistab mis? Sihtrühm: Success. David J. Malan: Edu, see on kõik. Nüüd, et me lõpuks hakanud mõtlema mitte-edu - teisisõnu, nurgas juhtudel viga tingimused - nüüd on mul lõputu pakkumise, või vähemalt 4000000000 võimalik asju, mida saab valesti minna oma programmides. Ja ma ei saa alustada määrates neile individuaalset numbrid. Nüüd, tavaliselt piisab lihtsalt tagasi midagi muud kui 0. Nii et me lähme lihtsalt tagasi 1 nüüd. Aga naasmise põhjus 1 on, et niipea kui naasete 1, arva mis juhtub ülejäänud programmi? See peatub. Nii see on. Nii et ma teen sulle tagasi 1 on tõhusalt lühistaksid seda programmi täitmist, nii et midagi allpool rida 27 jätkab täidesaatva. Niipea kui peamine tulu, mis see on. Olgu, nii et kui kasutaja teeb koostööd ja jõuame reas 30 sest nad ei tippinud õigustatud number, siin on minu rakendamiseks seda laulu. Nii et ma esimest korda välja printida reavahetus sümbol, lihtsalt esteetika. Mul on nüüd jaoks silmus. Ja märka ma teen asju natuke ja teises suunas. Ma ei pea seda alla, ma ei pea tegema + +. Võin vaid öelda initsialiseerida muutuja i, määrake see võrdub arvu n kasutaja sisestatud, siis tehke järgmist, nii Niikaua kui ma on suurem kui 0, siis I - Kui olete lõpetanud ühe iteratsiooni see silmus. Nii saame loendama kasutades loop samuti. Nüüd on see päris palju nädal 1 kraam nüüd, printf. Nii print "% d pudelit õlut seinal." Print "% d pudelit õlut. "" Võtke üks maha, läheb see ümber. "Prindi "% D pudelit õlut seinal." Nii et see on ikka% d, kuid märgata, et argument printf muutub. Pärast koma, pean ma, sest ma tahan öelda 99. Pärast seda koma, pean ma, sest ma tahan öelda 99. Pärast seda koma, mul on i - 1, sest ma tahan öelda 98 Selle esimese iteratsiooni, ja nii edasi. Ja nüüd siin all, ma lihtsalt pean mõned loll väike märkus. Ja siis joon 42, I return 0 kokkuleppeliselt, mis tähendab, et kõik on korras. Mis siis, kui ma goofed? Mis võiks üldine viga siin olema? Noh, mis siis, kui ma kogemata ütles hästi, ma tahan loota alla 0, ma tahan 0 pudelit õlut seinal? Nii et ma ütlen, ma on suurem või võrdne 0-ga. Mis saab olema sümptom, et ma nüüd vaatan, kas ma kompileeri beer1 ja kasutada seda? Sihtrühm: Negatiivne. David J. Malan: Jah, see on lähen negatiivne. See on off-by-one viga, uskumatult Levinud viga teha. Olgem tegelikult minna tagasi terminali aken ja tee seda siin, et saaksime näha rohkem korraga. Sisesta, 99 pudelit õlut. Sulge, kuid me läksime kunagi nii veidi liiga kaugele. Me laulsime laulu liiga kaugele ette, nii et me nüüd tabanud negatiivne arv. Nii et see ei ole päris tööd. Olgu, saame kergesti kindlaks, et minnes tagasi viis ta kunagi oli. Aga millised on mõned võimalused nüüd parandamist? Noh, las ma avada beer2.c ja keri siit ja võtta vaata seda versiooni. Mis on esimene asi, mis hüppab välja ennast nii erinevad selles versioonis siin? Sihtrühm: [kuuldamatu]. David J. Malan: Jah, seda enam ma, sest see tekkis sa tead, mida ma olen palunud kasutaja jaoks n, ja siis ma millega ma võrdne n, ja siis ma muudan i, aga ma ei ole kunagi liigutav n uuesti. Nii et mida kuradit mõte oli teile eraldamise teise 32 bitti kutsus ma lihtsalt nii, et ma võib olla erinev muutuja? Nii et sel juhul ma justkui tunnistanud, et tarbetu kujunduslik. Ja ma nüüd ütlen, kui n on suurem kui 0, siis mine käia ja printida sama laulu, mis kulgeb n printf nagu Teine argument ja n - 1, teine ​​argument siin. Ja siis iga iteratsiooni Selle ahela minna ja lihtsalt aland n ise. Nüüd, funktsionaalselt, see programm saab olema identsed. Kui ma sisestada 99, n algab kell 99. Ma aland, aland, aland, aland. Ma lähen, et saada kõik tee alla "Üks pudel õlut seina, üks pudel õlut. Võtke üks maha, läheb see ümber. 0 pudelit õlut seinal. "Lõppu, sest ma tegin saada tingimus õige. See on suurem kui 0. Ma ei tee seda viga. Nii et mis on parem, versiooni ühe või versioon kaks? Nii ma kuulsin kamp murmurings kaks. Miks kaks? Mis see on? Sihtrühm: [kuuldamatu]. David J. Malan: Oh, okei. Nii see ei lähe alla 0, kuid pea meeles, versioonis üks, originaal õige versioon ei lähe alla 0 kas. Seega pidage meeles, et see on õige versioon. Nii et olgem vähemalt võrrelda kahte õige versioon. Mis argument versioon kaks on, mmm, parem? Jah? Sihtrühm: Ta kasutab vähem ruumi. David J. Malan: Okei, nii et see kasutab vähem ruumi, eks? Arvestades versioon, mida kasutatakse 32 bitti jaoks n, ja siis teine 32 bitti i. Versioon 2 kasutab vaid 32 bitti jaoks n, nii et tundub olevat pluss. Muud mõtted? Kas keegi taha pooldavad üks? Jah? Sihtrühm: Teil on kasutada pildi koodirida n -. David J. Malan: Okei, muidugi. Nii et see õiglane. Nii see lihtsalt, vähemalt mulle - Ma mõtlen, see tundub tegelikult veidi Messier, et Ma ei saa omamoodi kapseldada kõiki minu loogika ühes ilus rida, loop, kui loop saab. Siin ma selline pean tack see n - aasta lõpus loop, sest see on loogiliselt vajalik. Aga see selline röövib mind valesti, lihtsalt sellepärast, et see Tundub eraldi loogikat siin, kuigi jälle, see on vajalik. Muud mõtted? Jah? Sihtrühm: [kuuldamatu]. David J. Malan: Jah. Mis siis, kui sa selle asemel, lõpus laulu, tahtsin välja printida jälle laulu nimi? Nagu "Täname mängides 99 pudelit õlut", või midagi tobe niimoodi? Aga point on selles, et sa tahtsid juurdepääsu esialgsest väärtusest. Asjaolu, et olete muteerunud või muutunud n iga iteratsiooni ja seega on hävitanud oma esialgsest väärtusest tähendab sa lihtsalt ei saa seda teha aasta lõpus. Nüüd väidetavalt me ​​kindlasti ei taha seda teha et selles programmis. Nii et keda see huvitab? Aga see on väga kehtiv punkti. Ja kui aus olla, seal on tõesti keegi õige vastus siin. Nad on mõlemad võrdselt õiged. Ma võiksin olla veendunud ükskõik kummale poole. Ma ütlen, et üldiselt, et see on hea põhimõte, kui te küsis kasutaja jaoks mingi väärtus ja mida säilitatakse muutuja nagu n, lihtsalt omamoodi põhimõtteliselt, see on ilmselt hea hoida, et ümber. Ja mis tahes andmetest, mida soovite muteeruda ja jälle, lihtsalt anda endale koopia, et muutuja, just nii, et te juurdepääs originaal. Sa kulutavad 32 rohkem bitte, kuid reaalsus on see arvuti on, nagu, kaks gigabaiti mälu nendel päevadel, ja me laveerimine üle 32 bitti? Tõesti ei ole nii suur asi. Ja isegi selle seadmega siin, millel on pool kaarik või GB RAM, 32 bitti versus 64 bitti, ei nii suur asi. Kindlasti täna, see saab olema nii rabatud suurus programm ise, mis saab olema mitusada kilobaiti, kui mitte paar megabaiti, nendel päevadel. Nii et mõistlik mured, keegi õiget vastust. Aga vähemalt need on mõtted, mis peaks hakkama minna läbi oma meelt? Sest pset 0, kuigi me tõesti ainult oodata õigsust, või vähemalt loobuvad erinevate vead, mis Te olete kokku puutunud, kui me liigume edasi, disain on saab olema veel üks oluline aspekt, nii kirjalikult kood ja ka meie hinnates kood. Ja nii vähemalt kaaluda asjad niimoodi. Ja just sellepärast, et midagi töötab, ei tähenda, et see on hea, See ei tähenda, et see on hästi läbi mõeldud. Ja see on üks asjadest, õpetamise stipendiaatide ja probleem komplekti aitavad meil tease osa ajas. Noh, aga oletame, et see versioon siin? Las ma teen midagi natuke seksikas siin hetkel. Esiteks lubage mul vabaneda sellest. Ja nüüd määrata see grammatiline küsimus. Nii et selles versioonis, ma parandan grammatika nii, et mitte lihtsalt öelda Sulgudes s, nagu "pudel" või "pudelid" - Ma ei taha lõigata, et nurgas - Tahan ka dünaamiliselt välja trükkida sõna "pudelid" või "pudel", kasutades seejuures neid% s kohatäited täna. Nii et mul on vaja tinglikult vaadata, mida on väärtus i. Ja kui see on 1, tahan öelda "pudel", ja kui see on midagi muidu, ma tahan öelda "pudelid". Nii et proovime seda teha. Nii et kui ma == 1, siis lubage mul minna ja kuulutada - Mul on vaja stringi, seega lubage mul teha string s1, sest see on Esimene string ma hoolin kohe. Ma ütlen "pudel". Ja siis, vaatame, string S2 - ja ma seletan, kus ma lähen hetke pärast - "Pudeleid." Nii tuletavad meelde, et see laul, peame suutma printida asju, kaks erinevat sõna potentsiaalselt. Nii et kui me vaatame tagasi siin, märkate, et kui me saame Selles näites siin, "kaks pudelit õlut seinal, kaks pudelit õlut, võtke üks maha, andke seda ümber ", ma tahan see neljas rida nüüd öelda "ühe pudeli õlut seina ". Seega on mul vaja otsustada, kas ma tahan öelda" pudelid "või "Pudel"? Nii et ma lähen suvaliselt öelda, eks, Ma lähen nüüd kuulutada muutuja nimega s1, string üks, et läheb aina ühendatud siin ja ka siin, sest need sõnad on alati ühesugused, vaid seetõttu, milline on laul. Ja ma lähen helistada s2 iganes sõna ma tahan lõpuks ilmuvad siin. Nüüd, sõna otseses mõttes, 99 korda 100st, et see saab olema sama mõlemas juhtudel, sest 3 on mitmuses, 2 on mitmuses, 4 on mitmuses. Aga selles nurgas juhul, kui saame 2 ja siis 1 või isegi 1 ja siis 0, ma vajan seda loogikat. Nii et ma pean veidi aega minu koodi saada, et õigus. Nii et kui ma seda teen, kui ma == 1, siis pane s1 võrdne "pudel" ja s2 võrdne "pudelid", sest see on 1 pudel, ja see on kui 0 pudeleid. Ja see siin, mida see koosneb? Lihtsalt peab olema selge. See on lihtsalt kommentaari. Nii et sul võib olla üherealise kommentaari tähendab, et sa Kommenteerida saavad oma koodi näeb välja selline, kuid üks ühine paradigma, liiga, on see, et kui sul on super lühike lause, mis soovite ennast ja see on lihtsalt loetavamaks panna see õigus lõpus rida koodi, saate absoluutselt midagi sellist teha. Nüüd aga kui ma seda teen? Else if i ei ole võrdne 1. Nii paugu võrdub - hüüumärk on tuntud kui "pauk". Nii paugu = 1. Nii et kui ma ei ole võrdne 1, mida ma selle asemel teha tahad? Noh, esimene sõna ma tahan olla mis? Nii et string 1 peaks olema "pudelid" jaoks mitmuses pudelid, ja siis see mitmuses "pudelid" samuti, nüüd. Ja me näeme, kui see tegelikult muutub meile kuhu me tahame minna. Nii et nüüd, kui ma keri siin, märkate, et ma kõrvaldamine mitte ainult mina, vaid s1. Ma ühendades i ja s1. Ja siis siin, ma olen miinus 1, mis on sama enne, kuid s2. Teisisõnu, ma tahan ingliskeelset sõna vahetada põhineb Selle loogika. Nüüd, seal on juba mõned probleemid selle koodi. Mis on katki juba väravast läbi siin? Jah? Sihtrühm: [kuuldamatu]. David J. Malan: Täpselt. Nii et ma olen juba rikkunud õppetund ulatus. Nii et ma olen deklareeritud S1 ja S2, kuid ma olen seda teinud sees looksulg, mis tähendab, jah, see kood töötab kuni kuni liin 42, kuid niipea kui ma tabanud rida 43, guess what ei enam ei eksisteeri? Noh, arvan, mida pole enam ulatusega - ei s1 või s2. Nii et me peame seda parandada. Nii et lubage mul kustutada deklaratsioonid. Ja ma jätan muutuja nimed ja kustutada selle siit ja kustuta see siin. Ja Kuidas peaks ma tõesti tunnistada neid asju? Sihtrühm: [kuuldamatu]. David J. Malan: Jah, nii ilmselt õige siin, 33-ish. Nii et string s1 ja siis stringi s2. Ja selgub, ma suudan seda. Kui sa kuulutab kahe muutuja sama tüüpi, tegelikult võite lihtsalt kasutada koma ja teha, et C. Kõik õige, nii et nüüd on mul kaks muutujat - S1 ja S2. Ma määrates neile väärtustele need tingimused siin, või siin. Ja siis ma kasutan neid allapoole. Kui hästi on see nüüd läheb tööle? Noh, see on ikka natuke lollakas, kuid olgem vähemalt näha kui kaugele me oleme saanud. Nii et lubage mul minna ja teha beer3. Kas see beer3? Jah, see on beer3. Ja nüüd lubage mul minna ja joosta beer3. 399 99. Me ei saa ilmselt vahele enamik neist. Ja siin all, vaata seda. "Üks pudel õlut seinal, üks pudel õlut võtta Üks maas, andke seda ümber, 0 pudelit õlut seinal. " Aga ma olen joonistus oma tähelepanu ainult poolik lahendus. Kind of silmamunad siin. Seega tundub, et nurgas juhtudel tekkida siis, kui ma võrdub mida kaks väärtust? Sihtrühm: 2, 1. David J. Malan: 2 ja 1. See pole 1 ja mitte 1. See on tõesti ainult need kaks viimast stanzas seda laulu. Mida ma selle asemel teha tahad? Nii et ma tundub, et on püütud juhul, kui kui ma ei == 1, siis esimene sõna on "pudel", kuid teine ​​sõna on "pudelid". Aga siin, ma tahan muuta, et see oleks == 2. Ja kui see nii on, mida ma tahan esimene sõna olema? Sihtrühm: "Pudelid". David J. Malan: "Pudelid", nii kaks pudelit. Ja siis see sõna siin peaks olema - Sihtrühm: "Pudel". David J. Malan: "Pudel", ainsuses. Olgu, lähme välja suumida, mine tagasi siia, re-run teha, Re-run beer3, Type 99 uuesti. Okei, "Segmentimise süü (tuum dumpinguhinnaga)." Mida ma valesti teinud olen? Sihtrühm: Sa ei pea väärtus [kuuldamatu]. David J. Malan: Ah, suurepärane punkt. Olgu, mis viga siin? Nii killustatust süü, ja me tegelikult näeme see päris paar korda tulevikus teadlikult. Aga nüüd, mida see tegelikult tähendab? Killustatust süü peaaegu alati tähendab, et teil on kuidagi püüdnud ligi pääseda mälu, RAM arvuti, et sa ei oma, et sa ei ole tegelikult palus operatsioonisüsteemi jaoks. Nii et sel juhul teate, mis ma olen teinud, mis on puudulik minu loogika. Olen määratud S1 ja S2 raha, kui ma võrdub 1. Ma olen ka teinud, et kui ma võrdub 2. Aga ma ei ole seda teinud lõpmatu hulk teisi võimalusi - eriti, 3 või 4 või dot, dot, dot, 99. Nii et üks parandus see võis olla lihtsalt olgem on teine ​​tingimus. Ja lase mul minna siia ja ütle s1 võrdub - milline peaks see siin olema? Sihtrühm: [kuuldamatu]. David J. Malan: "Pudelid", sest ühises asjas see on lihtsalt sama asi. Nii võrdub tsiteerin Tsitaat lõppeb, "pudeleid." Nii mitmuses pudelid ja siis siia üles, sest mitmuse pudeleid. Okei, nii et nüüd las ma lähen tagasi oma terminali aknas kompileeri uuesti käivitada. 99. Whew. Ja teeme kiiresti meelerahu vaadata. Tehniliselt me ​​tahaks lugeda kõik need veenduda nad õige, kuid vaatame vähemalt tuntud süüdlased. 3 pudelit, 2 pudelit, 2 pudelit, 1 pudel, 1 pudel, 0 pudeleid. Tundub, et me oleme vähemalt fikseeritud see nüüd. Aga saak on selles, et mida jumal kohutav jama see on läbitegemine loll ühetähelise grammatilisi detail. Nii et seal on mingi põhjus, et ma lõikasin selle nurga varem, sest see on lihtsalt täiesti tüütu on, et kirjutan seda palju koodi. Aga selgub, et seal on veidi rohkem elegantne võimalusi väljendades täpselt sama asi. Ja me võime seda teha järgmiselt. Lubage mul jätta see ekraanile hetkeks ja tutvustada midagi tuntud kolmekomponentsete operaator. See on selline ühe-liner, mis on just mõeldud, et meie elab vähe seksikam, nagu lubatud. Ja ma teen seda järgmiselt. Anna mulle string nimega s1, ja andke mulle määrata see järgmiselt. (I == 1)? "Pudel", muidu "pudelid". String s2 saab (i == 2)? "Pudel", muidu "pudelid". Mis siis on siin midagi? Need kaks rida koodi, Väidan, saab asendada kogu see jama. Nii et ma kutsun seda jama, lihtsalt sellepärast, et selline röövib mind vale, et see on nii palju ridu koodi. Mitte valesti. See ei ole halb disain. Nagu, see on täiesti õige ja täiesti korras. Aga kodeerimine saab tüütu, kui sa pead ennast väljendada nii kurat just uuesti ja uuesti ja uuesti lihtsa stsenaarium meeldib see. Nii C on mõned otseteed niimoodi. Nii et see sisuliselt ütleb kuulutada string nimega s1 ja määrata selle kas see väärtus või selle väärtuse, kui ma ei == - Vabandust, ma peaks ütlema seda selgemalt. Tuvastada muutuja s1, anna see seda väärtust, kui see on tõsi. Vastasel korral määrata see seda väärtust. Nii et teiste sõnadega, see on omamoodi üherealine viis öeldes, kui teine, kuid teevad loovutamise teel. Nii et kui ma 1, siis minna ja nimetame seda "pudel". Ja siis see teine, nimetame seda "pudelid". Vahepeal s2, teine ​​sõna, et me peame määratlema, kui ma võrdub 2, siis me seatud S2 "pudel". Vastasel juhul seadke see "pudelid". Ja mida see tähendab nüüd on Ma ei saa minna läbi selle ja kustutada kõik need read koodi. Ja kui ma ütlen, mõnevõrra naeruväärselt, et see on nüüd seksikam, see on seksikam on omamoodi stilistiline mõttes. Asjaolu, et funktsionaalselt, see kood on tegelikult läheb teha täpselt sama asi. Ja kuigi see võib tunduda veidi segasena esimesel lühidalt, sest me pole näinud seda konstrukti enne, ma väidavad, et see on lõpuks saab olema nii palju loetav ja nii palju lihtsam meie, inimesed sortida kohta mõista, sest nüüd saab lihtsalt lugeda koodi kõik ühes reas. See on ikka sarnase sisuga, kui, kui see on seisukorras ja siis on see mis seal sees siis ja selles on, mis seal sees veel. Aga me saame seda teha lihtsalt palju rohkem elegantselt. Ja kui ma nüüd lähen tagasi oma terminali, olles kustutanud kõik Kõnealuste liinide ja asendas need lihtsalt nende kahe, kompileeri uuesti kulgema pudelit õlut 99, teate, et minu grammatika on tegelikult ikka õige. Nii et taas, midagi alustada. 2 pudelit õlut, 1 pudel õlut. Paistab küll. Jah. Nii et meil on palju sisutihedat lahendus. Nii ka see, kui sa saad rohkem rahul C, ei tingimata koos esimese pset või isegi teine, kuid aru, et selliseid konstruktsioone võimaldavad meil teha asju kunagi rohkem elegantselt. Nüüd teeme ühe asja siin. Lubage mul minna ja avada return1.c. Nüüd alustame lahendada üks probleem nii, et võimaldab meil kirjutada keerukamaid kood. Nii et siin on lihtne väike programm, mille eesmärk elus on juurdekasvu väärtused. Ja tegelikult, olgem astuda samm tagasi. Lubage mul teha seda käsitsi. Las ma teen sisaldama ja int main (void). Ja las ma kutsun seda increment.c. Ja mida ma tahan teha? Ma lähen edasi minna ja öelda midagi sellist - me helistada numbritele sama - int x. Nii int x saab 2; printf x on% d, uus liin, x. Nii et ma olen masinakirja kiire, kuid omamoodi tuttav värk nüüd. Siis ma lähen tegema x + +. Siis ma lähen printida sama lause uuesti. Ja siis ma lähen tagastab 0 lihtsalt sulgege programm. Olgu, see on programm, mis sammuga arv. See esimene läheb initsialiseerida midagi 2 ja siis on läheb juurdekasvu ja prindi see uuesti. Nii et olgem joosta juurdekasvu, uskumatult lihtne programm. Aga oletame nüüd, et ma tahan kuubik väärtus, nii et ärge midagi mõnevõrra meelevaldne. Ja ma tegelikult tahan teha x saab kuubik ta. Nii et ma võiks kasutada, mida nimetatakse pow funktsiooni, kuid ma ei tea, kus see on veel. Nii et ma teen seda vanamoeliselt. x korda see võrdub x korda x korda x. Nii et ma olen cubing väärtus, korrutades seda ise uuesti ja uuesti ja uuesti, nii et me saame võimu 3 käesolevas asjas. Nüüd numbreid ma peaks trükkima peaks olema, nagu me näha siin - teha juurdekasvu, nii see tegelikult ei ole tõesti juurdekasvu enam, kuid me jätan nimi üksi - 2 ja siis 8. Nüüd on meil alguse võimaluse täiustamise siin, kus see cubing asi korrutada arv ise ise ise tundub see võib lihtsalt olla kasulik omada funktsioonina, umbes nagu keegi otsustas aastat tagasi - te teate, millist kasu, kui üks meist istub maha ja kirjutab printf nii et ülejäänud maailm seda kasutada, miks me ei istuda ja kirjutada funktsioon nimega kuubik et kas see cubing meile, et me ei pea käsitsi rakendada mõistet cubing väärtused siin? Nii lihtne näide, kuid olgem minna ja kasutada seda kui võimalus kirjutada oma funktsiooni. Nii et siiani oleme ainult kasutatud peamine, ja oleme kasutanud muid Inimeste funktsioone, kuid me ei ole kirjutatud meie oma. Nii et siin me läheme. Ma lähen edasi minna ja kirjutada funktsioon nimega kuubik. Ja ma lähen on ta võtma sisend. Nii et tema panus saab olema täisarv. Ja mida ta kavatseb teha? See saab deklareerida int väljund = sisend korda sisend korda sisend. Ja siis see läheb tagasi, et väljund. Ja siis ma pean olema konkreetne nüüd. See funktsioon ei kavatse naasta int. Nii et siin on siis kuidas sa kirjutada oma funktsioone. Sa kõigepealt otsustada, milline on nime oma funktsiooni saab olema. Ja üldiselt, midagi selgitavat on hea, et ma tulen nimetame seda kuubik. Siis tuleb sul määrata, mis sealt tagasi, mis on oma toodangut saab olema. Ja meil ei ole, et palju võimalusi veel. Keskmine, char, float, bool, string. Praegu ma lähen kinni int, sest ma tahan seda tagasi täisarv. Siis on täpsustada, mis selle sisendite, kui üldse, on. Ja kui kuubik võtab argument, võtab midagi vahel sulgudes, sa pead andma selle argumendi nime, nii et võite helistada see midagi, kui sa rakendamisel või kirjalikult Selle funktsiooni ja sa pead andma see tüüp, kes selles juhul saab olema int. Nii lühike, kuubik on funktsioon, mis võtab täisarv kui sisend ja tagastab täisarvu toodanguna. Nii et mida see pistmist, et sisend? Noh, joon 14, Kinnitan muutuja nimega väljund, ja ma määrata selle väärtus, sisendi korda sisend korda sisend. Ja siis ma tagasi toodangut. Niisiis, kuidas ma saan kasutada seda siis? Mida ma saan muuta neid esile tähemärki real 7 nimetatud, sa arvad? Sihtrühm: [kuuldamatu]. David J. Malan: Jah, nii kuubik x. Nii et x on muutuja, mis tähendab, tal mingi väärtus. Õnneks on tüüpi täisarv. Ja kuna x on keskmine, see tähendab, et ma ei liigu see kuubik. Ja kuigi ma ülekaaluka väärtus x-väärtus kuubik x, nagu on juhtunud siiani, iga kord, kui on võrdusmärk ning rida koodi, kraami õigus saab teostada ja siis saab määrata väärtus vasakul. Nii et tegevuse on nagu me oleks lootust. Nii see toimib? Noh, lase mul minna siia alla. Lubage mul avada minu terminaliakent. Las ma ei tee juurdekasvu, Enter. "Kaudsed deklaratsiooni funktsioon" kuubik "on kehtetu C99. "Nagu kõrvale, C99 viitab keel C, sest see oli määratletud aastal 1999, mis oli uuendus üle versioon 1989, mis on uuendatud üle originaal. Nii et kõik see tähendab. Nii et mida see tähendab, et "kaudne deklaratsioon funktsiooni 'kuubik' on kehtetu? "See on siinsamas. See on seal ka rida 12. Sihtrühm: [kuuldamatu]. David J. Malan: Mis see on? Sihtrühm: See ei ole enne. David J. Malan: See ei ole enne. Nii et see on asi. C on tobe, või C kompilaatorid on tobe. Nad tõesti ainult seda, mida sa ütled neile, mida teha. Ja nad eelkõige lugeda ainult oma koodi ülevalt alla, vasakult paremale. Nii et kui kompilaator, rõkkama, loeb oma kood, rida 1, see nuputab, kuidas seda teha. Oh, siit tuleb põhiline. Okei, las ma minna ja kuulutada muutuja x. Las ma printida midagi. Rida 7, mida kuradit on kuup? See ei ole deklareeritud stdio.h. See ei tule koos C. Ma ei tea, mida teha. Ja nii rõkkama lihtsalt Bails ja sulgub ja mis veateate. Nii saame määrata seda paar võimalust. Me ei saa õpetada rõkkama mida kuubik lihtsalt liigub kus deklaratsioon. Nii et ma lõigata ja kleepida see atop peamine. Nüüd mõistan, et lihtsalt sellepärast, et peamine ei ole enam esimene, see on ikka täidetakse vaikimisi. Peamine on peamine. See on vaikefunktsioon nimi. See ei ole tähtis, kui see on fail. Aga vähemalt nüüd rõkkama on näinud kuubik enne ma kasutan seda. Nii et vaatame, kui rõkkama on praegu õnnelikum. Tee juurdekasvu, see ei kompileerida seekord. Ma jooksen juurdekasvu. Ja tõepoolest, see näib toimivat. Nüüd saate tulla stsenaariumi lõpuks, kui see ei ole võimalik panna iga funktsioon Ülaltoodud iga teine ​​funktsioon. Sul jänni see lõputu silmuse tegelikkuses kus see kutt tahab olla siin, kuid see mees peab seal olema. Nii et alati ei toimi. Nii et õnneks C on rohkem elegantne lahendus. Ma panen selle tagasi, kui ta oli lihtsalt sellepärast, et ma eelistavad, kui põhimõtteliselt, et peamine alati ülaosas, sest see on lihtsalt tore näha, mida see programm Kas vaikimisi. Ja mida ma teen siin on kuulutada, mida nimetatakse prototüüp. Ma lähen uuesti deklareerima minu kuubik funktsioon sõna otseses mõttes kopeerimist ja kleepimist. Tegelikult, see ei ole sõna-sõnalt. Nii et sõna otseses mõttes kopeerida ja kleepida real 15 ülevalt rida 6. See ei ole oluline milliseid rida see jõuab. See juhtub olema real 4. Aga see ei pea olema enne peamisi. Aga märka erinevust. Rida 4 lõpeb semikooloniga, mis tähendab, hei, Rõkkama, võtke minu sõna see, et on olemas funktsioon nimetatakse kuubik, mis võtab int ja tagastab int. Aga ma ei ütle sulle, mis see on. Lihtsalt tean, et ma luban sulle lõpuks. Ja tõepoolest, nüüd see on okei, et see on allapoole. Nii et see on üldiselt parem, sest siis ülaosas fail, saab lihtsalt vuristama, kiire tulekahju, üks rida iga, mis nimed oma funktsioonide ja milline on nende sisendid on, millised on nende väljundid. Ja oleks selgem, sisend tähendab üldiselt argument või parameeter, sünonüümid. Etendus tähendab tagastatav väärtus, mida see Samas mulle tagasi. Nii et selles asjas, kuubik on kuulutatud tipus, kuid määratletud, muidu tuntud rakendatud, allosas. Nii et nüüd lähme siia tagasi ja uuesti käivitada seda. Nüüd lubage mul minna ja uuesti käivitada teha, uuesti käivitada juurdekasvu. Ja nüüd paistab töötavat just fine. Nii et nüüd saame minna ja tegurdada midagi õlu näiteks sellesse neljas versioon. Nii et las ma kerin alla siit. Ja märkate, et ma mingi võtsin selle õppetund südamesse just nüüd. Asjaolu, et ma laulis sama stroof uuesti ja uuesti ja uuesti, sama refrääni rida laulu, vilt meeldib Miks ma ei tegur, mis viidud funktsioon? Ja tõepoolest, see peaks olema üks motivatsioone. Peale selle, et keegi teine ​​maailmas võiksite kasutada kuubik funktsioon - see on hea põhjus tegur midagi välja ja kirjutage omatehtud funktsioon - kui seal on patakas kood oma programm, mis lihtsalt teeb kontseptuaalses mõttes, et sa nagu tahaks, et anda sellele nimi - nagu käesoleval juhul, koori - siis saate samamoodi kirjutada, et eraldi funktsioon. Sa ei pea kirjutama kõike peamist, kui ta lihtsalt tunneb puhastaja, mis eraldab selle läbi ja annab talle nime. Nii et selles asjas, märkate, et mul on Kommentaari atop seda funktsiooni, et lihtsalt laulab sellest määratud arvu pudeleid. Teade siin, et ma ei vaja helistada nende asjad sisend ja väljund. Tegelikult seekord ma lihtsalt helistasin oma panuse b pudeli. Ja märka siin, tühine soovitab mida? See koor - Sihtrühm: ei tagasta seda. David J. Malan: ei tagasta raha. Ja tõepoolest, funktsioone ei pea tagastama väärtused. Nad võivad lihtsalt midagi teha. Nad võivad olla nn kõrvaltoimeid, mida käesoleval juhul on lihtsalt terve hunnik trükkimine ekraanile. Nii märkate, et see kood siin, ma sõna otseses mõttes lihtsalt varastas eelmises näites. Ainus erinevus on, selle asemel ma nagu mu muutuja, ma olen nüüd kasutades b nagu minu muutuja. Nii et mul on b siia, mul on b siia, mul on b miinus 1 siia. Aga kood on täpselt sama. Aga ainult sulle nüüd, kuidas saame kasutada seda, lase mul minna edasi ja tegelikult muuta, et see oleks loop. jaoks (int i = n; i> n, i -). Nii et ma olen varastanud, et meie eelmise näite. Varem see on kooskõlas 37, oleksin alustanud laulmine see tüütu lugu. Kuid selle asemel, ma lihtsalt lähen nüüd helistada koori i. Valmis. Nüüd iga iteratsiooni see silmus, ma nimetan seda teiste funktsioon, refrään, et sattusin kirjutama. See ei olnud kirjutatud kellegi teise aastat tagasi. Aga refrään, vahepeal kasutab printf printida välja need neli rida. Kuid tõsiasi, et ma helistan kooris ikka ja jälle loop tähendab, et ma lähen saada, päris lõpus, täpselt sama lugu nagu ma olen siiani. Nii lühike, nüüd kui ma vaatan tagasi oma koodi, kuigi funktsionaalselt on see samaväärne, märkate, et see on käivitumas isegi paremini arusaadavaks. Ma ei tea täpselt, kuidas GetInt rakendatakse. Ausalt, ma ei tea, kuidas koor rakendatakse. Aga see ei ole oluline mulle. Mind ei huvita, sest nüüd saan omamoodi, nagu inimesele, loe see ülalt alla. Ja kuna funktsioonid on nimetatud vastavalt sellele, mida nad teha, minu kood on üha loetav. Ja kui meie programme saada palju keerulisem - poolt semestri lõppu, siis saad kirjalikult värsireani Koodi keeles nagu PHP ja JavaScript jms - leiad, et see on nii palju lihtsam kui jälgida mida sa teinud oled. Ja kui hakkate koostööd sõprade või partnerite ja kolleegidega, on sul võimalik kirjutada palju rohkem suuremahulisi alustades teostada neid põhilisi ehituskivid. Nii et öelda, miks me ei nimetavad seda päeva? Ja me näeme kolmapäeval. [Aplaus]