1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] DAVID J. Malan: Baiklah. 2 00:00:08,160 --> 00:00:11,170 Ini adalah CS50, dan ini adalah akhir dari dua minggu. 3 00:00:11,170 --> 00:00:14,650 Jika Anda berharap untuk menjadi lapar sekitar ini waktu besok, tahu bahwa kita akan 4 00:00:14,650 --> 00:00:18,920 untuk mengadakan sebagai besok kelompok kecil, Kamis, 1:15 PM. 5 00:00:18,920 --> 00:00:21,460 Ada URL ini di sini jika Anda ingin RSVP. 6 00:00:21,460 --> 00:00:25,270 Ruang terbatas, jadi tolong maafkan jika bentuk telah diisi pada saat Anda 7 00:00:25,270 --> 00:00:26,680 mengisi ini. 8 00:00:26,680 --> 00:00:29,400 URL lain meskipun yang mungkin menarik ini. 9 00:00:29,400 --> 00:00:32,409 >> Jadi di hampir waktu satu bulan, kursus ini akan disediakan 10 00:00:32,409 --> 00:00:36,090 semua lebih luas melalui edx, melalui mana orang-orang di Internet akan 11 00:00:36,090 --> 00:00:39,580 mampu mengikuti bersama, terlibat dalam kursus cukup aktif, pada kenyataannya. 12 00:00:39,580 --> 00:00:43,070 Mereka akan menggunakan Appliance CS50 CS50 dan Bahas dan sebagian besar 13 00:00:43,070 --> 00:00:45,840 berbagai software yang sudah kita telah menggunakan semester ini. 14 00:00:45,840 --> 00:00:49,030 Dan salah satu inisiatif kami ingin mengambil sebagai percobaan tahun ini 15 00:00:49,030 --> 00:00:53,120 adalah untuk melihat seberapa banyak konten kita dapat menerjemahkan ke lain diucapkan dan 16 00:00:53,120 --> 00:00:54,110 bahasa tertulis. 17 00:00:54,110 --> 00:00:58,000 Jadi jika Anda mungkin memiliki kepentingan untuk berpartisipasi dalam proyek ini, dimana 18 00:00:58,000 --> 00:01:02,090 kami akan memberikan transkrip bahasa Inggris dan sub judul untuk kursus ini 19 00:01:02,090 --> 00:01:05,190 ceramah dan celana pendek dan seminar dan bagian dan sejenisnya - 20 00:01:05,190 --> 00:01:08,700 jika Anda berbicara fasih atau menulis dengan lancar beberapa bahasa lain, kita akan 21 00:01:08,700 --> 00:01:12,240 senang melibatkan Anda dalam proyek ini, dimana Anda mengambil satu atau lebih dari 22 00:01:12,240 --> 00:01:15,340 video, menerjemahkannya ke dalam bahasa yang Anda tahu cukup baik. 23 00:01:15,340 --> 00:01:19,050 Untuk memberikan rasa antarmuka, ada ini antarmuka pengguna berbasis web 24 00:01:19,050 --> 00:01:22,330 bahwa kita akan menggunakan yang akan menciptakan dasarnya UI seperti ini. 25 00:01:22,330 --> 00:01:24,520 Ini saya mengajar beberapa Halloween lalu. 26 00:01:24,520 --> 00:01:27,710 Dan di sisi kanan ada hitam di samping ini perangko waktu, 27 00:01:27,710 --> 00:01:31,300 Anda akan melihat berbagai hal yang keluar dari mulut saya hari itu. 28 00:01:31,300 --> 00:01:34,660 Dan kemudian di bawahnya, Anda akan mampu menerjemahkan ke dalam beberapa bahasa lain. 29 00:01:34,660 --> 00:01:37,840 Tepat apa pemetaan adalah antara, dalam hal ini, Inggris 30 00:01:37,840 --> 00:01:38,660 dan, katakanlah, Spanyol. 31 00:01:38,660 --> 00:01:40,480 Jadi itu sebenarnya alat yang sangat user-friendly. 32 00:01:40,480 --> 00:01:43,690 Anda dapat mundur dan maju cepat sangat mudah dengan shortcut keyboard. 33 00:01:43,690 --> 00:01:46,710 Jadi jika Anda ingin mengambil bagian dalam percobaan ini dan memiliki kata-kata Anda 34 00:01:46,710 --> 00:01:50,730 dilihat dan dibaca oleh berpotensi ribuan orang di luar sana, jangan merasa 35 00:01:50,730 --> 00:01:51,960 bebas untuk berpartisipasi. 36 00:01:51,960 --> 00:01:56,940 >> Sekarang satu kata tentang kucing dari hari Senin, jangan sampai kita telah mengirim terlalu 37 00:01:56,940 --> 00:01:58,120 menakutkan pesan. 38 00:01:58,120 --> 00:02:02,130 Lakukan menyadari bahwa sebagai jam kantor menyarankan dan sebagai bagian menyarankan, 39 00:02:02,130 --> 00:02:05,110 desain tentu saja sangat banyak untuk memiliki siswa berkolaborasi dan 40 00:02:05,110 --> 00:02:09,250 berbicara untuk bekerja melalui set masalah dan masalah bersama-sama. 41 00:02:09,250 --> 00:02:13,630 Dan benar-benar garis hanya turun ke, sekali lagi, pekerjaan Anda akhirnya 42 00:02:13,630 --> 00:02:16,420 harus menyerahkan harus Anda sendiri. 43 00:02:16,420 --> 00:02:19,080 Dan jadi, cukup jujur ​​- dalam jam kantor, itu benar-benar normal - 44 00:02:19,080 --> 00:02:21,560 itu benar-benar diharapkan, bahkan - untuk mengobrol dengan beberapa 45 00:02:21,560 --> 00:02:22,370 teman sebelah Anda. 46 00:02:22,370 --> 00:02:25,240 Jika ia sedang berjuang dengan topik tertentu, dan Anda seperti, oh, juga membiarkan 47 00:02:25,240 --> 00:02:27,750 saya memberikan sekilas dari beberapa baris kode yang saya tulis. 48 00:02:27,750 --> 00:02:28,290 Itu baik-baik saja. 49 00:02:28,290 --> 00:02:28,700 Itu terjadi. 50 00:02:28,700 --> 00:02:31,580 Dan itu sangat kondusif, saya pikir, dengan proses pembelajaran. 51 00:02:31,580 --> 00:02:35,270 Dimana baris, sekali lagi, akan menyeberangi adalah ketika kepala adalah semacam miring atas 52 00:02:35,270 --> 00:02:38,800 di sini untuk detik terlalu banyak atau menit untuk yang benar-benar untuk memiliki hanya 53 00:02:38,800 --> 00:02:41,250 menjadi kesempatan blokir untuk teman Anda. 54 00:02:41,250 --> 00:02:43,870 Dan tentu, ketika hal-hal bisa dipertukarkan melalui email dan Dropbox dan 55 00:02:43,870 --> 00:02:45,350 sejenisnya, ada juga adalah garis. 56 00:02:45,350 --> 00:02:48,940 Jadi dengan segala cara, merasa nyaman dan merasa didorong untuk chatting dengan teman-teman 57 00:02:48,940 --> 00:02:51,270 dan teman sekelas tentang psets dan banyak lagi. 58 00:02:51,270 --> 00:02:54,680 Dan hanya menyadari bahwa apa yang Anda akhirnya menyerahkan benar-benar harus menjadi 59 00:02:54,680 --> 00:02:57,780 produk kreasi Anda dan bukan orang lain. 60 00:02:57,780 --> 00:03:01,010 >> Jadi dalam vena yang sama makhluk suka diemong, Anda mungkin 61 00:03:01,010 --> 00:03:02,820 tahu orang ini di sini. 62 00:03:02,820 --> 00:03:06,180 Jadi ini adalah film murahan mengerikan dari tahun lalu. 63 00:03:06,180 --> 00:03:08,680 Siapapun sini terlihat Spaceballs? 64 00:03:08,680 --> 00:03:09,120 Baiklah. 65 00:03:09,120 --> 00:03:10,220 Jadi angka yang bagus di sini. 66 00:03:10,220 --> 00:03:13,840 Jadi ini adalah cara kami mengagumkan akademis memperkenalkan hari ini akhirnya 67 00:03:13,840 --> 00:03:15,130 gagasan kriptografi. 68 00:03:15,130 --> 00:03:19,010 Dan jadi salah satu masalah domain yang spesifik untuk pset 2, yang akan datang 69 00:03:19,010 --> 00:03:22,770 keluar besok malam larut, adalah untuk menyelam ke dalam dunia kriptografi, yang 70 00:03:22,770 --> 00:03:26,380 adalah seni enkripsi atau mengacak informasi. 71 00:03:26,380 --> 00:03:30,160 Dan ini pada akhirnya berhubungan dengan dunia keamanan. 72 00:03:30,160 --> 00:03:34,440 >> Sekarang keamanan untuk kebanyakan kita datang dalam bentuk mekanisme yang cukup biasa. 73 00:03:34,440 --> 00:03:36,920 Semua dari kita memiliki username dan password. 74 00:03:36,920 --> 00:03:41,350 Dan kita semua memiliki username dan password yang sangat buruk, kemungkinan besar. 75 00:03:41,350 --> 00:03:45,250 Jika password Anda adalah sama pada beberapa situs Web, yang mungkin tidak 76 00:03:45,250 --> 00:03:47,920 ide yang terbaik, seperti yang akan kita bahas menjelang akhir semester. 77 00:03:47,920 --> 00:03:51,680 Jika password Anda ditulis pada catatan lengket - tidak ada lelucon - pada 78 00:03:51,680 --> 00:03:55,130 monitor, itu juga belum tentu desain terbaik tetapi cukup umum 79 00:03:55,130 --> 00:03:56,140 fenomena. 80 00:03:56,140 --> 00:04:00,420 Dan jika Anda tidak menggunakan kriptografi untuk mengenkripsi password Anda, mereka 81 00:04:00,420 --> 00:04:01,610 sangat rentan. 82 00:04:01,610 --> 00:04:04,670 Jadi jika Anda berpikir Anda menjadi super pintar dengan memiliki Firman yang tersembunyi 83 00:04:04,670 --> 00:04:07,740 mendokumentasikan suatu tempat pada hard drive Anda yang memiliki semua password Anda, tetapi 84 00:04:07,740 --> 00:04:10,550 itu di folder yang tidak ada yang akan melihat, itu juga bukan sangat 85 00:04:10,550 --> 00:04:11,540 Mekanisme aman. 86 00:04:11,540 --> 00:04:15,100 Dan jadi apa pset 2 akan memperkenalkan ini seni kriptografi dan 87 00:04:15,100 --> 00:04:18,300 mengacak informasi sehingga hal-hal seperti password 88 00:04:18,300 --> 00:04:19,500 semua lebih aman. 89 00:04:19,500 --> 00:04:24,500 Jadi, untuk memotivasi ini masalah yang sangat nyata-dunia dengan sangat non-dunia nyata 90 00:04:24,500 --> 00:04:28,740 Skenario, izinkan saya memperkenalkan Anda ke salah satu klip favorit kami di sini dari ini 91 00:04:28,740 --> 00:04:29,895 film, Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [PEMUTARAN VIDEO] 93 00:04:30,565 --> 00:04:32,995 -Helm, Anda iblis, apa yang terjadi? 94 00:04:32,995 --> 00:04:34,730 Apa yang Anda lakukan untuk anak saya? 95 00:04:34,730 --> 00:04:38,960 -Izinkan saya untuk memperkenalkan dokter bedah plastik muda yang brilian, Dr Philip 96 00:04:38,960 --> 00:04:43,290 Schlotkin, pekerjaan terbesar hidung pria di seluruh 97 00:04:43,290 --> 00:04:45,526 alam semesta dan Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Yang Mulia. 99 00:04:46,450 --> 00:04:47,380 Hidung-job? 100 00:04:47,380 --> 00:04:48,035 Saya tidak mengerti. 101 00:04:48,035 --> 00:04:49,480 Dia sudah memiliki pekerjaan hidung. 102 00:04:49,480 --> 00:04:51,490 Ini adalah hadiah manis 16. 103 00:04:51,490 --> 00:04:53,090 -Tidak, itu bukan apa yang Anda pikirkan. 104 00:04:53,090 --> 00:04:55,150 Ini jauh, jauh lebih buruk. 105 00:04:55,150 --> 00:04:59,860 Jika Anda tidak memberi saya kombinasi dengan perisai udara, Dr Schlotkin akan 106 00:04:59,860 --> 00:05:04,135 memberikan anak Anda kembali hidung lamanya. 107 00:05:04,135 --> 00:05:05,385 -Tidak! 108 00:05:08,202 --> 00:05:10,186 Dimana kau dapatkan itu? 109 00:05:10,186 --> 00:05:11,178 -Baiklah. 110 00:05:11,178 --> 00:05:11,674 Aku akan memberitahu. 111 00:05:11,674 --> 00:05:12,666 Aku akan memberitahu. 112 00:05:12,666 --> 00:05:14,154 -Tidak, ayah, tidak. 113 00:05:14,154 --> 00:05:15,150 Anda tidak harus. 114 00:05:15,150 --> 00:05:16,460 -Kau benar, sayangku. 115 00:05:16,460 --> 00:05:18,450 Aku akan kehilangan hidung baru Anda. 116 00:05:18,450 --> 00:05:21,550 Tapi aku tidak akan memberitahu mereka kombinasi apa pun. 117 00:05:21,550 --> 00:05:23,100 -Sangat baik. 118 00:05:23,100 --> 00:05:25,510 Dr Schlotkin, melakukan terburuk Anda. 119 00:05:25,510 --> 00:05:26,760 -My kesenangan. 120 00:05:30,560 --> 00:05:31,180 -Tidak! 121 00:05:31,180 --> 00:05:33,450 Tunggu, tunggu. 122 00:05:33,450 --> 00:05:34,770 Aku akan memberitahu. 123 00:05:34,770 --> 00:05:36,400 Aku akan memberitahu. 124 00:05:36,400 --> 00:05:38,630 -Saya tahu itu akan berhasil. 125 00:05:38,630 --> 00:05:42,040 Baiklah, berikan kepada saya. 126 00:05:42,040 --> 00:05:46,890 -Kombinasi adalah satu. 127 00:05:46,890 --> 00:05:47,290 -Satu. 128 00:05:47,290 --> 00:05:48,183 -Satu. 129 00:05:48,183 --> 00:05:48,950 -Dua. 130 00:05:48,950 --> 00:05:49,370 -Dua. 131 00:05:49,370 --> 00:05:50,450 -Dua. 132 00:05:50,450 --> 00:05:50,715 -Tiga 133 00:05:50,715 --> 00:05:51,380 -Tiga. 134 00:05:51,380 --> 00:05:52,390 -Tiga. 135 00:05:52,390 --> 00:05:53,200 -Empat. 136 00:05:53,200 --> 00:05:53,720 -Empat. 137 00:05:53,720 --> 00:05:55,830 -Empat. 138 00:05:55,830 --> 00:05:56,580 -Lima 139 00:05:56,580 --> 00:05:57,120 -Lima. 140 00:05:57,120 --> 00:05:58,560 -Lima. 141 00:05:58,560 --> 00:06:03,770 -Jadi kombinasi adalah satu, dua, tiga, empat, lima. 142 00:06:03,770 --> 00:06:06,745 Itulah kombinasi terbodoh yang pernah saya dengar dalam hidup saya. 143 00:06:06,745 --> 00:06:09,290 Itulah jenis hal idiot akan di koper. 144 00:06:09,290 --> 00:06:11,540 -Terima kasih, Yang Mulia. 145 00:06:11,540 --> 00:06:12,940 -Apa yang Anda lakukan? 146 00:06:12,940 --> 00:06:14,230 -Aku mematikan dinding. 147 00:06:14,230 --> 00:06:14,630 -Tidak, Anda tidak. 148 00:06:14,630 --> 00:06:15,430 Anda mematikan seluruh film. 149 00:06:15,430 --> 00:06:16,722 -Saya harus menekan tombol yang salah. 150 00:06:16,722 --> 00:06:18,078 -Yah, meletakkannya kembali. 151 00:06:18,078 --> 00:06:18,805 Menempatkan film kembali. 152 00:06:18,805 --> 00:06:19,080 -Ya, Pak. 153 00:06:19,080 --> 00:06:19,270 Ya, Pak. 154 00:06:19,270 --> 00:06:19,830 -Mari kita pergi, Erna. 155 00:06:19,830 --> 00:06:20,270 Ayo, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Tentu saja Anda tahu saya masih harus menagih Anda untuk ini. 157 00:06:27,400 --> 00:06:28,325 -Nah, apakah itu berhasil? 158 00:06:28,325 --> 00:06:29,550 Dimana pintu gerbang? 159 00:06:29,550 --> 00:06:29,910 -Itu berhasil, Pak. 160 00:06:29,910 --> 00:06:30,770 Kami memiliki kombinasi. 161 00:06:30,770 --> 00:06:31,390 -Besar. 162 00:06:31,390 --> 00:06:35,630 Sekarang kita bisa mengambil setiap napas terakhir udara segar dari planet Druidia. 163 00:06:35,630 --> 00:06:36,550 Apa kombinasi? 164 00:06:36,550 --> 00:06:38,805 -Satu, dua, tiga, empat, lima. 165 00:06:38,805 --> 00:06:40,610 -Satu, dua, tiga, empat, lima? 166 00:06:40,610 --> 00:06:41,070 -Ya. 167 00:06:41,070 --> 00:06:41,760 -Itu menakjubkan. 168 00:06:41,760 --> 00:06:45,200 Aku punya kombinasi yang sama di bagasi saya. 169 00:06:45,200 --> 00:06:47,800 Siapkan spaceball 1 untuk keberangkatan segera. 170 00:06:47,800 --> 00:06:48,536 -Ya, Pak. 171 00:06:48,536 --> 00:06:52,350 -Dan mengubah kombinasi di bagasi saya. 172 00:06:52,350 --> 00:06:53,250 -Ow! 173 00:06:53,250 --> 00:06:55,020 [END PEMUTARAN VIDEO] 174 00:06:55,020 --> 00:06:57,470 >> DAVID J. Malan: Sebuah film yang menakjubkan Anda sekarang harus semua melihat. 175 00:07:00,600 --> 00:07:06,540 Jadi konteks di sini adalah bahwa dengan data tidak aman datang kesempatan untuk 176 00:07:06,540 --> 00:07:07,790 mengenkripsi dan berebut itu. 177 00:07:07,790 --> 00:07:11,060 Dan jadi ini, misalnya, adalah contoh dari pesan dienkripsi. 178 00:07:11,060 --> 00:07:12,980 Ini benar-benar mengatakan sesuatu dalam bahasa Inggris. 179 00:07:12,980 --> 00:07:14,750 Tapi itu jelas tidak sepenuhnya jelas. 180 00:07:14,750 --> 00:07:17,360 Dan kami akan datang lingkaran penuh hari ini untuk menggoda selain apa rahasia ini 181 00:07:17,360 --> 00:07:18,380 Pesan di sini adalah. 182 00:07:18,380 --> 00:07:22,370 Tapi di dunia nyata komputer, hal-hal bahkan tidak terlihat seperti mereka mungkin 183 00:07:22,370 --> 00:07:23,440 menjadi frase bahasa Inggris. 184 00:07:23,440 --> 00:07:27,500 Sebagai contoh, ini adalah apa yang Anda mungkin menemukan pada Linux atau Mac atau standar 185 00:07:27,500 --> 00:07:32,080 Komputer unix dalam file yang sekali waktu disebut file password. 186 00:07:32,080 --> 00:07:34,170 Saat ini, sudah dipindahkan ke tempat lain. 187 00:07:34,170 --> 00:07:38,660 Tetapi jika Anda melihat di tempat yang tepat pada sistem, Anda akan melihat tidak hanya Anda 188 00:07:38,660 --> 00:07:41,430 username atau bahwa orang lain pada sistem, tetapi Anda akan melihat 189 00:07:41,430 --> 00:07:43,410 dienkripsi versi password mereka. 190 00:07:43,410 --> 00:07:47,800 Memang, kata crypt ada menunjukkan bahwa hal-hal berikut dienkripsi. 191 00:07:47,800 --> 00:07:52,030 Dan rangkaian huruf acak dan karakter dan nomor dan 192 00:07:52,030 --> 00:07:56,370 sebagainya dapat didekripsi hanya dengan mengetahui rahasia umum beberapa - 193 00:07:56,370 --> 00:07:58,600 kata rahasia, nomor rahasia. 194 00:07:58,600 --> 00:08:02,760 Dan begitu memang, seni kriptografi pada akhirnya bermuara percaya dari beberapa 195 00:08:02,760 --> 00:08:05,700 mengurutkan dan mengetahui sesuatu yang orang lain tidak. 196 00:08:05,700 --> 00:08:10,010 Kita akan menjelajahi secara rinci sedikit lebih saat ini dan di pset yang akan datang. 197 00:08:10,010 --> 00:08:11,860 >> Dan sekarang kata pada lulus / gagal. 198 00:08:11,860 --> 00:08:15,250 Jadi, terutama, karena beberapa dari Anda telah menyelam ke pset 1, alat, dan 199 00:08:15,250 --> 00:08:18,390 dunia yang sangat baru untuk diri sendiri, menyadari bahwa frustrasi dan 200 00:08:18,390 --> 00:08:21,340 kebingungan dan hanya kesulitan teknis yang harus diharapkan. 201 00:08:21,340 --> 00:08:24,410 Terutama dengan pset pertama, di mana ada begitu banyak baru, hanya mendapatkan 202 00:08:24,410 --> 00:08:28,830 akrab dengan ls dan cd dan semua perintah misterius di lingkungan yang baru. 203 00:08:28,830 --> 00:08:32,679 Dan itu terpisah dari bahan aktual dan pemrograman sendiri. 204 00:08:32,679 --> 00:08:35,960 Jadi menyadari juga, bahwa ada pasti jam kantor yang ada sebagai 205 00:08:35,960 --> 00:08:36,770 struktur pendukung. 206 00:08:36,770 --> 00:08:38,620 Bagian ini dimulai Minggu mendatang. 207 00:08:38,620 --> 00:08:41,990 Tapi yang paling penting, jika Anda merasa hal itu ini bukan 208 00:08:41,990 --> 00:08:44,420 dunia untuk Anda, menyadari bahwa itu benar-benar hanya mengambil waktu. 209 00:08:44,420 --> 00:08:47,520 Dan kalau bukan karena kesempatan ini tahun yang lalu bagi saya mengambil kelas 210 00:08:47,520 --> 00:08:50,840 lulus / gagal, jujur, saya tidak akan pernah menginjakkan kaki di kelas. 211 00:08:50,840 --> 00:08:53,520 Dan Anda dapat mengubah ini sampai, katakanlah, Senin kelima kursus. 212 00:08:53,520 --> 00:08:57,110 Jadi jika Anda berada di tepi sekarang, menyadari bahwa daripada kepala ke beberapa lainnya 213 00:08:57,110 --> 00:09:01,000 air sama sekali, jangan tentu mempertimbangkan hanya berubah untuk lulus / gagal. 214 00:09:01,000 --> 00:09:03,750 Sekali lagi, tidak ada yang benar-benar budaya ini di sini di Harvard mengambil hal-hal 215 00:09:03,750 --> 00:09:08,080 lulus / gagal karena semua orang benar-benar ingin mencapai atau overachieve. 216 00:09:08,080 --> 00:09:11,470 Tapi terus terang, ini adalah cara yang indah untuk mencoba sesuatu yang tidak mungkin 217 00:09:11,470 --> 00:09:13,110 menjadi familiar bagi Anda. 218 00:09:13,110 --> 00:09:17,090 Dan Anda akan berakhir melakukan dalam banyak kasus cukup baik, mungkin 219 00:09:17,090 --> 00:09:18,040 banyak kejutan Anda. 220 00:09:18,040 --> 00:09:20,850 Dan dalam hal yang lebih konkret, apa yang saya pikir lulus / gagal pada umumnya tidak, 221 00:09:20,850 --> 00:09:23,350 terutama karena Anda mungkin pernah mengalami dengan pset 0, jika Anda telah menempatkan 222 00:09:23,350 --> 00:09:27,200 dalam 10 jam, 15 jam, 25 jam ke pset beberapa - dan Anda hanya membenturkan 223 00:09:27,200 --> 00:09:28,180 Anda kepala ke dinding, 224 00:09:28,180 --> 00:09:29,850 dan semakin Super larut malam, 225 00:09:29,850 --> 00:09:31,880 tetapi Anda telah mengambil pset seperti 90% dari jalan, 226 00:09:31,880 --> 00:09:33,780 Anda tahu bahwa Anda tidak bisa mengetahui satu hal - 227 00:09:33,780 --> 00:09:36,830 lulus / gagal benar-benar mengambil tepi off dari kelas seperti ini, di mana Anda dapat mengurutkan 228 00:09:36,830 --> 00:09:39,150 dari bahagia bilang oke, aku tahu itu tidak sempurna. 229 00:09:39,150 --> 00:09:40,470 Tapi aku bekerja pantatku off ini. 230 00:09:40,470 --> 00:09:42,410 Aku cukup senang dengan mana ia berakhir. 231 00:09:42,410 --> 00:09:44,780 Dan itu akan memenuhi harapan untuk lulus / gagal. 232 00:09:44,780 --> 00:09:46,850 Jadi jangan ingat-ingat. 233 00:09:46,850 --> 00:09:47,140 >> Baiklah. 234 00:09:47,140 --> 00:09:50,980 Jadi anda yang telah berjuang untuk menggunakan Universitas Harvard Wi-Fi tahu 235 00:09:50,980 --> 00:09:54,780 bahwa ada SSID CS50, koneksi Wi-Fi beredar bahwa Anda 236 00:09:54,780 --> 00:09:56,520 mungkin lebih beruntung untuk. 237 00:09:56,520 --> 00:09:59,430 Ini sedikit ironis bahwa password untuk ini - jika Anda ingin mencoba 238 00:09:59,430 --> 00:10:03,080 menghubungkan ke ini untuk kecepatan yang lebih baik dan biarkan kami tahu apakah itu tidak lebih baik - 239 00:10:03,080 --> 00:10:09,240 adalah salah satu, dua, tiga, empat, lima, sepanjang jalan hingga delapan karena delapan adalah 240 00:10:09,240 --> 00:10:10,270 lebih aman dari lima. 241 00:10:10,270 --> 00:10:15,520 Jadi jika Anda memerlukan sandi Wi-Fi, koneksi ke CS50 nirkabel sini. 242 00:10:15,520 --> 00:10:16,950 Satu, dua, tiga, empat, lima, enam, tujuh, delapan. 243 00:10:16,950 --> 00:10:20,440 Dan kirim ke CS50 Diskusikan jika Anda masih memiliki masalah konektivitas intermittent, 244 00:10:20,440 --> 00:10:24,880 dan kami akan membiarkan kekuatan yang akan tahu untuk ruang ini. 245 00:10:24,880 --> 00:10:25,180 >> Baiklah. 246 00:10:25,180 --> 00:10:30,350 Jadi teaser cepat, terutama bagi Anda yang penggemar laki-laki atau perempuan 247 00:10:30,350 --> 00:10:31,900 Semua Apple dari hal. 248 00:10:31,900 --> 00:10:37,566 Apa yang saya digali dari beberapa tahun yang lalu adalah file ini di sini, ilock.c, hanya untuk 249 00:10:37,566 --> 00:10:40,930 jenis membuat lebih konkrit dan lebih kompleks beberapa C lebih mendasar 250 00:10:40,930 --> 00:10:42,350 program yang kami telah menulis. 251 00:10:42,350 --> 00:10:44,360 Jadi saya membuka file ini, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Ini tersedia pada halaman kuliah untuk hari ini. 253 00:10:46,830 --> 00:10:49,470 Di sisi kiri, Anda akan melihat daftar panjang fungsi. 254 00:10:49,470 --> 00:10:51,860 Jadi rekan yang menulis ini menulis sebuah banyak fungsi, 255 00:10:51,860 --> 00:10:53,290 lebih dari sekedar utama. 256 00:10:53,290 --> 00:10:55,490 Dia menggunakan sejumlah besar perpustakaan di sini. 257 00:10:55,490 --> 00:11:00,450 Dan jika kita mulai bergulir melalui, apa ini sebenarnya adalah sangat 258 00:11:00,450 --> 00:11:04,670 pertama, saya percaya, retak untuk iPhone asli. 259 00:11:04,670 --> 00:11:08,000 Bila Anda ingin jailbreak iPhone asli, yang berarti untether 260 00:11:08,000 --> 00:11:11,800 itu dari AT & T dan benar-benar menginstal software khusus di atasnya dan melakukan hal-hal 261 00:11:11,800 --> 00:11:13,510 bahwa Apple tidak ingin orang untuk melakukan - 262 00:11:13,510 --> 00:11:17,020 baik, seseorang mengambil waktu untuk mencari tahu persis bagaimana mereka bisa mengeksploitasi 263 00:11:17,020 --> 00:11:20,880 software kekurangan, kesalahan, bug, dalam perangkat lunak Apple. 264 00:11:20,880 --> 00:11:22,650 Dan dengan demikian lahir ilock.c. 265 00:11:22,650 --> 00:11:26,670 Bahwa jika Anda membuatnya pada komputer dan diinstal ke iPhone yang 266 00:11:26,670 --> 00:11:29,810 terhubung ke komputer Anda melalui, katakanlah, kabel USB, ini akan memberi Anda 267 00:11:29,810 --> 00:11:33,360 hak akses administratif atau root pada iPhone Anda dan membiarkan Anda melakukan cukup banyak 268 00:11:33,360 --> 00:11:34,170 apa pun yang Anda inginkan. 269 00:11:34,170 --> 00:11:36,740 >> Dan begitu sudah ada kucing ini menarik dan permainan mouse antara Apple dan 270 00:11:36,740 --> 00:11:39,920 seluruh dunia khususnya karena mereka, seperti banyak perusahaan, cobalah untuk mengunci 271 00:11:39,920 --> 00:11:43,220 mereka hal-hal ke bawah sehingga Anda hanya bisa melakukannya dengan itu apa yang mereka inginkan. 272 00:11:43,220 --> 00:11:46,620 Namun berkat orang-orang seperti ini dan pemahaman mereka tentang tingkat rendah 273 00:11:46,620 --> 00:11:50,580 rincian dan, dalam kasus ini, pemrograman C dan banyak konstruksi familiar 274 00:11:50,580 --> 00:11:54,630 bahwa kita sudah mulai bermain dengan, Anda dapat benar-benar memanfaatkan 275 00:11:54,630 --> 00:11:59,050 hardware dengan cara Anda lihat cocok dan belum tentu beberapa entitas perusahaan. 276 00:11:59,050 --> 00:12:01,360 Jadi misalnya, saya tidak tahu apa semua ini lakukan. 277 00:12:01,360 --> 00:12:03,220 Tapi GetVersion terdengar cukup sederhana. 278 00:12:03,220 --> 00:12:05,480 Dan sepertinya ini adalah fungsi bahwa orang ini menulis. 279 00:12:05,480 --> 00:12:09,240 Ambil beberapa jenis integer sebagai argumen, tidak kembali apa-apa, namun 280 00:12:09,240 --> 00:12:13,080 tampaknya loop dengan untuk loop di sini dan jika kondisi, jika kondisi, 281 00:12:13,080 --> 00:12:15,620 istirahat, dan entah bagaimana berhubungan dengan nomor versi. 282 00:12:15,620 --> 00:12:16,700 Jika kita scroll ke bawah - 283 00:12:16,700 --> 00:12:19,570 meskipun banyak kata kunci akan menjadi baru, dan ada 284 00:12:19,570 --> 00:12:22,590 seluruh banyak fungsi di sini kita belum pernah melihat dan mungkin tidak pernah melihat lebih 285 00:12:22,590 --> 00:12:23,830 jalannya semester - 286 00:12:23,830 --> 00:12:27,150 pada akhir hari, itu mengikuti aturan yang sama dan logika yang kita sudah 287 00:12:27,150 --> 00:12:28,760 bermain dengan sejauh ini. 288 00:12:28,760 --> 00:12:34,220 Jadi ini jauh terlalu tua untuk memecahkan 3s iPhone 4s atau atau segera 5s, hari ini, 289 00:12:34,220 --> 00:12:37,320 tapi tahu bahwa itu semua sangat banyak berasal dari dunia ini bahwa kita telah 290 00:12:37,320 --> 00:12:38,430 menyelam ke dalam. 291 00:12:38,430 --> 00:12:41,900 >> Jadi mari kita lihat contoh yang sedikit lebih sederhana. 292 00:12:41,900 --> 00:12:46,100 Ini satu, hanya untuk mendapatkan pemanasan dengan beberapa sintaks dan juga beberapa data lainnya 293 00:12:46,100 --> 00:12:49,240 jenis yang kita bicarakan, tetapi belum benar-benar terlihat di C. Jadi ini adalah 294 00:12:49,240 --> 00:12:51,680 file bernama positive1.c. 295 00:12:51,680 --> 00:12:55,120 Dan per komentar di atas, ini hanya menuntut bahwa pengguna memberikan 296 00:12:55,120 --> 00:12:55,960 positif nomor. 297 00:12:55,960 --> 00:12:59,530 Jadi contoh dari sebuah loop do-while, yang bagus bagi pengguna-interaktif 298 00:12:59,530 --> 00:13:01,980 program di mana Anda perlu untuk memberitahu pengguna untuk melakukan sesuatu. 299 00:13:01,980 --> 00:13:05,190 Dan jika mereka tidak bekerja sama, Anda berteriak pada mereka atau menolak masukan mereka. 300 00:13:05,190 --> 00:13:11,610 Kasus di titik, saya akan melakukan baris 19 sampai 24 selama pengguna memiliki 301 00:13:11,610 --> 00:13:14,310 tidak memberi saya angka positif. 302 00:13:14,310 --> 00:13:20,400 Sekarang ini detail di sini on line 18, mengapa saya menyatakan n diatas ini seluruh 303 00:13:20,400 --> 00:13:24,490 membangun perulangan sebagai lawan tepat di sebelah jalur 22 di mana aku 304 00:13:24,490 --> 00:13:26,880 benar-benar peduli untuk mendapatkan n? 305 00:13:26,880 --> 00:13:27,330 Ya? 306 00:13:27,330 --> 00:13:27,780 [Tak terdengar] 307 00:13:27,780 --> 00:13:29,040 >> DAVID J. Malan: Ya, jadi ini masalah lingkup. 308 00:13:29,040 --> 00:13:30,850 Dan dalam istilah awam, apa lingkup lihat? 309 00:13:34,690 --> 00:13:36,610 Ya? 310 00:13:36,610 --> 00:13:37,860 [Tak terdengar] 311 00:13:40,040 --> 00:13:41,105 DAVID J. Malan: Bisakah Anda berbicara sedikit lebih keras? 312 00:13:41,105 --> 00:13:43,450 SPEAKER 1: Di mana Anda dapat mengakses variabel tertentu. 313 00:13:43,450 --> 00:13:45,170 DAVID J. Malan: Sempurna. 314 00:13:45,170 --> 00:13:47,360 Di mana Anda dapat mengakses variabel tertentu. 315 00:13:47,360 --> 00:13:50,400 Dan secara umum, aturan praktis sejauh ini telah bahwa ruang lingkup dari beberapa 316 00:13:50,400 --> 00:13:55,860 variabel didefinisikan oleh kurung kurawal terbaru bahwa Anda telah melihat. 317 00:13:55,860 --> 00:14:02,010 Dan sehingga dalam kasus ini, jika saya membuat kesalahan dengan menyatakan n on line 22, 318 00:14:02,010 --> 00:14:03,010 baris yang akan bekerja. 319 00:14:03,010 --> 00:14:10,990 Saya akan mendapatkan sebuah int, dan saya akan memasukkannya ke dalam n variabel di baris 22. 320 00:14:10,990 --> 00:14:16,900 Tapi yang baris kode sekarang akan tidak tahu apa yang saya bicarakan? 321 00:14:16,900 --> 00:14:22,650 Jadi 25, dan ternyata 24, juga, karena dalam kasus ini, itu berada di luar 322 00:14:22,650 --> 00:14:23,610 dari kurung kurawal. 323 00:14:23,610 --> 00:14:27,280 Jadi hanya sedikit gangguan tapi sangat mudah dipecahkan dengan hanya menyatakan 324 00:14:27,280 --> 00:14:30,140 luar variabel fungsi itu sendiri. 325 00:14:30,140 --> 00:14:32,600 >> Sekarang kita akan lihat nanti hari, Anda bisa melangkah lebih jauh. 326 00:14:32,600 --> 00:14:34,860 Dan Anda bahkan bisa mendapatkan sedikit malas - 327 00:14:34,860 --> 00:14:37,320 dan ini tidak direkomendasikan, secara umum - 328 00:14:37,320 --> 00:14:42,260 tetapi Anda bahkan bisa malas dan menempatkan variabel global, sehingga untuk berbicara, tidak 329 00:14:42,260 --> 00:14:46,670 dalam fungsi, bukan dalam lingkaran, tetapi dalam file itu sendiri, di luar 330 00:14:46,670 --> 00:14:49,600 dari semua fungsi yang sudah Anda tulis, seperti yang saya lakukan di sini pada baris 15. 331 00:14:49,600 --> 00:14:51,160 Tapi ini umumnya disukai. 332 00:14:51,160 --> 00:14:55,680 Tapi menyadari bahwa ini adalah solusi kadang-kadang masalah lain, seperti yang kita akan 333 00:14:55,680 --> 00:14:56,620 akhirnya melihat. 334 00:14:56,620 --> 00:14:58,130 Jadi untuk saat ini, kita akan meninggalkan seperti ini. 335 00:14:58,130 --> 00:15:01,030 Tapi mari kita lihat apakah kita dapat menulis ulang ini hanya untuk memulai mengekspresikan diri kita 336 00:15:01,030 --> 00:15:01,990 sedikit berbeda. 337 00:15:01,990 --> 00:15:05,330 >> Jadi program ini, hanya harus jelas, adalah positive1. 338 00:15:05,330 --> 00:15:11,810 Biarkan aku pergi ke depan di sini dan di jendela terminal saya membuat positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 Mengkompilasi, oke. 340 00:15:12,740 --> 00:15:14,910 Aku akan menjalankan positive1, tekan Enter. 341 00:15:14,910 --> 00:15:16,820 Saya menuntut bahwa Anda memberi saya bilangan bulat positif. 342 00:15:16,820 --> 00:15:18,260 Aku akan mengatakan -1. 343 00:15:18,260 --> 00:15:18,910 Itu tidak bekerja. 344 00:15:18,910 --> 00:15:22,150 0, 99, yang tampaknya bekerja. 345 00:15:22,150 --> 00:15:23,570 Mungkin tidak tes yang paling ketat. 346 00:15:23,570 --> 00:15:26,480 Tapi setidaknya itu adalah cek kewarasan bagus yang kita berada di jalur yang benar. 347 00:15:26,480 --> 00:15:29,240 Jadi sekarang biarkan aku pergi ke depan dan membuka versi dua ini. 348 00:15:29,240 --> 00:15:32,500 Dan apa yang berbeda sudah? 349 00:15:32,500 --> 00:15:35,140 Menerapkan hal yang sama. 350 00:15:35,140 --> 00:15:40,660 Tapi apa yang melompat keluar sebagai jelas berbeda kali ini? 351 00:15:40,660 --> 00:15:42,560 Ya, jadi ini bool dalam warna hijau. 352 00:15:42,560 --> 00:15:45,980 Gedit telah disorot dalam warna hijau ini dikenal sebagai kata kunci bool, 353 00:15:45,980 --> 00:15:47,000 yang merupakan tipe data. 354 00:15:47,000 --> 00:15:51,080 Ini tidak datang dibangun untuk semua versi C. Anda perlu menyertakan 355 00:15:51,080 --> 00:15:52,010 spesifik perpustakaan. 356 00:15:52,010 --> 00:15:54,770 Dalam kasus kami, saya termasuk perpustakaan CS50 sehingga kita 357 00:15:54,770 --> 00:15:56,460 memiliki akses ke bool. 358 00:15:56,460 --> 00:15:59,810 Tapi di baris 18, kita tampaknya memiliki nilai Boolean sini disebut bersyukur. 359 00:15:59,810 --> 00:16:01,040 Jadi aku bisa disebut apa-apa ini. 360 00:16:01,040 --> 00:16:04,500 Tapi aku menyebutnya bersyukur hanya untuk jenis menyampaikan beberapa makna semantik. 361 00:16:04,500 --> 00:16:07,930 Jadi awalnya on line 18, saya tampaknya tidak bersyukur karena 362 00:16:07,930 --> 00:16:12,150 Nilai Boolean bersyukur diinisialisasi ke false dalam baris 18. 363 00:16:12,150 --> 00:16:16,890 Dan maka tampaknya apa yang saya lakukan di sini di baris 21 sampai 23 adalah aku baru saja 364 00:16:16,890 --> 00:16:18,610 jenis ditulis ulang logika saya. 365 00:16:18,610 --> 00:16:21,020 Jadi tidak secara fungsional berbeda. 366 00:16:21,020 --> 00:16:26,940 Tapi sejalan 22 sekarang, saya memeriksa apakah int pengguna telah memberikan lebih besar dari 367 00:16:26,940 --> 00:16:31,120 0, maka saya hanya mengubah nilai bersyukur ke true. 368 00:16:31,120 --> 00:16:32,290 Dan mengapa saya melakukan itu? 369 00:16:32,290 --> 00:16:35,600 Karena sejalan 25, rupanya, aku akan memeriksa kondisi. 370 00:16:35,600 --> 00:16:39,380 Melakukan loop ini sementara bersyukur adalah palsu. 371 00:16:39,380 --> 00:16:43,610 >> Jadi saya mengusulkan ini sebagai alternatif untuk versi satu karena setidaknya 372 00:16:43,610 --> 00:16:45,130 sedikit lebih intuitif, mungkin. 373 00:16:45,130 --> 00:16:46,900 Ini sedikit lebih membumi dalam bahasa Inggris. 374 00:16:46,900 --> 00:16:51,710 Jadi melakukan hal berikut saat Anda tidak bersyukur atau saat bersyukur adalah palsu. 375 00:16:51,710 --> 00:16:55,890 Dan kali ini, juga, saya tampaknya tidak peduli untuk mengingat apa yang pengguna mengetik 376 00:16:55,890 --> 00:16:57,730 di karenakan pemberitahuan tidak ada n variabel. 377 00:16:57,730 --> 00:16:58,650 Jadi sebenarnya, I - 378 00:16:58,650 --> 00:17:00,080 sedikit kebohongan putih di sana. 379 00:17:00,080 --> 00:17:02,770 Secara fungsional, program ini sedikit berbeda setelah kami sampai ke bawah 380 00:17:02,770 --> 00:17:04,819 karena aku tidak mengingat apa n adalah. 381 00:17:04,819 --> 00:17:09,579 Tapi saya ingin menunjukkan di sini juga bahwa meskipun kita telah melihat GetInt dan 382 00:17:09,579 --> 00:17:13,920 GetString yang digunakan pada sisi kanan tanda sama sejauh ini sehingga 383 00:17:13,920 --> 00:17:17,160 kita ingat nilai, secara teknis, itu tidak benar-benar diperlukan. 384 00:17:17,160 --> 00:17:20,950 Jika untuk alasan apapun Anda tidak peduli untuk menyimpan nilai, Anda hanya ingin 385 00:17:20,950 --> 00:17:25,710 untuk memeriksa nilai, perhatikan bahwa kita hanya bisa menulis ini sebagai GetInt terbuka 386 00:17:25,710 --> 00:17:27,000 paren, paren dekat. 387 00:17:27,000 --> 00:17:30,460 Itu fungsi akan mengembalikan nilai, seperti yang kita telah mengatakan. 388 00:17:30,460 --> 00:17:32,010 Ini akan memberi Anda kembali sebuah int. 389 00:17:32,010 --> 00:17:36,450 Dan jadi jika Anda berpikir mental ini terjadi, ketika saya mengetik 99, GetInt 390 00:17:36,450 --> 00:17:38,160 mengembalikan nomor 99. 391 00:17:38,160 --> 00:17:41,330 Dan begitu konseptual, itu seolah-olah kode saya sebenarnya ini. 392 00:17:41,330 --> 00:17:45,880 Jadi jika 99 memang lebih besar dari 0, maka bersyukur menjadi benar. 393 00:17:45,880 --> 00:17:50,420 Kemudian baris 25 menyadari ooh, kita sudah selesai karena aku sekarang bersyukur. 394 00:17:50,420 --> 00:17:54,590 Dan sejalan 26, kami hanya mengatakan, terima kasih untuk bilangan bulat positif, apa pun 395 00:17:54,590 --> 00:17:55,710 kebetulan. 396 00:17:55,710 --> 00:17:58,900 >> Sekarang mari kita lakukan sintaksis gula sedikit di sini, sehingga untuk berbicara. 397 00:17:58,900 --> 00:18:02,990 Mari kita lihat apakah kita dapat membersihkan baris ini 25 dengan varian ketiga dan terakhir 398 00:18:02,990 --> 00:18:04,640 di positive3. 399 00:18:04,640 --> 00:18:08,250 Jadi perhatikan satu-satunya perbedaan sekarang adalah apa baris kode? 400 00:18:11,930 --> 00:18:13,260 Ya, jadi 25. 401 00:18:13,260 --> 00:18:15,520 Dan kita tidak benar-benar melihat trik ini dulu. 402 00:18:15,520 --> 00:18:19,510 Tapi kami memang melihat tanda seru pada hari Senin, yang menunjukkan apa? 403 00:18:19,510 --> 00:18:20,970 Jadi tidak, atau negasi. 404 00:18:20,970 --> 00:18:23,460 Jadi mengambil nilai Boolean dan flip nilainya. 405 00:18:23,460 --> 00:18:24,390 Benar menjadi palsu. 406 00:18:24,390 --> 00:18:25,500 Salah menjadi benar. 407 00:18:25,500 --> 00:18:28,910 Jadi ini, saya akan mengusulkan, bahkan sedikit lebih intuitif cara 408 00:18:28,910 --> 00:18:32,200 menulis kode karena saya masih bersyukur menginisialisasi ke false. 409 00:18:32,200 --> 00:18:33,530 Saya masih melakukan hal berikut. 410 00:18:33,530 --> 00:18:35,700 Aku mengatur bersyukur untuk benar ketika saatnya tiba. 411 00:18:35,700 --> 00:18:40,690 Tapi sekarang Anda benar-benar bisa hanya menerjemahkan kode ini secara lisan kiri ke kanan, 412 00:18:40,690 --> 00:18:42,550 sementara tidak bersyukur. 413 00:18:42,550 --> 00:18:46,170 Karena bang, atau tanda seru, menunjukkan gagasan tidak, jadi sementara 414 00:18:46,170 --> 00:18:47,010 tidak bersyukur. 415 00:18:47,010 --> 00:18:49,740 >> Jadi sekali lagi, kami belum memperkenalkan konsep-konsep baru per se. 416 00:18:49,740 --> 00:18:53,230 Kami telah berbicara tentang boolean kembali ketika kami bermain dengan Scratch. 417 00:18:53,230 --> 00:18:55,690 Tapi sadar sekarang kita hanya bisa mulai menulis kode kita di 418 00:18:55,690 --> 00:18:56,550 berbagai cara. 419 00:18:56,550 --> 00:19:00,010 Jadi terutama di pset1, jika Anda semacam berjuang untuk mencari tahu cara untuk 420 00:19:00,010 --> 00:19:03,400 menulis beberapa program, kemungkinan Anda beruntung karena ada yang akan ada 421 00:19:03,400 --> 00:19:05,780 sejumlah solusi yang dapat terjadi atas. 422 00:19:05,780 --> 00:19:09,850 Misalnya, ini hanya tiga untuk bahkan yang paling sederhana dari program. 423 00:19:09,850 --> 00:19:10,180 Baiklah. 424 00:19:10,180 --> 00:19:13,860 Dan sekarang mengingat pada hari Senin, kami meninggalkan pada catatan ini dengan nilai-nilai kembali. 425 00:19:13,860 --> 00:19:18,280 Jadi untuk pertama kalinya, kami menulis sebuah program yang tidak hanya memiliki utama, 426 00:19:18,280 --> 00:19:22,240 juga memiliki fungsi kustom sendiri yang saya tulis di sini. 427 00:19:22,240 --> 00:19:26,640 Jadi sejalan 31 sampai 34, saya telah menerapkan fungsi kubus. 428 00:19:26,640 --> 00:19:27,800 Ini tidak rumit. 429 00:19:27,800 --> 00:19:29,830 Ini hanya kali kali, dalam kasus ini. 430 00:19:29,830 --> 00:19:34,920 Tapi apa yang penting tentang hal itu adalah bahwa aku mengambil input dalam bentuk dan 431 00:19:34,920 --> 00:19:38,910 Aku kembali output dalam bentuk kali kali. 432 00:19:38,910 --> 00:19:43,940 >> Jadi sekarang aku punya kemampuan, seperti saya dulu dengan printf saja, untuk memanggil 433 00:19:43,940 --> 00:19:47,120 fungsi ini dengan memanggil fungsi kubus. 434 00:19:47,120 --> 00:19:49,470 Dan fungsi kubus mengambil beberapa masukan. 435 00:19:49,470 --> 00:19:52,030 Dan fungsi kubus kembali beberapa output. 436 00:19:52,030 --> 00:19:56,660 Dan begitu sebaliknya, printf hanya melakukan sesuatu. 437 00:19:56,660 --> 00:19:59,490 Ini tidak kembali apa-apa yang kita peduli - meskipun, sebagai 438 00:19:59,490 --> 00:20:00,820 samping, itu tidak mengembalikan nilai. 439 00:20:00,820 --> 00:20:02,650 Anda hanya umumnya mengabaikannya. 440 00:20:02,650 --> 00:20:04,000 Printf hanya melakukan sesuatu. 441 00:20:04,000 --> 00:20:06,220 Ini memiliki efek samping dari mencetak ke layar. 442 00:20:06,220 --> 00:20:09,480 Sebaliknya di sini, kita memiliki fungsi kubus, yang 443 00:20:09,480 --> 00:20:11,400 sebenarnya kembali sesuatu. 444 00:20:11,400 --> 00:20:12,960 >> Jadi ini umumnya - 445 00:20:12,960 --> 00:20:15,260 bagi mereka yang terbiasa dengan ini, itu ide yang cukup jelas. 446 00:20:15,260 --> 00:20:18,460 Tetapi bagi mereka yang kurang akrab dengan ide lewat di input dan mendapatkan 447 00:20:18,460 --> 00:20:21,700 output kembali, mari kita coba sesuatu yang super hanya sederhana. 448 00:20:21,700 --> 00:20:25,180 Apakah ada yang nyaman datang di panggung sebentar? 449 00:20:25,180 --> 00:20:27,460 Anda harus nyaman dengan kamera pada Anda, juga. 450 00:20:27,460 --> 00:20:27,640 Ya. 451 00:20:27,640 --> 00:20:28,610 Oke, siapa namamu? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 DAVID J. Malan: Ken. 454 00:20:29,420 --> 00:20:29,810 Baiklah, Ken. 455 00:20:29,810 --> 00:20:31,060 Ayo up. 456 00:20:31,060 --> 00:20:34,660 Jadi Ken akan menjadi fungsi dari macam di sini. 457 00:20:34,660 --> 00:20:35,760 Dan mari kita pergi ke depan dan melakukan hal ini. 458 00:20:35,760 --> 00:20:38,790 Mari kita sedikit mewah. 459 00:20:38,790 --> 00:20:39,770 Senang bertemu Anda. 460 00:20:39,770 --> 00:20:41,010 Selamat datang di tengah panggung. 461 00:20:41,010 --> 00:20:41,980 Baiklah. 462 00:20:41,980 --> 00:20:45,590 Mari kita menekan tombol ini di sini. 463 00:20:45,590 --> 00:20:46,420 Baiklah. 464 00:20:46,420 --> 00:20:49,490 Jadi di sini Anda memiliki papan tulis modern. 465 00:20:49,490 --> 00:20:53,050 Dan apa yang saya adalah fungsi utama, misalnya. 466 00:20:53,050 --> 00:20:55,990 Dan saya tidak memiliki iPad di tanganku. 467 00:20:55,990 --> 00:20:59,000 Saya tidak begitu ingat bagaimana - baik, sebenarnya, tidak bisa mengatakan bahwa. 468 00:20:59,000 --> 00:21:02,200 Saya tidak benar-benar memiliki tulisan tangan yang bagus. 469 00:21:02,200 --> 00:21:05,260 Dan karena itu, saya ingin Anda untuk mencetak sesuatu di layar untuk saya. 470 00:21:05,260 --> 00:21:07,470 >> Jadi saya menjadi program utama. 471 00:21:07,470 --> 00:21:15,060 Dan saya akan memiliki Anda mengatakan ini dengan menulis dalam cakar ayam saya dan 472 00:21:15,060 --> 00:21:16,600 kemudian melewati Anda masukan. 473 00:21:16,600 --> 00:21:20,000 Jadi seperti konyol meskipun latihan ini, gagasan tentang fungsi dan memanggil 474 00:21:20,000 --> 00:21:22,260 fungsi dan mengembalikan fungsi benar-benar bermuara pada hal ini. 475 00:21:22,260 --> 00:21:23,120 Saya utama. 476 00:21:23,120 --> 00:21:26,270 Saya baru saja menulis printf ("sesuatu") pada layar. 477 00:21:26,270 --> 00:21:27,470 Saya sedang menjalankan program ini. 478 00:21:27,470 --> 00:21:30,900 Dan segera setelah printf dipanggil, dibutuhkan satu argumen - atau satu parameter, 479 00:21:30,900 --> 00:21:31,660 kadang - 480 00:21:31,660 --> 00:21:32,780 antara tanda kutip ganda. 481 00:21:32,780 --> 00:21:33,960 Berikut ini adalah argumen itu. 482 00:21:33,960 --> 00:21:35,740 Saya menyerahkannya pada Ken. 483 00:21:35,740 --> 00:21:39,390 Sekarang dia adalah kotak hitam menulis beberapa beberapa tahun yang lalu yang tampaknya 484 00:21:39,390 --> 00:21:41,070 hanya tahu bagaimana untuk mencetak hal-hal di layar. 485 00:21:41,070 --> 00:21:42,320 >> Jadi, jalankan. 486 00:21:48,842 --> 00:21:49,900 Itu tidak buruk. 487 00:21:49,900 --> 00:21:50,890 Jadi, sangat baik. 488 00:21:50,890 --> 00:21:52,900 Jadi sekarang Ken dilakukan mengeksekusi. 489 00:21:52,900 --> 00:21:55,810 Apakah dia harus menyerahkan apa-apa kembali? 490 00:21:55,810 --> 00:21:57,240 Jadi tidak yang kita lihat sejauh ini. 491 00:21:57,240 --> 00:21:59,230 Sekali lagi, printf tidak benar-benar kembali nomor. 492 00:21:59,230 --> 00:22:01,640 Tapi kami akan mengabaikan bahwa untuk saat ini karena kita belum pernah menggunakannya. 493 00:22:01,640 --> 00:22:03,400 Jadi itu saja untuk Ken. 494 00:22:03,400 --> 00:22:06,650 Dan jadi sekarang main datang kembali untuk mengeksekusi - 495 00:22:06,650 --> 00:22:09,630 utama mengambil alih kendali program lagi karena baris kode, 496 00:22:09,630 --> 00:22:11,010 printf, dilakukan mengeksekusi. 497 00:22:11,010 --> 00:22:13,890 Dan kami pergi tentang cara kami melaksanakan apapun jalur lain yang ada. 498 00:22:13,890 --> 00:22:14,130 >> Baiklah. 499 00:22:14,130 --> 00:22:17,080 Jadi sekarang mari kita coba contoh yang sedikit berbeda. 500 00:22:17,080 --> 00:22:22,430 Dan ini waktu di sini, mari kita pertama menghapus layar di sini. 501 00:22:22,430 --> 00:22:24,670 Dan kali ini, kita akan melakukan fungsi cubing. 502 00:22:24,670 --> 00:22:27,350 Tapi kali ini, saya mengharapkan nilai output. 503 00:22:27,350 --> 00:22:28,630 Jadi mari kita pergi ke depan dan melakukan hal ini. 504 00:22:28,630 --> 00:22:35,680 Jadi sekarang aku punya baris kode yang mengatakan x = kubus (x). 505 00:22:35,680 --> 00:22:36,930 Jadi sebenarnya ayo - 506 00:22:41,450 --> 00:22:43,940 baris kode, ingat, tampak seperti ini. 507 00:22:43,940 --> 00:22:45,960 x = kubus (x). 508 00:22:45,960 --> 00:22:48,100 Jadi bagaimana ini akan bekerja? 509 00:22:48,100 --> 00:22:50,820 Jadi mari kita pergi ke depan dan memberikan layar putih lagi. 510 00:22:50,820 --> 00:22:55,000 Dan saya akan menulis sekarang turun nilai x, yang pada saat ini dalam 511 00:22:55,000 --> 00:23:01,080 Waktu kebetulan, katakanlah, 2, untuk tetap sederhana. 512 00:23:01,080 --> 00:23:04,890 Jadi saya telah menulis di selembar kertas nilai 2, 513 00:23:04,890 --> 00:23:06,100 yang adalah x nilai saya. 514 00:23:06,100 --> 00:23:08,250 Saya menyerahkannya kepada Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: Dan aku hanya menulis jawabannya? 516 00:23:09,200 --> 00:23:12,660 DAVID J. Malan: Ya, mari kita menulis jawabannya. 517 00:23:12,660 --> 00:23:13,030 Oke. 518 00:23:13,030 --> 00:23:16,280 Dan sekarang dia harus kembali saya sesuatu. 519 00:23:16,280 --> 00:23:17,560 Jadi - 520 00:23:17,560 --> 00:23:18,170 sempurna. 521 00:23:18,170 --> 00:23:18,840 Bagus segue. 522 00:23:18,840 --> 00:23:21,970 >> Jadi sekarang dia tangan saya kembali nilai 8, dalam kasus ini. 523 00:23:21,970 --> 00:23:23,220 Dan apa yang harus saya lakukan dengan itu? 524 00:23:23,220 --> 00:23:26,130 Nah, sebenarnya, mari kita lihat. 525 00:23:26,130 --> 00:23:26,640 Dapatkan hak ini. 526 00:23:26,640 --> 00:23:27,880 Apa yang akan saya lakukan dengan itu? 527 00:23:27,880 --> 00:23:31,900 Sekarang aku akan mengambil nilai ini dan benar-benar menyimpannya pada mereka 528 00:23:31,900 --> 00:23:33,400 sama bit dalam memori. 529 00:23:33,400 --> 00:23:35,030 Tapi perhatikan, aku agak berjuang di sini. 530 00:23:35,030 --> 00:23:38,280 Aku agak bingung karena di mana saya benar-benar menulis nilai x? 531 00:23:38,280 --> 00:23:41,840 Karena apa yang saya baru saja dilakukan secara fisik tangan Ken selembar kertas 532 00:23:41,840 --> 00:23:44,400 yang memiliki nilai 2, yang x. 533 00:23:44,400 --> 00:23:46,300 Dan memang, inilah yang terjadi. 534 00:23:46,300 --> 00:23:50,100 Jadi ternyata bahwa ketika Anda memanggil fungsi, dan Anda lulus dalam argumen 535 00:23:50,100 --> 00:23:54,130 seperti "hello world" atau Anda lulus dalam argumen seperti 2, secara umum, Anda 536 00:23:54,130 --> 00:23:56,720 lewat di salinan argumen itu. 537 00:23:56,720 --> 00:24:01,020 Dan jadi seperti aku menuliskan nomor 2 di sini dan menyerahkannya kepada Ken; yang harus 538 00:24:01,020 --> 00:24:04,760 berarti bahwa saya masih memiliki salinan dari 2 nilai di suatu tempat. 539 00:24:04,760 --> 00:24:08,140 Karena memang, sekarang aku sudah mendapatkan kembali nilai 8, saya harus kembali ke 540 00:24:08,140 --> 00:24:12,010 RAM dan benar-benar menuliskan 8 di mana saya pernah punya nomor 2. 541 00:24:12,010 --> 00:24:15,720 >> Jadi ingat visual ini gagasan lewat di harfiah 542 00:24:15,720 --> 00:24:16,730 salinan nilai. 543 00:24:16,730 --> 00:24:19,570 Ken melakukan hal itu, tangan saya kembali sesuatu - dalam hal ini, 544 00:24:19,570 --> 00:24:20,820 nilai seperti 8. 545 00:24:20,820 --> 00:24:22,660 Dan kemudian saya harus melakukan sesuatu dengan nilai bahwa jika saya 546 00:24:22,660 --> 00:24:24,880 ingin tetap sekitar. 547 00:24:24,880 --> 00:24:29,470 Jadi semua ini akan menjadi semua terlalu akrab sebelum lama. 548 00:24:29,470 --> 00:24:33,082 Terima kasih banyak untuk demo ini di sini, Ken. 549 00:24:33,082 --> 00:24:34,820 Baiklah. 550 00:24:34,820 --> 00:24:36,720 Sangat baik dilakukan. 551 00:24:36,720 --> 00:24:40,610 Jadi mari kita lihat bagaimana yang pada akhirnya berhubungan dengan beberapa fungsi 552 00:24:40,610 --> 00:24:42,270 menelepon bahwa kita sudah lakukan di sini. 553 00:24:42,270 --> 00:24:47,610 Jadi biarkan aku pergi ke depan dan membawa kita kembali ke contoh cubing sini. 554 00:24:47,610 --> 00:24:53,080 Dan perhatikan bahwa jika kita ingin benar-benar mulai mengambil ini lebih lanjut, kita akan 555 00:24:53,080 --> 00:24:57,050 harus berhati-hati dari fakta bahwa x jumlah yang sedang lewat di 556 00:24:57,050 --> 00:25:01,390 di sini berbeda dengan apa yang sebenarnya sedang masuk ke fungsi. 557 00:25:01,390 --> 00:25:03,940 Jadi sekali lagi, ini disahkan oleh copy akan menjadi sangat 558 00:25:03,940 --> 00:25:05,620 erat hanya dalam beberapa saat. 559 00:25:05,620 --> 00:25:09,320 >> Jadi mari kita lihat sesuatu yang tidak cukup bekerja benar belum. 560 00:25:09,320 --> 00:25:11,790 Aku akan pergi ke depan dan membuka contoh kereta ketiga, yang 561 00:25:11,790 --> 00:25:13,560 adalah cacat oleh alam. 562 00:25:13,560 --> 00:25:18,070 Dan itu disebut buggy3, dan menerapkan fungsi swapping. 563 00:25:18,070 --> 00:25:23,500 Jadi di sini kita memiliki fungsi utama yang x dan y sewenang-wenang diinisialisasi 564 00:25:23,500 --> 00:25:24,720 1 dan 2, masing-masing. 565 00:25:24,720 --> 00:25:27,590 Kita bisa menggunakan GetInt, tetapi kita hanya perlu latihan sederhana. 566 00:25:27,590 --> 00:25:29,680 Jadi sulit-kode sebagai 1 dan 2. 567 00:25:29,680 --> 00:25:35,330 Di baris 21 dan 22, kita tampaknya mencetak x dan y, satu per baris. 568 00:25:35,330 --> 00:25:39,620 Kemudian, pada baris 23, saya menyatakan saya menukar nilai-nilai, titik, titik, titik. 569 00:25:39,620 --> 00:25:43,030 Saya rupanya memanggil fungsi di baris 24 disebut pertukaran 570 00:25:43,030 --> 00:25:44,000 yang mengambil dua argumen. 571 00:25:44,000 --> 00:25:46,430 Ini benar-benar legit untuk fungsi-fungsi untuk mengambil dua argumen. 572 00:25:46,430 --> 00:25:48,220 Kami telah melihat printf melakukannya sudah. 573 00:25:48,220 --> 00:25:50,370 Jadi pertukaran ternyata mengambil x dan y. 574 00:25:50,370 --> 00:25:53,010 Dan seperti namanya, saya berharap bahwa itu akan 575 00:25:53,010 --> 00:25:54,320 menukar dua nilai. 576 00:25:54,320 --> 00:25:57,560 Jadi kemudian aku mengklaim on line 25, bertukar. 577 00:25:57,560 --> 00:26:01,570 Dan saya cetak ulang x dan y dengan asumsi bahwa 578 00:26:01,570 --> 00:26:02,830 mereka memang telah bertukar. 579 00:26:02,830 --> 00:26:04,370 Tetapi jika aku benar-benar menjalankan program ini - 580 00:26:04,370 --> 00:26:06,060 biarkan aku membuka jendela terminal. 581 00:26:06,060 --> 00:26:07,750 Biarkan saya membuat buggy3. 582 00:26:07,750 --> 00:26:09,970 Seperti namanya, ini tidak akan berakhir dengan baik. 583 00:26:09,970 --> 00:26:14,690 Karena ketika saya tekan Enter, perhatikan bahwa x adalah 1. 584 00:26:14,690 --> 00:26:15,720 y adalah 2. 585 00:26:15,720 --> 00:26:19,160 Namun di akhir program, mereka masih, pada kenyataannya, sama. 586 00:26:19,160 --> 00:26:22,760 >> Jadi berdasarkan demonstrasi hanya sekarang dengan Ken, apa yang sebenarnya terjadi? 587 00:26:22,760 --> 00:26:24,660 Nah, mari kita menyelam ke dalam fungsi swap. 588 00:26:24,660 --> 00:26:25,800 Ini super pendek. 589 00:26:25,800 --> 00:26:28,020 Ini hanya beberapa baris kode yang panjang. 590 00:26:28,020 --> 00:26:32,810 Tapi apa masalah mendasar berdasarkan cerita sederhana mengatakan kepada 591 00:26:32,810 --> 00:26:34,270 di sini dengan Ken? 592 00:26:34,270 --> 00:26:36,115 Mengapa swap yang rusak? 593 00:26:36,115 --> 00:26:37,365 [Tak terdengar] 594 00:26:39,840 --> 00:26:40,460 Tepat. 595 00:26:40,460 --> 00:26:43,610 Jadi kita menyimpan untuk menyalin, bukan variabel itu sendiri. 596 00:26:43,610 --> 00:26:46,810 Dengan kata lain, swap ternyata membutuhkan dua argumen, int. 597 00:26:46,810 --> 00:26:49,370 Dan itu sewenang-wenang disebut a dan b. 598 00:26:49,370 --> 00:26:54,430 Dan di sini, saya sudah lulus dalam x dan y, yang masing-masing 1 dan 2. 599 00:26:54,430 --> 00:26:56,580 Tapi aku tidak benar-benar lewat di x. 600 00:26:56,580 --> 00:26:58,410 Aku tidak benar-benar lewat di y. 601 00:26:58,410 --> 00:27:01,230 Saya melewati salinan x dan salinan y. 602 00:27:01,230 --> 00:27:05,180 Ini seperti hampir seolah-olah Anda disalin dan disisipkan ke swap nilai yang 603 00:27:05,180 --> 00:27:07,440 Anda ingin untuk benar-benar memanipulasi. 604 00:27:07,440 --> 00:27:11,970 Jadi jika itu terjadi, ketika saya, program, mulai menjalankan 605 00:27:11,970 --> 00:27:14,140 baris 35, kemudian 36 - 606 00:27:14,140 --> 00:27:17,740 ketika saya sampai ke baris 37, saat ini dalam cerita, berapakah nilai dari? 607 00:27:20,740 --> 00:27:24,850 Pada titik ini dalam cerita, baris 37, berapakah nilai dari pada saat ini? 608 00:27:24,850 --> 00:27:25,980 Jadi itu hanya harus 1. 609 00:27:25,980 --> 00:27:26,170 Benar? 610 00:27:26,170 --> 00:27:29,100 Karena x disahkan sebagai argumen pertama. 611 00:27:29,100 --> 00:27:33,150 Dan fungsi ini hanya sewenang-wenang memanggil argumen pertama, a. 612 00:27:33,150 --> 00:27:35,130 Demikian pula adalah y, argumen kedua. 613 00:27:35,130 --> 00:27:37,930 Dan itu hanya sewenang-wenang memanggil b argumen kedua. 614 00:27:37,930 --> 00:27:40,510 >> Sekarang dikotomi ini sebenarnya cukup sederhana dijelaskan. 615 00:27:40,510 --> 00:27:40,880 Pikirkan tentang hal ini. 616 00:27:40,880 --> 00:27:42,980 Tak satu pun dari kita telah bertemu dengan orang yang menulis printf. 617 00:27:42,980 --> 00:27:49,880 Jadi pasti, dia tidak tahu apa variabel kita 30 tahun kemudian akan 618 00:27:49,880 --> 00:27:50,710 untuk dipanggil. 619 00:27:50,710 --> 00:27:55,110 Jadi harus ada perbedaan antara apa yang Anda sebut variabel dalam 620 00:27:55,110 --> 00:27:59,960 fungsi Anda sedang menulis dan apa yang Anda sebut variabel dalam fungsi Anda 621 00:27:59,960 --> 00:28:01,770 menelepon atau menggunakan. 622 00:28:01,770 --> 00:28:05,120 Jadi dengan kata lain, saya telah menulis saya sebagai variabel x dan y. 623 00:28:05,120 --> 00:28:08,060 Tapi jika orang lain telah menulis fungsi swap, ia tentu 624 00:28:08,060 --> 00:28:10,480 tidak akan tahu apa yang saya variabel yang akan dipanggil. 625 00:28:10,480 --> 00:28:13,850 Jadi menyadari bahwa ini adalah mengapa Anda memiliki dualitas nama. 626 00:28:13,850 --> 00:28:16,800 Secara teknis, aku bisa melakukan ini secara kebetulan. 627 00:28:16,800 --> 00:28:19,750 Tapi mereka masih akan disahkan sebagai salinan. 628 00:28:19,750 --> 00:28:22,940 Itu hanya akan menjadi murni kebetulan estetis jika orang tersebut yang menulis 629 00:28:22,940 --> 00:28:25,590 pertukaran telah menggunakan nama yang sama. 630 00:28:25,590 --> 00:28:25,930 >> Baiklah. 631 00:28:25,930 --> 00:28:29,010 Jadi pada titik ini dalam cerita, baris 37, adalah 1. 632 00:28:29,010 --> 00:28:30,410 b adalah 2. 633 00:28:30,410 --> 00:28:32,040 Dan sekarang saya melanjutkan untuk swap mereka. 634 00:28:32,040 --> 00:28:34,730 Yah pertama-tama, biarkan aku benar-benar melakukan hal ini jauh lebih sederhana. 635 00:28:34,730 --> 00:28:36,500 Aku tidak tahu apa tiga baris kode lakukan. 636 00:28:36,500 --> 00:28:37,370 Mari saya hanya melakukan ini. 637 00:28:37,370 --> 00:28:38,850 b mendapat. 638 00:28:38,850 --> 00:28:40,170 mendapat b. 639 00:28:40,170 --> 00:28:41,450 Selesai. 640 00:28:41,450 --> 00:28:43,540 Mengapa hal ini rusak, logis? 641 00:28:46,980 --> 00:28:48,590 Ini semacam hal yang intuitif, kan? 642 00:28:48,590 --> 00:28:50,640 Jadi menjadi b. 643 00:28:50,640 --> 00:28:52,450 Dan b menjadi. 644 00:28:52,450 --> 00:28:55,410 Tapi masalahnya adalah bahwa segera setelah baris 37 mengeksekusi, apa 645 00:28:55,410 --> 00:28:58,170 nilai a dan b? 646 00:28:58,170 --> 00:28:59,070 Hal yang sama, 1. 647 00:28:59,070 --> 00:29:03,460 Karena anda telah musnah, sehingga untuk berbicara, Anda telah berubah b menyamai. 648 00:29:03,460 --> 00:29:06,000 Jadi sekali baris 37 dijalankan, itu bagus. 649 00:29:06,000 --> 00:29:09,940 Anda sekarang memiliki dua salinan dari bagian dalam 1 jumlah fungsi ini. 650 00:29:09,940 --> 00:29:14,720 Jadi ketika Anda mengatakan di baris 38, mendapat b, baik, kau jenis kacau. 651 00:29:14,720 --> 00:29:17,370 Karena Anda hanya menugaskan 1 ke 1. 652 00:29:17,370 --> 00:29:20,400 Kau seperti kehilangan nilai yang Anda pedulikan. 653 00:29:20,400 --> 00:29:22,910 >> Jadi dalam versi asli ini, perhatikan apa yang saya lakukan. 654 00:29:22,910 --> 00:29:26,620 Saya bukannya punya baris ketiga kode yang tampak seperti ini. 655 00:29:26,620 --> 00:29:29,910 Saya mendeklarasikan variabel sementara - tmp adalah nama yang sangat umum 656 00:29:29,910 --> 00:29:31,240 untuk variabel sementara. 657 00:29:31,240 --> 00:29:34,280 Ini int karena itu harus sesuai dengan apa yang saya ingin membuat salinan. 658 00:29:34,280 --> 00:29:39,720 Saya menyimpan salinan dari dalam tmp. Jadi sekali baris 37 telah dieksekusi, 659 00:29:39,720 --> 00:29:41,390 nilai adalah - 660 00:29:41,390 --> 00:29:42,970 kewarasan cepat check - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 Nilai b adalah 2. 663 00:29:45,780 --> 00:29:48,470 Dan nilai tmp juga 1. 664 00:29:48,470 --> 00:29:51,470 Jadi sekarang saya mengeksekusi baris 38. 665 00:29:51,470 --> 00:29:57,180 Jadi sekali baris 38 mengeksekusi, yang mengambil nilai b. 666 00:29:57,180 --> 00:29:58,510 Dan b adalah 2. 667 00:29:58,510 --> 00:30:00,500 Jadi sekarang 2. 668 00:30:00,500 --> 00:30:03,110 Jadi pada titik ini dalam cerita, adalah 2, b adalah 2, 669 00:30:03,110 --> 00:30:05,130 dan tmp adalah 1. 670 00:30:05,130 --> 00:30:09,330 Jadi sekarang logis, kita bisa nilai hanya celepuk tmp ke dalam b. 671 00:30:09,330 --> 00:30:10,690 Dan kita sudah selesai. 672 00:30:10,690 --> 00:30:12,170 >> Jadi kita sudah memecahkan masalah itu. 673 00:30:12,170 --> 00:30:16,040 Sayangnya, ketika saya menjalankan program ini dalam bentuk ini, tidak benar-benar menukar 674 00:30:16,040 --> 00:30:17,700 nilai-nilai. 675 00:30:17,700 --> 00:30:18,950 Tapi harus jelas, mengapa? 676 00:30:23,420 --> 00:30:26,310 Aku tetap masalah logis dari beberapa saat yang lalu. 677 00:30:26,310 --> 00:30:31,150 Tapi sekali lagi, jika saya menjalankan program ini, x dan y tetap tidak berubah pada akhir 678 00:30:31,150 --> 00:30:33,834 program eksekusi. 679 00:30:33,834 --> 00:30:34,760 [Tak terdengar] 680 00:30:34,760 --> 00:30:36,030 DAVID J. Malan: Jadi kita tidak kembali apa-apa. 681 00:30:36,030 --> 00:30:36,960 Jadi itu benar. 682 00:30:36,960 --> 00:30:39,880 Tapi ternyata ada sedikit masalah di sini karena sejauh ini, para 683 00:30:39,880 --> 00:30:42,460 Satu-satunya hal yang kita sudah bisa kembali adalah satu hal. 684 00:30:42,460 --> 00:30:46,540 Dan ini adalah pembatasan C. Anda hanya dapat kembali benar-benar satu nilai, 685 00:30:46,540 --> 00:30:48,970 dalam hal ini, aku seperti terjebak di sini 686 00:30:48,970 --> 00:30:51,805 karena saya bisa mengembalikan nilai baru x atau saya bisa mengembalikan 687 00:30:51,805 --> 00:30:53,160 baru nilai y. 688 00:30:53,160 --> 00:30:54,330 Tapi aku ingin kembali keduanya. 689 00:30:54,330 --> 00:30:58,010 Jadi kembali ini bukan solusi sederhana di sini. 690 00:30:58,010 --> 00:30:59,770 Tapi masalahnya fundamental adalah mengapa? 691 00:30:59,770 --> 00:31:03,270 Apa yang telah kita benar-benar bertukar? 692 00:31:03,270 --> 00:31:04,010 dan b. 693 00:31:04,010 --> 00:31:07,670 Tapi a dan b adalah salinan dari x dan y, yang berarti kita hanya melakukan semua ini 694 00:31:07,670 --> 00:31:10,080 bekerja - kami hanya menghabiskan seperti tiga menit berbicara tentang swap 695 00:31:10,080 --> 00:31:11,680 fungsi dan ketiga variabel. 696 00:31:11,680 --> 00:31:15,090 Dan itu bagus, sempurna benar dalam isolasi. 697 00:31:15,090 --> 00:31:20,230 Tapi ruang lingkup dan b hanya dalam baris-baris di sini. 698 00:31:20,230 --> 00:31:24,130 Jadi sama seperti untuk loop, jika Anda mendeklarasikan integer i dalam untuk 699 00:31:24,130 --> 00:31:27,400 loop - sama, di dalam jika Anda mendeklarasikan dan b fungsi yang 700 00:31:27,400 --> 00:31:30,550 Anda sudah menulis, mereka hanya di dalam fungsi yang berlaku. 701 00:31:30,550 --> 00:31:35,020 Yang berarti secepat swap dilakukan mengeksekusi dan kita pergi dari baris 24 sampai 702 00:31:35,020 --> 00:31:38,380 baris 25, x dan y belum berubah sama sekali. 703 00:31:38,380 --> 00:31:42,580 Anda hanya menyia-nyiakan banyak waktu swapping salinan variabel. 704 00:31:42,580 --> 00:31:46,490 >> Jadi ternyata bahwa solusi untuk ini sebenarnya tidak jelas. 705 00:31:46,490 --> 00:31:49,210 Ini tidak cukup memadai untuk mengembalikan nilai-nilai karena kita bisa 706 00:31:49,210 --> 00:31:50,320 hanya kembali satu nilai. 707 00:31:50,320 --> 00:31:53,370 Dan aku benar-benar ingin menukar kedua x dan y pada waktu yang sama. 708 00:31:53,370 --> 00:31:55,020 Jadi kita akan kembali ke ini. 709 00:31:55,020 --> 00:31:58,770 Tapi untuk saat ini, menyadari bahwa masalah fundamental berasal dari kenyataan 710 00:31:58,770 --> 00:32:00,660 bahwa a dan b adalah salinan. 711 00:32:00,660 --> 00:32:03,450 Dan mereka berada di ruang lingkup mereka sendiri. 712 00:32:03,450 --> 00:32:04,980 Nah, mari kita coba untuk memecahkan masalah ini dalam beberapa cara. 713 00:32:04,980 --> 00:32:09,200 Biarkan saya benar-benar gulir kembali ke sini dan membuka, katakanlah, varian keempat 714 00:32:09,200 --> 00:32:11,170 ini, buggy4. 715 00:32:11,170 --> 00:32:13,230 Dan bagaimana dengan ini? 716 00:32:13,230 --> 00:32:16,690 Ini adalah masalah serupa tetapi sederhana untuk melihat sebelum kita mengambil bacokan di 717 00:32:16,690 --> 00:32:17,530 memecahkannya. 718 00:32:17,530 --> 00:32:19,440 Program ini disebut kenaikan. 719 00:32:19,440 --> 00:32:24,320 Dan itu tampaknya menginisialisasi integer x untuk 1 di baris 18. 720 00:32:24,320 --> 00:32:25,950 Saya kemudian mengklaim x adalah 1. 721 00:32:25,950 --> 00:32:28,020 Saya kemudian mengklaim incrementing, titik, titik, titik. 722 00:32:28,020 --> 00:32:29,460 Saya kemudian memanggil kenaikan. 723 00:32:29,460 --> 00:32:33,480 Tapi kemudian di baris 22 dan 23, saya menyatakan itu sudah bertambah. 724 00:32:33,480 --> 00:32:37,780 Saya mengklaim x sekarang apapun itu, mungkin 2. 725 00:32:37,780 --> 00:32:39,770 >> Tapi program ini adalah kereta. 726 00:32:39,770 --> 00:32:41,020 Apa masalahnya? 727 00:32:43,450 --> 00:32:44,418 Ya? 728 00:32:44,418 --> 00:32:45,668 [Tak terdengar] 729 00:32:49,260 --> 00:32:49,850 DAVID J. Malan: Tepat. 730 00:32:49,850 --> 00:32:52,430 Jadi x telah dinyatakan jelas on line 18. 731 00:32:52,430 --> 00:32:54,410 Yang ada di dalam kurung kurawal utama itu. 732 00:32:54,410 --> 00:32:58,470 Jadi jawaban sederhana di sini adalah bahwa, baik, x ada di sini. 733 00:32:58,470 --> 00:33:01,510 Ini tidak ada di baris 32. 734 00:33:01,510 --> 00:33:03,710 Jadi program ini benar-benar bahkan tidak akan mengkompilasi. 735 00:33:03,710 --> 00:33:07,910 Compiler, ketika saya coba kompilasi kode ini, akan berteriak padaku 736 00:33:07,910 --> 00:33:13,190 tentang beberapa identifier dideklarasikan atau sesuatu seperti itu. 737 00:33:13,190 --> 00:33:13,870 Bahkan, mari kita coba. 738 00:33:13,870 --> 00:33:15,235 Ini adalah membuat buggy4. 739 00:33:17,780 --> 00:33:18,190 Ada itu. 740 00:33:18,190 --> 00:33:22,030 Penggunaan x pengenal dideklarasikan di baris 32. 741 00:33:22,030 --> 00:33:25,700 Dan sebenarnya, mari kita lebih eksplisit di sini hari ini sehingga ini berguna dalam 742 00:33:25,700 --> 00:33:27,140 jam kantor dan di rumah. 743 00:33:27,140 --> 00:33:29,000 Perhatikan bahwa itu agak samar tertulis. 744 00:33:29,000 --> 00:33:31,560 Tapi fakta bahwa dentang memiliki berteriak pada kita, mengatakan 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, benar-benar berguna. 746 00:33:36,970 --> 00:33:41,970 Ini berarti bahwa kesalahan adalah on line 32 di posisi lima karakter. 747 00:33:41,970 --> 00:33:44,670 Jadi satu, dua, tiga, empat, lima. 748 00:33:44,670 --> 00:33:46,640 Itu, pada kenyataannya, di mana masalahnya. 749 00:33:46,640 --> 00:33:49,710 Dan juga untuk diingat pada jam-jam kantor dan di rumah, aku beruntung di sini. 750 00:33:49,710 --> 00:33:50,740 Saya punya satu kesalahan. 751 00:33:50,740 --> 00:33:52,660 Ini akan relatif mudah untuk memperbaikinya. 752 00:33:52,660 --> 00:33:56,220 Tetapi jika Anda mendapatkan seluruh layar penuh pesan kesalahan yang luar biasa, sekali lagi, 753 00:33:56,220 --> 00:33:59,240 menyadari bahwa satu paling bawah mungkin saja gejala 754 00:33:59,240 --> 00:34:00,320 paling atas yang. 755 00:34:00,320 --> 00:34:03,560 Jadi selalu memburu bug Anda dari atas ke bawah. 756 00:34:03,560 --> 00:34:06,720 Karena mungkin saja ada efek daisy-chain yang menyarankan Anda 757 00:34:06,720 --> 00:34:09,030 memiliki masalah cara yang lebih dari yang Anda benar-benar melakukan. 758 00:34:09,030 --> 00:34:14,989 >> Jadi bagaimana kita bisa memperbaiki ini jika tujuan saya adalah untuk kenaikan x? 759 00:34:14,989 --> 00:34:15,370 Apa itu? 760 00:34:15,370 --> 00:34:15,620 Oke. 761 00:34:15,620 --> 00:34:16,679 Jadi kita bisa membuat x global. 762 00:34:16,679 --> 00:34:18,860 Mari kita mengambil jalan pintas yang saya memperingatkan tentang sebelumnya. 763 00:34:18,860 --> 00:34:20,550 Tapi heck, kita hanya perlu perbaikan cepat. 764 00:34:20,550 --> 00:34:23,949 Jadi katakan saja x int di sini. 765 00:34:23,949 --> 00:34:25,600 Itu membuat x global. 766 00:34:25,600 --> 00:34:28,460 Jadi sekarang utama memiliki akses ke sana. 767 00:34:28,460 --> 00:34:31,780 Dan kenaikan memiliki akses ke sana. 768 00:34:31,780 --> 00:34:33,860 Dan jadi biarkan aku pergi ke depan dan kompilasi ini sekarang. 769 00:34:33,860 --> 00:34:36,330 Membuat buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Sepertinya untuk mengkompilasi sekarang. 771 00:34:37,440 --> 00:34:40,949 Mari kita jalankan buggy4, dan tampaknya benar-benar bekerja. 772 00:34:40,949 --> 00:34:42,780 Sekarang ini adalah salah satu dari hal-hal ini - 773 00:34:42,780 --> 00:34:45,870 melakukan seperti yang saya katakan, bukan seperti yang saya lakukan, karena saya baru saja dilakukan di sini. 774 00:34:45,870 --> 00:34:49,239 Karena pada umumnya, program kami akan mendapatkan jauh lebih menarik dan 775 00:34:49,239 --> 00:34:50,440 lebih lama dari ini. 776 00:34:50,440 --> 00:34:53,199 Dan jika solusi Anda untuk masalah kehidupan hanya ah, menaruh semua 777 00:34:53,199 --> 00:34:57,550 variabel di bagian atas file Anda, sangat cepat melakukan program mendapatkan 778 00:34:57,550 --> 00:34:59,700 mengerikan sulit untuk mengelola. 779 00:34:59,700 --> 00:35:02,050 Ini akan sulit untuk memikirkan nama variabel baru. 780 00:35:02,050 --> 00:35:05,240 Semakin sulit untuk memahami apa variabel yang melakukan apa. 781 00:35:05,240 --> 00:35:08,250 >> Dan sehingga secara umum, ini bukan solusi yang baik. 782 00:35:08,250 --> 00:35:09,780 Jadi mari kita lakukan ini lebih baik. 783 00:35:09,780 --> 00:35:11,920 Kami tidak ingin menggunakan variabel global di sini. 784 00:35:11,920 --> 00:35:14,050 Saya ingin kenaikan x. 785 00:35:14,050 --> 00:35:16,050 Jadi saya jelas bisa - 786 00:35:16,050 --> 00:35:18,450 pada akhir hari, itu semacam cerita konyol karena kita hanya melakukan hal ini. 787 00:35:18,450 --> 00:35:22,050 Tapi kalau aku tidak tahu tentang operator yang, atau saya tidak diizinkan untuk 788 00:35:22,050 --> 00:35:27,700 mengubahnya dalam utama itu sendiri, bagaimana lagi yang bisa saya menerapkan Ken di sini, ini 789 00:35:27,700 --> 00:35:31,450 waktu tidak kubus tetapi untuk kenaikan? 790 00:35:31,450 --> 00:35:32,700 Bagaimana cara mengubah hal ini di sini? 791 00:35:32,700 --> 00:35:33,025 Ya. 792 00:35:33,025 --> 00:35:34,275 [Tak terdengar] 793 00:35:37,430 --> 00:35:38,000 DAVID J. Malan: Oke, baik. 794 00:35:38,000 --> 00:35:40,490 Jadi kenapa tidak saya lulus di x? 795 00:35:40,490 --> 00:35:44,390 Dan kemudian daripada mengembalikannya, kenapa tidak aku hanya melakukan pengembalian x + 1? 796 00:35:44,390 --> 00:35:46,370 Sekarang, beberapa hal yang lebih harus mengubah sini. 797 00:35:46,370 --> 00:35:47,530 Aku di jalur yang benar. 798 00:35:47,530 --> 00:35:48,910 Apa lagi yang harus saya Tweak? 799 00:35:48,910 --> 00:35:49,470 Orang lain. 800 00:35:49,470 --> 00:35:49,882 Ya? 801 00:35:49,882 --> 00:35:51,530 [Tak terdengar] 802 00:35:51,530 --> 00:35:53,520 DAVID J. Malan: Saya perlu mengubah jenis kembalinya selisih 803 00:35:53,520 --> 00:35:54,590 karena itu tidak membatalkan. 804 00:35:54,590 --> 00:35:56,650 Void berarti tidak ada yang dikembalikan. 805 00:35:56,650 --> 00:35:57,600 Tapi yang jelas, sekarang ini. 806 00:35:57,600 --> 00:36:01,280 Jadi ini kebutuhan untuk mengubah ke int untuk konsisten dengan apa 807 00:36:01,280 --> 00:36:02,580 Aku benar-benar kembali. 808 00:36:02,580 --> 00:36:04,580 >> Sekarang sesuatu yang lain masih kereta di sini. 809 00:36:04,580 --> 00:36:04,982 Ya? 810 00:36:04,982 --> 00:36:06,590 [Tak terdengar] 811 00:36:06,590 --> 00:36:07,630 DAVID J. Malan: Jadi saya perlu untuk kenaikan x? 812 00:36:07,630 --> 00:36:10,336 [Tak terdengar] 813 00:36:10,336 --> 00:36:11,880 DAVID J. Malan: Ah, jadi saya harus lulus x. 814 00:36:11,880 --> 00:36:13,300 Jadi saya harus melakukannya di sini. 815 00:36:17,590 --> 00:36:19,690 Jadi prototipe, saya harus mengubah ini di sini. 816 00:36:19,690 --> 00:36:21,290 Jadi ini harus menjadi int. 817 00:36:21,290 --> 00:36:22,820 Ini harus menjadi - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 Saya benar-benar memiliki bug di sini. 820 00:36:24,710 --> 00:36:25,780 Mari kita perbaiki ini yang pertama. 821 00:36:25,780 --> 00:36:27,990 Apa yang harus ini benar-benar menjadi? 822 00:36:27,990 --> 00:36:29,330 Jadi itu harus menjadi sesuatu yang int. 823 00:36:29,330 --> 00:36:30,340 Bisa jadi x. 824 00:36:30,340 --> 00:36:33,120 Tapi terus terang, jika Anda mulai memanggil semua x variabel Anda, itu akan mendapatkan 825 00:36:33,120 --> 00:36:35,250 kurang dan kurang jelas yang mana. 826 00:36:35,250 --> 00:36:38,210 Jadi mari kita sembarangan memilih konvensi penamaan yang berbeda untuk saya 827 00:36:38,210 --> 00:36:40,220 helper fungsi, fungsi aku menulis. 828 00:36:40,220 --> 00:36:41,100 Kita akan menyebutnya. 829 00:36:41,100 --> 00:36:44,500 Atau kita bisa menyebutnya - sebut saja even_number menjadi lebih eksplisit. 830 00:36:44,500 --> 00:36:47,610 Jadi kemudian aku harus kembali apapun jumlahnya ditambah 1. 831 00:36:47,610 --> 00:36:49,720 Dan sekarang saya harus mengubah satu hal lainnya di sini dan satu 832 00:36:49,720 --> 00:36:50,700 hal lain di sini. 833 00:36:50,700 --> 00:36:54,150 Apa yang saya harus mengubah on line 21 pertama? 834 00:36:54,150 --> 00:36:55,390 Saya harus menetapkan ke x. 835 00:36:55,390 --> 00:36:57,480 Jadi saya tidak bisa hanya memanggil x kenaikan. 836 00:36:57,480 --> 00:37:01,000 Saya perlu mengingat jawaban dengan mengubah nilai x pada 837 00:37:01,000 --> 00:37:02,020 sisi kiri tangan. 838 00:37:02,020 --> 00:37:04,930 Dan meskipun x sekarang di sebelah kiri dan kanan, itu benar-benar baik karena 839 00:37:04,930 --> 00:37:08,370 sisi kanan dijalankan pertama kemudian akan menjatuhkan ke kiri 840 00:37:08,370 --> 00:37:10,240 tangan hal, x dalam kasus ini. 841 00:37:10,240 --> 00:37:11,900 Dan kemudian yang terakhir, ini adalah memperbaiki mudah sekarang. 842 00:37:11,900 --> 00:37:15,080 Ini hanya harus sesuai apa yang di bawah. 843 00:37:15,080 --> 00:37:17,120 Int nomor. 844 00:37:17,120 --> 00:37:17,320 >> Baiklah. 845 00:37:17,320 --> 00:37:20,290 Jadi sejumlah besar perubahan untuk fungsi benar-benar bodoh. 846 00:37:20,290 --> 00:37:24,250 Tetapi wakil dari hal-hal yang kita akan semakin ingin lakukan. 847 00:37:24,250 --> 00:37:25,490 Jadi membuat buggy4. 848 00:37:25,490 --> 00:37:26,485 Saya sudah kacau di suatu tempat. 849 00:37:26,485 --> 00:37:27,520 Oh my God. 850 00:37:27,520 --> 00:37:29,660 Lima kesalahan dalam, seperti, sebuah program enam-line. 851 00:37:29,660 --> 00:37:36,500 Jadi apa yang salah pada baris 18, karakter 5? 852 00:37:36,500 --> 00:37:36,970 Baiklah. 853 00:37:36,970 --> 00:37:39,330 Jadi saya harus mendeklarasikan int ini. 854 00:37:39,330 --> 00:37:39,630 Baiklah. 855 00:37:39,630 --> 00:37:41,790 Jadi mari kita lihat, sejumlah besar kesalahan lainnya. 856 00:37:41,790 --> 00:37:42,230 Oh my god. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Tapi sekali lagi, mari kita membersihkan layar - 859 00:37:46,020 --> 00:37:48,660 Kontrol L di sini - dan re-run dentang. 860 00:37:48,660 --> 00:37:51,340 Jadi lima masalah sebenarnya hanya satu. 861 00:37:51,340 --> 00:37:53,500 Jadi sekarang mari kita jalankan buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 Wah. 863 00:37:54,150 --> 00:37:57,434 x telah bertambah dengan benar. 864 00:37:57,434 --> 00:37:58,420 >> Baiklah. 865 00:37:58,420 --> 00:38:01,700 Setiap pertanyaan tentang bagaimana untuk kenaikan angka? 866 00:38:01,700 --> 00:38:02,896 Ya? 867 00:38:02,896 --> 00:38:06,864 SPEAKER 2: Mengapa Anda hanya dapat mengubah x ke nomor dalam variabel 868 00:38:06,864 --> 00:38:08,860 nama dan akan tahu apa yang Anda maksudkan? 869 00:38:08,860 --> 00:38:09,600 DAVID J. Malan: Pertanyaan yang bagus. 870 00:38:09,600 --> 00:38:13,130 Bagaimana mungkin aku bisa mengubah x ke nomor dan program akan tahu 871 00:38:13,130 --> 00:38:13,990 segera? 872 00:38:13,990 --> 00:38:16,120 Jadi sekali lagi, menganggapnya sebagai abstraksi ini. 873 00:38:16,120 --> 00:38:20,110 Jadi jika saya utama dan Ken adalah inkremental, terus terang, saya tidak peduli 874 00:38:20,110 --> 00:38:21,540 apa Ken panggilan iPad nya. 875 00:38:21,540 --> 00:38:25,350 Saya tidak peduli apa yang dia sebut sesuatu yang ada hubungannya dengan pelaksanaan nya 876 00:38:25,350 --> 00:38:26,550 dari fungsi ini. 877 00:38:26,550 --> 00:38:32,130 Jadi ini adalah detail pelaksanaan yang saya, main, jangan 878 00:38:32,130 --> 00:38:33,010 harus peduli. 879 00:38:33,010 --> 00:38:37,440 Dan sehingga hanya mengubah secara konsisten dalam fungsi, jumlah disini 880 00:38:37,440 --> 00:38:41,340 dan nomor di sini, adalah semua yang diperlukan selama aku mengkompilasi ulang. 881 00:38:41,340 --> 00:38:43,820 Ini semacam seperti jika Anda berpikir tentang - banyak dari kita, bagi anda dengan pengemudi 882 00:38:43,820 --> 00:38:46,590 lisensi yang telah didorong, atau jika Anda bahkan didorong dalam mobil - 883 00:38:46,590 --> 00:38:50,710 kebanyakan dari kita tidak tahu bagaimana mobil bekerja di bawah kap mesin. 884 00:38:50,710 --> 00:38:54,710 Dan harfiah, jika Anda membuka kap, kebanyakan dari kita - termasuk saya sendiri - 885 00:38:54,710 --> 00:38:56,580 tidak akan benar-benar tahu apa yang kita sedang melihat. 886 00:38:56,580 --> 00:38:58,850 Jenis seperti Anda mungkin merasa dengan hal-hal seperti ini sekarang. 887 00:38:58,850 --> 00:39:01,380 Tapi kita tidak benar-benar harus peduli bagaimana mobil bekerja. 888 00:39:01,380 --> 00:39:05,000 Kami tidak harus peduli apa semua batang dan piston dan kabel dalam 889 00:39:05,000 --> 00:39:07,700 mobil yang sebenarnya dilakukan. 890 00:39:07,700 --> 00:39:11,360 >> Jadi sesuatu seperti apa yang Anda sebut piston tidak masalah 891 00:39:11,360 --> 00:39:11,920 di sini dalam kasus ini. 892 00:39:11,920 --> 00:39:12,490 Ide yang sama. 893 00:39:12,490 --> 00:39:12,670 Ya? 894 00:39:12,670 --> 00:39:13,920 [Tak terdengar] 895 00:39:25,250 --> 00:39:29,530 DAVID J. Malan: Jika ada menggunakan lebih dari saat xa variabel lalu, 896 00:39:29,530 --> 00:39:32,220 Anda, programmer, harus mengubah mereka di mana-mana. 897 00:39:32,220 --> 00:39:35,230 Atau Anda benar-benar bisa melakukan File, Menu, dan kemudian Cari / Ganti, 898 00:39:35,230 --> 00:39:36,270 sesuatu seperti itu. 899 00:39:36,270 --> 00:39:40,110 Tapi Anda akan harus membuat perubahan sendiri. 900 00:39:40,110 --> 00:39:41,200 Anda harus konsisten. 901 00:39:41,200 --> 00:39:42,450 [Tak terdengar] 902 00:39:47,200 --> 00:39:48,960 DAVID J. Malan: Sebuah urutan tertentu seperti di sini? 903 00:39:48,960 --> 00:39:52,660 Jika ini adalah int nomor lain? 904 00:39:52,660 --> 00:39:52,940 Ya. 905 00:39:52,940 --> 00:39:56,430 Jadi urutan penting ketika Anda memanggil fungsi. 906 00:39:56,430 --> 00:40:00,350 Jadi jika saya memanggil peningkatan sini dengan sesuatu sesuatu koma, 907 00:40:00,350 --> 00:40:01,400 ada pemetaan langsung. 908 00:40:01,400 --> 00:40:04,490 Variabel pertama, apa pun namanya, dibuat salinan pertama 909 00:40:04,490 --> 00:40:05,480 Argumen di sini. 910 00:40:05,480 --> 00:40:07,280 Maaf, ini seharusnya tidak menjadi kurung. 911 00:40:07,280 --> 00:40:09,300 Garis Argumen kedua dengan yang kedua. 912 00:40:09,300 --> 00:40:11,220 >> Jadi urutan, ya, hal. 913 00:40:11,220 --> 00:40:11,490 Baiklah. 914 00:40:11,490 --> 00:40:13,360 Maaf aku mengambil jalan panjang untuk sampai ke sana. 915 00:40:13,360 --> 00:40:14,610 Pertanyaan lain? 916 00:40:16,460 --> 00:40:16,850 Baiklah. 917 00:40:16,850 --> 00:40:20,300 Jadi mari kita lihat apakah kita tidak bisa melukis gambaran tentang apa yang sebenarnya terjadi 918 00:40:20,300 --> 00:40:22,160 di sini di bawah kap mesin, sehingga untuk berbicara. 919 00:40:22,160 --> 00:40:26,310 Jadi ini adalah sebuah persegi panjang yang mungkin mewakili memori komputer Anda. 920 00:40:26,310 --> 00:40:31,240 Jadi bahkan jika Anda tidak tahu bagaimana memori bekerja atau bagaimana RAM bekerja, setidaknya 921 00:40:31,240 --> 00:40:33,590 berasumsi bahwa Anda memiliki tandan itu hari ini. 922 00:40:33,590 --> 00:40:34,740 Anda punya megabyte itu. 923 00:40:34,740 --> 00:40:35,760 Anda punya gigabyte itu. 924 00:40:35,760 --> 00:40:40,690 Dan kita tahu dari nol minggu yang byte adalah hanya apa? 925 00:40:40,690 --> 00:40:41,280 8 bit. 926 00:40:41,280 --> 00:40:42,730 Benar, jadi 8 nol dan yang. 927 00:40:42,730 --> 00:40:46,300 Jadi jika komputer Anda memiliki pertunjukan RAM, dua gigs RAM hari ini, Anda memiliki 928 00:40:46,300 --> 00:40:54,450 miliar atau 2 miliar byte memori, atau sekitar 8 miliar atau 16 miliar 929 00:40:54,450 --> 00:40:56,560 bit, dalam komputer Anda. 930 00:40:56,560 --> 00:40:59,710 Sekarang tidak seperti contoh Willy kecil Woolly, itu bukan partikel magnetik 931 00:40:59,710 --> 00:41:00,560 biasanya lagi. 932 00:41:00,560 --> 00:41:04,470 Semakin, di laptop setidaknya, itu solid state drive, SSD, yang 933 00:41:04,470 --> 00:41:05,560 hanya memiliki bagian yang bergerak. 934 00:41:05,560 --> 00:41:06,710 Ini semua elektronik. 935 00:41:06,710 --> 00:41:08,070 Ini semua listrik berdasarkan. 936 00:41:08,070 --> 00:41:12,360 Jadi pikirkan, meskipun, dari persegi panjang ini hanya sebagai mewakili satu atau dua 937 00:41:12,360 --> 00:41:13,930 gigabyte memori yang Anda miliki. 938 00:41:13,930 --> 00:41:15,500 >> Jadi sepotong memori. 939 00:41:15,500 --> 00:41:20,460 Sekarang dunia ilmu komputer memiliki semacam potongan dipartisi dari 940 00:41:20,460 --> 00:41:22,570 memori untuk melakukan hal yang berbeda. 941 00:41:22,570 --> 00:41:25,930 Jadi misalnya, jika ini adalah RAM komputer Anda - seperti yang disarankan oleh 942 00:41:25,930 --> 00:41:30,400 rectangle ada - ternyata bahwa dengan konvensi, di bagian atas RAM Anda, sehingga 943 00:41:30,400 --> 00:41:33,170 untuk berbicara, umumnya apa yang disebut segmen teks. 944 00:41:33,170 --> 00:41:35,910 Mereka adalah nol dan orang-orang yang Anda telah dikompilasi. 945 00:41:35,910 --> 00:41:39,040 Jadi ketika kita telah melihat di bawah kap pada apa a.out, semua 946 00:41:39,040 --> 00:41:40,360 angka nol dan satu - 947 00:41:40,360 --> 00:41:44,000 ketika Anda menjalankan sebuah program, mereka nol dan yang diambil dari hard 948 00:41:44,000 --> 00:41:46,290 drive ke sesuatu yang disebut RAM. 949 00:41:46,290 --> 00:41:48,950 Dan dalam RAM, mereka diletakkan di atas. 950 00:41:48,950 --> 00:41:50,330 Sekarang sementara itu, Anda memiliki hal-hal lain. 951 00:41:50,330 --> 00:41:53,060 Diinisialisasi data, data uninitialized. 952 00:41:53,060 --> 00:41:56,440 Kedua petak memori mengacu pada variabel global, yang 953 00:41:56,440 --> 00:41:57,530 Anda tidak sering digunakan. 954 00:41:57,530 --> 00:42:00,630 Tapi kadang-kadang jika Anda melakukannya, mereka akhirnya sampai di sana juga. 955 00:42:00,630 --> 00:42:01,620 Lalu ada beberapa hal lain. 956 00:42:01,620 --> 00:42:04,130 Lingkungan variabel, yang kita tidak akan menghabiskan banyak waktu di. 957 00:42:04,130 --> 00:42:06,120 Tapi kemudian dua hal penting yang akan datang kembali seluruh hal ini 958 00:42:06,120 --> 00:42:08,130 semester, stack dan heap. 959 00:42:08,130 --> 00:42:12,280 >> Jadi sebagian besar memori komputer Anda dicadangkan ketika menjalankan sebuah program untuk 960 00:42:12,280 --> 00:42:14,880 sesuatu yang disebut stack dan sesuatu yang disebut tumpukan. 961 00:42:14,880 --> 00:42:16,940 Dan kita tidak akan berbicara tentang tumpukan saat ini, tapi kami akan 962 00:42:16,940 --> 00:42:18,180 berbicara tentang stack. 963 00:42:18,180 --> 00:42:22,910 Dan tumpukan dimaksudkan untuk menyulap visual seperti ruang makan 964 00:42:22,910 --> 00:42:26,120 makan nampan di Mather House, atau di mana pun Anda berada, di mana 965 00:42:26,120 --> 00:42:27,810 dining hall staf bersih mereka setiap hari. 966 00:42:27,810 --> 00:42:30,180 Mereka menumpuk mereka dari lantai atas. 967 00:42:30,180 --> 00:42:33,800 Dan sama dalam memori, ada ide menempatkan sesuatu pada 968 00:42:33,800 --> 00:42:36,740 stack, meletakkan sesuatu di tumpukan, meletakkan sesuatu di tumpukan. 969 00:42:36,740 --> 00:42:38,000 Dan apa yang kita maksudkan dengan ini? 970 00:42:38,000 --> 00:42:41,430 Nah, mari kita memperbesar hanya pada bagian bawah gambar ini, komputer Anda 971 00:42:41,430 --> 00:42:43,990 RAM, mengusulkan berikut. 972 00:42:43,990 --> 00:42:48,300 Ternyata bahwa ketika Anda menjalankan program seperti a.out atau Halo, apa pun 973 00:42:48,300 --> 00:42:49,920 program ini adalah bahwa Anda telah menulis, 974 00:42:49,920 --> 00:42:53,030 lagi, mereka nol dan yang diambil dari hard drive Anda - yang 975 00:42:53,030 --> 00:42:56,190 penyimpanan jangka panjang, tetap ada bahkan ketika Anda tarik steker - 976 00:42:56,190 --> 00:42:57,220 dimuat ke RAM. 977 00:42:57,220 --> 00:42:59,020 RAM lebih cepat daripada hard drive. 978 00:42:59,020 --> 00:43:00,700 Ini lebih kecil dari hard drive. 979 00:43:00,700 --> 00:43:03,490 Tapi itu di mana program hidup saat Anda sedang menjalankan mereka. 980 00:43:03,490 --> 00:43:06,380 >> Jadi Anda klik dua kali sebuah program pada Mac atau PC - itu diambil dari 981 00:43:06,380 --> 00:43:07,750 hard drive ke dalam RAM. 982 00:43:07,750 --> 00:43:11,760 Segera setelah itu dimuat ke dalam RAM, angka nol dan satu pergi di atas jalan, yang 983 00:43:11,760 --> 00:43:13,130 disebut segmen teks. 984 00:43:13,130 --> 00:43:17,040 Tapi kemudian segera setelah program Anda benar-benar mulai berjalan, utama 985 00:43:17,040 --> 00:43:18,140 fungsi disebut. 986 00:43:18,140 --> 00:43:21,070 Dan utama, seperti yang kita lihat, seringkali memiliki variabel lokal. 987 00:43:21,070 --> 00:43:24,560 Dan memiliki ints dan string dan karakter dan sejenisnya. 988 00:43:24,560 --> 00:43:28,300 Jadi jika program anda yang telah Anda tulis atau program yang Anda miliki 989 00:43:28,300 --> 00:43:33,680 double klik menggunakan beberapa variabel dalam utama, mereka berakhir di 990 00:43:33,680 --> 00:43:37,020 bawah tumpukan memori Anda, sehingga untuk berbicara. 991 00:43:37,020 --> 00:43:39,160 Sekarang lebih konkret, apakah benar-benar berarti? 992 00:43:39,160 --> 00:43:44,080 Ini hanya berarti bahwa jika kami akan menomori hal - 993 00:43:44,080 --> 00:43:49,380 jika kita akan ke nomor byte RAM di komputer Anda, perhatikan bahwa 994 00:43:49,380 --> 00:43:51,650 ini mungkin angka nol byte. 995 00:43:51,650 --> 00:43:56,130 Ini mungkin jumlah byte satu, dua, tiga, empat, lima, enam, semua 996 00:43:56,130 --> 00:43:57,290 jalan sampai ke seperti - 997 00:43:57,290 --> 00:44:01,520 2 milyar akan semua jalan sampai ada di bagian atas. 998 00:44:01,520 --> 00:44:05,960 Jadi dengan kata lain, ketika kita berbicara tentang RAM atau memori dalam hal byte, 999 00:44:05,960 --> 00:44:09,680 hanya berarti bahwa seseorang telah memutuskan apa yang harus menomori masing-masing 1000 00:44:09,680 --> 00:44:11,110 mereka potongan memori. 1001 00:44:11,110 --> 00:44:16,950 >> Jadi, ketika Anda membutuhkan 32 bit untuk int, atau Anda perlu 8 bit untuk char, di mana 1002 00:44:16,950 --> 00:44:18,320 mereka berakhir di memori? 1003 00:44:18,320 --> 00:44:20,650 Nah konseptual, mereka hanya berakhir di bawah ini 1004 00:44:20,650 --> 00:44:21,780 hal yang disebut stack. 1005 00:44:21,780 --> 00:44:25,670 Tapi apa yang menarik sekarang adalah saat utama memanggil fungsi. 1006 00:44:25,670 --> 00:44:28,830 Misalkan sebuah fungsi yang disebut foo, hanya nama sewenang-wenang. 1007 00:44:28,830 --> 00:44:32,480 Apa yang terjadi adalah utama adalah di bagian bawah ini tumpukan memori. 1008 00:44:32,480 --> 00:44:35,630 Foo sekarang diletakkan di atas utama dalam memori. 1009 00:44:35,630 --> 00:44:40,020 Jadi setiap variabel lokal yang foo telah berakhir semacam konseptual di atas 1010 00:44:40,020 --> 00:44:40,770 mereka yang utama. 1011 00:44:40,770 --> 00:44:46,920 Jika foo panggilan fungsi lain yang disebut bar, variabel-variabel tersebut berakhir di sini. 1012 00:44:46,920 --> 00:44:49,790 Jika bar panggilan sesuatu yang lain, di sini, di sini, di sini. 1013 00:44:49,790 --> 00:44:53,900 Jadi apa yang menarik tentang menjalankan sebuah program adalah bahwa ketika Anda memanggil fungsi, 1014 00:44:53,900 --> 00:44:57,720 dan sebagai fungsi-fungsi memanggil fungsi-fungsi, dan sebagai fungsi-fungsi panggilan fungsi, 1015 00:44:57,720 --> 00:45:00,980 Anda membangun ini tumpukan fungsi dalam memori. 1016 00:45:00,980 --> 00:45:06,740 Dan hanya sekali kembali fungsi Anda mulai mendapatkan memori yang kembali. 1017 00:45:06,740 --> 00:45:11,190 Jadi salah satu cara termudah untuk kehabisan memori dalam program komputer adalah untuk 1018 00:45:11,190 --> 00:45:14,170 menulis fungsi yang tidak pernah kembali. 1019 00:45:14,170 --> 00:45:16,650 >> Jadi misalnya, mari kita menunjukkan sebanyak dengan 1020 00:45:16,650 --> 00:45:18,460 sengaja kereta program. 1021 00:45:18,460 --> 00:45:24,690 Biarkan aku pergi ke depan dan melakukan # include, int main (void). 1022 00:45:24,690 --> 00:45:31,270 Dan aku akan melakukan sementara (2> 1), yang mungkin tidak akan pernah 1023 00:45:31,270 --> 00:45:33,370 berubah pada kami. 1024 00:45:33,370 --> 00:45:37,720 Dan biarkan aku pergi ke depan sekarang dan lakukan printf. 1025 00:45:37,720 --> 00:45:39,950 Sebenarnya, itu akan menjadi kurang menarik secara visual. 1026 00:45:39,950 --> 00:45:40,460 Mari kita lakukan ini. 1027 00:45:40,460 --> 00:45:44,840 Untuk int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Mari kita membuat kesalahan ini, i + +. 1029 00:45:49,740 --> 00:45:51,150 Dan jangan printf sini. 1030 00:45:51,150 --> 00:45:52,550 Mari kita mempraktekkan apa yang saya berkhotbah. 1031 00:45:52,550 --> 00:45:54,090 Mari kita memiliki metode di sini. 1032 00:45:54,090 --> 00:46:00,860 Void chorus, dan kita akan mengatakan int i. 1033 00:46:00,860 --> 00:46:02,295 Dan kemudian aku akan mengatakan, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, mari kita membuat ini lebih menarik. 1035 00:46:06,790 --> 00:46:08,350 Mari kita sebenarnya tidak mencetak apa pun sama sekali. 1036 00:46:08,350 --> 00:46:10,530 Mari kita lakukan ini. 1037 00:46:10,530 --> 00:46:11,780 Chorus (i). 1038 00:46:16,630 --> 00:46:17,000 >> Baiklah. 1039 00:46:17,000 --> 00:46:20,040 Jadi ini adalah kereta karena mengapa? 1040 00:46:20,040 --> 00:46:22,850 Saya membuat ini sebagai aku pergi karena program tidak benar-benar melakukan apa-apa 1041 00:46:22,850 --> 00:46:23,420 kepentingan. 1042 00:46:23,420 --> 00:46:24,670 Tapi itu bukan tujuan. 1043 00:46:24,670 --> 00:46:30,440 Tujuannya adalah untuk menulis sebuah program yang fungsi utamanya melakukan apa, rupanya? 1044 00:46:30,440 --> 00:46:31,370 Menyebut dirinya. 1045 00:46:31,370 --> 00:46:32,600 Dan sebenarnya, kita tidak perlu loop. 1046 00:46:32,600 --> 00:46:36,070 Mari kita menyederhanakan bahkan ini hanya agar tidak melupakan benar-benar 1047 00:46:36,070 --> 00:46:37,310 mendasar bug. 1048 00:46:37,310 --> 00:46:39,200 Panggilan utama chorus menyanyikan chorus beberapa. 1049 00:46:39,200 --> 00:46:41,760 Lalu aku melakukan sesuatu yang bodoh, dan aku punya chorus chorus panggilan karena saya diasumsikan 1050 00:46:41,760 --> 00:46:43,550 orang lain akan menerapkannya mungkin. 1051 00:46:43,550 --> 00:46:45,960 Dan sekarang ini tidak akan mengkompilasi belum. 1052 00:46:45,960 --> 00:46:48,340 Saya perlu melakukan apa? 1053 00:46:48,340 --> 00:46:49,700 Aku butuh prototipe, ingat. 1054 00:46:49,700 --> 00:46:55,520 Jadi saya harus memiliki di sini chorus void (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> Jadi sekarang, jika saya pergi ke sini - 1056 00:46:57,470 --> 00:46:59,030 sebenarnya, mari kita gunakan jendela besar. 1057 00:46:59,030 --> 00:47:01,670 Mari kita pergi ke depan dan membuat chorus. 1058 00:47:01,670 --> 00:47:06,000 Mari kita pergi ke depan dan membuat chorus. 1059 00:47:06,000 --> 00:47:08,302 Penggunaan declarer teridentifikasi i. 1060 00:47:08,302 --> 00:47:09,860 Oh, itu bodoh. 1061 00:47:09,860 --> 00:47:11,020 Kita tidak perlu argumen. 1062 00:47:11,020 --> 00:47:13,680 Mari kita lakukan ini. 1063 00:47:13,680 --> 00:47:14,550 Berharap kita sudah mulai dengan cara ini. 1064 00:47:14,550 --> 00:47:16,160 Ini akan menjadi sebuah program jauh lebih mudah untuk menulis. 1065 00:47:16,160 --> 00:47:20,100 Jadi ada. 1066 00:47:20,100 --> 00:47:23,870 Sekarang mari kita pergi ke jendela terminal saya, re-run dentang. 1067 00:47:23,870 --> 00:47:26,900 Dan di sini kita pergi. 1068 00:47:26,900 --> 00:47:28,020 Itu benar-benar cepat. 1069 00:47:28,020 --> 00:47:30,690 Apa yang sebenarnya baru saja terjadi, meskipun? 1070 00:47:30,690 --> 00:47:33,430 Nah, sekarang saya akan menambahkan garis cetak, sehingga kita dapat melihat. 1071 00:47:33,430 --> 00:47:41,330 Jadi saya katakan printf, katakanlah, aku di sini. 1072 00:47:41,330 --> 00:47:43,470 Oke, tidak ada variabel, kita akan meninggalkan seperti itu. 1073 00:47:43,470 --> 00:47:44,860 Biarkan aku kembali jalankan make. 1074 00:47:44,860 --> 00:47:47,940 Mari saya ulang-run chorus. 1075 00:47:47,940 --> 00:47:51,235 Dan ayolah. 1076 00:47:53,880 --> 00:47:55,130 Terus. 1077 00:47:57,630 --> 00:47:59,750 Sebagai samping, mengapa tidak jatuh belum? 1078 00:47:59,750 --> 00:48:02,050 Kesalahan segmentasi terjadi super cepat sebelumnya. 1079 00:48:02,050 --> 00:48:04,250 [Tak terdengar] 1080 00:48:04,250 --> 00:48:04,830 DAVID J. Malan: Tepat. 1081 00:48:04,830 --> 00:48:06,350 Jadi butuh waktu untuk mencetak. 1082 00:48:06,350 --> 00:48:08,370 Ini hanya membutuhkan lebih banyak pekerjaan pada bagian komputer. 1083 00:48:08,370 --> 00:48:09,550 Dan ada itu. 1084 00:48:09,550 --> 00:48:10,620 Segmentation fault. 1085 00:48:10,620 --> 00:48:12,140 >> Jadi perhatikan betapa cepat program dijalankan. 1086 00:48:12,140 --> 00:48:14,110 Jika Anda tidak mencetak apapun, super cepat. 1087 00:48:14,110 --> 00:48:18,100 Tapi kami masih punya kesalahan segmentasi karena apa yang terjadi? 1088 00:48:18,100 --> 00:48:21,310 Nah, jika Anda berpikir tentang bagaimana memori komputer Anda diletakkan keluar, hal ini 1089 00:48:21,310 --> 00:48:22,890 kebetulan utama. 1090 00:48:22,890 --> 00:48:23,800 Tapi di sini - 1091 00:48:23,800 --> 00:48:28,670 mari kita sebut chorus ini, dan mari kita sebut chorus ini. 1092 00:48:28,670 --> 00:48:33,420 Dan sekarang jika saya melakukan estetika saya benar, ini hanya akan mengatakan chorus, 1093 00:48:33,420 --> 00:48:38,060 chorus, chorus, chorus, chorus, chorus, chorus, nauseum iklan. 1094 00:48:38,060 --> 00:48:39,920 Dan pada akhirnya, apa yang akan terjadi? 1095 00:48:39,920 --> 00:48:46,690 Jika gambaran besar harfiah ini, apa yang baru saja terjadi konseptual? 1096 00:48:46,690 --> 00:48:48,320 Overruns tumpukan tumpukan. 1097 00:48:48,320 --> 00:48:52,400 Atau lebih buruk lagi, Anda hanya dibanjiri segala sesuatu, termasuk segmen teks, yaitu 1098 00:48:52,400 --> 00:48:54,530 angka nol dan satu yang mewakili program anda. 1099 00:48:54,530 --> 00:48:56,690 Singkatnya, ini hanya super, buruk super. 1100 00:48:56,690 --> 00:48:56,860 Benar? 1101 00:48:56,860 --> 00:48:58,620 Program Anda telah berputar di luar kendali. 1102 00:48:58,620 --> 00:49:02,840 Anda menggunakan memori jauh lebih daripada yang Anda inginkan semua karena bodoh 1103 00:49:02,840 --> 00:49:03,920 kesalahan, dalam hal ini. 1104 00:49:03,920 --> 00:49:08,160 Atau dalam kasus ini, fungsi yang sangat sengaja dilakukan menamakan dirinya. 1105 00:49:08,160 --> 00:49:09,210 Sekarang ini tidak semuanya buruk. 1106 00:49:09,210 --> 00:49:12,540 Fungsi menyebut diri mereka sebenarnya memiliki kekuatan besar 1107 00:49:12,540 --> 00:49:13,700 saat Anda menggunakannya dengan benar. 1108 00:49:13,700 --> 00:49:15,650 Saya belum menggunakannya dengan benar di sini. 1109 00:49:15,650 --> 00:49:16,940 >> Jadi ini tidak semuanya buruk. 1110 00:49:16,940 --> 00:49:20,620 Tapi fakta bahwa saya tidak pernah benar-benar berhenti menyebut diri saya adalah mendasar 1111 00:49:20,620 --> 00:49:23,050 Kelemahan di sini dari program ini. 1112 00:49:23,050 --> 00:49:25,090 Jadi di mana kita pergi dengan semua ini? 1113 00:49:25,090 --> 00:49:26,230 Nah, apa yang sebenarnya terjadi? 1114 00:49:26,230 --> 00:49:30,010 Ketika saya memanggil fungsi kenaikan, seperti yang kami lakukan pada mereka contoh, 1115 00:49:30,010 --> 00:49:33,290 Aku punya nilai seperti 1 bahwa saya lulus masuk 1116 00:49:33,290 --> 00:49:35,820 Saya lulus dalam salinan nomor satu. 1117 00:49:35,820 --> 00:49:37,080 Jadi berikut ini terjadi. 1118 00:49:37,080 --> 00:49:40,390 Jadi mari kita pergi ke contoh kenaikan. 1119 00:49:40,390 --> 00:49:44,230 Dan ini pria yang tepat di sini. 1120 00:49:44,230 --> 00:49:46,800 Jadi, inilah apa yang sebenarnya terjadi. 1121 00:49:46,800 --> 00:49:50,770 Ketika saya menelepon kenaikan, dan saya lulus dalam x, pictorially apa 1122 00:49:50,770 --> 00:49:53,660 terjadi di sini adalah ini - 1123 00:49:53,660 --> 00:50:00,240 jika saya memiliki nilai 1 disimpan di sini, dan aku benar-benar memanggil kenaikan, yang 1124 00:50:00,240 --> 00:50:02,680 sekarang disebut chorus - 1125 00:50:02,680 --> 00:50:04,010 yeah, itu melempar saya dari sini. 1126 00:50:04,010 --> 00:50:06,750 Jadi mari kita sebut kenaikan ini. 1127 00:50:06,750 --> 00:50:09,420 Dan kita tidak tahu apa fungsi berikutnya akan menjadi. 1128 00:50:09,420 --> 00:50:14,270 Jadi apa yang sebenarnya terjadi di sini di suatu tempat di utama, saya memiliki sepotong 1129 00:50:14,270 --> 00:50:16,670 memori yang menyimpan nomor 1. 1130 00:50:16,670 --> 00:50:19,730 Ketika saya sebut kenaikan, saya menggunakan lain sepotong memori, tapi sekarang aku 1131 00:50:19,730 --> 00:50:20,840 memiliki salinan 1. 1132 00:50:20,840 --> 00:50:25,480 Ketika saya kenaikan nilai tersebut, ini menjadi 2 - mengerikan ditulis pada 1133 00:50:25,480 --> 00:50:26,420 layar di sini. 1134 00:50:26,420 --> 00:50:30,550 Tapi kemudian, apa yang terjadi segera setelah kembali kenaikan? 1135 00:50:30,550 --> 00:50:34,610 Memori ini hanya akan diserahkan kembali ke sistem operasi, yang berarti semua 1136 00:50:34,610 --> 00:50:37,470 Anda telah melakukan apa-apa yang bermanfaat. 1137 00:50:37,470 --> 00:50:43,460 Salah satu yang awalnya terkandung dalam utama masih benar-benar ada. 1138 00:50:43,460 --> 00:50:44,650 >> Jadi di mana kita pergi dengan ini? 1139 00:50:44,650 --> 00:50:49,400 Nah, ternyata bahwa dalam memori Anda memiliki ini kembali ke belakang urutan 1140 00:50:49,400 --> 00:50:50,940 byte yang Anda dapat menempatkan barang-barang masuk 1141 00:50:50,940 --> 00:50:53,760 Dan ternyata kita sudah melihat sesuatu yang melibatkan menempatkan 1142 00:50:53,760 --> 00:50:55,100 hal kembali untuk kembali ke kembali ke belakang. 1143 00:50:55,100 --> 00:51:00,170 Apa yang dimaksud dengan string, berdasarkan satu minggu dan sekarang dua minggu? 1144 00:51:00,170 --> 00:51:01,840 Jadi itu hanya kumpulan karakter. 1145 00:51:01,840 --> 00:51:05,290 Jadi ternyata, seperti yang Anda dapat menempatkan angka dalam memori, sama Anda dapat 1146 00:51:05,290 --> 00:51:06,900 menempatkan karakter dalam memori. 1147 00:51:06,900 --> 00:51:09,810 Dan sekali kita mulai menempatkan karakter dalam memori back to back untuk kembali ke 1148 00:51:09,810 --> 00:51:12,800 kembali, ternyata menggunakan sederhana hal-hal seperti untuk loop atau 1149 00:51:12,800 --> 00:51:14,510 while loop, kita dapat iterate - 1150 00:51:14,510 --> 00:51:17,130 dari kiri ke kanan atas karakter dalam string - 1151 00:51:17,130 --> 00:51:20,720 dan mulai memijat mereka menjadi karakter yang berbeda sama sekali. 1152 00:51:20,720 --> 00:51:25,550 A bisa menjadi B. B bisa menjadi C. Sehingga pada akhirnya, kita bisa mengambil 1153 00:51:25,550 --> 00:51:28,830 Kalimat bahasa Inggris yang benar-benar masuk akal dan mengkonversi masing-masing 1154 00:51:28,830 --> 00:51:32,440 huruf satu per satu waktu dengan berjalan melalui memori komputer kita dibiarkan 1155 00:51:32,440 --> 00:51:34,300 tepat untuk benar-benar mengenkripsi. 1156 00:51:34,300 --> 00:51:36,590 >> Jadi mari kita lima menit istirahat kami di sini, dan ketika kita kembali, kita akan 1157 00:51:36,590 --> 00:51:39,060 memulai proses mengacak informasi. 1158 00:51:41,640 --> 00:51:43,180 >> Baiklah. 1159 00:51:43,180 --> 00:51:48,440 Jadi sebelum kita menyelam di beberapa kripto dan hal-hal yang disebut array, biarkan aku 1160 00:51:48,440 --> 00:51:51,610 jeda untuk setiap pertanyaan karena saya merasa seperti aku benar-benar jenis kacau beberapa 1161 00:51:51,610 --> 00:51:52,230 topik tersebut. 1162 00:51:52,230 --> 00:51:53,940 Jadi mari kita perbaiki sekarang jika kita bisa. 1163 00:51:53,940 --> 00:51:56,480 Jadi kita hanya berbicara tentang nilai-nilai kembali. 1164 00:51:56,480 --> 00:51:58,630 Kami berbicara tentang argumen. 1165 00:51:58,630 --> 00:52:02,330 Dan kita berbicara tentang gagasan ini, yang kita akan kembali ke dalam minggu-minggu 1166 00:52:02,330 --> 00:52:07,140 datang, memandang memori sebagai sejumlah besar tersebut ditumpuk 1167 00:52:07,140 --> 00:52:08,540 nampan, sehingga untuk berbicara. 1168 00:52:08,540 --> 00:52:13,460 Dari bawah ke atas, sehingga setiap baki yang akan diletakkan di stack mewakili 1169 00:52:13,460 --> 00:52:15,160 fungsi yang saat ini sedang dipanggil. 1170 00:52:17,970 --> 00:52:20,300 Ada pertanyaan? 1171 00:52:20,300 --> 00:52:22,890 Jadi bagaimana - biarkan aku mencoba mengajukan pertanyaan. 1172 00:52:22,890 --> 00:52:25,520 Saya terus memanjakan itu, tapi sekarang ini kan - Anda sudah melihat semua wajah anak itu. 1173 00:52:25,520 --> 00:52:27,020 Jadi kita akan datang kembali untuk itu. 1174 00:52:27,020 --> 00:52:29,700 >> Jadi biarkan saya mengajukan pertanyaan di sini. 1175 00:52:29,700 --> 00:52:34,810 Biarkan aku menyederhanakan ini kembali ke apa itu sebelum beberapa dari kami Q & A. sebelumnya 1176 00:52:34,810 --> 00:52:41,730 Dan fakta bahwa kenaikan memiliki kurung buka, nomor int, ditutup 1177 00:52:41,730 --> 00:52:42,260 kurung. 1178 00:52:42,260 --> 00:52:46,370 Apa nomor int mewakili? 1179 00:52:46,370 --> 00:52:47,250 [Tak terdengar] 1180 00:52:47,250 --> 00:52:47,870 DAVID J. Malan: argumen An. 1181 00:52:47,870 --> 00:52:50,732 Oke, tapi apa argumen? 1182 00:52:50,732 --> 00:52:51,620 [Tak terdengar] 1183 00:52:51,620 --> 00:52:52,500 DAVID J. Malan: Maaf, apa itu? 1184 00:52:52,500 --> 00:52:53,150 SPEAKER 3: Sesuatu yang lulus masuk 1185 00:52:53,150 --> 00:52:53,570 DAVID J. Malan: Oke. 1186 00:52:53,570 --> 00:52:54,780 Jadi sesuatu yang Anda lulus masuk 1187 00:52:54,780 --> 00:52:56,560 Dan lebih umum, itu hanya input. 1188 00:52:56,560 --> 00:52:59,860 Jika Anda sedang menulis sebuah fungsi dan tujuan yang berfungsi dalam hidup adalah melakukan 1189 00:52:59,860 --> 00:53:03,290 sesuatu yang sedikit berbeda setiap kali Anda menggunakannya, maka satu-satunya cara untuk 1190 00:53:03,290 --> 00:53:07,710 yang terjadi akan benar-benar tampaknya untuk menyediakan dengan masukan sehingga 1191 00:53:07,710 --> 00:53:10,180 dapat melakukan sesuatu yang berbeda dengan masukan bahwa setiap kali. 1192 00:53:10,180 --> 00:53:13,590 >> Jadi, Anda perlu menentukan dua hal ketika fungsi mengambil input. 1193 00:53:13,590 --> 00:53:17,240 Anda perlu menentukan nama yang Anda ingin memberikan masukan itu, semata-mata untuk 1194 00:53:17,240 --> 00:53:20,790 kenyamanan Anda sendiri sehingga Anda dapat merujuk ke dalam fungsi yang Anda 1195 00:53:20,790 --> 00:53:23,610 sendiri yang menulis, seperti yang saya lakukan di sini di baris 32. 1196 00:53:23,610 --> 00:53:27,840 Tapi Anda juga perlu menentukan jenisnya karena C adalah bahasa pemrograman 1197 00:53:27,840 --> 00:53:28,840 yang hanya membutuhkan 1198 00:53:28,840 --> 00:53:31,810 bahwa jika Anda ingin variabel, Anda harus memberitahu komputer apa 1199 00:53:31,810 --> 00:53:32,790 tipe data itu, 1200 00:53:32,790 --> 00:53:35,540 sebagian besar sehingga tahu berapa banyak bit untuk 1201 00:53:35,540 --> 00:53:37,230 mengalokasikan untuk variabel tersebut. 1202 00:53:37,230 --> 00:53:38,600 Karena bisa jadi enam - 1203 00:53:38,600 --> 00:53:39,990 maaf, itu tidak akan menjadi enam. 1204 00:53:39,990 --> 00:53:41,050 Hal ini dapat 16. 1205 00:53:41,050 --> 00:53:41,630 Hal ini dapat 8. 1206 00:53:41,630 --> 00:53:44,410 Hal ini dapat 32, bahkan 64. 1207 00:53:44,410 --> 00:53:45,820 Tapi komputer perlu tahu. 1208 00:53:45,820 --> 00:53:49,110 Sekarang int di sisi kiri mewakili apa, sebaliknya? 1209 00:53:52,825 --> 00:53:53,780 [Tak terdengar] 1210 00:53:53,780 --> 00:53:54,570 DAVID J. Malan: Apa itu? 1211 00:53:54,570 --> 00:53:55,390 [Tak terdengar] 1212 00:53:55,390 --> 00:53:57,920 DAVID J. Malan: Jenis fungsi dan, lebih khusus, 1213 00:53:57,920 --> 00:53:59,755 jenis output. 1214 00:53:59,755 --> 00:54:00,220 Benar. 1215 00:54:00,220 --> 00:54:04,220 Jadi sementara hal dalam kurung merupakan input, jika ada, yang 1216 00:54:04,220 --> 00:54:06,640 hal ke kiri mewakili output. 1217 00:54:06,640 --> 00:54:10,560 Dan dalam hal ini, peningkatan rupanya mengembalikan sebuah int. 1218 00:54:10,560 --> 00:54:14,590 Dan sehingga int adalah jenis kembalinya fungsi ini. 1219 00:54:14,590 --> 00:54:16,090 >> Apa artinya untuk kembali? 1220 00:54:16,090 --> 00:54:19,810 Secara harfiah, Anda menggunakan kata kunci kembali. 1221 00:54:19,810 --> 00:54:24,640 Dan kemudian jika apa yang Anda kembali ke sebelah kanan kata kunci adalah 1222 00:54:24,640 --> 00:54:28,340 integer, maka itu memang konsisten dengan apa yang telah kita janjikan. 1223 00:54:28,340 --> 00:54:31,110 Anda tidak bisa melakukan sesuatu seperti ini - 1224 00:54:31,110 --> 00:54:32,280 halo, dunia - 1225 00:54:32,280 --> 00:54:33,500 karena itu adalah string. 1226 00:54:33,500 --> 00:54:35,440 Jelas itu bukan integer. 1227 00:54:35,440 --> 00:54:40,450 Jadi singkatnya, beban benar-benar pada kita, programmer, untuk lebih spesifik sebagai 1228 00:54:40,450 --> 00:54:44,730 untuk apa kita kembali dan kemudian benar-benar pergi tentang mengembalikannya. 1229 00:54:44,730 --> 00:54:49,030 Dan kemudian untuk membuat anak laki-laki lebih jelas konteks - 1230 00:54:49,030 --> 00:54:50,080 ada dia lagi. 1231 00:54:50,080 --> 00:54:51,060 Konteks - 1232 00:54:51,060 --> 00:54:52,830 kejutan besar datang hanya dalam beberapa saat. 1233 00:54:52,830 --> 00:54:57,720 Konteks di sini sekarang adalah bahwa memori komputer Anda adalah, sekali lagi, 1234 00:54:57,720 --> 00:54:59,070 gigabyte, dua gigabyte, apapun. 1235 00:54:59,070 --> 00:54:59,630 Mungkin lebih. 1236 00:54:59,630 --> 00:55:00,540 Mungkin itu kurang. 1237 00:55:00,540 --> 00:55:03,750 Tapi komputer memandangnya sebagai memiliki bagian yang berbeda. 1238 00:55:03,750 --> 00:55:04,860 Sesuatu turun di sana. 1239 00:55:04,860 --> 00:55:06,020 Sesuatu yang lain naik sana. 1240 00:55:06,020 --> 00:55:07,540 Hal-hal yang berbeda terjadi di tengah. 1241 00:55:07,540 --> 00:55:09,300 Dan hari ini, kita hanya mulai menceritakan kisah ini. 1242 00:55:09,300 --> 00:55:11,130 >> Tapi kita akan kembali ke ini dari waktu ke waktu. 1243 00:55:11,130 --> 00:55:15,000 Untuk saat ini, satu-satunya memori kita benar-benar peduli adalah segmen teks 1244 00:55:15,000 --> 00:55:17,160 karena itu hanya mewakili nol dan yang 1245 00:55:17,160 --> 00:55:18,460 yang telah dentang outputted. 1246 00:55:18,460 --> 00:55:21,570 Jadi, ketika Anda menjalankan perintah pada keyboard seperti a.out, atau Anda ganda 1247 00:55:21,570 --> 00:55:25,350 klik ikon di Mac OS atau Windows, program Anda yang diambil dari hard 1248 00:55:25,350 --> 00:55:26,930 drive ke RAM. 1249 00:55:26,930 --> 00:55:30,850 Dan itu menjatuhkan di bagian atas RAM komputer Anda, sehingga untuk berbicara. 1250 00:55:30,850 --> 00:55:35,470 Sekarang sementara itu, sebagai program Anda mulai berjalan dan utama dipanggil dalam 1251 00:55:35,470 --> 00:55:39,240 Program Anda menulis atau program Microsoft atau Apple menulis, apapun yang 1252 00:55:39,240 --> 00:55:42,930 variabel lokal berakhir di sana di bagian bawah memori komputer Anda. 1253 00:55:42,930 --> 00:55:46,490 Tapi kalau main memanggil fungsi lain yang sendiri memiliki variabel atau 1254 00:55:46,490 --> 00:55:48,340 argumen, mereka berakhir di atasnya. 1255 00:55:48,340 --> 00:55:50,670 Dan jika fungsi yang memanggil sesuatu, mereka berakhir di atasnya, 1256 00:55:50,670 --> 00:55:51,840 di atasnya, di atasnya. 1257 00:55:51,840 --> 00:55:56,100 Dan hanya sekali fungsi dilakukan mengeksekusi melakukan tumpukan nampan, sehingga 1258 00:55:56,100 --> 00:55:58,320 untuk berbicara, mulai mendapatkan rendah dan lebih rendah. 1259 00:55:58,320 --> 00:56:03,370 Dan inilah yang kemudian, secara singkat, menjelaskan mengapa, ketika Anda menelepon kubus - 1260 00:56:03,370 --> 00:56:04,660 atau Anda menelepon kenaikan - 1261 00:56:04,660 --> 00:56:06,490 Anda lewat di salinan nilai. 1262 00:56:06,490 --> 00:56:09,840 Dan apa artinya pictorially adalah bahwa Anda benar-benar menulis 1263 00:56:09,840 --> 00:56:14,540 nomor 1 di bagian lain dari memori, perubahan bahwa 1 sampai 2, dalam kasus 1264 00:56:14,540 --> 00:56:15,360 increment - 1265 00:56:15,360 --> 00:56:17,450 atau ke 8, dalam kasus kubus - 1266 00:56:17,450 --> 00:56:21,450 dan kemudian membuang memori yang pergi segera setelah kenaikan atau kubus 1267 00:56:21,450 --> 00:56:23,410 Fungsi kembali. 1268 00:56:23,410 --> 00:56:24,267 >> Pertanyaan. 1269 00:56:24,267 --> 00:56:25,517 [Tak terdengar] 1270 00:56:28,090 --> 00:56:29,970 DAVID J. Malan: Dimana - variabel global disimpan dalam apa yang 1271 00:56:29,970 --> 00:56:32,960 saat ini disebut data diinisialisasi atau data uninitialized. 1272 00:56:32,960 --> 00:56:35,900 Bedanya ini, jika Anda memiliki variabel global, dan Anda menetapkan 1273 00:56:35,900 --> 00:56:39,530 segera nilai dengan tanda sama, itu berakhir di atas sana. 1274 00:56:39,530 --> 00:56:43,390 Dan jika Anda hanya mengatakan int x koma dengan tidak ada nilai, itu berakhir sedikit 1275 00:56:43,390 --> 00:56:46,670 lebih rendah dalam RAM hanya dengan konvensi. 1276 00:56:46,670 --> 00:56:49,308 Pertanyaan lain. 1277 00:56:49,308 --> 00:56:49,750 Baiklah. 1278 00:56:49,750 --> 00:56:53,040 >> Jadi gambar ini akan datang kembali seperti yang kita dapatkan lebih kuat dengan apa yang bisa kita lakukan 1279 00:56:53,040 --> 00:56:53,830 dengan komputer. 1280 00:56:53,830 --> 00:56:58,790 Tapi untuk saat ini, mari kita intro singkat untuk kriptografi, jenis tertentu 1281 00:56:58,790 --> 00:57:01,910 kriptografi yang tidak menyelesaikan semua masalah di dunia tetapi tidak memecahkan 1282 00:57:01,910 --> 00:57:02,480 beberapa dari mereka. 1283 00:57:02,480 --> 00:57:06,090 Dalam hal ini di sini, kita memiliki sesuatu yang disebut kriptografi kunci rahasia. 1284 00:57:06,090 --> 00:57:10,430 Dan kriptografi kunci rahasia, seperti namanya, berasal keamanan 1285 00:57:10,430 --> 00:57:11,330 dari rahasia. 1286 00:57:11,330 --> 00:57:14,720 Jadi misalnya, jika Anda sudah kembali di sekolah dasar dan Anda melewati 1287 00:57:14,720 --> 00:57:18,040 sedikit surat cinta rahasia untuk anak laki-laki atau perempuan Anda menghancurkan pada - jika Anda 1288 00:57:18,040 --> 00:57:20,820 ingin lulus bahwa melalui penonton, Anda mungkin tidak akan menulis 1289 00:57:20,820 --> 00:57:24,120 seperti catatan dalam bahasa Inggris atau apa pun bahasa asli Anda, melainkan, Anda 1290 00:57:24,120 --> 00:57:25,800 mungkin mengenkripsi itu. 1291 00:57:25,800 --> 00:57:27,820 Atau Anda mungkin hanya mengirim pesan teks hari ini. 1292 00:57:27,820 --> 00:57:30,310 Tapi Anda mungkin benar-benar melewati mereka catatan seluruh kelas. 1293 00:57:30,310 --> 00:57:33,820 Dan untuk melakukan hal ini dengan aman, sedemikian rupa sehingga Anda teman dan guru 1294 00:57:33,820 --> 00:57:36,820 tidak tahu apa yang Anda tulis, Anda mungkin datang dengan cukup sederhana 1295 00:57:36,820 --> 00:57:37,800 algoritma - 1296 00:57:37,800 --> 00:57:39,290 muda meskipun Anda mungkin - 1297 00:57:39,290 --> 00:57:40,780 hanya berebut kata-kata. 1298 00:57:40,780 --> 00:57:44,390 Jadi alih-alih menulis A, Anda mungkin menulis B. Daripada B, Anda mungkin menulis 1299 00:57:44,390 --> 00:57:46,670 C. Alih-alih C, Anda mungkin menulis D, dan sebagainya. 1300 00:57:46,670 --> 00:57:50,020 Atau Anda bisa datang dengan terjemahan yang lebih canggih dari surat 1301 00:57:50,020 --> 00:57:51,300 untuk huruf yang berbeda. 1302 00:57:51,300 --> 00:57:55,440 Tapi menangkap adalah anak laki-laki atau perempuan kepada siapa Anda mengirim catatan ini perlu 1303 00:57:55,440 --> 00:57:56,850 tahu sesuatu. 1304 00:57:56,850 --> 00:57:59,620 Yang adalah apa, jelas? 1305 00:57:59,620 --> 00:58:01,400 Seperti, apa rahasia Anda. 1306 00:58:01,400 --> 00:58:04,620 Seperti, apa itu pemetaan antara As dan B dan C dan Ds? 1307 00:58:04,620 --> 00:58:08,780 Apakah itu hanya menambahkan satu, sehingga untuk berbicara, untuk masing-masing huruf untuk pergi dari 1308 00:58:08,780 --> 00:58:09,730 A ke B, B ke C? 1309 00:58:09,730 --> 00:58:11,350 Apakah lebih kompleks dari itu? 1310 00:58:11,350 --> 00:58:16,450 Jadi, Anda dan menghancurkan Anda perlu memiliki informasi rahasia. 1311 00:58:16,450 --> 00:58:18,170 Tapi ada semacam catch-22 di sini. 1312 00:58:18,170 --> 00:58:20,760 Jika ini adalah pertama kalinya Anda mengirimkan surat cinta melalui 1313 00:58:20,760 --> 00:58:25,590 kelas, bagaimana adalah bahwa laki-laki atau perempuan akan tahu apa rahasia bahkan ini? 1314 00:58:25,590 --> 00:58:28,450 Jadi kunci rahasia kripto tidak memecahkan semua masalah dunia. 1315 00:58:28,450 --> 00:58:30,490 Dan sebenarnya ada hubungan yang kita akan kembali ke arah 1316 00:58:30,490 --> 00:58:31,370 semester akhir. 1317 00:58:31,370 --> 00:58:35,970 >> Demikian pula, memiliki satupun dari kita mungkin pernah mengirimkan - 1318 00:58:35,970 --> 00:58:39,453 sama, jangan kebanyakan dari kita tidak tahu seseorang yang bekerja, misalnya, pada 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 Namun, banyak dari kita mungkin membeli barang-barang di Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 Dan kita sudah diajarkan untuk mengasumsikan bahwa e-commerce 1322 00:58:45,670 --> 00:58:47,060 transaksi yang aman. 1323 00:58:47,060 --> 00:58:47,210 Benar? 1324 00:58:47,210 --> 00:58:49,310 URL ini mungkin mengatakan https. 1325 00:58:49,310 --> 00:58:51,590 Ada mungkin ikon gembok konyol kecil di suatu tempat. 1326 00:58:51,590 --> 00:58:54,680 Ada beberapa jenis kriptografi mengamankan informasi kartu kredit Anda 1327 00:58:54,680 --> 00:58:56,980 antara Anda dan Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 Namun, jika kriptografi melibatkan mengetahui beberapa rahasia, namun saya tidak 1329 00:59:00,410 --> 00:59:03,330 tahu siapa di Amazon, dan saya sudah pasti tidak mengatur apapun 1330 00:59:03,330 --> 00:59:07,350 rahasia dengan seseorang di Amazon, bagaimana komputer saya atau browser saya melakukan hal ini? 1331 00:59:07,350 --> 00:59:10,100 Nah, ternyata ada jenis lain sama sekali kriptografi yang memecahkan 1332 00:59:10,100 --> 00:59:10,740 masalah itu. 1333 00:59:10,740 --> 00:59:13,610 Tapi untuk saat ini, kita akan fokus pada yang sederhana, di mana Anda dapat mengatur dalam 1334 00:59:13,610 --> 00:59:18,480 maju untuk mengetahui beberapa rahasia, seperti ditambah 1 atau beberapa pemetaan antara As dan B. 1335 00:59:18,480 --> 00:59:20,710 >> Dan proses kriptografi umumnya melibatkan ini. 1336 00:59:20,710 --> 00:59:23,550 Anda memiliki beberapa teks biasa, digambarkan di sini di sebelah kiri. 1337 00:59:23,550 --> 00:59:26,260 Anda menjalankannya melalui beberapa jenis algoritma atau prosedur 1338 00:59:26,260 --> 00:59:27,670 untuk mengenkripsi itu. 1339 00:59:27,670 --> 00:59:31,390 Mungkin itu hanya A menjadi B, B menjadi C. Dan kemudian Anda berakhir dengan 1340 00:59:31,390 --> 00:59:32,260 cipher teks. 1341 00:59:32,260 --> 00:59:36,450 Sementara itu, setelah menghancurkan Anda menerima catatan rahasia, ia harus kemudian 1342 00:59:36,450 --> 00:59:39,950 mendekripsi dengan umumnya membalikkan algoritma yang sehingga untuk mendapatkan 1343 00:59:39,950 --> 00:59:41,640 kembali teks biasa. 1344 00:59:41,640 --> 00:59:43,860 Sekarang ada inkarnasi fisik ini. 1345 00:59:43,860 --> 00:59:46,720 Sebagai contoh, ini adalah sebuah cincin decoder rahasia kecil. 1346 00:59:46,720 --> 00:59:50,060 Dan ini adalah sebuah cincin dalam arti bahwa ada dua cepat di sini. 1347 00:59:50,060 --> 00:59:53,630 Di pinggiran luar dari hal ini, ada huruf A sampai Z, 1348 00:59:53,630 --> 00:59:55,110 meskipun mereka berada di urutan acak. 1349 00:59:55,110 --> 00:59:58,410 Dan di dalam, sebenarnya ada beberapa nomor, sehingga dengan ini 1350 00:59:58,410 --> 01:00:02,940 cincin, Anda dapat mengubah jenis luar tapi tidak dalam dalam rangka untuk berbaris 1351 01:00:02,940 --> 01:00:04,110 angka dengan huruf. 1352 01:00:04,110 --> 01:00:08,290 Dan dalam klip Anda akan melihat - beberapa di antaranya Anda mungkin telah melihat 24/7 1353 01:00:08,290 --> 01:00:11,120 sekitar musim Natal dari film berjudul A Christmas Story. 1354 01:00:11,120 --> 01:00:16,050 Anda akan melihat bahwa Ralphie kecil itu begitu bersemangat untuk mencari tahu apa yatim sedikit 1355 01:00:16,050 --> 01:00:19,810 Pesan rahasia Annie adalah kepadanya bahwa telah dikomunikasikan, saya pikir, dalam 1356 01:00:19,810 --> 01:00:22,810 membentuk pesan numerik pada kotak serial. 1357 01:00:22,810 --> 01:00:26,760 Dan Anda harus mengumpulkan semua kartu kecil yang datang 1358 01:00:26,760 --> 01:00:27,480 dalam kotak sereal. 1359 01:00:27,480 --> 01:00:28,320 Anda harus mengirimkan mereka masuk 1360 01:00:28,320 --> 01:00:31,060 Anda harus mendapatkan kembali cincin decoder rahasia, sehingga Anda akhirnya dapat mencari 1361 01:00:31,060 --> 01:00:34,190 apa pemetaan antara huruf dan angka, 1362 01:00:34,190 --> 01:00:35,420 atau surat dan surat-surat. 1363 01:00:35,420 --> 01:00:39,790 Jadi saya memberikan ini klip singkat dari A Christmas Story untuk memotivasi pset 2 dan 1364 01:00:39,790 --> 01:00:42,340 kami diskusi, suatu saat, array. 1365 01:00:42,340 --> 01:00:43,773 Jadi di sini kita memiliki Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [PEMUTARAN VIDEO] 1367 01:00:44,126 --> 01:00:47,470 -Jadilah itu diketahui segala-galanya bahwa Ralph Parker dengan ini menunjuk 1368 01:00:47,470 --> 01:00:50,690 anggota dari Lingkaran Orphan Annie Little Secret dan berhak atas semua 1369 01:00:50,690 --> 01:00:53,500 penghargaan dan manfaat yang terjadi dalamnya. 1370 01:00:53,500 --> 01:00:56,040 -Signed Orphan, Annie kecil. 1371 01:00:56,040 --> 01:00:58,730 Ditandatangani, Pierre Andre! 1372 01:00:58,730 --> 01:01:00,150 Dalam tinta! 1373 01:01:00,150 --> 01:01:02,910 Honors dan manfaat, sudah pada usia sembilan. 1374 01:01:09,970 --> 01:01:10,730 Ayo, mari kita dengan itu. 1375 01:01:10,730 --> 01:01:15,000 Aku tidak butuh semua yang jazz tentang penyelundup dan bajak laut. 1376 01:01:15,000 --> 01:01:17,624 Dengar-besok malam untuk petualangan penutup dari The Black 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Sekarang saatnya untuk pesan rahasia Annie untuk Anda anggota 1379 01:01:23,380 --> 01:01:25,670 dari Lingkaran Rahasia. 1380 01:01:25,670 --> 01:01:30,260 Ingat, anak-anak, hanya anggota dari Lingkaran Rahasia Annie bisa decode 1381 01:01:30,260 --> 01:01:31,660 Annie rahasia pesan. 1382 01:01:31,660 --> 01:01:36,230 Ingat, Annie tergantung pada Anda. 1383 01:01:36,230 --> 01:01:38,720 Set pin Anda ke B2. 1384 01:01:38,720 --> 01:01:41,040 Berikut adalah pesan. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Saya dalam pertemuan rahasia pertama saya. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre berada di malam suara besar. 1389 01:01:51,700 --> 01:01:54,890 Saya bisa mengatakan bahwa pesan malam ini benar-benar penting. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Itulah pesan dari Annie sendiri. 1392 01:01:58,590 --> 01:01:59,840 Ingat, jangan bilang siapa-siapa. 1393 01:02:04,570 --> 01:02:08,750 -90 Detik kemudian, aku di kamar hanya di rumah di mana anak laki-laki sembilan 1394 01:02:08,750 --> 01:02:12,980 bisa duduk di privasi dan decode. 1395 01:02:12,980 --> 01:02:17,130 Aha, B. Aku pergi ke yang berikutnya. 1396 01:02:17,130 --> 01:02:20,330 E. Kata pertama adalah menjadi. 1397 01:02:20,330 --> 01:02:22,670 S. Itu datang lebih mudah sekarang. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, ayolah, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Aku harus pergi. 1401 01:02:28,430 --> 01:02:30,350 -Aku akan segera turun, ma. 1402 01:02:30,350 --> 01:02:33,720 -Gee jagoan. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Pastikan untuk. 1404 01:02:38,270 --> 01:02:40,000 Pastikan untuk apa? 1405 01:02:40,000 --> 01:02:42,105 Apa Sedikit Orphan Annie coba katakan? 1406 01:02:42,105 --> 01:02:43,095 Pastikan untuk apa? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy harus pergi. 1409 01:02:44,580 --> 01:02:45,570 Tolong keluar? 1410 01:02:45,570 --> 01:02:46,560 -Baiklah, ma. 1411 01:02:46,560 --> 01:02:48,540 Aku akan segera keluar. 1412 01:02:48,540 --> 01:02:50,580 -Aku semakin dekat sekarang. 1413 01:02:50,580 --> 01:02:52,550 Ketegangan sangat mengerikan. 1414 01:02:52,550 --> 01:02:53,355 Apa itu? 1415 01:02:53,355 --> 01:02:56,315 Nasib planet yang hang dalam keseimbangan. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy yang harus pergi. 1418 01:02:59,165 --> 01:03:02,310 -Aku akan segera keluar, menangis dengan suara keras. 1419 01:03:02,310 --> 01:03:04,000 -Gee, hampir sampai. 1420 01:03:04,000 --> 01:03:05,180 Jemariku terbang. 1421 01:03:05,180 --> 01:03:07,150 Pikiranku adalah perangkap baja. 1422 01:03:07,150 --> 01:03:08,790 Setiap pori bergetar. 1423 01:03:08,790 --> 01:03:10,040 Itu hampir jelas. 1424 01:03:10,040 --> 01:03:13,400 Ya, ya, ya, ya. 1425 01:03:13,400 --> 01:03:18,960 -Pastikan untuk minum Ovaltine Anda. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 Sebuah iklan payah? 1428 01:03:28,200 --> 01:03:29,640 Bangsat. 1429 01:03:29,640 --> 01:03:33,340 [END PEMUTARAN VIDEO] 1430 01:03:33,340 --> 01:03:36,040 >> DAVID J. Malan: Jadi ada yang kita miliki kriptografi. 1431 01:03:36,040 --> 01:03:39,670 Jadi bagaimana di komputer kita bisa pergi tentang pelaksanaan atau 1432 01:03:39,670 --> 01:03:40,950 mewakili hal-hal seperti ini? 1433 01:03:40,950 --> 01:03:44,430 Nah, kita membutuhkan suatu cara untuk mengekspresikan diri kita sedikit lebih fleksibel daripada 1434 01:03:44,430 --> 01:03:46,420 variabel kami sejauh ini telah memungkinkan. 1435 01:03:46,420 --> 01:03:47,370 Kami sudah ints. 1436 01:03:47,370 --> 01:03:48,380 Kami sudah chars. 1437 01:03:48,380 --> 01:03:50,790 Kami sudah mengapung dan ganda dan beberapa orang lainnya. 1438 01:03:50,790 --> 01:03:55,050 Tetapi mereka adalah potongan individu dari memori yang tidak benar-benar memungkinkan kita untuk 1439 01:03:55,050 --> 01:03:58,010 mengungkapkan hal-hal seperti kata-kata dan kalimat dan frase. 1440 01:03:58,010 --> 01:04:00,200 Memang, kami telah disebut string seperti hal. 1441 01:04:00,200 --> 01:04:03,650 Tapi kami berjanji bahwa ini benar-benar hanya penyederhanaan dalam CS50 1442 01:04:03,650 --> 01:04:07,020 perpustakaan yang kita berniat untuk mengupas. 1443 01:04:07,020 --> 01:04:08,970 >> Dan jadi mari kita mulai melakukannya di sini. 1444 01:04:08,970 --> 01:04:11,130 Biarkan aku pergi ke depan dan membuka file - 1445 01:04:11,130 --> 01:04:13,770 semua file yang tersedia secara online yang biasa - 1446 01:04:13,770 --> 01:04:19,120 disebut array.c untuk memecahkan masalah yang tidak terkait dengan string tapi itu cat 1447 01:04:19,120 --> 01:04:23,040 gambar di sini tentang bagaimana kita bisa menggunakan sesuatu yang disebut array. 1448 01:04:23,040 --> 01:04:25,530 Array adalah tipe data. 1449 01:04:25,530 --> 01:04:31,320 Ini adalah jenis variabel, macam, yang memiliki beberapa jenis data yang lebih kecil 1450 01:04:31,320 --> 01:04:34,150 dalamnya kembali untuk kembali ke kembali ke belakang. 1451 01:04:34,150 --> 01:04:37,700 Jadi misalnya, jika kita ingin menulis sebuah program kecil yang memberikan Anda 1452 01:04:37,700 --> 01:04:42,110 kuis rata-rata untuk kursus seperti 50 yang memiliki dua kuis, Anda sangat bisa dengan mudah 1453 01:04:42,110 --> 01:04:45,170 menulis program ini - didasarkan bahkan pada beberapa materi minggu lalu - 1454 01:04:45,170 --> 01:04:47,770 dengan menggunakan GetInt dan beberapa variabel. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, dan itu cukup sederhana. 1456 01:04:51,920 --> 01:04:55,930 Ini mungkin 10, 20 baris kode, max, untuk melaksanakan program yang meminta 1457 01:04:55,930 --> 01:05:01,170 pengguna untuk dua nilai kuis dan kemudian menghitung rata-rata dengan menambahkannya 1458 01:05:01,170 --> 01:05:03,850 bersama-sama, membagi dua, dan kemudian mencetak hasilnya. 1459 01:05:03,850 --> 01:05:06,380 Kita mungkin bisa melakukan itu cukup mudah sekarang setelah 1460 01:05:06,380 --> 01:05:07,510 beberapa jumlah menit. 1461 01:05:07,510 --> 01:05:11,005 >> Tapi masalahnya adalah bahwa anggaplah bahwa 50 memiliki tiga atau empat kuis. 1462 01:05:11,005 --> 01:05:13,510 Misalkan Anda ingin menggunakan program yang sama untuk kelas yang memiliki 1463 01:05:13,510 --> 01:05:14,850 kuis mingguan. 1464 01:05:14,850 --> 01:05:16,610 Pikirkan tentang kelas yang mingguan kuis. 1465 01:05:16,610 --> 01:05:20,610 Jika ada seperti 16 atau lebih minggu dalam satu semester, sekarang Anda memiliki 16 variabel - 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Segera setelah Anda mulai melihat redundansi ini, copy dan paste 1468 01:05:27,560 --> 01:05:31,390 kode, harus mulai untuk membuat Anda berharap ada cara yang lebih baik. 1469 01:05:31,390 --> 01:05:33,930 Dan untungnya, karena array, ada. 1470 01:05:33,930 --> 01:05:34,980 Jadi mari kita lakukan ini. 1471 01:05:34,980 --> 01:05:38,430 Pertama, biarkan saya memperkenalkan hal yang sangat sederhana bahwa kita sudah tidak digunakan sejauh ini, 1472 01:05:38,430 --> 01:05:40,140 tetapi Anda akan melihat kadang-kadang dalam kode. 1473 01:05:40,140 --> 01:05:42,360 Ini adalah apa yang umumnya disebut konstanta. 1474 01:05:42,360 --> 01:05:45,790 Jadi itu adalah konstan dalam arti bahwa nilai ini tidak pernah berubah. 1475 01:05:45,790 --> 01:05:49,210 Konvensi manusia saat membuat sebuah konstanta adalah dengan menggunakan modal semua 1476 01:05:49,210 --> 01:05:51,940 surat, hanya supaya benar-benar menonjol dalam kode Anda. 1477 01:05:51,940 --> 01:05:55,960 Dan kata kunci khusus yang Anda gunakan dalam C # define. 1478 01:05:55,960 --> 01:06:00,250 Jadi jika Anda mengatakan # define, lalu spasi, maka kata yang ingin Anda gunakan untuk 1479 01:06:00,250 --> 01:06:03,260 konstan Namanya, dan kemudian nilai konstan. 1480 01:06:03,260 --> 01:06:06,180 Jadi pemberitahuan, ini berbeda dengan menugaskan sesuatu untuk variabel. 1481 01:06:06,180 --> 01:06:07,020 Tidak ada tanda sama. 1482 01:06:07,020 --> 01:06:08,240 Ada titik koma ada. 1483 01:06:08,240 --> 01:06:11,410 Ini adalah apa yang umumnya dikenal sebagai direktif preprocessor, tapi lebih pada 1484 01:06:11,410 --> 01:06:12,210 itu di lain waktu. 1485 01:06:12,210 --> 01:06:18,540 >> Untuk saat ini, ini menciptakan nilai tidak berubah disebut Kuis aktual yang 1486 01:06:18,540 --> 01:06:19,940 nilai numerik adalah 2. 1487 01:06:19,940 --> 01:06:24,020 Jadi di mana pun Anda melihat kuis, kuis, kuis seluruh file ini, itu 1488 01:06:24,020 --> 01:06:25,410 hanya nomor 2. 1489 01:06:25,410 --> 01:06:28,100 Sekarang, jika saya melihat utama sekarang, mari kita lihat bagaimana ini bekerja. 1490 01:06:28,100 --> 01:06:29,500 Pada awalnya, tampak sedikit samar. 1491 01:06:29,500 --> 01:06:31,340 Tapi itu semua barang dari satu minggu. 1492 01:06:31,340 --> 01:06:32,710 Meminta pengguna untuk nilai. 1493 01:06:32,710 --> 01:06:33,630 Bagaimana kita melakukan ini? 1494 01:06:33,630 --> 01:06:35,470 Nah, sejalan 22 - 1495 01:06:35,470 --> 01:06:37,210 ini benar-benar bagian dari nakal - 1496 01:06:37,210 --> 01:06:40,960 Saya menyatakan pelampung, tapi tidak hanya pelampung tunggal. 1497 01:06:40,960 --> 01:06:44,620 Saya menyatakan, lebih tepatnya, array nilai floating point. 1498 01:06:44,620 --> 01:06:49,100 Variabel itu akan disebut kelas, seperti yang tersirat di sini. 1499 01:06:49,100 --> 01:06:53,080 Tapi satu-satunya sintaks baru kemudian orang-kurung siku, fakta 1500 01:06:53,080 --> 01:06:59,350 bahwa saya telah mengatakan nilai mengambang dan kemudian braket terbuka dan kemudian nomor. 1501 01:06:59,350 --> 01:07:02,460 Perhatikan, jika ini adalah sebuah konstanta, ini hanya seperti yang kita lakukan ini. 1502 01:07:02,460 --> 01:07:06,890 Ini berarti komputer hey, beri aku dua mengapung, dan mari kita bersama-sebut 1503 01:07:06,890 --> 01:07:08,220 mereka nilai. 1504 01:07:08,220 --> 01:07:11,920 Hal ini berbeda dengan proses yang jauh lebih membosankan seperti ini. 1505 01:07:11,920 --> 01:07:15,850 Mengapung Grade1, mengambang grade2, dan sebagainya. 1506 01:07:15,850 --> 01:07:20,010 Jadi array memungkinkan kita untuk menerapkan ide ini, tetapi jauh lebih sedikit messily, di 1507 01:07:20,010 --> 01:07:24,630 sedemikian rupa sehingga kita dapat menulis satu baris kode bukan, katakanlah, 16 untuk 16 1508 01:07:24,630 --> 01:07:25,740 minggu semester. 1509 01:07:25,740 --> 01:07:29,950 Jadi saya tidak mau keras-kode 2 karena jika Anda berpikir tentang hal ini sekarang 1510 01:07:29,950 --> 01:07:34,160 logis - kira tahun depan CS50 perubahan 3 kuis gantinya. 1511 01:07:34,160 --> 01:07:35,510 Dan aku punya nomor 2 di sini. 1512 01:07:35,510 --> 01:07:36,600 Aku punya nomor 2 di sini. 1513 01:07:36,600 --> 01:07:37,580 Aku punya nomor 2 di sini. 1514 01:07:37,580 --> 01:07:38,560 Aku punya nomor 2 di sini. 1515 01:07:38,560 --> 01:07:43,180 Ini menjadi sangat membosankan dan sangat mudah untuk mengacaukan dan sengaja mengubah 1516 01:07:43,180 --> 01:07:47,690 satu nilai 3 dan kehilangan beberapa nilai lain 2. 1517 01:07:47,690 --> 01:07:52,460 Jadi aku akan pergi bukan abstrak ini dan menggunakan konstan yang, sebagai yang 1518 01:07:52,460 --> 01:07:54,120 nama menyarankan, tidak pernah berubah. 1519 01:07:54,120 --> 01:07:57,710 Dan sekarang, tidak peduli apakah kami memiliki berbagai kuis tahun ini atau berikutnya, saya 1520 01:07:57,710 --> 01:08:01,210 hanya perlu mengubahnya di satu tempat, di sini di atas. 1521 01:08:01,210 --> 01:08:02,720 >> Jadi itu saja konstan. 1522 01:08:02,720 --> 01:08:08,680 Sementara itu, fitur konseptual baru adalah bahwa dari array. 1523 01:08:08,680 --> 01:08:14,660 Jadi tanda kurung siku memberikan saya ini banyak mengapung dan membuat saya kolektif 1524 01:08:14,660 --> 01:08:16,630 menyebut mereka nilai di sini. 1525 01:08:16,630 --> 01:08:17,990 Jadi sekarang mari kita lihat apa yang akan saya lakukan. 1526 01:08:17,990 --> 01:08:20,359 Di sini, di baris 24 adalah awal dari untuk loop. 1527 01:08:20,359 --> 01:08:22,260 Ini benar-benar tidak ada yang mewah. 1528 01:08:22,260 --> 01:08:25,060 Ini hanya menggunakan kuis bukan nomor keras-kode. 1529 01:08:25,060 --> 01:08:27,790 Tapi tidak ada intelektual yang berbeda ada dari minggu lalu. 1530 01:08:27,790 --> 01:08:29,040 Ini hanya printf. 1531 01:08:29,040 --> 01:08:35,490 Jadi printf ("kuis nomor% d dari% d") karena saya hanya ingin mencetak memberikan kuis 1532 01:08:35,490 --> 01:08:38,050 nomor satu dari dua dan kemudian dua dari dua. 1533 01:08:38,050 --> 01:08:39,850 Jadi ini adalah murni sebuah hal estetika. 1534 01:08:39,850 --> 01:08:42,500 Tapi bagian yang menarik sekarang ini sejalan 27. 1535 01:08:42,500 --> 01:08:48,310 Dalam rangka untuk mengisi salah satu dari dua penampung dengan floating-point 1536 01:08:48,310 --> 01:08:51,029 nilai, Anda lagi menggunakan tanda kurung siku. 1537 01:08:51,029 --> 01:08:55,620 Dalam kasus ini, saya menggunakan i karena ini untuk loop telah dimulai dengan i menyamai 1538 01:08:55,620 --> 01:08:57,560 apa nilai, rupanya? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Jadi pada iterasi pertama dari loop ini, itu seolah-olah saya 1541 01:09:01,350 --> 01:09:02,689 menulis ini dalam kode. 1542 01:09:02,689 --> 01:09:05,580 Namun pada iterasi kedua lingkaran ini, itu seolah-olah saya 1543 01:09:05,580 --> 01:09:07,750 menulis ini dalam kode saya. 1544 01:09:07,750 --> 01:09:10,750 Tapi fakta bahwa saya menggunakan variabel sempurna karena, sebagai nama 1545 01:09:10,750 --> 01:09:14,300 menunjukkan, itu bervariasi nilainya pada setiap iterasi. 1546 01:09:14,300 --> 01:09:17,370 Jadi saya mengisi array ini satu tempat pada suatu waktu. 1547 01:09:17,370 --> 01:09:18,910 Apa array ini terlihat seperti? 1548 01:09:18,910 --> 01:09:21,430 Nah, alasan saya menarik ini persegi panjang super sederhana di layar di sini 1549 01:09:21,430 --> 01:09:23,350 sebelumnya adalah untuk alasan ini. 1550 01:09:23,350 --> 01:09:27,279 Array hanyalah sepotong memori diikuti oleh sepotong memori, 1551 01:09:27,279 --> 01:09:30,109 diikuti oleh sepotong memori, dan sebagainya. 1552 01:09:30,109 --> 01:09:35,260 Jadi, jika array saya adalah ukuran 2, dalam hal ini di sini, semua saya akan melakukan dengan 1553 01:09:35,260 --> 01:09:37,590 mengetik dalam skor kuis saya, seperti di sini. 1554 01:09:37,590 --> 01:09:39,430 Aku punya 100 yang satu ini. 1555 01:09:39,430 --> 01:09:42,020 Dan kemudian aku punya 99 yang satu ini. 1556 01:09:42,020 --> 01:09:46,040 Maka memori ini bahkan mungkin tidak digunakan karena aku hanya meminta 1557 01:09:46,040 --> 01:09:48,689 komputer untuk berbagai ukuran 2. 1558 01:09:48,689 --> 01:09:50,180 Mereka kotak masih ada. 1559 01:09:50,180 --> 01:09:50,340 Benar? 1560 01:09:50,340 --> 01:09:52,500 Anda masih memiliki dua gigabyte RAM, bahkan jika Anda hanya 1561 01:09:52,500 --> 01:09:53,979 meminta dua mengapung. 1562 01:09:53,979 --> 01:09:58,710 Jadi ide di balik array adalah bahwa komputer hanya mengambil sepotong memori 1563 01:09:58,710 --> 01:10:03,230 dan kemudian pembagian adil untul potongan kecil kembali untuk kembali ke kembali ke belakang. 1564 01:10:03,230 --> 01:10:04,740 Dan sehingga semua array adalah. 1565 01:10:04,740 --> 01:10:09,080 Ini sepotong bersebelahan memori, yang di dalamnya Anda bisa meletakkan segala sesuatu. 1566 01:10:09,080 --> 01:10:12,400 >> Sekarang ini terjadi untuk kemudian melakukan beberapa aritmatika membosankan. 1567 01:10:12,400 --> 01:10:16,170 Jika saya scroll ke bawah sini, ini adalah di mana saya kemudian iterate atas array. 1568 01:10:16,170 --> 01:10:19,410 Saya datang dengan penjumlahan dari semua nilai dalam array. 1569 01:10:19,410 --> 01:10:22,390 Dan kemudian saya menggunakan fungsi putaran di sini untuk benar-benar melakukan 1570 01:10:22,390 --> 01:10:23,940 jumlah dibagi dengan kuis. 1571 01:10:23,940 --> 01:10:27,450 Tapi biarkan aku melambaikan tanganku pada saat itu sebagai semacam aritmatika cukup untuk saat ini. 1572 01:10:27,450 --> 01:10:30,010 Tapi semua itu lakukan bagi saya pada akhirnya adalah menghitung rata-rata. 1573 01:10:30,010 --> 01:10:33,640 Jadi pertama kuis ditambah kuis kedua, dibagi 2, dan kemudian mencetak 1574 01:10:33,640 --> 01:10:34,700 keluar sebagai int. 1575 01:10:34,700 --> 01:10:39,030 >> Tapi mari kita sekarang transisi ke contoh yang berbeda yang disebut string1, 1576 01:10:39,030 --> 01:10:42,370 yang melukiskan gambaran serupa tapi string menggunakan. 1577 01:10:42,370 --> 01:10:45,550 Biarkan aku pergi ke depan dan menyederhanakan ini untuk sesaat. 1578 01:10:45,550 --> 01:10:48,340 Dan memaafkan lekukan untuk saat ini. 1579 01:10:48,340 --> 01:10:52,280 Perhatikan pada baris 19 dari contoh ini, saya mendapatkan string dari pengguna. 1580 01:10:52,280 --> 01:10:55,780 Tapi perhatikan apa yang saya lakukan selanjutnya dalam garis 22 dan seterusnya. 1581 01:10:55,780 --> 01:11:00,260 Aku benar-benar iterasi dari saya sampai - dan ini adalah trik baru - 1582 01:11:00,260 --> 01:11:02,730 strlen, string panjang. 1583 01:11:02,730 --> 01:11:07,010 Ini adalah fungsi yang datang dengan C bahwa jika Anda lulus string, ia memberitahu 1584 01:11:07,010 --> 01:11:08,950 Anda berapa banyak karakter dalam string tersebut. 1585 01:11:08,950 --> 01:11:09,440 Itu saja. 1586 01:11:09,440 --> 01:11:12,520 Fakta bahwa itu strlen bukannya panjang string hanya karena 1587 01:11:12,520 --> 01:11:13,040 lebih ringkas. 1588 01:11:13,040 --> 01:11:17,100 30 tahun yang lalu, orang suka menulis hal-hal sesingkat mungkin. 1589 01:11:17,100 --> 01:11:19,080 Jadi kita terus konvensi itu di sini. 1590 01:11:19,080 --> 01:11:21,730 i + + hanya berarti kenaikan i di setiap iterasi. 1591 01:11:21,730 --> 01:11:24,310 Dan sekarang perhatikan ini, yang benar-benar menarik. 1592 01:11:24,310 --> 01:11:28,730 Jadi di baris 24, saya katakan komputer, memberi saya karakter, delapan 1593 01:11:28,730 --> 01:11:30,770 bit, dan menyebutnya c. 1594 01:11:30,770 --> 01:11:35,370 Tapi apa ini di sisi kanan katakan? 1595 01:11:35,370 --> 01:11:38,150 Dalam bahasa Inggris, apa yang mewakili? 1596 01:11:38,150 --> 01:11:40,070 [Tak terdengar] 1597 01:11:40,070 --> 01:11:40,490 DAVID J. Malan: Tepat. 1598 01:11:40,490 --> 01:11:42,390 Berikan karakter pertama dalam array. 1599 01:11:42,390 --> 01:11:45,400 Atau lebih umum, memberikan karakter ke-i dalam array. 1600 01:11:45,400 --> 01:11:48,230 Dan menyadari itu penting sekarang bahwa sebagai ilmuwan komputer, kami benar-benar 1601 01:11:48,230 --> 01:11:49,330 menghitung dari 0. 1602 01:11:49,330 --> 01:11:51,290 Anda tidak memiliki kebijaksanaan sekarang untuk mulai melakukan hal ini. 1603 01:11:51,290 --> 01:11:54,580 Sekarang Anda harus berperilaku sesuai dengan harapan komputer dan 1604 01:11:54,580 --> 01:11:58,010 dihitung mulai dari nol karena [0] akan menjadi yang pertama 1605 01:11:58,010 --> 01:11:59,670 karakter dalam string. 1606 01:11:59,670 --> 01:12:01,320 [1] akan menjadi yang kedua. 1607 01:12:01,320 --> 01:12:03,610 [2] akan menjadi yang ketiga, dan sebagainya. 1608 01:12:03,610 --> 01:12:08,840 Jadi program ini, jika saya compile - ini, sekali lagi, string1. 1609 01:12:08,840 --> 01:12:11,040 >> Jadi membuat string1. 1610 01:12:11,040 --> 01:12:16,730 Dan sekarang saya menjalankan string1 di jendela terminal saya. 1611 01:12:16,730 --> 01:12:19,180 Ini menunggu masukan, jadi saya akan mengetik, katakanlah, David. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 Dan sekarang mencetak DAVID semua pada baris yang berbeda karena 1614 01:12:23,350 --> 01:12:24,430 perhatikan apa yang saya lakukan. 1615 01:12:24,430 --> 01:12:27,510 Saya mencetak satu karakter pada satu waktu. 1616 01:12:27,510 --> 01:12:29,100 Sekarang kita tidak akan pergi ke detail hari ini. 1617 01:12:29,100 --> 01:12:31,610 Tapi aku dihapus sesaat lalu cek ini di sini. 1618 01:12:31,610 --> 01:12:36,310 Ternyata bahwa jika pengguna mengalami gangguan, permusuhan, atau hanya 1619 01:12:36,310 --> 01:12:41,780 bingung, Anda benar-benar dapat gagal untuk memberikan string dengan panjang tertentu. 1620 01:12:41,780 --> 01:12:43,640 Jika Anda menekan tombol yang salah pada keyboard, Anda mungkin memberikan 1621 01:12:43,640 --> 01:12:44,390 ada string sama sekali. 1622 01:12:44,390 --> 01:12:47,790 Atau jika Anda berbahaya, Anda dapat mencoba untuk menyisipkan di bernilai gigabyte terhadap suatu 1623 01:12:47,790 --> 01:12:49,380 esai untuk mengisi string ini. 1624 01:12:49,380 --> 01:12:52,060 Dan jika komputer kehabisan memori, ternyata kita akan 1625 01:12:52,060 --> 01:12:54,310 untuk mendapatkan kembali nilai ini khusus yang disebut null. 1626 01:12:54,310 --> 01:12:57,550 Jadi untuk saat ini, hanya tahu bahwa ada nilai ini khusus yang disebut nol bahwa 1627 01:12:57,550 --> 01:13:01,000 akan memungkinkan kami untuk memeriksa ketika kita keluar dari memori, antara lain. 1628 01:13:01,000 --> 01:13:07,330 >> Tapi kalau aku membuka sekarang string2, melihat satu perbedaan di sini. 1629 01:13:07,330 --> 01:13:09,760 Perhatikan satu perbedaan di sini dengan string2. 1630 01:13:09,760 --> 01:13:13,260 Dengan string2, ini untuk loop adalah sedikit berbeda. 1631 01:13:13,260 --> 01:13:16,350 Biarkan saya menghapus nulls sehingga kita bisa berbicara dengan orang lain waktu. 1632 01:13:16,350 --> 01:13:18,460 Tapi apa yang berbeda tentang untuk loop saat ini? 1633 01:13:21,580 --> 01:13:23,160 Dan aku bisa kembali ke contoh sebelumnya. 1634 01:13:23,160 --> 01:13:24,800 Jadi itulah versi dua. 1635 01:13:24,800 --> 01:13:27,020 Ini adalah versi satu. 1636 01:13:27,020 --> 01:13:31,935 Satu, dua, satu dua. 1637 01:13:35,030 --> 01:13:38,240 Jadi panggilan strlen mana? 1638 01:13:38,240 --> 01:13:40,420 Itu di bagian pertama dari untuk loop. 1639 01:13:40,420 --> 01:13:43,060 Setiap pikiran tentang mengapa aku melakukan ini? 1640 01:13:43,060 --> 01:13:43,690 Ya. 1641 01:13:43,690 --> 01:13:46,010 [Tak terdengar] 1642 01:13:46,010 --> 01:13:47,630 DAVID J. Malan: Jadi kita tidak memanggil fungsi setiap saat. 1643 01:13:47,630 --> 01:13:48,040 Tepat. 1644 01:13:48,040 --> 01:13:50,350 Ingat dari untuk loop yang mereka super sederhana sekali Anda semacam 1645 01:13:50,350 --> 01:13:52,180 memahami bahwa ini adalah inisialisasi, yang 1646 01:13:52,180 --> 01:13:53,330 Kondisi, dan pembaruan. 1647 01:13:53,330 --> 01:13:55,430 Masalahnya adalah bahwa kondisi yang terjadi pada setiap 1648 01:13:55,430 --> 01:13:56,600 iterasi dari loop. 1649 01:13:56,600 --> 01:13:59,930 Dan sehingga dalam contoh di sini, apa yang buruk tentang fakta 1650 01:13:59,930 --> 01:14:03,500 bahwa ini adalah kondisi saya? 1651 01:14:03,500 --> 01:14:05,920 Anda menelepon strlen lagi dan lagi dan lagi. 1652 01:14:05,920 --> 01:14:08,990 Tapi begitu aku sudah mengetik di DAVID, panjang string yang lima. 1653 01:14:08,990 --> 01:14:11,560 Dan itu tidak akan berubah pada setiap iterasi dari loop karena 1654 01:14:11,560 --> 01:14:15,560 string yang masih D-A-V-I-D. Jadi ini adalah petunjuk pada apa yang akan menjadi 1655 01:14:15,560 --> 01:14:19,650 semakin penting ide yang dikenal sebagai keputusan desain, di mana - hanya tidak 1656 01:14:19,650 --> 01:14:21,640 membuat komputer melakukan pekerjaan yang tidak perlu. 1657 01:14:21,640 --> 01:14:25,630 >> Sekarang hanya sebagai sneak preview dari pset 2, pset 2 dalam edisi standar 1658 01:14:25,630 --> 01:14:28,850 akan menantang Anda untuk benar-benar menerapkan beberapa jumlah cipher, beberapa 1659 01:14:28,850 --> 01:14:32,650 jumlah algoritma enkripsi, sehingga Anda berdua dapat mengenkripsi dan mendekripsi 1660 01:14:32,650 --> 01:14:35,530 pesan rahasia, banyak seperti Ralphie orang di sana diterjemahkan. 1661 01:14:35,530 --> 01:14:38,720 Dalam edisi hacker dari pset 2, kita akan pergi sedikit lebih jauh. 1662 01:14:38,720 --> 01:14:42,010 Kami akan menyerahkan file dari sebuah sistem komputer yang sebenarnya yang berisi 1663 01:14:42,010 --> 01:14:45,690 Seluruh sekelompok username dan password terenkripsi yang sebenarnya, dan tantangan 1664 01:14:45,690 --> 01:14:49,110 untuk edisi hacker akan menjadi untuk mengcrack password dan angka 1665 01:14:49,110 --> 01:14:53,060 apa kriptografi atau apa rahasia yang digunakan untuk benar-benar 1666 01:14:53,060 --> 01:14:55,080 menghasilkan orang password. 1667 01:14:55,080 --> 01:14:58,360 Dan kita akan melakukan hal ini dengan menggunakan fitur baru di sini C bahwa saya akan memberikan 1668 01:14:58,360 --> 01:15:02,200 Anda hanya demo, yang dikenal sebagai argumen baris perintah. 1669 01:15:02,200 --> 01:15:05,930 >> Jadi ternyata, karena beberapa dari Anda mungkin telah melihat dalam bagian atau dalam buku teks, 1670 01:15:05,930 --> 01:15:09,850 utama tidak selalu harus kekosongan dalam tanda kurung. 1671 01:15:09,850 --> 01:15:14,060 Ternyata utama juga dapat ditulis seperti ini, dengan dua argumen, 1672 01:15:14,060 --> 01:15:19,690 argc dan argv, di mana argc adalah jumlah kata yang Anda ketik setelah 1673 01:15:19,690 --> 01:15:21,940 program nama pada baris perintah Anda. 1674 01:15:21,940 --> 01:15:24,550 Dan argv adalah kata-kata yang sebenarnya. 1675 01:15:24,550 --> 01:15:29,470 Dan sebagai tanda kurung siku ada menunjukkan, argv tampaknya array. 1676 01:15:29,470 --> 01:15:33,720 Ini akan menjadi string setelah string setelah string dalam memori. 1677 01:15:33,720 --> 01:15:36,170 Jadi apa yang akan kita dapat lakukan, dimulai dengan pset 2, adalah 1678 01:15:36,170 --> 01:15:37,310 sesuatu seperti ini. 1679 01:15:37,310 --> 01:15:42,450 Jika saya membuat argv1, yang merupakan contoh kita akan kembali ke pada hari Senin, dan menjalankan 1680 01:15:42,450 --> 01:15:45,180 itu, melihat bahwa ia tampaknya tidak melakukan apa-apa belum. 1681 01:15:45,180 --> 01:15:47,050 Itu hanya mencetak namanya sendiri. 1682 01:15:47,050 --> 01:15:53,220 Tapi kalau aku mengatakan selamat tinggal kelas, perhatikan bahwa program ini ternyata iterates 1683 01:15:53,220 --> 01:15:57,030 atas setiap kata-kata yang diketik pada prompt. 1684 01:15:57,030 --> 01:16:02,050 Dan cara dimana kita akan mendapatkan akses ke kata-kata bahwa pengguna memiliki 1685 01:16:02,050 --> 01:16:06,780 diketik pada prompt adalah dengan mengubah utama, mulai akhir pekan ini, dari int 1686 01:16:06,780 --> 01:16:10,710 main (void) ke int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 Dan dengan demikian akan lahir argumen baris perintah. 1688 01:16:13,700 --> 01:16:17,210 Dan sekali Anda mendapatkan benar-benar canggih ini, Anda akan mampu menulis 1689 01:16:17,210 --> 01:16:21,370 benar-benar trippy program, seperti ini satu di sini, yang berjalan di atas dan di luar 1690 01:16:21,370 --> 01:16:25,520 beberapa fungsi yang sudah kita lakukan sejauh ini, tetapi semua cukup kuat. 1691 01:16:25,520 --> 01:16:27,330 >> Jadi kita akan meninggalkan ini dengan ini di layar. 1692 01:16:27,330 --> 01:16:29,160 Dan kita akan melihat Anda pada hari Senin.