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 BOWDEN: Привет. 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 >> Тому, як тільки у нас є, що кількість доларів, ми бачимо тут ми маємо десяткового центів 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 Тепер, якщо я кажу, що я повинен тобі $ 10000, вам не потрібно йти ось один 65 00:03:52,660 --> 00:03:55,310 квартал, два квартали, три чверті. 66 00:03:55,310 --> 00:03:59,450 Ви повинні негайно знати, що Я повинен вам 40000 квартали. 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 >> Відразу після цього, ми говоримо центів рівні центів мод кварталі. 81 00:04:51,850 --> 00:04:57,150 Пам'ятайте, що мод оператор дає нам залишок від ділення. 82 00:04:57,150 --> 00:05:05,840 Так 142 мод квартал, що дасть 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 мод 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 мод 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 якщо у нас є $ 0,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