1 00:00:00,000 --> 00:00:00,994 2 00:00:00,994 --> 00:00:11,431 >> [Muziek] 3 00:00:11,431 --> 00:00:12,500 >> ROB BOWDEN: Hi. 4 00:00:12,500 --> 00:00:13,230 Ik ben Rob. 5 00:00:13,230 --> 00:00:15,080 En laten we Greedy. 6 00:00:15,080 --> 00:00:18,560 >> Dus het eerste wat we moeten doen precies hoe de gebruiker vragen 7 00:00:18,560 --> 00:00:20,500 veel verandering is verschuldigd. 8 00:00:20,500 --> 00:00:23,310 Dus hier zien we we hebben een do / while lus. 9 00:00:23,310 --> 00:00:26,650 En we zijn het instellen van dollars gelijk aan GetFloat. 10 00:00:26,650 --> 00:00:27,890 Wat is GetFloat? 11 00:00:27,890 --> 00:00:30,700 Het is een van de functies in de CS50 bibliotheek die een krijgt 12 00:00:30,700 --> 00:00:32,450 drijven van de gebruiker. 13 00:00:32,450 --> 00:00:35,200 Vergeet niet, om die functie te gebruiken, we moeten hash omvatten 14 00:00:35,200 --> 00:00:37,790 CS50.h aan de top. 15 00:00:37,790 --> 00:00:42,310 >> We zo eens hebben dat de waarde van de gebruiker, moeten we ook zeker van zijn dat 16 00:00:42,310 --> 00:00:43,560 het is een geldige waarde. 17 00:00:43,560 --> 00:00:46,050 We kunnen niet schuldig negatief geld. 18 00:00:46,050 --> 00:00:48,460 En dat is dus het doel van deze do / while lus. 19 00:00:48,460 --> 00:00:52,420 We blijven lus terwijl de dollar kleiner is dan nul. 20 00:00:52,420 --> 00:00:56,960 En een do / while lus is het juiste ding om hier te gebruiken, omdat we moeten vragen aan de 21 00:00:56,960 --> 00:01:00,290 gebruiker ten minste eenmaal hoe veel geld verschuldigd is. 22 00:01:00,290 --> 00:01:05,040 >> We zo eens hebben dat aantal dollars, we zien hier hebben we int cent 23 00:01:05,040 --> 00:01:08,630 evenaart ronde dollars tijden CENTS_PER_DOLLAR. 24 00:01:08,630 --> 00:01:10,740 Op de top, zien we dat CENTS_PER_DOLLAR is 25 00:01:10,740 --> 00:01:13,750 verstandig gedefinieerd als 100. 26 00:01:13,750 --> 00:01:16,270 Dus wat is deze lijn doet? 27 00:01:16,270 --> 00:01:21,200 >> Nou, als u het zich herinnert, floating point waarden zijn niet helemaal nauwkeurig. 28 00:01:21,200 --> 00:01:25,470 In tegenstelling tot de gehele getallen, kunnen we niet vertegenwoordigen floating point waarden precies. 29 00:01:25,470 --> 00:01:28,660 Er is altijd een soort van onnauwkeurigheid. 30 00:01:28,660 --> 00:01:32,840 Dus we werken liever met alleen gehele getallen in dit probleem. 31 00:01:32,840 --> 00:01:42,690 En hier, als de gebruiker $ 3,42, we omzetten die tot 342 cent en 32 00:01:42,690 --> 00:01:45,900 afronding, alleen te ontdoen van een van die onnauwkeurigheid. 33 00:01:45,900 --> 00:01:49,940 >> Dus zodra we hebben het aantal centen in een geheel getal, kunnen we verder met de 34 00:01:49,940 --> 00:01:51,730 rest van het programma. 35 00:01:51,730 --> 00:01:55,910 We zien hier dat we verklaren integer munten die we maar te gebruiken 36 00:01:55,910 --> 00:01:59,560 bij te houden van de totale aantal munten. 37 00:01:59,560 --> 00:02:01,590 Hier hebben we onze eerste while lus. 38 00:02:01,590 --> 00:02:06,780 >> We zien terwijl cent hoger is dan of gelijk kwartaal, dat bovenstaande, is hash 39 00:02:06,780 --> 00:02:14,680 gedefinieerd als 25, terwijl dat waar we willen onze aantal munten te verhogen 40 00:02:14,680 --> 00:02:18,350 en decrement cent per kwartaal. 41 00:02:18,350 --> 00:02:22,810 Vergeet niet dat deze syntaxis is gelijk aan cent 42 00:02:22,810 --> 00:02:26,020 gelijk cent minus kwartaal. 43 00:02:26,020 --> 00:02:28,170 Dat zijn hetzelfde. 44 00:02:28,170 --> 00:02:31,850 >> Dus wat is deze while lus aan het doen? 45 00:02:31,850 --> 00:02:39,260 Het idee hier is dat, als ik weet $ 3,42 verschuldigd is, kan ik blijven geven 46 00:02:39,260 --> 00:02:42,670 kwartalen totdat ik kan niet geven kwartalen niet meer. 47 00:02:42,670 --> 00:02:47,720 Ik kan niet kwartalen geven meer, zodra ik gegeven heb $ 3,25. 48 00:02:47,720 --> 00:02:53,300 >> Zo dan, zodra dat het geval is, zullen we breken van deze while lus. 49 00:02:53,300 --> 00:02:57,650 Cent zal op 17 cent worden gelaten. 50 00:02:57,650 --> 00:03:01,910 En we omlaag naar de volgende blijven while loop waar we zeggen, terwijl cent 51 00:03:01,910 --> 00:03:04,270 groter of gelijk aan dime. 52 00:03:04,270 --> 00:03:07,420 >> En nu doen we precies dezelfde wat we deden in het kwartaal geval, 53 00:03:07,420 --> 00:03:09,010 behalve met dubbeltjes. 54 00:03:09,010 --> 00:03:15,050 Dus met $ 0,17, we lus totdat we kunnen niet langer een dubbeltje, die geven 55 00:03:15,050 --> 00:03:16,680 precies een keer. 56 00:03:16,680 --> 00:03:20,470 En dan zullen we blijven zitten met 7 cent. 57 00:03:20,470 --> 00:03:24,730 >> Dan gaan we verder naar stuivers, die zal lus totdat kunnen we niet geven 58 00:03:24,730 --> 00:03:29,420 meer stuivers, die zal laat ons met twee cent. 59 00:03:29,420 --> 00:03:34,400 En dan, op de bodem, we penningen, die wordt herhaald en zal 60 00:03:34,400 --> 00:03:37,140 eindelijk ons ​​verlaten met nul cent. 61 00:03:37,140 --> 00:03:41,670 Aan het einde, moeten we gewoon uitprinten onze aantal munten. 62 00:03:41,670 --> 00:03:44,980 >> Dus dit programma is volkomen juist. 63 00:03:44,980 --> 00:03:47,310 Maar we kunnen eigenlijk doen een beetje beter. 64 00:03:47,310 --> 00:03:52,660 Nu als ik zeg dat ik je schuldig $ 10.000, moet je niet hoeft te gaan hier is een 65 00:03:52,660 --> 00:03:55,310 kwartaal, twee kwartalen, drie kwartalen. 66 00:03:55,310 --> 00:03:59,450 U moet onmiddellijk weten dat Ik ben je 40.000 kwartalen. 67 00:03:59,450 --> 00:04:04,070 >> Laten we nu eens kijken naar een programma dat behandelt het een beetje beter. 68 00:04:04,070 --> 00:04:07,190 In deze versie van de dingen, we moeten nog steeds om de gebruiker voor de hoeveelheid vragen 69 00:04:07,190 --> 00:04:10,930 veranderen dat ze willen precies op dezelfde manier waarop we voorheen. 70 00:04:10,930 --> 00:04:14,110 We moeten het precies afronden de manier deden we eerder. 71 00:04:14,110 --> 00:04:17,910 En we hebben nog steeds onze munten integer precies aangegeven hetzelfde als voorheen. 72 00:04:17,910 --> 00:04:21,399 >> Dus hier is waar de dingen een beetje anders. 73 00:04:21,399 --> 00:04:24,640 We doen munten plus gelijken cent opgedeeld per trimester 74 00:04:24,640 --> 00:04:27,140 waar kwartaal is 25. 75 00:04:27,140 --> 00:04:31,790 Wat dit zegt is, neem zoveel kwartalen kan gaan in centen en voeg 76 00:04:31,790 --> 00:04:33,030 dat om munten. 77 00:04:33,030 --> 00:04:40,100 >> Dus als cent is 142, 142 verdeeld door 25 geeft ons 5. 78 00:04:40,100 --> 00:04:43,950 Vergeet niet dat deling van gehele getallen automatisch afgekapt. 79 00:04:43,950 --> 00:04:46,870 Dus we doen munten plus is gelijk aan 5. 80 00:04:46,870 --> 00:04:51,850 >> Meteen na dit, we zeggen cent gelijk cent mod kwartaal. 81 00:04:51,850 --> 00:04:57,150 Vergeet niet dat de mod operator geeft ons de rest na deling. 82 00:04:57,150 --> 00:05:05,840 Dus 142 mod kwartaal, dat geeft is 142 minus 125, dat is 17. 83 00:05:05,840 --> 00:05:10,470 Dat is de rest na doen 142 gedeeld door 25. 84 00:05:10,470 --> 00:05:13,040 >> Nu cent gelijk aan 17. 85 00:05:13,040 --> 00:05:16,080 En dat doen we precies dezelfde ding voor dubbeltjes. 86 00:05:16,080 --> 00:05:18,620 17 gedeeld door 10 zal ons 1 geven. 87 00:05:18,620 --> 00:05:20,150 En wij die toe te voegen aan munten. 88 00:05:20,150 --> 00:05:25,380 En dan centen werken we aan zijn 17 mod 10, dat is 7. 89 00:05:25,380 --> 00:05:27,200 >> En dan is het hetzelfde voor stuivers. 90 00:05:27,200 --> 00:05:29,180 7 gedeeld door 5 1. 91 00:05:29,180 --> 00:05:30,880 Voeg dat toe aan munten. 92 00:05:30,880 --> 00:05:34,600 En dan 7 mod 5 is 2. 93 00:05:34,600 --> 00:05:35,910 En dat is onze centen. 94 00:05:35,910 --> 00:05:39,065 >> En dan, voor de centen, is er geen echte punt in scheidslijn of modding, omdat, 95 00:05:39,065 --> 00:05:42,170 als we $ 0,2 overblijft, kunnen we gewoon direct toevoegen dat aan 96 00:05:42,170 --> 00:05:43,590 onze aantal munten. 97 00:05:43,590 --> 00:05:48,210 En tenslotte moeten we om uit te printen onze aantal munten en, eventueel, 98 00:05:48,210 --> 00:05:52,100 0 terug te keren op het einde van ons programma om alles te betekenen heeft gewerkt. 99 00:05:52,100 --> 00:05:53,120 >> Mijn naam is Rob. 100 00:05:53,120 --> 00:05:54,020 En dit was Greedy. 101 00:05:54,020 --> 00:05:57,620 >> [Muziek] 102 00:05:57,620 --> 00:06:01,515