>> JASON HIRSCHHORN: Tervetuloa to A5, kaikille.
Meillä on jännittävä viikko edessämme, lähinnä koska on niin monia uusia
kasvot tässä huoneessa.
Se on hienoa.
Monet teistä ovat täällä sattumalta, joka on vielä parempi.
Joten toivottavasti sinun pitää liittyä meihin.
>> Tällä viikolla aiomme viettää Suurin osa osiossa
valmistautuu tietokilpailu.
Joten kohti meidän asialistalla, me aiomme puhua vähän siitä resursseja luokka,
mutta myös tietokilpailu, ja sitten uudelleen, viettää suurimman luokan puhumisen
noin kysymyksiä.
Kun olemme tehneet vastaamalla kysymyksiä tai jos kysymyksiin
luonnollisesti johtaa meidät joitakin koodausta, I on näyte ongelmia midterms
aiemmin, että me koodaa live jaksossa yhdessä, että myös tuoda sinne muualta
hyvä aiheita kattamiseksi.
>> Joten ensin, koska olemme käyneet läpi varten Parin viime viikon aikana muistuttamaan
kaverit, on olemassa ton resursseja saatavilla tämän kurssin.
Monet heistä ovat uskomattoman hyödyllinen teille kuin jatkat
opiskella tietokilpailu 0, koska se on tiistaina iltapäivällä.
Joten te kaikki olette olleet opiskelevat vähän.
>> On luentojen ja lähde koodi, joka sinun pitäisi
ehdottomasti tarkistaa.
Katsella shortsit.
Tutustu study.cs50.net.
Ja sitten, lueteltu alla, numero muita resursseja.
>> Jälleen tietokilpailu 0 on huomenna kello yksi.
Jos et ole jo tehnyt niin, tarkista ulos Tietoja Quiz 0 asiakirja
Kurssin kotisivu selvittää jos olet ottaen tietokilpailu.
Tietovisa alkaa klo 01:10 ja päättyy 70 minuuttia myöhemmin.
Joten jos ilmestyt jälkeen 01:10, olet menossa, että monet vähemmän minuuttia
kuin 70 ottaa tietovisa.
Joten varmista, että olet siellä ajoissa.
Jos olet laajennus opiskelija tai on muulla testaus seikkojen perusteella
ehkä olla yksi huomenna.
Mutta jälleen kerran, tarkista Tietoja Quiz 0 dokumentoida varmista, että tiedät milloin
olet ottaen tietokilpailu.
Kirjoitin 75 minuuttia täällä.
Mielestäni on oikein, ei 70.
>> Se kattaa kaikki materiaali viikossa 0 viime viikon luento keskiviikkona.
Ja vielä, tämän tietokilpailu, per että asiakirja, saat yksi kaksipuolinen ja 8
1/2 11 paperiarkki, että saat käyttää muistiinpanoja tietokilpailu.
Monet ihmiset, jos ei useimmat ihmiset, ovat todettiin, että suurin yksittäinen hyödyllinen tapa
opiskella tietovisa on tehdä tutkimus arkki,
yksi sisäpiirivastaavan, omia.
Joten katso aiempien jos olet nähnyt aiempien.
Tavoittaa ystäviä nähdä, mitä he laittaa omaansa.
>> Mutta kädet alas, paras tapa voit Tutkimus on käydä läpi kaiken ja
vuolla se alas, mitä katsotaan tai kuulu tähän arkille
paperia, koska se on vain todella hyödyllinen tapa, jolla voit varmistaa,
olet menossa läpi kaiken ja on jonkin verran perehtyneisyyttä sen.
Useimmat ihmiset, löydämme, vaikka ne ovat paperiarkki istuu oikealla
niiden vieressä on tietokilpailu, älä käännä sitä, koska, jälleen, että hyvin
prosessi menee läpi tiedot on auttanut heitä oppimaan sitä.
>> Onko kellään mitään kysyttävää noin tietokilpailu 0?
On kaikki -
En aio tehdä kättä.
Ei se haittaa.
Aioin kysyä, kuka alkoi opiskella.
Mutta en halua tehdä sinulle kaikki ei nosta kätesi.
Joten kuten sanoin - kyllä, Avi, mennä eteenpäin.
>> AVI: Mikä olisi hyödyllinen asia laittaa yhden hakulaite?
>> Opiskelija: Se on sinun.
>> JASON HIRSCHHORN: Saat käyttää harkintaa.
Hyödyllisiä asioita laittaa yhden hakulaite, jos olet hämmentynyt iso O
runtime erilaisia ​​hakuja ja lajittelee, pane se siellä
näpsäkkä kaavio.
Näin, jos sinulta kysytään, että tietokilpailu, sinun ei tarvitse yrittää selvittää
se pois tai syy kautta runtime.
Voit vain kopioida sen alas.
Jos tarkastellaan tietokilpailuja ohi, paljon kertaa, siellä käyntiaika kysymyksiä.
Niin, että olisi esimerkki hyvästä asia laittaa yhden hakulaite.
>> Muita hyviä asioita laittaa, jos olet hämmentynyt siitä, miten julistaa
toiminto tai mitä eri osat toiminto ilmoitus ovat, kirjoittaa
että siellä, geneerisen version ja sitten ehkä esimerkki.
Jos olet hämmentynyt osoittimia, kaavio siitä, miten viitteitä työ on
luultavasti todella hyödyllinen.
Jos olet hämmentynyt rekursio, maistella rekursiivinen funktio siellä
voisi myös osoittautua todella hyödyllistä.
Tarkoittaako tämä antaa teille joitakin ajatuksia?
>> AVI: Sinun täytyy ymmärtää koko kokoaminen prosessi, kuten
miten tämä kaikki toimii?
>> JASON HIRSCHHORN: Everything joka on katettu voisi
näy tietokilpailu.
Kysymykset -
mutta jälleen kerran, jotkut asiat ovat painotettu voimakkaasti kuin toiset.
Jotkut asiat ovat keksineet jälleen ja taas luokassa, vuonna
luento, ja kohta.
Muut asiat eivät ole keksiä usein.
>> Olemme puhuneet paljon # include ja -L jotain ja mitä ne tarkoittavat
tietojenkeruuprosessiin.
Olemme puhuneet paljon GDB, takertua, niitä eri lippujen että käytämme kun
meidän kääntää jotain, ja mitä make15, esimerkiksi todella
tarkoittaa ja todella tekee.
Emme ole puhua niin paljon jokainen askel
tietojenkeruuprosessiin.
Olemme vielä puhuneet siitä.
Joten se on silti jotain, mitä olisi tunnettava.
Mutta jälleen kerran, emme aio olla -
asioita, jotka tulevat jopa useammin luokassa ovat todennäköisesti keksiä lisää
usein ja raskaampia painotettu tietokilpailu.
>> Cool.
Muita kysymyksiä tietovisa 0?
>> OK, joten laitoin luettelo aiheita aluksella.
Kävin läpi oppimäärän.
Kävin läpi tarkastelun osio viime yönä ja niitä dioja keksiä
kanssa ei ole tyhjentävä luettelo aiheista että olemme käsitelleet tähän mennessä CS50
ja asioita, jotka saattavat näkyvät tietokilpailu.
Joten en aio käydä läpi jokainen näistä.
Että kestäisi paljon aikaa kuin meillä nyt.
Mutta laitoin tämän tänne toivottavasti lenkille muistiasi siitä asioita, jotka voivat
tai ei ehkä ole yhtä tuttu sinulle.
>> Ja Mielelläni viettää suurimman osan § vastaamalla kysymyksiin
näistä aiheista, aiheet, ei käsitellä tässä yhteydessä.
Voimme kirjoittaa pseudo koodia.
Voimme kirjoittaa koodin toiminnallisuus varmistaa, että sinulla -
Voin vastata kysymykseesi ja auttaa jokainen pohjimmiltaan ymmärtää
Monet näistä aiheista niin tunnet valmis ja mukava menee
tietokilpailu huomenna.
Joten lukea yli luettelo.
Et toivottavasti tullut osiosta joitakin kysymyksiä.
Kun olet valmis, nostamaan käden ja me päästä alkuun.
>> Pidä mielessä, sinulla on kysymyksiä, ei ole tyhmiä kysymyksiä.
Olemme kuulleet, että paljon.
Ja kysymyksiä sinulla on, olen valmis panostaa, monet muut ihmiset sekä
istun tässä ja katsella verkossa on samoin.
Joten voi vain auttaa ihmisiä kysymällä.
Marcus.
>> MARCUS: Välillä pino ja kasaan, on olemassa ennalta kohdennetut
suuri osa muistista on määritelty tämä on pino tai kasaan?
Tai miten se toimii, tarkalleen?
>> JASON HIRSCHHORN: Suuri kysymys.
Aion takaisin jäljittää hieman.
Onko kaikki -
olkaa rehellisiä täällä.
Tiedän Pyydän sinua nostaa käsi edessä oman ikäisensä.
Mutta on olemassa ihmisiä, jotka tuntevat kauhistuttaa pino ja keko
ja haluaisin mennä yli, että ja mitä ne tarkoittaa?
Nosta kätesi, jos -
OK.
Kiitos.
Joten aiomme mennä yli pino ja kasaan todella nopeasti ja sitten
siirtyä vastaamalla kysymykseen.
>> Joten jos vedämme ulos laatikko edustamaan tietokoneen muistiin, mitkä ovat
asioita, jotka menevät tähän kohtaan?
Main.
Päätehtävä.
Mistä tärkein mennä?
>> Opiskelija: [kuultavissa].
>> JASON HIRSCHHORN: niin me laittaa tärkeimmät tänne.
Mitä muuta menee tähän ruutuun?
>> Opiskelija: toiminnot soitat.
>> JASON HIRSCHHORN: toiminnot jota kutsumme.
Ja missä he menevät?
>> Opiskelija: In pino.
>> JASON HIRSCHHORN: He mennä pinossa.
Joten aiomme kutsua tätä asia tänne pinoon.
Ja ylös, meillä on kasassa.
Joten muisti ei ole laatikko aivan kuten tämä.
Mutta se on oikeastaan ​​aika samanlainen.
Se tulee olemaan paljon laatikot yli ja yli, riippuen siitä, kuinka suuri
tietokone on tai kuinka suuri muisti on.
>> Klo quote-lainaus "pohja" on pino.
Ja on olemassa useita asioita jotka menevät pinoon.
Ja ne riippuvat toiminnot sinulla on koodissa.
Sinulla on aina yksi funktio omassa koodia kutsutaan tärkein, joten siellä on aina
osan alas täällä pino omistettu main.
>> Nämä osiot pinon kutsutaan pino kehyksiä.
Kun soitat toisen funktion, sanovat tärkein kehottaa binary hakutoiminto,
laitamme toinen runko pinoon.
Tarkemmin sanottuna aiomme lahjoittaa kimpale muisti meidän
tietokone tallentaa binäärihaku paikallisen muuttujat ja juosta binary
search-koodin.
>> Joten me kutsumme binäärihaku.
Tässä kimpale muisti, aiomme tallentaa sen paikallisia muuttujia.
Aiomme säilyttää sen printf puhelut.
Mitä tahansa tapahtuukin, että toiminto on aiotaan varastoida oikeassa.
Binäärihaku aikoo toteuttaa.
Se on menossa loppuun suorittamiseen.
Mikä on sana C, joka merkitsee että funktio olisi
täydentää sen toteuttamista?
>> Opiskelija: Return.
>> JASON HIRSCHHORN: Return.
Joten kun näet paluulause, toiminnon päät
kun se osuu siihen.
Joten binäärihaku osuu sen tuottoa.
Tämä osa muistin olennaisesti vapautunut.
Ja tärkein palaa toteuttamista.
Joten tärkein keskeyttää missä oli, puhelu binäärihaku, saada joitakin palauttaa arvon,
ja jatkaa toteutus.
Tämä pinokehyksen menee pois.
>> Jos kutsumme rekursiivinen funktio, joka on toiminto, joka kutsuu itseään yli
ja yli, voisimme saada - sanomme teki binäärihaku rekursiivisesti.
Saatamme saada binäärihaku versio yksi, binäärihaku kaksi, binäärihaku
kolme, binäärihaku neljä, binäärihaku viisi.
Ja sitten tämä lopullinen binäärihaku viisi osuma pohja tapauksessa ja pino
kehykset palaa ja pitää sulkeminen kunnes saamme takaisin päävalikkoon.
Voimme mennä yli rekursiolla vähän.
Mutta kaikki tämä on sanoa, jos olet jossa useita toimintoja samanaikaisesti,
siellä tulee olla useita pino kehykset pinoon.
>> Kasaan, ja toisaalta, mikä on täällä ei ole toimintoja,
ei paikallisia muuttujia.
Se on dynaamisesti muuttujia.
Joten nämä ovat muuttujia, jotka saattavat olla alustetaan joko pää-tai
toimiakseen, että tärkeimmät puhelut.
Anywhere koodissa, ne voidaan alustaa.
Ja alustaa dynaamisesti osuus muuttuvista.
Mikä funktio C käytämme?
>> Opiskelija: malloc.
>> JASON HIRSCHHORN: malloc.
Soitat malloc.
Saat tilaa muistia.
Ja tuo tila muistia on kasaan.
Ja tuo tila muistia pysyy siellä, kunnes soita ilmaiseksi.
>> Joten dynaamisesti muuttujat keon ovat olemassa niin kauan kuin voit
halua niitä olemassa, ja ne eivät mene pois ennen kuin erikseen
kertoa heille mennä pois.
Voit luoda niitä yksi toiminto.
Että funktion pinon runko menee pois.
Mutta se muuttuja on edelleen olemassa kasaan, kunnes se on vapautettu,
mahdollisesti se toiminto, jota kutsutaan binäärihakupuu tai mitä tahansa.
>> Joten ne kasaan muuttujia siellä niin kauan kuin haluat
heitä pysymään siellä.
Ja he saavat laittaa tänne.
Ja sitten seuraava saa laittaa sinne.
Ne pitää saada täytetty, ja ne pysyä siellä, kunnes soita ilmaiseksi.
>> Ja pääasiallisesti kasaan ja pino, saada Marcus kysymykseen,
kasvaa toisiaan kohti.
Ja jos he törmäävät toisiinsa, olet käyttänyt kaikki muistia
tietokone ja ohjelma lopettaa koska sinulla ei ole enää muistia
jäljellä käyttää.
Niiden väliin on mahdollisesti muita asioita.
Mutta soveltamisalan Tällä kurssilla ei tarvitse huolehtia siitä.
>> Niin se oli vastaus kysymykseesi.
Älä mieti sitä.
Mutta se oli pitkä vastaus.
Kaikki mitä sinun tarvitsee tietää on kasaan ja pino -
lähdetään alareunassa.
Pinon tekee.
Pino tuolla ylhäällä.
Ne kasvavat lähemmäksi toisiaan.
>> Ja jos ne kosketa, se on ongelma.
Olet muisti loppui.
Mutta myös, lisäksi tietää, missä ne, mitä on tallennettu sekä
pino ja keko.
Curtis.
>> CURTIS: Kun he törmäävät toisiinsa, on, että pinon ylivuoto?
>> JASON HIRSCHHORN: Kun he törmäävät toisiinsa, se ei ole pinon ylivuoto.
Pinon ylivuoto on erilainen alue että voimme mennä yli, jos haluat.
OK, tulemme takaisin, että vähän.
>> Opiskelija: Mikä sana nimeltään osuessaan toisiaan,
pino ja keko?
>> JASON HIRSCHHORN: Toistaiseksi älä välitä.
Vain tietää -
Vastaan ​​tähän kysymykseen tunnin jälkeen.
Jos he törmäävät toisiinsa, loppui muistia, koska ei ole enää olemassa
tilaa siellä.
>> Opiskelija: Anteeksi, mitä segmentti vika?
>> JASON HIRSCHHORN: segmentin vika voidaan kutsua -
se riippuu miksi segmentin vika on nimeltään.
Joskus sinun pinon ylivuoto, se tulee sanoa seg tuottamukseen virhe.
>> Opiskelija: Entä dereferencing null muuttuja?
On, että segmentti vika?
>> JASON HIRSCHHORN: Dereferencing nollaosoittimen -
OK, joten jos sinulla on osoitin, että olet asetettu yhtä nollaamaan, osoittimet, muistaa,
tallentaa muistiin osoitteet koska niiden käypiä arvoja.
Ja nollaosoittimen on olennaisesti tallentamiseen 0, 0-th
käsitellä muuttuja.
Joten 0x, 0, 0, 0, 0, jne..
Että 0-th osoite muistiin, joka ei ole meidän kuva, että tuolla ylhäällä
jonnekin, se on varattu tietokoneen.
Emme saa koskettaa sitä.
>> Joten kun ohjelman täytäntöönpanosta, jos jotain yrittää mennä muistiin
osoite 0, se tietää, että että on tyhjä arvo.
Se ei tiedä mitään pitäisi olla siellä.
Joten jos yrität käyttää jotain siellä ja kohdella jotain siellä tai
yrittää mennä kyseiseen paikkaan, olet menossa seg vian tai virheen.
Vastaako tuo kysymykseesi?
>> Ja nyt palaamme pino ylivuoto.
Asiat pinossa, koska teillä ennen nähty, ja - nyt piirtää lähellä
Lähikuva pinokehyksen.
Voivatko kaikki nähdä, että?
Joten meillä on pinokehyksen.
Säästämme array paikallisena muuttuja tätä toimintoa.
Niin sanovat meidän joukko on viisi paikkoja.
Kaikki viisi näistä varastoidaan että pinokehyksen.
>> Jos alamme kirjallisesti pidemmälle rajat tämän array -
joten jos alamme kirjoitusta, sanotaanko, että on 0.
Nämä ovat viisi indeksit meidän array.
Jos alamme kirjallisesti indeksilukituspiiriin 5, joka meillä ei ole kun meillä on
taulukon koko 5, alamme kirjoitusta indeksi 6, 7, 8, 9, voimme saada Stack
Ylivuotovirheen.
>> Yleensä se ei ole -
luultavasti joutua vaikeuksiin jos menet yli yhden.
Mutta yleensä, saat osaksi eniten ongelmia jos menet haltuunsa paljon
ja mennä niin pitkälle yli että kirjoitat yli paluuosoitteen että
toiminto, joka sijaitsee pinon alimmaisena runko.
>> Koska, eikö?
Sinä - in - sorry.
Ei ", koska oikea."
>> Vuonna pinokehykseen, sinulla on paikalliseen muuttujia.
Alareunassa pinon runko on palautusosoite.
Se kun toiminto menee kun se on ohi.
Ja jos korvaat että paluu osoite, sitten kun tämä pinokehyksen,
kun olet menossa läpi pinon runko ja suorittamalla kukin linja, olet
menossa uuteen palautusosoite että on kirjoitettu siellä sijasta
Varsinainen yksi.
Ja siitä olemme nähneet tietyistä tietosuojarikkomuksista
voi tapahtua tietokoneiden kanssa.
>> Joten pinon ylivuoto, lyhyesti sanottuna, on kun korvaat osan pinossa
sinun pitäisi käyttää, paikallinen muuttuja sinun pitäisi käyttää, ja
erityisesti kun aloitat korvaamasta tärkeitä asioita, kuten
palata osoite.
Ja se jos saat virheen.
Tai ehkä jopa voisit alkaa jopa kirjoitusta -
sanoa binäärihaku oli oikealla yläpuolella tärkein.
Jos korvasivat paljon, et voisi kirjoittaa keskusmuistiin.
Mutta yleisesti, saat virheen ennen Sitten, koska tietokone tietää
olet tekemässä jotain ei pitäisi tehdä.
Joo.
>> Opiskelija: Mitä eroa välillä pinon ylivuoto
ja puskurin ylivuoto?
>> JASON HIRSCHHORN: Puskurin ylivuoto on yleisempi tyyppi
mitä olen juuri kuvattu.
>> Opiskelija: Niin pinon ylivuoto on esimerkki puskurin ylivuoto.
>> JASON HIRSCHHORN: Aivan.
Tämä on array voimme ajatella niin puskuri, tilaa asioiden menevän sisään
Tämä on pinon puskurin ylivuoto.
Meillä voisi olla keon puskurin ylivuoto.
Jos oli puskuri, joka on usein on joukko kasaan, ja me
korvasivat niitä rajoja, niin olisimme on keon puskurin ylivuoto.
>> Ja kuulu tämän kurssin, he havaittu hieman eri tavalla.
Kääntäjä on erityinen tapoja havaita kukin.
Mutta puskurin ylivuoto on yleisempi tyyppi mitä kuvailin,
joka oli pinon puskurin ylivuoto.
Oliko että kysymykseesi?
Makea.
>> Oliko liittyvät muut kysymykset pinoon tai kasaan?
Joo.
>> Opiskelija: Tiedän, olet vapaa jouset koska he kasaan
ja et halua vuotaa muistia.
Mutta sinun täytyy vapauttaa yleismuuttujat ja muuta vastaavaa?
Vai ovatko ne vapautetaan automaattisesti?
>> JASON HIRSCHHORN: Hyvä kysymys.
Joten CS50.H, luomme tämä asia sinulle kutsutaan merkkijono.
Merkkijono on todella mitä?
>> Opiskelija: Char tähti.
>> JASON HIRSCHHORN: char tähden, osoitin haluamasi merkin, osoitin
joukko merkkiä.
Sitähän merkkijono on.
Joten meidän täytyy vapauttaa sen, koska getString, jota käytimme paljon -
merkkijonon nimi vastaa getString -
että mallocs meille joitakin muistia kasaan ja sitten palauttaa osoittimen
ensimmäinen merkki, joka merkkijono, char tähti.
>> Joten näennäisesti, jos et ole ollut kirjallisesti ilmaiseksi tahansa jousille
että olet kutsutaan niin pitkälle, sinulla on vuotanut muistia.
Tietenkään emme ole puhuneet se, niin kukaan ei ole hankkineet
vaikeuksia tehdä sitä.
Mutta eteenpäin, kyllä.
Kun soitat getString, olet mallocing jonkin verran tilaa kasaan.
Ja jos et soita ilmaiseksi myöhemmin, että merkkijono, sinulla on muisti vuotaa.
Että kysymykseesi?
>> Joo
>> Opiskelija: Niin tehdä, että käytämme vapaa oikeus ennen paluuta?
Kuten, puitteissa, Oletan, jos sanomme, kuten, int main kuluessa
soveltamisalaan koodi, joka on kyseisten aaltosulkeita, juuri ennen -
tiedät missä olisit yleensä laittaa takaisin.
Laitatko ilmaiseksi ennen sitä?
>> JASON HIRSCHHORN: Joten voit laittaa ilmaiseksi minne haluat laittaa ilmaiseksi.
Koska nämä ovat dynaamisesti muuttujia, koska ne voivat
elää kuulu erityisesti toiminto, jos soitat malloc vuonna
erillinen toiminto, esimerkiksi getString, voit soittaa ilmaiseksi tärkein.
Sinun ei tarvitse kutsua sitä vuonna erityinen tehtävä
jossa malloc kutsutaan.
Mutta sinun täytyy kutsua sitä ennen isoja tuottoja.
>> Ja se riippuu oikeastaan.
Se riippuu miksi malloced että tilaa ylipäätään.
Jotkut ihmiset kutsuvat vapauttaa melko nopeasti.
Jotkut ihmiset eivät soita ilmaiseksi, kunnes lopussa niiden ohjelman.
Ja he menevät läpi ja vapaa kaikesta.
Se riippuu siitä, miksi soitit malloc.
>> Opiskelija: Ja mitä sanoisit jos soitit käyttö getString?
Sanoisit ilmaiseksi mitä?
>> JASON HIRSCHHORN: Niin syntaksin ilmaiseksi on yksinkertaisesti ilmainen, avoimen paren, lähellä
paren, ja nimen osoitinta.
Joten jos kirjoitat merkkijonon nimi tasavertaisina getString, laitat nimen tänne.
Se nimen osoitinta.
Ja se tietää vapauttaa että muisti.
>> Opiskelija: Joten kun se vapauttaa, että muisti, osoitin osoittaa yhä, että paikka
muistiin?
Vai onko osoitin myös tyhjennettävä osoite, että se osoittaa.
>> JASON HIRSCHHORN: Meidän pitäisi yrittää sitä.
Meidän pitäisi koodata että.
Palataan kun pääsemme koodaus, ja anna koodi, että.
Ja jos haluat selvittää vastaus siihen, voit myös koodin, joka
sillä välin.
Mutta se on hyvä kysymys.
>> Opiskelija: Onko mahdollista free jotain liian aikaisin?
Joten tarvitset silti sitä oman ohjelman ja te vapautti että muistia?
>> JASON HIRSCHHORN: Kyllä.
On mahdollista, jos ilmaiseksi jotain ja sitten käyttää sitä uudelleen, tulet
törmätä virhe.
Mutta se on sinulle, koska olet vapauttanut jotain ja sitten kutsui sitä myöhemmin.
Niin että oli ohjelmoijan virhe.
Mutta kyllä.
Voisit kirjoittaa, että.
>> Enempää kysymyksiä -
Kyllä.
>> Opiskelija: Joten jos sinun pitäisi vain vapauttaa sen yleensä ennen
ohjelma päättyy, se tarkoittaa, jos ohjelma päättyy ja et vapauttaa sen,
että muisti on edelleen varattu?
>> JASON HIRSCHHORN: Jos ohjelma päättyy ja unohdat vapauttaa jotain, niin
että muisti on varattu koko eliniän oman ohjelman.
Kun ohjelma sulkeutuu kokonaan, että muisti ei tule
pysyä siellä ikuisesti.
Tietokone on fiksu tietää että kun ohjelma sulkeutuu, se
pitäisi päästä eroon kaikista muisti, joka liittyi ohjelman.
>> On kuitenkin olemassa työkaluja voit suorittaa ohjelmasta havaita, jos, kun
ohjelma valmis, unohdit Vapauta muistia.
Ja seuraavalle ongelma vahvistettu, jos voit käyttää malloc ja käyttämällä
osoittimet, pyörität tätä ohjelmoida teidän ohjelma nähdä, jos,
kun tärkeimmät palaa, sinulla oli joitakin asioita, jotka jäivät unfreed.
>> Joten he eivät aio jäädä malloced ikuisesti tietokoneellesi.
Se olisi tuhlausta, koska hyvin nopeasti, tietokoneet
olisi muisti loppuu.
Mutta jos he loppuun asti oman ohjelmoida ja he eivät vapautti ja
ohjelma loppuu, se on edelleen ongelma että tämä työkalu auttaa sinua käsitellä.
>> Opiskelija: Onko tuo Valgrind?
>> JASON HIRSCHHORN: Se on nimeltään Valgrind.
Ja voit olla -
>> Opiskelija: Mutta emme tarvitse tietää että tietokilpailu, vaikka?
Tarkoitan, että se oli puhuttu hieman luento.
>> JASON HIRSCHHORN: So Valgrind on nimi, joka työkalu.
Tietämättä, mitä se tekee, on tarpeeksi tietokilpailu.
Mutta et ole käyttänyt sitä vielä omalle Harjoitus koska meillä ei ole ollut
Harjoitus, joka on nimenomaisesti käsitellyt kanssa malloc tai käytät malloc.
Joten et ole käyttänyt Valgrind vielä.
Mutta voit käyttää sitä ennemmin ennemmin kuin myöhemmin.
>> Opiskelija: Voitko toistaa mitä Valgrind on?
>> JASON HIRSCHHORN: Anteeksi?
>> Opiskelija: Voitko toistaa sen, mitä tarkoituksena Valgring on?
>> JASON HIRSCHHORN: Valgrind on nimi -
kuten GDB auttaa sinua debug-ohjelma, Valgrind auttaa sinua selvittää, jos
asioista ei ole vapautettu kun ohjelma sulkeutuu.
Joten voit suorittaa sen ohjelman.
Ja ohjelma poistuu, ja se tulee sanoa oma ohjelma nimeltä malloc näin monta
kertaa näin monta tavua, ja voit vain kutsutaan vapaaksi tämän monta kertaa.
Ja niin jätit nämä monta tavua ilman vapautti.
Tai se sanot olet vapauttanut kaiken.
Hyvää työtä.
>> Opiskelija: OK.
Ja sitä kutsutaan Valgring?
>> JASON HIRSCHHORN: V-A-L-G-R-I-N-D.
>> Opiskelija: kysymys viitteitä.
Sano olet n tähti x on yhtä kuin jotain.
Joka vastaa, mitä olet laskemisesta siellä, että mitä on laittaa sisälle
mitä x on osoittaa, tai osoitin x?
>> JASON HIRSCHHORN: Voitko toistaa kysymyksen?
Voimme tehdä sen, kun sanot sen?
>> Opiskelija: Vuonna tietokilpailu, todella, yksi olet lähettänyt meille, se oli kuin, nieriä
tähden totuus vastaa CS50 kiviä, eikö?
Niin tarkoittaako se, että että CS50 kiviä on mitä totuus on osoittaa?
>> JASON HIRSCHHORN: Eli puhut noin char tähti merkkijono, miten
joka toimii?
Joo.
OK.
Katsotaanpa vetää tämän tänne.
>> [SIDE CONVERSATION]
>> JASON HIRSCHHORN: Eli tämä muuttuja tulee olemaan tyyppiä char tähti.
Kuinka suuri on vaihteleva tyypin char tähti?
Kuinka monta tavua?
>> Opiskelijat: Neljä.
>> JASON HIRSCHHORN: Se on neljä tavua.
Kuinka paljon oikeuksia on vaihteleva tyyppiä int tähti?
>> Opiskelijat: Neljä.
>> JASON HIRSCHHORN: neljä tavua.
Jos se on osoitin, niin se on aina neljä tavua, koska osoittimia, niiden
arvo on muistin osoite.
Ja muistin osoitteet CS50 Laitteen neljä tavua pitkä.
Joten kun me kutsumme getString, tai kun vaikkapa merkkijononNimi vastaa, ja sitten
lainausmerkkeihin laittaa merkkijonon, asetamme -
No, se on hieman erilainen.
Teemme getString kuin esimerkkinä.
Tai char tähden jotain vastaa merkkijono.
Anteeksi, anna minulle esimerkki että luet?
>> Opiskelija: char tähti totuus on yhtä kuin "CS50 kiviä" lainausmerkkeihin.
>> JASON HIRSCHHORN: Eli tämä tähti, tämä soitamme tämän muuttujan x meidän
yleiskäyttöjä.
Olemme luoneet muuttuja nimeltä x.
Se tyyppi Char tähden.
Se on osoitin sarja merkkiä.
Joten tänne -
>> Joten tämä on, miten tämä olisi toimivat muistiin.
Tämä tallentaa muistiin osoite.
Se tallentaa muistiin osoite ensimmäisen merkin jono.
Ja sitten kun olet seurannut osoitin, olisit
saat ensimmäisen merkin.
>> Ja jos luet tätä asia kuin merkkijono, tietokone on älykäs
tarpeeksi tietää, lue tämä koko juttu kunnes se pääsee takaisku 0.
Mutta jos luet sen merkin aikaa, joten olet iteroimalla läpi
tämä merkkijono, sinun tulee vain lukea merkki kerrallaan, kunnes saat
kenoviiva 0.
Joka ei ehkä vastata kysymys.
>> Opiskelija: Joo, mutta et ole malloced että tilaa
vielä, että osoitin.
>> JASON HIRSCHHORN: Joten en ole aivan varma mitä etsit,
koska en tee, että tietokilpailu.
Jonka piti olla hyödyllinen resurssi toisesta TF.
Jos luot merkkijono pino tai paikallinen muuttuja, se tulee
vain olla erilaisia ​​maksuja sen sijaan yleensä char tähti osoittaa
toinen merkkijono.
Mutta en tiedä.
Se voisi olla osoitin toiseen string pinoon samoin.
Joo.
>> Opiskelija: Tiedän, että sinun täytyy varata muistia jos osoittimen
saada julisti sisällä toisen toiminnon.
Sinun ei tarvitse tehdä sama asia, jos se on julistetaan sisällä tärkein,
käytät sitä sisällä tärkein?
>> JASON HIRSCHHORN: Joten kyllä.
Voit ilmoittaa osoitin mihin tahansa muisti osoite muistiin.
Se voi olla muistin osoitteen paikallinen muuttuja, vaikka Usein,
ihmiset eivät ilmoita muisti osoitteita paikallisia muuttujia, koska ne menevät
pois, kun että funktio palauttaa, joka Siksi me yleensä malloc asioita.
Mutta kyllä, voit ilmoittaa osoitin toiseen paikalliseen muuttujaan.
Se vain ei yleensä tehdä.
Mutta voin vilkaista, että erityinen asia tunnin jälkeen.
Joo.
>> Opiskelija: Mielestäni tämä on eräänlainen siitä, mitä pyydetään.
Se ei tunnu oudolta olla alustetaan osoitin ei niin
osoite, mutta mitä tuntuu arvo.
Tuntuu siltä CS50 on mitä on sisällä asia korostava ja
ei todellinen osoite, eikö?
>> JASON HIRSCHHORN: Niin, että ei ole, vaikka.
Se ei ole mitä tapahtuu.
Kun julistaa char tähti, se on muistin osoite.
Osoittimet ovat kaikki muisti osoitteita osoittaa jotain muuta.
Että jotain muuta voisi olla pino, mutta lähes aina on
kasaan tavalla näemme sitä käytetään.
Mutta merkkijononNimen vastaa double-quote "GetString", voimme nähdä, että sekä me
voi katsoa läpi ja koodaavan sen.
getString merkkijonoa ei tallennu muuttuja, tai mitä tahansa merkkijono
nimi ei tallennu, että muuttuja, koska se ei ole, kuinka
osoittimet toimivat.
Onko järkeä?
>> Opiskelija: Joo.
>> JASON HIRSCHHORN: OK.
Toivottavasti tämä ei ollut hämmentävää kenellekään.
Mutta jos se oli, voimme tarkastella sitä uudelleen nyt vähän, koska olemme todella menossa
koodata jotain, joka toivottavasti työskennellä jousille ja auttaa sinua tuntemaan
mukavampaa heidän kanssaan.
>> Muita kysymyksiä, jotka liittyvät näihin aiheita tai muita aiheita, jotka
Laitan takaisin ylös?
Ja -
juuri nyt.
Kyllä, Alden.
>> ALDEN: Eli tämä on täysin liity, mutta voisimmeko mennä yli
todella nopeasti, mitä meidän tulee tietää noin ero 32 ja
64-bittinen kone?
>> JASON HIRSCHHORN: Kyllä.
Joten 32 bittiä on, kuinka monta tavua?
>> ALDEN: Se on neljä tavua.
>> JASON HIRSCHHORN: Se on neljä tavua.
Ja 64 bittiä on, kuinka monta tavua?
>> Opiskelija: Kahdeksan.
>> JASON HIRSCHHORN: Kahdeksan tavua.
Joten jälleen, kahdeksan bittiä on yksi tavu.
Sinun CS50 laite on 32-bittinen kone.
Joten muisti osoitteet ovat neljä tavua pitkä.
On 2 32 muistin osoitteet.
0-2 ja 32 miinus 1.
Enkä ole myönteistä, mutta se on luultavasti soveltamisalaa, mitä sinun tarvitsee
tietää 32-bittinen kone, että muisti osoitteet ovat jälleen neljä tavua pitkä,
ja se enimmäismäärä muistin osoitteet.
>> Myös tietotyypit -
tämä voisi olla jotain niin No se on syytä huomata.
Koko tietotyyppi riippuu kone olet työskennellyt.
Joten nieriä, yksittäinen merkki, miten monta tavua meidän CS50 laite?
Yhden tavun.
Ja se on itse asiassa yksi tavun hyvin 64-bittinen kone.
>> Ja useimmat tietotyypit ovat sama numero tavujen molemmissa koneissa.
Mutta jotkut tietotyypit on erilainen molemmissa koneissa.
Jotta olisi mahdollisesti Ainoa asia mitä sinun tarvitsee tietää.
>> Mutta sekin, luulen, on yli rajojen -
Olen melko varma, jos katsotaan vanhoja tietokilpailuja, se sanoo, olettaa,
koodaus ongelmia käytät 32-bittinen kone.
Mutta on olemassa, mennä yhdessä, että Jos olet kiinnostunut, on olemassa
data tyyppejä, jotka ovat samat koko kaikissa koneissa.
>> Jos olet nähnyt jotain uint32_t, et välttämättä
ei nähnyt sitä.
Se tietotyyppi.
Tämä sanoo, on 32 bittiä ei väliä mikä kone tämä on.
Joten kun ihmiset ovat kirjallisesti kannettava koodia, he luultavasti ei käytä ints.
He sen sijaan käyttää näitä muita tietoja tyyppejä, että he tietävät on sama
Koko jokaisesta koneeseen.
Madhu.
>> Madhu: Minulla oli kysymys tietojenkeruuprosessiin.
Joten jos olet kirjoittamassa ohjelma, joka käyttää kirjaston kuten CS50 tai jotain
niin, tiedän, että kirjasto on, jossain vaiheessa olla
käännetty ja linkitetty sisään
Mutta kuinka paljon se tapahtuu aikana kooste ohjelmasi?
Mikä osa kyseisen kirjaston prosessi tapahtuu, kun olet
koota oma ohjelma?
>> JASON HIRSCHHORN: Joten mennään yli yleensä seuraavat vaiheet tässä prosessissa.
Kirjoitat. C-tiedosto.
Teidän. C-tiedoston, sinun # sisällyttää header kirjastoja, esimerkiksi cs50.h.
Mitä se terävä sisältävät line tehdä oman ohjelman?
Akchar.
>> AKCHAR: Se lisää prototyyppejä toimintoja header
tiedostoja kirjastoissa.
>> JASON HIRSCHHORN: Aivan.
Se lisää näiden toiminto prototyyppejä koodisi.
Joten kun koodi on koottu alkuvaiheessa, kääntäjä tietää
että nämä toiminnot todella olemassa, ja että jossain ne on määritelty.
. H-tiedostot eivät sisällä määritelmiä näille toiminnoille tai miten
he tosiasiallisesti työskentelevät.
Cs50.h vain sisältää jotain, joka kertoo getString on todellinen asia, joka
voi tapahtua.
Ja standardio.h sanoo printf on todellinen asia, joka voi tapahtua.
>> Joten C-kielen kanssa tämän. Header tiedoston saa muuttuisi
koneella luettava koodi, joka lopulta saa muuttui binary
koodi, 0: n ja 1: n.
Ja se koodi, joka lopulta saa teloitettiin.
-L CS50 line - esimerkiksi kun olet kirjoittamassa kalahtaa -
ja sitten lisäät-L CS50, kirjoitat, että sisään
Ja näet, että.
Kun kirjoitat tehdä, sinun nähdä, että tien tänne.
Ja me näemme, että toinen, kun me koodin tai myöhemmin, kun me koodi.
>> Mutta se-l CS50 line tekee jotain hieman erilainen kuin
# include cs50.h.
Mitä tuo-l CS50 line tehdä?
Avi?
>> AVI: Haluan sanoa, että se yhdistää kirjaston funktion
soittaa, kuten. O tiedostoja.
>> JASON HIRSCHHORN: Niin kovin lähellä, jos ei nappiin.
-L CS50 vie binaaritiedoston ja sulautuu sen kanssa binääritiedosto.
Joten cs50.h, ei ole mitään järkeä kääntämällä cs50.h alkaen C-kieli binääri joka
kerta sitä käyttävät.
Se olisi typerää, koska se tuhlaisi paljon aikaa.
Joten se on jo laadittu ja kääntyi executable.
Ja nyt se aiotaan sulautetaan kanssa tiedoston lopussa.
Joten ne 1: n ja 0: n ovat menossa sulautua teidän kanssa
ja 0: n lopussa.
Joten nyt sinun todella on todellinen 1: n ja 0: n, jotka määrittävät, kuinka getString,
esimerkiksi toimii, tai miten printf, esimerkiksi toimii.
>> Ja lisätietoja, siellä lyhyt kääntäjät että Nate antaa, että
kannattaa tsekata, että menee läpi nämä vaiheet.
Mutta -
Kyllä.
>> Opiskelija: Ovatko ne aina. O tiedostoja kun he kirjastossa muodossa,
valmis yhdistetään, liittyy - kuten he ovat binäärikoodattuna?
>> JASON HIRSCHHORN: OK.
Mitä -
>> Opiskelija: Onko se aina selvillä kirjastot kun linkittää ne?
>> JASON HIRSCHHORN: Kyllä.
Joten ei ole. S tiedostoa, joka on konekielelle, joka on myös
arvoituksellisesti sinulle.
Sinun ei tarvitse huolehtia niistä.
Mutta yleisesti, joo, he olla. O tiedostot valmiina.
>> Opiskelija: Joten kun aluksen kirjasto, sinä vain lähetettäväksi
. h ja. O?
Sinun ei toimiteta. C tai. S.
>> JASON HIRSCHHORN: So -
ja tämä on tässä lyhyessä samoin, jos tämä tieto näyttää tulevan
vähän nopeasti.
Mutta lyhyt kääntäjät puhuu tästä samoin.
Kun lähetät kirjasto, jos alus . h, header-tiedosto, nämä
toiminto prototyyppejä, ja 1: n ja 0: n, siinä kaikki sinun täytyy antaa.
Sinun ei tarvitse antaa, miten toiminto toimii,. C-tiedosto.
Koska pisteen abstraktio, tai kohta API, kohta tällä SPL,
Stanford kannettava kirjasto, se on voit ei tarvitse huolehtia siitä, miten uusi
GRect toimii, tai miten siirtää töitä, tai miten lisätä teoksia.
Kaikki mitä sinun tarvitsee tietää on, että lisäosa on toiminto, jonka voit
käyttää, ja se tekee tämän.
Joten sinun ei todellakaan tarvitse osata se on kirjoitettu C. Sinun tarvitsee vain
tiedä, tässä on toimintoja, mitä he tehdä, ja tässä on 1: n ja 0: n
kun todella haluat käyttää niitä.
>> Cool.
Kysyttävää Kääntäjätekniikan tai muita aiheita pöydällä?
>> Opiskelija: Minulla on kysymys täytäntöönpanosta rekursiivinen toiminnot.
Kysymys rekursio.
Minulla oli tunne, että voisi keksiä.
Joten nopeasti läpi rekursio tiettyyn
Esimerkiksi kertoma toiminto.
Koska tämä on esimerkki siitä, että usein tulee ylös tai käytetään
havainnollistaa rekursio.
>> Joten "4!" tulkitaan 4 kertoma.
Ja mitä 4 kertoma tarkoittaa?
Mitä se tekee?
Miten lasketaan 4 kertoma?
4 kertaa 3 kertaa 2 kertaa 1.
>> Joten toinen tapa kirjoittaa 4 kertoma on kirjoittaa tämän.
4 kertaa 3 kertoma.
Koska 3 kertoma on 3 kertaa 2 kertaa 1.
Joten 4 kertaa 3 kertoma on 4 kertaa 3 kertaa 2 kertaa 1.
Siksi kertoma on suuri ehdokas rekursio, koska se on
selvää, että on jotain, joka tapahtuu yhä uudestaan ​​ja uudestaan ​​päälle
pienempi määrä asioita, kunnes tulet loppuun.
Kun tulet 1, 1 kertoma on 1.
Et voi mennä paljon pidemmälle.
0 kertoma on myös määritelty 1.
Joten kun saat 1 tai 0, olet lopussa, ja voit
alkaa menee takaisin ylös.
Joten jos halusimme kirjoittaa rekursiivinen funktiota kertoma,
aiomme kirjoittaa joitakin pseudokoodi että nyt.
Ennen kuin voimme kirjoittaa että pseudokoodina -
Annan teille pari minuuttia kirjoittaa pseudo koodia tai vain ajatella
siitä - on kaksi asiaa joka rekursiivinen funktio tarvitsee.
Mitä ovat nämä kaksi asiaa?
>> JACK: Se on kutsua itseään.
>> JASON HIRSCHHORN: Noah?
Voi, Jack.
Mennä eteenpäin.
>> JACK: Se on kutsua itseään.
>> JASON HIRSCHHORN: So rekursiivinen toiminto tarvitsee rekursiokutsu,
soittaa itselleen.
Se on yksi.
Ja mikä on toinen asia?
>> JACK: perustapaus.
>> JASON HIRSCHHORN: perustapaus.
Pohja tapaus on, tässä on kun lopettaa.
Joten funktio saa kutsutaan.
Perustapauksessa tulee ensin.
Haluatko tietää, jos olet lopussa.
Ja jos et ole lopussa, voit tee rekursiokutsu.
Ja mennä läpi tämä toiminto uudelleen, Tarkista base tapauksessa uudelleen.
Jos et ole loppua, teet toinen rekursiokutsu,
jne., jne..
>> Siksi rekursiivinen toiminnot aina Tarvitsen ne pohja tapauksissa ja nämä
rekursiokutsua.
Jos sinulla ei ole rekursiivinen kutsu, se ei olisi rekursiivinen funktio.
Jos sinulla ei ole pohja tapauksessa menisit ikuisesti ja
ei olisi loppua.
Ja pohja tapauksessa tulee aina ensin, koska olet aina kannattaa tarkistaa
jos olet lopussa ensin.
Joten ennen kuin voimme tehdä joitakin pseudokoodina, miksi et kestää hetken miettiä
miten rekursiivisen olisi kirjoitettu?
>> Myös peräti olet tekemässä, kirjallisesti sen ulos paperille on
mitä olet menossa on tehdä tietovisa huomenna.
Joten luultavasti hyvä käytäntö tehdä Muista koodin olet kirjoittamassa
alas paperille -
tai voit tehdä sen.
Tiedätkö, missä puolipisteitä ovat.
Muistat syntaksin.
Koska et voi olla kääntäjä kertoa teille tehnyt virheen.
>> Myös samoilla linjoilla, huomenna, jolloin olet koodaus ongelmia, jos
ryntäsi aikaa, tai jos olet hyvin hämmentyneitä siitä, kuinka sinun pitäisi
kirjoittaa erityisesti asia C, se behoove voit kirjoittaa pseudo-koodi
tai kirjoittaa kommentteja samoin.
Koska siellä on osittainen luottoa Paljon kysymyksiä tietokilpailu.
Joten saatat olla kova kiire, tai et ehkä vain sekoittaa.
Kirjoittaminen kommentteja tai pseudo-koodi ovat usein tapoja, joilla voit
voi saada osittaista luottoa.
>> Joten älä jätä jotain tyhjä on tietokilpailu.
Ei ole rangaistuksia asettaa asiat sisään
Itse asiassa, ottamalla pseudo-koodi tai kommentit aikoo auttaa luokkalainen
selvittää, jos todella tiedät mitä puhut, ja ehkä palkinto
sinulle osittainen ansiona.
>> Myös tämänsuuntainen, kirjoittaa selkeästi.
Jos emme voi oikeastaan ​​mitä olet kirjoittamassa, emme aio soittaa
keskiyöllä huomenna kuva mitä kirjoitit.
Olemme juuri menossa ottamaan pois pistettä.
Kirjoita selvästi, jotta voimme kuulla, tai pikemminkin, voimme lukea mitä kirjoitit.
>> Ja jos se sanoo kaksi lausetta, älä kirjoita kappale.
Seuraa ohjeita.
Kirjoittaa selkeästi.
Ja kirjoittaa näitä kommentteja tai pseudokoodi kysymyksiä, jotka voisivat
palkinnon osittainen luottoa.
>> OK, mennään kertoma.
Joten meillä on funktio kertoma.
Jos olisin todella kirjoittaa tämän C, mitä minun täytyy laittaa ennen nimen
funktion?
Palautuva, joka tässä tapauksessa, annamme sen int.
Ja sitten sisällä aaltosulkeiden, on mitä menee sisälle aaltosulkeiden varten
funktio?
>> Opiskelijat: Argumentti tyyppi.
>> JASON HIRSCHHORN: Sen väitteet.
Joten kertoma luultavasti ottaa argumentti.
Se luultavasti vain yhden argumentin.
Ja me sanomme sen otan kokonaisluku nimeltä x.
Ja taas, kun kirjoitat prototyyppi toiminto tai kirjallisesti toiminto
koodissa ennen kuin ne määrittelevät sen, et kirjoittaa dataa tyyppi ja nimi
että muuttuja tätä toimintoa vain.
Joten voit siirtää joitakin numero tähän toiminto, se tulee nimitystä x
sisäisesti.
>> Meillä on kertoma toimintoa.
Tarvitsemme kaksi asiaa, perustapaus ja rekursiokutsu.
Mikä on perusta tapauksessa kertoma?
Joku joka kirjoitti sen ulos ja joka ei ole puhunut vielä, mikä on perusta
tapauksessa kertoma?
>> Opiskelija: Jos n on pienempi kuin 2, paluu 1.
>> JASON HIRSCHHORN: Jos n on alle 2, paluu 1.
Pidän siitä, koska se huolehtii 0 ja 1.
Joten teemme x <2, paluu 1.
Jos saamme kulunut 0, jos saamme kulunut 1, tämä toiminto
välittömästi palautettava 1.
Jos saamme saavuttanut muutamia suurempi, tai yhtä suuri kuin 2, aiomme
on meidän rekursiokutsu.
>> Ja niin miten on, että menossa töihin?
Voiko joku muu, joka työskennelleet tämän joka ei ole puhunut vielä antaa minulle
rekursiokutsu tätä toimintoa pseudokoodilla?
Jos saamme hyväksyttiin numero x ja se on suurempi kuin 2, mitä
haluamme tehdä?
Meillä on myös esimerkki kirjoitettu puoli, joka saattaa antaa sinulle vihjeen.
>> Opiskelija: Soita x kertaa kertoma x miinus 1?
>> JASON HIRSCHHORN: Aivan oikein.
Aiomme palata x kertaa kertoma x miinus 1.
Ja että vaikka kirjoitin ylös, pohjimmiltaan, mitä sanoitte Englanti,
Tämän kertoma toiminto saavat soitti taas.
Se tulee suoritettavaksi x miinus 1.
Se palauttaa joidenkin kokonaisluku, ja niin se tulee moninkertaistaa nämä kaksi
yhteen, ja että arvo on palasi riippumatta kutsui tätä
kertoma-toiminto, joka saattaa toinen esimerkki
Tämän kertoma toiminnon.
>> Niin että on esimerkki rekursiivinen toiminto, erittäin
yksinkertainen rekursiivinen funktio.
Mutta useimmat heistä olla näin.
Jos haluat hyvän rekursiivinen haaste tietokilpailu, kokeile koodaus
binäärihaku rekursiivisesti.
Koska jos teit binäärihaku varten ongelma asettaa kolme, luultavasti teki sen
iteratiivisesti while-silmukka.
>> Mutta se voidaan myös kirjoittaa rekursiivisesti.
Olet menossa tarvitse kirjoittaa oman erillinen toiminto, joka vie jonkin
eri komentorivin argumentteja - tai ei komentorivin argumentteja, jotkut
Eri vain säännöllisesti argumentteja.
Mutta voisit kirjoittaa binäärihaku rekursiivisesti samoin.
>> Opiskelija: Joten voi myös kirjoittanut, sijasta x miinus 1, voit
olisi voinut myös kirjoittanut x miinus miinus, tai sinulla voisi olla
kirjallinen minus minus x.
Voisitko selittää todella nopeasti, miksi nämä olisivat eri asioita,
kuten mitä eroa on x miinus miinus ja miinus miinus x?
>> JASON HIRSCHHORN: Ei, en ole mene tuohon.
Mutta aion puhua teille siitä jälkeen luokka. x minus minus, minus minus x
vähentääksesi x 1.
Mutta he tekevät sen hieman eri tavalla.
Mutta en halua mennä tuohon.
Muut kysymykset rekursio tai tätä toimintoa?
Se ei ole oikeastaan ​​edes pseudokoodina.
Se on pohjimmiltaan koodi C voisitte kirjoittaa tästä.
>> OK, muita kysymyksiä aiheista täällä?
Joo.
>> Opiskelija: Minulla on nopea pilaantunut liukuluku ja tarkkuutta.
>> JASON HIRSCHHORN: Kelluva kohta ja tarkkuutta.
Voiko joku todella nopeasti anna minulle pilaantunut
liukuluku ja tarkkuus?
Te kaikki piti tehdä tämä teidän Harjoitus, joten olet kaikki
perehtynyt siihen.
Tai ehkä ei kaikki.
Kukaan?
Anna minulle alkoi paikalla.
Liukuluku ja tarkkuutta.
Mikä on ongelma?
Kyllä.
Victoria?
>> VANESSA: Vanessa.
>> JASON HIRSCHHORN: Vanessa.
Anteeksi.
>> VANESSA: On vain rajallinen määrä numeroita, joka voidaan esittää
koska olet, meidän tapauksessa 32-bittinen järjestelmä.
Joten sinulla sellainen on muodostavat joitakin numeroita.
>> JASON HIRSCHHORN: Niin, että Aivan oikein.
On olemassa vain tietty määrä numerot, jotka voidaan esittää.
Jos kerrot kaksi erittäin suuri määrä, se saattaa vuotaa määrä
tilojen sinulla on edustettava kokonaisluku.
Siksi joskus käytämme pitkä pitkä sijasta int.
Joka on enemmän tiloja.
Joka voi olla suurempi määrä.
>> Liukuluku tarkkuus on tekemistä että, mutta on myös tekemistä
Se, että desimaaliluvut ovat ei aina edustettuna.
Anteeksi.
Sanon tämän takaisin ylös.
Desimaaliluku 1.0 ei ole aina edustajanaan kuten arvata saattaa,
1,000000000.
Se on joskus edustettuina +1,000000001 Tai 0,999999999.
Se saattaa olla jopa 89 heitetään siellä jossain.
Joten ne desimaalin numerot eivät ole on ollut täsmälleen kuin olisit
odottavat, että heitä edustaa.
>> Joten ongelma set -
se oli kaksi? -
ongelma asettaa kaksi, jossa käsitellään liukuluvut, kun halusimme
nämä edustamaan mitä halusimme ne edustavat, numero
penniä, tai sentteinä, me kerrottava ne 100.
Me pyöristetty niitä.
Ja sitten leikkaamme kaiken takana desimaalin tarkkuudella.
Se oli varmistaa, että ne olisivat oikeastaan ​​yhtä mitä halusimme
ne olisi yhtä suuri.
>> Koska kun otat jotain, joka on float ja muuttaa sen int, voit
katkaista kaiken oikealle desimaalipilkun.
Koska siellä on joitakin liukuluku epätarkkuus, 100.000 ehkä
edustettuina 99,999999999.
Ja jos vain leikata pois kaiken oikea heti, olet menossa
saada väärä numero.
Joo.
>> Opiskelija: Minulla oli kysymys noin valu.
Missä järjestyksessä se tapahtuu?
Jos haluat tehdä kellua, kannattimet, 1 jaettuna 10, se ei 1 jaettuna 10,
sitten saada 0,1, kytke se float?
>> JASON HIRSCHHORN: Jos teet float 1 jaettuna 10 -
>> Opiskelija: Joo, ja sitten vastaa -
No, se olisi normaalisti on se yhtä -
Joo.
Haluat tehdä sen kellua, eikö?
>> JASON HIRSCHHORN: OK, joten aiomme käyttää sitä segue osaksi miettiminen
vastauksia näihin kysymyksiin kautta koodausta.
Koska sinun on todennäköisesti paljon Näiden minuutti kysymyksiä, ja hyvä tapa
ratkaisemaan niitä on kautta koodausta.
Menemme siis koodaamaan tätä juuri nyt, ja sitten me aiomme mennä takaisin ja
koodata kysymys sinulla oli.
>> Joten ensimmäinen rivi -
Minun ei olisi pitänyt kirjoittanut - mikä on Ensimmäinen asia, jota haluamme tehdä, kun me
avata uuden tiedoston gedit?
>> Opiskelija: Sisällytä.
>> JASON HIRSCHHORN: Sisällytä mitä?
>> Opiskelija: CS50 kirjasto.
>> JASON HIRSCHHORN: OK.
Mitä muuta meidän pitäisi sisältää?
Olemme juuri menossa tarkistaa, mitä tapahtuu kun heität jotain kellua.
Mutta mitä me tarvitse sisällyttää, jos olemme aikoo kirjoittaa C-ohjelma?
>> Opiskelija: Vakio I / O.
>> JASON HIRSCHHORN: stdio.h.
Emme itse asiassa tarvitse, tämän ohjelma, cs50.h, vaikka se on
aina hyödyllistä sisällyttää se.
Mutta emme aina tarvitse stdio.h.
>> Opiskelija: Kun koodaus C?
>> JASON HIRSCHHORN: Kun koodaus C.
>> Joten en tallenna se tästä. C-tiedosto.
Saan muutamia kivoja syntaksin korostus.
Kirjoitin mitätön sisällä tärkein.
Mitä void tarkoittaa?
>> Opiskelija: Ei tehdä mitään komentorivin argumentteja.
>> JASON HIRSCHHORN: Void keinoja, tässä tapauksessa tärkein ei ota mitään
komentorivin argumentteja.
Muissa tapauksissa, se tarkoittaa, että toiminto ei ota komentorivin argumentteja.
Tai toiminto, jos olisin kirjoittaa void main (void), joka sanoisi Mainin
eivät palaa mitään.
Joten void juuri merkitse mitään.
Mitä kirjoittaisin jos olisin ottaa komentorivin argumentteja?
>> Opiskelija: int arc c string arc v.
>> JASON HIRSCHHORN: int argc merkkijono argv.
Onko näin?
>> Opiskelija: Se on char tähden argv suluissa.
>> JASON HIRSCHHORN: Joten voi kirjoittaa merkkijono argv suluissa tai nieriää tähden argv
suluissa, mutta sinun täytyy suluissa.
Koska argv on array merkkijonojen, muistaa.
Se ei ole vain yksi merkkijono.
Joten merkkijono argv on, tässä yksi merkkijono kutsutaan argv.
Merkkijono argv suluissa, tässä Merkkijonotaulukko.
Joten int argc merkkijono argv suluissa olisi jotain, että olen
luultavasti kirjoittaa.
>> Joten halusit tallentaa kokonaisluku?
>> Opiskelija: Joo, kokonaisluku.
Tai float.
>> JASON HIRSCHHORN: In float?
Like, float x on yhtä kuin 1 jaettuna 10.
>> JASON HIRSCHHORN: OK.
Miten tulostaa float Printf?
Mitä?
>> Opiskelija:% f.
>> JASON HIRSCHHORN:% f.
Mikä on kokonaisluku?
d tai i.
Mikä merkkijono?
>> Opiskelija: s.
>> JASON HIRSCHHORN: s.
Miten saan uuden linjan?
>> Opiskelija: Backslash n.
>> JASON HIRSCHHORN: Mitä voin palata jos tärkein toimii oikein?
>> Opiskelija: 0.
Onko minun täytyy kirjoittaa, että linja, vaikka?
>> Opiskelija: No
OK, emme kirjoita sitä sitten.
Voivatko kaikki lukenut, että?
Se näyttää vähän pieni.
Voivatko kaikki nähdä, vai pitäisikö Teen sen isompi?
Uskon kamera, teemme se vähän isompi, vaikka.
>> JASON HIRSCHHORN: Jos haluan tehdä tästä . C tiedosto executable, mitä
voin kirjoittaa?
>> Opiskelija: Tee testi.
>> JASON HIRSCHHORN: Anteeksi?
>> Opiskelija: Tee testi.
>> JASON HIRSCHHORN: Tee testi.
Puhuimme tätä linjaa aikaisemmin.
Kalahtaa.
Mitä kalahtaa?
Nimi kääntäjä.
Mikä tämä linja?
>> Opiskelija: Asettaa sen käytöstä GDB.
>> JASON HIRSCHHORN: setit sen käytöstä GDB.
Tämä linja, mikä tuo on?
>> Opiskelija: Lähdekoodi.
>> JASON HIRSCHHORN: Tuo lähdetiedoston. C-tiedosto.
Mitä nämä kaksi riviä tehdä?
Tai nämä kaksi eivät riviä.
>> Opiskelija: Se nimiä sitä testata.
>> JASON HIRSCHHORN: Eli viiva o sanoo, name it jotain eri tavalla.
Ja tässä soitat sen testin.
Jos minulla ei ole, että, mikä se nimi on?
>> Opiskelija: a.out.
>> JASON HIRSCHHORN: a.out.
Mitä tämä tekee?
>> Opiskelija: Linkit matematiikka kirjasto.
>> JASON HIRSCHHORN: Se yhdistää vuonna matemaattisen kirjaston.
Meillä ei sisältynyt matemaattisen kirjaston, mutta koska se on niin yleistä, he ovat
kirjoitettu tehdä aina sisällyttää matematiikka kirjasto.
Ja samoin, tähän sisältyy CS50 kirjasto.
>> OK, joten jos me luettelo, meillä on nyt suoritettavan nimeltään testi.
Voit suorittaa sen, minä kirjoitan testi.
Näen, että minun liukuluku, odotetusti, on yhtä kuin 0.
Tekee sen -
niin -
>> Opiskelija: Sitten jos laitat kellua nyt kuin heität sen float -
>> JASON HIRSCHHORN: Cast 1 kellua?
>> Opiskelija: Ei, heittää koko asia -
joo.
Jos teit, että olisi jotka tekevät sen 0,1?
>> JASON HIRSCHHORN: OK, niin todella nopeasti, 1 jaettuna 10, ne ovat
kokonaislukuja jakautuvan.
Joten kun jaat kokonaislukuja, he 0, ja säästät että 0
kellua, koska slash on vain kokonaisluku jako.
Joten nyt olemme siirtymässä jotain osaksi float.
>> Katsotaan, mitä tapahtuu.
Teemme testin.
Joten nyt näemme, että hakkuutähteellä ei ollut kokonaisluku alue, se on kelluva
kohta jako.
Koska yksi sen perustelut oli heitetty sen kellua.
Joten nyt se sanoi, käsitellä tätä jako kuten olemme tekemisissä
kelluva pistettä, ei kokonaislukuja.
Ja niin saamme vastauksen odotamme.
>> Katsotaan, mitä tapahtuu -
oho.
Jos haluaisin tulostaa enemmän desimaalin paikkoja, miten voisin tehdä?
>> Opiskelija: Point piste F, tai niin monta desimaalia kuin haluat.
>> JASON HIRSCHHORN: Joten voin tulostaa 10 desimaalin paikkoja.
Ja näemme nyt olemme pääsemässä outoja juttuja.
Ja että menee takaisin kysymykseen noin liukuluku epätarkkuus.
On outoa tavaraa säilytetään täällä.
>> OK, tuo kysymykseesi?
Mitä muuta haluat koodata nopeasti?
>> Opiskelija: Halusin vain nähdä, onko ei, jos vapauttanut joitakin osoitin,
onko tämä osoitin vielä oli tallennettu se osoite mitä se oli ollut
osoittaa aiemmin.
>> JASON HIRSCHHORN: OK, niin tehdään se.
Char tähden PTR, tämä luo muuttujan nimeltään PTR tyypin char tähti.
Kuinka kirjoitan malloc?
Alden?
>> ALDEN: Vain malloc.
Mutta sitten sen täytyy olla koko, ja Tässä tapauksessa en voi kai
osoittavan char.
Niin se olis char.
>> JASON HIRSCHHORN: OK, niin enemmän yleisesti, Inside -
Katsotaanpa muokata.
Sisällä malloc, haluatko numero tavujen kasaan.
Yleensä mitä olemme nähneet, että olemme tekemässä on aiomme malloc
jouset, esimerkiksi, tai ryhmät kokonaislukuja.
Joten jos haluamme 10 kokonaislukuja tai 10 merkkiä, 10 antaa meille 10.
Ja sitten koko merkkiä antaisi meille, että koko merkkiä, joka
Tässä tapauksessa on 1 tavu.
Saamme 10 tavua.
Jos meidän pitäisi kirjoittaa koko int, joka antaisi meille 40 tavua.
>> Joten lisää yleisesti, sisällä malloc on tavujen haluat.
Tässä tapauksessa emme saa 1 tavu.
Joka tuntuu oudolta käyttöä malloc, mutta meidän
tarkoituksiin järkevää.
Joten ei tuo.
>> Aiomme soittaa ilmaiseksi.
Me päästä siitä eroon ja käytämme PTR uudelleen.
Ja mitä sinä haluat tarkistaa?
>> Opiskelija: Halusin vain tarkistaa, onko tai ei ollut mitään
sen sisälle.
>> JASON HIRSCHHORN: Joten onko se huomautti mitään?
>> Opiskelija: Joo, tarkalleen, onko se oli vielä muistissa osoite.
>> JASON HIRSCHHORN: Haluat tarkistaa arvoa PTR?
>> Opiskelija: Joo, aivan.
>> JASON HIRSCHHORN: Mitä minä kirjoitan täällä jos haluan tarkistaa arvoa
kohta - mitä on, Jordania sanoi, arvo?
Tai mikä on varastoitu sisällä PTR?
>> Opiskelija: muisti osoite.
>> JASON HIRSCHHORN: muisti osoite.
Joten jos kirjoitan vain tätä, se tulee antaa minulle arvo PTR.
Ja miten voin tulostaa muistiosoitteen?
Mikä muotomerkkijonoa ja muistin osoite?
>> Opiskelija:% s..
>> JASON HIRSCHHORN:% s..
% S on merkkijono.
% P osoitin.
Onko näin?
Se on oikein.
Joten PTR vastaa -
se on vielä jotain se.
Tämä on luultavasti enemmän mielenkiintoinen kysymys.
Mitä tämä linja tehdä?
>> Opiskelija: Seg viat.
>> JASON HIRSCHHORN: Mitä?
>> Opiskelija: Minusta se segmenteille viat.
>> JASON HIRSCHHORN: Hm?
>> Opiskelija: Minusta tulee segmenteille vika.
>> JASON HIRSCHHORN: Eli tämä rivi koodia, tähti ptr, mitä
ei tähti tarkoittaa?
>> Opiskelija: sisältö.
>> JASON HIRSCHHORN: Joo.
Mennä saada sisältöä.
Joten tämä on menossa muisti käsitellään siellä ja anna se minulle.
Käytin% c täällä, koska siellä ovat merkkejä tallennetaan sinne.
Joten aiomme mennä kyseiseen osoitteeseen me juuri näin - tai se varmaan
hieman erilainen tässä aika suorita ohjelma.
Mutta menemme tähän osoitteeseen jonka tiedämme edelleen olemassa
ja katso, mitä siellä.
>> Joten se ei segmenteille vika.
Se vain ei antanut meille mitään.
Se saattoi olla todella antanut meille jotain, emme vain voi nähdä sitä.
Ja juontaa tätä ajatusta -
ja emme tule saamaan liikaa tätä, koska se on yli
kuulu tämän kurssin.
Mutta puhuimme täällä, jos me ylittää rajat array
1, emme ehkä joudu vaikeuksiin.
>> Joskus, kun vain mennä pois 1, teet jotain väärin, ja te
voisi joutua vaikeuksiin.
Mutta et aina pulaan.
Se riippuu kuinka paljon huono asia sinua do, olet menossa joutua vaikeuksiin.
Joka ei ole sanoa, huolimaton koodin kanssa.
Mutta se on sanottava, ohjelma ei aina lopettaa, vaikka menet jonnekin
et pitäisi mennä.
>> Hyvä esimerkki tästä on, paljon ihmisiä heidän Harjoitus 3, joka
oli 15, ei tarkista rajat aluksella.
Joten kun katsoin vasemmalle, katsoin oikeus, katsoin ylös, näytti
pohjaan.
Mutta et tarkistaa, onko alkuun oli todella olemaan hallituksessa.
Ja paljon ihmisiä, jotka teki sen ja kääntyi, että niiden ohjelma toimi
täydellisesti, koska jos kyseinen elin oli tallennetaan muistiin, jos meni yksi
yläpuolella tai tarkastettu, että muisti osoite, siellä ei ollut mitään
Erityisen kamala siitä, joten sinulla ei ollut
menossa huutaa sinulle.
>> Mutta meillä olisi silti ottaa pois pisteitä, jos et tarkista, että koska olet
tekivät jotain et ollut pitäisi tehdä, ja sinulla voisi olla
joutunut tekemisiin.
Kertoimet ovat kuitenkin luultavasti ei.
Joten tämä on osoittaa, että kyllä, voimme silti mennä sitä.
Ja emme päästä sisään ongelmia tässä asiassa.
Jos yritimme tehdä lukea Seuraavan 100 merkkiä, olisimme
luultavasti joutua vaikeuksiin.
Ja voit koodin lukeminen seuraava 100 merkkiä, jos haluat tekemällä joitakin
tavallaan silmukan.
Joo.
>> Opiskelija: Koska saimme tehtäväksi, että space todellinen arvo, emme olisi
todella voi nähdä mitään.
Pitäisikö meidän kokeilla myös asettaa, että sama kuten C tai jotain?
>> JASON HIRSCHHORN: Suuri kysymys.
Miten määritän, että arvo -
mitä koodiriviä voin kirjoittaa verkossa seitsemän tehdä mitä sanoit?
>> Opiskelija: Star ptr vastaa yhden quote c lopettaa yksi tarjous.
>> JASON HIRSCHHORN: Niin, että laskemisesta luonne, c, kyseiselle paikalle,
koska jälleen, että tähti tarkoittaa mennä sinne.
Ja kun sitä käytetään vasemmalla puolella sijoitusoperaattori, joka vastaa
allekirjoittaa, emme aio saada, että arvoa niin paljon kuin asettaa tämän arvon.
Katsotaanpa nyt, mitä tapahtuu.
>> Laitoimme jotain siellä ja se oli siellä.
Soitimme ilmaiseksi.
Joitakin juttuja todennäköisesti käynyt kasaan.
Joten se ei ole siellä enää.
Mutta jälleen kerran, emme saa pulassa menossa sinne.
>> Teen tämän ulos koodin havainnollistaa että monet näistä
kysymyksiä, että sinulla on, he ovat todella mielenkiintoista
vastaa paljon aikaa.
Ja he todella hyviä kysymyksiä.
Ja voit selvittää ne ulos oman jos esimerkiksi
Emme ole jaksossa.
Joo.
>> Opiskelija: Koska et ole lähettämistä osoitin mihin tahansa, sinun ei tarvitse
käyttää malloc?
>> JASON HIRSCHHORN: Eli tämä menee takaisin sinun alkuperäiseen kysymykseen.
[? ?]
Onko se vain paikallinen muuttuja?
Malloc täällä ei ole niin vakuuttava.
Käyttö malloc tässä ei ole että pakottavia koska se on
vain paikallinen muuttuja.
>> Opiskelija: Voisitko tehdä char tähden PTR vastaa haloo?
>> JASON HIRSCHHORN: Oh.
Joten aiomme nyt saada takaisin sinun alkuperäiseen kysymykseen.
Luulen et ollut tyytyväinen vastaukseeni.
OK?
Pidätkö siitä?
>> Opiskelija: Joo.
Odota.
>> JASON HIRSCHHORN: Ja missä haluat tulostaa?
Niin me tulostaa merkkijonon tuollainen?
>> Opiskelija: Mielenkiintoinen.
>> JASON HIRSCHHORN: Eli tämä sanoo Väite on tyypin luonnetta.
Joten tämä olisi merkki.
>> Opiskelija: vain vie ensimmäinen.
>> JASON HIRSCHHORN: Eli tämä on mitä sanoin.
Kuten sanoin, se ei ole tallentaa string sisällä muuttuja osoitin.
Se tallentaa -
>> Opiskelija: ensimmäinen arvo merkkijonon.
>> JASON HIRSCHHORN: osoite Ensimmäinen arvo merkkijono.
Jos olisimme tulostaa tämän, olemme saada arvon sisällä osoittimen.
Ja näemme se on, todellakin, muistin osoite.
>> Onko järkeä?
Anteeksi.
Odota, Vastaako tuo kysymys, vaikka?
>> Opiskelija: Joo.
>> JASON HIRSCHHORN: Tämä rivi koodia on luoda merkkijono ja sitten toinen
muuttuja osoitin, joka osoittaa tähän merkkijono, että jono.
Joo.
>> Opiskelija: Joten jos menimme muistista käsitellään edelleen, saisimme h?
Onko se tallennetaan merkkijono?
>> JASON HIRSCHHORN: Like, teimme -
joten tämä on arvokas tehtävä.
Tämä on kohta aritmeettinen, jonka te ole ennen nähnyt ja se olisi
melko mukava.
Tämä on kuin kirjallisesti -
jos me kirjoittaa tämän Koodirivin olemme nähneet array merkintää ennen.
Tämän pitäisi antaa meille toisen arvoa tässä array, h.
>> Jos emme tätä, tämän pitäisi myös antaa meille toinen arvo kyseisessä array.
Koska se tulee olemaan muistia osoite ensimmäinen asia, mutta
muisti osoite asia yksi yli.
Ja sitten tähti operaattorin dereferences että osoitin.
Ja vielä, katsotaanpa.
Saamme h uudelleen.
>> Opiskelija: Mikä tekee dereference tarkoittaa?
>> JASON HIRSCHHORN: dereference on fancy sana mennä.
Mene siitä ja saada mitä siellä on dereference osoitin.
Se on vain hieno sana siitä.
>> Opiskelija: Jos haluaisimme tulosta koko jono, voisimmeko
tehdä et-merkki osoitin?
>> JASON HIRSCHHORN: OK, olemme menossa tauko täällä.
Aiomme pääty tähän.
Ampersand antaa sinulle osoitteen sijainti, joten kun teet ampersand of
muuttuja, se antaa sinulle osoitteen jos tämä muuttuja tallennetaan.
Et-osoitin antaa sinulle osoite PTR jossa PTR on muistissa.
>> Emme aio mennä tämän esimerkin.
Voit selvittää nämä asioita itse.
Mutta jälleen kerran, tämä saattaa jopa olla hipoo vähän pidemmälle, mitä sinun tarvitsee tietää
kuulu tämän puolivälin -
tai tämän tietovisan pikemminkin.
Anteeksi.
>> Aiomme siirtyä, koska en haluavat tehdä yhden koodaus ongelma
ennen aika loppuu.
Ja aiomme koodata mitä ajattelen on kaikkein pakottavia näistä
esimerkkejä, atoi.
Joten tämä oli kysymys tietokilpailu kaksi vuotta sitten.
Ja minulla on sen aluksella tässä.
>> Ihmiset kysyttiin tietokilpailu -
he saivat hieman enemmän tesxt vuonna kysymys, mutta olen poistanut
tekstin, koska se oli tarpeetonta meidän kannalta nyt.
Se oli vain joitakin tausta mitä atoi teki.
Mutta te kaikki tiedätte ja ovat hyvin perehtynyt atoi.
>> Ehdotan koodia tämän on paperiarkille.
Ehdotan myös, että strategia että olemme menneet yli
paljon osiosta.
Ensinnäkin, varmista, että ymmärrät mitä atoi n tekemässä.
Piirrä kuva tai keksiä jokin mielikuva sen pään.
Seuraava, kirjoittaa pseudokoodihajota tästä.
On tietokilpailu, jos kaikki mitä saat on pseudokoodina, ainakin sinulla
laittaa jotain alas.
Ja sitten kartta että pseudokoodina päälle C. Jos sinulla on tarkistaa oman
pseudokoodina, kuten tarkistaa, jos jotain on 1, joka kartoittaa päälle, jos
kunnossa ja niin edelleen.
Ja lopuksi, koodaamaan ohjelmaa C.
>> Joten mene takaisin atoi ja kestää viisi minuuttia koodata tämä arkki
paperia, joka on luultavasti noin paljon aikaa sinulla ottaisi
tietovisa koodia atoi.
Viisi 15 minuuttia, viisi 12, viidestä 10 minuuttia, on noin määrä
aikaa haluat viettää tämän kysymys tietovisa.
Joten kestää viisi minuuttia nyt, kiitos.
Ja jos sinulla on kysyttävää, nostaa kätesi ja tulen ympärille.
>> [Puoli keskusteluja]
>> JASON HIRSCHHORN: OK, joten , joka oli viisi minuuttia.
Se oli luultavasti noin määrä kerran haluat viettää että tietokilpailu,
ehkä alapäästä tuolloin.
Me kertaus nyt vähän.
Aloitetaanpa koodauksen.
Ja jos emme saa kaikki läpi, vastauksia tähän ja tähän
tietokilpailu kysymys on saatavilla jälleen Syksy 2011 on tämä kysymys
ilmestyi tietokilpailu.
>> Ja se oli kahdeksan pisteen arvoinen on tietovisa sitten.
Kahdeksan pistettä on kalliimpien määrä pisteitä jotain kannattaa.
Useimmat kysymykset ovat välillä yhdestä kuuteen pistettä.
Joten tämä on haastavampaa kysymys, varmasti.
Voiko joku minua alkoi?
>> Yleensä mitä aiomme halua tehdä tätä
toimiakseen atoi loogisesti?
Mitä haluat tehdä?
Menemme siis kirjoittaa Joissakin pseudokoodina.
>> Opiskelija: Convert merkkiä osaksi kokonaislukuja.
>> JASON HIRSCHHORN: Convert merkkiä osaksi kokonaislukuja.
OK.
Joten kuinka monta merkkiä on meidän menossa täytyy mennä läpi?
>> Opiskelija: Kaikki.
>> Opiskelija: Kaikki merkit merkkijonon.
>> JASON HIRSCHHORN: Kaikki merkkejä merkkijonon.
Joten jos halusimme mennä läpi jokaisen merkin merkkijono, mikä on asia,
C olemme nähneet, että on mahdollistanut meidän käytävä läpi
merkki merkkijonon?
>> Opiskelijat: silmukka.
>> JASON HIRSCHHORN: silmukka.
Joten aiomme silmukan läpi jokaisen merkin s.
>> Sitten mitä aiomme halua tehdä kun saamme erityisluonnetta?
Sano menemme kulunut 90.
Saamme 9.
Se on merkki.
Mitä haluamme tehdä että merkki 9?
>> Opiskelija: Vähennä sen luonnetta 0?
>> OPISKELIJAN: Lisää 0?
>> JASON HIRSCHHORN: Miinus se merkki 0?
>> Opiskelija: Joo.
>> JASON HIRSCHHORN: Miksi haluat tehdä?
>> Opiskelija: [kuultavissa]
arvo.
Sen int arvo.
>> JASON HIRSCHHORN: OK, joten otamme luonne 9, vähennä sitä
merkki 0 päästä Varsinainen kokonaisluku 9.
Makea.
Ja mistä tiedät, että merkin 9 miinus 0 hahmo on 9?
Mitä kaavion sinä katsot?
>> OPISKELIJAN: On loogisesti yhdeksän paikkoja välillä 9 ja 0.
Tai voisit katsoa ASCII taulukossa.
>> JASON HIRSCHHORN: ASCII taulukossa.
Mutta kyllä, olet oikeassa samoin.
Joten me vähennä 0.
Joten nyt meillä on kokonaisluku 9.
Ja mitä haluamme tehdä sen kanssa?
Jos meillä on 90, se on ensimmäinen kokonaisluku olemme, mitä haluamme tehdä?
>> Opiskelija: veisin väliaikaiseen kokonaisluku array, niin tee matematiikka sille
myöhemmin tehdä siitä lopun.
>> JASON HIRSCHHORN: OK.
>> Opiskelija: Voit aloittaa lopussa array ja sitten eteenpäin niin
että joka kerta kun eteenpäin, voit moninkertaistaa sen 10.
>> JASON HIRSCHHORN: OK.
Kuulostaa melko pakottavia idea.
Voimme aloittaa lopussa meidän array, ja voimme käyttää strleng.
Voimme käyttää strleng täällä.
Pääsemme pituus meidän merkkijonon.
Aloitamme lopussa.
Ja + ensimmäinen, otetaan vain että kokonaisluku, ja ehkä luomme kuten
uusi Kokonaislukumuuttuja ylös missä me tallentaa kaiken.
Joten me silmukan läpi jokaisen nieriää s takaa eteen, vähennämme 0, ja
sitten otamme sen, ja riippuen missä se on, me moninkertaistaa sen
jonka teho 10.
Koska ensimmäinen, mitä me moninkertaistaa oikeanpuoleisin merkin?
>> Opiskelija: 10 0.
>> JASON HIRSCHHORN: 10 0.
Mitä me kerrotaan toisen oikeanpuoleisin merkin?
>> Opiskelija: [kuultavissa].
>> JASON HIRSCHHORN: Mitä?
>> Opiskelija: 10 1.
>> JASON HIRSCHHORN: 10 1.
Kolmannen oikeanpuoleisin merkki?
>> Opiskelija: 10 2.
>> JASON HIRSCHHORN: 10 2.
>> Opiskelija: Anteeksi, en ymmärrä mitä teemme täällä.
>> JASON HIRSCHHORN: OK, mennään takaisin sitten.
Joten aiomme saada hyväksyttiin merkkijono.
Koska olemme kirjallisesti atoi.
Joten saamme hyväksyttiin merkkijono.
Sano menemme ohi merkkijonon 90.
>> Ensimmäinen asia, aiomme tehdä, on asettaa uusi Kokonaislukumuuttuja että olemme
juuri menossa luoda kuin uusi kokonaisluku.
Sitähän me aiomme palata lopussa.
Meidän täytyy käydä läpi jokaisen merkin string koska olemme määritetty
että meidän täytyy koskettaa jokaista ja lisää se sitten uusi kokonaisluku.
>> Mutta emme voi vain lisätä sen numeron.
Emme voi vain ottaa 9 ja lisätä 9 meidän kokonaisluku.
Se riippuu siitä, mitä tapahtuu se on merkkijono.
Aiomme pitää lisääntyä sen teho 10.
Koska niin pohja 10 toimii.
>> Joten aiomme saada todellinen merkki tai todellinen kokonaisluku
numero, vähentämällä merkki 0 kirjasinmerkkiompeleiden 9 kuten teimme kanssa
vähentämällä hahmo pääomaa alkaen mitä merkki meillä oli yhdessä
näihin ongelmiin.
Niin me itse saada numero 0 9 tallennetaan reaaliluku, ja me
moninkertaistaa sen teho 10 riippuen missä olemme merkkijono.
Ja sitten me aiomme lisätä sen takaisin meidän uusi kokonaisluku muuttuja.
>> Joten mitä tämä näyttäisi olisi olla - me tehdä täällä.
Jos saamme kulunut merkkijono 90 -
>> Opiskelija: [kuultavissa].
>> JASON HIRSCHHORN: Mutta atoi vie merkkijono.
Joten aiomme käydä läpi tilalla.
Saamme hyväksyttiin 90.
Menemme takaisin eteen.
Otamme 0.
>> Opiskelija: Olen pahoillani.
Ehkä tämä on tyhmä.
Jos menemme hyväksyttiin merkkijono, miksi on 90, mitä olemme
saada kului?
Koska 90 on kokonaisluku.
>> JASON HIRSCHHORN: Koska atoi kestää merkkijono ja muuntaa sen kokonaisluku
edustus merkkijonon.
Mutta merkkijono 90 ei ole kokonaisluku 90 tai numero 90.
Merkkijono 90 on joukko kahden tai kolme merkkiä, vaan 9
merkki, 0 luonnetta, ja kenoviiva 0 luonnetta.
>> Ja me kirjallisesti atoi tarpeen, sillä Esimerkiksi kun otat komennon
argumentti, ja se on tallennettu argv, se tallennetaan merkkijono.
Mutta jos haluat pitää sitä numero, sinun täytyy muuntaa sen
Varsinainen kokonaisluku.
Jonka teimme yksi ongelma sarjaa.
Jonka teimme useita meidän ongelma sarjaa.
Jokainen, joka otti kokonaisluku kuin komentorivillä.
Joten siksi meidän atoi toiminto vie merkkijono.
>> Joten jälleen, meidän esimerkiksi täällä, me olemme vie viimeinen.
Aiomme vähentää merkin 0 siitä, koska merkit 0
vähennettynä merkki 0 saat todellinen määrä 0 mukaan
ASCII matematiikka, mitä teemme.
>> Koska merkit edustettuina eri kuin niiden todellinen -
merkki, esimerkiksi pienet on 97.
Se ei ole - oho!
Se ei ole mitä odottaa se on, 0, esimerkiksi.
Joten sinun täytyy vähentää merkin saada 0.
>> Joten aiomme tehdä sen täällä saada todellinen määrä.
Ja sitten me aiomme kertoa sen teho 10 sen mukaan, missä
on merkkijono, ja sitten ottaa että ja lisää se meidän paikka haltijalle
muuttuja jotta voimme keksiä meidän lopullinen uusi kokonaisluku.
Tarkoittaako tämä järkevää kaikille?
>> Joten emme aio koodin tähän juuri nyt, koska olemme
saada vähän aikaa.
Pahoittelen ajoituksen että.
Mutta tämä on mitä, toivottavasti, olisit voitava tehdä tietovisa - klo
Ainakin, saat tämän pseudokoodina kirjoitettuna.
>> Ja sitten, jos me kirjoittaa pseudokoodina, itse asiassa, voisimme tehdä tämän
melko nopeasti.
Jokainen rivi kommentit me kirjoitimme tässä tarkoittaa noin
yksi rivi C-koodia.
Julistamisesta uusi muuttuja, kirjoittaminen silmukka, jotkut vähennyslasku, jotkut
kerto-ja jonkin tehtävän.
Meidät luultavasti myös halua kirjoittaa paluulinjan.
Saatamme myös haluta laittaa joitakin tarkastuksia täällä.
Joo.
>> Opiskelija: Joten voimme hoitaa s kuin todellinen merkkijono?
Koska tiedän, se on vain osoite.
Kuten, miten saat pituus merkkijono johdettiin läpi?
>> JASON HIRSCHHORN: Joten miten merkkijonon pituuden?
Strlen.
>> Opiskelija: strlen, joo.
Mutta voit laittaa s kuten argumentti, että?
>> JASON HIRSCHHORN: So strlen vie char tähti.
Ja tästä seuraa, että char tähti, ja se pitää laskee, kunnes se pääsee
kenoviiva 0. strlen oli oikeastaan yksi muista ohjelmista me
olivat menossa koodia.
Se on toinen hyvä koodin.
Tuo on hieman helpompaa, koska jos aiot ajatella, että
käsitteellisesti -
Sanoin vain se ääneen - strlen seuraa osoitin ja pitää menossa ja
laskenta ja pitää kirjaa kunnes tulet kenoviiva 0.
>> Opiskelija: OK, sain sen.
>> JASON HIRSCHHORN: Joten paras onnea tietovisa 0 huomenna.
Jos sinulla on kysyttävää, minä ulkopuolella tämän jälkeen.
Ota yhteyttä sähköpostitse minulle.
Tavoittaa oman TF jos olet ei minun jaksossa, tai saan
sähköpostia jos haluat.
>> Jos haluat älyttömästi ja lähetä minulle sähköpostia, freakout sähköposti, minä
lähettää sinut takaisin, kuten, hymiö kasvot, tai, kuten, vitsi tai jotain.
Joten rohkeasti tehdä samoin.
Onnea jälleen, ja minä Nähdään kaikki ensi viikolla.