[Powered by Google Translate] [3. §] [Kevesebb Comfortable] [Nate Hardison] [Harvard Egyetem] [Ez a CS50.] [CS50.TV] Rendben, kezdjük. Üdvözöljük a héten 4-CS50. Ha a srácok nyit egy böngészőt, és nyissa ki Pset 3, Scramble a CS50, fogunk kezdeni megy a szakasz a kérdések ott. Csakúgy, mint a múlt héten, fogunk dolgozni CS50 Spaces, Ha akkor is húzza, hogy ki is, és ha megy előre, és látogasson meg ezt a linket, hogy kaptam ide a tetején. Itt az ideje, hogy elkezdjük. Megvan a mi kis hi program itt. Semmi őrült. Az egyik első dolog, amit akarok veletek ma megy át néhány megoldás A probléma Set 1, ilyen példa megoldások csak azért, hogy kedvet kapjanak, hogy milyen kód személyzet írás, milyen kód többi diák írunk, és veszel egy pillantást, mert tudom, hogy ez furcsa ha be megoldást a problémára meg, és kap észrevételek a saját verzióját, de néha hasznos látni, mások hogyan csinálta, különösen azokat, amelyek szép látszó. A legtöbb, én nagyon lenyűgözött a megoldásokat, hogy ti elő. Még nem kezdődött nézi a Problem Set 2s, de ha ők valami, mint az első, azt jelenti, hogy semmi, de a jó dolgok. Ha megnézed az én felülvizsgálata, kezdjük egészen a Revision 1, és megyünk, hogy egy gyors pillantást a Mario megoldást. Ha kihúzza ezt fel, ezek a programok, hogy fogunk bemutatni helyesek. Ben nem volt helyességét kérdések ezeket a problémákat, hanem inkább, akarunk beszélni egy kicsit, ami a különböző tervezési kérdések ben éppen használt itt. Az egyik dolog, ami érdekes volt, ami a megoldás az, hogy használják ezt az új konstrukciót nevű font meghatározni, néha nevezik még mint egy hash meghatározni. Hadd nagyítani itt. A # define lehetővé teszi, hogy neveket ezeket a számokat a programban. Ebben az esetben, a maximális magasságot a piramis Mario volt, 23 és ahelyett, hogy a 23 my code- mi lenne, nézze meg, hogy a kemény kódolás 23 - ehelyett ez adja a nevét MAX_HEIGHT e számot, annak érdekében, hogy ide az én do-while ciklus akkor valóban, nézze meg a MAX_HEIGHT ahelyett, hogy a szám 23 hüvelyk [Diák] Mi az előnye ennek, hogy? Ez egy jó kérdés. Az egyik az olvashatóságot. Egyik előnye használatával # define van olvashatóságot. Amikor olvasom ezt a kódot, látom, hogy mi folyik itt. Látom, ebben az állapotban, hogy itt vagyunk tesztelés a magasság, hogy <0, amit lehetett is meghatározott hogy egy minimális magasság, vagy a magasság min. A másik előnye, hogy tudok majd olvassa el a többi sort, hogy lásd hogy mi is ellenőrzi, hogy győződjön meg arról, hogy magassága nem nagyobb, mint a max magasság, mert megyünk tovább, míg a magassága nagyobb, mint a maximális magasságot. A másik előny, ha kicsinyíteni egy kicsit itt- ha futtatni ezt a programot, és elindul, mondjuk, 23 most, kiírja a 23 sort csak úgy. De azt akartam változtatni a max magasság, és most azt akarom, hogy korlátozza a maximális magasság piramisok hogy csak mondja ember, volt funky. # Include , # define MAX_HEIGHT, és mondjuk akartuk állítani egyenlő 10-ig. Most, ezen a ponton, annyit kellett tennem, hogy változtatni ebben az egy helyen. Tudom újrafordítani a kódot, és most ha megpróbálom, és írja be 12, akkor kérni fogja megint. Ebben az esetben, mi csak használ MAX_HEIGHT egyszer. Ez nem olyan nagy gond bemenni és változtassa meg a while ciklus, ha kell. De a programokban, ahol te hivatkozva ugyanazt a bűvös számot újra és újra, a # define mechanizmus valóban hasznos mert csak változtatni egyszer a tetején a fájl-ez általában hová tette őket, és a változás átszivárog a többi fájlt. Más dolog akartam megjegyezni ezt a feladatot, hogy azt hittem nézett igazán szép, az egyik volt az elnevezése a változók. Látod, hogy itt megvan integer változók nevű sort és a hívott magasságát. Spaces, hash, ez segít, hogy a kódot egy kicsit olvashatóbb, teszi, hogy egy kicsit érthető, hogy mi folyik itt valójában. Ez ellentétben van a használó, mondjuk, véletlen betűk vagy csak halandzsa összesen. Az utolsó dolog, amit majd rámutatni, hogy a hurkok, gyakran ezek iterator változók, ezek a számlálók, hogy használja a számára hurkok, ez a szabvány és a hagyományos kezdeni őket vagy i, majd a j és k, majd és folyik onnan, ha szüksége van több változó, és ez csak egy ilyen egyezmény. Sok egyezményeket. Attól függ, hogy a programozási nyelv, amit használ. De C, tipikusan azzal kezdik, i. Ennek nincs értelme használni, mondjuk, a vagy a b a helyzettől függően. Ennyi ez. Ha most húzza fel Rev. 2, akkor egy másik, Mario, és ez hasonló a másik, hogy csak látta, de ez nem valami fajta cool. Ha megnézzük ezt a részt itt belül a belső for ciklus, ők segítségével néhány őrült keresi szintaxist itt van ebben a sorban. Ez az úgynevezett hármas operátor. Ez egy, ha mást nyilatkozatot sűrűsödnek egy sort. Az a feltétel, ez részben a zárójelben. Ez egyenértékű a mondás, ha j > Sam. Sam. Mint Sam azt mondta, hogy a lineáris keresési folyamat lesz nagyon lassú, és helyette a bináris keresés, az Így működik az, hogy a minden alkalommal, amikor megyünk keresztül iterációs mi kereső algoritmus, fogunk osztani a lista fele, lényegében két kisebb listákat. És aztán a következő iteráció a hurok, akkor osszuk újra más kisebb listákat. Mint látható, a probléma folyamatosan egyre kisebb és kisebb mert megtartjuk visszadobás felét a lista minden egyes alkalommal. Hogyan működik ez a visszaengedett munkát? Csak emlékeztetőül, hogy mit fogunk tenni, ha mi voltunk a számítógép és azt is, mondjuk, keressük a 5-ös szám a listán az, hogy mi lenne, válasszon egy számot a közepén. A közepén a lista, mert az 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 szám, mi lenne felvenni a szám akár a 4. pozíció, illetve az 5. pozíció, és azt nevezném, hogy a közepén a lista. Pick szám közepén. Aztán, ahogy Sam azt mondta, akkor ellenőrizze, hogy ha ez a szám megegyezik A szám, amit akarnak, vagy a kívánt számot. Ha ez megegyezik, akkor találtuk meg. Mi nyerni. Ha ez nem egyenlő, akkor van egy pár esetben. A két eset vagy a szám nagyobb lesz, mint a keresünk, vagy ez kevesebb. Ha ez nagyobb, haladunk jobbra. És ha ez kevesebb, akkor lépjen a bal oldalon. És akkor ismételjük meg az egész folyamatot újra sem a jobb oldalán vagy a bal fele a listán. Az első probléma a mai szakasz kitalálni hogyan tudjuk valójában kezdeni, hogy ezt a C kódot. Megvan a pszeudokód itt. Mit fogunk kezdeni ezzel a Kihúzom egy vadonatúj space, menteni a felülvizsgálat annak érdekében, hogy már ezek a jegyzetek a későbbi, fogjuk törölni az összes e, majd másolja a probléma set ezt az információt a tereket, és remélhetőleg ez nem törik el. Tökéletes. Ha a srácok mind ezt, másolja és illessze be ezt a kódot az új helyet, egy üres 1. Próbáljuk meg Daniel. Ha fordításához és futtatásához a program működik? No. >> Ez mit mond? Azt mondja, a vezérlő eléri end of non-void funkciót. Igen, hadd próbálja fut. Láttátok ezt korábban? Tudja, hogy ez mit jelent? Oké, boncolgatni ezt egy kicsit. Ez mondja meg file.c on line 9, 1 oszlop van egy hiba, ahogy mondtad, és azt mondja, hogy ez fakadó hiba figyelmeztetést és a visszatérési típus figyelmeztetést. Úgy néz ki, mintha valami folyik a visszatérési típusa, ami teljesen érthető. Van egy non-void függvényt, ami azt jelenti, hogy van egy funkció hogy nem tér vissza semmis. A void függvény az egyik, hogy így néz ki: void foo (), és ez semmis, mivel a visszatérési típusa void, ami azt jelenti, hogy ha volt valami itt mint a return 1, akkor lennék a fordító hibát erre. Azonban van egy non-void funkciót. A non-void funkció ebben az esetben a keresési funkció mert van egy visszatérési típus bool. Amikor mondja, hogy az ellenőrzési eléri a végét nem void funkció, azért, mert keresésre nincs return utasítást. Ez nem vissza semmit típusú bool. Meg tudod oldani, hogy az, és mit gondoltok, srácok keresés vissza kell alapértelmezés szerint? Milyen legyen az alapértelmezett visszatérési értéke search? Mert ez az, amit tudunk rakni a végén. Charlotte, van valami-? Igaz vagy hamis? >> Igaz vagy hamis. Melyik? Hamis. Nem tudom. Hamis? Próbáljuk meg. Miért mondod return false? Ez nagyszerű intuíció. [Charlotte] Nem tudom. Megyünk vissza false ebben az esetben, mivel ez lesz a mi alap Ha valamilyen okból a lista üres, vagy a tű hogy keresünk nem létezik. Aztán a legvégén, ha nem tér vissza true korábban ezt a funkciót, mindig tudjuk, hogy ez a funkció azt mondják dehogy, ez nem a tömbben. Ez nem a szénakazalban. Most, ha fordítani és futtatni, hadd mentse ezt így tudjuk húzza fel. Most, ha fordítani és futtatni a programot, hogy épít. Kapunk mi kis gyors. Ha megüt 4-uh-oh. Ez nem fog kiírni semmit. Úgy tűnik, mintha minden rendben befejeződött. Van, hogy töltse be ezt a Beszéltünk az algoritmus pszeudokód egy kicsit ezelőtt. Hadd lássam, kivéve ezt, és én húzni, hogy az algoritmus vissza újra. Nézzük sújtotta ezt a fickót. Nem. Ott van. Hogyan tudjuk ezt megtenni? Mi lenne a jó stratégia kiindulási ki ezt a kódot? Meg kell, hogy válasszon egy számot a közepén. Hogyan válasszon egy számot a közepén egy tömb? Valami javaslat? [Student] strlen osztva 2. Strlen osztva 2. Ez egy nagyon szép kép. Strlen működik speciális típusú tömbök. Milyen tömbök? Karakterlánc tömbök, karakter tömbök. Ez ugyanaz a fajta koncepció, hogy szeretnénk alkalmazni, de ezért nem használhatja strlen, mert nincs egy sor karakter. Van egy sor ints. De mit strlen kap számunkra? Tudod, mi ez lesz nekünk? [Student] strlen lesz nekünk a hosszát. Pontosan, ez lesz nekünk a hosszát. Strlen kapja a hossza a tömb számunkra. Hogyan jutunk, hogy a bináris kereső program? Hogyan kap a hosszát egy tömb? [Student] strlen? Tudod kap a hossza egy megfelelően formázott C karakterlánc tömböt strlen. A probléma azonban az, hogy nincs egy string tömb. Ha megnézzük vissza ezt a kódot, itt van ez egész tömb. Honnan tudjuk, hogy meddig van? [Diák] Van egy egyenértékű egy a végpont, mint int l, vagy valami? Kiderült, hogy valójában nem az, és oly módon, ez egyike azoknak a dolgoknak, hogy ez csak jó tudni C, , hogy nincs módja, hogy a hossza egy tömb ha minden adok neked, a tömbben. Ennek az az oka, hogy működik vonósok, az ok strlen működik, azért van, mert ha egy string megfelelően formázott, akkor azt, hogy külön \ 0 karaktert a legvégén. Azt is képzeld el, ha van egy megfelelően formázott karakterlánc és nincs \ 0 karakter van, akkor az egész dolog nem működik. [Student] Tud hozzá a \ 0? Mi volna ebben az esetben. Mi lehet hozzá valamiféle \ 0 vagy valamilyen jelölő karaktert, majd használni. De ez nem igazán fog működni mert a \ 0 egy char típusú, és itt megvan ints. A másik dolog az, ha nem volt, hogy egy speciális érték mint a -1 és a végét egy tömb akkor soha nem tároljuk a -1 a mi egész tömbök. Mi lenne beragadt. Kiderül, hogy az egyetlen módja annak, hogy a hossz egy tömb C-ben, hogy valóban emlékezni rá amikor beállítani, majd add körül az array annak érdekében, hogy ha van egy funkció, amely megy, hogy némi munkát egy sor egész vagy úszók vagy páros, vagy mi van veled, Azt is meg kell adni a függvény a tömb hossza, , és hogy pontosan mit tettünk itt a keresés funkciót. Ha megnézzük, mit tettünk, amikor átadjuk a tömbben van, mi is át a hossza, a méretet. Ez csak előfordul, hogy mi ez a változó hívott ide, ezt a paramétert vagy érvelés. Ezt nevezzük a függvény argumentum lista vagy paraméter lista, és ezeket is nevezik érveket és paramétereket. Az emberek különböző fogalmakat különböző időpontokban. Néha cserélje őket magamnak. Ez csak azért történik, hogy ez a változó itt a neve hasonlóan E # define itt. De ők nem ugyanaz a dolog. Az aktiválás nem számít. Ha megnézzük, hogy mi történik itt, hogy állapítsa mi int tömb, amit már hívott számokat. Már adta azt a méretet, amely megfelel a mi # define fel a tetején. Ez lesz 8. És aztán, amikor majd hívja fel a keresési funkció lent, átadjuk a számot akarunk keresni, amit már a rendszer kéri, ütött a felhasználó elől. Elhaladunk a tömb, ez a szám, és akkor is át kell adni a méret a tömb, , majd az értékét 8-as méret lesz tárolva vagy meghaladták e integer nevű változó méret. Megvan a méret a tömb. Most, ha megyünk vissza, hogy mit beszéltünk korábban, Azt hiszem, Missy nevelt a lényeg, hogy mit kellett tennie, hogy a hossza a tömb és elosztjuk 2-vel, és ez ad nekünk a középpont. Lássuk. Kaphatok valaki írni ezt, és mentse el a helyet? Mit szólnál Leila? Kaphatok írsz ezt? Írjuk be az első sorban, ahol meghozzák a hossza a tömb és kap a középpont és tárolja egy új változót. Adok egy pár másodpercig. Készen állsz? [Student hallható] Persze, tudtam volna akkor kiszámítja a középpont a szénakazalban tömb belsejében a keresési funkció felhasználásával a hossza a szénakazalban tömb, amely az a méret változó? Semmi trükkös itt. [Leila] Csak méret / 2 és just- És menteni, és nyomja meg a Mentés gombot ide a tetején, és mi húzza fel. Tökéletes. Ott vagyunk. Félelmetes. Ahogy az, lesz ez fordítani? [Leila] Nem, nem kell magasabb. [Nate] Igen, mit kell tennem? [Leila] Like int felezőpontja vagy ilyesmi. Félelmetes. Igen, csináljuk meg, hogy int középpont = méretét. Vajon ez összeállításához? Nézzük törölni ezt a megjegyzést, és kap ez az útból. Mi nem fog lefordulni erről? Mi nem csinál semmit egész szám, így kell nyomtatni, vagy valami ilyesmi. Igen, pontosan. Majd kap egy használt változó. Mi mást nem fog működni erről? Azt hiszem, mondtam valamit, Sam. Pontosvessző. Igen, én vagyok hiányzik a pontosvessző. Ez lesz egy állandó dolog az egész folyamán a kifejezés. Az utolsó dolog, amit megteszek, hogy én majd egy kis fehér tér mindkét oldalán E operátor itt, hiszen ez tipikusan hogyan csináljuk szerint a mi stílusunk útmutatót. Megvan a felezőpontja a tömb. Most, ha arra gondolunk vissza a algoritmus, mi volt a második lépés, hogy mi volt a teendő, ha már a középpont? [Student] Ha ez nagyobb [hallhatatlan]. Igen, így kell tennünk, hogy valamilyen összehasonlítás, és mit keresünk képest itt? Azt mondta, ha nagyobb, mint. Mi abban a mondatban utal? A szám jön ki, ha ez nagyobb, mint a középpont, akkor menj fel a tömb? Pontosan, így a szám jön ki, amikor- A tű, úgyhogy képest a tűt, és mi vagyunk összehasonlítjuk ellen a tű? Mivel a tű, amit keresünk. Mi összehasonlítva, hogy a középpont. De mi értelme, hogy ellenőrizze, hogy ha a tű = középpontja? Van ennek értelme? Van valaki nem ért egyet? Hadd próbálja ki, ha a (tű == középpont). [Student] Nem printf megtalálta. [Nate] printf ("Megtaláltuk! \ N"); Egyébként-Megyek kezdeni csinál valami mást itt. Fogom kezdeni üzembe zárójelek körül, ha kimutatások minden alkalommal csak azért, mert ha még több cucc, akkor nem kap a fordító. Igen, Sam. Van egy pont. A probléma az, hogy a középpontját jelenti pozícióját a tömb, de lehet kapni, hogy képviselje az értéket ebben a helyzetben a tömb. Ez egy jó pont. Vajon mindenki hallja, amit Sam mondott? Azt mondta, hogy középpontja mint jelent csak egy pozíciót a tömbben, de ez nem az aktuális elem a tömbben. Ha úgy gondolja, a kódot írt most, ha megnézzük ezt a tömböt ide, amely 8 lencsetag azt, mi az értéke a középpont lesz az ezt a funkciót? [Student] 4. [Nate] 4. Ha megnézzük a 4-es szám - és mi is csak futtatni ezt a kódot, és hogy egy kicsit szomorú arcot itt mert nem találják meg, ha fut a kód mint most, feltöltéssel, épületnek, hadd lapozás és ha megnézzük a 4-es számú, találtuk meg, de nem kap ez a printf igen. Ennek egyik oka az, hogy nem tért vissza igaz, de nem igazán találja a 4-es szám? És Sam nemet mond. Mit találunk? Igazán megtaláltuk a középpont, amely, ha megnézzük a tömb itt lenn, ez lesz az elem az index 4, hogy keresünk, amely 23. Hogyan valójában kap ez az elem a középpont és nem csak a középpont magát? [Student] Azt írja char, vagy valami? Mi lenne, hogy nem, csak kíváncsiságból? Tud kidolgozni egy kicsit? Meg kell, hogy átalakítsa a helyzetét a száma, így van, hogy néhány kapcsolat-Azt hiszem char, de lehet, hogy nem. Igen, ez egy jó pont. Már sokat tesz ennek a konvertáló pozíciók a karakter, ezeket a karaktereket, az első két probléma készletek. Kiderül, hogy itt van, ez majdnem hasonló hozzáférés az i-edik karaktere egy string, ha van értelme. Itt szeretnénk elérni a középpont elem. Hogyan csináljuk ezt? Kevin, van valami javaslata, hogyan lehet csinálni? Lehet csinálni szénakazalban, nyitó zárójel, mid, zárt konzol. Tudsz írni, hogy nekünk? Mentsd el itt, és mi húzza azt fel. Mi nézi most ezt a sort 9, és mi észre, hogy nem akarjuk összehasonlítani a tűt a középpont, hanem szeretnénk összehasonlítani a tű az elem pozícióban középponti a mi haystack tömb. Cool. Ott vagyunk. Igen, jól néz ki, ha a (tű == szénakazalban [felezőpontja]). Megtaláltuk. Most, ha fut a kód-Majd vissza egy kicsit, lefordítja, fut, és most ha megnézzük 4, mi nem találják meg, mert most vagyunk valójában rá a 23-as szám. Mi egyre az érték 23, és ez az, amit mi képest a tűt. De ez jó. Ez egy lépés a helyes irányba. Ez az, amit mi próbálunk csinálni. Nem akarunk összehasonlítani a tűt pozícióik fedezésére a tömbben hanem az ellen a tényleges elemeit a tömbben. Ha megnézzük vissza most a következő lépés a mi algoritmus, mi a következő lépés? Leila már említettük röviden. [Student] Nézze meg, hogy ez nagyobb vagy kisebb, mint majd eldönteni, hogy melyik irányba kell fordítani. [Nate] Igen, hogyan tesszük ezt? Tudsz tenni egyes-Majd mentse ezt felülvizsgálat majd ha betesz néhány sor, amely tenni. Igen, Charlotte. >> Lenne egy kérdésem. Ha nem lenne középpontja - 1, mert az első dolog ez 0 indexelt, így ha teszünk 4, ez valójában nem a karakter, akit keresünk? Igen, és a másik problémája, hogy a jelentése- ez egy nagy fogás, mert mi a végén történik esetleg ha folyamatosan mozgásban, és soha ne állítsa be az elején? Azt hiszem, mi is a végén csinál próbál hozzáférni az elem a 8. pozíció a tömb, amely a jelen esetben nem áll fenn. Mi akarsz valamilyen számviteli azt a tényt, hogy van néhány nulla indexelés. [Charlotte] Bocs, úgy értettem felezőpontja - 1 a szögletes zárójelben. Meg tudjuk csinálni. Majd visszatérünk erre a kérdésre csak egy kicsit. Ha egyszer elkezdünk, hogy a tényleges looping, ez az, amikor majd tényleg lássa jöhet számításba. Egyelőre, meg tudjuk csinálni ezt, de te teljesen igaza van. Ez nulla indexelési hatással lesz, hogy meg kell elszámolni. Lássuk. Hogy van a nagyobb és kisebb, mint a-? [Student] értem, hogyan kell csinálni a nagyobb és a kisebb rész. Csak nem voltam biztos benne, mit nyomtatni, ha úgy találják, hogy ez kevesebb, mint a szénakazalban középpontját vagy annál nagyobb. Itt lehet menteni, amit I've- [Nate] Ja, ha menteni mit tudsz, és mi húzza fel. Ott vagyunk. [Student] És tettem kérdőjelet, amit nem tudtam. [Nate] Ez jól néz ki. Itt megvan a kérdőjel, mert még mindig nem tudom, hogy mit fogunk csinálni elég még. Mit akarunk csinálni, hoppá, most már van néhány melles összes funky minket. Majd korrektek e fogszabályozó. Ott vagyunk. És mit akarsz csinálni, ahogy mi algoritmus, Ha nem találjuk meg a tűt? Mondja el, abban az esetben, hogy a tű nem kevesebb, mint amit keresünk. Kevin. Csak nézd meg a bal fele. Rendben, tehát akkor tesz egy megjegyzést itt, hogy azt mondja: "nézd meg a bal fele." És ha a tű nagyobb, mint a szénakazalban középpontjától, mit akarunk csinálni? [Student] Akkor nézd meg a jobb felét. Nézd meg a jobb oldalán, "nézz jobbra fele." Nem túl kopott. Oké, tehát ezen a ponton, a dolgok keres nagyon jó. A probléma a kód, amit írt? [Student] Nem végpontok a felét. Igaz, nincs végpontok a felét. Mi is csak menni keresztül egyszer. Mi csak fog nézni egy középpont. Vagy az elem ott van, vagy nincs. Annak érdekében, hogy befejezzük ezt, akkor kell csinálni valamilyen ismétlés. Meg kell tartani ismétlése, amíg azt látjuk, hogy vagy az elem van ott, mert mi már szűkült le, és végül megtalálta azt, vagy ez nem ott, mert mi már úgy nézett végig a dolgot megfelelő fele a tömb és megállapította, hogy semmi sem ott. Amikor megvan ez ismétlés megy, mit fogunk használni? [Student] A hurok. Valamilyen hurok. Igen. [Student] Meg tudjuk csinálni a do-while ciklus, és azt csinálni, majd miközben A tűt nem egyenlő-Nem vagyok benne biztos, ha én megyek vele. De olyan, mint ezt, hogy amíg az nem azonos az értéket a felhasználói bevitel. Igen, lássuk, hogyan lehet ezt a levelet magának? Azt mondta, hadd használja a do-while ciklus. Amennyiben ez a do kezdete? [Student] Közvetlenül a méret / 2. [Nate] Oké, és mit fogunk csinálni? Majd töltse ki a, míg később. Mit fogunk csinálni? [Student] Nem akarunk tenni az összes cucc van az ha a rész? [Nate] Vajon minden ezt a cuccot, remek. Másolás és beillesztés. Ó, ember. Lássuk, ez működik, ha tudunk lapon ezt át. Gyönyörű. Oké, és mi mentse ez így nektek van ez. Rendben, és mi lesz, hogy ezt while- mi volt a feltétel, míg voltál utána? [Student] Bár a tűt nem azonos, így például a felkiáltójel. De nem vagyok benne biztos, hogy pontosan mi van még. [Nate] Igen, ez az egyik módja annak, hogy csináld. Sam, van kommentezni? [Sam] eszembe jutott, amikor néztem a videókat, Vettem egy screenshot az egyik, mint amikor megcsináltuk a pszeudokód rá, volt némi kapcsolata max és min. Azt hiszem, valami hasonlót, ha max egyre kevesebb min. Megvan. [Sam] Vagy mint ha max nem kevesebb min, vagy valami ilyesmi, mivel ez azt jelentené, hogy már keresett mindent. Igen, mit hangzik max és min arra hivatkozva? [Sam] Values, hogy a-egészek, hogy meg fognak változni képest, ahol tesszük a középpont. Pontosan. [Sam] Ezen a ponton, ez lesz a [hallhatatlan] kiszámítja a max és min. Középpont ez a max és min ötlet. Van ennek értelme az emberek? Ha kellett volna kezdeni, hogy hogyan fogjuk ezt iteráció, teljesen igazad van, hogy szeretnénk használni valamilyen do-while hurok. De azt hiszem, ha arra gondolunk, hogy mi folyik az azonnali e tömb és mi történik valójában, megyek írni ide- a legelső iterációs bináris keresés, mi- Fogom használni b és e jelölésére a kezdet. És akkor a végén a tömb. Tudjuk, hogy az elején a 4 jobb ide, és tudjuk, hogy a végén van 108. Mondja el, mi keressük a szám 15. Az első alkalom, hogy ezt, mint korábban láttuk, középpontját van vagy lesz 16 vagy 23 attól függően, hogy hogyan számítják a dolgokat. Mivel egyenletesen elosztjuk a középső adna nekünk ezt a helyet között, 16 és 23, nem tudjuk egyenletesen osztjuk vagy oszd meg és kap egy igazi középpontja. Majd nézd meg 16. Majd észre: "Hé, 16> 15, hogy mi keresünk." Ahhoz, hogy akkor nézd meg a bal fele a tömb mi lesz a végén csinál, öntsük az egész felső része és azt mondja: "Oké, most a végpont lesz itt." A következő iteráció a hurok, akkor most nézi most ezt a tömböt, hatékonyan miután dobni ezt a részét, mert most ha mi visszük a középpontját, hogy a különbség a kezdet és a vég, találunk a felezőpontja legyen 8, amit aztán 8 tesztelni, hogy hol van viszonyítva számot keresünk, 15, úgy találják, hogy 15 nagyobb, így meg kell mozgatni a jobb része a lista amelyről tudjuk, mert emberek vagyunk, és látjuk azt. Tudjuk, hogy a megfelelő rész lesz, ha megtaláljuk, de a számítógép nem tudja, hogy így fogjuk tenni mi vagyunk Majd valójában már ez megy fel, és most a kezdet és a vég az ugyanazon a helyen, így a középpontja lesz az egyetlen szám, a lista azon a ponton, amely 15, és mi már megtaláltuk. Ez azt némi fényt, ha ez az egész max és min jelölést megy, nyomon követése a végpontok a tömb, hogy kitaláljuk, hogyan, hogy szűkítse a dolgokat? Mi történne, ha ez nem azonos a 15 most? Mi van, ha kerestünk 15 és ahelyett, hogy ez a szám szintén 16? Mi azt mondjuk, hogy "Ó, ez nagyobb. Azt akarjuk, hogy menjen vissza a bal oldalon. " És mi lenne áthelyezni az e jobbra, ezen a ponton van egy végpont lenne ellentétes. Nem lenne képes megkereséséhez több elemből mert most már a végpont és a kezdőpont, a max és a min, már tükrözött. Megkeressük az egész tömb. Nem talál semmit. Ez az a pont, amit akarna mondani, hogy "Oké, fogjuk megállítani ezt algoritmus. Nem találtunk semmit. Tudjuk, hogy nincs itt. " Hogy megy ez? [Student] Hogy pontosan ez a számítógép kapcsolja a végén? Hogyan végén végül kezdete előtt? A vég végül kezdete előtt mert a matematika, hogy mi csinálunk minden alkalommal, amikor ezt. Ahogy mi cserélni, ha megnézi az első alkalom, hogy ezt csere ahol van az kezdődő 4 és a vég egészen a 108 és a középpont, mondjuk, a 16 - Fogom állítani ezt a back-15-ha keresünk a 15, tudtuk, hogy mit csináltunk, amikor ellenőrizték a 16, és látta, hogy a nagyobb és szerette volna megválni az egész jobb része a lista láttuk, hogy amit akartam csinálni a mozgáshoz ezt e itt. Valójában az e GOT költözött egyik előtt a középpont. Hasonlóképpen, amikor ezt tette iterációs az algoritmus és a középponti volt 8, azt találtuk, hogy a 8 <15, ezért akartuk mozgatni a b 1 múltban a középpont. Most, a kezdet és a vég egyaránt egymás mellett 15. Ha azt történt, hogy keressen más érték, nem 15, vagy ha ez a 15 helyett már a 16, mi lenne találtuk, hogy az e akarunk áthelyezni egy előtt a középpont. Most e ott lesz tükrözött kevesebb, mint a b. Sétáljunk át, hogy hogyan valójában a végén ezt a kódoló algoritmust. Tudjuk, hogy azt akarjuk, hogy ez a számítás középpontját. Tudjuk azt is, hogy szeretnénk követni az elején és a végén a tömb A jelenlegi tömb, így tudjuk kitalálni ahol ez a bal fele a lista, és ahol a jobb felét a lista. Tesszük, hogy akár kezdődik és végződik, vagy mi lehet hívni őket, min és max. Fogom használni kezdetének és végének ebben az időben. Mikor kezdődik, ha megnézzük vissza a példa itt lenn, a kezdet volt állítva a kezdetektől a tömb, mint természetes. Mi index volt ez? Mit kell kezdeni a mi kell? Daniel. [Daniel] Haystack [0]. [Nate] Igen, tudtuk állítani egyenlő szénakazalban [0]. A probléma azonban az, hogy ez ad nekünk nem ez a helyzet, az első elem. Ez ad nekünk az index az első elem vagy a tényleges értéket, hogy az első helyen. [Student] Ez majd konvertálni 0,20? [Nate] Mi ez csinál van-nos, nem fog semmilyen konverziót. Mit fog tenni ez tárolja a 4-ben kezdődik, és akkor nehéz lesz, hogy összehasonlításokat ellen kezd mert Begin fog tartani a értéke 4, amely a kezdete a mi tömb, de mi szeretnénk követni az indexek a tömbben szemben az értékeket. Majd ténylegesen használja a 0, ilyesmi. A végén a tömb-Charlotte hozta ezt fel egy kicsit korábban. Ez az, ahol akkor figyelembe kell venni a nulla indexelés. Charlotte, mi a végén a tömb? Mi az az index a végén? [Charlotte] Méret - 1. Igen, és milyen méretű kellene kezelhető? Ha az általunk használt tőke mérete vagy kisbetűs méret? Capital méret. Ebben az esetben is jönne tőkéjük méretét. Ha akartuk ezt a funkciót, hogy a hordozható és használja ezt a funkciót más programok, tudjuk ténylegesen használni kisbetűvel méretét. Ez rendben is. De Charlotte teljesen igaza van, hogy azt akarjuk, hogy méret - 1. Ezen a ponton, [Student] Hogyan van az, hogy segítségével nagybetűs méret? Hogy van az, hogy mi jönne nagybetűs méret? Kiderült, hogy ezek a # meghatározza tényleg, a motorháztető alatt, a szöveg, mint a keresés és csere, ha van értelme. Amikor lefordítod a kódot, az előfeldolgozás fázis a fordító megy keresztül a fájlt, és úgy néz ki mindenhol, hogy írtam a tőke mérete, és ez helyettesíti a szöveget szó szerint egy 8, csak úgy. Ebben az értelemben ez nagyon más, mint egy változó. Ez nem foglalnak el helyet a memóriában. Ez egy egyszerű szöveges replace trükk. Ebben az esetben fogjuk használni méretét. Innen mi akarsz valamilyen ismétlés, és mi vagyunk a helyes úton a mi do-while hurok. Azt akarjuk, hogy valamit tenni, amíg a feltétel nem teljesül többé, és mint korábban láttuk, láttuk, hogy ez a feltétel Valóban, hogy mi nem akarjuk, hogy a végén kevesebb lesz, mint a kezdődik. Ez a mi megállási feltétel. Ha ez bekövetkezik, azt akarjuk, hogy hagyja abba, és állapítsa meg, mint a "Hé, nem találtunk semmit." Ahhoz, hogy ezt az, mi szeretnénk használni valamilyen hurok. Ebben az esetben az lenne a do-while, a for ciklus egy while? Van egy do-while itt. Srácok, mint ez a megközelítés? Gondolod, hogy meg kell próbálnunk egy másik megközelítés? Kevin, minden gondolat? Mi is van egy while ciklus, mert tudjuk, maximum nagyobb lenne, mint a minimális az elején egyébként. Igen, így nincs inicializálási hogy kell történnie. Ezek a do-while ciklusok nagyon, amikor el kell initialize valami addig tesztelés, mivel itt tudjuk, hogy nem fogunk tartani újrainicializálásával mind kezdődik és végződik minden körben a hurok. Tudjuk, hogy akarjuk inicializálni őket, majd ellenőrizze az állapotát. Ebben az esetben, én tényleg menni egy egyszerű while ciklus. Kiderül, hogy a do-while ciklusok használata meglehetősen ritkán. Sok helyen nem is tanítják ezt while ciklusok. Ők jó kezelése felhasználói bemenetet, így láttunk egy csomó közülük eddig. De a normális és a while ciklusok sokkal gyakoribb. Kiderült, hogy ez a feltétel írásbeli nem fog valóban nekünk sok jó, és miért van ez? Sajnálom, de nem tudom a nevét. Én vagyok Jerry. >> Tessék? Ez a B-O-R-U-I. Ó, oké. Én nem látom a listámon. Ó, ez azért van, mert ó, hogy van értelme. Van egy ötletem, hogy miért ez a while ciklus esetleg nem működik megfelelően, az írásos azzal a feltétellel? [Jerry] Úgy érted, mint szeretné az összes dolgot, miután a-? Igen, ez az egyik. Meg lehet, hogy az összes ezt a cuccot a while ciklus, ami teljesen igaz. A másik dolog, hogy ez egy kicsit problémás, de az, hogy ez a feltétel nem működik. [Student] Meg kell flip azt. Rendben, tehát ez a feltétel soha nem lesz igaz, kezdetben, ahogy mi beszéltünk róla. Azt akarjuk, hogy valamit csinálni végéig > Plus kezdődik? [Student] a végén. Mert csak számított hosszának felét. Meg kell adni a kezdeni. [Nate] Mi lenne ez kiszámítja nekünk? Ha belegondolunk végén ezen a legelső iteráció a hurok vége lesz a helyén index 7. Kezdje a 0 pozícióban. Ne feledje, hogy keresünk vagy pozíció 3 vagy 4-helyzetben. Ha megnézzük ezt a matek, csak azért, hogy egy kicsit konkrétabb, egy kis szám van, már 7, 0, így 7-0, majd a / 2 3, az egész részleg, ami. Akkor van szükségünk, hogy akkor add vissza a mi kezdődik? Mi nem ebben az esetben. Az első iteráció, akkor minden rendben lesz, mert begin értéke 0. De ahogy haladunk, mi tényleg minden csak szüksége van end - kezdődik / 2. Van még egy trükk, és ez vagyis az egyik elsőbbséget. [Student] Szükségünk van zárójelben? [Nate] Pontosan, és ez azért van, mert ha nem, hogy ezeket zárójelben akkor ez a sor kell értelmezni, hanem A (vége) - (kezdődik / 2), amit biztosan nem akar. Vigyázz az ilyen elsőbbségi szabályokat. [Student] miért nem ér véget + elkezdeni? Miért nem akkor ér véget + elkezdeni? [Student] Miért nem az? Miért lenne +? Azt hiszem, igazad van. [Student] Mert ez átlag? [Nate] End + kezdődik, teljesen igazad van. Wow, én teljesen elrontottam. Igazad van. Ha csinálunk a mínusz, mi lenne szeretnénk hozzáadni kezdődik újra be Ebben az esetben, nagyon helyes, hogy azt szeretné, hogy az átlag a két, így akarok hozzá őket, szemben a kivonáshoz őket. [Student] Azt is működik, ha te end - kezdődik / 2 + kezdődik. Ez lenne, ha mi, azt hiszem. Például, ha voltunk nézi most kezdődik, és mi tolódott át ide hogy a 15. Most kezdődik a 2-es pozícióba. Végén van a 7-helyzetben. Ha kivonni őket, kap 5. Osszuk el, hogy a 2, akkor kap 2. És akkor adjunk hozzá 2 vissza, és hogy lesz számunkra, hogy a 4. pozíció, ami itt, ami a középpont. [Student] Nem kell vigyázni a csomagolás? Milyen értelemben van szükségünk, hogy vigyázzon a csomagolás? Ha az összeg vagy a különbsége attól függően, hogy hogyan csináljuk, nem páros szám. Ezután a számítógép összezavarodik-e, ha ez 2,5; nem mozog balra vagy jobbra, hogy melyik az a felezőpontja? Megvan. Kiderül, hogy az egész osztály, mi soha nem kap ilyen lebegőpontos számokat. Mi soha nem kap a tizedes. Ez teljesen dobni. Ha van egy számítógép osztani 2 int változó, és egy 7, és a másik jelentése 2, nem kap 3,5 következtében. Ez lesz 3. A fennmaradó fogják dobni, így hatékonyan kerekítést Nem kerek, hanem a padló, ha a srácok ismeri, hogy a matematika, ahol teljesen megválni a tizedes, és így te lényegében csonkolása le a legközelebbi Az egész helyzet, a legközelebbi egész számra. [Student] De akkor ez problémás, mert ha van egy sor 7 lencsetag akkor hogy automatikusan úgy 3. elemét ki a középpont helyett a 4-én. Hogyan bánjunk vele? Ez problematikus, mert ha volt egy sor 7, ez felvenni 3. helyett a 4-én. Meg tudná magyarázni egy kicsit? [Student] Mert ha 7 lencsetag, akkor a 4. elem lenne a középpont, ugye? Ne felejtse el a véleményét erről, hogy nulla indexelt, mégis. [Student] Igen, 3-helyzetben. Ez lenne a középpont. Igen. Ó, oké. Értem, mire gondolsz. Ez furcsa, hiszen szokni ezt az egész fogalma megszabadulni a tizedes. Ez egy jó pont. Fejezzük ezt fel. Már kiszámítani a középpont. Mi tesztelése, hogy ha a tű megegyezik a középső értéket. Mi nyomtat, hogy megtaláltuk, de tényleg, mit akarunk csinálni ebben a helyzetben? Úgy találtuk, így azt akarja, hogy a hívó fél tudja, hogy megtaláltuk. Van egy funkció, amely egy boolean típusú funkciót. Ahogy azt jelzi, hogy a hívó felet a funkció, hogy mi vagyunk kész van azt mondani: "Hé, ez igaz." Hogyan tesszük ezt, Kevin? Te bólogató fejed. >> [Kevin] Add vissza igaz. [Nate] Pontosan, vissza igaz. Nos, ha ez nem egyenlő, hogyan nézzük a bal fele? Valami ötlet? Stella, valami ötleted? Be kell állítani egy új pozíciót végén. Igen. Így kell tennünk álláspontja középpont - a végén. Remek. Meg kell állítani egy új pozíciót a végén hogy nézd meg a bal fele. Ez volt az, amiről beszéltünk előtt, ahol Én folyamatosan megy vissza ezt a példát. Én az itt kezdődik, és aztán már a végén egészen ide. Ismét, ha keresünk, 15, és a középpont van 16, és rájövünk, "Oops, 16 nagyobb. Azt akarjuk mozgatni a bal fele. " Szeretnénk majd mozgassa a végén a 15, és mi, hogy a vevő 1-re a középpont és meghatározza, hogy mivel az új vége. Hasonlóképpen, ha azt akarjuk, hogy nézd meg a jobb fele, hogyan tesszük ezt? Van egy ötleted? [Student] Csak állítva kezdődik felezőpontja + 1. [Nate] Nagy. És most az a helyzet, hogy nem találunk semmit, jelent, hogy kap gondoskodott nekünk? Daniel, nem kap, hogy gondoskodott a számunkra? [Daniel] Nem [Nate] Ha tudjuk csinálni az egész tömb, és nem találunk semmit, hol lenne, hogy kell gondoskodni, vagy kéne vigyázni rá? [Daniel] A while feltételt. [Nate] Ja, miközben feltételt, pontosan. Ez gondoskodik megy az egész tömb, ha nem találunk semmit. Ez a while ciklus véget ér. Mi soha nem találkoztak ennek a feltételnek, és mi vissza hamis. Azt is hagyjuk ezt, ha itt ilyen mert ha ezt, ha az állítás igaz, és a függvény visszatér, és így lényegében Majd megszakítja ezt a funkciót, ezen a ponton amikor visszatérünk igaz. De mi történik ezzel a struktúra itt? Vajon ez a munka teljesen, vagy van valamilyen logikai hiba ott? Van némi logikai hiba ott van, azzal, ahogyan ez létre. Mi lehet ez? [Student] Miért van szükség a - és + 1s? Ez beállítja a tömb fel, hogy az új bal felét és jobb fele. [Student] De miért nem csinálod nélkül - 1 és + 1s? [Nate] tudtuk állítsa megegyezik a középpont? Mi lehet problematikus erről? [Student] Azt hiszem, ez nem hatékony, mert te ellenőrzését egy értéket, ami már ellenőrizték. [Nate] Pontosan, így Sam teljesen igaza van. Ha a vége és kezdődik megegyezik a középpont helyett - 1 és + 1 megfontoltan, valamikor a jövőben fogunk a végén ellenőrzi a középpont újra. [Student] elkezdtem a Pset, aztán volt valami ilyesmi ahol Elfelejtettem a + 1, és ez ragadt egy végtelen ciklusba. Persze, mert egy bizonyos ponton, amit soha nem fog kap kezdődik és végződik hogy valóban átfedés. Cool. Van még egy logikai hiba, és ez az, hogy ez határozottan az else if. Miért lenne az? Ennek az az oka, ha ez nem más, ha-nem látod, Kevin? [Kevin] Igen, mert te megváltoztatja a végpont. [Nate] Pontosan. Mi változik a végpont, és ha ez van írva, mint ez-Majd készíts terek között, fogja vizsgálni az ügyet. Ebben az esetben, ha ez sikerül, megszakítja ki a funkciót. Ezután ellenőrizni fogja ez a következő esetben, és ha ez sikerül, akkor állítsa be a végpontot, és akkor fog folytatódni, és ellenőrizze, ebben az ügyben. De ezen a ponton, nem akarjuk, hogy tovább vizsgálja. Szerencsére, már nem állítja alaphelyzetbe a középpont van, és tudjuk, hogy ebben az esetben nem fog sikerülni. De mi feltétlenül akar tenni a más, ha ott annak ellenére, hogy az erő-ebben az esetben mivel nem vagyunk kiigazításáról felezőpontja lenne, hogy különbséget tenni? Nem, mert ezekben az esetekben a kizárólagos. Ismét én hibám. Nem, azt hiszem, szükségünk van erre else if. Tudunk próbálja ki és fuss, és meglátjuk, mi történik. Épület, hiba történt. Ez valószínűleg azért, mert hagytam ezeket reggelivel és e itt van. Muszáj tovább e fel a csúcsra? Nem úgy néz ki, mint ez. Mi kicsinyítés, épít, ott megy, úgyhogy most ha keresni 15, Igen. Hadd Nagyítás 15, igen. Mi lehet futtatni újra. Feltöltése forráskód, építési, futás. Mi lehet keresni valami ilyesmit 13, és nem kap semmit nyomtat ki, tehát nem állapította meg, hogy a számunkra. Ez nagyszerű, mert ez nem a mi listán. Most már az idő. Ez lesz, hogy ezen a héten. Köszönjük, hogy csatlakozott, és később találkozunk. [CS50.TV]