[Powered by Google Translate] [Oddelek 3] [manj udoben]
>> [Nate Hardison] [Harvard University]
>> [To je CS50.] [CS50.TV]
>> V redu, začnimo.
Dobrodošli v tednu 4 CS50.
Če vidva odprla spletni brskalnik in odprla pset 3,
Boj z CS50, bomo začeli dogaja
z delom vprašanja tam.
Tako kot prejšnji teden, bomo delali v CS50 prostorov,
če boste tudi, da potegnite navzgor, kot tudi,
in če greš naprej in obiščite to povezavo, da sem dobil tu na vrhu.
To je čas, da bi začeli.
Imamo našo malo hi programa tukaj. Nič noro.
Ena od prvih stvari, ki jih želim storiti z vami danes je šel čez nekaj rešitev
Set za Težava 1, naravi primer rešitev,
samo zato, da boste dobili občutek za kakšne vrste osebja kode piše,
kakšne kode drugimi učenci pišejo,
in so si lahko pogled na to, ker vem, da je čudno
ko boste poslali rešitev nekega problema niz in dobil pripombe
na svojo različico, ampak včasih je koristno, da vidite, kako drugi ljudje to storil,
še posebej tisti, ki so lepo videti.
Za večino del, sem bil res navdušen nad rešitvami, ki proizvaja fantje.
Nisem še začeli iskati svoje 2s Set problem, ampak če si kaj takega prvi,
to ne pomeni nič, ampak dobrih stvari.
>> Če pogledate moje revizij, začnimo vso pot navzdol na revizije 1,
in bomo na hitro pogledamo na rešitev Mario.
Če potegnem gor, ti programi, da se bomo predstavili pravilna.
Ni bilo pravilnost vprašanja s temi problemi, ampak,
želimo govoriti malo informacij o različnih vprašanjih načrtovanja
da so bili tu uporabljeni.
Ena od stvari, ki se je zanimivo rešitev
je, da se uporablja ta nov konstrukt, imenovan funt opredeliti,
včasih imenujemo tudi hašiš opredeliti.
Naj približati tem tukaj.
# Define vam omogoča, da imena teh številk v programu.
V tem primeru je največja višina piramide v Mario
je 23 in ne 23, kot da bi v moji kodi-
mi bi jo, kot trdi kodiranje 23 -
Namesto tega daje ime MAX_HEIGHT na to številko,
tako da tukaj v moji do-while zanko
lahko dejansko nanašajo na MAX_HEIGHT
namesto da bi število 23 palcev
[Študent] Kaj je prednost s tem?
To je veliko vprašanje.
Ena je berljivost.
Prednost uporabe te # define je berljivost.
Ko berem te kode, vidim, kaj se dogaja.
>> Vidim, da sem v takem stanju, da smo testiranje
za višino pa <0, ki bi jih lahko opredelili tudi
da je najmanjša višina ali višina min.
Druga prednost je, da lahko potem preberite preostanek proge za prikaz
da smo tudi preverjanje zagotoviti, da višina ne presega višine max,
ker bomo še naprej, medtem ko je višina večja od višine maks.
Druga prednost je, če sem pomanjšanje malo tu-
če sem teči ta program in ga poženem, recimo, z 23 prav zdaj,
se bo izpisal vse vrstice 23, tako kot to.
Ampak rekel sem želel spremeniti višino max,
in zdaj želim, da se omeji maksimalno višino piramide
da je edini pravi človek, da je funky.
# Vključujejo , # define MAX_HEIGHT,
in recimo, da smo želeli določiti ga je enak 10.
Zdaj v tem trenutku, vse, kar sem moral storiti je spremeniti v tej enem mestu.
Lahko prevedem kodo, in zdaj, če sem poskusil in vnesite 12,
bo uren mi še enkrat.
V tem primeru, bomo le z uporabo MAX_HEIGHT enkrat.
Saj ne, da je velik šop trave, da gredo v
in ga spremenite v while zanko, če želite.
Toda v programih, kjer se sklicujete na isto čarobno številko
znova in znova, to # define mehanizem je zelo priročen
ker ste spremenili to enkrat na vrhu spisa, je običajno, kjer ste postavili ju-
in spremembe giblje skozi ostale datoteke.
>> Druge stvari, ki sem jih želel opozoriti na to nalogo, da sem mislil videti res lepo,
1 je poimenovanje spremenljivk.
Vidite tukaj, da imamo celih spremenljivke, imenovane vrstice in ti višina.
Prostori, haše, saj pomaga, da koda malo bolj berljivo,
Zato je malo bolj razumljivo, kaj se dejansko dogaja.
To je v nasprotju z uporabo, na primer, naključnih črk
ali pa samo klobasanje v celoti.
Zadnja stvar, bom poudaril, da je v for zanke,
Pogosto so ti Iterator spremenljivke, ti števci, ki jih uporabljate v vašem for zanke,
je standard in konvencionalne jim začne z i in nato J in nato k
in bo od tam, če potrebujete več spremenljivk,
in to je samo konvencija.
Obstaja veliko konvencij.
To je odvisno od programskega jezika, ki ga uporabljate.
Toda v C, smo ponavadi začnejo z i.
To nima nobenega smisla uporabljati, recimo, ali b
odvisno od situacije.
To je bilo za to.
Če zdaj dvigni Revizija 2, boste videli drugo Mario,
in to je podoben drugemu tistega, ki smo ga pravkar videli,
vendar pa nekaj nekako kul.
Če se ozremo na tem oddelku, tukaj notri notranja zanka,
oni z nekaj norega videti sintakso prav v tej vrstici.
To se imenuje ternarna operater.
To je, če drug izjavo strniti v eno vrstico.
Pogoj je ta del v oklepajih.
To je enako rekel, če j <višine - i - 1.
In potem, kaj je vsebina tega, če bi blok sta prostor
in potem je vsebina, kaj bi še lahko so to #.
To je v bistvu dodeljevanju prostora za te spremenljivke.
To je dajanje prostora na vsebino bloka spremenljivke,
če je ta pogoj izpolnjen, in če ta pogoj ni izpolnjen,
Nato blok spremenljivka dobi to #.
In potem, seveda, namesto izgradnje celotne niz
tiskanje in vse, kar je na koncu ta rešitev je natisne en znak naenkrat.
Precej kul.
>> Še nekaj stvari gledati. Mi bomo prešli na pohlepen.
Zdaj, če pogledamo požrešen, ta prva rešitev
uporablja ti # opredeljuje zelo malo.
Imamo ena konstanta je opredeljeno za vsako od različnih številk v tem programu.
Imamo eno za centov na dolar, eno za prostore, Dimes, nikelj, in penijev,
in zdaj, če smo se pomaknite navzdol in prebral kodo,
lahko vidimo standardno naredi vse, medtem ko zanke tiskanje ven.
Nekako Bistvo tega problema zaveda, da je
ste morali spremeniti plovec, da si preberete od uporabnika na celo
natančno math, in to zato, ker
s plavajočo vejico, kot smo govorili v predavanju na kratko,
ni mogoče natančno predstavljajo vsak vrednost na številko vrstice
saj obstaja neskončno mnogo vrednosti med 3 in, recimo, celo 3,1.
Lahko imaš 3,01 in 3,001 in 3,0001, in lahko naprej.
Izkazalo se je, ko delate z denarjem, pogosto želite pretvoriti
v obliki, celo tako, da ne boste izgubili penijev in da je vrsta stvari.
S tem, da je bila ključna in zaokroževanja.
Ta rešitev se uporablja povsem preprost, veliko algoritem,
ki decremented število preostalih centov, prvič po četrtletjih,
nato pa z drobižem, nato Nickels, nato penijev,
in dodal, da je število kovancev vsakič.
>> Druga rešitev, da bomo videli, ko sem pomanjšavo in pojdite revizije 4,
je imel zelo podoben začetek, ampak namesto tega uporabiti div in mod
Pravica tukaj za izračun števila centov.
To je število četrtletij je enako številu centov deljeno s 25,
In razlog za to je, ker deluje delamo celo število delitev,
tako da je ostanek zavržemo.
[Študent] Ali moramo komentirati iskanje?
Res je odvisno.
[Študent] boš komentiral več kot kodo tukaj.
Ja, in zato obstaja kup različnih filozofij o tem.
Moja osebna filozofija je, da vaša koda je res resnica,
kot kodo, kaj je dejansko izvajajo na računalniku,
zato bi bilo treba kodo tako berljivi kot je mogoče, da ne zahtevajo toliko pripomb.
To je dejal, če delaš stvari, ki so nekako zapleteno matematično
ali algoritmično, je dobro, da so pripombe, tako da lahko
dodamo še eno razsežnost, tretja plast, da kdor bere svojo kodo.
V teh rešitev, pogosto so komentirale precej bolj samo zato, ker
želimo, da bi lahko njihovo distribucijo in so ljudje, ki jih poberem
in jih bere zelo enostavno.
Ampak vsekakor se strinjam, da je to težko.
[Študent] Toda, ko ste v dvomih, pojdite težji?
Če ste v dvomih, pojdite težji.
Nekateri ljudje bodo rekli včasih Vračilo 0 ali kaj podobnega.
Mislim, da je neumno razmišljanje.
Jasno je, da je to, kar se dogaja.
Ne rabim angleščini povedati, da.
Včasih ljudje pišejo stvari, kot so "kthxbai!"
To je malo bolj sladek pa tudi ne-
da se to ne bi razliko med komentiranje točk ali ne.
Tovrstne ugotovitve so le ha, ha, ha.
Kul.
>> Na tej točki, začnimo delati na problemu Set 3 del vprašanj.
Če vi vleči to spet,
tako kot prejšnji teden, ne bomo na ogled kratke hlače v tem oddelku.
Pustili bomo, da počnete v prostem času in se pogovorite o vprašanjih.
Toda zdaj, v tem razdelku bomo porabili malo več časa
Govorimo o manj kodiranja osnov
kot smo prejšnji teden, in namesto, da bomo bolj osredotočiti na
malo več teorije, zato govorimo o binarnem iskanju in nato razvrščanje.
Od tistih, ki ste bili po skupaj s predavanjem,
lahko nekdo, dajte mi ponovno na tisto, kar je razlika
med binarnega iskanja in linearno iskanje?
Kaj se dogaja? Seveda.
Linearni zadetkov iskanja prek vsakega elementa v seznamu razvrščeni
enega po enega po enega po enega po enega,
in binarno iskanje deli seznama v 2 skupini,
Preveri, če vrednosti ključev, ki ga iščete, je večja ali manjša od vrednosti središčem
ki ste ga pravkar našli, in če je manj, kot gre v spodnjem seznamu
in potem deli še enkrat, pa isto funkcijo
vso pot navzdol, dokler se ne ugotovi, srednjo vrednost, enaka vrednosti same.
Prav.
>> Zakaj nam je mar?
Zakaj govorimo o binarnem iskanju primerjavi z linearnim iskanju?
Ja.
Binarni je veliko hitreje, tako da, če se dvakrat na velikost problema
je potrebno še en korak namesto dvakrat toliko.
Točno tako.
To je odličen odgovor.
Linearni iskanje je zelo preverjanje en element naenkrat,
in kot smo videli že prvi dan na predavanju
Ko je David šel s svojim zgledom imenika
in iztrga eno stran imenika naenkrat
in hraniti tem, da znova in znova in znova,
to se dogaja, da ga zelo dolgo časa, da bi našli nikogar v imeniku,
razen, seveda, je iskal nekoga na samem začetku abecede.
Z binarnega iskanja, lahko greš na veliko hitreje,
in to ne samo dvakrat hitreje ali 3-krat hitrejši ali 4-krat hitrejši.
Ampak problem postane manjši in manjši in manjši, veliko hitreje.
Za ponazoritev, bomo začeli govoriti o tem, kaj se dogaja
ko smo napisali binarno iskanje.
Problem pri roki je, da če imam niz številk,
recimo, 1, 2, 3, 5, 7, 23, 45, 78, 12323,
nato pa 9 s tono 0s po njej,
želimo, da bi lahko ugotovili zelo hitro, kar je v
Ta niz številk.
Vem, da se zdi to malo neumno in malo izmišljene,
ker zdaj je.
Imamo množico, ki nima zelo veliko elementov v njem,
in če sem vprašal enega od vas, da ugotovimo, ali ne
23 je v polju, lahko to storite zelo hitro
Samo z Že pogled na to in mi povedal, da ali ne.
Analogni, ki menijo, predstavljaj si, če bi bilo to, recimo,
preglednico Excel z 10.000 vrstic, 20.000 vrstic.
Seveda, to lahko storite ukaz F ali nadzornega F in poglej kaj gor.
Prav tako lahko uporabite filtre in iskanje stvari,
ampak če bi moral gledati skozi to datoteko po vrsticah z vrvico,
bi trajalo dolgo časa, da ga najdejo.
To je nekako tako kot v primeru telefonskega imenika, tudi če
nihče ne gleda skozi knjigo telefona strani ena naenkrat.
Značilno je, da se jo odpre na sredino,
ali v primeru veliko imenikov in slovarjev po
ste pravzaprav je vtipkali na prvo črko,
ste flip to prvo pismo in odpreti in začeti tekoč skozi.
>> Spomni me vaše ime še enkrat. >> Sam.
Sam.
Kot Sam je dejal, da je linearen proces iskanja se bo res počasi,
in namesto z binarnega iskanja, kako to deluje, je, da
vsakič, ko gremo skozi ponovitev naše iskalno algoritem,
bomo razdelili seznam na pol, v bistvu,
v dve manjši sezname.
In potem v naslednji ponovitvi zanke, ga bomo ponovno delijo
v drugih manjših seznamov.
Kot lahko vidite, je težava ohranja vse manjši in manjši
saj bo v tem izloči polovico seznama vsak čas.
Kako to zavreči deluje?
Tako kot opozorilo, kaj bomo storili, če bi bili računalnik
in smo bili, recimo, iskanje števila 5 na tem seznamu
je, da bi izbrali številko v sredini.
V sredini tega seznama, saj so 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 številk,
da bomo izbrali številko ali na 4. mestu ali na 5. mestu,
in bi rečemo, da je na sredini našega seznama.
Izberite številko v sredini.
Potem, tako kot Sam je dejal, bomo test, da vidim, če je to število enako
na številko, ki jo želimo dobiti ali naši želeno številko.
Če je enaka, nato pa smo ga našli. Zmagali smo.
Če to ni enako, potem obstaja nekaj primerov.
Oba primera sta bodisi število mora biti večje od števila Iščemo,
ali pa je manj kot.
Če je več, gremo na desno.
In če je manj, gremo na levo.
In potem ponoviti celotni postopek še enkrat
bodisi na desni polovici ali levi polovici seznama.
>> Prvi problem v oddelku današnji je, da ugotovimo
kako lahko dejansko začeli izražati to oznako C.
Imamo psevdokod tukaj.
Kaj bomo s tem začeli ukvarjati se bom dvigni popolnoma nov prostor,
razen tega pregleda, tako da imamo te zapiske za kasneje,
bomo izbrisati vse to, potem pa kopirate in prilepite iz problemskega sklopa
ta podatek v naših prostorih, in upajmo, da to ne zlomi.
Popolno.
Če vi vsi storili, kopiraj in prilepi to kodo v svoj novi prostor,
v prazno eno.
Poskusimo Daniela. Če Prevedite in poženite ta program, ne deluje?
Ne >> Kaj je rekel?
Pravi nadzor doseže konec ni nična funkcijo.
Ja, zato naj ga poskusite teče.
Ste vi videli to? Ali veste, kaj to pomeni?
V redu, secirati to malo.
To je rekel na file.c v vrstici 9 stolpca 1 smo napako, tako kot si rekel,
in pravi, da je izhajajoč iz napake opozorila in opozorila povratnega tipa.
Izgleda, da se nekaj dogaja s povratno tipa, ki ima smisel.
Imamo ne nična funkcijo, kar pomeni, da imamo funkcijo
da se ne vrne neveljavne.
Void funkcija je tista, ki izgleda takole:
nična foo (), in to je ničen, ker je donos tip nična,
kar pomeni, da če bi imeli kaj tukaj
kot zameno 1, bi dobili prevajalnik za to napako.
Vendar pa imamo non-nična funkcijo.
Naša ni nična funkcija v tem primeru je naša funkcija iskanja
ker ima povratno tip int.
Ko se govori, da je nadzor izteče brez void funkcijo,
to je zato, ker iskanje nima povratnega izjavo.
To se ne vrača ničesar tipa int.
>> Mi lahko popraviš, in kaj mislita
Iskanje treba vrniti privzeto?
Kakšna bi morala biti privzeta vrnjeno vrednost iskanju?
Ker to je tisto, kar bomo lahko na koncu.
Charlotte, imaš vse,?
Drži ali ne drži? >> Drži ali ne drži.
Katera?
False. Ne vem.
False? Poskusimo.
Zakaj bi rekli, da vrnitev ne drži? To je dobro intuicijo.
[Charlotte] Ne vem.
Bomo vrne false v tem primeru, saj bo to naš privzeto
če iz nekega razloga je seznam prazen, ali pa se igla
da iščemo, ne obstaja.
Potem pa čisto na koncu, če se ne bomo vrnili res že v tej funkciji,
smo vedno vedeli, da bo ta funkcija rekel Nope, to ni v polje.
To ni v kopici sena.
Zdaj, če želimo zbrati in prost dostop to, kaj mi rešiti to, da bomo lahko ga potegnite navzgor.
Zdaj, če želimo pripraviti in voditi naš program, se gradi.
Smo dobili našo malo uren.
Če sem zadel 4-uh-oh.
Ni natisniti ničesar. Zdi se, kot da je vse končalo dobro.
Moramo izpolniti to noter
Pogovarjala sva se o algoritmu v Psevdokoda malo nazaj.
Naj vidim, razen tega,
in jaz bom pritisnil na algoritem spet nazaj.
Gremo tega tipa. Ne.
Tukaj je.
Kako to storiti?
Kaj bi bilo dobro strategijo za zagon te kode?
Moraš izbrati številko na sredini.
Kako izbrati številko v sredini niza?
Vsi predlogi?
[Študent] strlen deljeno z 2.
Strlen deljeno z 2. To je eno veliko.
Strlen dela s posebnimi vrstami nizi.
Kakšne vrste polj?
String nizi znakov polja.
To je ta ista vrsta koncepta, ki ga želimo uporabiti,
vendar ne smemo uporabljati strlen, ker nimamo niz znakov.
Imamo vrsto ints.
Toda kaj strlen dobil za nas?
Ali veste, kaj je dobil za nas?
[Študent] strlen dobi nam dolžino.
Točno tako, da postane nam dolžino.
Strlen dobi trajanja niza za nas.
>> Kako bomo to dosegli, da je v našem programu binarnega iskanja?
Kako bi dobil dolžino array?
[Študent] strlen?
Lahko dobite dolžino pravilno oblikovano niz niz C s strlen.
Problem pa je, da nimamo niz niz.
Če se ozremo na to oznako, imamo to celoštevilsko matriko.
Kako vemo, kako dolgo je to?
[Študent] Ali obstaja ekvivalent 1 za končne točke, kot so int l, ali kaj?
Izkazalo se je, da pravzaprav ni, in tako na nek način je to
ena od tistih stvari, ki je samo dobro vedeti o C,
da ne obstaja način, da dobite dolžino niza
Če vse, kar vam je matrika.
Razlog, da deluje s strunami, razlog strlen dela,
Kajti če je niz pravilno oblikovana,
da bo imel ta poseben 0 \ znaka na samem koncu.
>> Prav tako lahko predstavljate, če imate nepravilno oblikovan niz
in ni \ 0 znakov ni, potem je vsa stvar ne deluje.
[Študent] Lahko dodate \ 0?
Lahko bi v tem primeru.
Lahko bi dodali neke vrste \ 0
ali nekakšen ki pomeni znak in nato uporabimo.
Ampak to se ne bo delovalo dokaj
ker \ 0 je za char tipa,
in tukaj imamo ints.
Druga stvar je, če smo bili, da uporabite posebno vrednost
kot -1, ki označuje konec matrike
potem nikoli ne bi shranjevanje -1 v naših celih nizi.
Mi bi obtičala.
Izkazalo se je, da je edini način, da dobite dolžino
od array v C je dejansko zapomniti
Ko ga je ustanovil in ga prenesti okoli z matriko
tako da, ko sem imel nalogo, da se dogaja, da naredite nekaj dela
na paleto cela ali pa na vodi ali podvoji ali kaj ste,
Prav tako je treba, da je funkcija array dolžine,
in to je točno to, kar smo storili tukaj, v iskalno funkcijo.
Če pogledamo, kaj smo storili, ko se peljemo v naši matriki tukaj
smo tudi pass po dolžini, velikosti.
Prav tako se zgodi, da smo jo poimenovali to spremenljivko tukaj,
ta parameter ali argument.
To se imenuje funkcija, je argument seznam ali seznam parametrov,
in se to imenuje tudi trditve ali parametri.
Ljudje uporabljajo različne izraze, ob različnih časih.
Včasih zamenjajte jih sam.
Samo tako se zgodi, da se ta spremenljivka tukaj imenovan podobno
za to # define tukaj.
Ampak oni niso ista stvar.
Kapitalizacija ne zadeva.
>> Če pogledamo, kaj se dogaja tukaj izjavljamo,
Naša int matrika, ki smo ga imenuje številke.
Mi smo mu dala svojo velikost, ki ustreza naši # define na vrhu.
To se dogaja, da je 8.
In potem, ko smo potem pokličete našo funkcijo za iskanje spodaj,
peljemo v številu želimo iskati, ki smo ga pozove,
gotten od uporabnika.
Peljemo v polju, to številke,
in potem imamo tudi prehod v velikosti matrike,
in potem se shrani vrednost velikosti 8
ali opravil s tem celo spremenljivko imenovano velikosti.
Imamo velikost matrike.
Zdaj, če gremo nazaj na to, kar smo govorili že prej,
Mislim, da Missy pripeljal poudaril, da tisto, kar je potrebno storiti, je dobil dolžino niza
in ga delimo z 2, in da nam bo dalo srednjo.
Pa poglejmo.
Ali imam lahko nekdo napisati in ga shrani v prostoru?
Kaj pa Leila?
Ali imam lahko pišete to?
Napišite prvo vrstico, kjer ste vzeli na dolžino niza, in dobili srednjo vrednost
in ga shranite na nove spremenljivke.
Dam ti nekaj sekund. Ste pripravljeni?
[Student neslišno]
Seveda, bi sem vam izračuna srednjo vrednost
v senu matrike znotraj funkcije iskanja
z dolžino senu niz, ki je spremenljiva velikost?
Nič zapleteno tukaj.
[Leila] Samo velikost / 2 in samo-
In jo shranite, in kliknite na gumb Save tu na vrhu,
in bomo ga potegnite navzgor.
Popolno.
Takole. Neverjetno.
>> Ker je to sestaviti?
[Leila] Ne, to mora biti višja.
[Nate] Ja, kaj moramo narediti?
[Leila] Kot int sredini ali kaj podobnega.
Neverjetno. Ja, kaj je storil, int sredina = velikost.
Bo to sestaviti?
Naj izbrisati komentar in ga spraviti ven s poti.
Kaj ne bo sestavil o tem?
Ne delamo nič s celo število,
zato moramo natisniti to ali kaj podobnega.
Ja, točno tako.
Dobili bomo neuporabljeno spremenljivke.
Kaj vse še ne bo šlo za to?
Mislim, da si nekaj rekel, Sam. Podpičji.
Ja, manjka ti podpičji.
To se dogaja, da je stalnica v življenju ves čas mandata.
Zadnja stvar, bom naredil je, da bom dal nekaj praznega prostora na obeh straneh
tega subjekta v tej zadevi, ker je to običajno, kako to storiti
po našem slogu priročnika.
Imamo srednjo vrednost našega matrike.
Zdaj, če se spomnimo nazaj na naš algoritem,
kaj je naslednji korak, da smo morali storiti, ko bomo imeli srednjo vrednost?
[Študent] Če je to večji [neslišno].
Ja, zato moramo narediti neke vrste primerjave, in kaj smo primerjali tukaj?
Rekel si, če je večji od. Kaj je v tem stavku se nanaša na?
Številka, ki pride gor, če je to več kot v sredini, nato pa pojdite do array?
Točno tako število, ki pride, ko-
Kazalec, tako da smo v primerjavi z iglo,
in kaj smo primerjali glede na igli?
Ker je igla je tisto, kar smo iskali.
Mi smo ga primerjali, da bi dobili na sredini.
>> Toda, ali je smiselno, da preverite,
Če igla = sredina?
Ima to smisel?
Ali kdo ne strinja?
Dajmo mu poskusiti, če (igla == sredini).
[Študent] Ali printf si ga našel.
[Nate] printf ("Našli smo ga \ n!");
V nasprotnem primeru, grem, da začnete delati nekaj drugega tukaj.
Jaz bom za začetek dajanja izjav naramnice okoli, če ves čas
samo zato, ker če bomo dodali še več stvari, potem
ne bomo dobili prevajalniki.
Ja, Sam. Imaš prav.
Težava je v tem, da je sredina predstavlja položaj v matriki,
vendar pa lahko dobite, da je vrednost v tem položaju array.
To je odlična točka.
Ste vsi slišali, kaj Sam je rekel?
Dejal je, da je to srednji
predstavlja le položaj v matriki, vendar to ni dejanski element v matriki.
Če menite, da o kodeksu kakor je zapisano zdaj,
če se ozremo na tem polju tukaj, ki ima 8 elementov v njem,
Kakšna je vrednost sredina bo v tej funkciji?
[Študent] 4.
[Nate] 4.
Če se ozremo na številko 4 -
in bomo lahko šele prost dostop to kodo in dal malo žalosten obraz tukaj
saj ni zdelo, če vodimo to kodo
kot je sedaj, ga naložite, stavbe, naj se pomaknite navzdol
in če gledamo na številke 4
smo ga našli, pa nismo dobili to printf ja.
Eden od razlogov je, da se nismo vrnili res,
vendar pa smo res našli številne 4?
In Sam ne govorim.
Kaj smo našli?
Smo res pokazala srednjo vrednost, ki je, če gledamo na matrike tukaj,
to se dogaja, da je element na indeksu 4, ki jih gledaš,
kar je 23.
>> Kako bomo dejansko dobili ta element v sredini
in ne samo sredina sama?
[Študent] želimo vnesti znak ali kaj?
Kaj bi to naredil, samo iz radovednosti?
Lahko poveste malo več?
Moraš spremeniti položaj v številu,
Tako moraš narediti neka povezava, mislim, da je znak, vendar ne bi bilo.
Ja, to je dobro izhodišče.
Smo bili delaš veliko tega konvertaze mest v znakov, teh znakov,
V prvih dveh problemskih sklopov.
Izkazalo se je, da je tukaj, je to skoraj podobno
dostop do wi znak v nizu, če je to smiselno.
Tu želimo dostopati v sredini elementa.
Kako bomo to storili?
Kevin, ali imate kakšne predloge, kako bi lahko to naredil?
Lahko bi naredil senu, oklepaj, v sredini, zaprta nosilec.
Lahko napišete, da je za nas?
Shranite jo v tukaj in potegnite bomo tako naredili.
Iščemo tej progi 9,
in smo spoznali, da si ne želimo primerjati iglo na sredini,
namesto tega pa smo želeli primerjati iglo
elementu na sredini položaja v naši senu matrike.
Kul.
Takole.
Ja, to izgleda precej dobro, če (igla == senu [sredina]).
Našli smo ga.
Zdaj, če želimo zagnati kodo bova nazaj gor, malo-
se pripravlja, da teče, in zdaj, če pogledamo na 4,
nismo našli, ker zdaj smo dejansko dobili številko 23.
Gremo na vrednost 23, in to je tisto, kar smo v primerjavi z našo iglo.
Ampak to je dobro. To je korak v pravo smer.
>> To je tisto, kar smo poskušali narediti.
Ne bomo poskušali primerjati iglo proti pozicije v matriki
ampak glede na dejanske elemente v matriki.
Če se ozremo nazaj, zdaj na naslednji korak v našem algoritmu
kaj je naslednji korak?
Leila že omenil na kratko.
[Študent] Preverite, če je večja ali manjša od in se nato odloči, v katero smer se premika.
[Nate] Ja, kako bi to naredili?
Ali lahko dal v nekaj-Bom rešiti to revizijo,
in potem, če si dal na nekaterih progah, ki bo naredil to.
Ja, Charlotte. >> Imam vprašanje.
Ali ne bi bilo sredini - 1, saj je prva stvar, ki je
to je 0 indeksira, tako da, če damo 4, to dejansko ni znakov, ki ga iščemo?
Ja, in drugi problem pri tem je,
To je velik ulov, saj je, kaj se bo zgodilo na koncu morda
če bomo naprej in se ne bomo nikoli prilagodijo na začetku?
Mislim, kaj bi lahko na koncu delaš poskuša dostopati
element na 8. mesto matrike,
ki v tem primeru ne obstaja.
Bomo želeli narediti neke vrste računovodstva za to,
da imamo neke nič indeksiranja.
[Charlotte] Oprosti, mislil sem srednjo - 1 v oglatih oklepajih.
To lahko storimo.
Vrnila se bova k temu vprašanju v zelo malo.
Ko smo začeli, da bi dobili dejanski zanka,
da je, ko bomo res videli to pride v poštev.
Za zdaj, bomo to naredili, ampak ti si popolnoma prav.
To bo nič kazalo vpliva, da moramo obračunati.
Pa poglejmo.
>> Kako je večja od manj kot-?
[Študent] bom, kako to storiti, in več kot manj del.
Pravkar sem bil prepričan, kaj natisniti, če se vam zdi, da je manj kot v senu sredini ali več.
Tukaj lahko shranite kar I've-
[Nate] Ja, če shranite kar imaš, in bomo ga potegnite navzgor.
Takole.
[Študent] In sem dal vprałaje za kar nisem vedel.
[Nate] To izgleda super.
Tu imamo vprałaje, ker še vedno ne vem
kaj bomo narediti še precej.
Kaj bi želeli narediti-ups, imamo nekaj funky naramnic vse na nas.
Mi bomo popraviti te aparata.
Takole.
In tako se kaj želimo narediti, glede na naš algoritem,
Če ne bomo našli igle?
Recimo v primeru, da je igla manj od tistega, kar smo iskali na. Kevin.
Samo poglej levo polovico.
Točno, tako da bomo dal komentar v tukaj, ki pravi "pogled na levo polovico."
In če je igla večja od senu na sredini, kaj želimo storiti?
[Študent] Potem pogledaš na desni polovici.
Pogled na desni polovici, "pogled na desni polovici."
Ne preveč slabo.
Ok, tako da na tej točki, so stvari videti precej dobro.
Težava z oznako kakor je zapisano, kaj?
[Študent] Nimaš končne točke za polovicama.
V redu, nimamo končne točke za polovicama.
Prav tako so le, da bo šel skozi to enkrat.
Mi smo le, da bo pogled na eno sredini.
Ali je element obstaja, ali pa je ni.
Za dokončanje tega, bomo morali narediti neke vrste ponovitev.
Moramo se ponavljajo, dokler ne ugotovijo, da
bodisi element je tam zato, ker smo zožil in končno našel,
ali to ni tam, ker smo pogledal skozi vse stvari,
v ustreznih polovici polja, in ugotovila, da ni nič tam.
>> Kadarkoli smo dobili to ponavljanje dogaja, kaj bomo za uporabo?
[Študent] zanka.
Neke vrste zanke. Da.
[Študent] Lahko naredimo do-while zanko in jo naredil, nato pa
igla ni enako-Nisem prepričan, če sem šel s tem.
Ampak nekako kot to, da dokler ni enaka vrednosti, ki jih uporabnik vložek.
Ja, pa poglejmo, kako bi to sama napišem?
Rekel si, da greva uporabo do-while zanko.
Če pa to začelo?
[Študent] Takoj po velikosti / 2.
[Nate] Ok, in kaj bomo storili?
Bomo izpolnite časa kasneje.
Kaj bomo naredili?
[Študent] Ne želimo storiti vse stvari, ki jih imamo v if dela?
[Nate] Ali vse te stvari, super.
Kopiranje in lepljenje.
Oh, človek.
Poglejmo, če to deluje, če bomo lahko jeziček tole.
Čudovito.
Ok, to rešimo tako vi ga imate.
V redu, in bomo to naredili ob-
kaj je pa pogoj, da si potem?
[Študent] Medtem ko se igla ni enako, tako kot klicaj.
Ampak ne vem točno, kaj je še.
[Nate] Ja, to je eden od načinov, da to storite.
Sam, imate komentar?
[Sam] sem se spomnil, ko sem pogledal video posnetke,
Vzel sem screenshot enega od podobnih, ko smo naredili psevdokod za to,
je bilo nekaj razmerje med max in min.
Mislim, da je bilo nekaj podobnega, če max je vedno manj kot minuto.
Razumem.
[Sam] Ali je všeč, če max ni manj kot minuto ali kaj podobnega,
saj bi to pomenilo, da je vse, kar ste iskali.
>> Ja, pa kaj se sliši kot max in min so bili nanaša?
[Sam] Vrednosti da-cela števila, ki se bodo spremenile
glede na katerih smo dali srednjo vrednost.
Točno tako.
[Sam] Na tej točki, da se bo [neslišno] izračunati max in min.
Središčna točka je to max in min ideja.
Ali to smiselno ljudje?
Če bi začeli videti, kako bomo to storiti ponovitev,
imaš popolnoma prav, da želimo uporabiti neke vrste do-while zanko.
Ampak mislim, da če se spomnimo, kaj se dogaja na kraju samem te matrike
in kaj se pravzaprav dogaja, grem, da napišete tukaj,
na zelo prvi ponovitvi binarnega iskanja, imamo-
Bom uporabila B in E, ki označuje začetek.
In potem je konec naše matrike.
Vemo, da je začetek pri 4 pravici tukaj,
in vemo, da je konec na 108.
Povejte nam iščete številko 15.
Prvič smo to naredili, kot smo videli prej,
sredina, bodisi bo 16 ali 23
odvisno od tega, kako izračunamo stvari.
Ker enakomerno razdelitev na sredini bi nam ta prostor
med 16 in 23, ne moremo enakomerno razdelite
ali ga je treba razdeliti in se ob pravem sredini.
Bomo pogled na 16 let.
Bomo spoznali: "Hej, 16> 15, ki ga iščemo."
Če pa pogledaš na levi polovici matrike
kaj bomo na koncu delaš je zavržemo
ta celoten zgornji del
in rekel: "V redu, zdaj je naša končna točka je, da bo tukaj."
Naslednja ponovitev naše zanke, smo sedaj si ogleduje ta niz,
dejansko ko se zavrže ta del, ker zdaj
če smo vzeli srednjo vrednost, da razlika med začetkom in koncem,
smo ugotovili, da naši sredini, da je 8,
, ki jih lahko nato test 8, kje je v primerjavi s številom, ki ga iščemo,
15, ugotovili, da je 15 več,
Tako smo se preselili na desnem delu seznama,
za katero vemo, ker smo ljudje, in smo ga lahko videli.
Vemo, da je pravica del se bo, če ga najdemo,
vendar računalnik ne ve, da je to tisto, kar bom naredil, je, da bomo dejansko
so to gor, zdaj pa je začetek in konec
so na istem mestu, tako da je sredina postane le številka na seznamu na tej točki,
kar je 15, mi pa smo ga našli.
Ali to delno osvetlile o tem, kje je vsa ta max in min zapis se dogaja,
sledenja končne točke v niz, da bi ugotovili,
kako zmanjšati stvari dol?
>> Kaj bi se zgodilo, če bi bilo to ni enako 15 zdaj?
Kaj pa, če smo iskali 15. in namesto tega, da je ta številka bila tudi 16?
Mi bi rekli, "Oh, to je več.
Želimo, da se vrnete na levi strani. "
In sva se premaknete naš e na desno,
Takrat imamo končno točko, da bi bilo nasprotujoče.
Ne bi mogli iskati vse več elementov
ker zdaj imamo končno točko in začetno točko, naše
Naša največja in naša min, zdaj obrnilo.
Iščemo prek celotnega niza. Ne moremo najti ničesar.
To je točka, na kateri bi se želimo povedati, "Ok, bomo ustavili ta algoritem.
Nismo našli ničesar. Vemo, da je ni tukaj. "
Kako se to dogaja?
[Študent] Kako točno se računalnik preklopi na koncu?
Kako koncu končal pred začetkom?
Konec konča pred začetkom
zaradi matematike, ki ga bomo narediti vsakič, ko to stori.
Pot smo zamenjali je, če pogledamo zelo prvič to storimo swap
kjer imamo na začetek in konec 4
vso pot navzdol na 108 in naša sredina, recimo, na 16 -
Jaz grem v prikrivati ​​to nazaj do 15-če iščeš 15,
smo vedeli, da to, kar smo storili, ko smo pregledali 16 in videl, da je večja
in želel zavreči celoten desni del seznama,
smo videli, da tisto, kar smo želeli storiti, je premakniti e tukaj.
Dejansko dobil e preselil v 1 pred sredini.
Tudi, ko smo to ponovitev algoritma
in sredina je bila ob 8,
smo ugotovili, da je 8 <15, zato smo želeli premakniti b
1 preteklosti sredini.
Zdaj, začetek in konec sta skupaj v tem 15.
>> Če bi se dogajalo, da si za kakšno drugo vrednost, ne pa 15,
ali če bi to bil 15 namesto 16,
smo ugotovili, da bi se e želimo premakniti 1 pred sredini.
Zdaj bi e tam obrnil manj kot b.
Sprehodimo se skozi kako smo dejansko na koncu to kodiranje algoritem.
Vemo, da želimo, da je to razpolovišča izračun.
Vemo tudi, da želimo slediti začetek in konec polja,
našega trenutnega niza, tako da lahko ugotovimo,
če je to leva polovica seznama je in če je desna polovica seznama je.
Mi, ki bodisi z začetka in konca,
ali lahko rečemo min in max.
Uporabil bom začeti in končati ta čas.
Ko smo začeli, če se ozremo nazaj v našem primeru tukaj,
naš začetek je bil na samem začetku niza, kot je naravna.
Kaj je indeks to? Kaj naj bi začeli naše?
Daniel.
[Daniel] Haystack [0].
[Nate] Ja, tako bi jo lahko postavi na senu [0].
Problem pa je, da nam ni položaj prvega elementa.
To nam daje indeks prvega elementa ali dejansko vrednostjo v tistem prvem mestu.
[Študent], ki bo pretvoriti v 0,20?
[Nate] Kaj bo to storiti, je, dobro, da ne bo naredil nobene konverzije.
Kaj bo naredil, je, da bo shranjevanje 4 leta začeli,
in potem bo težko za primerjavo pred začetkom
ker se bo začelo se ima vrednost 4,
ki je začetek našega niza,
vendar želimo, da bi spremljali indeksi v matriki
v nasprotju z vrednotami.
Bomo dejansko uporabo 0, kot je ta.
Za konec array-Charlotte prinesel to gor malo prej.
To je, če bomo upoštevali nič indeksiranja.
>> Charlotte, kaj je konec niza?
Kaj je indeks na koncu?
[Charlotte] Velikost - 1.
Ja, in katera velikost moramo uporabiti?
Moramo uporabiti kapitalsko velikosti ali male črke velikosti?
Kapital velikost.
V tem primeru bi lahko uporabili kapitalske velikosti.
Če bi želeli to funkcijo za prenosne
in uporabo te funkcije v drugih programih,
lahko dejansko uporabljajo male črke velikosti.
Saj je v redu preveč.
Ampak Charlotte je popolnoma prav, da želimo imeti velikost - 1.
Na tej točki,
[Študent] Kako to, da lahko uporabite velike črke velikosti?
Kako to, da smo lahko uporabite velike črke velikosti?
Izkazalo se je, da gre res # določa,
pod pokrovom motorja, kot je bil tekst in jih zamenjajte, če je to smiselno.
Ko prevedete kodo, predobdelava faza
od prevajalnika gre skozi spisa,
in išče povsod, da ste napisali kapitala velikosti,
in nadomešča besedilo, da dobesedno z 8, kar tako.
V tem smislu je to zelo razlikuje od spremenljivke.
To ne zavzame nobenega prostora v pomnilniku.
To je enostavno besedilo zamenjajte trik.
V tem primeru, bomo uporabljati velikost.
Od tu si želimo narediti neko vrsto ponavljanja,
in da smo na pravi poti z našimi do-while zanko.
Želimo nekaj narediti, dokler pogoj ne drži več,
in kot smo videli prej, smo videli, da je ta pogoj
je res, da ne želimo konec
na manj kot začeti.
>> To je naša ustavljanja stanje.
Če se to zgodi, želimo ustaviti in razglasi kot, "Ej, nismo našli ničesar."
Če želite izraziti to, si želimo, da uporaba neke vrste zanke.
V tem primeru bi bilo do-while zanko, zanke for, while zanko?
Imamo do-while zanko tukaj.
Ali ste vi, kot ta pristop?
Ali menite, da bi morali poskusiti drugačen pristop?
Kevin, vse misli?
Lahko bi imeli while zanko, saj vemo, največ
bi bila večja od min na začetku nekako.
Ja, tako da ni inicializacijo, da se mora zgoditi.
Ti do-while zank so super, če imate kaj za inicializacijo
pred tem testiranje, ker je tukaj
vemo, da ne bomo, da bo tako reinitializing začne in konča
Vsak krog zanke.
Vemo, da jih želimo inicializacijo, potem preverite naše stanje.
V tem primeru bom dejansko šel s preprosto zanko, medtem ko.
Izkazalo se je, da se naredi medtem ko zanke uporabljajo precej redko.
Veliko krajev sploh ne učijo, medtem ko se zanke.
Oni so dobri za ravnanje vnos uporabnika, tako da smo videli veliko od njih doslej.
Ampak normalno, in medtem ko zanke so veliko bolj pogosti.
Izkazalo se je, da je ta pogoj kot je zapisano
Ne bo nam res veliko dobrega, in zakaj je to?
Žal mi je, ne vem tvojega imena.
Jaz sem Jerry. >> Prosim?
To je B-O-R-U-I.
Oh, v redu.
Jaz ne vidim na mojem seznamu.
Oh, to je zato, ker, oh, to ima smisel.
Imate idejo, zakaj to, medtem ko zanke ne bodo delovali kot je bilo predvideno,
kot je napisano s pogojem?
[Jerry] Misliš, da želite vse stvari, potem ko je v samem?
Ja, to je ena.
Morda bomo morali dati vse te stvari v while zanko, ki je popolnoma res.
Druga stvar, ki je malo bolj problematično pa je, da ta pogoj ne deluje.
[Študent] Moraš ga flip.
Točno, tako da ta pogoj ne bo nikoli res prvotno pot smo se pogovarjali o tem.
Želimo nekaj narediti do konca leta <začne,
vendar želimo narediti nekaj, medtem ko
začetek ≤ konec.
>> Tam je, da je obrnjeno logiko tam.
Jaz sem kriv bi te napake ves čas.
[Študent] Zakaj je biti manjša ali enaka?
Ker se spomnim primera, da smo prišli do
če je bil samo en element, in smo bili dol,
in smo iskali na samo 15 v naši array?
In naš začetek in naš namen je bilo isto element.
Želimo zagotoviti, da ravnamo ta primer.
Če smo ravno manjša
mi bi lahko le dol z 2-element matrike.
Ko smo prišli do tega zadnjega elementa, če bi bilo naše element, ne bi nikoli našli.
Zdaj je tu, lahko naredimo točno tako kot si rekel.
Začnemo lahko plopping stvari prav v sredini našega while zanko.
Mi lahko plop v naši sredini.
Mi lahko vse to, če izjave,
jih potegnite iz tega ne počne, medtem ko zanke,
plop jih v,
čiščenje stvari malo,
in grem naprej in shranite revizijo.
In na tej točki, smo dobili zelo blizu.
Sam.
Mislim, da imate tudi, da imajo srednjo vrednost int velikost = - 1/2.
Imam ga, velikost - 1/2.
Je še kaj, kar moramo spremeniti o tej vrsti?
To je bil dober ulov.
>> Kaj velikost storiti? Ali bomo kdaj spreminjanje velikosti?
Da bi ohranili linijo, kot je ta, da moramo spremeniti velikost.
Moramo spremeniti velikost vsakič, ko smo šli okoli za zanko.
Ampak, se spomniš, ko smo šli skozi naš primer malce prej,
in smo imeli na začetku 4
in na koncu vse tako kot pri 108?
Kako smo izračunali srednjo vrednost?
Smo z uporabo velikosti?
Ali smo s pomočjo začne in konča namesto tega?
To je razlika med koncem in začetkom.
Točno tako, in kako točno naj napišem, da je Charlotte?
Samo konec - začetek.
Če ne bi bilo treba storiti - 1
ker - je bil vključen 1 na koncu in začnete že.
[Nate] Super, da si popolnoma prav.
Mi ne bi bilo treba storiti - 1, ker to - je bil vključen 1
in je predstavljal, ko smo inicializacijo spremenljivke konec.
>> Je še kaj moram storiti, da sintaktično ta vrstica smiselno?
[Študent] Plus začel. >> Plus začeti?
[Študent] Na koncu.
Ker je izračunana le polovico dolžine.
Dodati morate začeti.
[Nate] Kaj bi to izračunali za nas?
Če razmišljamo o koncu o tem zelo prvi ponovitvi zanke,
konec se bo položaj v indeksu 7.
Začeti je na položaju 0.
Ne pozabite, da smo iskali bodisi
Stališče 3 ali 4 položaj.
Če pogledamo ta matematika, samo, da bi bilo malo bolj oprijemljivo,
dal nekaj številk, imamo 7, 0,
Tako 7-0, nato pa / 2
je 3 leta celo delitev, da je.
Potem se moramo vrniti nato dodajte naša začeti?
Mi v tem primeru ni.
Že prvi ponovitvi, bo to v redu, ker je 0 begin.
Toda, kot smo napredek, bomo res vsi potrebujejo samo
Konec - Začetek / 2.
Še en trik tukaj, in da je to ena od prednosti.
[Študent] Ali potrebujemo oklepaje?
[Nate] Točno tako, in da je zato, ker če ne bomo dal te oklepaje,
potem se bo ta postavka razlagati namesto
kot (konec) - (začetek / 2), ki vsekakor ne želimo.
Pazi za tiste, pravila prednost.
[Študent] Zakaj se ne konča + začeti?
Zakaj se ne konča + začeti?
[Študent] Zakaj ni tega?
Zakaj bi bilo +?
Mislim, da imaš prav.
[Študent] Ker je to povprečje?
[Nate] Konec + začeti, si popolnoma prav.
Vau, sem popolnoma zaspal. Prav imaš.
Če bomo delali minus, bi želeli dodati začel nazaj noter
V tem primeru, ste zelo prav, da želimo, da se povprečje dveh,
tako da nam jih želite dodati, v nasprotju z njihovo odštevanje.
[Študent] Prav tako bi delovalo, če si konec - Začetek / 2 + začeti.
Poleg tega bi bila, če mi-Verjamem.
>> Na primer, če smo iskali na začetek,
in jo preusmerila tja
do 15 let.
Začele so se na mestu 2.
Konec je na mestu 7.
Če jih odštejemo, dobimo 5.
To delite s 2, dobimo 2.
In potem dodamo 2 nazaj,
in da nam pride na 4. mesto,
, ki je tukaj, ki je sredina.
[Študent] Ali moramo poskrbeti za zavijanje?
V kakšnem smislu pa moramo skrbeti za zavijanje?
Če vsota ali razlika med
odvisno od tega, kako to storiti, ni sodo število.
Potem se računalnik zamenjati, ali ko je 2,5;
ne premaknete v levo ali v desno, da ugotovita, ki je sredina?
Razumem.
Izkazalo se je, da s celo enoto,
ne bomo nikoli dobili te številke s plavajočo vejico.
Nikoli nismo dobili decimalke.
To je popolnoma zavreči.
Če imate računalnik delite 2 int spremenljivke,
in ena 7, druga pa 2,
ne boste dobili 3,5, kot rezultat.
To bo dobil 3.
Preostanek bodo zavržene, tako da je dejansko zaokroževanje
ni okrogla, ampak tla, če ste vi poznate, da pri matematiki,
če ste popolnoma zavreči decimalke,
in tako si v bistvu ga oklesti navzdol na najbližjo
celota položaj, na najbližje celo število.
[Študent] Ampak potem je to problem, ker če imate paleto 7 elementov
Takrat samodejno posname 3. element iz sredini namesto 4..
Kako ravnati s tem?
To je problematično, saj če bi imeli niz 7,
da bi izbrali v 3. namesto na 4. mestu.
Ali lahko pojasnite, malo več?
[Študent] Ker če imate 7 elementov, potem 4. element
bi bila sredina, kajne?
Ne pozabite, vaš komentar o tem, da nič indeksirane, čeprav.
[Študent] Ja, tako na 3. položaju. To bi bila sredina.
Ja.
Oh, v redu. Vem, kaj misliš.
To je čudno, saj navadimo na to celotno idejo
kako se znebiti decimalk.
To je odlična točka.
Končajmo to gor.
Mi smo našo izračuna srednjo vrednost.
>> Mi smo testiranje, da vidim, če je naša igla je enaka srednji vrednosti.
Mi tiskanje, ki smo ga našli, ampak res, kaj želimo narediti v tem primeru?
Mi smo ga našli, zato smo želeli, da naj klicatelj vedel, da smo ga našli.
Dobili smo nalogo, ki je logična funkcija tipkal.
Pot nas opozori s pojasnilom našega delovanja, da smo pripravljeni za odhod
se mi rekel: "Hej, ali je to res."
Kako bi to naredil, Kevin?
Ti premikajočo glavo. >> [Kevin] Dodajte vrnitev res.
[Nate] Točno tako, return true.
Zdaj, če to ni enako, kako bi se ozremo na levo polovico?
Vse ideje?
Stella, vse ideje?
Morate določiti nov položaj za konec.
Ja.
Zato moramo narediti položaj sredini - konec.
Čudovito.
Moramo določiti nov položaj za konec
pogled na levo polovico.
To je tisto, kar smo že prej govorili, kjer
Držim vrača v ta primer.
Sem začel tukaj, in potem sem na koncu vse poti tukaj.
>> Tudi, če iščemo 15, in naša sredina je na 16,
in se zavedamo, "Ups, je 16 več.
Želimo, da se premaknete na levo polovico. "
Mi bi premaknite na konec 15,
in delamo, da jih jemljemo 1 iz srednje
in nastavitve, ki, kot je naš novi konca.
Prav tako, če bomo želeli videti na desni polovici, kako bi to naredili?
Imate idejo?
[Študent] Vi samo nastavite začeli razpolovišča + 1.
[Nate] Čudovito.
In zdaj, v primeru, da ne najdemo ničesar,
ne da bi dobili poskrbljeno za nas?
Daniel, ne dobite, da je poskrbljeno za nas?
[Daniel] No
[Nate] Če nam bo uspelo skozi celoten niz in ne najdemo ničesar,
če bi se ta poskrbljeno, ali pa bi morali poskrbeti za to?
[Daniel] pa pogoj.
[Nate] Ja, medtem ko je stanje, točno.
To bo poskrbel, da bi šel skozi celoten niz, če ne bomo ničesar našli.
To pa zanka se bo končala.
Nikoli nismo naleteli bo to stanje,
in se lahko vrnemo false.
Mi lahko pustite tudi to, če sem takole
ker če je to res, če izjavo,
in bo naša funkcija vrne,
in tako bomo na osnovi prekiniti ta funkcija na tej točki
Ko se vrnemo, res.
Toda kaj se zgodi s to strukturo tukaj?
Bo to delovalo v celoti, ali pa je nekaj logično napaka tam?
>> Tukaj je nekaj logično napako tam, s tem, kako se je ustanovljena.
Kaj bi lahko bilo?
[Študent] Zakaj potrebujemo - in + 1s?
To postavlja našo paleto gor, da je naša nova leva polovica in desno polovico.
[Študent] Ampak zakaj nisi mogel to storiti brez - 1s in + 1s?
[Nate] Lahko bi ga postavi na sredini?
Kaj bi lahko bilo problematično glede tega?
[Študent] Mislim, da je neučinkovito, ker ste preverjanje vrednosti, ki je že potrjeno.
[Nate] Točno tako Sam je popolnoma v redu.
Če nastavite konec in začeti enako sredini
namesto - 1 + 1 in refleksivno,
na neki točki v prihodnosti bomo končali srednjo preverjanje znova.
[Študent], sem začel pset, nato pa sem imel nekaj takega
kjer sem pozabil + 1, in je obtičala v neskončno zanko.
Seveda, ker na neki točki nikoli ne boš, da se začne in konča
dejansko prekrivata.
Kul.
Še ena logična napaka, in to je, da bi to zagotovo
if.
Zakaj bi to lahko bilo?
>> Razlog za to je, če ni drugega, če-si videl to, Kevin?
[Kevin] Ja, ker ste spreminjanje končne točke.
[Nate] Točno tako.
Mi smo spreminja končno točko,
in če je napisal, kot je ta-Bomo lahko presledke med-
da bo preveril ta primer.
Ta primer, če mu ne uspe, bo preklic, iz funkcije.
Nato bo preveril to naslednji primer,
in če to uspe, bo nastavitev končne točke,
nato pa se bo nadaljevalo in preverite ta primer.
Toda na tej točki, ne želimo, da še naprej preverjam.
Na srečo nismo ponastaviti srednjo tukaj,
in vemo, da v tem primeru ne bo uspelo.
Ampak definitivno želim postaviti drugega, če tam
čeprav je morda, v tem primeru
saj smo ne prilagaja srednjo vrednost, bi to pomembno?
Ne, ker so ti primeri so na voljo samo.
Še enkrat, moja napaka.
Ne, mislim, da potrebujem drugega, če.
Lahko, da ga poskusite in ga zaženite in videli, kaj se bo zgodilo.
Zgradba, je prišlo do napake.
To je verjetno zato, ker sem pustil ti b in e je tukaj.
Ali imam vse več tistih, ki na vrhu?
To ne izgleda tako.
Mi pomanjšati, gradnjo,
tam gre, tako da zdaj, če iščemo 15,
ja.
Naj povečate palca
15, ja. Lahko ga ponovno zaženete.
Nalaganje izvorne kode, gradnjo, tek.
Mi lahko iščete nekaj kot 13,
in ne bomo dobili ničesar tiskanje, tako da to ni ugotovila, da za nas.
To je super, ker to ni v našem seznamu.
>> Zdaj smo prepozno.
To se dogaja, da se je za ta teden.
Hvala za vstop, in se vidimo kasneje.
>> [CS50.TV]