1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [MUZIK bermain] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 DAVID J. MALAN: Baiklah. 5 00:00:12,660 --> 00:00:15,590 Ini adalah CS50, dan ini adalah permulaan minggu dua. 6 00:00:15,590 --> 00:00:19,120 Jadi mari kita mulakan hari ini dengan pepijat. 7 00:00:19,120 --> 00:00:20,974 Bug A, sudah tentu, adalah kesilapan dalam program, 8 00:00:20,974 --> 00:00:22,890 dan anda akan mendapat sangat biasa dengan konsep ini 9 00:00:22,890 --> 00:00:26,050 jika anda tidak pernah diprogramkan sebelum. pset0 dan kini pset1. 10 00:00:26,050 --> 00:00:29,280 Tetapi mari kita mempertimbangkan sesuatu mudah sedikit pada mulanya. 11 00:00:29,280 --> 00:00:32,189 Program ini di sini bahawa saya melemparkan bersama terlebih dahulu, 12 00:00:32,189 --> 00:00:37,280 dan saya mendakwa bahawa ini perlu mencetak 10 bintang pada skrin menggunakan printf, 13 00:00:37,280 --> 00:00:41,020 tetapi ia nampaknya buggy dalam beberapa cara. 14 00:00:41,020 --> 00:00:45,370 >> Memandangkan spesifikasi yang yang ia perlu mencetak 10 bintang, 15 00:00:45,370 --> 00:00:50,230 tetapi ia tidak nampaknya, apa yang anda akan menuntut adalah pepijat? 16 00:00:50,230 --> 00:00:52,004 Yeah? 17 00:00:52,004 --> 00:00:54,420 Jadi ia adalah satu off oleh satu kesilapan, dan apa yang anda maksudkan dengan itu? 18 00:00:54,420 --> 00:01:00,991 19 00:01:00,991 --> 00:01:01,490 OK. 20 00:01:01,490 --> 00:01:09,820 21 00:01:09,820 --> 00:01:10,410 Cemerlang. 22 00:01:10,410 --> 00:01:13,930 Oleh itu, kita telah ditentukan yang memulakan nilai sifar untuk i, 23 00:01:13,930 --> 00:01:18,399 dan kami telah ditentukan nilai n 10, tetapi kita telah menggunakan kurang daripada atau sama dengan. 24 00:01:18,399 --> 00:01:21,190 Dan sebab ini adalah dua watak-watak dan bukan hanya satu simbol, 25 00:01:21,190 --> 00:01:22,630 seperti dalam buku matematik, adalah bahawa anda tidak mempunyai 26 00:01:22,630 --> 00:01:24,880 satu cara untuk menyatakan yang satu bersamaan watak. 27 00:01:24,880 --> 00:01:28,450 >> Ini bermakna kurang daripada, tetapi jika anda mula mengira pada sifar, 28 00:01:28,450 --> 00:01:31,690 tetapi anda mengira semua jalan sehingga melalui dan sama dengan 10, 29 00:01:31,690 --> 00:01:34,170 anda sudah tentu akan mengira 11 perkara dalam jumlah. 30 00:01:34,170 --> 00:01:35,900 Dan anda akan mencetak 11 bintang. 31 00:01:35,900 --> 00:01:37,990 Jadi apa yang mungkin menjadi satu penyelesaian untuk ini? 32 00:01:37,990 --> 00:01:39,970 Yeah? 33 00:01:39,970 --> 00:01:43,980 >> Jadi hanya melaraskan kurang daripada atau sama dengan hanya kurang daripada, 34 00:01:43,980 --> 00:01:46,250 dan ada, saya menuntut, mungkin penyelesaian yang lain juga. 35 00:01:46,250 --> 00:01:47,210 Apa yang mungkin sahaja yang anda lakukan? 36 00:01:47,210 --> 00:01:48,590 Yeah? 37 00:01:48,590 --> 00:01:53,660 >> Jadi bermula menyamai kepada 1, dan meninggalkan yang kurang daripada atau sama dengan. 38 00:01:53,660 --> 00:01:56,187 Dan terus terang saya akan menuntut itu, bagi seorang manusia biasa, 39 00:01:56,187 --> 00:01:57,770 ini mungkin lebih mudah. 40 00:01:57,770 --> 00:02:00,280 Mula mengira pada 1 dan mengira sehingga melalui 10. 41 00:02:00,280 --> 00:02:01,690 Pada dasarnya melakukan apa yang anda maksudkan. 42 00:02:01,690 --> 00:02:04,010 >> Tetapi realitinya adalah dalam pengaturcaraan, seperti yang kita lihat, 43 00:02:04,010 --> 00:02:07,598 ahli-ahli sains komputer dan pengaturcara umumnya mula mengira pada sifar. 44 00:02:07,598 --> 00:02:09,389 Dan sebagainya itu baik sekali anda membiasakan diri dengannya. 45 00:02:09,389 --> 00:02:12,640 Keadaan anda akan umumnya menjadi sesuatu yang seperti kurang daripada. 46 00:02:12,640 --> 00:02:14,910 Jadi hanya yang logik ralat yang kita dapat sekarang 47 00:02:14,910 --> 00:02:17,990 menetapkan dan akhirnya susun semula ini dan mendapatkan hanya 10. 48 00:02:17,990 --> 00:02:19,610 >> Nah bagaimana pula pepijat ini di sini? 49 00:02:19,610 --> 00:02:24,200 Di sini, sekali lagi, saya menuntut bahawa saya mempunyai matlamat untuk mencetak 10 stars-- 50 00:02:24,200 --> 00:02:28,140 satu bagi setiap baris masa ini, tetapi ia tidak. 51 00:02:28,140 --> 00:02:30,940 Sebelum kita mencadangkan apa menetapkan adalah, apakah ini 52 00:02:30,940 --> 00:02:34,640 mencetak visual jika saya untuk menyusun dan menjalankan program ini yang anda fikir? 53 00:02:34,640 --> 00:02:35,140 Yeah? 54 00:02:35,140 --> 00:02:38,360 55 00:02:38,360 --> 00:02:38,860 >> Star. 56 00:02:38,860 --> 00:02:41,690 Jadi semua bintang pada baris yang sama adalah apa yang saya dengar, 57 00:02:41,690 --> 00:02:43,391 dan kemudian watak barisan baru. 58 00:02:43,391 --> 00:02:44,140 Jadi mari kita cuba itu. 59 00:02:44,140 --> 00:02:48,710 Oleh itu, kereta-1, memasuki, dan saya melihat arahan yang dilafaz 60 00:02:48,710 --> 00:02:50,090 bahawa kita bercakap tentang masa lalu. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, dan sesungguhnya saya lihat semua 10 bintang pada baris yang sama walaupun saya menuntut 62 00:02:55,180 --> 00:02:58,690 dalam penentuan saya hanya komen di atas kod yang saya bertujuan untuk melakukan satu per 63 00:02:58,690 --> 00:02:59,230 talian. 64 00:02:59,230 --> 00:03:00,580 Tetapi ini kelihatan betul. 65 00:03:00,580 --> 00:03:04,620 >> Sekarang talian 15 ia kelihatan seperti saya mencetak bintang, dan kemudian talian 16 66 00:03:04,620 --> 00:03:06,620 ia kelihatan seperti saya percetakan watak talian baru, 67 00:03:06,620 --> 00:03:09,560 dan mereka kedua-dua dilekukan jadi Saya di dalam gelung dengan jelas. 68 00:03:09,560 --> 00:03:13,610 Jadi tidak perlu saya lakukan bintang, baru talian, bintang, baris baru, bintang, barisan baru? 69 00:03:13,610 --> 00:03:14,110 Ya? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Ya, tidak seperti bahasa seperti Python, jika anda sudah biasa, 72 00:03:21,240 --> 00:03:23,540 lekukan tidak perkara itu kepada komputer. 73 00:03:23,540 --> 00:03:25,280 Ia hanya penting kepada manusia. 74 00:03:25,280 --> 00:03:29,860 Jadi garis manakala di sini saya telah mencipta 15 dan 16-- yang kelihatan indah, 75 00:03:29,860 --> 00:03:31,330 tetapi komputer itu tidak peduli. 76 00:03:31,330 --> 00:03:34,640 Komputer mengambil berat tentang sebenarnya mempunyai pendakap kerinting 77 00:03:34,640 --> 00:03:36,310 sekitar ini baris kod. 78 00:03:36,310 --> 00:03:39,520 >> Jadi bahawa itu clear-- seperti dalam Scratch-- bahawa kedua-dua baris kod 79 00:03:39,520 --> 00:03:40,450 perlu dilaksanakan. 80 00:03:40,450 --> 00:03:44,390 Seperti salah satu daripada orang-orang kuning teka-teki Scratch keping lagi dan lagi dan lagi. 81 00:03:44,390 --> 00:03:50,920 >> Jadi sekarang jalankan semula jika saya ini program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Saya mempunyai kesilapan sekarang. 83 00:03:51,770 --> 00:03:54,212 Apa yang saya lupa untuk lakukan? 84 00:03:54,212 --> 00:03:55,420 Yeah, jadi saya tidak menyusun ia. 85 00:03:55,420 --> 00:03:56,740 Oleh itu, kereta-2. 86 00:03:56,740 --> 00:03:59,840 Tiada fail seperti itu kerana saya tidak sebenarnya menyusun versi kedua. 87 00:03:59,840 --> 00:04:04,860 Jadi sekarang yang menarik tidak diisytiharkan tidak variable-- 2. 88 00:04:04,860 --> 00:04:05,510 Kami lakukan 1. 89 00:04:05,510 --> 00:04:11,050 Membuat kereta-1-- ./buggy-1-- dan kini setiap daripada mereka adalah pada baris yang sama. 90 00:04:11,050 --> 00:04:13,880 >> Sekarang terdapat pengecualian kepada tuntutan ini sepatutnya saya 91 00:04:13,880 --> 00:04:15,520 yang anda perlukan ini pendakap kerinting. 92 00:04:15,520 --> 00:04:20,160 Bilakah ia sebenarnya OK-- jika anda mempunyai perasan dalam seksyen atau textbooks-- 93 00:04:20,160 --> 00:04:22,130 untuk meninggalkan pendakap kerinting? 94 00:04:22,130 --> 00:04:22,630 Yeah? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Tepat sekali. 97 00:04:26,870 --> 00:04:28,940 Apabila terdapat hanya satu baris kod yang anda 98 00:04:28,940 --> 00:04:32,830 mahu dikaitkan dengan gelung seperti dalam contoh pertama kami. 99 00:04:32,830 --> 00:04:36,380 Ia adalah sempurna yang sah untuk meninggalkan pendakap kerinting 100 00:04:36,380 --> 00:04:40,310 seperti jenis kemudahan yang dari pengkompil kepada anda. 101 00:04:40,310 --> 00:04:40,810 Yeah? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Soalan yang baik. 104 00:04:43,930 --> 00:04:45,500 Adakah ia dianggap sebagai ralat gaya? 105 00:04:45,500 --> 00:04:49,340 Kami akan promote-- seperti dalam CS50 panduan gaya, URL yang mana 106 00:04:49,340 --> 00:04:51,926 adalah dalam pset1-- yang sentiasa menggunakan pendakap kerinting. 107 00:04:51,926 --> 00:04:53,550 Sudah tentu jika anda baru kepada pengaturcaraan. 108 00:04:53,550 --> 00:04:56,800 Realitinya adalah kita tidak akan melarang anda 109 00:04:56,800 --> 00:04:58,680 daripada melakukan kemudahan ini. 110 00:04:58,680 --> 00:05:00,846 Tetapi jika anda hanya mendapat ke dalam buaian perkara, 111 00:05:00,846 --> 00:05:04,020 benar-benar hanya sentiasa menggunakan kerinting pendakap sehingga anda biasa itu. 112 00:05:04,020 --> 00:05:04,640 Soalan yang baik. 113 00:05:04,640 --> 00:05:05,320 >> Baiklah. 114 00:05:05,320 --> 00:05:07,660 Jadi yang dahulu pepijat. 115 00:05:07,660 --> 00:05:09,190 Sekurang-kurangnya dalam sesuatu yang agak mudah. 116 00:05:09,190 --> 00:05:11,260 Namun anda mungkin rasa ini agak asas, bukan? 117 00:05:11,260 --> 00:05:13,635 Ini adalah semacam minggu pertama untuk melihat bahasa 118 00:05:13,635 --> 00:05:14,890 seperti, lihat pepijat anda di dalamnya. 119 00:05:14,890 --> 00:05:17,250 Tetapi realitinya ini adalah sebenarnya wakil 120 00:05:17,250 --> 00:05:20,310 beberapa masalah yang cukup menakutkan yang boleh timbul dalam dunia sebenar. 121 00:05:20,310 --> 00:05:23,530 >> Jadi sebahagian daripada anda mungkin ingat jika anda mengikuti berita teknologi, 122 00:05:23,530 --> 00:05:25,740 atau mungkin juga ditangkap angin ini pada bulan Februari 123 00:05:25,740 --> 00:05:29,434 ini tahun lalu bahawa Apple mempunyai membuat sedikit kesilapan dalam kedua-dua IOS, 124 00:05:29,434 --> 00:05:31,350 sistem operasi pada telefon mereka, dan juga 125 00:05:31,350 --> 00:05:34,220 Mac OS, sistem operasi pada komputer meja dan komputer riba. 126 00:05:34,220 --> 00:05:36,480 Dan anda melihat tajuk seperti ini. 127 00:05:36,480 --> 00:05:41,120 Dan selepas itu, Apple berjanji untuk menetapkan pepijat ini, 128 00:05:41,120 --> 00:05:45,950 dan dengan cepat telah menetapkan dalam IOS, tetapi akhirnya tetap dalam Mac OS 129 00:05:45,950 --> 00:05:46,810 juga. 130 00:05:46,810 --> 00:05:50,370 >> Sekarang tiada tajuk ini sahaja benar-benar mendedahkan apa masalah asas adalah, 131 00:05:50,370 --> 00:05:55,640 tetapi bug yang telah akhirnya dikurangkan kepada bug dalam SSL, soket selamat lapisan. 132 00:05:55,640 --> 00:05:57,390 Dan cerita panjang pendek, ini adalah perisian 133 00:05:57,390 --> 00:06:01,030 bahawa pelayar kita dan lain-lain perisian yang digunakan untuk melakukan apa? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Jika saya berkata adalah SSL yang terlibat, setiap kali anda 136 00:06:06,860 --> 00:06:13,920 melawat URL yang bermula dengan HTTPS, apa yang kemudian mungkin SSL berkaitan dengan? 137 00:06:13,920 --> 00:06:14,580 Penyulitan. 138 00:06:14,580 --> 00:06:16,470 Oleh itu, kita akan bercakap tentang ini pada hari-hari yang akan datang. 139 00:06:16,470 --> 00:06:18,750 Penyulitan, seni berebut maklumat. 140 00:06:18,750 --> 00:06:22,200 >> Tetapi cerita panjang pendek, Apple kadang-kadang yang lalu telah membuat kesilapan 141 00:06:22,200 --> 00:06:25,970 dalam pelaksanaannya SSL, yang perisian yang akhirnya melaksanakan 142 00:06:25,970 --> 00:06:30,120 URL seperti HTTPS atau max sambungan sana. 143 00:06:30,120 --> 00:06:32,850 Keputusan ini adalah bahawa anda sambungan boleh berpotensi 144 00:06:32,850 --> 00:06:33,920 dipintas. 145 00:06:33,920 --> 00:06:37,130 Dan sambungan anda adalah tidak semestinya disulitkan 146 00:06:37,130 --> 00:06:40,350 jika anda mempunyai beberapa lelaki yang buruk di antara anda dan laman web destinasi yang 147 00:06:40,350 --> 00:06:42,170 tahu bagaimana untuk mengambil kesempatan daripada ini. 148 00:06:42,170 --> 00:06:45,090 >> Kini Apple akhirnya mencatatkan yang menetapkan untuk ini akhirnya, 149 00:06:45,090 --> 00:06:46,920 dan keterangan daripada menetapkan mereka adalah ini. 150 00:06:46,920 --> 00:06:49,878 Pengangkutan yang gagal untuk mengesahkan kesahihan sambungan. 151 00:06:49,878 --> 00:06:52,920 Isu itu ditangani oleh memulihkan hilang langkah-langkah pengesahan. 152 00:06:52,920 --> 00:06:57,250 >> Jadi ini adalah penjelasan yang sangat beralun tangan hanya untuk mengatakan bahawa kita kacau. 153 00:06:57,250 --> 00:07:00,920 Terdapat literal satu baris kod yang merupakan kereta 154 00:07:00,920 --> 00:07:05,130 dalam pelaksanaannya SSL, dan jika anda pergi ke dalam talian dan mencari ini 155 00:07:05,130 --> 00:07:07,210 anda sebenarnya boleh mencari kod sumber asal. 156 00:07:07,210 --> 00:07:11,960 Sebagai contoh, ini adalah pukulan skrin hanya sebahagian fail yang agak besar, 157 00:07:11,960 --> 00:07:15,965 tetapi ini adalah fungsi yang pada zahirnya dipanggil SSL mengesahkan pelayan tanda pertukaran utama. 158 00:07:15,965 --> 00:07:17,840 Dan ia mengambil sekumpulan hujah-hujah dan input. 159 00:07:17,840 --> 00:07:20,298 Dan kami tidak akan memberi tumpuan terlalu banyak pada minutia di sana, 160 00:07:20,298 --> 00:07:24,390 tetapi jika anda memberi tumpuan kepada kod dalam daripada yang paling atas function-- mari 161 00:07:24,390 --> 00:07:25,590 zum dalam pada itu. 162 00:07:25,590 --> 00:07:28,140 Anda mungkin sudah mengesyaki apa kesilapan mungkin 163 00:07:28,140 --> 00:07:31,230 menjadi walaupun anda tidak tahu akhirnya apa yang anda cari di. 164 00:07:31,230 --> 00:07:35,924 Ada jenis anomali satu di sini, iaitu apa? 165 00:07:35,924 --> 00:07:38,940 >> Yeah, saya tidak benar-benar suka rupa dua goto gagal. 166 00:07:38,940 --> 00:07:42,060 Terus terang, saya tidak benar-benar tahu apa yang goto gagal-apa, tetapi mempunyai dua daripada mereka 167 00:07:42,060 --> 00:07:42,810 kembali ke belakang. 168 00:07:42,810 --> 00:07:45,290 Bahawa hanya jenis menggosoknya saya intelek dengan cara yang salah, 169 00:07:45,290 --> 00:07:48,910 dan sememangnya jika kita zoom ke hanya orang-orang garisan, ini adalah C. 170 00:07:48,910 --> 00:07:52,220 >> Jadi banyak kod Apple adalah sendiri yang ditulis dalam C, 171 00:07:52,220 --> 00:07:55,780 dan ini nampaknya adalah benar-benar equivalent-- 172 00:07:55,780 --> 00:07:59,060 tidak dengan lekukan cantik versi, tetapi jika anda menyedari hakikat 173 00:07:59,060 --> 00:08:02,560 bahawa tidak ada pendakap kerinting, apa Apple benar-benar menulis adalah kod yang kelihatan 174 00:08:02,560 --> 00:08:03,540 seperti ini. 175 00:08:03,540 --> 00:08:07,080 Jadi saya telah dizum keluar dan saya hanya tetap lekukan yang dalam erti kata yang 176 00:08:07,080 --> 00:08:10,690 bahawa jika tidak ada pendakap kerinting, yang goto kedua gagal itu berwarna kuning 177 00:08:10,690 --> 00:08:12,500 akan melaksanakan tidak kira apa. 178 00:08:12,500 --> 00:08:15,540 Ia tidak berkaitan dengan jika keadaan di atasnya. 179 00:08:15,540 --> 00:08:19,590 >> Jadi, sekali lagi, jika anda tidak cukup memahami apa yang boleh ini mungkin 180 00:08:19,590 --> 00:08:23,230 menjadi lakukan, tahu bahawa setiap satu daripada syarat-setiap ayat-ayat ini 181 00:08:23,230 --> 00:08:26,180 adalah langkah yang sangat penting dalam proses memeriksa 182 00:08:26,180 --> 00:08:28,350 jika data anda sebenarnya disulitkan. 183 00:08:28,350 --> 00:08:31,710 Jadi ponteng salah satu langkah-langkah, bukan idea yang terbaik. 184 00:08:31,710 --> 00:08:34,840 >> Tetapi oleh kerana kita mempunyai goto kedua gagal dalam kuning, 185 00:08:34,840 --> 00:08:36,840 dan kerana sebaik sahaja kami semacam estetika 186 00:08:36,840 --> 00:08:40,480 bergerak ke kiri di mana ia secara logik adalah pada masa ini, apa yang 187 00:08:40,480 --> 00:08:43,230 adakah ini bermakna untuk garis kod di bawah yang goto kedua 188 00:08:43,230 --> 00:08:46,480 gagal anda akan berfikir? 189 00:08:46,480 --> 00:08:48,860 Ia sentiasa akan dilangkau. 190 00:08:48,860 --> 00:08:52,100 Jadi gotos biasanya disukai atas sebab-sebab kita tidak akan benar-benar pergi ke dalam, 191 00:08:52,100 --> 00:08:54,940 dan bahkan di CS50 kami tidak cenderung untuk mengajar kenyataan goto ini, 192 00:08:54,940 --> 00:08:58,130 tetapi anda boleh memikirkan goto gagal sebagai bermakna pergi melompat 193 00:08:58,130 --> 00:08:59,600 kepada beberapa bahagian lain kod. 194 00:08:59,600 --> 00:09:03,120 >> Dalam erti kata lain melompat ke atas baris ini lepas sama sekali, 195 00:09:03,120 --> 00:09:07,420 dan sebagainya hasil daripada ini bodoh kesilapan mudah yang hanya 196 00:09:07,420 --> 00:09:10,330 Hasil daripada mungkin seseorang menyalin dan menampal satu terlalu 197 00:09:10,330 --> 00:09:14,150 banyak kali adalah bahawa keseluruhan keselamatan iOS dan Mac OS 198 00:09:14,150 --> 00:09:18,240 adalah terdedah kepada pemintasan oleh orang jahat untuk beberapa waktu. 199 00:09:18,240 --> 00:09:19,940 Sehingga Apple akhirnya tetap ini. 200 00:09:19,940 --> 00:09:23,100 >> Sekarang jika sebahagian dari kamu sebenarnya berjalan versi lama iOS atau Mac OS, 201 00:09:23,100 --> 00:09:27,250 anda boleh pergi ke gotofail.com yang adalah sebuah laman web yang seseorang menubuhkan 202 00:09:27,250 --> 00:09:29,190 untuk menentukan dasarnya pengaturcaraan 203 00:09:29,190 --> 00:09:30,980 jika komputer anda masih terdedah. 204 00:09:30,980 --> 00:09:33,600 Dan terus terang, jika ia adalah, ia mungkin idea yang baik 205 00:09:33,600 --> 00:09:36,870 untuk mengemas kini telefon anda atau Mac anda pada ketika ini. 206 00:09:36,870 --> 00:09:40,120 Tetapi di sana, hanya membuktikan betapa penghargaan tahap ini lebih rendah 207 00:09:40,120 --> 00:09:42,400 maklumat dan adil idea-idea yang mudah boleh benar-benar 208 00:09:42,400 --> 00:09:44,590 menterjemahkan ke dalam keputusan dan masalah yang 209 00:09:44,590 --> 00:09:47,320 affected-- dalam case-- ini berjuta-juta orang. 210 00:09:47,320 --> 00:09:49,107 >> Sekarang sebuah kata pada pentadbiran. 211 00:09:49,107 --> 00:09:50,690 Seksyen akan bermula hari Ahad ini akan datang. 212 00:09:50,690 --> 00:09:53,360 Anda akan menerima e-mel oleh hujung minggu mengenai seksyen, pada masa 213 00:09:53,360 --> 00:09:55,290 proses resectioning yang akan bermula jika anda mempunyai 214 00:09:55,290 --> 00:09:56,998 sedar anda kini mempunyai beberapa konflik baru. 215 00:09:56,998 --> 00:10:00,180 Jadi ini yang berlaku setiap tahun, dan kita akan menampung pada hari-hari akan datang. 216 00:10:00,180 --> 00:10:02,430 >> Pejabat hours-- melakukan menyimpan mata pada jadual ini di sini. 217 00:10:02,430 --> 00:10:05,100 Perubahan sedikit minggu ini, terutamanya masa mula 218 00:10:05,100 --> 00:10:08,180 dan lokasi, jadi berunding yang sebelum menuju ke waktu pejabat 219 00:10:08,180 --> 00:10:09,520 mana-mana empat malam seterusnya. 220 00:10:09,520 --> 00:10:12,680 Dan kini satu perkataan kepada penilaian, terutamanya sebagai anda menyelam ke dalam masalah 221 00:10:12,680 --> 00:10:14,350 menetapkan satu dan seterusnya. 222 00:10:14,350 --> 00:10:17,070 >> Jadi setiap spesifikasi, ini secara umumnya 223 00:10:17,070 --> 00:10:20,360 paksi yang bersama-sama yang kita menilai kerja anda. 224 00:10:20,360 --> 00:10:23,170 Skop merujuk kepada apa yang setakat alat kod anda 225 00:10:23,170 --> 00:10:25,690 ciri-ciri yang dikehendaki oleh spesifikasi kami. 226 00:10:25,690 --> 00:10:28,290 Dalam erti kata lain, berapa banyak satu set sekeping adakah anda menggigit. 227 00:10:28,290 --> 00:10:30,440 Adakah anda melakukan ketiga itu, setengah itu, 100% daripadanya. 228 00:10:30,440 --> 00:10:33,000 Walaupun ia tidak betul, berapa banyak yang anda cuba? 229 00:10:33,000 --> 00:10:35,290 Jadi yang menangkap tahap usaha dan jumlah yang 230 00:10:35,290 --> 00:10:38,260 yang anda sedikit di luar masalah masalah set ini. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- satu ini, untuk sejauh mana, adalah kod anda 232 00:10:40,690 --> 00:10:43,150 konsisten dengan kami spesifikasi dan bebas daripada pepijat. 233 00:10:43,150 --> 00:10:44,770 Jadi ia berfungsi dengan betul? 234 00:10:44,770 --> 00:10:48,700 Jika kita memberikan input beberapa, bukan memberi output yang kita jangkakan? 235 00:10:48,700 --> 00:10:52,570 Design-- sekarang ini adalah yang pertama orang-orang yang terutama kualitatif, 236 00:10:52,570 --> 00:10:56,180 atau orang-orang yang memerlukan pertimbangan manusia. 237 00:10:56,180 --> 00:10:59,690 Dan sesungguhnya, ini adalah mengapa kita mempunyai kakitangan yang begitu ramai felo pengajaran dan kursus 238 00:10:59,690 --> 00:11:00,350 pembantu. 239 00:11:00,350 --> 00:11:03,480 Sejauh manakah anda kod yang ditulis dengan baik? 240 00:11:03,480 --> 00:11:05,810 >> Dan sekali lagi ini adalah sangat penilaian kualitatif 241 00:11:05,810 --> 00:11:09,100 yang akan bekerja dengan anda pada bi-directionally pada minggu-minggu akan datang. 242 00:11:09,100 --> 00:11:12,060 Supaya apabila anda tidak mendapat hanya skor angka, tetapi juga 243 00:11:12,060 --> 00:11:16,682 skor yang bertulis, atau maklum balas menaip, atau maklum balas yang ditulis dalam perkataan bahasa Inggeris. 244 00:11:16,682 --> 00:11:19,640 Itulah apa yang kita akan gunakan untuk memandu anda ke arah sebenarnya menulis kod yang lebih baik. 245 00:11:19,640 --> 00:11:23,320 Dan dalam kuliah dan seksyen, kami akan cuba untuk menunjukkan out-- sekerap kita can-- 246 00:11:23,320 --> 00:11:26,420 apa yang membuat program yang bukan sahaja betul dan fungsi yang baik, 247 00:11:26,420 --> 00:11:28,200 tetapi juga direka dengan baik. 248 00:11:28,200 --> 00:11:31,850 Yang paling berkesan ia boleh menjadi, atau walaupun yang paling indah boleh. 249 00:11:31,850 --> 00:11:33,100 >> Yang membawa kita kepada gaya. 250 00:11:33,100 --> 00:11:36,876 Style akhirnya adalah pertimbangan estetik. 251 00:11:36,876 --> 00:11:38,750 Adakah anda memilih yang baik nama-nama untuk pembolehubah anda? 252 00:11:38,750 --> 00:11:40,330 Pernahkah anda dilekukan kod anda dengan betul? 253 00:11:40,330 --> 00:11:44,010 Adakah ia melihat yang baik, dan oleh itu, adalah mudah bagi manusia lain 254 00:11:44,010 --> 00:11:46,550 untuk membaca masing-masing ketepatan itu. 255 00:11:46,550 --> 00:11:50,300 >> Sekarang umumnya setiap sukatan pelajaran, kita menjaringkan perkara-perkara ini pada skala lima mata. 256 00:11:50,300 --> 00:11:53,640 Dan biarlah saya tukul rumah titik bahawa tiga memang baik. 257 00:11:53,640 --> 00:11:55,550 Dengan cepat melakukan orang mula melakukan aritmetik. 258 00:11:55,550 --> 00:11:58,133 Apabila mereka mendapat tiga daripada lima di betulnya bagi sesetengah Serangga 259 00:11:58,133 --> 00:12:02,040 dan mereka berfikir celaka, saya akan 60% yang pada asasnya adalah D atau E. 260 00:12:02,040 --> 00:12:03,980 >> Itu bukan cara kita memikirkan nombor-nombor ini. 261 00:12:03,980 --> 00:12:06,880 A tiga memang baik, dan apa yang kita umumnya menjangka pada permulaan 262 00:12:06,880 --> 00:12:09,820 istilah adalah bahawa jika anda mendapat sekumpulan three's-- mungkin pasangan 263 00:12:09,820 --> 00:12:12,540 pameran, beberapa fours-- atau pasangan berdua-dua, beberapa fours-- 264 00:12:12,540 --> 00:12:13,748 itu tempat yang baik untuk memulakan. 265 00:12:13,748 --> 00:12:16,320 Dan selagi kita melihat trajektori menaik dari masa ke masa, 266 00:12:16,320 --> 00:12:18,540 anda berada di tempat yang sangat baik. 267 00:12:18,540 --> 00:12:20,752 >> Formula yang kita gunakan untuk perkara yang berat pada asasnya 268 00:12:20,752 --> 00:12:22,710 ini satu sukatan pelajaran, yang hanya bermakna bahawa kita 269 00:12:22,710 --> 00:12:24,750 memberikan lebih berat kepada kebenaran. 270 00:12:24,750 --> 00:12:27,930 Kerana ia sangat sering kebenaran yang mengambil masa yang paling. 271 00:12:27,930 --> 00:12:28,760 Percayalah sekarang. 272 00:12:28,760 --> 00:12:31,190 Anda akan find-- sekurang-kurangnya dalam satu pset-- anda 273 00:12:31,190 --> 00:12:36,790 menghabiskan 90% daripada masa anda bekerja pada 10% daripada masalah tersebut. 274 00:12:36,790 --> 00:12:39,320 >> Dan semua jenis kerja-kerja kecuali untuk satu atau dua pepijat, 275 00:12:39,320 --> 00:12:41,570 dan mereka adalah pepijat yang menjaga anda sehingga lewat malam. 276 00:12:41,570 --> 00:12:43,380 Mereka adalah orang-orang yang semacam melarikan diri anda. 277 00:12:43,380 --> 00:12:45,560 Tetapi selepas tidur di atasnya, atau menghadiri waktu pejabat 278 00:12:45,560 --> 00:12:48,844 atau bertanya soalan dalam talian, adalah apabila anda sampai ke matlamat itu 100%, 279 00:12:48,844 --> 00:12:50,760 dan itulah sebabnya kita berat kebenaran yang paling. 280 00:12:50,760 --> 00:12:54,102 Rekabentuk sedikit kurang, dan gaya sedikit kurang daripada itu. 281 00:12:54,102 --> 00:12:56,060 Tetapi perlu gaya mind-- mungkin yang paling mudah 282 00:12:56,060 --> 00:12:58,890 ini untuk menggigit seperti panduan gaya. 283 00:12:58,890 --> 00:13:01,580 >> Dan sekarang, yang lebih serius ambil perhatian kejujuran akademik. 284 00:13:01,580 --> 00:13:05,000 CS50 mempunyai perbezaan malang menjadi pengeluar terbesar Lembaga Iklan 285 00:13:05,000 --> 00:13:07,330 kes hampir setiap tahun sejarah. 286 00:13:07,330 --> 00:13:11,012 Ini bukan kerana pelajar menipu dalam CS50 lebih lagi daripada apa-apa kelas, 287 00:13:11,012 --> 00:13:13,720 tetapi kerana dengan jenis kerja, hakikat bahawa itu elektronik, 288 00:13:13,720 --> 00:13:16,636 hakikat bahawa kita melihat untuk itu, dan hakikat kita ahli-ahli sains komputer, 289 00:13:16,636 --> 00:13:20,570 Saya boleh katakan kita malangnya sangat baik mengesan ia. 290 00:13:20,570 --> 00:13:22,710 >> Jadi apakah ini bermakna dari segi sebenar? 291 00:13:22,710 --> 00:13:24,820 Jadi, setiap sukatan pelajaran, falsafah kursus ini 292 00:13:24,820 --> 00:13:28,090 benar-benar tidak mendidih ke munasabah. 293 00:13:28,090 --> 00:13:31,684 Terdapat saluran ini di antara melakukan kerja seseorang pada anda sendiri 294 00:13:31,684 --> 00:13:34,100 dan mendapatkan sedikit bantuan yang munasabah dari seorang teman, 295 00:13:34,100 --> 00:13:38,020 dan secara terang-terangan melakukan kerja untuk anda rakan, atau menghantar dia atau dia kod anda 296 00:13:38,020 --> 00:13:41,080 supaya dia boleh hanya mengambil atau meminjam keluar betul. 297 00:13:41,080 --> 00:13:43,580 Dan itu melintasi garisan yang kami disediakan di dalam kelas. 298 00:13:43,580 --> 00:13:45,410 >> Lihat, sukatan pelajaran akhirnya untuk garis 299 00:13:45,410 --> 00:13:48,209 yang kami ingin menarik sebagai munasabah dan tingkah laku yang tidak munasabah, 300 00:13:48,209 --> 00:13:50,000 tetapi ia benar-benar mendidih turun ke intipati 301 00:13:50,000 --> 00:13:53,980 kerja anda perlu menjadi anda sendiri pada akhirnya. 302 00:13:53,980 --> 00:13:56,230 Kini dengan mengatakan bahawa, terdapat heuristik a. 303 00:13:56,230 --> 00:13:58,980 Kerana seperti yang anda mungkin imagine-- dari waktu pejabat dan visual 304 00:13:58,980 --> 00:14:01,060 dan video yang kami telah ditunjukkan dengan itu far-- CS50 305 00:14:01,060 --> 00:14:04,530 memang dimaksudkan untuk menjadi seperti kerjasama dan sebagai dan individu sosial 306 00:14:04,530 --> 00:14:06,450 yang mungkin. 307 00:14:06,450 --> 00:14:08,570 Sebagai kolaboratif kerana ia adalah ketat. 308 00:14:08,570 --> 00:14:11,314 >> Tetapi dengan ini berkata, heuristik itu, seperti yang anda akan lihat dalam sukatan pelajaran, 309 00:14:11,314 --> 00:14:12,980 ialah apabila anda mempunyai beberapa masalah. 310 00:14:12,980 --> 00:14:16,470 Anda mempunyai beberapa bug dalam kod anda bahawa anda tidak dapat menyelesaikan, adalah munasabah untuk anda 311 00:14:16,470 --> 00:14:18,039 untuk menunjukkan kod anda kepada orang lain. 312 00:14:18,039 --> 00:14:21,080 Seorang kawan walaupun dalam kelas, rakan duduk di sebelah anda di waktu pejabat, 313 00:14:21,080 --> 00:14:22,680 atau ahli kakitangan. 314 00:14:22,680 --> 00:14:25,810 Tapi mereka tidak boleh menunjukkan kod mereka kepada anda. 315 00:14:25,810 --> 00:14:27,710 >> Dalam erti kata lain, menjawab kepada question-- anda 316 00:14:27,710 --> 00:14:29,940 Saya perlu help-- tidak oh, di sini kod saya. 317 00:14:29,940 --> 00:14:32,440 Sila lihat ini dan simpulkan daripadanya apa yang anda akan. 318 00:14:32,440 --> 00:14:34,580 Kini, sudah tentu, ada cara yang jelas untuk permainan 319 00:14:34,580 --> 00:14:37,760 sistem ini di mana saya akan menunjukkan kepada anda kod saya sebelum mempunyai soalan. 320 00:14:37,760 --> 00:14:40,150 Anda menunjukkan saya kod anda saya sebelum mempunyai soalan. 321 00:14:40,150 --> 00:14:45,870 Tetapi melihat sukatan pelajaran sekali lagi untuk butir-butir yang lebih halus di mana talian ini. 322 00:14:45,870 --> 00:14:50,606 >> Hanya untuk kini cat gambar dan berkongsi sebagai telus yang mungkin 323 00:14:50,606 --> 00:14:53,480 di mana kita berada di dalam tahun-tahun kebelakangan ini, ini adalah jumlah kes Lembaga Iklan 324 00:14:53,480 --> 00:14:56,260 CS50 yang mempunyai lebih tujuh tahun yang lalu. 325 00:14:56,260 --> 00:14:58,717 Dengan 14 kes kejatuhan paling baru-baru ini. 326 00:14:58,717 --> 00:15:01,300 Dari segi pelajar yang terlibat, ia adalah 20 beberapa pelajar ganjil 327 00:15:01,300 --> 00:15:02,490 ini jatuh lalu. 328 00:15:02,490 --> 00:15:05,670 Terdapat puncak 33 pelajar beberapa tahun lalu. 329 00:15:05,670 --> 00:15:08,830 Ramai daripada mereka adalah malangnya tidak lagi di sini di kampus. 330 00:15:08,830 --> 00:15:13,100 >> Pelajar yang terlibat sebagai peratusan daripada kelas sejarah, adalah di antara 0% 331 00:15:13,100 --> 00:15:17,300 kepada 5.3%, yang hanya untuk mengatakan ini adalah tahun cabaran. 332 00:15:17,300 --> 00:15:20,390 Dan ke arah mencapai matlamat ini, apa yang kami mahu lakukan adalah menyampaikan satu 333 00:15:20,390 --> 00:15:24,310 bahawa kami hanya dd-- FYI-- membandingkan di yang adil bagi pelajar yang 334 00:15:24,310 --> 00:15:26,520 adalah berikut garis sewajarnya. 335 00:15:26,520 --> 00:15:29,620 Kami melakukan membandingkan semua semasa penghujahan terhadap semua misi yang lalu 336 00:15:29,620 --> 00:15:30,840 dari banyak tahun yang lalu. 337 00:15:30,840 --> 00:15:33,620 >> Kita tahu terlalu bagaimana untuk Google di seluruh dan mencari repositori kod 338 00:15:33,620 --> 00:15:36,360 dalam talian, forum-forum perbincangan dalam talian, laman pekerjaan dalam talian. 339 00:15:36,360 --> 00:15:41,580 Sekiranya pelajar boleh merasa, kita boleh pasti merasa seperti yang kita kesal lakukan. 340 00:15:41,580 --> 00:15:45,330 Jadi apa yang anda akan lihat dalam sukatan pelajaran walaupun adalah klausa penyesalan ini. 341 00:15:45,330 --> 00:15:47,500 Saya boleh pasti menghargai, dan kita semua mempunyai 342 00:15:47,500 --> 00:15:50,870 kakitangan telah melakukan kursus seperti ini, atau yang satu ini sendiri dari masa ke masa, 343 00:15:50,870 --> 00:15:53,997 pasti tahu bagaimana rasanya apabila hidup mendapat di jalan apabila anda mempunyai 344 00:15:53,997 --> 00:15:56,080 beberapa malam lewat deadline-- bukan sahaja di dalam kelas ini, 345 00:15:56,080 --> 00:15:58,660 tetapi another-- apabila anda benar-benar letih, tertekan, 346 00:15:58,660 --> 00:16:00,659 mempunyai nombor tamak haloba perkara-perkara lain yang perlu dilakukan. 347 00:16:00,659 --> 00:16:03,660 Anda akan membuat pada satu ketika dalam kehidupan pasti yang tidak baik, mungkin lewat 348 00:16:03,660 --> 00:16:04,620 keputusan malam. 349 00:16:04,620 --> 00:16:06,520 >> Jadi setiap sukatan pelajaran, terdapat fasal ini, 350 00:16:06,520 --> 00:16:10,629 seperti bahawa jika dalam masa 72 jam membuat beberapa keputusan kurang baik, anda memiliki sehingga ia 351 00:16:10,629 --> 00:16:12,670 dan mendekati saya dan salah satu kepala perjalanan ini 352 00:16:12,670 --> 00:16:14,300 dan kami akan mempunyai perbualan. 353 00:16:14,300 --> 00:16:16,220 Kami akan mengendalikan perkara dalaman dengan harapan 354 00:16:16,220 --> 00:16:18,770 itu menjadi lebih daripada masa pengajaran atau kehidupan pelajaran, 355 00:16:18,770 --> 00:16:22,120 dan tidak sesuatu dengan terutamanya kesan drastik 356 00:16:22,120 --> 00:16:24,570 kerana anda mungkin melihat pada carta ini di sini. 357 00:16:24,570 --> 00:16:26,540 >> Jadi itulah nada yang sangat serius. 358 00:16:26,540 --> 00:16:29,960 Mari kita berhenti sejenak hanya untuk beberapa saat untuk memecahkan ketegangan. 359 00:16:29,960 --> 00:16:34,442 >> [MUZIK bermain] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> DAVID J. MALAN: Baiklah, jadi bagaimana ialah untuk segue satu? 362 00:17:20,250 --> 00:17:22,059 Untuk topik utama hari ini. 363 00:17:22,059 --> 00:17:23,859 Di mana yang pertama adalah pengekstrakan. 364 00:17:23,859 --> 00:17:26,900 Satu lagi yang akan menjadi perwakilan data, yang terus-terang 365 00:17:26,900 --> 00:17:31,640 adalah cara yang benar-benar kering untuk mengatakan bagaimana boleh kita pergi tentang menyelesaikan masalah dan berfikir 366 00:17:31,640 --> 00:17:33,250 mengenai menyelesaikan masalah? 367 00:17:33,250 --> 00:17:37,285 Jadi anda lihat dalam Scratch, dan anda mempunyai dilihat mungkin sudah pset1 dengan C 368 00:17:37,285 --> 00:17:39,930 bahawa anda bukan sahaja boleh menggunakan fungsi, seperti printf, 369 00:17:39,930 --> 00:17:42,770 bahawa orang lain dalam tahun yang lalu telah menulis untuk anda. 370 00:17:42,770 --> 00:17:45,340 Anda juga boleh menulis fungsi anda sendiri. 371 00:17:45,340 --> 00:17:48,440 >> Dan walaupun anda mungkin tidak mempunyai melakukan ini dalam C, dan terus terang dalam pset1 372 00:17:48,440 --> 00:17:51,866 anda tidak benar-benar perlu untuk menulis anda fungsi sendiri kerana problem-- yang 373 00:17:51,866 --> 00:17:53,990 manakala mungkin menakutkan di pertama glance-- anda akan melihat 374 00:17:53,990 --> 00:17:57,910 akhirnya dapat diselesaikan dengan tidak semua yang banyak baris kod. 375 00:17:57,910 --> 00:18:01,140 Tetapi dengan yang berkata, dari segi menulis fungsi anda sendiri, 376 00:18:01,140 --> 00:18:03,570 menyedari bahawa C tidak memberi anda keupayaan ini. 377 00:18:03,570 --> 00:18:06,940 >> Saya akan pergi dalam kod sumber hari ini, yang boleh didapati sudah dalam talian, 378 00:18:06,940 --> 00:18:10,900 dan saya akan pergi ke depan dan terbuka sehingga program yang dikenali sebagai fungsi 0.C, 379 00:18:10,900 --> 00:18:14,620 dan dalam fungsi sifar kita akan melihat beberapa perkara. 380 00:18:14,620 --> 00:18:19,160 Dalam baris pertama 18 melalui 23 adalah fungsi utama saya. 381 00:18:19,160 --> 00:18:22,414 Dan kini bahawa kita mula membaca kod yang kami tidak menulis dengan cepat, 382 00:18:22,414 --> 00:18:25,080 tetapi sebaliknya saya telah menulis lebih awal atau anda dalam masalah yang dinyatakan 383 00:18:25,080 --> 00:18:27,910 mungkin menerima mempunyai telah ditulis terlebih dahulu. 384 00:18:27,910 --> 00:18:30,040 Satu cara yang baik untuk memulakan membaca kod orang lain 385 00:18:30,040 --> 00:18:31,400 adalah mencari fungsi utama. 386 00:18:31,400 --> 00:18:34,420 Memikirkan di mana yang masuk mata adalah untuk menjalankan program ini, 387 00:18:34,420 --> 00:18:36,580 dan kemudian mengikutinya secara logik dari sana. 388 00:18:36,580 --> 00:18:40,190 >> Jadi program ini nampaknya cetakan nama anda diikuti dengan noktah bertindih. 389 00:18:40,190 --> 00:18:42,490 Kami kemudian gunakan GetString dari perpustakaan CS50 yang 390 00:18:42,490 --> 00:18:46,050 untuk mendapatkan tali, atau perkataan atau frasa daripada pengguna di papan kekunci. 391 00:18:46,050 --> 00:18:48,390 Dan kemudian ada ini perkara PrintName here--. 392 00:18:48,390 --> 00:18:51,420 >> Sekarang PrintName bukan fungsi yang datang dengan C. 393 00:18:51,420 --> 00:18:52,970 Ia bukan dalam io.h. standard 394 00:18:52,970 --> 00:18:55,570 Ia bukan dalam CS50.h. 395 00:18:55,570 --> 00:18:57,880 Ia bukan dalam fail yang sama. 396 00:18:57,880 --> 00:19:01,000 Perhatikan jika saya tatal ke bawah garisan bit-- 25 hingga 27-- 397 00:19:01,000 --> 00:19:05,330 ia hanya satu cara cantik mengulas kod anda menggunakan bintang-bintang dan garis condong. 398 00:19:05,330 --> 00:19:07,320 Ini adalah berbilang talian komen, dan ini hanyalah 399 00:19:07,320 --> 00:19:10,570 penerangan saya dalam biru apa fungsi ini tidak. 400 00:19:10,570 --> 00:19:14,530 >> Kerana dalam barisan 28 hingga 31, Saya telah menulis satu fungsi super mudah 401 00:19:14,530 --> 00:19:16,280 Nama yang adalah PrintName. 402 00:19:16,280 --> 00:19:19,560 Ia mengambil masa berapa hujah-hujah yang akan kamu katakan? 403 00:19:19,560 --> 00:19:25,120 Jadi satu argument-- kerana ada satu hujah yang disenaraikan di dalam kurungan. 404 00:19:25,120 --> 00:19:27,000 Jenis yang String. 405 00:19:27,000 --> 00:19:30,240 Yang mengatakan PrintName adalah seperti kotak hitam ini 406 00:19:30,240 --> 00:19:32,910 atau fungsi yang mengambil sebagai input rentetan. 407 00:19:32,910 --> 00:19:35,730 >> Dan nama yang String mudah akan Nama. 408 00:19:35,730 --> 00:19:37,840 Tidak S, N tidak, tetapi Nama. 409 00:19:37,840 --> 00:19:41,090 Jadi apakah PrintName lakukan? 410 00:19:41,090 --> 00:19:42,210 Ia baik mudah. 411 00:19:42,210 --> 00:19:45,390 Sama seperti satu baris kod untuk printf, tetapi nampaknya ia 412 00:19:45,390 --> 00:19:47,950 cetakan keluar "Hello," demikian dan demikian. 413 00:19:47,950 --> 00:19:50,070 Jika jadi dan sebagainya berasal dari hujah. 414 00:19:50,070 --> 00:19:52,300 >> Sekarang ini bukan inovasi yang besar di sini. 415 00:19:52,300 --> 00:19:56,710 Benar-benar, saya telah mengambil program yang boleh telah ditulis dengan satu baris kod 416 00:19:56,710 --> 00:20:00,190 dengan meletakkan ini di sini, dan menukarnya kepada sesuatu yang 417 00:20:00,190 --> 00:20:04,920 yang melibatkan kira-kira enam atau tujuh atau lebih baris kod sepanjang jalan di sini. 418 00:20:04,920 --> 00:20:08,190 >> Tetapi ia adalah satu amalan prinsip yang dikenali sebagai abstrak. 419 00:20:08,190 --> 00:20:12,550 Jenis yang meliputi bahagian dalam yang baru fungsi yang mempunyai nama, dan yang lebih baik 420 00:20:12,550 --> 00:20:14,590 namun nama yang benar-benar mengatakan apa yang dilakukan. 421 00:20:14,590 --> 00:20:16,880 Maksud saya printf-- itu bukan terutamanya deskriptif. 422 00:20:16,880 --> 00:20:18,932 Jika saya ingin membuat sekeping teka-teki, atau jika saya 423 00:20:18,932 --> 00:20:21,140 ingin membuat majlis yang mencetak nama seseorang, 424 00:20:21,140 --> 00:20:23,230 keindahan melakukan ini ialah saya boleh sebenarnya 425 00:20:23,230 --> 00:20:27,170 memberikan fungsi yang nama yang menggambarkan apa yang dilakukan. 426 00:20:27,170 --> 00:20:29,844 >> Kini ia mengambil masa dalam input yang Saya telah dipanggil secara sewenang-wenangnya nama, 427 00:20:29,844 --> 00:20:32,760 tetapi itu juga adalah hebat deskriptif bukannya yang lebih sedikit 428 00:20:32,760 --> 00:20:36,140 generik seperti S. Dan tidak sah, buat masa ini, hanya bermakna 429 00:20:36,140 --> 00:20:38,330 bahawa fungsi ini tidak tangan saya kembali apa-apa. 430 00:20:38,330 --> 00:20:41,127 Ia tidak seperti yang GetString literal tangan saya kembali rentetan 431 00:20:41,127 --> 00:20:43,960 seperti yang kita lakukan dengan keping kertas dengan rakan-rakan anda minggu lepas, 432 00:20:43,960 --> 00:20:45,990 tetapi ia hanya mempunyai kesan sampingan. 433 00:20:45,990 --> 00:20:48,080 Ia mencetak sesuatu untuk skrin. 434 00:20:48,080 --> 00:20:53,880 >> Jadi, pada akhir hari, jika saya jangan membuat fungsi-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 kita akan melihat bahawa ia meminta nama saya. 436 00:20:55,450 --> 00:20:58,150 Saya menaip Daud, dan ia jenis keluar nama saya. 437 00:20:58,150 --> 00:21:01,080 Jika saya melakukannya sekali lagi dengan Rob, ia akan berkata "Hello, Rob." 438 00:21:01,080 --> 00:21:04,280 Jadi idea yang mudah, tetapi mungkin penentuan berasaskan ini mental 439 00:21:04,280 --> 00:21:06,750 bahawa program anda mendapatkan sedikit lebih rumit, 440 00:21:06,750 --> 00:21:10,290 dan anda ingin menulis sebahagian daripada kod dan panggilan yang code-- sembah 441 00:21:10,290 --> 00:21:13,270 code-- bahawa dengan beberapa deskriptif menamakan seperti PrintName, 442 00:21:13,270 --> 00:21:15,600 C tidak mampu kita keupayaan ini. 443 00:21:15,600 --> 00:21:17,660 >> Berikut adalah satu lagi contoh yang mudah. 444 00:21:17,660 --> 00:21:22,940 Sebagai contoh, jika saya membuka memfailkan dari hari ini menggesa return.c, 445 00:21:22,940 --> 00:21:24,270 perhatikan apa yang saya lakukan di sini. 446 00:21:24,270 --> 00:21:26,330 Kebanyakan ini adalah fungsi utama printf. 447 00:21:26,330 --> 00:21:30,360 Saya pertama sewenang-wenangnya memulakan satu pembolehubah x dipanggil dengan bilangan 2. 448 00:21:30,360 --> 00:21:34,110 Saya kemudian mencetak "x kini % I "lulus dalam nilai x. 449 00:21:34,110 --> 00:21:35,500 Jadi, saya hanya mengatakan apa yang ada. 450 00:21:35,500 --> 00:21:37,208 >> Sekarang saya hanya berani mendakwa dengan printf. 451 00:21:37,208 --> 00:21:42,050 Saya cubing bahawa nilai x, dan saya berbuat demikian dengan memanggil fungsi yang 452 00:21:42,050 --> 00:21:45,590 dipanggil kiub berlalu dalam x sebagai hujah, 453 00:21:45,590 --> 00:21:49,300 dan kemudian menyelamatkan output dalam pembolehubah itu sendiri, x. 454 00:21:49,300 --> 00:21:51,340 Jadi saya clobbering nilai x. 455 00:21:51,340 --> 00:21:53,380 Saya yang mengatasi nilai x dengan apa sahaja 456 00:21:53,380 --> 00:21:56,510 hasil daripada memanggil fungsi kiub ini. 457 00:21:56,510 --> 00:21:59,530 Dan kemudian saya hanya mencetak beberapa barangan kembang di sini mengatakan apa yang saya lakukan. 458 00:21:59,530 --> 00:22:01,600 >> Jadi apa yang kemudian adalah kiub? 459 00:22:01,600 --> 00:22:03,510 Perhatikan apa yang pada asasnya yang berbeza di sini. 460 00:22:03,510 --> 00:22:05,540 Saya telah diberi fungsi yang nama seperti dahulu. 461 00:22:05,540 --> 00:22:08,270 Saya telah dinyatakan nama untuk pertengkaran. 462 00:22:08,270 --> 00:22:11,650 Kali ini ia dipanggil n bukannya nama, tetapi saya boleh memanggilnya apa-apa yang saya mahu. 463 00:22:11,650 --> 00:22:12,650 Tetapi ini adalah berbeza. 464 00:22:12,650 --> 00:22:14,080 Ini perkara yang di sebelah kiri. 465 00:22:14,080 --> 00:22:16,290 Sebelum ini apa kata kunci? 466 00:22:16,290 --> 00:22:16,870 Kanak-kanak lelaki. 467 00:22:16,870 --> 00:22:18,580 Sekarang jelas int. 468 00:22:18,580 --> 00:22:20,630 >> Jadi apa yang mungkin mengambil? 469 00:22:20,630 --> 00:22:24,090 Manakala menandakan sah semacam ketiadaan, dan itu adalah kes itu. 470 00:22:24,090 --> 00:22:25,970 PrintName kembali apa-apa. 471 00:22:25,970 --> 00:22:27,942 Ia melakukan sesuatu, tetapi ia tidak menyerahkan saya kembali 472 00:22:27,942 --> 00:22:30,650 sesuatu yang saya boleh memakai sebelah kiri tanda sama 473 00:22:30,650 --> 00:22:32,460 seperti saya lakukan di sini pada baris 22. 474 00:22:32,460 --> 00:22:36,780 >> Jadi, jika saya katakan pada baris ke 30, apa yang mungkin membayangkan 475 00:22:36,780 --> 00:22:38,610 tentang apa kiub tidak untuk saya? 476 00:22:38,610 --> 00:22:41,110 Yeah? 477 00:22:41,110 --> 00:22:42,310 Ia mengembalikan integer. 478 00:22:42,310 --> 00:22:44,590 Jadi tangan saya kembali, untuk contoh, sehelai kertas 479 00:22:44,590 --> 00:22:46,580 di mana ia telah menulis jawapannya. 480 00:22:46,580 --> 00:22:50,130 2 cubed, atau 3 cubed, atau 4 cubed-- apa yang saya diluluskan, 481 00:22:50,130 --> 00:22:51,540 dan bagaimana saya melaksanakan ini? 482 00:22:51,540 --> 00:22:54,810 Nah, hanya kali n n n kali ialah bagaimana saya mungkin Cube nilai. 483 00:22:54,810 --> 00:22:57,110 Jadi sekali lagi, super mudah idea, tetapi demonstratif 484 00:22:57,110 --> 00:23:00,100 sekarang bagaimana kita boleh menulis fungsi yang benar-benar mempunyai kita kembali 485 00:23:00,100 --> 00:23:02,380 nilai-nilai yang mungkin menarik minat. 486 00:23:02,380 --> 00:23:05,740 >> Mari kita lihat satu contoh lepas di sini dipanggil fungsi satu. 487 00:23:05,740 --> 00:23:08,530 Dalam contoh ini, ia bermula untuk mendapatkan lebih menarik. 488 00:23:08,530 --> 00:23:12,400 Jadi, dalam fungsi, ini notis program-- akhirnya 489 00:23:12,400 --> 00:23:14,920 memanggil fungsi yang dipanggil GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt bukan fungsi di perpustakaan CS50 ini, 491 00:23:17,800 --> 00:23:20,400 tetapi kami mengambil keputusan kita mahu ia wujud. 492 00:23:20,400 --> 00:23:24,550 >> Jadi, jika kita tatal ke bawah kemudian dalam fail, notis bagaimana saya pergi tentang melaksanakan 493 00:23:24,550 --> 00:23:26,560 mendapatkan int positif, dan saya mengatakan ia lebih menarik 494 00:23:26,560 --> 00:23:28,992 kerana ini adalah yang baik beberapa baris kod. 495 00:23:28,992 --> 00:23:30,700 Ia bukan hanya yang bodoh program mainan sedikit. 496 00:23:30,700 --> 00:23:33,870 Ia benar-benar mendapat beberapa semakan ralat dan melakukan sesuatu yang lebih berguna. 497 00:23:33,870 --> 00:23:38,470 >> Jadi jika anda telah tidak dilihat Walkthrough video yang kami telah tertanam dalam pset1, 498 00:23:38,470 --> 00:23:42,350 tahu bahawa ini adalah satu jenis gelung dalam bahasa C, yang sama dalam semangat 499 00:23:42,350 --> 00:23:44,270 kepada jenis perkara Scratch boleh lakukan. 500 00:23:44,270 --> 00:23:46,320 Dan melakukan mengatakan melakukan ini. 501 00:23:46,320 --> 00:23:47,500 Cetak halaman ini keluar. 502 00:23:47,500 --> 00:23:51,860 Kemudian pergi ke hadapan dan mendapatkan n-- mendapatkan int dan menyimpannya dalam n, 503 00:23:51,860 --> 00:23:55,760 dan terus melakukan ini sekali lagi dan lagi dan lagi selagi n adalah kurang daripada satu. 504 00:23:55,760 --> 00:23:58,720 >> Jadi n akan menjadi kurang daripada satu hanya jika manusia bukan bekerjasama. 505 00:23:58,720 --> 00:24:01,980 Jika dia sedang menaip dalam 0 atau -1 atau -50, 506 00:24:01,980 --> 00:24:04,790 gelung ini akan menyimpan melaksanakan lagi dan lagi. 507 00:24:04,790 --> 00:24:07,549 Dan akhirnya notis, saya hanya mengembalikan nilai. 508 00:24:07,549 --> 00:24:09,590 Jadi sekarang kita mempunyai fungsi yang akan sudah baik 509 00:24:09,590 --> 00:24:14,040 jika CS50 akan melaksanakan di CS50.h dan CS50.c untuk anda, 510 00:24:14,040 --> 00:24:16,520 tetapi di sini kita kini boleh melaksanakan ini diri kita sendiri. 511 00:24:16,520 --> 00:24:19,230 >> Tetapi dua komen mengenai beberapa perkara penting. 512 00:24:19,230 --> 00:24:24,390 One-- mengapa saya mengisytiharkan int n, adakah anda berfikir, pada baris 29 513 00:24:24,390 --> 00:24:27,139 bukan hanya melakukan ini di sini, yang merupakan 514 00:24:27,139 --> 00:24:28,930 lebih konsisten dengan apa yang kami lakukan pada minggu lepas? 515 00:24:28,930 --> 00:24:29,430 Yeah? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Sungguh baik. 518 00:24:35,110 --> 00:24:37,080 Jadi jika kita meletakkan ia di sini, ia seolah-olah kita 519 00:24:37,080 --> 00:24:39,110 menyimpan mengisytiharkan sekali lagi dan sekali lagi. 520 00:24:39,110 --> 00:24:42,000 Bahawa dalam dan dengan sendirinya adalah tidak bermasalah, per se, 521 00:24:42,000 --> 00:24:43,940 kerana kita hanya perlu nilai sekali dan kemudian 522 00:24:43,940 --> 00:24:45,330 kita akan mendapatkan yang baru pula. 523 00:24:45,330 --> 00:24:45,940 Tetapi pemikiran yang baik. 524 00:24:45,940 --> 00:24:46,440 Yeah? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Tutup. 527 00:24:53,330 --> 00:24:59,030 Jadi kerana saya telah diisytiharkan n pada talian 29 di luar gelung, 528 00:24:59,030 --> 00:25:01,390 ia boleh diakses di seluruh ini fungsi keseluruhan. 529 00:25:01,390 --> 00:25:05,400 Tidak fungsi-fungsi lain kerana n masih di dalam kerinting ini 530 00:25:05,400 --> 00:25:06,470 pendakap sini. 531 00:25:06,470 --> 00:25:07,940 So-- pasti. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Tepat sekali. 534 00:25:12,940 --> 00:25:14,356 Jadi ini adalah lebih tepat. 535 00:25:14,356 --> 00:25:18,600 Jika kita bukan diisytiharkan n di sini pada baris 32, 536 00:25:18,600 --> 00:25:22,340 ia bermasalah kerana meneka di mana lagi saya perlu mengaksesnya? 537 00:25:22,340 --> 00:25:25,620 Popular 34, dan peraturan mudah ibu jari adalah 538 00:25:25,620 --> 00:25:30,060 bahawa anda hanya boleh menggunakan pembolehubah bahagian dalam pendakap kerinting yang paling baru-baru ini 539 00:25:30,060 --> 00:25:31,420 di mana anda diisytiharkan itu. 540 00:25:31,420 --> 00:25:35,230 >> Malangnya, talian 34 adalah satu baris terlambat, 541 00:25:35,230 --> 00:25:38,560 kerana saya telah ditutup pendakap kerinting pada baris 33 542 00:25:38,560 --> 00:25:41,220 yang sepadan dengan pendakap kerinting pada baris 30. 543 00:25:41,220 --> 00:25:44,180 Dan ini adalah satu cara untuk mengatakan bahawa pembolehubah int ini scoped, 544 00:25:44,180 --> 00:25:46,970 boleh dikatakan, hanya dalam dari orang-orang pendakap kerinting. 545 00:25:46,970 --> 00:25:48,910 Ia hanya tidak wujud di luar daripada mereka. 546 00:25:48,910 --> 00:25:51,580 >> Jadi sesungguhnya, jika saya melakukan ini salah, biarlah saya menyelamatkan kod 547 00:25:51,580 --> 00:25:53,530 kerana ia salah is-- bertulis. 548 00:25:53,530 --> 00:25:57,990 Biar saya pergi ke hadapan dan jangan membuat fungsi-1, dan kesilapan notice--. 549 00:25:57,990 --> 00:26:03,502 Penggunaan yang tidak diisytiharkan pengecam n pada baris 35, yang di sini. 550 00:26:03,502 --> 00:26:05,210 Dan jika kita tatal ke atas lagi, satu sama lain. 551 00:26:05,210 --> 00:26:08,750 Penggunaan yang tidak diisytiharkan pengecam n pada baris 34. 552 00:26:08,750 --> 00:26:11,200 >> Jadi pengkompil, berdentang-dentang, yang perasan bahawa ia hanya 553 00:26:11,200 --> 00:26:13,720 tidak wujud walaupun jelas ianya ada secara visual. 554 00:26:13,720 --> 00:26:16,090 Jadi menetapkan mudah adalah mengisytiharkan ia di sana. 555 00:26:16,090 --> 00:26:18,790 >> Sekarang mari saya tatal ke bahagian atas fail. 556 00:26:18,790 --> 00:26:21,080 Apa yang melompat keluar pada anda sebagai yang sedikit berbeza 557 00:26:21,080 --> 00:26:23,070 daripada barangan yang kita melihat pada minggu lepas? 558 00:26:23,070 --> 00:26:26,990 Bukan sahaja saya mempunyai nama, bukan sahaja Saya mempunyai beberapa tajam termasuk sehingga atas, 559 00:26:26,990 --> 00:26:29,340 Saya mempunyai sesuatu yang saya memanggil prototaip. 560 00:26:29,340 --> 00:26:36,100 Sekarang yang kelihatan secara mengerikan serupa dengan apa yang kita hanya melihat masa lalu pada baris 27. 561 00:26:36,100 --> 00:26:39,230 >> Jadi mari kita membuat kesimpulan yang berbeza dari mesej ralat mengapa saya lakukan ini. 562 00:26:39,230 --> 00:26:42,050 Biar saya pergi ke hadapan dan memadam ayat-ayat ini di sana. 563 00:26:42,050 --> 00:26:44,240 Dan supaya kita tahu apa-apa tentang prototaip. 564 00:26:44,240 --> 00:26:45,430 Membentuk semula fail ini. 565 00:26:45,430 --> 00:26:46,890 Buat satu fungsi. 566 00:26:46,890 --> 00:26:48,090 Dan sekarang, celaka, empat kesilapan. 567 00:26:48,090 --> 00:26:50,220 Mari kita tatal ke atas untuk yang pertama. 568 00:26:50,220 --> 00:26:55,070 >> Pengakuan tersirat fungsi mendapatkan int positif adalah tidak sah di C99. 569 00:26:55,070 --> 00:26:57,780 C99 hanya bermakna 1999 versi bahasa 570 00:26:57,780 --> 00:26:59,710 C, yang adalah apa yang kita sememangnya menggunakan. 571 00:26:59,710 --> 00:27:01,050 Jadi apa maknanya? 572 00:27:01,050 --> 00:27:05,250 Nah C-- dan lebih khusus C compilers-- program cantik dalam keadaan sihat. 573 00:27:05,250 --> 00:27:07,420 Mereka hanya tahu apa yang anda mempunyai memberitahu mereka, dan itu 574 00:27:07,420 --> 00:27:08,960 sebenarnya tema dari minggu lepas. 575 00:27:08,960 --> 00:27:12,910 >> Masalahnya ialah bahawa jika saya pergi mengenai melaksanakan nama di sini, 576 00:27:12,910 --> 00:27:17,640 dan saya memanggil fungsi yang dipanggil GetPositiveInt sini pada baris 20, 577 00:27:17,640 --> 00:27:22,520 fungsi yang secara teknikal tidak wujud sehingga pengkompil melihat baris 27. 578 00:27:22,520 --> 00:27:25,450 Malangnya, pengkompil adalah melakukan perkara-perkara atas, ke bawah, kiri, kanan, 579 00:27:25,450 --> 00:27:29,580 demikian kerana ia tidak melihat pelaksanaan GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 tetapi ia melihat anda cuba menggunakannya di sini, 581 00:27:32,400 --> 00:27:35,810 ia hanya akan bail-- menjerit pada anda dengan kesilapan message-- mungkin 582 00:27:35,810 --> 00:27:38,440 samar, dan tidak benar-benar menyusun fail. 583 00:27:38,440 --> 00:27:41,940 >> Jadi apa yang dipanggil prototaip sehingga di sini adalah diakui berlebihan. 584 00:27:41,940 --> 00:27:47,870 Secara harfiah, saya turun di sini dan saya disalin dan ditampal ini, dan saya meletakkan ia di sini. 585 00:27:47,870 --> 00:27:51,020 Tidak sah akan menjadi lebih betul, jadi kita akan harfiah salin dan tampal masa ini. 586 00:27:51,020 --> 00:27:52,854 Saya benar-benar disalin dan ditampal itu. 587 00:27:52,854 --> 00:27:54,270 Benar-benar seperti seperti serdak roti. 588 00:27:54,270 --> 00:27:56,260 >> Satu penunjuk yang sedikit untuk pengkompil. 589 00:27:56,260 --> 00:27:58,860 Saya tidak tahu apa ini tidak lagi, tetapi saya berjanji kepada anda 590 00:27:58,860 --> 00:28:00,260 bahawa ia akan wujud akhirnya. 591 00:28:00,260 --> 00:28:04,010 Dan itulah sebabnya ini line-- dalam talian 16-- berakhir dengan koma bernoktah. 592 00:28:04,010 --> 00:28:05,486 Ia diperlukan oleh reka bentuk. 593 00:28:05,486 --> 00:28:05,986 Ya? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Jika anda tidak menghubungkan perpustakaan anda untuk the-- oh, soalan yang baik. 596 00:28:14,360 --> 00:28:17,350 Sharp termasuk Kemasukan fail header. 597 00:28:17,350 --> 00:28:20,040 Perlu adalah-- sepatutnya hampir sentiasa di bahagian paling atas 598 00:28:20,040 --> 00:28:23,270 fail untuk similar-- untuk betul-betul sebab yang sama, ya. 599 00:28:23,270 --> 00:28:26,430 Kerana dalam standard io.h adalah benar-benar garis 600 00:28:26,430 --> 00:28:30,560 seperti ini, tetapi dengan printf perkataan, dan dengan hujah-hujah dan Jenis pengembaliannya. 601 00:28:30,560 --> 00:28:33,310 Dan dengan melakukan tajam termasuk sehingga di sini, apa yang anda benar-benar melakukan 602 00:28:33,310 --> 00:28:36,380 adalah menyalin dan menampal kandungan orang lain telah menulis sehingga atas. 603 00:28:36,380 --> 00:28:39,660 Dengan itu cluing kod anda dalam ke Hakikat bahawa fungsi-fungsi itu memang wujud. 604 00:28:39,660 --> 00:28:40,160 Yeah? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Sama sekali. 607 00:28:48,260 --> 00:28:51,690 Jadi yang sangat pandai dan betul penyelesaian akan menjadi, anda tahu apa? 608 00:28:51,690 --> 00:28:53,760 Saya tidak tahu apa yang prototaip adalah, tetapi saya tahu 609 00:28:53,760 --> 00:28:56,390 jika saya faham bahawa C adalah hanya bisu dan menafsir atas ke bawah. 610 00:28:56,390 --> 00:28:57,820 Nah mari kita memberikan apa yang ia mahu. 611 00:28:57,820 --> 00:29:01,650 Mari kita memotong kod itu, tampal sehingga atas, dan kini menolak utama ke bawah di bawah. 612 00:29:01,650 --> 00:29:03,470 Ini juga akan menyelesaikan masalah. 613 00:29:03,470 --> 00:29:07,409 >> Tetapi anda dengan mudah boleh datang dengan satu senario di mana A perlu memanggil B, 614 00:29:07,409 --> 00:29:10,075 dan mungkin B menyeru kembali kepada A. Ini adalah sesuatu yang dinamakan rekursi, 615 00:29:10,075 --> 00:29:11,370 dan kami akan kembali kepada itu. 616 00:29:11,370 --> 00:29:13,911 Dan ia mungkin atau mungkin tidak yang baik perkara, tetapi anda boleh pasti 617 00:29:13,911 --> 00:29:15,110 memecahkan penyelesaian ini. 618 00:29:15,110 --> 00:29:17,690 >> Dan lebih-lebih lagi, saya akan mendakwa stylistically, 619 00:29:17,690 --> 00:29:20,760 terutamanya apabila program anda menjadi yang panjang dan ini panjang, 620 00:29:20,760 --> 00:29:23,064 ia hanya super mudah untuk meletakkan utama di bahagian atas 621 00:29:23,064 --> 00:29:25,730 kerana ia adalah perkara yang paling pengaturcara akan mengambil berat tentang. 622 00:29:25,730 --> 00:29:28,150 Dan ia adalah lebih bersih sedikit, boleh dikatakan, untuk melakukannya dengan cara yang 623 00:29:28,150 --> 00:29:30,380 Saya asalnya melakukannya dengan prototaip walaupun 624 00:29:30,380 --> 00:29:33,396 walaupun ia kelihatan sedikit berlebihan pada pandangan pertama. 625 00:29:33,396 --> 00:29:33,895 Yeah? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Maaf, anda boleh mengatakan ia lebih kuat? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Jika anda menukar lokasi daripada pelaksanaan dan prototaip? 630 00:29:49,580 --> 00:29:51,270 Jadi itu adalah satu soalan yang baik. 631 00:29:51,270 --> 00:29:53,780 Mengisytiharkan semula jika anda ini ke bawah di sini, mari kita lihat apa yang berlaku. 632 00:29:53,780 --> 00:29:55,530 Jadi, jika saya meletakkan ini di sini, anda berkata. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Oh, maaf. 635 00:29:58,360 --> 00:29:58,859 Lebih kuat? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Lebih kuat. 638 00:30:04,011 --> 00:30:04,760 Oh, soalan yang baik. 639 00:30:04,760 --> 00:30:05,860 Ia akan membatalkan majlis itu? 640 00:30:05,860 --> 00:30:08,901 Anda tahu, selepas semua tahun-tahun ini, saya tidak pernah meletakkan prototaip selepas itu. 641 00:30:08,901 --> 00:30:13,810 Jadi mari kita buat membuat fungsi-1 selepas melakukan itu. 642 00:30:13,810 --> 00:30:15,279 >> [Rungut] 643 00:30:15,279 --> 00:30:16,320 DAVID J. MALAN: Oh, tunggu. 644 00:30:16,320 --> 00:30:17,944 Kita masih perlu meletakkan segala-galanya atas. 645 00:30:17,944 --> 00:30:21,400 Jadi mari kita buat ini di sini, jika saya memahami soalan anda dengan betul. 646 00:30:21,400 --> 00:30:24,700 Saya meletakkan segala-galanya, termasuk prototaip di atas utama, 647 00:30:24,700 --> 00:30:28,180 tetapi saya meletakkan prototaip di bawah pelaksanaan. 648 00:30:28,180 --> 00:30:33,190 >> Jadi jika saya membuat satu, saya mendapat kembali satu error-- yang tidak digunakan boleh ubah n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Oh, di sana. 651 00:30:37,860 --> 00:30:38,360 Terima kasih. 652 00:30:38,360 --> 00:30:39,430 Mari kita lihat, kita menyingkirkan ini. 653 00:30:39,430 --> 00:30:41,304 Itu bug yang berbeza, jadi mari kita mengabaikan itu. 654 00:30:41,304 --> 00:30:43,910 Mari kita benar-benar cepat membentuk semula ini. 655 00:30:43,910 --> 00:30:48,100 >> OK, jadi tidak hujah data yang digunakan oleh format String 656 00:30:48,100 --> 00:30:52,310 n-- oh, itu kerana Saya ditukar kepada ini di sini. 657 00:30:52,310 --> 00:30:55,885 Baiklah, kita tahu apa jawapannya akan supaya- semua betul, di sini kita pergi. 658 00:30:55,885 --> 00:31:00,560 Ah, terima kasih kerana positif. 659 00:31:00,560 --> 00:31:03,430 Baiklah, saya akan menetapkan kod ini after-- mengabaikan pepijat ini khususnya 660 00:31:03,430 --> 00:31:08,300 kerana ini was-- ia berfungsi adalah jawapannya. 661 00:31:08,300 --> 00:31:11,560 >> Oleh itu, ia tidak akan tulis semula apa yang anda baru sahaja selesai. 662 00:31:11,560 --> 00:31:14,800 Saya mengesyaki pengkompil ditulis dalam apa-apa cara 663 00:31:14,800 --> 00:31:18,420 bahawa ia mengabaikan prototaip anda kerana badan, boleh dikatakan, 664 00:31:18,420 --> 00:31:20,922 fungsi yang telah pun dilaksanakan sehingga lebih tinggi. 665 00:31:20,922 --> 00:31:23,380 Saya akan mempunyai untuk benar-benar berunding secara manual pengkompil 666 00:31:23,380 --> 00:31:26,171 untuk memahami jika ada yang lain implikasi, tetapi pada pandangan pertama 667 00:31:26,171 --> 00:31:29,290 hanya dengan mencuba dan bereksperimen, terdapat seolah-olah tidak memberi kesan. 668 00:31:29,290 --> 00:31:30,730 Soalan yang baik. 669 00:31:30,730 --> 00:31:33,660 >> Jadi mari kita melangkah ke hadapan sekarang, bergerak dari kesan sampingan yang 670 00:31:33,660 --> 00:31:36,660 adalah fungsi yang melakukan sesuatu seperti visual pada skrin dengan printf, 671 00:31:36,660 --> 00:31:38,090 tetapi tidak mengembalikan nilai. 672 00:31:38,090 --> 00:31:41,550 Dan fungsi yang mempunyai pulangan nilai seperti kita hanya melihat beberapa. 673 00:31:41,550 --> 00:31:45,350 Kita sudah melihat idea ini skop, dan kita akan melihat ini lagi dan lagi. 674 00:31:45,350 --> 00:31:47,210 Tetapi buat masa ini, sekali lagi, menggunakan peraturan ibu jari 675 00:31:47,210 --> 00:31:51,410 bahawa pemboleh ubah yang hanya boleh digunakan dalam satu yang paling baru-baru ini dibuka 676 00:31:51,410 --> 00:31:54,350 dan pendakap kerinting tertutup seperti yang kita melihat dalam contoh tersebut. 677 00:31:54,350 --> 00:31:56,910 >> Dan seperti yang anda berkata, terdapat satu ability-- 678 00:31:56,910 --> 00:32:00,040 anda boleh menyelesaikan beberapa masalah-masalah ini dengan meletakkan pembolehubah global 679 00:32:00,040 --> 00:32:01,290 di bahagian paling atas fail. 680 00:32:01,290 --> 00:32:03,630 Tetapi dalam hampir semua kes kita akan berkerut apabila itu, 681 00:32:03,630 --> 00:32:06,170 dan sememangnya tidak pergi ke dalam bahawa penyelesaian buat masa sekarang. 682 00:32:06,170 --> 00:32:09,890 Jadi buat masa ini, bisa dibesarkan ialah pembolehubah mempunyai tanggapan ini skop. 683 00:32:09,890 --> 00:32:13,430 >> Tetapi sekarang mari kita lihat satu lagi cara kering sebenarnya mencari 684 00:32:13,430 --> 00:32:15,810 di beberapa cukup menarik butir-butir pelaksanaan. 685 00:32:15,810 --> 00:32:17,810 Bagaimana kita boleh mewakili maklumat. 686 00:32:17,810 --> 00:32:20,370 Dan kita sudah melihat ini pada minggu pertama kelas. 687 00:32:20,370 --> 00:32:23,320 Melihat binari, dan mengingatkan diri kita tentang perpuluhan. 688 00:32:23,320 --> 00:32:28,310 >> Tetapi ingat dari minggu lepas bahawa C mempunyai jenis data yang berlainan dan tandan lanjut, 689 00:32:28,310 --> 00:32:30,600 tetapi yang paling berguna sekarang mungkin ini. 690 00:32:30,600 --> 00:32:36,030 A char, atau watak, yang berlaku menjadi satu bait, atau lapan bit total. 691 00:32:36,030 --> 00:32:40,060 Dan itu untuk mengatakan bahawa saiz arang yang hanya salah satu bait. 692 00:32:40,060 --> 00:32:45,370 Bait adalah lapan bit, jadi ini bermakna bahawa kita boleh mewakili berapa banyak aksara. 693 00:32:45,370 --> 00:32:47,320 Berapa banyak huruf atau simbol pada papan kekunci 694 00:32:47,320 --> 00:32:49,210 jika kita mempunyai satu bait atau lapan bit. 695 00:32:49,210 --> 00:32:51,546 Fikirkan kembali ke minggu sifar. 696 00:32:51,546 --> 00:32:53,420 Jika anda mempunyai lapan bit, berapa jumlah nilai 697 00:32:53,420 --> 00:32:55,503 anda boleh mewakili dengan corak sifar dan orang-orang? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 One-- lebih daripada itu. 700 00:33:00,260 --> 00:33:03,490 Jadi jumlah 256 jika anda mula mengira dari sifar. 701 00:33:03,490 --> 00:33:07,120 Jadi jika anda mempunyai lapan bits-- jadi jika kita mempunyai mentol binari kami di sini sekali lagi, 702 00:33:07,120 --> 00:33:12,180 kita boleh menyahaktifkan mentol lampu pada dan di luar di mana-mana 256 corak unik. 703 00:33:12,180 --> 00:33:13,640 >> Sekarang ini agak bermasalah. 704 00:33:13,640 --> 00:33:16,857 Tidak begitu banyak untuk Bahasa Inggeris dan bahasa cinta, tetapi sudah tentu 705 00:33:16,857 --> 00:33:19,190 apabila anda memperkenalkan, untuk Contohnya, bahasa Asia, yang 706 00:33:19,190 --> 00:33:22,580 mempunyai lebih daripada simbol seperti 26 huruf abjad. 707 00:33:22,580 --> 00:33:24,390 Kami benar-benar mungkin perlu lebih daripada satu bait. 708 00:33:24,390 --> 00:33:28,240 Dan bersyukur kerana di tahun baru-baru ini mempunyai masyarakat 709 00:33:28,240 --> 00:33:31,040 pakai piawaian lain yang menggunakan lebih daripada satu bait setiap pertuduhan. 710 00:33:31,040 --> 00:33:34,210 >> Tetapi untuk sekarang di C, lalai hanya satu bait atau lapan bit. 711 00:33:34,210 --> 00:33:38,195 Integer, sementara itu, adalah empat bait, atau dikenali sebagai 32 bit. 712 00:33:38,195 --> 00:33:41,320 Ertinya apa yang terbesar mungkin bilangan kita boleh mewakili dengan int satu 713 00:33:41,320 --> 00:33:41,820 nampaknya? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 Dengan bilion. 716 00:33:45,050 --> 00:33:46,760 Jadi ia empat bilion memberi atau mengambil. 717 00:33:46,760 --> 00:33:49,840 2 kepada kuasa 32th, jika kita tidak menanggung sebarang nombor negatif 718 00:33:49,840 --> 00:33:52,530 dan hanya menggunakan semua positif nombor, ia empat bilion 719 00:33:52,530 --> 00:33:53,730 memberikan atau mengambil kemungkinan. 720 00:33:53,730 --> 00:33:57,890 Float A, sementara itu, adalah jenis yang berbeza jenis data dalam C. Ia masih nombor, 721 00:33:57,890 --> 00:33:58,990 tetapi ia adalah nombor nyata. 722 00:33:58,990 --> 00:34:00,660 Sesuatu dengan titik perpuluhan. 723 00:34:00,660 --> 00:34:03,000 Dan ternyata bahawa C juga menggunakan empat bait 724 00:34:03,000 --> 00:34:05,340 untuk mewakili nilai-nilai titik terapung. 725 00:34:05,340 --> 00:34:09,420 >> Malangnya berapa terapung mata yang ada di dunia? 726 00:34:09,420 --> 00:34:11,582 Berapa banyak nombor nyata yang ada? 727 00:34:11,582 --> 00:34:13,540 Ada yang tidak terhad nombor, dan dalam hal ini 728 00:34:13,540 --> 00:34:15,164 ada nombor tak terhingga integer. 729 00:34:15,164 --> 00:34:18,070 Oleh itu, kita sudah jenis menggali lubang diri kita di sini. 730 00:34:18,070 --> 00:34:21,780 Mana nampaknya dalam computers-- di kurangnya program yang ditulis dalam C pada them-- 731 00:34:21,780 --> 00:34:24,110 hanya boleh mengira setinggi empat bilion memberi atau mengambil, 732 00:34:24,110 --> 00:34:26,260 dan terapung mata yang hanya boleh nampaknya 733 00:34:26,260 --> 00:34:28,330 mempunyai beberapa jumlah yang terbatas ketepatan. 734 00:34:28,330 --> 00:34:30,810 Hanya begitu banyak digit selepas titik perpuluhan mereka. 735 00:34:30,810 --> 00:34:32,822 >> Kerana, sudah tentu, jika anda hanya mempunyai 32 bit, 736 00:34:32,822 --> 00:34:36,030 Saya tidak tahu bagaimana kita akan pergi tentang mewakili numbers-- sebenar mungkin 737 00:34:36,030 --> 00:34:37,409 dengan pelbagai jenis corak. 738 00:34:37,409 --> 00:34:40,030 Tetapi ada pasti terbatas beberapa corak itu, 739 00:34:40,030 --> 00:34:41,830 jadi di sini, juga, ini adalah bermasalah. 740 00:34:41,830 --> 00:34:43,710 >> Sekarang kita boleh mengelakkan masalah yang sama. 741 00:34:43,710 --> 00:34:45,710 Jika anda tidak menggunakan apungan, anda boleh menggunakan dua 742 00:34:45,710 --> 00:34:50,230 dalam C, yang memberikan anda lapan bait, yang adalah cara yang lebih corak mungkin sifar 743 00:34:50,230 --> 00:34:50,730 dan orang-orang. 744 00:34:50,730 --> 00:34:55,199 Tetapi ia masih terbatas, yang akan menjadi bermasalah jika anda menulis perisian 745 00:34:55,199 --> 00:34:57,670 untuk grafik atau untuk mewah formula matematik. 746 00:34:57,670 --> 00:35:00,410 Jadi, anda sebenarnya mungkin mahu untuk mengira sehingga lebih besar daripada itu. 747 00:35:00,410 --> 00:35:05,640 A panjang long-- bodoh named-- juga lapan bait, atau 64 bit, 748 00:35:05,640 --> 00:35:10,260 dan ini adalah dua kali lebih lama sebagai int satu, dan ia untuk nilai integer yang lama. 749 00:35:10,260 --> 00:35:15,655 >> Fact-- Fun jika int adalah empat bait, berapa lama lama dalam C biasanya? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Juga empat bait, tetapi lama lama lapan bait, 752 00:35:21,560 --> 00:35:23,050 dan ini adalah atas sebab-sebab sejarah. 753 00:35:23,050 --> 00:35:26,450 >> Tetapi Takeaway sekarang hanya data yang mempunyai 754 00:35:26,450 --> 00:35:29,625 untuk diwakili dalam computer-- itu peranti fizikal dengan elektrik, 755 00:35:29,625 --> 00:35:32,190 ia biasanya memandu orang-orang dan sifar ones-- 756 00:35:32,190 --> 00:35:34,320 dengan jumlah yang terbatas ketepatan. 757 00:35:34,320 --> 00:35:35,620 Jadi apa masalah itu? 758 00:35:35,620 --> 00:35:37,480 >> Juga ada masalah limpahan integer. 759 00:35:37,480 --> 00:35:39,780 Bukan sahaja pada C, tetapi dalam komputer secara umum. 760 00:35:39,780 --> 00:35:42,590 Sebagai contoh, jika ini ialah satu bait bernilai bit-- 761 00:35:42,590 --> 00:35:45,120 jadi jika ini adalah lapan bit-- semua di antaranya adalah nombor satu. 762 00:35:45,120 --> 00:35:47,300 Apakah nombor ini adalah mewakili kita menganggap 763 00:35:47,300 --> 00:35:50,730 itu semua nilai-nilai positif dalam binari? 764 00:35:50,730 --> 00:35:54,410 >> 255, dan ia bukan 256, kerana sifar adalah nombor yang paling rendah. 765 00:35:54,410 --> 00:35:56,760 Jadi 255 adalah yang tertinggi satu, tetapi masalahnya 766 00:35:56,760 --> 00:36:00,330 adalah menganggap bahawa saya mahu menokokkan pembolehubah ini yang 767 00:36:00,330 --> 00:36:04,030 menggunakan lapan bit jumlah jika saya mahu untuk kenaikan itu. 768 00:36:04,030 --> 00:36:07,160 >> Dan saya pilih yang satu untuk semua orang-orang ini, 769 00:36:07,160 --> 00:36:10,500 anda mungkin boleh bayangkan visually-- hanya seperti menjalankan satu menggunakan decimals-- 770 00:36:10,500 --> 00:36:12,300 sesuatu yang akan mengalir ke kiri. 771 00:36:12,300 --> 00:36:15,590 Dan sesungguhnya, jika saya menambah bilangan satu ini, apa yang berlaku dalam binari 772 00:36:15,590 --> 00:36:17,670 ialah ia melimpah kembali ke sifar. 773 00:36:17,670 --> 00:36:21,730 >> Jadi jika anda hanya tidak use-- int satu, tetapi bait tunggal untuk mengira bilangan bulat 774 00:36:21,730 --> 00:36:27,170 dalam program, dengan default-- secepat anda mendapat 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 datang selepas 255, yang mungkin tidak apa yang 776 00:36:32,710 --> 00:36:34,790 pengguna akan mengharapkan. 777 00:36:34,790 --> 00:36:39,620 >> Sekarang pula di dunia terapung titik, anda juga mempunyai masalah yang sama. 778 00:36:39,620 --> 00:36:42,670 Tidak begitu banyak dengan number-- terbesar walaupun itu masih isu. 779 00:36:42,670 --> 00:36:45,360 Tetapi dengan jumlah ketepatan bahawa anda boleh mewakili. 780 00:36:45,360 --> 00:36:49,490 Jadi mari kita lihat pada contoh ini di sini juga dari code-- sumber hari ini 781 00:36:49,490 --> 00:36:52,070 terapung-0.c. 782 00:36:52,070 --> 00:36:54,280 >> Dan notis itu super yang program mudah yang 783 00:36:54,280 --> 00:36:56,580 nampaknya perlu mencetak apa nilai keluar? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Apa yang anda taruhan ini akan mencetak walaupun ada sedikit sintaks baru 786 00:37:04,110 --> 00:37:05,540 di sini? 787 00:37:05,540 --> 00:37:06,700 Jadi mudah-mudahan 0.1. 788 00:37:06,700 --> 00:37:10,000 Jadi sama dengan satu per sepuluh kerana saya melakukan 1 dibahagikan dengan 10. 789 00:37:10,000 --> 00:37:12,430 Saya menyimpan jawapan dalam pembolehubah yang dipanggil f. 790 00:37:12,430 --> 00:37:15,850 Pembolehubah yang jenis apungan, yang adalah kata kunci yang saya dicadangkan wujud. 791 00:37:15,850 --> 00:37:18,910 >> Kami telah tidak dilihat sebelum ini, tetapi ini adalah jenis cara yang kemas dalam printf 792 00:37:18,910 --> 00:37:22,110 untuk menentukan berapa angka anda mahu melihat selepas titik perpuluhan. 793 00:37:22,110 --> 00:37:25,020 Jadi notasi ini hanya bermakna bahawa di sini adalah pemegang tempat yang. 794 00:37:25,020 --> 00:37:27,900 Ia untuk titik terapung nilai, dan oh, dengan cara itu, 795 00:37:27,900 --> 00:37:31,389 menunjukkan dengan titik perpuluhan dengan satu nombor selepas titik perpuluhan. 796 00:37:31,389 --> 00:37:33,180 Jadi, bilangan daripada digit bererti, 797 00:37:33,180 --> 00:37:34,650 boleh dikatakan, yang anda mungkin mahu. 798 00:37:34,650 --> 00:37:40,450 >> Jadi biarlah saya pergi ke hadapan dan melakukan membuat apungan-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 dan nampaknya 1 dibahagikan dengan 10 adalah 0.0. 800 00:37:46,660 --> 00:37:47,760 Sekarang mengapa ini? 801 00:37:47,760 --> 00:37:51,380 >> Baik lagi, komputer sedang mengambil saya benar-benar, dan saya telah menulis 1 802 00:37:51,380 --> 00:37:56,680 dan saya bertulis 10, dan mengambil meneka apa adalah jenis data yang diandaikan untuk kedua-dua 803 00:37:56,680 --> 00:37:58,440 nilai-nilai? 804 00:37:58,440 --> 00:38:00,970 Satu int, ia secara teknikal sesuatu yang sedikit berbeza. 805 00:38:00,970 --> 00:38:04,150 Ia biasanya yang panjang, tetapi ia akhirnya nilai penting. 806 00:38:04,150 --> 00:38:06,030 Bukan nilai titik terapung. 807 00:38:06,030 --> 00:38:09,456 >> Yang mengatakan bahawa jika ini adalah int dan ini adalah satu int, 808 00:38:09,456 --> 00:38:11,830 masalahnya ialah bahawa komputer tidak mempunyai keupayaan 809 00:38:11,830 --> 00:38:13,680 malah menyimpan bahawa titik perpuluhan. 810 00:38:13,680 --> 00:38:16,430 Oleh itu, apabila anda melakukan 1 dibahagikan sebanyak 10 menggunakan integer 811 00:38:16,430 --> 00:38:20,950 untuk kedua-dua pengangka dan penyebut, jawapannya harus 0.1. 812 00:38:20,950 --> 00:38:24,930 Tetapi computer-- kerana mereka adalah integers-- 813 00:38:24,930 --> 00:38:27,430 tidak tahu apa yang perlu dilakukan dengan 0.1. 814 00:38:27,430 --> 00:38:30,010 >> Jadi apa yang jelas lakukan? 815 00:38:30,010 --> 00:38:33,120 Ia hanya membuang ia jauh, dan apa yang saya lihat akhirnya 816 00:38:33,120 --> 00:38:38,830 adalah 0.0 hanya kerana saya menegaskan bahawa printf menunjukkan saya satu titik perpuluhan. 817 00:38:38,830 --> 00:38:41,740 Tetapi masalahnya ialah bahawa jika anda membahagi integer dengan integer, 818 00:38:41,740 --> 00:38:44,347 anda akan get-- mengikut definisi daripada C-- integer. 819 00:38:44,347 --> 00:38:46,680 Dan ia tidak akan melakukan sesuatu yang baik dan mudah 820 00:38:46,680 --> 00:38:49,040 seperti pusingan ia sehingga terdekat satu atas atau bawah. 821 00:38:49,040 --> 00:38:51,860 Ia akan memotong segala-galanya selepas perpuluhan. 822 00:38:51,860 --> 00:38:54,030 >> Jadi, secara intuitif, apa yang mungkin menetapkan satu? 823 00:38:54,030 --> 00:38:55,351 Apa yang menetapkan yang paling mudah di sini? 824 00:38:55,351 --> 00:38:55,850 Yeah? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Tepat sekali. 827 00:39:01,100 --> 00:39:04,200 Mengapa kita tidak merawat ini sebagai mata yang terapung berkesan 828 00:39:04,200 --> 00:39:05,860 menjadikan mereka terapung atau beregu. 829 00:39:05,860 --> 00:39:10,500 Dan kini jika saya membuat terapung-0, atau jika saya menyusun terapung-1, 830 00:39:10,500 --> 00:39:12,570 yang serupa dengan apa yang hanya dicadangkan. 831 00:39:12,570 --> 00:39:16,400 Dan kini saya lakukan terapung-0, kini saya mendapat 0.1 saya. 832 00:39:16,400 --> 00:39:17,234 >> Sekarang ini luar biasa. 833 00:39:17,234 --> 00:39:19,441 Tetapi sekarang saya akan lakukan sesuatu yang sedikit berbeza. 834 00:39:19,441 --> 00:39:22,280 Saya ingin tahu untuk melihat apa yang benar-benar berlaku di bawah hud, 835 00:39:22,280 --> 00:39:26,050 dan saya akan cetak ini kepada 28 tempat perpuluhan. 836 00:39:26,050 --> 00:39:29,730 Saya benar-benar mahu melihat 0.1000-- infinite-- satu 837 00:39:29,730 --> 00:39:32,710 [Didengar] 27 angka sifar yang 0.1. 838 00:39:32,710 --> 00:39:34,740 >> Nah mari kita lihat jika itu sesungguhnya apa yang saya dapat. 839 00:39:34,740 --> 00:39:39,430 Buat terapung-0 fail sama. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Mari kita mengezum masuk pada jawapan dramatik. 842 00:39:44,380 --> 00:39:49,980 Semua masa ini, anda telah berfikir 1 dibahagikan dengan 10 adalah 10%, atau 0.1. 843 00:39:49,980 --> 00:39:50,810 Ia bukan. 844 00:39:50,810 --> 00:39:53,210 Sekurang-kurangnya setakat yang komputer berkenaan. 845 00:39:53,210 --> 00:39:57,060 >> Sekarang why-- OK, itu lengkap dusta 1 dibahagikan dengan 10 adalah 0.1. 846 00:39:57,060 --> 00:39:59,710 Tetapi why-- yang tidak Takeaway hari ini. 847 00:39:59,710 --> 00:40:04,010 Jadi mengapa komputer berfikir, tidak seperti kita semua di dalam bilik, 848 00:40:04,010 --> 00:40:06,870 bahawa 1 dibahagikan dengan 10 adalah sebenarnya bahawa nilai gila? 849 00:40:06,870 --> 00:40:10,620 Apa yang komputer melakukan nampaknya? 850 00:40:10,620 --> 00:40:12,490 Apa itu? 851 00:40:12,490 --> 00:40:13,785 >> Ia tidak melimpah, per se. 852 00:40:13,785 --> 00:40:15,910 Limpahan biasanya apabila anda membalut di sekitar nilai. 853 00:40:15,910 --> 00:40:18,970 Ia isu ini ketakpersisan dalam nilai mata terapung 854 00:40:18,970 --> 00:40:22,220 di mana anda hanya mempunyai 32 atau mungkin juga 64 bit. 855 00:40:22,220 --> 00:40:25,230 Tetapi jika ada yang tidak terhad beberapa numbers-- sebenar 856 00:40:25,230 --> 00:40:27,940 nombor dengan titik perpuluhan dan nombor thereafter-- pasti 857 00:40:27,940 --> 00:40:29,380 anda tidak boleh mewakili mereka semua. 858 00:40:29,380 --> 00:40:32,870 Jadi komputer telah memberikan Perlawanan kami yang paling dekat 859 00:40:32,870 --> 00:40:37,090 kepada nilai yang boleh mewakili yang menggunakan banyak bit dengan nilai yang saya benar-benar mahu, 860 00:40:37,090 --> 00:40:38,690 iaitu 0.1. 861 00:40:38,690 --> 00:40:40,685 >> Malangnya, jika anda mula melakukan matematik, atau anda 862 00:40:40,685 --> 00:40:44,360 mula melibatkan jenis-jenis terapung mata yang di programs-- penting 863 00:40:44,360 --> 00:40:46,770 perisian kewangan, apa-apa software-- tentera 864 00:40:46,770 --> 00:40:49,090 di mana persepsi adalah mungkin cukup penting. 865 00:40:49,090 --> 00:40:51,520 Dan anda mula menambah nombor seperti ini, dan permulaan 866 00:40:51,520 --> 00:40:54,050 menjalankan perisian yang dengan input benar-benar besar 867 00:40:54,050 --> 00:40:56,890 atau banyak masa atau banyak hari atau banyak tahun, 868 00:40:56,890 --> 00:41:01,060 ini kesilapan kecil sedikit sudah tentu boleh menambah sehingga dari masa ke masa. 869 00:41:01,060 --> 00:41:04,252 >> Sekarang sebagai diketepikan, jika anda telah pernah dilihat Superman 3 atau Ruang Pejabat 870 00:41:04,252 --> 00:41:05,960 dan anda mungkin ingat bagaimana orang-orang lelaki mencuri 871 00:41:05,960 --> 00:41:08,668 wang yang banyak dari komputer mereka dengan menggunakan mata yang terapung 872 00:41:08,668 --> 00:41:11,290 dan menambah sehingga kecil peninggalan, mudah-mudahan filem yang 873 00:41:11,290 --> 00:41:12,390 kini lebih masuk akal. 874 00:41:12,390 --> 00:41:14,930 Ini adalah apa yang mereka merujuk kepada dalam filem itu. 875 00:41:14,930 --> 00:41:16,710 Fakta bahawa kebanyakan syarikat tidak akan melihat 876 00:41:16,710 --> 00:41:18,600 selepas beberapa tertentu tempat perpuluhan, 877 00:41:18,600 --> 00:41:20,009 tetapi mereka adalah pecahan sen. 878 00:41:20,009 --> 00:41:22,550 Jadi anda mula menambah mereka, anda mula membuat wang yang banyak 879 00:41:22,550 --> 00:41:23,424 dalam akaun bank anda. 880 00:41:23,424 --> 00:41:25,160 Jadi itulah Ruang Pejabat dijelaskan. 881 00:41:25,160 --> 00:41:28,220 >> Sekarang malangnya di luar Ruang Pejabat, terdapat 882 00:41:28,220 --> 00:41:31,794 adalah beberapa sah merisaukan dan kesan yang ketara 883 00:41:31,794 --> 00:41:33,710 jenis-jenis keputusan reka bentuk asas, 884 00:41:33,710 --> 00:41:35,990 dan sememangnya salah satu sebab kita menggunakan C dalam perjalanan 885 00:41:35,990 --> 00:41:39,640 adalah supaya anda benar-benar mempunyai alasan ini sehingga memahami bagaimana komputer berfungsi, 886 00:41:39,640 --> 00:41:42,440 bagaimana perisian kerja-kerja, dan tidak mengambil apa-apa untuk diberikan. 887 00:41:42,440 --> 00:41:45,820 >> Dan sesungguhnya malangnya, walaupun dengan bahawa pemahaman asas, 888 00:41:45,820 --> 00:41:47,370 kita manusia melakukan kesilapan. 889 00:41:47,370 --> 00:41:51,310 Dan apa yang saya fikir saya akan berkongsi adalah video ini lapan minit di sini diambil 890 00:41:51,310 --> 00:41:56,980 dari episod Marvels moden, yang persembahan pendidikan mengenai gerak kerja 891 00:41:56,980 --> 00:42:00,370 yang cat dua gambar apabila satu penggunaan yang tidak betul 892 00:42:00,370 --> 00:42:02,540 dan pemahaman mata yang terapung 893 00:42:02,540 --> 00:42:05,610 membawa kepada beberapa penting keputusan malang. 894 00:42:05,610 --> 00:42:06,363 Mari kita lihat. 895 00:42:06,363 --> 00:42:07,029 [VIDEO MAIN SEMULA] 896 00:42:07,029 --> 00:42:11,290 -Kami Kini kembali ke "Kejuruteraan Bencana "pada Marvels moden. 897 00:42:11,290 --> 00:42:12,940 Komputer. 898 00:42:12,940 --> 00:42:15,580 Kita semua telah datang untuk menerima masalah yang sering mengecewakan 899 00:42:15,580 --> 00:42:20,960 mendapat dengan them-- pepijat, virus, dan glitches-- perisian untuk harga kecil 900 00:42:20,960 --> 00:42:23,100 membayar untuk kemudahan tersebut. 901 00:42:23,100 --> 00:42:27,770 Tetapi dalam teknologi tinggi dan kelajuan tinggi tentera dan program angkasa aplikasi, 902 00:42:27,770 --> 00:42:32,780 masalah yang paling kecil boleh diperbesar-besarkan ke dalam bencana. 903 00:42:32,780 --> 00:42:38,880 >> Pada 4 Jun 1996, ahli-ahli sains disediakan untuk melancarkan tanpa pemandu Ariane 5 roket. 904 00:42:38,880 --> 00:42:41,190 Ia membawa saintifik satelit yang direka 905 00:42:41,190 --> 00:42:44,570 untuk menubuhkan tepat bagaimana Berinteraksi medan magnet bumi 906 00:42:44,570 --> 00:42:47,380 dengan angin suria. 907 00:42:47,380 --> 00:42:50,580 Roket ini dibina untuk Agensi Angkasa Eropah, 908 00:42:50,580 --> 00:42:54,400 dan diangkat dari kemudahannya di pantai French Guiana. 909 00:42:54,400 --> 00:42:57,520 >> -At Kira-kira 37 saat ke dalam penerbangan, mereka pertama 910 00:42:57,520 --> 00:42:59,070 perasan sesuatu yang telah pergi salah. 911 00:42:59,070 --> 00:43:02,240 Bahawa muncung telah berputar dengan cara yang mereka benar-benar tidak sepatutnya. 912 00:43:02,240 --> 00:43:06,550 Kira-kira 40 saat ke dalam penerbangan, jelas kenderaan itu ialah dalam kesusahan, 913 00:43:06,550 --> 00:43:08,820 dan itulah apabila mereka membuat keputusan untuk memusnahkannya. 914 00:43:08,820 --> 00:43:12,370 Pegawai keselamatan pelbagai, dengan keberanian yang luar biasa, ditekan butang 915 00:43:12,370 --> 00:43:18,030 dan meletupkan roket sebelum ia boleh menjadi bahaya kepada keselamatan awam. 916 00:43:18,030 --> 00:43:21,010 >> -Ini Adalah sulung pelayaran di Ariane 5, 917 00:43:21,010 --> 00:43:23,920 dan kemusnahan mengambil meletakkan kerana kecacatan yang 918 00:43:23,920 --> 00:43:25,932 tertanam dalam perisian roket ini. 919 00:43:25,932 --> 00:43:27,640 -The masalah pada Ariane adalah bahawa terdapat 920 00:43:27,640 --> 00:43:30,500 adalah nombor yang dikehendaki 64 bit untuk menyatakan, 921 00:43:30,500 --> 00:43:33,560 dan mereka mahu untuk menukar kepada beberapa 16-bit. 922 00:43:33,560 --> 00:43:36,820 Mereka mengandaikan bahawa jumlah tidak pernah akan menjadi sangat besar. 923 00:43:36,820 --> 00:43:40,940 Bahawa kebanyakan mereka digit dalam nombor 64-bit adalah sifar. 924 00:43:40,940 --> 00:43:42,450 Mereka salah. 925 00:43:42,450 --> 00:43:45,000 >> -The ketidakupayaan satu program perisian untuk menerima 926 00:43:45,000 --> 00:43:49,460 jenis nombor yang dijana oleh lain merupakan punca kegagalan. 927 00:43:49,460 --> 00:43:54,260 Pembangunan perisian telah menjadi bahagian yang sangat mahal teknologi baru. 928 00:43:54,260 --> 00:43:57,060 Ariane 4 roket mempunyai sangat berjaya. 929 00:43:57,060 --> 00:44:01,600 Sekian banyak daripada perisian yang diwujudkan untuk ia juga digunakan dalam Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -The masalah asas ialah Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Telah faster-- dipercepatkan lebih cepat, dan perisian yang telah tidak diambil kira itu. 932 00:44:11,200 --> 00:44:14,910 >> -The kemusnahan roket merupakan satu malapetaka kewangan yang besar. 933 00:44:14,910 --> 00:44:18,630 Semua kerana kesilapan perisian minit. 934 00:44:18,630 --> 00:44:21,160 Tetapi ini bukan yang pertama masa masalah penukaran data 935 00:44:21,160 --> 00:44:24,770 telah dibelenggu teknologi roket moden. 936 00:44:24,770 --> 00:44:28,020 >> -Dalam 1991 dengan permulaan Perang Teluk pertama, 937 00:44:28,020 --> 00:44:30,540 peluru berpandu Patriot yang mengalami jenis yang sama 938 00:44:30,540 --> 00:44:32,465 daripada masalah jumlah penukaran. 939 00:44:32,465 --> 00:44:36,760 Dan hasilnya 28 people-- 28 Soldiers-- Amerika terbunuh, 940 00:44:36,760 --> 00:44:39,010 dan kira-kira seratus orang lain cedera. 941 00:44:39,010 --> 00:44:42,830 Apabila Patriot, yang sepatutnya untuk melindungi daripada Scuds masuk, 942 00:44:42,830 --> 00:44:45,780 gagal untuk menembak peluru berpandu. 943 00:44:45,780 --> 00:44:51,610 >> -Apabila Iraq menyerang Kuwait, dan Amerika dilancarkan Desert Storm pada awal tahun 1991, 944 00:44:51,610 --> 00:44:55,720 Bateri peluru berpandu Patriot telah dikerahkan untuk melindungi Arab Saudi dan Israel 945 00:44:55,720 --> 00:44:59,180 daripada serangan peluru berpandu Scud Iraq. 946 00:44:59,180 --> 00:45:03,080 Patriot adalah US jarak sederhana permukaan-ke-udara sistem 947 00:45:03,080 --> 00:45:06,530 dihasilkan oleh syarikat Raytheon itu. 948 00:45:06,530 --> 00:45:09,500 >> Saiz-The daripada Patriot pemintas itself-- 949 00:45:09,500 --> 00:45:14,705 ia kira-kira kira-kira 20 kaki panjang, dan ia mempunyai berat kira-kira 2,000 paun. 950 00:45:14,705 --> 00:45:19,090 Dan ia membawa kepala peledak kira-kira, Saya fikir ia adalah kira-kira £ 150. 951 00:45:19,090 --> 00:45:23,880 Dan kepala peledak itu sendiri letupan yang tinggi, yang 952 00:45:23,880 --> 00:45:26,700 mempunyai serpihan di sekelilingnya. 953 00:45:26,700 --> 00:45:31,630 Oleh itu, sarung kepala peledak adalah direka untuk bertindak seperti peluru a. 954 00:45:31,630 --> 00:45:34,040 >> -The peluru berpandu dijalankan empat per kontena, 955 00:45:34,040 --> 00:45:37,170 dan diangkut oleh semi trailer. 956 00:45:37,170 --> 00:45:44,880 >> -The Patriot sistem anti-peluru berpandu kembali sekurang-kurangnya 20 tahun. 957 00:45:44,880 --> 00:45:48,380 Ia pada asalnya direka sebagai pertahanan peluru berpandu udara 958 00:45:48,380 --> 00:45:50,810 menembak jatuh kapal terbang musuh. 959 00:45:50,810 --> 00:45:54,410 Dalam Perang Teluk pertama apabila perang itu datang, 960 00:45:54,410 --> 00:45:59,650 Tentera Darat mahu menggunakannya untuk menembak jatuh Scuds, bukan kapal terbang. 961 00:45:59,650 --> 00:46:03,580 Tentera Udara Iraq tidak begitu banyak masalah, 962 00:46:03,580 --> 00:46:06,590 tetapi Tentera bimbang mengenai Scuds. 963 00:46:06,590 --> 00:46:10,120 Dan kerana itu mereka cuba meningkatkan Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Musuh peluru berpandu bergerak pada kelajuan Mach 5 965 00:46:12,740 --> 00:46:15,670 telah akan mencabar cukup. 966 00:46:15,670 --> 00:46:18,440 Tetapi apabila Patriot dikejarkan ke dalam perkhidmatan, 967 00:46:18,440 --> 00:46:22,580 Tentera tidak sedar pengubahsuaian Iraq yang 968 00:46:22,580 --> 00:46:25,880 dibuat scuds mereka hampir mustahil untuk ia. 969 00:46:25,880 --> 00:46:30,690 >> -Apa Berlaku adalah Scuds yang telah datang adalah tidak stabil. 970 00:46:30,690 --> 00:46:32,000 Mereka goyah. 971 00:46:32,000 --> 00:46:37,210 Sebab untuk ini adalah Iraqis-- untuk mendapatkan 600 kilometer di luar 972 00:46:37,210 --> 00:46:41,680 daripada 300 kilometer pelbagai missile-- mengambil berat daripada kepala peledak depan, 973 00:46:41,680 --> 00:46:43,340 dan membuat kepala peledak yang lebih ringan. 974 00:46:43,340 --> 00:46:48,490 Jadi sekarang ini Patriot cuba untuk datang di Scud, dan kebanyakan time-- yang 975 00:46:48,490 --> 00:46:52,880 majoriti daripada time-- ia hanya akan terbang oleh Scud. 976 00:46:52,880 --> 00:46:57,120 >> -Sebaik Sahaja pengendali sistem Patriot menyedari Patriot terlepas sasaran, 977 00:46:57,120 --> 00:47:01,630 mereka meletupkan kepala peledak Patriot untuk mengelakkan kecederaan mungkin jika ia 978 00:47:01,630 --> 00:47:04,440 telah dibiarkan jatuh ke tanah. 979 00:47:04,440 --> 00:47:08,700 >> -Itu Adalah apa yang kebanyakan orang melihat seperti bola api yang besar di langit, 980 00:47:08,700 --> 00:47:14,180 dan salah faham sebagai memintas dari peluru Scud. 981 00:47:14,180 --> 00:47:18,020 >> -Although Di langit malam, Patriots muncul yang akan berjaya memusnahkan 982 00:47:18,020 --> 00:47:23,280 Scuds, di Dhahran mungkin ada kesilapan tidak mengenainya prestasinya. 983 00:47:23,280 --> 00:47:27,930 Terdapat sistem radar Patriot trek kehilangan satu Scud masuk 984 00:47:27,930 --> 00:47:30,260 dan tidak pernah dilancarkan berikutan kepada kecacatan perisian. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Ia adalah Israel yang pertama kali ditemui yang lagi sistem itu pada, 987 00:47:38,880 --> 00:47:41,130 yang lebih besar perbezaan masa yang menjadi. 988 00:47:41,130 --> 00:47:44,770 Oleh kerana jam tertanam dalam komputer sistem. 989 00:47:44,770 --> 00:47:48,190 >> -Pengenalan Dua minggu sebelum tragedi di Dhahran, 990 00:47:48,190 --> 00:47:50,720 Israel dilaporkan kepada Jabatan Pertahanan 991 00:47:50,720 --> 00:47:52,410 bahawa sistem telah kehilangan masa. 992 00:47:52,410 --> 00:47:54,410 Selepas kira-kira lapan jam berjalan, mereka melihat 993 00:47:54,410 --> 00:47:57,690 bahawa sistem ini menjadi nyata kurang tepat. 994 00:47:57,690 --> 00:48:01,850 Jabatan Pertahanan bertindak balas dengan memberitahu semua bateri Patriot 995 00:48:01,850 --> 00:48:04,800 untuk tidak meninggalkan sistem untuk masa yang panjang. 996 00:48:04,800 --> 00:48:06,980 Mereka tidak pernah mengatakan apa yang lama itu. 997 00:48:06,980 --> 00:48:09,140 8 jam, 10 jam, seribu jam. 998 00:48:09,140 --> 00:48:11,300 Tiada siapa yang tahu. 999 00:48:11,300 --> 00:48:13,320 >> -The Patriot bateri ditempatkan di berek 1000 00:48:13,320 --> 00:48:18,310 di Dhahran dan dalaman cacat yang jam telah selama lebih 100 jam 1001 00:48:18,310 --> 00:48:21,520 pada malam 25 Februari. 1002 00:48:21,520 --> 00:48:25,792 >> -Ia Dikesan masa untuk ketepatan kira-kira satu per sepuluh daripada satu saat. 1003 00:48:25,792 --> 00:48:27,950 Sekarang satu persepuluh saat adalah nombor menarik 1004 00:48:27,950 --> 00:48:31,850 kerana ia tidak boleh dinyatakan dalam binari betul-betul, yang 1005 00:48:31,850 --> 00:48:36,500 ertinya ia tidak boleh menyatakan dengan tepat di mana-mana komputer digital moden. 1006 00:48:36,500 --> 00:48:41,070 Sukar untuk percaya, tetapi menggunakan ini sebagai contoh. 1007 00:48:41,070 --> 00:48:43,420 >> Mari kita nombor satu ketiga. 1008 00:48:43,420 --> 00:48:47,330 Satu pertiga tidak boleh dinyatakan dalam perpuluhan dengan tepat. 1009 00:48:47,330 --> 00:48:52,060 Satu pertiga adalah 0.333 berlangsung selama infiniti. 1010 00:48:52,060 --> 00:48:56,420 Tidak ada cara untuk melakukan itu dengan ketepatan mutlak dalam nombor perpuluhan. 1011 00:48:56,420 --> 00:48:59,530 Itulah jenis masalah yang berlaku di Patriot. 1012 00:48:59,530 --> 00:49:04,040 Semakin lama sistem ini berjalan, yang lebih teruk ralat masa yang menjadi. 1013 00:49:04,040 --> 00:49:08,840 >> -After 100 jam operasi, kesilapan dalam masa hanya kira-kira satu pertiga 1014 00:49:08,840 --> 00:49:10,440 saat. 1015 00:49:10,440 --> 00:49:14,150 Tetapi dari segi mensasarkan peluru berpandu bergerak pada kelajuan Mach 5, 1016 00:49:14,150 --> 00:49:18,560 ia menyebabkan pengesanan yang kesilapan lebih 600 meter. 1017 00:49:18,560 --> 00:49:21,870 Ia akan menjadi satu kesilapan yang teramat untuk tentera di Dhahran. 1018 00:49:21,870 --> 00:49:28,455 >> -Apa Berlaku adalah pelancaran Scud adalah dikesan oleh satelit amaran awal, 1019 00:49:28,455 --> 00:49:32,710 dan mereka tahu yang Scud datang arah umum mereka. 1020 00:49:32,710 --> 00:49:35,150 Mereka tidak tahu di mana ia datang. 1021 00:49:35,150 --> 00:49:38,210 Ia kini sehingga radar komponen sistem Patriot yang 1022 00:49:38,210 --> 00:49:43,150 mempertahankan Dhahran untuk mencari dan menyimpan mengesan peluru berpandu musuh yang masuk. 1023 00:49:43,150 --> 00:49:44,561 >> -The radar sangat pintar. 1024 00:49:44,561 --> 00:49:46,560 Ia sebenarnya akan mengesan kedudukan Scud 1025 00:49:46,560 --> 00:49:48,930 dan kemudian meramalkan di mana ia mungkin akan menjadi 1026 00:49:48,930 --> 00:49:51,380 masa yang seterusnya radar denyutan dihantar keluar. 1027 00:49:51,380 --> 00:49:53,040 Yang dipanggil pintu julat. 1028 00:49:53,040 --> 00:49:57,620 >> -Kemudian Sekali Patriot memutuskan masa yang cukup mempunyai 1029 00:49:57,620 --> 00:50:02,400 diluluskan untuk kembali dan memeriksa seterusnya lokasi untuk objek ini dikesan 1030 00:50:02,400 --> 00:50:03,550 ia kembali. 1031 00:50:03,550 --> 00:50:07,820 Oleh itu, apabila ia kembali kepada salah tempat, kemudian ia tidak melihat objek. 1032 00:50:07,820 --> 00:50:10,360 Dan ia memutuskan bahawa tidak ada objek. 1033 00:50:10,360 --> 00:50:13,630 Bahawa terdapat pengesanan palsu dan harga turun trek. 1034 00:50:13,630 --> 00:50:16,970 >> -The masuk Scud hilang dari skrin radar, 1035 00:50:16,970 --> 00:50:20,200 dan saat kemudian, ia menyelar ke dalam berek. 1036 00:50:20,200 --> 00:50:22,570 Scud yang dibunuh 28. 1037 00:50:22,570 --> 00:50:26,110 Ia yang terakhir dipecat semasa Perang Teluk pertama. 1038 00:50:26,110 --> 00:50:31,920 Malang sekali, perisian terkini tiba pada waktu subuh pada hari berikut. 1039 00:50:31,920 --> 00:50:34,870 Kesilapan perisian mempunyai menjadi tetap, tutup 1040 00:50:34,870 --> 00:50:39,150 satu bab dalam bermasalah sejarah peluru berpandu Patriot itu. 1041 00:50:39,150 --> 00:50:40,030 >> [VIDEO AKHIR MAIN SEMULA] 1042 00:50:40,030 --> 00:50:41,488 >> DAVID J. MALAN: Itu sahaja untuk CS50. 1043 00:50:41,488 --> 00:50:42,820 Kami akan melihat anda pada hari Rabu. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [MUZIK bermain] 1046 00:50:50,370 --> 00:54:23,446