1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [MUSIC PLAYING] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> DAVID J. Malan: Baiklah, ini CS50. 5 00:00:16,240 --> 00:00:18,010 Dan ini adalah satu minggu. 6 00:00:18,010 --> 00:00:22,050 Jadi ingat bahwa terakhir kali dalam seminggu nol, kami fokus pada pemikiran komputasi. 7 00:00:22,050 --> 00:00:25,440 Dan kita beralih dari itu untuk Scratch, pemrograman grafis 8 00:00:25,440 --> 00:00:27,360 bahasa dari teman-teman kita di MIT Media Lab. 9 00:00:27,360 --> 00:00:31,730 >> Dan dengan Scratch, apakah kita mengeksplorasi ide seperti fungsi, dan kondisi, 10 00:00:31,730 --> 00:00:35,210 dan loop, dan variabel, dan bahkan peristiwa, dan benang, dan banyak lagi. 11 00:00:35,210 --> 00:00:37,880 Dan hari ini, kita akan terus menggunakan ide-ide mereka, 12 00:00:37,880 --> 00:00:40,630 dan benar-benar mengambil mereka untuk diberikan, tapi menerjemahkannya 13 00:00:40,630 --> 00:00:44,220 ke bahasa lain dikenal sebagai C. Sekarang, C adalah bahasa yang lebih tradisional. 14 00:00:44,220 --> 00:00:46,020 Ini adalah tingkat yang lebih rendah bahasa, jika Anda mau. 15 00:00:46,020 --> 00:00:47,300 >> Ini murni tekstual. 16 00:00:47,300 --> 00:00:49,910 Dan pada pandangan pertama, itu semua akan terlihat agak samar 17 00:00:49,910 --> 00:00:51,430 jika Anda belum pernah diprogram sebelumnya. 18 00:00:51,430 --> 00:00:53,530 Kita akan memiliki semi-titik dua, dan tanda kurung, 19 00:00:53,530 --> 00:00:55,150 dan kurung kurawal, dan banyak lagi. 20 00:00:55,150 --> 00:00:57,240 Tapi menyadari bahwa bahkan meskipun sintaks 21 00:00:57,240 --> 00:01:00,600 akan terlihat sedikit asing untuk sebagian besar dari Anda, melihat masa lalu itu. 22 00:01:00,600 --> 00:01:03,220 Dan mencoba untuk melihat ide-ide yang, memang, akrab, 23 00:01:03,220 --> 00:01:06,750 karena di sini di minggu satu apa kami akan mulai lakukan adalah untuk membandingkan, 24 00:01:06,750 --> 00:01:08,980 awalnya, Scratch dibandingkan C. 25 00:01:08,980 --> 00:01:12,350 >> Jadi, misalnya, ingat bahwa ketika kita diimplementasikan pertama program kami 26 00:01:12,350 --> 00:01:16,220 terakhir kali, kami memiliki blok yang tampak sedikit sesuatu seperti ini-- ketika 27 00:01:16,220 --> 00:01:19,990 bendera hijau diklik, dan kemudian kita harus satu potongan puzzle atau lebih di bawahnya, 28 00:01:19,990 --> 00:01:22,150 dalam kasus ini, mengatakan, halo dunia. 29 00:01:22,150 --> 00:01:24,870 Jadi, memang, di Scratch, ketika saya klik bendera hijau 30 00:01:24,870 --> 00:01:27,390 untuk menjalankan program saya, jadi untuk berbicara, ini adalah 31 00:01:27,390 --> 00:01:29,520 blok yang dijalankan, atau dikelola. 32 00:01:29,520 --> 00:01:32,230 Dan, khususnya, Scratch kata, halo, dunia. 33 00:01:32,230 --> 00:01:35,377 >> Sekarang, aku bisa ditentukan kata yang berbeda di sini. 34 00:01:35,377 --> 00:01:37,960 Tapi kita akan melihat bahwa, memang, banyak dari blocks-- ini dan memang, 35 00:01:37,960 --> 00:01:41,880 di C banyak functions-- dapat parametrized atau disesuaikan 36 00:01:41,880 --> 00:01:43,150 untuk melakukan hal yang berbeda. 37 00:01:43,150 --> 00:01:45,520 Bahkan, di C jika kita dikonversi, sekarang, 38 00:01:45,520 --> 00:01:47,567 Program Scratch ini untuk bahasa lain ini, 39 00:01:47,567 --> 00:01:49,650 kita akan menulis sedikit sesuatu seperti ini. 40 00:01:49,650 --> 00:01:52,540 >> Memang, ada beberapa asing sintaks ada kemungkinan besar, int, 41 00:01:52,540 --> 00:01:54,380 dan tanda kurung, dan kosong. 42 00:01:54,380 --> 00:01:57,740 Tapi printf-- meskipun Anda akan pikir itu hanya akan menjadi cetak. 43 00:01:57,740 --> 00:02:00,120 Tapi cetak berarti cetak diformat, karena kami akan segera melihat. 44 00:02:00,120 --> 00:02:02,140 Ini benar-benar akan mencetak ke layar apapun 45 00:02:02,140 --> 00:02:05,990 adalah dalam mereka kurung, yang tentu saja dalam hal ini adalah, halo dunia. 46 00:02:05,990 --> 00:02:09,290 >> Tapi Anda akan melihat beberapa lainnya sintaks, beberapa tanda kutip ganda, 47 00:02:09,290 --> 00:02:11,890 bahwa kurung di akhir, semi-usus dan sejenisnya. 48 00:02:11,890 --> 00:02:15,027 Jadi ada sedikit overhead, sehingga untuk berbicara, baik secara kognitif 49 00:02:15,027 --> 00:02:17,860 dan sintaksis, bahwa kita akan harus diingat sebelum lama. 50 00:02:17,860 --> 00:02:20,720 Tapi menyadari bahwa dengan latihan, ini akan mulai melompat keluar pada Anda. 51 00:02:20,720 --> 00:02:24,920 >> Bahkan, mari kita fokus pada satu Fungsi specifically-- dalam kasus ini, 52 00:02:24,920 --> 00:02:26,290 menyapa dunia. 53 00:02:26,290 --> 00:02:27,560 Jadi katakan adalah fungsi. 54 00:02:27,560 --> 00:02:31,320 Halo dunia adalah parameter yang, atau argumen, kustomisasi. 55 00:02:31,320 --> 00:02:34,320 >> Dan kesetaraan di C hanya akan menjadi satu baris ini di sini, 56 00:02:34,320 --> 00:02:38,710 di mana printf setara dengan, mengatakan, ganda string yang dikutip, halo 57 00:02:38,710 --> 00:02:41,470 dunia setara, tentu saja, apa yang ada di kotak putih di sana. 58 00:02:41,470 --> 00:02:45,680 Dan backslash n, meskipun sedikit aneh dan absen dari Scratch, 59 00:02:45,680 --> 00:02:49,380 hanya akan memiliki efek kita akan lihat di komputer, seperti Mac saya atau PC, 60 00:02:49,380 --> 00:02:51,660 hanya memindahkan kursor ke baris berikutnya. 61 00:02:51,660 --> 00:02:53,970 Ini seperti memukul Enter pada keyboard Anda. 62 00:02:53,970 --> 00:02:55,580 >> Jadi kita akan melihat itu lagi sebelum lama. 63 00:02:55,580 --> 00:02:58,640 Tapi pertama-tama, mari kita lihat ini contoh lain dalam kasus loop. 64 00:02:58,640 --> 00:03:02,830 Kami memiliki ini selamanya lingkaran terakhir kali, yang merupakan serangkaian potongan puzzle 65 00:03:02,830 --> 00:03:05,490 yang melakukan sesuatu yang benar forever-- dalam kasus ini, 66 00:03:05,490 --> 00:03:08,360 mengatakan, halo dunia, halo dunia, halo dunia, halo dunia. 67 00:03:08,360 --> 00:03:10,350 Jadi itu loop tak terbatas dengan desain. 68 00:03:10,350 --> 00:03:14,580 >> Dalam C, jika kita ingin menerapkan ini ide yang sama, kita mungkin hanya melakukan ini. 69 00:03:14,580 --> 00:03:19,570 Sementara benar, printf halo dunia-- sekarang sementara, hanya semantik, jenis 70 00:03:19,570 --> 00:03:23,090 memunculkan ide untuk melakukan sesuatu lagi, dan lagi, dan lagi, 71 00:03:23,090 --> 00:03:23,980 dan untuk berapa lama? 72 00:03:23,980 --> 00:03:27,990 Nah, ingat true-- yang benar adalah hanya pada atau satu. 73 00:03:27,990 --> 00:03:30,660 >> Dan benar, tentu saja, selalu benar. 74 00:03:30,660 --> 00:03:33,060 Jadi itu semacam berarti sebuah Pernyataan hanya untuk mengatakan yang benar. 75 00:03:33,060 --> 00:03:36,890 Tapi memang, ini disengaja, karena jika benar hanya selalu benar, 76 00:03:36,890 --> 00:03:40,850 dari sementara benar hanya menyiratkan, jika sedikit tidak langsung, 77 00:03:40,850 --> 00:03:44,070 bahwa baris kode berikut di antara mereka kurung kurawal 78 00:03:44,070 --> 00:03:48,320 harus hanya menjalankan lagi, dan lagi, dan lagi, dan tidak pernah benar-benar berhenti. 79 00:03:48,320 --> 00:03:50,230 >> Tapi jika Anda ingin Anda loop untuk berhenti, seperti yang kita 80 00:03:50,230 --> 00:03:54,500 lakukan terakhir kali dengan sesuatu seperti ini, ulangi berikut 50 kali, 81 00:03:54,500 --> 00:03:57,700 di C kita bisa melakukan hal yang sama dengan apa yang disebut untuk loop-- kata kunci 82 00:03:57,700 --> 00:03:59,330 tidak menjadi sementara, tapi untuk. 83 00:03:59,330 --> 00:04:03,290 Dan kemudian kami memiliki beberapa sintaks baru di sini, dengan int i sama dengan 0, i kurang dari 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 Dan kami akan kembali ke itu. 86 00:04:05,430 --> 00:04:09,660 Tapi ini hanya bagaimana kita akan menerjemahkan set blok Scratch 87 00:04:09,660 --> 00:04:13,079 untuk satu set C baris kode. 88 00:04:13,079 --> 00:04:14,450 >> Sementara itu, mempertimbangkan variabel. 89 00:04:14,450 --> 00:04:16,540 Dan, pada kenyataannya, kita hanya melihat satu saat yang lalu. 90 00:04:16,540 --> 00:04:21,220 Dan dalam kasus Scratch, jika kita ingin mendeklarasikan variabel yang disebut i 91 00:04:21,220 --> 00:04:24,590 untuk i menjadi integer, hanya nomor, dan kami ingin mengatur itu untuk beberapa nilai, 92 00:04:24,590 --> 00:04:28,410 kita akan menggunakan jeruk ini memblokir sini-set i ke 0. 93 00:04:28,410 --> 00:04:30,800 >> Dan kita akan melihat hari ini dan luar, seperti minggu lalu, 94 00:04:30,800 --> 00:04:33,850 programmer melakukan hampir selalu mulai menghitung dari nol, benar-benar 95 00:04:33,850 --> 00:04:34,950 dengan perjanjian. 96 00:04:34,950 --> 00:04:37,250 Tetapi juga karena ingat dari diskusi kami biner, 97 00:04:37,250 --> 00:04:39,990 jumlah terkecil Anda bisa mewakili dengan jumlah bit 98 00:04:39,990 --> 00:04:41,640 hanya akan menjadi 0 itu sendiri. 99 00:04:41,640 --> 00:04:45,190 Dan jadi kita akan umumnya mulai menginisialisasi bahkan variabel untuk 0. 100 00:04:45,190 --> 00:04:47,710 >> Dan di C untuk melakukan hal yang sama, kita akan mengatakan int 101 00:04:47,710 --> 00:04:50,110 untuk integer, saya hanya oleh konvensi. 102 00:04:50,110 --> 00:04:53,390 Saya bisa disebut variabel ini apapun yang saya inginkan, seperti di Scratch. 103 00:04:53,390 --> 00:04:57,770 Dan kemudian sama dengan 0 hanya ditunjuk nilai 0 dari kanan 104 00:04:57,770 --> 00:05:01,319 dan menempatkan ke variabel, atau wadah penyimpanan di sana, di sebelah kiri. 105 00:05:01,319 --> 00:05:04,360 Dan semi-kolon karena kami akan see-- dan kami telah melihat beberapa already-- ini 106 00:05:04,360 --> 00:05:06,530 hanya berarti akhir pemikiran. 107 00:05:06,530 --> 00:05:09,430 Lanjutkan untuk melakukan sesuatu yang lain pada garis yang mengikuti. 108 00:05:09,430 --> 00:05:11,330 >> Sekarang, bagaimana dengan ekspresi Boolean? 109 00:05:11,330 --> 00:05:14,320 Ingat bahwa di Scratch, ini adalah ekspresi 110 00:05:14,320 --> 00:05:16,740 yang baik benar atau pertanyaan false--, 111 00:05:16,740 --> 00:05:18,910 benar-benar, yang benar atau salah. 112 00:05:18,910 --> 00:05:21,960 Jadi dalam kasus Scratch, kita mungkin mengajukan pertanyaan sederhana seperti ini, 113 00:05:21,960 --> 00:05:24,586 adalah saya kurang dari 50? 114 00:05:24,586 --> 00:05:25,710 Jadi saya, sekali lagi, adalah bilangan bulat. 115 00:05:25,710 --> 00:05:27,210 Mungkin kita menggunakannya dalam program Scratch 116 00:05:27,210 --> 00:05:29,310 untuk melacak skor atau semacam itu. 117 00:05:29,310 --> 00:05:33,810 Jadi sintaks ini di sini di Scratch hanya berarti, adalah i kurang dari 50? 118 00:05:33,810 --> 00:05:37,330 Nah, untungnya, ada sesuatu yang sederhana dalam C. Dan untuk menerjemahkan, 119 00:05:37,330 --> 00:05:41,780 ini kita hanya akan mengatakan saya kurang dari 50, dengan menggunakan kunci familiar 120 00:05:41,780 --> 00:05:42,850 pada keyboard Anda. 121 00:05:42,850 --> 00:05:45,141 >> Sementara itu, jika Anda ingin mengatakan sesuatu yang lebih umum, 122 00:05:45,141 --> 00:05:49,890 seperti, baik, adalah x kurang dari y di mana setiap dari x dan y itu sendiri variabel? 123 00:05:49,890 --> 00:05:52,280 Kita bisa melakukan hal yang sama di C, selama kita sudah 124 00:05:52,280 --> 00:05:53,942 menciptakan variabel-variabel ini sudah. 125 00:05:53,942 --> 00:05:55,650 Dan kita akan melihat bagaimana melakukan itu tak lama. 126 00:05:55,650 --> 00:05:58,590 Kami hanya akan mengatakan x kurang dari y. 127 00:05:58,590 --> 00:06:00,530 >> Jadi Anda mulai melihat beberapa kesamaan. 128 00:06:00,530 --> 00:06:03,490 Dan orang-orang itu yang membuat Scratch yang pasti 129 00:06:03,490 --> 00:06:05,250 terinspirasi oleh beberapa ide dasar. 130 00:06:05,250 --> 00:06:10,350 Dan Anda akan melihat semacam ini sintaks di banyak languages-- 131 00:06:10,350 --> 00:06:12,160 bukan hanya Scratch, tidak hanya C, tapi Python, 132 00:06:12,160 --> 00:06:14,790 dan JavaScript, dan bahasa lain masih. 133 00:06:14,790 --> 00:06:18,270 >> Mari kita pertimbangkan membangun lain dari C, gagasan kondisi, 134 00:06:18,270 --> 00:06:20,370 melakukan sesuatu kondisional. 135 00:06:20,370 --> 00:06:22,720 Jika sesuatu itu benar, melakukan hal ini. 136 00:06:22,720 --> 00:06:24,457 Jika sesuatu yang lain benar, melakukan itu. 137 00:06:24,457 --> 00:06:27,040 Ini semacam pemrograman setara dengan persimpangan jalan. 138 00:06:27,040 --> 00:06:29,730 Mungkin dua arah garpu, tiga-cara garpu, atau lebih. 139 00:06:29,730 --> 00:06:32,800 Dan di Scratch, kita mungkin memiliki melihat sesuatu seperti ini. 140 00:06:32,800 --> 00:06:34,010 >> Jadi yang satu ini adalah salah satu yang besar. 141 00:06:34,010 --> 00:06:36,750 Tapi mempertimbangkan relatif kesederhanaan logika. 142 00:06:36,750 --> 00:06:44,010 Jika x kurang dari y, maka katakan x kurang dari y, lain jika x lebih besar dari y, 143 00:06:44,010 --> 00:06:46,230 kemudian berkata x lebih besar dari y. 144 00:06:46,230 --> 00:06:48,300 Dan kemudian, secara logis, jika Anda berpikir kembali ke Scratch 145 00:06:48,300 --> 00:06:52,610 atau hanya intuisi manusia sendiri, baik, jika x tidak lebih besar dari y, dan x 146 00:06:52,610 --> 00:06:57,000 tidak kurang dari y, maka tentu saja x akan menjadi sama dengan y. 147 00:06:57,000 --> 00:06:59,690 Jadi dalam hal ini, oleh bersarang blok-blok Scratch, 148 00:06:59,690 --> 00:07:02,580 kita dapat mencapai tiga Cara pertigaan jalan? 149 00:07:02,580 --> 00:07:04,980 >> Sementara itu, jika kita ingin melakukan itu di C, itu bisa dibilang 150 00:07:04,980 --> 00:07:08,420 terlihat simpler-- sedikit setidaknya setelah Anda mendapatkan akrab dengan sintaks. 151 00:07:08,420 --> 00:07:12,050 Jika x kurang dari y, printf x kurang dari y. 152 00:07:12,050 --> 00:07:16,140 Lain jika x lebih besar dari y, printf x lebih besar dari y. 153 00:07:16,140 --> 00:07:21,210 Lain printf x sama dengan y-- dan, lagi, dengan backslash mereka berakhir hanya 154 00:07:21,210 --> 00:07:24,160 untuk garis baru sehingga jika Anda benar-benar berlari program semacam ini 155 00:07:24,160 --> 00:07:25,940 itu hanya akan memindahkan kursor Anda pada akhirnya 156 00:07:25,940 --> 00:07:28,100 ke baris berikutnya dari layar. 157 00:07:28,100 --> 00:07:31,270 >> Sekarang, sementara Scratch memiliki lainnya fitur yang lebih canggih, hanya 158 00:07:31,270 --> 00:07:34,320 beberapa di antaranya kita akan awalnya pindah ke dunia C. 159 00:07:34,320 --> 00:07:37,010 Dan salah satunya adalah disebut daftar di Scratch. 160 00:07:37,010 --> 00:07:39,100 Dan ini adalah khusus jenis variabel yang 161 00:07:39,100 --> 00:07:42,840 diizinkan Anda untuk menyimpan beberapa hal di kembali, ke belakang, ke belakang, ke belakang. 162 00:07:42,840 --> 00:07:45,540 >> Dalam C, tidak memiliki daftar, per se, tetapi sesuatu 163 00:07:45,540 --> 00:07:48,090 yang lebih umum disebut array, meskipun kami akan 164 00:07:48,090 --> 00:07:50,590 kembali lagi nanti semester ini untuk melihat sesuatu 165 00:07:50,590 --> 00:07:52,780 disebut daftar, atau benar-benar sebuah linked list. 166 00:07:52,780 --> 00:07:55,510 Tapi untuk saat ini, yang paling dekat setara dalam C untuk kita 167 00:07:55,510 --> 00:07:57,345 akan menjadi sesuatu yang disebut array. 168 00:07:57,345 --> 00:07:59,740 Dan sebuah array hanyalah sebuah jenis khusus dari variabel 169 00:07:59,740 --> 00:08:03,160 yang memungkinkan Anda untuk menyimpan data kembali, ke belakang, ke belakang, ke belakang. 170 00:08:03,160 --> 00:08:05,840 >> Dan, memang, di Scratch, jika kita ingin mengakses 171 00:08:05,840 --> 00:08:09,030 elemen pertama dari array atau a list-- dan aku akan menyebutnya, 172 00:08:09,030 --> 00:08:13,600 dengan konvensi, argv, argumen vektor, tetapi lebih pada sebelum lama. 173 00:08:13,600 --> 00:08:17,090 Jika saya ingin mendapatkan pada elemen pertama argv, dalam dunia Scratch 174 00:08:17,090 --> 00:08:20,930 Anda benar-benar melakukan biasanya mulai menghitung dari 1. 175 00:08:20,930 --> 00:08:22,850 >> Dan jadi saya mungkin mendapatkan item 1 dari argv. 176 00:08:22,850 --> 00:08:26,310 Itu hanya bagaimana MIT dilaksanakan gagasan daftar. 177 00:08:26,310 --> 00:08:29,860 Tapi di C, aku akan lebih sederhana hanya mengatakan, argv, 178 00:08:29,860 --> 00:08:32,758 yang lagi adalah nama saya list-- atau harus jelas, array. 179 00:08:32,758 --> 00:08:34,549 Dan jika saya ingin yang pertama elemen, aku akan 180 00:08:34,549 --> 00:08:37,890 menggunakan tanda kurung persegi, yang Anda mungkin tidak sering digunakan di bawah keyboard. 181 00:08:37,890 --> 00:08:40,150 >> Tapi 0 hanya berarti, mendapatkan saya yang pertama. 182 00:08:40,150 --> 00:08:42,160 Jadi pada kesempatan dan sebagai waktu berlalu, kita akan 183 00:08:42,160 --> 00:08:44,570 untuk mulai melihat dikotomi ini antara Scratch dan C, 184 00:08:44,570 --> 00:08:46,070 dimana Scratch menggunakan satu. 185 00:08:46,070 --> 00:08:47,670 Kami di C menggunakan 0 sini. 186 00:08:47,670 --> 00:08:49,420 Tapi Anda akan segera melihat setelah Anda memahami 187 00:08:49,420 --> 00:08:52,920 dasar setiap bahasa, yang hal-hal ini mulai mendapatkan semua lebih 188 00:08:52,920 --> 00:08:56,860 akrab melalui praktek dan praktek. 189 00:08:56,860 --> 00:08:59,700 >> Jadi mari kita benar-benar melihat sekarang di sebuah program. 190 00:08:59,700 --> 00:09:04,031 Berikut akan menjadi yang pertama dari C kami kode sumber untuk program lengkap. 191 00:09:04,031 --> 00:09:06,280 Dan program kita akan menawarkan untuk pertimbangan 192 00:09:06,280 --> 00:09:09,340 adalah salah satu yang setara untuk potongan Scratch sebelumnya. 193 00:09:09,340 --> 00:09:13,210 >> Jadi di sini, kita memiliki apa yang bisa dibilang program C sederhana 194 00:09:13,210 --> 00:09:15,410 Anda dapat menulis bahwa sebenarnya sesuatu. 195 00:09:15,410 --> 00:09:18,250 Sekarang, kita akan melihat masa lalu, untuk saat ini, telah mencakup, 196 00:09:18,250 --> 00:09:21,190 io.h standar, dan sudut ini kurung, dan int, dan tidak berlaku, 197 00:09:21,190 --> 00:09:22,840 dan kurung kurawal, dan sejenisnya. 198 00:09:22,840 --> 00:09:25,390 >> Dan mari kita fokus pada apa, setidaknya secara intuitif, 199 00:09:25,390 --> 00:09:26,860 mungkin melompat keluar pada Anda sudah. 200 00:09:26,860 --> 00:09:30,300 Bahkan, utama, saya tidak tentu tahu apa ini, 201 00:09:30,300 --> 00:09:34,580 tapi banyak seperti Scratch memiliki bahwa ketika bendera hijau diklik potongan puzzle, 202 00:09:34,580 --> 00:09:39,070 begitu juga C sebagai bahasa pemrograman memiliki sepotong utama kode yang 203 00:09:39,070 --> 00:09:43,380 dijalankan secara default. Dan, memang, itu benar akan disebut utama. 204 00:09:43,380 --> 00:09:44,720 >> Jadi utama adalah fungsi. 205 00:09:44,720 --> 00:09:48,720 Dan itu fungsi khusus yang ada di C bahwa ketika Anda menjalankan program, 206 00:09:48,720 --> 00:09:52,720 itu adalah utama yang akan dijalankan oleh default. Dalam dunia Scratch, 207 00:09:52,720 --> 00:09:56,970 itu biasanya ketika bendera hijau diklik yang mendapat dijalankan secara default. 208 00:09:56,970 --> 00:10:01,130 >> Sementara itu, kami telah melihat ini sebelumnya, printf atau cetak diformat, itu 209 00:10:01,130 --> 00:10:05,620 akan menjadi fungsi yang datang dengan C, bersama dengan sejumlah orang lain, 210 00:10:05,620 --> 00:10:10,140 yang akan dari waktu dan waktu lagi, untuk melakukan hal 211 00:10:10,140 --> 00:10:12,450 seperti namanya, mencetak sesuatu. 212 00:10:12,450 --> 00:10:13,500 Apa yang kita ingin mencetak? 213 00:10:13,500 --> 00:10:15,770 Nah, kita akan melihat bahwa oleh karakter melampirkan 214 00:10:15,770 --> 00:10:18,680 seperti these-- dunia halo, backslash n dalam tanda kutip ganda, 215 00:10:18,680 --> 00:10:23,040 kita bisa mengatakan printf persis apa untuk mencetak di layar. 216 00:10:23,040 --> 00:10:26,430 >> Tetapi untuk melakukan itu, kami sayangnya 217 00:10:26,430 --> 00:10:30,010 perlu mengambil sesuatu yang sudah samar untuk kita manusia, 218 00:10:30,010 --> 00:10:34,510 tapi setidaknya itu agak readable-- tajam termasuk, standar io.h, int, 219 00:10:34,510 --> 00:10:39,340 utama, kekosongan, printf, semua magis mantra kita hanya melihat pada layar. 220 00:10:39,340 --> 00:10:42,470 Tapi kami benar-benar harus pergi lebih misterius masih. 221 00:10:42,470 --> 00:10:47,140 Pertama kita perlu untuk menerjemahkan kode yang kita tulis ke dalam kode mesin. 222 00:10:47,140 --> 00:10:51,370 Dan ingat dari minggu lalu bahwa mesin, setidaknya orang-orang yang kita kenal di sini, 223 00:10:51,370 --> 00:10:54,450 pada akhir hari hanya memahami nol dan satu. 224 00:10:54,450 --> 00:10:58,100 >> Dan Allahku, jika kita harus menulis ini nol dan satu untuk benar-benar program 225 00:10:58,100 --> 00:11:01,260 itu akan sangat, sangat cepat mengambil kesenangan dari apa pun. 226 00:11:01,260 --> 00:11:05,150 Tapi ternyata, per pekan lalu, bahwa pola-pola nol dan satu 227 00:11:05,150 --> 00:11:06,400 hanya memiliki arti khusus. 228 00:11:06,400 --> 00:11:08,500 Dalam konteks tertentu, mereka mungkin berarti angka. 229 00:11:08,500 --> 00:11:11,840 >> Dalam beberapa konteks, mereka mungkin berarti huruf, atau warna, atau sejumlah 230 00:11:11,840 --> 00:11:14,710 abstraksi lain ada pada. 231 00:11:14,710 --> 00:11:18,450 Tapi sama seperti komputer Anda memiliki CPU, Central Processing Unit, 232 00:11:18,450 --> 00:11:20,390 atau otak dalam komputer Anda. 233 00:11:20,390 --> 00:11:22,240 Ini biasanya Intel dalam, karena itulah 234 00:11:22,240 --> 00:11:24,900 salah satu perusahaan terbesar yang membuat CPU untuk komputer. 235 00:11:24,900 --> 00:11:28,910 >> Nah, CPU Intel dan lain-lain hanya telah memutuskan di muka 236 00:11:28,910 --> 00:11:33,970 bahwa pola-pola tertentu nol dan yang berarti hal-hal tertentu. 237 00:11:33,970 --> 00:11:37,040 pola-pola tertentu dari nol dan satu akan berarti, mencetak ini ke layar, 238 00:11:37,040 --> 00:11:39,710 atau menambahkan dua nomor tersebut, atau kurangi dua nomor tersebut, 239 00:11:39,710 --> 00:11:43,310 atau memindahkan sepotong data dari memori komputer saya di sini, 240 00:11:43,310 --> 00:11:47,870 atau jumlah tingkat yang sangat rendah lainnya, tapi akhirnya berguna, operasi. 241 00:11:47,870 --> 00:11:53,022 Tapi, untungnya, kita manusia tidak akan perlu mengetahui tingkat detail. 242 00:11:53,022 --> 00:11:56,230 Memang, sama seperti terakhir kali, di mana kita disarikan lagi, dan lagi, dan lagi, 243 00:11:56,230 --> 00:11:58,930 bangunan dari tingkat yang sangat rendah primitif seperti nol dan satu 244 00:11:58,930 --> 00:12:01,160 konsep tingkat yang lebih tinggi seperti angka, dan huruf, 245 00:12:01,160 --> 00:12:04,330 dan warna, dan banyak lagi, sehingga kita sebagai programmer 246 00:12:04,330 --> 00:12:07,080 berdiri di atas pundak orang lain yang datang sebelum kita 247 00:12:07,080 --> 00:12:11,260 dan menggunakan perangkat lunak yang lainnya orang telah ditulis sebelum us-- 248 00:12:11,260 --> 00:12:14,340 yaitu program yang disebut compiler. 249 00:12:14,340 --> 00:12:17,770 >> C adalah bahasa yang biasanya disusun, 250 00:12:17,770 --> 00:12:22,130 yang berarti dikonversi dari kode sumber untuk kode mesin. 251 00:12:22,130 --> 00:12:25,230 Secara khusus, apa artinya ini adalah bahwa jika Anda punya sumber Anda 252 00:12:25,230 --> 00:12:29,530 kode yang Anda sendiri menulis, seperti yang kita segera akan hanya sesaat pada layar, 253 00:12:29,530 --> 00:12:33,140 dan Anda ingin mengubahnya akhirnya ke mesin code-- 254 00:12:33,140 --> 00:12:37,100 mereka nol dan satu yang hanya Mac atau PC Anda 255 00:12:37,100 --> 00:12:41,230 understands-- Anda punya pertama pakan yang kode sumber sebagai 256 00:12:41,230 --> 00:12:46,340 input ke khusus Program yang disebut kompilator, 257 00:12:46,340 --> 00:12:48,974 output yang kita akan lihat adalah kode mesin. 258 00:12:48,974 --> 00:12:51,890 Dan, memang, terakhir kali kami berbicara tentang, benar-benar, pada akhir hari, 259 00:12:51,890 --> 00:12:52,610 pemecahan masalah. 260 00:12:52,610 --> 00:12:53,360 Anda punya masukan. 261 00:12:53,360 --> 00:12:54,318 Dan Anda punya output. 262 00:12:54,318 --> 00:12:56,560 Dan Anda punya beberapa jenis algoritma di tengah. 263 00:12:56,560 --> 00:12:59,830 >> Algoritma pasti bisa diimplementasikan dalam perangkat lunak, 264 00:12:59,830 --> 00:13:02,900 seperti yang kita lihat dengan pseudocode minggu lalu dan seperti yang kita lihat dengan kode aktual 265 00:13:02,900 --> 00:13:03,490 minggu ini. 266 00:13:03,490 --> 00:13:06,430 Dan kompilator benar-benar hanya memiliki satu set algoritma dalam 267 00:13:06,430 --> 00:13:10,060 itu yang tahu bagaimana mengkonversi kata kunci khusus, 268 00:13:10,060 --> 00:13:12,180 seperti utama, dan printf, dan lain-lain yang baru saja kita 269 00:13:12,180 --> 00:13:17,620 melihat ke dalam pola nol dan orang yang Intel dalam dan lainnya CPU 270 00:13:17,620 --> 00:13:20,020 benar-benar mengerti. 271 00:13:20,020 --> 00:13:22,460 Jadi bagaimana kita melakukan ini? 272 00:13:22,460 --> 00:13:24,470 Mana kita mendapatkan kompilator? 273 00:13:24,470 --> 00:13:26,400 >> Sebagian besar dari kita di sini memiliki Mac atau PC. 274 00:13:26,400 --> 00:13:29,152 Dan Anda menjalankan Mac OS, atau Windows, atau Linux, atau Solaris, 275 00:13:29,152 --> 00:13:30,860 atau jumlah lain sistem operasi. 276 00:13:30,860 --> 00:13:32,568 Dan, memang, kita bisa pergi ke web 277 00:13:32,568 --> 00:13:35,710 dan download kompilator untuk Mac atau PC Anda 278 00:13:35,710 --> 00:13:37,360 untuk sistem operasi tertentu. 279 00:13:37,360 --> 00:13:39,617 Tapi kita semua akan berada di halaman yang berbeda, sehingga untuk berbicara. 280 00:13:39,617 --> 00:13:41,450 Kita akan memiliki sedikit konfigurasi yang berbeda. 281 00:13:41,450 --> 00:13:43,210 Dan hal tidak akan bekerja semua sama. 282 00:13:43,210 --> 00:13:45,280 Dan, memang, hari ini banyak dari kita tidak menggunakan 283 00:13:45,280 --> 00:13:47,516 software yang berjalan hanya pada laptop kita. 284 00:13:47,516 --> 00:13:49,390 Sebaliknya, kita menggunakan sesuatu seperti browser yang 285 00:13:49,390 --> 00:13:52,930 memungkinkan kita untuk mengakses web berbasis aplikasi di awan. 286 00:13:52,930 --> 00:13:55,630 Dan kemudian semester ini, kita akan melakukan hal itu. 287 00:13:55,630 --> 00:13:59,660 Kami akan menulis aplikasi atau software menggunakan code-- tidak C, 288 00:13:59,660 --> 00:14:02,860 tetapi bahasa lain seperti Python dan JavaScript-- yang berjalan di awan. 289 00:14:02,860 --> 00:14:05,860 >> Dan untuk melakukan itu, kita sendiri selama semester 290 00:14:05,860 --> 00:14:11,890 benar-benar akan menggunakan cloud berbasis lingkungan yang dikenal sebagai CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 Ini adalah pemrograman berbasis web lingkungan, atau pengembangan terintegrasi 292 00:14:16,030 --> 00:14:20,610 lingkungan, IDE, yang dibangun di atas beberapa perangkat lunak sumber terbuka yang disebut Cloud 9. 293 00:14:20,610 --> 00:14:22,966 Dan kami telah membuat beberapa pedagogis penyederhanaan untuk itu 294 00:14:22,966 --> 00:14:25,840 sehingga untuk menyembunyikan fitur tertentu di minggu-minggu pertama yang kita tidak perlu, 295 00:14:25,840 --> 00:14:27,770 setelah itu Anda bisa mengungkapkan mereka dan melakukan sebagian 296 00:14:27,770 --> 00:14:29,400 apa pun yang Anda inginkan dengan lingkungan. 297 00:14:29,400 --> 00:14:32,470 >> Dan memungkinkan kita, juga, untuk pra-instal software tertentu. 298 00:14:32,470 --> 00:14:35,330 Hal-hal seperti yang disebut CS50 perpustakaan, yang kita akan segera melihat 299 00:14:35,330 --> 00:14:39,210 memberikan kita dalam C dengan beberapa fungsionalitas tambahan. 300 00:14:39,210 --> 00:14:44,392 Jadi, jika Anda pergi ke, akhirnya, CS50.io, Anda akan diminta untuk log in, 301 00:14:44,392 --> 00:14:46,350 dan sekali Anda lakukan dan membuat akun gratis, 302 00:14:46,350 --> 00:14:52,150 Anda akan dapat mengakses lingkungan yang terlihat cukup seperti ini. 303 00:14:52,150 --> 00:14:53,760 >> Sekarang, ini adalah dalam mode default. 304 00:14:53,760 --> 00:14:55,650 Semuanya bagus dan cerah di layar. 305 00:14:55,650 --> 00:14:57,941 Banyak dari kita memiliki kebiasaan bekerja pada CS50 sepotong itu 306 00:14:57,941 --> 00:14:59,150 cukup larut malam. 307 00:14:59,150 --> 00:15:02,400 Dan beberapa dari Anda mungkin lebih memilih untuk mengubahnya menjadi modus malam, sehingga untuk berbicara. 308 00:15:02,400 --> 00:15:05,550 >> Tapi, pada akhirnya, apa yang Anda akan melihat dalam CS50 IDE 309 00:15:05,550 --> 00:15:08,340 adalah tiga areas-- berbeda daerah di mana kiri 310 00:15:08,340 --> 00:15:12,604 file Anda akan berada di awan, area di kanan atas 311 00:15:12,604 --> 00:15:14,270 di mana kode Anda akan menjadi diedit. 312 00:15:14,270 --> 00:15:16,650 Anda akan dapat membuka tab individu untuk setiap program 313 00:15:16,650 --> 00:15:19,670 yang Anda tulis semester ini di dalam itu sudut kanan atas. 314 00:15:19,670 --> 00:15:23,070 Dan kemudian yang paling arcanely, dan belum kuat, 315 00:15:23,070 --> 00:15:26,610 akan menjadi hal ini di bawah dikenal sebagai jendela terminal. 316 00:15:26,610 --> 00:15:29,450 >> Ini adalah sekolah tua Command Line Interface, 317 00:15:29,450 --> 00:15:32,240 atau CLI, yang memungkinkan Anda untuk menjalankan perintah 318 00:15:32,240 --> 00:15:35,260 pada computer-- dalam kasus ini, komputer di cloud-- 319 00:15:35,260 --> 00:15:39,090 untuk melakukan hal-hal seperti kompilasi kode Anda dari kode sumber untuk kode mesin, 320 00:15:39,090 --> 00:15:43,600 untuk menjalankan program Anda, atau untuk memulai Anda web server, atau untuk mengakses database Anda, 321 00:15:43,600 --> 00:15:47,454 dan sejumlah teknik lainnya bahwa kita akan mulai menggunakan sebelum lama. 322 00:15:47,454 --> 00:15:49,370 Tapi untuk sampai ke sana, kami akan benar-benar memiliki 323 00:15:49,370 --> 00:15:51,240 untuk online dan mulai bermain. 324 00:15:51,240 --> 00:15:54,399 Dan untuk melakukan itu, mari kita pertama mulai mengutak-atik utama, 325 00:15:54,399 --> 00:15:55,940 dan menulis bagian utama dari program. 326 00:15:55,940 --> 00:15:59,170 Dan mari kita gunakan fungsi yang printf, yang kita gunakan sebelumnya, 327 00:15:59,170 --> 00:16:01,050 hanya untuk mengatakan sesuatu. 328 00:16:01,050 --> 00:16:04,910 >> Jadi di sini saya sudah dalam CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Aku sudah login terlebih dahulu. 330 00:16:05,930 --> 00:16:07,360 Dan saya penuh disaring jendela. 331 00:16:07,360 --> 00:16:09,670 Dan, pada akhirnya, Anda juga dalam masalah kedatangan 332 00:16:09,670 --> 00:16:12,960 akan mengikuti langkah serupa yang akan memberikan dokumentasi online. 333 00:16:12,960 --> 00:16:16,360 Jadi Anda tidak perlu khawatir tentang menyerap setiap langkah teknis kecil 334 00:16:16,360 --> 00:16:17,730 yang saya lakukan di sini hari ini. 335 00:16:17,730 --> 00:16:19,222 >> Tapi Anda akan mendapatkan layar seperti ini. 336 00:16:19,222 --> 00:16:20,430 Saya kebetulan berada di modus malam. 337 00:16:20,430 --> 00:16:22,944 Dan Anda dapat mencerahkan segalanya up dengan menonaktifkan modus malam. 338 00:16:22,944 --> 00:16:24,860 Dan pada akhir hari, Anda akan melihat 339 00:16:24,860 --> 00:16:30,090 tiga utama ini areas-- file Browser di kiri, kode tab di bagian atas, 340 00:16:30,090 --> 00:16:32,430 dan jendela terminal di bagian bawah. 341 00:16:32,430 --> 00:16:34,890 >> Biarkan aku pergi ke depan dan menulis program pertama saya. 342 00:16:34,890 --> 00:16:42,300 Aku akan Terlebih Dahulu buka File, Simpan, dan menyimpan file saya sebagai hello.c. 343 00:16:42,300 --> 00:16:46,850 Memang, dengan konvensi, program kami menulis yang ditulis dalam bahasa C 344 00:16:46,850 --> 00:16:49,739 harus dinamai sesuatu dot c, dengan konvensi. 345 00:16:49,739 --> 00:16:53,030 Jadi aku akan nama itu hello.c, karena Aku hanya ingin menyapa dunia. 346 00:16:53,030 --> 00:16:54,820 Sekarang aku akan tampilannya dan klik Simpan. 347 00:16:54,820 --> 00:16:58,180 Dan semua yang saya miliki di sini sekarang adalah tab di mana saya bisa mulai menulis kode. 348 00:16:58,180 --> 00:16:59,490 >> Ini tidak akan dikompilasi. 349 00:16:59,490 --> 00:17:00,300 Ini berarti apa-apa. 350 00:17:00,300 --> 00:17:02,750 Dan bahkan jika aku dikonversi ini untuk nol dan satu, 351 00:17:02,750 --> 00:17:05,390 CPU akan memiliki tahu apa yang terjadi di sekitar. 352 00:17:05,390 --> 00:17:14,170 Tapi jika saya menulis baris yang cocok dengan C C makhluk conventions--, 353 00:17:14,170 --> 00:17:20,150 lagi, ini language-- dengan sintaks seperti ini, printf halo dunia-- dan saya sudah 354 00:17:20,150 --> 00:17:22,210 mendapatkan nyaman dengan melakukan ini dari waktu ke waktu. 355 00:17:22,210 --> 00:17:24,510 Jadi saya tidak berpikir saya membuat setiap kesalahan ketik. 356 00:17:24,510 --> 00:17:27,910 >> Tapi, selalu, pertama kali Anda melakukan ini, Anda akan. 357 00:17:27,910 --> 00:17:31,090 Dan apa yang akan saya lakukan mungkin sangat baik tidak bekerja untuk Anda pertama kalinya. 358 00:17:31,090 --> 00:17:33,610 Dan itu sangat OK, karena sekarang Anda 359 00:17:33,610 --> 00:17:37,662 mungkin hanya melihat seluruh banyak kebaruan, tapi seiring waktu setelah Anda mendapatkan akrab 360 00:17:37,662 --> 00:17:39,870 dengan lingkungan ini, dan bahasa ini, dan lain-lain, 361 00:17:39,870 --> 00:17:42,370 Anda akan mulai melihat hal-hal yang yang baik benar atau salah. 362 00:17:42,370 --> 00:17:44,369 >> Dan ini adalah apa yang fellows mengajar dan tentu saja 363 00:17:44,369 --> 00:17:48,780 asisten mendapatkan begitu baik pada waktu ke waktu, yang bercak kesalahan atau bug dalam kode Anda. 364 00:17:48,780 --> 00:17:52,110 Tapi saya mengklaim bahwa ada ada bug dalam kode ini. 365 00:17:52,110 --> 00:17:53,990 Jadi sekarang saya ingin menjalankan program ini. 366 00:17:53,990 --> 00:17:57,440 >> Sekarang pada Mac atau PC saya sendiri, saya di kebiasaan ikon mengklik ganda 367 00:17:57,440 --> 00:17:59,350 ketika saya ingin menjalankan beberapa program yang. 368 00:17:59,350 --> 00:18:01,080 Tapi itu bukan model di sini. 369 00:18:01,080 --> 00:18:04,570 Dalam lingkungan ini, yang CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Kami menggunakan operasi sistem yang disebut Linux. 371 00:18:07,192 --> 00:18:09,900 Linux mengingatkan lain sistem operasi, umumnya dikenal 372 00:18:09,900 --> 00:18:10,850 sebagai Unix. 373 00:18:10,850 --> 00:18:16,340 Dan Linux terutama dikenal untuk memiliki Command Line Lingkungan, CLI. 374 00:18:16,340 --> 00:18:20,070 Sekarang, kita sedang menggunakan spesifik rasa Linux disebut Ubuntu. 375 00:18:20,070 --> 00:18:22,770 Dan Ubuntu hanyalah sebuah Versi tertentu Linux. 376 00:18:22,770 --> 00:18:27,900 >> Tapi ini Linux hari ini lakukan sebenarnya datang dengan antarmuka pengguna grafis. 377 00:18:27,900 --> 00:18:30,360 Dan yang kita kebetulan menggunakan di sini adalah web berbasis. 378 00:18:30,360 --> 00:18:32,735 Jadi ini mungkin terlihat bahkan sedikit berbeda dari sesuatu 379 00:18:32,735 --> 00:18:35,310 Anda sendiri mungkin memiliki melihat atau berjalan di masa lalu. 380 00:18:35,310 --> 00:18:37,910 >> Jadi aku akan pergi ke depan sekarang dan melakukan hal berikut. 381 00:18:37,910 --> 00:18:40,950 Saya telah menyimpan file ini sebagai hello.c. 382 00:18:40,950 --> 00:18:47,350 Aku akan pergi ke depan dan Jenis clanghello.c Jadi dentang 383 00:18:47,350 --> 00:18:49,850 untuk bahasa C adalah kompilator. 384 00:18:49,850 --> 00:18:51,952 Ini pra-instal di CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 Dan Anda benar-benar dapat men-download dan menginstal ini pada Mac Anda sendiri atau PC. 386 00:18:54,910 --> 00:18:57,910 >> Tapi, sekali lagi, Anda tidak akan memiliki semua pra-konfigurasi dilakukan untuk Anda. 387 00:18:57,910 --> 00:19:00,940 Jadi untuk saat ini, aku hanya akan menjalankan clanghello.c. 388 00:19:00,940 --> 00:19:03,240 Dan sekarang perhatikan sintaks ini sini akhirnya akan 389 00:19:03,240 --> 00:19:06,930 menyadari hanya berarti bahwa aku dalam folder atau direktori yang disebut Workspace. 390 00:19:06,930 --> 00:19:11,030 tanda dolar ini hanya konvensi makna, ketik perintah Anda di sini. 391 00:19:11,030 --> 00:19:14,560 >> Ini apa yang disebut prompt, hanya dengan konvensi adalah tanda dolar. 392 00:19:14,560 --> 00:19:19,130 Dan jika aku pergi ke depan sekarang dan klik Masukkan, sepertinya tidak ada yang terjadi. 393 00:19:19,130 --> 00:19:20,930 Tapi itu sebenarnya hal yang baik. 394 00:19:20,930 --> 00:19:23,650 Kurang yang terjadi di layar Anda, semakin besar kemungkinan 395 00:19:23,650 --> 00:19:26,710 kode Anda adalah untuk menjadi benar, setidaknya sintaksis. 396 00:19:26,710 --> 00:19:29,120 >> Jadi jika saya ingin menjalankan ini Program, apa yang harus saya lakukan? 397 00:19:29,120 --> 00:19:33,770 Nah, ternyata bahwa Nama default oleh konvensi 398 00:19:33,770 --> 00:19:38,854 untuk program ketika Anda tidak menentukan nama untuk program Anda hanya a.out. 399 00:19:38,854 --> 00:19:41,270 Dan sintaks ini juga, Anda akan mendapatkan akrab dengan sebelum lama. 400 00:19:41,270 --> 00:19:47,500 >> Dot slash hanya berarti, hey, CS50 IDE, menjalankan program yang disebut a.out 401 00:19:47,500 --> 00:19:49,400 yang ada di dalam direktori saya saat ini. 402 00:19:49,400 --> 00:19:51,520 dot itu berarti direktori saat ini. 403 00:19:51,520 --> 00:19:55,040 Dan kita akan melihat apa urutan seperti lainnya karakter berarti sebelum lama. 404 00:19:55,040 --> 00:19:58,430 >> Jadi di sini kita pergi, Masukkan, halo dunia. 405 00:19:58,430 --> 00:20:00,080 Dan Anda akan melihat, bahwa apa yang terjadi? 406 00:20:00,080 --> 00:20:01,580 Tidak hanya itu mencetak hello world. 407 00:20:01,580 --> 00:20:05,990 Hal ini juga memindahkan kursor ke baris berikutnya. 408 00:20:05,990 --> 00:20:07,160 >> Dan mengapa itu? 409 00:20:07,160 --> 00:20:12,400 Apa kode yang kita tulis sebelumnya yang menjamin bahwa kursor akan 410 00:20:12,400 --> 00:20:14,882 pergi pada baris berikutnya? 411 00:20:14,882 --> 00:20:16,840 hal yang lucu tentang komputer itu hanya akan 412 00:20:16,840 --> 00:20:18,570 untuk melakukan harfiah apa yang Anda katakan untuk dilakukan. 413 00:20:18,570 --> 00:20:26,050 >> Jadi jika Anda kirim ke printf halo, koma, ruang, dunia, kutipan dekat, 414 00:20:26,050 --> 00:20:29,090 itu benar-benar hanya akan untuk mencetak karakter mereka. 415 00:20:29,090 --> 00:20:31,980 Tapi aku punya karakter khusus ini pada akhir, ingat, backslash n. 416 00:20:31,980 --> 00:20:34,230 Dan itulah yang memastikan bahwa karakter pergi 417 00:20:34,230 --> 00:20:36,570 ke baris berikutnya dari layar. 418 00:20:36,570 --> 00:20:38,097 >> Bahkan, biarkan aku pergi dan melakukan hal ini. 419 00:20:38,097 --> 00:20:39,430 Biarkan aku pergi ke depan dan menghapus ini. 420 00:20:39,430 --> 00:20:41,180 Sekarang, perhatikan bahwa atas layar saya ada 421 00:20:41,180 --> 00:20:42,890 lampu merah kecil di tab menunjukkan, 422 00:20:42,890 --> 00:20:45,047 hey, Anda tidak menyimpan file Anda. 423 00:20:45,047 --> 00:20:47,880 Jadi aku akan pergi ke depan dengan kontrol S atau perintah S, menyimpan file. 424 00:20:47,880 --> 00:20:51,130 Sekarang goes-- pergi untuk hijau moment--. 425 00:20:51,130 --> 00:20:53,760 Dan sekarang kembali ke hanya menjadi ikon dekat. 426 00:20:53,760 --> 00:21:01,860 >> Jika saya sekarang menjalankan clanghello.c lagi, Masukkan, dot slash, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 Anda akan melihat bahwa itu masih bekerja. 428 00:21:04,110 --> 00:21:06,020 Tapi itu bisa dibilang sedikit kereta. 429 00:21:06,020 --> 00:21:08,714 Sekarang, ruang kerja prompt-- saya, dan kemudian bahwa dolar tanda, 430 00:21:08,714 --> 00:21:10,880 dan kemudian prompt-- yang sebenarnya adalah semua pada baris yang sama. 431 00:21:10,880 --> 00:21:14,540 Jadi tentu bug estetika ini, bahkan jika itu tidak benar-benar bug logis. 432 00:21:14,540 --> 00:21:16,250 >> Jadi aku akan membatalkan apa yang baru saja saya lakukan. 433 00:21:16,250 --> 00:21:18,560 Aku akan menjalankan kembali a.out. 434 00:21:18,560 --> 00:21:22,710 Perhatikan Saya telah menambahkan baris karakter kembali. 435 00:21:22,710 --> 00:21:24,280 Aku sudah menyimpan file. 436 00:21:24,280 --> 00:21:31,630 >> Jadi aku akan mengulangi a.out, dan-- sialan, bug, bug yang berarti kesalahan. 437 00:21:31,630 --> 00:21:35,020 Jadi bug adalah bahwa meskipun Saya menambahkan backslash n ada, 438 00:21:35,020 --> 00:21:41,180 re-disimpan, re-berlari program, perilaku adalah sama. 439 00:21:41,180 --> 00:21:42,640 Mengapa hal itu terjadi? 440 00:21:42,640 --> 00:21:43,910 >> Aku hilang langkah, kan? 441 00:21:43,910 --> 00:21:47,620 Bahwa langkah kunci sebelumnya adalah bahwa Anda memiliki to-- ketika Anda mengubah kode sumber Anda, 442 00:21:47,620 --> 00:21:49,610 ternyata juga menjalankan melalui compiler 443 00:21:49,610 --> 00:21:51,102 lagi sehingga Anda mendapatkan kode mesin baru. 444 00:21:51,102 --> 00:21:52,810 Dan kode mesin, nol dan yang, 445 00:21:52,810 --> 00:21:56,260 akan menjadi hampir sama, tapi tidak sempurna begitu, karena yang kita butuhkan, 446 00:21:56,260 --> 00:21:57,510 Tentu saja, yang baris baru. 447 00:21:57,510 --> 00:22:02,640 >> Jadi untuk memperbaiki ini, saya akan membutuhkan untuk mengulangi clanghello.c, masukkan, dot 448 00:22:02,640 --> 00:22:03,800 slash, a.out. 449 00:22:03,800 --> 00:22:08,402 Dan sekarang, halo dunia kembali ke tempat saya berharap untuk menjadi. 450 00:22:08,402 --> 00:22:09,610 Jadi ini semua baik dan bagus. 451 00:22:09,610 --> 00:22:13,150 Tapi a.out adalah nama cukup bodoh untuk Program, meskipun itu terjadi menjadi, 452 00:22:13,150 --> 00:22:16,530 untuk alasan historis, default-- berarti output perakitan. 453 00:22:16,530 --> 00:22:20,780 >> Tapi biarkan aku pergi ke depan di sini dan melakukan hal ini berbeda. 454 00:22:20,780 --> 00:22:24,760 Saya ingin saya Program Halo dunia untuk benar-benar disebut halo. 455 00:22:24,760 --> 00:22:28,320 Jadi jika itu sebuah ikon pada saya Desktop, itu tidak akan a.out. 456 00:22:28,320 --> 00:22:29,730 Itu akan disebut halo. 457 00:22:29,730 --> 00:22:33,660 >> Jadi untuk melakukan ini, ternyata yang dentang, seperti banyak program, 458 00:22:33,660 --> 00:22:37,980 mendukung argumen baris perintah, atau bendera, atau switch, 459 00:22:37,980 --> 00:22:39,600 yang hanya mempengaruhi perilakunya. 460 00:22:39,600 --> 00:22:45,160 Secara khusus, dentang mendukung dash o flag, yang kemudian mengambil kata kedua. 461 00:22:45,160 --> 00:22:48,190 Dalam hal ini, saya akan sewenang-wenang, tapi cukup, menyebutnya halo. 462 00:22:48,190 --> 00:22:50,710 Tapi aku bisa menyebutnya apa-apa Saya ingin, kecuali a.out, yang 463 00:22:50,710 --> 00:22:52,390 akan lebih selain titik. 464 00:22:52,390 --> 00:22:55,640 >> Dan kemudian hanya menentukan nama file saya ingin mengkompilasi. 465 00:22:55,640 --> 00:22:59,190 Jadi sekarang meskipun di awal dari perintah saya masih memiliki dentang, 466 00:22:59,190 --> 00:23:01,410 pada akhir perintah Saya masih memiliki nama file, 467 00:23:01,410 --> 00:23:05,520 Saya sekarang memiliki baris perintah ini argumen, bendera ini yang mengatakan, 468 00:23:05,520 --> 00:23:11,180 oh, by the way, keluaran-o, file disebut halo, bukan a.out default. 469 00:23:11,180 --> 00:23:13,810 >> Jadi jika saya tekan Enter sekarang, tidak ada tampaknya telah terjadi. 470 00:23:13,810 --> 00:23:17,900 Dan, namun, sekarang saya bisa melakukan dot slash halo. 471 00:23:17,900 --> 00:23:19,089 Sehingga program yang sama. 472 00:23:19,089 --> 00:23:21,380 The nol dan satu yang identik pada akhir hari. 473 00:23:21,380 --> 00:23:24,210 >> Tapi mereka dalam dua a.out files-- berbeda, 474 00:23:24,210 --> 00:23:26,490 yang merupakan versi pertama dan hanya bodoh bernama, 475 00:23:26,490 --> 00:23:30,250 dan sekarang halo, yang jauh Nama yang lebih menarik untuk sebuah program. 476 00:23:30,250 --> 00:23:33,195 Tapi, jujur, saya tidak pernah akan mengingat ini lagi, 477 00:23:33,195 --> 00:23:34,070 dan lagi, dan lagi. 478 00:23:34,070 --> 00:23:36,411 Dan, sebenarnya, seperti yang kita tulis program yang lebih rumit, 479 00:23:36,411 --> 00:23:38,160 perintah Anda akan harus menulis 480 00:23:38,160 --> 00:23:40,920 akan mendapatkan bahkan lebih rumit masih. 481 00:23:40,920 --> 00:23:41,940 >> Dan jadi tidak perlu khawatir. 482 00:23:41,940 --> 00:23:46,220 Ternyata manusia sebelum kita telah menyadari mereka juga 483 00:23:46,220 --> 00:23:47,530 memiliki ini masalah yang sama. 484 00:23:47,530 --> 00:23:50,900 Mereka juga tidak menikmati harus ketik cukup panjang, perintah misterius, 485 00:23:50,900 --> 00:23:52,200 apalagi mengingat mereka. 486 00:23:52,200 --> 00:23:56,070 Dan jadi manusia sebelum kita telah membuat program lain yang membuatnya lebih mudah 487 00:23:56,070 --> 00:23:57,670 untuk mengkompilasi perangkat lunak Anda. 488 00:23:57,670 --> 00:24:01,609 >> Dan, memang, salah satu seperti Program ini disebut Membuat. 489 00:24:01,609 --> 00:24:03,150 Jadi aku akan pergi ke depan dan melakukan hal ini. 490 00:24:03,150 --> 00:24:05,691 Aku akan membatalkan semua yang saya hanya melakukan dengan cara berikut. 491 00:24:05,691 --> 00:24:07,690 Mari saya ketik LS. 492 00:24:07,690 --> 00:24:10,980 Dan Anda akan melihat tiga things-- a.out, dan bintang, halo 493 00:24:10,980 --> 00:24:12,810 dan bintang, dan hello.c. 494 00:24:12,810 --> 00:24:14,730 Mudah-mudahan, ini harus sedikit intuitif, 495 00:24:14,730 --> 00:24:18,220 sejauh sebelumnya ada tidak ada di ruang kerja ini. 496 00:24:18,220 --> 00:24:21,240 Ada apa-apa yang saya punya dibuat sampai kita mulai kelas. 497 00:24:21,240 --> 00:24:22,840 >> Dan saya buat hello.c. 498 00:24:22,840 --> 00:24:24,544 Saya kemudian dikompilasi, dan menyebutnya a.out. 499 00:24:24,544 --> 00:24:27,460 Dan kemudian aku dikompilasi lagi sedikit berbeda dan menyebutnya halo. 500 00:24:27,460 --> 00:24:32,830 Jadi saya memiliki tiga file dalam direktori ini, dalam folder ini disebut Workspace. 501 00:24:32,830 --> 00:24:35,005 Sekarang, saya bisa melihat bahwa juga jika saya zoom out sebenarnya. 502 00:24:35,005 --> 00:24:37,530 >> Jika saya tampilannya sini dan melihat bahwa tangan kanan atas 503 00:24:37,530 --> 00:24:39,940 sudut, seperti yang dijanjikan kiri sisi layar Anda 504 00:24:39,940 --> 00:24:42,990 selalu akan menunjukkan kepada Anda apa yang ada di akun Anda, apa 505 00:24:42,990 --> 00:24:44,790 dalam CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 Dan ada tiga file yang ada. 507 00:24:46,680 --> 00:24:49,070 >> Jadi saya ingin menyingkirkan a.out dan Halo. 508 00:24:49,070 --> 00:24:51,275 Dan seperti yang mungkin Anda bayangkan intuitif, Anda 509 00:24:51,275 --> 00:24:53,400 bisa mengurutkan kontrol klik atau klik kanan pada ini. 510 00:24:53,400 --> 00:24:54,590 Dan menu kecil ini muncul. 511 00:24:54,590 --> 00:24:57,170 Anda dapat men-download file, jalankan itu, preview, menyegarkan, mengubah nama, 512 00:24:57,170 --> 00:24:57,700 atau apa yang tidak. 513 00:24:57,700 --> 00:25:00,260 >> Dan aku hanya bisa menghapus, dan itu akan pergi. 514 00:25:00,260 --> 00:25:05,260 Tapi mari kita melakukan hal-hal dengan perintah baris untuk saat ini, sehingga untuk mendapatkan nyaman 515 00:25:05,260 --> 00:25:07,010 dengan ini, dan melakukan hal berikut. 516 00:25:07,010 --> 00:25:12,345 Aku akan pergi ke depan dan menghapus a.out dengan mengetik harfiah rma.out. 517 00:25:12,345 --> 00:25:14,890 Ternyata, perintah untuk menghapus atau menghapus sesuatu, 518 00:25:14,890 --> 00:25:16,280 tidak menghapus atau menghapus. 519 00:25:16,280 --> 00:25:21,260 >> Ini lebih ringkas RM, hanya untuk menyimpan Anda beberapa keystrokes, dan tekan Enter. 520 00:25:21,260 --> 00:25:24,707 Sekarang kita akan menjadi agak samar menghapus file yang a.out biasa. 521 00:25:24,707 --> 00:25:27,040 Aku tidak benar-benar tahu apa File tidak teratur akan belum. 522 00:25:27,040 --> 00:25:28,660 Tapi saya ingin menghapusnya. 523 00:25:28,660 --> 00:25:30,150 >> Jadi aku akan mengetik y untuk yes. 524 00:25:30,150 --> 00:25:31,940 Atau aku bisa mengetik keluar, dan tekan Enter. 525 00:25:31,940 --> 00:25:33,440 Dan, sekali lagi, tidak ada yang tampaknya terjadi. 526 00:25:33,440 --> 00:25:35,840 Tapi itu, umumnya, merupakan hal yang baik. 527 00:25:35,840 --> 00:25:40,490 >> Jika saya ketik LS saat ini, apa yang harus saya lihat? 528 00:25:40,490 --> 00:25:44,930 Mudah-mudahan, hanya Halo dan hello.c. 529 00:25:44,930 --> 00:25:47,286 Sekarang, sebagai samping, Anda akan melihat bintang ini, tanda bintang, 530 00:25:47,286 --> 00:25:48,660 itu pada akhir program saya. 531 00:25:48,660 --> 00:25:50,201 Dan mereka juga muncul dalam warna hijau. 532 00:25:50,201 --> 00:25:53,970 Itu hanya cara CS50 IDE dari cluing Anda ke fakta 533 00:25:53,970 --> 00:25:55,280 bahwa itu bukan kode sumber. 534 00:25:55,280 --> 00:25:58,880 Itu eksekusi, sebuah runnable program yang Anda benar-benar dapat menjalankan 535 00:25:58,880 --> 00:26:01,020 dengan melakukan dot slash, dan kemudian nama itu. 536 00:26:01,020 --> 00:26:05,860 >> Sekarang, biarkan aku pergi ke depan dan menghapus ini, rm halo, Masukkan, hapus biasa 537 00:26:05,860 --> 00:26:08,010 mengajukan halo, ya. 538 00:26:08,010 --> 00:26:11,180 Dan jika saya ketik LS, kita kembali ke hello.c. 539 00:26:11,180 --> 00:26:13,917 Cobalah untuk tidak menghapus Anda kode sumber yang sebenarnya. 540 00:26:13,917 --> 00:26:16,250 Meskipun ada fitur dibangun ke CS50 IDE mana 541 00:26:16,250 --> 00:26:19,870 Anda dapat pergi melalui sejarah revisi Anda dan mundur dalam waktu jika Anda secara tidak sengaja 542 00:26:19,870 --> 00:26:23,660 menghapus sesuatu, lakukan harus sadar sesuai petunjuk ini ya atau tidak, 543 00:26:23,660 --> 00:26:25,381 dari apa yang sebenarnya ingin Anda lakukan. 544 00:26:25,381 --> 00:26:27,380 Dan jika aku pergi ke atas meninggalkan pojok sini, 545 00:26:27,380 --> 00:26:30,696 semua yang tersisa adalah hello.c. 546 00:26:30,696 --> 00:26:32,570 Jadi ada tandan perintah lain bahwa Anda 547 00:26:32,570 --> 00:26:37,550 dapat mengeksekusi dalam dunia Linux, salah satunya adalah, sekali lagi, Membuat. 548 00:26:37,550 --> 00:26:40,180 Dan kita akan Membuat Program saya sekarang sebagai berikut. 549 00:26:40,180 --> 00:26:43,270 >> Alih-alih melakukan dentang, bukannya melakukan dentang-o, 550 00:26:43,270 --> 00:26:45,860 Aku akan hanya harfiah mengetik, membuat halo. 551 00:26:45,860 --> 00:26:49,630 Dan sekarang perhatikan, saya tidak mengetik membuat hello.c. 552 00:26:49,630 --> 00:26:50,910 Saya mengetik membuat halo. 553 00:26:50,910 --> 00:26:54,840 >> Dan program ini Membuat bahwa dilengkapi dengan CS50 IDE, dan lebih 554 00:26:54,840 --> 00:26:57,090 umumnya dengan Linux, adalah program yang 555 00:26:57,090 --> 00:26:59,120 akan membuat sebuah program yang disebut Hello. 556 00:26:59,120 --> 00:27:03,680 Dan itu akan berasumsi, dengan konvensi, bahwa jika program ini dapat dibuat, 557 00:27:03,680 --> 00:27:09,030 itu akan dibuat dari sumber file kode berakhiran dot c, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Jadi jika saya tekan Enter sekarang, pemberitahuan bahwa perintah yang dijalankan 559 00:27:12,210 --> 00:27:14,340 sebenarnya bahkan lebih lama sebelum dari sebelumnya. 560 00:27:14,340 --> 00:27:16,670 Dan itu karena kita sudah dikonfigurasikan CS50 IDE untuk memiliki 561 00:27:16,670 --> 00:27:19,878 beberapa fitur tambahan built in yang kita tidak perlu dulu, tapi akan segera. 562 00:27:19,878 --> 00:27:23,470 Tetapi hal kunci untuk mewujudkan sekarang saya punya program Hello. 563 00:27:23,470 --> 00:27:27,080 >> Jika saya ketik LS lagi, saya memiliki program halo. 564 00:27:27,080 --> 00:27:32,070 Dan saya bisa menjalankannya dengan dot slash a.out, tidak ada, 565 00:27:32,070 --> 00:27:35,590 karena seluruh titik ini latihan adalah dot slash halo. 566 00:27:35,590 --> 00:27:38,089 Dan sekarang aku punya saya Program hello world. 567 00:27:38,089 --> 00:27:39,880 Jadi bergerak maju, kami hampir selalu hanya 568 00:27:39,880 --> 00:27:42,088 akan mengkompilasi program kami menggunakan perintah Membuat. 569 00:27:42,088 --> 00:27:45,300 Dan kemudian kita akan menjalankannya dengan dot slash, dan nama program. 570 00:27:45,300 --> 00:27:49,610 Tapi menyadari apa Membuat lakukan untuk Anda, adalah ia sendiri tidak kompilator. 571 00:27:49,610 --> 00:27:53,310 Ini hanya sebuah program kenyamanan yang tahu bagaimana untuk memicu kompilator 572 00:27:53,310 --> 00:27:56,470 untuk menjalankan sehingga Anda sendiri dapat menggunakannya. 573 00:27:56,470 --> 00:28:00,220 >> Apa perintah lain yang ada di Linux, dan pada gilirannya CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Kami akan segera melihat bahwa ada perintah CD, Change Directory. 575 00:28:03,107 --> 00:28:05,190 Hal ini memungkinkan Anda dalam antarmuka baris perintah Anda 576 00:28:05,190 --> 00:28:07,610 untuk bergerak maju, dan kembali, dan membuka folder yang berbeda 577 00:28:07,610 --> 00:28:08,860 tanpa menggunakan mouse Anda. 578 00:28:08,860 --> 00:28:12,470 >> LS kita melihat, yang merupakan singkatan dari daftar file dalam direktori saat ini. 579 00:28:12,470 --> 00:28:14,650 Membuat Dir, Anda bisa mungkin mulai untuk menyimpulkan 580 00:28:14,650 --> 00:28:18,150 apa ini berarti sekarang-- membuat direktori, jika Anda ingin membuat folder. 581 00:28:18,150 --> 00:28:21,270 RM untuk menghapus, RM Dir untuk menghapus directory-- dan ini, 582 00:28:21,270 --> 00:28:24,160 lagi, adalah baris perintah setara dari apa yang Anda 583 00:28:24,160 --> 00:28:26,945 bisa dilakukan di CS50 IDE dengan mouse Anda. 584 00:28:26,945 --> 00:28:28,820 Tapi Anda akan segera menemukan bahwa kadang-kadang itu hanya 585 00:28:28,820 --> 00:28:30,610 banyak lebih cepat untuk melakukan hal dengan keyboard, 586 00:28:30,610 --> 00:28:33,690 dan akhirnya jauh lebih kuat. 587 00:28:33,690 --> 00:28:36,440 >> Tapi sulit untuk berpendapat bahwa apa yang telah kami lakukan sejauh ini 588 00:28:36,440 --> 00:28:39,990 adalah semua yang kuat, ketika semua kami sudah katakan adalah, halo dunia. 589 00:28:39,990 --> 00:28:43,740 Dan, pada kenyataannya, saya hardcoded kata halo dunia ke dalam program saya. 590 00:28:43,740 --> 00:28:45,530 Tidak ada dinamisme belum. 591 00:28:45,530 --> 00:28:49,320 Scratch adalah urutan besarnya lebih menarik pekan lalu. 592 00:28:49,320 --> 00:28:51,220 >> Dan jadi mari kita ke sana. 593 00:28:51,220 --> 00:28:55,310 Mari kita mengambil langkah menuju bahwa dengan cara beberapa fungsi. 594 00:28:55,310 --> 00:28:59,470 Jadi tidak hanya C datang dengan printf, dan tandan fungsi lainnya 595 00:28:59,470 --> 00:29:01,850 beberapa di antaranya kita akan melihat dari waktu ke waktu, tidak 596 00:29:01,850 --> 00:29:05,760 membuat semuanya mudah keluar dari gerbang dalam mendapatkan input pengguna. 597 00:29:05,760 --> 00:29:08,140 >> Bahkan, salah satu kelemahan bahasa seperti C, 598 00:29:08,140 --> 00:29:10,140 dan bahkan Jawa dan belum lain, adalah bahwa hal itu tidak 599 00:29:10,140 --> 00:29:15,860 membuatnya mudah untuk hanya mendapatkan hal-hal seperti bilangan bulat dari pengguna, atau string, kata-kata, 600 00:29:15,860 --> 00:29:19,970 dan frase, membiarkan hal-hal sendiri seperti nilai floating point, atau bilangan real 601 00:29:19,970 --> 00:29:23,240 dengan poin desimal, dan benar-benar nomor lama, karena kami akan segera melihat. 602 00:29:23,240 --> 00:29:27,000 Jadi daftar ini fungsi di sini, ini seperti potongan Scratch puzzle lainnya 603 00:29:27,000 --> 00:29:31,090 bahwa kita telah pra-instal di CS50 IDE yang akan kami gunakan untuk beberapa minggu 604 00:29:31,090 --> 00:29:34,010 sebagai roda pelatihan macam, dan akhirnya membawa mereka off, dan mencari 605 00:29:34,010 --> 00:29:37,210 di bawah kap mesin, mungkin, di bagaimana hal-hal ini dilaksanakan. 606 00:29:37,210 --> 00:29:40,460 >> Tapi untuk melakukan ini, mari kita benar-benar menulis sebuah program. 607 00:29:40,460 --> 00:29:41,770 Biarkan aku pergi ke depan sekarang. 608 00:29:41,770 --> 00:29:44,750 Dan aku akan membuat yang baru mengajukan dengan mengklik sedikit ditambah ini, 609 00:29:44,750 --> 00:29:45,970 dan mengklik File New. 610 00:29:45,970 --> 00:29:49,250 >> Aku akan menyimpan ini selanjutnya satu sebagai, katakanlah, string.c, 611 00:29:49,250 --> 00:29:50,750 karena saya ingin bermain dengan string. 612 00:29:50,750 --> 00:29:53,990 Dan string dalam C hanya urutan karakter. 613 00:29:53,990 --> 00:29:56,090 Jadi sekarang mari kita pergi ke depan dan melakukan hal berikut. 614 00:29:56,090 --> 00:30:01,204 >> Termasuk standar IO.h-- dan ternyata standar IO, 615 00:30:01,204 --> 00:30:03,360 IO hanya berarti input dan output. 616 00:30:03,360 --> 00:30:05,920 Jadi ternyata bahwa baris ini di sini adalah apa 617 00:30:05,920 --> 00:30:08,140 adalah tetangga kita untuk menggunakan printf. 618 00:30:08,140 --> 00:30:10,410 Printf, tentu saja, menghasilkan output. 619 00:30:10,410 --> 00:30:15,000 Jadi untuk menggunakan printf, ternyata out Anda harus memiliki baris kode 620 00:30:15,000 --> 00:30:16,040 di bagian atas file Anda. 621 00:30:16,040 --> 00:30:18,456 >> Dan kami akan kembali ke apa yang benar-benar berarti tak lama. 622 00:30:18,456 --> 00:30:20,400 Ternyata di program C saya menulis, 623 00:30:20,400 --> 00:30:23,640 Aku harus memulainya dengan kode yang terlihat seperti ini. 624 00:30:23,640 --> 00:30:26,860 Dan Anda akan melihat CS50 IDE, dan pengembangan terpadu lainnya 625 00:30:26,860 --> 00:30:30,050 lingkungan seperti itu, akan mencoba sebaik 626 00:30:30,050 --> 00:30:31,780 mereka dapat untuk menyelesaikan pikiran Anda. 627 00:30:31,780 --> 00:30:35,930 Bahkan, beberapa saat yang lalu jika saya membatalkan apa yang baru saja saya lakukan, saya tekan Enter. 628 00:30:35,930 --> 00:30:39,160 >> Saya kemudian memukul keriting terbuka brace, tekan Enter lagi. 629 00:30:39,160 --> 00:30:40,430 Dan selesai pikiran saya. 630 00:30:40,430 --> 00:30:45,140 Ini memberi saya baris baru, menjorok tidak kurang untuk alasan gaya yang bagus kita akan lihat. 631 00:30:45,140 --> 00:30:48,559 Dan kemudian secara otomatis memberi saya bahwa penjepit keriting untuk menyelesaikan pikiran saya. 632 00:30:48,559 --> 00:30:50,600 Sekarang, itu tidak selalu menebak apa yang ingin Anda lakukan. 633 00:30:50,600 --> 00:30:53,620 Tapi sebagian besar, itu tidak menghemat keystrokes. 634 00:30:53,620 --> 00:30:59,560 Jadi saat yang lalu, kami berlari program-- ini halo, dunia, dan kemudian disusun itu, 635 00:30:59,560 --> 00:31:00,460 dan kemudian berlari. 636 00:31:00,460 --> 00:31:01,867 Tapi tidak ada dinamika di sini. 637 00:31:01,867 --> 00:31:03,700 Bagaimana jika kita ingin melakukan sesuatu yang berbeda? 638 00:31:03,700 --> 00:31:07,630 Nah, bagaimana jika saya ingin benar-benar mendapatkan string dari pengguna? 639 00:31:07,630 --> 00:31:11,250 Aku akan menggunakan potongan puzzle disebut persis itu-- mendapatkan tali. 640 00:31:11,250 --> 00:31:15,860 >> Ternyata di C bahwa ketika Anda tidak ingin untuk memberikan masukan untuk sepotong puzzle, 641 00:31:15,860 --> 00:31:19,360 atau lebih tepat ke fungsi, Anda harfiah hanya melakukan kurung buka, 642 00:31:19,360 --> 00:31:20,430 kurung tutup. 643 00:31:20,430 --> 00:31:25,540 Jadi seolah-olah ada ada kotak putih untuk mengetik dalam. 644 00:31:25,540 --> 00:31:27,720 The katakanlah blok sebelum memiliki kotak putih kecil. 645 00:31:27,720 --> 00:31:29,660 Kami tidak memiliki kotak putih sekarang. 646 00:31:29,660 --> 00:31:33,310 >> Tapi ketika saya sebut mendapatkan string, saya ingin menempatkan hasilnya di suatu tempat. 647 00:31:33,310 --> 00:31:37,680 Jadi paradigma yang sangat umum di C adalah untuk memanggil fungsi, seperti get tali di sini, 648 00:31:37,680 --> 00:31:41,070 dan kemudian menyimpan nilai kembali. 649 00:31:41,070 --> 00:31:44,450 Ini hasil yang usaha dalam sesuatu. 650 00:31:44,450 --> 00:31:47,630 >> Dan apa membangun dalam pemrograman, 651 00:31:47,630 --> 00:31:53,450 apakah di Scratch atau sekarang C, bahwa kita dapat digunakan untuk benar-benar menyimpan sesuatu? 652 00:31:53,450 --> 00:31:55,990 Menyebutnya variabel, kan? 653 00:31:55,990 --> 00:32:00,320 Dan di Scratch, kita tidak benar-benar peduli apa yang terjadi dalam variabel. 654 00:32:00,320 --> 00:32:02,170 >> Tapi dalam kasus ini, kita benar-benar dilakukan. 655 00:32:02,170 --> 00:32:03,719 Aku akan mengatakan tali. 656 00:32:03,719 --> 00:32:05,510 Dan kemudian aku bisa menelepon apa ini yang saya inginkan. 657 00:32:05,510 --> 00:32:08,340 Aku akan menyebutnya nama, mendapat mendapatkan tali. 658 00:32:08,340 --> 00:32:10,250 >> Dan sekarang bahkan jika Anda baru sedikit ini, 659 00:32:10,250 --> 00:32:11,984 melihat bahwa saya kurang rinci. 660 00:32:11,984 --> 00:32:13,150 Saya lupa titik koma. 661 00:32:13,150 --> 00:32:14,400 Aku harus menyelesaikan pikiran ini. 662 00:32:14,400 --> 00:32:17,480 Jadi aku akan memindahkan kursor saya, dan tekan semi-colon ada. 663 00:32:17,480 --> 00:32:19,130 Dan apa yang saya baru saja dilakukan? 664 00:32:19,130 --> 00:32:21,440 Dalam baris kode ini, nomor 5 pada saat ini, 665 00:32:21,440 --> 00:32:23,799 Saya menelepon get string dengan tidak ada input. 666 00:32:23,799 --> 00:32:26,090 Jadi tidak ada putih kecil kotak seperti Simpan blok memiliki. 667 00:32:26,090 --> 00:32:28,590 >> Aku hanya mengatakan, hei, komputer, mendapatkan saya string. 668 00:32:28,590 --> 00:32:31,390 Tanda sama tidak benar-benar tanda sama, per se. 669 00:32:31,390 --> 00:32:33,790 Ini tugas operator, yang berarti, 670 00:32:33,790 --> 00:32:37,860 hey, komputer, memindahkan nilai dari kanan ke kiri. 671 00:32:37,860 --> 00:32:40,480 Dan di sebelah kiri, saya memiliki berikut. 672 00:32:40,480 --> 00:32:43,580 >> Hei, komputer, memberi saya string-- a urutan karakter. 673 00:32:43,580 --> 00:32:45,637 Dan menyebut bahwa string Nama. 674 00:32:45,637 --> 00:32:47,220 Dan saya bahkan tidak menyebutnya Nama. 675 00:32:47,220 --> 00:32:49,970 >> Saya bisa menyebutnya, konvensional, sesuatu seperti S, 676 00:32:49,970 --> 00:32:52,900 seperti yang kita digunakan i untuk memanggil variabel i. 677 00:32:52,900 --> 00:32:54,829 Tapi sekarang saya harus melakukan sesuatu dengan itu. 678 00:32:54,829 --> 00:32:57,370 Itu akan sangat bodoh untuk coba kompilasi kode ini, berjalan 679 00:32:57,370 --> 00:32:59,410 program ini, meskipun Saya mendapatkan string, 680 00:32:59,410 --> 00:33:01,580 karena itu masih hanya akan menyapa dunia. 681 00:33:01,580 --> 00:33:06,140 >> Tapi bagaimana jika saya ingin mengubah ini. 682 00:33:06,140 --> 00:33:07,940 Mengapa saya tidak melakukan ini? 683 00:33:07,940 --> 00:33:11,632 Persen s, koma s. 684 00:33:11,632 --> 00:33:13,090 Dan ini sedikit samar masih. 685 00:33:13,090 --> 00:33:15,560 >> Jadi saya membuat variabel saya lebih jelas. 686 00:33:15,560 --> 00:33:17,510 Mari saya nama Nama variabel ini. 687 00:33:17,510 --> 00:33:20,230 Dan mari kita lihat apakah kita tidak bisa menggoda selain apa yang terjadi di sini. 688 00:33:20,230 --> 00:33:22,770 >> Jadi pada baris lima, saya mendapatkan string. 689 00:33:22,770 --> 00:33:25,620 Dan aku menyimpan string itu, apa pun pengguna telah diketik di 690 00:33:25,620 --> 00:33:28,430 di nya keyboard, dalam variabel yang disebut Nama. 691 00:33:28,430 --> 00:33:30,590 Dan ternyata printf tidak hanya 692 00:33:30,590 --> 00:33:34,220 mengambil satu argumen di ganda kutipan, satu input dalam tanda kutip ganda. 693 00:33:34,220 --> 00:33:39,100 >> Hal ini dapat mengambil dua, atau tiga, atau lebih, seperti yang kedua, atau ketiga, atau keempat, 694 00:33:39,100 --> 00:33:42,320 adalah semua nama variabel, atau secara khusus nilai, 695 00:33:42,320 --> 00:33:48,610 bahwa Anda ingin plug ke, dinamis, string dalam tanda kutip. 696 00:33:48,610 --> 00:33:52,110 Dengan kata lain, apa yang akan salah dengan ini? 697 00:33:52,110 --> 00:33:57,920 Jika saya hanya menyapa nama, backslash n, menyimpan file saya, dikompilasi kode saya, 698 00:33:57,920 --> 00:34:01,660 dan berlari ini, apa yang akan terjadi? 699 00:34:01,660 --> 00:34:05,139 >> Ini hanya akan mengatakan, halo nama, secara harfiah N-A-M-E, 700 00:34:05,139 --> 00:34:07,900 yang merupakan jenis bodoh karena itu tidak berbeda dari dunia. 701 00:34:07,900 --> 00:34:10,400 Jadi apa pun dalam tanda kutip adalah apa yang benar-benar akan dicetak. 702 00:34:10,400 --> 00:34:12,520 Jadi jika saya ingin memiliki placeholder di sana, 703 00:34:12,520 --> 00:34:14,422 Aku benar-benar perlu menggunakan beberapa sintaks khusus. 704 00:34:14,422 --> 00:34:17,380 Dan ternyata jika Anda membaca dokumentasi untuk fungsi printf, 705 00:34:17,380 --> 00:34:21,320 itu akan memberitahu Anda bahwa jika Anda menggunakan persen s, 706 00:34:21,320 --> 00:34:23,920 Anda dapat mengganti nilai sebagai berikut. 707 00:34:23,920 --> 00:34:27,190 >> Setelah koma setelah itu ganda kutipan, Anda hanya 708 00:34:27,190 --> 00:34:29,179 menulis nama variabel yang Anda inginkan 709 00:34:29,179 --> 00:34:33,790 pasang di dalam format yang kode, atau format specifier, 710 00:34:33,790 --> 00:34:35,469 persen s untuk string. 711 00:34:35,469 --> 00:34:39,190 Dan sekarang jika saya menyimpan file saya, Aku kembali ke terminal saya. 712 00:34:39,190 --> 00:34:42,870 Dan saya ketik Membuat String, karena, sekali lagi, nama ini 713 00:34:42,870 --> 00:34:45,510 file yang saya memilih sebelumnya adalah string.c. 714 00:34:45,510 --> 00:34:48,510 >> Jadi saya akan mengatakan Membuat String, masukkan. 715 00:34:48,510 --> 00:34:51,550 Oh ya ampun, melihat semua kesalahan yang kami buat sudah. 716 00:34:51,550 --> 00:34:55,540 Dan ini is-- apa, ini benar-benar seperti enam, tujuh program baris? 717 00:34:55,540 --> 00:34:57,790 Jadi ini adalah di mana ia sangat bisa cepat mendapatkan luar biasa. 718 00:34:57,790 --> 00:35:00,890 >> jendela terminal ini memiliki sekarang hanya dimuntahkan 719 00:35:00,890 --> 00:35:03,230 sejumlah besar pesan kesalahan. 720 00:35:03,230 --> 00:35:07,560 Tentunya, saya tidak memiliki lebih banyak kesalahan pesan dari saya memiliki baris kode. 721 00:35:07,560 --> 00:35:08,680 Jadi apa yang terjadi? 722 00:35:08,680 --> 00:35:10,920 >> Nah, strategi terbaik untuk melakukan kapan saja Anda 723 00:35:10,920 --> 00:35:13,710 jangan menjumpai luar biasa daftar kesalahan seperti itu, 724 00:35:13,710 --> 00:35:16,690 adalah gulir kembali, mencari perintah Anda hanya berlari, yang dalam kasus saya 725 00:35:16,690 --> 00:35:18,020 adalah membuat tali. 726 00:35:18,020 --> 00:35:21,630 Lihatlah apa yang membuat lakukan, dan itulah yang perintah dentang panjang, tidak ada masalah besar di sana. 727 00:35:21,630 --> 00:35:22,950 >> Tapi merah yang buruk. 728 00:35:22,950 --> 00:35:24,750 Hijau mencoba untuk menjadi lembut dan membantu. 729 00:35:24,750 --> 00:35:26,140 Tapi itu masih buruk, dalam hal ini. 730 00:35:26,140 --> 00:35:27,510 Tapi di mana itu buruk? 731 00:35:27,510 --> 00:35:31,450 >> String.c, garis lima, karakter lima. 732 00:35:31,450 --> 00:35:32,930 Jadi ini hanya konvensi umum. 733 00:35:32,930 --> 00:35:36,060 Sesuatu usus sesuatu berarti nomor baris dan nomor karakter. 734 00:35:36,060 --> 00:35:41,080 Kesalahan, penggunaan dideklarasikan identifier string yang. 735 00:35:41,080 --> 00:35:42,900 Apakah maksud Anda standar dalam? 736 00:35:42,900 --> 00:35:45,530 >> Jadi, sayangnya, dentang berusaha untuk membantu. 737 00:35:45,530 --> 00:35:46,850 Tapi itu salah, dalam hal ini. 738 00:35:46,850 --> 00:35:49,350 Tidak, dentang, aku tidak bermaksud standar IO. 739 00:35:49,350 --> 00:35:51,070 Aku berarti bahwa di saluran satu, ya. 740 00:35:51,070 --> 00:35:53,420 >> Tapi garis lima adalah salah satu ini di sini. 741 00:35:53,420 --> 00:35:57,040 Dan dentang tidak memahami S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 Ini adalah dideklarasikan identifier, sebuah Kata itu hanya belum pernah terlihat sebelumnya. 743 00:36:01,490 --> 00:36:05,730 Dan itu karena C, bahasa kita menulis kode di sekarang, 744 00:36:05,730 --> 00:36:08,070 tidak memiliki variabel disebut string. 745 00:36:08,070 --> 00:36:11,380 >> Ini tidak, secara default, dukungan sesuatu yang disebut string. 746 00:36:11,380 --> 00:36:16,750 Itu sepotong CS50 dari jargon, tetapi sangat konvensional. 747 00:36:16,750 --> 00:36:18,600 Tapi saya bisa memperbaiki ini sebagai berikut. 748 00:36:18,600 --> 00:36:22,090 >> Jika saya menambahkan satu baris kode ke atas program ini, 749 00:36:22,090 --> 00:36:27,890 termasuk CS50.h, yang merupakan file lain suatu tempat di dalam dari CS50 IDE, di suatu tempat 750 00:36:27,890 --> 00:36:30,820 pada hard drive, sehingga untuk berbicara, dari sistem operasi Ubuntu 751 00:36:30,820 --> 00:36:33,590 bahwa aku berjalan, yang adalah file yang 752 00:36:33,590 --> 00:36:38,740 akan mengajarkan operasi Sistem apa string adalah, hanya 753 00:36:38,740 --> 00:36:41,930 seperti io.h standar file dalam sistem operasi itu 754 00:36:41,930 --> 00:36:44,430 akan mengajarkannya apa printf adalah. 755 00:36:44,430 --> 00:36:46,810 >> Memang, kita akan mendapatkan pesan yang sangat mirip 756 00:36:46,810 --> 00:36:50,600 jika IO telah mengakui standar Io.h dan mencoba menggunakan printf. 757 00:36:50,600 --> 00:36:53,632 Jadi aku akan pergi ke depan dan hanya mengambil Kontrol L untuk membersihkan layar saya. 758 00:36:53,632 --> 00:36:56,340 Atau Anda dapat mengetik jelas dan itu akan hanya membersihkan jendela terminal. 759 00:36:56,340 --> 00:36:58,020 Tapi Anda masih dapat menggulir kembali dalam waktu. 760 00:36:58,020 --> 00:37:01,100 >> Dan aku akan mengulangi Membuat String. 761 00:37:01,100 --> 00:37:03,660 Menyilangkan jari saya kali ini, Enter. 762 00:37:03,660 --> 00:37:05,380 Oh Tuhan, itu bekerja. 763 00:37:05,380 --> 00:37:09,280 itu menunjukkan saya perintah samar panjang itulah yang Membuat dihasilkan melalui dentang, 764 00:37:09,280 --> 00:37:10,460 tapi tidak ada pesan error. 765 00:37:10,460 --> 00:37:12,460 Jadi menyadari, meskipun Anda mungkin mendapatkan benar 766 00:37:12,460 --> 00:37:14,480 kewalahan dengan jumlah pesan error, 767 00:37:14,480 --> 00:37:17,540 itu hanya mungkin menjadi Cascading ini menjengkelkan efek, di mana dentang tidak mengerti 768 00:37:17,540 --> 00:37:19,620 satu hal, yang berarti kemudian tidak memahami kata berikutnya, 769 00:37:19,620 --> 00:37:20,560 atau baris berikutnya. 770 00:37:20,560 --> 00:37:22,850 Dan sehingga hanya tersedak kode Anda. 771 00:37:22,850 --> 00:37:24,440 Tapi fix mungkin sederhana. 772 00:37:24,440 --> 00:37:27,822 Dan selalu fokus pada baris pertama dari output. 773 00:37:27,822 --> 00:37:29,530 Dan jika Anda tidak memahaminya, hanya melihat 774 00:37:29,530 --> 00:37:32,480 untuk kata kunci yang mungkin petunjuk, dan nomor baris, 775 00:37:32,480 --> 00:37:34,650 dan karakter, di mana kesalahan yang mungkin. 776 00:37:34,650 --> 00:37:40,328 >> Sekarang biarkan aku pergi ke depan dan ketik dot slash, string, masukkan. 777 00:37:40,328 --> 00:37:44,340 Hm, itu tidak menyapa apa-apa. 778 00:37:44,340 --> 00:37:46,210 Mengapa? 779 00:37:46,210 --> 00:37:48,170 Nah, ingat, di mana itu berjalan? 780 00:37:48,170 --> 00:37:53,730 >> Itu mungkin terjebak pada saat ini dalam satu lingkaran, jika Anda mau, on line enam, 781 00:37:53,730 --> 00:37:56,950 karena Dapatkan String dengan desain, ditulis oleh staf CS50, 782 00:37:56,950 --> 00:38:00,350 secara harfiah berarti hanya duduk di sana menunggu, dan menunggu, 783 00:38:00,350 --> 00:38:01,850 dan menunggu string. 784 00:38:01,850 --> 00:38:03,792 Semua yang kita maksud dengan string input manusia. 785 00:38:03,792 --> 00:38:04,500 Sehingga Anda tahu apa? 786 00:38:04,500 --> 00:38:05,166 Biarkan aku pergi ke depan. 787 00:38:05,166 --> 00:38:08,704 Dan hanya pada kemauan, biarkan aku ketik nama saya, David, masukkan. 788 00:38:08,704 --> 00:38:10,120 Sekarang saya memiliki program yang lebih dinamis. 789 00:38:10,120 --> 00:38:11,240 Dikatakan, halo David. 790 00:38:11,240 --> 00:38:16,280 >> Jika saya pergi ke depan dan menjalankan ini lagi, biarkan aku mencoba mengatakan nama Zamila, masukkan. 791 00:38:16,280 --> 00:38:17,940 Dan sekarang kami memiliki program yang dinamis. 792 00:38:17,940 --> 00:38:19,380 Saya telah tidak sulit kode dunia. 793 00:38:19,380 --> 00:38:21,760 Saya belum sulit kode nama, atau David, atau Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Sekarang jauh lebih seperti program kita tahu, di mana jika mengambil input, 795 00:38:25,350 --> 00:38:27,870 menghasilkan output yang sedikit berbeda. 796 00:38:27,870 --> 00:38:31,020 Sekarang, ini bukan yang terbaik pengalaman pengguna, atau UX. 797 00:38:31,020 --> 00:38:33,000 Saya menjalankan program. 798 00:38:33,000 --> 00:38:35,830 >> Aku tidak tahu apa yang seharusnya saya yang harus dilakukan, kecuali aku benar-benar melihat 799 00:38:35,830 --> 00:38:37,290 atau ingat kode sumber. 800 00:38:37,290 --> 00:38:39,640 Jadi mari kita membuat pengguna mengalami sedikit lebih baik 801 00:38:39,640 --> 00:38:41,240 dengan sederhana hal. 802 00:38:41,240 --> 00:38:44,782 Biarkan aku kembali ke ini Program, dan hanya mengatakan printf. 803 00:38:44,782 --> 00:38:48,870 >> Dan biarkan aku pergi ke depan dan mengatakan nama, usus besar, dan ruang, dan kemudian semi-colon. 804 00:38:48,870 --> 00:38:51,170 Dan hanya untuk iseng, tidak ada serangan balik n. 805 00:38:51,170 --> 00:38:52,980 Dan itu disengaja, karena saya tidak ingin 806 00:38:52,980 --> 00:38:54,590 prompt untuk pindah ke baris berikutnya. 807 00:38:54,590 --> 00:38:58,800 >> Saya ingin, sebaliknya, melakukan hal ini, membuat tali untuk mengkompilasi ulang kode saya ke dalam mesin baru 808 00:38:58,800 --> 00:39:00,980 Kode dot slash tali. 809 00:39:00,980 --> 00:39:02,460 Ah, ini jauh lebih cantik. 810 00:39:02,460 --> 00:39:05,780 Sekarang aku benar-benar tahu apa yang komputer ingin aku lakukan, memberikan nama. 811 00:39:05,780 --> 00:39:10,020 >> Jadi aku akan pergi ke depan dan ketik di Rob, masukkan, dan halo, Rob. 812 00:39:10,020 --> 00:39:13,640 Jadi, menyadari, ini masih, di akhir hari, hanya program sembilan line. 813 00:39:13,640 --> 00:39:15,090 Tapi kami telah mengambil langkah-langkah bayi tersebut. 814 00:39:15,090 --> 00:39:18,380 >> Kami menulis satu baris dengan yang kita akrab, printf, halo dunia. 815 00:39:18,380 --> 00:39:19,980 Kemudian kita meluruhkan sedikit itu. 816 00:39:19,980 --> 00:39:21,560 Dan kami benar-benar digunakan get tali. 817 00:39:21,560 --> 00:39:23,362 Dan kami melemparkan bahwa nilai dalam variabel. 818 00:39:23,362 --> 00:39:26,070 Dan kemudian kami pergi ke depan dan ditingkatkan lebih lanjut dengan baris ketiga. 819 00:39:26,070 --> 00:39:29,220 Dan proses berulang ini menulis perangkat lunak benar-benar kunci. 820 00:39:29,220 --> 00:39:33,420 Dalam CS50, dan dalam kehidupan pada umumnya, Anda harus umumnya tidak duduk, 821 00:39:33,420 --> 00:39:36,800 memiliki program dalam pikiran, dan mencoba menulis sialan seluruh sekaligus. 822 00:39:36,800 --> 00:39:40,810 >> Ini akan, pasti, mengakibatkan jalan kesalahan lebih dari kita sendiri lihat di sini. 823 00:39:40,810 --> 00:39:44,070 Bahkan aku, sampai hari ini, terus-menerus membuat kesalahan bodoh lainnya, 824 00:39:44,070 --> 00:39:47,480 adalah kesalahan sebenarnya lebih sulit yang sulit untuk mencari tahu. 825 00:39:47,480 --> 00:39:52,095 Tapi Anda akan membuat lebih banyak kesalahan yang lebih baris kode yang Anda tulis sekaligus. 826 00:39:52,095 --> 00:39:54,220 Dan praktek ini, menulis sedikit kode 827 00:39:54,220 --> 00:39:57,930 bahwa Anda merasa nyaman dengan, kompilasi itu, menjalankannya, mengujinya lebih umum, 828 00:39:57,930 --> 00:40:01,370 kemudian pindah on-- jadi seperti kita terus layering dan layering pekan lalu, 829 00:40:01,370 --> 00:40:04,190 membangun dari sesuatu yang sangat sederhana untuk sesuatu yang lebih kompleks, 830 00:40:04,190 --> 00:40:05,200 melakukan hal yang sama di sini. 831 00:40:05,200 --> 00:40:08,500 Jangan duduk, dan mencoba untuk menulis seluruh masalah. 832 00:40:08,500 --> 00:40:10,780 Benar-benar mengambil langkah-langkah bayi tersebut. 833 00:40:10,780 --> 00:40:15,100 >> Sekarang, string tidak semua yang berguna bagi diri mereka sendiri. 834 00:40:15,100 --> 00:40:18,210 Kami akan benar-benar, idealnya, seperti untuk memiliki sesuatu yang lain dalam toolkit kami. 835 00:40:18,210 --> 00:40:20,990 Jadi mari kita benar-benar melakukan hal itu. 836 00:40:20,990 --> 00:40:24,900 >> Biarkan aku pergi ke depan sekarang dan menyiapkan program yang sedikit berbeda. 837 00:40:24,900 --> 00:40:28,320 Dan kami akan memanggil int.c ini, untuk integer. 838 00:40:28,320 --> 00:40:30,870 Aku akan, sama, termasuk CS550.h. 839 00:40:30,870 --> 00:40:33,060 Aku akan mencakup standar IO. 840 00:40:33,060 --> 00:40:36,630 Dan itu akan menjadi cukup umum dalam beberapa hari pertama kelas. 841 00:40:36,630 --> 00:40:39,050 >> Dan aku akan siap diri dengan fungsi utama. 842 00:40:39,050 --> 00:40:43,370 Dan sekarang bukannya string, mari kita pergi ke depan dan mendapatkan int. 843 00:40:43,370 --> 00:40:49,285 Sebut saja saya, dan menyebutnya mendapatkan int, parens dekat, semi-kolon. 844 00:40:49,285 --> 00:40:51,410 Dan sekarang mari kita lakukan sesuatu dengan itu, printf. 845 00:40:51,410 --> 00:40:56,190 >> Katakanlah sesuatu seperti halo, backslash n, koma i. 846 00:40:56,190 --> 00:41:00,010 Jadi aku cukup banyak meniru apa yang saya lakukan beberapa saat yang lalu. 847 00:41:00,010 --> 00:41:01,660 Saya memiliki placeholder di sini. 848 00:41:01,660 --> 00:41:05,150 Saya telah koma saya di sini, karena saya ingin untuk plug saya ke placeholder itu. 849 00:41:05,150 --> 00:41:07,250 >> Jadi mari kita pergi ke depan dan mencoba kompilasi program ini. 850 00:41:07,250 --> 00:41:10,060 File ini disebut int.c. 851 00:41:10,060 --> 00:41:12,920 Jadi saya akan mengatakan, membuat int, masukkan. 852 00:41:12,920 --> 00:41:16,420 Oh Tuhan, tapi bukan masalah besar, kan? 853 00:41:16,420 --> 00:41:17,230 Ada kesalahan. 854 00:41:17,230 --> 00:41:19,810 >> Ada kesalahan sintaksis di sini sehingga program tidak bisa 855 00:41:19,810 --> 00:41:25,460 dikompilasi dalam int.c, baris tujuh, karakter 27, Format error 856 00:41:25,460 --> 00:41:28,400 menentukan tipe char membintangi, apa pun itu. 857 00:41:28,400 --> 00:41:30,020 Namun jenis argumen adalah int. 858 00:41:30,020 --> 00:41:33,110 >> Jadi di sini, juga, kita tidak akan to-- meskipun saat ini banyak bahan, 859 00:41:33,110 --> 00:41:35,710 kita akan membanjiri Anda dengan benar-benar setiap fitur C, 860 00:41:35,710 --> 00:41:38,070 dan pemrograman lebih umum, hanya beberapa minggu pertama. 861 00:41:38,070 --> 00:41:40,400 Jadi ada sering akan menjadi jargon dengan yang Anda tidak terbiasa. 862 00:41:40,400 --> 00:41:43,350 Dan, pada kenyataannya, bintang arang adalah sesuatu kita akan kembali ke 863 00:41:43,350 --> 00:41:44,830 dalam seminggu atau waktu dua ini. 864 00:41:44,830 --> 00:41:47,530 >> Tapi untuk saat ini, mari kita lihat apakah kita bisa mengurai kata-kata yang familiar. 865 00:41:47,530 --> 00:41:50,750 Formats-- jadi kami mendengar Format specifier, kode format yang sebelumnya. 866 00:41:50,750 --> 00:41:51,840 Itu familiar. 867 00:41:51,840 --> 00:41:53,840 Jenis usaha-- tetapi argumen memiliki tipe int. 868 00:41:53,840 --> 00:41:55,980 Tunggu sebentar, saya adalah int. 869 00:41:55,980 --> 00:41:59,230 >> Mungkin persen s sebenarnya memiliki beberapa makna didefinisikan. 870 00:41:59,230 --> 00:42:00,230 Dan, memang, itu tidak. 871 00:42:00,230 --> 00:42:03,101 Integer, jika Anda ingin printf untuk menggantikannya, 872 00:42:03,101 --> 00:42:05,350 Anda benar-benar harus menggunakan format yang berbeda specifier. 873 00:42:05,350 --> 00:42:06,890 Dan Anda tidak akan tahu ini kecuali jika seseorang mengatakan kepada Anda, 874 00:42:06,890 --> 00:42:07,973 atau Anda telah melakukannya sebelumnya. 875 00:42:07,973 --> 00:42:10,490 Tapi persen saya adalah apa dapat umum digunakan 876 00:42:10,490 --> 00:42:12,240 di printf untuk mencolokkan integer. 877 00:42:12,240 --> 00:42:14,920 Anda juga dapat menggunakan persen d untuk integer desimal. 878 00:42:14,920 --> 00:42:16,490 Tetapi saya bagus dan sederhana di sini. 879 00:42:16,490 --> 00:42:17,590 Jadi kita akan pergi dengan itu. 880 00:42:17,590 --> 00:42:21,160 >> Sekarang biarkan aku pergi ke depan dan jalankan kembali make int, Enter. 881 00:42:21,160 --> 00:42:23,328 Itu bagus, tidak ada kesalahan. 882 00:42:23,328 --> 00:42:27,260 Dot memangkas OK int--, pengalaman pengguna yang buruk, karena saya belum memberitahu diriku 883 00:42:27,260 --> 00:42:27,760 Apa yang harus dilakukan. 884 00:42:27,760 --> 00:42:28,426 Tapi itu baik-baik saja. 885 00:42:28,426 --> 00:42:29,480 Saya penangkapan pada cepat. 886 00:42:29,480 --> 00:42:36,260 >> Dan sekarang biarkan aku pergi ke depan dan ketik David, OK, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 OK, jadi ini adalah hal yang baik. 888 00:42:37,820 --> 00:42:41,710 Kali ini, saya menggunakan fungsi, sepotong puzzle, yang disebut get int. 889 00:42:41,710 --> 00:42:44,230 Dan ternyata out-- dan kami akan lihat nanti ini di term-- yang 890 00:42:44,230 --> 00:42:47,730 staf CS50 telah menerapkan mendapatkan string yang sedemikian rupa 891 00:42:47,730 --> 00:42:50,350 bahwa hal itu akan hanya secara fisik mendapatkan string untuk Anda. 892 00:42:50,350 --> 00:42:54,340 >> Ini telah menerapkan get int di sedemikian rupa bahwa itu hanya akan 893 00:42:54,340 --> 00:42:55,590 mendapatkan integer untuk Anda. 894 00:42:55,590 --> 00:42:57,830 Dan jika Anda, manusia, tidak bekerja sama, itu 895 00:42:57,830 --> 00:43:00,590 benar-benar hanya akan mengatakan coba lagi, coba lagi, coba lagi, 896 00:43:00,590 --> 00:43:05,200 harfiah duduk di sana perulangan, sampai Anda mewajibkan dengan beberapa nomor ajaib, 897 00:43:05,200 --> 00:43:07,670 seperti 50, dan Halo 50. 898 00:43:07,670 --> 00:43:11,440 >> Atau jika kita menjalankan ini lagi dan ketik 42, halo 42. 899 00:43:11,440 --> 00:43:15,750 Dan fungsi get int dalam bahwa potongan puzzle 900 00:43:15,750 --> 00:43:19,050 cukup logika, cukup pikiran, untuk mencari tahu, apa kata? 901 00:43:19,050 --> 00:43:20,330 Dan apa adalah nomor? 902 00:43:20,330 --> 00:43:23,165 Hanya menerima, akhirnya, nomor. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Jadi ternyata bahwa ini tidak semua yang ekspresif. 905 00:43:30,230 --> 00:43:30,910 sejauh ini. 906 00:43:30,910 --> 00:43:33,690 Jadi, yay, terakhir kali kami berjalan cukup cepat 907 00:43:33,690 --> 00:43:38,320 dalam menerapkan permainan, dan animasi, dan karya seni di Scratch. 908 00:43:38,320 --> 00:43:42,260 Dan di sini, kita sedang konten dengan halo dunia, dan Halo 50. 909 00:43:42,260 --> 00:43:43,696 >> Ini tidak semua inspirasi itu. 910 00:43:43,696 --> 00:43:46,070 Dan, memang, ini pertama beberapa contoh akan memakan waktu 911 00:43:46,070 --> 00:43:47,510 untuk meningkatkan dalam kegembiraan. 912 00:43:47,510 --> 00:43:49,854 Tapi kami memiliki begitu banyak mengontrol sekarang, sebenarnya. 913 00:43:49,854 --> 00:43:51,770 Dan kita akan sangat cepat mulai layering 914 00:43:51,770 --> 00:43:53,870 di atas ini primitif dasar. 915 00:43:53,870 --> 00:43:56,370 >> Tapi pertama-tama, mari kita memahami apa keterbatasan yang. 916 00:43:56,370 --> 00:43:58,620 Bahkan, salah satu hal Scratch tidak mudah 917 00:43:58,620 --> 00:44:00,990 mari kita lakukan adalah benar-benar melihat di bawah kap mesin, 918 00:44:00,990 --> 00:44:03,740 dan memahami apa komputer, apa yang dapat dilakukan, 919 00:44:03,740 --> 00:44:05,250 dan apa keterbatasan yang. 920 00:44:05,250 --> 00:44:08,580 Dan, memang, bahwa kurangnya pemahaman, berpotensi, jangka panjang 921 00:44:08,580 --> 00:44:12,520 dapat menyebabkan menulis mistakes-- kita sendiri bug, menulis perangkat lunak tidak aman yang 922 00:44:12,520 --> 00:44:13,880 hacked dalam beberapa cara. 923 00:44:13,880 --> 00:44:17,130 >> Jadi mari kita mengambil beberapa langkah-langkah menuju memahami ini sedikit lebih baik dengan 924 00:44:17,130 --> 00:44:19,710 cara, mengatakan, contoh berikut. 925 00:44:19,710 --> 00:44:23,550 Aku akan pergi ke depan dan menerapkan cepat nyata sebuah program yang disebut Adder. 926 00:44:23,550 --> 00:44:25,134 Seperti, mari kita tambahkan beberapa angka bersama. 927 00:44:25,134 --> 00:44:27,800 Dan aku akan kode beberapa sudut di sini, dan hanya copy dan paste 928 00:44:27,800 --> 00:44:30,270 di mana saya sebelumnya, hanya sehingga kami bisa pergi lebih cepat. 929 00:44:30,270 --> 00:44:33,090 Jadi sekarang aku punya awal dasar dari sebuah program yang disebut Adder. 930 00:44:33,090 --> 00:44:34,670 >> Dan mari kita pergi ke depan dan melakukan hal ini. 931 00:44:34,670 --> 00:44:38,680 Aku akan pergi ke depan dan katakanlah, INTx mendapat mendapatkan int. 932 00:44:38,680 --> 00:44:39,430 Dan kau tahu apa? 933 00:44:39,430 --> 00:44:40,990 Mari kita membuat pengalaman pengguna yang lebih baik. 934 00:44:40,990 --> 00:44:45,740 >> Jadi mari kita hanya mengatakan x adalah, dan efektif meminta pengguna untuk memberikan x. 935 00:44:45,740 --> 00:44:50,600 Dan kemudian biarkan aku pergi ke depan dan berkata, printf bagaimana y adalah, saat ini mengharapkan 936 00:44:50,600 --> 00:44:53,140 dua nilai dari pengguna. 937 00:44:53,140 --> 00:44:59,759 Dan kemudian mari kita pergi ke depan dan katakanlah, printf, jumlah x dan y adalah. 938 00:44:59,759 --> 00:45:01,300 Dan sekarang saya tidak ingin melakukan persen s. 939 00:45:01,300 --> 00:45:09,080 Saya ingin melakukan persen i, backslash n, dan kemudian pasang di nilai sum. 940 00:45:09,080 --> 00:45:10,620 >> Jadi bagaimana saya bisa pergi untuk melakukan ini? 941 00:45:10,620 --> 00:45:11,270 Kamu tahu apa? 942 00:45:11,270 --> 00:45:12,840 Aku tahu bagaimana menggunakan variabel. 943 00:45:12,840 --> 00:45:15,140 Mari saya hanya menyatakan yang baru, int z. 944 00:45:15,140 --> 00:45:16,770 >> Dan aku akan mengambil menebak di sini. 945 00:45:16,770 --> 00:45:21,470 Jika ada tanda-tanda sama dalam ini bahasa, mungkin aku hanya bisa melakukan x ditambah y, 946 00:45:21,470 --> 00:45:23,660 selama aku mengakhiri saya berpikir dengan semi-colon? 947 00:45:23,660 --> 00:45:28,170 Sekarang aku bisa kembali ke sini, pasang di z, menyelesaikan pikiran ini dengan semi-kolon. 948 00:45:28,170 --> 00:45:33,160 Dan mari kita lihat sekarang, apakah ini urutan lines-- x adalah mendapatkan int. 949 00:45:33,160 --> 00:45:34,770 Y adalah mendapatkan int. 950 00:45:34,770 --> 00:45:37,980 >> Tambahkan x dan y, menyimpan nilai di z-- Jadi, sekali lagi, ingat tanda sama 951 00:45:37,980 --> 00:45:38,560 tidak sama. 952 00:45:38,560 --> 00:45:41,100 Ini tugas dari kanan ke kiri. 953 00:45:41,100 --> 00:45:45,180 Dan mari kita mencetak sum dari x dan y tidak harfiah z, 954 00:45:45,180 --> 00:45:46,830 tapi apa dalam z. 955 00:45:46,830 --> 00:45:50,090 Jadi mari kita membuat Adder - bagus, tidak ada kesalahan saat ini. 956 00:45:50,090 --> 00:45:53,030 Dot memangkas Adder, masukkan, x akan menjadi 1. 957 00:45:53,030 --> 00:45:55,380 >> Y akan menjadi 2. 958 00:45:55,380 --> 00:45:58,964 Dan jumlah x dan y adalah 3. 959 00:45:58,964 --> 00:46:00,130 Jadi itu semua baik dan bagus. 960 00:46:00,130 --> 00:46:03,260 >> Jadi Anda akan membayangkan matematika yang harus bekerja dalam program seperti ini. 961 00:46:03,260 --> 00:46:04,040 Tapi kau tahu apa? 962 00:46:04,040 --> 00:46:06,904 Apakah variabel ini, baris 12, bahkan perlu? 963 00:46:06,904 --> 00:46:09,820 Anda tidak perlu masuk ke dalam kebiasaan hanya menyimpan hal-hal di variabel 964 00:46:09,820 --> 00:46:10,980 hanya karena Anda bisa. 965 00:46:10,980 --> 00:46:13,550 Dan, pada kenyataannya, itu umumnya desain yang buruk Dianggap 966 00:46:13,550 --> 00:46:18,100 jika Anda membuat sebuah variabel, disebut z dalam kasus ini, menyimpan sesuatu di dalamnya, 967 00:46:18,100 --> 00:46:21,390 dan kemudian segera menggunakannya, tapi tidak pernah lagi. 968 00:46:21,390 --> 00:46:24,700 Mengapa memberikan sesuatu nama seperti z jika Anda benar-benar 969 00:46:24,700 --> 00:46:26,770 akan menggunakan Hal hanya sekali, dan sebagainya 970 00:46:26,770 --> 00:46:29,380 proksimal ke tempat Anda buat itu di tempat pertama, 971 00:46:29,380 --> 00:46:31,052 begitu dekat dalam hal baris kode? 972 00:46:31,052 --> 00:46:31,760 Sehingga Anda tahu apa? 973 00:46:31,760 --> 00:46:34,480 Ternyata C cukup fleksibel. 974 00:46:34,480 --> 00:46:36,586 Jika saya benar-benar ingin plug-in nilai di sini, 975 00:46:36,586 --> 00:46:38,210 Aku tidak perlu mendeklarasikan variabel baru. 976 00:46:38,210 --> 00:46:41,680 Aku hanya bisa plug-in x ditambah y, karena C mengerti 977 00:46:41,680 --> 00:46:43,390 aritmatika, dan operator matematika. 978 00:46:43,390 --> 00:46:47,140 >> Jadi saya hanya bisa mengatakan, melakukan matematika ini, x ditambah y, apa pun nilai-nilai tersebut, 979 00:46:47,140 --> 00:46:50,780 pasang yang dihasilkan integer menjadi string. 980 00:46:50,780 --> 00:46:53,730 Jadi ini mungkin, meskipun hanya satu baris yang lebih pendek, 981 00:46:53,730 --> 00:46:58,480 desain yang lebih baik, program yang lebih baik, karena ada kode kurang, oleh karena itu 982 00:46:58,480 --> 00:46:59,921 kurang bagi saya untuk memahami. 983 00:46:59,921 --> 00:47:01,920 Dan itu juga hanya bersih, sejauh kita tidak 984 00:47:01,920 --> 00:47:04,620 memperkenalkan kata-kata baru, simbol baru, seperti z, 985 00:47:04,620 --> 00:47:07,510 meskipun mereka tidak benar-benar melayani banyak tujuan. 986 00:47:07,510 --> 00:47:12,890 >> Sayangnya, matematika tidak semua yang kadang-kadang dapat diandalkan. 987 00:47:12,890 --> 00:47:15,270 Mari kita pergi ke depan dan melakukan hal ini. 988 00:47:15,270 --> 00:47:18,200 Aku akan pergi ke depan sekarang dan melakukan hal berikut. 989 00:47:18,200 --> 00:47:27,650 >> Mari kita lakukan printf, persen saya, ditambah persen i, harus persen i, backslash n. 990 00:47:27,650 --> 00:47:32,240 Dan aku akan melakukan ini-- xyx ditambah y. 991 00:47:32,240 --> 00:47:34,821 Jadi aku hanya akan menulis ulang ini sedikit berbeda di sini. 992 00:47:34,821 --> 00:47:36,320 Saya hanya melakukan cek kewarasan cepat. 993 00:47:36,320 --> 00:47:37,986 Sekali lagi, mari kita tidak maju dari diri kita sendiri. 994 00:47:37,986 --> 00:47:41,420 Membuat penambah, dot slash penambah. 995 00:47:41,420 --> 00:47:44,950 x adalah 1, y adalah 2, 1 ditambah 2 adalah 3. 996 00:47:44,950 --> 00:47:45,870 Jadi itu bagus. 997 00:47:45,870 --> 00:47:49,060 Tapi mari kita mempersulit ini sekarang sedikit, dan membuat file baru. 998 00:47:49,060 --> 00:47:53,350 >> Aku akan menyebutnya satu, mengatakan, int, jamak untuk bilangan bulat. 999 00:47:53,350 --> 00:47:55,980 Mari saya mulai di mana aku berada saat yang lalu. 1000 00:47:55,980 --> 00:47:57,770 Tapi sekarang mari kita lakukan beberapa baris lainnya. 1001 00:47:57,770 --> 00:48:03,430 Biarkan aku pergi ke depan dan melakukan hal berikut, printf, persen i, dikurangi persen i, 1002 00:48:03,430 --> 00:48:08,959 adalah persen i, koma x, koma yx dikurangi y. 1003 00:48:08,959 --> 00:48:10,750 Jadi aku melakukan sedikit matematika yang berbeda di sana. 1004 00:48:10,750 --> 00:48:11,624 Mari kita lakukan satu sama lain. 1005 00:48:11,624 --> 00:48:16,610 Jadi persen saya kali persen i adalah persen i, backslash n. 1006 00:48:16,610 --> 00:48:21,430 Mari plug-in x, dan y, dan x kali y. 1007 00:48:21,430 --> 00:48:24,530 Kami akan menggunakan tanda bintang pada komputer Anda untuk kali. 1008 00:48:24,530 --> 00:48:26,390 >> Anda tidak menggunakan x. x adalah nama variabel di sini. 1009 00:48:26,390 --> 00:48:28,270 Anda menggunakan bintang untuk perkalian. 1010 00:48:28,270 --> 00:48:29,020 Mari kita lakukan satu lagi. 1011 00:48:29,020 --> 00:48:34,580 Printf persen I, dibagi oleh persen i, adalah persen i, 1012 00:48:34,580 --> 00:48:40,460 n backslash. xy dibagi dengan y-- sehingga Anda menggunakan garis miring di C 1013 00:48:40,460 --> 00:48:41,502 untuk melakukan pembagian. 1014 00:48:41,502 --> 00:48:42,460 Dan mari kita lakukan yang lain. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Sisa persen i, dibagi oleh persen i, adalah persen i. 1017 00:48:55,240 --> 00:48:59,550 xy-- dan sekarang sisanya adalah apa yang tersisa. 1018 00:48:59,550 --> 00:49:02,980 Ketika Anda mencoba membagi penyebut menjadi pembilang sebuah, 1019 00:49:02,980 --> 00:49:05,570 berapa banyak yang tersisa yang Anda tidak bisa membagi keluar? 1020 00:49:05,570 --> 00:49:07,910 >> Jadi tidak ada benar-benar, tentu, simbol 1021 00:49:07,910 --> 00:49:09,470 kami telah digunakan di sekolah dasar untuk ini. 1022 00:49:09,470 --> 00:49:13,830 Tapi ada di C. Anda dapat mengatakan x modulo y, di mana 1023 00:49:13,830 --> 00:49:18,000 ini tanda persen di context-- ini membingungkan ketika Anda di dalam 1024 00:49:18,000 --> 00:49:20,170 dari tanda kutip ganda, dalam printf, persen 1025 00:49:20,170 --> 00:49:21,830 digunakan sebagai format specifier. 1026 00:49:21,830 --> 00:49:25,420 >> Bila Anda menggunakan persen di luar bahwa dalam ekspresi matematika, 1027 00:49:25,420 --> 00:49:29,910 itu operator modulo untuk modular arithmetic-- untuk tujuan kita 1028 00:49:29,910 --> 00:49:33,650 di sini, hanya berarti, apa yang sisa x dibagi dengan y? 1029 00:49:33,650 --> 00:49:36,130 Jadi x dibagi dengan y adalah x slash y. 1030 00:49:36,130 --> 00:49:38,220 Apa sisa x dibagi dengan y? 1031 00:49:38,220 --> 00:49:41,780 Ini x mod y, sebagai programmer akan mengatakan. 1032 00:49:41,780 --> 00:49:48,300 >> Jadi jika saya tidak membuat kesalahan di sini, saya pergi ke depan dan membuat int, plural, baik, 1033 00:49:48,300 --> 00:49:50,010 dan int slash dot. 1034 00:49:50,010 --> 00:49:55,270 Dan mari kita pergi ke depan dan lakukan, katakanlah, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Baiklah, 1 ditambah 10 adalah 11, cek. 1036 00:49:58,390 --> 00:50:01,240 1 minus 10 negatif 9, periksa. 1037 00:50:01,240 --> 00:50:03,420 >> 1 kali 10 adalah 10, cek. 1038 00:50:03,420 --> 00:50:07,090 1 dibagi dengan 10 is-- OK, kita akan melewatkan satu itu. 1039 00:50:07,090 --> 00:50:09,480 Sisa 1 dibagi dengan 10 adalah 1. 1040 00:50:09,480 --> 00:50:10,680 Itu benar. 1041 00:50:10,680 --> 00:50:12,630 Tapi ada bug di sini. 1042 00:50:12,630 --> 00:50:15,390 >> Jadi satu saya menempatkan saya menyerahkan, tidak benar. 1043 00:50:15,390 --> 00:50:16,670 Maksudku, itu dekat dengan 0. 1044 00:50:16,670 --> 00:50:20,670 1 dibagi dengan 10, Anda tahu, jika kita memotong beberapa sudut, yakin, itu nol. 1045 00:50:20,670 --> 00:50:28,050 Tapi itu benar-benar harus 1/10, 0,1, atau 0,10, 0,1000, atau lain sebagainya. 1046 00:50:28,050 --> 00:50:30,600 >> Ini harus benar-benar nol. 1047 00:50:30,600 --> 00:50:35,990 Nah, ternyata bahwa komputer adalah melakukan harfiah apa yang kita diberitahu untuk melakukan. 1048 00:50:35,990 --> 00:50:39,460 Kami melakukan matematika seperti x dibagi dengan y. 1049 00:50:39,460 --> 00:50:44,680 Dan kedua x dan y, per baris kode sebelumnya, adalah bilangan bulat. 1050 00:50:44,680 --> 00:50:50,440 >> Selain itu, pada baris 15, kita mengatakan printf, hey, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 integer, plug-in integer, plug-dalam integer-- khusus 1052 00:50:54,230 --> 00:50:57,580 x, dan kemudian y, dan kemudian x dibagi dengan y. x dan y adalah int. 1053 00:50:57,580 --> 00:50:59,060 Kami baik di sana. 1054 00:50:59,060 --> 00:51:01,250 >> Tapi apa yang x dibagi dengan x? 1055 00:51:01,250 --> 00:51:06,790 x dibagi dengan y harus, matematis, 1/10, atau 0,1, 1056 00:51:06,790 --> 00:51:11,600 yang merupakan bilangan real, bilangan real memiliki, berpotensi, titik desimal. 1057 00:51:11,600 --> 00:51:13,230 Ini bukan integer. 1058 00:51:13,230 --> 00:51:18,290 >> Tapi apa yang paling dekat integer untuk 1/10, atau 0,1? 1059 00:51:18,290 --> 00:51:21,114 Ya, itu jenis adalah nol. 1060 00:51:21,114 --> 00:51:22,030 0.1 adalah seperti banyak ini. 1061 00:51:22,030 --> 00:51:22,890 Dan 1 adalah sebanyak ini. 1062 00:51:22,890 --> 00:51:25,870 Jadi 1/10 lebih dekat dengan 0 daripada untuk satu. 1063 00:51:25,870 --> 00:51:30,800 >> Dan jadi apa C lakukan untuk us-- jenis karena kami diberitahu itu to-- 1064 00:51:30,800 --> 00:51:32,600 adalah truncating integer yang. 1065 00:51:32,600 --> 00:51:40,540 Itu mengambil nilai, yang lagi seharusnya menjadi sesuatu seperti 0,1000, 1066 00:51:40,540 --> 00:51:41,800 0 dan sebagainya. 1067 00:51:41,800 --> 00:51:45,320 Dan itu truncating segalanya setelah titik desimal 1068 00:51:45,320 --> 00:51:47,510 sehingga semua ini hal, karena tidak 1069 00:51:47,510 --> 00:51:51,910 cocok gagasan integer, yang adalah nomor seperti negatif 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 atas dan ke bawah, itu membuang segalanya setelah titik desimal karena Anda 1071 00:51:55,830 --> 00:51:59,020 tidak bisa cocok dengan titik desimal di sebuah integer dengan definisi. 1072 00:51:59,020 --> 00:52:01,290 >> Jadi jawabannya di sini adalah nol. 1073 00:52:01,290 --> 00:52:02,600 Jadi bagaimana kita mengatasinya? 1074 00:52:02,600 --> 00:52:04,400 Kita perlu solusi lain bersama-sama. 1075 00:52:04,400 --> 00:52:06,880 Dan kita bisa melakukan ini, sebagai berikut. 1076 00:52:06,880 --> 00:52:12,820 >> Biarkan aku pergi ke depan dan membuat yang baru berkas, yang satu ini disebut floats.c. 1077 00:52:12,820 --> 00:52:16,500 Dan simpan di sini di direktori yang sama, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 Dan biarkan aku pergi ke depan dan menyalin beberapa kode dari sebelumnya. 1080 00:52:23,260 --> 00:52:27,690 >> Tapi bukannya int, mari kita lakukan ini. 1081 00:52:27,690 --> 00:52:31,037 Beri aku nilai floating point disebut x. di mana floating point 1082 00:52:31,037 --> 00:52:33,370 Nilai hanya harfiah sesuatu dengan floating point. 1083 00:52:33,370 --> 00:52:34,410 Hal ini dapat bergerak ke kiri, ke kanan. 1084 00:52:34,410 --> 00:52:35,530 Ini adalah bilangan real. 1085 00:52:35,530 --> 00:52:38,050 >> Dan biarkan aku sebut tidak mendapatkan int, tapi mendapatkan float, 1086 00:52:38,050 --> 00:52:41,420 yang juga berada di antara menu pilihan di perpustakaan C250. 1087 00:52:41,420 --> 00:52:43,220 Mari kita mengubah y ke float. 1088 00:52:43,220 --> 00:52:45,000 Jadi ini menjadi mendapatkan float. 1089 00:52:45,000 --> 00:52:47,620 >> Dan sekarang, kita tidak ingin pasang di int. 1090 00:52:47,620 --> 00:52:53,130 Ternyata kita harus menggunakan persen f untuk float, persen f untuk float, 1091 00:52:53,130 --> 00:52:54,560 dan sekarang simpan. 1092 00:52:54,560 --> 00:53:01,220 Dan sekarang, semoga, membuat mengapung, bagus, mengapung dot slash. 1093 00:53:01,220 --> 00:53:04,280 x akan menjadi salah satu 1. y Akan menjadi 10 lagi. 1094 00:53:04,280 --> 00:53:08,240 >> Dan, bagus, OK Selain saya benar. 1095 00:53:08,240 --> 00:53:10,240 Saya berharap untuk lebih, tapi saya lupa untuk menulis itu. 1096 00:53:10,240 --> 00:53:13,250 Jadi mari kita pergi dan memperbaiki kesalahan logis ini. 1097 00:53:13,250 --> 00:53:16,280 >> Mari kita pergi ke depan dan ambil berikut. 1098 00:53:16,280 --> 00:53:18,080 Kami hanya akan melakukan copy sedikit dan paste. 1099 00:53:18,080 --> 00:53:20,080 Dan aku akan mengatakan dikurangi. 1100 00:53:20,080 --> 00:53:21,890 >> Dan aku akan mengatakan kali. 1101 00:53:21,890 --> 00:53:24,060 Dan aku akan mengatakan dibagi. 1102 00:53:24,060 --> 00:53:28,240 Dan aku tidak akan melakukan Modulo, yang tidak erat di sini, 1103 00:53:28,240 --> 00:53:33,690 dibagi dengan f, dan kali plus-- OK, mari kita lakukan ini lagi. 1104 00:53:33,690 --> 00:53:44,210 >> Membuat mengapung, mengapung dot slash, dan 1, 10, dan-- bagus, tidak ada, OK. 1105 00:53:44,210 --> 00:53:45,250 Jadi aku idiot. 1106 00:53:45,250 --> 00:53:47,000 Jadi ini sangat umum dalam ilmu komputer 1107 00:53:47,000 --> 00:53:49,780 untuk membuat kesalahan bodoh seperti ini. 1108 00:53:49,780 --> 00:53:53,100 >> Untuk tujuan pedagogis, apa yang saya benar-benar ingin lakukan 1109 00:53:53,100 --> 00:53:57,410 itu mengubah ilmu di sini untuk ditambah, menjadi minus, untuk kali, 1110 00:53:57,410 --> 00:54:01,140 dan untuk membagi, karena Anda mudah-mudahan perhatikan selama latihan ini. 1111 00:54:01,140 --> 00:54:04,700 Jadi sekarang mari kita melakukan kompilasi ulang ini Program, melakukan mengapung dot slash. 1112 00:54:04,700 --> 00:54:07,950 >> Dan untuk ketiga kalinya, mari kita melihat apakah memenuhi harapan saya. 1113 00:54:07,950 --> 00:54:21,480 1, 10, masukkan, ya, OK, 1.000, dibagi dengan 10.000, adalah 0,100000. 1114 00:54:21,480 --> 00:54:24,952 Dan ternyata kita dapat mengontrol berapa banyak angka setelah titik-titik desimal. 1115 00:54:24,952 --> 00:54:25,660 Kami benar-benar akan. 1116 00:54:25,660 --> 00:54:26,790 Kami akan kembali ke itu. 1117 00:54:26,790 --> 00:54:28,440 >> Tapi sekarang, pada kenyataannya, matematika adalah benar. 1118 00:54:28,440 --> 00:54:30,090 Jadi, sekali lagi, apa takeaway di sini? 1119 00:54:30,090 --> 00:54:33,050 Ternyata di C, ada tidak hanya strings-- dan, pada kenyataannya, 1120 00:54:33,050 --> 00:54:36,120 tidak ada benar-benar, karena kita menambahkan mereka dengan perpustakaan CS50. 1121 00:54:36,120 --> 00:54:37,710 Tapi ada tidak hanya int. 1122 00:54:37,710 --> 00:54:38,990 >> Ada juga mengapung. 1123 00:54:38,990 --> 00:54:42,810 Dan ternyata sekelompok data lainnya jenis juga, yang akan kami gunakan sebelum lama. 1124 00:54:42,810 --> 00:54:46,270 Ternyata jika Anda ingin satu karakter, bukan string karakter, 1125 00:54:46,270 --> 00:54:47,610 Anda dapat menggunakan hanya char. 1126 00:54:47,610 --> 00:54:52,350 >> Ternyata bahwa jika Anda ingin bool, nilai Boolean, benar atau salah satunya, 1127 00:54:52,350 --> 00:54:56,840 berkat perpustakaan CS50, kami telah ditambahkan ke C tipe data bool juga. 1128 00:54:56,840 --> 00:54:59,180 Tapi itu juga hadir di banyak bahasa lain juga. 1129 00:54:59,180 --> 00:55:04,130 Dan ternyata bahwa kadang-kadang Anda perlu nomor lebih besar kemudian datang secara default 1130 00:55:04,130 --> 00:55:05,210 dengan ints dan mengapung. 1131 00:55:05,210 --> 00:55:10,590 >> Dan, pada kenyataannya, ganda adalah angka yang menggunakan tidak 32 bit, tapi 64 bit. 1132 00:55:10,590 --> 00:55:14,990 Dan lama adalah angka yang menggunakan tidak 32, bit tapi 64 bit, 1133 00:55:14,990 --> 00:55:19,190 masing-masing, untuk floating point nilai-nilai dan bilangan bulat, masing-masing. 1134 00:55:19,190 --> 00:55:22,780 Jadi mari kita benar-benar sekarang melihat ini dalam tindakan. 1135 00:55:22,780 --> 00:55:26,150 >> Aku akan pergi ke depan di sini dan menyiapkan satu program lainnya. 1136 00:55:26,150 --> 00:55:32,020 Di sini, saya akan pergi ke depan dan jangan termasuk CS50.h. 1137 00:55:32,020 --> 00:55:34,910 Dan biarkan aku pergi, termasuk standar IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> Dan Anda akan melihat sesuatu yang funky yang terjadi di sini. 1139 00:55:37,320 --> 00:55:40,592 Ini tidak warna coding hal di dengan cara yang sama seperti yang terjadi sebelumnya. 1140 00:55:40,592 --> 00:55:43,550 Dan ternyata, itu karena aku tidak memberikan hal nama file. 1141 00:55:43,550 --> 00:55:47,270 >> Aku akan menyebutnya satu sizeof.c, dan tekan Simpan. 1142 00:55:47,270 --> 00:55:51,039 Dan perhatikan apa yang terjadi pada saya sangat Kode putih terhadap yang latar belakang hitam. 1143 00:55:51,039 --> 00:55:52,830 Sekarang, setidaknya ada beberapa ungu di sana. 1144 00:55:52,830 --> 00:55:54,490 Dan itu adalah sintaks disorot. 1145 00:55:54,490 --> 00:55:57,700 >> Itu karena, cukup sederhana, saya sudah mengatakan IDE apa jenis file 1146 00:55:57,700 --> 00:56:01,060 itu adalah dengan memberi nama, dan khusus ekstensi file. 1147 00:56:01,060 --> 00:56:03,620 Sekarang, mari kita pergi ke depan dan melakukan hal ini. 1148 00:56:03,620 --> 00:56:08,910 Aku akan pergi ke depan dan sangat hanya mencetak bool following-- 1149 00:56:08,910 --> 00:56:11,080 adalah persen LU. 1150 00:56:11,080 --> 00:56:12,950 >> Kami akan kembali ke yang hanya dalam beberapa saat. 1151 00:56:12,950 --> 00:56:15,840 Dan kemudian aku akan ukuran cetak dari bool. 1152 00:56:15,840 --> 00:56:18,170 Dan sekarang, hanya untuk menyimpan sendiri beberapa waktu, aku 1153 00:56:18,170 --> 00:56:20,280 akan melakukan keseluruhan sekelompok tersebut sekaligus. 1154 00:56:20,280 --> 00:56:24,620 Dan, khususnya, aku akan mengubahnya ke char dan arang. 1155 00:56:24,620 --> 00:56:27,760 yang satu ini, saya akan mengubah untuk ganda dan ganda. 1156 00:56:27,760 --> 00:56:31,440 >> yang satu ini, saya akan mengubah untuk pelampung dan pelampung. 1157 00:56:31,440 --> 00:56:35,670 yang satu ini, saya akan mengubah ke int dan int. 1158 00:56:35,670 --> 00:56:38,660 Dan yang satu ini, saya akan untuk mengubah ke yang lama. 1159 00:56:38,660 --> 00:56:40,840 Dan itu masih mengambil lama, lama. 1160 00:56:40,840 --> 00:56:44,572 >> Dan kemudian, terakhir, saya berikan diriku satu terlalu banyak, tali. 1161 00:56:44,572 --> 00:56:47,030 Ternyata di C, ada operator khusus yang disebut 1162 00:56:47,030 --> 00:56:50,260 ukuran yang secara harfiah akan, ketika dijalankan, 1163 00:56:50,260 --> 00:56:52,099 memberitahu kami ukuran masing-masing variabel. 1164 00:56:52,099 --> 00:56:53,890 Dan ini adalah cara, sekarang, kita bisa menghubungkan kembali 1165 00:56:53,890 --> 00:56:57,140 untuk diskusi minggu lalu data dan representasi. 1166 00:56:57,140 --> 00:57:00,330 >> Biarkan aku pergi ke depan dan kompilasi ukuran ukuran slash dot dari. 1167 00:57:00,330 --> 00:57:01,210 Dan mari kita lihat. 1168 00:57:01,210 --> 00:57:05,210 Ternyata di C, khusus pada CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 secara khusus pada sistem operasi Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 yang merupakan operasi 64-bit sistem dalam kasus ini, 1171 00:57:11,100 --> 00:57:14,189 bool akan menggunakan satu byte ruang. 1172 00:57:14,189 --> 00:57:16,480 Itulah cara ukuran diukur, tidak dalam bit, tapi dalam byte. 1173 00:57:16,480 --> 00:57:18,690 Dan ingat bahwa satu byte adalah delapan bit. 1174 00:57:18,690 --> 00:57:22,030 Jadi bool, meskipun Anda secara teknis hanya perlu 0 atau 1, 1175 00:57:22,030 --> 00:57:24,092 itu sedikit boros bagaimana kita telah menerapkan hal itu. 1176 00:57:24,092 --> 00:57:26,800 Ini benar-benar akan menggunakan keseluruhan byte-- sehingga semua nol, yang mungkin 1177 00:57:26,800 --> 00:57:31,050 semua orang, atau sesuatu seperti itu, atau hanya satu 1 di antara delapan bit. 1178 00:57:31,050 --> 00:57:34,962 >> Sebuah char, sementara itu, digunakan untuk karakter seperti karakter Ascii per pekan lalu, 1179 00:57:34,962 --> 00:57:36,170 akan menjadi satu karakter. 1180 00:57:36,170 --> 00:57:42,340 Dan yang synchs dengan gagasan kami itu menjadi tidak lebih dari 256 bits-- lebih tepatnya, 1181 00:57:42,340 --> 00:57:45,360 synchs dengan itu menjadi tidak ada lebih dari 8 bit, yang 1182 00:57:45,360 --> 00:57:47,450 memberi kita sebanyak 256 nilai. 1183 00:57:47,450 --> 00:57:49,680 Sebuah ganda akan menjadi 8 byte atau 64 bit. 1184 00:57:49,680 --> 00:57:50,510 >> Sebuah float adalah 4. 1185 00:57:50,510 --> 00:57:51,690 Int adalah 4. 1186 00:57:51,690 --> 00:57:52,980 Sebuah panjang, panjang 8. 1187 00:57:52,980 --> 00:57:54,716 Dan string adalah 8. 1188 00:57:54,716 --> 00:57:55,840 Tapi jangan khawatir tentang itu. 1189 00:57:55,840 --> 00:57:57,340 Kita akan mengupas lapisan itu. 1190 00:57:57,340 --> 00:57:59,940 Ternyata, string bisa lebih panjang dari 8 byte. 1191 00:57:59,940 --> 00:58:02,310 >> Dan, memang, kami telah menulis string sudah, halo dunia, 1192 00:58:02,310 --> 00:58:03,700 lebih dari 8 byte. 1193 00:58:03,700 --> 00:58:06,270 Tapi kita akan kembali ke yang hanya dalam beberapa saat. 1194 00:58:06,270 --> 00:58:09,690 Tapi take away di sini adalah sebagai berikut. 1195 00:58:09,690 --> 00:58:15,320 >> Setiap komputer hanya memiliki terbatas jumlah memori dan ruang. 1196 00:58:15,320 --> 00:58:17,860 Anda hanya dapat menyimpan begitu banyak file pada Mac atau PC. 1197 00:58:17,860 --> 00:58:23,030 Anda hanya dapat menyimpan begitu banyak program di RAM berjalan sekaligus, tentu, bahkan 1198 00:58:23,030 --> 00:58:26,360 dengan memori virtual, karena Anda memiliki jumlah terbatas RAM. 1199 00:58:26,360 --> 00:58:28,990 >> Dan hanya untuk picture-- jika Anda tidak pernah membuka laptop 1200 00:58:28,990 --> 00:58:31,300 atau memerintahkan memori tambahan untuk komputer, Anda 1201 00:58:31,300 --> 00:58:33,670 mungkin tidak tahu bahwa dalam komputer Anda 1202 00:58:33,670 --> 00:58:36,590 adalah sesuatu yang tampak sedikit seperti ini. 1203 00:58:36,590 --> 00:58:40,540 Jadi ini hanya sebuah perusahaan umum bernama Penting yang membuat RAM untuk komputer. 1204 00:58:40,540 --> 00:58:43,620 Dan RAM adalah tempat program hidup sementara mereka sedang berjalan. 1205 00:58:43,620 --> 00:58:46,630 >> Jadi pada setiap Mac atau PC, ketika Anda dua kali lipat klik program, dan membuka, 1206 00:58:46,630 --> 00:58:48,921 dan membuka beberapa dokumen Word atau semacam itu, 1207 00:58:48,921 --> 00:58:51,764 itu toko sementara di RAM, karena RAM yang lebih cepat 1208 00:58:51,764 --> 00:58:53,680 dari hard disk Anda, atau solid state disk Anda. 1209 00:58:53,680 --> 00:58:56,600 Jadi itu hanya di mana program pergi untuk hidup ketika mereka sedang berjalan, 1210 00:58:56,600 --> 00:58:58,060 atau ketika file sedang digunakan. 1211 00:58:58,060 --> 00:59:00,890 >> Jadi Anda memiliki hal-hal yang terlihat seperti dalam ini laptop Anda, 1212 00:59:00,890 --> 00:59:03,320 atau hal-hal sedikit lebih besar dalam desktop Anda. 1213 00:59:03,320 --> 00:59:07,440 Tapi kuncinya adalah Anda hanya memiliki jumlah terbatas hal-hal ini. 1214 00:59:07,440 --> 00:59:11,230 Dan hanya ada sejumlah terbatas hardware duduk di meja ini benar 1215 00:59:11,230 --> 00:59:11,730 sini. 1216 00:59:11,730 --> 00:59:15,920 >> Jadi, pasti, kita tidak bisa menyimpan nomor panjang tak terhingga. 1217 00:59:15,920 --> 00:59:19,030 Dan, namun, jika Anda berpikir kembali ke sekolah dasar, berapa banyak digit bisa 1218 00:59:19,030 --> 00:59:21,400 Anda harus kanan dari titik desimal? 1219 00:59:21,400 --> 00:59:24,680 Untuk itu, berapa banyak digit bisa Anda harus di sebelah kiri titik desimal? 1220 00:59:24,680 --> 00:59:26,300 Sungguh, tak terhingga banyaknya. 1221 00:59:26,300 --> 00:59:30,840 >> Sekarang, kita manusia hanya mungkin tahu bagaimana cara mengucapkan juta, 1222 00:59:30,840 --> 00:59:34,990 dan miliar, triliun, dan kuadriliun, dan triliun. 1223 00:59:34,990 --> 00:59:39,370 Dan aku mendorong batas-batas saya understanding-- atau my-- saya mengerti 1224 00:59:39,370 --> 00:59:41,110 angka, tapi saya pengucapan angka. 1225 00:59:41,110 --> 00:59:44,720 Tapi mereka bisa mendapatkan jauh besar dengan tak terhingga banyaknya digit ke kiri 1226 00:59:44,720 --> 00:59:47,050 atau ke kanan titik desimal. 1227 00:59:47,050 --> 00:59:50,040 >> Tetapi komputer hanya memiliki jumlah terbatas memori, 1228 00:59:50,040 --> 00:59:53,510 jumlah terbatas transistor, jumlah terbatas bola lampu di dalam. 1229 00:59:53,510 --> 00:59:57,350 Jadi apa yang terjadi ketika Anda kehabisan ruang? 1230 00:59:57,350 --> 00:59:59,620 Dengan kata lain, jika Anda berpikir kembali ke minggu lalu 1231 00:59:59,620 --> 01:00:03,160 ketika kita berbicara tentang angka sendiri yang diwakili dalam biner, 1232 01:00:03,160 --> 01:00:05,480 misalkan kita punya nilai ini 8-bit di sini. 1233 01:00:05,480 --> 01:00:08,290 >> Dan kami memiliki tujuh 1 dan satu 0. 1234 01:00:08,290 --> 01:00:10,827 Dan misalkan kita ingin untuk menambah 1 untuk nilai ini. 1235 01:00:10,827 --> 01:00:12,410 Ini adalah jumlah yang sangat besar sekarang. 1236 01:00:12,410 --> 01:00:16,610 >> Ini adalah 254, jika saya ingat matematika dari minggu lalu yang tepat. 1237 01:00:16,610 --> 01:00:19,480 Tapi bagaimana jika saya mengubah yang paling kanan 0 ke 1? 1238 01:00:19,480 --> 01:00:22,800 Jumlah keseluruhan, dari Tentu saja, menjadi delapan 1 ini. 1239 01:00:22,800 --> 01:00:24,050 Jadi kita masih baik. 1240 01:00:24,050 --> 01:00:27,204 >> Dan yang mungkin mewakili 255, meskipun tergantung pada konteks 1241 01:00:27,204 --> 01:00:29,120 itu benar-benar bisa mewakili angka negatif. 1242 01:00:29,120 --> 01:00:31,240 Tetapi lebih pada lain waktu. 1243 01:00:31,240 --> 01:00:34,220 Ini terasa seperti itu tentang setinggi aku bisa menghitung. 1244 01:00:34,220 --> 01:00:35,290 >> Sekarang, itu hanya 8 bit. 1245 01:00:35,290 --> 01:00:38,170 Dan Mac saya, pasti, memiliki cara lebih dari 8 bit memori. 1246 01:00:38,170 --> 01:00:39,170 Tetapi memiliki terbatas. 1247 01:00:39,170 --> 01:00:43,230 Jadi argumen yang sama berlaku, bahkan jika kita memiliki lebih dari orang-orang ini di layar. 1248 01:00:43,230 --> 01:00:47,020 >> Tapi apa yang terjadi jika Anda menyimpan nomor ini, 255, 1249 01:00:47,020 --> 01:00:49,290 dan Anda ingin menghitung 1 bit yang lebih tinggi? 1250 01:00:49,290 --> 01:00:51,600 Anda ingin pergi 255-256. 1251 01:00:51,600 --> 01:00:55,800 Masalahnya, tentu saja, adalah bahwa jika Anda mulai menghitung dari nol seperti minggu lalu, 1252 01:00:55,800 --> 01:00:59,670 Anda tidak bisa menghitung setinggi 256, apalagi 257, 1253 01:00:59,670 --> 01:01:02,584 apalagi 258, m karena apa terjadi ketika Anda menambahkan 1? 1254 01:01:02,584 --> 01:01:05,000 Jika Anda melakukan sekolah dasar tua Pendekatan, Anda menempatkan 1 di sini, 1255 01:01:05,000 --> 01:01:08,150 dan kemudian 1 ditambah 1 adalah 2, tapi itu benar-benar nol, Anda membawa 1, 1256 01:01:08,150 --> 01:01:09,695 membawa 1, membawa 1. 1257 01:01:09,695 --> 01:01:12,620 Semua hal ini, ini 1 ini, pergi ke nol. 1258 01:01:12,620 --> 01:01:17,820 Dan Anda angin, ya, sebagai seseorang menunjukkan, 1 di sisi kiri. 1259 01:01:17,820 --> 01:01:22,540 Tapi semua yang Anda bisa benar-benar melihat dan muat di memori 1260 01:01:22,540 --> 01:01:27,960 hanya delapan 0, yang adalah untuk mengatakan di beberapa titik jika Anda, komputer, 1261 01:01:27,960 --> 01:01:32,490 mencoba menghitung cukup tinggi, Anda akan membungkus, tampaknya, 1262 01:01:32,490 --> 01:01:35,850 dengan nol, atau mungkin bahkan negatif angka, yang bahkan lebih rendah dari nol. 1263 01:01:35,850 --> 01:01:37,260 >> Dan kita bisa semacam melihat ini. 1264 01:01:37,260 --> 01:01:39,900 Biarkan aku pergi ke depan dan menulis program cepat nyata di sini. 1265 01:01:39,900 --> 01:01:43,690 Biarkan aku pergi ke depan dan menulis sebuah program yang disebut Overflow. 1266 01:01:43,690 --> 01:01:49,980 Termasuk CS50.h, termasuk standar IO.h-- oh, 1267 01:01:49,980 --> 01:01:51,730 Aku benar-benar merindukan penyorotan sintaks saya. 1268 01:01:51,730 --> 01:01:54,440 Jadi mari kita simpan ini sebagai overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> Dan sekarang int void-- utama dan tak lama, kami akan 1270 01:01:57,084 --> 01:01:59,500 kembali ke menjelaskan mengapa kami terus menulis void main int. 1271 01:01:59,500 --> 01:02:02,080 Tapi untuk saat ini, mari kita lakukan itu, mengambil begitu saja. 1272 01:02:02,080 --> 01:02:06,200 Mari kita memberi diriku int, dan menginisialisasi ke 0. 1273 01:02:06,200 --> 01:02:11,716 >> Mari kita kemudian lakukan untuk int saya mendapatkan zero-- sebenarnya, mari kita lakukan loop tak terbatas 1274 01:02:11,716 --> 01:02:12,590 dan melihat apa yang terjadi. 1275 01:02:12,590 --> 01:02:22,440 Sementara benar, maka mari kita mencetak n adalah persen i, backslash n, plug-in n. 1276 01:02:22,440 --> 01:02:27,200 Tapi, sekarang, mari kita lakukan n mendapat n ditambah 1. 1277 01:02:27,200 --> 01:02:29,660 >> Jadi dengan kata lain, pada setiap iterasi dari loop tak terbatas ini, 1278 01:02:29,660 --> 01:02:32,550 mari kita nilai n ini, dan tambahkan 1 untuk itu, dan kemudian 1279 01:02:32,550 --> 01:02:34,350 menyimpan hasilnya kembali n di sebelah kiri. 1280 01:02:34,350 --> 01:02:37,150 Dan, pada kenyataannya, kita telah melihat sintaks sedikit seperti ini, sebentar. 1281 01:02:37,150 --> 01:02:39,730 Sebuah trik keren adalah bukan menulis semua ini, 1282 01:02:39,730 --> 01:02:42,770 Anda benar-benar dapat mengatakan sebuah n ditambah sama dengan 1. 1283 01:02:42,770 --> 01:02:47,480 >> Atau jika Anda benar-benar ingin menjadi mewah, Anda bisa mengatakan n plus plus semi-kolon. 1284 01:02:47,480 --> 01:02:50,130 Tapi ini dua terakhir hanya apa yang kita sebut gula sintaksis 1285 01:02:50,130 --> 01:02:50,790 untuk hal pertama. 1286 01:02:50,790 --> 01:02:53,456 >> Hal pertama adalah lebih eksplisit, benar-benar baik, benar-benar benar. 1287 01:02:53,456 --> 01:02:55,470 Tapi ini lebih umum, saya akan mengatakan. 1288 01:02:55,470 --> 01:02:57,210 Jadi kita akan melakukan ini untuk sesaat. 1289 01:02:57,210 --> 01:03:01,685 >> Sekarang mari kita membuat overflow, yang terdengar agak menyenangkan, dot slash melimpah. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Mari kita lihat, n semakin cukup besar. 1292 01:03:09,852 --> 01:03:11,310 Tapi mari berpikir, seberapa besar n bisa mendapatkan? 1293 01:03:11,310 --> 01:03:12,870 >> n adalah int. 1294 01:03:12,870 --> 01:03:16,400 Kami melihat beberapa saat yang lalu dengan ukuran Contoh yang int adalah empat byte. 1295 01:03:16,400 --> 01:03:22,070 Kita tahu dari minggu lalu, empat byte adalah 32 bit, karena 8 kali 4, itu 32. 1296 01:03:22,070 --> 01:03:23,460 Itu akan menjadi 4 miliar. 1297 01:03:23,460 --> 01:03:25,802 >> Dan kami sampai 800.000. 1298 01:03:25,802 --> 01:03:28,510 Ini akan mengambil selamanya untuk dihitung sebagai tinggi seperti yang saya bisa. 1299 01:03:28,510 --> 01:03:30,635 Jadi aku akan pergi ke depan, seperti yang mungkin Anda sebelum lama, 1300 01:03:30,635 --> 01:03:34,910 dan tekan Control C-- terus terang, Kontrol C, banyak, di mana kontrol C umumnya 1301 01:03:34,910 --> 01:03:36,034 berarti membatalkan. 1302 01:03:36,034 --> 01:03:38,200 Sayangnya, karena ini berjalan di awan, 1303 01:03:38,200 --> 01:03:41,190 kadang-kadang awan adalah menyemburkan begitu banyak hal, 1304 01:03:41,190 --> 01:03:44,180 begitu banyak output, itu akan mengambil sedikit waktu untuk masukan saya 1305 01:03:44,180 --> 01:03:45,630 untuk sampai ke awan. 1306 01:03:45,630 --> 01:03:49,240 Jadi meskipun aku memukul Kontrol C beberapa detik yang lalu, 1307 01:03:49,240 --> 01:03:53,110 ini jelas sisi efek loop tak terbatas. 1308 01:03:53,110 --> 01:03:56,070 >> Dan dalam kasus tersebut, kami akan meninggalkan yang ada. 1309 01:03:56,070 --> 01:03:59,050 Dan kita akan menambah jendela terminal di sini 1310 01:03:59,050 --> 01:04:03,186 dengan ditambah, yang tentu saja tidak seperti itu, karena itu masih berpikir. 1311 01:04:03,186 --> 01:04:05,310 Dan mari kita pergi ke depan dan menjadi sedikit lebih masuk akal. 1312 01:04:05,310 --> 01:04:07,768 >> Aku akan pergi ke depan dan melakukan ini hanya finitely berkali-kali. 1313 01:04:07,768 --> 01:04:10,047 Mari kita gunakan untuk loop, yang saya singgung sebelumnya. 1314 01:04:10,047 --> 01:04:10,630 Ayo lakukan ini. 1315 01:04:10,630 --> 01:04:13,430 Beri aku variabel int lain saya mendapat 0. 1316 01:04:13,430 --> 01:04:17,430 i kurang dari, katakanlah, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 Dan sekarang biarkan aku pergi ke depan dan cetak out n adalah persen i, koma n. 1318 01:04:24,010 --> 01:04:27,547 Dan kemudian n-- ini masih akan mengambil selamanya. 1319 01:04:27,547 --> 01:04:28,130 Ayo lakukan ini. 1320 01:04:28,130 --> 01:04:30,620 >> n mendapat n kali 2. 1321 01:04:30,620 --> 01:04:34,140 Atau kita bisa menjadi mewah dan melakukan kali sama 2. 1322 01:04:34,140 --> 01:04:37,120 Tapi mari kita hanya mengatakan n sama itu sendiri, kali 2. 1323 01:04:37,120 --> 01:04:39,321 Dengan kata lain, dalam hal ini Versi baru dari program, 1324 01:04:39,321 --> 01:04:41,820 Saya tidak ingin menunggu selamanya dari seperti 800.000 untuk 4 miliar. 1325 01:04:41,820 --> 01:04:43,070 Mari kita mendapatkan lebih dari ini dengan. 1326 01:04:43,070 --> 01:04:44,920 >> Mari kita benar-benar menggandakan n setiap kali. 1327 01:04:44,920 --> 01:04:47,660 Yang, ingat, penggandaan adalah berlawanan memiliki, tentu saja. 1328 01:04:47,660 --> 01:04:50,035 Dan sedangkan minggu lalu kita memiliki sesuatu lagi, dan lagi, 1329 01:04:50,035 --> 01:04:52,200 dan sekali lagi, super cepat, penggandaan pasti akan 1330 01:04:52,200 --> 01:04:58,080 mendapatkan kita dari 1 ke terbesar mungkin nilai yang kita dapat menghitung sampai dengan int. 1331 01:04:58,080 --> 01:04:59,750 >> Jadi mari kita melakukan hal ini. 1332 01:04:59,750 --> 01:05:01,720 Dan kami akan kembali ke ini sebelum lama. 1333 01:05:01,720 --> 01:05:04,180 Tapi ini, sekali lagi, adalah seperti blok ulangi di Scratch. 1334 01:05:04,180 --> 01:05:05,600 Dan Anda akan menggunakan ini sebelum lama. 1335 01:05:05,600 --> 01:05:10,170 >> Ini hanya berarti menghitung dari nol sampai, tapi tak sama, 64. 1336 01:05:10,170 --> 01:05:14,285 Dan pada setiap iterasi ini lingkaran, terus incrementing i. 1337 01:05:14,285 --> 01:05:18,990 Jadi i ++ - dan membangun umum ini pada baris 7 adalah cara super umum 1338 01:05:18,990 --> 01:05:22,290 mengulangi beberapa baris kode, beberapa beberapa kali. 1339 01:05:22,290 --> 01:05:23,362 baris kode yang? 1340 01:05:23,362 --> 01:05:25,570 Ini kurung kurawal, seperti yang Anda mungkin diperoleh dari sekarang, 1341 01:05:25,570 --> 01:05:26,780 berarti, lakukan langkah berikut. 1342 01:05:26,780 --> 01:05:29,510 >> Ini di seperti Scratch, ketika memiliki blok kuning 1343 01:05:29,510 --> 01:05:32,680 dan warna lain yang sejenis merangkul atau memeluk blok lainnya. 1344 01:05:32,680 --> 01:05:34,750 Itulah yang mereka keriting kawat gigi lakukan di sini. 1345 01:05:34,750 --> 01:05:40,200 Jadi jika saya punya sintaks saya right-- Anda dapat melihat simbol wortel di C berarti 1346 01:05:40,200 --> 01:05:42,706 itu berapa kali saya mencoba untuk memecahkan masalah ini. 1347 01:05:42,706 --> 01:05:45,330 Jadi mari kita menyingkirkan salah satu yang sama sekali, dan menutup jendela itu. 1348 01:05:45,330 --> 01:05:46,520 Dan kita akan menggunakan yang baru. 1349 01:05:46,520 --> 01:05:51,980 Membuat overflow, dot slash overflow, Masukkan, baiklah, 1350 01:05:51,980 --> 01:05:53,090 terlihat buruk pada awalnya. 1351 01:05:53,090 --> 01:05:56,200 Tapi mari kita gulir kembali waktu, karena saya melakukan ini 64 kali. 1352 01:05:56,200 --> 01:05:58,700 >> Dan melihat pertama kalinya, n adalah 1. 1353 01:05:58,700 --> 01:06:03,110 Kedua kalinya, n adalah 2, kemudian 4, kemudian 8, kemudian 16. 1354 01:06:03,110 --> 01:06:09,450 Dan tampaknya segera Saya mendapatkan sekitar 1 miliar, 1355 01:06:09,450 --> 01:06:12,800 jika saya dua kali lipat lagi, bahwa harus memberi saya 2 miliar. 1356 01:06:12,800 --> 01:06:14,980 Tapi ternyata, itu tepat di titik puncak. 1357 01:06:14,980 --> 01:06:18,930 >> Dan itu benar-benar meluap int dari 1 miliar 1358 01:06:18,930 --> 01:06:23,514 kira-kira negatif 2 miliar, karena integer, 1359 01:06:23,514 --> 01:06:25,430 tidak seperti nomor kami yang mengasumsikan pekan lalu, 1360 01:06:25,430 --> 01:06:28,397 bisa positif dan negatif dalam realitas dan di komputer. 1361 01:06:28,397 --> 01:06:30,730 Dan jadi setidaknya salah satu dari mereka bit secara efektif dicuri. 1362 01:06:30,730 --> 01:06:34,190 Jadi kita benar-benar hanya memiliki 31 bit, atau 2 miliar nilai yang mungkin. 1363 01:06:34,190 --> 01:06:38,220 >> Tapi untuk saat ini, takeaway cukup sederhana, apa nomor ini 1364 01:06:38,220 --> 01:06:42,280 dan apa pun matematika adalah, sesuatu yang buruk terjadi pada akhirnya, 1365 01:06:42,280 --> 01:06:46,980 karena pada akhirnya Anda mencoba untuk permutasi bit satu kali terlalu banyak. 1366 01:06:46,980 --> 01:06:51,060 Dan Anda secara efektif pergi dari semua 1 untuk mungkin semua 0, atau mungkin 1367 01:06:51,060 --> 01:06:54,260 hanya beberapa pola lain yang jelas, tergantung pada konteks, 1368 01:06:54,260 --> 01:06:56,342 dapat diartikan sebagai angka negatif. 1369 01:06:56,342 --> 01:06:59,300 Dan sehingga akan tampak I tertinggi dapat menghitung dalam program khusus ini 1370 01:06:59,300 --> 01:07:01,210 hanya sekitar 1 miliar. 1371 01:07:01,210 --> 01:07:02,760 Tapi ada solusi parsial sini. 1372 01:07:02,760 --> 01:07:03,480 Kamu tahu apa? 1373 01:07:03,480 --> 01:07:07,600 >> Mari saya berubah dari int ke yang lama. 1374 01:07:07,600 --> 01:07:10,633 Dan biarkan aku pergi ke depan di sini dan say-- aku akan memiliki 1375 01:07:10,633 --> 01:07:12,290 untuk mengubah ini ke sebuah panjang unsigned. 1376 01:07:12,290 --> 01:07:16,860 Atau, mari kita lihat, saya tidak pernah ingat diriku. 1377 01:07:16,860 --> 01:07:19,920 >> Mari kita pergi ke depan dan membuat melimpah. 1378 01:07:19,920 --> 01:07:21,860 Tidak, bukan itu, LLD, terima kasih. 1379 01:07:21,860 --> 01:07:23,430 Jadi kadang-kadang dentang dapat membantu. 1380 01:07:23,430 --> 01:07:27,550 Aku tidak ingat apa format specifier adalah untuk lama. 1381 01:07:27,550 --> 01:07:28,950 >> Tapi, memang, dentang mengatakan kepada saya. 1382 01:07:28,950 --> 01:07:31,570 Hijau adalah beberapa jenis yang baik, masih berarti Anda melakukan kesalahan. 1383 01:07:31,570 --> 01:07:33,190 Ini menebak bahwa saya berarti LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Jadi biarkan aku mengambil nasihat, panjang angka desimal yang panjang, simpan itu. 1385 01:07:38,750 --> 01:07:43,190 Dan biarkan aku jalankan itu, dot slash overflow, Enter. 1386 01:07:43,190 --> 01:07:45,020 Dan sekarang apa yang keren adalah ini. 1387 01:07:45,020 --> 01:07:49,140 >> Jika saya gulir kembali waktu, kita masih mulai menghitung pada saat yang sama place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Perhatikan, kita mendapatkan semua Cara hingga 1 miliar. 1390 01:07:54,860 --> 01:07:57,070 Tapi kemudian kita aman sampai ke 2 miliar. 1391 01:07:57,070 --> 01:08:01,300 >> Kemudian kita bisa 4 miliar, kemudian 8 miliar, 17 miliar. 1392 01:08:01,300 --> 01:08:03,340 Dan kita pergi lebih tinggi, dan lebih tinggi, dan lebih tinggi. 1393 01:08:03,340 --> 01:08:05,740 Akhirnya, ini, juga, istirahat. 1394 01:08:05,740 --> 01:08:09,350 >> Akhirnya, dengan lama, yang merupakan nilai 64-bit, tidak 1395 01:08:09,350 --> 01:08:13,660 nilai 32-bit, jika Anda menghitung terlalu tinggi, Anda membungkus 0. 1396 01:08:13,660 --> 01:08:16,410 Dan dalam hal ini, kita kebetulan berakhir dengan angka negatif. 1397 01:08:16,410 --> 01:08:17,550 >> Jadi ini adalah masalah. 1398 01:08:17,550 --> 01:08:20,439 Dan ternyata ini Masalahnya adalah tidak semua rahasia itu. 1399 01:08:20,439 --> 01:08:23,060 Meskipun saya sudah sengaja diinduksi dengan kesalahan-kesalahan ini, 1400 01:08:23,060 --> 01:08:26,149 ternyata kita lihat jenis semua di sekitar kita, atau setidaknya sebagian dari kita lakukan. 1401 01:08:26,149 --> 01:08:28,939 >> Jadi dalam Lego Star Wars, jika Anda pernah memainkan permainan, 1402 01:08:28,939 --> 01:08:33,830 ternyata Anda bisa pergi sekitar melanggar hal-hal di dunia LEGO, 1403 01:08:33,830 --> 01:08:36,640 dan mengumpulkan koin, dasarnya. 1404 01:08:36,640 --> 01:08:39,200 Dan jika Anda pernah memainkan ini cara permainan terlalu banyak waktu, 1405 01:08:39,200 --> 01:08:42,630 sebagai individu yang tidak disebutkan namanya ini di sini melakukan, jumlah 1406 01:08:42,630 --> 01:08:46,700 koin yang bisa Anda kumpulkan adalah, tampaknya, 4 miliar. 1407 01:08:46,700 --> 01:08:48,240 >> Sekarang, dengan itu benar-benar bulat. 1408 01:08:48,240 --> 01:08:50,239 Jadi LEGO berusaha menjaga hal-hal user friendly. 1409 01:08:50,239 --> 01:08:53,779 Mereka tidak melakukannya tepat 2 untuk 32 kekuatan, per pekan lalu. 1410 01:08:53,779 --> 01:08:55,310 Tapi 4 miliar alasan. 1411 01:08:55,310 --> 01:08:58,979 Tampaknya, berdasarkan informasi ini, bahwa LEGO, dan perusahaan yang 1412 01:08:58,979 --> 01:09:02,624 membuat perangkat lunak yang sebenarnya ini, memutuskan bahwa jumlah maksimum koin 1413 01:09:02,624 --> 01:09:04,540 pengguna dapat menumpuk adalah, memang, 4 miliar, 1414 01:09:04,540 --> 01:09:12,069 karena mereka memilih dalam kode mereka untuk menggunakan tidak lama, tampaknya, 1415 01:09:12,069 --> 01:09:16,140 tetapi hanya sebuah integer, unsigned integer, hanya bilangan bulat positif, yang 1416 01:09:16,140 --> 01:09:18,089 nilai maks kira-kira itu. 1417 01:09:18,089 --> 01:09:19,380 Nah, inilah satu lagi yang lucu. 1418 01:09:19,380 --> 01:09:23,500 Jadi di game Civilization, yang beberapa dari Anda mungkin akrab dengan 1419 01:09:23,500 --> 01:09:26,660 ternyata tahun yang lalu ada bug di mana game ini 1420 01:09:26,660 --> 01:09:28,750 jika Anda bermain peran Gandhi dalam permainan, 1421 01:09:28,750 --> 01:09:34,020 bukan dia yang sangat damai, sebaliknya adalah sangat, sangat 1422 01:09:34,020 --> 01:09:36,399 agresif, dalam beberapa keadaan. 1423 01:09:36,399 --> 01:09:40,529 Secara khusus, cara yang Peradaban karya adalah bahwa jika Anda, pemain, 1424 01:09:40,529 --> 01:09:44,680 mengadopsi demokrasi, Anda skor agresivitas mendapat 1425 01:09:44,680 --> 01:09:48,130 dikurangi oleh dua, jadi dikurangi dikurangi, dan kemudian dikurangi dikurangi. 1426 01:09:48,130 --> 01:09:50,569 >> Jadi Anda kurangi 2 dari iterasi yang sebenarnya Anda. 1427 01:09:50,569 --> 01:09:56,650 Sayangnya, jika iterasi Anda awalnya 1, dan kurangi 2 dari itu 1428 01:09:56,650 --> 01:09:59,050 setelah mengadopsi demokrasi sebagai Gandhi di sini mungkin 1429 01:09:59,050 --> 01:10:02,200 telah dilakukan, karena dia sangat passive-- 1 pada skala agresivitas. 1430 01:10:02,200 --> 01:10:04,830 Tetapi jika ia mengadopsi demokrasi, maka dia pergi dari 1 sampai negatif 1. 1431 01:10:04,830 --> 01:10:11,470 >> Sayangnya, mereka menggunakan nomor unsigned, 1432 01:10:11,470 --> 01:10:15,400 yang berarti mereka memperlakukan bahkan negatif nomor seolah-olah mereka positif. 1433 01:10:15,400 --> 01:10:19,780 Dan ternyata bahwa setara positif dari negatif 1, 1434 01:10:19,780 --> 01:10:23,480 dalam program komputer biasa, adalah 255. 1435 01:10:23,480 --> 01:10:27,250 Jadi jika Gandhi mengadopsi demokrasi, dan karena itu memiliki 1436 01:10:27,250 --> 01:10:32,470 skor agresivitas nya menurun, itu benar-benar gulungan sekitar 255 1437 01:10:32,470 --> 01:10:35,470 dan membuat dia yang paling karakter agresif dalam permainan. 1438 01:10:35,470 --> 01:10:36,930 Jadi Anda dapat Google pada ini. 1439 01:10:36,930 --> 01:10:39,380 Dan itu, memang, disengaja pemrograman bug, 1440 01:10:39,380 --> 01:10:43,010 tapi itu masuk cukup yang pengetahuan sejak. 1441 01:10:43,010 --> 01:10:44,360 >> Itu semua menyenangkan dan lucu. 1442 01:10:44,360 --> 01:10:47,760 Lebih menakutkan adalah ketika sebenarnya perangkat dunia nyata, dan tidak game, 1443 01:10:47,760 --> 01:10:48,820 memiliki bug yang sama. 1444 01:10:48,820 --> 01:10:54,500 Bahkan, setahun yang lalu sebuah artikel datang tahu tentang Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> Dan artikel pada awalnya Sekilas membaca misterius sedikit. 1446 01:10:56,850 --> 01:11:01,480 Tapi kata ini, perangkat lunak kerentanan di Boeing 1447 01:11:01,480 --> 01:11:04,790 baru 787 Dreamliner jet memiliki potensi untuk menyebabkan pilot 1448 01:11:04,790 --> 01:11:07,220 kehilangan kontrol pesawat, mungkin 1449 01:11:07,220 --> 01:11:11,750 pada pertengahan penerbangan, pejabat FAA Maskapai penerbangan memperingatkan baru-baru ini. 1450 01:11:11,750 --> 01:11:14,520 Itu tekad bahwa model 787 1451 01:11:14,520 --> 01:11:19,770 pesawat yang telah didukung terus menerus selama 248 hari 1452 01:11:19,770 --> 01:11:24,880 bisa kehilangan semua alternating current, AC, daya listrik karena generator 1453 01:11:24,880 --> 01:11:28,892 unit kontrol, GCUs, secara bersamaan masuk ke gagal safe mode. 1454 01:11:28,892 --> 01:11:29,850 Ini semacam kehilangan saya. 1455 01:11:29,850 --> 01:11:35,390 Tapi memo itu menyatakan, OK, sekarang saya punya itu, Kondisi itu disebabkan oleh perangkat lunak 1456 01:11:35,390 --> 01:11:38,590 melawan internal untuk kontrol Generator 1457 01:11:38,590 --> 01:11:44,860 unit yang akan meluap setelah 248 hari power secara berkelanjutan. 1458 01:11:44,860 --> 01:11:47,070 Kami mengeluarkan ini melihat untuk mencegah hilangnya 1459 01:11:47,070 --> 01:11:49,300 semua AC listrik listrik, yang dapat mengakibatkan 1460 01:11:49,300 --> 01:11:50,980 hilangnya kontrol pesawat. 1461 01:11:50,980 --> 01:11:55,380 >> Jadi, secara harfiah, ada beberapa integer, atau beberapa jenis data yang setara, 1462 01:11:55,380 --> 01:11:57,960 yang digunakan dalam perangkat lunak dalam sebuah pesawat yang sebenarnya 1463 01:11:57,960 --> 01:12:00,756 bahwa jika Anda tetap pesawat Anda cukup lama, yang tampaknya 1464 01:12:00,756 --> 01:12:03,880 dapat terjadi jika Anda hanya berjalan mereka terus-menerus dan tidak pernah mencabut 1465 01:12:03,880 --> 01:12:06,810 pesawat Anda, tampaknya, atau membiarkan baterai yang mati, 1466 01:12:06,810 --> 01:12:09,840 akhirnya akan menghitung, dan atas, dan atas, dan atas, dan atas, dan atas. 1467 01:12:09,840 --> 01:12:12,150 >> Dan, oleh alam, jumlah terbatas memori 1468 01:12:12,150 --> 01:12:15,880 akan meluap, bergulir kembali ke nol atau beberapa nilai negatif, 1469 01:12:15,880 --> 01:12:19,920 efek samping dari yang merupakan realitas menakutkan nyata 1470 01:12:19,920 --> 01:12:23,970 bahwa pesawat mungkin perlu untuk reboot, efektif, 1471 01:12:23,970 --> 01:12:27,290 atau mungkin jatuh, lebih buruk, seperti lalat. 1472 01:12:27,290 --> 01:12:29,230 Jadi jenis masalah masih dengan kami, 1473 01:12:29,230 --> 01:12:33,130 even-- ini adalah sebuah artikel 2015, semua lebih menakutkan 1474 01:12:33,130 --> 01:12:36,100 ketika Anda tidak selalu memahami, menghargai, atau mengantisipasi 1475 01:12:36,100 --> 01:12:38,640 orang-orang macam kesalahan. 1476 01:12:38,640 --> 01:12:42,030 >> Jadi ternyata ada satu lainnya hal yang buruk tentang representasi data. 1477 01:12:42,030 --> 01:12:47,080 Ternyata bahkan mengapung jenis cacat, karena mengapung, juga, 1478 01:12:47,080 --> 01:12:51,440 Aku diusulkan 32 bit, atau mungkin 64 jika Anda menggunakan ganda. 1479 01:12:51,440 --> 01:12:53,070 Tapi itu masih terbatas. 1480 01:12:53,070 --> 01:12:57,070 >> Dan menangkap adalah bahwa jika Anda bisa menempatkan jumlah tak terbatas nomor 1481 01:12:57,070 --> 01:12:59,460 setelah titik desimal, tidak ada cara Anda 1482 01:12:59,460 --> 01:13:02,690 dapat mewakili semua kemungkinan angka yang kita diajarkan 1483 01:13:02,690 --> 01:13:04,990 di kelas sekolah dapat eksis di dunia. 1484 01:13:04,990 --> 01:13:08,870 Sebuah komputer, pada dasarnya, harus memilih subset dari angka-angka 1485 01:13:08,870 --> 01:13:10,200 untuk mewakili akurat. 1486 01:13:10,200 --> 01:13:12,450 >> Sekarang, komputer dapat putaran mungkin sedikit, 1487 01:13:12,450 --> 01:13:17,900 dan dapat memungkinkan Anda untuk sekitar toko setiap nomor yang Anda mungkin mungkin ingin. 1488 01:13:17,900 --> 01:13:20,940 Tapi secara intuitif, jika Anda memiliki jumlah terbatas bit, 1489 01:13:20,940 --> 01:13:24,560 Anda hanya dapat mengubah urutan mereka dalam banyak cara yang terbatas. 1490 01:13:24,560 --> 01:13:26,570 Jadi Anda tidak bisa mungkin menggunakan jumlah terbatas 1491 01:13:26,570 --> 01:13:29,880 permutasi bit, pola nol dan satu, 1492 01:13:29,880 --> 01:13:32,940 untuk mewakili terbatas jumlah angka, 1493 01:13:32,940 --> 01:13:37,370 yang menunjukkan bahwa komputer mungkin sangat baik menjadi berbohong kepada kami kadang-kadang. 1494 01:13:37,370 --> 01:13:38,770 >> Bahkan, mari kita lakukan ini. 1495 01:13:38,770 --> 01:13:41,239 Biarkan aku kembali ke CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Biarkan aku pergi ke depan dan membuat program kecil 1497 01:13:43,030 --> 01:13:47,940 disebut ketidaktepatan, untuk menunjukkan bahwa komputer, memang, tidak tepat. 1498 01:13:47,940 --> 01:13:51,910 >> Dan biarkan aku pergi ke depan dan mulai dengan beberapa kode yang dari sebelumnya, 1499 01:13:51,910 --> 01:13:53,830 dan sekarang hanya melakukan hal berikut. 1500 01:13:53,830 --> 01:14:03,640 Biarkan aku pergi ke depan dan melakukan printf, persen f, backslash n, 1 dibagi dengan 10. 1501 01:14:03,640 --> 01:14:07,430 Dengan kata lain, mari kita menyelam lebih dalam untuk 1/10, seperti 1 dan dibagi dengan 10. 1502 01:14:07,430 --> 01:14:09,760 Tentunya, komputer dapat mewakili 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Jadi mari kita pergi ke depan dan membuat ketidaktepatan. 1504 01:14:13,620 --> 01:14:14,390 Ayo lihat. 1505 01:14:14,390 --> 01:14:16,210 Format menentukan tipe double. 1506 01:14:16,210 --> 01:14:18,160 Tetapi argumen memiliki tipe int. 1507 01:14:18,160 --> 01:14:19,040 Apa yang sedang terjadi? 1508 01:14:19,040 --> 01:14:21,970 >> Oh, menarik, jadi itu adalah pelajaran dari sebelumnya. 1509 01:14:21,970 --> 01:14:26,050 Saya mengatakan, hei, komputer menunjukkan saya pelampung dengan persen f. 1510 01:14:26,050 --> 01:14:28,200 Tapi aku memberikannya 2 int. 1511 01:14:28,200 --> 01:14:31,120 Jadi ternyata, saya bisa memperbaiki ini dalam beberapa cara. 1512 01:14:31,120 --> 01:14:38,430 >> Aku hanya bisa mengubah satu ke 1.0, dan 10 menjadi 10,0, yang akan, memang, 1513 01:14:38,430 --> 01:14:42,390 memiliki efek mengkonversi mereka ke floats-- masih mudah-mudahan 1514 01:14:42,390 --> 01:14:43,180 nomor yang sama. 1515 01:14:43,180 --> 01:14:45,880 Atau ternyata ada sesuatu kita akan melihat lagi sebelum lama. 1516 01:14:45,880 --> 01:14:47,170 Anda bisa cast angka. 1517 01:14:47,170 --> 01:14:49,880 >> Anda dapat, menggunakan tanda kurung ini ekspresi, Anda bisa mengatakan, 1518 01:14:49,880 --> 01:14:52,560 hey, komputer, mengambil ini 10, yang saya tahu adalah int. 1519 01:14:52,560 --> 01:14:54,660 Tapi mengobatinya, silahkan, seolah-olah itu pelampung. 1520 01:14:54,660 --> 01:14:56,680 Tapi ini terasa tidak perlu kompleks. 1521 01:14:56,680 --> 01:14:59,040 >> Untuk tujuan kita hari ini, mari kita secara harfiah 1522 01:14:59,040 --> 01:15:02,700 membuat mereka nilai floating point dengan titik desimal, seperti ini. 1523 01:15:02,700 --> 01:15:07,060 Biarkan aku pergi ke depan dan jalankan kembali, membuat ketidaktepatan, baik, dot slash 1524 01:15:07,060 --> 01:15:08,870 ketidaktepatan, masukkan. 1525 01:15:08,870 --> 01:15:10,990 OK, kita cari yang baik. 1526 01:15:10,990 --> 01:15:18,194 >> 1 dibagi dengan 10, menurut saya Mac sini, adalah, memang, 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Sekarang, saya diajarkan di sekolah dasar ada harus jumlah tak terbatas 0 ini. 1528 01:15:21,360 --> 01:15:23,151 Jadi mari kita setidaknya mencoba untuk melihat beberapa dari mereka. 1529 01:15:23,151 --> 01:15:26,770 Ternyata printf sedikit masih lebih menarik daripada kita telah menggunakan. 1530 01:15:26,770 --> 01:15:30,890 Ternyata Anda tidak harus menentukan hanya persen f, atau hanya persen i. 1531 01:15:30,890 --> 01:15:33,830 Anda benar-benar dapat menentukan beberapa pilihan kontrol di sini. 1532 01:15:33,830 --> 01:15:36,470 >> Secara khusus, saya akan mengatakan, hei, printf, 1533 01:15:36,470 --> 01:15:39,660 benar-benar menunjukkan 10 poin desimal. 1534 01:15:39,660 --> 01:15:40,820 Sehingga terlihat sedikit aneh. 1535 01:15:40,820 --> 01:15:42,845 Tapi Anda katakan persen, dot, berapa banyak angka 1536 01:15:42,845 --> 01:15:44,970 Anda ingin melihat setelah titik desimal, dan kemudian f 1537 01:15:44,970 --> 01:15:48,340 untuk datar, hanya karena itu apa yang dikatakan dokumentasi. 1538 01:15:48,340 --> 01:15:50,080 Biarkan aku pergi ke depan dan menyelamatkan. 1539 01:15:50,080 --> 01:15:52,460 >> Dan perhatikan juga, saya mendapatkan lelah mengetik ulang hal. 1540 01:15:52,460 --> 01:15:55,900 Jadi aku hanya menyiapkan dan panah ke bawah pada tombol saya di sini. 1541 01:15:55,900 --> 01:15:58,710 Dan jika saya tetap memukul sampai, Anda bisa melihat semua perintah 1542 01:15:58,710 --> 01:16:01,090 yang saya buat, atau salah dibuat. 1543 01:16:01,090 --> 01:16:04,630 >> Dan aku akan pergi ke depan sekarang dan tidak benar-benar menggunakan itu, rupanya. 1544 01:16:04,630 --> 01:16:11,416 Membuat ketidaktepatan, dot slash imprecision-- sehingga 1545 01:16:11,416 --> 01:16:13,290 apa yang saya diajarkan di sekolah dasar check out. 1546 01:16:13,290 --> 01:16:19,010 Bahkan jika saya mencetak ke 10 desimal menempatkannya, memang, adalah 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Tapi kau tahu apa? 1548 01:16:19,840 --> 01:16:21,150 >> Mari kita sedikit serakah. 1549 01:16:21,150 --> 01:16:23,990 Katakanlah, seperti, menunjukkan 55 menunjuk setelah desimal. 1550 01:16:23,990 --> 01:16:26,160 Mari kita benar-benar mengambil ini memprogram keluar untuk spin. 1551 01:16:26,160 --> 01:16:31,170 Mari saya remake dengan make ketidaktepatan, dot slash, ketidaktepatan. 1552 01:16:31,170 --> 01:16:32,390 >> Dan di sini kita pergi. 1553 01:16:32,390 --> 01:16:34,420 masa kecil Anda adalah bohong. 1554 01:16:34,420 --> 01:16:48,410 Rupanya, 1 dibagi dengan 10 memang 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Apa yang terjadi? 1556 01:16:49,740 --> 01:16:53,360 Nah, ternyata, jika Anda jenis melihat cukup jauh di dasar 1557 01:16:53,360 --> 01:16:55,950 representasi ini jumlah, itu benar-benar 1558 01:16:55,950 --> 01:17:00,400 tidak persis 1/10, atau 0,1 dan jumlah tak terbatas nol. 1559 01:17:00,400 --> 01:17:01,630 Sekarang, kenapa begitu? 1560 01:17:01,630 --> 01:17:06,250 >> Nah, meskipun ini adalah sederhana nomor untuk kita manusia, 1 dibagi dengan 10, 1561 01:17:06,250 --> 01:17:10,910 itu masih salah satu tak terhingga banyak angka yang kita bisa memikirkan. 1562 01:17:10,910 --> 01:17:14,490 Tapi komputer hanya dapat mewakili finitely banyak nomor jadi. 1563 01:17:14,490 --> 01:17:18,710 Dan, efektif, apa yang komputer menunjukkan kita adalah terdekatnya 1564 01:17:18,710 --> 01:17:22,940 pendekatan ke nomor kita ingin percaya adalah 1/10, 1565 01:17:22,940 --> 01:17:27,760 atau benar-benar 0,10000 tak terhingga. 1566 01:17:27,760 --> 01:17:30,425 >> Sebaliknya, meskipun, ini adalah sedekat itu bisa. 1567 01:17:30,425 --> 01:17:32,300 Dan, memang, jika Anda melihat di bawah kap mesin, 1568 01:17:32,300 --> 01:17:37,050 seperti kita di sini dengan melihat 55 digit setelah desimal, 1569 01:17:37,050 --> 01:17:39,990 kita benar-benar melihat kenyataan itu. 1570 01:17:39,990 --> 01:17:42,610 Sekarang sebagai samping, jika Anda sudah pernah melihat movie-- 1571 01:17:42,610 --> 01:17:45,780 sebagian besar dari Anda mungkin haven't-- tapi Superman 3 beberapa tahun yang lalu, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor dasarnya memanfaatkan ini kenyataan di perusahaannya untuk mencuri banyak 1573 01:17:49,500 --> 01:17:53,500 dari fraksi dan fraksi uang, karena company-- seperti yang saya ingat, 1574 01:17:53,500 --> 01:17:57,210 itu sudah while-- pada dasarnya membuang sesuatu yang tidak cocok 1575 01:17:57,210 --> 01:17:58,790 ke dalam gagasan sen. 1576 01:17:58,790 --> 01:18:01,480 >> Tetapi jika Anda menambahkan semua ini kecil, kecil, angka kecil lagi, 1577 01:18:01,480 --> 01:18:04,960 dan lagi, dan lagi, Anda bisa, seperti di kasusnya, membuat jumlah uang yang baik. 1578 01:18:04,960 --> 01:18:08,010 >> Itu ide yang sama merobek oleh lebih baru-baru ini, tapi masih sekarang lebih tua 1579 01:18:08,010 --> 01:18:10,500 Film, yang disebut Office Space, di mana orang-orang di film itu, 1580 01:18:10,500 --> 01:18:13,501 melakukan hal yang sama, mengacaukannya benar, berakhir dengan terlalu banyak 1581 01:18:13,501 --> 01:18:14,666 uang di rekening bank mereka. 1582 01:18:14,666 --> 01:18:15,800 Itu semua sangat mencurigakan. 1583 01:18:15,800 --> 01:18:19,290 Tetapi pada akhir hari, ketidaktepatan ada di sekitar kita. 1584 01:18:19,290 --> 01:18:22,240 >> Dan itu juga, bisa menakutkan kasus ini. 1585 01:18:22,240 --> 01:18:25,590 Ternyata Superman 3 dan Office Space samping, ada 1586 01:18:25,590 --> 01:18:28,460 dapat beberapa yang sangat nyata konsekuensi dunia 1587 01:18:28,460 --> 01:18:32,290 dari realitas tidak tepat representasi data 1588 01:18:32,290 --> 01:18:34,770 bahkan kita manusia untuk hari ini belum tentu 1589 01:18:34,770 --> 01:18:38,230 memahami serta kita harus, atau mengingat sesering kita harus. 1590 01:18:38,230 --> 01:18:42,950 Dan, memang, klip berikut ini dari melihat beberapa dunia yang sangat nyata 1591 01:18:42,950 --> 01:18:47,730 konsekuensi dari apa yang terjadi jika Anda tidak menghargai ketidaktepatan yang 1592 01:18:47,730 --> 01:18:50,065 dapat terjadi dalam representasi angka. 1593 01:18:50,065 --> 01:18:51,300 >> [VIDEO PEMUTARAN] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, Kita semua datang untuk menerima masalah yang sering frustasi yang 1595 01:18:55,620 --> 01:19:00,310 pergi dengan mengujinya-- bug, virus, dan gangguan perangkat lunak, 1596 01:19:00,310 --> 01:19:03,130 untuk harga kecil untuk membayar untuk kenyamanan. 1597 01:19:03,130 --> 01:19:07,800 Namun dalam teknologi tinggi dan kecepatan tinggi militer dan program ruang aplikasi, 1598 01:19:07,800 --> 01:19:12,800 masalah terkecil bisa diperbesar menjadi bencana. 1599 01:19:12,800 --> 01:19:18,900 >> Pada 4 Juni 1996, para ilmuwan disiapkan untuk meluncurkan berawak Ariane 5 roket. 1600 01:19:18,900 --> 01:19:21,220 Hal itu membawa ilmiah satelit dirancang 1601 01:19:21,220 --> 01:19:24,600 untuk menetapkan secara tepat bagaimana berinteraksi medan magnet bumi 1602 01:19:24,600 --> 01:19:27,410 dengan angin surya. 1603 01:19:27,410 --> 01:19:30,800 Roket ini dibangun untuk European Space Agency, 1604 01:19:30,800 --> 01:19:34,370 dan lepas landas dari fasilitas yang di pantai Guyana Prancis. 1605 01:19:34,370 --> 01:19:37,540 >> -Pada Sekitar 37 detik ke penerbangan, mereka pertama kali 1606 01:19:37,540 --> 01:19:39,270 melihat sesuatu yang tidak beres. 1607 01:19:39,270 --> 01:19:42,250 Nozel yang berputar di cara mereka benar-benar tidak seharusnya. 1608 01:19:42,250 --> 01:19:46,580 Sekitar 40 detik ke penerbangan, jelas, kendaraan itu dalam kesulitan. 1609 01:19:46,580 --> 01:19:48,850 >> Dan saat itulah mereka membuat keputusan untuk menghancurkannya. 1610 01:19:48,850 --> 01:19:52,780 Kisaran petugas keamanan, dengan nyali yang luar biasa, menekan tombol, 1611 01:19:52,780 --> 01:19:58,150 meledakkan roket, sebelum bisa menjadi bahaya bagi keselamatan publik. 1612 01:19:58,150 --> 01:20:01,060 >> -ini Adalah gadis yang pelayaran dari Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 Dan kehancuran mengambil menempatkan karena cacat 1614 01:20:03,960 --> 01:20:05,822 tertanam dalam perangkat lunak roket. 1615 01:20:05,822 --> 01:20:08,280 -Masalah pada Ariane adalah bahwa ada nomor yang 1616 01:20:08,280 --> 01:20:10,600 diperlukan 64 bit untuk mengekspresikan. 1617 01:20:10,600 --> 01:20:13,590 Dan mereka ingin mengkonversi ke nomor 16-bit. 1618 01:20:13,590 --> 01:20:15,610 Mereka beranggapan bahwa Jumlah itu tidak akan 1619 01:20:15,610 --> 01:20:20,980 menjadi sangat besar, yang sebagian besar dari mereka digit di sejumlah 64-bit yang nol. 1620 01:20:20,980 --> 01:20:22,440 Mereka salah. 1621 01:20:22,440 --> 01:20:25,060 >> -The Ketidakmampuan satu program perangkat lunak untuk menerima 1622 01:20:25,060 --> 01:20:29,510 jenis nomor yang dihasilkan oleh lain adalah akar dari kegagalan. 1623 01:20:29,510 --> 01:20:34,350 pengembangan perangkat lunak telah menjadi sangat mahal bagian dari teknologi baru. 1624 01:20:34,350 --> 01:20:38,140 Roket Ariane telah sangat sukses, begitu banyak perangkat lunak 1625 01:20:38,140 --> 01:20:41,550 diciptakan untuk itu juga digunakan dalam Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -Masalah dasar adalah bahwa Ariane 5 lebih cepat, dipercepat lebih cepat. 1627 01:20:47,940 --> 01:20:51,450 Dan perangkat lunak belum menyumbang untuk itu. 1628 01:20:51,450 --> 01:20:55,060 >> -The Penghancuran roket adalah bencana keuangan yang besar, 1629 01:20:55,060 --> 01:20:58,790 semua karena kesalahan software menit. 1630 01:20:58,790 --> 01:21:01,210 Tapi ini bukan yang pertama masalah konversi data waktu 1631 01:21:01,210 --> 01:21:04,820 telah melanda teknologi roket modern. 1632 01:21:04,820 --> 01:21:08,050 >> -Dalam 1991, dengan awal Perang Teluk pertama, 1633 01:21:08,050 --> 01:21:10,570 Patriot Missile mengalami serupa 1634 01:21:10,570 --> 01:21:12,800 dari masalah nomor konversi. 1635 01:21:12,800 --> 01:21:16,090 Dan sebagai hasilnya, 28 orang, 28 tentara Amerika, 1636 01:21:16,090 --> 01:21:19,080 tewas, dan sekitar 100 lainnya luka-luka, 1637 01:21:19,080 --> 01:21:22,780 ketika Patriot, yang seharusnya untuk melindungi terhadap Scud masuk, 1638 01:21:22,780 --> 01:21:25,830 gagal menembakkan rudal. 1639 01:21:25,830 --> 01:21:31,670 >> -Ketika Irak menginvasi Kuwait, dan Amerika diluncurkan Desert Storm di awal 1991, 1640 01:21:31,670 --> 01:21:35,780 baterai Patriot Missile dikerahkan untuk melindungi Arab Saudi dan Israel 1641 01:21:35,780 --> 01:21:39,230 dari serangan rudal Scud Irak. 1642 01:21:39,230 --> 01:21:43,810 The Patriot adalah jarak menengah AS permukaan ke sistem udara, diproduksi 1643 01:21:43,810 --> 01:21:45,770 oleh perusahaan Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -The Ukuran pencegat Patriot itu sendiri panjang sekitar kira-kira 20 kaki. 1645 01:21:52,340 --> 01:21:55,230 Dan beratnya sekitar 2.000 pound. 1646 01:21:55,230 --> 01:21:59,320 Dan itu membawa hulu ledak sekitar, Saya pikir itu sekitar 150 pound. 1647 01:21:59,320 --> 01:22:03,930 Dan hulu ledak itu sendiri ledak tinggi, yang 1648 01:22:03,930 --> 01:22:07,330 memiliki fragmen sekitarnya. 1649 01:22:07,330 --> 01:22:11,680 Casing hulu ledak adalah dirancang untuk bertindak seperti gotri. 1650 01:22:11,680 --> 01:22:14,110 >> rudal -The dilakukan empat per kontainer, 1651 01:22:14,110 --> 01:22:17,130 dan diangkut oleh semi trailer. 1652 01:22:17,130 --> 01:22:24,930 >> -Sistem Patriot anti-rudal kembali setidaknya 20 tahun sekarang. 1653 01:22:24,930 --> 01:22:28,420 Ini pada awalnya dirancang sebagai rudal pertahanan udara 1654 01:22:28,420 --> 01:22:30,720 untuk menembak jatuh pesawat musuh. 1655 01:22:30,720 --> 01:22:34,500 Dalam Perang Teluk pertama, ketika perang itu datang, 1656 01:22:34,500 --> 01:22:39,745 Tentara ingin menggunakannya untuk menembak jatuh rudal Scud, bukan pesawat terbang. 1657 01:22:39,745 --> 01:22:43,620 >> Angkatan Udara Irak tidak begitu banyak masalah. 1658 01:22:43,620 --> 01:22:46,670 Tapi Angkatan Darat khawatir tentang Scud. 1659 01:22:46,670 --> 01:22:50,170 Dan mereka mencoba untuk upgrade Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Musuh rudal bepergian di mach 5 1661 01:22:52,800 --> 01:22:55,830 itu akan cukup menantang. 1662 01:22:55,830 --> 01:22:58,490 Tetapi ketika Patriot dilarikan ke layanan, 1663 01:22:58,490 --> 01:23:02,860 Angkatan Darat tidak menyadari sebuah modifikasi Irak yang membuat 1664 01:23:02,860 --> 01:23:05,930 Scud mereka hampir mustahil untuk memukul. 1665 01:23:05,930 --> 01:23:10,740 >> -Apa Yang terjadi adalah Scud yang yang datang tidak stabil. 1666 01:23:10,740 --> 01:23:11,692 Mereka bergoyang-goyang. 1667 01:23:11,692 --> 01:23:14,910 Alasan untuk ini adalah Irak, dalam rangka 1668 01:23:14,910 --> 01:23:18,280 untuk mendapatkan 600 kilometer dari 300 kilometer 1669 01:23:18,280 --> 01:23:21,700 rudal jarak, mengambil berat badan keluar dari hulu ledak depan. 1670 01:23:21,700 --> 01:23:23,390 Mereka membuat hulu ledak ringan. 1671 01:23:23,390 --> 01:23:27,330 >> Jadi sekarang Patriot adalah mencoba untuk datang di Scud. 1672 01:23:27,330 --> 01:23:30,230 Dan sebagian besar waktu, mayoritas waktu, 1673 01:23:30,230 --> 01:23:32,940 itu hanya akan terbang oleh Scud. 1674 01:23:32,940 --> 01:23:37,260 Setelah operator sistem Patriot menyadari Patriot terjawab target, 1675 01:23:37,260 --> 01:23:41,690 mereka meledakkan hulu ledak Patriot untuk menghindari kemungkinan korban jika 1676 01:23:41,690 --> 01:23:44,570 diizinkan untuk jatuh ke tanah. 1677 01:23:44,570 --> 01:23:48,790 >> -Itu Adalah apa yang kebanyakan orang melihat, mereka bola api besar di langit, 1678 01:23:48,790 --> 01:23:54,550 dan disalahpahami sebagai penyadapan hulu ledak Scud. 1679 01:23:54,550 --> 01:23:56,630 >> -Meskipun Di malam hari langit, Patriots muncul 1680 01:23:56,630 --> 01:24:00,370 menjadi sukses menghancurkan Scud, di Dhahran, 1681 01:24:00,370 --> 01:24:03,360 mungkin ada kesalahan tentang kinerjanya. 1682 01:24:03,360 --> 01:24:07,970 Ada, sistem radar Patriot kehilangan jejak dari Scud masuk, 1683 01:24:07,970 --> 01:24:10,721 dan tidak pernah diluncurkan karena untuk cacat software. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Itu adalah Israel yang pertama kali ditemukan bahwa semakin lama sistem itu pada, 1686 01:24:18,940 --> 01:24:22,690 semakin besar waktu perbedaan menjadi, karena jam tertanam 1687 01:24:22,690 --> 01:24:24,810 di komputer sistem. 1688 01:24:24,810 --> 01:24:28,210 >> -Tentang Dua minggu sebelum tragedi di Dhahran, 1689 01:24:28,210 --> 01:24:30,770 Israel dilaporkan Departemen Pertahanan 1690 01:24:30,770 --> 01:24:32,590 bahwa sistem itu kehilangan waktu. 1691 01:24:32,590 --> 01:24:35,360 Setelah sekitar delapan jam atau berjalan, mereka melihat bahwa sistem 1692 01:24:35,360 --> 01:24:37,720 itu menjadi terasa kurang akurat. 1693 01:24:37,720 --> 01:24:41,900 Departemen Pertahanan menanggapi dengan memberitahu semua baterai Patriot 1694 01:24:41,900 --> 01:24:44,950 untuk tidak meninggalkan sistem untuk waktu yang lama. 1695 01:24:44,950 --> 01:24:49,160 Mereka tidak pernah mengatakan apa lama was-- delapan jam, 10 jam, 1.000 jam. 1696 01:24:49,160 --> 01:24:51,360 Tak ada yang tahu. 1697 01:24:51,360 --> 01:24:53,380 >> -The Baterai Patriot ditempatkan di barak 1698 01:24:53,380 --> 01:24:58,350 di Dhahran dan cacat internal Jam sudah di lebih dari 100 jam 1699 01:24:58,350 --> 01:25:01,670 pada malam 25 Februari. 1700 01:25:01,670 --> 01:25:05,917 >> -itu Dilacak waktu dengan akurasi dari sekitar sepersepuluh detik. 1701 01:25:05,917 --> 01:25:08,000 Sekarang, sepersepuluh detik adalah angka yang menarik, 1702 01:25:08,000 --> 01:25:11,920 karena tidak bisa diungkapkan dalam biner persis, yang 1703 01:25:11,920 --> 01:25:16,820 berarti itu tidak bisa diungkapkan dengan tepat di setiap komputer digital modern. 1704 01:25:16,820 --> 01:25:18,540 Sulit untuk percaya. 1705 01:25:18,540 --> 01:25:21,210 >> Tetapi menggunakan ini sebagai contoh. 1706 01:25:21,210 --> 01:25:23,540 Mari kita nomor satu ketiga. 1707 01:25:23,540 --> 01:25:27,350 Sepertiga tidak bisa dinyatakan dalam desimal persis. 1708 01:25:27,350 --> 01:25:32,080 Sepertiga adalah 0,333 berlangsung selama tak terhingga. 1709 01:25:32,080 --> 01:25:36,480 >> Tidak ada cara untuk melakukan itu dengan akurasi mutlak dalam desimal. 1710 01:25:36,480 --> 01:25:39,560 Itulah jenis masalah yang terjadi di Patriot. 1711 01:25:39,560 --> 01:25:44,100 Semakin lama sistem berlari, yang buruk kesalahan waktu menjadi. 1712 01:25:44,100 --> 01:25:48,890 >> -Setelah 100 jam operasi, kesalahan dalam waktu hanya sekitar sepertiga 1713 01:25:48,890 --> 01:25:50,600 detik. 1714 01:25:50,600 --> 01:25:54,210 Tapi dalam hal menargetkan rudal bepergian di mach 5, 1715 01:25:54,210 --> 01:25:58,710 itu mengakibatkan pelacakan sebuah error lebih dari 600 meter. 1716 01:25:58,710 --> 01:26:02,120 Ini akan menjadi kesalahan fatal bagi para prajurit pada apa 1717 01:26:02,120 --> 01:26:08,940 terjadi adalah peluncuran Scud itu terdeteksi oleh satelit Peringatan dini 1718 01:26:08,940 --> 01:26:12,860 dan mereka tahu bahwa Scud itu datang ke arah umum mereka. 1719 01:26:12,860 --> 01:26:15,320 Mereka tidak tahu di mana itu berasal. 1720 01:26:15,320 --> 01:26:18,250 >> -itu Sekarang hingga radar komponen dari sistem Patriot 1721 01:26:18,250 --> 01:26:23,190 membela Dhahran untuk mencari dan menjaga melacak rudal musuh masuk. 1722 01:26:23,190 --> 01:26:24,609 >> radar -The sangat cerdas. 1723 01:26:24,609 --> 01:26:26,650 Ini benar-benar akan melacak posisi Scud, 1724 01:26:26,650 --> 01:26:30,350 dan kemudian memprediksi mana mungkin akan menjadi waktu berikutnya radar mengirim 1725 01:26:30,350 --> 01:26:31,420 sebuah pulsa keluar. 1726 01:26:31,420 --> 01:26:33,110 Yang disebut gerbang jangkauan. 1727 01:26:33,110 --> 01:26:37,660 >> -Lalu, Setelah Patriot memutuskan waktu yang cukup memiliki 1728 01:26:37,660 --> 01:26:42,450 berlalu untuk kembali dan memeriksa berikutnya lokasi untuk objek yang terdeteksi ini, 1729 01:26:42,450 --> 01:26:43,600 itu akan kembali. 1730 01:26:43,600 --> 01:26:48,650 Jadi ketika kembali ke salah tempat, kemudian melihat ada objek. 1731 01:26:48,650 --> 01:26:52,160 Dan memutuskan bahwa tidak ada objek, itu adalah deteksi palsu, 1732 01:26:52,160 --> 01:26:53,930 dan tetes trek. 1733 01:26:53,930 --> 01:26:57,030 >> -The Masuk Scud menghilang dari layar radar. 1734 01:26:57,030 --> 01:27:00,260 Dan beberapa detik kemudian, itu terhempas ke barak. 1735 01:27:00,260 --> 01:27:06,150 Scud menewaskan 28, dan yang terakhir satu dipecat selama Perang Teluk pertama. 1736 01:27:06,150 --> 01:27:11,960 >> Tragisnya, perangkat lunak diperbarui tiba di Dhahran hari berikutnya. 1737 01:27:11,960 --> 01:27:14,930 Cacat software memiliki pernah tetap, penutupan 1738 01:27:14,930 --> 01:27:19,806 salah satu bab dalam bermasalah sejarah rudal Patriot. 1739 01:27:19,806 --> 01:27:20,729 >> [VIDEO PEMUTARAN] 1740 01:27:20,729 --> 01:27:23,520 DAVID J. Malan: Jadi ini semua untuk mengatakan bahwa masalah ini overflow 1741 01:27:23,520 --> 01:27:25,860 dan ketidaktepatan yang terlalu nyata. 1742 01:27:25,860 --> 01:27:26,920 Jadi bagaimana kita sampai di sini? 1743 01:27:26,920 --> 01:27:28,895 Kami mulai dengan hanya berbicara tentang printf. 1744 01:27:28,895 --> 01:27:31,270 Sekali lagi, fungsi ini yang mencetak sesuatu ke layar, 1745 01:27:31,270 --> 01:27:33,450 dan kami memperkenalkan sesudahnya beberapa fungsi lain 1746 01:27:33,450 --> 01:27:34,945 dari apa yang disebut perpustakaan CS50 ini. 1747 01:27:34,945 --> 01:27:36,910 Dan kami akan terus melihat ini pada waktunya. 1748 01:27:36,910 --> 01:27:40,760 Dan kita, khususnya, digunakan get string, dan int, dan sekarang juga mendapatkan float, 1749 01:27:40,760 --> 01:27:44,410 dan yang lain masih akan kita temui dan menggunakan diri sendiri sebelum lama. 1750 01:27:44,410 --> 01:27:47,220 >> Tapi pada kesempatan, memiliki kita sudah melihat kebutuhan 1751 01:27:47,220 --> 01:27:50,520 untuk menyimpan apa tangan fungsi-fungsi kembali? 1752 01:27:50,520 --> 01:27:52,920 Mereka menyerahkan kami kembali string, atau int, atau pelampung. 1753 01:27:52,920 --> 01:27:56,070 Dan kadang-kadang kita perlu menempatkan bahwa string, atau int, atau float, di suatu tempat. 1754 01:27:56,070 --> 01:28:00,100 >> Dan untuk menyimpan hal-hal, ingat hanya seperti di Scratch, kita memiliki variabel. 1755 01:28:00,100 --> 01:28:03,260 Tapi tidak seperti di Scratch, di C kita memiliki jenis yang sebenarnya 1756 01:28:03,260 --> 01:28:05,530 data variables-- jenis, lebih generally-- 1757 01:28:05,530 --> 01:28:08,640 di antara mereka, string, int, sebuah mengapung, dan ini lain masih. 1758 01:28:08,640 --> 01:28:12,321 >> Dan ketika kita mendeklarasikan variabel di C, kita harus mendeklarasikan tipe data kami. 1759 01:28:12,321 --> 01:28:14,820 Ini bukan sesuatu yang kita akan harus lakukan nanti di semester 1760 01:28:14,820 --> 01:28:16,810 seperti yang kita transisi ke bahasa lain. 1761 01:28:16,810 --> 01:28:19,610 Tapi untuk saat ini, kita perlu untuk a priori di muka, 1762 01:28:19,610 --> 01:28:24,370 menjelaskan ke komputer jenis variabel kita ingin memberi kita. 1763 01:28:24,370 --> 01:28:27,290 >> Sekarang, sementara itu, untuk mencetak orang-orang macam jenis data, 1764 01:28:27,290 --> 01:28:29,570 kita harus memberitahu printf apa yang diharapkan. 1765 01:28:29,570 --> 01:28:32,450 Dan kami melihat persen s untuk string, dan persen saya untuk bilangan bulat, 1766 01:28:32,450 --> 01:28:33,790 dan beberapa orang lainnya sudah. 1767 01:28:33,790 --> 01:28:37,237 Dan orang-orang yang hanya persyaratan untuk presentasi visual 1768 01:28:37,237 --> 01:28:38,070 informasi tersebut. 1769 01:28:38,070 --> 01:28:42,080 >> Dan masing-masing benar-benar dapat parametrized atau tweak dalam beberapa cara, 1770 01:28:42,080 --> 01:28:45,370 jika Anda ingin lebih lanjut kontrol jenis output yang Anda dapatkan. 1771 01:28:45,370 --> 01:28:49,604 Dan, pada kenyataannya, ternyata tidak hanya ada backslash n untuk baris baru. 1772 01:28:49,604 --> 01:28:52,520 Ada sesuatu yang lain yang disebut backslash r untuk carriage return, yang 1773 01:28:52,520 --> 01:28:54,360 lebih mirip dengan sebuah mesin tik sekolah tua, 1774 01:28:54,360 --> 01:28:57,690 dan juga Windows yang digunakan selama bertahun-tahun. 1775 01:28:57,690 --> 01:28:59,690 >> Ada backslash t untuk tab. 1776 01:28:59,690 --> 01:29:03,170 Ternyata, bahwa jika Anda ingin kutipan ganda dalam string, 1777 01:29:03,170 --> 01:29:05,000 ingat bahwa kita telah menggunakan ganda double quote 1778 01:29:05,000 --> 01:29:07,900 kutipan di sebelah kiri dan kanan berakhir string kami sejauh ini. 1779 01:29:07,900 --> 01:29:09,420 Yang akan tampak membingungkan hal. 1780 01:29:09,420 --> 01:29:12,503 >> Jika Anda ingin menempatkan kutipan ganda di tengah string-- dan, memang, 1781 01:29:12,503 --> 01:29:13,670 itu membingungkan untuk melihat. 1782 01:29:13,670 --> 01:29:17,120 Dan sehingga Anda harus melarikan diri, sehingga untuk berbicara, kutipan ganda dengan sesuatu 1783 01:29:17,120 --> 01:29:18,860 seperti, secara harfiah, backslash kutip ganda. 1784 01:29:18,860 --> 01:29:20,230 Dan ada beberapa lainnya masih. 1785 01:29:20,230 --> 01:29:24,540 Dan kita akan melihat lebih banyak dari mereka dalam penggunaan aktual sebelum lama. 1786 01:29:24,540 --> 01:29:27,930 >> Jadi mari kita sekarang transisi dari data, dan representasi, 1787 01:29:27,930 --> 01:29:30,820 dan operator aritmatika, semua yang memberi kami beberapa bangunan 1788 01:29:30,820 --> 01:29:32,070 blok dengan yang untuk bermain. 1789 01:29:32,070 --> 01:29:34,481 Tapi sekarang mari kita benar-benar memberikan kami sisa kosa kata 1790 01:29:34,481 --> 01:29:36,230 bahwa kita sudah memiliki minggu lalu dengan Scratch 1791 01:29:36,230 --> 01:29:39,350 dengan melihat beberapa lainnya konstruksi di C-- tidak semua dari mereka. 1792 01:29:39,350 --> 01:29:41,680 Tetapi ide-ide kita sekitar untuk melihat benar-benar hanya 1793 01:29:41,680 --> 01:29:45,610 untuk menekankan terjemahan dari satu bahasa, Scratch, ke yang lain, C. 1794 01:29:45,610 --> 01:29:48,470 >> Dan dari waktu ke waktu, kami akan mengambil alat yang lebih untuk toolkit kami, 1795 01:29:48,470 --> 01:29:49,820 sehingga untuk berbicara, sintaksis. 1796 01:29:49,820 --> 01:29:54,190 Dan, memang, Anda akan melihat bahwa ide-ide sekarang lebih akrab dari minggu lalu. 1797 01:29:54,190 --> 01:29:55,200 Jadi mari kita lakukan ini. 1798 01:29:55,200 --> 01:29:58,870 >> Mari kita pergi ke depan dan menyiapkan program yang benar-benar menggunakan beberapa ekspresi, 1799 01:29:58,870 --> 01:30:00,720 ekspresi Boolean. 1800 01:30:00,720 --> 01:30:02,810 Biarkan aku pergi ke depan di sini dan membuat file baru. 1801 01:30:02,810 --> 01:30:06,090 Saya akan menelepon condition.c ini. 1802 01:30:06,090 --> 01:30:09,350 >> Biarkan aku pergi ke depan dan termasuk perpustakaan CS50. 1803 01:30:09,350 --> 01:30:12,640 Dan biarkan aku pergi ke depan dan mencakup standar io.h untuk fungsi kami, 1804 01:30:12,640 --> 01:30:14,690 dan printf, dan lebih masing-masing. 1805 01:30:14,690 --> 01:30:18,900 Biarkan saya memberi diri bahwa boilerplate dari void main int, yang penjelasan kami akan 1806 01:30:18,900 --> 01:30:20,360 kembali ke di masa depan. 1807 01:30:20,360 --> 01:30:23,820 >> Sekarang biarkan aku pergi ke depan dan memberikan diriku int via get int. 1808 01:30:23,820 --> 01:30:25,970 Maka biarkan aku pergi ke depan dan melakukan hal ini. 1809 01:30:25,970 --> 01:30:30,150 Saya ingin mengatakan jika saya adalah less-- mari membedakan antara positif, negatif, 1810 01:30:30,150 --> 01:30:31,260 atau nilai nol. 1811 01:30:31,260 --> 01:30:36,630 >> Jadi jika saya kurang dari nol, biarkan aku hanya memiliki program ini hanya mengatakan, 1812 01:30:36,630 --> 01:30:42,370 negatif, backslash n, lain jika saya lebih besar dari nol. 1813 01:30:42,370 --> 01:30:47,030 Sekarang aku, tentu saja, akan mengatakan printf positif, backslash n. 1814 01:30:47,030 --> 01:30:50,690 Dan kemudian lain if-- aku bisa melakukan ini. 1815 01:30:50,690 --> 01:30:53,410 >> Saya bisa lakukan jika saya sama dengan 0. 1816 01:30:53,410 --> 01:30:55,840 Tapi aku akan membuat di Setidaknya satu kesalahan sudah. 1817 01:30:55,840 --> 01:30:59,480 Ingat bahwa tanda sama adalah tidak sama, karena kita manusia tahu itu. 1818 01:30:59,480 --> 01:31:01,010 >> Tapi itu operator penugasan. 1819 01:31:01,010 --> 01:31:05,640 Dan kami tidak ingin mengambil 0 pada kanan dan meletakkannya di i di sebelah kiri. 1820 01:31:05,640 --> 01:31:11,810 Jadi untuk menghindari kebingungan ini, atau mungkin penyalahgunaan tanda sama dengan, 1821 01:31:11,810 --> 01:31:14,740 manusia memutuskan beberapa tahun yang lalu bahwa dalam banyak bahasa pemrograman 1822 01:31:14,740 --> 01:31:18,000 ketika Anda ingin memeriksa kesetaraan antara kiri dan kanan, 1823 01:31:18,000 --> 01:31:19,635 Anda benar-benar menggunakan sama sederajat. 1824 01:31:19,635 --> 01:31:21,010 Jadi anda menekan tanda sama dengan dua kali. 1825 01:31:21,010 --> 01:31:25,600 Bila Anda ingin menetapkan dari kanan ke kiri, Anda menggunakan tanda sama tunggal. 1826 01:31:25,600 --> 01:31:29,360 Sehingga kita bisa melakukan ini-- lain jika saya sama sama dengan nol. 1827 01:31:29,360 --> 01:31:31,710 >> Saya kemudian bisa pergi dan membuka kurung kurawal saya, 1828 01:31:31,710 --> 01:31:36,087 dan mengatakan, printf 0, backslash n, dilakukan. 1829 01:31:36,087 --> 01:31:38,170 Tapi ingat bagaimana garpu di jalan dapat bekerja. 1830 01:31:38,170 --> 01:31:39,836 Dan, benar-benar, hanya berpikir tentang logika. 1831 01:31:39,836 --> 01:31:41,510 i adalah nomor. 1832 01:31:41,510 --> 01:31:43,320 Ini integer, khususnya. 1833 01:31:43,320 --> 01:31:48,600 Dan itu berarti itu akan menjadi kurang dari 0, atau lebih besar dari 0, atau 0. 1834 01:31:48,600 --> 01:31:51,600 Jadi ada semacam ini default kasus tersirat. 1835 01:31:51,600 --> 01:31:54,920 >> Dan jadi kami bisa, sama seperti Scratch, membuang dengan lain jika, 1836 01:31:54,920 --> 01:31:55,747 dan hanya mengatakan lain. 1837 01:31:55,747 --> 01:31:57,830 Logikanya, jika Anda programmer tahu hanya ada 1838 01:31:57,830 --> 01:32:01,635 tiga ember ke mana Skenario dapat fall-- pertama, 1839 01:32:01,635 --> 01:32:03,510 kedua, atau ketiga dalam hal ini case-- tidak 1840 01:32:03,510 --> 01:32:07,100 repot-repot menambahkan presisi tambahan dan tambahan logika ada. 1841 01:32:07,100 --> 01:32:09,690 Langsung saja dengan kasus default di sini dari yang lain. 1842 01:32:09,690 --> 01:32:11,950 >> Sekarang, mari kita pergi ke depan setelah menyimpan ini, membuat 1843 01:32:11,950 --> 01:32:15,760 kondisi dot slash conditions-- tidak antarmuka pengguna yang luar biasa, 1844 01:32:15,760 --> 01:32:18,914 karena aku tidak mendorong pengguna, seperti yang saya sebutkan sebelumnya. 1845 01:32:18,914 --> 01:32:19,580 Tapi itu baik-baik saja. 1846 01:32:19,580 --> 01:32:20,454 Kami akan tetap sederhana. 1847 01:32:20,454 --> 01:32:21,890 Mari kita coba nomor 42. 1848 01:32:21,890 --> 01:32:23,240 Dan itu positif. 1849 01:32:23,240 --> 01:32:26,120 Mari kita coba nomor negatif 42, negatif. 1850 01:32:26,120 --> 01:32:28,244 >> Mari kita coba nilai 0. 1851 01:32:28,244 --> 01:32:29,160 Dan, memang, ia bekerja. 1852 01:32:29,160 --> 01:32:33,900 Sekarang, Anda akan melihat dengan masalah sebelum panjang, pengujian hal tiga kali, 1853 01:32:33,900 --> 01:32:34,980 mungkin tidak cukup. 1854 01:32:34,980 --> 01:32:37,438 Anda mungkin ingin menguji beberapa angka yang lebih besar, beberapa lebih kecil 1855 01:32:37,438 --> 01:32:40,520 angka, beberapa kasus sudut, sebagai kami akan datang untuk menggambarkan mereka. 1856 01:32:40,520 --> 01:32:42,500 >> Tetapi untuk sekarang, ini adalah program yang cukup sederhana. 1857 01:32:42,500 --> 01:32:45,160 Dan aku cukup yakin, secara logis, yang jatuh ke dalam tiga kasus. 1858 01:32:45,160 --> 01:32:49,360 Dan, memang, meskipun kami hanya difokuskan pada kerugian potensial 1859 01:32:49,360 --> 01:32:53,480 ketidaktepatan dan melimpah, di realitas di mana banyak masalah CS50 ini, 1860 01:32:53,480 --> 01:32:56,000 kita tidak akan khawatir tentang, sepanjang waktu, 1861 01:32:56,000 --> 01:32:59,050 isu-isu overflow dan ketidaktepatan, karena, pada kenyataannya, di C, 1862 01:32:59,050 --> 01:33:01,889 itu sebenarnya tidak semua yang mudah untuk menghindari hal-hal. 1863 01:33:01,889 --> 01:33:04,180 Jika Anda ingin menghitung lebih besar, dan lebih besar, dan lebih besar, 1864 01:33:04,180 --> 01:33:07,510 ternyata ada teknik Anda dapat digunakan, sering melibatkan hal-hal yang disebut 1865 01:33:07,510 --> 01:33:11,240 perpustakaan, koleksi kode, yang orang lain menulis bahwa Anda dapat menggunakan, 1866 01:33:11,240 --> 01:33:13,910 dan bahasa lainnya seperti Java dan lain-lain, sebenarnya 1867 01:33:13,910 --> 01:33:15,800 membuatnya jauh lebih mudah untuk menghitung lebih tinggi. 1868 01:33:15,800 --> 01:33:19,810 Sehingga benar-benar beberapa bahaya ini fungsi dari bahasa yang Anda gunakan. 1869 01:33:19,810 --> 01:33:22,710 Dan dalam beberapa minggu mendatang, kami akan melihat bagaimana berbahaya C benar 1870 01:33:22,710 --> 01:33:24,950 dapat jika Anda tidak menggunakannya dengan benar. 1871 01:33:24,950 --> 01:33:27,610 Tapi dari sana, dan dengan Python, dan JavaScript, akan 1872 01:33:27,610 --> 01:33:32,620 kami lapisan pada beberapa perlindungan tambahan, dan menjalankan lebih sedikit dari risiko tersebut. 1873 01:33:32,620 --> 01:33:35,820 >> Jadi mari kita membuat sedikit lebih logika menarik dalam program kami. 1874 01:33:35,820 --> 01:33:39,110 Jadi biarkan aku pergi ke depan dan menciptakan sebuah program yang disebut Logical 1875 01:33:39,110 --> 01:33:43,804 hanya jadi saya bisa bermain dengan beberapa logika yang sebenarnya, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Saya hanya akan copy dan paste beberapa kode dari sebelumnya sehingga aku kembali 1877 01:33:46,870 --> 01:33:49,950 untuk titik awal yang bagus ini. 1878 01:33:49,950 --> 01:33:53,980 >> Mari saya kali ini dilakukan arang C. Saya akan memberikan nama C 1879 01:33:53,980 --> 01:33:58,510 hanya karena konvensional, mendapatkan karakter dari pengguna. 1880 01:33:58,510 --> 01:34:00,730 Dan mari kita berpura-pura seperti Aku menerapkan bagian 1881 01:34:00,730 --> 01:34:04,130 dari program Rm, hapus yang Program sebelum itu diminta pengguna 1882 01:34:04,130 --> 01:34:05,400 untuk menghapus file. 1883 01:34:05,400 --> 01:34:06,750 Bagaimana kita bisa melakukan ini? 1884 01:34:06,750 --> 01:34:11,090 >> Saya ingin mengatakan, jika C sama sama, kutipan tanda kutip, 1885 01:34:11,090 --> 01:34:16,304 y, maka aku akan menganggap bahwa pengguna telah memilih ya. 1886 01:34:16,304 --> 01:34:17,470 Aku hanya akan mencetak ya. 1887 01:34:17,470 --> 01:34:19,440 Jika itu benar-benar menulis program penghapusan, 1888 01:34:19,440 --> 01:34:21,420 kita bisa menghapus file dengan garis lebih dari kode. 1889 01:34:21,420 --> 01:34:22,461 Tapi kita akan tetap sederhana. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Lain jika c sama sama n-- dan sekarang di sini, aku akan mengatakan, 1892 01:34:31,250 --> 01:34:32,980 pengguna harus berarti tidak ada. 1893 01:34:32,980 --> 01:34:34,360 Dan kemudian lain, Anda tahu apa? 1894 01:34:34,360 --> 01:34:36,200 Aku tidak tahu apa lagi pengguna akan mengetik. 1895 01:34:36,200 --> 01:34:38,533 Jadi aku hanya akan mengatakan bahwa yang merupakan kesalahan, apa pun 1896 01:34:38,533 --> 01:34:40,070 ia benar-benar mengetik. 1897 01:34:40,070 --> 01:34:41,180 >> Jadi apa yang terjadi di sini? 1898 01:34:41,180 --> 01:34:44,530 Ada perbedaan mendasar versus apa yang saya lakukan di masa lalu. 1899 01:34:44,530 --> 01:34:49,300 tanda kutip ganda, tanda kutip ganda, ganda kutipan, dan, namun, tanda kutip tunggal, 1900 01:34:49,300 --> 01:34:50,170 tanda kutip tunggal. 1901 01:34:50,170 --> 01:34:52,860 Ternyata di C, bahwa ketika Anda ingin menulis string, 1902 01:34:52,860 --> 01:34:56,680 Anda menggunakan tanda kutip ganda, seperti yang kita sudah telah menggunakan semua kali ini dengan printf. 1903 01:34:56,680 --> 01:35:02,030 >> Tetapi jika Anda ingin berurusan dengan hanya karakter tunggal, yang disebut char, 1904 01:35:02,030 --> 01:35:03,780 maka Anda benar-benar menggunakan tanda kutip tunggal. 1905 01:35:03,780 --> 01:35:05,450 Bagi Anda yang sudah diprogram sebelumnya, Anda mungkin tidak memiliki 1906 01:35:05,450 --> 01:35:07,850 harus khawatir tentang hal ini Perbedaan dalam bahasa tertentu. 1907 01:35:07,850 --> 01:35:09,450 Dalam C, itu tidak masalah. 1908 01:35:09,450 --> 01:35:12,560 Dan ketika saya mendapatkan char dan saya ingin untuk membandingkan char yang menggunakan equals 1909 01:35:12,560 --> 01:35:18,350 sama dengan beberapa surat seperti y atau n, saya lakukan, memang, harus memiliki tanda kutip tunggal. 1910 01:35:18,350 --> 01:35:19,770 >> Sekarang, mari kita pergi ke depan dan melakukan hal ini. 1911 01:35:19,770 --> 01:35:26,180 Mari kita pergi ke depan dan jangan membuat dot logis memangkas logis. 1912 01:35:26,180 --> 01:35:27,305 Dan sekarang aku sedang diminta. 1913 01:35:27,305 --> 01:35:30,638 Jadi, mungkin, pengalaman pengguna yang lebih baik akan benar-benar tahu apa yang harus dilakukan di sini. 1914 01:35:30,638 --> 01:35:33,030 Tapi aku akan hanya membabi buta mengatakan y untuk yes, OK, baik. 1915 01:35:33,030 --> 01:35:35,780 >> Mari kita jalankan lagi, n tanpa, bagus. 1916 01:35:35,780 --> 01:35:39,610 Misalkan seperti orang-orang tertentu yang saya tahu, caps saya lock pada semua terlalu sering. 1917 01:35:39,610 --> 01:35:43,740 Jadi saya lakukan modal Y, masukkan, kesalahan. 1918 01:35:43,740 --> 01:35:46,130 OK, itu tidak persis apa yang saya harapkan. 1919 01:35:46,130 --> 01:35:48,170 Memang, komputer adalah melakukan harfiah apa 1920 01:35:48,170 --> 01:35:51,794 Aku bilang ke do-- memeriksa huruf kecil y dan huruf kecil n. 1921 01:35:51,794 --> 01:35:53,960 Ini tidak merasa seperti yang baik pengalaman pengguna, meskipun. 1922 01:35:53,960 --> 01:35:59,010 Mari saya meminta dan menerima kedua kasus lebih rendah atau huruf. 1923 01:35:59,010 --> 01:36:02,090 Jadi ternyata, Anda mungkin ingin mengatakan sesuatu seperti di Scratch, 1924 01:36:02,090 --> 01:36:08,150 seperti harfiah atau C sama sama modal tunggal dikutip y. 1925 01:36:08,150 --> 01:36:11,400 Ternyata, C tidak memiliki kata kunci literal atau. 1926 01:36:11,400 --> 01:36:12,880 >> Tetapi memiliki dua bar vertikal. 1927 01:36:12,880 --> 01:36:15,463 Anda harus menahan Shift biasanya, jika Anda menggunakan keyboard US, 1928 01:36:15,463 --> 01:36:18,910 dan memukul bar vertikal kunci di atas kunci Anda kembali. 1929 01:36:18,910 --> 01:36:22,410 Tapi bar vertikal ini bar vertikal berarti atau. 1930 01:36:22,410 --> 01:36:26,220 >> Jika, sebaliknya, kita ingin mengatakan dan, seperti di Scratch, 1931 01:36:26,220 --> 01:36:28,180 kita bisa melakukan ampersand ampersand. 1932 01:36:28,180 --> 01:36:31,330 Itu tidak masuk akal logis di sini, karena manusia tidak mungkin bisa 1933 01:36:31,330 --> 01:36:37,110 telah diketik baik y dan huruf kecil y dan modal Y sebagai karakter yang sama. 1934 01:36:37,110 --> 01:36:39,470 Jadi atau itulah yang akan kita di sini. 1935 01:36:39,470 --> 01:36:46,280 >> Jadi jika saya melakukan ini di kedua tempat, atau c sama equals modal N, sekarang jalankan, 1936 01:36:46,280 --> 01:36:49,390 membuat logis, jalankan kembali logis. 1937 01:36:49,390 --> 01:36:51,200 Sekarang, saya bisa mengetik y. 1938 01:36:51,200 --> 01:36:53,920 Dan saya bisa melakukannya lagi dengan modal Y, atau N. modal 1939 01:36:53,920 --> 01:36:56,630 Dan saya bisa menambahkan tambahan kombinasi masih. 1940 01:36:56,630 --> 01:36:58,810 >> Jadi ini adalah logis Program sejauh sekarang 1941 01:36:58,810 --> 01:37:01,940 Aku memeriksa secara logis untuk nilai ini atau nilai ini. 1942 01:37:01,940 --> 01:37:06,420 Dan saya tidak perlu, tentu, datang dengan dua ifs lebih atau yang lain seandainya. 1943 01:37:06,420 --> 01:37:09,960 Aku benar-benar dapat menggabungkan beberapa logika terkait bersama-sama dengan cara ini. 1944 01:37:09,960 --> 01:37:11,950 Jadi ini akan menjadi lebih baik dirancang dari sekedar 1945 01:37:11,950 --> 01:37:17,490 mengatakan, jika C sama dengan huruf kecil y, mencetak ya, lain jika c sama modal Y, 1946 01:37:17,490 --> 01:37:20,074 mencetak ya, lain jika c sama lower-- dengan kata lain, 1947 01:37:20,074 --> 01:37:21,990 Anda tidak harus memiliki semakin banyak cabang. 1948 01:37:21,990 --> 01:37:28,840 Anda dapat menggabungkan beberapa setara cabang logis, karena dengan cara ini. 1949 01:37:28,840 --> 01:37:34,150 >> Jadi mari kita lihat hanya satu bahan akhir, satu konstruk akhir, 1950 01:37:34,150 --> 01:37:34,847 bahwa C memungkinkan. 1951 01:37:34,847 --> 01:37:36,930 Dan kami akan kembali di masa depan kepada orang lain masih. 1952 01:37:36,930 --> 01:37:41,400 Dan kemudian kita akan menyimpulkan dengan melihat di tidak kebenaran code-- 1953 01:37:41,400 --> 01:37:46,070 mendapatkan kode untuk work-- tetapi desain kode, dan menanam benih awal. 1954 01:37:46,070 --> 01:37:51,337 >> Jadi biarkan aku pergi ke depan dan membuka file baru di sini. 1955 01:37:51,337 --> 01:37:51,920 Kamu tahu apa? 1956 01:37:51,920 --> 01:37:54,450 Aku akan kembali melaksanakan program yang sama, 1957 01:37:54,450 --> 01:37:55,940 tetapi menggunakan konstruksi yang berbeda. 1958 01:37:55,940 --> 01:38:00,110 >> Jadi biar cepat memberi diriku Akses untuk menyertakan CS50.h 1959 01:38:00,110 --> 01:38:04,150 untuk perpustakaan CS50, standar io.h untuk printf. 1960 01:38:04,150 --> 01:38:06,510 Beri aku void main saya int. 1961 01:38:06,510 --> 01:38:09,310 Dan kemudian di sini, biarkan saya pergi ke depan dan melakukan hal ini. 1962 01:38:09,310 --> 01:38:12,010 >> Char c mendapat dapatkan char, seperti sebelumnya. 1963 01:38:12,010 --> 01:38:16,770 Dan aku akan menggunakan konstruksi baru sekarang-- beralih, pada karakter apa? 1964 01:38:16,770 --> 01:38:19,820 Jadi switch adalah jenis seperti beralih kereta rel. 1965 01:38:19,820 --> 01:38:22,070 Atau, benar-benar, itu adalah jenis sebuah jika lain, jika lain jika, 1966 01:38:22,070 --> 01:38:23,980 tapi ditulis agak berbeda. 1967 01:38:23,980 --> 01:38:25,490 >> Sebuah switch terlihat seperti ini. 1968 01:38:25,490 --> 01:38:29,060 Anda memiliki switch, dan kemudian apa karakter atau nomor yang ingin melihat, 1969 01:38:29,060 --> 01:38:32,000 kemudian beberapa kurung kurawal seperti di Scratch, hanya mengatakan melakukan hal ini. 1970 01:38:32,000 --> 01:38:33,480 Dan kemudian Anda memiliki kasus yang berbeda. 1971 01:38:33,480 --> 01:38:34,830 >> Anda tidak menggunakan jika dan lain. 1972 01:38:34,830 --> 01:38:37,050 Anda benar-benar menggunakan kasus kata. 1973 01:38:37,050 --> 01:38:38,790 Dan Anda akan mengatakan sesuatu seperti ini. 1974 01:38:38,790 --> 01:38:43,820 >> Jadi dalam kasus huruf kecil y, atau dalam kasus modal Y, 1975 01:38:43,820 --> 01:38:47,350 pergi ke depan dan mencetak ya. 1976 01:38:47,350 --> 01:38:49,020 Dan kemudian keluar dari switch. 1977 01:38:49,020 --> 01:38:49,580 Itu dia. 1978 01:38:49,580 --> 01:38:50,880 Dilakukan. 1979 01:38:50,880 --> 01:38:57,270 >> Lain jika, sehingga untuk berbicara, kasus n lebih rendah, atau modal N, 1980 01:38:57,270 --> 01:39:02,560 kemudian pergi ke depan dan mencetak out ada, dan kemudian istirahat. 1981 01:39:02,560 --> 01:39:08,022 Else-- dan jenis adalah kasus default indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 dan hanya untuk mengukur baik, meskipun logis istirahat ini tidak diperlukan 1983 01:39:10,980 --> 01:39:12,896 karena kita berada di akhir switch pula, 1984 01:39:12,896 --> 01:39:14,520 Sekarang saya melanggar keluar dari switch. 1985 01:39:14,520 --> 01:39:16,280 Jadi ini terlihat sedikit berbeda. 1986 01:39:16,280 --> 01:39:18,272 >> Tapi, secara logis, itu sebenarnya setara. 1987 01:39:18,272 --> 01:39:19,980 Dan mengapa Anda akan menggunakan satu atas yang lain? 1988 01:39:19,980 --> 01:39:23,220 Kadang-kadang, hanya preferensi pribadi, kadang-kadang estetika, 1989 01:39:23,220 --> 01:39:25,420 jika saya melirik ini sekarang, ada sesuatu 1990 01:39:25,420 --> 01:39:27,510 yang bisa dikatakan untuk pembacaan kode ini. 1991 01:39:27,510 --> 01:39:30,690 Maksudku, apalagi fakta bahwa ini kode baru untuk banyak dari kita di dalam ruangan. 1992 01:39:30,690 --> 01:39:33,515 >> Tapi itu hanya semacam cukup. 1993 01:39:33,515 --> 01:39:37,760 Anda melihat huruf kecil y, modal Y, kasus n lebih rendah, modal N default, 1994 01:39:37,760 --> 01:39:40,150 itu hanya jenis melompat keluar pada Anda dengan cara 1995 01:39:40,150 --> 01:39:42,200 itu, bisa dibilang, mungkin contoh sebelumnya 1996 01:39:42,200 --> 01:39:45,780 dengan ifs, dan bar vertikal, dan seandainya pun, mungkin tidak memiliki. 1997 01:39:45,780 --> 01:39:51,600 Jadi ini benar-benar masalah pribadi pilihan, benar-benar, atau mudah dibaca, 1998 01:39:51,600 --> 01:39:52,360 kode. 1999 01:39:52,360 --> 01:39:58,230 >> Tapi dalam hal fungsi, biarkan aku pergi ke depan dan membuat switch, dot slash 2000 01:39:58,230 --> 01:40:05,830 switch, dan sekarang ketik huruf kecil y, modal Y, huruf kecil n, modal N, 2001 01:40:05,830 --> 01:40:09,250 David, coba lagi karena itulah tidak satu karakter. 2002 01:40:09,250 --> 01:40:12,050 Mari kita lakukan x, kesalahan, seperti yang diharapkan. 2003 01:40:12,050 --> 01:40:15,640 Dan, logically-- dan ini adalah sesuatu Saya akan mendorong di general-- bahkan 2004 01:40:15,640 --> 01:40:17,790 meskipun kita hanya menggaruk permukaan beberapa fitur ini. 2005 01:40:17,790 --> 01:40:20,560 >> Dan itu mungkin tidak jelas ketika Anda sendiri duduk di keyboard, 2006 01:40:20,560 --> 01:40:21,370 bagaimana ini bekerja? 2007 01:40:21,370 --> 01:40:22,240 Apa yang akan dilakukan? 2008 01:40:22,240 --> 01:40:25,630 Hal yang indah tentang memiliki laptop, atau desktop, atau akses 2009 01:40:25,630 --> 01:40:29,290 untuk komputer dengan kompilator, dan dengan editor kode seperti ini, 2010 01:40:29,290 --> 01:40:32,990 adalah Anda hampir selalu dapat menjawab ini pertanyaan untuk diri sendiri hanya dengan mencoba. 2011 01:40:32,990 --> 01:40:36,570 >> Misalnya, jika retoris Pertanyaan di tangan yang, 2012 01:40:36,570 --> 01:40:39,540 apa yang terjadi jika Anda lupa laporan istirahat Anda? 2013 01:40:39,540 --> 01:40:41,400 Yang sebenarnya merupakan sangat umum hal yang harus dilakukan, 2014 01:40:41,400 --> 01:40:43,540 karena tidak terlihat seperti Anda benar-benar membutuhkannya. 2015 01:40:43,540 --> 01:40:46,790 Mereka tidak benar-benar menyelesaikan Anda berpikir seperti kurung atau keriting a 2016 01:40:46,790 --> 01:40:47,714 brace tidak. 2017 01:40:47,714 --> 01:40:49,630 Mari kita pergi ke depan dan mengkompilasi ulang kode dan melihat. 2018 01:40:49,630 --> 01:40:53,690 Sehingga membuat switch, dot slash switch. 2019 01:40:53,690 --> 01:40:56,435 Mari kita ketik dalam huruf kecil y, kasus atas, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Jadi saya mengetik y. 2022 01:41:00,700 --> 01:41:04,420 >> Program ini mengatakan ya, tidak, kesalahan, seolah-olah itu berubah pikiran. 2023 01:41:04,420 --> 01:41:09,280 Tapi itu semacam itu, karena apa yang terjadi dengan switch adalah kasus pertama yang 2024 01:41:09,280 --> 01:41:13,899 Pertandingan dasarnya berarti, hey komputer, mengeksekusi semua kode di bawahnya. 2025 01:41:13,899 --> 01:41:16,690 Dan jika Anda tidak mengatakan istirahat, atau tidak mengatakan istirahat, atau tidak mengatakan istirahat, 2026 01:41:16,690 --> 01:41:19,540 komputer akan meniup melalui semua garis 2027 01:41:19,540 --> 01:41:22,779 dan mengeksekusi semua dari mereka sampai itu sampai ke yang brace keriting. 2028 01:41:22,779 --> 01:41:24,320 Jadi rem, memang, diperlukan. 2029 01:41:24,320 --> 01:41:27,120 Tapi takeaway di sini adalah, ketika ragu, mencoba sesuatu. 2030 01:41:27,120 --> 01:41:29,510 Mungkin menyimpan kode Anda pertama, atau menyimpannya dalam sebuah file tambahan 2031 01:41:29,510 --> 01:41:32,930 jika Anda benar-benar khawatir tentang mengacaukan dan harus memulihkan 2032 01:41:32,930 --> 01:41:34,430 pekerjaan yang Anda tahu bekerja. 2033 01:41:34,430 --> 01:41:35,410 >> Tapi mencoba hal. 2034 01:41:35,410 --> 01:41:38,074 Dan jangan menjadi seperti takut, mungkin, dari apa yang mungkin dilakukan komputer, 2035 01:41:38,074 --> 01:41:39,490 atau bahwa Anda mungkin memecahkan sesuatu. 2036 01:41:39,490 --> 01:41:42,790 Anda dapat selalu kembali beberapa versi sebelumnya. 2037 01:41:42,790 --> 01:41:45,640 >> Jadi mari kita berakhir dengan melihat di desain kode. 2038 01:41:45,640 --> 01:41:49,020 Kami memiliki kemampuan ini sekarang untuk menulis kondisi, dan menulis loop, 2039 01:41:49,020 --> 01:41:50,850 dan variabel, dan fungsi panggilan. 2040 01:41:50,850 --> 01:41:54,590 Jadi, terus terang, kami agak kembali di mana kami seminggu yang lalu dengan Scratch, 2041 01:41:54,590 --> 01:42:00,120 meskipun dengan tekstual kurang menarik lingkungan daripada Scratch memungkinkan. 2042 01:42:00,120 --> 01:42:03,990 >> Tapi perhatikan seberapa cepat kita sudah mengakuisisi bahwa kosakata, bahkan jika itu 2043 01:42:03,990 --> 01:42:07,570 akan mengambil sedikit waktu untuk meresap, sehingga kita sekarang dapat menggunakan kosakata ini 2044 01:42:07,570 --> 01:42:10,320 untuk menulis program yang lebih menarik. 2045 01:42:10,320 --> 01:42:12,940 Dan mari kita mengambil langkah bayi arah itu, sebagai berikut. 2046 01:42:12,940 --> 01:42:14,890 Biarkan aku pergi ke depan dan membuat file baru di sini. 2047 01:42:14,890 --> 01:42:17,750 >> Aku akan menyebutnya prototype.c, dan memperkenalkan 2048 01:42:17,750 --> 01:42:20,954 untuk pertama kalinya, kemampuan untuk membuat fungsi sendiri. 2049 01:42:20,954 --> 01:42:22,870 Beberapa dari Anda mungkin memiliki melakukan ini dengan Scratch, 2050 01:42:22,870 --> 01:42:25,430 dimana Anda dapat membuat Anda blok kustom sendiri di Scratch, 2051 01:42:25,430 --> 01:42:27,892 dan kemudian menyeret mereka ke tempatnya di mana pun Anda ingin di C. 2052 01:42:27,892 --> 01:42:30,100 Dan di sebagian besar pemrograman bahasa, Anda dapat melakukan hal 2053 01:42:30,100 --> 01:42:33,580 itu-- membuat fungsi sendiri, jika mereka tidak sudah ada. 2054 01:42:33,580 --> 01:42:38,660 >> Jadi, misalnya, biarkan aku pergi ke depan dan termasuk CS50.h, dan termasuk 2055 01:42:38,660 --> 01:42:43,110 standar io.h, int void main. 2056 01:42:43,110 --> 01:42:46,020 Dan sekarang kita memiliki placeholder siap untuk pergi. 2057 01:42:46,020 --> 01:42:48,550 Saya tetap mencetak hal-hal seperti nama orang hari ini. 2058 01:42:48,550 --> 01:42:51,910 Dan yang terasa like-- tidak akan lebih baik jika ada 2059 01:42:51,910 --> 01:42:53,936 adalah fungsi yang disebut nama cetak? 2060 01:42:53,936 --> 01:42:55,060 Saya tidak harus menggunakan printf. 2061 01:42:55,060 --> 01:42:56,976 Saya tidak harus ingat semua kode format yang. 2062 01:42:56,976 --> 01:43:00,050 Mengapa tidak saya, atau mengapa tidak seseorang sebelum saya, 2063 01:43:00,050 --> 01:43:02,980 membuat fungsi yang disebut cetak nama, yang diberikan beberapa nama, 2064 01:43:02,980 --> 01:43:03,980 hanya mencetak keluar? 2065 01:43:03,980 --> 01:43:08,700 >> Dengan kata lain, jika saya mengatakan, hey, komputer, memberi saya sebuah string 2066 01:43:08,700 --> 01:43:11,870 dengan meminta pengguna untuk seperti, melalui fungsi get tali CS50 ini. 2067 01:43:11,870 --> 01:43:15,090 Hei, komputer, menempatkan string yang di variabel di sisi kiri, 2068 01:43:15,090 --> 01:43:16,150 dan menyebutnya s. 2069 01:43:16,150 --> 01:43:22,150 Dan kemudian, hey komputer, pergi ke depan dan mencetak bahwa nama orang, dilakukan. 2070 01:43:22,150 --> 01:43:26,240 >> Sekarang, itu akan menyenangkan, karena program ini, aptly bernama, 2071 01:43:26,240 --> 01:43:29,170 memberitahu saya apa yang seharusnya dilakukan dengan cara nama-nama fungsi ini. 2072 01:43:29,170 --> 01:43:32,930 Biarkan aku pergi dan membuat prototipe, Enter. 2073 01:43:32,930 --> 01:43:34,930 Dan, sayangnya, ini tidak akan terbang. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, line 7, karakter 5, error, deklarasi implisit 2075 01:43:39,430 --> 01:43:42,960 fungsi nama cetak adalah tidak sah di C99, C99 2076 01:43:42,960 --> 01:43:45,130 berarti versi C yang keluar pada tahun 1999. 2077 01:43:45,130 --> 01:43:45,730 Itu saja. 2078 01:43:45,730 --> 01:43:48,780 >> Jadi saya tidak tahu apa yang semua ini berarti belum. 2079 01:43:48,780 --> 01:43:50,810 Tapi saya mengakui kesalahan dalam merah. 2080 01:43:50,810 --> 01:43:51,770 Itu cukup jelas. 2081 01:43:51,770 --> 01:43:53,769 >> Dan tampaknya bahwa dengan karakter hijau di sini, 2082 01:43:53,769 --> 01:43:57,520 masalah ini dengan nama cetak, terbuka paren s, paren dekat, semi-kolon. 2083 01:43:57,520 --> 01:44:01,800 Tapi deklarasi implisit fungsi kami memang melihat sebentar tadi. 2084 01:44:01,800 --> 01:44:04,880 Ini berarti, hanya, bahwa dentang tidak tahu apa yang saya maksud. 2085 01:44:04,880 --> 01:44:09,000 >> Saya telah menggunakan kata kosa kata yang itu pernah melihat atau telah diajarkan sebelumnya. 2086 01:44:09,000 --> 01:44:11,950 Dan jadi saya harus mengajarkannya apa artinya fungsi ini. 2087 01:44:11,950 --> 01:44:13,590 Jadi aku akan pergi ke depan dan melakukan itu. 2088 01:44:13,590 --> 01:44:17,970 >> Aku akan pergi ke depan dan menerapkan fungsi sendiri disebut Cetak Nama. 2089 01:44:17,970 --> 01:44:24,720 Dan aku akan mengatakan, sebagai berikut, bahwa hal ini ini, printf, halo, persen 2090 01:44:24,720 --> 01:44:27,760 s, backslash n, nama, semi-kolon. 2091 01:44:27,760 --> 01:44:29,250 Jadi apa yang saya lakukan? 2092 01:44:29,250 --> 01:44:31,325 >> Jadi ternyata, untuk mengimplementasikan fungsi sendiri, 2093 01:44:31,325 --> 01:44:33,845 kami jenis meminjam beberapa struktur yang sama seperti main 2094 01:44:33,845 --> 01:44:35,720 bahwa kami baru saja berkunjung diambil untuk diberikan, dan saya 2095 01:44:35,720 --> 01:44:37,730 tahu hanya menyalin dan menyisipkan cukup banyak apa 2096 01:44:37,730 --> 01:44:39,170 Aku sudah menulis di masa lalu. 2097 01:44:39,170 --> 01:44:40,570 Tapi perhatikan pola di sini. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, Void, kami akan menggoda terpisah tak lama apa yang benar-benar berarti. 2099 01:44:43,750 --> 01:44:46,160 >> Tapi untuk saat ini, hanya melihat paralelisme. 2100 01:44:46,160 --> 01:44:48,210 Void, nama cetak, nama string, jadi ada 2101 01:44:48,210 --> 01:44:50,310 kata kunci ungu, yang kita akan mulai 2102 01:44:50,310 --> 01:44:54,067 memanggil kembali jenis, nama fungsi, dan kemudian masukan. 2103 01:44:54,067 --> 01:44:56,400 Jadi, sebenarnya, kita bisa menyaring semacam ini seperti minggu lalu 2104 01:44:56,400 --> 01:44:59,030 seperti, ini adalah nama atau algoritma dari kode kita 2105 01:44:59,030 --> 01:45:00,761 akan write-- yang algoritma yang mendasari 2106 01:45:00,761 --> 01:45:02,010 kode kita akan menulis. 2107 01:45:02,010 --> 01:45:03,180 >> Ini adalah input. 2108 01:45:03,180 --> 01:45:04,670 Ini adalah outputnya. 2109 01:45:04,670 --> 01:45:08,730 Fungsi ini, nama cetak, adalah dirancang untuk mengambil string disebut nama, 2110 01:45:08,730 --> 01:45:11,350 atau apa pun, sebagai masukan, dan kemudian batal. 2111 01:45:11,350 --> 01:45:13,904 Tidak mengembalikan apa-apa, seperti mendapatkan string atau mendapatkan int tidak. 2112 01:45:13,904 --> 01:45:15,570 Jadi itu akan menyerahkan sesuatu kembali. 2113 01:45:15,570 --> 01:45:17,960 Ini hanya akan memiliki efek samping, sehingga untuk berbicara, 2114 01:45:17,960 --> 01:45:19,570 mencetak nama seseorang. 2115 01:45:19,570 --> 01:45:22,260 Jadi perhatikan, line 7, saya dapat memanggil nama cetak. 2116 01:45:22,260 --> 01:45:25,920 Baris 10, saya bisa mendefinisikan atau menerapkan nama cetak. 2117 01:45:25,920 --> 01:45:28,450 Tapi, sayangnya, itu tidak cukup. 2118 01:45:28,450 --> 01:45:31,230 >> Biarkan aku pergi ke depan dan ulang ini setelah menyimpan. 2119 01:45:31,230 --> 01:45:33,910 Whoa, sekarang, saya telah membuat buruk, tampaknya. 2120 01:45:33,910 --> 01:45:37,027 Deklarasi Jadi implisit nama fungsi print tidak valid. 2121 01:45:37,027 --> 01:45:38,360 Dan, sekali lagi, masih ada lagi kesalahan. 2122 01:45:38,360 --> 01:45:41,430 Tapi seperti yang saya memperingatkan sebelumnya, bahkan jika Anda mendapatkan kewalahan dengan, 2123 01:45:41,430 --> 01:45:44,850 atau sedih sedikit untuk melihat begitu banyak kesalahan, fokus hanya pada pertama 2124 01:45:44,850 --> 01:45:47,500 awalnya, karena mungkin hanya memiliki efek cascading. 2125 01:45:47,500 --> 01:45:51,970 Jadi C, atau dentang lebih khusus, masih tidak mengenali nama cetak. 2126 01:45:51,970 --> 01:45:54,580 >> Dan itu karena dentang, dengan desain, agak bodoh. 2127 01:45:54,580 --> 01:45:56,280 Hanya melakukan apa yang Anda katakan untuk dilakukan. 2128 01:45:56,280 --> 01:46:00,950 Dan hanya melakukannya dalam urutan di mana Anda kirim ke lakukan. 2129 01:46:00,950 --> 01:46:05,270 >> Jadi saya telah didefinisikan utama di saluran empat, seperti kita sudah melakukan cukup sering. 2130 01:46:05,270 --> 01:46:07,980 Aku telah menetapkan nama cetak on line 10. 2131 01:46:07,980 --> 01:46:11,793 Tapi aku mencoba untuk menggunakan Nama cetak on line tujuh. 2132 01:46:11,793 --> 01:46:13,670 >> Ini terlalu cepat, belum ada. 2133 01:46:13,670 --> 01:46:19,150 Jadi saya bisa menjadi pintar, dan menjadi seperti, OK, jadi mari kita bermain bersama, 2134 01:46:19,150 --> 01:46:23,680 dan bergerak nama cetak up di sini, dan kompilasi ulang. 2135 01:46:23,680 --> 01:46:24,550 Ya Tuhan. 2136 01:46:24,550 --> 01:46:25,260 Itu bekerja. 2137 01:46:25,260 --> 01:46:26,670 Itu sesederhana itu. 2138 01:46:26,670 --> 01:46:28,120 >> Tapi logika adalah persis seperti itu. 2139 01:46:28,120 --> 01:46:30,870 Anda harus mengajarkan dentang apa adalah dengan mendefinisikan fungsi pertama. 2140 01:46:30,870 --> 01:46:31,920 Kemudian Anda dapat menggunakannya. 2141 01:46:31,920 --> 01:46:33,940 Tapi, terus terang, ini terasa seperti lereng licin. 2142 01:46:33,940 --> 01:46:35,773 >> Jadi setiap kali saya menjalankan menjadi masalah, aku hanya 2143 01:46:35,773 --> 01:46:39,450 akan menyoroti dan menyalin kode Aku menulis, memotong dan paste di sini. 2144 01:46:39,450 --> 01:46:41,370 Dan, tentu, kita bisa merancang beberapa skenario 2145 01:46:41,370 --> 01:46:43,286 di mana salah satu fungsi mungkin perlu menelepon lain. 2146 01:46:43,286 --> 01:46:46,030 Dan Anda tidak bisa menempatkan setiap fungsi di atas setiap lain. 2147 01:46:46,030 --> 01:46:47,930 >> Jadi ternyata ada ini solusi yang lebih baik. 2148 01:46:47,930 --> 01:46:50,100 Kita bisa meninggalkan ini menjadi. 2149 01:46:50,100 --> 01:46:53,677 Dan, terus terang, itu umumnya baik, dan nyaman, dan desain yang baik 2150 01:46:53,677 --> 01:46:56,760 untuk menempatkan utama pertama, karena, sekali lagi, utama seperti ketika bendera hijau diklik, 2151 01:46:56,760 --> 01:46:59,027 yaitu fungsi yang dijalankan secara default. 2152 01:46:59,027 --> 01:47:01,110 Jadi Anda mungkin juga menempatkan itu di bagian atas file 2153 01:47:01,110 --> 01:47:03,560 sehingga ketika Anda atau manusia lainnya melihat file 2154 01:47:03,560 --> 01:47:06,360 Anda tahu apa yang terjadi hanya dengan membaca utama pertama. 2155 01:47:06,360 --> 01:47:15,360 Jadi ternyata, kita bisa mengatakan dentang proaktif, hey, dentang, di saluran empat, 2156 01:47:15,360 --> 01:47:17,940 Saya berjanji untuk melaksanakan fungsi yang disebut Cetak 2157 01:47:17,940 --> 01:47:22,600 Nama yang mengambil nama string disebut sebagai masukan, dan hasil apa-apa, batal. 2158 01:47:22,600 --> 01:47:24,770 Dan aku akan mendapatkan sekitar untuk menerapkan nanti. 2159 01:47:24,770 --> 01:47:25,680 >> Di sinilah Main. 2160 01:47:25,680 --> 01:47:29,130 Main sekarang on line 9 dapat menggunakan Cetak Nama karena dentang 2161 01:47:29,130 --> 01:47:32,600 adalah percaya bahwa, pada akhirnya, itu akan menghadapi definisi 2162 01:47:32,600 --> 01:47:34,880 pelaksanaan Cetak Nama. 2163 01:47:34,880 --> 01:47:37,390 Jadi setelah menyimpan file saya, biarkan saya pergi ke depan dan membuat prototipe, 2164 01:47:37,390 --> 01:47:38,498 terlihat baik saat ini. 2165 01:47:38,498 --> 01:47:43,470 Dot slash, prototipe, biarkan aku pergi ke depan dan ketik nama. 2166 01:47:43,470 --> 01:47:48,440 David, halo David, Zamila, halo Zamila, dan, memang, sekarang bekerja. 2167 01:47:48,440 --> 01:47:52,200 >> Jadi bahan di sini adalah bahwa kita sudah membuat fungsi kustom, seperti kustom 2168 01:47:52,200 --> 01:47:54,219 blok awal kita menyebutnya. 2169 01:47:54,219 --> 01:47:57,010 Tapi tidak seperti Scratch mana Anda dapat hanya membuat dan mulai menggunakannya, 2170 01:47:57,010 --> 01:47:59,330 sekarang kita harus menjadi sedikit lebih bertele-tele, 2171 01:47:59,330 --> 01:48:03,410 dan benar-benar melatih dentang menggunakan, atau untuk mengharapkan itu. 2172 01:48:03,410 --> 01:48:09,140 Sekarang, sebagai samping, mengapa selama ini memiliki kita telah hanya membabi buta iman termasuk 2173 01:48:09,140 --> 01:48:12,170 CS50.h, dan termasuk standar io.h? 2174 01:48:12,170 --> 01:48:15,190 >> Nah, ternyata, antara beberapa hal lainnya, 2175 01:48:15,190 --> 01:48:18,550 semua itu pada mereka dot h file, yang kebetulan menjadi file. 2176 01:48:18,550 --> 01:48:20,460 Mereka file header, sehingga untuk berbicara. 2177 01:48:20,460 --> 01:48:23,270 Mereka masih ditulis dalam C. Tapi mereka berbagai jenis file. 2178 01:48:23,270 --> 01:48:28,690 >> Untuk saat ini, Anda dapat cukup banyak berasumsi bahwa semua yang ada dalam diri CS50.h 2179 01:48:28,690 --> 01:48:33,360 beberapa satu kalimat seperti ini, tidak untuk fungsi-fungsi yang disebut Cetak Nama, 2180 01:48:33,360 --> 01:48:36,840 tapi untuk Dapatkan String, Dapatkan Mengambang, dan beberapa orang lainnya. 2181 01:48:36,840 --> 01:48:41,510 Dan ada prototipe yang sama, satu liners, dalam io.h standar 2182 01:48:41,510 --> 01:48:46,241 untuk printf, yang sekarang di Fungsi Cetak Nama saya sendiri. 2183 01:48:46,241 --> 01:48:49,490 Jadi dengan kata lain, sepanjang waktu ini kita sudah saja membabi buta menyalin dan menyisipkan 2184 01:48:49,490 --> 01:48:51,780 termasuk ini, termasuk itu, apa yang terjadi? 2185 01:48:51,780 --> 01:48:55,310 Mereka adalah hanya semacam petunjuk untuk dentang untuk fungsi apa 2186 01:48:55,310 --> 01:49:00,170 yang, memang, dilaksanakan, hanya tempat lain dalam file yang berbeda 2187 01:49:00,170 --> 01:49:02,440 tempat lain pada sistem. 2188 01:49:02,440 --> 01:49:05,160 >> Jadi kita telah menerapkan nama cetak. 2189 01:49:05,160 --> 01:49:07,910 Itu memiliki ini efek samping dari mencetak sesuatu di layar. 2190 01:49:07,910 --> 01:49:10,170 Tapi itu tidak benar-benar tangan saya sesuatu kembali. 2191 01:49:10,170 --> 01:49:12,200 Bagaimana kita pergi tentang melaksanakan program yang 2192 01:49:12,200 --> 01:49:14,510 tidak menyerahkan sesuatu kembali? 2193 01:49:14,510 --> 01:49:15,580 >> Nah, mari kita coba ini. 2194 01:49:15,580 --> 01:49:21,360 Biarkan aku pergi ke depan dan menerapkan file bernama return.c 2195 01:49:21,360 --> 01:49:24,530 sehingga kami dapat menunjukkan bagaimana sesuatu Dapatkan String, atau Dapatkan Int, 2196 01:49:24,530 --> 01:49:27,340 sebenarnya kembali sesuatu kembali ke pengguna. 2197 01:49:27,340 --> 01:49:29,840 Mari kita pergi ke depan dan menentukan void main int. 2198 01:49:29,840 --> 01:49:33,230 >> Dan, sekali lagi, di masa depan, kita akan menjelaskan apa yang int dan kekosongan itu 2199 01:49:33,230 --> 01:49:34,090 sebenarnya lakukan. 2200 01:49:34,090 --> 01:49:35,840 Tapi untuk hari ini, kita akan menerima begitu saja. 2201 01:49:35,840 --> 01:49:39,970 Aku akan pergi ke depan dan printf, untuk pengalaman pengguna yang baik, x adalah. 2202 01:49:39,970 --> 01:49:44,360 Dan kemudian aku akan menunggu pengguna untuk memberi saya x dengan get int. 2203 01:49:44,360 --> 01:49:48,459 >> Dan kemudian aku akan pergi ke depan dan mencetak x ke alun-alun. 2204 01:49:48,459 --> 01:49:50,500 Jadi, ketika Anda hanya memiliki Keyboard, orang biasa 2205 01:49:50,500 --> 01:49:52,600 menggunakan wortel kecil simbol pada keyboard 2206 01:49:52,600 --> 01:49:55,330 untuk mewakili ke listrik dari, atau eksponen. 2207 01:49:55,330 --> 01:49:58,960 Jadi x kuadrat hadir i. 2208 01:49:58,960 --> 01:50:00,660 >> Dan sekarang aku akan melakukan hal ini. 2209 01:50:00,660 --> 01:50:03,940 Aku hanya bisa do-- apa x kuadrat? x kuadrat adalah x kali x. 2210 01:50:03,940 --> 01:50:06,690 >> Dan kami melakukan ini beberapa waktu lalu sudah hari ini. 2211 01:50:06,690 --> 01:50:08,730 Ini tidak merasa seperti semua yang banyak kemajuan. 2212 01:50:08,730 --> 01:50:09,570 Kamu tahu apa? 2213 01:50:09,570 --> 01:50:13,100 Mari kita memanfaatkan beberapa ide yang dari terakhir kali abstraksi. 2214 01:50:13,100 --> 01:50:16,080 >> Bukankah lebih baik jika ada fungsi yang disebut 2215 01:50:16,080 --> 01:50:18,460 persegi yang tidak tepat? 2216 01:50:18,460 --> 01:50:20,640 Masih, pada akhir hari, apakah matematika yang sama. 2217 01:50:20,640 --> 01:50:22,410 Tapi mari kita abstrak jauh ide taking 2218 01:50:22,410 --> 01:50:25,280 satu nomor dikalikan dengan lain, dan hanya memberikan nama, 2219 01:50:25,280 --> 01:50:27,360 seperti persegi nilai ini. 2220 01:50:27,360 --> 01:50:29,560 >> Dan, dengan kata lain, di C, mari kita membuat fungsi 2221 01:50:29,560 --> 01:50:32,660 disebut persegi yang tidak tepat. 2222 01:50:32,660 --> 01:50:34,600 Ini akan disebut persegi. 2223 01:50:34,600 --> 01:50:35,790 Ini akan mengambil int. 2224 01:50:35,790 --> 01:50:37,820 Dan kami hanya akan akan menyebutnya n, secara default. 2225 01:50:37,820 --> 01:50:39,403 >> Tapi kita bisa menyebutnya apa pun yang kita inginkan. 2226 01:50:39,403 --> 01:50:42,900 Dan semua yang akan lakukan, secara harfiah, adalah pulang 2227 01:50:42,900 --> 01:50:45,810 hasil n kali n. 2228 01:50:45,810 --> 01:50:48,980 Tetapi karena itu adalah kembali sesuatu, yang 2229 01:50:48,980 --> 01:50:53,690 adalah kata kunci dalam warna ungu kita sudah tidak pernah terlihat sebelumnya, saya, on line 11, 2230 01:50:53,690 --> 01:50:55,410 tidak bisa hanya mengatakan kekosongan saat ini. 2231 01:50:55,410 --> 01:51:01,320 >> Void, dalam contoh kita hanya melihat bukan nama cetak, hanya berarti, 2232 01:51:01,320 --> 01:51:02,190 lakukan sesuatu. 2233 01:51:02,190 --> 01:51:04,170 Tapi jangan tangan saya sesuatu kembali. 2234 01:51:04,170 --> 01:51:06,790 Dalam hal ini, saya ingin untuk kembali n kali n, 2235 01:51:06,790 --> 01:51:08,460 atau apa pun itu, jumlah itu. 2236 01:51:08,460 --> 01:51:12,460 >> Jadi saya tidak bisa mengatakan, hei, komputer, Aku kembali apa-apa, batal. 2237 01:51:12,460 --> 01:51:16,166 Ini akan kembali, oleh alam, int. 2238 01:51:16,166 --> 01:51:17,790 Dan itulah yang terjadi di sini. 2239 01:51:17,790 --> 01:51:20,070 >> input untuk persegi akan menjadi int. 2240 01:51:20,070 --> 01:51:24,760 Dan sehingga kita dapat menggunakannya, itu harus memiliki nama, N. Ini akan keluaran 2241 01:51:24,760 --> 01:51:26,240 int yang tidak perlu nama. 2242 01:51:26,240 --> 01:51:29,590 Kita bisa meninggalkannya to main, atau siapa pun menggunakan saya untuk mengingat nilai ini jika kita 2243 01:51:29,590 --> 01:51:31,120 inginkan dengan variabel sendiri. 2244 01:51:31,120 --> 01:51:33,230 >> Dan, sekali lagi, satu-satunya yang baru kata kunci di sini adalah Return. 2245 01:51:33,230 --> 01:51:34,480 Dan aku hanya melakukan beberapa matematika. 2246 01:51:34,480 --> 01:51:41,825 Jika aku benar-benar ingin menjadi tidak perlu, Saya bisa mengatakan int produk mendapat n kali n. 2247 01:51:41,825 --> 01:51:44,170 >> Dan kemudian saya bisa mengatakan, produk kembali. 2248 01:51:44,170 --> 01:51:47,360 Tapi, sekali lagi, ke titik awal ini hanya tidak menjadi design-- baik 2249 01:51:47,360 --> 01:51:50,060 seperti, mengapa memperkenalkan nama, simbol, seperti produk, 2250 01:51:50,060 --> 01:51:51,570 hanya untuk segera mengembalikannya? 2251 01:51:51,570 --> 01:51:53,670 Ini sedikit lebih bersih, sedikit lebih ketat, sehingga 2252 01:51:53,670 --> 01:51:59,380 untuk berbicara, hanya untuk mengatakan pulang n kali n, menyingkirkan baris ini sama sekali. 2253 01:51:59,380 --> 01:52:02,860 >> Dan itu kode hanya kurang membaca, kesempatan lebih sedikit untuk kesalahan. 2254 01:52:02,860 --> 01:52:05,180 Dan mari kita lihat apakah ini sebenarnya sekarang bekerja. 2255 01:52:05,180 --> 01:52:09,380 Sekarang, aku akan pergi depan dan membuat kembali. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, deklarasi implisit fungsi. 2257 01:52:11,460 --> 01:52:14,080 Saya membuat kesalahan ini sebelumnya, bukan masalah besar. 2258 01:52:14,080 --> 01:52:18,950 Saya hanya mengetik, atau sorot dan menyalin, sama persis prototipe fungsi, 2259 01:52:18,950 --> 01:52:21,342 atau tanda tangan, dari fungsi di sini. 2260 01:52:21,342 --> 01:52:22,800 Atau aku bisa memindahkan seluruh fungsi. 2261 01:52:22,800 --> 01:52:23,841 >> Tapi itu sedikit malas. 2262 01:52:23,841 --> 01:52:24,870 Jadi kita tidak akan melakukan itu. 2263 01:52:24,870 --> 01:52:27,960 Sekarang, biarkan saya membuat kembali lagi, dot slash pulang. 2264 01:52:27,960 --> 01:52:32,790 >> x adalah 2. x kuadrat adalah 4. x adalah 3. x kuadrat adalah 9. 2265 01:52:32,790 --> 01:52:35,300 Dan fungsi tampaknya sekarang untuk bekerja. 2266 01:52:35,300 --> 01:52:36,550 Jadi apa bedanya di sini? 2267 01:52:36,550 --> 01:52:42,520 Saya memiliki fungsi yang disebut persegi, dalam hal ini, yang saya dimasukkan ke dalam input. 2268 01:52:42,520 --> 01:52:43,830 Dan aku kembali output. 2269 01:52:43,830 --> 01:52:46,210 Namun, sebelumnya, jika Aku membuka contoh lainnya 2270 01:52:46,210 --> 01:52:51,640 dari sebelumnya, yang adalah disebut prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Aku punya nama cetak, yang kembali batal, sehingga untuk berbicara, 2272 01:52:54,770 --> 01:52:58,730 Atau kembali apa-apa, dan hanya memiliki efek samping. 2273 01:52:58,730 --> 01:53:00,230 >> Jadi apa yang terjadi di sini? 2274 01:53:00,230 --> 01:53:03,520 Nah, pertimbangkan fungsi mendapatkan tali untuk sesaat. 2275 01:53:03,520 --> 01:53:06,570 Kami telah menggunakan fungsi mendapatkan tali dengan cara berikut. 2276 01:53:06,570 --> 01:53:10,464 >> Kami telah memiliki fungsi mendapatkan string, seperti termasuk CS50.h, 2277 01:53:10,464 --> 01:53:16,624 termasuk standar io.h, int, utama, batal. 2278 01:53:16,624 --> 01:53:18,790 Dan kemudian setiap kali aku sudah disebut get tali sejauh ini, 2279 01:53:18,790 --> 01:53:23,260 Aku sudah mengatakan sesuatu seperti, string s mendapat mendapatkan string, karena get string-- 2280 01:53:23,260 --> 01:53:27,880 sebut get tali get.c-- ini sendiri mengembalikan string yang saya dapat kemudian 2281 01:53:27,880 --> 01:53:32,050 menggunakan, dan mengatakan, halo, koma, persen s, backslash n, s. 2282 01:53:32,050 --> 01:53:35,660 >> Jadi ini adalah contoh yang sama, benar-benar, bahwa kita punya sebelumnya. 2283 01:53:35,660 --> 01:53:37,920 Jadi mendapatkan string yang mengembalikan nilai. 2284 01:53:37,920 --> 01:53:41,260 Tapi beberapa saat yang lalu, tali cetak tidak mengembalikan nilai. 2285 01:53:41,260 --> 01:53:42,721 Ini hanya memiliki efek samping. 2286 01:53:42,721 --> 01:53:44,220 Jadi ini adalah perbedaan mendasar. 2287 01:53:44,220 --> 01:53:46,710 Kami telah melihat yang berbeda jenis fungsi sekarang, 2288 01:53:46,710 --> 01:53:49,490 beberapa di antaranya telah kembali nilai-nilai, beberapa di antaranya tidak. 2289 01:53:49,490 --> 01:53:51,890 Jadi mungkin itu string, atau int, atau float. 2290 01:53:51,890 --> 01:53:53,480 Atau mungkin itu hanya berlaku. 2291 01:53:53,480 --> 01:53:55,710 >> Dan perbedaannya adalah bahwa fungsi-fungsi ini yang 2292 01:53:55,710 --> 01:53:59,940 mendapatkan data dan mengembalikan nilai sebenarnya membawa sesuatu kembali ke meja, 2293 01:53:59,940 --> 01:54:01,110 boleh dikatakan. 2294 01:54:01,110 --> 01:54:03,710 Jadi mari kita pergi ke depan dan melihat satu set terakhir 2295 01:54:03,710 --> 01:54:09,129 contoh yang memberikan arti, sekarang, dari bagaimana kita mungkin, memang, abstrak lebih baik, 2296 01:54:09,129 --> 01:54:11,670 dan lebih baik, dan lebih baik, atau lebih, dan lebih, dan lebih, dalam rangka 2297 01:54:11,670 --> 01:54:13,810 untuk menulis, akhirnya, kode yang lebih baik. 2298 01:54:13,810 --> 01:54:16,860 Mari kita pergi ke depan, dan dalam roh dari Scratch, lakukan langkah berikut. 2299 01:54:16,860 --> 01:54:21,700 >> Biarkan aku pergi ke depan dan mencakup CS50.h dan standar IO.h. 2300 01:54:21,700 --> 01:54:24,010 Biarkan aku pergi ke depan dan memberikan diriku int, utama, batal. 2301 01:54:24,010 --> 01:54:27,380 Dan biarkan aku pergi ke depan, sebut cough.c ini. 2302 01:54:27,380 --> 01:54:35,510 >> Dan biarkan aku pergi ke depan dan hanya seperti Scratch, mencetak batuk / n. 2303 01:54:35,510 --> 01:54:37,170 Dan saya ingin melakukan ini tiga kali. 2304 01:54:37,170 --> 01:54:39,670 Jadi aku, tentu saja, hanya akan copy dan paste tiga kali. 2305 01:54:39,670 --> 01:54:46,440 Sekarang saya akan membuat batuk slash batuk dot. 2306 01:54:46,440 --> 01:54:50,120 Mari kita memberi diriku sedikit lebih banyak ruang di sini, Masukkan, batuk, batuk, batuk. 2307 01:54:50,120 --> 01:54:53,970 >> Ada, jelas, sudah menjadi kesempatan untuk perbaikan. 2308 01:54:53,970 --> 01:54:55,679 Aku sudah disalin dan disisipkan beberapa kali hari ini. 2309 01:54:55,679 --> 01:54:58,261 Tapi itu hanya jadi saya tidak harus mengetik banyak karakter. 2310 01:54:58,261 --> 01:55:00,250 Aku masih berubah apa mereka baris kode yang. 2311 01:55:00,250 --> 01:55:04,240 >> Ketiga garis identik, yang merasa malas dan memang adalah, 2312 01:55:04,240 --> 01:55:07,110 dan mungkin bukan pendekatan yang tepat. 2313 01:55:07,110 --> 01:55:11,029 Jadi dengan apa bahan bisa kita memperbaiki kode ini? 2314 01:55:11,029 --> 01:55:12,570 Kami tidak perlu copy dan paste kode. 2315 01:55:12,570 --> 01:55:15,070 >> Dan, memang, setiap kali Anda merasa diri Anda menyalin dan paste, 2316 01:55:15,070 --> 01:55:17,700 dan bahkan mengubah kode, kemungkinan besar ada cara yang lebih baik. 2317 01:55:17,700 --> 01:55:19,470 Dan, memang, ada. 2318 01:55:19,470 --> 01:55:22,510 Biarkan aku pergi ke depan dan melakukan untuk loop, meskipun sintaks mungkin tidak 2319 01:55:22,510 --> 01:55:24,570 datang secara alami belum. 2320 01:55:24,570 --> 01:55:29,494 >> Lakukan ini tiga kali, hanya dengan melakukan following-- yang 2321 01:55:29,494 --> 01:55:31,160 dan saya kebetulan tahu ini dari praktik. 2322 01:55:31,160 --> 01:55:32,810 Tapi kami memiliki sejumlah contoh sekarang. 2323 01:55:32,810 --> 01:55:34,950 Dan Anda akan melihat secara online referensi lebih masih. 2324 01:55:34,950 --> 01:55:37,790 >> Ini adalah sintaks pada baris 6, yang seperti Scratch yang berulang 2325 01:55:37,790 --> 01:55:40,090 blok, ulangi berikut tiga kali. 2326 01:55:40,090 --> 01:55:41,340 Ini ajaib kecil untuk saat ini. 2327 01:55:41,340 --> 01:55:43,050 Tapi ini akan mendapatkan lebih banyak, dan lebih akrab. 2328 01:55:43,050 --> 01:55:45,050 >> Dan itu akan mengulangi baris delapan tiga kali, 2329 01:55:45,050 --> 01:55:52,390 sehingga jika saya melakukan kompilasi ulang make batuk, dot slash batuk, batuk, batuk, batuk. 2330 01:55:52,390 --> 01:55:54,030 Masih bekerja dengan cara yang sama. 2331 01:55:54,030 --> 01:55:55,550 Jadi itu semua baik dan bagus. 2332 01:55:55,550 --> 01:55:58,200 Tapi itu tidak terlalu abstrak. 2333 01:55:58,200 --> 01:55:59,371 >> Ini sangat benar. 2334 01:55:59,371 --> 01:56:01,370 Tapi rasanya seperti ada bisa menjadi kesempatan, 2335 01:56:01,370 --> 01:56:03,750 seperti di dunia Scratch, untuk jenis start 2336 01:56:03,750 --> 01:56:07,530 untuk menambahkan beberapa semantik sini sehingga Saya tidak hanya memiliki beberapa untuk loop, 2337 01:56:07,530 --> 01:56:09,867 dan fungsi yang mengatakan batuk, atau apakah batuk. 2338 01:56:09,867 --> 01:56:10,450 Kamu tahu apa? 2339 01:56:10,450 --> 01:56:12,620 Biarkan saya mencoba untuk menjadi sedikit lebih dingin dari itu, 2340 01:56:12,620 --> 01:56:16,090 dan benar-benar menulis fungsi yang memiliki beberapa efek samping, menyebutnya batuk. 2341 01:56:16,090 --> 01:56:20,830 >> Dan dibutuhkan tidak ada input, dan mengembalikan nilai sebagai output. 2342 01:56:20,830 --> 01:56:22,680 Tapi kau tahu apa yang dilakukannya? 2343 01:56:22,680 --> 01:56:29,370 Itu tidak printf ini--, kutipan tanda kutip, batuk. 2344 01:56:29,370 --> 01:56:32,380 >> Dan sekarang di sini, aku akan untuk pergi ke depan dan untuk int, 2345 01:56:32,380 --> 01:56:36,070 i mendapat nol, i kurang dari 3, i plus plus. 2346 01:56:36,070 --> 01:56:39,770 Aku akan tidak melakukan printf, yang bisa dibilang implementasi tingkat rendah 2347 01:56:39,770 --> 01:56:40,270 rinci. 2348 01:56:40,270 --> 01:56:41,353 Saya tidak peduli bagaimana batuk. 2349 01:56:41,353 --> 01:56:43,240 Saya hanya ingin menggunakan fungsi batuk. 2350 01:56:43,240 --> 01:56:44,840 Dan aku hanya akan menelepon batuk. 2351 01:56:44,840 --> 01:56:46,204 >> Sekarang, perhatikan dikotomi. 2352 01:56:46,204 --> 01:56:49,370 Ketika Anda memanggil fungsi, jika Anda tidak ingin memberikan masukan, benar-benar baik-baik saja. 2353 01:56:49,370 --> 01:56:51,780 Hanya melakukan paren terbuka, dekat paren, dan Anda sudah selesai. 2354 01:56:51,780 --> 01:56:56,271 >> Ketika Anda mendefinisikan fungsi, atau mendeklarasikan prototipe fungsi ini, 2355 01:56:56,271 --> 01:56:58,770 jika Anda tahu sebelumnya itu tidak akan mengambil argumen, 2356 01:56:58,770 --> 01:57:01,170 mengatakan kekosongan pada mereka kurung sana. 2357 01:57:01,170 --> 01:57:05,660 Dan yang membuat tertentu yang Anda tidak akan sengaja menyalahgunakannya. 2358 01:57:05,660 --> 01:57:07,020 Biarkan aku pergi ke depan dan membuat batuk. 2359 01:57:07,020 --> 01:57:08,540 Dan, tentu saja, saya telah melakukan kesalahan. 2360 01:57:08,540 --> 01:57:10,410 >> Sialan, ada yang deklarasi implisit. 2361 01:57:10,410 --> 01:57:11,325 Tapi itu baik-baik saja. 2362 01:57:11,325 --> 01:57:12,590 Ini mudah memperbaikinya. 2363 01:57:12,590 --> 01:57:18,240 Aku hanya perlu prototipe lebih tinggi dalam file saya daripada aku benar-benar menggunakannya. 2364 01:57:18,240 --> 01:57:20,070 >> Jadi sekarang saya membuat batuk lagi, bagus. 2365 01:57:20,070 --> 01:57:20,790 Sekarang, ia bekerja. 2366 01:57:20,790 --> 01:57:22,930 Membuat batuk, batuk, batuk, batuk. 2367 01:57:22,930 --> 01:57:25,930 Jadi, Anda mungkin berpikir bahwa kita benar-benar lebih rekayasa masalah ini. 2368 01:57:25,930 --> 01:57:26,763 Dan, memang, kita. 2369 01:57:26,763 --> 01:57:28,870 Ini bukan yang baik calon program 2370 01:57:28,870 --> 01:57:31,930 pada saat ini untuk refactoring, dan melakukan apa yang 2371 01:57:31,930 --> 01:57:35,645 disebut hirarkis dekomposisi, di mana Anda mengambil beberapa kode, dan kemudian 2372 01:57:35,645 --> 01:57:38,790 Anda jenis faktor hal-hal, sehingga untuk menganggap lebih semantik kepada mereka, 2373 01:57:38,790 --> 01:57:40,930 dan menggunakannya kembali jangka akhirnya lagi. 2374 01:57:40,930 --> 01:57:43,490 Tapi itu sebuah blok bangunan ke arah program yang lebih canggih 2375 01:57:43,490 --> 01:57:45,600 bahwa kita akan mulai menulis sebelum panjang yang 2376 01:57:45,600 --> 01:57:50,090 memungkinkan kita untuk memiliki kosakata yang dapat digunakan untuk menulis kode yang lebih baik. 2377 01:57:50,090 --> 01:57:52,920 Dan, memang, mari kita lihat apakah kita tidak bisa menggeneralisasi ini lebih lanjut. 2378 01:57:52,920 --> 01:57:57,984 >> Tampaknya agak lumpuh yang saya, utama, perlu khawatir tentang ini darn untuk loop, 2379 01:57:57,984 --> 01:57:59,400 dan memanggil batuk lagi dan lagi. 2380 01:57:59,400 --> 01:58:03,050 Mengapa saya tidak bisa hanya memberitahu batuk, silahkan batuk tiga kali? 2381 01:58:03,050 --> 01:58:08,170 Dengan kata lain, kenapa aku tidak bisa hanya memberikan masukan untuk batuk dan melakukan hal ini? 2382 01:58:08,170 --> 01:58:11,270 >> Mengapa saya tidak bisa hanya mengatakan, di batuk utama tiga kali. 2383 01:58:11,270 --> 01:58:13,150 Dan sekarang, ini adalah jenis magis. 2384 01:58:13,150 --> 01:58:14,540 Ini sangat berulang di sini. 2385 01:58:14,540 --> 01:58:15,940 Dan itu, memang, langkah bayi. 2386 01:58:15,940 --> 01:58:19,250 >> Tapi kemampuan untuk mengatakan pada baris delapan, batuk tiga kali, 2387 01:58:19,250 --> 01:58:20,730 itu hanya jauh lebih mudah dibaca. 2388 01:58:20,730 --> 01:58:24,210 Dan, ditambah, saya tidak harus tahu atau peduli berapa batuk diimplementasikan. 2389 01:58:24,210 --> 01:58:26,460 Dan, memang, kemudian di Istilah dan untuk proyek-proyek akhir, 2390 01:58:26,460 --> 01:58:29,150 jika Anda menangani sebuah proyek dengan teman sekelas atau dua teman sekelas, 2391 01:58:29,150 --> 01:58:32,370 Anda akan menyadari bahwa Anda akan harus, atau ingin, membagi pekerjaan. 2392 01:58:32,370 --> 01:58:34,650 >> Dan Anda akan ingin memutuskan di muka, siapa yang akan melakukan apa, 2393 01:58:34,650 --> 01:58:35,483 dan di mana potongan? 2394 01:58:35,483 --> 01:58:37,520 Dan tidak akan menyenangkan jika Anda, misalnya, 2395 01:58:37,520 --> 01:58:40,100 mengambil alih penulisan utama, dilakukan. 2396 01:58:40,100 --> 01:58:43,470 Dan teman sekamar Anda, atau Anda mitra lebih umum, 2397 01:58:43,470 --> 01:58:45,230 mengurus pelaksanaan batuk. 2398 01:58:45,230 --> 01:58:49,540 >> Dan divisi ini, ini dinding abstraksi, 2399 01:58:49,540 --> 01:58:52,310 atau lapisan abstraksi jika Anda akan, super kuat, 2400 01:58:52,310 --> 01:58:55,480 karena terutama untuk yang lebih besar, program yang lebih kompleks dan sistem, 2401 01:58:55,480 --> 01:59:00,070 memungkinkan beberapa orang untuk membangun hal bersama-sama, dan akhirnya 2402 01:59:00,070 --> 01:59:02,680 menjahit pekerjaan mereka bersama-sama dengan cara ini. 2403 01:59:02,680 --> 01:59:05,332 Tapi, tentu saja, kita perlu sekarang memperbaiki batuk. 2404 01:59:05,332 --> 01:59:07,290 Kita perlu memberitahu batuk bahwa, hei, kau tahu apa? 2405 01:59:07,290 --> 01:59:11,230 Anda akan perlu untuk mengambil input-- jadi tidak batal, tetapi int dan sekarang. 2406 01:59:11,230 --> 01:59:15,170 Mari kita pergi ke depan dan dimasukkan ke dalam batuk int. i mendapat nol. 2407 01:59:15,170 --> 01:59:16,890 >> i kurang dari berapa kali. 2408 01:59:16,890 --> 01:59:18,550 Saya mengatakan tiga sebelumnya. 2409 01:59:18,550 --> 01:59:20,420 Tapi bukan itu yang saya inginkan. 2410 01:59:20,420 --> 01:59:25,520 Saya ingin batuk untuk digeneralisasi untuk mendukung sejumlah iterasi. 2411 01:59:25,520 --> 01:59:28,800 >> Jadi, memang, itu n yang saya inginkan, apa pun pengguna memberitahu saya. 2412 01:59:28,800 --> 01:59:31,620 Sekarang, saya bisa pergi ke depan dan mengatakan batuk cetak. 2413 01:59:31,620 --> 01:59:34,750 Dan tidak peduli apa nomor pengguna lewat di, 2414 01:59:34,750 --> 01:59:36,890 Aku akan iterate bahwa banyak kali. 2415 01:59:36,890 --> 01:59:39,160 >> Jadi pada akhir hari, Program identik. 2416 01:59:39,160 --> 01:59:42,820 Tetapi melihat semua hal ini bahkan bisa di file lain. 2417 01:59:42,820 --> 01:59:45,620 Memang, saya tidak tahu di saat bagaimana printf diimplementasikan. 2418 01:59:45,620 --> 01:59:47,980 >> Saya tidak tahu saat ini bagaimana mendapatkan string, atau mendapatkan int, atau mendapatkan mengambang 2419 01:59:47,980 --> 01:59:48,646 diimplementasikan. 2420 01:59:48,646 --> 01:59:50,930 Dan aku tidak ingin melihat mereka di layar saya. 2421 01:59:50,930 --> 01:59:55,320 Seperti itu, aku mulai fokus pada program saya, tidak fungsi-fungsi. 2422 01:59:55,320 --> 01:59:59,070 >> Dan, memang, segera setelah Anda mulai anjak kode seperti ini keluar, 2423 01:59:59,070 --> 02:00:01,397 bisa kita bahkan bergerak batuk ke file terpisah? 2424 02:00:01,397 --> 02:00:02,730 Orang lain bisa menerapkannya. 2425 02:00:02,730 --> 02:00:06,810 Dan Anda dan program Anda menjadi sangat indah, dan sangat mudah dibaca, 2426 02:00:06,810 --> 02:00:10,830 bisa dibilang, benar-benar empat program baris di sana. 2427 02:00:10,830 --> 02:00:13,510 >> Jadi mari kita pergi ke depan sekarang dan membuat satu perubahan lagi. 2428 02:00:13,510 --> 02:00:16,180 Perhatikan bahwa prototipe saya harus berubah di bagian atas. 2429 02:00:16,180 --> 02:00:18,390 Jadi biarkan aku memperbaikinya sehingga Saya tidak dimarahi. 2430 02:00:18,390 --> 02:00:22,580 >> Membuat batuk, biarkan aku menjalankan batuk sekali lebih, masih melakukan hal yang sama. 2431 02:00:22,580 --> 02:00:26,010 Tapi sekarang, melihat kami memiliki bahan untuk satu versi final. 2432 02:00:26,010 --> 02:00:26,940 Kamu tahu apa? 2433 02:00:26,940 --> 02:00:29,040 Saya tidak ingin hanya batuk, tentu. 2434 02:00:29,040 --> 02:00:30,802 Saya ingin memiliki sesuatu yang lebih umum. 2435 02:00:30,802 --> 02:00:31,510 Sehingga Anda tahu apa? 2436 02:00:31,510 --> 02:00:32,450 Saya ingin melakukan ini. 2437 02:00:32,450 --> 02:00:37,140 Saya ingin memiliki, seperti Scratch tidak, blok katakanlah, tapi bukan hanya 2438 02:00:37,140 --> 02:00:38,680 mengatakan sesuatu beberapa beberapa kali. 2439 02:00:38,680 --> 02:00:41,510 Saya ingin katakan string yang sangat spesifik. 2440 02:00:41,510 --> 02:00:43,850 Dan, karena itu, saya tidak ingin untuk hanya mengatakan batuk. 2441 02:00:43,850 --> 02:00:47,660 Saya ingin mengatakan apa pun string yang dilewatkan di. 2442 02:00:47,660 --> 02:00:49,960 >> Jadi perhatikan, saya sudah umum ini sehingga sekarang 2443 02:00:49,960 --> 02:00:53,110 katakanlah terasa seperti nama baik untuk ini, seperti Scratch, 2444 02:00:53,110 --> 02:00:55,530 membutuhkan dua argumen, tidak seperti Scratch. 2445 02:00:55,530 --> 02:00:56,570 Salah satunya adalah string. 2446 02:00:56,570 --> 02:00:57,300 Salah satunya adalah int. 2447 02:00:57,300 --> 02:00:58,130 >> Dan saya bisa beralih mereka. 2448 02:00:58,130 --> 02:01:00,713 Aku hanya jenis seperti ide mengatakan string pertama, dan kemudian 2449 02:01:00,713 --> 02:01:01,940 berapa kali kemudian. 2450 02:01:01,940 --> 02:01:03,970 Void berarti masih tidak kembali apa-apa. 2451 02:01:03,970 --> 02:01:06,428 Ini hanya sisi visual efek, seperti dengan [? Jordan,?] 2452 02:01:06,428 --> 02:01:08,240 efek samping verbal berteriak. 2453 02:01:08,240 --> 02:01:12,630 Masih melakukan sesuatu n kali, 0 sampai, tapi tidak sama dengan n. 2454 02:01:12,630 --> 02:01:14,540 Ini berarti n Total kali. 2455 02:01:14,540 --> 02:01:16,540 Dan kemudian hanya mencetak apa yang string. 2456 02:01:16,540 --> 02:01:19,060 Jadi aku benar-benar umum baris kode ini. 2457 02:01:19,060 --> 02:01:22,460 Jadi sekarang, bagaimana cara menerapkannya fungsi batuk? 2458 02:01:22,460 --> 02:01:25,520 >> Aku bisa melakukan batuk batal. 2459 02:01:25,520 --> 02:01:28,501 Dan aku masih dapat mengambil dalam bagaimana banyak kali Anda ingin batuk. 2460 02:01:28,501 --> 02:01:29,250 Tapi kau tahu apa? 2461 02:01:29,250 --> 02:01:31,240 Saya sekarang bisa menyepak bola untuk mengatakan. 2462 02:01:31,240 --> 02:01:36,540 >> Aku bisa menelepon mengatakan dengan Kata batuk, lewat di n. 2463 02:01:36,540 --> 02:01:40,410 Dan jika saya ingin juga menerapkan, hanya untuk bersenang-senang, fungsi bersin, 2464 02:01:40,410 --> 02:01:42,290 Aku bisa bersin beberapa beberapa kali. 2465 02:01:42,290 --> 02:01:47,300 Dan saya bisa tetap menggunakan kembali n, karena melihat bahwa m dalam konteks ini atau lingkup 2466 02:01:47,300 --> 02:01:49,470 hanya ada dalam fungsi ini. 2467 02:01:49,470 --> 02:01:52,767 >> Dan n dalam konteks ini hanya ada dalam fungsi ini di sini. 2468 02:01:52,767 --> 02:01:54,600 Jadi kita akan kembali ke masalah ini dari lingkup. 2469 02:01:54,600 --> 02:02:01,160 Dan di sini, aku hanya akan mengatakan, Achoo, dan kemudian n kali, semi-kolon. 2470 02:02:01,160 --> 02:02:04,340 >> Dan sekarang, aku hanya perlu meminjam Fungsi ini tanda tangan di sini. 2471 02:02:04,340 --> 02:02:06,290 Jadi batuk benar. 2472 02:02:06,290 --> 02:02:10,090 bersin Void benar sekarang. 2473 02:02:10,090 --> 02:02:12,390 >> Dan aku masih hanya perlu mengatakan. 2474 02:02:12,390 --> 02:02:18,990 Jadi aku akan mengatakan, katakanlah string s, int n, semi-kolon. 2475 02:02:18,990 --> 02:02:22,010 Jadi saya sudah over-rekayasa heck keluar dari program ini. 2476 02:02:22,010 --> 02:02:23,760 >> Dan ini tidak berarti ini 2477 02:02:23,760 --> 02:02:26,343 apa yang harus Anda lakukan ketika menulis bahkan yang paling sederhana program. 2478 02:02:26,343 --> 02:02:29,280 Mengambil sesuatu yang jelas benar-benar sederhana, benar-benar pendek, 2479 02:02:29,280 --> 02:02:31,800 dan re menerapkan-itu menggunakan terlalu banyak kode. 2480 02:02:31,800 --> 02:02:34,560 Tapi Anda benar-benar akan melihat, dan di Waktu melihat kembali pada contoh-contoh ini, 2481 02:02:34,560 --> 02:02:38,610 dan menyadari, oh, mereka adalah langkah-langkah kami mengambil untuk benar-benar generalisasi, 2482 02:02:38,610 --> 02:02:40,797 faktor sesuatu, sampai pada akhir hari 2483 02:02:40,797 --> 02:02:42,380 kode saya sebenarnya cukup masuk akal. 2484 02:02:42,380 --> 02:02:45,960 Karena jika saya ingin batuk tiga kali kemudian bersin tiga kali, 2485 02:02:45,960 --> 02:02:50,420 Saya hanya akan mengulangi ini, Program membuat batuk, dan menjalankan batuk. 2486 02:02:50,420 --> 02:02:53,620 Dan saya memiliki tiga batuk dan tiga bersin. 2487 02:02:53,620 --> 02:02:55,990 >> Dan jadi ini adalah dasar paradigma, jika Anda mau, 2488 02:02:55,990 --> 02:03:00,110 untuk bagaimana kita bisa pergi tentang benar-benar menerapkan program. 2489 02:03:00,110 --> 02:03:03,220 Tapi mari kita lihat sekarang apa itu kami sudah melakukan semua ini, 2490 02:03:03,220 --> 02:03:06,940 dan apa beberapa potongan terakhir berada di balik perintah sederhana ini. 2491 02:03:06,940 --> 02:03:09,620 Pada akhir hari, kami telah telah menggunakan dentang sebagai compiler kami. 2492 02:03:09,620 --> 02:03:11,494 Kami telah menulis sumber kode, mengubahnya 2493 02:03:11,494 --> 02:03:12,820 melalui dentang ke dalam kode mesin. 2494 02:03:12,820 --> 02:03:15,540 >> Dan kami telah menggunakan Membuat hanya untuk memfasilitasi keystrokes kami jadi 2495 02:03:15,540 --> 02:03:20,740 bahwa kita tidak harus ingat mereka mantra dari dentang itu sendiri. 2496 02:03:20,740 --> 02:03:22,640 Tapi apa yang membuat benar-benar melakukan? 2497 02:03:22,640 --> 02:03:24,750 Dan, pada gilirannya, apa yang Dentang benar-benar melakukan? 2498 02:03:24,750 --> 02:03:28,790 >> Ternyata, meskipun kami telah disederhanakan diskusi hari ini dengan mengatakan, 2499 02:03:28,790 --> 02:03:33,090 Anda mengambil kode sumber, lulus sebagai masukan ke compiler, yang memberi Anda 2500 02:03:33,090 --> 02:03:35,750 output mesin kode, ternyata ada ini 2501 02:03:35,750 --> 02:03:37,420 beberapa langkah yang berbeda dalam sana. 2502 02:03:37,420 --> 02:03:41,940 Dan kompilasi terjadi menjadi payung istilah untuk sejumlah langkah. 2503 02:03:41,940 --> 02:03:43,970 Tapi mari kita menggoda out ini benar-benar cepat. 2504 02:03:43,970 --> 02:03:48,070 >> Ternyata bahwa kita sudah melakukan lebih banyak hal setiap kali saya menjalankan program, 2505 02:03:48,070 --> 02:03:50,990 atau setiap kali saya mengkompilasi program hari ini. 2506 02:03:50,990 --> 02:03:55,020 Jadi preprocessing mengacu ini-- apapun dalam program C, 2507 02:03:55,020 --> 02:03:58,720 seperti yang akan kita lihat lagi dan lagi, yang dimulai dengan simbol hash ini, 2508 02:03:58,720 --> 02:04:03,320 atau simbol hashtag sini, berarti itu direktif preprocessor. 2509 02:04:03,320 --> 02:04:07,330 Itu berarti, dalam kasus ini, hey komputer, melakukan sesuatu dengan file ini 2510 02:04:07,330 --> 02:04:09,430 sebelum Anda benar-benar mengkompilasi kode sendiri. 2511 02:04:09,430 --> 02:04:15,220 >> Dalam hal ini, hash termasuk adalah, dasarnya, cara C mengatakan, 2512 02:04:15,220 --> 02:04:19,325 hey komputer, pergi mendapatkan isi dari CS50.h dan tempelkan di sini. 2513 02:04:19,325 --> 02:04:22,170 Hey komputer, pergi mendapatkan isi standar io.h, 2514 02:04:22,170 --> 02:04:24,690 dimanapun yang ada di hard drive, paste di sini. 2515 02:04:24,690 --> 02:04:27,390 Jadi hal-hal terjadi pertama selama preprocessing. 2516 02:04:27,390 --> 02:04:28,880 >> Dan dentang melakukan semua ini untuk kita. 2517 02:04:28,880 --> 02:04:30,510 Dan itu tidak begitu darn cepat, Anda bahkan tidak 2518 02:04:30,510 --> 02:04:32,000 melihat empat hal yang berbeda terjadi. 2519 02:04:32,000 --> 02:04:34,100 Tapi itu langkah yang pertama. 2520 02:04:34,100 --> 02:04:35,560 >> Apa yang sebenarnya terjadi? 2521 02:04:35,560 --> 02:04:38,320 Nah, resmi berikutnya langkah kompilasi. 2522 02:04:38,320 --> 02:04:40,385 Dan ternyata kompilasi program 2523 02:04:40,385 --> 02:04:44,060 secara teknis berarti pergi dari kode sumber, hal-hal yang kami telah 2524 02:04:44,060 --> 02:04:47,890 telah menulis hari ini, untuk sesuatu disebut kode assembly, sesuatu 2525 02:04:47,890 --> 02:04:49,260 yang terlihat sedikit berbeda. 2526 02:04:49,260 --> 02:04:51,050 >> Dan, pada kenyataannya, kita bisa melihat ini sangat cepat. 2527 02:04:51,050 --> 02:04:53,890 Biarkan aku benar-benar pergi ke IDE saya. 2528 02:04:53,890 --> 02:04:58,050 Biarkan aku pergi ke depan dan hello.c terbuka, yang adalah program pertama yang kita 2529 02:04:58,050 --> 02:04:59,120 mulai hari ini. 2530 02:04:59,120 --> 02:05:04,130 Dan biarkan aku pergi ke depan dan menjalankan dentang sebuah sedikit berbeda, dentang-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 yang benar-benar akan memberi saya lagi hello.s berkas. 2532 02:05:07,720 --> 02:05:10,330 >> Dan kita mungkin akan tidak pernah lagi melihat kode semacam ini. 2533 02:05:10,330 --> 02:05:13,030 Jika Anda mengambil tingkat yang lebih rendah kelas sistem seperti CS61, 2534 02:05:13,030 --> 02:05:14,920 Anda akan melihat lebih banyak dari kode semacam ini. 2535 02:05:14,920 --> 02:05:17,020 Tapi ini adalah bahasa assembly. 2536 02:05:17,020 --> 02:05:22,050 Ini adalah bahasa assembly X86 bahwa CPU yang mendasari 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE benar-benar mengerti. 2538 02:05:24,460 --> 02:05:27,060 >> Dan samar seperti halnya terlihat, itu adalah sesuatu 2539 02:05:27,060 --> 02:05:29,180 komputer mengerti cukup baik. 2540 02:05:29,180 --> 02:05:30,790 Sub q, ini adalah kurangi a. 2541 02:05:30,790 --> 02:05:31,660 Ada gerakan. 2542 02:05:31,660 --> 02:05:35,730 >> Ada yang memanggil fungsi di sini, x oring, gerakan, add, pop, 2543 02:05:35,730 --> 02:05:36,430 kembali. 2544 02:05:36,430 --> 02:05:38,850 Jadi ada beberapa yang sangat instruksi tingkat rendah 2545 02:05:38,850 --> 02:05:41,280 bahwa CPU memahami bahwa Saya singgung sebelumnya. 2546 02:05:41,280 --> 02:05:43,100 Itulah yang Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Ada pola nol dan orang-orang yang 2548 02:05:45,030 --> 02:05:51,800 memetakan ini arcanely worded, tapi agak baik-bernama, petunjuk, 2549 02:05:51,800 --> 02:05:52,780 boleh dikatakan. 2550 02:05:52,780 --> 02:05:54,780 Itulah yang terjadi ketika Anda mengkompilasi kode Anda. 2551 02:05:54,780 --> 02:05:58,560 Anda mendapatkan perakitan bahasa dari itu, yang 2552 02:05:58,560 --> 02:06:04,680 berarti langkah ketiga adalah untuk merakit kode assembly ke dalam, akhirnya, 2553 02:06:04,680 --> 02:06:09,080 mesin nol code-- dan orang-orang, bukan teks yang kita hanya melihat beberapa saat yang lalu. 2554 02:06:09,080 --> 02:06:13,370 >> Jadi pre-processing apakah itu menemukan dan mengganti, dan beberapa hal lainnya. 2555 02:06:13,370 --> 02:06:16,430 Kompilasi mengambil sumber Anda kode dari C, source code 2556 02:06:16,430 --> 02:06:18,980 bahwa kita menulis, untuk perakitan kode yang kita hanya melirik. 2557 02:06:18,980 --> 02:06:22,170 Perakitan mengambil perakitan yang kode untuk nol dan yang 2558 02:06:22,170 --> 02:06:24,680 bahwa CPU benar-benar akan memahami pada akhir hari. 2559 02:06:24,680 --> 02:06:27,630 Dan menghubungkan adalah langkah terakhir yang terjadi untuk us-- lagi, 2560 02:06:27,630 --> 02:06:29,830 begitu cepat kami bahkan tidak notice-- yang mengatakan, 2561 02:06:29,830 --> 02:06:32,460 hey komputer, mengambil semua nol dan orang-orang yang 2562 02:06:32,460 --> 02:06:36,750 dihasilkan dari kompilasi kode Daud, dan fungsi utamanya dalam hal ini. 2563 02:06:36,750 --> 02:06:39,160 >> Dan hey komputer, pergi mendapatkan semua nol dan satu 2564 02:06:39,160 --> 02:06:42,180 bahwa staf CS50 menulis dalam perpustakaan CS50. 2565 02:06:42,180 --> 02:06:43,440 Campur mereka dengan Daud. 2566 02:06:43,440 --> 02:06:46,648 Dan hey komputer, pergi mendapatkan semua nol dan orang-orang yang orang lain menulis tahun 2567 02:06:46,648 --> 02:06:47,470 lalu untuk printf. 2568 02:06:47,470 --> 02:06:49,880 Dan menambahkan mereka ke dalam semuanya, sehingga kita sudah 2569 02:06:49,880 --> 02:06:52,870 mendapat nol saya dan orang-orang, yang CS50 staf nol dan satu, 2570 02:06:52,870 --> 02:06:55,370 nol printf dan orang-orang, dan apa pun yang kita gunakan. 2571 02:06:55,370 --> 02:07:00,410 >> Mereka semua mendapatkan digabungkan bersama-sama menjadi satu program yang disebut, dalam hal ini, halo. 2572 02:07:00,410 --> 02:07:03,141 Jadi untuk selanjutnya, kita hanya akan menggunakan kompilasi kata. 2573 02:07:03,141 --> 02:07:06,390 Dan kami akan mengambil begitu saja bahwa ketika kita katakan, mengkompilasi program Anda, itu berarti, 2574 02:07:06,390 --> 02:07:08,849 hey melakukan pre-processing, perakitan, dan menghubungkan. 2575 02:07:08,849 --> 02:07:11,890 Tapi sebenarnya ada beberapa hal menarik terjadi di sana di bawah kap mesin. 2576 02:07:11,890 --> 02:07:13,723 Dan terutama jika Anda mendapatkan penasaran beberapa waktu, 2577 02:07:13,723 --> 02:07:15,900 Anda dapat mulai menyodok sekitar pada tingkat yang lebih rendah ini. 2578 02:07:15,900 --> 02:07:19,660 Tapi untuk saat ini, menyadari bahwa antara takeaways untuk hari ini 2579 02:07:19,660 --> 02:07:23,420 adalah cukup sederhana mulai dari proses, 2580 02:07:23,420 --> 02:07:26,700 mendapatkan nyaman dengan sesuatu seperti dunia halo. 2581 02:07:26,700 --> 02:07:29,575 Memang, sebagian besar dari apa yang kita lakukan hari ini tentu tidak akan tenggelam di super cepat. 2582 02:07:29,575 --> 02:07:31,491 Dan itu akan mengambil beberapa waktu, dan beberapa latihan. 2583 02:07:31,491 --> 02:07:33,864 Dan kemungkinan besar, Anda akan menyortir dari ingin memukul keyboard Anda 2584 02:07:33,864 --> 02:07:34,780 atau berteriak pada layar. 2585 02:07:34,780 --> 02:07:35,880 Dan semua itu OK. 2586 02:07:35,880 --> 02:07:38,320 Meskipun, mungkin mencoba untuk tidak melakukannya di perpustakaan begitu banyak. 2587 02:07:38,320 --> 02:07:40,820 >> Dan akhirnya, Anda akan akan mampu meskipun, untuk memulai 2588 02:07:40,820 --> 02:07:44,580 melihat pola, baik dalam kode yang baik bahwa Anda telah ditulis dan di kesalahan 2589 02:07:44,580 --> 02:07:45,370 yang telah Anda buat. 2590 02:07:45,370 --> 02:07:48,965 Dan banyak seperti proses menjadi TF atau CA adalah seperti, 2591 02:07:48,965 --> 02:07:51,590 Anda akan mulai mendapatkan yang lebih baik dan lebih baik dalam melihat pola tersebut, 2592 02:07:51,590 --> 02:07:53,774 dan hanya memecahkan Anda masalah sendiri akhirnya. 2593 02:07:53,774 --> 02:07:56,940 Sementara itu, akan ada banyak dari kita untuk memberikan dukungan Anda, dan membuat Anda 2594 02:07:56,940 --> 02:07:57,481 melalui ini. 2595 02:07:57,481 --> 02:07:59,450 Dan di write-ups untuk semua masalah 2596 02:07:59,450 --> 02:08:01,366 akan Anda akan dipandu melalui semua perintah 2597 02:08:01,366 --> 02:08:05,330 bahwa aku pasti tahu dari banyak latihan sekarang, 2598 02:08:05,330 --> 02:08:07,380 tapi mungkin telah terbang di atas kepala seseorang untuk saat ini. 2599 02:08:07,380 --> 02:08:08,580 Dan itu benar-benar baik-baik saja. 2600 02:08:08,580 --> 02:08:11,230 >> Tapi, pada akhirnya, Anda akan untuk mulai melihat pola yang muncul. 2601 02:08:11,230 --> 02:08:14,260 Dan setelah Anda melewati semua Rincian bodoh, seperti tanda kurung, 2602 02:08:14,260 --> 02:08:16,710 dan kurung kurawal, dan semi-titik dua, dan hal-hal yang, terus terang, 2603 02:08:16,710 --> 02:08:19,360 yang sama sekali tidak intelektual yang menarik. 2604 02:08:19,360 --> 02:08:22,690 Dan itu bukan tujuan mengambil setiap kelas pengantar. 2605 02:08:22,690 --> 02:08:24,410 Ini adalah ide yang akan menjadi masalah. 2606 02:08:24,410 --> 02:08:26,659 >> Ini loop, dan kondisi, dan fungsi, 2607 02:08:26,659 --> 02:08:30,552 dan lebih kuat abstraksi, dan anjak kode, 2608 02:08:30,552 --> 02:08:33,510 dan desain yang baik, dan baik gaya, dan akhirnya kebenaran yang 2609 02:08:33,510 --> 02:08:37,330 kode Anda, itu akhirnya akan paling penting. 2610 02:08:37,330 --> 02:08:40,925 Jadi minggu depan, kita akan mengambil ini ide-ide yang kita lihat pada Scratch 2611 02:08:40,925 --> 02:08:42,800 dan sekarang telah diterjemahkan C. Dan kita akan mulai 2612 02:08:42,800 --> 02:08:45,740 untuk memperkenalkan pertama domain dunia nyata saja ini. 2613 02:08:45,740 --> 02:08:50,140 >> Kami akan fokus pada dunia keamanan, dan lebih khusus kriptografi, 2614 02:08:50,140 --> 02:08:51,980 seni berebut informasi. 2615 02:08:51,980 --> 02:08:54,000 Dan di antara yang pertama masalah Anda sendiri 2616 02:08:54,000 --> 02:08:56,840 akan mendapatkan untuk menulis di luar bermain dengan beberapa sintaks 2617 02:08:56,840 --> 02:08:59,880 dan memecahkan beberapa logis masalah, akhirnya tak lama, 2618 02:08:59,880 --> 02:09:03,960 adalah untuk benar-benar berebut, atau mengenkripsi, dan akhirnya mendekripsi informasi. 2619 02:09:03,960 --> 02:09:06,470 Dan segala sesuatu yang kita lakukan hari ini, akan cukup rendah 2620 02:09:06,470 --> 02:09:09,190 tingkat, hanya akan memungkinkan kita untuk mengambil satu, dan satu, 2621 02:09:09,190 --> 02:09:13,550 dan satu langkah lebih di atas menuju menulis kode yang paling menarik belum. 2622 02:09:13,550 --> 02:09:15,050 >> Jadi lebih pada minggu depan. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [VIDEO PEMUTARAN] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> -Apa Yang bisa Anda ceritakan tentang terakhir kali Anda melihatnya? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Apa Yang bisa saya katakan, benar-benar? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Maksudku, itu seperti yang lain latihan pra-produksi, 2631 02:09:35,340 --> 02:09:40,510 kecuali ada sesuatu katanya di akhir yang terjebak dengan saya. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -Ini Adalah CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -Itu Memotong semua orang, pekerjaan yang besar pada latihan. 2636 02:09:52,190 --> 02:09:53,070 >> siang -yaitu ini? 2637 02:09:53,070 --> 02:09:54,986 >> Yeah, kau dan aku bisa ambil sandwich dalam sedikit. 2638 02:09:54,986 --> 02:09:58,380 Saya hanya berdiskusi dengan David benar-benar cepat. 2639 02:09:58,380 --> 02:09:59,160 David? 2640 02:09:59,160 --> 02:10:01,260 David? 2641 02:10:01,260 --> 02:10:03,110 >> [END PEMUTARAN]