JASON HIRSCHHORN: Tervetuloa viikolle kolme, kaikille. Meillä on kiireinen, mutta jännittävä kohta edessämme. Joten ensin, koska olemme tehneet joitakin Edetään tietenkin, mutta meillä on vielä on paljon oppimista vielä tekemättä, olen aikoo näyttää teille joitakin resursseja että osoittautuu uskomattoman hyödyllinen, koska et vain lähestyä ongelma asettaa, vaan myös sulattaa kaikki materiaali annamme sinulle kaverit luentoja ja shortsit sekä kohta. Sitten aiomme viettää ensimmäisen 20 25 minuuttia jaksossa menee yli GDB, joka voi tai ei ehkä ole käytetään tässä vaiheessa, mutta se on uskomattoman hyödyllinen työkalu, jonka avulla auttaa sinua debug-ohjelmia. Paljon olet saattanut käyttää printf vuonna keskellä teidän ohjelma selvittää mitä muuttuja vastasi. GDB on jopa parempi kuin printf ja ei pilata koodia, koska olet suorittaa sen suoritettavaa tiedostoa. Niin me menemme yli 10 eniten hyötyä komennot mitä tarvitset GDB, ja olemme menossa mennä harjoituksen yhteen niin ongelmatilanteissa asettaa kolme ja sen jälkeen voit voi käyttää GDB auttaa debug ohjelmat. Ja lopuksi, me aiomme mennä yli joitakin lajittelu ja etsivät algoritmit että näit luento, ja olemme menee itse asiassa koodi, ei vain pseudokoodina, mutta koodi binäärihaku, kupla lajitella ja valinta lajitella. Joten ensin haluan mennä yli varojen. Tämä on laaja luettelo, ja se on pienemmällä fontilla koska minulla oli paljon mahdu tänne. Mutta nämä eivät ole vain auttaa sinua, uudelleen siten, että ongelma sarjaa ja sulattamaan tietoa olet oppinut, mutta ehdottomasti, tule tietokilpailu aikaa, nämä olla uskomattoman hyödyllinen. Joten ensin, luento toteaa. Jos menet cs50.net/lectures ja selaa erityisiä viikko ja päivä, näet, että on olemassa muistiinpanojasi luento, joka ei ole pelkästään transkriptio, mutta muokattu versio mitä peittyi luento koodilla katkelmia ja muita hyödyllisiä makupaloja. Suosittelen menossa näinä. Ja sitten samoin, siellä lähdekoodi saatavilla kunkin luennon. Ja taas näitä dioja myös saatavilla verkossa osoitteessa cs50.net/sections tänä iltana. Joten toinen ovat shortsit viikoittain, että kansi aiheita, yleensä 5-15 minuutin pituisia. Ja ne toivottavasti antaa sinulle suuri pohjamaali eri aiheista. Kolmas - ja tämä on aivan uusi tässä vuosi - on study.cs50.net. Jos et ole tarkistanut sen, minä Suosittelen että teet niin. Saat valita aihe. Meillä on kymmeniä aiheita siellä. Joten esimerkiksi nostat toiminnot. Se antaa sinulle joitakin dioja ja toteaa toiminnoista. Nuo ovat todella diat TF: iä kannustetaan käyttämään aikana meidän esityksiä jaksossa. Mukana on myös vinkkejä ja niksejä käsitellä toiminnoilla, ja siellä on Käytännössä ongelmia, jotka auttavat käytät toimintoja. Saat myös linkkejä lyhyttä toimintoja ja ajat, että toiminnot ovat nousseet esille luento. Joten study.cs50.net, upouusi tämä vuosi, loistava voimavara. Seuraavaksi minulla on mies, joka on manuaalinen komento, voit ajaa komentoriviltä. Joten jos sinulla on kysyttävää komento, esimerkiksi rand, joka me kohtasi viime viikolla osiosta ja olet todennäköisesti kohdannut ongelman asettaa kun menee läpi luoda koodin, mutta jos kirjoitat mies Rand, saat sivun, joka kertoo kaiken randia. Se antaa sinulle, mitä se tekee, parametrit se vie, sekä palata tyyppi ja lyhyt kuvaus mainittu toiminto. Joten tutustu randia. Se voi olla hieman monisanainen ja sekava, joten joskus huomaan, että yksinkertaisesti Googling mitä haluan tietää on paras tapa löytää vastauksen. Joten käytännössä Google. Saada hyvä Google. Se tulee paras ystäväsi. Sekä Google, jos et löydä sitä Google, cs50.net/discuss, se on keskustelufoorumi. Mahdollisuudet ovat, jos sinulla on kysymys, yksi teidän 700 + ikäisensä on myös, että kysymys ja ehkä kysynyt se jo keskustella foorumeilla ja on se vastasi. Joten jos sinulla on yleinen kysymys tai sinulla on kysymys, että luulet ehkä muut ihmiset ovat saattaneet törmätä, tutustu cs50.net/discuss. Lopuksi, kaksi viimeistä, jos haluat puhua todellinen ihminen, toimisto tuntia maanantaista perjantaihin. Mukana on myös online-virka Laajennuksen opiskelijoille. Ja viimeisenä mutta ei vähäisimpänä, Minulle huutomerkki. Teillä kaikilla on omat yhteystiedot. Jos tarvitset jotain, ota koskaan epäröi ottaa minuun yhteyttä. Aina voit vapaasti tehdä niin. Hyvin harvat olet lisännyt minut Gchat, niin, että on ollut pettymys, mutta toivottavasti se tulee vaihtaa Tässä ja seuraavassa jaksossa. Kaikki kysymykset toistaiseksi resursseja? Suuri. Vielä yksi liitin palautetta, sayat.me/cs50. Voit antaa minulle palautetta anonyymisti miten teen. Se oli todella hyödyllinen viime viikolla. Sain pari kommentteja te heti kohta, plus alkaen muut opiskelijat, jotka katselivat sitä viikolla, ja se oli uskomattoman hyödyllinen. Aion yrittää rajoittaa minun käyttöä sana "makea", mutta minä näytän minun innostusta ja jännitystä muilla tavoin. Mutta oli muita ylimääräisiä aineellisen palautteita, sekä plussia ja delta. Joten, annan teille palautetta teidän ongelma sarjaa. Voit vapaasti antaa minulle palautetta minun opetusta. Olen täällä teitä. Suuri. Se on kaikki, mitä minulla varten ensimmäisen osan kanssa. Onko kellään mitään kysymystä toistaiseksi? Ja minulla on merkinnän ohjauskeskuksesta. Laajennus opiskelijat ovat messaged minut sanoen he eivät saa mitään ääntä, mutta se on pois minun valta vahvistaa. Joten toivottavasti, että saa ratkaistaan ​​pian. Jos katselet verkossa, hi, mutta et kuule minua. Ensin aiomme käydä läpi GDB. GDB, kuten olen vihjannut aiemmin, on testausvälineen paljon parempi kuin printf. Joten päästä alkuun GDB, kaverit, jos haluat avata laitteesi ja ottaa tiedoston, että olen lähetetään sinulle aiemmin - tämä tiedosto on myös saatavilla verkossa vähän - ja ajaa GDB. / tiedoston nimi. Ensimmäinen, tietenkin, sinun täytyy koota tiedostoa, koska GDB toimii vain ohjelmatiedostoja. Mutta jos joskus haluat aloittaa GDB, ensimmäinen asia, et, juokset GDB. / Caesar. Niin, että ohjelman nimi olemme aio mennä sen kanssa juuri nyt. Joten aion kirjoittaa tehdä Caesar, joka antaa minulle suoritettava tiedosto täällä merkitty vihreällä. Ja sitten aion ajaa GDB. / Cesar. Ja siellä mennään. Näet meillä on teksti kertoo minulle noin version GDB, antaa minulle Joissakin takuutiedot, ja sitten me on BKT kuiskata, joka näyttää tavallaan ja kuten meidän komentoriville, mutta näette se on auki kantatuote, GDB, lähellä paren. Ennen kuin jatkamme ja debug tätä kuvaa että olen lähettänyt teille kaikille, katsotaanpa joitakin hyödyllisiä komentoja joten meillä on mielessä mitä aiomme kattaa. Nämä komennot on lueteltu täällä järjestystä, jossa en yleensä käytä niitä. Joten aloitan ohjelman käynnissä GBD. / Ohjelman nimi, tässä tapauksessa, Caesar. Ja sitten ensimmäinen asia, en 99,9% ajasta on tyypin break tarkoittaa. Joka asettaa taitekohta kohdallaan. Pohjimmiltaan, mitä teet siellä on ohjelma tulee pysähtyä Tärkein joten voit alkaa tutkia sitä linjaa riviltä, ​​sen sijaan käynnissä koko läpi. Voit rikkoa eri kohdissa koodia, mutta tärkein on yleensä hyvä paikka aloittaa. Seuraava käsky Juoksen on ajaa. Joka alkaa ohjelma käynnissä, ja jos haluat syöttää komentoriville argumentteja, voit suorittaa sen komennon. Juokse argumentteja. Joten koska olemme menossa yli versio C, joka on ohjelman te kirjoitti PSET kaksi - tämä tietenkin on joitakin bugeja siinä, että toivottavasti löydämme - aiomme ajaa ajaa joitain komentoja argumentteja koska Caesar, kuten te tiedätte per ongelma asettaa spec, vie jonkin komentoriviargumentteja. Seuraavien parin komentoja, seuraava yksi on todella kutsutaan seuraavaksi. Tuo vie rivi riviltä joko ohjelman. Joten lyömällä n paina Enter vie seuraavalle riville, täytäntöönpanosta edellisen rivin. Vaihe ei vain vie seuraavalle riville, mutta se vie sinut sisälle toimintoja. Joten jos olet kirjoittanut toiminto koodi tai jos haluat tutustua i, esimerkiksi voit lyödä s, ja sijaan menee seuraavalle riville tiedosto, että olet menossa läpi juuri nyt sinun todella astua tämä toiminto ja nähdä sen koodin. Lista näyttää, erittäin käyttäjäystävällinen muodossa, 10 tai niin ympärille viivat jolla parhaillaan olet koodissa joten voit itse nähdä tiedosto eikä tarvitse vaihtaa takaisin ja esiin eri näkemyksiä. Tulosta on kuin printf, kuten sen nimikin kertoo. Joka näyttää mitä muuttuja vastaa. Info paikalliset on todella hyödyllinen. Tämä on erityinen versio tulosta. Info paikalliset näyttää kaikki paikalliset muuttujia, tulostaa ne kaikki pois sinulle , jotka ovat tällä hetkellä saatavilla. Joten en yleensä, eikä tarvitse tulostaa neljä muuttujaa, että olen utelias jos olen silmukka varten Esimerkiksi minä vain kirjoitan info paikalliset, ja se tulee näyttämään minulle, mitä minun counter i vastaa sekä array että olen työskentelevät tasavertaisina. Lopuksi, jatka. Kirjoitustauko pysäyttää sinut klo taitekohta. Voit käydä läpi rivi mukaisesti seuraava ja askel. Jatka kulkee ohjelman seuraavan rikkoa piste tai loppuun saakka, jos ei ole enää taitepisteissä. Poista poistaa tauko pistettä, jos päätti tauko tärkein oli sopimatonta, haluatko asettaa sen jonnekin muualle. Ja lopuksi q, lopettaa, joutuu pois GDB. Joten tämä ohjelma,. / Caesar, aiomme käydä läpi juuri nyt, ja me aiot käyttää GDB löytää vikoja tässä ohjelmassa. Juoksin tämän ohjelman aikaisemmin Tarkista 50, ja sain yhden paheksua. Kaikki se oli olemassa, se kootaan, se kulunut paljon testejä, mutta Jostain syystä se ei läpäissyt viides testi, kääntämällä BARFOO, kaikki lippikset, osaksi E-D-U-I-R-R, isoilla kirjaimilla, käyttämällä kolmea keskeisenä. Sain melko lähellä. Sain pois yhden kirjaimen. Joten on joitakin pieni virhe täällä. Olen käynyt läpi minun koodi. En voinut tajuta se. Toivottavasti te auttaa minua selvittää, mitä tämä bugi on. Niin, että virhe olemme etsivät. Katsotaanpa siirtyä GDB. Jälleen olen ajaa GDB. / Caesar, joten nyt olemme GDB. Ja mikä on ensimmäinen asia, joka minun pitäisi tehdä? Olen juuri tullut GDB. Joku antaa minulle hyvän komento syöttää. Opiskelija: Tauko tärkein. JASON HIRSCHHORN: Tauko tärkein. Fantastic. Katsotaanpa kirjoittamiseksi sisään Te voi katsella täällä tai seurata pitkin tietokoneisiin. Rikkoa tärkein, ja näet taitekohta oli asetettu - se antaa minulle outoja muisti osoite, ja se myös antaa minulle rivinumero. Jos minun pitäisi muistella tämän tiedoston, Haluaisin ymmärtää, että tärkeimmät tapahtui linja 21. Mitä minun pitäisi ajaa seuraavaksi? Onko minun ohjelma käynnissä? Ei. Joten mitä minun pitäisi ajaa seuraavaksi? Opiskelija: Run. JASON HIRSCHHORN: Run. Pitäisikö minun vain ajaa ajaa, vai pitäisikö Lisään joitakin muita asioita? Opiskelija: Juokse väitettä. JASON HIRSCHHORN: Juokse komennon argumentteja. Ja koska olen virheenkorjaus hyvin erityinen tapauksessa minun pitäisi tulla, että komentorivillä. Niin minä loppuvat kolme, joka on jälleen lähtö sain Tarkista 50. Alkaen ohjelma. Käymme läpi pari riviä. Sinun nyt nähdä, että olemme verkossa 21. Mistä tiedän, että olemme linja 21? Koska jos katsotte vasemmalle minun pääteikkunaa siellä se sanoo linja 21. Ja se antaa minulle, itse asiassa, koodi, joka on linjalla 21. Joten en misspoke aiemmin. Tärkein ei oikeastaan ​​rivillä 21. Tärkein on pari riviä edellä 21. Mutta linja 21, joka on minne olemme rikkomatta. Tämä rivi koodia on ei ole vielä toteutettu. Se on tärkeää. Line näet ei ole toteutettu vielä. Se on seuraava rivi koodia olet aikeissa toteuttaa. Joten seuraavalle riville, sillä te olette varmasti tuttuja, on tämä ehto tarkistaa, onko minulla tuli komentorivillä. Ja i, mikä on toiseksi osa sitä tekee? Mikä on i? Opiskelija: muuttaminen sen kokonaisluku. JASON HIRSCHHORN: Anteeksi? Opiskelija: Se muuttuu argumentti kokonaisluku. JASON HIRSCHHORN: So i muuttuu arg V1 alkaen merkkijono kokonaisluku. Ja sitten mitä se tarkistaa? Opiskelija: Jos on toinen Komentoriviargumentti, syrjään alkaen ohjelman ajamista. JASON HIRSCHHORN: Ja mitä toinen puoli tämän Boolen lauseke tarkistaa? Tämä osa tänne, i? Opiskelija: Jos se on negatiivinen. JASON HIRSCHHORN: Making varma mitä? Opiskelija: Making varma, että se on itse asiassa positiivinen. JASON HIRSCHHORN: Aivan. Tämä on tarkistaa, jos se on negatiivinen, ja jos se on negatiivinen, I on tunne seuraavalle riville mahti saa minut huutaa käyttäjä. Joten osuma loppuun suorittamaan tätä linjaa. Emme näe, että linja, että te ehkä odottivat näkevänsä huutaa käyttäjän ja palaavat sitten, koska tämä linja ei suorita. Olen tullut 3. Joten en itse asiassa syöttää kaksi komento argumentteja, ja 3 on suurempi kuin nolla. Joten näimme, että linja, toteutimme, mutta emme astu sisällä jos ehto. Joten nyt seuraavaksi, näen Asetan int avain vastaa i arg v1. Tämä on siis minun luo muuttujan näppäintä. Jos siis tulostaa avaimen juuri nyt, koska jonka avulla voit nähdä arvo sisällä muuttuja, avain vastaa 47. Outoa, mutta tietenkin, että koska en ole toteuttaisi linja vielä. Joten nyt jos osuin n, suorita, että linja, ja tehdä tulosta avain, avain on sama 3, joka on mitä odotamme sen equal. Joten jälleen, vuonna GDB, rivin Nähdään ole toteutettu vielä. Sinun täytyy lyödä n tai s tai numero muita komentoja tosiasiallisesti suorittaa että linja. Tulosta näppäintä. Key: n 3. Toistaiseksi niin hyvä. Merkkijono on pelkkää tekstiä. Katsotaanpa suorittaa että linja. Saan merkkijonon käyttäjä. Katsotaanpa minun Tarkista 50, I Kirjoita BARFOO kaikki korkit, joten sitähän minä kirjoita. Jos minä nyt tulostaa tekstimuodossa. Näet se vastaa merkkijono. Se antaa minulle joitakin muita outoja heksadesimaali numero, mutta se tekee Itse asiassa sanoa, että merkkijono on BARFOO. Jos halusin nähdä, mitä näppäintä vastasi kello Tässä vaiheessa, miten voisin tarkistaa avain? Opiskelija: Print-näppäintä. JASON HIRSCHHORN: tulostus-näppäin, tarkalleen. Ja oikeastaan ​​siellä on oikotie. Jos kyllästyt kirjoittamisen tulosta, voit vain kirjoittaa s.. Joten p-näppäintä tekee täsmälleen sama asia. Ja vielä, näen se vastaa 3. Jos halusin selvittää, mitä molemmat keskeisiä ja BARFOO vastasi samalla mutta olin väsynyt kirjoittamalla kunkin yksi yksin, minä voisi komennoilla info paikallisia. Joka antaa minulle avain tasavertaisten 3. Pelkkä teksti on yhtä BARFOO. Se antaa myös minulle nämä kaksi outoja asioita yläosassa, tämän muuttujan i ja Tämän muuttujan n. Nämä ovat todella olemassa olevia minun pääohjelma. Emme ole kohdanneet niitä vielä, mutta esikatselu, nämä olemassa minun silmukka. Joten nyt, nämä olla outoja numerot, koska ne eivät ole olleet alustettu vielä, mutta ne ovat edelleen olemassa muistiin, joten he vain asettaa Joidenkin roskat arvoa. Mutta emme näe avain tavallinen tekstiksi oikeassa. Joten aion toteuttaa tätä linjaa, linja 34, silmukka. Aiomme hypätä silmukka lyömällä n. Ja me olemme sisällä silmukka. Olemme meidän ensimmäinen tarkastus. Ja vielä, nämä pitäisi tavallaan näyttää tutulta, koska tämä oli Caesar-ohjelma, joka oli kirjoitettu, mutta uudelleen, on jonkinlainen vika. Ja nyt jos en tee info paikalliset, koska olen sisällä että silmukka, näet että i on nolla, koska odotamme. Sitähän me asettaa sen ja alustaa se on silmukka. n on 6. Tämä on myös järkevää, koska asetimme se strlen tekstimuodossa. Joten haluan tehdä info paikalliset tai tulostaa muuttujaan usein varmistaa, että kaikki on aina mitä Odotan sen equal. Tässä tapauksessa kaikki on mitä odotan sen equal. Joten aloitetaan liikkuvat läpi Tämän silmukan. Line Olen on line 36, jos tavallinen teksti i suurempi kuin ja tavallinen teksti i on pienempi tai yhtä suuri kuin z. Tiedän ongelma ei ole minun ensimmäinen kirjeellä, että se on mukana toinen kirjain. Jos me katsomme taaksepäin Tarkista 50, B menee E hieno. Otan ja jättää sen , ei muuta sitä D. So jotain vikaa toinen kirjain. Joten aion siirtyä siellä toisessa. Mutta jos en halua tarkistaa, mitä tavallinen teksti I vastasi tässä nimenomaisessa tapauksessa mielestäni sen pitäisi olla mitä? Mitä pitäisi tekstimuodossa rinnallesi tässä ensimmäisellä kierroksella läpi silmukka? Opiskelija: Zero? JASON HIRSCHHORN: Pelkkä teksti I? Niin se olisi pääoman B. I, tietenkin, nolla, mutta tekstimuodossa kiinnike nolla suljettu kiinnike vastaa B koska jouset, kuten näimme viime viikolla, ovat array, joten olemme pääsemässä Ensimmäinen merkki tästä. Joten jälleen, jos olen tulostaa tekstimuodossa Minä en itse asiassa saada merkin B. Ja se on siisti, eikö? Minulla ei oikeastaan ​​ole pelkkää tekstiä I. Se ei ole yksi muuttujista otan tai alustettu, mutta voit tulostaa ulos koko joukko asioita jos haluat. Mutta katsotaanpa liikkua. Jos tavallinen teksti I on suurempi kuin ja plain text I on pienempi tai yhtä suuri kuin Z, joka selvästi on totta, koska meillä on pääoma B. aion juosta joitain komentoja sitä. Näimme, että matematiikka viime viikolla, niin me itsestään selvänä, että se toimii oikeus mukaan Check 50. Nämä aaltosulkeita, ensimmäinen osoitti, että olin jännittävää, jos kunnossa, toinen näytti että olen poistuminen silmukka. Ja nyt kun lyön Seuraavaksi näemme olemme takaisin silmukka uudelleen. Menemme läpi silmukka uudelleen. Katsotaanpa todella astua toisen iterointia silmukan ja tyyppi info paikallisia. Joten olemme toisen iteroinnin meidän silmukan. I on 1, jota odotamme. N on yhtä kuin 6, jota odotamme. Key vastaa 3, jota odotamme. Ja pelkkää tekstiä, näet, vastaa EARFOO nyt ei BARFOO enää, koska edellisessä iteraation B oli muuttui pääoman E. Joten aiomme kohdata ongelma, joten tämä on, jos aiomme sukeltaa virheenkorjaus. Mutta ei kukaan ole kysyttävää siitä, mitä olemme tehneet tähän mennessä? Fantastic. Joten olemme aikeissa toteuttaa tätä, jos ehto, tavallinen teksti kiinnike suljin kiinnike yli ja teksti I pienempi kuin tai yhtä suuri kuin Z. Mutta ennen Menen tuohon, koska siellä Tiedän virhe on, haluan huomauttaa ulos tekstimuodossa I. So laitetaan tulostaa. Se tekee yhtä suuri hahmo, jotta tuntuu Toistaiseksi kaikki on hyvin ja hyvä. Odotan tätä linjaa kohti minun logiikkaa, tämä linja olisi totta. Se on iso kirjain. Mutta jos osuin n, ymmärrämme, että tämä line, itse asiassa, ei suorita. Hyppäsin alas if. Miksi näin kävi? Opiskelija: Koska sinulla on kunnossa pelkkää tekstiä on suurempi kuin, ole sama tai suurempi kuin. JASON HIRSCHHORN: Joten minulla oli pelkkää tekstiä I on suurempi kuin A, joka ei ole suurempi tai yhtä suuri kuin. Niin selvästi, pääoma ei laukaista jos ehto, ja teimme astua sitä, ja teimme ei tehdä tarvittavat muutos. Joten se siitä, itse asiassa. En tajunnut minun vika. Voisin mennä takaisin minun lähdetiedoston muuttaa sitä, ja päivittää sitä ja tarkista Tarkista 50 uudelleen. Mutta saa nähdä, vain pedagogiikan n vuoksi, jos en jatka. If ei suorita myöskään, mutta mikä sen sijaan on sama on komento , joka ei muutu. Joten se ei ole muuttunut lainkaan, ja jos minä tulostaa pelkkää tekstiä täällä, näemme menossa kautta, että silmukka ei, itse asiassa, muuttaa, että toinen merkki ollenkaan. Se on edelleen pääoman A. Joten jälleen olemme debugged meidän virhe. Huomasimme, että oli jotain logiikkaa puuttuu. Ja me debugged etuajassa ennen tosiasiassa ajetaan että linja, mutta sinun olisi huomannut, jos olisimme vain osuma Seuraava ja hyppää että if, se tarkoittaa, että jos ehto ei ollut totta. Emme itse asiassa saada tulos odotimme. Joten meidän on voinut olla, oli meillä ei ollut niin viisas, katsomaan että jos ehto, ja tarkistaa, onko itse asiassa tilamme olisi arvioitava, totta nykyisessä tilanteessa. Siinä kaikki virheenkorjaus tätä ohjelmaa. Onko kellään mitään kysyttävää? Mitä komento voi osuin lopettaa GDB? Q. Ja sitten minä kysytään, lopeta joka tapauksessa? Kyllä tai ei. Lyön kyllä, ja minä on lopettanut GDB. Joten se oli nopea pohjamaali GDB. Oikeastaan, todellinen skenaario, Tein tämän toimistossa tuntia. Olen GDBed juuri tämän ohjelman virka opiskelijan kanssa. Ja jos palaamme komentoja näimme ennen, käytimme tauko tärkein, ensimmäinen asia teimme. Käytimme ajaa komentoriviargumentteja, Toinen asia teimme. Käytimme vieressä paljon liikkua meidät läpi linjojen. Ja vielä, lyhyt versio Seuraavan on n. Se on suluissa harmaalla liukumäki. Emme käyttäneet vaiheessa, mutta emme välttämättä tarvitse tässä tapauksessa. Mutta voisimme käyttää sitä hieman myöhemmin tänään jos me virheenkorjaus varten Esimerkiksi binäärihaku kun binary haku kutsutaan erilliseen toiminto mutta on jokin virhe sen kanssa. Aiomme halua astua puhelun binäärihaku ja todella debug sitä. Listaa emme käyttäneet joko siksi meillä oli hyvä tunne meidän koodi, mutta jos ei haluat saada tunteen siitä, mitä code oli noin, voisin vain käyttää luetteloa. Tulosta käytimme, info paikalliset käytimme. Jatka emme tarvitse käyttää tässä tapauksessa ei ollut meidän täytyy käyttää poistaa, mutta teimme käytön lopettaa. Nämäkin 10 komentoja, käytännössä niitä. Jos et ymmärrä näitä 10 komentoja, sinun tulisi asettaa debug tahansa ongelma GDB. Joten olemme lähdössä, jälleen, ydin jakso tänään, menee yli Näiden lajittelu ja etsiminen algoritmeja. Ennen kuin teemme niin, taas kysyttävää, kommentteja, huolenaiheita GDB? Niin on jokainen aio käyttää GDB sijaan printf? Joten kaikille, sillä ikuisesti tähden, jokainen nyökkää päätään oikealle nyt, joten minä näen teidät toimistossa tuntia ja kaikki TF: iä näkevät sinut ja he sanovat, näytä minulle, kuinka käyttää GDB, ja voit näyttää heille, eikö? Tavallaan? Ehkä toivottavasti. Cool. Joten aiomme siirtyä lajittelu ja etsiminen. Näet Minulla on lista jo lajiteltu meille, mutta joka ei aio olevan näin aina. Joten ongelma asettaa eritelmän ongelma asettaa kolme, sinulla on shortsit että voit katsella, ja se todella pyytää sinua katsomaan näitä shortsit. Myös luento viime viikolla, menimme paljon näitä algoritmeja, joten olen aio viettää aikaa luokassa menossa yli nämä algoritmit uudelleen tai piirustus kuvia, miten nämä algoritmit. Tämäkin tieto voit uudelleen katsella luento, tai että tiedot vangitaan erinomaisesti päälle shortsit Nämä haut, kaikki jotka ovat saatavilla cs50.net. Joten sen sijaan, mitä aiomme vain kirjoittaa näitä ohjelmia. Meillä on tunne, mentaalinen malli, miten ne toimivat, ja niin mitä aiomme vain koodata niitä todellisia. Aiomme tehdä tästä mentaalinen malli, että kuva, jos tulee, tulee Varsinainen koodi. Ja jos olisit hieman sekava tai utuinen on mielikuvaan, olen täysin ymmärtää. Emme aio tehdä sitä hypätä koodin heti. Joten vaikka tämä kehote tässä slide kysyy voit koodata binäärihaku, ja Oikeastaan ​​iteratiivinen versio binäärihaku, ensimmäinen asia, todella haluavat sinun tekevän on kirjoittaa joitakin pseudokoodina. Joten sinulla on tämä mentaalinen malli miten binäärihaku toimii. Ota paperiarkki, jos sinulla on yksi helposti saatavilla, tai avata tekstieditori, ja haluaisin kaikki voivat kirjoittaa. Kestää neljä minuuttia kirjoittaa pseudokoodi binäärihaku. Jälleen ajatella, että mentaalinen malli. Tulen noin, jos sinulla on kysyttävää ja voimme tehdä kuvan ulos. Mutta ensin, ennen kuin aloitamme ohjelmointi, Haluaisin kirjoittaa pseudokoodi binäärihaku niin kun me sukeltaa, meillä on joitakin suuntaan missä meidän pitäisi suunnata. Opiskelija: Voimmeko olettaa joukko arvot saamme jo järjestetty? JASON HIRSCHHORN: Joten binäärihaku töihin - erinomainen kysymys - olet on ryhdyttävä lajitellun arvomatriisin. Joten olettaa se toimii. Menemme takaisin tämän dian. Näet violetti toiminto ilmoitus on bool binary_search int arvo, int arvot, int n. Tämä pitäisi näyttää tutulta, jos olet jo lähestynyt tai saanut oman kädet likainen ongelma asetettu. Mutta se on teidän toiminnon ilmoituksen. Jälleen, ei pitäisi tarvita pelätä että paljon tällä hetkellä. Mitä todella haluan sinun tekevän on otettava neljä minuuttia pseudokoodina binary etsiä, ja sitten menemme yli, että ryhmänä. Ja minä tulen ympärille. Jos sinulla on kysyttävää, ota vapaasti nostamaan käden. Miksi et ota kaksi minuuttia loppuun asti pseudokoodina? Tiedän, että tämä saattaa tuntua naurettavalta, että vietämme niin paljon aikaa jotain, joka ei ole edes oikeastaan C, mutta erityisesti tähän lisää haastava algoritmit ja ongelma asetetaan, että meidän täytyy selvittää, alkaen pseudokoodilla ei huolta noin syntaksi, vain murehtia logiikka, on uskomattoman hyödyllinen. Ja näin, et ole ratkaista kahden uskomattoman vaikeaa ongelmat kerralla. Olet vain keskittymällä logiikkaa, ja niin voit siirtyä syntaksin. OK. Aloitetaan läpi pseudokoodina. Olen kirjoittanut tänne, binary haku pseudokoodina. Me kirjoittaa tämä hallintoneuvostolle yhdessä. Tai minä kirjoitan sen ja annat minulle ohjeita tarvitsen. Joten voi joku antaa minulle ensimmäinen rivi pseudokoodina sinua kirjoitti binäärihaku? Kyllä, Annie? Opiskelija: Vaikka pituus luettelo on suurempi kuin nolla. JASON HIRSCHHORN: Vaikka pituus List suurempi kuin nolla. Ja vielä, näemme C-näköinen syntaktisia asioita täällä. Mutta suurin osa tästä on Englanti. Oliko kellään mitään linjaa he laittoivat ennen tätä heidän pseudo-koodi? Opiskelija: Hanki array on lajiteltu numeroita. JASON HIRSCHHORN: Kirjoitit "saada joukko Lajiteltujen numeroita. "Per toiminto ilmoituksen, me voidaan ohimennen joukko lajiteltu numeroita. Opiskelija: [kuultavissa]. JASON HIRSCHHORN: So meillä on, että. Mutta kyllä, jos meillä ei ole, että me olisi lajitella meidän valikoimaan numeroita, koska binäärihaku toimii vain lajiteltu taulukot. Joten vaikka pituus lista on nolla, olen aikoo laittaa joissakin aaltosulkeita jotta se näyttää hieman enemmän kuin C. Mutta kun näyttää kuvautuvat while-silmukka, joten sisälle taas loop mitä meidän tehdä binäärihaku? Joku muu, joka ei ole antanut minulle vastata vielä, mutta joka kirjoitti tämän? Opiskelija: Mene listan keskeltä. JASON HIRSCHHORN: Tom. Mene listan keskeltä. Ja jatkokysymys, mitä teemme, kun me olemme listan keskeltä? Opiskelija: Älä tarkista onko se numero etsit. JASON HIRSCHHORN: Erinomainen. Mene keskelle ja tarkista jos meidän arvo on siellä - fantastinen. Oliko kellään mitään muuta joka oli erilainen kuin tämä? Se on aivan oikein. Ensimmäinen asia teemme binäärihaku on mennä keskelle luettelosta ja tarkista, onko meidän arvo on siellä. Joten oletan, jos meidän arvo on siellä, mitä me teemme? Opiskelija: Palaamme nolla [kuultavissa]. JASON HIRSCHHORN: Joo, jos meidän arvo on olemassa, löysimme sen. Joten voimme kertoa jonkin verran, mutta tämä toiminto on määritelty, kerromme käyttäjä löysimme sen. Jos se ei ole siellä, vaikka, se on jos tämä saa mutkikkaampi. Joten jos se ei ole siellä, joku muu, joka työskenteli binäärihaku tai on idea nyt, mitä me teemme? Opiskelija: Kysymys. JASON HIRSCHHORN: Niin? Opiskelija: Onko array jo järjestetty? JASON HIRSCHHORN: Kyllä, oletamme array on jo järjestetty. Opiskelija: Joten sitten sinun täytyy tarkistaa, jos arvo, jonka näet on suurempi kuin arvo, jonka haluat, voit siirtää keskelle toinen puoli. JASON HIRSCHHORN: Eli jos keskellä lista on suurempi kuin mitä olemme etsit, niin me teemme mitä? Siirrymme missä? Opiskelija: Haluat siirtyä puoliskon kanssa alemmat kuin. JASON HIRSCHHORN: niin me soittaa että vasemmalle. Joten jos keskimmäinen on suurempi, voimme etsiä vasen puoli luettelosta. Ja sitten etsiä, mitä minä tarkoitan haku? Opiskelija: [kuultavissa]. JASON HIRSCHHORN: Menemme keskelle. Me itse asiassa toista tämä asia. Palaamme kautta kun silmukka. Annan sinulle viimeinen - muuta, jos keskimmäinen on vähemmän kuin mitä teemme, mitä me teemme täällä? Opiskelija: Mene oikealle. JASON HIRSCHHORN: Etsi oikea. Tämä näyttää hyvältä, mutta ei kukaan ole mitään, että meillä saattaa puuttua tai mitään muuta, että laitat teidän pseudo-koodi? Joten tämä on mitä meillä on tähän mennessä. Kun taas listan pituus on suurempi kuin nolla, aiomme mennä keskelle luettelosta ja tarkistaa, jos meidän arvo on siellä. Jos keskimmäinen on suurempi, aiomme etsi vasemmalle, muuta, jos keskellä on vähemmän, aiomme etsiä oikea. Joten olemme kaikki oli jonkin verran perehtyneisyyttä termejä käytämme tietotekniikassa ja työkaluja meillä. Mutta voit jo huomata olimme puhuu Englanti, mutta löysimme paljon asioita, jotka näyttivät kartta kiinni työkaluja meillä on koodaus työkalusarja. Joten suoralta kädeltä, emme ole menossa todella koodia vielä. Mitä näemme täällä Englanti, että kartat edelleen asioita, joita voimme kirjoittaa C? Opiskelija: Vaikka. JASON HIRSCHHORN: Vaikka. Joten tämä taas täällä karttoja mitä? Opiskelija: kun silmukka. JASON HIRSCHHORN: kun silmukka? Tai luultavasti yleisemmin silmukka. Haluamme tehdä jotain uudestaan ​​ja uudestaan. Menemme siis koodata silmukka. Ja tiedämme jo, koska olemme tehneet tämä pari kertaa, ja me on runsaasti esimerkkejä siellä, miten itse kirjoittaa tämä indeksi silmukka. Niin että pitäisi olla aika helppoa. Meidän pitäisi pystyä saamaan, että alkoi melko nopeasti. Mitä muuta me näemme täällä? Mitä muita rakenteita syntaxes asiat että olemme tuttuja C, me jo tunne Based pois sanoja käytimme? Kyllä, Anna? [Äänetön] vain leikkiä. Anna, mennä eteenpäin. Opiskelija: Jos ja muuta. JASON HIRSCHHORN: Jos ja muu - täällä. Niin mitä nuo näyttää? Opiskelija: jos muu selvitys. JASON HIRSCHHORN: Joo, olosuhteet, eikö? Joten meidän täytyy luultavasti kirjoittaa joitakin ehtoja. Ja vielä, vaikka ehkä sekava Ensimmäinen, meillä on yleensä mielessä nyt miten kirjoittaa edellytyksiä ja syntaksi olosuhteissa. Ja jos emme, me vain etsiä syntaksi olosuhteissa, leikkaa ja liimaa että, koska tiedämme tarvitsevat kunnossa täällä. Muita asioita, näemme, että kartta päälle asioita ehkä tehdä C? Joo, Aleha? Opiskelija: Tämä voi olla itsestään selvää, vain tarkistaa, jos arvo on jotain. JASON HIRSCHHORN: Miten siis tarkistaa ja - niin mene listan keskeltä ja katso jos meidän arvo on siellä? Miten me sen teemme C? Mikä syntaksin? Opiskelija: Yhtä, tasavertaisina. JASON HIRSCHHORN: Yhtä, tasavertaisina. Joten tämä tarkastus on todennäköisesti menossa olla tasavertaisia, vastaa. Joten me tiedämme, me tarvitsemme jonnekin. Ja oikeastaan ​​vain kirjallisesti sitä, näemme nämä muut asiat. Aiomme täytyy tehdä joitakin vertailuoperaattoreita siellä - fantastinen. Joten se todella näyttää, ja heitä suuri, emme ole kirjoitettu sana C-koodia vielä. Mutta saimme mielikuvaan alas kautta luentoja ja näiden shortsit. Kirjoitimme pseudo-koodi ryhmänä. Ja jo, meillä on 80%, jos ei 90% siitä, mitä meidän täytyy tehdä. Nyt meidän täytyy vain koodata se, mikä taas on ei-triviaali ongelma ratkaista. Mutta ainakin olemme jumissa logiikkaa. Ainakin nyt kun menemme virka, Voin sanoa, tiedän mitä tarvitsen tehdä, mutta voitko muistuttaa minua syntaksin? Tai vaikka virka ovat täynnä, voit Voiko Google for syntaksin pikemminkin kuin olla jumissa logiikkaa. Ja vielä, eikä yrittää ratkaista logiikan ja syntaksin ongelmia kaikki kerralla, se on usein paljon parempi rikkoa näiden kahden kovia ongelmia pois osaksi kaksi helpommin hallittavissa niitä ja tehdä pseudo-koodi ensin ja sitten koodi C. Joten katsotaanpas mitä tein pseudo-koodi etuajassa. Kun taas listan pituus on suurempi kuin nolla, katso keskellä luettelon. Jos numero löytyi palasi totta, muuta jos numero on suurempi, haku vasemmalle. If määrä pienemmäksi, haku oikea, return false. Niin että näyttää lähes sama, jos ei lähes identtinen mitä kirjoitti. Oikeastaan, Tom, mitä sanoitte ensin, rikkomatta listan keskeltä, ja jos numero löytyi kahteen lausuntoja on oikeastaan ​​mitä tein. Yhdistin niitä siellä. Minun olisi pitänyt kuunnella olet ensimmäistä kertaa. Niin, että on pseudo-koodi meillä on. Jos haluat nyt, anteeksi, mene Takaisin meidän alkuperäiseen ongelmaan. Katsotaanpa koodi binary.c. Joten toteuttaa iteratiivinen versio binäärihaku käyttäen seuraavia toiminto julkilausumaan. Ja sinun ei tarvitse kopioida se alas vielä. Olen todella aikoo avata jopa täällä binary.c. Joten siellä on toiminto ilmoitus keskellä näyttöä. Ja näet otin pseudo-koodi alkaen minun puolelta, mutta lähes sama mitä me kirjoitti, ja laittaa että sinulle. Joten nyt, sallikaa viisi minuuttia koodata tätä toimintoa. Ja vielä, jos sinulla on kysyttävää, nostamaan käden, haluaisin tietää, minä tullut noin. Opiskelija: [kuultavissa]. JASON HIRSCHHORN: Otin binary haku määritelmä alkuun, on line 12. Se mitä sain minun liukumäki. Ja sitten kaikki tämä pseudo-koodi Sain kopioida ja liittää liukumäki, pseudo-koodi liukumäki. En ole vielä kuulo [kuultavissa]. Joten jos olet lopettanut täytäntöönpanoa, haluan tarkistaa. Olen lähettänyt sinulle helpers.h tiedosto aiemmin tässä luokassa. Ja se on saatavilla verkossa samoin ladattavissa ihmisiä katsellen Tässä jaksossa aikaviivästetyt. Ja minä vain käyttää yleisiä jakelu koodi pset3. Joten otin find.C, käytän helpers.h tiedosto sijaan helpers.h tiedosto joka on annettu jakeluun koodin. Ja jouduin tekemään yhden muita muutoksia find.C sijaan soittaa vain yksinkertaisesti haku, soita binary_search. Joten jos haluat testata koodia, tietää, että tämä on, miten tehdä se. Itse asiassa, kun me voidaan käynnissä tämän koodin juuri nyt, olen juuri tehnyt kopion minun pset3 hakemistoon, taas, vaihdoin auttajia tiedostot ja sitten tehdään, että muuttaa find.C soittaa binary_search eikä vain etsiä. JASON HIRSCHHORN: Kyllä. Sinulla on kysymys? Opiskelija: Nevermind. JASON HIRSCHHORN: Ei hätää. No, katsotaanpa päästä alkuun. Me koodata tätä ryhmää. Yksi muu huomautus. Tämäkin on, voidaan helposti vaihtaa in Ongelma asettaa kolme. Minulla on helpers.h tiedosto, joka pikemminkin kuin helpers.h meille on annettu, julistaa binäärihaku, kupla lajitella ja valinta lajitella. Ja find.c huomaat verkossa, mitä se on, linja 68, kutsumme binary etsi sijasta hakua. Joten jälleen, koodi, joka on käytettävissä verkossa tai koodia, että olet nyt luomassa voidaan helposti vaihtaa in p asetettu 3 tarkistaa sen. Mutta ensin koodi binäärihaku. Meidän tehtävämme ilmoitus, palaamme bool. Otamme kokonaisluku nimeltään arvoa. Otamme joukko kokonaislukujen kutsutaan arvot, ja otamme n olla taulukon koko. Rivillä 10, täällä, minulla on terävä kuuluu stdbool.h. Tietääkö kukaan, miksi se on olemassa? Joten mitä Koodirivin tehdä? Opiskelija: Sen avulla voit käyttää bool palautuva. JASON HIRSCHHORN: Aivan. Opiskelija: Tai se kirjasto, jonka avulla käyttää bool palautuva. JASON HIRSCHHORN: Niin terävä kuuluu stdbool.h line antaa minulle määritelmiä ja ilmoitusten asioita että minulla on oikeus käyttää tätä kirjastoa. Joten joukossa on selvää, että siellä on Tämän tyyppinen kutsutaan bool, ja se voi olla tosi tai epätosi. Niin, että mitä se linja ei. Ja jos en ole, että linja, olisin joutua vaikeuksiin kirjoitan tätä sana täällä, bool, tuolla. Aivan oikein. Joten minun on, että tätä koodia. OK. Joten tämä taas on iteratiivinen versio, ei rekursiivinen. Olkaamme siis päästä alkuun. Aloitetaan tämän ensimmäisen line pseudokoodiesityksen. Ja toivottavasti me - tai ei toivottavasti. Aiomme mennä ympäri huonetta. Menemme rivi riviltä, ​​ja minä autan voit selvittää linja, että me tarvitsemme kirjoittaa ensin. Joten vaikka pituus lista on suurempi kuin nolla. Aloitetaan edessä. Mitä line minun pitäisi kirjoittaa täällä, koodi? Opiskelija: Vaikka suluissa n on suurempi kuin 0. JASON HIRSCHHORN: Vaikka n on suuri kuin 0. Joten n on koko lista, ja me tarkastamme, jos - [Interposing ÄÄNTÄ] JASON HIRSCHHORN: - Anteeksi? Opiskelija: Mistä tiedämme, että n on koko listan? JASON HIRSCHHORN: Anteeksi. Per PSET erittely, haku ja järjestämistoimintojen sinun täytyy kirjoittaa, n on koko listan. Unohdin selittää, että täällä. Mutta kyllä. n on koko lista, tässä tapauksessa. Joten kun n on suurempi kuin 0. OK. Jotka saattavat osoittautua hieman ongelmallista kuitenkin, jos asiat menevät päälle. Koska jatkamme tietää Koko luettelon koko tämän toiminto, mutta sanovat lähdetään jossa joukko 5 kokonaislukuja. Ja käymme läpi ja olemme nyt rajoittanut sen joukko 2 kokonaislukuja. Joka 2 kokonaislukuja on? Koko on 2 nyt, että haluamme katsoa, ​​mutta joka 2 on? Onko järkeä, että kysymys? OK. Kysyn uudestaan. Joten lähdetään tällä joukko 5 kokonaislukuja, ja n on 5, eikö? Me läpi täällä. me luultavasti muuttaa kokoa, oikea, koska asiat mennä. Joka on mitä me sanomme me haluamme tehdä. Emme halua etsiä koko juttu uudestaan. Joten sanoa muutamme sitä 2. Otamme puoli luettelo, joka on outoa. Joten vain poimia 2. Joten nyt n = 2. Pahoittelen huono kuiva poistaa markkereita. Oikea? Ja me hakuja lista jälleen listan koko 2. No, meidän joukko on edelleen koko 5. Sanomme vain haluamme etsi 2 paikkoja siinä. Joten mikä 2 täplät ovat ne? Onko järkeä? Ovatko ne jäljellä 2 paikkoja? Ovatko he oikeassa 2 paikkoja? Ovatko ne keskellä 2 paikkoja? Olemme jakaneet ongelma alas, mutta emme oikeastaan ​​tiedä, mikä osa ongelma olemme yhä katsot, vain ottaa nämä 2 muuttujia. Joten tarvitsemme hieman enemmän sitten, kun n on suurempi kuin 0. Meidän täytyy tietää, jos tämä n on meidän todellinen array. Joten ei kukaan ole muuttaa tätä linjaa? Suurin osa linja on täysin oikeassa. Onko toinen lisäksi? Voimmeko vaihtaa jotain ulos n- tekevät tätä linjaa vähän paremmin? Mm-hm? Opiskelija: Voitko alustaa muuttujan kuten pituus n, joka tulee sitten käyttää myöhemmin toiminto? JASON HIRSCHHORN: So alustaa vaihteleva pituus on n, ja käytämme myöhemmin? Mutta sitten me vain päivittää pituus ja me silti törmätä tähän ongelmaan, jos me leikata alas pituus meidän ongelmamme, mutta emme koskaan tiedä, missä oikeastaan että pituus kuvautuu. Opiskelija: Eikö se tule tapahtumaan myöhemmin, kun sanot, etsi vasemmalle, etsi oikea? Aiot mennä eri alueen oman - JASON HIRSCHHORN: Aiomme mennä alueelle, mutta mistä tiedämme jotka ovat mennä? Jos meillä on vain joukko ja tämän n, mistä tiedämme, mistä Siirry jono. Takana, kyllä? Opiskelija: Onko sinulla, kuten, alempi sidottu ja yläraja muuttuja tai jotain sellaista? JASON HIRSCHHORN: OK. Joten tämä on toinen ajatus. Sen sijaan vain pitää seurata koko, me seurata ala-ja yläraja muuttuja. Miten siis laskea koko maasta alaraja ja yläraja? [Interposing ÄÄNTÄ] JASON HIRSCHHORN: vähennyslaskua. Ja myös pitää kirjaa alemman sidottu ja yläraja kertoa meille, me etsivät nämä kaksi? Olemmeko etsivät nämä kaksi tänne? Olemmeko etsivät keskellä kaksi? Todennäköisesti ei keskellä kaksi, koska tämä itse asiassa on binäärihaku. Mutta nyt me voi saada kokoon, mutta myös rajat jono. Pohjimmiltaan, jos meillä on jättiläinen puhelinluettelosta, me repiä se kahtia. Tiedämme nyt, jos tämä pienempi puhelinluettelo on. Mutta emme ole itse repimässä puhelinluettelon kahtia. Tarvitsemme vielä tietää, missä uudet rajat meidän ongelma on. Onko kellään mitään kysyttävää siitä? Kyllä? Opiskelija: Olisiko se toimii luomalla muuttuja, i, että olet sitten vain siirtää asemaa i suhteessa sen nykyinen sijainti ja pituus, n? JASON HIRSCHHORN: Ja mitä on i? Opiskelija: Like i on kuin eräänlainen - Kuin olisit alustaa i olla keski-sijainnissa. Ja sitten, jos arvo asemassa i keskellä array todettu olla pienempi kuin tarvittava arvo, i nyt tulee pituus array, plus i: n arvo jaettuna 2. Kuten, katso, vaihdat i - JASON HIRSCHHORN: Oikea. Opiskelija: - jopa - JASON HIRSCHHORN: Olen siis melkein myönteistä, että toimii. Mutta kohta olento, tarvitset kaksi paloja tietoa täältä. Voit tehdä sen alkuun ja loppuun, tai voit tehdä sen koko ja Joissakin merkki. Mutta sinun täytyy kaksi kappaletta Tietojen täällä. Et voi tulla toimeen vain yksi. Tarkoittaako tämä järkevää? Joten aiomme mennä läpi, ja aiomme tehdä [kuultavissa] ja luoda jonkinlaista markkereita. No mitä kirjoitat koodin? Opiskelija: Sanoin vain int sidottua yksi on yhtä suuri kuin 0. JASON HIRSCHHORN: Soitetaan että int alkaen. Opiskelija: OK. JASON HIRSCHHORN: Se tekee järkevämpää minulle. Ja? Opiskelija: Sanoin, luulisin, int päättyy. JASON HIRSCHHORN: int päättyy. Opiskelija: Luulen, n miinus 1, tai jotain sellaista. Kuten, viimeinen osa. JASON HIRSCHHORN: Niin kirjoitit, int alussa on 0, puolipiste, ja int päättymisaika on sama n miinus 1, puolipiste. Niin olennaisesti, mitä teemme Täältä 0 ensimmäisessä asennossa. Ja kuten tiedämme paneelit, ne eivät mene jopa n, he menevät jopa n. miinus 1. Joten meillä on joitakin rajoja meidän array. Ja nämä ensimmäiset rajat sattuvat olemaan alkuperäisen rajat meidän ongelmamme. OK. Niin että kuulostaa hyvältä. Sitten jos palaamme tähän linjaan, kun taas pituus lista on suurempi kuin 0, mitä sijasta n, tulisi me laittaa tänne? Opiskelija: Kirjoita päättyy miinus alussa. JASON HIRSCHHORN: Vaikka päättyy miinus alussa on suurempi kuin 0? OK. Ja voisimme, jos haluaisimme tehdä, että vähän mukavampaa, mitä muuta voisimme tehdä? Jos halusimme puhdistaa Tämän koodin jopa vähän? Miten voimme päästä eroon 0? Tämä on vain tyyli kysymys. Se on oikea juuri nyt. Opiskelija: Ending ei yhtä alusta? JASON HIRSCHHORN: Voimme tehdä mitä? [Interposing ÄÄNTÄ] Opiskelija: Lopettaminen on suurempi? JASON HIRSCHHORN: Joo. Voimme vain tehdä, kun päättyy on suurempi kuin alussa. Oikea. Lisäsimme alkaa toisella puolella siitä, ja pääsimme eroon 0. Joten tämä vain näyttää hieman puhtaampaa. OK. Joten, kun pituus lista on 0, kirjoitimme että vaikka loppu on suurempi kuin alussa. Aiomme laittaa meidän tarpeen aaltosulkeita, ja sitten ensimmäinen asia haluamme tehdä, on katsoa ne pikku luettelossa. You? Voitko antaa minulle - Opiskelija: Jos suluissa arvo hakasulkeen - JASON HIRSCHHORN: Jos suluissa arvo hakasulkeen. Opiskelija: Ending jaettuna 2. JASON HIRSCHHORN: Ending? Opiskelija: Näen ongelma - JASON HIRSCHHORN: OK. No, katsokaa keskellä. Mistä tiedämme, mitä keskellä on? Joo. Haluan siis poistaa kyseisen koodin. Mistä tiedämme, mitä keskellä on? Mihinkään, kun sinulla on alussa ja lopulta, miten löytää keskellä? Opiskelija: Sinä keskimäärin. Opiskelija: lisäät ne yhteen ja sitten - JASON HIRSCHHORN: Lisää ne yhteen ja sitten? Opiskelija: Ja sinä keskimäärin. Jaa se 2. JASON HIRSCHHORN: Lisää ne yhdessä ja jakaa 2. Joten int keski vastaa? Tom, voit antaa sen minulle? Opiskelija: Alku plus päättyy - JASON HIRSCHHORN: Beginning plus päättyy. Opiskelija: Kaikki, kiinnike, jaettuna 2. JASON HIRSCHHORN: Kaikki, suluissa, jaettuna 2. Niin että antaa minulle keskellä mitään, korjaa? Opiskelija: Tarvitset myös pyöristää sen. JASON HIRSCHHORN: Mitä Tarkoitan, minun täytyy pyöristää sen? [Interposing ÄÄNTÄ] Opiskelija: Koska jos se on outoa numero, niin se on kuin - JASON HIRSCHHORN: No okei. Niin voisin pyöristää sen. Mutta jos se on pariton luku, 5, voin ottaen 1 pois keskeltä. Tai jos se on parillinen määrä, vaan se on parempi asia. Jos se on 4, meillä on vain 4, voin ottaa ensimmäinen "keskellä", lainaus, lainaus tai Toinen "middle" yksi. Joko toimisi binäärihaku, joten en oikeastaan ​​tarvitse pyöristää sitä. Mutta on toinenkin asia I täytyy tarkastella tätä linjaa. Emme ehkä ymmärrä sitä vielä, mutta palaamme siihen. Koska tämä linja oikeastaan ​​vielä tarvitsee yhden asian. Mutta toistaiseksi olemme kirjoitettu neljä riviä koodia. Meillä meidän alusta ja päättyy markkereita. Meillä on while-silmukka, joka kartoittaa on suoraan meidän pseudokoodina. Etsimme keskeltä kartat suoraan meidän pseudokoodina. Sanoisin tähän menee keskelle luettelon, tämä rivi koodia. Ja sitten, kun menemme keskelle lista, seuraava asia, meidän täytyy tehdä on tarkistaa, jos meidän arvo on siellä pseudokoodina kirjoitimme aikaisemmin. Miten siis tarkistaa, jos meidän arvo on keskellä listan? You. Miksi et tee tätä? Opiskelija: Jos arvomme n on keskellä on yhtä suuri kuin mitä asetamme - Siis yhtä sama - JASON HIRSCHHORN: Se - OK. Opiskelija: En ole varma, mitä muuttuja etsimme sillä vaikka, johtuu siitä, - [Interposing ÄÄNTÄ] Opiskelija: [kuultavissa]. JASON HIRSCHHORN: Aivan. Per toiminto ilmoituksen, Etsimme arvo. Joten olemme etsivät arvo riviksi arvoja. Joten olet aivan oikeassa. Te teette, jos se on auki paren arvo kiinnike keskimmäinen suljettu kiinnike tasavertaisina vastaa arvoa, ja sisällä on mitä meidän täytyy tehdä? Jos meidän arvo on siellä, mitä meidän täytyy tehdä? [Interposing ÄÄNTÄ] Opiskelija: Return nolla. JASON HIRSCHHORN: Paluu totta. Opiskelija: Return totta. JASON HIRSCHHORN: Michael, mitä tämä linja tehdä? Opiskelija: [kuultavissa] ohjelma on juossut sen kurssin, ja se on ohi, ja olet mitä sinun tarvitsee tehdä? JASON HIRSCHHORN: ohjelma vai mitä? Tässä tapauksessa? Opiskelija: toiminto. JASON HIRSCHHORN: toiminto. Ja niin, palata mitä kutsutaan sitä ja antaa sille arvoa, totta. Aivan oikein. Main. Mikä on palautuva tärkeimpien, Michael? Opiskelija: int, kokonaisluku? JASON HIRSCHHORN: int, tarkalleen. Kokonaisluku. Se oli vain kysymys varmistaa te kaverit ovat olleet sen päälle. Mitä se yleensä palaa, jos kaikki asiat toimivat hyvin? Opiskelija: Zero. JASON HIRSCHHORN: Zero. Aivan oikein. Opiskelija: Jos tämä palaa aivan totta, ei ole mitään tietoja anneta mitä - Voi, tämä on vain sanomalla, että arvo on sisällä array. JASON HIRSCHHORN: Aivan. Tämä ohjelma ei ole antaa tietoa missä tarkalleen arvo on. Se vain sanoi, kyllä, löysimme sitä tai ei, emme löytäneet sitä. Joten jos numero löytyy, palauta totta. No, itse asiassa me vain teimme todella nopeasti, että yhtä riviä koodia. Joten Muutan että linja pseudokoodina. Opiskelija: Emmekö tarvitse muuttaa array? Sen pitäisi olla arvoja, ei arvoa, eikö? JASON HIRSCHHORN: Anteeksi. Kiitos. Opiskelija: Joo. JASON HIRSCHHORN: Tämä linja pitäisi olla arvot. Aivan oikein. OK. Joten teimme keskellä luettelosta. Jos numero löytyi return true. Jatketaan meidän pseudokoodina, jos Keskellä on suurempi, haku jäljellä. Joten jouduin tänne, jos numero korkeampi, haku jäljellä. Constantine, voit antaa Minulle tämä rivi koodia? Opiskelija: Jos arvo keski - JASON HIRSCHHORN: Joten jos arvo - jos se on auki paren arvot kiinnike keski loppusulkumerkki - OPISKELIJAN: On pienempi kuin arvo? JASON HIRSCHHORN: Onko alle. OPISKELIJAN: Alle arvo. JASON HIRSCHHORN: Arvo. No, itse asiassa, haluatko tarkista numero - Anteeksi. Tämä on hieman sekava. Mutta muuten jos numero Keskellä lista on suurempi. Opiskelija: Oh, OK. JASON HIRSCHHORN: Muutan että. Muuta, jos keskellä on korkeampi, me haluat etsiä vasemmalle, OK? Ja mitä me teemme sisällä Tämä jos ehto? Opiskelija: Voinko tehdä pieni muutos kunnossa, vaihda se if? JASON HIRSCHHORN: Entä onko? OK. Joten tämä koodi tulee suorittaa suunnilleen sama. Mutta Kiva juttu käyttämällä if, else jos, if tai jos muuten if, else tarkoittaa, että vain yksi niistä on menossa tarkistetaan, ei kaikki kolme, mahdollisesti. Ja se tekee hieman mukavampaa tietokoneella, joka on suorittaa ohjelma. Joten [? Constantine,?] olemme sisällä tätä linjaa, if arvot, kiinnike keskellä loppusulkumerkki on suurempi kuin arvo. Mitä meidän pitää tehdä? Meidän täytyy etsiä vasemmalle. Miten me sen teemme? Aion antaa sinulle alku. Meillä on nämä kaksi asiaa kutsutaan alkaa ja päättyy. Niin mitä täytyy tapahtua alkuun? Jos haluat etsiä vasemmalla lista, saamme nykyisen alussa. Mitä meidän täytyy tehdä se? Opiskelija: Asetimme alussa keski plus 1. JASON HIRSCHHORN: Joten jos olemme etsimällä vasen? Opiskelija: Anteeksi, keski miinus - niin loppu olisi keskellä miinus 1 ja alusta - JASON HIRSCHHORN: Ja mitä tapahtuu alussa? Opiskelija: Se pysyy samana. JASON HIRSCHHORN: So merkitys pysyy samana. Jos me etsit vasemmalle, olemme käyttäen samaa alusta - Aivan oikein. Ja päättyy? Anteeksi, mitä päättyy yhtä uudelleen? Opiskelija: Middle miinus 1. JASON HIRSCHHORN: Lähi miinus 1. Nyt, miksi miinus 1, ei vain keskellä? Opiskelija: keskellä on poissa kuva jo, koska meillä oli tarkistanut, että se on pois? JASON HIRSCHHORN: Tuo Aivan oikein. Keskellä on pois kuvasta. Olemme jo tarkistanut keskellä. Joten emme halua "keskellä", lainaus unquote, jatkuvan vuonna array, että etsimme. Joten tämä on fantastinen. If arvot kiinnike keskellä on suurempi kuin arvo päättyy tasavertaisina keski miinus 1. Jeff, mitä tästä viimeisellä rivillä? Opiskelija: Else. Arvojen keskellä on pienempi kuin arvo? JASON HIRSCHHORN: me annat minulle muuta. Joten jos et anna minulle - Opiskelija: Joten sitten alkaa olisi keskellä plus 1. JASON HIRSCHHORN: Beginning tasavertaisina keskimmäinen plus 1, jälleen, samaan syystä Constantine antoi meille aikaisemmin. Ja lopussa, joka ei ole antanut minulle koodiriviä vielä? Palauttaa false, Aleha, mitä kirjoitamme täällä? Opiskelija: return false. JASON HIRSCHHORN: return false. Ja meidän täytyy tehdä niin, koska jos me eivät löydä sitä, meidän täytyy sanoa, että meidän ei löydä sitä. Ja me sanoimme aiomme palata bool, joten varmasti on palattava bool jonnekin. Joten suorittaa tämän koodin. Olen oikeastaan ​​menossa - joten olemme terminaalissa. Me selvästi meidän ikkunasta. Tehdään kaikki. Löysimme olemassa yksi virhe. On virhe rivillä 15, odotetaan puolipiste lopussa julkilausumaan. Joten mitä minä unohda? Opiskelija: Semicolon. JASON HIRSCHHORN: Semicolon asti täällä. Mielestäni oli Tomin koodi. Joten Tom, [äänetön]. Vain leikkiä. Tehdään tehdä kaikki uudestaan. Opiskelija: Mitä Dropbox-hakemistossa meidän pitäisi olla tähän? JASON HIRSCHHORN: Voit siis vain katsella tätä vähän. Mutta jälleen kerran, jos halusi siirtää tämän koodi pset3 hakemistoon kokeilla sitä, että mitä tein. Jos huomaat täällä - pahoillani, hyvä kysymys. [? LS,?] Minulla on täällä find.c koodi Tämän viikon distro koodi. Minulla on helpers.h. Minulla on tehdä tiedosto, että olen itse muokattu hieman sisällyttää nämä uudet tiedostoja olemme kirjallisesti. Kaikki tämä koodi on käytettävissä, ei jakelu-koodi, mutta uusi Tee tiedosto, uusi helpers.h tiedosto on käytettävissä verkossa latauksena. Taas, joten ne ovat extra koodit meillä on. Joten tehdä kaikki, kohti tätä linjaa, tekee löytää, binary, kupla valinta - merkkeihin kaikki kolme ja kokoaa osaksi Tämän koodia löytää. Joten yleensä, emme halua to suoraan check50. Haluamme ajaa joitakin testejä omillamme. Mutta vain niin voimme nopeuttaa tätä hieman, check50 2013 pset3.find välitän in helpers.c-- my bad. Minulla ei ole juuri nyt. Joten olemme todella tulee suorittaa koodia oikeasti. Usage.find /, tiedät mitä se tarkoittaa? Opiskelija: Tarvitset toisen komentoriviltä sitä. JASON HIRSCHHORN: Tarvitsen Toinen komentoriviltä. Ja kohti erittely, tarvitsen syöttää mitä etsimme. Joten katsotaanpa 42. Me pitää se lajitellaan, koska me ole kirjoittanut lajittelu vielä - 42, 43, 44. Ja ohjaus D ei löytänyt neulaa heinäsuovasta. Se on huono. Se on ehdottomasti siellä. Kokeillaan jotain muuta. Ehkä se johtuu siitä, laitoin se alussa. Tehdään 41, 42, 43. Siellä mennään. Se löysi sen. Laitetaan se lopussa nyt vain jotta voimme olla perusteellinen - 40, 41, 42. Ei löytänyt neulaa. Joten Mainitsin tämän aikaisemmin. Valitettavasti, tiesin, että tämä oli tapahtumassa. Mutta opetuksellisia tarkoituksia varten, se on hyvä tutkia sitä. Se ei toimi. Jostain syystä se ei löydä sitä. Tiedämme, mitä siellä, mutta emme ole löytää se. Joten mitä voimme tehdä, on mennä läpi GDB löytää sen, mutta ei kukaan, ilman läpi GDB, on tunnetta siitä, missä olemme mokasi? [? Madu? ?] Opiskelija: Mielestäni se voisi olla, kun päättyy on yhtä suuri kuin alussa, ja se on vain yhden elementin listana. Sitten se vain ohittaa sen sijaan todella tarkistaa sen. JASON HIRSCHHORN: Tuo Aivan oikein. Kun loppu on sama alusta, me edelleen osa meidän listalta? Opiskelija: Joo. JASON HIRSCHHORN: Kyllä, itse asiassa me oltava yksi ja vain yksi elementti. Ja että todennäköisesti tapahtuu, kun, per koodi testasimme, olemme edessä heinäsuovasta tai loppuun heinäpaali. Siellä alussa ja loppu tulee yhtä yksi, jossa binäärihaku. Joten näissä kahdessa tapauksessa se ei toimi, koska päättyy vastasi alussa. Mutta jos päättyy on yhtä suuri kuin alussa, tämä kun silmukka suorittaa? Näin ei ole. Ja olisimme voineet tarkastaa että jälleen läpi GDB. Joten kuinka voimme korjata tämän koodin, koska kun taas loppu on yhtä suuri alkaa, haluamme myös tämän while-silmukka ajaa. Niin mitä korjata voimme tehdä riville 18? Opiskelija: [kuultavissa] on suurempi tai yhtä suuri kuin. JASON HIRSCHHORN: Aivan oikein. Vaikka loppu on suurempi kuin tai yhtä suuri kuin alussa. Joten nyt me varmista, että saat että nurkkaan tapauksessa lopussa. Ja katsotaanpa. Juostaan ​​tämä vielä kerran. Tehdään kaikki. Uudelleen, sinun täytyy vain seurata sitä täällä. Etsi 41 tällä kertaa. Vain pitää se johdonmukainen. Etsi 42. Laitetaan se alussa - 42, 43, 44. Löysimme sen. Joten se oli todellakin muutos meidän piti tehdä. Se oli paljon koodaus me vain teimme, binäärihaku. Onko kellään mitään kysyttävää ennen Jatkan riveihin kirjoitimme binäärihaku tai miten Ajattelimme mitä emme selvittää? Ennen kuin siirrymme, haluan myös huomauttaa , että yleensä, kartoitimme Meidän pseudo-koodia yhdestä yksi päälle meidän koodi. Meillä ei ole, että hankala asia selvittää kanssa alkaa ja päättyy. Mutta ellet olisi tajunnut, että ulos, olisi kirjoittanut aika paljon identtiset § lukuun ottamatta nämä kaksi ylintä riviä. Ja sitten olisi huomannut, kun teit sen tarkastusten ja tapauksissa, että tarvitset jotain muuta. Joten vaikka olisit seurannut pseudo-koodi riviltä, ​​olisit saanut kaikki paitsi kaksi riviä koodata sinun piti kirjoittaa. Ja olisin valmis lyömään vetoa, että te olisi kaikki sen selville melko nopeasti, että sinun piti laittaa jonkinlainen merkki siellä selvittää missä olit. Tämä taas on valta tehdä pseudo-koodi etuajassa. Jotta voimme tehdä logiikka ensin ja sitten voimme huolehtia syntaksin. Oliko meillä ollut hämmentynyt logiikka kun yrittää kirjoittaa tämän koodin C, olisimme saaneet kaikki sekaisin. Ja sitten olisimme kyselleet logiikan ja syntaksin ja hammastusvirheet ne kaikki yhdessä. Ja olisimme eksyneet mitä voi nopeasti tulla hyvin vaikea ongelma. Joten siirtyä nyt valintaan lajitella. Meillä on 20 minuuttia jäljellä. Joten minulla on tunne, emme pysty läpi kaikki valintahetkellä sort ja kupla lajitella. Mutta älkäämme edes pyrkiä loppuun valinta lajitella. Joten toteuttaa valinta lajitella käyttäen seuraava toiminto julkilausumaan. Jälleen kerran, tämä on otettu Harjoitus erittely. Int arvot on suluissa, on joukko kokonaislukuja. Ja int.n on koko, joka array. Selection sort on menossa lajitella tähän array. Joten kohti meidän mentaalinen malli valinta lajitella, osaamme - Ensimmäinen, käymme läpi listan ensimmäinen aikaa, löytää pienin määrä, laita se alussa, löytää toisen pienin määrä, laita se toiseen asentoon jos haluamme lajitella nousevassa järjestyksessä. En pakota sinua kirjoittamaan pseudo-koodi juuri nyt. Mutta ennen kuin teemme koodin luokan viisi minuuttia, aiomme kirjoittaa pseudo-koodi, jotta meillä on jossain mielessä siitä, missä olemme menossa. Joten yritä kirjoittaa pseudo-koodi itse. Ja sitten yritä kääntää, että pseudo-koodi koodi. Teemme että ryhmänä viidessä minuutissa. Ja tietenkin, haluaisin tietää, jos sinulla on kysyttävää. Opiskelija: Että se? JASON HIRSCHHORN: Katso kuinka pitkälle voi saada kaksi minuuttia. Ymmärrän sinä et voi lopettaa. Mutta me menemme yli tämän ryhmänä. Te kaikki koodaus niin [kuultavissa], joten olen pahoillani keskeyttää mitä olet tekemässä. Mutta mennään läpi tätä ryhmää. Ja vielä, binäärihaku, te kaikki antavat minulle yksi jos ei enemmän riviä koodia. Kiitos siitä. Aiomme tehdä sama asia Täältä koodi yhdessä ryhmänä. Joten valinta sort - Kirjoitetaan Nopea pseudo-koodi. Per henkinen malli, voi joku antaa minulle ensimmäinen rivi pseudo-koodi, kiitos? Mitä haluan tehdä? Opiskelija: Vaikka lista on epäkunnossa. JASON HIRSCHHORN: OK, kun taas lista on epäkunnossa. Ja mitä tarkoitat "epäkunnossa?" Opiskelija: Vaikka [kuultavissa] ei ole järjestetty. JASON HIRSCHHORN: Vaikka lista on epäkunnossa, mitä me teemme? Anna minulle toinen rivi, please, Marcus. Opiskelija: Joten löytää seuraavan pienin määrä. Tämä sisennetään. JASON HIRSCHHORN: niin löytää seuraavaksi pienin numero. Ja sitten joku muu? Kun löydämme seuraavaksi pienin numero, mitä me teemme? Aion sanoa löytää pienin määrä. Sitähän me haluamme tehdä. Niin löytää pienin numero. Mitä sitten teemme? Opiskelija: [kuultavissa] alkuun. JASON HIRSCHHORN: Anteeksi? Opiskelija: Aseta se alussa luettelon. JASON HIRSCHHORN: Niin aseta se listan alussa. Ja mitä me teemme asia että oli alussa luettelon, eikö? Olemme päälle jotain. Joten mistä laitamme sen? Joo, Anna? Opiskelija: Silloin kun pienimmät numero oli? JASON Hirshhorn: Joten laita alussa luettelon, jossa Pienin luku oli. Joten, kun lista on epäkunnossa, löytää pienin määrä, aseta se listan alkuun, laita alussa listan, johon Pienin luku oli. Marcus, voit muotoilla tätä linjaa kun lista on epäkunnossa? Opiskelija: Vaikka numerot ei ole lajiteltu? JASON Hirshhorn: OK, niin jotta tietää, että numerot eivät ole olleet lajitellaan, mitä meidän täytyy tehdä? Kuinka paljon meidän täytyy läpi tämän listan? Opiskelija: Joten kai silmukka, tai samalla, kun numerot tarkistetaan on vähemmän kuin listan pituus? JASON Hirshhorn: OK, se on hyvä. Luulen misphrased kysymykseni huonosti. Yritin vain saada aikaa aiomme mennä kautta koko lista. Joten, kun lista on epäkunnossa, Minulle on vaikea kartta. Mutta pohjimmiltaan se, miten Mielestäni tästä. Käy läpi koko luettelon, löytää pienin määrä, aseta se alussa - itse asiassa, olet oikeassa. Laitetaan molemmat. Joten, kun lista on epäkunnossa, me tarvitse käydä läpi koko lista kerran, löytää pienin määrä, paikka sen listan alkuun, laita listan alkuun, jossa Pienin luku oli, ja sitten jos lista on edelleen epäkunnossa, olemme Täytyy mennä läpi tämän prosessin uudelleen, eikö? Siksi valinta lajitella, Big-O runtime valinta lajitella, anyone? Opiskelija: n potenssiin. JASON Hirshhorn: n neliö. Koska kuten Marcus ja minä vain ymmärtänyt täällä, me aiomme pitää käydä listan läpi lista useita kertoja. Niin menee läpi jotain pituus n n monta kertaa on itse asiassa n potenssiin. Joten tämä on meidän pseudokoodina. Tämä näyttää erittäin hyvältä. Onko kellään mitään kysyttävää noin pseudokoodina? Koska todellisuudessa valinta tavallaan olisi luultavasti nyt tullut yhtä, koodi pseudokoodina. Joten kysyttävää logiikka pseudokoodina? Kysy se nyt. Selection sort -, kun lista on pois järjestyksen, aiomme käydä läpi ja löytää pienin joka kerta ja laita se edessä. Joten, kun lista on epäkunnossa, voi joku antaa minulle Koodirivin jotka ei ole antanut minulle linja koodia vielä, kiitos? Se kuulostaa mitä? Opiskelija: Tuo silmukka. JASON Hirshhorn: Kuulostaa pidä silmukka. OK, voit antaa minulle silmukka? For - Opiskelija: I on 0. JASON Hirshhorn: i tai - Mitä me puuttuu? Mikä menee täällä? Opiskelija: Int. JASON Hirshhorn: Aivan. (Int i = 0; - Opiskelija: i