JASON HIRSCHHORN: Welcome a hét három, mindenkinek. Van egy elfoglalt, de izgalmas rész előttünk. Tehát az első, mert tettünk néhány térnyerése a kurzus, de még mindig sok tanulási maradt meg, én vagyok megmutatom nektek egyes erőforrások hogy kell bizonyítania, hogy hihetetlenül hasznos, mivel nem csak a megközelítés a probléma beállítja, hanem megemészteni összes az anyagot adunk srácok előadások és rövidnadrág és a részt. Ezután fogjuk tölteni az első 20 25 perces szakasz megy át GDB, amit lehet, vagy nem lehet használnak ezen a ponton, de ez egy hihetetlenül hasznos eszköz, amely segít hibakeresés a programokat. Sok lehet, hogy használt printf a közepén a programot kitalálni hogy mi a változó párja. GDB még jobb, mint a printf és nem csavarja fel a kódot, mert futtatni egy futtatható fájl. Akkor megyünk át a 10 leghasznosabb parancsok, amire szükség van GDB, és mi fog menni a gyakorlat együtt, így A probléma meg három és azon túl, akkor Használhatja GDB, hogy segítsen hibakeresés a programokat. És végül, fogunk menni át néhány rendezési és keresési algoritmusok hogy látott előadás, és mi fog valójában kód, nem csak pszeudokódját, de a kód bináris keresés, buborék sort, és a kiválasztás sort. Tehát először akarok menni át a forrásokat. Ez egy részletes listát, és ez kisebb betűkkel, mert sok volt a elfér itt. De ezek nem csak segít, ismét a problémát készletek és emésztés információkat tanult, de Határozottan, gyere kvíz idő, ezek hihetetlenül hasznos. Tehát először a jegyzet. Ha megy cs50.net/lectures és lapozzunk az adott héten, és nap, látni fogod, hogy vannak olyan megjegyzésekkel előadás, amely nem csupán egy átirat, hanem szerkesztett változata mi borította előadás kóddal töredék és más hasznos nyalánkságokat. Én nagyon ajánlom megy át azokat. És akkor is, ott van a forráskód elérhető minden előadást. És ismét, ezeket a diákat is online elérhető cs50.net/sections ma este. Tehát a második a nadrág minden héten, hogy olyan témákat, általában 5 és 15 perc hosszúságú. És ezek remélhetőleg kapsz egy nagy alapozó különböző témákban. Harmadik - és ez teljesen új ez a évben - study.cs50.net. Ha még nem ellenőrizte, hogy ki, azt Javasoljuk, hogy erre. Kapsz, hogy válasszon egy témát. Jelenleg több tucat téma ott. Így például, akkor vedd funkciók. Ez ad egy kis diák és tudomásul veszi a funkciókat. Ezek valójában a diák, hogy a TFS arra ösztönzik, hogy közben a előadások részben. Van még tippek és trükkök kezelésére funkciókkal, és van gyakorlat problémák, amelyek segítenek dolgozik funkciókat. Azt is kapsz linkeket a rövid a funkciók és az idő, hogy a funkciók jöttek fel az előadás. Tehát study.cs50.net, új ez a évben egy fantasztikus erőforrás. Ezután már az ember, amely a kézi parancs futtatható a parancssorban. Tehát, ha bármilyen kérdése van a parancsot, például a rand, amit találkozott a múlt héten, a részben és akkor valószínűleg találkozott A probléma meg, ha megy keresztül a generál kódot, de ha beírja az ember rand, akkor kap az oldalon, hogy azt mondja, minden a rand. Ez ad ön mit vesz, a paraméterek tart, valamint a visszatérő típusa és leírása az ezt a funkciót. Tehát nézd meg rand. Ez lehet egy kicsit bőbeszédű és zavaros, így néha azt tapasztalom, hogy Egyszerűen Googling mit akarok tudni, a legjobb módja, hogy megtalálják a választ. Így a gyakorlatban a Google. Get jó Google. Ez lesz a legjobb barátod. Csakúgy, mint a Google, ha nem találja meg a Google, cs50.net/discuss, ez A vitafórum. Esélye van, ha van egy kérdés, az egyik a 700 + többiek is, hogy kérdés, és azt kérték már a megvitatására fórumok és azt válaszolta. Tehát, ha van egy közös kérdés, vagy van egy kérdés, hogy úgy gondolja Lehet, hogy mások esetleg befut, nézd meg cs50.net/discuss. Végül az utolsó két, ha azt szeretnénk, hogy beszélni egy igazi emberi lény, iroda óra hétfőtől péntekig. Van még online irodai óra kiterjesztése a diákok. És végül, de nem utolsósorban, nekem, felkiáltójel. Mindannyian van a kapcsolat. Ha bármire szükséged van, kérlek soha habozzon kapcsolatba lépni velem. Mindig nyugodtan erre. Nagyon kevés a hozzáadott engem Gchat, így a kiábrándító, de remélhetőleg ez meg fog változni között ez és a következő fejezetben. Bármilyen kérdése eddig a forrásokat? Remek. Végül egy másik dugó visszajelzés, sayat.me/cs50. Adhat nekem névtelen visszajelzést hogyan csinálok. Ez nagyon hasznos, a múlt héten. Kaptam egy pár észrevétel srácok jobb szakasz után, valamint a másik diák, aki nézte a hét folyamán, és ez hihetetlenül hasznos. Én megyek, hogy megpróbálja korlátozni a használatát a "kedves", de megmutatom én lelkesedéssel és izgalommal más módon. De voltak más kiegészítő érdemi visszajelzések, mind pluses és delta. Ezért kérjük, adok nektek visszajelzést a probléma készletek. Nyugodtan adj visszajelzést én tanítás. Itt vagyok srácok. Remek. Ez minden, amit már a az első részben. Van valakinek kérdése eddig? És van egy megjegyzés az irányító központ. Extension diákok üzenetben nekem mondván, hogy nem kapok semmilyen audio, de ez az én hatalom rögzíteni. Így remélhetőleg, hogy lesz oldani hamarosan. Ha nézed az interneten, hi, de nem hallanak. Tehát először fogunk hogy menjen át GDB. GDB, ahogy utalt korábban, egy hibakereső eszköz sokkal jobb, mint a printf. Szóval, az induláshoz a GDB, srácok, ha meg szeretné nyitni a készülék és megteszi a fájlt, amit e-mailben elküldjük korábban - ez a fájl is online elérhető egy kicsit - és fuss GDB. / a fájl nevét. Először is, persze, meg kell fordítanod fájlt, mert GDB csak akkor működik, futtatható fájlokat. De ha valaha is szeretne kezdeni GDB, az első dolog, amit teszel, fut GDB. / Caesar. Szóval ez a program neve vagyunk megyek vele most. Így fogok írni, hogy Caesar, amely ad nekem egy futtatható fájl Itt a zöld szín jelzi. És akkor fogok futni GDB. / Cesar. És már megy is. Látod van néhány szöveget mondja nekem a változat GDB, hogy nekem Néhány jótállási információk, aztán hogy a GDP gyors, ami úgy néz sort úgy, mint a parancssorból de látod, ez a nyílt paren, GDB, közel paren. Mielőtt folytatnánk és hibakeresés ezt a fájlt , hogy én küldtem neked is, nézzük meg néhány hasznos parancs így van értelme hogy mit fogunk fedezni. Ezek a parancsok listáját a sorrendben, én általában használja őket. Tehát elkezdem a programot futás GBD. / Program nevét, ebben az esetben, Cézár. És akkor az első dolog, amit 99,9% Az idő típusú szünetet jelentenek. Ez beállítja a töréspontot a fő. Lényegében, mit csinálsz ott a program fog megállni fő, így meg lehet kezdeni vizsgálja meg sorban sorra, és nem fut minden az utat. Lehet törni különböző pontjain a kódot, de a fő általában jó kiindulópont lehet. A következő parancs futok fut. Ez elindítja a program fut, és ha kell meg parancssorban érvek futtatod a parancsot. Fuss az érveket. Tehát, mivel mi megy át egy változata C, amely a program srácok írt Pset két - ez, persze, van néhány hiba benne, hogy remélhetőleg meg fogjuk találni - fogunk futni távon néhány parancs argumentumok mert Caesar, mint tudjátok, egy a probléma be spec, némi parancssori paramétereket. A következő néhány parancs, a következő egy valójában úgynevezett mellett. Hogy az egyik úgy, soronként keresztül a program. Így ütő n, majd az Entert visz a következő sorra, végrehajtása az előző sor. Lépés nem csak úgy, hogy a következő sorban, de a elvisz belül funkciókat. Tehát, ha már írt egy funkciót a kódot, vagy ha szeretné felfedezni a i, például, akkor nyomja meg s, és nem megy, hogy a következő sorban a fájl mész keresztül jobb Most, akkor valóban belép ezt a funkciót, és látni a kódját. List megmutatja, nagyon felhasználóbarát formátumban, a 10 vagy úgy vonalak körül ahol jelenleg van a kódban így valóban látni a fájl ahelyett, hogy a swap-vissza között oda különböző nézetek. Print, mint printf, mint a neve is mutatja. Ez azt mutatja, hogy milyen egy változó értéke. Info helyiek nagyon hasznos. Ez egy speciális változata a nyomtatás. Info helyiek azt mutatja, hogy az összes helyi változó, kiírja őket ki az Ön számára , amelyek jelenleg rendelkezésre állnak. Szóval általában, ahelyett, hogy nyomtassa ki a négy változó, hogy én vagyok kíváncsi, ha én vagyok a for ciklus, a Például, én csak annyit írj információkat helyiek, és megmutatom, hogy mi a számlálót én értéke, valamint az, hogy a tömb én dolgozik egyenlők. Végül is. Gépelési szünet megállít a töréspontot. Egy séta a vonalon összhangban a következő és lépésről. Folytatás fut a program, hogy a következő töréspontot vagy befejezéséig, ha nincs több szünet pont. Disable eltávolítja szünet pontot, ha úgy döntött, a szünet fő volt, nem megfelelő, azt szeretné, hogy meg azt valahol máshol. És végül q, kilép, kiszáll a GDB. Szóval ez a program. / Caesar fogunk , hogy nézze át, és most már fogják használni GDB találni a hibákat a programban. Futottam a program korábban Ellenőrizze a 50, és van egy ránc. Mindent, hogy létezik, akkor össze, azt telt sok a teszt, de Valamilyen oknál fogva, hogy nem felelt meg az ötödik teszt fordult BARFOO, csupa nagybetűvel, a E-D-I-U-R, R-, mind sapkák, segítségével három kulcsfontosságú. Kaptam elég közel. Kaptam ki egy betű. Szóval van valami kis hiba itt. Már néztem a kódomat. Nem tudtam rájönni. Remélhetőleg, ha tudtok segíteni rájönni, mi ezt a hibát is. Szóval ez a hiba vagyunk keres. Mozgás a GDB. Megint futni GDB. / Caesar, így most vagyunk GDB. És mi az első dolog, amit meg kell csinálni? Már csak be GDB. Valaki adjon nekem egy jó parancsot meg. DIÁK: Szünet fő. JASON HIRSCHHORN: Szünet fő. Fantasztikus. Nézzük írja, hogy be Ti lehet nézni itt vagy kövesse valamint a számítógép. Szünet fő-, és látni fogod a töréspontot határozták meg - ez ad nekem valami furcsa memória cím, és ez is ad nekem a sor számát. Ha én is nézz vissza ezt a fájlt, Azt is észre, hogy fő történt line 21. Mit kell futtatni a következő? Az én futó program? Nem. Szóval mit kell futtatni a következő? DIÁK: Run. JASON HIRSCHHORN: Run. Ha én csak futni futni, vagy kell Én hozzá néhány más dolog? DIÁK: Fuss az érvelés. JASON HIRSCHHORN: Fuss A parancs érveket. És mivel én vagyok a hibakeresés egy nagyon konkrét esetben azt kell lépnie, hogy az parancssori argumentum. Szóval akkor nem fut a három, ami ismét A kimeneti kaptam Check 50. A program indulásakor. Átmegyünk egy pár sort. Akkor most látni, hogy mi vagyunk line 21. Honnan tudom, hogy mi vagyunk line 21? Mert ha megnézzük, hogy a bal oldalon én terminál ablak, ott azt mondja line 21. És ez ad nekem, tényleg, a kódot, hogy a line 21. Szóval misspoke korábban. Főoldal valójában nem a line 21. Main egy pár sort a fenti 21. De line 21, ez ahol vagyunk törés. Ez a vonal a kódot még nem teljesített. Ez fontos. A vonal látod még nem kivégezték még. Ez a következő kódsort fogsz végrehajtani. Így a következő sorban, ahogy vagytok valószínűleg ismeri, ez feltétel ellenőrzi, hogy ha van Megadott egy parancssori argumentum. És, hogy én, mi a második része, hogy van? Mi az, hogy én? DIÁK: Változó, hogy egy egész szám. JASON HIRSCHHORN: Tessék? DIÁK: Ez változó érv, hogy egy egész szám. JASON HIRSCHHORN: Tehát egy i megváltozik arg v1 egy stringet egy egész szám. És akkor mi is megnézni? DIÁK: Ha van egy második parancssori argumentum, félre a futó program. JASON HIRSCHHORN: És mi a második felében ez a Logikai kifejezés ellenőrzés? Ez a rész itt, egy i? DIÁK: Ha ez a negatív. JASON HIRSCHHORN: gondoskodik arról, mi? DIÁK: Ügyelve arra, hogy van, sőt, pozitív. JASON HIRSCHHORN: Pontosan. Ez ellenőrzi, hogy ha ez a negatív, és ha ez negatív, azt van egy olyan érzésem, a következő sor hatalma kell nekem kiabál a felhasználó. Szóval hit vége, hogy végre ezen a vonalon. Nem látjuk, hogy a sort, hogy a srácok talán várható, hogy kiabál a felhasználót, majd visszatért, mert a ez a sor nem lett végrehajtva. Beléptem 3.. Szóval nem, sőt, meg két parancs paramétereket, és 3 nagyobb, mint nulla. Így láttuk, hogy sorban, mi végre, de nem lépett belül, ha a feltétel. Tehát most, a következő, látom én beállítása int kulcs megegyezik egy i arg v1. Szóval ez nekem létre egy változót gombot. Tehát, ha azt kinyomtatni legfontosabb most, mert , amely lehetővé teszi, hogy a érték belül változó, kulcs értéke 47.. Ez furcsa, de természetesen, azért, mert én nem végre ezt a sort még. Tehát most, ha elütöttem n, végre ezt a vonalat, és nem print kulcs, kulcs egyenlő lesz 3, ami az, amit várunk, hogy egyenlő. Tehát még egyszer, a GDB, a vonal lásd még nem teljesített még. Meg kell, hogy elérje N, S vagy több Más parancsok valóban végre ezt a sort. Print gombot. Key 3. Eddig jó. Karakterlánc sima szöveget. Nézzük végre ezt a vonalat. Kezdek egy stringet felhasználó. Lássuk az én Check 50, azt meg BARFOO összes sapkát, így ez az, amit majd be. Ha már nyers szöveget nyomtatni. Majd meglátod, hogy egyenlő egy string. Ez ad nekem egy másik furcsa hexadecimális száma, de ez nem a tény, azt mondják, hogy a string BARFOO. Ha akartam, hogy mi fő megegyezett a Ezen a ponton, hogyan tudnám ellenőrizni kulcsot? DIÁK: Print gombot. JASON HIRSCHHORN: Nyomtatás gomb, pontosan. És valóban, van egy parancsikont. Ha elfárad a gépelés print, akkor csak írja p. Tehát p kulcs nem pontosan ugyanolyan dolog. És ismét, látom, hogy egyenlő 3. Ha akartam, hogy megtudja, mi a két legfontosabb BARFOO megegyezett és ugyanabban az időben de én fáradt gépelés minden egyet külön-külön, azt lehetett típusú információkat helyiek. Ez ad nekem kulcsot egyenlő 3. Egyszerű szöveg egyenlő BARFOO. Azt is ad nekem ez a két furcsa dolgokat a tetején, és ez az i változó ezt a változót n. Azok valóban létező az a fő programban. Még nem találkoztam velük még, de a preview, azok létezik a hurok. Tehát most, akkor egyenlő furcsa számokat, mert nem volt inicializált még, de ők továbbra is léteznek a memóriában, így ők csak meg néhány szemetet értéket. De azt látni kulcs egyszerű szöveg ott. Így fogom végrehajtani ezt a sort, 34. sorban, a for ciklus. Fogunk ugrani a A loop-et n. És mi vagyunk benne a for ciklus. Mi vagyunk az első csekket. És ismét, ezeket a fajta nézni ismerős, mert ez volt a Caesar programot írt, de ismét van valamilyen hiba. És most, ha én információkat a helyiek, mert én vagyok belül, hogy a for ciklus, látni fogod, hogy én nullával egyenlő, ahogy várnánk. Ez az, amit mi meg azt, és inicializált azt, hogy a for ciklus. n = 6. Ez is van értelme, mert mi meg azt a strlen sima szöveget. Szóval szeretem csinálni információkat helyiek vagy nyomtatási a változó gyakran, hogy megbizonyosodjon arról, hogy az minden mindig, amit Arra számítok, hogy egyenlő. Ebben az esetben, minden amit elvárják, hogy egyenlő. Tehát kezdjük halad keresztül Ez a for ciklus. A vonal vagyok a sorban 36, ha a sima i szöveg nagyobb, mint egy sima szöveg i kisebb vagy egyenlő, mint z. Tudom, hogy a probléma nem az első levél, ez a második betű. Ha visszatekintünk a Check 50, B megy E finom. Elviszem az A és az onnan azt A, nem változik meg a D. így Valami baj van A második betű. Így fogok mozogni ott egy másik. De ha én nem akarom, hogy ellenőrizze, milyen egyszerű text én megegyezett ebben a konkrét az esetben, azt hiszem, az, amit? Mit kell sima szöveges Én egyenlő ebben első körben az a hurok? DIÁK: Zero? JASON HIRSCHHORN: Plain text I? Így kell lennie tőke B. Én, természetesen, nullával egyenlő, de a sima szöveg konzol nulla zárt konzol egyenlő B mert a húrok, ahogy azt a múlt héten, a tömb, szóval kezd a első karakterét ettől. Tehát még egyszer, ha kinyomtatható egyszerű szöveg Én, én, sőt, hogy a karakter B. És ez szép, nem? Én valójában nem is egyszerű szöveges I. Ez nem az egyik változót állítottam vagy inicializált, de kinyomtathatja egy egész sereg dolgot ha szeretne. De menjünk át. Ha sima szöveget én nagyobb, mint az A és egyszerű szöveg I-nél kisebb vagy egyenlő Z, amely egyértelműen igaz, mert van a tőke B. fogok futni Néhány parancs is. Láttuk, hogy a matematika a múlt héten, így fogunk magától értetődőnek, hogy ez működik joga szerint a Check 50. Ezek a kapcsos zárójelek, az első azt mutatták, hogy én kilép a ha állapot, a második azt mutatta , hogy én vagyok, hogy kilépne a for ciklus. És most, amikor elütöttem Ezután fogjuk látni vagyunk vissza a for ciklus újra. Mi megy át a for ciklus újra. Nézzük valóban belép a második iteráció a for ciklus és típusa Dátum helyiek. Tehát mi vagyunk a második iterációs mi a hurok. I értéke 1, amit várnánk. N = 6, amit várunk. Key értéke 3, amelyet várunk. És a sima szöveg, látni fogod, egyenlő EARFOO most, sem BARFOO többé, mert a korábbi iterációban, a B változott a főváros E. Úgyhogy mindjárt találkozik a problémát, így ez a ahol fogunk belevetik magukat a hibakeresés. De vajon bárki bármilyen kérdése van, arról, hogy mit tettünk eddig? Fantasztikus. Így vagyunk, hogy végre ezt, ha állapot, egyszerű szöveges konzol Becsuktam tartó nagyobb, mint az A és egyszerű szöveges én kevesebb vagy egyenlő, mint Z. De mielőtt Megyek be, mert ez az, ahol Tudom, hogy hiba, szeretnék rámutatni ki egyszerű szöveges I. Tehát mondjuk kinyomtatni. Ez nem egyenlő a karakter egy, így a Úgy tűnik, eddig minden szép és jó. Így azt várom ezt a sort én egy logika, ezt a sort, hogy igaz legyen. Ez egy nagybetűvel. De ha megüt n, mi észre, hogy ez vonal, valójában nem lett végrehajtva. Ugrottam le a else if. Miért történt ez? DIÁK: Mert van az állapota sima szöveg nagyobb mint az A, nem egyenlő vagy nagyobb, mint. JASON HIRSCHHORN: Szóval volt a sima szöveg I Egy nagyobb, mint a, nem nagyobb kisebb vagy azzal egyenlő. Olyan tisztán, a főváros A nem kiválthatja ezt, ha a feltétel, és mi nem ne lépjen bele, és mi nem nem a szükséges elmozdulás. Szóval ennyi, tényleg. Rájöttem a bug. Mehetek vissza a forrás fájlban, változás, és frissíti azt, és futtassa Ellenőrizze 50. újra. De majd meglátjuk, csak a pedagógia a kedvéért, ha folyamatosan megy. Az else if nem hajt végre sem, de mi, hanem egyenlő a parancs ez nem változtat. Tehát ez nem változott, és ha nyers szövegek nyomtatására van, majd meglátjuk lesz ezen keresztül a hurok nem, sőt, változás, hogy a második karaktert egyáltalán. Ez még mindig a főváros A. Tehát újra, mi hibakeresés a hiba. Rájöttünk, hogy nem volt némi logika hiányzik. És mi kijavítottuk azt idő előtt, mielőtt tényleges végrehajtása ezt a vonalat, de akkor észre kellett már csak hit Tovább gombra, és ugrani, else if, azt jelenti, hogy, ha a feltétel nem volt igaz. Nem, sőt, hogy az eredmény is várható. Tehát akkor lehetett volna kérni, volt hogy nem volt olyan ügyes, hogy nézd meg hogy ha a feltétel, és ellenőrizze,, sőt, a feltételt kell értékelni, hogy igaz a jelenlegi helyzetben. Ez minden, hibakereső program. Van valakinek kérdése? Milyen parancsot is elütöttem szokni GDB? Kérdés: És akkor fogok kérni, kilép? Igen vagy nem. Én hit igen, és én is kilép GDB. Szóval ez egy gyors alapozó GDB. Valójában, egy valós forgatókönyv, Én ezt a munkaidőben. Én GDBed pontosan ezt a programot Munkaidőben a diák. És ha visszamegyünk a parancsok láttunk korábban használtuk szünetet fő, az első dolog, amit csináltunk. Használtunk távon parancssori argumentumok, a második dolog, amit csináltunk. Használtuk mellett sokat mozogni minket vonalak. És ismét, a rövid változat A következő n. Ez a zárójelben szürke a dián. Mi nem használjuk lépés, de nem feltétlenül kell, hogy ebben az esetben. De lehet használni egy kicsit később ma, ha a hibakeresés, a Például, bináris keresés során binary Keresés hívják külön funkciót, de van Néhány hiba vele. Fogunk szeretnénk belépni A hívás a bináris keresést, és valójában debug meg. Sorolja mi nem használjuk vagy azért, mert meg kellett egy jó értelemben vett a kódot, de ha nem szeretnénk, hogy egy értelemben, hogy mit kód I körül volt, tudtam csak használni listát. Print használtuk, info helyiek használtuk. Folytatás nem kellett használni ezt a esetben sem volt meg kell használni letiltja, de nem használja a kilép. Ismét, ez a 10 parancsokat, gyakorolni. Ha megérted a 10 parancsok, meg kell határozni az hibakeresési minden probléma GDB. Így vagyunk arról, hogy menjen, ismét a kritikus szakasz ma megy át ezek a válogatás és keresés algoritmusok. Mielőtt ezt ismét, bármilyen kérdése van, megjegyzéseket, aggodalom GDB? Tehát mindenki fogja használni GDB helyett printf? Tehát mindenkinek, örökre kedvéért, mindenki bólogat a fejét jobbra Most, úgyhogy találkozunk munkaidő és az összes TFs fogja látni, és azt mondják, mutasd meg, hogyan kell használni GDB, és akkor képes lesz arra, mutatni nekik, nem igaz? Valami? Talán reménykedve. Cool. Így fogunk beköltözni válogatás és a keresést. Látni fogod, van egy lista már rendezett nekünk, de ez nem megy hogy a helyzet mindig. Így a probléma meg specifikáció probléma meg három, akkor rövidnadrág hogy meg lehet nézni, és ez valóban kéri, hogy vigyázzon ezekre a rövidnadrág. Szintén előadás a múlt héten, átmentünk sok ilyen algoritmusok, tehát vagyok nem fog időt osztályban folyik mint ezek az algoritmusok újra, vagy rajz képek, hogy ezek a algoritmusok működnek. Ismét, ez az információ akkor újra óra előadás, vagy ezt az információt elfogták kiemelkedően a rövidnadrág ezek a keresések, az összes amelyek rendelkezésre állnak cs50.net. Tehát ahelyett, hogy mit fogunk tennie, hogy írjon ezeket a programokat. Van értelme, a mentális modellje, hogy miként dolgoznak, és akkor mi megyünk tennie, hogy kódot őket az igazi. Mi fog fordulni, hogy a mentális modell azt a képet, ha úgy tetszik, a tényleges kódot. És ha egy kicsit zavaros, vagy ködös a mentális modell, én teljesen megérteni. Mi valójában nem fog ugrás kód azonnal. Tehát míg ez a prompt ezen a slide kéri hogy kódot bináris keresés, és a tulajdonképpen egy iteratív változata bináris keresés, az első dolog, amit igazán akar, hogy nem is írni egy pszeudokódja. Szóval van ez a mentális modell hogy hogyan bináris keresés működik. Vegye ki a lapot, ha egy könnyen elérhető, vagy nyisson meg egy szövegszerkesztő, és szeretném, ha mindenkit, hogy írjon. Vegyünk négy perc alatt megírni a pszeudokódját bináris keresést. Ismét gondolj, hogy a mentális modellt. Majd magához tér, ha kérdése van és felhívni a kép ki. De először is, mielőtt elkezdenénk programozás, Szeretnék írni a pszeudokódját bináris keresést, így amikor merülés, van néhány irányba ahol kellene mennünk. DIÁK: tudjuk vállalja a sor értékeket kapunk már sorrendje? JASON HIRSCHHORN: Tehát a bináris keresés dolgozni - jó kérdés - akkor kell, hogy egy rendezett tömb értékeket. Így feltételezem, hogy ez működni fog. Majd menj vissza ezt a diát. Látni fogod a lila funkció nyilatkozat bool binary_search int érték, int értékeket int n. Ez ismerős, ha már már megközelítette vagy ütött meg keze piszkos a probléma meg. De ez a függvény deklaráció. Még egyszer, nem kell aggódnia hogy sok ebben a pillanatban. Amit igazán akar, hogy nem az, hogy négy perc alatt pszeudokódja bináris keresés, aztán megyünk Ez alatt az egy csoportban. És én magához tér. Ha kérdése van, úgy érzi, szabad, hogy emelje fel a kezét. Miért nem veszel két perc befejezni a pszeudokód? Tudom, hogy ez nevetségesnek tűnhet, hogy az költünk olyan sok időt valamit, ami nem is valójában C, de különösen az ilyen több kihívást algoritmusok és a probléma meghatározza, hogy mi van, hogy kitaláljuk, kezdve pszeudokódja nem aggasztó a szintaxis, csak aggódni A logika, hihetetlenül hasznos. És így, akkor nem oldja meg a két Hihetetlenül nehéz problémát egyszerre. Te csak összpontosítva a logika, és a akkor beköltözik a szintaxis. OK. Kezdjük megy keresztül A pszeudokód. Írtam itt, bináris keresés pszeudokódja. Majd írni ezt a fórumon együtt. Vagy írok, és akkor kapsz nekem az utasításokat amire szükségem van. Így tud valaki adni nekem az első sorában pszeudokód meg írt bináris keresés? Igen, Annie? DIÁK: Míg a hossza a lista nagyobb, mint nulla. JASON HIRSCHHORN: Amíg hossza A lista nullánál nagyobb. És ismét azt látjuk, néhány C külsejű szintaktikai dolgokat itt. De ennek nagy része angol nyelvű. Volt bárki bármilyen vonalon raktak mielőtt ezt a pszeudo-kód? DIÁK: Kap egy tömb A számok sorrendje. JASON HIRSCHHORN: Ön írta: "kap egy tömb rendezett számok. "Per a függvény deklaráció, akkor halad egy sor sorrendje számokat. DIÁK: [hallható]. JASON HIRSCHHORN: Tehát mi lesz, hogy. De igen, ha nem volt, hogy mi kellene rendezni a tömb számokat, mert a bináris keresés csak akkor működik, sorrendje tömbök. Tehát míg a hosszú lista nullával egyenlő, én vagyok megy, hogy néhány kapcsos zárójelek hogy úgy nézzen ki egy kicsit, mint a C. De közben, úgy tűnik, hogy térkép rá a while ciklus, így ezen belül, míg loop mit kell tenni bináris keresés? Valaki, aki nem adott nekem választ még, de ki írta ezt? DIÁK: Menj a közepén a lista. JASON HIRSCHHORN: Tom. Ugrás a közepén a lista. És a következő kérdés, hogy mi tegyünk, ha mi vagyunk a közepén a lista? Tanítvány: A Ellenőrizze, hogy ez A szám, amit keresel. JASON HIRSCHHORN: Kiváló. Menj a közepén a listát, és ellenőrizze ha a mi értéke van - fantasztikus. Volt bárki másra már volt más, mint ez? Ez pontosan így van. Az első dolog, amit a bináris keresés hogy megy a közepén a listán, és ellenőrizze, hogy az érték van. Tehát feltételezem, ha az érték ott, mit tegyünk? DIÁK: Visszatérünk nullát [hallható]. JASON HIRSCHHORN: Igen, ha a érték van, megtaláltuk. Így azt lehet mondani valamilyen módon, de ez a funkció határozza meg, mondjuk a felhasználó megtaláltuk. Ha ez nincs, azonban, hogy ez ahol ez lesz bonyolult. Tehát, ha nincs ott, valaki más, aki dolgozott bináris keresés vagy van egy ötlete, most mit tegyünk? DIÁK: kérdés. JASON HIRSCHHORN: Igen? DIÁK: A tömb már rendezve? JASON HIRSCHHORN: Igen, mi feltételezzük a tömb már rendezve. DIÁK: igen, akkor kell ellenőrizni, ha az az érték, amit lát, az nagyobb, mint a kívánt értéket, akkor mozog , hogy a közepén a másik felét. JASON HIRSCHHORN: Tehát, ha a közepén A lista több, mint amit mi keres, akkor mit csináljon? Haladunk hol? DIÁK: akarsz költözni a fele a lista alacsonyabb, mint a számok. JASON HIRSCHHORN: így fogunk hívja fel, hogy a bal oldali. Tehát, ha középen nagyobb, kereshetünk a bal fele a listán. És akkor a kereső, amit értek keresést? DIÁK: [hallható]. JASON HIRSCHHORN: Mi megy a közepén. Igazából ismételje meg ezt a dolgot. Visszamegyünk keresztül while ciklus. Adok az utolsó - mást, ha középen kevesebb, mint amit mi, mit csinálunk itt? DIÁK: Menj jobbra. JASON HIRSCHHORN: Keresés jobbra. Ez jól néz ki, de nem valakinek bármi, amit lehet, hogy hiányzik, vagy bármi más, amit tesz a pszeudo-kód? Tehát ez az, amit eddig. Míg a hossza nagyobb, a lista mint nulla, fogunk menni a közepén a listán, és ellenőrizze, hogy mi érték van. Ha a középső nagyobb, megyünk keresés balra, még ha a középső kevesebbet fogunk keresni a jobb. Így már minden volt némi jártasságot feltételek használjuk a számítástechnikában és azokat az eszközöket, amink van. De akkor már észre voltunk beszél angolul, de találtunk egy Sok dolog, hogy úgy tűnt, hogy a térkép a eszközök már a mi kódolási szerszámkészlet. Így rögtön a denevér, nem vagyunk majd ténylegesen kódot sem. Mit látunk itt, angolul, hogy térképek az a dolog, amit írni C-ben? DIÁK: Bár a. JASON HIRSCHHORN: Bár. Tehát ez a míg itt térképeket, hogy mit? DIÁK: A while ciklus. JASON HIRSCHHORN: A while ciklus? Vagy talán még általánosabban a hurok. Azt akarjuk, hogy tegyen valamit, újra és újra. Így fogunk kódot a hurok. És mi már tudjuk, mert már kész ezt egy párszor, és mi rengeteg példa, hogyan ténylegesen írni ez a mutató a hurok. Annak érdekében, hogy legyen elég egyszerű. Meg kell lennie arra, hogy, hogy kezdett elég gyorsan. Mi mást látunk itt? Milyen egyéb építmények szintaxist, a dolgok hogy mi vagyunk tisztában a C-ben mi is már van egyfajta alapú le a szavakat használt? Igen, Anna? [Nem hallható] csak vicceltem. Anna, megy előre. DIÁK: Ha és más. JASON HIRSCHHORN: Ha és más - itt. Szóval, mit ezek néznek ki? DIÁK: Egy, ha más nyilatkozatot. JASON HIRSCHHORN: Igen, körülmények között, nem igaz? Tehát akkor valószínűleg szükség van, hogy levelet bizonyos feltételek mellett. És ismét, bár lehet zavaró először, akkor általában van egy értelme most hogyan kell írni feltételek és A szintaxis feltételeket. És ha nem, akkor csak nézz fel a szintaxist feltételek, kivágás és beillesztés hogy azért, mert tudjuk, hogy szükség van egy feltétele van. Minden más dolog, azt látjuk, hogy térképet rá dolog, amit talán meg kell csinálni a C? Igen, Aleha? DIÁK: Ez talán nyilvánvaló, mindössze ellenőrzésére, ha a értéke egyenlő valamit. JASON HIRSCHHORN: Szóval hogyan lehet ellenőrizni és - így megy, hogy a közepén a lista és ellenőrizze, hogy az érték van? Hogyan csináljuk, hogy a C? Mi a szintaxis ez? DIÁK: Egyenlő, egyenlő. JASON HIRSCHHORN: Egyenlő, egyenlő. Tehát ez az ellenőrzés valószínűleg lesz hogy egy egyenrangú, egyenlő. Így tudni fogjuk, szükségünk van valahol. És valóban, csak írásban is, látjuk azokat a más dolog. Fogunk, hogy némi összehasonlító operátorok ott - fantasztikus. Így néznek ki által és nagy, még nem írt a szó C kódot sem. De mi van a mentális modell le keresztül előadások és a rövidnadrág. Írtunk pszeudo-kód, mint egy csoport. És már, hogy van 80%-os, ha nem 90%-a, amit meg kell tennie. Most már csak meg kell kódot meg, ami megint egy nem triviális probléma megoldására. De legalább mi ragadtunk a logika. Legalábbis most, amikor megyünk munkaidő, Azt lehet mondani, tudom, hogy mire van szükségem csinálni, de emlékeztetsz nekem a szintaxis? Vagy akkor is, ha munkaidőn zsúfoltak, akkor akkor a Google a szintaxis, hanem mint hogy megragadt a logika. És ismét, ahelyett, hogy megoldani A logika és a szintaxis problémák minden egyszerre, gyakran sokkal jobb, hogy szünet a két nehéz problémák off-ba két kezelhetőbb is, és ezt a pszeudo-kód, majd az első kódot C. Akkor lássuk, mit tettem a pszeudó-kódja idő előtt. Míg a hossza nagyobb, a lista mint nulla, nézd meg a középen a listán. Ha a szám megtalálható vissza igaz, más Ha a szám nagyobb, keresés balra. Else Ha a szám kisebb, keresés jobb, return false. Tehát úgy néz ki, közel azonos, ha nem közel azonos azzal, amit írtam. Valójában, Tom, mit mondott az első, törés a közepén a listán, és ha a szám található a két állítás valójában, amit tettem. Én össze őket. Kellett volna hallgatnom akkor az első alkalommal. Tehát ez a pszeudo-kód van. Ha azt szeretné, hogy most, sajnálom, menj vissza a kiinduló problémát. Nézzük kód binary.c. Így végre egy iteratív változata bináris keresés a következő függvény deklaráció. És akkor nem kell másolni le csak még. Én valóban fog nyitni akár itt binary.c. Tehát a függvény nyilatkozat a képernyő közepén. És látni fogod vettem a pszeudo-kód az én oldalon, de közel azonos ahhoz, amit írtam, és fel, hogy az Ön számára. Tehát most, vessünk öt perc alatt kódot ezt a funkciót. És ismét, ha bármilyen kérdése van, tegye fel a kezét, hadd tudjam meg, én magához tér. DIÁK: [hallható]. JASON HIRSCHHORN Szóval vettem a bináris Keresés meghatározása a fel, a 12. sorban. Ez az, amit én kaptam az én slide. És akkor ez a pszeudo-kód csak másolás és beillesztett dia, pszeudo-kód slide. Én még mindig nem hallotta [hallható]. Tehát, ha befejezte a végrehajtás, azt akarom, hogy ellenőrizze azt. Én e-mailben, hogy a helpers.h fájl korábban ebben az osztályban. És ez elérhető lesz az interneten is letölthető az ember nézi Ebben a részben késleltetett. És én csak használt az általános eloszlás kódot pset3. Így vettem beolvasása sikertelen, akkor az én helpers.h fájl nem pedig a fájl helpers.h ez megadta az elosztó kódot. És volt, hogy egy másik változás elérése sikertelen ahelyett, hívja egyszerűen keresés, hívja binary_search. Tehát, ha szeretné, hogy tesztelje a kódot, tudjuk, hogy az, hogy hogyan kell csinálni. Valójában, amikor mi fut a kód most, én csak tett egy példányát én pset3 könyvtár, újra cserélték ki A segítők fájlokat, majd arról, hogy változik elérése sikertelen hívni binary_search ahelyett, hogy egyszerűen keresni. JASON HIRSCHHORN: Igen. Van kérdése? DIÁK: Nevermind. JASON HIRSCHHORN: Semmi gond. Nos, kezdjük. Mi fogja ezt a kódot, mint egy csoport. Még egy megjegyzés. Ismét, ez van, könnyen cserélhetők in Probléma Set Három. Ott van a helpers.h fájl, hanem mint a helpers.h vagyunk adni, kijelenti, bináris keresés, buborék sort, és a kiválasztás sort. És beolvasása sikertelen, észre fogod venni on-line, mi az, hogy a 68. soráig, nevezzük bináris keresés helyett keresést. Tehát újra, a kód, ami elérhető on-line, vagy a kódot, amit a létre most könnyen cserélhetők in p szett 3, hogy ellenőrizze azt. De először nézzük kódot bináris keresést. A függvény deklaráció, visszatérünk a bool. Veszünk egy egész nevű értéket. Veszünk egy sor egész számok nevezett értékek, és mi n is a méret a tömb. On line 10 itt, én éles közé stdbool.h. Tudja valaki, hogy miért van ott? Tehát mit kódsort csinálni? DIÁK: Ez lehetővé teszi, hogy egy bool visszatérési típus. JASON HIRSCHHORN: Pontosan. DIÁK: Vagy ez egy könyvtár, amely lehetővé teszi a hogy egy bool visszatérési típus. JASON HIRSCHHORN: Tehát az éles közé stdbool.h vonal ad nekem egy kis definíciók és nyilatkozatok a dolgok , hogy én vagyok szabad használni ezt a könyvtárat. Tehát azok között, azt mondja, hogy van Az ilyen típusú úgynevezett bool, és lehet igaz vagy hamis. Szóval ez a vonal nem. És ha én nem ezt a vonalat, én bajba írom ezt a szó itt, bool, ott. Pontosan így van. Szóval kell, hogy ezt a kódot. OK. Szóval ez megint egy iteratív verzió, nem rekurzív egyet. Így hát az induláshoz. Kezdjük az első sor pszeudo kódot. És remélhetőleg, mi lesz - vagy sem reménykedve. Fogunk menni körül a szobában. Elmegyünk sorról sorra, és én segítek kitalálni a sort, amire szükségünk van írni az első. Tehát míg a hosszú lista nagyobb, mint nulla. Kezdjük az első. Mit sort írjak itt a kód? DIÁK: Míg a zárójel n értéke 0-nál nagyobb. JASON HIRSCHHORN: Amíg n nagy, mint a 0-ra. Tehát n akkora, mint egy lista, és mi ellenőrizni kell, - [Közbeiktatásával VOICES] JASON HIRSCHHORN: - Tessék? DIÁK: Honnan tudjuk, hogy n a méret a lista? JASON HIRSCHHORN: Elnézést. Per a Pset specifikáció, a keresés és rendezés funkciókat kell írni, n jelentése a méret a listán. Elfelejtettem elmagyarázni, hogy itt van. De igen. n a mérete A lista, ebben az esetben. Tehát, míg n értéke 0-nál nagyobb. OK. Ez lehet bizonyítani egy kicsit problémás azonban, ha a dolgok tovább. Mert továbbra is tudni, hogy az a lista mérete ez alatt funkciót, de azt mondom, elindul egy sor 5 egész. És mi megy keresztül, és mi már most már szűkült le, hogy egy sor 2. egészek. Ebből 2 egész számok ez? A méret 2, most, hogy szeretnénk nézd meg, de 2, hogy? Van ennek értelme, ez a kérdés? OK. Megkérdezem újra. Tehát elindul ez a tömb 5 egész, és n értéke 5, ugye? Fogunk végigmenni itt. akkor talán változtatni a méretét, van, a dolgok mennek tovább. Melyik az, amit mondani akarunk csinálni. Nem akarjuk keresni teljes a dolog újra. Tehát azt mondom, változtassa meg a 2.. Vesszük a fele a listán, ez furcsa. Szóval, csak vedd 2.. Tehát most n = 2. Elnézést kérek a szegények szárazon törölhető markerek. Nem igaz? És keresi a listában Ismét egy listát a 2-es méret. Nos, a sor még az 5-ös. Azt mondjuk, mi csak azt akarjuk, hogy Keresés 2 foltok is. Tehát melyik 2. foltok azok? Van ennek értelme? Ők a bal 2 foltok? Vajon a jobb 2 foltok? Vajon a középső 2 foltok? Mi tört a problémát le, de Igazából nem tudom, melyik része A probléma, hogy még mindig nézett, csak azáltal, hogy a 2 változó. Tehát szükségünk van egy kicsit több, mint, míg n értéke 0-nál nagyobb. Tudnunk kell, hogy ha ez a n a mi tényleges tömbben. Tehát nem valakinek a változik ez a sor? A legtöbb ilyen sor tökéletesen megfelelő. Van egy másik mellett? Tudunk cserélni valamit ki n hogy ez a vonal egy kicsit jobban? Mm-hm? DIÁK: Tud inicializálni a változót mint a hossza n, hogy lesz ezután használható később a funkciót? JASON HIRSCHHORN: Tehát inicializálja egy változó hosszúságú n, és használni, hogy később? De aztán csak frissíteni hossza és még befut ez a probléma, ahol vágja le a hossza a probléma, de soha nem tudni, hogy hol, valóban, ilyen hosszú térképek rá. Tanítvány: Nem fog megtörténni később, amikor azt mondod, keresés balra, Keresés igaz? Fogsz menni egy másik terület a - JASON HIRSCHHORN: fogunk menni egy olyan területre, de hogyan tudjuk amelyek menni? Ha csak a tömb, és ez n, honnan tudjuk, hogy hol menj a tömbben. A hátsó, igen? DIÁK: Van, mint a kisebb kötött, és egy felső korlátot változót vagy valami ilyesmi? JASON HIRSCHHORN: OK. Tehát ez egy másik ötlet. Ahelyett, hogy csak nyomon követése a méret, akkor nyomon követni az alsó és felső határa változó. Szóval hogyan lehet kiszámítani a méret egy alsó határ, és a felső határ? [Közbeiktatásával VOICES] JASON HIRSCHHORN: kivonás. És azt is, hogy nyomon követhetőek az alsó kötött és a felső kötött, hogy tudassa velünk, vagyunk keresi a két? Vajon keresi a két itt? Vagyunk keresni a középső két? Valószínűleg nem a középső két, mert a ez valójában bináris keresést. De most már képes lesz arra, hogy a méret, hanem a korlátokat a tömb. Lényegében, ha van az óriás telefonkönyv, mi rip félbe. Ma már tudjuk, ha ez a kisebb telefonkönyv. De valójában nem szakító A telefonkönyv felét. Meg kell még tudni, hogy hol a új határai a probléma. Van valakinek kérdése erről? Igen? DIÁK: Vajon működik létrehozásával változót, i, hogy akkor csak váltani a helyzetét i képest a aktuális pozíciót, és a hossza, n? JASON HIRSCHHORN: És mi az én? DIÁK: Mint én, hogy mint egyfajta - Mint akkor inicializálni én, hogy a középső pozícióban a tömb. És aztán, ha az érték az i-es pozícióban a közepén, a tömb találták lehet kevesebb, mint az érték van szüksége, most válik, a hossza a tömb, plusz az i értéke 2 osztva. Mint látod, műszak i - JASON HIRSCHHORN: Így van. DIÁK: - akár a - JASON HIRSCHHORN: Tehát én vagyok majdnem pozitív, hogy működni fog. De a lényeg, hogy meg kell két információkat itt. Meg tudod csinálni a kezdete és vége, vagy meg tudod csinálni a méretet, majd Néhány marker. De nem kell két darab információ itt. Nem lehet kapni az csak egy. Van ennek értelme? Szóval megyek át, és fogunk csinálni [hallhatatlan] és hozzon létre egy markerek. Szóval mit írsz a kódot? DIÁK: Csak annyit mondtam int kötött az egyik a 0-val egyenlő. JASON HIRSCHHORN: Nevezzük hogy int, kezdetét. DIÁK: OK. JASON HIRSCHHORN: Ez teszi több értelme számomra. És? DIÁK: Azt mondtam, azt hiszem, int véget. JASON HIRSCHHORN: int véget. DIÁK: Azt hiszem, n mínusz 1, vagy valami ilyesmi. Hasonlóan, az utolsó elem. JASON HIRSCHHORN: Szóval azt írta, int kezdet értéke 0, pontosvessző, és int vége egyenlő n mínusz 1, pontosvessző. Tehát lényegében, amit csinálunk itt, 0 az első helyzetbe. És mint tudjuk, tömbök, nem mennek n-ig mennek fel n mínusz 1. Tehát van néhány határain a tömb. És ezek a kezdeti határait történetesen A kezdeti határai a probléma. OK. Szóval ez jól hangzik. Akkor, ha megyünk vissza ezt a sort, míg a lista hossza nagyobb, mint 0, mit, n helyett, amennyiben teszünk itt? DIÁK: Írja vége mínusz kezdet. JASON HIRSCHHORN: Amíg véget mínusz elején nagyobb, mint 0-ra? OK. És mi volna, ha azt akartuk, hogy tenni, hogy egy kicsit szebb, mit mást tehettünk volna? Ha akartuk, hogy tiszta ez a kód egy kicsit? Hogyan lehet megszabadulni a 0-ra? Ez csak stílus kérdése. Ez így van most. DIÁK: Ending nem egyenlő elején? JASON HIRSCHHORN: Meg tudjuk csinálni, mi? [Közbeiktatásával VOICES] DIÁK: Ending nagyobb? JASON HIRSCHHORN: Igen. Mi is csak csinálni, miközben véget nagyobb, mint az elején. Rendben. Adtunk kezdik a másik oldalon az, hogy mi megszabadultak a 0-ra. Tehát ez csak úgy néz ki, a kicsit tisztább. OK. Így, míg a hosszú listán 0, írtunk , hogy míg a nagyobb végződő , mint a kezdet. Fogunk tenni a szükséges kapcsos zárójelek között, és akkor az első dolog akarunk tenni, hogy nézd meg őket egy kis lista. Önnek? Tudna nekem - DIÁK: Ha a zárójel értéke szögletes zárójel - JASON HIRSCHHORN: Ha a zárójelben érték szögletes zárójel. DIÁK: Ending osztva 2-vel. JASON HIRSCHHORN: vége? DIÁK: Látom, hogy a probléma a - JASON HIRSCHHORN: OK. Nos, nézd meg a közepén. Honnan tudjuk, hogy mi a közepén van? Igen. Hadd törölje a kódot. Honnan tudjuk, hogy mi a közepén van? A semmit, ha már az elején és a végén, hogyan találja a közepén? Diák: átlag. DIÁK: felveszi őket együtt, és akkor - JASON HIRSCHHORN: Add, együtt, és akkor? DIÁK: És te átlag. Osszuk meg 2-vel. JASON HIRSCHHORN: Add, együtt, és oszd 2. Így int közepén egyenlő? Tom, tudsz adni nekem? DIÁK: Beginning plus végződő - JASON HIRSCHHORN: Beginning plus véget. DIÁK: Minden, konzol, osztva 2-vel. JASON HIRSCHHORN: Minden, zárójelben, 2. osztva. Ahhoz, hogy ad nekem a középső semmit, igaz? DIÁK: Akkor is meg kell, hogy kerek fel. JASON HIRSCHHORN: Mit azt jelenti, meg kell, hogy kerek fel? [Közbeiktatásával VOICES] DIÁK: mert ha egy furcsa számot, akkor ez olyan, mint - JASON HIRSCHHORN: Nos, rendben. Így tudtam kerek fel. De ha ez egy páratlan szám, egy 5, tudok figyelembe 1-re a közepén. Vagy ha ez egy páros szám, inkább ez jobb esetben. Ha ez 4, már csak 4, tudok venni Az első "középső", idézet, idézet vége vagy A második "középső" egy. Vagy működne a bináris keresés, így valójában nem kell kerekíteni. De van egy másik dolog, amit kell nézni ezt a sort. Lehet, hogy nem veszik észre, hogy még, de majd jön vissza rá. Mivel ez a vonal valójában még szüksége van egy másik dolog. De eddig is írtam négy sornyi kódot. Megvan a kezdet és vége markerek. Megvan a while, ami leképezi A közvetlenül a pszeudokódja. Keressük a középső, hogy a térképeket közvetlenül a pszeudokódja. Azt mondanám, hogy ez megy a középső A lista, ezt a kódsort. És akkor, ha már megy a közepén A lista a következő dolog, amit tennie kell hogy ellenőrizze, ha a érték van a A pszeudokód írtunk korábban. Szóval hogyan lehet ellenőrizni, ha az érték van a közepén a listán? Önnek. Miért nem ezt teszed? DIÁK: Ha a mi érték-kór a középső egyenlő amit mi meg a - Úgy értem, egyenlő egyenlő - JASON HIRSCHHORN: It - OK. DIÁK: Nem vagyok biztos benne, mi a változó keresünk mert bár, mert - [Közbeiktatásával VOICES] DIÁK: [hallható]. JASON HIRSCHHORN: Pontosan. Per a funkciót nyilatkozat keresünk egy értéket. Így keres egy értéket egy sor értékek. Szóval pontosan így van. Azt fogja tenni, ha a nyitott paren érték zárójel közepén zárt konzol egyenlő egyenlő értékű, és belül van Mit kell tennünk? Ha az érték ott van, mi nem kell tennünk? [Közbeiktatásával VOICES] DIÁK: vissza nullára. JASON HIRSCHHORN: vissza igaz. DIÁK: vissza igaz. JASON HIRSCHHORN: Michael, mit jelent ez a sor nem? DIÁK: [hallható] a program fut a maga útján, és ez a vége, és akkor már mit kell csinálni? JASON HIRSCHHORN: A program, vagy mi? Ebben az esetben? DIÁK: A funkció. JASON HIRSCHHORN: A funkció. És így, hogy visszatérjen, amit az úgynevezett , és adja meg az értéket, igaz. Pontosan így van. Main. Mi a visszatérési típus fő, Michael? DIÁK: int, integer? JASON HIRSCHHORN: int, pontosan. Egy egész szám. Ez csak az a kérdés, hogy megbizonyosodjon arról, srácok már a tetején. Mit jelent ez általában vissza, ha a minden dolog jól működik? DIÁK: Zero. JASON HIRSCHHORN: Zero. Pontosan így van. DIÁK: Ha ez csak igazat ad vissza, nincs adatokat kell arról, hogy mi az - Ó, ez csak azt mondom, hogy ez érték van benne a tömbben. JASON HIRSCHHORN: Pontosan. Ez a program nem ad információt Az, hogy pontosan hol az érték. Ez csak azt mondom, igen, találtunk , vagy nem, azt nem találta meg. Tehát, ha a szám található, vissza igaz. Nos, valójában mi csak volt, ami igazán gyorsan, hogy egy sor kódot. Így fogok mozgatni, hogy a vonal a pszeudokódja. DIÁK: Nem kell változtatni a tömb? Meg kell értékek nem érték, nem igaz? JASON HIRSCHHORN: Elnézést. Köszönöm. DIÁK: Igen. JASON HIRSCHHORN: Ez a sor értékeket kell lennie. Pontosan így van. OK. Szóval néztem a középső listából. Ha a szám megtalálható return true. Folytatva a mi pszeudokódja, ha középen nagyobb, keresés balra. Szóval volt itt, ha a szám magasabb, keresés balra. Constantine, tudsz adni nekem ezt a kódsort? DIÁK: Ha az érték a közép - JASON HIRSCHHORN: Tehát, ha az érték - ha nyitott paren értékek tartó közepes záró zárójel - DIÁK: kisebb érték? JASON HIRSCHHORN: Kevesebb, mint. DIÁK: Kevesebb, mint érték. JASON HIRSCHHORN: érték. Nos, valóban, szeretnénk ellenőrizze, hogy a szám - Bocsánat. Ez egy kicsit zavaros. De még ha a szám a lista közepén nagyobb. DIÁK: Oh, OK. JASON HIRSCHHORN: fogom változtatni. Else if középen magasabb, akkor keresni kívánt balra, OK? És mit tegyünk benne ezt, ha a feltétel? DIÁK: Lehet, hogy egy kis változás A feltétel a változás, hogy más, ha? JASON HIRSCHHORN: Else, ha? OK. Tehát ezt a kódot hajt végre közel azonos. De a szép dolog használatával, ha más if, else ha vagy, else if, else azt jelenti, hogy csak az egyik ilyen fog ellenőrizni kell, nem mind a hárman, potenciálisan. És ez teszi, hogy egy kicsit szebb a számítógép, hogy a fut a program. Tehát [? Constantine,?] bent vagyunk ebben a sorban, még ha az értékek, konzol közepén záró zárójel érték nagyobb, mint. Mit kell tennünk? Meg kell keresni a bal oldalon. Hogyan csináljuk ezt? Meg fogom adni neked a kezdet. Van ez a két dolog az úgynevezett kezdetét és végét. Tehát mi kell történnie az elején? Ha szeretné keresni a bal oldalon a lista, megkapjuk a jelenlegi elején. Mit kell csinálni? DIÁK: Mi meg az elején a közepes plusz 1. JASON HIRSCHHORN: Tehát, ha vagyunk keresi a bal? DIÁK: Sajnálom, közép mínusz - így a vége lenne a közép- mínusz 1 és kezdet - JASON HIRSCHHORN: És mi történik, hogy az elején? DIÁK: Ez ugyanaz marad. JASON HIRSCHHORN: Tehát a jelentése ugyanaz marad. Ha keresi a bal oldalon vagyunk használja ugyanazt a kezdet - pontosan így van. És a vége? Sajnáljuk, mit jelent a véget egyenlő megint? DIÁK: Közép-mínusz 1. JASON HIRSCHHORN: Közép-mínusz 1. Nos, miért mínusz 1, nem csak a közepén? DIÁK: A középső ki a kép már, mert nem volt ellenőrizte, hogy ez ki? JASON HIRSCHHORN: Ez pontosan így van. A középső ki a kép. Már ellenőrizte a közepén. Tehát nem akarjuk "a középső," idézet idézet vége, hogy továbbra is a tömb, amit keresünk. Szóval ez fantasztikus. Else if értékek tartó közepén nagyobb mint érték véget egyenlő közepén mínusz 1. Jeff, mi van az utolsó sorban? DIÁK: Else. Értékek közepén kevesebb, mint érték? JASON HIRSCHHORN: Majd ad nekem mást. Tehát, ha nem ad nekem - DIÁK: Akkor kezdődik lenne közepes plusz 1. JASON HIRSCHHORN: Beginning egyenlő középső plusz 1, ismét, ugyanezen oka, hogy Konstantin adott nekünk korábban. És a végén, aki nem adott nekem egy sor kódot még? Vissza hamis, Aleha, milyen nem írunk itt? DIÁK: return false. JASON HIRSCHHORN: return false. És meg kell csinálni, mert ha nem találják, meg kell mondani, hogy nem találtam meg. És mi azt mondtuk megyünk vissza bool, ezért mindenképpen vissza kell a bool valahol. Szóval ezt a kódot. Én valóban fog - így vagyunk a terminál. Majd törölje az ablakot. Csináljunk All. Találtunk van egy hiba. Van egy error on line 15 várható pontosvesszővel végén a nyilatkozat. Szóval mit elfelejteni? DIÁK: Pontosvessző. JASON HIRSCHHORN: Pontosvessző egészen itt. Azt hiszem, ez volt Tom kódot. Tehát Tom, [nem hallható]. Csak vicceltem. Csináljuk Make újra. Diák: És mi Dropbox könyvtár kellene lennie e? JASON HIRSCHHORN: így csak nézni ezt kicsit. De ismétlem, ha akart lépni ezen a kódot a pset3 könyvtárba kipróbálni ki, ez az, amit én tettem. Ha észre fogod venni, itt - sajnálom, jó kérdés. [? LS,?] Van itt a kód beolvasása sikertelen e heti disztribúció kódot. Van helpers.h. Van olyan, hogy a fájl, hogy én valóban szerkesztett egy kicsit, hogy ezeket az új fájlok írunk. Mindez kód lesz elérhető, nem az elosztási kód, de az új Legyen fájlt, az új helpers.h fájl elérhető online letölthető. Újra, így ezek a extra kódokat van. Tehát, hogy az összes, egy ezt a sort teszi meg, bináris, buborék választás - teszi mind a hárman, és elkészíti a ez végrehajtható kódot találni. Tehát általában, nem akarjuk hogy egyenesen check50. Azt akarjuk, hogy néhány tesztet a miénk. De csak így lehet felgyorsítsa ezt egy kicsit, check50 2013 pset3.find fog múlni A helpers.c-- a rossz. Nem kell, hogy most. Szóval tényleg lesz futtatja a kódot az igazi. Usage.find /, tudod, hogy ez mit jelent? DIÁK: Szüksége van egy második parancssorban rajta. JASON HIRSCHHORN: Szükségem van egy második parancssor. És egy a specifikáció, szükségem adja meg, amit keresünk. Tehát nézzük 42. Majd tartsa rendezett, mert még nem írt egy sort funkció még - 42., 43., 44. És Control D nem találja a tűt a szénakazalban. Ez rossz. Tuti, hogy ott van. Próbáljunk valami mást. Talán azért, mert tettem ez az elején. Csináljuk 41, 42, 43. Ott vagyunk. Úgy ítélte meg azt. Tegyük fel, hogy a végén már csak így lehet alapos - 40, 41, 42. Nem találja a tűt. Szóval említette ezt korábban. Sajnos, tudtam, hogy ez fog történni. De pedagógiai célú ez jó, hogy vizsgálja meg. Ez nem működik. Valamilyen oknál fogva, hogy nem találom. Tudjuk, hogy mi van ott, de mi nem találja. Tehát az egyik dolog, amit tehetünk, hogy menjen át GDB megtalálni, de nem akárki, anélkül, hogy a GDB, van egy értelemben, ahol elrontottam? [? Madu? ?] DIÁK: Azt hiszem, lehet, hogy ha véget egyenlő kezdet, és ez csak egy elem listából. Akkor csak figyelmen kívül hagyja azt, hanem A tényleges ellenőrzés is. JASON HIRSCHHORN: Ez pontosan így van. Amikor vége egyenlő elején, mi is mindig van egy eleme a listán? DIÁK: Igen. JASON HIRSCHHORN: Igen, sőt, azt van egy és csak egy elem. És ez valószínűleg történni, ha, egy a kódot teszteltük, mi vagyunk a előtt a szénakazalban, vagy a végén a szénakazalban. Ez az, ahol kezdetét és vége lesz egyenlő egy, a bináris keresés. Tehát ebben a két esetben nem működik, mert véget egyenlő volt kezdet. De ha vége egyenlő kezdet, ez while ciklus végre? Ez nem. És mi volna ellenőrizhető hogy újra át GDB. Szóval hogyan lehet megjavítani ezt a kódot, mert a amikor amíg véget egyenlő elején, mi is szeretnénk ezt a while ciklus futtatni. Szóval mit fix tehetjük sorban 18 éves? DIÁK: [Nem hallható] nagyobb kisebb vagy azzal egyenlő. JASON HIRSCHHORN: Pontosan így van. Míg a végződés nagyobb, mint vagy egyenlő elején. Tehát most, akkor győződjön meg róla, hogy kap, hogy a sarok esetében a végén. És lássuk. Fussunk ezt még egyszer. Nézzük, hogy minden. Ismét, akkor meg kell, hogy csak kövesse végig itt. Keresd 41. ebben az időben. Csak tartsa következetes. Keresés 42. Tegyük fel, hogy az elején - 42., 43., 44. Megtaláltuk. Ahhoz, hogy valóban a változás mi szükség van, hogy a. Ez volt a sok kódolás is csináltam, bináris keresés. Van valakinek bármilyen kérdése van, mielőtt Én lépni sorok írtuk bináris keresés, vagy hogyan gondoltam ki, mi volt kitalálni? Mielőtt továbblépnénk, én is szeretnék mutatni arra, hogy nagyjából, feltérképeztük a pszeudo-kód egy- az egyik fel a kódot. Mi volt, hogy trükkös dolog kitalálni, hogy a kezdetét és végét. De még akkor sem gondoltam, hogy ki, akkor írt volna, nagyjából azonos kódot, kivéve azok a felső két sor. És akkor lett volna megvalósítani, ha tette, hogy az ellenőrzések és esetekben ha kell valami mást. Tehát akkor is, ha követte a pszeudo-kódot sorról sorra, akkor már ütött minden, de két sor kódot kell írni. És én lennék hajlandó fogadni, hogy a srácok volna, mind rájött, hogy ki elég gyorsan, hogy meg kell, hogy valamilyen marker ott kitalálni , hol voltál. Ez ismét a hatalom csinál pszeudó-kódja idő előtt. Így meg tudjuk csinálni a logika az első, majd a akkor aggódni a szintaxis. Vajon mi lett zavaros a logika közben írni ezt a kódot C, mi ütött volna minden összezavarodik. És akkor mi lenne kérdéseket a logika és a szintaxis és hálózás őket együtt. És mi volna, eltévedt milyen hamar nagyon nehéz probléma. Akkor lépjünk tovább már kiválasztási sort. Jelenleg 20 perc van hátra. Szóval van egy olyan érzésem, hogy nem lesz képes a hogy az összes kiválasztás sort és a buborék sort. De nézzük legalább kísérlet befejezni kiválasztás sort. Így végre kiválasztása sort a következő funkció nyilatkozatot. Ismét, ez a ki kell venni a probléma meg specifikáció. Int értékek zárójelben, az egy sor egész. És int.n a méret, hogy a tömb. Selection sort megy rendezni ezt a tömböt. Tehát egy mentális modellje kiválasztás sort, akkor húzza ki a - Először megyünk végig a listát az első idő, meg a legkisebb számot, tedd az elején, meg a második legkisebb számot, tedd azt a második helyen, ha azt akarjuk, hogy Rendezés növekvő sorrendben. Én nem arra kényszerítve, hogy írni ál-kód most. De mielőtt ezt a kódot, mint egy osztály Öt perc, fogunk írni pszeudo-kódot, így van némi értelme hová megyünk. Így próbál írni pszeudo-kód saját. Majd próbálja meg bekapcsolni, hogy pszeudo-kódot kódot. Mi fog tenni, hogy egy csoport öt perc alatt. És persze, hadd tudjam meg, ha bármilyen kérdése van. DIÁK: Ennyi? JASON HIRSCHHORN: Látod, milyen messze van kap két percet. Megértem, hogy nem fog képes befejezni. De mi megy át ezt a csoportot. Mindannyian kódolási így [hallható], tehát vagyok sajnálom, hogy szünet, amit csinálsz. De nézzük végig ezt a csoportot. És ismét, bináris keresés, mindenkinek ad nekem, ha nem több sornyi kódot. Köszönjük, hogy az. Fogjuk, hogy nem ugyanaz a dolog Itt code együtt, egy csoportban. Tehát kiválasztása sort - írjunk néhány gyors pszeudo-kódot. Per mentális modell, tud valaki adjon nekem Az első sorban a pszeudo-kód, kérem? Mit akarok? DIÁK: Míg a lista meghibásodott. JASON HIRSCHHORN: OK, míg a a lista elromlott. És mi az, hogy "out of order?" DIÁK: Míg a [Nem hallható] nem volt rendezve. JASON HIRSCHHORN: Míg a lista meghibásodott, mit tegyünk? Add nekem a második sorban, Kérlek, Marcus. DIÁK: Így talál a következő a legkisebb szám. Ez lesz beljebb. JASON HIRSCHHORN: Így talál a következő kisebb szám. És akkor valaki más? Ha megtaláljuk a következő kisebb szám, mit tegyünk? Fogom mondani, meg a legkisebb szám. Ez az, amit akarok. Így megtalálja a legkisebb szám. Akkor mit tegyünk? DIÁK: [hallhatatlan] a kezdet. JASON HIRSCHHORN: Tessék? DIÁK: Vidd azt a a lista elejére. JASON HIRSCHHORN: Tehát tegyük az elején a listán. És mit tegyünk, hogy a dolog ez volt az elején a lista, nem igaz? Mi felülírás valamit. Szóval, ha nem tesszük ezt? Igen, Anna? DIÁK: Ahol a legkisebb szám volt? JASON Hirshhorn: Szóval fel a kezdet a lista, ahol a a legkisebb szám volt. Így, miközben a lista elromlott, meg a legkisebb számot, tedd azt A lista elején, tedd a a lista elejére, ahol a a legkisebb szám volt. Marcus tudja fogalmazzam ezt a sort míg a lista elromlott? DIÁK: Bár a számok nem rendezve? JASON Hirshhorn: OK, így annak érdekében, hogy tudják, hogy a számok nem voltak sorrendje, mit kell tennünk? Mennyivel kell végig ez a lista? DIÁK: Szóval azt hiszem, egy for ciklus, vagy közben, míg a számok ellenőrzött kevésbé mint a hossza a lista? JASON Hirshhorn: OK, ez jó. Azt hiszem, misphrased a kérdés rosszul. Én csak próbálok a fogunk menni az egész listát. Így, miközben a lista elromlott, Számomra nehéz térkép tovább. De alapvetően, hogy hogyan Azt hiszem, erről. Menj át a teljes lista, meg az legkisebb szám, tegyük a elején - valóban, igazad van. Tegyük mindkettőt. Így, miközben a lista elromlott, akkor kell, hogy menjen át a teljes lista egyszer megtalálja a legkisebb számot, helyét már az elején a lista, tedd az elején a lista, ahol a legkevesebb volt, és ha a lista még mindig nincs rend, most már van, hogy menjen át a folyamatot újra, igaz? Ezért kiválasztás sort, Big-O runtime A kiválasztás sort, valaki? DIÁK: n négyzeten. JASON Hirshhorn: n négyzeten. Mivel, mint Marcus és én csak rájöttem itt, mi kell majd menjen végig a list számú alkalommal. Így megy keresztül valami n hosszúságú n számú alkalommal van valójában n négyzeten. Szóval ez a mi pszeudokódja. Ez nagyon jól néz ki. Van valakinek kérdése a pszeudokód? Mert tényleg kiválasztás sort kell valószínűleg jön 1-1, kódot pszeudokódja. Tehát bármilyen kérdése van a logikája pszeudokód? Kérje most. Selection sort -, míg a lista ki A rend, fogunk menni rajta és megtalálni a legkisebb minden alkalommal és tedd az első. Így, miközben a lista elromlott, lehet valaki adjon nekem, hogy a kódsort, aki nem adott nekem egy vonal kód mégis, kérem? Úgy hangzik, mint mi? DIÁK: Ez a hurok. JASON Hirshhorn: Ez úgy hangzik, mint egy for ciklus. OK, tudsz adni nekem a for ciklus? For - DIÁK: i értéke 0-ra. JASON Hirshhorn i vagy - Mit hagytunk ki? Mi folyik itt? DIÁK: INT. JASON Hirshhorn: Pontosan. (Int i = 0; - DIÁK: i