>> [Nagpe-play ng musika]
>> ZAMYLA Chan: Gusto mo sa halip na makatanggap ng $ 10,000,000 sa ngayon o makatanggap
pennies bawat araw ng buwan, na kung saan bawat kasunod na araw, matatanggap mo
i-double ang halaga ng pennies mo natanggap bago ang araw?
Sa pennies, kami ay pagpunta sa patunayan bakit dapat mong
Talagang gawin ang mga pennies.
Ang iyong trabaho ay upang isulat pennies.c--
isang program na unang nagtatanong sa gumagamit kung paano maraming araw mayroong sa buwan at
pagkatapos ay nagtatanong kung gaano karaming mga gumagamit pennies ang makakatanggap sa unang araw.
Ang programa ay dapat pagkatapos ay kalkulahin ang dami na ang gumagamit ay magkakaroon
naipon sa dulo ng buwan at ipakita ito.
>> Maaari naming masira ang program na ito up sa isang pares ng mga gawain.
Kakailanganin naming upang i-prompt para sa maraming mga user input -
araw at mga buwan, at pennies sa unang araw.
Kailangan naming masubaybayan kung gaano karaming pera ang gumagamit ay may at i-update ito araw-
araw, pagdodoble ang halaga ng pennies na natanggap nila.
At sa wakas, i-print namin ang kanilang huling kabuuang, sa dollars.
>> Sabihin matugunan user input muna.
Pupunta ako upang buksan up apples.c, maikling programa na deal
may input at output.
Sa tuktok dito, isinama ko ang ilang mga ng mga library na kailangan ko -
CS50 ang library at isang standard I / O library.
I-print ko ang isang prompt gamit ang printf function na mula sa
standard I / O library.
Ngunit ang aktwal na pagdikta ng mga gumagamit ang mangyayari sa susunod na linya na may ito
GetInt function na sa CS50 library.
>> GetInt kukunin input mula sa user at Sinisiguro nito na ang input ay isang integer.
Kaya ako mag-imbak ng pag-input ng user sa integer i, ibabawas mula sa 1 ko, at pagkatapos ay
i-print out ang bagong mga halaga kung i.
Pagkatapos ng kino-compile ang apples.c gamit ang command na "gumawa ng mansanas," Mayroon akong isang
executable file mansanas.
Tumatakbo na, magpapadala ako ng input 1.
Ang programa ay nagsasabi sa akin na Mayroon akong 0 mansanas natitira.
At nang sa gayon ay nagtrabaho tulad ng inaasahan.
>> Kaya natin patakbuhin ito muli at input negatibong 1.
Ngayon, pagkakaroon ng isang negatibong halaga ng mansanas ay hindi talagang magkaroon ng kahulugan, ngunit
programa ng tinanggap ito, dahil ang mga negatibong 1, well, ito ay isang integer.
At ngayon sa programa o mga halimaw sa loob ng programa ang kumakain ng negatibong
apple, at ngayon ay mayroon ako negatibong 2 mansanas.
Hm, sa gayon na ang isa aralin -
kahit na ang GetInt function at mga kaugnay na pag-andar, tulad ng GetFlow o
GetString makuha ang tamang uri ng data, mo mayroon upang matiyak na input ang ginagawang
saysay para sa iyong programa.
>> Sa pennies, hindi ito gawin lamang ng prompt para sa isang integer, kailangan mong gumawa
siguraduhin na ang user input ng isang integer na magkaroon ng kahulugan na ibinigay sa konteksto.
Buwan ay maaari lamang magkaroon ng 28, 29, 30, o 31 araw.
Gusto naming patuloy na hinihiling ng isang wastong integer.
Kung sila input ng isang integer sa labas ng aming mga tanggap na hanggahan, aming i-prompt ang mga ito
muli at muli, hanggang sa ikaw ay bigyan kami ng isang wastong integer.
>> Maalala muli ang "umuulit na hanggang" harangan sa scratch?
Maaari kang gumawa ng isang katulad na tayuan sa C gamit ang isang "habang" loop
o "gawin-habang" loop.
Ang istraktura habang loop ay may kondisyon na dapat matugunan para sa
katawan ng loop upang isakatuparan.
>> Ito ay dapat magmukhang ng kaunti katulad, dahil ang kondisyon ay katulad lamang ng mga
Scratch bloke na may mga anggulo at napupunta sa bracket
ng loop "habang".
Kaya kondisyon na suriin kung integer na nasa loob ng
ang naaangkop na hanggahan.
Maaari mong i-prompt ang integer gamit GetInt at pagkatapos ay isakatuparan ang iyong mga "habang"
loop, paulit-ulit na sa senyas at pagpi-print tagubilin, habang ang input
ay hindi wasto.
>> Ang isa pang paraan upang masiguro na ang wastong input ng gumagamit ay sa pamamagitan ng paggamit ng isang "gawin-habang" loop,
na kung saan ay halos kapareho sa isang loop Habang.
Ang "gawin-habang" loop executes ang code sa loob ng katawan bago at pagkatapos sa mga pagsusuri
kung ang mga kondisyon ay nakamit o hindi.
Ito ay kapaki-pakinabang para sa pagkuha ng pag-input ng user, dahil alam mo na kailangan mo
upang i-prompt ang mga ito ng hindi bababa sa isang beses.
Kung ang kalagayan ay hindi natugunan, ang programa ay isakatuparan ang mga linya matapos
iyong "gawin-habang" loop.
Kung ang kondisyon ay nakamit kahit na, loop ay ulitin
>> A "gawin-habang" loop para sa pagpapatunay ng gumagamit input ay magmumukhang ganito.
Ipinahahayag ko sa isang variable n, GetInt, at ulitin hanggang n ay wasto.
At ang prosesong ito, ako ipinaliwanag, ay ginagamit ang integer-uri ng data, na
gagamitin mo para sa mga araw ng buwan.
Ngunit alam namin na ang bilang ng mga pennies ay pile up mabilis, kaya upang
imbak ng mas malaking numero, gamitin ang mga uri ng data LongLong, ngunit tandaan ang parehong
prinsipyo ng pagpapatunay nalalapat.
>> Kahanga-hanga, kaya sa sandaling kami ay may dalawang balidong input mula sa user -
araw sa buwan at ang pennies sa unang araw -
maaari naming ilipat papunta sa susunod bahagi ng programa.
Ang unang araw, ang user ay nagsisimula sa gayunpaman maraming mga pennies nila tinukoy
at ang dami ng pennies na sila ang susunod na araw ay Dinoble.
Kaya ito ang akma upang masubaybayan sa mga ito ang dalawang halaga -
kung magkano ang pera ang gumagamit ay at kung paano maraming mga pennies makakakita sila ay bibigyan.
>> Ngayon, ang paggawa ng isang bagay na para sa 28-31 na araw ay paulit-ulit, kaya gamitin natin ng isang "para sa"
loop upang umulit sa ibabaw ng mga araw sa buwan, pag-update sa kabuuang at maraming salapi
halaga sa bawat oras.
"Para sa mga" loop ay naglalaman ng syntax ang mga sumusunod -
isang Pinasimulan, isang kondisyon, at isang pag-update.
Ang iyong "para sa" loop ay initialize isang variable, kapag ito
unang pumasok sa loop.
Kung ang kondisyon ay nakilala, ang katawan ng mga loop ay isakatuparan.
Pagkatapos, ang update execute.
Kung ang kalagayan ay pa rin nakilala, ang loop ay execute at i-update, at
ulitin, hangga't iyong mga kondisyon sinusuri sa true.
>> Narito ang isang "para sa" loop na divides isang integer p 2 sa pamamagitan ng isang kabuuang ng 10 beses.
Pansinin kung paano ko ipinahayag ang integer p sa labas ng aking mga "para sa" loop, upang ang
integer ay maaaring maging naa-access sa labas ng "para sa" loop.
Pagkatapos ng buwan ang lumipas, oras na upang sabihin sa user kung magkano ang pera
na kanilang nakuha.
Ayon sa spec, kailangan mong sabihin sa user kung gaano karaming mga dolyar, hindi gaano karaming
pennies, mayroon sila.
Ngunit sa ngayon, na iyong iningatan track ng kabuuan at ang pennies gamit LongLongs,
na kung saan ay buong numero.
>> Mayroong 100 pennies sa $ 1, kaya maliban kung ang bilang ng mga pennies ay isang
maraming ng 100, kailangan mong Kinakatawan decimal lugar.
Ang Dinoble magmakinilya nagbibigay-daan sa mong gawin ito.
Kaya paano namin convert mula kumakatawan pennies sa dolyar?
>> Magpahinga hitsura pi.c.
Ang programang ito ay tumatagal ng isang LongLong big_pi at divides ito sa pamamagitan ng 100,000, at mga Kopya
ang resulta sa limang decimal lugar.
Kung gusto naming ipakita ang apat na decimal mga lugar, pagkatapos ay maaari naming lamang palitan ito
numero dito.
Kaya natin i-save, makatipon pay, at pagkatapos ay makita ang mga resulta, na kung saan namin
asahan upang maging 3.1415 -
ang unang limang digit ng pay.
>> Hindi ito bagaman.
At kung bakit?
Well, dahil big_pi ay isang LongLong, na kung saan ay isang buong numero, na kung saan ay hindi
panatilihing subaybayan ng decimal.
Ang pagbabago kailangan kong gumawa ay nasa division.
Kailangan kong cast sa isang double dito bago paghahati, dahil Doubles hindi maaaring panatilihin
subaybayan ng decimal place.
At ako pagpunta sa magdagdag ng bagong linya dito para sa mas mahusay na pag-format.
>> At dito kami ay may ito -
3.1416.
Maaari mong mapansin na ito ng mga Kopya 3.1416 sa halip ng 3.1415 tulad ng inaasahan.
Iyon ay dahil sa ito round sa panahon ng division proseso, bilang kabaligtaran sa makatarungan
Pinuputol ang halaga.
Ngayon dapat mong ma-i-print ang huling kabuuang tama, na tatapusin
ang programa.
>> Binabati kita.
Ang pangalan ko ay Zamyla.
At ito ay pennies.
>> [Nagpe-play ng musika]