>> JASON Hirschhorna: Dobrodošli do tri tedne, vsi.
Imamo zaseden, ampak zanimivo oddelek pred nami.
Torej, najprej, ker smo naredili nekaj napredovale pri teku, vendar še vedno
so veliko učenja je treba narediti, da sem bo pokazati vama nekaj sredstev
, da bi se izkazalo, da je neverjetno koristno, kot ste pristop ni le vaš
Problem določa, ampak tudi prebaviti vse Material smo vam fantje v
predavanja in kratke hlače in oddelek.
>> Potem bomo porabili prvih 20 25 minut oddelek bo nad
GDB, ki jih lahko ali pa ne sme imeti uporabljeni pri tej točki, je pa
izjemno koristno orodje, ki bo vam debug svoje programe.
Veliko vas je mogoče uporabiti printf v Sredi vašega programa, da ugotovimo
kaj spremenljivka je znašala.
GDB je celo bolje kot printf in ne zamoči svojo kodo, ker vam
jih predvajajo na izvršno datoteko.
Torej bomo šli čez najbolj koristno 10 ukaze, kar potrebujete za GDB, in smo
šli na vaji skupaj, tako V problema zastavila tri in zunaj nje, si
Lahko uporabite GDB za pomoč debug svoje programe.
In na koncu, smo šli čez nekaj sortiranje in iskanje algoritmi
da ste videli v predavanju, in smo bo dejansko kodo, ne samo
psevdokoda, ampak koda binarno iskanje, bubble sort in izbor sort.
>> Torej, najprej želim iti nad sredstvi.
To je obsežen seznam, in to je manjša pisava, ker sem imel veliko
fit tukaj.
Toda to vam ne bo pomagalo le, spet s težavo sklopov in
razgrajanjem informacije, ste se naučili, ampak definitivno, prišel čas, kviz, to bo
neverjetno koristno.
Torej, najprej, predavanje ugotavlja.
Če greste na cs50.net/lectures in pomaknite na posebnem teden in dan,
boste videli, da so opozorila za vsako predavanje, ki ni zgolj
Prepis, vendar popravljeno verzijo kar je bilo zajeto v predavanju z oznako
odrezke in drugih koristnih tidbits.
Priporočam, da ne presegajo tiste.
In potem, kot tudi, da je izvorno kodo voljo iz vsake predavanje.
In še enkrat, bodo ti drsi tudi na voljo na spletni strani cs50.net/sections
ta večer.
>> Torej, drugi so hlače vsak teden, da zajemajo teme, običajno 5 do 15
minut v dolžino.
In tisti, upajmo, da vam bo super premaz na različne teme.
Tretji -
in to je čisto nov to leto - je study.cs50.net.
Če še niste preverili, I Priporočam, da to storite.
Dobiš, da izberete temo.
Imamo na desetine teme tam.
Tako na primer, izberete funkcije.
To vam daje nekaj diapozitivov in opozarja na funkcije.
Tisti, ki so dejansko diapozitivi, ki TFS se spodbuja k uporabi v času našega
predstavitve v oddelku.
Tam je tudi nasveti in triki za obravnavanje s funkcijami, in tam
Težave prakse, ki pomagajo delate s funkcijami.
Prav tako vam povezave na kratko o funkcije in čase, ki deluje
so prišli na predavanje.
Torej study.cs50.net, čisto nova leto, fantastičen vir.
>> Naprej, imam moža, ki je ročno ukaz, ki lahko vodijo v
ukazni vrstici.
Torej, če imate kakršnakoli vprašanja o ukaz, na primer, RAND, ki smo
naleteli prejšnji teden v oddelku in ste verjetno naleteli na
tvoj problem določiti, ko gredo skozi ustvarili kodo, če pa ste tip človeka
rand, boste dobili stran, ki vam pove vse o rand.
To vam daje vse, kar je potrebno, parametri stane, kakor tudi donosnost
tip in kratek opis te funkcije.
>> Torej preverite rand.
To je lahko malo besedna in zmedeno, tako da včasih se mi zdi, da
preprosto Googling, kar hočem vedeti je Najboljši način, da bi našli odgovor.
Tako vadite z Googlom.
Get dober pri Googlu.
To bo postal vaš najboljši prijatelj.
>> Kot tudi Google, če ne morete najti na Googlu, cs50.net/discuss, da je
Forum za razpravo.
Možnosti so, če imate vprašanje, ena vaših 700 + vrstniki je tudi, da
Vprašanje in morda vprašal je že razpravljali
forumi in so jo odgovoril.
Torej, če imate skupno vprašanje, ali imate vprašanje, ki mislite,
Mogoče bi lahko drugi ljudje zaidejo v, odjaviti cs50.net/discuss.
>> Končno, zadnja dva, če želite, da govoriti z resnično človeško bitje, v pisarni
ure od ponedeljka do petka.
Na voljo je tudi na spletu govorilne ure za podaljške študentov.
In nazadnje, vendar nikakor ne najmanj pomembno, me, klicaj.
Vi imate mojo kontaktne podatke.
Če boste kaj potrebovali, vas prosimo, nikoli oklevajte v stik z mano.
Vedno vas prosimo, da to storijo.
Zelo malo od vas so me dodana Gchat, tako da je bila pod pričakovanji,
vendar upam, da bomo spremenili med v tem in naslednjem poglavju.
Kakšna vprašanja v zvezi s sredstvi?
Super.
>> Nazadnje, en čep za povratne informacije, sayat.me/cs50.
Lahko me anonimne povratne informacije o tem, kako delam.
To je bilo res v pomoč prejšnji teden.
Imam nekaj pripomb od vaju Takoj po oddelku, plus od
drugi študentje, ki so ga gledali med tednom, in to
je neverjetno koristno.
Bom poskusil omejiti svojo uporabo Beseda "sladko", vendar bom pokazal moje
navdušenje in razburjenje na druge načine.
Vendar ni bilo druge dodatne Vsebinski zanimiva,
tako pluse in delta.
Zato vas prosimo, dam vidva povratne informacije na tvoj problem sprejemnikov.
Vas prosimo, da mi povratne informacije na mojem poučevanju.
Jaz sem tukaj za vas.
>> Super.
To je vse, kar imam za prvi odsek.
Ima še kdo kakšne Vprašanja doslej?
In imam beležko za nadzorni center.
Podaljški študenti so me messaged pravijo oni niso dobili nobenega zvoka,
ampak to je izven moje moči, da se določi.
Torej, upajmo, da dobi rešeno kmalu.
Če gledate na spletu, hi, vendar me ne sliši.
>> Torej, najprej se bomo iti skozi GDB.
GDB, kot sem namignil na prej, je orodje za odpravljanje napak
veliko bolje kot printf.
Torej, da bi začeli z GDB, fantje, če želite odpreti svoj aparat
in sprejme datoteko, da sem po e-pošti prej - bo to sliko tudi
na voljo na spletu v nekaj -
in vodijo GDB. / ime datoteke.
Prvič, seveda, boste morali zbrati datoteko, saj GDB deluje le na
izvedljive datoteke.
>> Ampak, če si kdaj želeli, da začnete GDB, prva stvar, ki jo storite,
zaženete GDB. / Cezarja.
Tako da je ime programa v katerem smo dogaja, da gredo z njim prav zdaj.
Torej, jaz bom napisala, da Cezarja, ki mi bo dal izvršljivo datoteko
Tukaj obarvana zeleno.
In potem grem teči GDB. / Cesar.
>> In tam greš.
Vidiš, imamo nekaj besedila mi povedali o različici GDB, mi daje
nekatere informacije o garanciji, potem pa imajo poziv BDP, ki izgleda nekako
od kot naš ukazni vrstici poziv vendar pa boste videli, da je odprta
paren, GDB, v bližini paren.
Preden bomo nadaljevali in razhroščevanje to sliko da sem poslal vsem vam, si oglejmo
nekaj uporabnih ukazov, tako da imamo občutek, Česa se bomo za kritje.
>> Ti ukazi so tukaj naštete v Vrstni red, v katerem sem jih na splošno uporabo.
Tako sem začel svoj program, ki ga izvaja GBD. / Ime programa,
v tem primeru, Caesar.
In potem prva stvar, ki mi 99,9% v času, ko je pomenilo prelom tipa.
, Ki določa break točko na glavni.
V bistvu, kaj ti tam delaš je program se bo ustavil na
Glavni tako da lahko začnete preučil linije s črto, ne teče vse
pot skozi.
Lahko odmor na različnih točkah v kodo, ampak glavna je na splošno
dober kraj za začetek.
>> Naslednji ukaz vodim, je rok.
Da se začne program teče, in če boste potrebovali za vstop v ukazno vrstico
argumenti, ga zagnati ukaz.
Teči z argumenti.
Zato, ker bomo čez različico o C, kar je program, vidva
napisal za pset dva -
ta je, seveda, ima nekaj hroščev v to, da bo, upajmo, bomo našli -
bomo teči teči z nekim ukazom Argumenti linijo, ker Caesar,
kot veste, na problem nastavite spec, traja nekaj
Argumenti linija poveljevanja.
>> Naslednji nekaj ukazov, naslednji ena je pravzaprav imenuje dostavo.
Da je ena vas popelje po vrsticah skozi program.
Torej hitting n Enter vas popelje v naslednjo vrstico, izvajanje
predhodna vrstica.
Korak vas popelje ne le Naslednja linija, vendar
vas popelje znotraj funkcije.
Torej, če ste napisali funkcijo v kodo ali če želite, da razišče
na i, na primer, lahko udaril s, in namesto da gredo v naslednjo vrstico
datoteka, ki greste skozi desno Zdaj, boste dejansko stopili v
ta funkcija in videli svojo kodo.
>> Seznam prikazuje, v zelo prijazen do uporabnika format, je 10 ali tako vodi okoli
kjer trenutno v vašem kodo, ki jo tako da lahko dejansko videli datoteko
namesto, da bi zamenjali nazaj in tja med različnimi pogledi.
Print je kot printf, kot že ime pove.
To vam pokaže, kaj spremenljivka enaka.
>> Info domačini je res koristno.
To je posebna različica tisk.
Info domačini vam pokaže vse lokalne spremenljivke, jih vse natisne za vas
, ki so trenutno na voljo.
Zato sem na splošno, namesto da bi izpisal štiri spremenljivke, da sem
radovedni, če sem v zanko, za Na primer, sem samo napisati info domačini,
in mi, kaj je moj boj sem, da bomo pokazali, enaka, kot tudi paleto, da sem
delajo na enakih.
>> Končno, nadaljuje.
Tipkanje odmor vam ustavi V točki prekinitve.
Se lahko sprehodite skozi skladu z vrstica z naslednjo in korakom.
Nadaljuj zažene program za vaš naslednji prekinil točko ali do zaključka, če
ne obstajajo več odmor točk.
Onemogoči odstrani prelom točk, če ti odločila odmor na glavni bilo
neustrezna, ki jih želite nastavite nekje drugje.
In končno q, quit pride iz GDB.
>> Torej ta program. / Caesar, se bomo gledati skozi prav zdaj, in mi
se bo uporaba GDB, da bi našli bugs v tem programu.
Tekel sem ta program prej s Preverite, 50, in imam eno jezijo.
Vse, kar je obstajalo, se zberejo, da opravili veliko testov, ampak za
nekega razloga, da ni prenesel petino test, struženje BARFOO, vse kapice, v
E-D-U-I-R-R, vsi pokrovčki, s tremi kot ključ.
Imam precej blizu.
Imam off z eno črko.
Torej je nekaj majhno napako tukaj.
Sem pogledal skozi mojo kodo.
Nisem si mogel predstavljati.
Upajmo, da lahko fantje mi pomaga ugotovimo, kaj je to hrošč.
>> Tako da je napaka, da smo išče.
Pojdimo v GDB.
Spet sem teči GDB. / Cezarja, tako da zdaj smo v GDB.
In kar je prvi kar sem morala storiti?
Pravkar sem začel GDB.
Naj mi kdo dober Ukaz za vstop.
>> Študent: Break glavni.
>> JASON Hirschhorna: Break glavni.
Fantastično.
Oglejmo tip, ki prijavite
Vi lahko ogledate tukaj ali pa sledite skupaj na svojih računalnikih.
Glavni odmor, in videli boste, prelomna točka je bil določen na -
to mi daje neko čudno pomnilniški naslov, in tudi mi daje številko vrstice.
Če bi bil, da se ozremo na to zadevo, Jaz bi spoznali, da je bil glavni
se je zgodilo v 21. vrstici.
Kaj bi moral teči naslednji?
Je moj program teče?
Ne
Torej, kaj moram teči naslednji?
>> Študent: Run.
>> JASON Hirschhorna: Run.
Bi moral samo teči tek, ali pa je treba Dodam še nekatere druge stvari?
>> Študent: Run s trditvijo.
>> JASON Hirschhorna: Run z Argumenti ukaz.
In ker sem debugging zelo specifičen Primer, naj vnesem, da
argument ukazne vrstice.
Torej bom beži tri, ki je, še enkrat, Izhod sem dobil od pregleda 50.
Zagon programa.
Smo šli skozi nekaj vrstic.
Zdaj boste videli, da smo na liniji 21.
Kako naj vem, da smo na liniji 21?
Ker če pogledaš na levo moje terminala okno, tam
pravi linijo 21.
In to mi daje, pravzaprav, Koda, ki je v 21. vrstici.
Zato sem misspoke prej.
Glavni dejansko ni na liniji 21.
Glavno je nekaj vrstic nad 21 let.
Toda na liniji 21, ki je kje smo poškodovali.
Ta vrstica kode je še ne izvaja.
To je pomembno.
Linija vidite nima še ni bil izvršen.
To je naslednja vrstica kode ste približno za izvedbo.
>> Torej naslednjo vrstico, saj so fantje Verjetno poznate, je to
pogoj preverjanje, da vidim, če imam vpisana argument v ukazni vrstici.
In A-I, kar je drugi del, da delaš?
Kaj je na i?
>> Študent: ga spreminja na celo število.
>> JASON Hirschhorna: Oprostite?
>> Študent: To se spreminja argument celo število.
>> JASON Hirschhorna: Tako, da sem se spreminja arg V1 iz niza na celo število.
In potem, kaj je to preverja?
>> Študent: Če je druga argument v ukazni vrstici, poleg
z izvajanjem programa.
>> JASON Hirschhorna: In kaj je Druga polovica tega
Boolean izraz preverjanje?
Ta del sem, da i?
>> Študent: Če je negativna.
>> JASON Hirschhorna: Pazite, kaj?
>> Študent: Pazite, da je v bistvu pozitivna.
>> JASON Hirschhorna: Točno tako.
To je preverjanje, da vidim, če je negativen, če pa je negativen, jaz
imajo občutek naslednjo linije lahko se mi kričati na uporabnika.
Torej gremo na koncu za izvedbo te vrstice.
Ne vidimo, da črte, ki jo fantje mogoče pričakovati, da vidi kričiš
uporabnik in se nato vrnejo, ker ta vrstica ni izvršiti.
Začel sem 3.
Torej sem v resnici, vnesite dva ukaza argumenti linije, in 3
večja od nič.
Tako smo videli, da je črto, smo izvedli, vendar nismo korak
notranjosti če stanju.
>> Torej, zdaj, next, vidim jaz nastavitev int ključ enaka na i arg v1.
Tako, da sem jaz izdelavo variabilnega ključ.
Torej, če sem izpisal ključ prav zdaj, saj , ki vam omogoča, da vidite,
vrednost znotraj spremenljivke, Ključ je enak 47.
To je čudno, ampak seveda, To je zato, ker nisem
izvršen še to linijo.
Torej, zdaj, če sem udaril n, izvršitev to vrstico, in to ključ za tiskanje, bo ključnega pomena enako 3,
, ki je tisto, kar pričakujemo, da bo enaka.
>> Torej še enkrat, v GDB, v liniji, ki jo Vidim, da še ni izvršena.
Moraš zadeti n ali s ali več drugih ukazov, da dejansko
izvršitev to vrstico.
Tipka Print.
Ključne višini 3.
Doslej je tako dobro.
Niz je golo besedilo.
Oglejmo izvršitev to vrstico.
Dobivam niz od uporabnika.
>> Poglejmo na mojem Check 50, I vpišite BARFOO vse kape, tako da
To je tisto, kar bom vstopiti.
Če sem natisnil golo besedilo.
Boste videli, da je enak niz.
To mi daje neko drugo čudno šestnajstiški številko, vendar pa v
Dejstvo, pravijo, da je moja niz BARFOO.
Če sem hotel videti, kaj ključne znašala na ta točka, kako sem lahko preverite ključ?
>> Študent: Ključ za tisk.
>> JASON Hirschhorna: ključ Print, točno.
In dejansko pa je bližnjica.
Če ste utrujeni od tipkanje tiskanje lahko vpišete str.
Torej, ključni p počne točno isto stvar.
In še enkrat, vidim, da je enako 3.
>> Če sem želel izvedeti, kaj tako ključ in BARFOO znašala hkrati
vendar sem bil utrujen, tipkanje vsak eden od individualno, sem
lahko vnesete info domačine.
To mi daje ključne enako 3.
Golo besedilo enako BARFOO.
Prav tako mi daje ti dve čudne stvari na vrhu, ta spremenljivka i in
ta spremenljivka n.
>> Tisti, ki so dejansko obstoječi v mojem glavnem programu.
Mi jih še niso naleteli, ampak kot predogled, tisti,
obstajajo v moj zanko.
Torej sedaj, so enaki nekaj čudno številke, ker niso bile
Še inicializiran, vendar pa še vedno obstajajo v spomin, tako da si samo določi
do neke smeti vrednosti.
Ampak mi ne vidim ključ v preprostem besedilo tam.
>> Torej bom za izvedbo te vrstice, linija 34, za zanke.
Mi bomo za skok v za zanke, ki jih hitting n.
In sva v zanko.
Mi smo na naši prvi pregled.
In še enkrat, to bi bilo nekako pogledati seznanjeni s tabo, ker je bilo to
Program Cesar, ki je bil napisan, vendar še enkrat, je neke vrste bug.
>> In zdaj, če naredim info domačine, ker sem notranjosti, da je za zanke, boste videli
da i je enak nič, kot smo pričakovali.
To je tisto, kar smo jo nastavite in inicializiran je v zanko.
n enak 6.
To je smiselno, saj smo si zastavili je na strlen navadnega besedila.
Zato sem želel narediti info domačini ali tiskanje za spremenljivko pogosto se prepričajte, da
vse, kar je vedno kaj Jaz pričakujem, da bo enak.
V tem primeru, je vse tisto, kar sem pričakoval, da enaka.
>> Torej začnimo premika skozi to zanko.
Linije sem na linijo, je 36, če je navaden Besedilo i večji od in navaden
Besedilo i je manjša ali enaka z.
Vem, da je moj problem, ne z moje prvo pismo, to je z drugo črko.
Če se ozremo nazaj na Check 50, B gre za E globe.
Vzel bom A in ga zapuščajo, kot je , ne spreminja do D. So
Nekaj ​​je narobe z drugo pismo.
Zato bom, da se premaknete tam v sekundi.
>> Ampak, če sem želel preveriti, kaj nižino Besedilo sem izenačil na to še posebej
tako, mislim, da bi moralo biti kaj?
Kaj bi morala golo besedilo sem enaki v tem Prvi krog skozi zanko?
>> Študent: Zero?
>> JASON Hirschhorna: Plain text of I?
Torej mora biti glavno B. I, seveda enaka nič, ampak golo besedilo
Nosilec nič zaprti oklepaj enak B ker strune, kot smo videli prejšnji teden,
so niz, tako da smo dobili Prvi znak od tega.
Torej, še enkrat, če sem izpisal golo besedilo Jaz, jaz, v resnici dobili znak
B. In to je lepo, kajne?
Jaz ne dejansko imajo golo besedilo I. To ni ena od spremenljivk sem jih
ali inicializiran, vendar lahko natisnete iz cele vrste stvari
Če bi radi.
>> Ampak gremo skozi.
Če navadnega besedila I je večji od A in navadnega besedila I manjše ali enako
Z, ki je nedvomno res, ker imamo kapital B. grem teči
nekatere ukaz na njej.
Videli smo, da je matematika prejšnji teden, tako da bomo jo jemljemo za samoumevno, da deluje
Pravica po Check 50.
>> Te zaviti oklepaji, prvi je pokazala, da sem bil izhodu, če
pogoj, drugi pa je pokazala da sem izhodu za zanko.
In tako zdaj, ko sem udaril Naprej, bomo videli smo nazaj na zanko znova.
Gremo skozi za zanke znova.
Oglejmo dejansko korak v drugo ponovitev zanko in vrsto
info domačini.
>> Tako smo v drugi ponovitvi našega za zanko.
I je enak 1, ki pričakujemo.
Je n enak 6, ki smo pričakovali.
Ključ enak 3, ki smo pričakovali.
In golo besedilo, boste videli, enaka EARFOO zdaj ni več, ker BARFOO
V naši prejšnji ponovitvi, je B spremenila v kapital E. Torej smo na tem
naleteli na težave, tako da je to je, če bomo
potopite v odpravljanje napak.
Vendar pa kdo še kakšna vprašanja o tem, kaj smo do sedaj naredili?
Fantastično.
>> Torej smo na tem, da izvrši to, če stanje, golo besedilo nosilec Zaprl
Nosilec večji od A in golo besedilo I manjša ali enaka Z. Toda preden
Sem šel v to, ker je tam Vem, moja napaka je, želim poudariti
od navadnega besedila I. Tako kaj je dal natisniti.
To počne enako lik, tako da Zdi se doslej, vse je lepo in prav.
>> Zato pričakujem te vrstice na moji logiki, Ta linija bi morala biti res.
To je črka.
Ampak, če sem udaril n, se moramo zavedati, da je to linija v bistvu ni izvrši.
Sem skočil na drugega, če.
Zakaj se je to zgodilo?
>> ŠTUDENT: Ker imate stanje navadnega besedila je večja
kot, ni enak ali večji kot.
>> JASON Hirschhorna: Torej sem imel golo besedilo I je večji od ne večji
ali enako.
Torej je jasno, kapital ni sprožiti to, če pogoj, in smo
Ne stopi vanjo, in smo ne stori potrebnega prehoda.
Tako, da je, pravzaprav.
Sem pogruntal mojo napako.
Jaz bi šel nazaj v moj izvorni datoteki, spremeniti, in jo sproti dopolnjujejo in
teči znova Preverite 50.
>> Ampak bomo videli, samo za pedagogiko je sake, če jaz nadaljujem.
Drugje, če ne izvede niti, vendar Namesto tega je enaka je ukaz
to ne spremeni.
Torej je to sploh ni spremenila, in če sem tiskanje golo besedilo tukaj, bomo videli dogaja
skozi to zanko, ni v bistvu spremeniti ta drugi znak sploh.
To je še vedno kapitalsko A.
>> Torej, še enkrat, bomo debugged našo napako.
Smo spoznali, da je nekaj logike manjka.
In smo ga debugged pred časom, preden dejansko izvrševanje te vrstice,
vendar bi ste opazili, smo imeli samo hit Next in skok, da if,
to pomeni, da se da, če stanje ni res.
Nismo v resnici dobili rezultat smo pričakovali.
Torej, potem bi lahko bili pozvani, imel nismo bili tako prebrisan, da pogled na
da če stanje in preveri, če je v dejstvu, Naš pogoj naj bi ocenili, da
velja v sedanjih razmerah.
>> To je vse za razhroščevanje ta program.
Ima kdo kakšna vprašanja?
Kaj ukaz sem lahko udaril prenehati GDB?
Q. In potem bom pozvani, nehal anyway?
Da ali ne.
Jaz bom udaril ja, in jaz bom nehal GDB.
>> Tako da je bilo hitro premaz za GDB.
Pravzaprav, v resničnem scenariju Jaz sem to naredil na uradnih ur.
Jaz GDBed to točno programa na govorilne ure z študenta.
In če gremo nazaj na ukaze bomo videli preden smo uporabili odmor Main, prvi
kar smo storili.
Uporabili smo teči z argumenti v ukazni vrstici, Druga stvar, ki smo.
Uporabili smo naslednjo veliko, da se premaknete nas s pomočjo linij.
In spet, short version v naslednji pa je n.
To je v oklepaju v sivi barvi na diapozitiv.
>> Nismo uporabljali korak, vendar nismo nujno, da v tem primeru.
Vendar bi jih lahko uporabili v malo kasneje na danes, če smo razhroščevanje, za
Na primer, binarno iskanje, ko binarno Iskanje se imenuje v ločen
Funkcija vendar pa je nekatere napake z njim.
Bomo želeli stopiti v Razpis za binarno iskanje in
dejansko debug.
Seznam nismo uporabljali bodisi zato, ker smo imeli dober občutek za naše kode, ampak če sem
si želijo, da bi dobili občutek, kaj code I je bilo okrog, sem lahko samo uporabo seznama.
>> Natisni smo uporabili, info domačini smo jih uporabili.
Nadaljujemo ni bilo treba uporabiti v tem primera, niti ni moramo uporabiti
onemogočiti, vendar smo uporaba nehal.
Tudi teh 10 ukazi, njihovo prakso.
Če ste razumeli teh 10 ukazov, ti bi bilo treba določiti za razhroščevanje koli
izdati GDB.
>> Torej smo na tem, da gredo naprej, še enkrat, da Jedro oddelka danes, bo čez
ti razvrščanje in iskanje algoritmi.
Preden pa to storite, še enkrat, na vsa vprašanja, Komentarji, skrbi za GDB?
Torej gredo vsi za uporabo GDB namesto printf?
Torej vsi, zavoljo neskončnost je, vsakdo je pokimal z glavnim pravice
Zdaj, tako da vas bo ob uradnih urah in vse TFS vas in boste videli
bodo rekli, mi je pokazal, kako uporabljati GDB, in morda ne boste mogli
jim pokazati, kajne?
Vrsta?
Mogoče upajmo.
Cool.
>> Torej bomo za prehod v razvrščanje in iskanje.
Boste videli, da imam seznam že razvrščena za nas, ampak da se ne bo
da je tako vedno.
Torej, problem določiti specifikacije Problem nastavite tri, imate kratke hlače
da si lahko ogledate, in dejansko vas vabi, da gledam te hlače.
Tudi v predavanju prejšnji teden, smo šli čez Veliko teh algoritmov, tako da sem
ne bo treba izgubljati časa v razredu dogaja znova teh algoritmov ali risbo
slike za kako ti algoritmov.
Again, da informacije, ki jih lahko ponovno watch Predavanje, ali te informacije
se ujeli z neverjetnimi v kratkih hlačah Za ta iskanja, vse
ki so na voljo na cs50.net.
>> Torej, namesto, kaj bomo storiti, je napisati teh programov.
Imamo občutek, mentalni model, kako delajo, in kaj bomo
storiti je, da jih Koda za resnično.
Bomo to spremenilo miselni model, da je slika, če hočete, v
dejanska koda.
In če si bil malo zmeden ali meglen na duševno modela, popolnoma
razumeti.
>> Mi dejansko ne bo skočiti na kodo takoj.
Torej, medtem ko je ta poziv v tem diapozitiv prosi ste kodo binarno iskanje in
pravzaprav, ponavljajoč različica binarno iskanje, prva stvar, ki sem
res želim, da narediš je napisati nekaj psevdokoda.
Torej imate ta miselni model kako binarno iskanje dela.
Vzemite list papirja, če imate eno takoj na voljo, ali odpreti
urejevalnik besedila, in rad bi vsi pisati.
Vzemite štiri minute, da napišete psevdokoda za binarno iskanje.
>> Again, razmišljati o tem, da duševna modelu.
Pridem okoli, če imate vprašanja in lahko črpamo sliko ven.
Ampak najprej, preden začnemo programiranje, Rad bi, da napišete
psevdokoda za binarnega iskanja tako, ko smo potopite, imamo nekaj smeri, kot
kamor naj se odpravimo.
>> ŠTUDENT: Ali lahko predpostavimo niz Vrednosti smo dobili, je že urejeno?
>> JASON Hirschhorna: Torej za binarno iskanje na delo - odlično vprašanje - si
morali sprejeti v razvrščenega.Vse nabor vrednosti.
Torej, predvidevam, da bo delovalo.
Vrnili se bomo na ta diapozitiv.
Boste videli v vijolično funkciji Izjava je bool binary_search int
vrednost, int vrednosti, int n.
To je treba videti seznanjeni, če ste že obrnili ali gotten vaš
roke umazane s problemom set.
>> Ampak to je vaša naloga deklaracija.
Again, ne bi bilo treba skrbeti, toliko v tem trenutku.
Kaj si res želim, da narediš, je, da Štiri minute do psevdokoda binarno
iskanje, in nato gremo nad da kot skupina.
In bom prišel naokoli.
Če imate vprašanja, vas prosimo, da dvigne roko.
>> Zakaj ne vzameš dve minuti da zaključite s psevdokoda?
Vem, da se to zdi smešno, da smo porabili toliko časa
nekaj, kar sploh ni dejansko C, še posebej pa za to bolj
zahtevni algoritmi in problem sklopov, ki jih imamo, da ugotovimo,
začetkom leta psevdokoda ne skrbi o skladnji, samo skrbi
logika, je neverjetno koristno.
In na ta način, da nisi reševanje dveh neverjetno težki problemi naenkrat.
Ti si samo s poudarkom na logiki, in potem ko se premikate v skladnji.
>> OK.
Začnimo skozi psevdokoda.
Pisal sem tukaj, binarno Iskanje psevdokoda.
To bomo napisali na odboru skupaj.
Ali ga bom pisati in vam bom dal me pozivom rabim.
Tako da lahko vsakdo izročiti mi prvi vrstica psevdokoda ste
napisal za binarno iskanje?
Da, Annie?
>> Študent: Medtem ko je dolžina Seznam je večja od nič.
>> JASON Hirschhorna: Medtem ko je dolžina Na seznamu večja od nič.
In spet smo videli nekaj C-išče sintaktične stvari tukaj.
Vendar je večina tega je v angleškem jeziku.
Je kdo kakšno vrstico, da dajo pred tem v svojem psevdo-kodo?
>> ŠTUDENT: Get niz za razporejene številke.
>> JASON Hirschhorna: Napisal si "dobil array sortiranih številk. "Per
Izjava funkcijo, bomo mimo array razvrščenih številk.
>> Študent: [neslišno].
>> JASON Hirschhorna: Do bomo imeli, da.
Ampak ja, če ne bi imeli, da smo bi morali rešiti našo paleto
številke, ker binarno iskanje deluje le na razvrščena nizi.
Torej, medtem ko je dolžina seznama enaka nič, sem bo dal v nekaterih zavitimi oklepaji
da bi bilo videti malo bolj podobno C. Toda medtem ko se zdi, da na zemljevidu
medtem ko zanke, tako znotraj tega časa zanka kaj moramo
stori za binarno iskanje?
>> Nekdo, ki mi ni dal odgovoriti še ni, ampak kdo je to napisal?
>> ŠTUDENT: Pojdi na sredini seznama.
>> JASON Hirschhorna: Tom.
Pojdi na sredini seznama.
In vprašanje, spremljanje, kaj storimo, ko smo na
Srednji seznama?
>> ŠTUDENT: Ali preverite, ali ki je število, ki ga iščete.
>> JASON Hirschhorna: Odlično.
Pojdi na sredini seznama in preverite če je naša vrednota je tam -
fantastično.
Je kdo še kaj , ki je bil drugačen od tega?
Točno tako.
>> Prva stvar, ki jo storite v binarnem iskanju je šel na sredino seznama in
preverite, če je naša vrednost je tam.
Torej predvidevam, če je naša vrednota tam, kaj naj naredimo?
>> Študent: Vračamo se nič [neslišno].
>> JASON Hirschhorna: Ja, če so naši vrednost je tam, smo ga našli.
Torej lahko povemo na nek način, vendar to Funkcija je definirana, uporabniku povemo,
smo ga našli.
Če je ni, čeprav je, da je če to postane zapleteno.
Torej, če je ni zraven, nekdo drug, ki je delal na binarnem iskanju ali
je zamisel zdaj, kaj naj naredimo?
>> Študent: Vprašanje.
>> JASON Hirschhorna: Ja?
>> ŠTUDENT: Je matrika že urejeno?
>> JASON Hirschhorna: Ja, smo ob predpostavki, Niz je že urejeno.
>> Študent: Torej boste morali preveriti, če vrednost, ki jo vidite, je večja od
Vrednost, ki jo želite, lahko premaknete na sredi druge polovice.
>> JASON Hirschhorna: Torej, če sredina Seznam je večji od tistega, kar smo
išče, potem pa kaj?
Gremo kam?
>> ŠTUDENT: Želite, da se premaknete polovice seznama z
številke nižje od tega.
>> JASON Hirschhorna: Torej bomo klic, da levo.
Torej, če je srednji večja, lahko iščemo levi polovici seznama.
In nato po iskanju, kaj Ne mislim z iskanjem?
>> Študent: [neslišno].
>> JASON Hirschhorna: Gremo na sredini.
Mi dejansko ponovite ta stvar.
Gremo nazaj skozi našo while zanko.
Dal vam bom zadnjega -
drugega, če je srednji je manj od tistega, kar delamo, kaj delamo tukaj?
>> ŠTUDENT: Pojdi na desno.
>> JASON Hirschhorna: Išči pravico.
To izgleda dobro, vendar pa kdo vse, kar se nam morda manjka ali
karkoli drugega, da si dal V vašem psevdo-kodo?
Torej, to je tisto, kar smo imeli do sedaj.
Medtem ko je dolžina seznama večja od nič, bomo šli
na sredini seznama in preveri, če je naša vrednota je tam.
>> Če je srednja večja, bomo iskanje levo, drugače, če je srednji
manj, bomo iskati pravico.
Torej smo vsi imeli nekaj poznavanja izrazi, ki jih uporabljamo v računalništvu
in orodja imamo.
Vendar boste že opazili, da smo govoril v angleščini, vendar smo ugotovili,
Veliko stvari, ki se je zdelo, da map na orodja, ki jih imamo v našem kodiranja kompletom orodja.
Torej, pravico off kij, nismo bo dejansko kodo še.
>> Kaj vidimo tukaj v angleškem jeziku, ki zemljevidov na stvari, ki jih je mogoče napisati v C?
>> Študent: Medtem ko.
>> JASON Hirschhorna: Med.
Torej je to, medtem ko tukaj Karte za kaj?
>> Študent: while zanko.
>> JASON Hirschhorna: medtem ko je zanka?
Ali verjetno bolj na splošno, zanka.
Želimo narediti nekaj, kar znova in znova.
Torej bomo kodo zanke.
In smo že vedeli, saj smo naredili to nekajkrat in mi
imajo veliko primerov tam, kako pravzaprav pisati
ta indeks za zanko.
Tako da bi moralo biti precej enostavno.
Mi bi morali imeti možnost, da se da začela precej hitro.
>> Kaj še vidimo tukaj?
Katere druge strukture skladnji Stvari da smo seznanjeni s tem, v C, bomo
že imate občutek Based off besed, ki jih uporabljajo?
Da, Anna?
[Neslišno]
samo hecam.
Anna, nadaljuj.
>> Študent: Če in drugje.
>> JASON Hirschhorna: Če in drugega - tukaj.
Torej, kaj tisti, izgledal?
>> Študent: če drugega izjave.
>> JASON Hirschhorna: Ja, pogoji, kajne?
Tako da bomo verjetno morali napisati nekaj pogojev.
In še enkrat, čeprav morda zmedeno na Najprej smo na splošno imajo smisel zdaj
kako napisati razmer in sintaksa za pogoje.
In če ne bomo, bomo samo poglej gor sintaksa pogojev, izreži in prilepi
da, saj vemo, Potrebujete stanje tukaj.
Kakršne koli druge stvari, vidimo, da je zemljevid na Stvari bomo morda morali narediti v C?
Ja, Aleha?
>> Študent: To je lahko očitno, ga samo preverjam, če
vrednost je enaka nekaj.
>> JASON Hirschhorna: Torej, kako preveriti in - tako da gredo na sredini seznama
in preverite, če je naša vrednost je tam?
Kako bomo to storili v C?
Kaj je sintaksa za to?
>> Študent: Enako, enako.
>> JASON Hirschhorna: Enako, enako.
Torej to preverjanje je verjetno bo da v množici enakih, enaka.
Tako da bomo vedeli, da potrebujemo, da nekje.
In dejansko, samo v pisanju, vidimo te druge stvari.
Bomo morali narediti nekaj Operaterji primerjava tam -
fantastično.
Tako da dejansko izgleda, z in velik, nismo pisno
Beseda oznako C še.
Ampak imamo duševnega modela navzdol preko predavanj in teh hlačah.
>> Napisali smo psevdo-kodo kot skupina.
In že imamo 80%, če ne 90%, kar moramo storiti.
Zdaj moramo samo kodo to, kar je zopet
nepomembno problem rešiti.
Ampak vsaj smo obtičali na logiki.
Vsaj zdaj, ko gremo na uradnih ur, Lahko rečem, da vem, kaj moram
narediti, vendar lahko opomni Pošljite mi sintakse?
Ali celo, če so uradne ure gneča, vam Google lahko za sintakso, ne
kot da bi obtičali na logiki.
>> In še enkrat, namesto da poskuša rešiti logika in težave sintaktične vse
hkrati pa je pogosto veliko bolje odmor teh dveh trdih probleme v off
dve bolj obvladljiv in ne tisti, pseudo-code prvi in ​​nato kode v C.
Pa poglejmo, kaj sem naredil za psevdorazreda kodo pred časom.
>> Medtem ko je dolžina seznama večja od nič, poglej na sredini
seznama.
Če je ugotovljeno število vrnil true, ostalo če je številka višja, iskanje levo.
If število manjše, iskanje Dobro, vrne false.
Tako da je videti skoraj enaki, če ne skoraj identična, kar smo napisali.
Pravzaprav, Tom, kaj si najprej rekel, poškodovali na sredini seznama, in če
Številka najdemo v dveh izkazih je pravzaprav tisto, kar sem storil.
>> Jaz jih združila tam.
Moral bi poslušal vam prvič.
Tako da je pseudo-code imamo.
Če želite, da zdaj, žal, pojdi nazaj k naši začetni problem.
Oglejmo kodo binary.c.
Tako izvajajo iterativno verzijo binarno iskanje s pomočjo naslednjih
Izjava funkcijo.
>> In vam ni treba kopirati to samo še navzdol.
Jaz sem dejansko dogaja, da se odpre do tukaj binary.c.
Tako da je izjava funkcija v sredini zaslona.
In boste videli sem vzel psevdo-kodo od mojih strani, ampak skoraj identična
na kaj smo pisali, in dal, da je za vas.
Torej, zdaj, vzemimo pet minut kodo te funkcije.
>> In spet, če imate kakršnakoli vprašanja, dvigni roko, povej mi, bom
zapustiti okoli.
>> Študent: [neslišno].
>> JASON Hirschhorna: Zato sem vzel binarno opredelitev iskanje po
vrh, na liniji 12.
To je tisto, kar sem dobil za moj diapozitiv.
In potem vse to pseudo-code sem kopirate in prilepite iz diapozitiva,
pseudo-code slide.
Jaz sem še vedno ne sluha [neslišno].
>> Torej, če ste končali izvajanje, želim, da preverim.
Jaz vam po e-pošti datoteko helpers.h prej v tem razredu.
In bo na voljo tudi na spletu za prenos za ljudi, ki gledajo
zamudo tokrat oddelek.
In sem uporabil generično porazdelitev koda od pset3.
Zato sem vzel find.C, uporabi moje helpers.h datoteko namesto spisa helpers.h
, ki je navedena v kodi za distribucijo.
>> In sem moral narediti še eno spremembo v find.C, namesto da bi samo preprosto
Iskanje pokličite binary_search.
Torej, če želite, da preizkusite svoje kode, vem, da je to, kako to storiti.
V bistvu, ko bomo tekmovanje v teku to kodo prav zdaj, sem naredil kopijo
moja pset3 imenik, še enkrat, izmenjano datoteke Pomočniki, nato pa je, da
spremenite v find.C poklicati binary_search in ne zgolj iskati.
>> JASON Hirschhorna: Da.
Imate vprašanje?
>> Študent: Nevermind.
>> JASON Hirschhorna: Brez skrbi.
No, pa začnimo.
Mi bomo to kodo kot skupina.
Ena druga note.
Tudi to se lahko zlahka zamenjali V problematičnih zastavila tri.
Imam helpers.h datoteko, ki je precej od helpers.h smo dal,
izjavlja, binarno iskanje, mehurček sort in izbor sort.
In v find.c boste opazili na spletu, kaj je to, linija 68, pravimo binarno
iskanje namesto iskanja.
Torej še enkrat, kodo, ki je na voljo spletu ali kodo, ki ste
ustvarjanjem prav zdaj jih je mogoče zlahka zamenjali v za p nastavite 3 za pogledat.
>> Toda najprej, kaj je binarno kodo iskanje.
Naša funkcija izjavo, smo se vrnili v bool.
Mi celo imenovano vrednost.
Peljemo niz števil, imenovano vrednote, in vzamemo n biti
velikostjo polja.
Na liniji 10, tukaj imam oster vključujejo stdbool.h.
Ali kdo ve, zakaj, da je tam?
Kaj to vrstico kode storiti?
>> Študent: To vam omogoča, da uporabite tip bool donosa.
>> JASON Hirschhorna: Točno tako.
>> ŠTUDENT: Ali je knjižnica, ki omogoča Za uporabo tipa bool donosa.
>> JASON Hirschhorna: Torej oster vključuje stdbool.h linija mi daje nekaj
opredelitve in izjave za stvari da sem dovoljeno uporabljati v
Ta knjižnica.
Tako med tistimi, ki pravi, da obstaja Ta vrsta imenuje int, in ga je mogoče
resnična ali neresnična.
Torej, to je tisto, ki črta počne.
In če ne bi imel to vrstico, jaz bi zaideš v težave, za to pisanje
beseda tukaj, bool, prav tam.
Točno tako.
Tako da moram, da v tem zakoniku.
OK.
Torej je to, še enkrat, je iterativen Različica, ni rekurzivna ena.
Torej nam začeli.
>> Začnimo s tem prvič vrstica psevdo kode.
In upam, da bomo - ali ne upam.
Mi smo šli po sobi.
Šla bova po vrsticah, in jaz vam bo pomagal lahko ugotovimo, linijo, ki jo potrebujemo
najprej napisati.
Torej, medtem ko je dolžina seznama je večja od nič.
Začnimo na sprednji strani.
Kaj linija naj napišem Tukaj, v kodi?
>> Študent: Medtem ko oklepaj n večji kot 0.
>> JASON Hirschhorna: Medtem ko n je super od 0.
Torej je n velikost seznama, in smo preverjanje, ali -
>> [interposing GLAS]
>> JASON Hirschhorna: - žal?
>> ŠTUDENT: Kako vemo, da je n je velikost seznama?
>> JASON Hirschhorna: Žal mi je.
Po specifikaciji pset, iskanje in neke funkcije, ki jih potrebujete za pisanje,
n je velikost seznama.
Pozabil sem pojasniti, da tu.
Ampak ja. n je velikost Seznam, v tem primeru.
Torej, medtem ko je n večji kot 0.
OK.
To se lahko izkaže za nekoliko problematično čeprav, če gredo stvari naprej.
Saj bomo še naprej vedeti velikost seznama skozi to
funkcija, vendar pravijo, da začnete s paleto 5 števil.
In smo šli skozi in ki smo jih Zdaj jo zožiti na
array 2 števil.
Ki 2 cela pa je to?
Velikost je 2 zdaj, ko želimo pogled, ki pa 2 pa je to?
Ali to smiselno, na to vprašanje?
>> OK.
Bom še enkrat vprašal.
Tako smo začeli s to zbirko 5 cela števila in n enaka 5, kajne?
Bomo teči tu skozi.
bomo verjetno spremenite velikost, Dobro, saj gredo stvari naprej.
, Ki je tisto, kar smo rekli, da smo želeli storiti.
Mi ne želimo iskati popolna stvar znova.
Zato pravim, da ga spremenite v 2.
Vzamemo polovico seznama, ki je čudno.
Torej samo kramp 2.
Torej, zdaj je n enak 2.
Se opravičujem za slabo suha označevalci izbrisati.
Kajne?
In smo iskali po seznamu spet s seznamom velikosti 2.
No, naš niz je še vedno v velikosti 5.
Pravimo, želimo le, da se iskanje 2 mesta v njej.
Torej, kateri 2 pike so to?
>> Ali to smiselno?
So na levi strani 2 pike?
So to pravi 2 pike?
So srednji 2 pike?
Imamo zdrobljen problem dol, vendar smo pravzaprav ne vedo, kateri del
problem še vedno iščemo na, Pravkar ga ob teh 2 spremenljivk.
Zato moramo malo več, potem, pri čemer je n večji kot 0.
Moramo vedeti, kje da n je v našem dejanski matriki.
>> Torej, ali kdo spremenite te vrstice?
Večina te proge je popolnoma pravilna.
Je pa še en dodatek?
Bomo lahko zamenjali nekaj ven nv da te vrstice malo bolje?
Mm-hm?
>> ŠTUDENT: Ali ste inicializacijo spremenljivke podobno dolžino in n, da bomo potem uporabimo
kasneje v funkciji?
>> JASON Hirschhorna: Tako inicializacijo spremenljiva dolžina na N
in da jih uporabimo kasneje?
Ampak potem smo le posodobiti dolžino in smo Še vedno naletijo na ta problem, kjer smo
zmanjšati dolžino našega problema, vendar nikoli ne vemo, kje, pravzaprav,
da dolžina preslika na.
>> ŠTUDENT: Ali ni, da se bo zgodilo kasneje, ko pravite, iskanje levo,
iskanje kajne?
Boš šel na drugačen področje vašega -
>> JASON Hirschhorna: Mi smo šli na območje, ampak kako naj vemo,
ki so iti?
Če imamo le niz in to n, kako vemo, kje
pojdite v matriki.
V hrbet, kajne?
>> ŠTUDENT: Ali imate, kot so, nižja meja in zgornja meja spremenljiva ali
nekaj takega?
>> JASON Hirschhorna: OK.
Torej je to še ena ideja.
Ne le sledenja velikost, smo spremljali manjši in
zgornja meja spremenljivka.
Torej, kako bomo izračunali višino od spodnjo mejo in zgornjo mejo?
>> [interposing GLAS]
>> JASON Hirschhorna: Odštevanje.
In tudi sledenja nižje zavezuje, in zgornja meja, da nam sporočite,
smo iskali ta dva?
Smo iskali ta dva tukaj?
Smo iskali srednjo dva?
Verjetno ni srednji dve, ker Ta, v bistvu, je binarni iskanje.
Toda zdaj bomo lahko dobili velikost, ampak tudi meje matrike.
V bistvu, če imamo velikan telefonski imenik, jo razporek na pol.
Zdaj vemo, če je ta manjša Telefonski imenik je.
Ampak mi dejansko ne parajoč Telefonski imenik na pol.
Še vedno moramo vedeti, kje Nove meje našega problema je.
Ima kdo kakšna vprašanja o tem?
Ja?
>> ŠTUDENT: Ali bi bilo delo z ustvarjanjem spremenljivka, i, da si potem samo premik
položaj I glede na svojo trenutni položaj, in dolžino, n?
>> JASON Hirschhorna: In kaj je i?
>> Študent: Kot sem pa kot neke vrste -
Kot bi inicializacijo i, da se srednji položaj matrike.
In potem, če je vrednost na položaju i v Sredi niza v ugotovljeno, da
biti manjša od vrednosti, ki jih potrebujete, sem zdaj postane dolžina matrike, plus
Vrednost i deljeno z 2.
Všeč mi je, vidite, prestavite i -
>> JASON Hirschhorna: Right.
>> Študent: - do -
>> JASON Hirschhorna: Torej, jaz sem skoraj Pozitivno je, da bo delovalo.
Bistvo pa bitje, morate dva deli informacij tukaj.
To lahko storite z začetkom in koncem, ali lahko to storite z velikostjo in potem
nekateri marker.
Morate pa dva kosa informacij tukaj.
Ne moreš ga le z enim.
Ali je to smiselno?
>> Tako da smo šli skozi, in bomo storili [neslišno]
in ustvariti nekaj označevalcev.
In kaj ste napisali v kodi?
>> Študent: Pravkar sem rekel, int meja ena je enak 0.
>> JASON Hirschhorna: Pokličimo da int, ki se začne.
>> ŠTUDENT: OK.
>> JASON Hirschhorna: To naredi več smisla za mene.
In?
>> Študent: Rekel sem, mislim, int konča.
>> JASON Hirschhorna: int konča.
>> UČENEC: Mislim, n minus 1, ali nekaj takega.
Kot, zadnji element.
>> JASON Hirschhorna: Torej si napisal, int začenši enak 0, podpičjem in int
končnica je enaka n minus 1, podpičjem.
Torej v bistvu, kaj delamo tod 0 prvi položaj.
In kot vemo, v nizi, ne gredo do n, gredo do n minus 1.
Torej, imamo nekaj meje našega paleto.
In te začetne meje zgodi, da bo začetne meje našega problema.
OK.
Tako, da se dobro sliši.
Potem, če se vrnemo k tej vrstici, medtem dolžina seznama je večji od 0,
kaj, namesto N, naj smo dal noter?
>> ŠTUDENT: Napišite konča minus začetek.
>> JASON Hirschhorna: Medtem ko se konča minus Začetek je večja od 0?
OK.
In bi lahko, če bi želeli da to malo lepše, kaj
še lahko storimo?
Če smo želeli očistiti ta oznaka se malo?
Kako lahko znebiti 0?
To je le vprašanje sloga.
To je pravilen zdaj.
>> Študent: Ending ne enako začetek?
>> JASON Hirschhorna: Mi lahko kaj?
>> [interposing GLAS]
>> Študent: Konec je večja?
>> JASON Hirschhorna: Ja.
Mi lahko samo to, ko konča večja od začetka.
Prav.
Dodali smo začeli na drugi strani to, in smo se znebili 0.
Torej je to le videz malo čistejši.
OK.
Torej, medtem ko je dolžina seznama je 0, smo pisali da, medtem ko je končala, večja
od začetka.
Bomo dal v naš potrebno zaviti oklepaji, nato pa prva stvar
želimo storiti, je pogled na jim v malo seznamu.
Vi?
Ali mi lahko poveste -
>> Študent: Če oklepaj Vrednost square bracket -
>> JASON Hirschhorna: Če oklepaje Vrednost oglati oklepaj.
>> Študent: Ending deliti z 2.
>> JASON Hirschhorna: Ending?
>> Študent: vidim težave z vašim -
>> JASON Hirschhorna: OK.
No, poglej na sredini.
Kako vemo, kaj je srednja?
Ja.
Naj izbrisati to kodo.
Kako vemo, kaj je srednja?
V nič, ko imate začetek in konec, kako se vam zdi
srednji?
>> Študent: Ti v povprečju.
>> Študent: Dodate jih skupaj in potem -
>> JASON Hirschhorna: Dodaj jih skupaj in potem?
>> Študent: In ti v povprečju.
Ga delimo z 2.
>> JASON Hirschhorna: Dodaj jih skupaj in deli z 2.
Torej int sredina enaka?
Tom, ga lahko daš?
>> Študent: Začetek plus konča -
>> JASON Hirschhorna: Začetek plus konča.
>> ŠTUDENT: Vse, nosilec, deljeno z 2.
>> JASON Hirschhorna: Vse, v oklepaju, deljeno z 2.
Tako, da mi daje sredini ničesar, popraviti?
>> Študent: Prav tako je treba, da se zaokroži navzgor.
>> JASON Hirschhorna: Kaj storiti Mislim, da moram to zaokroži navzgor?
>> [interposing GLAS]
>> Študent: Ker, če je čuden številko, potem je to všeč -
>> JASON Hirschhorna: No, v redu.
Tako sem lahko zaokroži navzgor.
Ampak, če je liho število, 5, sem lahko ob 1 od sredine.
Ali če je celo število, ne pa, da je bolje tako.
Če je 4, imamo samo 4, lahko vzamem prvi "sredina", citiram, konec citata ali
Drugi "srednji" one.
Bodisi bi delala za binarno iskanje, tako da ne bom dejansko morali zaokrožiti.
Vendar pa obstaja ena stvar, ki sem morali gledati na to linijo.
Mi ga ne bi še zavedaš, vendar pa se bomo vrnili k njim.
Ker je ta vrstica v resnici še vedno potrebuje še eno stvar.
>> Ampak sedaj smo pisno štiri vrstice kode.
Imamo našo začetek in konča označevalcev.
Imamo while zanko, ki preslika na neposredno na naš psevdokoda.
Smo iskali na sredini, ki vzporejajo neposredno na našem psevdokoda.
Rekel bi, da to gre na sredino seznama, ta vrstica kode.
In potem, ko gremo na sredini Seznam, naslednja stvar, ki jo morate storiti,
se preveri, če je naša vrednota je tam za psevdokoda smo napisali prej.
>> Torej, kako preveriti, če naša vrednota je na sredini seznama?
You.
Zakaj ne bi to naredili?
>> Študent: Če naša vrednota je Na sredini je enaka
kar smo si zadali -
Mislim enako enako -
>> JASON Hirschhorna: It -
OK.
>> Študent: Nisem prepričan, kaj spremenljivka iščeva
Za čeprav je, ker -
>> [interposing GLAS]
>> Študent: [neslišno].
>> JASON Hirschhorna: Točno tako.
Na deklaraciji funkcije, iščemo v vrednosti.
Torej smo iskali v vrednosti v spekter vrednosti.
Torej ste ravno prav.
Boste storili, če je odprt paren vrednost nosilec srednja zaprta oporna enaka
enaka vrednosti, in tam notri Kaj moramo storiti?
Če je naša vrednota je tam, kaj to moramo storiti?
>> [interposing GLAS]
>> ŠTUDENT: Vrnitev nič.
>> JASON Hirschhorna: Vrnitev res.
>> ŠTUDENT: Vrnitev res.
>> JASON Hirschhorna: Michael, kaj to linijo ne?
>> Študent: [neslišno] je program, ki poteka njen potek in da je konec, in
ste, kaj morate storiti?
>> JASON Hirschhorna: Program ali kaj?
V tem primeru?
>> Študent: funkcija.
>> JASON Hirschhorna: funkcija.
In tako, da se vrnete na karkoli se imenuje jo in ji dajejo vrednost, res.
Točno tako.
Main.
Kaj je tip vrnitev v glavnem, Michael?
>> Študent: int, celo?
>> JASON Hirschhorna: int, točno.
Število.
To je bilo samo vprašanje, se prepričajte, fantje so bili na vrhu je.
Kaj to ponavadi vrne, če Vse stvari, ki dobro delujejo?
>> Študent: Zero.
>> JASON Hirschhorna: Zero.
Točno tako.
>> Študent: Če to le vrne true, ni informacija dana
kaj -
Oh, to je samo rekel, da je ta vrednost je znotraj polja.
>> JASON Hirschhorna: Točno tako.
Ta program se ne daje informacij kje točno je vrednost.
To je samo rekel, ja, smo ugotovili, to, ali ne, ga nismo našli.
Torej, če je ugotovljeno število, vrne true.
No, pravzaprav sva to storila, da res hitro, s to eno vrstico kode.
Torej bom prestavil linijo psevdokoda.
>> Študent: Ne potrebujemo spremeniti niz?
To bi moralo biti vrednote, ne pa vrednosti, kajne?
>> JASON Hirschhorna: Žal mi je.
Hvala vam.
>> Študent: Ja.
>> JASON Hirschhorna: Ta vrstica morajo biti vrednosti.
Točno tako.
OK.
Zato smo pogledal na sredini seznama.
Če je število našel vrnitev res.
Nadaljevanje z našimi psevdokoda, če srednji večja, iskanje zapustil.
Torej sem imel tukaj, če število višje, iskanje zapustil.
Constantine, lahko daš me v to vrstico kode?
>> Študent: Če vrednost sredini -
>> JASON Hirschhorna: Torej, če vrednost -
če je odprt paren vrednosti nosilec srednji zaklepaj -
>> ŠTUDENT: Je manjša od vrednosti?
>> JASON Hirschhorna: Je manjše.
>> ŠTUDENT: Manj kot vrednost.
>> JASON Hirschhorna: Vrednost.
No, pravzaprav, ki jih želite preveri, če je številka -
Žal mi je.
To je malo zmedeno.
Ampak drugje, če številka v Sredi seznama večja.
>> Študent: Oh, OK.
>> JASON Hirschhorna: Jaz bom spremenila.
Else, če je srednji višji smo želite iskati levo, OK?
In kaj bomo naredili v notranjosti če to stanje?
>> ŠTUDENT: Ali lahko naredite majhno spremembo stanje, jo spremenite v drugega, če?
>> JASON Hirschhorna: Else, če?
OK.
Tako se bo ta koda izvrši približno enako.
Ampak lepo stvar, če drug uporablja če, if ali če, if, ostalo
pomeni, da je samo eden od tistih, ki se bo preveri, ne vsi trije,
potencialno.
In to je malo lepše na računalniku, ki je
teče svoj program.
>> Torej [? Constantine,?]
sva v tej vrstici, if vrednosti, Nosilec srednji zaklepaj
je večja od vrednosti.
Kaj moramo storiti?
Moramo iskati levo.
Kako bomo to storili?
Bom dal zagon.
>> Imamo ti dve stvari ti ki se začne in konča.
Torej, kaj se mora zgoditi na začetku?
Če želite iskati po levem Seznam, smo dobili naše sedanje začetek.
Kaj moramo storiti?
>> Študent: Postavili smo začetek na sredini in 1.
>> JASON Hirschhorna: Če je tako, da smo iskanje po levi?
>> ŠTUDENT: Žal mi je, srednji minus -
tako da bi bilo konec srednji minus 1 in začetek -
>> JASON Hirschhorna: In kaj se zgodi, da na začetku?
>> Študent: To ostane ista.
>> JASON Hirschhorna: Do pomen ostane isti.
Če bomo iskali na levo, mi smo z uporabo enake začetek -
Točno tako.
In konča?
Žal mi je, kaj počne konča spet enako?
>> Študent: Middle minus 1.
>> JASON Hirschhorna: Srednja minus 1.
Zakaj minus 1, ne samo srednji?
>> Študent: middle je zmanjkalo sliko je že, ker smo imeli
preveril, da je tam?
>> JASON Hirschhorna: To je Točno tako.
Sredina je iz slike.
Smo že preverili na sredini.
Torej, ne želimo "na sredini," citat konec citata, da še naprej ostane v
matrika, ki ga iščemo.
Torej, to je fantastično.
>> Else, če je nosilec vrednot srednjega večja kot vrednost konča enaka
srednji minus 1.
Jeff, kaj o tem zadnje vrstice?
>> Študent: Else.
Vrednosti sredini je manjša od vrednosti?
>> JASON Hirschhorna: bova ste me daje drugje.
Torej, če mi ne dajo -
>> Študent: In potem se začne bi srednji plus 1.
>> JASON Hirschhorna: Začetek Rezult srednji plus 1, še enkrat, za isto
Razlog, da Constantine nam je dal prej.
In na koncu, ki pa še ni bilo me vrstica kode še?
Vrni se lažno, Aleha, kaj Ne pišemo tukaj?
>> ŠTUDENT: Vrnitev false.
>> JASON Hirschhorna: Return false.
In to moramo storiti, da zato, ker če bomo ga ne najdemo, moramo pravimo
ga niso našli.
In smo rekli, da bomo vrnili bool, tako da bomo vsekakor morali vrniti
bool nekje.
>> Torej, kaj je zagnati to kodo.
Jaz sem dejansko dogaja, da -
tako da smo v terminalu.
Očistili bomo naše okno.
Oglejmo si na vse.
Ugotovili smo, da je ena napaka.
Tam je napaka na liniji 15, pričakovano podpičje na koncu
deklaracija.
Torej, kaj sem pozabil?
>> Študent: podpičjem.
>> JASON Hirschhorna: Podpičje tukaj gor.
Mislim, da je bila oznaka Tom.
Torej, Tom, [neslišno].
Samo hecam.
Naredimo narediti vse znova.
>> ŠTUDENT: Kaj Dropbox imenik bi morali biti za to?
>> JASON Hirschhorna: Torej lahko samo pazi za to bit.
Ampak še enkrat, če bi želel, da se premaknete to kodo na vašo pset3 imenik poskusiti
ven, da je tisto, kar sem storil.
Če boste opazili, tukaj - Žal mi je, dobro vprašanje.
>> [? LS,?]
Imam tukaj code find.c od distro koda ta teden.
Imam helpers.h.
Imam Izvedi datoteko, ki sem dejansko uredil malo vključiti te nove
Datoteke smo pisni obliki.
Vse te kode ne bo na voljo, ne Koda za distribucijo, toda novi
Naredite datoteko, bo nova helpers.h datoteka na voljo na spletu za download.
Še enkrat, tako da so to dodatne oznake imamo.
>> Torej bi vse, na tej progi, si najti, binarni, izbor bubble - naredi
vsi trije in pripravlja v to izvedljivo kodo najdba.
Torej na splošno, ne želimo naravnost do check50.
Želimo, da nekaj testov sami.
Ampak samo zato, da bomo lahko pospeši to malo, check50 2013 pset3.find bo minilo
V helpers.c-- moja slaba.
>> Nimam, da prav zdaj.
Torej smo dejansko dogaja, da teči kodo za Real.
Usage.find /, veste, kaj to pomeni?
>> ŠTUDENT: Moraš sekundo ukazni vrstici na njej.
>> JASON Hirschhorna: moram Drugi ukazni vrstici.
In po specifikaciji, rabim vnesti tisto, kar smo iskali.
Zato si oglejmo, za 42.
Bomo ga hranite v razvrščenega.Vse, ker smo ni napisal funkcijo razvrščanja še -
42, 43, 44.
>> In Control D niso našli iglo v senu.
To je slabo.
To je definitivno tam.
Poskusimo nekaj drugega.
Morda zato, ker sem dal je na začetku.
>> Naredimo 41, 42, 43.
Takole.
Jo našel.
Dajmo ga na koncu zdaj, tik tako da bomo lahko temeljito -
40, 41, 42.
Ni našel iglo.
Zato sem omenil že prej.
Na žalost sem to vedel se bo to zgodilo.
>> Ampak za pedagoške namene, je dobro raziskati.
To ne deluje.
Zaradi neznanega razloga, da ga ne more najti.
Vemo, kaj je notri, ampak ne bomo ga najti.
Torej, ena stvar, ki jo lahko naredimo je šel skozi GDB, da ga najdejo, vendar pa nikogar,
ne da bi šli skozi GDB, imajo Občutek, kjer smo zajebali?
[? Madu? ?]
>> UČENEC: Mislim, da bi se, ko konča je enako začetku, in je
samo seznam eno element.
Potem je samo zanemarja, namesto da dejansko je preverjanje.
>> JASON Hirschhorna: To je Točno tako.
Ko je konec enak začetek, kajne še vedno element v našem seznamu?
>> Študent: Da.
>> JASON Hirschhorna: Ja, v bistvu smo še en in samo en element.
In da bo najverjetneje zgodilo, ko po kodi smo testirali, smo na
Sprednji del senu ali na Konec senu.
To je, če začetek in Zaključek se bo enako
eno z binarno iskanje.
Torej, v teh dveh primerih ni delovalo, saj se konča bil enak začetku.
>> Ampak, če se konča enako začetku, pa to zanko, medtem ko usmrtitev?
Pa ne.
In smo lahko preverili da še enkrat skozi GDB.
Torej, kako bomo rešili to kodo, saj ko je hkrati končala enaka
začenja, želimo tudi to zanko, medtem ko teče.
>> Torej, kaj fix lahko naredimo v vrstico 18?
>> Študent: [neslišno] je večja ali enako.
>> JASON Hirschhorna: Točno tako prav.
Medtem ko je konec večja od ali enako začetku.
Torej, zdaj, bomo poskrbeli, da se da vogal primeru na koncu.
In poglejmo.
Tekajmo to še enkrat.
>> Naredimo vse.
Še enkrat, boste morali samo sledite skupaj tukaj.
Najdi 41 tem trenutku.
Samo naj bo dosleden.
>> Najdi 42.
Dajmo ga na začetku -
42, 43, 44.
Našli smo ga.
Tako, da je res sprememba smo morali narediti.
>> To je bilo veliko kodiranja smo pravkar storil, binarno iskanje.
Ima kdo dodatna vprašanja, Grem naprej na progah smo pisali v
binarno iskanje ali kako smo ugotovili kaj nam ni jasno?
Preden gremo naprej, tudi jaz želim poudariti od tega v glavnem, smo preslika
naša pseudo-code enega do ena na našo kodo.
>> Nismo imeli to težavno stvar ugotoviti z
ki se začne in konča.
Vendar ti ne bi mislil, da ven, bi napisal precej
identična koda, razen za ti top dveh vrsticah.
In potem bi bili realizirani, ko ti je uspelo v preverjanja in primere, ki
boste potrebovali nekaj drugega.
Torej, tudi če bi sledili našim pseudo-code linijo za linijo, bi ste
gotten vse razen dveh vrsticah kodo, ki jo je potrebno napisati.
>> In jaz bi bil pripravljen staviti, da vidva bi bili vsi pogruntal
zelo hitro, da si je potrebno postaviti neke vrste marker tam, da ugotovimo
iz kje si.
Da še enkrat, je moč delaš psevdorazreda kodo pred časom.
Tako da lahko naredimo logiko, potem pa moremo skrbeti sintakso.
>> Smo bili zmedeni o logiki Pri poskusu, da napišem to kodo v C,
mi pa bi dobila vse zamočil.
In potem sva se sprašuje o logika in sintakso in prijemov
jih vse skupaj.
In bi jih izgubilo kaj lahko hitro postanejo
zelo težavno.
Torej, pojdimo dalje zdaj do izbora vrste.
>> Imamo 20 minut do konca.
Tako da imam občutek, da ne bomo mogli priti skozi vse od izbire vrste
in bubble sort.
Ampak bodimo vsaj poskus do konca izbiro vrste.
Torej izvajati izbor sort uporabo naslednje izjave funkcijo.
>> Ponovno je to bilo od Problem je določeno specifikacijo.
Int vrednosti je oklepaja, je matrika celih števil.
In int.n je velikost tega niza.
Izbor sort se dogaja razvrstiti ta niz.
>> Tako na naše duševno model izbire nekako smo potegnite -
Najprej gremo skozi seznam prva Tokrat najti najmanjše število,
ga dal na začetku, najti drugega najmanjše število, ga v
drugi položaj, če želimo sortiranje v naraščajočem vrstnem redu.
Jaz ne silimo vas, da napišete psevdorazreda kodo takoj.
>> Toda preden storimo kodo kot razred v pet minut, bomo napisali
pseudo-code, da imamo nekaj smisla kje bomo.
Torej poskušajte napisati psevdo-kodo na svoje.
In potem poskušajte obrniti, da psevdo-kodo v kodo.
Naredili bomo vse, da kot skupina v petih minutah.
>> In seveda, da mi sporočite, če imate kakršnakoli vprašanja.
>> Študent: To je to?
>> JASON Hirschhorna: Oglejte si, kako daleč lahko dobite v dveh minut.
Razumem, da ne bo mogli dokončati.
Ampak bomo šli čez to kot skupina.
>> Vsi ste kodiranje tako [neslišno], tako da sem Žal za pavzo, kaj počnete.
Ampak gremo skozi to kot skupina.
In spet, binarno iskanje, si dal mi eno, če ne več vrstic kode.
Zahvaljujemo se vam za to.
Bomo narediti isto stvar tu, oznaka skupaj kot skupina.
>> Torej, izbira sort - dajmo napisati nekateri hitro pseudo-code.
Na področju duševnega modela, lahko nekdo izročiti mi Prva vrstica psevdo-kodo, prosim?
Kaj hočem storiti?
>> Študent: Medtem ko seznam je v okvari.
>> JASON Hirschhorna: OK, medtem Seznam je v okvari.
In kaj misliš s tem "v okvari?"
>> Študent: Medtem [neslišno]
ni razporejene.
>> JASON Hirschhorna: Medtem seznam je v okvari, kaj naj naredimo?
Daj mi drugo vrstico, Prosimo, Marcus.
>> Študent: Torej našli naslednji Najmanjše število.
To bo zamaknjen.
>> JASON Hirschhorna: Torej najdete naslednjo manjšo številko.
In potem nekdo drug?
Ko smo ugotovili, naslednji najmanjši številko, kaj naj naredimo?
Jaz bom rekel, najti najmanjše število.
To je tisto, kar želimo narediti.
>> Torej najti najmanjše število.
Potem kaj naj naredimo?
>> Študent: [neslišno] na začetku.
>> JASON Hirschhorna: Oprostite?
>> Študent: Postavite ga v začetek seznama.
>> JASON Hirschhorna: Torej ga postavite v začetku seznama.
In kaj naj naredimo, da stvar da je bilo v začetku
seznama, kajne?
Mi smo prepisali nekaj.
Torej, kje smo dal to?
Ja, Anna?
>> ŠTUDENT: Kje najmanjši številka je bila?
>> JASON HIRSHHORN: Torej dal začetek seznama kadar
Najmanj je bilo.
Torej, medtem ko seznam je v okvari, našli najmanjše število, ga postavite v
začetek seznama, dal začetku seznama kadar
Najmanj je bilo.
Marcus, lahko popravim to vrstico medtem ko seznam je v okvari?
>> Študent: Medtem ko število niso razporejene?
>> JASON HIRSHHORN: OK, tako da bi vedo, da niso bile številke
razporejene, kaj moramo storiti?
Koliko moramo iti skozi ta seznam?
>> Študent: Tako da mislim, zanko, ali medtem, pa preveri številke manj
od dolžine seznama?
>> JASON HIRSHHORN: OK, to je dobro.
Mislim, da sem misphrased moje vprašanje slabo.
Pravkar sem poskušal priti na bomo morali iti
preko celotnega seznama.
Torej, medtem ko seznam je v okvari, Zame je težko preslikati naprej.
Ampak v bistvu, to je, kako Mislim, da o tem.
Iti skozi celoten seznam, poiščite najmanjše število, ga postavite v
začenja - pravzaprav imaš prav.
Dajmo jim tako dal.
>> Torej, medtem ko seznam je v okvari, smo treba iti skozi celoten seznam
enkrat ugotovili, najmanjšo številko, se je v začetku seznama, čaka
začetku seznama kadar Najmanj je, in potem, če
Seznam je še vedno v okvari, ki smo jih moraš iti skozi to
Postopek še enkrat, kajne?
Zato je izbor razvrščanje, Big-O runtime od izbire vrste, kdorkoli?
>> Študent: n na kvadrat.
>> JASON HIRSHHORN: n na kvadrat.
Ker je tako kot Marcus in sem spoznal, tu, bomo morali
iti skozi seznam seznama število prenosov.
Torej gredo skozi nekaj od dolžina n n število prenosov
je v resnici n kvadrat.
>> Torej je to naša psevdokoda.
To izgleda zelo dobro.
Ima kdo kakšna vprašanja o psevdokoda?
Ker dejansko izbor sort smeli verjetno prišli 12:59, kode iz
psevdokoda.
Torej na vsa vprašanja o Logika psevdokoda?
Prosimo, da ga vprašate.
>> Izbor sort -, medtem ko je seznam iz reda, smo šli skozi to
in najti najmanjšo vsakič in ga dal v ospredju.
Torej, medtem ko seznam je v okvari, lahko Naj mi kdo to vrstico kode, ki
se mi ni dal linijo kode še, prosim?
To se sliši kot kaj?
>> Študent: To je za zanko.
>> JASON HIRSHHORN: Sliši rad zanko.
OK, lahko mi daš za zanko?
Za -
>> Študent: i je enak 0.
>> JASON HIRSHHORN: i ali -
Kaj nam manjka?
Kaj se dogaja tukaj?
>> Študent: Int.
>> JASON HIRSHHORN: Točno tako.
(Int i = 0; -
>> Študent: i <n; i + +).
>> JASON HIRSHHORN: Imam te, Jeff.
Mi gremo po seznamu, kajne?
Videli smo, da je pred kodo.
Popolna.
Torej, kaj je dal svoje zavite oklepaje tukaj.
Jaz bom dal nekaj zaviti oklepaji tukaj.
>> Torej, medtem ko je 0, moramo iti preko celotnega seznama.
Torej, vsakič, ko gremo po seznamu, kaj želimo slediti?
>> Študent: Če so narejene zamenjave.
>> JASON HIRSHHORN: Najdi najmanjše število.
Torej bi morali verjetno spremljate Najmanjše število vsakič.
Torej linija lahko storim, da bi spremljali najmanjšega števila?
Aleha, kako lahko vodijo tir nečesa?
>> Študent: Začetek novo spremenljivko.
>> JASON HIRSHHORN: Začni novo spremenljivko.
Torej, kaj je ustvariti spremenljivko.
Kakšen tip?
>> Študent: Int.
>> JASON HIRSHHORN: Int.
Recimo ji najmanjši.
In kaj ima to enako, ko smo šele začeli ven?
Nismo šli skozi seznam še ni.
Mi smo v prvi polovici leta Seznam naš prvi čas skozi.
Kaj pa je enaka, Najmanjše število?
>> Študent: Vrednote i.
>> JASON HIRSHHORN: Vrednosti i.
To se sliši ravno prav, kajne?
Najmanj na začetku je, kje smo.
Torej, zdaj imamo najmanjši, zato moramo iti skozi celoten seznam in
Primerjajte to najmanjši za vse ostalo.
Torej gremo po seznamu enkrat?
Michael?
>> Študent: Morate narediti drugo zanko.
>> JASON HIRSHHORN: Še eno zanko.
Pa dajva.
Dajte mi nekaj kode.
>> Študent: Za zanke -
Za najmanjši -
samo int j, bi lahko rekli?
= 0, tako da -
>> JASON HIRSHHORN: No, če želimo iti skozi celoten seznam -
>> Študent: j <n, j + +).
>> JASON HIRSHHORN: Fantastic.
Smo šli skozi za zanko še enkrat.
In kako bomo našli Najmanjše število?
Tom?
Imamo trenutno najmanjše število, Torej, kako bomo našli nov najmanjši?
>> Študent: Mi lahko preverite, če je najmanjša število imamo večja od
Vrednosti nosilca j.
>> JASON HIRSHHORN: Torej, če je najmanjša večja od vrednosti nosilca j.
Torej, če je naš sedanji najmanjši večja od -
Grem, da se premaknete teh dveh vrstic kode tam za sekundo.
Ker preden storimo kakršno koli menjavanje smo treba iti skozi celoten seznam.
Torej, to psevdokoda naj bi dejansko biti zunaj, da notranji zanko.
Torej gredo skozi celoten seznam.
Če je najmanjša večja od Vrednosti j kaj potem?
>> Študent: Potem najmanjši enaka vrednosti j.
>> JASON HIRSHHORN: Fantastic.
Eno hitro vprašanje -
Prvič, ko smo šli skozi to zanko, i bo enaka 0, j se dogaja
na enak 0, ko smo prišli sem.
Torej bomo se primerjajo število zase.
Je to učinkovite?
Ne, to ni res učinkovita.
Tako se naša j treba iti od 0 do n vsakič?
Ali smo vedno morali preveriti skozi celoten seznam?
[Neslišno]?
>> Študent: Začnite z i namesto tega.
>> JASON HIRSHHORN: j pločevinka začnete s čim?
>> ŠTUDENT: i.
>> JASON HIRSHHORN: j lahko začnete z i.
Torej, zdaj smo primerjali z začetkom pri katerem sva.
Toda tudi potem, je, da kot učinkovita, kot je to mogoče?
>> Študent: i + 1.
>> JASON HIRSHHORN: I + 1 izgleda najbolj učinkovito, saj smo
že i.
Mi smo z navedbo, da kot najmanjši v vrstici 15.
Bomo začeli z naslednjič samodejno.
Torej gremo skozi zanko.
Šli bomo skozi vsak čas.
Šli bomo skozi številne trenutke.
Zdaj smo gotten skozi Ta notranja zanko.
Imamo najmanjšo vrednost shrani.
Moramo ga postavite na začetek seznama.
Torej, kako sem ga položite na začetek seznama?
Kaj je spremenljivka, ki se nanaša na začetku seznama?
Mi smo v tej zunaj zanko, tako da tisto, kar se nanaša na
začetek seznama?
>> Študent: Vrednote i.
>> JASON HIRSHHORN: Točno tako prav.
Vrednosti i je začetek -
ali žal, ne začetek.
To je bilo zmedeno.
To je tam kjer smo v začetku leta unsorted del seznama.
Torej vrednosti i.
In kaj počne enako?
>> ŠTUDENT: najmanjši.
>> JASON HIRSHHORN: Vrednosti i je enak, kaj?
>> ŠTUDENT: najmanjši.
>> JASON HIRSHHORN: najmanjši.
Točno tako.
Tako da smo ga postavite na začetku seznama, in zdaj moramo dati
začetku seznama kadar Najmanj je bilo.
Torej, kako naj pišem, če Najmanj je bilo?
Vrednosti kaj?
>> Študent: 0.
>> JASON HIRSHHORN: majhna Številka je na 0?
>> Študent: Ja.
>> JASON HIRSHHORN: Kaj pa, če je najmanjša številka je na koncu
to unsorted seznam?
>> ŠTUDENT: Žal mi je, kaj je bilo vprašanje?
>> JASON HIRSHHORN: Kje je Najmanjše število?
Mi je najmanjši in jo položite na začenši s to linijo tukaj.
>> Študent: Imeti mora so shranjeni v nekaterih -
>> ŠTUDENT: Vrednosti j.
>> JASON HIRSHHORN: No, to je Ni nujno vrednosti j.
To sploh ne obstaja na tej točki.
>> Študent: Moraš se razglasi spremenljivka prej in
potem ga dodelite -
ko boste našli najmanjše število, dodeliti indeks te številke za
nekateri spremenljiva ali nekaj takega.
>> JASON HIRSHHORN: Torej lahko praviš, da je spet?
>> Študent: Torej, če ste razglasila int Najmanjši, morate tudi razglasi int
Najmanjše = indeks i, ali nekaj takega.
>> JASON HIRSHHORN: Torej, kam jaz int Najmanjši, bi moral skrbeti ne samo skladbo
vrednosti, vendar je lokacija.
int smallest_location = v tem tako, bomo pač i.
Moramo vedeti, kje je.
Imamo na koncu kode, in smo spoznala, da ni imel pojma, kje je.
In tako spet smo kartiranje To na 00:59.
Vidva kodiranje to na svoji volji verjetno prišli do istega problema.
Kako za vraga naj ga najdem?
In potem se zavedaš, počakaj, sem morajo slediti tem.
>> Torej, če je najmanjša večja od vrednosti j.
Postavili smo najmanjši je enaka vrednosti j.
Kaj še moramo spremeniti?
Constantin, kaj še storiti, moramo spremeniti?
>> Študent: lokacija.
>> JASON HIRSHHORN: Točno tako.
Daj mi to vrstico v kodi.
>> Študent: smallest_location = j.
>> JASON HIRSHHORN: Točno tako.
In potem dol na koncu, če želimo dal začetek seznama, kjer
Najmanj je bilo, kako se sklicujemo na kadar
Najmanj je bilo?
Marcus?
>> Študent: Najmanj je nahaja na najmanjši lokaciji.
>> JASON HIRSHHORN: Torej po vrednostih smallest_location.
In kaj smo se tam?
Začetek Seznam, kaj je to?
>> Študent: No, res ne vem več, ker smo prepisali.
Tako da je zamenjala lokacije od teh dveh linij?
Če jo postaviš teh dveh linij okoli.
>> JASON HIRSHHORN: OK, tako da ne bomo več, ker smo reset linijo
Pred vrednot i do najmanjših.
Tako smo izgubili, da začetno vrednost.
Torej si rekel swap ti dve vrstici.
Tako da zdaj čaka začetek seznama kjer je bila najmanjša številka.
Torej smallest_location enaka vrednosti i.
, Ki se premika v začetku tega unsorted del seznama
Najmanjše mesto.
In nato v vrednostih i selimo da je najmanjše število.
>> Ali je to smisel, zakaj smo je bilo, da bi ta swap?
Mi bi prepisane te vrednosti - še ena stvar, ki bi verjetno morali
pogruntal in našel v BDP.
Tako smo poskrbeli Vse psevdokoda.
Ali obstaja kaj, kar morali napisati tukaj?
Ali lahko kdo misli o vsem tem?
>> ŠTUDENT: Kako veš ko ste končali?
>> JASON HIRSHHORN: Kako delamo vem, kdaj bomo končali?
Veliko vprašanje.
Torej, kako bomo vedeli, ko bomo končali.
>> Študent: Ustvarjanje spremenljivko za ohranitev števila o če je swap narejen ali ne
in gredo skozi glavo.
>> JASON HIRSHHORN: OK.
Da bi delo v mehurček vrste.
Ampak za selekcijo vrste, če ne bomo da za zamenjavo, da lahko samo
ker najmanjša vrednost v njej njeno desno stran.
Morda bomo imeli seznam 1, 2, 4, 3.
Drugič, da smo s ne bo nobenih zamenjav.
Mi bomo za številko 2, vendar bomo Še vedno je treba naprej.
Torej moramo slediti, ko bomo storili, ali pa morda le želite iti
dokler se ta končana?
>> ŠTUDENT: Mi lahko samo pojdi dokler ne bo končano.
>> JASON HIRSHHORN: Mi lahko samo kraju, dokler se ta končana.
V mehurčkov vrste, ti si ravno prav, Jeff in Aleha, s svojo rešitev -
to je super, da bi spremljali, koliko Zamenjave ste naredili, saj je v mehurčku
sort, če vam v resnici da ne bo zamenjave, ste končali in lahko morda zmanjšati svoje
Problem navzdol malo.
Ampak za selekcijo vrste, ste res iti do konca leta
Seznam vsakič okoli.
>> Torej, to je to.
Imamo dve minuti zapustili.
Naredimo vse.
Naj samo odprta najti tukaj in da prepričan sem v resnici priklicu -
Jaz ne kliče mehurček vrste.
Spremenimo to izbora vrste.
da bi vse. / najti.
Najdimo 42.
Tokrat se bomo mimo razvrščeni seznam, saj je treba rešiti
Prvo, na oznako Najdi - bi morala rešiti Prva uporabo našega razvrščanja funkcijo in nato
iščejo nekaj.
Pesti vse.
>> Oh moj bog.
Hej, moje srce je bilo pretepanje.
Tako, da je pravilna.
V bistvu, če smo naleteli ta bolj meri, koda, kolikor sem lahko,
povedal, je popolnoma pravilna.
Obstaja nekaj nasvetov Jaz bi zate.
Na primer, 15 in 16 se zdi malo odveč.
Zdi se, kot da ni nujno moramo varčevati tako tiste.
Če imate najmanjši kraj, vas Z lahkoto lahko najdete najmanjšo vrednost, ki jo
vtipkate vrednosti i.
>> Torej, če bi bilo treba razvrščanje kodo, , ki ga bom v resnici, jaz bi
Verjetno vzlet točko, če vključeno oboje, ker vam
ne potrebujejo oboje.
Če imate lokacijo, lahko zelo enostavno dobiti vrednost.
In zdi malo čudno Shranjevanje oba.
Morda celo ne bi točko, vendar Vsekakor komentar, da je to morda
ne slogovna izbira morate narediti.
Seveda, koda še deluje zelo dobro.
>> Tako da žal nismo priti do mehurček vrste.
Žal mi je zaradi tega.
Naredili smo ciljno izbiro vrste.
Ima še kdo kakšne končne vprašanja glede izbire vrste?
>> OK, preden se odpravimo ven, jaz vam želim odpreti svoj brskalnik Chrome.
Žal mi je, da je bil samo očitno čep za eno vrsto spletnega brskalnika.
Lahko odpre vsak tip brskalnika, vendar bo verjetno Chrome.
In pojdite na tej spletni strani -
sayat.me/cs50.
Če ne vnesete v računalniku prav zdaj, ste jasno
ne delam, Tom.
>> In prosim, da to storite bodisi desno zdaj ali v naslednji uri -
dajte mi nekaj povratnih informacij.
To je samo odsek dva.
Imamo še veliko več skupaj, zato sem imajo veliko prostora za izboljšanje.
Jaz upam, da si tudi nekaj stvari dobro.
Tako da lahko počutim vse slabo, toda če tudi vi želite, da mi smeška
obraz, bi cenim tudi to.
Izpolnite da noter
>> In z eno minuto levo, so bili trije teden.
Jaz bom stal zunaj za bit če imate kakršnakoli vprašanja.
Bom videl, fantje v predavanje jutri.