1 00:00:00,000 --> 00:00:00,994 2 00:00:00,994 --> 00:00:11,431 >> [MUSIK SPELA] 3 00:00:11,431 --> 00:00:12,500 >> ROB BOWDEN: Hej. 4 00:00:12,500 --> 00:00:13,230 Jag är Rob. 5 00:00:13,230 --> 00:00:15,080 Och låt oss få giriga. 6 00:00:15,080 --> 00:00:18,560 >> Så det första vi måste göra är fråga användaren exakt hur 7 00:00:18,560 --> 00:00:20,500 mycket förändring är skyldig. 8 00:00:20,500 --> 00:00:23,310 Så här ser vi att vi har en gör / while-slinga. 9 00:00:23,310 --> 00:00:26,650 Och vi ställer dollar lika med getFloat. 10 00:00:26,650 --> 00:00:27,890 Vad är getFloat? 11 00:00:27,890 --> 00:00:30,700 Det är en av de funktioner i CS50 bibliotek som får en 12 00:00:30,700 --> 00:00:32,450 flyta från användaren. 13 00:00:32,450 --> 00:00:35,200 Kom ihåg att för att kunna använda denna funktion, vi måste hash inkludera 14 00:00:35,200 --> 00:00:37,790 CS50.h upptill. 15 00:00:37,790 --> 00:00:42,310 >> Så när vi har det värdet från användare, måste vi också vara säkra på att 16 00:00:42,310 --> 00:00:43,560 det är ett giltigt värde. 17 00:00:43,560 --> 00:00:46,050 Vi kan inte tacka negativ pengar. 18 00:00:46,050 --> 00:00:48,460 Och så det är syftet av detta do / while-slinga. 19 00:00:48,460 --> 00:00:52,420 Vi fortsätter att kretsa medan dollar är mindre än noll. 20 00:00:52,420 --> 00:00:56,960 Och en gör / while-slinga är det rätta att använda här, eftersom vi måste be 21 00:00:56,960 --> 00:01:00,290 användaren åtminstone en gång för hur mycket pengar är skyldig. 22 00:01:00,290 --> 00:01:05,040 >> Så när vi har det antalet dollar, Vi ser här att vi har int cent 23 00:01:05,040 --> 00:01:08,630 motsvarar runda dollar gånger CENTS_PER_DOLLAR. 24 00:01:08,630 --> 00:01:10,740 Vid toppen, ser vi att CENTS_PER_DOLLAR är 25 00:01:10,740 --> 00:01:13,750 förnuftigt definieras som 100. 26 00:01:13,750 --> 00:01:16,270 Så vad är denna rad med? 27 00:01:16,270 --> 00:01:21,200 >> Tja, om du kommer ihåg, flyttals värden är inte helt exakt. 28 00:01:21,200 --> 00:01:25,470 Till skillnad heltal, kan vi inte representera flyttalsvärden exakt. 29 00:01:25,470 --> 00:01:28,660 Det finns alltid någon form av vaghet. 30 00:01:28,660 --> 00:01:32,840 Så vi föredrar att arbeta med bara heltal under hela detta problem. 31 00:01:32,840 --> 00:01:42,690 Och här, om användaren angett $ 3,42, vi konvertera det till 342 cent och 32 00:01:42,690 --> 00:01:45,900 avrundning, bara bli av något av det bristande precision. 33 00:01:45,900 --> 00:01:49,940 >> Så när vi har det antal cent i ett heltal, kan vi fortsätta med det 34 00:01:49,940 --> 00:01:51,730 Resten av programmet. 35 00:01:51,730 --> 00:01:55,910 Vi ser här att vi förklara heltal mynt som vi är bara att använda 36 00:01:55,910 --> 00:01:59,560 att hålla reda på det totala antalet mynt. 37 00:01:59,560 --> 00:02:01,590 Här har vi vår första while-slinga. 38 00:02:01,590 --> 00:02:06,780 >> Vi ser samtidigt cent är större än eller motsvarande kvartal, som ovan, är hash 39 00:02:06,780 --> 00:02:14,680 definieras som 25, medan det är sant, vi vill öka vårt antal mynt 40 00:02:14,680 --> 00:02:18,350 eller sänka cent per kvartal. 41 00:02:18,350 --> 00:02:22,810 Kom ihåg att denna syntax motsvarar cent 42 00:02:22,810 --> 00:02:26,020 lika cent minus kvartal. 43 00:02:26,020 --> 00:02:28,170 De som är de samma. 44 00:02:28,170 --> 00:02:31,850 >> Så vad gör detta samtidigt loop? 45 00:02:31,850 --> 00:02:39,260 Tanken här är att om jag vet $ 3,42 är skyldig, kan jag fortsätta att ge 46 00:02:39,260 --> 00:02:42,670 håll tills jag kan inte ge kvartal längre. 47 00:02:42,670 --> 00:02:47,720 Jag kan inte ge fjärde något mer, när jag har gett $ 3,25. 48 00:02:47,720 --> 00:02:53,300 >> Så då, när så är fallet, vi ska bryta sig ur denna while-slinga. 49 00:02:53,300 --> 00:02:57,650 Cents blir kvar på 17 cent. 50 00:02:57,650 --> 00:03:01,910 Och vi kommer att fortsätta ner till nästa medan loop där vi säger, medan cent 51 00:03:01,910 --> 00:03:04,270 är större än eller lika med dime. 52 00:03:04,270 --> 00:03:07,420 >> Och nu gör vi exakt samma som vi gjorde i kvartalet fallet, 53 00:03:07,420 --> 00:03:09,010 utom med Dimes. 54 00:03:09,010 --> 00:03:15,050 Så med $ 0,17, vi ska slinga tills vi kan inte längre ger ett öre, vilket är 55 00:03:15,050 --> 00:03:16,680 exakt en gång. 56 00:03:16,680 --> 00:03:20,470 Och sedan kommer vi att vara kvar med 7 cent. 57 00:03:20,470 --> 00:03:24,730 >> Sedan ska vi fortsätta till Nickels, som kommer slinga tills vi inte kan ge 58 00:03:24,730 --> 00:03:29,420 fler Nickels, som kommer lämnar oss med två cent. 59 00:03:29,420 --> 00:03:34,400 Och sedan, ner på botten, har vi pennies, som kommer att slinga och kommer 60 00:03:34,400 --> 00:03:37,140 äntligen lämna oss med noll cent. 61 00:03:37,140 --> 00:03:41,670 Sedan i slutet, vi behöver bara skriva ut våra antal mynt. 62 00:03:41,670 --> 00:03:44,980 >> Så det här programmet är helt rätt. 63 00:03:44,980 --> 00:03:47,310 Men vi kan faktiskt göra lite bättre. 64 00:03:47,310 --> 00:03:52,660 Nu om jag säger att jag är skyldig dig $ 10.000, du ska inte behöva gå här är en 65 00:03:52,660 --> 00:03:55,310 kvartal, två kvartal, tre fjärdedelar. 66 00:03:55,310 --> 00:03:59,450 Du ska veta direkt att Jag är skyldig dig 40.000 kvartal. 67 00:03:59,450 --> 00:04:04,070 >> Låt oss nu titta på ett program som hanterar det lite bättre. 68 00:04:04,070 --> 00:04:07,190 I denna version av saker, vi behöver fortfarande för att fråga användaren för den mängd 69 00:04:07,190 --> 00:04:10,930 ändra på det de vill ha på exakt på samma sätt som vi gjorde tidigare. 70 00:04:10,930 --> 00:04:14,110 Vi måste runda det exakt det sätt som vi gjorde tidigare. 71 00:04:14,110 --> 00:04:17,910 Och vi har fortfarande våra mynt heltal förklarade exakt samma som tidigare. 72 00:04:17,910 --> 00:04:21,399 >> Så här är där saker bli lite annorlunda. 73 00:04:21,399 --> 00:04:24,640 Vi gör mynt plus jämlikar cent dividerat med kvartal 74 00:04:24,640 --> 00:04:27,140 där kvartal är 25. 75 00:04:27,140 --> 00:04:31,790 Vad detta säger är, ta så många håll som kan gå in i cent och lägga 76 00:04:31,790 --> 00:04:33,030 att till mynt. 77 00:04:33,030 --> 00:04:40,100 >> Så om cent är 142, 142 delat med 25 ger oss 5. 78 00:04:40,100 --> 00:04:43,950 Kom ihåg att heltalsdivision trunkerar automatiskt. 79 00:04:43,950 --> 00:04:46,870 Så vi gör mynt plus lika med 5. 80 00:04:46,870 --> 00:04:51,850 >> Omedelbart efter detta, vi säger cent lika cent mod kvartalet. 81 00:04:51,850 --> 00:04:57,150 Kom ihåg att mod operatören ger oss resten efter divisionen. 82 00:04:57,150 --> 00:05:05,840 Så 142 mod kvartalet, kommer att ge är 142 minus 125, vilket är 17. 83 00:05:05,840 --> 00:05:10,470 Det är resten efter gör 142 dividerat med 25. 84 00:05:10,470 --> 00:05:13,040 >> Så nu cent är lika med 17. 85 00:05:13,040 --> 00:05:16,080 Och vi gör exakt samma sak för Dimes. 86 00:05:16,080 --> 00:05:18,620 17 dividerat med 10 ger oss 1. 87 00:05:18,620 --> 00:05:20,150 Och vi tillägga att till mynt. 88 00:05:20,150 --> 00:05:25,380 Och sedan uppdaterar vi cent till vara 17 mod 10, vilket är 7. 89 00:05:25,380 --> 00:05:27,200 >> Och sedan samma för nickels. 90 00:05:27,200 --> 00:05:29,180 7 delat med 5 är 1. 91 00:05:29,180 --> 00:05:30,880 Lägg det till mynt. 92 00:05:30,880 --> 00:05:34,600 Och sedan 7 mod 5 är 2. 93 00:05:34,600 --> 00:05:35,910 Och det är våra cent. 94 00:05:35,910 --> 00:05:39,065 >> Och sedan, för småpengar, det finns ingen riktig punkt i skilje eller modding, eftersom, 95 00:05:39,065 --> 00:05:42,170 om vi har $ 0,2 kvar, vi kan bara genast tillägga att till 96 00:05:42,170 --> 00:05:43,590 vårt antal mynt. 97 00:05:43,590 --> 00:05:48,210 Och slutligen måste vi skriva ut våra antal mynt och, valfritt, 98 00:05:48,210 --> 00:05:52,100 returnera 0 i slutet av vårt program att betyda allt fungerade. 99 00:05:52,100 --> 00:05:53,120 >> Mitt namn är Rob. 100 00:05:53,120 --> 00:05:54,020 Och detta var giriga. 101 00:05:54,020 --> 00:05:57,620 >> [MUSIK SPELA] 102 00:05:57,620 --> 00:06:01,515