1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Bagian 4] [Kurang Nyaman] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Harvard University] 3 00:00:04,000 --> 00:00:07,000 [Ini adalah CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Baiklah, selamat datang kembali ke bagian. 5 00:00:10,000 --> 00:00:13,000 Dalam bagian ini minggu kita akan melakukan beberapa hal. 6 00:00:13,000 --> 00:00:17,000 Kami akan Soal rekap Set pertama 2, 7 00:00:17,000 --> 00:00:20,000 yang merupakan sejumlah masalah Caesar dan Vigenère. 8 00:00:20,000 --> 00:00:23,000 Dan kemudian kita akan menyelam ke review 0 Quiz 9 00:00:23,000 --> 00:00:26,000 dan menghabiskan sedikit waktu recapping apa yang telah kita bicarakan 10 00:00:26,000 --> 00:00:30,000 di masing-masing kuliah sejauh ini, dan kami juga akan melakukan beberapa masalah 11 00:00:30,000 --> 00:00:32,000 kuis dari tahun sebelumnya. 12 00:00:32,000 --> 00:00:36,000 Dengan cara itu kalian memiliki cara yang baik untuk mempersiapkan untuk itu. 13 00:00:36,000 --> 00:00:40,000 >> Untuk memulai, saya boot up beberapa solusi yang baik 14 00:00:40,000 --> 00:00:45,000 untuk sejumlah masalah sebelumnya, Soal Set 2, ke dalam ruang ini. 15 00:00:45,000 --> 00:00:48,000 Jika kalian semua menekan link ini, 16 00:00:48,000 --> 00:00:53,000 dan jika Anda klik nama saya dan klik pada revisi pertama saya 17 00:00:53,000 --> 00:00:56,000 Anda akan melihat caesar.c, yang persis apa yang saya cari di. 18 00:00:56,000 --> 00:01:00,000 Mari kita bicara tentang ini benar-benar cepat. 19 00:01:00,000 --> 00:01:02,000 Ini hanya solusi sampel. 20 00:01:02,000 --> 00:01:05,000 Hal ini belum tentu solusi sempurna. 21 00:01:05,000 --> 00:01:08,000 Ada banyak cara yang berbeda untuk menulis ini, 22 00:01:08,000 --> 00:01:10,000 tetapi ada beberapa hal yang saya ingin menyoroti 23 00:01:10,000 --> 00:01:13,000 yang saya lihat ketika saya grading, kesalahan umum yang saya pikir 24 00:01:13,000 --> 00:01:18,000 solusi ini melakukan pekerjaan yang sangat baik penanganan. 25 00:01:18,000 --> 00:01:22,000 >> Yang pertama adalah memiliki semacam komentar header di atas. 26 00:01:22,000 --> 00:01:25,000 Pada baris 1 sampai 7 Anda melihat rincian, 27 00:01:25,000 --> 00:01:28,000 apa sebenarnya program ini lakukan. 28 00:01:28,000 --> 00:01:32,000 Sebuah praktek standar yang baik ketika Anda sedang menulis kode C 29 00:01:32,000 --> 00:01:35,000 terlepas jika program Anda yang terkandung dalam satu file atau 30 00:01:35,000 --> 00:01:38,000 apakah itu dibagi atas beberapa file adalah memiliki semacam 31 00:01:38,000 --> 00:01:40,000 berorientasi komentar di atas. 32 00:01:40,000 --> 00:01:43,000 Hal ini juga untuk orang-orang yang pergi keluar dan menulis kode di dunia nyata. 33 00:01:43,000 --> 00:01:47,000 Ini adalah di mana mereka akan menempatkan informasi hak cipta. 34 00:01:47,000 --> 00:01:50,000 Di bawah ini adalah # termasuk. 35 00:01:50,000 --> 00:01:55,000 On line 16 ada ini # define, yang kita akan kembali ke dalam hanya sedikit. 36 00:01:55,000 --> 00:01:59,000 Dan kemudian setelah fungsi dimulai, dimulai sekali main, 37 00:01:59,000 --> 00:02:03,000 karena program ini telah semua yang terkandung dalam sebuah fungsi tunggal 38 00:02:03,000 --> 00:02:09,000 hal pertama yang terjadi-dan ini sangat idiomatic dan khas dari program C 39 00:02:09,000 --> 00:02:14,000 yang mengambil di baris perintah argumen-adalah bahwa hal itu segera memeriksa 40 00:02:14,000 --> 00:02:18,000 >> untuk menghitung argumen, argc. 41 00:02:18,000 --> 00:02:24,000 Di sini kita melihat bahwa program ini mengharapkan 2 argumen tepat. 42 00:02:24,000 --> 00:02:27,000 Ingat bahwa ada argumen pertama itulah yang khusus 43 00:02:27,000 --> 00:02:29,000 yang selalu nama program yang sedang dijalankan, 44 00:02:29,000 --> 00:02:31,000 nama file executable. 45 00:02:31,000 --> 00:02:36,000 Dan jadi apa yang dilakukan adalah mencegah pengguna dari menjalankan program 46 00:02:36,000 --> 00:02:42,000 dengan argumen yang lebih atau kurang. 47 00:02:42,000 --> 00:02:44,000 Alasan kita ingin memeriksa ini segera karena 48 00:02:44,000 --> 00:02:52,000 kita tidak bisa benar-benar mengakses array argv sini andal 49 00:02:52,000 --> 00:02:55,000 sampai kita sudah diperiksa untuk melihat seberapa besar itu. 50 00:02:55,000 --> 00:02:58,000 >> Salah satu kesalahan umum yang saya lihat adalah orang-orang yang akan segera masuk 51 00:02:58,000 --> 00:03:01,000 dan ambil argv [1]. 52 00:03:01,000 --> 00:03:06,000 Mereka akan ambil argumen kunci dari array dan melakukan hal yang untuk saya memeriksa itu, 53 00:03:06,000 --> 00:03:11,000 dan kemudian mereka akan melakukan tes untuk argc serta tes berikutnya, 54 00:03:11,000 --> 00:03:16,000 apakah argumen pertama memang integer pada saat yang sama, 55 00:03:16,000 --> 00:03:20,000 dan yang tidak bekerja karena dalam kasus yang tidak ada argumen yang diberikan 56 00:03:20,000 --> 00:03:26,000 Anda akan meraih argumen yang tidak ada atau mencoba untuk mengambil salah satu yang tidak ada. 57 00:03:26,000 --> 00:03:29,000 >> Hal besar lainnya yang harus Anda perhatikan adalah bahwa 58 00:03:29,000 --> 00:03:32,000 Anda selalu ingin mencetak beberapa jenis pesan kesalahan membantu 59 00:03:32,000 --> 00:03:34,000 kepada pengguna untuk mengarahkan mereka. 60 00:03:34,000 --> 00:03:37,000 Saya yakin Anda sudah menjalankan program di mana semua tiba-tiba crash, 61 00:03:37,000 --> 00:03:41,000 dan Anda mendapatkan dialog ini sedikit konyol yang muncul dan mengatakan 62 00:03:41,000 --> 00:03:44,000 sesuatu yang mengerikan samar dan mungkin memberi Anda kode kesalahan atau sesuatu seperti itu 63 00:03:44,000 --> 00:03:47,000 yang tidak masuk akal. 64 00:03:47,000 --> 00:03:50,000 Ini adalah di mana Anda benar-benar ingin memberikan sesuatu yang berguna 65 00:03:50,000 --> 00:03:54,000 dan ditargetkan untuk pengguna sehingga ketika mereka menjalankannya mereka pergi "Oh," wajah sawit. 66 00:03:54,000 --> 00:03:58,000 "Saya tahu persis apa yang harus dilakukan saya tahu bagaimana memperbaikinya.." 67 00:03:58,000 --> 00:04:01,000 >> Jika Anda tidak mencetak pesan, maka Anda benar-benar berakhir 68 00:04:01,000 --> 00:04:04,000 meninggalkan pengguna untuk pergi memeriksa kode sumber Anda 69 00:04:04,000 --> 00:04:07,000 untuk mencari tahu apa yang salah. 70 00:04:07,000 --> 00:04:11,000 Ada juga beberapa kali bahwa Anda akan menggunakan kode kesalahan yang berbeda. 71 00:04:11,000 --> 00:04:14,000 Di sini kita hanya menggunakan satu mengatakan ada kesalahan, 72 00:04:14,000 --> 00:04:16,000 ada kesalahan, ada kesalahan. 73 00:04:16,000 --> 00:04:20,000 Bigger program, seringkali program yang dipanggil oleh program lain, 74 00:04:20,000 --> 00:04:25,000 akan kembali semacam kode kesalahan khusus dalam skenario yang berbeda 75 00:04:25,000 --> 00:04:28,000 untuk pemrograman mengkomunikasikan apa yang Anda mau 76 00:04:28,000 --> 00:04:32,000 hanya menggunakan pesan bahasa Inggris yang bagus untuk. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Seperti kita bekerja ke bawah, Anda dapat melihat kami tarik keluar kunci. 79 00:04:37,000 --> 00:04:40,000 Kami menguji untuk melihat apakah kunci cocok. 80 00:04:40,000 --> 00:04:42,000 Kami mendapatkan pesan dari pengguna. 81 00:04:42,000 --> 00:04:46,000 Alasan kita melakukannya di lakukan sementara loop-dan ini adalah sesuatu yang kita akan menutupi 82 00:04:46,000 --> 00:04:50,000 dalam sedikit sedikit-tapi ternyata bahwa jika Anda ketik control D 83 00:04:50,000 --> 00:04:54,000 ketika Anda mendapatkan GetString yang cepat pada terminal 84 00:04:54,000 --> 00:04:59,000 apa yang sebenarnya adalah mengirimkan karakter khusus 85 00:04:59,000 --> 00:05:01,000 untuk program. 86 00:05:01,000 --> 00:05:05,000 Ini disebut ELF atau akhir karakter file. 87 00:05:05,000 --> 00:05:08,000 Dan dalam hal ini, string pesan kami akan null, 88 00:05:08,000 --> 00:05:14,000 jadi ini bukan sesuatu yang kita diperiksa dalam masalah, menetapkan. 89 00:05:14,000 --> 00:05:17,000 >> Tapi seperti yang kita pergi, sekarang kita sudah mulai berbicara tentang pointer 90 00:05:17,000 --> 00:05:21,000 dan alokasi memori dinamis di heap, 91 00:05:21,000 --> 00:05:25,000 memeriksa nol setiap kali Anda memiliki fungsi yang mungkin 92 00:05:25,000 --> 00:05:30,000 mengembalikan null sebagai nilai adalah sesuatu yang Anda akan ingin untuk membiasakan melakukan. 93 00:05:30,000 --> 00:05:33,000 Hal ini di sini terutama untuk ilustrasi. 94 00:05:33,000 --> 00:05:36,000 Tetapi ketika Anda melihat GetString di masa depan, 95 00:05:36,000 --> 00:05:41,000 sehingga dari Masalah Set 4, Anda akan ingin menyimpan ini dalam pikiran. 96 00:05:41,000 --> 00:05:44,000 Sekali lagi, ini bukan masalah bagi Masalah Set 3 baik karena kita tidak menutupinya belum. 97 00:05:44,000 --> 00:05:53,000 Akhirnya, kita sampai ke bagian di mana kita bisa loop enkripsi utama, 98 00:05:53,000 --> 00:05:57,000 dan ada beberapa hal yang terjadi di sini. 99 00:05:57,000 --> 00:06:02,000 Pertama, kita iterate atas string seluruh pesan itu sendiri. 100 00:06:02,000 --> 00:06:07,000 Di sini kita sudah menyimpan panggilan strlen dalam kondisi, 101 00:06:07,000 --> 00:06:12,000 yang beberapa dari Anda telah menunjukkan bukanlah cara yang bagus untuk pergi. 102 00:06:12,000 --> 00:06:15,000 Ternyata dalam hal ini juga tidak besar, 103 00:06:15,000 --> 00:06:20,000 sebagian karena kita memodifikasi isi dari pesan itu sendiri 104 00:06:20,000 --> 00:06:27,000 dalam untuk loop, jadi jika kita memiliki pesan yang 10 karakter, 105 00:06:27,000 --> 00:06:32,000 pertama kalinya kita mulai bahwa untuk loop strlen akan kembali apa? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Tetapi jika kita kemudian memodifikasi pesan, katakanlah kita memodifikasi karakter ke-5, 108 00:06:40,000 --> 00:06:46,000 dan kami melemparkan dalam karakter 0 \ di posisi ke-5, 109 00:06:46,000 --> 00:06:49,000 pada iterasi berikutnya strlen (message) tidak akan kembali apa yang dilakukannya 110 00:06:49,000 --> 00:06:52,000 pertama kalinya kami iterasi, 111 00:06:52,000 --> 00:06:56,000 tetapi sebaliknya akan kembali 5 karena kami melemparkan dalam null terminator, 112 00:06:56,000 --> 00:06:59,000 dan panjang string yang didefinisikan 113 00:06:59,000 --> 00:07:03,000 dengan posisi yang \ 0. 114 00:07:03,000 --> 00:07:09,000 Dalam kasus ini, ini adalah cara yang bagus untuk pergi karena kita modifikasi di tempat. 115 00:07:09,000 --> 00:07:13,000 Tapi Anda melihat bahwa ini adalah benar-benar mengejutkan sederhana untuk mengenkripsi 116 00:07:13,000 --> 00:07:16,000 jika Anda bisa mendapatkan matematika yang benar. 117 00:07:16,000 --> 00:07:19,000 Semua yang dibutuhkan adalah untuk memeriksa apakah atau tidak surat yang Anda cari di 118 00:07:19,000 --> 00:07:21,000 adalah huruf besar atau huruf kecil. 119 00:07:21,000 --> 00:07:24,000 >> Alasan kita hanya harus memeriksa untuk itu dan kami tidak perlu memeriksa 120 00:07:24,000 --> 00:07:27,000 kasus alpha adalah karena 121 00:07:27,000 --> 00:07:30,000 jika karakter adalah huruf besar atau huruf kecil jika 122 00:07:30,000 --> 00:07:33,000 maka itu pasti sebuah karakter alfabet, 123 00:07:33,000 --> 00:07:38,000 karena kita tidak memiliki digit huruf besar dan huruf kecil. 124 00:07:38,000 --> 00:07:41,000 Hal lain yang kami lakukan-dan ini adalah sedikit rumit- 125 00:07:41,000 --> 00:07:45,000 adalah kita telah memodifikasi Caesar cipher standar rumus 126 00:07:45,000 --> 00:07:49,000 yang kami berikan dalam spesifikasi sejumlah masalah. 127 00:07:49,000 --> 00:07:52,000 Apa yang berbeda di sini adalah bahwa kita dikurangi 128 00:07:52,000 --> 00:07:58,000 di ibukota kasus huruf A, dan kemudian kita menambahkan modal A 129 00:07:58,000 --> 00:08:02,000 kembali di di akhir. 130 00:08:02,000 --> 00:08:05,000 >> Saya tahu beberapa dari Anda telah melakukan ini dalam kode Anda. 131 00:08:05,000 --> 00:08:09,000 Apakah ada di antara kalian melakukan ini dalam kiriman Anda? 132 00:08:09,000 --> 00:08:13,000 Anda melakukan ini. Bisakah Anda menjelaskan apa hal ini, Sahb? 133 00:08:13,000 --> 00:08:18,000 Dengan mengurangkan keluar, karena Anda melakukan mod tepat setelah itu, 134 00:08:18,000 --> 00:08:21,000 Anda harus membawanya keluar, sehingga cara Anda mendapatkan [batuk] posisi. 135 00:08:21,000 --> 00:08:25,000 Dan kemudian dengan menambahkan kembali kemudian Anda bergeser di atas salah satu yang Anda inginkan. 136 00:08:25,000 --> 00:08:27,000 Ya, tepatnya. 137 00:08:27,000 --> 00:08:32,000 Apa Sahb katakan adalah bahwa ketika kita ingin menambahkan 138 00:08:32,000 --> 00:08:36,000 kami pesan dan kunci kami bersama-sama 139 00:08:36,000 --> 00:08:42,000 dan kemudian mod itu, mod bahwa dengan NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 jika kita tidak skala pesan kami ke kisaran 0 sampai 25 pertama yang tepat, 141 00:08:50,000 --> 00:08:54,000 maka kita mungkin akhirnya mendapatkan nomor benar-benar aneh 142 00:08:54,000 --> 00:08:59,000 karena nilai-nilai yang kita cari pada saat kita melihat pesan [i], 143 00:08:59,000 --> 00:09:03,000 ketika kita melihat karakter i dari plain-text pesan kami, 144 00:09:03,000 --> 00:09:08,000 adalah nilai suatu tempat dalam kisaran 65-122 145 00:09:08,000 --> 00:09:13,000 berdasarkan pada nilai-nilai ASCII untuk huruf A sampai z huruf kecil. 146 00:09:13,000 --> 00:09:18,000 Dan jadi ketika kita mod dengan 26 atau NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 karena itu kami # menentukan di bagian kanan atas di sini, 148 00:09:23,000 --> 00:09:28,000 yang akan memberi kita nilai yang ada di kisaran 0 sampai 25, 149 00:09:28,000 --> 00:09:30,000 dan kita perlu cara untuk kemudian skala yang kembali 150 00:09:30,000 --> 00:09:32,000 dan mendapatkannya dalam kisaran ASCII yang sesuai. 151 00:09:32,000 --> 00:09:36,000 Cara termudah untuk melakukannya adalah untuk hanya skala semuanya turun 152 00:09:36,000 --> 00:09:39,000 ke kisaran 0 sampai 25 untuk memulai dengan, 153 00:09:39,000 --> 00:09:43,000 dan kemudian beralih semuanya kembali di akhir. 154 00:09:43,000 --> 00:09:46,000 >> Lain kesalahan umum yang saya melihat orang-orang berlari ke dalam adalah bahwa 155 00:09:46,000 --> 00:09:50,000 jika Anda tidak benar-benar melakukan skala ini segera 156 00:09:50,000 --> 00:09:53,000 dan Anda menambahkan pesan dan kunci bersama-sama dan Anda menambahkan mereka, katakanlah, 157 00:09:53,000 --> 00:09:58,000 ke dalam variabel char, masalah dengan itu 158 00:09:58,000 --> 00:10:01,000 adalah karena pesan [i] adalah angka yang relatif besar untuk memulai dengan- 159 00:10:01,000 --> 00:10:05,000 ingat itu setidaknya 65 jika itu sebuah huruf besar karakter- 160 00:10:05,000 --> 00:10:09,000 jika Anda memiliki kunci besar, katakanlah, sesuatu seperti 100, 161 00:10:09,000 --> 00:10:13,000 dan Anda menambahkan mereka bersama-sama ke 2 char ditandatangani Anda akan mendapatkan overflow. 162 00:10:13,000 --> 00:10:17,000 Anda akan mendapatkan nilai yang lebih besar dari 127, 163 00:10:17,000 --> 00:10:22,000 yang merupakan nilai terbesar bahwa variabel char bisa terus. 164 00:10:22,000 --> 00:10:26,000 Sekali lagi, itulah mengapa kau ingin melakukan hal seperti itu untuk memulai dengan. 165 00:10:26,000 --> 00:10:29,000 Beberapa orang mendapat sekitar kasus itu dengan melakukan jika lain dan pengujian 166 00:10:29,000 --> 00:10:33,000 untuk melihat apakah itu akan melimpah sebelum melakukan itu, 167 00:10:33,000 --> 00:10:36,000 tapi cara ini mendapat sekitar itu. 168 00:10:36,000 --> 00:10:40,000 Dan kemudian dalam solusi ini kita dicetak seluruh string di akhir. 169 00:10:40,000 --> 00:10:45,000 Orang lain dicetak karakter pada satu waktu. Keduanya mengagumkan. 170 00:10:45,000 --> 00:10:51,000 Pada titik ini, apakah kalian memiliki pertanyaan, komentar tentang ini? 171 00:10:51,000 --> 00:10:56,000 Hal yang Anda sukai, hal-hal yang tidak Anda sukai? 172 00:10:56,000 --> 00:10:58,000 >> Saya punya pertanyaan. 173 00:10:58,000 --> 00:11:01,000 Mungkin aku rindu selama penjelasan Anda, tapi bagaimana program ini 174 00:11:01,000 --> 00:11:07,000 melewatkan ruang untuk menghubungkan kunci dengan panjang teks? 175 00:11:07,000 --> 00:11:10,000 Ini hanya Caesar cipher. >> Oh, maaf, ya. 176 00:11:10,000 --> 00:11:13,000 Ya, kita akan melihat bahwa. 177 00:11:13,000 --> 00:11:16,000 Dalam cipher Caesar kami mendapat sekitar itu karena 178 00:11:16,000 --> 00:11:18,000 kita hanya membalik karakter. 179 00:11:18,000 --> 00:11:27,000 Kami hanya diputar mereka jika mereka besar atau kecil. 180 00:11:27,000 --> 00:11:32,000 Kalian merasa cukup baik tentang hal ini? 181 00:11:32,000 --> 00:11:34,000 Jangan ragu untuk menyalin rumah ini, bawa, 182 00:11:34,000 --> 00:11:37,000 bandingkan dengan apa yang kalian tulis. 183 00:11:37,000 --> 00:11:42,000 Pasti merasa bebas untuk mengirim pertanyaan tentang hal itu juga. 184 00:11:42,000 --> 00:11:46,000 Dan lagi, menyadari bahwa tujuan di sini dengan masalah Anda set 185 00:11:46,000 --> 00:11:50,000 bukan untuk mendapatkan kalian untuk menulis kode sempurna untuk set masalah Anda. 186 00:11:50,000 --> 00:11:57,000 Ini adalah pengalaman belajar. Ya. 187 00:11:57,000 --> 00:12:01,000 >> Kembali ke do sementara loop, jika sama dengan nol, 188 00:12:01,000 --> 00:12:06,000 jadi nol hanya berarti apa-apa, mereka hanya tekan enter? 189 00:12:06,000 --> 00:12:12,000 Null adalah nilai pointer khusus, 190 00:12:12,000 --> 00:12:17,000 dan kami menggunakan null ketika kita ingin mengatakan 191 00:12:17,000 --> 00:12:23,000 kita memiliki variabel pointer yang menunjuk ke apa-apa. 192 00:12:23,000 --> 00:12:28,000 Dan begitu biasanya itu berarti bahwa variabel ini, variabel pesan 193 00:12:28,000 --> 00:12:35,000 kosong, dan di sini, karena kita menggunakan tipe string CS50 khusus, 194 00:12:35,000 --> 00:12:37,000 apa tipe string CS50? 195 00:12:37,000 --> 00:12:42,000 Pernahkah Anda melihat apa itu ketika David ditarik kembali tenda di kuliah? 196 00:12:42,000 --> 00:12:44,000 Itu funky-itu adalah pointer, kan? 197 00:12:44,000 --> 00:12:48,000 Oke, yeah >> Ini. Adalah char *. 198 00:12:48,000 --> 00:12:52,000 Dan sehingga benar-benar kita bisa mengganti ini 199 00:12:52,000 --> 00:12:56,000 di sini dengan pesan * char, 200 00:12:56,000 --> 00:13:04,000 sehingga fungsi GetString, jika tidak berhasil mendapatkan string dari user, 201 00:13:04,000 --> 00:13:08,000 tidak dapat mengurai string, dan satu kasus di mana ia tidak dapat mengurai string 202 00:13:08,000 --> 00:13:11,000 adalah jika pengguna jenis karakter akhir file, D kontrol, 203 00:13:11,000 --> 00:13:17,000 yang bukan sesuatu yang Anda biasanya lakukan, tapi jika itu terjadi 204 00:13:17,000 --> 00:13:20,000 maka fungsi ini akan mengembalikan nilai null sebagai cara untuk mengatakan 205 00:13:20,000 --> 00:13:23,000 "Hei, saya tidak mendapatkan string." 206 00:13:23,000 --> 00:13:27,000 Apa yang akan terjadi jika kita tidak menaruh pesan = null, 207 00:13:27,000 --> 00:13:30,000 yang merupakan sesuatu yang kita belum melakukan belum? 208 00:13:30,000 --> 00:13:32,000 Mengapa hal itu menjadi masalah di sini? 209 00:13:32,000 --> 00:13:38,000 Karena aku tahu bahwa kita berbicara sedikit dalam kuliah tentang kebocoran memori. 210 00:13:38,000 --> 00:13:42,000 Ya, mari kita lakukan itu, dan mari kita lihat apa yang terjadi. 211 00:13:42,000 --> 00:13:44,000 >> Pertanyaan Basil adalah apa yang terjadi jika kita tidak benar-benar memiliki 212 00:13:44,000 --> 00:13:48,000 pesan ini test = null? 213 00:13:48,000 --> 00:13:51,000 Mari kita gulir ke atas. 214 00:13:51,000 --> 00:13:53,000 Kalian dapat komentar dari ini. 215 00:13:53,000 --> 00:13:55,000 Sebenarnya, saya akan menyimpannya dalam revisi. 216 00:13:55,000 --> 00:13:58,000 Ini akan menjadi Revisi 3. 217 00:13:58,000 --> 00:14:02,000 Apa yang Anda harus lakukan untuk menjalankan program ini adalah Anda harus mengklik ikon gigi di sini, 218 00:14:02,000 --> 00:14:04,000 dan Anda harus menambahkan argumen untuk itu. 219 00:14:04,000 --> 00:14:10,000 Anda harus memberikan argumen kunci karena kita ingin lulus dalam argumen baris perintah. 220 00:14:10,000 --> 00:14:13,000 Di sini saya akan memberikan nomor 3. Saya suka 3. 221 00:14:13,000 --> 00:14:19,000 Sekarang zooming kembali keluar, menjalankan program. 222 00:14:19,000 --> 00:14:24,000 Itu berjalan, kompilasi, membangun. 223 00:14:24,000 --> 00:14:27,000 Di sini kita pergi. Ini menunggu untuk diminta. 224 00:14:27,000 --> 00:14:33,000 Jika saya mengetik sesuatu seperti halo-mana itu pergi? 225 00:14:33,000 --> 00:14:38,000 Oh, program saya terlalu lama untuk menjalankan. Aku sih mengoceh seperti itu terlalu lama. 226 00:14:38,000 --> 00:14:40,000 Di sini ia pergi. 227 00:14:40,000 --> 00:14:43,000 Sekarang saya ketik halo. 228 00:14:43,000 --> 00:14:46,000 Kami melihat bahwa itu mengenkripsi tepat. 229 00:14:46,000 --> 00:14:52,000 Sekarang apa yang terjadi jika kita lakukan GetString prompt untuk mengembalikan null? 230 00:14:52,000 --> 00:14:57,000 Ingat, saya mengatakan bahwa kami melakukan itu dengan menekan control D pada saat yang sama. 231 00:14:57,000 --> 00:14:59,000 Saya akan gulir di sini. Kita akan jalankan lagi. 232 00:14:59,000 --> 00:15:01,000 Bangunan. Ada kelanjutannya. 233 00:15:01,000 --> 00:15:04,000 Sekarang ketika saya menekan tombol control D 234 00:15:04,000 --> 00:15:12,000 Aku punya baris yang mengatakan opt/sandbox50/bin/run.sh, Segmentation fault. 235 00:15:12,000 --> 00:15:15,000 Pernahkah kalian melihat itu sebelumnya? 236 00:15:15,000 --> 00:15:17,000 >> [Mahasiswa] Mengapa tidak ada >>-Maaf? 237 00:15:17,000 --> 00:15:20,000 [Mahasiswa] Mengapa tidak ada core dump dalam kasus ini? 238 00:15:20,000 --> 00:15:26,000 Dump inti-pertanyaan ini mengapa tidak ada core dump di sini? 239 00:15:26,000 --> 00:15:29,000 Pertanyaannya adalah bahwa mungkin ada, tetapi core dump adalah file 240 00:15:29,000 --> 00:15:31,000 yang akan disimpan pada hard drive. 241 00:15:31,000 --> 00:15:34,000 Dalam hal ini kami telah menonaktifkan core dumps 242 00:15:34,000 --> 00:15:37,000 pada server berjalan sehingga kita tidak memiliki orang-orang seg faulting 243 00:15:37,000 --> 00:15:40,000 dan membangun ton core dumps. 244 00:15:40,000 --> 00:15:46,000 Tapi Anda mungkin mendapatkan satu. 245 00:15:46,000 --> 00:15:48,000 Core dumps adalah semacam hal yang sering Anda dapat menonaktifkan, 246 00:15:48,000 --> 00:15:52,000 dan kadang-kadang Anda lakukan. 247 00:15:52,000 --> 00:15:55,000 Kesalahan segmentasi, untuk menjawab pertanyaan Anda, Basil, 248 00:15:55,000 --> 00:16:00,000 mengatakan bahwa kita mencoba untuk mengakses pointer 249 00:16:00,000 --> 00:16:05,000 yang tidak diatur untuk menunjukkan apa pun. 250 00:16:05,000 --> 00:16:09,000 Ingat Binky dalam video ketika mencoba untuk Binky 251 00:16:09,000 --> 00:16:12,000 pergi mengakses pointer yang tidak menunjuk apa-apa? 252 00:16:12,000 --> 00:16:16,000 Dalam hal ini saya kira secara teknis pointer menunjuk ke sesuatu. 253 00:16:16,000 --> 00:16:20,000 Ini menunjuk ke nol, yang secara teknis 0, 254 00:16:20,000 --> 00:16:25,000 tapi itu didefinisikan berada di segmen yang tidak dapat diakses 255 00:16:25,000 --> 00:16:28,000 oleh program Anda, sehingga Anda mendapatkan kesalahan segmentasi 256 00:16:28,000 --> 00:16:31,000 karena Anda tidak mengakses memori yang ada di segmen valid 257 00:16:31,000 --> 00:16:38,000 seperti segmen tumpukan atau stack segmen atau segmen data. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Setiap pertanyaan lebih lanjut tentang Caesar? 260 00:16:48,000 --> 00:16:51,000 >> Mari kita lanjutkan. Mari kita lihat Revisi 2 benar-benar cepat. 261 00:16:51,000 --> 00:17:00,000 Itu Vigenère. 262 00:17:00,000 --> 00:17:04,000 Di sini, di Vigenère 263 00:17:04,000 --> 00:17:06,000 kita akan berjalan melalui satu ini cukup cepat karena, sekali lagi, 264 00:17:06,000 --> 00:17:10,000 Vigenère dan Caesar cukup mirip. 265 00:17:10,000 --> 00:17:12,000 Komentar header sebelumnya, 266 00:17:12,000 --> 00:17:17,000 # Define adalah sebelum untuk menghindari menggunakan angka-angka ajaib. 267 00:17:17,000 --> 00:17:21,000 Yang menyenangkan adalah mengatakan kita ingin pindah ke 268 00:17:21,000 --> 00:17:23,000 alfabet yang berbeda atau sesuatu seperti itu. 269 00:17:23,000 --> 00:17:26,000 Daripada harus pergi secara manual mengubah semua 26 dalam kode 270 00:17:26,000 --> 00:17:30,000 kita bisa mengubah ini ke 27 atau menjatuhkannya ke bawah 271 00:17:30,000 --> 00:17:34,000 jika kita menggunakan huruf yang berbeda, bahasa yang berbeda. 272 00:17:34,000 --> 00:17:38,000 Sekali lagi, kami punya cek ini dari jumlah argumen, 273 00:17:38,000 --> 00:17:42,000 dan benar-benar Anda hampir dapat mengambil ini sebagai template. 274 00:17:42,000 --> 00:17:46,000 Cukup banyak setiap program yang Anda tulis harus memiliki- 275 00:17:46,000 --> 00:17:50,000 jika itu membutuhkan baris perintah argumen-beberapa urutan baris 276 00:17:50,000 --> 00:17:55,000 yang berbunyi seperti ini di awal. 277 00:17:55,000 --> 00:17:59,000 Itulah salah satu tes kewarasan pertama yang ingin Anda lakukan. 278 00:17:59,000 --> 00:18:03,000 >> Berikut apa yang kita lakukan adalah kita memastikan bahwa 279 00:18:03,000 --> 00:18:06,000 kata kunci adalah sah, dan itu adalah cek kedua yang kita lakukan. 280 00:18:06,000 --> 00:18:11,000 Perhatikan lagi bahwa kami berpisah ini dari argc dan 2. 281 00:18:11,000 --> 00:18:14,000 Perhatikan bahwa dalam kasus ini satu hal yang kita harus lakukan adalah bukan 282 00:18:14,000 --> 00:18:18,000 menggunakan untuk i kami ingin memvalidasi seluruh string, 283 00:18:18,000 --> 00:18:21,000 dan untuk melakukan itu Anda benar-benar harus pergi karakter demi karakter 284 00:18:21,000 --> 00:18:23,000 atas tali. 285 00:18:23,000 --> 00:18:29,000 Tidak ada cara yang baik untuk memanggil sesuatu di atasnya 286 00:18:29,000 --> 00:18:31,000 karena bahkan, misalnya, untuk saya akan kembali 0 287 00:18:31,000 --> 00:18:37,000 jika tidak dapat mengurai integer, sehingga bahkan tidak bekerja. 288 00:18:37,000 --> 00:18:42,000 Sekali lagi, pesan yang bagus memberitahu pengguna persis apa yang terjadi. 289 00:18:42,000 --> 00:18:45,000 Maka di sini, sekali lagi, kami juga menangani kasus di mana 290 00:18:45,000 --> 00:18:50,000 pengguna mengetik karakter D kontrol acak. 291 00:18:50,000 --> 00:18:54,000 >> Dan kemudian Charlotte memiliki pertanyaan sebelumnya tentang bagaimana kita mengelola untuk melewati ruang 292 00:18:54,000 --> 00:18:57,000 dalam string kami di sini. 293 00:18:57,000 --> 00:19:00,000 Ini adalah sama halnya dengan apa yang kita lakukan dengan program Myspace 294 00:19:00,000 --> 00:19:04,000 yang kita lakukan dalam bagian, dan cara ini bekerja 295 00:19:04,000 --> 00:19:08,000 adalah bahwa kita dilacak jumlah huruf yang kami telah melihat. 296 00:19:08,000 --> 00:19:13,000 Saat kami berjalan di atas string pesan, seperti yang kita berjalan karakter demi karakter, 297 00:19:13,000 --> 00:19:16,000 kita dilacak indeks sebagai bagian dari kami untuk loop, dan kemudian kita juga dilacak 298 00:19:16,000 --> 00:19:21,000 jumlah huruf, sehingga non-karakter khusus, non-digit, non-white space 299 00:19:21,000 --> 00:19:27,000 bahwa kami telah melihat dalam variabel yang terpisah. 300 00:19:27,000 --> 00:19:33,000 Dan kemudian solusi ini memodifikasi kunci 301 00:19:33,000 --> 00:19:41,000 untuk mendapatkan integer kunci yang sebenarnya, dan apakah itu on the fly, 302 00:19:41,000 --> 00:19:47,000 tepat sebelum kemudian pergi untuk mengenkripsi karakter pesan yang sebenarnya. 303 00:19:47,000 --> 00:19:50,000 Ada beberapa solusi yang sempurna besar juga 304 00:19:50,000 --> 00:19:58,000 yang akan memodifikasi kunci ketika pengujian validitas kunci itu. 305 00:19:58,000 --> 00:20:01,000 Selain memastikan bahwa karakter dan kata kunci 306 00:20:01,000 --> 00:20:05,000 adalah sebuah karakter alfabet itu juga berbalik yang menjadi integer 307 00:20:05,000 --> 00:20:13,000 dalam kisaran 0 sampai 25 untuk kemudian melompat harus melakukannya di kemudian hari dalam untuk loop. 308 00:20:13,000 --> 00:20:18,000 Sekali lagi, Anda lihat di sini ini benar-benar kode yang sama persis 309 00:20:18,000 --> 00:20:22,000 yang kita gunakan di Caesar pada saat ini. 310 00:20:22,000 --> 00:20:25,000 Anda melakukan hal yang sama persis, sehingga trik nyata adalah mencari tahu 311 00:20:25,000 --> 00:20:30,000 bagaimana mengubah kata kunci ke integer. 312 00:20:30,000 --> 00:20:35,000 >> Satu hal yang kita lakukan di sini yang sedikit padat 313 00:20:35,000 --> 00:20:39,000 adalah kami mengulangi kalimat ini, saya kira Anda bisa menyebutnya, 314 00:20:39,000 --> 00:20:45,000 3 terpisah kali pada baris 58,, 59, dan 61. 315 00:20:45,000 --> 00:20:52,000 Dapatkah seseorang menjelaskan apa sebenarnya ungkapan ini tidak? 316 00:20:52,000 --> 00:20:55,000 Ini mengakses karakter, seperti yang Anda katakan. 317 00:20:55,000 --> 00:20:59,000 Ya, itu [tidak terdengar] karakter dalam kata kunci, 318 00:20:59,000 --> 00:21:04,000 dan jadi jumlah huruf terlihat karena Anda hanya bergerak sepanjang 319 00:21:04,000 --> 00:21:06,000 kata kunci setelah Anda melihat surat itu, 320 00:21:06,000 --> 00:21:10,000 sehingga akan efektif melewatkan ruang dan hal-hal seperti itu. 321 00:21:10,000 --> 00:21:12,000 Ya, tepatnya. 322 00:21:12,000 --> 00:21:16,000 Dan kemudian setelah Anda melihat kosong kata kunci Anda hanya mod sehingga Anda bergerak kembali sekitar. 323 00:21:16,000 --> 00:21:18,000 Tepat. Itu penjelasan yang sempurna. 324 00:21:18,000 --> 00:21:23,000 Apa Kevin mengatakan adalah bahwa kita ingin indeks ke kata kunci. 325 00:21:23,000 --> 00:21:28,000 Kami ingin mendapatkan karakter num_letters_seen, jika Anda mau, 326 00:21:28,000 --> 00:21:32,000 tetapi jika num_letters_seen melebihi panjang kata kunci, 327 00:21:32,000 --> 00:21:37,000 cara kita kembali ke kisaran yang tepat adalah kita menggunakan operator mod 328 00:21:37,000 --> 00:21:40,000 untuk secara efektif membungkus. 329 00:21:40,000 --> 00:21:43,000 Misalnya, seperti dalam jangka pendek, kata kunci kami adalah daging, 330 00:21:43,000 --> 00:21:46,000 dan itu 5 huruf. 331 00:21:46,000 --> 00:21:50,000 Tapi kita telah melihat 6 huruf dalam teks biasa kami pada saat ini 332 00:21:50,000 --> 00:21:52,000 dan dienkripsi 6. 333 00:21:52,000 --> 00:21:57,000 Kita akan berakhir mengakses num_letters_seen tersebut, 334 00:21:57,000 --> 00:22:00,000 yang 6, mod panjang kata kunci, 5, 335 00:22:00,000 --> 00:22:04,000 dan jadi kita akan mendapatkan 1, dan jadi apa yang akan kita lakukan adalah kita akan 336 00:22:04,000 --> 00:22:14,000 mengakses dalam karakter pertama dari kata kunci kami pada saat itu. 337 00:22:14,000 --> 00:22:21,000 >> Baiklah, pertanyaan pada Vigenère 338 00:22:21,000 --> 00:22:26,000 sebelum kita lanjutkan? 339 00:22:26,000 --> 00:22:31,000 Kalian merasa cukup baik tentang hal ini? 340 00:22:31,000 --> 00:22:35,000 Keren, bagus. 341 00:22:35,000 --> 00:22:38,000 Saya ingin memastikan bahwa kalian mendapatkan kesempatan untuk melihat kode 342 00:22:38,000 --> 00:22:48,000 yang menurut kami terlihat bagus dan memiliki kesempatan untuk belajar dari itu. 343 00:22:48,000 --> 00:22:53,000 Ini akan menjadi yang terakhir kita akan menggunakan ruang untuk sementara waktu, 344 00:22:53,000 --> 00:22:59,000 dan kita akan transisi sekarang, dan aku akan pergi ke cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 sehingga kami bisa melakukan sedikit review kuis. 346 00:23:06,000 --> 00:23:10,000 Cara terbaik yang saya berpikir untuk mulai melakukan kuis tinjauan 347 00:23:10,000 --> 00:23:15,000 adalah untuk datang ke halaman ini Kuliah, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 dan di bawah masing-masing judul minggu, jadi jika saya lihat di sini di Minggu 0, 349 00:23:20,000 --> 00:23:27,000 Saya melihat bahwa kita memiliki daftar topik yang kita bahas dalam Minggu 0. 350 00:23:27,000 --> 00:23:31,000 >> Jika salah satu topik tampak asing bagi Anda 351 00:23:31,000 --> 00:23:34,000 Anda pasti ingin kembali dan menjelajahi catatan kuliah dan mungkin 352 00:23:34,000 --> 00:23:39,000 Bahkan skim melalui ceramah, melihat mereka lagi jika Anda ingin 353 00:23:39,000 --> 00:23:44,000 untuk mendapatkan merasakan apa yang terjadi dengan masing-masing topik. 354 00:23:44,000 --> 00:23:49,000 Aku akan mengatakan ini satu tahun tambahan dari sumber daya dingin yang kita punya 355 00:23:49,000 --> 00:23:55,000 inilah celana pendek yang kami buat, dan jika Anda melihat Week 0, 356 00:23:55,000 --> 00:24:00,000 kita tidak memiliki semua topik yang dibahas, tapi kami punya beberapa dari mereka, 357 00:24:00,000 --> 00:24:03,000 beberapa yang rumit, jadi menonton celana pendek ini lagi 358 00:24:03,000 --> 00:24:08,000 adalah cara yang baik untuk mendapatkan Anda sampai dengan kecepatan. 359 00:24:08,000 --> 00:24:15,000 Secara khusus, aku akan dimasukkan ke dalam sebuah plug untuk 3 di bagian bawah, karena saya melakukan itu. 360 00:24:15,000 --> 00:24:20,000 Tetapi jika Anda sedang berjuang dengan biner, bit, hex, hal semacam itu, 361 00:24:20,000 --> 00:24:22,000 biner adalah tempat yang tepat untuk memulai. 362 00:24:22,000 --> 00:24:25,000 ASCII adalah satu itu bagus untuk melihat juga. 363 00:24:25,000 --> 00:24:31,000 Anda bahkan dapat menonton saya di kecepatan 1.5x apakah aku akan terlalu lambat untuk Anda. 364 00:24:31,000 --> 00:24:35,000 Karena itu review, merasa bebas untuk melakukan itu. 365 00:24:35,000 --> 00:24:40,000 >> Hanya untuk memulai sangat cepat, kita akan pergi melalui beberapa masalah kuis 366 00:24:40,000 --> 00:24:44,000 hanya untuk cepat churn melalui. 367 00:24:44,000 --> 00:24:50,000 Sebagai contoh, mari kita lihat masalah 16 yang saya punya hak di sini di papan. 368 00:24:50,000 --> 00:24:54,000 Kami telah mendapat perhitungan berikut dalam biner, 369 00:24:54,000 --> 00:24:56,000 dan kami ingin menunjukkan pekerjaan apapun. 370 00:24:56,000 --> 00:24:59,000 Oke, aku akan memberikan suntikan ini. 371 00:24:59,000 --> 00:25:01,000 Kalian harus mengikuti bersama dengan kertas, 372 00:25:01,000 --> 00:25:04,000 dan kami akan melakukan hal ini benar-benar cepat. 373 00:25:04,000 --> 00:25:06,000 Kami ingin melakukan perhitungan berikut dalam biner. 374 00:25:06,000 --> 00:25:16,000 Aku punya 00.110.010. 375 00:25:16,000 --> 00:25:27,000 Dan aku akan menambahnya 00.110.010. 376 00:25:27,000 --> 00:25:30,000 Untuk para jenius matematika mengikuti dari awal di rumah, 377 00:25:30,000 --> 00:25:35,000 ini efektif mengalikan dengan 2. 378 00:25:35,000 --> 00:25:37,000 Mari kita mulai. 379 00:25:37,000 --> 00:25:39,000 Kita akan mengikuti algoritma penambahan yang sama yang kita lakukan 380 00:25:39,000 --> 00:25:43,000 ketika kita menambahkan angka desimal bersama-sama. 381 00:25:43,000 --> 00:25:46,000 Benar-benar satu-satunya perbedaan di sini adalah bahwa kita loop kembali sekitar 382 00:25:46,000 --> 00:25:51,000 sekali kita memiliki 1 + 1 bukan sekali kita sampai 10. 383 00:25:51,000 --> 00:25:53,000 >> Jika kita mulai dari kanan, sangat cepat, apa digit pertama? 384 00:25:53,000 --> 00:25:55,000 [Mahasiswa] 0 >> [Nate H.]. 0. 385 00:25:55,000 --> 00:25:58,000 Besar, digit kedua? 386 00:25:58,000 --> 00:26:00,000 [Siswa] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Apakah itu 1? 1 + 1 adalah? 388 00:26:02,000 --> 00:26:04,000 [Siswa] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Tepat, jadi apa adalah digit yang saya tulis tepat di bawah 2 yang ditambahkan bersama-sama? 390 00:26:08,000 --> 00:26:11,000 [Siswa] 1, 0, atau 0 dan kemudian membawa 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 dan membawa 1, tepatnya. 392 00:26:15,000 --> 00:26:18,000 Satu Selanjutnya, Basil, kau sudah bangun. 393 00:26:18,000 --> 00:26:20,000 Apa yang ketiga? >> [Basil] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, sempurna. Kevin? 395 00:26:23,000 --> 00:26:27,000 [Kevin] 0 >> [Nate H.]. 0, Charlotte? 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0 >> [Nate H.]. Ya, dan apa yang harus saya lakukan? 397 00:26:30,000 --> 00:26:32,000 [Mahasiswa] The 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] Dan apa yang harus saya lakukan? Dan kemudian saya membawa 1. 399 00:26:34,000 --> 00:26:36,000 Sempurna, Sahb >>? [Sahb] Sekarang Anda memiliki 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] Dan harus saya lakukan apa pun di sini? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Kemudian untuk yang berikutnya Anda memiliki 1 karena Anda dibawa 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] besar, jadi di sini kita bisa menyelesaikan itu. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Mahasiswa] Apakah 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, seperti yang kaukatakan, adalah 10, atau 1, 0, bukan. 407 00:27:01,000 --> 00:27:07,000 10 adalah sebuah ironi karena bagi saya 10 berarti nomor 10, 408 00:27:07,000 --> 00:27:12,000 dan itu adalah permainan kata-kata tentang bagaimana kita mewakili ketika kita sedang menulis itu. 409 00:27:12,000 --> 00:27:20,000 Kami mewakili nomor 2 dengan 1, 0, dan nomor 10 sedikit berbeda. 410 00:27:20,000 --> 00:27:23,000 >> Apa jenis yang baik tentang biner adalah bahwa benar-benar ada tidak banyak 411 00:27:23,000 --> 00:27:25,000 kasus Anda perlu belajar. 412 00:27:25,000 --> 00:27:30,000 Ada 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 adalah 0, dan kemudian membawa 1, 414 00:27:34,000 --> 00:27:37,000 dan kemudian Anda bisa lihat di sini pada kolom ketiga dari kanan 415 00:27:37,000 --> 00:27:40,000 kita punya 1, 1, dan 1. 416 00:27:40,000 --> 00:27:43,000 Dan 1 + 1 + 1 adalah 1, 417 00:27:43,000 --> 00:27:45,000 dan Anda membawa lain 1. 418 00:27:45,000 --> 00:27:48,000 Ketika Anda melakukan penambahan biner, cukup sederhana. 419 00:27:48,000 --> 00:27:51,000 Saya akan melakukan beberapa lebih dari ini untuk kewarasan memeriksa dirimu 420 00:27:51,000 --> 00:27:54,000 sebelum Anda pergi karena ini adalah 421 00:27:54,000 --> 00:28:00,000 mungkin sesuatu yang kita akan melihat pada kuis. 422 00:28:00,000 --> 00:28:03,000 Sekarang mari kita lakukan satu ini berikutnya juga. 423 00:28:03,000 --> 00:28:06,000 Mari kita mengerjakan soal 17. 424 00:28:06,000 --> 00:28:12,000 Kita akan mengkonversi bilangan biner ke desimal berikut. 425 00:28:12,000 --> 00:28:28,000 Aku punya 10100111001. 426 00:28:28,000 --> 00:28:33,000 Ingat dalam video biner yang saya lakukan 427 00:28:33,000 --> 00:28:36,000 Aku berjalan melalui beberapa contoh, dan saya menunjukkan bagaimana 428 00:28:36,000 --> 00:28:41,000 semuanya bekerja ketika Anda melakukannya dalam desimal. 429 00:28:41,000 --> 00:28:45,000 Bila Anda bekerja dalam representasi desimal Saya pikir kita 430 00:28:45,000 --> 00:28:48,000 pada titik ini dalam hidup kita begitu fasih di dalamnya yang 431 00:28:48,000 --> 00:28:53,000 itu cukup mudah untuk mengabaikan mekanisme bagaimana sebenarnya bekerja. 432 00:28:53,000 --> 00:28:59,000 >> Tapi untuk melakukan rekap cepat, jika saya memiliki nomor 137 433 00:28:59,000 --> 00:29:06,000 ini benar-benar berarti-dan sekali lagi, ini adalah dalam desimal representasi- 434 00:29:06,000 --> 00:29:19,000 angka 137 dalam desimal berarti bahwa saya memiliki 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 Ini semua tinggal di layar. 436 00:29:22,000 --> 00:29:29,000 Dan kemudian jika Anda melihat angka-angka di sini, 437 00:29:29,000 --> 00:29:34,000 100, 10 dan 1, Anda melihat bahwa mereka benar-benar semua kekuatan dari 10. 438 00:29:34,000 --> 00:29:43,000 Saya memiliki 10 ², 10 ¹, dan 10 sampai nol. 439 00:29:43,000 --> 00:29:48,000 Kami memiliki semacam hal serupa dalam biner, 440 00:29:48,000 --> 00:29:55,000 kecuali bahwa basis kami, seperti yang kita menyebutnya, adalah 2 bukan 10. 441 00:29:55,000 --> 00:29:58,000 Ini 10s yang saya tulis di sini di bagian bawah, 442 00:29:58,000 --> 00:30:02,000 ini ² 10, 10 ¹, 10 ke nol, 10 adalah basis kami, 443 00:30:02,000 --> 00:30:08,000 dan eksponen, 0, 1, atau 2, 444 00:30:08,000 --> 00:30:14,000 tersirat oleh posisi digit dalam jumlah yang kita tulis. 445 00:30:14,000 --> 00:30:21,000 1, jika kita melihatnya, ini 1 berada di posisi ke-2. 446 00:30:21,000 --> 00:30:27,000 3 berada dalam posisi 1, dan 7 yang berada di posisi 0. 447 00:30:27,000 --> 00:30:35,000 Itulah cara kita mendapatkan berbagai eksponen di bawah ini untuk basis kami. 448 00:30:35,000 --> 00:30:40,000 >> Setelah semua ini Kita akan-sebenarnya, Anda tahu apa? 449 00:30:40,000 --> 00:30:43,000 Kami akan melakukan-mana tombol undo saya pergi? 450 00:30:43,000 --> 00:30:45,000 Ada kelanjutannya. 451 00:30:45,000 --> 00:30:47,000 Saya suka ini membatalkan hal. 452 00:30:47,000 --> 00:30:51,000 Setelah ini saya berpikir saya setidaknya 453 00:30:51,000 --> 00:30:54,000 cara termudah untuk mulai mengkonversi bilangan biner 454 00:30:54,000 --> 00:30:57,000 atau nomor heksadesimal di mana dasar adalah 16 455 00:30:57,000 --> 00:31:02,000 dan bukan 10 atau 2 adalah untuk terus maju dan menulis 456 00:31:02,000 --> 00:31:09,000 dasar dan eksponen untuk semua angka dalam bilangan biner saya di atas. 457 00:31:09,000 --> 00:31:14,000 Jika kita mulai dari kiri ke kanan lagi, 458 00:31:14,000 --> 00:31:17,000 yang merupakan jenis berlawanan dengan intuisi, 459 00:31:17,000 --> 00:31:23,000 Saya akan mengubah kembali ke hitam di sini, kita memiliki 2 ke posisi 0, 460 00:31:23,000 --> 00:31:27,000 dan kemudian kita memiliki 2 ¹, ² 2, 461 00:31:27,000 --> 00:31:33,000 dan kemudian 2 ke 3, 2 ke 4, 2 ke 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9, dan 10. 463 00:31:39,000 --> 00:31:41,000 Angka-angka ini saya sudah menulis keluar adalah semua eksponen. 464 00:31:41,000 --> 00:31:48,000 Saya hanya menulis dasar di sini di 3 pertama hanya untuk ruang. 465 00:31:48,000 --> 00:31:50,000 >> Pada titik ini aku akan pergi ke depan dan aku benar-benar akan menghapus 466 00:31:50,000 --> 00:31:53,000 hal-hal yang kita lakukan dalam desimal, jika tidak apa-apa. 467 00:31:53,000 --> 00:31:57,000 Anda semua punya itu. 468 00:31:57,000 --> 00:32:05,000 Bagi Anda menonton online saya yakin akan dapat memundurkan saya jika Anda ingin. 469 00:32:05,000 --> 00:32:07,000 Beralih kembali ke pena. 470 00:32:07,000 --> 00:32:12,000 Sekarang, apa yang bisa kita lakukan-jika kalian tidak benar-benar sampai dengan kecepatan pada kekuatan Anda dari 2, 471 00:32:12,000 --> 00:32:15,000 itu benar-benar keren. 472 00:32:15,000 --> 00:32:18,000 Ini terjadi. Saya mengerti. 473 00:32:18,000 --> 00:32:23,000 Saya pernah punya pekerjaan wawancara di mana saya diberitahu bahwa saya harus tahu semua kekuatan dari 2 474 00:32:23,000 --> 00:32:26,000 up melalui 2 sampai 30 tersebut. 475 00:32:26,000 --> 00:32:29,000 Itu bukan pekerjaan aku. 476 00:32:29,000 --> 00:32:32,000 Lagi pula, kalian dapat pergi ke depan dan melakukan matematika di sini, 477 00:32:32,000 --> 00:32:35,000 tapi dengan biner tidak benar-benar masuk akal, 478 00:32:35,000 --> 00:32:38,000 dan juga tidak masuk akal dengan desimal atau heksadesimal baik, 479 00:32:38,000 --> 00:32:43,000 untuk melakukan matematika di mana Anda memiliki nol. 480 00:32:43,000 --> 00:32:49,000 Anda dapat melihat saya memiliki 0 di sini, di sini 0, 0 di sini, di sini 0, 0 di sini, di sini 0. 481 00:32:49,000 --> 00:32:52,000 Mengapa hal itu tidak masuk akal untuk melakukan matematika yang sebenarnya 482 00:32:52,000 --> 00:32:56,000 untuk menghitung kekuatan yang tepat dari 2 untuk posisi tersebut? 483 00:32:56,000 --> 00:32:59,000 Persis, seperti Charlotte mengatakan, itu akan menjadi 0. 484 00:32:59,000 --> 00:33:05,000 Mungkin juga menghemat waktu jika menghitung kekuatan dari 2 bukanlah kelebihanmu. 485 00:33:05,000 --> 00:33:10,000 Dalam hal ini kita hanya perlu menghitung untuk 2 ke 0 yang-? 486 00:33:10,000 --> 00:33:12,000 [Siswa] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 sampai 3 yang merupakan-? 488 00:33:14,000 --> 00:33:16,000 [Mahasiswa] 8 >> [Nate H.]. 8. 489 00:33:16,000 --> 00:33:18,000 2 ke 4? 490 00:33:18,000 --> 00:33:21,000 [Siswa] 2. Maafkan aku, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 sampai 4 adalah 16, tepatnya. 492 00:33:26,000 --> 00:33:28,000 2 ke 5, Kevin >> 32.? 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 ke 8? 494 00:33:32,000 --> 00:33:38,000 [Siswa] 32 x 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] Sempurna. 496 00:33:41,000 --> 00:33:43,000 Dan 2 ke 10? 497 00:33:43,000 --> 00:33:45,000 [Mahasiswa] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Ya, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Setelah kami punya angka-angka yang kita dapat menyimpulkan mereka semua. 500 00:33:57,000 --> 00:34:01,000 Dan ini adalah di mana itu benar-benar penting untuk melakukan beberapa hal. 501 00:34:01,000 --> 00:34:07,000 Salah satunya adalah pergi lambat dan memeriksa pekerjaan Anda. 502 00:34:07,000 --> 00:34:10,000 Anda dapat memberitahu bahwa ada 1 di akhir nomor ini, 503 00:34:10,000 --> 00:34:15,000 jadi saya pasti harus mendapatkan jumlah ganjil sebagai hasilnya saya, 504 00:34:15,000 --> 00:34:18,000 karena semua yang lain akan menjadi lebih nomor 505 00:34:18,000 --> 00:34:21,000 mengingat bahwa itu adalah bilangan biner. 506 00:34:21,000 --> 00:34:24,000 Hal lain yang harus dilakukan adalah jika Anda sampai ke titik ini pada tes 507 00:34:24,000 --> 00:34:27,000 dan Anda sudah menulis itu sejauh ini 508 00:34:27,000 --> 00:34:30,000 dan Anda kehabisan waktu 509 00:34:30,000 --> 00:34:33,000 melihat jumlah poin bahwa masalah ini layak. 510 00:34:33,000 --> 00:34:40,000 Masalah ini, karena Anda dapat melihat-jika saya flip kembali ke laptop saya benar-benar cepat- 511 00:34:40,000 --> 00:34:44,000 masalah ini bernilai 2 poin, jadi ini bukan jenis penambahan 512 00:34:44,000 --> 00:34:47,000 Anda harus pergi melalui jika Anda benar-benar terdesak waktu. 513 00:34:47,000 --> 00:34:52,000 Tapi kita akan beralih kembali ke iPad, dan kita akan pergi melalui itu benar-benar cepat. 514 00:34:52,000 --> 00:34:54,000 >> Saya suka melakukan sejumlah kecil pertama 515 00:34:54,000 --> 00:34:56,000 karena saya menemukan bahwa lebih mudah. 516 00:34:56,000 --> 00:35:00,000 Saya suka 32 dan 8 karena mereka pergi bersama-sama cukup mudah, dan kami mendapatkan 50. 517 00:35:00,000 --> 00:35:03,000 16 dan 1 mendapat 17. 518 00:35:03,000 --> 00:35:05,000 Di sana kami mendapatkan 57, 519 00:35:05,000 --> 00:35:14,000 dan kemudian kita bisa melakukan sisa ini, sehingga kita dapat melakukan 57, 156. 520 00:35:14,000 --> 00:35:16,000 Ayo. 521 00:35:16,000 --> 00:35:19,000 Man, baik, mari kita lihat. 522 00:35:19,000 --> 00:35:27,000 Kami memiliki 57, 256, dan 1024. 523 00:35:27,000 --> 00:35:31,000 Pada titik ini, aku lebih suka pergi melalui. 524 00:35:31,000 --> 00:35:35,000 Saya tidak tahu. Saya jelas perlu untuk membaca tentang hal ini. 525 00:35:35,000 --> 00:35:40,000 7, 6, dan 4, Anda mendapatkan 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Kemudian kita mendapatkan 3, dan kemudian kita mendapatkan 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Easter egg, siapa? 530 00:35:55,000 --> 00:35:59,000 Siapa saja mengenali nomor ini? 531 00:35:59,000 --> 00:36:02,000 Chris mengakui nomor. Apa artinya, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, jadi jika Anda melihat ini, sepertinya leet. 534 00:36:11,000 --> 00:36:15,000 Hacker hal. Watch out untuk hal semacam itu pada paruh waktu atau kuis, bukan. 535 00:36:15,000 --> 00:36:19,000 Jika Anda melihat hal semacam itu dan Anda bertanya-tanya "Huh," 536 00:36:19,000 --> 00:36:22,000 yang mungkin benar-benar berarti sesuatu. 537 00:36:22,000 --> 00:36:24,000 Saya tidak tahu. David likes menempatkan masuk 538 00:36:24,000 --> 00:36:26,000 Ini adalah cara yang baik untuk kewarasan memeriksa. 539 00:36:26,000 --> 00:36:30,000 Seperti oke, saya bisa melihat apa yang terjadi. 540 00:36:30,000 --> 00:36:34,000 >> Itulah Minggu 0/Week 1 hal. 541 00:36:34,000 --> 00:36:39,000 Jika kita beralih kembali ke laptop kami sekarang, 542 00:36:39,000 --> 00:36:46,000 zoom out, dan beberapa hal lainnya. 543 00:36:46,000 --> 00:36:50,000 Ada ASCII, yang kita sudah melakukan banyak dengan set masalah. 544 00:36:50,000 --> 00:36:55,000 Gagasan modal A. Apa yang benar-benar? 545 00:36:55,000 --> 00:36:57,000 Mengetahui itu adalah integer desimal. 546 00:36:57,000 --> 00:37:00,000 65 adalah apa itu dipetakan ke dalam tabel ASCII, 547 00:37:00,000 --> 00:37:03,000 dan itu karena itu bagaimana komputer menulis itu, 548 00:37:03,000 --> 00:37:06,000 dan itulah bagaimana kami sudah lolos dengan benar-benar menulis 549 00:37:06,000 --> 00:37:09,000 ibukota karakter A dan karakter huruf kecil yang 550 00:37:09,000 --> 00:37:14,000 dalam beberapa solusi dan set masalah yang telah Anda lakukan. 551 00:37:14,000 --> 00:37:16,000 Beberapa hal-hal lain. 552 00:37:16,000 --> 00:37:25,000 Kami punya pernyataan, ekspresi boolean, kondisi, loop, variabel dan benang. 553 00:37:25,000 --> 00:37:29,000 >> Mereka semua tampaknya masuk akal untuk sebagian besar? 554 00:37:29,000 --> 00:37:35,000 Beberapa terminologi ini sedikit funky di kali. 555 00:37:35,000 --> 00:37:46,000 Saya suka berpikir tentang pernyataan seperti untuk sesuatu yang paling bagian yang berakhir dengan titik koma. 556 00:37:46,000 --> 00:37:51,000 Laporan seperti x = 7, yang menetapkan variabel, 557 00:37:51,000 --> 00:37:54,000 mungkin disebut x = 7. 558 00:37:54,000 --> 00:38:01,000 Agaknya x adalah juga merupakan tipe yang dapat menyimpan nomor 7, 559 00:38:01,000 --> 00:38:05,000 jadi itu adalah int atau mungkin pelampung atau pendek atau char, 560 00:38:05,000 --> 00:38:07,000 sesuatu seperti itu. 561 00:38:07,000 --> 00:38:12,000 Sebuah ekspresi boolean menggunakan ganda tersebut sama 562 00:38:12,000 --> 00:38:17,000 dan bang yang sama atau tidak sama, kurang dari, lebih besar dari, 563 00:38:17,000 --> 00:38:22,000 kurang dari atau sama dengan, semua hal semacam itu. 564 00:38:22,000 --> 00:38:28,000 Kondisi itu merupakan pernyataan jika yang lain. 565 00:38:28,000 --> 00:38:32,000 Saya akan ingat bahwa Anda tidak dapat memiliki sebuah lagi tanpa sesuai jika. 566 00:38:32,000 --> 00:38:37,000 Demikian juga, Anda tidak dapat memiliki lagi jika tanpa sesuai jika. 567 00:38:37,000 --> 00:38:40,000 Loops, mengingat 3 jenis loop kita sudah memalu ke Anda 568 00:38:40,000 --> 00:38:43,000 untuk terakhir beberapa bagian dan set masalah. 569 00:38:43,000 --> 00:38:46,000 Menggunakan lakukan sementara ketika Anda mendapatkan input pengguna, 570 00:38:46,000 --> 00:38:51,000 menggunakan sementara loop sampai kondisi tertentu adalah benar, 571 00:38:51,000 --> 00:38:56,000 dan kemudian menggunakan mereka untuk loop jika Anda perlu untuk 572 00:38:56,000 --> 00:39:01,000 tahu mana iterasi dari loop Anda saat ini adalah bagaimana saya berpikir tentang hal itu. 573 00:39:01,000 --> 00:39:07,000 Atau jika Anda melakukan untuk setiap karakter dalam string saya ingin melakukan sesuatu, 574 00:39:07,000 --> 00:39:15,000 untuk setiap elemen dalam array saya ingin melakukan sesuatu untuk elemen. 575 00:39:15,000 --> 00:39:18,000 >> Threads dan acara. 576 00:39:18,000 --> 00:39:21,000 Ini kami belum tertutup sehingga secara eksplisit dalam C, 577 00:39:21,000 --> 00:39:23,000 tapi ingat ini dari Scratch. 578 00:39:23,000 --> 00:39:26,000 Ini adalah gagasan memiliki skrip yang berbeda. 579 00:39:26,000 --> 00:39:32,000 Ini juga gagasan penyiaran acara. 580 00:39:32,000 --> 00:39:37,000 Beberapa orang tidak menggunakan siaran dalam proyek-proyek mereka pada awalnya, 581 00:39:37,000 --> 00:39:40,000 yang benar-benar keren, 582 00:39:40,000 --> 00:39:46,000 tetapi ini adalah 2 cara yang berbeda untuk menangani masalah ini lebih besar disebut concurrency, 583 00:39:46,000 --> 00:39:49,000 yang adalah bagaimana Anda mendapatkan program untuk mengeksekusi 584 00:39:49,000 --> 00:39:54,000 atau tampaknya mengeksekusi pada saat yang sama? 585 00:39:54,000 --> 00:39:59,000 Tugas yang berbeda berjalan sementara tugas-tugas lainnya juga berjalan. 586 00:39:59,000 --> 00:40:01,000 Ini adalah bagaimana sistem operasi Anda tampaknya bekerja. 587 00:40:01,000 --> 00:40:04,000 Inilah sebabnya mengapa meskipun, misalnya, 588 00:40:04,000 --> 00:40:10,000 Saya sudah punya browser saya berjalan, saya juga dapat mengaktifkan Spotify dan memutar lagu. 589 00:40:10,000 --> 00:40:14,000 Itu lebih dari hal yang konseptual untuk memahami. 590 00:40:14,000 --> 00:40:17,000 Saya akan mengambil melihat pada benang pendek 591 00:40:17,000 --> 00:40:21,000 jika Anda ingin mempelajari lebih lanjut tentang hal itu. 592 00:40:21,000 --> 00:40:26,000 >> Mari kita lihat, saya percaya mungkin ada 593 00:40:26,000 --> 00:40:31,000 masalah ini di salah satu. 594 00:40:31,000 --> 00:40:35,000 Sekali lagi, saya pikir benang dan peristiwa bukan sesuatu yang akan kita bahas pada C 595 00:40:35,000 --> 00:40:41,000 hanya karena secara signifikan lebih sulit daripada di Scratch. 596 00:40:41,000 --> 00:40:44,000 Anda tidak perlu khawatir tentang hal itu ada, tapi pasti memahami konsep, 597 00:40:44,000 --> 00:40:47,000 memahami apa yang terjadi. 598 00:40:47,000 --> 00:40:52,000 Sebelum kita melanjutkan, pertanyaan pada Minggu 0 materi? 599 00:40:52,000 --> 00:40:55,000 Semua orang merasa cukup baik? 600 00:40:55,000 --> 00:41:03,000 Memahami variabel dan apa variabel? 601 00:41:03,000 --> 00:41:08,000 >> Pindah. Minggu 1. 602 00:41:08,000 --> 00:41:12,000 Beberapa hal di sini yang tidak terlalu tertutup 603 00:41:12,000 --> 00:41:21,000 dalam review kuis tentu dan juga hal yang lebih konseptual untuk memikirkan. 604 00:41:21,000 --> 00:41:30,000 Yang pertama adalah gagasan dari apa yang kode sumber, compiler dan kode objek yang. 605 00:41:30,000 --> 00:41:32,000 Siapa saja? Basil. 606 00:41:32,000 --> 00:41:37,000 Apakah kode obyek-maksudku kode sumber adalah apa yang Anda masukkan ke dalam dentang, 607 00:41:37,000 --> 00:41:42,000 dan kode objek adalah apa dentang menempatkan keluar sehingga komputer Anda dapat membaca program. 608 00:41:42,000 --> 00:41:44,000 Tepat. 609 00:41:44,000 --> 00:41:47,000 Source code adalah kode C yang Anda benar-benar mengetik. 610 00:41:47,000 --> 00:41:50,000 Kode obyek adalah apa yang Anda keluar dari dentang. 611 00:41:50,000 --> 00:41:54,000 Ini adalah 0s dan 1s dalam format biner. 612 00:41:54,000 --> 00:41:59,000 Lalu apa yang terjadi adalah ketika Anda memiliki banyak file objek, 613 00:41:59,000 --> 00:42:04,000 mengatakan Anda kompilasi sebuah proyek atau program yang menggunakan file kode sumber beberapa, 614 00:42:04,000 --> 00:42:09,000 yang oleh konvensi diberi ekstensi file c.. 615 00:42:09,000 --> 00:42:13,000 Itulah mengapa kita memiliki caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Jika Anda sedang menulis program Java Anda memberi mereka ekstensi. Java. 617 00:42:18,000 --> 00:42:24,000 Program Python memiliki ekstensi py sering.. 618 00:42:24,000 --> 00:42:26,000 >> Setelah Anda memiliki beberapa. File c, Anda kompilasi mereka. 619 00:42:26,000 --> 00:42:29,000 Clang meludah keluar semua sampah biner. 620 00:42:29,000 --> 00:42:33,000 Kemudian karena Anda hanya ingin 1 Program 621 00:42:33,000 --> 00:42:37,000 Anda memiliki link linker semua objek tersebut file bersama-sama 622 00:42:37,000 --> 00:42:40,000 ke dalam 1 file executable. 623 00:42:40,000 --> 00:42:45,000 Ini juga apa yang terjadi ketika Anda menggunakan perpustakaan CS50, misalnya. 624 00:42:45,000 --> 00:42:50,000 Perpustakaan CS50 adalah baik itu. H file header 625 00:42:50,000 --> 00:42:53,000 yang Anda baca, bahwa # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 Dan maka itu juga merupakan file biner khusus perpustakaan 627 00:42:58,000 --> 00:43:02,000 yang telah dikompilasi yang 0s dan 1s, 628 00:43:02,000 --> 00:43:08,000 dan bahwa l-bendera, jadi jika kita kembali ke Spaces kami dan kami terlihat sangat cepat 629 00:43:08,000 --> 00:43:11,000 apa yang terjadi di sini ketika kita melihat perintah dentang kami, 630 00:43:11,000 --> 00:43:15,000 apa yang kita punya ini adalah sumber file kode kami di sini. 631 00:43:15,000 --> 00:43:18,000 Ini adalah sekelompok bendera compiler. 632 00:43:18,000 --> 00:43:22,000 Dan kemudian di akhir, ini-l bendera link di 633 00:43:22,000 --> 00:43:30,000 file biner yang sebenarnya untuk 2 perpustakaan, perpustakaan CS50 dan kemudian perpustakaan matematika. 634 00:43:30,000 --> 00:43:35,000 >> Memahami setiap jenis tujuan file ' 635 00:43:35,000 --> 00:43:38,000 dalam proses kompilasi adalah sesuatu yang Anda akan ingin untuk dapat 636 00:43:38,000 --> 00:43:43,000 memberikan setidaknya gambaran tingkat tinggi. 637 00:43:43,000 --> 00:43:46,000 Source code masuk kode Obyek keluar. 638 00:43:46,000 --> 00:43:53,000 Obyek file kode link bersama-sama, dan Anda mendapatkan file, executable yang indah. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 Ini juga di mana Anda bisa mendapatkan kesalahan pada beberapa titik 641 00:43:58,000 --> 00:44:00,000 dalam proses kompilasi. 642 00:44:00,000 --> 00:44:04,000 Di sinilah, misalnya, jika Anda mengambil bendera ini menghubungkan, 643 00:44:04,000 --> 00:44:10,000 bendera CS50, dan Anda menghilangkan dalam Spasi atau ketika Anda menjalankan kode Anda, 644 00:44:10,000 --> 00:44:13,000 ini adalah di mana Anda akan mendapatkan kesalahan dalam tahap menghubungkan, 645 00:44:13,000 --> 00:44:18,000 dan linker akan berkata, "Hei, kau disebut GetString fungsi 646 00:44:18,000 --> 00:44:20,000 itu di perpustakaan CS50. " 647 00:44:20,000 --> 00:44:25,000 "Kau bilang itu di perpustakaan CS50, dan saya tidak dapat menemukan kode untuk itu." 648 00:44:25,000 --> 00:44:28,000 Itulah di mana Anda harus menghubungkan dalam, dan itu terpisah 649 00:44:28,000 --> 00:44:33,000 dari kesalahan kompilator karena compiler adalah melihat sintaks dan hal semacam itu. 650 00:44:33,000 --> 00:44:38,000 Ada baiknya untuk mengetahui apa yang terjadi ketika. 651 00:44:38,000 --> 00:44:42,000 >> Hal-hal lain untuk mengetahui tentang. 652 00:44:42,000 --> 00:44:49,000 Aku akan mengatakan Anda pasti ingin untuk melihat di singkat pada typecasting dilakukan oleh Jordan 653 00:44:49,000 --> 00:44:55,000 untuk memahami apa ints berada di bawah tenda, 654 00:44:55,000 --> 00:44:58,000 apa karakter berada di bawah tenda. 655 00:44:58,000 --> 00:45:02,000 Ketika kita berbicara tentang ASCII dan kami benar-benar melihat tabel ASCII, 656 00:45:02,000 --> 00:45:07,000 apa yang lakukan adalah memberikan kami di bawah tampilan hood 657 00:45:07,000 --> 00:45:13,000 bagaimana komputer benar-benar mewakili ibukota A dan 7 digit 658 00:45:13,000 --> 00:45:17,000 dan koma dan tanda tanya. 659 00:45:17,000 --> 00:45:20,000 Komputer juga memiliki cara khusus untuk mewakili 660 00:45:20,000 --> 00:45:23,000 nomor 7 sebagai integer. 661 00:45:23,000 --> 00:45:27,000 Ini memiliki cara khusus untuk mewakili angka 7 sebagai angka floating point, 662 00:45:27,000 --> 00:45:29,000 dan mereka sangat berbeda. 663 00:45:29,000 --> 00:45:32,000 Typecasting adalah bagaimana Anda memberitahu komputer "Hei, saya ingin Anda untuk mengkonversi 664 00:45:32,000 --> 00:45:37,000 dari satu representasi ke representasi yang lain. " 665 00:45:37,000 --> 00:45:40,000 Mengapa kita tidak melihat itu. 666 00:45:40,000 --> 00:45:44,000 >> Saya juga akan melihat di singkat pada perpustakaan dan pendek pada kompiler. 667 00:45:44,000 --> 00:45:47,000 Mereka berbicara tentang proses kompilasi, 668 00:45:47,000 --> 00:45:53,000 apa perpustakaan adalah, dan pergi selama beberapa pertanyaan yang Anda mungkin akan diminta. 669 00:45:53,000 --> 00:45:55,000 Pertanyaan pada Minggu 1 materi? 670 00:45:55,000 --> 00:46:03,000 Apakah ada topik di sini yang tampak menakutkan Anda ingin untuk menutupi? 671 00:46:03,000 --> 00:46:07,000 Saya mencoba untuk meniup melalui sebagian besar topik sebelumnya sehingga kita bisa mendapatkan 672 00:46:07,000 --> 00:46:13,000 pointer dan melakukan sedikit rekursi. 673 00:46:13,000 --> 00:46:15,000 Pikiran? 674 00:46:15,000 --> 00:46:19,000 Apa pun untuk menutupi? 675 00:46:19,000 --> 00:46:21,000 Waktu untuk beberapa cokelat mungkin? 676 00:46:21,000 --> 00:46:23,000 Kalian bekerja melalui itu. 677 00:46:23,000 --> 00:46:26,000 Aku akan terus menghirup kopi. 678 00:46:26,000 --> 00:46:31,000 Minggu 2. 679 00:46:31,000 --> 00:46:34,000 Baik panggilan, panggilan yang baik. 680 00:46:34,000 --> 00:46:38,000 Dalam Minggu 2 kami berbicara sedikit lebih banyak tentang fungsi. 681 00:46:38,000 --> 00:46:43,000 >> Pada set masalah pertama yang kita tidak benar-benar menulis fungsi sama sekali 682 00:46:43,000 --> 00:46:45,000 selain yang berfungsi? 683 00:46:45,000 --> 00:46:47,000 [Mahasiswa] Main >> Main., Tepatnya. 684 00:46:47,000 --> 00:46:51,000 Dan jadi kita telah melihat kostum berbeda yang utama memakai. 685 00:46:51,000 --> 00:46:54,000 Ada satu yang dibutuhkan tanpa argumen, 686 00:46:54,000 --> 00:46:58,000 dan kita hanya mengatakan kekosongan di antara tanda kurung, 687 00:46:58,000 --> 00:47:01,000 dan kemudian ada yang lain di mana kita ingin mengambil argumen baris perintah, 688 00:47:01,000 --> 00:47:08,000 dan seperti yang kita lihat, di situlah Anda memiliki argc int dan string array yang argv 689 00:47:08,000 --> 00:47:13,000 atau sekarang bahwa kita sudah benar-benar terkena string untuk menjadi char * bahwa itu adalah 690 00:47:13,000 --> 00:47:20,000 kita akan mulai menulis sebagai char * argv dan kemudian kurung. 691 00:47:20,000 --> 00:47:22,000 Dalam Set Soal 3, kalian melihat sekelompok fungsi, 692 00:47:22,000 --> 00:47:27,000 dan Anda menerapkan sekelompok fungsi, menggambar, mencari, berebut. 693 00:47:27,000 --> 00:47:31,000 Prototipe semuanya ditulis di sana untuk Anda. 694 00:47:31,000 --> 00:47:33,000 >> Apa yang saya ingin bicarakan di sini dengan fungsi sangat cepat 695 00:47:33,000 --> 00:47:38,000 adalah bahwa ada 3 bagian untuk mereka setiap kali Anda menulis fungsi. 696 00:47:38,000 --> 00:47:43,000 Anda harus menentukan jenis kembalinya fungsi. 697 00:47:43,000 --> 00:47:46,000 Anda harus menentukan nama untuk fungsi, dan kemudian Anda harus menentukan 698 00:47:46,000 --> 00:47:51,000 daftar argumen atau daftar parameter. 699 00:47:51,000 --> 00:47:57,000 Sebagai contoh, jika saya adalah untuk menulis fungsi untuk meringkas sekelompok bilangan bulat 700 00:47:57,000 --> 00:48:03,000 dan kemudian kembali ke saya jumlah apa yang akan menjadi tipe saya kembali 701 00:48:03,000 --> 00:48:06,000 jika saya ingin menjumlahkan bilangan bulat dan kemudian kembali jumlahnya? 702 00:48:06,000 --> 00:48:12,000 Kemudian nama fungsi. 703 00:48:12,000 --> 00:48:27,000 Jika saya pergi ke depan dan menulis di hijau, bagian ini adalah jenis kembali. 704 00:48:27,000 --> 00:48:34,000 Bagian ini adalah nama. 705 00:48:34,000 --> 00:48:40,000 Dan kemudian di antara tanda kurung 706 00:48:40,000 --> 00:48:46,000 adalah di mana saya memberikan argumen, 707 00:48:46,000 --> 00:48:56,000 sering disingkat sebagai args, kadang-kadang disebut params untuk parameter. 708 00:48:56,000 --> 00:49:00,000 Dan jika Anda memiliki satu, Anda hanya menentukan satu. 709 00:49:00,000 --> 00:49:06,000 Jika Anda memiliki beberapa Anda memisahkan masing-masing dengan koma. 710 00:49:06,000 --> 00:49:13,000 Dan untuk setiap argumen Anda memberikan 2 hal-hal yang-Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Anda harus memberikan jenis dan kemudian nama. 712 00:49:18,000 --> 00:49:21,000 Dan kemudian nama, dan nama adalah nama yang Anda akan menggunakan 713 00:49:21,000 --> 00:49:25,000 untuk merujuk pada argumen bahwa dalam fungsi penjumlahan, 714 00:49:25,000 --> 00:49:27,000 dalam fungsi yang Anda sedang menulis. 715 00:49:27,000 --> 00:49:32,000 >> Anda tidak perlu-misalnya, jika aku akan meringkas, 716 00:49:32,000 --> 00:49:41,000 mengatakan, sebuah array bilangan bulat-kita lakukan array int, 717 00:49:41,000 --> 00:49:46,000 dan aku akan memberikan diriku beberapa kurung kurawal ada- 718 00:49:46,000 --> 00:49:51,000 kemudian ketika saya melewati array ke fungsi penjumlahan 719 00:49:51,000 --> 00:49:55,000 Saya lulus di posisi pertama dari daftar argumen. 720 00:49:55,000 --> 00:49:59,000 Tapi array yang saya lulus dalam tidak harus memiliki nama arr. 721 00:49:59,000 --> 00:50:07,000 Arr akan menjadi bagaimana saya merujuk pada argumen bahwa dalam tubuh fungsi. 722 00:50:07,000 --> 00:50:10,000 Hal lain yang perlu kita mempertimbangkan, 723 00:50:10,000 --> 00:50:14,000 dan ini sedikit berbeda dari fungsi, tapi saya pikir itu poin penting, 724 00:50:14,000 --> 00:50:20,000 adalah bahwa dalam C ketika saya sedang menulis fungsi seperti ini 725 00:50:20,000 --> 00:50:29,000 bagaimana saya tahu berapa banyak elemen dalam array ini? 726 00:50:29,000 --> 00:50:31,000 Ini adalah sedikit dari pertanyaan jebakan. 727 00:50:31,000 --> 00:50:35,000 Kami berbicara tentang hal ini sedikit di bagian pekan lalu. 728 00:50:35,000 --> 00:50:40,000 Bagaimana saya tahu jumlah elemen dalam sebuah array di C? 729 00:50:40,000 --> 00:50:44,000 Apakah ada cara? 730 00:50:44,000 --> 00:50:49,000 >> Ternyata bahwa tidak ada cara untuk mengetahui. 731 00:50:49,000 --> 00:50:52,000 Anda harus lulus dalam secara terpisah. 732 00:50:52,000 --> 00:50:55,000 Ada trik yang dapat Anda lakukan 733 00:50:55,000 --> 00:51:00,000 jika Anda berada di fungsi yang sama di mana array telah dideklarasikan, 734 00:51:00,000 --> 00:51:04,000 dan Anda bekerja dengan array stack. 735 00:51:04,000 --> 00:51:06,000 Tapi itu hanya bekerja jika Anda berada di fungsi yang sama. 736 00:51:06,000 --> 00:51:09,000 Setelah Anda melewati array ke fungsi lain atau jika Anda sudah menyatakan array 737 00:51:09,000 --> 00:51:12,000 dan Anda menempatkan array di heap, Anda telah menggunakan malloc 738 00:51:12,000 --> 00:51:15,000  dan hal semacam itu, maka semua taruhan dibatalkan. 739 00:51:15,000 --> 00:51:18,000 Kemudian Anda benar-benar harus lulus sekitar 740 00:51:18,000 --> 00:51:21,000 argumen khusus atau parameter lain 741 00:51:21,000 --> 00:51:23,000 memberitahu Anda seberapa besar array. 742 00:51:23,000 --> 00:51:28,000 Dalam kasus ini, saya ingin menggunakan koma-Maafkan aku, itu akan dari layar di sini- 743 00:51:28,000 --> 00:51:32,000 dan saya akan lulus dalam argumen lain 744 00:51:32,000 --> 00:51:40,000  dan menyebutnya len int untuk panjang. 745 00:51:40,000 --> 00:51:44,000 >> Satu hal yang mungkin akan muncul pada kuis 746 00:51:44,000 --> 00:51:49,000 meminta Anda untuk menulis atau menerapkan fungsi tertentu disebut sesuatu. 747 00:51:49,000 --> 00:51:54,000 Jika kita tidak memberikan prototipe, jadi ini semuanya di sini, 748 00:51:54,000 --> 00:51:58,000 kekacauan ini disebut deklarasi fungsi atau prototipe fungsi, 749 00:51:58,000 --> 00:52:01,000 ini adalah salah satu hal pertama yang Anda akan ingin untuk memakukan jika tidak diberikan 750 00:52:01,000 --> 00:52:03,000 kepada Anda segera pada kuis. 751 00:52:03,000 --> 00:52:06,000 Trik lain yang saya pelajari adalah bahwa 752 00:52:06,000 --> 00:52:11,000 mengatakan kita lakukan memberikan prototipe untuk fungsi, dan kita katakan, "Hei, kau harus menuliskannya." 753 00:52:11,000 --> 00:52:16,000 Di dalam kurung kurawal yang Anda miliki di kuis 754 00:52:16,000 --> 00:52:20,000 jika Anda melihat bahwa ada tipe kembali dan Anda melihat bahwa jenis kembali 755 00:52:20,000 --> 00:52:25,000 adalah sesuatu yang lain dari kekosongan, yang berarti bahwa fungsi tidak kembali apa-apa, 756 00:52:25,000 --> 00:52:28,000 maka satu hal yang pasti ingin lakukan adalah menulis 757 00:52:28,000 --> 00:52:33,000 semacam pernyataan kembali di akhir fungsi. 758 00:52:33,000 --> 00:52:40,000 Kembali, dan dalam kasus ini, kami akan menempatkan kosong karena kita ingin mengisi bagian yang kosong. 759 00:52:40,000 --> 00:52:44,000 Tapi ini membuat Anda berpikir dengan cara yang benar tentang bagaimana saya akan mendekati masalah ini? 760 00:52:44,000 --> 00:52:49,000 Dan itu mengingatkan Anda Anda akan harus mengembalikan nilai 761 00:52:49,000 --> 00:52:51,000 ke pemanggil fungsi. 762 00:52:51,000 --> 00:52:54,000 >> Ya >> [Siswa]. Apakah gaya berlaku ketika kita sedang menulis kode pada kuis? 763 00:52:54,000 --> 00:52:58,000 Seperti indentasi dan hal semacam itu >> [Siswa]? Ya. 764 00:52:58,000 --> 00:53:00,000 Tidak, tidak sebanyak. 765 00:53:00,000 --> 00:53:09,000 Saya pikir banyak-ini adalah sesuatu yang kita akan mengklarifikasi pada kuis pada hari, 766 00:53:09,000 --> 00:53:15,000 tetapi biasanya khawatir tentang # mencakup dan hal semacam itu, itu semacam luar. 767 00:53:15,000 --> 00:53:17,000 [Siswa] Apakah Anda perlu untuk komentar kode tulisan tangan Anda? 768 00:53:17,000 --> 00:53:19,000 Apakah Anda perlu untuk komentar kode tulisan tangan Anda? 769 00:53:19,000 --> 00:53:24,000 Mengomentari selalu baik jika Anda khawatir tentang kredit parsial 770 00:53:24,000 --> 00:53:29,000 atau Anda ingin berkomunikasi niat Anda untuk grader tersebut. 771 00:53:29,000 --> 00:53:33,000 Tapi aku, sekali lagi, akan memperjelas pada kuis itu sendiri dan pada hari kuis, 772 00:53:33,000 --> 00:53:39,000 tapi saya tidak percaya bahwa Anda akan diminta untuk menulis komentar, no. 773 00:53:39,000 --> 00:53:42,000 Biasanya tidak, tapi itu pasti semacam hal mana 774 00:53:42,000 --> 00:53:45,000 Anda dapat berkomunikasi niat Anda, seperti "Hei, ini adalah di mana aku akan dengan itu." 775 00:53:45,000 --> 00:53:49,000 Dan kadang-kadang yang dapat membantu dengan kredit parsial. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Basil. 778 00:53:53,000 --> 00:53:56,000 [Basil] Apa perbedaan antara menyatakan, katakanlah, int lang 779 00:53:56,000 --> 00:54:03,000 dalam argumen atau parameter dibandingkan mendeklarasikan variabel dalam fungsi? 780 00:54:03,000 --> 00:54:05,000 Wow, kopi turun tenggorokan. 781 00:54:05,000 --> 00:54:07,000 [Basil] Seperti yang hal yang kita inginkan untuk dimasukkan ke dalam argumen. 782 00:54:07,000 --> 00:54:09,000 Ya, itu pertanyaan yang bagus. 783 00:54:09,000 --> 00:54:11,000 Bagaimana Anda memilih hal-hal apa yang Anda inginkan untuk dimasukkan ke dalam argumen 784 00:54:11,000 --> 00:54:17,000 versus apa hal yang harus Anda lakukan dalam fungsi? 785 00:54:17,000 --> 00:54:24,000 Dalam hal ini kita termasuk kedua sebagai argumen 786 00:54:24,000 --> 00:54:29,000 karena mereka sesuatu yang siapa pun yang akan menggunakan fungsi penjumlahan 787 00:54:29,000 --> 00:54:32,000 perlu untuk menentukan hal-hal. 788 00:54:32,000 --> 00:54:35,000 >> Fungsi penjumlahan, seperti kita bicarakan, tidak memiliki cara untuk mengetahui 789 00:54:35,000 --> 00:54:40,000 seberapa besar array itu mendapat dari pemanggil atau siapa pun yang menggunakan fungsi penjumlahan. 790 00:54:40,000 --> 00:54:44,000 Ia tidak memiliki cara untuk mengetahui seberapa besar array yang. 791 00:54:44,000 --> 00:54:48,000 Alasan kami melewati panjang ini di sini sebagai argumen 792 00:54:48,000 --> 00:54:51,000 karena itu adalah sesuatu yang kita pada dasarnya memberitahu pemanggil fungsi, 793 00:54:51,000 --> 00:54:55,000 siapa pun yang akan menggunakan fungsi penjumlahan, "Hei, tidak hanya Anda harus memberikan kami sebuah array 794 00:54:55,000 --> 00:54:59,000 ints, Anda juga harus memberitahu kita seberapa besar array yang Anda telah diberikan kepada kita adalah. " 795 00:54:59,000 --> 00:55:03,000 [Basil] Mereka keduanya akan perintah argumen baris? 796 00:55:03,000 --> 00:55:06,000 Tidak, ini adalah argumen aktual yang Anda akan melewati ke fungsi. 797 00:55:06,000 --> 00:55:10,000 >> Biarkan aku melakukan sebuah halaman baru di sini. 798 00:55:10,000 --> 00:55:13,000 [Basil] Seperti nama akan berlalu- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Jika saya memiliki int main (void), 800 00:55:24,000 --> 00:55:27,000 dan aku akan dimasukkan ke dalam 0 saya kembali ke sini di bagian bawah, 801 00:55:27,000 --> 00:55:31,000 dan mengatakan saya ingin memanggil fungsi sum. 802 00:55:31,000 --> 00:55:42,000 Saya ingin mengatakan int x = sum (); 803 00:55:42,000 --> 00:55:46,000 Untuk menggunakan fungsi penjumlahan saya harus lulus di kedua array yang saya ingin meringkas 804 00:55:46,000 --> 00:55:51,000 dan panjang dari array, jadi ini adalah di mana 805 00:55:51,000 --> 00:55:54,000 asumsi saya memiliki sebuah array int, 806 00:55:54,000 --> 00:56:12,000 bilang aku punya int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 jenis penggunaan yang hacked sampai sintaks di sana, 808 00:56:16,000 --> 00:56:21,000 maka apa yang akan saya lakukan adalah dalam jumlah Saya ingin lulus dalam 809 00:56:21,000 --> 00:56:27,000 baik numbaz dan nomor 3 810 00:56:27,000 --> 00:56:30,000 untuk memberitahu fungsi sum "Oke, inilah array saya ingin Anda untuk jumlah." 811 00:56:30,000 --> 00:56:34,000 "Ini ukurannya." 812 00:56:34,000 --> 00:56:39,000 Apakah itu masuk akal? Apakah itu menjawab pertanyaan Anda? 813 00:56:39,000 --> 00:56:42,000 >> Dalam banyak hal tidak paralel apa yang kita lakukan dengan utama 814 00:56:42,000 --> 00:56:44,000 ketika kita memiliki argumen pada baris perintah. 815 00:56:44,000 --> 00:56:47,000 Sebuah program seperti Caesar cipher, misalnya, yang membutuhkan 816 00:56:47,000 --> 00:56:53,000 argumen baris perintah tidak akan mampu berbuat apa-apa. 817 00:56:53,000 --> 00:56:57,000 Ini tidak akan tahu bagaimana untuk mengenkripsi jika Anda tidak mengatakan itu apa kunci untuk menggunakan 818 00:56:57,000 --> 00:57:03,000 atau jika Anda tidak tahu itu apa string yang Anda inginkan untuk mengenkripsi. 819 00:57:03,000 --> 00:57:08,000 Disuruh untuk masukan, ini adalah di mana kita punya 2 mekanisme yang berbeda 820 00:57:08,000 --> 00:57:14,000 untuk mengambil masukan dalam dari pengguna, untuk mengambil informasi dari pengguna. 821 00:57:14,000 --> 00:57:19,000 Untuk Soal Set 1 kita melihat GetInt ini, GetString, cara GetFloat 822 00:57:19,000 --> 00:57:26,000 dari disuruh untuk masukan, dan itu disebut dengan menggunakan masukan standar. 823 00:57:26,000 --> 00:57:28,000 Ini sedikit berbeda. 824 00:57:28,000 --> 00:57:31,000 Ini adalah sesuatu yang dapat Anda lakukan pada satu waktu sebagai lawan 825 00:57:31,000 --> 00:57:35,000 ketika Anda menjalankan program, ketika Anda memulai program berjalan. 826 00:57:35,000 --> 00:57:41,000 Argumen pada baris perintah semua ditentukan ketika Anda memulai menjalankan program. 827 00:57:41,000 --> 00:57:47,000 Kami telah mencampur dua dari mereka. 828 00:57:47,000 --> 00:57:52,000 Ketika kita menggunakan argumen ke fungsi, itu mirip argumen baris perintah untuk main. 829 00:57:52,000 --> 00:57:56,000 Justru ketika Anda memanggil fungsi yang Anda butuhkan untuk menceritakannya 830 00:57:56,000 --> 00:58:05,000 apa sebenarnya yang dibutuhkan untuk melakukan tugasnya. 831 00:58:05,000 --> 00:58:08,000 Satu hal yang baik untuk melihat-dan aku akan membiarkan Anda melihat itu di waktu luang Anda, 832 00:58:08,000 --> 00:58:11,000 dan itu telah dibahas dalam kuis-adalah gagasan dari lingkup 833 00:58:11,000 --> 00:58:15,000 dan variabel lokal versus variabel global. 834 00:58:15,000 --> 00:58:18,000 Apakah memperhatikan itu. 835 00:58:18,000 --> 00:58:23,000 >> Sekarang kita sudah ke ini hal-hal lain, 836 00:58:23,000 --> 00:58:27,000 dalam Minggu 3 kami mulai berbicara tentang pencarian dan menyortir. 837 00:58:27,000 --> 00:58:32,000 Pencarian dan menyortir, setidaknya pada CS50, 838 00:58:32,000 --> 00:58:39,000 sangat banyak pengenalan beberapa bagian yang lebih teoritis ilmu komputer. 839 00:58:39,000 --> 00:58:42,000 Masalah pencarian, masalah pemilahan 840 00:58:42,000 --> 00:58:46,000 besar, masalah kanonik. 841 00:58:46,000 --> 00:58:52,000 Bagaimana Anda menemukan nomor tertentu dalam array miliaran bilangan bulat? 842 00:58:52,000 --> 00:58:55,000 Bagaimana Anda menemukan nama tertentu di dalam buku telepon 843 00:58:55,000 --> 00:58:59,000 yang tersimpan di laptop Anda? 844 00:58:59,000 --> 00:59:04,000 Dan jadi kami memperkenalkan gagasan kali run asimtotik 845 00:59:04,000 --> 00:59:11,000 untuk benar-benar menghitung berapa lama, seberapa keras masalah ini adalah, 846 00:59:11,000 --> 00:59:14,000 berapa lama mereka ambil untuk memecahkan. 847 00:59:14,000 --> 00:59:20,000 Dalam, saya percaya, kuis, 2011 ada masalah yang saya pikir manfaat 848 00:59:20,000 --> 00:59:27,000 meliputi sangat cepat, yang merupakan satu ini, masalah 12. 849 00:59:27,000 --> 00:59:32,000 O tidak, itu Omega. 850 00:59:32,000 --> 00:59:41,000 >> Di sini kita berbicara tentang waktu berjalan tercepat mungkin 851 00:59:41,000 --> 00:59:46,000 untuk algoritma tertentu dan kemudian run time paling lambat mungkin. 852 00:59:46,000 --> 00:59:52,000 Ini Omega dan O adalah benar-benar hanya jalan pintas. 853 00:59:52,000 --> 00:59:55,000 Mereka pintas notasi untuk mengatakan 854 00:59:55,000 --> 00:59:59,000 seberapa cepat dalam kasus terbaik akan kami algoritma run, 855 00:59:59,000 --> 01:00:06,000 dan bagaimana lambat dalam kasus terburuk yang mungkin akan algoritma kita jalankan? 856 01:00:06,000 --> 01:00:10,000 Mari kita lakukan beberapa ini, dan ini juga dibahas 857 01:00:10,000 --> 01:00:13,000 dalam jangka pendek pada notasi asimtotik, yang saya sangat menyarankan. 858 01:00:13,000 --> 01:00:17,000 Jackson melakukan pekerjaan yang benar-benar baik. 859 01:00:17,000 --> 01:00:23,000 Dengan pencarian biner, kita berbicara tentang pencarian biner sebagai algoritma, 860 01:00:23,000 --> 01:00:28,000 dan biasanya kita berbicara tentang hal itu dalam hal yang big O. 861 01:00:28,000 --> 01:00:30,000 Apa O besar? 862 01:00:30,000 --> 01:00:34,000 Apa waktu berjalan lambat mungkin pencarian biner? 863 01:00:34,000 --> 01:00:36,000 [Mahasiswa] N ²? 864 01:00:36,000 --> 01:00:41,000 Dekat, saya kira mirip dengan itu. 865 01:00:41,000 --> 01:00:43,000 Ini jauh lebih cepat dari itu. 866 01:00:43,000 --> 01:00:45,000 [Mahasiswa] Binary >> Ya?, Pencarian biner. 867 01:00:45,000 --> 01:00:47,000 [Siswa] Ini log n. 868 01:00:47,000 --> 01:00:49,000 Log n, sehingga apa log n artinya? 869 01:00:49,000 --> 01:00:51,000 Hal itu membagi setiap iterasi. 870 01:00:51,000 --> 01:00:56,000 Tepat, sehingga dalam kasus paling lambat mungkin, 871 01:00:56,000 --> 01:01:00,000 mengatakan jika Anda memiliki array diurutkan 872 01:01:00,000 --> 01:01:08,000 dari satu juta bilangan bulat dan nomor yang Anda cari 873 01:01:08,000 --> 01:01:14,000 adalah salah elemen pertama dalam array atau elemen yang terakhir dalam array. 874 01:01:14,000 --> 01:01:18,000 Ingat, algoritma pencarian biner bekerja dengan melihat elemen tengah, 875 01:01:18,000 --> 01:01:21,000 melihat jika itu adalah pertandingan yang Anda cari. 876 01:01:21,000 --> 01:01:23,000 Jika ya, maka besar, Anda menemukannya. 877 01:01:23,000 --> 01:01:27,000 >> Dalam kasus terbaik, seberapa cepat tidak menjalankan pencarian biner? 878 01:01:27,000 --> 01:01:29,000 [Siswa] 1. 879 01:01:29,000 --> 01:01:32,000 1, saatnya konstan, big O dari 1. Ya. 880 01:01:32,000 --> 01:01:36,000 [Mahasiswa] Saya punya pertanyaan. Ketika Anda mengatakan log n, yang Anda maksud sehubungan dengan basis 2, kan? 881 01:01:36,000 --> 01:01:40,000 Ya, jadi itu hal lain. 882 01:01:40,000 --> 01:01:44,000 Kita mengatakan n log, dan saya kira ketika saya masih di SMA 883 01:01:44,000 --> 01:01:48,000 Saya selalu beranggapan bahwa log adalah basis 10. 884 01:01:48,000 --> 01:01:57,000 Ya, jadi ya, log 2 dasar biasanya adalah apa yang kita gunakan. 885 01:01:57,000 --> 01:02:02,000 Sekali lagi, akan kembali ke pencarian biner, jika Anda sedang mencari baik 886 01:02:02,000 --> 01:02:05,000 elemen di akhir atau elemen di awal, 887 01:02:05,000 --> 01:02:08,000 karena Anda mulai di tengah dan kemudian Anda membuang 888 01:02:08,000 --> 01:02:13,000 mana setengah tidak memenuhi kriteria yang Anda cari, 889 01:02:13,000 --> 01:02:15,000 dan Anda pergi ke babak berikutnya dan berikutnya setengah dan setengah berikutnya. 890 01:02:15,000 --> 01:02:19,000 Jika saya mencari elemen terbesar dalam array integer juta 891 01:02:19,000 --> 01:02:25,000 Aku akan membagi dua itu di log sebagian dari 1 juta kali 892 01:02:25,000 --> 01:02:28,000 sebelum saya akhirnya menguji dan melihat bahwa elemen saya cari 893 01:02:28,000 --> 01:02:33,000 adalah yang terbesar atau dalam indeks tertinggi array, 894 01:02:33,000 --> 01:02:38,000 dan yang akan mengambil log n, log dari 1 juta kali. 895 01:02:38,000 --> 01:02:40,000 >> Bubble sort. 896 01:02:40,000 --> 01:02:43,000 Apakah kalian ingat algoritma bubble sort? 897 01:02:43,000 --> 01:02:47,000 Kevin, bisa Anda memberi saya rekap cepat dari apa yang terjadi dalam algoritma bubble sort? 898 01:02:47,000 --> 01:02:50,000 [Kevin] Pada dasarnya ia pergi melalui segala sesuatu dalam daftar. 899 01:02:50,000 --> 01:02:52,000 Ini terlihat pada dua yang pertama. 900 01:02:52,000 --> 01:02:55,000 Jika yang pertama adalah lebih besar dari yang kedua itu swap mereka. 901 01:02:55,000 --> 01:02:58,000 Kemudian membandingkan kedua dan ketiga, hal yang sama, swap, 902 01:02:58,000 --> 01:03:00,000 ketiga dan keempat, semua jalan ke bawah. 903 01:03:00,000 --> 01:03:03,000 Angka yang lebih besar akan menindaklanjuti sampai akhir. 904 01:03:03,000 --> 01:03:07,000 Dan setelah loop namun banyak Anda sudah selesai. 905 01:03:07,000 --> 01:03:11,000 Tepat, jadi apa Kevin mengatakan adalah bahwa kita akan melihat angka yang lebih besar 906 01:03:11,000 --> 01:03:15,000 gelembung sampai akhir array. 907 01:03:15,000 --> 01:03:19,000 Misalnya, apakah Anda keberatan berjalan kita melalui contoh ini jika ini adalah array kita? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Anda akan mengambil 2 dan 3. 909 01:03:21,000 --> 01:03:23,000 3 lebih besar dari 2, sehingga Anda swap mereka. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Benar, jadi kita tukar ini, sehingga kita mendapatkan 2, 3, 6, 4, dan 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Kemudian Anda membandingkan 3 dan 6. 912 01:03:31,000 --> 01:03:33,000 3 lebih kecil dari 6, sehingga Anda meninggalkan mereka, 913 01:03:33,000 --> 01:03:37,000 dan 6 dan 4, Anda akan swap mereka karena 4 lebih kecil dari 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Benar, jadi saya mendapatkan 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] Dan 9 lebih besar dari 6, sehingga Anda meninggalkannya. 916 01:03:46,000 --> 01:03:48,000 Dan Anda akan kembali melalui itu lagi. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Apakah saya lakukan pada saat ini? >> [Kevin] No 918 01:03:50,000 --> 01:03:52,000 Dan kenapa aku tidak dilakukan pada saat ini? 919 01:03:52,000 --> 01:03:54,000 Karena terlihat seperti array saya diurutkan. Aku sedang melihat itu. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Pergi melalui itu lagi dan pastikan bahwa ada swap tidak lebih 921 01:03:57,000 --> 01:04:00,000 sebelum Anda benar-benar bisa berhenti. 922 01:04:00,000 --> 01:04:04,000 Tepat, sehingga Anda perlu untuk terus berjalan melalui dan pastikan bahwa tidak ada swap 923 01:04:04,000 --> 01:04:06,000 bahwa Anda dapat membuat pada saat ini. 924 01:04:06,000 --> 01:04:08,000 Itu benar-benar hanya beruntung, seperti yang Anda katakan, bahwa kita berakhir 925 01:04:08,000 --> 01:04:12,000 hanya harus membuat 1 melewati dan kami diurutkan. 926 01:04:12,000 --> 01:04:16,000 Tetapi untuk melakukan hal ini dalam kasus umum kita benar-benar harus melakukan hal ini berulang-ulang. 927 01:04:16,000 --> 01:04:20,000 Dan pada kenyataannya, ini adalah contoh kasus terbaik, 928 01:04:20,000 --> 01:04:24,000 seperti kita lihat dalam masalah. 929 01:04:24,000 --> 01:04:28,000 Kami melihat bahwa kasus terbaik mungkin adalah n. 930 01:04:28,000 --> 01:04:32,000 Kami pergi melalui waktu 1 array. 931 01:04:32,000 --> 01:04:35,000 Apa kasus terburuk mungkin untuk algoritma ini? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 Dan apa tampilan yang seperti? Apa yang akan tampilan array seperti itu akan memakan waktu ² n? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [tak terdengar] diurutkan. 935 01:04:43,000 --> 01:04:51,000 Tepat, jadi jika saya memiliki array 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 pertama 9 akan gelembung sepanjang jalan sampai. 937 01:04:54,000 --> 01:04:59,000 Setelah 1 iterasi kita akan memiliki 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Kemudian 7 yang akan meluap, 6, 5, 2, 7, 9, dan seterusnya dan sebagainya. 939 01:05:07,000 --> 01:05:13,000 >> Kita harus pergi melalui seluruh array n kali, 940 01:05:13,000 --> 01:05:16,000 dan Anda benar-benar bisa mendapatkan sedikit lebih tepat daripada ini 941 01:05:16,000 --> 01:05:23,000 karena sekali kita sudah pindah 9 sepanjang jalan sampai ke posisi terakhir yang mungkin 942 01:05:23,000 --> 01:05:26,000 kita tahu bahwa kita tidak perlu membandingkan terhadap unsur itu lagi. 943 01:05:26,000 --> 01:05:29,000 Setelah kita mulai menggelegak dalam 7 sampai 944 01:05:29,000 --> 01:05:35,000 kita tahu bahwa kita bisa berhenti setelah 7 tepat sebelum 9 945 01:05:35,000 --> 01:05:37,000 karena kita sudah membandingkan 9 untuk itu. 946 01:05:37,000 --> 01:05:46,000 Jika Anda melakukan ini dengan cara yang cerdas itu tidak benar-benar, saya kira, itu banyak waktu. 947 01:05:46,000 --> 01:05:49,000 Kau tidak akan membandingkan semua kemungkinan [tak terdengar] kombinasi 948 01:05:49,000 --> 01:05:55,000 setiap kali Anda pergi melalui setiap iterasi. 949 01:05:55,000 --> 01:05:59,000 Tapi tetap saja, ketika kita berbicara tentang hal ini batas atas kita mengatakan bahwa 950 01:05:59,000 --> 01:06:04,000 Anda mencari pada n ² perbandingan semua jalan melalui. 951 01:06:04,000 --> 01:06:12,000 >> Mari kita kembali, dan karena kita mulai mendapatkan sedikit pendek pada waktu 952 01:06:12,000 --> 01:06:15,000 Aku akan mengatakan Anda pasti harus pergi melalui sisa dari tabel ini, 953 01:06:15,000 --> 01:06:17,000 mengisi semuanya. 954 01:06:17,000 --> 01:06:20,000 Pikirkan contoh. Pikirkan contoh-contoh kongkrit. 955 01:06:20,000 --> 01:06:22,000 Itu benar-benar berguna dan bermanfaat yang dapat dilakukan. 956 01:06:22,000 --> 01:06:25,000 Menariknya keluar. 957 01:06:25,000 --> 01:06:28,000 Ini adalah semacam tabel bahwa ketika Anda pergi melalui dalam ilmu komputer 958 01:06:28,000 --> 01:06:32,000 Anda benar-benar harus mulai mengetahui ini jantung oleh. 959 01:06:32,000 --> 01:06:34,000 Ini adalah jenis pertanyaan yang Anda dapatkan dalam wawancara. 960 01:06:34,000 --> 01:06:36,000 Ini adalah macam hal yang baik untuk mengetahui, 961 01:06:36,000 --> 01:06:41,000 dan berpikir tentang orang-kasus tepi, benar-benar mencari tahu bagaimana berpikir tentang 962 01:06:41,000 --> 01:06:45,000 mengetahui bahwa untuk gelembung mengurutkan array kemungkinan terburuk 963 01:06:45,000 --> 01:06:52,000 untuk mengurutkan dengan itu adalah salah satu yang ada di urutan terbalik. 964 01:06:52,000 --> 01:06:58,000 >> Pointer. Mari kita bicara sedikit tentang pointer. 965 01:06:58,000 --> 01:07:03,000 Dalam beberapa menit terakhir kita miliki di sini 966 01:07:03,000 --> 01:07:11,000 Saya tahu ini adalah sesuatu bersama dengan file I / O yang agak baru. 967 01:07:11,000 --> 01:07:19,000 Ketika kita berbicara tentang pointer alasan kami ingin berbicara tentang pointer 968 01:07:19,000 --> 01:07:24,000 karena, satu, ketika kita sedang bekerja di C 969 01:07:24,000 --> 01:07:33,000 kita benar-benar pada tingkat yang cukup rendah dibandingkan dengan bahasa pemrograman yang paling modern. 970 01:07:33,000 --> 01:07:38,000 Kami sebenarnya mampu memanipulasi variabel dalam memori, 971 01:07:38,000 --> 01:07:43,000 mencari tahu di mana mereka benar-benar terletak di dalam RAM kita. 972 01:07:43,000 --> 01:07:46,000 Setelah Anda pergi untuk mengambil kelas sistem operasi Anda akan melihat 973 01:07:46,000 --> 01:07:48,000 bahwa itu, sekali lagi, jenis abstraksi. 974 01:07:48,000 --> 01:07:50,000 Itu tidak benar-benar terjadi. 975 01:07:50,000 --> 01:07:52,000 Kami punya memori virtual yang menyembunyikan detail-detail dari kami. 976 01:07:52,000 --> 01:07:58,000 >> Tapi untuk sekarang Anda dapat berasumsi bahwa ketika Anda memiliki program, 977 01:07:58,000 --> 01:08:02,000 Misalnya, ketika Anda mulai menjalankan program anda-cipher Caesar 978 01:08:02,000 --> 01:08:06,000 Aku akan beralih kembali ke iPad saya benar-benar cepat- 979 01:08:06,000 --> 01:08:12,000 bahwa pada program anda sangat awal, jika Anda memiliki, katakanlah, 980 01:08:12,000 --> 01:08:15,000 4 gigabyte RAM pada laptop Anda, 981 01:08:15,000 --> 01:08:21,000 Anda bisa menyisihkan chunk ini, dan kami akan menelepon RAM ini. 982 01:08:21,000 --> 01:08:25,000 Dan itu dimulai di tempat yang kita akan menelepon 0, 983 01:08:25,000 --> 01:08:30,000 dan berakhir di tempat yang kita akan menelepon 4 gigabyte. 984 01:08:30,000 --> 01:08:37,000 Aku benar-benar tidak bisa menulis. Man, yang hacked. 985 01:08:37,000 --> 01:08:40,000 Ketika program Anda mengeksekusi 986 01:08:40,000 --> 01:08:44,000 sistem operasi mengukir RAM, 987 01:08:44,000 --> 01:08:51,000 dan menentukan segmen yang berbeda untuk bagian yang berbeda dari program Anda untuk hidup masuk 988 01:08:51,000 --> 01:08:58,000 Di sini daerah ini adalah jenis tanah tak bertuan. 989 01:08:58,000 --> 01:09:02,000 Ketika Anda naik sedikit lebih jauh di sini 990 01:09:02,000 --> 01:09:05,000 Anda punya benar-benar tempat di mana 991 01:09:05,000 --> 01:09:09,000 kode untuk hidup program anda. 992 01:09:09,000 --> 01:09:13,000 Itu kode biner yang sebenarnya, bahwa file executable sebenarnya akan dimuat ke memori 993 01:09:13,000 --> 01:09:17,000 ketika Anda menjalankan sebuah program, dan tinggal di segmen kode. 994 01:09:17,000 --> 01:09:22,000 Dan sebagai program Anda mengeksekusi prosesor terlihat pada segmen kode 995 01:09:22,000 --> 01:09:24,000 untuk mencari tahu apa adalah instruksi berikutnya? 996 01:09:24,000 --> 01:09:27,000 Apa baris berikutnya kode saya perlu untuk mengeksekusi? 997 01:09:27,000 --> 01:09:31,000 >> Ada juga segmen data, dan ini adalah di mana mereka konstanta string 998 01:09:31,000 --> 01:09:34,000 bisa disimpan bahwa Anda telah menggunakan. 999 01:09:34,000 --> 01:09:42,000 Dan kemudian lebih jauh sampai ada tempat ini disebut heap. 1000 01:09:42,000 --> 01:09:46,000 Kami mengakses memori di sana dengan menggunakan malloc, 1001 01:09:46,000 --> 01:09:49,000 dan kemudian menuju bagian paling atas program anda 1002 01:09:49,000 --> 01:09:52,000 ada stack, 1003 01:09:52,000 --> 01:09:57,000 dan itulah di mana kami telah bermain untuk sebagian besar awal. 1004 01:09:57,000 --> 01:09:59,000 Ini bukan untuk skala atau apapun. 1005 01:09:59,000 --> 01:10:03,000 Banyak hal seperti ini sangat tergantung mesin, 1006 01:10:03,000 --> 01:10:10,000 sistem operasi bergantung, tapi ini relatif bagaimana hal-hal bisa chunked up. 1007 01:10:10,000 --> 01:10:17,000 Ketika Anda menjalankan program dan Anda mendeklarasikan sebuah variabel yang disebut x- 1008 01:10:17,000 --> 01:10:27,000 Aku akan menarik kotak lain di bawah, dan ini akan menjadi RAM juga. 1009 01:10:27,000 --> 01:10:29,000 Dan aku akan terlihat. 1010 01:10:29,000 --> 01:10:34,000 Kami akan menarik garis bergerigi untuk menunjukkan ini hanyalah bagian kecil dari RAM 1011 01:10:34,000 --> 01:10:38,000 dan tidak semuanya seperti yang kita menarik di bagian atas. 1012 01:10:38,000 --> 01:10:43,000 >> Jika saya mendeklarasikan variabel integer disebut x, 1013 01:10:43,000 --> 01:10:49,000 maka apa yang saya benar-benar mendapatkan adalah pemetaan 1014 01:10:49,000 --> 01:10:54,000 yang disimpan dalam tabel simbol program saya 1015 01:10:54,000 --> 01:11:00,000 yang menghubungkan x nama untuk daerah ini memori yang saya sudah ditarik 1016 01:11:00,000 --> 01:11:03,000 di sini antara bar vertikal. 1017 01:11:03,000 --> 01:11:08,000 Jika saya memiliki baris kode dalam program saya yang mengatakan x = 7 1018 01:11:08,000 --> 01:11:15,000 prosesor tahu "Oh, oke, aku tahu bahwa x hidup di lokasi ini di memori." 1019 01:11:15,000 --> 01:11:25,000 "Aku akan pergi ke depan dan menulis 7 di sana." 1020 01:11:25,000 --> 01:11:28,000 Bagaimana tahu apa lokasi ini di memori? 1021 01:11:28,000 --> 01:11:30,000 Nah, itu semua dilakukan pada waktu kompilasi. 1022 01:11:30,000 --> 01:11:34,000 Compiler mengurus mengalokasikan mana masing-masing variabel yang akan pergi 1023 01:11:34,000 --> 01:11:40,000 dan menciptakan pemetaan khusus atau lebih tepatnya menghubungkan titik-titik 1024 01:11:40,000 --> 01:11:43,000 antara simbol dan di mana itu akan, nama variabel 1025 01:11:43,000 --> 01:11:46,000 dan di mana itu akan hidup dalam memori. 1026 01:11:46,000 --> 01:11:50,000 Tapi ternyata bahwa kita benar-benar dapat mengaksesnya dalam program kami juga. 1027 01:11:50,000 --> 01:11:55,000 Ini akan penting ketika kita mulai berbicara tentang beberapa struktur data, 1028 01:11:55,000 --> 01:11:58,000 yang merupakan konsep yang kita akan memperkenalkan nanti. 1029 01:11:58,000 --> 01:12:09,000 >> Tapi untuk saat ini, apa yang dapat Anda ketahui adalah bahwa saya dapat membuat pointer ke lokasi ini, x. 1030 01:12:09,000 --> 01:12:12,000 Sebagai contoh, saya bisa membuat sebuah variabel pointer. 1031 01:12:12,000 --> 01:12:16,000 Ketika kita membuat sebuah variabel pointer kita menggunakan notasi bintang. 1032 01:12:16,000 --> 01:12:21,000 Dalam kasus ini, ini mengatakan aku akan membuat pointer ke int. 1033 01:12:21,000 --> 01:12:24,000 Ini adalah jenis sama seperti yang lain. 1034 01:12:24,000 --> 01:12:27,000 Kami memberikan variabel seperti y, 1035 01:12:27,000 --> 01:12:32,000 dan kemudian kita mengatur itu sama dengan alamat, ke alamat. 1036 01:12:32,000 --> 01:12:38,000 Dalam kasus ini, kita dapat mengatur y untuk menunjuk ke x 1037 01:12:38,000 --> 01:12:43,000 dengan mengambil alamat dari x, yang kita lakukan dengan ampersand ini, 1038 01:12:43,000 --> 01:12:55,000 dan kemudian kita menetapkan y untuk menunjuk ke itu. 1039 01:12:55,000 --> 01:12:59,000 Apa ini pada dasarnya tidak adalah jika kita melihat RAM kami 1040 01:12:59,000 --> 01:13:02,000 ini menciptakan sebuah variabel yang terpisah. 1041 01:13:02,000 --> 01:13:04,000 Ini akan menyebutnya y, 1042 01:13:04,000 --> 01:13:06,000 dan ketika baris kode mengeksekusi 1043 01:13:06,000 --> 01:13:13,000 itu benar-benar akan membuat pointer kecil yang kita biasanya menarik sebagai panah, 1044 01:13:13,000 --> 01:13:15,000 dan set y untuk menunjuk ke x. 1045 01:13:15,000 --> 01:13:17,000 Ya. 1046 01:13:17,000 --> 01:13:19,000 [Mahasiswa] Jika x sudah pointer, akan Anda lakukan 1047 01:13:19,000 --> 01:13:22,000 int * y = x daripada harus ampersand? 1048 01:13:22,000 --> 01:13:24,000 Ya. 1049 01:13:24,000 --> 01:13:27,000 Jika x sudah pointer, maka Anda dapat mengatur 2 pointer sama satu sama lain, 1050 01:13:27,000 --> 01:13:30,000 dalam hal ini y tidak akan menunjuk ke x, 1051 01:13:30,000 --> 01:13:34,000 tetapi akan menunjukkan apa x menunjuk ke. 1052 01:13:34,000 --> 01:13:37,000 Sayangnya, kami kehabisan waktu. 1053 01:13:37,000 --> 01:13:44,000 >> Apa yang akan saya katakan pada saat ini, kita bisa bicara tentang ini secara offline, 1054 01:13:44,000 --> 01:13:49,000 tapi aku akan mengatakan mulai bekerja melalui masalah ini, # 14. 1055 01:13:49,000 --> 01:13:53,000 Anda dapat melihat sudah ada sedikit diisi untuk Anda di sini. 1056 01:13:53,000 --> 01:13:57,000 Anda dapat melihat bahwa ketika kita mendeklarasikan 2 pointer, int * x dan y *, 1057 01:13:57,000 --> 01:14:01,000 dan perhatikan bahwa menunjuk * samping variabel adalah sesuatu yang dilakukan tahun lalu. 1058 01:14:01,000 --> 01:14:05,000 Ternyata bahwa ini mirip dengan apa yang kita lakukan tahun ini. 1059 01:14:05,000 --> 01:14:11,000 Tidak peduli di mana Anda menulis * ketika Anda menyatakan pointer. 1060 01:14:11,000 --> 01:14:17,000 Tapi kami telah menulis * samping jenis 1061 01:14:17,000 --> 01:14:24,000 karena yang membuatnya sangat jelas bahwa Anda mendeklarasikan variabel pointer. 1062 01:14:24,000 --> 01:14:27,000 Anda dapat melihat bahwa mendeklarasikan 2 pointer memberi kita 2 kotak. 1063 01:14:27,000 --> 01:14:31,000 Di sini ketika kita menetapkan x sama dengan malloc 1064 01:14:31,000 --> 01:14:34,000 apa ini katakan adalah menyisihkan memori di heap. 1065 01:14:34,000 --> 01:14:41,000 Ini kotak kecil di sini, lingkaran ini, terletak di heap. 1066 01:14:41,000 --> 01:14:43,000 X menunjuk ke sana. 1067 01:14:43,000 --> 01:14:46,000 Perhatikan bahwa y masih belum menunjuk apa pun. 1068 01:14:46,000 --> 01:14:50,000 Untuk mendapatkan memori-untuk menyimpan nomor 42 ke x 1069 01:14:50,000 --> 01:14:55,000 kita akan menggunakan notasi apa? 1070 01:14:55,000 --> 01:14:59,000 [Mahasiswa] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Tepat, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 Itu berarti mengikuti panah dan melemparkan 42 di sana. 1073 01:15:06,000 --> 01:15:09,000 Di sini di mana kita menetapkan y dan x kita y menunjuk ke x. 1074 01:15:09,000 --> 01:15:13,000 Sekali lagi, ini adalah seperti apa yang dikatakan Kevin mana kita menetapkan y sama dengan x. 1075 01:15:13,000 --> 01:15:15,000 Y tidak menunjuk ke x. 1076 01:15:15,000 --> 01:15:19,000 Sebaliknya, itu menunjuk ke apa x menunjuk ke juga. 1077 01:15:19,000 --> 01:15:24,000 >> Dan akhirnya dalam kotak terakhir ada 2 hal kemungkinan yang bisa kami lakukan. 1078 01:15:24,000 --> 01:15:28,000 Salah satunya adalah kita bisa mengatakan * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Hal lainnya adalah kita bisa mengatakan-Alex, kau tahu apa yang bisa kami lakukan di sini? 1080 01:15:33,000 --> 01:15:37,000 Anda bisa mengatakan * x = 13 atau- 1081 01:15:37,000 --> 01:15:41,000 [Siswa] Anda bisa mengatakan apapun int. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Jika ini yang disebut sebagai variabel int kita bisa melakukan itu. 1083 01:15:45,000 --> 01:15:49,000 Kita juga bisa mengatakan * y = 13 karena mereka berdua menunjuk ke tempat yang sama, 1084 01:15:49,000 --> 01:15:51,000 sehingga kita bisa menggunakan salah variabel untuk sampai ke sana. 1085 01:15:51,000 --> 01:15:56,000 Ya >> [Siswa]. Apa yang akan terlihat seperti jika kita hanya mengatakan x int adalah 13? 1086 01:15:56,000 --> 01:16:00,000 Itu akan mendeklarasikan variabel baru yang disebut x, yang tidak akan bekerja. 1087 01:16:00,000 --> 01:16:04,000 Kami akan memiliki tabrakan karena kami menyatakan x menjadi pointer di sini. 1088 01:16:04,000 --> 01:16:10,000 [Mahasiswa] Jika kita hanya memiliki pernyataan bahwa dengan sendirinya apa yang akan terlihat seperti dalam hal lingkaran? 1089 01:16:10,000 --> 01:16:14,000 Jika kita memiliki x = 13 maka kita akan memiliki sebuah kotak, dan daripada harus panah 1090 01:16:14,000 --> 01:16:16,000 keluar dari kotak kami akan menarik sebagai hanya 13. 1091 01:16:16,000 --> 01:16:19,000 [Siswa] Dalam kotak. Oke. 1092 01:16:19,000 --> 01:16:24,000 >> Terima kasih untuk menonton, dan semoga sukses pada Kuis 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]