[Powered by Google Translate] [3. dio] [Manje Ugodno]
>> [Nate Hardison] [Sveučilište Harvard]
>> [Ovo je CS50.] [CS50.TV]
>> U redu, neka je početak.
Dobrodošli na Tjednu 4. CS50.
Ako vi otvorite web preglednik i otvoriti pset 3,
Scramble s CS50, idemo početi idući
kroz dio pitanja tamo.
Baš kao i prošli tjedan, mi ćemo raditi u CS50 Spaces,
ako ćete također povući da se kao dobro,
a ako idete naprijed i posjetite ovaj link koji sam dobio ovdje na vrhu.
To je vrijeme da biste započeli.
Imamo naš mali hi program ovdje. Ništa luda.
Jedna od prvih stvari koje želim učiniti s vama danas je ići preko nekoliko rješenja
do problema Set 1, vrsta primjer rješenja,
samo tako da možete dobiti osjećaj za ono što vrste koda osoblja je pisanje,
što vrste kod drugih studenata pisanje,
i imaju li pogledati to, jer znam da je čudno
kada podnijeti rješenje za problem set i dobiti komentare
na svoju verziju, ali ponekad je korisno vidjeti kako drugi ljudi to učinio,
pogotovo one koje su lijepo izgleda.
Za veći dio, stvarno sam bio impresioniran s rješenjima koje vi proizvedenih.
Nisam još počela gledati na svoje 2s Problem Set, ali ako oni nešto poput prve,
to ne znači ništa, ali dobre stvari.
>> Ako pogledate moje revizija, počnimo skroz na reviziju 1,
i da ćemo se brzo pogledati Mario rješenje.
Ako povučeš ovaj gore, ti programi koje ćemo predstaviti točne.
Nije bilo ispravnost problema s tim problemima, nego,
želimo razgovarati malo o različitim pitanjima dizajna
koji su se ovdje koristi.
Jedna od stvari koja je bila zanimljiva oko rješenja
je da se koristi ovaj novi konstrukt zvan funta definirati,
ponekad se također naziva hash definirati.
Dopustite mi povećali na njega ovdje.
# Define vam dati imena tih brojeva u svom programu.
U ovom slučaju, maksimalno visina piramide u Mario
je 23. i umjesto stavljajući 23 u mom kodu-
mi bi se odnositi na to što tvrdi kodiranje 23 -
umjesto to daje ime MAX_HEIGHT tom broju,
tako da ovdje u mom učiniti-while petlje
zapravo može odnositi na MAX_HEIGHT
umjesto stavljanja broj 23 u.
[Studentski] Koja je prednost da radi?
To je veliko pitanje.
Jedan je čitljivost.
Prednost od koristeći ovaj # define je čitljivost.
Kad čitam ovaj kod, ja mogu vidjeti što se događa.
>> Ja mogu vidjeti u ovom stanju ovdje da smo testiranje
za visinu bude <0, što mi je također moglo definirati
biti minimalne visine ili min visina.
Druga prednost je da sam tada možete pročitati ostatak linije vidjeti
da i mi smo provjere kako bi bili sigurni da visina nije veća od max visine,
jer ćemo nastaviti dok je visina veća od max visine.
Druga prednost je, ako sam udaljili malo ovdje-
ako sam pokrenuti ovaj program, a ja ga pokrenuti, recimo, sa 23 upravo sada,
to će ispisati sve retke 23 baš kao da je.
No, reći da sam želio promjeniti najveću visinu,
i sada želim ograničiti maksimalnu visinu piramida
biti samo reći-čovjek, koji je bio funky.
# Include , # define MAX_HEIGHT,
i recimo, željeli smo postaviti ga je jednak 10.
Sada u ovom trenutku, sve sam morao učiniti je to promijeniti u tom jednom mjestu.
Ja mogu rekompiliranje kôd, a sada ako sam probati i upišite u 12,
to će potaknuti me opet.
U tom slučaju, mi samo koristimo MAX_HEIGHT jednom.
To ne znači da je velika gnjavaža ići u
i to promijeniti u while petlji ako je potrebno.
Ali u programima gdje ste s pozivom na isti čarobni broj
iznova i iznova, ovaj # define mehanizam je jako zgodan
jer ste upravo to promijeniti jednog vremena na vrhu file-to je obično gdje ste stavili ih-
i promjene percolates kroz ostatak datoteke.
>> Druge stvari sam htjela napomenuti u ovom zadatku da sam mislio izgledala jako lijepo,
jedan je imenovanje varijabli.
Vidite da se ovdje imamo cjelobrojne varijable zvane red i tzv visina.
Prostori, hashes, to pomaže da kod malo više čitati,
čini malo više razumljivo što se zapravo događa.
To je u suprotnosti s pomoću, recimo, slučajnih slova
ili samo črčkarija uopce.
Konačna stvar ću naglasiti da je u za petlje,
Često ove iteratora varijable, te brojači koje koristite u vašoj za petlje,
to je standard i konvencionalna ih početi s obje I, a zatim j a zatim k
i ide od tamo ako trebate više varijabli,
i to je samo konvencija.
Postoji mnogo konvencija.
To ovisi o programskom jeziku koji koristite.
Ali u C, obično počinju s ja.
To nema smisla koristiti, recimo, ili b
ovisno o situaciji.
To je to za ovaj jedan.
Ako sada podići revizija 2, vidjet ćete još jedan Mario,
a ovo je slična drugoj onaj koji mi samo vidjeli,
ali to ne nešto vrsta cool.
Ako gledamo na ovom dijelu ovdje u unutarnje for petlje,
oni koriste neki ludi potrazi sintaksu ovdje upravo u toj liniji.
To se zove trojni operater.
To je, ako drugi izjavu sažeti u jednoj liniji.
Uvjet je ovaj dio unutar zagrada.
To je ekvivalent za reći, ako j <visine - ja - jedan.
A onda ono što je sadržaj koji ako blok će biti su prostor
i onda sadržaj onoga što bi inače biti su to #.
To je bitno je dodjeljivanje prostora za ove varijable.
To je stavljanjem prostora u sadržaju blok varijable,
Ako je ovaj uvjet ispunjen, a ako uvjet nije zadovoljen,
zatim blok varijabla dobiva ovo #.
I onda, naravno, umjesto da gradi cijeli niz
i ispis sve se na kraju ovo rješenje ga ispisuje jedan znak na vrijeme.
Prilično cool.
>> Drugi par stvari za pogledati. Mi ćemo prijeći na pohlepni.
Sada, ako gledamo pohlepni, ovo prvo rješenje
koristi to # definira vrlo malo.
Imamo jednog konstantu definiranu za svaki od različitih brojeva u ovom programu.
Imamo jedan za centi po dolaru, jedan za četvrtine, dimes, nickels i penija,
i sad ako mi se pomaknite prema dolje i pročitati kôd,
možemo vidjeti standardni učiniti-dok sve tisak petlje van.
Vrsta poanta ovog problema je shvatio da
vam je potrebno pretvoriti plovak da ste pročitali u od korisnika na cijeli
točno učiniti math, a to je zato
s pomičnim zarezom, kao što smo spomenuli u predavanju kratko,
to nije moguće točno predstavljaju svakog pojedinog vrijednost na brojevnom pravcu
jer postoji beskonačno mnogo vrijednosti između 3 i, recimo, 3,1 čak.
Možete imati 3,01 i 3,001 i 3,0001, a možete zadržati ide.
Ispada kad radite s novcem, često želite ga pretvoriti
u integer formatu, tako da ne gubiš novčana i takve stvari.
Doing da i zaokruživanje bio ključ.
Ovo rješenje se koristi savršeno jednostavan, veliki algoritam,
koji smanjene broj preostalih centi, prvi po tromjesečjima,
zatim dimes, zatim Nickels, zatim novčana jedinica,
i dodavanje na broj kovanica svaki put.
>> Drugo je rješenje da ćemo vidjeti, kao što sam smanjivanje i ići na reviziju 4,
imao vrlo sličan početku, ali umjesto da se koristi DIV i mod
upravo ovdje, kako biste izračunali broj centi.
Ovo, broj od četvrtine je jednak broju centi podijeljenih 25,
i razlog to radi jer radimo cijeli odjel,
tako da je odbacivanje bilo ostatak.
[Studentski] Ne moramo komentirati pretraživanje?
To stvarno ovisi.
[Studentski] Ti si komentirajući više nego kod ovdje.
Da, i tako postoji hrpa različitih filozofije na to.
Moj osobni filozofija je da vaš broj je stvarno istina,
kao kodu je ono što zapravo izvršavanju na računalu,
i tako vaš broj bi trebao biti čitljiv moguće ne zahtijevati onoliko komentare.
To je rekao, kada radite stvari koje su vrsta lukav matematički
ili algoritamski, to je dobro za one komentirati, tako da možete
dodati dodatnu dimenziju, dodatni sloj onome tko čita svoj kod.
U tim rješenjima, često su komentirali jače samo zato
želimo biti u mogućnosti da ih distribuirati i imaju ljudi ih pokupiti
i čitati ih prilično lako.
Ali definitivno, složio bih se da je ovo teška.
[Studentski] Ali kad ste u nedoumici, ići teže?
Kada su u nedoumici, ići teže.
Neki ljudi ponekad će reći povratnu 0 ili nešto slično.
Mislim da je to smiješno komentar.
Jasno je da je ono što se događa.
Ne trebam Engleski mi reći da.
Ponekad ljudi će pisati stvari poput "kthxbai!"
To je sladak, ali isto tako ne-
da ne čineći razliku između komentiranje bodova ili ne.
Takvi komentari su samo ha, ha.
Cool.
>> U ovom trenutku, počnimo raditi na problemu Set 3 dio pitanja.
Ako vi povući ovaj gore opet,
kao i kod prošlog tjedna, nećemo gledati gaćice u ovom poglavlju.
Pustit ćemo ti dečki to učiniti na svoj vlastiti put i razgovarati o pitanjima.
Ali sada, u ovom dijelu ćemo provesti malo više vremena
govori o manje od kodiranja osnove
kao što smo učinili prošlog tjedna, a umjesto toga, idemo da se više fokusiraju na
malo više od teorije, pa se govori o binarnom pretraživanje, a zatim sortiranje.
Od one od vas koji su nakon zajedno s predavanjem,
može netko dati mi rekapitulacija onoga što je razlika
između binarnog pretraživanja i linearnog pretraživanja?
Što se događa? Naravno.
Linearni pretraživanje pretražuje kroz svaki element u sortirani popis
jedan po jedan po jedan po jedan po jedan,
i binarno pretraživanje dijeli popis u dvije skupine,
provjerava jesu li tipke vrijednosti da ste u potrazi za veći ili manji od srednjem vrijednosti
da ste upravo pronašli, a ako je manje od, to ide s donje liste
i onda dijeli to opet, ne istu funkciju
skroz dok se ne pronađe tačku biti jednaka vrijednosti same.
Točno.
>> Zašto mi je stalo?
Zašto govorimo o binarnom potrazi nasuprot linearnom traženja?
Da.
Binarni je puno brže, tako da ako udvostručiti veličinu problema
to traje još jedan korak umjesto dvostruko više.
Točno.
To je veliki odgovor.
Linearni traži se jako puno provjere jedan element u isto vrijeme,
i kao što smo vidjeli na prvi dan predavanja
kada je David otišao kroz svoj primjer telefonskog imenika
i iščupao jednu stranicu u telefonskom imeniku na vrijeme
i zadržao taj događaj iznova i iznova i iznova,
to će potrajati mu stvarno dugo vremena naći nikoga u telefonskom imeniku,
osim, naravno, on je bio u potrazi za nekoga na samom početku abecede.
S binarnog pretraživanja, možete ići puno brže,
i to ne samo dvostruko brže ili tri puta brže ili četiri puta brže.
No, problem dobiva sve manji i manji i manji puno brže.
Za ilustraciju, mi ćemo početi govoriti o tome što se događa
kada pišemo binarnog pretraživanja.
Problem pri ruci je da ako imam niz brojeva,
recimo, jedan, dva, tri, pet, sedam, 23, 45, 78, 12323,
a zatim 9 sa tonu 0S nakon njega,
želimo biti u stanju shvatiti vrlo brzo ono što je u
ovaj niz brojeva.
Znam da je ovo izgleda malo glup i malo neprirodan,
jer sada je to.
Imamo niz koji nema jako mnogo elemenata u njemu,
a ako ja pitam jednog od vas odgonetnuti da li ili ne
23 je u polju, možete to učiniti vrlo brzo
samo pogledavši to i mi reći da ili ne.
Analogni razmotriti je zamisliti da bi to bilo, recimo,
Excel proračunske tablice s 10.000 redaka, 20000 redaka.
Naravno, možete to učiniti naredbu F ili kontrolnu F i pogledati nešto gore.
Također možete koristiti filtere i pretraživanje stvari,
ali ako ste morali gledati kroz tu datoteku redak po redak po redak,
to bi vam dugo vremena da ga pronaći.
To je vrsta kao u primjeru telefonskog imenika, previše, gdje
nitko ne gleda kroz jedan telefonski stranice knjige na vrijeme.
Tipično, oni ne otvorite ga na sredini,
ili u slučaju puno telefonskih knjiga i leksikona gdje
zapravo su ga ključem na prvom pismu,
ste okrenuti prema tom prvom slovu i otvoriti i početi prolazi kroz tu.
>> Podsjeti me u svoje ime ponovno. >> Sam.
Sam.
Kao Sam je rekao, da je linearni traži proces će biti jako sporo,
i umjesto s binarnim pretraživanje, način to radi je da
svaki put idemo kroz iteracije našeg traži algoritma,
idemo podijeliti popis na pola, u suštini,
u dva manja lista.
A onda se na sljedeći iteracija petlje, mi ćemo ga podijeliti ponovo
u drugim manjim listama.
Kao što možete vidjeti, problem čuva uzimajući manji i manji
jer smo zadržati odbacivanje polovicu popisa svaki put.
Kako to otpis rad?
Samo kao podsjetnik, što ćemo učiniti ako smo računalo
i bili smo, recimo, u potrazi za brojem pet u ovom popisu
da bismo pokupiti broj u sredini.
U sredini tog popisa, jer su 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 brojeva,
ćemo odabrati broj ili na 4. poziciji ili na 5. poziciji,
i mi bismo to nazvati sredinu našeg popisa.
Pick broj u sredini.
Zatim, baš kao i Sam je rekao, mi ćemo testirati da vidi je li taj broj je jednak
na broj koji želimo dobiti ili željenom broju.
Ako je jednaka, onda smo ga pronašli. Mi smo pobijediti.
Ako to nije jednaka, onda postoji nekoliko slučajeva.
Dva su slučajevi ili broj mora biti veći od broja gledamo,
ili je to manje nego.
Ako je veća, idemo na desno.
A ako je manje, krećemo s lijeve strane.
I onda smo ponoviti cijeli proces ponovno
ili na desnoj polovici ili lijevoj polovici liste.
>> Prvi problem u današnjem odlomku je shvatiti
kako mi zapravo može početi izraziti to u C koda.
Imamo pseudocode ovdje.
Što ćemo početi raditi je ću podići brand-novi prostor,
spasiti ovu reviziju, tako da smo ove bilješke za kasnije,
ćemo izbrisati sve to, i onda kopirati i zalijepiti iz problema setu
ove informacije na našim prostorima, a nadamo se da to ne slomiti.
Savršeno.
Ako vi sve to, kopirajte i zalijepite ovaj kod u svoj novi prostor,
u prazni.
Pokušajmo Daniela. Ako sastaviti i pokrenuti ovaj program, to funkcionira?
Ne >> Što to govori?
Ona kaže kontrola dosegne kraj non-void funkciju.
Da, pa neka mi ga pokušati trčanje.
Jeste vi vidjeli ovo prije? Znate li što to znači?
Ok, ajmo secirati ovo malo.
To govori u file.c na liniji 9, stupac 1 imamo pogrešku, baš kao što je rekao,
i ona kaže da je to proizašlo iz pogreške upozorenja i upozorenja povratka tipa.
To izgleda kao nešto što se događa s povratnom tipu, koji ima smisla.
Imamo non-void funkciju, što znači da imamo funkciju
da se ne vraća prazninu.
Void funkcija je onaj koji izgleda ovako:
void foo (), i to je praznina, jer povratni tip je void,
što znači da ako smo imali nešto ovdje
poput povratka 1, mi bismo dobili prevodilac pogrešku za to.
Međutim, mi imamo non-void funkciju.
Naš non-void funkcija u ovom slučaju je naša funkcija pretraživanja
jer ima povratni tip bool.
Kada je rekao da je kontrola dosegne kraj non-void funkciju,
to je zato što traži ne imati povratnu izjavu.
To nije ništa povratku tipa bool.
>> Možemo to popraviti, a što ne vi mislite
traži se trebali vratiti po defaultu?
Što bi trebao biti zadana vrijednost od traženja povratak?
Jer to je ono što možemo staviti na kraju.
Charlotte, imate li bilo-?
Istina ili laž? >> Istina ili laž.
Koja?
Netočno. Ne znam.
Lažna? Pokušajmo.
Zašto bi vam reći povratak netočno? To je velika intuicija.
[Charlotte] ne znam.
Mi ćemo se vratiti false u ovom slučaju, jer to će biti naš zadani
ako iz nekog razloga je popis prazan ili igla
da smo u potrazi za ne postoji.
Zatim, na samom kraju, ako mi ne vrate istina je ranije u ovoj funkciji,
uvijek smo znali da je ova funkcija će reći nope, to nije u polju.
To nije u plastu sijena.
Sada, ako smo sastaviti i pokrenuti ga-neka me spasiti to tako da ga možemo podići.
Sada, ako smo sastaviti i pokrenuti naš program, on gradi.
Mi smo dobili našu malu brz.
Ako sam pogodio 4-uh-oh.
To nije ništa ispisati. Izgleda sve završilo dobro.
Moramo popuniti to u.
Razgovarali smo o algoritma u pseudocode malo prije.
Da vidim, osim toga,
i ja ću povući taj algoritam natrag gore opet.
Ajmo hit ovog tipa. Ne.
Tu je.
Kako ćemo to učiniti?
Što će biti dobra strategija za pokretanje off ovaj kod?
Morate odabrati broj u sredini.
Kako odabrati broj u sredini niza?
Bilo koji sugestija?
[Studentski] strlen podijeljena dva.
Strlen podijeljena dva. To je jedan veliki.
Strlen djela s posebnim vrstama polja.
Koje vrste polja?
Gudački polja, karakter polja.
To je to ista vrsta koncepta koji želimo primijeniti,
ali ne možemo koristiti strlen jer nemamo niz znakova.
Imamo niz Ints.
No, ono što ne strlen dobiti za nas?
Znate li što se dobiva za nas?
[Studentski] strlen dobiva nam duljinu.
Točno, to dobiva nas dužinu.
Strlen dobiva duljinu niza za nas.
>> Kako smo dobili da je u našem programu binarnog pretraživanja?
Kako bi ste dobili duljinu niza?
[Studentski] strlen?
Možete dobiti duljinu ispravno formatiran C string niz sa strlen.
Problem je, međutim, da nemaju string niz.
Ako se osvrnemo na ovom kodeksu, imamo ovaj cijeli niz.
Kako znamo koliko je to?
[Studentski] Ima li ekvivalent jedan za krajnje točke, kao što su int l ili nešto?
Ispada da zapravo nije, i tako na neki način, to je
jedna od onih stvari koje je samo dobro znati o C,
da ne postoji način da se duljina niza
ako sve sam vam dati je niz.
Razlog radi sa žice, razlog strlen djela,
je zato što ako niz pravilno formatiran,
ona će imati tu posebnu \ 0 znak na samom kraju.
>> Također možete zamisliti ako imate nepravilno oblikovan niz
i nema \ 0 znak postoji, onda je cijela stvar ne radi.
[Studentski] Mogu li dodati \ 0?
Mi bi u ovom slučaju.
Mogli bismo dodati nekakvu \ 0
ili neka vrsta označava karakter, a zatim ga koristiti.
No, to nije sasvim ide na posao
jer \ 0 je za char tipa,
i ovdje imamo Ints.
Druga je stvar ako smo bili na korištenje posebnu vrijednost
kao -1 označiti kraj niza
onda mi nikada ne bi mogao pohraniti -1 u našim integer polja.
Mi bi se zaglavi.
Ispada da je jedini način da se trajanje
od niza u C je zapravo sjetiti
kada ga postaviti i zatim ga zaobići s nizom
tako da, kad god imam funkciju koja će napraviti neki posao
na niz brojeva ili pluta ili dubl ili što ste,
Ja također treba dati funkciju niza dužinu,
i to je upravo ono što smo učinili ovdje u funkciju pretraživanja.
Ako pogledate, što smo učinili kada smo proći u našem polju ovdje,
mi također proći u dužini, veličini.
To se događa samo da smo pozvani ovu varijablu ovdje,
ovaj parametar ili argument.
To se zove funkcija je argument popis ili popis parametara
a to se također nazivaju argumenti ili parametri.
Ljudi koriste različite uvjete u različitim vremenima.
Ja ponekad zamijenite ih osobno.
To samo tako dogodi da je ova varijabla ovdje je nazvana slično
da je ovo # define ovdje.
No, oni nisu ista stvar.
Kapitalizacija svejedno.
>> Ako pogledate što se događa ovdje, izjavljujemo
naša int polje, koje smo pozvani brojevi.
Dali smo mu našu veličinu, što odgovara našem # define gore na vrhu.
To će biti osam.
I onda kad smo onda nazovite našu funkciju pretraživanja dolje,
prolazimo u broju želimo tražiti, koje smo od vas zatraži,
stečen od korisnika.
Prolazimo u nizu, ovaj brojeve,
i onda smo se također moraju proći u veličini polja,
a zatim vrijednost veličine 8 dobiva pohranjen
ili prošao ovaj integer varijable zvane veličini.
Imamo veličinu niza.
Sada, ako se vratimo na ono što smo govorili o ranije,
Mislim Missy doveo do točke da je ono što mi je potrebno učiniti je dobiti duljinu niza
i razdijelite po 2, te da će nam dati polovište.
Idemo vidjeti.
Mogu li netko napisati ovo i spremite ga u svemiru?
Kako o Leila?
Mogu li vam napisati to u?
Napišite prvu liniju gdje ćete uzeti duljinu niza i dobiti polovište
i pohraniti ga u novom varijablom.
Ja ću vam dati par sekundi. Jeste li spremni?
[Studentski nečujan]
Naravno, mogao sam vam izračunati srednji
od plastu sijena niz unutar funkciju pretraživanja
koristeći duljinu plast polja, što je veličina varijabla?
Ništa lukav ovdje.
[Leila] Samo veličina / 2 i samo-
I to spasiti, a pogodak gumb Spremi ovdje na vrhu,
a mi ćemo ga podići.
Savršeno.
Tu smo ići. Strašan.
>> Kao što je, ove će sastaviti?
[Leila] Ne, ona mora biti viša.
[Nate] Da, pa što trebamo učiniti?
[Leila] Kao int srednjem ili nešto.
Strašan. Da, hajdemo to učiniti, int srednji = veličina.
Hoće li to sastaviti?
Ajmo izbrisati ovaj komentar i dobiti ga zabit.
Što neće sastaviti o tome?
Mi ne radimo ništa s cjelobrojnom,
tako da ćemo morati ispisati ili nešto slično.
Da, točno.
Mi ćemo dobiti neiskorišteni varijablu.
Što još ne ide raditi o tome?
Mislim da je rekao nešto, Sam. Zarezom.
Da, ja sam nedostaje one zarezom.
To će biti konstanta stvar tijekom cijeloga mandata.
Konačna što ću učiniti je da ću staviti malo bijelog prostora na obje strane
ovog operatora ovdje, budući da je obično kako ćemo to učiniti
prema našem stilu vodič.
Imamo tačku našeg polja.
Sada, ako se sjetimo natrag na naš algoritam,
što je drugi korak koji smo morali učiniti jednom imamo središnju točku?
[Studentski] Ako je veća [nečujno].
Da, tako da moramo napraviti nekakvu usporedbu, a što smo uspoređujući ovdje?
Si rekao ako je veći od. Što je to u toj rečenici se odnosi na?
Broj koji dolazi gore, ako je to veća od sredine, a zatim otići do niza?
Točno, tako da je broj koji nastaje kada se mi-
Igla, tako da smo u odnosu na iglu,
i što smo uspoređujući protiv iglom?
Budući da je igla je ono što tražimo.
Mi smo uspoređujući ga dobiti na sredinu.
>> No, nema smisla da provjerite
ako igla = srednji?
Ima li to smisla?
Zna li itko slažete?
Idemo dati ga probati, ako (igla == srednji).
[Studentski] printf li ga pronašao.
[Nate] printf ("Našli smo ga \ n!");
Inače-Idem početi raditi nešto drugo ovdje.
Ja ću početi stavljanjem aparatića oko ako izjavama svih vremena
Upravo zato, ako dodamo više stvari, a zatim
ne dobiti prevoditelje.
Da, Sam. Imaš točku.
Problem je u tome što predstavlja srednji položaj u polju,
, ali možete ga dobiti za zastupanje vrijednost u tom položaju niza.
To je velika stvar.
Je li svatko čuti što Sam je rekao?
On je rekao da je srednji kao što je
predstavlja samo mjesto u polju, ali to nije stvarni element u polju.
Ako mislite o kodu kao pisane upravo sada,
ako ćemo gledati na tom polju ovdje dolje, koja ima osam elemenata u njemu,
što je vrijednost srednji će biti u ovoj funkciji?
[Student] 4.
[Nate] 4.
Ako gledamo po broju 4 -
a mi samo možemo pokrenuti ovaj kod i staviti malo tužno lice ovdje
jer nismo pronašli to-ako smo pokrenuti ovaj kod
kao što je upravo sada, to upload, zgrada, neka mi se pomaknite prema dolje,
a ako ćemo gledati po broju 4,
smo ga našli, ali nismo dobili to printf da.
Jedan od razloga je što nismo vratili istina,
ali nije mi stvarno naći broj 4?
A Sam je rekao ne.
Što smo pronašli?
Mi smo stvarno našli tačku, što ako ćemo gledati na polju ovdje dolje,
to će biti element na indeksu 4 koje tražimo u,
koji je 23.
>> Kako smo zapravo dobili tog elementa u srednjem
i ne samo srednji sama?
[Studentski] Mi bi ući char ili nešto?
Što bi to učiniti, samo iz znatiželje?
Možete li pojasniti malo više?
Morate transformirati poziciju u broju,
pa moraš napraviti neke veze, mislim da je char, ali to ne može biti.
Da, to je dobra stvar.
Mi smo radili puno toga pretvaranja pozicijama u znakovi, ovi likovi,
u prva dva seta problema.
Ispada da je ovdje, to je gotovo slična
pristupanje ith karakter unutar stringa, ako to ima smisla.
Ovdje želimo pristupiti srednjeg elementa.
Kako ćemo to učiniti?
Kevin, imate li bilo kakve prijedloge kako bismo mogli to učiniti?
Ti bi mogao napraviti plast, otvorena zagrada, sredinom, zatvorena zagrada.
Možete li napisati da za nas?
Spremite ga ovdje, a mi ćemo povući da se.
Gledamo ovoj liniji 9,
i mi smo shvativši da ne želimo uspoređivati ​​iglu na sredinu,
ali umjesto toga, želimo usporediti iglu
na element na poziciji sredine u našem sijenu niz.
Cool.
Tu smo ići.
Da, to izgleda prilično dobro, ako (igla == plast [srednji]).
Našli smo ga.
Sada, ako smo pokrenuti kod-hrapavi back up malo-
to sastavlja, ona radi, a sada, ako gledamo za 4,
nismo ga pronašli, jer sada mi zapravo uzimajući broj 23.
Odlazimo u vrijednosti 23, a to je ono što smo u odnosu na naše iglom.
No, to je dobro. To je korak u pravom smjeru.
>> To je ono što mi pokušavamo učiniti.
Mi ne pokušavamo usporediti iglu protiv pozicijama u polju
nego protiv aktualnih elemenata u polju.
Ako gledamo natrag sada na sljedeći korak u našoj algoritma,
što je sljedeći korak?
Leila ga već spomenuo kratko.
[Studentski] Provjerite da vidi da li je veći ili manji od a zatim odlučiti na koji način da se presele.
[Nate] Da, pa kako bi mi to učiniti?
Može li se staviti u neki-Ja ću spasiti ovu reviziju,
i onda ako ste stavili u nekim linijama koje će učiniti da.
Da, Charlotte. >> Imam pitanje.
Ne treba to biti midpoint - 1 jer prva stvar je
to je 0 indeksirane, pa ako smo stavili 4, to nije zapravo lik tražimo?
Da, i drugih problema s tim je-
to je veliki ulov, jer ono što se događa završiti događa eventualno
ako ćemo držati se kreće, a mi nikada ne prilagodi na početku?
Pretpostavljam da ono što smo mogli završiti događaj pokušava pristupiti
element na 8. poziciji polja,
koja je u ovom slučaju ne postoji.
Mi ćemo želite učiniti nekakvu računovodstva za činjenicu
da imamo neke nula indeksiranje.
[Charlotte] Oprosti, mislio sam tačku - jedan u uglatim zagradama.
Možemo to učiniti.
Vratit ćemo se na tom pitanju u samo malo.
Nakon što smo početi doći do stvarnog petlje,
to je kad smo stvarno ćete vidjeti dolaze u igru.
Za sada, možemo to učiniti, ali ti si potpuno u pravu.
To nula indeksiranje će imati učinak da trebamo objasniti.
Idemo vidjeti.
>> Kako je veći od i manje od-?
[Studentski] ja dobiti kako to učiniti veće od i manje od dijela.
Upravo sam nije bio siguran što ispisati ako smatraju da je to manje od plastu sijena srednji ili veći od.
Ovdje mogu spasiti ono što I've-
[Nate] Da, ako spasiti ono što imaš, a mi ćemo ga podići.
Tu smo ići.
[Studentski] I ja sam stavio upitnike za ono što ne znam.
[Nate] To izgleda sjajno.
Ovdje imamo upitnike, jer mi još uvijek ne znamo
što ćemo se sasvim ne još.
Što bi mi želimo učiniti-ups, imamo neke aparatić sve funky na nas.
Mi ćemo ispraviti ove aparatić.
Tu smo ići.
I tako ono što želimo učiniti, prema našem algoritma,
ako ne nađemo iglu?
Recimo u slučaju da igla je manje od onoga što gledamo. Kevin.
Samo pogledajte na lijevoj polovici.
Desno, pa ćemo staviti komentar na ovdje koji kaže "pogledate lijevoj polovici."
A ako igla je veća od plastu sijena na sredinu, što želimo učiniti?
[Studentski] Onda pogledate desnoj polovici.
Pogledajte desnoj polovici, "pogled na desnoj polovici."
Ne previše ružan.
Ok, tako da u ovom trenutku, stvari su prilično dobri.
Problem s kodom kao pismeni je ono?
[Studentski] Vi nemate krajnje za poluvremena.
Točno, mi nemamo krajnje za poluvremena.
Također smo samo će proći kroz ovaj put.
Mi samo idemo pogledati jedan srednji.
Ili element je tamo, ili nije.
Kako bi dovršili ovaj, mi ćemo morati napraviti nekakvu ponavljanja.
Moramo zadržati ponavlja dok ne nađemo da
ili element je tamo jer smo suziti i konačno ga našli,
ili to nije tamo jer smo gledali kroz sve stvari
u odgovarajućim polovice polja i otkrili da ništa nije tamo.
>> Kad smo je dobio to ponavljanje događa, što ćemo koristiti?
[Studentski] petlja.
Neka vrsta petlje. Da.
[Studentski] Možemo li učiniti-while petlja i to učiniti i onda dok
igla nije jednako-Nisam siguran gdje sam bio idući s tim.
No, nešto kao učiniti da dokle god se to ne dogodi jednaka vrijednost koju korisnik ulaz.
Da, pa ćemo vidjeti, kako bi to moglo se pisati?
Rekao si da idemo koristiti do-while petlja.
Gdje se to počelo?
[Studentski] Odmah nakon veličini / 2.
[Nate] Ok, i što ćemo učiniti?
Mi ćemo ispuniti vrijeme kasnije.
Što ćemo učiniti?
[Studentski] Ne želimo učiniti sve stvari imamo u ako dio?
[Nate] Da li sve ove stvari, super.
Kopiranje i lijepljenje.
Oh, čovječe.
Idemo vidjeti ako to radi, ako možemo kartica to više.
Lijepa.
Ok, a mi spasiti to tako vi ga imate.
U redu, a mi ćemo to učiniti dok-
što je bio uvjet dok ste bili poslije?
[Studentski] Dok je igla nije jednaka, pa poput uskličnika.
No, nisam siguran točno ono što je još.
[Nate] Da, ovo je jedan od načina da to učinite.
Sam, imate li komentar?
[Sam] Sjetila sam se kada sam pogledao video,
Ja uzeo screenshot jednog od poput kada smo napravili pseudocode za njega,
tamo je bio neki odnos između max i min.
Mislim da je to bilo nešto kao da max je sve manje od min.
Uspio sam.
[Sam] Ili ako želite max je ne manje od minute ili nešto slično,
jer bi to značilo da ste tražili sve.
>> Da, pa što to zvuči kao max i min su odnosi?
[Sam] Vrijednosti koje-integers koje će promijeniti
u odnosu na mjesto gdje smo stavili tačku.
Točno.
[Sam] U tom trenutku, to će [nečujno] izračunati max i min.
Srednji je ovo max i min ideja.
Ima li to smisla da ljudi?
Ako smo bili za početak gleda kako ćemo to učiniti iteracija,
ti si potpuno u pravu da želimo koristiti neku vrstu ne-while petlje.
Ali mislim da, ako se prisjetimo što se događa na mjestu ovog niza
i što se zapravo događa-Idem pisati ovamo-
na vrlo prvoj iteraciji binarnog pretraživanja, imamo-
Ja ću koristiti B i E da označi početak.
I onda kraj našeg polja.
Mi znamo da je početak na četiri prava nad ovdje,
a znamo da je kraj na 108.
Reci mi smo u potrazi za brojem 15.
Prvi put smo to učinili, kao što smo vidjeli ranije,
srednji ili će biti 16 ili 23
ovisno o tome koliko smo izračunali stvari.
Budući da ravnomjerno podijeli u sredini bi nam ovaj prostor
između 16 i 23, ne može ravnomjerno podijeliti
ili ga podijelite i dobiti na pravi srednji.
Mi ćemo pogledati 16.
Mi ćemo shvatiti: "Hej, 16> 15 da smo u potrazi za."
Da biste onda pogledati na lijevoj polovici niz
što ćemo završiti događaj je odbacivanje
cijeli ovaj gornji dio
i rekao: "Dobro, sada naša krajnja će biti ovdje."
Sljedeća iteracija našeg petlje, mi smo sada u potrazi na ovom polju,
učinkovito što odbacuju taj dio jer sada
ako ćemo uzimati tačku biti razlika između početka i kraja,
smo pronašli naš srednji biti 8,
koje zatim možemo testirati osam vidjeti gdje je u odnosu na broj tražimo,
15, pronašli da 15 je veća,
tako da moramo da se presele na desnom dijelu popisa,
koje znamo, jer smo ljudi, a možemo ga vidjeti.
Mi znamo da je pravo dio će biti tamo gdje smo ga pronašli,
ali računalo ne znaju da, tako što ćemo učiniti je ćemo zapravo
su to ići gore, a sada je početak i kraj
su isto mjesto, pa srednji postaje samo broj na popisu u tom trenutku,
što je 15, a mi smo ga pronašli.
Znači li to da prolio svjetlo na neke gdje je cijela ova max i min zapis ide,
praćenje krajnje točke u polju kako bi se shvatiti
kako suziti stvari dolje?
>> Što će se dogoditi ako to nije jednaka 15 sada?
Što ako smo bili u potrazi za 15 i, umjesto toga, taj broj je također 16?
Mi bismo reći, "Oh, to je veća.
Želimo se vratiti na lijevoj strani. "
I mi bismo premjestiti našu e udesno,
na kojem trenutku imamo krajnje točke koje će biti suprotstavljeni.
To ne bi bilo u mogućnosti to traženje za bilo više elemenata
jer sada imamo krajnje točke i naše polazište,
naša max i naša min, sada su zrcaljeno.
Mi tražimo kroz cijeli niz. Ne možemo naći ništa.
To je točka u kojoj smo željeli reći: "Dobro, idemo da se zaustavi ovaj algoritam.
Nismo našli ništa. Znamo da to nije ovdje. "
Kako se to događa?
[Studentski] Kako točno računalo prebacite kraj?
Kako se na kraju završiti prije početka?
Kraj završi prije početka
zbog matematike da ćemo to učiniti svaki put kad smo to učinili.
Način na koji smo zamijenili je ako pogledate prvi put smo to učinili zamjenu
gdje smo početkom u 4 i kraj
skroz na 108, a naš srednji, recimo, na 16 -
Ja ću vratiti natrag u ovu 15-ako smo u potrazi za 15,
znali smo da ono što smo učinili kada smo provjerili 16, a vidio da je to bio veći
i htio odbaciti cijelu desnu dio popisa,
Vidjeli smo da je ono što smo željeli učiniti je premjestiti ovu e upravo ovdje.
Efektivno, e dobio preselio u jednom prije sredine.
Isto tako, kada smo radili ovaj iteracija algoritma
i srednji bio na 8,
utvrdili smo da 8 <15, tako da smo željeli da se presele na b
jedna pokraj sredine.
Sada, na početku i na kraju su oba zajedno u ovom 15.
>> Ako bismo se događa tražiti neke druge vrijednosti, a ne 15,
ili ako je to 15 umjesto bio 16,
mi bi našli da e želimo premjestiti jednu prije sredine.
Sada e biti tamo zrcaljeno manje od b.
Idemo prošetati kako smo zapravo završiti kodiranja ovaj algoritam.
Znamo da želimo da se ovaj izračun srednjeg.
Znamo također da želimo pratiti početak i kraj niza
našeg trenutnog niza tako možemo shvatiti
gdje je to lijeva polovica popisa je i gdje pravo polovica popisa je.
Mi to bilo s početka i kraja,
ili možemo ih nazvati min i max.
Koristit ću početi i završiti ovaj put.
Kada smo počeli, ako se osvrnemo na našem primjeru ovdje dolje,
naš početak je bio postavljen na samom početku niza, kao prirodno.
Što je indeks bio je ovo? Što naš trebala početi biti?
Daniel.
[Daniel] plastu sijena [0].
[Nate] Da, tako bismo mogli postaviti jednak plastu sijena [0].
Problem je, međutim, da to nam daje ne položaj prvog elementa.
To nam daje indeks prvog elementa ili stvarne vrijednosti na toj prvoj poziciji.
[Studentski] To će se pretvoriti u 0,20?
[Nate] Što će to učiniti je, dobro, to neće učiniti bilo pretvaranje.
Što će učiniti je da će pohraniti četiri u početak,
i onda će biti teško napraviti usporedbe protiv početi
jer begin će se drži vrijednost 4,
što je početak našeg polja,
ali želimo pratiti indekse u niz
za razliku od vrijednosti.
Mi zapravo ćete koristiti 0, kao što je to.
Za kraj array-Charlotte donio ovo gore malo ranije.
Ovo je mjesto gdje ćemo uzeti u obzir nultu indeksiranje.
>> Charlotte, što je na kraju niza?
Što je indeks na kraju?
[Charlotte] Veličina - 1.
Da, i koje veličine trebamo koristiti?
Hoćemo li koristiti kapitala veličinu ili malim slovom veličinu?
Kapital veličina.
U ovom slučaju, da bismo mogli koristiti kapitala veličinu.
Ako smo željeli ovu funkciju kako bi se prijenosni
i koristiti ovu funkciju u drugim programima,
zapravo možemo koristiti malim slovom veličinu.
To je u redu previše.
No, Charlotte je potpuno pravo da mi želimo imati veličinu - 1.
U ovom trenutku-
[Studentski] Kako to da možete koristiti veliko veličinu?
Kako je moguće da bismo mogli koristiti veliko veličinu?
Ispada da je to # definira su stvarno,
ispod haube, tekst poput pronaći i zamijeniti, ako to ima smisla.
Kada sastaviti svoj kôd, predobradba faza
od prevodilac ide kroz datoteku,
i to izgleda za svugdje, da ste pismeni kapitala veličinu,
i zamjenjuje taj tekst doslovno sa 8, baš kao što je to.
U tom smislu, to je vrlo različit od varijable.
To ne zauzimaju prostor u memoriji.
To je jednostavan tekst zamijeniti trik.
U tom slučaju, mi ćemo koristiti veličinu.
Odavde smo ne želite učiniti nekakvu ponavljanja,
i mi smo na pravom putu s našim učiniti-while petlje.
Mi želimo nešto učiniti dok se stanje ne držite više,
i kao što smo ranije vidjeli, vidjeli smo da je taj uvjet
doista bila da ne želimo kraj
biti manja od početka.
>> To je naš uvjet zaustavljanja.
Ako se to dogodi, mi želimo da se zaustavi i proglasiti kao, "Hej, nismo našli ništa."
Za izražavanje toga, mi ne želimo koristiti neku vrstu petlje.
U ovom slučaju, to će biti do-while petlja, za petlje, petlja dok?
Imamo učiniti-while petlja ovdje.
Imate li dečki poput tog pristupa?
Mislite li da bismo trebali pokušati drugačiji pristup?
Kevin, bilo misli?
Mogli smo imati petlju dok jer znamo maksimum
biti veći od min na početku ionako.
Da, tako da nema inicijalizacije koja se treba dogoditi.
Ti to-dok petlje su veliki kada morate inicijalizirati nešto
prije toga testiranje, dok je ovdje
znamo da nećemo zadržati reinitializing kako početi i završiti
svaki krug petlje.
Znamo da želimo ih inicijalizirati, a zatim provjerite naše stanje.
U tom slučaju, ja zapravo ću ići s jednostavnim while petlje.
Ispada da su to-dok petlje koristi prilično rijetko.
Puno mjesta čak i ne uče ne dok petlje.
Oni su dobri za rukovanje korisničkog unosa, pa smo vidjeli puno od njih do sada.
No, normalno i dok petlje puno češći.
Ispada da je ovo stanje kako je napisano
stvarno ne će nam mnogo dobra, i zašto je to?
Žao mi je, ne znam vaše ime.
Ja sam Jerry. >> Žao?
To je B-O-R-U-I.
Oh, u redu.
Ja ne vidim na mojoj listi.
Oh, to je zato-oh, to ima smisla.
Imate li ideju zašto je to while petlja možda neće raditi onako kako smo zamislili,
kako piše uz uvjet?
[Jerry] Misliš kao da želite sve stvari nakon toga u-?
Da, tako da je jedan.
Možda ćemo morati staviti sve ove stvari u while petlje, koja je potpuno točno.
Druga stvar koja je malo više problematično, međutim, da je ovaj uvjet ne rade.
[Studentski] Morate ga okrenuti.
Točno, tako da je ovo stanje nikada neće biti istina početku način na koji smo razgovarali o tome.
Mi želimo nešto napraviti do kraja <početi,
ali mi želimo nešto napraviti, dok
početi ≤ kraj.
>> Tu je to obrat logike nema.
Ja sam kriv što te pogreške svih vremena.
[Studentski] Zašto to mora biti manji ili jednak?
Zbog Sjećate li se slučaj da moramo
tamo gdje je bio samo jedan element, i bili smo dolje,
i bili smo u potrazi na samo 15 u našem polju?
I naš početak i naš kraj su isti element.
Želimo biti sigurni da ćemo obraditi taj slučaj.
Ako nismo ravno manje nego,
možemo samo biti u mogućnosti da biste dobili dolje na dva elementa niza.
Nakon što smo se bacili na taj zadnji element, ako je to bila naša element, mi nikada ne bih ga pronaći.
Sada ovdje, možemo učiniti baš kao što su govorili.
Možemo početi plopping stvari desno u sredini našeg while petlje.
Možemo pasti u našoj sredine.
Možemo uzeti sve to, ako izjave,
ih izvući iz tog ne-while petlje,
buć ih u,
čistiti stvari malo,
a ja ću ići naprijed i spasiti ovu reviziju.
I u ovom trenutku, mi smo uzimajući prilično blizak.
Sam.
Mislim također imati INT srednjem = veličinu - 1/2.
Dobio je, veličina - 1/2.
Ima li nešto drugo moramo promijeniti o toj liniji?
To je bio dobar ulov.
>> Što znači veličina učiniti? Jesmo li ikad mijenja veličinu?
Da bi zadržali liniju ovako, moramo promijeniti veličinu.
Moramo promijeniti veličinu svaki put idemo okolo za petlju.
Ali sjećam se kad smo išli kroz naš primjer, samo malo ranije,
i mi smo imali početkom u 4
i na kraju sve način preko na 108?
Kako smo izračunali srednji?
Jesu li mi koristimo veličinu?
Ili smo koristili početi i završiti umjesto toga?
To je razlika između kraja i početka.
Točno, a koliko točno trebam napisati da, Charlotte?
Samo kraj - početak.
Vi ne bi trebali učiniti - 1
jer je - 1 je uključen u kraju i početi već.
[Nate] Odlično, ti si potpuno u pravu.
Mi ne moramo učiniti - 1 jer to - jedan je uključena
i činili kad smo inicijalizirati varijablu kraj.
>> Ima li išta drugo trebam učiniti sintaktički imati ova linija smisla?
[Studentski] Plus početi. >> Plus početi?
[Studentski] Na kraju.
Jer to je samo izračunati pola duljine.
Morate dodati početi.
[Nate] Što bi to izračunati za nas?
Ako mislimo o kraju ovog prvog iteracija petlje,
Kraj će biti u poziciji indeksa sedam.
Početak je u položaju 0..
Zapamtite, mi smo u potrazi za bilo
položaj 3 ili 4 položaja.
Ako gledamo na ovoj matematici, samo da bi ga malo više opipljiv,
staviti neke brojeve ovdje, imamo 7, 0,
tako 7-0, a zatim / 2
je 3 u cjelobrojnog dijeljenja, to je.
Tada trebamo onda dodati naš početi?
Mi ne u ovom slučaju.
Na prvoj iteraciji, to će biti u redu, jer početak je 0.
No, kao što smo napredak, mi stvarno sve samo trebate
kraj - početak / 2.
Tu je jedan drugi trik ovdje, a to je naime jedan od prvenstva.
[Studentski] Trebamo zagrade?
[Nate] Točno, a to je zato što ako mi ne stavi ove zagrade,
onda ova linija će se tumačiti umjesto
kao (kraj) - (početak / 2), koji mi definitivno ne želite.
Pazi za one prednost pravilima.
[Studentski] Zašto nije to kraj + početi?
Zašto nije to kraj + početi?
[Studentski] Zašto je to ne da?
Zašto bi to biti +?
Mislim da si u pravu.
[Studentski] Budući da je prosječna?
[Nate] Kraj + početak, ti ​​si potpuno u pravu.
Ajme, ja sam potpuno goofed. U pravu si.
Ako smo radili na minus, mi bi željeli dodati početi natrag u.
U tom slučaju, ti si vrlo pravo da želimo uzeti prosjek dva,
tako da ne želite ih dodati, za razliku od njih oduzeti.
[Studentski] To bi također raditi ako nisi kraj - početak / 2 + početi.
To bi, ako radimo-ja vjerujem da je tako.
>> Na primjer, ako smo tražili na početak,
, a mi ga pomaknuo ovamo
u 15.
Sada početak je na poziciji dva.
Kraj je u položaju 7.
Ako smo ih oduzimati, dobili smo pet.
Podijeljeno da dva, dobili smo dvije.
I onda smo dodali dva natrag,
i da nam dođe na 4. mjesto,
što je ovdje, što je središnja točka.
[Studentski] Ne moramo se brinuti o omotu?
U kojem smislu ne trebamo brinuti za umatanje?
Ako je zbroj ili razlika između
ovisno o tome kako ćemo to učiniti nije paran broj.
Tada se računalo dobiva zbunjeni li kada je 2,5;
Ne možete premjestiti na lijevo ili desno kako bi se utvrdilo što je središnja točka?
Uspio sam.
Ispada da je s cjelobrojnog dijeljenja,
mi nikada ne dobiti ove plutajuće brojeve točaka.
Mi nikada dobiti decimale.
Totalno odbačena.
Ako imate računalo podijeliti dvije int varijable,
i jedan je 7, a drugi je 2,
nećete dobiti 3,5 kao rezultat.
To će se tri.
Ostatak će biti odbačena, tako da je učinkovito zaokruživanje-
nije okrugla nego kat, ako ti dečki su upoznati s tim u matematici,
gdje ste u potpunosti odbaciti decimale,
i tako da u suštini ste ga krati do najbliže
cijeli položaj, na najbliži cijeli broj.
[Studentski] Ali onda je to problematično, jer ako imaju niz od 7 elemenata
dakle, da automatski preuzima treći elemenat iz sredine umjesto 4..
Kako ćemo se nositi s tim?
To je problematično jer ako smo imali niz od 7,
to bi pokupiti 3. umjesto 4..
Možete li objasniti malo više?
[Studentski] Jer ako imate sedam elemente onda 4. elementa
će biti središnja točka, zar ne?
Zapamtite svoj komentar o tome nula indeksirane, ipak.
[Studentski] Da, tako je u položaju 3. To će biti središnja točka.
Da.
Oh, u redu. Vidim što hoćete reći.
To je vrsta čudno, jer se koristili smo se cijeli ovaj pojam
uzimajući osloboditi od decimale.
To je velika stvar.
Hajdemo završiti ovaj gore.
Mi smo izračunati našu središnju točku.
>> Mi smo testiranje kako bi vidjeli je li naš igla je jednaka srednjoj vrijednosti.
Mi smo tiskanje da smo ga našli, ali stvarno, što želimo učiniti u ovoj situaciji?
Mi smo ga našli, pa želimo da pozivatelj znati da smo ga pronašli.
Imamo funkciju koja je boolean upisali funkcija.
Način na koji smo signal pozivatelja našeg funkciju da smo spremni otići
je možemo reći, "Hej, to je istina."
Kako bismo to postigli, Kevina?
Vi ste površno glavu. >> [Kevin] Dodajte povratak istina.
[Nate] Točno, povratak istina.
Sada, ako to nije jednaka, kako bi mi gledamo na lijevoj polovici?
Bilo koji ideja?
Stella, bilo koji ideja?
Morate postaviti novu poziciju za kraj.
Da.
Dakle, moramo učiniti poziciju sredine - end.
Izvrsno.
Moramo postaviti novu poziciju za kraj
gledati na lijevoj polovici.
To je ono što smo govorili o prije gdje
Ja zadržati ide natrag u ovom primjeru.
Ja sam počinju ovdje, a onda sam na kraju skroz ovamo.
>> Opet, ako smo u potrazi za 15, a naš je srednji je na 16,
i shvaćamo, "Ups, 16 je veća.
Želimo da se presele u lijevoj polovici. "
Mi bi onda premjestiti kraj u 15,
i činimo da po jedan uzimajući daleko od sredine
i postavke koje kao naš novi kraja.
Isto tako, ako želimo gledati na desnoj polovici, kako bi mi to učiniti?
Imate li ideju?
[Studentski] Vi samo postaviti početi srednjem + 1.
[Nate] Veliki.
I sada u slučaju da ne pronađete ništa,
ne da se brine za nas?
Daniel, koji ne bi brine za nas?
[Daniel] Ne
[Nate] Ako mi to učiniti kroz cijeli niz, a mi ne nalazimo ništa,
gdje bi to biti sređeno, ili bi mi voditi brigu o tome?
[Daniel] dok stanje.
[Nate] Da, a uvjet, točno.
To će se pobrinuti da ide kroz cijeli niz ako ne nađemo ništa.
Ova petlja dok će završiti.
Mi nikada neće imati naišao ovaj uvjet,
i možemo se vratiti false.
Mi također može ostaviti ova, ako ovdje ovako
jer ako je to, ako tvrdnja istinita,
i naša funkcija će vratiti,
i tako ćemo biti pobaciti ova funkcija u ovom trenutku
kad smo se vratili istina.
No, ono što se događa s ovom strukturom ovdje?
Hoće li to raditi u potpunosti, ili postoji neki logičan mana tamo?
>> Tu je neki logičan mana postoji, s načinom na koji se to postaviti.
Što bi moglo biti?
[Studentski] Zašto vam je potrebno - i + 1s?
To postavlja naš niz do biti naš novi lijeva polovica i desne polovine.
[Studentski] Ali zašto ne bi li to učiniti bez - 1s + i 1s?
[Nate] Mogli smo ga postaviti jednako na sredinu?
Što bi moglo biti problematično u tome?
[Studentski] Mislim da je neučinkovit, jer ste checking vrijednost koja je već provjeren.
[Nate] Točno, tako Sam je potpuno u pravu.
Ako ste postavili kraj i početak jednak srednjem
umjesto - 1 i + 1 reflektivno,
u nekom trenutku u budućnosti ćemo završiti provjeru polovište opet.
[Studentski] Ja sam počeo pset, a onda sam imala nešto takvo
gdje sam zaboravio + 1, i to je dobio zaglavi u beskonačnu petlju.
Točno, jer ste u nekom trenutku Nikada nećeš dobiti počinju i završavaju
zapravo preklapaju.
Cool.
Tu je još jedan logičan mana, a to je da je ovo definitivno treba biti
else if.
Zašto bi to moglo biti?
>> Razlog je, ako to nije drugdje ako-ste vidjeli to, Kevin?
[Kevin] Da, jer ste promjenu završne točke.
[Nate] Točno.
Mi smo promjenom krajnje točke,
i ako je napisano ovako-hrapavi napraviti prostore između-
provjerit će ovaj slučaj.
Ovaj slučaj, ako to uspije, će se prekinuti iz funkcije.
Tada će provjeriti ovu sljedeći slučaj,
a ako se to uspije, ona će se prilagoditi krajnje točke,
i onda će se nastaviti i provjerite ovaj slučaj.
No, u ovom trenutku, ne želimo da se i dalje provjere.
Srećom, nismo resetirati tačku ovdje,
a znamo da je ovaj slučaj neće uspjeti.
Ali mi svakako želimo staviti drugdje, ako se u tu
iako je to možda u ovom slučaju
jer nismo podešavanjem tačku, koja bi napraviti razliku?
Ne, jer ti slučajevi su isključivi.
Opet, moje loše.
Mi ne, mislim, treba ovo drugo ako.
Možemo mu dati i pokušati ga pokrenuti i vidjeti što se događa.
Zgrada, došlo je do pogreške.
To je vjerojatno zato što sam napustio to b-a i E-ih ovdje.
Moram bilo više od onih gore na vrhu?
To ne izgleda kao što je to.
Mi smanjivanje, graditi,
tamo se ide, tako da sada ako mi tražiti 15,
Da.
Dopustite mi povećali u.
15, da. Možemo ga ponovno pokrenuti.
Prenosi izvornog koda, izgradnju, trčanje.
Možemo tražiti nešto poput 13,
i mi ne bi ništa ispis, tako da to nije zaključilo da je za nas.
To je super, jer to nije u našem listu.
>> Mi smo sada izvan vremena.
To će biti to za ovaj tjedan.
Hvala za ulazak, i vidimo se kasnije.
>> [CS50.TV]