1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [MUSIC PLAYING] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. Malan: Baiklah. 5 00:00:12,230 --> 00:00:16,440 Ini adalah CS50, dan ini adalah akhir dari Minggu 2. 6 00:00:16,440 --> 00:00:18,480 Jadi hari ini, kita akan untuk melanjutkan melihat kami 7 00:00:18,480 --> 00:00:21,150 bagaimana kita mewakili hal-hal bawah hood-- bergerak menjauh 8 00:00:21,150 --> 00:00:23,520 dari nomor seperti bilangan bulat dan nilai floating point 9 00:00:23,520 --> 00:00:26,810 dan berfokus pada string dan program akhirnya lebih menarik. 10 00:00:26,810 --> 00:00:30,140 Tapi kita juga akan melihat pada beberapa domain spesifik problems-- 11 00:00:30,140 --> 00:00:33,620 yang pertama akan menjadi yang melibatkan kriptografi, 12 00:00:33,620 --> 00:00:36,570 seni berebut informasi, di mana Anda lihat di atas sini 13 00:00:36,570 --> 00:00:41,480 adalah gambar Radio Orphan Annie cincin decoder rahasia dari masa lampau. 14 00:00:41,480 --> 00:00:46,490 >> Ini sebenarnya bentuk yang sangat primitif dan bentuk ramah-anak cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 dimana cincin ini memiliki dua disks-- satu di dalam dan satu di luar. 16 00:00:50,590 --> 00:00:54,740 Dan dengan memutar salah satu dari mereka, Anda dapat dasarnya berbaris huruf seperti A 17 00:00:54,740 --> 00:00:59,520 melalui Z dengan huruf lainnya seperti B melalui A. Dengan kata lain, 18 00:00:59,520 --> 00:01:03,730 Anda dapat benar-benar memutar alfabet, sehingga datang dengan pemetaan dari 19 00:01:03,730 --> 00:01:07,820 surat kepada surat sehingga, jika Anda ingin mengirim pesan rahasia 20 00:01:07,820 --> 00:01:11,820 untuk seseorang seperti Annie, Anda bisa menulis bawah pesan Anda dan kemudian memutar 21 00:01:11,820 --> 00:01:15,370 surat-surat, dimana, jika Anda berarti mengatakan "A," Anda malah mengatakan "B," 22 00:01:15,370 --> 00:01:17,280 Anda bermaksud mengatakan "B," Anda malah mengatakan "C" - 23 00:01:17,280 --> 00:01:20,240 atau sesuatu yang sedikit lebih pintar dari itu-- dan kemudian, akhirnya, 24 00:01:20,240 --> 00:01:24,630 selama Annie memiliki decoder ini cincin, ia dapat membaca sandi pesan. 25 00:01:24,630 --> 00:01:28,540 Sekarang, Anda mungkin ingat, pada kenyataannya, bahwa ini digunakan dalam film yang sangat terkenal yang 26 00:01:28,540 --> 00:01:31,140 memainkan nauseum iklan selama musim Natal. 27 00:01:31,140 --> 00:01:32,650 Mari kita lihat di sini. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie PARKER: "Jadilah itu diketahui semua dalam ringkasan 30 00:01:37,210 --> 00:01:41,000 bahwa Ralph Parker dengan ini ditunjuk anggota dari Little Orphan Annie Rahasia 31 00:01:41,000 --> 00:01:44,860 Lingkaran dan berhak atas semua kehormatan dan manfaat yang terjadi padanya. " 32 00:01:44,860 --> 00:01:47,410 >> Ralphie PARKER (menceritakan): Ditandatangani kecil Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Ditandatangani, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 Dalam tinta. 35 00:01:51,490 --> 00:01:55,494 Honors dan manfaat, sudah pada usia sembilan. 36 00:01:55,494 --> 00:01:57,402 >> [MUSIC PLAYING] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO CHATTER] 38 00:02:00,470 --> 00:02:01,470 Ralphie PARKER: Ayo. 39 00:02:01,470 --> 00:02:02,344 Mari kita langsung saja. 40 00:02:02,344 --> 00:02:06,029 Aku tidak perlu semua jazz yang tentang penyelundup dan bajak laut. 41 00:02:06,029 --> 00:02:08,820 RADIO Announcer: Dengarkan besok malam untuk petualangan penutup 42 00:02:08,820 --> 00:02:11,060 The Black Pirate Ship. 43 00:02:11,060 --> 00:02:14,740 Sekarang, saatnya untuk Annie Pesan Rahasia untuk Anda anggota 44 00:02:14,740 --> 00:02:17,110 Rahasia Circle. 45 00:02:17,110 --> 00:02:20,700 Ingat anak-anak, hanya anggota Annie Rahasia Lingkaran 46 00:02:20,700 --> 00:02:23,270 dapat memecahkan kode pesan rahasia Annie. 47 00:02:23,270 --> 00:02:27,270 >> Ingat, Annie tergantung pada Anda. 48 00:02:27,270 --> 00:02:30,060 Mengatur tanda Anda ke B-2. 49 00:02:30,060 --> 00:02:34,004 Berikut adalah Message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie PARKER (menceritakan): I berada di pertemuan rahasia pertama saya. 51 00:02:36,503 --> 00:02:40,041 RADIO Announcer: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie PARKER (menceritakan): Oh, Pierre berada di besar malam ini suara. 53 00:02:42,790 --> 00:02:46,110 Saya bisa mengatakan bahwa malam ini Pesan itu benar-benar penting. 54 00:02:46,110 --> 00:02:47,930 >> RADIO Announcer: --Kepar 3, 25. 55 00:02:47,930 --> 00:02:49,940 Itu pesan dari Annie sendiri. 56 00:02:49,940 --> 00:02:52,182 Ingat, jangan bilang siapa-siapa. 57 00:02:52,182 --> 00:02:55,077 >> [Terengah-engah] 58 00:02:55,077 --> 00:02:57,285 Ralphie PARKER (menceritakan): Sembilan puluh detik kemudian, aku 59 00:02:57,285 --> 00:03:00,090 di satu-satunya kamar di rumah di mana anak laki-laki sembilan 60 00:03:00,090 --> 00:03:04,380 bisa duduk dalam privasi dan decode. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B." 63 00:03:05,680 --> 00:03:06,524 >> [Terkekeh] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie PARKER (menceritakan): Aku pergi ke yang berikutnya. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 Kata pertama adalah "menjadi." 67 00:03:11,641 --> 00:03:12,140 Ya! 68 00:03:12,140 --> 00:03:14,293 Itu datang lebih mudah sekarang. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Terkekeh] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Aw, ayolah, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Aku harus pergi! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie PARKER: Aku akan segera turun, Ma. 74 00:03:21,538 --> 00:03:22,504 Gee jagoan. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Pastikan untuk. "" Pastikan untuk "apa? 77 00:03:31,220 --> 00:03:33,981 Apa yang sedikit Orphan Annie coba katakan? "Pastikan untuk" apa? 78 00:03:33,981 --> 00:03:35,522 IBU: Ralphie, Randy telah harus pergi. 79 00:03:35,522 --> 00:03:36,735 Maukah kau keluar? 80 00:03:36,735 --> 00:03:38,190 >> Ralphie PARKER: Baiklah, Mom! 81 00:03:38,190 --> 00:03:39,787 Aku akan segera keluar! 82 00:03:39,787 --> 00:03:41,995 Ralphie PARKER (menceritakan): Aku semakin dekat sekarang. 83 00:03:41,995 --> 00:03:43,370 Ketegangan sangat mengerikan. 84 00:03:43,370 --> 00:03:44,794 Apa itu? 85 00:03:44,794 --> 00:03:47,656 Nasib planet mungkin menggantung di keseimbangan. 86 00:03:47,656 --> 00:03:50,518 >> IBU: Ralphie, Randy harus pergi! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie PARKER: Aku akan segera out, menangis dengan suara keras! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (Menceritakan): Almost there! 89 00:03:55,343 --> 00:03:56,520 Jari-jariku terbang! 90 00:03:56,520 --> 00:03:58,500 Pikiranku perangkap baja. 91 00:03:58,500 --> 00:03:59,850 Setiap pori bergetar. 92 00:03:59,850 --> 00:04:01,806 Itu hampir jelas! 93 00:04:01,806 --> 00:04:02,773 Ya! 94 00:04:02,773 --> 00:04:03,273 Ya! 95 00:04:03,273 --> 00:04:03,773 Ya! 96 00:04:03,773 --> 00:04:04,740 Ya! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie PARKER: "Pastikan minum Ovaltine Anda. " 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Sebuah iklan payah? 101 00:04:17,539 --> 00:04:19,439 >> [MUSIC PLAYING] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie PARKER: Bajingan. 103 00:04:21,724 --> 00:04:23,460 >> [Tertawa] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. Malan: Sehingga kemudian adalah sekilas apa kriptografi 105 00:04:27,070 --> 00:04:29,880 bisa untuk ini-- minum dari masa lampau. 106 00:04:29,880 --> 00:04:30,900 Jadi pengumuman cepat. 107 00:04:30,900 --> 00:04:33,410 Jika Anda bebas ini Jumat pukul 13:15 dan akan 108 00:04:33,410 --> 00:04:36,610 ingin bergabung dengan kami untuk CS50 makan siang, menuju ke URL ini di sini. 109 00:04:36,610 --> 00:04:38,080 Pertama datang, pertama melayani seperti biasa. 110 00:04:38,080 --> 00:04:41,840 Namun seiring berjalannya waktu, kami akan memastikan bahwa kebanyakan orang yang ingin berpartisipasi 111 00:04:41,840 --> 00:04:43,640 mungkin menjadwalkan-bijaksana. 112 00:04:43,640 --> 00:04:45,170 >> Jadi string. 113 00:04:45,170 --> 00:04:47,940 Kami memiliki Zamyla-- yang Anda sekarang sudah bertemu kemungkinan besar 114 00:04:47,940 --> 00:04:50,750 Soal Set 1-- yang Nama dieja demikian. 115 00:04:50,750 --> 00:04:53,570 Dan misalkan Anda mengetik namanya ke dalam program komputer yang 116 00:04:53,570 --> 00:04:55,710 menggunakan sesuatu seperti getString. 117 00:04:55,710 --> 00:04:57,890 Dalam rangka untuk mengambil penekanan tombol, bagaimana 118 00:04:57,890 --> 00:05:01,620 kita pergi tentang mewakili String, kata, paragraf, 119 00:05:01,620 --> 00:05:03,960 atau beberapa huruf seperti ini di sini? 120 00:05:03,960 --> 00:05:06,790 >> Kami berbicara terakhir kali tentang bilangan bulat dan masalah 121 00:05:06,790 --> 00:05:09,960 yang muncul dengan integer overflow dan nilai floating point 122 00:05:09,960 --> 00:05:12,190 dan masalah yang muncul dalam presisi. 123 00:05:12,190 --> 00:05:16,080 Dengan string, setidaknya kita memiliki fleksibilitas sedikit lebih 124 00:05:16,080 --> 00:05:17,970 karena strings-- hanya di dunia-- nyata 125 00:05:17,970 --> 00:05:19,790 bisa menjadi panjang yang cukup sewenang-wenang. 126 00:05:19,790 --> 00:05:21,055 Cukup singkat, cukup panjang. 127 00:05:21,055 --> 00:05:23,680 Tetapi bahkan kemudian, kita akan menemukan bahwa komputer kadang-kadang dapat 128 00:05:23,680 --> 00:05:27,200 kehabisan memori dan bahkan tidak menyimpan cukup tali besar. 129 00:05:27,200 --> 00:05:30,840 >> Tapi untuk saat ini, mari kita mulai untuk memvisualisasikan string sebagai sesuatu di kotak-kotak ini 130 00:05:30,840 --> 00:05:31,340 di sini. 131 00:05:31,340 --> 00:05:36,410 Jadi enam kotak tersebut, masing-masing merupakan karakter atau "char." 132 00:05:36,410 --> 00:05:40,646 Jadi ingat bahwa "char" - c-h-a-r-- adalah salah satu tipe data built-in di C. 133 00:05:40,646 --> 00:05:43,520 Dan apa yang baik adalah bahwa Anda dapat menggunakan semacam sebagai sebuah blok bangunan, 134 00:05:43,520 --> 00:05:47,880 sepotong puzzle, jika Anda mau, untuk membentuk Jenis yang lebih besar dari data yang kami akan terus 135 00:05:47,880 --> 00:05:49,410 untuk memanggil "string." 136 00:05:49,410 --> 00:05:53,650 >> Sekarang, apa yang berguna tentang berpikir tentang hal-hal seperti string dengan cara ini? 137 00:05:53,650 --> 00:05:57,720 Nah, ternyata kita bisa benar-benar memanfaatkan struktur ini 138 00:05:57,720 --> 00:06:01,420 untuk benar-benar mengakses karakter individu dengan cara cukup sederhana. 139 00:06:01,420 --> 00:06:04,099 Aku akan pergi ke depan dan menciptakan sebuah file yang bernama "stringzero.c," 140 00:06:04,099 --> 00:06:05,765 tetapi Anda dapat menyebutnya apa pun yang Anda inginkan. 141 00:06:05,765 --> 00:06:08,500 Dan di website program adalah sudah contoh ini di muka, 142 00:06:08,500 --> 00:06:10,430 sehingga Anda tidak perlu ketik semuanya. 143 00:06:10,430 --> 00:06:13,820 >> Dan aku akan pergi ke depan dan pertama kali melakukan int void main. 144 00:06:13,820 --> 00:06:15,980 Dan dalam beberapa hari, kita akan mulai menggoda terpisah 145 00:06:15,980 --> 00:06:19,070 apa batal sini, mengapa hal itu int sebelah utama, dan sebagainya. 146 00:06:19,070 --> 00:06:21,180 Tapi untuk saat ini, mari kita lanjutkan copy paste itu. 147 00:06:21,180 --> 00:06:23,455 >> Aku akan mendeklarasikan string disebut s. 148 00:06:23,455 --> 00:06:26,920 Dan aku akan kembali dari GetString apapun jenis pengguna dalam. 149 00:06:26,920 --> 00:06:29,170 Ini akan menjadi sederhana Program, tak ada instruksi, 150 00:06:29,170 --> 00:06:31,336 Aku hanya akan membuta berharap bahwa pengguna mengetahui 151 00:06:31,336 --> 00:06:32,600 apa yang harus dilakukan untuk tetap sederhana. 152 00:06:32,600 --> 00:06:34,220 >> Dan sekarang aku akan memiliki untuk loop. 153 00:06:34,220 --> 00:06:37,450 Dan dalam untuk loop saya, saya akan memiliki int i mendapat nol. 154 00:06:37,450 --> 00:06:40,660 Dan saya adalah, sekali lagi, hanya konvensi, variabel indeks untuk menghitung, 155 00:06:40,660 --> 00:06:42,350 tapi aku bisa menyebutnya apa pun yang saya inginkan. 156 00:06:42,350 --> 00:06:46,275 Aku akan melakukan i kurang than-- baik Nama Zamyla adalah enam huruf. 157 00:06:46,275 --> 00:06:48,150 Jadi aku akan sulit kode yang ada untuk saat ini. 158 00:06:48,150 --> 00:06:49,730 >> Dan kemudian saya ++. 159 00:06:49,730 --> 00:06:53,190 Dan sekarang dalam ini keriting braces Aku akan melakukan printf, 160 00:06:53,190 --> 00:06:55,460 dan saya ingin mencetak satu karakter pada satu waktu. 161 00:06:55,460 --> 00:06:58,227 Jadi aku akan menggunakan% c untuk mungkin untuk pertama kalinya. 162 00:06:58,227 --> 00:07:00,560 Dan kemudian saya ingin mencetak setiap karakter pada baris sendiri. 163 00:07:00,560 --> 00:07:02,550 Jadi aku akan menempatkan sedikit backslash n di sana. 164 00:07:02,550 --> 00:07:03,640 Tutup kutipan. 165 00:07:03,640 --> 00:07:06,250 >> Dan sekarang saya ingin melakukan sesuatu di sini. 166 00:07:06,250 --> 00:07:10,610 Saya ingin mencetak huruf tertentu dalam string, 167 00:07:10,610 --> 00:07:13,670 s, karena saya iterasi dari nol pada hingga enam. 168 00:07:13,670 --> 00:07:17,150 Dengan kata lain, saya ingin mencetak karakter i'th dari s. 169 00:07:17,150 --> 00:07:18,420 Sekarang bagaimana saya bisa melakukan ini? 170 00:07:18,420 --> 00:07:21,550 >> Nah seperti kotak di representasi ini di sini, 171 00:07:21,550 --> 00:07:25,560 jenis, menyulap gagasan tinju surat, Anda sama bisa melakukan itu 172 00:07:25,560 --> 00:07:32,630 sintaksis di C dengan hanya menetapkan, Saya ingin mencetak s i'th karakter. 173 00:07:32,630 --> 00:07:35,640 Menggunakan tanda kurung siku pada keyboard komputer Anda 174 00:07:35,640 --> 00:07:38,910 bahwa pada keyboard AS umumnya di atas tombol kembali Anda. 175 00:07:38,910 --> 00:07:42,630 >> Jadi ini tidak benar Namun, karena Anda mungkin telah memperhatikan. 176 00:07:42,630 --> 00:07:44,780 Tapi aku akan jenis membabi buta maju di sini. 177 00:07:44,780 --> 00:07:47,020 Dan aku akan melakukan membuat tali 0. 178 00:07:47,020 --> 00:07:50,860 Tapi sebelum aku melakukan ini, mari kita lihat apakah kita tidak bisa mengantisipasi beberapa kesalahan umum. 179 00:07:50,860 --> 00:07:52,844 Apakah ini akan mengkompilasi? 180 00:07:52,844 --> 00:07:54,510 Tidak, aku kehilangan sejumlah hal. 181 00:07:54,510 --> 00:07:55,280 Perpustakaan saya dengar. 182 00:07:55,280 --> 00:07:58,480 >> Jadi yang file header mungkin saya ingin menambahkan di sini? 183 00:07:58,480 --> 00:07:59,205 Ya. 184 00:07:59,205 --> 00:08:01,580 >> AUDIENCE: Anda perlu standar I / O [Tak terdengar] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. Malan Excellent. 186 00:08:02,663 --> 00:08:06,060 Jadi saya perlu standar I / O. Untuk apa Tujuan yang ingin saya standar I / O? 187 00:08:06,060 --> 00:08:06,670 Untuk printf. 188 00:08:06,670 --> 00:08:09,220 Jadi termasuk stdio.h. 189 00:08:09,220 --> 00:08:13,490 Dan Anda juga mengusulkan bahwa saya termasuk perpustakaan CS50 untuk alasan apa? 190 00:08:13,490 --> 00:08:14,650 Untuk memiliki string. 191 00:08:14,650 --> 00:08:17,780 Jadi kita akan melihat apa yang Perpustakaan CS50 adalah melakukan 192 00:08:17,780 --> 00:08:19,260 untuk membuat gagasan ini string. 193 00:08:19,260 --> 00:08:21,930 Tapi untuk saat ini, Anda hanya bisa memikirkan itu sebagai tipe data aktual. 194 00:08:21,930 --> 00:08:23,596 >> Sehingga tampaknya sedikit yang dibersihkan. 195 00:08:23,596 --> 00:08:27,060 Dan sekarang aku akan pergi ke depan dan memang benar membuat tali 0. 196 00:08:27,060 --> 00:08:27,700 Disusun. 197 00:08:27,700 --> 00:08:28,370 Jadi itu bagus. 198 00:08:28,370 --> 00:08:32,799 Jadi ./string0 biarkan aku memperbesar sehingga kami dapat melihat lebih dekat apa yang terjadi. 199 00:08:32,799 --> 00:08:33,850 Enter. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-A masuk. 201 00:08:37,789 --> 00:08:39,440 Dan kami telah dicetak nama Zamyla ini. 202 00:08:39,440 --> 00:08:40,409 >> Jadi itu cukup bagus. 203 00:08:40,409 --> 00:08:43,220 Jadi sekarang mari kita pergi ke depan dan menjalankan program ini lagi, 204 00:08:43,220 --> 00:08:45,659 dan mengetikkan nama lengkap Daven ini. 205 00:08:45,659 --> 00:08:46,450 Surprise, surprise. 206 00:08:46,450 --> 00:08:48,021 Enter. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Kami belum dicetak Daven ini penuh pertama nama dengan benar. 209 00:08:51,750 --> 00:08:54,250 Sekarang ini harus jelas di retrospeksi karena apa, 210 00:08:54,250 --> 00:08:57,010 semacam, keputusan desain bodoh? 211 00:08:57,010 --> 00:08:59,590 >> Ya, saya sulit kode tersebut enam dalam saya untuk loop. 212 00:08:59,590 --> 00:09:01,610 Sekarang saya melakukan itu hanya karena Aku tahu nama Zamyla ini 213 00:09:01,610 --> 00:09:02,776 akan menjadi enam huruf. 214 00:09:02,776 --> 00:09:04,720 Tapi tentunya hal ini tidak solusi umum. 215 00:09:04,720 --> 00:09:07,720 Jadi ternyata kita dapat secara dinamis mengetahui panjang string 216 00:09:07,720 --> 00:09:10,440 dengan memanggil fungsi yang disebut strlen. 217 00:09:10,440 --> 00:09:12,840 >> Sekali lagi, sengaja ringkas bernama hanya 218 00:09:12,840 --> 00:09:14,450 untuk membuatnya lebih nyaman untuk mengetik. 219 00:09:14,450 --> 00:09:17,170 Tapi itu identik dengan mendapatkan panjang string. 220 00:09:17,170 --> 00:09:23,190 Aku akan kembali ke terminal saya jendela dan kembali menjalankan compiler. 221 00:09:23,190 --> 00:09:24,170 Tapi itu berteriak padaku. 222 00:09:24,170 --> 00:09:29,130 Secara implisit menyatakan fungsi perpustakaan strlen dengan tipe unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Saya tersesat. 224 00:09:29,780 --> 00:09:30,590 Benar-benar. 225 00:09:30,590 --> 00:09:32,940 >> Jadi, terutama karena Anda mata mulai berkaca-kaca 226 00:09:32,940 --> 00:09:36,000 dengan pesan error seperti ini, fokus jujur ​​pada beberapa kata pertama. 227 00:09:36,000 --> 00:09:38,590 Kita tahu masalahnya adalah dalam baris 8, seperti yang ditunjukkan di sini. 228 00:09:38,590 --> 00:09:40,500 Dan itu dalam string-0.c. 229 00:09:40,500 --> 00:09:43,580 Secara implisit menyatakan fungsi library strlen. 230 00:09:43,580 --> 00:09:47,000 Sehingga umumnya akan menjadi pola pesan kesalahan. 231 00:09:47,000 --> 00:09:49,190 Secara implisit menyatakan sesuatu. 232 00:09:49,190 --> 00:09:53,250 >> Jadi singkatnya, apa yang harus saya sepertinya telah dilakukan sehubungan dengan baris 8, di sini. 233 00:09:53,250 --> 00:09:56,880 Apa yang mungkin menjadi solusi bahkan jika Anda belum pernah menggunakan strlen diri sendiri? 234 00:09:56,880 --> 00:09:58,907 >> AUDIENCE: Bagian dari perpustakaan yang berbeda? 235 00:09:58,907 --> 00:10:00,740 DAVID J. Malan: Part dari perpustakaan yang berbeda. 236 00:10:00,740 --> 00:10:02,400 Jadi dinyatakan, sehingga untuk berbicara. 237 00:10:02,400 --> 00:10:07,510 Hal ini disebutkan dalam beberapa berkas selain stdio.h dan CS50.h. 238 00:10:07,510 --> 00:10:09,179 Sekarang mana itu didefinisikan? 239 00:10:09,179 --> 00:10:12,220 Sejujurnya, Anda juga harus hanya tahu ini dari atas kepala Anda, 240 00:10:12,220 --> 00:10:13,640 atau Anda Google ini dan mencari tahu. 241 00:10:13,640 --> 00:10:18,150 Atau tahu ini, aku sudah dibuka di CS50 appliance program terminal, yang 242 00:10:18,150 --> 00:10:22,200 hanya besar, versi layar penuh apa yang ada di bagian bawah jendela gedit ini. 243 00:10:22,200 --> 00:10:24,970 >> Dan ternyata ada perintah sama ringkas, yang disebut 244 00:10:24,970 --> 00:10:29,280 man untuk manual, di mana jika Anda mengetik nama fungsi dan tekan Enter, 245 00:10:29,280 --> 00:10:32,240 Anda akan mendapatkan kembali cukup dokumentasi misterius. 246 00:10:32,240 --> 00:10:35,299 Hanya saja teks yang umumnya terlihat sedikit sesuatu seperti ini. 247 00:10:35,299 --> 00:10:37,090 Ini sedikit berlebihan pada pandangan pertama. 248 00:10:37,090 --> 00:10:39,048 Tapi terus terang saya akan biarkan mataku berkaca-kaca 249 00:10:39,048 --> 00:10:41,930 dan hanya fokus pada bagian Saya peduli untuk saat ini. 250 00:10:41,930 --> 00:10:42,780 >> Yang ini. 251 00:10:42,780 --> 00:10:45,470 Yang terlihat struktural seperti sesuatu yang saya kenal. 252 00:10:45,470 --> 00:10:48,080 Memang halaman manual, sehingga untuk berbicara, akan memberitahu Anda 253 00:10:48,080 --> 00:10:51,590 dalam apa sundulan mengajukan fungsi seperti strlen didefinisikan. 254 00:10:51,590 --> 00:10:54,170 Jadi aku akan kembali sekarang untuk gedit. 255 00:10:54,170 --> 00:10:59,070 Dan aku akan pergi ke depan dan menambahkan sini # include 256 00:10:59,070 --> 00:11:00,480 dan menyimpan file. 257 00:11:00,480 --> 00:11:04,300 >> Aku akan membersihkan layar dengan Kontrol L Jika Anda sudah bertanya-tanya. 258 00:11:04,300 --> 00:11:08,210 Dan aku akan kembali menjalankan make string.0, mengkompilasi kali ini. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Itu tampaknya bekerja Biarkan aku pergi depan dan memutarkan dengan Davenport. 261 00:11:15,020 --> 00:11:15,860 Enter. 262 00:11:15,860 --> 00:11:17,730 Dan itu juga, tampaknya bekerja. 263 00:11:17,730 --> 00:11:21,220 >> Jadi kita bisa melakukan sedikit lebih baik dari ini, meskipun, kita dapat mulai hal-hal rapi 264 00:11:21,220 --> 00:11:23,257 up hanya sedikit. 265 00:11:23,257 --> 00:11:25,590 Dan aku akan benar-benar memperkenalkan satu hal lain sekarang. 266 00:11:25,590 --> 00:11:28,930 Aku akan pergi ke depan dan simpan ini dalam file yang berbeda. 267 00:11:28,930 --> 00:11:31,770 Dan aku akan menelepon File string1.c ini hanya 268 00:11:31,770 --> 00:11:34,620 agar sesuai dengan kode Anda akan dapat menemukan secara online. 269 00:11:34,620 --> 00:11:37,050 >> Dan mari kita fokus pada kode yang sama persis. 270 00:11:37,050 --> 00:11:39,000 Ternyata bahwa saya telah menjadi semacam mengambil 271 00:11:39,000 --> 00:11:42,600 begitu saja fakta bahwa laptop saya, dan pada gilirannya, alat CS50 272 00:11:42,600 --> 00:11:47,450 memiliki banyak memori, banyak RAM, banyak byte ruang 273 00:11:47,450 --> 00:11:48,920 di mana saya dapat menyimpan string. 274 00:11:48,920 --> 00:11:53,560 >> Tetapi kenyataannya jika saya mengetik panjang cukup, dan cukup keystrokes, 275 00:11:53,560 --> 00:11:56,170 Aku bisa dalam jenis teori lebih karakter 276 00:11:56,170 --> 00:11:58,830 dari komputer saya secara fisik memiliki memori untuk. 277 00:11:58,830 --> 00:11:59,830 Dan ini bermasalah. 278 00:11:59,830 --> 00:12:03,050 Sama seperti int hanya dapat menghitung begitu tinggi, dalam teori, 279 00:12:03,050 --> 00:12:06,600 Anda hanya bisa menjejalkan begitu banyak karakter ke dalam RAM komputer Anda atau Random 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> Jadi saya lebih baik mengantisipasi masalah ini, bahkan 282 00:12:11,140 --> 00:12:13,660 meskipun mungkin langka kasus sudut, sehingga untuk berbicara. 283 00:12:13,660 --> 00:12:15,670 Tidak terjadi yang sering, bisa terjadi. 284 00:12:15,670 --> 00:12:18,815 Dan jika itu terjadi dan saya tidak mengantisipasi dan program itu, 285 00:12:18,815 --> 00:12:20,300 program saya bisa melakukan yang tahu apa. 286 00:12:20,300 --> 00:12:22,220 Freeze, menggantung, reboot, apa pun. 287 00:12:22,220 --> 00:12:24,490 Sesuatu diantisipasi mungkin terjadi. 288 00:12:24,490 --> 00:12:27,120 >> Jadi apa yang saya lakukan sekarang, selanjutnya benar-benar, 289 00:12:27,120 --> 00:12:31,630 adalah sebelum saya pernah membabi buta menggunakan variabel seperti s yang 290 00:12:31,630 --> 00:12:36,790 telah ditetapkan nilai pengembalian beberapa fungsi lain seperti GetString, 291 00:12:36,790 --> 00:12:40,200 Aku akan memastikan bahwa nilai valid. 292 00:12:40,200 --> 00:12:44,280 Jadi saya tahu hanya dari setelah membaca Dokumentasi CS50 untuk GetString, 293 00:12:44,280 --> 00:12:49,020 yang pada akhirnya kami akan mengarahkan Anda pada, GetString yang mengembalikan simbol khusus 294 00:12:49,020 --> 00:12:53,610 disebut NULL, N-U-L-L di semua caps, jika terjadi kesalahan. 295 00:12:53,610 --> 00:12:55,650 >> Jadi biasanya, ia mengembalikan string. 296 00:12:55,650 --> 00:12:59,700 Tapi sebaliknya jika ia mengembalikan N-U-L-L-- pada akhirnya kita akan melihat apa yang benar-benar 297 00:12:59,700 --> 00:13:01,790 means-- itu hanya berarti sesuatu yang buruk terjadi. 298 00:13:01,790 --> 00:13:05,560 Sekarang ini berarti, seperti di Scratch, Saya dapat memeriksa kondisi di sini di C, 299 00:13:05,560 --> 00:13:08,830 jika s tidak NULL sama. 300 00:13:08,830 --> 00:13:11,930 Jadi jika Anda tidak melihat ini sebelumnya, ini hanya berarti tidak sama. 301 00:13:11,930 --> 00:13:15,290 >> Jadi kebalikan dari equals sama, yang, ingat, 302 00:13:15,290 --> 00:13:18,940 berbeda dari satu sama, yaitu tugas. 303 00:13:18,940 --> 00:13:23,030 Jadi, jika s tidak sama dengan NULL, hanya kemudian melakukan 304 00:13:23,030 --> 00:13:25,980 Saya ingin mengeksekusi baris kode. 305 00:13:25,980 --> 00:13:28,080 Jadi dengan kata lain, sebelum saya menyelam di membabi buta 306 00:13:28,080 --> 00:13:30,919 dan mulai iterasi lebih dari s, dan memperlakukannya 307 00:13:30,919 --> 00:13:33,710 seolah-olah itu adalah urutan karakter, aku akan periksa dulu, 308 00:13:33,710 --> 00:13:37,900 tunggu dulu, ini pasti tidak s sama dengan nilai khusus ini, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Karena jika demikian, hal-hal buruk bisa terjadi. 310 00:13:40,030 --> 00:13:43,080 Dan untuk saat ini, menganggap hal-hal yang buruk terjadi berarti crash program Anda, 311 00:13:43,080 --> 00:13:45,070 dan Anda tidak dapat selalu pulih. 312 00:13:45,070 --> 00:13:46,800 Jadi terus terang, terlihat jelek. 313 00:13:46,800 --> 00:13:48,660 itu agak membingungkan sekarang untuk melirik. 314 00:13:48,660 --> 00:13:50,780 Tapi ini akan menjadi lebih akrab sebelum lama. 315 00:13:50,780 --> 00:13:52,920 >> Tapi aku akan mengusulkan sekarang salah satu perbaikan lainnya. 316 00:13:52,920 --> 00:13:54,660 Itu perbaikan untuk kebenaran. 317 00:13:54,660 --> 00:13:58,800 Program saya sekarang lebih benar, karena dalam kasus yang jarang terjadi yang tidak cukup memori 318 00:13:58,800 --> 00:14:01,180 ada, saya akan menanganinya, dan aku hanya akan melakukan apa-apa. 319 00:14:01,180 --> 00:14:02,680 Aku setidaknya tidak akan crash. 320 00:14:02,680 --> 00:14:05,000 >> Tapi mari kita lakukan versi terakhir di sini. 321 00:14:05,000 --> 00:14:07,690 Dan file bernama string2.c. 322 00:14:07,690 --> 00:14:10,190 Aku akan menempelkan kode yang sama untuk sesaat, 323 00:14:10,190 --> 00:14:14,210 dan aku akan menyoroti ini line, 11, di sini, untuk sesaat. 324 00:14:14,210 --> 00:14:18,179 Sekarang kenyataannya adalah bahwa kompiler pintar seperti dentang bisa memperbaiki ini bagi kita 325 00:14:18,179 --> 00:14:19,970 di balik layar tanpa kita pernah tahu. 326 00:14:19,970 --> 00:14:24,670 Tapi mari kita berpikir tentang hal ini fundamental sebagai desain bermasalah. 327 00:14:24,670 --> 00:14:29,010 >> Baris kode ini, tentu saja, mengatakan, menginisialisasi beberapa variabel i dengan 0. 328 00:14:29,010 --> 00:14:30,260 Itu cukup sederhana. 329 00:14:30,260 --> 00:14:34,691 Dan apa lagi yang ini pernyataan, di sini, i ++, lakukan? 330 00:14:34,691 --> 00:14:37,066 Kami telah melihat itu sebelumnya, tapi kami tidak benar-benar berbicara tentang hal itu. 331 00:14:37,066 --> 00:14:37,900 >> AUDIENCE: Incrementing i. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. Malan: Incrementing i. 333 00:14:39,191 --> 00:14:41,890 Jadi pada setiap iterasi melalui lingkaran ini, setiap siklus, 334 00:14:41,890 --> 00:14:43,570 Anda incrementing i per satu. 335 00:14:43,570 --> 00:14:45,740 Jadi akan lebih besar, dan lebih besar, dan besar sampai loop berakhir. 336 00:14:45,740 --> 00:14:46,810 Bagaimana mengakhiri? 337 00:14:46,810 --> 00:14:49,430 Yah ada tengah ini kondisi yang kami telah digunakan sebelumnya. 338 00:14:49,430 --> 00:14:52,500 Anda telah melihat dan walkthrough di P set. 339 00:14:52,500 --> 00:14:53,880 >> Tapi apa pepatah ini? 340 00:14:53,880 --> 00:14:58,352 Lakukan loop berikut sehingga selama i kurang dari apa? 341 00:14:58,352 --> 00:14:59,810 AUDIENCE: Panjang string. 342 00:14:59,810 --> 00:15:01,518 DAVID J. Malan: The panjang string. 343 00:15:01,518 --> 00:15:04,300 Jadi diterjemahkan cukup bersih ke Inggris dalam arti itu. 344 00:15:04,300 --> 00:15:08,810 Sekarang masalahnya adalah bahwa setiap kali saya iterate melalui lingkaran ini dalam teori, 345 00:15:08,810 --> 00:15:10,000 Aku bertanya pertanyaan ini. 346 00:15:10,000 --> 00:15:12,250 Apakah saya kurang dari panjang string s? 347 00:15:12,250 --> 00:15:14,500 Apakah saya kurang dari panjang string s? 348 00:15:14,500 --> 00:15:18,380 >> Sekarang ini saya berubah pada setiap iterasi? 349 00:15:18,380 --> 00:15:18,880 Hal ini. 350 00:15:18,880 --> 00:15:19,629 Karena ++ tersebut. 351 00:15:19,629 --> 00:15:21,700 Jadi setiap iterasi i semakin besar. 352 00:15:21,700 --> 00:15:25,411 Tapi s semakin besar, atau lebih kecil, atau mengubah sama sekali? 353 00:15:25,411 --> 00:15:25,910 Nomor 354 00:15:25,910 --> 00:15:30,240 Jadi dalam hal desain, salah satu sumbu sepanjang yang kita mencoba untuk mengevaluasi kode 355 00:15:30,240 --> 00:15:32,610 di kelas, ini terasa agak bodoh. 356 00:15:32,610 --> 00:15:34,690 >> Seperti Anda benar-benar, pada setiap iterasi 357 00:15:34,690 --> 00:15:37,110 loop ini meminta pertanyaan sialan yang sama lagi, 358 00:15:37,110 --> 00:15:40,770 dan lagi, dan lagi, dan benar-benar itu tidak akan pernah berubah. 359 00:15:40,770 --> 00:15:44,220 Setidaknya jika aku tidak menyentuh dan mencoba untuk mengubah isi s. 360 00:15:44,220 --> 00:15:46,610 Jadi aku bisa melakukan sedikit lebih baik daripada ini. 361 00:15:46,610 --> 00:15:49,530 >> Dan apa yang akan saya lakukan adalah tidak menyatakan hanya satu variabel i, 362 00:15:49,530 --> 00:15:53,330 tapi variabel kedua aku akan sewenang-wenang, tapi konvensional, sebut saja n. 363 00:15:53,330 --> 00:15:55,940 Menetapkan n sama dengan panjang string s. 364 00:15:55,940 --> 00:15:59,090 Dan kemudian di sini, aku akan melakukan optimasi kecil yang pintar, sehingga 365 00:15:59,090 --> 00:16:03,460 untuk berbicara, bahwa pada akhir hari tidak lebih benar atau tidak kurang benar 366 00:16:03,460 --> 00:16:04,260 dari sebelumnya. 367 00:16:04,260 --> 00:16:05,500 Tapi itu desain yang lebih baik. 368 00:16:05,500 --> 00:16:09,480 Dalam fakta bahwa saya menggunakan waktu kurang, siklus CPU yang lebih sedikit, sehingga 369 00:16:09,480 --> 00:16:14,040 untuk berbicara, untuk menjawab hal yang sama pertanyaan, tapi hanya sekali. 370 00:16:14,040 --> 00:16:17,870 >> Pertanyaan umum yang prinsip membaik, 371 00:16:17,870 --> 00:16:21,294 mengatakan, efisiensi program ini? 372 00:16:21,294 --> 00:16:21,991 Ya? 373 00:16:21,991 --> 00:16:23,699 AUDIENCE: Mengapa Anda gunakan [Tak terdengar]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. Malan: Pertanyaan yang bagus. 376 00:16:27,010 --> 00:16:30,690 Jadi mengapa kita menempatkan ++ pada akhir i bukan awal i? 377 00:16:30,690 --> 00:16:33,070 Dalam hal ini, ia memiliki tidak berdampak fungsional. 378 00:16:33,070 --> 00:16:36,670 Dan secara umum, saya cenderung untuk menggunakan operator postfix 379 00:16:36,670 --> 00:16:41,750 sehingga sedikit lebih jelas ketika operasi terjadi. 380 00:16:41,750 --> 00:16:46,670 >> Bagi mereka yang tidak terbiasa, ada lagi laporan dimana Anda bisa melakukan ++ i. 381 00:16:46,670 --> 00:16:48,747 Ini adalah fungsional setara dalam hal ini 382 00:16:48,747 --> 00:16:51,080 karena tidak ada yang lain sekitar incrementation itu. 383 00:16:51,080 --> 00:16:54,435 Tapi Anda bisa datang dengan kasus dan baris kode 384 00:16:54,435 --> 00:16:55,810 di mana yang membuat perbedaan. 385 00:16:55,810 --> 00:16:57,810 Jadi secara umum, kita tidak bahkan berbicara tentang yang satu ini. 386 00:16:57,810 --> 00:17:00,690 Karena terus terang, itu membuat Anda kode seksi, dan semacam jas hujan, 387 00:17:00,690 --> 00:17:01,776 dan karakter yang lebih sedikit. 388 00:17:01,776 --> 00:17:04,859 Tetapi kenyataannya adalah itu jauh lebih sulit, Saya pikir, bahkan bagi saya untuk membungkus pikiran saya 389 00:17:04,859 --> 00:17:07,319 sekitar kadang-kadang, urutan operasi. 390 00:17:07,319 --> 00:17:09,750 Jadi sebagai samping, jika Anda benar-benar tidak suka ini, 391 00:17:09,750 --> 00:17:14,650 meskipun ini adalah jenis seksi mencari, Anda juga dapat melakukan i + = 1, 392 00:17:14,650 --> 00:17:18,880 yang merupakan versi lebih buruk dari ide yang sama untuk postfix incrementation. 393 00:17:18,880 --> 00:17:22,250 >> Saya mengatakan ini dan Anda harus membuat bersenang-senang, 394 00:17:22,250 --> 00:17:25,140 tetapi Anda akan datang untuk melihat kode sebagai sesuatu yang indah sebelum lama. 395 00:17:25,140 --> 00:17:27,160 >> [Tertawa] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. Malan: Benar? 397 00:17:28,410 --> 00:17:29,360 Ya. 398 00:17:29,360 --> 00:17:30,480 Pertanyaan di tengah. 399 00:17:30,480 --> 00:17:32,146 >> AUDIENCE: Apakah Anda perlu untuk mengatakan int n? 400 00:17:32,146 --> 00:17:34,020 DAVID J. Malan: Anda melakukan tidak perlu mengatakan int n. 401 00:17:34,020 --> 00:17:37,670 Jadi karena kita sudah mengatakan int, Anda tidak perlu mengatakannya lagi. 402 00:17:37,670 --> 00:17:41,820 Menangkap adalah bahwa n harus menjadi tipe data yang sama seperti yang saya. 403 00:17:41,820 --> 00:17:43,310 Jadi itu hanya kenyamanan di sini. 404 00:17:43,310 --> 00:17:44,058 Ya. 405 00:17:44,058 --> 00:17:47,806 >> AUDIENCE: Dapatkah Anda pergi ke cetak karakter s braket saya lagi? 406 00:17:47,806 --> 00:17:48,930 DAVID J. Malan: Tentu saja. 407 00:17:48,930 --> 00:17:52,110 Jadi% c, ingat dari terakhir waktu, hanya penampung. 408 00:17:52,110 --> 00:17:53,930 Ini berarti menempatkan char di sini. 409 00:17:53,930 --> 00:17:56,780 backslash n, tentu saja, hanya berarti menempatkan satu baris di sini. 410 00:17:56,780 --> 00:17:59,540 Sehingga hanya daun, sekarang, ini bagian dari sintaks baru. 411 00:17:59,540 --> 00:18:03,730 Dan ini benar-benar berkata, ambil string disebut s dan pergi mendapatkan nya 412 00:18:03,730 --> 00:18:06,050 karakter i'th, sehingga untuk berbicara. 413 00:18:06,050 --> 00:18:10,590 >> Dan saya selalu mengatakan karakter i'th karena pada setiap iterasi dari loop ini 414 00:18:10,590 --> 00:18:14,540 itu seolah-olah kita mencetak , pertama s braket 0, 415 00:18:14,540 --> 00:18:15,780 sebagai seorang programmer mungkin mengatakan. 416 00:18:15,780 --> 00:18:18,680 Kemudian s bracket 1, maka s braket 2, kemudian 3, kemudian 4. 417 00:18:18,680 --> 00:18:21,610 Tapi tentu saja itu sebuah variabel, jadi aku hanya mengungkapkannya dengan i. 418 00:18:21,610 --> 00:18:23,900 >> Key, meskipun, adalah untuk mewujudkan, terutama jika Anda tidak sudah 419 00:18:23,900 --> 00:18:26,358 telah acclimating ke dunia ini pemrograman, di mana kita semua 420 00:18:26,358 --> 00:18:28,950 tampaknya dihitung mulai dari nol, harus mulai menghitung dari nol sekarang. 421 00:18:28,950 --> 00:18:35,130 Karena string, karakter pertama, z di Zamyla untuk lebih baik atau buruk 422 00:18:35,130 --> 00:18:40,490 akan tinggal di lokasi angka nol. 423 00:18:40,490 --> 00:18:48,210 >> Baiklah, jadi biarkan aku membawa kita kembali di sini untuk Zamyla 424 00:18:48,210 --> 00:18:50,746 dan melihat apa yang sebenarnya terjadi di bawah kap mesin. 425 00:18:50,746 --> 00:18:52,370 Jadi ada gagasan dari tipe casting. 426 00:18:52,370 --> 00:18:53,800 Anda mungkin telah benar-benar bermain dengan ini sudah, 427 00:18:53,800 --> 00:18:55,970 mungkin bagi hacker edisi P menetapkan satu. 428 00:18:55,970 --> 00:19:00,320 Tapi tipe casting hanya mengacu pada kemampuan dalam C dan beberapa bahasa lain 429 00:19:00,320 --> 00:19:03,170 mengkonversi satu tipe data yang lain. 430 00:19:03,170 --> 00:19:05,450 >> Sekarang bagaimana mungkin kita melihat ini cukup tedeng aling-aling? 431 00:19:05,450 --> 00:19:08,530 Jadi ini, ingat, adalah awal dari abjad Inggris. 432 00:19:08,530 --> 00:19:11,265 Dan konteksnya, ingat, dari seperti tahun lalu adalah ASCII. 433 00:19:11,265 --> 00:19:13,790 The American Standard Kode untuk Informasi Interchange. 434 00:19:13,790 --> 00:19:17,080 Yang hanya cara yang sangat panjang mengatakan pemetaan dari huruf 435 00:19:17,080 --> 00:19:19,370 untuk angka, dan dari nomor surat-surat. 436 00:19:19,370 --> 00:19:22,940 >> Jadi A sampai M sini, dot dot dot, garis dengan, ingat, 437 00:19:22,940 --> 00:19:25,582 angka desimal 65 ke atas. 438 00:19:25,582 --> 00:19:27,290 Dan kita tidak bicara tentang hal ini secara eksplisit, 439 00:19:27,290 --> 00:19:29,850 tapi pasti ada yang sama angka untuk huruf kecil. 440 00:19:29,850 --> 00:19:30,820 Dan memang, ada. 441 00:19:30,820 --> 00:19:33,730 Dunia memutuskan beberapa tahun lalu yang sedikit sebuah, huruf kecil a, 442 00:19:33,730 --> 00:19:35,020 akan menjadi 97. 443 00:19:35,020 --> 00:19:38,010 Dan sedikit b akan menjadi 98, dan sebagainya. 444 00:19:38,010 --> 00:19:40,200 >> Dan untuk tombol lain pada keyboard, ada 445 00:19:40,200 --> 00:19:42,190 akan menjadi pola yang sama bit. 446 00:19:42,190 --> 00:19:44,540 Atau dengan kata lain, angka desimal. 447 00:19:44,540 --> 00:19:47,110 Jadi pertanyaan di tangan, kemudian, adalah bagaimana kita bisa 448 00:19:47,110 --> 00:19:49,400 benar-benar melihat ini di bawah tenda? 449 00:19:49,400 --> 00:19:51,539 Jadi aku akan pergi ke gedit lagi. 450 00:19:51,539 --> 00:19:53,330 Dan bukan tipe yang satu ini dari awal, 451 00:19:53,330 --> 00:19:55,330 Aku akan pergi ke depan dan hanya membuka sesuatu 452 00:19:55,330 --> 00:19:58,350 dari kode hari ini disebut ASCII nol. 453 00:19:58,350 --> 00:20:01,210 >> Dan ASCII nol terlihat seperti ini. 454 00:20:01,210 --> 00:20:02,710 Jadi mari kita membungkus pikiran kita sekitar ini. 455 00:20:02,710 --> 00:20:04,969 Jadi pertama, saya sudah berkomentar kode, yang bagus. 456 00:20:04,969 --> 00:20:07,010 Karena itu benar-benar mengatakan apa yang akan terjadi, 457 00:20:07,010 --> 00:20:08,950 menampilkan pemetaan untuk huruf besar. 458 00:20:08,950 --> 00:20:13,690 Sekarang aku tak tahu apa yang saya maksud dengan itu, jadi mari kita menyimpulkan. 459 00:20:13,690 --> 00:20:16,870 >> Dalam bahasa Inggris, mungkin agak teknisi Inggris, 460 00:20:16,870 --> 00:20:20,660 apa baris 18 muncul untuk melakukan bagi kita? 461 00:20:20,660 --> 00:20:21,500 Baris hanya 18. 462 00:20:21,500 --> 00:20:22,430 Apa itu merangsang? 463 00:20:22,430 --> 00:20:25,192 Apa itu akan kick off di sini? 464 00:20:25,192 --> 00:20:26,100 >> AUDIENCE: Sebuah lingkaran. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. Malan: Sebuah loop. 466 00:20:26,630 --> 00:20:28,463 Dan berapa kali adalah yang akan iterate? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 AUDIENCE: [interposing SUARA] enam kali. 469 00:20:33,270 --> 00:20:34,830 DAVID J. Malan: Tidak enam kali. 470 00:20:34,830 --> 00:20:35,840 AUDIENCE: 26 kali. 471 00:20:35,840 --> 00:20:36,560 DAVID J. Malan: 26 kali. 472 00:20:36,560 --> 00:20:37,060 Ya, maaf. 473 00:20:37,060 --> 00:20:37,960 26 kali. 474 00:20:37,960 --> 00:20:38,460 Mengapa? 475 00:20:38,460 --> 00:20:41,590 Nah, itu sedikit aneh, tapi Saya sudah mulai menghitung dari 65. 476 00:20:41,590 --> 00:20:43,300 Yang aneh, tapi tidak salah. 477 00:20:43,300 --> 00:20:44,610 Ini tidak buruk per mengatakan. 478 00:20:44,610 --> 00:20:46,980 Dan aku melakukan itu hanya karena, misalnya ini, 479 00:20:46,980 --> 00:20:50,455 Aku agak mengantisipasi bahwa modal A adalah 65. 480 00:20:50,455 --> 00:20:53,330 Sekarang ini bukan yang paling elegan cara untuk melakukan ini, untuk jenis kode keras 481 00:20:53,330 --> 00:20:56,130 Nilai-nilai esoteris bahwa tidak ada satu yang pernah diharapkan untuk mengingat. 482 00:20:56,130 --> 00:21:00,155 >> Tapi untuk saat ini, melihat bahwa aku melakukan hal ini melalui 65 ditambah 26. 483 00:21:00,155 --> 00:21:03,030 Karena ternyata saya bahkan tidak ingin untuk melakukan aritmatika di kepalaku. 484 00:21:03,030 --> 00:21:04,440 Jadi aku akan membiarkan compiler melakukannya. 485 00:21:04,440 --> 00:21:08,600 Tapi kemudian pada setiap loop, setiap iterasi loop, aku incrementing i. 486 00:21:08,600 --> 00:21:10,196 >> Jadi sekarang ini terlihat sedikit samar. 487 00:21:10,196 --> 00:21:13,320 Tapi kita harus memiliki bangunan dasar blok yang dapat digunakan untuk memahami hal ini. 488 00:21:13,320 --> 00:21:15,510 % C hanya sebuah tempat untuk char. 489 00:21:15,510 --> 00:21:19,010 % I merupakan tempat bagi int. 490 00:21:19,010 --> 00:21:23,310 Dan ternyata bahwa dengan menggunakan ini sintaks baru, kurung ini, sehingga 491 00:21:23,310 --> 00:21:26,100 untuk berbicara, sehingga tipe data dalam tanda kurung a, 492 00:21:26,100 --> 00:21:32,270 Aku bisa memaksa compiler untuk mengobati saya tidak adalah bilangan bulat, tetapi sebagai char. 493 00:21:32,270 --> 00:21:35,520 >> Dengan demikian menunjukkan kepada saya karakter setara dengan jumlah tersebut. 494 00:21:35,520 --> 00:21:37,986 Sekarang di sini, kode ini cukup banyak identik. 495 00:21:37,986 --> 00:21:39,860 Aku hanya ingin membuat Super eksplisit fakta 496 00:21:39,860 --> 00:21:42,095 bahwa aku mulai pada 97, yang huruf kecil a. 497 00:21:42,095 --> 00:21:44,080 Pada melalui 26 huruf lainnya. 498 00:21:44,080 --> 00:21:46,970 Dan aku lakukan-- lagi, pengecoran i, sehingga untuk berbicara. 499 00:21:46,970 --> 00:21:49,160 Atau tipe casting i, sehingga untuk berbicara. 500 00:21:49,160 --> 00:21:51,420 >> Dari int ke char. 501 00:21:51,420 --> 00:21:55,760 Jadi hasil akhirnya akan menjadi, terus terang, informasi yang kita sudah tahu. 502 00:21:55,760 --> 00:21:59,411 Aku akan membuat ascii-0 tidak dot-- dot c. 503 00:21:59,411 --> 00:22:02,160 Perhatikan, Anda mungkin dibuat bahwa kesalahan karena aku baru saja melakukannya tanpa sengaja. 504 00:22:02,160 --> 00:22:03,820 Membuat ascii-0. 505 00:22:03,820 --> 00:22:06,090 Sekarang aku akan melakukan ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Aku akan memperbesar, dan sayangnya itu akan menggulir dari layar. 507 00:22:09,050 --> 00:22:15,060 Tapi kita melihat seluruh grafik dimana sebuah peta ke 97, peta b ke 98, 508 00:22:15,060 --> 00:22:18,931 dan jika kita gulir ke atas lebih lanjut A, tentu saja, peta ke 65. 509 00:22:18,931 --> 00:22:21,180 Jadi ini hanya untuk mengatakan bahwa apa yang kita telah berkotbah, 510 00:22:21,180 --> 00:22:25,310 ada kesetaraan ini, sebenarnya terjadi dalam kenyataan. 511 00:22:25,310 --> 00:22:28,000 Jadi modifikasi cepat ini. 512 00:22:28,000 --> 00:22:31,220 Biarkan aku membuka ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 Dan melihat ini pintar, semacam dari, klarifikasi ini. 514 00:22:38,070 --> 00:22:41,770 Ini adalah ascii-1.c, dan melihat hal gila ini. 515 00:22:41,770 --> 00:22:45,120 >> Dan ini benar-benar sampai ke hati apa komputer lakukan. 516 00:22:45,120 --> 00:22:48,150 Meskipun kita manusia akan tidak dihitung dalam hal letters-- 517 00:22:48,150 --> 00:22:50,380 Saya tidak mulai berpikir, baik-baik kemudian b, 518 00:22:50,380 --> 00:22:52,590 dan menggunakan mereka untuk menghitung benda-benda fisik. 519 00:22:52,590 --> 00:22:58,680 Anda pasti bisa mengatakan bahwa saya ingin menginisialisasi beberapa variabel yang disebut c-- 520 00:22:58,680 --> 00:23:03,220 tapi aku bisa menelepon anything-- ini jadi c diinisialisasi ke ibukota A. 521 00:23:03,220 --> 00:23:07,560 >> Karena pada akhir hari, komputer tidak peduli apa yang Anda menyimpan, 522 00:23:07,560 --> 00:23:10,170 hanya peduli bagaimana Anda ingin untuk menyajikan informasi tersebut. 523 00:23:10,170 --> 00:23:13,560 Bagaimana Anda ingin komputer untuk menafsirkan bahwa pola bit? 524 00:23:13,560 --> 00:23:16,320 Jadi ini bukan sesuatu yang saya umumnya akan merekomendasikan melakukan. 525 00:23:16,320 --> 00:23:19,500 Ini benar-benar hanya sebuah contoh untuk menyampaikan bahwa Anda dapat benar-benar 526 00:23:19,500 --> 00:23:22,049 menginisialisasi sebuah integer ke char. 527 00:23:22,049 --> 00:23:24,090 Karena di bawah kap char, tentu saja, 528 00:23:24,090 --> 00:23:26,170 hanya nomor dari 0 sampai 255. 529 00:23:26,170 --> 00:23:28,540 >> Jadi, Anda pasti bisa memasukkannya ke dalam sebuah int. 530 00:23:28,540 --> 00:23:30,890 Dan apa ini juga menunjukkan adalah bahwa kita 531 00:23:30,890 --> 00:23:34,040 dapat mengkonversi dari satu ketik ke yang lain, di sini, 532 00:23:34,040 --> 00:23:36,780 akhirnya mencetak hal yang sama. 533 00:23:36,780 --> 00:23:44,760 Dan pada kenyataannya, ini saya akan memperbaiki online-- dimaksudkan untuk mengatakan ini, sekali lagi, di sini. 534 00:23:44,760 --> 00:23:48,610 Biarkan aku membersihkan ini secara online, dan kami akan lihat dalam walkthrough secara online sesuai kebutuhan, 535 00:23:48,610 --> 00:23:50,280 apa yang dimaksudkan di sana. 536 00:23:50,280 --> 00:23:50,960 >> OK. 537 00:23:50,960 --> 00:23:53,892 Contoh Jadi terakhir sekarang melibatkan a dan b dan kemudian kita akan 538 00:23:53,892 --> 00:23:54,850 mengambil hal-hal membuat takik. 539 00:23:54,850 --> 00:23:58,330 Jadi dengan dan b dan c di kapitalisasi 540 00:23:58,330 --> 00:24:01,560 dan kesetaraan daripadanya, mari kita kita lihat contoh ini, di sini. 541 00:24:01,560 --> 00:24:02,752 Contoh kode lain. 542 00:24:02,752 --> 00:24:04,460 Kami akan membuka satu yang sudah dibuat, jadi kami 543 00:24:04,460 --> 00:24:06,440 tidak perlu mengetiknya semua keluar dari awal. 544 00:24:06,440 --> 00:24:09,420 >> Dan melihat di antisipasi kami menggunakan beberapa kepala 545 00:24:09,420 --> 00:24:13,240 file, di antaranya adalah teman baru kami, string.h. 546 00:24:13,240 --> 00:24:15,597 Sekarang ini terlihat, pada awalnya sekilas, agak samar. 547 00:24:15,597 --> 00:24:18,180 Tapi mari kita lihat apakah kita tidak bisa alasan melalui apa yang terjadi di sini. 548 00:24:18,180 --> 00:24:21,150 Pertama saya mendapatkan string dari pengguna, dan saya menaruh string yang dalam variabel 549 00:24:21,150 --> 00:24:22,286 disebut s. 550 00:24:22,286 --> 00:24:24,090 Copy paste dari sebelumnya. 551 00:24:24,090 --> 00:24:27,250 Sejalan 22, aku rupanya melakukan apa 552 00:24:27,250 --> 00:24:30,760 Saya melakukan beberapa saat yang lalu, aku iterasi lebih karakter dalam s. 553 00:24:30,760 --> 00:24:34,780 >> Dan trik baru di sini menggunakan panjang string, optimasi kecil 554 00:24:34,780 --> 00:24:37,930 menyimpan panjang string n, daripada menelepon strlen lagi, 555 00:24:37,930 --> 00:24:38,850 dan lagi, dan lagi. 556 00:24:38,850 --> 00:24:41,120 Dan hanya memeriksa bahwa saya kurang dari n. 557 00:24:41,120 --> 00:24:43,330 Sekarang di sini, hal-hal sedikit menarik. 558 00:24:43,330 --> 00:24:45,980 Tapi itu hanya sebuah aplikasi ide baru ini sama. 559 00:24:45,980 --> 00:24:48,470 Apa dalam bahasa Inggris tidak s braket i mewakili? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> AUDIENCE: Menghitung setiap Karakter [Tak terdengar]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. Malan: Menghitung masing-masing karakter. 563 00:24:55,926 --> 00:24:58,680 Dan bahkan lebih ringkas, s braket saya mewakili apa? 564 00:24:58,680 --> 00:25:00,950 Akan Anda katakan. 565 00:25:00,950 --> 00:25:04,084 Tidak untuk menempatkan Anda di tempat di sini. 566 00:25:04,084 --> 00:25:06,375 >> AUDIENCE: Well-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. Malan: Jadi jika kata Ini-- jika string adalah Zamyla, yang starts-- 568 00:25:09,500 --> 00:25:12,380 AUDIENCE: --you berurusan dengan karakter separately-- 569 00:25:12,380 --> 00:25:13,690 DAVID J. Malan: Good. 570 00:25:13,690 --> 00:25:14,190 Tepat. 571 00:25:14,190 --> 00:25:17,940 Notasi persegi braket memungkinkan Anda untuk mengakses masing-masing karakter individu, 572 00:25:17,940 --> 00:25:21,120 sehingga s braket 0 akan menjadi karakter pertama dalam string. 573 00:25:21,120 --> 00:25:24,110 s bracket 1 akan menjadi yang kedua, dan sebagainya. 574 00:25:24,110 --> 00:25:28,050 Jadi pertanyaan saya bertanya, di sini, dalam kondisi ini adalah apa? 575 00:25:28,050 --> 00:25:33,984 Apakah karakter i'th dari s lebih besar dari atau sama dengan huruf kecil a? 576 00:25:33,984 --> 00:25:36,400 Dan apa artinya ini, di sini, dengan ampersands ganda? 577 00:25:36,400 --> 00:25:36,800 AUDIENCE (BERSAMA): Dan. 578 00:25:36,800 --> 00:25:37,210 DAVID J. Malan: Dan. 579 00:25:37,210 --> 00:25:38,418 Hanya saja setara dengan ini. 580 00:25:38,418 --> 00:25:42,310 Dan bukan merupakan kata kunci dalam C, Anda harus digunakan, mengganggu, ampersand ampersand. 581 00:25:42,310 --> 00:25:47,520 Dan ini, sebaliknya, meminta adalah s i'th karakter kurang dari atau sama 582 00:25:47,520 --> 00:25:49,030 huruf kecil z? 583 00:25:49,030 --> 00:25:52,440 Dan lagi, di sinilah memahami mendasari 584 00:25:52,440 --> 00:25:54,550 pelaksanaan komputer masuk akal. 585 00:25:54,550 --> 00:25:57,330 Perhatikan bahwa, meskipun saya memiliki dot dot dot di sana, 586 00:25:57,330 --> 00:26:04,410 tampak seperti melalui z dalam huruf kecil yang semua nilai yang berdekatan naik dari 97 ke atas. 587 00:26:04,410 --> 00:26:07,820 >> Dan sama untuk huruf besar mulai dari 65. 588 00:26:07,820 --> 00:26:10,410 Jadi takeaway, kemudian, adalah bahwa dalam bahasa Inggris, 589 00:26:10,410 --> 00:26:12,760 bagaimana Anda akan menjelaskan apa baris 24 dilakukan? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Ya? 592 00:26:16,728 --> 00:26:21,575 >> AUDIENCE: Pada tanggal 24 itu memeriksa untuk melihat apakah masing-masing karakter huruf kecil a. 593 00:26:21,575 --> 00:26:24,700 DAVID J. Malan: Ini memeriksa apakah masing-masing karakter adalah huruf kecil. 594 00:26:24,700 --> 00:26:28,590 Jadi, bahkan lebih ringkas, adalah karakter i'th dari s huruf kecil? 595 00:26:28,590 --> 00:26:30,690 Itu semua kita mengekspresikan sini logis, 596 00:26:30,690 --> 00:26:33,750 sedikit samar, tapi akhirnya cukup tedeng aling-aling. 597 00:26:33,750 --> 00:26:36,480 Apakah s i'th karakter huruf kecil? 598 00:26:36,480 --> 00:26:40,130 >> Jika demikian, dan di sinilah hal-hal mendapatkan pikiran sedikit membungkuk 599 00:26:40,130 --> 00:26:44,760 untuk sesaat, jika demikian, pergi depan dan mencetak karakter. 600 00:26:44,760 --> 00:26:47,360 Jadi ini hanya pengganti, tapi apa karakter? 601 00:26:47,360 --> 00:26:53,710 Mengapa saya melakukan s braket i dikurangi ungkapan ini di sini? 602 00:26:53,710 --> 00:26:55,110 >> Nah melihat pola di sini. 603 00:26:55,110 --> 00:26:57,380 Angka-angka yang sebenarnya tidak penting begitu banyak. 604 00:26:57,380 --> 00:27:02,700 Tetapi perhatikan bahwa 97 adalah seberapa jauh dari 65? 605 00:27:02,700 --> 00:27:03,560 >> AUDIENCE: 32. 606 00:27:03,560 --> 00:27:04,480 >> DAVID J. Malan: 32. 607 00:27:04,480 --> 00:27:06,890 Seberapa jauh 98 dari 66? 608 00:27:06,890 --> 00:27:07,740 >> AUDIENCE: 32. 609 00:27:07,740 --> 00:27:09,890 >> DAVID J. Malan: Little c dari besar C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Jadi ada 32 hop dari satu huruf yang lain. 612 00:27:14,550 --> 00:27:17,790 Jadi terus terang saya, bisa menyederhanakan ini itu. 613 00:27:17,790 --> 00:27:20,400 Tapi kemudian aku agak sulit coding Pemahaman ini tingkat rendah 614 00:27:20,400 --> 00:27:21,740 bahwa tidak ada pembaca yang pernah akan mengerti. 615 00:27:21,740 --> 00:27:25,080 Jadi aku akan menggeneralisasi sebagai, saya mengetahui huruf kecil lebih besar. 616 00:27:25,080 --> 00:27:28,400 Aku tahu huruf kapital yang nilai-nilai yang lebih kecil, ironisnya. 617 00:27:28,400 --> 00:27:33,216 >> Tapi ini efektif setara dengan mengatakan kurangi 32 dari s braket i. 618 00:27:33,216 --> 00:27:35,430 Jadi dalam konteks ini surat, jika surat itu 619 00:27:35,430 --> 00:27:38,950 kebetulan, huruf kecil , dan aku kurangi 32, 620 00:27:38,950 --> 00:27:43,442 apa efek yang yang memiliki, matematis, pada huruf kecil a? 621 00:27:43,442 --> 00:27:44,400 AUDIENCE: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 DAVID J. Malan: mengkapitalisasi itu. 623 00:27:45,691 --> 00:27:48,440 Dan memang, inilah sebabnya kami Program ini disebut memanfaatkan nol. 624 00:27:48,440 --> 00:27:51,590 Program ini baik mengkapitalisasi huruf a, 625 00:27:51,590 --> 00:27:54,580 setelah memeriksa jika memang huruf kecil. 626 00:27:54,580 --> 00:27:59,810 Jika tidak, di baris 30, apa yang harus saya lakukan jika itu bukan huruf kecil bahwa aku 627 00:27:59,810 --> 00:28:02,852 melihat pada tertentu iterasi dalam lingkaran. 628 00:28:02,852 --> 00:28:03,890 Hanya print. 629 00:28:03,890 --> 00:28:07,010 >> Jadi tidak mengubah hal-hal itu tidak bahkan huruf kecil. 630 00:28:07,010 --> 00:28:10,790 Batasi diri Anda untuk sedikit melalui sedikit z. 631 00:28:10,790 --> 00:28:12,730 Sekarang ini cukup misterius. 632 00:28:12,730 --> 00:28:15,230 Tetapi pada akhir hari, ini adalah bagaimana kita, sekali waktu, 633 00:28:15,230 --> 00:28:16,460 harus menerapkan hal. 634 00:28:16,460 --> 00:28:19,780 Jika saya bukan terbuka memanfaatkan satu, oh terima kasih Tuhan. 635 00:28:19,780 --> 00:28:22,320 Ada fungsi dipanggil untuk atas yang dapat 636 00:28:22,320 --> 00:28:25,410 melakukan segala sesuatu yang kita hanya melakukan pada tingkat yang cukup rendah. 637 00:28:25,410 --> 00:28:28,752 >> Sekarang untuk bagian atas menarik karena ini dideklarasikan pada file, 638 00:28:28,752 --> 00:28:31,210 dan Anda hanya akan tahu ini dengan memeriksa dokumentasi, 639 00:28:31,210 --> 00:28:35,730 atau diberitahu, misalnya, di kelas, di mana itu ada, dalam sebuah file bernama ctype.h. 640 00:28:35,730 --> 00:28:37,630 Jadi ini adalah teman baru yang lain dari kita. 641 00:28:37,630 --> 00:28:40,750 Dan untuk bagian atas tidak persis apa namanya. 642 00:28:40,750 --> 00:28:44,860 >> Anda dapat lulus dalam, sebagai argumen, antara kurung ini, beberapa karakter. 643 00:28:44,860 --> 00:28:48,390 Aku akan lulus dalam karakter i'th dari s menggunakan notasi mewah baru 644 00:28:48,390 --> 00:28:49,870 melibatkan kurung persegi. 645 00:28:49,870 --> 00:28:53,391 Dan mengambil menebak, apa yang return nilai untuk atas tampaknya akan 646 00:28:53,391 --> 00:28:53,890 untuk menjadi? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Sebuah huruf kapital. 649 00:28:57,770 --> 00:28:58,620 Sebuah huruf kapital. 650 00:28:58,620 --> 00:29:02,330 >> Jadi jika saya lulus dalam huruf kecil a, mudah-mudahan, berdasarkan definisi untuk bagian atas, 651 00:29:02,330 --> 00:29:05,600 itu akan mengembalikan huruf A. Jika tidak, 652 00:29:05,600 --> 00:29:08,590 jika itu bukan huruf kecil di tempat pertama, saya hanya mencetaknya. 653 00:29:08,590 --> 00:29:10,800 Dan memang, perhatikan teman kedua di sini. 654 00:29:10,800 --> 00:29:13,840 Tidak hanya untuk bagian atas ada, tetapi lebih rendah, yang 655 00:29:13,840 --> 00:29:16,200 sebenarnya menjawab pertanyaan itu untuk saya. 656 00:29:16,200 --> 00:29:19,730 >> Sekarang siapa pun yang menulis hal-hal ini, 10-an tahun yang lalu, kau tahu apa? 657 00:29:19,730 --> 00:29:23,840 Diterapkan untuk bagian atas dan menurunkan menggunakan kode seperti ini. 658 00:29:23,840 --> 00:29:27,270 Tapi sekali lagi, konsisten dengan Ide ini abstrak pergi, 659 00:29:27,270 --> 00:29:29,190 semacam, tingkat yang lebih rendah rincian pelaksanaan. 660 00:29:29,190 --> 00:29:32,600 Dan berdiri di pundak orang yang datang sebelum kami, menggunakan fungsi 661 00:29:32,600 --> 00:29:36,300 seperti untuk bagian atas dan bawah, yang cukup mengagumkan adalah baik 662 00:29:36,300 --> 00:29:40,190 ditunjuk untuk mengatakan apa yang mereka lakukan, adalah paradigma yang indah untuk mengadopsi. 663 00:29:40,190 --> 00:29:44,040 >> Sekarang, ternyata bahwa jika saya membaca halaman manual untuk, mengatakan, untuk bagian atas, 664 00:29:44,040 --> 00:29:45,010 Saya belajar sesuatu yang lain. 665 00:29:45,010 --> 00:29:46,890 Jadi pria toupper. 666 00:29:46,890 --> 00:29:48,050 Ini sedikit luar biasa. 667 00:29:48,050 --> 00:29:51,110 Tapi perhatikan, inilah yang menyebutkan file header yang harus saya gunakan. 668 00:29:51,110 --> 00:29:54,460 Sebagai samping, karena ini menyesatkan, fungsi 669 00:29:54,460 --> 00:29:59,070 menggunakan int bukan karakter karena alasan pengecekan error. 670 00:29:59,070 --> 00:30:01,260 Tapi kita mungkin akan datang kembali ke di masa depan. 671 00:30:01,260 --> 00:30:05,910 >> Tapi perhatikan, di sini, untuk bertobat atas huruf c ke huruf besar jika mungkin. 672 00:30:05,910 --> 00:30:07,674 Jadi itu cukup sederhana. 673 00:30:07,674 --> 00:30:09,340 Dan sekarang mari kita menjadi sedikit lebih spesifik. 674 00:30:09,340 --> 00:30:12,750 Mari kita lihat bagian dari halaman manual di bawah nilai kembali. 675 00:30:12,750 --> 00:30:15,420 Nilai yang dikembalikan adalah bahwa surat dikonversi. 676 00:30:15,420 --> 00:30:18,690 Atau c, jika konversi tidak mungkin, 677 00:30:18,690 --> 00:30:20,250 di mana c adalah input asli. 678 00:30:20,250 --> 00:30:24,140 Yang saya tahu dari sini, dari argumen untuk ke atas. 679 00:30:24,140 --> 00:30:25,780 >> Jadi apa adalah takeaway ini? 680 00:30:25,780 --> 00:30:28,060 Nilai yang dikembalikan adalah bahwa surat dikonversi, 681 00:30:28,060 --> 00:30:32,110 atau c, surat asli, jika konversi itu tidak mungkin. 682 00:30:32,110 --> 00:30:36,460 Apa perbaikan bisa karena itu saya membuat desain kode saya? 683 00:30:36,460 --> 00:30:37,146 Ya? 684 00:30:37,146 --> 00:30:38,810 >> AUDIENCE: Anda dapat menghapus yang lain itu. 685 00:30:38,810 --> 00:30:40,810 DAVID J. Malan: aku bisa menghapus pernyataan lain, 686 00:30:40,810 --> 00:30:42,510 , bukan hanya pernyataan lain. 687 00:30:42,510 --> 00:30:44,150 >> AUDIENCE: Anda dapat menghapus [Tak terdengar]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. Malan: aku bisa menghapus seluruh garpu 689 00:30:46,310 --> 00:30:48,209 di jalan, jika yang lain sama sekali. 690 00:30:48,209 --> 00:30:50,250 Jadi memang, biarkan aku membuka versi final ini, 691 00:30:50,250 --> 00:30:55,540 memanfaatkan-2 dan perhatikan betapa, jika Anda akan, seksi, kode ini kini semakin, 692 00:30:55,540 --> 00:31:00,040 bahwa saya telah berkurang dari beberapa tujuh atau lebih baris untuk hanya empat, 693 00:31:00,040 --> 00:31:03,850 fungsionalitas yang aku berniat hanya dengan menelepon ke atas, 694 00:31:03,850 --> 00:31:09,410 lewat di s braket i, dan pencetakan keluar, dengan placeholder% c, 695 00:31:09,410 --> 00:31:11,090 bahwa karakter tertentu. 696 00:31:11,090 --> 00:31:14,560 >> Sekarang bisa dibilang, ada bug, atau setidaknya risiko bug, 697 00:31:14,560 --> 00:31:15,350 dalam program ini. 698 00:31:15,350 --> 00:31:18,200 Jadi hanya untuk kembali ke takeaway sebelumnya, 699 00:31:18,200 --> 00:31:21,820 apa yang harus saya mungkin juga dilakukan di Program ini untuk membuatnya lebih kuat, 700 00:31:21,820 --> 00:31:24,974 sehingga tidak ada cara itu bisa kecelakaan, bahkan dalam kasus yang jarang terjadi? 701 00:31:24,974 --> 00:31:26,390 AUDIENCE: Pastikan itu tidak NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. Malan: Pastikan itu tidak NULL. 703 00:31:28,056 --> 00:31:31,030 Jadi benar-benar, untuk membuat super tepat, saya harus melakukan sesuatu seperti, 704 00:31:31,030 --> 00:31:35,300 jika s tidak NULL, maka pergi ke depan dan mengeksekusi 705 00:31:35,300 --> 00:31:38,470 baris kode, yang Saya kemudian dapat indent seperti itu, 706 00:31:38,470 --> 00:31:39,870 dan kemudian dimasukkan ke dalam penjepit dekat saya. 707 00:31:39,870 --> 00:31:41,550 Jadi baik mengikat bersama-sama dari dua ide. 708 00:31:41,550 --> 00:31:42,429 Ya? 709 00:31:42,429 --> 00:31:44,470 AUDIENCE: Bisakah Anda menggunakan a lakukan while, bukan? 710 00:31:44,470 --> 00:31:47,270 DAVID J. Malan: Bisa Saya melakukan do while? 711 00:31:47,270 --> 00:31:50,020 AUDIENCE: --you ingin memastikan bahwa Anda benar-benar [Tak terdengar]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. Malan: Bisa Anda menggunakan do sementara? 713 00:31:51,728 --> 00:31:52,450 Jawaban singkat, tidak. 714 00:31:52,450 --> 00:31:54,700 Karena kau akan memperkenalkan kasus sudut lain. 715 00:31:54,700 --> 00:31:56,660 Jika string adalah panjang nol. 716 00:31:56,660 --> 00:31:59,600 Jika misalnya, saya hanya memukul Masukkan, tanpa pernah mengetik Zamyla. 717 00:31:59,600 --> 00:32:02,490 Aku akan menyerahkan kembali aktual String, seperti yang kita akhirnya akan melihat, 718 00:32:02,490 --> 00:32:03,780 yang memiliki nol karakter. 719 00:32:03,780 --> 00:32:05,630 Ini masih string, itu hanya super pendek. 720 00:32:05,630 --> 00:32:07,960 Tetapi jika Anda menggunakan do sementara, Anda akan membabi buta 721 00:32:07,960 --> 00:32:10,050 mencoba melakukan sesuatu dengan menghormati ke string itu, 722 00:32:10,050 --> 00:32:12,537 dan tidak ada yang akan berada di sana. 723 00:32:12,537 --> 00:32:18,607 >> AUDIENCE: Nah, jika Anda melakukan lakukan [Tak terdengar] sementara s-- 724 00:32:18,607 --> 00:32:21,190 DAVID J. Malan: Oh, begitu, tetap mendapatkan string dari pengguna. 725 00:32:21,190 --> 00:32:23,525 Jawabannya begitu singkat, Anda bisa, dan terus mengganggu 726 00:32:23,525 --> 00:32:26,150 mereka untuk memberikan string yang cukup pendek untuk muat di memori. 727 00:32:26,150 --> 00:32:26,700 Tentu saja. 728 00:32:26,700 --> 00:32:27,630 Aku hanya memilih untuk tidak. 729 00:32:27,630 --> 00:32:30,505 Jika mereka tidak memberi saya string I inginkan, aku berhenti, aku menyerah. 730 00:32:30,505 --> 00:32:33,260 Tapi benar-benar, untuk tujuan itu, Anda benar-benar bisa melakukannya. 731 00:32:33,260 --> 00:32:37,500 >> Jadi file header perpustakaan yang kita sekarang akrab dengan semuanya ini, di sini. 732 00:32:37,500 --> 00:32:41,550 Standard I / O, CS50.h, string.h, ctype.h, dan ada, memang, orang lain. 733 00:32:41,550 --> 00:32:44,460 Beberapa dari Anda telah menemukan perpustakaan matematika di math.h. 734 00:32:44,460 --> 00:32:48,200 Tapi izinkan saya memperkenalkan Anda, sekarang, untuk sumber daya ini bahwa staf CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 dan Rob, dan Gabe tertentu telah mengumpulkan. 736 00:32:50,630 --> 00:32:52,630 Itu akan segera menghubungkan pada website kursus ini. 737 00:32:52,630 --> 00:32:54,870 Ini disebut referensi CS50. 738 00:32:54,870 --> 00:32:58,230 >> Yang hanya untuk memberikan cepat rasa itu, bekerja sebagai berikut. 739 00:32:58,230 --> 00:33:00,740 Biarkan aku pergi ke reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Anda akan melihat di sisi kiri sisi daftar luar biasa 741 00:33:02,990 --> 00:33:04,595 fungsi yang datang dengan c. 742 00:33:04,595 --> 00:33:07,790 Tapi kalau aku peduli, untuk saat ini, tentang sesuatu seperti strlen, 743 00:33:07,790 --> 00:33:08,746 Saya bisa mengetik di sana. 744 00:33:08,746 --> 00:33:10,870 Ini filter ke bawah daftar hanya apa yang saya sayangi. 745 00:33:10,870 --> 00:33:11,940 Aku akan klik. 746 00:33:11,940 --> 00:33:14,740 Dan sekarang di sebelah kiri, Anda akan melihat apa yang kita harapkan 747 00:33:14,740 --> 00:33:18,290 adalah lebih mudah, manusia Penjelasan ramah bagaimana 748 00:33:18,290 --> 00:33:19,170 Fungsi ini bekerja. 749 00:33:19,170 --> 00:33:20,600 >> Mengembalikan panjang string. 750 00:33:20,600 --> 00:33:24,060 Berikut sinopsis, di sini adalah bagaimana Anda menggunakannya dalam hal file header, 751 00:33:24,060 --> 00:33:27,430 dan dalam hal apa fungsi Sepertinya dalam hal argumen. 752 00:33:27,430 --> 00:33:30,250 Dan kemudian di sini, kembali panjang string. 753 00:33:30,250 --> 00:33:34,280 Tapi bagi Anda yang lebih nyaman, Anda benar-benar dapat mengklik lebih nyaman, 754 00:33:34,280 --> 00:33:37,070 dan isi dari ini Halaman, sekarang, akan berubah 755 00:33:37,070 --> 00:33:41,660 menjadi nilai default apa Anda dapatkan dengan menggunakan halaman manual. 756 00:33:41,660 --> 00:33:44,100 >> Dengan kata lain, CS50 referensi adalah penyederhanaan 757 00:33:44,100 --> 00:33:46,220 dari halaman manual oleh staf, untuk siswa. 758 00:33:46,220 --> 00:33:49,320 Khususnya, mereka yang kurang nyaman dan di antara, sehingga Anda 759 00:33:49,320 --> 00:33:51,660 tidak harus mencoba untuk membungkus pikiran Anda sekitar, terus terang, 760 00:33:51,660 --> 00:33:55,030 beberapa sintaks yang cukup samar dan dokumentasi kadang-kadang. 761 00:33:55,030 --> 00:33:57,650 >> Jadi ingat-ingat di masa yang akan datang. 762 00:33:57,650 --> 00:33:59,560 Jadi di sini, sekali lagi, adalah Zamyla. 763 00:33:59,560 --> 00:34:03,255 Mari kita sekarang mengajukan pertanyaan yang sedikit lebih manusiawi diakses. 764 00:34:03,255 --> 00:34:05,380 Terima kasih kepada Chang, yang sudah mencetak lebih gajah 765 00:34:05,380 --> 00:34:07,090 tanpa henti selama beberapa hari terakhir. 766 00:34:07,090 --> 00:34:09,730 Kami memiliki kesempatan untuk memberikan setidaknya satu dari mereka pergi. 767 00:34:09,730 --> 00:34:13,239 Jika kita bisa mendapatkan hanya satu relawan untuk datang ke atas untuk menggambar di layar. 768 00:34:13,239 --> 00:34:14,530 Bagaimana di sini? 769 00:34:14,530 --> 00:34:15,340 >> Ayo up. 770 00:34:15,340 --> 00:34:16,720 Siapa nama Anda? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 DAVID J. Malan: Alex. 773 00:34:17,760 --> 00:34:18,259 Baiklah. 774 00:34:18,259 --> 00:34:19,388 Alex, datang ke atas. 775 00:34:19,388 --> 00:34:21,679 Kita akan melihat Anda tulisan tangan pada layar di sini. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Baiklah, senang bertemu dengan Anda. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Nice Anda bertemu Anda. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. Malan: Baiklah. 780 00:34:27,512 --> 00:34:28,969 Jadi, latihan super sederhana. 781 00:34:28,969 --> 00:34:31,440 Bar tidak tinggi untuk mendapatkan gajah hari ini. 782 00:34:31,440 --> 00:34:33,439 Anda memainkan peran GetString. 783 00:34:33,439 --> 00:34:35,980 Dan aku akan hanya memberitahu Anda string yang telah Anda masuk. 784 00:34:35,980 --> 00:34:38,080 Dan anggaplah bahwa Anda, GetString, telah dipanggil. 785 00:34:38,080 --> 00:34:42,480 Dan manusia, seperti saya, memiliki diketik di Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Hanya pergi ke depan dan menulis Zamyla pada layar seolah-olah Anda mendapatkan itu 787 00:34:45,650 --> 00:34:47,250 dan disimpan di suatu tempat dalam memori. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Meninggalkan ruang untuk apa yang akan menjadi beberapa words-- lain yang OK, terus berjalan. 790 00:34:55,570 --> 00:34:59,620 >> [Tertawa] 791 00:34:59,620 --> 00:35:00,800 >> Jadi Zamyla, Excellent. 792 00:35:00,800 --> 00:35:04,880 Jadi sekarang anggaplah bahwa Anda, GetString, disebut lagi. 793 00:35:04,880 --> 00:35:09,350 Dan karena itu, saya memberikan Anda, di keyboard, dengan nama lain, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Baiklah. 796 00:35:18,060 --> 00:35:22,380 Dan sekarang waktu berikutnya GetString adalah disebut, saya ketik sesuatu seperti Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Kau benar-benar mengambil hati random access memory. 798 00:35:27,560 --> 00:35:29,631 Yang menarik segalanya benar-benar acak. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [Tertawa] 801 00:35:31,104 --> 00:35:32,520 ALEX: Maaf tulisan tangan saya buruk. 802 00:35:32,520 --> 00:35:33,770 DAVID J. Malan: Tidak, itu OK. 803 00:35:33,770 --> 00:35:40,480 Dan bagaimana dengan Rob, R-O-B. OK. 804 00:35:40,480 --> 00:35:41,020 Baik. 805 00:35:41,020 --> 00:35:43,853 Jadi saya tidak mengantisipasi Anda akan jenis meletakkan hal-hal dengan cara ini. 806 00:35:43,853 --> 00:35:45,020 Tapi kita bisa membuat karya ini. 807 00:35:45,020 --> 00:35:48,810 Jadi bagaimana Anda pergi tentang peletakan out karakter tersebut dalam memori? 808 00:35:48,810 --> 00:35:51,310 Dengan kata lain, jika kita berpikir tentang layar ini hitam persegi panjang 809 00:35:51,310 --> 00:35:53,550 sebagai mewakili komputer RAM, atau memori. 810 00:35:53,550 --> 00:35:55,850 >> Dan mengingat RAM yang hanya sejumlah byte, 811 00:35:55,850 --> 00:35:57,480 dan byte sejumlah besar bit. 812 00:35:57,480 --> 00:35:59,350 Dan bit entah bagaimana dilaksanakan, umumnya 813 00:35:59,350 --> 00:36:01,119 dengan beberapa bentuk listrik di hardware. 814 00:36:01,119 --> 00:36:03,160 Jadi itu semacam yang layering kita bicarakan 815 00:36:03,160 --> 00:36:04,510 dan sekarang dapat mengambil untuk diberikan. 816 00:36:04,510 --> 00:36:07,020 Bagaimana Anda pergi tentang memutuskan di mana untuk menulis 817 00:36:07,020 --> 00:36:11,634 Rob vs Gabe dibandingkan Belinda vs Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Aku hanya melakukannya dalam memerintahkan agar Anda mengatakan kepada saya. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. Malan: Dan itu benar. 820 00:36:15,650 --> 00:36:20,100 Tapi apa yang diatur di mana Anda meletakkan Nama Belinda dan nama Gabe? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Tidak ada? 822 00:36:20,764 --> 00:36:22,930 DAVID J. Malan: [TERTAWA] Jadi yang bekerja, itu baik-baik saja. 823 00:36:22,930 --> 00:36:25,290 Jadi komputer yang sedikit lebih tertib dari itu. 824 00:36:25,290 --> 00:36:29,000 Jadi ketika kita implement-- tinggal di sana hanya moment-- ketika kita benar-benar 825 00:36:29,000 --> 00:36:31,470 menerapkan sesuatu seperti GetString di komputer, 826 00:36:31,470 --> 00:36:34,480 Zamyla mungkin ditata cukup banyak seperti yang Anda lakukan pada layar, ada. 827 00:36:34,480 --> 00:36:36,660 >> Dan apa adalah kunci untuk melihat di sini, apa Alex lakukan, 828 00:36:36,660 --> 00:36:40,260 adalah ada semacam demarkasi yang antara masing-masing kata-kata ini, kan? 829 00:36:40,260 --> 00:36:46,580 Anda tidak menulis Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 dengan kata lain, ada semacam demarkasi yang tampaknya, 831 00:36:49,740 --> 00:36:52,370 semacam, jarak acak antara berbagai kata-kata. 832 00:36:52,370 --> 00:36:54,120 Tapi itu bagus, karena kita manusia sekarang dapat 833 00:36:54,120 --> 00:36:56,470 memvisualisasikan bahwa ini adalah empat senar yang berbeda. 834 00:36:56,470 --> 00:36:59,540 Ini bukan hanya satu urutan dari banyak karakter. 835 00:36:59,540 --> 00:37:04,190 Jadi komputer, maka, sementara itu, mungkin mengambil string seperti Zamyla, 836 00:37:04,190 --> 00:37:07,220 menempatkan masing-masing huruf dalam byte memori. 837 00:37:07,220 --> 00:37:10,400 Tapi jumlah yang jauh lebih besar, Tentu saja, dari enam karakter. 838 00:37:10,400 --> 00:37:11,690 >> Ada sejumlah besar RAM. 839 00:37:11,690 --> 00:37:15,330 Dan begitu selanjutnya, ini grid kotak akan 840 00:37:15,330 --> 00:37:17,560 untuk mewakili apa Alex hanya lakukan di sini di layar. 841 00:37:17,560 --> 00:37:20,937 Dan sekarang, Alex, kami dapat menawarkan Anda biru atau gajah jeruk dari Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Aku akan mengambil gajah biru. 843 00:37:22,270 --> 00:37:23,120 DAVID J. Malan: Seekor gajah biru. 844 00:37:23,120 --> 00:37:25,580 Jadi tepuk tangan meriah, jika kita bisa, untuk Alex di sini. 845 00:37:25,580 --> 00:37:26,100 >> [Tepuk Tangan] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Terima kasih. 847 00:37:26,766 --> 00:37:28,820 DAVID J. Malan: Terima kasih. 848 00:37:28,820 --> 00:37:36,230 Jadi takeaway adalah bahwa, meskipun Pola semacam berubah dari waktu ke waktu, di sini 849 00:37:36,230 --> 00:37:40,430 di papan, ada ini demarkasi antara berbagai string 850 00:37:40,430 --> 00:37:42,610 Alex mendapat bagi kita. 851 00:37:42,610 --> 00:37:45,230 Sekarang komputer, terus terang, bisa melakukan hal yang sama. 852 00:37:45,230 --> 00:37:48,210 Mereka bisa jenis celepuk string di mana saja di RAM. 853 00:37:48,210 --> 00:37:50,710 Sampai di sini, di sini, di sini, di sini. 854 00:37:50,710 --> 00:37:52,020 >> Mereka bisa melakukan hal itu. 855 00:37:52,020 --> 00:37:54,280 Tapi, tentu saja, itu mungkin bukan perencanaan terbaik. 856 00:37:54,280 --> 00:37:54,780 Benar? 857 00:37:54,780 --> 00:37:57,340 Jika saya terus bertanya Alex mendapatkan nama, mungkin dia akan 858 00:37:57,340 --> 00:38:01,370 menaruh beberapa lebih di sini, mungkin sampai di sini, di sini, di sini, akhirnya 859 00:38:01,370 --> 00:38:02,211 di sini. 860 00:38:02,211 --> 00:38:05,460 Tapi dengan perencanaan sedikit lebih, pasti, kita bisa berbaring hal-hal lebih bersih. 861 00:38:05,460 --> 00:38:07,350 Dan memang, itulah yang komputer tidak. 862 00:38:07,350 --> 00:38:10,720 >> Tapi menangkap adalah bahwa jika string berikutnya saya mendapatkan 863 00:38:10,720 --> 00:38:14,050 setelah Zamyla adalah sesuatu seperti Belinda, 864 00:38:14,050 --> 00:38:17,929 mengusulkan di mana kita mungkin menulis huruf b sehubungan dengan jaringan ini? 865 00:38:17,929 --> 00:38:18,720 Di mana Anda akan pergi? 866 00:38:18,720 --> 00:38:21,480 Di sebelah kanan dari itu, di bawah z, di bawah itu? 867 00:38:21,480 --> 00:38:23,204 Apa yang akan naluri pertama Anda menjadi? 868 00:38:23,204 --> 00:38:24,120 AUDIENCE: Di bawah z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. Malan: Jadi di bawah z. 870 00:38:25,100 --> 00:38:26,530 Dan itu cukup mudah, bukan? 871 00:38:26,530 --> 00:38:29,321 Ini semacam rapi, itu apa yang kita lakukan pada keyboard ketika kita tekan Enter, 872 00:38:29,321 --> 00:38:31,770 atau email saat melakukan daftar bullet hal. 873 00:38:31,770 --> 00:38:34,310 Tetapi kenyataannya adalah bahwa komputer mencoba untuk menjadi lebih efisien, 874 00:38:34,310 --> 00:38:37,170 dan menjejalkan tentu sebanyak data ke dalam RAM mungkin, 875 00:38:37,170 --> 00:38:38,890 sehingga Anda tidak membuang-buang bytes. 876 00:38:38,890 --> 00:38:41,545 Sehingga Anda tidak membuang setiap layar real estat. 877 00:38:41,545 --> 00:38:44,170 Dan masalahnya, meskipun, adalah bahwa jika kita benar-benar menempatkan surat 878 00:38:44,170 --> 00:38:49,940 b setelah, bagaimana kita akan tahu di mana nama Zamyla berakhir 879 00:38:49,940 --> 00:38:51,840 dan nama Belinda dimulai? 880 00:38:51,840 --> 00:38:55,270 Jadi Anda tidak manusiawi saja diusulkan, baik, tekan tombol Enter, pada dasarnya. 881 00:38:55,270 --> 00:38:56,410 Meletakkannya di bawah ini. 882 00:38:56,410 --> 00:38:59,750 Atau bahkan seperti Alex lakukan, hanya mulai menulis nama berikutnya di bawah sebelumnya, 883 00:38:59,750 --> 00:39:01,583 dan di bawah satu itu, dan kemudian di bawah satu. 884 00:39:01,583 --> 00:39:02,510 Itu isyarat visual. 885 00:39:02,510 --> 00:39:05,960 >> Komputer memiliki isyarat visual lainnya, tapi itu sedikit lebih ringkas. 886 00:39:05,960 --> 00:39:07,840 Ini karakter yang funky ini. 887 00:39:07,840 --> 00:39:11,890 Backslash 0, yang mungkin mengingatkan backslash n, 888 00:39:11,890 --> 00:39:12,640 dan sebagainya, sekarang. 889 00:39:12,640 --> 00:39:14,120 Urutan escape khusus. 890 00:39:14,120 --> 00:39:19,120 Backslash 0 adalah cara mewakili delapan bit nol berturut-turut. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Cara Anda mengungkapkan bahwa tidak memukul angka nol pada keyboard Anda, 893 00:39:26,130 --> 00:39:28,140 karena sebenarnya yang char ASCII. 894 00:39:28,140 --> 00:39:30,990 Sepertinya nomor, tetapi sebenarnya angka desimal 895 00:39:30,990 --> 00:39:35,910 yang mewakili melingkar Mesin terbang, jenis huruf melingkar. 896 00:39:35,910 --> 00:39:38,410 Sementara itu, backslash nol berarti, secara harfiah 897 00:39:38,410 --> 00:39:40,700 menempatkan delapan nol byte sini bagi saya. 898 00:39:40,700 --> 00:39:42,136 >> Jadi ini agak sewenang-wenang. 899 00:39:42,136 --> 00:39:44,260 Kita sudah bisa digunakan pola apapun bit, tetapi dunia 900 00:39:44,260 --> 00:39:46,610 memutuskan beberapa tahun lalu, bahwa untuk mewakili 901 00:39:46,610 --> 00:39:49,710 akhir string dalam memori, hanya menempatkan sejumlah besar nol. 902 00:39:49,710 --> 00:39:51,000 Karena kita bisa mendeteksi itu. 903 00:39:51,000 --> 00:39:54,790 Sekarang berarti bahwa ada surat dari alfabet dapat direpresentasikan dengan nol. 904 00:39:54,790 --> 00:39:58,480 >> Tapi itu OK, kita telah melihat bahwa kita menggunakan 65 ke atas di 97 ke atas. 905 00:39:58,480 --> 00:40:00,290 Kami tidak mendapatkan di mana saja dekat dengan semua nol. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Jadi Belinda di memori komputer sebenarnya akan pergi di sini. 908 00:40:06,540 --> 00:40:09,764 Aku sudah ditarik dalam kuning hanya untuk menarik perhatian kita untuk itu. 909 00:40:09,764 --> 00:40:11,680 Dan pemberitahuan juga, ini benar-benar sewenang-wenang. 910 00:40:11,680 --> 00:40:12,680 Saya menggambarkannya sebagai kotak. 911 00:40:12,680 --> 00:40:14,460 Seperti, RAM hanya beberapa objek fisik. 912 00:40:14,460 --> 00:40:17,300 Itu tidak selalu memiliki baris dan kolom, per se. 913 00:40:17,300 --> 00:40:20,490 Itu saja mendapat sejumlah byte diimplementasikan dalam perangkat keras entah bagaimana. 914 00:40:20,490 --> 00:40:22,817 Tetapi jika setelah Belinda I mengetik nama Gabe, 915 00:40:22,817 --> 00:40:25,650 dia akan berakhir di sini dalam memori, dan jika saya mengetik nama Daven ini, 916 00:40:25,650 --> 00:40:27,316 misalnya, dia akan berakhir di sini. 917 00:40:27,316 --> 00:40:29,310 Dan aku bisa terus menulis nama bahkan lebih. 918 00:40:29,310 --> 00:40:32,100 >> Sayangnya, jika saya mencoba untuk menulis nama super panjang, 919 00:40:32,100 --> 00:40:33,730 Aku mungkin akhirnya kehabisan memori. 920 00:40:33,730 --> 00:40:37,810 Dalam hal ini, GetString adalah akan kembali NULL, seperti yang kita katakan. 921 00:40:37,810 --> 00:40:41,720 Tapi untungnya, setidaknya dalam hal ini visual yang di sini, kami tidak bisa sejauh itu. 922 00:40:41,720 --> 00:40:45,860 >> Sekarang apa yang baik adalah bahwa ini ide umum memperlakukan hal-hal 923 00:40:45,860 --> 00:40:49,720 sebagai dalam kotak adalah wakil dari fitur C 924 00:40:49,720 --> 00:40:52,690 dan banyak bahasa, dikenal sebagai array. 925 00:40:52,690 --> 00:40:55,490 Array adalah jenis lain dari data. 926 00:40:55,490 --> 00:40:57,380 Ini adalah struktur data, jika Anda mau. 927 00:40:57,380 --> 00:41:01,160 Struktur dalam arti benar-benar, jenis, tampak seperti kotak, setidaknya 928 00:41:01,160 --> 00:41:02,320 di mata pikiran Anda. 929 00:41:02,320 --> 00:41:09,680 Array adalah bersebelahan urutan tipe data yang identik, 930 00:41:09,680 --> 00:41:11,330 kembali ke belakang untuk kembali ke belakang. 931 00:41:11,330 --> 00:41:14,720 >> Jadi string, di lain kata-kata, adalah array dari karakter. 932 00:41:14,720 --> 00:41:16,120 Array karakter. 933 00:41:16,120 --> 00:41:19,070 Tapi ternyata Anda dapat memiliki array tandan hal. 934 00:41:19,070 --> 00:41:21,870 Bahkan, kita dapat menempatkan bahkan nomor dalam array. 935 00:41:21,870 --> 00:41:23,920 Jadi bentuk yang kita akan mulai 936 00:41:23,920 --> 00:41:26,590 menyatakan data ini struktur yang dikenal sebagai array 937 00:41:26,590 --> 00:41:28,250 juga akan menggunakan tanda kurung siku. 938 00:41:28,250 --> 00:41:31,500 Tapi ini kurung siku akan memiliki arti yang berbeda dalam konteks ini. 939 00:41:31,500 --> 00:41:33,450 >> Dan mari kita lihat sebagai berikut. 940 00:41:33,450 --> 00:41:36,780 Misalkan saya membuka sebuah file baru di sini. 941 00:41:36,780 --> 00:41:38,535 Dan saya menyimpan ini sebagai ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 Dan aku akan menyimpan ini dalam folder saya di sini. 944 00:41:43,470 --> 00:41:46,130 Dan sekarang aku akan pergi ke depan dan mulai mengetik sesuatu 945 00:41:46,130 --> 00:41:53,940 seperti termasuk CS50.h, termasuk stdio.h, int void main. 946 00:41:53,940 --> 00:41:57,370 Dan kemudian dalam sini, saya ingin untuk pertama memiliki int disebut usia. 947 00:41:57,370 --> 00:42:01,371 >> Dan aku akan menggunakannya untuk mendapatkan int dari pengguna untuk usianya. 948 00:42:01,371 --> 00:42:04,620 Tapi program ini dimaksudkan untuk digunakan oleh beberapa orang, untuk konteks apapun. 949 00:42:04,620 --> 00:42:05,490 Aku punya antrean orang. 950 00:42:05,490 --> 00:42:08,281 Semua dari mereka harus mengetikkan mereka usia untuk mungkin beberapa, saya tidak tahu, 951 00:42:08,281 --> 00:42:10,530 kompetisi, atau acara bahwa mereka telah tiba untuk. 952 00:42:10,530 --> 00:42:13,030 Jadi orang berikutnya, saya perlu variabel lain. 953 00:42:13,030 --> 00:42:15,790 >> Karena jika saya hanya melakukan usia mendapat getInt, itu 954 00:42:15,790 --> 00:42:18,500 akan mengkritik, atau menimpa usia orang sebelumnya. 955 00:42:18,500 --> 00:42:19,760 Jadi itu tidak baik. 956 00:42:19,760 --> 00:42:21,790 Jadi insting pertama saya mungkin, oh, oke, 957 00:42:21,790 --> 00:42:26,260 jika saya ingin mendapatkan beberapa orang ages-- mari kita sebut age1 ini, 958 00:42:26,260 --> 00:42:31,280 int age2 mendapat int, int age3 mendapat getInt. 959 00:42:31,280 --> 00:42:35,340 Dan sekarang aku akan menggunakan beberapa kode pseudo di sini. 960 00:42:35,340 --> 00:42:37,679 >> Lakukan sesuatu dengan angka-angka. 961 00:42:37,679 --> 00:42:40,470 Kami akan berangkat ke hari lain apa kita lakukan di sana, karena kita hanya 962 00:42:40,470 --> 00:42:44,200 peduli untuk saat ini tentang age1, age2, age3. 963 00:42:44,200 --> 00:42:46,450 Sayangnya, setelah saya mengkompilasi program ini 964 00:42:46,450 --> 00:42:51,140 dan meletakkannya di depan pengguna yang sebenarnya, apa desain fundamental miskin 965 00:42:51,140 --> 00:42:53,890 keputusan yang saya tampaknya telah membuat? 966 00:42:53,890 --> 00:42:54,624 Ya? 967 00:42:54,624 --> 00:42:55,499 AUDIENCE: [Tak terdengar] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. Malan: Ya, Aku bahkan belum mencoba 970 00:42:59,820 --> 00:43:02,028 untuk mengetahui berapa banyak usia saya benar-benar peduli? 971 00:43:02,028 --> 00:43:05,380 Jika saya memiliki lebih sedikit dari tiga orang di sini, dan karena itu kurang dari tiga usia, 972 00:43:05,380 --> 00:43:07,260 Aku masih membabi buta mengharapkan tiga. 973 00:43:07,260 --> 00:43:08,720 Allah melarang empat orang muncul. 974 00:43:08,720 --> 00:43:10,990 Program saya hanya bahkan tidak akan mendukung mereka. 975 00:43:10,990 --> 00:43:13,280 >> Dan jadi ini, cerita panjang Singkatnya, ini bukan kebiasaan yang baik. 976 00:43:13,280 --> 00:43:13,780 Benar? 977 00:43:13,780 --> 00:43:16,530 Saya pada dasarnya menyalin dan menyisipkan kode dan hanya tweaking 978 00:43:16,530 --> 00:43:17,430 nama variabel. 979 00:43:17,430 --> 00:43:22,410 Dan, Tuhan, jika Anda memiliki, bukan tiga usia, namun 10, atau 100, atau bahkan 6.500 980 00:43:22,410 --> 00:43:23,820 mahasiswa, misalnya. 981 00:43:23,820 --> 00:43:26,950 Hal ini tidak akan menjadi sangat kode elegan, atau berkelanjutan. 982 00:43:26,950 --> 00:43:29,200 Anda akan harus menulis ulang program setiap kali 983 00:43:29,200 --> 00:43:30,760 nomor perubahan orang. 984 00:43:30,760 --> 00:43:35,090 >> Jadi untungnya, dalam sebenarnya kami File ages.c untuk hari ini, 985 00:43:35,090 --> 00:43:36,970 kami memiliki solusi yang lebih pintar. 986 00:43:36,970 --> 00:43:39,800 Pertama, aku akan meminjam membangun kami telah digunakan beberapa kali, 987 00:43:39,800 --> 00:43:43,744 ini dilakukan while, untuk mendapatkan jumlah orang di dalam ruangan. 988 00:43:43,744 --> 00:43:46,910 Aku hanya akan mengganggu pengguna, lagi dan lagi, sampai dia memberi saya 989 00:43:46,910 --> 00:43:49,260 nilai n itu adalah bilangan bulat positif. 990 00:43:49,260 --> 00:43:51,590 >> Saya bisa menggunakan, lalu waktu kita mendapatkan int positif. 991 00:43:51,590 --> 00:43:53,720 Tapi kita tidak memiliki nyata, jadi saya pergi ke depan 992 00:43:53,720 --> 00:43:55,660 dan kembali menerapkan ide ini. 993 00:43:55,660 --> 00:43:58,410 Sekarang di sini, ini adalah trik baru. 994 00:43:58,410 --> 00:44:02,260 Sejalan 27, sebagai komentar sejalan 26 menunjukkan, 995 00:44:02,260 --> 00:44:05,180 mendeklarasikan array di mana untuk menyimpan usia semua orang. 996 00:44:05,180 --> 00:44:09,320 >> Jadi jika Anda ingin mendapatkan, tidak satu int, tidak dua ints, tetapi sejumlah besar int. 997 00:44:09,320 --> 00:44:13,800 Secara khusus n bilangan bulat, yang mungkin n tiga, mungkin 100, mungkin 1.000. 998 00:44:13,800 --> 00:44:17,570 Sintaks, cukup sederhana, adalah untuk mengatakan, apa tipe data yang Anda inginkan? 999 00:44:17,570 --> 00:44:19,620 Apa yang ingin Anda panggil bahwa sepotong memori? 1000 00:44:19,620 --> 00:44:23,530 Apa yang ingin Anda panggil grid yang terlihat seperti ini pictorially? 1001 00:44:23,530 --> 00:44:27,700 >> Dan dalam tanda kurung di sini, Anda mengatakan seberapa besar Anda ingin array menjadi. 1002 00:44:27,700 --> 00:44:30,450 Dan lebih awal, ketika saya mengatakan sintaks ini sedikit berbeda di sini, 1003 00:44:30,450 --> 00:44:33,614 kami masih menggunakan tanda kurung, tapi ketika saya mendeklarasikan array, 1004 00:44:33,614 --> 00:44:35,530 jumlah bagian dalam kurung siku berarti 1005 00:44:35,530 --> 00:44:37,610 seberapa besar Anda ingin array menjadi. 1006 00:44:37,610 --> 00:44:42,490 >> Sebaliknya, ketika kami menggunakan s braket i sesaat lalu, s, string, 1007 00:44:42,490 --> 00:44:46,820 memang sebuah array karakter, tetapi bila Anda tidak mendeklarasikan sebuah variabel, 1008 00:44:46,820 --> 00:44:49,760 seperti dengan kata kunci ini di sini, Anda hanya mendapatkan 1009 00:44:49,760 --> 00:44:54,280 indeks tertentu, tertentu elemen dari array tersebut. 1010 00:44:54,280 --> 00:44:57,090 Setelah kita tahu bahwa, sisanya ini sangatlah mudah. 1011 00:44:57,090 --> 00:45:00,765 Jika baru pertama aku akan mencetak apa usia orang nomor i. 1012 00:45:00,765 --> 00:45:03,890 Di mana saya hanya mengatakan nomor orang satu, orang nomor dua, orang nomor tiga. 1013 00:45:03,890 --> 00:45:06,306 >> Dan aku hanya melakukan aritmatika, sehingga orang normal seperti, 1014 00:45:06,306 --> 00:45:09,030 kita menghitung dari satu untuk ini Program, dan tidak dari nol. 1015 00:45:09,030 --> 00:45:13,620 Lalu aku menelepon getInt, tapi aku menyimpan jawaban di usia braket i. 1016 00:45:13,620 --> 00:45:16,610 Yang merupakan usia i'th dalam array. 1017 00:45:16,610 --> 00:45:21,640 Jadi sementara terakhir kali kami memperlakukan kotak-kotak ini sebagai karakter untuk nama Zamyla ini, 1018 00:45:21,640 --> 00:45:22,490 dan lain-lain. 1019 00:45:22,490 --> 00:45:26,530 Sekarang, kotak-kotak ini merupakan 32 bit, atau empat byte 1020 00:45:26,530 --> 00:45:29,510 di mana kita dapat menyimpan int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Semua yang, sekali lagi, adalah tipe data yang sama. 1022 00:45:31,890 --> 00:45:33,890 >> Sekarang aku melakukan sesuatu yang bodoh, seperti berjalannya waktu, hanya 1023 00:45:33,890 --> 00:45:35,510 untuk membenarkan menulis program ini. 1024 00:45:35,510 --> 00:45:40,050 Dan kemudian di sini, saya kembali iterate lebih dari array mengatakan tahun dari sekarang, 1025 00:45:40,050 --> 00:45:43,090 orang nomor satu akan berusia sesuatu tahun. 1026 00:45:43,090 --> 00:45:45,010 Dan untuk mengetahui bahwa math-- Maksudku, ini 1027 00:45:45,010 --> 00:45:49,260 tidak sangat rumit arithmetic-- Saya hanya menambahkan satu dengan usia mereka. 1028 00:45:49,260 --> 00:45:51,240 Hanya untuk menunjukkan, sekali lagi, ini. 1029 00:45:51,240 --> 00:45:57,910 >> Sama seperti saya bisa indeks ke string, s, jadi saya bisa indeks ke array usia, 1030 00:45:57,910 --> 00:45:59,950 seperti itu ada. 1031 00:45:59,950 --> 00:46:03,340 Jadi di mana ini akan membawa kita? 1032 00:46:03,340 --> 00:46:07,070 Jadi kita akan melihat, akhirnya, beberapa hal di masa yang akan datang. 1033 00:46:07,070 --> 00:46:09,510 Satu, selama ini, ketika menulis program Anda sendiri, 1034 00:46:09,510 --> 00:46:11,239 seperti Mario, serakah, kredit. 1035 00:46:11,239 --> 00:46:13,780 Anda telah mengetik nama program dan memukul Enter. 1036 00:46:13,780 --> 00:46:15,610 Dan kemudian mendapatkan masukan pengguna. 1037 00:46:15,610 --> 00:46:18,137 >> Dengan getString, getInt, getLongLong, atau sejenisnya. 1038 00:46:18,137 --> 00:46:20,720 Tapi ternyata C mendukung sesuatu yang disebut baris perintah 1039 00:46:20,720 --> 00:46:25,740 argumen, yang akan membiarkan kita benar-benar mendapatkan kata-kata yang Anda ketik, 1040 00:46:25,740 --> 00:46:28,570 pada prompt berkedip, setelah nama program anda. 1041 00:46:28,570 --> 00:46:31,430 >> Jadi pada hari-hari yang akan datang, Anda bisa ketik sesuatu seperti Caesar, 1042 00:46:31,430 --> 00:46:34,950 atau ./caesar nomor 13, setelahnya. 1043 00:46:34,950 --> 00:46:36,070 Kita akan melihat bagaimana yang bekerja. 1044 00:46:36,070 --> 00:46:37,550 Karena memang, di Masalah mengatur dua, kami tidak 1045 00:46:37,550 --> 00:46:39,383 akan memperkenalkan Anda untuk sedikit sesuatu 1046 00:46:39,383 --> 00:46:42,360 mengingatkan Ralphie ini menantang sebelumnya kartografi. 1047 00:46:42,360 --> 00:46:43,970 Seni berebut informasi. 1048 00:46:43,970 --> 00:46:46,660 Hal ini, pada kenyataannya, sangat mengingatkan kita pada apa Ralphie lakukan. 1049 00:46:46,660 --> 00:46:51,380 >> Ini adalah contoh dari enkripsi algoritma yang disebut ROT13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Yang berarti memutar huruf dalam alfabet 13 tempat. 1051 00:46:54,910 --> 00:46:58,309 Dan jika Anda melakukannya, Anda akan melihat sekarang apa yang, mungkin, sebuah frase akrab. 1052 00:46:58,309 --> 00:47:01,100 Tapi cara kita akan menggunakan ini, pada akhirnya, adalah lebih umum. 1053 00:47:01,100 --> 00:47:04,390 >> Dalam P menetapkan dua, dalam edisi standar, Anda akan menerapkan beberapa cipher, 1054 00:47:04,390 --> 00:47:06,720 satu disebut Caesar, yang disebut Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Keduanya adalah rotasi cipher, bahwa entah bagaimana Anda 1056 00:47:10,090 --> 00:47:11,826 mengubah satu huruf ke huruf yang berbeda. 1057 00:47:11,826 --> 00:47:12,950 Dan Caesar super sederhana. 1058 00:47:12,950 --> 00:47:16,220 Anda menambahkan satu, Anda menambahkan 13, atau beberapa nomor hingga 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere melakukan itu pada per surat basis. 1060 00:47:19,570 --> 00:47:22,140 Jadi Vigenere, karena Anda akan melihat di spec, lebih aman. 1061 00:47:22,140 --> 00:47:24,973 >> Tetapi pada akhir hari apa Anda akan menerapkan dan P menetapkan dua, 1062 00:47:24,973 --> 00:47:29,050 adalah bahwa kunci yang Anda gunakan baik untuk enkripsi dan dekripsi. 1063 00:47:29,050 --> 00:47:32,160 Mengacu pada proses mengubah teks biasa, beberapa pesan asli, 1064 00:47:32,160 --> 00:47:34,490 ke dalam teks nol, yang adalah sesuatu dienkripsi. 1065 00:47:34,490 --> 00:47:36,220 Dan kemudian mendekripsi lagi. 1066 00:47:36,220 --> 00:47:38,119 >> Dalam edisi hacker, Sementara itu, Anda akan 1067 00:47:38,119 --> 00:47:40,660 bertugas dengan sesuatu yang mirip dalam roh, di mana kami akan memberikan 1068 00:47:40,660 --> 00:47:44,610 file, dari Linux khas, atau Mac, atau Unix komputer yang disebut etsy 1069 00:47:44,610 --> 00:47:47,800 password, yang berisi keseluruhan sekelompok username dan password. 1070 00:47:47,800 --> 00:47:50,932 Dan orang-orang memiliki semua password telah dienkripsi, atau hash, 1071 00:47:50,932 --> 00:47:53,140 sehingga untuk berbicara, lebih tepat seperti yang Anda lihat di spec. 1072 00:47:53,140 --> 00:47:57,090 >> Dan edisi hacker akan menantang Anda dengan mengambil masukan seperti ini, 1073 00:47:57,090 --> 00:47:58,800 dan retak password. 1074 00:47:58,800 --> 00:48:02,590 Artinya, mencari tahu apa yang sandi manusia sebenarnya. 1075 00:48:02,590 --> 00:48:05,570 Karena, memang, password umumnya tidak disimpan di jelas, 1076 00:48:05,570 --> 00:48:08,260 dan umumnya password harus sulit menebak. 1077 00:48:08,260 --> 00:48:09,610 Itu tidak sering terjadi. 1078 00:48:09,610 --> 00:48:12,110 >> Dan apa yang saya pikir kita akan lakukan adalah menyimpulkan dengan beberapa menit 1079 00:48:12,110 --> 00:48:15,160 melirik khususnya miskin pilihan password 1080 00:48:15,160 --> 00:48:17,260 dari film Anda mungkin ingat sayang. 1081 00:48:17,260 --> 00:48:18,915 Dan jika tidak, Anda harus menyewa. 1082 00:48:18,915 --> 00:48:20,070 >> [VIDEO PEMUTARAN] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Anda iblis, apa yang terjadi? 1084 00:48:22,320 --> 00:48:24,240 Apa yang Anda lakukan untuk anak saya? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Saya untuk memperkenalkan brilian ahli bedah plastik muda, 1086 00:48:28,010 --> 00:48:30,010 Dokter Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Terbesar hidung pria kerja di seluruh alam semesta dan Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> -Anda Mulia. 1089 00:48:36,140 --> 00:48:36,820 >> Pekerjaan -Nose? 1090 00:48:36,820 --> 00:48:37,700 Saya tidak mengerti. 1091 00:48:37,700 --> 00:48:39,070 Dia sudah memiliki pekerjaan hidung. 1092 00:48:39,070 --> 00:48:40,800 Itu dia manis 16 hadir. 1093 00:48:40,800 --> 00:48:42,590 >> Tidak, itu bukan apa yang Anda pikirkan. 1094 00:48:42,590 --> 00:48:44,490 Ini jauh, jauh lebih buruk. 1095 00:48:44,490 --> 00:48:48,160 Jika Anda tidak memberi saya kombinasi untuk perisai udara, 1096 00:48:48,160 --> 00:48:52,748 Dokter Schlotkin akan memberikan Anda Putri kembali hidung lamanya. 1097 00:48:52,748 --> 00:48:53,748 - [Terengah] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Di mana Anda mendapatkan itu? 1100 00:48:59,652 --> 00:49:00,640 >> Baiklah. 1101 00:49:00,640 --> 00:49:02,506 Aku akan memberitahu, aku akan memberitahu. 1102 00:49:02,506 --> 00:49:03,498 >> Tidak, Ayah, no. 1103 00:49:03,498 --> 00:49:04,490 Anda tidak harus. 1104 00:49:04,490 --> 00:49:06,090 >> -Kau Benar sayangku. 1105 00:49:06,090 --> 00:49:07,390 Aku akan merindukan hidung baru Anda. 1106 00:49:07,390 --> 00:49:10,990 Tapi aku tidak akan memberitahu mereka Kombinasi tidak peduli apa. 1107 00:49:10,990 --> 00:49:12,450 >> -Sangat Baik. 1108 00:49:12,450 --> 00:49:14,830 Dokter Schlotkin, lakukan terburuk Anda. 1109 00:49:14,830 --> 00:49:15,744 >> Kesenangan -My. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> -Tidak! 1112 00:49:20,800 --> 00:49:22,780 Tunggu, tunggu. 1113 00:49:22,780 --> 00:49:24,000 Aku akan memberitahu. 1114 00:49:24,000 --> 00:49:25,830 Aku akan memberitahu. 1115 00:49:25,830 --> 00:49:28,270 >> -Aku Tahu itu akan berhasil. 1116 00:49:28,270 --> 00:49:31,390 Baiklah, berikan kepada saya. 1117 00:49:31,390 --> 00:49:36,220 >> Kombinasi -The adalah salah satu. 1118 00:49:36,220 --> 00:49:36,740 >> -Satu. 1119 00:49:36,740 --> 00:49:37,473 >> -Satu. 1120 00:49:37,473 --> 00:49:37,972 -Dua. 1121 00:49:37,972 --> 00:49:38,471 -Dua. 1122 00:49:38,471 --> 00:49:39,800 -Dua. 1123 00:49:39,800 --> 00:49:40,300 -Tiga. 1124 00:49:40,300 --> 00:49:40,800 -Tiga. 1125 00:49:40,800 --> 00:49:41,800 -Tiga. 1126 00:49:41,800 --> 00:49:42,300 Empat. 1127 00:49:42,300 --> 00:49:42,800 Empat. 1128 00:49:42,800 --> 00:49:44,707 Empat. 1129 00:49:44,707 --> 00:49:45,521 -Lima. 1130 00:49:45,521 --> 00:49:46,430 -Lima. 1131 00:49:46,430 --> 00:49:47,930 -Lima. 1132 00:49:47,930 --> 00:49:53,480 -Jadi Kombinasi adalah satu, dua, tiga, empat, lima. 1133 00:49:53,480 --> 00:49:56,140 Itu kombinasi terbodoh Aku pernah mendengar dalam hidupku. 1134 00:49:56,140 --> 00:49:58,640 Itulah jenis hal yang bodoh akan di koper. 1135 00:49:58,640 --> 00:50:00,000 >> Terima kasih, Yang Mulia. 1136 00:50:00,000 --> 00:50:01,340 >> [REMOTE KLIK] 1137 00:50:01,340 --> 00:50:02,450 >> Apa yang Anda lakukan? 1138 00:50:02,450 --> 00:50:03,800 >> -Aku Dimatikan dinding. 1139 00:50:03,800 --> 00:50:05,010 >> Tidak, Anda tidak, Anda mematikan seluruh film. 1140 00:50:05,010 --> 00:50:06,220 >> Pasti -Aku menekan tombol yang salah. 1141 00:50:06,220 --> 00:50:07,064 >> Nah, mengembalikannya ke! 1142 00:50:07,064 --> 00:50:07,910 Masukan film kembali! 1143 00:50:07,910 --> 00:50:08,300 >> Ya, Pak! 1144 00:50:08,300 --> 00:50:08,799 Ya, Pak. 1145 00:50:08,799 --> 00:50:09,660 -Let Pergi, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Ayo, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Tentu saja Anda tahu saya akan harus menagih Anda untuk ini. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 -Nah? 1150 00:50:17,220 --> 00:50:17,802 Apakah itu bekerja? 1151 00:50:17,802 --> 00:50:18,510 Dimana raja? 1152 00:50:18,510 --> 00:50:20,218 >> -It Bekerja, Pak, kita memiliki kombinasi. 1153 00:50:20,218 --> 00:50:20,740 Bagus. 1154 00:50:20,740 --> 00:50:24,810 Sekarang kita bisa mengambil setiap napas terakhir udara segar dari planet Druidia. 1155 00:50:24,810 --> 00:50:25,890 Apa kombinasi? 1156 00:50:25,890 --> 00:50:28,155 >> -Satu, Dua, tiga, empat, lima. 1157 00:50:28,155 --> 00:50:29,890 >> -Satu, Dua, tiga, empat, lima? 1158 00:50:29,890 --> 00:50:30,390 Ya. 1159 00:50:30,390 --> 00:50:31,110 -Itu Menakjubkan. 1160 00:50:31,110 --> 00:50:34,550 Aku punya sama kombinasi pada bagasi saya. 1161 00:50:34,550 --> 00:50:37,160 Siapkan Spaceball 1 untuk keberangkatan langsung. 1162 00:50:37,160 --> 00:50:38,160 >> Ya, Pak. 1163 00:50:38,160 --> 00:50:40,745 >> -Dan Mengubah kombinasi pada bagasi saya. 1164 00:50:40,745 --> 00:50:41,578 [PINTU PENUTUP SUARA] 1165 00:50:41,578 --> 00:50:42,064 [CLINK PINTU Memukul HELM] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [END VIDEO PUTAR] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. Malan: Itu untuk CS50, kita akan melihat Anda minggu depan. 1169 00:50:46,700 --> 00:50:49,883 Narator: Dan sekarang, Deep Pikiran, berdasarkan Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven Farnham: Coding di C adalah jauh lebih sulit daripada Scratch. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch itu bohong. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Tertawa ucapan] 1175 00:51:01,430 --> 00:51:02,486