1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID J Malan: Semua tepat, jadi ini adalah CS50. 3 00:00:13,060 --> 00:00:15,040 Dan ini jelas Jumat. 4 00:00:15,040 --> 00:00:16,850 Dan ini adalah akhir minggu satu. 5 00:00:16,850 --> 00:00:21,020 Jadi Anda mungkin ingat bahwa kita tinggalkan, Terakhir kali, dengan cliffhanger macam. 6 00:00:21,020 --> 00:00:25,020 Dimana kita mengekspos kebohongan ini, bahwa tidak ada peduli apa yang telah diajarkan tumbuh 7 00:00:25,020 --> 00:00:31,610 up, 1 dibagi dengan 10 tidak, di Bahkan, 0,1 atau 0,100 atau 0,10000. 8 00:00:31,610 --> 00:00:35,270 Bahkan, jika kita mengkompilasi ini Program, seperti yang kita lakukan kemarin, dengan, 9 00:00:35,270 --> 00:00:39,770 membuat ketidaktepatan, dan kemudian lakukan dot, garis miring, ketidaktepatan, 10 00:00:39,770 --> 00:00:43,600 kita belajar bahwa ini adalah apa yang 1 dibagi dengan 10 sebenarnya. 11 00:00:43,600 --> 00:00:46,140 Jadi itu tidak benar-benar cukup kasus. 12 00:00:46,140 --> 00:00:49,014 Tapi ini tidak sedikit di beberapa keterbatasan mendasar dari komputer. 13 00:00:49,014 --> 00:00:50,930 Dan memang, di antara hal yang kita akan melakukan 14 00:00:50,930 --> 00:00:55,130 hari ini adalah kita lihat mengapa ini memiliki terjadi, apa implikasi ini memiliki, 15 00:00:55,130 --> 00:00:58,430 bagaimana manusia telah gagal untuk memahami ini dalam beberapa sangat 16 00:00:58,430 --> 00:01:00,410 situations-- serius hasil yang 17 00:01:00,410 --> 00:01:03,141 telah cukup tragis dan expensive-- dan juga 18 00:01:03,141 --> 00:01:04,849 lihatlah bagaimana kita benar-benar dapat mempertahankan 19 00:01:04,849 --> 00:01:06,530 terhadap jenis-jenis keterbatasan. 20 00:01:06,530 --> 00:01:10,940 Jadi secara intuitif, mungkin, mengapa 1 dibagi dengan 10, 21 00:01:10,940 --> 00:01:15,480 menurut komputer saya di sini, bukan hanya 1/10, 0,10? 22 00:01:15,480 --> 00:01:15,980 Ya. 23 00:01:15,980 --> 00:01:16,530 Apa yang kamu pikirkan? 24 00:01:16,530 --> 00:01:17,860 >> AUDIENCE MEMBER: radix adalah berbeda? 25 00:01:17,860 --> 00:01:18,550 >> DAVID J Malan: The apa? 26 00:01:18,550 --> 00:01:19,730 Oh, radix yang berbeda? 27 00:01:19,730 --> 00:01:20,720 Jadi tidak cukup. 28 00:01:20,720 --> 00:01:23,200 Ini sebenarnya lebih mendasar untuk perangkat keras. 29 00:01:23,200 --> 00:01:23,980 Pikiran lain? 30 00:01:23,980 --> 00:01:24,584 Ya. 31 00:01:24,584 --> 00:01:26,750 AUDIENCE MEMBER: Mereka mewakili angka berbeda? 32 00:01:26,750 --> 00:01:27,880 DAVID J Malan: Jadi they-- kanan. 33 00:01:27,880 --> 00:01:29,338 Mereka mewakili nomor berbeda. 34 00:01:29,338 --> 00:01:30,700 Akurat, rupanya. 35 00:01:30,700 --> 00:01:33,190 Sehingga is-- Nah, berbeda dari apa? 36 00:01:33,190 --> 00:01:34,490 Atau dari siapa? 37 00:01:34,490 --> 00:01:35,050 Dari kami? 38 00:01:35,050 --> 00:01:35,966 AUDIENCE MEMBER: Ya. 39 00:01:35,966 --> 00:01:38,930 Mereka tidak menggunakan desimal sistem untuk [tidak terdengar]. 40 00:01:38,930 --> 00:01:39,680 DAVID J Malan: OK. 41 00:01:39,680 --> 00:01:41,560 Jadi dalam arti, mereka tidak menggunakan sistem desimal. 42 00:01:41,560 --> 00:01:43,720 Di bawah kap mesin, semuanya, memang, biner, 43 00:01:43,720 --> 00:01:45,510 dan itu terkait, pada kenyataannya. 44 00:01:45,510 --> 00:01:48,135 Tapi itu bahkan lebih sederhana penjelasan dari itu. 45 00:01:48,135 --> 00:01:48,635 Ya. 46 00:01:48,635 --> 00:01:49,970 >> AUDIENCE MEMBER: Mereka hanya memiliki begitu banyak bit. 47 00:01:49,970 --> 00:01:52,370 Mereka hanya dapat menyimpan hingga tertentu batas, seperti dengan desimal. 48 00:01:52,370 --> 00:01:52,780 >> DAVID J Malan: Ya. 49 00:01:52,780 --> 00:01:54,420 Ini adalah apa yang benar-benar mendapatkan itu. 50 00:01:54,420 --> 00:01:57,180 Ternyata komputer biasanya, akan selalu hanya 51 00:01:57,180 --> 00:01:59,690 menggunakan jumlah terbatas informasi untuk mewakili sesuatu. 52 00:01:59,690 --> 00:01:59,870 Benar? 53 00:01:59,870 --> 00:02:02,110 Setelah semua, kita hanya memiliki tetap jumlah ruang hard disk. 54 00:02:02,110 --> 00:02:04,210 Kami hanya memiliki jumlah tetap RAM, atau memori komputer. 55 00:02:04,210 --> 00:02:06,251 Dan jika Anda hanya memiliki jumlah tetap sesuatu, 56 00:02:06,251 --> 00:02:09,611 pasti Anda tidak bisa benar-benar menghitung hingga tak terbatas atau nomor yang Anda inginkan. 57 00:02:09,611 --> 00:02:11,610 Anda, jenis, harus memilih dan memilih apa yang rentang 58 00:02:11,610 --> 00:02:13,220 dari nilai Anda akan mendukung. 59 00:02:13,220 --> 00:02:18,100 >> Dan misalnya, satu atau dua minggu lalu, ketika kita berbicara tentang ASCII, 60 00:02:18,100 --> 00:02:21,610 dan kami berbicara sekitar 8 bit, atau byte, sehingga untuk berbicara, 61 00:02:21,610 --> 00:02:26,360 jumlah terbesar yang kami bisa mewakili dengan 8 bit adalah apa? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 Dan kita dapat mewakili 256 Total nilai tapi tidak jika kita menghabiskan salah satu dari mereka 64 00:02:31,850 --> 00:02:34,190 pada 0-- Nah, tapi jika kita menghabiskan satu dari mereka pada 0, 65 00:02:34,190 --> 00:02:36,830 maka jumlah terbesar adalah, tentu saja, 255. 66 00:02:36,830 --> 00:02:39,410 >> Jadi ternyata, bahwa ini adalah kasus juga, dalam konteks ini. 67 00:02:39,410 --> 00:02:42,350 Kami mulai berbicara, terakhir kali, tentang angka floating-point, yang 68 00:02:42,350 --> 00:02:44,640 berbeda dari bilangan bulat, di bahwa mereka memiliki titik desimal 69 00:02:44,640 --> 00:02:47,056 dan, mudah-mudahan, beberapa nomor setelah itu, tetapi mereka juga. 70 00:02:47,056 --> 00:02:51,730 Sebuah komputer hanya biasanya akan menggunakan 32 bit, mungkin 64 bit 71 00:02:51,730 --> 00:02:53,497 untuk mewakili nilai floating point. 72 00:02:53,497 --> 00:02:56,080 Jadi meskipun kita sudah dewasa belajar matematika dan mengetahui 73 00:02:56,080 --> 00:02:58,750 bahwa Anda benar-benar dapat memiliki jumlah tak terbatas nomor 74 00:02:58,750 --> 00:03:01,650 setelah titik desimal, tidak jika Anda memiliki memori yang terbatas. 75 00:03:01,650 --> 00:03:03,930 Anda, jenis, harus bulat, atau memilih dan memilih 76 00:03:03,930 --> 00:03:05,346 nomor Anda akan mewakili. 77 00:03:05,346 --> 00:03:08,710 Dan sehingga Anda bisa memikirkan, dalam arti, yang ini komputer terdekat 78 00:03:08,710 --> 00:03:14,050 pendekatan dengan nilai 1/10 yang itu bisa, hanya dengan 32 atau lebih bit. 79 00:03:14,050 --> 00:03:15,300 Dan itu bukan hanya 1/10. 80 00:03:15,300 --> 00:03:19,820 >> Misalnya, jika saya mengubahnya ke 1/3, yang kami pikir bahkan lebih sederhana. 81 00:03:19,820 --> 00:03:21,300 Jadi 1 dibagi dengan 3. 82 00:03:21,300 --> 00:03:22,355 Biarkan saya menyimpan file. 83 00:03:22,355 --> 00:03:24,680 Biarkan aku pergi ke depan dan mengkompilasi ulang itu. 84 00:03:24,680 --> 00:03:25,820 Dan biarkan aku berjalan kembali itu. 85 00:03:25,820 --> 00:03:30,000 Di sini juga, tampaknya, 1/3 tidak 0,3 dan kemudian jumlah tak terbatas 3 ini 86 00:03:30,000 --> 00:03:30,770 sesudahnya. 87 00:03:30,770 --> 00:03:32,540 Anda memiliki ketidaktepatan ini di akhir. 88 00:03:32,540 --> 00:03:35,544 Jadi kita manusia yang benar, dan apa Anda pelajari adalah, pada kenyataannya, yang benar, 89 00:03:35,544 --> 00:03:37,460 tapi kami menabrak terhadap beberapa keterbatasan. 90 00:03:37,460 --> 00:03:39,420 >> Dan apa yang saya pikir kami akan lakukan hari ini, mulai 91 00:03:39,420 --> 00:03:42,190 dengan melihat, terus terang, konsekuensi tragis ini 92 00:03:42,190 --> 00:03:45,490 kadang-kadang, ketika umat manusia tidak cukup menerapkan 93 00:03:45,490 --> 00:03:48,460 realitas ini dan keterbatasan ini. 94 00:03:48,460 --> 00:03:52,360 Dan kita akan melihat serangkaian sketsa dari History Channel yang mengambil 95 00:03:52,360 --> 00:03:53,950 melihat bagaimana hal-hal yang tidak beres. 96 00:03:53,950 --> 00:03:56,340 Ini tentang 8 menit, dan kami akan kembali setelah ini 97 00:03:56,340 --> 00:03:59,439 dan lihatlah persis apa lagi yang bisa salah. 98 00:03:59,439 --> 00:04:00,605 Jika kita bisa meredupkan lights-- 99 00:04:00,605 --> 00:04:02,350 >> [VIDEO PLAYBACK] 100 00:04:02,350 --> 00:04:06,310 >> -Computers, Kita semua datang untuk menerima masalah yang sering frustasi yang 101 00:04:06,310 --> 00:04:07,750 pergi bersama mereka. 102 00:04:07,750 --> 00:04:11,370 Bug, virus, dan perangkat lunak gangguan yang harga kecil 103 00:04:11,370 --> 00:04:13,230 membayar untuk kenyamanan. 104 00:04:13,230 --> 00:04:17,519 Namun dalam teknologi tinggi dan kecepatan tinggi aplikasi militer dan program luar angkasa, 105 00:04:17,519 --> 00:04:22,130 masalah terkecil bisa diperbesar menjadi bencana. 106 00:04:22,130 --> 00:04:27,750 Pada tanggal 4 Juni 1996, para ilmuwan disiapkan untuk meluncurkan berawak roket Ariane 5. 107 00:04:27,750 --> 00:04:29,890 Hal itu membawa ilmiah satelit dirancang 108 00:04:29,890 --> 00:04:33,030 untuk menetapkan secara tepat bagaimana Berinteraksi medan magnet bumi 109 00:04:33,030 --> 00:04:35,600 dengan angin surya. 110 00:04:35,600 --> 00:04:37,930 Roket ini dibangun untuk European Space Agency 111 00:04:37,930 --> 00:04:41,620 dan lepas landas dari fasilitas yang di pantai Guyana. 112 00:04:41,620 --> 00:04:44,924 >> -dan Sekitar 30 detik ke penerbangan, mereka pertama kali 113 00:04:44,924 --> 00:04:46,340 sesuatu yang tidak beres melihat. 114 00:04:46,340 --> 00:04:49,280 Bahwa nozel yang berputar dengan cara mereka benar-benar tidak seharusnya. 115 00:04:49,280 --> 00:04:53,042 Sekitar 40 detik ke penerbangan, jelas kendaraan dalam kesulitan, 116 00:04:53,042 --> 00:04:55,250 dan saat itulah mereka membuat keputusan untuk menghancurkannya. 117 00:04:55,250 --> 00:04:58,970 Sebuah Safety Officer Range dengan nyali yang luar biasa menekan tombol, 118 00:04:58,970 --> 00:05:03,940 meledakkan roket sebelum bisa menjadi bahaya untuk keselamatan publik. 119 00:05:03,940 --> 00:05:06,600 >> -Ini Adalah gadis yang pelayaran dari Ariane 5, 120 00:05:06,600 --> 00:05:09,270 dan kehancuran mengambil menempatkan karena cacat 121 00:05:09,270 --> 00:05:10,992 tertanam dalam perangkat lunak roket. 122 00:05:10,992 --> 00:05:12,700 -The Masalah pada Ariane adalah bahwa ada 123 00:05:12,700 --> 00:05:15,370 adalah nomor yang diperlukan 64 bit untuk mengekspresikan, 124 00:05:15,370 --> 00:05:18,150 dan dia ingin mengkonversi untuk nomor 16 bit. 125 00:05:18,150 --> 00:05:21,160 Mereka beranggapan bahwa jumlah tidak pernah akan menjadi sangat besar, 126 00:05:21,160 --> 00:05:25,020 bahwa sebagian besar dari mereka digit di jumlah 64 bit adalah 0 ini. 127 00:05:25,020 --> 00:05:26,310 Mereka salah. 128 00:05:26,310 --> 00:05:28,680 >> -The Ketidakmampuan satu program perangkat lunak untuk menerima 129 00:05:28,680 --> 00:05:32,820 jenis nomor yang dihasilkan oleh lain adalah akar dari kegagalan. 130 00:05:32,820 --> 00:05:37,190 Pengembangan perangkat lunak telah menjadi sangat mahal bagian dari teknologi baru. 131 00:05:37,190 --> 00:05:40,760 Ariane 4 roket telah sangat sukses, begitu banyak perangkat lunak 132 00:05:40,760 --> 00:05:43,990 diciptakan untuk itu juga digunakan pada Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -The Masalah dasar adalah bahwa Ariane 5 lebih cepat, lebih cepat dipercepat. 134 00:05:49,750 --> 00:05:53,000 Dan perangkat lunak belum menyumbang untuk itu. 135 00:05:53,000 --> 00:05:56,330 >> Kehancuran -The roket adalah bencana keuangan yang besar, 136 00:05:56,330 --> 00:05:59,670 semua karena kesalahan software menit. 137 00:05:59,670 --> 00:06:01,990 Tapi ini bukan yang pertama waktu masalah konversi data 138 00:06:01,990 --> 00:06:05,310 telah melanda teknologi roket modern. 139 00:06:05,310 --> 00:06:08,300 >> -Dalam 1991, dengan awal Perang Teluk Pertama, 140 00:06:08,300 --> 00:06:10,650 rudal Patriot mengalami serupa 141 00:06:10,650 --> 00:06:12,650 dari masalah nomor konversi. 142 00:06:12,650 --> 00:06:15,620 Akibatnya, 28 orang, 28 tentara Amerika 143 00:06:15,620 --> 00:06:18,440 tewas dan sekitar 100 lainnya luka-luka, 144 00:06:18,440 --> 00:06:21,900 ketika Patriot, yang seharusnya untuk melindungi terhadap Scud masuk, 145 00:06:21,900 --> 00:06:24,630 gagal untuk api rudal. 146 00:06:24,630 --> 00:06:29,440 >> -Ketika Irak menyerbu Kuwait dan Amerika diluncurkan Desert Storm pada awal tahun 1991, 147 00:06:29,440 --> 00:06:33,800 Baterai rudal Patriot dikerahkan untuk melindungi Arab Saudi dan Israel 148 00:06:33,800 --> 00:06:37,000 dari Irak Scud serangan rudal. 149 00:06:37,000 --> 00:06:40,610 Patriot adalah AS, jarak menengah permukaan-ke-udara sistem 150 00:06:40,610 --> 00:06:43,010 diproduksi oleh perusahaan Raytheon. 151 00:06:43,010 --> 00:06:49,080 >> -The Ukuran pencegat Patriot, itu sendiri, adalah tentang, kira-kira 20 kaki panjang. 152 00:06:49,080 --> 00:06:51,250 Dan beratnya sekitar 2000 pound. 153 00:06:51,250 --> 00:06:55,195 Dan itu membawa hulu ledak dari about-- Saya pikir itu sekitar 150 pound. 154 00:06:55,195 --> 00:06:59,500 Dan hulu ledak, itu sendiri, adalah ledak tinggi, 155 00:06:59,500 --> 00:07:02,570 yang memiliki fragmen sekitarnya. 156 00:07:02,570 --> 00:07:06,890 Casing hulu ledak adalah dirancang untuk bertindak seperti gotri. 157 00:07:06,890 --> 00:07:09,130 >> Rudal -The adalah dilakukan, 4 per kontainer, 158 00:07:09,130 --> 00:07:12,080 dan diangkut oleh semi-trailer. 159 00:07:12,080 --> 00:07:19,100 >> -The Sistem anti rudal Patriot kembali setidaknya 20 tahun sekarang. 160 00:07:19,100 --> 00:07:22,320 Ini pada awalnya dirancang sebagai rudal pertahanan udara 161 00:07:22,320 --> 00:07:24,180 untuk menembak jatuh pesawat musuh. 162 00:07:24,180 --> 00:07:27,860 Dalam Perang Teluk Pertama, ketika perang itu datang, 163 00:07:27,860 --> 00:07:32,745 Tentara ingin menggunakannya untuk menembak jatuh Scud, bukan pesawat terbang. 164 00:07:32,745 --> 00:07:36,150 Angkatan Irak tidak begitu banyak masalah, 165 00:07:36,150 --> 00:07:39,110 tapi Angkatan Darat khawatir tentang Scud. 166 00:07:39,110 --> 00:07:42,340 Dan sehingga mereka mencoba untuk upgrade Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Musuh rudal bepergian di mach lima 168 00:07:44,760 --> 00:07:47,250 itu akan cukup menantang. 169 00:07:47,250 --> 00:07:50,000 Tapi ketika Patriot dilarikan ke layanan, 170 00:07:50,000 --> 00:07:54,030 Tentara tidak menyadari sebuah Modifikasi Irak yang membuat 171 00:07:54,030 --> 00:07:56,840 Scud mereka hampir mustahil untuk memukul. 172 00:07:56,840 --> 00:08:01,020 >> -Apa Yang terjadi, adalah Scud yang yang datang, tidak stabil, 173 00:08:01,020 --> 00:08:02,310 mereka bergoyang-goyang. 174 00:08:02,310 --> 00:08:05,140 Alasan untuk ini, adalah Irak, dalam rangka 175 00:08:05,140 --> 00:08:09,450 untuk mendapatkan 600 kilometer dari berbagai rudal 300 kilometer, 176 00:08:09,450 --> 00:08:12,930 mengambil berat dari hulu ledak depan dan membuat hulu ledak ringan. 177 00:08:12,930 --> 00:08:17,710 Jadi sekarang, Patriot yang mencoba untuk datang di gerakan cepat, dan sebagian besar waktu, 178 00:08:17,710 --> 00:08:21,700 mayoritas dari waktu, itu hanya akan terbang dengan gerakan cepat itu. 179 00:08:21,700 --> 00:08:25,700 >> -Setelah Operator sistem Patriot menyadari Patriot terjawab target, 180 00:08:25,700 --> 00:08:29,790 mereka meledakkan hulu ledak Patriot, untuk menghindari kemungkinan korban jika 181 00:08:29,790 --> 00:08:32,380 diizinkan untuk jatuh ke tanah. 182 00:08:32,380 --> 00:08:36,340 >> -Itu Adalah apa yang kebanyakan orang melihat, mereka bola api besar di langit, 183 00:08:36,340 --> 00:08:41,289 dan disalahpahami sebagai penyadapan dari Scud hulu ledak. 184 00:08:41,289 --> 00:08:43,590 Meskipun di malam hari langit, Patriots muncul 185 00:08:43,590 --> 00:08:47,020 menjadi berhasil menghancurkan Scud, di Dhahran, 186 00:08:47,020 --> 00:08:49,730 mungkin ada kesalahan tentang kinerjanya. 187 00:08:49,730 --> 00:08:53,990 Ada, sistem radar Patriot kehilangan jejak dari Scud masuk, 188 00:08:53,990 --> 00:08:56,650 dan tidak pernah diluncurkan, karena cacat perangkat lunak. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Itu adalah Israel yang pertama kali menemukan bahwa semakin lama sistem itu pada, 191 00:09:04,100 --> 00:09:07,510 semakin besar perbedaan waktu menjadi, karena jam tertanam 192 00:09:07,510 --> 00:09:09,490 di komputer sistem. 193 00:09:09,490 --> 00:09:12,670 >> -Tentang 2 minggu sebelum tragedi di Dhahran, 194 00:09:12,670 --> 00:09:15,010 Israel dilaporkan Departemen Pertahanan, 195 00:09:15,010 --> 00:09:17,940 bahwa sistem itu kehilangan waktu, bahwa setelah sekitar 8 jam berjalan, 196 00:09:17,940 --> 00:09:21,410 mereka melihat bahwa sistem ini menjadi terasa kurang akurat. 197 00:09:21,410 --> 00:09:25,290 Departemen Pertahanan menanggapi dengan memberitahu semua baterai Patriot 198 00:09:25,290 --> 00:09:28,070 untuk tidak meninggalkan sistem pada untuk waktu yang lama. 199 00:09:28,070 --> 00:09:29,960 Mereka tidak pernah mengatakan apa waktu yang lama adalah. 200 00:09:29,960 --> 00:09:30,460 8 jam? 201 00:09:30,460 --> 00:09:30,960 10 jam? 202 00:09:30,960 --> 00:09:31,870 1000 jam? 203 00:09:31,870 --> 00:09:33,734 Tak ada yang tahu. 204 00:09:33,734 --> 00:09:35,650 -The Baterai Patriot ditempatkan di barak 205 00:09:35,650 --> 00:09:40,410 di Dhahran, internal dan cacat nya Jam, telah di lebih dari 100 jam 206 00:09:40,410 --> 00:09:43,041 pada malam 25 Februari. 207 00:09:43,041 --> 00:09:47,416 >> -Hal Dilacak waktu untuk akurasi dari sekitar 1/10 detik. 208 00:09:47,416 --> 00:09:49,290 Sekarang 1/10 detik adalah jumlah menarik 209 00:09:49,290 --> 00:09:52,700 karena tidak bisa dinyatakan dalam biner, persis. 210 00:09:52,700 --> 00:09:54,820 Yang berarti, tidak bisa dinyatakan, tepatnya, 211 00:09:54,820 --> 00:09:57,420 di setiap komputer digital modern. 212 00:09:57,420 --> 00:10:01,460 Sulit untuk percaya, tetapi menggunakan ini sebagai contoh. 213 00:10:01,460 --> 00:10:03,520 Mari kita mengambil nomor, 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 tidak bisa diungkapkan dalam desimal, persis. 215 00:10:07,110 --> 00:10:11,490 1/3 adalah 0,333 berlangsung tak terhingga. 216 00:10:11,490 --> 00:10:15,486 Tidak ada cara untuk melakukan itu, dengan akurasi mutlak, dalam desimal. 217 00:10:15,486 --> 00:10:18,360 Itulah jenis yang sama Masalah yang terjadi di Patriot. 218 00:10:18,360 --> 00:10:22,510 Semakin lama sistem berlari, yang buruk kesalahan waktu menjadi. 219 00:10:22,510 --> 00:10:28,420 >> -Setelah 100 jam operasi, kesalahan dalam waktu hanya sekitar 1/3 detik. 220 00:10:28,420 --> 00:10:31,830 Tapi dalam hal menargetkan rudal bepergian di mach 5, 221 00:10:31,830 --> 00:10:35,890 itu mengakibatkan pelacakan sebuah error lebih dari 600 meter. 222 00:10:35,890 --> 00:10:38,970 Ini akan menjadi kesalahan fatal untuk tentara di Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> -Apa Yang terjadi, adalah peluncuran Scud itu terdeteksi oleh satelit peringatan dini, 224 00:10:45,035 --> 00:10:48,930 dan mereka baru bahwa Scud itu datang ke arah umum mereka. 225 00:10:48,930 --> 00:10:51,170 Mereka tidak tahu di mana itu berasal. 226 00:10:51,170 --> 00:10:53,990 >> -itu Sekarang hingga radar komponen dari sistem Patriot, 227 00:10:53,990 --> 00:10:58,520 membela Dhahran, untuk mencari dan menjaga melacak rudal musuh masuk. 228 00:10:58,520 --> 00:10:59,690 >> Radar -The sangat cerdas. 229 00:10:59,690 --> 00:11:01,710 Ini akan benar-benar melacak posisi Scud 230 00:11:01,710 --> 00:11:04,040 dan kemudian memprediksi di mana mungkin akan, 231 00:11:04,040 --> 00:11:06,140 waktu berikutnya, radar mengirim pulsa keluar. 232 00:11:06,140 --> 00:11:07,660 Yang disebut gerbang jangkauan. 233 00:11:07,660 --> 00:11:11,870 >> -Lalu, Setelah Patriot memutuskan waktu yang cukup memiliki 234 00:11:11,870 --> 00:11:16,280 berlalu untuk kembali dan memeriksa berikutnya lokasi untuk objek yang terdeteksi ini, 235 00:11:16,280 --> 00:11:17,280 itu akan kembali. 236 00:11:17,280 --> 00:11:21,690 Jadi ketika kembali ke salah tempat, kemudian melihat ada objek 237 00:11:21,690 --> 00:11:25,230 dan memutuskan bahwa tidak ada objek, itu adalah deteksi palsu, 238 00:11:25,230 --> 00:11:26,650 dan tetes trek. 239 00:11:26,650 --> 00:11:29,690 Yang masuk Scud menghilang dari layar radar, 240 00:11:29,690 --> 00:11:32,670 dan detik kemudian, terhempas ke barak. 241 00:11:32,670 --> 00:11:38,100 The Scud menewaskan 28 dan yang terakhir satu dipecat selama Perang Teluk Pertama. 242 00:11:38,100 --> 00:11:43,460 Tragisnya, perangkat lunak diperbarui tiba di Dhahran hari berikutnya. 243 00:11:43,460 --> 00:11:46,150 Perangkat lunak cacat memiliki pernah tetap, penutupan 244 00:11:46,150 --> 00:11:48,940 salah satu bab dalam bermasalah sejarah rudal Patriot. 245 00:11:48,940 --> 00:11:50,220 >> [END PLAYBACK] 246 00:11:50,220 --> 00:11:54,340 >> DAVID J Malan: Jadi kita akan melihat pada beberapa keterbatasan yang sama hanya sedikit. 247 00:11:54,340 --> 00:11:58,470 Tapi pertama-tama, mari kita transisi ke beberapa FYI ini. 248 00:11:58,470 --> 00:12:01,575 Jadi satu-- akhir pekan ini, ada akan bagian super, 249 00:12:01,575 --> 00:12:04,200 yang dimaksudkan untuk menggantikan bagian yang dijadwalkan secara rutin, yang 250 00:12:04,200 --> 00:12:05,460 akan memulai seminggu maka. 251 00:12:05,460 --> 00:12:08,204 Lihatlah website CS50 ini untuk informasi lebih lanjut tentang mereka. 252 00:12:08,204 --> 00:12:11,120 Mereka juga akan difilmkan dan streaming hidup bagi mereka yang tidak hadir. 253 00:12:11,120 --> 00:12:12,980 Soal set 1 adalah pada situs saja yang sudah, 254 00:12:12,980 --> 00:12:15,105 dan kami akan melihat di bahwa hanya sedikit. 255 00:12:15,105 --> 00:12:18,350 Dan jam kantor juga, akan mengambil menempatkan Senin ini sampai Kamis. 256 00:12:18,350 --> 00:12:20,960 >> Jadi ini adalah yang paling kanonik Program kami melihat terakhir kali. 257 00:12:20,960 --> 00:12:23,590 Ini seperti yang paling sederhana Program Anda dapat menulis di C, 258 00:12:23,590 --> 00:12:25,250 dan bahkan itu sedikit berani mengklaim. 259 00:12:25,250 --> 00:12:25,750 Benar? 260 00:12:25,750 --> 00:12:28,070 Karena ada banyak tampak kompleksitas ini. 261 00:12:28,070 --> 00:12:30,445 Jadi mari kita cepat melihat apa beberapa elemen ini 262 00:12:30,445 --> 00:12:33,080 yang kemudian mencoba untuk memberikan model mental untuk bagaimana 263 00:12:33,080 --> 00:12:35,710 ini sederhana program bekerja, dan kemudian kami akan mulai 264 00:12:35,710 --> 00:12:38,050 melihat hal-hal yang lebih kompleks. 265 00:12:38,050 --> 00:12:41,280 Jadi baris ini di sini, disorot sekarang, warna kuning, apa yang kita katakan, terakhir kali, 266 00:12:41,280 --> 00:12:43,200 yang ini tidak untuk kita? 267 00:12:43,200 --> 00:12:45,220 Apa tujuan yang dilayaninya? 268 00:12:45,220 --> 00:12:46,984 Siapapun dari jauh kembali? 269 00:12:46,984 --> 00:12:47,483 Ya. 270 00:12:47,483 --> 00:12:48,649 >> AUDIENCE MEMBER: [tidak terdengar] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID J Malan: Baik. 273 00:12:51,704 --> 00:12:53,537 Sehingga memberikan Anda akses perintah, atau mari 274 00:12:53,537 --> 00:12:56,750 menyebutnya fungsi, bahwa seseorang lain menulis, yang menyatakan, 275 00:12:56,750 --> 00:12:58,350 sehingga untuk berbicara, dalam beberapa file lain. 276 00:12:58,350 --> 00:13:02,370 Jadi kita akan melihat apa file H adalah versus C file, akhirnya. 277 00:13:02,370 --> 00:13:04,710 Tapi untuk saat ini, hanya tahu printf itu, misalnya, 278 00:13:04,710 --> 00:13:08,370 adalah salah satu fungsi yang telah menyatakan dalam beberapa file lain, di suatu tempat 279 00:13:08,370 --> 00:13:12,930 lain pada hard drive awan yang memungkinkan kita untuk mengakses printf dan menggunakannya 280 00:13:12,930 --> 00:13:15,240 tanpa harus menemukan kembali bahwa roda diri kita sendiri. 281 00:13:15,240 --> 00:13:16,930 Sementara itu, utama. 282 00:13:16,930 --> 00:13:19,690 Apa analog utama, pekan lalu? 283 00:13:19,690 --> 00:13:20,190 Ya. 284 00:13:20,190 --> 00:13:21,460 >> AUDIENCE MEMBER: Hijau bendera diklik. 285 00:13:21,460 --> 00:13:21,740 >> DAVID J Malan: Ya. 286 00:13:21,740 --> 00:13:23,490 Scratch, saat bendera hijau diklik. 287 00:13:23,490 --> 00:13:25,560 Ini seperti potongan puzzle yang kicks hal off. 288 00:13:25,560 --> 00:13:28,306 Dan sama, melakukan dunia memutuskan beberapa tahun lalu bahwa dalam C, 289 00:13:28,306 --> 00:13:30,930 dan sekelompok bahasa lain, jika Anda ingin menulis sebuah program, 290 00:13:30,930 --> 00:13:33,410 Fungsi pertama Anda telah disebut, utama. 291 00:13:33,410 --> 00:13:34,641 Dan itu harus terlihat seperti ini. 292 00:13:34,641 --> 00:13:36,640 Tapi kami akan kembali, lain waktu, untuk apa, int, 293 00:13:36,640 --> 00:13:38,690 dan, batal, berarti dalam konteks itu. 294 00:13:38,690 --> 00:13:42,860 Untuk saat ini, kurung kurawal adalah jenis seperti potongan puzzle bentuk Scratch ini 295 00:13:42,860 --> 00:13:45,080 yang merangkum beberapa jumlah baris. 296 00:13:45,080 --> 00:13:47,070 Dan di antara di garis di sini, adalah salah satu ini di sini. 297 00:13:47,070 --> 00:13:51,610 printf adalah fungsi yang tujuannya di hidup adalah untuk mencetak string diformat. 298 00:13:51,610 --> 00:13:55,010 Dan oleh diformat, saya berarti Anda bisa pasang nilai placeholder, 299 00:13:55,010 --> 00:13:58,360 dan Anda dapat menentukan berapa banyak desimal poin, berapa banyak angka untuk mencetak 300 00:13:58,360 --> 00:14:00,040 setelah titik desimal dan sejenisnya. 301 00:14:00,040 --> 00:14:05,040 Dan printf, tentu saja, membutuhkan waktu satu atau lebih argumen atau parameter, 302 00:14:05,040 --> 00:14:06,770 atau dikenal, lebih sederhana, sebagai masukan. 303 00:14:06,770 --> 00:14:09,230 >> Jadi printf, seperti banyak fungsi, mengambil input. 304 00:14:09,230 --> 00:14:12,730 Dan masukan mereka dirangkul oleh dua kurung di sini. 305 00:14:12,730 --> 00:14:15,180 Dan dalam mereka adalah salah satu masukan. 306 00:14:15,180 --> 00:14:18,600 Ini string, seperti yang kita menyebutnya, yang hanya urutan karakter, 307 00:14:18,600 --> 00:14:22,310 seperti kata, atau frase, atau keseluruhan esai bahkan, di antara tanda kutip ganda. 308 00:14:22,310 --> 00:14:25,712 Dan itulah yang akan mempengaruhi perilaku printf karena, tentu saja, 309 00:14:25,712 --> 00:14:27,170 itu hanya fungsi cetak generik. 310 00:14:27,170 --> 00:14:29,600 Itu tidak akan tahu apa untuk mencetak, kecuali Anda kirim. 311 00:14:29,600 --> 00:14:31,000 Dan kemudian, beberapa hal-hal kecil. 312 00:14:31,000 --> 00:14:34,056 Apa yang kita katakan aneh ini urutan simbol adalah? 313 00:14:34,056 --> 00:14:34,556 Ya. 314 00:14:34,556 --> 00:14:35,410 >> AUDIENCE MEMBER: garis Baru. 315 00:14:35,410 --> 00:14:35,990 >> DAVID J Malan: garis Baru. 316 00:14:35,990 --> 00:14:39,340 Jadi ternyata, Anda tidak bisa hanya memukul, masuk, ketika Anda sedang menulis program. 317 00:14:39,340 --> 00:14:42,590 Umumnya, compiler akan mendapatkan agak bingung dengan apa yang Anda maksud. 318 00:14:42,590 --> 00:14:45,340 Sebaliknya, Anda harus benar-benar mengatakan, memberikan garis baru di sini. 319 00:14:45,340 --> 00:14:49,506 Dan / n adalah apa yang kita umumnya memanggil karakter melarikan diri. 320 00:14:49,506 --> 00:14:50,870 Jadi n, untuk baris baru. 321 00:14:50,870 --> 00:14:53,810 Dan compiler tahu bahwa ketika melihat / n, 322 00:14:53,810 --> 00:14:57,420 itu benar-benar harus mendorong komputer, akhirnya, atau printf, dalam hal ini, 323 00:14:57,420 --> 00:15:00,260 untuk mencetak sebuah baru yang sebenarnya line, seperti memukul, masukkan, 324 00:15:00,260 --> 00:15:01,480 tombol pada keyboard Anda. 325 00:15:01,480 --> 00:15:05,620 Dan terakhir, apa yang kita katakan ini bagian dari sintaks adalah untuk? 326 00:15:05,620 --> 00:15:06,591 Apa mewakili? 327 00:15:06,591 --> 00:15:07,090 Ya. 328 00:15:07,090 --> 00:15:07,490 >> AUDIENCE MEMBER: [tidak terdengar] 329 00:15:07,490 --> 00:15:08,660 >> DAVID J Malan: Ini hanya akhir baris. 330 00:15:08,660 --> 00:15:09,909 Ini akhir dari pernyataan itu. 331 00:15:09,909 --> 00:15:11,890 Dan menyadari bahwa kita tidak menempatkan mereka di mana-mana. 332 00:15:11,890 --> 00:15:13,900 Kita tentu tidak menempatkan mereka di ujung setiap baris. 333 00:15:13,900 --> 00:15:16,680 Misalnya, ada tidak ada pada Baris pertama, ada tidak ada pada baris 334 00:15:16,680 --> 00:15:18,680 dengan, utama, ada tidak ada yang setelah kurung kurawal, 335 00:15:18,680 --> 00:15:21,740 tetapi Anda akan mulai melihat dan mendapatkan akrab dengan mana itu disebut untuk. 336 00:15:21,740 --> 00:15:26,014 Dan itu hampir selalu setelah fungsi memanggil atau pernyataan, beberapa tindakan 337 00:15:26,014 --> 00:15:27,180 bahwa Anda benar-benar mengambil. 338 00:15:27,180 --> 00:15:29,520 >> Dan tahu sekarang, terutama jika di antara mereka kurang nyaman, 339 00:15:29,520 --> 00:15:32,540 ini adalah hal-hal yang bodoh bahwa Anda akan berakhir sengaja membenturkan 340 00:15:32,540 --> 00:15:33,873 kepala Anda ke dinding atas. 341 00:15:33,873 --> 00:15:36,107 Karena Anda akan logis percaya diri dalam beberapa masalah 342 00:15:36,107 --> 00:15:38,440 Anda telah diselesaikan untuk masalah set, dan sialan hanya 343 00:15:38,440 --> 00:15:40,187 tidak akan mengkompilasi atau bahkan berjalan. 344 00:15:40,187 --> 00:15:43,270 Dan begitu sering, awal, itu akan karena Anda melewatkan kurung, 345 00:15:43,270 --> 00:15:44,455 atau Anda melewatkan titik koma. 346 00:15:44,455 --> 00:15:46,547 Dan jadi hanya berhati-hati dari hal-hal seperti, 347 00:15:46,547 --> 00:15:49,380 dan mencoba untuk tidak frustrasi oleh mereka karena sangat cepat melakukan hal ini 348 00:15:49,380 --> 00:15:50,640 menjadi topi tua. 349 00:15:50,640 --> 00:15:53,910 Tapi itu sangat mudah untuk mendapatkan frustrasi sejak awal, sebagai hasilnya. 350 00:15:53,910 --> 00:15:57,020 >> Jadi sekarang, mari kita lihat bagaimana baris ini benar-benar bekerja 351 00:15:57,020 --> 00:15:59,170 dan kemudian melihat sedikit satu lebih rumit. 352 00:15:59,170 --> 00:16:02,017 Jadi kita memiliki lebih di sini, kemampuan untuk menggambar pada layar ini. 353 00:16:02,017 --> 00:16:04,100 Dan mari kita mengira bahwa ini layar komputer saya, 354 00:16:04,100 --> 00:16:08,589 tapi saya menulis, halo Program, dan saya belum diimplementasikan, printf. 355 00:16:08,589 --> 00:16:10,130 Orang lain telah dilaksanakan, printf. 356 00:16:10,130 --> 00:16:12,420 Yang ingin mengklaim telah dilaksanakan, printf? 357 00:16:12,420 --> 00:16:12,920 Jika kita dapat? 358 00:16:12,920 --> 00:16:13,830 Baiklah, siapa namamu? 359 00:16:13,830 --> 00:16:14,155 >> SISWA 1: [? Copal. ?] 360 00:16:14,155 --> 00:16:15,529 >> DAVID J Malan: Copal, datang ke atas. 361 00:16:15,529 --> 00:16:16,430 Ayo up. 362 00:16:16,430 --> 00:16:17,070 Baiklah. 363 00:16:17,070 --> 00:16:22,260 Jadi kita miliki, di sini, beberapa tag nama, karena kita akan membuat permainan sedikit ini. 364 00:16:22,260 --> 00:16:26,270 Dan kami akan menghubungi Anda, printf. 365 00:16:26,270 --> 00:16:30,170 Dan jika Anda ingin datang ke sini, apa yang baru saja ditarik pada layar, 366 00:16:30,170 --> 00:16:32,340 itu cukup sederhana, ada saya, ini. 367 00:16:32,340 --> 00:16:35,550 >> Baiklah, jadi, halo nama saya, printf, jika Anda ingin menempatkan bahwa pada. 368 00:16:35,550 --> 00:16:35,740 Baiklah. 369 00:16:35,740 --> 00:16:37,360 Dan jika Anda dapat pergi berdiri oleh layar komputer 370 00:16:37,360 --> 00:16:39,730 seolah-olah Anda adalah fungsi yang datang dengan sistem komputer ini. 371 00:16:39,730 --> 00:16:42,063 Dan tujuan Anda dalam hidup adalah untuk benar-benar mencetak sesuatu. 372 00:16:42,063 --> 00:16:44,560 Tapi banyak seperti program kami baru saja di layar, di sini, 373 00:16:44,560 --> 00:16:47,060 kita akan harus benar-benar memberikan beberapa masukan. 374 00:16:47,060 --> 00:16:51,810 >> Dan, jika saya masukan, di sini, adalah Rupanya, apa yang akan diteruskan ke printf, 375 00:16:51,810 --> 00:16:53,730 mari jenis mengejek itu seperti ini. 376 00:16:53,730 --> 00:16:58,720 Aku akan benar-benar menulis di selembar kertas, "halo, dunia," 377 00:16:58,720 --> 00:17:03,020 backslash N. Dan harus jelas, apa yang Saya baru saja ditarik pada kertas ini, 378 00:17:03,020 --> 00:17:04,020 terlihat seperti ini. 379 00:17:04,020 --> 00:17:08,730 Jadi ketika saya menjalankan program ini, dan ini garis kuning kode dijalankan, 380 00:17:08,730 --> 00:17:12,970 itu seolah-olah saya, program halo, saya menyerahkan beberapa masukan dari ke fungsi 381 00:17:12,970 --> 00:17:13,970 bahwa orang lain menulis. 382 00:17:13,970 --> 00:17:16,595 >> Dan jika Anda, dengan jari Anda, sebenarnya bisa, dengan jari Anda, 383 00:17:16,595 --> 00:17:21,520 menggambar pada layar apapun itu adalah Anda telah diserahkan, 384 00:17:21,520 --> 00:17:27,465 efeknya, akhirnya, adalah untuk melihat hal itu, di layar. 385 00:17:27,465 --> 00:17:29,140 Dan sudut kasus kecil di sini. 386 00:17:29,140 --> 00:17:31,540 Dan baik, kita tidak akan melihat , baris baru, pada saat ini. 387 00:17:31,540 --> 00:17:33,900 Ini akan menjadi salah untuk Anda secara eksplisit menggambar baris baru. 388 00:17:33,900 --> 00:17:36,810 Tetapi jika kita terus menulis kata-kata di layar, mereka akan berakhir di bawah itu. 389 00:17:36,810 --> 00:17:39,560 >> Jadi terima kasih banyak, tapi tetap di sini untuk hanya satu saat. 390 00:17:39,560 --> 00:17:42,860 Kita sekarang perlu satu lainnya relawan, jika kita bisa, 391 00:17:42,860 --> 00:17:46,830 itu akan perlu memainkan peran of-- Ini hanya orang-orang dalam orkestra 392 00:17:46,830 --> 00:17:47,355 sekarang. 393 00:17:47,355 --> 00:17:47,980 Bagaimana about-- OK. 394 00:17:47,980 --> 00:17:48,480 Disini. 395 00:17:48,480 --> 00:17:49,180 Ayo up. 396 00:17:49,180 --> 00:17:49,955 Siapa namamu? 397 00:17:49,955 --> 00:17:50,922 >> SISWA 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID J Malan: Maaf? 399 00:17:51,796 --> 00:17:52,990 SISWA 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 DAVID J Malan: Ethan, datang ke atas. 401 00:17:55,320 --> 00:17:55,820 Tidak? 402 00:17:55,820 --> 00:17:58,390 Apakah saya mendapatkan salah itu, bahkan setelah Anda mengatakan itu dua kali? 403 00:17:58,390 --> 00:17:58,890 Ayo up. 404 00:17:58,890 --> 00:18:00,030 Sulit untuk mendengar di sini. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 OKE. 407 00:18:05,740 --> 00:18:07,190 Dan aku minta maaf, siapa namamu? 408 00:18:07,190 --> 00:18:07,680 >> SISWA 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? DAVID J Malan: Ivay. ?] OKE. 410 00:18:08,790 --> 00:18:10,430 Untuk saat ini, jika Anda tidak pikiran, Anda GetString. 411 00:18:10,430 --> 00:18:11,013 >> SISWA 2: OK. 412 00:18:11,013 --> 00:18:11,797 Keren. 413 00:18:11,797 --> 00:18:14,630 DAVID J Malan: Jadi, jika Anda ingin untuk berdiri di sini untuk sesaat, 414 00:18:14,630 --> 00:18:17,100 mari kita lihat sedikit lebih program yang kompleks, yang 415 00:18:17,100 --> 00:18:18,670 kini memiliki tiga baris kode. 416 00:18:18,670 --> 00:18:24,080 Jadi kita memiliki, satu, sebutkan nama Anda menggunakan printf; dua, panggilan untuk GetString, 417 00:18:24,080 --> 00:18:28,060 diikuti dengan tugas untuk variabel disebut, string s, atau disebut s; 418 00:18:28,060 --> 00:18:31,260 dan kemudian panggilan lain untuk, printf, tapi kali ini dengan dua input. 419 00:18:31,260 --> 00:18:33,646 >> Jadi kita sudah melakukan negara Nama Anda, atau lebih tepatnya, kami telah 420 00:18:33,646 --> 00:18:34,770 sudah dilakukan panggilan printf. 421 00:18:34,770 --> 00:18:38,960 Jadi aku akan menulis, Sebutkan nama Anda. 422 00:18:38,960 --> 00:18:42,089 Dan, apa yang akan saya lulus, printf, hanya dalam beberapa saat, 423 00:18:42,089 --> 00:18:43,005 cukup sederhana, ini. 424 00:18:43,005 --> 00:18:47,760 Jadi jika Anda ingin pergi ke depan dan menarik ini di layar, itu masukan Anda sekarang. 425 00:18:47,760 --> 00:18:48,260 Baiklah. 426 00:18:48,260 --> 00:18:51,160 Dan lupa String, kita sekarang memiliki produk kami dari kode di sini. 427 00:18:51,160 --> 00:18:54,470 Jadi dalam, GetString, kita perlu untuk benar-benar memanggil, GetString. 428 00:18:54,470 --> 00:18:57,920 Jadi tujuan Anda dalam hidup adalah untuk hanya berjalan keluar ke orkestra, jika Anda bisa, 429 00:18:57,920 --> 00:18:58,980 dan mendapatkan nama seseorang. 430 00:18:58,980 --> 00:19:00,860 Tapi mari kita memberikan sesuatu untuk memakainya. 431 00:19:00,860 --> 00:19:02,908 Jika Anda ingin, pergi depan dan mendapatkan string, 432 00:19:02,908 --> 00:19:05,241 mendapatkan nama seseorang di bahwa selembar kertas, jika Anda bisa. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> Baiklah. 435 00:19:13,530 --> 00:19:15,250 Dan kita akan lihat, hanya dalam beberapa saat, yang namanya kita sudah. 436 00:19:15,250 --> 00:19:17,630 Sementara itu, apa yang akan saya telah siap, adalah bagian kosong 437 00:19:17,630 --> 00:19:21,340 kertas, di mana, aku akan untuk menyimpan nilai apapun yang 438 00:19:21,340 --> 00:19:25,752 adalah bahwa GetString adalah kembali kepada saya, Aku, menjadi variabel string disebut, s. 439 00:19:25,752 --> 00:19:26,252 Baiklah. 440 00:19:26,252 --> 00:19:27,293 Jadi apa yang Anda miliki di sini? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 Baiklah. 443 00:19:28,450 --> 00:19:30,910 Jadi kita memiliki nama Nik sini. 444 00:19:30,910 --> 00:19:33,750 Jadi ini adalah apa yang benar-benar telah dikembalikan 445 00:19:33,750 --> 00:19:35,810 bagi saya, sehingga untuk berbicara, dengan GetString. 446 00:19:35,810 --> 00:19:38,720 >> Saya, sekarang, saya akan mengeksekusi sisi kiri 447 00:19:38,720 --> 00:19:43,440 ekspresi itu, di mana saya hanya salin, untuk tujuan hari ini, Nik. 448 00:19:43,440 --> 00:19:46,470 Jadi sekarang, aku punya variabel disebut, s, menyimpan nama Nik. 449 00:19:46,470 --> 00:19:49,520 Aku sudah diserahkan kepada printf, argumen sebelumnya. 450 00:19:49,520 --> 00:19:52,800 Tapi di baris kami ketiga dan terakhir dari kode, saya benar-benar harus printf tangan 451 00:19:52,800 --> 00:19:58,500 sesuatu yang different-- sedikit "Halo,% s," backslash n. 452 00:19:58,500 --> 00:20:01,510 >> Dan baris terakhir aku akan untuk send-- hal terakhir aku 453 00:20:01,510 --> 00:20:03,060 akan menuliskan sekarang, adalah ini. 454 00:20:03,060 --> 00:20:06,310 Jadi dua baris kode, atau bukan baris terakhir kode, 455 00:20:06,310 --> 00:20:10,690 panggilan untuk dua inputs-- satu, ini, dan dua, ini. 456 00:20:10,690 --> 00:20:13,330 Jadi jika fungsi printf kami sekarang dapat mengambil ini sebagai masukan, 457 00:20:13,330 --> 00:20:16,000 biarkan aku membersihkan layar untuk Anda. 458 00:20:16,000 --> 00:20:17,250 Sebenarnya tidak ada, Anda dapat melanjutkan. 459 00:20:17,250 --> 00:20:19,333 Kami akan menyerahkannya, karena itu pada program yang sama. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Kita harus melihat, halo, Nik. 462 00:20:27,380 --> 00:20:27,880 Baiklah. 463 00:20:27,880 --> 00:20:29,670 Jadi ini adalah beberapa lingkaran untuk melompat melalui, hanya 464 00:20:29,670 --> 00:20:31,620 menulis, menyatakan Anda nama, dan, halo, Nik. 465 00:20:31,620 --> 00:20:37,210 Tapi ini ide sederhana pesan lewat, input dan output lewat penerima, 466 00:20:37,210 --> 00:20:40,430 adalah model kita akan memiliki tepat bahkan fungsi yang paling kompleks. 467 00:20:40,430 --> 00:20:41,804 Jadi terima kasih banyak untuk Anda berdua. 468 00:20:41,804 --> 00:20:43,730 Kami memiliki stres yang indah bola di sini untuk Anda. 469 00:20:43,730 --> 00:20:48,890 Dan terima kasih kepada GetString kami dan relawan printf sama. 470 00:20:48,890 --> 00:20:49,551 Terima kasih. 471 00:20:49,551 --> 00:20:50,050 Baiklah. 472 00:20:50,050 --> 00:20:50,966 Terima kasih untuk Anda berdua. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Jadi kita telah berbicara tentang sejauh ini, terutama tentang string. 475 00:21:00,430 --> 00:21:06,550 Dan ternyata C yang dapat benar-benar memahami tipe data beberapa yang berbeda. 476 00:21:06,550 --> 00:21:08,860 Bahkan, mari kita a melihat ini di sini. 477 00:21:08,860 --> 00:21:12,490 Jadi C, dan banyak bahasa, memahami hal-hal yang disebut karakter. 478 00:21:12,490 --> 00:21:16,852 Sebuah arang umumnya byte tunggal, atau delapan bit. 479 00:21:16,852 --> 00:21:19,810 Dan itu merupakan satu karakter, seperti huruf A, atau modal 480 00:21:19,810 --> 00:21:21,990 huruf A, atau huruf kecil A, atau tanda seru, 481 00:21:21,990 --> 00:21:25,440 atau karakter apapun yang Anda dapat mengetik pada keyboard Anda, dan kadang-kadang bahkan lebih. 482 00:21:25,440 --> 00:21:26,795 Kami juga kebetulan melihat mengapung. 483 00:21:26,795 --> 00:21:31,160 Sebuah float, umumnya, sebuah Nilai 32-bit, atau empat byte 484 00:21:31,160 --> 00:21:33,660 karena lagi, satu byte adalah delapan bit. 485 00:21:33,660 --> 00:21:36,675 >> Jadi pelampung adalah nilai floating point, sesuatu dengan titik desimal. 486 00:21:36,675 --> 00:21:38,550 Dan memang, itulah yang film ini berbicara 487 00:21:38,550 --> 00:21:42,240 ketika mereka berbicara tentang mengambang nilai titik, beberapa nomor tetap bit 488 00:21:42,240 --> 00:21:43,940 digunakan untuk mewakili bilangan real. 489 00:21:43,940 --> 00:21:45,740 Tapi ada juga hal-hal yang disebut ganda. 490 00:21:45,740 --> 00:21:47,860 Ini ada di Jawa, jika Anda telah mengambil APCS, 491 00:21:47,860 --> 00:21:51,540 dan ganda, sebagai nama untungnya menunjukkan, dua kali lebih besar sebagai pelampung. 492 00:21:51,540 --> 00:21:54,540 Ini masih bilangan real, itu hanya memiliki lebih banyak bit 493 00:21:54,540 --> 00:21:58,390 dengan yang pernah menjadi lebih tepat, atau untuk menyimpan nomor yang lebih besar. 494 00:21:58,390 --> 00:21:58,890 int mudah. 495 00:21:58,890 --> 00:22:00,181 Kami berbicara tentang itu terakhir kali. 496 00:22:00,181 --> 00:22:01,160 Ini hanya sebuah integer. 497 00:22:01,160 --> 00:22:03,980 Dan itu umumnya 32 bit, atau empat byte. 498 00:22:03,980 --> 00:22:07,850 >> Dan, jika Anda memiliki, mari kita lihat sekarang, 32 bits-- dan kami melakukan ini di minggu 0, 499 00:22:07,850 --> 00:22:10,820 pernah jadi briefly-- jika Anda memiliki 32 bit, apa yang terbesar 500 00:22:10,820 --> 00:22:13,580 nomor yang bisa mewakili sebagai integer? 501 00:22:13,580 --> 00:22:16,080 Berikan atau ambil? 502 00:22:16,080 --> 00:22:18,380 Ini seperti 4 miliar, dan itu hanya jika kita 503 00:22:18,380 --> 00:22:20,690 mewakili bilangan positif saja. 504 00:22:20,690 --> 00:22:23,930 Jika Anda memiliki 32 bit, dan Anda ingin mewakili angka negatif juga, 505 00:22:23,930 --> 00:22:27,100 kisaran Anda, pada dasarnya, negatif 2 miliar ke positif 2 miliar. 506 00:22:27,100 --> 00:22:29,250 Namun umumnya, kami akan mulai pada 0 pergi ke 4 miliar. 507 00:22:29,250 --> 00:22:32,400 >> Anda tidak perlu tahu persis, tapi kita bisa melihat ini, pada kenyataannya, jika saya hanya 508 00:22:32,400 --> 00:22:36,400 membuka kalkulator kecil, di sini. 509 00:22:36,400 --> 00:22:41,070 Aku bisa melakukan 2 32, dan itulah seberapa besar, 510 00:22:41,070 --> 00:22:43,190 berapa banyak nilai-nilai yang Anda bisa mewakili, dengan 32 bit. 511 00:22:43,190 --> 00:22:44,442 Dan itu kira-kira 4 miliar. 512 00:22:44,442 --> 00:22:46,900 Jadi kita akan terus melihat nomor yang di beberapa tempat yang berbeda. 513 00:22:46,900 --> 00:22:48,890 Tapi jika Anda perlu lagi angka dari itu, 514 00:22:48,890 --> 00:22:51,670 ternyata ada yang sesuatu yang disebut lama. 515 00:22:51,670 --> 00:22:54,005 Dan lama adalah umumnya 64 bit, yang 516 00:22:54,005 --> 00:22:56,380 berarti itu urutan besarnya bahkan lebih besar dari int. 517 00:22:56,380 --> 00:22:59,510 >> Jadi saya bahkan tidak bisa mengucapkan terbesar nomor yang dapat Anda mewakili, 518 00:22:59,510 --> 00:23:01,340 tapi itu nyata lebih besar. 519 00:23:01,340 --> 00:23:05,190 Sekarang sebagai samping, secara historis, jika int adalah 32 bit, 520 00:23:05,190 --> 00:23:12,780 dan lama adalah 64 bit, bagaimana besar adalah panjang, tidak lama? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Anda akan berpikir itu lebih lama dari int tapi mungkin kurang panjang dari panjang panjang, 523 00:23:20,330 --> 00:23:21,400 tapi itu benar-benar tergantung. 524 00:23:21,400 --> 00:23:23,400 >> Dan ternyata salah satu frustrasi juga, 525 00:23:23,400 --> 00:23:26,830 dengan menulis kode pada sistem tertentu, adalah bahwa tidak semua jenis data ini 526 00:23:26,830 --> 00:23:28,440 memiliki nilai pra-ditentukan. 527 00:23:28,440 --> 00:23:29,771 Kadang-kadang ini banyak bit. 528 00:23:29,771 --> 00:23:31,020 Kadang-kadang banyak bit. 529 00:23:31,020 --> 00:23:32,750 Jadi Anda benar-benar harus tahu, kadang-kadang, hardware apa 530 00:23:32,750 --> 00:23:34,083 Anda menjalankan perangkat lunak Anda. 531 00:23:34,083 --> 00:23:36,960 Untungnya, bahasa lain dan tipe data lain yang sekarang ada, 532 00:23:36,960 --> 00:23:38,400 memungkinkan Anda untuk lebih tepatnya. 533 00:23:38,400 --> 00:23:41,220 Nah, kami melihat tali, dan kami melihat bool, juga, 534 00:23:41,220 --> 00:23:43,960 tapi ternyata mereka datang hanya dengan perpustakaan CS50. 535 00:23:43,960 --> 00:23:46,240 Jadi mereka tidak dibangun ke C. Mereka sebaliknya, 536 00:23:46,240 --> 00:23:49,340 datang dalam file disebut CS50.h, bahwa kita akan akhirnya 537 00:23:49,340 --> 00:23:51,831 mengupas lapisan-lapisan dari. 538 00:23:51,831 --> 00:23:53,830 Tapi untuk saat ini, mereka hanya jenis data tambahan. 539 00:23:53,830 --> 00:23:57,060 Sebuah bool adalah benar atau salah, dan string adalah rangkaian karakter, 540 00:23:57,060 --> 00:23:57,970 seperti sebuah kata. 541 00:23:57,970 --> 00:24:01,690 Sekarang printf, kita lihat, memiliki penampung,% s adalah salah satu. 542 00:24:01,690 --> 00:24:05,430 Dan Anda mungkin bisa, sekarang, menyimpulkan dari contoh-contoh lain, bagaimana 543 00:24:05,430 --> 00:24:07,720 Anda bisa memiliki placeholder untuk jenis data yang berbeda. 544 00:24:07,720 --> 00:24:11,150 Misalnya, mengambil menebak, jika Anda ingin mencetak satu char menggunakan 545 00:24:11,150 --> 00:24:15,270 printf, placeholder mungkin% c. 546 00:24:15,270 --> 00:24:19,650 Dan jika Anda ingin mencetak sebuah bilangan bulat dengan placeholder,% i. 547 00:24:19,650 --> 00:24:25,150 % lld adalah nilai desimal lama, tapi lama, sehingga peta itu. 548 00:24:25,150 --> 00:24:28,640 Dan kemudian% f untuk mengambang nilai titik atau untuk ganda, 549 00:24:28,640 --> 00:24:31,270 jadi kadang-kadang mereka digunakan kembali dalam konteks yang berbeda. 550 00:24:31,270 --> 00:24:33,350 Jadi kita akan melihat dan menggunakan beberapa dari mereka dari waktu ke waktu. 551 00:24:33,350 --> 00:24:36,420 Dan printf dan fungsi lainnya juga escape sequence dukungan orang lain, 552 00:24:36,420 --> 00:24:38,080 dan kadang-kadang, ini diperlukan. 553 00:24:38,080 --> 00:24:39,770 Jadi backslash n adalah baris baru. 554 00:24:39,770 --> 00:24:42,886 Backslash t, apakah ada ingin mengambil bacokan? 555 00:24:42,886 --> 00:24:43,760 AUDIENCE MEMBER: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID J Malan: Tab. 557 00:24:44,551 --> 00:24:46,810 Jadi, jika Anda benar-benar ingin untuk mencetak tab, tidak 558 00:24:46,810 --> 00:24:49,940 tetap jumlah ruang tapi sebenarnya karakter tab, Anda tidak memukul Anda, 559 00:24:49,940 --> 00:24:53,490 tab, tombol pada keyboard, umumnya, Anda benar-benar melakukan backslash t. 560 00:24:53,490 --> 00:24:57,750 Backslash kutip ganda, mengapa aku pernah ingin itu? 561 00:24:57,750 --> 00:24:58,250 Benar? 562 00:24:58,250 --> 00:25:00,417 Mengapa saya tidak dapat hanya mengetik kutipan ganda pada keyboard? 563 00:25:00,417 --> 00:25:02,124 AUDIENCE MEMBER: Karena, jika tidak, itu 564 00:25:02,124 --> 00:25:04,830 akan berpikir itu akhirnya dari seperti cetak Anda [? teks. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID J Malan: Tepat. 566 00:25:05,420 --> 00:25:07,211 Ingat, dengan kami contoh printf, ketika kita 567 00:25:07,211 --> 00:25:10,075 melewati ke printf di input, di sebelah kiri dari string masukan yang 568 00:25:10,075 --> 00:25:12,950 dan di sebelah kanan input yang semi, tentu saja, adalah kutipan ganda. 569 00:25:12,950 --> 00:25:16,270 Jika masukan Anda sendiri memiliki ganda kutipan di tengah-tengah itu, 570 00:25:16,270 --> 00:25:18,920 komputer mungkin berpotensi bingung, untuk, 571 00:25:18,920 --> 00:25:20,760 melakukan kutipan ganda ini milik di tengah? 572 00:25:20,760 --> 00:25:22,150 Apakah itu milik dengan yang kiri? 573 00:25:22,150 --> 00:25:23,566 Apakah itu milik dengan orang yang tepat? 574 00:25:23,566 --> 00:25:26,780 Dan, jika Anda ingin membuat super jelas, Anda backslash kutip ganda, 575 00:25:26,780 --> 00:25:30,480 sehingga itu melarikan diri, sehingga untuk berbicara, dan itu tidak digabungkan untuk sesuatu yang lain. 576 00:25:30,480 --> 00:25:34,400 Dan ada beberapa orang lain di sini, r backslash, tanda kutip tunggal, 0, 577 00:25:34,400 --> 00:25:36,510 bahwa kita dapat melihat dari waktu ke waktu, juga. 578 00:25:36,510 --> 00:25:37,760 Dan sekarang, bagaimana dengan fungsi? 579 00:25:37,760 --> 00:25:41,630 >> Jadi tindakan yang dapat kita ambil sejauh ini dalam bahasa ini, C, baik, kita lihat, 580 00:25:41,630 --> 00:25:44,320 printf, tentu saja, dan semua yang lain pada layar, 581 00:25:44,320 --> 00:25:47,140 di sini, bahwa kita akan menggunakan untuk Tentu saja ini beberapa minggu pertama saja, 582 00:25:47,140 --> 00:25:48,485 datang ketika perpustakaan CS50. 583 00:25:48,485 --> 00:25:51,850 Dan mereka membuat lebih mudah, di C, untuk benar-benar mendapatkan input pengguna. 584 00:25:51,850 --> 00:25:54,200 Ternyata di C, dan terus terang dalam beberapa bahasa, 585 00:25:54,200 --> 00:25:57,450 itu sakit nyata di leher untuk melakukan sesuatu yang sederhana, seperti yang cepat pengguna 586 00:25:57,450 --> 00:26:01,310 untuk keyboard, untuk nya masukan. 587 00:26:01,310 --> 00:26:03,240 Dan fungsi-fungsi ini memudahkan. 588 00:26:03,240 --> 00:26:05,472 >> Dan juga memiliki kesalahan memeriksa seluruh, 589 00:26:05,472 --> 00:26:07,180 sehingga, ketika Anda ingat pada hari Rabu, kami 590 00:26:07,180 --> 00:26:09,740 melihat, coba lagi, peringatan, ketika saya tidak bekerja sama, 591 00:26:09,740 --> 00:26:11,700 dan saya mengetik kata, bukan angka? 592 00:26:11,700 --> 00:26:15,402 Kami telah melakukan angkat berat awal untuk memastikan pengguna bekerja sama. 593 00:26:15,402 --> 00:26:17,860 Tapi ini hanya pelatihan roda yang kita akhirnya akan, 594 00:26:17,860 --> 00:26:19,640 dan cepat, lepas landas. 595 00:26:19,640 --> 00:26:22,630 >> Jadi untuk rekap, maka, mari kita lihat, 596 00:26:22,630 --> 00:26:26,620 seperti yang kita lakukan dengan Scratch, di beberapa konstruksi kanonik di C. 597 00:26:26,620 --> 00:26:28,580 Hal ini dimaksudkan untuk, semacam dari, menjadi tur angin puyuh, 598 00:26:28,580 --> 00:26:30,990 hanya sehingga Anda memiliki referensi dan bahwa Anda telah melihat hal-hal pada awalnya. 599 00:26:30,990 --> 00:26:34,100 Tapi kemudian kita akan melihat coding yang sebenarnya menggunakan beberapa blok bangunan tersebut. 600 00:26:34,100 --> 00:26:36,710 Begitu banyak seperti di Scratch, ketika kita telah pernyataan seperti, 601 00:26:36,710 --> 00:26:41,570 katakan atau, tunggu, di C, kita memiliki fungsi juga, seperti printf. 602 00:26:41,570 --> 00:26:45,350 >> Jika kita ingin mengungkapkan kondisi di C, itu sama, semangat, 603 00:26:45,350 --> 00:26:47,840 itu potongan puzzle yang tampak seperti ini di Scratch. 604 00:26:47,840 --> 00:26:49,850 Tapi sebaliknya, kita harfiah hanya menulis, jika. 605 00:26:49,850 --> 00:26:51,830 Dan kemudian, dalam tanda kurung, kami menempatkan kondisi, 606 00:26:51,830 --> 00:26:54,807 dimana kondisi itulah yang kita akan menelepon, lagi, ekspresi boolean. 607 00:26:54,807 --> 00:26:56,390 Dan lagi, ini adalah semacam pseudo. 608 00:26:56,390 --> 00:26:58,830 Dan, pada kenyataannya, // adalah komentar. 609 00:26:58,830 --> 00:27:00,550 Itu hanya kata-kata bahasa Inggris untuk diriku sendiri. 610 00:27:00,550 --> 00:27:03,000 Tapi ini adalah umum Struktur dari, jika, kondisi. 611 00:27:03,000 --> 00:27:05,220 Tapi kita akan melihat beton contoh hanya dalam beberapa saat. 612 00:27:05,220 --> 00:27:07,960 >> Jika Anda ingin memiliki dua arah pertigaan jalan, 613 00:27:07,960 --> 00:27:11,740 seperti yang kita lakukan dengan relawan kami di Rabu, Anda dapat memiliki, lain jika. 614 00:27:11,740 --> 00:27:16,020 Dan jika Anda ingin memiliki ketiga dan Kondisi akhir, atau situasi default, 615 00:27:16,020 --> 00:27:19,006 Anda dapat memiliki hanya sebuah blok lain, ada. 616 00:27:19,006 --> 00:27:21,880 Dan sama, dengan ekspresi boolean, Anda bisa, dan, mereka bersama-sama. 617 00:27:21,880 --> 00:27:24,296 Dan kita melihat pada hari Rabu, yang itu bukan ampersand tunggal, 618 00:27:24,296 --> 00:27:28,220 itu dua, untuk alasan-tingkat yang lebih rendah yang kita akhirnya akan melihat dan bermain dengan. 619 00:27:28,220 --> 00:27:30,410 Hal-hal atau-ing bersama adalah 2 vertikal bar. 620 00:27:30,410 --> 00:27:32,240 Pada keyboard AS, ini umumnya kunci 621 00:27:32,240 --> 00:27:35,730 dengan tombol Shift di atas Anda Enter atau tombol Kembali. 622 00:27:35,730 --> 00:27:38,620 >> Lalu ada hal-hal yang kita akan menggunakan mungkin sekali atau dua kali. 623 00:27:38,620 --> 00:27:42,570 Mereka secara fungsional setara dengan apa yang dapat Anda lakukan dengan, jika, lain jika, 624 00:27:42,570 --> 00:27:44,950 lain jika yang lain, membangun, tapi mereka disebut switch. 625 00:27:44,950 --> 00:27:48,020 Mereka terlihat sangat berbeda, tapi kami akan melihat di beberapa kode distribusi kami, 626 00:27:48,020 --> 00:27:51,890 untuk masalah set masa depan, kemungkinan besar, yang kadang-kadang hanya cantik 627 00:27:51,890 --> 00:27:54,060 cara mengungkapkan keseluruhan sekelompok kondisi, 628 00:27:54,060 --> 00:27:57,590 tanpa banyak kurung kurawal dan banyak kurung dan lekukan. 629 00:27:57,590 --> 00:28:01,910 Tapi mereka memberi kita tidak lebih kekuatan dari yang kita sudah. 630 00:28:01,910 --> 00:28:02,550 Dan sekarang loop. 631 00:28:02,550 --> 00:28:05,020 Dan yang satu ini, kita akan melihat di sedikit lebih lambat. 632 00:28:05,020 --> 00:28:08,470 Tapi kemudian, kita akan mulai menggunakan ini, terutama bagi mereka yang sudah akrab. 633 00:28:08,470 --> 00:28:13,830 Ini adalah cara kanonik, jika sangat cara misterius, untuk menulis loop di C. 634 00:28:13,830 --> 00:28:15,896 >> Sekarang loop di Scratch adalah cukup sederhana. 635 00:28:15,896 --> 00:28:17,020 Anda memiliki, selamanya, blok. 636 00:28:17,020 --> 00:28:19,760 Anda memiliki, ulangi, blok dengan hanya nomor Anda harus mengetikkan. 637 00:28:19,760 --> 00:28:22,220 Dan dengan, untuk loop, Anda dapat menerapkan kedua ide-ide, 638 00:28:22,220 --> 00:28:23,595 tapi itu sedikit lebih teknis. 639 00:28:23,595 --> 00:28:25,994 Tapi terus terang, itu juga relatif sederhana. 640 00:28:25,994 --> 00:28:28,160 Setelah Anda tahu urutan operasi, Anda benar-benar 641 00:28:28,160 --> 00:28:30,910 hanya akan pasang di nilai dan memberitahu komputer apa yang harus dilakukan. 642 00:28:30,910 --> 00:28:32,800 Jadi, inilah contoh. 643 00:28:32,800 --> 00:28:38,040 Ini adalah lingkaran itu, cukup sederhana, menghitung dari satu nomor up 644 00:28:38,040 --> 00:28:40,187 melalui lain. 645 00:28:40,187 --> 00:28:42,020 Dan hanya dengan melirik itu, bahkan jika Anda memiliki 646 00:28:42,020 --> 00:28:44,660 pengalaman sebelumnya dengan bahasa ini, jumlah yang 647 00:28:44,660 --> 00:28:46,920 apakah itu mungkin mulai menghitung di? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 Dan aku menebak itu karena Anda melihat bahwa ada sebuah int dan i, 650 00:28:50,240 --> 00:28:51,073 yang merupakan variabel. 651 00:28:51,073 --> 00:28:52,390 Ini diinisialisasi ke 0. 652 00:28:52,390 --> 00:28:55,670 >> Dan kemudian, sepertinya kita melewati printf nilai. 653 00:28:55,670 --> 00:28:58,000 Dan, pada kenyataannya, saya membuat kesalahan ketik kecil di sini. 654 00:28:58,000 --> 00:28:59,850 Tapi itu mudah diperbaiki. 655 00:28:59,850 --> 00:29:02,390 Biarkan aku menambahkan, saya di sini. 656 00:29:02,390 --> 00:29:06,150 Kami sekarang memiliki printf makhluk berlalu bahwa nilai placeholder. 657 00:29:06,150 --> 00:29:08,299 Dan apa yang akan menghitung melalui? 658 00:29:08,299 --> 00:29:08,840 AUDIENCE: 50. 659 00:29:08,840 --> 00:29:09,340 50. 660 00:29:09,340 --> 00:29:10,160 49. 661 00:29:10,160 --> 00:29:10,910 DAVID J Malan: 49. 662 00:29:10,910 --> 00:29:13,340 Jadi 50, pada pandangan pertama, tampaknya benar. 663 00:29:13,340 --> 00:29:16,990 Tapi, ternyata, akan menjadi kondisi kita bahwa kita tetap memeriksa. 664 00:29:16,990 --> 00:29:21,740 Dan kita akan berhenti setelah i tidak lagi kurang dari 50. 665 00:29:21,740 --> 00:29:24,920 Jadi lingkaran ini, sebaliknya, harus mengeksekusi, asalkan saya kurang dari 50. 666 00:29:24,920 --> 00:29:28,891 Tapi segera setelah itu menjadi 50, atau 51, atau lebih buruk, harus berhenti secara otomatis. 667 00:29:28,891 --> 00:29:29,390 Baiklah. 668 00:29:29,390 --> 00:29:31,200 >> Jadi apa yang sebenarnya terjadi di sini? 669 00:29:31,200 --> 00:29:33,160 Jadi ini adalah urutan operasi untuk loop. 670 00:29:33,160 --> 00:29:35,440 Satu, Anda memiliki disebut inisialisasi. 671 00:29:35,440 --> 00:29:38,264 Disorot potongan kuning ini kode dijalankan pertama, 672 00:29:38,264 --> 00:29:40,930 dan memiliki efek yang, per Rabu, Anda mungkin bayangkan. 673 00:29:40,930 --> 00:29:45,500 Ini menciptakan sebuah variabel yang disebut i dan toko di variabel yang nilai 0. 674 00:29:45,500 --> 00:29:47,560 Jadi saya adalah 0 pada titik ini dalam cerita. 675 00:29:47,560 --> 00:29:49,680 >> Hal berikutnya yang terjadi dalam konstruksi ini, 676 00:29:49,680 --> 00:29:51,540 adalah bahwa kondisi akan diperiksa. 677 00:29:51,540 --> 00:29:54,325 Jadi saya cek langsung, adalah saya kurang dari 50? 678 00:29:54,325 --> 00:29:57,700 Dan tentu saja, jawabannya untuk saat ini, pasti, ya. 679 00:29:57,700 --> 00:30:00,710 Ya, karena saya adalah 0, dan yang pasti kurang dari 50. 680 00:30:00,710 --> 00:30:03,866 Lalu apa yang terjadi, adalah bahwa ini baris kode dijalankan. 681 00:30:03,866 --> 00:30:06,740 Dan pada kenyataannya, jika ada beberapa baris kode pada mereka kurung kurawal, 682 00:30:06,740 --> 00:30:09,020 mereka semua dijalankan satu demi satu. 683 00:30:09,020 --> 00:30:11,450 >> Dan dalam efek sini, Rupanya, untuk mencetak 684 00:30:11,450 --> 00:30:15,365 jumlah i, yang akan menjadi 0, kemudian 1, kemudian 2. 685 00:30:15,365 --> 00:30:15,865 Tapi kenapa? 686 00:30:15,865 --> 00:30:17,410 Mengapa itu bisa bertambah? 687 00:30:17,410 --> 00:30:20,680 Nah, hal keempat yang yang terjadi adalah bahwa sintaks ini 688 00:30:20,680 --> 00:30:22,610 dijalankan, setelah titik koma. 689 00:30:22,610 --> 00:30:27,506 i ++ adalah cara singkat untuk mengatakan; mengambil nilai i, dan tambahkan 1 untuk itu; 690 00:30:27,506 --> 00:30:30,380 dan kemudian pada waktu berikutnya, tambahkan 1 untuk itu; dan waktu berikutnya, 691 00:30:30,380 --> 00:30:31,330 tambahkan 1 untuk itu. 692 00:30:31,330 --> 00:30:33,640 >> Jadi jika kita terus, apa yang akan terjadi 693 00:30:33,640 --> 00:30:35,890 selanjutnya saya tidak akan menginisialisasi saya lagi. 694 00:30:35,890 --> 00:30:38,290 Jika saya terus melakukan inisialisasi i ke 0, contoh ini 695 00:30:38,290 --> 00:30:41,110 tidak akan pernah berakhir karena saya akan terjebak pada 0. 696 00:30:41,110 --> 00:30:43,870 Tapi apa yang akan terjadi adalah bahwa kondisi akan diperiksa, 697 00:30:43,870 --> 00:30:54,280 baris kode akan dijalankan, i akan bertambah, 698 00:30:54,280 --> 00:30:56,970 Kondisi akan diperiksa, Kode akan dijalankan. 699 00:30:56,970 --> 00:30:59,790 Dan itu terus bersepeda lagi, dan lagi, dan lagi, 700 00:30:59,790 --> 00:31:03,340 sampai saya ++ menginduksi nilai 50. 701 00:31:03,340 --> 00:31:05,870 >> Kondisi ini kemudian mengatakan, adalah 50 kurang dari 50? 702 00:31:05,870 --> 00:31:09,360 Jawabannya, tentu saja, tidak ada, dan sehingga seluruh kode berhenti mengeksekusi. 703 00:31:09,360 --> 00:31:13,020 Dan jika Anda memiliki lebih kode pada layar bawah, itulah apa yang terjadi selanjutnya. 704 00:31:13,020 --> 00:31:17,530 Itu muncul dari ini kurung kurawal dan terus mencetak lagi setelah itu. 705 00:31:17,530 --> 00:31:20,470 >> Jadi lelucon sekarang, dari Foxtrot, yang Anda mungkin akan sekarang mengerti. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 Itu selalu lucu. 708 00:31:31,560 --> 00:31:34,110 Ini seperti terkekeh jenis meresap, 709 00:31:34,110 --> 00:31:38,370 dan kemudian Anda sadar bahwa Anda tidak harus menjadi menertawakan humor seperti ini. 710 00:31:38,370 --> 00:31:41,160 Tapi ada beberapa takeaway di sini, pedagogis, juga. 711 00:31:41,160 --> 00:31:43,577 Jadi ternyata bahwa aku hilang sepotong sintaks, 712 00:31:43,577 --> 00:31:45,410 atau Foxtrot yang hilang sepotong sintaks sini. 713 00:31:45,410 --> 00:31:48,076 Apa yang hilang, bahwa kami sudah di setiap contoh lainnya, sejauh ini? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Kembali, ada, sehingga itu sesuatu yang lain, 716 00:31:53,390 --> 00:31:54,440 bahwa kita akan kembali ke sebelum lama. 717 00:31:54,440 --> 00:31:55,398 Apa yang hilang, meskipun? 718 00:31:55,398 --> 00:31:55,908 Ya. 719 00:31:55,908 --> 00:31:58,150 >> AUDIENCE MEMBER: The inisialisasi [tidak terdengar]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID J Malan: OK. 721 00:31:58,470 --> 00:31:58,980 Jadi ya. 722 00:31:58,980 --> 00:32:03,210 Jadi sebenarnya, ini is-- Nah, dan jumlah diinisialisasi 723 00:32:03,210 --> 00:32:05,470 di atas, atau lebih tepatnya, dinyatakan di atas. 724 00:32:05,470 --> 00:32:06,960 Jadi ini adalah cara lain untuk melakukannya. 725 00:32:06,960 --> 00:32:08,685 Tapi tidak dalam satu garis itu berlaku sekalipun. 726 00:32:08,685 --> 00:32:09,310 Bagaimana di sini? 727 00:32:09,310 --> 00:32:10,196 >> AUDIENCE MEMBER: Apakah kurung kurawal? 728 00:32:10,196 --> 00:32:10,640 >> DAVID J Malan: Ya. 729 00:32:10,640 --> 00:32:12,080 Jadi kurung kurawal hilang. 730 00:32:12,080 --> 00:32:15,495 Tapi kode ini, maksudku, untuk kredit mereka, sebenarnya, sintaksis yang valid. 731 00:32:15,495 --> 00:32:17,610 Ternyata, Anda tidak perlu kurung kurawal 732 00:32:17,610 --> 00:32:21,691 jika Anda hanya memiliki satu baris kode yang Anda ingin mengeksekusi dalam loop. 733 00:32:21,691 --> 00:32:24,190 Sekarang kita selalu, di kelas dan di semua kode distribusi kami, 734 00:32:24,190 --> 00:32:26,730 termasuk kurung kurawal lagi pula, hanya demi kejelasan. 735 00:32:26,730 --> 00:32:29,010 Tapi menyadari bahwa dalam buku teks dan contoh online, 736 00:32:29,010 --> 00:32:31,300 Anda mungkin sangat baik melihat keriting kawat gigi hilang kadang-kadang. 737 00:32:31,300 --> 00:32:34,850 Dan itu OK, jika apa yang Anda telah menjorok dan dimaksudkan 738 00:32:34,850 --> 00:32:38,650 hanya satu baris kode, dan tidak beberapa baris kode, berpotensi. 739 00:32:38,650 --> 00:32:39,150 Baiklah. 740 00:32:39,150 --> 00:32:44,500 Jadi terkait dengan isu ketidaktepatan, adalah masalah overflow, 741 00:32:44,500 --> 00:32:48,560 dalam arti bahwa, sama, jangan bilangan bulat memiliki batas kepada mereka 742 00:32:48,560 --> 00:32:49,970 seperti nilai floating point? 743 00:32:49,970 --> 00:32:53,120 Dalam dunia floating point nilai-nilai, kita hanya bisa begitu tepat, 744 00:32:53,120 --> 00:32:55,710 setelah itu, kadang-kadang hal-hal buruk bisa terjadi, 745 00:32:55,710 --> 00:32:57,760 dan program kami dapat buggy dan kesalahan. 746 00:32:57,760 --> 00:33:00,050 Sekarang bahkan dengan bilangan bulat, Anda dapat mengalami masalah. 747 00:33:00,050 --> 00:33:03,820 Sekarang integer tidak memiliki titik desimal atau angka setelah. 748 00:33:03,820 --> 00:33:07,130 Itu hanya sejumlah alami, biasanya. 749 00:33:07,130 --> 00:33:09,430 Jadi apa yang bisa salah dengan int? 750 00:33:09,430 --> 00:33:12,210 Jika saya menggunakan int untuk menghitung, apa yang bisa salah? 751 00:33:12,210 --> 00:33:13,230 Tampaknya jauh lebih sederhana. 752 00:33:13,230 --> 00:33:13,873 Ya. 753 00:33:13,873 --> 00:33:16,240 >> AUDIENCE MEMBER: Jika Jumlah mendapat [tidak terdengar] 754 00:33:16,240 --> 00:33:17,073 >> DAVID J Malan: Ya. 755 00:33:17,073 --> 00:33:20,820 Bagaimana jika Anda menghitung begitu tinggi, bahwa Anda tidak bisa mengungkapkan bahwa jumlah yang sangat besar. 756 00:33:20,820 --> 00:33:21,320 Benar? 757 00:33:21,320 --> 00:33:23,910 Pada titik tertentu, Anda akan melebihi batas 758 00:33:23,910 --> 00:33:27,077 dari nilai 32-bit atau 64-bit nilai. 759 00:33:27,077 --> 00:33:29,410 Sekarang lagi, aku tidak yakin bagaimana mengucapkan nilai 64-bit, 760 00:33:29,410 --> 00:33:32,230 tapi aku tahu dengan 32-bit integer, nilai terbesar bisa, 761 00:33:32,230 --> 00:33:35,490 jika itu hanya positif nilai-nilai, kira-kira 4 miliar. 762 00:33:35,490 --> 00:33:39,000 Jadi jika saya mencoba untuk menghitung sampai 5 miliar, sesuatu yang akan terjadi. 763 00:33:39,000 --> 00:33:41,050 Tapi mari kita lihat apa, pada kenyataannya, bisa terjadi. 764 00:33:41,050 --> 00:33:44,570 Dalam dunia integer overflow, di mana Anda, dalam arti, 765 00:33:44,570 --> 00:33:48,270 meluap kapasitas dari integer, apa yang akan terjadi? 766 00:33:48,270 --> 00:33:51,190 >> Jadi, inilah bilangan biner, itu sebuah kemunduran untuk 0. 767 00:33:51,190 --> 00:33:54,630 Ini semua 1 itu, dan penampung ada, adalah kekuatan dari 2, 768 00:33:54,630 --> 00:33:55,980 jadi ini adalah biner. 769 00:33:55,980 --> 00:33:59,416 Jadi ini adalah 8, 1 bit pada layar. 770 00:33:59,416 --> 00:34:01,290 Dan jika Anda ingat atau Anda dengan cepat melakukan matematika, 771 00:34:01,290 --> 00:34:06,074 apa nilai yang diwakili di sini dengan delapan 1 bit? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 Dan bahkan jika Anda tidak cukup yakin matematika, Anda bisa melakukan itu. 774 00:34:09,260 --> 00:34:10,550 Atau Anda bisa hanya jenis alasan melalui itu, 775 00:34:10,550 --> 00:34:12,633 tunggu sebentar, jika saya mewakili nilai 8 bit, 776 00:34:12,633 --> 00:34:17,750 dan aku punya 256 nilai yang mungkin, tapi yang pertama adalah 0, 777 00:34:17,750 --> 00:34:19,909 Aku hanya tahu bahwa terbesar akan menjadi 255, 778 00:34:19,909 --> 00:34:21,510 dan itulah yang satu ini mungkin. 779 00:34:21,510 --> 00:34:26,060 >> Jadi misalkan saya mencoba untuk menambahkan 1 ke nilai ini. 780 00:34:26,060 --> 00:34:28,750 Apa yang akan Anda lakukan di kelas sekolah saat menambahkan 1, dan 781 00:34:28,750 --> 00:34:31,139 tidak benar-benar cocok karena Anda harus membawa 1? 782 00:34:31,139 --> 00:34:34,380 Apa nomor ini akan untuk menjadi ketika Anda menambahkan 1? 783 00:34:34,380 --> 00:34:37,030 Ini akan menjadi 0. 784 00:34:37,030 --> 00:34:37,530 Benar? 785 00:34:37,530 --> 00:34:41,139 Karena jika Anda memiliki lebih banyak bits-- dan aku akan mencoba, jenis, tipe itu di sini- 786 00:34:41,139 --> 00:34:44,710 jika kita memiliki lebih bit, apa yang kita bisa lakukan di sini adalah menambahkan 1, 787 00:34:44,710 --> 00:34:47,370 dan kemudian kita akan mendapatkan ini. 788 00:34:47,370 --> 00:34:48,739 Whoops. 789 00:34:48,739 --> 00:34:52,250 Kami akan memiliki 1 bit sepanjang jalan di sini. 790 00:34:52,250 --> 00:34:55,530 >> Tapi jika ini adalah terbatas nilai, itu hanya 8 bit, 791 00:34:55,530 --> 00:34:57,480 dan itulah yang telah ditentukan oleh komputer, 792 00:34:57,480 --> 00:34:59,370 yang 1 adalah efektif tidak ada. 793 00:34:59,370 --> 00:35:00,980 Ini hanya semacam jatuh dari tebing. 794 00:35:00,980 --> 00:35:05,480 Dan jika Anda menambahkan 1-255, apa nilai yang Anda tampaknya mendapatkan? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 Dan angka sengaja, dan mungkin, tidak sengaja, 797 00:35:09,700 --> 00:35:12,040 berakhir membungkus sekitar seperti ini. 798 00:35:12,040 --> 00:35:14,079 Jadi apa yang bisa menjadi implikasi dari ini? 799 00:35:14,079 --> 00:35:15,620 Nah, ada beberapa hal yang berbeda. 800 00:35:15,620 --> 00:35:18,751 Jadi satu, itu berakhir tampak seperti 0, tidak sengaja, 801 00:35:18,751 --> 00:35:20,750 tetapi Anda dapat melihat jenis, bahkan di dunia nyata, 802 00:35:20,750 --> 00:35:23,416 untuk lebih baik atau buruk, manifestasi dari ide ini dari batas. 803 00:35:23,416 --> 00:35:26,630 Misalnya, ada di antara kalian yang pernah bermain Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 tidak ada yang kebetulan tahu jumlah maksimum koin 805 00:35:28,880 --> 00:35:32,032 Anda dapat mengumpulkan di Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Mengambil menebak berdasarkan pertanyaan terkemuka hari ini. 807 00:35:35,640 --> 00:35:39,140 Ini lebih besar dari 256 atau 255. 808 00:35:39,140 --> 00:35:40,330 Ini 4 miliar. 809 00:35:40,330 --> 00:35:42,080 Jadi ternyata, dan ada beberapa people-- 810 00:35:42,080 --> 00:35:46,080 beberapa Googling dikonfirmasi night-- lalu mendapatkan 4 miliar koin emas, 811 00:35:46,080 --> 00:35:47,730 atau yang lainnya, di Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Meskipun tampaknya, ada cara untuk mengelabui permainan, 813 00:35:49,860 --> 00:35:53,222 ada bug atau fitur, yang memungkinkan Anda hanya bertambah banyak dan banyak poin. 814 00:35:53,222 --> 00:35:54,930 Tapi mungkin terbesar nilai, menurut 815 00:35:54,930 --> 00:35:58,360 ke layar ini ditembak dari seseorang yang saya ditemukan secara online, memang, 4 miliar. 816 00:35:58,360 --> 00:35:59,240 >> Sekarang kenapa begitu? 817 00:35:59,240 --> 00:36:03,040 Justru 4 miliar, mungkin karena seseorang memutuskan, 818 00:36:03,040 --> 00:36:05,500 yang sedang menulis game ini, bahwa mereka bisa melakukan 4 miliar, 819 00:36:05,500 --> 00:36:07,340 sesuatu, sesuatu, sesuatu, seperti nilai saya memasang 820 00:36:07,340 --> 00:36:10,256 dengan kalkulator sebelumnya, tapi itu hanya sedikit lebih bersih bagi manusia 821 00:36:10,256 --> 00:36:12,610 mengatakan jumlah maksimum dari coins-- atau kancing, 822 00:36:12,610 --> 00:36:14,860 seperti yang mereka sebut them-- yang Anda dapat mengumpulkan adalah 4 miliar. 823 00:36:14,860 --> 00:36:16,290 Dan, mengapa ini? 824 00:36:16,290 --> 00:36:20,310 Bagaimana game LEGO menerapkan counter 825 00:36:20,310 --> 00:36:23,420 yang melacak jumlah uang yang Anda miliki? 826 00:36:23,420 --> 00:36:24,266 Mereka menggunakan apa? 827 00:36:24,266 --> 00:36:26,390 AUDIENCE MEMBER: Berhenti menghitung setelah 4 miliar. 828 00:36:26,390 --> 00:36:27,720 DAVID J Malan: Berhenti menghitung setelah 4 miliar, 829 00:36:27,720 --> 00:36:29,525 yang berarti Anda dapat menyimpulkan, sebagai programmer, 830 00:36:29,525 --> 00:36:31,960 bahwa mereka mungkin menggunakan 32 bit integer. 831 00:36:31,960 --> 00:36:35,380 Seperti programmer harfiah hanya diketik, int, dalam kode nya, 832 00:36:35,380 --> 00:36:39,620 dan itulah jenis variabel yang mereka gunakan untuk menyimpan kode seseorang. 833 00:36:39,620 --> 00:36:42,230 Jadi ada manifestasi lainnya dari jenis-jenis batas. 834 00:36:42,230 --> 00:36:45,063 >> Jadi saya tidak bermain game-- ini dan saya membaca di sejarah 835 00:36:45,063 --> 00:36:48,470 untuk mengkonfirmasi sebagai much-- tetapi dalam Versi asli dari Peradaban, di mana 836 00:36:48,470 --> 00:36:53,240 Anda tampaknya berinteraksi satu sama lain dan dapat berperang atau memiliki damai, 837 00:36:53,240 --> 00:36:56,590 Gandhi seharusnya menjadi salah satu karakter paling damai, seperti yang saya 838 00:36:56,590 --> 00:36:59,280 memahaminya, dalam pertama versi Peradaban. 839 00:36:59,280 --> 00:37:03,250 Dan pada kenyataannya, pada skala 1 sampai 10, agresivitas nya hanya 1. 840 00:37:03,250 --> 00:37:05,620 Jadi pernah jadi sedikit agresif, rupanya. 841 00:37:05,620 --> 00:37:11,590 >> Tapi di beberapa titik, Anda dapat rupanya menginstal demokrasi dalam geografi Anda. 842 00:37:11,590 --> 00:37:14,900 Dan jika Anda menginstal demokrasi dalam versi permainan, 843 00:37:14,900 --> 00:37:17,320 maka tingkat agresi Anda turun. 844 00:37:17,320 --> 00:37:18,460 Ini adalah hal yang baik. 845 00:37:18,460 --> 00:37:20,890 Orang lebih tenang Rupanya, dalam situasi itu. 846 00:37:20,890 --> 00:37:23,190 Namun ternyata, seseorang melakukan tidak memiliki, jika, kondisi 847 00:37:23,190 --> 00:37:24,780 dalam versi asli dari kode. 848 00:37:24,780 --> 00:37:30,650 >> Jadi tingkat agresi Gandhi pergi dari positif 1, minus 2, menjadi negatif 1, 849 00:37:30,650 --> 00:37:33,840 tapi permainan tidak memahami angka negatif. 850 00:37:33,840 --> 00:37:38,680 Jadi apa yang terjadi adalah agresi Gandhi Tingkat pergi dari 1, dengan 0, ke negatif 1, 851 00:37:38,680 --> 00:37:40,900 yang memiliki efek membungkus sekitar untuk menjadi 852 00:37:40,900 --> 00:37:44,690 karakter paling agresif dalam permainan, pada nilai 255, 853 00:37:44,690 --> 00:37:46,630 pada skala 1 sampai 10. 854 00:37:46,630 --> 00:37:49,887 Dan sejak itu, telah ada lebih inkarnasi dari game ini, 855 00:37:49,887 --> 00:37:51,720 dan mereka sudah menyimpannya sebagai semacam telur Paskah, 856 00:37:51,720 --> 00:37:53,870 bahwa Gandhi tampaknya sehingga sangat agresif. 857 00:37:53,870 --> 00:37:56,740 Tapi itu hasil dari kesalahan pemrograman yang sangat sederhana 858 00:37:56,740 --> 00:37:58,630 dalam versi awal permainan. 859 00:37:58,630 --> 00:38:02,860 >> Sekarang, lebih mengganggu, lebih baru-baru ini, Boeing 787 860 00:38:02,860 --> 00:38:05,720 didokumentasikan sebagai memiliki bug, bukan jenis perangkat 861 00:38:05,720 --> 00:38:07,340 Anda sangat ingin memiliki bug. 862 00:38:07,340 --> 00:38:10,130 Dan gejala, yang saya akan baca di sini, dari sebuah artikel online, 863 00:38:10,130 --> 00:38:13,840 adalah ini, model 787 pesawat yang telah didukung terus 864 00:38:13,840 --> 00:38:18,030 untuk 248 hari dapat kehilangan semua arus bolak-balik, AC, 865 00:38:18,030 --> 00:38:20,850 daya listrik, karena unit kontrol pembuat, 866 00:38:20,850 --> 00:38:23,330 GCUs, secara bersamaan masuk ke mode fail-safe. 867 00:38:23,330 --> 00:38:26,790 Jadi ini adalah peringatan yang dikeluarkan ketika masalah ini ditemukan. 868 00:38:26,790 --> 00:38:28,750 Kondisi ini disebabkan oleh counter software, 869 00:38:28,750 --> 00:38:32,230 internal ke GCUs, sehingga integer atau variabel, 870 00:38:32,230 --> 00:38:36,850 yang akan meluap setelah 248 hari power secara berkelanjutan. 871 00:38:36,850 --> 00:38:40,350 Boeing adalah dalam proses mengembangkan software upgrade GCU yang 872 00:38:40,350 --> 00:38:42,350 akan memperbaiki kondisi tidak aman. 873 00:38:42,350 --> 00:38:44,226 >> Begitu mirip rudal skenario, dimana 874 00:38:44,226 --> 00:38:46,850 mereka memiliki beberapa jenis variabel yang menghitung, dan menghitung, 875 00:38:46,850 --> 00:38:50,720 dan menghitung, namun secara bertahap meluap batas-batas kemampuan, 876 00:38:50,720 --> 00:38:54,890 sama melakukan pesawat sialan memiliki overflow variabel 877 00:38:54,890 --> 00:38:56,410 setelah cukup waktu berjalan. 878 00:38:56,410 --> 00:38:59,240 Dan cara lidah-di-pipi dari bekerja di sekitar masalah ini 879 00:38:59,240 --> 00:39:04,400 adalah untuk benar-benar, reboot, pesawat Anda setiap 247 hari, sehingga memori akan dihapus 880 00:39:04,400 --> 00:39:06,100 dan variabel kembali ke 0. 881 00:39:06,100 --> 00:39:09,410 Tapi menyadari, ini adalah sangat inkarnasi besar perangkat lunak, 882 00:39:09,410 --> 00:39:14,070 tapi terutama karena kita mendengar tentang Apple sistem operasi pergi ke mobil, 883 00:39:14,070 --> 00:39:18,030 dan mobil diri mengemudi dari Google, dan sejumlah inkarnasi dari perangkat lunak 884 00:39:18,030 --> 00:39:21,000 dalam kehidupan kita sehari-hari, TV dan jam tangan, dan banyak lagi, 885 00:39:21,000 --> 00:39:24,950 menyadari dikelilingi oleh perangkat lunak, semua yang ditulis oleh kita manusia. 886 00:39:24,950 --> 00:39:28,150 >> Dan seperti yang kita semua akan segera menemukan, itu sangat mudah dan sangat khas 887 00:39:28,150 --> 00:39:30,250 untuk membuat kesalahan ketika menulis perangkat lunak. 888 00:39:30,250 --> 00:39:32,745 Dan jika Anda tidak menangkap mereka, beberapa hal-hal buruk bisa terjadi. 889 00:39:32,745 --> 00:39:35,400 Sekarang kadang-kadang, beberapa hal-hal lucu bisa terjadi, 890 00:39:35,400 --> 00:39:38,280 atau setidaknya kadang-kadang kita tahu untuk mengharapkan beberapa keburukan. 891 00:39:38,280 --> 00:39:41,550 Jadi 0 dibagi dengan 0, dari kelas sekolah, umumnya merupakan hal yang buruk. 892 00:39:41,550 --> 00:39:43,050 Ini tidak terdefinisi. 893 00:39:43,050 --> 00:39:46,440 Dan ternyata out-- dan mari kita lihat apakah mic saya dapat memilih ini up-- bahwa Apple 894 00:39:46,440 --> 00:39:47,790 memiliki beberapa menyenangkan dengan ini baru-baru. 895 00:39:47,790 --> 00:39:48,850 Jadi saya memiliki iPhone sini. 896 00:39:48,850 --> 00:39:54,160 Aku akan berbicara dengan Siri dan memintanya untuk memberikan jawaban 0 dibagi dengan 0. 897 00:39:54,160 --> 00:39:55,850 Apa yang 0 dibagi dengan 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> SIRI: Bayangkan bahwa Anda memiliki 0 cookie, dan Anda memisahkan mereka merata 900 00:40:02,230 --> 00:40:03,540 antara 0 teman. 901 00:40:03,540 --> 00:40:05,810 Berapa banyak cookie tidak setiap orang mendapatkan? 902 00:40:05,810 --> 00:40:06,350 Lihat? 903 00:40:06,350 --> 00:40:07,660 Ini tidak masuk akal. 904 00:40:07,660 --> 00:40:10,540 Dan Cookie Rakasa sedih bahwa tidak ada cookie. 905 00:40:10,540 --> 00:40:13,987 Dan Anda sedih bahwa Anda tidak memiliki teman. 906 00:40:13,987 --> 00:40:15,570 DAVID J Malan: Ini semacam menjengkelkan. 907 00:40:15,570 --> 00:40:17,550 Jadi ini adalah apa yang hanya mengatakan ada. 908 00:40:17,550 --> 00:40:21,380 Ini tak tentu, itu tidak didefinisikan, dan memang, banyak bahasa pemrograman 909 00:40:21,380 --> 00:40:24,950 atau, benar-benar, kompiler akan mendeteksi ketika Anda, dalam program, 910 00:40:24,950 --> 00:40:27,050 mencoba untuk membagi 0 oleh 0. 911 00:40:27,050 --> 00:40:29,830 Lebih menyenangkan daripada meskipun ini, adalah yang ternyata, Cookie Rakasa 912 00:40:29,830 --> 00:40:31,270 adalah di Twitter hari ini. 913 00:40:31,270 --> 00:40:37,610 Dan dia menjawab ini, dengan ini, yang benar-benar menggemaskan. 914 00:40:37,610 --> 00:40:40,110 Tapi mari kita cepat melihat beberapa konstruksi lainnya, 915 00:40:40,110 --> 00:40:43,459 dan kemudian menempatkan beberapa ini kode untuk digunakan, dengan cara-cara yang baik. 916 00:40:43,459 --> 00:40:45,250 Jadi ternyata, selain untuk loop, ada 917 00:40:45,250 --> 00:40:49,174 sesuatu yang disebut loop sementara, yang terlihat berbeda dan diimplementasikan 918 00:40:49,174 --> 00:40:51,590 sebuah differently-- sedikit dan kita akhirnya akan melihat examples-- 919 00:40:51,590 --> 00:40:53,500 tetapi dalam beberapa hal, itu sederhana karena 920 00:40:53,500 --> 00:40:56,670 tidak memungkinkan Anda untuk menginisialisasi dan memperbarui dalam batas loop. 921 00:40:56,670 --> 00:40:57,794 Anda masih dapat menerapkannya. 922 00:40:57,794 --> 00:41:01,219 Sehingga Anda dapat melakukan hal yang sama persis dengan loop sementara, seperti dengan untuk loop, 923 00:41:01,219 --> 00:41:03,260 tapi sintaks Anda, ultimately-- seperti yang akan kita akhirnya 924 00:41:03,260 --> 00:41:04,551 see-- akan menjadi berbeda. 925 00:41:04,551 --> 00:41:07,450 Bahkan ada do while, yang sebenarnya sedikit berbeda, 926 00:41:07,450 --> 00:41:09,640 dalam sedangkan untuk loop dan loop sementara selalu 927 00:41:09,640 --> 00:41:13,005 memeriksa kondisi pertama mereka, jika Anda membaca hal ini atas ke bawah, 928 00:41:13,005 --> 00:41:16,440 jenis terlihat seperti itu akan memeriksa kondisi itu lalu karena itu 929 00:41:16,440 --> 00:41:17,910 benar-benar baris terakhir kode. 930 00:41:17,910 --> 00:41:20,580 Dan memang, itu akan berguna dalam program-program tertentu yang kita tulis, 931 00:41:20,580 --> 00:41:23,746 jika Anda ingin hanya membabi buta melakukan sesuatu dan akhirnya memeriksa kondisi. 932 00:41:23,746 --> 00:41:25,205 Itu tidak selalu berarti buruk. 933 00:41:25,205 --> 00:41:27,912 Jika kita ingin variabel, kita dapat melakukan dalam beberapa cara yang berbeda. 934 00:41:27,912 --> 00:41:30,290 Dan kami melihat di Foxtrot yang kartun, salah satu cara untuk melakukannya, 935 00:41:30,290 --> 00:41:33,400 di mana Anda mendeklarasikan variabel Anda, seperti int kontra titik koma, 936 00:41:33,400 --> 00:41:36,570 dan kemudian later-- mungkin berikutnya line, mungkin 10 baris later-- 937 00:41:36,570 --> 00:41:37,800 Anda benar-benar menginisialisasi itu. 938 00:41:37,800 --> 00:41:42,230 Jadi ini 2 baris kode mendeklarasikan variabel bertipe int 939 00:41:42,230 --> 00:41:44,930 dan menyebutnya counter, sehingga memberikan saya cukup bit untuk mengadakan int. 940 00:41:44,930 --> 00:41:48,230 Dan kemudian akhirnya, menempatkan nilai 0 ke variabel itu. 941 00:41:48,230 --> 00:41:51,250 Ini mengatur 0 dan 1 dalam pola, yang kita tahu dari minggu lalu, 942 00:41:51,250 --> 00:41:53,260 merupakan jumlah yang kita kenal sebagai 0. 943 00:41:53,260 --> 00:41:56,920 Atau terus terang, Anda dapat melakukan hal ini banyak lebih ringkas, hanya seperti ini. 944 00:41:56,920 --> 00:41:59,390 >> Sekarang kami juga memiliki kemampuan untuk memanggil fungsi. 945 00:41:59,390 --> 00:42:03,070 Dan pada kenyataannya, inilah garis 2 program, atau kutipan dari padanya, 946 00:42:03,070 --> 00:42:06,157 yang memungkinkan kita untuk benar-benar menulis beberapa kode yang 947 00:42:06,157 --> 00:42:08,990 mendapat string dari user-- jauh seperti relawan kami sejenak ago-- 948 00:42:08,990 --> 00:42:11,320 menyimpan hasil di variabel disebut nama, 949 00:42:11,320 --> 00:42:15,470 dan then-- seperti dengan relawan kami dengan cetakan printf-- keluar nilai-nilai 950 00:42:15,470 --> 00:42:19,180 dengan melewatkan dua argumen, yang String, diikuti oleh variabel 951 00:42:19,180 --> 00:42:20,781 disebut, nama, sendiri. 952 00:42:20,781 --> 00:42:23,155 Jadi mari kita lihat, sebelum kita kembali ke Mario sana, 953 00:42:23,155 --> 00:42:26,010 di beberapa sekarang, contoh ini. 954 00:42:26,010 --> 00:42:30,537 >> Aku akan pergi ke depan dan terbuka up, katakanlah, fungsi-0.c. 955 00:42:30,537 --> 00:42:33,120 Dan seperti biasa, kode ini tersedia di website saja yang, 956 00:42:33,120 --> 00:42:35,660 sehingga Anda dapat bermain bersama di rumah dan melihat nanti. 957 00:42:35,660 --> 00:42:40,400 Tapi di sini program di dalamnya Intinya, dari garis 17-22. 958 00:42:40,400 --> 00:42:43,270 Program utama adalah di mana Program selalu akan mulai. 959 00:42:43,270 --> 00:42:46,980 Program ini, tampaknya, akan untuk mencetak nama Anda, usus. 960 00:42:46,980 --> 00:42:50,320 Ini kemudian akan menelepon GetString, seperti yang kami lakukan dengan relawan kami. 961 00:42:50,320 --> 00:42:53,365 Dan kemudian, ini menarik, itu akan memanggil PrintName. 962 00:42:53,365 --> 00:42:56,490 Ternyata, selama ini, ada tampaknya menjadi fungsi yang disebut PrintName. 963 00:42:56,490 --> 00:42:57,614 Yang mencetak nama seseorang. 964 00:42:57,614 --> 00:43:01,210 Kami tidak perlu menggunakan printf dari tadi, ada PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Tapi itu menyesatkan karena PrintName tidak 966 00:43:03,500 --> 00:43:06,760 datang dengan C. Orang tidak menciptakan itu sekitar 40 atau 50 tahun yang lalu, 967 00:43:06,760 --> 00:43:07,990 Saya lakukan, sebagai gantinya. 968 00:43:07,990 --> 00:43:10,330 Dan pada kenyataannya, jika saya gulir turun lebih lanjut, pemberitahuan 969 00:43:10,330 --> 00:43:14,200 bagaimana saya bisa menulis saya sendiri fungsi dalam C. Kami akan akhirnya 970 00:43:14,200 --> 00:43:16,319 menjelaskan mengapa kita selalu mengatakan, kekosongan, di beberapa tempat, 971 00:43:16,319 --> 00:43:18,110 tapi untuk saat ini, mari kita hanya melihat nama. 972 00:43:18,110 --> 00:43:20,905 >> On line 24, jika Anda ingin membuat fungsi sendiri, 973 00:43:20,905 --> 00:43:22,780 Anda benar-benar menulis nama fungsi. 974 00:43:22,780 --> 00:43:24,340 Saya memilih PrintName. 975 00:43:24,340 --> 00:43:26,159 Dalam kurung, Anda kemudian menentukan apa jenis 976 00:43:26,159 --> 00:43:28,450 input, dan berapa banyak Anda ingin fungsi ini untuk mengambil. 977 00:43:28,450 --> 00:43:31,906 Dalam hal ini, saya ingin mengambil 1 variabel disebut, nama, 978 00:43:31,906 --> 00:43:34,030 dan itu akan menjadi Jenis, string, sehingga akan 979 00:43:34,030 --> 00:43:35,780 ada beberapa urutan karakter. 980 00:43:35,780 --> 00:43:39,170 Dan kemudian, program-- ini seperti di Scratch, 981 00:43:39,170 --> 00:43:42,590 Anda dapat memiliki teka-teki kustom pieces-- akan memiliki perilaku kebiasaan ini. 982 00:43:42,590 --> 00:43:46,760 Ini akan memanggil printf melintas di, halo, placeholder, 983 00:43:46,760 --> 00:43:49,110 dan kemudian itu akan pasang dalam apa pun pengguna yang disebut. 984 00:43:49,110 --> 00:43:51,450 >> Jadi ini adalah contoh dari apa yang seorang ilmuwan komputer akan 985 00:43:51,450 --> 00:43:55,090 abstraksi panggilan atau fungsional dekomposisi, yang hanya 986 00:43:55,090 --> 00:43:58,110 cara mewah saying-- Apakah jika Anda menyukai ide tingkat tinggi ini, 987 00:43:58,110 --> 00:44:01,569 seperti aku ingin fungsi yang mencetak nama seseorang, benar-benar Anda 988 00:44:01,569 --> 00:44:04,360 harfiah dapat menulis printf dan kemudian lulus dalam argumen yang Anda inginkan, 989 00:44:04,360 --> 00:44:07,340 dan program akan bekerja, karena memiliki sejak Rabu. 990 00:44:07,340 --> 00:44:10,510 Tapi Anda bisa mulai untuk abstrak pergi gagasan mencetak nama. 991 00:44:10,510 --> 00:44:13,270 Anda dapat memberikan nama, seperti PrintName, dan ini 992 00:44:13,270 --> 00:44:15,280 adalah ide ini dari layering dari minggu 0. 993 00:44:15,280 --> 00:44:19,910 >> Sejak saat itu, saya dan Anda tidak perlu tahu atau peduli berapa PrintName diimplementasikan. 994 00:44:19,910 --> 00:44:22,470 Ya itu menggunakan printf, mungkin itu tidak, siapa yang tahu apa yang menggunakan? 995 00:44:22,470 --> 00:44:23,410 Siapa peduli? 996 00:44:23,410 --> 00:44:26,034 Sekarang saya sedang berbicara di sini, bukannya di sini. 997 00:44:26,034 --> 00:44:28,700 Dan memang, sebagai program kami mendapatkan lebih maju dan canggih, 998 00:44:28,700 --> 00:44:32,550 kita akan terus mengambil untuk diberikan bahwa potongan puzzle tingkat rendah ada. 999 00:44:32,550 --> 00:44:34,780 Karena kita menulis mereka atau orang lain lakukan, sehingga 1000 00:44:34,780 --> 00:44:36,910 bahwa kita kemudian dapat membangun di atas mereka. 1001 00:44:36,910 --> 00:44:39,430 Mari kita lihat ini varian, berfungsi satu. 1002 00:44:39,430 --> 00:44:41,780 >> Jadi yang satu ini sedikit lebih canggih, tapi ternyata 1003 00:44:41,780 --> 00:44:44,570 bahwa di perpustakaan CS50 ini, hanya ada fungsi getInt. 1004 00:44:44,570 --> 00:44:47,720 Kami tidak berpikir, tahun lalu, untuk mengimplementasikan fungsi GetPositiveInt. 1005 00:44:47,720 --> 00:44:50,970 Dan itu sedikit mengganggu karena jika kalian menulis sebuah program dimana 1006 00:44:50,970 --> 00:44:53,325 Anda ingin mendapatkan yang positif bilangan bulat dari pengguna, 1007 00:44:53,325 --> 00:44:55,010 Anda benar-benar dapat menggunakan getInt. 1008 00:44:55,010 --> 00:44:57,840 Dan Anda benar-benar dapat memeriksa dengan kondisi dan mungkin satu lingkaran 1009 00:44:57,840 --> 00:45:00,320 jika itu int lebih besar dari 0 dan berteriak pengguna 1010 00:45:00,320 --> 00:45:02,699 jika dia tidak memberikan Anda angka positif. 1011 00:45:02,699 --> 00:45:04,740 Tapi mari kita membangun ini bangunan memblokir diri kita sendiri, sebuah, 1012 00:45:04,740 --> 00:45:06,555 sepotong Scratch kustom, jika Anda mau. 1013 00:45:06,555 --> 00:45:08,680 Aku akan memiliki program di sini bahwa pada akhirnya, saya 1014 00:45:08,680 --> 00:45:11,780 ingin dapat menelepon GetPositiveInt, dan saya ingin menjadi 1015 00:45:11,780 --> 00:45:14,200 mampu mencetak apa pun yang int adalah. 1016 00:45:14,200 --> 00:45:16,240 Tapi ini disarikan pergi sekarang. 1017 00:45:16,240 --> 00:45:19,050 Itu hanya diberikan tingkat tinggi Nama yang mengatakan apa yang dilakukannya, 1018 00:45:19,050 --> 00:45:21,780 yang indah karena itu sangat intuitif sekarang untuk membaca. 1019 00:45:21,780 --> 00:45:24,710 Dan jika saya melakukan peduli apa yang di bawahnya kap mesin, biarkan aku gulir ke bawah. 1020 00:45:24,710 --> 00:45:27,140 Dan itu sedikit menakutkan pada awalnya, terutama 1021 00:45:27,140 --> 00:45:29,470 jika ini adalah program pertama Anda, tapi mari kita lihat. 1022 00:45:29,470 --> 00:45:32,860 >> Saya tidak lagi mengatakan, kekosongan, karena ternyata fungsi, 1023 00:45:32,860 --> 00:45:34,777 seperti GetString, bisa mengembalikan nilai bagi saya. 1024 00:45:34,777 --> 00:45:36,610 Mereka tidak hanya memiliki untuk mencetak ke layar, 1025 00:45:36,610 --> 00:45:38,410 mereka benar-benar dapat tangan saya sesuatu kembali. 1026 00:45:38,410 --> 00:45:41,535 Dan padahal sebelumnya PrintName, Aku tidak perlu apa-apa kembali. 1027 00:45:41,535 --> 00:45:44,160 Aku butuh efek samping sesuatu muncul di layar, 1028 00:45:44,160 --> 00:45:46,570 tapi aku tidak membutuhkan manusia untuk menyerahkan sesuatu kembali. 1029 00:45:46,570 --> 00:45:48,840 Di sini, dengan GetPositiveInt, seperti dengan getInt, 1030 00:45:48,840 --> 00:45:50,640 Saya ingin diserahkan sesuatu kembali. 1031 00:45:50,640 --> 00:45:53,220 Jadi saya katakan tidak, batal, pada baris 23, tapi int, 1032 00:45:53,220 --> 00:45:55,570 yang mengatakan, fungsi ini bahwa saya menulis, 1033 00:45:55,570 --> 00:45:58,860 disebut GetPositiveInt akan tangan saya kembali integer, tidak apa-apa, 1034 00:45:58,860 --> 00:45:59,890 tidak batal. 1035 00:45:59,890 --> 00:46:03,280 >> Sementara itu, itu akan mengambil tidak input, jadi saya sudah, jenis, dibalik itu. 1036 00:46:03,280 --> 00:46:08,280 Aku tidak memberikan GetPositiveInt apapun masukan, saya ingin memberikan output. 1037 00:46:08,280 --> 00:46:09,800 Dan kemudian apa yang terjadi sekarang? 1038 00:46:09,800 --> 00:46:11,640 Jadi di sini adalah bagaimana saya bisa mendeklarasikan variabel. 1039 00:46:11,640 --> 00:46:15,090 Saya sudah melakukannya di luar loop, untuk alasan kita akhirnya akan melihat, 1040 00:46:15,090 --> 00:46:17,700 tapi ini hanya memberikan saya 32 bit disebut, n, 1041 00:46:17,700 --> 00:46:20,952 dan saya sudah pra-menentukan mereka untuk menyimpan integer. 1042 00:46:20,952 --> 00:46:23,660 Dan inilah yang, lakukan saat membangun, dan ini adalah mengapa itu berguna. 1043 00:46:23,660 --> 00:46:26,700 Secara harfiah melakukan ini, sedangkan n kurang dari 1. 1044 00:46:26,700 --> 00:46:28,030 Jadi mari kita lihat apa yang terjadi. 1045 00:46:28,030 --> 00:46:30,760 Saya mencetak, silakan memberi saya int positif. 1046 00:46:30,760 --> 00:46:34,300 Saya kemudian mendapatkan int, menggunakan CS50 ini berfungsi dan disimpan dalam n. 1047 00:46:34,300 --> 00:46:38,990 >> Dan kemudian, apa baris kode mungkin dijalankan berikutnya, secara logis? 1048 00:46:38,990 --> 00:46:41,890 Baris yang nomor? 1049 00:46:41,890 --> 00:46:42,571 Ya, jadi 31. 1050 00:46:42,571 --> 00:46:45,320 Anda tidak akan tahu ini sampai Anda sudah diberitahu atau semacam menyimpulkan itu, 1051 00:46:45,320 --> 00:46:45,986 tapi itu benar. 1052 00:46:45,986 --> 00:46:48,280 Ia pergi atas ke bawah dan kemudian terus mengulangi. 1053 00:46:48,280 --> 00:46:55,840 Jadi jika saya telah mengetik di mengatakan, jumlah negatif 1, adalah n kurang dari 1 negatif? 1054 00:46:55,840 --> 00:46:56,340 Ya. 1055 00:46:56,340 --> 00:46:58,470 Karena negatif 1 kurang dari 1. 1056 00:46:58,470 --> 00:46:59,510 Jadi apa yang harus terjadi? 1057 00:46:59,510 --> 00:47:03,260 Aku akan melakukan hal ini sedangkan n kurang dari 1, 1058 00:47:03,260 --> 00:47:05,760 jadi saya akan kembali ke garis 28. 1059 00:47:05,760 --> 00:47:09,530 >> Dan masing-masing time-- dan mari kita jalankan this-- membuat fungsi 1 melakukan kompilasi, 1060 00:47:09,530 --> 00:47:11,340 dan sekarang dot slash fungsi 1. 1061 00:47:11,340 --> 00:47:14,280 Jika saya ketik negatif 1, itu akan terus berteriak padaku 1062 00:47:14,280 --> 00:47:17,530 sampai aku bekerja sama karena masing-masing input saya kurang dari 1 1063 00:47:17,530 --> 00:47:20,070 dan jika itu sementara kurang dari 1, Aku akan terus melakukan hal ini. 1064 00:47:20,070 --> 00:47:24,240 Jika saya akhirnya memberikan nomor seperti 50, untungnya, ia mengatakan, terima kasih untuk 50. 1065 00:47:24,240 --> 00:47:24,970 Mengapa? 1066 00:47:24,970 --> 00:47:30,640 Karena begitu n tidak kurang dari 1, saya berhenti terjebak dalam lingkaran ini, 1067 00:47:30,640 --> 00:47:33,840 dan kata kunci baru ini hari ini, kembali, secara harfiah melakukan itu. 1068 00:47:33,840 --> 00:47:36,800 Jadi saya baru saja dilaksanakan, dalam akal, setara dengan GetString, 1069 00:47:36,800 --> 00:47:40,590 di mana aku menyerahkan kembali ke siapa pun yang menggunakan saya, beberapa nilai. 1070 00:47:40,590 --> 00:47:42,820 Tidak harus string, itu adalah int. 1071 00:47:42,820 --> 00:47:44,990 Jadi sederhana, cepat Misalnya, tapi kami akan segera 1072 00:47:44,990 --> 00:47:47,930 melihat beberapa lebih canggih versi masih. 1073 00:47:47,930 --> 00:47:53,882 Bahkan, mari kita lihat sebuah satu numerik, yang disebut return.c. 1074 00:47:53,882 --> 00:47:55,590 Dan yang satu ini benar-benar sedikit lebih sederhana. 1075 00:47:55,590 --> 00:47:59,010 Jadi tujuan program ini di life-- mari kompilasi dan menjalankannya, 1076 00:47:59,010 --> 00:48:03,090 sehingga membuat kembali, dot slash, pemberitahuan return-- 1077 00:48:03,090 --> 00:48:05,530 Program hanya kubus nilai 2. 1078 00:48:05,530 --> 00:48:08,410 Ini sangat bodoh, sulit kode, tidak mengambil input apapun, 1079 00:48:08,410 --> 00:48:12,220 tetapi tidak menunjukkan lain Fungsi yang saya tulis sendiri. 1080 00:48:12,220 --> 00:48:15,760 Jadi di sini, saya sudah menyatakan variabel, disebut x, tipe int, 1081 00:48:15,760 --> 00:48:17,840 sama dengan nomor 2, benar-benar sewenang-wenang. 1082 00:48:17,840 --> 00:48:19,530 Ini hanya beberapa pencetakan halus. 1083 00:48:19,530 --> 00:48:23,070 Dikatakan x sekarang, seperti dan seperti, cubing dot dot dot. 1084 00:48:23,070 --> 00:48:26,390 Dan sihir ini rupanya sejalan 21. 1085 00:48:26,390 --> 00:48:30,120 Saya menelepon fungsi yang disebut, kubus, Saya menyerahkannya selembar kertas 1086 00:48:30,120 --> 00:48:32,890 dengan nomor 2 tertulis di atasnya, dan apa nilai, matematis, 1087 00:48:32,890 --> 00:48:34,860 saya ingin keluar dari itu? 1088 00:48:34,860 --> 00:48:36,570 Sama seperti cek kewarasan? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Benar? 1091 00:48:37,570 --> 00:48:40,160 Aku ingin 2 potong dadu kembali, 2 untuk kekuatan 3, jadi 8 kembali. 1092 00:48:40,160 --> 00:48:42,570 >> Jadi mana kubus diimplementasikan? 1093 00:48:42,570 --> 00:48:44,349 Nah, pemberitahuan itu dilaksanakan di sini. 1094 00:48:44,349 --> 00:48:47,140 Dan seperti sebelumnya, secara logis, meskipun sintaks mungkin 1095 00:48:47,140 --> 00:48:49,320 sangat baru untuk banyak dari Anda, Saya ingin fungsi ini 1096 00:48:49,320 --> 00:48:51,780 untuk tangan saya kembali selembar kertas dengan int di atasnya. 1097 00:48:51,780 --> 00:48:53,990 Jadi saya memiliki int, yang Nama sewenang-wenang, 1098 00:48:53,990 --> 00:48:55,530 tapi nyaman disebut kubus. 1099 00:48:55,530 --> 00:48:58,430 Input untuk itu, adalah n ketik integer, jadi itu 1100 00:48:58,430 --> 00:49:00,800 bagaimana saya bisa lulus dalam jumlah 2 pada selembar kertas. 1101 00:49:00,800 --> 00:49:03,910 Dan kemudian ternyata C mendukung matematika, sehingga Anda tidak memiliki x untuk kali, 1102 00:49:03,910 --> 00:49:06,680 Anda hanya menggunakan tanda bintang untuk perkalian. 1103 00:49:06,680 --> 00:49:11,070 Dan ini kembali kali n n kali n, yang hanya nilai potong dadu. 1104 00:49:11,070 --> 00:49:12,840 >> Jadi di mana kita akan pergi dengan semua ini? 1105 00:49:12,840 --> 00:49:14,570 Ini jelas merupakan tur angin puyuh, yakinlah, 1106 00:49:14,570 --> 00:49:16,410 bahwa dalam bagian yang super dan di masalah set 1, 1107 00:49:16,410 --> 00:49:18,368 Anda akan berjalan melalui semua ini semua lebih. 1108 00:49:18,368 --> 00:49:22,490 Dan di masalah set 1, kami akan transisi dari dunia grafis dari Scratch 1109 00:49:22,490 --> 00:49:25,640 untuk sesuatu baris perintah lebih di C. Tapi kita akan menarik inspirasi 1110 00:49:25,640 --> 00:49:27,680 dari sini permainan ini dari masa lampau, dimana 1111 00:49:27,680 --> 00:49:31,591 menggunakan C dan edisi standar p set Anda akan menerapkan piramida Mario. 1112 00:49:31,591 --> 00:49:34,340 Dan dalam edisi hacker dari p set, jika Anda memilih untuk memilih, 1113 00:49:34,340 --> 00:49:38,280 Anda akan menerapkan sedikit lebih menantang piramida dengan dua puncak. 1114 00:49:38,280 --> 00:49:41,239 Anda juga akan menerapkan algoritma, algoritma serakah. 1115 00:49:41,239 --> 00:49:43,030 Ternyata ada yang beberapa logika yang menarik 1116 00:49:43,030 --> 00:49:45,640 balik proses menjalankan stasiun kasir 1117 00:49:45,640 --> 00:49:47,410 dan benar-benar menyerahkan seseorang perubahan kembali. 1118 00:49:47,410 --> 00:49:50,410 Ada sebuah algoritma yang cukup mudah, Anda bahkan mungkin 1119 00:49:50,410 --> 00:49:53,576 pegang intuitif ketika Anda pertama kali membaca itu-- menyadari itulah yang aku selalu 1120 00:49:53,576 --> 00:49:57,110 dilakukan setiap kali aku diberi seseorang beberapa uang back-- yang memungkinkan Anda untuk selalu 1121 00:49:57,110 --> 00:50:00,679 meminimalkan jumlah catatan kertas atau uang logam 1122 00:50:00,679 --> 00:50:02,220 bahwa Anda menyerahkan kembali ke pengguna. 1123 00:50:02,220 --> 00:50:04,610 Dan ini, tentu saja, adalah menarik karena jika Anda pergi ke CVS atau entah apa lagi, 1124 00:50:04,610 --> 00:50:06,430 Anda tidak ingin menjadi tangan sejumlah besar orang-orang 1125 00:50:06,430 --> 00:50:07,596 atau sejumlah besar uang. 1126 00:50:07,596 --> 00:50:10,120 Anda ingin paling sedikit koin, mungkin, mungkin. 1127 00:50:10,120 --> 00:50:13,070 >> Akhirnya, Anda juga akan ditantang untuk mencoba-coba di dunia air 1128 00:50:13,070 --> 00:50:17,220 dan benar-benar mendapatkan apresiasi untuk pemetaan antara tingkat aliran, 1129 00:50:17,220 --> 00:50:19,890 dari suka, air mandi, berapa banyak air yang digunakan. 1130 00:50:19,890 --> 00:50:22,640 Dan kiasan didalamnya, akan klip ini di sini, 1131 00:50:22,640 --> 00:50:24,840 yang kita akan berakhir selama hanya 60 detik, yang 1132 00:50:24,840 --> 00:50:29,070 melukiskan gambaran aliran rendah mandi kepala. 1133 00:50:29,070 --> 00:50:30,886 >> [VIDEO PLAYBACK] 1134 00:50:30,886 --> 00:50:31,385 -Baiklah. 1135 00:50:31,385 --> 00:50:32,774 Aku punya segalanya di sini. 1136 00:50:32,774 --> 00:50:35,800 Saya mendapat Cyclone F Series, Hydra, Jetflow, Stockholm 1137 00:50:35,800 --> 00:50:37,660 Supersteam, Anda nama itu. 1138 00:50:37,660 --> 00:50:39,265 >> -Dan Apa yang Anda rekomendasikan? 1139 00:50:39,265 --> 00:50:40,460 >> -Apa yang sedang Anda cari? 1140 00:50:40,460 --> 00:50:41,300 >> Pria -Kekuatan. 1141 00:50:41,300 --> 00:50:42,285 Kekuasaan. 1142 00:50:42,285 --> 00:50:42,910 -seperti Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -Itu Untuk radiasi. 1144 00:50:44,520 --> 00:50:46,335 -Betul. 1145 00:50:46,335 --> 00:50:48,275 -Sekarang Apa ini? 1146 00:50:48,275 --> 00:50:49,704 -itu Yang Commando 450. 1147 00:50:49,704 --> 00:50:50,620 Saya tidak menjual satu. 1148 00:50:50,620 --> 00:50:51,700 >> -Tapi Itulah yang kami inginkan. 1149 00:50:51,700 --> 00:50:52,680 Ini adalah komando 450. 1150 00:50:52,680 --> 00:50:53,882 >> -Tidak Percayalah. 1151 00:50:53,882 --> 00:50:55,090 Ini hanya digunakan di sirkus. 1152 00:50:55,090 --> 00:50:56,512 Ini untuk gajah. 1153 00:50:56,512 --> 00:50:59,356 >> -aku Membayar apa-apa. 1154 00:50:59,356 --> 00:51:01,252 >> -Apa Tentang Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -Dia Tidak bisa menangani itu. 1156 00:51:02,760 --> 00:51:04,910 Dia halus. 1157 00:51:04,910 --> 00:51:05,750 Oh ya. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [END PLAYBACK] 1160 00:51:37,320 --> 00:51:37,700 DAVID J Malan: Baiklah. 1161 00:51:37,700 --> 00:51:38,820 Itu kalau untuk CS50. 1162 00:51:38,820 --> 00:51:40,050 Kita akan melihat Anda minggu depan. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> SPEAKER 1: [? Scully?], [? Ian,?] sejauh proyek outro ini, 1165 00:51:49,029 --> 00:51:50,362 apa yang telah kalian datang dengan? 1166 00:51:50,362 --> 00:51:51,990 >> SPEAKER 2: Yah, kami telah memberikan itu berbagai pemikiran, 1167 00:51:51,990 --> 00:51:53,250 dan kami berpikir bahwa cara terbaik to-- 1168 00:51:53,250 --> 00:51:53,660 >> SPEAKER 3: May I? 1169 00:51:53,660 --> 00:51:54,326 >> SPEAKER 2: Ya. 1170 00:51:54,326 --> 00:51:56,360 Dengan segala cara, sebenarnya. 1171 00:51:56,360 --> 00:51:59,425 >> SPEAKER 3: Jadi saya pikir kita dapat meringkas ide kami 1172 00:51:59,425 --> 00:52:05,450 untuk outros dengan satu tidak word--. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID J Malan: Tidak ada? 1175 00:52:10,409 --> 00:52:11,200 SPEAKER 3: Tidak ada. 1176 00:52:11,200 --> 00:52:12,990 DAVID J Malan: Apa artinya? 1177 00:52:12,990 --> 00:52:16,260 SPEAKER 3: The outros adalah tentang apa-apa. 1178 00:52:16,260 --> 00:52:21,720 SPEAKER 2: Yah, maksudku, dalam filsafat, Maksudku, tidak ada yang selalu sesuatu. 1179 00:52:21,720 --> 00:52:24,200 SPEAKER 1: Jadi what's-- apa premis? 1180 00:52:24,200 --> 00:52:25,720 SPEAKER 3: Jadi itu seperti hidup. 1181 00:52:25,720 --> 00:52:26,680 OKE. 1182 00:52:26,680 --> 00:52:28,294 Apa yang kamu lakukan hari ini? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID J Malan: aku bangun, memiliki sarapan, dan datang untuk bekerja. 1184 00:52:31,811 --> 00:52:34,056 >> SPEAKER 3: Itu sebuah outro. 1185 00:52:34,056 --> 00:52:36,806 SPEAKER 2: Tapi, maksudku, seharusnya tidak sesuatu terjadi padanya pada the-- 1186 00:52:36,806 --> 00:52:37,889 SPEAKER 3: Tidak, tidak, tidak, tidak. 1187 00:52:37,889 --> 00:52:40,220 Tidak ada yang terjadi. 1188 00:52:40,220 --> 00:52:42,910 >> SPEAKER 1: Jadi mengapa kita menonton? 1189 00:52:42,910 --> 00:52:46,956 >> SPEAKER 3: Karena ini merupakan outro untuk CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID J Malan: Belum. 1191 00:52:48,652 --> 00:52:49,151