1 00:00:00,000 --> 00:00:00,994 2 00:00:00,994 --> 00:00:11,431 >> [Musikgengivelse] 3 00:00:11,431 --> 00:00:12,500 >> ROB BOWDEN: Hej. 4 00:00:12,500 --> 00:00:13,230 Jeg er Rob. 5 00:00:13,230 --> 00:00:15,080 Og lad os få grådige. 6 00:00:15,080 --> 00:00:18,560 >> Så det første, vi skal gøre er at spørge brugeren, præcis hvordan 7 00:00:18,560 --> 00:00:20,500 meget forandring er skyldige. 8 00:00:20,500 --> 00:00:23,310 Så her ser vi, vi har en do / while-løkke. 9 00:00:23,310 --> 00:00:26,650 Og vi sætte dollars lig GetFloat. 10 00:00:26,650 --> 00:00:27,890 Hvad er GetFloat? 11 00:00:27,890 --> 00:00:30,700 Det er en af ​​funktionerne i CS50 bibliotek, der får en 12 00:00:30,700 --> 00:00:32,450 flyde fra brugeren. 13 00:00:32,450 --> 00:00:35,200 Husk, at for at bruge denne funktion, vi nødt til at hash 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 at værdien fra bruger vi også nødt til at være sikre på, at 16 00:00:42,310 --> 00:00:43,560 det er en gyldig værdi. 17 00:00:43,560 --> 00:00:46,050 Vi kan ikke skylder negativ penge. 18 00:00:46,050 --> 00:00:48,460 Og så er formålet af denne do / while-løkke. 19 00:00:48,460 --> 00:00:52,420 Vi fortsætter looping mens dollars er mindre end nul. 20 00:00:52,420 --> 00:00:56,960 Og en do / while-løkke er det rigtige at bruge her, da vi er nødt til at spørge 21 00:00:56,960 --> 00:01:00,290 bruger mindst en gang for, hvordan mange penge skylder. 22 00:01:00,290 --> 00:01:05,040 >> Så når vi har at antallet af dollars, vi ser her har vi int cents 23 00:01:05,040 --> 00:01:08,630 lig rund dollar gange 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 fornuftigt defineret som 100. 26 00:01:13,750 --> 00:01:16,270 Så hvad er denne linie gør? 27 00:01:16,270 --> 00:01:21,200 >> Tja, hvis du kan huske, floating point værdier er ikke helt nøjagtige. 28 00:01:21,200 --> 00:01:25,470 I modsætning til heltal, kan vi ikke repræsentere kommeværdier nøjagtigt. 29 00:01:25,470 --> 00:01:28,660 Der er altid en slags af upræcise. 30 00:01:28,660 --> 00:01:32,840 Så vi foretrækker at arbejde med blot heltal hele dette problem. 31 00:01:32,840 --> 00:01:42,690 Og her, hvis brugeren indtaster $ 3,42, vi har omregnet til 342 cent og 32 00:01:42,690 --> 00:01:45,900 afrunding, bare slippe af med noget af det upræcise. 33 00:01:45,900 --> 00:01:49,940 >> Så når vi har det antal cents i et heltal, kan vi fortsætte med det 34 00:01:49,940 --> 00:01:51,730 resten af ​​programmet. 35 00:01:51,730 --> 00:01:55,910 Vi ser her, at vi erklære heltal mønter, som vi er kun at bruge 36 00:01:55,910 --> 00:01:59,560 at holde styr på den samlede antal mønter. 37 00:01:59,560 --> 00:02:01,590 Her har vi vores første while-løkke. 38 00:02:01,590 --> 00:02:06,780 >> Vi ser mens cent er større end eller svarende til kvartal, hvilket ovenfor er hash 39 00:02:06,780 --> 00:02:14,680 defineret som 25, mens det er sandt, vi ønsker at forøge vores antal af mønter 40 00:02:14,680 --> 00:02:18,350 og formindskelsen cents fra kvartal. 41 00:02:18,350 --> 00:02:22,810 Husk, at denne syntaks svarer til cents 42 00:02:22,810 --> 00:02:26,020 lig cents 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å hvad er dette, mens løkke gør? 45 00:02:31,850 --> 00:02:39,260 Ideen her er, at hvis jeg ved $ 3,42 skylder, kan jeg fortsætte med at give 46 00:02:39,260 --> 00:02:42,670 kvartaler, indtil jeg ikke kan give kvartaler mere. 47 00:02:42,670 --> 00:02:47,720 Jeg kan ikke give kvartaler mere, når jeg har givet 3,25 dollar. 48 00:02:47,720 --> 00:02:53,300 >> Så så, når det er tilfældet, vi vil bryde ud af denne while-løkke. 49 00:02:53,300 --> 00:02:57,650 Cents vil blive efterladt på 17 cents. 50 00:02:57,650 --> 00:03:01,910 Og vi vil fortsætte ned til den næste mens løkke, hvor vi siger, mens cents 51 00:03:01,910 --> 00:03:04,270 er større end eller lig med skilling. 52 00:03:04,270 --> 00:03:07,420 >> Og nu skal vi gøre det samme nøjagtige , vi gjorde i kvartalet tilfælde 53 00:03:07,420 --> 00:03:09,010 undtagen med Dimes. 54 00:03:09,010 --> 00:03:15,050 Så med $ 0,17, vi vil løkke, indtil vi kan ikke længere at give en skilling, der er 55 00:03:15,050 --> 00:03:16,680 præcis én gang. 56 00:03:16,680 --> 00:03:20,470 Og så vil vi stå tilbage med 7 cent. 57 00:03:20,470 --> 00:03:24,730 >> Så vil vi fortsætte til nickels, som vil løkke, indtil vi ikke kan give 58 00:03:24,730 --> 00:03:29,420 flere Nickels, som vil efterlade os med to cent. 59 00:03:29,420 --> 00:03:34,400 Og så ned i bunden, vi har øre, der vil sløjfe og vil 60 00:03:34,400 --> 00:03:37,140 endelig efterlade os med nul cents. 61 00:03:37,140 --> 00:03:41,670 Så i sidste ende, vi bare nødt til at udskrive vores antal mønter. 62 00:03:41,670 --> 00:03:44,980 >> Så dette program er helt korrekt. 63 00:03:44,980 --> 00:03:47,310 Men vi kan faktisk gøre en smule bedre. 64 00:03:47,310 --> 00:03:52,660 Nu, hvis jeg siger, at jeg skylder dig $ 10.000, bør du ikke behøver at gå her er en 65 00:03:52,660 --> 00:03:55,310 kvartal, to kvartaler, tre kvartaler. 66 00:03:55,310 --> 00:03:59,450 Du skal vide det samme, at Jeg skylder dig 40.000 kvartaler. 67 00:03:59,450 --> 00:04:04,070 >> Lad os nu se på et program, der håndterer det en smule bedre. 68 00:04:04,070 --> 00:04:07,190 I denne version af ting, vi stadig har brug for til at bede brugeren om mængden af 69 00:04:07,190 --> 00:04:10,930 ændre det de ønsker i præcis samme måde, som vi gjorde før. 70 00:04:10,930 --> 00:04:14,110 Vi er nødt til at runde det nøjagtigt den måde, vi gjorde før. 71 00:04:14,110 --> 00:04:17,910 Og vi har stadig vores mønter heltal erklæret nøjagtig den samme som før. 72 00:04:17,910 --> 00:04:21,399 >> Så her er, hvor tingene få en smule anderledes. 73 00:04:21,399 --> 00:04:24,640 Vi laver mønter plus ligemænd cents divideret kvartal 74 00:04:24,640 --> 00:04:27,140 hvor kvartal er 25.. 75 00:04:27,140 --> 00:04:31,790 Hvad dette siger er, tage så mange kvartaler som kan gå ind i cent og tilføje 76 00:04:31,790 --> 00:04:33,030 at mønter. 77 00:04:33,030 --> 00:04:40,100 >> Så hvis cents er 142, 142 delt 25 giver os 5. 78 00:04:40,100 --> 00:04:43,950 Husk, at integer division automatisk afkorter. 79 00:04:43,950 --> 00:04:46,870 Så vi laver mønter plus lig 5.. 80 00:04:46,870 --> 00:04:51,850 >> Umiddelbart efter dette, vi siger cents lige cents mod kvartal. 81 00:04:51,850 --> 00:04:57,150 Husk, at den mod operatør giver os efter division. 82 00:04:57,150 --> 00:05:05,840 Så 142 mod kvartal, vil der giver er 142 minus 125, hvilket er 17. 83 00:05:05,840 --> 00:05:10,470 Det er resten efter gør 142 divideret med 25. 84 00:05:10,470 --> 00:05:13,040 >> Så nu cents er lig med 17.. 85 00:05:13,040 --> 00:05:16,080 Og vi gør nøjagtig de samme ting for Dimes. 86 00:05:16,080 --> 00:05:18,620 17 divideret med 10 vil give os 1. 87 00:05:18,620 --> 00:05:20,150 Og vi tilføje, at til mønter. 88 00:05:20,150 --> 00:05:25,380 Og derefter opdatere vi cent til være 17 mod 10, hvilket 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 divideret med 5 er 1. 91 00:05:29,180 --> 00:05:30,880 Føj det til mønter. 92 00:05:30,880 --> 00:05:34,600 Og derefter 7 mod 5 er 2.. 93 00:05:34,600 --> 00:05:35,910 Og det er vores cents. 94 00:05:35,910 --> 00:05:39,065 >> Og så, for øre, er der ingen reel punkt i skillelinje eller modding, da, 95 00:05:39,065 --> 00:05:42,170 hvis vi har $ ,2 tilovers, kan vi bare straks tilføje, at for at 96 00:05:42,170 --> 00:05:43,590 vores antal mønter. 97 00:05:43,590 --> 00:05:48,210 Og endelig har vi brug for at udskrive vores antal mønter og eventuelt 98 00:05:48,210 --> 00:05:52,100 returnere 0 i slutningen af ​​vores program til at betyde alt arbejdet. 99 00:05:52,100 --> 00:05:53,120 >> Mit navn er Rob. 100 00:05:53,120 --> 00:05:54,020 Og dette var grådige. 101 00:05:54,020 --> 00:05:57,620 >> [Musikgengivelse] 102 00:05:57,620 --> 00:06:01,515