[MUZIKO ludi] ZAMYLA Chan: Ĉu vi prefere ricevi $ 10 milionoj nun aux ricevi cendoj ĉiu tago de la monato, kie ĉiu posta tago, vi ricevos duobligi la kvanton de moneroj vi ricevis la tagon antaŭe? En cendoj, ni tuj pruvi kial vi devus definitive preni la monerojn. Via tasko estas skribi pennies.c-- programo kiu unue petas la uzanto kiel multaj tagoj ne estas en la monato kaj tiam demandas kiom da cendoj la uzanto ricevos en la unua tago. La programo devus tiam kalkuli la kvanto kiun la uzanto havos amasigitaj en la fino de la monato kaj montri ĝin. Ni povas rompi tiun programon supren en kelkaj taskoj. Ni bezonos instigas por multnombraj uzanto enigas - tagojn kaj monatojn kaj cendoj en la unua tago. Ni devas konservi trako de kiom da mono la uzanto havas kaj ĝisdatigi ĝin ĉiu tago, duobligante la kvanto de monerojn, ke ili ricevas. Kaj fine, ni presas siajn fina tuta, en dolaroj. Ni tackle Uzanta enigo unua. Mi tuj malfermi apples.c, mallonga programo kiu traktas kun enigoj kaj eligoj. Ĉe la supro tie, mi inkluzivis iujn de la bibliotekoj kiuj mi bezonas - CS50 la biblioteko kaj normo I / O biblioteko. Mi presi prompto uzante la printf funkcio de la norma I / O biblioteko. Sed la efektiva instigante de la uzanto okazas en la sekva linio kun tio GetInt funkcio en la CS50 biblioteko. GetInt akiras enigon el la uzanto kaj certigu ke la enigo estas entjero. Do mi stoki la uzanto enigo en entjera i, subtrahi 1 de i, kaj tiam elprinti la nova valoro se mi. Post kompili apples.c uzante la komando "fari pomoj," Mi havas plenumebla dosiero pomoj. Kurante, ke, mi alportas 1. La programo diras al mi ke Mi havas 0 pomoj forlasis. Kaj por ke laboris kiel atendita. Do ni kuros ĉi denove kaj enigo negativa 1. Nun, havanta negativan kvanton de pomoj ne vere havas sencon, sed la programo akceptas ĝin, ĉar negativa 1, nu, tio estas entjero. Kaj nun la programo aŭ de la monstro ene de la programo manĝas negativan pomo, kaj nun mi havas negativa 2 pomoj. Hm, do tio estas unu leciono - kvankam la GetInt funkcio kaj rilataj funkcioj, kiel GetFlow aŭ GetString akiri la rajton datumtipo, vi devas certigi ke la enigo faras senson por via programo. En cendoj, tio ne faros nur prompto por entjero, vi devas fari certa, ke la uzanto enigas entjero ke sencon donita la kunteksto. Monato povas havi nur 28, 29, 30, aŭ 31 tagoj. Ni volas senĉese demandan valida entjero. Se ili enigo entjero ekster nia akceptita baroj, ni instigas ilin ree kaj ree, ĝis vi doni al ni valida entjero. Memori la "ripetu ĝis" bloki en Scratch? Vi povas fari similan konstruo en C uzante "dum" buklo aŭ "do-dum" iteracio. La dum buklo strukturo havas kondiĉo kiuj devas plenumi por la korpo de la ciklo de ekzekuti. Ĉi tiu devus aspekti iom similaj, ĉar la kondiĉo estas ĝuste kiel la Scratch blokoj kun la anguloj kaj iras en la krampoj de la "dum" iteracio. Do tiu kondiĉo kontrolos ĉu la entjero estas ene la taŭga limojn. Vi povas instigas la entjero uzante GetInt kaj poste ekzekuti via "dum" buklo, ripetante la prompto kaj presi instrukcioj, dum la eniro ne estas valida. Alia maniero por certigi korekta Uzanta enigo estas per uzo de "do-dum" buklo, kio estas tre simila al Dum buklo. La "do-dum" buklo ekzekutas la kodo interne de la korpo karaj kaj tiam ĉekojn ĉu la kondiĉo estas konis aŭ ne. Ĉi tio estas utila por akiri uzanto enigo, ĉar vi scias, ke vi bezonas instigi ilin almenaŭ unufoje. Se la kondiĉo ne konis, la programo faros la linion post via "do-dum" iteracio. Se la kondiĉo estas konita kvankam, la ciklo ripetos Al "do-dum" buklo por validigi uzanto enigo aspektos iu kiel ĉi tio. Mi deklaras variablon n, GetInt, kaj tiam ripeti ĝis n estas valida. Kaj tiu procezo, mi klarigis, uzis la entjera-datumtipo, kiu vi uzas por la tagoj de la monato. Sed ni scias, ke la nombro da cendoj estos amasiĝas rapide, do la celo stoki grandaj nombroj, uzu la datumtipo LongLong, sed memoru la sama principo de kontrolada aplikas. Awesome, do iam ni havas du validajn enigoj de la uzanto - tagoj en la monato kaj la moneroj en la unua tago - ni povas movi sur la sekvanta parton de la programo. La unuan tagon, la uzanto komencas kun tamen da cendoj ili specifita kaj la kvanto de cendoj, ke ili ricevas la sekvantan tagon estas dublita. Do tio havas sencon konservi trako de ĉi tiuj du kvantoj - kiom da mono la uzanto havas kaj kiel da cendoj ili devos esti donita. Nun, farante ion por 28 al 31 tagoj estas repetitivas, do ni uzas "por" buklo persisti pri la tagoj en la monato, ĝisdatigante la tuta kaj centono sumo ĉiufoje. "Por" buklo sintakso enhavas la jena - an inicialización, kondiĉo, kaj ĝisdatigo. Via "por" loop estos pravalorizi variablo, kiam unua eniras la buklo. Se la kondiĉo estas konita, la korpo de la buklo faros. Poste, la ĝisdatigo faros. Se la kondiĉo estas ankoraŭ renkontis, la buklo ekzekutos kaj ĝisdatigi, kaj ripeti, tiel longe kiel via kondiĉo taksas al vera. Tie estas "por" loop kiu dividas la entjero p per 2 tota de 10-foje. Notu ke mi deklaris la entjera p ekstere de mia "por" loop, tiel ke la entjero povas esti atingebla ekster la "por" banto. Post la monato pasis, estas tempo por diri al la uzanto, kiom da mono ili jam akiris. Per la specifo, vi devas diri al la uzanto kiom da dolaroj, ne kiom da monerojn, ili havas. Sed ĝis nun, vi tenis spuro de la tuta kaj la moneroj uzante LongLongs, kiuj estas tuta nombroj. Esas 100 cendoj al $ 1, do se la nombro de moneroj estas oblo de 100, vi bezonos reprezenti decimalaj. La duobliĝis autotype permesas vi faru tion ĉi. Nu do kiel ni konverti el reprezenti cendoj por dolaroj? Ni rigardu pi.c. Ĉi tiu programo prenas LongLong big_pi kaj dividu ĝin per 100.000, kaj presas la rezulton al kvin dekumaj lokoj. Se ni volis montri kvar decimala lokoj, tiam ni povas simple anstataŭigi tiun numeron tie. Do ni savu, kompili pi, kaj tiam vidu la rezulton, kiun ni atendi esti 3,1415 - la unuaj kvin ciferoj de pi. Ĝi ne estas tamen. Kaj kial? Nu, ĉar big_pi estas LongLong, kio estas tuta nombro, kiu ne volas teni spuri de glitpunktaj nombroj. La modifon mi bezonas fari estas en la divido. Mi bezonas enjxeti al duobla tie antaŭ dividanta, ĉar duobloj ne povas teni spuri de dekumaj lokoj. Kaj mi tuj aldonas novan linion ĉi tie por pli bona strukturado. Kaj ĉi tie ni havas - 3.1416. Vi eble rimarkos ke ĝi presas 3.1416 anstataŭ 3,1415 kiel atendita. Tio estas ĉar ĝi ĉirkaŭvojoj dum la divido procezo, kiel kontraŭ nur detranĉi la valoro. Nun vi devus povi presi la fina tuta korekte, kiu finas la programo. Gratulojn. Mia nomo estas Zamyla. Kaj jen estas moneroj. [MUZIKO ludi]