>> SPEAKER 1: Saluton ĉiuj.
Ni tuj komencu.
Mi pensas, ke homoj ankoraŭ irante esti filtrita en.
Sed en la intereso de tempo, tial ni povas ekiru infanoj el tie ĝustatempe,
Ni tuj komencu.
Do bonvenon al la CS50 Kvizo 0 recenzo.
Por tiuj de vi kiu ne rimarkis tamen, vi havas demandon merkrede.
Woo-hu.
>> Se vi ne komencis studi ankoraŭ aŭ ne konsciis ke tio ekzistas ankoraŭ,
estinteco kvizojn kaj ĉiuj informoj pri via kvizo estas sur cs50.net/quizzes.
Ekzistas iuj sufiĉe bonaj aĵoj en tie, estinteco kvizojn el la lasta 10
jaroj tiel kiel informo pri tiu demandaro kaj temoj
ke estos kovrita.
Do ni komencu.
>> Do vi uloj povas memori la unuan tago de klaso David tiuj lampoj sur.
Do esence, ĉiu kiu iras sur sub la kapuĉo de komputilo estas
farita en duuma.
Duuma signifas kion ĝi sonas kiel, 0-aj kaj 1-oj.
Ĝi havas du valoroj kiuj povas esti reprezentitaj.
>> Do ĝuste kiel en la unua tago de la sekcio Kiam David ŝaltis lumon
bulbo reprezenti, aŭ 1, nia komputilo komprenas binaran kiel 0-aj kaj
1-oj, sur aŭ ekstere.
Bazaj de Binaraj.
CXiu loko estas reprezentita en bazo du.
Do vi aldonas 2 al la 0 al la 1 por la 2 tutan vojon supren.
>> Kalkuli kio via binara estas decimala, vi nur sekvas ĉi ekvacio
tipo afero.
Se vi havas 1 en ajna el tiuj lokoj, vi multigos gxin per nenial
bazi ĝi estas, aldonu ĝin, kaj vi havos la dekuma.
Do jen kiel vi kalkuli 5 en duuma.
Ĝuste kiel kion ni faris en la lasta diapozitivoj, jen kiel vi farus
reprezenti 1 ĝis 5.
>> Simile, simple ŝatas vin povas aldoni kaj subtrahi en dekuma aŭ bazo 10, aŭ
vere neniun bazon, sur povas aldoni kaj subtrahi en duuma.
Ĝuste kiel atendite kiam aldonu la du supren, se ĝi egalas granda
ol 1, vi portas 1, faru gxin al 0, kaj fari la aldono ke vojo, nur
kiel atendite per regulaj dekuma aŭ ajna alia bazo.
Cool.
>> Tiel kiel mi diris antaŭe, ĉio daŭrigas sub la kapuĉo de nia komputilo
estas farita en 0-aj kaj 1-oj aux binaraj.
Do kiel ni esprimas, ekzemple, literoj aŭ ciferoj, aŭ karakteroj?
Kaj la respondo al tio estas ASCII.
>> ASCII estas surĵeto inter karakteroj ke ni kutime vidas en la
Angla lingvo kiel A'S B, C estas, substreki, streketoj, kaj
io simila.
Kaj mapas ke al ASCII valoro.
An ASCII valoro estas nur numero kiu povas esti komprenita per via komputilo.
Kaj kiel vi povas fari krom kaj subtraho kun nombroj, vi povas fari
ilin per ASCII valoroj.
>> Do en ĉi tiu ekzemplo, kion estos ĉi elprinti?
Yeah, do nur Spaco B spaco C spaco D. Kien mia muso iras?
Rimarku vi povas difini int ĉe 65.
Kaj kiam vi presas ke el uzanta procento C, ĝi devos interpreti tion kiel
karaktero kaj presi A.
>> Simile, oni povas deklari kiel signo.
Kaj kiam vi presas ĝin uzante procento C, ĝi devos interpreti ke
procento D. Kaj ĝuste kiel vi povas aldoni nombro, vi povas aldoni rolantoj
ASCII valoroj, en ĉi tiu kazo.
>> Do iom puntero por ĉiuj.
5, kiel kordo, ne fakte egalas 5.
Do kiom eble ni konverti la kordo 5 por la entjero 5?
Ajna ideoj?
Yeah.
>> Do se ni havas 5 kiel kordo, ni povas subtrahi 0.
Kaj tio donos al ni 5.
Kaj simile, se ni havas 5 kiel entjera, aldoni ke la kordo 0.
Kaj kiu donas al ni la ŝnuron 5.
Cool.
>> Nun, memoras reen al prelegi kie Ni parolis pri algoritmoj.
Do kiel ni vere volas komputilo fari interesajn aferojn?
Sciu, simple aldonante kaj forprenante nombroj kaj impreso aferojn ne
ke ekscita.
Kutime ni volas nian komputilon plenumi ian algoritmo.
Iu iom pli kompleksa ol simpla aritmetiko.
>> Algoritmo estas nur paŝo post paŝo aro de instrukcioj por kiel plenumi
iu task--
nur ŝatas recepto.
Vi eble memoras la unuan tagon de klaso kie David ni kalkulu ĉambron
homoj kaj kiom da homoj estis en la ĉambro.
Vi povus uzi por kalkula unu post unu.
1, 2, 3, 4.
En tiu kazo, lineara tempa algoritmo.
>> Sed David enkondukita algoritmo por vi kalkulu la popolon en la ĉambro
kie ĉiuj ekstaras, vi diras via numeron alian personon, aldoni ke
nombro, kaj unu persono sidiĝas.
Kaj vi ripetis tion.
Tio estas unu tipo de algoritmo.
Ni povas analizi kiel efika ĝi algoritmo estas bazita sur ĝi estas kuri tempo.
Sed ni parolos iomete pli pri tio poste.
>> Do ĉiuj algoritmoj povas ankaŭ esti skribita en _pseudocode_.
_pseudocode_ Estas nur angla kiel sintakso uzata por reprezenti
programlingvo.
Ekzemple, se ni volis demandi uzanto diveni mia ŝatata nombro, ni
havu _pseudocode_ kiel tia.
>> Akiru uzantoj diveni.
Se la diveno estas ĝusta, diru ilin ili estas ĝentila, alie diri ilin
ili ne estas korekta.
Kaj _pseudocode_ estas maniero de facile reprezenti ideon aŭ algoritmo.
Do nun ni eble volas reale skribi tion en la lingvo kiun la komputilo
multobligita kompreno.
Do ni povus skribi nian _pseudocode_ kaj interpreti ke en fontkodon.
>> Ĝis nun, fontokodo devas aliĝi al certa sintakso de
programlingvo.
Kaj ĝis nun, en CS50, ni estis uzante plejparte c.
Do eble ĉi fontkodon por c.
Poste en la kurso, vi nokto venas en kontakton kun aliaj programado
lingvoj kiel PHP.
Aŭ se vi eĉ preni aliaj klasoj, vi plenumadu Java, Python, aŭ eĉ OCML.
Sed en nia c programo lingvoregionoj, kiel ni povus skribi la kodon fonto
la _pseudocode_ algoritmo kiu Mi nur priskribis antaŭe.
>> Do kiel faras via komputilo reale kompreni tion?
Kiel mi diris antaŭe, nur vere Komprenas nuloj kaj.
Do kiel ĝi ricevas de la fonto kodo por iu kiu povas esti
komprenis?
Nu, ni havas ion nomata tradukilo.
>> Se vi memoras reen en la plejparto de via psets, vi havis ian programon
skribita en punkto c dosieron.
Kaj tiam vi tajpi konsisto.
Do kion fari faras?
>> Vi povas tajpi make kompili via programo ĉar someone--
kiu skribis via p aro; verŝajne David--
kreis make dosiero.
Kaj kiu rakontas fari scii kuri via tradukilo, nomita tin, ke volo
tiam kompili vian fontkodon kontesti kodo, kiu estas nuloj kaj
ke via komputilo komprenu.
Sed iom pli poste, ni iros pli en profundo sur tradukiloj.
>> Do memoru pset 0, where-- jes, vi havas demandon?
>> Publiko: [inaudible]?
>> SPEAKER 1: Jes.
Mi pensas ke ili reale devus esti enreta.
Yeah.
>> Publiko: Ĉu kiel [inaudible]?
>> SPEAKER 1: ĝi ne estas.
La estas sur cs50.net/quizzes.
>> Publiko: Slash kvizojn, slash 2013, slash 0, kaj simple premas per
kvizojn 2013 kaj kvizo 0, revizii sekcio diapozitivoj.
>> SPEAKER 1: Yeah, do se vi infanoj volos tiri ĝin kaj rigardu ĝin sur vian
propra komputilo, jen delikata tro.
Diru tion denove.
>> Publiko: [inaudible].
>> SPEAKER 1: Yeah, [inaudible] estas la loka variablo.
Ho, jes?
>> Publiko: [inaudible]?
>> SPEAKER 1: Ne, strikoj ne estas en la ekzameno.
Pardonu, ŝia demando estis, estis strikoj en la ekzameno.
Kaj ĝi ne estas.
Do pset 0, vi uloj devus havi ĉiuj implementado ion uzante nulo.
Kaj ni lernis kelkajn bazajn programado konstruelementoj uzante nulo.
>> Do ni rigardu iujn de tiuj konstruelementoj
konsistigantaj programon.
Unue estas Bulea esprimo.
Buleaj esprimoj estas bonaj kaj 0 aŭ de io kiu havas
du eblajn valorojn.
En tiu kazo, vera aŭ malvera, aŭ malŝalti, kaj jes aŭ ne.
Ekzemplo de simpla, tre simpla, Programo kiu uzas Bulea
esprimon ĉi tie.
>> Do en ordo por bulea esprimoj utila, ni havas Bulea operatoroj.
Tiuj estas telefonistoj kiuj povas esti uzitaj kompari iuj valoroj.
Do ni havas kaj aŭ ne egalas, malpli ol aŭ egala al, pli granda ol aŭ
egala al, kaj malpli ol aŭ pli granda ol.
Sed ĉi tiuj operatoroj estas ne tre utila se ni povas kombini ilin en
kondiĉoj.
>> Do vi uloj povas memori de nulo kaj de viaj p prende ke ni
havis kondiĉojn.
Ili estas, esence, kiel forkoj en la logikon de via programo kiu
ekzekutu dependanta sur ĉu kondiĉo estas konita.
Do unu el la kondiĉoj kiujn ni devis uzis multfoje en ĉi tiu kurso estas la
se, alie se, kaj alie kondiĉoj.
>> Jen ekzemplo de kiel vi povus uzi tion.
Ĉu iu scias la diferencon inter nur uzante se deklaroj ĉiuj
la vojo malsupren versoj se, alie, se, kaj alie kombinita?
Jes?
>> Publiko: [inaudible].
>> SPEAKER 1: Ekzakte.
Do se mi havus se la tuta vojo malsupren ĉi vojo, eĉ se tiu kondiĉo revenoj
vera, ĝi ankoraŭ daŭrigas provante la venontaj du.
Dum, kun alia-se, kiel ajn deklaro, se oni redonas vera,
la aliaj ne provitaj.
Demandojn pri tio?
Cool.
>> Do vi uzas se-alie de alia komunikaĵo se vi scias ke ĝi povas nur
esti unu el tiuj kazoj.
Do ni scias se x estas malpli ol 0, estas certe ne tuj estos
pli granda ol 0.
>> Tuj poste, alia konstruaĵo bloko ke ni lernis estas cikloj.
Ni havas tri tipojn de cikloj.
Por masxojn, dum maŝojn, kaj fari dum maŝojn.
Kaj ĝenerale, kiam vi sidas malsupren skribi ion, vi devas decidi
kiu el la tri kiun vi volas uzi.
Do kiel ni decidi kiu unu?
>> Ni ĝenerale uzas por buklo se ni scias kiom da fojoj ni volas persisti
tra iu aŭ kiomfoje ni volas realigi taskon.
Ni uzos dum maŝojn se ni bezonas iujn kondiĉo por esti vera teni kurado.
Kaj ni uzas fari dum tre simila al dum, sed ni volas nian kodo kuri je
Almenaŭ unu fojo.
>> Do fari momenton, kio estas la la do volas ĉiam kuras almenaŭ unu fojo.
Dum kiu, kun la tempo, ĝi ne kuras tute se la
kondiĉo ne estas kontenta.
Demandojn kun tiu?
>> Do strukturo de a por buklo.
Vi infanoj ĉiuj vidis ĉi.
Vi pravalorizi ĝin.
Vi havas ia kondiĉo.
Do, ekzemple, ni povus pravalorizi kiel i egalas 0.
i estas malpli ol 10.
Kaj i ++.
Tre simpla kiu ni faris.
>> Dum momento buklo, simile, vi havas havi ian inicialización,
ia kondiĉo, kaj ia ĝisdatigo.
Do ni povas apliki niajn por buklo ankaŭ kiel dum buklo uzanta ĉi.
Kaj simile kun la do dum buklo, ni havu iom inicialización,
ekzekuti ion, ĝisdatigi ĝin, kaj tiam kontrolu la kondiĉo.
>> Do nun funkcioj.
Ni metu cxion kune.
Ni eble volas skribi iun speco de funkcio.
Komuna funkcio kiu vi povus vidis jam estas ĉefa.
Ĉefa estas funkcio.
Ĝi havas reveno tipo, int.
Ĝi havas funkcion nomo, ĉefaj.
Kaj ĝi havas argumentojn, argc kaj argv.
Do ĉefa estas simple funkcio.
>> Aliaj funkcioj vi povus esti uzita, printf-- printf estas function--
GetInt, toupper.
Sed tiuj hazarde estis implementado por ni
ian bibliotekon.
Se vi uloj memori inkludante ĉi CS50.h bibliotekon aŭ la
standard I / O biblioteko.
Jes, pridubas?
>> Publiko: Is ĉefa ĝuste imanenta en c?
Ĉu ĝi simple speco de [inaudible]?
>> SPEAKER 1: La demando estas se ĉefa estas imanenta en c.
Kaj jes, ĉiuj funkcioj havas ĉefan funkcion.
Estas speco de necesaj por la komputilo scii kie komenci
kuri la kodon.
>> Publiko: Do ​​vi ne volis [inaudible]?
>> SPEAKER 1: Ne
Ajna alia demandoj?
Cool.
Do kiel vi povas uzi funkcio ke estas skribita por vi, vi povas ankaŭ
skribi vian propran funkcion.
Tiu estas funkcio kiu iu potenco skribis kalkuli la volumo
de q, ekzemple.
Ekzistas reveno tipo tie, en tiu kazo int, nia funkcio nomo q kaj nia
Listo de parametroj.
>> Kaj rimarku, ke vi devas skribi la datumojn tipo de la parametro vi volas
uzi alie la funkcio ne scii kia
parametro mi devus esti akcepto.
Do, en ĉi tiu kazo, ni volas entjero kiel nia eniro.
Do kial povus ni volas uzi funkciojn?
>> Unue, granda organizo.
Ili helpas rompi vian kodon en pli organizita pecoj kaj fari
pli facile legebla.
Simpligo.
Tio estas bona por la dezajno.
Kiam vi legas koderon kaj la ĉefa funkcio estas vere,
vere longaj, eble estus pli malfacile kialo pri kio okazas.
Do se vi rompi ĝin malsupren en funkcioj eble estus pli facile legi.
Kaj reutilizar-kapablecon.
Se vi havas eron de kodo kiu estas esti nomita aŭ kuras multnombraj fojoj,
anstataux reskribi ke kodo 10 fojojn en via ĉefa funkcio, vi povus
volas reuzi ĝin.
Kaj tiam ĉiu tempo vi bezonas uzi tiun koderon, nomita la funkcio.
>> Do nun, se ni memoras reen al nulo, Ni ankaŭ parolis pri kelkaj konceptoj,
unu el kiuj estas enhebrado.
Fadeno estas la koncepto de multnombraj sekvencoj de kodo
ekzekutinte samtempe.
Do pensas reen al tago kie David vi uloj kalkulu la numeron de
homoj en la ĉambro.
>> Esence, kio okazas on estas vi ĉiuj infanoj estis
kurante apartaj fadenoj.
Kaj tiuj fadenoj venas kune akiri ian respondon.
Simile, en Scratch, kiam vi havas multnombraj sprites, vi povus
havas katon kaj hundon.
Kaj ili estus samtempe kurante ilia propra skriptoj.
Tio estas ekzemplo de threading.
>> Kaj la alia koncepto kiu estis enkondukita en nulo estis okazaĵoj.
Kaj eventoj estas kiam multnombraj partoj de via kodo interkomuniki.
En Scratch, tio estis, kiam vi uzis la elsendo kontrolo kaj kiam mi
Ricevu blokoj.
>> Kaj ankaŭ, en Problemo Ara 4, ni vidis iom eventoj tiel.
Vi uloj povus uzi la Gevent biblioteko.
Kaj tie estis funkcio waitForClick en kiu vi staris
por la uzanto klaku.
Kaj via alklako, en ĉi tiu kazo, estus la evento kaj atendas klako estas via
okazaĵo traktilo.
>> Kaj ankaŭ, laŭlonge kurante vian psets kaj laborante sur via psets vi
eble venis en kontakton kun kelkaj el tiuj ordonoj.
Jen kion vi tajpis en vian terminalfenestro aŭ ajna fenestro
kiu montras supren en via g redaktu al, esence, navigi via komputilo.
>> Do ekzemple, LS listigas enhavon de dosierujo.
Faru dosierujo kreas novan dosierujon.
KD, ŝanĝo dosierujo.
RM, demeti, forigas dosieron aŭ iu dosierujo.
Kaj poste forigi la dosierujon forigas dosierujo.
>> Publiko: [inaudible]?
>> SPEAKER 1: Jes, certas.
Pardonu, la demando estis se vi sugestus metante ĉi
sur la lertaĵoj folio.
Ĝi povus helpi.
Se vi havas ĉambron, vi povas meti ĝin sur.
Estas ankaŭ nur ĝenerale sufiĉe bona memori ke kiam vi uzas ĝin
vi eble volas nur havas ĝin parkerigis.
Tio faros vian vivon multe pli facila.
Ĉu mi respondu vian demandon?
>> Do nun, ni parolis iom mallonge pri bibliotekoj.
Sed la du ĉefaj ke ni estis uzante ĝis nun en la kurso estas
standard I / O kaj cs50.
Kia ajn estas inkluditaj en la normo / S biblioteko?
>> Yeah, do nun ni uzas printf.
En cs50, ni uzis GetInt kaj GetString.
Kaj la datumtipo kordo pasas ankaŭ esti deklarita en tiu cs50 biblioteko.
Ni parolos iom pli en profundo sur kiom bibliotekoj labori kaj kiel oni
interagi kun la resto de via kodo.
Sed tiuj estas la du ĉefaj ke ni venis en kontakto kun tiel multe en
la kurso.
>> Tipoj.
Tiuj estas bone memoras kiom ĉiu tipo estas reprezentita per aŭ kiel
multaj bajtoj ĉiu tipo requires--
int, 4 bitokoj; char, 1 bajto.
Float estas 4 bitokoj.
Kio estas duobla?
>> Publiko: [inaudible].
>> SPEAKER 1: Yeah, do kaleŝego sed duobligi la grandecon.
Kio pri longa?
>> Publiko: [inaudible].
>> SPEAKER 1: OK.
Kio estas longa?
>> Publiko: [inaudible].
>> SPEAKER 1: Yeah, duobligi la int.
Jes.
>> Publiko: [inaudible].
>> SPEAKER 1: Longa [inaudible].
Kaj poste longa tempo estas duobla tio.
>> Publiko: Ne, ne.
Longa estas nur int.
Ĝi dependas de la arkitekturo antaŭ la [inaudible]
kaj int havas la saman grandecon.
[Inaudible].
>> SPEAKER 1: Do longan kaj kiel int estas samaj.
Kaj poste longa tempo estas duobla la int.
Cool.
Kaj tiam, kio estas la lasta tipo?
>> Publiko: Pointer.
>> SPEAKER 1: Jes, tiel ni lernis iomete pri punteros.
Kaj sendepende de kia puntero estas indikante to-- eblis char stelo
aŭ int star--
ĝi estas ĉiam 4 bajtoj por montrilo.
Demandojn pri tio?
Jes?
>> Publiko: [inaudible]?
>> SPEAKER 1: Do longa kaj int estas la sama en ĉi cs50 aparato.
>> Aŭdienco: La aparato estas tute interŝanĝeblaj.
>> SPEAKER 1: Jes.
Do tiam longa longa estas duobla kiel int.
>> Spektantaro: tio estas la 32 bitoj?
>> SPEAKER 1: 32 bitoj, yeah.
>> Publiko: Tiel [inaudible]?
>> SPEAKER 1: Jes, se li ne eksplicite diras vin
devus alpreni 32 bitoj.
>> Publikon: ĝi dirus ion kiel subkompreni
arkitekturo kiel la aparato.
Por 64 bitoj, la nuraj aĵoj kiuj ŝanĝo estas sopiras kaj punteros.
Ili ambaŭ [inaudible].
>> SPEAKER 1: Jes?
>> Publiko: Demando.
Do unu el la praktiko kvizojn, petu pri unsigned int.
Do kiel estus tiu determinos el la int [inaudible]?
>> SPEAKER 1: An sensigna en estas ankaŭ 4 bitokoj.
Sed kio estas malsama pri subskrib int kaj sensigna int?
>> Publiko: [inaudible].
>> SPEAKER 1: Rajto.
Oni povas reprezenti negativajn valorojn.
Sed kiel faras ĝi fari?
>> Publiko: [inaudible].
>> SPEAKER 1: Jes, ĝi ŝparas 1 iom reprezenti la signon.
La subskribita havas iom ke reprezentas la signon.
Kaj sensigna nur estas ĉiuj pozitivaj.
>> Publiko: OK.
Do vi dirus ke duoblan estas dufoje la grandeco de kaleŝego?
>> SPEAKER 1: Duobla estas dufoje la grandeco de kaleŝego, jes.
>> Publiko: Kiel funkcias puntero por longa tempo [inaudible]?
>> SPEAKER 1: Do la demando estas kiel faras la montrilon al longa long--
kiel estas kiu nur kvar bajtoj kiam longa tempo liaj 8 bajtoj.
Do memoru kio estas puntero, esence, je la tre baza valoro.
>> Publiko: [inaudible].
>> SPEAKER 1: Yeah, do puntero estas nur memoro situo.
Do ne gravas kiom spaco ke puntero notas al.
Ĝi nur bezonas 4 bajtoj por konservi trako de tiu memoro situo.
Ajna alia demandoj?
Cool.
>> Do la lasta afero mi estas normo eligo.
Vi devus uzi ilin ofte sufiĉas ke vi povas memori.
Sed tio estas kiam ni uzas printf, ekzemple.
Kaj ni havas tiujn anstataŭiloj ke vokitaj formato kodoj.
>> Do procento c char, procento i por int, kaj ni povas ankaŭ uzi procento d.
Ĝi estas la sama aĵo.
Sed, ĝenerale, en CS50 nin provu uzi procento i.
Elcento f por kaleŝego.
Elcento ld por longa tempo kaj procento s kordo.
>> Simile, ni estis uzante kelkaj de tiuj eskapo sekvencoj.
Ekzemple, backslash n por nova linio.
Tiu estas nur por kiam vi formatado vian kodon por print f.
Jes?
>> Publiko: Kio estas procento d por?
>> SPEAKER 1: Do la demando Estas kio procento d por?
Elcento d estas por ints.
Elcento d kaj procento i estas la sama.
>> Publiko: Kio estas la diferenco inter backslash n kaj backslash r?
>> SPEAKER 1: Do la demando estas kio estas la diferenco inter reagon n kaj
reagon r?
Mi kredas backslash r is--
>> Publiko: Do ​​backslash r nur implicas revenas al la komenco de la linio
sen fakte tuj nova linio.
Do se vi presi backslash r kaj vi reiri al la komenco de la linio
tiam vi presi pli aĵoj, vi reskribi La aĵoj estas jam sur
[Inaudible].
Dum, n reale iras al nova linio kaj iras al [inaudible].
>> SPEAKER 1: Nu, aliajn demandojn?
Bone.
Mi tuj transdonis ĝin al Dan kiu daŭros.
>> [Aplaŭdo]
>> DONAS: Ĉiuj righty.
Do mi parolus pri alia larĝa gamo de ideoj de la klaso, kiuj estas
malglate reprezentanto de semajno po la komenco de la semajno tri dividante
kun malplenigita, kiu estas simple maniero de trakti valoro de certa tipo kiel
valoron de malsama tipo.
Do ni povas fari ĉi tion kun signoj por ints, flosas al ints kaj
longe sopiras duobligi.
>> Ĉiuj ĉi tiuj aferoj povas esti uzata kiel manieroj trakti iun numeran valoron
minus char kiel iuj aliaj nombra valoro.
Do tie estas iuj aferoj kun tiu, de Certe, kiu venas kiam vin jxetu
aĵoj kiel float al ints.
Do tio estas iom stranga.
Ni havas kaleŝego kiu estas 1.31.
Ni multobligos ĝin per 10,000.
Kaj tiam ni presi ĝin kiel int.
Kion faras ĉi eliro?
10.000 fojojn 1.31.
Do 13.000, estas ke la diveno?
>> Publiko: mi kredas ke estas 10.000.
>> DONAS: Do mi multiplikante ĝin 10,000 antaux Mi jxetante gxin.
>> Publiko: Ho.
Ne estos sola 9 kaj iu 0 numerojn?
>> DONAS: Vi havu iom bizara ciferoj.
Do bone, estas 1,3 fojoj 10,000.
Do tio estas 13.000.
Kaj tiu ekstra weird--
>> Publiko: 13.100.
>> DONAS: 13.100.
Dankon, Rob.
Kaj tiu ekstra weirdness--
ĉi 9,9--
Estas simple ĉar ĉi casting finis rondigas malsupren kie
ĝi ne devus havi.
Yeah.
>> Aŭdienco: La casting okazas post io alia?
>> DONAS: Do ĉar mi havas presita, ĝi faras ĉi multipliko antaŭ ĝi
faras ĉi casting.
>> Publiko: [inaudible].
>> Dan: Mi pensas ke estus jxetita unua, yeah, kio estus 10,000.
Io alia?
Cool.
Do tio estas 13.099.
Kial tiu okazos?
Imprecision.
>> Kaleŝegoj ne estas perfektaj.
Ili povas nur reprezenti nombrojn al iu numero de signifaj ciferoj.
Do se ni presi 8 sig figojn je ĉi kaleŝego, ni preni ian
malbela rigardante nombro.
Kaj tio estas pro 1,31 neniom precize esti reprezentita per simpla
potencoj de du en la maŝino.
Do ĝi finas portante la plej proksima divenu, kiu finu
estante iom malalta.
Sencon?
OK.
>> Nun, conmutación estas malsama maniero de faranta kondiĉa deklaroj kie ĉiuj
Ni zorgas pri estas ununura variablo.
Do en ĉi tiu aparta ekzemplo, ni ricevi entjeran de la uzanto.
Kaj poste ni rigardis kion tio entjero estas.
Supozeble, estas nombro inter unu kaj kvar.
Tio estas kion ni petas.
>> Do vi ŝaltilo de la variablo nomo.
Tiam vi starigis kazoj de eblaj taksos eblus.
Do tiu kazo, diras ke estas malalta.
Kaj tiam vi rompi eliri de la ŝaltilo kondiĉo tiel
vi ne plu iri.
>> En la sekvanta case--
tiel kazo du kaj kazo three--
se estas kazo du tio nur gutas malsupren la unua linio de kodo vidas kiel kun
majuskloj tri ĝis ĝi vidas ripozon.
Do la kialon vi akiri kazo oni nur print malalta estas ĉar mi
havas ĉi ripozon ĉi tie.
Se mi, ekzemple, ignoris ĉi break-- se mi ĵetis ĉi breakaway--
estus presi malaltaj, kaj tiam donus presi mezo, kaj tiam rompigxus.
>> Do paŭzoj estas grava parto de ŝanĝi kondiĉoj kaj
ili devus esti tie.
Ajna kazoj kiuj ne deklaris eksplicite estas manipulitaj de la defaŭlta
kazo en la ŝaltilon kaj devus esti jxetitaj.
>> Publiko: Do ​​1, 2, 3, kaj 4 estus n?
>> Dan Valoroj ke n povas esti.
Jes.
Yeah?
>> Publiko: Do ​​kiam vi havas ke [inaudible]?
>> DONAS: Vi devus presi malaltaj, kaj tiam estus presi mezo, kaj
tiam rompigxus.
>> Publiko: Kial ĝi presas mezo se [inaudible]?
>> DONAS: Do ĉio sub kazo antaŭ ripozon falas sub.
Do se oni presas estas sube kazo kia estas ĉi jenaj print.
Yeah?
>> Publiko: [inaudible]?
>> DONAS: Do tiu nombro estas nur aparta valoro ke tiu variablo
povas, ĉu ne?
Ĉu tio havas sencon?
Yeah.
>> Publiko: [inaudible]?
>> DONAS: Jes, kazo du devus presi meza kaj tiam rompu.
>> Publiko: [inaudible]?
>> Dan: Mi pensas iu?
Kio aliaj datumtipoj vi povas ŝalti super?
>> Publiko: Vi povas ŝanĝi super ĉiu datumtipoj.
Sed ĝi nur signifas io super signoj kaj ints kaj da tio, ĉar
se vi ŝaltanta super puntero ke vere ne havas sencon,
ŝaltanta super ŝarĝoj, se eĉ ni vi faros tion, ĉar de flosanta punkto
en precizeco, vi ankaux ne vere volas fari tion ĉiuokaze.
Do sufiĉe tre, nur ints kaj signoj kaj aĵoj tiel.
>> DONAS: Yeah, estas kiam vi havas eksplicitan valorojn, kiujn vi konas, mi pensas, ĝi povas esti
ke ŝaltilo estas fakte utila.
Bona?
OK.
>> Medio estas la gamo kiu deklarita variablo etendas.
Do en ĉi tiu malgranda bloko de kodo havas mi, estus plena de eraroj.
Kaj la kialo estas mi deklaris ĉi int i ene de la medio de ĉi por buklo.
Kaj tiam mi provas referenci ke i ekster ke por buklo medion.
>> Do esence, vi povas pensi pri atingo kiel ion ke vi rakontu
kun interne aro de frizita krampoj nur Ekzistas ene de tiuj buklaj krampoj.
Kaj se vi provas kaj uzi tiun variablon eksteren de tiuj buklaj krampoj, vi
ricevas eraron de la tradukilo.
Yeah?
>> Publiko: Do ​​ĉi tiu ne funkcias?
>> DONAS: Ĉi tio ne funkcias, jes.
Kordoj.
String estas char *.
Ili estas ekzakte la sama.
Ili estas nur montriloj al karakteroj.
Kaj neniu kordoj ke vi havas devus fini kun backslash nulo, kiu estas nur
c konvencio.
>> Ĝi nomiĝas NULL finilo.
Kaj NULL--
ĉefurbo N, ĉefurbo U ĉefurbo L, ĉefurbo L--
ne estas la sama kiel la NULL finilo.
Tiu estas montrilo.
Tiu estas karaktero.
Ili estas tre distinga.
Memoras.
Estos en la kvizo, verŝajne.
Mi ne vidis la kvizo.
Yeah?
>> Publiko: Do ​​NULL estas, ni diru, la puntero?
>> DONAS: Jes.
>> Publiko: Kion faras [inaudible]?
>> DONAS: Se diri, malloc nomas kiam ne havas sufiĉan memoron akiri
ajn grandecon vi petante, malloc revenos NULL.
Ĝi estas, esence, kiam funkcio estas supozis reveni puntero, vi
bezonas kontroli kontraŭ NULL ĉar NULL estas bela good--
estas, speco de, la rubo valoro.
Ĝi estas nulo ĝis punteros iri.
>> Whenever vi nomas funkcio, kiu resendas montrilo.
Vi tuj volas kontroli por certas ke tiu puntero estas NULL
ĉar NULL estas tre komuna.
Ĝi estas speco de rubo reveno.
Do se io ne iru dekstren, nur reveni NULL anstataŭe.
>> Publiko: [inaudible]?
>> DONAS: Jes, kaj tio ĉi.
>> Publiko: [inaudible]?
>> Dan Literumada ĝin kiel ĉi.
Ĝi estas la NULL finilo.
Estas minuskle N-U-L-L se vi literumas ĝin.
>> Publiko: Mi ĵus eliris revenis kaj provis ĝin.
Kaj se vi provas meti glitpunkta valoron en ŝaltilo, ĝi estos krias al vi
dirante aserto postulas esprimon de entjera tipo.
>> DONAS: Tie vi iru.
Sed jes, kio estas la demando denove?
>> Publiko: [inaudible]?
>> DONAS: Do ĉefurbo N, ĉefurbo U ĉefurbo L, ĉefurbo L estas reala c afero.
Estas la NULL pointer kaj volo nur esti traktita kiel tia.
Vi neniam provas kaj literumi la NULL karaktero kaj vidas neniun
alia maniero ol tio.
Yeah?
>> Publiko: Do ​​redonante char max aŭ io en la notoj, ĉu
korpigi la sama funkcio kiel [inaudible]?
>> Publiko: Do ​​vi raportante al reveni char max el getchar aux
kio ĝi estas?
>> Publiko: Yeah.
>> Publiko: Yeah, do la ĝenerala termino por ĉiuj tiuj aferoj
estas gardostaranto valoroj.
Do kiel reveni int max el GetInt kaj char max el getchar, estas
supozitaj esti kiel, bone, se tio estas reveni al ni,
iu iris malbone.
>> Por punteros, ni nur hazarde havas tiu gardostaranto valoro kiu ĉiuj
konvenas.
Kaj jen estas tio, vi revenos Kiam aferoj iras malbone.
Do char max estas kion ni uzas reprezenti ion
kiel NULL aŭ getchar.
>> Publiko: Do ​​se vi provas getchar, vi povus simple meti NULL?
Ĉu tio faras diferencon?
>> DONAS: Vi ne povus simple kontroli NULL.
Vi devus kontroli char max ĉar la reveno valoro de la funkcio estas
gravulo ne puntero.
Yeah?
>> Publiko: Tiu demando demandas por la kordo longo.
Ĉu tio inkluzivas la NULL karakteron?
>> DONAS: Ne
Kaj tio estas vere kiel kordo longo scias halti ĉar ĝi iras tra
via tabelo de signoj ĝis li vidas nula karaktero.
Kaj tiam ĝi estas kiel cxiuj Bone, mi faris.
>> Publiko: [inaudible] kvin?
>> DONAS: Saluton estus kvin.
Yep.
Do arrays estas kontinua blokoj de memoro.
Ili havas tujan aliron dirante la nomo de la tabelo kaj tiam, en krispa
krampoj ajn indicon vi deziras iri al, ili estas indeksita de nulo per
la longo de la tabelo minus 1.
>> Kaj ili estas deklarita de la tipo de la kion vi stoki en la
tabelo, la nomo de la tabelo, kaj poste sendepende de la grandeco estas de tiu tabelo.
Do tio estas char tabelo de longo ses kiu havas tiujn valorojn.
Yeah?
>> Publiko: [inaudible]?
>> DONAS: Yeah.
>> Publiko: [inaudible]?
>> DONAS: Se vi havas, kion tuj en la tabelo jam faris.
Do vi povus indiki ĉi anstataŭ kiel, diru, char, kion ajn la nomo de via
tabelo estas malplena krampoj egalas krispa prepari H komo E komo L komo L komo
Ho komo NULL karaktero kaj frizita krampoj.
Tio ankaŭ laboras kiel deklaro.
>> Publiko: [inaudible]?
>> DONAS: Tiam vi bezonas havi la grandeco jam faris.
>> Publiko: [inaudible]?
>> DONAS: Jes.
Ĉiuj righty.
Komandlinio argumentoj estas metodo ricevas enigon el la uzanto kiel
argumentoj por ĉefa.
Ĉefa prenas du argumentojn.
La nombro de argumentoj kiuj estas estante preter la komandlinion kaj
kordo vektoro aŭ ŝnureto tabelo ĉiu el la argumentoj.
>> Do se mi, ekzemple, nomas funkcio kiel punkto el 1 spaco, 2 spaco, tri,
argc estus 4.
Kaj argv 0 estus dot ekstere.
Argv1 devus esti 1.
argv2 estus 2. argv3 estus 3, en tiu konkreta kazo.
Yeah?
>> Publiko: [inaudible]?
>> DONAS: La lasta ero en la tabelo ĉar la tabelo estas longo argc plus
unu el argb, la lasta elemento estas NULL pointer.
Estas argc plus 1.
Do, en la kazo kiun mi ĵus diris, estus argv 0 estas skalara ekstere.
argv 1 estas 1 argv2 estas 2. argv 3 estas 3.
argv 4, kiu estas unu granda ol argc estus NULL.
>> Kaj tio estas la NULL pointer.
Jes.
Kaj tio estas ĉar kordo estas oni char stelo estas puntero.
Do ĝi devas esti la sama tipo.
Yeah?
>> Publiko: Du demandoj.
Do unu, kio estas la diferenco inter tiu kaj GetString aliaj ol unu tipo
en la uzanto motoro?
Kaj du, estas stokita ene via freŝa memoro?
Do kiel, GetString farus esti [inaudible]?
>> DONAS: Kie estas stokita?
Mi ne scias, kie ĝi estas stokita.
>> Publiko: Do, fakte, oni scias kiom ajn funkcii vi nomas estas argumentoj
estas stokitaj en la pilo?
Do argc kaj argv estas argumentoj por ĉefa kaj ili estas sur la stakon, aŭ vere
nur super kio vi pensas tiel la komenco de la stako.
Kio estis la alia parto de la demando?
>> Publiko: Do ​​kio estas la [inaudible]?
>> DONAS: Yeah, nur alimaniere de iĝi enigon el la uzanto.
Ĉi onia iomete pli eficiente kaj ĝi estas handier por skriptoj ĉar vi
povas simple pasi argumentojn por via ĉefa funkcio anstataŭ devi atendi
por uzantoj, se vi ne havas ajnan uzantoj.
>> Publiko: Kaj jes, iru kordoj estus [inaudible].
Estus stoki la aĵoj vi bezonas.
>> DONAS: Yeah?
>> Publiko: [inaudible]?
>> DONAS: Jes, argv 0 ĉiam inkludas la dot slash de la funkcio alvokon.
Yeah?
>> Publiko: [inaudible]?
>> DONAS: Jes, ĉiu el la argumentoj estas finiĝis NULL karaktero ĉar ili
estas kordoj.
>> Publiko: [inaudible]?
>> DONAS: Jes, argv argc estas NULL pointer.
>> Publiko: [inaudible]?
>> DONAS: Oh yeah.
Yeah, bedaŭras.
>> Publiko: Tiel [inaudible]?
>> DONAS: Do la demando estas se vi havis la komandlinio dot slash punkto el 1, 2,
farus la nombro de komandlinion argumentoj esti du aŭ devus esti tri?
>> Publiko: mi kredas ke ne vere gravas.
Mi emas diri, ho, vi ne pasas ajna komandlinio argumentoj kiam,
Evidente, vi nomas la funkcion.
Do mi emas vocalmente ekskludi la funkcio de la komanda linio
argumentoj kvankam estas inkluzivita en argv.
>> DONAS: Sed se ĝi estis test--
yeah-- kaj ankaŭ se vi diros ion kiel argc egalas 3,
Vi estas en sekura staranta.
Yeah?
>> Publiko: [inaudible]?
>> Dan: Mi pensas, se anstataŭ nomi ĉi en argc kaj argv kordo krampoj
sed konservis la samajn tipojn kaj simple nomas ili iun malsama kiel
kaj b, estus ankoraŭ funkcias?
Kaj ĝi ankoraŭ funkcios, vi just--
anstataŭ uzi argc-- Vi ŝatus uzi kaj b.
Yeah?
>> Publiko: [inaudible]?
>> DONAS: Do la demando estas GetString estas tuj stoki memoron en la ruino
ĉar GetString estas char *.
Ĝi stokas memoro en la havaĵo, ĉar ĝi flamo nun malloc ene la efektiva
efektivigo de GetString.
OK, movante sur.
>> Sekureco.
Do por esti vere sekura vi fidi neniun kaj vi permesos neniu aliro al ajna
de via informo, kiu estas kial ĉiuj konstruas siajn proprajn maŝinojn,
iliaj propraj operaciumoj, ĉiuj iliaj programoj de nulo, kaj evidente
ne konekti al ajna alia maŝinoj tra la interreto.
Do komputiloj estas necerta.
Ili vere estas.
Ni devas fidi aliajn homojn.
>> Kaj la ideo de sekureco estas ke vi estas klopodi limigi la kvanton de
fidon, kiun vi bezonas.
Kaj unu el la rimedoj vi faros tion Estas tra ĉifriko.
Ĉifriko estas, esence, ni havas sekretojn.
>> Kelkfoje ni devas pasi niajn sekretojn tra, ni diru, la interreto aŭ
aliaj aferoj.
Kaj ni ne volas homoj scii tiujn sekretojn.
Do ni ĉifri niajn sekretojn en vojo ke ni esperas neniu povas diveni.
>> Do ni used--
tra la kurso de ĉi class--
aĵoj kiel Cezaro kodita kaj [Inaudible], kiuj estas ambaŭ tre, tre
nesekura manieroj kodi aĵoj.
Ili estas facile diveni kion ili estas kaj kion via sekretoj estas.
La reala mondo uzas multe pli komplika ĉifrado skemoj.
Kaj ni ne eniros en multe pli ol tio.
>> Depuración.
GDB estas la plej bona.
Mi iras emfazi ĉi denove.
Uzu GDB tutan tempon ĉiun tempo vi havas problemon.
Komandoj ke estas utilaj en GDB estas rompi, kiuj pasas ĉu linion
nombro, funkcio nomo, esence kie en via kodo vi volas halti,
kaj povi preni kontrolon.
>> Print prenas variablon kaj presas el kion ajn tiu variablo estas en tiu
punkto en via ekzekuto.
Sekva movas vian ekzekuto kune unu paŝo.
Kaj treti paŝoj ene funkcio en via ekzekuto.
>> Aliaj aferoj estas kuri, kiu estas kiel vi fakte kuri via kodo.
Continue prenas ĉiujn paŝojn bezonataj por atingi la najbaran rompo punkto.
Kaj estas multaj, multaj aliaj.
Rigardu ilin.
Ili estas grandaj.
Yeah?
>> Publiko: [inaudible]?
>> DONAS: Jes, kio estas erarserĉilo.
Do erarserĉilo estas programo kiu permesas elpurigi vian programon.
Tio ne estas programo kiu trovas insektojn por vi, kvankam tio estus granda.
>> Kaj lasta por mi estas serĉo.
Do la tipoj de serĉo kiu parolis proksimume en tiu klaso estas lineara serĉo,
kio estas ĝuste, ke vi rigardu tra ĉiu ero de la serĉo spaco, unu
ero en tempo, ĝis vi trovi kion vi serĉas aŭ ĝis vi atingos
la finon de via serĉo spaco je kiu atentigi vin diras ke vi ne povis trovi
la elemento kiun vi serĉis.
Kaj ĉi tio portas en bona konstanta tempo, kio estas 0 de 1 kaj ĉe plej malbona linearaj
tempo, kio estas 0 de n.
>> Duuma serĉo, kiu bezonas sordida elementoj.
Vi iras al la mezo de via elementoj, vidi se la ero vi serĉas
estas pli granda aŭ pli malgranda ol la elemento ke vi estas en la mezo.
Ĝi estas granda, vi diras, ke la fundo de via serĉo spaco estas via
aktuala situo, meze, kaj vi restartigu la procezo.
Se ĝi estas pli malgranda, vi rigardas diri ke the-- yeah, kio estas supre?
>> Publiko: [inaudible]?
>> DONAS: Jes.
Ajna speco de varo kiun'S instruis en La klaso estas bela ludo por la testo.
>> [Ridado]
>> DONAS: Kaj la fakto ke vi ne havis fari ĝin por problemo aro, ĝi estas bela
ludo por la testo.
>> Publiko: Ĉu ni iru sur ĝi kiel to--
>> DONAS: Estos transiris.
>> SPEAKER 2: La reala kodo [Inaudible] estas study.cs50.net.
Do se vi rigardas la praktikon problemo en la merge speco paĝo de
study.cs50.net, tie estas la kodo por implementar kunfandi varo.
Do vi ne devos implementar ĝin mem ĉinokte.
Sed certigi vin kompreni iom ol enmemorigi ĝin.
>> Publiko: [inaudible]?
>> SPEAKER 2: La merge speco paĝo sur study.cs50.net, estas praktiko
problemo kiu, se vi premas per problemo, je la fino estas
solvon, kiu estas la merge speco efektivigo.
Sed certigi vin kompreni anstataŭ nur enmemorigo ĝi
aŭ kopiante ĝin.
>> Publiko: Kaj perfekte valida problemo por la ekzameno estus
iu kiel ĉi tie estas listo.
Kion tio lerta aspekti post unu paŝo de selektadoj varo aŭ
inserción varo aŭ kion ajn.
Unu plenan iteración de la listo.
Do eĉ se vi ne finas bezonante kodo por tio, vi bezonos por kompreni ĝin
sufiĉe por scii ke tuj esti modifi ĉi tabelo.
>> DONAS: Estas tio por mi.
>> [Aplaŭdo]
>> LUCAS: Hey ĉiuj.
Mia nomo estas Lucas.
Mi iras paroli pri rekursio, ĉiuj la varoj kiujn ni lernis, kaj
iom el ĉiuj punteros.
OK?
Do unue: rekursio.
Kion ĝi volas diri ke funkcio estas komputebla?
>> Publiko: Calls mem.
>> LUCAS: OK, nomitaj mem, jes.
Tiel kiel ĉi bildo, ekzemple.
Estas kiel la bildo interne de pentraĵo kaj tiel plu.
Do ekzemple, vi povas have-- Dan kiuj parolis pri duumaj serĉo.
Unu manieron en kiu duuma serĉo estas rikura estas la fakto, ke vi estas
provante trovi nombro.
Do vi iras al la mezo.
Kaj tiam vi kontrolu se la nombroj ne en la maldekstra kaj la dekstra.
>> Kaj tiam, se vi trovu la nombro estas tuj estos sur la maldekstra, ĝi estas la sama
aĵo kiel faras la serĉon denove sed ĝuste je la maldekstra de la listo.
Do jen kiel ĝi sonas kiel ĝi estas rikura.
Tial do vi uloj havas rekursie solvo por merge varo.
>> OK, do jen ekzemplo.
Do diru ke mi volas elekti ĉiuj nombroj de 1 al n.
Mi povas rimarki, ke la sumo de la n nombro estas n plus n minus 1 ĝis 1.
Sed tiam, se mi rigardas n minus 1 pli n minus 2 plus 1, tio estas la sama
aĵo kiel sumante nombroj ĝis n minus 1.
Do mi povas diri la sumo de egala sumo egalas n plus la sumo de n minus 1.
Ĉu tio havas sencon?
>> Kaj mi ankaŭ havus ion alian nomata la bazo kazo, kiu estas kiu
la sumo de la nombroj ĝis nulo devus esti nulo.
Do kiam mi atingas la nombron nulo, mi ĉesas rakonti.
Ĉu tio havas sencon?
>> Do jen ekzemplo de kiel Mi povas apliki tion.
Do mi havas tiun funkcion en iuj.
Tio bezonas entjero n.
Do jen mi unue kontrolu se n estas malpli aŭ egalas al nulo.
Do se estas malpli aŭ egalas al nulo, mi reveni nulo, kiu estas nia bazo kazo.
Alie, mi povas simple reveni n plus la sumo de la ciferoj de
unu al n minus unu.
Sencon?
OK.
>> Do jen kiel tio aspektas.
Vi havas sumo de 2 egaluloj 2 plus la sumo de 1.
Kaj iuj de 1 estas 1 plus la sumo de 0, kio estas 0.
Sencon?
Do se ni rigardas la stako de via programo, tiu estas kio similas.
>> Unue, ni devas la ĉefan funkcion.
Kaj tiam la ĉefa funkcio nomata sumo 2.
Kaj tiam sumo 2 tuj diros, ho, sumo 2 egalas 2 plus la sumo de unu.
Do mi aldonos sumo de 1 al la stako.
Kaj la sumo de 1 tuj voki sumo de 0, kiu ankaŭ tuj estos aldonita
al la stako.
Kaj tiam ĉiu el tiuj kiuj estas sur supro de alia devas reveni
antaŭ la aliaj aĵoj povas plu iri.
>> Do ekzemple, tie, sumo de 0, unue, tuj revenos 0.
Kaj tiam elekti sumo de 1.
Tiam sumo de 1 tuj reveni 1 al sumo de 2.
Kaj fine, sumo de 2 tuj reveni 3 ĉefaj.
Ĉu tio havas sencon?
>> Ĝi estas vere grava por kompreni kiel la stako laboras kaj provi
vidi se ĝi faras senton.
OK, do ordigo.
Do kial ordiga grava, unua el cxiuj?
Kial ni zorgas?
Iu ajn?
Donu al mi ekzemplon?
Yeah?
>> Publiko: [inaudible].
>> LUCAS: Yeah, OK.
Do vi povas sercxi pli kompetente.
Tio estas bona maniero.
Do, ekzemple, ni havas multe da aferojn, vere, en niaj vivoj kiuj
estas ordo.
Ekzemple, vortaroj.
>> Estas tre grave havi ĉiujn vortoj ian ordon ke ni
povas aliri facile.
Do tio, kion li diras.
Vi povas serĉi pli kompetente.
Pensu kiel malfacile estus havi vortaro en kiu la vortoj estas en
hazarda ordo.
Vi devos rigardi, sufiĉe, ĉiu unuopa vorto, ĝis vi trovos la
vorto, kiun vi serĉas.
>> Se vi uzas Facebook ankaŭ, kiam vi rigardas viaj amikoj, vi estas
tuj vidos ke Facebook metu vian proksima amiko estas sur supro de la aĵoj
ke vi ne parolu kun tiu tiel.
Se vi iras la tutan vojon al la malsupro de Via amiko listo, vi tuj vidos
homoj kiuj vi probable eĉ ne memoru, ke vi estas amikoj kun.
Kaj tio estas ĉar Facebook specoj viaj amikoj bazita sur kiom
fermi Vi estas por ili.
>> Do organizi datumojn.
Ankaŭ Pokemon.
Do vi vidas, ke ĉiuj pokémons havi numerojn.
Kaj tio estas kiel facila vojo de aliro datumoj.
>> Publiko: Aliri Pokemon.
>> LUCAS: Yeah.
>> Publiko: [inaudible].
>> LUCAS: Yep.
OK, do elekto varo.
Selektado varo tuj elektu malgranda Unsorted valoro de lerta ĉiu
tempo en ĉiu ripeto.
Ĝi estas speco de kiel la varo kiun vi faras en via kapo kiam vi provas
ordigi liston en mano.
>> Esence, ĉiuj vi estas vi rigardas por la plej malgranda nombro.
Vi metis ĝin en la ordo listo.
Kaj tiam vi serĉas la sekvanta malgranda nombro.
Kaj tiam vi observos fari tio kaj tiel plu.
>> Do selektado varo estas esence vi elektu ĉiufoje pli malgranda
Unsorted valoro.
Metis fine de la ordo parton de la listo.
Kaj observu fari tion.
Do ni rapide vidi kio tio aspektas.
Do jen la ordo kaj Unsorted listo.
>> Do por la ordo de lerta, ĝi estas komence malplena.
Kaj poste mi iros elektu malgranda nombro ĉi tie, kiu estas 2.
Do mi ricevas la numeron 2 kaj Mi metos en la fronto de la listo.
Kaj tiam mi serĉos la sekvanta malgranda elemento, kiu estas 3.
Do mi metis ĝin ĉe la fino de la ordo listo.
Kaj tiam mi gardas fari tion.
Mi trovos 4 kaj metis ĝin ĉe la fino.
Trovi 5 kaj metis ĝin ĉe la fino.
>> Kaj rigardu: cxiuj el tiuj tempoj kiuj Mi jene meti ĝin ĉe la fino,
esence, interŝanĝante du valoroj.
OK?
Kaj tiam la lasta, vi simple havas pli elemento.
Do ĝi estas jam ordo.
>> OK, do inserción varo.
Insertion speco vi tuj havos ankaŭ ke afero havi ordo kaj
oni Unsorted listo.
La sola afero estas ke ĉiu tempo vi aldoni elementon al la ordo
listo, vi nur elektu la elemento kiu Estas antaŭ la Unsorted listo.
Kaj tiam vi tuj trovos kion pozicio devus esti en la ordo
parton de la listo.
>> Vidu kion ĉi estas tiel Tio faras pli sentita.
Do komence, ekzemple, mi provas enigi la numeron tri en la
ordo parton de la listo.
Do la listo ne havas ion.
Do mi povas nur meti la numeron 3.
>> Nun, mi volas aldoni la numeron 5 al la ordo parton de la listo.
Do mi rigardas la nombro 5.
Mi rimarkas, ke ĝi estas pli granda ol 3.
Do mi scias, ke ĝi devas esti post 3.
Do mi metis 3 kaj 5.
>> Tiam mi volas enmeti la numeron 2.
Mi rimarkis, ke la nombro 2 estas fakte daŭri tiam ambaŭ 3 kaj 5.
Do mi efektive devas meti ĝin ĉiuj vojon en la komenco de la listo.
Do mi devas, speco de, ŝanĝi la tutan elementoj en la ordo listo do mi povas
cedu al la numero 2.
>> Tiam mi vidas la numero 6.
Mi vidas, ke gxi estu post 5.
Do mi metis ĝin tie.
Kaj fine, mi rigardas la numero 4.
Kaj mi rimarkas devus esti inter 3 kaj 5.
Kaj tiam mi metos ĝin tie kaj movo ĉiuj aliaj elementoj.
Sencon?
>> Bobelo Ordigi.
Do bobelo varo estas esence kion vi tuj do-- ni nomas ĝin bobelo
varo ĉar vi iros tra la list-- ĝi estas fakte pli bone se mi simple montri
Vi ŝatus this--
kaj vi tuj kompari najbaraj nombroj.
Kaj vi tuj interŝanĝu siajn pozicioj se ili ne estas
en la dekstra ordo.
>> Do esence, kio tuj okazi estas tie, ekzemple,
vi havas la 8 kaj 6.
Vi scias ke la ordo ordo fakte 6 kaj 5, dekstra?
Do vi iras por interŝanĝi ordoj.
Tiam mi vidas 8 kaj 4 tie.
Kaj Mi faros la samon.
Mi interŝanĝu denove.
Kaj fine, 2 kaj 8.
Mi ankaŭ interŝanĝi ilin.
>> Ĝi nomiĝas Bobelo Ordigi ĉar post ĉiu el tiuj ripetoj, efektive,
la plej granda nombro en la listo ricevas ĉiuj la vojon al la fino de la listo.
Ĉu tio havas sencon?
Ĉar ĝi gardas interŝanĝante ĝi kaj movas ĝin dekstren.
>> OK, do tio estas la dua ripeto.
Ĝi estus la sama afero.
Mi faros unu swap kaj tiam la lasta.
Mi, ke ne ekzistas svopoj kaj la listo estas ordigita.
Do Bobelo Ordigi, ni esence konservi irante tra la listo kaj interŝanĝante
tion ĝis mi rimarkis, ke mi ne faros ajna svopoj faranta ke ripeto, kiu
signifas ke listo estas jam ordo.
Sencon?
>> Ni parolu iomete pri rultempo.
Do vi uloj memori Big Ho, Omega, kaj Theta?
Yeah?
OK, kio estas Big O, unua el cxiuj?
>> Publiko: [inaudible].
>> LUCAS: Yeah, ĝi estas nomata plej malbona kazo ekzekuto, kiu signifas nur ke ĝi estas
kiom vi atendas la programon preni kuri.
Kiel, en terminoj of--
en ĉi case-- n.
La nombro de elementoj en la lerta en la plej malbona kazo.
Kiel, en la plej malbona ebla kazo.
>> Do por Bubble Ordigi, ekzemple, ni havos Big O de n kvadrato.
Kial ni havas tion?
Kial Bobelo Ordigi Big O n kvadrato?
>> Publiko: [inaudible].
>> LUCAS: Yeah, do la plej malbona kazo estos ke mi devos fari n ripetoj.
Do ĉiu el la ripetoj tuj alporti la plej granda ero al la fino
el la listo.
Do la plej malbona kazo estas, ke mi havas fari ecx n fojojn.
Kaj por cxiu el tiuj fojoj mi devas faru n svopoj ĉar mi devas kompari
ĉiu du elementoj.
Tial do ĝi estas n kvadratoj ĉar ĝi estas n × n.
>> Tiam, selektado varo estas ankaŭ n kvadrata ĉar, ĉiu ripeto, mi devas
rigardas ĉiu unuopa ero en la listo.
Kaj poste trovi la plej malgranda, kio signifas, ke mi devas
trarigardi n elementoj.
Kaj mi devas fari tion n fojojn ĉar Mi devas elekti ĉiuj la n elementoj.
>> Inserción varo estas ankaŭ n kvadrato ĉar la plej malbona kazo scenaron volo
esti, oni, mi devas enmeti n nombroj, dekstra?
Do mi jam scias ke mi iros havi n ripetoj.
Sed por ĉiu el tiuj numeroj, se mi rigardi ĉiujn numerojn en
la ordo listo kaj meti la tutan vojon en la fronto, ke estos n kvadrato
ĉar estos n × n denove.
Sencon?
Kio pri omega?
>> Publiko: [inaudible].
>> LUCAS: Ĝi estas la plej bona kazo scenaro.
Tiel estas kiel en multaj fojoj por ordig, la plej bona kazo scenaro estas
kiam la listo estas jam ordo.
Do vi ne vere havas fari nenion.
Bobelo Ordigi havas la pli bonan kazo scenaro de n.
Ĉu vi uloj scias kial?
>> Publiko: [inaudible].
>> LUCAS: Yeah, se vi konservi trako de ĉu datumoj porcio havis ajnan svopoj aŭ
Ne, se vi havas iun kiel aro al vera, se oni iteracion, se la
listo estas jam ordo, esence, kio okazos estas mi tuj
provu interŝanĝi ĉiu du najbaraj elementoj.
Mi tuj vidas, ke ne estas svopoj.
Kaj mi simple reveni tuj.
>> Do signifas ke mi ĵus devis iru tra la listo unu fojo.
Do estas n ĉar mi aspektas je n elementoj.
Kial selektado speco n akordi?
>> Jes, eĉ se la listo estas ordigita, por ĉiu ripeto de selektado speco, mi
devas elekti la minimuman elementon.
Do tio signifas ke mi havas ekstere rigardi en ĉiuj elementoj en la Unsorted
listo kaj trovi la minimuma por ĉiu ripeto.
Ĉu tio havas sencon?
>> Kaj inserción glavo n ĉar en la kazo ke mi provas enmeti la
nombroj kaj ĉiu el la nombroj, kiam mi provu enmeti ilin, mi vidas, ke oni
estas en la dekstra pozicio.
Mi ne devas iri kontroli ĉiujn aliajn nombroj en la Unsorted listo.
Tial do tio estos n.
Sencon?
Kaj kio estas theta?
>> Publiko: [inaudible].
>> LUCAS: Kion bedaŭras?
Diru ĝin denove.
>> Publiko: [inaudible].
>> LUCAS: Ekzakte.
Do vi povas vidi ke nur selektado stokitaj en Merge speco havi thetas.
Kaj tio estas ĉar vi havas nur theta se ambaŭ Granda O kaj Omega estas la sama.
OK.
Kaj fine, kunfandi varo en log n.
>> Kaj tiam, kiel Dan diris, Kunfandi speco estas speco de kiel la sama formo kiu
vi faras binaran serĉon.
Do vi akiras la listo.
Kaj vi tuj tranĉis en duono.
Kaj tiam vi tranĉis ilin en malgrandaj duonoj.
Kaj tiam vi kunigi ilin.
Vi uloj memori ke, dekstra?
OK, kiel Li diris.
>> OK, punteros.
Do kio estas puntero?
>> Publiko: [inaudible].
>> LUCAS: An adreso.
OK.
Mi scias, ke David montras faskon de videos de Binky kaj aĵoj montrante
reciproke.
Sed mi ŝatas pensi de punteros kiel simple adreso.
Do estas variablo kiu tuj stoki adreson.
>> Do estas nur tiu speciala variablo ke estas kvar bajtoj longa.
Memoru, ke puntero al nenio estas ĉiam kvar bajtoj longa por nia 32-bitoj
Maŝino tiel la kazo la aparato.
Kaj ĝi simple havas la situo de variablo ene de ĝi.
>> OK, do tie estas tiu memoro, esence.
Do ĉiu bloko de memoro efektive havas stampo, kiu estas la adreso de la
slotty memoro.
Do tio signifas ke mi povas havi puntero indikus
iu el tiuj adresoj.
Do la kialo kial ni uzas punteros estas se mi devas memori la situo
ke specifa variablo estas memoro.
>> Kaj vi uloj memoras ke unu el tiuj kazoj estis se mi havas funkcion
se mi vere volas ke vi swap por reelaj nombroj, mi reale
devas sendi puntero.
Ne la variablo.
Ĉu vi uloj memori tion?
La diferenco between--
kio estas la nomo?
Nomante de valoro kaj vokas per aludo, dekstra?
>> OK, yeah.
Do nomi por valoro.
Kiam vi simple sendu variablo al funkcii vi simple sendante valoro.
Do vi vere sendos kopion de la variablo.
Kaj via programo ne povis zorgi malpli alproksimigas de se la sama variablo reale
faras kopion.
>> Kaj nomante por referenco signifas ke Mi vere sendas kopion de la
Pointer al tiu variablo.
Do signifas ke mi sendos la situo de tiu variablo.
Do sensas mi havas la situo de la variablo, kiam mi vokas la funkcion
kun montriloj, mi povis reale ŝanĝi la datumoj kiuj estis ĉefa.
Sencon?
>> Kvankam, la puntero estas kopio, la montrilo ankoraŭ havas la realan adreson de
la variablo kiu mi deziras ŝanĝi.
Sencon?
>> Do krei punteros.
Memoru, la puntero ĉiam la tipo ke ĝi estas indikante
al kaj tiam stelon.
Kaj tiam vi metas la nomon.
Do memoru, ke kiam ajn vi ajn stelon, estas kiel puntero al
ke cxio variablo tajpi, ke vi havis.
>> Do jen en stelo, ekzemple, estas puntero kaj entjero.
Kaj tiam char stelo estas puntero char stelo ks.
Yeah?
>> Publiko: Kio se ni havas puntero al n star x.
Mi scias, kiu kreas puntero al x.
Ĉu ĝi ankaŭ deklaras x entjero?
>> LUCAS: OK, do kiam vi diras n stelo x, vi ne kreante puntero al
variablon x.
Vi kreante puntero nomis x.
>> Publiko: [inaudible].
>> LUCAS: Do kiam mi diras n stelo x, mi dirante, hey, en memoro, mi tuj
akiri unu el ĉi tiuj tri skatoloj.
Kaj mi tuj diros, ke tiu tuj estos x, kiu estas
tuj estos montrilo.
Kaj ion interesan pri punteros estas ke ni diras ke ili havas
4 bajtoj por 32-bita maŝino.
Kaj la kialo estas ĉar 4 bajtoj estas 32-bitoj.
>> Kaj maŝinoj kiuj estas 64 bitoj efektive havas punteros adresoj
ke estas 64 bitojn longa.
Do ĝi nur signifas ke la grandeco de la adresoj en la maŝino estas malsama.
>> Do referenco kaj Dereferencing.
Ekzistas du operatorojn vi uloj devus memori.
La unua estas signo.
La dua estas stelo.
Ne konfuzita de tiu stelo kaj ĉi STAR ĉar memoru ke, en
tiu kazo, vi devas n stelon.
>> Estas kvazaŭ tutan aferon kune.
Mankas n spaco stelo.
Do tio signifas ke ĝi estas la tipo.
Memoru, ke kiam vi havas la ŝanĝiĝema stelo, vi estas
parolante pri la tipo.
>> Kiam vi havas nur stelo kaj tiam la nomo de la variablo, ĝi signifas ke
vi dereferencing la montrilo, kio signifas ke vi rigardas la
pointer, trovanta la adreso estas indikante, irante al tiu adreso,
kaj rigardante ĉiam vi havas tie.
Do mi diru miaj studentoj, ke kiam vi havas stelo, vi devus pensi ke ĝi estas
la mallongigo de enhavo de.
>> Do se vi havas puntero kaj vi fari stelo montrilo, estas la
enhavo de la montrilo.
Do vi iras ajn ĝi estas indikante kaj rigardu la konstanta enhavo.
Kaj-signo estas la sama aĵo kiel adreso de.
>> Do se mi havas ŝanĝiĝeman a-- kiel, ni diri ke mi faris int a egalas 3--
se mi volas trovi la adreson de tiu variablo memoro, mi povas simple fari
signon al.
Do estas adreso de.
Sencon?
>> Do jen ekzemplo.
Ĉi mankas int b kaj int c.
Do int a egalas 3 signifas ke Mi tuj iros al la memoro.
Kaj mi tuj trovos fendo kaj metis la numero 3 tie.
>> Kaj tiam int b egalas 4.
Mi tuj faros la samon.
Iru al la memoro kaj metis nombro 4 en unu el la skatoloj.
Kaj int egalas 5.
Trovu alian skatolon kaj metis numeron 5.
>> Do kio estas tiu linio faranta ekstere? n stelo pa egalas signon al.
Do unue: n stelo pa.
Kio ĝi faras?
>> Publiko: [inaudible].
>> LUCAS: Yeah, do n stelo pa, unue, deklaras puntero nomis pa.
Kaj tiam ĝi estas atribuante la valoro de ke puntero al la adreso de.
Do-simbolo al.
Tiam, se mi faras stelo pb, kio estas stelo pb?
>> Ho, pardonu.
Ĉi tio ankaŭ mankas. n stelo pb.
Mi volas diri stelo pc.
Mi tiom pardonpetas.
Ĝi estas la sama aĵo.
Sed nun mi estas bona ar kreante montrilo al b kaj tiam puntero al c.
Yeah?
>> Publiko: [inaudible]?
>> LUCAS: Jes.
Do se vi iras al la memoro kaj vi iros al la skatolo kiu estas designador por pa,
vi fakte tuj vidu adreson de.
OK?
Yeah?
>> Publiko: [inaudible]?
>> LUCAS: Yeah, puntero estas adreso.
Neniam forgesu tion.
Estas kiel la plej grava parton pri punteros.
Ekzistas stokante kaj adreso iu variablo.
Io alia?
Ajna alia demandoj?
OK.
>> Do Pointers kaj arrays.
Memoru ke kiam mi faras int tabelo 3, esence, kion mi faras estas mi, afabla
de, deklarante en puntero.
Do tabelo estas speco de kiel puntero al specifa loko en memoro en kiu mi
asignitaj tri fendojn por entjeroj.
Ĉu tio havas sencon?
>> Do kiam mi faros int tabelo 3, kia mi estas faras, esence, estas kreante tri
slots en memoro.
Do mi simple trovos tri fendojn en memoro.
Do se mi faras, tiam, stelo tabelo, ĝi esence signifas la enhavon de tabelo,
kio signifas ke mi viŝos la montrilo, mi iras al tiu loko, ke ĝi estas indikante,
Kaj mi metis la nombro unu.
>> Kaj tiam, se mi faras stelo tabelo plus 1, tio estas la sama afero kiel fari tabelo
krampoj unu, kiu signifas nur mi iru la loko kiun ĝi estas fingromontrante.
Kaj tiam la plus 1 fabrikas mi ŝanĝos pozicion.
Do mi iros al tiu pozicio, efektive, kaj metis la numeron du.
>> Kaj poste, fine, kiam mi faras tabelo plus 2, mi iras al kie
tabelo la montradon ĉe.
Kaj tiam mi movi al memoro blokoj.
Kaj tiam mi metis la numero tri ĉi tie.
Yeah?
>> Publiko: Do ​​stelo tabelo estas simple dirante la unua punkto.
Kaj vi povas aldoni 1, nur ĉar ni estas nur vere
referenco kiu unua adreso.
>> LUCAS: Yeah.
Kial ni, ekzemple, diri tabelo 0, tabelo 1, kaj batalarangxis 2?
Mi diris: Kial vi faras 0, 1, 2, 3 anstataŭ 1, 2, 3?
Unu el la kialoj estas: unu, komputilo programistoj preferas komenci
rakonti de 0.
Du estas ĉar kiam vi fari tabelo 0, ĝi estas la sama afero kiel fari tabelo
plus 0, kiu signifas mi iru tiu pozicio, kaj mi ne
skip ajna memoro blokoj.
Do mi ne movi ajnan memoron blokoj.
Yeah?
>> Publiko: [inaudible]?
>> LUCAS: Do ŝi demandis, kio estas la diferenco inter fari
tiu aŭ fari malloc.
Unu el la diferencoj estas ke int tabelo 3 estas kreante
tabelo sur la stako.
Kaj kiam mi faras malloc, ĝi kreas sur la monteto.
Ĉu tio havas sencon?
>> Do kiel malloc reale funkcias?
Do kial ni ankoraŭ bezonas uzi malloc?
Via tradukilo speco de figuroj el ĉiuj la variabloj kiujn vi deklaris.
Li kreas spacon por ĉiuj de ili en la stako.
Do ĉiuj viaj variabloj tuj esti ie en la stako.
Do jen la medio variabloj.
>> Do esence, spaco por tiuj variabloj en memoro estas asignitaj je
kompili tempo.
Do tio signifas ke via komputilo havas scii ĉiujn tiujn variablojn
antemano.
Ĝi ne bezonas scii kion valoro vi tuj metis en ili.
Sed bezonas scii multan memoron vi bezonos.
>> Sed nun diru ke, ekzemple, vi kreas tabelon aŭ preni
kordo ke vi prenas de la uzanto.
Vi ne scias kiom longe la kordo tuj estos, ekzemple.
Do vi ne scias precize kiom da memoro blokoj vi malŝparas, dekstra?
>> Do ne vere havas sencon por vi diri metis 100 karakteroj.
Kaj tiam kion se la uzanto skribas 150?
Vi tuj estos ŝraŭbita.
>> Do esence vi ne povas esti certa pri kiom multan memoron vi bezonas atribui
kiam vi kompili la programon.
Vi nur scias ke en tempo de ekzekuto.
Tial do vi havas la amason.
Do la amaso tuj havos memoro ke vi atribuante dum la
daŭro de la programo kuras.
>> Do esence, kiam vi faras malloc, kio vi faras estas atribuo memoro ĉe
ekzekuto, kio signifas, ke vi estas decidi ĝuste en tiu momento, ke vi
devus havi tiun memoron.
Do tio estas kiam vi atribuante ĝin.
Ĉu tio havas sencon?
>> Do memoru, la stako havas variabloj kiuj estas kreitaj sur kompila tempo.
Kaj tiam la amaso havas variabloj kiuj estas kreitaj kiel vi iri
kun malloc, ekzemple.
>> Publiko: [inaudible]?
>> LUCAS: Do GetString estas irante voki malloc.
Lasu min paroli malloc kaj Mi klarigos GetString.
Do malloc estas la sama aĵo kiel memoro atribuo.
Do tuj rezervu memoro sur la monteto.
Kaj tuj revenos puntero al kie tiu memoro estis asignitaj ĉe.
>> Do kiam vi do--
tie example--
n stelo montrilo.
Kaj tiam puntero egalas malloc grandeco de colo fojojn 10.
Mi kreante montrilo.
Kaj tiam mi atribuante ke puntero al la valoro de la montrilo ke malloc
donas min.
>> Do mi demandas malloc povas destini spaco por 10 entjeroj.
Tion ĝi estas jene.
Kaj malloc donas min al Pointer al tiu loko.
Sencon?
OK.
Mi Kaj GetString estas, esence, farante nomas malloc tiel vi povas destini
memoro dum ekzekuto.
>> Ĉiam memoru kontroli por null ĉar malloc tuj revenos nula
se ĝi ne povas atribui memoron.
Diru ke vi petu ridindan kvanton da memoro.
Via komputilo ne tuj estos povis atribui ke multe.
>> Do malloc estas ĝuste tuj reveni nula.
Do ĉiam memoros por kontroli se la puntero ke vi ricevis de malloc estas
nulan aŭ ne ĉar, se ĝi estas, eble vi esti dereferencing puntero kaj
kaŭzante flanko faŭltoj.
Kaj fine, ne forgesu via libera memoro.
>> Malloc kreas memoro en la havaĵo.
Kaj vi devas liberigi la memoron antaŭ la programo finiĝas.
OK, nenio por mi.
Pardonu, Rob.
Dankon.
>> [Aplaŭdo]
>> LUCAS: Ajna lastaj demandoj antaŭ Rob venas?
Neniu?
Yeah?
>> Publiko: Mi ne vidis ĉi tiu linio.
Ĉu vi alŝutis ĝi ankoraŭ?
>> LUCAS: Mi pensas Dave estas alŝuti ĝin frue.
>> DAVE: Ĝi estos eldonita.
>> LUCAS: Estos enreta.
>> Publikon: ĝi dependas.
>> LUCAS: Ĝi dependas?
OK.
Yeah?
>> Publiko: [inaudible]?
>> LUCAS: Jes, vi devus liberigi ĉiujn memoro kiu estas metita en la havaĵo.
>> Publiko: [inaudible]?
>> LUCAS: Jes.
Ajna tempo vi havas kulturon malloc, Vi devus havi kulturon liberaj
kiam vi ĉesas uzi tiu variablo.
Do malloc kaj libera estas ĉiam kune.
Iliaj plej bonaj amikoj.
Yeah.
Rob?
>> ROB: Mi iros rapide.
Kaj ankaŭ la video estos metita supren.
Mi havas la mic sur.
>> OK, do semajnon kvin stuff.
Unua afero ni havas estas la stako.
Do memoru, ke ekzistas nur unu pilo kadron por aktiva funkcio alvokon.
Ni vidos ke en dua.
Kaj ankaŭ memoras kio efektive iras en ĉiu stako kadro tuj estos
la lokaj variabloj de niaj funkcioj, la argumentoj kiuj pasis en nian
funkcioj, kune kun paro aliaj aĵoj vi faras ne vere
bezonas zorgi pri.
>> Do jen ekzemplo programo kie, avizo, ĉefaj estas printfing la reveno
valoro de foo 4.
foo estas ĝuste tuj revenos la valoro de trinkejo 4 komo 6.
Kaj trinkejo tuj metis iujn lokajn variablon n egalas al 4 fojoj 6.
Kaj tiam reveni n.
>> Do ni rigardu la stako dum la reala ripeto de tiu programo.
Do tie estas la fundo de nia stako.
Memoru ke la pilo kreskas.
Do, je la fundo de nia stako, ni havi pilo kadro por ĉefa.
Kiam la programo komenciĝas, ĉefa ĉiam tuj estos ĉe la
fundo de nia stako.
>> Kaj kio estas ene de nia pilo kadro por ĉefaj?
Do kvankam ekzistas neniu loka variablojn ĉefaj, kiel mi diris antaŭe,
ni argc kaj rgv prenante supren spaco ene de ĉefa pilo kadro.
Do ĉefaj nun tuj alvoki funkcio foo.
Kaj tio signifas foo tuj akiri propran pilo kadro.
>> Do nun ni estas interne La funkcio foo.
Kaj kio bezonas iri foo la pilo kadro?
Nu, foo havas argumenton n.
Kaj n estas egala al 4 ĉar tio estas kion ĉefa preterpasas kiel foo argumento.
>> Do nun foo tuj voki stangon.
Kio estas trinkejo tuj havas interne el lia 'stack kadro?
Ĝi havas x egalas al 4 y egalas ses.
Tio ne estas ĉio, kion ni tuj havos en la pilo kadro ĉar trinkejo
ankaŭ havas lokan variablon n.
Kaj n ni tuj starigu egalas 24.
>> Do nun trinkejo tuj revenos n.
Do stango reveni 24 al la pilo kadro foo.
Kaj ĉar trinkejo nun reveninte, ke signifas ni krevi la pilo kadro
por trinkejo off de la stako.
Do ĉiuj memoro kiun trinkejo estis uzante nun ekiras al la stako.
>> Nun, foo ankaŭ iri reveni 24 ĉefaj.
Do nun tiu foo revenas, la memoro ke foo uzis en ĝia '
pilo kadro ankaŭ malaperis.
Kaj nun, ĉefaj tuj voki printf.
Do printf estas nur alia funkcio.
Kiam ni nomas printf, ĝi tuj estos alia pilo kadro por printf
funkcio alvokon.
>> Kion ni pasante printf?
Tion tuj iros sur lia pilo kadro.
Almenaŭ, ni pasante ke procento i backslash n kaj
la argumento 24.
Ĝi povus havi pli estas pilo kadro se printf okazas esti uzante kelkaj
lokaj variabloj.
Ni ne scias.
>> Sed cxiuj, kiuj iras en printf La pilo kadro.
Ĝi tuj ekzekuti la printf.
Tiam printf finos.
Ĝi revenos.
Fine, ĉefaj estas farita.
Ĉefa revenos.
Kaj tiam nia programo estas farita.
Yeah?
>> Publiko: Cxu vi vidas [inaudible]
argumentoj [inaudible]
parametrojn?
>> ROB: Do ekzistas subtila diferenco inter argumentoj kaj parametroj.
Kaj vere, en komuna ekparolos, homoj emas justaj miksi ilin la tutan tempon.
Sed parametroj estas la formala nomo de la aĵoj.
>> Do argc kaj argv estas parametrojn al ĉefa.
Argumentoj estas kion vi reale Iam en kiel tiuj parametroj.
Do, kiam mi vokas foo de 4, 4 estas la argumento mi pasante.
Kaj la parametro n, interne de foo, prenas la valoron 4
ekde 4 estis la argumento.
>> Publiko: [inaudible]?
>> ROB: n estas loka variablo al drinkejo.
n estas ankoraŭ lokaj al foo, sed estas parametro al Foo.
Ne loka variablo.
Yeah?
>> Publiko: [inaudible]?
>> ROB: foo estas simple nomante trinkejo kaj reveni ajn trinkejo revenas.
>> Publiko: [inaudible]?
>> ROB: Yeah, simple vidi multnombrajn pilo kadroj.
Yeah?
>> Publiko: Kial foo nomata antaŭ printf?
>> ROB: Kial foo nomis antaux printf?
Do mi povus havi, anstataŭ, farita io kiel int x egalas foo de 4
kaj tiam presitaj x.
Sed anstataŭe mi kombinis la funkcio vokas en la printf argumento.
>> Sed rimarki ke ni ne povas reale ekzekuti la alvokon al printf ĝis ni
elkompreni foo de 4 estas.
Do ni iras por taksi tion.
Kaj nur fojo ke estas farita iras reveni kaj taksi ĉi.
Yeah?
>> Publiko: Ekde ambaŭ trinkejo [inaudible]
valoro, kial ni ne havas [inaudible]?
>> ROB: Ili tute devus esti int.
Tio ne estis kaptita super multnombraj pasas.
Do ĝi devus esti int trinkejo kaj int foo ĉar ambaŭ de tiuj
estas reveni entjeroj.
Void estas nur se ili ne tuj reveni realaj valoroj.
Yeah?
>> Publiko: Se vi havis linion supre la reveno, [inaudible]?
>> ROB: Linio super la reveno?
>> Publiko: Yeah.
Kiel se vi faris printf kaj [inaudible], ĉu presi dufoje?
>> ROB: Do ene de foo?
Se ni havis printf ĝuste ĉi tie?
>> Publiko: Yeah.
>> ROB: Do se ni havis printf dekstra tie, estus presi unufoje.
Ekde ni nomas foo unufoje dekstren tie, tiam ni batis la printf.
Poste ni vokos stangon.
Kaj tiam foo revenos.
Kaj tio estas ĝi.
Ni nur iam renkontas la printf unufoje.
Yeah?
>> Publiko: [inaudible]
printf nomante foo ĉar ni unue nomante printf kaj tiam ni pasante
la argumentoj.
>> ROB: Do teorie, estas ne printf nomante foo?
Do ne.
Nur la ordo kiu c tuj ekzekuti tiujn aferojn estas, antaŭ ol ni povas
nomas funkcio, ĉiu el la argumentoj la funkcio devas
esti tute taksita.
Do estas tiu tute taksis?
Jes, ĝi estas nur kordo.
Estas nur valoro.
>> Tiam ni havas tute taksi ĉi.
Iam ĉi tiu estas farita, nun ĉiuj liaj argumentoj estas taksitaj.
Kaj nun ni povas fari la vokas al printf.
Yeah?
>> Publiko: Unu demando.
Se vi havas nula funkcio devas vi havas revenon punktokomo?
>> ROB: Vi ne revenon punktokomo se vi havas nula funkcio.
OK.
Do nun iu amason stuff.
Do amaso estas kiel ni tuj trakti kun dinamika memoro mastrumado.
Kaj tio rekte kontrastas kun la pilo kiu nomus aŭtomata
memoro mastrumado.
>> Tial en la stako, vi neniam vere havis trakti kiel la lokaj variabloj
estas puŝata kaj pusxis la tutan tiuj pilo kadroj kaj ĉiuj kiuj stuff.
Vi ne bezonas zorgi pri tio.
Ĝi estas aŭtomata.
Do la monteto estu manlibro.
Kaj la [inaudible]
devenas tiuj funkcioj malloc kaj libera.
>> Do jen alia programo.
Ĉiuj ni faras estas mallocing entjero.
Ni stokante ĝin en stelo x.
Kompreneble, ni devas kontroli vidi se x estas nula.
Tiam ni tuj ĝuste starigis kio x estas montranta al 50.
Presi kio x indikante, print x, kaj tiam libera x.
>> Do kial tio efektive tuj serĉos se ni rigardas nian pilo kaj amason?
Do ni komencu denove.
La fundo de nia stako kiel antaŭe.
Memoru ke vi amasigu rekte kontraŭas la pilo?
Do ni tuj havos la supron de nia amaso tie supre.
>> Do la fundo de nia stako, ni havas nia stako kadron por ĉefa.
Ĝi havas la spacon por argc, argv, kaj ni nun havas lokan variablon x, kiu
estas int stelo.
Do ni iras persisti tra ĉi tiu programo.
Unua afero ni estas alvoko al malloc.
>> Do ni faras alvokon al malloc.
Malloc estas funkcio.
Ĝi tuj akiri pilo kadro.
Kion ni pasante al malloc?
Tio tuj iros interne de la pilo kadro.
Ni pasante grandeco de n, kiu estas 4.
Tiel ke ĝi pasis al malloc.
>> Kion malloc fari?
Ĝi altiras nin iuj spaco sur la monteto.
Do ni tuj iru al la havaĵo.
Kaj ni iras ekpreni 4 bajtoj de la monteto.
Do ni nur donos ke arbitran adreso.
0x123 Nur ŝajnigi ke estas adreso, kiu estas sur la muro.
>> Do kio estas fakte ene de tiu regiono de memoro ĉe adreso Ox123?
Garbage.
Do ni ne stokas ion en ĝi.
Do kiom ni scias, povus esti io.
Vi ne devus supozi estas nulo.
Estas plej verŝajne ne nulo.
>> Do nun malloc revenas.
Kaj kion ni faros kiam malloc revenas?
Ni starigis kion revenas.
Ni starigis x egala al kio estas reveni.
Do kio estas tio reveni?
Ĝi estas reveni 0x123 ĉar tio estas la adreso de la bloko de memoro, ke
nur asignitaj en la havaĵo.
>> Tiel revenos 0x123 x estas nun tuj enkadrigeblajn egalas 0x123 kiu, pictóricamente,
ni ofte desegni kiel x havanta realan arrow indikante ke bloko.
Sed x estas simple stoki tiu adreso.
Do nun ni devas kontroli ĉu x estas nula.
Ne nula.
Ni asertas, ke tiu malloc sukcesis.
>> Do nun stelo x egalas 50.
Do stelo memoras signifas iri al tiu adreso.
Do 0x123 Ni tuj iri al tiu adreso.
Do kiu alportas nin tie.
Kion ni faras en tiu adreso?
Ni stokante 50.
>> Do post tiu linio, kiu estas kio aferoj tuj aspekti.
Do nun ne plu rubo tie.
Nun ni scias, ke 50 estas en tiu aparta adreso ĉar
Ni starigu ĝin al tio.
OK?
Do nun ni tuj presi f.
>> Do unue ni tuj presi stelo x.
Do kio estas stelo x?
Denove, stelo x signifas iri al la afero ke x estas montranta.
Tiel x estas stokante 0x123 Iru al tiu.
Ni ricevas 50.
Do presi f tio.
Kaj tio signifas ke tuj presi 50.
Kaj tiam kiu revenas.
>> Kaj tiam ni havas la duan printf.
Ni nun procento p.
Se vi ne vidis lin, ke estas ĝuste kiel vi presi montrilo.
Do ni havas procento i, procento f, kaj ĉiuj el tiuj jam.
Do procento p, presi montrilo.
>> Tiel x estas montrilo.
Do se ni tuj presi x mem, ni presi kio estas fakte ene
x, kiu estas 0x123 Do la unua print f tuj presi 50.
La dua print f tuj presi 0x123 Yeah?
>> Publiko: Ĉu vi uzas procento x al presi puntero?
>> ROB: Do vi uzas procento x al presi puntero?
Do vi povas sed procento x estas justa, Ĝenerale, por kiel se vi havas iuj
entjera kaj kiun vi volas presi kiel deksesuma.
Tio estas ĝuste kio vi faras tion.
>> Dum, procento d farus presi kiel dekuma.
Tio estis ni ricevas procento d. i estas nur entjero.
procento p estas specife por punteros.
>> Tiel x estas montrilo.
Ni volas uzi procento p.
Sed procento x povus funkcii.
Yeah?
>> Publiko: [inaudible]?
>> ROB: Yeah.
Almenaŭ por tiu call-- do mi ne inkluzivas ĝin en ĉi tie.
Sed tiuj du argumentoj estas nepre ene de tiu stako framo
kune kun ajna loka variabloj printf pasas al uzi.
Kaj tiam la venonta alvoko al printf nun ene de printf pilo kadro estas
procento p backslash n kaj kion ajn la valoro de x estas, kio estas 0x123.
Yeah?
>> Publiko: [inaudible]?
>> ROB: ĝi devos printi ion kiuj aspektas kiel tiu.
>> Publiko: [inaudible].
>> ROB: Do ĝi presas ĝin adreso formo.
Ĝi aspektas kiel adreson.
Yeah?
>> Publiko: [inaudible]?
>> ROB: Kial estas kio?
>> Publiko: [inaudible]?
>> ROB: Kial estas ĉi puntero 4 bajtoj?
Do estas tuta fasko de 0 estas antaŭ tiu.
Do estas vere 0x0000000123.
Sur 64-bita sistemo, ne estus tutan aron da pli nuloj.
Yeah?
>> Publiko: [inaudible].
>> ROB: Do la unuaj printf tuj print--
>> Publiko: [inaudible].
>> ROB: Jes, ĝi tuj presi kio x notas al.
Stelo diras kion estas ĉi afero indikante.
Grab ĝin.
Do kio estas tio montrante?
50.
Grab ĝin.
Tio estas kion ni tuj presi.
Dum la venonta unu, ni nur presi x mem.
Kio estas ene de f?
0x123.
OK.
>> Kaj poste, fine, ni havas la liberaj.
Kion ni pasante por liberigi?
Ni pasas x.
Mi tiam efektive montriĝas en la pilo kadro.
>> Do ni pasante la valoron 0x123 liberigi.
Do nun libera scias tute certe, Mi devas iri al la ruino
kaj liberaj ke memoro.
Ĝi ne uzas kia estas je adreso 0x123.
>> Do libera tuj liberigi ke de la monteto.
Nun niaj monteto estu malplena denove.
Ni ne havas memoron filtraciones.
Nun libera revenos.
Rimarku ke x estas ankoraŭ 0x123.
Sed tio estas nun ne validas memoro.
Ni devus ne plu dereference x.
Yeah?
>> Publiko: Ĉu reveni 0 redunda?
>> ROB: Ĉu returen 0 redunda?
Jes.
Ni nur enkalkulu tie ĉar ni havos reveno por aero.
Tiel estas kiel, yeah, lasas inkluzivas la reveno 0.
Yeah?
>> Publiko: [inaudible]?
>> ROB: Do post libera x, kio okazas se Ni provu dereference la montrilo?
Eblas, ke nenio eliras malbone.
Eblas, ke ni ankoraŭ ricevas 50.
>> Ĝi estas ebla ankaŭ, ke tiu memoro estas nun uzata por io alia.
Do estas nedefinita konduton.
Kaj nedifinita signifas ion povas okazi.
Yeah?
>> Publiko: [inaudible]?
>> ROB: Ne, do se vi asigni x al io alia.
Do se ĉi tie ni diris x egalas malloc io else--
malloc grandeco event--
tiam tiu originala bloko de memoro ne liberigita.
Kaj ni oficiale perdis ĝin.
Tio estas memoro liko.
Ni perdis ĉiujn referencoj por ke bloko de memoro.
Do estas neniu vojo ni povos iam liberigi ĝin.
OK, do tiam reveni 0 rimedoj faris.
>> Bone, do stako.
Kio estas la ideo tie?
Do memoru, havaĵo estas subiron.
Stack plialtiĝas.
Do tio estis la ekzemplo el prelego, Mi kredas, kie ĉefan estas ĝuste tuj
nomas tiun funkcion foo, kiu tuj nomi sin rekursie superfluaj
super denove.
>> Do pilo kadroj tuj funkcios ekzakte la sama.
Do ni tuj komencos kun ĉefaj kiel la malsupro pilo kadro.
Tiam ĉefa tuj voki foo, kiu tuj alvenos pilo kadro.
>> Tiam foo tuj voki foo denove, kiu tuj akiri
alia pilo kadro.
Kaj cetere, kaj denove, kaj denove, kaj denove ĝis, fine, ni kuras
en la muro.
Do jen kiel ni preni oni stako.
Kaj je tiu punkto, vi seg kulpo.
Aŭ vi povus vere seg kulpo antaŭe tiu punkto sed jes.
>> Publiko: Ĉu kerno renversi la sama kiel seg kulpo?
>> ROB: Do vi vidos segmentación kulpo kerno renversita.
Vi akiras kernan nekropsia kiam vi seg kulpo.
Kaj ĝi kiel vertedero de ĉiuj enhavo de via nuna memoro tiom
ke vi povas provi identigi kial vi SEG faulted.
Yeah?
>> Publiko: [inaudible]?
>> ROB: Do segmentación kulpo rimedoj tie estas stako.
Do ne nepre.
A segmentación kulpo signifas ke vi estas tuŝi memoro en maniero
Vi ne devus esti.
Do unu maniero de ke okazas estas, kiam vi stako, ni komencas tuŝi
memoro en maniero, ke ni ne devas esti.
Yeah?
>> Publiko: [inaudible]?
>> ROB: Do ene de senfina ciklo.
Kiel, tio estas kiel rekursia malfinio loop kaj tiel ni povos havi alian
pilo kadro ĉiu tempo.
Sed ĝuste interne de regula malfinia dum one--
bone, ni ne eĉ printi f--
fari ion.
Kion ajn.
>> Ni ne tuj estos atingi alia pilo kadro.
Ni nur tuj subteni looping sur tiu sola instrukcio.
La stako ne kreskas.
Ĝi estas la fakto ke ĉiu rekursie alvoko, donas al ni pilo kadro.
Tial ni preni stako.
Yeah?
>> Publiko: Do ​​se vi diris al akiri la dum buklo kaj tiam [inaudible]?
>> ROB: Do se ene de la dum buklo estis printf, vi ankoraŭ farus
ne seg kulpo.
Mi simple ne volis konfuzi aferoj.
Estus buklo.
Vi ŝatus akiri sola pilo enmarcar la printf.
>> Tiam printf revenus.
Tiam vi estos plej buklo denove.
Vi ŝatus akiri sola pilo enmarcar la printf.
Ĝi revenus.
Sola pilo kadro.
Do vi ne akiranta ĉi malfinio apilando pilo kadroj.
>> Publiko: [inaudible]?
>> ROB: Jes.
Do tiu stako okazas ĉar neniu el tiuj
alvokoj al foo revenas.
Do se ni revenus, tiam ni havus komencos perdi pilo kadroj.
Kaj tiam ni ne stako.
Kaj tio estas kial vi bezonas bazon kazo por via persona funkcioj.
Yeah?
>> Publiko: Ĉu la potencialo grandeco kaj la pilo por la amaso la sama por
ĉiuj programoj?
>> ROB: Malglate.
Estas la potencialo grandeco de la stako kaj la amaso la sama por ĉiuj programoj?
Malglate.
Ekzistas iuj aleatorización al kie la stako komenciĝas kaj
kie la havaĵon startas.
Se vi hazarde havas amason de tutmondaj variabloj kaj aĵoj, vi povus
forpreni de iu spaco por via muro.
>> Sur 64-bita sistemo, vi virtuale havi senfinan memoron.
Estas ĝuste tiel.
Inter 32 bitoj kaj 64 bitoj, kiu estas signifa diferenco.
>> Vi tuj ricevos amason pli pilo kaj amason spaco sur 64 bitoj
sistemo ĉar estas simple pli turnas ke ili povas uzi.
Sed sur individua sistemo, ĝi volas esti malglate la sama kvanto de pilo
kaj amason spaco.
Bone.
>> Do lasta aĵo estas kompilita.
Do vi devas scii ĉi procezo.
Ekzistas kvar grandaj paŝoj.
Do la unua devus facile memoras.
Pre-prilaborado.
Ĝi havas la prefikson pre en ĝi.
Do temas antaŭ ĉio alia.
>> La afero memori estas la hash.
Do hash difinas kaj hash inkludas en ĉiuj el tiuj.
Tiuj estas ĉiuj pre-procesoro directivas.
Jen estas la aferoj, ke la pre-procesoro prizorgas.
>> Do kion signifas la antaŭ-procesoro fari?
Ĝi estas vere stulta afero.
Ĉio estas kapabla de ĉiuj el tiuj Kopio kaj kortego, kaj alglui operacioj.
>> Do hash inkludas normon i0 dot h.
Kio estas tiu faras?
Ĝi grabbing la norma i0 dot h enarkivigi kaj alglui ĝin en la supron
kien li diras hash inkludas norma i0 dot h.
>> Kaj neniu hash difini ke ni vidis, kion tiu faras?
Lia kopiado la valoro kiun la hash difinita estas difinita kiel kaj interglui ke
kien vi estas uzanta la valoro.
Do la antaŭtraktilo nur faras vere Simpla teksto bazita operacioj.
Ĝi faras nenion inteligenta.
Do ĉio alia estas pli komplika.
>> Do nun ke antaŭtraktilo estas farita, ni fakte kompili.
Do kion signifas kompilante signifas?
Ni nun iras de c kodo al asembleo kodo.
Yeah?
>> Publiko: [inaudible]?
>> ROB: Yeah, ni kaptis tion.
Do kompiladon.
Ni iras el c al asembleo.
Do tiu estas reala lingvo ŝanĝon.
Kompilante signifas irante de altan nivelon lingvo
suba nivelo lingvon.
>> Kaj c estas altnivela lingvo kompare al asembleo.
Kio estas asembleo?
Lia instrukcioj kiuj estas, bela da, farita por via CPU.
Sed via komputilo ankoraŭ faras kompreni asembleo.
Nur komprenas kaj nuloj.
Do la sekva paŝo estas kunmetado, kiuj nin el tiuj komandoj
via CPU komprenas kaj reale tradukas ilin al
la kaj nuloj.
>> Do C al asembleo por duuma.
Sed mi ne havas plenumeblan ankoraŭ.
Do pensu pri la cs50 biblioteko.
Ni provizis vin per duuma por ĉi cs50 biblioteko, kiu havas GetString
kaj GetInt kaj ĉiu tio.
>> Sed la cs50 library--
en kaj de itself-- ne plenumebla.
Ĝi ne havas ĉefan funkcion.
Estas nur faskon de duumaj kiun vi povas uzi.
Do sinsekvon Tiel ni kunvenos ĉiuj de tiuj malsamaj duumaj dosierojn
en reala plenumebla.
Kiu eblas tajpi dot slash punkto ekstere.
>> Do ĉi tio estas kiel la dosiero kiun vi skribis, - kio ajn vian programon is--
Ceaser dot c.
Sed nun ĝi estas kompilis malsupren al duuma.
Do Ceaser dot o.
Kaj tiu estas nia cs50 bibliotekoj duuma.
Kaj ili estas kombinante en sola plenumebla.
Yeah?
>> Publiko: [inaudible]?
>> ROB: Do unue inkluzivi, memoru, la hash inkluzivi estas reale
pre-procesoro paŝo.
Sed tio apartan.
Se vi ne uzas ajnan funkcioj kiuj estas ekster via sola dosiero tiam,
Ne, vi ne bezonas ligi ion ĉar vi ĉion.
>> Dirita, printf estas ligita en.
Se vi iam uzi printf, ke io kiu bezonu esti ligita en
ĉar vi ne skribis tion.
Kaj, fakte, printf estas aŭtomate ligita en.
Vi scias, kiel ĉe la komandlinio aŭ kiam Vi tajpas fari, vi vidos havas
haltostreko l cs50, kio havas ligon en la cs50 biblioteko?
Printf, kaj da tio, tuj esti ligita en aŭtomate.
Ajna alia demandoj pri io?
>> Publiko: [inaudible]?
>> ROB: Ligi?
Ni havas tutan faskon da malsamaj duumaj dosieroj.
Tiu estas la kanona ekzemplo ke ni uzas estas cs50 biblioteko.
Ni kompilis kaj donis al vi la duuma por ĉi cs50 biblioteko.
>> Vi volas uzi GetString en via programo.
Do vi iru kaj uzi GetString.
Sed sen mia duuma kodo GetString, kiam vi kompili via kodo
malsupren, vi ne povas reale kuri via programo ĉar GetString String estas
ankoraŭ ne tute difinitaj.
>> Ĝi estas nur kiam vi ligas en mia duuma kiu enhavas GetString ke nun, ĉiuj
Bone, mi povas reale ekzekuti GetString.
Mia dosiero estas kompleta.
Kaj mi povas kuri ĉi.
Yeah?
>> Publiko: Ĉu sinsekvon konverti la binara al plenumebla?
Do eĉ se vi ne havas aliajn bibliotekoj, ĉu ne ankoraŭ
necese traduki la [inaudible]?
>> ROB: Do plenumebla Ankoraŭ en duuma.
Ĝi simple kombinante tutaj fasko de binaraj.
>> Publiko: Dankon tiom.
>> ROB: Neniu problemo.
Ajna alia demandoj?
Alie, ni ĉiuj starigis.
Bone.
Dankon.
>> [Aplaŭdo]
>> Publiko: Dankon.
>> ROB: Yeah.