1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> DAVID J. MALAN: Ini adalah CS50 dan ini adalah permulaan minggu empat. 3 00:00:14,050 --> 00:00:18,630 Dan, kanak-kanak, adalah Volkswagen di masalah semua kerana perisian. 4 00:00:18,630 --> 00:00:20,264 Marilah kita lihat. 5 00:00:20,264 --> 00:00:20,930 [VIDEO MAIN SEMULA] 6 00:00:20,930 --> 00:00:25,560 -Cars, Watak-watak bijak dalam filem Fast and Furious. 7 00:00:25,560 --> 00:00:29,100 Minggu ini automotif Jerman Volkswagen mendapati dirinya 8 00:00:29,100 --> 00:00:32,490 di tengah-tengah skandal perkadaran yang berpotensi jenayah. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen Bersedia untuk menghadapi berbilion denda, tuduhan jenayah mungkin 10 00:00:36,060 --> 00:00:38,560 untuk kakitangannya, kerana syarikat itu meminta maaf 11 00:00:38,560 --> 00:00:41,840 untuk penipuan 11 juta kereta ke membantu ia menewaskan ujian pelepasan. 12 00:00:41,840 --> 00:00:44,950 >> Model diesel -Certain adalah direka dengan perisian yang canggih 13 00:00:44,950 --> 00:00:48,440 bahawa maklumat yang digunakan termasuk kedudukan stereng dan kenderaan 14 00:00:48,440 --> 00:00:51,870 mempercepatkan untuk menentukan kereta itu menjalani ujian pelepasan. 15 00:00:51,870 --> 00:00:55,650 Di bawah keadaan yang, enjin akan mengurangkan pelepasan toksik. 16 00:00:55,650 --> 00:00:59,070 Tetapi kereta itu rigged untuk bypass bahawa apabila ia dipandu. 17 00:00:59,070 --> 00:01:03,320 Pengeluaran meningkat 10 hingga 40 kali melebihi paras EPA boleh diterima. 18 00:01:03,320 --> 00:01:04,280 >> [AKHIR MAIN SEMULA] 19 00:01:04,280 --> 00:01:05,220 >> DAVID J. MALAN: Jadi mari kita kita lihat ini 20 00:01:05,220 --> 00:01:07,250 dan melihat dengan jelas bagaimana ini mungkin dilaksanakan 21 00:01:07,250 --> 00:01:09,680 dan bagaimana ini mungkin memberi kesan kepada begitu banyak kereta seperti ini. 22 00:01:09,680 --> 00:01:12,840 Jadi, dalam tangan saya di sini adalah akhbar melepaskan yang telah dikeluarkan oleh EPA-- 23 00:01:12,840 --> 00:01:14,620 Alam Sekitar Agensi Perlindungan yang 24 00:01:14,620 --> 00:01:18,032 merupakan agensi pengawal selia AS yang mengendalikan masalah alam sekitar, 25 00:01:18,032 --> 00:01:19,740 dan kemudian sebenar notis undang-undang itu adalah 26 00:01:19,740 --> 00:01:22,420 hantar ke Volkswagen hanya beberapa hari lalu. 27 00:01:22,420 --> 00:01:26,530 >> Jadi EPA menulis, dan menzahirkan sekarang kepada umum, perisian canggih 28 00:01:26,530 --> 00:01:29,390 algoritma tertentu pada Kenderaan Volkswagen mengesan 29 00:01:29,390 --> 00:01:32,630 apabila kereta yang sedang menjalani ujian pelepasan rasmi 30 00:01:32,630 --> 00:01:36,505 dan bertukar pelepasan penuh mengawal pada hanya semasa ujian. 31 00:01:36,505 --> 00:01:38,380 Keberkesanan pencemaran kenderaan ini 32 00:01:38,380 --> 00:01:43,260 alat-alat kawalan pelepasan adalah amat dikurangkan semasa semua pemanduan biasa 33 00:01:43,260 --> 00:01:44,320 situasi. 34 00:01:44,320 --> 00:01:48,190 Ini menyebabkan kereta yang memenuhi piawaian dalam makmal atau ujian 35 00:01:48,190 --> 00:01:52,790 stesen, tetapi semasa operasi biasa mengeluarkan oxides-- nitrogen atau NOx-- 36 00:01:52,790 --> 00:01:54,950 pada sehingga 40 kali piawaian. 37 00:01:54,950 --> 00:01:58,220 Perisian yang dihasilkan oleh Volkswagen adalah alat quote unquote, kekalahan, 38 00:01:58,220 --> 00:02:00,650 seperti yang ditakrifkan oleh Bersih Akta Udara di Amerika Syarikat. 39 00:02:00,650 --> 00:02:03,410 >> Mereka pergi untuk mengatakan bahawa EPA dan agensi lain 40 00:02:03,410 --> 00:02:07,020 membongkar peranti kekalahan perisian selepas analisis bebas 41 00:02:07,020 --> 00:02:09,660 oleh penyelidik di Barat Virginia University. 42 00:02:09,660 --> 00:02:14,160 Pencemaran NOx menyumbang kepada nitrogen dioksida, ozon permukaan tanah, 43 00:02:14,160 --> 00:02:15,700 dan bahan zarahan halus. 44 00:02:15,700 --> 00:02:18,090 Pendedahan kepada pencemar telah dikaitkan 45 00:02:18,090 --> 00:02:20,870 dengan pelbagai kesan-kesan kesihatan yang serius, 46 00:02:20,870 --> 00:02:23,637 termasuk asma meningkat serangan dan pernafasan yang lain 47 00:02:23,637 --> 00:02:26,470 penyakit yang boleh menjadi cukup serius untuk menghantar orang ke hospital. 48 00:02:26,470 --> 00:02:28,660 Pendedahan kepada ozon dan zarah juga telah 49 00:02:28,660 --> 00:02:31,960 telah dikaitkan dengan pra-matang kematian akibat pernafasan yang berkaitan 50 00:02:31,960 --> 00:02:35,690 atau kardiovaskular kesan yang berkaitan. 51 00:02:35,690 --> 00:02:38,940 Kanak-kanak, orang tua, orang-orang yang penyakit pernafasan yang wujud terlebih dahulu 52 00:02:38,940 --> 00:02:42,840 adalah sangat berisiko untuk kesan-kesan kesihatan pencemar ini. 53 00:02:42,840 --> 00:02:45,056 >> Memadai untuk mengatakan, ia agak serius. 54 00:02:45,056 --> 00:02:46,930 Dan mari kita pergi untuk membaca hanya satu petikan lebih 55 00:02:46,930 --> 00:02:49,370 dan kemudian kita akan lihat pada implikasi yang mendasari 56 00:02:49,370 --> 00:02:50,920 ini dalam konteks sebuah kereta. 57 00:02:50,920 --> 00:02:53,730 Secara khusus, Volkswagen dihasilkan dan dipasang 58 00:02:53,730 --> 00:02:56,210 perisian dalam apa yang dikenali sebagai kawalan elektronik 59 00:02:56,210 --> 00:02:59,320 module-- atau ECM-- daripada kenderaan ini yang dikesan 60 00:02:59,320 --> 00:03:03,580 apabila kenderaan itu sedang diuji untuk mematuhi standard pelepasan EPA. 61 00:03:03,580 --> 00:03:07,510 Berdasarkan pelbagai input termasuk kedudukan stereng, kenderaan 62 00:03:07,510 --> 00:03:11,280 kelajuan, tempoh enjin ini operasi, dan tekanan barometer, 63 00:03:11,280 --> 00:03:13,720 input ini dengan tepat dikesan parameter 64 00:03:13,720 --> 00:03:17,600 prosedur ujian persekutuan digunakan untuk ujian pelepasan untuk pensijilan EPA 65 00:03:17,600 --> 00:03:18,400 tujuan. 66 00:03:18,400 --> 00:03:21,850 >> Semasa ujian pelepasan EPA, perisian kenderaan ECM 67 00:03:21,850 --> 00:03:25,060 perisian yang menghasilkan berlari pelepasan mematuhi keputusan. 68 00:03:25,060 --> 00:03:28,340 Pada waktu yang lain, yang perisian kenderaan ECM 69 00:03:28,340 --> 00:03:31,090 berlari jalan yang berasingan penentukuran yang mengurangkan 70 00:03:31,090 --> 00:03:34,360 keberkesanan sistem kawalan pelepasan secara keseluruhan, 71 00:03:34,360 --> 00:03:37,864 khusus pemangkin terpilih pengurangan NOx Lean trap-- 72 00:03:37,864 --> 00:03:39,280 yang kita akan menyaksikan kira-kira dalam seketika. 73 00:03:39,280 --> 00:03:43,040 Hasilnya, pelepasan NOx meningkat dengan faktor 10 hingga 40 kali 74 00:03:43,040 --> 00:03:47,450 atas EPA tahap yang mematuhi bergantung kepada jenis kitaran memandu. 75 00:03:47,450 --> 00:03:50,800 >> Jadi apa ini benar-benar bermakna, dan kod sumber untuk menjalankan perisian 76 00:03:50,800 --> 00:03:53,190 pada Volkswagen tidak mempunyai belum didedahkan kepada umum, 77 00:03:53,190 --> 00:03:56,460 ialah, berkesan, ini bersamaan adalah suatu tempat ada di dalam 78 00:03:56,460 --> 00:03:57,830 kod Volkswagen. 79 00:03:57,830 --> 00:04:02,200 Jika anda sedang diuji, dan jika kereta mengesan faktor persekitaran tertentu 80 00:04:02,200 --> 00:04:04,330 seperti stereng kedudukan atau pergerakan 81 00:04:04,330 --> 00:04:06,710 atau kekurangan daripadanya kereta atau apa-apa bilangan faktor-faktor lain 82 00:04:06,710 --> 00:04:09,940 yang sedang hipotesis untuk menjadi sebahagian daripada formula ini, 83 00:04:09,940 --> 00:04:12,370 mereka hanya menghidupkan pelepasan penuh mengawal. 84 00:04:12,370 --> 00:04:15,670 Dalam erti kata lain, mereka mula mengeluarkan kurang daripada bahan pencemar. 85 00:04:15,670 --> 00:04:18,769 >> Yang lain, dalam setiap keadaan lain apabila ia tidak dikesan sebagai 86 00:04:18,769 --> 00:04:20,790 di dalam makmal, mereka hanya tidak. 87 00:04:20,790 --> 00:04:24,320 Dan supaya anda boleh memudahkan ini ke dalam lebih pseudokod konkrit dengan sesuatu 88 00:04:24,320 --> 00:04:24,820 macam ini. 89 00:04:24,820 --> 00:04:27,810 Jika roda beralih tetapi stereng tidak, tidak senonoh 90 00:04:27,810 --> 00:04:30,060 bahawa kereta itu adalah pada beberapa jenis berputar silinder 91 00:04:30,060 --> 00:04:32,550 tetapi dalam beberapa jenis gudang sedang diuji, 92 00:04:32,550 --> 00:04:36,070 kemudian berkelakuan sebagai EPA ingin anda untuk. 93 00:04:36,070 --> 00:04:37,960 Jika tidak tidak. 94 00:04:37,960 --> 00:04:40,420 Jadi mari kita lihat di video pendek yang 95 00:04:40,420 --> 00:04:45,391 mengambil melihat apa implikasi adalah ini sebenarnya secara mekanikal. 96 00:04:45,391 --> 00:04:48,620 >> [VIDEO MAIN SEMULA] 97 00:04:48,620 --> 00:04:52,800 >> -Last Jumaat EPA mengumumkan bahawa beberapa Volkswagen Audi kereta yang dibuat antara 2009 98 00:04:52,800 --> 00:04:55,840 dan tahun ini telah menggunakan peranti kekalahan yang dipanggil 99 00:04:55,840 --> 00:04:59,060 untuk mendapatkan sekitar undang-undang pelepasan direka untuk mengekalkan udara yang bersih. 100 00:04:59,060 --> 00:05:01,700 Tetapi apakah itu bermakna betul-betul? 101 00:05:01,700 --> 00:05:04,666 >> Well, kereta moden mempunyai berpuluh-puluh komputer di dalamnya. 102 00:05:04,666 --> 00:05:07,040 Dan sebahagian daripada mereka komputer membantu menyelaras fungsi 103 00:05:07,040 --> 00:05:09,590 enjin untuk optimum prestasi sambil memastikan 104 00:05:09,590 --> 00:05:12,340 bahawa tidak ada terlalu banyak sampah yang keluar dari paip ekzos. 105 00:05:12,340 --> 00:05:15,170 Mereka telah benar-benar telah bekerja cara ini selama beberapa dekad sekarang. 106 00:05:15,170 --> 00:05:17,380 Pada asasnya, setiap bahagian enjin kereta moden 107 00:05:17,380 --> 00:05:20,080 mempunyai sensor atau pengawal di atasnya, dan komputer ini 108 00:05:20,080 --> 00:05:23,460 membaca dalam data beribu-ribu kali setiap pelarasan membuat kedua 109 00:05:23,460 --> 00:05:26,220 seperti nisbah bahan api kepada udara yang akan masuk ke dalam silinder. 110 00:05:26,220 --> 00:05:28,730 >> Ini Volkswagen menipu dan model Audi adalah diesel, 111 00:05:28,730 --> 00:05:30,890 dan diesel mempunyai satu lagi komputer benar-benar penting 112 00:05:30,890 --> 00:05:34,030 parameter yang dikawal, yang merupakan jumlah bahan api yang tidak terbakar akan 113 00:05:34,030 --> 00:05:35,200 ke dalam ekzos. 114 00:05:35,200 --> 00:05:36,310 Nah ini tidak baik. 115 00:05:36,310 --> 00:05:39,642 Tidak bunyi seperti anda mahu bahan api yang tidak terbakar pergi ke ekzos. 116 00:05:39,642 --> 00:05:41,600 Tetapi dalam hal suatu diesel, anda mempunyai sesuatu 117 00:05:41,600 --> 00:05:46,110 dipanggil perangkap NOx yang merupakan peranti yang menyerap dan perangkap untuk nitrogen oksida 118 00:05:46,110 --> 00:05:48,880 yang pencemar yang akan jika tidak pergi ke atmosfera. 119 00:05:48,880 --> 00:05:53,040 Dan kesan yang memerangkap NOx dipertingkatkan dengan bahan api yang tidak terbakar. 120 00:05:53,040 --> 00:05:56,650 Jadi alat kekalahan adalah satu program khas dalam komputer ini yang boleh membuat ia 121 00:05:56,650 --> 00:05:59,527 kelihatan seperti kereta yang memenuhi pelepasan piawaian walaupun ia tidak. 122 00:05:59,527 --> 00:06:01,110 Volkswagen mempunyai masalah pada tangan. 123 00:06:01,110 --> 00:06:04,050 Enjin diesel dikenali untuk mendapatkan ekonomi bahan api yang besar, 124 00:06:04,050 --> 00:06:07,510 tetapi perangkap NOx hanya berfungsi dengan baik apabila lebih banyak bahan api digunakan. 125 00:06:07,510 --> 00:06:10,460 Jadi kereta itu akan mengesan, menggunakan peranti kekalahan ini, 126 00:06:10,460 --> 00:06:13,870 apabila ia telah mendapat satu pelepasan ujian, ia akan menggunakan lebih banyak bahan api, 127 00:06:13,870 --> 00:06:16,830 membuat NOx perangkap kerja dengan baik, pelepasan akan menjadi baik. 128 00:06:16,830 --> 00:06:21,130 Tetapi kemudian anda mendapatkan di jalan raya, peranti dimatikan, anda membakar bahan api yang kurang 129 00:06:21,130 --> 00:06:24,256 tetapi anda meletakkan sebanyak 40 kali lebih bahan pencemar ke atmosfera. 130 00:06:24,256 --> 00:06:26,130 Tetapi bagaimana palang pintu lakukan kereta tahu bahawa ia adalah 131 00:06:26,130 --> 00:06:27,720 diuji untuk pematuhan pelepasan? 132 00:06:27,720 --> 00:06:30,590 EPA mengatakan, ia adalah yang canggih sistem yang diperiksa perkara 133 00:06:30,590 --> 00:06:34,090 seperti kedudukan stereng, kelajuan, berapa lama enjin berada di atas, 134 00:06:34,090 --> 00:06:35,507 dan juga tekanan atmosfera. 135 00:06:35,507 --> 00:06:37,673 Dalam erti kata lain, ada ada cara ini tidak sengaja 136 00:06:37,673 --> 00:06:40,260 kerana perisian ini adalah direka dengan berhati-hati untuk mengesan 137 00:06:40,260 --> 00:06:41,630 ujian pelepasan rasmi. 138 00:06:41,630 --> 00:06:43,588 Itulah beberapa cukup serius penipuan dan itulah 139 00:06:43,588 --> 00:06:45,420 mengapa Volkswagen adalah dalam masalah yang serius. 140 00:06:45,420 --> 00:06:48,600 Malah, Ketua Pegawai Eksekutif mereka, Martin Winterkorn, baru sahaja melangkah ke bawah. 141 00:06:48,600 --> 00:06:49,820 >> Jadi apa yang berlaku seterusnya? 142 00:06:49,820 --> 00:06:53,900 Nah, jika anda salah seorang daripada setengah juta Jettas diesel, Beatles, Golfs, Passat, 143 00:06:53,900 --> 00:06:56,220 atau Audi A3s dilaksanakan, berita baik ini adalah 144 00:06:56,220 --> 00:06:57,886 bahawa kereta anda masih selamat untuk memandu. 145 00:06:57,886 --> 00:07:00,510 Anda tidak perlu menyimpannya sehingga Volkswagen mengeluarkan dipanggil semula. 146 00:07:00,510 --> 00:07:02,509 Tetapi pada satu ketika mereka mungkin akan mempunyai 147 00:07:02,509 --> 00:07:04,230 untuk mengemas kini perisian di dalam kereta anda. 148 00:07:04,230 --> 00:07:06,927 Apabila ini berlaku anda mungkin mendapat lebih sedikit batu pada tangki. 149 00:07:06,927 --> 00:07:09,260 Peguam sudah bersiap sedia untuk tuntutan mahkamah tindakan kelas 150 00:07:09,260 --> 00:07:12,500 jadi pemilik mungkin akan pampasan pada satu ketika pada masa hadapan. 151 00:07:12,500 --> 00:07:15,832 Tetapi itu tidak akan berlaku bila-bila masa tidak lama lagi. 152 00:07:15,832 --> 00:07:16,711 >> [AKHIR MAIN SEMULA] 153 00:07:16,711 --> 00:07:19,960 DAVID J. MALAN: Jadi ini sebenarnya menimbulkan satu persoalan yang lebih besar gambar yang menarik 154 00:07:19,960 --> 00:07:20,660 untuk percaya. 155 00:07:20,660 --> 00:07:21,160 Betul? 156 00:07:21,160 --> 00:07:24,300 Semua kita mempunyai iPhone atau Androids atau sesuatu dalam poket kita kemungkinan besar 157 00:07:24,300 --> 00:07:26,500 hari ini, atau komputer riba pada pusingan kami yang 158 00:07:26,500 --> 00:07:28,510 perisian yang berjalan dibuat oleh Apple dan Microsoft 159 00:07:28,510 --> 00:07:30,710 dan tandan-syarikat lain. 160 00:07:30,710 --> 00:07:34,240 Tetapi bagaimana kita tahu bahawa apa yang produk-produk perisian lakukan 161 00:07:34,240 --> 00:07:37,680 sebenarnya apa ini syarikat berkata yang mereka lakukan? 162 00:07:37,680 --> 00:07:39,610 >> Sebagai contoh, siapa yang mengatakan bahawa setiap kali anda 163 00:07:39,610 --> 00:07:42,200 membuat panggilan telefon pada iPhone anda atau Android telefon atau sebagainya, 164 00:07:42,200 --> 00:07:45,650 yang nombor telefon juga tidak dimuat naik ke pelayan beberapa syarikat 165 00:07:45,650 --> 00:07:48,399 kerana program tertentu anda telah bertulis, sama ada ia adalah operasi 166 00:07:48,399 --> 00:07:51,070 Sistem itu sendiri seperti IOS atau Android, atau kerana anda telah memuat turun 167 00:07:51,070 --> 00:07:53,880 beberapa aplikasi pihak ketiga yang entah bagaimana yang mendengar 168 00:07:53,880 --> 00:07:57,120 kepada semua yang anda taip di dalam atau di semua yang anda sebenarnya berkata. 169 00:07:57,120 --> 00:07:59,500 Bagaimana anda tahu bahawa, apabila anda semua menjalankan dilafaz 170 00:07:59,500 --> 00:08:02,590 atau Make untuk menyusun anda perisian sendiri dalam CS50, bagaimana 171 00:08:02,590 --> 00:08:06,080 adakah anda kakitangan yang CS50 sendiri, melalui perpustakaan CS50, 172 00:08:06,080 --> 00:08:08,690 belum pembalakan setiap rentetan yang anda pernah mendapat 173 00:08:08,690 --> 00:08:10,276 atau setiap inci anda pernah mendapat? 174 00:08:10,276 --> 00:08:12,900 Dengan baik, anda pasti dapat melihat kod sumber untuk sesuatu 175 00:08:12,900 --> 00:08:15,233 seperti perpustakaan CS50, anda boleh melihat kod sumber 176 00:08:15,233 --> 00:08:18,170 untuk sistem operasi Linux berjalan pada CS50 IDE. 177 00:08:18,170 --> 00:08:23,090 Tetapi persembahan menakjubkan telah diberikan semula pada tahun 1984 178 00:08:23,090 --> 00:08:26,730 menerima Anugerah Turing oleh ahli sains komputer yang sangat terkenal yang dikenali 179 00:08:26,730 --> 00:08:29,750 as-- bernama Ken Thompson yang menerima Anugerah Turing yang 180 00:08:29,750 --> 00:08:33,500 adalah jenis komputer sains ini Hadiah Nobel, jika anda akan, 181 00:08:33,500 --> 00:08:35,309 untuk kerja-kerja pada sistem operasi yang dikenali sebagai 182 00:08:35,309 --> 00:08:39,039 Unix, yang sangat serupa dalam semangat untuk apa yang kita gunakan iaitu Linux. 183 00:08:39,039 --> 00:08:41,960 Dan soalan itu dia bertanya di dalam bukunya ucapan penerimaan, pada dasarnya 184 00:08:41,960 --> 00:08:44,910 berbaring rangka kerja bagi tahun ke tahun perbincangan 185 00:08:44,910 --> 00:08:46,970 tentang kepercayaan dan keselamatan, adalah ini. 186 00:08:46,970 --> 00:08:50,410 Sejauh manakah perlu satu amanah kenyataan bahawa program-- sekeping 187 00:08:50,410 --> 00:08:53,010 daripada software-- adalah percuma kuda Trojan? 188 00:08:53,010 --> 00:08:56,500 Mungkin ia adalah lebih penting untuk mempercayai orang-orang yang menulis perisian. 189 00:08:56,500 --> 00:08:58,650 >> Dan sebenarnya, kami telah dikaitkan ceramah bahawa dia 190 00:08:58,650 --> 00:09:02,400 memberikan apabila menerima anugerah ini dalam tahun 80-an di laman web CS50 191 00:09:02,400 --> 00:09:04,030 di bawah halaman Kuliah untuk hari ini. 192 00:09:04,030 --> 00:09:06,071 Kerana apa yang anda akan melihat adalah bahawa dia sebenarnya memberikan 193 00:09:06,071 --> 00:09:09,430 satu contoh yang agak mudah bagaimana walaupun pengkompil seperti dilafaz atau apa sahaja 194 00:09:09,430 --> 00:09:13,950 penyusun yang lain telah digunakan pada masa lalu, bagaimana jika tertanam dalam kita pengkompil 195 00:09:13,950 --> 00:09:18,190 diri kita gunakan adalah sedikit jika keadaan yang pada dasarnya berkata, 196 00:09:18,190 --> 00:09:22,360 jika anda mendapati bahawa kod ini menggunakan fungsi GetString itu atau GetInt 197 00:09:22,360 --> 00:09:26,600 fungsi, teruskan dan memasukkan pintu belakang atau kuda Trojan 198 00:09:26,600 --> 00:09:29,340 supaya program yang kini mempunyai beberapa sifar 199 00:09:29,340 --> 00:09:30,930 dan orang-orang yang melakukan sesuatu yang berniat jahat. 200 00:09:30,930 --> 00:09:33,080 Log semua anda ketukan kekunci, memuat naik data yang 201 00:09:33,080 --> 00:09:35,100 kepada beberapa pelayan, atau benar-benar apa-apa. 202 00:09:35,100 --> 00:09:37,290 >> Dan apa Ken Thompson seterusnya untuk menghabiskan ceramahnya 203 00:09:37,290 --> 00:09:40,580 adalah untuk menunjukkan bahawa walaupun anda mempunyai akses kepada sumber 204 00:09:40,580 --> 00:09:43,794 kod pengkompil yang niat jahat mungkin melakukan ini, 205 00:09:43,794 --> 00:09:46,210 ia tidak menjadi masalah kerana ada ayam dan telur 206 00:09:46,210 --> 00:09:49,500 realiti banyak lalu tahun di mana penyusun 207 00:09:49,500 --> 00:09:51,960 digunakan untuk menyusun diri mereka sendiri. 208 00:09:51,960 --> 00:09:55,440 Dalam erti kata lain, dalam perjalanan pulang apabila seseorang telah telah menulis pengkompil pertama. 209 00:09:55,440 --> 00:09:59,060 Dan selepas itu, bila-bila masa mereka telah dikemaskini pengkompil dengan menukar kod sumbernya, 210 00:09:59,060 --> 00:10:02,020 menambah ciri-ciri dan recompiling ia untuk orang seperti kita untuk menggunakan, baik, 211 00:10:02,020 --> 00:10:04,270 mereka menggunakan lama versi pengkompil 212 00:10:04,270 --> 00:10:06,370 untuk menyusun baru versi pengkompil. 213 00:10:06,370 --> 00:10:08,370 Dan jika anda melihat dengan ceramah yang dia berikan, 214 00:10:08,370 --> 00:10:10,970 anda akan melihat bahawa kerana daripada bundar itu, 215 00:10:10,970 --> 00:10:14,330 anda sebenarnya boleh mempunyai bug atau Kuda Trojan tertanam dalam perisian 216 00:10:14,330 --> 00:10:14,990 kita gunakan. 217 00:10:14,990 --> 00:10:18,010 Dan jika anda melihat penggunaan di Kod sumber untuk program-program, 218 00:10:18,010 --> 00:10:21,550 ia mungkin tidak menjadi bukti kerana tipu muslihat ini sebenarnya 219 00:10:21,550 --> 00:10:24,710 dalam beberapa versi yang lebih tua daripada pengkompil bahawa sejak telah 220 00:10:24,710 --> 00:10:27,340 menyuntik ancaman ke dalam perisian kami. 221 00:10:27,340 --> 00:10:29,740 >> Yang hanya untuk mengatakan, kita benar-benar tidak boleh dan tidak sepatutnya 222 00:10:29,740 --> 00:10:32,939 perisian amanah berjalan pada komputer riba kami atau telefon atau apa-apa bilangan tempat. 223 00:10:32,939 --> 00:10:36,230 Dan sebenarnya, kemudian pada semester ini apabila kita mula bercakap tentang pengaturcaraan web 224 00:10:36,230 --> 00:10:38,521 dan benar-benar mula membina aplikasi web diri kita sendiri, 225 00:10:38,521 --> 00:10:40,285 kita akan bercakap mengenai ancaman dan lain-lain. 226 00:10:40,285 --> 00:10:43,410 Sekarang, anda mungkin tertanya-tanya dan perasan bahawa terdapat satu Darth kecil sedikit 227 00:10:43,410 --> 00:10:45,842 Vader dalam klip yang The Verge telah menunjukkan terdapat 228 00:10:45,842 --> 00:10:47,550 tentang Volkswagen. Jika anda tidak pernah dilihat, saya 229 00:10:47,550 --> 00:10:49,190 fikir kita perlu meringankan mood kerana ini adalah semua 230 00:10:49,190 --> 00:10:50,780 sangat menyedihkan dan menakutkan. 231 00:10:50,780 --> 00:10:52,910 Saya akan melihat kembali di Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 apabila komersial oleh Volkswagen-- dan ini 233 00:10:55,300 --> 00:10:59,620 hampir membuat mereka disenangi again-- disiarkan buat pertama kali di TV. 234 00:10:59,620 --> 00:11:04,039 Ia adalah 60 klip kedua yang saya fikir anda akan menikmati. 235 00:11:04,039 --> 00:11:04,705 [VIDEO MAIN SEMULA] 236 00:11:04,705 --> 00:11:08,198 [MUZIK - TEMA DARI "STAR WARS"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [DOG BARKS] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [CAR BERMULA] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [AKHIR MAIN SEMULA] 243 00:12:05,955 --> 00:12:06,830 DAVID J. MALAN: Ya. 244 00:12:06,830 --> 00:12:07,663 Saya hanya memeriksa. 245 00:12:07,663 --> 00:12:11,360 Kereta yang berada dalam senarai pelanggaran. 246 00:12:11,360 --> 00:12:12,000 Baiklah. 247 00:12:12,000 --> 00:12:14,040 Oleh itu, kita lihat beberapa pseudokod sebentar tadi. 248 00:12:14,040 --> 00:12:15,380 Dan ini yang lebih besar coretan kod pseudo 249 00:12:15,380 --> 00:12:16,921 bahawa kita telah melihat beberapa kali setakat ini. 250 00:12:16,921 --> 00:12:19,970 Dan mari kita gunakan ini adalah satu peluang sekarang untuk memperkenalkan program baru 251 00:12:19,970 --> 00:12:23,776 teknik yang kita lakukan melihat algorithmically 252 00:12:23,776 --> 00:12:25,400 minggu lalu apabila kita melihat jenis merge. 253 00:12:25,400 --> 00:12:28,270 Tetapi mari kita merasmikan ia dan melihat bagaimana kita mungkin menggunakannya kod sebenar, 254 00:12:28,270 --> 00:12:30,350 dan kemudian kita akan menggunakan ini teknik di jalan yang paling 255 00:12:30,350 --> 00:12:32,000 mungkin untuk menyelesaikan masalah tertentu yang lain. 256 00:12:32,000 --> 00:12:35,790 >> Jadi ini adalah salah satu program pertama kita pernah menulis, walaupun kod pseudo. 257 00:12:35,790 --> 00:12:37,790 Dan apa yang program ini dibenarkan kita untuk melakukan perjalanan 258 00:12:37,790 --> 00:12:41,510 adalah untuk mencari Mike Smith dalam buku telefon. 259 00:12:41,510 --> 00:12:46,216 Dan perhatikan dalam barisan tertentu lapan dan 11 yang mempunyai ini kenyataan Kembali ke. 260 00:12:46,216 --> 00:12:48,090 Dan sebenarnya, tertentu bahasa, C di antara mereka, 261 00:12:48,090 --> 00:12:50,006 benar-benar melakukan mempunyai pernyataan yang benar-benar 262 00:12:50,006 --> 00:12:52,710 pergi ke yang membolehkan anda untuk melompat ke garisan tertentu. 263 00:12:52,710 --> 00:12:55,470 Ia secara umumnya disukai kerana ia boleh dengan mudah disalahgunakan 264 00:12:55,470 --> 00:12:58,490 dan anda boleh mula melompat anda program di seluruh tempat yang bertentangan 265 00:12:58,490 --> 00:13:00,690 menggunakan jenis logik dan aliran kawalan 266 00:13:00,690 --> 00:13:04,000 yang kami telah digunakan setakat ini dengan hanya gelung dan syarat dan sebagainya. 267 00:13:04,000 --> 00:13:08,660 >> Tetapi kita boleh memudahkan algoritma ini kod kod pseudo seperti berikut. 268 00:13:08,660 --> 00:13:11,250 Daripada ini lelaran atau pendekatan menggelung 269 00:13:11,250 --> 00:13:14,160 di mana kita terus selalu pulang belakang dan belakang untuk beratur tiga, 270 00:13:14,160 --> 00:13:18,300 mengapa tidak kita hanya jenis menyepak bola dan banyak lagi umumnya berkata selaras tujuh dan 10, 271 00:13:18,300 --> 00:13:20,570 hanya menggantikan kedua-dua pasang baris dengan, 272 00:13:20,570 --> 00:13:22,810 lain jika Smith awal dalam buku ini kita akan 273 00:13:22,810 --> 00:13:25,110 mencari Mike dalam separuh kiri buku ini. 274 00:13:25,110 --> 00:13:28,560 Lain jika Smith ialah kemudian dalam buku, cari Mike di sebelah kanan 275 00:13:28,560 --> 00:13:29,540 setengah buku ini. 276 00:13:29,540 --> 00:13:31,180 Dan perhatikan sudah bundar itu. 277 00:13:31,180 --> 00:13:31,680 Betul? 278 00:13:31,680 --> 00:13:34,250 Saya mencari Mike dalam buku telefon dan kemudian 279 00:13:34,250 --> 00:13:37,090 Saya akhirnya melanda mungkin garis tujuh atau mungkin baris 10 280 00:13:37,090 --> 00:13:41,089 dan arahan saya kepada diri saya sendiri adalah carian untuk Mike dalam separuh daripada buku telefon. 281 00:13:41,089 --> 00:13:42,380 Nah, bagaimana saya mencari Mike? 282 00:13:42,380 --> 00:13:44,213 Saya dalam pertengahan mencari Mike, mengapa 283 00:13:44,213 --> 00:13:45,860 sedang anda jenis menyuruh aku dalam satu bulatan? 284 00:13:45,860 --> 00:13:49,590 Tetapi tidak apa-apa kerana apa yang berlaku kepada saiz masalah itu, 285 00:13:49,590 --> 00:13:52,630 seperti yang ditulis dalam talian 7 dan 10? 286 00:13:52,630 --> 00:13:54,989 Kami tidak hanya mengatakan carian Mike, cari Mike. 287 00:13:54,989 --> 00:13:56,280 Kami secara khusus mengatakan apa? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Cari dia dalam separuh kiri separuh kanan yang berkesan 290 00:14:01,610 --> 00:14:03,440 separuh saiz masalah. 291 00:14:03,440 --> 00:14:07,170 Jadi ia adalah OK bahawa kita jenis melibatkan diri dalam bundar ini, 292 00:14:07,170 --> 00:14:09,180 hujah pekeliling ini, kerana sekurang-kurangnya kami 293 00:14:09,180 --> 00:14:11,090 membuat masalah yang lebih kecil dan lebih kecil. 294 00:14:11,090 --> 00:14:14,220 Dan akhirnya kita akan mencapai bahawa apa yang dipanggil kes asas di mana 295 00:14:14,220 --> 00:14:16,780 kita mempunyai hanya satu halaman left-- sebagai sukarelawan kami minggu lepas 296 00:14:16,780 --> 00:14:18,684 did-- kita mempunyai satu halaman kiri dan kemudian kita tidak 297 00:14:18,684 --> 00:14:21,600 perlu terus mencari Mike Smith kerana dia sama ada pada laman tersebut 298 00:14:21,600 --> 00:14:23,080 atau dia tidak. 299 00:14:23,080 --> 00:14:27,480 >> Jadi bagaimana kita boleh melaksanakan idea ini, ini semacam bundar kod sebenar? 300 00:14:27,480 --> 00:14:31,030 Nah, kita boleh memanfaatkan teknik yang yang yang umumnya dikenali sebagai rekursi. 301 00:14:31,030 --> 00:14:33,960 Dan kita telah melihat ini dalam pseudokod untuk merge minggu lepas. 302 00:14:33,960 --> 00:14:37,190 Ingat bahawa ini adalah pseudokod untuk jenis merge. 303 00:14:37,190 --> 00:14:40,560 Ia boleh dikatakan lebih mudah daripada gelembung atau pilihan atau memasukkan sejenis 304 00:14:40,560 --> 00:14:43,310 sahaja dari segi kesederhanaan yang anda boleh menyatakan ia. 305 00:14:43,310 --> 00:14:46,750 >> Tetapi itu kerana kami semacam circularly 306 00:14:46,750 --> 00:14:51,350 berkata, mencari sesuatu dengan mencarinya lagi. 307 00:14:51,350 --> 00:14:53,960 Tetapi kita mencari sama ada di separuh kiri atau separuh betul 308 00:14:53,960 --> 00:14:56,070 dan kemudian akhirnya kami bergabung dalam kes ini. 309 00:14:56,070 --> 00:14:58,520 Tetapi di sini, juga, dengan kedua-dua baris jenis, 310 00:14:58,520 --> 00:15:01,320 adakah kita sekali lagi mempunyai ini idea rekursi. 311 00:15:01,320 --> 00:15:05,350 Dan secara kukuh apa ini bermakna, dalam konteks algoritma, 312 00:15:05,350 --> 00:15:10,880 ialah algoritma yang adalah rekursif jika ia menggunakan atau panggilan sendiri. 313 00:15:10,880 --> 00:15:14,330 >> Atau dari segi C, fungsi adalah recursive-- fungsi yang dipanggil 314 00:15:14,330 --> 00:15:18,510 foo adalah rekursif jika foo, suatu kod sumbernya, 315 00:15:18,510 --> 00:15:21,250 panggilan fungsi foo itu sendiri. 316 00:15:21,250 --> 00:15:25,790 Dan yang tidak baik jika semua foo pernah tidak adalah panggilan sendiri lagi dan lagi. 317 00:15:25,790 --> 00:15:30,600 Tidak mengapa jika foo akhirnya berhenti, seperti juga bergabung apapun, dengan berkata, tunggu satu minit, 318 00:15:30,600 --> 00:15:32,980 jika masalah ini adalah super kecil, misalnya, 319 00:15:32,980 --> 00:15:35,840 atau saya mendapati beliau yang saya cari, hanya kembali. 320 00:15:35,840 --> 00:15:41,000 Jangan rekursif, tidak cyclically memanggil diri saya lagi. 321 00:15:41,000 --> 00:15:44,200 >> Dan jadi mari kita lihat pada bagaimana ini sebenarnya mungkin bekerja. 322 00:15:44,200 --> 00:15:48,430 Jadi, saya akan pergi ke hadapan dan terbuka dua contoh kod sumber di sini. 323 00:15:48,430 --> 00:15:50,321 Salah satu yang dipanggil sigma 0. 324 00:15:50,321 --> 00:15:52,320 Dan ini tidak sama sekali rekursi, tetapi mari kita 325 00:15:52,320 --> 00:15:53,694 yang melihat apa yang program ini tidak. 326 00:15:53,694 --> 00:15:55,737 Saya telah dilucutkan daripada semua komen daripada ia tetapi semua 327 00:15:55,737 --> 00:15:58,070 kod sumber pada itu CS50 Laman web mempunyai komen jika anda 328 00:15:58,070 --> 00:15:59,570 mahu membaca lagi kemudian. 329 00:15:59,570 --> 00:16:02,010 Dan mari kita buat pasangan kewarasan memeriksa di sini. 330 00:16:02,010 --> 00:16:06,640 >> Jadi di bahagian atas kod ini, kita ada termasuk CS50.h. 331 00:16:06,640 --> 00:16:07,650 Apakah ini lakukan? 332 00:16:07,650 --> 00:16:08,990 Mengapa di sini? 333 00:16:08,990 --> 00:16:11,740 Dari segi orang biasa yang munasabah. 334 00:16:11,740 --> 00:16:12,424 Apa yang ia buat? 335 00:16:12,424 --> 00:16:12,858 Yeah. 336 00:16:12,858 --> 00:16:14,160 >> PENONTON: Supaya fungsi GetInt berfungsi. 337 00:16:14,160 --> 00:16:16,243 >> DAVID J. MALAN: Jadi yang fungsi GetInt berfungsi. 338 00:16:16,243 --> 00:16:18,115 Oleh kerana di dalam ini fail, CS50.h, yang 339 00:16:18,115 --> 00:16:20,950 kita akan melihat tidak lama dalam segi kod sumbernya, 340 00:16:20,950 --> 00:16:23,270 mempunyai sekumpulan fungsi declared-- GetInt, GetString, 341 00:16:23,270 --> 00:16:26,950 dan mempunyai banyak others-- dan melainkan jika kita sebenarnya mempunyai yang Termasuk line, 342 00:16:26,950 --> 00:16:29,320 dilafaz pengkompil tidak akan tahu bahawa ia wujud. 343 00:16:29,320 --> 00:16:32,400 Dan sama juga dengan garis dua di mana int ditakrifkan 344 00:16:32,400 --> 00:16:35,101 printf, yang merupakan fungsi kita terus menggunakan agak sedikit. 345 00:16:35,101 --> 00:16:37,850 Sekarang, garis empat kelihatan funky kerana ia hanya satu liner satu. 346 00:16:37,850 --> 00:16:41,570 Ia mempunyai koma bertitik, tidak kerinting kawat gigi, tidak ada kod di dalamnya. 347 00:16:41,570 --> 00:16:44,640 Tetapi apa yang tidak kita panggil perkara ini dalam beberapa minggu yang lalu? 348 00:16:44,640 --> 00:16:45,140 Yeah. 349 00:16:45,140 --> 00:16:46,060 Jadi prototaip. 350 00:16:46,060 --> 00:16:48,390 Dan mengapa kita mempunyai prototaip yang seolah-olah 351 00:16:48,390 --> 00:16:51,050 menjadi berlebihan sedikit biasanya kerana kita biasanya 352 00:16:51,050 --> 00:16:53,474 lihat fungsi sekali lagi kemudian dalam fail, bukan? 353 00:16:53,474 --> 00:16:56,390 Jadi mengapa kita ada-- anda hanya menggaru kepala anda tetapi saya akan mengambilnya. 354 00:16:56,390 --> 00:16:57,302 Yeah. 355 00:16:57,302 --> 00:17:00,000 >> PENONTON: [didengar] fungsi selepas utama. 356 00:17:00,000 --> 00:17:01,000 DAVID J. MALAN: Tepat sekali. 357 00:17:01,000 --> 00:17:04,089 Supaya pengkompil tahu anda akhirnya akan menentukan atau melaksanakan 358 00:17:04,089 --> 00:17:06,579 fungsi yang selepas utama, mungkin. 359 00:17:06,579 --> 00:17:08,462 Jadi dilafaz dan paling penyusun adalah jenis bodoh 360 00:17:08,462 --> 00:17:10,510 dan mereka hanya akan tahu apa yang anda memberitahu mereka. 361 00:17:10,510 --> 00:17:12,569 Dan jika anda mahu untuk menggunakan fungsi yang dipanggil sigma, 362 00:17:12,569 --> 00:17:15,710 anda lebih baik mengajar pengkompil bahawa ia wujud terlebih dahulu. 363 00:17:15,710 --> 00:17:17,970 >> Sekarang, sendiri utama, walaupun walaupun ia mempunyai banyak baris, 364 00:17:17,970 --> 00:17:19,839 agak biasa diharapkan sekarang. 365 00:17:19,839 --> 00:17:21,942 Ia mempunyai do manakala gelung tujuan yang dalam kehidupan 366 00:17:21,942 --> 00:17:24,400 di sini nampaknya adalah untuk mendapatkan integer positif daripada pengguna. 367 00:17:24,400 --> 00:17:27,349 Dan hanya menyimpan pestering dia atau dia sehingga mereka bekerjasama. 368 00:17:27,349 --> 00:17:30,670 Kemudian pada garis 16 Saya mempunyai panggilan yang menarik. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 Yang pada tangan kiri sisi memberi saya Int 371 00:17:33,710 --> 00:17:36,650 yang boleh store-- dipanggil Answer-- yang akan menyimpan, nampaknya, 372 00:17:36,650 --> 00:17:39,090 nilai pulangan Jepun. 373 00:17:39,090 --> 00:17:41,840 Jadi sigma adalah hanya satu nama sewenang-wenangnya tetapi bermakna 374 00:17:41,840 --> 00:17:44,500 yang saya telah diberikan ke fungsi tujuan yang dalam kehidupan 375 00:17:44,500 --> 00:17:47,680 adalah untuk mengambil satu argument-- kita akan memanggilnya N dalam kes ini 376 00:17:47,680 --> 00:17:52,280 dan hanya untuk mengambil jumlah daripada jumlah itu ditambah setiap nombor positif itulah 377 00:17:52,280 --> 00:17:53,200 lebih kecil daripada itu. 378 00:17:53,200 --> 00:17:58,140 >> Jadi, jika saya lulus dalam bilangan 2 hingga sigma, saya ingin menambah 2 + 1 379 00:17:58,140 --> 00:18:00,240 ditambah 0-- tidak 0-- supaya memberikan saya 3. 380 00:18:00,240 --> 00:18:05,320 Jika saya lulus dalam 3 hingga sigma, saya ingin 3 + 2 + 1, yang memberikan saya 6. 381 00:18:05,320 --> 00:18:05,900 Dan sebagainya. 382 00:18:05,900 --> 00:18:09,750 Oleh itu, ia hanya menambah sehingga semua nombor kurang daripada atau sama dengannya. 383 00:18:09,750 --> 00:18:12,040 >> Sekarang, turun di sini saya hanya akan untuk mencetak di atas jawapan itu. 384 00:18:12,040 --> 00:18:17,330 Jadi sebagai cek kewarasan cepat, mari kita membuat sigma 0-- dot mengurangkan sigma 0-- 385 00:18:17,330 --> 00:18:18,690 dan biarlah saya taip 2. 386 00:18:18,690 --> 00:18:19,960 Dan saya memang mendapat 3. 387 00:18:19,960 --> 00:18:21,240 Biar saya taip 3. 388 00:18:21,240 --> 00:18:22,860 Saya memang mendapat 6. 389 00:18:22,860 --> 00:18:27,636 Dan jika sesiapa sahaja boleh melakukan matematik dengan cepat, jika saya lakukan 50 apa yang saya akan dapat? 390 00:18:27,636 --> 00:18:29,839 >> PENONTON: [didengar]. 391 00:18:29,839 --> 00:18:30,880 DAVID J. MALAN: Sebenarnya, tidak. 392 00:18:30,880 --> 00:18:33,340 Tetapi 1275 yang cukup rapat. 393 00:18:33,340 --> 00:18:38,850 Jadi ini adalah hasil daripada melakukan 50 plus 49 plus 48 plus 47 plus 46 394 00:18:38,850 --> 00:18:40,349 semua jalan ke 1. 395 00:18:40,349 --> 00:18:41,390 Jadi itu sahaja sigma tidak. 396 00:18:41,390 --> 00:18:43,350 Tetapi mari kita lihat bagaimana kita ada dilaksanakan sekarang. 397 00:18:43,350 --> 00:18:45,790 Jadi di bawah ini adalah fungsi itu sendiri. 398 00:18:45,790 --> 00:18:49,000 Dan ini nampaknya tidak mempunyai apa-apa kaitan dengan rekursi lagi. 399 00:18:49,000 --> 00:18:51,070 Malah, kami menggunakan teknik sekolah lama. 400 00:18:51,070 --> 00:18:56,680 Saya Memulakan sejumlah pembolehubah dipanggil kepada sifar, maka saya mempunyai foreloop di sini, 401 00:18:56,680 --> 00:19:00,790 dan saya mengisytiharkan Int dipanggil I, menetapkan ia sama dengan 1-- 402 00:19:00,790 --> 00:19:04,080 walaupun saya boleh menetapkan ia sama dengan sifar, tetapi sejak saya lakukan samping itu, 403 00:19:04,080 --> 00:19:05,340 yang mengambil berat jika ia sifar atau satu. 404 00:19:05,340 --> 00:19:06,660 Ia akan mempunyai kesan. 405 00:19:06,660 --> 00:19:10,110 >> Jadi, saya iterating selama aku adalah kurang daripada atau sama dengan m, yang 406 00:19:10,110 --> 00:19:11,671 hujah yang telah diluluskan pada. 407 00:19:11,671 --> 00:19:13,670 Dan kemudian saya hanya menyimpan menokok I. Dan wawasan 408 00:19:13,670 --> 00:19:20,010 gelung semua yang saya lakukan adalah melakukan jumlah ditambah sama I. Dan itu sengaja. 409 00:19:20,010 --> 00:19:22,326 Saya tidak mahu lakukan, dalam hal ini kes, seperti jumlah plus plus. 410 00:19:22,326 --> 00:19:24,790 Saya hendak benar-benar menambah nilai semasa saya 411 00:19:24,790 --> 00:19:28,190 yang menyimpan semakin besar dan besar dan lebih besar untuk tally berjalan. 412 00:19:28,190 --> 00:19:30,210 >> Dan kemudian saya kembali jumlah. 413 00:19:30,210 --> 00:19:33,850 Dan sebagainya jawapan mendapat jumlah nilai. 414 00:19:33,850 --> 00:19:35,282 Dan kemudian saya mencetak. 415 00:19:35,282 --> 00:19:37,740 Jadi ada peluang di sini, walaupun, untuk jenis memudahkan 416 00:19:37,740 --> 00:19:41,260 kod ini dari segi konsep dan jenis tamparan satu yang 417 00:19:41,260 --> 00:19:43,250 keberatan dari segi kesederhanaan walaupun ia 418 00:19:43,250 --> 00:19:45,700 mengambil masa yang lama untuk menyusun untuk memahami mengapa ini 419 00:19:45,700 --> 00:19:47,330 adalah kuat dalam contoh-contoh kecil. 420 00:19:47,330 --> 00:19:50,380 Berikut adalah sigma one-- jadi Versi kedua kod ini. 421 00:19:50,380 --> 00:19:55,290 Segala-galanya sehingga atas adalah sama supaya cerita yang sama berlaku seperti sebelum ini. 422 00:19:55,290 --> 00:19:59,220 Tetapi sekarang mari kita melihat pelaksanaan sigma yang 423 00:19:59,220 --> 00:20:05,040 Saya telah dikecutkan kepada ini lines-- empat baris kod, benar-benar, 424 00:20:05,040 --> 00:20:06,980 ditambah beberapa pendakap kerinting dan ruang putih. 425 00:20:06,980 --> 00:20:07,930 >> Tetapi apa yang saya buat? 426 00:20:07,930 --> 00:20:11,050 Jika m adalah kurang daripada atau sama dengan sifar, saya perlu sejenis mengendalikan 427 00:20:11,050 --> 00:20:12,490 bahawa kes super mudah. 428 00:20:12,490 --> 00:20:15,450 Dan jika anda tangan saya sifar atau apa-apa negatif yang ini pelik, 429 00:20:15,450 --> 00:20:17,909 Saya hanya akan sewenang-wenangnya tetapi konsisten kembali sifar. 430 00:20:17,909 --> 00:20:20,200 Saya tidak mahu perkara ini kepada masuk ke dalam beberapa terhingga pelik 431 00:20:20,200 --> 00:20:21,810 gelung kerana nilai negatif. 432 00:20:21,810 --> 00:20:25,070 Jadi, saya hanya berkata, jika anda memberikan saya sifar atau kurang, saya kembali sifar. 433 00:20:25,070 --> 00:20:28,220 >> Tetapi itulah yang baik kerana itulah bahawa laman tunggal buku telefon 434 00:20:28,220 --> 00:20:28,790 yang tinggal. 435 00:20:28,790 --> 00:20:32,660 Saya menggigit mencetuskan masalah yang sangat khusus dan tidak memanggil sesuatu secara berulang. 436 00:20:32,660 --> 00:20:36,580 Tetapi selaras 31, apa saya seolah-olah melakukan? 437 00:20:36,580 --> 00:20:39,780 Kurungan hanya menjaga perkara, mudah-mudahan, itu lebih jelas. 438 00:20:39,780 --> 00:20:42,110 Tetapi semua yang saya lakukan adalah saya kembali m-- apa sahaja 439 00:20:42,110 --> 00:20:45,790 anda menyerahkan me-- ditambah nilai maaf m--, 440 00:20:45,790 --> 00:20:49,052 dicampur dengan nilai sigma m tolak 1. 441 00:20:49,052 --> 00:20:50,010 Jadi apa maknanya? 442 00:20:50,010 --> 00:20:53,965 Jika anda memberikan saya nombor 3 sebagai input, jawapan yang saya ingin mendapatkan akhirnya 443 00:20:53,965 --> 00:20:57,307 adalah 6 sebab 3 + 2 + 1 memberikan 6 saya. 444 00:20:57,307 --> 00:20:59,390 Tetapi bagaimana saya berfikir tentang bagaimana kod ini berjalan? 445 00:20:59,390 --> 00:21:03,070 Kali pertama saya panggil sigma dan saya lulus dalam nilai 3, 446 00:21:03,070 --> 00:21:07,960 bahawa seperti mengatakan pada selembar kertas, di sini adalah nilai 3 447 00:21:07,960 --> 00:21:09,920 dan saya telah diluluskan ini sebagai Jepun. 448 00:21:09,920 --> 00:21:13,090 3 adalah jelas tidak kurang daripada 0 sehingga keadaan IF tidak terpakai. 449 00:21:13,090 --> 00:21:14,020 ELSE tidak. 450 00:21:14,020 --> 00:21:14,990 Jadi, apa yang saya lakukan? 451 00:21:14,990 --> 00:21:19,902 Saya mahu kembali m, yang merupakan 3, ditambah sigma m tolak 1. 452 00:21:19,902 --> 00:21:21,110 Jadi biarlah saya mengesan ini. 453 00:21:21,110 --> 00:21:22,710 Saya akan meletakkan ini sekeping kertas ke bawah. 454 00:21:22,710 --> 00:21:24,668 Dan apa nilai, untuk menjadi jelas, adakah saya akan lulus 455 00:21:24,668 --> 00:21:26,540 ke Jepun pada ketika ini dalam cerita? 456 00:21:26,540 --> 00:21:28,080 Apa nombor? 457 00:21:28,080 --> 00:21:28,610 2, bukan? 458 00:21:28,610 --> 00:21:29,670 3 tolak 1 ialah 2. 459 00:21:29,670 --> 00:21:32,000 Jadi saya hanya memerlukan sedikit sekerap kertas sini. 460 00:21:32,000 --> 00:21:33,931 Jadi sekarang sigma semakin dipanggil lagi. 461 00:21:33,931 --> 00:21:35,930 Dan saya telah sengaja meletakkan ini ke bawah kerana ia adalah 462 00:21:35,930 --> 00:21:38,070 jenis seperti berhenti bahawa versi cerita 463 00:21:38,070 --> 00:21:40,720 kerana sekarang saya menumpukan kepada isyarat m tolak 1. 464 00:21:40,720 --> 00:21:42,660 Jadi m adalah 3, m tolak 1 ialah 2. 465 00:21:42,660 --> 00:21:45,110 Jadi di sini adalah 2 yang saya telah diluluskan. 466 00:21:45,110 --> 00:21:48,510 2 adalah jelas tidak kurang daripada 0 jadi kes yang tidak terpakai. 467 00:21:48,510 --> 00:21:53,445 Yang lain aku kembali m, yang ini perkara, ditambah sigma apa nilai? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Jadi, jika sigma 1-- kerana m sekarang 2 jadi 2 tolak 1 adalah 1. 470 00:21:59,650 --> 00:22:01,950 Jadi sekarang saya mempunyai hanya nilai 1. 471 00:22:01,950 --> 00:22:04,810 Saya lulus hanya nombor yang 1 kepada fungsi sigma-- yang 472 00:22:04,810 --> 00:22:09,120 atau diri saya sini-- jadi 1 adalah jelas tidak kurang daripada sifar, masih tidak terpakai. 473 00:22:09,120 --> 00:22:12,970 >> Kembali lagi 1 + sigma apa? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Jadi biarlah saya hanya ingat bahawa. 476 00:22:14,678 --> 00:22:15,920 Saya akan kembali kepada yang kemudian. 477 00:22:15,920 --> 00:22:18,060 Sekarang saya akan pergi ke hadapan dan jot ke bawah nombor 0 kerana itulah 478 00:22:18,060 --> 00:22:19,470 hujah atau parameter saya. 479 00:22:19,470 --> 00:22:22,400 Saya lulus nombor 0 dan akhirnya proses ini 480 00:22:22,400 --> 00:22:25,760 hanya mengulangi diri saya iklan nauseum tidak berhenti kerana apa 481 00:22:25,760 --> 00:22:28,820 saya segera melakukan sekali saya melihat ini 0? 482 00:22:28,820 --> 00:22:29,790 Saya kembali sifar. 483 00:22:29,790 --> 00:22:31,790 Jadi sekarang anda mempunyai untuk putar balik cerita. 484 00:22:31,790 --> 00:22:34,430 >> Jika saya kini pergi ke dalam masa, apa adalah perkara yang paling baru-baru ini 485 00:22:34,430 --> 00:22:36,670 Saya lakukan jika anda telah benar-benar gulung semula video? 486 00:22:36,670 --> 00:22:41,630 Saya akan mengambil yang paling terkini 1 dan yang memberikan saya 1 tambah 0 ialah 1. 487 00:22:41,630 --> 00:22:44,100 Jika saya terus gulung semula yang cerita, yang akan memberi saya 488 00:22:44,100 --> 00:22:46,880 2 tambah nilai ini berjalan, iaitu 1. 489 00:22:46,880 --> 00:22:47,789 Jadi itu 3. 490 00:22:47,789 --> 00:22:49,330 Dan kemudian saya akan terus gulung semula. 491 00:22:49,330 --> 00:22:54,220 Ketika saya pertama kali menyebutkan angka 3-- jadi 3 campur 3 memberikan saya 6. 492 00:22:54,220 --> 00:22:57,272 >> Dan kini, jika anda telah diadun video ini hingga ke tahap ini, 493 00:22:57,272 --> 00:22:58,980 ini adalah sangat Soalan pertama saya bertanya. 494 00:22:58,980 --> 00:23:01,450 Apabila berlalu 3, apakah sigma 3? 495 00:23:01,450 --> 00:23:04,204 Ia sememangnya 6, jumlah semua ini keping kertas. 496 00:23:04,204 --> 00:23:07,120 Jadi, jika yang mengambil sedikit masa untuk membalut fikiran anda sekitar, itulah denda. 497 00:23:07,120 --> 00:23:10,700 Tetapi menganggap ia adalah satu little-- ia adalah sangat sengaja bahawa saya disusun 498 00:23:10,700 --> 00:23:12,990 nombor-nombor di atas satu sama lain. 499 00:23:12,990 --> 00:23:17,440 Ia adalah jenis seperti mempunyai memory-- rekod dalam masa, 500 00:23:17,440 --> 00:23:19,940 seperti scrubber dalam video, bahawa saya memang boleh putar balik masuk. 501 00:23:19,940 --> 00:23:24,350 Dan kita akan kembali kepada yang metafora dalam hanya sedikit. 502 00:23:24,350 --> 00:23:28,240 >> Tetapi pertama, ternyata bahawa ada banyak Geeks dan orang-orang lucu, 503 00:23:28,240 --> 00:23:29,614 Saya rasa, di Google. 504 00:23:29,614 --> 00:23:31,530 Adakah seseorang yang amat baik pada fikiran Googling 505 00:23:31,530 --> 00:23:34,270 datang hanya untuk seketika dan membantu saya mencari sesuatu? 506 00:23:34,270 --> 00:23:35,650 Sangat, yang penting sangat rendah. 507 00:23:35,650 --> 00:23:37,870 Seseorang yang tak pernah datang sebelum, mungkin. 508 00:23:37,870 --> 00:23:38,370 OKAY. 509 00:23:38,370 --> 00:23:39,030 Ya? 510 00:23:39,030 --> 00:23:39,530 Datang pada. 511 00:23:39,530 --> 00:23:41,410 Ayuh ke bawah. 512 00:23:41,410 --> 00:23:42,183 Siapa nama anda? 513 00:23:42,183 --> 00:23:42,870 >> SAM: Sam. 514 00:23:42,870 --> 00:23:44,290 >> DAVID J. MALAN: Sam, datang ke atas ke bawah. 515 00:23:44,290 --> 00:23:45,320 Ini adalah sama. 516 00:23:45,320 --> 00:23:46,280 Gembira Mengenali Anda. 517 00:23:46,280 --> 00:23:46,780 Hey. 518 00:23:46,780 --> 00:23:47,580 Datang pada lebih. 519 00:23:47,580 --> 00:23:51,290 Jadi segala-galanya yang anda lakukan, jika anda boleh, Sam, di sini adalah Google. 520 00:23:51,290 --> 00:23:53,240 Bolehkah anda mencari rekursi jangka? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Jangan merosakkan. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> Dan kini let's-- yeah. 525 00:24:00,970 --> 00:24:03,380 OK Klik itu. 526 00:24:03,380 --> 00:24:04,315 Better klik itu. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ahh, mendapatkannya. 529 00:24:08,020 --> 00:24:08,520 Tidak? 530 00:24:08,520 --> 00:24:09,050 OKAY. 531 00:24:09,050 --> 00:24:10,430 Jadi mari kita buat beberapa orang lain. 532 00:24:10,430 --> 00:24:12,830 Tidak begitu banyak berkaitan akademik di sini, tetapi anda 533 00:24:12,830 --> 00:24:14,520 pernah mencari Google untuk anagram? 534 00:24:14,520 --> 00:24:15,280 >> SAM: No. 535 00:24:15,280 --> 00:24:15,520 >> DAVID J. MALAN: OK. 536 00:24:15,520 --> 00:24:17,186 Cari anagram bukannya rekursi. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Bagaimana pula serong. 539 00:24:23,790 --> 00:24:25,515 Anda pernah dicari serong? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Sekarang, yang satu ini adalah sedikit sukar untuk melihat tetapi diharapkan everything's-- OK. 542 00:24:32,692 --> 00:24:34,150 Ia hanya anda dan saya menikmati ini. 543 00:24:34,150 --> 00:24:34,690 OKAY. 544 00:24:34,690 --> 00:24:38,950 >> Jadi akhirnya, one's-- ini ia adalah satu serong sedikit. 545 00:24:38,950 --> 00:24:40,810 Kini melakukan roll setong. 546 00:24:40,810 --> 00:24:44,460 547 00:24:44,460 --> 00:24:45,310 Hebat. 548 00:24:45,310 --> 00:24:45,910 Baiklah. 549 00:24:45,910 --> 00:24:47,110 Terima kasih kepada Sam. 550 00:24:47,110 --> 00:24:49,416 Di sini anda pergi. 551 00:24:49,416 --> 00:24:50,400 Terima kasih. 552 00:24:50,400 --> 00:24:52,807 >> Jadi apa yang berlaku di dalam semua contoh-contoh ini bodoh? 553 00:24:52,807 --> 00:24:55,640 Jadi benar-benar, di bawah bonet Berjuta-juta Google baris kod 554 00:24:55,640 --> 00:24:58,860 nampaknya adalah bodoh beberapa IF keadaan yang pada dasarnya 555 00:24:58,860 --> 00:25:01,160 memeriksa jika pengguna mempunyai ditaip dalam frasa ini, 556 00:25:01,160 --> 00:25:03,760 melakukan sesuatu yang mungkin mengambil jumlah nontrivial masa 557 00:25:03,760 --> 00:25:06,080 untuk melaksanakan hanya untuk menjadi lucu dengan cara ini. 558 00:25:06,080 --> 00:25:08,430 Tetapi itu semua ia mendidih turun ke bawah hood. 559 00:25:08,430 --> 00:25:11,570 Tetapi, sudah tentu, rekursi adalah lebih daripada geekier 560 00:25:11,570 --> 00:25:13,880 contoh di kalangan mereka helah khas. 561 00:25:13,880 --> 00:25:16,880 Dan sesungguhnya ada orang lain di luar sana juga bahawa kita mungkin mempunyai tidak 562 00:25:16,880 --> 00:25:18,230 ditemui hanya lagi. 563 00:25:18,230 --> 00:25:22,830 >> Jadi kita lihat, atau menimbangkan sekarang program berikutnya, 564 00:25:22,830 --> 00:25:24,830 dan sudah tentu merebut apa-apa ini pada jalan keluar. 565 00:25:24,830 --> 00:25:28,820 Saya akan pergi ke depan dan membuka program itu 566 00:25:28,820 --> 00:25:30,920 akan cuba untuk menukar dua nilai. 567 00:25:30,920 --> 00:25:33,210 Tetapi sebelum kita pergi ke sana, mari kita buat ini. 568 00:25:33,210 --> 00:25:38,500 Bolehkah kita mendapat satu lagi sukarelawan, saya fikir? 569 00:25:38,500 --> 00:25:40,480 Adakah anda ingin menjadi sukarelawan? 570 00:25:40,480 --> 00:25:40,980 Tidak? 571 00:25:40,980 --> 00:25:41,890 Naiklah. 572 00:25:41,890 --> 00:25:42,390 Naiklah. 573 00:25:42,390 --> 00:25:42,890 Baiklah. 574 00:25:42,890 --> 00:25:44,136 Jadi nama anda adalah apa? 575 00:25:44,136 --> 00:25:44,810 >> LAUREN Lauren. 576 00:25:44,810 --> 00:25:45,768 >> DAVID J. MALAN: Lauren. 577 00:25:45,768 --> 00:25:46,890 Naiklah, Lauren. 578 00:25:46,890 --> 00:25:50,140 Jadi Lauren sedang dicabar di sini seperti berikut. 579 00:25:50,140 --> 00:25:52,310 Gembira Mengenali Anda. 580 00:25:52,310 --> 00:25:55,730 Jadi Lauren di sini mempunyai di hadapan dua cawan kosong beliau. 581 00:25:55,730 --> 00:25:57,570 Dan kami mempunyai beberapa oren jus dan susu 582 00:25:57,570 --> 00:26:00,301 dan kami akan pergi hadapan dan melakukan yang berikut. 583 00:26:00,301 --> 00:26:01,550 Kami hanya akan mengisi ini. 584 00:26:01,550 --> 00:26:07,840 Beberapa auns susu di sini dan mari kita mengisi jus oren sedikit di sini. 585 00:26:07,840 --> 00:26:11,475 >> Dan di hadapan semua ahli-ahli penonton, 586 00:26:11,475 --> 00:26:13,550 swap dua nilai cawan ini. 587 00:26:13,550 --> 00:26:16,970 Meletakkan jus oren dalam cawan susu dan susu dalam cawan jus oren. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Bagaimana anda akan melakukan ini jika anda berada di rumah dan mempunyai akses kepada bekalan lain? 590 00:26:26,150 --> 00:26:27,400 LAUREN: Letakkan dalam cawan lain. 591 00:26:27,400 --> 00:26:28,191 DAVID J. MALAN: OK. 592 00:26:28,191 --> 00:26:31,940 Jadi mari kita sementara berubah-ubah, jika kita akan. 593 00:26:31,940 --> 00:26:35,871 Dan pergi ke depan sekarang dan melaksanakan ini prosedur bertukar-sama. 594 00:26:35,871 --> 00:26:36,370 Jadi, baik. 595 00:26:36,370 --> 00:26:41,490 Kami telah meletakkan OJ ke dalam sementara berubah-ubah, susu ke dalam pembolehubah OJ itu, 596 00:26:41,490 --> 00:26:44,481 dan kini berubah sementara ke dalam pembolehubah susu. 597 00:26:44,481 --> 00:26:44,980 OKAY. 598 00:26:44,980 --> 00:26:48,740 Jadi sangat baik dilakukan setakat ini. 599 00:26:48,740 --> 00:26:50,990 Jadi ternyata out-- berpegang bahawa berfikir untuk seketika. 600 00:26:50,990 --> 00:26:54,479 Di sini, hanya geek ia sedikit, ini akan menjadi kod C yang sepadan 601 00:26:54,479 --> 00:26:55,520 bahawa kita hanya dilaksanakan. 602 00:26:55,520 --> 00:26:58,650 Kami mempunyai dua input, a dan b, kedua- yang kita hanya akan mengatakan dengan kesederhanaan adalah 603 00:26:58,650 --> 00:26:59,260 ini int. 604 00:26:59,260 --> 00:27:02,780 Dan perhatikan di sini, jika saya mahu untuk menukar nilai-nilai bagi dua pembolehubah, a dan b, 605 00:27:02,780 --> 00:27:06,890 kita memang memerlukan orang tengah, yang pembolehubah sementara, secawan sementara, 606 00:27:06,890 --> 00:27:10,830 ke dalam mana tuangkan salah satu daripada nilai supaya kita mempunyai ruang letak untuk itu. 607 00:27:10,830 --> 00:27:13,480 Tetapi kemudian kod ini betul-betul sebagai Lauren sini dilaksanakan. 608 00:27:13,480 --> 00:27:15,500 >> Sekarang, hanya untuk mendapatkan sedikit gila, ternyata 609 00:27:15,500 --> 00:27:20,930 bahawa anda boleh melakukan ini tanpa pembolehubah sementara. 610 00:27:20,930 --> 00:27:24,870 Untuk melakukan ini dengan baik, walaupun, kita akan untuk mempunyai untuk menipu dengan beberapa kimia. 611 00:27:24,870 --> 00:27:26,380 Kami mempunyai beberapa cawan tambahan di sini. 612 00:27:26,380 --> 00:27:29,600 Jadi perkara yang paling dekat yang kelihatan seperti susu dan air perhaps-- 613 00:27:29,600 --> 00:27:34,090 atau susu dan OJ-- adalah kita mempunyai beberapa air, jadi kita akan mengisi satu ini sehingga 614 00:27:34,090 --> 00:27:36,486 dengan beberapa auns air jelas. 615 00:27:36,486 --> 00:27:38,332 Itu mungkin terlalu banyak. 616 00:27:38,332 --> 00:27:38,832 Yeah. 617 00:27:38,832 --> 00:27:39,934 Yang pasti terlalu banyak. 618 00:27:39,934 --> 00:27:40,600 Pegang pada satu saat. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> Dan sekarang kita mempunyai minyak, yang, seperti yang saya ingat dari sekolah menengah kelas kimia, 621 00:27:48,420 --> 00:27:49,990 mudah-mudahan ia tidak bercampur dengan air. 622 00:27:49,990 --> 00:27:53,650 Tetapi ia jenis jenis kelihatan seperti susu dan OJ. 623 00:27:53,650 --> 00:27:55,760 Oleh sebab itu, tanpa menggunakan pembolehubah sementara, 624 00:27:55,760 --> 00:27:59,260 anda boleh menukar kedua-dua nilai? 625 00:27:59,260 --> 00:28:03,884 Jadi minyak masuk ke dalam cawan air, air masuk ke dalam cawan minyak. 626 00:28:03,884 --> 00:28:04,800 LAUREN: Tiada cawan yang lain? 627 00:28:04,800 --> 00:28:05,940 DAVID J. MALAN: Tiada cawan lain. 628 00:28:05,940 --> 00:28:07,860 Dan saya tidak ada sebenarnya diuji ini sebelum tahun ini 629 00:28:07,860 --> 00:28:10,110 jadi saya tidak tahu jika ini akan benar-benar bekerja kimia. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 Yang tidak sepatutnya berlaku. 632 00:28:18,650 --> 00:28:19,761 Adakah ia berfungsi? 633 00:28:19,761 --> 00:28:20,260 Baiklah. 634 00:28:20,260 --> 00:28:20,990 Jadi memisahkan? 635 00:28:20,990 --> 00:28:21,490 Yang baik. 636 00:28:21,490 --> 00:28:24,714 Sekarang kita mendapat untuk mendapatkan air ke dalam cawan yang lain. 637 00:28:24,714 --> 00:28:27,630 Concentrators kimia lebih bijak boleh mungkin melakukan ini lebih baik daripada saya. 638 00:28:27,630 --> 00:28:28,510 >> LAUREN: Air yang di bahagian bawah. 639 00:28:28,510 --> 00:28:31,910 >> DAVID J. MALAN: The water-- itu adalah apa yang penting kali terakhir kita lakukan ini. 640 00:28:31,910 --> 00:28:33,950 Anda perlu melakukannya dalam susunan yang betul. 641 00:28:33,950 --> 00:28:34,450 Yeah. 642 00:28:34,450 --> 00:28:35,270 Tak apa. 643 00:28:35,270 --> 00:28:37,290 Jadi sekarang kita mempunyai dua cawan minyak. 644 00:28:37,290 --> 00:28:37,790 OKAY. 645 00:28:37,790 --> 00:28:38,510 Tak apa. 646 00:28:38,510 --> 00:28:40,110 Tetapi secara kimia jika ini bekerja daripada Saya-- 647 00:28:40,110 --> 00:28:41,200 >> LAUREN: Ini adalah air. 648 00:28:41,200 --> 00:28:41,930 >> DAVID J. MALAN: Itu kebanyakannya air. 649 00:28:41,930 --> 00:28:42,430 Baiklah. 650 00:28:42,430 --> 00:28:44,210 Tetapi itu masih cawan yang sama seperti sebelum ini. 651 00:28:44,210 --> 00:28:47,570 Jadi tuangkan kitab itu cuba di sana. 652 00:28:47,570 --> 00:28:49,300 OKAY. 653 00:28:49,300 --> 00:28:51,010 Ini adalah penggunaan yang baik masa kelas hari ini. 654 00:28:51,010 --> 00:28:51,510 OKAY. 655 00:28:51,510 --> 00:28:53,890 Jadi sekarang we-- bagus. 656 00:28:53,890 --> 00:28:55,460 Lebih kurang. 657 00:28:55,460 --> 00:28:55,960 Baiklah. 658 00:28:55,960 --> 00:28:56,690 Jadi sangat baik. 659 00:28:56,690 --> 00:29:00,006 Terima kasih kepada Lauren. 660 00:29:00,006 --> 00:29:01,950 Sangat baik dilakukan. 661 00:29:01,950 --> 00:29:04,570 >> Jadi hanya untuk meniup fikiran anda, dan ini adalah sesuatu yang mungkin 662 00:29:04,570 --> 00:29:08,660 bermain dengan jika anda suka dalam ID CS50, anda boleh, sebenarnya, swap dua pembolehubah 663 00:29:08,660 --> 00:29:11,470 tanpa menggunakan integer sementara. 664 00:29:11,470 --> 00:29:13,060 Dan ini adalah kod C yang sepadan. 665 00:29:13,060 --> 00:29:16,110 Dan jika anda ingat dari lepas Rabu, kami memperkenalkan, jika secara ringkas, 666 00:29:16,110 --> 00:29:19,720 sesetengah pengendali baru dalam C. Dan tidak sesiapa masih ingat apa yang lobak merah sedikit 667 00:29:19,720 --> 00:29:23,660 simbol, bahawa segi tiga kecil simbol dari keyboard mewakili? 668 00:29:23,660 --> 00:29:26,003 Apa bitwise pengendali? 669 00:29:26,003 --> 00:29:26,770 >> PENONTON: Exor. 670 00:29:26,770 --> 00:29:27,645 >> DAVID J. MALAN: Exor. 671 00:29:27,645 --> 00:29:28,560 Eksklusif Or. 672 00:29:28,560 --> 00:29:32,920 Jadi, jika anda mahu, hanya untuk bersenang-senang di rumah, untuk memberikan dan b dua sewenang-wenangnya 673 00:29:32,920 --> 00:29:36,072 nilai-nilai seperti mana-mana eight-- dan saya akan memilih nilai lapan bit. 674 00:29:36,072 --> 00:29:38,530 Jika anda melakukan ini dengan 32 bit, anda akan cepat bosan. 675 00:29:38,530 --> 00:29:42,150 Tetapi hanya memberikan lapan bit nilai yang apa sahaja, satu atau dua, 676 00:29:42,150 --> 00:29:43,790 dan memberi b nilai yang sama. 677 00:29:43,790 --> 00:29:46,810 Dan kemudian menggunakan definisi daripada XOR dari Rabu lepas, 678 00:29:46,810 --> 00:29:52,560 memohon sedikit dengan sedikit, setiap satu mereka lapan bit dalam setiap a dan b, 679 00:29:52,560 --> 00:29:54,980 dan kemudian melakukannya betul-betul setiap kod ini. 680 00:29:54,980 --> 00:29:58,170 Dan ia bukan salah apa anda lihat di sini pada skrin. 681 00:29:58,170 --> 00:30:02,100 Ia memang bisul hingga tiga operasi XOR 682 00:30:02,100 --> 00:30:05,910 dan entah bagaimana ajaib dan b akan bertukar tempat 683 00:30:05,910 --> 00:30:08,010 tanpa kehilangan sebarang maklumat. 684 00:30:08,010 --> 00:30:11,580 >> Jadi minyak dan air helah adalah paling dekat penjelmaan dunia sebenar 685 00:30:11,580 --> 00:30:12,980 Saya boleh berfikir untuk meniru itu. 686 00:30:12,980 --> 00:30:15,950 Tetapi ia pasti lebih mudah untuk menggunakan pembolehubah sementara, 687 00:30:15,950 --> 00:30:16,920 seperti dalam kes ini di sini. 688 00:30:16,920 --> 00:30:21,190 Dan ini juga adalah peluang yang berkata, terlalu, ini jenis pengoptimuman Mikro 689 00:30:21,190 --> 00:30:23,590 sebagai seorang saintis komputer akan berkata, manakala jenis yang menyeronokkan 690 00:30:23,590 --> 00:30:27,060 bercakap gah tentang bagaimana anda melakukan ini tanpa seperti bertukar-tukar antara pembolehubah tambahan, 691 00:30:27,060 --> 00:30:28,640 bukan semua yang menarik. 692 00:30:28,640 --> 00:30:31,619 Kerana untuk menyelamatkan 32 bit, kerana dalam hal int sebenar, 693 00:30:31,619 --> 00:30:33,410 tidak semua yang menarik pada sistem di mana 694 00:30:33,410 --> 00:30:36,722 anda mungkin menggunakan berpuluh-puluh megabait atau lebih memori seperti hari ini. 695 00:30:36,722 --> 00:30:38,680 Dan sebenarnya, apabila kita kepada satu set masalah kemudian 696 00:30:38,680 --> 00:30:41,010 dan anda melaksanakan ejaan penyemak dan anda akan 697 00:30:41,010 --> 00:30:43,550 dicabar untuk berbuat demikian dengan RAM ini sebagai sedikit dan sedikit 698 00:30:43,550 --> 00:30:46,820 masa yang mungkin di computer-- anda masih 699 00:30:46,820 --> 00:30:50,160 mempunyai seminggu untuk melaksanakan kitab itu anda akan ada-- anda berada 700 00:30:50,160 --> 00:30:51,799 dicabar untuk mengurangkan sumber-sumber. 701 00:30:51,799 --> 00:30:53,840 Dan itu benar-benar satu-satunya peristiwa Seperti semester ini 702 00:30:53,840 --> 00:30:57,940 di mana anda akan digalakkan untuk mencukur off walaupun prestasi terbaik 703 00:30:57,940 --> 00:30:59,340 kos sebaliknya. 704 00:30:59,340 --> 00:31:02,200 >> Jadi what-- bagaimana boleh kita melihat ini kod sebenar? 705 00:31:02,200 --> 00:31:04,530 Biar saya pergi ke hadapan sekarang dan membuka contoh 706 00:31:04,530 --> 00:31:07,700 yang sengaja dipanggil Tiada Swap kerana ia tidak 707 00:31:07,700 --> 00:31:10,670 sebenarnya menukar pembolehubah kerana anda sebenarnya jangkakan. 708 00:31:10,670 --> 00:31:12,260 Jadi mari kita lihat. 709 00:31:12,260 --> 00:31:17,050 Berikut adalah program yang tidak mempunyai CS50 perpustakaan berlaku, hanya standard I / O. 710 00:31:17,050 --> 00:31:19,560 Sekarang kita mempunyai prototaip untuk swap sehingga atas yang hanya 711 00:31:19,560 --> 00:31:21,540 bermakna ia mendapat ditakrifkan kemudian. 712 00:31:21,540 --> 00:31:22,550 Dan di sini adalah utama. 713 00:31:22,550 --> 00:31:26,000 >> Saya sewenang-wenangnya diberikan x dan y, masing-masing, satu nilai dan dua 714 00:31:26,000 --> 00:31:28,590 hanya kerana mereka kecil dan mudah untuk berfikir tentang. 715 00:31:28,590 --> 00:31:32,280 Dan kemudian saya hanya mempunyai sekumpulan printfs di mana saya mempunyai cek kewarasan. x ialah 1 716 00:31:32,280 --> 00:31:35,110 dan y adalah 2 adalah mungkin apa yang mereka printfs akan berkata. 717 00:31:35,110 --> 00:31:36,530 Jadi ada sihir setakat ini. 718 00:31:36,530 --> 00:31:40,100 >> Kemudian saya akan menuntut dengan mencetak def, bertukar-tukar dot dot dot. 719 00:31:40,100 --> 00:31:43,730 Saya akan memanggil swap fungsi, lulus dalam x dan y. 720 00:31:43,730 --> 00:31:47,350 Dan mari kita andaikan buat masa ini memandangkan swap dilaksanakan tepat 721 00:31:47,350 --> 00:31:49,930 kerana ia adalah masa yang lalu dengan pembolehubah sementara. 722 00:31:49,930 --> 00:31:52,670 Oleh itu, saya menuntut dengan berani, bertukar. 723 00:31:52,670 --> 00:31:55,429 x kini ini dan y kini itu. 724 00:31:55,429 --> 00:31:57,220 Tetapi fail, sudah tentu, dipanggil Tiada Tukar. 725 00:31:57,220 --> 00:31:58,678 Jadi mari kita benar-benar melihat apa yang berlaku. 726 00:31:58,678 --> 00:32:04,450 Jika saya menyusun tiada pertukaran dan kemudian melakukan ./noswap, x adalah 1, y ialah 2. 727 00:32:04,450 --> 00:32:05,770 Bertukar-tukar bertukar. 728 00:32:05,770 --> 00:32:07,200 x 1, y ialah 2. 729 00:32:07,200 --> 00:32:11,980 Oleh itu, ia benar-benar seolah-olah boleh dipercayai sama sekali walaupun walaupun swap-- mari kita tatal ke bawah sekarang-- 730 00:32:11,980 --> 00:32:16,542 dilaksanakan tepat mengikut kod saya mencadangkan sebentar tadi. 731 00:32:16,542 --> 00:32:19,000 Oleh itu, kita tidak akan mendapatkan mewah dengan barangan XOR buat masa ini. 732 00:32:19,000 --> 00:32:21,890 Ini juga harus bekerja hanya seperti dengan susu dan OJ, 733 00:32:21,890 --> 00:32:25,820 tetapi ia tidak seolah-olah bekerja. 734 00:32:25,820 --> 00:32:27,180 >> Jadi mari kita buat ini lagi. 735 00:32:27,180 --> 00:32:29,310 Mungkin saya hanya tidak berjalan dengan betul. 736 00:32:29,310 --> 00:32:32,010 Jadi mari kita berjalan Tiada Swap lagi. 737 00:32:32,010 --> 00:32:32,900 Mungkin Saya-- tidak. 738 00:32:32,900 --> 00:32:34,400 Jadi ia hanya tidak berfungsi. 739 00:32:34,400 --> 00:32:36,060 Jadi mari kita buat cek kewarasan sedikit. 740 00:32:36,060 --> 00:32:39,690 Biar saya pergi ke hadapan di sini dalam Pertukaran dan hanya menambah, tunggu satu minit, 741 00:32:39,690 --> 00:32:43,856 adalah% i / n dan mari kita plug-dalam nilai a. 742 00:32:43,856 --> 00:32:45,730 Kerana saya benar-benar mahu untuk melihat apa yang sedang berlaku. 743 00:32:45,730 --> 00:32:47,570 Dan sesungguhnya, ini adalah teknik debugging 744 00:32:47,570 --> 00:32:50,028 yang anda mungkin menggunakan dalam waktu pejabat atau di rumah sudah, 745 00:32:50,028 --> 00:32:53,560 serupa dengan separuh pertama Dan Video Armendariz dalam PSET3 746 00:32:53,560 --> 00:32:56,870 di mana kami memperkenalkan cetak def sebagai teknik yang disyorkan, sekurang-kurangnya 747 00:32:56,870 --> 00:32:58,080 bagi kes-kes yang mudah. 748 00:32:58,080 --> 00:33:01,720 Biar saya pergi ke hadapan dan menjalankan membuat tiada pertukaran lagi, ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Menarik. 751 00:33:05,840 --> 00:33:11,670 Jadi notis apa yang seolah-olah benar. x adalah 1, y ialah 2, tetapi adalah 2 apabila b ialah 1. 752 00:33:11,670 --> 00:33:16,790 Jadi kedua-dua entah bagaimana tidak perlu lagi bertukar tetapi x dan y tidak mendapat bertukar. 753 00:33:16,790 --> 00:33:21,090 Jadi untuk mengetahui dengan jelas apa yang berlaku adalah, di sini saya mempunyai x dan y 754 00:33:21,090 --> 00:33:25,380 dan mereka adalah pembolehubah tempatan dalam skop utama, saya lulus dalam x dan y 755 00:33:25,380 --> 00:33:26,170 untuk menukar. 756 00:33:26,170 --> 00:33:29,080 Sekarang, pertukaran, kerana majlis berasingan, bebas untuk memanggil hujah 757 00:33:29,080 --> 00:33:30,590 atau apa-apa parameter ia mahu. 758 00:33:30,590 --> 00:33:33,280 Foo atau bar atau x atau y atau atau b. 759 00:33:33,280 --> 00:33:36,870 Hanya untuk membuat jelas bahawa mereka tidak serupa dengan x dan y semata-mata, 760 00:33:36,870 --> 00:33:38,020 Saya katakan a dan b. 761 00:33:38,020 --> 00:33:40,040 Tetapi kita boleh memanggil mereka apa-apa yang kita mahu. 762 00:33:40,040 --> 00:33:43,960 >> Dan supaya ia kelihatan seperti swap diluluskan 763 00:33:43,960 --> 00:33:48,980 x-- AKA a-- dan ia diluluskan y-- AKA b. 764 00:33:48,980 --> 00:33:51,900 Entah bagaimana ketiga-tiga garisan bertukar-tukar nilai-nilai tepat 765 00:33:51,900 --> 00:33:53,510 sebagai Lauren lakukan dengan susu dan OJ. 766 00:33:53,510 --> 00:33:56,010 Tetapi apabila kita mencetak nilai-nilai, a dan b 767 00:33:56,010 --> 00:34:01,340 memang swap tetapi x dan y tidak mempunyai perubahan kepada mereka. 768 00:34:01,340 --> 00:34:03,150 Ingat bahawa x dan y adalah di sini. 769 00:34:03,150 --> 00:34:05,320 >> Oleh itu, kita boleh melihat ini melalui teknik lain juga. 770 00:34:05,320 --> 00:34:08,110 Dan ini juga adalah teknik yang tertanam dalam masalah menetapkan tiga. 771 00:34:08,110 --> 00:34:10,780 Mari kita pergi ke hadapan dan melakukan ini dalam CS50 ID jika anda tidak sudah. 772 00:34:10,780 --> 00:34:13,730 Pada sebelah kita tangan kanan mempunyai tab Debugger ini. 773 00:34:13,730 --> 00:34:16,159 Dan jika anda membuka ini, ada beberapa maklumat yang sukar difahami 774 00:34:16,159 --> 00:34:17,530 yang yang dilemparkan pada anda pada mulanya. 775 00:34:17,530 --> 00:34:19,310 Tetapi mari kita mengusik ini selain sebenar cepat. 776 00:34:19,310 --> 00:34:21,620 >> Jadi salah, anda lihat pembolehubah tempatan. 777 00:34:21,620 --> 00:34:26,230 Ternyata membina ke CS50 IDE, dan banyak persekitaran pengaturcaraan yang lebih 778 00:34:26,230 --> 00:34:28,060 secara amnya, adalah penyahpepijat. 779 00:34:28,060 --> 00:34:31,340 Satu alat yang membolehkan anda untuk melihat secara visual apa yang berlaku di dalam program anda 780 00:34:31,340 --> 00:34:34,380 tanpa perlu mengambil jalan keluar dengan menambah printfs dan menyusun dan menjalankan 781 00:34:34,380 --> 00:34:37,588 dan menambah printf dan menyusun dan berjalan, yang sudah, pada waktu pejabat 782 00:34:37,588 --> 00:34:40,070 atau rumah, mungkin mendapat cukup membosankan. 783 00:34:40,070 --> 00:34:43,090 >> Jadi di sini, dalam hanya seketika, kami akan melihat dalam masa sebenar 784 00:34:43,090 --> 00:34:44,760 nilai-nilai pembolehubah tempatan. 785 00:34:44,760 --> 00:34:47,880 Kami juga akan dapat menetapkan apa yang dipanggil titik putus yang 786 00:34:47,880 --> 00:34:52,570 peluang dalam program saya untuk berhenti seketika pelaksanaan pada garis tertentu kod 787 00:34:52,570 --> 00:34:53,710 bahawa saya ingin tahu tentang. 788 00:34:53,710 --> 00:34:54,210 Betul? 789 00:34:54,210 --> 00:34:55,969 Program-program ini dijalankan dalam masa beberapa saat. 790 00:34:55,969 --> 00:35:00,450 Ia adalah jenis yang bagus untuk kita manusia yang lebih perlahan dapat berhenti seketika, mengambil masa, lihat 791 00:35:00,450 --> 00:35:02,380 apa yang berlaku di sekeliling garis tertentu kod 792 00:35:02,380 --> 00:35:05,050 tanpa membajak program melaluinya dan kemasan sepenuhnya. 793 00:35:05,050 --> 00:35:08,510 Jadi titik putus akan membolehkan kita untuk memecahkan dan berhenti seketika pada titik tertentu. 794 00:35:08,510 --> 00:35:12,990 >> Timbunan panggilan adalah cara yang mewah mengatakan apa fungsi kini 795 00:35:12,990 --> 00:35:14,140 dipanggil pada masa ini. 796 00:35:14,140 --> 00:35:15,370 Utama sentiasa dipanggil pertama. 797 00:35:15,370 --> 00:35:17,230 Tetapi jika Utama panggilan fungsi dipanggil Swap, 798 00:35:17,230 --> 00:35:20,470 sedang kita benar-benar akan melihat ini menara fungsi yang telah 799 00:35:20,470 --> 00:35:22,400 dipanggil dalam susunan kronologi terbalik. 800 00:35:22,400 --> 00:35:23,310 Jadi mari kita lihat itu. 801 00:35:23,310 --> 00:35:24,327 >> Saya akan zum keluar. 802 00:35:24,327 --> 00:35:25,660 Saya akan kembali ke kod saya. 803 00:35:25,660 --> 00:35:27,540 Dan hanya kerana saya mahu menjadi bengah sini, 804 00:35:27,540 --> 00:35:31,100 Saya akan pergi ke depan dan klik hanya di sebelah kiri garis lima. 805 00:35:31,100 --> 00:35:32,830 Dan yang mencipta titik merah. 806 00:35:32,830 --> 00:35:36,200 Dan perhatikan di sebelah kanan yang penyahpepijat tahu, hey, 807 00:35:36,200 --> 00:35:41,020 Saya hanya berkata, titik putus di noswap.c garis lima, khususnya 808 00:35:41,020 --> 00:35:42,480 di baris ini kod. 809 00:35:42,480 --> 00:35:45,090 Jadi penyahpepijat tahu saya yang telah meminta agar masa yang akan datang 810 00:35:45,090 --> 00:35:48,530 Saya menjalankan program saya ia jeda pelaksanaan di sana bukan hanya 811 00:35:48,530 --> 00:35:50,390 menjalankan segala-galanya super cepat. 812 00:35:50,390 --> 00:35:53,889 >> Jadi sekarang saya akan klik Debug yang butang di bahagian paling atas IDE 813 00:35:53,889 --> 00:35:55,430 dan yang akan melakukan yang berikut. 814 00:35:55,430 --> 00:36:00,680 Ia akan membuka pada mulanya agak menakutkan terminal kedua window-- 815 00:36:00,680 --> 00:36:02,679 debugging jauh dari menjadi tuan rumah dan such-- 816 00:36:02,679 --> 00:36:04,970 dan kami akan kembali kepada apa yang semua yang bermakna tidak lama lagi. 817 00:36:04,970 --> 00:36:09,020 Tetapi apa yang penting buat masa ini ialah bahawa titik merah telah melanda, 818 00:36:09,020 --> 00:36:11,735 penyahpepijat mempunyai sengaja berhenti execution-- 819 00:36:11,735 --> 00:36:15,560 tidak pada garis per se tetapi pada hari pertama baris kod yang sebenar dalam fungsi itu. 820 00:36:15,560 --> 00:36:18,040 Dan itulah sebabnya garis tujuh adalah sekarang berwarna kuning. 821 00:36:18,040 --> 00:36:20,550 >> Dan sekarang mari kita lihat di sebelah kanan. 822 00:36:20,550 --> 00:36:27,300 Ia kelihatan seperti, secara lalai, baik cukup, x mempunyai apa nilai? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 Dan y mempunyai apa nilai? 825 00:36:29,750 --> 00:36:30,410 Zero. 826 00:36:30,410 --> 00:36:35,540 Dan itulah yang diharapkan dalam erti kata yang x dan y-- bahawa garis ini-- kuning mempunyai 827 00:36:35,540 --> 00:36:36,770 tidak dilaksanakan lagi. 828 00:36:36,770 --> 00:36:38,510 Jadi x tidak perlu mempunyai nilai 1. 829 00:36:38,510 --> 00:36:41,470 Ia mungkin mempunyai apa-apa nilai lain, nilai sampah kononnya. 830 00:36:41,470 --> 00:36:44,320 Dan kami mendapat bernasib baik kerana ia sifar pada ketika ini, pada asasnya. 831 00:36:44,320 --> 00:36:46,400 >> Jadi sekarang hanya ada beberapa tempat butang kita perlu mengambil berat 832 00:36:46,400 --> 00:36:48,100 kira-kira apabila debugging dengan cara ini. 833 00:36:48,100 --> 00:36:49,970 Perhatikan di sini, kami mempunyai butang Main. 834 00:36:49,970 --> 00:36:51,877 Dan jika kita bermain atau memukul menyambung semula, itu hanya 835 00:36:51,877 --> 00:36:53,710 akan berjalan melalui sepanjang program ini 836 00:36:53,710 --> 00:36:55,300 atau sehingga ia mencecah titik putus lain. 837 00:36:55,300 --> 00:36:56,910 Tetapi saya tidak menetapkan apa-apa yang lain titik putus supaya ia hanya 838 00:36:56,910 --> 00:36:58,118 akan berjalan di penghujungnya. 839 00:36:58,118 --> 00:37:00,280 Itu jenis kekalahan yang tujuan poking sekitar. 840 00:37:00,280 --> 00:37:03,290 >> Jadi, saya mengambil berat tentang ikon ini ke kanan. 841 00:37:03,290 --> 00:37:05,360 Dan jika saya pergi ke atas mereka, kerana anda harus juga, 842 00:37:05,360 --> 00:37:07,450 anda akan melihat sedikit tips alat tips--. 843 00:37:07,450 --> 00:37:09,020 Yang ini adalah melangkah. 844 00:37:09,020 --> 00:37:11,290 Sekarang tidak bermakna skip baris kod berikut. 845 00:37:11,290 --> 00:37:14,840 Yang hanya bermakna melaksanakannya dan bergerak ke depan, bergerak ke depan, 846 00:37:14,840 --> 00:37:15,580 bergerak ke depan. 847 00:37:15,580 --> 00:37:17,610 Dengan kata lain, melalui butang itu, boleh saya berjalan 848 00:37:17,610 --> 00:37:20,390 melalui saya kod satu langkah pada satu masa. 849 00:37:20,390 --> 00:37:21,914 Baris demi baris, secara literal. 850 00:37:21,914 --> 00:37:23,830 Sekarang, di sebelah kanan itu, ada satu lagi 851 00:37:23,830 --> 00:37:25,163 yang kita akan lihat dalam hanya seketika. 852 00:37:25,163 --> 00:37:27,820 Ini adalah apa yang dikenali sebagai Langkah Ke icon itulah 853 00:37:27,820 --> 00:37:30,300 akan membenarkan saya menyelam ke fungsi yang lain. 854 00:37:30,300 --> 00:37:31,800 Tetapi mari kita lihat ini hanya seketika. 855 00:37:31,800 --> 00:37:33,280 Jadi, saya akan klik melangkah. 856 00:37:33,280 --> 00:37:35,820 Dan kini melihat, seperti yang saya klik butang ini di sebelah kanan atas, 857 00:37:35,820 --> 00:37:41,260 menjaga mata anda secara kasar di bawah Tempatan Pembolehubah dan lihat apa yang berlaku ke x. 858 00:37:41,260 --> 00:37:44,115 x kini 1 kerana garisan kuning kini telah dilaksanakan 859 00:37:44,115 --> 00:37:45,840 dan kami telah berpindah ke garisan 8. 860 00:37:45,840 --> 00:37:49,840 Dan hanya dalam masa y diharapkan dapat menjadi 2. 861 00:37:49,840 --> 00:37:52,330 >> Sekarang, apa-apa yang menarik berlaku untuk sedikit. 862 00:37:52,330 --> 00:37:53,390 Semua ini adalah adalah printf. 863 00:37:53,390 --> 00:37:58,010 Dan perhatikan, di terminal menengah saya tingkap, saya melihat output cetakan def. 864 00:37:58,010 --> 00:38:01,080 Dan sekarang saya perlu membuat keputusan sebagai pengaturcara. 865 00:38:01,080 --> 00:38:04,360 Saya boleh melangkah lebih garisan ini kod, melaksanakannya tetapi tidak 866 00:38:04,360 --> 00:38:06,220 semakin tertanya-tanya tentang apa yang di dalam. 867 00:38:06,220 --> 00:38:11,130 Atau saya benar-benar boleh melangkah ke dalamnya dan pergi di dalam Pertukaran sendiri. 868 00:38:11,130 --> 00:38:12,340 Jadi mari kita buat yang kedua. 869 00:38:12,340 --> 00:38:15,550 >> Biar saya pergi ke hadapan dan klik tidak Datang tetapi Step Into. 870 00:38:15,550 --> 00:38:17,300 Notis, tiba-tiba perubahan tetingkap 871 00:38:17,300 --> 00:38:19,330 untuk menyerlahkan pertama baris kod dalam Tukar. 872 00:38:19,330 --> 00:38:20,710 Itulah line 21. 873 00:38:20,710 --> 00:38:25,220 Dan sekarang, apa yang jenis funky ialah, jika anda melihat penggunaan di sini, seperti yang dijangkakan, 874 00:38:25,220 --> 00:38:29,720 koma b adalah 1 dan 2 masing-masing. 875 00:38:29,720 --> 00:38:33,840 Mengapa temp 32767? 876 00:38:33,840 --> 00:38:36,560 Mengimbas kembali temp bahawa, sama seperti cawan kosong masa yang lalu, 877 00:38:36,560 --> 00:38:38,980 diisytiharkan di sini pada baris 21. 878 00:38:38,980 --> 00:38:43,390 Mengapa 32,000- Maksud saya, mengapa ia hanya beberapa nilai pelik? 879 00:38:43,390 --> 00:38:43,890 Ya? 880 00:38:43,890 --> 00:38:45,190 >> PENONTON: Ia tidak dimulakan. 881 00:38:45,190 --> 00:38:46,940 >> DAVID J. MALAN: Ia belum dimulakan. 882 00:38:46,940 --> 00:38:49,370 Jadi komputer kita sentiasa mempunyai memori fizikal. 883 00:38:49,370 --> 00:38:50,544 Ia sentiasa mempunyai RAM fizikal. 884 00:38:50,544 --> 00:38:52,710 Dan selalu ada sifar ini dan satu di sana, bukan? 885 00:38:52,710 --> 00:38:54,626 Kerana kita menggunakan kami komputer sepanjang hari, 886 00:38:54,626 --> 00:38:57,210 anda menggunakan IDE CS50 atau pelayan sepanjang hari. 887 00:38:57,210 --> 00:39:01,159 Jadi RAM yang sama ada mempunyai beberapa sifar atau kira-kira satu atau beberapa sifar dan satu. 888 00:39:01,159 --> 00:39:02,950 Tidak kira sama ada atau tidak anda menggunakan mereka. 889 00:39:02,950 --> 00:39:05,270 Anda tidak boleh hanya mempunyai kosong ruang di mana anda mahu bit. 890 00:39:05,270 --> 00:39:06,850 Mereka sama ada sifar dan satu. 891 00:39:06,850 --> 00:39:09,610 >> Jadi ternyata temp itu, kerana kami telah tidak dimulakan lagi, 892 00:39:09,610 --> 00:39:14,580 kita mempunyai orang-orang 32 bit tetapi mereka tidak ada telah dimulakan dengan mana-mana nilai yang diketahui. 893 00:39:14,580 --> 00:39:18,110 Jadi apa sahaja yang mereka adalah yang paling baru-baru ini digunakan bagi- mereka 32 bits-- 894 00:39:18,110 --> 00:39:23,000 kami hanya melihat artifak beberapa penggunaan yang dilakukan dahulu dari orang-orang tertentu 32 895 00:39:23,000 --> 00:39:23,500 bit. 896 00:39:23,500 --> 00:39:27,780 Sebaik sahaja saya klik Datang walaupun, phew, temp akan mendapat nilai 1. 897 00:39:27,780 --> 00:39:31,600 Dan jika saya melakukannya sekali lagi, adalah akan diberi nilai 2 898 00:39:31,600 --> 00:39:33,830 dan kemudian b akan diberi nilai 1. 899 00:39:33,830 --> 00:39:36,390 >> Dan supaya apa yang baik sekarang di ketika ini dalam cerita 900 00:39:36,390 --> 00:39:39,750 adalah bahawa penyahpepijat adalah menunjukkan saya, super perlahan-lahan 901 00:39:39,750 --> 00:39:42,640 mengikut rentak saya sendiri, apa yang keadaan Pertukaran adalah. 902 00:39:42,640 --> 00:39:47,490 Tetapi notis di atas di sini, notis bahawa timbunan panggilan sebenarnya 903 00:39:47,490 --> 00:39:49,180 mempunyai dua lapisan kepadanya. 904 00:39:49,180 --> 00:39:53,240 Sekarang salah satu yang yang ditonjolkan sebagai Swap, sekiranya saya klik Main sebaliknya, 905 00:39:53,240 --> 00:39:57,100 melihat bagaimana pembolehubah tempatan menukar kerana pemaju hanya boleh melompat 906 00:39:57,100 --> 00:39:59,740 sekitar dan pergi ke mana-mana skop yang berbeza. 907 00:39:59,740 --> 00:40:04,070 Jadi, walaupun kita melakukan semua ini bekerja dan betul bertukar-tukar a dan b, 908 00:40:04,070 --> 00:40:09,080 jika saya pergi berulang-alik antara Pertukaran di mana adalah 2 dan b adalah 1 dan Utama, 909 00:40:09,080 --> 00:40:11,851 telah Main terjejas sama sekali? 910 00:40:11,851 --> 00:40:12,350 No. 911 00:40:12,350 --> 00:40:13,930 Jadi apa yang bisa dibesarkan di sini? 912 00:40:13,930 --> 00:40:18,200 Nah, ternyata bahawa bila-bila masa anda memanggil fungsi seperti Swap, 913 00:40:18,200 --> 00:40:21,600 dan anda lulus hujah-hujah itu, apa anda lulus ke fungsi Swap 914 00:40:21,600 --> 00:40:24,730 dalam kes ini adalah salinan mereka hujah. 915 00:40:24,730 --> 00:40:28,620 Jadi, jika x dan y adalah masing-masing 32 bit, apa Pertukaran semakin 916 00:40:28,620 --> 00:40:30,760 adalah tempatan dua baru pembolehubah, atau hujah, 917 00:40:30,760 --> 00:40:34,380 dipanggil dan b-- tetapi mereka adalah sewenang-wenangnya names-- tetapi corak sifar 918 00:40:34,380 --> 00:40:39,520 dan orang-orang yang di dalam a dan b adalah berbaris untuk menjadi sama dengan x dan y 919 00:40:39,520 --> 00:40:42,610 tetapi mereka tidak adalah Perkara yang sama dengan x dan y. 920 00:40:42,610 --> 00:40:46,880 >> Ia seolah-olah Main mempunyai pada bahagian iaitu kertas nombor 1 dan 2 untuk x dan y, 921 00:40:46,880 --> 00:40:49,260 dan kemudian apabila ia tangan yang sekeping kertas untuk swap, 922 00:40:49,260 --> 00:40:51,970 Pertukaran dengan cepat mendapat pen sendiri, menulis ke bawah 923 00:40:51,970 --> 00:40:56,240 1 dan 2 di dalam lembaran sendiri kertas, tangan menyokong xy asal dengan Main 924 00:40:56,240 --> 00:40:58,790 dan kemudian melakukan sendiri perkara dengan a dan b. 925 00:40:58,790 --> 00:41:01,940 Dan ini kini super penting kerana ini mempunyai implikasi nontrivial 926 00:41:01,940 --> 00:41:06,260 untuk benar-benar menulis kod yang betul kerana ia seolah-olah kita tidak boleh menukar 927 00:41:06,260 --> 00:41:07,500 dua pembolehubah. 928 00:41:07,500 --> 00:41:09,150 >> Saya telah menulis fungsi Pertukaran yang betul. 929 00:41:09,150 --> 00:41:12,770 Kami telah melaksanakan dengan Lauren sebagai fungsi swap yang betul dalam realiti, 930 00:41:12,770 --> 00:41:16,700 tetapi nampaknya tidak ada yang perkara-perkara yang jika anda tidak boleh benar-benar 931 00:41:16,700 --> 00:41:19,530 swap dua nilai-nilai kekal. 932 00:41:19,530 --> 00:41:21,970 Oleh itu, kita perlu cara lain untuk benar-benar mendapatkan pada ini, 933 00:41:21,970 --> 00:41:24,472 dan kita perlu dapat sebenarnya menyelesaikan masalah ini. 934 00:41:24,472 --> 00:41:27,180 Dan ternyata out-- dan kami akan datang kembali ke gambar ini tertentu 935 00:41:27,180 --> 00:41:30,500 sebelum long-- ini adalah salah satu cara yang anda mungkin menarik memori komputer anda. 936 00:41:30,500 --> 00:41:31,460 Ia hanya segi empat tepat. 937 00:41:31,460 --> 00:41:32,960 Anda boleh menarik apa-apa beberapa cara tetapi ia 938 00:41:32,960 --> 00:41:35,740 sesuai untuk menarik sebagai segi empat tepat atas sebab berikut. 939 00:41:35,740 --> 00:41:40,040 >> Kami akan bermula hari ini dan seterusnya bercakap tentang timbunan kononnya. 940 00:41:40,040 --> 00:41:43,870 Dan timbunan hanya sebahagian yang daripada RAM-- sebahagian daripada memory-- 941 00:41:43,870 --> 00:41:47,100 yang berfungsi mempunyai akses apabila mereka dipanggil. 942 00:41:47,100 --> 00:41:49,800 Dan maka ia ternyata bahawa di bahagian paling bawah timbunan ini 943 00:41:49,800 --> 00:41:53,590 adalah di mana semua pembolehubah tempatan utama yang dan org C dan org V dan semua barangan itu 944 00:41:53,590 --> 00:41:56,950 akan pergi secara lalai. Dan jika Utama panggilan beberapa fungsi lain seperti Swap, 945 00:41:56,950 --> 00:42:00,330 baik, Pertukaran akan mendapat satu lagi lapisan memori sehingga di atasnya. 946 00:42:00,330 --> 00:42:04,490 >> Dan sebagainya hanya untuk memberikan anda sepintas cepat gambar ini, jika Aku pergi ke sini-- 947 00:42:04,490 --> 00:42:09,450 dan biarlah saya mencerminkan ini ke atas overhed sebagai well-- apa yang sebenarnya saya ada, 948 00:42:09,450 --> 00:42:12,100 jika kita hanya mengambil berat tentang bawah gambar ini buat masa ini, 949 00:42:12,100 --> 00:42:15,070 ialah apabila saya menjalankan program dan Main mendapat dipanggil, 950 00:42:15,070 --> 00:42:18,330 Utama diberikan sebahagian daripada RAM dalam komputer saya yang 951 00:42:18,330 --> 00:42:20,060 di bahagian bawah apa yang dipanggil timbunan. 952 00:42:20,060 --> 00:42:22,143 Dan saya akan menarik ia sengaja sebagai segiempat. 953 00:42:22,143 --> 00:42:24,540 Jadi ia seperti 32 bit atau empat bait. 954 00:42:24,540 --> 00:42:28,790 Dan jika ini fungsi utama mempunyai pembolehubah dipanggil x dengan nilai 1 955 00:42:28,790 --> 00:42:32,626 dan ia mempunyai pembolehubah yang dipanggil y dengan nilai 2, itu 956 00:42:32,626 --> 00:42:35,750 seperti mengambil sekerat ini memori yang Utama telah diberikan oleh operasi 957 00:42:35,750 --> 00:42:38,850 sistem dan membahagikan ia sehingga supaya pembolehubah tempatan pertama pergi sini, 958 00:42:38,850 --> 00:42:40,930 yang kedua pergi di sini, dan itu sahaja. 959 00:42:40,930 --> 00:42:45,590 >> Apabila Main panggilan Swap, Pertukaran mendapat sepotong sendiri memori 960 00:42:45,590 --> 00:42:48,280 bahawa kita akan menarik seperti ini dari sistem operasi, 961 00:42:48,280 --> 00:42:50,820 dan ia akan mempunyai yang pembolehubah tempatan sendiri berdasarkan 962 00:42:50,820 --> 00:42:53,825 pelaksanaan awal kami dengan pembolehubah tempatan yang 963 00:42:53,825 --> 00:42:58,010 dan b yang pada mulanya mendapatkan nilai 1 dan 2. 964 00:42:58,010 --> 00:43:00,450 Tetapi, sebaik sahaja kod Swap melaksanakan, 965 00:43:00,450 --> 00:43:03,760 dan Lauren sebenarnya swap yang OJ dan susu, apa yang berlaku? 966 00:43:03,760 --> 00:43:09,030 Nah, ini 2 menjadi 1, ini 1 menjadi 2, dan, dengan cara itu, 967 00:43:09,030 --> 00:43:13,360 terdapat pembolehubah temp yang yang yang digunakan masa keseluruhan yang akhirnya 968 00:43:13,360 --> 00:43:14,470 hilang. 969 00:43:14,470 --> 00:43:16,720 Tetapi ia tidak penting berapa banyak kerja yang anda lakukan 970 00:43:16,720 --> 00:43:22,160 di baris ini daripada- dalam ruang memori ini, x dan y adalah sama sekali tidak disentuh. 971 00:43:22,160 --> 00:43:26,320 >> Oleh itu, kita memerlukan beberapa cara untuk memberi Pertukaran dan fungsi seperti itu 972 00:43:26,320 --> 00:43:32,640 akses rahsia, jika anda akan, untuk fungsi like-- ke memori seperti x dan y. 973 00:43:32,640 --> 00:43:35,110 Oleh itu, mari kita lihat pada satu contoh yang membantu 974 00:43:35,110 --> 00:43:38,220 kita melihat dengan jelas apa yang telah berlaku masa ini keseluruhan. 975 00:43:38,220 --> 00:43:40,284 Saya akan pergi ke hadapan dan membuka Bandingkan Zero. 976 00:43:40,284 --> 00:43:42,200 Dan saya akan menutup penyahpepijat kami, saya akan 977 00:43:42,200 --> 00:43:44,360 untuk menutup pesanan ini menakutkan hanya kata, tunggu satu minit, 978 00:43:44,360 --> 00:43:45,800 anda berada dalam debugging tengah. 979 00:43:45,800 --> 00:43:48,383 Saya akan menyembunyikan tab ini di sini hanya untuk kembali kepada kesederhanaan. 980 00:43:48,383 --> 00:43:50,160 Jadi jangan bimbang jika GDB dibunuh. 981 00:43:50,160 --> 00:43:53,910 Yang hanya bermakna bahawa program ini mempunyai telah berhenti, sengaja dalam kes ini, 982 00:43:53,910 --> 00:43:54,820 oleh saya. 983 00:43:54,820 --> 00:43:57,700 >> Dan kini Bandingkan Zero melakukan ini. 984 00:43:57,700 --> 00:44:00,110 Saya menggunakan CS50 perpustakaan dalam standard I / O. 985 00:44:00,110 --> 00:44:04,319 Saya telah mendapat satu fungsi utama yang pertama berkata, berkata sesuatu, dan mendapat rentetan. 986 00:44:04,319 --> 00:44:06,110 Kemudian berkata lagi dan mendapat tali lain. 987 00:44:06,110 --> 00:44:09,910 Dan perhatikan bahawa kedua-dua tali dipanggil s dan t, masing-masing. 988 00:44:09,910 --> 00:44:12,910 Dan kini program ini, Bandingkan Zero, tujuannya dalam kehidupan, 989 00:44:12,910 --> 00:44:15,470 ia sepatutnya beritahu saya, adakah saya menaip perkara yang sama? 990 00:44:15,470 --> 00:44:16,910 Dan jadi saya akan kembali ke minggu satu. 991 00:44:16,910 --> 00:44:19,950 Saya menggunakan operator sama sama saya yang merupakan pengendali kualiti. 992 00:44:19,950 --> 00:44:22,220 Bukan pengendali tugasan, pengendali kesaksamaan. 993 00:44:22,220 --> 00:44:23,890 Saya hanya membandingkan s dan t. 994 00:44:23,890 --> 00:44:27,470 >> Jadi mari kita benar-benar pergi ke depan dan melakukan ini. 995 00:44:27,470 --> 00:44:32,680 Dan saya akan pergi ke hadapan dan membuat Bandingkan Zero. 996 00:44:32,680 --> 00:44:35,110 Saya akan melakukan ./comparezero. 997 00:44:35,110 --> 00:44:37,150 Dan saya akan pergi ke hadapan dan berkata sesuatu 998 00:44:37,150 --> 00:44:43,450 seperti, mari kita buat ibu dalam huruf kecil dan bagaimana pula ibu dalam huruf besar. 999 00:44:43,450 --> 00:44:45,034 Dan sudah tentu saya menaip perkara yang berbeza. 1000 00:44:45,034 --> 00:44:45,533 Baiklah. 1001 00:44:45,533 --> 00:44:46,570 Itulah yang diharapkan. 1002 00:44:46,570 --> 00:44:47,640 >> Mari kita berjalan lagi. 1003 00:44:47,640 --> 00:44:49,740 Kedua-dua kali melakukan huruf kecil, huruf kecil. 1004 00:44:49,740 --> 00:44:51,490 Yang kelihatan super sama dengan saya. 1005 00:44:51,490 --> 00:44:52,930 Enter. 1006 00:44:52,930 --> 00:44:53,430 OKAY. 1007 00:44:53,430 --> 00:44:55,804 Mungkin ia hanya pelik kerana ia tidak suka tatabahasa saya. 1008 00:44:55,804 --> 00:44:59,930 Jadi mari kita buat MOM modal, modal MOM, serupa. 1009 00:44:59,930 --> 00:45:01,490 Perkara yang berbeza. 1010 00:45:01,490 --> 00:45:03,907 >> Jadi mengapa itu? 1011 00:45:03,907 --> 00:45:06,240 Nah, apa yang sebenarnya berlaku di bawah hood di sini? 1012 00:45:06,240 --> 00:45:08,180 Oleh itu, marilah kita kembali ke atas di sini hanya untuk seketika 1013 00:45:08,180 --> 00:45:10,910 dan mempertimbangkan apa GetString sebenarnya lakukan. 1014 00:45:10,910 --> 00:45:13,385 Apabila anda memanggil GetString, itu adalah satu fungsi kita 1015 00:45:13,385 --> 00:45:16,510 diri kita menulis dan entah bagaimana mendapat jujukan aksara daripada pengguna. 1016 00:45:16,510 --> 00:45:20,280 Dan mari kita andaikan bahawa yang pertama kali saya menghubungi GetString, yang memberikan saya 1017 00:45:20,280 --> 00:45:21,930 sebahagian memori yang kelihatan seperti ini. 1018 00:45:21,930 --> 00:45:26,990 Dan jika saya ditaip dalam semua huruf kecil m-o-m-- dan apa yang berlaku selepas itu? 1019 00:45:26,990 --> 00:45:28,840 Hanya cek kewarasan cepat. 1020 00:45:28,840 --> 00:45:29,780 >> Sifar Backslash. 1021 00:45:29,780 --> 00:45:30,510 Kita tahu bahawa. 1022 00:45:30,510 --> 00:45:32,784 Dan ingat bahawa kami bermain main dengan nama Zamila ini 1023 00:45:32,784 --> 00:45:34,950 dan mempunyai banyak nama-nama lain apabila Rob telah mencari di sini 1024 00:45:34,950 --> 00:45:36,280 apa yang berlaku di dalam ingatan. 1025 00:45:36,280 --> 00:45:37,780 Jadi cerita yang betul-betul sama. 1026 00:45:37,780 --> 00:45:40,160 Inilah yang GetString akan kembali kepada saya. 1027 00:45:40,160 --> 00:45:44,780 Sekarang, kod saya sebentar tadi disimpan nilai pulangan GetString 1028 00:45:44,780 --> 00:45:47,510 dalam pembolehubah dipanggil s. 1029 00:45:47,510 --> 00:45:51,390 Dan kemudian kali kedua saya memanggilnya, ia disimpan dalam pembolehubah dipanggil t. 1030 00:45:51,390 --> 00:45:55,070 >> Jadi jika Aku pergi ke sini, saya perlu untuk menarik variable-- tempatan ini 1031 00:45:55,070 --> 00:45:59,610 dan saya biasanya akan menarik tali sebagai just-- kita akan 1032 00:45:59,610 --> 00:46:02,360 memanggilnya s-- sebagai dataran kecil di sini. 1033 00:46:02,360 --> 00:46:09,760 Dan kini, somehow-- bagaimana ibu masuk ke dalam s ini berubah-ubah? 1034 00:46:09,760 --> 00:46:12,010 Nah, kita perlu kembali prinsip pertama di sini. 1035 00:46:12,010 --> 00:46:15,660 Apa yang GetString sebenarnya kembali? 1036 00:46:15,660 --> 00:46:19,030 >> Jadi ternyata bahawa M-O-M garis miring sifar, dan apa-apa bilangan 1037 00:46:19,030 --> 00:46:22,364 tali lain dalam memori seperti Zamila dan Rob atau Andy atau mana-mana orang lain, 1038 00:46:22,364 --> 00:46:24,280 sudah tentu dalam kita RAM atau memori komputer. 1039 00:46:24,280 --> 00:46:27,760 Dan RAM anda mempunyai like-- anda mempunyai gig RAM, dua gig RAM, 1040 00:46:27,760 --> 00:46:30,860 atau satu bilion atau dua bilion bait, atau mungkin lebih hari ini. 1041 00:46:30,860 --> 00:46:34,070 Jadi mari kita andaikan, untuk tujuan hari ini, bahawa ia tidak kira bagaimana kita nombor 1042 00:46:34,070 --> 00:46:36,640 mereka, tetapi kita boleh nombor setiap dari orang-orang bilion atau dua bilion 1043 00:46:36,640 --> 00:46:37,880 atau empat bilion bait. 1044 00:46:37,880 --> 00:46:42,240 >> Dan mari kita hanya sewenang-wenangnya mengatakan bahawa ini adalah gigitan pertama, gigitan kedua, 1045 00:46:42,240 --> 00:46:43,380 ketiga, keempat. 1046 00:46:43,380 --> 00:46:46,570 Saya sengaja tidak menggunakan sifar untuk hari ini tetapi kita akan kembali kepada itu. 1047 00:46:46,570 --> 00:46:49,570 Jadi dalam erti kata lain, jika ini adalah kali pertama saya menggunakan program ini, 1048 00:46:49,570 --> 00:46:52,715 Saya hanya mendapat bernasib baik dan yang pertama santapan adalah di lokasi satu maka dua 1049 00:46:52,715 --> 00:46:53,590 kemudian tiga daripada empat. 1050 00:46:53,590 --> 00:46:57,430 Dan jika saya terus melukis, nombor peti dua bilion akan menjadi cara di sini. 1051 00:46:57,430 --> 00:47:02,200 >> Jadi, apa yang anda berfikir, maka, GetString sebenarnya kembali? 1052 00:47:02,200 --> 00:47:06,010 Ia tidak kembali M-O-M backslash sifar per se kerana yang jelas 1053 00:47:06,010 --> 00:47:08,180 tidak sesuai di dalam kotak yang saya telah disediakan. 1054 00:47:08,180 --> 00:47:11,210 Jadi apa lagi yang mungkin GetString sebenarnya pulang semua minggu ini? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 Jawapannya adalah di papan sini suatu tempat. 1057 00:47:16,820 --> 00:47:20,390 Anda tidak boleh muat M-O-M backslash sifar, jadi apa yang mungkin masuk akal bukan? 1058 00:47:20,390 --> 00:47:23,424 Jika anda terpaksa menjadi super pandai, meletakkan topi kejuruteraan yang dipanggil, 1059 00:47:23,424 --> 00:47:24,340 apa yang anda boleh kembali? 1060 00:47:24,340 --> 00:47:27,340 Apa yang paling sedikit maklumat anda boleh kembali yang akan masih 1061 00:47:27,340 --> 00:47:30,610 membolehkan anda mencari M-O-M dalam ingatan? 1062 00:47:30,610 --> 00:47:31,270 Ya? 1063 00:47:31,270 --> 00:47:31,950 >> PENONTON: Satu. 1064 00:47:31,950 --> 00:47:32,200 >> DAVID J. MALAN: Satu. 1065 00:47:32,200 --> 00:47:33,021 Dan mengapa satu? 1066 00:47:33,021 --> 00:47:35,520 PENONTON: Kerana ia akan memberitahu anda di mana untuk pergi [didengar]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 DAVID J. MALAN: Tepat sekali. 1069 00:47:39,390 --> 00:47:44,300 Saya hanya akan kembali alamat tali bahawa saya telah mendapat. 1070 00:47:44,300 --> 00:47:46,570 Alamat dalam ini kes adalah lokasi satu. 1071 00:47:46,570 --> 00:47:51,280 Jadi apa yang sebenarnya sedang disimpan di dalam s-- dan setiap pembolehubah rentetan itu far-- 1072 00:47:51,280 --> 00:47:53,430 baru sahaja menjadi alamat tali itu. 1073 00:47:53,430 --> 00:47:57,840 >> Sementara itu, jika saya panggil GetString kali kedua dan saya 1074 00:47:57,840 --> 00:48:03,300 menaip dalam literal thing-- yang sama M-O-M dengan lowercase-- M-O-M 1075 00:48:03,300 --> 00:48:06,200 dan satu lagi garis sendeng terbalik sifar, dan sekarang mungkin program saya 1076 00:48:06,200 --> 00:48:09,820 telah berjalan untuk beberapa waktu jadi mungkin ini adalah 10, ini adalah lokasi 11, ini ialah 12, 1077 00:48:09,820 --> 00:48:10,700 ini adalah 13. 1078 00:48:10,700 --> 00:48:13,590 Komputer menggunakan beberapa lain memori untuk apa-apa sebab. 1079 00:48:13,590 --> 00:48:18,172 Apa yang kini berlaku dalam kedua saya berubah-ubah dalam program t saya? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Tepat sekali. 1082 00:48:20,050 --> 00:48:23,910 >> Dan apabila kita melihat kod sumber program ini 1083 00:48:23,910 --> 00:48:26,550 di mana saya hanya cuba untuk membandingkan dua nilai, 1084 00:48:26,550 --> 00:48:32,180 adalah s sama sama dengan t, apa yang jawapan manusia yang jelas? 1085 00:48:32,180 --> 00:48:34,890 Hanya ada kerana 1 tidak sama 10. 1086 00:48:34,890 --> 00:48:36,861 Dan sebagainya di sini terdapat satu peluang untuk kita benar-benar 1087 00:48:36,861 --> 00:48:39,610 hanya kembali ke, sekali lagi, pertama prinsip dan berfikir tentang, baik, 1088 00:48:39,610 --> 00:48:41,110 apa yang sedang berlaku di bawah hood? 1089 00:48:41,110 --> 00:48:43,240 Kami telah bercakap tentang bit dan bait dan ingatan, 1090 00:48:43,240 --> 00:48:46,820 tetapi ia sebenarnya berguna untuk memahami kerana apabila anda memanggil GetString, 1091 00:48:46,820 --> 00:48:50,280 walaupun kita memikirkan ia adalah kembali M-O-M atau tali ibu 1092 00:48:50,280 --> 00:48:53,120 atau Andy atau Zamila atau sebagainya, dari segi teknikal 1093 00:48:53,120 --> 00:48:55,510 ia hanya kembali alamat itu sebahagian memori. 1094 00:48:55,510 --> 00:48:56,910 >> Tetapi itu OK. 1095 00:48:56,910 --> 00:49:00,570 Kerana bagaimana saya tahu di mana tali berakhir? 1096 00:49:00,570 --> 00:49:03,840 Jika saya hanya diberikan mulanya? 1097 00:49:03,840 --> 00:49:05,380 Nah, garis sendeng terbalik sifar, bukan? 1098 00:49:05,380 --> 00:49:08,800 Hanya dalam masa linear saya boleh mencetak dengan cap def M-O-M. 1099 00:49:08,800 --> 00:49:11,820 Dan sebaik sahaja saya melihat garis sendeng terbalik sifar, saya tidak peduli di mana saya bermula, 1100 00:49:11,820 --> 00:49:14,950 Saya sudah tahu tersirat di mana saya perlu berakhir. 1101 00:49:14,950 --> 00:49:18,700 >> Dan sehingga hari ini menandakan beginning-- dan biar saya ini secara dramatik kerana kami 1102 00:49:18,700 --> 00:49:21,800 telah melalui banyak masalah kepada mendapatkan ini melatih wheels-- sini 1103 00:49:21,800 --> 00:49:29,840 jadi roda latihan hari ini mula terkeluar dan kami mendedahkan pada least-- 1104 00:49:29,840 --> 00:49:31,373 >> [Tepuk tangan] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> Itu adalah baik bernilai perjalanan untuk Sasaran pagi ini, ya? 1107 00:49:36,160 --> 00:49:39,600 Jadi sekarang-- ada, ternyata keluar, ada perkara seperti tali. 1108 00:49:39,600 --> 00:49:41,140 String tidak wujud. 1109 00:49:41,140 --> 00:49:43,760 Ia sinonim bahawa kita telah mempunyai di dalam perpustakaan CS50. 1110 00:49:43,760 --> 00:49:48,660 Selepas ini, kita akan mula memanggil s dan t tidak tali tetapi bintang char. 1111 00:49:48,660 --> 00:49:51,180 Dan bintang char kita akan mengusik selain tidak lama lagi. 1112 00:49:51,180 --> 00:49:53,510 Tetapi ini adalah untuk mengatakan, bahawa walaupun jika kita terus 1113 00:49:53,510 --> 00:49:56,180 menggunakan GetString buat masa ini, teknikal yang perlu saya 1114 00:49:56,180 --> 00:49:59,010 menjadi berkata bintang char dan char bintang. 1115 00:49:59,010 --> 00:50:01,720 >> Dan ternyata apa yang bintang akan menandakan sesuatu 1116 00:50:01,720 --> 00:50:04,340 dipanggil penunjuk atau alamat. 1117 00:50:04,340 --> 00:50:06,110 Dan sebenarnya, teaser untuk apa yang akan berlaku 1118 00:50:06,110 --> 00:50:09,760 adalah ini 20 music kedua dari kami rakan Nick Parlante di Stanford 1119 00:50:09,760 --> 00:50:12,927 yang, beberapa waktu lalu, menghabiskan jumlah yang tidak masuk akal masa, 1120 00:50:12,927 --> 00:50:15,010 sebaik saya boleh memberitahu di dalam bukunya dapur atau bawah tanah itu, 1121 00:50:15,010 --> 00:50:17,140 membuat claymation memperkenalkan kepada dunia 1122 00:50:17,140 --> 00:50:20,010 watak yang bernama Binky dengan siapa kita akan 1123 00:50:20,010 --> 00:50:22,010 diperkenalkan pada masa akan datang untuk petunjuk. 1124 00:50:22,010 --> 00:50:24,588 Jadi di sini adalah preview apa yang akan datang. 1125 00:50:24,588 --> 00:50:26,370 >> [VIDEO MAIN SEMULA] 1126 00:50:26,370 --> 00:50:27,510 >> Hey, Binky. 1127 00:50:27,510 --> 00:50:28,260 Bangun. 1128 00:50:28,260 --> 00:50:30,672 Ia adalah masa untuk penunjuk menyeronokkan. 1129 00:50:30,672 --> 00:50:31,616 >> -Apa itu? 1130 00:50:31,616 --> 00:50:33,032 Ketahui mengenai petunjuk? 1131 00:50:33,032 --> 00:50:34,450 Oh, goody. 1132 00:50:34,450 --> 00:50:35,431 >> [AKHIR MAIN SEMULA] 1133 00:50:35,431 --> 00:50:38,055 DAVID J. MALAN: Dan pada masa yang sama, kita akan melihat anda pada Rabu. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Baiklah. 1136 00:50:48,090 --> 00:50:48,740 Siapa menari? 1137 00:50:48,740 --> 00:50:49,240 Datang pada. 1138 00:50:49,240 --> 00:50:50,330 Siapa menari? 1139 00:50:50,330 --> 00:50:51,820 Anda mahu saya untuk mendapatkan ia bermula? 1140 00:50:51,820 --> 00:50:53,770 Saya akan mendapatkan ia bermula. 1141 00:50:53,770 --> 00:50:54,270 Woooo! 1142 00:50:54,270 --> 00:51:04,070 1143 00:51:04,070 --> 00:51:07,580 >> LAUREN: mewah Sweet Musa.