[Powered by Google Translate] David J. MALAN: U redu, ovo je CS50, a to je početak tjedna dva. Hvala Vam. Počnimo ovdje s telefonskog poziva. Ja sam o birati 617-bug-CS50. CS50: Ovo je CS50. Za Shuttlea Boy, pritisnite jednom. Da početi ispočetka, pritisnite 9. David J. MALAN: Dakle, kazao je za Shuttlea Boy, pritisnite 1. Tako ćemo pritisnuti jedan. CS50: Koji je vaš izvor? Za quad, pritisnite 1. Mather, pritisnite 2. Boylston, pritisnite 3. Lamont, pritisnite 4. Mem Hall, pritisnite 5. Da početi ispočetka, pritisnite 0. David J. MALAN: Mi ćemo pritisnite 1 za quad. CS50: Sljedeća prijevoz ostavlja ovaj vrlo minute na 13:10, a zatim na 13:20, 13:30, 13:40. Ovo je CS50. David J. MALAN: Dakle, ovo je CS50 glas. I to je primjer vrste završnih projekata, za Na primjer, možete odgristi prema kraj semestra. Na primjer, da shuttleboy.cs50.net postoji - zapravo projekt koji sam prvi put pisao nakon uzimanja CS51 natrag kad sam bio student. A inspiracija ovdje bio tada, sve što su imali bilo tiskani prijevoz autobusom rasporedi, i nije bilo Pojam gleda stvari online. I tako sam vrsta goluba u jednom vikendu, izlio kroz tiskan raspored, te ga koristiti na računalnog programa. U to vrijeme, računalni program se dogodilo da se pisani u C. I vi zapravo ga je vodio upisivanjem prijevoza Boy na treperi brz kao što smo radili do sada. No, tijekom godina, to je evoluirao u trenutak poruka bot. To je evoluirala u novije vrijeme u ovoj web stranici, u SMS-based alat, kao i u ovaj glas-based alat. A to je da se naslutiti na svašta da možete učiniti za sebe po semestru kraja. Na primjer, postoje, SMS verzija Shuttle Boy događa djelovati kako slijedi. Ako, na svoj mobilni telefon, možete poslati SMS poruku na 41411, a zatim poslati posebnu sboy simbol, za Shuttlea Boy, slijedi A i B, gdje A je podrijetla i B je odredište - Primjerice, Boylston Space Quad - ono što bi trebalo vratiti u roku od nekoliko sekundi je tekst Poruka iz Shuttlea Boy vam reći točno kada Sljedećih nekoliko letjelica su, od tog trenutka će da točke B. A to je više opći primjer onoga što je poznato kao pomoću API-ja. Tako na primjer, ovo ovdje je samo shuttleboy.cs50.net, Stvarni web-based utjelovljenje toga. No, podaci koji naglašava ovaj i druge aplikacije koje CS50 razvila su svi izloženi svima ovdje u obliku od API, sučelja za programiranje aplikacija. A to je samo fancy način govoreći da su ljudi mi se sviđa na Internet i drugi su proveli neko vrijeme stvaranja softver koji možete koristiti kako bi se zgrabite podatke od nas i onda graditi svoje vlastite aplikacije na vrh tog skupa podataka. Tako na primjer, ovo API prijevoza Dječak stranica ovdje, koji se događa da se u CS50 priručniku, bitno dokumente kako možete ići o postavljanju CS50 poslužiteljima za prijenos podataka. Na primjer, ako ste upoznati s CSV datoteka, zarez vrijednosti odvojenih, to su samo neka vrsta brz i prljave Excel-poput datoteka. Dakle, možete pitati Shuttle Boy za sve podatke o svim Kuće i njihovi GPS koordinate, a vi ćete dobiti natrag, u suštini, proračunske tablice kao što je to da onda možete pročitati u programu svoj vlastiti, a zatim generirati rezultate, poput prijevoza Boy sama se događa da se radi. Za one više poznatih, više modernih podataka reprezentacija uključuju JSON, JavaScript Object notaciji. Nešto će se vratiti k vama prema kraj semestra. Ali opet, to je samo jedna od nekoliko CS50 vlastite API. A uzbudljiva stvar je sada, ovih dana, Facebook i Twitter i Google i prilično mnogo svaki popularan website out tamo ima nekakav API, što znači da ako ste pročitali dokumentacija na svojim web stranicama, od vas se prijavili za račun, onda možete početi pisati softver na vrhu god alata ili podataka koje tvrtka ima pruža. I tako jedan od naših vlastitih nastavnih bližnjima par godina unatrag napisao Mac verziju toga. Tako na link pod nazivom Mac ovdje u gornjem lijevom kutu, možete zapravo preuzeti widget Mac OS koji radi na svoj Mac veze iste vrste stvari. Dakle, to je sve o izgradnji na vrhu skupine podataka poput ovih. Ali više o tome krajem semestra. Dakle, neka je roniti u stvarnom brzo bug, samo da nekako dobiti stvari zagrijati i danas, i mislim natrag na neke od stvari koje smo gledali prošlog tjedna. Konkretno, pusti me naprijed i povucite prema gore, recimo, ovaj primjer ovdje. Buggy1.c, ovo je dostupan na stazi web stranici ako želite vole ga preuzeti i guranje oko sebe. Ali neka je povećavanje ovdje na ovom prilično kratkom programu, a samo super-brzo rekapitulacija neke od osnovnih građevnih blokova koji mi stvarno ide na samo početi uzimati zdravo za gotovo. Dakle plavom stvari, u redovima od 1 do 9, samo su softball pitanja. Dakle, to su samo komentari. Oni nemaju funkcionalnu značenje. No, oni su komentari u smislu da oni primjećuje da Ja, čovjek, napravio sebi, tako da u predavanju i nakon predavanje, ja zapravo mogu sjetiti što je ovaj program ne bez da pročitate kroz to liniju po liniju i rekreacija povijest u mom umu. Štoviše, ako sam predati ovaj program kako bi netko drugi poput da, to je puno jasnije za vas, zbog komentara kao što je ovaj, što je program zapravo radi, ili barem ono što Program bi trebao biti događaj. Hoće li ili ne to je točno je druga stvar uopce. Sada, u C, s multi-line komentare, podsjetiti da je na liniji jedan ovdje je magija simbol, / *. To znači da ovdje dolazi početak komentaru. I ništa drugo pitanjima dok ne dođete do kraja terminator, što je * /, suprotno. Dakle, činjenica da imam 80-ak neke zvijezde ovdje iz lijeva na desno je zapravo samo estetski detalj. To nema funkcionalnu značenje. Sada o tome liniji 11? Što to učiniti u laik uvjete? Što je to? PUBLIKA: Uključuje standard. David J. MALAN: OK, dobro. Dakle, to uključuje stdio.h knjižnicu. Dakle, što to znači? Pa, u toj datoteci, stdio.h su cijela hrpa Funkcija deklaracije - da je, kod koje je netko drugi napisao. I savršen primjer funkcije koja je proglašena u stdio.h je - koji omiljeno do sada? Dakle printf, jedan od najčešćih one za korištenje, sigurno rano, iz tog knjižnici postoji. Ako ja ne isključujem tu liniju koda, zveka će vikati na meni nešto o korištenju crno simbol. Nešto neprijavljeni je vjerojatno ključna riječ, jer nismo obaviješteni prevodilac ono printf izgleda sviđa ako mi uključiti tu liniju. I više dolje na Zemlji, zaista, ono što je linija govori je otvoriti tu datoteku, stdio.h, gdje god je to na poslužitelj je hard disk, ili aparata tvrdi disk, a copy-paste to tamo u mojoj datoteci, bez moje što učiniti da ručno. Sada, nakon što smo dobili ovdje dolje za glavni, prije dugo ćemo početi zadirkivanje, osim što int i što je nevažeće. Ali za sada, pogledajmo tri linije roku od 15 do 17. Ovo ovdje sam tvrditi da je lud. Linija 7 u mojim komentarima kaže: "Ako ispis 10 Zvjezdica, ali ne. "Zašto to ne ispisuje, u stvari, 10 takve zvijezde? PUBLIKA: [nečujan]. David J. MALAN: Točno. Dakle primijetiti da smo počeli brojati od 0. I to je zapravo konvencija u programiranju i računalna znanost općenito, počevši brojati od 0 umjesto 1. I ovo je stvarno samo proizlazi iz činjenice da je, za Na primjer, kada smo imali osam ljudi na pozornicu, kada nitko nije bio podizanje njihove ruke, bili su svi učinkovito nule. I tako to je samo vrsta računalnog konvencije tako, dakle, početi računajući od 0. Ako je to najmanji broj možete predstavljati u binarnom. Dakle, ovdje smo počeli ja inicijalizacije na 0. Postavili smo i jednak 0. Ali onda sam napravio ovu grešku ovdje, govoreći ja je manja od ili jednak 10. No, ako mislite da se kroz, ako krenem na 0, a onda idem do 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ja zapravo idem isprintati 11 zvijezde na ekranu, jer sam otišao gore na i jednak 10. Dakle, lako popraviti ovdje onda je ono? PUBLIKA: [nečujan]. David J. MALAN: Dovoljno je promijeniti to manje nego. Ako stvarno želite, možete to učiniti. No, u cjelini, koji je frowned. I tako počinje brojati od 0 je samo nešto što ste trebali obično se koristi za. Sada, što je cijeli ovaj konstrukt u sebi? Ova linija 15 demarks for petlje. Dakle, za ne funkcionira. To je samo izjava. To je petlje konstrukt, kao što smo vidjeli u nule. I ona ima tri dijela. Primijetiti da je prvi dio za lijevo od zarezom. Tu je srednji dio u sredini između dvije zarezom. A tu je i desna ruka dio na desno drugog zarezom. Sada, prvi od njih što radi? PUBLIKA: [nečujan]. David J. MALAN: Povratak postoji? Da? PUBLIKA: Inicijalizacija. David J. MALAN: Inicijalizacija. Dakle, što to znači? Mi smo proglasili varijablu sam nazvao. To je tipa int, jer sam navedeno int i. I ja sam inicijalizirati na vrijednost od 0. Dakle, ono što je to zapravo govori? To je učinkovito govori na računalo hej, daj mi dovoljno memorije, dovoljno RAM-a, kako bi odgovarao broj, a zatim staviti broj 0 u tom komad RAM-a. I kao stranu, koliko je velik int obično, barem unutar od uređaja? PUBLIKA: 32-bitni. David J. MALAN: 32 bita. Dakle, to znači da mi dati 32 bita, inače poznat kao 4 bajta, i stavite 0 vrijednost u tome, što je prilično lako, jer To samo znači postaviti sve bitova na 0. Tako sada, drugi dio ovdje je stanje. A stanje, kao ime sugerira, je ono što je označeno opet i opet i opet da li je to istina ili laž. Dakle, ovo samo govori učiniti sljedeće linije koda - naime linija 16, jer to je samo jedan razvedena ispod - tako dugo dok sam je manje od 10. I nakon svake iteracije kroz ove petlje, učinite incrementation, koja je u ovom slučaju ja + +. Sada, to ne mora biti i + +. To bi mogao biti ja -. Ali, ako sam to učinio, ono što se događa ponašanje da se od ovog programa? PUBLIKA: To će biti beskonačna petlja. David J. MALAN: To će biti neka vrsta beskonačnoj petlji, osim ako mi se posreći nakon negativnog 2000000000 ili tako. Možda će se stvari zaokrenuti, samo po prirodi konačnog broj bitova koji smo dodijeljenih za int. Ali to sigurno će ponoviti daleko više od 10, a sigurno više od 11 puta ovdje. I sada, baš kao i na stranu, shvaćaju da ja + + i ja - su zapravo samo sintaktička šećer. To je samo skraćeni zapis za ono što je malo više eksplicitno napisano kako slijedi: i = i + 1. To je identičan i + +. To je samo vrsta izgleda ljepše reći i + +. To je više jasna, više čitati. I tako većina ljudi to učiniti umjesto. No, to je identičan funkcionalno da ono što smo upravo vidjeli. Dakle, u kratko, brzo popraviti ovdje je samo reći da sam ponoviti od 0 pa sve do manje od 10. I onda smo doista ćete dobiti 10 zvijezde. Dakle, pokušajmo to. Dopustite mi otvoriti terminal na dnu. Pusti me u imeniku da je to u. I ja ću ga prevesti ručno zveka za sada. I ja ću sastaviti ovo kao buggy1.c, Enter. A sada buggy1, zašto je nema takve datoteke ili direktorija zove buggy1? PUBLIKA: [nečujan]. David J. MALAN: Da. Dakle, to je zapravo zove a.out. Dakle, ako se prisjetiti samo pokrenuti zveka, gdje zveka je prevodilac, a vi ne navedete ime koje želite dati svoj program, to će zadani a.out. Dakle, ako doista radim ls - Ups. I didn't - u crno-bijelu pitanje neke od ste suočeni je fiksna. No, dopustite mi to učiniti. Tu imamo a.out na lijevoj strani. Dakle, moramo pokrenuti a.out umjesto buggy1. Pa neka mi ići naprijed i učiniti. . / A.out, Enter. I očito nije učinio što? PUBLIKA: Spremi. David J. MALAN: Spremi moj dosje. Tako da je lako riješiti udaranje Upravljačka S, ili će File, Save, kao iu većini programa. Pusti me ovdje dolje, brisanje zaslona, ​​pokrenuti ga ponovno. A tu je još uvijek bug. Dakle, ono što se događa - PUBLIKA: Nisi sastaviti. David J. MALAN: Ah, dobro. Nisam ga sastaviti. Poput idiot, gledam koda kako bi vidjeli što se dogodilo. Dakle zveka buggy1.c, sada a.out. A fuj, spašen. Tako to izgleda malo ružno, jer ne postoji nova linija bilo gdje u programu. Ali opet, to je samo estetski detalj. I barem ako ćemo brojati one van, trebali bismo sada vidim 10 takvih zvijezda. Pa, što je s tom drugom zagrijavanja primjer? Tako je u buggy2, ja tvrdim da je ova verzija će također ispisati 10 zvjezdica, jedan po retku. Dakle, ovaj put, imam newline karakter, samo da bi stvari malo ljepše. No, umjesto što sam se je li to. Pa neka mi to zveka buggy2.c, Enter. Sada je opet zove a.out. Upišite. Ja samo vidim jednu novu liniju, samo posljednji nova linija koja seli moj upit u sljedeći redak. A ipak, jasno sam ispis *, a zatim novu liniju, *, Onda nova linija. No, ono što je bug ovdje? Da? PUBLIKA: [nečujan]. David J. MALAN: Točno. Dakle, za razliku od nekih jezika, kao što su Python, gdje indentacijskom zapravo ima funkcionalno značenje, u jezik kao C - kao što ćemo vidjeti, PHP, Javascript - udubljenje je stvarno samo za ljude 'korist. Dakle, činjenica da sam razvedena liniju 16 i 17 izgleda sjajno, ali to nema funkcionalnu značenje ovdje. Ako želim obje linije izvršiti kao dio za petlja, onda moram ih priložiti u vitičastim zagradama na taj način. Možete samo smanjiti taj kut i izostaviti vitičastih zagrada ako što je slučaj? PUBLIKA: Samo jedan redak. David J. MALAN: Samo jedan redak. Dakle, to je samo vrsta lijepo vrste sintakse detalje, tako da ne gubiti vrijeme pisanja tri linije, dvije od kojih su vitičastih zagrada, samo napisati jednu liniju koda. No, ako imate dva ili više redaka, mi doista potrebno da to učinite. Pa sada neka mi spasiti ovo. Pusti me naprijed i ponovno pokrenuti zveka. Onda neka mi reprizu a.out, a sada sam ih dobiti jedan po retku. Sada, a.out opet je vrsta glupo ime za program. Kako mogu reći zveka da zapravo mi dati ime datoteke to je više user-friendly, kao buggy2 sama? Malo jasnije? PUBLIKA: [nečujan]. David J. MALAN: OK, tako da sam zapravo mogu uzeti vrlo razumljiv prečac i samo napisati da buggy2. Ja ne odredite. C, u ovom slučaju, i pritisnite Enter. A što bi se je to sastavlja buggy2.c za mene od strane molba zveka to učiniti. Naime, on poziva zveka, radi zveka korištenjem način više naredbenog retka argumente ili preklopnici nego što sam zapravo potrebno. U vrijeme, vratit ćemo se na to što sve ove razne grobni crticu izrazi znači. No, za sada, samo da se štedi mi nevolje pamtiti i da se tip iz svima razne crticu izrazi. I naopako toga u konačnici je da sada imam buggy2. Ako želim da to učinite ručno, iako sam možete to učiniti umjesto - jeka-o buggy2 a zatim buggy2.c. I to na sličan će mi dati datoteku pod nazivom buggy2. Dakle, u kratko, zveka je prevodilac. Provjerite je samo user-friendly alat koji ćemo koristiti više i više, jer je to samo počne pojednostaviti stvari za nas. I mi smo se vratili 0, na kraju. Za sada, samo zato, ali mi ćemo početi zadirkivanje taj dio danas i srijedu. Sva pitanja o bilo kojoj od ove? Da? PUBLIKA: [nečujan] Je li u navodnike tamo? David J. MALAN: U redu. Kad sam upisali li u navodnike, koja je mene rade neke magije iza kulisa popraviti bug. Zaboravio sam, kao što smo reći da mnogi od vas na panele za raspravu, treba učiniti - mi ćemo to učiniti sada - sudo yum-y ažuriranje appliance50. Joj, da to je precizirao pravo. Dakle, aparat je kao operativni sustav. To je trčanje ovaj operativni sustav pod nazivom Fedora. I sad zbog moje spore internetske veze, ja sam stvarno hosed. Dakle, radi sudo yum update, kao što smo vam reći da to u Problem skup, bitno je vole trčanje automatskog ažuriranja u Mac OS ili Windows. A razlog za trčanje to na samom početku Problem je skup jer kad smo stvorili aparat, ja zabrljati gore, a ja sam slučajno napravio sve svoje programe, pogledajte crno na crnom ekranu, što je razlog zašto niste ih vidim po defaultu. No, najnovija verzija uređaja popravci ovaj. I ja ću to popraviti tijekom pauze jednom imam internet povezivanja. Tako su citati samo skriva svoju pogrešku, vrlo diskretno, očito. Ostala pitanja? Da? PUBLIKA: Odakle bi došao? [Nečujan] David J. MALAN: Dobro pitanje. Gdje bi došli? To je Linux program koji postoji već dugi niz godina, dok prije CS50. I to dolazi s operativnim sustavom poput Fedora. To ne dolazi od CS50 knjižnici. U stvari, samo stvari koje dolaze iz CS50 knjižnici tako daleko, da smo vidjeli, su GetString, GetInt, sve one dobiti funkcije, i niz riječi, i na neke mjeri, riječ bool. No, mi ćemo zafrkavati da, osim kada smo zaroniti u CS50 sam aparat. Tako da, još jedno pitanje ovdje. PUBLIKA: Kad ste rekli da i onda lud, kako se Računalo znati [nečujan]? David J. MALAN: Dobro pitanje. Dakle, kada ste samo pokrenuti napraviti buggy1 ili napraviti buggy2, kako ne bi znao? Dakle, po defaultu, ako upišete napraviti buggy1, da traži file zove buggy1.c. I onda izvršava odgovarajuće zveka naredbe, time preskakanja datoteku zadanu izlaznu zove a.out. U stvari, ako ćemo gledati na ono što čine, što - ajmo prestati to. Ako ćemo gledati na ono što bi se zapravo radi, da buggy2, to je već do danas. Pa neka mi ukloniti rm naredba, Program sam pisao prije. Tipkanje Y-E-S potvrditi da sam ga želite ukloniti. Ako ja sada ne čine, primijetiti da u ovom vrlo dugu liniju, tu je ovo zadnja stvar ovdje,-o buggy2. Sve bi se to prolazi tu tvrdnju, da tako kažemo, na Jek, tako da ne moram upisivati ​​to sam. U redu, tako brzo par upravni najave. Dakle, za dijelove, koji je službeno započeo ovaj dolazak Nedjelja, uvijek ćete želite dovesti, ako imate jedan, laptop. Ako nemate prijenosno računalo, ne doprijeti do mene od strane padaju mi ​​e-mail. A mi ćemo shvatiti tijek rada. Što općenito ćete pronaći u sekciji je da su oni dio konceptualni, dio ruke na. Mi posebno ćemo koristiti dio pitanja, dio ovog tjedna je problem skup, hodati kroz neke od konceptualni materijal iz predavanja. I to je sve u tekuću problematiku setu. I također ćemo zaroniti u nekim hands-on aktivnosti, ponekad od kojih će se tražiti da se podnosi, ponekad koji neće. Na primjer, ovaj prvi tjedan, oni značilo samo kao zagrijavanja vježbe. I vidjet ćete da su ti problemi su zapravo samo to. Oni bi trebala biti prilično mali, ali ne i nužno trivijalne programi za pisanje, koji nisu nužno uzbudljive i od sebe, ali su dobre prilike za vježbati sa sintaksom, s novim funkcijama, u udobnosti odjeljak gdje imate nekoliko svojih kolega predstaviti kao i kao TF. I što ćemo učiniti s vremenom je koristiti alat zvan CS50 mjesta, pri čemu umjesto samo pomoću CS50 aparati, vi ćete umjesto toga ići na web stranici u pregledniku, gdje ćete biti u mogućnosti pisati kod u prozoru tijekom dijelu. A onda, ako se odlučite, vaš kolega nastava onda se može pokazati bez obzira na to je li pišete na vašem zaslonu u vašem pregledniku Prozor se na prednjem dijelu razreda, bilo anonimno ili javno, tako da on ili ona tada može šetati uz Vaši kolege što ste učinili dobro, ono što nije dobro. I opet, budite uvjereni sve to može lijepo biti anonimni. No, to će biti lijepo prilika za mnogo više interaktivnost nego nešto poput predavanja dopušta. U međuvremenu, mi ćemo imati ove stvari zove super dijelovi, koji su opcionalno, ali su otvoreni za sve u klase, tako da možete to učiniti više za kolektivno Problem postaviti jedan. Evo raspored. To je također objavljena na početnoj stranici na cs50.net. Primijetit ćete da postoji će biti haker specifična jedan sutra poslijepodne. A mi ćemo snimiti jedan danas i jedan sutra i postavljati onima online u roku od 24 sata. Dakle, ako ne možete učiniti bilo koji od tih vremena, ne brinite. I opet, raspored je sada online na cs50.net. U smislu se sekcije, trebali ste stečen e naložio da odeš na tečaj internetskoj stranici pronaći iz svog dijela. Ako se život promijenio i da trebate promijeniti svoj dio, nije problem. Vratite se na taj isti URL, cs50.net/section, jednini, i da ćete ispuniti isti oblik, tako da možete tada nam dati svoje postavke. I mi ćemo pratiti do kraja tjedna, kao što možemo smjestiti. Prošli tjedan, podsjetiti da smo predložili pomoću CS50 raspravljati, toku je rasprava alat, u predavanju. Dakle, imali smo 40 pitanja koja su postavljana i odgovorio tijekom predavanja. Dakle, činilo se da rade dobro, pa ćemo nastaviti pokušava to učiniti. Ako tijekom predavanja, ne samo da se osjećaju ugodno podizanje tvoja ruka, nije problem. Idi na cs50.net/discuss, post tamo, i jedan od naših nastave momci ili će ga odgovoriti elektronički ili podići svoje ruku na vaše ime anonimno pitati, ovisno o prirodi pitanja. I u smislu povratne informacije, općenito psets će biti vratiti u roku od tjedan dana. Budući da je potrebno neko vrijeme za dionice kako bi se postigla ravnoteže, prvi pset, 0 i 1, će biti malo odgođen kako stvari smiriti. No, stay tuned za to u tjednima koji dolaze. U redu, pa neka me stavi na moj ozbiljan Glas za samo trenutak. Dakle, to je zapravo zanimljivo klimatske biti da ovu raspravu, što sa svim ostalim događa na kampusu s tim u vezi. Ali CS50 sigurno je imao svoju povijest to posebice tema, u koliko svake godine, ovaj tečaj, za mnoge godine, Ad-Ploče otprilike 3% u razredu. Ova najnovija godine, 2011, CS50 Ad-ukrcao 35 studenata. To nije, mislim, zbog nedostatka jasnoće. Shvatite da u toku je nastavni plan i program, tu je stranica obrazloženje gdje su linije. Taj isti izjava se ponavlja na svakom jedan od Problem postavlja na stranici jedan. Pa sam spomenuo to danas stvarno samo da bi ljudi svjesni toga. I mi smo pokušali različite stvari. I ono što sam mislio da će to učiniti i danas je samo uzeti trenutak za zapravo pogledati neke od posljednjih slučajeva koji su došli. Umjesto da ove kao prljave male tajne, zapravo istaknuti ono što studenti su učinili i kako smo otkrili to i stvarno ono sveobuhvatan motivacija za čak i nakon što je ovaj razgovor. Dakle, s koje je rekao, linija bitno je ovo - po nastavnom planu, da ste dobrodošli, koju su ohrabreni, da razgovarati s kolegama. To je cijela svrha da ove suradničke radno vrijeme u Annenberg i poticanje ljudi za Konačni projekt raditi zajedno. Ali linija je nacrtana kada je u pitanju vrijeme da se zapravo napisati Vaš konačno rješenje. Govoreći na engleskom jeziku, potpuno u redu, govoreći u pseudo kodu, potpuno u redu. Slanje kolegica svoju pset, ostavljajući ih gledati preko zaslon kao i dalje ruke tipkati, preko linije kao dobro. Nemojte gledati na programu za pojedine linije. Ali samo slikati sliku o tome kako je to nažalost stvarnost, shvatiti da postoje web stranice vani da imaju rješenja iz ove klase i mnogim drugim razredima. Činjenica da ste vi ili neki 3% od vas znaju da to postoji znači da smo znali da to postoji. Činjenica da postoje web stranice kao što je ovaj gdje se Možete platiti nekoga da zapravo učiniti svoje problematična seta - to je stvarni slučaj da dođe do prošle godine. Ovo je web stranica zove odesk.com. A Tim je ime osobe koja je ovdje objavljivati ​​na ova web stranica i pitao nekoga napraviti svoju pset 7 u ovaj slučaj. Pa, odesk.com je vrlo Google-u mogućnosti, a mi smo vrlo dobar u Googling. Ovdje, također, postoje mjesta - i to jedna je prilično zločest, iskreno. [Smijeh] David J. MALAN: Smiješno je stvar o ovim stranicama je ako ste pročitali O stranicu, oni govore o svojim korporativne kultura i kako Služba je njihov broj jedan prioritet, kako bi bili sigurni da vaše zadatke dobiti okrenuo se na vrijeme. Ali u svim ozbiljnosti, opet, činjenica da su ove stranice postojati, shvatili smo, također, nisu svjesni Takve web stranice. I da vam dati osjećaj što čini ovo općenito traje, mi općenito nemaju velike afere u kojoj ljudi surađuju na bilo kakve masovno, nego to ti kasno-noćni trenuci slabosti, gdje imate tako mnogo učiniti, to je 04:00, da ste iscrpljeni, a vi mislim na sebe, dobro, neka mi samo pogledati moje cimer-a ili moje prijateljice kod ili slično. I manifestacije to nažalost uključivati ​​Student Slanjem ovako nešto i Studentski B podnošenje nešto kao što je ovaj, što je svakako u računalu znanost klase, je iznimno jednostavan za računalnih znanstvenika otkriti sa softverom. Ovo je još jedna zajednička paradigma, gdje ste vrsta radili uz nekoga, možda govori u Engleski, sasvim u redu, pseudocode. Ali onda dođe vrijeme da se zapravo podnijeti, a psets Upravo se razmjenjuju putem e-maila ili Dropbox ili slično. No, u pokušaju da ga manje očito da je to ono što se dogodilo, onda je to ono što je podnijela. To je, također, ne saplitati dobro napisana komada softver kao što smo zapravo detektirati ovakve stvari. I doista ono što mi radimo je mali softver koji uspoređuje sve Ovogodišnji podnesci protiv svih Posljednjih godinu je podnesci, protiv svega što smo pronašli na Internet, protiv svakog radnog web vani. To je sve vrlo automatizirano. I tako smo to stvarno u velikoj pravednosti do 97% onih koji se stvarno radi svoje guzice off u ovom i drugim klase i stavljajući u sve to truda, tako da rad oni u konačnici dostaviti je njihova vlastita. I ja mogu ići na uzrasta. To su samo nekoliko prošlogodišnjih slučajeva. Prije nekoliko učenika poslali te datoteke identično za pset 2, pset 3, pset 4, pset 5, pset 6, pset 9. U ovom slučaju, to je bio kviz 0 i prošle godine, gdje je dvije Učenici poslali identično ovu rečenicu među mnogima drugi, "Zahtjev tipa -" točka, točka, točka. Dakle, čak iu klasi 600 nije mi otkriti ovu na poslali kvizovima. Dakle, u kratko, ovo - iskreno, ja mrzim ovu vrstu razgovor - ali ovo je stvarno namjerno napor ove godine pokušati voziti dolje taj broj. Jer iako smo reći takve stvari svakih godine, mislim da je stvarnost da su se zadržavali na njemu malo više sekundi nego inače, a zapravo samo istaknuti da je ono što se može činiti kao, eh, ne tako velikog posla, barem sjetim ovom konkretnom trenutku, kako u pravednosti za sebe i svoje kolege ovdje. Dakle, ako ste ikada imate bilo kakvih pitanja što se gdje linija je, molim samo doprijeti do mene osobno. No, odgovor je uvijek, potpuno istaknuo je na last minute, novac u kasnom dan. Ili ako je stvar što nije bilo kasno dana, Iskreno, mi e-mail osobno. Mi ćemo nešto smisliti. Molimo ne stavljajte svoje vrijeme ovdje na Harvardu u opasnosti. Sada, mislio sam da smo trebali olakšaj raspoloženje, pa sam uključeni ovo kao sljedeći slajd. [Smijeh] David J. MALAN: Ova web stranica je super. Ja sam zapravo dobio malo rastresen. Tu je ovaj jedan. I onda je to jedna je bila nevjerojatna. Ok, tako da mislim da mačića kasno noću prilikom te odluke. U redu, pa natrag do više zabave i manje ozbiljne stvari, poput uvjeti. U redu, tako da smo razgovarali kratko o njima. To je nešto što je vjerojatno prilično upoznati s svijet Scratch. I u svijetu Scratch, imamo tu potrebu ponekad ići napraviti vilice na cesti. Ili to, ili da ili ovu drugu stvar ovdje. A kad želimo da to učinite, možemo koristiti u C sada, to ako drugo graditi. I onda ovdje imamo Boolean izraza. Na primjer, Boolean izraza Ovdje možemo ILI ih zajedno, u smislu da imamo ovaj uvjet ILI taj uvjet. Možemo ih i zajedno, u smislu da želimo provjeriti ovo stanje, te da stanje. I ovdje imamo switch izjavu sada, koja je ne tako Sličan sintaktički tim vrstama uvjeta, ali to omogućuje nam da učinite ekvivalent ako, drugo ako, ako, drugo drugo ako, i kao jednostavno nabrajaju ih od slučaja do slučaja do slučaja do slučaja. Dakle, vidjeli smo te posljednji put. A onda smo počeli dotičući stvari kao što su petlje. Vidjeli smo jednog od njih samo trenutak prije. No, tu su ovi drugi ušica konstrukti. Na primjer, ovaj ovdje. Dakle, dok je (uvjet), učiniti ovu stvar opet i opet. Dakle, u osnovi, ono što se čini da se razlikuje između ova za petlje i ove while petlja ovdje? Ovo za petlje i ove while petlja. Da? Što je to? PUBLIKA: [nečujan]. David J. MALAN: Dobro. Dakle, dok je u stanju za petlje, tu je jasno više sintaksa. Tu je ovaj inicijalizacije, tu je ovo ažuriranje. U while petlji, tamo je samo taj uvjet. Tako se čini da je to malo svede u odnosu na petlje, što znači da ako želimo imati varijable i želimo imati incrementation, mi zapravo moramo napraviti ovu stvar sami. Pa neka mi ići naprijed i otvoriti gedit. Dopustite mi prebaciti na aparatu. I neka je samo učiniti brzo malo primjer taj razlikuje jedan od tih od drugih. A u pozadini moga uma ovdje, ja bi trebao reći jednu stvar. Ja konkretno spominje ime Tima. Tim je zapravo netko da student pokušao pronaći napraviti njihova zadaća za njih. Nismo imali Tima u tom dijelu. Dakle shvatiti, da sam otkrila student, to nije bio učenik. To je bio slučajan osoba na internetu radi stvari po proxy prošle godine. Dakle, vidimo da, previše. Dakle, u ovom slučaju ovdje, pusti me naprijed i otvara novu datoteku. File, New. To mi daje karticu ovdje. Pusti me naprijed i spremite ga kao loop.c. Pusti me i kliknite Spremi. I onda ovdje dolje, idemo naprijed i početi pisati # Include . Dopustite mi povećali u. Sada ćemo napraviti int main (void). Sada neka mi ići naprijed i učiniti za (int i = 0; ja < oh, 10; i + +). A sada ću ići naprijed i nemojte ispisivati ​​zvijezdu da sam učinio ranije. I onda na kraju ovog programa, samo mi ide na ispisati novu liniju, samo tako da je moj upit ne izgleda sve neuredan. povratak 0. Izgleda sintaktički ispravan? Do sada. Tako ćemo vidjeti. Pa neka mi povećali, idite na moj prozor terminala. I neka mi ići naprijed i pokrenuti petlju, jer sam to nazvao stvar loop.c. Tako bi petlju. Čini se da se prevedu u redu. Dopustite mi pokrenuti petlju, a sada Enter. A čini se da su tiskana 10 zvijezde. Dakle, neka je samo to pretvoriti u while petlji i vidjeti što vrste pitanja smo zapeti. Dakle, umjesto toga, pusti me unutra i reći dok sam je manje od 10 - neka mi riješi for petlje. U redu, tako da imamo nekoliko problema već. Dakle, stanje je isto, ali sam očito mi nedostaje inicijalizacije. Ja sam nedostaje incrementation. Dakle, ono što treba prevodilac vjerojatno mi reći kad sam pokušati sastaviti ovaj program? Da? PUBLIKA: [nečujan]. David J. MALAN: Dobro. Dakle, to će reći nešto poput nedeklarirani - u ovom slučaju, ja varijabli. I doista, koristiti neprijavljenog identifikator ja. I tako je to u suprotnosti s jezicima kao što su PHP i Python i Ruby, s kojima su neki od vas možda biti upoznat, gdje možete samo vrsta početka pomoću varijabli hoćeš-nećeš, a da ne morate brinuti o njima proglašenja izričito uvijek. U C i jezicima kao što su Java i C + +, morate biti super eksplicitno. A ako želite varijablu sam nazvao, morate mi reći kakav varijable je. Tako ćemo morati popraviti ovo što slijedi. Ja ću morati ići ovdje i upišite int i, stoga, Ja sam proglašen varijablu sam nazvao. Sada, ja sam preskočila jedan korak. Ja sam očito ne inicijaliziran, ali neka se vidi ako je to u Barem izrađuje zveka prestati žaliti. Pa neka mi remake ovaj program. U redu, sada je to samo žaliti drugog razloga. "Promjenjiva 'ja' je nepokrenute kada se koristi ovdje." U redu, tako da to je prilično jasno. Inicijalizirati samo znači postavljanje je jednaka vrijednosti. A mi ne ste to učinili, pa neka me pokušati jednaka 0. Sada ćemo pokušati to ponovno i ponovno pokrenuti zveka. Sastavio ovaj put. I ja sam o tome da ga pokrenuti. No, velika stara klapa, jer sam učinio inicijalizacija, ja sam učinio stanje, ali ja nikad nisam učinio bilo kakav incrementation. Dakle, kako mogu učiniti incrementation? Pa, u while petlji, ona se osjeća kao da ću imati to učiniti unutar petlje, jer baš kao i prvi ovotjedni primjeri radili petlje konstrukti, kao što s čarape i sa self-prebrojavanja, morali smo napraviti nešto na samom kraju, željeli vratiti u sljedeći redak. Što ako sam ići naprijed i to ja + + ovdje? Nemojmo ni sastaviti to. Catch me već. Što je krivo ovdje? PUBLIKA: [nečujan]. David J. MALAN: Dakle, to definitivno nije int. To je sam. I vitičastih zagrada, kao prije, udubljenje nije dovoljno. Dakle, sada sam to izvesti. Dakle, dok sam je manje od 10, ispis zvijezdu, onda ja povećavati. I tako, dok petlja djela je da čim hit dno petlje, koja je u ovom slučaju izgleda kao linija 10, to će se vratiti na liniju 6, na kojem trenutku stanje će biti ponovno provjereni. A ako je i dalje manje od 10, mi ćemo učiniti linije 8 i zatim devet, onda ćemo pogoditi 10, i vratite se na šest, i opet opet i opet i opet, tako dugo dok sam je manje od 10. Dakle, neka je ponovno pokrenuti napraviti ovdje. Ok, sastavili smo ok. Dopustite mi da ponovno pokrenuti petlje. A sada je to zapravo čini da rade. Dakle pluses i minusa ovdje? Pa, do sada tu je zapravo ne cijela PLO - tako slatka. U redu, to je bio - ah, to je nesreća. U redu, tako da ćemo se vratiti u for petlji. Dakle, za petlje su lijepe, jer oni su super eksplicitno. I iako oni malo nezgrapnih pisati, to je vrlo moćan i to vam omogućuje da učinite više stvari odjednom. Dok petlje ne čini se da imaju veliku količinu vrijednosti samo Ipak, budući da se osjeća kao da smo samo morati učiniti više posla. Moramo staviti inicijalizacije ovdje, ažurirati ovdje dolje, i moramo se prisjetiti da će učiniti sve da. Pa ćemo vidjeti u vrijeme dok petlje da zapravo posuditi sami za samo različitim kontekstima, različiti podaci strukture kao što su popisi i hash tablice, stvari ćemo doći do Sredinom semestra. Ali za sada, znamo da postoji taj treći tip poznat kao ne- while petlja. I mi smo vidjeli ovo kratko. A to bi moglo biti super korisno s pset jedan. Svaki put kada želite nešto učiniti, a zatim provjerite je li Korisnik surađivali, a ako nisu, to učiniti opet, ne- while petlja posuđuje sama za tu vrstu logike. Jer kao naređivanje od vrha do dna ovdje sugerira, ne doslovno znači to. A to opet i opet, što bi to moglo biti? Možda to znači pozivajući GetInt ili GetString, a zatim provjeru vrijednost GetInt ili GetString a zatim deranja na korisnika ako oni nisu surađivali ih pita opet i opet i opet. Gdje želite učiniti nešto jednom, zatim provjeriti neke uvjete. Dakle, pokušajmo to. Dopustite mi zapravo promijeniti to sada učiniti-while petlje. I ja ću ići naprijed i učiniti sljedeće. Dakle, učinite sljedeće. Učinimo int i = GetInt (), ali neka prvi korisniku reći što učiniti. Dakle, malo drugačije ovaj put. "Daj mi int". Dakle, ja ću koristiti printf za to. A sada ću ići dolje, i ja ću to učiniti dok sam je, recimo, veći od - neka se vidi, ja je, recimo, manje od 0, ili sam je veća od 10. Drugim riječima, želim broj 1 do 9, samo proizvoljno. Dakle, ja sam koristeći kombiniranu Boolean izraza ovdje bi bili sigurni da sam je manja od 0 ili veći od 10, u kojoj je Slučaj Učinit ću ovu petlju opet ovdje. Pa opet, to - dok sam je manja od 0 ili i je veći od 10. Dakle, sada idemo naprijed i to nakon što smo to učinili. Ajmo napraviti brzo razum ček. printf ("Hvala, i je% d", i). Dakle, ovo jednostavan program pita korisnika za int, čini da je to u nekom rasponu od 1 do 9 inclusive, i onda zahvaljujući korisniku podsjećajući ih što su upravo upisali u, baš kao malo uračunljivosti ček. Ali neka je vidjeti ako to radi onako kako smo zamislili. Pusti me glava ovdje dolje i ponovno pokrenuti napraviti petlju. Hmm. "Korištenje neprijavljenog identifikator 'ja'". To je čudno. Mislio sam da ćemo riješiti to. Sve simptom, ali različiti broj. Da? PUBLIKA: [nečujno] unutar dva, moramo [Nečujan]. David J. MALAN: Točno. Dakle, ovo je zapravo nas dovodi do teme poznat kao djelokruga. Ispada da je C, opet, to je stvarno vas vodi doslovno. A ako ste učiniti nešto poput ovoga gdje ste proglasi int a zatim dodijeliti neku vrijednost, ali ne da se unutrašnjost Par vitičastih zagrada, što znači C je to pretpostavlja da Samo želim te 32 bita poznate kao ja da postoje unutar kontekst onih vitičastih zagrada, u kontekstu linije 6 do 9. Tako sam se proglasio, i to je dodijeljen vrijednost u skladu osam, ali čim dođete izvan linija 9 ispod kovrčave vitice, ja više ne Opseg, da se tako izrazim. S-C-O-P-E. To više nije u pravom kontekstu. Dakle, sada nema ja, tako da je to kao da smo imali čak ni ga proglasio uopće. Dakle, ono što je popraviti onda za nešto ovako, ako Razlog je u tome što sam proglašen unutar vitičastih zagrada, koji je očito loše? Ovdje? PUBLIKA: [nečujan]. David J. MALAN: Da. Dakle, možemo ga inicijalizirati izvan. Pa neka mi ići naprijed i izbrisati Deklaracije dijelove Čime Ja navedite tip, i neka mi to učiniti ovdje. Dakle, u skladu pet, to je sada kaže: "Daj mi int." Nazovite to ja. Obavijest u skladu 9, ne želim to učiniti, jer sam već imaju 32 bita. Ne želim pitati računalo za Različite 32 bita. Želim koristiti one iste 32 bita. I sada, jer sam je proglašen u skladu 5, to je još uvijek čitljiv koristiti ga u skladu 11 i 12 linija. Pa neka mi pokušati rekompiliranje to i vidjeti ako zveka prestaje vikati. napraviti petlju. Dakle, sada je "implicitno deklaracija funkcije 'GetInt' je nevažeća u C99. "Što je to? Da? PUBLIKA: [nečujan]. David J. MALAN: Da. Tako da sada sam zapravo koristi GetInt, to nije nešto samo da dolazi s C. To dolazi iz CS50. Dakle, moramo ovo ovdje. I neka mi se vratiti na brz dolje ovdje i ponovno pokrenuti napraviti. Ok, napokon. Sada smo odluku da i drugi pogrešku. Dopustite mi sada pokrenuti petlju i vidjeti što se događa. "Daj mi int." Ja ću dati 11. Dat ću ga -1. Dat ću ga foo. Ja ću dati pet. A sada je to doista funkcionira. No, brz promijenilo s razlogom ovdje. Zašto to kažem ponovo jedan od tih vremena, ali daj mi int ostale tri puta? Zašto je to ponašanje drugačije? PUBLIKA: Dao mu je niz. David J. MALAN: Žao mi? PUBLIKA: Vi dali niz. David J. MALAN: Da. Tako smo dali niz u ovom trećem pokušaju, kad sam upisali foo. Foo je niz. To je očito nije int. A način na koji je proveden CS50 GetInt je da smo ne provjeriti da li nešto je manji od 0 ili veća od 10 za vas, jer kako znamo unaprijed kakav int želite? Ali mi minimalno možete provjeriti za vas, nije korisnik barem upisati cijeli broj? A ako nisu, mi vikati na korisnika upišete "ponovo" na zaslon. Tako sada imamo program koji je petlje. Ok. Sada, koji od njih je nekako bolje konstrukt? Dakle, ovo je mjesto gdje se stvari početi da se malo neuredan, Činjenica da imate na umu da se proglasi varijablu ovdje ako ga želite koristiti unutar nekih vitičastih zagrada i izvan nje. No, čak i ako to izgleda malo zagonetan na prvi pogled, samo jednom, zapamtite jednostavnu logiku. Kako bi se koristiti ništa u C, da li je funkcija ili to je promjenjiva, morate ga uključiti ako je funkcija u nekoj knjižnici, ili trebate ga proglasiti. Ali sada morate biti extra svjesni činjenice da ste ga izjavljujući u pravom opsegu. Vi ne stavljajući ga previše čvrsto unutar zagrade. Pa neka mi zapravo vratiti. Ako se vratimo na naše primjerice od ranije, a idem natrag na int, int i = 0; ja <10; ja + +, a ja učiniti printf zvijezde, kao što je ovaj, a zatim zatvorite paren, a sada printf ja sada - prema istoj logici, ono što će se dogoditi kad sam pokušati sastaviti ovaj program? PUBLIKA: Nevažeći identifikator. David J. MALAN: Dakle, to je još jedan valjan identifikator, neprijavljenog identifikator. Sada, razlog je malo drugačija. Tu je očito nema vitičastih zagrada ovdje, ali isto Ideja, ista priča opsega vrijedi. Ako ste proglašeni varijablu kao da sam unutar za petlje, čak i ako nisu eksplicitno napisano kovrčava aparatić, mislim od njih psihički je još uvijek tamo, u kojem slučaj i vrijedi samo unutar for petlje. To ne vrijedi kad dođete na sljedeću liniju, koja je u ovaj slučaj je sada 10. Dakle, samo nekoliko pitanja opsega i slično. U redu, bilo kakva pitanja? U redu, tako da je ovo vrsta beznačajni malo programa, ispis samo malo zvijezde. Ali neka je vidjeti ako se sjećate ovu pjesmu ovdje. Ovo je nevjerojatno neugodno pjesma djeca će pjevati na školski autobus i slično. No, ono što je lijepo o tome je da je ovaj cyclicity, pri čemu je "99 boca piva na zidu, 99 boca piva. Jedan Uzmi dolje, to zaobići, 98 boca piva na zid. "A onda pjesma ponavlja 97, zatim 96, a zatim 95, zatim 94, pa sve do 0 ako ste zapravo dobio da daleko u autobusu. Dakle, ovo je lijep program za sortiranje od oruđa, jer moje Bog, ako baš mogao provesti ovo s nekoliko linija koda, možete ispljunuti cijeli lyrics to pjesma vrlo brzo. No, na tom putu, možemo početi sada zafrkavati osim nekih tih osnovnih petlje konstrukata i sada uvesti funkcije koje smo sami napisati, vratiti vrijednosti da mi prođe oko. Ali prvo, zašto ne bismo ići naprijed i uzeti naš pet minuta razbiti ovdje? A kad smo se vratiti, mi ćemo pjevati ovu pjesmu. U redu, tako da smo se vratili. A kad kažem sada ćemo pjevati ovu pjesmu, mislim programatski, a ne verbalno. Dakle, ovdje imamo beer1.c, što je jedan provedba ovog Posebno pjesma. I samo da bude jasno, za one koji nisu upoznati s onim što ova stvar izgleda, pusti me naprijed i napraviti beer1, Enter. Sada neka mi pokrenuti beer1, a što ćemo vidjeti - koliko boce piva tu će biti? Ja ću upisati u 99, kao i pjesma kaže. Upišite. A sad, ako smo se kretali kroz - Ups - ako smo se kretali kroz sve to, vidjet ćemo da je ovo je zaista pjevaju cijelu pjesmu. Čekaj malo. Moj klizač je malo zabrljao. Ajmo koristiti veći prozor. Dakle beer1, 99, tamo idemo. Dakle, ovdje imamo cijelu pjesmu, pjeva puno brže Računalo nego što je mogao biti kod nas. Dakle primijetiti, ipak, cikličku prirodu ovdje. Ona kaže 99, zatim 99, zatim "jedan uzeti dolje, to proći oko ", zatim 98. I sad to ponavlja opet i opet. Dakle, to je zapravo idealna prilika za neke vrste petlje izgraditi. Primijetit ćete da sam vrsta rezanja kutu ovdje. Primijetit ćete da sam rekao "98 boca piva na zidu, 97 boca piva na zidu ", i da je samo tako da kad smo doći do jedne boce piva, nemam brinuti o engleskoj gramatici. Ali, mi također može popraviti s malo, ako stanje, možda. Ako je taj broj u jednini, ići naprijed i reći "bocu", inače ako je množina, kažu "boce". Ali za sada, ja sam potpuno rezanje taj kut. Pa da vidimo što imamo ovdje. Dakle, imamo neke komentare na vrhu. Ja uključujući ove dvije knjižnice, kao smo često sam bio. I sada neka mi se pomaknite prema dolje do prvog Stvarni linija koda. Linija 17 započinje glavni. Linija 21 i 20 ima koliko boca piva tu će biti? A onda sam nazvati GetInt. A sada imam malo o uračunljivosti provjeriti. Dakle, ovo je konvencija da smo sada ću početi usvajanje na više rigorozno provjeriti korisnikov ulaz. Ponekad jednostavno ne žele da ih zatražiti ponovno i opet i opet. Ako korisnik vijci i ne surađuju, u redu. Zatvorite i jednostavno ne nositi s njima. I tako to je ono što ja radim ovdje. Ako je n manje od 1, Samo ću vikati na korisnika, "Žao mi je, da nema smisla." A onda ću samovoljno vrati jedan. Pa opet, to je samo konvencija naviknuti. Za sada, to se na vjeri. No, do sada, uvijek smo bili vraća 0, jer smo kazao povratka 0 označava ono što? PUBLIKA: Uspjeh. David J. MALAN: Uspjeh, to je sve. Tako da sada smo napokon počinju razmišljati o non-uspjesi - Drugim riječima, kutak slučajeva, pogreškama uvjetima - sada imam beskonačnu ponudu, ili barem četiri milijarde moguće stvari koje mogu poći krivo u mojim programima. I mogu početi dodjeljujući im pojedinačne brojeve. Sada, općenito dovoljno je samo povratak nešto drugo od 0. Tako ćemo jednostavno vratiti jedan za sada. No, razlog za povratak jedan je da čim se vratite 1, pogodite što se događa s ostatkom programa? Ona zaustavlja. To je to. Dakle, činjenica da sam u povratku jedan je učinkovito kratkog spoja Ovaj program je izvršenje, tako da ništa ispod linije 27 će nastaviti izvršenje. Čim glavnih vraća, to je to. U redu, tako da ako korisnik ne surađuju i dolazimo do linije 30 jer su upisali u legitimnom broju, ovdje je moj Provedba ove pjesme. Tako sam prvi ispisati newline karakter, samo za estetika. Sada imam za petlju. I primijetiti da radim stvari u malo od drugom smjeru. Ja ne moram raditi manje, ne moram raditi + +. Ja mogu reći umjesto inicijalizirati varijablu ja, postavljen je jednaka n, broj korisnika upisali u, a zatim učinite sljedeće, pa dok sam je veći od 0, onda ja - nakon što ste završili jedan iteracija ove petlje. Dakle, možemo računati dolje pomoću for petlje, kao dobro. Sada, to je prilično puno tjedna jedna stvar sada, s printf. Dakle print "% d boce piva na zidu." Ispis "% d boca piva. "" jedan Uzmi dolje, to zaobići. "Ispis "% D boce piva na zidu." Dakle, to je još uvijek% d, ali primijetiti da argument printf da se mijenja. Nakon zareza, ja imam, jer želim reći 99. Nakon ovog zarezom, ja imam, jer želim reći 99. Nakon ovog zarezom, ja imam - 1, jer želim reći 98 u ova prva iteracija, i tako dalje. I sada ovdje dolje, samo moram malo glupo malo primjedbu. A onda linija 42, vraćam 0 po konvenciji, što znači da je sve je u redu. Pa što ako sam goofed? Što bi uobičajena pogreška ovdje biti? Pa, što ako sam slučajno rekao dobro, ja ne želim računati do 0, želim 0 boce piva na zidu? Dakle, ja kažem, ja je veći ili jednak 0. Što će biti simptom koji ja sada vidim da sam rekompiliranje beer1 i pokrenite ga? PUBLIKA: Negativna. David J. MALAN: Da, to će ići negativna. Ovo je off-by-jedna pogreška, nevjerojatno uobičajena pogreška za napraviti. Ajmo zapravo vratiti na prozor terminala i učiniti ga ovdje, tako da možemo vidjeti više u isto vrijeme. Unesite, 99 boca piva. Zatvori, ali smo otišli ikada tako nešto predaleko. Mi je pjevao pjesmu predaleko dolje, tako da smo sada hit Negativan broj. Dakle, to ne sasvim raditi. U redu, tako da se lako može popraviti da ide natrag u način što je nekad bio. No, ono što su neke mogućnosti za sada poboljšanje? Pa, dopustite mi da otvorite beer2.c i dođite ovamo i uzeti pogled na ovoj verziji. Što je prva stvar koja skače na vas kao različiti u ovoj verziji ovdje? PUBLIKA: [nečujan]. David J. MALAN: Da, tako da nema više ja, jer to palo na pamet mi znate što, ja tražim korisnika za n, i onda sam postavljanje i jednak n, a onda sam ja mijenja, ali nikad nisam dira n opet. Dakle, ono što je ispitati kritički je točka od vas dodjele još 32 bitova zove ja samo tako da mogu imati različite varijable? Dakle, u ovom slučaju, ja vrsta priznati da nepotrebno značajka dizajna. I ja sad idem reći dok je n veći od 0, idite naprijed i ispisati istu pjesmu, prolazeći n do printf kao drugi argument, i n - 1 kao drugog argumenta ovdje dolje. A onda se na svakoj iteraciji ovog petlje, ići naprijed i samo dekrementirati n sama. Sada, funkcionalno, ovaj program će biti identičan. Ako sam upisati 99, n počinje u 99. Ja snižavanja, snižavanja, snižavanja, smanjuju. Ja ću dobiti sve na putu prema dolje kako bi "jedna boca piva na zid, jedna boca piva. Jedan Uzmi dolje, to zaobići. 0 boce piva na zidu. "Kraj, jer sam dobiti uvjet točne. To je veći od 0. Nisam napravila tu pogrešku. Dakle, što je bolje, verzija jedne ili dvije verzije? Dakle, čuo sam hrpu mrmljanja za dvoje. Zašto dvije? Što je to? PUBLIKA: [nečujan]. David J. MALAN: Oh, u redu. Dakle, to neće ići ispod 0, ali zapamtite, u verziji jedan, izvorna verzija nije točna ići ispod 0 bilo. Pa sjetite se da je to točno verzija. Dakle, neka je barem usporediti dvije ispravne verzije. Što je argument u korist verziji dva bića, mmm, bolje? Da? PUBLIKA: Ona koristi manje prostora. David J. MALAN: Ok, tako da koristi manje prostora, zar ne? Dok verzija jedan koristi 32 bita za n, a zatim još 32 bita jer ja. Verzija dva koristi samo 32 bita za n, tako da Čini se da je plus. Druge misli? Zar itko želi raspravljati u korist jedne? Da? PUBLIKA: Morate koristiti dodatni redak koda za n -. David J. MALAN: Dobro, jeste. Tako da je pošteno. Dakle, ovo je samo, barem za mene - Mislim, to je zapravo osjeća malo Messier, činjenicu da Ja ne mogu sortirati od utjelovljuje sve moje logike u jednoj lijepa linija, za petlju, kao for petlje može. Evo, ja nekako morati napada na ovaj n - na kraju petlje, jer to je logično potrebno. Ali to vrsta trlja mi krivi način, samo zato što Čini se odvojeno od logike do ovdje, iako, opet, to je potrebno. Druge misli? Da? PUBLIKA: [nečujan]. David J. MALAN: Da. Pa što ako umjesto toga, na kraju pjesme, htjela ispisati ponovo ime pjesme? Kao "Hvala za igranje 99 boca piva", ili nešto glup kao da? No, stvar je, što ste htjeli pristup izvorne vrijednosti. Činjenica da ste mutirao ili mijenjati n na svaki iteracija i stoga su uništili svoju izvornu vrijednost znači da jednostavno ne može učiniti da je na kraju. Sada, nedvojbeno, mi očito ne žele raditi da je u ovom programu. Dakle, tko mari? No, to je vrlo valjan točka. I da budem iskren, tamo je stvarno nitko pravo odgovoriti ovdje. Obojica su jednako točne. Mogao sam se uvjeriti u bilo kojem smjeru. Ja ću reći da, u načelu, to je dobar princip ako upitani korisnika za neke vrijednosti i pohranjeni u varijable kao n, samo vrsta u načelu, to je vjerojatno dobar držati da okolo. I sve podatke želite mutiraju i opet, samo dati sebe kopiju tog varijablu, tako da samo vi imati pristup izvorniku. Vi živite 32 više bitova, ali stvarnost je ovo Računalo je, kao, dva gigabajta RAM-a ovih dana, i mi smo smicalica preko 32 bita? Stvarno nije tako velika stvar. Pa čak i na ovom uređaju ovdje, s pola koncert ili gigabajt RAM-a, 32 bita naspram 64 bita, nije tako velika stvar. Dakako danas, to će biti put osvaja po veličini od samog programa, koji će biti nekoliko stotina kilobajta, ako ne i nekoliko megabajta, ovih dana. Dakle razumne brige, nitko ne pravi odgovor. No, barem one su misli da bi trebao početi proći kroz vaš um? Budući da u pset 0, iako smo stvarno samo očekuje ispravnost, ili barem odricanja od odgovornosti razne greške koje možda ste naišli, kao što smo naprijed, dizajn je će biti još jedan ključni aspekt, oboje pisanja koda i naše procjene koda. I tako barem dati mislio na stvari kao što je ovaj. I samo zato što nešto radi, ne znači da je dobro, ne znači da je dobro osmišljen. I to je jedna od stvari koje su nastavne bližnjima i Problem setovi će nam pomoći da zafrkavati dio tijekom vremena. Pa, što o, recimo, ovu verziju ovdje? Dopustite mi nešto malo seksi ovdje u ovom trenutku. Prvo neka mi riješi ovo. A sad ajmo riješili ovaj problem gramatičku. Dakle, u ovoj verziji, želim popraviti gramatiku, tako da, nego samo reći zagradi je, kao što je "bocu" ili "boce" - Ne želim smanjiti taj kutak - Također želim dinamički ispisati riječi "boce" ili "boca", čime pomoću% s rezervirana mjesta danas. Dakle, moram uvjetno provjeriti što je vrijednost ja. A ako je jedan, želim reći "bocu", i ako je to nešto drugo, želim reći "boce". Tako ćemo pokušati to učiniti. Dakle, ako sam == 1, onda me pusti naprijed i proglasiti - Trebam niz, pa neka me učiniti string s1, jer je prvi string mi je stalo upravo sada. Ja ću reći "bocu". A onda, ajmo vidjet, gudački s2 - a ja ću objasniti gdje idem u trenutku - "Boce". Dakle podsjetiti da, u ovoj pjesmi, moramo biti u stanju ispisati stvari, dvije različite riječi potencijalno. Dakle, ako gledamo unatrag ovdje primijetiti da kad dođemo do ovaj primjer ovdje ", dvije boce piva na zidu, dvije boce piva, jedan skinu, to zaobići ", želim ovo četvrti linija sada reći "jednu bocu piva na zid ". Dakle, moram odlučiti, ne želim reći" boce "ili "Boca"? Tako ću samovoljno reći, sve pravo, Idem sad proglasiti varijablu pod nazivom S1, niz jedan, da će doći uključen u ovdje i ovdje, jer su te riječi su uvijek isti, samo zbog priroda pjesmu. I ja ću zvati s2 god riječ želim s vremenom pojaviti ovdje. Sada, doslovce, 99 puta od 100, to će biti isti u oba od tih slučajeva, jer 3 je množina, 2 množine, 4 je množina. No, u ovom slučaju kutak, gdje smo dobili dva i onda jedan ili čak 1, a zatim 0, trebam tu logiku. Dakle, moram provesti neko vrijeme u mom kodu uzimajući to pravo. Dakle, ako sam to učiniti, ako sam == 1, zatim postaviti s1 jednaki "boce" i s2 jednaki "boca", jer će to biti za jedan boca, a to će biti za 0 boce. A ovo ovdje, što to predstavlja? Samo da bude jasno. Ovo je samo komentar. Dakle, činjenica da možete imati jednu-line komentare vas znači Možete komentirati svoj kod ovako, ali još jedna zajednička paradigma je, također, da ako imate super-kratka fraza koja Želite li se staviti i to je samo više čitati staviti to pravo na kraju linije koda, možete apsolutno učiniti nešto ovako. I što sad, ako sam to učiniti? Drugo ako je i nije jednak 1. Dakle bang jednaka - Uskličnik je poznat kao "prasak". Dakle bang = 1. Dakle, ako sam nije jednaka 1, što sam, umjesto želite učiniti? Pa, prva riječ želim biti što? Dakle, niz jedan bi trebao biti "boce" za množinu boce, i onda će to biti množina "boce", kao i, za sada. A vidjet ćemo, ako to zapravo dobiva nas na gdje želimo ići. Pa sad, ako sam dođite ovamo, primijetiti da sam plugging u Ne samo ja, nego s1. Ja sam plugging u I. i s1. I onda ovdje dolje, ja sam minus jedan, koji je isti kao i i prije, ali s2. Drugim riječima, želim englesku riječ za promjenu temelji na toj logici. Sada, tu je već neki problemi u ovom kodeksu. Što je slomljen već od vrata ovdje? Da? PUBLIKA: [nečujan]. David J. MALAN: Točno. Dakle, već sam povrijeđena lekciju djelokruga. Tako sam proglasio S1 i S2, ali sam to učinio unutar vitičastih zagrada, što znači da, ovaj kod će raditi do do linije 42, ali čim sam pogodio crtu 43, pogodite što ne više ne postoji? Pa, pogodite što više nije u opsegu - ni s1 ili s2. Dakle, moramo popraviti. Pa neka mi izbrisati deklaracije. I ja ću ostaviti varijablu imena i brisanje ovo ovdje i ovo izbrisati ovdje. A u ono linije trebao sam stvarno izjavljujem takve stvari? PUBLIKA: [nečujan]. David J. MALAN: Da, tako je vjerojatno gore desno ovdje, 33-ish. Dakle string s1, a zatim niz s2. A što se ispostavilo, ja to mogu. Ako ste proglašenja dvije varijable istog tipa, zapravo možete samo koristiti zarez i to u C. Sve desno, tako da sada imam dvije varijable - S1 i S2. Ja sam dodjeljujući im vrijednosti u tim uvjeti ovdje, ili ovdje. A onda sam ih koristite dolje. Kako je dobro ovo sada ide na posao? Pa, to je još uvijek malo lud, ali neka je barem vidjeti koliko smo dobili. Pa neka mi ići naprijed i učiniti beer3. Je li ovo beer3? Yep, to je beer3. I sada neka mi ići naprijed i pokrenuti beer3. 399 99. Mi vjerojatno može preskočiti većina njih. A ovdje dolje, pogled na to. "Jedna boca piva na zidu, jedna boca piva, uzeti jedan dolje, to zaobići, 0 boce piva na zidu. " Ali crtam pozornost na samo pola rješenja. Vrsta zeznuo ovdje. Dakle, čini se da su slučajevi kutak nastaju kada sam jednako ono dvije vrijednosti? PUBLIKA: 2, 1. David J. MALAN: 2 i 1. To nije jedan, a ne jedan. To je zapravo samo ove zadnje dvije strofe ove pjesme. Dakle, ono što mi je umjesto želite učiniti? Dakle, čini mi se da su uhvatili slučaj gdje ako je i == do 1, onda je prvi riječ "bočica", ali druga riječ je "boce". Ali ovdje, želim da se to promijeni biti == 2. A ako je to slučaj, što ne želim Prva riječ biti? PUBLIKA: "Boce". David J. MALAN: "Boce", tako da za dvije boce. I onda se ta riječ ovdje bi trebao biti - PUBLIKA: "boca". David J. MALAN: "boca", u jednini. U redu, neka je povećali, vratiti ovamo, ponovno pokrenuti napraviti, re-run beer3, tip 99 opet. Ok, "Segmentacija kriv (jezgra bačena)." Što sam učinio krivo? PUBLIKA: Vi nemate vrijednost [nečujan]. David J. MALAN: Ah, odličan točka. U redu, tako što je krivo ovdje? Dakle segmentacije kvara, a mi zapravo idemo vidjeti Ovo je sasvim nekoliko puta u budućnosti, namjerno. Ali za sada, što to zapravo znači? Segmentacija kriv gotovo uvijek znači da morate nekako pokušali pristupiti memorije, RAM na računalu, da ne posjedujete, da niste zapravo pitao operativni sustav za. Dakle, u ovom slučaju, primjetiti ono što sam učinio, što je manjkav u mojoj logici. Ja sam dodijeljen S1 i S2 vrijednost ako ja jednaka jedan. Također sam učinio da ako ja jednako dva. Ali nisam to učinio u bezbroj drugih mogućnosti - posebno, 3 ili 4 ili točka, točka, točka, 99. Dakle, jedan fix za ovo mogao biti samo neka je imati drugo stanje. I da me pusti unutra i reći s1 jednak - što bi trebao biti ovdje? PUBLIKA: [nečujan]. David J. MALAN: "Boce", jer se u zajedničkom predmetu, to je samo ista stvar. Dakle, jednako citat, završiti citat, "boce". Dakle, za množinu boce, a onda se ovdje, za množinu boce. Ok, tako da sada pusti me natrag u moj prozor terminala, rekompiliranje, ponovno ga pokrenuti. 99. Uh. I neka je učiniti brzo razum ček. Tehnički, mi bi željeli čitati sve to kako bi bili sigurni oni su točne, ali pogledajmo najmanje poznati krivci. 3 boce, 2 boce, 2 boce, 1 boca, jedna boca, 0 boce. Izgleda da smo ga barem fiksno za sada. No, kvaka je u tome što je Bog strašno nered je to samo riješiti glup jedan lik gramatičke detalja. Dakle, tu je vrsta razloga da sam smanjiti ovu kutak ranije, jer to je samo potpuno neugodno da moraju napisati ovaj puno koda. No, ispostavilo se da postoji nešto više elegantan način izražavajući točno istu stvar. A to možemo napraviti kako slijedi. Dopustite mi da ovo ostaviti na zaslonu za trenutak i uvesti nešto poznat kao ternarni operator. To je vrsta jedan-liner koji je samo značilo da bi naš živi malo seksi, kao što je obećao. I ja ću to učiniti na sljedeći način. Daj mi niz zove s1, i pusti me dodijeliti to kako slijedi. (I == 1)? "Boca", inače "boce". Gudački s2 dobiva (i == 2)? "Boca", inače "boce". Pa što je onda razlika ovdje? Ove dvije linije koda, tvrdim, mogu zamijeniti ovu zbrku. Tako sam ga nazvati nered, samo zato što je vrsta trlja mi krivi način da je toliko linija koda. Nije u redu. To nije loš dizajn. Kao, to je savršeno točno i savršeno u redu. No, kodiranje dobiva zamorno ako imate izraziti sebe tako damn posebno opet i opet i opet s jednostavnim scenarij kao što je ovaj. Dakle C ima neke prečace, kao što je ovaj. Dakle, to je bitno rekavši proglasiti string zove s1 i dodijeliti bilo ova vrijednost ili ova vrijednost ako je i == - Žao nam je, trebao bih reći da je ovo jasnije. Proglasiti varijable s1, dodijeliti ovu vrijednost ako je to istina. Inače, dodijeliti mu tu vrijednost. Dakle, drugim riječima, to je neka vrsta jedan-line način govoreći, ako drugi, ali to je zadatak na putu. Dakle, ako je i jedan, a zatim ići naprijed i to nazivamo "bocu". I onda je ovo drugo, to nazvati "boce". U međuvremenu, s2, Druga riječ da trebamo definirati, ako sam jednako dva, mi ćemo postaviti s2 na "boce". Inače, postavite ga na "boce". I ono što to znači sada je mogu proći kroz to i izbrisati sve ta linija koda. A kad kažem, pomalo smiješno, da je to sada seksipilnije, to je seksi u kakve stilske smislu. Činjenica da je funkcionalno, ovaj broj zapravo ide napraviti točno istu stvar. I iako bi to moglo izgledati malo zagonetan na prvi pogled, jer nismo vidjeli ovaj konstrukt prije, ja bih tvrde da je to u konačnici će biti tako mnogo više čitati i tako puno lakše za mi ljudi da vrsta razumjeti, jer sada možete samo čitati Kod sve na jednoj liniji. To je još uvijek slični u duhu ako, gdje je to stanje i onda je to ono što je unutra, ako i to je ono što je unutar drugog. No, to možemo učiniti samo mnogo elegantno. A ako ja sada vratiti u svoju terminala, nakon što je izbrisan sve od tih linija i zamijenio ih sa samo one dvije, rekompiliranje, ponovno pokrenuti boce piva s 99, obavijest da je moje gramatika je, u stvari, još uvijek točna. Pa opet, nešto za početak. 2 boce piva, jedan boca piva. Izgleda pravo. Da. Dakle, tu imamo puno više jezgrovit rješenje. Dakle, to je, također, kao što ste dobili više udoban sa C, a ne nužno s prvom pset ili čak drugi, ali shvatiti da ovi konstrukti mogu nam omogućiti da učinite stvari ikad više elegantno. Sada ćemo napraviti jednu drugu stvar ovdje. Dopustite mi ići naprijed i otvoriti return1.c. Sada krenimo riješiti još jedan problem na način da nam omogućuje da pisati više sofisticirane koda. Dakle, ovdje je jednostavan mali program čiji je cilj u životu je za povećanje vrijednosti. A zapravo, ajmo uzeti jedan korak natrag. Dopustite mi da to učinite ručno. Dopustite mi da to uključuje i int main (void). I neka mi to nazivamo increment.c. A što ja želim učiniti? Ja ću ići naprijed i reći nešto poput - ćemo nazvati brojeve ista - int x. Dakle, int x dobiva dva; printf x je% d, nova linija, x. Dakle, ja sam tipkati brzo, ali vrsta poznatom stvari sada. Tada ću učiniti x + +. Onda idem ispisati taj isti rečenicu ponovo. A onda ću se vratiti 0 samo za izlazak iz programa. U redu, tako da je ovo program koji koracima broj. To je prvi će inicijalizirati nešto dva, a onda je će ga povećavati i ispisati ga opet. Dakle, neka je pokrenuti prirast, nevjerojatno jednostavan program. Ali pretpostavimo da sada želim kocka vrijednost, tako da nešto donekle proizvoljna. A ja zapravo želim učiniti x dobiva kocku njega. Tako sam mogao koristiti ono što se zove Pow funkciju, ali ja ne znam gdje da je još uvijek. Dakle, ja ću to učiniti na starinski način. x puta to iznosi x puta x puta x. Tako sam cubing vrijednost, to pomnoži sa sebe opet i opet i opet, tako da smo dobili snagu od tri u ovom slučaju. Dakle, sada su brojevi trebam ispisati bi trebao biti, kao što ćemo vidjeti ovdje - da prirast, tako da je zapravo stvarno ne povećavati više, ali ćemo ostaviti na miru ime - 2 i zatim 8. Sada imamo početke priliku za doradu Ovdje, pri čemu ovo cubing stvar množenjem broja po sebi sama po sebi po sebi osjeća kao što je ovaj može biti samo korisno imati u funkciji, baš kao netko odlučio godina - znate, vrsta korisno ako jedan od nas sjedne i piše printf tako da ostatak svijeta može ga koristiti, zašto ne bismo sjesti i napisati funkciju zove kocka da se ovaj cubing za nas, tako da ne morate ručno provoditi pojam cubing vrijednosti ovdje? Dakle, jednostavnom primjeru, ali idemo naprijed i koristiti to kao prilika pisati vlastitu funkciju. Dakle, do sada, možemo samo sam se glavna, a mi smo koristili druge ljudi funkcije, ali nismo pisali su naša vlastita. Dakle, ovdje mi ići. Ja ću ići naprijed i napisati funkciju zove kocka. I ja ću ga uzeti ulaz. Tako njegov ulaz će biti cijeli broj. A što će to učiniti? To će proglasiti int izlaz = ulaz puta ulaza puta ulaza. I onda se događa da se vrati taj izlaz. I onda moram biti specifična sada. Ova funkcija će vratiti int. Dakle, ovdje je onda kako bih napisati svoje funkcije. Najprije odlučite što je naziv vašeg Funkcija će biti. I općenito, nešto objašnjivo je dobra, pa ću nazovite to kocka. Zatim morate odrediti što će se vratiti, što je njegov izlaz će biti. A mi nemamo mnogo mogućnosti da se još. Interesi, char, float, bool, niz. Za sada, ja ću se držati s int, jer ja to želim vratiti cijeli broj. Tada ćete morati odrediti što njegovi inputi, ako ih ima, jesu. A ako kocka uzima argument, ima nešto između zagrade, morate dati taj argument ime, tako da možete nazvati nešto kao da ste provedbi ili pisanje ova funkcija, a vi morate dati tip, koji je u to slučaj će biti int. Dakle, u kratko, kocka je funkcija koja traje cijeli kao ulaz i vraća cijeli broj kao izlaz. Pa što se to učiniti s tom ulazu? Pa, u skladu 14, izjavljujem varijablu nazvanu izlaz, i ja dodijeliti vrijednost, ulazni puta ulaza puta ulaza. I onda sam se vratiti izlaz. Pa kako sam koristiti to onda? Što trebam promijeniti ove istaknute znakove na liniji 7 da se, što mislite? PUBLIKA: [nečujan]. David J. MALAN: Da, tako kocka x. Tako je x varijabla, što znači da ima neku vrijednost. Srećom, to je tipa integer. I zato je x int, to znači da ja mogu proći u kocki. I iako sam preskakanja vrijednost x sa vrijednosti od kocke x, kao što je to bio slučaj do sada, svaki put kad imati znak jednakosti i linija koda, stvari na pravo dobiva izvršiti, a zatim dobiva dodijeljena Vrijednost na lijevoj strani. Dakle, da bi operacija je kako bismo se nadam. Tako to funkcionira? Pa, pusti me ovdje dolje. Dopustite mi da otvori svoj prozor terminala. Dopustite mi da ne bi prirast, Enter. "Implicitno deklaracija funkcije 'kocke' je nevažeća C99. "Kao na stranu, C99 se odnosi na jezik C kao što je bio definirano u 1999, koji je bio ažuriranje preko verziji od 1989, koji je ažuriranje preko originala. Tako da je sve to znači. Dakle, što to znači da je "implicitno deklaracija funkciji "kocka" je nevažeća? "To je upravo ovdje. Tamo je u skladu 12. PUBLIKA: [nečujan]. David J. MALAN: Što je to? PUBLIKA: To je ne prije. David J. MALAN: To je ne prije. Dakle, ovo je stvar. C je glupo, ili C kompilatora su glupo. Oni su stvarno samo ono što vam reći da učine. I oni, posebno, samo čitati vrh koda do dna, lijeva na desno. Dakle, ako prevodilac, zveka, čita svoj kôd, linija 1, to figure out kako to učiniti. Oh, ovdje dolazi glavni. Ok, neka mi ići naprijed i proglasiti varijable x.. Dopustite mi da nešto ispisati. Linija 7, što je ispitati kritički je kocka? To nije proglašen stdio.h. To ne dolazi s C. Nemam pojma što učiniti. I tako jek samo bails i zatvara s tom porukom pogreške. Tako možemo popraviti u nekoliko načina. Možemo učiti jeka što kocka je samo pomicanjem gdje Deklaracija je. Tako sam izrezati i zalijepiti ga na vrhu glavni. Sada shvatiti da samo zato glavni više nije prvi, to je još uvijek izvode po defaultu. Glavni je glavni. To je ime zadana funkcija. Nije bitno gdje je u datoteci. Ali barem sada zveka je vidio kocku prije nego što sam ga koristiti. Dakle, neka je vidjeti ako zveka je sretnija sada. Napravite prirasta, to nije sastaviti ovaj put. Dopustite mi pokrenuti prirast. I doista, čini se da se radi. Sada, možete doći do scenarija na kraju gdje to nije moguće staviti sve funkcije iznad svakog drugog funkciji. Vi ćete zapeti u ovoj beskonačnoj petlji u stvarnosti, gdje je taj momak želi biti ovdje, ali ovo čovjek treba biti tamo. Tako da ne uvijek rade. Dakle, srećom, C ima elegantnije rješenje. Ja ću staviti ovo leđa gdje je bio, samo zato što sam radije, kao stvar principa, da glavni uvijek biti na vrhu, jer to je samo lijepo vidjeti što ovaj program radi po defaultu. I ono što ću učiniti ovdje se izjaviti ono što se zove prototip. Idem ponovno objavim kocke funkciju doslovno kopiranje i lijepljenje. Zapravo, to nije doslovno. Dakle, doslovno kopiranje i lijepljenje linije 15 gore linije 6. To ne smeta što je ovo linija završava na. To se događa da se na liniji četiri. No, to ne mora biti prije glavne. Ali primijetiti razliku. Linija 4 završava sa zarezom, što znači hej, Jeka, uzeti moj riječ za to da postoji funkcija zove kocka koja uzima jedan int i vraća int. No, neću vam reći što je to još uvijek. Samo znam da sam obećanje da vam kažem na kraju. I doista, sad je ok da je to dolje. Dakle, ovo je općenito bolje, jer onda na vrhu Vaša datoteka, možete samo rattle off, brzo vatre, jedna linija svaki, što su imena svojih funkcija, ono što njihovo ulazi su, što su njihovi rezultati su. I da bude jasnije, ulaz općenito znači argument ili parametar, sinonim. Izlaz znači povratnu vrijednost, što ga čini ruka natrag na mene. Dakle, u ovom slučaju ovdje, kocka je proglašen na vrhu, ali definirana, inače poznat kao provodi, na dnu. Dakle, sad idemo nazad ovdje i ponovno pokrenuti ovo. Pa sada neka mi ići naprijed i ponovno pokrenuti napraviti, ponovno pokrenuti prirast. I sada se čini da se radi sasvim u redu. Dakle, sada možemo ići naprijed i uzet iz nešto poput pivo primjer u ovoj četvrti verziji. Pa neka mi dođite ovamo. I primijetiti da sam nekako uzeo ovu lekciju na srcu upravo sada. Činjenica da sam pjevao istu kiticu opet i i opet, isti zbor linija u pjesmi, osjetio sviđa zašto ne bih faktor koji se u funkciji? I doista, to bi trebao biti jedan od motiva. Osim činjenice da je netko drugi u svijetu možda želite koristiti funkciju kocke - to je dobar razlog da faktor nešto i napisati svoj vlastiti običaj funkcija - ako postoji komad koda u svom programu da samo čini konceptualni osjećaj, da ste vrsta želite dati ime - kao u ovom slučaju, zbor - onda slično može napisati da je kao zasebna funkcija. Vi ne morate pisati sve što je u glavni, ako to samo osjeća čistač ga izdvojiti i dati joj ime. Dakle, u ovom slučaju ovdje, primijetiti da imam komentar na vrhu ova funkcija samo da pjeva o navedeni brojevi boca. Obavijest da sam ovdje ne treba zvati ove stvari ulazne i izlazne. U stvari, ovaj put sam nazvao moj ulaznog b za bocu. I primijetiti, nevažeće sugerira što? To zbor - PUBLIKA: Ne ga vratiti. David J. MALAN: Ne vratiti vrijednost. I doista, funkcije ne moraju vratiti vrijednosti. Oni samo mogu nešto učiniti. Oni mogu imati ono što se naziva nuspojave, koji je u to Slučaj je samo cijela hrpa ispisa na zaslonu. Dakle, primijetite da je to kod ovdje, doslovno sam upravo ukrao iz prethodnog primjera. Jedina razlika je umjesto koristim kao svojega varijabla, ja sam sada pomoću b kao moj varijable. Dakle, imam b ovdje dolje, imam b ovdje dolje, imam b minus jedan ovdje dolje. Ali kod je isti. No, samo da vam pokažem kako sada možemo koristiti ovo, pusti me naprijed i zapravo promijeniti to da se za petlje. za (int i = n; i> n; i -). Tako sam ukrao da iz našeg prethodnom primjeru. Prije toga, to je u redu 37 da bih počeo pjeva ovu pjesmu neugodno. No, umjesto toga, ja samo idem sada zvati pripjevom ja. Gotovo. Tako sada u svakoj iteraciji ove petlje, sam nazvati ovaj drugi funkcija, zbor, da mi se dogodilo da pisati. To nije napisao netko drugi godina. No, zbor, u međuvremenu, koristi printf za ispis od ove četiri linije. No, činjenica da sam pozivom refren i opet u petlja znači da ću dobiti, na samom kraju, Isti pjesma kao što sam ja do sada. Dakle, u kratko, ako sada sam se osvrnuti na mom kodu, iako funkcionalno to je ekvivalent, primijetiti da je počinju da se još više čitati. Ja ne znam točno kako se GetInt provodi. Iskreno, ne znam kako se refren provodi. No, to ne smeta mi. Ne zanima me, jer sada mogu sortirati u, kao čovjek, pročitajte to od vrha do dna. I zato se funkcije nazvane prema onome što su učiniti, moj broj je sve čitati. I dok naši programi dobiti mnogo složeniji - po semestru na kraju, vi ćete biti pismeno stotine linija koda u jezicima kao što su PHP i JavaScript i kao - vidjet ćete da je tako puno lakše nego pratiti ono što ste učinili. A kad počnete surađivati ​​s prijateljima ili partneri ili suradnici, vi ćete biti u mogućnosti pisati mnogo više masivni programi po počinju ostvarivati ​​ove osnovne izgrađeni. Dakle, s koje je rekao, zašto ne zovemo ga dan? A mi ćemo vas vidjeti u srijedu. [Pljesak]