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