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