1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] DAVID J. Malan: Baiklah, ini adalah CS50, dan ini adalah 2 00:00:11,630 --> 00:00:14,790 mulai dari dua minggu. 3 00:00:14,790 --> 00:00:16,300 Terima kasih. 4 00:00:16,300 --> 00:00:19,000 Mari kita mulai di sini dengan panggilan telepon. 5 00:00:19,000 --> 00:00:30,005 Aku akan menghubungi 617-BUG-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: Ini adalah CS50. 7 00:00:31,230 --> 00:00:33,930 Untuk Boy Shuttle, tekan 1. 8 00:00:33,930 --> 00:00:36,660 Untuk memulai, tekan 9. 9 00:00:36,660 --> 00:00:38,180 DAVID J. Malan: Jadi dia mengatakan untuk Boy Shuttle, tekan 1. 10 00:00:38,180 --> 00:00:41,560 Jadi kita akan tekan 1. 11 00:00:41,560 --> 00:00:43,230 CS50: Apa asal Anda? 12 00:00:43,230 --> 00:00:45,340 Untuk quad, tekan 1. 13 00:00:45,340 --> 00:00:47,080 Mather, tekan 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, tekan 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, tekan 4. 16 00:00:51,280 --> 00:00:53,210 Mem Hall, tekan 5. 17 00:00:53,210 --> 00:00:55,660 Untuk memulai, tekan 0. 18 00:00:55,660 --> 00:00:59,590 DAVID J. Malan: Kami akan tekan 1 untuk quad. 19 00:00:59,590 --> 00:01:03,610 CS50: shuttle selanjutnya daun ini sangat menit pada jam 1:10, dan 20 00:01:03,610 --> 00:01:09,820 kemudian pada 1:20 PM, 1:30, 1:40 PM. 21 00:01:09,820 --> 00:01:12,030 Ini adalah CS50. 22 00:01:12,030 --> 00:01:15,570 >> DAVID J. Malan: Jadi ini adalah suara CS50 itu. 23 00:01:15,570 --> 00:01:18,030 Dan itu adalah contoh jenis-jenis proyek akhir, untuk 24 00:01:18,030 --> 00:01:19,500 Misalnya, Anda bisa menggigit ke arah 25 00:01:19,500 --> 00:01:20,600 akhir semester. 26 00:01:20,600 --> 00:01:23,840 Misalnya, shuttleboy.cs50.net yang ada - 27 00:01:23,840 --> 00:01:28,200 sebenarnya sebuah proyek yang saya pertama kali menulis setelah mengambil CS51 28 00:01:28,200 --> 00:01:29,740 kembali ketika saya adalah seorang sarjana. 29 00:01:29,740 --> 00:01:32,250 Dan inspirasi di sini adalah waktu itu, semua yang mereka miliki adalah 30 00:01:32,250 --> 00:01:34,320 jadwal bus shuttle dicetak, dan tidak ada 31 00:01:34,320 --> 00:01:35,970 gagasan mencari hal-hal online. 32 00:01:35,970 --> 00:01:38,730 Dan jadi saya semacam merpati dalam waktu satu minggu, dituangkan melalui 33 00:01:38,730 --> 00:01:41,460 dicetak jadwal, dan porting ke sebuah program komputer. 34 00:01:41,460 --> 00:01:43,790 Pada saat itu, program komputer kebetulan ditulis 35 00:01:43,790 --> 00:01:47,110 di C. Dan Anda benar-benar berlari dengan Boy Shuttle mengetik pada 36 00:01:47,110 --> 00:01:48,600 berkedip meminta seperti kita sudah melakukan sejauh ini. 37 00:01:48,600 --> 00:01:50,450 Tapi selama bertahun-tahun, itu berkembang menjadi instan 38 00:01:50,450 --> 00:01:51,390 pesan bot. 39 00:01:51,390 --> 00:01:53,970 Ini berkembang baru-baru ini ke website ini, menjadi 40 00:01:53,970 --> 00:01:57,720 SMS-alat berbasis, serta menjadi alat ini berbasis suara. 41 00:01:57,720 --> 00:02:00,170 Dan ini mengisyaratkan berbagai hal yang dapat Anda 42 00:02:00,170 --> 00:02:02,380 lakukan untuk diri sendiri pada akhir semester. 43 00:02:02,380 --> 00:02:05,490 >> Misalnya, ada, versi SMS Boy Shuttle terjadi 44 00:02:05,490 --> 00:02:06,510 untuk beroperasi sebagai berikut. 45 00:02:06,510 --> 00:02:10,880 Jika, pada ponsel Anda, Anda mengirim pesan teks ke 41.411 dan 46 00:02:10,880 --> 00:02:14,300 kemudian mengirim sboy simbol khusus, untuk Boy Shuttle, 47 00:02:14,300 --> 00:02:18,350 diikuti oleh A dan B, di mana A adalah asal-mula, dan B adalah 48 00:02:18,350 --> 00:02:19,070 tujuan - 49 00:02:19,070 --> 00:02:21,030 misalnya, Boylston Ruang Quad - 50 00:02:21,030 --> 00:02:23,330 apa yang Anda harus kembali dalam waktu beberapa detik adalah teks 51 00:02:23,330 --> 00:02:25,820 pesan dari Boy Shuttle memberitahu Anda persis kapan 52 00:02:25,820 --> 00:02:28,990 angkutan mendatang adalah, dari titik bahwa A akan bahwa 53 00:02:28,990 --> 00:02:29,640 titik B. 54 00:02:29,640 --> 00:02:32,510 Dan ini adalah contoh yang lebih umum apa yang dikenal sebagai 55 00:02:32,510 --> 00:02:33,920 menggunakan API. 56 00:02:33,920 --> 00:02:36,930 >> Jadi misalnya, ini di sini hanya shuttleboy.cs50.net, yang 57 00:02:36,930 --> 00:02:39,300 aktual berbasis web inkarnasi ini. 58 00:02:39,300 --> 00:02:42,480 Namun data yang menggarisbawahi aplikasi ini dan lainnya yang CS50 59 00:02:42,480 --> 00:02:45,560 telah mengembangkan semua terkena semua orang di sini dalam bentuk 60 00:02:45,560 --> 00:02:49,340 API, aplikasi antarmuka pemrograman. 61 00:02:49,340 --> 00:02:52,220 Dan itu hanya cara mewah untuk mengatakan bahwa orang-orang seperti kita di 62 00:02:52,220 --> 00:02:56,010 Internet dan lain-lain telah menghabiskan beberapa waktu menciptakan 63 00:02:56,010 --> 00:02:59,970 perangkat lunak yang dapat Anda gunakan untuk mengambil data dari kami dan 64 00:02:59,970 --> 00:03:02,510 kemudian membangun aplikasi Anda sendiri di atas 65 00:03:02,510 --> 00:03:03,840 itu kumpulan data. 66 00:03:03,840 --> 00:03:06,610 Jadi misalnya, ini Boy Shuttle API halaman di sini, yang 67 00:03:06,610 --> 00:03:09,390 kebetulan di, manual CS50 dasarnya dokumen 68 00:03:09,390 --> 00:03:13,080 bagaimana Anda bisa pergi tentang meminta CS50 server untuk data. 69 00:03:13,080 --> 00:03:16,240 Misalnya, jika Anda terbiasa dengan file CSV, koma 70 00:03:16,240 --> 00:03:18,940 dipisahkan nilai-nilai, ini hanya semacam cepat dan kotor 71 00:03:18,940 --> 00:03:20,310 Excel seperti file. 72 00:03:20,310 --> 00:03:23,110 Jadi Anda dapat meminta Boy Shuttle untuk semua data pada semua 73 00:03:23,110 --> 00:03:25,090 rumah dan mereka koordinat GPS, dan Anda akan mendapatkan 74 00:03:25,090 --> 00:03:27,300 kembali, pada dasarnya, sebuah spreadsheet seperti itu yang 75 00:03:27,300 --> 00:03:30,820 Anda kemudian dapat membaca ke dalam program Anda sendiri dan kemudian 76 00:03:30,820 --> 00:03:33,250 menghasilkan hasil, seperti Boy Shuttle sendiri 77 00:03:33,250 --> 00:03:34,160 kebetulan lakukan. 78 00:03:34,160 --> 00:03:37,030 Bagi mereka, representasi data yang lebih akrab lebih modern 79 00:03:37,030 --> 00:03:39,420 termasuk JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Sesuatu akan datang kembali kepada Anda menuju 81 00:03:40,620 --> 00:03:41,720 akhir semester. 82 00:03:41,720 --> 00:03:45,440 >> Tapi sekali lagi, ini hanya salah satu dari beberapa API sendiri CS50 itu. 83 00:03:45,440 --> 00:03:48,320 Dan hal yang menarik adalah sekarang, hari ini, Facebook dan 84 00:03:48,320 --> 00:03:51,110 Twitter dan Google dan cukup banyak setiap situs populer di luar 85 00:03:51,110 --> 00:03:54,130 ada memiliki semacam API, yang berarti jika Anda membaca 86 00:03:54,130 --> 00:03:56,620 dokumentasi di situs web mereka, Anda mendaftar untuk 87 00:03:56,620 --> 00:03:59,980 akun, maka Anda dapat mulai menulis perangkat lunak di atas 88 00:03:59,980 --> 00:04:03,680 apapun alat atau data yang ada perusahaan menyediakan. 89 00:04:03,680 --> 00:04:06,210 Dan jadi salah satu rekan kita sendiri mengajar beberapa tahun yang lalu 90 00:04:06,210 --> 00:04:07,620 menulis versi Mac ini. 91 00:04:07,620 --> 00:04:10,990 Jadi pada link berjudul Mac di sini di kiri atas, Anda dapat benar-benar 92 00:04:10,990 --> 00:04:13,940 download widget Mac OS yang berjalan pada Mac Anda sendiri untuk melakukan 93 00:04:13,940 --> 00:04:15,040 sama macam hal. 94 00:04:15,040 --> 00:04:17,970 Jadi itu semua tentang membangun di atas set data seperti ini. 95 00:04:17,970 --> 00:04:21,839 Tapi lebih pada bahwa menjelang akhir semester. 96 00:04:21,839 --> 00:04:25,780 >> Jadi mari kita menyelam dengan cepat nyata untuk bug, hanya untuk mendapatkan jenis 97 00:04:25,780 --> 00:04:27,990 hal menghangat saat ini, dan berpikir kembali pada beberapa 98 00:04:27,990 --> 00:04:29,660 hal yang kita melihat pekan lalu. 99 00:04:29,660 --> 00:04:32,840 Secara khusus, biarkan aku pergi ke depan dan menarik, katakanlah, 100 00:04:32,840 --> 00:04:34,080 ini contoh di sini. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, ini tersedia di website ini saja kalau kau 102 00:04:37,500 --> 00:04:40,250 ingin men-download dan melihat-lihat sendiri. 103 00:04:40,250 --> 00:04:43,520 Tapi mari kita tampilannya di sini pada program ini cukup singkat, dan hanya 104 00:04:43,520 --> 00:04:46,550 rekap super cepat dari beberapa blok bangunan dasar yang 105 00:04:46,550 --> 00:04:48,880 kita benar-benar akan hanya mulai mengambil untuk diberikan. 106 00:04:48,880 --> 00:04:51,860 >> Jadi hal-hal biru, di baris 1 sampai 9, hanya 107 00:04:51,860 --> 00:04:53,670 softball pertanyaan. 108 00:04:53,670 --> 00:04:54,590 Jadi ini hanya komentar. 109 00:04:54,590 --> 00:04:56,230 Mereka tidak memiliki makna fungsional. 110 00:04:56,230 --> 00:04:58,460 Tapi mereka komentar dalam arti bahwa mereka mencatat bahwa 111 00:04:58,460 --> 00:05:02,010 Aku, manusia, dibuat untuk diri sehingga dalam kuliah dan setelah 112 00:05:02,010 --> 00:05:04,340 kuliah, saya benar-benar bisa mengingat apa program ini 113 00:05:04,340 --> 00:05:07,120 tidak tanpa harus membacanya baris demi baris dan 114 00:05:07,120 --> 00:05:08,990 menciptakan sejarah dalam pikiran saya. 115 00:05:08,990 --> 00:05:11,000 Apalagi, jika saya menyerahkan program ini kepada orang lain seperti 116 00:05:11,000 --> 00:05:14,420 Anda, itu jauh lebih jelas bagi Anda, karena komentar seperti ini, 117 00:05:14,420 --> 00:05:16,680 program apa yang benar-benar melakukan, atau setidaknya apa yang 118 00:05:16,680 --> 00:05:18,210 Program yang seharusnya melakukan. 119 00:05:18,210 --> 00:05:20,760 Apakah atau tidak itu benar adalah masalah lain sama sekali. 120 00:05:20,760 --> 00:05:25,040 Sekarang, di C, dengan multi-line komentar, ingat bahwa pada baris 121 00:05:25,040 --> 00:05:27,880 satu di sini adalah simbol sihir, / *. 122 00:05:27,880 --> 00:05:30,380 Artinya di sini datang awal komentar. 123 00:05:30,380 --> 00:05:34,560 Dan ada lagi yang penting sampai Anda mencapai akhir terminator, 124 00:05:34,560 --> 00:05:36,700 yang * /, sebaliknya. 125 00:05:36,700 --> 00:05:39,120 Jadi fakta bahwa saya memiliki 80-beberapa bintang yang aneh di sini dari 126 00:05:39,120 --> 00:05:41,550 kiri ke kanan benar-benar hanya sebuah detil estetika. 127 00:05:41,550 --> 00:05:43,370 Ini memiliki makna fungsional. 128 00:05:43,370 --> 00:05:44,490 >> Sekarang bagaimana dengan jalur 11? 129 00:05:44,490 --> 00:05:46,940 Apa yang dilakukan ini dalam istilah awam? 130 00:05:51,560 --> 00:05:52,540 Apa itu? 131 00:05:52,540 --> 00:05:54,280 HADIRIN: Termasuk standar. 132 00:05:54,280 --> 00:05:54,740 DAVID J. Malan: OK, baik. 133 00:05:54,740 --> 00:05:57,500 Jadi itu termasuk perpustakaan stdio.h. 134 00:05:57,500 --> 00:05:58,230 Jadi apa artinya? 135 00:05:58,230 --> 00:06:01,570 Nah, di dalam file tersebut, stdio.h, adalah sejumlah besar 136 00:06:01,570 --> 00:06:03,320 Fungsi deklarasi - 137 00:06:03,320 --> 00:06:05,290 yaitu, kode yang orang lain menulis. 138 00:06:05,290 --> 00:06:08,160 Dan contoh sempurna dari fungsi yang dideklarasikan di 139 00:06:08,160 --> 00:06:10,250 stdio.h adalah - 140 00:06:10,250 --> 00:06:11,980 yang favorit sekarang? 141 00:06:11,980 --> 00:06:14,300 Jadi printf, salah satu yang paling umum digunakan, tentu 142 00:06:14,300 --> 00:06:15,840 sejak dini, dari perpustakaan yang ada. 143 00:06:15,840 --> 00:06:19,290 Jika saya mengecualikan bahwa baris kode, dentang akan berteriak 144 00:06:19,290 --> 00:06:22,550 padaku sesuatu tentang menggunakan simbol dideklarasikan. 145 00:06:22,550 --> 00:06:24,930 Sesuatu dideklarasikan mungkin kata kunci, karena 146 00:06:24,930 --> 00:06:27,770 kami belum memberitahu compiler apa yang terlihat printf 147 00:06:27,770 --> 00:06:29,230 seperti kecuali kita termasuk garis itu. 148 00:06:29,230 --> 00:06:31,830 Dan lebih turun ke bumi, benar-benar, apa garis yang katakan adalah 149 00:06:31,830 --> 00:06:34,890 membuka file, stdio.h, di mana pun pada server 150 00:06:34,890 --> 00:06:38,200 hard drive, atau hard drive alat, dan copy-paste itu 151 00:06:38,200 --> 00:06:40,240 sana ke file saya, tanpa saya 152 00:06:40,240 --> 00:06:41,730 harus melakukannya secara manual. 153 00:06:41,730 --> 00:06:44,420 >> Sekarang, setelah kami datang ke sini untuk main, sebelum lama kita akan mulai 154 00:06:44,420 --> 00:06:46,900 menggoda terpisah apa int dan apa void. 155 00:06:46,900 --> 00:06:48,430 Tapi untuk saat ini, mari kita lihat pada tiga baris 156 00:06:48,430 --> 00:06:50,350 berjarak 17 15 melalui. 157 00:06:50,350 --> 00:06:52,250 Hal ini di sini saya mengklaim sebagai kereta. 158 00:06:52,250 --> 00:06:54,900 Baris 7 dalam komentar saya mengatakan "Harus mencetak 10 159 00:06:54,900 --> 00:06:59,410 tanda bintang tetapi tidak "Kenapa. hal ini tidak mencetak, pada kenyataannya, 160 00:06:59,410 --> 00:07:01,097 10 bintang seperti itu? 161 00:07:01,097 --> 00:07:02,347 HADIRIN: [Tak terdengar]. 162 00:07:05,210 --> 00:07:05,800 DAVID J. Malan: Tepat. 163 00:07:05,800 --> 00:07:08,720 Jadi melihat bahwa kita mulai menghitung dari 0. 164 00:07:08,720 --> 00:07:10,780 Dan ini sebenarnya adalah sebuah konvensi di program dan 165 00:07:10,780 --> 00:07:13,230 ilmu komputer pada umumnya, mulai menghitung 166 00:07:13,230 --> 00:07:14,610 dari 0, bukan 1. 167 00:07:14,610 --> 00:07:16,690 Dan ini benar-benar hanya berasal dari fakta bahwa, untuk 168 00:07:16,690 --> 00:07:18,940 Misalnya, ketika kita memiliki delapan orang di atas panggung, saat 169 00:07:18,940 --> 00:07:20,680 tidak ada yang mengangkat tangan mereka, mereka 170 00:07:20,680 --> 00:07:22,340 semua nol efektif. 171 00:07:22,340 --> 00:07:24,260 Dan jadi itu hanya semacam konvensi komputer sehingga, 172 00:07:24,260 --> 00:07:26,030 Oleh karena itu, untuk mulai menghitung dari 0. 173 00:07:26,030 --> 00:07:29,130 Jika itu jumlah terendah yang dapat mewakili dalam biner. 174 00:07:29,130 --> 00:07:32,270 >> Jadi di sini kita sudah mulai menginisialisasi i ke 0. 175 00:07:32,270 --> 00:07:34,230 Kami telah menetapkan i sama dengan 0. 176 00:07:34,230 --> 00:07:37,780 Tapi kemudian saya membuat kesalahan ini di sini, mengatakan saya kurang dari atau 177 00:07:37,780 --> 00:07:38,820 sama dengan 10. 178 00:07:38,820 --> 00:07:41,700 Tapi jika Anda berpikir bahwa melalui, jika saya mulai dari 0 dan kemudian saya pergi 179 00:07:41,700 --> 00:07:46,410 sampai dengan 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, aku benar-benar akan 180 00:07:46,410 --> 00:07:49,980 mencetak 11 bintang untuk layar, karena saya sudah naik 181 00:07:49,980 --> 00:07:52,410 ke dan sama dengan 10. 182 00:07:52,410 --> 00:07:55,090 Jadi memperbaiki mudah di sini kemudian adalah apa? 183 00:07:55,090 --> 00:07:56,070 HADIRIN: [Tak terdengar]. 184 00:07:56,070 --> 00:07:57,350 DAVID J. Malan: Hanya mengubahnya menjadi kurang dari. 185 00:07:57,350 --> 00:07:59,700 Jika Anda benar-benar ingin, Anda bisa melakukan ini. 186 00:07:59,700 --> 00:08:01,370 Tapi secara umum, yang disukai. 187 00:08:01,370 --> 00:08:04,020 Dan sehingga mulai menghitung dari 0 hanya sesuatu yang Anda harus 188 00:08:04,020 --> 00:08:05,510 biasanya terbiasa. 189 00:08:05,510 --> 00:08:07,810 Sekarang, bagaimana dengan ini membangun keseluruhan dalam dan dari dirinya sendiri? 190 00:08:07,810 --> 00:08:10,640 Ini 15 baris demarks untuk loop. 191 00:08:10,640 --> 00:08:12,510 Jadi untuk tidak fungsi. 192 00:08:12,510 --> 00:08:13,640 Ini hanya sebuah pernyataan. 193 00:08:13,640 --> 00:08:16,180 Ini adalah membangun perulangan, seperti kita lihat di Scratch. 194 00:08:16,180 --> 00:08:17,600 Dan itu memiliki tiga bagian. 195 00:08:17,600 --> 00:08:19,740 Perhatikan bahwa ada bagian pertama 196 00:08:19,740 --> 00:08:21,350 sebelah kiri dari titik koma. 197 00:08:21,350 --> 00:08:24,200 Ada bagian tengah di antara dua titik koma. 198 00:08:24,200 --> 00:08:26,250 Dan kemudian ada bagian kanan ke kanan 199 00:08:26,250 --> 00:08:27,640 dari koma kedua. 200 00:08:27,640 --> 00:08:31,822 Sekarang, yang pertama ini melakukan apa? 201 00:08:31,822 --> 00:08:33,679 HADIRIN: [Tak terdengar]. 202 00:08:33,679 --> 00:08:34,270 DAVID J. Malan: Kembali sana? 203 00:08:34,270 --> 00:08:34,816 Ya? 204 00:08:34,816 --> 00:08:35,980 HADIRIN: Inisialisasi. 205 00:08:35,980 --> 00:08:36,850 >> DAVID J. Malan: Inisialisasi. 206 00:08:36,850 --> 00:08:37,840 Jadi apa artinya ini? 207 00:08:37,840 --> 00:08:40,690 Kami telah mendeklarasikan sebuah variabel yang disebut i. 208 00:08:40,690 --> 00:08:43,840 Ini adalah tipe int, karena saya sudah ditentukan int i. 209 00:08:43,840 --> 00:08:46,470 Dan aku menginisialisasi i dengan nilai 0. 210 00:08:46,470 --> 00:08:47,730 Jadi apa ini benar-benar katakan? 211 00:08:47,730 --> 00:08:50,680 Ini secara efektif berkata kepada komputer hey, memberi saya cukup 212 00:08:50,680 --> 00:08:53,660 memori, RAM yang cukup, agar sesuai nomor, dan kemudian menempatkan 213 00:08:53,660 --> 00:08:56,130 angka 0 dalam sepotong RAM. 214 00:08:56,130 --> 00:08:59,100 Dan sebagai samping, seberapa besar adalah int biasanya, setidaknya dalam 215 00:08:59,100 --> 00:09:00,280 alat? 216 00:09:00,280 --> 00:09:01,000 HADIRIN: 32 bit. 217 00:09:01,000 --> 00:09:01,670 DAVID J. Malan: 32 bit. 218 00:09:01,670 --> 00:09:04,890 Jadi itu berarti memberi saya 32 bit, atau dikenal sebagai 4 byte, 219 00:09:04,890 --> 00:09:07,250 dan menempatkan 0 nilai di dalamnya, yang cukup mudah karena 220 00:09:07,250 --> 00:09:09,110 itu hanya berarti mengatur semua bit ke 0. 221 00:09:09,110 --> 00:09:11,690 >> Jadi sekarang, bagian kedua di sini adalah kondisi. 222 00:09:11,690 --> 00:09:14,590 Dan kondisi, seperti namanya, adalah apa yang diperiksa 223 00:09:14,590 --> 00:09:18,100 lagi dan lagi dan lagi, apakah itu benar atau salah. 224 00:09:18,100 --> 00:09:21,410 Jadi ini hanya mengatakan melakukan baris kode berikut - 225 00:09:21,410 --> 00:09:23,950 yaitu jalur 16, karena itulah satu-satunya indentasi 226 00:09:23,950 --> 00:09:24,820 bawah - 227 00:09:24,820 --> 00:09:26,980 asalkan i adalah kurang dari 10. 228 00:09:26,980 --> 00:09:30,520 Dan setelah setiap iterasi melalui loop ini, lakukan 229 00:09:30,520 --> 00:09:33,840 incrementation, yang dalam hal ini adalah i + +. 230 00:09:33,840 --> 00:09:35,580 Sekarang, tidak harus i + +. 231 00:09:35,580 --> 00:09:37,610 Ini bisa menjadi i -. 232 00:09:37,610 --> 00:09:39,860 Tapi jika saya melakukan ini, apa perilaku akan 233 00:09:39,860 --> 00:09:41,370 untuk program ini? 234 00:09:41,370 --> 00:09:42,290 HADIRIN: Ini akan menjadi infinite loop. 235 00:09:42,290 --> 00:09:44,060 DAVID J. Malan: Ini akan menjadi semacam loop tak terbatas, 236 00:09:44,060 --> 00:09:47,720 kecuali kita beruntung setelah 2 negatif miliar atau lebih. 237 00:09:47,720 --> 00:09:51,320 Mungkin hal ini akan membungkus, hanya dengan sifat yang terbatas 238 00:09:51,320 --> 00:09:53,930 jumlah bit yang kita telah dialokasikan untuk int. 239 00:09:53,930 --> 00:09:56,270 Tapi itu pasti akan iterate jauh lebih dari 10 dan 240 00:09:56,270 --> 00:09:58,630 pasti lebih dari 11 kali di sini. 241 00:09:58,630 --> 00:10:02,240 >> Dan sekarang, hanya sebagai samping, menyadari bahwa i + + dan i - 242 00:10:02,240 --> 00:10:04,420 benar-benar hanya sintaksis gula. 243 00:10:04,420 --> 00:10:07,210 Ini hanya notasi singkat untuk apa yang sedikit lebih 244 00:10:07,210 --> 00:10:08,720 eksplisit ditulis sebagai berikut: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Yang identik dengan i + +. 247 00:10:13,460 --> 00:10:15,860 Itu hanya semacam tampak cantik untuk mengatakan i + +. 248 00:10:15,860 --> 00:10:17,490 Ini lebih ringkas, lebih mudah dibaca. 249 00:10:17,490 --> 00:10:19,030 Dan sehingga sebagian besar orang melakukan itu sebagai gantinya. 250 00:10:19,030 --> 00:10:21,840 Tapi ini adalah identik secara fungsional kepada 251 00:10:21,840 --> 00:10:22,900 apa yang kita hanya melihat. 252 00:10:22,900 --> 00:10:27,770 Jadi singkatnya, perbaikan cepat di sini adalah hanya untuk mengatakan saya iterate 253 00:10:27,770 --> 00:10:30,690 dari 0 semua jalan sampai dengan kurang dari 10. 254 00:10:30,690 --> 00:10:32,700 Dan kemudian kita memang akan mendapatkan 10 bintang. 255 00:10:32,700 --> 00:10:33,430 >> Jadi mari kita coba ini. 256 00:10:33,430 --> 00:10:35,310 Mari saya membuka terminal di bagian bawah. 257 00:10:35,310 --> 00:10:37,420 Biarkan aku pergi ke direktori bahwa ini adalah masuk 258 00:10:37,420 --> 00:10:40,030 Dan aku akan mengkompilasi secara manual dengan dentang untuk saat ini. 259 00:10:40,030 --> 00:10:44,880 Dan aku akan mengkompilasi ini sebagai buggy1.c, Enter. 260 00:10:44,880 --> 00:10:50,280 Dan sekarang buggy1, mengapa tidak ada berkas atau direktori 261 00:10:50,280 --> 00:10:52,026 disebut buggy1? 262 00:10:52,026 --> 00:10:53,850 HADIRIN: [Tak terdengar]. 263 00:10:53,850 --> 00:10:54,240 DAVID J. Malan: Ya. 264 00:10:54,240 --> 00:10:55,420 Jadi itu benar-benar disebut a.out. 265 00:10:55,420 --> 00:10:57,480 Jadi ingat jika Anda hanya menjalankan dentang, di mana dentang adalah 266 00:10:57,480 --> 00:11:00,420 compiler, dan Anda tidak menentukan nama yang ingin Anda 267 00:11:00,420 --> 00:11:03,550 berikan untuk program anda, itu akan default a.out. 268 00:11:03,550 --> 00:11:05,030 Jadi memang jika saya lakukan ls - 269 00:11:05,030 --> 00:11:05,510 oops. 270 00:11:05,510 --> 00:11:07,680 Dan saya tidak - masalah hitam-putih beberapa 271 00:11:07,680 --> 00:11:08,840 Anda dihadapkan telah diperbaiki. 272 00:11:08,840 --> 00:11:10,670 Tapi biarkan aku melakukan ini. 273 00:11:10,670 --> 00:11:14,570 Di sana kami memiliki a.out di sisi kiri ada. 274 00:11:14,570 --> 00:11:17,360 Jadi kita harus menjalankan a.out bukan buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Jadi biarkan aku pergi ke depan dan melakukan hal ini. 276 00:11:19,140 --> 00:11:22,840 / A.out., Enter. 277 00:11:22,840 --> 00:11:26,160 Dan aku tampaknya tidak melakukan apa? 278 00:11:26,160 --> 00:11:26,620 HADIRIN: Simpan. 279 00:11:26,620 --> 00:11:27,390 DAVID J. Malan: Simpan file saya. 280 00:11:27,390 --> 00:11:31,520 Sehingga mudah dipecahkan dengan memukul S Kontrol, atau pergi ke 281 00:11:31,520 --> 00:11:33,450 File, Save, seperti di sebagian besar program. 282 00:11:33,450 --> 00:11:36,360 Biarkan aku pergi ke sini, membersihkan layar, jalankan lagi. 283 00:11:36,360 --> 00:11:37,960 Dan masih ada bug. 284 00:11:37,960 --> 00:11:41,618 Jadi apa yang sedang terjadi - 285 00:11:41,618 --> 00:11:42,980 HADIRIN: Anda tidak mengkompilasi. 286 00:11:42,980 --> 00:11:44,040 DAVID J. Malan: Ah, baik. 287 00:11:44,040 --> 00:11:45,010 Saya tidak compile. 288 00:11:45,010 --> 00:11:47,250 Seperti idiot, aku melihat kode untuk melihat apa yang salah. 289 00:11:47,250 --> 00:11:51,275 Jadi dentang buggy1.c, sekarang a.out. 290 00:11:51,275 --> 00:11:52,640 Dan Fiuh, disimpan. 291 00:11:52,640 --> 00:11:55,090 >> Sehingga terlihat agak jelek karena tidak ada baris baru 292 00:11:55,090 --> 00:11:55,970 di mana saja dalam program. 293 00:11:55,970 --> 00:11:57,390 Tapi sekali lagi, itu hanya sebuah detail estetika. 294 00:11:57,390 --> 00:11:59,430 Dan setidaknya jika kita menghitung mereka keluar, kita harus 295 00:11:59,430 --> 00:12:01,160 sekarang melihat 10 bintang tersebut. 296 00:12:01,160 --> 00:12:03,260 Nah, bagaimana dengan contoh pemanasan kedua? 297 00:12:03,260 --> 00:12:07,750 Jadi dalam buggy2, saya mengklaim bahwa versi ini juga, akan mencetak 298 00:12:07,750 --> 00:12:10,110 10 bintang, satu per baris. 299 00:12:10,110 --> 00:12:12,340 Jadi saat ini, saya memiliki karakter baris baru, hanya untuk membuat 300 00:12:12,340 --> 00:12:13,520 sedikit lebih cantik hal. 301 00:12:13,520 --> 00:12:15,410 Tapi bukannya apa yang saya dapatkan adalah ini. 302 00:12:15,410 --> 00:12:19,590 Jadi biarkan aku melakukan buggy2.c dentang, Enter. 303 00:12:19,590 --> 00:12:21,790 Sekarang itu lagi disebut a.out. 304 00:12:21,790 --> 00:12:23,130 Enter. 305 00:12:23,130 --> 00:12:26,900 Saya hanya melihat satu baris baru, hanya garis baru yang sangat terakhir yang 306 00:12:26,900 --> 00:12:29,370 bergerak cepat saya ke baris berikutnya. 307 00:12:29,370 --> 00:12:32,660 Namun jelas saya sudah mencetak *, maka baris baru, 308 00:12:32,660 --> 00:12:33,990 *, Maka baris baru. 309 00:12:33,990 --> 00:12:35,490 Tapi apa bug di sini? 310 00:12:35,490 --> 00:12:35,974 Ya? 311 00:12:35,974 --> 00:12:37,224 HADIRIN: [Tak terdengar]. 312 00:12:39,850 --> 00:12:40,470 >> DAVID J. Malan: Tepat. 313 00:12:40,470 --> 00:12:44,110 Jadi tidak seperti beberapa bahasa, seperti Python, di mana indentasi 314 00:12:44,110 --> 00:12:46,030 sebenarnya memiliki makna fungsional, dalam 315 00:12:46,030 --> 00:12:47,150 bahasa seperti C - 316 00:12:47,150 --> 00:12:49,140 seperti yang akan kita lihat, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 indentasi benar-benar hanya untuk kepentingan manusia '. 318 00:12:51,940 --> 00:12:55,690 Jadi fakta bahwa saya telah menjorok baris 16 dan 17 tampak hebat, 319 00:12:55,690 --> 00:12:57,530 tetapi tidak memiliki makna fungsional sini. 320 00:12:57,530 --> 00:13:00,700 Jika saya ingin kedua saluran untuk mengeksekusi sebagai bagian dari untuk 321 00:13:00,700 --> 00:13:05,140 lingkaran, maka saya harus menyertakan mereka dalam kurung kurawal dengan melakukan hal ini. 322 00:13:05,140 --> 00:13:08,540 Anda hanya dapat memotong sudut itu dan menghilangkan kurung kurawal jika 323 00:13:08,540 --> 00:13:10,036 apa yang terjadi? 324 00:13:10,036 --> 00:13:10,410 HADIRIN: Hanya satu baris. 325 00:13:10,410 --> 00:13:11,130 DAVID J. Malan: Hanya satu baris. 326 00:13:11,130 --> 00:13:15,280 Jadi itu hanya semacam semacam bagus detail sintaks sehingga 327 00:13:15,280 --> 00:13:17,900 Anda tidak membuang waktu menulis tiga baris, dua di antaranya adalah 328 00:13:17,900 --> 00:13:20,040 kurung kurawal, hanya untuk menulis satu baris kode. 329 00:13:20,040 --> 00:13:21,650 Tapi jika Anda memiliki dua atau lebih baris, kita 330 00:13:21,650 --> 00:13:22,860 memang perlu melakukan hal ini. 331 00:13:22,860 --> 00:13:24,210 >> Jadi sekarang biarkan aku simpan ini. 332 00:13:24,210 --> 00:13:27,140 Biarkan aku pergi ke depan dan kembali menjalankan dentang. 333 00:13:27,140 --> 00:13:31,375 Kemudian biarkan aku jalankan kembali a.out, dan sekarang saya mendapatkan mereka satu per baris. 334 00:13:31,375 --> 00:13:33,670 Sekarang, a.out lagi adalah jenis nama bodoh untuk sebuah program. 335 00:13:33,670 --> 00:13:37,500 Bagaimana saya bisa tahu dentang untuk benar-benar memberi saya nama file 336 00:13:37,500 --> 00:13:39,820 yang lebih user-friendly, seperti buggy2 sendiri? 337 00:13:43,200 --> 00:13:44,466 Sedikit lebih jelas? 338 00:13:44,466 --> 00:13:45,220 HADIRIN: [Tak terdengar]. 339 00:13:45,220 --> 00:13:47,810 DAVID J. Malan: OK, jadi saya benar-benar dapat mengambil sangat 340 00:13:47,810 --> 00:13:51,000 user-friendly pintas dan hanya menulis membuat buggy2. 341 00:13:51,000 --> 00:13:53,840 Saya tidak menentukan c dalam kasus ini., Dan tekan Enter. 342 00:13:53,840 --> 00:13:58,530 Dan apa yang membuat dilakukannya itu mengkompilasi buggy2.c untuk saya oleh 343 00:13:58,530 --> 00:14:00,260 meminta dentang untuk melakukannya. 344 00:14:00,260 --> 00:14:05,100 Secara khusus, itu panggilan dentang, berjalan dentang menggunakan cara yang lebih 345 00:14:05,100 --> 00:14:08,540 argumen baris perintah atau switch daripada aku benar-benar membutuhkan. 346 00:14:08,540 --> 00:14:11,270 Pada waktunya, kami akan datang kembali untuk apa semua ini berbagai 347 00:14:11,270 --> 00:14:13,810 ekspresi ditulis dgn tanda penghubung samar berarti. 348 00:14:13,810 --> 00:14:16,910 Tapi untuk saat ini, itu hanya menyelamatkan saya kesulitan 349 00:14:16,910 --> 00:14:19,600 harus mengingat dan harus mengetikkan semua orang 350 00:14:19,600 --> 00:14:21,150 berbagai ekspresi ditulis dgn tanda penghubung. 351 00:14:21,150 --> 00:14:23,240 Dan terbalik itu pada akhirnya adalah 352 00:14:23,240 --> 00:14:25,900 bahwa sekarang saya memiliki buggy2. 353 00:14:25,900 --> 00:14:27,480 Jika saya ingin melakukan ini secara manual, meskipun, saya 354 00:14:27,480 --> 00:14:28,775 justru bisa melakukan hal ini - 355 00:14:28,775 --> 00:14:34,110 dentang-o buggy2 dan kemudian buggy2.c. 356 00:14:34,110 --> 00:14:37,980 Dan itu sama akan memberi saya sebuah file yang bernama buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Jadi singkatnya, dentang itu compiler. 358 00:14:39,710 --> 00:14:43,080 Membuat hanyalah alat user-friendly bahwa kita akan menggunakan lebih 359 00:14:43,080 --> 00:14:44,420 dan banyak lagi, karena hanya mulai 360 00:14:44,420 --> 00:14:47,330 menyederhanakan hal-hal untuk kita. 361 00:14:47,330 --> 00:14:49,430 Dan kita kembali 0, terakhir. 362 00:14:49,430 --> 00:14:51,890 Untuk saat ini, hanya karena, tapi kami akan mulai menggoda bagian itu 363 00:14:51,890 --> 00:14:52,930 hari ini dan pada hari Rabu. 364 00:14:52,930 --> 00:14:55,560 Setiap pertanyaan tentang semua ini? 365 00:14:55,560 --> 00:14:56,450 Ya? 366 00:14:56,450 --> 00:14:58,234 HADIRIN: [Tak terdengar] 367 00:14:58,234 --> 00:15:00,020 ls dalam tanda kutip sana? 368 00:15:00,020 --> 00:15:01,710 DAVID J. Malan: OK. 369 00:15:01,710 --> 00:15:05,880 Ketika saya mengetik ls dalam tanda kutip, yang saya melakukan sihir 370 00:15:05,880 --> 00:15:07,160 belakang layar untuk memperbaiki bug. 371 00:15:07,160 --> 00:15:09,370 Aku lupa, seperti kita telah memberitahu banyak dari Anda pada 372 00:15:09,370 --> 00:15:11,600 papan diskusi, untuk melakukan - 373 00:15:11,600 --> 00:15:17,220 kita akan melakukan ini sekarang - sudo yum-y update appliance50. 374 00:15:17,220 --> 00:15:19,790 Whoops, bahwa yang dieja benar. 375 00:15:19,790 --> 00:15:23,240 Jadi alat seperti sistem operasi. 376 00:15:23,240 --> 00:15:25,650 Ini menjalankan sistem operasi yang disebut Fedora. 377 00:15:25,650 --> 00:15:27,450 Dan sekarang karena koneksi internet lambat, saya sudah 378 00:15:27,450 --> 00:15:28,260 benar-benar disemprot itu. 379 00:15:28,260 --> 00:15:31,620 Jadi menjalankan yum update sudo, seperti yang kita katakan Anda lakukan dalam 380 00:15:31,620 --> 00:15:34,080 sejumlah masalah, pada dasarnya seperti menjalankan update otomatis 381 00:15:34,080 --> 00:15:35,420 di Mac OS atau Windows. 382 00:15:35,420 --> 00:15:37,280 Dan alasan untuk menjalankan ini di awal dari 383 00:15:37,280 --> 00:15:39,640 set masalah adalah karena ketika kami menciptakan alat, saya 384 00:15:39,640 --> 00:15:42,480 kacau, dan saya sengaja membuat semua program Anda terlihat 385 00:15:42,480 --> 00:15:45,210 hitam pada layar hitam, yang mengapa Anda tidak melihat mereka 386 00:15:45,210 --> 00:15:45,860 secara default. 387 00:15:45,860 --> 00:15:48,020 Tapi versi terbaru dari alat perbaikan ini. 388 00:15:48,020 --> 00:15:50,500 Dan aku akan memperbaikinya selama istirahat setelah saya memiliki Internet 389 00:15:50,500 --> 00:15:51,280 konektivitas. 390 00:15:51,280 --> 00:15:54,630 >> Jadi tanda kutip hanya menyembunyikan kesalahan saya, sangat diam-diam, 391 00:15:54,630 --> 00:15:55,730 rupanya. 392 00:15:55,730 --> 00:15:56,980 Pertanyaan lain? 393 00:15:59,750 --> 00:16:00,668 Ya? 394 00:16:00,668 --> 00:16:02,012 HADIRIN: Dimana tidak membuat berasal? 395 00:16:02,012 --> 00:16:03,810 [Tak terdengar] 396 00:16:03,810 --> 00:16:04,280 DAVID J. Malan: Pertanyaan yang bagus. 397 00:16:04,280 --> 00:16:05,460 Dimana tidak membuat berasal? 398 00:16:05,460 --> 00:16:09,390 Ini adalah program Linux yang telah ada selama bertahun-tahun, panjang 399 00:16:09,390 --> 00:16:10,570 sebelum CS50. 400 00:16:10,570 --> 00:16:12,930 Dan dilengkapi dengan sistem operasi seperti Fedora. 401 00:16:12,930 --> 00:16:14,830 Itu tidak datang dari perpustakaan CS50. 402 00:16:14,830 --> 00:16:17,560 Bahkan, satu-satunya hal yang berasal dari perpustakaan CS50 403 00:16:17,560 --> 00:16:20,470 sejauh ini, yang kita lihat, adalah GetString, GetInt, semua 404 00:16:20,470 --> 00:16:25,550 Dapatkan mereka fungsi, dan string kata, dan beberapa 405 00:16:25,550 --> 00:16:26,575 sejauh, kata bool. 406 00:16:26,575 --> 00:16:29,180 Tapi kita akan menggoda bahwa selain ketika kita menyelam ke CS50 407 00:16:29,180 --> 00:16:30,580 alatnya sendiri. 408 00:16:30,580 --> 00:16:32,820 >> Jadi ya, satu pertanyaan lagi di sini. 409 00:16:32,820 --> 00:16:36,636 HADIRIN: Ketika Anda mengatakan membuat dan kemudian kereta, bagaimana 410 00:16:36,636 --> 00:16:39,980 komputer tahu [Tak terdengar]? 411 00:16:39,980 --> 00:16:40,520 DAVID J. Malan: Pertanyaan yang bagus. 412 00:16:40,520 --> 00:16:43,830 Jadi, ketika Anda hanya menjalankan make buggy1 atau membuat buggy2, bagaimana 413 00:16:43,830 --> 00:16:45,220 tidak membuat tahu? 414 00:16:45,220 --> 00:16:49,900 Jadi secara default, jika Anda mengetikkan make buggy1, membuat penampilan untuk 415 00:16:49,900 --> 00:16:52,330 file bernama buggy1.c. 416 00:16:52,330 --> 00:16:55,570 Dan kemudian mengeksekusi perintah dentang yang sesuai, 417 00:16:55,570 --> 00:17:00,380 sehingga mengesampingkan default file output yang disebut a.out. 418 00:17:00,380 --> 00:17:03,670 Padahal, jika kita melihat apa yang membuat, apa - 419 00:17:03,670 --> 00:17:04,839 mari kita berhenti ini. 420 00:17:04,839 --> 00:17:09,530 Jika kita melihat apa yang membuat benar-benar melakukan, membuat buggy2, 421 00:17:09,530 --> 00:17:10,470 itu sudah up to date. 422 00:17:10,470 --> 00:17:13,020 Jadi biarkan aku menghapus perintah rm, yang 423 00:17:13,020 --> 00:17:14,319 Program yang saya tulis sebelumnya. 424 00:17:14,319 --> 00:17:17,319 Mengetik Y-E-S untuk mengkonfirmasi bahwa saya ingin menghapusnya. 425 00:17:17,319 --> 00:17:20,480 Jika saya lakukan sekarang membuat, perhatikan bahwa dalam baris yang sangat panjang, 426 00:17:20,480 --> 00:17:22,980 ada hal terakhir di sini,-o buggy2. 427 00:17:22,980 --> 00:17:26,959 Make semua lakukan adalah melewati argumen itu, sehingga untuk berbicara, untuk 428 00:17:26,959 --> 00:17:29,665 Clang, sehingga saya tidak perlu mengetik sendiri. 429 00:17:29,665 --> 00:17:32,660 >> Baiklah, jadi beberapa cepat administrasi 430 00:17:32,660 --> 00:17:33,470 pengumuman. 431 00:17:33,470 --> 00:17:36,940 Jadi untuk bagian, yang secara resmi dimulai ini datang 432 00:17:36,940 --> 00:17:38,970 Minggu, Anda akan selalu ingin membawa, jika 433 00:17:38,970 --> 00:17:40,120 Anda memiliki satu, sebuah laptop. 434 00:17:40,120 --> 00:17:42,570 Jika Anda tidak memiliki sebuah laptop, jangan menjangkau kepada saya oleh 435 00:17:42,570 --> 00:17:43,580 menjatuhkan saya email. 436 00:17:43,580 --> 00:17:44,810 Dan kita akan mengetahui alur kerja. 437 00:17:44,810 --> 00:17:47,100 Apa yang umumnya Anda akan menemukan di bagian adalah bahwa mereka adalah bagian 438 00:17:47,100 --> 00:17:48,770 konseptual, bagian tangan-on. 439 00:17:48,770 --> 00:17:52,190 Kami secara khusus akan menggunakan bagian dari pertanyaan, bagian dari 440 00:17:52,190 --> 00:17:54,110 minggu ini masalah set, berjalan melalui beberapa 441 00:17:54,110 --> 00:17:55,820 konseptual materi dari kuliah. 442 00:17:55,820 --> 00:17:57,480 Dan itu semua di set masalah saat ini. 443 00:17:57,480 --> 00:18:00,010 Dan kita juga akan menyelam ke dalam beberapa tangan-kegiatan, kadang-kadang 444 00:18:00,010 --> 00:18:02,190 yang akan diperlukan untuk diserahkan, kadang-kadang 445 00:18:02,190 --> 00:18:02,830 yang tidak akan. 446 00:18:02,830 --> 00:18:04,630 Misalnya, minggu pertama ini, mereka dimaksudkan hanya sebagai 447 00:18:04,630 --> 00:18:05,780 latihan pemanasan. 448 00:18:05,780 --> 00:18:07,800 Dan Anda akan menemukan bahwa masalah-masalah yang benar-benar hanya itu. 449 00:18:07,800 --> 00:18:10,220 Mereka dimaksudkan untuk menjadi cukup kecil, tetapi belum tentu 450 00:18:10,220 --> 00:18:13,100 sepele program untuk menulis, yang belum tentu 451 00:18:13,100 --> 00:18:16,230 menarik dalam dan dari diri mereka sendiri, tetapi baik kesempatan untuk 452 00:18:16,230 --> 00:18:19,620 berlatih dengan sintaks, dengan fungsi baru, dalam kenyamanan sebuah 453 00:18:19,620 --> 00:18:21,900 bagian di mana Anda memiliki beberapa teman sekelas Anda hadir sebagai 454 00:18:21,900 --> 00:18:22,870 serta TF Anda. 455 00:18:22,870 --> 00:18:26,210 >> Dan apa yang akan kita lakukan dari waktu ke waktu adalah menggunakan alat yang disebut CS50 Spaces, 456 00:18:26,210 --> 00:18:28,940 dimana bukan hanya menggunakan Appliance CS50, Anda akan 457 00:18:28,940 --> 00:18:32,450 bukannya pergi ke halaman web di browser, di mana Anda akan dapat 458 00:18:32,450 --> 00:18:35,610 untuk menulis kode dalam jendela browser saat bagian. 459 00:18:35,610 --> 00:18:38,240 Dan kemudian jika Anda memilih dalam, rekan mengajar Anda kemudian dapat menunjukkan 460 00:18:38,240 --> 00:18:40,980 apa pun yang Anda mengetik pada layar Anda di browser Anda 461 00:18:40,980 --> 00:18:43,930 window sampai di depan kelas, baik secara anonim atau 462 00:18:43,930 --> 00:18:47,250 publik, sehingga ia kemudian dapat berjalan melalui dengan 463 00:18:47,250 --> 00:18:50,080 teman sekelas Anda apa yang Anda lakukan dengan baik, apa yang Anda tidak melakukannya dengan baik. 464 00:18:50,080 --> 00:18:52,750 Dan lagi, yakinlah semua ini dapat dengan baik anonim. 465 00:18:52,750 --> 00:18:54,410 Tapi itu akan menjadi kesempatan bagus untuk lebih 466 00:18:54,410 --> 00:18:56,810 interaktivitas dari sesuatu seperti kuliah memungkinkan. 467 00:18:56,810 --> 00:18:58,910 >> Sementara itu, kita akan memiliki hal-hal ini disebut super 468 00:18:58,910 --> 00:19:01,610 bagian, yang adalah opsional, tetapi terbuka untuk semua orang di 469 00:19:01,610 --> 00:19:04,030 kelas, sehingga Anda dapat melakukan ini lebih kolektif untuk 470 00:19:04,030 --> 00:19:05,190 Masalah menetapkan satu. 471 00:19:05,190 --> 00:19:06,010 Berikut jadwal. 472 00:19:06,010 --> 00:19:08,870 Hal ini juga diposting pada homepage di cs50.net. 473 00:19:08,870 --> 00:19:10,850 Perhatikan bahwa akan ada hacker khusus 474 00:19:10,850 --> 00:19:12,430 satu besok sore. 475 00:19:12,430 --> 00:19:15,460 Dan kami akan memfilmkan satu hari ini dan besok dan satu posting mereka 476 00:19:15,460 --> 00:19:16,720 online dalam waktu 24 jam. 477 00:19:16,720 --> 00:19:19,370 Jadi jika Anda tidak dapat membuat salah satu kali, tidak perlu khawatir. 478 00:19:19,370 --> 00:19:22,720 Dan lagi, jadwal yang online sekarang di cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> Dalam hal sectioning sendiri, Anda harus mendapatkan suatu 480 00:19:25,350 --> 00:19:28,520 email menginstruksikan Anda untuk pergi ke homepage saja untuk menemukan 481 00:19:28,520 --> 00:19:29,610 keluar bagian Anda. 482 00:19:29,610 --> 00:19:32,890 Jika kehidupan telah berubah dan Anda perlu mengubah bagian Anda, 483 00:19:32,890 --> 00:19:33,560 tidak masalah. 484 00:19:33,560 --> 00:19:37,900 Kembali ke URL yang sama, cs50.net/section, tunggal, 485 00:19:37,900 --> 00:19:40,090 dan Anda akan mengisi formulir yang sama sehingga Anda dapat 486 00:19:40,090 --> 00:19:41,260 kemudian memberi kita preferensi Anda. 487 00:19:41,260 --> 00:19:43,360 Dan kami akan menindaklanjuti pada akhir minggu untuk apa yang kita bisa 488 00:19:43,360 --> 00:19:44,240 mengakomodasi. 489 00:19:44,240 --> 00:19:49,530 Pekan lalu, ingat bahwa kami mengusulkan menggunakan CS50 Bahas, 490 00:19:49,530 --> 00:19:51,370 kursus ini pembahasan alat, dalam kuliah. 491 00:19:51,370 --> 00:19:53,680 Jadi kami memiliki 40 pertanyaan yang diajukan dan 492 00:19:53,680 --> 00:19:54,720 menjawab selama kuliah. 493 00:19:54,720 --> 00:19:56,280 Jadi tampaknya bekerja dengan baik, jadi kami akan terus 494 00:19:56,280 --> 00:19:57,180 mencoba untuk melakukan hal ini. 495 00:19:57,180 --> 00:19:59,600 Jika, selama kuliah, Anda tidak hanya merasa nyaman penggalangan 496 00:19:59,600 --> 00:20:00,780 tangan Anda, tidak masalah. 497 00:20:00,780 --> 00:20:04,640 Pergi ke cs50.net/discuss, posting di sana, dan salah satu pengajaran kami 498 00:20:04,640 --> 00:20:07,270 fellows baik akan menjawabnya secara elektronik atau meningkatkan mereka 499 00:20:07,270 --> 00:20:10,620 tangan atas nama Anda anonim untuk bertanya, tergantung 500 00:20:10,620 --> 00:20:12,470 pada sifat dari pertanyaan. 501 00:20:12,470 --> 00:20:15,000 Dan dalam hal umpan balik, umumnya psets akan 502 00:20:15,000 --> 00:20:16,760 kembali dalam waktu seminggu. 503 00:20:16,760 --> 00:20:19,080 Karena memerlukan sedikit waktu untuk bagian untuk mencapai 504 00:20:19,080 --> 00:20:22,430 kesetimbangan, pset pertama, 0 dan 1, akan menjadi sedikit 505 00:20:22,430 --> 00:20:24,130 tertunda karena hal menetap. 506 00:20:24,130 --> 00:20:27,130 Tapi menantikan untuk itu dalam minggu-minggu yang akan datang. 507 00:20:27,130 --> 00:20:29,750 >> Baiklah, jadi biar memakai serius saya 508 00:20:29,750 --> 00:20:31,040 suara untuk sesaat. 509 00:20:31,040 --> 00:20:32,690 Jadi ini sebenarnya adalah iklim yang menarik untuk menjadi 510 00:20:32,690 --> 00:20:35,210 memiliki diskusi ini, apa dengan semua hal-hal lain 511 00:20:35,210 --> 00:20:37,310 terjadi di dalamnya kampus terkait. 512 00:20:37,310 --> 00:20:40,220 Tapi CS50 tentu memiliki sejarah khusus ini 513 00:20:40,220 --> 00:20:43,360 topik, dalam sebanyak setiap tahun, kursus ini, bagi banyak 514 00:20:43,360 --> 00:20:46,910 tahun, Ad-Dewan sekitar 3% dari kelas. 515 00:20:46,910 --> 00:20:51,620 Tahun ini terbaru, 2011, CS50 Ad-Boarded 35 siswa. 516 00:20:51,620 --> 00:20:54,120 Ini bukan, saya pikir, karena kurangnya kejelasan. 517 00:20:54,120 --> 00:20:56,760 Sadarilah bahwa dalam silabus mata kuliah tersebut, ada halaman 518 00:20:56,760 --> 00:20:59,020 pernyataan yang menjelaskan di mana garis. 519 00:20:59,020 --> 00:21:01,350 Pernyataan yang sama diulang pada setiap salah satu 520 00:21:01,350 --> 00:21:03,070 Masalah set di halaman satu. 521 00:21:03,070 --> 00:21:05,760 >> Jadi saya menyebutkan hari ini benar-benar hanya untuk membuat 522 00:21:05,760 --> 00:21:07,030 sadar ini orang. 523 00:21:07,030 --> 00:21:08,080 Dan kita sudah mencoba hal yang berbeda. 524 00:21:08,080 --> 00:21:10,630 Dan apa yang saya pikir kita akan lakukan hari ini hanya mengambil waktu sejenak untuk 525 00:21:10,630 --> 00:21:13,830 benar-benar melihat beberapa kasus masa lalu yang telah datang. 526 00:21:13,830 --> 00:21:16,160 Daripada menjaga rahasia sedikit kotor, sebenarnya 527 00:21:16,160 --> 00:21:19,170 menunjukkan apa yang siswa lakukan dan bagaimana kita telah mendeteksi 528 00:21:19,170 --> 00:21:21,630 dan benar-benar apa motivasi menyeluruh adalah untuk 529 00:21:21,630 --> 00:21:23,950 bahkan memiliki percakapan ini. 530 00:21:23,950 --> 00:21:27,060 Jadi dengan mengatakan bahwa, garis dasarnya adalah ini - 531 00:21:27,060 --> 00:21:29,200 per silabus, Anda dipersilahkan, anda dianjurkan, untuk 532 00:21:29,200 --> 00:21:30,210 berbicara dengan teman sekelas. 533 00:21:30,210 --> 00:21:31,910 Itulah seluruh tujuan memiliki ini kolaboratif 534 00:21:31,910 --> 00:21:34,470 kantor jam di Annenberg dan mendorong orang untuk 535 00:21:34,470 --> 00:21:35,755 tugas akhir untuk bekerja sama. 536 00:21:35,755 --> 00:21:38,590 Tapi garis ditarik ketika tiba saatnya untuk benar-benar menulis 537 00:21:38,590 --> 00:21:39,790 Anda akhir solusi. 538 00:21:39,790 --> 00:21:42,590 Berbicara dalam bahasa Inggris, benar-benar baik, berbicara dalam kode semu, 539 00:21:42,590 --> 00:21:43,400 benar-benar baik-baik saja. 540 00:21:43,400 --> 00:21:46,340 Email teman sekelas pset Anda, membiarkan mereka melihat lebih 541 00:21:46,340 --> 00:21:48,610 layar sebagai tangan terus mengetik, 542 00:21:48,610 --> 00:21:50,110 melewati garis serta. 543 00:21:50,110 --> 00:21:52,250 Jangan melihat ke silabus untuk garis tertentu. 544 00:21:52,250 --> 00:21:55,850 >> Tapi hanya untuk melukis gambaran tentang bagaimana hal ini sayangnya 545 00:21:55,850 --> 00:21:58,370 kenyataannya, menyadari bahwa ada banyak website di luar sana yang 546 00:21:58,370 --> 00:22:01,490 memiliki solusi dari kelas ini dan kelas lainnya. 547 00:22:01,490 --> 00:22:04,940 Kenyataan bahwa Anda atau 3% dari Anda tahu bahwa ini ada 548 00:22:04,940 --> 00:22:07,240 Artinya, kita tahu bahwa ini ada. 549 00:22:07,240 --> 00:22:09,340 Fakta bahwa ada website seperti ini di mana Anda 550 00:22:09,340 --> 00:22:11,540 dapat membayar seseorang untuk benar-benar melakukan set masalah Anda - ini adalah 551 00:22:11,540 --> 00:22:13,450 kasus aktual yang muncul tahun lalu. 552 00:22:13,450 --> 00:22:15,790 Ini adalah sebuah situs web disebut odesk.com. 553 00:22:15,790 --> 00:22:20,090 Dan Tim adalah nama orang di sini yang posting di 554 00:22:20,090 --> 00:22:24,580 website ini dan meminta seseorang untuk melakukan pset nya 7 di 555 00:22:24,580 --> 00:22:25,570 kasus ini. 556 00:22:25,570 --> 00:22:28,350 Nah, odesk.com sangat Google-mampu, dan kami juga adalah 557 00:22:28,350 --> 00:22:30,310 sangat baik Googling. 558 00:22:30,310 --> 00:22:32,360 Di sini, juga ada situs - dan yang satu ini agak 559 00:22:32,360 --> 00:22:34,234 mengerikan, terus terang. 560 00:22:34,234 --> 00:22:38,050 [TERTAWA] 561 00:22:38,050 --> 00:22:39,610 DAVID J. Malan: Yang lucu tentang situs ini adalah jika 562 00:22:39,610 --> 00:22:41,970 Anda membaca halaman About, mereka berbicara tentang perusahaan mereka 563 00:22:41,970 --> 00:22:44,390 budaya dan bagaimana layanan pelanggan mereka nomor satu 564 00:22:44,390 --> 00:22:46,190 prioritas, untuk memastikan bahwa Anda mendapatkan tugas 565 00:22:46,190 --> 00:22:47,890 berbalik tepat waktu. 566 00:22:47,890 --> 00:22:50,580 >> Tapi dalam keseriusan semua, sekali lagi, fakta bahwa situs tersebut 567 00:22:50,580 --> 00:22:52,910 ada, menyadari bahwa kita, juga, adalah menyadari 568 00:22:52,910 --> 00:22:53,730 jenis situs. 569 00:22:53,730 --> 00:22:55,890 Dan untuk memberikan rasa apa bentuk ini umumnya 570 00:22:55,890 --> 00:22:58,570 membutuhkan, kita umumnya tidak memiliki skandal besar di mana orang 571 00:22:58,570 --> 00:23:01,080 bekerja sama pada setiap jenis skala besar, melainkan 572 00:23:01,080 --> 00:23:04,540 itu ini larut malam saat-saat kelemahan, di mana Anda memiliki begitu 573 00:23:04,540 --> 00:23:07,550 banyak yang harus dilakukan, itu 4:00 AM, Anda lelah, dan Anda 574 00:23:07,550 --> 00:23:09,770 berpikir untuk diri sendiri, baik, saya hanya melihat saya 575 00:23:09,770 --> 00:23:11,770 teman sekamar atau kode teman saya atau sejenisnya. 576 00:23:11,770 --> 00:23:14,800 Dan manifestasi dari ini sayangnya melibatkan Mahasiswa 577 00:23:14,800 --> 00:23:17,640 Sebuah sesuatu yang mengirimkan seperti ini dan mengirimkan Student B 578 00:23:17,640 --> 00:23:20,370 sesuatu seperti ini, yang pasti, dalam komputer 579 00:23:20,370 --> 00:23:23,830 kelas sains, adalah sangat mudah bagi para ilmuwan komputer 580 00:23:23,830 --> 00:23:25,690 untuk mendeteksi dengan perangkat lunak. 581 00:23:25,690 --> 00:23:28,410 Ini adalah satu lagi paradigma yang umum, di mana Anda sudah semacam 582 00:23:28,410 --> 00:23:31,010 telah bekerja bersama seseorang, mungkin berbicara di 583 00:23:31,010 --> 00:23:32,360 Inggris, baik-baik saja, pseudocode. 584 00:23:32,360 --> 00:23:35,080 Tapi kemudian tiba saatnya untuk benar-benar menyerahkan, dan psets 585 00:23:35,080 --> 00:23:37,910 hanya bisa ditukar melalui email atau Dropbox atau sejenisnya. 586 00:23:37,910 --> 00:23:41,120 Namun dalam upaya untuk membuatnya kurang jelas bahwa ini adalah 587 00:23:41,120 --> 00:23:44,830 apa yang telah terjadi, maka ini adalah apa yang disampaikan. 588 00:23:44,830 --> 00:23:47,880 Ini juga, tidak melonjak sampai yang ditulis dengan baik potongan 589 00:23:47,880 --> 00:23:50,360 perangkat lunak seperti kita harus benar-benar mendeteksi 590 00:23:50,360 --> 00:23:51,280 macam hal. 591 00:23:51,280 --> 00:23:53,760 Dan memang apa yang kita lakukan adalah menjalankan software yang membandingkan semua 592 00:23:53,760 --> 00:23:55,540 tahun ini pengajuan terhadap semua tahun terakhir ini 593 00:23:55,540 --> 00:23:57,380 pengiriman, terhadap segala sesuatu yang kita temukan di 594 00:23:57,380 --> 00:24:00,060 Internet, terhadap setiap situs pekerjaan di luar sana. 595 00:24:00,060 --> 00:24:01,710 Ini semua sangat otomatis. 596 00:24:01,710 --> 00:24:05,665 Dan jadi kita lakukan ini benar-benar dalam keadilan besar untuk% 97 yang 597 00:24:05,665 --> 00:24:07,760 benar-benar bekerja pantat mereka off dalam hal ini dan di lain 598 00:24:07,760 --> 00:24:11,530 kelas dan meletakkan di semua upaya itu sehingga pekerjaan 599 00:24:11,530 --> 00:24:13,030 mereka akhirnya menyerahkan adalah mereka sendiri. 600 00:24:13,030 --> 00:24:14,220 Dan aku bisa terus untuk usia. 601 00:24:14,220 --> 00:24:16,030 >> Ini hanyalah segelintir kasus tahun lalu. 602 00:24:16,030 --> 00:24:19,350 Beberapa siswa mengajukan file-file identik untuk pset 2, 603 00:24:19,350 --> 00:24:22,460 pset 3, 4 pset, pset 5, 6 pset, pset 9. 604 00:24:22,460 --> 00:24:26,360 Dalam kasus ini, ini adalah kuis 0 dan tahun lalu, di mana dua 605 00:24:26,360 --> 00:24:29,570 siswa disampaikan identik kalimat ini di antara banyak 606 00:24:29,570 --> 00:24:32,210 orang lain, "Permintaan tipe -" titik, titik, titik. 607 00:24:32,210 --> 00:24:34,530 Jadi bahkan di kelas 600 yang kita mendeteksi 608 00:24:34,530 --> 00:24:36,310 pada disampaikan kuis. 609 00:24:36,310 --> 00:24:39,080 Jadi singkatnya, ini - terus terang, aku benci memiliki semacam ini 610 00:24:39,080 --> 00:24:41,300 percakapan - tapi ini benar-benar sebuah upaya yang disengaja 611 00:24:41,300 --> 00:24:43,540 tahun ini untuk mencoba untuk menurunkan angka tersebut. 612 00:24:43,540 --> 00:24:45,650 Karena meskipun kita mengatakan hal-macam hal setiap 613 00:24:45,650 --> 00:24:48,100 tahun, saya pikir realitas telah berdiam di atasnya untuk beberapa 614 00:24:48,100 --> 00:24:50,800 detik dari biasanya dan benar-benar hanya menunjukkan 615 00:24:50,800 --> 00:24:53,600 bahwa apa yang mungkin tampak seperti, eh, bukan masalah besar, setidaknya 616 00:24:53,600 --> 00:24:56,390 berpikir kembali ke saat tertentu, baik dalam keadilan untuk 617 00:24:56,390 --> 00:25:00,100 diri sendiri dan teman-teman sekelas Anda di sini. 618 00:25:00,100 --> 00:25:02,480 Jadi jika Anda pernah memiliki pertanyaan ke mana garis 619 00:25:02,480 --> 00:25:04,290 adalah, silahkan saja menjangkau saya pribadi. 620 00:25:04,290 --> 00:25:07,190 Tapi jawabannya selalu, benar-benar menekankan pada 621 00:25:07,190 --> 00:25:09,090 menit terakhir, kas di hari akhir. 622 00:25:09,090 --> 00:25:11,080 Atau jika masalah tidak memiliki apapun hari terlambat, 623 00:25:11,080 --> 00:25:12,900 jujur, email saya secara pribadi. 624 00:25:12,900 --> 00:25:14,110 Kami akan memikirkan sesuatu. 625 00:25:14,110 --> 00:25:17,480 Tolong jangan menempatkan waktu Anda di sini di Harvard beresiko. 626 00:25:17,480 --> 00:25:18,570 >> Sekarang, saya pikir kita harus meringankan suasana, jadi saya 627 00:25:18,570 --> 00:25:20,264 termasuk ini sebagai slide berikutnya. 628 00:25:20,264 --> 00:25:22,770 [TERTAWA] 629 00:25:22,770 --> 00:25:23,630 DAVID J. Malan: Website ini adalah besar. 630 00:25:23,630 --> 00:25:24,820 Saya benar-benar mendapat sedikit terganggu. 631 00:25:24,820 --> 00:25:26,330 Ada satu ini. 632 00:25:26,330 --> 00:25:29,590 Dan kemudian satu ini sangat mengagumkan. 633 00:25:29,590 --> 00:25:35,190 Oke, jadi pikirkan itu kucing larut malam ketika membuat 634 00:25:35,190 --> 00:25:36,040 keputusan tersebut. 635 00:25:36,040 --> 00:25:40,110 Semua, hal-hal yang tepat sehingga kembali ke lebih menyenangkan dan kurang serius, seperti 636 00:25:40,110 --> 00:25:40,780 kondisi. 637 00:25:40,780 --> 00:25:43,900 >> Baiklah, jadi kami berbicara singkat tentang ini. 638 00:25:43,900 --> 00:25:46,080 Ini adalah sesuatu yang mungkin cukup akrab dari 639 00:25:46,080 --> 00:25:47,260 dunia Scratch. 640 00:25:47,260 --> 00:25:49,860 Dan dalam dunia Scratch, kita memiliki kebutuhan ini kadang-kadang untuk 641 00:25:49,860 --> 00:25:51,110 pergi membuat garpu di jalan. 642 00:25:51,110 --> 00:25:54,840 Entah melakukan ini atau itu atau hal lain di sini. 643 00:25:54,840 --> 00:25:58,990 Dan ketika kita ingin melakukan ini, kita bisa menggunakan, di C sekarang, ini jika 644 00:25:58,990 --> 00:26:00,860 lain membangun. 645 00:26:00,860 --> 00:26:06,420 Dan maka di sini kita memiliki ekspresi Boolean. 646 00:26:06,420 --> 00:26:09,260 Misalnya, ekspresi Boolean sini, kita bisa OR 647 00:26:09,260 --> 00:26:12,260 mereka bersama-sama, dalam arti bahwa kita memiliki kondisi ini ATAU 648 00:26:12,260 --> 00:26:13,200 kondisi. 649 00:26:13,200 --> 00:26:15,100 Kita bisa DAN mereka bersama-sama, dalam arti bahwa kita ingin 650 00:26:15,100 --> 00:26:17,710 memeriksa kondisi DAN kondisi itu. 651 00:26:17,710 --> 00:26:22,440 Dan di sini kita memiliki pernyataan switch sekarang, yang tidak begitu 652 00:26:22,440 --> 00:26:26,040 mirip dengan yang sintaksis macam kondisi, tetapi 653 00:26:26,040 --> 00:26:30,160 memungkinkan kita untuk melakukan setara dengan if, else if, else if, else 654 00:26:30,160 --> 00:26:34,990 jika, dan sejenisnya hanya dengan pencacahan mereka kasus per kasus 655 00:26:34,990 --> 00:26:36,670 oleh kasus per kasus. 656 00:26:36,670 --> 00:26:38,370 Jadi kita melihat mereka terakhir kali. 657 00:26:38,370 --> 00:26:40,430 Dan kemudian kita mulai menyentuh pada hal-hal seperti loop. 658 00:26:40,430 --> 00:26:42,070 Kami melihat salah satu dari ini beberapa saat yang lalu. 659 00:26:42,070 --> 00:26:44,180 Tapi ada konstruksi ini perulangan lainnya. 660 00:26:44,180 --> 00:26:46,370 >> Misalnya, ini satu di sini. 661 00:26:46,370 --> 00:26:50,140 Jadi sementara (kondisi), melakukan hal ini lagi dan lagi. 662 00:26:50,140 --> 00:26:53,070 Jadi pada dasarnya, apa yang tampaknya berbeda antara 663 00:26:53,070 --> 00:26:55,760 untuk loop dan loop sementara di sini? 664 00:27:00,810 --> 00:27:05,045 Hal ini untuk loop dan ini while loop. 665 00:27:05,045 --> 00:27:07,840 Ya? 666 00:27:07,840 --> 00:27:08,800 Apa itu? 667 00:27:08,800 --> 00:27:10,050 HADIRIN: [Tak terdengar]. 668 00:27:14,632 --> 00:27:15,120 DAVID J. Malan: Baik. 669 00:27:15,120 --> 00:27:17,130 Jadi sedangkan di untuk kondisi loop, ada jelas 670 00:27:17,130 --> 00:27:17,940 lebih sintaks. 671 00:27:17,940 --> 00:27:20,560 Ada inisialisasi ini, ada pembaruan ini. 672 00:27:20,560 --> 00:27:23,820 Dalam beberapa saat loop, hanya ada kondisi ini. 673 00:27:23,820 --> 00:27:26,630 Jadi sepertinya bahwa itu sedikit dikupas ke bawah versus untuk 674 00:27:26,630 --> 00:27:28,770 loop, yang berarti jika kita ingin memiliki variabel dan kami ingin 675 00:27:28,770 --> 00:27:30,800 memiliki incrementation, kita benar-benar harus 676 00:27:30,800 --> 00:27:32,500 melakukan hal ini diri kita sendiri. 677 00:27:32,500 --> 00:27:34,420 >> Jadi biarkan aku pergi ke depan dan membuka gedit. 678 00:27:34,420 --> 00:27:36,320 Biarkan saya beralih ke alat. 679 00:27:36,320 --> 00:27:38,110 Dan mari kita hanya melakukan sedikit contoh cepat yang 680 00:27:38,110 --> 00:27:40,550 membedakan salah satu dari yang lain. 681 00:27:40,550 --> 00:27:42,490 Dan di belakang pikiran saya di sini, saya harus mengatakan satu hal. 682 00:27:42,490 --> 00:27:44,120 Saya secara khusus menyebutkan nama Tim. 683 00:27:44,120 --> 00:27:47,740 Tim sebenarnya seseorang bahwa seorang siswa mencoba untuk menemukan untuk melakukan 684 00:27:47,740 --> 00:27:48,680 mereka pekerjaan untuk mereka. 685 00:27:48,680 --> 00:27:51,280 Kami tidak punya Tim di bagian tertentu. 686 00:27:51,280 --> 00:27:53,690 Jadi menyadari, supaya aku diungkapkan mahasiswa, itu bukan mahasiswa. 687 00:27:53,690 --> 00:27:55,720 Itu orang acak di Internet melakukan hal-hal 688 00:27:55,720 --> 00:27:57,180 tahun lalu proxy. 689 00:27:57,180 --> 00:27:58,670 Jadi kita menemukan bahwa, juga. 690 00:27:58,670 --> 00:28:00,630 Jadi dalam hal ini di sini, biarkan aku pergi ke depan dan 691 00:28:00,630 --> 00:28:02,810 membuka file baru. 692 00:28:02,810 --> 00:28:04,800 File, New. 693 00:28:04,800 --> 00:28:06,050 Ini memberi saya tab di sini. 694 00:28:06,050 --> 00:28:09,940 Biarkan aku pergi ke depan dan simpan sebagai loop.c. 695 00:28:09,940 --> 00:28:11,810 Biarkan aku pergi dan klik Save. 696 00:28:11,810 --> 00:28:15,340 Dan kemudian di sini, mari kita pergi ke depan dan mulai menulis 697 00:28:15,340 --> 00:28:16,605 # Include. 698 00:28:19,116 --> 00:28:20,520 Biarkan aku zoom in 699 00:28:20,520 --> 00:28:23,410 Sekarang kita akan melakukan int main (void). 700 00:28:23,410 --> 00:28:30,020 Sekarang biarkan aku pergi ke depan dan lakukan untuk (int i = 0; i < 701 00:28:30,020 --> 00:28:33,480 oh, 10; i + +). 702 00:28:33,480 --> 00:28:36,620 Dan sekarang aku akan pergi ke depan dan jangan mencetak bintang yang saya 703 00:28:36,620 --> 00:28:37,890 lakukan sebelumnya. 704 00:28:37,890 --> 00:28:39,390 Dan kemudian pada akhir program ini, kami hanya akan 705 00:28:39,390 --> 00:28:41,130 mencetak baris baru, hanya agar prompt saya 706 00:28:41,130 --> 00:28:42,470 tidak terlihat semua berantakan. 707 00:28:42,470 --> 00:28:45,170 return 0. 708 00:28:45,170 --> 00:28:47,610 Tampak sintaksis benar? 709 00:28:47,610 --> 00:28:48,040 Sejauh. 710 00:28:48,040 --> 00:28:48,560 Jadi mari kita lihat. 711 00:28:48,560 --> 00:28:51,290 >> Jadi biarkan aku tampilannya keluar, masuk ke jendela terminal saya. 712 00:28:51,290 --> 00:28:54,570 Dan biarkan aku pergi ke depan dan menjalankan loop, karena saya menyebut 713 00:28:54,570 --> 00:28:55,690 hal loop.c. 714 00:28:55,690 --> 00:28:56,780 Jadi membuat lingkaran. 715 00:28:56,780 --> 00:28:57,840 Sepertinya untuk mengkompilasi OK. 716 00:28:57,840 --> 00:29:00,210 Biarkan saya menjalankan loop, dan sekarang Enter. 717 00:29:00,210 --> 00:29:01,820 Dan tampaknya telah dicetak 10 bintang. 718 00:29:01,820 --> 00:29:03,780 Jadi mari kita mengubah ini untuk beberapa saat loop dan melihat apa 719 00:29:03,780 --> 00:29:05,220 jenis masalah yang kita tersandung. 720 00:29:05,220 --> 00:29:11,290 Jadi bukannya ini, biarkan aku pergi di sini dan mengatakan sementara i adalah 721 00:29:11,290 --> 00:29:12,760 kurang dari 10 - 722 00:29:12,760 --> 00:29:14,910 biarkan aku menyingkirkan untuk loop. 723 00:29:14,910 --> 00:29:17,170 OK, jadi kami memiliki beberapa masalah sudah. 724 00:29:17,170 --> 00:29:21,110 Jadi kondisinya sama, tapi aku jelas hilang 725 00:29:21,110 --> 00:29:21,680 inisialisasi. 726 00:29:21,680 --> 00:29:23,840 Saya hilang incrementation. 727 00:29:23,840 --> 00:29:28,020 Jadi apa yang harus compiler kemungkinan memberitahu saya ketika saya mencoba untuk 728 00:29:28,020 --> 00:29:29,170 mengkompilasi program ini? 729 00:29:29,170 --> 00:29:29,666 Ya? 730 00:29:29,666 --> 00:29:31,154 HADIRIN: [Tak terdengar]. 731 00:29:31,154 --> 00:29:31,650 >> DAVID J. Malan: Baik. 732 00:29:31,650 --> 00:29:34,180 Jadi itu akan mengatakan sesuatu seperti dideklarasikan - dalam hal ini 733 00:29:34,180 --> 00:29:35,280 kasus, variabel i. 734 00:29:35,280 --> 00:29:37,980 Dan memang, penggunaan undeclared identifier i. 735 00:29:37,980 --> 00:29:40,960 Dan jadi ini sangat kontras dengan bahasa seperti PHP dan 736 00:29:40,960 --> 00:29:43,120 Python dan Ruby, yang beberapa dari Anda mungkin familiar, 737 00:29:43,120 --> 00:29:44,820 di mana Anda dapat hanya jenis mulai menggunakan variabel 738 00:29:44,820 --> 00:29:47,420 mau tak mau dan tidak perlu khawatir tentang menyatakan mereka 739 00:29:47,420 --> 00:29:48,560 eksplisit selalu. 740 00:29:48,560 --> 00:29:51,770 Dalam C dan dalam bahasa seperti Java dan C + +, Anda harus 741 00:29:51,770 --> 00:29:53,020 Super eksplisit. 742 00:29:53,020 --> 00:29:55,760 Dan jika Anda ingin sebuah variabel yang disebut i, Anda harus memberitahu saya 743 00:29:55,760 --> 00:29:57,360 apa variabel itu. 744 00:29:57,360 --> 00:29:59,360 Jadi kita akan harus memperbaiki ini sebagai berikut. 745 00:29:59,360 --> 00:30:05,510 Aku akan harus pergi di sini dan ketik int i, karena itu, 746 00:30:05,510 --> 00:30:07,860 Saya telah mendeklarasikan variabel yang disebut i. 747 00:30:07,860 --> 00:30:09,180 Sekarang, saya sudah melewatkan satu langkah. 748 00:30:09,180 --> 00:30:11,340 Saya jelas tidak diinisialisasi, tapi mari kita lihat apakah itu di 749 00:30:11,340 --> 00:30:13,650 Setidaknya merek berhenti dentang mengeluh. 750 00:30:13,650 --> 00:30:15,770 Jadi biarkan aku remake program ini. 751 00:30:15,770 --> 00:30:16,770 >> Baiklah, sekarang itu hanya mengeluh 752 00:30:16,770 --> 00:30:17,870 untuk alasan yang berbeda. 753 00:30:17,870 --> 00:30:21,130 "Variabel 'i' yang diinisiasi bila digunakan di sini." Baiklah, jadi 754 00:30:21,130 --> 00:30:22,340 itu cukup eksplisit. 755 00:30:22,340 --> 00:30:25,510 Diinisialisasi hanya berarti pengaturan itu sama dengan nilai. 756 00:30:25,510 --> 00:30:30,820 Dan kami sudah tidak melakukan itu, jadi saya mencoba sama dengan 0. 757 00:30:30,820 --> 00:30:35,030 Sekarang mari kita coba ini lagi dan kembali menjalankan dentang. 758 00:30:35,030 --> 00:30:36,140 Disusun saat ini. 759 00:30:36,140 --> 00:30:37,210 Dan aku akan menjalankannya. 760 00:30:37,210 --> 00:30:43,120 Namun infinite loop besar tua, karena saya sudah melakukan 761 00:30:43,120 --> 00:30:45,530 inisialisasi, saya sudah melakukan kondisi, tapi saya belum pernah melakukan 762 00:30:45,530 --> 00:30:47,030 apapun incrementation. 763 00:30:47,030 --> 00:30:48,780 Jadi bagaimana bisa saya lakukan incrementation? 764 00:30:48,780 --> 00:30:51,170 Nah, dalam while loop, rasanya seperti aku akan memiliki 765 00:30:51,170 --> 00:30:54,180 untuk melakukannya dalam loop, karena banyak seperti yang pertama 766 00:30:54,180 --> 00:30:56,570 minggu contoh melakukan konstruksi perulangan, seperti dengan 767 00:30:56,570 --> 00:30:59,040 kaus kaki dan dengan menghitung diri, kami harus melakukan 768 00:30:59,040 --> 00:31:01,550 sesuatu di akhir, seperti kembali ke baris berikutnya. 769 00:31:01,550 --> 00:31:05,040 Bagaimana jika saya pergi ke depan dan melakukan hal ini i + + di sini? 770 00:31:05,040 --> 00:31:06,030 Mari kita bahkan tidak mengkompilasi ini. 771 00:31:06,030 --> 00:31:06,890 Tangkap aku sudah. 772 00:31:06,890 --> 00:31:09,704 Apa yang salah di sini? 773 00:31:09,704 --> 00:31:10,690 HADIRIN: [Tak terdengar]. 774 00:31:10,690 --> 00:31:11,770 >> DAVID J. Malan: Jadi itu pasti tidak int. 775 00:31:11,770 --> 00:31:13,080 Ini i. 776 00:31:13,080 --> 00:31:15,110 Dan keriting kawat gigi, seperti sebelumnya, 777 00:31:15,110 --> 00:31:16,800 indentasi tidak cukup. 778 00:31:16,800 --> 00:31:18,410 Jadi sekarang saya telah membangun ini. 779 00:31:18,410 --> 00:31:21,780 Jadi sementara saya adalah kurang dari 10, mencetak bintang, 780 00:31:21,780 --> 00:31:23,220 maka kenaikan i. 781 00:31:23,220 --> 00:31:25,680 Dan cara sementara karya loop bahwa segera setelah Anda menekan 782 00:31:25,680 --> 00:31:29,630 bawah loop, yang dalam hal ini terlihat seperti baris 10, 783 00:31:29,630 --> 00:31:32,880 itu akan kembali ke jalur 6, di mana titik 784 00:31:32,880 --> 00:31:34,400 Kondisi akan diperiksa lagi. 785 00:31:34,400 --> 00:31:37,500 Dan jika saya masih kurang dari 10, kami akan melakukan jalur 8 dan 786 00:31:37,500 --> 00:31:41,250 kemudian 9, maka kita akan mencapai 10, dan kembali ke 6, lagi dan 787 00:31:41,250 --> 00:31:45,580 lagi dan lagi dan lagi, asalkan i adalah kurang dari 10. 788 00:31:45,580 --> 00:31:47,860 Jadi mari kita kembali jalankan make di sini. 789 00:31:47,860 --> 00:31:48,940 >> Oke, kita telah menyusun apa-apa. 790 00:31:48,940 --> 00:31:50,300 Mari saya kembali menjalankan loop. 791 00:31:50,300 --> 00:31:52,620 Dan sekarang itu benar-benar tampaknya bekerja. 792 00:31:52,620 --> 00:31:55,100 Jadi plus dan minus di sini? 793 00:31:55,100 --> 00:31:58,910 Nah, sejauh ini ada sebenarnya bukan seluruh PLO - 794 00:31:58,910 --> 00:31:59,420 sangat lucu. 795 00:31:59,420 --> 00:32:01,870 Baiklah, itu adalah - ah, itu kecelakaan. 796 00:32:01,870 --> 00:32:05,200 Baiklah, jadi mari kita kembali ke untuk loop. 797 00:32:05,200 --> 00:32:07,530 Jadi untuk loop yang bagus karena mereka super eksplisit. 798 00:32:07,530 --> 00:32:09,720 Dan meskipun mereka sedikit kikuk untuk menulis, itu 799 00:32:09,720 --> 00:32:11,500 sangat kuat dan memungkinkan Anda untuk melakukan 800 00:32:11,500 --> 00:32:12,980 beberapa hal sekaligus. 801 00:32:12,980 --> 00:32:16,240 Sementara loop tampaknya tidak memiliki sejumlah besar nilai hanya 802 00:32:16,240 --> 00:32:18,500 Namun, karena rasanya kita hanya perlu melakukan lebih banyak pekerjaan. 803 00:32:18,500 --> 00:32:20,670 Kita harus meletakkan inisialisasi di sini, yang 804 00:32:20,670 --> 00:32:23,480 memperbarui di sini, dan kita harus ingat untuk melakukan semua itu. 805 00:32:23,480 --> 00:32:26,260 Jadi kita akan lihat pada saat itu loop sementara sebenarnya meminjamkan 806 00:32:26,260 --> 00:32:29,380 diri untuk hanya konteks yang berbeda, data yang berbeda 807 00:32:29,380 --> 00:32:33,900 struktur seperti daftar dan tabel hash, hal yang kita akan sampai ke 808 00:32:33,900 --> 00:32:34,970 mid-semester. 809 00:32:34,970 --> 00:32:37,900 Tapi untuk saat ini, tahu bahwa ada jenis ketiga yang dikenal sebagai do- 810 00:32:37,900 --> 00:32:38,480 sementara loop. 811 00:32:38,480 --> 00:32:39,540 Dan kami telah melihat sebentar ini. 812 00:32:39,540 --> 00:32:41,830 Dan ini mungkin super membantu dengan pset 1. 813 00:32:41,830 --> 00:32:45,570 Setiap kali Anda ingin melakukan sesuatu dan kemudian memeriksa apakah 814 00:32:45,570 --> 00:32:48,940 pengguna bekerja sama, dan jika mereka tidak, melakukannya lagi, do- 815 00:32:48,940 --> 00:32:51,460 sementara loop cocok untuk semacam itu logika. 816 00:32:51,460 --> 00:32:55,640 Karena sebagai urutan dari atas ke bawah di sini menunjukkan, 817 00:32:55,640 --> 00:32:57,750 yang secara harfiah berarti melakukan hal ini. 818 00:32:57,750 --> 00:32:59,830 Dan melakukan ini lagi dan lagi, apa yang mungkin itu? 819 00:32:59,830 --> 00:33:03,000 Mungkin itu berarti GetInt menelepon atau GetString dan kemudian 820 00:33:03,000 --> 00:33:05,830 memeriksa nilai GetInt atau GetString dan kemudian berteriak 821 00:33:05,830 --> 00:33:08,260 pada pengguna jika mereka tidak bekerja sama dengan meminta mereka 822 00:33:08,260 --> 00:33:10,100 lagi dan lagi dan lagi. 823 00:33:10,100 --> 00:33:11,730 Di mana Anda ingin melakukan sesuatu sekali, 824 00:33:11,730 --> 00:33:13,210 kemudian memeriksa beberapa kondisi. 825 00:33:13,210 --> 00:33:14,110 >> Jadi mari kita coba ini. 826 00:33:14,110 --> 00:33:17,130 Biarkan aku benar-benar mengubah ini sekarang untuk loop do-while. 827 00:33:17,130 --> 00:33:18,830 Dan aku akan pergi ke depan dan lakukan hal berikut. 828 00:33:18,830 --> 00:33:21,830 Jadi melakukan hal berikut. 829 00:33:21,830 --> 00:33:26,870 Mari kita lakukan int i = GetInt (), tetapi mari kita pertama memberitahu pengguna 830 00:33:26,870 --> 00:33:27,410 apa yang harus dilakukan. 831 00:33:27,410 --> 00:33:29,050 Jadi waktu yang sedikit berbeda ini. 832 00:33:29,050 --> 00:33:31,270 "Beri aku sebuah int". 833 00:33:31,270 --> 00:33:32,910 Jadi saya akan menggunakan printf untuk itu. 834 00:33:32,910 --> 00:33:35,740 Dan sekarang aku akan pergi ke sini, dan aku akan melakukan hal ini 835 00:33:35,740 --> 00:33:41,520 sementara saya adalah, katakanlah, lebih besar dari - 836 00:33:41,520 --> 00:33:47,540 mari kita lihat, saya adalah, katakanlah, kurang dari 0, atau i adalah 837 00:33:47,540 --> 00:33:48,730 lebih besar dari 10. 838 00:33:48,730 --> 00:33:51,810 Dengan kata lain, saya ingin nomor dari 1 sampai 9, hanya 839 00:33:51,810 --> 00:33:52,720 sewenang-wenang. 840 00:33:52,720 --> 00:33:55,290 Jadi saya menggunakan ekspresi Boolean gabungan di sini untuk 841 00:33:55,290 --> 00:33:59,930 pastikan bahwa i adalah kurang dari 0 atau lebih besar dari 10, di mana 842 00:33:59,930 --> 00:34:02,530 kasus saya akan melakukan loop ini di sini lagi. 843 00:34:02,530 --> 00:34:04,400 Jadi sekali lagi, lakukan ini - 844 00:34:04,400 --> 00:34:08,480 sementara i adalah kurang dari 0 atau i lebih besar dari 10. 845 00:34:08,480 --> 00:34:11,440 >> Jadi sekarang mari kita pergi ke depan dan melakukan hal ini setelah kami telah melakukan itu. 846 00:34:11,440 --> 00:34:13,270 Mari kita hanya melakukan cek kewarasan cepat. 847 00:34:13,270 --> 00:34:18,929 printf ("Terima kasih, saya adalah% d", i). 848 00:34:18,929 --> 00:34:21,350 Jadi program ini sederhana meminta user untuk int, 849 00:34:21,350 --> 00:34:24,000 membuat yakin itu dalam beberapa rentang, 1 sampai 9 inklusif, 850 00:34:24,000 --> 00:34:26,280 dan kemudian terima kasih pengguna dengan mengingatkan mereka apa yang mereka hanya 851 00:34:26,280 --> 00:34:27,940 mengetik, hanya sebagai cek kewarasan sedikit. 852 00:34:27,940 --> 00:34:30,659 Tapi mari kita lihat apakah ini bekerja sebagaimana dimaksud. 853 00:34:30,659 --> 00:34:34,533 Biarkan aku pergi kepala ke sini dan kembali menjalankan membuat loop. 854 00:34:34,533 --> 00:34:35,350 Hmm. 855 00:34:35,350 --> 00:34:38,600 "Penggunaan undeclared identifier 'i'". Itu aneh. 856 00:34:38,600 --> 00:34:41,509 Saya pikir kami memutuskan bahwa. 857 00:34:45,489 --> 00:34:47,560 Sama gejala tetapi kode yang berbeda. 858 00:34:47,560 --> 00:34:47,899 Ya? 859 00:34:47,899 --> 00:34:50,191 HADIRIN: [Tak terdengar] dalam dua, kita harus 860 00:34:50,191 --> 00:34:52,639 [Tak terdengar]. 861 00:34:52,639 --> 00:34:53,260 >> DAVID J. Malan: Tepat. 862 00:34:53,260 --> 00:34:55,989 Jadi ini benar-benar membawa kita ke topik yang dikenal sebagai ruang lingkup. 863 00:34:55,989 --> 00:34:59,350 Ternyata C, sekali lagi, itu benar-benar membawa Anda secara harfiah. 864 00:34:59,350 --> 00:35:02,970 Dan jika Anda melakukan sesuatu seperti ini di mana Anda mendeklarasikan int 865 00:35:02,970 --> 00:35:06,120 dan kemudian menetapkan beberapa nilai, tapi Anda melakukannya dalam sebuah 866 00:35:06,120 --> 00:35:09,840 sepasang kurung kurawal, apa C dilakukannya itu mengasumsikan bahwa Anda 867 00:35:09,840 --> 00:35:14,800 hanya ingin orang-bit 32 yang dikenal sebagai i untuk tetap eksis dalam 868 00:35:14,800 --> 00:35:18,200 konteks tersebut kurung kurawal, dalam konteks garis 869 00:35:18,200 --> 00:35:22,420 6 sampai 9. Jadi saya dinyatakan, dan diberikan sebuah 870 00:35:22,420 --> 00:35:26,530 nilai di baris 8, tetapi segera setelah Anda mendapatkan luar 871 00:35:26,530 --> 00:35:30,270 jalur 9 di bawah penjepit keriting, saya tidak lagi 872 00:35:30,270 --> 00:35:31,910 ruang lingkup, sehingga untuk berbicara. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Ini tidak lagi dalam konteks yang tepat. 874 00:35:35,030 --> 00:35:37,940 Jadi sekarang tidak ada i, jadi seolah-olah kita bahkan tidak 875 00:35:37,940 --> 00:35:38,770 menyatakan sama sekali. 876 00:35:38,770 --> 00:35:41,520 >> Jadi apa yang memperbaiki maka untuk sesuatu seperti ini, jika 877 00:35:41,520 --> 00:35:44,300 Alasannya adalah bahwa i dinyatakan dalam kurung kurawal, yang 878 00:35:44,300 --> 00:35:45,120 ternyata buruk? 879 00:35:45,120 --> 00:35:45,410 Di sini? 880 00:35:45,410 --> 00:35:46,820 HADIRIN: [Tak terdengar]. 881 00:35:46,820 --> 00:35:47,150 DAVID J. Malan: Ya. 882 00:35:47,150 --> 00:35:48,710 Jadi kita bisa menginisialisasi luar. 883 00:35:48,710 --> 00:35:53,530 Jadi biarkan aku pergi ke depan dan menghapus bagian deklarasi dimana 884 00:35:53,530 --> 00:35:55,820 Saya menentukan jenis, dan biarkan aku melakukannya di sini. 885 00:35:55,820 --> 00:36:00,220 Jadi sejalan 5, sekarang mengatakan "Beri aku sebuah int." Sebut saja i. 886 00:36:00,220 --> 00:36:03,400 Perhatikan sejalan 9, saya tidak ingin melakukan hal ini, karena saya 887 00:36:03,400 --> 00:36:04,830 sudah memiliki 32 bit. 888 00:36:04,830 --> 00:36:06,140 Saya tidak ingin meminta komputer untuk 889 00:36:06,140 --> 00:36:07,630 bit 32 yang berbeda. 890 00:36:07,630 --> 00:36:09,850 Saya ingin menggunakan mereka 32 bit yang sama. 891 00:36:09,850 --> 00:36:13,190 Dan sekarang karena saya dinyatakan di baris 5, itu masih legit 892 00:36:13,190 --> 00:36:16,550 untuk menggunakannya di baris 11 dan baris 12. 893 00:36:16,550 --> 00:36:19,310 >> Jadi saya mencoba untuk mengkompilasi ulang ini dan melihat 894 00:36:19,310 --> 00:36:20,490 jika dentang berhenti berteriak. 895 00:36:20,490 --> 00:36:22,380 membuat loop. 896 00:36:22,380 --> 00:36:25,470 Jadi sekarang itu adalah "deklarasi implisit dari fungsi 897 00:36:25,470 --> 00:36:29,880 'GetInt' tidak valid di C99 "Apa itu.? 898 00:36:29,880 --> 00:36:30,400 Ya? 899 00:36:30,400 --> 00:36:32,330 HADIRIN: [Tak terdengar]. 900 00:36:32,330 --> 00:36:32,690 DAVID J. Malan: Ya. 901 00:36:32,690 --> 00:36:35,520 Jadi sekarang bahwa aku benar-benar menggunakan GetInt, ini bukan sesuatu 902 00:36:35,520 --> 00:36:38,190 yang hanya datang dengan C. Ini berasal dari CS50. 903 00:36:38,190 --> 00:36:39,890 Jadi kita perlu ini di sini. 904 00:36:39,890 --> 00:36:41,450 Dan biarkan aku kembali ke bawah cepat 905 00:36:41,450 --> 00:36:43,500 di sini dan kembali jalankan make. 906 00:36:43,500 --> 00:36:44,160 Oke, akhirnya. 907 00:36:44,160 --> 00:36:46,270 Sekarang kita sudah diselesaikan itu dan kesalahan lainnya. 908 00:36:46,270 --> 00:36:48,930 Sekarang saya menjalankan loop dan melihat apa yang terjadi. 909 00:36:48,930 --> 00:36:51,740 "Beri aku sebuah int." Aku akan memberikan 11. 910 00:36:51,740 --> 00:36:53,100 Aku akan memberikannya -1. 911 00:36:53,100 --> 00:36:54,470 Aku akan memberikannya foo. 912 00:36:54,470 --> 00:36:56,080 Aku akan memberikan 5. 913 00:36:56,080 --> 00:36:57,450 Dan sekarang memang bekerja. 914 00:36:57,450 --> 00:36:59,410 Tapi prompt berubah untuk alasan sini. 915 00:36:59,410 --> 00:37:02,800 Mengapa isinya coba lagi salah satu kali tapi beri saya sebuah 916 00:37:02,800 --> 00:37:03,920 int tiga kali lainnya? 917 00:37:03,920 --> 00:37:05,500 Mengapa perilaku yang berbeda? 918 00:37:05,500 --> 00:37:06,980 HADIRIN: Memberikan string. 919 00:37:06,980 --> 00:37:07,830 DAVID J. Malan: Maaf? 920 00:37:07,830 --> 00:37:08,570 HADIRIN: Anda memberikannya string. 921 00:37:08,570 --> 00:37:08,990 DAVID J. Malan: Ya. 922 00:37:08,990 --> 00:37:11,450 Jadi kami berikan itu string dalam usaha ketiga, 923 00:37:11,450 --> 00:37:12,490 ketika saya mengetik foo. 924 00:37:12,490 --> 00:37:13,200 Foo adalah string. 925 00:37:13,200 --> 00:37:14,340 Ini jelas bukan sebuah int. 926 00:37:14,340 --> 00:37:17,500 Dan cara yang CS50 telah menerapkan GetInt adalah bahwa kita 927 00:37:17,500 --> 00:37:20,330 tidak memeriksa apakah ada sesuatu yang kurang dari 0 atau lebih besar dari 10 928 00:37:20,330 --> 00:37:22,260 untuk Anda, karena bagaimana kita mengetahui terlebih dahulu apa 929 00:37:22,260 --> 00:37:23,130 int yang Anda inginkan? 930 00:37:23,130 --> 00:37:25,880 Tapi kita minimal dapat memeriksa untuk Anda, apakah pengguna setidaknya 931 00:37:25,880 --> 00:37:26,730 ketik integer? 932 00:37:26,730 --> 00:37:30,500 Dan jika mereka tidak, kita berteriak pada pengguna dengan mengetikkan "coba lagi" pada 933 00:37:30,500 --> 00:37:31,440 layar. 934 00:37:31,440 --> 00:37:34,210 >> Jadi sekarang kita memiliki program yang perulangan. Oke. 935 00:37:34,210 --> 00:37:37,070 Sekarang, yang ini adalah semacam konstruk yang lebih baik? 936 00:37:37,070 --> 00:37:39,060 Jadi ini adalah di mana hal-hal mulai mendapatkan sedikit berantakan, yang 937 00:37:39,060 --> 00:37:42,360 kenyataan bahwa Anda harus ingat untuk mendeklarasikan variabel di sini 938 00:37:42,360 --> 00:37:44,630 jika Anda ingin menggunakannya dalam beberapa 939 00:37:44,630 --> 00:37:46,460 keriting kawat gigi dan luar. 940 00:37:46,460 --> 00:37:48,490 Tetapi bahkan jika ini terlihat sedikit samar pada awalnya 941 00:37:48,490 --> 00:37:50,750 sekilas, hanya lagi, mengingat logika sederhana. 942 00:37:50,750 --> 00:37:54,630 Dalam rangka untuk menggunakan apa-apa di C, apakah itu fungsi atau 943 00:37:54,630 --> 00:37:57,680 itu variabel, Anda harus memasukkannya jika fungsi 944 00:37:57,680 --> 00:37:59,770 di beberapa perpustakaan, atau Anda perlu untuk mendeklarasikan. 945 00:37:59,770 --> 00:38:02,405 Tapi sekarang Anda harus berhati-hati tambahan fakta bahwa 946 00:38:02,405 --> 00:38:04,940 Anda menyatakan dalam lingkup yang tepat. 947 00:38:04,940 --> 00:38:08,150 Kau tidak menempatkan terlalu erat dalam tanda kurung. 948 00:38:08,150 --> 00:38:09,410 >> Jadi biarkan aku benar-benar memutar kembali. 949 00:38:09,410 --> 00:38:12,660 Jika kita kembali ke kami misalnya dari sebelumnya, dan aku pergi 950 00:38:12,660 --> 00:38:19,245 untuk kembali ke int, int i = 0; i <10; i + +, dan saya 951 00:38:19,245 --> 00:38:26,370 melakukan bintang printf, seperti ini, dan kemudian paren dekat, dan sekarang 952 00:38:26,370 --> 00:38:30,410 printf i sekarang - 953 00:38:30,410 --> 00:38:33,500 sesuai dengan logika yang sama, apa yang akan terjadi ketika saya mencoba untuk 954 00:38:33,500 --> 00:38:35,500 mengkompilasi program ini? 955 00:38:35,500 --> 00:38:36,790 HADIRIN: identifier tidak valid. 956 00:38:36,790 --> 00:38:38,560 DAVID J. Malan: Jadi lain identifier yang tidak valid, 957 00:38:38,560 --> 00:38:39,470 undeclared identifier. 958 00:38:39,470 --> 00:38:41,810 Sekarang, alasannya adalah sedikit berbeda. 959 00:38:41,810 --> 00:38:44,370 Jelas tidak ada kurung kurawal di sini, tapi sama 960 00:38:44,370 --> 00:38:46,790 Ide, cerita yang sama dari lingkup berlaku. 961 00:38:46,790 --> 00:38:50,340 Jika Anda telah mendeklarasikan variabel seperti saya dalam sebuah 962 00:38:50,340 --> 00:38:53,960 untuk loop, bahkan jika Anda tidak secara eksplisit menulis keriting 963 00:38:53,960 --> 00:38:56,980 kawat gigi, menganggap mereka sebagai mental masih berada di sana, di mana 964 00:38:56,980 --> 00:39:00,310 kasus saya adalah hanya di dalam yang valid untuk loop. 965 00:39:00,310 --> 00:39:03,080 Hal ini tidak berlaku setelah Anda sampai ke baris berikutnya, yang dalam 966 00:39:03,080 --> 00:39:05,090 Kasus ini sekarang 10. 967 00:39:05,090 --> 00:39:09,060 Jadi hanya beberapa masalah dari ruang lingkup dan sejenisnya. 968 00:39:09,060 --> 00:39:12,620 Baiklah, pertanyaan? 969 00:39:12,620 --> 00:39:15,310 >> Baiklah, jadi ini adalah jenis program kecil sepele, 970 00:39:15,310 --> 00:39:17,450 mencetak hanya bintang kecil. 971 00:39:17,450 --> 00:39:20,400 Tapi mari kita lihat apakah Anda ingat lagu ini di sini. 972 00:39:20,400 --> 00:39:22,530 Ini adalah lagu yang sangat mengganggu anak-anak akan menyanyi di 973 00:39:22,530 --> 00:39:23,550 bus sekolah dan sejenisnya. 974 00:39:23,550 --> 00:39:25,990 Tapi apa yang baik tentang hal itu adalah bahwa ia memiliki cyclicity ini, 975 00:39:25,990 --> 00:39:27,910 dimana itu "99 botol bir di dinding, 976 00:39:27,910 --> 00:39:28,520 99 botol bir. 977 00:39:28,520 --> 00:39:31,030 Ambil satu turun, lulus sekitar, 98 botol bir di 978 00:39:31,030 --> 00:39:34,330 wall "Dan. maka lagu mengulangi 97, kemudian 96, kemudian 979 00:39:34,330 --> 00:39:38,040 95, kemudian 94, semua jalan turun ke 0 jika Anda benar-benar mendapat bahwa 980 00:39:38,040 --> 00:39:38,920 jauh di bus. 981 00:39:38,920 --> 00:39:41,960 Jadi ini adalah program yang bagus untuk semacam alat, karena saya 982 00:39:41,960 --> 00:39:43,650 Tuhan, jika Anda hanya bisa menerapkan ini dengan beberapa 983 00:39:43,650 --> 00:39:46,660 baris kode, Anda bisa meludah keluar lirik seluruh ini 984 00:39:46,660 --> 00:39:48,240 lagu cukup cepat. 985 00:39:48,240 --> 00:39:50,420 Tapi sepanjang jalan, kita bisa mulai sekarang menggoda selain beberapa 986 00:39:50,420 --> 00:39:52,460 dari konstruksi perulangan dasar dan sekarang juga 987 00:39:52,460 --> 00:39:55,830 memperkenalkan fungsi yang kita tulis sendiri, mengembalikan nilai 988 00:39:55,830 --> 00:39:57,020 bahwa kita lulus sekitar. 989 00:39:57,020 --> 00:39:58,910 Tapi pertama-tama, kenapa tidak kita pergi ke depan dan mengambil kami lima menit 990 00:39:58,910 --> 00:39:59,320 istirahat di sini? 991 00:39:59,320 --> 00:40:01,480 Dan ketika kita kembali, kita akan menyanyikan lagu ini. 992 00:40:05,680 --> 00:40:08,760 >> Baiklah, jadi kami kembali. 993 00:40:08,760 --> 00:40:11,850 Dan ketika saya mengatakan kita sekarang akan menyanyikan lagu ini, maksudku 994 00:40:11,850 --> 00:40:13,250 pemrograman, tidak secara verbal. 995 00:40:13,250 --> 00:40:19,370 Jadi di sini kita memiliki beer1.c, yang merupakan salah satu implementasi dari ini 996 00:40:19,370 --> 00:40:20,580 lagu tertentu. 997 00:40:20,580 --> 00:40:23,110 Dan hanya harus jelas, bagi mereka yang tidak terbiasa dengan apa 998 00:40:23,110 --> 00:40:24,460 hal ini terlihat seperti, biarkan aku pergi ke depan 999 00:40:24,460 --> 00:40:27,070 dan membuat beer1, Enter. 1000 00:40:27,070 --> 00:40:30,400 Sekarang biarkan aku jalankan beer1, dan apa yang kita akan melihat - berapa banyak botol 1001 00:40:30,400 --> 00:40:31,140 bir akan ada? 1002 00:40:31,140 --> 00:40:33,240 Aku akan mengetik 99, seperti lagu mengatakan. 1003 00:40:33,240 --> 00:40:34,040 Enter. 1004 00:40:34,040 --> 00:40:35,650 Dan sekarang jika kita menelusuri - 1005 00:40:35,650 --> 00:40:38,280 oops - jika kita menggulir melalui semua ini, kita akan melihat bahwa 1006 00:40:38,280 --> 00:40:41,350 ini memang menyanyikan seluruh lagu. 1007 00:40:44,050 --> 00:40:44,540 Tunggu sebentar. 1008 00:40:44,540 --> 00:40:46,240 Scroll bar saya agak kacau. 1009 00:40:46,240 --> 00:40:47,940 Mari kita gunakan jendela besar. 1010 00:40:47,940 --> 00:40:53,500 Jadi beer1, 99, di sana kita pergi. 1011 00:40:53,500 --> 00:40:56,420 Jadi di sini kita memiliki seluruh lagu, dinyanyikan jauh lebih cepat oleh 1012 00:40:56,420 --> 00:40:58,450 komputer daripada itu bisa saja oleh kami. 1013 00:40:58,450 --> 00:41:00,340 Jadi perhatikan, meskipun, sifat siklus sini. 1014 00:41:00,340 --> 00:41:03,380 Ia mengatakan 99, kemudian 99, kemudian "mengambil satu turun, lulus 1015 00:41:03,380 --> 00:41:04,740 sekitar, "kemudian 98. 1016 00:41:04,740 --> 00:41:06,640 Dan sekarang mengulangi lagi dan lagi. 1017 00:41:06,640 --> 00:41:08,840 >> Jadi ini sebenarnya adalah sebuah kesempatan yang sempurna untuk beberapa jenis 1018 00:41:08,840 --> 00:41:10,400 perulangan membangun. 1019 00:41:10,400 --> 00:41:12,950 Perhatikan bahwa Aku agak memotong sudut di sini. 1020 00:41:12,950 --> 00:41:15,960 Perhatikan bahwa saya mengatakan "98 botol bir di dinding, 1021 00:41:15,960 --> 00:41:19,010 97 botol bir di dinding, "dan itu hanya begitu 1022 00:41:19,010 --> 00:41:21,640 bahwa ketika kita mendapatkan satu botol bir, saya tidak memiliki 1023 00:41:21,640 --> 00:41:23,300 khawatir tentang tata bahasa Inggris. 1024 00:41:23,300 --> 00:41:25,790 Tapi kita juga bisa memperbaiki ini dengan sedikit jika 1025 00:41:25,790 --> 00:41:26,910 Kondisi, mungkin. 1026 00:41:26,910 --> 00:41:30,110 Jika nomor ini adalah tunggal, maju dan berkata "botol", 1027 00:41:30,110 --> 00:41:31,840 sebaliknya jika itu plural, mengatakan "botol". 1028 00:41:31,840 --> 00:41:34,150 Tetapi untuk sekarang, aku benar-benar memotong pojok itu. 1029 00:41:34,150 --> 00:41:35,520 Jadi mari kita lihat apa yang kita punya di sini. 1030 00:41:35,520 --> 00:41:37,150 Jadi kita punya beberapa komentar di atas. 1031 00:41:37,150 --> 00:41:39,450 Aku termasuk dua perpustakaan, seperti 1032 00:41:39,450 --> 00:41:41,140 kita sudah sering berada. 1033 00:41:41,140 --> 00:41:43,610 Dan sekarang biarkan aku gulir ke bawah untuk yang pertama 1034 00:41:43,610 --> 00:41:44,990 aktual baris kode. 1035 00:41:44,990 --> 00:41:47,020 Baris 17 kicks off utama. 1036 00:41:47,020 --> 00:41:50,610 Baris 21 dan 20 memiliki berapa banyak botol bir akan ada? 1037 00:41:50,610 --> 00:41:52,060 Dan kemudian saya sebut GetInt. 1038 00:41:52,060 --> 00:41:53,800 Dan sekarang aku punya sedikit cek kewarasan. 1039 00:41:53,800 --> 00:41:57,030 >> Jadi ini adalah konvensi yang sekarang kita akan mulai mengadopsi untuk 1040 00:41:57,030 --> 00:41:59,620 lebih ketat memeriksa input pengguna. 1041 00:41:59,620 --> 00:42:01,710 Kadang-kadang Anda hanya tidak ingin meminta mereka lagi 1042 00:42:01,710 --> 00:42:02,630 dan lagi dan lagi. 1043 00:42:02,630 --> 00:42:05,620 Jika pengguna sekrup dan tidak bekerjasama, baik. 1044 00:42:05,620 --> 00:42:07,430 Keluar dan hanya tidak berurusan dengan mereka. 1045 00:42:07,430 --> 00:42:08,990 Dan itulah yang saya lakukan di sini. 1046 00:42:08,990 --> 00:42:12,520 Jika n adalah kurang dari 1, saya hanya akan berteriak pada pengguna, 1047 00:42:12,520 --> 00:42:14,330 "Maaf, itu tidak masuk akal." Dan kemudian aku akan 1048 00:42:14,330 --> 00:42:16,650 sewenang-wenang mengembalikan 1. 1049 00:42:16,650 --> 00:42:18,550 Jadi sekali lagi, ini hanyalah sebuah konvensi untuk membiasakan diri. 1050 00:42:18,550 --> 00:42:19,850 Untuk saat ini, bawa pada iman. 1051 00:42:19,850 --> 00:42:22,700 Tapi sampai sekarang, kita selalu kembali 0, karena 1052 00:42:22,700 --> 00:42:25,204 kami telah mengatakan kembali 0 menandakan apa? 1053 00:42:25,204 --> 00:42:26,000 HADIRIN: Sukses. 1054 00:42:26,000 --> 00:42:27,320 DAVID J. Malan: Sukses, itu saja. 1055 00:42:27,320 --> 00:42:29,740 Jadi sekarang kita akhirnya mulai berpikir tentang 1056 00:42:29,740 --> 00:42:31,330 non-keberhasilan - 1057 00:42:31,330 --> 00:42:33,760 dengan kata lain, kasus sudut, kondisi kesalahan - 1058 00:42:33,760 --> 00:42:37,520 sekarang saya memiliki pasokan tak terbatas, atau setidaknya empat miliar 1059 00:42:37,520 --> 00:42:39,790 mungkin hal-hal yang bisa salah dalam program saya. 1060 00:42:39,790 --> 00:42:42,300 Dan saya bisa mulai menugaskan mereka nomor individu. 1061 00:42:42,300 --> 00:42:44,340 Sekarang, umumnya cukup untuk hanya kembali 1062 00:42:44,340 --> 00:42:45,730 selain 0 sesuatu. 1063 00:42:45,730 --> 00:42:48,040 Jadi kita akan hanya kembali 1 untuk saat ini. 1064 00:42:48,040 --> 00:42:51,440 Tapi alasan untuk kembali 1 adalah bahwa segera setelah Anda kembali 1065 00:42:51,440 --> 00:42:55,110 1, tebak apa yang terjadi ke seluruh program? 1066 00:42:55,110 --> 00:42:55,720 Ini berhenti. 1067 00:42:55,720 --> 00:42:56,560 Itu saja. 1068 00:42:56,560 --> 00:42:59,150 Jadi fakta bahwa aku kembali 1 adalah efektif 1069 00:42:59,150 --> 00:43:02,950 hubungan arus pendek eksekusi program ini sehingga 1070 00:43:02,950 --> 00:43:06,780 apa-apa di bawah garis 27 akan terus mengeksekusi. 1071 00:43:06,780 --> 00:43:09,210 Segera setelah pengembalian utama, yang itu. 1072 00:43:09,210 --> 00:43:13,160 >> Baiklah, jadi jika pengguna tidak bekerja sama dan kita mencapai baris 30 1073 00:43:13,160 --> 00:43:15,680 karena mereka mengetik nomor yang sah, di sini adalah saya 1074 00:43:15,680 --> 00:43:16,990 pelaksanaan lagu ini. 1075 00:43:16,990 --> 00:43:19,050 Jadi saya pertama kali mencetak karakter newline, hanya untuk 1076 00:43:19,050 --> 00:43:19,880 estetika. 1077 00:43:19,880 --> 00:43:21,500 Saya sekarang memiliki untuk loop. 1078 00:43:21,500 --> 00:43:22,930 Dan perhatikan aku melakukan hal-hal sedikit 1079 00:43:22,930 --> 00:43:23,880 dari arah yang berbeda. 1080 00:43:23,880 --> 00:43:26,210 Saya tidak perlu melakukan kurang dari, saya tidak perlu melakukan + +. 1081 00:43:26,210 --> 00:43:30,660 Saya malah bisa mengatakan menginisialisasi variabel i, mengatur itu sama dengan 1082 00:43:30,660 --> 00:43:35,080 n, jumlah pengguna mengetik, kemudian lakukan hal berikut, sehingga 1083 00:43:35,080 --> 00:43:39,590 Selama i lebih besar dari 0, maka saya - 1084 00:43:39,590 --> 00:43:42,070 setelah Anda selesai satu iterasi dari loop ini. 1085 00:43:42,070 --> 00:43:44,310 Jadi kita bisa menghitung mundur menggunakan untuk loop juga. 1086 00:43:44,310 --> 00:43:47,520 Sekarang, ini adalah minggu yang cukup banyak hal sekarang, dengan printf. 1087 00:43:47,520 --> 00:43:51,770 Jadi cetak "botol d% bir di dinding." Cetak "% d 1088 00:43:51,770 --> 00:43:54,990 botol bir. "" Ambil satu turun, lulus sekitar. "Print 1089 00:43:54,990 --> 00:43:58,880 "% D botol bir di dinding." Jadi itu masih d%, namun 1090 00:43:58,880 --> 00:44:02,770 melihat bahwa argumen untuk printf berubah. 1091 00:44:02,770 --> 00:44:05,840 Setelah koma, saya punya i, karena saya ingin mengatakan 99. 1092 00:44:05,840 --> 00:44:08,590 Setelah koma ini, saya memiliki i, karena saya ingin mengatakan 99. 1093 00:44:08,590 --> 00:44:14,030 Setelah koma ini, saya memiliki i - 1, karena saya ingin mengatakan 98 di 1094 00:44:14,030 --> 00:44:16,260 ini iterasi pertama, dan sebagainya. 1095 00:44:16,260 --> 00:44:18,520 Dan sekarang di sini, saya hanya memiliki beberapa komentar sedikit bodoh. 1096 00:44:18,520 --> 00:44:22,270 Dan kemudian baris 42, saya kembali 0 dengan konvensi, menandakan bahwa 1097 00:44:22,270 --> 00:44:23,650 semuanya baik-baik saja. 1098 00:44:23,650 --> 00:44:24,490 >> Jadi bagaimana jika aku melakukan kesalahan? 1099 00:44:24,490 --> 00:44:26,350 Apa yang mungkin kesalahan umum di sini bisa? 1100 00:44:26,350 --> 00:44:29,200 Nah, bagaimana jika saya sengaja berkata baik, saya ingin menghitung 1101 00:44:29,200 --> 00:44:31,640 turun ke 0, saya ingin 0 botol bir di dinding? 1102 00:44:31,640 --> 00:44:34,620 Jadi saya katakan, saya lebih besar dari atau sama dengan 0. 1103 00:44:34,620 --> 00:44:38,920 Apa yang akan menjadi gejala yang sekarang saya melihat apakah saya mengkompilasi ulang 1104 00:44:38,920 --> 00:44:41,173 beer1 dan menjalankannya? 1105 00:44:41,173 --> 00:44:42,120 HADIRIN: Negatif. 1106 00:44:42,120 --> 00:44:43,590 DAVID J. Malan: Ya, itu akan pergi negatif. 1107 00:44:43,590 --> 00:44:45,950 Ini adalah kesalahan off-per-satu, yang sangat 1108 00:44:45,950 --> 00:44:47,270 kesalahan umum untuk membuat. 1109 00:44:47,270 --> 00:44:48,960 Mari kita benar-benar pergi kembali ke jendela terminal dan melakukannya 1110 00:44:48,960 --> 00:44:50,620 di sini, jadi kita bisa melihat lebih banyak pada satu waktu. 1111 00:44:50,620 --> 00:44:53,280 Masukkan, 99 botol bir. 1112 00:44:53,280 --> 00:44:56,580 Dekat, tapi kami pergi yang sedikit terlalu jauh. 1113 00:44:56,580 --> 00:45:00,500 Kami menyanyikan lagu terlalu jauh di bawah, sehingga sekarang kita memukul 1114 00:45:00,500 --> 00:45:01,510 negatif nomor. 1115 00:45:01,510 --> 00:45:03,680 Jadi tidak cukup bekerja. 1116 00:45:03,680 --> 00:45:06,450 >> Baiklah, jadi kita dengan mudah dapat memperbaikinya dengan kembali ke 1117 00:45:06,450 --> 00:45:07,650 cara seperti dulu. 1118 00:45:07,650 --> 00:45:10,360 Tapi apa adalah beberapa peluang sekarang untuk 1119 00:45:10,360 --> 00:45:11,190 perbaikan? 1120 00:45:11,190 --> 00:45:17,200 Nah, biarkan aku membuka beer2.c dan gulir ke bawah sini dan mengambil 1121 00:45:17,200 --> 00:45:19,310 melihat versi ini. 1122 00:45:19,310 --> 00:45:21,370 Apa hal pertama yang melompat keluar pada Anda sebagai berbeda 1123 00:45:21,370 --> 00:45:23,715 dalam versi ini di sini? 1124 00:45:23,715 --> 00:45:24,190 HADIRIN: [Tak terdengar]. 1125 00:45:24,190 --> 00:45:26,510 DAVID J. Malan: Ya, jadi tidak ada lagi i, karena terpikir 1126 00:45:26,510 --> 00:45:29,350 kau tahu apa, saya meminta pengguna untuk n, dan kemudian saya 1127 00:45:29,350 --> 00:45:33,580 pengaturan i sama dengan n, dan kemudian aku mengubah i, tapi aku tidak pernah 1128 00:45:33,580 --> 00:45:34,590 menyentuh n lagi. 1129 00:45:34,590 --> 00:45:37,390 Jadi apa sih adalah titik Anda mengalokasikan lain 32 1130 00:45:37,390 --> 00:45:45,210 bit disebut i hanya agar aku dapat memiliki variabel yang berbeda? 1131 00:45:45,210 --> 00:45:47,960 Jadi dalam hal ini, saya semacam diakui bahwa tidak perlu 1132 00:45:47,960 --> 00:45:49,190 desain fitur. 1133 00:45:49,190 --> 00:45:52,730 Dan aku sekarang akan mengatakan sementara n lebih besar dari 0, pergi 1134 00:45:52,730 --> 00:45:56,180 depan dan mencetak lagu yang sama, melewati n untuk printf sebagai 1135 00:45:56,180 --> 00:46:00,210 Argumen kedua, dan n - 1 sebagai argumen kedua di sini. 1136 00:46:00,210 --> 00:46:02,930 Dan kemudian pada setiap iterasi dari loop ini, pergi ke depan dan hanya 1137 00:46:02,930 --> 00:46:05,080 memundurkan n sendiri. 1138 00:46:05,080 --> 00:46:06,960 Sekarang, fungsional, program ini 1139 00:46:06,960 --> 00:46:08,010 akan menjadi identik. 1140 00:46:08,010 --> 00:46:10,730 Jika saya mengetik 99, n dimulai pada 99. 1141 00:46:10,730 --> 00:46:12,890 Saya pengurangan, pengurangan, penurunan, penurunan. 1142 00:46:12,890 --> 00:46:15,875 Aku akan mendapatkan semua jalan ke "Satu botol bir di 1143 00:46:15,875 --> 00:46:16,740 dinding, satu botol bir. 1144 00:46:16,740 --> 00:46:18,020 Ambil satu turun, lulus sekitar. 1145 00:46:18,020 --> 00:46:21,480 0 botol bir di dinding "Akhir., Karena saya melakukan 1146 00:46:21,480 --> 00:46:23,200 mendapatkan kondisi yang benar. 1147 00:46:23,200 --> 00:46:24,280 Ini lebih besar dari 0. 1148 00:46:24,280 --> 00:46:26,220 Saya tidak membuat kesalahan ini. 1149 00:46:26,220 --> 00:46:28,470 >> Jadi yang lebih baik, versi satu atau dua versi? 1150 00:46:31,380 --> 00:46:33,480 Jadi saya mendengar sekelompok sungut untuk dua. 1151 00:46:33,480 --> 00:46:34,730 Kenapa dua? 1152 00:46:37,210 --> 00:46:38,225 Apa itu? 1153 00:46:38,225 --> 00:46:39,215 HADIRIN: [Tak terdengar]. 1154 00:46:39,215 --> 00:46:40,070 DAVID J. Malan: Oh, oke. 1155 00:46:40,070 --> 00:46:42,870 Jadi tidak akan pergi di bawah 0, tapi ingat, dalam versi satu, 1156 00:46:42,870 --> 00:46:45,870 versi yang benar asli tidak pergi di bawah 0 baik. 1157 00:46:45,870 --> 00:46:48,340 Jadi ingat bahwa ini adalah versi yang benar. 1158 00:46:48,340 --> 00:46:51,630 Jadi mari kita setidaknya membandingkan dua versi yang benar. 1159 00:46:51,630 --> 00:46:53,300 Apa argumen yang mendukung versi 1160 00:46:53,300 --> 00:46:55,146 dua yang, mmm, baik? 1161 00:46:55,146 --> 00:46:55,642 Ya? 1162 00:46:55,642 --> 00:46:57,630 HADIRIN: Menggunakan lebih sedikit ruang. 1163 00:46:57,630 --> 00:46:59,530 DAVID J. Malan: Oke, sehingga menggunakan ruang kurang, kan? 1164 00:46:59,530 --> 00:47:02,900 Sedangkan satu versi 32 bit yang digunakan untuk n, dan kemudian lain 1165 00:47:02,900 --> 00:47:07,680 32 bit untuk i. 1166 00:47:07,680 --> 00:47:10,060 Versi kedua hanya menggunakan 32 bit untuk n, sehingga 1167 00:47:10,060 --> 00:47:11,700 tampaknya menjadi plus. 1168 00:47:11,700 --> 00:47:12,950 Pikiran lain? 1169 00:47:18,070 --> 00:47:21,520 Apakah ada yang ingin berdebat mendukung satu? 1170 00:47:21,520 --> 00:47:22,070 Ya? 1171 00:47:22,070 --> 00:47:25,240 HADIRIN: Anda harus menggunakan baris tambahan kode untuk n -. 1172 00:47:25,240 --> 00:47:26,090 >> DAVID J. Malan: Oke, yakin. 1173 00:47:26,090 --> 00:47:26,960 Jadi itu adil. 1174 00:47:26,960 --> 00:47:29,040 Jadi ini hanya, setidaknya untuk saya - 1175 00:47:29,040 --> 00:47:31,940 Maksudku, ini benar-benar terasa berantakan sedikit, fakta bahwa 1176 00:47:31,940 --> 00:47:35,120 Saya tidak bisa semacam merangkum semua logika saya dalam satu 1177 00:47:35,120 --> 00:47:38,030 indah line, untuk loop, karena untuk loop bisa. 1178 00:47:38,030 --> 00:47:40,240 Di sini, aku agak harus taktik ini n - 1179 00:47:40,240 --> 00:47:41,120 pada akhir loop, karena 1180 00:47:41,120 --> 00:47:42,550 itu logis diperlukan. 1181 00:47:42,550 --> 00:47:45,190 Tapi jenis menggosok dengan cara yang salah, hanya karena 1182 00:47:45,190 --> 00:47:48,260 tampaknya terpisah dari logika di sini, meskipun, 1183 00:47:48,260 --> 00:47:49,430 lagi, itu diperlukan. 1184 00:47:49,430 --> 00:47:50,990 Pikiran lain? 1185 00:47:50,990 --> 00:47:51,490 Ya? 1186 00:47:51,490 --> 00:47:52,740 HADIRIN: [Tak terdengar]. 1187 00:47:57,990 --> 00:47:58,350 >> DAVID J. Malan: Ya. 1188 00:47:58,350 --> 00:48:00,730 Jadi bagaimana jika Anda bukan, di akhir lagu, ingin 1189 00:48:00,730 --> 00:48:02,950 mencetak lagi nama lagu? 1190 00:48:02,950 --> 00:48:05,660 Seperti "Terima kasih untuk bermain 99 botol bir", atau sesuatu 1191 00:48:05,660 --> 00:48:06,690 konyol seperti itu? 1192 00:48:06,690 --> 00:48:09,750 Tapi yang penting, Anda ingin akses ke nilai aslinya. 1193 00:48:09,750 --> 00:48:13,180 Kenyataan bahwa Anda telah bermutasi atau berubah pada setiap n 1194 00:48:13,180 --> 00:48:16,330 iterasi dan karena itu telah menghancurkan nilai aslinya 1195 00:48:16,330 --> 00:48:18,650 berarti Anda tidak bisa melakukan itu di akhir. 1196 00:48:18,650 --> 00:48:20,660 Sekarang, bisa dibilang, kami jelas tidak ingin melakukan 1197 00:48:20,660 --> 00:48:21,450 bahwa dalam program ini. 1198 00:48:21,450 --> 00:48:22,350 Jadi siapa yang peduli? 1199 00:48:22,350 --> 00:48:23,630 Tapi itu hal yang sangat valid. 1200 00:48:23,630 --> 00:48:25,520 Dan jujur, ada benar-benar tidak ada yang 1201 00:48:25,520 --> 00:48:26,630 tepat menjawab di sini. 1202 00:48:26,630 --> 00:48:28,740 Mereka berdua sama-sama benar. 1203 00:48:28,740 --> 00:48:30,210 Aku bisa diyakinkan dengan cara baik. 1204 00:48:30,210 --> 00:48:33,310 Saya akan mengatakan bahwa, secara umum, itu adalah prinsip yang baik jika Anda 1205 00:48:33,310 --> 00:48:36,030 meminta pengguna untuk nilai tertentu dan Anda disimpan dalam sebuah variabel 1206 00:48:36,030 --> 00:48:38,730 seperti n, hanya semacam prinsip, itu mungkin baik 1207 00:48:38,730 --> 00:48:40,160 untuk menjaga bahwa sekitar. 1208 00:48:40,160 --> 00:48:43,400 Dan setiap data yang ingin Anda bermutasi lagi dan lagi, hanya 1209 00:48:43,400 --> 00:48:46,030 memberikan diri Anda salinan variabel itu, hanya agar Anda 1210 00:48:46,030 --> 00:48:47,830 memiliki akses ke aslinya. 1211 00:48:47,830 --> 00:48:51,040 Anda menghabiskan 32 bit lebih, tetapi kenyataannya adalah ini 1212 00:48:51,040 --> 00:48:53,490 komputer telah, seperti, dua gigabyte RAM hari ini, 1213 00:48:53,490 --> 00:48:55,310 dan kami kebawelan lebih dari 32 bit? 1214 00:48:55,310 --> 00:48:56,320 Benar-benar bukan masalah besar. 1215 00:48:56,320 --> 00:48:58,550 Dan bahkan pada perangkat ini di sini, dengan setengah manggung atau 1216 00:48:58,550 --> 00:49:01,700 gigabyte RAM, 32 bit vs 64 bit, 1217 00:49:01,700 --> 00:49:02,920 bukan masalah besar. 1218 00:49:02,920 --> 00:49:05,890 Tentu saja hari ini, itu akan menjadi cara yang kewalahan oleh ukuran 1219 00:49:05,890 --> 00:49:08,400 dari program itu sendiri, yang akan menjadi beberapa ratus 1220 00:49:08,400 --> 00:49:10,890 kilobyte, jika tidak sedikit megabyte, hari ini. 1221 00:49:10,890 --> 00:49:13,550 >> Jadi wajar kekhawatiran, tidak ada satu jawaban yang benar. 1222 00:49:13,550 --> 00:49:15,490 Tapi setidaknya mereka adalah pikiran yang harus mulai 1223 00:49:15,490 --> 00:49:16,790 pergi melalui pikiran Anda? 1224 00:49:16,790 --> 00:49:19,600 Karena dalam pset 0, meskipun kita benar-benar hanya diharapkan 1225 00:49:19,600 --> 00:49:22,340 benar, atau setidaknya mengelakkan berbagai bug yang 1226 00:49:22,340 --> 00:49:25,440 Anda mungkin telah menemui, seperti yang kita bergerak maju, desain 1227 00:49:25,440 --> 00:49:27,910 akan menjadi lain aspek kunci, baik untuk menulis kode 1228 00:49:27,910 --> 00:49:29,770 dan juga kami mengevaluasi kode. 1229 00:49:29,770 --> 00:49:32,310 Dan jadi setidaknya memberikan pemikiran untuk hal-hal seperti ini. 1230 00:49:32,310 --> 00:49:35,590 Dan hanya karena karya sesuatu tidak berarti itu baik, 1231 00:49:35,590 --> 00:49:37,130 bukan berarti itu dirancang dengan baik. 1232 00:49:37,130 --> 00:49:38,820 Dan itulah salah satu hal yang rekan-rekan mengajar dan 1233 00:49:38,820 --> 00:49:41,990 set masalah akan membantu kita menggoda bagian dari waktu ke waktu. 1234 00:49:41,990 --> 00:49:45,020 >> Nah, bagaimana dengan, katakanlah, versi ini di sini? 1235 00:49:45,020 --> 00:49:49,090 Biarkan aku melakukan sesuatu yang sedikit seksi di sini dalam sekejap. 1236 00:49:49,090 --> 00:49:50,740 Pertama biarkan aku menyingkirkan ini. 1237 00:49:50,740 --> 00:49:54,120 Dan sekarang mari kita memperbaiki masalah gramatikal. 1238 00:49:54,120 --> 00:49:58,780 Jadi dalam versi ini, saya ingin memperbaiki tata bahasa sehingga, 1239 00:49:58,780 --> 00:50:02,460 bukan hanya mengatakan s sisipan, seperti "botol" 1240 00:50:02,460 --> 00:50:03,360 atau "botol" - 1241 00:50:03,360 --> 00:50:04,900 Saya tidak ingin memotong sudut itu - 1242 00:50:04,900 --> 00:50:08,350 Saya juga ingin dinamis mencetak kata "botol" 1243 00:50:08,350 --> 00:50:12,820 atau "botol", sehingga menggunakan placeholder ini% s hari. 1244 00:50:12,820 --> 00:50:16,550 Jadi saya perlu kondisional memeriksa apa adalah nilai dari i. 1245 00:50:16,550 --> 00:50:19,590 Dan jika itu 1, saya ingin mengatakan "botol", dan jika ada itu 1246 00:50:19,590 --> 00:50:23,115 yang lain, saya ingin mengatakan "botol". Jadi mari kita coba untuk melakukan hal ini. 1247 00:50:23,115 --> 00:50:31,340 Jadi jika i == 1, maka biarkan aku pergi ke depan dan menyatakan - 1248 00:50:31,340 --> 00:50:34,080 Aku butuh string, jadi biarkan aku melakukan s1 string, karena itu adalah 1249 00:50:34,080 --> 00:50:36,070 string pertama saya peduli sekarang. 1250 00:50:36,070 --> 00:50:40,980 Aku akan mengatakan "botol". Dan kemudian, mari kita lihat, string 1251 00:50:40,980 --> 00:50:43,110 s2 - dan saya akan menjelaskan di mana aku akan dalam sekejap - 1252 00:50:43,110 --> 00:50:47,650 "Botol." Jadi ingat bahwa, dalam lagu ini, kita harus mampu 1253 00:50:47,650 --> 00:50:50,580 untuk mencetak hal-hal, dua kata yang berbeda berpotensi. 1254 00:50:50,580 --> 00:50:53,590 Jadi jika kita melihat kembali ke sini, perhatikan bahwa ketika kita sampai 1255 00:50:53,590 --> 00:50:56,440 ini contoh di sini, "dua botol bir di dinding, 1256 00:50:56,440 --> 00:50:59,490 dua botol bir, mengambil satu turun, lulus sekitar ", saya ingin 1257 00:50:59,490 --> 00:51:02,380 baris ini keempat untuk sekarang mengatakan "satu botol bir di 1258 00:51:02,380 --> 00:51:04,900 wall "Jadi saya harus memutuskan,. saya ingin mengatakan" botol "atau 1259 00:51:04,900 --> 00:51:07,780 "Botol"? Jadi aku akan sewenang-wenang mengatakan, oke, 1260 00:51:07,780 --> 00:51:10,530 Aku akan mendeklarasikan sekarang disebut variabel s1, string 1261 00:51:10,530 --> 00:51:13,830 satu, itu akan mendapatkan terpasang di sini dan juga di sini, 1262 00:51:13,830 --> 00:51:16,070 karena kata-kata yang selalu identik, hanya karena 1263 00:51:16,070 --> 00:51:17,290 sifat lagu. 1264 00:51:17,290 --> 00:51:20,100 Dan aku akan menelepon s2 kata apa pun saya ingin 1265 00:51:20,100 --> 00:51:21,560 akhirnya muncul di sini. 1266 00:51:21,560 --> 00:51:25,530 Sekarang, secara harfiah, 99 kali dari 100, itu akan menjadi 1267 00:51:25,530 --> 00:51:28,820 yang sama dalam kedua kasus tersebut, karena 3 adalah jamak, 2 adalah 1268 00:51:28,820 --> 00:51:30,200 plural, 4 adalah jamak. 1269 00:51:30,200 --> 00:51:34,640 Tapi dalam hal ini sudut, di mana kita bisa 2 dan kemudian 1, atau 1270 00:51:34,640 --> 00:51:37,250 bahkan 1 dan kemudian 0, saya perlu logika ini. 1271 00:51:37,250 --> 00:51:41,020 Jadi saya harus menghabiskan beberapa waktu di kode saya mendapatkan hak itu. 1272 00:51:41,020 --> 00:51:47,530 Jadi jika saya melakukan ini, jika saya == 1, maka s1 ditetapkan sama dengan "botol" 1273 00:51:47,530 --> 00:51:52,010 dan s2 sama dengan "botol", karena ini akan menjadi 1 1274 00:51:52,010 --> 00:51:56,340 botol, dan ini akan menjadi untuk 0 botol. 1275 00:51:56,340 --> 00:51:58,250 Dan ini di sini, apa ini mewakili? 1276 00:51:58,250 --> 00:51:59,780 Hanya untuk menjadi jelas. 1277 00:51:59,780 --> 00:52:00,620 Ini hanya komentar. 1278 00:52:00,620 --> 00:52:03,730 Jadi fakta bahwa Anda dapat memiliki single-line komentar berarti Anda 1279 00:52:03,730 --> 00:52:06,110 dapat komentar kode Anda seperti ini, tapi lain yang umum 1280 00:52:06,110 --> 00:52:09,050 paradigma, juga, adalah bahwa jika Anda memiliki frase super-pendek yang 1281 00:52:09,050 --> 00:52:11,410 Anda ingin menempatkan diri dan itu hanya lebih mudah dibaca untuk menempatkan 1282 00:52:11,410 --> 00:52:13,270 tepat di akhir baris kode, Anda dapat 1283 00:52:13,270 --> 00:52:15,230 benar-benar melakukan sesuatu seperti ini. 1284 00:52:15,230 --> 00:52:20,150 >> Jadi sekarang bagaimana jika saya melakukan ini? Lain jika saya tidak sama dengan 1. 1285 00:52:20,150 --> 00:52:21,620 Jadi Bang sama - 1286 00:52:21,620 --> 00:52:23,150 tanda seru dikenal sebagai "bang". 1287 00:52:23,150 --> 00:52:25,080 Jadi Bang = 1. 1288 00:52:25,080 --> 00:52:28,530 Jadi jika saya tidak sama dengan 1, apa yang harus saya malah ingin lakukan? 1289 00:52:28,530 --> 00:52:31,700 Nah, kata pertama yang saya ingin menjadi apa? 1290 00:52:34,620 --> 00:52:40,030 Jadi string 1 harus "botol" untuk botol jamak, 1291 00:52:40,030 --> 00:52:42,440 dan kemudian ini akan menjadi plural "botol" juga, untuk saat ini. 1292 00:52:42,440 --> 00:52:43,800 Dan kita akan melihat apakah ini benar-benar membuat kita untuk 1293 00:52:43,800 --> 00:52:44,870 di mana kita ingin pergi. 1294 00:52:44,870 --> 00:52:47,680 Jadi sekarang jika saya scroll ke bawah sini, perhatikan bahwa aku menghubungkannya 1295 00:52:47,680 --> 00:52:50,170 tidak hanya saya, tapi s1. 1296 00:52:50,170 --> 00:52:51,860 Aku menancapkan i dan s1. 1297 00:52:51,860 --> 00:52:54,440 Dan kemudian di sini, aku dikurangi 1, yang sama dengan 1298 00:52:54,440 --> 00:52:55,920 sebelumnya, namun s2. 1299 00:52:55,920 --> 00:52:58,730 Dengan kata lain, saya ingin kata bahasa Inggris untuk mengubah didasarkan 1300 00:52:58,730 --> 00:52:59,930 pada logika ini. 1301 00:52:59,930 --> 00:53:03,310 Sekarang, sudah ada beberapa masalah dalam kode ini. 1302 00:53:03,310 --> 00:53:08,460 Apa yang rusak sudah keluar dari pintu gerbang di sini? 1303 00:53:08,460 --> 00:53:10,796 Ya? 1304 00:53:10,796 --> 00:53:13,210 HADIRIN: [Tak terdengar]. 1305 00:53:13,210 --> 00:53:13,800 >> DAVID J. Malan: Tepat. 1306 00:53:13,800 --> 00:53:16,030 Jadi saya sudah melanggar pelajaran dari ruang lingkup. 1307 00:53:16,030 --> 00:53:19,610 Jadi saya sudah dinyatakan s1 dan s2, tapi aku sudah melakukannya dalam 1308 00:53:19,610 --> 00:53:22,980 keriting kawat gigi, yang berarti ya, kode ini akan bekerja sampai 1309 00:53:22,980 --> 00:53:27,430 sampai garis 42, tapi begitu aku memukul garis 43, tebak apa yang ada 1310 00:53:27,430 --> 00:53:28,900 lagi ada? 1311 00:53:28,900 --> 00:53:32,600 Nah, coba tebak apa yang tidak lagi dalam lingkup - tidak s1 atau s2. 1312 00:53:32,600 --> 00:53:33,780 Jadi kita harus memperbaiki ini. 1313 00:53:33,780 --> 00:53:36,180 Jadi biarkan aku menghapus deklarasi. 1314 00:53:36,180 --> 00:53:39,320 Dan aku akan meninggalkan nama variabel dan menghapus ini di sini 1315 00:53:39,320 --> 00:53:40,120 dan menghapus ini di sini. 1316 00:53:40,120 --> 00:53:43,557 Dan dalam apa yang harus saya garis benar-benar menyatakan hal-hal ini? 1317 00:53:43,557 --> 00:53:44,960 HADIRIN: [Tak terdengar]. 1318 00:53:44,960 --> 00:53:45,410 DAVID J. Malan: Ya, jadi mungkin 1319 00:53:45,410 --> 00:53:46,850 sampai di sini, 33-ish. 1320 00:53:46,850 --> 00:53:50,670 Jadi s1 string dan kemudian string s2. 1321 00:53:50,670 --> 00:53:51,950 Dan ternyata, aku bisa melakukan ini. 1322 00:53:51,950 --> 00:53:54,260 Jika Anda menyatakan dua variabel dari jenis yang sama, 1323 00:53:54,260 --> 00:53:57,420 Anda dapat benar-benar hanya menggunakan koma dan melakukan itu di C. Semua 1324 00:53:57,420 --> 00:53:58,970 benar, jadi sekarang saya memiliki dua variabel - 1325 00:53:58,970 --> 00:53:59,860 s1 dan s2. 1326 00:53:59,860 --> 00:54:02,000 Saya menugaskan mereka nilai-nilai dalam 1327 00:54:02,000 --> 00:54:04,210 kondisi di sini, atau di sini. 1328 00:54:04,210 --> 00:54:06,690 Dan kemudian saya menggunakan mereka di bawah. 1329 00:54:06,690 --> 00:54:10,960 Seberapa baik ini sekarang akan bekerja? 1330 00:54:10,960 --> 00:54:12,740 >> Nah, itu masih sedikit buggy, tetapi mari kita setidaknya melihat 1331 00:54:12,740 --> 00:54:13,730 seberapa jauh kita sudah. 1332 00:54:13,730 --> 00:54:16,500 Jadi biarkan aku pergi ke depan dan membuat beer3. 1333 00:54:16,500 --> 00:54:17,695 Apakah beer3 ini? 1334 00:54:17,695 --> 00:54:19,410 Yap, ini adalah beer3. 1335 00:54:19,410 --> 00:54:21,510 Dan sekarang biarkan aku pergi ke depan dan menjalankan beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Kita mungkin dapat melewati sebagian besar dari mereka. 1338 00:54:25,840 --> 00:54:29,100 Dan di sini, lihat itu. 1339 00:54:29,100 --> 00:54:31,110 "Satu botol bir di dinding, satu botol bir, mengambil 1340 00:54:31,110 --> 00:54:34,306 satu turun, lulus sekitar, 0 botol bir di dinding. " 1341 00:54:34,306 --> 00:54:37,570 Tapi aku menarik perhatian Anda untuk hanya setengah dari solusi. 1342 00:54:37,570 --> 00:54:39,620 Jenis kacau di sini. 1343 00:54:39,620 --> 00:54:43,030 Jadi sepertinya bahwa kasus sudut muncul ketika saya sama apa yang 1344 00:54:43,030 --> 00:54:44,030 dua nilai? 1345 00:54:44,030 --> 00:54:45,020 HADIRIN: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 DAVID J. Malan: 2 dan 1. 1347 00:54:46,190 --> 00:54:48,180 Ini bukan 1 dan tidak 1. 1348 00:54:48,180 --> 00:54:51,890 Ini benar-benar hanya ini terakhir dua bait dari lagu ini. 1349 00:54:51,890 --> 00:54:53,890 Jadi apa yang saya ingin lakukan, bukan? 1350 00:54:53,890 --> 00:54:58,890 Jadi saya tampaknya telah tertangkap kasus di mana jika saya adalah == untuk 1, 1351 00:54:58,890 --> 00:55:02,240 maka kata pertama adalah "botol", tetapi kata kedua 1352 00:55:02,240 --> 00:55:07,230 adalah "botol". Tapi di sini, saya ingin mengubah ini menjadi == 2. 1353 00:55:07,230 --> 00:55:08,570 Dan jika hal ini terjadi, apa yang saya ingin 1354 00:55:08,570 --> 00:55:09,620 Kata pertama untuk menjadi? 1355 00:55:09,620 --> 00:55:10,430 HADIRIN: "Botol". 1356 00:55:10,430 --> 00:55:12,890 DAVID J. Malan: "Botol", sehingga untuk dua botol. 1357 00:55:12,890 --> 00:55:14,690 Dan kemudian kata ini di sini harus - 1358 00:55:14,690 --> 00:55:15,340 HADIRIN: "Botol". 1359 00:55:15,340 --> 00:55:17,316 DAVID J. Malan: "Botol", tunggal. 1360 00:55:20,430 --> 00:55:25,160 >> Baiklah, mari kita zoom out, kembali ke sini, re-menjalankan make, 1361 00:55:25,160 --> 00:55:28,590 re-run beer3, tipe 99 lagi. 1362 00:55:28,590 --> 00:55:30,710 Oke, "Segmentation fault (inti dibuang)." 1363 00:55:30,710 --> 00:55:32,780 Apa yang telah kulakukan salah? 1364 00:55:36,050 --> 00:55:38,722 HADIRIN: Anda tidak memiliki nilai [Tak terdengar]. 1365 00:55:38,722 --> 00:55:40,480 DAVID J. Malan: Ah, titik yang sangat baik. 1366 00:55:40,480 --> 00:55:43,310 Baiklah, jadi apa yang salah di sini? 1367 00:55:43,310 --> 00:55:45,450 Jadi kesalahan segmentasi, dan kami benar-benar akan melihat 1368 00:55:45,450 --> 00:55:49,020 ini beberapa kali di masa depan, dengan sengaja. 1369 00:55:49,020 --> 00:55:51,030 Tetapi untuk sekarang, apa ini benar-benar berarti? 1370 00:55:51,030 --> 00:55:53,620 Sebuah kesalahan segmentasi hampir selalu berarti bahwa Anda memiliki 1371 00:55:53,620 --> 00:55:56,760 entah bagaimana mencoba untuk mengakses memori, RAM di komputer Anda, 1372 00:55:56,760 --> 00:56:00,600 bahwa Anda tidak sendiri, bahwa Anda belum benar-benar bertanya 1373 00:56:00,600 --> 00:56:02,050 sistem operasi untuk. 1374 00:56:02,050 --> 00:56:04,440 Jadi dalam hal ini, perhatikan apa yang saya lakukan, yang 1375 00:56:04,440 --> 00:56:05,870 cacat dalam logika saya. 1376 00:56:05,870 --> 00:56:09,500 Saya telah ditugaskan nilai s1 dan s2 jika i sama dengan 1. 1377 00:56:09,500 --> 00:56:11,590 Saya juga melakukan itu jika saya sama dengan 2. 1378 00:56:11,590 --> 00:56:13,710 Tapi aku tidak melakukannya dalam jumlah tak terbatas lainnya 1379 00:56:13,710 --> 00:56:14,690 kemungkinan - 1380 00:56:14,690 --> 00:56:17,940 khususnya, 3 atau 4 atau dot, dot, dot, 99. 1381 00:56:17,940 --> 00:56:20,100 Jadi satu untuk memperbaiki ini hanya bisa mari kita 1382 00:56:20,100 --> 00:56:22,190 memiliki kondisi yang lain. 1383 00:56:22,190 --> 00:56:26,780 Dan biarkan aku pergi di sini dan mengatakan s1 sama - 1384 00:56:26,780 --> 00:56:28,180 apa yang harus ia berada di sini? 1385 00:56:28,180 --> 00:56:28,750 HADIRIN: [Tak terdengar]. 1386 00:56:28,750 --> 00:56:30,460 >> DAVID J. Malan: "Botol", karena dalam kasus umum, 1387 00:56:30,460 --> 00:56:32,020 itu hanya hal yang sama. 1388 00:56:32,020 --> 00:56:35,580 Jadi sama dengan kutipan, tanda kutip, "botol." Jadi untuk jamak 1389 00:56:35,580 --> 00:56:41,010 botol, dan kemudian di sini, untuk botol jamak. 1390 00:56:41,010 --> 00:56:44,580 Oke, jadi sekarang biarkan aku kembali ke jendela terminal saya, 1391 00:56:44,580 --> 00:56:47,200 kompilasi ulang, re-menjalankannya. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Wah. 1394 00:56:49,150 --> 00:56:50,610 Dan mari kita melakukan cek kewarasan cepat. 1395 00:56:50,610 --> 00:56:52,400 Secara teknis, kita ingin membaca semua ini untuk memastikan 1396 00:56:52,400 --> 00:56:53,370 mereka benar, tapi mari kita lihat 1397 00:56:53,370 --> 00:56:54,640 setidaknya diketahui penyebab. 1398 00:56:54,640 --> 00:56:57,370 3 botol, 2 botol, 2 botol, 1 1399 00:56:57,370 --> 00:57:00,380 botol, 1 botol, botol 0. 1400 00:57:00,380 --> 00:57:03,080 Kita tampaknya telah setidaknya tetap untuk saat ini. 1401 00:57:03,080 --> 00:57:06,010 Tapi menangkap di sini adalah bahwa apa yang berantakan Allah yang mengerikan ini 1402 00:57:06,010 --> 00:57:07,470 hanya untuk memecahkan bodoh 1403 00:57:07,470 --> 00:57:09,540 satu-karakter gramatikal detail. 1404 00:57:09,540 --> 00:57:11,150 Jadi ada semacam alasan bahwa saya memotong sudut ini 1405 00:57:11,150 --> 00:57:14,090 sebelumnya, karena itu hanya benar-benar menjengkelkan harus 1406 00:57:14,090 --> 00:57:15,020 menulis kode banyak. 1407 00:57:15,020 --> 00:57:17,530 Tapi ternyata ada cara yang sedikit lebih elegan 1408 00:57:17,530 --> 00:57:20,110 mengungkapkan hal yang sama persis. 1409 00:57:20,110 --> 00:57:22,040 Dan kita dapat melakukan hal ini sebagai berikut. 1410 00:57:22,040 --> 00:57:23,890 >> Biarkan aku meninggalkan ini pada layar sejenak dan 1411 00:57:23,890 --> 00:57:27,320 memperkenalkan sesuatu yang dikenal sebagai operator ternary. 1412 00:57:27,320 --> 00:57:29,600 Ini adalah jenis kapal satu-yang hanya dimaksudkan untuk membuat kita 1413 00:57:29,600 --> 00:57:31,880 menjalani seksi sedikit, seperti yang dijanjikan. 1414 00:57:31,880 --> 00:57:33,130 Dan aku akan melakukan hal ini sebagai berikut. 1415 00:57:33,130 --> 00:57:35,810 Beri aku string disebut s1, dan biarkan aku 1416 00:57:35,810 --> 00:57:37,200 menetapkan itu sebagai berikut. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Botol", jika "botol". String s2 mendapat (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Botol", jika "botol". 1420 00:57:52,670 --> 00:57:57,050 Jadi kalau begitu, apakah perbedaan di sini? 1421 00:57:57,050 --> 00:57:59,370 Kedua baris kode, saya berpendapat, bisa 1422 00:57:59,370 --> 00:58:02,200 mengganti kekacauan ini. 1423 00:58:02,200 --> 00:58:04,280 Jadi saya menyebutnya berantakan, hanya karena jenis menggosok saya 1424 00:58:04,280 --> 00:58:05,940 cara yang salah bahwa itu garis begitu banyak kode. 1425 00:58:05,940 --> 00:58:06,650 Tidak salah. 1426 00:58:06,650 --> 00:58:07,700 Ini bukan desain yang buruk. 1427 00:58:07,700 --> 00:58:10,140 Seperti, hal ini sepenuhnya benar dan baik-baik saja. 1428 00:58:10,140 --> 00:58:12,970 Tapi coding akan membosankan jika Anda harus mengekspresikan diri sehingga 1429 00:58:12,970 --> 00:58:15,530 sialan khusus lagi dan lagi dan lagi dengan sederhana 1430 00:58:15,530 --> 00:58:16,620 Skenario seperti ini. 1431 00:58:16,620 --> 00:58:19,470 Jadi C memiliki beberapa cara pintas, seperti ini. 1432 00:58:19,470 --> 00:58:24,270 Jadi ini pada dasarnya mengatakan mendeklarasikan string disebut s1 dan 1433 00:58:24,270 --> 00:58:32,610 menetapkan baik ini nilai atau nilai ini jika saya adalah == - 1434 00:58:32,610 --> 00:58:35,290 Maaf, saya harus mengatakan ini lebih jelas. 1435 00:58:35,290 --> 00:58:41,680 Deklarasi variabel s1, menetapkan nilai ini jika hal ini benar. 1436 00:58:41,680 --> 00:58:44,280 Jika tidak, menetapkan nilai ini. 1437 00:58:44,280 --> 00:58:47,220 Jadi dengan kata lain, ini adalah semacam cara satu-garis 1438 00:58:47,220 --> 00:58:51,490 mengatakan jika lain tetapi melakukan tugas sepanjang jalan. 1439 00:58:51,490 --> 00:58:55,540 Jadi jika saya adalah 1, kemudian pergi ke depan dan menyebutnya "botol". Dan 1440 00:58:55,540 --> 00:58:59,830 maka ini yang lain, sebut saja "botol". Sementara itu, s2, yang 1441 00:58:59,830 --> 00:59:04,060 kata kedua bahwa kita perlu mendefinisikan, jika saya sama dengan 2, kita akan 1442 00:59:04,060 --> 00:59:08,350 mengatur s2 untuk "botol". Jika tidak, set ke "botol". Dan apa 1443 00:59:08,350 --> 00:59:11,460 ini berarti sekarang adalah saya bisa melewati ini dan menghapus semua 1444 00:59:11,460 --> 00:59:12,860 mereka baris kode. 1445 00:59:12,860 --> 00:59:17,220 Dan ketika saya katakan, agak ridiculously, bahwa ini adalah saat 1446 00:59:17,220 --> 00:59:20,060 seksi, seksi itu dalam semacam rasa gaya. 1447 00:59:20,060 --> 00:59:22,660 Fakta bahwa fungsional, kode ini sebenarnya akan 1448 00:59:22,660 --> 00:59:24,610 melakukan hal yang sama persis. 1449 00:59:24,610 --> 00:59:26,890 Dan meskipun mungkin terlihat sedikit samar pada awalnya 1450 00:59:26,890 --> 00:59:29,250 sekilas, karena kami sudah tidak melihat konstruksi ini sebelumnya, aku akan 1451 00:59:29,250 --> 00:59:31,850 berpendapat bahwa itu pada akhirnya akan menjadi jauh lebih 1452 00:59:31,850 --> 00:59:34,820 dibaca dan lebih mudah bagi kita manusia untuk semacam 1453 00:59:34,820 --> 00:59:36,830 mengerti, karena sekarang Anda hanya dapat membaca 1454 00:59:36,830 --> 00:59:38,830 semua kode dalam satu baris. 1455 00:59:38,830 --> 00:59:41,550 Ini masih memiliki semangat yang sama jika, di mana ini adalah 1456 00:59:41,550 --> 00:59:44,920 kondisi dan maka ini adalah apa yang ada di dalam jika dan ini 1457 00:59:44,920 --> 00:59:46,480 adalah apa yang ada di dalam yang lain tersebut. 1458 00:59:46,480 --> 00:59:49,450 Tapi kita bisa melakukan hal ini hanya jauh lebih elegan. 1459 00:59:49,450 --> 00:59:52,650 >> Dan jika saya sekarang kembali ke terminal saya, setelah menghapus semua 1460 00:59:52,650 --> 00:59:55,530 dari baris tersebut dan menggantinya dengan hanya dua, 1461 00:59:55,530 --> 01:00:00,150 kompilasi ulang, re-run botol bir dengan 99, perhatikan bahwa saya 1462 01:00:00,150 --> 01:00:03,350 tata bahasa, pada kenyataannya, masih benar. 1463 01:00:03,350 --> 01:00:06,160 Jadi sekali lagi, untuk memulai sesuatu. 1464 01:00:06,160 --> 01:00:08,840 2 botol bir, 1 botol bir. 1465 01:00:08,840 --> 01:00:09,370 Tampak benar. 1466 01:00:09,370 --> 01:00:10,100 Ya. 1467 01:00:10,100 --> 01:00:13,900 Jadi ada kami memiliki solusi yang jauh lebih ringkas. 1468 01:00:13,900 --> 01:00:16,020 Jadi ini juga, karena Anda mendapatkan lebih nyaman dengan C, tidak 1469 01:00:16,020 --> 01:00:18,630 tentu dengan pset pertama atau bahkan kedua, namun 1470 01:00:18,630 --> 01:00:21,170 menyadari bahwa konstruksi ini dapat memungkinkan kita untuk melakukan hal-hal yang pernah 1471 01:00:21,170 --> 01:00:22,810 lebih elegan. 1472 01:00:22,810 --> 01:00:25,200 Sekarang mari kita lakukan satu hal lain di sini. 1473 01:00:25,200 --> 01:00:31,460 Biarkan aku pergi ke depan dan membuka return1.c. 1474 01:00:31,460 --> 01:00:34,340 Sekarang mari kita mulai untuk memecahkan masalah lain dengan cara yang 1475 01:00:34,340 --> 01:00:37,140 memungkinkan kita untuk menulis kode yang lebih canggih. 1476 01:00:37,140 --> 01:00:39,960 >> Jadi di sini adalah program kecil sederhana yang tujuannya dalam hidup 1477 01:00:39,960 --> 01:00:41,870 adalah untuk kenaikan nilai. 1478 01:00:41,870 --> 01:00:43,100 Dan sebenarnya, mari kita mengambil langkah mundur. 1479 01:00:43,100 --> 01:00:44,400 Biarkan aku melakukan ini secara manual. 1480 01:00:44,400 --> 01:00:52,200 Biarkan saya sertakan dan int main (void). 1481 01:00:52,200 --> 01:00:53,450 Dan biarkan aku sebut increment.c ini. 1482 01:00:57,150 --> 01:00:58,570 Dan apa yang ingin saya lakukan? 1483 01:00:58,570 --> 01:01:02,240 Aku akan pergi ke depan dan mengatakan sesuatu seperti - 1484 01:01:02,240 --> 01:01:04,280 akan kita sebut nomor yang sama - 1485 01:01:04,280 --> 01:01:04,980 int x. 1486 01:01:04,980 --> 01:01:13,670 Jadi x int mendapat 2, x printf adalah% d, baris baru, x. 1487 01:01:13,670 --> 01:01:16,780 Jadi aku mengetik cepat, tapi hal semacam akrab sekarang. 1488 01:01:16,780 --> 01:01:18,830 Lalu aku akan melakukan x + +. 1489 01:01:18,830 --> 01:01:21,710 Lalu aku akan mencetak kalimat yang sama lagi. 1490 01:01:21,710 --> 01:01:24,550 Dan kemudian aku akan kembali 0 hanya untuk keluar dari program. 1491 01:01:24,550 --> 01:01:25,960 Baiklah, jadi ini adalah sebuah program yang 1492 01:01:25,960 --> 01:01:26,960 peningkatan angka. 1493 01:01:26,960 --> 01:01:29,830 Ini pertama akan menginisialisasi sesuatu untuk 2, dan kemudian itu 1494 01:01:29,830 --> 01:01:33,470 akan kenaikan itu dan mencetaknya lagi. 1495 01:01:33,470 --> 01:01:36,930 >> Jadi mari kita jalankan kenaikan, program yang sangat sederhana. 1496 01:01:36,930 --> 01:01:40,940 Tapi misalkan sekarang aku ingin kubus nilai, begitu 1497 01:01:40,940 --> 01:01:42,490 agak sewenang-wenang sesuatu. 1498 01:01:42,490 --> 01:01:45,140 Dan aku benar-benar ingin melakukan x mendapat kubus itu. 1499 01:01:45,140 --> 01:01:47,570 Jadi saya bisa menggunakan apa yang disebut fungsi pow, tapi aku tidak 1500 01:01:47,570 --> 01:01:48,650 benar-benar tahu di mana yang belum. 1501 01:01:48,650 --> 01:01:50,580 Jadi aku akan melakukan hal ini dengan cara kuno. 1502 01:01:50,580 --> 01:01:54,550 x kali ini sama dengan x kali x kali x. 1503 01:01:54,550 --> 01:01:56,880 Jadi aku cubing nilai, mengalikannya dengan sendirinya lagi 1504 01:01:56,880 --> 01:02:00,440 dan lagi dan lagi, sehingga kita mendapatkan kekuatan 1505 01:02:00,440 --> 01:02:02,050 dari 3 dalam kasus ini. 1506 01:02:02,050 --> 01:02:06,000 Jadi sekarang saya harus mencetak angka seharusnya, seperti yang kita akan melihat 1507 01:02:06,000 --> 01:02:08,450 di sini - membuat kenaikan, sehingga sebenarnya tidak benar-benar kenaikan 1508 01:02:08,450 --> 01:02:10,260 lagi, tapi kami akan meninggalkan nama saja - 1509 01:02:10,260 --> 01:02:11,590 2 dan kemudian 8. 1510 01:02:11,590 --> 01:02:17,670 Sekarang, kita memiliki awal dari kesempatan untuk perbaikan 1511 01:02:17,670 --> 01:02:21,570 di sini, dimana hal ini cubing mengalikan angka 1512 01:02:21,570 --> 01:02:24,680 dengan sendirinya dengan sendirinya dengan sendirinya merasa seperti ini mungkin saja 1513 01:02:24,680 --> 01:02:27,920 berguna untuk memiliki sebagai fungsi, seperti seseorang memutuskan 1514 01:02:27,920 --> 01:02:30,430 tahun lalu - Anda tahu, jenis berguna jika salah satu dari kita duduk 1515 01:02:30,430 --> 01:02:33,120 dan menulis printf sehingga seluruh dunia dapat menggunakannya, 1516 01:02:33,120 --> 01:02:36,160 kenapa tidak kita duduk dan menulis fungsi yang disebut kubus 1517 01:02:36,160 --> 01:02:39,250 yang melakukan cubing ini untuk kita sehingga kita tidak perlu secara manual 1518 01:02:39,250 --> 01:02:41,500 mengimplementasikan gagasan cubing nilai di sini? 1519 01:02:41,500 --> 01:02:44,040 >> Jadi contoh sederhana, tapi mari kita pergi ke depan dan menggunakan ini sebagai 1520 01:02:44,040 --> 01:02:46,280 kesempatan untuk menulis fungsi kita sendiri. 1521 01:02:46,280 --> 01:02:49,110 Jadi sejauh ini, kita hanya digunakan utama, dan kami telah menggunakan lainnya 1522 01:02:49,110 --> 01:02:51,780 fungsi orang, tapi kami tidak menulis kita sendiri. 1523 01:02:51,780 --> 01:02:52,650 Jadi di sini kita pergi. 1524 01:02:52,650 --> 01:02:56,330 Aku akan pergi ke depan dan menulis fungsi yang disebut kubus. 1525 01:02:56,330 --> 01:02:58,490 Dan aku akan memilikinya mengambil input. 1526 01:02:58,490 --> 01:03:02,070 Jadi input akan menjadi integer. 1527 01:03:02,070 --> 01:03:03,570 Dan apa itu akan dilakukan? 1528 01:03:03,570 --> 01:03:08,500 Ini akan mendeklarasikan keluaran int = masukan masukan kali 1529 01:03:08,500 --> 01:03:09,880 kali masukan. 1530 01:03:09,880 --> 01:03:12,190 Dan kemudian itu akan kembali output tersebut. 1531 01:03:12,190 --> 01:03:14,500 Dan kemudian saya harus lebih spesifik sekarang. 1532 01:03:14,500 --> 01:03:16,820 Fungsi ini akan mengembalikan sebuah int. 1533 01:03:16,820 --> 01:03:19,130 Jadi di sini kemudian adalah bagaimana Anda akan menulis fungsi sendiri. 1534 01:03:19,130 --> 01:03:20,850 Anda pertama kali memutuskan apa nama Anda 1535 01:03:20,850 --> 01:03:21,720 Fungsi akan. 1536 01:03:21,720 --> 01:03:23,964 Dan pada umumnya, sesuatu yang jelas baik, jadi saya akan 1537 01:03:23,964 --> 01:03:25,060 menyebutnya kubus. 1538 01:03:25,060 --> 01:03:27,180 Kemudian Anda harus menentukan apa yang akan kembali, apa 1539 01:03:27,180 --> 01:03:28,240 outputnya akan menjadi. 1540 01:03:28,240 --> 01:03:29,595 Dan kami tidak memiliki pilihan yang banyak belum. 1541 01:03:29,595 --> 01:03:32,260 Int, char, float, bool, string. 1542 01:03:32,260 --> 01:03:34,260 Untuk saat ini, aku akan tetap dengan int, karena saya ingin 1543 01:03:34,260 --> 01:03:35,880 untuk kembali integer. 1544 01:03:35,880 --> 01:03:38,770 Kemudian Anda harus menentukan apa yang input-nya, jika ada, adalah. 1545 01:03:38,770 --> 01:03:41,570 Dan jika kubus mengambil argumen, mengambil sesuatu di antara 1546 01:03:41,570 --> 01:03:44,970 kurung, Anda harus memberikan argumen bahwa nama sehingga 1547 01:03:44,970 --> 01:03:47,860 Anda dapat menyebutnya sesuatu yang Anda menerapkan atau menulis 1548 01:03:47,860 --> 01:03:50,550 fungsi ini, dan Anda harus memberikan jenis, yang dalam hal ini 1549 01:03:50,550 --> 01:03:51,810 Kasus ini akan menjadi int. 1550 01:03:51,810 --> 01:03:54,690 Jadi singkatnya, kubus adalah fungsi yang mengambil integer 1551 01:03:54,690 --> 01:03:57,560 sebagai input dan mengembalikan sebuah integer sebagai output. 1552 01:03:57,560 --> 01:03:59,240 >> Jadi apa hubungannya dengan masukan itu? 1553 01:03:59,240 --> 01:04:03,710 Nah, di baris 14, saya menyatakan output yang disebut variabel, dan saya 1554 01:04:03,710 --> 01:04:07,410 menetapkan nilai, masukan masukan kali kali masukan. 1555 01:04:07,410 --> 01:04:11,490 Dan kemudian saya kembali output. 1556 01:04:11,490 --> 01:04:14,890 Jadi bagaimana saya menggunakan ini maka? 1557 01:04:14,890 --> 01:04:19,210 Apa yang harus saya mengubah karakter disorot pada baris 1558 01:04:19,210 --> 01:04:21,006 7 yang akan, menurut Anda? 1559 01:04:21,006 --> 01:04:21,800 HADIRIN: [Tak terdengar]. 1560 01:04:21,800 --> 01:04:25,570 DAVID J. Malan: Ya, jadi kubus x. 1561 01:04:25,570 --> 01:04:28,290 Jadi x adalah variabel, yang berarti memegang beberapa nilai. 1562 01:04:28,290 --> 01:04:30,190 Untungnya, itu bertipe integer. 1563 01:04:30,190 --> 01:04:34,280 Dan karena x adalah int, itu berarti saya bisa lulus ke kubus. 1564 01:04:34,280 --> 01:04:39,500 Dan meskipun aku mengesampingkan nilai x dengan nilai 1565 01:04:39,500 --> 01:04:42,780 x kubus, seperti yang telah terjadi sejauh ini, setiap kali Anda 1566 01:04:42,780 --> 01:04:46,150 memiliki tanda sama dan baris kode, hal-hal di sebelah kanan 1567 01:04:46,150 --> 01:04:49,090 dijalankan dan kemudian akan diserahkan kepada 1568 01:04:49,090 --> 01:04:50,150 nilai di sebelah kiri. 1569 01:04:50,150 --> 01:04:52,950 Jadi urutan operasi adalah seperti yang kita akan berharap. 1570 01:04:52,950 --> 01:04:56,620 Jadi, apakah ini bekerja? 1571 01:04:56,620 --> 01:04:58,410 Nah, biarkan aku pergi ke sini. 1572 01:04:58,410 --> 01:04:59,970 Mari saya membuka jendela terminal saya. 1573 01:04:59,970 --> 01:05:03,610 Biarkan saya lakukan membuat kenaikan, Enter. 1574 01:05:03,610 --> 01:05:07,140 "Deklarasi implisit dari 'kubus' fungsi tidak valid dalam 1575 01:05:07,140 --> 01:05:13,700 C99 "Sebagai samping., C99 mengacu pada bahasa C seperti itu 1576 01:05:13,700 --> 01:05:16,790 didefinisikan pada tahun 1999, yang merupakan pembaruan atas versi dari 1577 01:05:16,790 --> 01:05:19,360 1989, yang merupakan pembaruan atas asli. 1578 01:05:19,360 --> 01:05:21,740 Jadi itulah yang berarti. 1579 01:05:21,740 --> 01:05:24,250 >> Jadi apa artinya bahwa "deklarasi implisit 1580 01:05:24,250 --> 01:05:26,790 'kubus' fungsi tidak valid "Ada di sini?. 1581 01:05:26,790 --> 01:05:28,430 Ini tepat di jalur 12. 1582 01:05:28,430 --> 01:05:30,460 HADIRIN: [Tak terdengar]. 1583 01:05:30,460 --> 01:05:30,730 DAVID J. Malan: Apa itu? 1584 01:05:30,730 --> 01:05:32,470 HADIRIN: Ini bukan sebelumnya. 1585 01:05:32,470 --> 01:05:33,540 DAVID J. Malan: Ini bukan sebelumnya. 1586 01:05:33,540 --> 01:05:34,740 Jadi ini adalah hal. 1587 01:05:34,740 --> 01:05:38,190 C adalah agak bodoh, atau C compiler yang agak bodoh. 1588 01:05:38,190 --> 01:05:41,060 Mereka benar-benar hanya melakukan apa yang Anda katakan mereka lakukan. 1589 01:05:41,060 --> 01:05:44,770 Dan mereka, khususnya, hanya membaca atas kode Anda ke bawah, 1590 01:05:44,770 --> 01:05:45,620 kiri ke kanan. 1591 01:05:45,620 --> 01:05:49,140 Jadi jika compiler, dentang, yang membaca kode Anda, baris 1, maka 1592 01:05:49,140 --> 01:05:50,120 angka keluar bagaimana untuk melakukan hal ini. 1593 01:05:50,120 --> 01:05:50,940 Oh, di sini datang utama. 1594 01:05:50,940 --> 01:05:53,000 Oke, biarkan aku pergi ke depan dan menyatakan variabel x. 1595 01:05:53,000 --> 01:05:54,160 Biarkan saya mencetak sesuatu. 1596 01:05:54,160 --> 01:05:55,890 Baris 7, apa sih kubus? 1597 01:05:55,890 --> 01:05:58,230 Ini tidak dideklarasikan di stdio.h. 1598 01:05:58,230 --> 01:06:00,950 Itu tidak datang dengan C. Saya tidak tahu apa yang harus dilakukan. 1599 01:06:00,950 --> 01:06:03,960 Dan sehingga dentang hanya bails dan berhenti dengan pesan kesalahan. 1600 01:06:03,960 --> 01:06:05,850 Jadi kita bisa memperbaiki ini dalam beberapa cara. 1601 01:06:05,850 --> 01:06:10,530 Kita dapat mengajarkan dentang apa kubus dengan hanya menggerakkan mana 1602 01:06:10,530 --> 01:06:11,820 deklarasi ini. 1603 01:06:11,820 --> 01:06:14,640 Jadi saya dipotong dan disisipkan di atas utama. 1604 01:06:14,640 --> 01:06:17,770 Sekarang menyadari bahwa hanya karena utama adalah tidak lagi pertama, itu 1605 01:06:17,770 --> 01:06:19,150 masih dijalankan secara default. 1606 01:06:19,150 --> 01:06:20,060 Main utama. 1607 01:06:20,060 --> 01:06:21,022 Ini adalah nama fungsi standar. 1608 01:06:21,022 --> 01:06:22,930 Tidak peduli di mana itu adalah dalam file. 1609 01:06:22,930 --> 01:06:26,910 Tapi setidaknya sekarang dentang telah melihat kubus sebelum saya menggunakannya. 1610 01:06:26,910 --> 01:06:28,500 Jadi mari kita lihat apakah dentang lebih bahagia sekarang. 1611 01:06:28,500 --> 01:06:31,410 Membuat kenaikan, itu waktu kompilasi ini. 1612 01:06:31,410 --> 01:06:33,060 >> Biarkan saya jalankan kenaikan. 1613 01:06:33,060 --> 01:06:34,810 Dan memang, tampaknya akan bekerja. 1614 01:06:34,810 --> 01:06:36,810 Sekarang, Anda bisa datang dengan skenario di mana akhirnya 1615 01:06:36,810 --> 01:06:38,650 itu tidak layak untuk menempatkan setiap fungsi 1616 01:06:38,650 --> 01:06:39,740 atas setiap fungsi lainnya. 1617 01:06:39,740 --> 01:06:42,140 Anda akan terjebak dalam infinite loop pada kenyataannya, 1618 01:06:42,140 --> 01:06:43,480 di mana orang ini ingin berada di sini tapi ini 1619 01:06:43,480 --> 01:06:44,390 Orang perlu berada di sana. 1620 01:06:44,390 --> 01:06:45,830 Sehingga tidak selalu bekerja. 1621 01:06:45,830 --> 01:06:49,020 Jadi untungnya, C memiliki solusi yang lebih elegan. 1622 01:06:49,020 --> 01:06:50,790 Aku akan menempatkan kembali ini di mana itu, hanya karena aku 1623 01:06:50,790 --> 01:06:53,390 suka, sebagai masalah prinsip, yang utama selalu 1624 01:06:53,390 --> 01:06:55,550 di atas, karena itu hanya bagus untuk melihat apa program ini 1625 01:06:55,550 --> 01:06:56,920 tidak secara default. 1626 01:06:56,920 --> 01:06:58,950 Dan apa yang akan saya lakukan di sini adalah menyatakan apa yang disebut 1627 01:06:58,950 --> 01:07:00,250 prototipe. 1628 01:07:00,250 --> 01:07:05,730 Aku akan kembali mendeklarasikan fungsi kubus saya dengan benar 1629 01:07:05,730 --> 01:07:07,180 copy dan paste. 1630 01:07:07,180 --> 01:07:08,290 Sebenarnya, itu tidak benar. 1631 01:07:08,290 --> 01:07:13,060 Jadi secara harfiah menyalin dan menyisipkan baris 15 1632 01:07:13,060 --> 01:07:15,160 di atas jalur 6. 1633 01:07:15,160 --> 01:07:17,010 Tidak peduli apa yang baris ini berakhir di. 1634 01:07:17,010 --> 01:07:18,380 Hal ini terjadi untuk berada di jalur 4. 1635 01:07:18,380 --> 01:07:19,950 Tapi itu tidak harus sebelum main. 1636 01:07:19,950 --> 01:07:21,150 Tapi melihat perbedaan. 1637 01:07:21,150 --> 01:07:24,100 Jalur 4 berakhir dengan titik koma, yang berarti hei, 1638 01:07:24,100 --> 01:07:27,510 Clang, mengambil kata-kata saya untuk itu bahwa ada fungsi 1639 01:07:27,510 --> 01:07:31,350 disebut kubus yang mengambil int dan mengembalikan sebuah int. 1640 01:07:31,350 --> 01:07:33,020 Tapi aku tidak akan memberitahu Anda apa itu belum. 1641 01:07:33,020 --> 01:07:35,180 Hanya tahu bahwa aku berjanji untuk memberitahu Anda pada akhirnya. 1642 01:07:35,180 --> 01:07:38,490 Dan memang, sekarang tidak apa-apa bahwa ini adalah di bawah. 1643 01:07:38,490 --> 01:07:41,275 >> Jadi ini umumnya lebih baik, karena kemudian di bagian atas 1644 01:07:41,275 --> 01:07:44,240 file Anda, Anda hanya dapat mainan dari, cepat-api, satu baris 1645 01:07:44,240 --> 01:07:46,470 masing-masing, apa nama fungsi Anda, apa yang mereka 1646 01:07:46,470 --> 01:07:49,120 masukan, apa output mereka. 1647 01:07:49,120 --> 01:07:52,210 Dan untuk lebih jelas, masukan umumnya berarti argumen atau 1648 01:07:52,210 --> 01:07:54,110 parameter, identik. 1649 01:07:54,110 --> 01:07:56,890 Output berarti nilai kembali, apa fungsinya 1650 01:07:56,890 --> 01:07:58,700 menyerahkan kembali kepada saya. 1651 01:07:58,700 --> 01:08:03,420 Jadi dalam hal ini di sini, kubus telah dinyatakan di atas, namun 1652 01:08:03,420 --> 01:08:06,940 didefinisikan, atau dikenal sebagai diterapkan, di bagian bawah. 1653 01:08:06,940 --> 01:08:09,620 Jadi sekarang mari kita kembali ke sini dan kembali menjalankan ini. 1654 01:08:09,620 --> 01:08:13,430 Jadi sekarang biarkan aku pergi ke depan dan kembali menjalankan make, kembali menjalankan kenaikan. 1655 01:08:13,430 --> 01:08:16,500 Dan sekarang tampaknya akan bekerja baik-baik saja. 1656 01:08:16,500 --> 01:08:19,450 Jadi sekarang kita bisa pergi ke depan dan faktor luar sesuatu seperti 1657 01:08:19,450 --> 01:08:23,720 Contoh bir ke versi keempat. 1658 01:08:23,720 --> 01:08:25,590 Jadi biarkan aku gulir di sini. 1659 01:08:25,590 --> 01:08:28,149 Dan melihat bahwa aku agak mengambil pelajaran ini ke dalam hati hanya sekarang. 1660 01:08:28,149 --> 01:08:31,140 Fakta bahwa saya menyanyikan bait yang sama lagi dan 1661 01:08:31,140 --> 01:08:34,130 lagi dan lagi, garis chorus yang sama dalam lagu, merasa 1662 01:08:34,130 --> 01:08:36,439 seperti kenapa tidak saya faktor yang keluar ke fungsi? 1663 01:08:36,439 --> 01:08:38,470 Dan memang, ini harus menjadi salah satu motivasi. 1664 01:08:38,470 --> 01:08:40,960 Selain fakta bahwa orang lain di dunia mungkin ingin 1665 01:08:40,960 --> 01:08:42,390 untuk menggunakan fungsi kubus - 1666 01:08:42,390 --> 01:08:44,560 itu alasan yang baik untuk faktor sesuatu dan menulis Anda 1667 01:08:44,560 --> 01:08:45,720 Fungsi kustom - 1668 01:08:45,720 --> 01:08:48,720 jika ada serangkaian kode dalam program anda yang hanya membuat 1669 01:08:48,720 --> 01:08:51,370 konseptual akal, bahwa Anda seperti ingin memberikan 1670 01:08:51,370 --> 01:08:53,740 Nama - seperti dalam kasus ini, paduan suara - 1671 01:08:53,740 --> 01:08:57,380 maka Anda sama dapat menulis bahwa sebagai fungsi yang terpisah. 1672 01:08:57,380 --> 01:08:59,560 Anda tidak harus menulis segala sesuatu di utama jika hanya 1673 01:08:59,560 --> 01:09:02,609 terasa lebih bersih untuk memisahkan keluar dan memberikan nama. 1674 01:09:02,609 --> 01:09:05,529 >> Jadi dalam hal ini di sini, perhatikan bahwa saya memiliki komentar atas 1675 01:09:05,529 --> 01:09:06,859 fungsi ini yang hanya menyanyikan tentang 1676 01:09:06,859 --> 01:09:08,630 ditentukan jumlah botol. 1677 01:09:08,630 --> 01:09:10,609 Perhatikan di sini bahwa saya tidak perlu menyebut 1678 01:09:10,609 --> 01:09:12,520 hal input dan output. 1679 01:09:12,520 --> 01:09:16,090 Bahkan, kali ini saya hanya disebut b masukan saya untuk botol. 1680 01:09:16,090 --> 01:09:19,960 Dan perhatikan di sini, batal menunjukkan apa? 1681 01:09:19,960 --> 01:09:21,309 Paduan suara yang - 1682 01:09:21,309 --> 01:09:22,660 HADIRIN: Tidak mengembalikannya. 1683 01:09:22,660 --> 01:09:23,870 DAVID J. Malan: Tidak mengembalikan nilai. 1684 01:09:23,870 --> 01:09:26,800 Dan memang, fungsi tidak perlu mengembalikan nilai. 1685 01:09:26,800 --> 01:09:28,060 Mereka hanya bisa melakukan sesuatu. 1686 01:09:28,060 --> 01:09:30,270 Mereka dapat memiliki apa yang disebut efek samping, yang dalam hal ini 1687 01:09:30,270 --> 01:09:33,109 Kasus adalah hanya sekelompok seluruh mencetak pada layar. 1688 01:09:33,109 --> 01:09:36,580 Jadi perhatikan bahwa kode di sini, saya benar-benar hanya mencuri dari 1689 01:09:36,580 --> 01:09:37,680 contoh sebelumnya. 1690 01:09:37,680 --> 01:09:39,930 Satu-satunya perbedaan adalah bukan menggunakan i sebagai saya 1691 01:09:39,930 --> 01:09:42,890 variabel, Sekarang saya menggunakan b sebagai variabel saya. 1692 01:09:42,890 --> 01:09:45,880 Jadi saya memiliki b di sini, saya memiliki b di sini, saya telah b 1693 01:09:45,880 --> 01:09:47,109 dikurangi 1 di sini. 1694 01:09:47,109 --> 01:09:49,279 Tetapi kode ini persis sama. 1695 01:09:49,279 --> 01:09:52,529 Tapi hanya untuk menunjukkan Anda sekarang bagaimana kita bisa menggunakan ini, biarkan aku pergi 1696 01:09:52,529 --> 01:09:56,780 depan dan benar-benar mengubah ini menjadi untuk loop. 1697 01:09:56,780 --> 01:10:03,850 for (int i = n, i> n, i -). 1698 01:10:03,850 --> 01:10:06,230 >> Jadi saya sudah dicuri bahwa dari contoh kita sebelumnya. 1699 01:10:06,230 --> 01:10:08,970 Sebelumnya, itu sejalan 37 bahwa saya akan mulai 1700 01:10:08,970 --> 01:10:10,640 menyanyikan lagu ini menjengkelkan. 1701 01:10:10,640 --> 01:10:15,810 Tapi sebaliknya, aku hanya akan sekarang panggilan paduan suara i. 1702 01:10:15,810 --> 01:10:16,870 Selesai. 1703 01:10:16,870 --> 01:10:20,260 Jadi sekarang dalam setiap iterasi dari loop ini, saya sebut ini lain 1704 01:10:20,260 --> 01:10:22,220 fungsi, chorus, yang kebetulan saya menulis. 1705 01:10:22,220 --> 01:10:24,110 Itu tidak ditulis oleh orang lain tahun lalu. 1706 01:10:24,110 --> 01:10:27,930 Tapi chorus, sementara itu, menggunakan printf untuk mencetak 1707 01:10:27,930 --> 01:10:29,840 keluar empat baris. 1708 01:10:29,840 --> 01:10:32,720 Tapi fakta bahwa aku menelepon chorus lagi dan lagi dalam 1709 01:10:32,720 --> 01:10:35,900 lingkaran berarti bahwa aku akan mendapatkan, di akhir, 1710 01:10:35,900 --> 01:10:39,310 persis sama lagu seperti yang telah saya sejauh ini. 1711 01:10:39,310 --> 01:10:42,130 Jadi singkatnya, sekarang jika saya melihat kembali pada kode saya, meskipun 1712 01:10:42,130 --> 01:10:44,240 fungsional ini setara, perhatikan bahwa itu 1713 01:10:44,240 --> 01:10:46,020 mulai mendapatkan bahkan lebih mudah dibaca. 1714 01:10:46,020 --> 01:10:48,410 Saya tidak tahu persis bagaimana GetInt 1715 01:10:48,410 --> 01:10:49,250 diimplementasikan. 1716 01:10:49,250 --> 01:10:52,050 Terus terang, saya tidak tahu bagaimana chorus diimplementasikan. 1717 01:10:52,050 --> 01:10:52,970 Tapi itu tidak masalah bagi saya. 1718 01:10:52,970 --> 01:10:55,620 Saya tidak peduli, karena sekarang saya dapat semacam, sebagai manusia, baca 1719 01:10:55,620 --> 01:10:57,050 ini dari atas ke bawah. 1720 01:10:57,050 --> 01:10:59,950 Dan karena fungsi diberi nama sesuai dengan apa yang mereka 1721 01:10:59,950 --> 01:11:02,910 lakukan, kode saya semakin dibaca. 1722 01:11:02,910 --> 01:11:05,190 Dan sebagai program kami mendapatkan jauh lebih kompleks - 1723 01:11:05,190 --> 01:11:07,220 pada akhir semester, Anda akan menulis ratusan baris 1724 01:11:07,220 --> 01:11:10,970 kode dalam bahasa seperti PHP dan JavaScript dan sejenisnya - 1725 01:11:10,970 --> 01:11:13,550 Anda akan menemukan bahwa hal itu jauh lebih mudah daripada melacak 1726 01:11:13,550 --> 01:11:14,080 apa yang telah Anda lakukan. 1727 01:11:14,080 --> 01:11:15,810 Dan ketika Anda mulai berkolaborasi dengan teman atau 1728 01:11:15,810 --> 01:11:19,010 mitra atau rekan, Anda akan mampu menulis lebih banyak 1729 01:11:19,010 --> 01:11:22,910 besar program dengan mulai melaksanakan dasar ini 1730 01:11:22,910 --> 01:11:23,990 blok bangunan. 1731 01:11:23,990 --> 01:11:25,550 >> Jadi dengan mengatakan bahwa, kenapa tidak kita menyebutnya sehari? 1732 01:11:25,550 --> 01:11:27,190 Dan kita akan melihat Anda pada hari Rabu. 1733 01:11:27,190 --> 01:11:33,611 [Tepuk Tangan]