1 00:00:00,000 --> 00:00:10,920 >> [MUSIC PLAYING] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J Malan: Baiklah, selamat datang kembali ke CS50. 3 00:00:14,680 --> 00:00:16,500 Ini adalah awal dari dua minggu. 4 00:00:16,500 --> 00:00:18,940 Sebuah kata dari salah satu kami teman-teman di kampus - 5 00:00:18,940 --> 00:00:22,620 jika Anda tertarik, mungkin, baik sekarang atau dalam beberapa jangka waktu 6 00:00:22,620 --> 00:00:25,670 Bahkan, sekali lagi nyaman, pengajaran siswa sekolah menengah sedikit 7 00:00:25,670 --> 00:00:27,680 sesuatu tentang ilmu komputer, lakukan kepala ke URL tersebut. 8 00:00:27,680 --> 00:00:32,360 Mereka yang membutuhkan khususnya sekarang dari guru, terutama jika Anda memiliki 9 00:00:32,360 --> 00:00:34,700 memiliki beberapa paparan ilmu komputer. 10 00:00:34,700 --> 00:00:38,060 >> Jadi ingat bahwa terakhir kali, kami memperkenalkan tipe data beberapa di C, dan 11 00:00:38,060 --> 00:00:40,590 Anda mungkin sudah mulai untuk mendapatkan Anda tangan kotor dengan ini sejauh ini 12 00:00:40,590 --> 00:00:41,940 dalam masalah menetapkan satu. 13 00:00:41,940 --> 00:00:43,230 Dan kami memiliki char. 14 00:00:43,230 --> 00:00:49,100 Jadi dalam hal agak teknis, apa adalah char seperti yang Anda kenal sekarang? 15 00:00:49,100 --> 00:00:51,050 >> Jadi karakter, tapi mari kita lebih tepat sekarang. 16 00:00:51,050 --> 00:00:53,735 Apa yang kita maksud dengan karakter atau individu arang? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Sebuah karakter non-numerik - 19 00:00:59,500 --> 00:01:00,670 jadi belum tentu. 20 00:01:00,670 --> 00:01:04,580 Ternyata nomor bahkan, bahkan tanda baca dan huruf 21 00:01:04,580 --> 00:01:06,980 direpresentasikan dengan data ini ketik dikenal sebagai char. 22 00:01:06,980 --> 00:01:09,440 Jadi belum tentu abjad. 23 00:01:09,440 --> 00:01:11,100 Ya? 24 00:01:11,100 --> 00:01:12,275 >> Jadi karakter ASCII. 25 00:01:12,275 --> 00:01:15,510 Jadi jika Anda berpikir kembali ke minggu nol, ketika kami memiliki byte relawan kami 26 00:01:15,510 --> 00:01:19,150 datang dan baik memegang tangan mereka atau tidak semua, mereka mewakili bit. 27 00:01:19,150 --> 00:01:22,450 Tapi kolektif sebagai kelompok delapan, mereka mewakili byte. 28 00:01:22,450 --> 00:01:26,030 Dan kami memperkenalkan konsep ASCII pada ceramah itu, yang hanya merupakan 29 00:01:26,030 --> 00:01:28,170 pemetaan antara angka dan huruf. 30 00:01:28,170 --> 00:01:32,010 Dan menggunakan ASCII, seperti yang manusia tersirat, delapan bit 31 00:01:32,010 --> 00:01:33,660 untuk mewakili karakter. 32 00:01:33,660 --> 00:01:36,890 >> Jadi oleh karena itu, jika delapan bit dapat masing mengambil salah satu dari dua nilai - 33 00:01:36,890 --> 00:01:38,010 nol atau satu - 34 00:01:38,010 --> 00:01:40,280 itu berarti ada dua kemungkinan untuk orang ini - 35 00:01:40,280 --> 00:01:41,230 nol atau satu - 36 00:01:41,230 --> 00:01:44,070 dua untuk orang ini, dua untuk ini orang, dua untuk yang satu ini. 37 00:01:44,070 --> 00:01:47,450 Jadi total dua kali dua kali dua kali dua kali dua - 38 00:01:47,450 --> 00:01:49,700 sehingga dua yang kedelapan secara total. 39 00:01:49,700 --> 00:01:54,320 Jadi ada jumlah karakter 256 mungkin bahwa Anda dapat 40 00:01:54,320 --> 00:01:55,750 mewakili dengan delapan bit. 41 00:01:55,750 --> 00:01:59,210 >> Sekarang, Anda yang berbicara Asia bahasa mungkin tahu bahwa ada lebih 42 00:01:59,210 --> 00:02:02,620 karakter di dunia dari sekedar As dan B dan C dan Ds. 43 00:02:02,620 --> 00:02:06,130 Dan memang, ASCII tidak cukup untuk banyak bahasa dunia. 44 00:02:06,130 --> 00:02:07,760 Tapi lebih pada waktu yang lain. 45 00:02:07,760 --> 00:02:11,240 Untuk saat ini, tahu bahwa di C jika Anda ingin untuk mewakili surat, sepotong 46 00:02:11,240 --> 00:02:15,780 tanda baca, atau hanya sesuatu karakter di alam, kita menggunakan char. 47 00:02:15,780 --> 00:02:18,240 Dan itu salah satu byte atau delapan bit. 48 00:02:18,240 --> 00:02:19,690 >> Bagaimana dengan int? 49 00:02:19,690 --> 00:02:20,780 Nah, int adalah integer. 50 00:02:20,780 --> 00:02:23,175 Berapa banyak bit, jika Anda ingat, adalah integer biasanya? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Ingat siapapun? 53 00:02:27,512 --> 00:02:29,600 Jadi biasanya 32. 54 00:02:29,600 --> 00:02:32,120 Ini sebenarnya tergantung pada komputer yang Anda gunakan. 55 00:02:32,120 --> 00:02:35,770 Tapi dalam alat, dan dalam banyak komputer, itu 32 bit atau empat 56 00:02:35,770 --> 00:02:37,140 byte - delapan kali empat. 57 00:02:37,140 --> 00:02:39,790 Dan ints hanya digunakan untuk menyimpan angka, baik negatif, 58 00:02:39,790 --> 00:02:41,610 positif, atau nol. 59 00:02:41,610 --> 00:02:45,250 >> Dan jika Anda punya 32 bit dan Anda hanya peduli bilangan positif, bisa 60 00:02:45,250 --> 00:02:48,960 siapa pun kasarnya berapa banyak mungkin integer komputer dapat mewakili dari 61 00:02:48,960 --> 00:02:51,820 nol ke atas? 62 00:02:51,820 --> 00:02:56,130 Jadi akan ada dua untuk 32, yang kira-kira empat miliar. 63 00:02:56,130 --> 00:02:59,720 Jadi ini kekuasaan dua akan menjadi Tema berulang dalam ilmu komputer. 64 00:02:59,720 --> 00:03:03,930 Seperti yang akan kita lihat, mereka cukup nyaman untuk bekerja dengan bahkan jika itu tidak cukup 65 00:03:03,930 --> 00:03:05,790 mudah untuk melakukan matematika di kepala seseorang. 66 00:03:05,790 --> 00:03:07,000 >> Jadi kita akan mengatakan sekitar empat miliar. 67 00:03:07,000 --> 00:03:08,620 Sekarang, sebuah lama - 68 00:03:08,620 --> 00:03:09,770 Anda dapat jenis menebak. 69 00:03:09,770 --> 00:03:10,480 Ini lebih lama dari int. 70 00:03:10,480 --> 00:03:12,440 Berapa banyak bit? 71 00:03:12,440 --> 00:03:14,250 Jadi 64 bit atau delapan byte. 72 00:03:14,250 --> 00:03:17,480 Ini hanya berarti Anda dapat mewakili bahkan angka yang lebih besar, lebih besar atau positif 73 00:03:17,480 --> 00:03:19,160 besar angka negatif. 74 00:03:19,160 --> 00:03:20,060 >> Dan bagaimana mengapung? 75 00:03:20,060 --> 00:03:22,260 Itu floating point nilai 32 bit. 76 00:03:22,260 --> 00:03:25,180 Ini hanyalah sebuah bilangan real, sesuatu dengan titik desimal. 77 00:03:25,180 --> 00:03:30,100 Tapi jika Anda malah perlu lebih banyak tempat setelah titik desimal atau Anda ingin 78 00:03:30,100 --> 00:03:33,720 mewakili sejumlah besar dengan beberapa fraksi setelah, Anda dapat menggunakan 79 00:03:33,720 --> 00:03:36,260 ganda, yang adalah 64 bit. 80 00:03:36,260 --> 00:03:38,240 >> Tapi ada yang menarik takeaway di sini. 81 00:03:38,240 --> 00:03:42,890 Jadi jika ints dibatasi oleh 32 bit dan bahkan rindu panjang dibatasi oleh 64 82 00:03:42,890 --> 00:03:46,180 bit, semacam itu dari menimbulkan pertanyaan, bagaimana jika Anda benar-benar ingin menghitung 83 00:03:46,180 --> 00:03:48,790 lebih tinggi dari 4 miliar untuk int? 84 00:03:48,790 --> 00:03:50,330 Nah, Anda hanya menggunakan yang lama. 85 00:03:50,330 --> 00:03:54,200 Tetapi bagaimana jika Anda ingin menghitung lebih tinggi dari dua sampai ke-64, memberi atau mengambil? 86 00:03:54,200 --> 00:03:55,810 >> Sekarang, itu sejumlah besar. 87 00:03:55,810 --> 00:03:59,250 Tapi akhirnya, Anda mungkin benar-benar peduli dengan jenis nilai, 88 00:03:59,250 --> 00:04:03,070 terutama jika Anda menggunakan database dan mulai mengumpulkan banyak dan banyak 89 00:04:03,070 --> 00:04:06,190 dan banyak data dan menetapkan unik angka untuk setiap potongan data. 90 00:04:06,190 --> 00:04:07,430 Jadi kita semacam memiliki masalah. 91 00:04:07,430 --> 00:04:10,700 Dan juga, dengan floating point nilai - mengapung atau ganda - 92 00:04:10,700 --> 00:04:14,290 jika Anda hanya punya jumlah terbatas bit, berapa banyak jumlah total bisa Anda 93 00:04:14,290 --> 00:04:16,980 mungkin mewakili? 94 00:04:16,980 --> 00:04:19,540 >> Nah, itu kurang jelas ketika Anda melibatkan titik desimal. 95 00:04:19,540 --> 00:04:20,899 Tapi itu pasti terbatas. 96 00:04:20,899 --> 00:04:24,390 Jika Anda memiliki jumlah terbatas bit, jumlah terbatas manusia, yang terbatas 97 00:04:24,390 --> 00:04:27,350 jumlah bola lampu, pasti Anda bisa hanya mewakili jumlah terbatas 98 00:04:27,350 --> 00:04:28,510 floating point nilai. 99 00:04:28,510 --> 00:04:33,170 Tapi berapa banyak bilangan real adalah mereka di dunia? 100 00:04:33,170 --> 00:04:33,680 Ada terbatas. 101 00:04:33,680 --> 00:04:37,280 Jadi itulah jenis masalah karena kita tidak memiliki jumlah tak terbatas 102 00:04:37,280 --> 00:04:39,970 memori atau RAM dalam komputer kita. 103 00:04:39,970 --> 00:04:41,780 Jadi beberapa hal yang menantang bisa terjadi. 104 00:04:41,780 --> 00:04:43,900 >> Jadi mari kita pergi ke depan dan mencoba untuk mengungkapkan hal ini di sini. 105 00:04:43,900 --> 00:04:46,240 Biarkan aku pergi ke depan dan membuka gedit. 106 00:04:46,240 --> 00:04:50,360 Aku akan pergi ke depan dan menyimpan file disebut "floats0.c" hanya untuk menjadi 107 00:04:50,360 --> 00:04:54,630 konsisten dengan contoh yang tersedia secara online, jika Anda ingin. 108 00:04:54,630 --> 00:04:58,080 Dan aku akan pergi ke depan dan mendefinisikannya sebagai berikut - 109 00:04:58,080 --> 00:05:01,540 Aku akan pergi ke depan dan berkata, int void main, seperti yang sering kita lakukan. 110 00:05:01,540 --> 00:05:07,190 >> Dan kemudian dalam program ini, aku akan menyatakan diri pelampung, sehingga 32-bit 111 00:05:07,190 --> 00:05:09,700 variabel yang disebut f, sewenang-wenang. 112 00:05:09,700 --> 00:05:13,910 Dan kemudian aku akan menyimpan di dalamnya Aku tidak tahu, sepersepuluh, jadi 0,1. 113 00:05:13,910 --> 00:05:16,590 Jadi aku akan menyatakan bahwa sebagai salah satu dibagi dengan 10, yang sempurna 114 00:05:16,590 --> 00:05:17,790 sah dalam C. 115 00:05:17,790 --> 00:05:20,460 >> Dan kemudian pada baris kedua, saya hanya ingin mencetak nilai tersebut. 116 00:05:20,460 --> 00:05:22,950 Jadi ingat bahwa kita dapat menggunakan akrab printf. 117 00:05:22,950 --> 00:05:25,420 Kami tidak ingin menggunakan% i untuk int. 118 00:05:25,420 --> 00:05:28,360 Kami ingin menggunakan% f untuk pelampung. 119 00:05:28,360 --> 00:05:33,080 Dan kemudian aku akan melakukan backslash n, kutipan dekat, koma, f, titik koma. 120 00:05:33,080 --> 00:05:34,400 >> Jadi, inilah program saya. 121 00:05:34,400 --> 00:05:35,820 Sudah ada satu bug. 122 00:05:35,820 --> 00:05:38,640 Apakah seseorang untuk siapa ini diklik sudah ingin menunjukkan setidaknya 123 00:05:38,640 --> 00:05:40,220 salah satu bug yang saya buat? 124 00:05:40,220 --> 00:05:42,470 Ya? 125 00:05:42,470 --> 00:05:42,800 Ya. 126 00:05:42,800 --> 00:05:47,860 Aku lupa "# include" di atas, mereka gejala yang jika saya mencoba untuk 127 00:05:47,860 --> 00:05:50,490 kompilasi ini akan menjadi bahwa compiler akan berteriak padaku, 128 00:05:50,490 --> 00:05:52,770 mengatakan simbol tidak terdefinisi atau sesuatu untuk efek itu. 129 00:05:52,770 --> 00:05:55,360 Ia tidak memahami sesuatu seperti printf. 130 00:05:55,360 --> 00:05:59,380 >> Jadi aku akan melakukan "# include ", Simpan file tersebut. 131 00:05:59,380 --> 00:06:00,400 Dan sekarang dalam kondisi lebih baik. 132 00:06:00,400 --> 00:06:02,690 Tapi aku juga akan menunjukkan keluar satu detail baru hari ini. 133 00:06:02,690 --> 00:06:08,620 Selain menentukan tempat pemegang seperti%% f i% s, Anda dapat 134 00:06:08,620 --> 00:06:12,320 kadang-kadang mempengaruhi perilaku dari placeholder itu. 135 00:06:12,320 --> 00:06:15,540 Misalnya, dalam kasus floating nilai titik, jika saya hanya ingin 136 00:06:15,540 --> 00:06:22,200 untuk menampilkan satu tempat desimal setelah periode, saya benar-benar bisa melakukan 0.1f. 137 00:06:22,200 --> 00:06:26,830 Jadi dengan kata lain, saya memisahkan f dan tanda persen dengan 0,1, hanya 138 00:06:26,830 --> 00:06:30,200 printf mengatakan, Anda mungkin memiliki seluruh sekelompok angka setelah desimal 139 00:06:30,200 --> 00:06:30,930 titik bagi saya. 140 00:06:30,930 --> 00:06:32,870 Tapi aku hanya ingin melihat salah satu dari mereka. 141 00:06:32,870 --> 00:06:36,280 >> Jadi aku akan pergi ke depan sekarang dan hemat program ini, masuk ke terminal saya 142 00:06:36,280 --> 00:06:41,870 jendela, dan aku akan pergi ke depan dan jenis membuat mengapung 0, masukkan. 143 00:06:41,870 --> 00:06:44,930 Saya melihat bahwa garis agak samar bahwa akan mulai lebih masuk akal seperti yang kita 144 00:06:44,930 --> 00:06:46,900 menggoda terpisah minggu ini dan berikutnya. 145 00:06:46,900 --> 00:06:50,480 Sekarang aku akan pergi ke depan dan menjalankan mengapung nol. 146 00:06:50,480 --> 00:06:52,020 Dan, sialan. 147 00:06:52,020 --> 00:06:54,880 >> Jadi ada bug lain di sini untuk beberapa alasan. 148 00:06:54,880 --> 00:07:02,490 Aku cukup yakin bahwa sepersepuluh, atau satu dibagi dengan 10, bukan 0,0. 149 00:07:02,490 --> 00:07:04,590 Mungkin aku hanya tidak melihat setidaknya cukup digit. 150 00:07:04,590 --> 00:07:08,580 Jadi kenapa tidak saya katakan dua .2 untuk melihat dua desimal, bukan hanya satu. 151 00:07:08,580 --> 00:07:11,810 Biarkan aku kembali ke jendela terminal saya di sini dan memukul beberapa kali untuk 152 00:07:11,810 --> 00:07:12,840 melihat sejarah saya. 153 00:07:12,840 --> 00:07:15,910 Jangan membuat mengapung nol lagi, dan kemudian naik lagi. 154 00:07:15,910 --> 00:07:17,730 Dan sekarang masuk. 155 00:07:17,730 --> 00:07:20,000 >> Dan sekarang aku cukup yakin ini salah. 156 00:07:20,000 --> 00:07:23,030 Dan aku bisa melakukan tiga dan empat, dan aku mungkin akan terus melihat angka nol. 157 00:07:23,030 --> 00:07:24,880 Jadi di mana bug? 158 00:07:24,880 --> 00:07:27,910 Satu dibagi 10 harus 0,1. 159 00:07:27,910 --> 00:07:30,310 Seseorang ingin mengambil bacokan di apa masalah mendasar adalah? 160 00:07:30,310 --> 00:07:32,400 Ya? 161 00:07:32,400 --> 00:07:33,420 Mereka berdua bilangan bulat. 162 00:07:33,420 --> 00:07:33,920 Jadi apa? 163 00:07:33,920 --> 00:07:37,820 Jadi dengan satu dibagi dengan 10, itu apa yang saya lakukan dalam aritmatika. 164 00:07:37,820 --> 00:07:41,185 Dan saya mendapatkan 0,1. 165 00:07:41,185 --> 00:07:41,660 >> Ya. 166 00:07:41,660 --> 00:07:43,240 Dan memang masalah itu. 167 00:07:43,240 --> 00:07:46,700 Ketika Anda mengambil sebuah integer dalam komputer dan Anda membaginya dengan bilangan bulat lain, 168 00:07:46,700 --> 00:07:50,430 komputer secara default akan berasumsi bahwa Anda ingin integer. 169 00:07:50,430 --> 00:07:54,620 Masalah meskipun, tentu saja, adalah bahwa 0,1 tidak integer. 170 00:07:54,620 --> 00:07:55,680 Ini adalah bilangan real. 171 00:07:55,680 --> 00:07:59,610 Dan jadi apa komputer tidak dengan standar itu hanya membuang 172 00:07:59,610 --> 00:08:01,070 semuanya setelah titik desimal. 173 00:08:01,070 --> 00:08:03,380 Ini tidak bulat bawah atau ke atas per se. 174 00:08:03,380 --> 00:08:06,480 Itu hanya membuang segala sesuatu setelah titik desimal. 175 00:08:06,480 --> 00:08:07,430 Dan sekarang itu masuk akal. 176 00:08:07,430 --> 00:08:09,740 Karena sekarang kita jelas kiri dengan nol. 177 00:08:09,740 --> 00:08:10,250 >> Tapi tunggu sebentar. 178 00:08:10,250 --> 00:08:11,840 Saya tidak melihat sebuah nol int. 179 00:08:11,840 --> 00:08:14,910 Aku benar-benar melihat 0.00. 180 00:08:14,910 --> 00:08:16,340 Jadi bagaimana cara mendamaikan ini sekarang? 181 00:08:16,340 --> 00:08:22,850 Jika salah satu dibagi dengan 10 adalah nol, tapi aku melihat 0.00, di mana itu mendapatkan 182 00:08:22,850 --> 00:08:24,250 dikonversi kembali ke bilangan real? 183 00:08:24,250 --> 00:08:25,500 Ya. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Tepat. 186 00:08:30,630 --> 00:08:35,600 >> Jadi di sini sejalan lima, ketika saya benar-benar menyimpan bahwa 0,1, yang kemudian 187 00:08:35,600 --> 00:08:39,549 dipotong ke nol, dalam pelampung, yang efektif setara dengan 188 00:08:39,549 --> 00:08:42,100 menyimpannya bukan sebagai int tetapi, memang, sebagai pelampung. 189 00:08:42,100 --> 00:08:46,540 Selain itu, saya kemudian menggunakan printf untuk eksplisit mencetak nomor itu untuk dua 190 00:08:46,540 --> 00:08:49,740 desimal meskipun ada tidak mungkin benar-benar ada. 191 00:08:49,740 --> 00:08:51,020 >> Jadi semacam ini menyebalkan, kan? 192 00:08:51,020 --> 00:08:53,640 Tampaknya Anda tidak dapat melakukan matematika, setidaknya pada tingkat ini 193 00:08:53,640 --> 00:08:55,600 presisi, dalam komputer. 194 00:08:55,600 --> 00:08:56,930 Tapi tentunya ada solusi. 195 00:08:56,930 --> 00:09:00,410 Apa memperbaiki sederhana mungkin kita bisa lakukan, bahkan hanya intuitif sini untuk 196 00:09:00,410 --> 00:09:01,130 memecahkan ini? 197 00:09:01,130 --> 00:09:02,380 Ya? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Putar bilangan bulat ke - 200 00:09:06,574 --> 00:09:06,976 ya. 201 00:09:06,976 --> 00:09:10,420 Bahkan jika saya tidak yakin apa yang sebenarnya terjadi di sini, jika 202 00:09:10,420 --> 00:09:13,440 fundamental harus dilakukan dengan kedua ini menjadi int, baik, kenapa tidak saya 203 00:09:13,440 --> 00:09:18,230 membuat 10,0, membuat ini 1.0, simpan file tersebut. 204 00:09:18,230 --> 00:09:20,990 Biarkan aku pergi kembali ke bawah dan mengkompilasi ulang. 205 00:09:20,990 --> 00:09:23,030 Sekarang saya jalankan. 206 00:09:23,030 --> 00:09:23,420 Dan ada - 207 00:09:23,420 --> 00:09:27,690 sekarang, aku punya satu kesepuluh direpresentasikan sebagai 0,10. 208 00:09:27,690 --> 00:09:28,420 >> Baik. 209 00:09:28,420 --> 00:09:29,220 Jadi itu tidak buruk. 210 00:09:29,220 --> 00:09:31,730 Dan biarkan saya menunjukkan salah satu cara lain kita bisa memecahkan ini. 211 00:09:31,730 --> 00:09:35,580 Biarkan aku benar-benar memutar kembali dalam waktu ketika kita memiliki ini sebagai salah satu 212 00:09:35,580 --> 00:09:36,680 kesepuluh saat yang lalu. 213 00:09:36,680 --> 00:09:40,800 Dan biarkan aku pergi ke depan dan simpan file ini sebagai nama file yang berbeda, hanya untuk 214 00:09:40,800 --> 00:09:41,750 memiliki pos pemeriksaan kecil. 215 00:09:41,750 --> 00:09:43,450 Jadi itu satu versi. 216 00:09:43,450 --> 00:09:45,520 Dan sekarang biarkan aku pergi ke depan dan melakukan satu versi yang lebih. 217 00:09:45,520 --> 00:09:48,540 Kami akan memanggil versi ini dua nol diindeks. 218 00:09:48,540 --> 00:09:51,280 >> Dan aku akan melakukan sebaliknya ini - Anda tahu apa? 219 00:09:51,280 --> 00:09:54,400 Menambahkan titik nol bekerja dalam kasus ini. 220 00:09:54,400 --> 00:09:56,060 Tapi bagaimana kalau ada orang yang variabel. 221 00:09:56,060 --> 00:09:57,680 Seharusnya 10 adalah variabel. 222 00:09:57,680 --> 00:10:00,680 Dengan kata lain, anggaplah bahwa saya tidak bisa hanya sulit-kode .0 pada akhir 223 00:10:00,680 --> 00:10:02,340 ini ekspresi aritmatika. 224 00:10:02,340 --> 00:10:05,820 Yah, aku benar-benar bisa melakukan sesuatu dalam kurung disebut pengecoran. 225 00:10:05,820 --> 00:10:11,920 Saya dapat melemparkan bahwa bilangan bulat 10 ke float, dan saya dapat melemparkan bahwa integer ke 226 00:10:11,920 --> 00:10:12,800 mengapung, juga. 227 00:10:12,800 --> 00:10:17,190 Kemudian matematika yang akan dilakukan secara efektif 1.0 dibagi dengan 10,0, 228 00:10:17,190 --> 00:10:19,250 hasil yang berjalan di f seperti sebelumnya. 229 00:10:19,250 --> 00:10:26,130 Jadi jika saya ulang ini sebagai membuat mengapung 2, dan sekarang mengapung 2, saya mendapatkan hal yang sama 230 00:10:26,130 --> 00:10:27,020 menjawab, juga. 231 00:10:27,020 --> 00:10:29,640 >> Jadi, ini adalah contoh yang cukup dibikin, untuk memecahkan masalah ini 232 00:10:29,640 --> 00:10:31,400 dengan memperkenalkan casting. 233 00:10:31,400 --> 00:10:34,410 Tapi secara umum, pengecoran akan menjadi hal yang kuat, terutama untuk 234 00:10:34,410 --> 00:10:38,180 Masalah mengatur dua dalam waktu satu minggu, ketika Anda ingin mengkonversi satu jenis data untuk 235 00:10:38,180 --> 00:10:41,800 lain yang pada akhir hari diwakili dengan cara yang sama. 236 00:10:41,800 --> 00:10:44,970 Pada akhir hari, setiap satu hal yang kita bicarakan sejauh ini adalah 237 00:10:44,970 --> 00:10:46,710 hanya ints bawah tenda. 238 00:10:46,710 --> 00:10:48,950 Atau jika itu tingkat rendah juga untuk Anda, mereka hanya nomor 239 00:10:48,950 --> 00:10:49,750 bawah tenda. 240 00:10:49,750 --> 00:10:52,850 Bahkan karakter, sekali lagi, mengingat sejak minggu nol, adalah nomor 241 00:10:52,850 --> 00:10:53,990 bawah tenda. 242 00:10:53,990 --> 00:10:57,240 >> Yang mengatakan, kita dapat mengkonversi antara berbagai jenis nomor jika 243 00:10:57,240 --> 00:10:58,060 mereka hanya bit. 244 00:10:58,060 --> 00:11:01,020 Kita dapat mengkonversi antara angka dan huruf jika mereka hanya 245 00:11:01,020 --> 00:11:02,580 bit, dan sebaliknya. 246 00:11:02,580 --> 00:11:07,170 Dan casting dengan cara ini adalah mekanisme dalam pemrograman yang memungkinkan Anda paksa 247 00:11:07,170 --> 00:11:10,970 mengubah satu tipe data yang lain. 248 00:11:10,970 --> 00:11:14,570 Sayangnya, hal ini tidak langsung seperti saya mungkin menyukai. 249 00:11:14,570 --> 00:11:19,220 >> Aku akan kembali ke mengapung 1, yang merupakan lebih sederhana, lebih 250 00:11:19,220 --> 00:11:22,830 satu langsung dengan 0,0 ditambahkan pada masing-masing. 251 00:11:22,830 --> 00:11:25,260 Dan hanya sebagai penyegaran cepat, biarkan aku pergi ke depan dan mengkompilasi ulang 252 00:11:25,260 --> 00:11:27,670 ini, membuat mengapung 2 - 253 00:11:27,670 --> 00:11:30,300 maaf, ini membuat mengapung 1. 254 00:11:30,300 --> 00:11:32,050 Dan sekarang mari kita jalankan mengapung 1. 255 00:11:32,050 --> 00:11:34,810 Dan di bagian bawah, perhatikan bahwa saya memang mendapatkan 0,1. 256 00:11:34,810 --> 00:11:36,165 Jadi, masalah terpecahkan. 257 00:11:36,165 --> 00:11:37,280 >> Tapi belum. 258 00:11:37,280 --> 00:11:40,000 Saya sekarang akan mendapatkan sedikit penasaran, dan aku akan kembali ke saya 259 00:11:40,000 --> 00:11:41,620 Pernyataan printf dan mengatakan, kau tahu apa? 260 00:11:41,620 --> 00:11:44,090 Saya ingin mengkonfirmasi bahwa ini benar-benar sepersepuluh. 261 00:11:44,090 --> 00:11:47,890 Dan aku akan ingin melihat ini untuk, katakanlah, lima tempat desimal. 262 00:11:47,890 --> 00:11:48,570 Ini bukan masalah. 263 00:11:48,570 --> 00:11:52,020 Saya mengubah dua sampai lima, Saya ulang dengan make. 264 00:11:52,020 --> 00:11:53,770 Saya jalankan sebagai mengapung 1. 265 00:11:53,770 --> 00:11:54,990 Melihat cukup bagus. 266 00:11:54,990 --> 00:11:58,570 Cek kewarasan saya mungkin berakhir di sana, tapi Aku mulai sedikit lebih berani. 267 00:11:58,570 --> 00:12:00,330 Aku akan mengubah 0,5-0,10. 268 00:12:00,330 --> 00:12:03,440 Saya ingin melihat 10 digit setelah tempat desimal. 269 00:12:03,440 --> 00:12:09,060 >> Dan aku akan pergi ke depan dan mengkompilasi ulang ini dan jalankan kembali mengapung 1. 270 00:12:09,060 --> 00:12:13,060 Aku agak menyesal karena tidak memeriksa ini lebih lanjut karena matematika saya tidak begitu 271 00:12:13,060 --> 00:12:14,320 benar lagi, tampaknya. 272 00:12:14,320 --> 00:12:15,630 Tapi tunggu dulu, mungkin itu hanya kebetulan. 273 00:12:15,630 --> 00:12:17,810 Mungkin komputer bertindak sedikit aneh. 274 00:12:17,810 --> 00:12:21,810 Biarkan aku pergi ke depan dan melakukan 20 poin desimal dan meyakinkan diri sendiri bahwa saya tahu 275 00:12:21,810 --> 00:12:22,540 bagaimana melakukan matematika. 276 00:12:22,540 --> 00:12:23,460 Aku tahu bagaimana program. 277 00:12:23,460 --> 00:12:26,960 Membuat mengapung 1, ulang, dan sialan. 278 00:12:26,960 --> 00:12:31,110 Yang benar-benar, benar-benar mendapatkan jauh dari sasaran. 279 00:12:31,110 --> 00:12:32,490 >> Jadi apa yang terjadi di sini? 280 00:12:32,490 --> 00:12:36,050 Secara intuitif, berdasarkan asumsi kita sebelumnya tentang ukuran tipe data, 281 00:12:36,050 --> 00:12:38,040 apa yang harus terjadi di sini bawah tenda? 282 00:12:38,040 --> 00:12:39,290 Ya? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Tepat. 285 00:12:43,590 --> 00:12:46,480 Jika Anda ingin ini presisi banyak, dan itu heck of a banyak presisi - 286 00:12:46,480 --> 00:12:48,770 20 angka setelah titik desimal. 287 00:12:48,770 --> 00:12:51,990 Anda mungkin tidak dapat mewakili jumlah sembarang kecuali Anda memiliki 288 00:12:51,990 --> 00:12:52,930 jumlah sewenang-wenang bit. 289 00:12:52,930 --> 00:12:54,190 Tapi kita tidak. 290 00:12:54,190 --> 00:12:57,200 Untuk pelampung, kita hanya memiliki 32 bit. 291 00:12:57,200 --> 00:13:02,260 >> Jadi, jika 32 bit hanya dapat permuted dalam cara - sama seperti manusia kami pada, panggung 292 00:13:02,260 --> 00:13:05,780 tangan atas atau bawah - dalam jumlah terbatas cara, hanya ada sejumlah terbatas 293 00:13:05,780 --> 00:13:08,640 bilangan real Anda dapat mewakili dengan bit tersebut. 294 00:13:08,640 --> 00:13:10,500 Dan sehingga komputer akhirnya akan harus 295 00:13:10,500 --> 00:13:11,730 mulai memotong sudut. 296 00:13:11,730 --> 00:13:15,500 Komputer dapat menyembunyikan detail-detail dari kami untuk sedikit waktu. 297 00:13:15,500 --> 00:13:18,880 Tetapi jika kita mulai menyembul di nomor dan melihat jauh dan lebih jauh di 298 00:13:18,880 --> 00:13:23,220 tertinggal angka di seluruh nomor, maka kita mulai melihat bahwa itu 299 00:13:23,220 --> 00:13:26,480 sebenarnya kurang lebih sama ide sepersepuluh. 300 00:13:26,480 --> 00:13:29,860 >> Dan ternyata, tragis, ada jumlah tak terbatas nomor 301 00:13:29,860 --> 00:13:35,060 kita tidak dapat mewakili secara tepat dalam komputer, setidaknya dengan terbatas 302 00:13:35,060 --> 00:13:38,030 jumlah bit, yang terbatas jumlah RAM. 303 00:13:38,030 --> 00:13:41,210 Sekarang sayangnya, terkadang hal ini memiliki konsekuensi dunia nyata. 304 00:13:41,210 --> 00:13:45,980 Jika orang tidak cukup menghargai ini atau semacam mengambil untuk diberikan fakta 305 00:13:45,980 --> 00:13:48,310 bahwa komputer mereka hanya akan melakukan apa mereka mengatakan itu harus dilakukan dan tidak 306 00:13:48,310 --> 00:13:51,430 memahami mendasari Rincian representasi - 307 00:13:51,430 --> 00:13:55,290 yang, terus terang, dalam beberapa bahasa yang disembunyikan dari pengguna, seperti di C - 308 00:13:55,290 --> 00:13:56,500 beberapa hal buruk bisa terjadi. 309 00:13:56,500 --> 00:13:58,650 >> Dan apa yang saya pikir kita akan melakukan adalah mengambil langkah mundur. 310 00:13:58,650 --> 00:14:00,420 Dan ini adalah tentang delapan menit video. 311 00:14:00,420 --> 00:14:04,200 Hal ini ditayangkan beberapa tahun yang lalu, dan memberikan wawasan sebenarnya apa yang bisa 312 00:14:04,200 --> 00:14:09,290 salah bila Anda kurang menghargai jenis rincian di sangat yang terlalu 313 00:14:09,290 --> 00:14:10,080 dunia nyata. 314 00:14:10,080 --> 00:14:12,965 Jika kita bisa meredupkan lampu selama beberapa menit. 315 00:14:12,965 --> 00:14:14,360 >> SPEAKER 1: Kita sekarang kembali ke rekayasa 316 00:14:14,360 --> 00:14:17,160 bencana terhadap Modern Marvels. 317 00:14:17,160 --> 00:14:18,680 >> Komputer - 318 00:14:18,680 --> 00:14:21,340 kita semua datang untuk menerima masalah sering membuat frustrasi 319 00:14:21,340 --> 00:14:23,170 yang pergi bersama mereka. 320 00:14:23,170 --> 00:14:27,570 Bugs, virus, dan gangguan perangkat lunak adalah harga kecil untuk membayar untuk 321 00:14:27,570 --> 00:14:28,960 kenyamanan. 322 00:14:28,960 --> 00:14:32,040 Tapi dalam teknologi tinggi dan kecepatan tinggi militer dan program luar angkasa 323 00:14:32,040 --> 00:14:38,650 aplikasi, masalah terkecil dapat diperbesar menjadi bencana. 324 00:14:38,650 --> 00:14:44,480 >> Pada tanggal 4 Juni 1996, para ilmuwan siap untuk meluncurkan berawak roket Ariane 5. 325 00:14:44,480 --> 00:14:48,700 Itu membawa satelit ilmiah dirancang untuk membangun tepat bagaimana 326 00:14:48,700 --> 00:14:53,250 medan magnet bumi berinteraksi dengan angin surya. 327 00:14:53,250 --> 00:14:57,540 Roket ini dibangun untuk Eropa Badan Antariksa dan lepas landas dari perusahaan 328 00:14:57,540 --> 00:14:59,906 fasilitas di pantai Guyana Prancis. 329 00:14:59,906 --> 00:15:03,660 >> JACK Ganssle: Pada sekitar 37 detik ke penerbangan, mereka pertama kali melihat 330 00:15:03,660 --> 00:15:04,910 sesuatu yang tidak beres. 331 00:15:04,910 --> 00:15:08,130 Nozel yang berputar di cara mereka benar-benar tidak seharusnya. 332 00:15:08,130 --> 00:15:12,380 Sekitar 40 detik dalam penerbangan, jelas kendaraan berada dalam kesulitan. 333 00:15:12,380 --> 00:15:14,400 Dan saat itulah mereka membuat keputusan untuk menghancurkannya. 334 00:15:14,400 --> 00:15:18,520 Kisaran petugas keamanan, dengan nyali luar biasa, menekan tombol, 335 00:15:18,520 --> 00:15:23,900 meledakkan roket sebelum bisa menjadi bahaya bagi keselamatan publik. 336 00:15:23,900 --> 00:15:27,810 >> SPEAKER 1: Ini adalah pelayaran perdananya dari Ariane 5, dan kehancuran 337 00:15:27,810 --> 00:15:32,020 terjadi karena cacat tertanam dalam perangkat lunak roket. 338 00:15:32,020 --> 00:15:33,980 >> JACK Ganssle: Masalah pada Ariane adalah bahwa ada sejumlah 339 00:15:33,980 --> 00:15:36,390 yang memerlukan 64 bit untuk mengekspresikan. 340 00:15:36,390 --> 00:15:39,420 Dan mereka ingin mengkonversi ke nomor 16-bit. 341 00:15:39,420 --> 00:15:43,130 Mereka beranggapan bahwa jumlah itu tidak pernah akan menjadi sangat besar, bahwa sebagian besar 342 00:15:43,130 --> 00:15:46,810 mereka digit di 64-bit nomor adalah nol. 343 00:15:46,810 --> 00:15:48,270 Mereka salah. 344 00:15:48,270 --> 00:15:51,380 >> SPEAKER 1: Ketidakmampuan satu software program untuk menerima jenis 345 00:15:51,380 --> 00:15:55,350 jumlah yang dihasilkan oleh orang lain adalah pada akar kegagalan. 346 00:15:55,350 --> 00:15:59,970 Pengembangan perangkat lunak telah menjadi sangat bagian mahal dari teknologi baru. 347 00:15:59,970 --> 00:16:03,980 Ariane 4 roket telah sangat sukses, begitu banyak perangkat lunak 348 00:16:03,980 --> 00:16:07,480 diciptakan untuk itu juga digunakan dalam Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP COYLE: Masalah mendasar adalah bahwa Ariane 5 lebih cepat, 350 00:16:11,980 --> 00:16:13,720 dipercepat lebih cepat. 351 00:16:13,720 --> 00:16:17,250 Dan perangkat lunak itu tidak dipertanggungjawabkan. 352 00:16:17,250 --> 00:16:20,770 >> SPEAKER 1: Penghancuran roket adalah bencana keuangan yang besar, 353 00:16:20,770 --> 00:16:24,200 semua karena kesalahan software menit. 354 00:16:24,200 --> 00:16:27,820 Tapi ini bukan data pertama kalinya masalah konversi dialami moderen 355 00:16:27,820 --> 00:16:30,620 teknologi roket. 356 00:16:30,620 --> 00:16:34,480 >> JACK Ganssle: Pada tahun 1991, dengan start dari Perang Teluk pertama, Patriot 357 00:16:34,480 --> 00:16:38,610 rudal mengalami serupa dari masalah konversi nomor. 358 00:16:38,610 --> 00:16:44,910 Akibatnya, 28 tentara Amerika yang tewas dan sekitar 100 lainnya luka-luka 359 00:16:44,910 --> 00:16:48,600 ketika Patriot, yang seharusnya untuk melindungi terhadap Scud masuk, 360 00:16:48,600 --> 00:16:51,630 gagal untuk menembakkan rudal. 361 00:16:51,630 --> 00:16:55,110 >> SPEAKER 1: Ketika Irak menginvasi Kuwait dan Amerika meluncurkan Desert Storm di 362 00:16:55,110 --> 00:17:00,570 awal 1991, baterai rudal Patriot dikerahkan untuk melindungi Arab Saudi 363 00:17:00,570 --> 00:17:04,760 dan Israel dari Irak Scud serangan rudal. 364 00:17:04,760 --> 00:17:09,720 Patriot adalah US menengah sistem permukaan-ke-udara yang diproduksi oleh 365 00:17:09,720 --> 00:17:11,569 perusahaan Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> THEODORE POSTOL: Ukuran Patriot pencegat itu sendiri kira-kira 367 00:17:16,410 --> 00:17:17,710 20-kaki panjang. 368 00:17:17,710 --> 00:17:20,800 Dan beratnya sekitar 2000 pound. 369 00:17:20,800 --> 00:17:22,940 Dan itu membawa hulu ledak sekitar - 370 00:17:22,940 --> 00:17:24,905 Saya pikir itu sekitar 150 pound. 371 00:17:24,905 --> 00:17:31,030 Dan hulu ledak itu sendiri adalah ledak tinggi yang memiliki 372 00:17:31,030 --> 00:17:33,270 fragmen sekitarnya. 373 00:17:33,270 --> 00:17:37,490 Casing dari hulu ledak dirancang untuk bertindak seperti gotri. 374 00:17:37,490 --> 00:17:40,720 >> SPEAKER 1: Rudal itu dilakukan empat per kontainer dan diangkut 375 00:17:40,720 --> 00:17:43,050 oleh semi trailer. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP COYLE: The Patriot anti-rudal sistem berjalan kembali 377 00:17:47,490 --> 00:17:50,710 setidaknya 20 tahun sekarang. 378 00:17:50,710 --> 00:17:54,350 Ini pada awalnya dirancang sebagai rudal pertahanan udara ke 379 00:17:54,350 --> 00:17:56,190 menembak jatuh pesawat musuh. 380 00:17:56,190 --> 00:18:02,490 Dalam Perang Teluk pertama, ketika perang datang, Angkatan Darat ingin menggunakannya 381 00:18:02,490 --> 00:18:05,535 untuk menembak jatuh rudal Scud, bukan pesawat terbang. 382 00:18:05,535 --> 00:18:09,310 Angkatan udara Irak tidak begitu banyak masalah. 383 00:18:09,310 --> 00:18:12,450 Tapi Angkatan Darat khawatir tentang Scud. 384 00:18:12,450 --> 00:18:15,950 Dan sehingga mereka mencoba untuk meng-upgrade Patriot. 385 00:18:15,950 --> 00:18:18,750 >> SPEAKER 1: mencegat rudal musuh bepergian di mach lima adalah 386 00:18:18,750 --> 00:18:20,890 akan cukup menantang. 387 00:18:20,890 --> 00:18:25,590 Tapi ketika Patriot dilarikan ke layanan, Angkatan Darat tidak menyadari adanya 388 00:18:25,590 --> 00:18:31,710 Modifikasi Irak yang membuat mereka Scud hampir mustahil untuk memukul. 389 00:18:31,710 --> 00:18:35,240 >> THEODORE POSTOL: Apa yang terjadi adalah rudal Scud yang 390 00:18:35,240 --> 00:18:36,570 datang tidak stabil. 391 00:18:36,570 --> 00:18:37,532 Mereka bergoyang-goyang. 392 00:18:37,532 --> 00:18:43,220 Alasan untuk ini adalah Irak, di Untuk mendapatkan 600 kilometer keluar dari 393 00:18:43,220 --> 00:18:47,530 Rudal 300-kilometer-range, mengambil berat dari hulu ledak depan. 394 00:18:47,530 --> 00:18:49,290 Mereka membuat hulu ledak ringan. 395 00:18:49,290 --> 00:18:53,110 Jadi sekarang Patriot berusaha datang pada Scud. 396 00:18:53,110 --> 00:18:56,470 Dan sebagian besar waktu, yang luar biasa sebagian besar waktu, itu akan hanya 397 00:18:56,470 --> 00:18:58,730 terbang oleh Scud. 398 00:18:58,730 --> 00:19:01,760 >> SPEAKER 1: Setelah sistem Patriot operator menyadari Patriot terjawab 399 00:19:01,760 --> 00:19:06,690 target, mereka meledakkan Patriots hulu ledak untuk menghindari kemungkinan 400 00:19:06,690 --> 00:19:10,300 korban jika diizinkan jatuh ke tanah. 401 00:19:10,300 --> 00:19:14,540 >> THEODORE POSTOL: Itulah yang paling orang melihat sebagai bola api besar di langit 402 00:19:14,540 --> 00:19:20,350 dan disalahpahami sebagai penyadapan Scud dari hulu ledak. 403 00:19:20,350 --> 00:19:23,320 >> SPEAKER 1: Meskipun di langit malam Patriot tampaknya berhasil 404 00:19:23,320 --> 00:19:27,530 menghancurkan rudal Scud, di Dhahran ada mungkin ada kesalahan tentang nya 405 00:19:27,530 --> 00:19:29,140 kinerja. 406 00:19:29,140 --> 00:19:34,180 Ada, sistem radar Patriot hilang melacak dari Scud masuk dan tidak pernah 407 00:19:34,180 --> 00:19:36,380 diluncurkan karena cacat perangkat lunak. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Itu adalah Israel yang pertama kali menemukan bahwa semakin lama sistem 410 00:19:42,700 --> 00:19:48,020 pada, semakin besar waktu perbedaan menjadi karena jam 411 00:19:48,020 --> 00:19:50,470 tertanam dalam komputer sistem. 412 00:19:50,470 --> 00:19:54,640 >> JACK Ganssle: Sekitar dua minggu sebelum tragedi di Dhahran, Israel 413 00:19:54,640 --> 00:19:58,440 dilaporkan ke Departemen Pertahanan bahwa sistem itu kehilangan waktu. 414 00:19:58,440 --> 00:20:01,280 Setelah sekitar delapan jam berjalan, mereka melihat bahwa sistem ini 415 00:20:01,280 --> 00:20:03,530 menjadi terasa kurang akurat. 416 00:20:03,530 --> 00:20:07,710 Departemen Pertahanan menanggapi dengan memberitahu semua baterai Patriot 417 00:20:07,710 --> 00:20:10,500 untuk tidak meninggalkan sistem untuk waktu yang lama. 418 00:20:10,500 --> 00:20:12,430 Mereka tidak pernah mengatakan apa waktu yang lama adalah. 419 00:20:12,430 --> 00:20:13,330 Delapan jam? 420 00:20:13,330 --> 00:20:13,810 10 jam? 421 00:20:13,810 --> 00:20:14,990 1.000 jam? 422 00:20:14,990 --> 00:20:17,150 Tak ada yang tahu. 423 00:20:17,150 --> 00:20:20,220 >> SPEAKER 1: The Patriot baterai ditempatkan di barak di Dhahran 424 00:20:20,220 --> 00:20:24,660 dan jam internal cacat telah di lebih dari 100 jam pada malam 425 00:20:24,660 --> 00:20:27,470 25 Feb. 426 00:20:27,470 --> 00:20:31,770 >> JACK Ganssle: Ini dilacak waktu ke akurasi sekitar sepersepuluh detik. 427 00:20:31,770 --> 00:20:34,480 Sekarang, sepersepuluh detik adalah Nomor menarik karena tidak dapat 428 00:20:34,480 --> 00:20:39,940 dinyatakan dalam biner persis, yang berarti itu tidak bisa diungkapkan tepatnya di 429 00:20:39,940 --> 00:20:42,500 setiap komputer digital modern. 430 00:20:42,500 --> 00:20:46,920 Sulit untuk percaya, tetapi menggunakan ini sebagai contoh. 431 00:20:46,920 --> 00:20:49,000 Mari kita nomor satu ketiga. 432 00:20:49,000 --> 00:20:53,150 Sepertiga tidak bisa diungkapkan dalam desimal persis. 433 00:20:53,150 --> 00:20:57,500 Satu ketiga 0,333 akan selama tak terhingga. 434 00:20:57,500 --> 00:21:02,270 Tidak ada cara untuk melakukan itu dengan akurasi mutlak dalam desimal. 435 00:21:02,270 --> 00:21:05,370 Itu persis jenis masalah yang sama yang terjadi di Patriot. 436 00:21:05,370 --> 00:21:09,880 Semakin lama sistem berlari, yang terburuk time error menjadi. 437 00:21:09,880 --> 00:21:13,840 >> SPEAKER 1: Setelah 100 jam operasi, kesalahan dalam waktu hanya 438 00:21:13,840 --> 00:21:16,140 sekitar sepertiga detik. 439 00:21:16,140 --> 00:21:20,800 Tapi dalam hal penargetan rudal bepergian di mach lima, itu mengakibatkan 440 00:21:20,800 --> 00:21:24,410 kesalahan pelacakan lebih dari 600 meter. 441 00:21:24,410 --> 00:21:27,670 Ini akan menjadi kesalahan fatal bagi tentara di Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> THEODORE POSTOL: Apa yang terjadi adalah Scud peluncuran terdeteksi pada awal 443 00:21:33,450 --> 00:21:34,280 satelit peringatan. 444 00:21:34,280 --> 00:21:38,550 Dan mereka tahu bahwa Scud datang arah umum mereka. 445 00:21:38,550 --> 00:21:41,000 Mereka tidak tahu di mana itu berasal. 446 00:21:41,000 --> 00:21:43,900 >> SPEAKER 1: Sekarang sudah sampai ke radar komponen sistem Patriot 447 00:21:43,900 --> 00:21:48,910 membela Dhahran untuk mencari dan menjaga melacak rudal musuh yang masuk. 448 00:21:48,910 --> 00:21:50,580 >> JACK Ganssle: Radar sangat cerdas. 449 00:21:50,580 --> 00:21:53,770 Ini akan benar-benar melacak posisi yang Scud dan kemudian memprediksi mana 450 00:21:53,770 --> 00:21:57,160 mungkin akan menjadi waktu berikutnya radar mengirimkan pulsa keluar. 451 00:21:57,160 --> 00:21:58,870 Yang disebut gerbang jangkauan. 452 00:21:58,870 --> 00:22:04,020 >> THEODORE POSTOL: Kemudian setelah Patriot MEMUTUSKAN cukup waktu telah berlalu pergi 453 00:22:04,020 --> 00:22:09,420 kembali dan memeriksa lokasi berikutnya untuk ini terdeteksi objek, itu akan kembali. 454 00:22:09,420 --> 00:22:14,450 Jadi ketika kembali ke salah tempat, kemudian melihat ada objek. 455 00:22:14,450 --> 00:22:18,200 Dan memutuskan bahwa tidak ada objek, itu adalah deteksi palsu, dan 456 00:22:18,200 --> 00:22:19,680 turun trek. 457 00:22:19,680 --> 00:22:22,970 >> SPEAKER 1: masuk Scud menghilang dari layar radar, dan 458 00:22:22,970 --> 00:22:26,050 detik kemudian membanting ke markas. 459 00:22:26,050 --> 00:22:31,950 The Scud menewaskan 28 dan adalah yang terakhir dipecat selama Perang Teluk pertama. 460 00:22:31,950 --> 00:22:37,700 Tragisnya, perangkat lunak diperbarui tiba di Dhahran hari berikutnya. 461 00:22:37,700 --> 00:22:41,800 Perangkat lunak cacat telah diperbaiki, menutup satu bab dalam bermasalah 462 00:22:41,800 --> 00:22:43,690 sejarah rudal Patriot. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot sebenarnya merupakan singkatan untuk bertahap Array TRACKING 465 00:22:50,710 --> 00:22:51,960 Intercept Of Target. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J Malan: Baiklah, sehingga menenangkan contoh, untuk memastikan. 468 00:23:00,840 --> 00:23:03,430 Dan untungnya, ini tingkat yang lebih rendah bug bukan sesuatu yang kita akan 469 00:23:03,430 --> 00:23:06,220 biasanya harus menghargai, tentu tidak dengan beberapa kami 470 00:23:06,220 --> 00:23:07,360 awal program. 471 00:23:07,360 --> 00:23:10,450 Sebaliknya, sebagian besar bug Anda akan pertemuan akan logis di alam, 472 00:23:10,450 --> 00:23:12,900 sintaksis di alam dimana kode hanya tidak bekerja dengan baik. 473 00:23:12,900 --> 00:23:14,140 Dan kau tahu itu cukup cepat. 474 00:23:14,140 --> 00:23:16,850 >> Tapi terutama ketika kita sampai ke akhir semester, itu akan 475 00:23:16,850 --> 00:23:20,620 menjadi lebih dan lebih dari kemungkinan untuk benar-benar berpikir keras tentang desain 476 00:23:20,620 --> 00:23:22,960 program-program anda dan mendasari perwakilan 477 00:23:22,960 --> 00:23:24,520 di sana juga, dari data. 478 00:23:24,520 --> 00:23:28,010 Misalnya, kami akan memperkenalkan MySQL, yang merupakan mesin database populer 479 00:23:28,010 --> 00:23:30,850 yang dapat Anda gunakan dengan website untuk menyimpan data di ujung belakang. 480 00:23:30,850 --> 00:23:34,630 Dan Anda harus mulai memutuskan di akhir semester tidak hanya apa 481 00:23:34,630 --> 00:23:38,790 jenis data sepanjang jalur tersebut untuk menggunakan tapi persis berapa banyak bit untuk digunakan, 482 00:23:38,790 --> 00:23:42,740 apakah Anda ingin menyimpan tanggal sebagai tanggal dan waktu sebagai kali, dan juga 483 00:23:42,740 --> 00:23:46,890 hal-hal seperti seberapa besar Anda ingin ID unik untuk menjadi untuk, misalnya, pengguna 484 00:23:46,890 --> 00:23:47,680 dalam database Anda. 485 00:23:47,680 --> 00:23:51,210 >> Bahkan, jika beberapa dari Anda telah memiliki Facebook account untuk beberapa waktu, 486 00:23:51,210 --> 00:23:53,680 dan Anda tahu bagaimana untuk mendapatkan akses untuk User ID - 487 00:23:53,680 --> 00:23:57,930 yang kadang-kadang muncul dalam Anda URL profil, kecuali jika Anda telah memilih 488 00:23:57,930 --> 00:24:02,070 julukan untuk URL, atau jika Anda sudah digunakan Facebook Grafik API, 489 00:24:02,070 --> 00:24:05,510 API yang tersedia untuk umum dengan mana Anda dapat meminta Facebook untuk data mentah - 490 00:24:05,510 --> 00:24:07,580 Anda dapat melihat apa ID numerik Anda. 491 00:24:07,580 --> 00:24:10,880 Dan beberapa tahun yang lalu, Facebook dasarnya harus mengubah dari menggunakan 492 00:24:10,880 --> 00:24:15,980 setara dengan int menggunakan panjang lama karena dari waktu ke waktu sebagai pengguna datang 493 00:24:15,980 --> 00:24:19,780 dan pergi dan membuat banyak akun dan account palsu, bahkan mereka sangat mudah 494 00:24:19,780 --> 00:24:24,630 mampu knalpot sesuatu seperti 4 miliar nilai kemungkinan seperti int. 495 00:24:24,630 --> 00:24:28,340 >> Jadi lebih pada orang-orang jenis masalah di jalan, juga. 496 00:24:28,340 --> 00:24:30,750 Baiklah, sehingga mengusir. 497 00:24:30,750 --> 00:24:31,670 Itu ketidaktepatan. 498 00:24:31,670 --> 00:24:32,730 Beberapa pengumuman cepat. 499 00:24:32,730 --> 00:24:35,710 Jadi bagian resmi mulai datang ini Minggu, Senin, Selasa. 500 00:24:35,710 --> 00:24:39,080 Anda akan mendengar melalui email akhir pekan ini untuk tugas bagian Anda. 501 00:24:39,080 --> 00:24:42,570 Dan Anda juga di sini pada saat itu akan bagaimana untuk mengubah bagian Anda jika Anda 502 00:24:42,570 --> 00:24:45,660 jadwal sekarang telah berubah atau Anda tingkat kenyamanan kini telah berubah. 503 00:24:45,660 --> 00:24:49,380 Sementara P-set satu dan satu hacker yang karena ini Kamis dengan pilihan untuk 504 00:24:49,380 --> 00:24:52,450 memperpanjang batas waktu per spesifikasi sampai Jumat 505 00:24:52,450 --> 00:24:53,830 dengan cara yang khas. 506 00:24:53,830 --> 00:24:57,500 >> Sadarilah bahwa disertakan dengan masalah spesifikasi set adalah petunjuk tentang 507 00:24:57,500 --> 00:25:02,770 bagaimana menggunakan alat CS50, membuat, serta beberapa CS50 alat khusus 508 00:25:02,770 --> 00:25:06,540 seperti gaya 50, yang dapat memberikan Anda dengan umpan balik secara dinamis pada 509 00:25:06,540 --> 00:25:10,230 kualitas gaya kode Anda dan juga memeriksa 50, yang dapat menyediakan Anda dengan 510 00:25:10,230 --> 00:25:13,160 umpan balik yang dinamis untuk Anda kebenaran kode itu. 511 00:25:13,160 --> 00:25:16,850 Memaafkan itu kita masih menyetrika keluar beberapa kinks dengan cek 50. 512 00:25:16,850 --> 00:25:21,490 Beberapa teman sekelas yang memang mulai sekitar 04:00 pada Jumat malam ketika 513 00:25:21,490 --> 00:25:25,130 spec naik menyadari sejak saat itu beberapa bug bahwa kita bekerja 514 00:25:25,130 --> 00:25:29,010 melalui, dan permintaan maaf bagi siapa saja yang telah mengalami frustrasi yang tidak semestinya. 515 00:25:29,010 --> 00:25:30,340 Kesalahannya adalah milikku. 516 00:25:30,340 --> 00:25:34,080 Tapi kita akan menindaklanjuti CS50 membahas kapan yang diselesaikan. 517 00:25:34,080 --> 00:25:35,700 >> Jadi kata pada nilai sendiri. 518 00:25:35,700 --> 00:25:38,990 Jadi itu akan menjadi satu atau dua minggu sebelum Anda mulai mendapatkan umpan balik pada set masalah 519 00:25:38,990 --> 00:25:40,640 karena Anda belum memiliki sesama mengajar. 520 00:25:40,640 --> 00:25:44,510 Dan bahkan kemudian, kita akan mulai untuk mengevaluasi masalah C set sebelum kita 521 00:25:44,510 --> 00:25:46,970 kembali dan mengevaluasi awal sehingga bahwa Anda mendapatkan lebih relevan 522 00:25:46,970 --> 00:25:48,150 umpan balik lebih cepat. 523 00:25:48,150 --> 00:25:51,870 Tapi secara umum per silabus, CS50 set masalah dievaluasi sepanjang 524 00:25:51,870 --> 00:25:53,580 setelah empat sumbu - 525 00:25:53,580 --> 00:25:55,760 ruang lingkup, ketepatan, desain, dan gaya. 526 00:25:55,760 --> 00:25:59,210 >> Lingkup akan menjadi nomor biasanya antara nol dan lima yang 527 00:25:59,210 --> 00:26:01,830 menangkap berapa banyak bagian yang Anda menggigit. 528 00:26:01,830 --> 00:26:03,750 Biasanya, Anda ingin ini menjadi lima. 529 00:26:03,750 --> 00:26:05,300 Anda setidaknya mencoba segalanya. 530 00:26:05,300 --> 00:26:09,330 Dan melihat itu adalah faktor perkalian sehingga hanya melakukan bagian dari 531 00:26:09,330 --> 00:26:12,520 Masalah set bukanlah strategi terbaik. 532 00:26:12,520 --> 00:26:15,610 >> Sementara itu, lebih jelas adalah pentingnya kebenaran - 533 00:26:15,610 --> 00:26:18,620 saja program yang benar dengan menghormati dengan spesifikasi? 534 00:26:18,620 --> 00:26:21,510 Hal ini sengaja berbobot lebih berat dari yang lain dua sumbu dengan 535 00:26:21,510 --> 00:26:24,450 faktor tiga karena kita menyadari yang biasanya Anda akan menghabiskan 536 00:26:24,450 --> 00:26:28,600 lebih banyak waktu memburu beberapa bug, mendapatkan kode Anda untuk bekerja, maka Anda 537 00:26:28,600 --> 00:26:31,540 Indentasi dan memilih nama variabel yang tepat dan 538 00:26:31,540 --> 00:26:33,800 seperti yang di ujung spektrum gaya. 539 00:26:33,800 --> 00:26:36,160 >> Itu bukan untuk mengatakan gaya tidak penting, dan kami akan memberitakannya atas 540 00:26:36,160 --> 00:26:37,920 waktu baik dalam ceramah dan dalam beberapa bagian. 541 00:26:37,920 --> 00:26:40,520 Gaya mengacu pada estetika kode Anda. 542 00:26:40,520 --> 00:26:43,980 Anda telah memilih dengan baik-nama variabel yang singkat tapi agak 543 00:26:43,980 --> 00:26:44,680 deskriptif? 544 00:26:44,680 --> 00:26:47,840 Apakah kode Anda menjorok seperti yang Anda lihat dalam ceramah dan secara konsisten 545 00:26:47,840 --> 00:26:49,070 dengan gaya 50? 546 00:26:49,070 --> 00:26:51,220 >> Terakhir adalah desain yang tepat ada di tengah. 547 00:26:51,220 --> 00:26:54,090 Desain adalah salah satu sulit untuk menempatkan jari pada karena itu jauh lebih 548 00:26:54,090 --> 00:26:55,000 subyektif. 549 00:26:55,000 --> 00:26:58,610 Tapi itu mungkin yang paling penting dari tiga sumbu dari segi pedagogis 550 00:26:58,610 --> 00:27:02,050 nilai dari waktu ke waktu dan bahwa ini akan menjadi kesempatan sesama mengajar untuk 551 00:27:02,050 --> 00:27:04,110 menyediakan Anda dengan umpan balik kualitatif. 552 00:27:04,110 --> 00:27:08,100 Memang, dalam CS50 meskipun kami memiliki formula ini dan skor, di akhir 553 00:27:08,100 --> 00:27:11,350 hari ini sangat sengaja ember sangat kecil - nilai titik 554 00:27:11,350 --> 00:27:13,460 antara nol dan tiga dan nol dan lima. 555 00:27:13,460 --> 00:27:17,800 Kami tidak mencoba untuk menarik garis yang sangat kasar antara set masalah atau antara 556 00:27:17,800 --> 00:27:21,490 siswa melainkan fokus sebanyak kita bisa pada kualitatif, tulisan tangan 557 00:27:21,490 --> 00:27:25,490 umpan balik, baik diketik atau lisan dari sesama mengajar tertentu, 558 00:27:25,490 --> 00:27:27,050 Anda akan mengenal cukup baik. 559 00:27:27,050 --> 00:27:32,340 >> Tapi secara umum, mereka adalah bobot bahwa berbagai sumbu akan memiliki. 560 00:27:32,340 --> 00:27:35,480 Sementara itu, juga, itu layak disimpan dalam pikiran bahwa Anda tidak harus mengasumsikan bahwa 561 00:27:35,480 --> 00:27:38,870 tiga dari lima adalah 60% dan Oleh karena itu kasar gagal. 562 00:27:38,870 --> 00:27:41,410 Tiga sengaja dimaksudkan untuk menjadi semacam tengah jalan yang baik. 563 00:27:41,410 --> 00:27:43,480 Jika Anda mendapatkan bertiga di awal semester, yang 564 00:27:43,480 --> 00:27:46,340 memang dimaksudkan untuk menjadi baik tempat untuk memulai. 565 00:27:46,340 --> 00:27:50,510 Jika Anda mendapatkan berpasangan, pameran, ada pasti beberapa pekerjaan yang harus membayar sedikit 566 00:27:50,510 --> 00:27:53,250 perhatian lebih, untuk mengambil keuntungan bagian dan jam kantor. 567 00:27:53,250 --> 00:27:54,590 >> Jika Anda mendapatkan merangkak dan balita, besar. 568 00:27:54,590 --> 00:27:57,430 Tapi sungguh, kami berharap dapat melihat lintasan kalangan siswa - sangat 569 00:27:57,430 --> 00:28:00,575 individual per siswa, tapi mulai semester di sini semacam 570 00:28:00,575 --> 00:28:04,100 dua sampai tiga rentang tetapi berakhir di sini di 04:56 jangkauan. 571 00:28:04,100 --> 00:28:05,440 Itulah yang kita benar-benar mencari. 572 00:28:05,440 --> 00:28:09,590 Dan kita diingat bahwa delta Anda menunjukkan antara minggu nol dan minggu 573 00:28:09,590 --> 00:28:12,170 12 ketika saya melakukan nilai. 574 00:28:12,170 --> 00:28:16,380 Itu tidak masalah bagi kami benar-benar bagaimana Anda adil di awal jika Anda 575 00:28:16,380 --> 00:28:19,330 lintasan memang atas dan kuat. 576 00:28:19,330 --> 00:28:24,000 >> Kejujuran akademik - jadi biar memakai saya suara lebih serius untuk sesaat. 577 00:28:24,000 --> 00:28:28,510 Jadi kursus ini memiliki perbedaan mengirimkan siswa lebih dari yang lain 578 00:28:28,510 --> 00:28:30,950 dalam sejarah ke papan iklan, saya percaya. 579 00:28:30,950 --> 00:28:34,220 Kami memiliki semacam menghitung ini titik seberapa sering hal ini terjadi. 580 00:28:34,220 --> 00:28:37,090 Dan itu bukan karena siswa di 50 adalah lebih jujur ​​daripada mereka 581 00:28:37,090 --> 00:28:38,690 teman sekelas di tempat lain. 582 00:28:38,690 --> 00:28:42,800 Tetapi menyadari juga, bahwa kami sangat baik dalam mendeteksi hal semacam ini. 583 00:28:42,800 --> 00:28:45,920 >> Dan itu adalah keuntungan bahwa kelas ilmu komputer telah di kita 584 00:28:45,920 --> 00:28:49,110 dapat dan kita membandingkan semua siswa Masalahnya set berpasangan melawan setiap 585 00:28:49,110 --> 00:28:51,470 lain, tidak hanya tahun ini tetapi semua tahun-tahun sebelumnya. 586 00:28:51,470 --> 00:28:55,080 Kami memiliki kemampuan, seperti mahasiswa di kelas, ke Google dan cari kode 587 00:28:55,080 --> 00:28:57,440 di situs seperti github dan forum diskusi. 588 00:28:57,440 --> 00:29:00,840 Ada benar-benar solusi untuk CS50 ini p-set mengambang di sekitar sana. 589 00:29:00,840 --> 00:29:02,710 Tapi jika Anda dapat menemukan mereka, kita bisa menemukan mereka. 590 00:29:02,710 --> 00:29:07,130 Dan semua ini sangat banyak otomatis dan mudah dan menyedihkan bagi kita untuk menemukan. 591 00:29:07,130 --> 00:29:10,990 >> Tapi saya ingin menekankan, juga, bahwa Kebijakan kejujuran akademik program adalah 592 00:29:10,990 --> 00:29:13,960 sangat dimaksudkan untuk menjadi sangat banyak kebalikan dari semangat itu. 593 00:29:13,960 --> 00:29:17,506 Memang, tahun ini kami sudah diulang hal dalam silabus untuk menjadi ini, dot 594 00:29:17,506 --> 00:29:19,790 dot dot, dengan lebih detail dalam silabus. 595 00:29:19,790 --> 00:29:22,860 Namun tema yang menyeluruh dalam kursus benar-benar masuk akal. 596 00:29:22,860 --> 00:29:26,160 Kami menyadari bahwa ada yang signifikan jumlah pedagogis 597 00:29:26,160 --> 00:29:30,550 nilai dalam berkolaborasi, sampai batas tertentu, dengan teman sekelas, dimana Anda 598 00:29:30,550 --> 00:29:33,700 dua atau tiga atau Anda Anda lebih banyak berdiri di papan putih 599 00:29:33,700 --> 00:29:35,670 whiteboarding, sehingga untuk berbicara, ide-ide Anda - 600 00:29:35,670 --> 00:29:39,480 menuliskan pseudocode dalam gambar, diagram apa yang harus Mario jika 601 00:29:39,480 --> 00:29:41,350 Anda menulis pertama dalam pseudocode. 602 00:29:41,350 --> 00:29:43,240 Apa yang harus algoritma serakah - 603 00:29:43,240 --> 00:29:46,100 bagaimana seharusnya berperilaku per Masalahnya set satu? 604 00:29:46,100 --> 00:29:50,440 >> Dan begitu menyadari perilaku yang bahwa kami mendorong sangat 605 00:29:50,440 --> 00:29:51,470 banyak sepanjang garis itu. 606 00:29:51,470 --> 00:29:53,890 Dan dalam silabus, Anda akan melihat Seluruh sekelompok peluru di bawah 607 00:29:53,890 --> 00:29:57,740 kategori wajar dan tidak wajar kategori yang membantu kami membantu 608 00:29:57,740 --> 00:30:00,740 Anda membungkus pikiran Anda sekitar mana kita menarik garis itu. 609 00:30:00,740 --> 00:30:04,340 Dan secara umum, aturan praktis yang layak adalah bahwa jika Anda sedang berjuang untuk memecahkan 610 00:30:04,340 --> 00:30:07,990 beberapa bug dan teman Anda atau teman sekelas yang duduk di sebelah Anda, itu 611 00:30:07,990 --> 00:30:11,530 wajar bagi Anda untuk menunjukkan dia kode Anda dan berkata, hei, Anda dapat membantu 612 00:30:11,530 --> 00:30:13,700 saya mencari tahu apa yang salah di sini? 613 00:30:13,700 --> 00:30:17,110 >> Kami tidak biasanya merangkul sisi berlawanan. 614 00:30:17,110 --> 00:30:20,730 Ini bukan jawaban yang benar untuk Anda teman atau teman sekelas di sini untuk mengatakan, oh, 615 00:30:20,730 --> 00:30:22,510 hanya melihat saya dan tokoh keluar dari itu. 616 00:30:22,510 --> 00:30:24,400 Itu adalah semacam masuk akal. 617 00:30:24,400 --> 00:30:27,750 Tapi setelah orang lain, otak lain, sepasang mata melihat 618 00:30:27,750 --> 00:30:31,620 layar Anda atau melihat kode Anda dan mengatakan, apakah Anda yakin Anda ingin 619 00:30:31,620 --> 00:30:32,760 memiliki loop di sini? 620 00:30:32,760 --> 00:30:34,800 Atau apakah kamu yakin bahwa titik koma di sini? 621 00:30:34,800 --> 00:30:37,090 Atau oh, itu pesan kesalahan berarti ini. 622 00:30:37,090 --> 00:30:39,580 Mereka sangat wajar dan mendorong perilaku. 623 00:30:39,580 --> 00:30:44,010 >> Kasus-kasus yang saya menyinggung sebelumnya mendidih hingga ketika siswa 624 00:30:44,010 --> 00:30:47,350 larut malam membuat penilaian yang buruk keputusan dan email kode mereka untuk 625 00:30:47,350 --> 00:30:50,130 orang lain atau hanya mengatakan, di sini, di Dropbox atau 626 00:30:50,130 --> 00:30:51,610 Googling larut malam. 627 00:30:51,610 --> 00:30:54,880 Dan jadi saya akan mendorong dan mohon, jika Anda memiliki orang-orang tak terelakkan 628 00:30:54,880 --> 00:30:58,450 saat-saat stres, Anda menabrak terhadap batas waktu, Anda tidak terlambat 629 00:30:58,450 --> 00:31:01,490 hari karena sudah Jumat pada saat itu titik, email kepala kursus atau 630 00:31:01,490 --> 00:31:02,330 sendiri secara langsung. 631 00:31:02,330 --> 00:31:04,790 Katakanlah, dengarkan, aku di saya titik melanggar sini. 632 00:31:04,790 --> 00:31:06,660 Mari kita memiliki percakapan dan mencari tahu. 633 00:31:06,660 --> 00:31:10,400 Beralih ke web atau tidak beberapa lainnya perilaku yang wajar adalah tidak pernah 634 00:31:10,400 --> 00:31:13,070 solusi, dan terlalu banyak Anda teman sekelas tidak lagi di sini 635 00:31:13,070 --> 00:31:15,150 kampus karena itu penilaian buruk. 636 00:31:15,150 --> 00:31:17,840 Tapi itu sangat mudah untuk rok garis itu. 637 00:31:17,840 --> 00:31:22,950 >> Dan di sini adalah sedikit gambaran untuk menghibur Anda dari Reddit sehingga sekarang 638 00:31:22,950 --> 00:31:25,720 semuanya akan beres. 639 00:31:25,720 --> 00:31:30,210 >> Jadi rekap cepat, maka, di mana kita tinggalkan. 640 00:31:30,210 --> 00:31:33,690 Jadi minggu lalu, ingat bahwa kami memperkenalkan kondisi, tidak Scratch 641 00:31:33,690 --> 00:31:34,880 tapi di C saat ini. 642 00:31:34,880 --> 00:31:38,300 Dan ada beberapa sintaks baru tapi benar-benar tidak ada ide-ide baru per se. 643 00:31:38,300 --> 00:31:42,630 Kami memiliki ekspresi Boolean bahwa kita bisa atau bersama-sama dengan dua vertikal 644 00:31:42,630 --> 00:31:46,490 bar atau dan bersama-sama dengan dua ampersands, mengatakan bahwa kedua kiri 645 00:31:46,490 --> 00:31:49,990 dan hak harus benar untuk ini untuk mengeksekusi. 646 00:31:49,990 --> 00:31:53,150 Kemudian kami memiliki switch, yang kita melihat di singkat, tapi saya mengusulkan benar-benar 647 00:31:53,150 --> 00:31:56,830 hanya sintaks yang berbeda untuk mencapai yang sama tujuan jika Anda tahu di 648 00:31:56,830 --> 00:31:59,270 memajukan apa kasus Anda akan menjadi. 649 00:31:59,270 --> 00:32:00,160 >> Kami melihat loop. 650 00:32:00,160 --> 00:32:03,340 A untuk loop mungkin yang paling umum, atau setidaknya salah satu yang orang 651 00:32:03,340 --> 00:32:05,330 biasanya meraih naluriah. 652 00:32:05,330 --> 00:32:08,240 Meski terlihat agak samar, Anda akan melihat banyak, banyak contoh ini 653 00:32:08,240 --> 00:32:11,590 tak lama, Anda memiliki sudah akhir pekan lalu. 654 00:32:11,590 --> 00:32:14,280 Sementara loop dapat sama mencapai hal yang sama. 655 00:32:14,280 --> 00:32:17,550 Tetapi jika Anda ingin melakukan apapun incrementation atau memperbarui 656 00:32:17,550 --> 00:32:20,230 nilai variabel, Anda harus melakukannya lebih manual daripada 657 00:32:20,230 --> 00:32:22,440 untuk loop sebelum memungkinkan. 658 00:32:22,440 --> 00:32:25,310 Dan kemudian ada do-while loop, yang memungkinkan kita untuk melakukan sesuatu pada 659 00:32:25,310 --> 00:32:28,460 setidaknya sekali sementara sesuatu lain benar. 660 00:32:28,460 --> 00:32:31,550 Dan ini sangat baik untuk program atau game di mana Anda ingin 661 00:32:31,550 --> 00:32:33,810 untuk meminta pengguna untuk sesuatu setidaknya sekali. 662 00:32:33,810 --> 00:32:37,110 Dan kemudian jika dia tidak bekerja sama, Anda mungkin ingin melakukannya 663 00:32:37,110 --> 00:32:38,420 lagi dan lagi. 664 00:32:38,420 --> 00:32:41,270 >> Dengan variabel, sementara itu, kami memiliki garis-garis kode seperti ini, yang bisa 665 00:32:41,270 --> 00:32:41,950 menjadi dua baris. 666 00:32:41,950 --> 00:32:44,830 Anda bisa mendeklarasikan int disebut counter, koma. 667 00:32:44,830 --> 00:32:47,660 Atau Anda dapat mendeklarasikan dan mendefinisikannya, sehingga untuk berbicara. 668 00:32:47,660 --> 00:32:49,950 Berikan nilai pada waktu yang sama. 669 00:32:49,950 --> 00:32:51,890 >> Dan kemudian terakhir, kami berbicara tentang fungsi. 670 00:32:51,890 --> 00:32:54,270 Dan ini adalah contoh yang bagus di arti bahwa ia menggambarkan 671 00:32:54,270 --> 00:32:55,840 dua jenis fungsi. 672 00:32:55,840 --> 00:32:59,030 Salah satunya adalah GetString (), yang, sekali lagi, mendapatkan string dari pengguna. 673 00:32:59,030 --> 00:33:02,040 Tapi GetString () adalah jenis yang menarik, sejauh kita sudah menggunakannya, 674 00:33:02,040 --> 00:33:05,620 karena kita selalu menggunakannya dengan sesuatu di sisi kiri dari 675 00:33:05,620 --> 00:33:06,600 tanda sama. 676 00:33:06,600 --> 00:33:09,830 Itu adalah untuk mengatakan bahwa GetString () mengembalikan nilai. 677 00:33:09,830 --> 00:33:11,970 Ini kembali, tentu saja, string. 678 00:33:11,970 --> 00:33:15,130 Dan kemudian di sisi kiri, kami hanya menyimpan string yang dalam sebuah 679 00:33:15,130 --> 00:33:16,580 variabel yang disebut nama. 680 00:33:16,580 --> 00:33:21,100 >> Hal ini berbeda, dalam arti, dari printf karena printf, setidaknya kami 681 00:33:21,100 --> 00:33:23,540 Penggunaan di sini, tidak mengembalikan apa-apa. 682 00:33:23,540 --> 00:33:24,960 Sebagai samping, itu tidak kembali sesuatu. 683 00:33:24,960 --> 00:33:26,380 Kami hanya tidak peduli apa itu. 684 00:33:26,380 --> 00:33:29,090 Tapi itu memiliki apa yang disebut efek samping. 685 00:33:29,090 --> 00:33:31,840 Dan apa itu efek samping dalam setiap kasus yang telah kita lihat sejauh ini? 686 00:33:31,840 --> 00:33:34,720 Apa printf lakukan? 687 00:33:34,720 --> 00:33:37,780 Mencetak sesuatu ke layar, menampilkan teks atau angka atau sesuatu 688 00:33:37,780 --> 00:33:38,380 di layar. 689 00:33:38,380 --> 00:33:41,170 Dan itu hanya dianggap sebagai efek samping karena itu tidak benar-benar menyerahkan 690 00:33:41,170 --> 00:33:41,900 itu kembali kepada saya. 691 00:33:41,900 --> 00:33:44,770 Ini bukan jawaban dalam kotak hitam yang saya dapat kemudian 692 00:33:44,770 --> 00:33:46,130 menjangkau ke dan ambil. 693 00:33:46,130 --> 00:33:49,160 Ini hanya melakukannya sendiri, banyak seperti Colton yang terhubung ke ini 694 00:33:49,160 --> 00:33:52,560 kotak hitam pekan lalu, dan dia entah bagaimana ajaib menggambar di papan tulis 695 00:33:52,560 --> 00:33:54,500 tanpa aku benar-benar terlibat. 696 00:33:54,500 --> 00:33:55,560 Itu akan menjadi efek samping. 697 00:33:55,560 --> 00:33:59,100 Tapi kalau aku benar-benar harus mencapai kembali di sini dan mengatakan, oh, di sini adalah string 698 00:33:59,100 --> 00:34:02,040 dari pengguna, yang akan menjadi nilai kembali. 699 00:34:02,040 --> 00:34:05,650 >> Dan sejauh ini kita hanya digunakan fungsi bahwa orang lain telah menulis. 700 00:34:05,650 --> 00:34:09,219 Tapi kita benar-benar dapat melakukan hal- macam hal diri kita sendiri. 701 00:34:09,219 --> 00:34:12,730 Jadi aku akan pergi ke CS50 alat lagi. 702 00:34:12,730 --> 00:34:16,020 Biarkan aku menutup tab yang kita telah membuka beberapa saat yang lalu. 703 00:34:16,020 --> 00:34:18,530 Dan biarkan aku pergi ke depan dan membuat file baru. 704 00:34:18,530 --> 00:34:22,400 Dan aku akan pergi ke depan dan menyebutnya satu positive.c. 705 00:34:22,400 --> 00:34:24,770 Jadi saya ingin melakukan sesuatu dengan angka positif di sini. 706 00:34:24,770 --> 00:34:27,219 Jadi aku akan pergi ke depan dan melakukan int - 707 00:34:27,219 --> 00:34:28,000 maaf - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 Mari kita tidak membuat sama kesalahan seperti sebelumnya. 710 00:34:34,280 --> 00:34:40,020 Int main (void), terbuka keriting brace, ditutup keriting brace. 711 00:34:40,020 --> 00:34:41,639 >> Dan sekarang saya ingin melakukan hal berikut. 712 00:34:41,639 --> 00:34:44,600 Aku ingin menulis sebuah program yang menegaskan bahwa pengguna memberikan 713 00:34:44,600 --> 00:34:46,770 saya bilangan bulat positif. 714 00:34:46,770 --> 00:34:50,969 Jadi tidak ada fungsi GetPositiveInt dalam CS50 perpustakaan. 715 00:34:50,969 --> 00:34:52,610 Hanya ada getInt (). 716 00:34:52,610 --> 00:34:55,790 Tapi itu OK karena saya memiliki konstruksi dengan yang saya dapat memaksakan 717 00:34:55,790 --> 00:34:59,360 sedikit lebih kendala pada nilai tersebut. 718 00:34:59,360 --> 00:35:00,990 Aku bisa melakukan sesuatu seperti ini. 719 00:35:00,990 --> 00:35:02,780 >> Jadi int n - 720 00:35:02,780 --> 00:35:04,920 dan jika Anda sedang mengetik bersama, baru menyadari Aku akan kembali dan 721 00:35:04,920 --> 00:35:06,430 mengubah beberapa hal dalam sekejap - 722 00:35:06,430 --> 00:35:09,960 jadi int n sama getInt (). 723 00:35:09,960 --> 00:35:11,780 Dan itu akan menempatkan inside int n. 724 00:35:11,780 --> 00:35:13,830 Dan biarkan aku menjadi lebih deskriptif. 725 00:35:13,830 --> 00:35:23,270 Izinkan saya mengatakan sesuatu seperti saya menuntut agar Anda memberi saya bilangan bulat positif. 726 00:35:23,270 --> 00:35:23,550 >> Baik. 727 00:35:23,550 --> 00:35:25,250 Jadi hanya sedikit petunjuk. 728 00:35:25,250 --> 00:35:26,270 Dan sekarang apa yang bisa saya lakukan? 729 00:35:26,270 --> 00:35:29,840 Yah, aku sudah tahu dari yang sederhana saya kondisi atau cabang, sama seperti aku 730 00:35:29,840 --> 00:35:36,100 telah di Scratch, saya bisa mengatakan sesuatu seperti jika n kurang dari atau sama dengan 731 00:35:36,100 --> 00:35:44,460 nol, maka saya ingin melakukan sesuatu seperti, yang tidak positif. 732 00:35:44,460 --> 00:35:45,560 Dan kemudian aku bisa lakukan - 733 00:35:45,560 --> 00:35:47,310 OK, tapi aku benar-benar ingin mendapatkan int itu. 734 00:35:47,310 --> 00:35:52,020 Jadi aku bisa pergi di sini dan aku bisa jenis salinan ini dan indent ini. 735 00:35:52,020 --> 00:35:52,570 Dan kemudian, OK. 736 00:35:52,570 --> 00:35:56,990 Jadi jika n kurang dari atau sama dengan nol melakukan hal ini. 737 00:35:56,990 --> 00:35:58,900 >> Sekarang, bagaimana jika pengguna tidak bekerja sama? 738 00:35:58,900 --> 00:36:01,560 Nah, maka aku akan meminjam ini di sini. 739 00:36:01,560 --> 00:36:03,130 Dan kemudian aku pergi di sini dan di sini dan di sini. 740 00:36:03,130 --> 00:36:06,420 Jadi ini jelas tidak solusinya, kan? 741 00:36:06,420 --> 00:36:07,810 Karena tidak ada akhir yang terlihat. 742 00:36:07,810 --> 00:36:13,100 Jika saya ingin menuntut bahwa pengguna memberikan saya bilangan bulat positif, saya bisa 743 00:36:13,100 --> 00:36:14,150 benar-benar mendapatkan int. 744 00:36:14,150 --> 00:36:15,620 Saya kemudian dapat memeriksa int itu. 745 00:36:15,620 --> 00:36:18,570 Tapi kemudian saya ingin memeriksa lagi dan periksa lagi dan periksa lagi. 746 00:36:18,570 --> 00:36:21,680 Jadi jelas, apa yang lebih baik membangun akan menggunakan di sini? 747 00:36:21,680 --> 00:36:22,840 Baiklah, jadi semacam lingkaran. 748 00:36:22,840 --> 00:36:25,430 >> Jadi aku akan menyingkirkan hampir semua ini. 749 00:36:25,430 --> 00:36:27,320 Dan saya ingin mendapatkan ini int setidaknya sekali. 750 00:36:27,320 --> 00:36:28,890 Jadi aku akan mengatakan melakukan - 751 00:36:28,890 --> 00:36:32,110 dan aku akan kembali ke sementara hanya dalam beberapa saat - 752 00:36:32,110 --> 00:36:33,050 sekarang, melakukan apa? 753 00:36:33,050 --> 00:36:35,860 Aku akan melakukan getInt int n mendapat (). 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Jadi itu cukup bagus. 756 00:36:37,250 --> 00:36:39,750 Dan sekarang seberapa sering melakukan Saya ingin melakukan ini? 757 00:36:39,750 --> 00:36:45,770 >> Biar printf dalam loop jadi saya bisa menuntut lagi dan lagi, 758 00:36:45,770 --> 00:36:46,740 jika perlu. 759 00:36:46,740 --> 00:36:49,720 Dan apa yang saya inginkan ini sementara kondisi yang harus dilakukan? 760 00:36:49,720 --> 00:36:53,870 Saya ingin terus melakukan hal ini sementara apa yang terjadi? 761 00:36:53,870 --> 00:36:54,125 Ya. 762 00:36:54,125 --> 00:36:55,390 N kurang dari atau sama dengan nol. 763 00:36:55,390 --> 00:36:58,180 Jadi sudah, kami telah secara signifikan dibersihkan kode ini up. 764 00:36:58,180 --> 00:37:00,700 Kami telah meminjam sangat sederhana membangun - do-while loop. 765 00:37:00,700 --> 00:37:04,690 Saya telah dicuri hanya garis penting kode yang saya mulai menyalin dan 766 00:37:04,690 --> 00:37:05,960 paste, yang tidak bijaksana. 767 00:37:05,960 --> 00:37:09,790 Dan sekarang aku akan benar-benar tempel dalam sini dan hanya melakukannya sekali. 768 00:37:09,790 --> 00:37:12,990 >> Dan sekarang apa yang ingin saya lakukan di akhir dari program ini? 769 00:37:12,990 --> 00:37:16,810 Saya hanya akan mengatakan sesuatu yang sederhana seperti, terima kasih atas - dan 770 00:37:16,810 --> 00:37:18,980 Aku akan melakukan% i untuk int - 771 00:37:18,980 --> 00:37:23,270 backslash n, koma, dan kemudian plug in n, titik koma. 772 00:37:23,270 --> 00:37:23,910 >> Baik. 773 00:37:23,910 --> 00:37:27,290 Jadi mari kita lihat apa yang terjadi sekarang ketika saya menjalankan program ini. 774 00:37:27,290 --> 00:37:30,600 Aku akan pergi ke depan dan lakukan membuat positif. 775 00:37:30,600 --> 00:37:30,880 Sial. 776 00:37:30,880 --> 00:37:31,600 Beberapa kesalahan. 777 00:37:31,600 --> 00:37:32,960 Jadi biarkan aku gulir kembali ke yang pertama. 778 00:37:32,960 --> 00:37:34,020 Jangan bekerja melalui mereka mundur. 779 00:37:34,020 --> 00:37:37,000 Bekerja melalui mereka dari atas ke bawah supaya mereka kaskade dan hanya 780 00:37:37,000 --> 00:37:38,630 satu hal yang salah. 781 00:37:38,630 --> 00:37:42,532 Deklarasi implisit Fungsi getInt (). 782 00:37:42,532 --> 00:37:43,020 Ya. 783 00:37:43,020 --> 00:37:44,420 Jadi itu tidak cukup. 784 00:37:44,420 --> 00:37:46,760 Aku agak membuat kesalahan yang sama tetapi sedikit berbeda kali ini. 785 00:37:46,760 --> 00:37:51,940 Saya perlu untuk tidak hanya mencakup stdio.h tetapi juga cs50.h, yang meliputi 786 00:37:51,940 --> 00:37:56,770 yang disebut deklarasi mendapatkan int, yang mengajarkan alat, atau mengajarkan 787 00:37:56,770 --> 00:37:58,760 C apa getInt () adalah. 788 00:37:58,760 --> 00:37:59,550 >> Jadi biarkan aku resave. 789 00:37:59,550 --> 00:38:02,040 Aku akan mengabaikan kesalahan lain karena aku akan berharap bahwa mereka 790 00:38:02,040 --> 00:38:05,210 entah bagaimana berhubungan dengan kesalahan Aku sudah tetap. 791 00:38:05,210 --> 00:38:08,710 Jadi biarkan aku pergi ke depan dan mengkompilasi ulang dengan make positif, Enter. 792 00:38:08,710 --> 00:38:09,020 Sial. 793 00:38:09,020 --> 00:38:09,985 Tiga kesalahan, masih. 794 00:38:09,985 --> 00:38:12,650 Mari saya gulir ke atas untuk yang pertama. 795 00:38:12,650 --> 00:38:14,320 Terpakai n variabel. 796 00:38:14,320 --> 00:38:15,850 Kami belum pernah melihat ini sebelumnya. 797 00:38:15,850 --> 00:38:17,200 Dan ini juga sedikit samar. 798 00:38:17,200 --> 00:38:18,850 Ini adalah output dari compiler. 799 00:38:18,850 --> 00:38:23,610 Dan apa garis disorot ada - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 mengatakan, itu mengatakan pada baris sembilan positive.c, pada karakter ke-13, 801 00:38:28,960 --> 00:38:31,510 Kolom 13, Anda membuat kesalahan ini. 802 00:38:31,510 --> 00:38:34,230 >> Dan khususnya, ia memberi tahu saya tidak terpakai variabel n. 803 00:38:34,230 --> 00:38:35,790 Jadi mari kita lihat - 804 00:38:35,790 --> 00:38:37,150 baris sembilan. 805 00:38:37,150 --> 00:38:40,430 Saya menggunakan n dalam arti bahwa Aku memberikannya nilai. 806 00:38:40,430 --> 00:38:44,200 Tapi apa compiler tidak suka adalah bahwa aku tidak tampaknya menggunakannya. 807 00:38:44,200 --> 00:38:45,560 Tapi tunggu dulu, saya menggunakan itu. 808 00:38:45,560 --> 00:38:48,170 Sejalan 11, saya menggunakan di sini. 809 00:38:48,170 --> 00:38:52,430 Tetapi jika saya gulir ke bawah lebih lanjut di positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 sehingga pada baris 11, karakter 12, yang compiler mengatakan padaku, penggunaan 811 00:38:56,230 --> 00:38:58,670 dideklarasikan identifier n. 812 00:38:58,670 --> 00:39:02,760 >> Jadi berarti saya harus dideklarasikan tidak ditentukan sebagai 813 00:39:02,760 --> 00:39:04,970 variabel dengan tipe data. 814 00:39:04,970 --> 00:39:05,500 Tapi tunggu sebentar. 815 00:39:05,500 --> 00:39:09,150 Saya melakukan hal itu sejalan sembilan. 816 00:39:09,150 --> 00:39:11,100 Jadi seseorang benar-benar bingung di sini. 817 00:39:11,100 --> 00:39:14,900 Ini aku atau compiler karena sejalan sembilan, sekali lagi, aku mendeklarasikan 818 00:39:14,900 --> 00:39:18,650 int n, dan saya menugaskan itu yang mengembalikan nilai getInt (). 819 00:39:18,650 --> 00:39:22,930 Kemudian saya menggunakan bahwa n variabel sejalan 11 dan memeriksa jika nilainya kurang 820 00:39:22,930 --> 00:39:24,050 dari atau sama dengan nol. 821 00:39:24,050 --> 00:39:27,430 Tapi ini tampaknya adalah buruk dan rusak mengapa? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Katakanlah lagi? 824 00:39:32,490 --> 00:39:35,690 >> Ah, saya harus menyatakan n sebelum memasuki loop. 825 00:39:35,690 --> 00:39:36,370 Tapi mengapa? 826 00:39:36,370 --> 00:39:39,830 Maksudku, kami hanya mengusulkan sedikit lalu yang itu baik untuk mendeklarasikan variabel 827 00:39:39,830 --> 00:39:43,600 semua dalam satu baris dan kemudian menetapkan mereka beberapa nilai. 828 00:39:43,600 --> 00:39:46,790 Sebuah variabel global - mari kita kembali ke gagasan hanya dalam beberapa saat. 829 00:39:46,790 --> 00:39:48,690 Mengapa Anda ingin saya untuk meletakkan itu di luar loop? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Ini adalah. 832 00:40:03,830 --> 00:40:06,780 Tepat. 833 00:40:06,780 --> 00:40:09,610 >> Jadi, meskipun, agak berlawanan dengan intuisi, izinkan saya meringkas. 834 00:40:09,610 --> 00:40:13,510 Ketika Anda mendeklarasikan n dalam dari do blok sana - 835 00:40:13,510 --> 00:40:16,320 khusus dalam mereka kurung kurawal - 836 00:40:16,320 --> 00:40:19,210 bahwa variabel n memiliki apa disebut lingkup - 837 00:40:19,210 --> 00:40:23,210 terkait dengan sistem penilaian kami di tentu saja - tetapi memiliki cakupan yang 838 00:40:23,210 --> 00:40:25,190 terbatas pada kurung kurawal. 839 00:40:25,190 --> 00:40:28,460 Dengan kata lain, biasanya jika Anda menyatakan variabel di dalam satu set 840 00:40:28,460 --> 00:40:33,370 kurung kurawal, variabel yang hanya ada dalam kurung kurawal tersebut. 841 00:40:33,370 --> 00:40:37,320 Jadi dengan logika itu saja, meskipun Saya sudah menyatakan n sejalan sembilan, itu 842 00:40:37,320 --> 00:40:41,910 dasarnya menghilang dari ruang lingkup, menghilang dari memori, sehingga untuk berbicara, 843 00:40:41,910 --> 00:40:43,370 pada saat aku memukul baris 11. 844 00:40:43,370 --> 00:40:47,370 Karena line 11, sayangnya, di luar kurung kurawal tersebut. 845 00:40:47,370 --> 00:40:51,540 >> Jadi saya sayangnya tidak dapat memperbaiki hal ini dengan akan kembali ke apa yang saya lakukan sebelumnya. 846 00:40:51,540 --> 00:40:53,370 Anda mungkin pada awalnya melakukan hal ini. 847 00:40:53,370 --> 00:40:56,370 Tapi apa yang sekarang Anda tidak melakukan siklis? 848 00:40:56,370 --> 00:40:58,260 Kau jelas tidak mendapatkan int siklis. 849 00:40:58,260 --> 00:41:01,320 Jadi kita bisa meninggalkan getInt (), dan kami harus meninggalkan getInt () dalam 850 00:41:01,320 --> 00:41:04,420 lingkaran karena itulah yang kita ingin mengganggu pengguna untuk lagi dan lagi. 851 00:41:04,420 --> 00:41:08,660 Tapi itu tidak cukup untuk pergi sampai ke garis, mengatakan, enam. 852 00:41:08,660 --> 00:41:10,150 Int n, titik koma. 853 00:41:10,150 --> 00:41:12,990 Jangan memberikan nilai namun karena Anda tidak perlu dulu. 854 00:41:12,990 --> 00:41:16,220 >> Tapi sekarang di sini, pemberitahuan - ini akan menjadi kesalahan yang sangat mudah. 855 00:41:16,220 --> 00:41:19,440 Saya tidak ingin bayangan saya sebelumnya deklarasi n. 856 00:41:19,440 --> 00:41:22,830 Saya ingin menggunakan n yang benar-benar ada. 857 00:41:22,830 --> 00:41:25,780 Dan sekarang dalam baris 10, Saya menetapkan nilai n. 858 00:41:25,780 --> 00:41:28,580 Namun sejalan enam, saya menyatakan n. 859 00:41:28,580 --> 00:41:32,940 Dan demikian pula saya atau bisa saya tidak menggunakannya dalam baris 12 sekarang? 860 00:41:32,940 --> 00:41:37,120 Saya karena bisa antara yang keriting kawat gigi adalah n dinyatakan sekarang? 861 00:41:37,120 --> 00:41:38,770 Yang di sini pada baris kelima. 862 00:41:38,770 --> 00:41:40,330 Untuk satu di sini pada baris 14. 863 00:41:40,330 --> 00:41:49,770 Jadi jika sekarang saya zoom out, menyimpan file ini, pergi kembali ke dalam dan menjalankan make positif, 864 00:41:49,770 --> 00:41:50,820 disusun saat ini. 865 00:41:50,820 --> 00:41:51,940 Jadi itu sudah berlangsung. 866 00:41:51,940 --> 00:41:53,640 Slash. . / Positif, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Saya meminta Anda memberi saya bilangan bulat positif. 868 00:41:56,060 --> 00:41:57,750 Negatif 1. 869 00:41:57,750 --> 00:41:59,020 Negatif 2. 870 00:41:59,020 --> 00:42:00,680 Negatif 3. 871 00:42:00,680 --> 00:42:01,760 Nol. 872 00:42:01,760 --> 00:42:03,000 Satu. 873 00:42:03,000 --> 00:42:05,130 Dan terima kasih untuk yang satu adalah apa yang sekarang dicetak. 874 00:42:05,130 --> 00:42:07,400 >> Biarkan aku mencoba sesuatu yang lain, karena penasaran. 875 00:42:07,400 --> 00:42:09,600 Saya diberitahu untuk memasukkan integer. 876 00:42:09,600 --> 00:42:12,870 Tapi bagaimana jika saya bukan mengetik domba? 877 00:42:12,870 --> 00:42:14,460 Jadi sekarang Anda melihat prompt yang berbeda - 878 00:42:14,460 --> 00:42:15,350 coba lagi. 879 00:42:15,350 --> 00:42:17,670 Tapi tak dalam kode saya aku menulis coba lagi. 880 00:42:17,670 --> 00:42:22,320 Jadi di mana, mungkin, apakah ini coba lagi meminta datang dari, yang akan Anda katakan? 881 00:42:22,320 --> 00:42:23,540 Ya, dari getInt () itu sendiri. 882 00:42:23,540 --> 00:42:26,650 Jadi salah satu hal yang tidak staf CS50 bagi Anda, setidaknya dalam beberapa pertama 883 00:42:26,650 --> 00:42:30,400 minggu, yang kami telah menulis beberapa jumlah memeriksa untuk memastikan bahwa jika kesalahan 884 00:42:30,400 --> 00:42:34,260 Anda menelepon getInt (), Anda akan setidaknya mendapatkan kembali sebuah int dari pengguna. 885 00:42:34,260 --> 00:42:35,460 Anda tidak akan mendapatkan string. 886 00:42:35,460 --> 00:42:36,440 Anda tidak akan mendapatkan char. 887 00:42:36,440 --> 00:42:39,660 Anda tidak akan mendapatkan sesuatu lain sama sekali. 888 00:42:39,660 --> 00:42:40,510 Anda akan mendapatkan int. 889 00:42:40,510 --> 00:42:41,890 >> Sekarang, mungkin tidak positif. 890 00:42:41,890 --> 00:42:42,770 Ini mungkin tidak negatif. 891 00:42:42,770 --> 00:42:44,550 Kami tidak membuat jaminan sekitar itu. 892 00:42:44,550 --> 00:42:48,960 Tapi kami akan mengganggu pengguna untuk mencoba lagi, coba lagi, coba lagi sampai dia benar-benar 893 00:42:48,960 --> 00:42:49,810 bekerja sama. 894 00:42:49,810 --> 00:42:53,085 Demikian pula, jika saya lakukan 1.23, yang bukan int. 895 00:42:53,085 --> 00:42:58,400 Tapi kalau aku mengetik, katakanlah, 50, yang memberi saya nilai yang saya inginkan. 896 00:42:58,400 --> 00:42:59,050 >> Baik. 897 00:42:59,050 --> 00:43:01,380 Jadi tidak buruk. 898 00:43:01,380 --> 00:43:04,780 Ada pertanyaan tentang apa yang baru saja kita lakukan? 899 00:43:04,780 --> 00:43:07,930 Kunci takeaway ini, harus jelas, tidak begitu banyak loop, yang telah kita lihat 900 00:43:07,930 --> 00:43:10,880 sebelum meskipun kita belum benar-benar menggunakannya, tapi masalah lingkup, di mana 901 00:43:10,880 --> 00:43:17,045 variabel hanya dapat hanya dapat digunakan dalam beberapa ruang lingkup tertentu. 902 00:43:17,045 --> 00:43:19,830 >> Baiklah, biarkan aku mengatasi saran Anda buat sebelumnya, yang dari 903 00:43:19,830 --> 00:43:20,860 variabel global. 904 00:43:20,860 --> 00:43:24,880 Sebagai samping, ternyata yang lain solusi untuk masalah ini, tapi 905 00:43:24,880 --> 00:43:28,880 biasanya solusi yang salah atau solusi yang dirancang buruk, adalah untuk 906 00:43:28,880 --> 00:43:31,670 mendeklarasikan variabel Anda sebagai apa disebut variabel global. 907 00:43:31,670 --> 00:43:34,610 Sekarang Aku agak melanggar definisi saya lingkup karena ada 908 00:43:34,610 --> 00:43:37,680 ada kurung kurawal di bagian paling atas dan bagian paling bawah file. 909 00:43:37,680 --> 00:43:40,190 Namun implikasi yang adalah bahwa sekarang di line empat, 910 00:43:40,190 --> 00:43:41,710 n adalah variabel global. 911 00:43:41,710 --> 00:43:44,460 Dan seperti namanya, itu hanya dapat diakses di mana-mana. 912 00:43:44,460 --> 00:43:45,790 >> Scratch sebenarnya memiliki ini. 913 00:43:45,790 --> 00:43:48,650 Jika Anda menggunakan variabel, Anda mungkin ingat Anda harus memilih apakah itu untuk 914 00:43:48,650 --> 00:43:50,780 sprite ini atau untuk semua sprite. 915 00:43:50,780 --> 00:43:54,270 Yah, semua sprite hanyalah jelas cara untuk mengatakan global. 916 00:43:54,270 --> 00:43:55,520 Ya? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ah, pertanyaan yang benar-benar baik. 919 00:44:10,990 --> 00:44:14,310 >> Jadi ingat bahwa dalam versi pertama kode saya, ketika saya salah 920 00:44:14,310 --> 00:44:17,700 dideklarasikan dan didefinisikan n sejalan sembilan - 921 00:44:17,700 --> 00:44:19,980 Saya menyatakan sebagai variabel dan saya memberikannya nilai dengan 922 00:44:19,980 --> 00:44:21,160 operator penugasan - 923 00:44:21,160 --> 00:44:22,520 ini memberi saya dua kesalahan. 924 00:44:22,520 --> 00:44:26,560 Satu, fakta bahwa n tidak digunakan, dan dua, bahwa pada baris 11 925 00:44:26,560 --> 00:44:27,770 hal itu tidak diumumkan. 926 00:44:27,770 --> 00:44:31,120 Jadi yang pertama saya tidak alamat pada saat itu. 927 00:44:31,120 --> 00:44:35,130 Hal ini tidak sepenuhnya kesalahan untuk menyatakan variabel tapi tidak menggunakannya. 928 00:44:35,130 --> 00:44:38,540 Tapi salah satu hal yang kita lakukan di yang CS50 alat, sengaja, 929 00:44:38,540 --> 00:44:43,340 pedagogis, adalah kita telah mendongkrak harapan compiler untuk membuat 930 00:44:43,340 --> 00:44:46,970 Pastikan bahwa Anda melakukan hal-hal bukan hanya benar tapi benar-benar benar. 931 00:44:46,970 --> 00:44:51,520 >> Karena jika Anda mendeklarasikan variabel seperti n dan tidak pernah menggunakannya, atau menggunakannya 932 00:44:51,520 --> 00:44:53,700 benar, maka apa itu lakukan di sana? 933 00:44:53,700 --> 00:44:55,650 Ini benar-benar tidak ada gunanya. 934 00:44:55,650 --> 00:44:58,980 Dan itu sangat mudah dari waktu ke waktu, jika Anda tidak mengkonfigurasi komputer Anda sendiri dalam 935 00:44:58,980 --> 00:45:01,960 cara ini, hanya memiliki kode yang memiliki sedikit sisa-sisa di sini, sisa-sisa di sana. 936 00:45:01,960 --> 00:45:04,390 Dan kemudian bulan kemudian Anda melihat kembali dan Anda seperti, mengapa baris ini 937 00:45:04,390 --> 00:45:05,060 kode sana? 938 00:45:05,060 --> 00:45:07,940 Dan jika tidak ada alasan yang baik, tidak bermanfaat bagi Anda atau kolega Anda 939 00:45:07,940 --> 00:45:10,650 jalan harus tersandung kemudian. 940 00:45:10,650 --> 00:45:12,540 >> Sebagai samping, di mana yang datang dari? 941 00:45:12,540 --> 00:45:16,410 Nah, ingat bahwa setiap kali kita mengkompilasi Program, semua hal ini adalah 942 00:45:16,410 --> 00:45:17,380 sedang dicetak. 943 00:45:17,380 --> 00:45:18,350 Jadi kita akan kembali ke ini. 944 00:45:18,350 --> 00:45:22,230 Tapi sekali lagi, buat adalah sebuah utilitas yang mengotomatiskan proses kompilasi oleh 945 00:45:22,230 --> 00:45:24,830 menjalankan compiler yang sebenarnya disebut dentang. 946 00:45:24,830 --> 00:45:27,650 Hal ini, pada akhirnya kita akan lihat, memiliki hubungannya dengan debugging dengan khusus 947 00:45:27,650 --> 00:45:29,060 program yang disebut debugger. 948 00:45:29,060 --> 00:45:32,150 Hal ini harus dilakukan dengan mengoptimalkan kode - lebih pada di masa depan. 949 00:45:32,150 --> 00:45:33,620 Std = c99 - 950 00:45:33,620 --> 00:45:37,870 ini hanya berarti menggunakan versi 1999 C. C sudah ada lebih lama dari 951 00:45:37,870 --> 00:45:40,830 itu, tetapi mereka membuat beberapa nice perubahan 10 ditambah tahun yang lalu. 952 00:45:40,830 --> 00:45:42,690 >> Dan inilah yang relevan. 953 00:45:42,690 --> 00:45:45,880 Kami katakan membuat sesuatu yang sebelumnya akan menjadi peringatan 954 00:45:45,880 --> 00:45:48,560 kesalahan mencegah siswa dari kompilasi. 955 00:45:48,560 --> 00:45:51,400 Dan berarti dinding melakukannya untuk Seluruh banyak hal, tidak 956 00:45:51,400 --> 00:45:53,060 hanya terkait dengan variabel. 957 00:45:53,060 --> 00:45:54,700 Dan kemudian biarkan aku gulir ke akhir baris ini. 958 00:45:54,700 --> 00:45:56,430 Dan ini juga, pada akhirnya kita akan kembali ke. 959 00:45:56,430 --> 00:45:59,040 Ini jelas nama file saya kompilasi. 960 00:45:59,040 --> 00:46:02,160 Ini mengingatkan nama file Saya keluaran sebagai nama 961 00:46:02,160 --> 00:46:04,070 program runnable saya. 962 00:46:04,070 --> 00:46:08,970 Ini-lcs50 hanya berarti menggunakan CS50 yang perpustakaan, dan setiap nol dan satu yang 963 00:46:08,970 --> 00:46:12,390 staf menulis dan dikompilasi sebelumnya tahun ini, mengintegrasikan 964 00:46:12,390 --> 00:46:13,490 mereka ke dalam program saya. 965 00:46:13,490 --> 00:46:16,130 >> Dan ada yang tahu apa-lm adalah? 966 00:46:16,130 --> 00:46:18,150 Ini adalah perpustakaan matematika, yang hanya ada bahkan jika Anda 967 00:46:18,150 --> 00:46:19,320 tidak melakukan apapun matematika. 968 00:46:19,320 --> 00:46:22,620 Itu hanya diberikan secara otomatis kepada kami oleh buat. 969 00:46:22,620 --> 00:46:26,540 >> Nah, biarkan aku melakukan satu contoh lainnya di sini dengan membuka file baru. 970 00:46:26,540 --> 00:46:30,560 Dan biarkan aku menyimpan satu ini sebagai string.c. 971 00:46:30,560 --> 00:46:37,980 Ternyata bahwa ketika kita berbicara tentang data jenis hari ini, ada lebih banyak lagi 972 00:46:37,980 --> 00:46:40,630 terjadi di bawah tenda dari yang telah kita lihat sejauh ini. 973 00:46:40,630 --> 00:46:42,290 Jadi biar cepat melakukan program cepat. 974 00:46:42,290 --> 00:46:44,510 Sertakan stdio.h. 975 00:46:44,510 --> 00:46:45,730 Dan aku akan menyimpan itu. 976 00:46:45,730 --> 00:46:48,110 Dan kau tahu, biar tidak membuat kesalahan yang sama lagi dan lagi. 977 00:46:48,110 --> 00:46:50,540 Sertakan cs50.h. 978 00:46:50,540 --> 00:46:54,870 Dan biarkan aku pergi ke depan sekarang dan melakukan int main (void). 979 00:46:54,870 --> 00:46:58,790 >> Dan sekarang aku hanya ingin melakukan program yang melakukan hal ini - menyatakan string 980 00:46:58,790 --> 00:47:03,610 disebut s dan string dari pengguna. 981 00:47:03,610 --> 00:47:05,820 Dan biarkan aku melakukan sedikit petunjuk di sini - 982 00:47:05,820 --> 00:47:09,960 tolong beri saya string - jadi pengguna tahu apa yang harus dilakukan. 983 00:47:09,960 --> 00:47:13,190 Dan kemudian turun di sini di bawah ini, Saya ingin melakukan hal berikut - 984 00:47:13,190 --> 00:47:16,060 untuk int i mendapat nol. 985 00:47:16,060 --> 00:47:18,580 Sekali lagi, ilmuwan komputer biasanya mulai menghitung dari nol, tapi kita bisa 986 00:47:18,580 --> 00:47:20,340 membuat satu jika kita benar-benar ingin. 987 00:47:20,340 --> 00:47:27,240 Sekarang aku akan melakukan saya kurang dari panjang string s. 988 00:47:27,240 --> 00:47:28,430 Jadi strlen - 989 00:47:28,430 --> 00:47:29,510 S-T-R-L-E-N - 990 00:47:29,510 --> 00:47:31,650 lagi, itu singkat karena lebih mudah untuk mengetik, meskipun itu adalah 991 00:47:31,650 --> 00:47:32,590 sedikit samar. 992 00:47:32,590 --> 00:47:35,290 >> Itu adalah fungsi kita sudah tidak digunakan sebelum tapi benar-benar melakukan itu - 993 00:47:35,290 --> 00:47:37,810 kembali ke saya nomor yang mewakili panjang string 994 00:47:37,810 --> 00:47:38,690 bahwa pengguna mengetik. 995 00:47:38,690 --> 00:47:41,740 Jika mereka mengetik halo, itu akan kembali lima karena ada lima 996 00:47:41,740 --> 00:47:42,890 huruf dalam halo. 997 00:47:42,890 --> 00:47:45,390 Kemudian, pada setiap iterasi lingkaran ini, i plus plus. 998 00:47:45,390 --> 00:47:49,170 Jadi sekali lagi, standar membangun bahkan jika Anda tidak cukup atau terlalu nyaman 999 00:47:49,170 --> 00:47:50,420 akrab dengan it yet. 1000 00:47:50,420 --> 00:47:53,220 >> Tapi sekarang pada setiap iterasi dari loop ini, perhatikan apa yang akan saya lakukan. 1001 00:47:53,220 --> 00:47:56,690 Saya ingin pergi ke depan dan mencetak sebuah karakter tunggal - 1002 00:47:56,690 --> 00:47:59,940 jadi% c backslash n pada baris baru. 1003 00:47:59,940 --> 00:48:00,990 Dan kemudian, Anda tahu apa yang ingin saya lakukan? 1004 00:48:00,990 --> 00:48:05,090 Apapun kata adalah bahwa jenis pengguna dalam, seperti halo, saya ingin mencetak 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O, satu karakter per baris. 1006 00:48:09,530 --> 00:48:13,080 Dengan kata lain, saya ingin mendapatkan di karakter individu dalam sebuah string, 1007 00:48:13,080 --> 00:48:16,770 dimana sampai sekarang string baru saja menjadi urutan karakter. 1008 00:48:16,770 --> 00:48:21,690 >> Dan ternyata aku bisa melakukan s, braket, i, braket dekat, tutup 1009 00:48:21,690 --> 00:48:23,580 kurung, koma. 1010 00:48:23,580 --> 00:48:25,640 Dan aku harus melakukan satu hal lagi. 1011 00:48:25,640 --> 00:48:30,570 Hal ini dalam sebuah file yang bernama string.h bahwa strlen dinyatakan. 1012 00:48:30,570 --> 00:48:33,190 Jadi jika saya ingin menggunakan fungsi tersebut, Saya perlu memberitahu compiler, 1013 00:48:33,190 --> 00:48:34,450 berharap untuk menggunakannya. 1014 00:48:34,450 --> 00:48:37,040 Sekarang biarkan aku pergi ke depan dan membuat Program yang disebut tali. 1015 00:48:37,040 --> 00:48:39,150 Dot, garis miring, tali. 1016 00:48:39,150 --> 00:48:40,130 >> Tolong beri saya string. 1017 00:48:40,130 --> 00:48:40,900 Aku akan pergi ke depan dan mengetiknya. 1018 00:48:40,900 --> 00:48:43,040 Halo, dalam semua topi, Enter. 1019 00:48:43,040 --> 00:48:47,390 Dan sekarang aku sudah melihat ini dicetak satu karakter demi satu. 1020 00:48:47,390 --> 00:48:51,450 Jadi detail baru di sini adalah bahwa sebuah string, pada akhir hari, bisa 1021 00:48:51,450 --> 00:48:54,810 diakses dengan cara individu karakter dengan memperkenalkan alun-alun 1022 00:48:54,810 --> 00:48:55,840 notasi braket. 1023 00:48:55,840 --> 00:48:59,090 Dan itu karena string di bawah tenda memang urutan 1024 00:48:59,090 --> 00:48:59,810 karakter. 1025 00:48:59,810 --> 00:49:02,010 Tapi apa yang rapi tentang mereka adalah dalam RAM komputer Anda - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, apa pun itu - mereka harfiah kembali untuk kembali ke belakang - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 pada tingkat individu, yang berdekatan byte memori. 1029 00:49:09,920 --> 00:49:13,210 >> Jadi jika Anda ingin mendapatkan di seperti kedelapan byte, yang dalam lingkaran ini akan 1030 00:49:13,210 --> 00:49:16,900 braket nol, braket satu, dua braket, braket tiga, empat braket - 1031 00:49:16,900 --> 00:49:18,890 yang nol diindeks sampai lima - 1032 00:49:18,890 --> 00:49:23,330 yang akan mencetak H-E-L-L-O pada baris sendiri. 1033 00:49:23,330 --> 00:49:26,320 >> Sekarang, sebagai teaser, mari kutunjukkan macam hal Anda akhirnya akan 1034 00:49:26,320 --> 00:49:31,950 mampu memahami, setidaknya dengan beberapa dekat mencari. 1035 00:49:31,950 --> 00:49:35,610 Untuk satu, apa yang kita termasuk dalam hari ini contoh, jika Anda ingin, sebenarnya 1036 00:49:35,610 --> 00:49:38,300 salah satu jailbreaks pertama untuk iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking berarti retak telepon sehingga Anda benar-benar dapat menggunakannya pada 1038 00:49:40,800 --> 00:49:43,380 pembawa yang berbeda atau instalasi perangkat lunak Anda sendiri. 1039 00:49:43,380 --> 00:49:45,660 Dan Anda akan melihat ini terlihat benar-benar samar, kemungkinan besar. 1040 00:49:45,660 --> 00:49:46,520 Tapi lihat ini. 1041 00:49:46,520 --> 00:49:50,420 IPhone tampaknya retak dengan untuk loop, kondisi jika, lain 1042 00:49:50,420 --> 00:49:52,580 kondisi, sekelompok fungsi kita belum melihat. 1043 00:49:52,580 --> 00:49:54,230 >> Dan lagi, Anda tidak akan di Sepintas mungkin 1044 00:49:54,230 --> 00:49:55,620 memahami bagaimana ini bekerja. 1045 00:49:55,620 --> 00:49:58,940 Tapi segala sesuatu yang kita semacam mengambil untuk diberikan dalam kehidupan modern kita 1046 00:49:58,940 --> 00:50:02,040 sebenarnya cenderung mengurangi bahkan beberapa fundamental ini kita sudah 1047 00:50:02,040 --> 00:50:02,820 melihat. 1048 00:50:02,820 --> 00:50:06,680 Biarkan aku pergi ke depan dan membuka satu Program lainnya, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Jadi ini juga, adalah sesuatu yang Anda tidak harus benar-benar tahu. 1050 00:50:08,970 --> 00:50:12,440 Bahkan tidak ada staf atau aku bisa mungkin memikirkan hal ini dengan melihat 1051 00:50:12,440 --> 00:50:15,450 karena ini adalah kode seseorang yang disampaikan kepada apa 1052 00:50:15,450 --> 00:50:19,630 historis dikenal sebagai dikaburkan C kontes, di mana Anda menulis sebuah program 1053 00:50:19,630 --> 00:50:24,670 yang mengkompilasi dan berjalan tetapi begitu sialan samar ada manusia yang dapat memahami apa 1054 00:50:24,670 --> 00:50:27,530 itu akan dilakukan sampai mereka benar-benar menjalankannya. 1055 00:50:27,530 --> 00:50:29,940 >> Jadi memang, jika Anda melihat ini kode, saya melihat sebuah tombol. 1056 00:50:29,940 --> 00:50:30,870 Saya melihat utama. 1057 00:50:30,870 --> 00:50:33,800 Saya melihat ini menyiratkan tanda kurung siku semacam array. 1058 00:50:33,800 --> 00:50:35,970 Apakah ada yang ingin menebak apa Program ini benar-benar 1059 00:50:35,970 --> 00:50:37,220 tidak jika saya menjalankan Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Ya. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Well done. 1064 00:50:44,690 --> 00:50:48,090 Jadi hanya staf dan aku tidak tahu tahu apa hal-hal ini. 1065 00:50:48,090 --> 00:50:51,670 >> Dan sekarang akhirnya, biarkan aku pergi ke depan dan membuka satu program lainnya. 1066 00:50:51,670 --> 00:50:53,440 Ini satu - 1067 00:50:53,440 --> 00:50:55,550 lagi, kita akan membuat kode sumber tersedia online - satu ini hanya 1068 00:50:55,550 --> 00:50:57,480 jenis cukup untuk melihat. 1069 00:50:57,480 --> 00:50:59,750 Semua yang mereka lakukan adalah menekan ruang bar cukup sedikit. 1070 00:50:59,750 --> 00:51:01,320 Tapi ini adalah kode nyata. 1071 00:51:01,320 --> 00:51:04,790 Jadi, jika Anda pikir itu cukup, jika kita benar-benar menjalankan perintah ini di prompt, 1072 00:51:04,790 --> 00:51:08,970 akhirnya Anda akan melihat bagaimana kita mungkin melakukan hal-hal seperti ini. 1073 00:51:08,970 --> 00:51:14,008 >> Jadi kita akan meninggalkan Anda pada catatan dan melihat Anda pada hari Rabu. 1074 00:51:14,008 --> 00:51:18,440 >> [MUSIC PLAYING] 1075 00:51:18,440 --> 00:51:23,380 >> SPEAKER 2: Pada CS50 berikutnya, TF tahap pemberontakan. 1076 00:51:23,380 --> 00:51:24,112 >> SPEAKER 3: Itu dia. 1077 00:51:24,112 --> 00:51:25,362 Dapatkan dia! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [MUSIC PLAYING]