[Powered by Google Translate] DAVID J. Malan: Bone, ĉi tiu estas CS50, kaj ĉi tiu estas la
komenci de semajno du.
Dankon.
Ni komencos ĉi tie kun alvokon.
Mi volis marki 617-Bug-CS50.
CS50: Ĉi tiu estas CS50.
Por pramo Knabo, klaku 1.
Por ekigi plus premi 9.
DAVID J. Malan: Do li diris al pramo Knabo, gazetaro 1.
Do ni tuj premi 1.
CS50: Kio estas via deveno?
Por quad, premu 1.
Mather, gazetaro 2.
Boylston, gazetaro 3.
Lamont, gazetaro 4.
Mem Hall, gazetaro 5.
Por ekigi plus premi 0.
DAVID J. Malan: Ni premu 1 por quad.
CS50: Sekva pramo lasas nuna minuto, je 1:10 am, kaj
tiam, je 1:20 PM, 1:30 am, 1:40 PM.
Ĉi tiu estas CS50.
>> DAVID J. Malan: Do ĉi tiu estas CS50 vocxo.
Kaj estas ekzemplo de la varoj de fina projektoj, por
Ekzemple, vi povas mordi ekstere al
Fine de la semestro.
Ekzemple, ke ekzistas shuttleboy.cs50.net -
fakte projekto, kiun mi unue verkis post preni CS51
reen kiam mi estis studento.
Kaj la inspiro tie estis tiam, ĉiuj ili havis estis
la presita buso horarojn, kaj ne estis
nocio de looking aĵojn en linio.
Kaj do mi ia kolombo en unu semajnfino, verŝis tra la
presita horaro, kaj portita al komputila programo.
En la momento, la komputila programo okazis al esti skribita
en C. Kaj vi efektive kuris ĝin tajpante pramo Knabo ĉe
palpebrumante instigas kiel ni estis farante tiel for.
Sed tra la jaroj, ĝi estas evoluis instantáneo
mesaĝado bot.
Oni evoluis pli lastatempe en ĉi tiu retejo, enen
SMS-bazita ilo, tiel kiel en ĉi tiu voĉo-bazita ilo.
Kaj jen estas por sugesti al la varoj de aĵoj kiujn vi povas
faru por vi mem per semestro la fino.
>> Ekzemple, tie, la SMS versio de Pramo Knabo okazas
operacii kiel sekvas.
Se, en via poŝtelefono, vi sendu mesaĝon de teksto al 41411 kaj
tiam sendi la specialajn simbolon sboy, por pramo Knabo,
sekvata de A kaj B, kie A estas origino kaj B estas
destino -
ekzemple, Boylston Spaco Quad -
kion vi devas reiri ene de kelkaj sekundoj estas teksto
mesaĝo de Pramo Knabo diras al vi precize kiam la
venontaj pramoj estas, de tiu punkto A tuj ke
punkto B.
Kaj jen estas pli ĝenerala ekzemplo de kio konata kiel
uzante API.
>> Do ekzemple, ĉi tie estas nur shuttleboy.cs50.net, la
reala reta personigo de ĉi.
Sed la datumoj kiuj substrekas ĉi tiu kaj aliaj apps ke CS50
disvolvis estas ĉiuj elmontris al ĉiuj ĉi tie en la formo
de APIs, apliko programado interfacoj.
Kaj tio estas nur fantazio maniero diri ke la homoj kiel ni en
la Interreto kaj aliaj pasigis iom da tempo krei
programaro, kiun vi povas uzi por kapti datumojn de ni kaj
tiam konstrui vian propran aplikoj sur supro
de tiu aro de datumoj.
Do ekzemple, ĉi pramo Knabo API paĝon tie ĉi, kion
hazarde estas en la CS50 manlibro, esence dokumentoj
kiel vi povas iri sur petante CS50 serviloj por datumoj.
Ekzemple, se vi estas familiara kun CSV-dosieroj, komo
disigitaj valoroj, tiuj estas nur speco de rapida kaj malpura
Excel-kiel dosierojn.
Do vi povas peti pramo Knabo por ĉiuj el la datumoj de ĉiuj
domoj kaj iliaj GPS koordinatoj, kaj vi ricevos
dorso, esence, al ŝtono kiel tiu kiun
vi povas tiam legis en programo de via propra kaj poste
generi rezultoj, kiel pramo Knabo mem
pasas al farante.
Por tiuj pli familiara, pli moderna datumoj reprezentoj
inkluzivas JSON, JavaScript Objekto Skribmaniero.
Io revenos al vi al
Fine de la semestro.
>> Sed denove, ĉi tiu estas nur unu el pluraj de CS50 propra API.
Kaj la ekscita afero estas nun, ĉi tiuj tagoj, Facebook kaj
Twitter kaj Google kaj preskaux cxiu populara retejo el
tie havas ian API, kiu signifas, se vi legis la
dokumentado sur lia retpaĝaro, vi subskribas por
konton, vi povas tiam komencos skribi programaron sur
kion ajn iloj aŭ datumoj tiu kompanio ne provizas.
Kaj tiel unu el niaj propraj instruado uloj paron jaroj malantaŭen
skribis Mac versio de ĉi.
Do je la ligilo titolita Mac ĉi tie supre maldekstre, vi povas efektive
elŝuti Mac OS fenestraĵo kiu kuras sur viaj Mac fari la
sama specoj de aferoj.
Do ĝi ĉion pri konstruado sur supro de datenaroj kiel tiuj.
Sed pli en tiu direkto al la fino de la semestro.
>> Do estu la plonĝi en reala rapidu cimon, nur por ia akiri
aĵoj hejtis hodiaŭ, kaj pensi reen sur iu el la
aĵoj ni rigardis lasta semajno.
En aparta, lasu min antaŭeniri kaj tiros, diru,
ĉi tiu ekzemplo tie.
Buggy1.c, ĉi tiu estas disponebla en la kurso de afiŝinto se vi volas
kiel elŝuti ĝin kaj poke ĉirkaŭ vi.
Sed estu la zomi tie en ĉi tiu sufiĉe mallonga programo, kaj nur
super-rapida recap de iuj el la bazaj blokoj ke
ni vere tuj komencu prenante por sentado.
>> Do la blua ŝtofo, en linioj 1 ĝis 9, estas nur
softbalo demandoj.
Do tiuj estas nur komentoj.
Ili ne havas funkcian signifon.
Sed ili estas komentoj en la senco ke ili estas notoj, ke
Mi, la homo, farita al mi mem tiel ke en prelego kaj post
prelego, mi povas vere memori kio tiu programo
faras sen devi legi per ĝi linio por linio kaj
amuzante historio en mia menso.
Cetere, se mi transdonos tiun programon al iu alia kiel
vi, estas multe pli klara al vi, ĉar de komentoj kiel ĉi tiu,
kion la programo efektive faras, aŭ almenaŭ tio, kion la
programo Laŭprognoze esti farante.
Ĉu ĝi estas korekta estas alia afero entute.
Nun, en C, kun plurliniaj komentoj, memori ke sur linio
unu jen la magio simbolo, / *.
Ĝi signifas tie venas la komenco de komento.
Kaj nenio pli gravas ol vi atingas la finon finilo,
kio estas * /, la malo.
Do la fakto, ke mi havas 80-iuj neparaj steloj tien el
maldekstre dekstren estas vere nur estetika detalo.
Ĝi ne havas funkcian signifon.
>> Nun kion pri linio 11?
Kion tio do en lego la terminoj?
Kio estas tio?
Spektantaro: Inkluzivas la normo.
DAVID J. Malan: Bone, vi bona.
Do ĝi inkludas la stdio.h biblioteko.
Do kion tio signifas?
Nu, enen tiu dosiero, stdio.h, estas tuta aro da
funkcio deklaroj -
tio estas, kodo kiu iu alia skribis.
Kaj perfekta ekzemplo de funkcio ke tio deklaris en
stdio.h estas -
kiu preferita de nun?
Do printf, unu el la plej komunaj uzi, certe
frue, de tiu biblioteko ekzistas.
Se mi ekskludi tiun linion de kodo, Clang tuj krii
ĉe mi ion pri uzante nedeklarita simbolo.
Io ne deklarita estas probable la ŝlosilvorto, ĉar
ni ne informis la tradukilo kio printf aspektas
kiel se ni inkluzivas tiun linion.
Kaj pli malsupren al la tero, vere, kion tiu linio diras estas
malfermi tiu dosiero, stdio.h, kie ajn ĝi estas ĉe la servila
malmola disko, aŭ la aparaton la malmola disko, kaj kopio-paston ĝin
Dekstre en mian dosieron, sen mia
devi fari tion permane.
>> Nun, iam ni atingos cxi tie al ĉefa, antaŭ longa ni komencu
ŝercoj aparte kio int kaj kion void estas.
Sed nuntempe, ni rigardu la tri linioj
ene 15 tra 17.
Ĉi tie mi asertas kiel kalesxo.
Linio 7 en mia komentoj diras "Should presi 10
asteriskoj sed ne. "Kial ĉi ne presi, fakte,
10 tiaj steloj?
Spektantaro: [inaudible].
DAVID J. Malan: Ĝuste.
Do rimarki ke ni komencas rakonti de 0.
Kaj jen estas fakte konvencio en programado kaj
komputiko pli ĝenerale, komencante por rakonti
de 0 anstataŭ 1.
Kaj jen vere nur derivas de la fakto ke, por
Ekzemple, kiam ni havis ok personoj sur la scenejo, kiam
neniu levante sian manon, ke ili
ĉiuj efektive nuloj.
Kaj tiel estas nur speco de komputila konvencio tiel,
sekve, por komenci rakonti de 0.
Se tio estas la plej malalta nombro povas reprezenti en duuma.
>> Do jen ni komencis inicializar i al 0.
Ni starigis i egala al 0.
Sed tiam mi faris ĉi tiun eraron tie, dirante i estas malpli ol aŭ
egala al 10.
Sed se vi pensas ke per, se mi komencas ĉe 0 kaj tiam mi iros
ĝis 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, mi fakte tuj
presi 11 stelojn al la ekrano, ĉar mi iris
al kaj egalaj al 10.
Do la facilan solvon ĉi tie do estas kio?
Spektantaro: [inaudible].
DAVID J. Malan: Just ŝanĝi ĝin al malpli ol.
Se vi vere volas, vi povus fari tion.
Sed ĝenerale, ke tio malaprobita.
Kaj tiel komencas kalkuli de 0 estas nur io, kion vi devus
tipe kutimiĝos.
Nun, kio pri ĉi tiu tuta konstruo en kaj de sin?
Ĉi tiu linio 15 demarks a por buklo.
Do por estas ne funkcio.
Estas nur komunikaĵo.
Estas looping konstruo, kiel ni vidis en Scratch.
Kaj ĝi havas tri partoj.
Rimarku, ke estas la unua parto
maldekstre de la punktokomo.
Jen la meza parto en inter la du punktokomojn.
Kaj tiam ekzistas la dekstra parto de la dekstra
de la dua punktokomo.
Nun, la unua de tiuj kiu faras kio?
Spektantaro: [inaudible].
DAVID J. Malan: Back tie?
Yeah?
Spektantaro: inicialización.
>> DAVID J. Malan: inicialización.
Do kion tio signifas?
Ni deklaras variablon vokis mi.
Ĝi estas de tipo int, ĉar mi specifitaj int i.
Kaj mi inicializar i al la valoro de 0.
Do kio ĉi vere diras?
Ĝi estas efektive dirante al la komputilo hey, donu al mi sufiĉe
memoro, sufiĉa memoro RAM, por persvadi numeron, kaj tiam metis la
nombro 0 en tiu bloko de RAM.
Kaj kiel flanken, kiom granda estas int tipe, almenaŭ interne
de la aparaton?
Spektantaro: 32 bitoj.
DAVID J. Malan: 32 bitoj.
Do tio signifas al mi 32 bitoj, alie sciata kiel 4 bajtoj,
kaj alfortikigu la valoro 0 en ĝin, kio estas sufiĉe facila ĉar
ĝi simple signifas starigis la tutan bitoj al 0.
>> Do nun, la dua parto jen la kondiĉo.
Kaj la kondiĉo, kiel la nomo sugestas, estas kio kontrolis
denove kaj denove kaj denove pri tio, ĉu ĝi estas vera aŭ malvera.
Do ĉi tiu estas nur diras fari la sekvajn liniojn de kodo -
nome linio 16, ĉar tio estas la sola dentado
sube -
tiel longe kiel i estas malpli ol 10.
Kaj post ĉiu ripeto tra tiu ciklo, do la
incrementation, kiu en ĉi tiu kazo estas mi + +.
Nun, ĝi ne devas esti i + +.
Ĝi povus esti mi -.
Sed se mi faris ĉi tion, kion la konduto tuj
esti de tiu programo?
Spektantaro: ĝi tuj estos senfina ciklo.
DAVID J. Malan: ĝi tuj estos ia senfina ciklo,
se ni preni bonŝanca post negativa 2 miliardoj aŭ tiel.
Eble tio estos envolver ĉirkaŭe, kun nur naturo de la finia
nombro de bitoj, ke ni jam asignitaj por int.
Sed ĝi estas certe tuj persisti multe pli ol 10 kaj
certe pli ol 11 fojojn tie.
>> Kaj nun, ĝuste kiel flanken, rimarkas ke mi + + kaj mi -
estas vere nur sintaksa sukero.
Estas nur stenografio skribmaniero por kio estas iom pli
eksplicite skribita kiel sekvas:
mi = mi + 1.
Tio estas identa al mi + +.
Ĝi simple ia aspektas pli belaj diri i + +.
Estas pli konciza, pli legebla.
Kaj tiel multaj homoj faros ke anstataŭ.
Sed ĉi tiu estas identaj funkcie al
kion ni ĵus vidis.
Do mallonge, la rapidan solvon ĉi tie estas nur por diri persisti i
de 0 tuta vojo ĝis malpli ol 10.
Kaj tiam ni ja get 10 steloj.
>> Do ni provu tion.
Lasu min malfermi la terminalo ĉe la malsupro.
Lasu min iri en la dosierujo ke ĉi tio estas in
Kaj mi tuj kompili ĝin permane kun Clang por nun.
Kaj mi tuj kompili tiun kiel buggy1.c, Enter.
Kaj nun buggy1, kial mankas tiaj dosiero aŭ dosierujo
vokis buggy1?
Spektantaro: [inaudible].
DAVID J. Malan: Yeah.
Do ĝi estas reale nomita a.out.
Do rememori, se vi nur kuri Clang, kie Clang estas la
tradukilo, kaj vi ne indikas la nomon vi volas
doni al via programo, ĝi tuj default al a.out.
Do ja se mi faras ls -
oops.
Kaj mi didn't - la nigra-kaj-blanka temo kelkaj
vi alfrontis estis fiksita.
Sed lasu min fari tion.
Tie ni havas a.out sur la maldekstra flanko.
Do ni devas kuri a.out anstataŭ buggy1.
>> Do mi faru tion.
. / A.out, Enter.
Kaj mi ŝajne ne faris kion?
Spektantaro: Savu.
DAVID J. Malan: Savu mian dosieron.
Por ke estas facile solvita per bati Kontrolo S, aŭ tuj
Dosiero: Savu, kiel en plej programoj.
Lasu min iri cxi tie, certe la ekrano, ruli ĝin denove.
Kaj ankoraŭ cimon.
Do kio okazas -
Spektantaro: Vi ne kompili.
DAVID J. Malan: Ha, bona.
Mi ne kompili ĝin.
Kiel idioto, mi rigardas la kodon por vidi kio estas malbone.
Do clang buggy1.c, nun a.out.
Kaj phew, savita.
>> Do ĝi aspektas iom malbela ĉar ne estas nova linio
ie ajn en la programo.
Sed denove, tio estas nur estetika detalo.
Kaj almenaŭ se ni kalkulu tiuj el ni devus
nun zorgu 10 tiaj steloj.
Nu, kio pri tiu dua varma-supren ekzemplo?
Do en buggy2, mi asertas ke ĉi tiu versio, tro, tuj presi
10 steloj, unu po linio.
Do ĉi tiu fojo, mi havas novan linion karaktero, nur por fari
aĵoj iom pli bela.
Sed anstataŭ tio, kion mi get estas ĉi.
Do lasu min fari clang buggy2.c, Enter.
Nun ĝi estas denove alvokis a.out.
Eniri.
Mi nur vidas unu nova linio, nur la lasta nova linio kiu
movas mia prompto al la sekvanta linio.
Kaj tamen klare mi estis presi *, tiam nova linio,
*, Tiam nova linio.
Sed kio estas la cimo tie?
Yeah?
Spektantaro: [inaudible].
>> DAVID J. Malan: Ĝuste.
Do kontraste iuj lingvoj, kiel Python, kie deŝovon
reale havas funkcian signifon, en
lingvo kiel C -
kiel ni vidos, PHP, JavaScript -
la deŝovon estas vere nur por homoj 'profito.
Do la fakto, ke mi Duobla desxovo 16 kaj 17 aspektas granda,
sed ĝi ne havas funkcian signifon tie.
Se mi volas ambaŭ linioj ekzekuti kiel parto de la por
buklo, tiam mi devas kunsendi ilin en bukla krampoj farante tion ĉi.
Vi povas nur tranĉis tiu angulo kaj preterlasas la frizita krampoj se
kio estas la kazo?
Spektantaro: Nur unu linion.
DAVID J. Malan: Nur unu linion.
Do tio estas nur ia belan ia sintakso detale por ke
vi ne malŝpari tempon skribi tri linioj, du el kiuj estas
frizita krampoj, nur por skribi unu linion de kodo.
Sed se vi havas du aŭ pli linioj, ni
ja devas fari tion.
>> Do nun mi savos tion.
Lasu min kaj re-ruli Clang.
Tiam lasu min rerun a.out, kaj nun mi alvenas al ili unu por linio.
Nun, a.out denove estas speco de mutaj nomon por programo.
Kiel mi povas diri al Clang por fakte donos al mi dosiernomo
jen pli afablan, kiel buggy2 mem?
Iom pli klare?
Spektantaro: [inaudible].
DAVID J. Malan: Bone, do mi povas reale preni la tre
uzantamika ŝparvojo kaj simple skribi fari buggy2.
Mi ne specifas. C en ĉi tiu kazo, kaj batis Eniru.
Kaj kion fari faras estas kompilas buggy2.c por mi per
petante Clang fari ĝin.
Specife, flamo Clang, ĝi kuras Clang uzante vojon pli
komand-linio argumentoj aŭ ŝaltilojn ol mi reale bezonas.
En tempo, ni revenos al kio ĉiu el ĉi tiuj diversaj
kamufla hyphenated esprimoj signifas.
Sed nuntempe, ke tio nur ŝparas al mi la penon
devi memori kaj devante tajpi cxiujn el tiuj
diversaj hyphenated esprimoj.
Kaj la kapo de ĝi fine estas
ke nun mi havas buggy2.
Se mi volas fari ĉi permane, kvankam, mi
povas anstataŭe fari ĉi -
clang-o buggy2 kaj poste buggy2.c.
Kaj tio estos simile donu al mi dosieron nomatan buggy2.
>> Do mallonge, Clang estas la tradukilo.
Faru estas nur uzantamika ilo ke ni estos uzi pli
kaj plie, ĉar ĝi apenaŭ komencas
simpligi aferojn por ni.
Kaj ni revenos 0, persiste.
Por nun, nur ĉar, sed ni komencas ŝercoj tiu parto
hodiaŭ kaj merkrede.
Demandojn pri ajna el tio?
Yeah?
Spektantaro: [inaudible]
ls en citilojn tie?
DAVID J. Malan: Bone.
Kiam mi tajpitaj ls en citiloj, kiu estis al mi fari kelkajn magiajn
malantaŭ la scenoj ripari cimon.
Mi forgesis, kiel ni estis dirante multaj el vi en la
diskuto tabulojn, fari -
ni faros ĉi nun - ŝvitas yum-y ŝanĝo appliance50.
Whoops, ke ke tio literumita pravas.
Do la aparaton estas kiel mastruma sistemo.
Oni kuras ĉi tiu mastruma sistemo nomita Fedora.
Kaj nun pro mia malrapida Interreto rilato, mi havas
vere hosed ĝin.
Do kurante ŝvitas yum ĝisdatigo, kiel ni diras al vi fari en la
problemo aro, estas esence same kiel kuras aŭtomataj ĝisdatigoj
en Mac OS aŭ Vindozo.
Kaj la kialo por kuri ĉi je la tre komenco de la
problemo aro estas ĉar kiam ni kreis la aparaton, mi
paneas, kaj mi hazarde faris ĉiujn de viaj programoj aspektas
nigra sur nigra ekrano, tial vi ne vidas ilin
defaŭlte.
Sed la lasta versio de la aparaton fiksa ĉi.
Kaj mi riparos ke dum paŭzo fojon mi havas Interreto
konekteblecon.
>> Do la citilojn nur kaŝas mian eraron, tre diskrete,
ŝajne.
Aliaj demandoj?
Jes?
Spektantaro: Kie faras venis?
[Inaudible]
DAVID J. Malan: Bona demando.
Kie faras venis?
Estas Linukso programo kiu ekzistis dum multaj jaroj, longe
antaux CS50.
Kaj ĝi venas kun la mastruma sistemo kiel Fedora.
Ĝi ne venas el la CS50 biblioteko.
Fakte, la sola aĵoj kiuj venas de la CS50 biblioteko
tiel malproksime, ke ni vidis, estas GetString, GetInt, ĉiuj
tiuj Get funkcioj, kaj la vorto ŝnuro, kaj al iuj
mezuro, la vorto bool.
Sed ni tease ke krom kiam ni plonĝi en la CS50
aparaton mem.
>> Do jes, oni pli demandon ĉi tie.
Spektantaro: Kiam vi diris fari kaj tiam kalesxo, kiel faras la
komputilo scias [inaudible]?
DAVID J. Malan: Bona demando.
Do kiam vi ĵus kuras fari buggy1 aŭ fari buggy2, kiom
ne fari koni?
Do implicite, se vi tajpas fari buggy1, fari serĉas a
dosiero nomata buggy1.c.
Kaj tiam ĝi ekzekutas la taŭga Clang komandoj,
tiel supera la defaŭlta eligo-dosiero nomata a.out.
Fakte, se ni rigardas kio fari, kion -
ni quit ĉi.
Se ni rigardas kio fari estis reale faras, faru buggy2,
ĝi estas jam ĝis nun.
Do lasu min forigi la rm komando, La
programo mi skribis antaŭe.
Tajpi Y-E-S por konfirmi ke mi volas forigi ĝin.
Se mi nun faru fari, rimarki ke en ĉi tiu tre longa linio,
tie estas tio lasta afero ĉi tie,-o buggy2.
Ĉiuj fari faras pasas tiu argumento, por tiel diri, por
Clang, tiel ke mi ne devas tajpi ĝin mi mem.
>> Bone, do rapida kelkaj administraj
anoncoj.
Do por sekcioj, kiuj oficiale komencis ĉi venas
Dimanĉo, vi ĉiam volas alporti, se
tion vi havas, la portebla.
Se vi ne havas portebla, do alveni al mi de
delasante min retmesaĝo.
Kaj ni elŝeligi a laborfluo.
Kio ĝenerale vi trovos en la sekcio estas ke ili estas parto
koncepta, parto manoj-on.
Ni specife uzas la sekcio de demandoj, parto de
la semajno problemo aro, marŝi tra iu el la
konceptaj materialo el konferencoj.
Kaj tio estas ĉio en la nuna problemo aro.
Kaj ni ankaŭ plonĝi en iuj manoj-on aktivecojn, kelkfoje
de kiu estos postulita al esti donita, kelkfoje de
kiu ne estos.
Ekzemple, tiu ĉi unua semajno, ili estas signifis nur kiel
varma-supren ekzerco.
Kaj vi trovos, ke tiuj problemoj estas vere ĝuste tio.
Ili devus esti sufiĉe malgranda, sed ne nepre
bagatela programoj por skribi, ke ne estas bezone
ekscita en kaj per si mem sed estas bonaj ŝancoj por
praktiki kun sintakso, kun novaj funkcioj, en la konsolo de
sekcio kie vi havas kelkajn el viaj kompanoj prezenti kiel
bone kiel via TF.
>> Kaj kion ni faros kun la tempo estas uzi ilon nomata CS50 Spacoj,
per anstataŭ simple uzi la CS50 Appliance, vi
anstataŭ iri al retpaĝo en foliumilo, kie vi povos
skribi kodo en retumilo fenestro dum sekcio.
Kaj tiam se vi elektos en, via instruado ulo povas tiam montri
kion ajn ĝi estas vi tajpas en via ekrano en via retumilo
fenestro ĉe la fronto de la klaso, ĉu anonime aŭ
publike, tiel ke li aŭ ŝi povas tiam trairu kun
viaj samklasanoj, kion vi faris bone, kion vi ne faru bone.
Kaj denove, estu certaj ĉio ĉi povas bele anonymized.
Sed estos belan okazon por multe pli
interactividad ol iu kiel prelego permesas.
>> Dume, ni devos tion nomis super
sekcioj, kiuj estas nedeviga sed estas malfermitaj al ĉiuj en
la klaso, por ke vi povas fari tion pli kolektive por
problemo starigis unu.
Jen la horaro.
Ĉi tio ankaŭ eldonita en la hejmpaĝo ĉe cs50.net.
Rimarku ke estos hacker-specifa
unu morgaŭ posttagmeze.
Kaj ni filmar unu hodiaŭ kaj unu matenon kaj afiŝi tiujn
linio en 24 horoj.
Do se vi ne povas fari iu ajn el tiuj tempoj, ne maltrankviliĝu.
Kaj denove, la horaro estas linio nun cs50.net.
>> En terminoj de sekci sin, vi devas esti alveninta al
email instruante vin iri al la kurso de hejmpaĝo trovi
vian sekcio.
Se vivo ŝanĝiĝis, kaj vi bezonas ŝanĝi viajn sekcio,
ne estas problemo.
Reiru al tiu sama URL cs50.net/section, unuopa,
kaj vi plenigi la simila formo por ke vi povas
tiam donu al ni vian preferoj.
Kaj ni sekvos far semajno fino pri kio ni povas
akomodi.
Pasintsemajne, memori, ke ni proponis uzante CS50 diskuti,
la kurson de diskuto ilo, en prelego.
Do ni havis 40 demandoj kiujn oni petis kaj
respondis dum prelego.
Do ŝajnis funkcii bone, do ni devos daŭrigi
provas fari tion.
Se, dum prelego, vi ne nur sentas komfortaj bredado
via mano, ne estas problemo.
Iru al cs50.net/discuss, afiŝi tie, kaj unu el niaj instruado
uloj faros ĉu respondi ĝin elektronike aŭ levi siajn
mano en via nomo anonime demandi, depende
sur la naturo de la demando.
Kaj en terminoj de sugestoj, ĝenerale psets estos
revenis en semajno.
Ĉar ĝi prenas iom da tempo por sekcioj por atingi
egalpezo, la unua pset, 0 kaj 1, estos iom
prokrastita pro aferoj establi.
Sed restu atentaj por ke en la semajnoj veni.
>> Bone, do lasu min metis sur mia serioza
voĉo por nur momento.
Do ĉi tiu estas vere interesa klimato esti
havante ĉi diskuto, kio kun ĉiuj aliaj aĵoj
okazas en la campus rilatanta al gxi.
Sed CS50 certe havis lian historion de ĉi tiu aparta
temo, pro tio, ke ĉiu jaro, ĉi tiu kurso, por multaj
jaroj, Jafar-Kune proksimume 3% de la klaso.
Tiu plej freŝa jaro, 2011, CS50 Ad-eniĝis 35 studentoj.
Tio ne estas, mi pensas, pro la manko de klareco.
Rimarkas ke en la paso de syllabus, estas paĝo de
deklaro klarigante kie la linioj estas.
Tiu sama deklaro ripetas en ĉiu de la
problemo aroj sur paĝo unu.
>> Do mi mencias ĉi hodiaŭ vere nur por fari
ulojn memoras tion.
Kaj ni provis malsamaj aĵoj.
Kaj kion mi pensis ke ni povus fari hodiaŭ estas nur preni momenton por
efektive rigardi iujn de pasintaj kazoj kiuj venis supren.
Anstataŭ teni tiujn tiel malpura iom sekretojn, reale
atentigi kion studentoj faris kaj kiel ni detektas
kaj vere, kion la komunajn motivado estas por
eĉ havante ĉi konversacio.
Do kun kiu diris, la linio esence estas ĉi -
por la syllabus, vi bonvena, vi kuraĝigis, por
paroli kun samklasanoj.
Tio estas la tuta celo de havi tiujn kunlaboran
oficejo horoj en Annenberg kaj kuraĝiga homon por la
fina projekto por labori kune.
Sed la linio estas desegnita kiam venas tempo por vere skribos
Via fina solvo.
Parolante en Esperanto, tute bone, parolante en pseŭdo kodo,
tute bone.
Emailing a samklasano vian pset, lasante ilin rigardi super
la ekrano kiel la manoj daŭre tajpi,
super la linio tiel.
Ĉu rigardi la syllabus por la aparta linioj.
>> Sed nur por pentri bildon de kiel ĉi tiu estas bedaŭrinde
realaĵo, rimarkas ke ekzistas retejoj tie ke
havi solvojn de tiu klaso kaj multaj aliaj klasoj.
La fakto ke vi aŭ iu 3% el vi scias, ke ĉi tiu ekzistas
signifas, ke ni scias, ke ĉi tiu ekzistas.
La fakto ke ekzistas retejoj kiel ĉi, kie vi
povas pagi iun fakte faras via problemo aroj - tio estis
reala kazo kiu venis lasta jaro.
Tio estas retejo nomata odesk.com.
Kaj Tim estis la nomo de la persono tie kiu posting sur
tiu retejo kaj demandis iun fari sian pset 7 en
ĉi tiu aparta kazo.
Nu, odesk.com estas tre Google-kapabla, kaj ni tro estas
tre bona Googling.
Tie, ankaŭ, estas lokoj - kaj ĉi tiu estas sufiĉe
atroces, sincere.
[Ridado]
DAVID J. Malan: La amuza afero pri ĉi tiu loko estas se
vi legis la Pri paĝo, ili parolas pri lia kompania
kulturo kaj kiel servo al la kliento estas ilia nombro unu
prioritato, por certigi ke via taskoj akiri
turnis en la tempo.
>> Sed en ĉiu seriozeco, denove, la fakto ke tiuj retejoj
ekzistas, rimarkas ke ni ankaux estas consciente
tiajn lokojn.
Kaj doni al vi la senton de kio formas ĉi ĝenerale
prenas, ni ĝenerale ne havas grandajn skandalojn, kie homoj
estas kunlaborantoj en ajna speco de amasa skalo, sed prefere
estas tiuj malfrua nokto momentoj de malforteco, kie vi havas tiel
multe por fari, ĝi estas 4:00 AM, vi elĉerpita, kaj vi
pensas al vi mem, nu, lasu min nur rigardu mian
kompano aŭ de mia amiko kodo aŭ similaj.
Kaj la demonstracioj de ĉi bedaŭrinde implicas Studenta
Al submitting io tiamaniere kaj Studenta B Submeti
io tiamaniere, ke certe, en komputilo
scienco klaso, estas notinde facila por komputilo sciencistoj
detekti kun programaro.
Tio estas alia komuna paradigmo, kie vi havas ia
estis laborante kune de iu, eble parolas en
Esperanto, same bone, _pseudocode_.
Sed tiam ĝi venas tempo por vere submetiĝi, kaj la psets
nur get interŝanĝis per retpoŝto aŭ Dropbox aŭ similaj.
Sed en provo por fari ĝin malpli evidenta ke ĉi tio estas
kio okazis, tiam ĉi tiu estas kion afiŝita.
Ĉi tio, ankaŭ, ne vojaĝo ĝis bone skribita pecoj de
programaro kiel ni devas vere detekti
tiajn aĵojn.
Kaj efektive, kion ni faras estas run programaro kiu komparas ĉiuj
ĉi-jara sendoj kontraŭ ĉiuj pasintaj jaro
prezentoj, kontraŭ ĉiu ni trovis sur la
Interreto, kontraŭ ĉiu laboro afiŝinto tie.
Ĝi tute ne estas aŭtomata.
Kaj tiel ni faros ĉi vere en granda justeco al la 97% kiuj
vere laboras siajn azenojn ekstere en oriento kaj en aliaj
klasoj kaj metante en ĉiuj de tiu penado por ke la laboro
ili finfine submeti estas ilia propra.
Kaj mi povas iri por aĝoj.
>> Ĉi tiuj estas nur manpleno da pasinta jaro kazoj.
Kelkaj studentoj afiŝita tiuj dosieroj idente por pset 2,
pset 3, pset 4, pset 5, pset 6, pset 9.
En ĉi tiu kazo, ĉi tiu estis kvizo 0 kaj en lasta jaro, kie du
studentoj afiŝita idente tiu frazo inter multaj
aliaj, "La peto de tipo -" punkto, pentras, punkto.
Do eĉ en klaso de 600 ni ne detekti ĉi
sur afiŝita Quizzes.
Do mallonge, tio - sincere, mi malamas havi tian
konversacio - sed tio estas vere intenca peno
ĉi tiu jaro por provi stiri malsupren tiu numero.
Ĉar kvankam ni diras tiajn aferojn ĉiu
jaro, mi kredas ke la realo de esti loĝis sur ĝi dum kelkaj
pli sekundoj ol kutime kaj fakte ĝuste montrante
ke kion povus aspekti kiel, he, ne tiom granda interkonsento, almenaŭ
pensas reen al ĉi tiu aparta momento, ambaŭ en justeco al
vi mem kaj por viaj kompanoj tie.
Do, se vi iam havas demandojn pri kie la linio
estas, bonvolu simple alveni al mi persone.
Sed la respondo estas ĉiam, tute emfazis en la
lasta minuto, efektiva en malfrua tago.
Aŭ se temas pri demando de ne havi neniun malfrue tagoj,
honeste, retpoŝtu min persone.
Ni kompreni ion.
Bonvolu ne meti vian tempon ĉi tie en Harvard en risko.
>> Nun, mi pensis ke ni devus malpligrandigi la humoro, do mi
inkludis tiun kiel la proksima glito.
[Ridado]
DAVID J. Malan: Ĉi retejo estis granda.
Mi vere havas iom distrita.
Estas ĉi tiu.
Kaj tiam ĉi tiu estis miriga.
Okay, do elpensis tion katido malfrua nokto kiam farante
tiuj decidoj.
Bone, do reen al pli amuza kaj malpli seriozaj aferoj, kiel
kondiĉoj.
>> Bone, do ni parolis mallonge pri tiuj.
Tio estas io tiel estas probable sufiĉe familiara de
la mondo de Scratch.
Kaj en la mondo de Scratch, ni havas ĉi tiun neceson foje
iri fari forkoj en la vojo.
Ĉu fari ĉi aŭ tiu aŭ tiu alia afero ĉi tie.
Kaj kiam ni volas fari tion, ni povas uzi, en C nun, tiu se
alie konstrui.
Kaj tiam tie ni havas Bulea esprimoj.
Ekzemple, Bulea esprimoj tie, ni povas AŬ
ilin kune, en la senco, ke ni havas ĉi tiun kondiĉon AŬ
tiu kondiĉo.
Ni povas KAJ ilin kune, en la senco, ke ni volas
kontrolu ĉi kondiĉo AND tiu kondiĉo.
Kaj ĉi tie ni havas ŝaltilon deklaro nun, kio ne estas tiel
simila sintakse al tiuj specoj de kondiĉoj, sed
permesas fari la ekvivalento de se, alie se, alie se, alie
se, kaj similaj per simple numeri ilin kazo por kazo
por kazo de kazo.
Do ni vidis tiujn lasta fojo.
Kaj tiam ni komencis tuŝi sur aĵoj kiel maŝojn.
Ni vidis unu el tiuj nur antaŭ momento.
Sed estas tiuj aliaj looping konstruoj.
>> Ekzemple, tiu ĉi.
Do dum (kondiĉo), faru tion denove kaj denove.
Do esence, kio ŝajnas esti malsamaj inter ĉi
por buklo kaj ĉi dum buklo tie?
Ĉi por buklo kaj ĉi dum ciklo.
Yeah?
Kio estas tio?
Spektantaro: [inaudible].
DAVID J. Malan: Bonan.
Do dum kiu en la por buklo kondiĉo, estas klare
pli sintakso.
Estas ĉi inicialización, ne estas tio ĝisdatigon.
En momento buklo, tie estas nur tiun kondiĉon.
Do ŝajnas, ke ĝi estas iom pared malsupren kontre la por
buklo, kio signifas, se ni volas havi variablojn kaj ni volas
havi incrementation, ni vere devas
fari tion mem.
>> Do lasu min antaŭeniri kaj malfermu gedit.
Lasu min ŝanĝi super la aparaton.
Kaj ni nur faru rapidan iom ekzemplo kiu
distingas unu el tiuj de la alia.
Kaj en la dorso de mia menso tie, mi devas diri ion.
Mi specife menciis la nomon Tim.
Tim estis fakte iu ke studento provis trovi fari
liajn devojn por ili.
Ni ne havis Tim en tiu aparta sekcio.
Do realigi, ke mi ne malkaŝis al studento, ne estis studento.
Estis hazarda persono en Interreto faras tion
per prokuro pasintjare.
Do ni trovas ke, ankaŭ.
Do en ĉi tiu kazo tie, lasu min antaŭeniri kaj
malfermi novan dosieron.
Dosiero, Nov.
Tio donas al mi langeto tie.
Lasu min per ĝi kiel loop.c.
Lasu min iri kaj klaku Save.
Kaj tiam cxi tie, ni iru antaŭen kaj komenci skribi
# Include .
Lasu min zoom in
Nun ni faros int main (void).
Nun mi faru por (_int_ i = 0; i <
ho, 10; i + +).
Kaj nun mi tuj iros antaŭen kaj ne presi la stelo, kiun mi
faris antaŭe.
Kaj poste fine de tiu programo, ni nur tuj
presi nova linio, nur por ke mia prompto
ne aspektas ĉiuj senorda.
revenu 0.
Ŝajnas sintakse ĝusta?
Ĝis nun.
Do ni vidu.
>> Do mi malzomi, iru en mian fina fenestro.
Kaj lasu min antaŭeniri kaj kuri ciklo, ĉar mi nomis tion
afero loop.c.
Do fari banton.
Ŝajnas kompili OK.
Mi kuros ciklo, kaj nun Eniru.
Kaj ŝajnas esti presita 10 steloj.
Do ni nur konverti tion al tempo loop kaj vidi kion
specojn de demandoj ni vojaĝo super.
Do anstataŭ tio, lasu min iri en ĉi tie kaj diru dum mi estas
malpli ol 10 -
lasu min forigi la por buklo.
Bone, do ni havas kelkajn problemojn jam.
Do la kondiĉo estas la sama, sed mi evidente mankas la
inicialización.
Mi mankis la incrementation.
Do kion devus la tradukilo verŝajne diru al mi, kiam mi provos
kompili tiun programon?
Yeah?
Spektantaro: [inaudible].
>> DAVID J. Malan: Bonan.
Do tuj diri ion kiel nedeklarita - en ĉi tiu
kazo, variablo i.
Kaj efektive, la uzo de nedeklarita ensalutilo i.
Kaj tiel tio estas en kontrasto kun lingvoj kiel PHP kaj
Python kaj Ruby, kun kiu iuj el vi povus esti familiara,
kie vi povas nur ia komenco uzante variabloj
willy-nilly kaj ne devas zorgi pri deklarante ilin
eksplicite ĉiam.
En C kaj en lingvoj kiel Java kaj C + +, vi devas esti
super eksplicita.
Kaj se vi volas variablo nomata mi, vi devas diri al mi
kia variablo estas.
Do ni tuj devas ripari tion kiel sekvas.
Mi tuj devos iri tien kaj tajpu int i; sekve,
Mi raportis pri variablo nomis i.
Nun, mi saltis unu paŝo.
Mi evidente ne inicializado ĝin, sed ni vidu se tiu ĉe
almenaŭ faras Clang halto plendis.
Do lasu min refari tiun programon.
>> Bone, nun ĝi estas ĵus plendis
por malsama kialo.
"Variablo 'i' estas uninitialized kiam uzata ĉi tie." Bone, do
ke estas sufiĉe eksplicita.
Inicializado simple signifas opcio ĝi egalas al valoro.
Kaj ni ne faris tion, do lasu min provi egalas 0.
Nun ni provu ĉi denove kaj denove kuras Clang.
Kompilita ĉi tiu tempo.
Kaj mi komencis forkuri ĝin.
Sed granda maljuna senfina ciklo, ĉar mi faris la
inicialización, mi faris la kondiĉon, sed mi neniam faris
ia incrementation.
Do kiel mi povas fari la incrementation?
Nu, en momento buklo, sentas mi tuj devos
fari ĝin ene de la ciklo, ĉar same kiel la unua
semajno ekzemploj de fari looping konstruas, kiel kun
la ŝtrumpetojn kaj kun la mem-kalkula, ni devis fari
ion al la fino, kiel reiri al la sekvanta linio.
Kio se mi faru ĉi i + + tie?
Ni eĉ ne kompili ĉi.
Catch min jam.
Kio okazas ĉi tie?
Spektantaro: [inaudible].
>> DAVID J. Malan: Do ĝi certe ne int.
Estas mi.
Kaj la krispa krampoj, kiel antaŭe,
deŝovon ne sufiĉas.
Do nun mi ĉi konstrui.
Do dum i estas malpli ol 10, presi stelo,
tiam pliigo i.
Kaj la vojon iom buklo verkoj kiuj apenaŭ vi frapis la
fundo de la ciklo, kiu en ĉi tiu kazo similas linio 10,
ĝi tuj reiri al la linio 6, je kiu punkto la
kondiĉo estos kontrolata denove.
Kaj se mi estas ankoraŭ malpli ol 10, ni faros linioj 8 kaj
tiam 9, tiam ni batis 10, kaj reiri al 6, denove kaj
denove kaj denove kaj denove, tiom longe kiom mi estas malpli ol 10.
Do estu la re-ruli fari tie.
>> Konsentite, ni kompilis okay.
Lasu min re-run buklo.
Kaj nun ĝi vere ŝajnas funkcii.
Do pluses kaj malpli tie?
Nu, ĝis nun tie fakte ne estas tuta el OLP -
so cute.
Bone, kiu estis - ah, ke estis akcidento.
Bone, do ni reiru al la por buklo.
Do por cikloj estas bela ĉar ili estas super eksplicita.
Kaj eĉ se ili estas iom clunky skribi, estas
tre potenca kaj permesas vin fari
multnombraj aferojn samtempe.
Dum bukloj ne ŝajnas havi grandegan kvanton de valoro nur
tamen, ĉar ĝi sentas kiel ni nur devas fari pli da laboro.
Ni devas meti la inicialización ĝis tie, la
ĝisdatigi ĉi tie, kaj ni devas memori fari ĉion, kion.
Do ni vidos ĝustatempe ke dum maŝojn reale prunti
sin nur malsamaj kuntekstoj, malsamaj datumoj
strukturoj kiel lertaj kaj hash tabloj, aĵoj ni atingos
meze semestro.
Sed nuntempe, scias, ke tie estas tio tria tipo konata kiel do-
dum ciklo.
Kaj ni vidis ĉi mallonge.
Kaj tiu povus esti super helpema kun pset 1.
Ajn vi volas fari ion, kaj poste kontroli se
la uzanto kunlaboris, kaj se ili ne faris tion, faru ĝin denove, do-
dum buklo pruntas al tiu speco de logiko.
Ĉar kiel la ordigante de supre ĝis malsupre tie sugestas,
do laŭvorte signifas fari ĉi tion.
Kaj fari tion denove kaj denove, kio povus tiu esti?
Eble tio signifas nomante GetInt aŭ GetString kaj poste
kontrolanta la valoro de GetInt aŭ GetString kaj tiam krii
ĉe la uzanto se ili ne kunlaboris petante ilin
denove kaj denove kaj denove.
Kie vi deziras fari ion iam,
tiam kontrolu iu kondiĉo.
>> Do ni provu tion.
Lasu min vere ŝanĝi ĉi nun al do-dum ciklo.
Kaj mi tuj faru la sekvajn.
Do faru la sekvajn.
Ni faru int i = GetInt (), sed ni unue diri al la uzanto
kion fari.
Do iom malsama ĉi tiu tempo.
"Donu al mi int".
Do mi devos uzi printf por tio.
Kaj nun mi tuj iros malsupren tie, kaj Mi faros ĉi
dum mi estas, ni diru, pli granda ol -
ni vidu, mi estas, ni diru, malpli ol 0, aŭ mi estas
pli granda ol 10.
Alivorte, mi volas numeron de 1 ĝis 9, nur
arbitre.
Do Mi uzas kombinita Bulea esprimo ĉi tie por
certigi ke mi estas malpli ol 0 aŭ pli granda ol 10, en kiu
kazo mi faros ĉi buklo tie denove.
Do denove, do tio -
dum i estas malpli ol 0 aŭ i estas pli granda ol 10.
>> Do nun ni faru ĉi fojon ni faris tion.
Ni nur faru rapidan prudento ĉeko.
printf ("Dankon, mi estas% d", i).
Do ĉi tiu simpla programo demandas al la uzanto por int,
certigas estas ene de iu teritorio, 1 al 9 inkluziva,
kaj tiam gracias la uzanto por memorigi al ili kion ili nur
tajpita en, kiel iom prudento ĉeko.
Sed ni vidu se ĉi funkcias kiel intencita.
Lasu min iri kapo malsupren tie kaj re-ruli fari banton.
Hmm.
"Uzo de nedeklarita ensalutilo 'i'". Tio estas stranga.
Mi pensis ke ni decidis tion.
Sama simptomo sed malsama kodo.
Yeah?
Spektantaro: [inaudible] ene de la du, ni devas
[Inaudible].
>> DAVID J. Malan: Ĝuste.
Do tiu fakte kondukas al temo konata kiel medion.
Ĝi rezultas ke C, denove, vere prenas vi laŭvorte.
Kaj se vi faros ion kiel tiu kie vi deklaru int
kaj poste atribui ĝin iu valoro, sed vi faru tion interne de
paro de frizita krampoj, kio C faras estas supozas ke vi
nur volas tiuj 32 bitoj konata kiel mi al ekzistas ene de la
kunteksto de tiuj buklaj krampoj, ene de la kunteksto de linioj
6 per 9. Do i estas deklarita, kaj ĝi estas atribuita
valoro en linio 8, sed tuj kiam vi ricevas ekster
linio 9 sub la frizita streĉa, i ne plu estas en
medion, por tiel diri.
S-C-O-P-E. Ĝi ne plu en la dekstra kadro.
Do nun estas ne mi, do ĝi estas kvazaŭ ni havis eĉ ne
deklaris ĝin.
>> Do kio estas riparas tiam por io tiamaniere, se la
kialo estas ke mi estas deklarita en la frizita krampoj, kiuj
estas ŝajne malbona?
Ĉi tie?
Spektantaro: [inaudible].
DAVID J. Malan: Yeah.
Do ni povas pravalorizi ĝin ekstere.
Do lasu min antaŭeniri kaj forviŝi la deklaro partoj per
Mi specifi la tipon, kaj lasu min fari ĝin ĉi tie.
Do en linio 5, nun diras "Donu al mi int." Nomas ĝin mi.
Rimarki en la linio 9, mi ne volas fari tion, ĉar mi
jam havas la 32 bitoj.
Mi ne volas demandi al la komputilo por
malsamaj 32 bitoj.
Mi volas uzi tiuj samaj 32 bitoj.
Kaj nun ĉar mi estas deklarita en linio 5, estas ankoraŭ legit
uzi ĝin en linio 11 kaj linio 12.
>> Do mi provos recompilar ĉi kaj vidu
se Clang ĉesu krii.
fari banton.
Do nun estas "implica deklaro de funkcio
'GetInt' estas nevalida en C99. "Kio estas tio?
Yeah?
Spektantaro: [inaudible].
DAVID J. Malan: Yeah.
Do nun, ke mi efektive uzante GetInt, ĉi tio ne estas io
ke nur venas kun C. Ĉi tio venas de CS50.
Do ni bezonas ĉi tie.
Kaj lasu min iri reen al la prompto malsupren
tie kaj re-ruli fari.
Konsentite, fine.
Nun ni decidis ke kaj la alia eraro.
Permesu al mi kuri buklo kaj vidu kio okazas.
"Donu al mi int." Mi donos al ĝi 11.
Mi donos al ĝi -1.
Mi donos al ĝi foo.
Mi donos al ĝi 5.
Kaj nun ĝi ja funkcias.
Sed la prompto ŝanĝis por kialo tie.
Kial ĝi diras reprovi unu el tiuj tempoj sed donu al mi
Mez la aliaj tri fojojn?
Kial tiu konduto malsamaj?
Spektantaro: Donis ĝin ĉenon.
DAVID J. Malan: Pardonu?
Spektantaro: Vi donis ĝin ĉenon.
DAVID J. Malan: Yeah.
Do ni donis ĝin ĉenon en ĉi tiu tria provo,
kiam mi tajpis foo.
Foo estas ĉeno.
Estas evidente ne int.
Kaj la vojon kiun CS50 estas implementado GetInt estas, ke ni
Ne kontroli se io estas malpli ol 0 aŭ pli granda ol 10
por vi, ĉar kiel ni scias anticipe kia
int vi volas?
Sed ni povas minimume kontroli por vi, ĉu la uzanto almenaŭ
tajpi entjero?
Kaj se ili ne faris tion, ni krias al la uzanto per tajpo de "reprovi" on
la ekrano.
>> Do nun ni havas programon ke tio looping. Okay.
Nun, kiu el tiuj estas varo de la bona konstruo?
Do tiu estas kie aĵoj komencas akiri iom senorda, la
fakto, ke vi devas memori deklari variablon tien
se vi volas uzi ĝin ene de iu
frizita streĉaj kaj ekstere.
Sed eĉ se tio aspektas iom críptico unue
rigardo, nur denove, memoru la simpla logiko.
Por uzi ion en C, ĉu ĝi estas funkcio aŭ
ĝi estas variablo, vi devas inkluzivi ĝin se estas funkcio
en iu biblioteko, aŭ vi devas konfesi.
Sed nun vi devas esti superflua memoru la fakto, ke
vi deklarante ĝin en la rajton medion.
Vi ne metante ĝin tro firme ene de krampoj.
>> Do mi efektive ruliĝas dorso.
Se ni reiru al nia ekzemple de antaŭe, kaj mi iras
reen al por int, int i = 0; i <10; i + +, kaj mi
fari printf steloj, kiel ĉi tiu, kaj tiam proksime paren, kaj nun
printf i estas nun -
laŭ la sama logiko, kio okazos, kiam mi provos
kompili tiun programon?
Spektantaro: Nevalida identigilo.
DAVID J. Malan: Do ĝi alian nevalida identigilo,
nedeklarita ensalutilo.
Nun, la kialo estas iom malsama.
Estas evidente ne frizita krampoj tie, sed la sama
ideo, la sama rakonto de medio aplikas.
Se vi deklaras variablon kiel i interne de
por ciklo, eĉ se vi ne eksplicite skribis la frizita
krampoj, pensu pri ilin mense kiel ankoraŭ estas tie, en kiu
kazo mi estas nur valida interne de la por buklo.
Ĝi ne estas valida kiam vi atingos la sekvanta linio, kiu en
ĉi tiu kazo estas nun 10.
Do nur kelkaj demandoj de medio kaj similaj.
Bone, demandojn?
>> Bone, do ĉi tiu estas speco de bagatela iom programo,
presi nur iom steloj.
Sed ni vidu, se vi memoras tiun kanton ĉi tie.
Ĉi tiu estas nekredeble tedas kanto la infanoj kantis en
la lerneja buso kaj similaj.
Sed kio estas agrabla pri tio estas ke ĝi havas ĉi ciclicidad,
per tio "99 boteloj da biero sur la muro,
99 botelojn da biero.
Prenu unu malsupren, pasi ĝin ĉirkaŭe, 98 boteloj da biero sur la
muro. "Kaj tiam la kanto ripetas la 97, tiam 96, do
95, tiam 94, la tutan vojon malsupren al 0 se vi efektive havas tiun
malproksime sur la buso.
Do ĉi tiu estas bona programo por ordigi de ilo, ĉar mia
Dio, se vi povus simple apliki tion kun kelkaj
linioj de kodo, vi povus kracxis el la tuta literoj al ĉi
kanto sufiĉe rapide.
Sed laŭ la maniero, ni povas komenci nun tease apartigas iujn
de tiuj bazaj looping konstruoj kaj nun ankaŭ
enkonduki funkcioj, ke ni skribu nin, revenu valoroj
ke ni pasas ĉirkaŭe.
Sed unue, kial ni ne iras antaŭen kaj prenu nian kvin minutoj
rompi ĉi tie?
Kaj kiam ni reiros, ni kantos ĉi tiu kanto.
>> Bone, do ni estas dorso.
Kaj kiam mi diras, ke ni nun kanti tiun kanton, mi volas diri
programmatically, ne parole.
Do jen ni havas beer1.c, kiu estas unu realigo de ĉi
aparta kanto.
Kaj nur por esti klara, por kiuj ne konas kio
tiun aferon similas, lasu min iri antaŭen
kaj faru beer1, Enter.
Nun mi kuros beer1, kaj kion ni vidos - kiom da boteloj
de biero estos esti?
Mi tajpas en 99, kiel la kanto diras.
Eniri.
Kaj nun se ni rulumi tra -
oops - se ni rulumi tra ĉio ĉi, ni vidos, ke
ĉi tio ja kanti la tutan kanton.
Atendu minuton.
Mia rulumskalon estas iom paneas.
Ni uzu la pli granda fenestro.
Do beer1, 99, tie ni iru.
Do jen ni havas la tuta kanto, kantita multe pli rapide per la
komputilo kio povus esti por ni.
Do rimarki, tamen, la cikla naturo tie.
Ĝi diras 99, tiam 99, tiam "preni unu malsupren, pasi ĝin
ĉirkaŭe, "tiam 98.
Kaj nun ripetas ree kaj ree.
>> Do tiu estas fakte perfekta ŝanco por ia
looping konstrui.
Rimarku ke mi estas speco de tranĉi angulo tie.
Rimarku, ke mi estas diranta "98 boteloj da biero sur la muro,
97 boteloj da biero sur la muro ", kaj kiu estis simple tiel
ke kiam ni atingos unu boteloj de biero, mi ne havas
zorgi pri la angla gramatiko.
Sed ni povas ankaŭ korekti ĉi tion kun iom de se
kondiĉo, eble.
Se ĉi tiu nombro estas unuopa, antaŭeniri kaj diru "botelo",
alie se estas pluralo, diri "boteloj".
Sed nuntempe, mi tute tranĉante tiu angulo.
Do ni vidu kion ni havas ĉi tie.
Do ni havas iujn komentojn ĉe la supro.
Mi inkludante tiujn du bibliotekoj, kiel
ni komune.
Kaj nun mi rulu suben ĝis la unua
reala linioj de kodo.
Linio 17 piedbatoj sur ĉefa.
Linio 21 kaj 20 havas kiom da boteloj de biero estos esti?
Kaj poste mi vokas GetInt.
Kaj nun mi havas iom de prudento ĉeko.
>> Do ĉi tiu estas konvencio ke ni nun komencas adoptante al
pli rigore kontroli la uzanto enigo.
Iam vi ĵus ne volas instigas ilin denove
kaj denove kaj denove.
Se la uzanto ŝraŭboj tien kaj ne kunlabori, fajna.
Quit kaj simple ne trakti ilin.
Kaj tiel tio estas kion mi faras tie.
Se n estas malpli ol 1, mi nur tuj krias al la uzanto,
"Pardonu, ke ne havas senson." Kaj poste mi iros al
arbitre reveni 1.
Do denove, ĉi tiu estas nur konvencio kutimi.
Por la momento, prenu gxin sur fido.
Sed ĝis nun, ni ĉiam reveni 0, ĉar
ni diris reveni 0 signifas kion?
Spektantaro: Sukceso.
DAVID J. Malan: Sukceso, jen ĉio.
Do nun ke ni fine komencas pensi
ne-sukcesoj -
en aliaj vortoj, angulo kazoj, eraro kondiĉoj -
nun mi havas senfinan provizon aŭ almenaŭ kvar miliardoj
eblaj aĵoj kiuj povas iri malbone en mia programoj.
Kaj mi povas komenci atribui ilin individuaj nombroj.
Nun, ĝenerale sufiĉas simple reveni
io alia ol 0.
Do ni tuj simple reveni 1 por nun.
Sed la kialo por reveni 1 estas ke tuj kiam vi revenos
1, diveni kio okazas al la resto de la programo?
Ĝi haltas.
Estas tio.
Do la fakto, ke mi revenis 1 estas efektive
mallonga circuiting ĉi programo ekzekuto por ke
nenio sub linio 27 daŭrigos ekzekuti.
Apenaŭ ĉefa revenas, tio estas ĝi.
>> Bone, do se la uzanto faras kunlabori kaj ni atingos linio 30
ĉar ili tajpis en leĝa nombro, jen mia
efektivigo de ĉi tiu kanto.
Do mi unue presi novan linion karaktero, nur por
estetiko.
Mi nun havas por buklo.
Kaj rimarkos mi faras tion en iom
de malsama direkto.
Mi ne devas fari malpli ol, mi ne devas fari + +.
Mi povas anstataŭe diri pravalorizi variablo i, starigis ĝin egala al
n, la nombro de la uzanto tajpas en, tiam faru la sekvan, tiom
longa kiel i estas pli granda ol 0, tiam mi -
iam vi finita ripeto de ĉi ciklo.
Do ni povas kalkuli suben uzanta por buklo tiel.
Nun, ĉi tiu estas preskaux semajno unu stuff nun, kun printf.
Do print "% d boteloj de biero sur la muro." Print "% d
botelojn da biero. "" Prenu unu malsupren, pasi ĝin ĉirkaŭ. "Presi
"% D boteloj de biero sur la muro." Do ĝi estas ankoraŭ% d, sed
rimarkas, ke la argumento al printf ŝanĝas.
Post la komo, mi havas mi, ĉar mi volas diri 99.
Post ĉi tiu komo, mi havas mi, ĉar mi volas diri 99.
Post ĉi tiu komo, mi havas i - 1, ĉar mi volas diri 98 en
tiu unua ripeto, kaj tiel plu.
Kaj nun cxi tie, mi nur havas iom stulta iom rimarko.
Kaj tiam linio 42, mi revenos 0 per konvencio, signifante ke
ĉio estas bone.
>> Do kio se mi goofed?
Kio povus komuna eraro ĉi tie estos?
Nu, kio se mi hazarde diris bone, mi volas rakonti
malsupren al 0, mi volas 0 boteloj de biero sur la muro?
Do mi diras, mi estas pli granda ol aŭ egala al 0.
Kio okazas al esti la simptomo, ke mi nun vidas, se mi recompilar
beer1 kaj ruli ĝin?
Spektantaro: Negativaj.
DAVID J. Malan: Jes, ĝi estas gonna go negativa.
Ĉi tiu estas ekstere per-unu eraro, nekredeble
komuna eraro fari.
Ni efektive reiros al la stacio fenestro kaj fari ĝin
ĉi tie, do ni povas vidi pli samtempe.
Eniri, 99 boteloj da biero.
Apude, sed ni iris nur milde tro for.
Ni kantis la kanton tro malproksime sube, tia ke oni nun batis la
negativa nombro.
Do ĝi ne sufiĉe funkcias.
>> Bone, do ni povas facile ripari ke irante reen al la
maniero fojon estis.
Sed kion estas iuj ŝancoj nun por
plibonigo?
Nu, mi malfermos beer2.c kaj rulu suben tie kaj preni
rigardi ĉi tiun version.
Kio estas la unua aĵo kiun elsaltas ĉe vi kiel malsamaj
en ĉi tiu versio ĉi tie?
Spektantaro: [inaudible].
DAVID J. Malan: Yeah, do ne plu mi, ĉar ĝi donis al
mi vi scias kion, mi petas al la uzanto por n, kaj tiam mi
opcio i egala al n, kaj tiam mi ŝanĝas i, sed mi neniam
tuŝi n denove.
Do kio estas la heck estis la punkto de vi atribuante alian 32
bitoj nomis i nur por ke mi povas havi malsaman variablo?
Do ĉi-kaze, mi ia rekonis ke nenecesajn
dezajno karakterizaĵo.
Kaj mi nun intencas diri dum n estas pli granda ol 0, iru
antaŭeniris kaj presi la sama kanto, pasante n al printf kiel la
dua argumento, kaj n - 1 kiel la dua argumento cxi tie.
Kaj tiam en ĉiu ripeto de ĉi ciklo, antaŭeniri kaj justa
dekremento n mem.
Nun, funkcie, tiu programo
tuj estos identaj.
Se mi tajpas en 99, n startas je 99.
Mi dekremento, dekremento, dekremento, dekremento.
Mi iros akiri la tutan vojon malsupren al "Unu botelo de biero sur
la muro, unu botelo da biero.
Prenu unu malsupren, pasi ĝin ĉirkaŭe.
0 boteloj de biero sur la muro. "La fino, ĉar mi faris
akiri la kondiĉo ĝentila.
Estas granda ol 0.
Mi ne faris tiun eraron.
>> Do kio estas bona, versio unu aŭ du versio?
Do mi aŭdis faskon da murmurado por du.
Kial du?
Kio estas tio?
Spektantaro: [inaudible].
DAVID J. Malan: Ho, bone.
Do ne iros sub 0, sed memoru, en versio, la
originalaj korekta versio ne iru sub 0 ĉu.
Do memoru, ke tio estas la ĝusta versio.
Do estas almenaŭ kompari la du ĝentilaj versioj.
Kio estas argumento favore versio
du esti, mmm, pli bona?
Yeah?
Spektantaro: Ĝi uzas malpli da spaco.
DAVID J. Malan: Konsentite, do ĝi uzas malpli da spaco, ĉu ne?
Dum versio oni uzas 32 bitojn por n, kaj tiam alia
32 bitoj por mi.
Versio du nur uzas 32 bitojn por n, por ke
Ŝajnas esti pli.
Aliaj pensoj?
Ĉu iu volas argumenti favore de unu?
Yeah?
Spektantaro: Vi devas uzi ekstra linio de kodo por n -.
>> DAVID J. Malan: Konsentite, certa.
Do jen justa.
Do tiu justa, almenaŭ por mi -
Mi volas diri, ĉi vere sentas iom Messier, la fakto ke
Mi ne povas ordigi de encapsular ĉiuj miaj logiko en unu
bela linio, la por ciklo, kiel la por buklo povas.
Jen, mi specon de devas Tack sur ĉi n -
fine de la ciklo, ĉar
ĝi estas logike necesa.
Sed ia frotas mi la malĝusta vojo, nur ĉar ĝi
ŝajnas aparte de la logiko de ĝis tie, kvankam,
denove, ĝi estas necesa.
Aliaj pensoj?
Yeah?
Spektantaro: [inaudible].
>> DAVID J. Malan: Yeah.
Do kion se vi anstataŭe, fine de la kanto, ili volis
presi denove la nomon de la kanto?
Kiel "Dankon pro ludi 99 boteloj da biero", aŭ ion
stulta tiel?
Sed la punkto estas, vi volis aliro al la originala valoro.
La fakto ke vi mutaciis aŭ ŝanĝis n sur ĉiu
ripeta kaj sekve ili detruis lia originala valoro
signifas simple ne povas fari ĉe la fino.
Nun, eble, ni klare ne volas fari
ke en tiu programo.
Do who cares?
Sed tio estas tre valida punkto.
Kaj esti honesta, ne estas vere neniu
dekstra respondi ĉi tie.
Ili ambaŭ estas egale korekta.
Mi povus esti konvinkita ajna maniero.
Mi diros ke, ĝenerale, estas bona principo, se vi
demandis la uzanto por iu valoro kaj vi stokitaj en variablo
kiel n, nur ia en principo, estas probable bona
teni ke ĉirkaŭe.
Kaj neniu datumo vi volas mutate denove kaj denove, simple
doni vin kopion de tiu variablo, nur por ke vi
havas aliron al la originala.
Vi elspezante 32 pli bitoj, sed la realeco estas ĉi
komputilo, kiel, du gigabajtoj de RAM tiuj tagoj,
kaj ni quibbling super 32 bitojn?
Vere ne tiel granda interkonsento.
Kaj eĉ sur tiu aparato tie, kun duono de koncerto aŭ
gigabajto de RAM, 32 bitoj kontre 64 bitoj,
ne tia estas granda interkonsento.
Certe hodiaŭ, tuj estos vojo premita de la grandeco
de la programo mem, kiu tuj estos plurcent
kilobajtoj, se ne malmultaj megabajtoj, ĉi tiuj tagoj.
>> Do racia zorgoj, neniu rajtas respondo.
Sed almenaŭ tiuj estas la pensoj kiuj devus komenci
iri tra via menso?
Ĉar en pset 0, eĉ se ni vere nur atendis
praveco, aŭ almenaŭ malpretendante diversaj bugs kiu
vi eble renkontis, kiel ni movos antaŭen, dezajno estas
tuj estos alia klavo aspekto, ambaŭ de skribi kodo
kaj ankaŭ nia taksi kodo.
Kaj tiel almenaŭ doni pensis al aĵoj kiel ĉi tio.
Kaj ĝuste pro io verkoj ne signifas ke estas bona,
ne signifas ke estas bone desegnita.
Kaj tio estas unu el la aĵoj de la instruado uloj kaj
problemo aroj helpos nin tease parto kun la tempo.
>> Nu, kio pri, ni diru, ĉi tiu versio ĉi tie?
Lasu min fari ion iom sexy tie en momento.
Unue lasu min forigi tiun.
Kaj nun ni ripari tiun gramatikan temon.
Do en tiu versio, mi volas ripari la gramatikon por ke,
anstataŭ nur diri parenthetical s, kiel "botelo"
aŭ "boteloj" -
Mi ne volas tranĉi tiu angulo -
Mi ankaŭ volas dinamike presi la vorto "boteloj"
aŭ "botelo", per tio uzante tiujn% s anstataŭiloj hodiaŭ.
Do mi bezonas kondiĉe kontroli kio estas la valoro de i.
Kaj se estas 1, mi volas diri "botelo", kaj se ĝi estas io
alie, mi volas diri "boteloj". Do ni provos fari tion.
Do, se i == 1, tiam lasu min antaŭeniri kaj deklari -
Mi bezonas kordoj, do lasu min fari ĉenon s1, ĉar ĝi estas la
unua linio mi zorgas pri nun.
Mi intencis diri "botelo". Kaj tiam, vidu, kordoj
s2 - kaj mi klarigos kie mi iros en momento -
"Boteloj". Do rememori ke, en ĉi tiu kanto, ni bezonas por povi
presi aĵoj, du malsamajn vortojn potenciale.
Do, se ni retrorigardas tie, rimarki, ke kiam ni atingos
ĉi tiu ekzemplo tie ĉi, "du boteloj da biero sur la muro,
du boteloj de biero, prenu unu malsupren, pasi ĝin ĉirkaŭ ", mi volas
ĉi tiu kvara linio nun diras "unu botelo da biero sur la
muro ". Do mi bezonas por decidi, ĉu mi volas diri" boteloj "aŭ
"Botelo"? Do mi iros al arbitre diras, ĉiuj pravas,
Mi tuj nun deklaras variablon nomis s1, kordoj
oni, kiu tuj akiri konektita en ĉi tie kaj ankaŭ ĉi tie,
ĉar tiuj vortoj estas ĉiam identa, nur pro la
naturon de la kanto.
Kaj mi tuj voki s2 ajn vorton Mi volas
eventuale aperas cxi tie.
Nun, laŭvorte, 99 fojojn el 100, ĝi tuj estos la
sama en ambaŭ el tiuj kazoj, ĉar 3 estas pluralo, 2 estas
pluralo, 4 estas pluralo.
Sed en ĉi tiu angulo kazo, kie ni atingos 2 kaj tiam 1, aŭ
eĉ 1 kaj do 0, mi bezonas tiun logikon.
Do mi devas pasigi iom da tempo en mia kodo atingi tiun rajton.
Do, se mi faras tion, se i == 1, tiam starigis s1 egala al "botelo"
kaj s2 egala al "boteloj", ĉar ĉi tio estos por 1
botelo, kaj ĉi tio estos por 0 boteloj.
Kaj ĉi tie, kion signifas ĉi reprezenti?
Nur por esti klara.
Tiu estas nur komento.
Do la fakto ke vi povas havi unu-linio komentoj celas vin
povas diri vian kodo kiel ĉi tiu, sed alia komuna
paradigmo, ankaŭ, estas ke se vi havas super-mallonga frazo ke
vi volas meti sin mem kaj ĝi estas nur pli legebla por meti
ĝin ĝuste en la fino de la linio de kodo, vi povas
absolute faru ion kiel ĉi tio.
>> Do nun kio se mi faras tion? Else if i estas ne egala al 1.
Do bang egalas -
ekkrio punkto estas nomata "bang".
Do bang = 1.
Do, se i ne estas egala al 1, kion mi anstataŭ volas fari?
Nu, la unua vorto Mi volas esti kio?
Do string 1 devus esti "boteloj" por pluralo boteloj,
kaj tiam ĉi tio estos pluralo "boteloj" tiel, por nun.
Kaj ni vidos se ĉi reale ricevas nin
kie ni volas iri.
Do nun, se mi rulumu malsupren tie, rimarki ke mi ŝtopanta en
ne nur mi, sed s1.
Mi ŝtopanta en i kaj s1.
Kaj tiam cxi tie, mi estas minus 1, kiu estas la sama kiel
antaŭe, sed s2.
Alivorte, mi volas ke la angla vorto por ŝanĝi bazita
en ĉi tiu logiko.
Nun, ekzistas jam kelkaj problemoj en ĉi tiu kodo.
Kio estas rompita jam ekster la pordego tie?
Yeah?
Spektantaro: [inaudible].
>> DAVID J. Malan: Ĝuste.
Do mi jam malobeis la leciono de medio.
Do mi deklaris s1 kaj s2, sed mi faris ĝin interne de
frizita krampoj, kio signifas jes, ĉi tiu kodo funkcios ĝis
ĝis linio 42, sed tuj kiam mi batis linio 43, divenu kion neniu
ne ekzistas?
Nu, diveni kio estas ne plu en la medio - nek s1 aŭ s2.
Do ni devas ripari tion.
Do lasu min forigi la deklaroj.
Kaj mi lasos la variablo nomoj kaj forviŝi ĉi tie
kaj forigu ĉi tiun ĉi tie.
Kaj en kio linioj mi vere deklari tion?
Spektantaro: [inaudible].
DAVID J. Malan: Jes, tiel probable
dekstra tien, 33-ish.
Do string s1 kaj s2 tiam kordoj.
Kaj ĝi rezultas, mi povas fari ĉi tion.
Se vi deklaras du variabloj de la sama tipo,
vi povas fakte nur uzas komo kaj do ke en C. Ĉiuj
Bone, do nun mi havas du variabloj -
s1 kaj s2.
Mi atribui ilin taksas tiujn
kondiĉoj ĉi tie, aŭ en ĉi tie.
Kaj tiam Mi uzas ilin sube.
Kiel bone tiu nun tuj funkcias?
>> Nu, estas ankoraŭ iom kalesxon, sed ni almenaŭ vidi
kiom for ni alvenas.
Do lasu min antaŭeniri kaj realigi beer3.
Ĉu ĉi tiu beer3?
Yep, ĉi tiu estas beer3.
Kaj nun lasu min iri antaŭen kaj kuri beer3.
399 99.
Ni probable povas salti plej el ili.
Kaj cxi tie, rigardi tion.
"Unu botelo de biero sur la muro, unu botelon da biero, preni
unu malsupren, pasi ĝin ĉirkaŭe, 0 boteloj de biero sur la muro. "
Sed mi desegni vian atenton al nur duono de la solvo.
Speco de ŝraŭbita tien.
Do ŝajnas, ke la angulo kazoj ekesti kiam i egalas kion
du valoroj?
Spektantaro: 2, 1.
DAVID J. Malan: 2 kaj 1.
Ne 1 kaj ne 1.
Estas vere nur tiuj du lastaj strofoj de ĉi tiu kanto.
Do kion mi anstataŭ volas fari?
Do mi ŝajnas esti kaptis la kazo kie se i estas == al 1,
tiam la unua vorto estas "botelo", sed la dua vorto
estas "boteloj". Sed ĉi tie, mi volas ŝanĝi ĉi tion al esti == 2.
Kaj se tio ne estas la kazo, kion mi volas ke la
unua vorto esti?
Spektantaro: "Boteloj".
DAVID J. Malan: "Boteloj", do por du boteloj.
Kaj tiam tiu vorto tie estu -
Spektantaro: "Botelo".
DAVID J. Malan: "Botelo", unuopa.
>> Bone, ni malzomi, revenu ĉi tien, re-ruli fari,
re-run beer3, tajpu 99 denove.
Konsentite, "Segmentación kulpo (kerno verŝis)."
Kion mi faris malbone?
Spektantaro: Vi ne havas valoron [inaudible].
DAVID J. Malan: Ha, bonega punkto.
Bone, do kio estas malĝusta ĉi tie?
Do segmentación kulpo, kaj ni vere tuj vidos
ĉi sufiĉe da fojoj en la estonteco, intence.
Sed nuntempe, kion signifas ĉi reale signifas?
Al segmentación kulpo preskaŭ ĉiam signifas ke vi havas
iel provis aliri memoro, RAM en via komputilo,
ke vi ne posedas, ke vi ne efektive demandis la
mastruma sistemo por.
Do ĉi-kaze, rimarki kion mi faris, kio estas
misa en mia logiko.
Mi atribuas s1 kaj s2 valoro se i egalas 1.
Mi ankaŭ faris, ke se i egalas 2.
Sed mi ne faris ĝin en la malfinia nombro de aliaj
ebloj -
en aparta, 3 aŭ 4 aŭ punkto, pentras, pentras, 99.
Do oni riparas por ĉi povus simple esti let la
havas alian kondiĉon.
Kaj lasu min iri en ĉi tie kaj diru s1 egalas -
kio devus esti tie?
Spektantaro: [inaudible].
>> DAVID J. Malan: "Boteloj", ĉar en la komuna kazo,
estas nur la sama aĵo.
Do egalas citaĵo, unquote, "boteloj". Do por pluralo
boteloj, kaj tiam ĉi tien, por pluralo boteloj.
Konsentite, tiel nun mi reiru al mia fina fenestro,
recompilar, re-ruli ĝin.
99.
Whew.
Kaj ni faru rapidan prudento ĉeko.
Teknike, ni volonte volas legi ĉiuj de ĉi tiuj certigi
ili estas ĝusta, sed ni rigardu
Almenaŭ la konata kulpaj.
3 boteloj, 2 boteloj, 2 boteloj, 1
botelo, 1 botelo, 0 boteloj.
Ni ŝajnas esti almenaŭ fiksita por nun.
Sed la kaptita ĉi tie estas, ke kia dio terura katastrofo estas
nur por solvi stulta
unu-karaktero gramatika detalo.
Do tie estas ia kialo ke mi tranĉis tiu angulo
antaŭe, ĉar ĝi estas simple tute ĝena por devi
skribi ĉi multe kodo.
Sed ĝi rezultas ke tie estas iomete pli elegante manieroj
esprimanta la ĝusta sama afero.
Kaj ni povas fari ĉi tion jene.
>> Lasu min eliri ĉi sur la ekrano dum momento kaj
enkonduki iu konata kiel triargumenta operatoro.
Tio estas speco de unu-Liner ke tio simple signifis fari nian
loĝas iom sexier, kiel promesis.
Kaj mi tuj faros tion kiel sekvas.
Donu al mi ŝnuro nomita s1, kaj lasu min
atribui ĝin jene.
(I == 1)?
"Botelo", alie "boteloj". String s2 gets (i == 2)?
"Botelo", alie "boteloj".
Do kio tiam estas la diferenco ĉi tie?
Ĉi tiuj du linioj de kodo, mi argumentas, povas
anstataŭigi ĉi tiu tuta salato.
Do mi nomas ĝin salaton, nur ĉar ĝi ia frotas mi la
malĝusta maniero, ke ĝi estas tiom da linioj de kodo.
Ne malbone.
Ne malbona dezajno.
Kiel, ĉi tiu estas perfekte ĝentila kaj perfekte bela.
Sed kodigo gets teda se vi devas esprimi sin tiel
damn specife denove kaj denove kaj denove kun simpla
scenaro kiel ĉi tio.
Do C havas iu ŝparvojoj, kiel ĉi tio.
Do tiu estas fundamente dirante deklari ĉeno nomata s1 kaj
atribui ĝin ĉu ĉi tiu valoro aŭ tiun valoron se i estas == -
pardonon, mi devus diri tion pli klare.
Deklari variablon s1, atribui ĝin ĉi valoro se tio ne estas vera.
Alie, atribui ĝin ĉi valoro.
Do alivorte, tiu estas speco de unu-linio vojo de
dirante se alie sed farante asigno la vojo.
Do, se i estas 1, tiam iru antaŭen kaj nomas tion "botelo". Kaj
tiam ĉi alie, nomas ĝin "boteloj". Dume, s2, la
dua vorto, kiun ni devas difini, se i egalas 2, ni instruos vin
starigis s2 al "botelo". Alie, starigis ĝin al "boteloj". Kaj kio
ĉi tio signifas nun estas mi povas iri tra ĉi kaj forviŝi ĉiujn
tiuj linioj de kodo.
Kaj kiam mi diras, iom ridinde, ke ĉi tio estas nun
sexier, estas sexier en la speco de stilaj senco.
La fakto ke funkcie, tiu kodo estas vere tuj
fari la ĝustan samon.
Kaj eĉ se ĝi povus aspekti iom críptico unue
rigardo, ĉar ni ne vidis tiun konstruo antaŭe, Mi preferas
argumenti ke ĝi estas finfine tuj estos tiom multe pli
legebla kaj tiel pli facile por ni homoj por ordigi de
komprenas, ĉar nun vi povas simple legi la
kodo ĉiuj laŭ unu linio.
Estas ankoraŭ simila en spirito al se, kie ĉi tiu estas la
kondiĉo kaj tiam ĉi tiu estas kio estas ene de la se kaj ĉi
Estas kio estas interne de la alia.
Sed ni povas fari ĉi tion simple multe pli elegante.
>> Kaj se mi nun reiru al mia stacio, esti forviŝita ĉiuj
de tiuj linioj kaj anstataŭis ilin per nur tiuj du,
recompilar, re-run boteloj de biero kun 99, avizo, ke mia
gramatiko estas, fakte, ankoraŭ ĝusta.
Do denove, iu por komenci.
2 boteloj de biero, 1 botelo de biero.
Aspektas bone.
Yeah.
Do ni havos multe pli konciza solvo.
Do tiu, tro, kiel vi ricevis pli komforta kun C, ne
nepre kun la unua pset aŭ eĉ dua, sed
rimarkas ke tiuj konstruoj povas permesi al ni fari tion iam
pli elegante.
Nun ni faru unu alia afero ĉi tie.
Lasu min kaj malfermu return1.c.
Nun ni komencu solvi alian problemon en maniero kiu
nin permesas skribi pli kompleksa kodo.
>> Do jen simpla iom programo kies celo en la vivo
estas pliigo valoroj.
Kaj efektive, ni preni retropaŝon.
Lasu min fari tion permane.
Lasu min fari inkluzivi kaj int main (void).
Kaj lasu min nomas tion increment.c.
Kaj kion mi volas fari?
Mi tuj iros antaŭen kaj diru ion kiel -
ni nomas la nombroj la sama -
int x.
Do int x prenas 2; printf x estas% d, nova linio, x.
Do mi tajpas rapida, sed speco de familiaraj aferoj nun.
Tiam Mi faros x + +.
Tiam mi tuj presi tiu sama frazo denove.
Kaj poste mi tuj revenos 0 simple lasi la programon.
Bone, do ĉi estas programo kiu
pliigoj numero.
Ĝi estas unue tuj pravalorizi ion al 2, kaj tiam ĝi estas
tuj pliigo ĝin kaj presi ĝin denove.
>> Do estu la kuri pliigo, nekredeble simpla programo.
Sed supozu nun, ke mi volas kubo la valoron, do fari
io iom arbitra.
Kaj mi vere volas fari x prenas la kubo de ĝi.
Do mi povus uzi kion nomas la pow funkcio, sed mi ne
vere scias, kie tio estas ankoraŭ.
Do mi faros tio la antikva vojo.
x fojoj ĉi egalas x fojoj x fojoj x.
Do mi cubing la valoro, multiplikante ĝi per sin denove
kaj denove kaj denove, por ke ni preni la povon
de 3 en ĉi tiu kazo.
Do nun la numeroj mi presi devus esti, kiel ni vidos
tie - fari pliigo, do fakte ne vere pliigo
plu, sed ni lasos la nomo sola -
2 kaj tiam 8.
Nun, ni havas la komencoj de ŝanco por bonmaniereco
tie, per tiu cubing aĵo de multiplikante nombro
per sin per sin per sin sentas ĉi povus simple esti
utila havi kiel funkcio, multe kiel iu decidis
jaroj - vi scias, speco de utila se unu el ni eksidas
kaj skribas printf tiel ke la resto de la mondo povas uzi ĝin,
kial ni ne sidigxu kaj skribu funkcio nomita kubo
kiu faras ĉi cubing por ni por ke ni ne devas permane
apliki la nocio de cubing valoroj tie?
>> Do simpla ekzemplo, sed ni iru antaŭen kaj uzi ĉi estas kiel
ŝanco verki niajn proprajn funkcio.
Do ĝis nun, ni nur uzis ĉefa, kaj ni uzis aliajn
popola funkcioj, sed ni ne skribas nia propra.
Do jen ni iru.
Mi tuj iros antaŭen kaj skribi funkcio nomita kubo.
Kaj mi tuj devos ĝin preni enigo.
Do lia eniro tuj estos entjero.
Kaj kio ĝi faros?
Ĝi tuj deklari int eligo = enigo fojoj enigo
fojoj enigo.
Kaj tiam ĝi tuj revenos, ke eliro.
Kaj tiam mi devas esti specifa nun.
Ĉi tiu funkcio estas tuj revenos al int.
Do jen do estas kiel vi volas skribi viajn proprajn funkciojn.
Vi unue decidi kio estas la nomo de via
funkcio tuj estos.
Kaj ĝenerale, iu klarigan estas bona, do mi
nomas ĝin kubo.
Tiam vi devas specifi kio okazas reveni, kio estas
lia eliro tuj estos.
Kaj ni ne havas tiun multaj ebloj ankoraŭ.
Int, char, kaleŝego, bool, kordoj.
Nuntempe, mi tuj batos kun int, ĉar mi volas ĝin
reveni entjero.
Tiam vi devas precizigi kion lia enigoj, se iu, estas.
Kaj se kubo prenas argumenton, prenas ion inter
krampoj, vi devas doni tiun argumenton nomon por ke
vi povas nomi ŝin ion kiel vi apliki aŭ skribi
ĉi tiu funkcio, kaj vi devas doni tipo, kiu en ĉi tiu
kazo tuj estos int.
Do mallonge, kubo estas funkcio kiu prenas entjero
kiel eniro kaj revenas entjero kiel rezulto.
>> Do kio faras ĝi fari kun tiu eniro?
Nu, en linio 14, mi deklaras variablon nomis eligo, kaj mi
atribui al ĝi la valoron, enigo fojoj enigo fojoj enigo.
Kaj poste mi revenos eligo.
Do kiel mi uzas ĉi tiam?
Kion mi ŝanĝu tiuj elstaris karakteroj sur linio
7 esti, vi opinias?
Spektantaro: [inaudible].
DAVID J. Malan: Jes, tia kubo de x.
Do x estas variablo, kiu signifas ĝi tenas iu valoro.
Feliĉe, estas de tipo entjero.
Kaj ĉar x estas int, tiu signifas Mi povas pasi ĝin en kubo.
Kaj eĉ se mi supera la valoro de x kun la valoro
de kubo x, kiel estis la kazo tiel malproksime, iu ajn tempo vi
havi egalsigno kaj sxnuro de kodo, la aĵoj sur la dekstra
gets ekzekutita kaj tiam gets atribuita al la
valoro sur la maldekstra.
Do la ordo de operacioj estas kiel ni atendus.
Do faras ĉi tiun laboron?
Nu, mi iros tien.
Lasu min malfermi mia fina fenestro.
Lasu min estas ebla pliigo, Enter.
"Implicitaj deklaro de funkcio 'kubo' estas nevalida en
C99 ". Kiel flanken, C99 raportas al la lingvo C kiel estis
difinita en 1999, kiu estis ĝisdatigo super la versio de
1989, kiu estas ĝisdatigo super la originalo.
Do jen ĉio tio signifas.
>> Do kion tio signifas ke "implica deklaro de
funkcio 'kubo' estas nevalida? "Estas ĉi tie.
Estas tie en linio 12.
Spektantaro: [inaudible].
DAVID J. Malan: Kio estas tio?
Spektantaro: Ne antaŭe.
DAVID J. Malan: Ne antaŭe.
Do ĉi tiu estas la afero.
C estas speco de stulta, aŭ C tradukiloj estas speco de stultaj.
Ili vere nur faras kion vi diros al ili.
Kaj ili, precipe, nur legis vian kodo supre sube,
maldekstre dekstren.
Do se la tradukilo, Clang, legas vian kodon, linio 1, ĝi
figuroj, kiel eblas fari ĉi tion.
Ho, tie venas ĉefa.
Konsentite, lasu min antaŭeniri kaj deklari variablon x.
Lasu min presi ion.
Linio 7, kion la heck estas kubo?
Ne estas deklarita en stdio.h.
Ĝi ne venas kun C. Mi tute ne scias kion fari.
Kaj tiel Clang nur bails kaj fermas kun tiu eraro mesaĝo.
Do ni povas fiksi tion en kelkaj manieroj.
Ni povas instrui Clang kion kubo estas por nur movi kie la
deklaro estas.
Do mi tranĉis kaj pasted ĝin sur la pinto ĉefa.
Nun rimarkas ke nur ĉar ĉefa ne plu estas unua, estas
ankoraŭ ekzekutita defaŭlte.
Artikolo estas ĉefa.
Ĝi estas la defaŭlta funkcio nomo.
Ne gravas kie ĝi estas en dosiero.
Sed almenaŭ nun Clang vidis kubo antaŭ ol mi uzas ĝin.
Do ni vidu se Clang estas feliĉaj nun.
Faru pliigo, ĝi kompili ĉi tiun fojon.
>> Mi kuros pliigo.
Kaj efektive, ŝajnas esti laborante.
Nun, vi povas veni supren kun scenaroj eventuale kie
ĝi ne estas farebla por meti ĉiu funkcio
super ĉiu alia funkcio.
Vi get ŝtopita en ĉi senfina ciklo en realeco,
kie ĉi tiu viro deziras esti tie sed ĉi
ulo bezonas esti tie.
Por ke ne ĉiam funkcias.
Do dankeme, C havas pli eleganta solvo.
Mi tuj metos ĉi tien, kie ĝi estis, nur ĉar mi
preferas, kiel demando de principo, ke ĉefa ĉiam
ĉe la supro, ĉar ĝi estas nur bela por vidi, kio tiu programo
faras defaŭlte.
Kaj kion mi faros ĝis tie rakontos, kion nomas
prototipon.
Mi tuj re-deklari mian kubo funkcio per laŭvorte
kopii kaj bati.
Efektive, tio ne estas laŭvorte.
Do laŭvorte kopii kaj bati linio 15
super la linio 6.
Ne gravas kion linio ĉi finas plu.
Ĝi okazas al esti sur linio 4.
Sed ĝi devas esti antaux ĉefa.
Sed rimarki la diferencon.
Linio 4 finas kun punktokomo, kiu signifas bona,
Clang, prenu mian vorton por ĝi, ke tie ekzistas funkcio
vokis kubo kiun prenas int kaj redonas int.
Sed mi ne gonna diri al vi kio estas ankoraŭ.
Nur scias, ke mi promesas al vi eventuale.
Kaj efektive, nun estas bone ke ĉi tiu estas sube.
>> Do ĉi tiu estas ĝenerale bona, ĉar tiam ĉe la supro de
vian dosieron, vi povas simple Rattle for, rapida fajro, unu linio
ĉiu, kion la nomojn de viaj funkcioj estas, kion liaj
enigoj estas, kion liaj eligoj estas.
Kaj esti pli klara, enigo ĝenerale signifas argumento aŭ
parametro, sinonimo.
Eligo signifas revenon valoro, kio faras ĝin
manon al mi.
Do en ĉi tiu kazo tie, kubo estis deklarita je la supro, sed
difinita, alie konata kiel implementado, ĉe la malsupro.
Do nun ni reiros tien kaj re-ruli ĉi.
Do nun mi antaŭeniri kaj re-ruli fari, re-ruli pliigo.
Kaj nun ŝajnas esti funkciante ĝuste fajna.
Do nun ni povas antaŭeniri kaj faktoro ekster iun kiel la
biero ekzemple en ĉi tiu kvara versio.
Do lasu min rulumi malsupren tie.
Kaj rimarki ke mi specon de prenis tiun lecionon koro gxuste nun.
La fakto, ke mi kantis la sama strofo denove kaj
denove kaj denove, la sama ĥoro linio en la kanto, sentis
kiel kial ne mi faktoro kiu eliris sur funkcio?
Kaj efektive, tiu devus esti unu el la motivoj.
Krom la fakto ke iu ajn alia en la mondo povus deziri
uzi kubo funkcio -
tio estas bona kialo por faktorigi ion kaj skribi vian
propra kutimo funkcio -
se estas peco de kodo en via programo kiu simple faras
koncepta senco, ke vi ia volis doni al ĝi
nomo - kiel en ĉi tiu kazo, ĥoro -
tiam vi povas simile skribi ke kiel aparta funkcio.
Vi ne devas skribi ĉion ĉefa se nur
sentas purigilo disigi ĝin kaj doni al ĝi nomon.
>> Do en ĉi tiu kazo tie, rimarki, ke mi havas komenton sur la pinto
ĉi tiu funkcio kiu ĝuste kantas pri la
specifita nombro de boteloj.
Rimarku, ke mi ne bezonas nomi tiujn
aĵoj enigo kaj eligo.
Fakte, ĉi tiu tempo Mi nur nomas mia enigo b por botelo.
Kaj rimarki tie, void sugestas kio?
Ke ĥoro -
Spektantaro: Ĉu ne revenos ĝin.
DAVID J. Malan: Ĉu ne resendas valoro.
Kaj efektive, funkcioj ne devas reveni valoroj.
Ili povas nur fari ion.
Ili povas havi tiel nomataj kromefikoj, kiuj en ĉi tiu
kazo estas nur aro faskon da presi en la ekrano.
Do rimarki ke tiu kodo tie, mi laŭvorte simple sxtelis de
la antaŭa ekzemplo.
La sola diferenco estas anstataŭ uzi i kiel mia
variablo, mi nun uzas b kiel mia variablo.
Do mi havas b cxi tie, mi havas b cxi tie, mi havas b
minus 1 cxi tie.
Sed la kodo precize la sama.
Sed nur por montri al vi nun, kiel ni povas uzi tiun, lasu min iri
antaŭeniris kaj reale ŝanĝi ĉi tion al esti por buklo.
por (_int_ mi = n; i> n; i -).
>> Do mi ŝtelis ke de nia antaŭa ekzemplo.
Antaŭe, estas en linio 37 ke mi jam komencis
kantante ĉi ĝena kanto.
Sed anstataŭ, mi nur tuj nun nomas ĥoro de i.
Faris.
Do nun en ĉiu ripeto de ĉi ciklo, mi nomas tion aliaj
funkcio, ĥoro, kiujn mi hazarde skribas.
Ĝi ne estis skribita de alia persono jaroj.
Sed ĥoro, dume, uzas printf presi
el tiuj kvar linioj.
Sed la fakto, ke mi vokas ĥoro denove kaj denove en
buklo signifas ke mi iros akiri, ke je la fino, la
ĝusta sama kanto kiel mi havas tiel multe.
Do mallonge, nun se mi retrorigardas al mia kodo, kvankam
funkcie ĉi estas ekvivalento, rimarki ke ĝi estas
komencas akiri eĉ pli legebla.
Mi ne precize scias kiel GetInt
estas efektivigitaj.
Sincere, mi ne scias kiel ĥoro estas efektivigitaj.
Sed ne gravas al mi.
Mi ne zorgas, ĉar mi nun povas ordigi de, kiel homo, legu
ĉi de supre ĝis malsupre.
Kaj ĉar la funkcioj estas nomata laŭ kion ili
do, mia kodo estas pli legebla.
Kaj kiel niaj programoj akiri multe pli kompleksa -
de la semestro la fino, vi povas skribi centojn da linioj
de kodo en lingvoj kiel PHP kaj Javascript kaj similaj -
vi trovos, ke estas multe pli facila ol por kontroli kiu faras
kion vi faris.
Kaj kiam vi komencos kunlabori kun amikoj aŭ
kompanianoj aŭ kolegoj, vi povos skribi multe pli
amasa programoj per startanta por praktiki tiuj bazaj
konstruaĵo blokoj.
>> Do kun kiu diris, kial ni ne nomas ĝin tago?
Kaj ni vidos vin merkredon.
[Aplaŭdo]