>> [Muusika mängib]
>> ZAMYLA CHAN: Kas sa pigem saada 10000000 $ kohe ja vastu
penni iga päev kuus, kus iga järgnev päev, saate
kahekordistada penni te saanud päev varem?
In penne, me läheme tõestada, miks sa peaksid
kindlasti võtta penni.
Sinu ülesanne on kirjutada pennies.c--
programm, mis kõigepealt küsib kasutajalt kuidas mitu päeva on kuul ja
küsib, kui palju penne kasutaja saab esimesel päeval.
Seejärel tuleks kava arvutada summa, et kasutajal on
kogunenud lõpus kuu ja näitab seda.
>> Saame murda selle programmi üles sisse paar ülesandeid.
Me peame küsima Mitme kasutaja sisendite -
päeva ja kuud, ja penne aasta esimesel päeval.
Meil on vaja jälgida, kui palju raha kasutaja on ja mida ajakohastatakse iga
päev, kahekordistades summa penni, et nad saavad.
Ja lõpuks, me printida oma lõplik kogumaksumus, dollarites.
>> Räägime kasutaja sisend esimene.
Ma lähen avama apples.c, lühike programm, mis tegeleb
koos sisendid ja väljundid.
Ülaosas siin, olen lisanud mõned raamatukogude, et mul on vaja -
CS50 raamatukogu ja standard I / O teek.
Ma trükkida kiire abil printf funktsioon
standard I / O teek.
Kuid tegelik õhutusel kasutaja juhtub järgmise kooskõlas käesoleva
GetInt funktsiooni CS50 raamatukogu.
>> GetInt saab panus kasutaja ja tagab, et sisend on täisarv.
Nii et ma salvestada kasutaja sisestatud täisarv i, lahutada 1 I, ja siis
prindi välja uue väärtuse, kui i.
Pärast koostamise apples.c abil käsk "teha õunad," Mul on
käivitatava faili õunad.
Running, et ma sisend 1.
Programm ütleb mulle, et Mul on 0 õunad jäänud.
Ja nii, et töötas ootuspäraselt.
>> Teeme tee see uuesti ja sisend negatiivne 1.
Nüüd, millel on negatiivne summa õunad ei ole tegelikult mõtet, kuid
Programm võtab, sest negatiivne 1, noh, see on täisarv.
Ja nüüd programmi või koletis sees programm sööb negatiivne
õun, ja nüüd on mul negatiivne 2 õunad.
Hm, nii et see on üks õppetund -
kuigi GetInt funktsioon ja seotud funktsioone, nagu GetFlow või
GetString saada õige andmetüüp, siis veenduma, et sisend muudab
tunne oma programmi.
>> In penne, ta ei tee lihtsalt kiire jaoks täisarv, peate tegema
Veenduge, et kasutaja sisestatud täisarv mis mõtet antud kontekstis.
Kuu võib olla ainult 28, 29, 30 või 31 päeva.
Tahame pidevalt nõuda kehtiv täisarv.
Kui nad input täisarv väljaspool meie tunnustatud piirides, siis me sundinud neid
uuesti ja uuesti, kuni sa meile kehtiv täisarv.
>> Meenuta "korrata kuni" blokeerida Scratch?
Võite teha sarnane konstruktsioon C kasutades "while" loop
või "tee-kui" loop.
Samas loop struktuur on tingimus mis peavad olema täidetud
keha loop täita.
>> See peaks vaatama natuke sarnased, sest tingimus on nagu
Scratch plokid nurgad ja läheb sulgudes
ning "kui" loop.
Nii on see tingimus kontrollida, kas täisarv on sees
asjakohane piire.
Võite paluda täisarv kasutades GetInt ja seejärel täita oma "kui"
loop, korrates kiire ja trükkimine juhiseid, kui sisend
ei kehti.
>> Teine võimalus, et tagada õige kasutaja sisend on kasutada "tee-kui" loop,
mis on väga sarnane Kuigi silmus.
"Tee-kui" loop täidab kood kehas ones ja seejärel kontrolli
kas tingimus on täidetud või mitte.
See on kasulik saada kasutaja sisend, sest sa tead, et sa pead
ajendab neid vähemalt üks kord.
Kui tingimus ei ole täidetud, programm täidab rida pärast
oma "tee-kui" loop.
Kui tingimus on täidetud, kuigi loop kordub
>> "Tee-kui" loop kinnitamise kasutaja sisend välja midagi sellist.
Kinnitan muutuja n, GetInt ja korrake kuni n on kehtiv.
Ja selles protsessis, ma selgitasin, oli kasutades täisarv-andmetüüp, mis
saad kasutada päeva kuus.
Aga me teame, et mitmed penni kuhjuma kiiresti, nii et
salvestada suuremaid numbreid kasutada andmetüübi Longlong, kuid pidage meeles, sama
põhimõtte kinnitamine kehtib.
>> Awesome, nii et kui meil on kaks kehtivat sisendeid kasutaja -
päeva kuu ja penne esimesel päeval -
saame liikuda onto järgmise programmi osa.
Esimene päev, kasutaja algab aga palju penne nad määratletud
ja summa penne et nad saada järgmisel päeval on kahekordistunud.
Seega on mõistlik jälgida nende kahe summa -
kui palju raha kasutaja on ja kuidas palju penne nad anda.
>> Nüüd teeme midagi 28-31 päeva on korduv, niiet kasutada "poolt"
silmuse korrata üle päeva kuu, ajakohastamise ja kogu senti
summa iga kord.
"Sest" loop süntaks sisaldab järgmine -
käivitamise, tingimusel, ja uuendatud.
Sinu "poolt" loop initsialiseerida muutuja, kui see
kõigepealt siseneb loop.
Kui tingimus on täidetud, keha of loop täidab.
Hiljem uuendus täidab.
Kui tingimus on siiski täidetud, loop täidab ja ajakohastada ja
Kordan, et nii kaua, kui teie seisund TRUE.
>> Siin on "poolt" loop, mis jagab täisarv p 2, kokku 10 korda.
Vaadake, kuidas ma kuulutatud täisarv p väljaspool minu "for" loop, nii et
täisarv võib olla kättesaadav väljaspool "for" loop.
Pärast kuu on möödas, on aeg öelda kasutaja, kui palju raha
olen saanud.
Per spec, sa pead ütlema kasutaja mitu dollarit, mitte kui palju
penni, mis neil on.
Aga seni, kui olete hoidnud silma peal kokku ja penne kasutades LongLongs,
mis on täisarve.
>> Seal on 100 penni $ 1, ainult juhul, kui arvu penne on
mitmekordselt 100, peate esindama koma.
Kahekordistunud AUTOTYPE võimaldab sa seda teha.
Niisiis, kuidas me teisendada esindada penni dollarit?
>> Võtame pilk pi.c.
See programm võtab longlong big_pi ja jagab seda 100000 ja prindib
tulemuse viis kohta pärast koma.
Kui me tahtsime näidata nelja kohaga kohti, siis saame lihtsalt asendada see
number siin.
Teeme salvestada, kompileerida pi ja siis näha tulemust, mida me
oodata, et oleks 3,1415 -
Esimese viie numbrit pi.
>> See ei ole küll.
Ja miks?
Noh, kuna big_pi on longlong, mis on täisarv, mis ei
jälgima koma.
Muutmine Pean teha on jagunemisel.
Pean enamus topelt siin enne jagamisel, sest kahekordistab ei suuda
arvet koma.
Ja ma lisada uus rida siin paremat formaati.
>> Ja siin me oleme seda -
3,1416.
Te võite märgata, et see prindib 3,1416 asemel 3,1415 ootuspäraselt.
Ongi, sest see pööret jagunemise protsessi, mitte lihtsalt
ürita väärtus.
Nüüd siis peaks olema võimalik välja trükkida lõplik kogumaksumus õigesti, mis lõpeb
programmi.
>> Palju õnne.
Minu nimi on Zamyla.
Ja see oli penni.
>> [Muusika mängib]