1 00:00:00,000 --> 00:00:00,994 2 00:00:00,994 --> 00:00:11,431 >> [Musikk spilles] 3 00:00:11,431 --> 00:00:12,500 >> ROB BOWDEN: Hei. 4 00:00:12,500 --> 00:00:13,230 Jeg er Rob. 5 00:00:13,230 --> 00:00:15,080 Og la oss få Greedy. 6 00:00:15,080 --> 00:00:18,560 >> Så det første vi må gjøre er å spørre brukeren nøyaktig hvordan 7 00:00:18,560 --> 00:00:20,500 mye endring er skyldte. 8 00:00:20,500 --> 00:00:23,310 Så her ser vi at vi har en gjør / while-løkke. 9 00:00:23,310 --> 00:00:26,650 Og vi sette dollar lik GetFloat. 10 00:00:26,650 --> 00:00:27,890 Hva er GetFloat? 11 00:00:27,890 --> 00:00:30,700 Det er en av funksjonene i CS50-biblioteket som får en 12 00:00:30,700 --> 00:00:32,450 flyte fra brukeren. 13 00:00:32,450 --> 00:00:35,200 Husk, for å kunne bruke denne funksjonen, vi trenger til hasj omfatte 14 00:00:35,200 --> 00:00:37,790 CS50.h på toppen. 15 00:00:37,790 --> 00:00:42,310 >> Så når vi har denne verdien fra bruker, trenger vi også å være sikker på at 16 00:00:42,310 --> 00:00:43,560 det er en gyldig verdi. 17 00:00:43,560 --> 00:00:46,050 Vi kan ikke skylde negativ penger. 18 00:00:46,050 --> 00:00:48,460 Og så det er hensikten av dette do / while-løkke. 19 00:00:48,460 --> 00:00:52,420 Vi fortsetter looping mens dollar er mindre enn null. 20 00:00:52,420 --> 00:00:56,960 Og en do / while løkke er den riktige tingen å bruke her, siden vi trenger å be 21 00:00:56,960 --> 00:01:00,290 bruker minst en gang for hvor mye penger er skyldte. 22 00:01:00,290 --> 00:01:05,040 >> Så når vi har det nummeret av dollar, vi ser her har vi int cent 23 00:01:05,040 --> 00:01:08,630 tilsvarer runde dollar ganger CENTS_PER_DOLLAR. 24 00:01:08,630 --> 00:01:10,740 Øverst, ser vi at CENTS_PER_DOLLAR er 25 00:01:10,740 --> 00:01:13,750 fornuftig definert som 100. 26 00:01:13,750 --> 00:01:16,270 Så hva er denne linjen gjør? 27 00:01:16,270 --> 00:01:21,200 >> Vel, hvis du husker, flyttall verdier er ikke helt nøyaktig. 28 00:01:21,200 --> 00:01:25,470 I motsetning til heltall, kan vi ikke representere flytverdier nøyaktig. 29 00:01:25,470 --> 00:01:28,660 Det er alltid noe slag av unøyaktighet. 30 00:01:28,660 --> 00:01:32,840 Så vi foretrekker å jobbe med bare heltall gjennom dette problemet. 31 00:01:32,840 --> 00:01:42,690 Og her, hvis brukeren har angitt $ 3,42, vi konvertere den til 342 cent og 32 00:01:42,690 --> 00:01:45,900 avrunding, bare bli kvitt noe av det imprecision. 33 00:01:45,900 --> 00:01:49,940 >> Så når vi har antall cent i et heltall, kan vi fortsette med 34 00:01:49,940 --> 00:01:51,730 Resten av programmet. 35 00:01:51,730 --> 00:01:55,910 Vi ser her at vi erklære heltall mynter som vi er bare å bruke 36 00:01:55,910 --> 00:01:59,560 å holde oversikt over det totale antall mynter. 37 00:01:59,560 --> 00:02:01,590 Her har vi vår første mens loop. 38 00:02:01,590 --> 00:02:06,780 >> Vi ser samtidig cent er større enn eller lik kvartal, som ovenfor, er hasj 39 00:02:06,780 --> 00:02:14,680 definert som 25, mens det er sant, vi ønsker å øke vår antall mynter 40 00:02:14,680 --> 00:02:18,350 og redusere trinnvis cent per kvartal. 41 00:02:18,350 --> 00:02:22,810 Husk at dette syntaks tilsvarer cent 42 00:02:22,810 --> 00:02:26,020 tilsvarer cent minus kvartal. 43 00:02:26,020 --> 00:02:28,170 De er de samme. 44 00:02:28,170 --> 00:02:31,850 >> Så hva er dette mens loop gjør? 45 00:02:31,850 --> 00:02:39,260 Ideen her er at, hvis jeg vet $ 3,42 er skyldig, kan jeg fortsette å gi 46 00:02:39,260 --> 00:02:42,670 kvartalene før jeg kan ikke gi kvartalene noe mer. 47 00:02:42,670 --> 00:02:47,720 Jeg kan ikke gi kvartalene noe mer, når jeg har gitt $ 3.25. 48 00:02:47,720 --> 00:02:53,300 >> Så da, når det er tilfelle, vil vi bryte ut av denne, mens sløyfen. 49 00:02:53,300 --> 00:02:57,650 Cent vil bli liggende på 17 cent. 50 00:02:57,650 --> 00:03:01,910 Og vi vil fortsette ned til neste mens loop der vi sier, mens cent 51 00:03:01,910 --> 00:03:04,270 er større enn eller lik dime. 52 00:03:04,270 --> 00:03:07,420 >> Og nå gjør vi det samme eksakte ting vi gjorde i kvartalet tilfelle, 53 00:03:07,420 --> 00:03:09,010 unntatt med dimes. 54 00:03:09,010 --> 00:03:15,050 Så med $ 0,17, vil vi sløyfe før vi kan ikke lenger gi en krone, som er 55 00:03:15,050 --> 00:03:16,680 nøyaktig en gang. 56 00:03:16,680 --> 00:03:20,470 Og da vil vi sitte igjen med 7 cent. 57 00:03:20,470 --> 00:03:24,730 >> Deretter vil vi gå videre til nickels, som vil sløyfe før vi ikke kan gi 58 00:03:24,730 --> 00:03:29,420 noen flere nickels, noe som vil forlate oss med to cent. 59 00:03:29,420 --> 00:03:34,400 Og så, ned på bunnen, har vi pennies, som vil sløyfe og vil 60 00:03:34,400 --> 00:03:37,140 endelig forlate oss med null cent. 61 00:03:37,140 --> 00:03:41,670 Så på slutten, vi trenger bare å skrive ut vår antall mynter. 62 00:03:41,670 --> 00:03:44,980 >> Så dette programmet er helt riktig. 63 00:03:44,980 --> 00:03:47,310 Men vi kan faktisk gjøre litt bedre. 64 00:03:47,310 --> 00:03:52,660 Nå hvis jeg sier at jeg skylder deg $ 10 000, du bør ikke trenger å gå her er en 65 00:03:52,660 --> 00:03:55,310 kvartal, to kvartaler, tre fjerdedeler. 66 00:03:55,310 --> 00:03:59,450 Du bør vite umiddelbart at Jeg skylder deg 40.000 kvartalene. 67 00:03:59,450 --> 00:04:04,070 >> Nå la oss se på et program som håndterer det litt bedre. 68 00:04:04,070 --> 00:04:07,190 I denne versjonen av ting, vi trenger fortsatt å spørre brukeren om mengden av 69 00:04:07,190 --> 00:04:10,930 endre det de ønsker i akkurat på samme måte som vi gjorde før. 70 00:04:10,930 --> 00:04:14,110 Vi trenger å runde det nøyaktig slik vi gjorde før. 71 00:04:14,110 --> 00:04:17,910 Og vi har fortsatt våre mynter heltall erklærte akkurat det samme som før. 72 00:04:17,910 --> 00:04:21,399 >> Så her er der ting få en litt annerledes. 73 00:04:21,399 --> 00:04:24,640 Vi gjør mynter pluss likhets cent dividert kvartal 74 00:04:24,640 --> 00:04:27,140 hvor kvartal er 25. 75 00:04:27,140 --> 00:04:31,790 Hva dette sier er, ta så mange kvartalene som kan gå inn i cents og legge 76 00:04:31,790 --> 00:04:33,030 som til mynter. 77 00:04:33,030 --> 00:04:40,100 >> Så hvis cent er 142, 142 delt med 25 gir oss fem. 78 00:04:40,100 --> 00:04:43,950 Husk at heltallsdivisjon avkorter automatisk. 79 00:04:43,950 --> 00:04:46,870 Så vi gjør mynter pluss lik fem. 80 00:04:46,870 --> 00:04:51,850 >> Umiddelbart etter dette, vi sier cent like cent mod kvartal. 81 00:04:51,850 --> 00:04:57,150 Husk at mod operatøren gir oss resten etter divisjonen. 82 00:04:57,150 --> 00:05:05,840 Så 142 mod kvartal, som vil gi er 142 minus 125, som er 17. 83 00:05:05,840 --> 00:05:10,470 Det er resten etter gjør 142 delt på 25. 84 00:05:10,470 --> 00:05:13,040 >> Så nå cent er lik 17. 85 00:05:13,040 --> 00:05:16,080 Og vi gjør det samme eksakte ting for dimes. 86 00:05:16,080 --> 00:05:18,620 17 delt på 10 vil gi oss en. 87 00:05:18,620 --> 00:05:20,150 Og vi legger det til mynter. 88 00:05:20,150 --> 00:05:25,380 Og da vi oppdaterer cent til være 17 mod 10, som er 7. 89 00:05:25,380 --> 00:05:27,200 >> Og så det samme for nickels. 90 00:05:27,200 --> 00:05:29,180 7 delt på fem er en. 91 00:05:29,180 --> 00:05:30,880 Legg det til mynter. 92 00:05:30,880 --> 00:05:34,600 Og deretter 7 mod 5 er to. 93 00:05:34,600 --> 00:05:35,910 Og det er våre cent. 94 00:05:35,910 --> 00:05:39,065 >> Og så, for pennies, det er ingen reell punkt i skifte eller modding, siden, 95 00:05:39,065 --> 00:05:42,170 hvis vi har $ 0,2 til overs, kan vi bare straks legge til at å 96 00:05:42,170 --> 00:05:43,590 vår antall mynter. 97 00:05:43,590 --> 00:05:48,210 Og til slutt, må vi skrive ut vår antall mynter, og, eventuelt, 98 00:05:48,210 --> 00:05:52,100 returnere 0 på slutten av programmet vårt å betegne alt fungerte. 99 00:05:52,100 --> 00:05:53,120 >> Mitt navn er Rob. 100 00:05:53,120 --> 00:05:54,020 Og dette var grådig. 101 00:05:54,020 --> 00:05:57,620 >> [Musikk spilles] 102 00:05:57,620 --> 00:06:01,515