[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]