>> Ræðumaður 1: Hæ allir.
Við erum að fara að byrja.
Ég held að fólk er enn að fara til að vera að sía í.
En í þágu tíma, þannig að við getum fá ykkur héðan á réttum tíma,
við erum að fara að byrja.
Svo velkomin á CS50 Quiz 0 endurskoðun.
Fyrir þá sem hafa ekki áttað sig á enn, hefur þú spurningu á miðvikudag.
Woo-hoo.
>> Ef þú hefur ekki byrjað að læra enn eða hafa ekki áttað sig á að þetta er til enn,
Undanfarin Skyndipróf og allar upplýsingar um quiz þín eru á cs50.net/quizzes.
There 'sumir laglegur góður efni á það, Undanfarin Skyndipróf frá síðustu 10
ár sem og upplýsingar um þetta próf og efni
sem verður að falla.
Svo skulum við hefjast handa.
>> Svo þú krakkar gætu muna, fyrsta dagur í flokki Davíð hafði þá lampar á.
Svo í raun, allt sem fer á undir hetta af a tölva er
gert í tvöfaldur.
Binary þýðir það sem það hljómar eins, 0 og 1 er um.
Það eru tvö gildi sem Hægt er að fulltrúa.
>> Svo bara eins og á fyrsta degi á kafla Davíð sneri á ljósi
ljósaperur til að tákna á, eða 1, tölva okkar skilur tvöfaldur eins 0 og
1 er á eða burt.
Grunnatriði Binary.
Sérhver staður er fulltrúa í grunn tveimur.
Svo þú bæta 2 við 0 til 1 til 2 alla leið upp.
>> Að reikna út hvað tvöfaldur þitt er að aukastaf þú fylgir bara þessum jöfnu
tegund hlutur.
Ef þú ert með 1 í einhverjar af þeim stöðum, þú margfaldar það með hvaða
byggja það á, að bæta það upp, og þú færð aukastaf.
Svo er þetta hvernig þú treyst 5 í tvöfaldur.
Rétt eins og það sem við vorum að gera á Hjálp, þetta er hvernig þú myndir
tákna 1 til og með 5.
>> Á sama hátt, bara eins og þú getur bætt við og draga í aukastaf eða basa 10, eða
virkilega einhver stöð, á getur bætt og draga í tvöfaldur.
Einmitt það sem þú vildi búast við þegar þú bæta tvo upp, ef það er jafnt og meiri
en 1, þú bera a 1, gera það 0, og gera því að bæta þannig, bara
eins og þú vildi búast við reglulega aukastaf eða önnur stöð.
Cool.
>> Svo eins og ég sagði áður, allt að fer undir hetta tölva okkar
er gert í 0 og 1 er, eða tvöfaldur.
Svo hvernig gera við látum, til dæmis, bréf, eða tölur eða stafir?
Og svarið við því er ASCII.
>> ASCII er kortlagning á milli stafa að við myndum venjulega sjá í
Enska eins A er, B er, C er, undirstrika, bandstrik, og
eitthvað svoleiðis.
Og það kort sem við ASCII gildi.
ASCII gildi er bara tala sem er hægt að skilja við tölvuna.
Og rétt eins og þú getur gert viðbót og frádráttur með tölum, getur þú gert
þá með ASCII gildi.
>> Þannig að í þessu dæmi, hvað mun þetta prentað út?
Já, svo bara pláss B rúm C rúm D. Hvaðan mús minn fara?
Eftir að þú getur skilgreint int við 65.
Og þegar þú hefur prentað það út með því að nota prósent C, verður það að túlka það sem
eðli og prentar út A.
>> Á sama hátt getur þú lýsa það sem bleikju.
Og þegar þú hefur prentað það út með því að nota prósent C, verður það túlka það sem
prósent D. Og bara eins og þú getur bætt við númer, getur þú bætt við persónurnar eru
Gildi ASCII, í þessu tilfelli.
>> Svo smá bendillinn fyrir alla.
5, eins og band, er ekki reyndar jafn 5.
Svo hvernig gætum við umbreyta band 5 til tölunnar 5?
Einhverjar hugmyndir?
Já.
>> Þannig að ef við höfum 5 sem streng, við getum draga 0.
Og það mun gefa okkur 5.
Og sömuleiðis, ef við höfum 5 sem heiltala, bæta við að í strenginn 0.
Og það gefur okkur band 5.
Cool.
>> Nú, muna aftur fyrirlestur einn hvar við ræddum um reiknirit.
Svo hvernig við viljum í raun og veru í tölvu að gera áhugaverða hluti?
Þú veist, bara að bæta við og draga tölur og prentun það út er ekki
það spennandi.
Venjulega, við viljum tölvu okkar til framkvæma einhvers konar reiknirit.
Eitthvað svolítið flóknara en bara einföld stærðfræði.
>> Reiknirit er bara skref fyrir skref sett af leiðbeiningum um hvernig á að framkvæma
ákveðin task--
bara eins og uppskrift.
Þú gætir muna fyrsta degi flokki þar sem Davíð hafði okkur treyst herbergi
af fólki og hversu margir voru í herberginu.
Þú gætir verið að nota til að telja eitt af öðru.
1, 2, 3, 4.
Í því tilfelli, línuleg tími reiknirit.
>> En Davíð kynnti reiknirit fyrir þú að telja fólki í herbergi
þar sem allir stendur upp, segir þú þína tala til annars aðila, bæta við að
Fjöldi upp, og einn maður sest niður.
Og þú endurtaka það.
Það er ein tegund af reiknirit.
Við getum greina hversu duglegur An Líkanið byggir á það er að keyra tíma.
En við munum tala svolítið meira um það síðar.
>> Svo öll algrím geta einnig vera skrifuð í sauðakóðanum.
Sauðakóðanum er bara enska eins setningafræði notað til að tákna
forritunarmál.
Til dæmis, ef við vildum spyrja notanda að giska uppáhalds númerið mitt, við
gæti hafa sauðakóðanum sem slíkt.
>> Fá a notandi giska.
Ef giska er rétt, segja þeim þeir eru rétt, annars segja þeim
þeir eru ekki rétt.
Og sauðakóðanum er leið auðveldlega fulltrúi hugmynd eða reiknirit.
Svo nú erum við might vilja til raunverulega skrifa þetta á því tungumáli sem tölvan
Kannski skilning.
Þannig að við gætum skrifað sauðakóðanum og túlka það í kóða.
>> Svo langt, kóðinn verður að fylgja að vissu setningafræði
forritunarmál.
Og svo langt, í CS50, höfum við verið að nota aðallega c.
Þannig að þetta gæti verið Kóðinn fyrir c.
Síðar í námskeiðinu, þú kemur nóttin í snertingu við önnur forritun
tungumálum eins og PHP.
Eða ef þú tekur jafnvel öðrum flokkum, þú gæti gert Java, Python, eða jafnvel OCML.
En í okkar tungumáli c program, þetta er hvernig við gætum skrifað Kóðinn fyrir
að sauðakóðanum reiknirit sem Ég lýsti bara áðan.
>> Svo hvernig hjartarskinn tölvan þín í raun skilja að?
Eins og ég sagði áður, það bara virkilega skilur núllum og sjálfur.
Svo hvernig virkar það að fá frá upptökum kóða til eitthvað sem hægt er að
skilið?
Jæja, höfum við eitthvað kallað þýðanda.
>> Ef þú manst aftur í flestum þínum psets, þú hefðir einhvers konar áætlun
skrifað í punktur c skrá.
Og þá myndi slá make.
Svo hvað er að gera?
>> Þú getur slegið make til að safna saman þínum forrit því someone--
hver skrifaði p sett þína; sennilega David--
skapað gera skrá.
Og það segir að til að vita að hlaupa þinn þýðanda, sem heitir clang að vilji
þá þýða frumkóðanum að mótmæla númer, sem er núll og sjálfur
að tölvan þín skilur.
En stuttu seinna á, munum við fara meira í dýpt um vistþýðendur.
>> Svo muna pset 0, where-- já, þú ert með spurningu?
>> Áhorfendur: [inaudible]?
>> Ræðumaður 1: Já.
Ég held að þeir í raun og veru ætti að vera á netinu.
Já.
>> Áhorfendur: Er það eins og [inaudible]?
>> Ræðumaður 1: Það er ekki.
The eru á cs50.net/quizzes.
>> Áhorfendur: Slash Skyndipróf, rista 2013, rista 0, og bara smella í gegnum
Skyndipróf 2013 og quiz 0, endurskoða kafla skyggnur.
>> Ræðumaður 1: Já, þannig að ef þú krakkar vilja til að rífa það upp og líta á það á þinn
í tölvunni, það er allt í lagi líka.
Segja þetta aftur.
>> Áhorfendur: [inaudible].
>> Ræðumaður 1: Já, [inaudible] er gervibreyta.
Ó, já?
>> Áhorfendur: [inaudible]?
>> Ræðumaður 1: Nei, verkföll eru ekki á prófinu.
Því miður, spurning hennar var, var verkföll á prófinu.
Og það er ekki.
Svo pset 0, þið ættu að hafa alla framkvæmda eitthvað með grunni.
Og við lærðum sumir undirstöðu forritun byggingareiningar með grunni.
>> Svo skulum taka a líta á sumir þessara kubbar
að gera upp forrit.
Fyrst er Boolean tjáningu.
Boole tjáning eru þær og 0 er eða eitthvað sem hefur
tvö möguleg gildi.
Í þessu tilfelli, satt eða ósatt, eða slökkva á, og já eða nei.
Dæmi um einfalt, mjög einfalt, forrit sem notar Boole
tjáningu upp hér.
>> Svo í röð til Boolean tjáning til verið gagnlegt, höfum við Boolean rekstraraðila.
Þetta eru rekstraraðila sem hægt er að nota að bera saman ákveðin gildi.
Þannig að við höfum og eða ekki jafnt minna, en eða jafnt og hærra en eða
jafnt og minna en eða meiri en.
En þessi fyrirtæki eru ekki mjög gagnlegt nema við getum sameinað þær í
aðstæður.
>> Svo þú krakkar gætu muna frá grunni og frá bls þinn setur að vér
hafði skilyrði.
Þeir eru, í raun, eins og gaffla í röksemdafærsla program sem
framkvæmir allt eftir því hvort ástand er uppfyllt.
Svo eitt af skilyrðunum sem við höfðum notað mörgum sinnum á þessu námskeiði er
ef, annars, ef, og aðrir eru skilyrði.
>> Hér er dæmi um hvernig þú gætir notað það.
Hefur einhver vita muninn á milli bara að nota ef yfirlýsingar allra
leið niður vísur ef annars, ef og annað sameina?
Já?
>> Áhorfendur: [inaudible].
>> Ræðumaður 1: Einmitt.
Svo ef ég hefði ef alla leið niður þetta vegur, jafnvel ef þetta ástand skilar
satt, mun það enn áfram prófa næstu tvennu.
En, með annað-ef, í annað yfirlýsingu, ef maður skilar satt,
hinir eru ekki prófaðar.
Einhverjar spurningar um það?
Cool.
>> Svo þú notir ef-else af annað yfirlýsingu ef þú veist að það getur einungis
vera einn af þessum tilvikum.
Þannig að við vitum ef x er minna en 0, það er örugglega ekki að fara að vera
stærra en 0.
>> Næst, annar byggja blokk sem við lærðum eru lykkjur.
Við höfum þrenns konar lykkjur.
Fyrir lykkjur, en lykkjur, og gera á meðan lykkjur.
Og almennt, þegar þú sest niður til að skrifa eitthvað, verður þú að ákveða
hver af þremur sem þú vilt nota.
Svo hvernig gera við að ákveða hver einn?
>> Við notum yfirleitt for lykkju, ef við vitum hversu oft við viljum kunnugt
í gegnum eitthvað eða hversu oft við viljum til að framkvæma verkefni.
Við notum meðan lykkjur ef við þurfum sumir Skilyrði til að vera satt til að halda í gangi.
Og við notum ekki en mjög svipuð meðan, en við viljum kóða okkar til að keyra á
kosti einu sinni.
>> Svo að gera á meðan, hvað er í do mun alltaf hlaupa að minnsta kosti einu sinni.
En með tíma, það getur ekki keyrt á öllum ef
ástand er ekki sáttur.
Einhverjar spurningar með það?
>> Svo uppbyggingu for lykkju.
Þið hafið öll séð þetta.
Þú frumstilla hana.
Þú hefur einhvers konar ástandi.
Svo, til dæmis gætum við frumstilla eins fyrir i er 0.
i er minna en 10.
Og ég ++.
Mjög einfalt sá sem við höfum gert.
>> Fyrir a á meðan lykkja, á sama hátt, hefur þú að hafa einhvers konar frumstilling,
einhvers konar ástandi, og einhvers konar uppfærslu.
Svo við getum innleiða okkar fyrir lykkju einnig sem while lykkju að nota þetta.
Og álíka með do meðan lykkja, við gætum hafa sumir frumstilling,
framkvæma eitthvað, uppfæra hana, og þá athuga ástand.
>> Svo nú virka.
Við setjum allt saman.
Við might vilja til að skrifa nokkrar konar virkni.
Common fall sem þú gætir hef séð þegar er aðal.
Helsta er fall.
Það hefur aftur gerð, int.
Það hefur nafn virka, helstu.
Og það hefur rök, argc og argv.
Svo helstu er bara fall.
>> Aðrar aðgerðir sem þú gætir hafa notað, printf-- printf er function--
GetInt, toupper.
En þetta gerist að hafa verið framkvæmda fyrir okkur með
einhvers konar bókasafn.
Ef þú krakkar muna meðal þetta CS50.h bókasafn eða
staðall I / O bókasafn.
Já, spurning?
>> Áhorfendur: Er helsta bara felast í c?
Er það bara svona [inaudible]?
>> Ræðumaður 1: Spurningin er ef helstu felst í c.
Og já, allar aðgerðir hafa meginhlutverki.
Það er góður af nauðsynleg fyrir tölvuna að vita hvar á að byrja
keyra kóða.
>> Áhorfendur: Svo að þú viljir ekki [inaudible]?
>> Ræðumaður 1: Nei
Aðrar spurningar?
Cool.
Svo bara eins og þú getur notað virka sem er skrifað fyrir þig, getur þú einnig
skrifa eigin færni.
Þetta er fall sem einhver gæti hafa skrifað til að reikna rúmmál
af q, til dæmis.
Það er aftur gerð hér, í þessu tilfelli int, nafn virka okkar q og okkar
Listi yfir breytur.
>> Og athugaðu að þú þarft að skrifa gögn tegund af breytu sem þú vilt
nota eða annars virka ekki vita hvers konar
breytu ætti ég að samþykkja.
Svo, í þessu tilfelli, við viljum heiltala sem inntak okkar.
Svo hvers vegna gætum við viljum að nota virka?
>> Fyrst af öllu, frábært fyrir stofnun.
Þeir hjálpa brjóta upp númerið þitt í meira skipulögð klumpur og gera
það auðveldara að lesa.
Einföldun.
Þetta er gott fyrir hönnun.
Þegar þú ert að lesa stykki af kóða og helsta hlutverk er í raun,
virkilega lengi, það gæti verið erfiðara að Ástæðan um hvað er að gerast.
Svo ef þú brýtur það niður í aðgerðir, það gæti verið auðveldara að lesa.
Og endurnýta-getu.
Ef þú ert með klumpur af kóða sem er verið hringt í eða hlaupa mörgum sinnum,
í stað þess að endurskrifa að kóðinn 10 sinnum í helstu hlutverk, þú might
langar að endurnýta það.
Og þá í hvert skipti sem þú þarft að nota það stykki af kóða, kalla aðgerðina.
>> Svo nú ef við minnumst aftur að klóra, við ræddum líka um nokkra hugtök,
einn sem er þráður.
Þráður er hugtakið margfeldi raðir af kóða
framkvæmd á sama tíma.
Svo hugsa til baka til fyrsta degi þar sem Davíð hafði þið telja af fjölda
fólk í herberginu.
>> Í meginatriðum, hvað var að fara á er allt ykkur voru
aðskildan þræði.
Og þessir þræðir komu saman að fá einhvers konar svar.
Á sama hátt, í grunni, þegar þú ert margar sprites, þú gætir
hafa kött og hund.
Og þeir myndu vera samtímis keyra eigin forskriftir þeirra.
Það er dæmi um þráður.
>> Og annar hugtak sem var kynnt í grunni var atburðir.
Og atburðir eru þegar margir hlutar númerið þitt samskipti við hvert annað.
Í grunni, þetta var þegar þú notaðir í útvarpa stjórn og þegar ég
Fá blokkir.
>> Og einnig, í Heimadæmi 4, við sáum svolítið af atburðum eins og heilbrigður.
Þið gætu hafa notað að Gevent bókasafn.
Og það var fall waitForClick þar sem þú varst að bíða
fyrir notandann til að smella.
Og þinn smellur, í þessu tilfelli, væri atburður og bíða eftir smell er þinn
atburður dýraþjálfari.
>> Og einnig, um að keyra psets þínum og vinna á psets, þú
gæti hafa komið í snertingu við sumar af þessum skipanir.
Þetta er það sem þú slóst inn þinn endastöðvar eða hvað gluggi
sem sýnir sig á g breyta þinni til, meginatriðum, sigla tölvuna.
>> Svo til dæmis, LS er listi yfir Innihald möppu.
Gera skrá skapar nýja möppu.
CD, breyting skrá.
RM, fjarlægja, eyðir skrá eða einhver skrá.
Og þá fjarlægja möppuna fjarlægir möppu.
>> Áhorfendur: [inaudible]?
>> Ræðumaður 1: Já, vissulega.
Því miður, spurningin var hvort þú myndi stinga setja þetta
á svindlari lak.
Það gæti hjálpað.
Ef þú ert pláss, getur þú sett það á.
Það er líka bara almennt nógu gott að muna vegna þess að þegar þú notar það
þú might vilja til að bara hafa það á minnið.
Það mun gera líf þitt mun auðveldara.
Sagði ég svara spurningunni þinni?
>> Svo nú, talaði við smá stuttlega um bókasöfn.
En tveir helstu sjálfur að við höfum verið nota svo langt í námskeiðinu eru
staðall I / O og cs50.
Hvaða góður af hlutur eru í stöðluðu I / O bókasafn?
>> Já, svo langt að við höfum notað printf.
Í cs50 höfum við notað GetInt og GetString.
Og gögn gerð band gerist einnig að gefa í þessu cs50 bókasafni.
Við munum tala svolítið meira í dýpt um hvernig bókasöfn vinna og hvernig þeir
samskipti við restina af kóðanum þínum.
En þeir eru tveir helstu sjálfur að við hafa komið í snertingu við svo langt í
að sjálfsögðu.
>> Gerðir.
Þetta eru góð til að muna hversu mikið hver tegund er táknuð með eða hvernig
margir bæti hver tegund requires--
int, 4 bytes; bleikju, 1 bæti.
Fljóta er 4 bæti.
Hvað er tvöfaldur?
>> Áhorfendur: [inaudible].
>> Ræðumaður 1: Já, þannig að fljóta en tvöfalda stærð.
Hvað um fyrir?
>> Áhorfendur: [inaudible].
>> Ræðumaður 1: OK.
Hvað er langur?
>> Áhorfendur: [inaudible].
>> Ræðumaður 1: Já, tvöfaldur við int.
Já.
>> Áhorfendur: [inaudible].
>> Ræðumaður 1: Long [inaudible].
Og þá er langur langur tvöfalt.
>> Áhorfendur: Nei, nei.
Löng er bara int.
Það veltur á arkitektúr áður en [inaudible]
og int hafa sömu stærð.
[Inaudible].
>> Ræðumaður 1: Svo langur og int eru þeir sömu.
Og þá lengi lengi er tvöfalt int.
Cool.
Og þá, hvað er síðasta tegund?
>> Áhorfendur: Pointer.
>> Ræðumaður 1: Já, þannig að við lærðum svolítið um ábendingum.
Og án tillits til hvað bendillinn er benda to-- það gæti verið char stjörnu
eða int star--
það er alltaf 4 bæti fyrir bendi.
Spurningar um það?
Já?
>> Áhorfendur: [inaudible]?
>> Ræðumaður 1: Svo lengi og int eru sama í þessari cs50 tæki.
>> Áhorfendur: Tækið er alveg víxlanlegur.
>> Ræðumaður 1: Já.
Svo þá lengi lengi er tvöfaldur int.
>> Áhorfendur: Þetta er 32 bita?
>> Ræðumaður 1: 32 bita, já.
>> Áhorfendur: Svo [inaudible]?
>> Ræðumaður 1: Já, ef það virkar ekki sérstaklega segja, þér
ætti að gera ráð fyrir 32 bita.
>> Áhorfendur: Það myndi segja eitthvað eins að gefnum forsendum um
arkitektúr eins og tæki.
64 bita, aðeins hluti sem breyting er þráir og ábendingum.
Þeir báðir [inaudible].
>> Ræðumaður 1: Já?
>> Áhorfendur: Spurning.
Svo á einn af æfa Skyndipróf, það biður um óskráðum int.
Svo hvernig væri að ráðast frá int [inaudible]?
>> Ræðumaður 1: An óundirritaður í er einnig 4 bæti.
En hvað er öðruvísi um að undirritaður int og óundirritaður int?
>> Áhorfendur: [inaudible].
>> Ræðumaður 1: Hægri.
Maður getur tákna neikvæð gildi.
En hvernig er það að gera það?
>> Áhorfendur: [inaudible].
>> Ræðumaður 1: Já, það spara 1 bita til að tákna merki.
Undirrituð hefur einn hluti sem táknar skiltið.
Og óundirritaður bara er allt jákvæður.
>> Áhorfendur: Í lagi.
Svo segir þú að tvöfalda er tvisvar sinnum stærð flotholt?
>> Ræðumaður 1: Tvöfaldur er tvisvar á stærð við fljóta, já.
>> Áhorfendur: Hvernig virkar bendi til a langur langur [inaudible]?
>> Ræðumaður 1: Svo er spurningin hvernig virkar bendill til að langa long--
hvernig er að aðeins fjórir bæti þegar fyrir löngu 8 bæti hennar.
Svo muna hvað er bendillinn, í raun, á mjög grunn gildi.
>> Áhorfendur: [inaudible].
>> Ræðumaður 1: Já, svo bendillinn er bara minni.
Svo það skiptir ekki máli hversu mikið pláss sem bendillinn bendir til.
Það þarf aðeins 4 bytes til að halda utan þeirrar minninu.
Aðrar spurningar?
Cool.
>> Svo það síðasta sem ég hef er staðall framleiðsla.
Þú ættir að nota þá oft nóg að þú getur munað.
En þetta er þegar við notum printf, til dæmis.
Og við höfum þessar staðgengla sem voru kallaðir snið númer.
>> Svo prósent c bleikju, prósent ég fyrir int, og við getum einnig notað prósent d.
Það er það sama.
En almennt, í CS50 við reyna að nota hlutfall i.
Hlutfall m fyrir fljóta.
Hlutfall LD lengi lengi og prósent s fyrir streng.
>> Á sama hátt höfum við verið að nota nokkrar þessara flýja röð.
Til dæmis, Sviga n fyrir nýja línu.
Þetta er bara fyrir þegar þú ert að forsníða númerið þitt til prentunar f.
Já?
>> Áhorfendur: Hvað er prósent d fyrir?
>> Ræðumaður 1: Svo spurningin er það sem er prósent d fyrir?
Hlutfall d er fyrir ints.
Percent d og prósent i eru þau sömu.
>> Áhorfendur: Hver er munurinn á milli sviga n og sviga r?
>> Ræðumaður 1: Svo er spurning hvað er að munur á milli bakslag n og
bakslag r?
Ég held Sviga r is--
>> Áhorfendur: Svo sviga r felur bara skilar til the byrjun af the lína
án þess í raun að fara til a nýr lína.
Svo ef þú prentað Sviga r og þú fara aftur til the byrjun af the lína
þá þú prenta meira efni, þú skrifa efni sem er þegar á
[Inaudible].
En, n raun fer í nýja lína og fer að [inaudible].
>> Ræðumaður 1: Jæja, aðrar spurningar?
Allt í lagi.
Ég ætla að afhenda það burt til Dan sem vilja halda áfram.
>> [Applause]
>> DAN: Allt righty.
Svo ég ætla að tala um annað breiður svið hugmynda frá bekknum sem eru
u.þ.b. fulltrúi viku tvö og að byrja á viku þrjú farin burt
með steypu, sem er bara leið til að meðhöndla gildi af ákveðinni tegund sem
a gildi af annarri tegund.
Svo við getum gert þetta með stafir að ints, fljóta að ints og
langur þráir að tvöfalda.
>> Allir þessir hlutir hægt að nota sem leiðir að meðhöndla einhverja tölugildi
mínus bleikju sem einhver annar talnagildi.
Þannig að það eru nokkur atriði með þetta, Auðvitað, sem kemur þegar þú kastar
hlutir eins fljóta að ints.
Þannig að þetta er svolítið skrítið.
Við höfum fljóta sem er 1.31.
Við margföldum það með 10.000.
Og þá erum við að prenta það sem int.
Hvað er þetta framleiðsla?
10.000 sinnum 1,31.
Svo 13,000 er að giska?
>> Áhorfendur: Ég held að það er 10.000.
>> DAN: Þannig að ég ætla að margfalda það með 10.000 áður en ég ætla að kasta henni.
>> Áhorfendur: Ó.
Vildi ekki að það að vera einn 9 og sumir 0 tölur?
>> DAN: Þú gætir hafa sumir furðulegur tölustafir.
Svo rétt, það er 1,3 sinnum 10.000.
Svo er það 13.000.
Og þetta auka weird--
>> Áhorfendur: 13.100.
>> DAN: 13.100.
Þakka þér, Rob.
Og þetta auka weirdness--
þetta 9,9--
er einfaldlega vegna þess að þetta steypu endaði námundun niður þar
það ætti ekki að hafa.
Já.
>> Áhorfendur: The steypu gerist eftir allt annað?
>> DAN: Svo vegna þess að ég hef þetta á prenti, það er þetta margföldun áður en það
er þetta steypu.
>> Áhorfendur: [inaudible].
>> DAN: Ég held að það myndi kasta fyrst, já, sem væri 10.000.
Nokkuð fleira?
Cool.
Svo er þetta 13.099.
Hvers vegna er þetta að gerast?
Imprecision.
>> Fljóta eru ekki fullkomin.
Þeir geta aðeins tákna númerum a ákveðinn fjölda marktækra tölustafa.
Þannig að ef við prenta út 8 Sig fíkjur á þetta fljóta, fáum við eins konar
ljótur útlit fjöldi.
Og það er vegna þess að 1,31 getur ekki nákvæmlega að koma fram með einfalda
völd af tveimur í vél.
Svo það endar að taka næst giska, sem endar
vera svolítið lágt.
Skynsamleg?
OK.
>> Nú, kveikt eru öðruvísi leið gera skilyrt yfirlýsingar þar alla
annt um er stakur breytu.
Þannig að í þessu tiltekna dæmi, erum við að fá heila tölu frá notanda.
Og þá erum við að horfa á hvað sem heiltala er.
Væntanlega er það númer milli eitt og fjögur.
Það er það sem við erum að biðja um.
>> Svo þú skipta um breytan nafn.
Síðan sem þú setja upp tilvik mögulegt gildi það gæti verið.
Svo ef einn, segja að það er lágt.
Og þá þú brýtur að komast út að skipta ástandi til að
þú viðurværi ekki að fara.
>> Í næsta case--
svo málið tveir og raunin three--
ef það er málið tvær það lækkar bara niður fyrsta lína af kóða það sér eins og með
tilfelli þrjú þar til það sér hlé.
Svo ástæða þess að þú færð málið eitt til aðeins prenta lágt er vegna þess að ég
hafa þetta hlé hér.
Ef ég, segjum, hunsa þetta break-- ef ég kastaði þessu breakaway--
það myndi prenta lágt, og þá myndi prenta mitt, og þá myndi brjóta.
>> Svo brot eru mikilvægur hluti af skipta aðstæður og
þeir ættu að vera þar.
Allar tilvikum sem ekki eru tilgreind sérstaklega eru meðhöndlaðar með the vanræksla
ræða í rofi og skal kastað.
>> AUDIENCE: Svo 1, 2, 3, og 4 væri n?
>> DAN: Gildi sem n getur verið.
Já.
Já?
>> Áhorfendur: Svo þegar þú ert að [inaudible]?
>> DAN: Þú vildi prenta lágt, og þá það myndi prenta miðju, og
þá myndi brjóta.
>> Áhorfendur: Hvers vegna vildi það prenta miðja ef [inaudible]?
>> DAN: Svo allt undir máls áður en hlé fellur undir.
Svo málið er eitt prenta undir mál einn sem er á þessu eftir prenta.
Já?
>> Áhorfendur: [inaudible]?
>> DAN: Svo þessi tala er bara sérstaklega gildi sem þessi breyta
getur tekið, ekki satt?
Er að skynsamleg?
Já.
>> Áhorfendur: [inaudible]?
>> DAN: Já, málið tveir myndi prenta miðju og þá brjóta.
>> Áhorfendur: [inaudible]?
>> DAN: Ég held allir?
Hvað aðrar gerðir gagna er hægt að skipta yfir?
>> Áhorfendur: Þú getur skipt yfir hvaða gögn gerðum.
En það þýðir bara ekkert yfir stafir og ints og eitthvað svoleiðis, því
ef þú ert að skipta yfir músina sem er í raun ekki skynsamleg,
skipta yfir fullt, ef það láta jafnvel 's þú gerir það, því fleytitölu
í nákvæmni, og þú vildi í raun ekki langar að gera það engu að síður.
Svo ansi mikið, bara ints og stafir og eitthvað svoleiðis.
>> DAN: Já, það er þegar þú ert skýr gildum sem þú veist, ég held, getur verið
að skipta er í raun gagnlegt.
Gott?
OK.
>> Umfang er á bilinu sem lýst breytu nær.
Þannig að í þessu litla klumpur af kóða Ég hef, það væri full af villum.
Og ástæðan er að ég lýsti þessu int Ég innan gildissviðs þetta fyrir lykkju.
Og þá er ég að reyna að vísa að ég utan að fyrir lykkja gildissvið.
>> Svo í rauninni er hægt að hugsa um umfang eins og nokkuð sem þú lýsa
með inni a setja af hrokkið axlabönd aðeins er innan þessara hrokkið axlabönd.
Og ef þú reynir og nota þá breytu utan þessara hrokkið axlabönd, þú munt
fá villu frá þýðanda.
Já?
>> Áhorfendur: Svo þetta virkar ekki?
>> DAN: Þetta virkar ekki, já.
Strengir.
Band a char *.
Þeir eru nákvæmlega það sama.
Þeir eru bara ábendingar til að stafi.
Og allir strengir sem þú hefur á að enda með sviga núll, sem er bara
a c samningur.
>> Það er kallað NULL Terminator.
Og NULL--
höfuðborg N, höfuðborg U, höfuðborg L, höfuðborg L--
er ekki það sama og að NULL Terminator.
Þetta er bendillinn.
Þetta er eðli.
Þeir eru mjög mismunandi.
Muna það.
Það mun vera á próf, sennilega.
Ég hef ekki séð próf.
Já?
>> Áhorfendur: Svo NÚLL er, segjum, bendillinn?
>> DAN: Já.
>> Áhorfendur: Hvað [inaudible]?
>> DAN: Ef, segjum, malloc er kallað þegar þér hafa ekki nóg minni til að fá
hvað stærð þú ert að biðja um, malloc mun skila NULL.
Það er, í grundvallaratriðum, þegar fall er að koma til baka bendi, þér
þarf að athuga gegn NÚLL því ég NULL er nokkuð good--
það er, svona, sorp gildi.
Það er núll eins langt og ábendingum fara.
>> Alltaf þegar þú hringja í aðgerð, sem skilar bendi.
Þú ert að fara að vilja til skrá til að vera viss um að það bendi ekki NÚLL
því NÚLL er mjög algengt.
Það er tegund af sorp aftur.
Þannig að ef eitthvað fór ekki rétt, bara aftur NULL staðinn.
>> Áhorfendur: [inaudible]?
>> DAN: Já, og það er þetta.
>> Áhorfendur: [inaudible]?
>> DAN: Stafa það sem þetta.
Það er NULL Terminator.
Það er lágstafir N-U-L-L ef þú ert að stafsetningu það.
>> Áhorfendur: Og ég fór bara aftur og prófa það.
Og ef þú reynir að setja fljótandi punkt gildi í rofi, mun það æpa á þig
segja, yfirlýsing krefst tjáningu af heiltölu tegund.
>> DAN: Svona.
En já, hver var spurningin aftur?
>> Áhorfendur: [inaudible]?
>> DAN: Svo höfuðborg N, höfuðborg U, höfuðborg L, höfuðborg L er raunverulegur c hlutur.
Það er NULL músina og mun aðeins að meðhöndla sem slíkt.
Þú munt ekki alltaf að reyna og stafa í NULL karakter og sjá hvaða
önnur leið en þetta.
Já?
>> Áhorfendur: Svo aftur að bleikju hámark eða eitthvað í skýringum, myndi það
staðfest sama virka sem [inaudible]?
>> Áhorfendur: Svo þú ert að vísa til aftur bleikju max frá getchar, eða
hvað sem það er?
>> Áhorfendur: Já.
>> Áhorfendur: Já, þannig að almenn orð fyrir öllum þeim hlutum
eru Sentinel gildi.
Svo eins aftur int max frá GetInt og bleikju hámark frá getchar, það er
átti að vera eins og, allt í lagi, ef þessir hlutir eru aftur að okkur,
eitthvað fór úrskeiðis.
>> Leiðbeiningar um, við verður bara að hafa þetta vörðr gildi sem allir
samþykkir á.
Og þetta er hlutur sem þú aftur þegar hlutirnir fara úrskeiðis.
Svo er bleikja hámark það sem við erum að nota að tákna eitthvað
eins NÚLL eða getchar.
>> Áhorfendur: Svo ef þú ert að prófa getchar, væri hægt að setja bara NULL?
Vildi að gera a mismunur?
>> DAN: Þú getur ekki bara að athuga NULL.
Þú vilt að athuga bleikju max því að skilagildi frá fallinu er
eðli ekki músina.
Já?
>> Áhorfendur: Þessi spurning spyr fyrir strenginn lengd.
Er að láta NÚLL staf?
>> DAN: Nei
Og það er í raun hvernig band lengd veit að hætta vegna þess að það fer í gegnum
array þinn stafir fyrr það sér NÚLL staf.
Og þá er það eins, allt rétt, ég er búin.
>> Áhorfendur: [inaudible] fimm?
>> DAN: Halló væri fimm.
Já.
Svo fylki eru samfelld blokkir af minni.
Þeir hafa augnablik aðgangur með því að segja að nafn fylkisins og þá, í ​​hrokkið
axlabönd, hvað vísitalan þú vilt fara til, þeir eru verðtryggð frá núlli í gegnum
lengd array mínus 1.
>> Og þeir eru lýst með tegund sem hlutur sem þú ert að geyma í
array, nafn array, og þá hvað stærð er á þeim fjölda.
Þannig að þetta er bleikja array lengd sex sem hefur þessi gildi.
Já?
>> Áhorfendur: [inaudible]?
>> DAN: Já.
>> Áhorfendur: [inaudible]?
>> DAN: Ef þú ert það sem er að gerast í fylkinu þegar gert.
Svo þú gætir tilgreina þetta í staðinn sem, segja, bleikju, hvað nafn þitt
array er, tóm sviga jafngildir hrokkið Brace H komma E komma L kommum L kommu
O komma NULL karakter og hrokkið Brace.
Það myndi einnig vinna eins og yfirlýsingar.
>> Áhorfendur: [inaudible]?
>> DAN: Síðan sem þú þarft að hafa stærð þegar gert.
>> Áhorfendur: [inaudible]?
>> DAN: Já.
Allt righty.
Stjórn lína rök eru leið fá inntak frá notanda og
rök til helstu.
Main tekur tvær breytur.
Fjöldi rök sem að framhjá eftir skipanalínu og a
band ferja eða band array af öllum rökum.
>> Svo ef ég að segja, sem kallast virka eins punktur út 1. pláss, 2 rúm, þrír,
argc yrði 4.
Og argv 0 væri punktur út.
Argv1 væri 1.
argv2 væri 2. argv3 væri 3, í því tilfelli.
Já?
>> Áhorfendur: [inaudible]?
>> DAN: Síðasti þáttur í array vegna þess að fylki er lengd argc plús
einn af argb, síðasta frumefni er NULL músina.
Það er argc plús 1.
Svo er að ræða, sem ég sagði bara, það yrði argv 0 er punktur út.
argv 1 er 1. argv2 er 2. argv 3 er 3.
argv 4, sem er eitt stærri en argc væri NULL.
>> Og það er NULL músina.
Já.
Og það er vegna þess að band er a bleikju stjörnu er bendillinn.
Svo það þarf að vera sama tegund.
Já?
>> Áhorfendur: Tvær spurningar.
Svo einn, hvað er munurinn á milli þetta og GetString annað en einni tegund
í the notandi vél?
Og tveir, er það geymt innan Nýleg minni þitt?
Svo eins, GetString myndi vera [inaudible]?
>> DAN: Hvar er það geymt?
Ég veit ekki hvar það er geymt.
>> Áhorfendur: Svo, reyndar, þú veist hvernig allir virka þú kalla það rök
eru geymdar í stafla?
Svo argc og argv rök að helstu og þeir eru á mánudaginn, eða í raun
rétt ofan það sem þú hugsar eins og að byrja á mánudaginn.
Hvað var annar hluti af þeirri spurningu?
>> Áhorfendur: Svo er það [inaudible]?
>> DAN: Já, það er bara öðruvísi leið að fá inntak frá notanda.
Örlítið skilvirkari og þetta er það er handier fyrir skriftum vegna þess að þú
getur bara fara rök að helstu þitt virka frekar en að þurfa að bíða
fyrir notendur ef þú ert ekki einhverjar notendum.
>> Áhorfendur: Og já, fá strengi væri [inaudible].
Það myndi geyma efni sem þú þarft.
>> DAN: Já?
>> Áhorfendur: [inaudible]?
>> DAN: Já, argv 0 nær alltaf punktur rista á virka símtalinu.
Já?
>> Áhorfendur: [inaudible]?
>> DAN: Já, eru hvert rök endaði NULL karakter vegna þess að þeir
eru strengir.
>> Áhorfendur: [inaudible]?
>> DAN: Já, argv argc er NULL músina.
>> Áhorfendur: [inaudible]?
>> DAN: Ó já.
Já, því miður.
>> Áhorfendur: Svo [inaudible]?
>> DAN: Svo spurningin er hvort þú hefði stjórn lína punktur rista punkt út 1, 2,
myndi fjöldi lína rök vera tveir eða myndi það vera þrjú?
>> Áhorfendur: Ég held að það er ekki máli.
ÉG hafa tilhneigingu til að segja, ó, að þú ekki fara allir stjórn lína rifrildi þegar,
augljóslega, þú kallaðir aðgerðina.
Svo ég tilhneigingu til að hávær útiloka virka frá the stjórn lína
rök, jafnvel þó að það er innifalið í argv.
>> DAN: En ef það var á test--
yeah-- og einnig ef þú segir eitthvað eins argc jafngildir 3,
þú ert í öruggum standa.
Já?
>> Áhorfendur: [inaudible]?
>> DAN: Ég held að ef í stað þess að hringja á þessu í argc og band argv sviga
en hélt sömu tegundir og hringdi þá eitthvað öðruvísi eins og
og b, myndi það vinna enn?
Og það væri enn að vinna, þú vildi just--
í stað þess að nota argc-- þú vilt nota og b.
Já?
>> Áhorfendur: [inaudible]?
>> DAN: Svo er spurningin GetString er að fara að geyma minni í hrúga
því GetString er char *.
Það geymir minni í hrúga því það nú kallar malloc innan raunverulegt
framkvæmd GetString.
OK, flutti á.
>> Öryggi.
Svo til að vera sannarlega öruggur, treysta þér á ekkert einn og þú leyfa enginn aðgang að einhverju
af upplýsingum, sem er hvers vegna allir byggir eigin vél þeirra,
eigin rekstri þeirra kerfi, allir þeirra forrit frá grunni, og vitanlega
ekki tengjast neinum öðrum vélum í gegnum internetið.
Svo tölvur eru óörugg.
Þeir eru í raun.
Við verðum að treysta fólki.
>> Og hugmyndin um öryggi er að þú ert að reyna að takmarka magn af
traust sem þú þarft.
Og einn af þeim aðferðum sem þú gerir það er í gegnum dulkóðun.
Dulmál er, í meginatriðum, við höfum leyndarmál.
>> Stundum verðum við að fara leyndarmálum okkar ásamt með, segjum, internetið eða
annað.
Og við viljum ekki fólk að vita þessar leyndarmál.
Þannig að við að dulkóða leyndarmál okkar í leiðinni sem við vonum að enginn getur fundið út.
>> Þannig að við used--
gegnum á þessu class--
hluti eins og Caesar dulmál og [Inaudible], sem eru bæði mjög
óörugg leiðir dulkóða hluti.
Þeir eru auðvelt að reikna út hvað þeir eru og hvað leyndarmál þín eru.
The raunverulegur veröld notar miklu meira flóknar dulkóðun kerfi.
Og við munum ekki fá inn miklu meira en það.
>> Kembiforrit.
GDB er bestur.
Ég ætla að leggja áherslu á þetta aftur.
Notaðu gdb allan tímann hvert þegar þú ert í vandræðum.
Skipanir sem nýtast vel við gdb eru brjóta, sem þú framhjá annaðhvort línu
númer fall nafn, í meginatriðum hvar í númerið sem þú vilt hætta,
og vera fær um að taka stjórn.
>> Prenta tekur breytu og prentar út hvað sem breytu er að
lið í framkvæmd þinn.
Næst flytur framkvæmd þína ásamt einu skrefi.
Og stíga skref inni fall í framkvæmd þinn.
>> Aðrir hlutir eru að keyra, sem er hvernig þú keyrir í raun kóðann þinn.
Halda áfram tekur öll þau skref sem þarf að fá til the næstur brot lið.
Og það eru margir, margir aðrir.
Horfðu þá upp.
Þeir eru frábær.
Já?
>> Áhorfendur: [inaudible]?
>> DAN: Já, sem er aflúsara.
Svo aflúsara er forrit sem gerir þér kleift að kemba program.
Það er ekki forrit sem finnur galla fyrir þú, þó að það væri frábært.
>> Og síðast fyrir mig er að leita.
Svo gerðum leit að við ræddum um í þessum flokki eru línuleg leit,
sem er bara að þú horfir í gegnum hvert þáttur í leit rúm, einn
þáttur í einu, þar til þú finnur hvað þú ert að leita að eða þar til þú nærð
enda leit rúm þar sem benda þú segir að þú gætir ekki fundið
þátturinn sem þú varst að leita að.
Og þetta tekur í besta falli stöðugt tíma, sem er 0 af 1 og í versta falli línulega
tíma, sem er 0 á n.
>> Tvöfaldur leit, sem þarf sordid þætti.
Þú ferð til miðju þætti þínum, sjá hvort þátturinn sem þú ert að leita að
er stærri eða minni en frumefni að þú ert á miðjunni.
Það er það stærra, þú segir að botn af leitinni pláss er þinn
Núverandi staðsetning, miðju, og þú endurræsa ferli.
Ef það er minni, þú lítur segja að the-- já, hvað er uppi?
>> Áhorfendur: [inaudible]?
>> DAN: Já.
Hvers konar tagi sem hefur verið kennt í bekknum er sanngjarn leikur fyrir próf.
>> [Hlátur]
>> DAN: Og sú staðreynd að þú hefur ekki haft að gera það fyrir vandamál setja, það er sanngjarnt
leikur fyrir próf.
>> Áhorfendur: Getum við farið yfir það hvernig to--
>> DAN: Það verður farið yfir.
>> Ræðumaður 2: Raunveruleg kóða fyrir [Inaudible] er á study.cs50.net.
Þannig að ef þú horfir á æfingu vandamál í Mergesort síðu
study.cs50.net, það er kóðinn um framkvæmd sameinast konar.
Svo þú þarft ekki að framkvæma það sjálfur í kvöld.
En vertu viss um að þú skiljir það frekar en bara að leggja á minnið það.
>> Áhorfendur: [inaudible]?
>> Ræðumaður 2: Mergesort síðu á study.cs50.net, það er reynd
vandamál að ef þú smellir á vandamál, aftast er
lausn, sem er steypa konar framkvæmd.
En vertu viss um að þú skiljir það frekar en bara að leggja á minnið það
eða afrita það niður.
>> Áhorfendur: Og fullkomlega gild vandamál fyrir prófið væri
eitthvað eins og hér er listi.
Hvað þýðir þetta er að listinn líta út eftir eitt skref af vali konar eða
insertion sort eða hvað.
Einn fullur endurtekning af listanum.
Svo jafnvel ef þú endir ekki upp að þurfa að kóða fyrir það, þú þarft að skilja það
nóg að vita hvernig það er að fara til að vera að breyta þessum array.
>> DAN: Það er það fyrir mig.
>> [Applause]
>> LUCAS: Hey allir.
Mitt nafn er Lucas.
Ég ætla að tala um endurkvæmni, allt þær tegundir sem við höfum lært, og
svolítið af öllum ábendingum.
OK?
Svo fyrst af öllu, endurkvæmni.
Hvað þýðir það að segja að fall er endurkvæma?
>> Áhorfendur: Símtöl sig.
>> LUCAS: OK, kallar sig, já.
Svo eins og þessari mynd, til dæmis.
Það er eins og á myndinni inni af mynd og svo framvegis.
Svo til dæmis, getur þú have-- Dan sem var að tala um tvöfaldur leit.
Ein leið sem tvöfaldur leit endurkvæma er sú staðreynd að þú ert
að reyna að finna númerið.
Svo þú ferð til miðju.
Og þá þú athuga ef þau þar í vinstri og í hægri.
>> Og svo ef þú finnur út númerið er að fara að vera á vinstri, það er sama
hlutur eins og að gera leit aftur, en bara á vinstri listanum.
Svo er það hvernig það hljómar eins og það er endurkvæma.
Svo er að hvers vegna þú krakkar hafa endurkvæma lausn fyrir sameiningu tagi.
>> OK, svo hér er dæmi.
Svo skulum segja að ég vil velja allar tölur frá 1 til n.
Ég get átta sig á því að summa n tala er n plús n mínus 1 allt að 1.
En þá, ef ég lít á n mínus 1 plús n mínus 2 plús 1, sem er sama
hlutur sem því tölur allt að n mínus 1.
Svo ég get sagt summu jafnhátt jafngildir n auk summu n mínus 1.
Er að skynsamleg?
>> Og ég líka hefði eitthvað annað kallað stöð málið, sem er að
summa talnanna upp í núll myndi vera núll.
Svo um leið og ég kem til fjölda núll, hætta ég telja.
Er að skynsamleg?
>> Svo er hér dæmi um hvernig Ég get framkvæma það.
Þannig að ég hef þetta virka í sumum.
Sem tekur heiltölu n.
Svo hér er ég að athuga fyrst ef n er minna en eða jafnt og núll.
Þannig að ef það er minna eða jafnt og núll, ég aftur núll, sem er undirstaða raunin okkar.
Annars get ég bara aftur n plús summa talnanna frá
einn til n mínus einn.
Skynsamleg?
OK.
>> Svo hér er það sem það lítur út.
Þú ert summan af 2 jafningja 2 plus summan af 1.
Og sumir af 1 er 1 plús summan af 0, sem er 0.
Skynsamleg?
Svo ef við skoðum stafla af þinn program, þetta er það sem það lítur út.
>> Í fyrsta lagi höfum við meginhlutverki.
Og þá helsta hlutverk kallað summan 2.
Og þá summa 2 er að fara að segja, ó, summa 2 er 2 plús summan af einum.
Svo ég bæta summu 1 til stafla.
Og summan af 1 er að fara að hringja summan af 0, sem er líka að fara til að bæta við
að stafla.
Og þá hvert þessara þau sem eru ofan á aðra þurfa að snúa
áður en hinar geta haldið áfram.
>> Svo til dæmis, hér, summan af 0, fyrst, er að fara að skila 0.
Og þá velja summan af 1.
Þá summan af 1 er að fara til skila 1 að summa af 2.
Og að lokum, summan af 2 er að fara til að fara aftur 3 í haf.
Er að skynsamleg?
>> Það er mjög mikilvægt að skilja hvernig stafla er að vinna og reyna að
sjá hvort það er vit í.
Allt í lagi, svo flokka.
Svo hvers vegna er flokkun mikilvægt, fyrst af öllu?
Hvers vegna ættum við að kæra?
Einhver?
Gefðu mér dæmi?
Já?
>> Áhorfendur: [inaudible].
>> LUCAS: Já, allt í lagi.
Svo er hægt að leita á skilvirkari hátt.
Það er góð leið.
Svo, til dæmis, við höfum mikið af hluti, í raun, í lífi okkar sem
eru flokkuð.
Td orðabækur.
>> Það er mjög mikilvægt að hafa allar orð í einhvers konar röð sem við
geta nálgast auðveldlega.
Svo það er það sem hann var að segja.
Hægt er að leita á skilvirkari hátt.
Hugsaðu um hversu erfitt það væri að hafa orðabók þar sem orð eru í
handahófi röð.
Þú þarft að líta á, ansi mikið, hvert einasta orð fyrr en þú finnur að
orð sem þú ert að leita að.
>> Ef þú ert að nota Facebook líka, þegar þú ert að horfa á vini þína, þú ert
að fara að sjá að Facebook setti þinn nær vinur er ofan á þær
að þú talar ekki það mikið.
Ef þú ferð alla leið í botn vinur þinn listi, þú ert að fara að sjá
fólk sem þú gerir sennilega ekki einu sinni muna að þú ert vinir með.
Og það er vegna þess að Facebook konar vinir þínir byggjast á því hvernig
loka þú ert við þá.
>> Svo skipuleggja gögnin.
Einnig Pokemon.
Svo þú sérð að öllum pokemons hafa númer.
Og það er eins auðvelt leið aðgang að gögnum.
>> Áhorfendur: Aðgangur Pokemon.
>> LUCAS: Já.
>> Áhorfendur: [inaudible].
>> LUCAS: Já.
Allt í lagi, þannig að val tegund.
Val tegund er að fara að velja Minnsta óflokkað gildi lista á hverju
tími í hverri ítrun.
Það er góður af eins og því tagi sem þú gerir í hausnum þegar þú ert að reyna að
raða lista á hönd.
>> Í grundvallaratriðum, allt sem þú gera er að líta fyrir minnstu númer.
Þú setur það í flokkaðs listanum.
Og þá útlit fyrir að Næsta minnsti fjöldi.
Og þá þú halda að gera það og svo framvegis.
>> Svo er val konar grundvallaratriðum þú velja í hvert skipti sem minnstu
óflokkað gildi.
Setja í lok sem raðað hluti af listanum.
Og halda að gera það.
Svo skulum sjá fljótt hvað þetta lítur út eins og.
Svo er hér raðað og óflokkað lista.
>> Svo fyrir raðað á listann, það er tóm í upphafi.
Og þá er ég að fara að velja minnsta talan hér, sem er 2.
Svo ég fá númer 2 og ég setti í framan listanum.
Og þá er ég að leita að næsta minnstu þáttur, sem er 3.
Þannig að ég setti það í lok af raðað lista.
Og þá er ég að halda að gera það.
Mér finnst 4 og setja það í lokin.
Finna 5 og setja það í lokin.
>> Og líta á hvernig allar þær stundir sem Ég er að segja setja það í the endir er,
grundvallaratriðum, skipta tvö gildi.
OK?
Og þá það síðasta, þú bara hafa eina einingu.
Svo það er nú þegar raðað.
>> Allt í lagi, svo insertion sort.
Insertion sort sem þú ert að fara að hafa einnig að hlutur af því að hafa a raðað og
er óflokkað lista.
Það eina sem er að í hvert sinn sem þú ert að bæta stak til raðað
lista, þú velur bara þáttur sem er framan við óflokkaðs listanum.
Og þá þú ert að fara að finna hvað stöðu það ætti að vera í Raðað
hluti af listanum.
>> Við skulum sjá hvað þetta er svo þetta gerir meira vit.
Svo í upphafi, til dæmis, ég er að reyna að setja númer þrjú í
Raðað hluti af listanum.
Svo listinn hefur ekki neitt.
Svo ég get bara setja númer 3.
>> Nú, ég vil bæta talan 5 til að Raðað hluti á listanum.
Svo lít ég á númer 5.
Ég tók eftir að það er stærra en 3.
Þannig að ég veit að það þarf að vera eftir 3.
Þannig að ég setti 3 og 5.
>> Þá vil ég að setja númer 2.
Ég tók eftir því að númer 2 er í raun endast þá bæði 3 og 5.
Svo ég hef í raun að setja það allt leið í upphafi listanum.
Svo ég verð að, eins konar, skipta öllum þætti í raðað listanum svo ég geti
að gera pláss fyrir númer 2.
>> Þá er ég að sjá í 6..
Ég sé að það ætti að vera eftir 5.
Þannig að ég setti það þar.
Og að lokum, ég lít á númer 4.
Og ég tók eftir að það ætti að vera á milli 3 og 5.
Og svo ég setti það þar og breyting allir aðrir þættir.
Skynsamleg?
>> Bubble Sort.
Svo er kúla tegund grundvallaratriðum það sem þú ert fara að do-- við köllum það kúla
raða því sem þú ferð í gegnum list-- það er í raun betra ef ég sýna bara
þú vilt this--
og þú ert að fara að bera saman aðliggjandi tölur.
Og þú ert að fara að skipta þeirra Halda ef þeir eru ekki
í réttri röð.
>> Svo í grundvallaratriðum, hvað er að fara að gerast er hér, til dæmis,
þú ert 8 og 6.
Þú veist að Raðað til mun reyndar vera 6 og 5, ekki satt?
Svo þú ert að fara að skipta pantanir.
Þá er ég að sjá 8 og 4 hér.
Og ég gera það sama.
Ég skipti aftur.
Og að lokum, 2 og 8.
Ég skipta líka þá.
>> Það heitir kúla Raða því eftir hvert þessara endurtekningar, reyndar,
mesti fjöldi í listanum fær allt leiðin til loka listanum.
Er að skynsamleg?
Því það heldur skipta um það og færa það til hægri.
>> Allt í lagi, þannig að þetta er annað endurtekning.
Það væri það sama.
Ég skal gera eina skipti og þá seinast.
Ég að það eru engar skiptasamninga og listinn er raðað.
Svo í Bubble Sort, halda við í rauninni að fara í gegnum listann og skipta
hlutir fyrr en ég eftir því að ég gerði það ekki allir samningar gera það endurtekning, sem
þýðir að listinn er þegar raðað.
Skynsamleg?
>> Við skulum tala svolítið um að keyra tíma.
Svo gera þú krakkar muna Big O, Omega, og Þeta?
Já?
Allt í lagi, hvað er stór O, fyrst af öllu?
>> Áhorfendur: [inaudible].
>> LUCAS: Já, það er kallað versta tilfelli afturkreistingur, sem þýðir bara að það er
hversu mikið þú búist forritið að taka til að keyra.
Eins, hvað of--
í þessu case-- n.
Fjöldi staka í því listi í versta tilfelli.
Eins og í versta tilfelli.
>> Svo fyrir Bubble tegund, til dæmis, Við höfum Big O n veldi.
Hvers vegna höfum við það?
Hvers vegna er kúla Raða Big O n veldi?
>> Áhorfendur: [inaudible].
>> LUCAS: Já, þannig að versta verður sem ég ætla að gera n endurtekningar.
Svo hvert endurtekningar er að fara að koma stærsta stak til enda
af listanum.
Svo versta er að ég hef að gera þessi hlutur n sinnum.
Og fyrir hvert af þeim tímum, ég verð að gera n skiptasamninga vegna þess að ég þarf að bera
hver tveir þættir.
Svo er það hvers vegna það er n veldi vegna þess að það er n sinnum n.
>> Þá val tegund er einnig n veldi vegna þess, fyrir hvern endurtekning, ég verð að
líta á hvert einasta þáttur á listanum.
Og þá finna minnstu, sem þýðir að ég þarf að
líta í gegnum n þætti.
Og ég þarf að gera að n sinnum þar Ég verð að velja allar n þætti.
>> An insertion sort er einnig n veldi því versta falli mun
vera, einn, ég verð að setja n tölur, ekki satt?
Þannig að ég veit nú þegar að ég er að fara að hafa n endurtekningar.
En fyrir hvert þær tölur, ef ég hefði að líta á allar tölur í
sem raðað lista og setja það alla leið í framan, sem mun vera n veldi
vegna þess að það verður að vera n sinnum n aftur.
Skynsamleg?
Hvað um omega?
>> Áhorfendur: [inaudible].
>> LUCAS: Það besta falli.
Svo það er eins, í fullt af tímum til flokkun, besta falli er
þegar listinn er þegar raðað.
Svo þú í raun ekki hafa að gera neitt.
Bubble Raða hefur bestu smyndir n.
Gera þú krakkar vita hvers vegna?
>> Áhorfendur: [inaudible].
>> LUCAS: Já, ef þú halda utan um hvort gögn sóknir hefði einhverjar skiptasamninga eða
ekki, ef þú ert eitthvað eins og sett á satt ef það var endurtekning, ef
Listinn er þegar raðað, í grundvallaratriðum, hvað er að fara að gerast er að ég ætla að
reyna að skipta hvert tvö aðliggjandi þætti.
Ég ætla að sjá um að það eru engar skiptasamninga.
Og ég aftur bara strax.
>> Svo það þýðir að ég þurfti bara að fara í gegnum listann einu.
Svo er það n vegna þess að ég leita á n þáttum.
Hvers vegna Val raða n veldi?
>> Já, jafnvel þótt listinn er raðað, að hvert endurtekning af val tagi, ég
hafa til að velja lágmarks frumefni.
Svo það þýðir að ég hef út á að líta á alla þætti í óflokkað
lista og finna lágmarki fyrir hvern endurtekning.
Er að skynsamleg?
>> Og innsetning sverð er n vegna þess að í því mál sem ég er að reyna að setja inn á
tölur og allar tölur, þegar ég reyna að setja þá, sé ég að þeir
eru í rétta stöðu.
Ég þarf ekki að fara að athuga allar aðrar tölur í óflokkuðu listanum.
Svo er að hvers vegna það verður n.
Skynsamleg?
Og hvað er þeta?
>> Áhorfendur: [inaudible].
>> LUCAS: Hvað, því miður?
Segja það aftur.
>> Áhorfendur: [inaudible].
>> LUCAS: Einmitt.
Svo er hægt að sjá að aðeins val geymd í Mergesort hafa thetas.
Og það er vegna þess að þú hefur aðeins þeta ef bæði Big O og Omega eru þau sömu.
OK.
Og að lokum, sameina tagi er í log n.
>> Og þá, eins og Dan var að segja, Sameina raða er góður af eins og á sama hátt að
þú tvöfaldur leit.
Þannig að þú færð lista.
Og þú ert að fara að skera í tvennt.
Og þá þú skera þá í minni helminga.
Og þá þú sameina þá.
Þú krakkar muna að, ekki satt?
Allt í lagi, eins og hann var að segja.
>> OK, ábendingum.
Svo er það bendi?
>> Áhorfendur: [inaudible].
>> LUCAS: An heimilisfang.
OK.
Ég veit að Davíð sýnir fullt af myndbönd af binky og hlutir sem bendir
hvert annað.
En ég eins og til hugsa af ábendingum sem eingöngu heimilisfangi.
Svo er það breyta sem er að fara að geyma veffang.
>> Svo það er bara þetta sérstaka breytu sem er fjögur bæti.
Mundu, að bendillinn að nokkuð er alltaf fjórir bæti fyrir okkar 32-bita
vél svo málið með tækið.
Og það hefur bara staðsetninguna breytu inni af því.
>> Allt í lagi, þannig að það er þetta minni, í grundvallaratriðum.
Svo að hver blokk af minni hefur í raun merki, sem er heimilisfang sem
slotty minni.
Svo það þýðir að ég get haft bendi benda til
eitthvað af þessum netföngum.
Svo ástæða þess að við munum nota ábendingum er ef ég þarf að muna staðsetninguna
að tiltekinn breytu er minni.
>> Og þú krakkar muna að einn af þeim tilvikum var ef ég hafa a virka
ef ég hef í raun vil þér að skipti fyrir reals, ég reyndar
þurft að senda músina.
Ekki breytan.
Gera þú krakkar muna að?
Munurinn between--
hvað er nafnið?
Starf með gildi og kalla með tilvísun, ekki satt?
>> Allt í lagi, já.
Svo kalla eftir gildi.
Þegar þú sendir bara inn breytu til virka þú ert bara að senda inn gildi.
Svo þú ert í raun að senda afrit af breytu.
Og program gat ekki aðgát minna um það bil ef sama breytilegum raun
Býr til afrit.
>> Og kallar eftir tilvísun þýðir að Ég er reyndar að senda afrit af
músina til þess breytu.
Svo það þýðir að ég er að senda á staðsetning þess breytu.
Svo vit ég hef um staðsetningu á breytu, þegar ég kalla fallið
með ábendingum, sem ég er fær um að í raun og veru breyta gögnum sem var í aðal.
Skynsamleg?
>> Þó, bendillinn er afrit, sem bendillinn hefur enn raunverulegt veffang
breytan sem ég vil breyta.
Skynsamleg?
>> Svo búa ábendingum.
Mundu, músina alltaf gerð sem það er að benda
til og þá stjörnu.
Og þá setja nafnið.
Svo muna að þegar þú ert hvað stjörnu, það er eins og bendill til
að allt sem breytu slá að þú hefðir.
>> Svo hér í stjörnu, til dæmis, það er bendillinn og heiltala.
Og þá er bleikju stjörnu bendillinn bleikju stjörnu og svo framvegis.
Já?
>> Áhorfendur: Hvað ef við höfum bendi n að stjörnu x.
Ég veit að býr bendi til x.
Er það lýsa einnig x heiltala?
>> LUCAS: Allt í lagi, þannig að þegar þú segir n stjörnu x, þú ert ekki að búa til bendi til að
breytilegum x.
Þú ert að búa til bendilinn heitir x.
>> Áhorfendur: [inaudible].
>> LUCAS: Svo þegar ég segi n stjörnu x, ég er segja, hey, í minni, ég ætla að
fá einn af þessum þremur reitum.
Og ég ætla að segja að það er að fara að vera x, sem er
fara til vera a músina.
Og eitthvað áhugavert um ábendingum er að við segjum að þau hafa
4 bæti fyrir 32-bita vél.
Og ástæðan fyrir því er vegna þess að 4 bæti eru 32-bita.
>> Og vélar sem eru 64 bitar í raun hafa ábendingar netföng
sem eru 64 bita langir.
Svo það þýðir bara að hann er stærð heimilisföng í vél er öðruvísi.
>> Svo vísa og Dereferencing.
Það eru tvær rekstraraðila sem þú krakkar ættu að muna.
Í fyrsta lagi er ampersand.
Annað er stjarna.
Ekki fá rugla með að stjörnu og þetta stjörnu vegna þess að muna að í
þetta mál, hefur þú n stjörnu.
>> Það er eins og a heild hlutur saman.
Það er engin n rúm stjörnu.
Svo það þýðir að það er gerð.
Mundu að þegar þú ert breytan stjörnu, þú ert
að tala um tegund.
>> Þegar þú ert bara stjörnu og þá nafn breytu, þá þýðir það að
þú ert dereferencing músina, sem þýðir að þú ert að horfa á
músina, finna tölu það er bendir til, að fara á þetta netfang,
og horfa á hvenær þú ert þarna.
Svo ég segi nemendum mínum að þegar þú ert stjörnu, ættir þú að hugsa um að það er
skammstöfunin á efni.
>> Svo ef þú ert með músina og þú gera stjörnu músina, er það
innihald músina.
Svo þú ferð til hvað það er sem bendir til og líta á föstu efni.
Og ampersand er sama hlutur sem heimilisfang.
>> Svo ef ég er með breytu a-- eins, við skulum segja að ég gerði int a jafngildir 3--
ef ég vil að finna veffang sem breytu minni, ég get bara gert
merkið a.
Svo það er heimilisfang a.
Skynsamleg?
>> Svo hér er dæmi.
Þetta vantar int b og int c.
Svo int a jafngildir 3 leiðir sem Ég ætla að fara í minni.
Og ég ætla að fara að finna rifa og setja númer 3 hér.
>> Og þá int b jafngildir 4.
Ég ætla að gera það sama.
Fara til minni og setja númerið 4 í einu af kassa.
Og int er 5.
Finndu annan kassann og setja númer 5.
>> Svo er það þessi lína að gera út? n stjörnu ári jafngildir merkið a.
Svo fyrst af öllu, n stjörnu ári.
Hvað er það að gera?
>> Áhorfendur: [inaudible].
>> LUCAS: Já, svo n stjörnu ári, fyrst, segir bendi heitir ári.
Og þá er það framselja verðmæti sem bendi til að vera heimilisfang a.
Svo merkið a.
Þá, ef ég stjörnu PB, hvað er stjarna Pb?
>> Ó, fyrirgefðu.
Þetta er einnig saknað. n stjörnu Pb.
Ég meina stjörnu stk.
Ég er svo leitt.
Það er það sama.
En nú er ég góður AR búa bendi til b og þá bendi til c.
Já?
>> Áhorfendur: [inaudible]?
>> LUCAS: Já.
Svo ef þú ferð í minni og þú ferð að kassinn sem er designator fyrir pa,
þú ert í raun að fara að sjá veffang.
OK?
Já?
>> Áhorfendur: [inaudible]?
>> LUCAS: Já, bendillinn er heimilisfang.
Aldrei gleyma því.
Það er eins og mikilvægasta hluti um ábendingum.
Það er að geyma og heimilisfang að einhverju breytu.
Nokkuð fleira?
Aðrar spurningar?
OK.
>> Svo Ábendingum og Fylki.
Mundu að þegar ég int array 3, grundvallaratriðum, það sem ég er að gera er ég, góður
af, lýsa í bendi.
Svo er array konar eins bendi til að sérstakur staður í minninu þar sem ég
úthlutað þremur rifa fyrir heiltölur.
Er að skynsamleg?
>> Svo þegar ég int array 3, það sem ég er gera, í grundvallaratriðum, er að búa til þrjú
rifa í minni.
Svo finnst mér bara þrjá rifa í minni.
Svo ef ég, þá stjarna array, það þýðir í rauninni innihald array,
sem þýðir að ég eyða músina, ég fer að þeim stað sem það er að benda á að,
og ég setti númer eitt.
>> Og þá, ef ég stjörnu array plús 1, það er það sama og að gera array
sviga einn, sem þýðir bara að ég fara til staðurinn sem það er að benda á.
Og þá plús 1 bráðabirgða mér skipta um eina stöðu.
Svo ég fer í þessa stöðu, reyndar, og setja númer tvö.
>> Og þá, þegar ég array plús 2, ég fer þangað sem
benda array er á.
Og þá er ég að fara að minni blokkir.
Og svo ég setti númer þrjú hér.
Já?
>> Áhorfendur: Svo stjörnu fylki er einfaldlega segja mjög fyrstur lið.
Og þú getur bætt við 1, bara vegna þess að við erum bara virkilega
tilvísanir þessi fyrstu tölu.
>> LUCAS: Já.
Hvers vegna eigum við, til dæmis, segja array 0, array 1, og array 2?
Ég er að segja, af hverju gerirðu 0, 1, 2, 3 í stað 1, 2, 3?
Ein af ástæðunum er einn, tölva forritari kjósa að byrja
talið frá 0.
Tvö er vegna þess að þegar þú gerir array 0, það er það sama og að gera array
plús 0, sem þýðir að ég fer að að staða, og ég ekki
sleppa allir minni blokkir.
Svo ég ekki hreyfa ekki allir minni blokkir.
Já?
>> Áhorfendur: [inaudible]?
>> LUCAS: Svo hún að spyrja hvað er munurinn gera
þetta eða gera malloc.
Eitt af því sem mismun er að int array 3 er að búa til
array á mánudaginn.
Og þegar ég malloc, það skapar á hrúga.
Er að skynsamleg?
>> Svo hvernig hjartarskinn malloc raunverulega vinna?
Svo hvers vegna þurfum við enn að nota malloc?
Þýðanda þinn konar tölur út um allt breytur sem þú lýst.
Og hann býr til pláss fyrir alla Af þeim í stafla.
Svo öll breytum þínar eru að fara að vera einhvers staðar í stafla.
Svo hér er umhverfið breytum.
>> Svo í grundvallaratriðum, pláss fyrir þá breytur í minni er úthlutað á
saman tíma.
Svo það þýðir að tölvan þín hefur að vita allar þessar breytur
fyrirfram.
Það þarf ekki að vita hvaða gildi þú ert að fara að setja í þá.
En það þarf að vita hvernig mikið minni þú þarft.
>> En nú skulum segja það, til dæmis, þú ert að búa til array eða taka upp
band sem þú ert að taka frá notandanum.
Þú veist ekki hversu lengi strengurinn er að fara að vera, til dæmis.
Svo þú veist ekki nákvæmlega hversu margir minni blokkir sem þú úthluta, ekki satt?
>> Þannig að það skiptir í raun ekki skynsamleg fyrir þú að segja að setja 100 stafir.
Og hvað þá ef notandi skrifar 150?
Þú ert að fara að vera ruglaður.
>> Svo í rauninni er ekki hægt að vera viss um hvernig mikið minni þú þarft að úthluta
þegar þú þýða forritið.
Þú bara veist að á hlaupa tíma.
Svo er að hvers vegna þú hefur hrúga.
Svo hrúga er að fara að hafa minni að þú ert að úthluta á að
lengd af the program í gangi.
>> Svo í rauninni, þegar þú gerir malloc, hvað þú ert að gera er að úthluta minni á
afturkreistingur, sem þýðir að þú ert ákveða rétt á þeirri stundu sem þér
ætti að hafa að minni.
Svo er það þegar þú ert að úthluta því.
Er að skynsamleg?
>> Svo man, stafla er breytur sem eru búnar til á saman tíma.
Og þá hefur hrúga breytur sem eru búnar eins og þú fara
með malloc, til dæmis.
>> Áhorfendur: [inaudible]?
>> LUCAS: Svo GetString er að fara að hringja malloc.
Leyfðu mér að tala um malloc, og Ég skal útskýra GetString.
Svo er malloc sama sem minni úthlutun.
Svo það er að fara að úthluta minni á hrúga.
Og það er að fara að skila bendi á þar sem minni var úthlutað á.
>> Svo þegar þú do--
hér fyrir example--
n stjörnu músina.
Og þá bendi jafngildir malloc stærð tommu sinnum 10.
Ég er að stofna músina.
Og þá er ég framselja það bendi til gildi bendillinn að malloc
er að gefa mér.
>> Þannig að ég ætla að biðja malloc getur þú tekið pláss fyrir 10 heiltölur.
Það er það sem það er að segja.
Og malloc gefur mér aftur a músina að þeim stað.
Skynsamleg?
OK.
Ég Og GetString er, í grundvallaratriðum, að gera a kalla til malloc svo þú getur tekið
minni á afturkreistingur.
>> Alltaf að muna eftir að athuga for null því malloc er að fara að skila null
ef það er ekki hægt að úthluta minni.
Segjum að þú biður um fáránlega magn af minni.
Tölvan þín er ekki að fara að vera fær um að úthluta það mikið.
>> Svo malloc er bara að fara til að fara aftur null.
Svo alltaf að muna eftir að athuga hvort bendillinn að þú got frá malloc er
null eða ekki vegna þess, ef það er, þú might að dereferencing bendi og
veldur aukaverkunum galla.
Og að lokum, ekki gleyma minni þitt.
>> Malloc er að skapa minni hrúga.
Og þú þarft að losa um minni áður en áætlunin endar.
OK, það er allt fyrir mig.
Því miður, Rob.
Takk.
>> [Applause]
>> LUCAS: Allir Síðustu spurningarnar áður Rob kemur?
Nei?
Já?
>> Áhorfendur: Ég vissi ekki að sjá þetta á netinu.
Hefur þú sent hana enn?
>> LUCAS: Ég held Dave er hlaða það fljótlega.
>> DAVE: Það verður staða.
>> LUCAS: Það verður að vera á netinu.
>> Áhorfendur: Það er allt.
>> LUCAS: Það er allt?
OK.
Já?
>> Áhorfendur: [inaudible]?
>> LUCAS: Já, þú ættir að losa alla minni sem er sett í hrúga.
>> Áhorfendur: [inaudible]?
>> LUCAS: Já.
Í hvert sinn sem þú ert með menningu malloc, þú ættir að hafa menningu ókeypis
eftir að þú hættir að nota þá breytu.
Svo malloc og ókeypis eru alltaf saman.
Bestu vinir þeirra.
Já.
Rob?
>> ROB: Ég fer fljótt.
Og einnig vídeó verður að setja upp.
Ég hef mic á.
>> Allt í lagi, þannig að viku fimm dót.
Fyrsta sem við þurfum er að stafla.
Svo að muna að það er bara ein stakkur ramma á virkum virka símtalinu.
Við munum sjá að í sekúndu.
Og líka að muna hvað raunverulega fer í hverju stafla ramma eru að fara að vera
staðbundin breytur í aðgerðir okkar, rök sem eru lentu í okkar
aðgerðir, ásamt þeim aðrir hlutir sem þú í raun ekki
þurfa að hafa áhyggjur óður í.
>> Svo er hér dæmi program þar, tilkynning, helstu er printfing aftur
Verðmæti foo 4.
foo er bara að fara að fara aftur á Verðmæti barnum 4 komma 6.
Og bar er að fara að setja nokkrar sveitarfélaga breytilegum n jafnt og 4 sinnum 6.
Og svo aftur n.
>> Svo skulum líta á stafla allan raunverulegt endurtekning af þessu forriti.
Svo er það neðst á stafla okkar.
Mundu að stafla vex upp.
Svo neðst á stafla okkar, við hafa stafla ramma fyrir helstu.
Þegar forritið byrjar, helstu er alltaf að fara að vera á
neðst á stafla okkar.
>> Og hvað er inni okkar stafla ramma fyrir helstu?
Svo jafnvel þó að það eru engin staðbundin breytur til helstu, eins og ég sagði áður,
Við höfum argc og rgv taka upp pláss inni af helstu stafla ramma.
Svo helstu er nú að fara til hringja í virka foo.
Og það þýðir foo er að fara til fá eigin stafla ramma þess.
>> Svo nú erum við inni fallið foo.
Og hvað þarf að fara í stafla ramma Foo er?
Jæja, foo hefur rök n.
Og n er jafnt og 4 þar sem það er það Helsta er farið sem rök Sigur er.
>> Svo nú foo er að fara að hringja bar.
Hvað er barinn að fara að hafa inni af 'stafla ramma þess?
Það hefur x svarar til 4 y jafnt og sex.
Það er ekki allt sem við erum að fara að hafa í stafla ramma því ég barinn
hefur einnig staðbundin breytu n.
Og n við erum að fara að setja jafnt 24.
>> Svo nú bar er að fara að skila n.
Svo bar er aftur 24 til stafla ramma foo.
Og vegna þess að bar er nú aftur að þýðir að við erum að pabbi stafla ramma
fyrir bar burt af stafla.
Svo allt minni sem barinn hafði verið nota er nú burt stafla.
>> Nú, foo er einnig að fara til að fara aftur 24 til helstu.
Svo nú að foo er aftur, í minni að foo var að nota í 'sínum
stafla ramma er einnig farinn.
Og nú, helstu er að fara að hringja printf.
Svo er printf bara annað virka.
Þegar við köllum printf, það er að fara að vera annar stakkur ramma fyrir printf
virka símtalinu.
>> Hvað erum við brottför printf?
Það er það sem er að fara að fara á stafla ramma þess.
Minnsta kosti, við erum sem liggur að prósent ég Sviga n og
rök 24.
Það gæti hafa meira í það stafla ramma ef printf gerist að vera með nokkur
staðværar breytur.
Við vitum það ekki.
>> En allt sem fer í printf s stafla ramma.
Það er að fara að framkvæma printf.
Þá printf er gert.
Það mun koma aftur.
Að lokum, helstu er gert.
Helstu mun skila.
Og þá áætlun okkar er lokið.
Já?
>> Áhorfendur: Ert þú að sjá [inaudible]
rök [inaudible]
breytur?
>> ROB: Svo er það lúmskur munur milli röksemda og breytur.
Og í raun, í sameiginlegum tala, hafa tilhneigingu fólks til bara blanda þeim upp allan tímann.
En breytur eru formleg nafn af því.
>> Svo argc og argv eru breytur til helstu.
Rök eru það sem þú í raun og veru fara í eins þeim breytum.
Svo þegar ég kalla foo af 4, 4 er rök sem ég er að brottför í.
Og breytu n, inni foo, tekur á gildi 4.
frá 4 var rök.
>> Áhorfendur: [inaudible]?
>> ROB: n er á staðnum breytu til bar.
n er enn staðbundið við foo, en það er breytu til foo.
Það er ekki staðbundin breytu.
Já?
>> Áhorfendur: [inaudible]?
>> ROB: foo er bara að hringja bar og aftur hvað sem bar ávöxtun.
>> Áhorfendur: [inaudible]?
>> ROB: Já, bara til að sjá marga stafla ramma.
Já?
>> Áhorfendur: Hvers vegna var foo heitir áður printf?
>> ROB: Hvers vegna var foo kallað áður printf?
Þannig að ég gæti hafa, í stað þess, gert eitthvað eins int x er jafnt foo af 4
og síðan prentuð x.
En í staðinn, ég sameina aðgerðina hringja í printf rök.
>> En eftir því að við getum í raun ekki framkvæma hringja til printf þar til við
reikna út hvað foo af 4 er.
Þannig að við erum að fara að meta þetta.
Og aðeins einu sinni það er gert eru að fara að koma til baka og meta þetta.
Já?
>> Áhorfendur: sává'l bar [inaudible]
gildi, hvers vegna höfum við ekki [inaudible]?
>> ROB: Þeir algerlega ætti að vera int.
Það var ekki veiddur á margar fer.
Svo það ætti að vera int bar og int foo frá bæði þeirra
eru að skila heiltölur.
Ógilt er aðeins ef þeir eru ekki að fara til að fara aftur raunverulegt gildi.
Já?
>> Áhorfendur: Ef þú átt línu ofan aftur, [inaudible]?
>> ROB: A lína fyrir ofan staðinn?
>> Áhorfendur: Já.
Eins og ef þú gerðir printf og [inaudible], myndi það prenta tvisvar?
>> ROB: Svo inni foo?
Ef við hefðum printf hérna?
>> Áhorfendur: Já.
>> ROB: Svo ef við hefðum printf rétt Hér væri að prenta einu sinni.
Þar sem við erum að kalla foo einu lagi hér, þá munum við ná printf.
Við munum þá kalla bar.
Og þá foo mun skila.
Og það er það.
Við lendum bara alltaf sem printf einu sinni.
Já?
>> Áhorfendur: [inaudible]
printf hringja foo vegna þess að við erum fyrst kalla printf og þá erum við brottför
rökin.
>> ROB: Svo í orði, er ekki printf hringja foo?
Svo nei.
Bara til þess að c er að fara til framkvæma þessa hluti er, áður en við getum
hringja í aðgerð, öll rök að virka þarf að
að vera alveg metið.
Svo er þetta alveg metið?
Já, það er bara band.
Það er bara gildi.
>> Þá verðum við að fullu meta þetta.
Þegar þetta er gert, nú er allt að rök hans eru metin.
Og nú getum við gert kalla til printf.
Já?
>> Áhorfendur: Ein spurning.
Ef þú ert með ógilt virka, verður þú ert aftur semíkommu?
>> ROB: Þú ert ekki að fara aftur semíkommu ef þú ert með ógilt virka.
OK.
Svo nú sumir hrúga efni.
Svo er hrúga hvernig við ætlum að takast á með dynamic minni stjórnun.
Og þetta beint andstæðum með stafla sem við myndum kalla sjálfvirka
minni stjórnun.
>> Svo á mánudaginn, aldrei raunverulega hafa að takast á við það hvernig staðbundnar breytur
eru ýtt og smella á allt þessi stafla ramma og allt það.
Þú þarft ekki að hafa áhyggjur óður í það.
Það er sjálfvirk.
Svo er hrúga handbók.
Og [inaudible]
kemur frá þessum aðgerðum malloc og frjáls.
>> Svo hér er annað forrit.
Allt sem við erum að gera er mallocing heiltala.
Við erum að geyma hana í stjörnu x.
Að sjálfsögðu verðum við að athuga til að sjá hvort x er núll.
Þá erum við að fara að bara setja hvað x er bendir til að 50.
Prenta hvað x er bendir til, prenta x, og þá frjáls x.
>> Svo hvernig er þetta í raun að fara að horfa ef við skoðum stakkur okkar og hrúga?
Þannig að við munum hefja aftur.
The botn af stakkur okkar eins og áður.
Mundu að þér hrúga beint móti stafla?
Þannig að við erum að fara að hafa efst á hrúga okkar þarna uppi.
>> Svo the botn af stakkur okkar, höfum við stafla ramma okkar fyrir helstu.
Það hefur pláss fyrir argc, argv, og við nú hafa a heimamaður breytu x, sem
er int stjarna.
Þannig að við erum að fara að kunnugt í gegnum þetta forrit.
Fyrsta sem við þurfum er kalla til malloc.
>> Þannig að við erum að gera hringja í malloc.
Malloc er fall.
Það er að fara að fá stafla ramma.
Hvað erum við að brottför til malloc?
Það er að fara að fara inn að stafla ramma.
Við erum liggur stærð n, sem er 4.
Svo sem berst til malloc.
>> Hvað þýðir malloc gera?
Það grípur okkur nokkur pláss á hrúga.
Þannig að við erum að fara að fara í hrúgunni.
Og við erum að fara að grípa 4 bæti úr hrúgunni.
Svo skulum bara gefa það handahófskennt netfang.
0x123 Bara láta sem er heimilisfang sem er á hrúga.
>> Svo er það í raun og veru inni sem svæði af minni á heimilisfang Ox123?
Sorp.
Þannig að við höfum ekki geymt neitt í því.
Svo eins langt eins og við vitum, það gæti verið hvað sem er.
Þú ættir ekki að taka það er núll.
Það er líklega ekki núll.
>> Svo nú malloc skilar.
Og hvað gerum við þegar malloc aftur?
Við setjum það aftur.
Við setjum x jafngilda því það er að fara aftur.
Svo hvað er það aftur?
Það er aftur 0x123 þar sem er heimilisfang blokk af minni sem það
bara úthlutað í hrúga.
>> Svo aftur 0x123 x er nú að fara að setja jafnt 0x123 sem pictorially,
við drögum oft sem x hefur í raun örin bendir til þess að sýna í reitnum.
En x er bara að geyma þetta netfang.
Svo nú verðum við að athuga hvort x er núll.
Það er ekki null.
Við þykjast að það malloc tekist.
>> Svo nú stjörnu x jafngildir 50.
Svo stjörnu man það þýðir fara á þetta netfang.
Svo 0x123 Við erum að fara að fara á þetta netfang.
Svo að koma okkur upp þarna.
Hvað erum við að gera á þetta netfang?
Við erum að geyma 50.
>> Svo eftir þessa línu, það er hvað hlutirnir eru að fara að líta út.
Svo nú er það ekki lengur sorp þarna.
Nú vitum við að 50 er í að einkum netfang því
við sett það til að.
OK?
Svo nú erum við að fara að prenta f.
>> Svo fyrst að við erum að fara að prenta stjörnu x.
Svo er það stjarna x?
Aftur, stjörnu x þýðir að fara á hlutur sem x bendir til.
Svo x er sögufrægur 0x123 Farðu í það.
Við fáum 50.
Svo prenta m það.
Og það þýðir að það er að fara að prenta 50.
Og þá skilar það.
>> Og þá höfum við annað printf.
Við erum nú prósent bls.
Ef þú hefur ekki séð það, það er bara hvernig þú prenta bendi.
Þannig að við höfum prósent i, prósent f og allir þeir þegar.
Svo prósent p, prenta bendi.
>> Svo er x bendillinn.
Þannig að ef við erum að fara að prenta x sjálfu sér, við erum að prenta hvað er í raun inni
x, sem er 0x123 Svo fyrsta prenta f er að fara að prenta 50.
Annað prenta f er að fara að prenta 0x123 Já?
>> Áhorfendur: Ert þú að nota prósent x að prenta bendi?
>> ROB: Svo notarðu prósent x að prenta bendi?
Svo þú getur en prósent x er bara, almennt, að eins og ef þú hafa sumir
tala og þú vilt prenta það sem sextánskur.
Það er bara hvernig þú gerir það.
>> En, prósent d myndi prenta eins aukastaf.
Það er við vorum að fá prósent d. ég er bara tala.
prósent p er sérstaklega fyrir ábendingum.
>> Svo er x bendillinn.
Við viljum nota hlutfall bls.
En prósent x gæti unnið.
Já?
>> Áhorfendur: [inaudible]?
>> ROB: Já.
Að minnsta kosti fyrir þetta call-- svo ég ekki fela það í hér.
En þessir tveir rök eru endilega inni þessa stafla ramma
ásamt öllum staðbundnum breytur printf gerist að vera með.
Og svo næsta símtali að printf nú inni printf stafla ramma er
prósent p sviga n og hvað sem gildi x er, sem er 0x123.
Já?
>> Áhorfendur: [inaudible]?
>> ROB: Það verður að prenta eitthvað sem lítur svona út.
>> Áhorfendur: [inaudible].
>> ROB: Svo prentar það í netfangaskrá formi.
Það lítur út eins og heimilisfang.
Já?
>> Áhorfendur: [inaudible]?
>> ROB: Hvers vegna er það?
>> Áhorfendur: [inaudible]?
>> ROB: Hvers vegna er þetta bendi 4 bytes?
Þannig að það eru a heild búnt af 0 í framan þessu.
Svo er það virkilega 0x0000000123.
Á 64-bita kerfi, það væri a heild búnt af fleiri núllum.
Já?
>> Áhorfendur: [inaudible].
>> ROB: Svo fyrsta printf er að fara að print--
>> Áhorfendur: [inaudible].
>> ROB: Já, það er að fara að prenta hvað x er bendir til.
Star segir hvað er þetta hlutur sem bendir til.
Grípa það.
Svo hvað er það sem bendir til?
50.
Grípa það.
Það er það sem við erum að fara að prenta.
En, næsta einn, við erum bara prentun x sjálfu.
Hvað er inni í f?
0x123.
OK.
>> Og þá höfum við það frjáls.
Hvað erum við að brottför til að losa?
Við erum brottför x.
Þessi tími sem ég birtist í raun það í stafla ramma.
>> Þannig að við erum að brottför gildi 0x123 til að losa.
Svo nú ókeypis veit, allt í lagi, Ég verð að fara upp í hrúgunni
og frjáls að minni.
Það er ekki lengur að nota það sem er í vistfangi 0x123.
>> Svo frjáls er að fara að gefa út að frá hrúgunni.
Nú er hrúga okkar tómur aftur.
Við höfum engar minni lekur.
Nú frjáls mun skila.
Takið eftir að x er enn 0x123.
En það er nú ekki gilt minni.
Við ættum ekki lengur dereference x.
Já?
>> Áhorfendur: Er aftur 0 óþarfi?
>> ROB: Er returen 0 óþarfi?
Já.
Vorum að setja að það vegna þess að Við höfum aftur einn fyrir loft.
Svo það er eins og, já, við skulum fela í endurkomu 0.
Já?
>> Áhorfendur: [inaudible]?
>> ROB: Svo eftir ókeypis x, hvað gerist ef við reynum að dereference músina?
Það er mögulegt að ekkert fer úrskeiðis.
Það er mögulegt að við munum samt fá 50.
>> Það er hægt, líka, að það minni er nú notað fyrir eitthvað annað.
Svo er það óskilgreint hegðun.
Og undefined þýðir eitthvað getur gerst.
Já?
>> Áhorfendur: [inaudible]?
>> ROB: Nei, þannig að ef þú gefur x eitthvað annað.
Þannig að ef hérna við sögðum x er jafnt malloc eitthvað else--
malloc stærð event--
þá að upprunalega blokk af minni er ekki leystur.
Og við höfum opinberlega tapað.
Það er minni leka.
Við höfum misst allar tilvísanir þeirri blokk af minni.
Þannig að það er engin leið að við getum alltaf losa hana.
Allt í lagi, svo þá aftur 0 þýðir gert.
>> Allt í lagi, svo stafla flæða.
Hvað er hugmynd hér?
Svo man, hrúga er að fara niður.
Stack er að fara upp.
Þannig að þetta var dæmi úr fyrirlestri, Ég held, þar helsta er bara að fara að
kalla þetta virka foo, sem er að fara að kalla sig endurkvæmt yfir og
aftur.
>> Svo stafla ramma eru að fara að vinna nákvæmlega sama.
Þannig að við erum að fara að byrja með helstu sem botn stafla ramma.
Þá helsta er að fara að hringja í foo, sem er að fara að fá stafla ramma.
>> Þá foo er að fara að hringja í foo aftur, sem er að fara að fá
annar stafla ramma.
Og svo aftur, og aftur, og aftur, og aftur þangað til að lokum, hlaupa við
í hrúgunni.
Svo er þetta hvernig við komumst stafla flæða.
Og á þessum tímapunkti, seg þú kenna.
Eða þú vilt virkilega seg kenna áður þetta lið en já.
>> Áhorfendur: Er algerlega sorphaugur á sama og seg kenna?
>> ROB: Svo þú munt sjá skiptingu kenna algerlega varpað.
Þú færð algerlega sorphaugur þegar þú seg kenna.
Og það er eins og sorphaugur allra sem Innihald núverandi minni þitt svo
að þú getur prófað og þekkja hvers vegna þú seg faulted.
Já?
>> Áhorfendur: [inaudible]?
>> ROB: Svo skiptingu kenna þýðir það er stafla flæða.
Svo ekki endilega.
A skiptingu kenna þýðir að þú ert snerta minni á þann hátt
þú ættir ekki að vera.
Svo ein leið að gerast er, þegar þú stafla flæða, við byrjum að snerta
minni á þann hátt að við ættum ekki að vera.
Já?
>> Áhorfendur: [inaudible]?
>> ROB: Svo inni óendanlega lykkju.
Eins og þetta er eins og endurkvæma óendanlega lykkja og svo fáum við annað
stafla ramma í hvert skipti.
En bara inni venjulegur óendanlega meðan one--
vel, við skulum ekki einu sinni prenta f--
gera eitthvað.
Hvað.
>> Við erum ekki að fara að fá annar stafla ramma.
Við erum bara að fara að halda lykkja yfir þessari einu fræðslu.
Stafla er ekki vaxandi.
Það er sú staðreynd að hver endurkvæma kalla er að gefa okkur stakkur ramma.
Þess vegna fáum við stafla flæða.
Já?
>> Áhorfendur: Svo ef þú segir að fá meðan lykkja og þá [inaudible]?
>> ROB: Svo ef inni í while lykkju það var printf, þú myndir samt
ekki seg sök.
Ég bara vildi ekki að rugla hlutina.
Það væri lykkja.
Þú vilt fá einn stafla ramma fyrir printf.
>> Þá printf myndi koma aftur.
Síðan sem þú myndi lykkju aftur.
Þú vilt fá einn stafla ramma fyrir printf.
Það myndi aftur.
Single stafla ramma.
Svo þú ert ekki að fá þetta óendanlega hlóðust upp stakkur ramma.
>> Áhorfendur: [inaudible]?
>> ROB: Já.
Þannig að þetta stafla flæða gerist því enginn af þessum
kalla til foo eru aftur.
Svo ef við aftur, þá myndum við byrja að tapa stakkur ramma.
Og þá myndum við ekki stafla flæða.
Og það er hvers vegna þú þarft að grunntilvikið fyrir persónulega aðgerðir þínar.
Já?
>> Áhorfendur: Er möguleiki stærð og stafla fyrir hrúga sömu fyrir
öll forrit?
>> ROB: U.þ.b..
Er möguleiki stærð stafla og að hrúga sama fyrir öll forrit?
U.þ.b..
Það er einhver slembival til þar sem stafla byrjar og
þar sem hrúga byrjar.
Ef þú skyldir hafa a heild einhver fjöldi af Alþjóðlegar breytur og svoleiðis, þú gætir
taka í burtu frá sumum rúm fyrir hrúga þitt.
>> Á 64-bita kerfi, þú nánast hafa óendanlega minni.
Það er bara svo mikið.
Milli 32 bita og 64 bita, sem er marktækur munur.
>> Þú ert að fara að fá a heild einhver fjöldi fleiri stafla og hrúga pláss á 64-bita
kerfi vegna þess að það er bara meira heimilisföng sem þeir geta notað.
En á einstökum kerfi, það mun vera um það bil sama magn af stafla
og hrúga pláss.
Allt í lagi.
>> Svo er það síðasta sem samantekt.
Svo þú ættir að vita þetta ferli.
Það eru fjögur stór skref.
Svo sá fyrsti ætti að vera auðvelt að muna.
Pre-vinnslu.
Það hefur forskeytið fyrirfram í það.
Svo það kemur fyrir allt annað.
>> The hlutur til muna er kjötkássa.
Svo kjötkássa skilgreinir og kjötkássa nær í öllum þeim.
Þeir eru allir pre-örgjörva tilskipanir.
Þetta eru hlutir sem að pre-örgjörva sér um.
>> Svo hvaða hjartarskinn a pre-örgjörva að gera?
Það er mjög heimskulegt hlutur.
Allt það er fær um eru allar þessar afrita og skera, og líma aðgerðir.
>> Svo kjötkássa inniheldur staðlaða I0 punktur h.
Hvað er að gera?
Það er grabbing staðlaða I0 punktur h skrá og líma það inn í the toppur
hvar sem það segir kjötkássa nær staðall I0 punktur klst.
>> Og allir kjötkássa skilgreina sem við höfum séð, hvað er það að gera?
Afrita þess virði að kjötkássa skilgreint er skilgreint sem og líma það
hvar sem þú ert að nota gildi.
Svo Preprocessor bara þýðir í raun einföld texta undirstaða starfsemi.
Það gerir ekki neitt sviði.
Svo er allt annað flóknara.
>> Svo nú er að Preprocessor gert, við saman reyndar.
Svo hvað þýðir að setja saman meina?
Við erum nú að fara af c kóða að samkoma kóða.
Já?
>> Áhorfendur: [inaudible]?
>> ROB: Já, tók við að.
Svo að setja saman.
Við erum að fara úr C í söfnuði.
Svo er þetta í raun tungumál breyting.
Samantekt sig þýðir að fara frá hærra stigi tungumál til
lægri láréttur flötur tungumál.
>> Og c er a hár láréttur flötur tungumál samanborið við söfnuð.
Hvað er samkoma?
Leiðbeiningar þess sem eru, nokkuð mikið, gerði fyrir CPU.
En tölvan gerir enn ekki skilja samkoma.
Það skilur bara sjálfur og núll.
Þannig að næsta skref er að setja saman, sem færir okkur frá þessum leiðbeiningum sem
CPU skilur og raun þýðir þá, að
þær og núll.
>> Svo C til samkoma til tvöfaldur.
En ég hef ekki executable enn.
Svo hugsa um cs50 bókasafn.
Við höfum veitt þér með tvöfaldur fyrir þetta cs50 bókasafn, sem hefur GetString
og GetInt og allt það.
>> En cs50 library--
í og af itself-- er ekki executable.
Það hefur ekki meginhlutverki.
Það er bara fullt af tvöfaldur að þú getur notað.
Svo er að tengja hvernig við koma saman öllum þessara mismunandi tvöfaldur skrá
í raunverulegum executable.
Eitt sem þú getur slegið punktur rista punkt út.
>> Svo er þetta eins og skrá sem þú skrifaði, - sem forritið þitt is--
Ceaser punktur c.
En nú er verið unnin niður tvöfaldur.
Svo Ceaser punktur o.
Og þetta er cs50 okkar bókasöfnum tvöfaldur.
Og þeir eru að sameina í eitt executable.
Já?
>> Áhorfendur: [inaudible]?
>> ROB: Svo fyrst nefna, muna, kjötkássa meðal annars er í raun
pre-örgjörva skref.
En það er sérstakt.
Ef þú ert ekki að nota neina aðgerðir sem eru utan einni skrá þinn þá,
nei, þú þarft ekki að tengja neitt þar sem þú hefur allt.
>> Sem sagt, printf er orðaður í.
Ef þú notar alltaf printf, það er eitthvað sem sem þarf að vera tengd í
vegna þess að þú did ekki að skrifa það.
Og í raun, printf er sjálfkrafa tengd í.
Þú veist hvernig á skipanalínu eða þegar Þú slærð gera, þú sérð það hafa
þjóta Ég cs50, sem hefur tengil í cs50 bókasafninu?
Printf, og svoleiðis, er að fara að vera tengd sjálfkrafa.
Aðrar spurningar um neitt?
>> Áhorfendur: [inaudible]?
>> ROB: Krækjur?
Við hafa a heild búnt af mismunandi tvöfaldur skrá.
Þetta er Canonical dæmi að við notum er cs50 bókasafn.
Við höfum tekið saman og gefið í tvöfaldur fyrir þessa cs50 bókasafn.
>> Þú vilt nota GetString í forritinu.
Svo þú ferð og nota GetString.
En án tvíundarkóða mína fyrir GetString, þegar þú þýða kóðann þinn
niður, þú getur ekki í raun að keyra þinn forrit því GetString String er
ekki enn alveg skilgreint.
>> Það er aðeins þegar þú hlekkur í tvöfaldur minn sem inniheldur GetString að nú, allir
rétt, ég get í raun og veru framkvæma GetString.
Skrá minn er lokið.
Og ég get keyrt þetta.
Já?
>> Áhorfendur: Er Krækjur umbreyta tvöfaldur til executable?
Svo jafnvel ef þú ert ekki annað bókasöfn, myndi það ekki vera enn
þarf að þýða á [inaudible]?
>> ROB: Svo keyrsluskrá er enn í tvöfaldur.
Það er bara að sameina í heild fullt af forritum.
>> Áhorfendur: Þakka þér svo mikið.
>> ROB: Ekkert mál.
Aðrar spurningar?
Annars erum við öll sett.
Allt í lagi.
Takk.
>> [Applause]
>> Áhorfendur: Þakka þér.
>> ROB: Já.