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