1 00:00:00,000 --> 00:00:00,994 2 00:00:00,994 --> 00:00:11,431 >> [השמעת מוסיקה] 3 00:00:11,431 --> 00:00:12,500 >> ROB אודן: היי. 4 00:00:12,500 --> 00:00:13,230 אני רוב. 5 00:00:13,230 --> 00:00:15,080 ובואו לקבל חמדן. 6 00:00:15,080 --> 00:00:18,560 >> אז הדבר הראשון שאנחנו צריכים לעשות הוא לשאול את המשתמש בדיוק איך 7 00:00:18,560 --> 00:00:20,500 הרבה שינוי הוא חייב. 8 00:00:20,500 --> 00:00:23,310 אז הנה, אנחנו רואים שיש לנו לעשות / תוך לולאה. 9 00:00:23,310 --> 00:00:26,650 ואנחנו קביעת דולרים שווה GetFloat. 10 00:00:26,650 --> 00:00:27,890 מהו GetFloat? 11 00:00:27,890 --> 00:00:30,700 זה אחד מהתפקידים ב ספריית CS50 שמקבלת 12 00:00:30,700 --> 00:00:32,450 לצוף מהמשתמש. 13 00:00:32,450 --> 00:00:35,200 זכור, על מנת להשתמש בפונקציה זו, אנחנו צריכים חשיש כוללים 14 00:00:35,200 --> 00:00:37,790 CS50.h בחלק העליון. 15 00:00:37,790 --> 00:00:42,310 >> אז ברגע שיש לנו ערך שמן משתמש, גם אנחנו צריכים להיות בטוחים כי 16 00:00:42,310 --> 00:00:43,560 זה ערך חוקי. 17 00:00:43,560 --> 00:00:46,050 אנחנו לא יכולים חייבים כסף שלילי. 18 00:00:46,050 --> 00:00:48,460 ואז זה המטרה של עשה את זה / ואילו לולאה. 19 00:00:48,460 --> 00:00:52,420 אנחנו ממשיכים לולאה תוך דולרים הוא פחות מאפס. 20 00:00:52,420 --> 00:00:56,960 ולעשות / תוך לולאה היא דבר הנכון לשימוש כאן, שכן אנו צריכים לשאול 21 00:00:56,960 --> 00:01:00,290 משתמשים לפחות פעם אחת לכמה הרבה כסף הוא חייב. 22 00:01:00,290 --> 00:01:05,040 >> אז ברגע שיש לנו את המספר הזה של דולרים, אנו רואים כאן שיש לנו סנט int 23 00:01:05,040 --> 00:01:08,630 שווה סיבוב על דולרי זמנים CENTS_PER_DOLLAR. 24 00:01:08,630 --> 00:01:10,740 בחלק העליון, אנו רואים כי CENTS_PER_DOLLAR הוא 25 00:01:10,740 --> 00:01:13,750 בתבונה מוגדרת כ100. 26 00:01:13,750 --> 00:01:16,270 אז מה עושה את הקו הזה? 27 00:01:16,270 --> 00:01:21,200 >> ובכן, אם אתה זוכר, נקודה צפה ערכים הם לא ממש מדויקים. 28 00:01:21,200 --> 00:01:25,470 שלא כמו מספרים שלמים, אנחנו לא יכולים לייצג ערכי נקודה צפה בדיוק. 29 00:01:25,470 --> 00:01:28,660 תמיד יש סוג כלשהו של חוסר דיוק. 30 00:01:28,660 --> 00:01:32,840 אז אנחנו מעדיפים לעבוד רק עם מספרים שלמים לאורך כל את הבעיה הזו. 31 00:01:32,840 --> 00:01:42,690 והנה, אם המשתמש נכנס 3.42 $, אנחנו המרה של342 סנט ו 32 00:01:42,690 --> 00:01:45,900 עיגול, פשוט להיפטר כל חוסר דיוק ש. 33 00:01:45,900 --> 00:01:49,940 >> אז ברגע שיש לנו את המספר של סנט ב שלם, אנחנו יכולים להמשיך עם 34 00:01:49,940 --> 00:01:51,730 שאר התכנית. 35 00:01:51,730 --> 00:01:55,910 אנו רואים כאן שאנחנו מכריזים שלמים מטבעות שאנחנו רק להשתמש 36 00:01:55,910 --> 00:01:59,560 כדי לעקוב אחר סך הכל מספר המטבעות. 37 00:01:59,560 --> 00:02:01,590 הנה, יש לנו בזמן שהלולאה הראשונה שלנו. 38 00:02:01,590 --> 00:02:06,780 >> אנו רואים בזמן שהסנאט הוא גדול או שווה לרבעון, אשר לעיל, הוא חשיש 39 00:02:06,780 --> 00:02:14,680 מוגדרים כ25, בעוד זה נכון, אנחנו רוצה להגדיל מספר המטבעות שלנו 40 00:02:14,680 --> 00:02:18,350 וסנטים מפחית ברבעון. 41 00:02:18,350 --> 00:02:22,810 זכור כי תחביר זה הוא שווה ערך לסנאט 42 00:02:22,810 --> 00:02:26,020 שווה סנט מינוס רבעון. 43 00:02:26,020 --> 00:02:28,170 אלה הם אותו הדבר. 44 00:02:28,170 --> 00:02:31,850 >> אז מה הוא עושה בזמן שהמעגל הזה? 45 00:02:31,850 --> 00:02:39,260 הרעיון כאן הוא שאם אני יודע 3.42 $ הוא חייב, אני יכול להמשיך ולתת 46 00:02:39,260 --> 00:02:42,670 רבעים עד שאני לא יכול לתת לי רבעים יותר. 47 00:02:42,670 --> 00:02:47,720 אני לא יכול לתת רבעים יותר, פעם אחת נתתי לי 3.25 $. 48 00:02:47,720 --> 00:02:53,300 >> אז, ברגע שזה המקרה, אנחנו לפרוץ את הלולאה בזמן הזה. 49 00:02:53,300 --> 00:02:57,650 סנט יישאר ב17 סנט. 50 00:02:57,650 --> 00:03:01,910 ואנחנו נמשיך במורד למשנהו ואילו לולאה שבו אנחנו אומרים, ואילו סנט 51 00:03:01,910 --> 00:03:04,270 הוא גדול או שווה לאגורה. 52 00:03:04,270 --> 00:03:07,420 >> ועכשיו אנחנו עושים את אותו דבר מדויק דבר שעשינו במקרה הרבעון, 53 00:03:07,420 --> 00:03:09,010 אלא במטבעות של עשרה סנאט. 54 00:03:09,010 --> 00:03:15,050 אז עם 0.17 $, אנחנו לולאה עד שאנחנו יכולים כבר לא נותן אגורה, שהוא 55 00:03:15,050 --> 00:03:16,680 פעם אחת בדיוק. 56 00:03:16,680 --> 00:03:20,470 ואז אנחנו אשאר עם 7 סנט. 57 00:03:20,470 --> 00:03:24,730 >> לאחר מכן אנו ממשיכים למטבעות, אשר יהיה לולאה עד שאנחנו לא יכולים לתת לי 58 00:03:24,730 --> 00:03:29,420 עוד מטבעות, אשר יהיה משאיר אותנו עם שני סנטים. 59 00:03:29,420 --> 00:03:34,400 ולאחר מכן, למטה בתחתית, יש לנו פרוטות, שתהיה לולאה ותהיה 60 00:03:34,400 --> 00:03:37,140 לבסוף משאיר אותנו עם אפס סנט. 61 00:03:37,140 --> 00:03:41,670 ואז בסוף, אנחנו רק צריכים להדפיס את מספר המטבעות שלנו. 62 00:03:41,670 --> 00:03:44,980 >> אז תכנית זו היא נכונה באופן מושלם. 63 00:03:44,980 --> 00:03:47,310 אבל אנחנו באמת יכולים לעשות קצת יותר טובים. 64 00:03:47,310 --> 00:03:52,660 עכשיו, אם אני אומר שאני חייב לך $ 10,000, אתה לא צריך ללכת הנה אחד 65 00:03:52,660 --> 00:03:55,310 רבעון, בשני רבעונים, שלושה רבעים. 66 00:03:55,310 --> 00:03:59,450 אתה צריך לדעת באופן מיידי, כי אני חייב לך 40,000 רבעונים. 67 00:03:59,450 --> 00:04:04,070 >> עכשיו בואו נסתכל על תכנית ש מטפל קצת יותר טוב בו. 68 00:04:04,070 --> 00:04:07,190 בגרסה זו של דברים, אנחנו עדיין צריכים לשאול את המשתמש לכמות 69 00:04:07,190 --> 00:04:10,930 לשנות את זה שהם רוצים בדיוק באותה הדרך שעשינו בעבר. 70 00:04:10,930 --> 00:04:14,110 אנחנו צריכים לעגל בדיוק זה את הדרך שעשינו בעבר. 71 00:04:14,110 --> 00:04:17,910 ועדיין יש לנו המטבעות שלנו שלם הוכרז בדיוק אותו הדבר כמו קודם. 72 00:04:17,910 --> 00:04:21,399 >> אז הנה מקום שבו דברים לקבל קצת שונה. 73 00:04:21,399 --> 00:04:24,640 אנחנו עושים את המטבעות בתוספת שווה סנט מחולק ברבעון 74 00:04:24,640 --> 00:04:27,140 בי רבעון הוא 25. 75 00:04:27,140 --> 00:04:31,790 מה שזה אומר זה, לקחת כמה שיותר רבעונים כיכולים להיכנס לסנאט ולהוסיף 76 00:04:31,790 --> 00:04:33,030 כי למטבעות. 77 00:04:33,030 --> 00:04:40,100 >> אז אם סנט הוא 142, 142 מחולקים על ידי 25 נותן לנו 5. 78 00:04:40,100 --> 00:04:43,950 זכור כי חלוקה של מספרים שלמים באופן אוטומטי חותך. 79 00:04:43,950 --> 00:04:46,870 אז אנחנו עושים מטבעות בתוספת שווה 5. 80 00:04:46,870 --> 00:04:51,850 >> מייד אחרי זה, אנחנו אומרים סנט שווה סנט רבעון mod. 81 00:04:51,850 --> 00:04:57,150 זכור כי מפעיל mod נותן שלנו השארית לאחר החלוקה. 82 00:04:57,150 --> 00:05:05,840 אז 142 רבעון mod, זה ייתן לי הוא 142 מינוס 125, שהוא 17. 83 00:05:05,840 --> 00:05:10,470 זה השארית לאחר עושה 142 מחולקים 25. 84 00:05:10,470 --> 00:05:13,040 >> אז עכשיו סנטים שווים ל17. 85 00:05:13,040 --> 00:05:16,080 ואנחנו עושים את אותו דבר דבר למטבעות. 86 00:05:16,080 --> 00:05:18,620 17 מחולקים 10 ייתן לנו 1. 87 00:05:18,620 --> 00:05:20,150 ואנו מוסיפים כי למטבעות. 88 00:05:20,150 --> 00:05:25,380 ואז אנחנו לעדכן סנט ל להיות 17 mod 10, שהוא 7. 89 00:05:25,380 --> 00:05:27,200 >> ולאחר מכן את אותו הדבר עבור פרוטות. 90 00:05:27,200 --> 00:05:29,180 7 מחולקים לפי 5 הוא 1. 91 00:05:29,180 --> 00:05:30,880 תוסיף, כי למטבעות. 92 00:05:30,880 --> 00:05:34,600 ולאחר מכן 7 mod 5 הוא 2. 93 00:05:34,600 --> 00:05:35,910 וזה סנט שלנו. 94 00:05:35,910 --> 00:05:39,065 >> ואז, בפרוטות, אין אמיתי נקודה המפרידה או למשחקים, שכן, 95 00:05:39,065 --> 00:05:42,170 אם יש לנו .2 $ שנשארו, אנחנו יכולים רק מייד מוסיף כי ל 96 00:05:42,170 --> 00:05:43,590 המספר שלנו של מטבעות. 97 00:05:43,590 --> 00:05:48,210 ולבסוף, אנחנו צריכים להדפיס אותנו מספר המטבעות, לחלופין, 98 00:05:48,210 --> 00:05:52,100 להחזיר 0 בסוף התכנית שלנו כדי לסמן הכל עבד. 99 00:05:52,100 --> 00:05:53,120 >> השם שלי הוא רוב. 100 00:05:53,120 --> 00:05:54,020 וזה היה חמדן. 101 00:05:54,020 --> 00:05:57,620 >> [השמעת מוסיקה] 102 00:05:57,620 --> 00:06:01,515