1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 ROB Bowden: Hi, saya Rob Bowden, dan mari kita bercakap tentang quiz0. 3 00:00:12,030 --> 00:00:13,280 4 00:00:13,280 --> 00:00:14,545 >> Jadi, soalan pertama. 5 00:00:14,545 --> 00:00:17,750 Ini isu yang mana Anda perlu memberi kod kepada bilangan 6 00:00:17,750 --> 00:00:21,270 127 dalam mentol binari. 7 00:00:21,270 --> 00:00:23,550 Jika anda mahu, anda boleh membuat penukaran biasa 8 00:00:23,550 --> 00:00:25,950 dari bi-- atau, daripada perpuluhan kepada binari. 9 00:00:25,950 --> 00:00:28,300 Tetapi itu mungkin akan untuk mengambil banyak masa. 10 00:00:28,300 --> 00:00:31,750 Maksud saya, anda dapat memikirkan itu, OK, 1 adalah di sana, 2 adalah di sana, 11 00:00:31,750 --> 00:00:33,650 4 adalah di sana, 8 adalah di sana. 12 00:00:33,650 --> 00:00:39,280 Cara yang lebih mudah, 127 adalah 128 kurang satu. 13 00:00:39,280 --> 00:00:42,013 Bahawa bola lampu paling kiri adalah 128-bit. 14 00:00:42,013 --> 00:00:43,490 15 00:00:43,490 --> 00:00:47,860 Jadi 127 adalah benar-benar hanya semua dari bola lampu yang lain, 16 00:00:47,860 --> 00:00:51,420 karena itulah yang paling kiri bola lampu tolak 1. 17 00:00:51,420 --> 00:00:52,800 Itu saja untuk soalan itu. 18 00:00:52,800 --> 00:00:54,060 >> Soalan satu. 19 00:00:54,060 --> 00:00:56,710 Jadi dengan 3 bit yang anda boleh 8 mewakili nilai-nilai yang berbeza. 20 00:00:56,710 --> 00:01:01,000 Mengapa, maka, adalah 7 bukan negatif terbesar integer desimal anda boleh mewakili? 21 00:01:01,000 --> 00:01:04,050 Nah, jika kita hanya boleh mewakili 8 nilai-nilai yang berbeza, 22 00:01:04,050 --> 00:01:07,430 maka apa yang kita akan berada mewakili 0 hingga 7. 23 00:01:07,430 --> 00:01:08,745 0 mengambil salah satu nilai. 24 00:01:08,745 --> 00:01:09,980 25 00:01:09,980 --> 00:01:11,190 >> Soalan dua. 26 00:01:11,190 --> 00:01:14,610 Dengan n bit, berapa banyak berbeza nilai-nilai yang boleh anda mewakili? 27 00:01:14,610 --> 00:01:19,080 Jadi, dengan n bit, anda mempunyai 2 nilai yang mungkin bagi setiap bit. 28 00:01:19,080 --> 00:01:22,300 Jadi kita mempunyai 2 nilai yang mungkin bagi bit pertama, 2 nilai yang mungkin 29 00:01:22,300 --> 00:01:24,450 untuk yang kedua, 2 mungkin bagi ketiga. 30 00:01:24,450 --> 00:01:28,730 Dan itulah 2 kali 2 kali 2, dan akhirnya jawapannya adalah 2 hingga n. 31 00:01:28,730 --> 00:01:30,010 32 00:01:30,010 --> 00:01:31,100 >> Pertanyaan ketiga. 33 00:01:31,100 --> 00:01:33,450 Apa yang 0x50 dalam binari? 34 00:01:33,450 --> 00:01:39,490 Jadi ingat bahawa perenambelasan mempunyai sangat penukaran mudah untuk binari. 35 00:01:39,490 --> 00:01:43,180 Jadi di sini, kita hanya perlu melihat 5 dan 0 secara bebas. 36 00:01:43,180 --> 00:01:45,110 Jadi apa 5 di binari? 37 00:01:45,110 --> 00:01:48,400 0101, itu bit 1 dan bit 4. 38 00:01:48,400 --> 00:01:49,900 Apa 0 dalam binari? 39 00:01:49,900 --> 00:01:50,520 Tidak rumit. 40 00:01:50,520 --> 00:01:52,180 0000. 41 00:01:52,180 --> 00:01:54,970 Jadi hanya meletakkan mereka bersama-sama, dan itu jumlah penuh dalam perduaan. 42 00:01:54,970 --> 00:01:57,640 01010000. 43 00:01:57,640 --> 00:02:00,439 Dan jika anda mahu anda boleh mengambil kira yang paling kiri nol. 44 00:02:00,439 --> 00:02:01,105 Itu tidak relevan. 45 00:02:01,105 --> 00:02:02,920 46 00:02:02,920 --> 00:02:05,733 >> Karena itu sebagai alternatif, apa yang 0x50 dalam perpuluhan? 47 00:02:05,733 --> 00:02:08,649 Jika anda mahu, anda could-- jika anda lebih selesa dengan biner, 48 00:02:08,649 --> 00:02:11,340 Anda boleh mengambil bahawa jawapan binari dan ditukar kepada perpuluhan. 49 00:02:11,340 --> 00:02:13,870 Atau kita hanya ingat perenambelasan itu. 50 00:02:13,870 --> 00:02:21,140 Sehingga 0 adalah di tempat ke-0-dan 5 adalah dalam 16 ke tempat pertama. 51 00:02:21,140 --> 00:02:25,990 Jadi di sini, kami mempunyai 5 kali 16 kepada pertama, ditambah 0 kali 16 kepada sifar, 52 00:02:25,990 --> 00:02:27,520 ialah 80. 53 00:02:27,520 --> 00:02:29,710 Dan jika anda melihat tajuk kepada soalan, 54 00:02:29,710 --> 00:02:32,920 itu CS 80, yang merupakan jenis yang petunjuk untuk jawapan kepada masalah ini. 55 00:02:32,920 --> 00:02:34,460 56 00:02:34,460 --> 00:02:35,420 >> Soalan lima. 57 00:02:35,420 --> 00:02:40,320 Kami mempunyai skrip Scratch ini, yang diulang 4 kali mentega kacang jeli. 58 00:02:40,320 --> 00:02:42,800 Jadi bagaimana kita sekarang kod yang di C? 59 00:02:42,800 --> 00:02:47,730 Nah, kita mempunyai di sini-bahagian dalam huruf tebal adalah satu-satunya bahagian anda harus dilaksanakan. 60 00:02:47,730 --> 00:02:51,950 Jadi kita mempunyai gelung 4 yang perulangan 4 kali, printf-ing selai kacang jeli, 61 00:02:51,950 --> 00:02:53,910 dengan baris baru sebagai masalah meminta. 62 00:02:53,910 --> 00:02:55,250 63 00:02:55,250 --> 00:02:57,490 >> Soalan enam, masalah Scratch lain. 64 00:02:57,490 --> 00:03:00,210 Kita lihat bahawa kita berada dalam gelung selama-lamanya. 65 00:03:00,210 --> 00:03:05,000 Kita katakan yang saya boleh ubah dan kemudian incrementing i oleh 1. 66 00:03:05,000 --> 00:03:09,580 Sekarang kita ingin melakukan itu di C. Ada pelbagai cara kita dapat melakukan semua ini. 67 00:03:09,580 --> 00:03:12,840 Di sini kita berlaku untuk kode selamanya gelung sebagai sementara (benar). 68 00:03:12,840 --> 00:03:16,600 Oleh itu, kita mengisytiharkan pembolehubah i, hanya seperti kita memiliki pembolehubah i dalam Scratch. 69 00:03:16,600 --> 00:03:21,950 Mengisytiharkan saya berubah-ubah, dan selama-lamanya sementara (benar), kita katakan pembolehubah i. 70 00:03:21,950 --> 00:03:25,260 Jadi printf% aku-- atau anda boleh telah digunakan% d. 71 00:03:25,260 --> 00:03:27,985 Kami berkata variabel itu, dan maka kenaikan itu, i ++. 72 00:03:27,985 --> 00:03:29,560 73 00:03:29,560 --> 00:03:30,830 >> Soalan tujuh. 74 00:03:30,830 --> 00:03:35,560 Sekarang kita ingin melakukan sesuatu yang sangat mirip kepada Mario dot c dari permasalahan yang satu. 75 00:03:35,560 --> 00:03:39,110 Kami ingin mencetak hashtags ini, kita ingin mencetak lima 76 00:03:39,110 --> 00:03:40,700 oleh tiga segi empat tepat hash ini. 77 00:03:40,700 --> 00:03:41,770 78 00:03:41,770 --> 00:03:43,162 Jadi bagaimana kita akan berbuat demikian? 79 00:03:43,162 --> 00:03:45,370 Nah, kami memberikan secara keseluruhan sekumpulan kod, dan anda hanya 80 00:03:45,370 --> 00:03:47,560 perlu mengisi fungsi grid cetak. 81 00:03:47,560 --> 00:03:49,540 >> Jadi, apa PrintGrid kelihatan seperti? 82 00:03:49,540 --> 00:03:51,480 Nah anda masa lalu lebar dan ketinggian. 83 00:03:51,480 --> 00:03:53,520 Jadi kita mempunyai satu luar 4 gelung, itu menggelung 84 00:03:53,520 --> 00:03:57,650 atas semua baris ini grid yang kita ingin mencetak. 85 00:03:57,650 --> 00:04:01,250 Kemudian kami mempunyai 4 gelung antara bersarang, itu mencetak pada setiap lajur. 86 00:04:01,250 --> 00:04:06,210 Jadi bagi setiap baris, kami cetak untuk setiap lajur, hash tunggal. 87 00:04:06,210 --> 00:04:10,045 Kemudian pada akhir baris kami mencetak baris baru tunggal untuk pergi ke barisan seterusnya. 88 00:04:10,045 --> 00:04:11,420 Dan itu sahaja untuk seluruh grid. 89 00:04:11,420 --> 00:04:12,810 90 00:04:12,810 --> 00:04:13,675 >> Soalan lapan. 91 00:04:13,675 --> 00:04:17,170 Fungsi seperti PrintGrid dikatakan mempunyai kesan sampingan, tetapi tidak kembali 92 00:04:17,170 --> 00:04:17,670 nilai. 93 00:04:17,670 --> 00:04:19,209 Terangkan perbezaan tersebut. 94 00:04:19,209 --> 00:04:23,080 Jadi, ini bergantung kepada anda mengingat apa kesan sampingan adalah. 95 00:04:23,080 --> 00:04:25,180 Nah, pulangan yang value-- kita tahu PrintGrid tidak 96 00:04:25,180 --> 00:04:28,180 mempunyai nilai kembali, sejak di sini dikatakan tidak sah. 97 00:04:28,180 --> 00:04:31,150 Jadi apa pun yang mengembalikan sah tidak benar-benar kembali apa-apa. 98 00:04:31,150 --> 00:04:32,200 99 00:04:32,200 --> 00:04:33,620 Jadi apa kesan sampingan? 100 00:04:33,620 --> 00:04:36,620 Nah, kesan sampingan adalah apa-apa yang semacam berterusan 101 00:04:36,620 --> 00:04:39,500 selepas hujung fungsi itu bukan saja kembali, 102 00:04:39,500 --> 00:04:41,340 dan ia bukan hanya dari input. 103 00:04:41,340 --> 00:04:44,970 >> Jadi, sebagai contoh, kita mungkin mengubah pembolehubah global. 104 00:04:44,970 --> 00:04:46,590 Itu akan menjadi kesan sampingan. 105 00:04:46,590 --> 00:04:49,000 Dalam kes ini, sebuah kesan sampingan yang sangat penting 106 00:04:49,000 --> 00:04:51,070 sedang mencetak ke layar. 107 00:04:51,070 --> 00:04:53,110 Jadi itu adalah kesan sampingan PrintGrid yang mempunyai. 108 00:04:53,110 --> 00:04:54,980 Kami mencetak perkara-perkara ini ke layar. 109 00:04:54,980 --> 00:04:56,370 Dan yang boleh anda fikirkan bahawa sebagai kesan sampingan, 110 00:04:56,370 --> 00:04:58,690 sejak itu sesuatu yang berterusan selepas majlis ini berakhir. 111 00:04:58,690 --> 00:05:01,481 Itu sesuatu yang di luar skop fungsi ini yang pada akhirnya 112 00:05:01,481 --> 00:05:03,380 sedang berubah, kandungan skrin. 113 00:05:03,380 --> 00:05:05,200 114 00:05:05,200 --> 00:05:05,839 >> Soalan sembilan. 115 00:05:05,839 --> 00:05:07,880 Pertimbangkan program di bawah, yang nombor baris 116 00:05:07,880 --> 00:05:09,740 telah ditambah untuk demi perbincangan. 117 00:05:09,740 --> 00:05:13,480 Jadi dalam program ini kita hanya memanggil GetString, menyimpannya 118 00:05:13,480 --> 00:05:16,220 dalam s berubah-ubah, dan kemudian percetakan yang berubah-ubah ini. 119 00:05:16,220 --> 00:05:16,720 OK. 120 00:05:16,720 --> 00:05:19,090 Jadi menjelaskan mengapa talian ada yang hadir. 121 00:05:19,090 --> 00:05:20,920 #include CS50 dot h. 122 00:05:20,920 --> 00:05:23,820 Mengapa kita perlu #include CS50 dot h? 123 00:05:23,820 --> 00:05:26,180 Nah, kita panggil GetString fungsi, 124 00:05:26,180 --> 00:05:28,840 dan GetString ditakrifkan di perpustakaan CS50 ini. 125 00:05:28,840 --> 00:05:31,600 Jadi, jika kita tidak mempunyai #include CS50 titik h, 126 00:05:31,600 --> 00:05:35,760 kita akan mendapatkan bahwa pernyataan tersirat dari kesalahan fungsi GetString 127 00:05:35,760 --> 00:05:36,840 dari compiler. 128 00:05:36,840 --> 00:05:40,110 Oleh itu, kita perlu menyertakan library-- yang kita perlu menyertakan fail header, 129 00:05:40,110 --> 00:05:42,870 atau compiler tidak akan menyedari bahawa GetString ada. 130 00:05:42,870 --> 00:05:44,380 131 00:05:44,380 --> 00:05:46,140 >> Terangkan mengapa garis dua hadir. 132 00:05:46,140 --> 00:05:47,890 Jadi standar dot h io. 133 00:05:47,890 --> 00:05:50,430 Ini betul-betul sama sebagai masalah yang lalu, 134 00:05:50,430 --> 00:05:53,310 kecuali bukan berurusan dengan GetString, kita berbicara tentang printf. 135 00:05:53,310 --> 00:05:56,654 Jadi, jika kita tidak mengatakan kita perlu untuk memasukkan standard io titik h, 136 00:05:56,654 --> 00:05:58,820 maka kita tidak akan dapat untuk menggunakan fungsi printf, 137 00:05:58,820 --> 00:06:00,653 kerana pengkompil tidak akan tahu mengenainya. 138 00:06:00,653 --> 00:06:01,750 139 00:06:01,750 --> 00:06:05,260 >> Why-- apa signifikansinya dari membatalkan selaras empat? 140 00:06:05,260 --> 00:06:08,010 Jadi di sini kita mempunyai int main (void). 141 00:06:08,010 --> 00:06:10,600 Itu hanya mengatakan bahawa kita tidak mendapat sebarang baris perintah 142 00:06:10,600 --> 00:06:12,280 argumen untuk utama. 143 00:06:12,280 --> 00:06:17,390 Ingatlah bahawa kita boleh mengatakan int int argc kurungan tali argv utama. 144 00:06:17,390 --> 00:06:20,400 Jadi di sini kita hanya mengatakan tidak sah untuk mengatakan bahawa kita mengabaikan argumen baris perintah. 145 00:06:20,400 --> 00:06:21,840 146 00:06:21,840 --> 00:06:25,225 >> Menjelaskan, sehubungan dengan ingatan, betul-betul apa GetString sejajar enam pulangan. 147 00:06:25,225 --> 00:06:27,040 148 00:06:27,040 --> 00:06:31,640 GetString kembali blok memori, pelbagai karakter. 149 00:06:31,640 --> 00:06:34,870 Ia benar-benar mengembalikan pointer dengan watak yang pertama. 150 00:06:34,870 --> 00:06:37,170 Ingatlah bahawa string adalah bintang arang. 151 00:06:37,170 --> 00:06:41,360 Jadi adalah pointer ke pertama watak dalam apa jua string adalah 152 00:06:41,360 --> 00:06:43,510 untuk setiap pengguna yang dimasukkan pada papan kekunci. 153 00:06:43,510 --> 00:06:47,070 Dan memori yang kebetulan malloced, sehingga memori yang ada di tumpukan. 154 00:06:47,070 --> 00:06:49,080 155 00:06:49,080 --> 00:06:50,450 >> Soalan 13. 156 00:06:50,450 --> 00:06:51,960 Pertimbangkan program di bawah. 157 00:06:51,960 --> 00:06:55,579 Jadi semua program ini adalah melakukan adalah printf-ing 1 dibahagikan dengan 10. 158 00:06:55,579 --> 00:06:57,370 Oleh itu, apabila dikumpulkan dan dilaksanakan, program ini 159 00:06:57,370 --> 00:07:01,170 output 0,0, walaupun 1 dibahagikan dengan 10 adalah 0.1. 160 00:07:01,170 --> 00:07:02,970 Jadi mengapa 0.0? 161 00:07:02,970 --> 00:07:05,510 Nah, ini adalah kerana bahagian integer. 162 00:07:05,510 --> 00:07:08,580 Jadi 1 adalah integer, 10 adalah integer. 163 00:07:08,580 --> 00:07:11,980 Jadi 1 dibahagikan dengan 10, segala-galanya diperlakukan sebagai bilangan bulat, 164 00:07:11,980 --> 00:07:16,380 dan C, apabila kita melakukan pembagian bilangan bulat, kita memotong mana-mana titik perpuluhan. 165 00:07:16,380 --> 00:07:19,590 Jadi 1 dibahagikan dengan 10 adalah 0, dan kemudian kita cuba 166 00:07:19,590 --> 00:07:24,410 untuk mencetak sebagai pelampung, jadi sifar dicetak sebagai pelampung adalah 0.0. 167 00:07:24,410 --> 00:07:27,400 Dan sebab itulah kita akan mendapat 0.0. 168 00:07:27,400 --> 00:07:28,940 >> Pertimbangkan program di bawah. 169 00:07:28,940 --> 00:07:31,280 Sekarang kami sedang mencetak 0.1. 170 00:07:31,280 --> 00:07:34,280 Jadi tidak ada pembagian bilangan bulat, kami hanya mencetak 0.1, 171 00:07:34,280 --> 00:07:37,100 tapi kami mencetaknya hingga 28 tempat perpuluhan. 172 00:07:37,100 --> 00:07:41,810 Dan kami mendapatkan ini 0,1000, sejumlah besar sifar, 5 5 5, bla bla bla. 173 00:07:41,810 --> 00:07:45,495 Jadi soalan di sini adalah mengapa ia mencetak, bukannya betul-betul 0.1? 174 00:07:45,495 --> 00:07:46,620 175 00:07:46,620 --> 00:07:49,640 >> Jadi sebab itu di sini kini floating point ketidaktepatan. 176 00:07:49,640 --> 00:07:53,410 Ingatlah bahawa apungan hanya 32 bit. 177 00:07:53,410 --> 00:07:57,540 Oleh itu kita hanya boleh mewakili jumlah terbatas terapung mata yang dengan mereka 32 178 00:07:57,540 --> 00:07:58,560 bit. 179 00:07:58,560 --> 00:08:01,760 Yah ada akhirnya tak terhingga banyak mata yang terapung, 180 00:08:01,760 --> 00:08:04,940 dan ada tak terhingga banyaknya terapung mata yang di antara 0 dan 1, 181 00:08:04,940 --> 00:08:07,860 dan kami jelas dapat mewakili nilai-nilai yang lebih dari itu. 182 00:08:07,860 --> 00:08:13,230 Oleh itu, kita harus berkorban untuk dapat mewakili kebanyakan nilai-nilai. 183 00:08:13,230 --> 00:08:16,960 >> Jadi nilai seperti 0.1, nampaknya kita tidak boleh menyatakan bahawa tepat. 184 00:08:16,960 --> 00:08:22,500 Jadi, daripada mewakili 0.1 kita melakukan terbaik yang dapat mewakili ini 0.100000 5 5 185 00:08:22,500 --> 00:08:23,260 5. 186 00:08:23,260 --> 00:08:26,306 Dan itu cukup dekat, tetapi untuk banyak aplikasi 187 00:08:26,306 --> 00:08:28,430 Anda perlu bimbang tentang floating point ketidaktepatan, 188 00:08:28,430 --> 00:08:30,930 kerana kita tidak boleh mewakili semua titik terapung dengan tepat. 189 00:08:30,930 --> 00:08:32,500 190 00:08:32,500 --> 00:08:33,380 >> Soalan 15. 191 00:08:33,380 --> 00:08:34,679 Pertimbangkan kod di bawah. 192 00:08:34,679 --> 00:08:36,630 Kami hanya mencetak 1 ditambah 1. 193 00:08:36,630 --> 00:08:38,289 Jadi tidak ada trik di sini. 194 00:08:38,289 --> 00:08:41,780 1 campur 1 bernilai 2, dan kemudian kami mencetak itu. 195 00:08:41,780 --> 00:08:42,789 Ini hanya print 2. 196 00:08:42,789 --> 00:08:43,850 197 00:08:43,850 --> 00:08:44,700 >> Soalan 16. 198 00:08:44,700 --> 00:08:49,450 Sekarang kami sedang mencetak watak 1 ditambah karakter 1. 199 00:08:49,450 --> 00:08:52,110 Jadi mengapa ini tidak mencetak perkara yang sama? 200 00:08:52,110 --> 00:08:57,680 Nah karakter 1 ditambah watak 1, karakter 1 mempunyai nilai ASCII 49. 201 00:08:57,680 --> 00:09:04,840 Jadi, ini benar-benar mengatakan 49 ditambah 49 tahun, dan akhirnya ini akan mencetak 98. 202 00:09:04,840 --> 00:09:06,130 Jadi ini tidak mencetak 2. 203 00:09:06,130 --> 00:09:08,070 204 00:09:08,070 --> 00:09:09,271 >> Soalan 17. 205 00:09:09,271 --> 00:09:11,520 Menyelesaikan pelaksanaan aneh di bawah ini dalam apa-apa cara 206 00:09:11,520 --> 00:09:14,615 bahawa fungsi mengembalikan berlaku jika n adalah ganjil dan palsu jika n genap. 207 00:09:14,615 --> 00:09:16,710 208 00:09:16,710 --> 00:09:19,330 Ini adalah tujuan yang besar bagi operator mod. 209 00:09:19,330 --> 00:09:24,530 Oleh itu, kita mengambil hujah kita n, jika n mod 2 sama dengan 1, dan 210 00:09:24,530 --> 00:09:28,030 yang bermakna n dibahagikan sebanyak 2 mempunyai sisa a. 211 00:09:28,030 --> 00:09:33,270 Jika n dibagi 2 mempunyai sisa, yang bermakna n adalah ganjil, jadi kami kembali benar. 212 00:09:33,270 --> 00:09:34,910 Yang lain kita kembali palsu. 213 00:09:34,910 --> 00:09:39,070 Anda juga boleh melakukan n mod 2 sama dengan sifar, pulangan palsu, yang lain kembali benar. 214 00:09:39,070 --> 00:09:41,600 215 00:09:41,600 --> 00:09:43,640 >> Pertimbangkan fungsi rekursif di bawah. 216 00:09:43,640 --> 00:09:46,920 Jadi, jika n adalah kurang atau sama dengan 1, kembali 1, 217 00:09:46,920 --> 00:09:50,430 lain kembali n kali f n tolak 1. 218 00:09:50,430 --> 00:09:52,556 Jadi apa fungsi ini? 219 00:09:52,556 --> 00:09:54,305 Nah, ini hanya fungsi faktorial. 220 00:09:54,305 --> 00:09:55,410 221 00:09:55,410 --> 00:09:57,405 Ini baik diwakili n faktorial. 222 00:09:57,405 --> 00:09:58,720 223 00:09:58,720 --> 00:10:02,310 >> Maka bertanyalah 19 sekarang, kita mahu mengambil fungsi rekursif ini. 224 00:10:02,310 --> 00:10:04,530 Kami mahu menjadikan ia berulang. 225 00:10:04,530 --> 00:10:05,874 Jadi bagaimana kita melakukannya? 226 00:10:05,874 --> 00:10:07,790 Nah untuk kakitangan penyelesaian, dan sekali lagi ada 227 00:10:07,790 --> 00:10:11,090 beberapa cara yang boleh dilakukan itu, kami bermula dengan produk ini int 228 00:10:11,090 --> 00:10:11,812 sama dengan 1. 229 00:10:11,812 --> 00:10:13,520 Dan sepanjang ini untuk loop, kita akan 230 00:10:13,520 --> 00:10:17,590 yang akan mengalikan produk ke akhirnya berakhir dengan faktorial penuh. 231 00:10:17,590 --> 00:10:21,870 Jadi untuk int i sama dengan 2, saya adalah kurang daripada atau sama dengan n, i ++. 232 00:10:21,870 --> 00:10:24,130 >> Anda mungkin tertanya-tanya mengapa saya sama dengan 2. 233 00:10:24,130 --> 00:10:28,380 Nah, ingatlah bahawa di sini kita harus memastikan kes asas kami adalah betul. 234 00:10:28,380 --> 00:10:32,180 Jadi, jika n adalah kurang daripada atau sama 1, kami hanya kembali 1. 235 00:10:32,180 --> 00:10:34,830 Jadi di sini, kita mula di i bersamaan 2. 236 00:10:34,830 --> 00:10:39,090 Nah jika saya adalah 1, maka the-- atau jika n ialah 1, maka bagi gelung 237 00:10:39,090 --> 00:10:40,600 tidak akan melaksanakan sama sekali. 238 00:10:40,600 --> 00:10:43,190 Dan dengan itu kita akan hanya produk kembali, yang adalah 1. 239 00:10:43,190 --> 00:10:45,920 Begitu juga, jika n ialah sesuatu yang kurang dari 1-- 240 00:10:45,920 --> 00:10:49,290 olah ia adalah 0, 1 negatif, whatever-- kita masih akan kembali 1, 241 00:10:49,290 --> 00:10:52,260 yang betul-betul apa yang versi rekursif lakukan. 242 00:10:52,260 --> 00:10:54,660 >> Sekarang, jika n lebih besar dari 1, maka kami akan 243 00:10:54,660 --> 00:10:56,550 melakukan sekurang-kurangnya satu lelaran gelung ini. 244 00:10:56,550 --> 00:11:00,630 Jadi, bila n adalah 5, maka kita akan lakukan kali produk sama dengan 2. 245 00:11:00,630 --> 00:11:02,165 Jadi sekarang produk adalah 2. 246 00:11:02,165 --> 00:11:04,040 Sekarang kita akan melakukan kali produk sama dengan 3. 247 00:11:04,040 --> 00:11:04,690 Sekarang itu 6. 248 00:11:04,690 --> 00:11:07,500 Kali produk sama dengan 4, sekarang 24. 249 00:11:07,500 --> 00:11:10,420 Kali produk sama dengan 5, sekarang 120. 250 00:11:10,420 --> 00:11:16,730 Demikian maka akhirnya, kita kembali 120, yang betul 5 faktorial. 251 00:11:16,730 --> 00:11:17,510 >> Soalan 20. 252 00:11:17,510 --> 00:11:22,480 Ini adalah salah satu di mana anda perlu mengisi dalam jadual ini dengan mana-mana algoritma yang diberikan, 253 00:11:22,480 --> 00:11:25,735 apa-apa yang telah kita lihat, bahawa sesuai dengan ini jangka algoritma 254 00:11:25,735 --> 00:11:28,060 masa-masa jangka asimptot. 255 00:11:28,060 --> 00:11:33,270 Jadi apa algoritma yang adalah Omega 1, tetapi O besar n? 256 00:11:33,270 --> 00:11:35,970 Jadi tidak boleh menjadi tak terhingga banyak jawapan di sini. 257 00:11:35,970 --> 00:11:39,790 Salah satu yang kita telah melihat mungkin paling sering hanya carian linear. 258 00:11:39,790 --> 00:11:42,050 >> Jadi dalam kes ini, senario, item kami 259 00:11:42,050 --> 00:11:44,050 cari adalah di bermula dari senarai 260 00:11:44,050 --> 00:11:47,400 dan sebagainya omega dari 1 langkah, perkara pertama yang kami cek, 261 00:11:47,400 --> 00:11:49,740 kita hanya pulang segera yang kami mendapati barang tersebut. 262 00:11:49,740 --> 00:11:52,189 Dalam senario kes terburuk, item tersebut pada akhirnya, 263 00:11:52,189 --> 00:11:53,730 atau item yang tiada dalam senarai ini sama sekali. 264 00:11:53,730 --> 00:11:56,700 Oleh itu, kita perlu mencari keseluruhan senarai, semua n 265 00:11:56,700 --> 00:11:58,480 unsur-unsur, dan itulah sebabnya ia o n. 266 00:11:58,480 --> 00:11:59,670 267 00:11:59,670 --> 00:12:04,880 >> Jadi sekarang ia adalah sesuatu yang baik omega n log n, dan O besar n log n. 268 00:12:04,880 --> 00:12:08,650 Baik hal yang paling relevan yang telah kita lihat di sini adalah menggabungkan semacam. 269 00:12:08,650 --> 00:12:12,950 Jadi menggabungkan semacam, ingat, akhirnya saya beli 270 00:12:12,950 --> 00:12:16,920 n log n, di mana saya beli ditakrifkan jika kedua-dua omega dan O besar adalah sama. 271 00:12:16,920 --> 00:12:17,580 Kedua-dua n log n. 272 00:12:17,580 --> 00:12:18,690 273 00:12:18,690 --> 00:12:21,970 >> Apakah sesuatu yang omega n, dan O n kuasa dua? 274 00:12:21,970 --> 00:12:23,990 Nah, sekali lagi ada beberapa jawapan yang mungkin. 275 00:12:23,990 --> 00:12:26,440 Di sini kita berlaku untuk mengatakan semacam gelembung. 276 00:12:26,440 --> 00:12:28,840 Semacam Kemasukkan juga akan bekerja di sini. 277 00:12:28,840 --> 00:12:31,400 Ingatlah bahawa bubble sort mempunyai pengoptimuman bahawa jika, 278 00:12:31,400 --> 00:12:34,630 jika anda mampu untuk mendapatkan melalui seluruh senarai 279 00:12:34,630 --> 00:12:37,402 tanpa perlu melakukan apa-apa pertukaran, maka, baik, 280 00:12:37,402 --> 00:12:40,110 kita segera boleh kembali bahawa senarai itu disusun untuk memulakan. 281 00:12:40,110 --> 00:12:43,185 Jadi dalam kes senario yang terbaik, ia hanya omega n. 282 00:12:43,185 --> 00:12:45,960 Jika ia bukan hanya yang baik senarai bermula dengan disusun, 283 00:12:45,960 --> 00:12:48,270 maka kita harus O n kuasa dua swap. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 Dan akhirnya, kita mempunyai jenis pilihan untuk n kuasa dua, kedua-dua omega dan besar O. 286 00:12:55,610 --> 00:12:56,850 >> Soalan 21. 287 00:12:56,850 --> 00:12:58,870 Apa integer overflow? 288 00:12:58,870 --> 00:13:02,160 Baik lagi, sama seperti sebelum ini, kami hanya mempunyai finitely banyak bit 289 00:13:02,160 --> 00:13:04,255 untuk mewakili integer, jadi mungkin 32 bit. 290 00:13:04,255 --> 00:13:06,300 291 00:13:06,300 --> 00:13:09,180 Katakanlah kita mempunyai bilangan bulat yang ditandatangani. 292 00:13:09,180 --> 00:13:12,800 Kemudian akhirnya tertinggi angka positif kita dapat mewakili 293 00:13:12,800 --> 00:13:15,910 adalah 2 hingga 31 tolak 1. 294 00:13:15,910 --> 00:13:19,370 Jadi apa yang berlaku jika kita cuba kemudian kenaikan bilangan bulat itu? 295 00:13:19,370 --> 00:13:25,320 Nah, kita akan pergi dari 2 ke 31 tolak 1, semua jalan ke negatif 2 296 00:13:25,320 --> 00:13:26,490 kepada 31. 297 00:13:26,490 --> 00:13:29,470 Jadi limpahan integer ini apabila anda menyimpan incrementing, 298 00:13:29,470 --> 00:13:32,330 dan akhirnya anda tidak boleh mendapatkan apa-apa yang lebih tinggi dan ia hanya 299 00:13:32,330 --> 00:13:34,520 membungkus semua jalan kembali sekitar untuk nilai negatif. 300 00:13:34,520 --> 00:13:35,850 301 00:13:35,850 --> 00:13:37,779 >> Bagaimana dengan buffer overflow? 302 00:13:37,779 --> 00:13:39,820 Jadi penyangga overflow-- ingat apa penampan adalah. 303 00:13:39,820 --> 00:13:41,000 Ia hanya sepotong memori. 304 00:13:41,000 --> 00:13:43,350 Sesuatu seperti array adalah buffer. 305 00:13:43,350 --> 00:13:46,120 Jadi buffer overflow adalah ketika anda cuba untuk mengakses memori 306 00:13:46,120 --> 00:13:47,880 di luar akhir array. 307 00:13:47,880 --> 00:13:50,410 Jadi, jika anda mempunyai pelbagai saiz 5 dan Anda 308 00:13:50,410 --> 00:13:53,700 cuba untuk mengakses pelbagai kurungan 5 atau 6 atau pendakap pendakap 7, 309 00:13:53,700 --> 00:13:56,610 atau apa-apa di luar tamat, atau bahkan apa-apa 310 00:13:56,610 --> 00:14:00,790 pelbagai kurungan below-- negatif 1-- semua itu adalah limpahan penampan. 311 00:14:00,790 --> 00:14:02,810 Anda menyentuh memori dalam cara yang buruk. 312 00:14:02,810 --> 00:14:04,090 313 00:14:04,090 --> 00:14:04,730 >> Soalan 23. 314 00:14:04,730 --> 00:14:05,760 315 00:14:05,760 --> 00:14:09,100 Jadi, dalam satu ini anda perlu untuk melaksanakan strlen. 316 00:14:09,100 --> 00:14:11,630 Dan kita memberitahu anda bahawa anda boleh menganggap s tidak akan menjadi batal, 317 00:14:11,630 --> 00:14:13,790 jadi anda tidak perlu melakukan apa-apa cek batal. 318 00:14:13,790 --> 00:14:16,190 Dan ada beberapa cara Anda dapat melakukan semua ini. 319 00:14:16,190 --> 00:14:18,440 Di sini kita hanya mengambil mudah. 320 00:14:18,440 --> 00:14:21,780 Kita mulakan dengan counter, n. n adalah mengira bilangan aksara yang ada. 321 00:14:21,780 --> 00:14:25,560 Oleh itu, kita mulai pada 0, dan kemudian kita beralih di atas seluruh senarai. 322 00:14:25,560 --> 00:14:29,092 >> Adalah s kurungan 0 sama dengan terminator watak batal? 323 00:14:29,092 --> 00:14:31,425 Ingat yang kami cari watak terminator nol 324 00:14:31,425 --> 00:14:33,360 untuk menentukan berapa lama tali kita. 325 00:14:33,360 --> 00:14:35,890 Yang akan menamatkan apa-apa tali yang relevan. 326 00:14:35,890 --> 00:14:39,400 Jadi adalah s kurungan 0 sama untuk terminator nol? 327 00:14:39,400 --> 00:14:42,850 Jika tidak, maka kita akan melihat s kurungan 1, s kurungan 2. 328 00:14:42,850 --> 00:14:45,050 Kami tetap akan sampai kita mencari terminator nol. 329 00:14:45,050 --> 00:14:48,580 Sebaik sahaja kami telah menemukan itu, maka n mengandungi jumlah panjang tali, 330 00:14:48,580 --> 00:14:49,942 dan kami hanya dapat kembali itu. 331 00:14:49,942 --> 00:14:51,180 332 00:14:51,180 --> 00:14:51,865 >> Soalan 24. 333 00:14:51,865 --> 00:14:53,010 334 00:14:53,010 --> 00:14:56,050 Jadi, ini adalah salah satu di mana anda perlu membuat trade off. 335 00:14:56,050 --> 00:14:59,810 Jadi satu perkara yang baik dalam satu cara, tetapi dalam apa cara itu tidak baik? 336 00:14:59,810 --> 00:15:02,980 Jadi di sini, menggabungkan semacam cenderung lebih cepat daripada semacam gelembung. 337 00:15:02,980 --> 00:15:06,530 Setelah mengatakan bahawa- baik, ada adalah beberapa jawapan di sini. 338 00:15:06,530 --> 00:15:12,930 Tetapi yang utama ialah bubble sort adalah omega n untuk daftar diurutkan. 339 00:15:12,930 --> 00:15:14,950 >> Ingat bahawa jadual kita hanya lihat sebelum ini. 340 00:15:14,950 --> 00:15:17,600 Jadi gelembung macam omega dari n, senario kes terbaik 341 00:15:17,600 --> 00:15:20,010 adakah ia dapat hanya pergi daftar sekali, tentukan 342 00:15:20,010 --> 00:15:22,270 hey perkara ini sudah disusun, dan kembali. 343 00:15:22,270 --> 00:15:25,960 Menggabungkan semacam, tidak kira apa Anda lakukan, adalah omega n log n. 344 00:15:25,960 --> 00:15:29,200 Jadi untuk daftar diurutkan, gelembung semacam akan menjadi lebih cepat. 345 00:15:29,200 --> 00:15:30,870 346 00:15:30,870 --> 00:15:32,430 >> Sekarang bagaimana dikaitkan senarai? 347 00:15:32,430 --> 00:15:36,070 Jadi senarai berpaut boleh tumbuh dan menyusut sesuai sebagai banyak unsur yang diperlukan. 348 00:15:36,070 --> 00:15:38,489 Setelah berkata begitu bahawa- biasanya perbandingan langsung 349 00:15:38,489 --> 00:15:40,280 akan menjadi yang dikaitkan daftar dengan array. 350 00:15:40,280 --> 00:15:41,600 351 00:15:41,600 --> 00:15:44,050 Jadi walaupun array boleh mudah tumbuh dan menyusut 352 00:15:44,050 --> 00:15:47,130 sesuai sebagai banyak unsur seperti yang diperlukan, daftar link 353 00:15:47,130 --> 00:15:49,600 dibandingkan dengan sebuah array-- array mempunyai akses rawak. 354 00:15:49,600 --> 00:15:52,960 Kita boleh indeks ke mana-mana elemen tertentu dari array. 355 00:15:52,960 --> 00:15:56,430 >> Jadi untuk senarai yang disambungkan, kita tidak boleh hanya pergi ke elemen yang kelima, 356 00:15:56,430 --> 00:16:00,260 kita harus melintasi dari awal sehingga kita dapat unsur kelima. 357 00:16:00,260 --> 00:16:03,990 Dan itu akan menghalang kita daripada melakukan sesuatu seperti carian binari. 358 00:16:03,990 --> 00:16:08,150 Bercakap carian binari, carian binari cenderung lebih cepat daripada carian linear. 359 00:16:08,150 --> 00:16:11,120 Setelah mengatakan bahawa- begitu, satu perkara yang mungkin 360 00:16:11,120 --> 00:16:13,380 adalah bahawa anda tidak boleh melakukan binari mencari pada daftar terkait, 361 00:16:13,380 --> 00:16:14,730 Anda hanya boleh melakukannya pada array. 362 00:16:14,730 --> 00:16:18,030 Tetapi mungkin lebih penting lagi, Anda tidak dapat melakukan pencarian binari 363 00:16:18,030 --> 00:16:20,690 pada sebuah array yang tidak disusun. 364 00:16:20,690 --> 00:16:23,990 Pendahuluan Anda mungkin perlu menyusun array, dan hanya kemudian boleh 365 00:16:23,990 --> 00:16:25,370 Anda melakukan pencarian binari. 366 00:16:25,370 --> 00:16:27,660 Jadi, jika perkara yang anda tidak diurutkan untuk memulakan dengan, 367 00:16:27,660 --> 00:16:29,250 maka pencarian linear mungkin akan lebih cepat. 368 00:16:29,250 --> 00:16:30,620 369 00:16:30,620 --> 00:16:31,740 >> Soalan 27. 370 00:16:31,740 --> 00:16:34,770 Oleh itu fikirkanlah program di bawah, yang akan di slaid seterusnya. 371 00:16:34,770 --> 00:16:37,790 Dan ini adalah salah satu di mana kami akan ingin menyatakan dengan jelas 372 00:16:37,790 --> 00:16:39,980 nilai-nilai untuk pelbagai pembolehubah. 373 00:16:39,980 --> 00:16:41,990 Jadi mari kita lihat itu. 374 00:16:41,990 --> 00:16:43,160 >> Jadi garis satu. 375 00:16:43,160 --> 00:16:45,457 Kami mempunyai int x sama dengan 1. 376 00:16:45,457 --> 00:16:47,040 Itulah satu-satunya perkara yang terjadi. 377 00:16:47,040 --> 00:16:50,440 Jadi pada saluran satu, kita lihat pada kami meja, y, a, b, dan tmp semua 378 00:16:50,440 --> 00:16:51,540 pingsan. 379 00:16:51,540 --> 00:16:52,280 Jadi apa x? 380 00:16:52,280 --> 00:16:53,860 Baik kita hanya menetapkan sama dengan 1. 381 00:16:53,860 --> 00:16:55,020 382 00:16:55,020 --> 00:16:58,770 Dan kemudian garis dua, baik, kita melihat bahawa y ditetapkan pada 2, 383 00:16:58,770 --> 00:17:00,550 dan meja itu sudah diisi untuk kita. 384 00:17:00,550 --> 00:17:03,040 Jadi x adalah 1 dan y ialah 2. 385 00:17:03,040 --> 00:17:05,890 >> Sekarang, garis tiga, kita sekarang dalam fungsi swap. 386 00:17:05,890 --> 00:17:07,560 Apa yang kita lulus untuk menukar? 387 00:17:07,560 --> 00:17:11,609 Kami melewati ampersand x untuk dan ampersand y untuk b. 388 00:17:11,609 --> 00:17:15,160 Di mana masalah lebih awal menyatakan bahawa alamat x 389 00:17:15,160 --> 00:17:17,520 adalah 0x10, dan alamat y adalah 0x14. 390 00:17:17,520 --> 00:17:18,970 391 00:17:18,970 --> 00:17:21,909 Jadi a dan b adalah sama dengan 0x10 dan 0x14, masing-masing. 392 00:17:21,909 --> 00:17:23,670 393 00:17:23,670 --> 00:17:26,250 >> Di baris tiga, apakah x dan y? 394 00:17:26,250 --> 00:17:28,554 Nah, tidak ada yang berubah tentang x dan y pada titik ini. 395 00:17:28,554 --> 00:17:30,470 Walaupun mereka dalam bingkai tindanan utama, 396 00:17:30,470 --> 00:17:32,469 mereka masih mempunyai yang sama nilai-nilai yang mereka lakukan sebelum ini. 397 00:17:32,469 --> 00:17:34,030 Kami tidak diubah apa-apa memori. 398 00:17:34,030 --> 00:17:35,710 Jadi x 1, y ialah 2. 399 00:17:35,710 --> 00:17:36,550 400 00:17:36,550 --> 00:17:37,050 Baik. 401 00:17:37,050 --> 00:17:40,300 Jadi sekarang kita berkata tmp int sama untuk membintangi sebuah. 402 00:17:40,300 --> 00:17:44,410 Jadi pada garis empat, segala-galanya adalah sama kecuali tmp. 403 00:17:44,410 --> 00:17:47,130 Kami tidak mengubah apa-apa nilai-nilai apa-apa jua kecuali tmp. 404 00:17:47,130 --> 00:17:49,230 Kami sedang mengatur tmp sama untuk membintangi sebuah. 405 00:17:49,230 --> 00:17:50,620 Apa yang bintang? 406 00:17:50,620 --> 00:17:56,240 Nah, satu mata kepada x, Jadi bintang yang akan x sama, iaitu 1. 407 00:17:56,240 --> 00:18:00,080 Jadi semuanya disalin ke bawah, dan tmp diset ke 1. 408 00:18:00,080 --> 00:18:01,110 >> Sekarang baris berikutnya. 409 00:18:01,110 --> 00:18:03,380 Bintang yang sama dengan bintang b. 410 00:18:03,380 --> 00:18:10,000 Jadi dengan garis five-- baik lagi, segala-galanya adalah sama kecuali apa sahaja bintang adalah. 411 00:18:10,000 --> 00:18:10,830 Apa yang bintang? 412 00:18:10,830 --> 00:18:13,720 Nah, kita hanya mengatakan bintang adalah x. 413 00:18:13,720 --> 00:18:16,400 Oleh itu, kita sedang mengubah x untuk sama b bintang. 414 00:18:16,400 --> 00:18:18,960 Apa yang bintang b? y. b mata kepada y. 415 00:18:18,960 --> 00:18:21,030 Jadi bintang b ialah y. 416 00:18:21,030 --> 00:18:25,140 Oleh itu, kita sedang menyiapkan x sama dengan y, dan segala sesuatu yang lain adalah sama. 417 00:18:25,140 --> 00:18:29,130 Jadi kita lihat di barisan depan yang x kini 2, dan selebihnya hanya menyalin. 418 00:18:29,130 --> 00:18:31,120 >> Sekarang di baris berikutnya, bintang b sama dengan tmp. 419 00:18:31,120 --> 00:18:34,740 Nah, kita hanya mengatakan bintang b ialah y, jadi kami sedang menyiapkan y sama dengan tmp. 420 00:18:34,740 --> 00:18:37,450 Segala sesuatu yang lain adalah sama, jadi semuanya akan disalin ke bawah. 421 00:18:37,450 --> 00:18:42,050 Kami sedang menyiapkan y sama dengan tmp, yang satu, dan segala sesuatu yang lain adalah sama. 422 00:18:42,050 --> 00:18:43,210 >> Kini akhirnya, tujuh baris. 423 00:18:43,210 --> 00:18:44,700 Kita kembali dalam fungsi utama. 424 00:18:44,700 --> 00:18:46,350 Kami selepas pertukaran selesai. 425 00:18:46,350 --> 00:18:48,972 Kami telah kehilangan a, b, dan tmp, tetapi akhirnya kita 426 00:18:48,972 --> 00:18:51,180 tidak mengubah apa-apa nilai-nilai apa-apa jua pada masa ini, 427 00:18:51,180 --> 00:18:52,800 kami hanya copy x dan y ke bawah. 428 00:18:52,800 --> 00:18:56,490 Dan kita melihat bahawa x dan y adalah kini 2 dan 1, bukan 1 dan 2. 429 00:18:56,490 --> 00:18:58,160 Swap ini telah berjaya dilaksanakan. 430 00:18:58,160 --> 00:18:59,500 431 00:18:59,500 --> 00:19:00,105 >> Soalan 28. 432 00:19:00,105 --> 00:19:01,226 433 00:19:01,226 --> 00:19:03,100 Katakan yang anda hadapi mesej ralat 434 00:19:03,100 --> 00:19:06,790 di bawah pada waktu pejabat tahun depan sebagai CA atau TF. 435 00:19:06,790 --> 00:19:08,930 Nasihat bagaimana untuk memperbaiki setiap kesalahan tersebut. 436 00:19:08,930 --> 00:19:11,160 Rujukan itu terdefinisi untuk GetString. 437 00:19:11,160 --> 00:19:12,540 Mengapa anda mungkin melihat ini? 438 00:19:12,540 --> 00:19:15,380 Nah, jika seseorang pelajar menggunakan GetString dalam kod mereka, 439 00:19:15,380 --> 00:19:20,310 mereka telah benar Hash termasuk CS50 dot h termasuk perpustakaan CS50 ini. 440 00:19:20,310 --> 00:19:22,380 >> Nah, apa yang mereka harus memperbaiki kesalahan ini? 441 00:19:22,380 --> 00:19:26,810 Mereka perlu melakukan lcs50 dash di baris arahan apabila mereka menyusun. 442 00:19:26,810 --> 00:19:29,501 Oleh itu, jika mereka tidak lulus dentang dash lcs50, mereka 443 00:19:29,501 --> 00:19:32,000 tidak akan mempunyai sebenar kod yang mengimplementasikan GetString. 444 00:19:32,000 --> 00:19:33,190 445 00:19:33,190 --> 00:19:34,170 >> Soalan 29. 446 00:19:34,170 --> 00:19:36,190 Secara implisit menyatakan fungsi perpustakaan strlen. 447 00:19:36,190 --> 00:19:37,550 448 00:19:37,550 --> 00:19:40,360 Nah ini sekarang, mereka tidak mempunyai dilakukan hash yang betul termasuk. 449 00:19:40,360 --> 00:19:41,440 450 00:19:41,440 --> 00:19:45,410 Dalam kes ini, file header mereka perlu menyertakan adalah rentetan titik h, 451 00:19:45,410 --> 00:19:48,710 dan termasuk tali titik h, kini student-- sekarang pengkompil 452 00:19:48,710 --> 00:19:51,750 mempunyai akses ke deklarasi strlen, 453 00:19:51,750 --> 00:19:54,120 dan ia tahu bahawa kod anda menggunakan strlen betul. 454 00:19:54,120 --> 00:19:55,380 455 00:19:55,380 --> 00:19:56,580 >> Soalan 30. 456 00:19:56,580 --> 00:20:00,240 Lebih peratus penukaran daripada hujah-hujah data. 457 00:20:00,240 --> 00:20:01,540 Jadi apa ini? 458 00:20:01,540 --> 00:20:06,470 Juga ingat bahawa peratus ini signs-- bagaimana ia relevan untuk printf. 459 00:20:06,470 --> 00:20:08,890 Jadi dalam printf kita mungkin percent-- kita mungkin mencetak sesuatu 460 00:20:08,890 --> 00:20:11,380 seperti peratus Backslash i n. 461 00:20:11,380 --> 00:20:15,310 Atau kita mungkin mencetak seperti peratus i, ruang, peratus i, ruang, peratus i. 462 00:20:15,310 --> 00:20:18,950 Jadi untuk masing-masing tanda-tanda peratus, kita perlu 463 00:20:18,950 --> 00:20:21,560 untuk lulus variabel pada akhir printf. 464 00:20:21,560 --> 00:20:26,980 >> Jadi, jika kita katakan paren printf peratus i Backslash Tanda kurung n dekat, 465 00:20:26,980 --> 00:20:30,270 baik, kita katakan bahawa kita siap dicetak integer, 466 00:20:30,270 --> 00:20:33,970 tapi kemudian kita tidak lulus printf integer sebenarnya mencetak. 467 00:20:33,970 --> 00:20:37,182 Jadi di sini lebih peratus penukaran daripada hujah-hujah data? 468 00:20:37,182 --> 00:20:39,390 Itu mengatakan bahawa kita mempunyai sejumlah besar peratus, 469 00:20:39,390 --> 00:20:42,445 dan kami tidak mempunyai cukup pembolehubah untuk benar-benar mengisi mereka persen. 470 00:20:42,445 --> 00:20:44,850 471 00:20:44,850 --> 00:20:50,010 >> Kemudian pasti, untuk soalan 31, pasti kehilangan 40 bait dalam satu blok. 472 00:20:50,010 --> 00:20:52,350 Jadi ini adalah satu kesilapan yang Valgrind. 473 00:20:52,350 --> 00:20:54,720 Ini mengatakan bahawa di suatu tempat di kod anda, 474 00:20:54,720 --> 00:20:59,010 anda mempunyai peruntukan yang 40 bait besar sehingga Anda malloced 40 bait, 475 00:20:59,010 --> 00:21:00,515 dan anda tidak dibebaskan itu. 476 00:21:00,515 --> 00:21:02,480 477 00:21:02,480 --> 00:21:05,140 Kemungkinan besar anda hanya perlu untuk mencari beberapa kebocoran memori, 478 00:21:05,140 --> 00:21:07,650 dan mencari di mana anda perlu membebaskan blok ini dari ingatan. 479 00:21:07,650 --> 00:21:08,780 480 00:21:08,780 --> 00:21:11,910 >> Dan bertanyalah 32, tulis tidak sah dari ukuran 4. 481 00:21:11,910 --> 00:21:13,250 Sekali lagi ini adalah satu kesilapan yang Valgrind. 482 00:21:13,250 --> 00:21:15,440 Hal ini tidak perlu melakukan dengan kebocoran memori sekarang. 483 00:21:15,440 --> 00:21:20,750 Hal ini, paling likely-- Maksud saya, itu semacam hak ingatan tidak sah. 484 00:21:20,750 --> 00:21:23,270 Dan kemungkinan besar ini adalah beberapa semacam buffer overflow. 485 00:21:23,270 --> 00:21:26,560 Jika anda mempunyai array, mungkin array integer, dan mari kita 486 00:21:26,560 --> 00:21:30,115 mengatakan itu dari saiz 5, dan anda cuba untuk menyentuh pelbagai braket 5. 487 00:21:30,115 --> 00:21:34,150 Jadi, jika anda cuba untuk menulis dengan nilai, itu bukan sekeping memori 488 00:21:34,150 --> 00:21:37,440 Anda benar-benar mempunyai akses kepada, dan jadi anda akan mendapat ralat ini, 489 00:21:37,440 --> 00:21:39,272 berkata tulis tidak sah dari ukuran 4. 490 00:21:39,272 --> 00:21:42,480 Valgrind akan mengenali anda cuba untuk menyentuh memori tidak tepat. 491 00:21:42,480 --> 00:21:43,980 >> Dan itu sahaja untuk quiz0. 492 00:21:43,980 --> 00:21:47,065 Saya Rob Bowden, dan ini adalah CS50. 493 00:21:47,065 --> 00:21:51,104