[Powered by Google Translate] [Sekcio 3] [Less Komfortaj]
>> [Nate Hardison] [Universitato Harvard]
>> [Jen CS50.] [CS50.TV]
>> Bone, ni komenci.
Bonvenon Semajno 4 de CS50.
Se vi infanoj malfermi per foliumilo kaj malfermi pset 3,
Scramble kun CS50, ni tuj komencos tuj
tra la sekcio de demandoj tie.
Nur kiel lasta semajno, ni laboros en CS50 Spacoj,
se vi ankaŭ tiri ke ĝis tiel,
kaj se vi iras antaŭen kaj viziti ĉi ligilon, kiun mi devas tien je la supro.
Estas tempo por komenci.
Ni havas nian iom hi programo tie. Nenio freneza.
Unu el la unuaj aferoj kiujn mi volas fari kun vi infanoj hodiaŭ estas iri super kelkaj solvoj
al Problemo Serio 1, speco de ekzemplo solvojn,
nur tiel vi povas akiri senton por kio specoj de kodo bastonon skribas,
kio specoj de kodo aliaj studentoj skribas,
kaj vi rigardu ĝin ĉar mi scias ke estas stranga
kiam vi prezenti solvon al problemo aro kaj ricevis komenton
en via propra versio, sed foje ĝi estas utila por vidi kiel aliaj personoj faris tion,
speciale tiuj kiuj estas bela rigardante.
Por la plimulto, mi estis vere impresita kun la solvojn kiujn vi infanoj produktita.
Mi ankoraux ne komencis rigardi vian Problemo Ara 2s, sed se ili estas io kiel la unua,
ĝi signifas nenion sed bonaĵojn.
>> Se vi rigardas mian revizioj, ni komencu la tuta vojo antaux Revizio 1,
kaj ni iras preni rapidajn rigardu al Mario solvo.
Se vi tiri ĉi supre, tiuj programoj kiuj nin tuj prezenti are correct.
Esas ne praveco aferoj kun tiuj problemoj, sed prefere,
ni volas paroli iomete pri la diversaj dezajno demandoj
kiu estis uzitaj tie.
Unu el la aĵoj kiuj estis interesa pri la solvo
estas ke ĝi uzas tiun novan konstruo nomata funto difini,
kelkfoje ankaŭ nomita kiel hash difini.
Lasu min zomi ĝin ĉi tie.
A # difini permesas doni nomojn al tiuj nombroj en via programo.
En ĉi tiu kazo, la maksimuma alteco de piramido en Mario
estis 23 kaj anstataŭ meti 23 en mia kodo-
ni devus raporti al tiu tiel malmola kodigo 23 -
anstataŭ ĉi donas la nomon MAX_HEIGHT al tiu numero,
por ke cxi tie en mia do-dum buklo
vi povas fakte rilatas al MAX_HEIGHT
anstataŭ meti la numero 23 in
[Studenta] Kio estas la avantaĝo de fari tion?
Tio estas granda demando.
Unu estas legibilidad.
Avantaĝon de uzi ĉi # difini estas legibilidad.
Kiam mi legas ĉi tiun kodon, mi vidas kio okazas.
>> Mi povas vidi en ĉi tiu kondiĉo tie ni provi
por la alteco esti <0, kiun ni povus havi ankaŭ difinis
esti minimuma alteco aŭ min alteco.
La alia avantaĝo estas, ke mi povas tiam legis la reston de la linio por vidi
ke ni ankaŭ kontroli por certiĝi ke alteco ne estas pli granda ol la max alteco,
ĉar ni tuj daŭrigi dum la alto estas pli granda ol la max alteco.
La alia avantaĝo estas-se mi malzomi iom tie-
se mi kuros ĉi programo kaj mi kuras ĝi, ni diru, kun 23 nun,
ĝi presi ĉiujn 23 vicoj ĝuste tiel.
Sed diru mi volis ŝanĝi la max alteco,
kaj nun mi volas limigi la maksimuma alteco de piramidoj
esti nur diras-viro, kiu estis funky.
# Include , # difini MAX_HEIGHT,
kaj ni diras, ke ni volis agordi ĝin egala al 10.
Nun en ĉi tiu punkto, ĉiuj mi devis fari estis ŝanĝi ĝin en ĉi tiu loko.
Mi povas recompilar la kodon, kaj nun, se mi provas kaj tajpu en 12,
ĝi instigas min denove.
En ĉi tiu kazo, ni nur uzas MAX_HEIGHT unufoje.
Ne tiu granda de hassle iri
kaj ŝanĝi ĝin en la dum buklo se vi bezonas.
Sed en programoj kie vi referenco sama magia nombro
denove kaj denove, ĉi # difini mekanismo estas vere utila
ĉar vi ĵus ŝanĝi ĝin iam en la pinto de la dosiero-estas tipe kie vi metis ilin-
kaj la ŝanĝo percolates tra la resto de la dosiero.
>> Aliaj aferoj mi volis rimarki en ĉi tiu farita, ke mi pensis aspektis vere bela,
unu estis la nomoj de la variabloj.
Vi vidas tie ke ni havas entjeran variabloj nomas vico kaj nomita alteco.
Spacoj, hashes, ĝi helpas fari la kodon iom pli legebla,
faras iom pli komprenebla kio reale okazas.
Ĉi tiu estas en kontrasto kun uzante, ekzemple, hazarda literoj
aŭ nur gobbledygook aro.
Lasta afero mi atentigi estas kiu en por cikloj,
ofte tiuj iterator variabloj, tiuj counters ke vi uzas en via por cikloj,
ĝi estas normo kaj convencionales komenci ilin kun ĉu mi kaj tiam j kaj tiam k
kaj irante de tie, se vi bezonas pli variabloj,
kaj ĉi tiu estas nur konvencio.
Ekzistas multaj konvencioj.
Ĝi dependas de la programlingvo vi uzas.
Sed en C, oni tipe starti kun mi.
Ĝi ne havas sencon uzi, ekzemple, aŭ b
dependante de la situacio.
Estas tio por ĉi tiu.
Se vi nun elsxiros redaktoj 2, vi vidos alian Mario,
kaj ĉi tiu estas simila al la alia, ke ni nur rigardis,
sed ĝi faras ion ia genia.
Se ni rigardas tiun sekcion ĉi tie interne la interna por ciklo,
ili estas uzanta kelkajn freneza rigardas sintakson ĉi tie dekstre en ĉi tiu linio.
Tiu nomiĝas triargumenta operatoro.
Estas kvazaŭ alia aserto kondensita en unu linio.
La kondiĉo estas tiu parto ene krampoj.
Estas ekvivalenta al diri se j <alteco - i - 1.
Kaj tiam kion la enhavon de tiu se bloko estus estas la spaco
kaj tiam la enhavon de tio, kion la alia estus ĉi estas #.
Ĝi estas esence atribuante spaco al tiu variablo.
Oni metas spacon en la enhavo de la bloko variablo,
se ĉi tiu kondiĉo estas konita, kaj se la kondiĉo estas ne konis,
tiam la bloko variablo ricevas ĉi #.
Kaj tiam, kompreneble, anstataŭ konstrui supren tutan ĉenon
kaj presi ĉio ekster fine tiu solvo presas gxin unu signo samtempe.
Bela cool.
>> Alia paro de aĵoj por rigardi. Ni movi antaŭen al avidaj.
Nun se ni rigardas avida, tiu unua solvo
uzas tiujn # difinu sufiĉe.
Ni havas unu konstanto difinita por ĉiu el la diversaj nombroj en ĉi tiu programo.
Ni havas unu por cendojn po dolaro, unu por kazernoj, dimes, Nickels, kaj centonoj,
kaj nun, se ni rulumu malsupren kaj legi la kodon,
ni povas vidi normo do-dum buklo impreso ĉio eksteren.
Speco de la Crux de ĉi tiu problemo estis rimarki ke
vi bezonas por igi la kaleŝego, ke vi legis en de la uzanto entjero
por precize fari la matematikon, kaj ĉi tio estas ĉar
kun flosantaj punktaj nombroj, kiel ni raportis en prelego koncize,
ĝi ne eblas precize prezenti ĉiu unuopa valoro sur la nombra linio
ĉar estas malfinie multaj valoroj inter 3 kaj, ni diru, 3,1 vespero.
Vi povas havi 3,01 kaj 3,001 kaj 3,0001, kaj vi povas plu iri.
Ĝi rezultas kiam vi laboras per mono, vi ofte volas igi ĝin
en entjera formato por ke vi ne perdi cendoj kaj tiu klaso de aĵoj.
Farante tion kaj rondigas estis ŝlosilo.
Tiu solvo uzis perfekte rekta, granda algoritmo,
kiu decremented la nombro de centonoj ceteraj, unue por kazernoj,
tiam per dimes, tiam per Nickels, tiam per peniques,
kaj aldonante al la nombro de moneroj ĉiufoje.
>> Alia solvo, ke ni vidos, kiel mi malzomi iru redaktoj 4,
havis tre simila komenco sed anstataŭ uzi div kaj mod
rajton super tie por kalkuli la nombron de cendoj.
Ĉi tio, la nombro de kvaraj estas egala al la nombro de centonoj dividita per 25,
kaj la motivo ĉi funkcias estas ĉar ni faras entjera divido,
tuj kiam forĵetante ajna resto.
[Studenta] Do ni devas diri la serĉo?
Vere dependas.
[Studenta] Vi diras pli ol kodo tie ĉi.
Yeah, kaj tiel estas fasko de varianta filozofioj pri tiu.
Mia persona filozofio estas, ke via kodo estas vere la vero,
kiel viaj kodo estas kio vere ekzekuti sur la komputilo,
kaj tiel via kodo devus esti kiel legebla kiel eblas ne necessitate tiom da komentoj.
Kiu diris, kiam vi faras tion, kio estas speco de malfacila matematike
aŭ Algoritma, estas bona por diri tiujn tiel ke vi povas
aldoni kroman dimension, ekstra tavolo al kiu ajn legas vian kodon.
En ĉi tiuj solvoj, ofte ili diris pli peze nur ĉar
ni volas por povi disdoni ilin kaj ke homoj repreni ilin
kaj legis ilin belaj facile.
Sed definitive, mi konsentus ke tiu estas peza.
[Studenta] Sed kiam en dubo, iru pli peza?
Kiam en dubo, iru pli pezaj.
Kelkaj homoj foje diras reveno 0 aŭ io kiel tio.
Mi kredas ke estas ridinda komento.
Klare tio kio okazas.
Mi ne bezonas Esperanto por diri al mi, ke.
Kelkfoje homoj skribos stuff kiel "kthxbai!"
Tio estas speco de belaj sed ankaŭ ne-
ke tio ne faras la diferencon inter dirante punktoj aŭ ne.
Tiuj specoj de komentoj estas nur ha, ha.
Cool.
>> Je ĉi tiu punkto, ni komencu labori pri la problemo Ŝanĝu 3 sekcio de demandoj.
Se vi infanoj tiri ĉi denove,
kiel kun lasta semajno, ni ne tuj rigardi la mallongaj en ĉi tiu sekcio.
Ni lasu vin infanoj fari tion en via propra tempo kaj paroli pri la demandoj.
Sed nun en ĉi tiu sekcio ni pasigos iom pli da tempo
parolas malpli de la kodigo fundamentojn
kiel ni faris pasintsemajne, kaj anstataŭe, ni tuj enfokusigi pli en
iom pli de la teorio, do paroli pri duuma serĉo por poste ordigi.
De tiuj el vi, kiuj estis sekvante kune kun la prelego,
povas iu donas al mi recap de kio la diferenco estas
inter duuma serĉo kaj lineara serĉo?
Kio okazas? Certe.
Lineara serĉo serĉoj tra ĉiu ero en la ordo listo
unu post la alia per unu post unu post alia,
kaj duuma serĉo dividas la listo en 2 grupoj,
ĉekojn se la klavoj valoro kiun vi sercxas, estas pli granda ol aŭ malpli ol la mezpunkto valoro
ke vi ĵus trovita, kaj se ĝi estas malpli ol, ĝi iras kun la suba listo
kaj tiam dividu tion denove, ĉu la sama funkcio
tuta vojo malsupren ĝis ĝi trovas la mezpunkto esti egala al la valoro mem.
Ĝuste.
>> Kial ni zorgas?
Kial ni parolas pri duuma serĉo kontre lineara serĉo?
Yeah.
Duuma estas multe pli rapida, do se vi duoble la grandeco de la problemo
prenas pli paŝo anstataŭ duobla.
Ekzakte.
Tio estas granda respondo.
Lineara serĉo tre kontrolanta unu ero en tempo,
kaj kiel ni vidis en la unua tago de prelego
Kiam David iris tra lian telefonon libro Ekzemplo
kaj ŝirita el unu paĝo de la telefono libro samtempe
Kaj gardis fari tion denove kaj denove kaj denove,
ĝi tuj konduki lin vere longa tempo por trovi iun en la telefono libro,
krom se, kompreneble, li serĉis iun je la komenco de la alfabeto.
Kun duuma serĉo, vi povas iri multe pli rapida,
kaj ne nur duoble pli rapida aŭ 3 fojoj tiom rapide aŭ 4 fojojn tiel rapide.
Sed la problemo ricevas pli kaj pli kaj pli malgrandaj multe pli rapida.
Por ilustri tion, ni devos komenci paroli pri tio, kio okazas
kiam ni skribas duuma serĉo.
La problemo je mano estas ke se mi havas aron de nombroj,
diri, 1, 2, 3, 5, 7, 23, 45, 78, 12323,
kaj poste 9 kun ton de _0s_ post ĝi,
ni volas povi deĉifri vere rapide kio estas en
ĉi tabelo de nombroj.
Mi konas ĉi ŝajnas iom stulta kaj iom elpensita,
ĉar nun estas.
Ni havas tabelo kiu ne havas tre multajn elementojn en ĝi,
kaj se mi demandos de vi elŝeligi ĉu aŭ ne
23 estas en la tabelo, vi povas fari tion sufiĉe rapide
nur rigardante ĉe tio kaj diras al mi jes aŭ ne.
La analoga al konsideri estas imagi se ĉi estis, diru,
an Excel kun 10.000 vicoj, 20.000 vicoj.
Kompreneble, vi povas fari la komandon F aŭ la kontrolo F kaj rigardu ion supren.
Vi povas ankaŭ uzi la filtriloj kaj la serĉo stuff,
sed se vi devis rigardi tra tiu dosiero linio por linio por linio,
ĝi prenus vin longan tempon por trovi ĝin.
Estas ia kiel en la telefono libro ekzemplo, ankaŭ, kie
neniu rigardas tra telefono libro unu paĝo samtempe.
Tipe, ili malfermu ĝin al la mezo,
aŭ en la kazo de multaj telefono libroj kaj vortaroj, kie
vi fakte havas ĝin tajpas sur la unua litero,
vi klaki al tiu unua litero kaj malfermi kaj komenci tuj tra tie.
>> Memorigas al mi vian nomon denove. >> Sam.
Sam.
Kiel Sam diris, ke lineara serĉo procezo tuj estos vere malrapida,
kaj anstataŭ kun duuma serĉo, la maniero ĉi verkoj estas ke
ĉiufoje ni iru tra ripeto de nia serĉado algoritmo,
ni iras al dividi la liston en la duono, esence,
en du malgrandaj listoj.
Kaj poste la sekvantan ripeto de la ciklo, ni dividu denove
en aliajn pli malgrandaj listoj.
Kiel vi povas vidi, la problemo daŭre pli kaj pli malgrandiĝas
ĉar ni plenumas forĵetante duono de la listo ĉiun solan fojon.
Kiel funkcias tiu forĵetas laboro?
Ĝuste kiel memorigilo, kion ni faros, se ni komputilo
kaj ni estis, diru, serĉante la nombro 5 en tiu ĉi listo
estas ke ni devus elekti numeron en la mezo.
En la mezo de tiu listo, ĉar estas 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 numerojn,
ni volas repreni la numeron aŭ ĉe la 4a pozicio aŭ ĉe la 5a pozicio,
kaj ni volonte nomas, ke la duono de nia listo.
Pick nombro en mezo.
Tiam, ĝuste kiel Sam diris, ni testi por vidi se tiu nombro estas egalaj
al la numero kiun ni volas aŭ nia dezirata nombro.
Se estas egalaj, tiam ni trovis ĝin. Ni gajnos.
Se ĝi ne estas egalaj, tiam estas paro de kazoj.
La du kazoj estas ĉu la nombro devas esti pli granda ol la nombro ni rigardas,
aŭ estas malpli ol.
Se estas pli granda, ni movos al dekstre.
Kaj se ĝi estas malpli, ni movi al la maldekstra.
Kaj tiam ni ripetu la tuta procezo denove
sur ĉu la dekstra duono aŭ la maldekstra duono de la listo.
>> La unua problemo en la hodiaŭa sekcio estas elŝeligi
kiel ni povas vere komenci por esprimi tion en C-kodo.
Ni havas la _pseudocode_ tie.
Kion ni komencos fari estas mi elsxiros tute nova spaco,
krom cxi tiu revizio por ke ni havas ĉi tiujn notojn por poste,
ni forviŝi ĉion ĉi, kaj poste kopii kaj alglui el la problemon aro
ĉi tiun informon en niajn spacojn, kaj espereble tio ne rompos.
Perfekta.
Se vi infanoj ĉiuj faras tion, kopiu kaj algluu tiun kodon en vian novan spacon,
en malplenan unu.
Ni provu Daniel. Se vi tradukigi kaj ruli tiun programon, ĝi funkcias?
Ne >> Kio ĝi diras?
Ĝi diras la kontrolo atingas fine de ne-nula funkcio.
Yeah, do lasu min provi kurante ĝin.
Ĉu vi infanoj vidis ĉi tion antaŭe? Ĉu vi scias kion tio signifas?
Konsentite, ni elsekigi ĉi iom.
Oni diras en file.c on line 9, kolumno 1 ni havas eraron, kiel vi diris,
kaj ĝi diras ke ĝi estas devenaj el la eraro averto kaj la reveno tipo averto.
Ĝi aspektas kiel io okazas kun la reveno tipo, kiu havas sencon.
Ni havas ne-malplena funkcio, kio signifas, ke ni havas funkcio
ke ne revenas malplena.
Al malplena funkcio estas tiu kiu aspektas jene:
void foo (), kaj ĝi estas dezerta pro la reveno tipo estas malplena,
kiu signifas ke se ni havis ion ĉi tie
kiel reveno 1, ni volas havi tradukilon eraro por ĉi tio.
Tamen, ni havi ne-nula funkcio.
Nia ne-malplena funkcio en ĉi tiu kazo estas nia serĉo funkcio
ĉar ĝi havas reveno tipo de bool.
Kiam ĝi estas diri ke la kontrolo atingas la finon de ne-malplena funkcio,
estas ĉar serĉo ne havas return.
Oni ne reveni nenion de tipo bool.
>> Ni povas ripari tion, kaj kion vi opinias infanoj
serĉo devus reveni defaŭlte?
Kio estu la defaŭlta reveno valoro de serĉo?
Ĉar tio kion ni povas meti je la fino.
Charlotte, ĉu vi havas iun-?
Vera aŭ falsa? >> Vera aŭ malvera.
Kiun?
Falsaj. Mi ne scias.
Falsa? Ni provu ĝin.
Kial vi diras reveno falsa? Tio estas granda intuicio.
[Charlotte] Mi ne scias.
Ni tuj revenos malvera en ĉi tiu kazo ĉar ĉi estos nia default
se ial la listo estas malplena aŭ la nadlo
ke ni serĉas ne ekzistas.
Tiam ĉe la fino, se ni ne revenas vera antaŭe en ĉi tiu funkcio,
ni ĉiam scias, ke ĉi tiu funkcio diros nope, ne en la tabelo.
Ne en la fojnamaso.
Nun se ni tradukigi kaj ruli ĝin-mi savos tiun do ni povas tiri gxin.
Nun se ni tradukigi kaj ruli nia programo, verko.
Nia sola iom prompto.
Se mi batis 4-uh-oh.
Ĝi ne presi ion. Ĝi aspektas kiel ĉiu finiĝis bone.
Ni devas plenigi tiun in
Ni parolis pri la algoritmo en _pseudocode_ iom antaŭe.
Mi vidu, krom cxi tiu,
kaj mi tiri ke algoritmo reen denove.
Ni batis this guy. Nope.
Tie ĝi estas.
Kiel ni faru tion?
Kio estus bona strategio por dividi ĉi tiun kodon?
Vi devas elekti numeron en la mezo.
Kiel oni prenas numeron en la mezo de tabelo?
Ajna sugestojn?
[Studenta] Strlen dividita per 2.
Strlen dividita per 2. Tio estas granda.
Strlen verkoj kun specialaj specoj de tabeloj.
Kio specoj de tabeloj?
String arrays, karaktero tabeloj.
Estas tiu sama speco de koncepto ke ni volas apliki,
sed ni ne povas uzi strlen ĉar ni ne havas aron de signoj.
Ni havas aron da ints.
Sed kion signifas strlen akiri por ni?
Ĉu vi scias kio alvenas por ni?
[Studenta] Strlen gets ni la longa.
Ekzakte, alvenas ni la longa.
Strlen ricevas la longo de la tabelo por ni.
>> Kiel ni atingas ke en nia duuma serĉo programo?
Kiel vi atingas la longecon de tabelo?
[Studenta] Strlen?
Vi povas ricevi la longo de adekvate formatita C string array kun strlen.
La problemo, tamen, estas ke ni ne havas ĉenon tabelo.
Se ni retrorigardas al tiu kodo, ni havas ĉi entjero tabelo.
Kiel ni scias, kiel longe estas?
[Studenta] Ĉu estas ekvivalenta por fina punkto, kiel int l aŭ ion?
Ĝi rezultas tie fakte ne estas, kaj tial en maniero, tio estas
unu el tiuj aĵoj kiuj estas nur bona scii pri C,
ke ne ekzistas maniero por ricevi la longo de tabelo
se ĉio, kion mi donos al vi estas la tabelo.
La kialo funkcias kun kordoj, la kialo strlen verkoj,
estas ĉar se cxeno estas taŭge formatita,
ĝi havos tiu speciala \ 0 karakteron al la fino.
>> Vi povas ankaŭ imagi, se vi havas netaŭge formatan kordoj
kaj ne estas \ 0 karaktero tie, tiam la tuta afero ne funkcias.
[Studenta] Ĉu vi povas aldoni la \ 0?
Ni povis en ĉi tiu kazo.
Ni povus aldoni ian \ 0
aŭ ia signifante karaktero kaj tiam uzas tiun.
Sed tio ne estas sufiĉe tuj labori
ĉar la \ 0 estas por char tipo,
kaj tie ni havas ints.
La alia afero estas, se ni devis uzi specialan valoron
kiel -1 por marki la finon de tabelo
tiam ni neniam povus stoki -1 en nia entjero tabeloj.
Ni ŝatus meti ilin.
Rezultas ke la sola maniero por ricevi la longo
de tabelo en C estas vere memoras
kiam vi starigis ĝin kaj poste pasi ĝin tie kun la tabelo
por ke kiam ajn mi havas funkcion kiu tuj fari iun laboron
sur tabelo de entjeroj aŭ kaleŝegoj aŭ duoblajn aŭ kion vi havas,
Mi ankaŭ devas doni la funkcio la tabelo de longo,
kaj tio estas ĝuste kion ni faris ĉi tie en la serĉo funkcio.
Se vi rigardas, kion ni faris kiam ni pasas en nia tabelo tie,
ni ankaŭ pasas en la longitudo, la grandeco.
Simple okazas ke ni nomas tiun variablon tie,
ĉi parametro aŭ argumento.
Ĉi tio estas nomita funkcio de argumento listo aŭ parametro listo,
kaj ĉi tiuj estas ankaŭ nomita argumentoj aŭ parametroj.
Homoj uzas malsamajn terminojn en malsamaj epokoj.
Mi kelkfoje interŝanĝi ilin mi mem.
Simple tiel okazas ke ĉi variablo tie nomata simile
al ĉi # difini ĝis ĉi tie.
Sed ili ne estas la sama aĵo.
La majuskloj gravas.
>> Se vi rigardas kio okazas cxi tie, ni deklaras
nia int tabelo, kiu ni nomis nombroj.
Ni donis ĝin nia grandeco, kiu korespondas al nia # difini ĉe la supro.
Ĝi tuj estos 8.
Kaj poste kiam ni tiam nomita nia serĉo funkcion sube,
ni pasas en la numero ni volas serĉi, kiun ni instigis,
alveninta de la uzanto.
Ni pasas en la tabelo, ĉi nombroj,
kaj poste ni ankaŭ devas pasi en la grandeco de la tabelo,
kaj tiam la valoro de grandeco 8 gets stokita
aŭ pasis al ĉi entjera variablo nomas grandecon.
Ni havas la grandecon de la tabelo.
Nun se ni reiru al kio ni parolas pri antaŭe,
Mi kredas Missy enportis la punkto ke kion ni bezonas por fari estas atingi la longo de la tabelo
kaj dividu per 2, kaj kiu donos al ni la mezpunkto.
Ni vidu.
Ĉu mi povas havi iu skribos ĉi tion kaj savos ĝin en lian spacon?
Kion pri Leila?
Ĉu mi povas havi vin skribi tion en?
Skribu la unuan linion, kie vi prenas la longo de la tabelo kaj akiri la mezpunkto
kaj stoki ĝin en nova variablo.
Mi donos al vi paro sekundoj. Ĉu vi pretas?
[Studenta inaudible]
Certe, mi povus esti vi kalkuli la mezpunkto
de la fojnamaso tabelo interne de la serĉo funkcio
uzante la longo de la fojnamaso tabelo, kiu estas la grandeco variablo?
Nenio malfacila tie.
[Leila] Just grandeco / 2 kaj nur-
Per ĝi, kaj batis la klako sur la butono tien je la supro,
kaj ni treni ĝin.
Perfekta.
Tie ni iru. Awesome.
>> Kiel estas, estos ĉi kompili?
[Leila] Ne, ĝi bezonas esti pli alta.
[Nate] Yeah, do kion ni bezonas por fari?
[Leila] Kiel int mezpunkto aŭ iu.
Awesome. Yeah, ni faru tion, int mezpunkto = grandeco.
Ĉu ĉi kompili?
Ni forigu ĉi tiun komenton kaj akiri ĝin de la vojo.
Kio ne kompili pri tio?
Ni ne faras ion per entjero,
do ni bezonas por presi ĝin aŭ io kiel tio.
Yeah, precize.
Ni ricevas neuzitaj variablo.
Kion alian ne tuj funkcias pri tio?
Mi opinias, ke vi diris ion, Sam. Punktokomojn.
Yeah, mi mankas tiuj punktokomojn.
Ĝi tuj estos konstanta afero dum la fluo de la termino.
La fina afero mi faras estas mi metos kelkajn blanka spaco ambauxflanke
de ĉi tiu operatoro tie, ĉar tio estas tipe kiel ni faros ĝin
laŭ nia stilo gvidas.
Ni havas la mezpunkto de nia tabelo.
Nun se ni memoras reen al nia algoritmo,
kio estis la dua ŝtupo, ke ni devis fari iam ni havos la mezpunkto?
[Studenta] Se estas granda [inaudible].
Yeah, do ni devas fari ian komparon, kaj kion ni komparas tie?
Vi diris se ĝi estas pli granda ol. Kio estas en tiu frazo raportante al?
La nombro kiu venas supren, se tio estas pli granda ol la mezpunkto, do iru al la tabelo?
Precize, do la nombro kiu venas supren, kiam ni-
La nadlo, do ni komparas al la nadlo,
kaj kion ni komparas kontraŭ la nadlo?
Ĉar la kudrilo estas kion ni serĉas.
Ni kompari ĝin por atingi la mezpunkto.
>> Sed ne havas sencon por kontroli por vidi
se nadlo = mezpunkto?
Ĉu tio havas sencon?
Ĉu neniu malkonsentas?
Ni provu, se (nadlo == mezpunkto).
[Studenta] Do printf vi trovis ĝin.
[Nate] printf ("Ni trovis! \ N");
Alie-I'm tuj komenci fari ion malsaman tie.
Mi tuj komenci metante krampoj ĉirkaŭ se deklaroj tutan tempon
nur ĉar se ni adicias pli aĵoj, tiam
ni ne atingas la tradukiloj.
Yeah, Sam. Vi havas punkton.
La problemo estas ke mezpunkto reprezentas pozicion en la tabelo,
sed vi povas akiri ĝin por reprezenti la valoron en tiu pozicio de la tabelo.
Tio estas granda punkto.
Ĉu ĉiuj auxskultu, kion Sam diris?
Li diris ke mezpunkto kiel estas
reprezentas nur pozicion en la tabelo, sed ĝi ne estas la efektiva elemento en la tabelo.
Se vi pensas pri la kodo kiel skribita ĝuste nun,
se ni rigardas tiun tabelo cxi tie, kiu havas 8 elementoj en ĝi,
kio estas la valoro de mezpunkto tuj estos en tiu funkcio?
[Studenta] 4.
[Nate] 4.
Se ni serĉas la numero 4 -
kaj ni povas nur funkcii ĉi kodo kaj metis iom malĝoja vizaĝo ĉi tien
ĉar ni ne trovis ĝin-se ni kuras ĉi kodo
kiel estas nun, alŝuti ĝin, konstruaĵo, lasu min rulumi malsupren,
kaj se ni serĉas la numero 4,
ni trovis ĝin, sed ni ne ricevis ĉi tion al printf jes.
Unu kialo estas ke ni ne revenis vera,
sed ni vere trovos la numero 4?
Kaj Sam diras ne.
Kion ni trovos?
Ni vere trovis la mezpunkto, kiu se ni rigardas la tabelo cxi tie,
ĝi tuj estos la elemento en indekso 4 kiu ni rigardas,
kiu estas 23.
>> Kiel ni fakte havas tiun elementon en la mezpunkto
kaj ne nur la mezpunkto mem?
[Studenta] Ni enirus char ia?
Kion tio do, ĝuste pro scivolemo?
Ĉu vi povas ellabori iom pli?
Vi devas transformi la pozicio en la kalkulon,
tiel vi devas fari iun rilaton-Mi kredas ke estas char, sed eble ne.
Yeah, tio estas bona punkto.
Ni estis farante multe da ĉi konvertanta pozicioj en signoj, tiuj gravuloj,
en la unuaj du problemo aroj.
Rezultas, ke ĉi tie, ĉi tiu estas preskaŭ simila al
aliru la th,-a karaktero ene de kordoj, se tiu havas sencon.
Ĉi tie ni volas aliri la mezpunkto elemento.
Kiel ni faru tion?
Kevin, ĉu vi havas sugeston kiel ni povus fari tion?
Vi povus fari fojnamaso, malferma krampo, meze, fermita krampo.
Ĉu vi povas skribi ke por ni?
Konservu ĝin en ĉi tie, kaj ni tiri ke ĝis.
Ni rigardis tiun linion 9,
kaj ni rimarki ke ni ne volas kompari la nadlo al la mezpunkto,
sed anstataŭe, ni volas kompari la nadlo
al la elemento en la pozicio mezpunkto ene niaj fojnamaso tabelo.
Cool.
Tie ni iru.
Yeah, kiu similas sufiĉe bona, se (nadlo == fojnamaso [mezpunkto]).
Ni trovis ŝin.
Nun se ni kuras la kodo-we'll back up iom-
kompilas, ĝi kuras, kaj nun se ni serĉas 4,
ni ne trovis ĝin ĉar nun ni vere ricevas la numeron 23.
Ni nun estas la valoro 23, kaj tio estas kion ni komparas al nia nadlo.
Sed tio estas bona. Tio estas paŝo en la ĝustan direkton.
>> Tion ni provas fari.
Ni ne provas kompari la nadlo kontraŭ pozicioj en la tabelo
sed prefere kontraŭ la efektiva elementoj en la tabelo.
Se ni retrorigardas denove nun dum la venonta paŝo en nia algoritmo,
kio estas la sekva paŝo?
Leila jam menciis mallonge.
[Studenta] Kontrolu por vidi se ĝi estas pli granda ol aŭ malpli ol kaj poste decidu kiun vojon movi.
[Nate] Jes, do kiel tio ni faras tion?
Ĉu vi povas meti en iu-I'll savi ĉi revizio,
kaj poste, se vi metas en iuj linioj kiuj faros tion.
Yeah, Charlotte. >> Mi havas demandon.
Devus ne estus mezpunkto - 1 ĉar la unua afero estas
ĝi estas 0 indeksita, do se ni metas 4, kiu estas ne reale la karaktero ni serĉas?
Jes, kaj la alia problemo kun tio estas-
ke estas granda kaptaĵo, ĉar kio tuj finos okazas eble
se ni plenumas movante kaj ni ne cxiam ĝustigi komence?
Mi supozas, kion ni povus fini faras provas aliri
la elemento en la 8a pozicio de la tabelo,
kiu en ĉi tiu kazo ne ekzistas.
Ni volas fari ian librotenado por la fakto
ke ni havas kelkajn nulo indeksado.
[Charlotte] Pardonu, mi volis diri mezpunkto - 1 en rektaj krampoj.
Ni povas fari tion.
Ni revenos al tiu demando en nur iom.
Iam ni komencas atingi la realan looping,
jen kiam ni vere vidas ĉi venos en ludo.
Por la momento, ni povas fari tion, sed vi estas tute prava.
Ke nulo indeksado havos efikon, ke ni bezonas klarigi.
Ni vidu.
>> Kiom estas la pli granda ol kaj malpli ol-?
[Studenta] I get kiel fari la plej grandan ol kaj malpli ol parto.
Mi nur ne estis certa kio presi se vi trovas ke estas malpli ol la fojnamaso mezpunkto aŭ pli granda ol.
Ĉi tie mi povas savi kion I've-
[Nate] Jes, se vi konservos kion vi havas, kaj ni treni ĝin.
Tie ni iru.
[Studenta] Kaj mi metis demandon markojn por kio mi ne scias.
[Nate] Tio aspektas granda.
Jen ni havas demandon markoj ĉar ni ankoraŭ ne scias
kion ni tuj sufiĉe fari ankoraŭ.
Kion ni volas fari-oops, ni havas kelkajn krampoj ĉiuj funky nin.
Ni korekti tiujn krampoj.
Tie ni iru.
Kaj tiel kion ni volas fari, laŭ nia algoritmo,
se ni ne trovos la nadlo?
Diru en la kazo ke la kudrilo estas malpli ol tio, kion ni rigardis. Kevin.
Nur rigardu la maldekstra duono.
Bone, do ni metos komenton ĉi tie kiu diras "rigardu maldekstra duono."
Kaj se la kudrilo estas pli granda ol la fojnamaso en la mezpunkto, kion ni volas fari?
[Studenta] Tiam vi rigardas la dekstra duono.
Rigardu la dekstran duonon, "rigardi dekstren duono."
Ne tro deshilachado.
Konsentite, do ĉe ĉi tiu punkto, aĵoj serĉas sufiĉe bone.
La problemo kun la kodo kiel skribita estas kio?
[Studenta] Vi ne finpunktoj por la duonoj.
Bone, ni ne havas finpunktoj por la duonoj.
Ni ankaŭ estas nur tuj iros tra ĉi fojon.
Ni nur tuj rigardi unu mezpunkto.
Ĉu la ero estas tie, aŭ ĝi ne estas.
Por kompletigi tion, ni devos fari ian ripeto.
Ni devas subteni ripetante ĝis ni trovos ke
ĉu la ero estas en tie ĉar ni striktas malsupren kaj fine trovis ĝin,
aŭ ĝi ne tien ĉar ni rigardis tra ĉiuj aĵoj
en la taŭgan duonoj de la tabelo, kaj trovis, ke nenio estas tie.
>> Kiam ajn ni got ĉi ripetado okazas, kion ni tuj uzos?
[Studenta] A ciklo.
Ia buklo. Jes.
[Studenta] Povas fari do-dum loop kaj havas ĝin faru tion kaj poste dum
la nadlo ne egala-I'm not sure kie mi iras kun tio.
Sed ia kiel fari tion dum ĝin ne egala la valoro ke la eniro de la uzanto.
Yeah, do ni vidu, kiel povus tiu skribi mem?
Vi diris ni uzu do-dum ciklo.
Kie la fari komenco?
[Studenta] Ĝuste post la grandecon / 2.
[Nate] Okay, kaj kion ni tuj fari?
Ni plenigu la posta momento.
Kion ni faru?
[Studenta] Do ni ne volas fari la tuton ni havas en la se parto?
[Nate] Do ĉio ĉi stuff, granda.
Kopiu kaj pasto.
Ho, viro.
Ni vidu se tio funkcias, se ni povas langeto tion.
Bela.
Okay, kaj ni savos ĉi tiel vi infanoj havas ĝin.
Bone, kaj ni tuj faros ĉi tion dum-
kio estis la dum kondiĉo vi estis post?
[Studenta] Dum la nadlo ne egala, do kiel la ekkrio punkto.
Sed mi ne certas precize kion tio estas ankoraŭ.
[Nate] Jes, tio estas unu maniero por fari ĝin.
Sam, ĉu vi havas komenton?
[Sam] Mi memoris kiam mi rigardis la filmetoj,
Mi prenis ekrankopio de unu el la-kiel kiam ni faris la _pseudocode_ por tio,
estis iu rilato inter max kaj min.
Mi kredas ke estis io kiel se max estas cxiam malpli ol min.
Got it.
[Sam] Aŭ kiel se max estas ne malpli ol min aŭ io simila,
ĉar tio signifus, ke vi esplorrigardis ĉion.
>> Yeah, do kion faras ĝi sonas kiel max kaj min estis en referenco al?
[Sam] Valoroj ke-entjeroj kiuj tuj ŝanĝos
relativa al kie ni metas la mezpunkto.
Ekzakte.
[Sam] Je tiu punkto, ĝi tuj [inaudible] kalkuli la max kaj min.
Mezpunkto estas ĉi max kaj min ideo.
Ĉu tio havas sencon al homoj?
Se ni devis komenci rigardi kiel ni tuj faros ĉi ripeto,
vi estas tute pravas ke ni volas uzi ian do-dum ciklo.
Sed mi supozas, se ni memoras kio okazas en la loko de tiu tabelo
kaj kio fakte okazas-I'm tuj skribos ĉi tien-
je la unua ripeto de duuma serĉo, ni havas-
Mi tuj uzos b kaj e al signifi la komenco.
Kaj poste la fino de nia tabelo.
Ni scias ke la komenco estas je 4 rajton super ĉi tie,
kaj ni scias, ke la fino estas ĉe 108.
Diru ni sercxas la numero 15.
La unua fojo ni faru tion, kiel ni vidis antaŭe,
la mezpunkto estas ĉu tuj estos 16 aŭ 23
dependanta sur kiel ni kalkuli aferojn.
Ekde egale dividi en la mezo donus al ni ĉi tiu spaco
inter 16 kaj 23, ni ne povas ekvilibre dividi ĝin
aŭ dividi ĝin kaj atingi veran mezpunkto.
Ni rigardu 16.
Ni rimarkas "Hej, 16> 15 kiu ni serĉas."
Por tiam rigardi la maldekstra duono de la tabelo
kion ni finos faras estas forĵetante
ĉi tiu tuta supra parto
kaj dirante, "Okay, nun nia fina punkto tuj estos ĉi tie."
La sekva ripeto de nia ciklo, ni nun rigardas ĉi tabelo,
efektive esti forĵetita ĉi parto ĉar nun
se ni prenas la mezpunkto esti la diferenco inter la komenco kaj la fino,
ni trovos nian mezpunkto esti 8,
kiuj ni povas tiam provi 8 por vidi kie estas en rilato al la nombro ni serĉas,
15, trovi ke 15 estas pli granda,
do ni devas movi al la dekstra parto de la listo,
kion ni scias ĉar ni estas homoj, kaj ni povas vidi ĝin.
Ni scias, ke la dekstra parto tuj estos kie ni trovos ĝin,
sed la komputilo ne scias tion, do kion ni faros estas ni reale
esti ĉi iru, kaj nun la komenco kaj la fino
estas la sama loko, do la mezpunkto iĝas la sola nombro en la listo en tiu punkto,
kiu estas 15, kaj ni trovis ĝin.
Ĉu kiu versxis iom lumigi kie ĉi tiu tuta max kaj min skribmaniero tuj,
konservanta trako de la finpunktoj de la tabelo por elkompreni
kiel mallarĝigi aĵoj malsupren?
>> Kio okazus se ĉi tio ne egalan al 15 nun?
Kio se ni serĉis 15 kaj, anstataŭe, ĉi tiu nombro estis ankaŭ 16?
Ni ŝatus diri: "Ho, ĝi estas pli granda.
Ni volas reiri al la maldekstra. "
Kaj ni volas movi nian e al la dekstra,
je kiu punkto ni havas fina punkto kiu estus konflikto.
Ĝi ne povos serĉi plu elementoj
ĉar nun ni havas niajn fina punkto kaj nia komenco punkto,
nia max kaj nia min, nun spegulita.
Ni serĉi tra la tuta tabelo. Ni ne povas trovi ion.
Tio estas la punkto je kiu ni volas volas diri, "Konsentite, ni tuj haltos ĉi tiu algoritmo.
Ni ne trovis nenion. Ni scias ke estas ne en ĉi tie. "
Kiel tiu iras?
[Studenta] Kiel ĝuste faras la komputilo ŝanĝi la fino?
Kiel la fino finos antaŭ la komenco?
La fino finas antaŭ la komenco
pro la math ke ni tuj faros ĉiu tempo ni faras tion.
La vojo ni interŝanĝi estas se vi rigardas la tre unua fojo ni faros ĉi interŝanĝo
kie ni havas la komenco en 4 kaj la fino
tuta vojo antaux 108 kaj nia mezpunkto, diru al la 16 -
Mi tuj nuligi ĉi reen al 15-se ni serĉas la 15,
ni sciis ke kion ni faris kiam ni kontrolis la 16 kaj vidis, ke gxi estis pli granda
kaj volis forĵeti la tutan dekstran parton de la listo,
ni vidis ke tio, kion ni volis fari estas movi ĉi TTT ĉi tie.
Efektive, la TTT got movita al unu antaŭ la mezpunkto.
Simile, kiam ni faris ĉi ripeto de la algoritmo
kaj la mezpunkto estis en 8,
ni trovis, ke 8 <15, do ni volis movi la b
unu preter la mezpunkto.
Nun, la komenco kaj la fino estas ambaŭ kune en ĉi 15.
>> Se ni volas estis okazante serĉi iun alian valoron, ne 15,
aŭ se tiu 15 estis anstataŭe estis 16,
ni trovis ke la kaj ni volas movi unu antaŭ la mezpunkto.
Nun la TTT estus tie spegulita malpli ol la b.
Ni marŝas tra kiel ni vere finu kodigo ĉi tiu algoritmo.
Ni scias, ke ni volas havi ĉi mezpunkto kalkulo.
Ni scias ankaŭ, ke ni volas spuri la komenco kaj la fino de la tabelo
de nia nuna tabelo do ni povas kalkuli
kie ĉi maldekstra duono de la listo estas kaj kie la dekstra duono de la listo estas.
Ni faras tion kun ĉu komencos kaj finos,
aŭ ni povas nomi ilin min kaj max.
Mi uzas komenci kaj fini ĉi tiun fojon.
Kiam ni komencos, se ni retrorigardas al nia ekzemplo cxi tie,
nia komenco estis fiksita al la komenco de la tabelo, kiel natura.
Kio indekso estis tio? Kion nia komencos esti?
Daniel.
[Daniel] Haystack [0].
[Nate] Jes, tiel ni povus agordi ĝin egala al fojnamaso [0].
La problemo, tamen, estas ke tio donas al ni ne la pozicio de la unua ero.
Ĝi donas al ni la indekso de la unua elemento aux la efektiva valoro je tiu unua pozicio.
[Studenta] Tio igos al .20?
[Nate] Kio ĉi faros estas-nu, ne faros Konvertado.
Kio faros estas ĝi stoki 4 en komenci,
kaj tiam estos malfacile fari komparojn kontraŭ komenci
ĉar begin estos tenante la valoro de 4,
kiu estas la komenco de nia tabelo,
sed ni volas spuri la indeksoj en la tabelo
kontraste al la valoroj.
Ni efektive uzi 0, tiel.
Por la fino de la tabelo-Charlotte alportis tiun supren iom antaŭe.
Tie estas kie ni prenos en konsideron la nulo indeksado.
>> Charlotte, kio estas la fino de la tabelo?
Kio estas la indekso de la fino?
[Charlotte] Grandeco - 1.
Yeah, kaj kiun grandecon devus ni uzi?
Ĉu necesas uzi ĉefurbo grandeco aŭ minuskla grandeco?
Ĉefurbo grandeco.
En ĉi tiu kazo, ni povus uzi ĉefurbo grandeco.
Se ni volis tiun funkcion por esti portebla
kaj uzi ĉi tiun funkcion en aliaj programoj,
ni povas reale uzi minuskla grandeco.
Ĝi estas bone ankaŭ.
Sed Charlotte estas tute pravas ke ni volas havi grandecon - 1.
Je ĉi tiu punkto-
[Studenta] Kial vi povas uzi majusklajn grandeco?
Kial ni povus uzi majusklajn grandeco?
Ĝi rezultas ke tiuj # difinu estas vere,
sub la kapuĉo, teksto kiel trovi kaj anstataŭigi, se tiu havas sencon.
Kiam vi kompili vian kodon, la preprocesamiento fazon
de la tradukilo iras tra la dosiero,
kaj serĉas ĉie, ke vi skribis ĉefurbo grandeco,
kaj ĝi anstataŭas tiu teksto laŭvorte kun 8, ĝuste tiel.
En tiu senco, estas tre malsama de variablo.
Ne levu neniun spacon en memoro.
Ĝi estas simpla teksto anstataŭigo artifiko.
En ĉi tiu kazo, ni tuj uzos grandeco.
De tie ni volas fari ian ripeto,
kaj ni estas sur la ĝusta vojo kun niaj do-dum ciklo.
Ni volas fari ion ĝis kondiĉo ne teni plu,
kaj kiel ni vidis antaŭe, ni vidis, ke tiu kondiĉo
ja estis, ke ni ne volas la fino
esti malpli ol la komenci.
>> Ĉi tiu estas nia haltante kondiĉo.
Se tio okazas, ni volas halti kaj deklari kiel, "Hej, ni ne trovis ion."
Por esprimi tion, ni volas uzi ian buklo.
En ĉi tiu kazo, ĉu estos do-dum ciklo, a por ciklo, tempo buklo?
Ni havas do-dum buklo tie.
Ĉu vi infanoj kiel tiu alproksimiĝo?
Ĉu vi kredas ke ni devus provi malsaman alproksimiĝon?
Kevin, ajna pensoj?
Ni povus havi dum buklo ĉar ni scias maksimuma
estus pli granda ol min en la komenco anyways.
Yeah, do ne estas inicialización kiu bezonas okazi.
Tiuj do-dum cikloj estas grandaj kiam vi devas pravalorizi ion
antaux tiam provi, dum ĉi tie
ni scias ke ni ne tuj observu reinitializing ambaŭ komencas kaj finas
ĉiu ĉirkaŭvojo de la ciklo.
Ni scias, ke ni volas pravalorizi ili, tiam kontrolu nian kondiĉo.
En ĉi tiu kazo, mi efektive iru kun simpla dum ciklo.
Ĝi rezultas ke do-dum cikloj estas uzataj sufiĉe malofte.
Multaj lokoj eĉ ne instruas fari dum cikloj.
Ili estas bona por uzado uzanto enigo, do ni vidis multajn el ili ĝis nun.
Sed normala kaj dum cikloj estas multe pli komuna.
Ĝi rezultas ke tiu kondiĉo kiel skribita
ne vere nin tre bone, kaj kial estas tiel?
Mi bedauxras, mi ne konas vian nomon.
Mi Jerry. >> Pardonu?
Estas B-ho-R-U-mi.
Ho, bone.
Mi ne vidas vin en mia listo.
Ho, ĝi estas ĉar-oh, tio havas sencon.
Ĉu vi havas ideon pri tio, kial tiu dum buklo eble ne funkcios kiel intencita,
kiel skribita kun la kondiĉo?
[Jerry] You mean kiel vi volas la tuton post gxin en la-?
Yeah, tiel ke estas unu.
Ni eble devus meti ĉiuj ĉi aĵoj en la dum buklo, plene vera.
La alia afero ke estas iom pli problema, kvankam, estas ke tiu kondiĉo ne funkcias.
[Studenta] Vi devas klaki ĝin.
Bone, do ĉi tiu kondiĉo ne cxiam veras komence la maniero ni parolis pri ĝi.
Ni volas fari ion ĝis fino <komenci,
sed ni volas fari ion dum
komenci ≤ fino.
>> Jen tiu inversio de la logiko tie.
Mi estas kulpa de fari tiujn erarojn la tutan tempon.
[Studenta] Kial ĝi devas esti malpli ol aŭ egala al?
Ĉar vi memoras la kazo ke ni alvenis al
kie estis nur unu elemento, kaj ni estis sube,
kaj ni rigardas nur la 15 en nia tabelo?
Kaj nia komenco kaj nia fino estis la sama elemento.
Ni volas certigi ke ni manipuli tiu kazo.
Se ni faris rektan malpli ol,
ni nur povos akiri suben al 2-elemento tabelo.
Iam ni deiris al tiu lasta elemento, se tiu estis nia ero, ni dirus neniam trovos.
Nun ĉi tie, ni povas fari precize kiel vi diras.
Ni povas komenci plopping stuff rekte en la mezo de nia tempo buklo.
Ni povas plop en nia mezpunkto.
Ni povas preni ĉiujn el tiuj se deklaroj,
tiri ilin el tiu do-dum ciklo,
plop ilin,
purigi aĵojn iom,
kaj mi iros antaŭen kaj savi ĉi revizio.
Kaj je tiu punkto, ni ricevas belajn proksima.
Sam.
Mi kredas ke vi ankaŭ devas havi int mezpunkto = grandeco - 1/2.
Havas ĝin, grandeco - 1/2.
Ĉu estas io alia necesas ŝanĝi pri tiu linio?
Tio estis bona kaptaĵo.
>> Kion grandeco fari? Ĉu ni iam ŝanĝi grandeco?
Por subteni la linion kiel ĉi tiu, ni devas ŝanĝi la grandecon.
Ni devas ŝanĝi la grandecon ĉiufoje ni iru ĉirkaŭ la por buklo.
Sed memoru, kiam ni iris tra nia ekzemplo malmulta antaŭe,
kaj ni havis la komenco al 4
kaj la fino la tutan vojon tra ĉe 108?
Kiel ni kalkuli la mezpunkto?
Se ni uzi la grandeco?
Aŭ ni uzis komenci kaj fini anstataŭe?
Ĝi estas la diferenco inter la fino kaj komenco.
Precize, kaj kiom precize mi skribos tion, Charlotte?
Nur fini - komenci.
Vi ne bezonas fari la - 1
ĉar la - 1 estis inkludita en la fino kaj la komencos jam.
[Nate] Granda, vi estas tute prava.
Ni ne devas fari la - 1 ĉar tio - 1 estis inkludita
kaj konsistigis kiam ni pravalorizi la fino variablo.
>> Ĉu estas io alia mi bezonas fari sintakse havi tiun linion sencon?
[Studenta] Plus komenci. >> Plus komenci?
[Studenta] Je la fino.
Ĉar ĝi estas nur kalkulita duono la longo.
Vi devas aldoni la komenci.
[Nate] Kion tio kalkuli por ni?
Se ni pensas pri fino de la nuna unua ripeto de la ciklo,
fino tuj estos en pozicio indekso 7.
Begin estas en pozicio 0.
Memoru, ni serĉas ĉu
pozicio 3 aŭ pozicio 4.
Se ni rigardas tiun matematikon, nur por igi ĝin iom pli palpebla,
meti iujn numerojn tie, ni havas 7, 0,
tiom 7 - 0, kaj tiam / 2
Estas 3 en entjera divido, kiu estas.
Do ni bezonas tiam aldoni reen nia komenci?
Ni ne en ĉi tiu kazo.
En la unua ripeto, estos bone ĉar begin estas 0.
Sed kiel ni progresas, ni faru vere ĉiuj devas nur
fino - komenci / 2.
Estas unu alia lertaĵo tie, kaj tiu estas nome unu el prioritaton.
[Studenta] Do ni bezonas krampojn?
[Nate] Ĝuste, kaj tio estas ĉar se ni ne metas tiujn krampojn,
tiam ĉi tiu linio estos interpretita anstataŭ
kiel (fino) - (komenci / 2), kiun ni certe ne volas.
Atentu por tiuj prioritaton reguloj.
[Studenta] Kial ne fini + komenci?
Kial ne fini + komenci?
[Studenta] Kial ne tio?
Kial ĝi estas +?
Mi kredas ke vi pravas.
[Studenta] Ĉar estas averaĝa?
[Nate] Fino + komenci, vi estas tute prava.
Wow, mi tute goofed. Vi pravas.
Se ni faris la minus, ni volus aldoni la komenci reen in
En ĉi tiu kazo, vi estas tre dezirinde, ke ni volas preni la mezumo de la du,
tial ni volas aldoni ilin, kontraste subtrahi ilin.
[Studenta] Estus ankaŭ funkcios se vi faris finon - komenci / 2 + komenci.
Ĝi farus se ni do-mi kredas tion.
>> Ekzemple, se ni rigardas komenci,
kaj ni ŝanĝis ĝin ĉi tie
al la 15.
Nun komencu estas en la pozicio 2.
Fino estas en la pozicio 7.
Se ni subtrahi ilin, ni preni 5.
Dividu ke per 2, ni ricevas 2.
Kaj poste ni aldonu 2 reen en,
kaj kiu alvenas al ni la 4a pozicio,
kio estas ĉi tie, kiu estas la mezpunkto.
[Studenta] Do necesas prizorgi envolviendo?
En kiu senco Kion ni bezonas prizorgi envolviendo?
Se la sumo aŭ la diferenco inter
dependanta sur kiel ni faras ne estas para nombro.
Tiam la komputilo prenas konfuzita ĉu kiam estas 2,5;
vi movas al la maldekstra aŭ la dekstra por determini kiu estas la mezpunkto?
Got it.
Rezultas ke kun entjera divido,
ni ne akiros tiujn glitpunktaj nombroj.
Ni neniam akiris la decimala.
Ĝi estas tute forĵetita.
Se vi havas komputilon dividi du int variabloj,
kaj unu estas 7, kaj la alia estas 2,
vi ne ricevos 3,5 kiel rezulto.
Ĝi havos 3.
La resto estos forĵetitaj, do ĝi estas efektive rondigas-
ne ronda sed prefere etaĝon, se vi infanoj bone konas ke en Y,
kie vi tute forĵeti la dekuma,
kaj tiel vi esence detranĉante ĝin al la plej proksima
tuta pozicio, al la plej proksima tuta nombro.
[Studenta] Sed tiam tio estas problema ĉar se vi havas tabelo de 7 elementoj
tiam kiu aŭtomate prenas la 3a ero el la mezpunkto anstataŭ la 4a.
Kiel ni trakti tion?
Estas problema ĉar se ni havis tabelo de 7,
estus elekti la 3a anstataŭ la 4a.
Ĉu vi povas klarigi iom pli?
[Studenta] Ĉar se vi havas 7 elementoj tiam la 4a ero
estus la mezpunkto, ĉu ne?
Memoru vian komenton pri esti nulo indeksita, though.
[Studenta] Jes, tiel en pozicio 3. Kiu estus la mezpunkto.
Yeah.
Ho, bone. Mi vidas tion, kion vi volas diri.
Estas ia stranga, kiel ni kutimiĝas al ĉi tiu tuta nocio de
liverante el glitpunktaj nombroj.
Tio estas granda punkto.
Ni finos ĉi supre.
Ni kalkulas niajn mezpunkto.
>> Ni provante vidi se nia nadlo estas egala al la meza valoro.
Ni presi ke ni trovis ĝin, sed vere, kion ni volas fari en ĉi tiu situacio?
Ni trovis ĝin, do ni volas lasi la telefonanto scias, ke ni trovis ĝin.
Ni havas funkcion kiu estas bulea tajpitaj funkcio.
La vojo ni signali al la telefonanto de nia funkcio kiu ni pretas iri
estas ni diras, "Hej, ĉi tiu estas vera."
Kiel ni faru tion, Kevin?
Vi kapjesante via kapo. >> [Kevin] Add reveno vera.
[Nate] Ekzakte, revenu vera.
Nun, se ĝi ne estas egalaj, kiel estus ni rigardas la maldekstran duonon?
Ajna ideoj?
Stella, ajna ideoj?
Vi devas agordi novan pozicion por fino.
Yeah.
Do ni devas fari pozicio de mezpunkto - la fino.
Granda.
Ni bezonas establis novan pozicion por la fino
rigardi la maldekstra duono.
Ĉi tio estis kio ni parolis pri antaux kie
Mi plu iri reen al ĉi tiu ekzemplo.
Mi la komenci ĉi tie, kaj tiam mi havas la fino la tutan vojon tra tie.
>> Denove, se ni serĉas 15, kaj nia mezpunkto estas je 16,
kaj ni rimarkas, "Oops, 16 estas pli granda.
Ni volas movi al la maldekstra duono. "
Ni devus tiam movi la fino al la 15,
kaj ni faru tion per prenante unu for de la mezpunkto
kaj opcio ke nia nova fino.
Same, se ni volas rigardi la dekstra duono, kiel estus ni faru tion?
Ĉu vi havas ideon?
[Studenta] Vi nur starigis komencas mezpunkto + 1.
[Nate] Granda.
Kaj nun en la kazo, ke ni ne trovis nenion,
ĉu tio akiri zorgo por ni?
Daniel, ĉu tio get zorgo por ni?
[Daniel] No
[Nate] Se ni faras ĝin tra la tuta tabelo kaj ni ne trovos nenion,
kie estus ke atenti, aŭ ni atentas pri ĝi?
[Daniel] La dum kondiĉo.
[Nate] Jes, la dum kondiĉo, precize.
Ĝi prizorgos iranta tra la tuta tabelo se ni ne trovos ion.
Tiu dum buklo finos.
Ni neniam renkontis tiun kondiĉo,
kaj ni povas reveni falsaj.
Ni povas ankaŭ lasi ĉi se en tie kiel ĉi
ĉar se ĉi se aserto estas vera,
kaj nia funkcio revenos,
kaj tiel ni esence aborti ĉi funkcio je ĉi tiu punkto
kiam ni revenas vera.
Sed kio okazas kun ĉi tiu strukturo tie?
Ĉu ĉi tiu funkcias tute, aŭ ĉu estas iu logika difekto en tie?
>> Ekzistas iu logika difekto en tie, kun la maniero ĝi estas kreita.
Kio povus esti?
[Studenta] Kial vi bezonas la - kaj + 1s?
Kiu elmontras nian tabelo por esti nia nova maldekstra duono kaj dekstra duono.
[Studenta] Sed kial ne vi tion sen la - 1s kaj + 1s?
[Nate] Ni povus agordi ĝin egala al la mezpunkto?
Kio povus esti problema pri tio?
[Studenta] mi supozas ke estas senutilaj, ĉar vi kontrolanta valoro ke tio jam estas kontrolata.
[Nate] Ekzakte, do Sam estas tute prava.
Se vi turnos la fino kaj la komenci egala al la mezpunkto
anstataŭ - 1 kaj +1 mediteme,
en iu punkto en la estonteco ni finos kontrolanta la mezpunkto denove.
[Studenta] mi komencis la pset, kaj tiam mi havis ion tian
kie mi forgesis la + 1, kaj ĝi got ŝtopita en senfina ciklo.
Ĝuste, ĉar je iu punkto vi neniam iras al get komenci kaj fini
por fakte koincidas.
Cool.
Estas unu pli logike difekton, kaj tio estas ke tiu devus esti definitive
oni alie se.
Kial povus tiu esti?
>> La kialo estas, se ĝi estas ne alie se-vi vidas, Kevin?
[Kevin] Jes, ĉar vi ŝanĝi la ekstrema punkto.
[Nate] Ekzakte.
Ni ŝanĝi la fina punkto,
kaj se ĝi estas skribita kiel ĉi-we'll fari spacoj inter-
ĝi kontrolu ĉi tiu kazo.
Ĉi tiu kazo, se ĝi sukcesos, ĉu aborti el la funkcio.
Tiam kontrolos ĉi sekva kazo,
kaj se ĉi okazas, ĝi ĝustigos la fina punkto,
kaj tiam sekvos en kaj kontrolu ĉi tiu kazo.
Sed en ĉi tiu punkto, ni ne volas daŭrigi kontroladon.
Feliĉe, ni ne retrovu la mezpunkto tie,
kaj ni scias, ke ĉi tiu kazo ne sukcesos.
Sed ni certe volas meti la alian se tien
kvankam ke eble-en ĉi tiu kazo
ekde ni ne modifu la mezpunkto, estus ke fari diferencon?
Ne, ĉar ĉi tiuj kazoj estas ĉiuj ekskluziva.
Denove, mia malbona.
Ni ne, mi kredas, bezonas tiun alian se.
Ni povas doni provi kaj ruli ĝin kaj vidos kio okazas.
Konstruaĵo, eraro okazis.
Verŝajne ĉar mi forlasis tiujn b aj kaj e la en ĉi tie.
Ĉu mi devas plu el tiuj ĉe la supro?
Ĝi ne aspektas ĝi.
Ni malzomi, konstrui,
tie ĝi iras, tiel nun se ni serĉi 15,
jes.
Lasu min zoom in
15, jes. Ni povas ruli ĝin denove.
Alŝuti fontkodo, konstruante, kurante.
Ni povas serĉi ion kiel 13,
kaj ni ne ricevas ion presi, do ĝi ne trovante ke por ni.
Tio estas granda, ĉar ĝi ne estas en nia listo.
>> Ni estas nun ekster tempo.
Tio tuj estu por ĉi tiu semajno.
Dankon pro via aliĝo, kaj vin vidos poste.
>> [CS50.TV]