[Powered by Google Translate] [3 jakso] [vähemmän mukavaksi]
>> [Nate Hardison] [Harvardin yliopisto]
>> [Tämä on CS50.] [CS50.TV]
>> Selvä, mennään alkuun.
Tervetuloa Viikko 4 CS50.
Jos te avata selain ja avata PSET 3,
Scramble kanssa CS50, aiomme aloittaa menee
osan läpi kysymyksiä siellä.
Aivan kuten viime viikolla, me työskentelevät CS50 Spaces,
jos voit myös vetää että jopa niin hyvin,
ja jos mennä eteenpäin ja vierailla tämän linkin että minulla täällä ylhäällä.
On aika aloittaa.
Meillä pikku hi-ohjelma täältä. Mikään hullu.
Yksi ensimmäisistä asioista mitä haluan tehdä teidän kanssa tänään mennä yli muutamia ratkaisuja
Tehtävä Set 1, millaisia ​​esimerkiksi ratkaisuja,
niin voit saada tuntea, millaisia ​​koodin henkilöstön kirjallisesti,
millaisia ​​koodin muiden opiskelijoiden kirjoittamista,
ja olet katsomaan sitä, koska tiedän, että se on outoa
Kun lähetät ratkaisun ongelmaan asettaa ja saada kommentteja
oman version, mutta joskus se on hyödyllistä nähdä, miten muut ihmiset tekivät sitä,
varsinkin ne, jotka ovat komeita.
Suurimmaksi osaksi, olin todella vaikuttunut ratkaisuja te tuotettu.
En ole vielä alkaneet kartoittaa ongelman Set 2s, mutta jos he ovat kaikkea muuta kuin ensimmäinen,
se tarkoittaa vain hyviä asioita.
>> Jos katsot minun korjauksia, aloitamme aina alas Versio 1,
ja aiomme ottaa vilkaista Mario ratkaisuun.
Jos vedät tähän asti, nämä ohjelmat että aiomme esitellä ovat oikeita.
Ei ollut oikeellisuutta kysymyksiä näistä ongelmista, vaan pikemminkin
haluamme puhua hieman siitä eri suunnittelu kysymykset
, joita on käytetty tässä.
Yksi niistä asioista, että oli mielenkiintoista ratkaisua
on, että se käyttää uuden rakenteen nimeltään punta määritellä,
joskus myös nimitystä hash määritellä.
Saanen suurentaa sitä täällä.
# Define voit antaa nimiä näitä numeroita teidän ohjelmassa.
Tällöin suurin korkeus pyramidi Mario
oli 23 ja sen sijaan että 23 minun koodi-
me viittaa että kova koodaus 23 -
vaan tämä antaa nimen max_height tähän numeroon,
joten tänne minun do-while silmukka
voit itse viitata max_height
sen sijaan, että numero 23 tuumaa
[Opiskelija] Mitä hyötyä tehdä se?
Se on hyvä kysymys.
Yksi on luettavuus.
Etu tämän # define on luettavuus.
Kun luen tätä koodia, näen, mitä on tekeillä.
>> Näen tässä kunnossa täällä, että testaamme
varten korkeus on <0, jonka voisimme myös määritellä
olla minimikorkeus tai min korkeutta.
Muiden etu on se, että voin sitten lukea loput linja nähdä
että olemme myös Varmistamme, että korkeus ei ole suurempi kuin Max korkeus,
koska aiomme jatkaa samalla korkeus on suurempi kuin maksimi korkeus.
Muiden etu on, jos olen loitontaa vähän täällä-
jos juoksen tämän ohjelman ja olen suorittanut sen, sano, jossa 23 juuri nyt,
se tulostaa kaikki 23 riviä tuosta vain.
Mutta sano halusin muuttaa Max korkeus,
ja nyt haluan rajoittaa maksimikorkeus pyramidit
olevan vain sanoa-mies, joka oli funky.
# Include , # define max_height,
ja sanokaamme halusimme asettaa se vastaa 10.
Nyt tässä vaiheessa, kaikki mitä oli tehtävä oli muuttaa tässä yhdessä paikassa.
Voin kääntää koodin, ja nyt jos yritän ja kirjoita 12,
se pyytää minua uudelleen.
Tässä tapauksessa olemme vain käyttämällä max_height kerran.
Se ei ole iso hässäkkä mennä
ja muuttaa sitä kun silmukka, jos haluat.
Mutta ohjelmissa missä olet viittaa samaan maaginen numero
uudestaan ​​ja uudestaan, tämä # define mekanismi on todella kätevä
koska olet vain muuttaa sitä kerran yläreunassa tiedostojen on tyypillisesti minne laitat ne-
ja muutos siivilöityy läpi loput tiedoston.
>> Muita asioita Halusin todeta tämän tehtävän, että ajattelin näytti todella mukava,
yksi oli nimeäminen muuttujia.
Näetkö tässä että meillä kokonaisluku muuttujia kutsutaan rivin ja kutsutut korkeus.
Spaces, hash, se auttaa tekemään koodia hieman luettavaa,
tekee siitä hieman ymmärrettävämmäksi, mitä todella tapahtuu.
Tämä on päinvastoin kuin käyttäen sanoa, satunnaisia ​​kirjaimia
tai vain siansaksaa kokonaan.
Viimeinen asia, minä huomauttaa on, että silmukoita,
usein nämä iteraattori muuttujia, nämä laskurit että käytät omassa silmukoita,
se on vakio ja perinteisen käynnistää ne joko i ja sitten j ja k
ja menee sieltä jos tarvitset enemmän muuttujia,
ja tämä on vain yleissopimus.
On olemassa paljon sopimuksia.
Se riippuu ohjelmointikieli käytät.
Mutta C, me yleensä aloita i.
Se ei ole järkevää käyttää vaikkapa tai b
tilanteesta riippuen.
Siinä kaikki tämä.
Jos nyt vetää Versio 2, näet toisen Mario,
ja tämä on samanlainen kuin toinen, että me vain näki,
mutta se tekee jotain eräänlainen jäähtyä.
Jos me tarkastelemme tässä osiossa täällä sisemmän for silmukka,
he käyttävät joitakin hullu näköinen syntaksin täällä juuri tätä linjaa.
Tätä kutsutaan ternäärinen operaattori.
Se on, jos muu selvitys tiivistetty yhden rivin.
Ehto on tämä osa suluissa.
Se vastaa sanomalla jos j <korkeus - i - 1.
Ja sitten, mitä sisältöä että jos lohko olisi ovat tilaa
ja sitten sisältö, mitä muu olisi ovat tämän #.
Se on pohjimmiltaan määrittämällä tilaa tämän muuttujan.
Se on laittamalla tilaa sisällön lohkon muuttuja,
Jos tämä ehto täyttyy, ja jos ehto ei täyty,
Sitten lohko muuttuja saa tätä #.
Ja sitten, tietenkin, sen sijaan, että rakentaa koko merkkijonon
ja tulostaa kaiken pois lopussa tämän ratkaisun tulostaa sen yksi merkki kerrallaan.
Aika siistiä.
>> Toinen pari asioita tarkastella. Me siirrymme ahne.
Nyt jos katsomme ahne, tämä ensimmäinen ratkaisu
käyttää näitä # määrittelee melko vähän.
Meillä on yksi vakio määritellään kullekin eri numerot tähän ohjelmaan.
Meillä yksi senttiä per dollari, yksi neljäsosaa, Dimes, Nickels, ja penniä,
ja nyt kun me selaa ja lue koodi
Voimme nähdä standardi do-while silmukka tulostuksen kaiken pois.
Kind of ydin tämä ongelma ymmärtämättä, että
sinun piti muuntaa uimuri että olet lukenut käyttäjältä kokonaisluvuksi
tarkasti tehdä matematiikkaa, ja tämä johtuu
kanssa liukulukuja, kuten puhuimme luento lyhyesti,
se ei ole mahdollista tarkasti edustamaan jokaisen arvon numero rivillä
koska on olemassa äärettömän monta arvot ovat välillä 3 ja esimerkiksi 3,1 edes.
Sinulla voi olla 3,01 ja 3,001 ja 3,0001, ja voit pitää käynnissä.
On käynyt ilmi, kun olet työskennellyt rahaa, usein haluat muuntaa sen
osaksi kokonaisluku muodossa niin, että et ole menettämässä penniä ja tuollaista kamaa.
Doing että ja pyöristäminen oli avain.
Tämä ratkaisu käyttää täysin suoraviivainen, edullisesti algoritmi,
joka pienennetään määrä senttiä jäljellä, ensin neljäsosaa,
sitten Dimes, sitten Nickels, sitten penniä,
ja lisäämällä kolikoiden määrä kerrallaan.
>> Toinen ratkaisu että näemme, kuten loitontaa ja mennä Revision 4,
oli hyvin samankaltainen alusta vaan käyttää div ja mod
oikeus tänne laskea määrän senttiä.
Tämä määrä on neljäsosaa on yhtä suuri määrä senttiä jaettuna 25,
ja syy tähän toimii, koska me teemme kokonaisluku jako,
joten se hylätään mitään jäljellä.
[Student] Onko meillä kommentoida haku?
Se oikeastaan ​​riippuu.
[Student] Olet kommentoi yli koodia täällä.
Joo, ja niin on joukko erilaisia ​​filosofioita tästä.
Oma filosofiani on, että koodi on todella totuus,
kuten koodi on mitä tosiasiassa ajetaan tietokoneessa,
ja niin koodin pitäisi olla luettavissa kuin mahdollista eikä edellytä niin paljon kommentteja.
Se sanoi, kun teet asioita, jotka ovat tavallaan hankala matemaattisesti
tai algoritmisesti, on hyvä kommentoida niitä, jotta voit
lisäävät uuden ulottuvuuden, ylimääräinen kerros kuka lukee koodin.
Näissä ratkaisuissa usein ne kommentoitu voimakkaammin juuri siksi
Haluamme pystyä jakamaan niitä ja on ihmisiä noutaa ne
ja lukea melko helposti.
Mutta ehdottomasti, olen sitä mieltä, että tämä on raskasta.
[Student] Mutta jos on epävarma, mennä raskaampaa?
Jos olet epävarma, mene raskaampaa.
Jotkut ihmiset joskus sanovat return 0 tai jotain.
Mielestäni on naurettavaa kommenttia.
Selvästi, että mitä tapahtuu.
En tarvitse Englanti kertoa minulle.
Joskus ihmiset kirjoittavat juttuja kuten "kthxbai!"
Sellainen söpö, mutta myös ei-
että ei ole tehdä eroa kommentointi pistettä tai ei.
Tuollaiset kommentit ovat vain ha, ha.
Cool.
>> Tässä vaiheessa aloitamme työstää Harjoitus 3 § kysymyksiä.
Jos kaverit vetää tätä uudelleen,
Kuten viime viikolla, emme aio katsoa shortsit tässä osiossa.
Annamme te tehdä omaa aikaa ja puhua kysymyksistä.
Mutta nyt tässä jaksossa aiomme viettää vähän enemmän aikaa
puhuu vähemmän koodaus perusasiat
kuten teimme viime viikolla, ja sen sijaan, aiomme keskittyä enemmän
hieman enemmän teoriaa, joten puhumme binäärihakupuu ja sitten lajittelusta.
Mistä ne teistä, jotka ovat seuranneet mukana luento,
voi joku antaa minulle kertaus mitä eroa on
välillä binäärihakupuu ja lineaarinen haku?
Mitä on tekeillä? Toki.
Lineaarinen haku etsii läpi jokaisen elementin järjestetty luettelo
yksi kerrallaan yksi yksitellen,
ja binäärihakupuu jakaa luettelon 2 ryhmään,
tarkastuksia, jos avaimet arvo, joka etsit on suurempi tai pienempi kuin keskipisteen arvo
että olet juuri löytänyt, ja jos se on alle, se menee alemman listan
ja sitten jakaa se taas tekee saman toiminnon
pohjaan, kunnes se löytää keskipisteen on oltava yhtä suuri kuin arvo sinänsä.
Oikea.
>> Miksi välitämme?
Miksi puhumme binäärihakupuu vs. lineaarinen haku?
Joo.
Binary on paljon nopeampi, joten jos kaksinkertaiseksi ongelman
se vie yksi askel kuin kaksi kertaa niin paljon.
Aivan.
Se on hyvä vastaus.
Lineaarinen haku on hyvin tarkistaa yksi elementti kerrallaan,
ja kuten näimme heti ensimmäisenä päivänä luento
kun Daavid meni läpi hänen puhelinluetteloon esimerkiksi
ja revitään yhden sivun puhelinluettelosta kerrallaan
ja pitää tehdä, että yhä uudestaan ​​ja uudestaan,
se vie hänet todella kauan löytää ketään puhelinluettelosta,
paitsi tietenkin, hän oli etsimässä joku aivan alussa aakkoset.
Binary search, voit mennä paljon nopeammin,
ja se ei ole vain kaksi kertaa niin nopeasti tai 3 kertaa nopeammin tai 4 kertaa nopeammin.
Mutta ongelma saa pienempiä ja pienempiä paljon nopeammin.
Tämän havainnollistamiseksi, alamme puhua mitä tapahtuu
kun kirjoittaa binäärihakupuu.
Ongelma käsillä on, että jos minulla on joukko numeroita,
sanovat, 1, 2, 3, 5, 7, 23, 45, 78, 12323,
ja sitten 9 kanssa ton 0s sen jälkeen,
haluamme pystyä selvittää todella nopeasti mitä on
Tämä joukko numeroita.
Tiedän, että tämä tuntuu vähän typerältä ja hieman keinotekoinen,
koska juuri nyt se on.
Meillä on joukko, joka ei ole kovin monia tekijöitä siinä,
ja jos pyydän teistä selvittää, onko
23 on array, voit tehdä sen melko nopeasti
vain vilkaisemalla tämän ja kertoa minulle kyllä ​​tai ei.
Analoginen harkita on kuvitella, jos tämä olisi vaikkapa
Excel 10.000 riviä, 20000 riviä.
Tietenkin voit tehdä komennolla F tai ohjai ja etsiä jotain.
Voit myös käyttää suodattimia ja etsiä tavaraa,
mutta jos sinulla on ollut käydä läpi kyseisen tiedoston rivi rivi riviltä,
se vie kauan aikaa löytää se.
Se on tavallaan kuten puhelinluetteloon esimerkkinä myös, jos
kukaan näyttää läpi puhelinluettelosta yhden sivun kerrallaan.
Tyypillisesti ne eivät avata sen keskellä,
tai kun kyseessä on paljon puhelimen kirjoja ja sanakirjoja, joissa
sinulla todella on se kiilattu ensimmäinen kirjain,
voit kääntää tähän ensimmäiseen kirjeeseen ja avata ja aloittaa läpi siellä.
>> Muistuta minua nimesi uudelleen. >> Sam.
Sam.
Kuten Sam sanoi, että lineaarinen etsintä prosessi tulee olemaan todella hidas,
ja sen sijaan on binäärihakupuu, miten tämä toimii on, että
joka kerta käymme läpi iteraation meidän etsiä algoritmin,
aiomme jakaa luettelon puoli pääasiallisesti,
kahteen pienempään luetteloihin.
Ja sitten seuraavan iterointia silmukan, me jakaa sen uudelleen
muihin pienempiin luetteloihin.
Kuten näette, ongelma pitää saada pienempiä
koska pidämme heitetään puolet luettelon joka kerta.
Miten tämä hävitä työtä?
Aivan kuten muistutus, mitä aiomme tehdä, jos olisimme tietokoneella
ja olimme vaikkapa etsimällä numero 5 tässä luettelossa
että voisimme poimia numero keskellä.
Keskellä tätä luetteloa, koska on olemassa 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 numeroa,
olimme poimia numero joko 4-asemassa tai 5. asemassa,
ja olimme kutsua että keskellä meidän listan.
Poimi numero keskellä.
Sitten, aivan kuten Sam sanoi, me testata nähdä, jos se numero on sama
määrää, että haluamme saada tai meidän haluamasi numero.
Jos se on yhtä, niin olemme löytäneet sen. Me voitamme.
Jos se ei ole yhtä, sitten on pari tapausta.
Kaksi tapausta ovat joko numero on oltava suurempi kuin määrä me tarkastelemme,
tai se on vähemmän kuin.
Jos se on suurempi, siirrytään oikealle.
Ja jos se on pienempi, me liikkumaan vasemmalle.
Ja sitten me toistaa koko prosessi uudestaan
joko oikealle puoli tai vasemman puolen luettelosta.
>> Ensimmäinen ongelma nykypäivän osiossa on selvittää
miten voimme todella alkaa ilmaista tämä C-koodia.
Meillä pseudokoodina täällä.
Mitä me alkaa tehdä on minä vetää jopa upouusi tilaa,
Tallenna tämä tarkistus niin, että meillä on nämä muistiinpanot myöhemmin,
me poistaa kaikki tähän, ja sitten kopioida ja liittää Harjoitus
tämä tieto meidän tiloihin, ja toivottavasti tämä ei rikkoudu.
Perfect.
Jos te kaikki tehdä, kopioi ja liitä tämä koodi uuteen tilaan,
tyhjään yksi.
Kokeillaan Daniel. Jos kääntää ja ajaa tämän ohjelman, se toimii?
No >> Mitä se sanoo?
Se sanoo valvonta on päättymässä kuin void funktio.
Joo, niin haluan kokeilla käynnissä sitä.
Oletteko nähnyt tätä ennen? Tiedätkö mitä tämä tarkoittaa?
Okei, leikellä tätä hieman.
Se sanonta file.c rivillä 9, 1 sarakkeessa meillä virhe, kuten sanoit,
ja se sanoo että se johtuvat virhe-varoitus ja palautuva varoituksen.
Se näyttää jotain on tekeillä palautuva, jossa on järkeä.
Meillä ei void funktio, mikä tarkoittaa, että meillä toiminto
joka ei palauta mitätön.
Void funktio on, joka näyttää tältä:
void foo (), ja se on mitätön, koska paluu tyyppi on mitätön,
mikä tarkoittaa sitä, että jos meillä olisi jotakin täällä
kuten paluu 1, olimme saada kääntäjä virheen tämän.
Kuitenkin meillä on ei-mitätön toiminto.
Meidän ei void funktio on tässä tapauksessa meidän hakutoiminto
koska sillä on paluu tyypin bool.
Kun se on selvää, että ohjaus on lopussa ei-mitätön toiminto,
se johtuu haku ei ole paluuta selvitys.
Se ei palaa mitään tyyppi bool.
>> Voimme korjata sen ja mitä mieltä olette
search pitäisi palauttaa oletuksena?
Mikä olisi oletusarvo paluuarvon haku?
Koska sitähän voimme lopussa.
Charlotte, onko teillä,?
Totta vai tarua? >> Totta vai tarua.
Kumpi?
Vääriä. En tiedä.
Väärä? Yritetään.
Miksi sanot tuottoa väärä? Se on hyvä intuitio.
[Charlotte] En tiedä.
Aiomme palata vääriä tässä tapauksessa, koska tämä on meidän oletus
Jos jostain syystä lista on tyhjä, tai neula
että etsimme ei ole olemassa.
Sitten aivan lopussa, jos emme palauta true aiemmin tätä toimintoa,
me aina tiedämme, että tämä toiminto sanovat Ehei, se ei ole array.
Se ei ole heinäsuovasta.
Nyt jos me kääntää ja ajaa se-anna minun tallentaa, jotta voimme vetää sen ylös.
Nyt jos me kääntää ja ajaa meidän ohjelma, se rakentaa.
Saamme vähän nopeasti.
Jos Löin 4-uh-oh.
Se ei tulosta mitään. Se näyttää kaiken päättyi kunnossa.
Meidän täytyy täyttää tämä tuumaa
Puhuimme algoritmi pseudokoodilla hieman sitten.
Haluan nähdä, tallenna,
ja minä vetää että algoritmi takaisin ylös.
Katsotaanpa osuma tämän kaveri. Nope.
Siellä se on.
Miten teemme tämän?
Mikä olisi hyvä strategia liikkeellelähtö tämän koodin?
Sinun täytyy valita numero keskellä.
Miten valita numero keskellä array?
Mitään ehdotuksia?
[Student] strlen jaettuna 2.
Strlen jaettuna 2. Se on hieno.
Strlen toimii erityinen erilaisia ​​matriiseja.
Millaisia ​​ryhmät?
String taulukot, merkki taulukot.
Se on niin samanlaista käsite, haluamme soveltaa,
mutta emme voi käyttää strlen koska meillä ei ole joukko merkkejä.
Meillä on joukko ints.
Mutta mitä strlen saa meille?
Tiedätkö mitä se saa meille?
[Opiskelija] strlen saa meidät pituuden.
Aivan, se saa meidät pituuden.
Strlen saa pituus array meille.
>> Miten saamme, että meidän binary hakuohjelma?
Miten saat pituus array?
[Student] strlen?
Voit saada pituutta oikein muotoiltu C string array strlen.
Ongelmana on kuitenkin se, että meillä ei ole string array.
Jos katsomme taaksepäin tätä koodia, meillä on tämä kokonaisluku array.
Mistä tiedämme, kuinka kauan se on?
[Student] Onko vastaavaa yksi päätepiste, kuten int l tai jotain?
On käynyt siellä oikeastaan ​​ole, joten tavallaan tämä on
yksi niistä asioista, joka on vain hyvä tietää C,
että ei ole mitään keinoa saada pituus array
jos kaikki annan teille on jono.
Siksi toimii jouset, syy strlen toimii,
on sillä, jos merkkijono on muotoiltu oikein,
se on, että erityinen \ 0 luonnetta aivan lopussa.
>> Voit myös kuvitella, jos sinulla on väärin muotoiltu merkkijono
ja ei ole \ 0 luonnetta siellä, niin koko juttu ei toimi.
[Opiskelija] Voitteko lisätä \ 0?
Voisimme tässä tapauksessa.
Voisimme lisätä jonkinlainen \ 0
tai jonkinlainen merkitsee merkki ja sitten käyttää sitä.
Mutta se ei ole aivan tule toimimaan
koska \ 0 on char tyyppinen,
ja tässä meillä ints.
Toinen asia on, jos me käyttäisimme erityinen arvo
kuten -1 merkitä loppua array
emme voisi koskaan säilytä -1 meidän kokonaisluku ryhmät.
Olisimme jumissa.
On käynyt ilmi, että ainoa tapa saada pituutta
of array C on todella muistaa sen
kun asetat sen ja sitten siirtää se ympäriinsä array
niin että kun minulla on toiminto, joka aikoo tehdä töitä
on joukko kokonaislukuja tai kelluu tai kaksinkertaistuu tai mitä olet,
Olen myös antaa funktion taulukon pituus,
ja se mitä olemme tehneet täällä hakutoiminto.
Jos katsotte, mitä olemme tehneet, kun jätämme meidän array täällä
Olemme myös siirtää sen pituus, koon.
Se vain käy niin, että me olemme kutsuneet tätä muuttujaa täällä,
Tämä parametri tai väitteitä.
Tätä kutsutaan funktion argumentti luettelon tai Parametrilistassa
ja näitä kutsutaan myös väitteitä tai parametreja.
Ihmiset käyttävät eri termejä eri aikoina.
Olen joskus vaihtaa ne itse.
Se vain on niin, että tämä muuttuja tässä on nimetty samalla
Tähän # define täällä.
Mutta ne eivät ole sama asia.
Osakekannan väliä.
>> Jos katsot mitä tapahtuu täällä, me julistamme
meidän int array, jota olemme kutsuneet numeroita.
Olemme antaneet sille meidän koko, joka vastaa meidän # define ylös yläreunassa.
Se tulee olemaan 8.
Ja sitten kun me sitten kutsumme hakutoiminto alhaalla,
ohitamme määrä haluamme etsiä, joita olemme pyydettäessä,
saanut käyttäjältä.
Me kulkea array, tämä numeroita,
ja sitten meillä on myös kulkemaan koko array,
ja sitten arvo koko 8 saa säilyttää
tai siirtynyt tämän kokonaisluku muuttuja nimeltä kokoa.
Meillä on taulukon koko.
Nyt jos palaamme siihen, mitä me puhuimme aiemmin,
Luulen Missy esille seikka mitä piti tehdä, on saada pituus array
ja jakaa sen 2, ja se antaa meille keskipiste.
Katsotaanpa.
Voiko olla joku kirjoittaa tämän ja tallentaa ne avaruudessa?
Entä Leila?
Saanko kirjoittaa tästä?
Kirjoita ensimmäinen rivi, jossa otat pituus array ja saada keskipisteen
ja tallentaa sen uuteen muuttuja.
Annan teille muutaman sekunnin. Oletko valmis?
[Student äänetön]
Toki olisin voinut voit laskea keskipisteen
on heinäsuovasta array sisällä hakutoiminto
käyttämällä pituus heinäsuovasta array, joka on kooltaan vaihteleva?
Mikään hankala täällä.
[Leila] Vain koko / 2 ja juuri-
Ja tallenna se ja paina Tallenna-painiketta täällä huipulla,
ja me vedä se ylös.
Perfect.
Siellä mennään. Mahtavaa.
>> Kuten on, tulee tämä kääntää?
[Leila] Ei, se on suurempi.
[Nate] Joo, niin mitä meidän pitää tehdä?
[Leila] Kuten int keskipiste tai jotain.
Mahtavaa. Joo, tehdään se, int keskipiste = koko.
Tuleeko tämä kääntää?
Katsotaanpa poistaa tämän kommentin ja saada se pois tieltä.
Mitä ei koota tästä?
Emme ole tekemässä mitään kokonaisluku,
joten meidän täytyy tulostaa sen tai jotain.
Joo, aivan.
Saamme käyttämätön muuttuja.
Mitä muuta ei tule toimimaan tästä?
Mielestäni sanoit jotain, Sam. Puolipistettä.
Joo, olen puuttuu nuo puolipistettä.
Se tulee olemaan pysyvä asia koko aikana aikavälillä.
Viimeinen asia Teen on laitan joitakin valkoisia tilaa kummallakin puolella
Tämän operaattorin täällä, koska se on tyypillisesti miten me sen teemme
mukaan meidän tyyliin opas.
Meillä keskipiste meidän array.
Nyt jos muistamme takaisin meidän algoritmi,
Mikä oli toinen askel, että meidän piti tehdä, kun meillä keskipisteen?
[Student] Jos se on suurempi [kuulumattomissa].
Joo, niin meidän täytyy tehdä jonkinlainen vertailu, ja mitä me vertaamalla täällä?
Sanoit jos se on suurempi kuin. Mikä on se, että lause viittaa?
Numero tulee esiin, jos se on suurempi kuin keskipiste, sitten mennä jopa array?
Aivan, niin numero, joka tulee, kun me-
Neula, joten olemme vertaamalla neula,
ja mitä me vertaaminen neulaa?
Koska neula on mitä etsimme.
Olemme vertaamalla sitä päästä keskipisteen.
>> Mutta se järkevää tarkistaa
jos neula = keskipisteessä?
Onko siinä järkeä?
Onko kukaan eri mieltä?
Annetaan sitä kokeilla, jos (neula == keskipiste).
[Student] Onko printf löysit sen.
[Nate] printf ("Löysimme sen! \ N");
Muuten-Olen menossa alkaa tehdä jotain erilaista täällä.
Aion aloittaa laskemisesta housunkannattimet noin jos lausuntoja koko ajan
vain sillä jos lisää tavaraa, niin
emme saa kerääjiä.
Joo, Sam. Sinulla pisteen.
Ongelmana on, että keskipiste edustaa asema array,
mutta voit saada sen edustamaan arvoa että kanta array.
Se on hyvä piste.
Oliko kaikki kuulla Sam sanoi?
Hän sanoi, että midpoint kuten
edustaa vain aseman jono, mutta se ei ole varsinainen alkio.
Jos ajattelee koodi kirjoitettu juuri nyt,
jos me tarkastelemme tätä array tänne, mikä on 8 elementtiä se,
Mikä on arvo keskipisteen tulee olla tätä toimintoa?
[Student] 4.
[Nate] 4.
Jos etsimme numero 4 -
ja voimme vain ajaa tämän koodin ja laittaa vähän surullinen kasvot täällä
koska emme löydä sitä, jos me suorittaa tämän koodin
kuten nyt, lataamalla sen, rakennus, haluan selaa alaspäin
ja jos etsimme numero 4,
löysimme sen, mutta emme saaneet tätä printf kyllä.
Yksi syy on se, että emme palauta true,
mutta me todella löytää numero 4?
Ja Sam sanoo ei.
Mitä huomaamme?
Olemme todella löytänyt keskipisteen, joka jos katsomme array tänne,
se tulee olemaan elementti indeksi 4, että me tarkastelemme,
joka on 23.
>> Miten oikeastaan ​​tuon elementin keskipisteessä
eikä vain keskipisteen itse?
[Student] Olisimme tulee char tai jotain?
Mikä se tehdä vain uteliaisuudesta?
Voitko täsmentää hieman?
Sinun täytyy muuttaa asennosta numero,
joten sinun täytyy tehdä jonkinlainen yhteys-Minusta se on char, mutta se ei ehkä ole.
Joo, hyvä pointti.
Olemme tehneet paljon tämän muuntaa kannat otetaan merkkiä, nämä merkit,
Kahden ensimmäisen ongelman sarjaa.
On käynyt ilmi, että täällä, tämä on melkein samanlainen
Käyttämällä i kirjaimen merkkijono, jos se on järkevää.
Tässä haluamme päästä keskipisteen elementti.
Miten me sen teemme?
Kevin, sinulla on ehdotuksia siitä, miten voisimme tehdä?
Voisit tehdä heinäsuovasta, alkusulkumerkki, mid, suljettu kiinnike.
Voitko kirjoittaa, että meille?
Tallenna se täällä, ja me vetää se ylös.
Etsimme tällä rivillä 9,
ja olemme ymmärtämättä, että emme halua verrata neulan keskipisteen,
vaan haluamme verrata neulan
sen elementin asemassa keskikohdassa sisäpuolella heinäsuovasta array.
Cool.
Siellä mennään.
Joo, se näyttää aika hyvältä, jos (neula == heinäpaali [keskipisteen]).
Löysimme sen.
Nyt jos otamme koodi-Me varmuuskopioida hieman,
Se kokoaa, se toimii, ja jos nyt etsimme 4,
emme löydä sitä, koska nyt olemme todella saada numero 23.
Saamme arvo 23, ja sitähän me vertaamalla meidän neula.
Mutta se on hyvä. Se on askel oikeaan suuntaan.
>> Sitähän me yritämme tehdä.
Emme yritä verrata neulan vastaan ​​tehtävissä array
vaan pikemminkin vastaan ​​todellinen alkiot taulukossa.
Jos katsomme takaisin nyt seuraava askel meidän algoritmi,
Mikä on seuraava askel?
Leila on jo mainitsi sen lyhyesti.
[Opiskelija] Tarkista, onko se suurempi tai pienempi kuin ja sitten päättää, mikä tapa liikkua.
[Nate] Joo, niin miten me sen teemme?
Voitko laittaa joskus Minä tallentaa tämän tarkistuksen,
ja sitten jos laitat jotkut linjat, jotka tekevät niin.
Joo, Charlotte. >> Minulla on kysymys.
Eikö sen pitäisi olla keskipiste - 1, koska ensimmäinen asia on
se on 0 indeksoitu, joten jos laittaa 4, se ei oikeastaan ​​merkki etsimme?
Kyllä, ja toinen ongelma, että on-
että on hyvä saalis, sillä mitä päätyä tapahtumassa mahdollisesti
jos pidämme liikkuvat ja emme koskaan säädä aluksi?
Oletan, mitä voisimme päätyä tekemään yrittää käyttää
elementin 8. kannan array,
joka tässä tapauksessa ei ole olemassa.
Me haluamme tehdä jonkinlainen osuus siitä
että meillä on joitakin nolla indeksointi.
[Charlotte] Anteeksi, en tarkoittanut keskipiste - 1 hakasulkeisiin.
Voimme tehdä sen.
Palaamme tähän asiaan vain hieman.
Kun alamme päästä varsinaiseen kiehkura,
silloin me todella nähdä tämän kuvaan.
Toistaiseksi voimme tehdä tämän, mutta olet täysin oikeassa.
Että nolla indeksointi on, että meidän täytyy selittää.
Katsotaanpa.
>> Miten on suurempi kuin ja pienempi kuin-?
[Opiskelija] saan miten suurempi ja pienempi kuin osa.
En vain ollut varma mitä tulostaa jos huomaat, että se on vähemmän kuin heinäsuovasta keskipisteen tai suurempi kuin.
Täällä voin pelastaa mitä I've-
[Nate] Joo, jos tallennat mitä sinulla, ja me vedä se ylös.
Siellä mennään.
[Opiskelija] ja laitoin kysymysmerkkejä mitä en tiedä.
[Nate] Tuo näyttää hyvältä.
Täällä meillä kysymysmerkkejä, koska emme vielä tiedä
mitä aiomme melko tehdä vielä.
Mitä me haluamme tehdä-Oops, meillä on joitakin olkaimet kaikki funky meille.
Me korjata nämä olkaimet.
Siellä mennään.
Ja niin mitä me haluamme tehdä, mukaan meidän algoritmin,
Jos emme löydä neulaa?
Sano siinä tapauksessa, että neula on pienempi kuin mitä me tarkastelemme. Kevin.
Vain katsoa vasen puoli.
Oikea, joten laitamme kommentin tänne joka sanoo "katsomaan vasemmalle puoli."
Ja jos neula on suurempi kuin heinäsuovasta keskipisteessä, mitä haluamme tehdä?
[Opiskelija] Sitten sinä katsot oikealla puolella.
Katsokaa oikea puoli ", katso oikea puoli."
Ei liian nuhjuinen.
Okei, joten tässä vaiheessa, mitä etsit melko hyvä.
Ongelma koodi kirjoitettu on mitä?
[Student] Sinulla ei ole päätetapahtumat puolikkaat.
Oikea, meillä ei ole päätetapahtumat puolikkaat.
Olemme myös vain mene läpi tämän kerran.
Olemme vain menossa katsomaan yhtä keskikohdassa.
Joko elementti on olemassa, tai se ei ole.
Jotta täydellinen tähän, meidän täytyy tehdä jonkinlainen toistoa.
Meidän pitää toistaa kunnes huomaamme, että
joko elementti on olemassa, koska olemme rajanneet ja lopulta löytyi se,
tai se ei ole siellä, koska teimme läpi kaikki asiat
asianmukaiseen puoliskot array ja totesi, että mikään ei ole siellä.
>> Aina meillä tämä toisto tapahtuu, mitä aiomme käyttää?
[Opiskelija] silmukka.
Jonkinlainen silmukka. Kyllä.
[Student] Voimmeko tehdä do-while-silmukka ja saada se tehdä sitä ja sitten kun
neula ei vastaa-En ole varma minne olin menossa sitä.
Mutta tavallaan kuin tehdä niin kauan kuin se ei ole sama arvo, että käyttäjä syöttää.
Joo, niin katsotaanpas, miten tämä voisi kirjoittaa itse?
Sanoit Katsotaanpa käyttää do-while-silmukka.
Mistä tehdä alku?
[Student] Heti koko / 2.
[Nate] Okei, ja mitä me teemme?
Me täyttää taas myöhemmin.
Mitä me nyt teemme?
[Student] Emmekö halua tehdä kaikkia juttuja meillä, jos osaan?
[Nate] Tee kaikki jutut, hyvä.
Kopioi ja liitä.
Voi veljet.
Katsotaan, jos tämä toimii, jos voimme välilehti tämän yli.
Kaunis.
Okei, ja säästämme tämän niin teillä sitä.
Selvä, ja aiomme tehdä tämän, kun-
mikä oli samalla ehto olit jälkeen?
[Opiskelija] Kun neula ei ole sama, niin kuin huutomerkki.
Mutta en ole varma, mitä se on vielä.
[Nate] Joo, tämä on yksi tapa tehdä se.
Sam, sinulla on kommentoitavaa?
[Sam] Muistelin kun katsoin videoita,
Otin kuvakaappaus yhden kaltainen kun teimme pseudokoodi se,
siellä oli joitakin suhde max ja min.
Minusta se oli jotain, jos maksimi on yhä vähemmän kuin min.
Selvä.
[Sam] Tai esimerkiksi jos max on vähintään min tai jotain,
koska se merkitsisi, että olet etsinyt kaiken.
>> Niin, mitä se kuulostaa max ja min oli kyse?
[Sam] Arvot,-kokonaislukuja, jotka tulevat muuttumaan
suhteessa mihin laitoimme keskipiste.
Aivan.
[Sam] Tuolloin se tulee [kuulumattomissa] laskea max ja min.
Keskipiste on tämä max ja min idea.
Onko siinä järkeä ihmiset?
Jos me alkaa tarkastella, miten aiomme tehdä tämän iteraation
olet täysin oikeassa, että haluamme käyttää jonkinlaista do-while-silmukka.
Mutta kai jos muistamme, mitä tapahtuu klo paikalla tämän taulukon
ja mitä todella tapahtuu-Menen kirjoittaa tänne,
aivan ensimmäinen variaatio binäärihakupuu, olemme-
Aion käyttää b ja e merkitsemään alkua.
Ja sitten loppuun meidän array.
Tiedämme, että alku on 4 oikealla tänne,
ja me tiedämme, että pää on 108.
Sano olemme etsivät numero 15.
Ensimmäistä kertaa teemme tämän, kuten näimme aikaisemmin,
Keskipiste joko olemaan 16 tai 23
riippuen miten laskemme asioita.
Koska tasaisesti jakamalla keskellä antaisi meille tätä tilaa
välillä 16 ja 23, emme voi tasaisesti jakaa sitä
tai jakaa sitä ja saada aikaa todellinen keskipiste.
Me tutustumme 16.
Me huomaat "Hei, 16> 15, että etsimme."
Voit sitten katsoa vasemmalla puolella array
mitä me lopulta teemme on poisheittämistä
tämä koko yläosa
ja sanoi, "Okei, nyt meidän päätepiste tulee olemaan täällä."
Seuraava iteraatio meidän silmukan, olemme nyt etsimässä tätä array,
tehokkaasti joilla hylättiin tämän osan, koska nyt
jos olemme ottaen puoliväliin olla ero alussa ja lopussa,
löydämme keskipiste on 8,
jonka voimme testata 8 nähdä missä se on suhteessa määrään etsimme,
15, huomaavat, että 15 on suurempi,
joten meidän täytyy siirtyä oikealle osan luettelossa,
jonka tiedämme koska olemme ihmisiä, ja voimme nähdä sen.
Tiedämme, että oikea osa tulee olemaan, jos löydämme sen,
mutta tietokone ei tiedä, että, niin mitä me teemme on hyvitämme oikeastaan
ovat tämän nousevat, ja nyt alku ja loppu
ovat samassa paikassa, joten keskipiste tulee ainoa numero luettelossa siinä vaiheessa,
joka on 15, ja olemme löytäneet sen.
Onko se valottaa jos koko max ja min merkintätapa on menossa,
tarkkailemalla päätepisteet array jotta selvittää
kuinka kapea asioita alas?
>> Mitä tapahtuisi, jos tämä ei vastaa 15 nyt?
Mitä jos etsimme 15 ja sen sijaan, tämä määrä oli myös 16?
Saatoimme sanoa, "Voi, se on suurempi.
Haluamme mennä takaisin vasemmalle. "
Ja olimme siirrymme e oikealle,
jolloin meillä on päätepiste, joka olisi ristiriitaista.
Se ei voisi etsiä enempää elementtejä
koska nyt meillä on päätepiste ja meidän alkupiste,
meidän max ja meidän min, nyt käännetään.
Me etsiä koko joukko. Emme voi löytää mitään.
Se missä vaiheessa me haluaisi sanoa, "Okei, me aiomme lopettaa tämän algoritmin.
Emme ole löytäneet mitään. Tiedämme, että se ei ole täällä. "
Miten tämä menee?
[Opiskelija] Miten tarkasti tietokone vaihtaa pää?
Miten loppuun päätyvät ennen alkua?
Pää päättyy ennen alkua
koska matematiikan että aiomme tehdä joka kerta me teemme tätä.
Tapamme Vaihdetaan on jos tarkastellaan ensimmäistä kertaa teemme tämän swap
jossa meillä on alusta 4 ja lopussa
aina alas 108 ja meidän keskipiste, eli klo 16 -
Aion palauttaa tämän takaisin 15-jos me etsimme 15,
tiesimme, että mitä teimme, kun pyysimme 16 ja näki, että se oli suurempi
ja halusi hävittää koko oikean osan luettelossa,
näimme, että mitä halusimme tehdä, on siirtää tämä e täällä.
Tehokkaasti, e pelaaja siirretään johonkin ennen keskipisteen.
Samoin, kun me teimme tämän iterointia algoritmin
ja keskipiste oli 8,
Olemme havainneet, että 8 <15, joten halusimme siirtyä b
yksi entinen keskipiste.
Nyt, alku ja loppu ovat molemmat yhdessä tämän 15.
>> Jos olisimme olleet tapahtumassa etsiä jokin muu arvo, ei 15,
tai jos tämä 15 oli sen sijaan ollut 16,
olisimme havainneet, että e haluamme siirtää yksi ennen keskipisteen.
Nyt e olisivat siellä selattava vähemmän kuin b.
Käydään läpi, miten me oikeastaan ​​päätyä koodaus tätä algoritmia.
Me tiedämme, että haluamme saada tämän keskipisteen laskemista.
Tiedämme myös, että haluamme seurata alussa ja lopussa array
nykyiseen array jotta voimme selvittää
jos tämä vasen puoli luettelo on ja missä oikea puoli luettelossa on.
Teemme joka joko alkaa ja päättyy,
tai voimme soittaa heille min ja max.
Minä käytän alkavan ja päättyvän tällä kertaa.
Kun alamme, jos katsomme taaksepäin meidän esimerkiksi tänne,
Meidän alku oli asetettu alusta array, luonnollisena.
Mikä indeksi oli tämä? Mitä pitäisi meidän alkaa olla?
Daniel.
[Daniel] heinäsuovasta [0].
[Nate] Joo, niin voisimme asettaa sen yhtä heinäsuovasta [0].
Ongelmana on kuitenkin se, että tämä antaa meille ei asemaa ensimmäisen elementin.
Se antaa meille indeksi ensimmäisen elementin tai todellinen arvo, että ensimmäisessä asennossa.
[Opiskelija] Se muuntaa 0,20?
[Nate] Mitä tämä tekee on-hyvin, se ei tee mitään jatkojalostus.
Mitä se tekee on se tallentaa 4 alkaa,
ja silloin on vaikea tehdä vertailuja vastaan ​​alkaa
koska begin järjestämme arvo 4,
joka on alku meidän array,
mutta haluamme seurata indeksejä array
toisin kuin arvoihin.
Me todella käyttää 0, niin.
Lopulle array-Charlotte asian esille hieman aikaisemmin.
Tämä on, jos otamme huomioon nolla indeksointi.
>> Charlotte, mikä pää array?
Mikä on indeksi loppu?
[Charlotte] Size - 1.
Joo, ja jonka koko meidän pitäisi käyttää?
Pitäisikö meidän käyttää pääomaa koko tai pieniä koko?
Capital kokoa.
Tässä tapauksessa voisimme käyttää pääomaa koko.
Jos haluamme tätä toimintoa kannettavaksi
ja käyttää tätä toimintoa muissa ohjelmissa,
voimme itse käyttää pieniä kooltaan.
Se on hieno myös.
Mutta Charlotte on täysin oikeassa siinä, että haluamme koko - 1.
Tässä vaiheessa,
[Opiskelija] Kuinka on mahdollista, että voit käyttää isoja kokoa?
Miten on mahdollista, että voisimme käyttää isoja kokoa?
On käynyt ilmi, että nämä # määrittelee ovat todella,
konepellin alle, tekstin kuten etsi ja korvaa, jos se on järkevää.
Kun kääntää koodin, esikäsittely vaihe
ja kääntäjä kulkee tiedosto,
ja se etsii kaikkialla, että olet kirjoittanut pääoman määrän,
ja se korvaa tekstiä kirjaimellisesti 8, aivan kuten se.
Tässä mielessä tämä on hyvin erilainen kuin muuttuja.
Se ei vie tilaa muistissa.
Se on yksinkertainen teksti korvaa temppu.
Tässä tapauksessa aiomme käyttää kokoa.
Sieltä me haluamme tehdä jonkinlainen toistoa,
ja olemme oikealla tiellä meidän do-while silmukka.
Haluamme tehdä jotain, kunnes ehto ei päde enää,
ja kuten näimme aikaisemmin, näimme, että tämä edellytys
oli todellakin, että emme halua loppua
olla vähemmän kuin alkaa.
>> Tämä on meidän pysäyttää kunnossa.
Jos näin tapahtuu, me haluamme lopettaa ja julistaa, kuten "Hei, emme ole löytäneet mitään."
Ilmaista tätä, haluamme käyttää jonkinlaista silmukan.
Tässä tapauksessa se olisi do-while-silmukka, ja silmukka, kun silmukka?
Meillä on do-while-silmukka täällä.
Onko teillä sellaista lähestymistapaa?
Luuletteko meidän pitäisi kokeilla erilaista lähestymistapaa?
Kevin, mitään ajatuksia?
Meillä voisi olla kun silmukka, koska me tiedämme suurin
olisi suurempi kuin min alussa anyways.
Joo, joten ei ole alustus, joka tarvitsee tapahtua.
Nämä do-while silmukat ovat suuria, kun olet alustaa jotain
sitä ennen testausta, kun taas täällä
me tiedämme, että emme aio pitää reinitializing sekä alkaa ja päättyy
joka kierroksella silmukan.
Me tiedämme, että haluamme ne alustaa, niin tutustu kunnossa.
Tässä tapauksessa minä itse mennä yksinkertainen, kun silmukka.
On käynyt ilmi, että do-while silmukoita käytetään melko harvoin.
Paljon paikkoja ei edes opeta tehdä samalla silmukoita.
He ovat hyviä käsittelyyn käyttäjän syötettä, joten olemme nähneet paljon niitä toistaiseksi.
Mutta normaalia ja kun silmukat ovat paljon yleisempiä.
Osoittautuu, että tämä edellytys kirjoitettu
ei todellakaan tee meille paljon hyvää, ja miksi?
Olen pahoillani, en tiedä nimeäsi.
Olen Jerry. >> Anteeksi?
Se on B-O-R-U-I.
Selvä.
En näe sinua listallani.
Voi, se on siksi, oh, että järkeä.
Onko sinulla idea miksi tämä kun silmukka ei välttämättä toimi tarkoitetulla
sillä kirjoitettu ehto?
[Jerry] Tarkoitatko haluat kaikki jutut jälkeen se-?
Joo, niin se on yksi.
Meidän täytyy ehkä laittaa kaikki tätä kamaa osaksi kun silmukka, joka on täysin totta.
Toinen asia, joka on hieman ongelmallista, vaikka se, että tämä ehto ei toimi.
[Student] Sinun kääntää sitä.
Oikea, joten tämä ehto ei koskaan totta aluksi niin puhuimme siitä.
Haluamme tehdä jotain loppuun <aluksi,
mutta me haluamme tehdä jotain, kun
Aloita ≤ loppu.
>> On tuo käänteinen logiikka siellä.
Olen syyllistynyt tekemään niitä virheitä koko ajan.
[Student] Miksi sen on oltava pienempi tai yhtä suuri kuin?
Koska muistatko tapauksessa, että saimme
jossa oli vain yksi elementti, ja olimme alas,
ja etsimme juuri 15 meidän array?
Ja alussa ja meidän loppu olivat samat elementti.
Haluamme varmistaa, että hoidamme asiassa.
Jos emme suora alle,
meillä olisi vain saada alas 2-elementti array.
Kun pääsimme alas että viime elementti, jos se olisi meidän elementti, emme ikinä löydä sitä.
Nyt täällä, voimme tehdä juuri niin kuin sanoitte.
Voimme aloittaa plopping tavaraa suoraan keskellä meidän kun silmukka.
Voimme plop meidän keskipiste.
Voimme ottaa kaikki nämä, jos lausunnot,
vedä ne ulos tästä do-while-silmukka,
jysäyttää ne,
puhdistaa asioita hieman,
ja minä menen eteenpäin ja pelastaa tämän tarkistuksen.
Ja tässä vaiheessa, me lähdemme melko lähellä.
Sam.
Mielestäni sinun on myös oltava int keskipisteeseen = koko - 1/2.
Selvä, koko - 1/2.
Onko mitään muuta meidän täytyy muuttaa siitä linja?
Se oli hyvä saalis.
>> Mitä koko tehdä? Olemmeko koskaan muuttuu koko?
Pitääkseen kaltainen rivi, meidän täytyy muuttaa kokoa.
Meidän täytyy muuttaa kokoa joka kerta mennä ympäri varten silmukka.
Mutta muistan, kun olimme menossa läpi esimerkiksi vain hieman aikaisemmin,
ja meillä oli alkaa 4
ja pää aina haltuunsa 108?
Miten voimme laskea keskipisteen?
Olimme käyttää kokoa?
Tai käytimme alkaa ja päättyy sen sijaan?
Se on ero pään ja alussa.
Täsmälleen, ja miten tarkalleen pitäisi kirjoittaa siitä, Charlotte?
Aivan loppuun - alkavat.
Sinun ei tarvitse tehdä - 1
koska - 1 on sisällytetty lopussa ja alkaa jo.
[Nate] Hienoa, olet täysin oikeassa.
Meillä ei tarvitse tehdä - 1 koska - 1 on sisällytetty
ja osuus kun alustaa loppu muuttuja.
>> Onko mitään muuta minun täytyy tehdä syntaktisesti on tämän linjan järkeä?
[Student] Plus alkaa. >> Plus alkaa?
[Opiskelija] lopussa.
Koska se on vain lasketaan puoli pituudesta.
Sinun täytyy lisätä aloittaa.
[Nate] Mitä tämä laskee meille?
Jos ajattelemme päättyy tähän ensimmäiseen iterointia silmukan,
pää tulee olemaan paikallaan olevaa 7.
Aloita on 0-asennossa.
Muista, etsimme joko
asento 3 tai asema 4.
Jos me tarkastelemme tätä matematiikkaa, vain tehdä se hieman konkreettisemmin,
laittaa numeroita tänne, meillä on 7, 0,
joten 7-0, ja sitten / 2
on 3 kokonaisluku jako, joka on.
Sitten meidän täytyy lisätä sitten takaisin meidän alkaa?
Emme ole tässä tapauksessa.
On aivan ensimmäinen iteraatio, se on hieno, koska begin on 0.
Mutta edetään, teemme oikeastaan ​​kaikki täytyy vain
loppu - alkaa / 2.
On yksi muu temppu täällä, ja se on nimittäin yksi edelle.
[Student] Tarvitaanko sulkeet?
[Nate] Aivan, ja se johtuu siitä, jos emme aseta näitä sulkeita,
tämä rivi tulkitaan sijaan
kuten (loppu) - (alkaa / 2), jota varmasti halua.
Varo näitä priorisointisääntöjä.
[Student] Miksei se päättyy + alkaa?
Miksei se päättyy + alkaa?
[Opiskelija] Miksi ei, että?
Miksi se olisi +?
Luulen, että olet oikeassa.
[Student] Koska se on keskimäärin?
[Nate] End + alkaa, olet täysin oikeassa.
Vau, olen täysin goofed. Olet oikeassa.
Jos teimme miinus, haluaisimme lisätä aloittaa takaisin sisään
Tässä tapauksessa, olet aivan oikeassa, että haluamme ottaa keskiarvo kahdesta,
joten haluamme lisätä ne, toisin kuin vähennyslaskua niitä.
[Student] Se toimisi myös jos teit lopussa - aloittaa / 2 + alkaa.
Se olisi, jos me-uskon niin.
>> Esimerkiksi, jos katsoitte alkaa,
ja siirsimme sen tänne
sen 15.
Nyt alkaa on asennossa 2.
Pää on 7-asemassa.
Jos vähennämme niitä, saamme 5.
Jaetaan että 2, saamme 2.
Ja sitten me lisätään 2 takaisin,
ja joka saa meidät 4. asemassa,
mikä on täällä, mikä on keskipiste.
[Student] Onko meidän huolehtia kääre?
Missä mielessä me tarvitsemme huolehtia kääre?
Jos summa tai erotus
riippuen siitä, miten me sen teemme ei ole parillinen.
Sitten tietokone saa sekoittaa onko kun se 2,5;
sinä siirtyä vasemmalle tai oikealle mitkä on keskipiste?
Selvä.
On käynyt ilmi, että kokonaisluku jako,
emme koskaan saa näitä liukulukuja.
Emme koskaan desimaalin.
Se on täysin hylätty.
Jos sinulla on tietokone jakaa kaksi int muuttujaa,
ja yksi on 7, ja toinen on 2,
et saa 3,5 seurauksena.
Se saa 3.
Loput hävitetään, joten se tehokkaasti pyöristäminen
ei pyöreä vaan lattia, jos te tuntevat, että matematiikka,
jossa täysin hävittää desimaali,
ja niin olet lähinnä katkaisemalla sen alaspäin lähimpään
kaikkiaan positioita, lähimpään kokonaislukuun.
[Student] Mutta sitten se ongelmallinen, koska jos sinulla on joukko 7 elementtiä
Sitten ottaa automaattisesti 3. osa ulos keskipisteen sijaan 4..
Miten käsitellä sitä?
Se ongelmallista, koska jos meillä olisi joukko 7,
se poimia 3. sijasta 4..
Voisitko selittää hieman?
[Student] Koska jos sinulla on 7 elementtiä sitten 4. osa
olisi keskipiste, oikea?
Muista kommentti on nolla indeksoitu, tosin.
[Student] Joo, niin asentoon 3. Se olisi keskipiste.
Joo.
Selvä. Näen mitä tarkoitat.
Se on tavallaan outoa, koska me tottua tähän koko käsite
päästä eroon desimaaleja.
Se on hyvä piste.
Lopetetaan tämä.
Olemme lasketaan myös keskipiste.
>> Testaamme onko meidän neula on sama keskimmäinen arvo.
Olemme tulostat että löysimme sen, mutta oikeasti, mitä haluamme tehdä tässä tilanteessa?
Olemme huomanneet sen, joten haluamme antaa soittajalle tietää, että löysimme sen.
Meillä toiminto, joka on Boolen kirjoitettu funktio.
Tapaamme signaalin soittajalle meidän toiminnon olemme valmiina
on sanomme, "Hei, tämä on totta."
Miten teemme sen, Kevin?
Olet nyökkää päätäsi. >> [Kevin] Lisää return true.
[Nate] Aivan, return true.
Nyt, jos se ei ole yhtä, miten katsomme vasen puoli?
Onko ideoita?
Stella, mitään ideoita?
Sinun täytyy asettaa uuden aseman loppua.
Joo.
Joten meidän täytyy tehdä kannan keskipisteen - loppua.
Suuri.
Meidän on asetettava uuteen asentoon loppuun
tarkastella vasen puoli.
Tämä oli mitä puhuimme ennen kun
Pidän menossa takaisin tähän esimerkkiin.
Olen aluksi täällä, ja sitten minulla on pää koko matkan tänne.
>> Jälleen, jos etsimme 15, ja meidän keskipiste on 16,
ja ymmärrämme, "Oho, 16 on suurempi.
Haluamme siirtyä vasemmalle puoli. "
Olisimme sitten siirtyä pää 15,
ja me teemme sen ottamalla yksi pois keskikohdasta
ja asettamalla että uusi loppu.
Samoin, jos haluamme tarkastella oikea puoli, miten me sen teemme?
Onko sinulla idea?
[Student] Olet juuri asettanut alkaa keskipisteen + 1.
[Nate] Suuri.
Ja nyt siinä tapauksessa, että emme löydä mitään,
tuo saa hoitanut meille?
Daniel, tuo saa hoitanut meille?
[Daniel] No
[Nate] Jos teemme sen läpi koko joukko, ja emme löydä mitään,
jos se olisi hoidettu, vai pitäisikö meidän huolehtia siitä?
[Daniel] taas kunnossa.
[Nate] Joo, taas kunnossa, tarkalleen.
Se hoitaa läpi koko ryhmän jos emme löydä mitään.
Tämä taas silmukka päättyy.
Emme koskaan ole kohdanneet tämän edellytyksen,
ja voimme palata vääriä.
Voimme myös jättää tätä, jos tänne näin
sillä jos tämä jos lause on tosi,
ja meidän funktio palauttaa,
ja niin me pohjimmiltaan keskeyttää tämän toiminnon tässä vaiheessa
kun palaamme totta.
Mutta mitä tapahtuu tämän rakenteen täällä?
Toimiiko tämä kokonaan, vai onko olemassa jokin looginen virhe siellä?
>> On joitakin looginen virhe siellä, miten se on perustettu.
Mikä mahtaa olla?
[Student] Mihin tarvitset - ja + 1s?
Joka asettaa meidän array jopa olla uusi vasen puoli ja oikea puoli.
[Student] Mutta miksi et voinut tehdä sitä ilman - 1s ja + 1s?
[Nate] Voisimme asettaa sen yhtä keskipisteen?
Mikä voisi olla ongelmallista siitä?
[Opiskelija] Kai se on tehotonta, koska olet tarkkailun arvo, joka on jo tarkistettu.
[Nate] Aivan, joten Sam on täysin oikeassa.
Jos asetat loppuun ja alkaa sama keskipisteen
sijasta - 1 ja + 1 reflektoiden,
jossain vaiheessa tulevaisuudessa me lopulta tarkistaa keskipisteen uudelleen.
[Opiskelija] aloitin PSET, ja sitten minulla oli jotain
missä Unohdin + 1, ja se juuttui ikuiseen silmukkaan.
Oikea, koska jossain vaiheessa et koskaan saa alkaa ja päättyy
todella päällekkäin.
Cool.
On vielä yksi looginen virhe, ja se on, että tämä pitäisi ehdottomasti olla
if.
Miksi se voisi olla?
>> Syynä on, jos se ei ole if-Näitkö sen, Kevin?
[Kevin] Joo, koska muutat päätepiste.
[Nate] Aivan.
Olemme muuttamassa päätepiste,
ja jos se on kirjoitettu näin-Me tekevät välit-
se tarkistaa asian.
Tässä tapauksessa, jos se onnistuu, keskeytyy ulos toiminto.
Sitten se tarkistaa tämän seuraavan kerran,
ja jos tämä onnistuu, se säätää päätepiste,
ja sitten se jatkuu ja tarkista tässä tapauksessa.
Mutta tässä vaiheessa, emme halua sitä jatkaa tarkkailun.
Onneksi emme ole nollaa keskipisteen täällä,
ja me tiedämme, että tämä asia ei onnistu.
Mutta halusimme ehdottomasti laittaa if siellä
vaikka se saattaa, tässä tapauksessa
koska emme säätämällä keskipiste, sillä olisi merkitystä?
Ei, koska nämä tapaukset ovat kaikki erinomaisia.
Jälleen my bad.
Emme mielestäni tarvitse tätä if.
Voimme kokeilla ja käyttää sitä ja katso mitä tapahtuu.
Rakennus, virhe.
Se johtuu luultavasti siitä, jätin nämä b: n ja e: n täällä.
Onko minulla enää niitä ylös huipulla?
Se ei näytä siltä.
Me loitontaa, rakentaa,
siellä se menee, joten nyt jos hakee 15,
Kyllä.
Saanen Lähennä
15, kyllä. Voimme käyttää sitä uudelleen.
Lataaminen lähdekoodia, rakennus, juoksu.
Voimme etsiä jotain 13,
emmekä saa mitään tulostamisen, joten se ei katsonut, että meille.
Se on hienoa, koska se ei ole meidän luetteloon.
>> Olemme nyt myöhässä.
Se tulee olemaan se tällä viikolla.
Kiitos liittymisestä, ja nähdään myöhemmin.
>> [CS50.TV]