1 00:00:00,000 --> 00:00:00,994 2 00:00:00,994 --> 00:00:11,431 >> [Speel van musiek] 3 00:00:11,431 --> 00:00:12,500 >> ROB BOWDEN: Hi. 4 00:00:12,500 --> 00:00:13,230 Ek is Rob. 5 00:00:13,230 --> 00:00:15,080 En laat ons Greedy. 6 00:00:15,080 --> 00:00:18,560 >> Dus is die eerste ding wat ons moet doen is vra die gebruiker presies hoe 7 00:00:18,560 --> 00:00:20,500 veel verandering verskuldig is. 8 00:00:20,500 --> 00:00:23,310 So hier is, sien ons ons het 'n doen / lus. 9 00:00:23,310 --> 00:00:26,650 En ons is die opstel van dollars gelyk aan GetFloat. 10 00:00:26,650 --> 00:00:27,890 Wat is GetFloat? 11 00:00:27,890 --> 00:00:30,700 Dit is een van die funksies in die CS50 biblioteek wat kry 'n 12 00:00:30,700 --> 00:00:32,450 dryf van die gebruiker. 13 00:00:32,450 --> 00:00:35,200 Onthou, ten einde daardie funksie te gebruik, ons nodig het om hash sluit 14 00:00:35,200 --> 00:00:37,790 CS50.h aan die bokant. 15 00:00:37,790 --> 00:00:42,310 >> So Sodra ons daardie waarde van die gebruiker, ons moet ook seker maak dat 16 00:00:42,310 --> 00:00:43,560 dit is 'n geldige waarde. 17 00:00:43,560 --> 00:00:46,050 Ons kan nie 'n negatiewe geld skuld. 18 00:00:46,050 --> 00:00:48,460 En so dit is die doel van hierdie do / while lus. 19 00:00:48,460 --> 00:00:52,420 Ons gaan voort om herhaling terwyl dollars is minder as nul. 20 00:00:52,420 --> 00:00:56,960 En 'n doen / lus is om die regte ding hier te gebruik, aangesien ons nodig het om te vra om die 21 00:00:56,960 --> 00:01:00,290 gebruikers ten minste een keer vir hoe veel geld geskuld. 22 00:01:00,290 --> 00:01:05,040 >> So Sodra ons daardie aantal dollars, ons hier sien ons het int sent 23 00:01:05,040 --> 00:01:08,630 gelyk ronde dollars keer CENTS_PER_DOLLAR. 24 00:01:08,630 --> 00:01:10,740 Op die top, sien ons dat CENTS_PER_DOLLAR is 25 00:01:10,740 --> 00:01:13,750 sinvol gedefinieer as 100. 26 00:01:13,750 --> 00:01:16,270 So, wat is die lyn te doen? 27 00:01:16,270 --> 00:01:21,200 >> Wel, as jy onthou, swaai punt waardes is nie heeltemal akkuraat. 28 00:01:21,200 --> 00:01:25,470 In teenstelling met heelgetalle, kan ons nie voorstel swaai punt waardes presies. 29 00:01:25,470 --> 00:01:28,660 Daar is altyd 'n soort van onakkuraatheid. 30 00:01:28,660 --> 00:01:32,840 So het ons verkies om te werk met net heelgetalle Dwarsdeur hierdie probleem. 31 00:01:32,840 --> 00:01:42,690 En hier, indien die gebruiker aangegaan $ 3,42, ons die omskakeling wat aan 342 sent en 32 00:01:42,690 --> 00:01:45,900 afronding, net ontslae te raak van enige van daardie onakkuraatheid. 33 00:01:45,900 --> 00:01:49,940 >> So as ons die aantal sent in 'n heelgetal is, kan ons voortgaan met die 34 00:01:49,940 --> 00:01:51,730 res van die program. 35 00:01:51,730 --> 00:01:55,910 Ons sien hier dat ons heelgetal is verklaar muntstukke wat ons is net te gebruik 36 00:01:55,910 --> 00:01:59,560 tred te hou van die totale aantal muntstukke. 37 00:01:59,560 --> 00:02:01,590 Hier het ons ons eerste while loop. 38 00:02:01,590 --> 00:02:06,780 >> Ons sien terwyl sent groter as of gelyk aan kwartaal, wat bo is hash 39 00:02:06,780 --> 00:02:14,680 gedefinieer as 25, terwyl dit waar is, ons wil ons nommer van die muntstukke te inkrementeer 40 00:02:14,680 --> 00:02:18,350 en decrement sent per kwartaal. 41 00:02:18,350 --> 00:02:22,810 Onthou dat hierdie sintaksis is gelykstaande aan sent 42 00:02:22,810 --> 00:02:26,020 gelyk sent minus kwartaal. 43 00:02:26,020 --> 00:02:28,170 Dit is dieselfde. 44 00:02:28,170 --> 00:02:31,850 >> So, wat is dit terwyl loop doen? 45 00:02:31,850 --> 00:02:39,260 Die idee hier is dat, as ek weet $ 3,42 verskuldig is, kan ek voortgaan om 46 00:02:39,260 --> 00:02:42,670 kwartale totdat ek kan nie gee kwartale meer. 47 00:02:42,670 --> 00:02:47,720 Ek kan nie kwartale gee nie meer nie, nadat ek gegee het $ 3,25. 48 00:02:47,720 --> 00:02:53,300 >> So dan, wanneer dit die geval is, sal ons breek uit hierdie while loop. 49 00:02:53,300 --> 00:02:57,650 Sent gelaat sal word op 17 sent. 50 00:02:57,650 --> 00:03:01,910 En ons sal voortgaan om na die volgende terwyl loop waar ons sê, terwyl sent 51 00:03:01,910 --> 00:03:04,270 groter as of gelyk aan sent. 52 00:03:04,270 --> 00:03:07,420 >> En nou is ons doen presies dieselfde ding wat ons gedoen het in die kwartaal geval, 53 00:03:07,420 --> 00:03:09,010 behalwe met dimes. 54 00:03:09,010 --> 00:03:15,050 So met $ 0,17, sal ons lus totdat ons kan nie meer 'n sent gee, wat 55 00:03:15,050 --> 00:03:16,680 presies een keer. 56 00:03:16,680 --> 00:03:20,470 En dan sal ons gelaat word met 7 sent. 57 00:03:20,470 --> 00:03:24,730 >> Dan sal ons voortgaan om op te Nickels, wat sal loop totdat ons nie kan gee 58 00:03:24,730 --> 00:03:29,420 meer Nickels, wat sal laat ons met twee sent. 59 00:03:29,420 --> 00:03:34,400 En dan, op die bodem, ons het pennies, wat sal loop en sal 60 00:03:34,400 --> 00:03:37,140 Uiteindelik laat ons met 'n nul sent. 61 00:03:37,140 --> 00:03:41,670 Dan aan die einde, het ons net nodig het om te druk ons ​​nommer van die muntstukke. 62 00:03:41,670 --> 00:03:44,980 >> So hierdie program is heeltemal korrek is. 63 00:03:44,980 --> 00:03:47,310 Maar ons kan eintlik 'n bietjie beter te doen. 64 00:03:47,310 --> 00:03:52,660 Nou as ek sê dat ek skuld jou $ 10000, jy moet nie nodig om te gaan hier is een 65 00:03:52,660 --> 00:03:55,310 kwartaal, twee kwartale, drie kwartale. 66 00:03:55,310 --> 00:03:59,450 Jy moet dadelik weet dat Ek skuld jou 40000 kwartale. 67 00:03:59,450 --> 00:04:04,070 >> Nou laat ons kyk na 'n program wat hanteer dit 'n bietjie beter. 68 00:04:04,070 --> 00:04:07,190 In hierdie weergawe van die dinge wat ons nog nodig het die gebruiker vir die bedrag van om te vra 69 00:04:07,190 --> 00:04:10,930 verander wat hulle wil in presies dieselfde manier wat ons gedoen het nie. 70 00:04:10,930 --> 00:04:14,110 Ons het dit nodig om presies te rond die manier waarop ons gedoen het voor. 71 00:04:14,110 --> 00:04:17,910 En ons het nog steeds ons munte heelgetal verklaar presies dieselfde as voorheen. 72 00:04:17,910 --> 00:04:21,399 >> So hier is waar dinge 'n bietjie anders. 73 00:04:21,399 --> 00:04:24,640 Ons doen munte plus gelykes sent gedeel deur kwartaal 74 00:04:24,640 --> 00:04:27,140 waar kwartaal is 25. 75 00:04:27,140 --> 00:04:31,790 Wat dit sê is, neem soveel kwartiere as kan gaan in sent en voeg 76 00:04:31,790 --> 00:04:33,030 wat aan munte. 77 00:04:33,030 --> 00:04:40,100 >> So as sent is 142, 142 verdeel 25 gee ons 5. 78 00:04:40,100 --> 00:04:43,950 Onthou dat heelgetal afdeling kapt outomaties. 79 00:04:43,950 --> 00:04:46,870 So ons doen munte plus gelyk aan 5. 80 00:04:46,870 --> 00:04:51,850 >> Onmiddellik na hierdie, sê ons sent gelyk sent mod kwartaal. 81 00:04:51,850 --> 00:04:57,150 Onthou dat die mod operateur gee ons die res na afdeling. 82 00:04:57,150 --> 00:05:05,840 So 142 mod kwartaal, wat gee is 142 minus 125, wat is 17. 83 00:05:05,840 --> 00:05:10,470 Dit is die res na doen 142 gedeel deur 25. 84 00:05:10,470 --> 00:05:13,040 >> So nou sent is gelyk aan 17. 85 00:05:13,040 --> 00:05:16,080 En ons doen presies dieselfde ding vir dimes. 86 00:05:16,080 --> 00:05:18,620 17 gedeel deur 10 gee ons 1. 87 00:05:18,620 --> 00:05:20,150 En ons byvoeg dat muntstukke. 88 00:05:20,150 --> 00:05:25,380 En dan het ons sent te werk wees 17 mod 10, wat is 7. 89 00:05:25,380 --> 00:05:27,200 >> En dan dieselfde vir vernikkelt. 90 00:05:27,200 --> 00:05:29,180 7 gedeel deur 5 is 1. 91 00:05:29,180 --> 00:05:30,880 Voeg wat aan munte. 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 dit is ons sent. 94 00:05:35,910 --> 00:05:39,065 >> En dan, vir pennies, daar is geen werklike punt in skeidslyn of modding, aangesien, 95 00:05:39,065 --> 00:05:42,170 As ons 'n $ 0,2 oorgebly het, kan ons net onmiddellik byvoeg dat 96 00:05:42,170 --> 00:05:43,590 ons nommer van die muntstukke. 97 00:05:43,590 --> 00:05:48,210 En ten slotte, moet ons uit te druk ons aantal munte en, opsioneel, 98 00:05:48,210 --> 00:05:52,100 terug 0 aan die einde van ons program alles dui gewerk. 99 00:05:52,100 --> 00:05:53,120 >> My 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 >> [Speel van musiek] 102 00:05:57,620 --> 00:06:01,515