1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [Minggu 2, Lanjutan] 2 00:00:02,270 --> 00:00:04,220 [David J. Malan, Universitas Harvard] 3 00:00:04,220 --> 00:00:06,880 [Ini adalah CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 Baiklah. Ini adalah CS50, dan ini adalah akhir minggu 2. 5 00:00:10,990 --> 00:00:14,410 Jika Anda berharap untuk menjadi lapar sekitar waktu ini besok, 6 00:00:14,410 --> 00:00:18,620 tahu bahwa kita akan mengadakan sebagai besok kelompok kecil, Kamis, 1:15 WIB. 7 00:00:18,620 --> 00:00:21,360 Ada URL ini di sini jika Anda ingin RSVP. 8 00:00:21,360 --> 00:00:26,740 Ruang terbatas, jadi tolong maafkan jika bentuk telah diisi pada saat Anda mengisi ini. 9 00:00:26,740 --> 00:00:29,300 URL lain, meskipun, yang mungkin menarik ini. 10 00:00:29,300 --> 00:00:32,369 Dalam hanya tentang waktu satu bulan, kursus ini akan disediakan 11 00:00:32,369 --> 00:00:36,890 semua lebih luas melalui edx, melalui mana orang-orang di Internet akan dapat mengikuti bersama, 12 00:00:36,890 --> 00:00:39,380 terlibat dalam kursus cukup aktif, pada kenyataannya. 13 00:00:39,380 --> 00:00:42,270 Mereka akan menggunakan Appliance CS50 CS50 dan Diskusikan 14 00:00:42,270 --> 00:00:45,490 dan sebagian besar perangkat lunak berbagai bahwa kita sudah telah menggunakan semester ini. 15 00:00:45,490 --> 00:00:48,710 Dan salah satu inisiatif kami ingin mengambil sebagai percobaan tahun ini 16 00:00:48,710 --> 00:00:51,930 adalah untuk melihat seberapa banyak konten kita dapat menerjemahkan 17 00:00:51,930 --> 00:00:53,960 ke dalam bahasa lisan dan tertulis lainnya. 18 00:00:53,960 --> 00:00:57,500 Jadi jika Anda mungkin memiliki kepentingan untuk berpartisipasi dalam proyek ini 19 00:00:57,500 --> 00:01:02,270 dimana kami akan memberikan transkrip bahasa Inggris dan sub judul untuk kuliah kursus ini 20 00:01:02,270 --> 00:01:05,450 dan celana pendek dan seminar dan bagian dan sejenisnya, 21 00:01:05,450 --> 00:01:08,200 jika Anda berbicara fasih atau menulis dengan lancar beberapa bahasa lain, 22 00:01:08,200 --> 00:01:12,290 kami akan senang untuk melibatkan Anda dalam proyek ini dimana Anda mengambil satu atau lebih dari video, 23 00:01:12,290 --> 00:01:15,200 menerjemahkannya ke dalam bahasa yang Anda tahu cukup baik. 24 00:01:15,200 --> 00:01:18,700 >> Untuk memberikan rasa antarmuka, ada ini antarmuka pengguna berbasis web 25 00:01:18,700 --> 00:01:22,090 bahwa kita akan menggunakan yang akan menciptakan dasarnya UI seperti ini. 26 00:01:22,090 --> 00:01:24,290 Ini saya mengajar beberapa Halloween lalu, 27 00:01:24,290 --> 00:01:27,390 dan di sisi kanan ada hitam di samping ini perangko waktu, 28 00:01:27,390 --> 00:01:31,210 Anda akan melihat berbagai hal yang keluar dari mulut saya hari itu, 29 00:01:31,210 --> 00:01:34,850 dan kemudian di bawahnya Anda akan dapat menerjemahkan ke dalam beberapa bahasa lain 30 00:01:34,850 --> 00:01:38,690 apa pemetaan adalah antara, dalam hal ini, Inggris dan, katakanlah, Spanyol. 31 00:01:38,690 --> 00:01:40,440 Jadi itu sebenarnya alat yang sangat user-friendly. 32 00:01:40,440 --> 00:01:43,370 Anda dapat mundur dan maju cepat sangat mudah dengan shortcut keyboard. 33 00:01:43,370 --> 00:01:47,490 Jadi jika Anda ingin mengambil bagian dalam percobaan ini dan memiliki kata-kata Anda melihat dan membaca 34 00:01:47,490 --> 00:01:51,850 dengan potensi ribuan orang di luar sana, jangan ragu untuk berpartisipasi. 35 00:01:51,850 --> 00:01:54,350 Satu kata tentang kucing dari hari Senin. 36 00:01:54,350 --> 00:02:00,350 Agar kita telah mengirim pesan yang terlalu menakutkan, lakukan menyadari bahwa, sebagai jam kantor sarankan 37 00:02:00,350 --> 00:02:03,300 dan sebagai bagian menyarankan, desain tentu saja sangat banyak 38 00:02:03,300 --> 00:02:07,360 telah siswa berkolaborasi dan berbicara dengan bekerja melalui set masalah 39 00:02:07,360 --> 00:02:11,260 dan masalah bersama-sama, dan benar-benar garis hanya datang ke, 40 00:02:11,260 --> 00:02:16,010 lagi, pekerjaan yang Anda akhirnya harus mengirimkan sendiri. 41 00:02:16,010 --> 00:02:18,860 Dan jadi cukup jujur, dalam jam kantor itu benar-benar normal, 42 00:02:18,860 --> 00:02:22,240 itu benar-benar diharapkan bahkan, untuk mengobrol dengan beberapa teman sebelah Anda. 43 00:02:22,240 --> 00:02:24,370 >> Jika ia sedang berjuang dengan topik tertentu dan Anda seperti, 44 00:02:24,370 --> 00:02:27,940 "Oh, well, izinkan saya memberi Anda sekilas dari beberapa baris kode yang saya tulis," itu bagus, 45 00:02:27,940 --> 00:02:31,250 yang terjadi, dan itu sangat kondusif, saya pikir, dengan proses pembelajaran. 46 00:02:31,250 --> 00:02:36,750 Dimana garis akan melintasi adalah ketika kepala adalah semacam miring di sini untuk detik terlalu banyak 47 00:02:36,750 --> 00:02:41,160 atau menit untuk yang benar-benar untuk baru saja kesempatan blokir untuk teman Anda, 48 00:02:41,160 --> 00:02:44,160 dan tentu ketika hal-hal bisa dipertukarkan melalui email dan Dropbox dan sejenisnya, 49 00:02:44,160 --> 00:02:45,640 ada juga adalah garis. 50 00:02:45,640 --> 00:02:48,620 Jadi dengan segala cara merasa nyaman dan merasa didorong untuk chatting dengan teman-teman 51 00:02:48,620 --> 00:02:52,810 dan teman sekelas tentang psets dan lebih dan hanya menyadari bahwa apa yang Anda akhirnya menyerahkan 52 00:02:52,810 --> 00:02:57,340 harus benar-benar menjadi produk kreasi Anda dan bukan orang lain. 53 00:02:57,340 --> 00:03:00,490 Dan jadi salah satu dari domain-masalah khusus untuk pset2, 54 00:03:00,490 --> 00:03:04,740 yang akan keluar besok malam larut, adalah untuk menyelam ke dalam dunia kriptografi, 55 00:03:04,740 --> 00:03:08,970 yang merupakan seni enkripsi atau mengacak informasi, 56 00:03:08,970 --> 00:03:12,600 dan ini pada akhirnya berhubungan dengan dunia keamanan. 57 00:03:12,600 --> 00:03:16,560 Sekarang, keamanan bagi kebanyakan dari kita datang dalam bentuk mekanisme yang cukup biasa. 58 00:03:16,560 --> 00:03:19,050 Semua dari kita memiliki username dan password, 59 00:03:19,050 --> 00:03:23,450 dan semua dari kita memiliki username dan password yang sangat buruk, kemungkinan besar. 60 00:03:23,450 --> 00:03:28,240 >> Jika password Anda adalah sama pada beberapa situs Web, itu mungkin bukan ide yang terbaik, 61 00:03:28,240 --> 00:03:30,070 seperti yang akan kita bahas menuju akhir semester. 62 00:03:30,070 --> 00:03:34,720 Jika password Anda ditulis pada catatan lengket - tidak ada lelucon - pada monitor anda, 63 00:03:34,720 --> 00:03:38,350 itu juga belum tentu desain terbaik tapi cukup fenomena umum. 64 00:03:38,350 --> 00:03:42,470 Dan jika Anda tidak menggunakan kriptografi untuk mengenkripsi password Anda, 65 00:03:42,470 --> 00:03:44,210 mereka sangat rentan. 66 00:03:44,210 --> 00:03:47,270 Jadi jika Anda berpikir Anda menjadi super pintar dengan memiliki dokumen Word yang tersembunyi 67 00:03:47,270 --> 00:03:49,910 suatu tempat pada hard drive Anda yang memiliki semua password Anda 68 00:03:49,910 --> 00:03:53,670 tapi itu di folder yang tidak ada yang akan melihat ke dalam, itu juga bukan merupakan mekanisme yang sangat aman. 69 00:03:53,670 --> 00:03:56,990 Dan jadi apa pset2 akan memperkenalkan ini seni kriptografi 70 00:03:56,990 --> 00:04:02,010 dan berebut informasi sehingga hal-hal seperti password semua lebih aman. 71 00:04:02,010 --> 00:04:05,790 Konteks di sini adalah bahwa dengan data aman 72 00:04:05,790 --> 00:04:07,930 datang kesempatan untuk mengenkripsi dan berebut itu. 73 00:04:07,930 --> 00:04:11,470 Dan jadi ini, misalnya, adalah contoh dari pesan dienkripsi. 74 00:04:11,470 --> 00:04:14,700 Ini benar-benar mengatakan sesuatu dalam bahasa Inggris, tapi itu jelas tidak sepenuhnya jelas. 75 00:04:14,700 --> 00:04:18,279 Dan kami akan datang lingkaran penuh hari ini untuk menggoda selain apa pesan rahasia di sini adalah. 76 00:04:18,279 --> 00:04:23,490 Tapi di dunia nyata komputer, hal-hal bahkan tidak terlihat seperti mereka mungkin frase bahasa Inggris. 77 00:04:23,490 --> 00:04:28,430 Sebagai contoh, ini adalah apa yang Anda mungkin menemukan pada Linux standar atau Mac atau komputer UNIX 78 00:04:28,430 --> 00:04:32,070 dalam sebuah file yang sekali waktu disebut file password. 79 00:04:32,070 --> 00:04:34,200 >> Saat ini sudah dipindahkan ke tempat lain. 80 00:04:34,200 --> 00:04:39,210 Tetapi jika Anda melihat di tempat yang tepat pada sistem, Anda akan melihat tidak hanya nama pengguna Anda 81 00:04:39,210 --> 00:04:43,400 atau orang lain pada sistem, tetapi Anda akan melihat versi dienkripsi password mereka. 82 00:04:43,400 --> 00:04:47,980 Memang, kata crypt ada menunjukkan bahwa hal-hal berikut dienkripsi, 83 00:04:47,980 --> 00:04:52,680 dan rangkaian huruf acak dan karakter dan angka, dan sebagainya 84 00:04:52,680 --> 00:04:56,480 dapat didekripsi hanya dengan mengetahui rahasia umum beberapa - 85 00:04:56,480 --> 00:04:58,840 kata rahasia, nomor rahasia - 86 00:04:58,840 --> 00:05:03,160 dan begitu memang, seni kriptografi pada akhirnya bermuara percaya dari beberapa macam 87 00:05:03,160 --> 00:05:05,650 dan mengetahui sesuatu yang orang lain tidak. 88 00:05:05,650 --> 00:05:10,090 Jadi kita akan menjelajahi secara rinci sedikit lebih saat ini dan di pset yang akan datang. 89 00:05:10,090 --> 00:05:12,200 Dan sekarang kata pada lulus / gagal. 90 00:05:12,200 --> 00:05:15,360 Terutama karena beberapa dari Anda telah menyelam ke pset1, Appliance, 91 00:05:15,360 --> 00:05:19,080 dan dunia yang sangat baru untuk diri sendiri, menyadari bahwa frustrasi dan kebingungan 92 00:05:19,080 --> 00:05:21,700 dan hanya kesulitan teknis yang cukup diharapkan, 93 00:05:21,700 --> 00:05:24,180 terutama dengan pset pertama, di mana ada begitu banyak baru, 94 00:05:24,180 --> 00:05:27,730 hanya mendapatkan akrab dengan ls dan cd dan semua perintah misterius 95 00:05:27,730 --> 00:05:33,050 dan lingkungan baru, dan itu terpisah dari bahan aktual dan pemrograman sendiri. 96 00:05:33,050 --> 00:05:36,940 Jadi menyadari juga bahwa ada pasti jam kantor yang ada sebagai struktur pendukung. 97 00:05:36,940 --> 00:05:38,880 >> Bagian ini dimulai Minggu mendatang. 98 00:05:38,880 --> 00:05:42,960 Tapi yang paling penting, jika Anda merasa hanya bahwa ini bukan dunia untuk Anda, 99 00:05:42,960 --> 00:05:44,710 menyadari bahwa itu benar-benar hanya mengambil waktu. 100 00:05:44,710 --> 00:05:48,600 Dan kalau bukan karena kesempatan ini tahun yang lalu bagi saya untuk mengambil kelas lulus / gagal, 101 00:05:48,600 --> 00:05:50,990 jujur, saya tidak akan pernah menginjakkan kaki di kelas. 102 00:05:50,990 --> 00:05:53,690 Dan Anda dapat mengubah ini sampai, katakanlah, Senin kelima tentu saja, 103 00:05:53,690 --> 00:05:58,280 jadi jika Anda berada di tepi sekarang, menyadari bahwa daripada kepala ke beberapa perairan lain sama sekali, 104 00:05:58,280 --> 00:06:01,260 jangan tentu mempertimbangkan hanya berubah untuk lulus / gagal. 105 00:06:01,260 --> 00:06:04,570 Sekali lagi, tidak ada yang benar-benar budaya ini di sini di Harvard mengambil hal-hal lulus / gagal 106 00:06:04,570 --> 00:06:08,670 karena semua orang benar-benar ingin mencapai atau overachieve, 107 00:06:08,670 --> 00:06:11,130 tapi terus terang, ini adalah cara yang indah untuk mencoba sesuatu yang keluar 108 00:06:11,130 --> 00:06:16,720 yang mungkin tidak akrab bagi Anda, dan Anda akan berakhir melakukan, dalam banyak kasus, cukup baik, 109 00:06:16,720 --> 00:06:18,210 mungkin banyak kejutan Anda. 110 00:06:18,210 --> 00:06:20,980 Dan dalam hal yang lebih konkret, apa yang saya pikir lulus / gagal pada umumnya tidak, 111 00:06:20,980 --> 00:06:22,940 terutama karena Anda mungkin pernah mengalami dengan pset0, 112 00:06:22,940 --> 00:06:26,560 jika Anda masukkan ke dalam 10 jam, 15 jam, 25 jam dalam beberapa pset 113 00:06:26,560 --> 00:06:29,920 dan Anda hanya membenturkan kepala ke dinding dan semakin Super larut malam 114 00:06:29,920 --> 00:06:33,950 tetapi Anda telah mengambil 90% pset dari jalan dan Anda hanya tidak tahu satu hal, 115 00:06:33,950 --> 00:06:36,520 lulus / gagal benar-benar mengambil tepi off dari kelas seperti ini, 116 00:06:36,520 --> 00:06:39,100 di mana Anda dapat semacam bahagia mengatakan, "Oke, aku tahu itu tidak sempurna, 117 00:06:39,100 --> 00:06:42,350 tapi saya bekerja pantatku off ini, aku cukup senang dengan di mana itu berakhir, " 118 00:06:42,350 --> 00:06:44,850 dan itu akan memenuhi harapan untuk lulus / gagal. 119 00:06:44,850 --> 00:06:47,540 Jadi jangan ingat-ingat. Baiklah. 120 00:06:47,540 --> 00:06:50,520 >> Jadi anda yang telah berjuang untuk menggunakan Universitas Harvard Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 tahu bahwa ada SSID CS50, koneksi Wi-Fi, beredar 122 00:06:54,780 --> 00:06:56,490 bahwa Anda mungkin memiliki lebih beruntung untuk. 123 00:06:56,490 --> 00:07:00,130 Ini sedikit ironis bahwa password untuk ini, jika Anda ingin mencoba menghubungkan ke 124 00:07:00,130 --> 00:07:08,350 untuk kecepatan yang lebih baik - dan biarkan kami tahu apakah itu tidak lebih baik - adalah 12345, sepanjang jalan hingga 8 125 00:07:08,350 --> 00:07:10,910 karena 8 lebih aman dari 5. 126 00:07:10,910 --> 00:07:16,910 Jadi jika Anda memerlukan sandi Wi-Fi, koneksi ke CS50 nirkabel sini, 12345678, 127 00:07:16,910 --> 00:07:20,380 dan kirim ke CS50 Diskusikan jika Anda masih memiliki masalah konektivitas intermittent, 128 00:07:20,380 --> 00:07:25,420 dan kami akan membiarkan kekuatan yang akan tahu untuk ruang ini. Baiklah. 129 00:07:25,420 --> 00:07:32,230 Jadi teaser cepat, terutama bagi Anda yang penggemar laki-laki atau anak perempuan dari Semua Apple sesuatu. 130 00:07:32,230 --> 00:07:37,460 Apa yang saya digali dari beberapa tahun yang lalu adalah file ini di sini, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 hanya untuk jenis membuat lebih konkrit dan lebih kompleks 132 00:07:39,930 --> 00:07:42,560 beberapa program C lebih mendasar kita telah menulis. 133 00:07:42,560 --> 00:07:46,910 Jadi saya membuka file ini, iUnlock.c. Ini tersedia di halaman Kuliah untuk hari ini. 134 00:07:46,910 --> 00:07:49,810 Di sisi kiri Anda akan melihat daftar panjang fungsi. 135 00:07:49,810 --> 00:07:53,230 Jadi rekan yang menulis ini menulis sebuah banyak fungsi, lebih dari sekedar utama. 136 00:07:53,230 --> 00:07:57,340 Dia menggunakan sejumlah besar perpustakaan di sini, dan jika kita mulai bergulir melalui, 137 00:07:57,340 --> 00:08:04,890 apa ini sebenarnya adalah retak, saya percaya, pertama untuk iPhone asli. 138 00:08:04,890 --> 00:08:09,830 >> Bila Anda ingin jailbreak iPhone asli, yang berarti untether itu dari AT & T 139 00:08:09,830 --> 00:08:13,710 dan benar-benar menginstal software khusus di atasnya dan melakukan hal-hal bahwa Apple tidak ingin orang lakukan, 140 00:08:13,710 --> 00:08:18,480 seseorang mengambil waktu untuk mencari tahu persis bagaimana mereka bisa mengeksploitasi kelemahan software, 141 00:08:18,480 --> 00:08:22,690 kesalahan, bug, dalam perangkat lunak Apple, dan dengan demikian lahir iUnlock.c-- 142 00:08:22,690 --> 00:08:26,760 bahwa jika Anda membuatnya pada komputer Anda dan diinstal ke iPhone 143 00:08:26,760 --> 00:08:29,430 yang terhubung ke komputer Anda melalui, katakanlah, kabel USB, 144 00:08:29,430 --> 00:08:32,450 ini akan memberi Anda hak akses administratif atau root pada iPhone Anda 145 00:08:32,450 --> 00:08:34,620 dan membiarkan Anda melakukan cukup banyak apa pun yang Anda inginkan. 146 00:08:34,620 --> 00:08:36,400 Dan begitu sudah ada kucing ini menarik dan permainan tikus 147 00:08:36,400 --> 00:08:39,340 antara Apple dan seluruh dunia khususnya karena mereka, seperti banyak perusahaan, 148 00:08:39,340 --> 00:08:43,350 mencoba untuk mengunci barang-barang mereka ke bawah sehingga Anda hanya bisa melakukannya dengan itu apa yang mereka inginkan. 149 00:08:43,350 --> 00:08:47,360 Namun berkat orang-orang seperti ini dan pemahaman tingkat rendah rincian - 150 00:08:47,360 --> 00:08:50,830 dan dalam hal ini pemrograman C - dan banyak konstruksi familiar 151 00:08:50,830 --> 00:08:55,280 bahwa kita sudah mulai bermain dengan, Anda dapat benar-benar memanfaatkan hardware 152 00:08:55,280 --> 00:08:59,250 dengan cara yang Anda inginkan dan belum tentu beberapa entitas perusahaan. 153 00:08:59,250 --> 00:09:01,600 Jadi misalnya, saya tidak tahu apa semua ini lakukan, 154 00:09:01,600 --> 00:09:03,580 tapi GetVersion terdengar cukup sederhana, 155 00:09:03,580 --> 00:09:05,710 dan sepertinya ini adalah fungsi bahwa orang ini menulis. 156 00:09:05,710 --> 00:09:09,250 Dibutuhkan beberapa jenis integer sebagai argumen, tidak kembali apa-apa, 157 00:09:09,250 --> 00:09:13,710 namun tampaknya loop dengan untuk loop di sini dan jika kondisi, jika kondisi istirahat, 158 00:09:13,710 --> 00:09:16,770 dan entah bagaimana berhubungan dengan nomor versi jika kita scroll ke bawah, 159 00:09:16,770 --> 00:09:19,650 meskipun banyak kata kunci akan menjadi baru. 160 00:09:19,650 --> 00:09:22,590 Dan ada banyak seluruh fungsi di sini kita belum pernah melihat dan mungkin tidak pernah melihat 161 00:09:22,590 --> 00:09:24,350 selama semester. 162 00:09:24,350 --> 00:09:29,160 >> Pada akhir hari, itu mengikuti aturan yang sama dan logika bahwa kami telah bermain dengan sejauh ini. 163 00:09:29,160 --> 00:09:34,340 Jadi ini jauh terlalu tua untuk memecahkan 3s iPhone 4s atau atau segera 5s hari ini, 164 00:09:34,340 --> 00:09:38,830 tapi tahu bahwa itu semua sangat banyak berasal dari dunia ini bahwa kita telah menyelam ke dalam. 165 00:09:38,830 --> 00:09:42,280 Mari kita lihat contoh sedikit lebih sederhana: 166 00:09:42,280 --> 00:09:46,260 yang satu ini, hanya untuk mendapatkan pemanasan dengan beberapa sintaks dan juga beberapa jenis data lain 167 00:09:46,260 --> 00:09:48,910 bahwa kita sudah bicara tentang tetapi belum benar-benar terlihat di C. 168 00:09:48,910 --> 00:09:53,670 Ini adalah file yang bernama positive1.c, dan per komentar di atas, 169 00:09:53,670 --> 00:09:56,070 ini hanya menuntut bahwa pengguna memberikan angka positif. 170 00:09:56,070 --> 00:09:59,910 Jadi contoh dari sebuah loop do-while, yang bagus untuk pemakai program interaktif 171 00:09:59,910 --> 00:10:02,070 di mana Anda perlu untuk memberitahu pengguna untuk melakukan sesuatu, 172 00:10:02,070 --> 00:10:05,530 dan jika mereka tidak bekerja sama Anda berteriak pada mereka atau menolak masukan mereka. 173 00:10:05,530 --> 00:10:10,480 Contoh kasus: Saya akan melakukan baris 19 sampai 24 174 00:10:10,480 --> 00:10:14,620 asalkan pengguna tidak memberi saya angka positif. 175 00:10:14,620 --> 00:10:21,340 Ini detail di sini on line 18, mengapa saya menyatakan n diatas ini perulangan seluruh membangun 176 00:10:21,340 --> 00:10:26,870 sebagai lawan tepat di sebelah jalur 22 di mana saya benar-benar peduli untuk mendapatkan n? Ya. 177 00:10:26,870 --> 00:10:29,330 [Mahasiswa] Lingkup. >> Ya, jadi ini masalah lingkup. 178 00:10:29,330 --> 00:10:31,770 Dan dalam istilah awam, apa lingkup lihat? 179 00:10:34,880 --> 00:10:41,560 Ya. >> [Respon siswa terdengar] >> Dapatkah Anda berbicara sedikit lebih keras? 180 00:10:41,560 --> 00:10:45,440 [Mahasiswa] Dimana Anda dapat mengakses variabel tersebut. >> Sempurna. 181 00:10:45,440 --> 00:10:47,610 Di mana Anda dapat mengakses variabel tertentu. 182 00:10:47,610 --> 00:10:50,990 Dan secara umum, aturan praktis sejauh ini telah bahwa ruang lingkup dari beberapa variabel 183 00:10:50,990 --> 00:10:56,140 didefinisikan oleh kurung kurawal terbaru bahwa Anda telah melihat. 184 00:10:56,140 --> 00:11:03,070 >> Dan sehingga dalam kasus ini, jika saya membuat kesalahan dengan menyatakan n on line 22, baris yang akan bekerja. 185 00:11:03,070 --> 00:11:10,840 Saya akan mendapatkan sebuah int, dan saya akan memasukkannya ke dalam n variabel di baris 22, 186 00:11:10,840 --> 00:11:17,060 tapi yang baris kode sekarang akan tidak tahu apa yang saya bicarakan? >> [Mahasiswa] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, dan ternyata 24 juga karena dalam hal ini berada di luar kurung kurawal. 188 00:11:23,840 --> 00:11:28,550 Jadi hanya sedikit gangguan tapi sangat mudah dipecahkan dengan hanya mendeklarasikan variabel 189 00:11:28,550 --> 00:11:30,700 di luar fungsi itu sendiri. 190 00:11:30,700 --> 00:11:32,760 Kita akan lihat nanti saat Anda dapat melangkah lebih jauh 191 00:11:32,760 --> 00:11:34,940 dan Anda bahkan bisa mendapatkan sedikit malas. 192 00:11:34,940 --> 00:11:39,660 Dan ini tidak direkomendasikan secara umum, tetapi Anda bahkan bisa mendapatkan malas 193 00:11:39,660 --> 00:11:44,150 dan menempatkan variabel global, sehingga untuk berbicara, bukan dalam fungsi, tidak dalam satu lingkaran, 194 00:11:44,150 --> 00:11:49,800 tetapi dalam file itu sendiri, di luar semua fungsi yang sudah Anda tulis, seperti yang saya lakukan di sini pada baris 15. 195 00:11:49,800 --> 00:11:55,220 Hal ini umumnya disukai, tetapi menyadari bahwa ini adalah solusi kadang-kadang masalah lain, 196 00:11:55,220 --> 00:11:56,910 seperti yang kita akhirnya akan melihat. 197 00:11:56,910 --> 00:11:59,500 Jadi untuk saat ini kita akan meninggalkannya seperti ini, tapi mari kita lihat apakah kita dapat menulis ulang ini 198 00:11:59,500 --> 00:12:02,360 hanya untuk memulai mengekspresikan diri kita sedikit berbeda. 199 00:12:02,360 --> 00:12:05,550 Program ini, hanya harus jelas, adalah positive1. 200 00:12:05,550 --> 00:12:11,980 Biarkan aku pergi ke depan di sini dan di jendela terminal saya membuat positive1, Enter. 201 00:12:11,980 --> 00:12:15,080 Mengkompilasi baik-baik saja. Aku akan menjalankan positive1, tekan Enter. 202 00:12:15,080 --> 00:12:19,250 Saya menuntut bahwa Anda memberi saya bilangan bulat positif. Aku akan mengatakan -1. Itu tidak bekerja. 203 00:12:19,250 --> 00:12:22,340 0, 99. Yang tampaknya untuk bekerja. 204 00:12:22,340 --> 00:12:25,310 Mungkin tidak tes yang paling ketat, tapi setidaknya itu adalah cek kewarasan bagus 205 00:12:25,310 --> 00:12:27,100 bahwa kita berada di jalur yang benar. 206 00:12:27,100 --> 00:12:29,570 >> Jadi sekarang biarkan aku pergi ke depan dan membuka versi 2 ini, 207 00:12:29,570 --> 00:12:32,800 dan apa yang berbeda sudah? 208 00:12:32,800 --> 00:12:39,030 Menerapkan hal yang sama, tapi apa yang melompat keluar sebagai jelas berbeda kali ini? 209 00:12:40,790 --> 00:12:47,090 Ini bool dalam warna hijau. Hal ini disorot dalam warna hijau, ini kata kunci yang dikenal sebagai bool, yang merupakan jenis data. 210 00:12:47,090 --> 00:12:50,510 Ini tidak datang dibangun untuk semua versi C. 211 00:12:50,510 --> 00:12:52,650 Anda perlu menyertakan perpustakaan tertentu. 212 00:12:52,650 --> 00:12:56,460 Dalam kasus kami, saya termasuk perpustakaan CS50 sehingga kita memiliki akses ke bool. 213 00:12:56,460 --> 00:12:59,860 Tapi di baris 18, kita tampaknya memiliki nilai Boolean sini disebut bersyukur. 214 00:12:59,860 --> 00:13:02,190 Saya bisa disebut apa-apa ini, tapi saya menyebutnya bersyukur 215 00:13:02,190 --> 00:13:04,750 hanya untuk jenis menyampaikan beberapa makna semantik. 216 00:13:04,750 --> 00:13:07,700 Jadi awalnya on line 18, saya tampaknya tidak bersyukur 217 00:13:07,700 --> 00:13:12,230 karena nilai Boolean bersyukur diinisialisasi ke false dalam baris 18. 218 00:13:12,230 --> 00:13:16,500 Dan maka tampaknya apa yang saya lakukan di sini di baris 21 sampai 23 219 00:13:16,500 --> 00:13:19,200 adalah Saya baru saja jenis ditulis ulang logika saya. 220 00:13:19,200 --> 00:13:26,100 Jadi tidak secara fungsional berbeda, tetapi sejalan 22 sekarang saya memeriksa apakah int pengguna telah memberikan 221 00:13:26,100 --> 00:13:31,360 lebih besar dari 0, maka saya hanya mengubah nilai bersyukur ke true. 222 00:13:31,360 --> 00:13:35,590 Dan mengapa saya melakukan itu? Karena sejalan 25, rupanya aku akan memeriksa kondisi. 223 00:13:35,590 --> 00:13:39,760 Melakukan loop ini sementara bersyukur adalah palsu. 224 00:13:39,760 --> 00:13:42,960 Jadi saya mengusulkan ini sebagai alternatif untuk versi 1 225 00:13:42,960 --> 00:13:47,050 karena itu setidaknya sedikit lebih intuitif mungkin, itu sedikit lebih membumi dalam bahasa Inggris. 226 00:13:47,050 --> 00:13:51,980 Jadi lakukan hal berikut saat Anda tidak bersyukur atau saat bersyukur adalah palsu. 227 00:13:51,980 --> 00:13:56,220 Dan kali ini juga saya tampaknya tidak peduli untuk mengingat apa yang pengguna mengetik 228 00:13:56,220 --> 00:14:00,050 karena pemberitahuan tidak ada n variabel, jadi sebenarnya, sedikit kebohongan putih di sana. 229 00:14:00,050 --> 00:14:03,290 >> Secara fungsional, program ini sedikit berbeda setelah kami sampai ke bawah itu 230 00:14:03,290 --> 00:14:04,960 karena aku tidak mengingat apa n adalah. 231 00:14:04,960 --> 00:14:09,120 Tapi saya ingin menunjukkan di sini juga bahwa meskipun kita telah melihat GetInt 232 00:14:09,120 --> 00:14:13,780 dan GetString yang digunakan pada sisi kanan tanda sama dengan sejauh 233 00:14:13,780 --> 00:14:17,310 sehingga kita mengingat nilai, secara teknis, itu tidak benar-benar diperlukan. 234 00:14:17,310 --> 00:14:20,290 Jika untuk alasan apapun Anda tidak peduli untuk menyimpan nilai, 235 00:14:20,290 --> 00:14:25,540 Anda hanya ingin memeriksa nilai, perhatikan bahwa kita hanya bisa menulis ini sebagai GetInt, 236 00:14:25,540 --> 00:14:27,320 terbuka paren, paren dekat. 237 00:14:27,320 --> 00:14:30,570 Itu fungsi akan mengembalikan nilai, seperti yang kita telah mengatakan. 238 00:14:30,570 --> 00:14:32,220 Ini akan memberi Anda kembali sebuah int. 239 00:14:32,220 --> 00:14:34,460 Dan jadi jika Anda berpikir mental ini terjadi, 240 00:14:34,460 --> 00:14:38,190 ketika saya mengetik 99, GetInt mengembalikan nomor 99, 241 00:14:38,190 --> 00:14:41,840 dan begitu konseptual, itu seolah-olah kode saya sebenarnya ini. 242 00:14:41,840 --> 00:14:45,950 Jadi jika 99 memang lebih besar dari 0, maka bersyukur menjadi benar, 243 00:14:45,950 --> 00:14:50,810 maka baris 25 menyadari ooh, kita sudah selesai karena aku sekarang bersyukur, 244 00:14:50,810 --> 00:14:53,970 dan sejalan 26, kami hanya mengatakan, "Terima kasih untuk bilangan bulat positif!" 245 00:14:53,970 --> 00:14:55,960 apa itu terjadi menjadi. 246 00:14:55,960 --> 00:14:59,140 Sekarang mari kita lakukan sintaksis gula sedikit di sini, sehingga untuk berbicara. 247 00:14:59,140 --> 00:15:04,670 Mari kita lihat apakah kita dapat membersihkan baris ini 25 dengan varian ketiga dan terakhir di positive3. 248 00:15:04,670 --> 00:15:13,600 >> Perhatikan satu-satunya perbedaan sekarang adalah apa baris kode? >> [Mahasiswa] 25. >> [Malan] Ya, 25. 249 00:15:13,600 --> 00:15:17,680 Dan kita tidak benar-benar melihat trik ini dulu, tapi kami melihat tanda seru pada hari Senin, 250 00:15:17,680 --> 00:15:21,070 yang menunjukkan apa? >> [Mahasiswa] Tidak. Tidak >> atau negasi. 251 00:15:21,070 --> 00:15:23,510 Jadi mengambil nilai Boolean dan flip nilainya. 252 00:15:23,510 --> 00:15:25,810 Benar menjadi palsu, palsu menjadi benar. 253 00:15:25,810 --> 00:15:30,420 Jadi ini, saya akan mengusulkan, bahkan sedikit lebih intuitif cara menulis kode 254 00:15:30,420 --> 00:15:33,430 karena saya masih bersyukur untuk menginisialisasi palsu, saya masih melakukan hal berikut, 255 00:15:33,430 --> 00:15:36,010 Aku mengatur bersyukur untuk benar ketika saatnya tiba, 256 00:15:36,010 --> 00:15:40,880 tapi sekarang Anda benar-benar bisa hanya menerjemahkan kode ini secara lisan kiri ke kanan, 257 00:15:40,880 --> 00:15:45,630 sementara (bersyukur!), karena bang atau tanda seru menunjukkan gagasan tidak, 258 00:15:45,630 --> 00:15:47,580 jadi sementara tidak bersyukur. 259 00:15:47,580 --> 00:15:49,900 Jadi sekali lagi, kami belum memperkenalkan konsep-konsep baru per se. 260 00:15:49,900 --> 00:15:53,730 Kami berbicara tentang boolean kembali ketika kami bermain dengan Scratch, 261 00:15:53,730 --> 00:15:56,720 tapi sadar sekarang kita hanya bisa mulai menulis kode kita dalam berbagai cara. 262 00:15:56,720 --> 00:16:01,060 Jadi terutama di pset1 jika Anda semacam berjuang untuk mencari tahu cara untuk menulis beberapa program, 263 00:16:01,060 --> 00:16:04,340 kemungkinan besar Anda beruntung karena bisa ada beberapa solusi yang 264 00:16:04,340 --> 00:16:06,110 bahwa Anda dapat terjadi atas. 265 00:16:06,110 --> 00:16:10,500 Misalnya, ini hanya 3 untuk bahkan yang paling sederhana dari program. Baiklah. 266 00:16:10,500 --> 00:16:14,200 Dan sekarang ingat pada hari Senin kami pergi pada catatan ini dengan nilai-nilai kembali. 267 00:16:14,200 --> 00:16:18,450 Jadi untuk pertama kalinya kami menulis sebuah program yang tidak hanya memiliki utama; 268 00:16:18,450 --> 00:16:22,550 juga memiliki fungsi kustom sendiri yang saya tulis di sini. 269 00:16:22,550 --> 00:16:26,810 Jadi sejalan 31 sampai 34 Saya telah menerapkan fungsi kubus. 270 00:16:26,810 --> 00:16:30,240 Ini tidak rumit. Ini hanya * a * dalam kasus ini. 271 00:16:30,240 --> 00:16:34,750 Tapi apa yang penting tentang hal itu adalah bahwa aku mengambil input dalam bentuk 272 00:16:34,750 --> 00:16:39,180 dan aku kembali output dalam bentuk * a * a. 273 00:16:39,180 --> 00:16:43,560 Jadi sekarang aku punya kemampuan, seperti saya dulu dengan prinf saja, 274 00:16:43,560 --> 00:16:47,240 untuk memanggil fungsi ini dengan memanggil fungsi kubus. 275 00:16:47,240 --> 00:16:51,970 >> Dan fungsi kubus mengambil beberapa masukan, dan fungsi kubus kembali beberapa output. 276 00:16:51,970 --> 00:16:56,960 Sebaliknya, printf hanya melakukan sesuatu. 277 00:16:56,960 --> 00:17:00,840 Ini tidak kembali apa-apa yang kita peduli, meskipun sebagai samping itu tidak mengembalikan nilai; 278 00:17:00,840 --> 00:17:03,110 Anda hanya umumnya mengabaikannya. 279 00:17:03,110 --> 00:17:06,510 Printf hanya melakukan sesuatu. Ini memiliki efek samping dari mencetak ke layar. 280 00:17:06,510 --> 00:17:11,770 Sebaliknya di sini, kita memiliki fungsi kubus, yang benar-benar kembali sesuatu. 281 00:17:11,770 --> 00:17:15,520 Jadi bagi mereka yang akrab dengan ini, itu ide yang cukup jelas. 282 00:17:15,520 --> 00:17:19,640 Tetapi bagi mereka yang kurang akrab dengan ide lewat di input dan mendapatkan kembali output, 283 00:17:19,640 --> 00:17:21,950 mari kita coba sesuatu yang super hanya sederhana. 284 00:17:21,950 --> 00:17:25,490 Apakah ada yang nyaman datang di panggung sebentar? 285 00:17:25,490 --> 00:17:28,040 Anda harus nyaman dengan kamera pada Anda juga. Ya? Oke. 286 00:17:28,040 --> 00:17:31,240 Siapa nama Anda? >> [Mahasiswa] Ken. >> Ken. Baiklah. Ken, naiklah. 287 00:17:31,240 --> 00:17:35,050 Ken akan menjadi fungsi dari macam di sini. 288 00:17:35,050 --> 00:17:38,720 Mari kita pergi ke depan dan melakukan hal ini. Mari kita sedikit mewah. 289 00:17:38,720 --> 00:17:42,260 Senang bertemu Anda. Selamat datang di tengah panggung. Baiklah. 290 00:17:42,260 --> 00:17:46,640 Mari kita menekan tombol ini di sini. Baiklah. 291 00:17:46,640 --> 00:17:49,820 Jadi di sini Anda memiliki papan tulis modern, 292 00:17:49,820 --> 00:17:53,470 dan apa yang saya adalah fungsi utama, misalnya, 293 00:17:53,470 --> 00:17:56,460 dan saya tidak memiliki iPad di tanganku. 294 00:17:56,460 --> 00:17:59,710 >> Saya tidak begitu ingat bagaimana - Yah, aku tidak bisa mengatakan itu. 295 00:17:59,710 --> 00:18:02,480 Saya tidak benar-benar memiliki tulisan tangan yang bagus, 296 00:18:02,480 --> 00:18:05,520 dan karena itu saya ingin Anda untuk mencetak sesuatu di layar untuk saya. 297 00:18:05,520 --> 00:18:12,040 Saya menjadi program utama, dan aku akan memiliki Anda mengatakan ini 298 00:18:12,040 --> 00:18:16,720 dengan menulis dalam cakar ayam saya dan kemudian melewati Anda masukan. 299 00:18:16,720 --> 00:18:20,400 Jadi konyol meskipun latihan ini, gagasan tentang fungsi dan memanggil fungsi 300 00:18:20,400 --> 00:18:22,400 dan mengembalikan fungsi benar-benar bermuara pada hal ini. 301 00:18:22,400 --> 00:18:26,260 Saya utama, saya baru saja menulis printf, kutipan-tanda kutip sesuatu di layar, 302 00:18:26,260 --> 00:18:29,110 Saya menjalankan program ini, dan segera setelah printf dipanggil, 303 00:18:29,110 --> 00:18:32,880 dibutuhkan satu argumen atau satu parameter kadang-kadang antara tanda kutip ganda. 304 00:18:32,880 --> 00:18:35,880 Berikut ini adalah argumen itu. Saya menyerahkannya pada Ken. 305 00:18:35,880 --> 00:18:39,020 Dia adalah kotak hitam menulis beberapa beberapa tahun lalu 306 00:18:39,020 --> 00:18:41,510 yang tampaknya hanya tahu bagaimana untuk mencetak hal-hal di layar. 307 00:18:41,510 --> 00:18:43,150 Jadi mengeksekusi. 308 00:18:49,280 --> 00:18:51,280 Itu tidak buruk. Sangat baik. 309 00:18:51,280 --> 00:18:55,510 Jadi sekarang Ken dilakukan mengeksekusi. Apakah dia harus menyerahkan apa-apa kembali? 310 00:18:55,510 --> 00:18:57,470 Bukan berarti kita lihat sejauh ini. 311 00:18:57,470 --> 00:19:00,460 Sekali lagi, printf tidak benar-benar kembali nomor, tapi kami akan mengabaikan bahwa untuk saat ini 312 00:19:00,460 --> 00:19:03,470 karena kita tidak pernah menggunakannya. Jadi itu saja untuk Ken. 313 00:19:03,470 --> 00:19:08,580 Dan jadi sekarang main mengambil alih kontrol program lagi 314 00:19:08,580 --> 00:19:11,060 karena baris kode, printf, dilakukan mengeksekusi. 315 00:19:11,060 --> 00:19:14,050 Dan kita pergi tentang cara kami, melaksanakan apapun jalur lain yang ada. 316 00:19:14,050 --> 00:19:17,320 Jadi sekarang mari kita coba contoh yang sedikit berbeda. 317 00:19:17,320 --> 00:19:24,940 Kali ini di sini mari kita pertama jelas layar, dan kali ini kita akan melakukan fungsi cubing, 318 00:19:24,940 --> 00:19:27,080 tapi kali ini, saya mengharapkan nilai output. 319 00:19:27,080 --> 00:19:29,180 >> Jadi mari kita pergi ke depan dan melakukan hal ini. 320 00:19:29,180 --> 00:19:35,790 Sekarang saya memiliki baris kode yang mengatakan x mendapat kubus x. 321 00:19:41,370 --> 00:19:46,370 Baris kode, recall, terlihat seperti ini: x = kubus (x); 322 00:19:46,370 --> 00:19:50,930 Jadi bagaimana ini akan bekerja? Mari kita pergi ke depan dan memberikan layar putih lagi. 323 00:19:50,930 --> 00:19:54,070 Saya akan menuliskan sekarang nilai x, 324 00:19:54,070 --> 00:20:01,400 yang pada saat ini dalam waktu kebetulan, katakanlah, 2 untuk tetap sederhana. 325 00:20:01,400 --> 00:20:06,150 Saya telah menuliskan di selembar kertas nilai 2, yang adalah x nilai saya. 326 00:20:06,150 --> 00:20:10,920 Saya menyerahkannya kepada Ken. >> Dan aku hanya menulis jawabannya? >> Ya, mari kita menulis jawabannya. 327 00:20:12,760 --> 00:20:18,940 Oke. Dan sekarang dia harus kembali saya sesuatu. Sempurna. Bagus segue. 328 00:20:18,940 --> 00:20:23,120 Jadi sekarang dia tangan saya kembali nilai 8 dalam kasus ini, dan apa yang harus saya lakukan dengan itu? 329 00:20:23,120 --> 00:20:28,250 Sebenarnya - mari kita lihat, mendapatkan hak ini. Apa yang akan saya lakukan dengan itu? 330 00:20:28,250 --> 00:20:33,440 Sekarang aku akan mengambil nilai ini dan benar-benar menyimpannya pada mereka bit yang sama di memori. 331 00:20:33,440 --> 00:20:35,170 Tapi perhatikan Aku agak berjuang di sini. 332 00:20:35,170 --> 00:20:38,210 Aku agak bingung karena di mana saya benar-benar menulis nilai x, 333 00:20:38,210 --> 00:20:43,150 karena apa yang saya baru saja dilakukan adalah Ken fisik tangan selembar kertas yang memiliki nilai 2, 334 00:20:43,150 --> 00:20:46,590 yang x, dan memang, inilah yang terjadi. 335 00:20:46,590 --> 00:20:50,210 Jadi ternyata bahwa ketika Anda memanggil fungsi dan Anda lulus dalam argumen 336 00:20:50,210 --> 00:20:53,290 seperti halo, dunia atau Anda lulus dalam argumen seperti 2, 337 00:20:53,290 --> 00:20:57,110 pada umumnya, Anda lewat dalam salinan argumen itu. 338 00:20:57,110 --> 00:21:00,730 Dan jadi seperti aku menuliskan nomor 2 di sini dan menyerahkannya kepada Ken, 339 00:21:00,730 --> 00:21:04,720 itu harus berarti bahwa saya masih memiliki salinan dari nilai 2 tempat 340 00:21:04,720 --> 00:21:08,890 karena memang, sekarang aku sudah mendapatkan kembali nilai 8, saya harus kembali ke RAM 341 00:21:08,890 --> 00:21:12,130 dan benar-benar menuliskan 8 di mana saya pernah punya nomor 2. 342 00:21:12,130 --> 00:21:16,950 Jadi secara visual, ingat ini gagasan melintas di, harfiah, salinan nilai. 343 00:21:16,950 --> 00:21:20,780 >> Ken melakukan hal itu, tangan saya kembali sesuatu - dalam hal ini nilai seperti 8 - 344 00:21:20,780 --> 00:21:24,980 dan kemudian saya harus melakukan sesuatu dengan nilai bahwa jika saya ingin tetap di sekitar. 345 00:21:24,980 --> 00:21:29,650 Jadi semua ini akan kembali menjadi terlalu akrab sebelum lama. 346 00:21:29,650 --> 00:21:34,920 Terima kasih banyak untuk demo ini di sini, Ken. [Tepuk tangan] 347 00:21:34,920 --> 00:21:36,920 Sangat baik dilakukan. 348 00:21:36,920 --> 00:21:42,690 Mari kita lihat bagaimana yang pada akhirnya berhubungan dengan beberapa fungsi panggilan yang kita telah lakukan di sini. 349 00:21:42,690 --> 00:21:47,910 Biarkan aku pergi ke depan dan membawa kita kembali ke contoh cubing sini. 350 00:21:47,910 --> 00:21:53,300 Perhatikan bahwa jika kita ingin benar-benar mulai mengambil ini lebih lanjut, 351 00:21:53,300 --> 00:21:57,570 kita akan harus sadar akan fakta bahwa x jumlah yang sedang lewat di sini 352 00:21:57,570 --> 00:22:01,530 berbeda dari apa yang sebenarnya sedang berlalu ke fungsi. 353 00:22:01,530 --> 00:22:05,880 Jadi sekali lagi, ini melewati copy akan menjadi sangat erat hanya dalam beberapa saat. 354 00:22:05,880 --> 00:22:09,580 Mari kita lihat sesuatu yang tidak cukup bekerja benar belum. 355 00:22:09,580 --> 00:22:13,250 Aku akan pergi ke depan dan membuka contoh kereta ketiga, yang cacat oleh alam, 356 00:22:13,250 --> 00:22:18,550 dan itu disebut buggy3 dan menerapkan fungsi swapping. 357 00:22:18,550 --> 00:22:25,110 Di sini kita memiliki fungsi utama yang x dan y sewenang-wenang diinisialisasi ke 1 dan 2, masing-masing. 358 00:22:25,110 --> 00:22:27,700 Kita bisa menggunakan GetInt, tetapi kita hanya perlu latihan sederhana, 359 00:22:27,700 --> 00:22:30,170 jadi sulit-kode sebagai 1 dan 2. 360 00:22:30,170 --> 00:22:35,340 Di baris 21 dan 22, kita tampaknya mencetak x dan y, 1 per baris. 361 00:22:35,340 --> 00:22:39,720 Kemudian pada baris 23, saya menyatakan saya menukar nilai-nilai, titik, titik, titik. 362 00:22:39,720 --> 00:22:44,170 Saya rupanya memanggil fungsi di baris 24 swap yang disebut yang mengambil 2 argumen. 363 00:22:44,170 --> 00:22:48,300 Ini benar-benar legit untuk fungsi untuk mengambil 2 argumen. Kami telah melihat printf melakukannya sudah. 364 00:22:48,300 --> 00:22:51,830 >> Jadi pertukaran ternyata mengambil x dan y, dan seperti namanya, 365 00:22:51,830 --> 00:22:54,670 Saya akan berharap bahwa itu akan menukar ini 2 nilai. 366 00:22:54,670 --> 00:23:00,090 Jadi kemudian aku mengklaim on line 25 "bertukar!" dan saya mencetak ulang x dan y 367 00:23:00,090 --> 00:23:03,070 dengan asumsi bahwa mereka memang telah bertukar. 368 00:23:03,070 --> 00:23:06,080 Tetapi jika aku benar-benar menjalankan program ini - biarkan aku membuka jendela terminal, 369 00:23:06,080 --> 00:23:09,860 biarkan saya membuat buggy3 - seperti namanya, ini tidak akan berakhir dengan baik 370 00:23:09,860 --> 00:23:15,770 karena ketika saya tekan Enter, perhatikan bahwa x adalah 1, y adalah 2, 371 00:23:15,770 --> 00:23:19,420 namun pada akhir program, mereka masih, pada kenyataannya, sama. 372 00:23:19,420 --> 00:23:22,960 Jadi berdasarkan demonstrasi hanya sekarang dengan Ken, apa yang sebenarnya terjadi? 373 00:23:22,960 --> 00:23:28,710 Mari selami ini fungsi swap. Ini super pendek. Ini hanya beberapa baris kode yang panjang. 374 00:23:28,710 --> 00:23:34,520 Tapi apa masalah mendasar berdasarkan cerita sederhana mengatakan di sini dengan Ken? 375 00:23:34,520 --> 00:23:36,670 Mengapa swap yang rusak? 376 00:23:36,670 --> 00:23:39,660 [Mahasiswa] Anda menyimpan ke salinan, bukan variabel. 377 00:23:39,660 --> 00:23:43,980 Tepat. Kami menyimpan untuk menyalin, bukan variabel itu sendiri. 378 00:23:43,980 --> 00:23:47,170 Dengan kata lain, swap ternyata mengambil 2 argumen, int, 379 00:23:47,170 --> 00:23:49,370 dan itu sewenang-wenang disebut a dan b, 380 00:23:49,370 --> 00:23:54,420 dan di sini saya sudah lulus dalam x dan y, yang masing-masing 1 dan 2, 381 00:23:54,420 --> 00:23:58,770 tapi aku tidak benar-benar lewat di x, aku tidak benar-benar lewat di y, 382 00:23:58,770 --> 00:24:01,450 Saya melewati salinan x dan salinan y. 383 00:24:01,450 --> 00:24:04,510 Ini hampir seolah-olah Anda disalin dan disisipkan swap 384 00:24:04,510 --> 00:24:07,810 nilai-nilai yang Anda inginkan untuk benar-benar memanipulasi. 385 00:24:07,810 --> 00:24:14,480 Jadi jika itu terjadi, ketika saya mulai melaksanakan Program baris 35 kemudian 36, 386 00:24:14,480 --> 00:24:18,650 ketika saya sampai ke baris 37, saat ini dalam cerita, berapakah nilai dari? 387 00:24:21,040 --> 00:24:25,050 Pada titik ini dalam cerita, baris 37, berapakah nilai dari pada saat ini? >> [Mahasiswa] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] Itu hanya harus 1, benar, karena x disahkan sebagai argumen pertama, 389 00:24:29,280 --> 00:24:33,080 dan fungsi ini hanya sewenang-wenang memanggil argumen pertama a. 390 00:24:33,080 --> 00:24:38,200 Demikian pula adalah y argumen kedua, dan itu hanya sewenang-wenang memanggil b argumen kedua. 391 00:24:38,200 --> 00:24:40,990 >> Dikotomi ini sebenarnya cukup sederhana dijelaskan. Pikirkan tentang hal ini. 392 00:24:40,990 --> 00:24:43,320 Tak satu pun dari kita telah bertemu dengan orang yang menulis printf, 393 00:24:43,320 --> 00:24:50,770 jadi pasti, ia tidak tahu apa variabel kita 30 tahun kemudian akan dipanggil. 394 00:24:50,770 --> 00:24:56,650 Jadi harus ada perbedaan antara apa yang Anda sebut variabel dalam fungsi Anda menulis 395 00:24:56,650 --> 00:25:02,080 dan apa yang Anda sebut variabel dalam fungsi Anda menelepon atau menggunakan. 396 00:25:02,080 --> 00:25:05,340 Jadi dengan kata lain, saya telah menulis saya sebagai variabel x dan y, 397 00:25:05,340 --> 00:25:08,890 tetapi jika orang lain telah menulis fungsi swap, dia pasti tidak akan tahu 398 00:25:08,890 --> 00:25:10,690 apa variabel saya akan dipanggil, 399 00:25:10,690 --> 00:25:13,830 sehingga menyadari bahwa ini adalah mengapa Anda memiliki dualitas nama. 400 00:25:13,830 --> 00:25:16,750 Secara teknis, aku bisa melakukan ini dengan kebetulan, 401 00:25:16,750 --> 00:25:20,080 namun mereka masih akan disahkan sebagai salinan. 402 00:25:20,080 --> 00:25:23,650 Itu hanya akan menjadi murni kebetulan estetis jika orang yang menulis pertukaran 403 00:25:23,650 --> 00:25:26,150 telah menggunakan nama yang sama. 404 00:25:26,150 --> 00:25:32,370 Jadi pada titik ini dalam cerita, baris 37, adalah 1, b adalah 2, dan sekarang saya melanjutkan untuk swap mereka. 405 00:25:32,370 --> 00:25:34,900 Pertama-tama, izinkan saya benar-benar melakukan hal ini jauh lebih sederhana. 406 00:25:34,900 --> 00:25:36,690 Aku tidak tahu apa yang 3 baris kode lakukan. 407 00:25:36,690 --> 00:25:41,210 Mari saya hanya melakukan ini: b = a; a = b; dilakukan. 408 00:25:41,210 --> 00:25:44,690 Mengapa hal ini rusak, logis? 409 00:25:46,490 --> 00:25:48,900 Ini semacam hal yang intuitif, kan? 410 00:25:48,900 --> 00:25:52,560 Jadi b dan b menjadi menjadi, 411 00:25:52,560 --> 00:25:57,730 tapi masalahnya adalah bahwa segera setelah baris 37 mengeksekusi, apa nilai dari a dan b? 412 00:25:57,730 --> 00:26:03,410 Hal yang sama, 1, karena engkau telah musnah, sehingga untuk berbicara, Anda telah berubah b menyamai. 413 00:26:03,410 --> 00:26:08,890 Jadi sekali baris 37 telah dieksekusi, itu besar, Anda sekarang memiliki 2 salinan dari nomor 1 414 00:26:08,890 --> 00:26:13,350 dalam fungsi ini, sehingga kemudian ketika Anda mengatakan di baris 38 a = b, 415 00:26:13,350 --> 00:26:17,640 Anda jenis kacau karena Anda hanya menugaskan 1 ke 1. 416 00:26:17,640 --> 00:26:20,580 Kau seperti kehilangan nilai yang Anda pedulikan. 417 00:26:20,580 --> 00:26:23,220 Jadi dalam versi asli ini, perhatikan apa yang saya lakukan. 418 00:26:23,220 --> 00:26:26,850 Saya bukannya punya baris ketiga kode yang tampak seperti ini. 419 00:26:26,850 --> 00:26:28,580 Saya mendeklarasikan variabel sementara. 420 00:26:28,580 --> 00:26:32,170 >> Tmp adalah nama yang sangat umum untuk variabel sementara, dan itu int 421 00:26:32,170 --> 00:26:34,580 karena itu harus sesuai dengan apa yang saya ingin membuat salinan. 422 00:26:34,580 --> 00:26:39,770 Saya menyimpan salinan dari dalam tmp, jadi setelah baris 37 telah dieksekusi, 423 00:26:39,770 --> 00:26:45,860 nilai adalah - kewarasan cek cepat - 1, nilai b adalah 2, 424 00:26:45,860 --> 00:26:48,970 dan nilai tmp juga 1. 425 00:26:48,970 --> 00:26:52,060 Jadi sekarang saya mengeksekusi baris 38. 426 00:26:52,060 --> 00:27:00,540 Setelah baris 38 mengeksekusi, yang mengambil nilai b. Dan b adalah 2, jadi sekarang 2. 427 00:27:00,540 --> 00:27:05,210 Jadi pada titik ini dalam cerita, adalah 2, b adalah 2, dan tmp adalah 1, 428 00:27:05,210 --> 00:27:11,060 jadi sekarang logis, kita bisa nilai hanya celepuk tmp ke dalam b dan kami sudah selesai. 429 00:27:11,060 --> 00:27:12,800 Jadi kita sudah memecahkan masalah itu. 430 00:27:12,800 --> 00:27:17,720 Sayangnya, ketika saya menjalankan program ini dalam bentuk ini, tidak benar-benar menukar nilai-nilai. 431 00:27:17,720 --> 00:27:20,100 Tapi harus jelas, mengapa? 432 00:27:23,660 --> 00:27:26,450 Aku tetap masalah logis dari beberapa saat yang lalu, 433 00:27:26,450 --> 00:27:31,020 tapi sekali lagi, jika saya menjalankan program ini, x dan y tetap tidak berubah 434 00:27:31,020 --> 00:27:33,310 pada akhir eksekusi program. 435 00:27:33,310 --> 00:27:37,220 [Komentar mahasiswa terdengar] >> Kami belum kembali apa-apa, jadi itu benar. 436 00:27:37,220 --> 00:27:39,670 Tapi ternyata ada sedikit masalah di sini karena sejauh ini, 437 00:27:39,670 --> 00:27:44,170 satu-satunya hal yang kita sudah bisa kembali adalah satu hal, dan ini merupakan pembatasan C. 438 00:27:44,170 --> 00:27:49,070 Anda hanya dapat kembali benar-benar satu nilai, dalam hal ini aku seperti terjebak di sini 439 00:27:49,070 --> 00:27:53,310 karena saya bisa mengembalikan nilai baru x atau saya bisa mengembalikan nilai baru y, 440 00:27:53,310 --> 00:27:55,190 tapi aku ingin kembali keduanya. 441 00:27:55,190 --> 00:27:58,650 Jadi kembali ini bukan solusi sederhana di sini. 442 00:27:58,650 --> 00:28:01,710 Tapi masalahnya fundamental adalah mengapa? Apa yang telah kita benar-benar bertukar? 443 00:28:01,710 --> 00:28:04,190 [Mahasiswa] dan b. >> A dan b. 444 00:28:04,190 --> 00:28:08,230 Tapi a dan b adalah salinan dari x dan y, yang berarti kita hanya melakukan semua pekerjaan ini, 445 00:28:08,230 --> 00:28:11,650 kami hanya menghabiskan 3 menit berbicara tentang fungsi swap dan semua 3 variabel tersebut, 446 00:28:11,650 --> 00:28:15,420 dan itu hebat, sempurna benar dalam isolasi, 447 00:28:15,420 --> 00:28:20,740 tapi ruang lingkup dan b hanya dalam baris-baris di sini. 448 00:28:20,740 --> 00:28:24,790 >> Jadi sama seperti untuk loop, jika Anda mendeklarasikan integer i dalam untuk loop, 449 00:28:24,790 --> 00:28:28,760 sama, jika Anda menyatakan dalam a dan b fungsi yang telah Anda tulis, 450 00:28:28,760 --> 00:28:33,320 mereka hanya di dalam fungsi yang berlaku, yang berarti secepat swap dilakukan mengeksekusi 451 00:28:33,320 --> 00:28:38,470 dan kami pergi dari baris ke baris 24 25, x dan y belum berubah sama sekali. 452 00:28:38,470 --> 00:28:42,790 Anda hanya menyia-nyiakan banyak waktu swapping salinan variabel. 453 00:28:42,790 --> 00:28:47,010 Jadi ternyata bahwa solusi untuk ini sebenarnya tidak jelas. 454 00:28:47,010 --> 00:28:50,670 Ini tidak cukup memadai untuk mengembalikan nilai-nilai karena kita hanya bisa mengembalikan 1 value, 455 00:28:50,670 --> 00:28:53,470 dan aku benar-benar ingin menukar kedua x dan y pada saat yang sama, 456 00:28:53,470 --> 00:28:55,210 jadi kita akan harus kembali ke ini. 457 00:28:55,210 --> 00:29:01,020 Tapi untuk saat ini, menyadari bahwa masalah fundamental berasal dari fakta bahwa a dan b adalah salinan 458 00:29:01,020 --> 00:29:03,630 dan mereka berada dalam lingkup mereka sendiri. 459 00:29:03,630 --> 00:29:05,050 Mari kita coba untuk memecahkan masalah ini dalam beberapa cara. 460 00:29:05,050 --> 00:29:11,250 Biarkan saya benar-benar gulir kembali ke sini dan membuka, katakanlah, varian keempat ini, buggy4. 461 00:29:11,250 --> 00:29:13,370 Bagaimana ini? 462 00:29:13,370 --> 00:29:17,810 Ini adalah masalah serupa tetapi sederhana untuk melihat sebelum kita mengambil bacokan di memecahkannya. 463 00:29:17,810 --> 00:29:24,190 Program ini disebut kenaikan, dan itu tampaknya menginisialisasi integer x untuk 1 di baris 18. 464 00:29:24,190 --> 00:29:28,150 Saya kemudian mengklaim x adalah 1, saya kemudian mengklaim "Incrementing ..." 465 00:29:28,150 --> 00:29:33,730 Saya kemudian memanggil kenaikan, namun kemudian di baris 22 dan 23, saya menyatakan itu sudah bertambah, 466 00:29:33,730 --> 00:29:40,220 Saya mengklaim x sekarang apapun itu - 2, mungkin - tapi program ini adalah kereta. 467 00:29:40,220 --> 00:29:42,610 Apa masalahnya? 468 00:29:43,440 --> 00:29:50,160 Ya. >> [Respon siswa terdengar] >> Tepat. 469 00:29:50,160 --> 00:29:52,490 Jadi x telah dinyatakan, jelas, on line 18. 470 00:29:52,490 --> 00:29:54,700 Yang ada di dalam kurung kurawal utama itu. 471 00:29:54,700 --> 00:29:58,440 Jadi jawaban sederhana di sini adalah bahwa sementara ada di sini x, 472 00:29:58,440 --> 00:30:03,930 itu tidak ada di baris 32, sehingga program ini benar-benar bahkan tidak akan mengkompilasi. 473 00:30:03,930 --> 00:30:07,940 Compiler ketika saya mencoba mengkompilasi kode ini akan berteriak padaku 474 00:30:07,940 --> 00:30:14,100 tentang beberapa identifier dideklarasikan atau sesuatu seperti itu. Bahkan, mari kita coba. 475 00:30:14,100 --> 00:30:18,470 Ini adalah membuat buggy4. Ada itu. 476 00:30:18,470 --> 00:30:22,110 Penggunaan 'x' identifier dideklarasikan di baris 32. 477 00:30:22,110 --> 00:30:25,580 Dan sebenarnya, mari kita lebih eksplisit di sini hari ini sehingga ini berguna 478 00:30:25,580 --> 00:30:27,580 dalam jam kantor dan di rumah. 479 00:30:27,580 --> 00:30:29,300 >> Perhatikan bahwa itu agak samar tertulis. 480 00:30:29,300 --> 00:30:37,270 Tapi fakta bahwa dentang memiliki berteriak pada kita, mengatakan buggy4.c: 32:5, benar-benar berguna. 481 00:30:37,270 --> 00:30:42,050 Ini berarti bahwa kesalahan adalah on line 32 pada posisi karakter 5. 482 00:30:42,050 --> 00:30:46,700 Jadi 1, 2, 3, 4, 5. Itu, pada kenyataannya, di mana masalahnya. 483 00:30:46,700 --> 00:30:49,790 Dan juga, juga, perlu diingat pada jam kantor dan di rumah, aku beruntung di sini. 484 00:30:49,790 --> 00:30:52,990 Saya punya satu kesalahan. Ini akan relatif mudah untuk memperbaikinya. 485 00:30:52,990 --> 00:30:55,990 Tetapi jika Anda mendapatkan seluruh layar penuh pesan kesalahan besar, 486 00:30:55,990 --> 00:31:00,330 lagi menyadari bahwa yang paling bawah mungkin saja gejala yang paling atas. 487 00:31:00,330 --> 00:31:03,450 Jadi selalu memburu bug Anda dari atas ke bawah 488 00:31:03,450 --> 00:31:05,820 karena mungkin saja ada efek rantai daisy 489 00:31:05,820 --> 00:31:09,240 yang menyarankan Anda memiliki masalah cara yang lebih dari yang Anda benar-benar melakukan. 490 00:31:09,240 --> 00:31:15,150 Jadi bagaimana kita bisa memperbaiki ini jika tujuan saya adalah untuk kenaikan x? >> [Mahasiswa] Membuat x global. 491 00:31:15,150 --> 00:31:17,060 Oke, jadi kita bisa membuat x global. 492 00:31:17,060 --> 00:31:20,480 Mari kita mengambil jalan pintas yang saya memperingatkan tentang sebelumnya, tapi heck, kita hanya perlu memperbaiki cepat, 493 00:31:20,480 --> 00:31:25,730 jadi mari kita katakan x int di sini. Itu membuat x global. 494 00:31:25,730 --> 00:31:31,800 Jadi sekarang utama memiliki akses ke sana dan kenaikan telah akses ke sana, 495 00:31:31,800 --> 00:31:34,110 dan jadi izinkan saya pergi ke depan dan kompilasi ini sekarang. 496 00:31:34,110 --> 00:31:37,630 Membuat buggy4, Enter. Sepertinya untuk mengkompilasi sekarang. 497 00:31:37,630 --> 00:31:41,230 Mari kita jalankan buggy4. Dan tampaknya benar-benar bekerja. 498 00:31:41,230 --> 00:31:45,150 Ini adalah salah satu dari hal-hal yang lakukan seperti yang saya katakan, bukan seperti yang saya lakukan, 499 00:31:45,150 --> 00:31:47,010 karena saya baru saja dilakukan di sini, karena pada umumnya, 500 00:31:47,010 --> 00:31:50,440 program kami akan mendapatkan jauh lebih menarik dan lebih lama dari ini, 501 00:31:50,440 --> 00:31:56,390 dan jika solusi Anda untuk masalah hidup yang hanya menempatkan semua variabel di bagian atas file Anda, 502 00:31:56,390 --> 00:31:59,690 sangat cepat melakukan program mendapatkan mengerikan sulit untuk mengelola. 503 00:31:59,690 --> 00:32:02,190 Ini akan sulit untuk memikirkan nama variabel baru, 504 00:32:02,190 --> 00:32:05,240 semakin sulit untuk memahami apa variabel yang melakukan apa, 505 00:32:05,240 --> 00:32:08,460 dan sebagainya secara umum, ini bukan solusi yang baik. 506 00:32:08,460 --> 00:32:10,030 Jadi mari kita lakukan ini lebih baik. 507 00:32:10,030 --> 00:32:12,160 Kami tidak ingin menggunakan variabel global di sini. 508 00:32:12,160 --> 00:32:16,240 >> Saya ingin kenaikan x, jadi saya jelas bisa - 509 00:32:16,240 --> 00:32:18,670 pada akhir hari, ini adalah jenis cerita konyol karena kita hanya melakukan hal ini - 510 00:32:18,670 --> 00:32:24,450 tetapi jika aku tidak tahu tentang Operator itu atau saya tidak diizinkan untuk mengubahnya dalam main sendiri, 511 00:32:24,450 --> 00:32:30,730 bagaimana lagi yang bisa saya menerapkan Ken di sini kali ini bukan untuk kubus tetapi untuk kenaikan? 512 00:32:31,380 --> 00:32:33,190 Bagaimana cara mengubah hal ini di sini? Ya. 513 00:32:33,190 --> 00:32:38,480 [Mahasiswa] Tiket di x dan kemudian kembali [tak terdengar] >> Oke, baik. 514 00:32:38,480 --> 00:32:41,900 Jadi kenapa tidak saya lulus dalam x dan kemudian daripada mengembalikannya, 515 00:32:41,900 --> 00:32:44,870 kenapa tidak aku hanya kembali x + 1. 516 00:32:44,870 --> 00:32:47,710 Beberapa hal lebih harus mengubah sini. Aku di jalur yang benar. 517 00:32:47,710 --> 00:32:49,770 Apa lagi yang harus saya Tweak? Orang lain. Ya. 518 00:32:49,770 --> 00:32:51,740 [Respon siswa tidak terdengar] 519 00:32:51,740 --> 00:32:54,730 Saya perlu mengubah jenis kembalinya selisih karena tidak membatalkan. 520 00:32:54,730 --> 00:32:57,780 Void berarti apa-apa dikembalikan, tapi jelas sekarang adalah, 521 00:32:57,780 --> 00:32:59,830 jadi ini kebutuhan untuk mengubah - >> [mahasiswa] int. 522 00:32:59,830 --> 00:33:02,740 int untuk konsisten dengan apa yang aku benar-benar kembali. 523 00:33:02,740 --> 00:33:05,180 Sekarang sesuatu yang lain masih kereta di sini. Ya. 524 00:33:05,180 --> 00:33:08,400 [Respon siswa terdengar] >> [Malan] Jadi saya perlu untuk kenaikan x? 525 00:33:08,400 --> 00:33:12,080 [Respon siswa terdengar] >> [Malan] Ah, jadi saya harus lulus x. 526 00:33:12,080 --> 00:33:16,660 Jadi saya harus melakukannya di sini. >> [Komentar siswa tidak terdengar] 527 00:33:16,660 --> 00:33:20,050 [Malan] Jadi prototipe, saya harus mengubah ini di sini. 528 00:33:20,050 --> 00:33:22,930 Jadi ini harus menjadi int, ini harus menjadi - 529 00:33:22,930 --> 00:33:25,620 hmm, aku benar-benar memiliki bug di sini. Mari kita perbaiki ini yang pertama. 530 00:33:25,620 --> 00:33:29,590 Apa yang harus ini benar-benar menjadi? Ini harus menjadi sesuatu yang int. 531 00:33:29,590 --> 00:33:32,700 Bisa jadi x, tapi terus terang, jika Anda mulai memanggil semua x variabel Anda, 532 00:33:32,700 --> 00:33:35,390 itu akan mendapatkan kurang dan kurang jelas yang mana. 533 00:33:35,390 --> 00:33:39,560 >> Jadi mari kita sembarangan memilih konvensi penamaan yang berbeda untuk fungsi pembantu saya, 534 00:33:39,560 --> 00:33:41,940 fungsi aku menulis. Kita akan menyebutnya, atau kita bisa menyebutnya - 535 00:33:41,940 --> 00:33:45,010 Mari kita menyebutnya nomor menjadi lebih eksplisit. 536 00:33:45,010 --> 00:33:47,560 Jadi kemudian aku harus kembali apapun jumlahnya ditambah 1, 537 00:33:47,560 --> 00:33:50,740 dan sekarang saya harus mengubah 1 hal lain di sini dan satu hal lainnya di sini. 538 00:33:50,740 --> 00:33:54,350 Apa yang saya harus mengubah on line 21 pertama? >> [Respon siswa tidak terdengar] 539 00:33:54,350 --> 00:33:57,610 [Malan] saya harus menetapkan ke x. Aku tidak bisa hanya memanggil kenaikan (x). 540 00:33:57,610 --> 00:34:01,960 Saya perlu mengingat jawaban dengan mengubah nilai x di sisi kiri. 541 00:34:01,960 --> 00:34:04,680 Dan meskipun x sekarang di sebelah kiri dan kanan, itu benar-benar baik-baik saja 542 00:34:04,680 --> 00:34:08,860 karena sisi kanan dijalankan pertama kemudian akan menjatuhkan ke hal kiri - 543 00:34:08,860 --> 00:34:10,600 x dalam kasus ini. 544 00:34:10,600 --> 00:34:12,159 Dan kemudian yang terakhir, ini adalah memperbaiki mudah sekarang. 545 00:34:12,159 --> 00:34:17,230 Ini hanya harus sesuai apa yang di bawah, nomor int. 546 00:34:17,230 --> 00:34:20,570 Jadi sejumlah besar perubahan untuk fungsi benar-benar bodoh 547 00:34:20,570 --> 00:34:24,420 tetapi wakil dari hal-hal yang kita akan semakin ingin lakukan. 548 00:34:24,420 --> 00:34:27,090 Jadi membuat buggy4. Saya sudah kacau di suatu tempat. 549 00:34:27,090 --> 00:34:30,139 Oh, Tuhan. Lima kesalahan dalam program 6-line. 550 00:34:30,139 --> 00:34:35,690 Jadi apa yang salah pada baris 18, karakter 5? 551 00:34:35,690 --> 00:34:39,610 Jadi saya harus menyatakan ini int,. 552 00:34:39,610 --> 00:34:41,920 Mari kita lihat. Ada sejumlah kesalahan lainnya. 553 00:34:41,920 --> 00:34:47,010 Oh, Tuhanku - 19, 18, 21 - tapi sekali lagi, mari kita membersihkan layar, L Kontrol sini, 554 00:34:47,010 --> 00:34:49,380 dan memutarkan dentang. 555 00:34:49,380 --> 00:34:51,340 Jadi 5 masalah sebenarnya hanya bahwa 1. 556 00:34:51,340 --> 00:34:57,520 Jadi sekarang mari kita jalankan buggy4, Enter. Wah, x telah bertambah dengan benar. 557 00:34:57,520 --> 00:35:02,720 Baiklah. Setiap pertanyaan tentang bagaimana untuk kenaikan angka? Ya. 558 00:35:02,720 --> 00:35:09,870 [Pertanyaan siswa tidak terdengar] >> Pertanyaan bagus. 559 00:35:09,870 --> 00:35:14,220 Bagaimana mungkin aku bisa mengubah x ke nomor dan program akan segera mengetahui? 560 00:35:14,220 --> 00:35:16,200 >> Sekali lagi, menganggapnya sebagai abstraksi ini. 561 00:35:16,200 --> 00:35:21,600 Jadi jika saya utama dan Ken adalah kenaikan, terus terang, saya tidak peduli apa yang Ken panggilan iPad nya. 562 00:35:21,600 --> 00:35:26,570 Saya tidak peduli apa yang dia sebut sesuatu yang ada hubungannya dengan pelaksanaan nya fungsi ini. 563 00:35:26,570 --> 00:35:33,340 Ini adalah detail pelaksanaan yang saya, utama, tidak perlu peduli. 564 00:35:33,340 --> 00:35:38,250 Dan sehingga hanya mengubah secara konsisten dalam fungsi - jumlah di sini dan nomor di sini - 565 00:35:38,250 --> 00:35:40,960 adalah semua yang diperlukan selama aku mengkompilasi ulang. 566 00:35:40,960 --> 00:35:44,180 Ini semacam seperti jika Anda berpikir tentang banyak dari kita, bagi anda dengan SIM 567 00:35:44,180 --> 00:35:46,770 yang telah didorong atau jika Anda bahkan didorong dalam mobil, 568 00:35:46,770 --> 00:35:50,950 kebanyakan dari kita tidak tahu bagaimana mobil bekerja di bawah kap mesin. 569 00:35:50,950 --> 00:35:54,970 Dan harfiah, jika Anda membuka kap, kebanyakan dari kita - termasuk saya sendiri - 570 00:35:54,970 --> 00:35:56,940 tidak akan benar-benar tahu apa yang kita sedang melihat, 571 00:35:56,940 --> 00:35:59,220 jenis seperti Anda mungkin merasa dengan hal-hal seperti ini sekarang. 572 00:35:59,220 --> 00:36:01,480 Tapi kita tidak benar-benar harus peduli bagaimana mobil bekerja, 573 00:36:01,480 --> 00:36:05,970 kita tidak harus peduli apa semua batang dan piston dan kabel dalam mobil 574 00:36:05,970 --> 00:36:08,160 yang sebenarnya dilakukan. 575 00:36:08,160 --> 00:36:12,770 Jadi sesuatu seperti apa yang Anda sebut piston tidak penting di sini dalam kasus ini. Ide yang sama. 576 00:36:12,770 --> 00:36:25,300 Ya. >> [Pertanyaan siswa tidak terdengar] 577 00:36:25,300 --> 00:36:29,180 Jika ada menggunakan lebih dari saat xa variabel lalu, 578 00:36:29,180 --> 00:36:32,150 Anda, programmer, harus mengubah mereka di mana-mana. 579 00:36:32,150 --> 00:36:36,600 Atau Anda benar-benar bisa melakukan File, Menu, dan kemudian Cari, Ganti - sesuatu seperti itu - 580 00:36:36,600 --> 00:36:39,170 tetapi Anda akan harus membuat perubahan sendiri. 581 00:36:39,170 --> 00:36:47,450 Anda harus konsisten. >> [Mahasiswa] Jika ada beberapa variabel [tak terdengar] 582 00:36:47,450 --> 00:36:53,100 Sebuah urutan tertentu seperti di sini, jika ini adalah int nomor lain? >> [Mahasiswa] Benar. 583 00:36:53,100 --> 00:36:56,590 [Malan] Ya. Agar penting ketika Anda memanggil fungsi. 584 00:36:56,590 --> 00:37:00,050 >> Jadi jika saya memanggil peningkatan sini dengan sesuatu sesuatu koma, 585 00:37:00,050 --> 00:37:01,680 ada pemetaan langsung. 586 00:37:01,680 --> 00:37:05,690 Variabel pertama, apa pun namanya, dibuat salinan dari argumen pertama di sini. 587 00:37:05,690 --> 00:37:07,760 Maaf. Hal ini seharusnya tidak menjadi kurung. 588 00:37:07,760 --> 00:37:11,490 Garis Argumen kedua dengan yang kedua. Jadi urutan, ya, hal. Baiklah. 589 00:37:11,490 --> 00:37:17,020 Maaf. Saya mengambil jalan panjang untuk sampai ke sana. Pertanyaan lain? Baiklah. 590 00:37:17,020 --> 00:37:20,610 Jadi mari kita lihat apakah kita tidak bisa melukiskan gambaran apa yang sebenarnya terjadi di sini 591 00:37:20,610 --> 00:37:23,090 bawah kap mesin, sehingga untuk berbicara. 592 00:37:23,090 --> 00:37:26,640 Ini adalah persegi panjang yang mungkin mewakili memori komputer Anda. 593 00:37:26,640 --> 00:37:30,970 Bahkan jika Anda tidak tahu bagaimana memori bekerja atau bagaimana RAM bekerja, 594 00:37:30,970 --> 00:37:33,940 setidaknya berasumsi bahwa Anda memiliki tandan itu hari ini. 595 00:37:33,940 --> 00:37:36,280 Anda punya megabyte itu, Anda punya gigabyte itu, 596 00:37:36,280 --> 00:37:40,870 dan kita tahu dari minggu 0 byte yang adalah hanya apa? >> [Mahasiswa] 8 bit. 597 00:37:40,870 --> 00:37:42,950 8 bit, kan? Jadi 8 nol dan 1. 598 00:37:42,950 --> 00:37:45,880 Jadi jika komputer Anda memiliki pertunjukan RAM, 2 gigs of RAM hari ini, 599 00:37:45,880 --> 00:37:55,030 Anda memiliki miliar atau 2 miliar byte memori atau sekitar 8 miliar atau 16 milyar bit 600 00:37:55,030 --> 00:37:56,890 dalam komputer Anda. 601 00:37:56,890 --> 00:38:00,590 Berbeda dengan contoh Willy kecil Wooly, itu bukan partikel magnetik biasanya lagi. 602 00:38:00,590 --> 00:38:04,450 Semakin - di laptop setidaknya - itu solid state drive, SSD, 603 00:38:04,450 --> 00:38:08,580 yang hanya memiliki bagian yang bergerak. Ini semua elektronik. Ini semua listrik berbasis. 604 00:38:08,580 --> 00:38:14,060 Jadi pikirkan persegi panjang ini hanya sebagai mewakili 1 atau 2 gigabyte memori yang Anda miliki. 605 00:38:14,060 --> 00:38:16,020 >> Jadi sepotong memori. 606 00:38:16,020 --> 00:38:19,830 Dunia ilmu komputer telah semacam dipartisi 607 00:38:19,830 --> 00:38:22,950 potongan memori untuk melakukan hal yang berbeda. 608 00:38:22,950 --> 00:38:27,190 Misalnya, jika ini adalah RAM komputer Anda, seperti yang disarankan oleh persegi panjang di sana, 609 00:38:27,190 --> 00:38:31,130 ternyata bahwa dengan konvensi, di bagian atas RAM Anda, sehingga untuk berbicara, 610 00:38:31,130 --> 00:38:33,660 umumnya apa yang disebut segmen teks. 611 00:38:33,660 --> 00:38:36,740 Mereka adalah 0s dan 1s yang telah disusun. 612 00:38:36,740 --> 00:38:39,020 Jadi ketika kita telah melihat di bawah kap pada apa a.out adalah, 613 00:38:39,020 --> 00:38:41,980 semua 0s dan 1s, ketika Anda menjalankan sebuah program, 614 00:38:41,980 --> 00:38:46,290 mereka 0s dan 1s yang diambil dari hard drive Anda ke sesuatu yang disebut RAM, 615 00:38:46,290 --> 00:38:49,320 dan RAM mereka diletakkan di atas. 616 00:38:49,320 --> 00:38:52,770 Sementara itu, Anda memiliki hal-hal lain: menginisialisasi data, uninitialize data. 617 00:38:52,770 --> 00:38:57,510 Mereka 2 petak memori mengacu pada variabel global, yang Anda tidak sering menggunakan 618 00:38:57,510 --> 00:39:00,760 tapi kadang-kadang jika Anda melakukannya, mereka akhirnya sampai di sana juga. 619 00:39:00,760 --> 00:39:04,260 Lalu ada beberapa hal lain: variabel lingkungan, yang kita tidak akan menghabiskan banyak waktu pada, 620 00:39:04,260 --> 00:39:06,860 tapi kemudian 2 hal penting yang akan datang kembali sepanjang semester, 621 00:39:06,860 --> 00:39:08,550 stack dan heap. 622 00:39:08,550 --> 00:39:12,210 Jadi sebagian besar memori komputer Anda dicadangkan ketika menjalankan program 623 00:39:12,210 --> 00:39:15,370 untuk sesuatu yang disebut stack dan sesuatu yang disebut tumpukan. 624 00:39:15,370 --> 00:39:18,840 Kami tidak akan berbicara tentang tumpukan saat ini, tapi kami akan berbicara tentang stack. 625 00:39:18,840 --> 00:39:24,600 Tumpukan dimaksudkan untuk menyulap visual dari nampan dining hall makan di Mather Rumah 626 00:39:24,600 --> 00:39:28,110 atau di mana pun Anda berada di mana staf ruang makan bersih mereka setiap hari, 627 00:39:28,110 --> 00:39:30,180 mereka menumpuk mereka dari lantai ke atas, 628 00:39:30,180 --> 00:39:34,550 dan sama, dalam memori, ada ide menempatkan sesuatu pada stack, 629 00:39:34,550 --> 00:39:36,860 meletakkan sesuatu di tumpukan, meletakkan sesuatu di tumpukan. 630 00:39:36,860 --> 00:39:38,240 Dan apa yang kita maksudkan dengan ini? 631 00:39:38,240 --> 00:39:41,860 >> Mari kita zoom in pada hanya bagian bawah gambar ini, RAM komputer Anda, 632 00:39:41,860 --> 00:39:44,330 mengusulkan berikut. 633 00:39:44,330 --> 00:39:48,170 Ternyata bahwa ketika Anda menjalankan program seperti a.out atau Halo - 634 00:39:48,170 --> 00:39:50,100 program apa pun adalah bahwa Anda sudah menulis - 635 00:39:50,100 --> 00:39:54,020 lagi, mereka 0s dan 1s yang diambil dari hard drive Anda, yang penyimpanan jangka panjang, 636 00:39:54,020 --> 00:39:57,230 tetap ada bahkan ketika Anda menarik steker, dimuat ke RAM. 637 00:39:57,230 --> 00:40:00,610 RAM lebih cepat daripada hard drive - itu lebih kecil dari hard drive - 638 00:40:00,610 --> 00:40:03,300 tapi itu di mana program hidup saat Anda sedang menjalankan mereka. 639 00:40:03,300 --> 00:40:08,230 Jadi Anda klik dua kali sebuah program pada Mac atau PC, itu diambil dari hard drive ke dalam RAM. 640 00:40:08,230 --> 00:40:11,520 Segera setelah itu dimuat ke dalam RAM, go 0s dan 1s di atas jalan, 641 00:40:11,520 --> 00:40:16,610 segmen teks yang disebut, tapi kemudian segera setelah program Anda benar-benar mulai berjalan, 642 00:40:16,610 --> 00:40:21,360 fungsi utama disebut, dan utama, seperti yang kita lihat, seringkali memiliki variabel lokal, 643 00:40:21,360 --> 00:40:24,870 dan memiliki ints dan string dan karakter dan sejenisnya. 644 00:40:24,870 --> 00:40:29,180 Jadi jika program anda yang telah Anda tulis atau program yang telah diklik ganda 645 00:40:29,180 --> 00:40:32,970 digunakan beberapa variabel dalam utama, 646 00:40:32,970 --> 00:40:37,240 mereka berakhir di bagian bawah tumpukan memori Anda, sehingga untuk berbicara. 647 00:40:37,240 --> 00:40:39,410 Lebih konkret, apa ini benar-benar berarti? 648 00:40:39,410 --> 00:40:48,450 Ini hanya berarti bahwa jika kita akan ke nomor byte RAM di komputer Anda, 649 00:40:48,450 --> 00:40:55,750 melihat bahwa ini mungkin menjadi nomor byte 0, ini mungkin menjadi nomor 1 byte, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 semua jalan sampai dengan 2 miliar akan semua jalan sampai ada di bagian atas. 651 00:41:01,480 --> 00:41:05,880 Jadi dengan kata lain, ketika kita berbicara tentang RAM atau memori dalam hal byte, 652 00:41:05,880 --> 00:41:11,500 itu hanya berarti bahwa seseorang telah memutuskan apa yang harus menomori masing-masing potongan memori. 653 00:41:11,500 --> 00:41:16,650 Jadi, ketika Anda membutuhkan 32 bit untuk int atau Anda membutuhkan 8 bit untuk char, 654 00:41:16,650 --> 00:41:18,840 di mana mereka berakhir di memori? 655 00:41:18,840 --> 00:41:22,350 >> Secara konseptual, mereka hanya berakhir di bagian bawah hal ini disebut stack. 656 00:41:22,350 --> 00:41:25,870 Tapi apa yang menarik sekarang adalah saat utama memanggil fungsi - 657 00:41:25,870 --> 00:41:28,750 misalkan fungsi yang disebut foo, hanya nama sewenang-wenang - 658 00:41:28,750 --> 00:41:32,330 apa yang terjadi adalah utama adalah di bagian bawah ini tumpukan memori; 659 00:41:32,330 --> 00:41:35,680 foo sekarang diletakkan di atas utama dalam memori. 660 00:41:35,680 --> 00:41:40,990 Jadi setiap variabel lokal yang foo telah berakhir semacam konseptual di atas mereka yang utama. 661 00:41:40,990 --> 00:41:47,070 Jika foo panggilan fungsi lain yang disebut bar, variabel-variabel tersebut berakhir di sini. 662 00:41:47,070 --> 00:41:50,120 Jika bar panggilan sesuatu yang lain, di sini, di sini, di sini. 663 00:41:50,120 --> 00:41:53,830 Jadi apa yang menarik tentang menjalankan sebuah program adalah bahwa ketika Anda memanggil fungsi 664 00:41:53,830 --> 00:41:57,750 dan sebagai fungsi-fungsi memanggil fungsi-fungsi dan sebagai fungsi-fungsi panggilan fungsi, 665 00:41:57,750 --> 00:42:01,470 Anda membangun ini tumpukan fungsi dalam memori. 666 00:42:01,470 --> 00:42:06,890 Dan hanya sekali kembali fungsi Anda mulai mendapatkan memori yang kembali. 667 00:42:06,890 --> 00:42:10,860 Jadi salah satu cara termudah untuk kehabisan memori dalam program komputer 668 00:42:10,860 --> 00:42:14,360 adalah untuk menulis fungsi yang tidak pernah kembali. 669 00:42:14,360 --> 00:42:18,900 Jadi misalnya, mari kita menunjukkan sebanyak dengan program sengaja kereta. 670 00:42:18,900 --> 00:42:22,230 Biarkan aku pergi ke depan dan melakukan # include, 671 00:42:22,230 --> 00:42:25,000 int main (void), 672 00:42:25,000 --> 00:42:32,940 dan aku akan lakukan sementara (2> 1), yang mungkin tidak akan pernah berubah pada kita, 673 00:42:32,940 --> 00:42:37,560 dan biarkan aku pergi ke depan sekarang dan lakukan printf. 674 00:42:37,560 --> 00:42:40,700 Sebenarnya, itu akan menjadi kurang menarik secara visual. Mari kita lakukan ini. 675 00:42:40,700 --> 00:42:50,240 Untuk int i = 0; i> 0 - mari kita membuat kesalahan ini - i + +. 676 00:42:50,240 --> 00:42:52,720 Dan jangan printf sini. Mari kita mempraktekkan apa yang saya berkhotbah. 677 00:42:52,720 --> 00:43:00,190 Mari kita memiliki metode di sini, chorus kosong, dan kita akan mengatakan int i, 678 00:43:00,190 --> 00:43:06,830 dan kemudian aku akan mengatakan printf - tidak, mari kita membuat ini lebih menarik. 679 00:43:06,830 --> 00:43:15,790 Mari kita sebenarnya tidak mencetak apa pun sama sekali. Mari kita lakukan ini: chorus (i). 680 00:43:15,790 --> 00:43:20,390 Baiklah. Jadi ini adalah kereta karena mengapa? 681 00:43:20,390 --> 00:43:23,380 Saya membuat ini sebagai aku pergi karena program ini tidak benar-benar melakukan hal-hal menarik. 682 00:43:23,380 --> 00:43:25,320 >> Tapi itu bukan tujuan. 683 00:43:25,320 --> 00:43:29,630 Tujuannya adalah untuk menulis sebuah program yang fungsi utamanya melakukan apa, rupanya? 684 00:43:30,720 --> 00:43:32,860 Menyebut dirinya. Dan sebenarnya, kita tidak perlu loop. 685 00:43:32,860 --> 00:43:37,200 Mari kita menyederhanakan bahkan ini hanya agar tidak melupakan benar-benar bug mendasar. 686 00:43:37,200 --> 00:43:39,640 Panggilan utama chorus menyanyikan chorus beberapa, 687 00:43:39,640 --> 00:43:41,440 maka saya melakukan sesuatu yang bodoh dan aku punya chorus chorus panggilan 688 00:43:41,440 --> 00:43:43,760 karena saya mengira orang lain yang akan mengimplementasikan itu mungkin, 689 00:43:43,760 --> 00:43:47,210 dan sekarang ini tidak akan mengkompilasi belum. Saya perlu melakukan apa? 690 00:43:47,210 --> 00:43:49,970 Aku butuh prototipe, ingat. 691 00:43:49,970 --> 00:43:56,110 Jadi saya harus memiliki di sini chorus void (int i); 692 00:43:56,110 --> 00:43:59,210 Jadi sekarang kalau aku turun di sini - sebenarnya, mari kita gunakan jendela besar. 693 00:43:59,210 --> 00:44:01,980 Mari kita pergi ke depan dan membuat chorus. 694 00:44:01,980 --> 00:44:06,490 Mari kita pergi ke depan dan membuat chorus. 695 00:44:06,490 --> 00:44:08,370 Penggunaan undeclared identifier i. 696 00:44:08,370 --> 00:44:12,500 Oh, itu bodoh. Kita tidak perlu argumen. Mari kita lakukan ini. 697 00:44:12,500 --> 00:44:16,370 Saya berharap kami sudah mulai dengan cara ini. Ini akan menjadi sebuah program jauh lebih mudah untuk menulis. 698 00:44:16,370 --> 00:44:25,590 Ada. Sekarang mari kita pergi ke jendela terminal saya, jalankan kembali dentang, dan di sini kita pergi. 699 00:44:25,590 --> 00:44:28,460 Itu benar-benar cepat. 700 00:44:28,460 --> 00:44:31,150 Apa yang sebenarnya baru saja terjadi, meskipun? 701 00:44:31,150 --> 00:44:33,730 Nah, sekarang saya akan menambahkan garis cetak sehingga kita dapat melihat. 702 00:44:33,730 --> 00:44:43,490 Izinkan saya mengatakan printf ("Aku di sini") - tidak ada variabel. Kami akan membiarkannya seperti itu. 703 00:44:43,490 --> 00:44:47,480 Biarkan saya jalankan kembali membuat. Biarkan aku memutarkan chorus. 704 00:44:47,480 --> 00:44:57,380 Dan ... ayolah. Terus. 705 00:44:57,380 --> 00:44:59,930 Sebagai samping, mengapa tidak jatuh belum? 706 00:44:59,930 --> 00:45:02,080 Kesalahan segmentasi terjadi super cepat sebelumnya. 707 00:45:02,080 --> 00:45:06,570 [Respon siswa terdengar] >> Tepat. Jadi butuh waktu untuk mencetak, kan? 708 00:45:06,570 --> 00:45:08,610 Ini hanya membutuhkan lebih banyak pekerjaan pada bagian komputer. 709 00:45:08,610 --> 00:45:10,620 Dan ada itu: Segmentation fault. 710 00:45:10,620 --> 00:45:12,340 >> Jadi perhatikan betapa cepat program dijalankan. 711 00:45:12,340 --> 00:45:14,130 Jika Anda tidak mencetak apapun, super cepat. 712 00:45:14,130 --> 00:45:18,770 Tapi kami masih punya kesalahan segmentasi karena apa yang terjadi? 713 00:45:18,770 --> 00:45:21,210 Jika Anda berpikir tentang bagaimana memori komputer Anda diletakkan keluar, 714 00:45:21,210 --> 00:45:28,740 ini terjadi untuk menjadi utama, tapi di sini mari kita sebut chorus ini, dan mari kita sebut chorus ini. 715 00:45:28,740 --> 00:45:34,550 Dan sekarang jika saya melakukan estetika saya benar, ini hanya akan mengatakan chorus, chorus, chorus, 716 00:45:34,550 --> 00:45:40,550 chorus, chorus, chorus, chorus, nauseum iklan, dan akhirnya, apa yang akan terjadi? 717 00:45:40,550 --> 00:45:45,630 Jika gambaran besar, secara harfiah, ini, apa yang baru saja terjadi konseptual? 718 00:45:46,520 --> 00:45:48,630 Overruns tumpukan tumpukan. 719 00:45:48,630 --> 00:45:51,940 Atau, lebih buruk lagi, Anda hanya dibanjiri segala sesuatu, termasuk segmen teks, 720 00:45:51,940 --> 00:45:54,590 yang merupakan 0s dan 1s yang mewakili program anda. 721 00:45:54,590 --> 00:45:57,080 Singkatnya, ini hanya super, buruk super. 722 00:45:57,080 --> 00:45:58,830 Program Anda telah berputar di luar kendali. 723 00:45:58,830 --> 00:46:01,220 Anda menggunakan memori jauh lebih dari yang Anda inginkan 724 00:46:01,220 --> 00:46:03,960 semua karena kesalahan bodoh dalam hal ini, 725 00:46:03,960 --> 00:46:08,040 atau dalam hal ini fungsi yang sangat sengaja dilakukan menamakan dirinya. 726 00:46:08,040 --> 00:46:09,500 Sekarang, hal ini tidak semuanya buruk. 727 00:46:09,500 --> 00:46:13,800 Fungsi menyebut diri mereka sebenarnya memiliki kekuatan besar ketika Anda menggunakannya dengan benar. 728 00:46:13,800 --> 00:46:15,800 Saya belum menggunakannya dengan benar di sini. 729 00:46:15,800 --> 00:46:19,780 Jadi ini tidak semuanya buruk, tapi fakta bahwa saya tidak pernah benar-benar berhenti menyebut diri saya 730 00:46:19,780 --> 00:46:23,520 adalah kelemahan mendasar di sini dari program ini. 731 00:46:23,520 --> 00:46:26,400 Jadi di mana kita pergi dengan semua ini? Apa yang sebenarnya terjadi? 732 00:46:26,400 --> 00:46:30,340 Ketika saya memanggil fungsi kenaikan seperti yang kami lakukan pada mereka contoh, 733 00:46:30,340 --> 00:46:33,420 Aku punya nilai seperti 1 bahwa saya lulus masuk 734 00:46:33,420 --> 00:46:37,570 Saya lulus dalam salinan nomor 1, sehingga berikut ini terjadi. 735 00:46:37,570 --> 00:46:44,240 Mari kita pergi ke contoh kenaikan, ini pria yang tepat di sini. 736 00:46:44,240 --> 00:46:46,870 Berikut adalah apa yang sebenarnya terjadi. 737 00:46:46,870 --> 00:46:53,400 Ketika saya sebut kenaikan dan saya lulus dalam x, pictorially, apa yang terjadi di sini adalah ini. 738 00:46:53,400 --> 00:46:59,520 >> Jika saya memiliki nilai 1 disimpan di sini dan aku benar-benar memanggil kenaikan, 739 00:46:59,520 --> 00:47:04,330 yang sekarang disebut chorus - iPad adalah melempar saya dari sini. 740 00:47:04,330 --> 00:47:09,760 Mari kita sebut kenaikan ini, dan kita tidak tahu apa ini fungsi berikutnya akan menjadi. 741 00:47:09,760 --> 00:47:14,840 Jadi apa yang sebenarnya terjadi di sini di suatu tempat di utama saya memiliki sepotong memori 742 00:47:14,840 --> 00:47:17,000 yang menyimpan nomor 1. 743 00:47:17,000 --> 00:47:19,380 Ketika saya sebut kenaikan, saya menggunakan lain sepotong memori, 744 00:47:19,380 --> 00:47:21,230 tapi sekarang saya memiliki salinan 1. 745 00:47:21,230 --> 00:47:26,660 Ketika saya kenaikan nilai tersebut, ini menjadi 2, 746 00:47:26,660 --> 00:47:30,560 tapi kemudian apa yang terjadi segera setelah kembali kenaikan? 747 00:47:30,560 --> 00:47:33,630 Memori ini hanya akan diserahkan kembali ke sistem operasi, 748 00:47:33,630 --> 00:47:37,450 yang berarti semua yang Anda lakukan adalah apa pun yang berguna. 749 00:47:37,450 --> 00:47:43,120 The 1 yang awalnya terkandung dalam utama masih benar-benar ada. 750 00:47:43,120 --> 00:47:44,890 Jadi di mana kita pergi dengan ini? 751 00:47:44,890 --> 00:47:49,770 Ternyata bahwa dalam memori Anda memiliki urutan back-to-back byte 752 00:47:49,770 --> 00:47:53,050 bahwa Anda dapat menempatkan barang-barang di, dan ternyata kita sudah melihat sesuatu 753 00:47:53,050 --> 00:47:55,390 yang melibatkan menempatkan sesuatu kembali kembali ke belakang ke belakang. 754 00:47:55,390 --> 00:47:59,860 Apa yang dimaksud dengan string berdasarkan pada minggu 1 dan sekarang minggu 2? 755 00:48:00,020 --> 00:48:01,980 Ini hanya kumpulan karakter. 756 00:48:01,980 --> 00:48:04,310 Jadi ternyata sama seperti Anda dapat menempatkan angka dalam memori, 757 00:48:04,310 --> 00:48:06,990 sama bisa Anda menempatkan karakter dalam memori. 758 00:48:06,990 --> 00:48:10,530 Dan sekali kita mulai menempatkan karakter dalam memori kembali untuk kembali ke kembali ke belakang, 759 00:48:10,530 --> 00:48:13,620 ternyata menggunakan sederhana hal-hal seperti untuk loop atau loop sementara, 760 00:48:13,620 --> 00:48:17,170 kita dapat iterate dari kiri ke kanan atas karakter dalam string 761 00:48:17,170 --> 00:48:20,600 dan mulai memijat mereka menjadi karakter yang berbeda sama sekali - 762 00:48:20,600 --> 00:48:23,370 bisa menjadi b, b bisa menjadi c - 763 00:48:23,370 --> 00:48:27,780 sehingga pada akhirnya, kita bisa mengambil sebuah kalimat bahasa Inggris yang benar-benar masuk akal 764 00:48:27,780 --> 00:48:30,310 dan mengkonversi masing-masing huruf satu per satu 765 00:48:30,310 --> 00:48:34,400 dengan berjalan melalui memori komputer kita kiri ke kanan untuk benar-benar mengenkripsi. 766 00:48:34,400 --> 00:48:35,810 Jadi mari kita lima menit istirahat kami di sini, 767 00:48:35,810 --> 00:48:40,730 dan ketika kita kembali, kita akan memulai proses mengacak informasi. 768 00:48:42,020 --> 00:48:43,520 >> Baiklah. 769 00:48:43,520 --> 00:48:48,070 Sebelum kita menyelam ke dalam beberapa kripto dan hal-hal yang disebut array, 770 00:48:48,070 --> 00:48:51,470 biarkan aku berhenti sejenak untuk setiap pertanyaan karena saya merasa seperti aku benar-benar jenis kacau 771 00:48:51,470 --> 00:48:54,080 beberapa topik tersebut. Jadi mari kita perbaiki sekarang jika kita bisa. 772 00:48:54,080 --> 00:48:58,700 Kami hanya berbicara tentang nilai-nilai kembali, kita berbicara tentang argumen, 773 00:48:58,700 --> 00:49:03,250 dan kami berbicara tentang gagasan ini, yang kita akan kembali ke dalam minggu-minggu yang akan datang, 774 00:49:03,250 --> 00:49:08,720 memandang memori sebagai sejumlah besar tersebut nampan ditumpuk, sehingga untuk berbicara, 775 00:49:08,720 --> 00:49:12,660 dari bawah ke atas, sehingga setiap baki yang akan diletakkan di stack 776 00:49:12,660 --> 00:49:16,530 merupakan fungsi yang saat ini sedang dipanggil. 777 00:49:17,900 --> 00:49:20,260 Ada pertanyaan? 778 00:49:20,260 --> 00:49:22,640 Biarkan saya mengajukan pertanyaan di sini. 779 00:49:22,640 --> 00:49:27,890 Biarkan aku menyederhanakan ini kembali ke apa itu sebelum beberapa dari kami Q & A. sebelumnya 780 00:49:27,890 --> 00:49:35,570 Fakta bahwa kenaikan memiliki kurung buka, nomor int, ditutup kurung - 781 00:49:35,570 --> 00:49:39,110 apa nomor int mewakili? 782 00:49:39,110 --> 00:49:42,790 [Mahasiswa] argumen An. >> Argumen An. Oke. Tapi apa argumen? 783 00:49:42,790 --> 00:49:46,370 [Respon siswa terdengar] >> Apa itu? >> [Mahasiswa] Sesuatu yang Anda lulus masuk 784 00:49:46,370 --> 00:49:49,940 Oke, sehingga sesuatu yang Anda lulus masuk Dan lebih umum, itu hanya input. 785 00:49:49,940 --> 00:49:52,450 Jika Anda sedang menulis sebuah fungsi dan tujuan yang berfungsi dalam kehidupan 786 00:49:52,450 --> 00:49:55,770 adalah untuk melakukan sesuatu yang sedikit berbeda setiap kali Anda menggunakannya, 787 00:49:55,770 --> 00:50:00,110 maka satu-satunya cara untuk itu terjadi akan benar-benar tampaknya untuk memberikan itu dengan masukan 788 00:50:00,110 --> 00:50:03,510 sehingga dapat melakukan sesuatu yang berbeda dengan masukan bahwa setiap kali. 789 00:50:03,510 --> 00:50:06,650 >> Jadi, Anda perlu menentukan dua hal ketika sebuah fungsi mengambil input. 790 00:50:06,650 --> 00:50:09,590 Anda perlu menentukan nama yang Anda ingin memberikan masukan yang 791 00:50:09,590 --> 00:50:12,700 murni untuk kenyamanan Anda sendiri sehingga Anda dapat merujuk ke sana 792 00:50:12,700 --> 00:50:16,540 dalam fungsi yang Anda sendiri yang menulis, seperti yang saya lakukan di sini di baris 32. 793 00:50:16,540 --> 00:50:20,800 Tapi Anda juga perlu menentukan jenisnya karena C adalah bahasa pemrograman 794 00:50:20,800 --> 00:50:25,940 yang hanya mensyaratkan bahwa jika Anda ingin variabel, Anda harus memberitahu komputer apa tipe data itu, 795 00:50:25,940 --> 00:50:30,200 sebagian besar sehingga tahu berapa banyak bit untuk mengalokasikan untuk variabel yang 796 00:50:30,200 --> 00:50:33,020 karena bisa jadi 6 - maaf, itu tidak akan menjadi 6. 797 00:50:33,020 --> 00:50:37,080 Hal ini dapat 16, dapat 8, bisa 32, bahkan 64, 798 00:50:37,080 --> 00:50:39,130 namun komputer perlu tahu. 799 00:50:39,130 --> 00:50:43,180 Sekarang, int di sisi kiri mewakili apa, sebaliknya? 800 00:50:46,350 --> 00:50:48,850 [Respon siswa terdengar] >> Apa itu? >> [Mahasiswa] Jenis fungsi. 801 00:50:48,850 --> 00:50:53,610 Jenis fungsi dan, lebih khusus, jenis output. Benar. 802 00:50:53,610 --> 00:50:57,380 Jadi sementara hal dalam kurung merupakan input, jika ada, 803 00:50:57,380 --> 00:50:59,660 hal ke kiri mewakili output. 804 00:50:59,660 --> 00:51:03,530 Dan dalam hal ini, peningkatan rupanya mengembalikan sebuah int, 805 00:51:03,530 --> 00:51:07,690 dan begitu int adalah jenis kembalinya fungsi ini. 806 00:51:07,690 --> 00:51:09,340 Apa artinya untuk kembali? 807 00:51:09,340 --> 00:51:15,090 Secara harfiah, Anda menggunakan kata kunci kembali dan kemudian jika apa yang Anda kembali 808 00:51:15,090 --> 00:51:18,600 di sebelah kanan kata kunci adalah integer, 809 00:51:18,600 --> 00:51:21,660 maka itu memang konsisten dengan apa yang telah kita janjikan. 810 00:51:21,660 --> 00:51:26,410 Anda tidak bisa melakukan sesuatu seperti ini - halo, dunia - karena itu adalah string. 811 00:51:26,410 --> 00:51:28,860 >> Jelas, itu bukan integer. 812 00:51:28,860 --> 00:51:33,140 Jadi singkatnya, beban benar-benar pada kita, programmer, untuk lebih spesifik 813 00:51:33,140 --> 00:51:37,770 untuk apa kita kembali dan kemudian benar-benar pergi tentang mengembalikannya. 814 00:51:37,770 --> 00:51:43,440 Konteks di sini sekarang adalah bahwa memori komputer Anda adalah gigabyte, 2 gigabyte - 815 00:51:43,440 --> 00:51:45,920 apapun - mungkin lebih, mungkin kurang, 816 00:51:45,920 --> 00:51:49,050 tapi komputer memandangnya sebagai memiliki bagian yang berbeda. 817 00:51:49,050 --> 00:51:51,200 Sesuatu turun di sana, sesuatu yang lain terjadi di sana, 818 00:51:51,200 --> 00:51:54,290 hal-hal yang berbeda terjadi di tengah, dan hari ini kita hanya mulai bercerita, 819 00:51:54,290 --> 00:51:56,340 tapi kami akan kembali ke ini dari waktu ke waktu. 820 00:51:56,340 --> 00:51:59,980 Untuk saat ini, satu-satunya memori kita benar-benar peduli adalah segmen teks 821 00:51:59,980 --> 00:52:03,360 karena itu hanya merupakan dentang yang 0s dan 1s telah outputted. 822 00:52:03,360 --> 00:52:06,050 Jadi, ketika Anda menjalankan perintah pada keyboard seperti a.out 823 00:52:06,050 --> 00:52:09,110 atau Anda klik dua kali ikon pada Mac OS atau Windows, 824 00:52:09,110 --> 00:52:11,880 program Anda dimuat dari hard drive Anda ke RAM 825 00:52:11,880 --> 00:52:16,330 dan itu menjatuhkan di bagian atas RAM komputer Anda, sehingga untuk berbicara. 826 00:52:16,330 --> 00:52:20,450 Sementara itu, sebagai program Anda mulai berjalan dan utama dipanggil 827 00:52:20,450 --> 00:52:23,640 dalam program yang Anda tulis atau program Microsoft atau Apple menulis, 828 00:52:23,640 --> 00:52:27,860 salah satu variabel lokal berakhir di sana di bagian bawah memori komputer Anda. 829 00:52:27,860 --> 00:52:33,230 Tetapi jika panggilan utama fungsi lain yang sendiri memiliki variabel atau argumen, mereka berakhir di atasnya. 830 00:52:33,230 --> 00:52:36,680 Dan jika fungsi yang memanggil sesuatu, mereka berakhir di atasnya, di atas, di atasnya. 831 00:52:36,680 --> 00:52:41,460 >> Dan hanya sekali fungsi dilakukan mengeksekusi apakah tumpukan nampan, sehingga untuk berbicara, 832 00:52:41,460 --> 00:52:43,240 mulai mendapatkan rendah dan lebih rendah. 833 00:52:43,240 --> 00:52:48,250 Dan inilah yang kemudian, secara singkat, menjelaskan mengapa ketika Anda menelepon kubus 834 00:52:48,250 --> 00:52:51,550 atau Anda memanggil kenaikan, Anda lewat dalam salinan nilai. 835 00:52:51,550 --> 00:52:55,520 Dan apa artinya pictorially adalah bahwa Anda benar-benar menulis nomor 1 836 00:52:55,520 --> 00:53:00,460 di bagian lain dari memori, perubahan bahwa 1 sampai 2 dalam kasus selisih 837 00:53:00,460 --> 00:53:04,820 atau ke 8 dalam kasus kubus dan kemudian membuang memori yang jauh 838 00:53:04,820 --> 00:53:09,140 segera setelah kenaikan atau kembali kubus fungsi. Pertanyaan. 839 00:53:09,140 --> 00:53:12,900 [Mahasiswa] mana variabel global disimpan? 840 00:53:12,900 --> 00:53:18,100 Variabel global disimpan dalam apa yang saat ini disebut data diinisialisasi atau data uninitialized, 841 00:53:18,100 --> 00:53:21,920 perbedaan yang jika Anda memiliki variabel global dan Anda menetapkan segera nilai 842 00:53:21,920 --> 00:53:24,640 dengan tanda sama, itu berakhir di atas sana, 843 00:53:24,640 --> 00:53:29,200 dan jika Anda hanya mengatakan int x; dengan tidak ada nilai, itu berakhir sedikit lebih rendah di RAM 844 00:53:29,200 --> 00:53:31,710 hanya dengan konvensi. 845 00:53:31,710 --> 00:53:34,940 Pertanyaan lain? Baiklah. 846 00:53:34,940 --> 00:53:37,340 Jadi gambar ini akan datang kembali seperti yang kita dapatkan lebih kuat 847 00:53:37,340 --> 00:53:39,170 dengan apa yang dapat kita lakukan dengan komputer, 848 00:53:39,170 --> 00:53:42,720 tetapi untuk sekarang, mari kita intro singkat untuk kriptografi, 849 00:53:42,720 --> 00:53:46,080 jenis tertentu kriptografi yang tidak memecahkan semua masalah dunia 850 00:53:46,080 --> 00:53:47,720 tetapi tidak memecahkan beberapa dari mereka. 851 00:53:47,720 --> 00:53:51,700 Dalam hal ini di sini, kita memiliki sesuatu yang disebut rahasia kriptografi kunci. 852 00:53:51,700 --> 00:53:56,410 Rahasia-kunci kriptografi, seperti namanya, berasal dari keamanan rahasia. 853 00:53:56,410 --> 00:54:00,690 >> Misalnya, jika Anda sudah kembali di sekolah dasar dan Anda sedang melewati sebuah surat rahasia sedikit cinta 854 00:54:00,690 --> 00:54:04,850 untuk anak laki-laki atau perempuan Anda menghancurkan, jika Anda ingin lulus catatan bahwa melalui penonton, 855 00:54:04,850 --> 00:54:08,380 Anda mungkin tidak akan menulis seperti catatan dalam bahasa Inggris atau apa pun bahasa asli Anda. 856 00:54:08,380 --> 00:54:13,340 Sebaliknya, Anda mungkin mengenkripsi atau Anda mungkin hanya mengirim pesan teks hari ini. 857 00:54:13,340 --> 00:54:15,460 Tapi Anda mungkin benar-benar melewati mereka catatan seluruh kelas. 858 00:54:15,460 --> 00:54:18,700 Dan untuk melakukan hal ini dengan aman sedemikian rupa sehingga Anda teman dan guru 859 00:54:18,700 --> 00:54:22,650 tidak tahu apa yang Anda tulis, Anda mungkin datang dengan algoritma yang cukup sederhana, 860 00:54:22,650 --> 00:54:25,920 muda meskipun Anda mungkin, hanya berebut kata-kata. 861 00:54:25,920 --> 00:54:28,130 Jadi, bukannya menulis Anda mungkin menulis b, 862 00:54:28,130 --> 00:54:30,220 bukan b Anda mungkin menulis c, 863 00:54:30,220 --> 00:54:32,140 bukannya c Anda mungkin menulis d, dan sebagainya. 864 00:54:32,140 --> 00:54:34,360 Atau Anda bisa datang dengan terjemahan yang lebih canggih 865 00:54:34,360 --> 00:54:36,720 surat kepada huruf yang berbeda. 866 00:54:36,720 --> 00:54:39,740 Tapi menangkap adalah anak laki-laki atau perempuan kepada siapa Anda mengirim catatan ini 867 00:54:39,740 --> 00:54:45,020 kebutuhan untuk mengetahui sesuatu, yang adalah apa, jelas? >> [Mahasiswa] Apa yang Anda kirim. 868 00:54:45,020 --> 00:54:49,720 Apa rahasia Anda, seperti apa itu pemetaan antara a dan b dan c dan s d's. 869 00:54:49,720 --> 00:54:54,650 Apakah itu hanya menambahkan 1 ke masing-masing huruf untuk pergi dari a ke b, b ke c? 870 00:54:54,650 --> 00:54:56,670 Apakah lebih kompleks dari itu? 871 00:54:56,670 --> 00:55:01,540 >> Jadi, Anda dan menghancurkan Anda perlu memiliki informasi rahasia, 872 00:55:01,540 --> 00:55:03,190 tapi ada semacam catch-22 di sini. 873 00:55:03,190 --> 00:55:06,830 Jika ini adalah pertama kalinya Anda mengirimkan surat cinta melalui kelas, 874 00:55:06,830 --> 00:55:10,720 bagaimana adalah bahwa laki-laki atau perempuan akan tahu apa rahasia bahkan ini? 875 00:55:10,720 --> 00:55:13,930 Jadi rahasia-key kripto tidak memecahkan semua masalah dunia, 876 00:55:13,930 --> 00:55:16,320 dan sebenarnya ada hubungan di sini bahwa kami akan kembali ke menjelang akhir semester. 877 00:55:16,320 --> 00:55:25,110 Demikian pula jangan kebanyakan dari kita tidak tahu seseorang yang bekerja, misalnya, di Amazon.com, 878 00:55:25,110 --> 00:55:28,190 dan belum banyak dari kita mungkin membeli barang-barang di Amazon.com, 879 00:55:28,190 --> 00:55:31,990 dan kami telah diajarkan untuk menganggap bahwa transaksi e-commerce yang aman. 880 00:55:31,990 --> 00:55:36,470 URL ini mungkin mengatakan https, ada mungkin ikon gembok konyol kecil di suatu tempat, 881 00:55:36,470 --> 00:55:39,930 ada beberapa jenis kriptografi mengamankan informasi kartu kredit Anda 882 00:55:39,930 --> 00:55:42,160 antara Anda dan Amazon.com. 883 00:55:42,160 --> 00:55:45,430 Namun jika kriptografi melibatkan mengetahui rahasia beberapa 884 00:55:45,430 --> 00:55:48,620 namun saya tidak tahu siapa pun di Amazon dan saya sudah pasti tidak mengatur apapun rahasia 885 00:55:48,620 --> 00:55:52,710 dengan seseorang di Amazon, bagaimana komputer saya atau browser saya melakukan hal ini? 886 00:55:52,710 --> 00:55:55,720 Ternyata ada jenis lain sama sekali kriptografi yang memecahkan masalah itu. 887 00:55:55,720 --> 00:55:57,670 Tapi untuk saat ini, kita akan fokus pada satu sederhana 888 00:55:57,670 --> 00:56:00,290 di mana Anda dapat mengatur di muka untuk mengetahui beberapa rahasia 889 00:56:00,290 --> 00:56:03,760 seperti +1 atau beberapa pemetaan antara a dan b. 890 00:56:03,760 --> 00:56:05,840 Dan proses kriptografi umumnya melibatkan ini. 891 00:56:05,840 --> 00:56:08,620 Anda memiliki beberapa teks biasa, digambarkan di sini, di sebelah kiri, 892 00:56:08,620 --> 00:56:12,930 Anda menjalankannya melalui beberapa jenis algoritma atau prosedur untuk mengenkripsi itu - 893 00:56:12,930 --> 00:56:15,100 mungkin itu hanya menjadi b, b menjadi c - 894 00:56:15,100 --> 00:56:17,490 dan kemudian Anda berakhir dengan ciphertext. 895 00:56:17,490 --> 00:56:20,380 Sementara itu, setelah menghancurkan Anda menerima catatan ini rahasia, 896 00:56:20,380 --> 00:56:24,200 ia harus kemudian mendekripsi dengan umumnya membalikkan algoritma yang 897 00:56:24,200 --> 00:56:27,190 sehingga untuk mendapatkan kembali teks biasa. 898 00:56:27,190 --> 00:56:28,960 Ada inkarnasi fisik ini. 899 00:56:28,960 --> 00:56:31,680 >> Sebagai contoh, ini adalah sebuah cincin rahasia kecil decoder, 900 00:56:31,680 --> 00:56:35,110 dan ini adalah sebuah cincin dalam arti bahwa ada dua cepat di sini. 901 00:56:35,110 --> 00:56:38,490 Di pinggiran luar dari hal ini, ada huruf A sampai Z, 902 00:56:38,490 --> 00:56:40,340 meskipun mereka secara acak, 903 00:56:40,340 --> 00:56:42,880 dan di dalam, sebenarnya ada beberapa nomor 904 00:56:42,880 --> 00:56:46,620 sehingga dengan cincin ini Anda dapat mengubah jenis luar tetapi tidak dalam 905 00:56:46,620 --> 00:56:49,140 dalam rangka untuk berbaris angka dengan huruf. 906 00:56:49,140 --> 00:56:53,020 Dari film berjudul A Christmas Story, Anda akan melihat bahwa Ralphie kecil 907 00:56:53,020 --> 00:56:58,000 begitu bersemangat untuk mencari tahu apa pesan rahasia kecil Orphan Annie adalah kepadanya 908 00:56:58,000 --> 00:57:02,570 yang telah disampaikan, saya pikir, dalam bentuk pesan numerik pada kotak sereal 909 00:57:02,570 --> 00:57:07,220 dan Anda harus mengumpulkan semua kartu kecil yang datang dalam kotak sereal, 910 00:57:07,220 --> 00:57:09,770 Anda harus mengirimkan mereka, Anda harus mendapatkan kembali cincin decoder rahasia 911 00:57:09,770 --> 00:57:13,910 sehingga Anda akhirnya dapat mengetahui apa pemetaan adalah antara huruf dan angka 912 00:57:13,910 --> 00:57:15,550 atau surat dan surat-surat. 913 00:57:15,550 --> 00:57:19,520 Bagaimana di komputer kita bisa pergi tentang pelaksanaan atau mewakili hal-hal seperti ini? 914 00:57:19,520 --> 00:57:22,560 Kita membutuhkan suatu cara untuk mengekspresikan diri kita sedikit lebih fleksibel 915 00:57:22,560 --> 00:57:25,080 daripada variabel kami sejauh ini telah memungkinkan. 916 00:57:25,080 --> 00:57:29,000 Kami sudah ints, kami sudah chars, kami sudah mengapung dan ganda dan beberapa orang lainnya, 917 00:57:29,000 --> 00:57:34,200 tetapi mereka adalah potongan individu dari memori yang tidak benar-benar memungkinkan kita untuk mengekspresikan hal-hal 918 00:57:34,200 --> 00:57:36,440 seperti kata-kata dan kalimat dan frase. 919 00:57:36,440 --> 00:57:38,630 Memang, kami telah disebut string hal-hal seperti, 920 00:57:38,630 --> 00:57:42,660 tapi kami berjanji bahwa ini benar-benar hanya penyederhanaan dalam perpustakaan CS50 921 00:57:42,660 --> 00:57:45,540 bahwa kita berniat untuk mengupas. 922 00:57:45,540 --> 00:57:47,500 Dan jadi mari kita mulai melakukannya di sini. 923 00:57:47,500 --> 00:57:49,840 Biarkan aku pergi ke depan dan membuka file - 924 00:57:49,840 --> 00:57:54,100 semua file yang tersedia, seperti biasa, online - array.c disebut 925 00:57:54,100 --> 00:57:58,960 untuk memecahkan masalah yang tidak terkait dengan string tapi itu cat gambar di sini 926 00:57:58,960 --> 00:58:01,520 bagaimana kita bisa menggunakan sesuatu yang disebut array. 927 00:58:01,520 --> 00:58:04,050 >> Array adalah tipe data. 928 00:58:04,050 --> 00:58:10,730 Ini adalah jenis variabel dari jenis yang memiliki tipe data yang lebih kecil beberapa di dalamnya 929 00:58:10,730 --> 00:58:12,680 kembali untuk kembali ke kembali ke belakang. 930 00:58:12,680 --> 00:58:16,980 Jadi misalnya, jika kita ingin menulis sebuah program kecil yang memberikan rata-rata kuis Anda 931 00:58:16,980 --> 00:58:19,780 untuk kursus seperti 50 yang memiliki 2 kuis, 932 00:58:19,780 --> 00:58:23,450 Anda bisa dengan mudah menulis program ini didasarkan bahkan pada beberapa materi minggu lalu 933 00:58:23,450 --> 00:58:28,830 dengan menggunakan GetInt dan beberapa variabel: int quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 Dan itu cukup sederhana. 935 00:58:30,550 --> 00:58:33,500 Ini mungkin 10, 20 baris kode max untuk melaksanakan program 936 00:58:33,500 --> 00:58:38,940 yang meminta pengguna untuk 2 skor kuis dan kemudian menghitung rata-rata 937 00:58:38,940 --> 00:58:42,020 dengan menambahkan mereka bersama-sama, membagi dengan 2, dan kemudian mencetak hasilnya. 938 00:58:42,020 --> 00:58:46,400 Kita mungkin bisa melakukan itu cukup mudah sekarang setelah beberapa jumlah menit. 939 00:58:46,400 --> 00:58:49,450 Tapi masalahnya adalah bahwa anggaplah bahwa 50 memiliki 3 atau 4 kuis. 940 00:58:49,450 --> 00:58:52,830 Misalkan Anda ingin menggunakan program yang sama untuk kelas yang memiliki mingguan kuis. 941 00:58:52,830 --> 00:58:55,100 Pikirkan tentang kelas yang mingguan kuis. 942 00:58:55,100 --> 00:58:58,840 Jika ada 16 atau lebih minggu dalam satu semester, sekarang Anda memiliki 16 variabel: 943 00:58:58,840 --> 00:59:03,030 int quiz1, int quiz2, int quiz3, int quiz4. 944 00:59:03,030 --> 00:59:06,870 Segera setelah Anda mulai melihat redundansi ini, copy dan paste kode, 945 00:59:06,870 --> 00:59:09,810 harus mulai untuk membuat Anda berharap ada cara yang lebih baik. 946 00:59:09,810 --> 00:59:13,610 Dan untungnya, karena array ada. Jadi mari kita lakukan ini. 947 00:59:13,610 --> 00:59:16,700 Pertama, biarkan saya memperkenalkan hal yang sangat sederhana bahwa kita sudah tidak digunakan sejauh ini, 948 00:59:16,700 --> 00:59:18,820 tetapi Anda akan melihat kadang-kadang dalam kode. 949 00:59:18,820 --> 00:59:21,270 >> Ini adalah apa yang umumnya disebut konstanta. 950 00:59:21,270 --> 00:59:24,410 Jadi itu adalah konstan dalam arti bahwa nilai ini tidak pernah berubah. 951 00:59:24,410 --> 00:59:26,450 Konvensi manusia saat membuat sebuah konstanta 952 00:59:26,450 --> 00:59:30,420 adalah dengan menggunakan huruf kapital semua hanya agar benar-benar menonjol dalam kode Anda, 953 00:59:30,420 --> 00:59:34,270 dan kata kunci khusus yang Anda gunakan dalam C # define. 954 00:59:34,270 --> 00:59:39,970 Jadi kita katakan # define, lalu spasi, maka kata yang ingin Anda gunakan untuk nama konstanta ini 955 00:59:39,970 --> 00:59:41,730 dan kemudian nilai konstan. 956 00:59:41,730 --> 00:59:44,710 Perhatikan ini berbeda dengan menugaskan sesuatu untuk variabel. 957 00:59:44,710 --> 00:59:46,430 Tidak ada tanda sama, ada titik koma tidak. 958 00:59:46,430 --> 00:59:49,140 Ini adalah apa yang umumnya dikenal sebagai direktif preprocessor, 959 00:59:49,140 --> 00:59:50,840 tetapi lebih pada lain waktu. 960 00:59:50,840 --> 00:59:56,350 Untuk saat ini, ini menciptakan nilai tidak berubah disebut Kuis 961 00:59:56,350 --> 00:59:58,290 nilai sebenarnya numerik yang adalah 2. 962 00:59:58,290 --> 01:00:02,180 Jadi di mana pun Anda melihat kuis, kuis, kuis seluruh file ini, 963 01:00:02,180 --> 01:00:04,230 itu hanya nomor 2. 964 01:00:04,230 --> 01:00:06,550 Jika saya melihat utama sekarang, mari kita lihat bagaimana ini bekerja. 965 01:00:06,550 --> 01:00:09,770 Pertama tampak sedikit samar, tapi itu semua barang dari minggu 1. 966 01:00:09,770 --> 01:00:12,210 Meminta pengguna untuk nilai. Bagaimana kita melakukan ini? 967 01:00:12,210 --> 01:00:17,350 Sejalan 22 - ini benar-benar bagian dari nakal - Saya menyatakan pelampung 968 01:00:17,350 --> 01:00:23,240 tapi bukan hanya pelampung tunggal. Saya menyatakan, lebih tepatnya, array floating-point nilai. 969 01:00:23,240 --> 01:00:27,700 Variabel itu akan disebut kelas, seperti yang tersirat di sini, 970 01:00:27,700 --> 01:00:31,420 namun satu-satunya sintaks baru kemudian orang-kurung siku. 971 01:00:31,420 --> 01:00:37,280 Fakta bahwa saya telah mengatakan nilai mengambang dan kemudian braket terbuka dan kemudian nomor - 972 01:00:37,280 --> 01:00:40,980 perhatikan jika ini adalah sebuah konstanta ini hanya seperti yang kami lakukan ini - 973 01:00:40,980 --> 01:00:46,840 ini berarti, "Hei komputer, beri aku 2 mengapung dan mari kita secara kolektif menyebut mereka nilai." 974 01:00:46,840 --> 01:00:51,780 >> Hal ini berbeda dengan proses yang jauh lebih membosankan seperti ini: float Grade1; 975 01:00:51,780 --> 01:00:54,580 mengapung grade2, dan sebagainya. 976 01:00:54,580 --> 01:00:58,310 Jadi array memungkinkan kita untuk menerapkan ide ini, tetapi jauh lebih sedikit messily, 977 01:00:58,310 --> 01:01:04,560 sedemikian rupa sehingga kita dapat menulis 1 baris kode bukan, katakanlah, 16 untuk semester 16-minggu. 978 01:01:04,560 --> 01:01:09,060 Saya tidak mau keras-kode 2 karena jika Anda berpikir tentang hal ini sekarang secara logis, 979 01:01:09,060 --> 01:01:12,560 kira tahun depan CS50 perubahan 3 kuis gantinya 980 01:01:12,560 --> 01:01:15,010 dan aku punya nomor 2 di sini, aku punya nomor 2 di sini, 981 01:01:15,010 --> 01:01:17,210 Aku punya nomor 2 di sini, nomor 2 di sini. 982 01:01:17,210 --> 01:01:19,890 Ini menjadi sangat membosankan dan sangat mudah untuk mengacaukan 983 01:01:19,890 --> 01:01:26,550 dan sengaja mengubah 1 nilai 3 dan kehilangan beberapa nilai lain 2. 984 01:01:26,550 --> 01:01:30,660 Jadi aku akan pergi bukan abstrak ini dan menggunakan konstan yang, 985 01:01:30,660 --> 01:01:32,520 seperti namanya, tidak pernah berubah. 986 01:01:32,520 --> 01:01:35,870 Dan sekarang tak peduli apakah kami memiliki berbagai kuis tahun ini atau berikutnya, 987 01:01:35,870 --> 01:01:39,380 Saya hanya perlu mengubahnya di satu tempat di sini di atas. 988 01:01:39,380 --> 01:01:41,230 Jadi itu semua adalah konstan. 989 01:01:41,230 --> 01:01:47,100 Sementara itu, fitur konseptual baru adalah bahwa dari array. 990 01:01:47,100 --> 01:01:55,030 Jadi tanda kurung siku memberikan saya ini banyak mengapung dan memungkinkan saya secara kolektif menyebut mereka nilai di sini. 991 01:01:55,030 --> 01:01:56,720 Jadi sekarang mari kita lihat apa yang akan saya lakukan. 992 01:01:56,720 --> 01:01:59,220 Di sini, di baris 24 adalah awal dari untuk loop. 993 01:01:59,220 --> 01:02:03,380 >> Ini benar-benar tidak ada yang mewah. Ini hanya menggunakan Kuis bukan nomor keras-kode. 994 01:02:03,380 --> 01:02:06,740 Tapi tidak ada intelektual yang berbeda ada dari minggu lalu. 995 01:02:06,740 --> 01:02:11,650 Ini hanya printf, sehingga printf ("Quiz d #% dari% d:") 996 01:02:11,650 --> 01:02:16,670 karena saya hanya ingin mencetak memberikan kuis nomor 1 dari 2 dan kemudian 2 dari 2. 997 01:02:16,670 --> 01:02:18,480 Jadi ini adalah hal yang murni estetika. 998 01:02:18,480 --> 01:02:21,000 Tapi bagian yang menarik sekarang ini sejalan 27. 999 01:02:21,000 --> 01:02:27,840 Dalam rangka untuk mengisi salah satu dari dua penampung dengan nilai floating-point, 1000 01:02:27,840 --> 01:02:29,640 Anda lagi menggunakan tanda kurung siku. 1001 01:02:29,640 --> 01:02:35,170 Dalam kasus ini, saya menggunakan i karena ini untuk loop telah dimulai dengan i menyamai nilai apa, rupanya? 1002 01:02:35,170 --> 01:02:36,670 [Mahasiswa] 0. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Jadi pada iterasi pertama dari loop ini, itu seolah-olah saya menulis ini dalam kode, 1004 01:02:40,990 --> 01:02:46,310 tetapi pada iterasi kedua dari lingkaran ini, itu seolah-olah saya menulis ini dalam kode saya. 1005 01:02:46,310 --> 01:02:49,970 Tapi fakta bahwa saya menggunakan variabel sempurna karena, seperti namanya, 1006 01:02:49,970 --> 01:02:52,600 itu bervariasi nilainya pada setiap iterasi, 1007 01:02:52,600 --> 01:02:55,900 jadi aku mengisi array ini satu tempat pada suatu waktu. 1008 01:02:55,900 --> 01:02:57,380 Apa array ini terlihat seperti? 1009 01:02:57,380 --> 01:03:01,570 Alasan saya menggambar persegi panjang super sederhana di layar di sini sebelum adalah untuk alasan ini. 1010 01:03:01,570 --> 01:03:05,590 Array hanyalah sepotong memori diikuti oleh sepotong memori 1011 01:03:05,590 --> 01:03:08,570 diikuti oleh sepotong memori dan sebagainya. 1012 01:03:08,570 --> 01:03:13,120 Jadi, jika array saya adalah ukuran 2 dalam hal ini di sini, semua saya akan melakukan 1013 01:03:13,120 --> 01:03:20,200 dengan mengetikkan nilai kuis saya seperti di sini - saya mendapat 100 pada satu ini dan kemudian saya mendapat 99 satu ini - 1014 01:03:20,200 --> 01:03:24,970 maka memori ini mungkin tidak dapat digunakan karena aku hanya meminta komputer 1015 01:03:24,970 --> 01:03:26,840 untuk berbagai ukuran 2. 1016 01:03:26,840 --> 01:03:28,600 Mereka kotak masih ada, kan? 1017 01:03:28,600 --> 01:03:32,670 Anda masih memiliki 2 gigabyte RAM bahkan jika Anda hanya meminta 2 mengapung. 1018 01:03:32,670 --> 01:03:36,840 Jadi ide di balik array adalah bahwa komputer hanya mengambil sepotong memori 1019 01:03:36,840 --> 01:03:41,340 dan kemudian pembagian adil untul potongan kecil kembali untuk kembali ke kembali ke belakang. 1020 01:03:41,340 --> 01:03:43,310 Dan sehingga semua array adalah. 1021 01:03:43,310 --> 01:03:47,350 >> Ini sepotong bersebelahan di dalam memori yang Anda dapat meletakkan segala sesuatu. 1022 01:03:47,350 --> 01:03:50,700 Hal ini terjadi untuk kemudian melakukan beberapa aritmatika membosankan. 1023 01:03:50,700 --> 01:03:54,640 Jika saya scroll ke bawah sini, ini adalah di mana saya kemudian iterate atas array. 1024 01:03:54,640 --> 01:03:58,020 Saya datang dengan penjumlahan dari semua nilai dalam array, 1025 01:03:58,020 --> 01:04:02,470 dan kemudian saya menggunakan fungsi putaran di sini untuk benar-benar melakukan jumlah dibagi dengan kuis. 1026 01:04:02,470 --> 01:04:06,320 Tapi biarkan aku melambaikan tanganku pada saat itu sebagai semacam aritmatika cukup untuk saat ini. 1027 01:04:06,320 --> 01:04:08,370 Tapi semua itu lakukan bagi saya pada akhirnya adalah menghitung rata-rata. 1028 01:04:08,370 --> 01:04:13,580 Jadi kuis pertama ditambah kuis kedua dibagi dengan 2 dan kemudian mencetak keluar sebagai int. 1029 01:04:13,580 --> 01:04:17,280 Tapi mari kita sekarang transisi ke contoh yang berbeda yang disebut string1, 1030 01:04:17,280 --> 01:04:20,700 yang melukiskan gambaran serupa tapi string menggunakan. 1031 01:04:20,700 --> 01:04:23,940 Biarkan aku pergi ke depan dan menyederhanakan ini untuk sesaat. 1032 01:04:23,940 --> 01:04:27,090 Maafkan lekukan untuk saat ini. 1033 01:04:27,090 --> 01:04:30,870 Perhatikan pada baris 19 dari contoh ini, saya mendapatkan string dari pengguna. 1034 01:04:30,870 --> 01:04:34,640 Tapi perhatikan apa yang saya lakukan selanjutnya dalam garis 22 dan seterusnya. 1035 01:04:34,640 --> 01:04:41,250 Aku benar-benar iterasi dari saya sampai - dan ini adalah trik baru - strlen, panjang string. 1036 01:04:41,250 --> 01:04:44,880 Ini adalah fungsi yang datang dengan C bahwa jika Anda lulus string, 1037 01:04:44,880 --> 01:04:47,730 ia memberitahu Anda berapa banyak karakter dalam string tersebut. Itu saja. 1038 01:04:47,730 --> 01:04:51,550 Dan fakta bahwa itu strlen bukannya panjang string hanya karena lebih ringkas. 1039 01:04:51,550 --> 01:04:55,100 Tiga puluh tahun yang lalu, orang suka menulis hal-hal sesingkat mungkin, 1040 01:04:55,100 --> 01:04:57,630 jadi kami telah terus konvensi itu di sini. 1041 01:04:57,630 --> 01:05:00,660 i + + hanya berarti kenaikan i di setiap iterasi. 1042 01:05:00,660 --> 01:05:02,990 Dan sekarang perhatikan ini, yang benar-benar menarik. 1043 01:05:02,990 --> 01:05:09,180 Sejalan 24, saya katakan, "Komputer, beri aku karakter, 8 bit, dan menyebutnya c." 1044 01:05:09,180 --> 01:05:12,630 Tapi apa ini di sisi kanan katakan? 1045 01:05:13,490 --> 01:05:16,530 Dalam bahasa Inggris, apa yang mewakili? 1046 01:05:16,530 --> 01:05:18,730 [Mahasiswa] Karakter pertama dalam array. 1047 01:05:18,730 --> 01:05:20,790 Tepat. Berikan karakter pertama dalam array. 1048 01:05:20,790 --> 01:05:24,090 Atau, lebih umum, memberi saya karakter engan dalam array. 1049 01:05:24,090 --> 01:05:26,100 Dan menyadari itu penting sekarang bahwa sebagai ilmuwan komputer, 1050 01:05:26,100 --> 01:05:27,890 kami benar-benar menghitung dari 0. 1051 01:05:27,890 --> 01:05:29,720 >> Anda tidak memiliki kebijaksanaan sekarang untuk mulai melakukan hal ini. 1052 01:05:29,720 --> 01:05:34,160 Sekarang Anda harus berperilaku sesuai dengan harapan komputer dan menghitung dari 0 1053 01:05:34,160 --> 01:05:38,180 karena [0] akan menjadi karakter pertama dalam string, 1054 01:05:38,180 --> 01:05:42,150 [1] akan menjadi yang kedua, [2] akan menjadi yang ketiga, dan sebagainya. 1055 01:05:42,150 --> 01:05:49,720 Jadi program ini, jika saya compile, ini lagi string1, sehingga membuat string1, 1056 01:05:49,720 --> 01:05:54,670 dan sekarang saya sudah menjalankan string1 di jendela terminal saya. 1057 01:05:54,670 --> 01:05:58,330 Ini menunggu masukan, jadi saya akan mengetikkan David, Enter, 1058 01:05:58,330 --> 01:06:02,540 dan sekarang mencetak David semua pada baris yang berbeda karena pemberitahuan apa yang saya lakukan. 1059 01:06:02,540 --> 01:06:05,820 Saya mencetak satu karakter pada satu waktu. 1060 01:06:05,820 --> 01:06:10,100 Kami tidak akan pergi ke detail hari ini, tapi saya dihapus sesaat lalu cek ini di sini. 1061 01:06:10,100 --> 01:06:15,480 Ternyata bahwa jika pengguna mengalami gangguan, permusuhan, atau hanya bingung, 1062 01:06:15,480 --> 01:06:20,210 Anda benar-benar dapat gagal untuk memberikan string dengan panjang tertentu. 1063 01:06:20,210 --> 01:06:22,860 Jika Anda menekan tombol yang salah pada keyboard, Anda mungkin memberikan tali sama sekali, 1064 01:06:22,860 --> 01:06:26,950 atau jika Anda berbahaya, Anda dapat mencoba untuk menyisipkan di bernilai gigabyte tentang esai 1065 01:06:26,950 --> 01:06:29,290 untuk mengisi string ini, dan jika komputer kehabisan memori, 1066 01:06:29,290 --> 01:06:32,710 ternyata bahwa kita akan mendapatkan kembali nilai ini khusus yang disebut NULL. 1067 01:06:32,710 --> 01:06:35,580 Jadi untuk saat ini, hanya tahu bahwa ada nilai ini khusus yang disebut NULL 1068 01:06:35,580 --> 01:06:39,580 yang akan memungkinkan kita untuk memeriksa ketika kita keluar dari memori, antara lain. 1069 01:06:39,580 --> 01:06:45,630 Tapi kalau aku membuka sekarang string2, melihat satu perbedaan di sini. 1070 01:06:45,630 --> 01:06:48,210 Perhatikan satu perbedaan di sini dengan string2. 1071 01:06:48,210 --> 01:06:51,340 Dengan string2, ini untuk loop adalah sedikit berbeda. 1072 01:06:51,340 --> 01:06:55,010 >> Biarkan saya menghapus NULLs sehingga kita bisa berbicara dengan orang lain waktu. 1073 01:06:55,010 --> 01:06:57,800 Apa yang berbeda tentang untuk loop saat ini? 1074 01:06:59,620 --> 01:07:01,670 Aku bisa kembali ke contoh sebelumnya. 1075 01:07:01,670 --> 01:07:08,580 Jadi itulah versi 2, ini adalah versi 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 Panggilan strlen adalah di mana? 1078 01:07:16,660 --> 01:07:18,860 Itu di bagian pertama dari untuk loop. 1079 01:07:18,860 --> 01:07:21,830 Setiap pikiran tentang mengapa aku melakukan ini? Ya. 1080 01:07:21,830 --> 01:07:24,560 [Mahasiswa] Jadi Anda tidak memanggil fungsi setiap saat. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Jadi kita tidak memanggil fungsi setiap saat. Tepat. 1082 01:07:26,440 --> 01:07:28,300 Ingat dari untuk loop bahwa mereka super sederhana 1083 01:07:28,300 --> 01:07:31,770 setelah Anda semacam memahami bahwa ini adalah inisialisasi, kondisi, dan pembaruan. 1084 01:07:31,770 --> 01:07:34,750 Masalahnya adalah bahwa kondisi terjadi pada setiap iterasi dari loop. 1085 01:07:34,750 --> 01:07:40,010 Dan sehingga dalam contoh di sini, apa yang buruk tentang fakta bahwa ini adalah kondisi saya? 1086 01:07:40,010 --> 01:07:41,830 [Mahasiswa] Kau menelepon strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] Anda menelepon strlen lagi dan lagi dan lagi. 1088 01:07:44,340 --> 01:07:47,410 Tapi begitu aku sudah mengetik di David, panjang string yang 5, 1089 01:07:47,410 --> 01:07:49,650 dan itu tidak akan berubah pada setiap iterasi dari loop 1090 01:07:49,650 --> 01:07:51,670 karena string masih D-a-v-i-d. 1091 01:07:51,670 --> 01:07:55,320 Jadi ini adalah petunjuk pada apa yang akan menjadi ide yang semakin penting 1092 01:07:55,320 --> 01:08:00,410 dikenal sebagai keputusan desain di mana hanya tidak membuat komputer melakukan pekerjaan yang tidak perlu. 1093 01:08:00,410 --> 01:08:03,920 >> Sama seperti sneak preview dari pset2, pset2 dalam edisi standar 1094 01:08:03,920 --> 01:08:07,030 akan menantang Anda untuk benar-benar menerapkan beberapa jumlah cipher, 1095 01:08:07,030 --> 01:08:10,410 beberapa jumlah algoritma enkripsi, sehingga Anda berdua dapat mengenkripsi 1096 01:08:10,410 --> 01:08:13,840 dan pesan rahasia mendekripsi banyak seperti Ralphie orang di sana diterjemahkan. 1097 01:08:13,840 --> 01:08:16,810 Dalam edisi hacker dari pset2, kita akan pergi sedikit lebih jauh. 1098 01:08:16,810 --> 01:08:19,649 Kami akan menyerahkan file dari sebuah sistem komputer yang sebenarnya 1099 01:08:19,649 --> 01:08:23,479 yang berisi sejumlah besar nama pengguna dan password terenkripsi yang sebenarnya, 1100 01:08:23,479 --> 01:08:26,939 dan tantangan untuk edisi hacker akan menjadi untuk mengcrack password 1101 01:08:26,939 --> 01:08:33,200 dan mencari tahu apa kriptografi atau apa rahasia itu digunakan untuk benar-benar menghasilkan orang password. 1102 01:08:33,200 --> 01:08:36,109 Dan kita akan melakukan hal ini dengan menggunakan fitur baru di sini C 1103 01:08:36,109 --> 01:08:40,630 bahwa saya akan memberikan Anda hanya demo yang dikenal sebagai argumen baris perintah. 1104 01:08:40,630 --> 01:08:44,229 Ternyata, karena beberapa dari Anda mungkin telah melihat dalam bagian atau dalam buku teks, 1105 01:08:44,229 --> 01:08:48,260 utama tidak selalu harus kekosongan dalam tanda kurung. 1106 01:08:48,260 --> 01:08:52,430 Ternyata utama juga dapat ditulis seperti ini, dengan dua argumen, 1107 01:08:52,430 --> 01:08:56,870 argc dan argv, di mana argc adalah jumlah kata 1108 01:08:56,870 --> 01:09:00,020 yang Anda ketik setelah nama program pada baris perintah Anda 1109 01:09:00,020 --> 01:09:03,420 dan argv adalah kata-kata yang sebenarnya. 1110 01:09:03,420 --> 01:09:07,540 Dan sebagai tanda kurung siku ada menunjukkan, argv tampaknya array. 1111 01:09:07,540 --> 01:09:12,210 Ini akan menjadi string setelah string setelah string dalam memori. 1112 01:09:12,210 --> 01:09:16,010 >> Jadi apa yang akan kita dapat melakukan dimulai dengan pset 2 adalah sesuatu seperti ini. 1113 01:09:16,010 --> 01:09:21,350 Jika saya membuat argv1, yang merupakan contoh kita akan kembali ke pada hari Senin, dan menjalankannya, 1114 01:09:21,350 --> 01:09:23,370 melihat bahwa itu tampaknya tidak melakukan apa-apa belum. 1115 01:09:23,370 --> 01:09:25,490 Itu hanya mencetak namanya sendiri. 1116 01:09:25,490 --> 01:09:31,479 Tapi kalau aku mengatakan selamat tinggal kelas, perhatikan bahwa program ini ternyata iterates 1117 01:09:31,479 --> 01:09:35,479 atas setiap kata-kata yang diketik pada prompt. 1118 01:09:35,479 --> 01:09:41,630 Dan cara dimana kita akan mendapatkan akses ke kata-kata yang pengguna telah diketik pada prompt 1119 01:09:41,630 --> 01:09:49,160 adalah dengan mengubah utama mulai akhir pekan ini dari int main (void) ke int main (argc, argv) 1120 01:09:49,160 --> 01:09:52,050 dan dengan demikian akan lahir argumen baris perintah. 1121 01:09:52,050 --> 01:09:57,100 Dan sekali Anda mendapatkan benar-benar canggih ini, Anda akan dapat menulis program yang benar-benar trippy 1122 01:09:57,100 --> 01:09:59,610 seperti ini satu di sini, yang berjalan di atas dan di luar 1123 01:09:59,610 --> 01:10:03,940 beberapa fungsi yang sudah kita lakukan sejauh ini, tetapi semua cukup kuat. 1124 01:10:03,940 --> 01:10:08,950 >> Jadi kita akan meninggalkan ini dengan ini pada layar, dan kita akan melihat Anda pada hari Senin. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]