[Powered by Google Translate] David J. Malan V redu, to je CS50, in to je začetek tedna 2. Hvala. Začnimo tukaj s telefonskim klicem. Jaz sem na tem, da pokličete 617-BUG-CS50. CS50: To je CS50. Za Boy Shuttle, pritisnite 1. Če želite začeti znova, pritisnite 9. David J. Malan: Tako je dejal za Boy Shuttle, pritisnite 1. Torej bomo pritisnite 1. CS50: Kakšen je vaš izvor? Za quad, pritisnite 1. Mather, pritisnite 2. Boylston, pritisnite 3. Lamont, pritisnite 4. Mem Hall, pritisnite 5. Če želite začeti znova, pritisnite 0. David J. Malan: Bomo pritisnite 1 za quad. CS50: Naslednji avtobus zapusti to zelo minut po uri 01:10 in nato pa na 1:20, 1:30, 1:40. To je CS50. David J. Malan: Torej, to je glas CS50 je. In to je primer, kakšne vrste končnih projektov za Na primer, lahko odgrizne proti konec semestra. Na primer, da obstaja shuttleboy.cs50.net - pravzaprav projekt, ki sem prvič pisal ob prevzemu CS51 nazaj, ko sem bil dodiplomski. In tu je bila navdih takrat, vse kar so imeli je bil natisnjeni redi avtobusov shuttle, in ni bilo Pojem videti stvari na spletu. In tako sem nekako golob v enem vikendu, zlivati ​​preko tiskani urnik, in ga prenesti v računalniški program. V času, ko je računalniški program se je zgodilo, da se pisni v C. In dejansko je trajalo, ki jih vnašate Shuttle Boy na utripa uren, kot smo počeli doslej. Toda v zadnjih letih, se je razvijal v trenutku sporočil bot. To je razvila v zadnjem času v tej spletni strani, v SMS-orodje, kot tudi v tem glasu, ki temelji orodje. In to je, da namigujejo na vrste stvari, ki jih lahko storite sami do konca semester. Na primer, tam, različica SMS z Boy Shuttle zgodi delovati kot sledi. Če na vašem mobilnem telefonu, pošljete SMS na 41.411 in nato pošlje posebno sboy simbol za Boy Shuttle, sledi A in B, kjer je izvor in B je destinacija - na primer, Boylston prostor Quad - kaj bi dobili nazaj v nekaj sekundah, je besedilo sporočilo Boy Shuttle vam pove točno, ko je Naslednjih nekaj avtobusi so od te točke, da bo točka B. In to je bolj splošen primer tega, kar je znano kot uporabo API. Tako na primer, tole tu je samo shuttleboy.cs50.net, Dejansko spletno utelešenje tega. Vendar podatki, ki jih izpostavlja ta in druge aplikacije, ki CS50 razvili so vsi izpostavljeni vsi tukaj, v obliki učinkovin, vmesniki za programiranje aplikacij. In to je samo fancy način rekel, da ljudje radi na Internet in drugi so nekaj časa preživel ustvarjanje programska oprema, ki jo lahko uporabite za zgrabite podatkov od nas nato pa graditi lastne aplikacije na vrh navedenega nabora podatkov. Torej, na primer, je to usluga Boy API stran tukaj, ki zgodi, da se v CS50 navodila, še zlasti dokumenti kako lahko greste o prosi CS50 strežnikov za podatke. Na primer, če ste seznanjeni s CSV datotek, vejica ločeni vrednosti, to so nekako hitro in umazano Excel podobnih slik. Torej, lahko prosite Shuttle Boy za vse podatke o vseh hiše in njihovi GPS koordinate, in boste dobili nazaj, v bistvu preglednico tako, da Nato lahko preberete v program svoje in potem pridobivanje rezultatov, kot Boy Shuttle sam se zgodi, da se delaš. Za tiste bolj znane, bolj sodobnih podatkovnih predstavništev vključujejo JSON, JavaScript Object Notation. Nekaj ​​se bo vrnila k tebi proti konec semestra. Ampak spet, to je samo ena od mnogih lastne API CS50 je. In zanimivo je, zdaj, v teh dneh, Facebook in Twitter in Google in precej vsak priljubljena spletna stran od da ima neke vrste API, kar pomeni, če ste prebrali Dokumentacija na svoji spletni strani, se prijavite za račun, lahko pričnete pisanje programske opreme na vrh koli orodja ali podatki, ki določa, da družba. In tako eden od naših sodelavcev učnih par let nazaj napisal različico Mac za to. Torej v povezavi z naslovom Mac tukaj v zgornjem levem kotu, lahko dejansko prenos Mac OS pripomoček, ki deluje na vašem Mac opraviti iste vrste stvari. Torej, to je vse o gradnji na vrhu zbirk podatkov, kot ti. Ampak več o tem proti koncu semestra. Torej se potopite v realnem hitro hrošča, samo da nekako dobiti stvari ogreti danes, in mislim nazaj na nekatere Stvari, ki jih pogledal prejšnji teden. Zlasti naj gredo naprej in potegnite navzgor, recimo, ta primer tukaj. Buggy1.c, to je na voljo na spletni strani seveda, če si boš želite prenesti in suniti okrog sebe. Ampak kaj je povečati tukaj na tem dokaj kratkem programu, in tako izjemno hitro Rekapitulacija nekaterih osnovnih gradnikov, ki res se bomo šele začeli jemati za samoumevno. Torej modro stvari, v vrsticah od 1 do 9, so le softball vprašanja. Torej, to so le besedila. Nimajo funkcionalnega pomena. Ampak oni so komentarji v smislu, da oni ugotavlja, da Jaz, človek, ki v sebi, tako da je v predavanju in po Predavanje morem se spomniti, kaj pravzaprav je ta program ne, ne da bi prebral skozi to vrstico za vrstico in vnovično zgodovino v mojih mislih. Poleg tega, če sem roko ta program za nekoga drugega, kot ti, da je veliko bolj jasno, za vas, saj pripomb, kot je ta, kaj program je dejansko delal, ali vsaj kaj Program se naj bi počel. Ali ni to je pravilna, je drugo vprašanje v celoti. Zdaj, v C, z multi-line pripomb, opozarjajo, da na spletu 1 Tukaj je magija simbol / *. To pomeni, da prihaja začetek komentarja. In nič drugega zadevah, dokler ne pridete do končne terminator, ki je * /, ravno nasprotno. Zato je dejstvo, da imam 80-ak nekaj zvezd sem iz od leve proti desni je res samo estetski detajl. To nima nobenega funkcionalnega pomena. Zdaj, kako naj z linijo 11? Kaj to storiti v enostavnih izrazov? Kaj je to? OBČINSTVO: Vključuje standard. David J. Malan: OK, dobro. Torej to vključuje stdio.h knjižnico. Torej, kaj to pomeni? No, znotraj te datoteke stdio.h, so cel kup Funkcija izjave - to je koda, ki je nekdo drug napisal. In odličen primer funkcije, ki je bila prijavljena na stdio.h je - ki najljubša do zdaj? Torej printf, eden od najpogostejših uporabiti, vsekakor zgodaj iz te knjižnice je tam. Če sem izključite to vrstico kode, Jek bo kričati me je nekaj o uporabljate črno simbol. Nekaj ​​črno je verjetno ključna beseda, ker nismo obvestili prevajalnik, kar izgleda printf všeč, če štejemo, da je črto. In bolj na Zemljo, res, kaj je to linija je rekel je odpreti to datoteko, stdio.h, kjer je na strežnik je trdi disk, ali aparat na trdi disk, in copy-paste je tam v datoteki, ne moj da bi morali storiti, da ročno. Zdaj, ko pridemo sem, da glavni, kmalu pa bomo začeli dražila narazen, kar int in kaj je nična. Ampak za zdaj, si oglejmo tri vrstice v 15 do 17. To sem jaz, kot trdijo vozičku. Linija 7 v svojih pripombah pravi: "Če tiskate 10 zvezdice, ne. "Zakaj se to ne natisne, v resnici, 10 te zvezdice? OBČINSTVO: [neslišno]. David J. Malan: Točno tako. Torej opazili, da smo začeli šteti od 0. In to je pravzaprav konvencijo načrtovanja in računalništvo na splošno, ki se začne štetje od 0 namesto 1. In to res samo izhaja iz dejstva, da je za Na primer, ko smo imeli osem ljudi na oder, ko nihče ni bil dvig svoje roke, so bili Vse učinkovito ničle. In tako se je le nekako računalniškega konvencije tako, torej začetek štetja od 0. Če je to najnižja številka lahko zastopa v binarno. Torej, tukaj smo začeli i inicializaciji na 0. Mi smo iz i enak 0. Potem pa sem naredil to napako tukaj, rekel sem, manjša ali enaka 10. Toda, če menite, da skozi, če začnem pri 0 in potem sem šel do 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, sem dejansko dogaja, da natisnejo 11 zvezd na zaslon, ker sem šel gor da, in je enaka 10. Tako enostavno popraviti tukaj je potem kaj? OBČINSTVO: [neslišno]. David J. Malan: Samo spremenite v manj kot. Če res želite, lahko to storite. Ampak na splošno, da se je namrščil. In tako se začne štetje od 0, je le nekaj, kar je treba običajno navaditi. Torej, kaj je s tem celotnega konstrukta v sam po sebi? Ta linija 15 demarks za zanke. Torej, ni v funkciji. To je samo izjavo. To je zanka konstrukt, kot smo videli v Scratch. In to ima tri dele. Obvestilo, da je prvi del do levo od podpičjem. Tam je srednji del med dvema podpičji. In potem je tukaj še desni del na desni drugega podpičjem. Torej, prva od njih pa kaj? OBČINSTVO: [neslišno]. David J. Malan: Nazaj tam? Ja? OBČINSTVO: Inicializacija. David J. Malan: Inicializacija. Torej, kaj to pomeni? Imamo prijavljeni spremenljivko sem klical. To je tipa int, ker sem določene int i. In jaz sem inicializacijo na vrednost 0. Torej, kaj je to res pravi? To je dejansko rekel, da računalnik hej, daj mi dovolj pomnilnik, dovolj RAM-a, da se prilega številko, nato pa se številka 0 v tem bloku RAM-a. In kot prahi, kako velik je ponavadi int, vsaj znotraj stroja? OBČINSTVO: 32 bit. David J. Malan: 32 bitov. Torej to pomeni, da mi 32 bitov, sicer znan kot 4 bajte, in dal vrednost 0 v njem, ki je zelo enostaven, saj to pomeni, preprosto nastavite vse bitov na 0. Torej, zdaj, drugi del tukaj je pogoj. In stanje, kot že ime pove, je to, kar se preverja spet in spet in spet, ali je to res ali ne. Torej, to je samo rekel, naredite naslednje vrstice kode - in sicer linija 16, ker je to edini zamaknjen 1 pod - tako dolgo, dokler je i manjši od 10. In po vsaki ponovitvi skozi to zanko, naredite incrementation, ki v tem primeru je i + +. Zdaj, to ni nujno, da je i + +. Lahko bi i -. Ampak, če sem to storil, kaj se dogaja na obnašanje da so ta program? OBČINSTVO: To se dogaja, da je neskončno zanko. David J. Malan: To bo neke vrste neskončno zanko, če bomo imeli srečo po negativnem 2000000000 ali tako. Mogoče bodo stvari ovijte okoli, samo po naravi končnih število bitov, ki smo dodeljenih za notr. Ampak to se bo zagotovo Ponovil veliko več kot 10 in zagotovo več kot 11-krat tukaj. In zdaj, prav tako razveljaviti, spoznali, da sem jaz + + in - so res samo skladenjsko sladkor. To je samo okrajšava za zapis kar je nekoliko več izrecno pisno na naslednji način: i = i + 1. To je enako i + +. Kar nekako izgleda lepše reči, i + +. To je bolj jedrnat, je bolj berljiva. In tako večina ljudi, ki namesto tega. Ampak to je enako funkcionalno kar smo pravkar videli. Torej, na kratko, hitro popraviti, tukaj je samo povedati, da sem Ponovil od 0 pa vse do manj kot 10. In potem bomo res dobili 10 zvezd. Torej, kaj je poskusiti. Naj odprli terminal na dnu. Naj gredo v imenik, da je to noter In jaz jo bom sestaviti ročno z Jek za zdaj. In jaz bom pripraviti, da je to buggy1.c, Enter. In zdaj buggy1, zakaj ni nobene take datoteke ali imenika pozval buggy1? OBČINSTVO: [neslišno]. David J. Malan: Ja. Torej je pravzaprav imenuje a.out. Torej, če ste le opozoriti teči Jek, kjer je Jek prevajalnik, in ne podate ime, ki ga želite dal svojega programa, da se bo po privzetku a.out. Torej, res, če naredim ls - ojej. In jaz Nisi - V črno-beli obtok približno od se soočajo bila določena. Ampak, dovolite mi, da to storijo. Tukaj imamo a.out na levi strani tam. Zato moramo teči a.out namesto buggy1. Torej, naj gredo naprej in to je to. . / A.out, Enter. In jaz očitno nisem naredil kaj? OBČINSTVO: Shrani. David J. Malan: Shranite svoje datoteke. Tako da enostavno rešiti s pritiskom Control S, ali bo Datoteka, Shrani kot v večini programov. Pusti me tukaj, da počistite zaslon, ga ponovno zaženete. In tam je še vedno napaka. Torej, kaj se dogaja - OBČINSTVO: Nisi prevesti. David J. Malan: Ah, dobro. Nisem ga pripravijo. Kot idiot, gledam kodo, da vidim, kaj je narobe. Torej Jek buggy1.c, zdaj a.out. In Uf, rešil. Tako se zdi malo grdo, ker ni nova linija kjerkoli v programu. Ampak spet, to je samo estetski detajl. In vsaj če štejemo tiste, ki, bi morali Zdaj vidim 10 takih zvezd. No, kaj pa ta drugi ogreje na primer? Torej, v buggy2, trdim, da je ta različica bo tudi natisnete 10 zvezd, po eno vrstico. Torej ta čas sem imel znak za novo vrstico, samo, da bi stvari malo lepši. Toda namesto, da tisto, kar sem dobil je to. Torej mi ne Jek buggy2.c, Enter. Zdaj je znova pozval a.out. Enter. Jaz vidim samo eno novo linijo samo zadnja novo linijo, ki premakne moj poziv za naslednjo vrstico. In vendar očitno sem bil tiskanje *, nato pa novo vrstico, *, Potem nova vrstica. Toda kaj je napaka tukaj? Ja? OBČINSTVO: [neslišno]. David J. Malan: Točno tako. Torej, za razliko od nekaterih jezikov, kot so Python, kjer zatoka dejansko ima funkcionalnega pomena, v jezik kot C - kot bomo videli, PHP, Javascript - stisnila je res samo za korist ljudi ". Zato je dejstvo, da sem zamaknjen linijo 16 in 17 izgleda super, vendar nima funkcionalnega pomena tukaj. Če želim obe vrstici izvesti kot del za zanke, moram jih postavite v zavite oklepaje s tem. Lahko samo nehaj s tem kotu in izpustite zavitih oklepajih, če Kaj je tako? OBČINSTVO: Samo ena vrstica. David J. Malan: Samo ena vrstica. Torej, to je nekako lepo uredi podrobnosti, tako da se skladenjski da ne zapravljajo časa pisanja tri vrstice, od katerih sta dva Zaviti oklepaji, samo napisati eno vrstico kode. Ampak, če imate dva ali več črt, smo dejansko potrebno storiti. Torej, zdaj pa mi rešiti to. Naj gredo naprej in ponovno zagnati Jek. Potem pa mi ponovitev a.out, in zdaj sem dobil eno za vsako vrstico. Zdaj pa spet a.out je nekako neumno ime za program. Kako naj vem, da dejansko Jek mi ime datoteke ki je bolj prijazen do uporabnika, kot buggy2 sam? Malo bolj jasno? OBČINSTVO: [neslišno]. David J. Malan: V redu, tako da sem lahko dejansko traja zelo uporabniku prijazen bližnjico in samo napisati, da buggy2. Jaz ne določajo, c v tej zadevi. In pritisnite tipko Enter. In kaj ti pa je, da pripravlja buggy2.c mi ga sprašuje Jek, da to storite. Zlasti pa poziva Jek, teče Jek z veliko več ukazni vrstici argumenti ali stikala, kot sem dejansko potrebujejo. V času, bomo prišli nazaj na to, kar vse te različne Cryptic sklopljene izrazi pomenijo. Ampak za zdaj, to je samo varčevanje mi težave z bi si morali zapomniti in da bi tip od vseh tistih Različne sklopljene izrazov. In narobe z njim je navsezadnje da zdaj imam buggy2. Če želim, da to storijo sami, čeprav sem lahko namesto to - Jek-o buggy2 in nato buggy2.c. In to bo prav tako dal datoteko z imenom buggy2. Torej na kratko, Jek je prevajalnik. Poskrbite le uporabniku prijazno orodje, da bomo uporabljali več in še več, saj je šele začne poenostavili stvari za nas. In bomo vrnili 0, končno. Za zdaj, samo zato, ker, vendar bomo začeli dražiti, da je del danes in v sredo. Vsa vprašanja o tem? Ja? OBČINSTVO: [neslišno] Je v narekovajih tam? David J. Malan: OK. Ko sem tipkal Je v narekovajih, ki me je početje nekaj magije V zakulisju popraviti napako. Pozabil sem, tako kot smo bili povedali mnogi izmed vas na table za razprave, za početi - bomo to zdaj - sudo yum-y update appliance50. Ops, to, da je prav napisano. Torej aparat je kot operacijski sistem. To teče ta operacijski sistem, imenovan Fedora. In zdaj zaradi moje počasno internetno povezavo, imam res hosed. Torej teče sudo yum update, kot smo vam povem, da storiti Problem set, v bistvu rad teče samodejne posodobitve V operacijskem sistemu Mac OS ali Windows. In razlog za to tekmovanje v teku na samem začetku Problem je, ker množica, ko smo ustvarili aparat, sem zamočil, in sem po nesreči naredil vse svoje programe pogled črno na črnem zaslonu, kar je razlog, zakaj si jih ne vidim privzeto. Vendar pa je najnovejša različica aparata določa to. In jaz se določi, da med odmorom, ko imam internet povezljivost. Torej, citati samo skrije svojo zmoto, zelo diskretno, očitno. Druga vprašanja? Ja? OBČINSTVO: Če ne bi prišel? [Neslišno] David J. Malan: Dobro vprašanje. Če ne bi prišel? To je program za Linux, ki obstaja že več let, dokler Pred CS50. In to prihaja z operacijskim sistemom, kot so Fedora. To ne prihaja iz CS50 knjižnice. V bistvu, samo stvari, ki prihajajo iz CS50 knjižnice tako daleč, da smo videli, so GetString, GetInt, vse Get tiste funkcije, in beseda niz, za nekatere obsegu, beseda int. Ampak bomo draži, da je poleg, ko se potopite v CS50 sam aparat. Torej, ja, še eno vprašanje tukaj. OBČINSTVO: Ko si rekel, da Otroški voziček in potem, kako deluje Računalnik vem [neslišno]? David J. Malan: Dobro vprašanje. Torej, ko zaženete, le da buggy1 ali pa buggy2, kako ne bi vedel? Torej jih ni, če vnesete da buggy1, da poišče datoteka z imenom buggy1.c. In potem ga izvede ustrezne Jek ukaze, tako nujni privzeto datoteko izhodno imenom a.out. V bistvu, če pogledamo, kaj narediti, kaj - dajmo končati to. Če pogledamo, kaj bi dejansko delal, da buggy2, to je že do datuma. Torej, kaj mi odstranili rm ukaz, Program sem napisal prej. Tipkanje Y-E-S potrditev, da želim, da ga odstranite. Če bom naredil, da, opazili, da v tem zelo dolgi vrsti, da je to zadnja stvar, ki tu-o buggy2. Vse znamko počne mineva ta argument, če se tako izrazim, da Jek, tako da mi ni treba vnesti tudi sam. V redu, tako hitro nekaj upravnih Sporočila. Torej za dele, ki se je uradno začela v prihajajočem Nedelja, boste vedno želeli, da bi, če ga imate, laptop. Če nimate laptop, pa doseči, da mi ga spustite me email. In bomo ugotovili potek dela. Kaj na splošno boste našli v razdelku je, da si del konceptualni del hands-on. Bomo posebej uporabiti del vprašanj, ki je del tega tedna je problem niz, na sprehod skozi nekatere konceptualno gradivo iz predavanja. In to je vse v trenutni nabor problem. In bomo tudi potopite v nekaterih praktičnih aktivnosti, včasih ki bodo morali predložiti, včasih ki ne bo. Na primer, ta prvi teden, oni so mislili enako warm-up vaja. In boste ugotovili, da so ti problemi v resnici prav to. Oni naj bi bili dokaj majhen, vendar ni nujno, da nepomembnih programov za pisanje, ki niso nujno zanimive same po sebi, ampak so dobre priložnosti za vaditi s sintakso, z novimi funkcijami, v udobju oddelek, kjer imate nekaj sošolci predstavljajo kot tudi vaše TF. In kaj bomo naredili s časom uporabljajo orodje, imenovano CS50 prostori, pri čemer namesto da samo z uporabo CS50 aparata, boste Namesto pojdite na spletno stran v brskalniku, kjer boste lahko pisati kodo v oknu brskalnika v oddelku. In potem, če se odločite, lahko vaš sodelavec nato pa kažejo, poučevanje karkoli že je, ali ste vnesli na zaslonu v vašem brskalniku okno gor na pred razredom, ali anonimno ali javno, tako da je on ali ona lahko potem sprehod skozi s vaši sošolci, kaj si naredil dobro, kaj nisi naredil dobro. In spet, ste lahko prepričani, vse to se lahko lepo anonimni. Vendar pa bo to odlična priložnost za veliko več Interaktivnost kot nekaj podobnega predavanju nam. V tem času bomo imeli te stvari imenovane super odseki, ki so obvezna, vendar so odprta za vse v razred, tako da lahko to storite še za kolektivno Problem nastavite eno. Tukaj je razpored. To je prav tako objavljen na spletni strani na cs50.net. Obvestilo, da bom tam heker specifična 1 jutri popoldne. In bomo posneli enega danes in jutri 1 in po tistih dosegljiv v 24 urah. Torej, če ne morete narediti kakšno izmed teh časih, ne skrbi. In spet, razpored je na spletu zdaj na cs50.net. Kar zadeva sam razdelkov, morate gotten pošlji navodilo, da greš na domačo stran seveda, da je bil iz vašega oddelka. Če je življenje spremenilo, in boste morali spremeniti svoj oddelek, ni problem. Pojdi nazaj na istem spletnem naslovu cs50.net/section, ednina, in boste izpolnite obrazec, podoben, tako da lahko potem nam vaše želje. In bomo spremljala do konca tedna, kaj bomo lahko ustreči. Prejšnji teden je spomnil, da smo predlagali uporabo CS50 razpravljali, teku razprava je orodje, v predavanju. Tako smo imeli 40 vprašanj, ki so zastavljena in odgovoriti v predavanju. Zato se je zdelo, da dobro deluje, zato bomo še naprej poskuša to storiti. Če je v predavanju, ki jih ne počutim udobno dvig roko, ni problem. Pojdi na cs50.net/discuss, objavite tam, in eden od naših poučevanja Fantje bodo bodisi odgovoriti v elektronski obliki ali povečati svoje strani v vašem imenu anonimno vprašati, odvisno na naravo vprašanja. In glede na odzive, bo na splošno treba psets vrne v enem tednu. Saj traja nekaj časa za doseganje oddelki ravnotežje, bo prvi pset, 0 in 1, je malo z zamudo, saj se stvari umirijo. Ampak ostanite z nami za to v prihodnjih tednih. V redu, dovolite mi, da na moj resen Glas za trenutek. Torej, to je pravzaprav zanimivo, da so podnebne ob tej razpravi, kaj z vsemi drugimi stvarmi dogaja na kampusu zvezi s tem. Ampak CS50 je zagotovo imela zgodovino ta posebna tema, v kolikor vsako leto za ta postopek, je za mnoge let, Ad-plošče približno 3% v razredu. To zadnje leto, 2011, CS50 Ad-vkrcala na 35 študentov. To ni, mislim, zaradi pomanjkanja jasnosti. Zavedaj se, da je v učnem načrtu teku je, da je stran Izjava pojasnil, kje so linije. Istega izjava se ponovi na vsakega izmed Problem postavlja na stran 1. Zato sem omenil to danes res samo zato, da bi Ljudje se zavedajo tega. In smo poskušali različne stvari. In tisto, kar sem mislil, da bi naredil danes vzemite trenutek, da dejansko pogled na nekatere od preteklih primerov, ki so prišli gor. Namesto da te je umazano malo skrivnost, dejansko poudariti, kaj študentje naredili in kako smo zaznali in res je, kar je najpomembnejši motiv za celo pogovarjala o tem. Torej s tem je dejal, je linija v bistvu je to - po predmetniku, ste dobrodošli, vam svetujemo, da pogovor s sošolci. To je celoten namen imajo te sodelovanje Uradne ure v Annenberg in spodbujanje ljudi za končni projekt za sodelovanje. Vendar pa je črta, ko pride čas, da dejansko napisati vaša končna izbira. Ko že govorimo v angleščini, popolnoma v redu, gledano v psevdo kodi, Čisto v redu. Emailing sošolec vaš pset, dajanje v najem jih gledajo čez Zaslon je v rokah še naprej tipkanje, Sprehodite se po spletu kot tudi. Ali poglej v učni načrt za posamezne linije. Ampak samo za barve sliko o tem, kako je to na žalost realnost, zavedati, da obstajajo spletne strani, tam, da je rešitev iz tega razreda, in mnoge druge razrede. Dejstvo, da ste vi ali približno 3% od vas ve, da to obstaja pomeni, da se zavedamo, da le-ta obstaja. Dejstvo, da obstajajo spletne strani, kot je ta, kjer ste lahko plača nekoga, da dejansko ne tvoj problem sklopov - to je Dejansko drži, da je prišel lani. To je spletna stran imenuje odesk.com. In Tim je bilo ime osebe, ki je bila tukaj objavljate na Ta spletna stran in prosil nekoga, da opravi svoje pset 7 v ta primer. No, odesk.com je zelo Googlu lahko, in smo tudi mi Zelo dobro Googling. Tudi tu so mesta - in to je precej krute, odkrito povedano. [Smeh] David J. Malan: smešna stvar pri tej strani, če preberete O strani, se pogovarjajo o svojih podjetij kultura in kako je njihova pomoč uporabnikom številka ena prednostna naloga, da poskrbite, da vaše naloge dobili obrnil na čas. Toda v vseh resnost, še enkrat, dejstvo, da ta območja obstajajo, se zavedamo tudi, sta zaveda Te vrste spletnih strani. In da vam občutek, kaj predstavlja to na splošno meni, da na splošno nimajo velikih škandalov, kjer so ljudje Sodelujemo na kateri koli velikem obsegu, ampak je to pozno v noč trenutki šibkosti, ko imate tako veliko storiti, je 4:00, ste izčrpani in si misliš da si, dobro, dovolite mi, da pogled na moje cimer je moj prijatelj ali šifro ali podobno. In manifestacije tega žal vključujejo Študent Predložitev kaj takega in oddajo Študentski B kaj takega, kar je vsekakor v računalnik znanost razred, je izredno enostaven za znanstvenike s področja računalništva odkrije s programsko opremo. To je še en skupni vzorec, kjer ste nekako delal skupaj z nekom, mogoče govoriti v Angleščina, čisto v redu, psevdokod. Potem pa pride čas, da dejansko predložiti, in psets Samo se izmenjujejo preko elektronske pošte ali Dropbox ali podobnega. Toda v poskusu, da bi bilo manj očitno, da je to kaj se je zgodilo, potem je to tisto, kar se vpisali. Tudi to ni pot do dobro napisana kosov programske opreme, kot smo dejansko odkrivanje Te vrste stvari. In res, kaj moramo storiti, je teči programsko opremo, ki primerja vse stališča letošnje proti vsem preteklem letu je stališča, proti vsemu, smo ugotovili na Internet pred vsakim delovnih spletni tam. To je vse zelo avtomatizirano. In tako mi je to res v veliki poštenosti do 97%, ki so v resnici delali svoje riti na tem in na drugih razredi in postavljanje v vseh prizadevanju, da bi delo v končni fazi je predložijo svoje. In sem šel na za starosti. To je le nekaj primerov lanskih. Nekaj ​​študentov vpisali te datoteke enako za pset 2, pset 3, pset 4, 5 pset, pset 6, 9 pset. V tem primeru je to kviz 0 in v zadnjem letu, če dve študenti vpisali enako ta stavek med mnogimi drugi, "Zahteva tipa -" pika, pika, pika. Torej, tudi v razredu 600 pa smo odkriti to na vpisali kvizov. Torej na kratko, to - odkrito povedano, sovražim imajo tovrstne pogovor - ampak to je res namerno prizadevanje Letos se vozite navzdol to številko. Ker čeprav smo rekli te vrste stvari vsakih leto, mislim, da je realnost, ki so prebivali na njej nekaj več sekund kot običajno in dejansko samo poudariti, da bi tisto, kar se zdi, kot, eh, ni tako pomembno, vsaj mislim nazaj v tem trenutku, tako da pravičnosti sami in sošolci tukaj. Torej, če ste kdaj imeli kakršnakoli vprašanja, kje vrstica je, prosim stik z mano osebno. Toda odgovor je vedno popolnoma poudarjeno na last minute, gotovina v pozni dan. Ali pa, če je to stvar, ki nima poznih dni, po pravici povedano, mi pišite osebno. Bova nekaj ven. Prosim, ne daj čas tukaj na Harvardu ogrožena. No, sem mislil, da bi morali razbremeniti razpoloženje, zato sem vključena je to na naslednjo stran. [Smeh] David J. Malan: Ta spletna stran je super. Pravzaprav sem malo zmeden. Tam je to ena. In potem je to ena je bila neverjetna. Ok, tako da tega mucka pozno ponoči, ko bodo te odločitve. V redu, nazaj na bolj zabavno in manj resne zadeve, kot pogoji. V redu, smo se pogovarjali na kratko o teh. To je nekaj, kar je verjetno precej seznanjeni z svet Scratch. In v svetu Scratch, imamo to potrebo, včasih iti, da vilice v cestnem prometu. Ali to ali to ali pa to druga stvar. In če hočemo to narediti, lahko uporabimo v C Zdaj, če je to drug konstrukt. In tukaj imamo logičnih izrazov. Na primer, logični izrazi Tukaj lahko ALI jih skupaj, v smislu, da imamo tega pogoja ALI ta pogoj. Mi lahko in jih skupaj, v smislu, da želimo preverjanje tega pogoja in da stanje. In tukaj imamo sedaj stikalo izjavo, ki ni tako Podobno sintaktično za tiste vrste pogojev, vendar je nam omogoča, da to enakovredno, če, če, je še ostalo, če še če in kot ga preprosto naštevanjem jim od primera do primera ga primera do primera. Tako smo videli tiste zadnjič. In potem smo začeli dotika stvari, kot so zanke. Videli smo eno od teh le trenutek nazaj. Vendar pa so ti drugi looping konstrukt. Na primer, tole tukaj. Torej, medtem ko (pogoj), to stvar znova in znova. Torej, bistveno pa je, kar se zdi, da je drugačen od tega zanka in to zanko, medtem ko tukaj? Ta zanka in to medtem ko zanke. Ja? Kaj je to? OBČINSTVO: [neslišno]. David J. Malan: Dobro. Torej, ker je za pogoj zanke, obstaja jasno več sintakso. Tam je to inicializacijo, da je to sprememba. V while zanko, obstaja samo ta pogoj. Tako se zdi, da je to malo v primerjavi omejimo na zanke, kar pomeni, če želimo, da imajo spremenljivke in želimo da incrementation, smo dejansko morali to storil sebe. Torej, naj gredo naprej in odprla gedit. Naj preklopite na napravo. In kaj je samo to hitro malo primer, da razlikuje za enega od njih od drugih. In v ozadju mojih mislih, naj povem eno stvar. Jaz posebej navedena z imenom Tim. Tim je bil nekdo, ki dejansko študent poskušal najti storiti njihova domača naloga za njih. Nismo imeli Tima v tem posebnem poglavju. Torej se zavedaš, da ne bom razkrila študenta, ni bila študentka. To je naključno osebo na internetu počne stvari po pooblaščencu lani. Tako smo ugotovili, da je preveč. Torej, v tem primeru sem, naj gredo naprej in odpreti novo datoteko. Datoteka, Novo. To mi daje jeziček tukaj. Naj gredo naprej in jo shranite kot loop.c. Spusti me in kliknite Shrani. In potem sem dol, gremo naprej in začnite pisati # Vključujejo . Naj povečate palca Zdaj bomo naredili int main (void). Zdaj pa mi gredo naprej in to za (int i = 0; i < oh, 10; i + +). In zdaj bom, da gredo naprej in ga natisnete zvezdo, ki sem naredil prej. In potem na koncu tega programa, smo le, da bo tiskanje novo vrstico, samo zato, da sem hitro Ne izgleda celi umazani. 0 vrne. Zdi sintaktično pravilna? Do sedaj. Torej, da vidimo. Torej, kaj mi pomanjšati, pojdi v svojo terminalsko okno. In naj gredo naprej in zagon zanko, ker sem to imenoval stvar loop.c. Torej, da zanko. Zdi se, da pripravijo OK. Naj teči zanke, zdaj Enter. In zdi se, da natisnejo 10 zvezd. Vzemiva pretvorili v while zanko in videli, kaj vrste vprašanj smo se spotaknil. Torej, namesto tega, spustite me noter in reči, medtem ko je i manj kot 10 - Naj znebiti za zanko. OK, tako da imamo nekaj težav že. Tako stanje je isto, ampak jaz sem očitno manjka inicializacija. Jaz sem zamudila incrementation. Torej, kaj naj bi prevajalnik mi povej, ko sem poskušal sestavi tega programa? Ja? OBČINSTVO: [neslišno]. David J. Malan: Dobro. Torej, to bo rekel kaj takega črno - v tem primeru, sem spremenljivki. In res, uporabite črno identifikatorja i. In tako je to v nasprotju z jeziki, kot so PHP in Python in Ruby, s katero bi se nekateri od vas ne poznajo, kjer si lahko samo nekako začeti uporabljati spremenljivk hočeš nočeš, in ni treba skrbeti za njihovo razglasitev izrecno vedno. V C in v jezikih, kot so Java in C + +, morate biti super jasna. In če hočeš spremenljivko sem klical, mi morate povedati kakšne spremenljivke je. Torej bomo morali to popraviti, kot sledi. Bom moral iti gor in tip int i, zato Imam razglasiti spremenljivko sem klical. Zdaj pa sem preskočil en korak. Sem seveda ne zaceto, toda poglejmo, če je ta v vsaj naredi Jek stop pritožujejo. Torej, kaj mi remake tega programa. V redu, zdaj pa je samo pritožuje zaradi drugega razloga. "Spremenljivka je" i "nezaceto pri uporabi tukaj." V redu, To je precej jasna. Inicializiramo tako, da pomeni vzpostavitev enake vrednosti. In nikoli ne bomo storili, da naj poskusim enaka 0. Zdaj pa poskusimo še enkrat in ponovno zagnati Jek. Zbrani tokrat. In jaz sem na tem, da bi sistem deloval. Toda velika stara neskončna zanka, saj sem naredil inicializacijo, ki sem jih naredil stanje, vendar še nikoli nisem naredil vse vrste incrementation. Torej, kako lahko naredim incrementation? No, v while zanko, se zdi, kot da sem bom moral to storiti v notranjosti zanke, saj podobno kot 1. Primeri tedna za tem zanka konstrukti, kot s nogavice in z lastno štetja, smo morali narediti Nekaj ​​čisto na koncu, želel vrniti v naslednji vrstici. Kaj pa, če grem naprej in to je to i + + tukaj? Ne smemo tudi prevedete tole. Ujemi me že. Kaj je narobe tukaj? OBČINSTVO: [neslišno]. David J. Malan: Torej, to je definitivno ne int. To je i. In zavite oklepaje, kot prej, zamik ni dovolj. Torej, zdaj sem to konstrukt. Torej, medtem ko i je manj kot 10, tiskanje zvezdo, Potem sem prirastek. In tako, medtem ko zanke dela je, da takoj, ko ste zadeti Spodnji del zanke, ki v tem primeru izgleda linije 10, da se bo vrnil na liniji 6, na kateri točki Stanje se bo ponovno pregledati. In če sem še vedno manj od 10, bomo naredili linij in 8 potem 9, potem bomo zadeli 10, in pojdite nazaj na 6, spet in spet in spet in spet, dokler je i manjši od 10. Torej ponovno zagnati, da tukaj. Ok, smo zbrali v redu. Naj ponovno teči zanka. In zdaj se dejansko zdi, da dela. Torej pluse in minuse tu? No, do sedaj tam dejansko ni celoten PLO - srčkan. V redu, to je - ah, to je bila nesreča. V redu, pojdimo nazaj v zanko. Torej za zank lepo, ker oni so zelo jasna. In čeprav si ti malo clunky pisati, to je zelo močan in vam omogoča, da naredite več stvari hkrati. Medtem ko zanke ne zdi, da imajo ogromno vrednost samo še, ker se zdi, kot da smo morali narediti več. Moramo dati inicializacijo tu gor, posodobiti tukaj, in ne smemo pozabiti, da stori vse. Torej bomo videli v času, medtem ko zanke dejansko posojajo sami, da samo različnih kontekstih, različnih podatkov strukture, kot so seznami in hash tabele, boste stvari bomo prišli do Sredi semester. Ampak za zdaj, vem, da je to tretja vrsta znana kot do- while zanko. In smo videli ta kratko. In to je lahko zelo koristno, s pset 1. Vsak čas hočeš nekaj storiti in preverite, če uporabnik sodeloval, in če ni, še enkrat, ne- while zanko, primeren za to vrsto logike. Ker je naročanje od vrha do dna tu predlaga, Ne dobesedno pomeni to. In to znova in znova, kaj bi to lahko bilo? Morda to pomeni, da kliče GetInt ali GetString in nato preverjanje vrednosti GetInt ali GetString in potem kričati na uporabnika, če niso sodelovali in od njih zahteva spet in spet in spet. Če želite narediti nekaj enkrat, Nato preverite nekaj pogojev. Torej, kaj je poskusiti. Naj dejansko spremeniti to zdaj za do-while zanko. In jaz bom, da gredo naprej in ne za naslednje. Torej, naredite naslednje. Naredimo int i = GetInt (), ampak dajmo 1. povedati uporabnika kaj naj naredim. Tako malo tokrat drugače. "Dajte mi int". Zato bom uporabljal printf za to. In zdaj bom šel dol in bom za to medtem ko je i, recimo, je večja - Poglejmo, i, recimo, manj kot 0, ali je i več kot 10. Z drugimi besedami, želim številke od 1 do 9, tako samovoljno. Torej, jaz sem z uporabo kombinirane logični izraz tukaj za poskrbite, da i je manj kot 0 ali večje od 10, pri čemer primeru bom naredil to zanko tu. Torej, še enkrat, to - ko i je manj kot 0 ali i je večja od 10. Torej, zdaj gremo naprej in to je to, ko smo to storili. Pojdiva narediti hitro duševnega zdravja pregled. printf ("Hvala, i je% d", i). Torej, ta preprost program vpraša uporabnika za int, poskrbi, da je v nekaterih razponu od 1 do 9, vključno in potem se zahvaljuje si jih spomnil, kaj so pravkar vnesli v, prav tako kot malo preverjanje zdrave pameti. Toda poglejmo, če to deluje, kot je bilo predvideno. Naj gredo glavo dol in ponovno zagnati, da zanko. Hmm. "Uporaba neprijavljeno identifikator 'i'." To je čudno. Mislil sem, da smo rešili to. Enako simptom, a drugačna oznaka. Ja? OBČINSTVO: [neslišno] v dveh, moramo [Neslišno]. David J. Malan: Točno tako. Torej, to je dejansko nas pripelje na temo, imenovano področje. Izkazalo se je, da je C, še enkrat, res vas popelje dobesedno. In če bi storil kaj takega, kjer ugotovi, int in potem mu dodelite določeno vrednost, vendar pa morate, da je notranjost par zavitih oklepajih, kaj počne C je predvideno, da Samo želim te 32 bitov, znane kot jaz, da obstajajo znotraj V okviru teh zavitih oklepajih, v okviru linij 6 do 9. Torej sem prijavljena in je dodeljena vrednost v vrstici 8, ampak takoj, ko prideš izven 9. vrstica pod oklepaja kodrasti, i ni več področje, tako rekoč. S-C-O-P-E. To ni več v pravem kontekstu. Torej, zdaj ni i, tako da je, kot da bi imeli niti je prijavil na vse. Torej, kaj je potem popravek za kaj takega, če je Razlog za to je, da sem uvrščen v zavitih oklepajih, ki je očitno slabo? Tukaj? OBČINSTVO: [neslišno]. David J. Malan: Ja. Tako bomo lahko inicializacijo zunaj. Torej, naj gredo naprej in izbrisati iz deklaracije dele, s katerim Jaz določiti vrsto in jaz bom naredil tukaj. Torej, v vrstici 5 je zdaj pravi: "Daj mi int." Razpis je i. Obvestilo v skladu 9, ne želim, da to storijo, saj sem že imajo 32 bitov. Ne želim vprašati računalnik za Različni 32 bitov. Želim uporabljati te iste 32 bitov. In zdaj, ker sem prijavljena v vrstici 5 je še vedno zakonit da ga uporabljate v vrstico 11 in linijo 12. Torej, kaj mi poskušali prevesti to in si oglejte če Jek ustavi kričati. da zanko. Torej, zdaj je "implicitno izjavo o delovanju "GetInt" je ničen v C99. "Kaj je to? Ja? OBČINSTVO: [neslišno]. David J. Malan: Ja. Torej sedaj, da sem dejansko uporabo GetInt, to ni nekaj, Samo, da prihaja z C. To izhaja iz CS50. Zato moramo tukaj. In naj se vrnem k takojšnji navzdol tu in ponovno zagnati narediti. Ok, končno. Zdaj, ko smo razrešili to in druge napake. Naj sedaj vodi zanke in videli, kaj se bo zgodilo. "Dajte mi int." Dam mu 11. Dam mu -1. Dam mu foo. Dam ji 5. In zdaj je res deluje. Toda hitro spremenilo z razlogom tukaj. Zakaj je torej ponoviti eno izmed teh časih, ampak mi int druge trikrat? Zakaj je to obnašanje drugačen? OBČINSTVO: Dal ji niz. David J. Malan: Prosim? OBČINSTVO: Ste ji dali niz. David J. Malan: Ja. Zato smo mu dali niz v tem tretjem poskusu, ko sem tipkal foo. Foo je niz. To seveda ne int. In tako, da se je izvajala CS50 GetInt je, da smo ne preverjaj, če se kaj je manj kot 0 ali večje od 10 za vas, saj vemo, kako vnaprej, kaj vrste int želiš? Lahko pa preverite minimalno za vas, pa si vsaj vnesite celo število? In če ni, smo kričati na uporabnika z vpisom "retry" na zaslon. Torej, zdaj imamo program, ki je zanka. Ok. Torej, katera od teh je nekako boljši konstrukt? Torej, to je, če se stvari začnejo dobili malo grdo, Dejstvo, da moraš vedeti, da razglasi spremenljivka tukaj če želite, da ga uporabljate znotraj nekaterih Zaviti oklepaji in zunaj nje. A tudi če se to zdi nekoliko skrivnosten na prvi pogled, samo enkrat, ne pozabite, da preprosto logiko. Da bi lahko uporabljali kaj v C, ali je to funkcijo ali to je spremenljivka, ga morate vključiti, če je funkcija v nekaterih knjižnici, ali morate prijaviti. Ampak zdaj morate biti še posebej pozorni na to, da veste, da ga razglasi v pravo področje. Saj ne, da jih razporedijo premočno znotraj oklepajev. Torej, kaj mi pravzaprav povrne. Če se vrnemo k naši primer od prej, in sem šel nazaj na int, int i = 0; i <10; i + +, in jaz ne printf zvezde, kot je ta, in nato zaprite paren, sedaj printf i je zdaj - po isti logiki, kaj se bo zgodilo, ko sem poskušal sestavi tega programa? OBČINSTVO: Neveljaven identifikator. David J. Malan: Torej je še en neveljaven identifikator, neprijavljeno identifikator. No, razlog je malo drugačna. Tam je očitno brez zavitih oklepajih tukaj, vendar enako Ideja, ista zgodba področja velja. Če ste prijavljeni spremenljivke, kot da sem v notranjosti zanka, tudi če ni izrecno pisno kodrasti oporniki, da jih psihično kot vedno so tam, kjer Primer i velja samo znotraj zanke for. To ne velja, ko prideš v naslednjo vrstico, ki je v V tem primeru je sedaj 10. Torej je le nekaj vprašanj glede obsega in podobnega. V redu, kakšno vprašanje? V redu, to je nekako trivialno majhen program, tiskanje le malo zvezd. Toda poglejmo, če se spomnite te pesmi tukaj. To je neverjetno nadležno pesem, otroci pela na šolski avtobus in podobno. Toda kaj je lepo pa je, da ima to cikličnost, pri čemer je "99 steklenic piva na zidu, 99 steklenic piva. 1 dol, dajati okrog, 98 steklenic piva na zid. "In potem pesem ponavlja 97, nato 96, nato 95, nato 94, vse tja do 0, če ste dejansko dobili, da če na avtobusu. Torej, to je lepo program za neke vrste stroju, ker mi Bog, če bi si to izvedli z nekaj vrstic kode, lahko izpljunila celotno lyrics to Pesem precej hitro. Toda na poti, lahko začnemo zdaj draži razen nekaterih od teh osnovnih looping konstruktov in zdaj tudi uvedbo funkcije, ki smo si jih napisal, vrne vrednosti da se peljemo okoli. Ampak najprej, zakaj ne gremo naprej in da smo pet minut odmor tukaj? In ko se vrnemo, bomo peli to pesem. V redu, tako da smo nazaj. In ko rečem, da bomo zdaj poje to pesem, mislim, Programsko, ne pa verbalno. Torej, tukaj imamo beer1.c, ki je eden izvajanje tega Zlasti pesem. In tako mora biti jasno, za tiste, ki ne poznajo, kaj ta stvar izgleda, naj grem naprej in da beer1, Enter. Zdaj pa mi deluje beer1 in kaj bomo videli - koliko steklenic piva ne bo? Jaz bom vnesite v 99, kot pravi pesem. Enter. In zdaj, če bomo pomikate - ojej - če se pomaknete skozi vse to, bomo videli, da To je dejansko poje celo pesem. Čakaj malo. Moj drsnik je malo zamočil. Naj uporabi večje okno. Torej beer1, 99 pa gremo. Torej, tukaj imamo celo pesem, poje veliko hitreje z računalnik, kot bi lahko bilo z nami. Torej opazil, čeprav na ciklično naravo tukaj. Pravi 99, nato 99, nato pa "vzemi dol, ga posredovati okrog ", nato 98. In zdaj ponavlja spet in spet. Torej, to je pravzaprav odlična priložnost za neke vrste zanka konstrukt. Obvestilo, da sem nekako rezanje kotiček tukaj. Obvestilo, da sem rekel "98 steklenic piva na zidu, 97 steklenic piva na zidu "in da je bilo samo zato, da ko pridemo na eno steklenic piva, nimam skrbeti za angleške slovnice. Lahko pa tudi to popraviti z malo, če stanje, morda. Če je ta številka ednini, pojdi naprej in reči "steklenice", drugače, če je množina, torej "steklenice". Ampak za zdaj, sem popolnoma rezanje tega kota. Torej, poglejmo, kaj imamo tukaj. Torej imamo nekaj pripomb na vrhu. Jaz sem tudi ta dva knjižnice, kot je smo bili pogosto. In zdaj naj se pomaknite navzdol na prvo dejanska vrstic kode. Vrstica 17 se začenja glavni. Linija 21 in 20 je, koliko steklenic piva ne bo? In potem sem poklical GetInt. In zdaj imam malo zdrave pameti pregleda. Torej, to je dogovor, da bomo danes začela sprejemati to strožje preverjanje uporabnika prispevek. Včasih si ne želite, da jih pozove, znova in spet in spet. Če uporabnik polomi in ne sodeluje v redu. Zaprite in samo ne ukvarjajo z njimi. In da je to, kar delam tukaj. Če je n manjši od 1, grem kričati na uporabnika, "Žal mi je, da nima smisla." In potem bom samovoljno vrnil 1. Torej, še enkrat, to je samo dogovor, da se privadite. Za zdaj, ga vzemite v veri. Ampak do sedaj, smo vseskozi vrača 0, saj sva rekla vračanje 0 pomeni kaj? OBČINSTVO: Uspeh. David J. Malan: Uspeh, to je vse. Torej, zdaj, da smo končno začeli razmišljati o ne-uspeh - z drugimi besedami, kotiček primerih, napaka pogoji - Zdaj imam neskončno dobavo ali vsaj 4000000000 možne stvari, ki lahko gredo narobe v mojih programov. In lahko začnem dodeljevanje jih posamezne številke. No, na splošno zadošča samo vrnitev nekaj drugega kot 0. Torej bomo samo vrniti 1 za zdaj. A razlog za vrnitev 1 je, da takoj, ko se vrnete 1, ugani kaj se zgodi s preostalim programom? To ustavi. To je to. Zato je dejstvo, da sem vrnil 1 dejansko kratki stik Ta program je izvajanje tako, da nič pod pragom 27 se bo nadaljevalo izvajanje. Takoj, ko je glavni napovedi, to je to. V redu, če uporabnik ne sodeluje in pridemo linijo 30 ker so vnesli v zakoniti več, tukaj je moj Izvajanje te pesmi. Torej, najprej natisnite znak za novo vrstico, samo za estetika. Sedaj imam za zanko. In opazil, da delam stvari malo za drugo smer. Nimam narediti manj, kot mi ni treba narediti + +. Ne morem reči, namesto da bi inicializacijo spremenljivke i, nastavite enak n je število uporabnik vnesli, naredite naslednje, da Dokler je i večji od 0, i - Ko končate ena ponovitev te zanke. Tako bomo lahko odšteva z uporabo zanke for, kot dobro. No, to je precej teden 1 stvari zdaj, z printf. Torej print "% d steklenic piva na zidu." Print "% d steklenice piva. "" Vzemi dol, ga prenesti okoli. "Print "% D steklenic piva na zidu." Torej je še% d, vendar opazili, da argument, da printf se spreminja. Vejico, jaz imam, ker želim povedati 99. Po tem vejico, jaz imam, ker želim povedati 99. Po tem vejico, ki sem jih jaz - 1, ker želim povedati v 98 to prvo ponovitev, in tako naprej. In zdaj tukaj, sem nekaj neumnega malo pripombo. In potem linija 42, se vrnem po dogovoru 0, kar pomeni, da vse je v redu. Pa kaj, če sem usekal mimo? Kaj lahko pogosta napaka tukaj? Pa kaj, če sem slučajno rekel, dobro, želim, da računajo do 0, hočem 0 steklenic piva na zidu? Zato sem rekel, sem večji ali enak 0. Kaj se dogaja, da je znak, da sem zdaj vidim, če sem prevedem beer1 in ga zaženem? OBČINSTVO: Ne. David J. Malan: Ja, vse bo šel negativen. To je off-by-ena napaka, neverjetno pogosta napaka, da bi. Pojdimo dejansko šel nazaj v terminalsko okno in to tukaj, tako da bomo videli več hkrati. Vpišite, 99 steklenic piva. Blizu, vendar smo se vedno tako malo predaleč. Smo zapeli pesem predaleč navzdol, tako da je zdaj hit negativno število. Torej ni čisto delo. V redu, tako da bomo lahko določi, da se vrnemo nazaj na Tako je nekoč bil. Ampak kaj so nekatere možnosti za zdaj izboljšanje? No, naj odpre beer2.c in se pomaknite navzdol in se tukaj poglej to različico. Kaj je prva stvar, ki skoči ven na vas kot drugačni v tej različici tukaj? OBČINSTVO: [neslišno]. David J. Malan: Ja, nič več jaz, saj je prišlo do jaz veš kaj, jaz vprašam si za n, potem pa sem o določitvi i enaka n, potem pa sem spreminjajo, toda nikoli nisem dotika n znova. Torej, kaj za vraga je bilo bistvo vas dodeljevanja še 32 bitov se imenuje i samo zato, da sem lahko imajo različne spremenljivke? Torej v tem primeru, sem nekako priznala, da ni potrebno oblikovna. In jaz sem zdaj reči, medtem ko je n večji od 0, pojdite naprej in natisniti isto pesem, ki poteka tudi na n printf kot Drugi argument, n - 1, kot drugi argument tukaj. In potem na vsaki ponovitvi te zanke, pojdi naprej in preprosto padanje n sama. Zdaj, funkcionalno, je ta program bo enaka. Če sem tipa na 99, n se začne ob 99. Jaz padanje, padanje, padanje, zmanjšaj. Jaz bom dobil vso pot navzdol do "eno steklenico piva na zid, ena steklenica piva. 1 Bodite navzdol in ga prenesti okoli. 0 steklenic piva na zidu. "Na koncu, ker sem se pogoj pravilna. To je večje od 0.. Nisem naredila to napako. Torej, kateri je boljši, različica 1 ali 2 verzijo? Slišala sem, da kup mrmljanje za dva. Zakaj dve? Kaj je to? OBČINSTVO: [neslišno]. David J. Malan: Oh, v redu. Torej, da ne bo šel pod 0, vendar ne pozabite, v različici 1, prvotna pravilna različica ni šel pod 0 obeh. Torej, ne pozabite, da je to pravilna različica. Torej je vsaj primerjamo obe pravilni različice. Kaj je argument v prid različici 2 počutje, mmm, bolje? Ja? OBČINSTVO: To porabi manj prostora. David J. Malan: Ok, tako da porabi manj prostora, kajne? Ker različica 1 se uporablja 32 bitov za n, nato pa še 32 bitov, i. Različica 2 uporablja le 32 bitov za n, tako da Zdi se, da plus. Druge misli? Ali kdo rad govori v prid enega? Ja? OBČINSTVO: Moraš uporabiti dodatne kode za n -. David J. Malan: Ok, seveda. Torej, da je pošteno. Torej je to samo, vsaj zame - Mislim, to je dejansko počuti malo Orlova, dejstvo, da Ne morem nekako zajame vse moje logike v enem lepa črta, za zanke, saj je za zanko lahko. Tukaj sem nekako moral prečenje o tem n - konec zanke, saj to je logično potrebno. Ampak nekako drgne me narobe, samo zato, ker Zdi se, ločen od logike tukaj, čeprav spet je to potrebno. Druge misli? Ja? OBČINSTVO: [neslišno]. David J. Malan: Ja. Pa kaj, če boste namesto tega na koncu pesmi, je želel natisniti znova ime pesmi? Kot "Hvala za igranje 99 steklenic piva", ali kaj neumno takega? Ampak bistvo je, da si je želel imeti dostop do prvotne vrednosti. Dejstvo, da ste mutiral ali spreminjati n na vsaki ponovitev, zato so uničili njeno izvirno vrednost pomeni, da si ne morem narediti konec. Zdaj, verjetno, da očitno ne želijo narediti da je v tem programu. Torej, koga briga? Ampak to je zelo veljavno točko. In če sem iskren, zares nihče Pravica odgovor tukaj. Oba sta enako pravilne. Jaz bi se lahko prepričan v obe smeri. Bom rekel, da na splošno, je dobro načelo, če prosil si za neko vrednost in jo shrani v spremenljivko kot n, nekako na načelu, da je verjetno dobra obdržati, da je okoli. In vsi podatki, ki jih želite mutirajo znova in znova, samo daste kopijo te spremenljivke, tako da boste dostop do originala. Vi ste porabili 32 več bitov, ampak v resnici je to Računalnik je kot, 2 GB RAM-a, v teh dneh, in smo quibbling nad 32 bitov? Res ni tako velik posel. In tudi na tej napravi tukaj, s pol gig ali GB RAM-a, v primerjavi z 32 bitov 64 bitov, ni tako velik posel. Seveda danes pa se dogaja, da se tako preobremenjeni z velikostjo iz samega programa, ki se bo več sto kilobajtov, če ne nekaj megabajtov, te dni. Torej, utemeljeni pomisleki, nihče ni pravi odgovor. Ampak vsaj to so misli, ki bi se morala začeti gredo po glavi? Ker v pset 0, čeprav smo res samo pričakovati pravilnost ali vsaj zavrača različne žuželke, da boste morda srečujejo, kot smo korak naprej, dizajn bo še en ključni vidik, in sicer za pisanje kode in tudi naši oceni kodo. In tako vsaj mislili, da bi stvari, kot je ta. In samo zato, ker nekaj dela, še ne pomeni, da je dobro, ne pomeni, da je dobro zasnovan. In to je ena od stvari, učne in tovariši Problem določa bomo lahko draži del v daljšem časovnem obdobju. No, kaj pa, recimo, to različico tukaj? Naj naredi nekaj malo seksi tu v trenutku. Najprej naj se znebite tega. In zdaj pa spravimo to slovnično vprašanje. Torej, v tej različici, želim popraviti slovnico, tako da ne samo, da parenthetical je, kot je "steklenice" ali "steklenice" - Ne želim, da nehaj s tem kotiček - Prav tako bi rad dinamično natisniti besedo "steklenice" ali "steklenice", pri čemer uporaba teh% s ograde danes. Torej moram pogojno preverite, kaj je vrednost i. In če je 1, hočem reči "steklenice", in če je kaj drugega, bi rad povedal, "steklenice". Torej poskusimo to storiti. Torej, če sem == 1, potem pa naj gredo naprej in ugotovi - Rabim niz, tako da mi ne String s1, ker je Prvi niz me skrbi sedaj. Jaz bom rekel "steklenico". In potem, da vidimo, niz s2 - in bom razložiti, kam grem v trenutku - "Steklenice". Tako opozarjajo, da v tej pesmi, moramo biti sposobni tiskanje stvari, dva različna besed lahko. Torej, če pogledamo nazaj, ko je opazil, da smo prišli do ta primer tukaj, "dve steklenici piva na zidu, 2 steklenici piva, eno dol, ga prenesti okoli "Rad Ta četrta vrstica za zdaj rekel "eno steklenico piva na stena ". Torej moram odločiti, kaj želim povedati," steklenice "ali "Steklenice"? Tako bom rekel samovoljno, vse v redu, Grem zdaj razglaša za spremenljivko z imenom, s1 niz 1, da se dogaja, da se vklopiti v tukaj in tudi tukaj, ker te besede so vedno enaki, samo zaradi Narava pesem. In jaz bom poklical s2, kar beseda želim sčasoma pojavijo tukaj. Zdaj, dobesedno, 99 primerih od 100, to se dogaja, da se enako v obeh primerih, saj je množini 3, 2 je množini, 4 je množina. Toda v tem primeru kotiček, kjer pridemo do 2, nato 1, ali 1 in nato še 0, moram to logiko. Torej moram preživeti nekaj časa v mojem kodo dobili to pravico. Torej, če naredim to, če je i == 1, potem iz s1 enaka "steklenice" in s2 enaka "steklenice", saj bo to za 1 steklenice, in to bo za 0 steklenic. In to, kaj to pomeni? Samo, da je jasno. To je samo komentar. Zato je dejstvo, da lahko imajo eno linijo komentarjev vam pomeni lahko komentira svojo kodo, kot je ta, vendar je še en skupni paradigma tudi, da če imate super kratek stavek, ki hočeš, da si dal in to je samo bolj berljivo, naj prav na koncu vrstico kode, lahko absolutno naredil kaj takega. Torej, kaj zdaj, če to storim? If i ni enak 1. Torej bang enaka - Klicaj je znano kot "pok". Torej bang = 1. Torej, če jaz ni enaka 1, kar naj namesto tega želiš? No, prva beseda želim biti, kaj? Torej bi morala biti niz 1 "steklenice" za pluralnih steklenice, in potem bo to pluralnih "steklenice", kot tudi, za zdaj. In bomo videli, če je to dejansko pride do nas če želimo iti. Torej, zdaj, če sem se pomaknite dol, da vidite, da sem priklopom ne samo jaz, ampak s1. Jaz sem priklopom na i in S1. In potem sem, da sem minus 1, kar je enako kot prej, vendar s2. Z drugimi besedami, želim angleško besedo za spremembo na po tej logiki. Sedaj pa je že nekaj težav v tem zakoniku. Kaj je že pobegnil iz vrata tukaj? Ja? OBČINSTVO: [neslišno]. David J. Malan: Točno tako. Tako sem že prekršil nauk uporabe. Tako sem s1 in s2 prijavljeni, vendar sem to storil znotraj Zaviti oklepaji, kar pomeni, ja, se bo ta številka do dela do linije 42, ampak takoj, ko sem udaril črto 43, ugani kaj ne ne obstaja več? No, veš kaj ni več v področje uporabe - ne s1 ali s2. Zato moramo to popraviti. Torej mi zbrisati izjave. In jaz bom zapustiti imena spremenljivk in to izbrisati tukaj in to izbrisati tukaj. In kaj linije bi res izjavi te stvari? OBČINSTVO: [neslišno]. David J. Malan: Ja, verjetno desno gor, 33-ish. Torej String s1 in s2, nato niz. In izkazalo se je, ne morem narediti tega. Če ste razglasitvi dveh spremenljivk istega tipa, lahko dejansko samo uporabo vejice in to, da je v vseh C. V redu, sedaj imam dve spremenljivki - s1 in s2. Jaz sem jim dodelite vrednosti v teh Pogoji tukaj ali tukaj. In potem sem jih uporabljajo spodaj. Kako dobro je to zdaj greš v službo? No, to je še vedno malo Otroški voziček, ampak dajmo vsaj glej kako daleč smo gotten. Torej, naj gredo naprej in da beer3. Je to beer3? Ja, to je beer3. In zdaj mi gredo naprej in zagon beer3. 399 99. Mi lahko preskočite verjetno večina od njih. In tukaj, poglej si to. "Ena steklenica piva na steni, ena steklenica piva, da 1 določa, dajati okrog, 0 steklenic piva na zidu. " Ampak jaz sem risanje vašo pozornost na samo polovico raztopine. Nekako sem zamočil. Tako se zdi, da so kotne primeri, ko sem znaša kar 2 vrednote? OBČINSTVO: 2, 1. David J. Malan: 2 in 1. To ni 1 in ne 1. To je res le zadnji dve kitice te pesmi. Torej, kaj sem namesto želite narediti? Zato sem se zdi, da so ujeli primer, ko, če je i == do 1, potem prva beseda je "steklenice", ampak druga beseda je "steklenice". Ampak tukaj, želim, da se to spremeni, da == 2. In če je temu tako, kaj hočem Prva beseda je? OBČINSTVO: "Stekleničke". David J. Malan: "Stekleničke", tako da za dve steklenici. In potem bi ta beseda tukaj - OBČINSTVO: "Bottle". David J. Malan: "Bottle", ednina. V redu, dajmo pomanjšanje nazaj sem ponovno zagnati, da, re-run beer3, tip 99 še enkrat. V redu, "Segmentacija napaka (jedro dampinških)." Kaj sem naredil narobe? OBČINSTVO: Vi nimate vrednost [neslišno]. David J. Malan: Ah, odlično točka. V redu, torej kaj je tukaj narobe? Torej napake segmentacije, in smo dejansko dogaja za prikaz to kar nekajkrat v prihodnosti, namerno. Ampak za zdaj, kaj to dejansko pomeni? Segmentacija napaka skoraj vedno pomeni, da imate nekako poskušali dostopati do pomnilnika RAM v računalniku, ki ni v vaši lasti, ki ste jih dejansko ni vprašal operacijski sistem za. Torej, v tem primeru opazili, kaj sem naredil, kar je pomanjkljiv v moji logiki. Imam namenski S1 in S2 vrednost, če i je enak 1. Jaz sem tudi naredil, če i je enak 2. Ampak nisem naredil v neskončnem številu drugih možnosti - še zlasti, 3 ali 4 ali pika, pika, pika, 99. Tako bi se lahko določi za ta bodi lets ' imeti drugega pogoja. In pusti me noter in rekel s1 enak - Kaj naj bi bilo tukaj? OBČINSTVO: [neslišno]. David J. Malan: "Stekleničke", saj so v skupnem primeru, to je samo eno in isto. Tako znaša citiram, konec citata, "steklenice". Torej za množini steklenice, nato pa sem, pluralnih za steklenice. Ok, zdaj pa grem nazaj v svojo terminalsko okno, prevedem, ga ponovno zagnati. 99. Vav. In kaj je naredil hiter pregled razumnosti. Tehnično, bi želeli prebrati vse to se prepričajte oni so res, vendar pa si poglejmo vsaj znanih krivci. 3 steklenice, plastenke, 2 2 steklenice, 1 steklenice, 1 steklenica, 0 steklenice. Zdi se, da se je vsaj za zdaj določen. Ampak ulov tukaj je, da tisto, kar Bog grozna zmešnjava je to Samo za reševanje neumna 1-mestna slovnično podrobnost. Torej je neke vrste razlog, da sem to zmanjšanje kotiček prej, saj je samo popolnoma siten, da so za napisati to veliko kode. Vendar se je izkazalo, da je nekoliko bolj elegantne načine izraža točno isto stvar. In to lahko naredimo na naslednji način. Naj pustim na zaslonu za trenutek in uvesti nekaj znan kot trikomponentne operaterja. To je nekako vse na enem podlage, ki je samo mišljeno, da bi naše živi malo bolj seksi, kot je obljubil. In jaz bom naredil takole. Daj mi niz imenovano s1 in me pusti dodeli, kot sledi. (I == 1)? "Steklenice", sicer pa "steklenice". String niz2 dobi (i == 2)? "Steklenice", sicer pa "steklenice". Torej, kaj je potem razlika tu? Ti dve vrstic kode, zagovarjam, lahko zamenjati vso to zmešnjavo. Zato pravim, da nered, samo zato, ker mi nekako drgne narobe, da je tako veliko vrstic kode. Ni narobe. Ni slabo načrtovanje. Všeč mi je, to je popolnoma pravilen in popolnoma v redu. Ampak kodiranje postane dolgočasno, če imate, da izrazi sebe, tako Prekleto posebej znova in znova in znova z lahkoto scenarij, kot je ta. Torej C ima nekaj bližnjic, kot je ta. Torej je to v bistvu pravi, razglasi niz imenovano s1 in dodelite bodisi to vrednost ali je ta vrednost, če je i == - Žal moram povedati bolj jasno. Ugotovi spremenljivka, s1, mu dodelite to vrednost, če je to res. Sicer pa mu dodelite to vrednost. Torej, z drugimi besedami, to je neke vrste enovrstični način pravim, če pa delaš, ampak nalogo na poti. Torej, če je i 1, potem pojdi naprej in rekli "steklenice". In potem je to drugega, imenujemo "steklenice". Medtem, s2, 2. Beseda, ki jo moramo opredeliti, če i je enak 2, bomo nastavite na "s2 steklenici". V nasprotnem primeru jo nastavite na "steklenice". In kaj to pomeni, da je zdaj morem iti skozi to in izbrisati vse te vrstice kode. In ko rečem, nekoliko smešno, da je to zdaj seksi, to je bolj seksi na vrsto slogovne smislu. Dejstvo, da je funkcionalno ta oznaka se dejansko dogaja, da narediti točno isto stvar. In čeprav je morda videti nekoliko skrivnosten na prvi pogled, saj smo videli ta konstrukt, ne prej, sem trdijo, da je na koncu bo toliko bolj čitljivo in tako veliko lažje za ljudi, da smo nekako razumeti, ker zdaj lahko samo prebrati Koda vse v eno vrstico. To je še vedno pisane v duhu, da če je, kjer je to stanje in potem je to tisto, kar je notri, če in to je tisto, kar je znotraj drugega. Vendar pa lahko to storimo samo veliko bolj elegantno. In če bom šel nazaj v mojo terminal, potem ko izbriše vse teh vrstic in jih nadomestili s samo teh dveh, prevedem, ponovno zaženite steklenice piva s 99, obvestilo, da je moja slovnica je v resnici še vedno pravilen. Torej, še enkrat, nekaj za začetek. 2 steklenici piva, 1 steklenica piva. Zgleda v redu. Ja. Torej imamo veliko več zgoščen rešitev. Torej tudi to, kot ste dobili bolj udobno s C, ne nujno s prvim pset ali celo drugi, vendar zavedajo, da lahko ti konstrukti nam omogočajo, da stvari nikoli bolj elegantno. Zdaj pa naredimo še eno stvar. Naj gredo naprej in odprla return1.c. Zdaj pa začnimo rešiti še en problem na način, ki nam omogoča, da napišete bolj sofisticiran kodo. Torej, tukaj je preprost majhen program, katerega cilj v življenju je prirastek vrednosti. In dejansko, naredimo korak nazaj. Naj to storijo sami. Naj ne vključi in int main (void). In mi pravimo increment.c. In kaj bi rad naredil? Grem, da gredo naprej in rekel nekaj podobnega - bomo klic številke, enaki - int x. Torej, int x dobi 2; printf x je% d, nova, x. Torej sem tipkanje hitro, ampak nekako znane stvari zdaj. Potem bom naredil x + +. Potem bom izpisal isti stavek znova. In potem se bom vrnil 0, samo da zaprete program. V redu, to je program, ki povečevanja števila. To se dogaja 1. inicializirati nekaj 2, nato pa je bo to prirastek in jo znova natisnite. Torej, kaj je teči prirastek, neverjetno preprost program. Recimo zdaj, ko želim kocka vrednost, to Nekaj ​​od naključja. In dejansko sem hotel narediti x dobi kocko za to. Tako sem lahko uporabite tisto, kar se imenuje funkcijo pow, jaz pa ne vem, kje je še. Torej bom to na staromoden način. x-krat ki je enak x-krat x-krat x. Torej sem cubing vrednost, da se pomnoži s sebi znova in spet in spet, tako da smo dobili moč z dne 3. v tej zadevi. Torej, zdaj je treba številke, bi moral biti natisnejo, kot bomo videli tukaj - da prirastek, tako da je dejansko ni res prirastek več, vendar bomo zapustili ime samo - 2 in nato 8. Zdaj imamo začetke priložnost za izpopolnitev Tukaj, v kateri se ta cubing stvar pomnoži število sama po sebi sama počuti, kot je to lahko samo Koristno bi bilo, kot funkcijo, podobno kot je nekdo odločil, leti - saj veste, nekako koristno, če bi kdo od nas usede printf in piše, da bi lahko ostali svet uporabljati, Zakaj ne bi sedli in napisali funkcijo imenovano kocka da pa to cubing za nas, da nam ni treba ročno izvajati pojem cubing vrednosti tukaj? Torej preprost primer, ampak gremo naprej in uporabljati to pa je tudi priložnost, da napišete svoje funkcije. Do sedaj smo le, glavni, mi pa smo se uporabljajo za druge ljudi funkcije, vendar nismo napisal svoje. Torej, gremo. Grem, da gredo naprej in napišite funkcijo imenovano kocka. In jaz bom moral to vzeti vložek. Torej vložek se bo število. In kaj je naredil? To se dogaja, da ugotovi, int izhod = vhod vhod krat Časovni vhod. In potem se dogaja, da se vrnete, da je izhod. In potem moram biti posebno zdaj. Ta funkcija vrača int. Torej, tukaj pa je, kako bi lahko napišete svoje funkcije. Morate najprej odločiti, kaj je ime vašega Funkcija bo. In na splošno, kaj je dobro obrazložitev, zato bom call it kocka. Potem morate navesti, kaj se dogaja, da se vrnete, kaj je njena proizvodnja bo. In nimamo veliko možnosti, da še ni. Int, char, float, int, string. Za zdaj bom s palico notr, ker hočem vrne celo število. Potem morate navesti, kaj njegovi vhodi, če sploh, so. In če se kocka argument, traja nekaj med oklepaje, boste morali dati ta argument ime, tako da lahko imenujemo tudi nekaj, kot ste izvedbenih ali pisanje to funkcijo, in imate, da ga tip, ki je v tem Zadeva se bo int. Torej na kratko, kocka je funkcija, ki traja celo število na vhodu in vrne celo kot proizvodnja. Torej, kaj je naredil s tem vhodu? No, v vrstici 14 pa izjavljam spremenljivko z imenom proizvodnje, in jaz mu dodelite vrednost, vhod krat vložek krat vhod. In potem se bom vrnil proizvodnjo. Torej, kako se uporablja to potem? Kaj moram spremeniti te poudarjene znake na spletu 7, ki se, pa ti misliš? OBČINSTVO: [neslišno]. David J. Malan: Ja, kocka x. Torej je x spremenljivka, kar pomeni, da ima neko vrednost. Na srečo, to je za celo vrsto. In ker je x int, to pomeni, da bom lahko preide v kocke. In čeprav sem nujnimi vrednosti x z vrednostjo kocke x, tako kot v primeru doslej, kadarkoli imajo enak znak in kode, vsebine na desni gets izvajajo in potem se dodelijo Vrednost na levi strani. Torej, da bi dejavnosti, ki je, kot bi si upamo. Tako to deluje? No, pusti me tukaj. Naj odpre svojo terminalsko okno. Naj ne bo prirastek, Enter. "Implicitne izjava" kocko "funkcija je neveljaven C99. "Kot prahi, C99 nanaša na jeziku C, kot je bilo opredeljene leta 1999, ki je bila sprememba v različici iz 1989, ki je sprememba v izvirniku. Tako, da je vse to pomeni. Torej, kaj to pomeni, da je "implicitno izjavo funkcija 'kocka «je neveljavna?" To je tukaj. Prav je, da v vrstico 12. OBČINSTVO: [neslišno]. David J. Malan: Kaj je to? OBČINSTVO: To ne prej. David J. Malan: To ne prej. Torej, to je stvar. C je malo butast, ali C prevajalniki so malo butast. So res samo to, kar si povedal, da storijo. In predvsem, samo brati svojo kodo vrha do dna, od leve proti desni. Torej, če prevajalnik, Jek, bere svojo kodo, vrstica 1, je Številke, kako to storiti. Oh, prihaja glavni. Ok, naj gredo naprej in razglasi, da je spremenljivka x. Naj natisniti nekaj. Line 7, kaj za vraga je kocka? Ni prijavljeni v stdio.h. To ne pride v C. nimam pojma, kaj naj naredim. In tako Jek samo bails in zapre s tem sporočilom o napaki. Tako bomo lahko to popravimo na več načinov. Mi lahko naučili kar Jek kocka je le za premikanje po deklaracija. Zato sem izreži in prilepi na vrhu je glavni. Zdaj zavedaš, da samo zato, ker ni več glavna prvič, da je še vedno izvaja privzeto. Glavni je glavni. To je privzeta funkcija ime. Ni važno, če je v datoteki. Ampak zdaj vsaj Jek je videl kocke, preden jo uporabite. Torej, poglejmo, če Jek je srečnejši zdaj. Naredite korak, pa si sestavi tokrat. Naj teče prirastek. In res se zdi, da se dela. Sedaj lahko prišli do scenarijev, kjer na koncu to ni izvedljivo, da bi dal vse funkcije nad vse druge funkcije. Boste dobili zaljubljen v to neskončno zanko, v resnici, če ta tip hoče biti tu, vendar je to človek mora biti tam. Tako, da ne deluje vedno. Torej, na srečo, C je bolj elegantno rešitev. Bom dal to nazaj, kjer je bil, ker sem Raje, kot Načeloma da je glavna vedno Na vrhu, saj je samo lepo videti, kaj ta program pa privzeto. In kaj bom naredil tukaj se ugotovi, kako se imenuje prototip. Bom ponovno razglasila svojo funkcijo kocke, ki jih dobesedno kopiranje in lepljenje. Pravzaprav, to ni dobesedno. Tako dobesedno kopiranje in lepljenje linijo 15 tam zgoraj vrstici 6. Ni važno, kaj je ta postavka konča na. To se zgodi, da je na vrsti 4. Ampak to mora biti pred glavno. Toda opazili razliko. Line 4 konča s podpičjem, kar pomeni, hej, Jek, sprejme mojo besedo za to, da obstaja funkcija pozval kocko, ki bo int in vrne int. Ampak ne bom povedal, kaj je še. Samo vem, da obljubim, da vam povem na koncu. In res, zdaj je v redu, da je to tam spodaj. Torej, to je na splošno bolje, ker potem na vrhu datoteka, si lahko samo Klepetanje off, hitro ognja, eno vrstico vsak, kaj imena svojih funkcij so, kakšne so njihove Vložki so, kakšni so njihovi rezultati so. In da bi bilo bolj jasno, vhod na splošno pomeni navedbe ali parameter, sinonima. Izhodna pomeni vrnjeno vrednost, kaj počne roko nazaj k meni. Torej, v tem primeru v tej zadevi, je bila razglašena za kocko na vrhu, vendar opredeljene, znane kot se izvajajo na dnu. Torej, zdaj gremo nazaj in ponovno zagnati to. Torej, zdaj pa grem naprej in ponovno zagnati, da, ponovno zaženite prirastek. In zdaj se zdi, da se dela v redu. Sedaj lahko gremo naprej in upoštevani ven nekaj podobnega Pivo primer v tej četrti različici. Torej, naj se pomaknite dol. In opazil, da sem nekako vzel k srcu to lekcijo šele zdaj. Dejstvo, da sem pel isto kitico in spet Znova in znova isti refren vrstica v pesmi, čutil Rad zakaj nisem dejavnik, ki v funkciji? In res, bi to morala biti ena izmed motivov. Poleg dejstva, da bi lahko kdo drug na svetu želijo Za uporabo funkcije kocke - to je dober razlog za faktor nekaj ven in napišite lastni meri funkcija - če je kos kode v svojem programu, ki omogoča preprosto konceptualne občutek, da nekako želim, da ga ime - tako kot v tem primeru, refren - potem lahko podobno zapisal, da kot samostojne funkcije. Če ne bi bilo treba napisati vse v glavnem, če je le meni čistejše, da ga izločiti in ji dati ime. Torej v tem primeru je, da vidite, da imam pripombo na vrhu Ta funkcija, ki samo poje o navedene številke steklenic. Obvestilo sem, da mi ni treba klicati teh stvari, vhod in izhod. V bistvu je to čas, sem poklical moj vstopni b za steklenico. In opazil sem, nična predlaga, kaj? Ta zbor - OBČINSTVO: ne vrne. David J. Malan: Ne vrne vrednost. In res, funkcije ne bi bilo treba vračati vrednosti. Pravkar lahko nekaj naredimo. Lahko imajo tako imenovane neželene učinke, ki so v ta Primer je samo cel kup tiskanja na zaslonu. Torej, opazil, da je ta oznaka tukaj, sem dobesedno le ukradla Prejšnji primer. Edina razlika je, namesto i uporabljajo kot moji spremenljivka, jaz sem zdaj using b kot moj spremenljivko. Torej imam b tukaj, imam b tukaj, imam b minus 1 tukaj. Toda koda je popolnoma enak. Ampak samo da ti pokažem, kako se sedaj lahko to izkoristimo, pusti me naprej in dejansko spremenili, da je to za zanke. for (int i = n; i> n; i -). Tako sem ukraden, da iz naše prejšnjem primeru. Prej, da je v skladu 37, da bi jaz začel poje pesem to siten. Toda namesto, grem zdaj poklical zboru i. Done. Torej, zdaj v vsakem ponovitvi te zanke, kličem te druge funkcija, zbor, ki sem se je zgodilo, da napišete. To ni napisal nekdo drug leti. Toda zbor, medtem, uporablja printf za tiskanje od teh štirih vrsticah. Toda dejstvo, da kličem refren vedno znova zanka pomeni, da bom dobil na koncu, Točno ista pesem, kot sem doslej. Torej na kratko, zdaj, če se ozrem na mojo kodo, čeprav funkcionalno je to enako, ugotovimo, da je že kaj bolj berljiv. Ne vem, kako točno GetInt se izvaja. Odkrito povedano, ne vem, kako se izvaja zbor. Ampak to sploh ni važno, da me. Me ne zanima, ker se zdaj lahko nekako, kot človek, preberite to od vrha do dna. In ker se funkcije, imenovan v skladu s tem, kar so storiti, moja koda je bolj berljiva. In kot naši programi dobili veliko bolj zapleten - do konca semestra, boste pisal na stotine vrstic kode v jezikih, kot so PHP in JavaScript in podobno - boste ugotovili, da je tako veliko lažje, kot da bi spremljali kaj si naredil. In ko začneš sodelovanje s prijatelji ali partnerji ali sodelavci, boste lahko napisali še veliko več Masivni programov je pričela uveljavljati te osnovne gradniki. Torej s tem je dejal, zakaj ne bi rekli, da je dan? In se vidimo v sredo. [APLAVZ]