1 00:00:00,000 --> 00:00:00,994 2 00:00:00,994 --> 00:00:11,431 >> [MUSIC PLAYING] 3 00:00:11,431 --> 00:00:12,500 >> ROB Bowden: Hi. 4 00:00:12,500 --> 00:00:13,230 Aku Rob. 5 00:00:13,230 --> 00:00:15,080 Dan mari kita Greedy. 6 00:00:15,080 --> 00:00:18,560 >> Jadi, hal pertama yang perlu kita lakukan adalah meminta pengguna persis bagaimana 7 00:00:18,560 --> 00:00:20,500 banyak perubahan berutang. 8 00:00:20,500 --> 00:00:23,310 Jadi di sini, kita melihat kita memiliki do / while. 9 00:00:23,310 --> 00:00:26,650 Dan kami sedang menyiapkan dolar sama dengan getFloat. 10 00:00:26,650 --> 00:00:27,890 Apa getFloat? 11 00:00:27,890 --> 00:00:30,700 Ini salah satu fungsi dalam Perpustakaan CS50 yang mendapat 12 00:00:30,700 --> 00:00:32,450 mengapung dari pengguna. 13 00:00:32,450 --> 00:00:35,200 Ingat, untuk menggunakan fungsi tersebut, kita perlu hash termasuk 14 00:00:35,200 --> 00:00:37,790 CS50.h di bagian atas. 15 00:00:37,790 --> 00:00:42,310 >> Jadi, sekali kita memiliki nilai yang dari pengguna, kami juga harus yakin bahwa 16 00:00:42,310 --> 00:00:43,560 itu adalah nilai yang valid. 17 00:00:43,560 --> 00:00:46,050 Kita tidak bisa berutang uang negatif. 18 00:00:46,050 --> 00:00:48,460 Dan itulah tujuan do ini / while. 19 00:00:48,460 --> 00:00:52,420 Kami terus perulangan sementara dolar kurang dari nol. 20 00:00:52,420 --> 00:00:56,960 Dan do / while adalah hal yang benar untuk digunakan di sini, karena kita perlu untuk meminta 21 00:00:56,960 --> 00:01:00,290 pengguna setidaknya sekali untuk bagaimana banyak uang yang berutang. 22 00:01:00,290 --> 00:01:05,040 >> Jadi setelah kami memiliki jumlah dolar, kita lihat di sini kita memiliki sen int 23 00:01:05,040 --> 00:01:08,630 sama dengan putaran dolar kali CENTS_PER_DOLLAR. 24 00:01:08,630 --> 00:01:10,740 Di bagian atas, kita melihat bahwa CENTS_PER_DOLLAR adalah 25 00:01:10,740 --> 00:01:13,750 bijaksana didefinisikan sebagai 100. 26 00:01:13,750 --> 00:01:16,270 Jadi apa yang baris ini lakukan? 27 00:01:16,270 --> 00:01:21,200 >> Nah, jika Anda ingat, floating point nilai tidak cukup tepat. 28 00:01:21,200 --> 00:01:25,470 Tidak seperti bilangan bulat, kita tidak dapat mewakili nilai-nilai floating point tepat. 29 00:01:25,470 --> 00:01:28,660 Selalu ada semacam ketidaktepatan. 30 00:01:28,660 --> 00:01:32,840 Jadi kita lebih suka bekerja hanya dengan bilangan bulat seluruh masalah ini. 31 00:01:32,840 --> 00:01:42,690 Dan di sini, jika pengguna masuk $ 3,42, kita mengubah bahwa untuk 342 sen dan 32 00:01:42,690 --> 00:01:45,900 pembulatan, hanya menyingkirkan setiap ketidaktepatan itu. 33 00:01:45,900 --> 00:01:49,940 >> Jadi, sekali kita memiliki jumlah sen di integer, kita dapat melanjutkan dengan 34 00:01:49,940 --> 00:01:51,730 sisa program. 35 00:01:51,730 --> 00:01:55,910 Kita lihat di sini bahwa kita menyatakan bilangan bulat koin yang kita hanya menggunakan 36 00:01:55,910 --> 00:01:59,560 untuk melacak total jumlah koin. 37 00:01:59,560 --> 00:02:01,590 Di sini, kita memiliki while loop pertama kami. 38 00:02:01,590 --> 00:02:06,780 >> Kami melihat sementara sen lebih besar dari atau sama dengan kuartal, yang di atas, adalah hash 39 00:02:06,780 --> 00:02:14,680 didefinisikan sebagai 25, sementara itu benar, kita ingin kenaikan jumlah kami koin 40 00:02:14,680 --> 00:02:18,350 dan penurunan sen seperempat. 41 00:02:18,350 --> 00:02:22,810 Ingat bahwa sintaks ini setara dengan sen 42 00:02:22,810 --> 00:02:26,020 sama sen dikurangi seperempat. 43 00:02:26,020 --> 00:02:28,170 Mereka adalah sama. 44 00:02:28,170 --> 00:02:31,850 >> Jadi apa yang while loop ini lakukan? 45 00:02:31,850 --> 00:02:39,260 Idenya di sini adalah bahwa, jika saya tahu $ 3,42 berutang, saya bisa terus memberikan 46 00:02:39,260 --> 00:02:42,670 perempat sampai aku tidak bisa memberikan perempat lagi. 47 00:02:42,670 --> 00:02:47,720 Saya tidak bisa memberikan tempat lagi, setelah saya telah memberikan $ 3,25. 48 00:02:47,720 --> 00:02:53,300 >> Jadi, setelah itu yang terjadi, kita akan keluar dari while loop ini. 49 00:02:53,300 --> 00:02:57,650 Cents akan ditinggalkan pada 17 sen. 50 00:02:57,650 --> 00:03:01,910 Dan kami akan terus turun ke berikutnya while mana kita katakan, sementara sen 51 00:03:01,910 --> 00:03:04,270 lebih besar dari atau sama dengan sepeser pun. 52 00:03:04,270 --> 00:03:07,420 >> Dan sekarang kita sedang melakukan yang sama persis hal yang kita lakukan dalam kasus kuartal, 53 00:03:07,420 --> 00:03:09,010 kecuali dengan dime. 54 00:03:09,010 --> 00:03:15,050 Jadi dengan $ 0,17, kami akan loop sampai kita bisa tidak lagi memberikan sepeser pun, yang 55 00:03:15,050 --> 00:03:16,680 tepat satu kali. 56 00:03:16,680 --> 00:03:20,470 Dan kemudian kita akan ditinggalkan dengan 7 sen. 57 00:03:20,470 --> 00:03:24,730 >> Kemudian kita akan melanjutkan ke sen, yang akan loop sampai kita tidak bisa memberikan 58 00:03:24,730 --> 00:03:29,420 setiap sen lebih, yang akan meninggalkan kita dengan dua sen. 59 00:03:29,420 --> 00:03:34,400 Dan kemudian, turun di bagian bawah, kita memiliki uang, akan yang lingkaran dan akan 60 00:03:34,400 --> 00:03:37,140 akhirnya meninggalkan kita dengan nol sen. 61 00:03:37,140 --> 00:03:41,670 Kemudian pada akhirnya, kita hanya perlu mencetak nomor kami koin. 62 00:03:41,670 --> 00:03:44,980 >> Jadi program ini sangat benar. 63 00:03:44,980 --> 00:03:47,310 Tapi kita benar-benar bisa melakukan sedikit lebih baik. 64 00:03:47,310 --> 00:03:52,660 Sekarang jika saya mengatakan bahwa saya berutang $ 10.000, Anda tidak perlu untuk pergi di sini satu 65 00:03:52,660 --> 00:03:55,310 kuartal, dua kuartal, tiga perempat. 66 00:03:55,310 --> 00:03:59,450 Anda harus tahu bahwa segera Aku berutang 40.000 perempat Anda. 67 00:03:59,450 --> 00:04:04,070 >> Sekarang mari kita lihat program yang menangani itu sedikit lebih baik. 68 00:04:04,070 --> 00:04:07,190 Dalam versi ini hal, kita masih perlu untuk meminta pengguna untuk jumlah 69 00:04:07,190 --> 00:04:10,930 mengubah itu mereka ingin persis dengan cara yang sama kita lakukan sebelumnya. 70 00:04:10,930 --> 00:04:14,110 Kita perlu untuk putaran persis cara kita lakukan sebelumnya. 71 00:04:14,110 --> 00:04:17,910 Dan kami masih memiliki koin kami bilangan bulat menyatakan persis sama seperti sebelumnya. 72 00:04:17,910 --> 00:04:21,399 >> Jadi di sinilah hal-hal mendapatkan sedikit berbeda. 73 00:04:21,399 --> 00:04:24,640 Kami sedang melakukan koin ditambah equals sen dibagi dengan kuartal 74 00:04:24,640 --> 00:04:27,140 di mana kuartal adalah 25. 75 00:04:27,140 --> 00:04:31,790 Apa ini katakan adalah, mengambil sebanyak perempat seperti dapat masuk ke sen dan menambahkan 76 00:04:31,790 --> 00:04:33,030 bahwa untuk koin. 77 00:04:33,030 --> 00:04:40,100 >> Jadi jika sen adalah 142, 142 dibagi 25 memberi kita 5. 78 00:04:40,100 --> 00:04:43,950 Ingat bahwa pembagian integer otomatis memotong. 79 00:04:43,950 --> 00:04:46,870 Jadi kita melakukan koin ditambah sama dengan 5. 80 00:04:46,870 --> 00:04:51,850 >> Segera setelah ini, kami katakan sen sen sama kuartal mod. 81 00:04:51,850 --> 00:04:57,150 Ingat bahwa operator mod memberi kami sisa setelah pembagian. 82 00:04:57,150 --> 00:05:05,840 Jadi 142 kuartal mod, yang akan memberikan adalah 142 dikurangi 125, yaitu 17. 83 00:05:05,840 --> 00:05:10,470 Itulah sisa setelah melakukan 142 dibagi dengan 25. 84 00:05:10,470 --> 00:05:13,040 >> Jadi sekarang sen adalah sama dengan 17. 85 00:05:13,040 --> 00:05:16,080 Dan kami melakukan hal yang sama persis hal yang dime. 86 00:05:16,080 --> 00:05:18,620 17 dibagi dengan 10 akan memberi kita 1. 87 00:05:18,620 --> 00:05:20,150 Dan kita menambahkan bahwa untuk koin. 88 00:05:20,150 --> 00:05:25,380 Dan kemudian kami memperbarui sen menjadi menjadi 17 mod 10, yaitu 7. 89 00:05:25,380 --> 00:05:27,200 >> Dan kemudian hal yang sama untuk receh. 90 00:05:27,200 --> 00:05:29,180 7 dibagi oleh 5 adalah 1. 91 00:05:29,180 --> 00:05:30,880 Menambahkan bahwa untuk koin. 92 00:05:30,880 --> 00:05:34,600 Dan kemudian 7 mod 5 adalah 2. 93 00:05:34,600 --> 00:05:35,910 Dan itulah sen kami. 94 00:05:35,910 --> 00:05:39,065 >> Dan kemudian, untuk sen, tidak ada yang nyata titik dalam pembagian atau modding, karena, 95 00:05:39,065 --> 00:05:42,170 jika kita memiliki $ 0,2 tersisa, kita bisa hanya segera menambahkan bahwa untuk 96 00:05:42,170 --> 00:05:43,590 kami jumlah koin. 97 00:05:43,590 --> 00:05:48,210 Dan akhirnya, kita perlu untuk mencetak kami jumlah koin dan, opsional, 98 00:05:48,210 --> 00:05:52,100 return 0 pada akhir program kami untuk menandakan semuanya bekerja. 99 00:05:52,100 --> 00:05:53,120 >> Nama saya Rob. 100 00:05:53,120 --> 00:05:54,020 Dan ini adalah Greedy. 101 00:05:54,020 --> 00:05:57,620 >> [MUSIC PLAYING] 102 00:05:57,620 --> 00:06:01,515