1 00:00:00,000 --> 00:00:00,493 2 00:00:00,493 --> 00:00:09,860 >> [Bermain muzik] 3 00:00:09,860 --> 00:00:13,520 >> ZAMYLA CHAN: Adakah anda lebih menerima $ 10000000 sekarang atau menerima 4 00:00:13,520 --> 00:00:17,460 beberapa sen setiap hari dalam bulan ini, di mana setiap hari berikutnya, anda menerima 5 00:00:17,460 --> 00:00:21,280 dua kali ganda jumlah beberapa sen anda diterimanya sehari sebelum ini? 6 00:00:21,280 --> 00:00:24,010 Dalam beberapa sen, kita akan membuktikan mengapa anda perlu 7 00:00:24,010 --> 00:00:27,000 pastinya mengambil beberapa sen. 8 00:00:27,000 --> 00:00:29,130 Tugas anda adalah untuk menulis pennies.c-- 9 00:00:29,130 --> 00:00:33,330 satu program yang pertama meminta pengguna bagaimana beberapa hari terdapat dalam bulan dan 10 00:00:33,330 --> 00:00:38,780 kemudian bertanya berapa sen pengguna akan menerima pada hari pertama. 11 00:00:38,780 --> 00:00:41,780 Program ini maka harus mengira jumlah pengguna yang akan mempunyai 12 00:00:41,780 --> 00:00:46,530 terkumpul pada akhir bulan dan memaparkannya. 13 00:00:46,530 --> 00:00:49,670 >> Kami boleh memecahkan program ini sehingga ke dalam beberapa tugas. 14 00:00:49,670 --> 00:00:52,830 Kita perlu segera untuk pelbagai input pengguna - 15 00:00:52,830 --> 00:00:55,510 hari dan bulan, dan beberapa sen pada hari pertama. 16 00:00:55,510 --> 00:00:59,390 Kita perlu untuk mengesan berapa banyak wang pengguna mempunyai dan mengemaskini setiap 17 00:00:59,390 --> 00:01:03,060 hari, dua kali ganda jumlah beberapa sen yang mereka terima. 18 00:01:03,060 --> 00:01:06,710 Dan akhirnya, kita mencetak mereka jumlah akhir, dalam dolar. 19 00:01:06,710 --> 00:01:08,570 >> Mari kita input pengguna menangani pertama. 20 00:01:08,570 --> 00:01:11,560 Saya akan membuka apples.c, program pendek yang memperkatakan 21 00:01:11,560 --> 00:01:13,840 dengan input dan output. 22 00:01:13,840 --> 00:01:17,310 Di bahagian atas di sini, saya telah dimasukkan beberapa satu perpustakaan yang saya perlukan - 23 00:01:17,310 --> 00:01:20,450 Perpustakaan CS50 dan standard I / O perpustakaan. 24 00:01:20,450 --> 00:01:24,310 Saya mencetak segera menggunakan fungsi printf dari 25 00:01:24,310 --> 00:01:25,660 perpustakaan standard I / O. 26 00:01:25,660 --> 00:01:29,740 Tetapi sebenar menyebabkan pengguna yang berlaku di baris berikutnya dengan ini 27 00:01:29,740 --> 00:01:33,650 Fungsi GetInt di perpustakaan CS50. 28 00:01:33,650 --> 00:01:38,300 >> GetInt mendapat input daripada pengguna dan memastikan bahawa input adalah integer. 29 00:01:38,300 --> 00:01:45,160 Jadi saya menyimpan input pengguna ke dalam integer i, tolak 1 dari i, dan kemudian 30 00:01:45,160 --> 00:01:47,610 mencetak nilai baru jika i. 31 00:01:47,610 --> 00:01:53,050 Selepas menyusun apples.c menggunakan arahan "membuat epal," Saya mempunyai 32 00:01:53,050 --> 00:01:55,770 epal fail boleh laku. 33 00:01:55,770 --> 00:01:58,760 Berjalan itu, saya akan input 1. 34 00:01:58,760 --> 00:02:02,600 Program ini memberitahu saya bahawa Saya mempunyai 0 epal kiri. 35 00:02:02,600 --> 00:02:05,480 Dan sebagainya yang bekerja seperti yang diharapkan. 36 00:02:05,480 --> 00:02:09,740 >> Jadi mari kita menjalankan ini lagi dan input negatif 1. 37 00:02:09,740 --> 00:02:13,950 Sekarang, yang mempunyai jumlah yang negatif epal tidak benar-benar masuk akal, tetapi 38 00:02:13,950 --> 00:02:18,370 program menerima, kerana negatif 1, baik, ia adalah integer. 39 00:02:18,370 --> 00:02:22,740 Dan kini program atau raksasa di dalam program makan yang negatif 40 00:02:22,740 --> 00:02:26,250 epal, dan kini saya mempunyai negatif 2 epal. 41 00:02:26,250 --> 00:02:28,610 Hm, supaya satu pengajaran - 42 00:02:28,610 --> 00:02:32,965 walaupun fungsi GetInt dan fungsi yang berkaitan, seperti GetFlow atau 43 00:02:32,965 --> 00:02:38,100 GetString mendapat hak jenis data, anda perlu memastikan bahawa input membuat 44 00:02:38,100 --> 00:02:41,430 rasa untuk program anda. 45 00:02:41,430 --> 00:02:45,500 >> Dalam beberapa sen, ia tidak akan berbuat demikian dengan segera untuk integer, anda perlu membuat 46 00:02:45,500 --> 00:02:49,550 memastikan bahawa input pengguna integer yang masuk akal memandangkan konteks. 47 00:02:49,550 --> 00:02:55,690 Bulan hanya boleh mempunyai 28, 29, 30, atau 31 hari. 48 00:02:55,690 --> 00:02:59,160 Kami mahu terus menuntut integer yang sah. 49 00:02:59,160 --> 00:03:03,240 Jika mereka input luar integer kami batas yang diterima, kami akan meminta mereka 50 00:03:03,240 --> 00:03:07,190 lagi dan lagi, sehingga anda memberi kita integer yang sah. 51 00:03:07,190 --> 00:03:10,070 >> Ingat "ulangi sehingga" menghalang dalam Scratch? 52 00:03:10,070 --> 00:03:13,070 Anda boleh membuat binaan yang sama dalam C menggunakan "manakala" gelung 53 00:03:13,070 --> 00:03:14,830 atau "do-manakala" gelung. 54 00:03:14,830 --> 00:03:18,280 Struktur gelung sementara mempunyai keadaan yang mesti dipenuhi untuk 55 00:03:18,280 --> 00:03:20,160 badan gelung untuk melaksanakan. 56 00:03:20,160 --> 00:03:23,080 >> Ini perlu melihat sedikit sama, kerana keadaan ini adalah sama seperti 57 00:03:23,080 --> 00:03:25,970 Blok awal dengan sudut dan masuk ke dalam kurungan 58 00:03:25,970 --> 00:03:27,950 daripada "manakala" gelung. 59 00:03:27,950 --> 00:03:30,600 Jadi keadaan yang akan memeriksa sama ada integer adalah dalam 60 00:03:30,600 --> 00:03:32,680 batas-batas yang sesuai. 61 00:03:32,680 --> 00:03:36,620 Anda boleh segera menggunakan GetInt integer dan kemudian melaksanakan "manakala" anda 62 00:03:36,620 --> 00:03:41,030 gelung, mengulangi segera dan percetakan arahan, manakala input 63 00:03:41,030 --> 00:03:43,470 adalah tidak sah. 64 00:03:43,470 --> 00:03:47,610 >> Satu lagi cara untuk memastikan input pengguna yang betul adalah dengan menggunakan "do-manakala" gelung, 65 00:03:47,610 --> 00:03:50,400 yang sangat serupa dengan gelung Walaupun. 66 00:03:50,400 --> 00:03:54,950 The "do-manakala" gelung melaksanakan kod di dalam orang-orang yang badan dan kemudian cek 67 00:03:54,950 --> 00:03:57,150 sama ada keadaan itu dipenuhi atau tidak. 68 00:03:57,150 --> 00:04:00,590 Ini amat berguna untuk mendapatkan input pengguna, kerana anda tahu bahawa anda perlu 69 00:04:00,590 --> 00:04:02,980 untuk meminta mereka sekurang-kurangnya sekali. 70 00:04:02,980 --> 00:04:07,200 Jika keadaan ini tidak dipenuhi, program akan melaksanakan baris selepas 71 00:04:07,200 --> 00:04:08,530 anda "do-manakala" gelung. 72 00:04:08,530 --> 00:04:13,230 Jika keadaan itu dipenuhi walaupun, gelung akan mengulangi 73 00:04:13,230 --> 00:04:17,490 >> A "do-manakala" gelung untuk mengesahkan pengguna input akan melihat sesuatu seperti ini. 74 00:04:17,490 --> 00:04:24,530 Saya mengisytiharkan n ubah, GetInt, dan kemudian mengulangi sehingga n adalah sah. 75 00:04:24,530 --> 00:04:28,040 Dan proses ini, saya menjelaskan, telah menggunakan jenis integer-data yang 76 00:04:28,040 --> 00:04:29,820 anda akan digunakan untuk hari-hari bulan. 77 00:04:29,820 --> 00:04:33,560 Tetapi kita tahu bahawa jumlah beberapa sen akan tumpukan dengan cepat, jadi untuk 78 00:04:33,560 --> 00:04:39,160 menyimpan nombor yang lebih besar, menggunakan jenis data LongLong, tetapi ingat yang sama 79 00:04:39,160 --> 00:04:42,590 prinsip pengesahan terpakai. 80 00:04:42,590 --> 00:04:47,070 >> Awesome, jadi apabila kita mempunyai dua sah input daripada pengguna - 81 00:04:47,070 --> 00:04:49,530 hari dalam bulan dan beberapa sen pada hari pertama - 82 00:04:49,530 --> 00:04:52,870 kita boleh bergerak ke depan sebahagian daripada program ini. 83 00:04:52,870 --> 00:04:56,680 Pada hari pertama, pengguna bermula dengan namun banyak beberapa sen mereka dinyatakan 84 00:04:56,680 --> 00:05:00,370 dan jumlah sen yang mereka menerima pada hari berikutnya adalah dua kali ganda. 85 00:05:00,370 --> 00:05:03,130 Jadi masuk akal untuk mengesan kedua-dua jumlah - 86 00:05:03,130 --> 00:05:08,890 berapa banyak wang yang pengguna mempunyai dan bagaimana banyak beberapa sen mereka akan diberikan. 87 00:05:08,890 --> 00:05:13,760 >> Sekarang, melakukan sesuatu untuk 28 hingga 31 hari berulang-ulang, jadi mari kita menggunakan "untuk" 88 00:05:13,760 --> 00:05:18,220 gelung untuk melelar sepanjang hari dalam bulan, mengemaskini jumlah dan sen 89 00:05:18,220 --> 00:05:21,010 berjumlah setiap masa. 90 00:05:21,010 --> 00:05:23,550 "Untuk" sintaks gelung mengandungi berikut - 91 00:05:23,550 --> 00:05:27,510 satu pengawalan, keadaan, dan kemas kini. 92 00:05:27,510 --> 00:05:29,590 "Untuk" anda gelung akan memulakan berubah-ubah, apabila ia 93 00:05:29,590 --> 00:05:31,380 pertama memasuki gelung. 94 00:05:31,380 --> 00:05:34,860 Jika keadaan itu dipenuhi, badan gelung akan melaksanakan. 95 00:05:34,860 --> 00:05:36,860 Selepas itu, kemas kini akan melaksanakan. 96 00:05:36,860 --> 00:05:40,900 Jika keadaan ini masih dipenuhi, gelung akan melaksanakan dan mengemas kini, dan 97 00:05:40,900 --> 00:05:45,820 ulangi, selagi keadaan anda dinilai sebagai benar. 98 00:05:45,820 --> 00:05:51,080 >> Berikut adalah gelung "untuk" yang membahagikan satu integer p oleh 2 sebanyak 10 kali. 99 00:05:51,080 --> 00:05:55,380 Perhatikan bagaimana saya mengisytiharkan p integer luar "untuk" gelung saya, supaya 100 00:05:55,380 --> 00:05:59,850 integer boleh diakses luar "untuk" gelung. 101 00:05:59,850 --> 00:06:03,620 Selepas bulan telah berlalu, sudah tiba masanya untuk memberitahu pengguna berapa banyak wang 102 00:06:03,620 --> 00:06:04,790 mereka telah mendapat. 103 00:06:04,790 --> 00:06:08,740 Per spec, anda perlu untuk memberitahu pengguna berapa banyak dolar, tidak berapa ramai 104 00:06:08,740 --> 00:06:10,780 beberapa sen, mereka. 105 00:06:10,780 --> 00:06:14,620 Tetapi setakat ini, anda telah disimpan maklumat tentang jumlah dan beberapa sen menggunakan LongLongs, 106 00:06:14,620 --> 00:06:16,640 yang nombor bulat. 107 00:06:16,640 --> 00:06:20,560 >> Terdapat 100 sen kepada $ 1, demikian melainkan jika bilangan sen adalah 108 00:06:20,560 --> 00:06:24,860 dibahagikan dengan 100, anda perlu mewakili tempat perpuluhan. 109 00:06:24,860 --> 00:06:28,060 The autotype dua kali ganda membolehkan anda untuk melakukan ini. 110 00:06:28,060 --> 00:06:32,790 Jadi bagaimana kita menukar daripada mewakili beberapa sen kepada dolar? 111 00:06:32,790 --> 00:06:35,330 >> Mari kita lihat satu pi.c. 112 00:06:35,330 --> 00:06:41,690 Program ini mengambil big_pi LongLong dan dibahagikan dengan 100,000, dan mencetak 113 00:06:41,690 --> 00:06:44,270 hasil hingga lima tempat perpuluhan. 114 00:06:44,270 --> 00:06:48,560 Jika kita mahu untuk memaparkan empat perpuluhan tempat, maka kita hanya boleh menggantikan ini 115 00:06:48,560 --> 00:06:49,760 beberapa di sini. 116 00:06:49,760 --> 00:06:58,370 Jadi mari kita menyimpan, menyusun pi, dan kemudian melihat hasilnya, yang kita 117 00:06:58,370 --> 00:07:02,240 menjangka akan 3,1415 - 118 00:07:02,240 --> 00:07:04,540 pertama lima digit pi. 119 00:07:04,540 --> 00:07:06,300 >> Ia tidak walaupun. 120 00:07:06,300 --> 00:07:07,390 Dan mengapa? 121 00:07:07,390 --> 00:07:11,920 Nah, kerana big_pi adalah LongLong a, yang merupakan nombor bulat, yang tidak akan 122 00:07:11,920 --> 00:07:13,740 menjejaki perpuluhan. 123 00:07:13,740 --> 00:07:16,850 Pengubahsuaian yang perlu saya membuat adalah di bahagian ini. 124 00:07:16,850 --> 00:07:23,300 Saya perlu dibuang ke dua di sini sebelum membahagikan, kerana beregu tidak boleh menyimpan 125 00:07:23,300 --> 00:07:25,260 menjejaki tempat perpuluhan. 126 00:07:25,260 --> 00:07:28,080 Dan saya akan menambah satu barisan baru di sini untuk format yang lebih baik. 127 00:07:28,080 --> 00:07:33,090 128 00:07:33,090 --> 00:07:34,230 >> Dan di sini kita ada - 129 00:07:34,230 --> 00:07:37,660 3,1416. 130 00:07:37,660 --> 00:07:43,520 Anda boleh melihat bahawa ia mencetak 3,1416 bukannya 3,1415 seperti yang diharapkan. 131 00:07:43,520 --> 00:07:47,550 Ini kerana ia pusingan semasa proses pembahagian, berbanding dengan hanya 132 00:07:47,550 --> 00:07:50,490 Memangkas nilai. 133 00:07:50,490 --> 00:07:53,710 Sekarang anda akan dapat untuk mencetak jumlah akhir dengan betul, yang selesai 134 00:07:53,710 --> 00:07:54,870 program ini. 135 00:07:54,870 --> 00:07:55,930 >> Tahniah. 136 00:07:55,930 --> 00:07:57,340 Nama saya Zamyla. 137 00:07:57,340 --> 00:07:58,720 Dan ini adalah beberapa sen. 138 00:07:58,720 --> 00:08:05,589 >> [Bermain muzik]