[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 <magassága - i - 1.
És akkor mi a tartalma, hogy ha a mondat lenne a tér
majd a tartalmát, amit a más lenne itt a #.
Ez lényegében hozzárendel egy helyet ezt a változót.
Ez elhelyez egy helyet a tartalmát a tömb változó,
ha ez a feltétel teljesül, és ha a feltétel nem teljesül,
akkor a blokk változó megkapja ezt a #.
És aztán, persze, ahelyett, hogy az épület egy teljes szöveg
és nyomtatás mindent a végén ez a megoldás kinyomtatja egy karaktert egy időben.
Pretty cool.
>> Egy másik pár dolog, hogy nézd meg. Fogunk lépni kapzsi.
Most, ha megnézzük a kapzsi, az első megoldás
használja ezeket # meghatározza egy kicsit.
Van egy állandó meghatározott minden egyes különböző számok ebben a programban.
Van egy-egy cent dollár, egy negyed, Dimes, Nickels, és fillérekért,
és most ha görgessen le, és olvasd el a kódot,
láthatjuk a standard do-while ciklus nyomtatás mindent.
Kind of a középpontjában az a probléma is rájött, hogy
ha szükséges, átalakítani a float, hogy elolvassa-ból, hogy a felhasználó egy egész
hogy pontosan ezt a matek, és ez azért van, mert
A lebegőpontos számok, mint beszélgettünk előadás röviden
ez nem lehet pontosan képviselje minden egyes érték a számegyenesen
mert végtelen sok értéke 3 és, mondjuk, 3,1 még.
Egyszerre 3,01 és 3,001 és 3,0001, és akkor folyamatosan megy.
Kiderült, hogy amikor dolgozik, pénzt, gyakran szeretnénk konvertálni
figyelembe integer formátumban, hogy ön nem veszít fillérekért és ilyesmi.
Ezzel, hogy a kerekítés és a kulcsfontosságú volt.
Ez a megoldás használható a tökéletesen egyenes, nagy algoritmus,
amely csökkentjük számát cent maradt, először negyedévben,
majd Dimes, majd Nickels, majd fillérekért,
, és hozzátéve, hogy a szám az érmék minden egyes alkalommal.
>> A másik megoldás, hogy majd meglátjuk, ahogy kicsinyítés és menj Revision 4,
Volt egy nagyon hasonló elején, de ehelyett div és mod
jog ide kiszámításához számának cent.
Ez a szám a negyedek megegyezik a számát cent osztva 25,
és az ok ez működik, mert csinálunk egész osztás,
így ez öntsük a maradékot.
[Student] Muszáj véleményét a keresést?
Tényleg attól függ.
[Student] Te kommentálva több kódot itt.
Igen, így van egy csomó különböző filozófiák erre.
Az én személyes filozófiám az, hogy a kód valóban az igazság,
mint a kód az, ami valójában végrehajtó a számítógépen,
és így a kódot kell lenniük olvasható a lehető nem teszi szükségessé, mint sok hozzászólás.
Igaz, amikor a dolgok, hogy az a fajta trükkös matematikailag
vagy algoritmikusan, jó Komment azokat, így Ön
adjunk hozzá egy extra dimenzióval, egy extra réteg aki olvas a kódot.
E megoldások gyakran megjegyzésbe erőteljesebben csak azért, mert
azt akarjuk, hogy képes legyen terjeszteni őket, és az emberek értük
és olvassa el elég könnyen.
De biztosan, Egyetértek azzal, hogy ez a nehéz.
[Student] De kétség esetén, menj nehezebb?
Ha kétségeid vannak, menj nehezebb.
Egyesek néha azt mondják return 0, vagy valami ilyesmi.
Azt hiszem, ez egy nevetséges megjegyzést.
Egyértelmű, hogy ez mi történik.
Nem kell angolul mondani nekem.
Néha az emberek fogja írni dolgokat, mint a "kthxbai!"
Ez aranyos, hanem a nem-
ez nem teszi a különbség kommentálva pont vagy sem.
E típusú megjegyzés csak ha, ha.
Cool.
>> Ezen a ponton, kezdjük dolgozni a probléma Set 3 részén kérdésekre.
Ha a srácok húzza ezt fel újra,
mint a múlt héten, nem fogunk nézni a rövidnadrág ebben a fejezetben.
Fogjuk srácok csinálni a saját idő és beszélni a kérdéseket.
De most, ebben a fejezetben fogunk tölteni egy kis időt
beszél kevesebbet a kódoló alapokat
mint mi a múlt héten, és helyette fogunk nagyobb hangsúlyt fektet
egy kicsit több az elmélet, így beszél bináris keresés, majd a válogatás.
Azoktól, akik már követően együtt az előadás,
tud valaki adjon nekem egy bedugni mi a különbség
közötti bináris keresés és lineáris keresést?
Mi folyik itt? Persze.
Lineáris keresés keresések keresztül minden eleme a rendezett lista
egyenként egy egy-egy,
és bináris keresés osztja a listát 2 csoportra,
ellenőrzi, hogy a kulcs értéke, amit keresett nagyobb vagy kisebb, mint a középpont érték
hogy csak talált, és ha ez kevesebb, mint magától az alsó lista
majd oszt hogy ismét, nem ugyanazt a funkciót
egészen addig, amíg meg nem találja a felezőpontja legyen egyenlő az érték is.
Rendben.
>> Miért érdekel?
Miért beszélünk bináris keresés versus lineáris keresést?
Igen.
Binary sokkal gyorsabb, így ha kétszer a méret a probléma
vesz egy lépés helyett kétszer annyi.
Pontosan.
Ez egy jó válasz.
Lineáris keresés nagyon ellenőrzi az egyik eleme egy időben,
és mint láttuk az első nap előadás
Amikor Dávid ment keresztül a telefonkönyvben például
és kitépték egy oldal a telefonkönyv egy időben
és folyamatosan csinálja újra és újra és újra,
ez fog tartani neki egy nagyon hosszú idő, hogy megtalálja valaki a telefonkönyvben,
kivéve persze, ő keresett valakit legelején az ábécé.
A bináris keresés, akkor lehet menni egy sokkal gyorsabb,
és ez nem csak kétszer olyan gyors, vagy 3-szor olyan gyors, vagy 4-szer olyan gyorsan.
De a probléma egyre kisebb és kisebb és kisebb sokkal gyorsabb.
Ennek illusztrálására, akkor elkezd beszélni arról, hogy mi folyik itt
amikor levelet bináris keresés.
A probléma viszont az, hogy ha van egy sor számok,
mondjuk, 1, 2, 3, 5, 7, 23, 45, 78, 12.323,
majd 9 egy csomó 0s után,
azt akarjuk, hogy képes legyen kitalálni, hogy nagyon gyorsan, hogy mi van
ezt a tömböt a számok.
Tudom, hogy ez úgy tűnik, egy kicsit buta, és egy kicsit kitalált,
mert most van.
Van egy tömb, amely nem nagyon sok eleme benne,
és ha megkérdezem az egyik, hogy kitaláljuk, vagy nem
23 van a tömb, meg tudod csinálni, hogy elég gyorsan
csak a pillantva ezt, és azt mondja igen vagy nem.
Az analóg, hogy fontolja meg elképzelni, ha ez, mondjuk,
Excel táblázatkezelő 10.000 sorok, 20.000 sorokat.
Persze, meg tudod csinálni a parancsot F vagy az ellenőrző F és keresni valamit.
Ön is használja a szűrőket és a keresési stuff,
de ha kellett, hogy nézze át a fájlt soronként sorra,
lenne szükség egy hosszú idő, hogy megtalálja.
Ez olyan, mint a telefonkönyvben példa is, ahol
senki sem úgy néz ki, egy telefonkönyvet egy oldalt egy időben.
Jellemzően ők nyissa meg a középső,
illetve abban az esetben, egy csomó telefon könyvek és szótárak, ha
Ön ténylegesen nem írtunk az első levelet,
flip hogy az első levelet, és nyissa ki és indítsa megy keresztül ott.
>> Emlékeztessen a neved. >> 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 <kezdődik,
de mi szeretnénk tenni valamit, miközben
kezdődik ≤ végén.
>> Van, hogy fordított a logika is.
Én vagyok bűnös, hogy e hibák egész idő alatt.
[Student] Miért kell kisebb vagy egyenlő, mint a?
Mert emlékszel a helyzet, hogy eljutottunk
ahol nem volt csak egy eleme, és mi is le,
és mi kerestünk mindössze a 15 a tömbben?
És a kezdete és a vége ugyanaz volt elem.
Azt szeretnénk, hogy győződjön meg arról, hogy kezeljük az ügyben.
Ha volt egy egyenes kisebb,
mi csak akkor tudja, hogy le a 2-elemű tömb.
Amint megvan le, hogy az utolsó elem, ha ez a mi elem, akkor soha nem találják meg.
Most itt van, amit tehetünk, pontosan olyan, mint te mondtál.
Mi lehet kezdeni plopping cucc egyenesen a közepén a while ciklus.
Mi lehet puff a mi középpont.
Mi lehet venni az összes ilyen, ha nyilatkozatok,
húzza ki őket e do-while hurok,
puff őket,
tisztítsa meg a dolgokat egy kicsit,
és én megyek előre, és mentse a felülvizsgálat.
És ezen a ponton, mi megvagyunk elég közel.
Sam.
Azt hiszem, akkor is van, hogy int középpontját = méret - 1/2.
Megvan, méret - 1/2.
Van még valami, meg kell változtatnunk erről a vonalat?
Ez egy jó fogás.
>> Mit jelent a méret csinálni? Vagyunk állandóan változó mérete?
Annak érdekében, hogy a vonal, mint ez, meg kell változtatni a méretét.
Meg kell változtatni a méretét minden alkalommal, amikor megy körül a hurok.
De ne felejtsd el, amikor mentünk keresztül például csak egy kicsit korábban,
és mi volt az elején a 4
és a vég az egész úton át a 108?
Hogyan számoljuk ki a középpont?
Vajon mi a méret?
Vagy használta kezdődik és végződik helyette?
Ez a különbség a végén és az elején.
Pontosan, és pontosan hogyan írjak, hogy Charlotte?
Csak a végén - kezdődik.
Ugye nem kell tennie a - 1
mert az - 1 bekerült a végén kezdődik, és a már.
[Nate] Nagy, teljesen igazad van.
Nem kell, hogy ezt a - 1 mert - 1 bekerült
és elszámolni, amikor inicializálja a végén változó.
>> Van még valami, amit meg kell tennem szintaktikailag hogy ezt a vonalat értelme?
[Student] Plus megkezdéséhez. >> 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]