1 00:00:00,000 --> 00:00:12,040 >> [MUSIC PLAYING] 2 00:00:12,040 --> 00:00:16,460 >> SPEAKER 1: Baiklah, ini adalah CS50, dan ini adalah awal minggu keempat, 3 00:00:16,460 --> 00:00:20,420 dan karena Anda mungkin telah mendengar atau membaca, dunia telah berakhir. 4 00:00:20,420 --> 00:00:23,520 Pergi di sekitar internet memiliki menjadi pengetahuan dan kesadaran 5 00:00:23,520 --> 00:00:27,100 bug dalam program, a bahasa pemrograman yang disebut Bash. 6 00:00:27,100 --> 00:00:32,729 Ini telah mengagumkan bermerek sebagai SHELLSHOCK, atau pintu Bash, 7 00:00:32,729 --> 00:00:35,485 tapi artikel seperti ini belum biasa. 8 00:00:35,485 --> 00:00:38,807 Dan pada kenyataannya, banyak dari mereka membawa kenangan belakang Heartbleed, 9 00:00:38,807 --> 00:00:41,640 yang Anda mungkin telah memperhatikan dalam tekan kembali pada musim semi lalu, yang 10 00:00:41,640 --> 00:00:43,980 adalah sama cukup dramatis. 11 00:00:43,980 --> 00:00:47,110 Sekarang orang-orang dari Anda di sini hari ini, berapa banyak dari Anda miliki, 12 00:00:47,110 --> 00:00:50,330 bahkan jika Anda tidak mengerti apa itu semua tentang, mendengar SHELLSHOCK? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 Baiklah, dan berapa banyak dari Anda memiliki komputer yang rentan? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 OK, harus ada jauh, jauh lebih banyak tangan up sekarang, untuk alasan yang akan kita lihat. 17 00:01:00,250 --> 00:01:02,580 >> Mari kita lihat apa yang telah terjadi di media 18 00:01:02,580 --> 00:01:05,304 dan kemudian menjelaskannya sedikit di sini untuk kita secara teknis. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> SPEAKER 2: Para ahli keamanan telah memperingatkan bahwa kekurangan yang serius bisa 21 00:01:11,250 --> 00:01:15,650 menjadi sekitar untuk mempengaruhi ratusan jutaan pengguna web di dunia. 22 00:01:15,650 --> 00:01:20,600 Jadi apa sebenarnya adalah bug yang sudah dijuluki SHELLSHOCK, dan apa fungsinya? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Nah, SHELLSHOCK juga dikenal sebagai Bug Bash, perangkat lunak yang memanfaatkan. 25 00:01:28,910 --> 00:01:33,230 Hacker menggunakan virus untuk memindai rentan sistem yang menjalankan Linux dan Unix 26 00:01:33,230 --> 00:01:36,300 sistem operasi dan kemudian menginfeksi mereka. 27 00:01:36,300 --> 00:01:38,730 Bash adalah shell baris perintah. 28 00:01:38,730 --> 00:01:43,460 Hal ini memungkinkan pengguna mengeluarkan perintah untuk memulai program dan fitur dalam perangkat lunak 29 00:01:43,460 --> 00:01:45,250 dengan mengetik teks. 30 00:01:45,250 --> 00:01:49,980 Ini biasanya digunakan oleh para programmer, dan tidak harus terbuka ke dunia yang lebih luas, 31 00:01:49,980 --> 00:01:51,590 meskipun SHELLSHOCK perubahan itu. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Nah, worringly, beberapa analis memperingatkan itu bisa menjadi ancaman yang lebih besar, 34 00:01:57,910 --> 00:02:01,580 karena SHELLSHOCK memungkinkan lengkap kontrol mesin yang terinfeksi, 35 00:02:01,580 --> 00:02:06,030 sedangkan Heartbleed hanya diperbolehkan hacker untuk memata-matai komputer. 36 00:02:06,030 --> 00:02:09,130 Ini sangat serius, itu telah dinilai 10 dari 10 37 00:02:09,130 --> 00:02:11,900 untuk keparahan oleh National Kerentanan Database. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 semua server web di risiko, termasuk beberapa komputer Mac. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Nah, pastikan Anda menambal sistem Anda. 42 00:02:25,600 --> 00:02:29,330 Siapapun hosting menjalankan situs web sistem operasi yang terkena dampak 43 00:02:29,330 --> 00:02:31,800 harus mengambil tindakan sesegera mungkin. 44 00:02:31,800 --> 00:02:35,390 Siapa pun yang mampu membelinya harus melihat untuk monitoring dan web aplikasi mereka 45 00:02:35,390 --> 00:02:37,355 firewall untuk melihat keluar untuk setiap serangan. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 SPEAKER 3: Hal terburuk yang bisa terjadi adalah 48 00:02:41,770 --> 00:02:45,080 bahwa seseorang akan menulis kode yang akan secara otomatis pergi dan memindai 49 00:02:45,080 --> 00:02:48,280 internet dan akan mempengaruhi semua komputer. 50 00:02:48,280 --> 00:02:50,710 Dan setelah mereka melakukannya, baik, hal terburuk yang bisa mereka lakukan 51 00:02:50,710 --> 00:02:53,300 hanya menghapus semuanya, atau menutup situs bawah. 52 00:02:53,300 --> 00:02:55,360 Jadi kita bisa melihat kerusakan dari sudut pandang, 53 00:02:55,360 --> 00:02:58,300 di mana kita akan memiliki orang-orang jahat yang baru saja memutuskan untuk menyebabkan kerusakan 54 00:02:58,300 --> 00:03:02,534 dengan membawa sistem ke bawah atau menghapus file, dan hal-hal seperti itu. 55 00:03:02,534 --> 00:03:05,200 SPEAKER 2: Beberapa orang mengatakan ini adalah salah satu yang paling sulit untuk mengukur 56 00:03:05,200 --> 00:03:08,080 bug di tahun, dan itu mungkin waktu berminggu-minggu atau bahkan 57 00:03:08,080 --> 00:03:10,820 bulan untuk menentukan dampak utamanya. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> SPEAKER 1: Jadi semua itu benar, tapi lucunya, hampir semua 60 00:03:15,560 --> 00:03:18,330 citra Anda hanya melihat, kecuali mungkin keyboard, 61 00:03:18,330 --> 00:03:20,930 tidak ada hubungannya dengan bug apapun. 62 00:03:20,930 --> 00:03:23,960 Server dan kabel dan sebagainya, itu semacam tangensial terkait, 63 00:03:23,960 --> 00:03:27,410 tapi pada intinya itu sebenarnya cukup familiar apa yang terjadi di sini. 64 00:03:27,410 --> 00:03:30,050 Bahkan, biarkan aku pergi ke alat CS50 kami. 65 00:03:30,050 --> 00:03:32,910 Biarkan aku pergi ke depan dan memaksimalkan jendela terminal di sini. 66 00:03:32,910 --> 00:03:36,020 Dan kalian telah menggunakan ini, atau versi tertanam padanya, 67 00:03:36,020 --> 00:03:39,460 di gedit untuk menulis program, mengetik perintah, dan sebagainya, 68 00:03:39,460 --> 00:03:43,690 dan ini sebenarnya, dan memiliki berkunjung selama berminggu-minggu, Bash, B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 Ini adalah Bourne-lagi shell, yang hanya cara mewah mengatakan, 70 00:03:46,890 --> 00:03:50,220 ini adalah program yang memiliki berkedip cepat, efektif, 71 00:03:50,220 --> 00:03:51,970 yang duduk di sana menunggu untuk masukan bagi Anda. 72 00:03:51,970 --> 00:03:53,920 Dan itu perintah antarmuka baris via yang 73 00:03:53,920 --> 00:03:57,650 kalian telah menjalankan perintah dan akhirnya kompilasi dan kemudian berjalan 74 00:03:57,650 --> 00:03:58,400 program. 75 00:03:58,400 --> 00:04:01,320 >> Tapi Bash juga pemrograman sebuah bahasa dalam arti berikut. 76 00:04:01,320 --> 00:04:05,460 Anda tahu bahwa ada perintah seperti cd dan ls dan juga dentang dan lain-lain, 77 00:04:05,460 --> 00:04:09,580 tetapi Anda dapat menentukan perintah Anda sendiri dengan menerapkan mereka di Bash. 78 00:04:09,580 --> 00:04:11,420 Sekarang kita tidak akan pergi ke detail 79 00:04:11,420 --> 00:04:16,089 untuk Bash bahasa pemrograman, tetapi tahu, misalnya, bahwa pada saat ini, 80 00:04:16,089 --> 00:04:17,607 tidak ada perintah yang disebut "halo." 81 00:04:17,607 --> 00:04:19,440 Jadi dapat ditemukan di salah satu dari paket ini. 82 00:04:19,440 --> 00:04:20,856 Ini tidak terinstal di komputer saya. 83 00:04:20,856 --> 00:04:21,870 Tanyakan administrator Anda. 84 00:04:21,870 --> 00:04:26,030 Tetapi jika saya ingin ada program disebut "halo" di Bash atau pada prompt saya, 85 00:04:26,030 --> 00:04:30,810 Aku benar-benar dapat menggunakan sintaks yang cukup seperti C. Ini tidak persis sama, 86 00:04:30,810 --> 00:04:35,020 tapi tampaknya cukup mirip dengan fungsi, meskipun kehilangan beberapa rincian. 87 00:04:35,020 --> 00:04:38,090 Tidak ada yang tampaknya terjadi, tapi jika saya ketik "Halo," 88 00:04:38,090 --> 00:04:40,960 Anda benar-benar dapat menulis Program, bukan di C, bukan di Jawa, 89 00:04:40,960 --> 00:04:44,280 tidak dalam pemrograman lain bahasa, namun di Bash sendiri. 90 00:04:44,280 --> 00:04:47,630 >> Sekarang kunci di sini adalah bahwa saya menulis nama saya ingin memberikan perintah baru ini, 91 00:04:47,630 --> 00:04:50,820 dan tanda kurung juga simbolis ini menjadi fungsi. 92 00:04:50,820 --> 00:04:54,010 Sebagai samping, Anda juga dapat melakukan menyenangkan hal, dan pada kenyataannya, bahkan pada Mac OS, 93 00:04:54,010 --> 00:04:55,620 ini adalah sebuah program yang disebut Terminal. 94 00:04:55,620 --> 00:04:58,800 Muncul dibangun ke siapa pun komputer yang memiliki Mac di ruangan ini, 95 00:04:58,800 --> 00:05:03,640 dan Anda dapat melakukan hal-hal serupa di Mac OS, tapi Anda dapat pergi lebih lebih dari itu. 96 00:05:03,640 --> 00:05:07,110 Dan ini sedikit tangensial, tapi itu semacam menyenangkan. 97 00:05:07,110 --> 00:05:09,715 Aku teringat pagi ini, ketika berpikir ini melalui, 98 00:05:09,715 --> 00:05:13,279 dari sedikit permainan saya gunakan untuk bermain dengan salah satu mantan TF CS50 ini 99 00:05:13,279 --> 00:05:16,570 dimana setiap saat dia akan berjalan kaki dari keyboard-nya dengan layar nya dibuka, 100 00:05:16,570 --> 00:05:23,611 Saya akan menjalankan perintah seperti ini-- "menyapa." 101 00:05:23,611 --> 00:05:26,610 Dan sekarang setiap kali dia kembali ke nya Keyboard setelah aku membersihkan layar 102 00:05:26,610 --> 00:05:27,985 dan ia akan duduk, mencoba untuk melakukan beberapa pekerjaan, 103 00:05:27,985 --> 00:05:29,250 daftar isi directory-- nya 104 00:05:29,250 --> 00:05:29,510 >> [AUDIO PLAYBACK] 105 00:05:29,510 --> 00:05:30,010 >> -Halo. 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 Hello. 108 00:05:32,120 --> 00:05:35,030 >> SPEAKER 1: Jadi, dalam keadilan, itu tidak benar-benar "Halo." 109 00:05:35,030 --> 00:05:36,894 Itu biasanya sesuatu lebih mirip dengan itu-- 110 00:05:36,894 --> 00:05:37,560 [AUDIO PLAYBACK] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 SPEAKER 1: -yang saya would-- sehingga komputer akan 113 00:05:39,320 --> 00:05:42,170 bersumpah padanya setiap saat dia benar-benar duduk di keyboard-nya. 114 00:05:42,170 --> 00:05:46,265 Dan sangat cepat ia tahu tidak meninggalkan layar nya dibuka. 115 00:05:46,265 --> 00:05:48,730 Tapi ini menunjukkan semacam itu bodoh menyenangkan bahwa Anda 116 00:05:48,730 --> 00:05:50,210 dapat memiliki dengan sesuatu seperti Bash. 117 00:05:50,210 --> 00:05:52,770 Tapi itu sedikit lebih serius, untuk memastikan, dari itu. 118 00:05:52,770 --> 00:05:57,235 Dan pada kenyataannya, ini adalah salah satu kebanyakan bug berbahaya dan tahan lama 119 00:05:57,235 --> 00:05:58,860 yang telah benar-benar melanda dunia secara global. 120 00:05:58,860 --> 00:06:02,060 Bug ini telah ada selama 20 tahun, 121 00:06:02,060 --> 00:06:05,780 dan Anda akan memukul hanya dalam saat ke relatif sederhana. 122 00:06:05,780 --> 00:06:07,990 >> Jadi ini adalah perwakilan perintah bahwa jika Anda 123 00:06:07,990 --> 00:06:10,448 memiliki Mac, benar-benar tepat sekarang ketika Anda memiliki tutup terbuka, 124 00:06:10,448 --> 00:06:12,940 Anda dapat mencoba mengetik ke dalam program yang disebut Terminal. 125 00:06:12,940 --> 00:06:15,410 Terminal berada di bawah Aplikasi Utilities-- 126 00:06:15,410 --> 00:06:18,790 untuk sekali, pengguna Windows tidak perlu khawatir tentang threat-- tertentu 127 00:06:18,790 --> 00:06:22,310 tapi bagi anda dengan Mac dapat mengetik ini ke jendela seperti aku akan lakukan di sini, 128 00:06:22,310 --> 00:06:24,210 dan jika Anda mengetik bahwa dalam program ini 129 00:06:24,210 --> 00:06:28,830 disebut Terminal, seperti aku akan lakukan sekarang, jika Anda melihat kata "rentan," 130 00:06:28,830 --> 00:06:32,200 komputer Anda rentan terhadap eksploitasi. 131 00:06:32,200 --> 00:06:33,850 >> Sekarang apa yang benar-benar berarti? 132 00:06:33,850 --> 00:06:35,870 Dan ini diakui beberapa sintaks cukup gila, 133 00:06:35,870 --> 00:06:39,050 tapi mari kita setidaknya menarik keluar beberapa aspek yang menarik. 134 00:06:39,050 --> 00:06:42,567 Jadi ada beberapa sintaks yang terlihat sedikit akrab, setidaknya dari C 135 00:06:42,567 --> 00:06:43,950 dan pemrograman lebih umum. 136 00:06:43,950 --> 00:06:47,550 Saya melihat beberapa tanda kurung, koma, kurung kurawal, dan semacamnya, 137 00:06:47,550 --> 00:06:50,820 tapi ternyata ini hal bodoh di sini dengan warna kuning 138 00:06:50,820 --> 00:06:53,580 pada dasarnya fungsi yang tidak apa-apa. 139 00:06:53,580 --> 00:06:57,840 Kolon berarti melakukan apa-apa, dan koma berarti berhenti melakukan apa-apa. 140 00:06:57,840 --> 00:07:00,250 Jadi dalam ini kurung kurawal, fakta 141 00:07:00,250 --> 00:07:02,440 bahwa saya memiliki sama tanda ke kiri, ini 142 00:07:02,440 --> 00:07:05,500 pada dasarnya menciptakan perintah, atau variabel, 143 00:07:05,500 --> 00:07:09,520 disebut x, dan menugaskan yang sedikit kuning kode sana. 144 00:07:09,520 --> 00:07:14,040 Itu bisa menjadi sesuatu seperti "echo halo "atau" mengatakan bip "atau sesuatu 145 00:07:14,040 --> 00:07:15,120 mirip dengan itu. 146 00:07:15,120 --> 00:07:17,780 Tapi perhatikan jika mata Anda mengembara jauh ke kanan, 147 00:07:17,780 --> 00:07:22,150 masih ada lagi untuk baris ini dari hanya akhir titik koma itu. 148 00:07:22,150 --> 00:07:25,160 "Echo rentan," dan kemudian di luar itu ada bahkan lebih. 149 00:07:25,160 --> 00:07:26,530 Lain titik koma, bash-c :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> Jadi cerita panjang pendek, baris kode adalah 152 00:07:34,050 --> 00:07:36,660 cukup untuk menarik komputer yang 153 00:07:36,660 --> 00:07:39,830 rentan terhadap melakukan sesuatu yang ingin Anda untuk melakukan, 154 00:07:39,830 --> 00:07:44,290 karena ada bug di Bash dimana meskipun Bash seharusnya berhenti 155 00:07:44,290 --> 00:07:48,980 membaca baris perintah yang tepat di sana setelah teks kuning, 156 00:07:48,980 --> 00:07:52,520 untuk tahun 20-plus bug tua, Bash sebenarnya sudah membaca 157 00:07:52,520 --> 00:07:56,780 di luar titik koma itu dan cukup banyak melakukan apa yang diperintahkan. 158 00:07:56,780 --> 00:07:59,070 >> Jadi apa implikasi dari yang pada akhirnya? 159 00:07:59,070 --> 00:08:01,340 Aku hanya berkata "echo hello" atau "echo rentan," 160 00:08:01,340 --> 00:08:05,449 tetapi bagaimana jika Anda melakukan sesuatu benar-benar berbahaya, seperti rm-rf *, 161 00:08:05,449 --> 00:08:07,240 yang tidak Anda mungkin pernah diketik sebelumnya, 162 00:08:07,240 --> 00:08:08,920 dan terus terang Anda mungkin seharusnya tidak terlalu cepat, 163 00:08:08,920 --> 00:08:10,700 karena Anda dapat melakukan banyak kerusakan dengan itu. 164 00:08:10,700 --> 00:08:11,210 Mengapa? 165 00:08:11,210 --> 00:08:12,990 rm melakukan apa, tentu saja? 166 00:08:12,990 --> 00:08:14,270 Menghapus. 167 00:08:14,270 --> 00:08:15,930 * Berarti apa? 168 00:08:15,930 --> 00:08:16,430 Semua. 169 00:08:16,430 --> 00:08:18,180 Jadi apa yang disebut wild card, jadi itu berarti 170 00:08:18,180 --> 00:08:20,410 menghapus segala sesuatu dalam direktori saat ini. 171 00:08:20,410 --> 00:08:23,379 r terjadi berarti rekursif, yang berarti jika apa yang Anda menghapus 172 00:08:23,379 --> 00:08:26,420 adalah sebuah direktori, dan dalam sana adalah berkas dan direktori lainnya, 173 00:08:26,420 --> 00:08:28,950 rekursif menyelam ke sana dan menghapus semua itu. 174 00:08:28,950 --> 00:08:31,040 Dan f adalah yang terburuk dari mereka semua. 175 00:08:31,040 --> 00:08:32,580 Ada yang tahu apa-f berarti di sini? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 Force. 178 00:08:34,360 --> 00:08:37,830 Jadi memaksa berarti, bahkan jika ini adalah ide yang buruk, 179 00:08:37,830 --> 00:08:40,939 melakukannya tanpa disuruh me untuk konfirmasi lebih lanjut. 180 00:08:40,939 --> 00:08:43,230 Jadi, Anda tahu, kita menertawakan ini, tapi terus terang, saya mungkin 181 00:08:43,230 --> 00:08:44,972 ketik ini beberapa kali hari, karena kenyataannya 182 00:08:44,972 --> 00:08:47,210 itu adalah cara tercepat untuk menghapus sejumlah besar barang. 183 00:08:47,210 --> 00:08:48,590 Tapi bahkan aku telah melakukan beberapa kerusakan. 184 00:08:48,590 --> 00:08:53,100 >> Tapi jika Anda adalah untuk mengelabui komputer dalam mendefinisikan beberapa variabel bodoh 185 00:08:53,100 --> 00:08:56,810 atau fungsi yang disebut x, tapi kemudian menipu komputer dalam melaksanakan 186 00:08:56,810 --> 00:09:00,030 melampaui batas-batas yang fungsi, di luar titik koma itu, 187 00:09:00,030 --> 00:09:04,430 Anda memang bisa menipu komputer dalam melaksanakan sesuatu seperti rm-rf 188 00:09:04,430 --> 00:09:07,810 atau perintah Email atau perintah Copy. 189 00:09:07,810 --> 00:09:11,400 Apa pun benar-benar dapat Anda lakukan dengan komputer, apakah itu menghapus file, 190 00:09:11,400 --> 00:09:15,350 membuat file, spamming seseorang, menyerang beberapa server yang jauh, 191 00:09:15,350 --> 00:09:17,190 jika Anda bisa mengungkapkannya dengan perintah, Anda 192 00:09:17,190 --> 00:09:19,120 dapat trik komputer untuk melakukan itu. 193 00:09:19,120 --> 00:09:21,510 >> Sekarang apa contoh bagaimana Anda bisa melakukan ini? 194 00:09:21,510 --> 00:09:24,300 Nah, ada banyak komputer pada Bash internet berjalan. 195 00:09:24,300 --> 00:09:26,390 Semua pengguna kami Mac di antara mereka. 196 00:09:26,390 --> 00:09:30,390 Banyak server Linux adalah salah mereka juga, dan server Unix. 197 00:09:30,390 --> 00:09:32,630 Windows lagi mendapat relatif lolos 198 00:09:32,630 --> 00:09:34,590 kecuali jika Anda telah menginstal software khusus. 199 00:09:34,590 --> 00:09:37,130 Sekarang banyak server, untuk Misalnya, web server berjalan, 200 00:09:37,130 --> 00:09:39,840 dan bahkan Linux mungkin adalah kebanyakan sistem operasi populer 201 00:09:39,840 --> 00:09:43,060 untuk berjalan di komputer di internet yang melayani sampai halaman web. 202 00:09:43,060 --> 00:09:44,910 Sekarang seperti yang kita akan lihat nanti di semester, ketika 203 00:09:44,910 --> 00:09:48,470 Anda mengirim permintaan dari browser-- Chrome Anda, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- ke server jauh, 205 00:09:50,790 --> 00:09:53,730 ternyata bahwa meskipun Anda hanya mengetik www.example.com, 206 00:09:53,730 --> 00:09:59,590 Browser Anda mengirimkan pesan itu sedikit lebih misterius, seperti ini. 207 00:09:59,590 --> 00:10:01,239 >> Tapi perhatikan sedikit sesuatu yang aneh. 208 00:10:01,239 --> 00:10:03,030 Dua baris pertama Aku belum pernah melihat sebelumnya, 209 00:10:03,030 --> 00:10:04,904 tapi mereka tidak terlihat terutama mengancam. 210 00:10:04,904 --> 00:10:08,030 Tapi perhatikan apa yang saya dicuri untuk baris ketiga di sini. 211 00:10:08,030 --> 00:10:13,390 Jika orang jahat yang mengirim pesan seperti ini dari komputer nya 212 00:10:13,390 --> 00:10:17,270 ke Mac rentan atau Linux server rentan, 213 00:10:17,270 --> 00:10:21,580 lucunya Bash itu, yang sedikit perintah sederhana yang cepat, 214 00:10:21,580 --> 00:10:27,450 mana-mana dan sering digunakan untuk mengeksekusi dasarnya 215 00:10:27,450 --> 00:10:30,020 isi pesan yang diterima. 216 00:10:30,020 --> 00:10:33,490 Dan dengan logika itu, Anda bisa trik web server, oleh karena itu, 217 00:10:33,490 --> 00:10:36,370 dengan mengirimkan sesuatu seperti User-Agent, yang biasanya 218 00:10:36,370 --> 00:10:38,300 seharusnya mengatakan nama browser Anda. 219 00:10:38,300 --> 00:10:42,420 User-Agent Chrome, User-Agent Internet Explorer, User-Agent Firefox, ini 220 00:10:42,420 --> 00:10:44,590 hanya browser Anda cara mengidentifikasi dirinya. 221 00:10:44,590 --> 00:10:46,605 Tetapi jika orang jahat yang sangat cerdik mengatakan, mm-mm, aku 222 00:10:46,605 --> 00:10:47,930 tidak akan memberitahu Anda apa browser saya, 223 00:10:47,930 --> 00:10:50,888 Aku bukannya akan mengirimkan ini samar-mencari hal dengan rm-rf 224 00:10:50,888 --> 00:10:55,840 * Di dalamnya, Anda benar-benar dapat mengelabui web server yang rentan di internet 225 00:10:55,840 --> 00:10:59,055 dalam melaksanakan hal itu di ada untuk menghapus semua file. 226 00:10:59,055 --> 00:11:00,930 Dan terus terang, itu tidak bahkan yang terburuk. 227 00:11:00,930 --> 00:11:01,763 Anda dapat melakukan apa-apa. 228 00:11:01,763 --> 00:11:04,480 Anda bisa mulai didistribusikan penolakan serangan layanan 229 00:11:04,480 --> 00:11:07,030 jika Anda mengirim pesan ini ke Seluruh tandan server web 230 00:11:07,030 --> 00:11:10,256 dan kemudian memiliki mereka semua turun, untuk Misalnya, pada server Harvard.edu, 231 00:11:10,256 --> 00:11:12,130 dan Anda dapat mengurutkan bang sih dari mereka 232 00:11:12,130 --> 00:11:15,490 oleh lalu lintas jaringan yang dinyatakan dipicu oleh orang jahat ini. 233 00:11:15,490 --> 00:11:18,760 >> Jadi, singkat cerita, hampir semua orang di ruangan ini yang memiliki Mac 234 00:11:18,760 --> 00:11:20,240 rentan terhadap ini. 235 00:11:20,240 --> 00:11:24,100 Lapisan perak adalah bahwa kecuali jika Anda menjalankan server web pada laptop Anda, 236 00:11:24,100 --> 00:11:27,780 dan kecuali Anda sudah benar-benar dikonfigurasi untuk memungkinkan sesuatu seperti SSH ke dalamnya, 237 00:11:27,780 --> 00:11:28,670 Anda benar-benar aman. 238 00:11:28,670 --> 00:11:31,710 Ini rentan, tetapi tidak ada satu mencoba masuk ke laptop Anda, 239 00:11:31,710 --> 00:11:33,290 sehingga Anda dapat semacam yakinlah. 240 00:11:33,290 --> 00:11:36,210 Namun, Apple akan segera menjadi memperbarui untuk memperbaiki ini. 241 00:11:36,210 --> 00:11:39,660 Dunia Linux telah dirilis sejumlah perbaikan untuk Fedora dan Ubuntu 242 00:11:39,660 --> 00:11:43,790 dan versi lain dari Linux, dan memang jika Anda mengalami pembaruan 50 di alat, 243 00:11:43,790 --> 00:11:45,930 bahkan itu juga akan diperbarui dan diperbaiki. 244 00:11:45,930 --> 00:11:47,764 Tapi itu terlalu belum benar-benar telah rentan, 245 00:11:47,764 --> 00:11:49,804 karena kecuali Anda sudah bermain-main dengan alat 246 00:11:49,804 --> 00:11:52,770 dan membuat laptop Anda publik diakses di internet, yang tidak 247 00:11:52,770 --> 00:11:54,910 secara default, Anda sudah sebenarnya baik-baik saja karena 248 00:11:54,910 --> 00:11:56,890 dari firewall dan teknik lainnya. 249 00:11:56,890 --> 00:12:01,000 >> Tapi itu contoh ekstrim bug bahwa kita sudah hidup untuk untuk benar-benar 20 250 00:12:01,000 --> 00:12:04,050 tahun, dan siapa tahu jika seseorang selama ini telah tahu tentang hal itu? 251 00:12:04,050 --> 00:12:06,300 Dan pada kenyataannya, ini adalah salah satu tantangan mendasar 252 00:12:06,300 --> 00:12:08,690 bahwa kita akan lihat nanti dalam semester tentang keamanan, 253 00:12:08,690 --> 00:12:13,020 adalah bahwa sama seperti di dunia nyata, orang-orang yang baik di merugikan. 254 00:12:13,020 --> 00:12:16,500 Untuk menjaga orang-orang jahat, kita harus memastikan bahwa setiap pintu terkunci, 255 00:12:16,500 --> 00:12:20,340 bahwa setiap jendela aman, yang setiap titik masuk ke rumah 256 00:12:20,340 --> 00:12:21,980 aman untuk menjaga orang-orang jahat keluar. 257 00:12:21,980 --> 00:12:26,870 Tapi apa orang jahat harus lakukan untuk benar-benar kompromi rumah Anda 258 00:12:26,870 --> 00:12:28,200 dan mencuri dari Anda? 259 00:12:28,200 --> 00:12:32,574 Dia hanya harus menemukan satu dibuka pintu, satu jendela rusak, atau sesuatu 260 00:12:32,574 --> 00:12:35,240 sepanjang garis, dan itu adalah hal yang sama dalam keamanan komputer. 261 00:12:35,240 --> 00:12:37,660 Kita bisa menulis jutaan baris kode pemrograman 262 00:12:37,660 --> 00:12:40,570 dan menghabiskan ratusan atau ribuan jam mencoba untuk mendapatkannya benar, 263 00:12:40,570 --> 00:12:43,370 tetapi jika Anda membuat hanya satu kesalahan dalam kebenaran, 264 00:12:43,370 --> 00:12:47,030 Anda dapat menempatkan seluruh sistem dan memang dalam hal ini, seluruh internet 265 00:12:47,030 --> 00:12:48,660 dan dunia beresiko. 266 00:12:48,660 --> 00:12:51,950 >> Jadi jika Anda ingin mempelajari lebih lanjut tentang hal ini, pergi ke URL ini di sini. 267 00:12:51,950 --> 00:12:54,450 Tidak perlu tindakan malam ini kecuali jika Anda 268 00:12:54,450 --> 00:12:57,116 di antara mereka lebih nyaman yang telah menjalankan web Anda sendiri 269 00:12:57,116 --> 00:12:59,810 Server, dalam hal ini Anda harus, pada kenyataannya, memperbarui perangkat lunak Anda. 270 00:12:59,810 --> 00:13:03,244 >> Dan ini juga adalah judul pidato, dan sekarang kertas, 271 00:13:03,244 --> 00:13:05,410 bahwa kita telah terhubung pada situs mata kuliah untuk hari ini. 272 00:13:05,410 --> 00:13:07,600 Itu sesama bernama Ken Thompson, yang 273 00:13:07,600 --> 00:13:10,120 sedang menerima sangat terkenal penghargaan dalam ilmu komputer, 274 00:13:10,120 --> 00:13:13,495 dan ia memberikan pidato ini beberapa tahun lalu, pada dasarnya tentang topik ini sama. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Mengajukan orang pertanyaan, Anda benar-benar harus 277 00:13:20,520 --> 00:13:23,480 kepercayaan, akhirnya, perangkat lunak yang Anda telah diberikan? 278 00:13:23,480 --> 00:13:26,100 Misalnya, kita semua memiliki telah menulis program, 279 00:13:26,100 --> 00:13:27,820 dan kami sudah menyusun mereka dengan dentang. 280 00:13:27,820 --> 00:13:31,830 Dan untuk pengetahuan Anda, yang telah ditulis program untuk CS50 mana ada 281 00:13:31,830 --> 00:13:35,310 pintu belakang macam, di situ ada jalan bahwa orang jahat, jika menjalankan program Anda, 282 00:13:35,310 --> 00:13:37,410 bisa mengambil alih komputer Anda? 283 00:13:37,410 --> 00:13:38,310 Mungkin tidak, kan? 284 00:13:38,310 --> 00:13:40,180 Mario, dan Greedy, dan Kredit. 285 00:13:40,180 --> 00:13:41,680 Ini semua adalah program cukup kecil. 286 00:13:41,680 --> 00:13:43,910 Anda akan harus cukup buruk jika Anda benar-benar 287 00:13:43,910 --> 00:13:47,310 membuat seluruh komputer Anda rentan setelah menulis 10 atau 20 baris kode, 288 00:13:47,310 --> 00:13:49,690 atau setidaknya menyadari beberapa implikasi keamanan. 289 00:13:49,690 --> 00:13:52,023 Sekarang saya mengatakan bahwa berkelakar, tapi kita akan lihat hari ini 290 00:13:52,023 --> 00:13:54,600 dan minggu ini itu sebenarnya benar-benar, benar-benar mudah 291 00:13:54,600 --> 00:13:57,980 menjadi buruk dan membuat bahkan program pendek yang rentan. 292 00:13:57,980 --> 00:14:02,880 >> Tapi untuk saat ini, setidaknya, menyadari bahwa pertanyaan yang diajukan di sini 293 00:14:02,880 --> 00:14:04,850 adalah tentang dentang dalam kompilator. 294 00:14:04,850 --> 00:14:08,360 Mengapa kami telah percaya dentang selama dua atau tiga minggu terakhir? 295 00:14:08,360 --> 00:14:12,650 Siapa bilang bahwa siapa pun yang menulis dentang tidak memiliki "jika" kondisi ada 296 00:14:12,650 --> 00:14:17,680 yang pada dasarnya disuntikkan beberapa nol dan orang-orang ke dalam setiap program yang mengkompilasi 297 00:14:17,680 --> 00:14:21,180 yang akan membiarkan dia atau akses nya komputer Anda saat Anda sedang tidur 298 00:14:21,180 --> 00:14:23,580 dan tutup laptop Anda terbuka dan komputer Anda berjalan? 299 00:14:23,580 --> 00:14:24,080 Benar? 300 00:14:24,080 --> 00:14:28,350 Kami memiliki semacam ini sistem kehormatan hak sekarang di mana kita percaya bahwa dentang legit. 301 00:14:28,350 --> 00:14:30,000 Anda percaya bahwa alat legit. 302 00:14:30,000 --> 00:14:34,430 Anda percaya bahwa benar setiap program pada Mac atau PC dapat dipercaya. 303 00:14:34,430 --> 00:14:37,510 Dan sebagai bug yang sederhana ini menunjukkan, bahkan jika itu tidak berbahaya, 304 00:14:37,510 --> 00:14:40,580 itu sama sekali tidak mungkin terjadi. 305 00:14:40,580 --> 00:14:42,350 >> Jadi, Anda harus takut sekali. 306 00:14:42,350 --> 00:14:45,560 Terus terang, tidak ada sederhana solusi untuk ini lain 307 00:14:45,560 --> 00:14:48,185 dari semacam kesadaran masyarakat dari meningkatnya kompleksitas 308 00:14:48,185 --> 00:14:50,310 bahwa kita sedang membangun di atas sistem komputer kita, 309 00:14:50,310 --> 00:14:53,740 dan bagaimana semakin rentan kita mungkin sangat baik menjadi. 310 00:14:53,740 --> 00:14:55,570 >> Sekarang dengan mengatakan bahwa, Breakout. 311 00:14:55,570 --> 00:14:59,889 Jadi Breakout adalah masalah menetapkan tiga, dan Breakout adalah permainan dari masa lampau 312 00:14:59,889 --> 00:15:02,180 bahwa Anda mungkin ingat, tapi bagi kita di masalah menetapkan tiga, 313 00:15:02,180 --> 00:15:04,450 memungkinkan kita untuk mengambil hal back up takik 314 00:15:04,450 --> 00:15:08,880 sehingga ketika kita menulis program, bahkan dalam jendela Terminal seperti ini, 315 00:15:08,880 --> 00:15:14,670 kita benar-benar dapat berjalan, akhirnya, program grafis tidak 316 00:15:14,670 --> 00:15:17,800 tidak seperti kami memiliki Akses ke dalam Scratch. 317 00:15:17,800 --> 00:15:20,910 Jadi ini adalah staf pelaksanaan Breakout, 318 00:15:20,910 --> 00:15:23,930 yang hanya ini bata-melanggar permainan, Anda memindah pemukul Anda kembali 319 00:15:23,930 --> 00:15:27,590 dan sebagainya, dan Anda memukul bola terhadap orang-orang batu bata berwarna di bagian atas. 320 00:15:27,590 --> 00:15:30,020 Jadi ini membawa kita semacam kembali ke tempat 321 00:15:30,020 --> 00:15:33,180 kami mampu menjadi sangat cepat dengan Scratch, dan sekarang dengan C, 322 00:15:33,180 --> 00:15:35,800 menerapkan kita sendiri antarmuka pengguna grafis. 323 00:15:35,800 --> 00:15:38,960 >> Tapi lebih dari itu, ini Masalah set merupakan yang pertama 324 00:15:38,960 --> 00:15:41,000 di mana kami memberikan Anda sekelompok kode. 325 00:15:41,000 --> 00:15:43,940 Dan pada kenyataannya, saya membawa eksplisit memperhatikan hal ini, karena terutama 326 00:15:43,940 --> 00:15:47,090 bagi mereka yang kurang nyaman, ini permasalahan yang, setidaknya pada pandangan pertama, 327 00:15:47,090 --> 00:15:49,170 akan merasa seperti kami sudah itu membuat takik. 328 00:15:49,170 --> 00:15:51,540 Karena kami telah memberikan, untuk beberapa pencarian 329 00:15:51,540 --> 00:15:54,930 dan memilah masalah dalam PSET tersebut, sekelompok kode yang kita tulis, 330 00:15:54,930 --> 00:15:56,680 dan beberapa komentar yang mengatakan "untuk melakukan," 331 00:15:56,680 --> 00:15:58,221 di mana Anda harus mengisi kekosongan. 332 00:15:58,221 --> 00:16:00,020 Jadi tidak terlalu menakutkan, tapi itu adalah pertama kalinya 333 00:16:00,020 --> 00:16:03,370 kami menyerahkan Anda kode yang Anda butuhkan untuk pertama kali membaca, memahami, dan kemudian menambah 334 00:16:03,370 --> 00:16:04,290 dan menyelesaikannya. 335 00:16:04,290 --> 00:16:05,940 >> Dan kemudian dengan Breakout, kita akan melakukan hal yang sama, 336 00:16:05,940 --> 00:16:08,740 memberikan Anda beberapa lusin lebih baris kode yang, terus terang, memberikan 337 00:16:08,740 --> 00:16:11,490 banyak kerangka kerja untuk permainan tapi berhenti singkat 338 00:16:11,490 --> 00:16:14,304 penerapan batu bata dan bola dan pemukul, 339 00:16:14,304 --> 00:16:15,970 tetapi kita mengimplementasikan beberapa fitur lainnya. 340 00:16:15,970 --> 00:16:18,280 Dan bahkan yang pada pandangan pertama, sekali lagi, terutama jika kurang nyaman, 341 00:16:18,280 --> 00:16:21,480 mungkin tampak sangat menakutkan dan Anda berpikir ada begitu banyak fungsi baru 342 00:16:21,480 --> 00:16:24,070 Anda perlu untuk membungkus pikiran Anda sekitar, dan itu benar. 343 00:16:24,070 --> 00:16:26,281 Namun perlu diingat, itu cukup seperti Scratch. 344 00:16:26,281 --> 00:16:28,780 Kemungkinan besar Anda tidak menggunakan semua potongan puzzle dalam Scratch. 345 00:16:28,780 --> 00:16:31,120 Kemungkinan besar Anda tidak peduli untuk membungkus pikiran Anda sekitar semua dari mereka 346 00:16:31,120 --> 00:16:33,617 karena semua butuh adalah sekilas untuk memahami, oh, 347 00:16:33,617 --> 00:16:35,450 itulah yang bisa saya lakukan dengan potongan puzzle. 348 00:16:35,450 --> 00:16:38,260 Dan memang, dalam permasalahan yang 3 spec, kami akan mengarahkan Anda 349 00:16:38,260 --> 00:16:41,370 dokumentasi yang akan memperkenalkan Anda kepada beberapa fungsi baru, 350 00:16:41,370 --> 00:16:43,570 dan akhirnya pemrograman konstruksi Anda gunakan. 351 00:16:43,570 --> 00:16:47,610 Kondisi, loop, variabel, dan fungsi 352 00:16:47,610 --> 00:16:50,720 akan sama dengan apa yang telah kita lihat sejauh ini. 353 00:16:50,720 --> 00:16:53,560 >> Jadi memang, apa yang kita akan memberikan Anda adalah beberapa contoh kode yang 354 00:16:53,560 --> 00:16:56,110 memungkinkan Anda membuat jendela yang terlihat tidak seperti ini, 355 00:16:56,110 --> 00:16:59,540 dan akhirnya mengubahnya menjadi sesuatu yang seperti ini. 356 00:16:59,540 --> 00:17:02,250 Jadi memanfaatkan CS50, membahas jam kantor dan lebih, 357 00:17:02,250 --> 00:17:05,290 dan mengambil kenyamanan di fakta bahwa jumlah kode Anda harus menulis 358 00:17:05,290 --> 00:17:06,760 sebenarnya tidak semua yang jauh. 359 00:17:06,760 --> 00:17:10,359 Tantangan pertama adalah hanya untuk menyesuaikan diri diri Anda untuk beberapa kode yang kami telah menulis. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Pertanyaan pset3, SHELLSHOCK, atau sebaliknya? 362 00:17:15,810 --> 00:17:19,226 >> AUDIENCE: Sepertinya melalui dengan Breakout 363 00:17:19,226 --> 00:17:22,154 bahwa kode ini hampir gaya berorientasi objek, 364 00:17:22,154 --> 00:17:24,675 tapi saya pikir C adalah program berorientasi objek. 365 00:17:24,675 --> 00:17:26,050 SPEAKER 1: Sebuah pertanyaan yang sangat bagus. 366 00:17:26,050 --> 00:17:28,258 Jadi dalam melihat melalui kode distribusi, kode 367 00:17:28,258 --> 00:17:30,180 kami menulis untuk pset3, untuk mereka yang akrab, itu 368 00:17:30,180 --> 00:17:32,230 Sepertinya itu adalah sedikit berorientasi objek. 369 00:17:32,230 --> 00:17:33,800 Jawaban singkatnya adalah, itu. 370 00:17:33,800 --> 00:17:38,130 Ini perkiraan bagaimana Anda mungkin melakukan kode berorientasi obyek menggunakan 371 00:17:38,130 --> 00:17:41,850 bahasa seperti C, tetapi masih akhirnya prosedural. 372 00:17:41,850 --> 00:17:44,900 Tidak ada metode dalam variabel, seperti yang akan Anda lihat. 373 00:17:44,900 --> 00:17:46,180 Tapi itu mengingatkan itu. 374 00:17:46,180 --> 00:17:48,780 Dan kita akan melihat fitur yang lagi ketika kita sampai ke PHP dan JavaScript 375 00:17:48,780 --> 00:17:49,946 menjelang akhir semester. 376 00:17:49,946 --> 00:17:53,667 Tapi untuk saat ini, menganggapnya sebagai sedikit apa yang akan datang. 377 00:17:53,667 --> 00:17:54,250 Pertanyaan yang bagus. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 Baiklah. 380 00:17:56,550 --> 00:17:59,730 Jadi melebur semacam itu bagaimana kita hal kiri terakhir kali. 381 00:17:59,730 --> 00:18:03,250 Dan melebur semacam dingin di arti bahwa itu begitu jauh lebih cepat, 382 00:18:03,250 --> 00:18:07,100 setidaknya berdasarkan tes sepintas kami lakukan minggu lalu, dari, katakanlah, gelembung 383 00:18:07,100 --> 00:18:08,710 sort, selection sort, insertion sort. 384 00:18:08,710 --> 00:18:11,780 Dan apa yang rapi juga hanya bagaimana ringkas dan bersih 385 00:18:11,780 --> 00:18:12,810 Anda bisa mengungkapkannya. 386 00:18:12,810 --> 00:18:15,840 Dan apa yang kita katakan itu adalah atas terikat pada waktu berjalan dari merge 387 00:18:15,840 --> 00:18:16,340 mengurutkan? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Ya? 390 00:18:18,495 --> 00:18:19,360 >> AUDIENCE: n log n? 391 00:18:19,360 --> 00:18:20,819 >> SPEAKER 1: n log n, benar. n log n. 392 00:18:20,819 --> 00:18:23,776 Dan kami akan kembali ke apa itu benar-benar berarti atau mana yang berasal dari, 393 00:18:23,776 --> 00:18:25,570 tapi ini lebih baik dari apa waktu berjalan 394 00:18:25,570 --> 00:18:28,440 yang kami lihat untuk gelembung seleksi dan insertion sort? 395 00:18:28,440 --> 00:18:30,610 Jadi n kuadrat. n kuadrat lebih besar dari ini, 396 00:18:30,610 --> 00:18:34,650 dan bahkan jika itu tidak cukup jelas, tahu bahwa log n lebih kecil dari n, 397 00:18:34,650 --> 00:18:36,910 jadi jika Anda melakukan n kali sesuatu yang lebih kecil dari n, 398 00:18:36,910 --> 00:18:38,680 itu akan menjadi kurang dari n kuadrat. 399 00:18:38,680 --> 00:18:40,130 Itu adalah sedikit dari intuisi sana. 400 00:18:40,130 --> 00:18:42,190 Tapi kita membayar harga untuk ini. 401 00:18:42,190 --> 00:18:47,000 Itu lebih cepat, tapi tema yang dimulai muncul minggu lalu adalah tradeoff ini. 402 00:18:47,000 --> 00:18:49,804 Aku punya kinerja yang lebih baik waktu bijaksana, tapi apa 403 00:18:49,804 --> 00:18:52,470 aku harus menghabiskan di sisi lain tangan, dalam rangka untuk mencapai itu? 404 00:18:52,470 --> 00:18:53,591 >> AUDIENCE: Memory. 405 00:18:53,591 --> 00:18:54,465 SPEAKER 1: Katakanlah lagi? 406 00:18:54,465 --> 00:18:55,173 AUDIENCE: Memory. 407 00:18:55,173 --> 00:18:57,040 SPEAKER 1: Memory, atau ruang yang lebih umum. 408 00:18:57,040 --> 00:18:59,040 Dan itu bukan super jelas dengan manusia kami, 409 00:18:59,040 --> 00:19:02,240 tapi ingat bahwa relawan kami melangkah maju dan melangkah 410 00:19:02,240 --> 00:19:04,780 kembali seolah-olah ada sebuah array di sini, dan seolah-olah ada 411 00:19:04,780 --> 00:19:07,130 array kedua di sini bahwa mereka bisa menggunakan, karena kita 412 00:19:07,130 --> 00:19:09,080 dibutuhkan tempat untuk menggabungkan orang-orang itu. 413 00:19:09,080 --> 00:19:11,480 Kita tidak bisa hanya swap mereka di tempat. 414 00:19:11,480 --> 00:19:13,800 Jadi menggabungkan pengaruh semacam lebih banyak ruang, yang 415 00:19:13,800 --> 00:19:15,620 kita tidak perlu dengan algoritma lain, 416 00:19:15,620 --> 00:19:17,410 tapi terbalik adalah bahwa hal itu jauh lebih cepat. 417 00:19:17,410 --> 00:19:20,780 Dan terus terang, di ruang dunia nyata ini RAM days--, hard disk space-- 418 00:19:20,780 --> 00:19:25,030 relatif murah, dan jadi itu tidak selalu berarti buruk. 419 00:19:25,030 --> 00:19:28,320 >> Jadi mari kita lihat, sedikit lebih metodis, pada apa yang kita lakukan 420 00:19:28,320 --> 00:19:30,220 dan mengapa kita mengatakan itu n log n. 421 00:19:30,220 --> 00:19:33,260 Jadi di sini adalah delapan angka dan delapan relawan kami memiliki waktu terakhir. 422 00:19:33,260 --> 00:19:35,718 Dan hal pertama yang Merge Urut mengatakan kepada kita lakukan adalah apa? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 AUDIENCE: Divide dua. 425 00:19:38,010 --> 00:19:38,663 SPEAKER 1: Katakanlah lagi? 426 00:19:38,663 --> 00:19:39,650 AUDIENCE: Divide dua. 427 00:19:39,650 --> 00:19:40,610 SPEAKER 1: Divide dua, benar. 428 00:19:40,610 --> 00:19:42,818 Hal ini sangat mengingatkan buku telepon, membagi 429 00:19:42,818 --> 00:19:44,220 dan menaklukkan lebih umum. 430 00:19:44,220 --> 00:19:45,640 Jadi kita melihat kiri setengah. 431 00:19:45,640 --> 00:19:48,700 Dan kemudian setelah kita berkata, semacam kiri setengah dari unsur-unsur, 432 00:19:48,700 --> 00:19:49,690 apa yang kita selanjutnya katakan? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 Urutkan kiri setengah dari kiri setengah, yang memungkinkan kita untuk, 435 00:19:54,860 --> 00:19:57,570 setelah membagi dua, fokus pada empat dan dua. 436 00:19:57,570 --> 00:20:01,280 >> Bagaimana Anda mengurutkan daftar sekarang, di kuning, ukuran dua, menggunakan Merge Sort? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 Nah membagi menjadi dua, dan mengurutkan setengah kiri. 439 00:20:04,580 --> 00:20:07,100 Dan ini adalah di mana hal-hal mendapat sebentar bodoh sedikit. 440 00:20:07,100 --> 00:20:10,720 Bagaimana Anda menyortir daftar itu dari ukuran satu, seperti nomor ini empat sini? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 Ini diurutkan. 443 00:20:13,210 --> 00:20:14,200 Anda sudah selesai. 444 00:20:14,200 --> 00:20:17,300 >> Tapi kemudian bagaimana Anda menyortir daftar satu ukuran ketika itu nomor dua? 445 00:20:17,300 --> 00:20:21,640 Nah, hal yang sama, tapi sekarang apa yang ketiga dan langkah kunci dalam Merge Sort? 446 00:20:21,640 --> 00:20:24,020 Anda harus menggabungkan kiri setengah dan setengah benar. 447 00:20:24,020 --> 00:20:26,580 Dan setelah kami melakukan itu, kami melihat pukul empat, kami melihat dua. 448 00:20:26,580 --> 00:20:28,750 Kami memutuskan apa-apa, jelas dua datang pertama, 449 00:20:28,750 --> 00:20:31,840 sehingga kami menempatkan dua di nya Tempat, diikuti oleh empat. 450 00:20:31,840 --> 00:20:35,010 Dan sekarang Anda harus jenis mundur, dan ini adalah semacam karakteristik 451 00:20:35,010 --> 00:20:37,570 dari algoritma seperti Merge Urut, mundur dalam memori. 452 00:20:37,570 --> 00:20:40,240 Apa baris berikutnya dari cerita ini? 453 00:20:40,240 --> 00:20:41,780 Apa yang harus saya berfokus pada berikutnya? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 Bagian kanan kiri setengah, yang merupakan enam dan delapan. 456 00:20:47,350 --> 00:20:50,320 >> Jadi biarkan aku hanya langkah melalui ini Tanpa penekanan titik terlalu banyak. 457 00:20:50,320 --> 00:20:53,330 Enam dan delapan, kemudian enam adalah diurutkan, delapan diurutkan. 458 00:20:53,330 --> 00:20:57,190 Menggabungkan mereka bersama-sama seperti itu, dan sekarang langkah besar berikutnya 459 00:20:57,190 --> 00:21:00,990 , tentu saja, mengurutkan kanan setengah dari langkah pertama dari algoritma ini. 460 00:21:00,990 --> 00:21:02,870 Jadi kita fokus pada satu, tiga, tujuh, lima. 461 00:21:02,870 --> 00:21:04,540 Kami kemudian fokus pada kiri setengah. 462 00:21:04,540 --> 00:21:09,400 Kiri setengah dari itu, bagian kanan itu, dan kemudian bergabung dalam satu dan tiga. 463 00:21:09,400 --> 00:21:13,100 Kemudian bagian kanan, kemudian meninggalkan setengah itu, maka bagian kanan itu. 464 00:21:13,100 --> 00:21:15,985 Merge dalam, dan sekarang apa langkah yang tersisa? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Menggabungkan setengah kiri yang besar dan besar setengah benar, sehingga orang pergi ke sana, 467 00:21:22,460 --> 00:21:27,330 kemudian dua, kemudian tiga, lalu empat, lalu lima, lalu enam, kemudian tujuh, lalu delapan. 468 00:21:27,330 --> 00:21:31,990 >> Jadi sekarang mengapa ini akhirnya mengungkapkan, terutama jika n dan logaritma lainnya 469 00:21:31,990 --> 00:21:35,487 umumnya agak melarikan diri Anda, setidaknya dalam memori baru-baru ini? 470 00:21:35,487 --> 00:21:37,070 Nah, perhatikan ketinggian hal ini. 471 00:21:37,070 --> 00:21:41,230 Kami memiliki delapan elemen, dan kami dibagi dengan dua, dua, dua. 472 00:21:41,230 --> 00:21:44,590 Jadi dasar log dua dari delapan memberi kita tiga. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 Dan percayalah bahwa jika sedikit kabur itu. 475 00:21:48,540 --> 00:21:54,710 Tapi dasar log dua dari delapan tiga, jadi kami sudah melakukan tiga lapis penggabungan. 476 00:21:54,710 --> 00:21:57,170 Dan ketika kita bergabung elemen, berapa banyak elemen 477 00:21:57,170 --> 00:21:58,950 Apakah kita melihat pada masing-masing baris? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Sebanyak n, kan? 480 00:22:01,437 --> 00:22:04,020 Karena untuk menggabungkan baris atas, meskipun kami melakukannya sedikit demi sedikit, 481 00:22:04,020 --> 00:22:05,990 kita akhirnya menyentuh setiap nomor sekali. 482 00:22:05,990 --> 00:22:09,054 Dan di baris kedua, untuk menggabungkan daftar tersebut ukuran dua, 483 00:22:09,054 --> 00:22:10,470 kita harus menyentuh setiap elemen sekali. 484 00:22:10,470 --> 00:22:12,690 Dan maka di sini benar-benar jelas di baris terakhir, 485 00:22:12,690 --> 00:22:15,430 kita harus menyentuh masing-masing elemen sekali, tapi hanya sekali, 486 00:22:15,430 --> 00:22:18,400 jadi di sinilah letak, maka, n log n kami. 487 00:22:18,400 --> 00:22:21,780 >> Dan sekarang hanya untuk membuat sesuatu yang sedikit lebih formal untuk sesaat, jika Anda 488 00:22:21,780 --> 00:22:24,260 yang sekarang menganalisis ini pada semacam tingkat yang lebih tinggi 489 00:22:24,260 --> 00:22:28,340 dan mencoba untuk memutuskan, baik bagaimana mungkin Anda pergi tentang mengekspresikan 490 00:22:28,340 --> 00:22:31,780 waktu berjalan dari algoritma ini hanya dengan melihat itu, bukan 491 00:22:31,780 --> 00:22:33,590 dengan menggunakan contoh-buat? 492 00:22:33,590 --> 00:22:36,590 Nah, berapa banyak waktu Anda akan mengatakan langkah seperti ini warna kuning akan mengambil, 493 00:22:36,590 --> 00:22:37,173 jika n <2 kembali? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 Itu O besar dari apa? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Jadi aku melihat satu, jadi satu langkah, mungkin dua langkah karena jika 498 00:22:44,540 --> 00:22:47,110 dan kemudian kembali, tapi itu waktu yang konstan, kan? 499 00:22:47,110 --> 00:22:49,960 Kami katakan O (1), dan itu bagaimana saya akan mengungkapkan hal ini. 500 00:22:49,960 --> 00:22:51,480 T, hanya akan berjalan waktu. 501 00:22:51,480 --> 00:22:54,150 n adalah ukuran input, sehingga T (n), hanya cara mewah 502 00:22:54,150 --> 00:22:56,330 mengatakan yang sedang berjalan waktu tertentu masukan ukuran n 503 00:22:56,330 --> 00:23:00,220 akan berada di urutan dari waktu yang konstan, di O (1). 504 00:23:00,220 --> 00:23:01,970 >> Tapi sebaliknya, bagaimana ini? 505 00:23:01,970 --> 00:23:05,660 Bagaimana Anda akan mengungkapkan waktu berjalan dari garis kuning ini? 506 00:23:05,660 --> 00:23:06,250 T apa? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Anda dapat jenis menipu di sini dan menjawab pertanyaan saya siklis. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Jadi jika waktu berjalan di umum kita hanya mengatakan adalah T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 Dan sekarang kau jenis punting sini dan mengatakan, baik, hanya mengurutkan kiri setengah, 513 00:23:22,490 --> 00:23:23,920 dan kemudian mengurutkan bagian kanan. 514 00:23:23,920 --> 00:23:27,520 Bagaimana mungkin kita secara simbolis mewakili waktu berjalan dari garis kuning ini? 515 00:23:27,520 --> 00:23:28,020 T apa? 516 00:23:28,020 --> 00:23:29,360 Apa ukuran input? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 n lebih dari dua. 519 00:23:31,057 --> 00:23:32,140 Mengapa saya tidak hanya mengatakan bahwa? 520 00:23:32,140 --> 00:23:36,449 Dan maka ini adalah T lain (n / 2) dan kemudian lagi, jika saya menggabungkan dua bagian diurutkan, 521 00:23:36,449 --> 00:23:38,615 berapa banyak elemen yang akan saya harus menyentuh keseluruhan? 522 00:23:38,615 --> 00:23:39,780 523 00:23:39,780 --> 00:23:40,320 n. 524 00:23:40,320 --> 00:23:42,790 Jadi saya bisa mengungkapkan ini, hanya menjadi semacam mewah, 525 00:23:42,790 --> 00:23:44,430 sebagai waktu berjalan secara umum. 526 00:23:44,430 --> 00:23:51,140 T (n) hanya waktu berjalan dari T (n / 2), ditambah T (n / 2), meninggalkan setengah dan setengah benar, 527 00:23:51,140 --> 00:23:55,360 ditambah O (n), yang mungkin n langkah, tapi mungkin, jika saya menggunakan dua jari, 528 00:23:55,360 --> 00:23:57,960 itu dua kali lebih banyak langkah, tapi itu linear. 529 00:23:57,960 --> 00:24:00,440 Ini beberapa jumlah langkah itu faktor n, 530 00:24:00,440 --> 00:24:02,270 sehingga kita bisa mengungkapkan ini karena ini. 531 00:24:02,270 --> 00:24:05,550 Dan ini adalah di mana sekarang kita akan menyepak bola ke belakang buku matematika SMA kami 532 00:24:05,550 --> 00:24:10,290 kami bahwa kekambuhan pada akhirnya berakhir setara ini, n kali log n, 533 00:24:10,290 --> 00:24:12,530 jika Anda benar-benar melakukan out matematika lebih formal. 534 00:24:12,530 --> 00:24:13,950 >> Jadi itu hanya dua perspektif. 535 00:24:13,950 --> 00:24:17,500 Satu numerik dengan keras-kode contoh yang representatif 536 00:24:17,500 --> 00:24:21,140 menggunakan delapan angka, dan lebih pandangan umum bagaimana kita sampai di sana. 537 00:24:21,140 --> 00:24:25,670 Tapi apa benar-benar menarik di sini adalah, sekali lagi, gagasan ini bersepeda. 538 00:24:25,670 --> 00:24:26,900 Saya tidak menggunakan untuk loop. 539 00:24:26,900 --> 00:24:29,860 Aku agak mendefinisikan sesuatu dalam hal itu sendiri, 540 00:24:29,860 --> 00:24:31,950 tidak hanya dengan ini fungsi matematika, 541 00:24:31,950 --> 00:24:34,860 tetapi juga dalam hal kode semu ini. 542 00:24:34,860 --> 00:24:38,260 Pseudo code ini adalah rekursif dalam dua lini 543 00:24:38,260 --> 00:24:42,310 pada dasarnya mengatakan untuk pergi gunakan sendiri untuk memecahkan lebih kecil 544 00:24:42,310 --> 00:24:45,400 masalah ukuran yang lebih kecil, dan kemudian lagi dan lagi 545 00:24:45,400 --> 00:24:48,820 dan lagi sampai kita kurangi itu ke kasus dasar ini disebut. 546 00:24:48,820 --> 00:24:52,810 >> Jadi mari kita benar-benar menarik lebih menarik dibawa pulang dari ini sebagai berikut. 547 00:24:52,810 --> 00:24:58,420 Biarkan aku pergi ke gedit dan mengambil melihat beberapa kode sumber saat ini, 548 00:24:58,420 --> 00:24:59,930 khususnya contoh ini di sini. 549 00:24:59,930 --> 00:25:03,709 Sigma 0, yang tampaknya menambahkan angka satu sampai n. 550 00:25:03,709 --> 00:25:05,750 Jadi mari kita lihat apa yang akrab dan asing di sini. 551 00:25:05,750 --> 00:25:08,690 Pertama kita memiliki beberapa termasuk, jadi tidak ada yang baru di sana. 552 00:25:08,690 --> 00:25:09,190 Prototype. 553 00:25:09,190 --> 00:25:11,370 Aku sedikit kabur pada ini setelah beberapa hari, 554 00:25:11,370 --> 00:25:13,790 tapi apa yang kita katakan prototipe fungsi adalah? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 AUDIENCE: [Tak terdengar]. 557 00:25:16,015 --> 00:25:16,905 SPEAKER 1: Apa itu? 558 00:25:16,905 --> 00:25:17,800 AUDIENCE: Kami mengumumkannya. 559 00:25:17,800 --> 00:25:18,883 SPEAKER 1: Kami mengumumkannya. 560 00:25:18,883 --> 00:25:22,290 Jadi Anda mengajar dentang, hey, tidak benar-benar menerapkan ini belum, 561 00:25:22,290 --> 00:25:25,740 tetapi di suatu tempat dalam file ini, mungkin, akan menjadi fungsi yang disebut apa? 562 00:25:25,740 --> 00:25:26,930 563 00:25:26,930 --> 00:25:27,540 Sigma. 564 00:25:27,540 --> 00:25:30,540 Dan ini hanya janji yang itu akan terlihat seperti ini. 565 00:25:30,540 --> 00:25:33,720 Ini akan mengambil integer sebagai input-- dan aku bisa lebih eksplisit 566 00:25:33,720 --> 00:25:36,570 dan mengatakan int n --dan itu akan mengembalikan int, 567 00:25:36,570 --> 00:25:39,900 tapi berarti titik koma, mm, aku akan mendapatkan sekitar untuk menerapkan ini sedikit kemudian. 568 00:25:39,900 --> 00:25:40,989 Sekali lagi, dentang bodoh. 569 00:25:40,989 --> 00:25:43,280 Ini hanya akan tahu apa Anda mengatakan itu atas ke bawah, 570 00:25:43,280 --> 00:25:45,765 jadi kita perlu setidaknya memberikan itu sedikit dari apa yang akan datang. 571 00:25:45,765 --> 00:25:47,330 >> Sekarang mari kita lihat utama di sini. 572 00:25:47,330 --> 00:25:50,040 Mari kita gulir ke bawah sini dan melihat apa utama lakukan. 573 00:25:50,040 --> 00:25:53,780 Ini bukan berarti bahwa panjang dari suatu fungsi, dan sebenarnya membangun di sini akrab. 574 00:25:53,780 --> 00:25:57,590 Saya mendeklarasikan variabel n, dan kemudian Saya mengganggu pengguna lagi dan lagi 575 00:25:57,590 --> 00:26:01,880 untuk bilangan bulat positif menggunakan getInt, dan hanya keluar dari lingkaran ini 576 00:26:01,880 --> 00:26:03,280 sekali pengguna telah memenuhi. 577 00:26:03,280 --> 00:26:05,670 Do While, kami telah digunakan untuk mengganggu pengguna dengan cara itu. 578 00:26:05,670 --> 00:26:06,670 Sekarang ini adalah menarik. 579 00:26:06,670 --> 00:26:08,510 Saya mendeklarasikan int disebut "jawaban." 580 00:26:08,510 --> 00:26:11,420 Saya menetapkan nilai kembali dari fungsi yang disebut "sigma." 581 00:26:11,420 --> 00:26:15,200 Aku tidak tahu apa yang tidak, tapi Aku ingat menyatakannya beberapa saat yang lalu. 582 00:26:15,200 --> 00:26:18,310 Dan kemudian aku lewat di nilai bahwa pengguna mengetik, n, 583 00:26:18,310 --> 00:26:20,420 dan kemudian saya melaporkan jawabannya. 584 00:26:20,420 --> 00:26:22,260 Nah mari kita gulir kembali untuk sesaat. 585 00:26:22,260 --> 00:26:28,620 Mari kita pergi ke depan dalam direktori ini, membuat sigma 0, dan benar-benar menjalankan program ini 586 00:26:28,620 --> 00:26:30,490 dan melihat apa yang terjadi. 587 00:26:30,490 --> 00:26:35,930 Jadi jika saya pergi ke depan dan menjalankan Program ini, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 dan saya ketik secara positif bilangan bulat seperti dua, Sigma, 589 00:26:40,139 --> 00:26:43,180 sebagai simbol Yunani menyiratkan, hanya akan menambahkan semua nomor dari 590 00:26:43,180 --> 00:26:44,320 nol pada hingga dua. 591 00:26:44,320 --> 00:26:46,560 Jadi 0 ditambah 1 ditambah 2. 592 00:26:46,560 --> 00:26:48,830 Jadi ini harus mudah-mudahan memberi saya 3. 593 00:26:48,830 --> 00:26:49,750 Itu semua yang dilakukannya. 594 00:26:49,750 --> 00:26:52,690 Dan sama, jika saya menjalankan ini lagi dan saya memberikan nomor tiga, 595 00:26:52,690 --> 00:26:56,721 itu 3 ditambah 2, jadi itu 5, ditambah 1 harus memberikan 6. 596 00:26:56,721 --> 00:26:59,470 Dan kemudian jika saya benar-benar gila dan mulai mengetik dalam jumlah yang lebih besar, 597 00:26:59,470 --> 00:27:01,290 harus memberi saya besar dan lebih besar jumlah. 598 00:27:01,290 --> 00:27:02,250 Jadi itu saja. 599 00:27:02,250 --> 00:27:04,010 >> Jadi apa sigma terlihat seperti? 600 00:27:04,010 --> 00:27:05,430 Yah, itu cukup sederhana. 601 00:27:05,430 --> 00:27:08,940 Ini bagaimana kita mungkin telah menerapkan ini selama beberapa minggu. 602 00:27:08,940 --> 00:27:11,120 "Int" akan menjadi jenis kembali. 603 00:27:11,120 --> 00:27:14,330 Sigma adalah nama, dan dibutuhkan m variabel bukan n. 604 00:27:14,330 --> 00:27:15,940 Aku akan mengubah itu di bagian atas. 605 00:27:15,940 --> 00:27:17,340 Maka ini adalah hanya cek kewarasan. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Kita akan melihat mengapa dalam sekejap. 608 00:27:19,950 --> 00:27:24,220 Sekarang saya mendeklarasikan variabel lain, Singkatnya, menginisialisasi ke nol. 609 00:27:24,220 --> 00:27:28,140 Lalu aku punya ini untuk lingkaran iterasi, tampaknya untuk kejelasan, 610 00:27:28,140 --> 00:27:33,810 dari i = 1 pada hingga = m, yang apapun pengguna mengetik di, dan kemudian aku 611 00:27:33,810 --> 00:27:35,690 kenaikan jumlah seperti ini. 612 00:27:35,690 --> 00:27:37,360 Dan kemudian kembali jumlah tersebut. 613 00:27:37,360 --> 00:27:38,440 >> Jadi beberapa pertanyaan. 614 00:27:38,440 --> 00:27:42,370 Satu, saya menyatakan dalam komentar saya bahwa ini menghindari risiko loop tak terbatas. 615 00:27:42,370 --> 00:27:45,620 Mengapa lewat di angka negatif menginduksi, potensial, infinite loop? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> AUDIENCE: Anda tidak akan pernah mencapai m. 618 00:27:51,290 --> 00:27:52,880 >> SPEAKER 1: Jangan pernah mencapai m. 619 00:27:52,880 --> 00:27:55,880 Tapi m dilewatkan dalam, jadi mari kita pertimbangkan contoh sederhana. 620 00:27:55,880 --> 00:27:58,510 Jika m dilewatkan oleh pengguna sebagai salah satu negatif. 621 00:27:58,510 --> 00:28:00,059 Terlepas dari utama. 622 00:28:00,059 --> 00:28:01,850 Main melindungi kita dari ini juga, jadi aku hanya 623 00:28:01,850 --> 00:28:04,680 menjadi benar-benar anal dengan sigma juga untuk memastikan 624 00:28:04,680 --> 00:28:06,540 bahwa input tidak boleh negatif. 625 00:28:06,540 --> 00:28:10,130 Jadi jika m negatif, sesuatu seperti satu negatif. 626 00:28:10,130 --> 00:28:11,930 Apa yang akan terjadi? 627 00:28:11,930 --> 00:28:14,390 Nah, saya akan mendapatkan diinisialisasi ke satu, 628 00:28:14,390 --> 00:28:19,060 dan kemudian saya akan menjadi kurang dari atau sama dengan m? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Stand by. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 Itu was-- jangan, mari kita nix cerita ini. 633 00:28:29,370 --> 00:28:32,780 Aku tidak menanyakan hal itu, karena risiko bahwa saya menyinggung 634 00:28:32,780 --> 00:28:38,360 tidak akan terjadi karena saya adalah selalu akan lebih besar OK than--, 635 00:28:38,360 --> 00:28:39,871 Saya menarik kembali pertanyaan itu. 636 00:28:39,871 --> 00:28:40,370 OK. 637 00:28:40,370 --> 00:28:42,030 Mari kita fokus hanya pada bagian ini di sini. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Mengapa saya menyatakan beberapa luar loop? 640 00:28:48,830 --> 00:28:52,010 Pemberitahuan on line 49 saya sudah menyatakan i dalam loop, 641 00:28:52,010 --> 00:28:54,950 tapi secara online 48 Aku sudah menyatakan beberapa luar. 642 00:28:54,950 --> 00:28:55,695 Ya. 643 00:28:55,695 --> 00:28:56,611 AUDIENCE: [Tak terdengar]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 SPEAKER 1: Tentu. 646 00:28:59,400 --> 00:29:03,360 Jadi pertama dan terutama saya pasti tidak ingin menyatakan dan menginisialisasi sum 647 00:29:03,360 --> 00:29:06,130 dengan nol bagian dalam loop pada setiap iterasi, 648 00:29:06,130 --> 00:29:09,370 karena ini jelas akan mengalahkan tujuan menjumlahkan angka-angka. 649 00:29:09,370 --> 00:29:11,770 Saya akan terus berubah nilai kembali ke nol. 650 00:29:11,770 --> 00:29:17,992 Dan juga, apa lagi yang lebih misterius alasan untuk itu keputusan desain yang sama? 651 00:29:17,992 --> 00:29:18,954 Ya. 652 00:29:18,954 --> 00:29:20,279 >> AUDIENCE: [Tak terdengar]. 653 00:29:20,279 --> 00:29:21,070 SPEAKER 1: Tepat. 654 00:29:21,070 --> 00:29:24,060 Saya ingin mengaksesnya di luar loop juga pada apa baris? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 Pada 53. 657 00:29:26,400 --> 00:29:29,910 Dan berdasarkan aturan kami praktis dari beberapa kuliah yang lalu, 658 00:29:29,910 --> 00:29:33,680 variabel scoped, benar-benar, dengan kurung kurawal yang mencakup mereka. 659 00:29:33,680 --> 00:29:38,190 Jadi jika saya tidak menyatakan jumlah dalam ini kurung kurawal luar, 660 00:29:38,190 --> 00:29:40,250 Saya tidak dapat menggunakannya sesuai 53. 661 00:29:40,250 --> 00:29:43,160 Dengan kata lain, jika saya menyatakan sum di sini, atau bahkan di dalam 662 00:29:43,160 --> 00:29:45,410 Untuk lingkaran, saya tidak bisa mengaksesnya di 53. 663 00:29:45,410 --> 00:29:47,150 Variabel efektif akan hilang. 664 00:29:47,150 --> 00:29:48,579 Jadi beberapa alasan di sana. 665 00:29:48,579 --> 00:29:50,370 Tapi sekarang mari kita kembali dan melihat apa yang terjadi. 666 00:29:50,370 --> 00:29:51,730 Jadi sigma dipanggil. 667 00:29:51,730 --> 00:29:55,640 Ini menambahkan sampai 1 ditambah 2, atau 1 ditambah 2 ditambah 3, dan kemudian mengembalikan nilai, 668 00:29:55,640 --> 00:29:59,660 menyimpannya dalam jawaban, dan printf sini mengapa saya melihat di layar. 669 00:29:59,660 --> 00:30:03,079 Jadi ini adalah apa yang akan kita sebut berulang pendekatan, di mana iterasi hanya 670 00:30:03,079 --> 00:30:03,870 berarti menggunakan loop. 671 00:30:03,870 --> 00:30:06,900 A Untuk lingkaran, loop Sementara, Do Sementara lingkaran, hanya melakukan sesuatu lagi 672 00:30:06,900 --> 00:30:08,380 dan lagi dan lagi. 673 00:30:08,380 --> 00:30:13,505 >> Tapi sigma adalah jenis fungsi rapi di bahwa saya bisa menerapkannya berbeda. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Bagaimana dengan ini, yang hanya untuk jenis dingin, 676 00:30:19,120 --> 00:30:21,880 biarkan aku benar-benar menyingkirkan dari banyak gangguan 677 00:30:21,880 --> 00:30:24,380 karena fungsi ini benar-benar sangat sederhana. 678 00:30:24,380 --> 00:30:27,780 Meraut itu mari kita turun hanya dengan jalur inti empat 679 00:30:27,780 --> 00:30:30,410 dan menyingkirkan semua komentar dan kurung kurawal. 680 00:30:30,410 --> 00:30:34,334 Ini adalah jenis pikiran-bertiup implementasi alternatif. 681 00:30:34,334 --> 00:30:37,250 Baiklah, mungkin tidak pikiran-bertiup, tapi agak seksi, baik-baik saja, 682 00:30:37,250 --> 00:30:39,920 untuk melihat ini jauh lebih ringkas. 683 00:30:39,920 --> 00:30:43,120 Dengan hanya empat baris kode, Saya pertama kali memiliki kewarasan cek ini. 684 00:30:43,120 --> 00:30:45,732 Jika m kurang dari atau sama dengan nol, sigma tidak masuk akal. 685 00:30:45,732 --> 00:30:48,190 Ini hanya seharusnya berada di hal ini untuk bilangan positif, 686 00:30:48,190 --> 00:30:50,340 jadi aku hanya akan kembali nol sewenang-wenang 687 00:30:50,340 --> 00:30:53,210 sehingga kita setidaknya memiliki beberapa disebut kasus dasar. 688 00:30:53,210 --> 00:30:54,430 >> Tapi di sini keindahan. 689 00:30:54,430 --> 00:30:59,930 Keseluruhan ide ini, menambahkan angka dari 1 sampai n, atau m dalam kasus ini, 690 00:30:59,930 --> 00:31:02,630 dapat dilakukan dengan jenis lewat uang. 691 00:31:02,630 --> 00:31:04,947 Nah, apa adalah jumlah dari 1 sampai m? 692 00:31:04,947 --> 00:31:05,780 Nah, Anda tahu apa? 693 00:31:05,780 --> 00:31:11,949 Ini sama dengan jumlah m ditambah jumlah 1 sampai m dikurangi 1. 694 00:31:11,949 --> 00:31:12,740 Yah kau tahu apa? 695 00:31:12,740 --> 00:31:13,940 Apa sigma dari m dikurangi 1? 696 00:31:13,940 --> 00:31:17,860 Nah, jika Anda jenis ini mengikuti logis, itu sama dengan m dikurangi 1 697 00:31:17,860 --> 00:31:21,415 ditambah sigma dari m minus 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Jadi Anda dapat jenis hanya-- ini seperti, jika Anda hanya 700 00:31:26,012 --> 00:31:28,220 mencoba untuk mengganggu teman dan mereka mengajukan pertanyaan, 701 00:31:28,220 --> 00:31:31,344 Anda jenis merespon dengan pertanyaan, Anda dapat jenis terus lewat uang. 702 00:31:31,344 --> 00:31:34,560 Tapi apa kuncinya adalah bahwa jika Anda tetap membuat pertanyaan yang lebih kecil dan lebih kecil 703 00:31:34,560 --> 00:31:36,910 dan lebih kecil, Anda tidak meminta apa sigma 704 00:31:36,910 --> 00:31:39,116 n, apa sigma dari n, apa sigma n? 705 00:31:39,116 --> 00:31:40,990 Anda meminta apa sigma dari n, apa sigma 706 00:31:40,990 --> 00:31:42,839 n dikurangi 1, apa sigma n minus 2? 707 00:31:42,839 --> 00:31:44,880 Akhirnya pertanyaan Anda akan menjadi apa? 708 00:31:44,880 --> 00:31:50,250 Apa sigma dari satu atau nol, beberapa nilai yang sangat kecil, 709 00:31:50,250 --> 00:31:52,220 dan segera setelah Anda mendapatkan itu, teman Anda, 710 00:31:52,220 --> 00:31:54,350 Anda tidak akan bertanya pertanyaan yang sama lagi, 711 00:31:54,350 --> 00:31:55,975 Anda hanya akan mengatakan, oh itu nol. 712 00:31:55,975 --> 00:31:58,490 Kami selesai bermain semacam ini permainan siklus bodoh. 713 00:31:58,490 --> 00:32:02,950 >> Jadi rekursi adalah tindakan dalam pemrograman fungsi yang menyebut dirinya. 714 00:32:02,950 --> 00:32:06,630 Program ini, ketika dikompilasi dan dijalankan, adalah akan berperilaku dengan cara yang sama, 715 00:32:06,630 --> 00:32:09,620 tapi apa kuncinya adalah bahwa di dalam dari fungsi yang disebut sigma, 716 00:32:09,620 --> 00:32:13,150 ada baris kode dimana kita memanggil diri kita sendiri, 717 00:32:13,150 --> 00:32:14,980 yang biasanya akan menjadi buruk. 718 00:32:14,980 --> 00:32:21,160 Misalnya, bagaimana jika saya pertama kali dikompilasi ini, sehingga membuat sigma-- 719 00:32:21,160 --> 00:32:22,710 membuat sigma 1 ./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Bilangan bulat positif, silahkan, 50 1275. 722 00:32:27,690 --> 00:32:30,810 Jadi apa fungsi tampaknya jadi, berdasarkan satu tes, benar. 723 00:32:30,810 --> 00:32:34,917 Tapi bagaimana jika saya mendapatkan sedikit berbahaya dan menghapus apa yang disebut kasus dasar, 724 00:32:34,917 --> 00:32:37,750 dan hanya mengatakan, baik aku hanya membuat ini lebih rumit dari itu. 725 00:32:37,750 --> 00:32:42,450 Mari kita menghitung sigma yang dengan mengambil m dan kemudian menambahkan 726 00:32:42,450 --> 00:32:44,564 di sigma dari m minus satu? 727 00:32:44,564 --> 00:32:45,980 Nah, apa yang akan terjadi di sini? 728 00:32:45,980 --> 00:32:47,140 Mari kita zoom out. 729 00:32:47,140 --> 00:32:52,920 Mari kita ulang program, menyimpannya, ulang program, 730 00:32:52,920 --> 00:33:00,450 dan kemudian siap ./sigma-1 zoom, masukkan bilangan bulat positif silahkan, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Berapa banyak dari Anda bersedia untuk mengaku hingga melihat itu? 733 00:33:04,430 --> 00:33:04,950 >> OK. 734 00:33:04,950 --> 00:33:06,690 Jadi ini dapat terjadi karena sejumlah alasan, 735 00:33:06,690 --> 00:33:09,148 dan terus terang minggu ini kami akan memberi Anda lebih banyak dari mereka. 736 00:33:09,148 --> 00:33:11,780 Tapi dalam kasus ini, coba untuk alasan mundur 737 00:33:11,780 --> 00:33:14,430 apa yang mungkin terjadi di sini? 738 00:33:14,430 --> 00:33:17,400 Segmentation fault, kami katakan terakhir waktu, mengacu pada segmen memori. 739 00:33:17,400 --> 00:33:18,690 Sesuatu yang buruk terjadi. 740 00:33:18,690 --> 00:33:21,550 Tapi apa itu mekanis yang pergi kacau 741 00:33:21,550 --> 00:33:25,000 di sini karena penghapusan saya itu kasus dasar yang disebut, 742 00:33:25,000 --> 00:33:26,870 di mana aku kembali nilai keras-kode? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Bagaimana menurut Anda salah? 745 00:33:30,460 --> 00:33:31,219 Ya. 746 00:33:31,219 --> 00:33:32,135 >> AUDIENCE: [Tak terdengar]. 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 SPEAKER 1: Ah. 749 00:33:36,970 --> 00:33:37,550 Pertanyaan yang bagus. 750 00:33:37,550 --> 00:33:39,508 Jadi ukuran nomor bahwa saya menyimpulkan 751 00:33:39,508 --> 00:33:41,920 mendapat begitu besar bahwa itu melebihi ukuran ruang memori. 752 00:33:41,920 --> 00:33:44,640 Ide bagus, tapi tidak mendasar akan menyebabkan kecelakaan. 753 00:33:44,640 --> 00:33:48,230 Yang mungkin menyebabkan integer overflow, dimana bit hanya terbalik 754 00:33:48,230 --> 00:33:51,760 dan kemudian kita benar-benar kesalahan besar nomor seperti nomor negatif, 755 00:33:51,760 --> 00:33:53,260 tapi itu sendiri tidak akan menyebabkan kecelakaan. 756 00:33:53,260 --> 00:33:55,509 Karena pada akhir hari int masih 32 bit. 757 00:33:55,509 --> 00:33:57,640 Anda tidak akan sengaja mencuri sedikit 33. 758 00:33:57,640 --> 00:33:58,431 Tapi pikiran yang baik. 759 00:33:58,431 --> 00:33:58,984 Ya. 760 00:33:58,984 --> 00:33:59,900 >> AUDIENCE: [Tak terdengar]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 SPEAKER 1: Metode tidak pernah berhenti berjalan, 763 00:34:02,300 --> 00:34:06,658 dan memang itu menyebut dirinya lagi dan lagi dan lagi dan lagi 764 00:34:06,658 --> 00:34:08,449 dan lagi, dan tidak ada fungsi-fungsi yang pernah 765 00:34:08,449 --> 00:34:13,310 selesai karena jalur satu-satunya mereka kode panggilan themself lagi dan lagi 766 00:34:13,310 --> 00:34:14,219 dan lagi. 767 00:34:14,219 --> 00:34:16,080 Dan apa yang benar-benar terjadi di sini, dan sekarang kita 768 00:34:16,080 --> 00:34:18,100 dapat jenis menggambar ini pictorially. 769 00:34:18,100 --> 00:34:20,899 Biarkan aku pergi ke sebuah gambar untuk sesaat. 770 00:34:20,899 --> 00:34:22,940 Ini adalah gambar, yang akhirnya akan menyempurnakan 771 00:34:22,940 --> 00:34:26,336 secara lebih rinci, apa yang terjadi pada dalam memori komputer Anda. 772 00:34:26,336 --> 00:34:28,460 Dan ternyata bahwa pada bagian bawah gambar ini 773 00:34:28,460 --> 00:34:29,709 sesuatu yang disebut stack. 774 00:34:29,709 --> 00:34:31,920 Ini adalah sepotong memori, sepotong RAM, 775 00:34:31,920 --> 00:34:33,920 itu hanya digunakan setiap saat fungsi ini disebut. 776 00:34:33,920 --> 00:34:36,239 Setiap kali Anda, programmer, memanggil fungsi, 777 00:34:36,239 --> 00:34:38,860 sistem operasi, seperti Mac OS, Windows, atau Linux, 778 00:34:38,860 --> 00:34:41,920 meraih sekelompok byte, mungkin beberapa kilobyte, mungkin beberapa megabyte 779 00:34:41,920 --> 00:34:44,590 memori, tangan mereka kepada Anda, dan kemudian memungkinkan 780 00:34:44,590 --> 00:34:47,650 Anda menjalankan fungsi Anda menggunakan variabel apa pun yang Anda butuhkan. 781 00:34:47,650 --> 00:34:50,699 Dan jika Anda kemudian memanggil yang lain fungsi dan fungsi lain, 782 00:34:50,699 --> 00:34:53,590 Anda mendapatkan sepotong memori yang lain dan lain sepotong memori. 783 00:34:53,590 --> 00:34:57,090 >> Dan memang, jika ini nampan hijau dari Annenberg merupakan memori yang, 784 00:34:57,090 --> 00:34:59,870 inilah yang terjadi pertama kali Anda memanggil fungsi sigma. 785 00:34:59,870 --> 00:35:04,510 Ini seperti menempatkan nampan seperti ini pada apa yang awalnya stack kosong. 786 00:35:04,510 --> 00:35:07,142 Tapi kemudian jika baki yang menyebut dirinya, sehingga untuk berbicara, 787 00:35:07,142 --> 00:35:08,850 memanggil contoh lain sigma, itu 788 00:35:08,850 --> 00:35:11,640 seperti meminta sistem operasi, ooh, membutuhkan memori sedikit lebih, 789 00:35:11,640 --> 00:35:12,520 memberi saya itu. 790 00:35:12,520 --> 00:35:14,840 Dan kemudian itu akan ditumpuk di atas. 791 00:35:14,840 --> 00:35:18,030 Tapi apa kunci di sini adalah bahwa baki pertama masih ada, 792 00:35:18,030 --> 00:35:20,620 karena ia dipanggil tray kedua ini. 793 00:35:20,620 --> 00:35:23,500 Sekarang sementara itu, sigma panggilan sigma, itu seperti meminta lebih banyak memori. 794 00:35:23,500 --> 00:35:25,830 Mendapat menumpuk di sini. 795 00:35:25,830 --> 00:35:29,350 sigma panggilan sigma, itu lain tray yang akan menumpuk di sini. 796 00:35:29,350 --> 00:35:32,942 Dan jika Anda terus melakukan hal ini, akhirnya, jenis peta visual ini 797 00:35:32,942 --> 00:35:35,525 bagan itu, apa yang akan terjadi dengan tumpukan nampan? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 Hal ini akan melebihi jumlah memori komputer Anda. 800 00:35:41,160 --> 00:35:45,790 Dan segera setelah tray hijau melebihi garis horizontal 801 00:35:45,790 --> 00:35:49,410 di atas tumpukan dan di atas itu tumpukan kata, yang kita akan kembali di masa depan, 802 00:35:49,410 --> 00:35:50,410 itu adalah hal yang buruk. 803 00:35:50,410 --> 00:35:52,810 Heap adalah berbeda segmen memori, 804 00:35:52,810 --> 00:35:55,190 dan jika Anda membiarkan ini nampan tumpukan dan tumpukan pada, 805 00:35:55,190 --> 00:35:57,800 Anda akan melebihi segmen Anda sendiri dari memori, 806 00:35:57,800 --> 00:36:00,420 dan program ini memang akan crash. 807 00:36:00,420 --> 00:36:02,930 >> Sekarang sebagai samping, ide ini rekursi, oleh karena itu, 808 00:36:02,930 --> 00:36:06,500 jelas dapat menyebabkan masalah, tetapi itu tidak selalu hal yang buruk. 809 00:36:06,500 --> 00:36:08,840 Karena pertimbangkan, setelah semua, how-- dan mungkin 810 00:36:08,840 --> 00:36:11,700 ini mengambil beberapa membiasakan untuk --how elegan atau cara sederhana 811 00:36:11,700 --> 00:36:14,890 bahwa pelaksanaan sigma adalah. 812 00:36:14,890 --> 00:36:17,440 Dan kita tidak akan menggunakan rekursi semua yang banyak di CS50, 813 00:36:17,440 --> 00:36:20,780 tetapi dalam CS51, dan benar-benar setiap kelas di mana Anda memanipulasi struktur data 814 00:36:20,780 --> 00:36:23,640 seperti pohon, atau pohon keluarga, yang memiliki beberapa hirarki, 815 00:36:23,640 --> 00:36:26,000 itu super, super berguna. 816 00:36:26,000 --> 00:36:29,750 Sekarang, sebagai samping, sehingga Anda sebagai calon ilmuwan komputer 817 00:36:29,750 --> 00:36:33,180 akrab dengan beberapa Google lelucon, jika Anda pergi ke Google 818 00:36:33,180 --> 00:36:36,345 dan anda melihat apa yang definisi, katakanlah, rekursi, masukkan. 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 Uh-huh. 821 00:36:41,110 --> 00:36:42,670 Sebagai samping, aku menarik beberapa. 822 00:36:42,670 --> 00:36:45,470 Ini seperti 10 menit prokrastinasi pagi ini. 823 00:36:45,470 --> 00:36:52,890 Jika anda juga Google "miring," pemberitahuan dengan memiringkan kepala Anda slightly-- 824 00:36:52,890 --> 00:36:55,120 dan kemudian yang satu ini mungkin paling mengerikan dari semua 825 00:36:55,120 --> 00:36:57,286 karena seseorang menghabiskan seperti hari mereka menerapkan ini 826 00:36:57,286 --> 00:36:59,880 beberapa tahun ago-- datang. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 Oh, wait-- itu bug. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Jadi berjalan pada salah satu website terbesar di dunia 831 00:37:11,410 --> 00:37:13,510 bodoh telur Paskah kecil ini. 832 00:37:13,510 --> 00:37:16,690 Mereka mungkin mengkonsumsi jumlah trivial baris kode 833 00:37:16,690 --> 00:37:19,280 hanya agar kita dapat memiliki sedikit menyenangkan hal-hal seperti itu. 834 00:37:19,280 --> 00:37:22,140 Tapi setidaknya sekarang Anda bisa beberapa dari mereka lelucon. 835 00:37:22,140 --> 00:37:28,330 >> Sekarang mari kita lihat beberapa dari putih terletak kami telah memberitahu akhir-akhir ini, 836 00:37:28,330 --> 00:37:30,707 dan mulai mengupas beberapa lapisan teknis 837 00:37:30,707 --> 00:37:32,790 sehingga Anda benar-benar memahami apa yang telah terjadi 838 00:37:32,790 --> 00:37:34,860 dan Anda dapat memahami beberapa ancaman, 839 00:37:34,860 --> 00:37:38,060 seperti SHELLSHOCK, bahwa sekarang sudah mulai menjadi 840 00:37:38,060 --> 00:37:41,110 di garis depan semua orang perhatian, setidaknya di media. 841 00:37:41,110 --> 00:37:45,810 Jadi di sini adalah fungsi yang sangat sederhana yang mengembalikan apa-apa, tidak berlaku. 842 00:37:45,810 --> 00:37:46,790 Namanya adalah swap. 843 00:37:46,790 --> 00:37:50,880 Dibutuhkan dua variabel dan mengembalikan apa-apa. 844 00:37:50,880 --> 00:37:52,260 Membawa dalam a dan b. 845 00:37:52,260 --> 00:37:53,337 Jadi demonstrasi cepat. 846 00:37:53,337 --> 00:37:54,170 Kami membawa ini ke atas. 847 00:37:54,170 --> 00:37:56,100 Kami mungkin juga mengambil sedikit istirahat di sini untuk sesaat 848 00:37:56,100 --> 00:37:57,250 dan memiliki sedikit sesuatu untuk minum. 849 00:37:57,250 --> 00:38:00,120 Jika seseorang tidak keberatan bergabung saya di sini untuk sesaat. 850 00:38:00,120 --> 00:38:01,830 Bagaimana Anda di kemeja merah marun? 851 00:38:01,830 --> 00:38:02,335 Ayo up. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Hanya satu hari ini. 854 00:38:05,260 --> 00:38:06,251 Terima kasih, meskipun. 855 00:38:06,251 --> 00:38:08,000 Baiklah, dan kami memiliki datang yang di sini? 856 00:38:08,000 --> 00:38:08,660 Siapa nama Anda? 857 00:38:08,660 --> 00:38:09,360 >> SPEAKER 4: Laura. 858 00:38:09,360 --> 00:38:09,740 >> SPEAKER 1: Laura. 859 00:38:09,740 --> 00:38:10,370 Ayo up. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 Jadi Laura, tantangan yang sangat sederhana hari ini. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Senang bertemu yo. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 Baiklah. 866 00:38:16,910 --> 00:38:21,179 Jadi kita memiliki beberapa susu di sini dan kami memiliki beberapa jus jeruk di sini 867 00:38:21,179 --> 00:38:23,345 dan beberapa cangkir yang kita dipinjam dari Annenberg hari ini. 868 00:38:23,345 --> 00:38:24,178 >> SPEAKER 4: Borrowed. 869 00:38:24,178 --> 00:38:27,240 SPEAKER 1: Dan akan pergi ke depan dan memberikan setengah gelas ini. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 Baiklah. 872 00:38:28,800 --> 00:38:30,750 Dan kami akan memberikan setengah segelas susu. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 Oh, dan hanya sehingga Anda dapat ingat apa ini seperti, 875 00:38:35,890 --> 00:38:38,860 Saya ingat untuk membawa ini dan pada hari ini. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 Oke. 878 00:38:42,530 --> 00:38:45,470 Jika Anda tidak keberatan, mari kita lihat, kita dapat menempatkan mereka di atas gelas Anda sendiri 879 00:38:45,470 --> 00:38:46,560 jika Anda ingin. 880 00:38:46,560 --> 00:38:48,710 Ini akan menjadi dunia dari mata Laura. 881 00:38:48,710 --> 00:38:49,210 Baiklah. 882 00:38:49,210 --> 00:38:53,820 Jadi tujuan Anda, mengingat dua cangkir cair di sini, susu dan jus jeruk, 883 00:38:53,820 --> 00:38:58,370 adalah menukar dua isi sehingga jus jeruk masuk ke cangkir susu 884 00:38:58,370 --> 00:39:00,710 dan susu masuk ke cangkir jus jeruk. 885 00:39:00,710 --> 00:39:02,359 >> SPEAKER 4: Apakah saya mendapatkan secangkir lagi? 886 00:39:02,359 --> 00:39:05,650 SPEAKER 1: Aku sangat senang kau bertanya, meskipun itu akan menjadi rekaman yang jauh lebih baik 887 00:39:05,650 --> 00:39:06,710 jika Anda tidak bertanya. 888 00:39:06,710 --> 00:39:10,620 Tapi ya, kami bisa memberikan sepertiga cangkir yang kosong, tentu saja. 889 00:39:10,620 --> 00:39:11,120 Baiklah. 890 00:39:11,120 --> 00:39:12,300 Jadi menukar isi sana. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Sangat bagus. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Sangat bagus. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Anda melakukan ini sangat hati-hati. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 Dan langkah ketiga. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 Baiklah. 901 00:39:31,350 --> 00:39:31,930 Sangat baik. 902 00:39:31,930 --> 00:39:33,930 Sebuah tepuk tangan meriah akan baik bagi Laura. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 Baiklah. 905 00:39:37,000 --> 00:39:40,790 Kami memiliki hadiah perpisahan kecil untuk Anda, tapi biarkan aku ambil ini. 906 00:39:40,790 --> 00:39:42,620 Terima kasih banyak. 907 00:39:42,620 --> 00:39:46,170 Jadi contoh sederhana, meskipun, untuk menunjukkan bahwa jika Anda 908 00:39:46,170 --> 00:39:48,300 ingin menukar isi dari dua kontainer, 909 00:39:48,300 --> 00:39:52,360 atau mari kita sebut mereka variabel, Anda membutuhkan penyimpanan sementara 910 00:39:52,360 --> 00:39:56,710 untuk tahap salah satu isi dalam begitu bahwa Anda benar-benar dapat melakukan swap. 911 00:39:56,710 --> 00:40:01,790 Jadi memang, sumber kode di sini di C adalah wakil dari hal itu. 912 00:40:01,790 --> 00:40:06,340 Jika jus jeruk dan susu adalah b, dan kami ingin menukar dua, 913 00:40:06,340 --> 00:40:08,990 Anda bisa mencoba sesuatu yang kreatif dengan menuangkan satu ke yang lain, 914 00:40:08,990 --> 00:40:11,031 tapi itu mungkin tidak akan berakhir dengan baik. 915 00:40:11,031 --> 00:40:15,260 Dan jadi kita menggunakan cangkir ketiga, panggilan itu tmp, T-M-P oleh konvensi, 916 00:40:15,260 --> 00:40:19,370 dan menempatkan isi OJ dalam hal itu, kemudian menukar satu cangkir, 917 00:40:19,370 --> 00:40:22,610 kemudian menempatkan OJ ke dalam cangkir asli, sehingga 918 00:40:22,610 --> 00:40:25,320 mencapai, persis seperti Laura melakukan, swap. 919 00:40:25,320 --> 00:40:26,850 >> Jadi mari kita melakukan hal itu. 920 00:40:26,850 --> 00:40:30,110 Biarkan aku pergi ke depan dan membuka sebuah contoh yang 921 00:40:30,110 --> 00:40:32,720 benar-benar disebut "tidak menukar, "karena ini bukan 922 00:40:32,720 --> 00:40:36,180 sebagai hanya dilakukan seperti yang Anda bayangkan. 923 00:40:36,180 --> 00:40:41,190 Jadi dalam program ini, perhatikan bahwa Saya menggunakan stdio.h, teman lama kami. 924 00:40:41,190 --> 00:40:43,130 Saya memiliki prototipe untuk tukar di sana, yang 925 00:40:43,130 --> 00:40:45,450 berarti pelaksanaannya dunia mungkin di bawah, 926 00:40:45,450 --> 00:40:48,050 dan mari kita lihat apa ini main Program akan lakukan untuk saya. 927 00:40:48,050 --> 00:40:52,020 Saya pertama kali menyatakan int x mendapat satu, dan int y mendapat dua. 928 00:40:52,020 --> 00:40:54,930 Jadi memikirkan mereka sebagai OJ dan susu, masing-masing. 929 00:40:54,930 --> 00:40:57,100 Dan kemudian aku hanya memiliki printf mengatakan x adalah ini 930 00:40:57,100 --> 00:41:00,120 dan y adalah ini, agar aku bisa visual melihat apa yang terjadi. 931 00:41:00,120 --> 00:41:03,810 Lalu aku telah printf mengklaim bahwa aku menukar dua, 932 00:41:03,810 --> 00:41:07,100 dan kemudian saya mencetak mengklaim bahwa mereka bertukar, 933 00:41:07,100 --> 00:41:09,300 dan saya mencetak x dan y lagi. 934 00:41:09,300 --> 00:41:13,010 Jadi di sini di swap apa Laura lakukan, 935 00:41:13,010 --> 00:41:16,240 dan apa yang kami lihat di layar beberapa saat yang lalu. 936 00:41:16,240 --> 00:41:19,380 >> Jadi mari kita pergi ke depan dan sangat kecewa. 937 00:41:19,380 --> 00:41:24,690 Jangan swap, dan menjalankan tanpa swap, zoom pada output sini. 938 00:41:24,690 --> 00:41:28,320 Masukkan x adalah 1, y adalah 2, swapping bertukar. 939 00:41:28,320 --> 00:41:32,700 x masih 1, dan y masih 2. 940 00:41:32,700 --> 00:41:37,630 Jadi meskipun, terus terang, ini terlihat persis seperti, meskipun lebih teknis, 941 00:41:37,630 --> 00:41:40,730 apa Laura lakukan, tampaknya tidak bekerja. 942 00:41:40,730 --> 00:41:42,130 Jadi kenapa begitu? 943 00:41:42,130 --> 00:41:46,630 Nah, ternyata bahwa ketika kita menulis program seperti ini 944 00:41:46,630 --> 00:41:51,590 yang kedua utama, disorot sini, dan kemudian fungsi lain, seperti swap, 945 00:41:51,590 --> 00:41:54,230 disorot di sini, yang itu panggilan, dunia 946 00:41:54,230 --> 00:41:57,030 terlihat sedikit sesuatu seperti nampan ini beberapa saat yang lalu. 947 00:41:57,030 --> 00:42:00,440 Ketika main pertama dipanggil, itu seperti meminta sistem operasi 948 00:42:00,440 --> 00:42:04,030 untuk sedikit memori untuk setiap lokal variabel seperti x dan y yang memiliki utama, 949 00:42:04,030 --> 00:42:05,660 dan mereka akhirnya di sana. 950 00:42:05,660 --> 00:42:10,920 Tapi jika panggilan utama menukar, dan main lolos ke swap dua argumen, a dan b, 951 00:42:10,920 --> 00:42:16,410 jus jeruk dan susu, tidak seperti menyerahkan jus jeruk dan susu 952 00:42:16,410 --> 00:42:17,500 Laura. 953 00:42:17,500 --> 00:42:21,300 Apa komputer tidak, itu melewati salinan jus jeruk 954 00:42:21,300 --> 00:42:27,110 dan salinan dari susu Laura, sehingga apa akhirnya dalam baki ini 955 00:42:27,110 --> 00:42:32,510 adalah nilai satu dan dua, atau OJ dan susu, tetapi salinannya, 956 00:42:32,510 --> 00:42:34,790 sehingga pada saat ini dalam cerita, ada 957 00:42:34,790 --> 00:42:36,930 adalah OJ dan susu di setiap nampan. 958 00:42:36,930 --> 00:42:39,260 Ada satu dan dua di setiap nampan, 959 00:42:39,260 --> 00:42:41,720 dan fungsi swap memang bekerja. 960 00:42:41,720 --> 00:42:46,090 Ini swapping mereka di dalam dari baki paling atas kedua, 961 00:42:46,090 --> 00:42:48,147 tapi swapping yang tidak memiliki dampak. 962 00:42:48,147 --> 00:42:49,980 Dan berdasarkan hanya beberapa Prinsip dasar kami telah 963 00:42:49,980 --> 00:42:52,970 bicarakan sebelumnya, dan memang hanya beberapa menit yang lalu, apa yang 964 00:42:52,970 --> 00:42:58,770 mungkin menjelaskan mengapa perubahan a dan b dalam swap 965 00:42:58,770 --> 00:43:05,560 tidak berpengaruh pada x dan y, meskipun Aku melewati x dan y untuk fungsi swap. 966 00:43:05,560 --> 00:43:08,750 Apa kata kunci di sini bahwa mungkin menyederhanakan menjelaskan? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Saya pikir saya dengar di sini? 969 00:43:12,627 --> 00:43:13,335 AUDIENCE: Kembali. 970 00:43:13,335 --> 00:43:14,085 SPEAKER 1: Kembali? 971 00:43:14,085 --> 00:43:14,590 Tidak kembali. 972 00:43:14,590 --> 00:43:15,895 Mari kita pergi dengan yang lain. 973 00:43:15,895 --> 00:43:16,395 Apa itu? 974 00:43:16,395 --> 00:43:17,080 >> AUDIENCE: [Tak terdengar]. 975 00:43:17,080 --> 00:43:20,000 >> SPEAKER 1: OK, jadi kita bisa return-- membuat pekerjaan kembali dalam cerita, 976 00:43:20,000 --> 00:43:21,914 tapi ada penjelasan yang lebih sederhana. 977 00:43:21,914 --> 00:43:22,580 AUDIENCE: Cakupan. 978 00:43:22,580 --> 00:43:23,288 SPEAKER 1: Lingkup. 979 00:43:23,288 --> 00:43:24,300 Aku akan mengambil ruang lingkup. 980 00:43:24,300 --> 00:43:27,290 Jadi ruang lingkup, ingat di mana x dan y kita menyatakan. 981 00:43:27,290 --> 00:43:30,840 Mereka menyatakan dalam dari utama tepat di sini. 982 00:43:30,840 --> 00:43:33,200 a dan b, sementara itu, efektif menyatakan 983 00:43:33,200 --> 00:43:35,930 dalam swap, tidak cukup di kurung kurawal tetapi masih 984 00:43:35,930 --> 00:43:37,690 di wilayah umum swap. 985 00:43:37,690 --> 00:43:40,560 Jadi memang, a dan b hanya ada di dalam baki ini 986 00:43:40,560 --> 00:43:44,850 dari Annenberg, ini potongan kedua kode. 987 00:43:44,850 --> 00:43:49,500 Jadi kita memang mengubah copy, tapi itu tidak benar-benar semua yang bermanfaat. 988 00:43:49,500 --> 00:43:52,190 >> Jadi mari kita lihat tingkat ini sedikit lebih rendah. 989 00:43:52,190 --> 00:43:55,430 Aku akan kembali ke Direktori Source, 990 00:43:55,430 --> 00:43:58,330 dan aku akan lebih dulu memperbesar sini, dan hanya 991 00:43:58,330 --> 00:44:02,290 untuk mengkonfirmasi bahwa aku dalam hal ini jendela terminal yang lebih besar, 992 00:44:02,290 --> 00:44:04,430 program masih berperilaku seperti itu. 993 00:44:04,430 --> 00:44:06,840 Misalkan sekarang ini tidak disengaja. 994 00:44:06,840 --> 00:44:10,090 Jelas saya ingin swap kerja, jadi rasanya seperti bug. 995 00:44:10,090 --> 00:44:12,780 Sekarang saya bisa mulai menambahkan banyak printf untuk kode saya, 996 00:44:12,780 --> 00:44:16,010 mencetak x di sini, y atas di sini, di sini, di sini b. 997 00:44:16,010 --> 00:44:18,220 Tapi terus terang, itu mungkin apa yang Anda telah lakukan selama beberapa minggu 998 00:44:18,220 --> 00:44:20,190 sekarang, secara jam kantor dan di rumah ketika bekerja 999 00:44:20,190 --> 00:44:22,150 pada psets mencoba untuk menemukan beberapa bug. 1000 00:44:22,150 --> 00:44:25,560 Tapi Anda akan melihat, jika Anda belum melakukannya, masalah itu menetapkan tiga memperkenalkan Anda 1001 00:44:25,560 --> 00:44:31,630 untuk perintah yang disebut GDB, mana GDB, GNU debugger, 1002 00:44:31,630 --> 00:44:34,040 memiliki sendiri sejumlah besar fitur yang benar-benar dapat 1003 00:44:34,040 --> 00:44:38,160 mari kita memahami situasi seperti ini, tetapi lebih compellingly, 1004 00:44:38,160 --> 00:44:39,940 memecahkan masalah dan menemukan bug. 1005 00:44:39,940 --> 00:44:40,940 Jadi aku akan melakukan hal ini. 1006 00:44:40,940 --> 00:44:44,770 Alih-alih ./noswap, aku bukan akan menjalankan GDB ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Dengan kata lain, aku akan menjalankan saya Program tidak di Bash, teman baru kami 1009 00:44:51,200 --> 00:44:51,850 hari ini. 1010 00:44:51,850 --> 00:44:53,970 Aku akan menjalankan saya Program NOSWAP dalam 1011 00:44:53,970 --> 00:44:56,900 program lain yang disebut GDB, yang merupakan debugger, yang 1012 00:44:56,900 --> 00:45:01,035 adalah sebuah program yang dirancang untuk membantu Anda tampaknya manusia menemukan dan menghapus bug. 1013 00:45:01,035 --> 00:45:03,410 Jadi jika aku memukul Jalankan sini, ada jumlah mengerikan teks 1014 00:45:03,410 --> 00:45:04,868 bahwa Anda benar-benar tidak perlu membaca. 1015 00:45:04,868 --> 00:45:07,290 Ini dasarnya gangguan dari prompt, yang 1016 00:45:07,290 --> 00:45:10,030 Aku akan memukul Control-L bangun di atas sana. 1017 00:45:10,030 --> 00:45:11,800 Ini adalah prompt GDB. 1018 00:45:11,800 --> 00:45:15,550 Jika saya ingin menjalankan program ini sekarang, sebagai cheat ini lembar kecil di hari ini 1019 00:45:15,550 --> 00:45:21,860 geser menunjukkan, Run adalah yang pertama memerintahkan agar kita dimaksudkan untuk memperkenalkan. 1020 00:45:21,860 --> 00:45:25,150 Dan aku hanya akan mengetikkan berlari di sini dalam GDB, 1021 00:45:25,150 --> 00:45:26,811 dan memang itu berlari program saya. 1022 00:45:26,811 --> 00:45:29,310 Sekarang ada beberapa tambahan output dari layar seperti ini, 1023 00:45:29,310 --> 00:45:31,910 tapi itu hanya menjadi GDB anal dan mengatakan kepada kita apa yang terjadi. 1024 00:45:31,910 --> 00:45:34,451 Anda tidak benar-benar perlu khawatir tentang rincian ini sekarang. 1025 00:45:34,451 --> 00:45:36,890 Tapi apa benar-benar keren tentang GDB, jika saya melakukan ini lagi-- 1026 00:45:36,890 --> 00:45:42,100 Control-L membersihkan screen-- biarkan aku pergi depan dan ketik "istirahat utama," demikian, 1027 00:45:42,100 --> 00:45:45,743 ketika saya tekan Enter, pengaturan apa disebut titik istirahat di noswap.c, 1028 00:45:45,743 --> 00:45:51,270 baris 16, yang mana GDB tahu program saya benar-benar 1029 00:45:51,270 --> 00:45:53,070 adalah, fungsi saya sebenarnya. 1030 00:45:53,070 --> 00:45:55,070 Ini kita akan mengabaikan untuk saat ini tapi itu alamat 1031 00:45:55,070 --> 00:45:57,310 dalam memori khusus dari fungsi ini. 1032 00:45:57,310 --> 00:46:00,240 Jadi sekarang ketika saya mengetik menjalankan, melihat apa yang keren di sini. 1033 00:46:00,240 --> 00:46:05,650 Program saya istirahat di garis I mengatakan GDB untuk menghentikan eksekusi pada. 1034 00:46:05,650 --> 00:46:09,850 Jadi saya tidak harus sekarang mengubah kode saya, menambahkan beberapa printf ini, mengkompilasi ulang itu, jalankan kembali 1035 00:46:09,850 --> 00:46:13,300 itu, mengubah, menambah beberapa printf ini, menyimpannya, mengkompilasi ulang, menjalankannya. 1036 00:46:13,300 --> 00:46:18,100 Aku hanya bisa berjalan melalui program saya langkah demi langkah demi langkah dengan kecepatan manusia, 1037 00:46:18,100 --> 00:46:20,880 tidak pada Intel-inside jenis kecepatan. 1038 00:46:20,880 --> 00:46:24,580 >> Jadi sekarang melihat baris ini muncul di sini, dan jika aku kembali 1039 00:46:24,580 --> 00:46:27,800 untuk program saya di gedit, melihat bahwa yang sebenarnya 1040 00:46:27,800 --> 00:46:29,280 baris pertama kode. 1041 00:46:29,280 --> 00:46:31,240 Ada baris 16 di gedit. 1042 00:46:31,240 --> 00:46:34,610 Ada baris 16 dalam GDB, dan bahkan meskipun antarmuka hitam dan putih ini 1043 00:46:34,610 --> 00:46:37,760 tidak hampir sebagai pengguna anak, ini berarti 1044 00:46:37,760 --> 00:46:41,680 bahwa garis 16 belum dieksekusi , tapi itu akan menjadi. 1045 00:46:41,680 --> 00:46:46,220 Jadi memang jika saya ketik cetak x, tidak printf, hanya print x, 1046 00:46:46,220 --> 00:46:50,730 Saya mendapatkan beberapa nilai palsu di sana dari nol, karena x belum diinisialisasi belum. 1047 00:46:50,730 --> 00:46:54,760 Jadi aku akan mengetik berikutnya, atau, jika Anda ingin menjadi mewah, hanya n untuk berikutnya. 1048 00:46:54,760 --> 00:46:59,090 Tapi ketika saya ketik selanjutnya masukkan, sekarang melihat itu bergerak ke baris 17. 1049 00:46:59,090 --> 00:47:02,840 Jadi logis, jika saya sudah dieksekusi baris 16 dan sekarang saya mengetikkan print x, 1050 00:47:02,840 --> 00:47:03,640 apa yang harus saya lihat? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 Satu. 1053 00:47:05,520 --> 00:47:07,820 >> Dan sekarang ini diakui membingungkan. 1054 00:47:07,820 --> 00:47:11,260 $ 2 hanya cara mewah, jika Anda ingin lihat nilai itu nanti, 1055 00:47:11,260 --> 00:47:12,510 Anda bisa mengatakan "dollar menandatangani dua." 1056 00:47:12,510 --> 00:47:13,480 Hal ini seperti referensi kembali. 1057 00:47:13,480 --> 00:47:14,570 Tapi untuk saat ini, abaikan saja. 1058 00:47:14,570 --> 00:47:17,070 Yang menarik adalah apa yang di sebelah kanan tanda sama. 1059 00:47:17,070 --> 00:47:21,000 Dan jika saya ketik next lagi dan mencetak y, saya harus melihat 2. 1060 00:47:21,000 --> 00:47:23,870 Saya juga sekarang dapat mencetak x lagi, dan terus terang, 1061 00:47:23,870 --> 00:47:27,130 jika saya mendapatkan sedikit bingung keberadaan saya, saya bisa mengetik daftar untuk daftar 1062 00:47:27,130 --> 00:47:30,590 dan hanya melihat beberapa konteks sekitar titik aku benar-benar di. 1063 00:47:30,590 --> 00:47:35,180 Dan sekarang saya bisa mengetik berikutnya, dan ada x adalah 1. 1064 00:47:35,180 --> 00:47:36,300 Sekarang saya ketik selanjutnya. 1065 00:47:36,300 --> 00:47:37,710 Oh, y adalah 2. 1066 00:47:37,710 --> 00:47:40,750 Dan lagi, itu membingungkan, karena keluaran GDB ini 1067 00:47:40,750 --> 00:47:43,044 sedang bercampur dengan output saya sendiri. 1068 00:47:43,044 --> 00:47:45,710 Tetapi jika Anda perlu diingat, berdasarkan melirik bolak-balik kode Anda 1069 00:47:45,710 --> 00:47:47,740 atau meletakkan keluar sisi berdampingan mungkin, Anda akan 1070 00:47:47,740 --> 00:47:51,020 melihat yang benar-benar aku hanya melangkah melalui program saya. 1071 00:47:51,020 --> 00:47:54,620 >> Tapi perhatikan apa yang terjadi selanjutnya, secara harfiah. 1072 00:47:54,620 --> 00:47:56,380 Berikut baris 22. 1073 00:47:56,380 --> 00:48:01,315 Biarkan aku pergi di atasnya, sehingga bergerak pada menjadi 23, dan jika saya mencetak x sekarang, masih satu. 1074 00:48:01,315 --> 00:48:03,890 Dan jika saya mencetak y sekarang, masih satu. 1075 00:48:03,890 --> 00:48:05,820 Jadi ini bukan latihan yang berguna. 1076 00:48:05,820 --> 00:48:07,450 Jadi mari kita mengulang ini. 1077 00:48:07,450 --> 00:48:10,069 Biarkan aku pergi kembali ke top dan jenis run lagi. 1078 00:48:10,069 --> 00:48:12,110 Dan itu mengatakan program yang sedang debugged 1079 00:48:12,110 --> 00:48:14,109 sudah dimulai, mulai dari awal. 1080 00:48:14,109 --> 00:48:15,420 Ya, mari kita lakukan ini lagi. 1081 00:48:15,420 --> 00:48:22,000 Dan kali ini mari kita lakukan selanjutnya, next, next, next, next, 1082 00:48:22,000 --> 00:48:24,180 tapi sekarang hal-hal menarik. 1083 00:48:24,180 --> 00:48:27,760 Sekarang saya ingin melangkah ke swap, jadi saya tidak mengetik berikutnya. 1084 00:48:27,760 --> 00:48:34,380 Saya ketik langkah, dan sekarang menyadarinya telah melompat saya garis noswap.c 33. 1085 00:48:34,380 --> 00:48:37,240 Jika saya kembali ke gedit, apa baris 33? 1086 00:48:37,240 --> 00:48:40,500 Itulah pertama sebenarnya baris kode dalam swap. 1087 00:48:40,500 --> 00:48:44,150 Yang bagus, karena sekarang aku bisa jenis melihat-lihat dan mendapatkan penasaran 1088 00:48:44,150 --> 00:48:46,052 seperti apa yang terjadi benar-benar di sana. 1089 00:48:46,052 --> 00:48:46,760 Biarkan saya mencetak tmp. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Whoa. 1092 00:48:48,800 --> 00:48:51,438 Mengapa tmp memiliki beberapa gila, palsu nilai sampah? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 AUDIENCE: Belum diinisialisasi. 1095 00:48:56,120 --> 00:48:57,150 SPEAKER 1: Ini belum diinisialisasi. 1096 00:48:57,150 --> 00:49:00,270 Dan memang, ketika Anda menjalankan sebuah program, Anda diberi sejumlah besar memori 1097 00:49:00,270 --> 00:49:03,392 oleh sistem operasi, tetapi Anda belum diinisialisasi nilai-nilai, 1098 00:49:03,392 --> 00:49:05,600 sehingga bit apa pun yang Anda lihat di sini, meskipun itu 1099 00:49:05,600 --> 00:49:07,770 negatif ini besar gila jumlah, hanya berarti 1100 00:49:07,770 --> 00:49:10,750 bahwa mereka adalah sisa-sisa dari beberapa penggunaan sebelumnya RAM itu, 1101 00:49:10,750 --> 00:49:13,050 meskipun saya belum sendiri membutuhkannya belum. 1102 00:49:13,050 --> 00:49:17,086 Jadi sekarang aku akan pergi ke depan dan jenis berikutnya, dan jika sekarang saya mengetikkan print tmp, 1103 00:49:17,086 --> 00:49:17,835 apa yang harus saya lihat? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Apapun nilai dari itu, adalah argumen pertama, hanya 1106 00:49:23,360 --> 00:49:25,550 seperti x adalah yang pertama Hal yang berlalu dalam, 1107 00:49:25,550 --> 00:49:30,450 jadi dan x harus sama, jadi mencetak tmp harus mencetak saya satu. 1108 00:49:30,450 --> 00:49:36,360 >> Jadi apa yang Anda akan melihat di masalah set tiga adalah tutorial macam pada GDB, 1109 00:49:36,360 --> 00:49:40,020 tetapi menyadari bahwa ini adalah awal dari melihat alat yang benar-benar akan 1110 00:49:40,020 --> 00:49:42,774 membantu Anda memecahkan masalah jauh lebih efektif. 1111 00:49:42,774 --> 00:49:44,690 Apa yang kita akhirnya akan lakukan pada Rabu 1112 00:49:44,690 --> 00:49:48,180 adalah mulai mengupas beberapa lapisan dan menghapus beberapa roda pelatihan. 1113 00:49:48,180 --> 00:49:50,496 Itu hal yang disebut string yang kami telah digunakan untuk beberapa waktu, 1114 00:49:50,496 --> 00:49:53,370 kita akan perlahan-lahan mengambilnya dari Anda dan mulai berbicara tentang 1115 00:49:53,370 --> 00:49:55,725 sesuatu yang lebih esoterically dikenal sebagai char *, 1116 00:49:55,725 --> 00:49:59,550 tapi kami akan melakukan yang baik ini dan lembut pada awalnya, meskipun pointer, 1117 00:49:59,550 --> 00:50:02,730 Mereka menyebutnya, dapat melakukan beberapa hal yang sangat buruk jika disalahgunakan, 1118 00:50:02,730 --> 00:50:06,040 dengan melihat claymation sedikit dari teman kita Nick Parlante dari Stanford 1119 00:50:06,040 --> 00:50:09,670 University, seorang profesor di komputer ilmu yang mengumpulkan pratayang ini 1120 00:50:09,670 --> 00:50:11,075 dari apa yang akan datang Rabu ini. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [VIDEO PEMUTARAN] 1123 00:50:13,400 --> 00:50:13,900 Hei, Binky. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Bangun. 1126 00:50:15,780 --> 00:50:17,240 Sudah waktunya untuk pointer menyenangkan. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> Apa itu? 1129 00:50:19,350 --> 00:50:21,150 Pelajari tentang pointer? 1130 00:50:21,150 --> 00:50:22,050 Oh, goody! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [END VIDEO PUTAR] 1133 00:50:23,730 --> 00:50:25,396 SPEAKER 1: Itu menanti Anda pada hari Rabu. 1134 00:50:25,396 --> 00:50:26,440 Kami akan lihat nanti. 1135 00:50:26,440 --> 00:50:27,106 [VIDEO PEMUTARAN] 1136 00:50:27,106 --> 00:50:30,420 -Dan Sekarang, Deep Thoughts, oleh Daven Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> Kenapa kita belajar C? 1139 00:50:35,900 --> 00:50:36,785 Mengapa tidak A +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [Tertawa] 1142 00:50:40,910 --> 00:50:42,160 >> [END VIDEO PUTAR]