[MUZIK Bermain] ZAMYLA CHAN: Sekarang mari kita menangani Tamak. Mengatakan anda juruwang, dan anda perlu memberi pelanggan anda sejumlah perubahan. Nah, jika anda seorang juruwang tamak, anda akan mahu untuk memastikan semua syiling kepada diri sendiri. Jadi, anda akan memberikan pelanggan perubahan mereka menggunakan sebagai beberapa syiling yang mungkin. Tugas anda untuk ini p-set adalah untuk melaksanakan Tamak, program yang mengira bilangan minimum syiling digunakan untuk membuat apa-apa diberikan jumlah perubahan. Sebelum terjun ke dalam pengaturcaraan konsep dan C sintaks untuk Tamak, mari kita bercakap pertama melalui Tamak program, dan lihat jika kita boleh mengenal pasti algoritma. Ingat bahawa algoritma hanya satu set arahan untuk menyelesaikan masalah. Algoritma untuk Tamak hanya akan menjadi set peraturan logik dan langkah-langkah yang kita boleh mengikuti. Dan mereka akan sentiasa menghasilkan minimum beberapa syiling diperlukan. Perkara pertama yang anda perlukan untuk tahu ialah berapa banyak perubahan terhutang kepada pelanggan. Untuk contoh ini, katakan $ 0,32. Terdapat banyak cara untuk mendapatkan kembali $ 0,32. Anda boleh menggunakan, misalnya, 32 beberapa sen. Atau jika, anda agak lanjut masanya dalam memilih syiling anda, anda boleh menggunakan lima syiling dan bukannya 32 dengan memberi pelanggan tiga dimes - $ 0.10 sesaham - dan dua beberapa sen - $ 0,01 setiap. Tetapi kita boleh melakukan yang lebih baik daripada lima syiling? Bolehkah kita menjadi lebih lanjut masanya? Mungkin. Mari kita terus berjalan melalui program ini Tamak, dan lihat. Jika matlamat akhir anda adalah dengan menggunakan beberapa syiling yang mungkin, maka ia akan menjadi yang paling berhemat untuk menggunakan terbesar syiling mungkin. Anda lebih suka memberikan satu perempat menyokong - $ 0,25 setiap satu - daripada lima Nickels - $ 0,05 setiap. Jadi mungkin peraturan pentadbiran kami untuk Tamak boleh untuk sentiasa menggunakan syiling terbesar mungkin. Daripada pihak, dimes, Nickels, dan beberapa sen, kami syiling terbesar adalah suku. Oleh itu, kita akan cuba untuk menggunakan mereka pertama. Kembali kepada $ 0.32 kami. Bolehkah kita menggunakan suku untuk memberi pelanggan $ 0,32? Ya. Yang akan meninggalkan kita dengan $ 0,07 kiri. Bolehkah kita menggunakan suku yang lain? Tidak, kerana 25 adalah lebih besar daripada tujuh. Kami tidak mahu memberikan pelanggan apa-apa lebih daripada kita berhutang mereka. Baiklah. Sekarang kita telah habis pihak kami, mari kita beralih kepada yang terbesar seterusnya duit syiling, ada yang itu. Boleh kita gunakan ada yang memberi pelanggan mereka kembali $ 0,07? Tidak, kerana 10 adalah lebih besar daripada tujuh. Jadi maka syiling seterusnya terbesar diakses kepada kita adalah nikel. Bolehkah kita menggunakan nikel? Ya. Dan kemudian kita akan mempunyai $ 0,02 yang ditinggalkan. Kita tidak boleh menggunakan nikel untuk kembali $ 0.02. Oleh itu, kita berpindah syiling terakhir di tangan kita - sen. Dan selepas menggunakan dua beberapa sen, kita akan ditinggalkan dengan sifar sen, yang bermaksud bahawa kita telah berjaya dibayar balik pengguna perubahan mereka terhutang menggunakan hanya empat syiling - satu perempat, satu nikel, dan dua beberapa sen. Anda boleh menjalankan penyelesaian kakitangan untuk melihat jika peraturan pentadbiran dan proses memberi jawapan yang betul. Bagi kebanyakan set masalah, anda akan dapat untuk menjalankan penyelesaian kakitangan untuk melihat bagaimana program anda sendiri harus bekerja. Dan arahan khusus akan berada di dalam masalah ini menetapkan ciri-ciri komputer. Apabila kita menjalankan penyelesaian kakitangan, ia meminta kami untuk bagaimana perubahan banyak yang terhutang ambil perhatian bahawa ia meminta untuk terjumlah dalam dolar. Kami input $ 0,32, 0.32. Ia memberitahu kita bahawa empat syiling berhutang, konsisten dengan jawapan kita. Hebat. Jadi sekarang mari kita mula mencari pada pelaksanaan algoritma Tamak. Kita tahu beberapa perkara. Satu, yang kita perlu untuk mempercepat pengguna bagi jumlah perubahan. Dua, bahawa kita akan mahu mengikut kami yang mengawal peraturan untuk sentiasa menggunakan syiling terbesar mungkin. Dan tiga, bahawa kita perlu untuk mengesan berapa banyak duit syiling yang kita gunakan. Kerana akhir sekali, kita perlu untuk mencetak bilangan syiling yang kita. Pertama, mendorong pengguna bagi jumlah perubahan. Apabila anda berurusan dengan input pengguna, membuat memastikan bahawa anda memikirkan semua keperluan input, dan hanya menerima input yang memenuhi mereka keperluan. Dalam kes ini, kita mahu berurusan dengan nilai wang dalam dolar. Yang GetFloat dan GetInt fungsi memastikan input adalah nombor. Tetapi pengguna dapat input nilai angka negatif. Jadi ingat untuk hanya menggunakan bukan negatif input, yang merangkumi semua negatif nombor dan sifar. Dalam kes ini, input perlu apungan. Dalam erti kata lain, nombor perpuluhan. Oleh kerana spec set masalah memerlukan anda untuk meminta input dalam dolar. Tetapi dalam C, mata yang terapung tidak boleh diwakili dengan tepat. Oleh kerana terdapat beberapa terhingga bit dengan yang mewakili nilai-nilai tak terhingga. Ambil nombor yang 0.1. Jika saya meminta anda untuk menulis 0.1 oleh tangan ke tempat perpuluhan itu seratus, anda akan menulis 1, diikuti oleh 99 sifar. Kami harapkan bahawa komputer kita akan mencetak perkara yang sama jika kami bertanya kepada. Jadi mari kita melihat apa yang dilakukan. Saya akan mengkaji semula nilai-nilai ke arah percetakan akhir ini berjalan melalui. Buat masa ini, lihat di sini bahawa f% adalah pemegang tempat untuk titik terapung. Tetapi kita nyatakan terlebih dahulu bahawa kita mahu 100 perpuluhan dipaparkan, dan kemudian baru talian untuk pemformatan lebih bagus. Selepas tali, kita memilih 0.1 sebagai terapung yang kita ingin mencetak keluar. Dan hasilnya, satu, diikuti oleh beberapa sifar, tetapi kemudian sejumlah nombor. Sudah tentu tidak seperti yang diharapkan. Titik terapung ketakpersisan boleh memperkenalkan ralat ke dalam anda pengiraan yang anda akan pasti mahu mengelakkan. Jika anda ingin melihat lebih banyak contoh, anda boleh turun imprecision.ce dari berjalan melalui kod, yang mudah yang program yang meminta terapung dan mencetak ia kembali ke tempat perpuluhan seratus. Sudah tentu, jika anda mahu untuk menunjukkan lebih kurang tempat perpuluhan anda boleh mengubah diri sendiri. Seperti yang anda akan lihat, walaupun perbezaan antara kedua-dua adalah kecil, apabila anda untuk membiak dan menambah mengapung, yang percanggahan akhirnya boleh menambah. Kembali ke Tamak. Kami akan mahu mengelakkan kesilapan pembundaran yang hanya berurusan dengan nombor bulat. Jadi apabila kita mendapatkan input sah dari pengguna, mari kita menukar ini nilai dolar untuk sen. Mental, kita melakukan ini dengan mendarabkan nilai dolar dengan 100. Tetapi ingat, kerana titik terapung ketakpersisan, kami ingin memastikan bahawa kita menggunakan nilai yang betul. Didarab dengan 100 pada dasarnya akan bergerak tempat perpuluhan dua ruang untuk kanan, mencincang off atau memendekkan apa-apa selepas itu. Jika anda bermain-main dengan beberapa lebih contoh, anda akan melihat bahawa anda tidak akan sentiasa mendapat nombor yang tepat jika anda menggunakan kaedah ini memendekkan. Sebagai contoh, 12.59 dicetak 100 tempat perpuluhan, yang memberikan anda 12,5899, dan sebagainya. Anda akan mendapat 12.58 jika anda dipenggal, tidak 12.59, seperti yang anda perlukan. Sebaliknya, ia adalah yang terbaik untuk pusingan nombor pertama. Nasib baik, C datang dengan fungsi dipanggil Round. Ada dalam perpustakaan matematik. Jika anda ingin tahu bagaimana untuk menggunakan Bulat, maka anda boleh membawa manual atau halaman lelaki untuk fungsi itu. Anda boleh melakukan ini dengan menaip lelaki, pendek untuk manual, dan kemudian fungsi yang anda mahu mencari. Jadi menaip pusingan lelaki ke dalam pangkalan baris arahan akan membawa pengguna. Ia mungkin sedikit sukar untuk mentafsirkan, tetapi akhirnya anda akan memahamkan ia. Laman Man menunjukkan kepada anda apa fungsi tidak, dan kemudian beberapa kegunaan mungkin daripadanya. Saya akan meninggalkan anda untuk menerokai halaman lelaki itu untuk pusingan kedua. Tetapi tahu bahawa anda boleh menggunakannya untuk pusingan nilai semasa penukaran anda dari dolar untuk sen. Round akan memberikan anda kembali sejumlah jenis data berganda. Dan anda boleh menukar atau dibuang ia kepada int selepas itu. Besar. Sekarang kami telah mendorong pengguna untuk jumlah yang kewangan, dan ditukar ke sen. Sekarang kita boleh melaksanakan algoritma yang selalu menggunakan syiling tersedia yang paling besar. Perlu diingat bahawa terdapat beberapa cara-cara untuk melaksanakan Tamak, seperti terdapat pelbagai cara untuk mendekati setiap masalah sains komputer. Mencari cara yang paling elegan, itulah bahagian yang menyeronokkan. Sepanjang ini p-set, jika program anda tidak betul-betul sepadan saya penjelasan dalam walkthroughs, itulah OK. Tetapi memastikan bahawa ia berlalu memeriksa 50, memenuhi semua keperluan membentuk spesifikasi, dan bahawa anda mempertimbangkan sama ada anda pendekatan mempunyai reka bentuk yang baik. Dalam erti kata lain, bagaimana cekap ia? Sebagai contoh, adakah anda taip berulang-ulang garis kod, daripada menggunakan gelung? Menulis kod dengan reka bentuk yang lebih baik akan datang pengalaman sebagai anda kemajuan melalui kursus. Untuk ini berjalan melalui, saya akan pergi ke dua kaedah yang boleh digunakan untuk melengkapkan Tamak. Kaedah pertama adalah kaedah menggunakan gelung dan penolakan. Sebelum itu, apabila kita bercakap melalui Proses tamak, kami terus diperiksa sama ada kita boleh menggunakan suku, dan digunakan suku sehingga nilai baki adalah kurang daripada $ 0.25. Ini diterjemahkan juga kepada manakala struktur gelung. Sementara kita masih boleh menggunakan suku, menggunakan salah satu. Yang gelung sementara hendaklah melaksanakan selagi sebagai nilai baki adalah lebih besar daripada atau sama dengan nilai peratus suku ini. Ini bermakna bahawa anda juga akan mahu menjejaki tunai baki nilai, dan mengemaskinikannya setiap masa yang anda menggunakan duit syiling. Juga ingat bahawa pada akhirnya, anda keluaran ialah jumlah duit syiling yang digunakan. Jadi satu lagi perkara untuk mengesan adalah jumlah duit syiling yang anda gunakan. Anda boleh menjejaki ini menggunakan baik dinamakan pembolehubah. Dan di dalam tubuh gelung anda akan menjadi kemas kini pemboleh ubah. Apabila gelung untuk suku selesai, anda boleh menggunakan salah satu yang sama untuk dimes, dan sebagainya dan sebagainya, sehingga anda telah kembali semua tunai. Saya telah menulis beberapa pseudo-kod di sini untuk membantu anda menggambarkan betapa yang proses kami membincangkan mungkin diterjemahkan kepada C. Seperti yang anda lihat di sini, saya masih menggunakan Perkataan Bahasa Inggeris. Ia bukan C yet. Tetapi saya mula perkara inden. Saya meletakkan syarat di dalam kurungan saya. Ia mula kelihatan sedikit sedikit seperti kod pengaturcaraan. Pseudo-kod adalah cara yang baik untuk mendapatkan diri anda bermula. Bayangkan kod anda sebelum anda mencari sintaksis. Kerana sering bahagian yang paling sukar tentang masalah adalah benar-benar memahami apa yang sebenarnya anda perlu lakukan. Sebaik sahaja anda menulis bahawa ke bawah, maka ia adalah satu banyak lebih mudah untuk mencari fungsi dan sintaks tertentu untuk anda garis pseudo-kod Perlu diingat bahawa ini mungkin tidak sama dengan jenis rangka kod anda yang anda menulis. Selalu ada pengoptimuman dibuat. Dan terutama dalam pseudo-kod saya di sini, lihat jika anda boleh melihat ia. Tetapi pada dasarnya proses dan cara pemikiran hanya seperti yang kita dibincangkan. Baris pertama memberitahu kita untuk mendapatkan jumlah tertentu dalam dolar. Dan yang kedua memberitahu kita untuk menukarkan kepada sen. Dan kemudian, manakala kuarters boleh digunakan, kita mahu meningkatkan jumlah syiling dan mengurangkan jumlah tunai. Begitu juga dimes, Nickels, dan beberapa sen. Dan akhirnya, kami memberitahu pengguna berapa banyak duit syiling yang kita digunakan. Besar. Supaya menyimpulkan kaedah gelung. Sekarang mari kita bercakap tentang kaedah modular, yang lebih seperti bahagian. Kita semua biasa dengan campur, tolak, membiak dan membahagi pengendali ada pada kita. C mempunyai semua empat daripada mereka, tetapi juga mempunyai operator modulo itu, yang diwakili oleh peratus tanda. Modulo adalah benar-benar kemas. Ia memberikan selebihnya dari membahagikan dua nombor. Ingat pesan bahagian panjang apabila anda membahagikan, katakan, 74 dengan tiga? Bermula dengan tempat puluhan, anda akan tahu bahawa 3 masuk ke dalam tujuh dua kali untuk membuat enam dengan satu baki. Anda akan menulis dua di bahagian atas, dan kemudian tolakkan 6 daripada tujuh, membawa lebih baki 14 untuk mengulangi proses tersebut. Tiga masuk ke dalam 14 sebanyak empat kali untuk membuat 12, dengan baki dua. Dan dua tidak membawa lebih lagi. Jadi dua akan ditinggalkan di bawah seperti bakinya. Dan itulah yang memberikan modulo, anda nombor yang di bahagian bawah. Jadi 74 modulo tiga akan memberikan dua. Dan 10 modulo dua, baik yang akan memberi anda sifar. Oleh kerana tidak ada apa-apa bakinya apabila anda membahagikan 10 dengan dua. Enam modulo lima, baik lima masuk ke dalam enam sekali. Dan itu ia telah salah satu yang ditinggalkan. Jadi enam modulo lima adalah satu. Kemudian jika anda mempunyai tujuh modulo sembilan, anda akan mendapat tujuh. Kerana sembilan adalah lebih besar daripada tujuh. Jadi ia tidak membahagikan semua ke tujuh, meninggalkan tujuh sebagai jawapan anda. Jika anda berfikir tentang modulo lebih sedikit, ingat bahawa ia memberi anda selebihnya selepas anda membahagikan sesuatu. Fikirkan tentang bagaimana anda mungkin dapat menggunakannya dalam Tamak. Katakan pengguna meminta $ 400,11. Apakah cara untuk memikirkan bagaimana banyak pihak anda perlukan tanpa perlu mengira setiap satu? Sebaik sahaja anda memikirkan bagaimana banyak pihak anda boleh gunakan untuk membuat $ 400,11, berapa banyak menukar mayat? Mungkin gabungan di sini antara modulo dan pembahagian akan datang dalam berguna untuk memberikan anda yang sejuk, elegan mendekati kepada masalah ini Tamak. Tetapi ingat bahawa pentadbiran yang peraturan masih terpakai. Sentiasa gunakan duit syiling mungkin terbesar. Sebaik sahaja anda telah melakukan pengiraan bagaimana banyak duit syiling untuk digunakan, langkah terakhir adalah untuk mencetak bilangan syiling yang anda dikira. Setakat ini, kami telah menggunakan printf yang berfungsi semata-mata untuk tali. Tetapi apabila anda mahu untuk mencetak satu Dalam, atau sahaja apa-apa jenis data yang disimpan dalam pembolehubah, anda perlu menunjukkan yang menggunakan pemegang tempat yang. Di sini saya telah menyertakan beberapa tip bagaimana untuk mencetak nilai-nilai. Jika anda mempunyai integer, anda akan menulis tali anda menggunakan% d sebagai pemegang tempat. Selepas sebut harga penutup tanda, masukkan koma. Dan kemudian dimasukkan ke dalam integer yang akan mengambil tempat% d apabila dicetak. Jadi selepas memaparkan bilangan syiling yang digunakan, anda selesai dengan Tamak. Pastikan untuk memeriksa semua kes sudut, mengemas gaya anda sedikit, dan anda bersedia untuk mengemukakan. Pada akhir set masalah ini, anda akan menjadi lebih biasa dengan CS50 perkakas, terminal, dan gelung struktur dan pembolehubah dalam C. Anda baik dalam perjalanan anda. Keluk pembelajaran boleh kelihatan sukar. Jadi mengambil langkah demi langkah. Pastikan anda menulis kod pseudo- sebelum menyelam terlalu dalam ke dalam sintaks yang tidak dikenali. Buat senarai tugasan, dan memecah tugasan ke dalam yang lebih kecil, lebih tugas terkawal. Explore semua sumber CS50. Selain kuliah, rewatch ini berjalan melalui. Perhatikan bahagian. Lihat seluar pendek. Baca soalan rakan sekelas anda pada Bincangkan, dan hantar sendiri. Best nasib dengan p-set. Dan terima kasih kerana menonton. Ini adalah Tamak. [MUZIK Bermain]