>> [Tónlist spila]
>> ZAMYLA CHAN: Vilt þú fá frekar $ 10.000.000 núna eða fá
smáaurarnir alla daga mánaðarins, þar hverja degi, færðu
tvöfalt magn af smáaurarnir þú fékk daginn áður?
Í smáaurarnir, við erum að fara að sanna hvers vegna þú ættir
ákveðið að taka smáaurarnir.
Starf þitt er að skrifa pennies.c--
forrit sem fyrst spyr notandann hvernig margir dagar eru í mánuðinum og
þá spyr hversu margir smáaurarnir notanda fá á fyrsta degi.
Áætlunin skal síðan reikna upphæð sem notandinn mun hafa
safnast í lok sem mánuði og sýna það.
>> Við getum brjóta þetta forrit upp í nokkra verkefnum.
Við munum þurfa að hvetja til mörgum aðföngum notandi -
daga og mánuði, og smáaurarnir á fyrsta degi.
Við þurfum að halda utan um hversu mikið fé sem notandinn hefur og uppfæra það á hverjum
dag, tvöföldun á magn af smáaurarnir sem þeir fá.
Og að lokum, prenta við þeirra Endanleg alls, í dollurum.
>> Skulum takast notandi inntak fyrst.
Ég ætla að opna apples.c, stutt forrit sem fjallar
með inntak og framleiðsla.
Efst hér, hef ég tekið nokkrar af bókasöfnum sem ég þarf -
CS50 er bókasafn og staðall I / O bókasafn.
Ég prenta hvetja með því að nota printf virka frá
staðall I / O bókasafn.
En í raun vekur á notanda gerist í næstu línu með þetta
GetInt virka í CS50 bókasafn.
>> GetInt fær inntak frá notanda og tryggir að inntak er heiltala.
Svo ég geyma inntak notandans inn heiltölu i, draga 1 úr i, og þá
prenta út nýtt gildi ef ég.
Eftir samantekt apples.c nota stjórn "að gera epli," Ég er með
executable skrá eplum.
Running það, ég inntak 1.
The program segir mér að Ég hef 0 epli vinstri.
Og svo að starfaði sem búist var við.
>> Svo skulum hlaupa þetta aftur og inntak neikvæð 1.
Nú, að hafa neikvæð magn af eplum er í raun ekki skynsamleg, en
the program tekur það, því neikvæð 1, og er það heiltala.
Og nú the program eða skrímsli inni the program étur neikvæð
epli, og nú hef ég neikvæð 2 epli.
Hm, svo það er ein kennslustund -
jafnvel þótt GetInt virka og tengdar aðgerðir, eins GetFlow eða
GetString fá rétt gögn tegund, þú að ganga úr skugga um að inntak gerir
vit fyrir áætlun þína.
>> Í smáaurarnir, mun það ekki gera bara hvetja fyrir heiltala, þú þarft að gera
úr skugga um að notandi inntak heiltala að skynsamleg miðað við samhengi.
Mánuður getur aðeins haft 28, 29, 30, eða 31 daga.
Við viljum stöðugt eftirspurn gild heiltala.
Ef þeir inntak heiltala utan okkar samþykkt mörk, munum við hvetja þau
aftur og aftur, þar til þú gefa okkur gilt heiltölu.
>> Muna að "endurtaka þar" loka í grunni?
Þú getur gert svipaða reisa í C nota "á meðan" lykkju
eða "gera-en" lykkja.
The lykkja meðan uppbygging hefur ástand sem þarf að uppfylla til að
meginmál lykkju til að framkvæma.
>> Þetta ætti að líta svolítið svipað, vegna þess að ástand er bara eins og
Scratch blokkir með hornanna og fer í sviga
að "á meðan" lykkju.
Svo að ástand mun athuga hvort talan er innan
viðeigandi mörk.
Þú getur hvetja heiltala með GetInt og þá framkvæma "á meðan" þinn
lykkja, endurtaka að hvetja og prentun leiðbeiningar, en inntak
er ekki gild.
>> Önnur leið til að tryggja rétta notandi inntak er með því að nota "gera-en" lykkju,
sem er mjög líkur til a while lykkju.
Að "gera-en" lykkja keyrir kóðann inni í líkamanum sjálfur og þá stöðva
hvort skilyrði er uppfyllt eða ekki.
Þetta er gagnlegt til að fá notandi inntak, því þú veist að þú þarft
að hvetja þá að minnsta kosti einu sinni.
Ef skilyrði er ekki uppfyllt, the program mun framkvæma línu eftir
þinn "gera-en" lykkja.
Ef skilyrði er uppfyllt þó, lykkja mun endurtaka
>> A "gera-en" lykkja til að staðfesta notanda inntak mun líta eitthvað eins og this.
Ég lýsi breytilega N, GetInt, og þá endurtekið þar til n er í gildi.
Og þetta ferli, ég útskýrði, var að nota talan-gögn gerð, sem
þú munt nota fyrir daga mánaðarins.
En við vitum að fjöldi smáaurarnir mun stafli upp fljótt, svo í því skyni að
geyma stærri tölur, nota gögn tegund LongLong, en man það sama
Meginreglan um fullgildingu gildir.
>> Awesome, svo þegar við höfum tvær gild inntak frá the notandi -
daga í mánuði og smáaurarnir á fyrsta degi -
getum við flutt inn á næsta hluti af the program.
Fyrsta daginn, sem notandinn byrjar með þó margir smáaurarnir þeir greinast
og fjárhæð smáaurarnir sem þeir fá næsta dag er tvöfaldast.
Svo gerir það vit í að halda utan þessara tveggja magni -
hversu mikið fé sem notandinn hefur og hvernig margir smáaurarnir þeir gefa.
>> Nú, gera eitthvað fyrir 28-31 daga er endurtekin, þannig að við skulum nota "fyrir"
lykkja til iterate yfir dagana í mánuði, að uppfæra alls og eyri
á hverjum tíma.
"Fyrir" lykkja setningafræði inniheldur eftirfarandi -
sem frumstilling, ástand, og uppfærslu.
Þinn "fyrir" lykkja mun frumstilla breytu, þegar það
Fyrsta fer í lykkju.
Ef skilyrði eru uppfyllt, líkaminn úr lykkja mun framkvæma.
Síðan, að endurnýja vilja framkvæma.
Ef ástand er enn fullnægt, lykkja mun framkvæma og uppfæra og
endurtaka, svo lengi sem ástand þitt metur að sanna.
>> Hér er "fyrir" lykkja sem skiptir að heiltala p af 2 samtals 10 sinnum.
Athugaðu hvernig ég lýsti heiltölu p utan mitt "fyrir" lykkju þannig að
heiltala er hægt að nálgast utan "fyrir" lykkju.
Eftir mánuð er liðinn, það er kominn tími að segja að notandinn hversu mikið fé
þeir 'gotten.
Og á sérstakur, þú þarft að segja að notandinn hversu margir dollara, ekki hversu margir
smáaurarnir, hafa þeir.
En svo langt, hefur þú haldið utan um algjör og smáaurarnir með LongLongs,
sem eru náttúrlegar tölur.
>> Það eru 100 smáaurarnir til $ 1, svo nema fjöldi smáaurarnir er
margfeldi af 100, munt þú þurfa að tákna aukastafi.
The tvöfaldast autotype gerir þér að gera þetta.
Svo hvernig gera við breytt frá hönd smáaurarnir á dollara?
>> Skulum kíkja pi.c.
Þetta forrit tekur LongLong big_pi og skiptir það með 100.000, og prentar
niðurstaðan að fimm aukastöfum.
Ef við vildum að sýna fjórar aukastaf stöðum, þá getum við bara skipta um þetta
tala hér.
Svo skulum spara, safna saman PI, og þá sjá niðurstöðuna sem við
búast við að vera 3,1415 -
fyrstu fimm stafirnir pí.
>> Það er ekki þó.
Og hvers vegna?
Jæja, vegna þess big_pi er LongLong, sem er heil tala sem mun ekki
halda utan um aukastöfum.
Breyting sem ég þarf að gera er í skiptingu.
Ég þarf að greiða til tvöfalt hér áður deila, því tvöfaldar getur ekki haldið
fylgjast aukastafa.
Og ég ætla að bæta við nýjum línu hér fyrir betri forsníða.
>> Og hér höfum við það -
3,1416.
Þú gætir tekið eftir því að það prentar 3,1416 stað 3,1415 sem skyldi.
Það er vegna þess að það umferðir á að deild ferli, öfugt við bara
truncating gildi.
Nú þú ættir að vera fær um að prenta á Endanleg alls rétt, sem lýkur
the program.
>> Til hamingju.
Nafn mitt er Zamyla.
Og þetta var smáaurarnir.
>> [Tónlist spila]