1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> SPEAKER 1: Baiklah. 3 00:00:13,650 --> 00:00:14,390 Selamat datang kembali. 4 00:00:14,390 --> 00:00:19,260 Ini adalah Minggu Dua dari CS50, dan kami memiliki sejauh ini telah menggunakan fungsi tetapi 5 00:00:19,260 --> 00:00:20,830 sebagian besar diambil mereka untuk diberikan. 6 00:00:20,830 --> 00:00:23,430 Kami telah menggunakan printf yang memiliki efek samping dari pencetakan 7 00:00:23,430 --> 00:00:24,110 hal di layar. 8 00:00:24,110 --> 00:00:25,790 Kami telah menggunakan get-int, dapatkan mengapung. 9 00:00:25,790 --> 00:00:29,230 >> Tetapi bagaimana jika Anda benar-benar ingin membuat fungsi sendiri, karena beberapa 10 00:00:29,230 --> 00:00:31,740 Anda mungkin sudah mulai lakukan untuk Masalah Set One, meskipun 11 00:00:31,740 --> 00:00:33,140 tidak benar-benar diperlukan? 12 00:00:33,140 --> 00:00:37,150 Nah, mari kita pergi ke depan dan kembali bahwa masalah hanya meminta pengguna untuk 13 00:00:37,150 --> 00:00:40,660 nama dan mencetak sesuatu di layar, tetapi cobalah untuk faktor beberapa 14 00:00:40,660 --> 00:00:44,000 dari kesamaan bahwa kita sudah terlihat dalam kode kami sejauh ini. 15 00:00:44,000 --> 00:00:45,120 Jadi maksud saya berikut ini. 16 00:00:45,120 --> 00:00:47,315 >> Aku akan pergi ke depan dan menciptakan sebuah program baru, sebut saja 17 00:00:47,315 --> 00:00:49,320 itu hello.c seperti biasa. 18 00:00:49,320 --> 00:00:53,730 Aku akan pergi ke depan dan memberi diriku termasuk io.h standar di atas. 19 00:00:53,730 --> 00:00:57,040 Aku akan juga memberi diriku preemptively perpustakaan CS50 sehingga 20 00:00:57,040 --> 00:00:59,080 Saya tidak dimarahi oleh compiler. 21 00:00:59,080 --> 00:01:02,400 Dan sekarang aku akan pergi ke depan dan menyatakan int, utama, batal. 22 00:01:02,400 --> 00:01:09,020 >> Dan kemudian di sini, ini adalah di mana saya ingin untuk mulai outsourcing fungsi untuk 23 00:01:09,020 --> 00:01:12,090 beberapa fungsi lain yang aku sendiri akan menulis tapi itu tidak 24 00:01:12,090 --> 00:01:13,820 saat ini ada. 25 00:01:13,820 --> 00:01:19,210 Misalnya, bahwa saya ingin menulis fungsi yang memungkinkan saya untuk 26 00:01:19,210 --> 00:01:23,830 mencetak halo, koma, dan maka nama beberapa pengguna. 27 00:01:23,830 --> 00:01:29,010 Daripada terus melakukan printf halo,% s, tidak akan lebih baik jika 28 00:01:29,010 --> 00:01:33,380 hanya ada fungsi yang disebut tidak printf tapi nama cetak? 29 00:01:33,380 --> 00:01:36,600 >> Jadi dengan kata lain, saya ingin bisa menulis sebuah program yang tidak sedikit 30 00:01:36,600 --> 00:01:37,710 sesuatu seperti ini. 31 00:01:37,710 --> 00:01:42,070 Pertama, saya akan mengatakan printf Anda nama, sehingga mendorong pengguna untuk 32 00:01:42,070 --> 00:01:46,150 memberi saya namanya, dan kemudian aku akan menggunakan string s akrab bagi 33 00:01:46,150 --> 00:01:47,290 menyatakan string. 34 00:01:47,290 --> 00:01:50,420 Beri aku sebuah variabel bertipe string, menyebutnya s, dan simpan di bahwa 35 00:01:50,420 --> 00:01:52,120 hasil memanggil get tali. 36 00:01:52,120 --> 00:01:56,060 Tapi sekarang dalam beberapa pekan terakhir, saya akan agak perlahan dilakukan halo,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> Dan dengan kata lain, kita pernah melihat ini Contoh beberapa kali, dan itu 39 00:02:02,570 --> 00:02:05,280 Contoh sepele, karena hanya ada satu baris kode sehingga benar-benar tidak 40 00:02:05,280 --> 00:02:06,860 masalah besar untuk terus-menerus mengetikkan lagi. 41 00:02:06,860 --> 00:02:09,990 Tapi anggaplah bahwa baris kode sebenarnya itu menjadi beban, dan 42 00:02:09,990 --> 00:02:12,900 itu bukan satu baris kode tapi itu 10 baris kode beberapa minggu dari sekarang, 43 00:02:12,900 --> 00:02:15,190 dan Anda hanya mendapatkan lelah menyalin dan menyisipkan atau 44 00:02:15,190 --> 00:02:17,180 mengetik ulang kode yang sama. 45 00:02:17,180 --> 00:02:22,100 Bukankah lebih bagus daripada melakukan printf halo,% s dan sebagainya, 46 00:02:22,100 --> 00:02:26,500 tidak akan lebih baik jika hanya ada fungsi yang disebut nama cetak yang 47 00:02:26,500 --> 00:02:27,560 mengambil argumen - 48 00:02:27,560 --> 00:02:29,120 dengan kata lain, dibutuhkan masukan - 49 00:02:29,120 --> 00:02:30,620 dan kemudian koma. 50 00:02:30,620 --> 00:02:33,240 Jadi fungsi itu, tidak akan itu akan baik jika itu ada? 51 00:02:33,240 --> 00:02:36,690 Maka saya tidak akan perlu khawatir tentang printf apa, apa% s dan semua 52 00:02:36,690 --> 00:02:39,400 kompleksitas ini yang tidak semua yang menarik. 53 00:02:39,400 --> 00:02:40,570 Mereka berguna. 54 00:02:40,570 --> 00:02:44,700 >> Jadi nama cetak, sayangnya, tidak menemukan sekitar 40 ditambah tahun yang lalu. 55 00:02:44,700 --> 00:02:45,980 Tidak ada yang berpikir untuk menulis itu. 56 00:02:45,980 --> 00:02:48,300 Tapi itulah keindahan memiliki bahasa pemrograman, seperti di 57 00:02:48,300 --> 00:02:52,930 Scratch Anda dapat menentukan blok kustom, sehingga di C dan sebagian bahasa apapun, bisa Anda 58 00:02:52,930 --> 00:02:57,260 mendefinisikan fungsi Anda sendiri, bisa Anda mendefinisikan fungsi sendiri. 59 00:02:57,260 --> 00:03:01,710 Jadi meskipun kita mendapatkan utama dengan otomatis gratis, kita dapat mendeklarasikan 60 00:03:01,710 --> 00:03:02,730 fungsi kita sendiri. 61 00:03:02,730 --> 00:03:05,670 >> Jadi aku akan membuat beberapa ruang di sini atas, dan aku akan menyatakan saya 62 00:03:05,670 --> 00:03:08,210 fungsi sendiri yang akan terlihat agak aneh pada awalnya tapi kami akan datang 63 00:03:08,210 --> 00:03:09,400 kembali ke ini sebelumnya lama. 64 00:03:09,400 --> 00:03:12,310 Aku akan mengatakan batal, sehingga menunjukkan fungsi ini tidak 65 00:03:12,310 --> 00:03:16,040 sesuatu, memiliki efek samping, tetapi tidak kembali sesuatu kepada saya dalam 66 00:03:16,040 --> 00:03:18,810 cara yang sama yang mendapat int atau mendapatkan string itu sendiri tidak. 67 00:03:18,810 --> 00:03:22,450 Dan aku akan memberikan fungsi ini nama nama cetak, dan aku akan 68 00:03:22,450 --> 00:03:26,470 menetapkan bahwa orang ini akan mengambil string, dan aku akan menyebutnya 69 00:03:26,470 --> 00:03:27,600 string name. 70 00:03:27,600 --> 00:03:32,100 Saya bisa menyebutnya apa pun yang saya inginkan, tapi saya ingin kode saya menjadi mendokumentasikan diri. 71 00:03:32,100 --> 00:03:34,770 Dengan kata lain, jika salah satu dari Anda adalah untuk membuka file ini dan membacanya, Anda bisa 72 00:03:34,770 --> 00:03:39,020 semacam menyimpulkan dari nama yang masukan apa peran yang seharusnya dimainkan. 73 00:03:39,020 --> 00:03:42,270 >> Dan sekarang di bawah itu, aku akan membuka keriting brace dan tertutup keriting brace, 74 00:03:42,270 --> 00:03:47,140 dan jadi perhatikan Saya sudah mengikuti yang sama pola pada baris empat sampai tujuh sebagai 75 00:03:47,140 --> 00:03:51,622 Saya sudah mengikuti selama seminggu baik ditambah sekarang antara, misalnya, garis sembilan dan 76 00:03:51,622 --> 00:03:53,400 14 yang membentuk utama. 77 00:03:53,400 --> 00:03:56,160 Dengan kata lain, cetak nama adalah fungsi lain. 78 00:03:56,160 --> 00:03:58,990 Sekarang, compiler tidak akan tahu untuk memanggil hal ini secara otomatis 79 00:03:58,990 --> 00:04:02,670 karena saya benar-benar hanya menciptakannya, tetapi akan tahu masih memanggil utama 80 00:04:02,670 --> 00:04:08,710 secara otomatis, dan kemudian tentu saja dalam baris 13, saya memanggil fungsi saya sendiri. 81 00:04:08,710 --> 00:04:12,805 Dan karena saya telah menyatakan bahwa fungsi up on line empat sebelum main, 82 00:04:12,805 --> 00:04:16,579 ini akan mengajarkan compiler apa kutipan, tanda kutip, "nama cetak" 83 00:04:16,579 --> 00:04:18,140 berarti dan apa yang harus dilakukan. 84 00:04:18,140 --> 00:04:22,700 Jadi aku semacam memberikan kebiasaan baru blok dalam konteks, katakanlah, Scratch. 85 00:04:22,700 --> 00:04:27,240 >> Jadi di sini, saya dapat menempatkan bahwa sangat umum atau pola berulang kode saya tetap 86 00:04:27,240 --> 00:04:32,300 menulis di kelas, printf % S halo,% s / n ", - 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 apa yang saya ingin menempatkan di sini? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Jadi saya ingin menuliskan nama dalam konteks ini. 91 00:04:41,420 --> 00:04:43,440 Jadi perhatikan sedikit dikotomi di sini. 92 00:04:43,440 --> 00:04:47,680 Karena saya menyatakan fungsi sendiri dan saya agak sewenang-wenang disebut 93 00:04:47,680 --> 00:04:50,880 itu mencetak nama, dan karena aku sudah ditentukan dalam tanda kurung bahwa ini 94 00:04:50,880 --> 00:04:55,035 Fungsi mengambil satu argumen, jenis yang merupakan string - jadi kata 95 00:04:55,035 --> 00:05:00,010 atau frase atau sesuatu seperti itu - dan Saya menelepon bahwa nama argumen, bahwa 96 00:05:00,010 --> 00:05:04,770 berarti satu-satunya variabel yang ada di ruang lingkup, sehingga untuk berbicara, adalah nama. 97 00:05:04,770 --> 00:05:07,780 >> S hanya ada antara apa dua kurung kurawal, tentu saja? 98 00:05:07,780 --> 00:05:12,990 Yah benar, seperti baris 10 melalui 14, jadi hanya seperti pada hari Senin tidak dapat menggunakan 99 00:05:12,990 --> 00:05:17,650 S, tapi apa yang bisa saya lakukan adalah lulus S dalam nama cetak. 100 00:05:17,650 --> 00:05:21,030 Cetak nama Kebetulan untuk memberikan alias, sinonim, nama panggilan, 101 00:05:21,030 --> 00:05:24,400 menyebutnya nama, dan sekarang menggunakannya di baris ini. 102 00:05:24,400 --> 00:05:26,840 Jadi sekarang mari saya simpan ini, zoom out. 103 00:05:26,840 --> 00:05:31,250 >> Biarkan aku pergi ke depan dan membuat halo. 104 00:05:31,250 --> 00:05:32,400 Terlihat bagus. 105 00:05:32,400 --> 00:05:36,110 Tidak dimuntahkan kesalahan. . / Hello Enter. 106 00:05:36,110 --> 00:05:37,020 Siapa nama saya? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 Dan halo Daud. 109 00:05:39,270 --> 00:05:41,820 Jadi tidak semua yang menarik, tapi hanya berpikir sekarang. 110 00:05:41,820 --> 00:05:44,310 Sekarang Anda memiliki bahan yang sama seperti yang kita lakukan di Scratch untuk 111 00:05:44,310 --> 00:05:45,420 membuat fungsi kita sendiri. 112 00:05:45,420 --> 00:05:46,770 >> Tapi ada sedikit gotcha. 113 00:05:46,770 --> 00:05:50,620 Misalkan bahwa aku tidak benar-benar berpikir ini melalui dan saya benar-benar tanpa 114 00:05:50,620 --> 00:05:54,250 benar-benar berpikir tentang hal itu menulis yang berfungsi di sini. 115 00:05:54,250 --> 00:05:55,420 Terasa sangat masuk akal. 116 00:05:55,420 --> 00:05:58,440 Dalam Scratch tidak ada pengertian lokasi di script Anda. 117 00:05:58,440 --> 00:06:00,670 Anda bisa menempatkan satu di sini, satu di sini, satu di sini, dan mungkin mulai 118 00:06:00,670 --> 00:06:03,310 terlihat sedikit berantakan jika Anda tidak berbaring dengan rapi, tapi tidak 119 00:06:03,310 --> 00:06:05,910 peduli di mana secara fisik script berada di layar. 120 00:06:05,910 --> 00:06:09,660 Sayangnya di C - dan ini tidak seperti bahasa seperti Java dan Python 121 00:06:09,660 --> 00:06:13,600 dan lain-lain bahwa Anda mungkin akrab dengan - sayangnya dalam C, agar tidak 122 00:06:13,600 --> 00:06:15,830 penting karena menonton apa akan terjadi sekarang. 123 00:06:15,830 --> 00:06:19,010 >> Fungsi default yang akan untuk mengeksekusi, tentu saja, utama. 124 00:06:19,010 --> 00:06:22,290 Main akan memanggil nama cetak pada baris delapan, tapi sayangnya, 125 00:06:22,290 --> 00:06:26,660 compiler bahkan tidak akan tahu bahwa nama cetak ada sampai mencapai garis 11, 126 00:06:26,660 --> 00:06:28,520 yang sayangnya akan terlambat. 127 00:06:28,520 --> 00:06:30,660 Jadi mari kita lakukan membuat halo. 128 00:06:30,660 --> 00:06:32,950 Dan sekarang sialan, dua kesalahan yang dihasilkan. 129 00:06:32,950 --> 00:06:36,050 Jadi sekarang biarkan aku gulir ke atas untuk sangat pertama, karena kami harus selalu melakukan, dan 130 00:06:36,050 --> 00:06:39,560 melihat bahwa itu berteriak padaku, "Deklarasi implisit fungsi 131 00:06:39,560 --> 00:06:40,540 cetak nama. " 132 00:06:40,540 --> 00:06:43,860 >> Jadi kita telah melihat pesan ini sebelumnya, deklarasi implisit fungsi. 133 00:06:43,860 --> 00:06:48,080 Ketika kita telah melihat bahwa jenis kesalahan? 134 00:06:48,080 --> 00:06:49,180 Ketika saya tidak termasuk perpustakaan. 135 00:06:49,180 --> 00:06:53,470 Jika saya lupa cs50.h dan saya akan mendapatkan berteriak untuk mendapatkan tali atau mendapatkan int. 136 00:06:53,470 --> 00:06:56,880 Tapi dalam kasus ini, fungsi ini cetak namanya tidak di perpustakaan, kan? 137 00:06:56,880 --> 00:07:00,230 Ini benar-benar di file ini, sehingga apa benar-benar masalah? 138 00:07:00,230 --> 00:07:04,660 >> Nah sayangnya dalam C, itu akan membawa Anda sehingga sangat harfiah bahwa jika Anda 139 00:07:04,660 --> 00:07:08,640 ingin fungsi yang disebut nama cetak untuk ada, Anda juga harus menerapkan 140 00:07:08,640 --> 00:07:11,940 yang berfungsi pada bagian paling atas Anda kode agar dapat diakses untuk menurunkan 141 00:07:11,940 --> 00:07:15,070 fungsi, tapi terus terang, yang menjadi ceroboh sangat cepat. 142 00:07:15,070 --> 00:07:18,160 Secara pribadi, saya suka menempatkan utama pertama karena maka itu sangat jelas apa ini 143 00:07:18,160 --> 00:07:19,890 Program tidak pada pandangan pertama. 144 00:07:19,890 --> 00:07:23,290 Dan ditambah, Anda bisa masuk ke sudut aneh kasus di mana jika x ingin menelepon 145 00:07:23,290 --> 00:07:27,530 y tapi y sebut x, Anda hanya secara fisik tidak bisa benar-benar menempatkan satu 146 00:07:27,530 --> 00:07:28,540 di atas yang lain. 147 00:07:28,540 --> 00:07:31,230 >> Tapi ternyata di C, kita dapat memecahkan ini sangat sederhana. 148 00:07:31,230 --> 00:07:34,010 Aku akan menaruh sedikit ruang di sini, dan aku hanya akan 149 00:07:34,010 --> 00:07:38,170 Terlebih Dahulu, meskipun agak berlebihan, akan mengajarkan 150 00:07:38,170 --> 00:07:42,320 compiler bahwa ada fungsi disebut nama cetak, dibutuhkan string, 151 00:07:42,320 --> 00:07:46,330 dan aku akan menelepon itu nama titik koma. 152 00:07:46,330 --> 00:07:50,220 >> Jadi sekarang ini sejalan empat, yang kami belum pernah melihat sebelumnya, adalah sebuah deklarasi 153 00:07:50,220 --> 00:07:53,940 dari nama fungsi print, tapi itu hanya sebuah janji bahwa fungsi ini akan 154 00:07:53,940 --> 00:07:56,620 akhirnya didefinisikan, akhirnya diimplementasikan. 155 00:07:56,620 --> 00:08:00,180 Ini sekarang saya bisa meninggalkan sendirian karena sekarang ini adalah definisi, 156 00:08:00,180 --> 00:08:04,090 pelaksanaan, semacam mil terakhir pelaksanaan ini 157 00:08:04,090 --> 00:08:05,130 fungsi tertentu. 158 00:08:05,130 --> 00:08:08,450 Jadi terus terang itu bodoh, itu menjengkelkan, tapi ini adalah cara C adalah, dan itu 159 00:08:08,450 --> 00:08:12,050 karena membawa Anda sangat harfiah dan, sebagai komputer terus terang harus, 160 00:08:12,050 --> 00:08:16,020 hanya tidak persis apa yang Anda kirim ke lakukan, dan sehingga pemesanan sangat penting. 161 00:08:16,020 --> 00:08:18,940 >> Jadi ingatlah bahwa dalam pikiran dan lagi, mulai melihat terulangnya pola. 162 00:08:18,940 --> 00:08:21,850 Kemungkinan besar Anda akan, jika Anda belum sudah, mulai menemukan pesan 163 00:08:21,850 --> 00:08:24,700 seperti ini yang sekilas tampak benar-benar samar, tetapi jika Anda mulai 164 00:08:24,700 --> 00:08:29,000 untuk mencari kata-kata kunci seperti "Deklarasi implisit," menyebutkan dari 165 00:08:29,000 --> 00:08:32,380 fungsi dalam hal ini - dan terus terang, Anda kadang-kadang bahkan mendapatkan sedikit hijau 166 00:08:32,380 --> 00:08:35,010 simbol wortel yang memberitahu Anda di mana masalah mungkin - 167 00:08:35,010 --> 00:08:40,980 Anda dapat mulai bekerja dengan cara Anda melalui belum terlihat pesan kesalahan. 168 00:08:40,980 --> 00:08:45,860 Setiap pertanyaan untuk menulisnya fungsi sendiri dengan cara ini? 169 00:08:45,860 --> 00:08:47,540 >> Mari kita lakukan sesuatu itu adalah sedikit lebih menarik. 170 00:08:47,540 --> 00:08:51,760 Daripada hanya melakukan sesuatu yang memiliki efek samping dari pencetakan, biarkan aku pergi 171 00:08:51,760 --> 00:08:55,340 depan dan menyimpan file baru, dan kami akan sebut positive.c ini, meskipun itu 172 00:08:55,340 --> 00:08:57,600 akan menjadi sedikit berbeda dibandingkan terakhir kali. 173 00:08:57,600 --> 00:09:01,910 Dan kali ini, saya ingin kembali menerapkan waktu lalu misalnya positive.C, yang 174 00:09:01,910 --> 00:09:04,430 adalah memaksa pengguna untuk memberikan saya bilangan bulat positif. 175 00:09:04,430 --> 00:09:07,280 Tapi aku harus menggunakan mendapatkan int terakhir kali. 176 00:09:07,280 --> 00:09:10,780 Bukankah menyenangkan jika ada fungsi disebut mendapatkan int positif 177 00:09:10,780 --> 00:09:13,610 bahwa aku hanya bisa outsourcing ini bagian dari fungsi ke? 178 00:09:13,610 --> 00:09:16,480 Jadi perbedaan di sini adalah kita akan menerapkan mendapatkan int positif, tapi tidak seperti 179 00:09:16,480 --> 00:09:20,330 Nama cetak yang memiliki efek samping - itu tidak kembali sesuatu bagi saya seperti 180 00:09:20,330 --> 00:09:21,710 nomor atau string - 181 00:09:21,710 --> 00:09:25,510 mendapatkan int positif, tentu saja, akan kembali, mudah-mudahan, int positif. 182 00:09:25,510 --> 00:09:26,170 >> Jadi mari kita lakukan ini. 183 00:09:26,170 --> 00:09:30,840 Sertakan cs50.h, Termasuk standar io.h. 184 00:09:30,840 --> 00:09:33,520 Int void main. 185 00:09:33,520 --> 00:09:42,160 Dan sekarang di sini, aku akan pergi ke depan dan katakanlah int, sebut saja n, sama 186 00:09:42,160 --> 00:09:44,270 mendapatkan int positif. 187 00:09:44,270 --> 00:09:49,080 Dan seperti mendapatkan int sudah ada karena staf menulis itu, aku akan 188 00:09:49,080 --> 00:09:53,950 untuk menganggap untuk saat itu mendapatkan int positif ada, dan sekarang aku akan 189 00:09:53,950 --> 00:09:57,730 untuk terus maju dan mengatakan printf, terima kasih untuk% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> Jadi sekarang jika saya mengkompilasi program ini, apa yang akan terjadi di terminal saya 192 00:10:07,770 --> 00:10:09,075 jendela di bagian bawah layar? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Aku akan mungkin mendapatkan bahwa kesalahan yang sama seperti sebelumnya. 195 00:10:13,900 --> 00:10:14,570 Jadi mari kita coba ini. 196 00:10:14,570 --> 00:10:16,450 Membuat positif. 197 00:10:16,450 --> 00:10:19,900 Dan lagi, deklarasi implisit fungsi, dapatkan int positif. 198 00:10:19,900 --> 00:10:21,970 Jadi kita bisa menyelesaikan ini dalam beberapa cara. 199 00:10:21,970 --> 00:10:27,310 Aku akan tetap sederhana dan hanya menempatkan deklarasi saya sampai di sini dan mendapatkan 200 00:10:27,310 --> 00:10:28,120 int positif. 201 00:10:28,120 --> 00:10:29,720 Aku butuh yang disebut tanda tangan. 202 00:10:29,720 --> 00:10:32,410 Tanda tangan hanya mengacu dengan estetika 203 00:10:32,410 --> 00:10:34,090 baris pertama dari program ini. 204 00:10:34,090 --> 00:10:37,420 Jadi apa yang harus mendapatkan positif int kembali? 205 00:10:37,420 --> 00:10:37,970 >> Jadi int. 206 00:10:37,970 --> 00:10:41,540 Maksudku idealnya, itu akan kembali sesuatu seperti int positif, tapi itu 207 00:10:41,540 --> 00:10:42,160 tidak ada. 208 00:10:42,160 --> 00:10:45,280 Kami sudah tidak melihat bahwa di antara data kami jenis, jadi kita harus berurusan dengan 209 00:10:45,280 --> 00:10:47,170 Fakta bahwa kita memiliki sangat sedikit tipe data untuk bekerja dengan. 210 00:10:47,170 --> 00:10:50,360 Tapi kita bisa mengembalikan int dan hanya percaya bahwa itu akan positif. 211 00:10:50,360 --> 00:10:52,690 Ini akan dipanggil mendapatkan int positif. 212 00:10:52,690 --> 00:10:55,122 >> Dan sekarang bagaimana argumen? 213 00:10:55,122 --> 00:10:56,440 Apakah mengambil masukan apapun? 214 00:10:56,440 --> 00:10:58,280 Apakah perlu masukan apapun? 215 00:10:58,280 --> 00:11:00,900 Jadi tidak perlu tahu di muka apapun. 216 00:11:00,900 --> 00:11:03,220 Dapatkan string tidak, dapatkan int tidak. 217 00:11:03,220 --> 00:11:06,430 Printf tidak - itu harus memiliki beberapa masukan berlalu ke dalamnya - dan nama cetak 218 00:11:06,430 --> 00:11:09,020 diperlukan beberapa masukan, tapi sampai int positif tidak. 219 00:11:09,020 --> 00:11:11,530 Jadi aku akan secara eksplisit memberitahu kekosongan compiler. 220 00:11:11,530 --> 00:11:13,470 Void adalah tidak adanya hal lain. 221 00:11:13,470 --> 00:11:17,990 Jadi batal berarti tidak ada yang masuk ke dalam dari mereka kurung, koma. 222 00:11:17,990 --> 00:11:20,840 >> Dan sekarang di bawah file saya - dan lagi, aku hanya menjadi semacam anal 223 00:11:20,840 --> 00:11:23,640 di sini menempatkan utama di bagian atas, yang adalah praktik yang baik karena dengan cara ini, 224 00:11:23,640 --> 00:11:26,220 kapan saja Anda atau orang lain membuka file Anda, 225 00:11:26,220 --> 00:11:27,400 fungsi adalah di sana. 226 00:11:27,400 --> 00:11:29,660 Anda dapat menyelam di dari satu persegi. 227 00:11:29,660 --> 00:11:34,190 Jadi sekarang aku akan menduplikasi ini, mendapatkan batal int positif, tapi aku tidak 228 00:11:34,190 --> 00:11:35,430 akan memukul titik koma sekarang. 229 00:11:35,430 --> 00:11:38,280 Aku akan membuka kurung kurawal, dan sekarang aku perlu meminjam 230 00:11:38,280 --> 00:11:39,700 beberapa ide dari Senin. 231 00:11:39,700 --> 00:11:44,450 >> Jadi seperti yang Anda ingat, kita melakukan sesuatu seperti melakukan hal berikut saat 232 00:11:44,450 --> 00:11:45,830 sesuatu yang benar. 233 00:11:45,830 --> 00:11:46,630 Dan apa yang saya lakukan? 234 00:11:46,630 --> 00:11:51,540 Aku melakukan sesuatu seperti memberikan saya bilangan bulat positif, 235 00:11:51,540 --> 00:11:52,430 sedikit dari prompt. 236 00:11:52,430 --> 00:11:53,540 Saya bisa menggunakan kata-kata yang saya inginkan. 237 00:11:53,540 --> 00:11:54,960 Dan kemudian saya menggunakan apa? 238 00:11:54,960 --> 00:11:59,530 Int n sama mendapatkan int, tanpa argumen untuk itu. 239 00:11:59,530 --> 00:12:00,550 >> Dan melihat perbedaan. 240 00:12:00,550 --> 00:12:04,680 Bila Anda memanggil fungsi, bila Anda menggunakan fungsi, Anda tidak dimasukkan ke dalam kekosongan. 241 00:12:04,680 --> 00:12:08,570 Anda hanya melakukannya ketika mendeklarasikan fungsi, mengajar compiler apa 242 00:12:08,570 --> 00:12:09,780 itu harus berharap. 243 00:12:09,780 --> 00:12:11,650 Jadi Anda tidak perlu menempatkan membatalkan sana sendiri. 244 00:12:11,650 --> 00:12:12,940 >> Dan sekarang apa kondisi saya? 245 00:12:12,940 --> 00:12:19,670 Nah, n tidak sama dengan positif, tapi itu hanya pseudo-code. 246 00:12:19,670 --> 00:12:22,530 Jadi bagaimana cara mengungkapkan hal ini lebih bersih? 247 00:12:22,530 --> 00:12:24,090 Jadi kurang dari atau sama dengan nol. 248 00:12:24,090 --> 00:12:26,250 Jadi sekali lagi, melihat Anda dapat melakukan kurang dari atau sama dengan. 249 00:12:26,250 --> 00:12:28,100 Meskipun itu dua terpisah simbol, Anda dapat melakukannya pada 250 00:12:28,100 --> 00:12:29,350 keyboard Anda seperti itu. 251 00:12:29,350 --> 00:12:33,950 >> Tapi masih ada bug yang Aku kacau terakhir kali juga. 252 00:12:33,950 --> 00:12:36,950 Saya harus menyatakan - 253 00:12:36,950 --> 00:12:37,460 persis. 254 00:12:37,460 --> 00:12:39,640 Saya harus menyatakan n luar loop. 255 00:12:39,640 --> 00:12:44,180 Jadi saya harus menempatkan n di sini, dan saya tidak ingin kembali mendeklarasikan di sini 256 00:12:44,180 --> 00:12:46,480 supaya saya mendapatkan variabel baru. 257 00:12:46,480 --> 00:12:48,860 Saya hanya ingin memberikan nilai di sini. 258 00:12:48,860 --> 00:12:54,320 >> Dan sekarang aku tidak cukup dilakukan di sini. 259 00:12:54,320 --> 00:12:57,290 Biar terburu-buru dan berpura-pura aku sudah selesai. 260 00:12:57,290 --> 00:13:01,220 Membuat positif, dan sekarang ada kesalahan baru. 261 00:13:01,220 --> 00:13:04,550 Pengendalian mencapai akhir fungsi non-batal. 262 00:13:04,550 --> 00:13:07,760 Jadi pesan kesalahan baru, tetapi jika Anda jenis menggoda selain dari masing-masing kata-kata, 263 00:13:07,760 --> 00:13:09,620 mungkin mengisyaratkan apa yang salah. 264 00:13:09,620 --> 00:13:11,240 >> Kontrol. 265 00:13:11,240 --> 00:13:14,250 Kontrol hanya berarti untuk pesanan operasi dalam sebuah program. 266 00:13:14,250 --> 00:13:16,510 Komputer yang memegang kendali dan sesuatu yang tidak beres. 267 00:13:16,510 --> 00:13:18,510 Jadi mencapai akhir fungsi non-batal. 268 00:13:18,510 --> 00:13:21,760 Fungsi apa itu rupanya maksud? 269 00:13:21,760 --> 00:13:24,790 Apa fungsi non-batal? 270 00:13:24,790 --> 00:13:27,400 Jadi bisa int positif, dan sedikit membingungkan dalam sumur itu, 271 00:13:27,400 --> 00:13:29,010 itu semacam kekosongan. 272 00:13:29,010 --> 00:13:33,070 Memiliki spesifikasi batal untuk perusahaan argumen, tapi outputnya akan 273 00:13:33,070 --> 00:13:34,540 menjadi tipe n. 274 00:13:34,540 --> 00:13:37,260 Jadi kata di sebelah kiri adalah disebut tipe kembali. 275 00:13:37,260 --> 00:13:40,320 Kata di dalam sini adalah nol atau lebih argumen 276 00:13:40,320 --> 00:13:41,970 bahwa fungsi memakan waktu. 277 00:13:41,970 --> 00:13:44,060 >> Jadi apa yang harus saya lakukan? 278 00:13:44,060 --> 00:13:47,650 Pada titik ini dalam kode saya, line 21 di mana prompt berkedip sekarang adalah, saya 279 00:13:47,650 --> 00:13:51,430 memiliki int positif di dalam dari variabel yang disebut n. 280 00:13:51,430 --> 00:13:55,200 Bagaimana cara mengembalikannya ke main? 281 00:13:55,200 --> 00:13:55,960 Secara harfiah. 282 00:13:55,960 --> 00:13:59,320 Kembali n titik koma. 283 00:13:59,320 --> 00:14:04,090 >> Jadi seperti Colton kembali sepotong kertas dengan jawaban saya dengan menjatuhkan 284 00:14:04,090 --> 00:14:07,020 potongan kertas dalam hitam kecil kotak di atas meja, untuk melakukan itu dalam 285 00:14:07,020 --> 00:14:10,100 kode, Anda benar-benar hanya menulis, kembali n, dan itu seolah-olah Colton yang 286 00:14:10,100 --> 00:14:12,140 menyodorkan sesuatu kembali fisik. 287 00:14:12,140 --> 00:14:15,870 Dalam hal ini, apa yang terjadi adalah mendapatkan int positif akan menyerahkan kembali 288 00:14:15,870 --> 00:14:19,220 apa mungkin positif integer untuk siapa? 289 00:14:19,220 --> 00:14:21,380 Mana nilai yang berakhir? 290 00:14:21,380 --> 00:14:29,080 Itu berakhir dalam variabel ini, n, dan maka kita lanjutkan dengan garis sembilan. 291 00:14:29,080 --> 00:14:31,920 >> Jadi dengan kata lain, dalam rangka operasi, program ini dimulai 292 00:14:31,920 --> 00:14:34,430 melaksanakan, dan kompilator menyadari, oh, Anda ingin perpustakaan? 293 00:14:34,430 --> 00:14:36,310 Biarkan aku pergi ambil apa pun yang ada di dalamnya itu. 294 00:14:36,310 --> 00:14:37,750 Oh, Anda ingin perpustakaan IO standar? 295 00:14:37,750 --> 00:14:39,660 Biarkan aku pergi ambil apa pun yang ada di dalamnya itu. 296 00:14:39,660 --> 00:14:44,510 Apa compiler berkata kepada dirinya sendiri ketika hits line empat? 297 00:14:44,510 --> 00:14:47,980 Oh, Anda berjanji untuk melaksanakan fungsi yang disebut mendapatkan positif, namun 298 00:14:47,980 --> 00:14:50,820 kita akan kembali nanti, sesuatu sepanjang garis itu. 299 00:14:50,820 --> 00:14:53,450 >> Void main Int hanya berarti inilah keberanian dari program saya. 300 00:14:53,450 --> 00:14:54,990 Baris tujuh hanya penjepit keriting. 301 00:14:54,990 --> 00:14:59,540 Baris delapan mengatakan di sebelah kiri, berikan saya 32 bit untuk integer, sebut saja n. 302 00:14:59,540 --> 00:15:02,160 Di sisi kanan, itu mengatakan mendapatkan int positif. 303 00:15:02,160 --> 00:15:07,120 Sekarang mari kita jeda cerita karena sekarang Saya tidak terus bergerak kursor saya turun. 304 00:15:07,120 --> 00:15:11,720 Kursor saya sekarang turun di sini karena sekarang mendapatkan int positif mengeksekusi. 305 00:15:11,720 --> 00:15:13,100 Int n dinyatakan. 306 00:15:13,100 --> 00:15:14,040 Lakukan hal berikut. 307 00:15:14,040 --> 00:15:16,090 Printf memberi saya bilangan bulat positif. 308 00:15:16,090 --> 00:15:19,740 >> Dapatkan int dari pengguna, menyimpannya dalam n, dan mungkin melakukan ini lagi dan lagi. 309 00:15:19,740 --> 00:15:23,010 Loop ini berarti bahwa kode ini mungkin mengeksekusi atas dan ke bawah seperti ini lagi 310 00:15:23,010 --> 00:15:25,810 dan lagi, tapi ketika pengguna akhirnya bekerja sama dan memberi saya positif 311 00:15:25,810 --> 00:15:31,750 int, aku memukul line 21, di mana titik nomor diserahkan kembali, dan mana yang 312 00:15:31,750 --> 00:15:34,280 Aku harus menyorot sekarang? 313 00:15:34,280 --> 00:15:35,070 Sembilan. 314 00:15:35,070 --> 00:15:39,010 Control, sehingga untuk berbicara, kembali untuk berbaris sembilan. 315 00:15:39,010 --> 00:15:40,650 Itulah garis yang kini berkuasa. 316 00:15:40,650 --> 00:15:43,250 >> Jadi itulah apa yang telah terjadi di kali ini di bawah tenda, tetapi 317 00:15:43,250 --> 00:15:46,480 ketika kita telah menggunakan fungsi seperti printf atau bahkan mendapatkan string yang orang lain 318 00:15:46,480 --> 00:15:50,600 menulis untuk Anda, kontrol diserahkan baris kode pergi ke orang lain 319 00:15:50,600 --> 00:15:51,290 oleh baris demi baris. 320 00:15:51,290 --> 00:15:53,770 Hanya saja kita tidak bisa melihatnya dan kami tidak bisa benar-benar menggambarkan dalam hal ini 321 00:15:53,770 --> 00:15:57,620 Program karena dalam beberapa lainnya file di hard drive 322 00:15:57,620 --> 00:16:00,000 tanpa sepengetahuan kami. 323 00:16:00,000 --> 00:16:02,100 Jadi mari kita benar-benar mengkompilasi dan menjalankan sekarang. 324 00:16:02,100 --> 00:16:03,890 >> Membuat positif. 325 00:16:03,890 --> 00:16:05,260 Kompilasi, itu kemajuan. 326 00:16:05,260 --> 00:16:06,650 . / Positif. 327 00:16:06,650 --> 00:16:08,020 Beri aku bilangan bulat positif. 328 00:16:08,020 --> 00:16:08,800 Mari kita sulit. 329 00:16:08,800 --> 00:16:10,430 Negatif 1. 330 00:16:10,430 --> 00:16:11,360 Nol. 331 00:16:11,360 --> 00:16:13,370 Mari kita berikan 50. 332 00:16:13,370 --> 00:16:18,100 Terima kasih untuk 50, dan sehingga kontrol kini telah kembali. 333 00:16:18,100 --> 00:16:21,750 Semua pertanyaan, kemudian, pada itu? 334 00:16:21,750 --> 00:16:23,180 Ya? 335 00:16:23,180 --> 00:16:25,630 >> [Tak terdengar]. 336 00:16:25,630 --> 00:16:26,130 >> Katakanlah lagi. 337 00:16:26,130 --> 00:16:27,860 Oh, pertanyaan yang bagus. 338 00:16:27,860 --> 00:16:31,100 Jadi Anda mungkin melihat paralel di sini bahwa Aku agak memotong sudut pada. 339 00:16:31,100 --> 00:16:35,420 Sejalan 12, saya katakan, dapatkan int positif mengembalikan sebuah int, tapi itu sama 340 00:16:35,420 --> 00:16:39,660 logika, sekarang berdiri untuk alasan bahwa dalam jalur enam, aku mengatakan bahwa pengembalian utama 341 00:16:39,660 --> 00:16:44,040 int, tapi apa yang kita tidak pernah telah di salah satu program kami? 342 00:16:44,040 --> 00:16:46,470 Kami tidak pernah memiliki penyebutan kata ini kembali kunci. 343 00:16:46,470 --> 00:16:49,970 >> Jadi ternyata bahwa dalam C, setidaknya versi itu yang kita gunakan 344 00:16:49,970 --> 00:16:55,750 dibuat pada tahun 1999, secara teknis, ini adalah terjadi untuk Anda secara otomatis. 345 00:16:55,750 --> 00:16:59,300 Setiap kali Anda menerapkan program dan Anda melaksanakan fungsi yang disebut utama, 346 00:16:59,300 --> 00:17:04,230 fungsi yang akan kembali nol oleh default, jika Anda tidak mengatakan sebaliknya, 347 00:17:04,230 --> 00:17:05,849 dan nol hanya konvensi. 348 00:17:05,849 --> 00:17:09,430 Dunia kembali nol sehingga menunjukkan bahwa semuanya baik-baik, 349 00:17:09,430 --> 00:17:13,040 efektif meninggalkan kami dengan empat miliar hal yang mungkin yang bisa 350 00:17:13,040 --> 00:17:17,530 salah sehingga jika kita kembali satu, yang mungkin menandakan kode yang berarti ini 351 00:17:17,530 --> 00:17:18,310 hal yang tidak beres. 352 00:17:18,310 --> 00:17:20,589 Kita bisa kembali dua, yang berarti Hal ini lain beres. 353 00:17:20,589 --> 00:17:23,440 Kita bisa kembali empat miliar, yang berarti hal ini lain beres. 354 00:17:23,440 --> 00:17:27,170 >> Dan jika Anda sekarang berpikir tentang Anda sendiri PC atau Mac, Anda mungkin ingat bahwa 355 00:17:27,170 --> 00:17:29,610 kadang-kadang Anda mendapatkan pesan kesalahan yang rumit dari perangkat lunak yang Anda 356 00:17:29,610 --> 00:17:32,650 menggunakan, dan kadang-kadang memiliki manusia deskripsi ramah, tapi ada 357 00:17:32,650 --> 00:17:35,265 seringkali berupa kode atau nomor di layar? 358 00:17:35,265 --> 00:17:37,800 Jika ini tidak datang ke pikiran, hanya mengawasi keluar untuk itu. 359 00:17:37,800 --> 00:17:40,790 Itu biasanya apa ini Kode mengacu. 360 00:17:40,790 --> 00:17:44,200 Mereka termasuk dalam Microsoft Word dan program lain sehingga jika Anda mengajukan 361 00:17:44,200 --> 00:17:48,850 laporan bug dengan perusahaan, Anda dapat memberitahu mereka, oh, saya punya kesalahan nomor 45. 362 00:17:48,850 --> 00:17:51,750 Dan beberapa programmer kembali di perusahaan dapat melihat bahwa di nya 363 00:17:51,750 --> 00:17:54,940 kode dan berkata, oh, itu karena aku membuat bug ini dan itulah sebabnya pengguna 364 00:17:54,940 --> 00:17:56,240 mendapat pesan ini. 365 00:17:56,240 --> 00:17:59,490 >> Tapi terus terang, itu hanya sedikit mengganggu dan sedikit membosankan untuk 366 00:17:59,490 --> 00:18:02,130 menyimpulkan bahwa, setidaknya pada kami beberapa program pertama, jadi kami sudah 367 00:18:02,130 --> 00:18:02,970 telah menghilangkan itu. 368 00:18:02,970 --> 00:18:07,450 Tapi selama ini setiap satu dari Anda fungsi utama telah diam-diam punya ini 369 00:18:07,450 --> 00:18:11,600 baris otomatis ditambahkan untuk Anda oleh compiler, hanya dengan konvensi untuk 370 00:18:11,600 --> 00:18:13,172 menghemat waktu. 371 00:18:13,172 --> 00:18:14,620 >> [Tak terdengar]. 372 00:18:14,620 --> 00:18:16,250 >> Anda tidak perlu memasukkannya dalam utama. 373 00:18:16,250 --> 00:18:16,700 Itu baik-baik saja. 374 00:18:16,700 --> 00:18:20,260 Anda perlu untuk memasukkannya jika Anda menerapkan fungsi seperti ini. 375 00:18:20,260 --> 00:18:22,850 Jika tidak datar fungsi keluar tidak akan bekerja. 376 00:18:22,850 --> 00:18:24,480 Tapi dalam utama, itu tidak perlu. 377 00:18:24,480 --> 00:18:28,450 Dalam satu atau dua minggu, kami akan mulai mendapatkan menjadi kebiasaan bahwa setelah kita ingin memulai 378 00:18:28,450 --> 00:18:29,690 menandakan kesalahan. 379 00:18:29,690 --> 00:18:32,550 Pertanyaan yang bagus. 380 00:18:32,550 --> 00:18:36,880 >> Istirahat lisan begitu cepat untuk menyebutkan bahwa Jumat ini, kita tidak akan makan siang 381 00:18:36,880 --> 00:18:39,980 per se, tapi kami akan makan malam dengan beberapa mahasiswa dan staf. 382 00:18:39,980 --> 00:18:42,940 Jika Anda ingin bergabung dengan kami, merasa bebas untuk pergi ke cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 06:00 Jumat ini. 384 00:18:45,030 --> 00:18:47,990 Ruang adalah, seperti biasa, terbatas, tetapi kita akan terus melakukan ini pada hampir 385 00:18:47,990 --> 00:18:51,420 setiap minggu jika ruang habis minggu ini. 386 00:18:51,420 --> 00:18:56,160 >> Jadi cliffhanger yang kita tinggalkan di Senin adalah bahwa string dapat benar-benar 387 00:18:56,160 --> 00:19:00,520 diindeks ke dalam, yang hanya berarti Anda bisa mendapatkan karakter pertama, 388 00:19:00,520 --> 00:19:03,770 karakter kedua, karakter ketiga dan sebagainya, karena Anda dapat 389 00:19:03,770 --> 00:19:07,860 efektif memikirkan string, seperti halo, sebagai dalam kasus ini lima 390 00:19:07,860 --> 00:19:09,670 huruf dalam kotak. 391 00:19:09,670 --> 00:19:13,370 Dan Anda bisa mendapatkan di masing-masing kotak dengan apa yang kita lakukan sintaks 392 00:19:13,370 --> 00:19:15,230 memperkenalkan pada hari Senin? 393 00:19:15,230 --> 00:19:16,760 Mereka kurung siku pada keyboard Anda. 394 00:19:16,760 --> 00:19:18,980 Itu hanya berarti pergi ke lokasi nol. 395 00:19:18,980 --> 00:19:22,840 >> Kami mulai menghitung dari nol, sehingga braket nol menandakan h, braket satu 396 00:19:22,840 --> 00:19:25,170 menandakan e, dan sebagainya. 397 00:19:25,170 --> 00:19:28,490 Dan sepanjang waktu ketika kami sudah menggunakan string dan mengetikkan "halo" 398 00:19:28,490 --> 00:19:31,250 dan "dunia" dan hal-hal lain layar, sudah disimpan 399 00:19:31,250 --> 00:19:32,820 dalam kotak seperti ini. 400 00:19:32,820 --> 00:19:33,370 Dan mengambil menebak. 401 00:19:33,370 --> 00:19:37,470 Apa setiap kotak mewakili fisik dalam komputer Anda? 402 00:19:37,470 --> 00:19:38,250 >> [Tak terdengar]. 403 00:19:38,250 --> 00:19:39,150 >> Maaf? 404 00:19:39,150 --> 00:19:39,580 >> Karakter. 405 00:19:39,580 --> 00:19:44,760 >> Jadi karakter, tentu dalam kasus string, dan karakter hanya 406 00:19:44,760 --> 00:19:46,800 delapan bit atau satu byte. 407 00:19:46,800 --> 00:19:49,550 Jadi Anda mungkin setidaknya samar-samar akrab dengan fakta bahwa Anda 408 00:19:49,550 --> 00:19:50,500 komputer memiliki memori. 409 00:19:50,500 --> 00:19:52,110 Ini memiliki dua jenis memori minimal. 410 00:19:52,110 --> 00:19:54,810 Salah satunya adalah hard disk di mana Anda menyimpan hal-hal secara permanen, dan itu 411 00:19:54,810 --> 00:19:57,400 biasanya besar sehingga Anda dapat memiliki film dan musik dan sebagainya. 412 00:19:57,400 --> 00:20:04,010 >> Maka Anda memiliki jenis lain dari memori disebut RAM, R-A-M, Random Access 413 00:20:04,010 --> 00:20:07,510 Memori, dan ini adalah jenis memori yang digunakan ketika komputer Anda 414 00:20:07,510 --> 00:20:11,520 berjalan tetapi jika Anda kehilangan kekuasaan atau Anda dies baterai, apa pun yang disimpan 415 00:20:11,520 --> 00:20:15,300 di RAM akan hilang jika Anda kehilangan kekuatan sama sekali karena itu tidak 416 00:20:15,300 --> 00:20:16,060 persisten. 417 00:20:16,060 --> 00:20:19,120 Anda biasanya memiliki, hari ini, pertunjukan itu, dua pertunjukan, mungkin lebih. 418 00:20:19,120 --> 00:20:23,490 Dan terbalik RAM adalah bahwa itu jauh banyak, jauh lebih cepat daripada hard disk 419 00:20:23,490 --> 00:20:27,390 atau bahkan solid state drive hari ini, tapi biasanya lebih mahal sehingga 420 00:20:27,390 --> 00:20:28,480 Anda memiliki kurang dari itu. 421 00:20:28,480 --> 00:20:32,400 >> Jadi pembicaraan hari ini benar-benar mengacu ke RAM, jenis memori yang 422 00:20:32,400 --> 00:20:35,270 hanya ada saat ada kekuatan yang dimasukkan ke dalam komputer Anda. 423 00:20:35,270 --> 00:20:40,530 Jadi, ketika Anda mengetik di H-E-L-L-O, Enter pada keyboard, H akan dalam satu 424 00:20:40,530 --> 00:20:44,550 byte RAM, E yang terjadi di byte lain dari RAM, seperti 425 00:20:44,550 --> 00:20:45,800 sisa kata. 426 00:20:45,800 --> 00:20:49,010 Jadi ingat apa yang kita mampu lakukan terakhir kali adalah ini. 427 00:20:49,010 --> 00:20:53,940 Biarkan aku pergi ke depan dan membuka file bahwa kita dipanggil string.c, dan mengingat 428 00:20:53,940 --> 00:20:56,860 bahwa itu tampak sedikit sesuatu seperti ini. 429 00:20:56,860 --> 00:20:59,860 Biarkan aku benar-benar memutar kembali dan mengubah untuk apa yang tampak seperti, 430 00:20:59,860 --> 00:21:02,654 panjang string s. 431 00:21:02,654 --> 00:21:04,560 >> Jadi melihat program di sini. 432 00:21:04,560 --> 00:21:08,530 Kami termasuk perpustakaan CS50 sehingga yang bisa kita gunakan mendapatkan tali. 433 00:21:08,530 --> 00:21:11,400 Kami menyertakan standar io.h sehingga kita bisa menggunakan printf. 434 00:21:11,400 --> 00:21:13,580 Mengapa kita termasuk string.h? 435 00:21:13,580 --> 00:21:16,980 Ini adalah baru pada hari Senin. 436 00:21:16,980 --> 00:21:18,230 Jadi kita ingin panjang string. 437 00:21:18,230 --> 00:21:19,090 Str leng. 438 00:21:19,090 --> 00:21:21,470 Orang-orang memutuskan tahun yang lalu, mari kita menjadi ringkas. 439 00:21:21,470 --> 00:21:24,290 Alih-alih menyebutnya "panjang string," sebut saja "str leng" dan membiarkan 440 00:21:24,290 --> 00:21:28,540 Angka dunia yang keluar, dan sebagainya yang apa yang kita mendapatkan akses ke dengan string.h. 441 00:21:28,540 --> 00:21:29,390 >> Ini akrab. 442 00:21:29,390 --> 00:21:30,320 Ini akrab. 443 00:21:30,320 --> 00:21:31,450 Ini akrab. 444 00:21:31,450 --> 00:21:32,370 Ini sedikit baru. 445 00:21:32,370 --> 00:21:35,420 Sejalan 22 - dan kami akan kembali ini, tapi untuk sekarang tahu - 446 00:21:35,420 --> 00:21:37,880 dan Anda hanya akan tahu ini dari memiliki membaca dokumentasi atau jika 447 00:21:37,880 --> 00:21:39,010 Anda tahu C sudah - 448 00:21:39,010 --> 00:21:41,510 mendapatkan string yang kadang-kadang bisa mengacaukan. 449 00:21:41,510 --> 00:21:45,130 Jika pengguna benar-benar bermusuhan atau kooperatif dan ia hanya 450 00:21:45,130 --> 00:21:49,450 tidak mengetikkan apapun sama keyboard atau jenis begitu banyak pada keyboard yang 451 00:21:49,450 --> 00:21:53,760 itu menguasai memori komputer, dalam teori, dapatkan tali bisa kembali 452 00:21:53,760 --> 00:21:56,270 sesuatu selain string karakter. 453 00:21:56,270 --> 00:22:01,930 Ini bisa mengembalikan nilai khusus yang disebut NULL dalam semua topi, N-U-L-L, dan ini adalah 454 00:22:01,930 --> 00:22:03,390 hanya disebut nilai sentinel. 455 00:22:03,390 --> 00:22:08,010 Ini adalah nilai khusus yang menandakan sesuatu yang buruk terjadi dalam kasus ini. 456 00:22:08,010 --> 00:22:10,520 Ini adalah tidak adanya string. 457 00:22:10,520 --> 00:22:16,190 >> Jadi nol aku memeriksa hanya sehingga, panjang cerita pendek, str leng dan 458 00:22:16,190 --> 00:22:20,230 fungsi lain yang datang dengan C, jika mereka mengharapkan string tetapi Anda melewati mereka 459 00:22:20,230 --> 00:22:23,630 tidak adanya string, jika Anda lulus mereka NULL, komputer atau program 460 00:22:23,630 --> 00:22:25,000 hanya akan crash langsung. 461 00:22:25,000 --> 00:22:25,610 Ini akan menggantung. 462 00:22:25,610 --> 00:22:27,250 Ini akan muntah beberapa pesan kesalahan. 463 00:22:27,250 --> 00:22:28,690 Hal-hal buruk akan terjadi. 464 00:22:28,690 --> 00:22:31,130 Jadi meskipun ini masih tidak didefinisikan dengan baik - 465 00:22:31,130 --> 00:22:33,730 ini akan lebih masuk akal dalam seminggu atau dua - di baris 22, ini hanya 466 00:22:33,730 --> 00:22:38,790 contoh diri defensif pengecekan error hanya dalam kasus satu waktu dari 467 00:22:38,790 --> 00:22:42,040 sejuta sesuatu yang tidak beres, pada Setidaknya program saya tidak akan crash. 468 00:22:42,040 --> 00:22:45,960 >> Jadi jika s tidak sama dengan sesuatu yang buruk, Aku punya untuk loop, dan ini adalah 469 00:22:45,960 --> 00:22:47,710 di mana kita punya yang lain potongan baru sintaks. 470 00:22:47,710 --> 00:22:51,580 Aku punya untuk loop iterasi dari nol pada hingga panjang s. 471 00:22:51,580 --> 00:22:56,140 Dan kemudian di sini, saya adalah seorang pencetakan keluar s braket i, tapi kenapa saya menggunakan% c semua 472 00:22:56,140 --> 00:23:00,770 tiba-tiba bukannya% s bahkan meskipun s adalah string? 473 00:23:00,770 --> 00:23:02,110 Ini karakter, kan? 474 00:23:02,110 --> 00:23:06,560 S adalah string, tapi s braket sesuatu, s braket i dimana i adalah nol 475 00:23:06,560 --> 00:23:10,380 atau satu atau dua, itu individu karakter dalam string, dan sebagainya untuk 476 00:23:10,380 --> 00:23:14,970 itu, printf perlu diinformasikan bahwa itu memang tokoh yang diharapkan. 477 00:23:14,970 --> 00:23:18,096 >> Dan kemudian ingat, apa yang melakukan ini Program benar-benar melakukannya? 478 00:23:18,096 --> 00:23:19,848 >> Mencetaknya dalam kolom. 479 00:23:19,848 --> 00:23:21,120 >> Ya, persis. 480 00:23:21,120 --> 00:23:24,990 Itu hanya dicetak kata yang saya ketik kolom, satu karakter per baris. 481 00:23:24,990 --> 00:23:26,190 Jadi mari kita lihat ini lagi. 482 00:23:26,190 --> 00:23:27,810 Jadi membuat tali. 483 00:23:27,810 --> 00:23:30,200 Disusun OK. / String.. 484 00:23:30,200 --> 00:23:35,560 Mari saya ketik di H-E-L-L-O, Enter, dan memang saya mendapatkannya, satu per baris. 485 00:23:35,560 --> 00:23:37,280 >> Jadi biarkan aku melakukan satu optimasi sini. 486 00:23:37,280 --> 00:23:40,240 Jika Anda berpikir tentang hal ini, terutama jika Anda telah diprogram sebelumnya, ada 487 00:23:40,240 --> 00:23:43,340 bisa dibilang sebuah inefisiensi di line 24. 488 00:23:43,340 --> 00:23:46,160 Dengan kata lain, itu tidak selalu desain terbaik. 489 00:23:46,160 --> 00:23:50,200 Langsung, setidaknya sekali Anda ingat apa str leng, tapi itu 490 00:23:50,200 --> 00:23:52,640 melakukan sesuatu yang bodoh berpotensi. 491 00:23:52,640 --> 00:23:54,863 Apa yang mungkin itu? 492 00:23:54,863 --> 00:23:56,280 >> [Tak terdengar]. 493 00:23:56,280 --> 00:23:56,800 >> Tepat. 494 00:23:56,800 --> 00:24:00,340 Ini memeriksa untuk panjang s setiap saat meskipun 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O selalu akan menjadi lima karakter. 496 00:24:02,980 --> 00:24:05,490 Setiap kali melalui loop ini, lima tidak berubah. 497 00:24:05,490 --> 00:24:08,750 Aku mungkin incrementing i, tapi apa adalah panjang s pada setiap 498 00:24:08,750 --> 00:24:09,690 iterasi dari loop ini? 499 00:24:09,690 --> 00:24:15,810 Ini lima, lima, lima, dan namun saya tetap bertanya ini 500 00:24:15,810 --> 00:24:18,320 mempertanyakan lagi dan lagi dan lagi. 501 00:24:18,320 --> 00:24:20,750 Sekarang terus terang, komputer begitu sialan cepat, tidak ada yang akan melihat 502 00:24:20,750 --> 00:24:23,780 perbedaan dalam hal ini, tapi jenis ini keputusan desain miskin dapat 503 00:24:23,780 --> 00:24:28,330 mulai menambahkan jika compiler itu sendiri tidak mencoba untuk memperbaiki ini untuk Anda yang 504 00:24:28,330 --> 00:24:30,630 biasanya tidak akan, pada setidaknya dalam alat. 505 00:24:30,630 --> 00:24:31,540 >> Jadi aku akan melakukan hal ini. 506 00:24:31,540 --> 00:24:34,580 Aku akan menambahkan koma setelah variabel pertama saya, saya. 507 00:24:34,580 --> 00:24:37,310 Aku akan memberi diriku lagi variabel, menyebutnya n, hanya dengan 508 00:24:37,310 --> 00:24:41,330 konvensi untuk nomor, dan kemudian aku akan menetapkan n nilai string 509 00:24:41,330 --> 00:24:42,530 panjang s. 510 00:24:42,530 --> 00:24:46,060 Dan kemudian aku akan berubah kondisi saya menjadi apa? 511 00:24:46,060 --> 00:24:51,960 Aku akan mengubah kondisi saya untuk sementara saya kurang dari n. 512 00:24:51,960 --> 00:24:55,700 >> Jadi sekarang, berapa kali aku memeriksa panjang s? 513 00:24:55,700 --> 00:25:00,110 Sekali, tapi itu OK untuk memeriksa i terhadap n lagi dan lagi karena sekarang mereka 514 00:25:00,110 --> 00:25:03,170 nilai-nilai yang tidak benar-benar berubah. 515 00:25:03,170 --> 00:25:06,020 Sekarang untuk saat ini, hanya tahu bahwa kapan saja Anda memanggil fungsi, ada sedikit 516 00:25:06,020 --> 00:25:09,930 biaya overhead, tidak cukup untuk mencegah Anda benar-benar dari yang pernah menggunakan fungsi, tetapi 517 00:25:09,930 --> 00:25:12,750 tentu ketika ada baris kode seperti itu - dan garis akan mendapatkan 518 00:25:12,750 --> 00:25:15,490 lebih menarik sebelum lama - di mana ada kesempatan untuk berpikir, jika saya 519 00:25:15,490 --> 00:25:18,320 ketik kode ini, berapa banyak kali akan mengeksekusi? 520 00:25:18,320 --> 00:25:20,950 Anda akan mulai melihat dari waktu ke waktu kinerja program Anda dapat 521 00:25:20,950 --> 00:25:21,660 memang berubah. 522 00:25:21,660 --> 00:25:24,110 >> Bahkan, salah satu masalah kami telah menetapkan dilakukan dalam tahun terakhir melibatkan 523 00:25:24,110 --> 00:25:27,600 melaksanakan, karena Anda mungkin ingat dari minggu nol, spell checker, tetapi 524 00:25:27,600 --> 00:25:31,380 mengeja checker yang dirancang untuk mendukung kamus 150.000 ditambah 525 00:25:31,380 --> 00:25:32,860 kata-kata yang kita berikan kalian. 526 00:25:32,860 --> 00:25:37,100 Anda harus menulis kode yang beban kata-kata ke dalam RAM, sehingga menjadi 527 00:25:37,100 --> 00:25:40,700 kotak seperti yang kita lihat di layar saat lalu, dan kemudian secepat Anda 528 00:25:40,700 --> 00:25:43,740 bisa, Anda harus mampu menjawab Pertanyaan bentuk, adalah kata ini 529 00:25:43,740 --> 00:25:44,280 salah eja? 530 00:25:44,280 --> 00:25:45,420 Apakah kata ini salah eja? 531 00:25:45,420 --> 00:25:46,770 Apakah kata ini salah eja? 532 00:25:46,770 --> 00:25:49,525 >> Dan dalam sesuatu seperti itu apa yang kita sudah dilakukan dalam tahun terakhir ini berubah menjadi, 533 00:25:49,525 --> 00:25:53,500 meskipun pada opt-in secara opsional, sebuah kompetisi macam, dimana 534 00:25:53,500 --> 00:25:59,470 siswa yang menggunakan RAM kurang dan kurang waktu, siklus CPU sedikit, berakhir 535 00:25:59,470 --> 00:26:02,640 meluapkan ke atas sedikit papan pemimpin atau peringkat yang kita pasang di 536 00:26:02,640 --> 00:26:04,770 homepage kursus seperti yang kita sudah dilakukan di masa lalu. 537 00:26:04,770 --> 00:26:08,100 Jadi sekali lagi, benar-benar opsional, tapi ini berbicara kepada peluang desain 538 00:26:08,100 --> 00:26:11,250 yang depan sekali kita mulai membangun di atas beberapa 539 00:26:11,250 --> 00:26:14,010 blok bangunan dasar. 540 00:26:14,010 --> 00:26:16,780 >> Jadi biarkan aku kembali ke diagram ini untuk hanya beberapa saat dan mengungkapkan sedikit 541 00:26:16,780 --> 00:26:17,610 sesuatu yang lebih. 542 00:26:17,610 --> 00:26:21,400 Ini memang sebuah string, dan kami telah mengambil keuntungan dari beberapa perpustakaan, 543 00:26:21,400 --> 00:26:25,150 io.h standar yang memiliki - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, antara lain. 546 00:26:27,860 --> 00:26:31,540 cs50.h, yang telah mendapatkan int dan String dan sebagainya, string.h, yang 547 00:26:31,540 --> 00:26:32,570 memiliki str leng. 548 00:26:32,570 --> 00:26:34,800 Tapi ternyata itu belum ada lagi. 549 00:26:34,800 --> 00:26:38,540 Terus terang, ada banyak dan banyak header file yang menyatakan fungsi 550 00:26:38,540 --> 00:26:43,320 untuk perpustakaan, tapi ctype.h ini benar-benar akan menjadi agak 551 00:26:43,320 --> 00:26:46,900 menguntungkan karena aku akan untuk terus maju dan menerapkan satu 552 00:26:46,900 --> 00:26:48,120 Program lain di sini. 553 00:26:48,120 --> 00:26:52,420 >> Biarkan aku pergi ke depan dan membuka sesuatu Saya menulis di muka disebut 554 00:26:52,420 --> 00:26:55,750 capitalize.c, dan mari kita melihat bagaimana ini bekerja. 555 00:26:55,750 --> 00:27:00,340 Perhatikan bahwa saya menggunakan, dalam versi ini itu, tiga file akrab. 556 00:27:00,340 --> 00:27:04,110 Perhatikan bahwa dalam baris 18, aku mendapatkan baris teks. 557 00:27:04,110 --> 00:27:07,660 Perhatikan pada baris 21, aku mengklaim bahwa kode berikut akan 558 00:27:07,660 --> 00:27:12,170 memanfaatkan s, apa pun pengguna mengetik dalam, dan bagaimana aku melakukan itu? 559 00:27:12,170 --> 00:27:13,300 Yah, aku mengambil - 560 00:27:13,300 --> 00:27:14,750 pelajaran dari terakhir kali - 561 00:27:14,750 --> 00:27:18,370 Saya menyatakan i dan n dan iterasi atas karakter dalam string. 562 00:27:18,370 --> 00:27:22,720 Dan lalu apa blok ini kode sejalan 24 sampai 27 563 00:27:22,720 --> 00:27:24,550 lakukan dalam istilah awam? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Huruf kecil huruf kembali. 566 00:27:29,730 --> 00:27:30,430 >> Tepat. 567 00:27:30,430 --> 00:27:35,920 Jika s braket i - jadi jika ke-i karakter s, yang merupakan spesifik 568 00:27:35,920 --> 00:27:40,220 arang dalam string, lebih besar dari atau sama dengan huruf kecil dan - 569 00:27:40,220 --> 00:27:42,670 ingat bahwa ampersand ganda menandakan dan - 570 00:27:42,670 --> 00:27:46,810 dan karakter yang sama, s braket i, adalah kurang dari atau sama dengan huruf kecil z, 571 00:27:46,810 --> 00:27:50,600 itu berarti ini merupakan sebuah atau b atau c atau titik, titik, titik, atau z, yang berarti 572 00:27:50,600 --> 00:27:51,340 itu huruf kecil. 573 00:27:51,340 --> 00:27:52,900 Apa yang ingin saya lakukan dalam kasus ini? 574 00:27:52,900 --> 00:27:55,010 Yah, aku bisa melakukan ini agak samar, namun 575 00:27:55,010 --> 00:27:56,160 mari kita menggoda ini terpisah. 576 00:27:56,160 --> 00:28:00,210 >> Aku akan menelepon printf, mencetak% c karena saya ingin mencetak ulang ini 577 00:28:00,210 --> 00:28:01,580 karakter di layar. 578 00:28:01,580 --> 00:28:06,650 Saya kemudian akan mengambil s braket i, -i karakter dalam s, dan kemudian mengapa 579 00:28:06,650 --> 00:28:12,330 saya lakukan ini sedikit trik di sini, huruf kecil A modal dikurangi? 580 00:28:12,330 --> 00:28:16,352 Apa yang akan memberikan saya, secara umum? 581 00:28:16,352 --> 00:28:18,600 >> [Tak terdengar]. 582 00:28:18,600 --> 00:28:19,390 >> Tepat. 583 00:28:19,390 --> 00:28:20,860 Saya tidak begitu ingat - 584 00:28:20,860 --> 00:28:24,390 itu 65 untuk modal A. Saya tidak benar-benar ingat apa huruf kecil adalah, 585 00:28:24,390 --> 00:28:25,540 tapi tidak peduli. 586 00:28:25,540 --> 00:28:26,580 Komputer tahu. 587 00:28:26,580 --> 00:28:30,380 Jadi dengan mengatakan, huruf kecil minus modal A, itu aneh untuk menjadi 588 00:28:30,380 --> 00:28:33,530 mengurangkan satu char dari yang lain, namun apa karakter bawah tenda? 589 00:28:33,530 --> 00:28:34,520 Mereka hanya angka. 590 00:28:34,520 --> 00:28:36,980 Jadi, apa pun angka-angka itu, biarkan komputer mengingatnya 591 00:28:36,980 --> 00:28:38,240 daripada saya manusia. 592 00:28:38,240 --> 00:28:41,710 >> Jadi huruf kecil modal Minus adalah akan memberikan perbedaan. 593 00:28:41,710 --> 00:28:45,370 Itu terjadi menjadi 32, dan itu akan menjadi kasus untuk huruf kecil b dan modal B 594 00:28:45,370 --> 00:28:45,930 dan sebagainya. 595 00:28:45,930 --> 00:28:47,710 Ini tetap konsisten, untungnya. 596 00:28:47,710 --> 00:28:51,930 Jadi aku mengatakan pada dasarnya, mengambil huruf kecil huruf, kurangi dari yang 597 00:28:51,930 --> 00:28:55,340 Perbedaan standar, dan bahwa efektif perubahan s braket i dari 598 00:28:55,340 --> 00:28:59,400 huruf kecil untuk, tentu saja, huruf besar, tanpa saya benar-benar harus berpikir 599 00:28:59,400 --> 00:29:03,040 tentang atau ingat, apa yang mereka angka yang kita bicarakan ketika delapan 600 00:29:03,040 --> 00:29:04,800 relawan datang di panggung? 601 00:29:04,800 --> 00:29:08,800 Sekarang sementara itu, di lain, jika tidak huruf kecil sebagaimana ditentukan 602 00:29:08,800 --> 00:29:10,400 oleh garis 24, hanya mencetaknya. 603 00:29:10,400 --> 00:29:12,590 Saya hanya ingin menyentuh karakter yang 604 00:29:12,590 --> 00:29:14,410 sebenarnya awalnya huruf kecil. 605 00:29:14,410 --> 00:29:15,150 >> Jadi mari kita lihat ini. 606 00:29:15,150 --> 00:29:17,400 Membuat memanfaatkan. 607 00:29:17,400 --> 00:29:18,470 Disusun, OK. 608 00:29:18,470 --> 00:29:19,730 . / Memanfaatkan. 609 00:29:19,730 --> 00:29:23,530 Dan biarkan aku ketik di H-E-L-L-O dalam huruf kecil, Enter. 610 00:29:23,530 --> 00:29:26,370 Dan melihat bahwa itu dikonversi menjadi huruf besar. 611 00:29:26,370 --> 00:29:27,940 Biarkan aku melakukan ini lagi dengan kata yang berbeda. 612 00:29:27,940 --> 00:29:32,720 Bagaimana D-A-V-I-D dengan D pertama dikapitalisasi sebagai nama biasanya adalah? 613 00:29:32,720 --> 00:29:33,560 Enter. 614 00:29:33,560 --> 00:29:34,870 Perhatikan itu masih benar. 615 00:29:34,870 --> 00:29:40,250 Itu hanya dikeluarkan yang pertama kali D tidak berubah melalui yang lain membangun. 616 00:29:40,250 --> 00:29:42,170 >> Jadi perlu diingat, saat itu, beberapa hal di sini. 617 00:29:42,170 --> 00:29:45,060 Satu, jika Anda pernah ingin memeriksa dua kondisi sekaligus, Anda bisa dan mereka 618 00:29:45,060 --> 00:29:46,500 bersama-sama seperti yang kita prediksi. 619 00:29:46,500 --> 00:29:49,900 Anda dapat membandingkan karakter dengan cara ini dan efektif mengobati karakter sebagai 620 00:29:49,900 --> 00:29:53,050 angka, tapi terus terang, ini begitu sialan samar aku tidak akan ingat 621 00:29:53,050 --> 00:29:56,510 bagaimana untuk datang dengan ini dari awal tanpa penalaran melalui itu untuk waktu yang cukup 622 00:29:56,510 --> 00:29:57,140 sedikit waktu. 623 00:29:57,140 --> 00:30:00,590 >> Bukankah lebih baik jika seseorang di luar sana menulis sebuah fungsi yang disebut adalah 624 00:30:00,590 --> 00:30:05,390 menurunkan yang bisa menjawab untuk saya benar atau palsu, karakter ini adalah huruf kecil? 625 00:30:05,390 --> 00:30:09,350 Yah untungnya, siapa pun yang menulis ctype.h melakukan hal itu. 626 00:30:09,350 --> 00:30:15,540 Biarkan aku pergi di sini dan menambahkan ctype untuk c jenis, dan sekarang biarkan aku pergi di sini dan 627 00:30:15,540 --> 00:30:18,820 menulis ulang baris ini sebagai berikut. 628 00:30:18,820 --> 00:30:27,510 >> Jadi jika itu disebut lebih rendah, saya menyatakan, s braket i, maka aku akan menghapus 629 00:30:27,510 --> 00:30:29,400 dua baris sama sekali. 630 00:30:29,400 --> 00:30:32,570 Jadi sekarang orang lain, aku berharap, menulis fungsi yang disebut lebih rendah, dan 631 00:30:32,570 --> 00:30:36,250 ternyata keluar mereka lakukan dan mereka menyatakan itu dalam ctype.h. 632 00:30:36,250 --> 00:30:39,480 Dan sekarang aku akan meninggalkan baris 27 saja, aku akan meninggalkan garis 31 633 00:30:39,480 --> 00:30:41,890 saja, tapi perhatikan betapa aku sudah diperketat kode saya. 634 00:30:41,890 --> 00:30:42,690 Ini sekarang bersih. 635 00:30:42,690 --> 00:30:47,250 Ini terlalu sulit untuk melihat melalui karena sekarang fungsi, apalagi, adalah 636 00:30:47,250 --> 00:30:50,080 begitu luar biasa menamakannya hanya melakukan apa yang tertulis. 637 00:30:50,080 --> 00:30:51,520 >> Jadi sekarang aku akan simpan ini. 638 00:30:51,520 --> 00:30:52,930 Aku akan zoom out. 639 00:30:52,930 --> 00:30:56,650 Dan seperti dalam Scratch Anda bisa memiliki Boolean, nilai Boolean true atau 640 00:30:56,650 --> 00:31:01,530 palsu, itulah apa yang menurunkan efektif kembali. 641 00:31:01,530 --> 00:31:02,960 Mari saya mengkompilasi ulang. 642 00:31:02,960 --> 00:31:04,500 Biarkan aku kembali berjalan. 643 00:31:04,500 --> 00:31:07,350 Dan sekarang mari kita coba lagi, H-E-L-L-O, Enter. 644 00:31:07,350 --> 00:31:07,970 Itu cukup bagus. 645 00:31:07,970 --> 00:31:10,150 Dan coba lagi, memastikan aku tidak mengacaukan sesuatu. 646 00:31:10,150 --> 00:31:11,670 Yang dikapitalisasi juga. 647 00:31:11,670 --> 00:31:14,190 >> Tapi ini tidak cukup baik karena Hal lain yang saya tidak akan pernah 648 00:31:14,190 --> 00:31:19,090 ingat kecuali aku bekerja melalui itu benar-benar hati-hati pada, katakanlah, kertas 649 00:31:19,090 --> 00:31:19,920 baris ini sialan. 650 00:31:19,920 --> 00:31:23,450 Bukankah lebih baik jika ada fungsi dipanggil untuk atas? 651 00:31:23,450 --> 00:31:26,930 Nah ternyata ada dalam ctype.h juga. 652 00:31:26,930 --> 00:31:30,150 Aku akan pergi ke depan dan ketik - 653 00:31:30,150 --> 00:31:31,340 membiarkan saya membawa garis itu kembali. 654 00:31:31,340 --> 00:31:36,430 Alih-alih ini di sini, biarkan aku pergi ke depan dan berkata, menggantikan% c 655 00:31:36,430 --> 00:31:42,110 hasil dari panggilan fungsi ini untuk atas pada karakter-i dari s. 656 00:31:42,110 --> 00:31:45,430 Dan sekarang melihat itu semakin sedikit seimbang. 657 00:31:45,430 --> 00:31:48,870 Saya harus melacak berapa banyak kurung Aku sudah dibuka dan ditutup. 658 00:31:48,870 --> 00:31:50,050 >> Jadi sekarang itu bahkan lebih bersih. 659 00:31:50,050 --> 00:31:53,460 Sekarang program ini semakin baik dan lebih baik dirancang dibilang karena itu 660 00:31:53,460 --> 00:31:56,450 jauh, jauh lebih mudah dibaca tapi itu tidak mari kita perbaiki. 661 00:31:56,450 --> 00:31:57,600 Membuat memanfaatkan. 662 00:31:57,600 --> 00:31:58,930 . / Memanfaatkan. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-O. Mari kita jalankan lagi, D-A-V-I-D. OK, jadi kita masih dalam 664 00:32:03,220 --> 00:32:04,250 cukup bagus bentuknya. 665 00:32:04,250 --> 00:32:06,030 >> Tapi sekarang ke atas. 666 00:32:06,030 --> 00:32:09,720 Saya mengusulkan bahwa ada satu lagi perbaikan kita bisa membuat yang akan 667 00:32:09,720 --> 00:32:12,820 benar-benar baik, yang benar-benar bisa mengencangkan up kode ini dan benar-benar memberi kita lima 668 00:32:12,820 --> 00:32:15,150 dari lima untuk desain, misalnya. 669 00:32:15,150 --> 00:32:16,510 Apa yang akan menyenangkan untuk menyingkirkan? 670 00:32:16,510 --> 00:32:20,770 Yah, lihat berapa lama sialan ini blok kode adalah hanya untuk melakukan sesuatu yang sederhana. 671 00:32:20,770 --> 00:32:23,850 >> Sekarang sebagai samping, karena Anda mungkin memiliki terlihat di bagian Super masa ini 672 00:32:23,850 --> 00:32:27,570 akhir pekan, Anda tidak benar-benar perlu kurung kurawal ketika Anda hanya memiliki satu 673 00:32:27,570 --> 00:32:32,180 baris kode, meskipun kami mengusulkan menjaga mereka sehingga membuat banyak 674 00:32:32,180 --> 00:32:36,190 lebih jelas, seperti dalam berbentuk U itu Scratch blok, apa yang di dalam cabang. 675 00:32:36,190 --> 00:32:40,170 Tapi tidak akan lebih baik jika ke atas, ketika diberi input, mengubahnya menjadi 676 00:32:40,170 --> 00:32:44,730 huruf besar jika tidak, dan apa yang akan menjadi indah dalam kasus sebaliknya jika 677 00:32:44,730 --> 00:32:47,210 itu sudah huruf besar? 678 00:32:47,210 --> 00:32:49,620 Hanya menyebarkannya melalui dan meninggalkannya sendirian. 679 00:32:49,620 --> 00:32:50,660 >> Jadi mungkin melakukan itu. 680 00:32:50,660 --> 00:32:52,990 Aku bisa mencoba dan hanya berharap bahwa itu tidak, tapi biarkan aku 681 00:32:52,990 --> 00:32:54,450 memperkenalkan satu hal lainnya. 682 00:32:54,450 --> 00:32:57,440 Alih-alih menggunakan terminal built-in jendela di sini, ingat bahwa 683 00:32:57,440 --> 00:33:01,130 ini ikon hitam persegi memberi Anda jendela terminal besar yang saya bisa penuh 684 00:33:01,130 --> 00:33:02,260 layar jika saya ingin? 685 00:33:02,260 --> 00:33:05,820 Jadi ternyata mereka semacam aneh bernama, tapi ada hal-hal yang disebut 686 00:33:05,820 --> 00:33:10,970 man, halaman manual, pria untuk jangka pendek, dan saya dapat mengakses dengan 687 00:33:10,970 --> 00:33:14,515 mengetikkan man - 688 00:33:14,515 --> 00:33:15,570 apa yang saya ingin mengetik? 689 00:33:15,570 --> 00:33:17,830 Man ke atas. 690 00:33:17,830 --> 00:33:21,090 >> Dan sekarang melihat jika terdapat berfungsi dalam komputer, di 691 00:33:21,090 --> 00:33:23,970 hal ini alat, yang hanya sistem operasi Linux, itu akan 692 00:33:23,970 --> 00:33:27,920 untuk memberikan satu set yang agak samar output, tetapi Anda akan menemukan selama waktu itu 693 00:33:27,920 --> 00:33:31,720 selalu diformat cukup banyak sama sehingga Anda mulai terbiasa untuk itu. 694 00:33:31,720 --> 00:33:35,130 Perhatikan di bagian atas untuk bagian atas, dan ternyata adalah dokumentasi yang sama 695 00:33:35,130 --> 00:33:35,680 untuk menurunkan. 696 00:33:35,680 --> 00:33:38,740 Siapa pun yang menulis itu memotong beberapa sudut dan menempatkan semuanya dalam satu halaman. 697 00:33:38,740 --> 00:33:40,720 Tujuan-hal 'di hidup adalah untuk mengkonversi 698 00:33:40,720 --> 00:33:42,780 surat kepada atas atau huruf kecil. 699 00:33:42,780 --> 00:33:46,290 >> Perhatikan bahwa di bawah Sinopsis, halaman manual mengajar saya apa file saya 700 00:33:46,290 --> 00:33:48,130 untuk menyertakan menggunakan hal ini. 701 00:33:48,130 --> 00:33:51,320 Ini memberi saya tanda tangan untuk ini fungsi, keduanya, bahkan 702 00:33:51,320 --> 00:33:53,510 meskipun kami sekarang hanya peduli satu. 703 00:33:53,510 --> 00:33:54,730 Berikut ini adalah deskripsi sekarang. 704 00:33:54,730 --> 00:33:58,800 Untuk mengkonversi atas surat c ke huruf jika mungkin. 705 00:33:58,800 --> 00:34:02,280 >> Masih tidak instruktif, tapi biarkan aku sekarang lihat di bawah nilai kembali, hal 706 00:34:02,280 --> 00:34:03,520 itu diserahkan kembali. 707 00:34:03,520 --> 00:34:08,600 Jadi nilai yang dikembalikan adalah bahwa dari Surat dikonversi atau c jika 708 00:34:08,600 --> 00:34:09,870 konversi itu tidak mungkin. 709 00:34:09,870 --> 00:34:11,202 Apa c? 710 00:34:11,202 --> 00:34:12,560 >> Karakter asli. 711 00:34:12,560 --> 00:34:15,370 >> Karakter asli dan kita tahu bahwa dengan, sekali lagi, naik ke 712 00:34:15,370 --> 00:34:19,179 sinopsis, dan siapa pun yang menulis ini Fungsi hanya memutuskan bahwa input 713 00:34:19,179 --> 00:34:22,909 untuk ke atas dan ke bawah hanya sewenang-wenang akan dipanggil c. 714 00:34:22,909 --> 00:34:24,909 Mereka bisa menyebutnya apa yang paling yang mereka inginkan, tetapi mereka tetap 715 00:34:24,909 --> 00:34:26,270 sederhana seperti c. 716 00:34:26,270 --> 00:34:27,880 Jadi saya sudah berkonsultasi halaman manual. 717 00:34:27,880 --> 00:34:31,870 Kalimat ini meyakinkan saya bahwa jika itu bukan huruf kecil, itu 718 00:34:31,870 --> 00:34:34,969 akan hanya memberikan kembali c, yaitu sempurna, yang berarti saya bisa menyingkirkan 719 00:34:34,969 --> 00:34:36,199 Kondisi lain saya. 720 00:34:36,199 --> 00:34:39,679 >> Jadi biarkan aku kembali ke gedit, dan sekarang saya hanya melakukan ini. 721 00:34:39,679 --> 00:34:41,960 Aku akan menyalin pernyataan printf saya. 722 00:34:41,960 --> 00:34:45,969 Aku akan pergi ke depan dan tepat di dalam untuk loop cetak yang keluar, dan mendapatkan 723 00:34:45,969 --> 00:34:48,760 Singkirkan sekarang keseluruhan ini jika membangun. 724 00:34:48,760 --> 00:34:51,860 Apakah bukan ide yang buruk, dan itu sangat banyak benar dan konsisten dengan 725 00:34:51,860 --> 00:34:54,100 semua yang kita sudah diberitakan, tetapi hanya tidak diperlukan. 726 00:34:54,100 --> 00:34:57,070 Segera setelah Anda menyadari beberapa perpustakaan Fungsi ada bahwa orang lain 727 00:34:57,070 --> 00:35:01,340 menulis, atau mungkin Anda tulis di tempat lain di file, Anda dapat menggunakannya dan benar-benar 728 00:35:01,340 --> 00:35:02,690 mulai memperketat kode. 729 00:35:02,690 --> 00:35:06,080 >> Dan ketika saya mengatakan hal-hal seperti gaya yang baik, fakta bahwa orang ini disebut 730 00:35:06,080 --> 00:35:11,490 berfungsi untuk bagian atas, atau yang sebelumnya adalah rendah mengagumkan berguna karena 731 00:35:11,490 --> 00:35:12,900 mereka sangat deskriptif. 732 00:35:12,900 --> 00:35:16,120 Anda tidak ingin untuk memanggil fungsi Anda x dan y dan z, yang memiliki 733 00:35:16,120 --> 00:35:19,620 banyak, apalagi makna. 734 00:35:19,620 --> 00:35:25,160 Setiap pertanyaan tentang seri yang perbaikan? 735 00:35:25,160 --> 00:35:28,010 >> Jadi cukup untuk mengatakan salah satu takeaways bahkan sebagai masalah Anda sendiri 736 00:35:28,010 --> 00:35:30,960 set - mungkin masalah set satu, tapi tentu P mengatur dua dan seterusnya, bahkan 737 00:35:30,960 --> 00:35:34,380 ketika mereka sedang benar tidak selalu berarti mereka sempurna hanya 738 00:35:34,380 --> 00:35:36,155 belum atau khususnya yang dirancang dengan baik. 739 00:35:36,155 --> 00:35:38,420 Itulah sumbu lain untuk mulai berpikir tentang. 740 00:35:38,420 --> 00:35:41,730 Jadi ini di dalam string Anda memori komputer, tetapi jika Anda memiliki 741 00:35:41,730 --> 00:35:46,180 Seluruh sekelompok karakter seperti H-E-L-L-O dalam RAM, dan anggaplah 742 00:35:46,180 --> 00:35:51,330 bahwa Anda dalam program anda memanggil mendapatkan tali beberapa kali sehingga Anda 743 00:35:51,330 --> 00:35:54,200 sebut mendapatkan tali sekali, maka Anda sebut mendapatkan tali lagi. 744 00:35:54,200 --> 00:35:55,880 Nah, apa yang akan terjadi dari waktu ke waktu? 745 00:35:55,880 --> 00:35:59,170 >> Dengan kata lain, jika Anda memiliki garis kode, meskipun di luar konteks, seperti 746 00:35:59,170 --> 00:36:02,120 string s mendapat - 747 00:36:02,120 --> 00:36:02,960 mari kita lakukan ini. 748 00:36:02,960 --> 00:36:05,270 String name sama mendapatkan tali. 749 00:36:05,270 --> 00:36:08,590 Jadi misalkan bahwa baris kode yang dimaksud untuk meminta pengguna untuk nya atau namanya. 750 00:36:08,590 --> 00:36:14,580 Ini baris berikutnya kode dimaksudkan untuk meminta pengguna untuk nya atau sekolah, dan 751 00:36:14,580 --> 00:36:15,920 ini baris berikutnya, dan sebagainya. 752 00:36:15,920 --> 00:36:18,150 Misalkan kita terus bertanya pengguna yang lain dan 753 00:36:18,150 --> 00:36:19,750 dan lain lain tali. 754 00:36:19,750 --> 00:36:22,390 Mereka akan tinggal di memori pada waktu yang sama. 755 00:36:22,390 --> 00:36:24,280 Salah satunya adalah tidak akan mengalahkan yang lain. 756 00:36:24,280 --> 00:36:26,420 Sekolah tidak menimpa yang lain. 757 00:36:26,420 --> 00:36:28,520 Tapi di mana melakukan mereka semua berakhir di memori? 758 00:36:28,520 --> 00:36:32,030 >> Nah, jika kita mulai menggambar pada layar, yang dapat kita gunakan hal ini 759 00:36:32,030 --> 00:36:35,800 di sini seperti papan tulis, jika hitam ini persegi panjang merupakan komputer saya 760 00:36:35,800 --> 00:36:39,800 memori, aku akan mulai sewenang-wenang membaginya ke dalam kotak kecil, 761 00:36:39,800 --> 00:36:42,120 yang masing-masing mewakili satu byte memori. 762 00:36:42,120 --> 00:36:46,560 Terus terang, jika Anda memiliki gigabyte RAM hari ini, Anda memiliki milyar byte 763 00:36:46,560 --> 00:36:49,540 memori di komputer Anda, sehingga satu miliar kotak ini. 764 00:36:49,540 --> 00:36:52,110 Jadi cukup untuk mengatakan, ini tidak benar-benar untuk skala. 765 00:36:52,110 --> 00:36:58,250 >> Tapi kita bisa terus menggambar semua ini jelas tidak untuk skala kotak, dan ini 766 00:36:58,250 --> 00:37:01,260 kolektif mewakili memori komputer saya. 767 00:37:01,260 --> 00:37:03,136 Sekarang kita hanya akan melakukan titik, titik, titik. 768 00:37:03,136 --> 00:37:06,260 Jadi dengan kata lain, ketika saya sekarang meminta pengguna dengan get string untuk memberi saya 769 00:37:06,260 --> 00:37:07,350 String, apa yang terjadi? 770 00:37:07,350 --> 00:37:14,270 Jika jenis pengguna dalam "halo," yang berakhir di H-E-L-L-O. Tapi misalkan 771 00:37:14,270 --> 00:37:15,720 pengguna maka jenis di - 772 00:37:15,720 --> 00:37:17,250 sebenarnya, aku tidak seharusnya dilakukan halo karena kami meminta 773 00:37:17,250 --> 00:37:18,330 mereka untuk nama mereka. 774 00:37:18,330 --> 00:37:20,580 Jadi mari kita kembali jika saya bisa melakukan ini. 775 00:37:20,580 --> 00:37:26,130 >> Jadi jika saya ketik D-A-V-I-D untuk nama saya, tapi ingat bahwa baris kedua 776 00:37:26,130 --> 00:37:29,220 kode yang mendapatkan tali lagi untuk mendapatkan sekolah mereka. 777 00:37:29,220 --> 00:37:32,090 Dimana kata itu bahwa pengguna jenis dalam akan pergi selanjutnya? 778 00:37:32,090 --> 00:37:38,290 Yah, mungkin itu akan masuk ke H-A-R-V-A-R-D. Jadi meskipun saya sudah 779 00:37:38,290 --> 00:37:41,560 ditarik sebagai dua baris, ini hanya sejumlah besar byte Anda 780 00:37:41,560 --> 00:37:42,710 RAM komputer. 781 00:37:42,710 --> 00:37:46,560 Ada masalah sekarang karena sekarang jika saya menggunakan RAM dalam hal ini sangat wajar 782 00:37:46,560 --> 00:37:49,910 tapi semacam cara yang naif, apa yang bisa Anda tidak tampaknya membedakan? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 Di mana orang mulai dan di mana salah satu ujungnya, kan? 785 00:37:54,680 --> 00:37:55,860 Mereka jenis kabur bersama-sama. 786 00:37:55,860 --> 00:37:57,920 >> Jadi ternyata komputer tidak melakukan hal ini. 787 00:37:57,920 --> 00:38:04,720 Biar benar-benar gulir kembali dalam waktu beberapa karakter, dan bukannya Harvard 788 00:38:04,720 --> 00:38:09,570 akan segera setelah nama pengguna, pengguna benar-benar mendapatkan, di belakang 789 00:38:09,570 --> 00:38:12,000 adegan, karakter khusus dimasukkan oleh 790 00:38:12,000 --> 00:38:13,885 komputer baginya. 791 00:38:13,885 --> 00:38:19,470 / 0, atau dikenal sebagai karakter nul mengganggu yang disebut N-U-L, tidak 792 00:38:19,470 --> 00:38:22,190 N-U-L-L, tapi Anda menulis sebagai / 0. 793 00:38:22,190 --> 00:38:27,130 Hanya saja semua bit nol adalah penanda dalam antara kata pertama yang pengguna 794 00:38:27,130 --> 00:38:28,290 diketik dan kedua. 795 00:38:28,290 --> 00:38:33,020 >> Jadi Harvard benar-benar sekarang berakhir sebagai urutan karakter 796 00:38:33,020 --> 00:38:36,110 dan satu lagi / 0. 797 00:38:36,110 --> 00:38:41,690 Jadi dengan kata lain, dengan memiliki ini nilai sentinel, delapan nol bersebelahan 798 00:38:41,690 --> 00:38:45,220 bit, Anda sekarang dapat mulai untuk membedakan satu karakter dari yang lain. 799 00:38:45,220 --> 00:38:49,720 Jadi selama ini apa yang "halo" adalah sebenarnya "halo" dengan / 0, dan 800 00:38:49,720 --> 00:38:53,580 Sementara itu, ada mungkin sangat baik cukup sedikit lebih RAM 801 00:38:53,580 --> 00:38:56,400 dalam komputer. 802 00:38:56,400 --> 00:38:57,810 >> Biarkan aku melakukan satu hal lain sekarang. 803 00:38:57,810 --> 00:39:01,800 Ternyata bahwa semua kotak ini kami telah menggambar, mereka, ya, 804 00:39:01,800 --> 00:39:06,140 string, namun secara umum, hal-hal ini array. 805 00:39:06,140 --> 00:39:10,590 Array adalah hanya sepotong memori itu kembali ke belakang untuk kembali ke belakang, 806 00:39:10,590 --> 00:39:15,130 dan Anda biasanya menggunakan sebuah array dengan cara notasi ini braket persegi. 807 00:39:15,130 --> 00:39:18,210 Jadi kita akan melihat ini cukup sedikit dari waktu ke waktu, tapi biarkan aku pergi ke depan dan 808 00:39:18,210 --> 00:39:21,160 membuka, sebut saja usia. 809 00:39:21,160 --> 00:39:23,920 Dan perhatikan apa yang bisa kita lakukan dengan ini trik yang sama, sedikit 810 00:39:23,920 --> 00:39:25,750 sedikit lebih sintaks sini. 811 00:39:25,750 --> 00:39:29,270 >> Jadi sejalan 17 dari program ini - sebenarnya, biarkan aku menjalankan program pertama 812 00:39:29,270 --> 00:39:30,770 sehingga kita dapat melihat apa hal ini tidak. 813 00:39:30,770 --> 00:39:33,530 Biarkan saya sebut membuat usia untuk mengkompilasi program ini. 814 00:39:33,530 --> 00:39:34,950 . / Usia. 815 00:39:34,950 --> 00:39:36,480 Berapa banyak orang berada di ruangan? 816 00:39:36,480 --> 00:39:38,020 Sebut saja tiga. 817 00:39:38,020 --> 00:39:39,575 Usia orang pertama? 818 00:39:39,575 --> 00:39:42,710 18, 19, dan 20. 819 00:39:42,710 --> 00:39:46,770 Dan sekarang agak ridiculously, saya hanya telah membuat sebuah program yang usia mereka 820 00:39:46,770 --> 00:39:47,740 tiga orang. 821 00:39:47,740 --> 00:39:50,390 >> Jadi jelas ada kesempatan untuk beberapa menyenangkan aritmatika sini. 822 00:39:50,390 --> 00:39:51,560 Untungnya, matematika benar. 823 00:39:51,560 --> 00:39:54,720 18 pergi ke 19, 19 pergi 20 dan sebagainya. 824 00:39:54,720 --> 00:39:58,510 Tapi apa yang benar-benar dimaksudkan untuk menjadi ilustrasi di sini adalah bagaimana kita menyimpan 825 00:39:58,510 --> 00:40:00,190 usia tiga orang. 826 00:40:00,190 --> 00:40:02,370 Biarkan aku memperbesar pada apa terjadi di sini. 827 00:40:02,370 --> 00:40:06,240 >> Jadi pertama, beberapa baris pertama harus akan mendapatkan cukup akrab. 828 00:40:06,240 --> 00:40:08,770 Aku hanya mendorong pengguna untuk jumlah orang di dalam ruangan. 829 00:40:08,770 --> 00:40:11,490 Lalu aku menggunakan mendapatkan int dan dilakukan sementara untuk melakukan ini lagi dan lagi dan lagi. 830 00:40:11,490 --> 00:40:15,780 Kami telah melihat pola yang sebelumnya, tapi baris 27 adalah baru dan benar-benar cukup 831 00:40:15,780 --> 00:40:18,160 berguna, dan akan menjadi semakin berguna. 832 00:40:18,160 --> 00:40:21,620 Perhatikan bahwa apa yang berbeda di baris 27 adalah bahwa saya tampak mendeklarasikan 833 00:40:21,620 --> 00:40:23,960 int disebut usia, tapi tunggu. 834 00:40:23,960 --> 00:40:27,140 Ini bukan hanya int usia. 835 00:40:27,140 --> 00:40:30,130 Ada ini kurung siku, dalam yang n. 836 00:40:30,130 --> 00:40:35,150 >> Jadi braket n dalam konteks ini, tidak dalam pernyataan printf sini tapi 837 00:40:35,150 --> 00:40:44,370 dalam hal ini satu-satunya baris 27, baris ini mengatakan, beri aku n ints, yang masing-masing 838 00:40:44,370 --> 00:40:46,080 adalah tipe int. 839 00:40:46,080 --> 00:40:49,870 Jadi ini adalah ember, sehingga untuk berbicara, dari, dalam kasus ini, tiga bilangan bulat kembali ke 840 00:40:49,870 --> 00:40:52,770 kembali ke belakang sehingga saya efektif memiliki tiga variabel. 841 00:40:52,770 --> 00:40:54,890 Alternatif, menjadi jelas, akan ini. 842 00:40:54,890 --> 00:40:57,400 >> Jika saya ingin siswa pertama usia, saya mungkin melakukan hal ini. 843 00:40:57,400 --> 00:40:59,520 Jika saya ingin siswa kedua itu Usia Saya mungkin melakukan hal ini. 844 00:40:59,520 --> 00:41:01,860 Jika saya ingin siswa ketiga usia, saya mungkin melakukan hal ini. 845 00:41:01,860 --> 00:41:04,320 Dan Allah melarang kita perlu semua orang usia di ruangan ini - 846 00:41:04,320 --> 00:41:07,670 Maksudku, ini adalah heck of a banyak copy, tempel lagi dan lagi dan lagi. 847 00:41:07,670 --> 00:41:10,870 Dan ditambah setelah saya mengkompilasi program ini, jika siswa lain berjalan di atas keluar 848 00:41:10,870 --> 00:41:14,200 dari pintu itu, sekarang nomor saya variabel tidak benar. 849 00:41:14,200 --> 00:41:17,450 >> Jadi apa yang bagus tentang array adalah sebagai Begitu Anda mulai merasa diri 850 00:41:17,450 --> 00:41:20,190 copy dan paste, kemungkinan besar itu bukan pendekatan yang terbaik. 851 00:41:20,190 --> 00:41:22,240 Array adalah dinamis berpotensi. 852 00:41:22,240 --> 00:41:24,610 Saya tidak tahu sebelumnya berapa banyak orang akan berada di dalam ruangan, 853 00:41:24,610 --> 00:41:28,670 tapi saya tahu saya harus n dari mereka, dan aku akan mengetahui n ketika saatnya tiba. 854 00:41:28,670 --> 00:41:35,500 Baris kode ini sekarang berarti, beri saya sepotong memori yang terlihat seperti ini 855 00:41:35,500 --> 00:41:40,380 dimana jumlah kotak pada layar sepenuhnya tergantung pada n yang 856 00:41:40,380 --> 00:41:42,010 pengguna diketik masuk 857 00:41:42,010 --> 00:41:44,850 >> Jadi sekarang sisa dari program ini adalah sebenarnya cukup mirip dengan apa yang kita 858 00:41:44,850 --> 00:41:46,860 hanya melakukan dengan karakter. 859 00:41:46,860 --> 00:41:49,970 Perhatikan Aku punya untuk loop dimulai pada baris 30. 860 00:41:49,970 --> 00:41:54,920 Jadi setelah saya mendapatkan array, saya iterate dari y sama dengan nol pada hingga n. 861 00:41:54,920 --> 00:41:58,890 Aku hanya punya ini instruktif printf pesan hanya mengatakan, memberi saya umur 862 00:41:58,890 --> 00:42:03,690 orang #% i, jadi nomor satu, nomor dua, nomor tiga. 863 00:42:03,690 --> 00:42:04,730 Dan kenapa saya melakukan ini? 864 00:42:04,730 --> 00:42:08,870 Terus terang, manusia lebih memilih untuk menghitung dari satu ke atas sedangkan ilmuwan komputer, 865 00:42:08,870 --> 00:42:09,620 nol ke atas. 866 00:42:09,620 --> 00:42:11,700 ilmuwan komputer tidak akan menggunakan program semacam ini, jadi kita 867 00:42:11,700 --> 00:42:13,990 akan hanya mulai menghitung di salah satu seperti orang normal. 868 00:42:13,990 --> 00:42:17,630 >> Dan sekarang sejalan 33, perhatikan sedikit bagian yang berbeda dari sintaks. 869 00:42:17,630 --> 00:42:23,710 -I usia dalam variabel jenis array akan mendapatkan int. 870 00:42:23,710 --> 00:42:25,770 Dan sekarang akhirnya, ini hanya aritmatika di sini. 871 00:42:25,770 --> 00:42:29,200 Aku memutuskan dalam loop terpisah untuk mengklaim beberapa waktu berlalu, dan sekarang dalam 872 00:42:29,200 --> 00:42:31,400 lingkaran terpisah, garis-garis ini mengeksekusi. 873 00:42:31,400 --> 00:42:35,810 >> Satu tahun dari sekarang, orang saya akan saya th, tetapi pemberitahuan ini tidak 874 00:42:35,810 --> 00:42:36,500 variabel i. 875 00:42:36,500 --> 00:42:38,390 Sekarang ini adalah% i untuk int. 876 00:42:38,390 --> 00:42:43,210 Dan pemberitahuan sebagai placeholder pertama, saya plug in i ditambah 1, jadi kami menghitung seperti 877 00:42:43,210 --> 00:42:44,250 orang normal. 878 00:42:44,250 --> 00:42:49,190 Dan kemudian untuk nilai usia mereka, untuk lama saya tahun, saya mengambil usia braket 879 00:42:49,190 --> 00:42:52,980 i - dan mengapa aku melakukan ditambah satu di sini? 880 00:42:52,980 --> 00:42:53,760 Mereka hanya berusia. 881 00:42:53,760 --> 00:42:55,030 Ini adalah pilihan bodoh saya program. 882 00:42:55,030 --> 00:42:56,810 Mereka hanya berusia satu tahun. 883 00:42:56,810 --> 00:42:59,770 Saya bisa mengetik dalam jumlah yang Aku benar-benar ingin di sana. 884 00:42:59,770 --> 00:43:02,430 >> Jadi apa sebenarnya semua relevansi di sini? 885 00:43:02,430 --> 00:43:07,610 Nah, biarkan aku benar-benar kembali gulir di sini dan melukis gambar 886 00:43:07,610 --> 00:43:10,830 apa yang ada di depan. 887 00:43:10,830 --> 00:43:15,720 Apa yang kita akan lakukan dengan kami berikutnya Masalah Set Dua yang berkecimpung dalam 888 00:43:15,720 --> 00:43:17,070 dunia kriptografi. 889 00:43:17,070 --> 00:43:22,500 Jadi ini adalah string karakter, sehingga urutan beberapa karakter, dan apa 890 00:43:22,500 --> 00:43:23,750 artinya ini? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 Ini bukan dalam versi online dari slide. 893 00:43:30,600 --> 00:43:35,880 >> Jadi saya mengklaim bahwa ini sama dengan ini, iklan bodoh dari bertahun-tahun 894 00:43:35,880 --> 00:43:39,950 lalu yang mungkin benar-benar ingat salah satu asal-usulnya. 895 00:43:39,950 --> 00:43:42,740 Jadi, ini adalah contoh dari enkripsi atau kriptografi. 896 00:43:42,740 --> 00:43:46,150 Ternyata bahwa jika Anda ingin sebenarnya mengirimkan informasi atau berbagi 897 00:43:46,150 --> 00:43:49,310 informasi dengan seseorang aman, seperti pesan seperti ini, Anda dapat 898 00:43:49,310 --> 00:43:50,500 mengacak huruf. 899 00:43:50,500 --> 00:43:53,170 Tapi biasanya, kata-kata yang tidak perlu diacak acak. 900 00:43:53,170 --> 00:43:56,365 Mereka permuted dalam beberapa cara atau diubah dalam beberapa cara sehingga - oops. 901 00:43:56,365 --> 00:43:59,040 Itu menyenangkan spoiler untuk waktu berikutnya. 902 00:43:59,040 --> 00:44:04,390 >> Jadi, Anda dapat memetakan apa yang tampaknya O ke B. Perhatikan bahwa berbaris 903 00:44:04,390 --> 00:44:05,420 kapitalisasi-bijaksana. 904 00:44:05,420 --> 00:44:07,960 Rupanya r menjadi e. 905 00:44:07,960 --> 00:44:14,000 Rupanya F-H-E-R menjadi S-U-R-E. Jadi ternyata ada pemetaan, dan 906 00:44:14,000 --> 00:44:18,720 kasus ini ada cukup bodoh pemetaan apakah ada yang tahu itu? 907 00:44:18,720 --> 00:44:21,440 Ini adalah sesuatu yang disebut Rot 13, Putar 13. 908 00:44:21,440 --> 00:44:24,760 Ini adalah terbodoh enkripsi mekanisme karena benar-benar hanya 909 00:44:24,760 --> 00:44:29,160 menambahkan 13 untuk setiap satu dari surat-surat, bodoh dalam arti bahwa jika Anda hanya 910 00:44:29,160 --> 00:44:31,890 memiliki sedikit waktu luang di tangan Anda dan pensil, atau Anda hanya berpikir itu 911 00:44:31,890 --> 00:44:35,260 melalui di kepala Anda, Anda bisa mencoba semua tambahan mungkin - satu, dua, 912 00:44:35,260 --> 00:44:38,470 tiga, titik, titik, titik, 25 hanya memutar seluruh alfabet, dan 913 00:44:38,470 --> 00:44:40,860 akhirnya, Anda akan mengetahui pesan apa ini. 914 00:44:40,860 --> 00:44:43,700 Jadi jika Anda melakukan sesuatu seperti ini di sekolah dasar lewat pesan ke 915 00:44:43,700 --> 00:44:46,830 sahabat, jika sekolah dasar Anda guru hanya membaca melalui 916 00:44:46,830 --> 00:44:50,320 pesan dan brute memaksa solusi, Anda mungkin mendapatkan 917 00:44:50,320 --> 00:44:52,550 jawaban dengan itu. 918 00:44:52,550 --> 00:44:54,970 >> Sekarang tentu saja, di dunia nyata, kriptografi yang lebih canggih. 919 00:44:54,970 --> 00:45:00,120 Ini adalah potongan teks dari sistem komputer yang memiliki username dan 920 00:45:00,120 --> 00:45:03,630 password, karena hampir semua dari kita lakukan, dan ini adalah apa kata sandi Anda mungkin 921 00:45:03,630 --> 00:45:07,260 terlihat seperti jika disimpan pada hard Anda drive tetapi dalam bentuk terenkripsi. 922 00:45:07,260 --> 00:45:11,050 Ini bukan hanya rotasi huruf, A adalah B dan B adalah C. Ini 923 00:45:11,050 --> 00:45:15,620 jauh lebih canggih, tetapi menggunakan apa yang umumnya dikenal sebagai kunci rahasia 924 00:45:15,620 --> 00:45:16,690 kriptografi. 925 00:45:16,690 --> 00:45:20,210 Gambar ini menceritakan berikut cerita dengan beberapa ikon. 926 00:45:20,210 --> 00:45:22,250 >> Di sebelah kiri, kita memiliki apa yang kita akan menyebutnya teks biasa. 927 00:45:22,250 --> 00:45:25,420 Dalam dunia kriptografi, polos teks hanya pesan asli 928 00:45:25,420 --> 00:45:29,050 ditulis dalam bahasa Inggris atau Perancis atau bahasa apapun. 929 00:45:29,050 --> 00:45:32,405 Jika Anda ingin mengenkripsi, kita akan lulus itu pictorially melalui gembok, sehingga 930 00:45:32,405 --> 00:45:35,580 beberapa jenis algoritma, beberapa fungsi atau program yang seseorang menulis 931 00:45:35,580 --> 00:45:39,880 yang mengacak huruf mudah-mudahan lebih complicatedly dari sekedar menambahkan 13 932 00:45:39,880 --> 00:45:40,980 untuk masing-masing. 933 00:45:40,980 --> 00:45:43,780 >> Apa yang Anda dapatkan dari proses yang di tengah ada disebut cyphertext. 934 00:45:43,780 --> 00:45:44,850 Jadi semacam kata seksi. 935 00:45:44,850 --> 00:45:47,630 Itu hanya berarti itu dienkripsi versi teks biasa. 936 00:45:47,630 --> 00:45:52,570 Dan hanya jika Anda memiliki rahasia yang sama, 13 atau minus 13, apakah Anda dapat 937 00:45:52,570 --> 00:45:54,970 mendekripsi pesan seperti itu. 938 00:45:54,970 --> 00:45:57,770 >> Jadi pada Soal Set Dua, antara hal-hal akan Anda lakukan jika dalam Hacker 939 00:45:57,770 --> 00:46:01,860 Edition, Anda harus menulis kode untuk crack password tersebut, mencari tahu 940 00:46:01,860 --> 00:46:05,170 apa mereka dan bagaimana mereka dienkripsi, meskipun kami memberi Anda sedikit 941 00:46:05,170 --> 00:46:06,460 bimbingan sepanjang jalan. 942 00:46:06,460 --> 00:46:09,320 Dalam Edisi Standar, kami memperkenalkan beberapa cipher, enkripsi 943 00:46:09,320 --> 00:46:12,400 mekanisme, yang disebut Caesar, satu disebut Vigenere, yang masih 944 00:46:12,400 --> 00:46:16,100 cipher rotasi di mana A menjadi sesuatu, B menjadi sesuatu, tapi 945 00:46:16,100 --> 00:46:18,820 Anda harus melakukannya pemrograman karena memang akan menjadi rahasia 946 00:46:18,820 --> 00:46:22,840 kunci yang terlibat yang biasanya nomor atau kata kunci yang hanya 947 00:46:22,840 --> 00:46:26,420 pengirim dan penerima tersebut pesan harus memahami. 948 00:46:26,420 --> 00:46:28,660 >> Sekarang, ini sebenarnya memiliki inkarnasi di dunia nyata. 949 00:46:28,660 --> 00:46:32,910 Ini, misalnya, sedikit yatim Rahasia cincin decoder Annie, dan Anda 950 00:46:32,910 --> 00:46:35,180 benar-benar dapat menerapkan ini rotasi cipher - 951 00:46:35,180 --> 00:46:37,930 A menjadi sesuatu, B menjadi sesuatu - dengan beberapa roda, 952 00:46:37,930 --> 00:46:40,840 satu di luar, satu di dalam sehingga jika Anda memutar roda atau 953 00:46:40,840 --> 00:46:44,170 cincin, Anda benar-benar dapat berbaris huruf dengan huruf yang berbeda, 954 00:46:44,170 --> 00:46:45,430 mendapatkan kode rahasia. 955 00:46:45,430 --> 00:46:48,110 Dan sebagai cliffhanger untuk hari ini, apa yang saya pikir saya akan lakukan adalah sedikit 956 00:46:48,110 --> 00:46:52,170 throwback bahwa jika Anda menyalakan TV pada tanggal 24 Desember, Anda dapat menonton 957 00:46:52,170 --> 00:46:55,390 nauseum iklan film 24 jam berturut-turut. 958 00:46:55,390 --> 00:47:06,030 Tapi untuk hari ini, saya akan membukanya di sini dan memberi kita hanya dua menit dari 959 00:47:06,030 --> 00:47:13,493 Christmas Story pedagogis yang relevan dengan sesama kecil bernama Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [VIDEO PEMUTARAN] 961 00:47:14,400 --> 00:47:17,420 >> -Jadilah itu diketahui segala-galanya bahwa Ralph Parker dengan ini menunjuk 962 00:47:17,420 --> 00:47:20,650 anggota Little Orphan Annie rahasia lingkaran dan berhak atas semua 963 00:47:20,650 --> 00:47:23,460 penghargaan dan manfaat terjadi hal tersebut. 964 00:47:23,460 --> 00:47:25,990 >> -Ditandatangani di Little Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Ditandatangani, Pierre Andre dalam tinta. 966 00:47:30,100 --> 00:47:34,270 Honors dan manfaat sudah pada usia sembilan. 967 00:47:34,270 --> 00:47:39,440 >> [BERTERIAK PADA RADIO] 968 00:47:39,440 --> 00:47:40,770 >> Ayo, mari kita dengan itu. 969 00:47:40,770 --> 00:47:44,965 Aku tidak butuh semua itu jazz tentang penyelundup dan bajak laut. 970 00:47:44,965 --> 00:47:48,270 >> Dengar-besok malam untuk menyimpulkan petualangan hitam 971 00:47:48,270 --> 00:47:49,650 kapal bajak laut. 972 00:47:49,650 --> 00:47:53,320 Sekarang, saatnya untuk Secret Annie Pesan untuk Anda anggota 973 00:47:53,320 --> 00:47:55,720 dari lingkaran rahasia. 974 00:47:55,720 --> 00:47:56,580 Ingat, anak-anak. 975 00:47:56,580 --> 00:48:01,720 Hanya anggota Annie Rahasia Lingkaran dapat memecahkan kode pesan rahasia Annie. 976 00:48:01,720 --> 00:48:05,872 Ingat, Annie tergantung pada Anda. 977 00:48:05,872 --> 00:48:08,670 Set pin ke B2. 978 00:48:08,670 --> 00:48:11,000 Berikut adalah pesan. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Saya dalam pertemuan rahasia pertama saya. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre berada di suara besar malam ini. 983 00:48:21,650 --> 00:48:24,830 Aku tahu pesan itu malam ini benar-benar penting. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25. 985 00:48:26,400 --> 00:48:28,540 Itulah pesan dari Annie dirinya. 986 00:48:28,540 --> 00:48:30,086 Ingat, jangan bilang siapa-siapa. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Detik kemudian, aku di kamar hanya di rumah di mana anak laki-laki sembilan 989 00:48:38,710 --> 00:48:42,668 bisa duduk di privasi dan decode. 990 00:48:42,668 --> 00:48:47,628 Aha, B. Aku pergi ke yang berikutnya. 991 00:48:47,628 --> 00:48:53,060 E. Kata pertama adalah "menjadi." S. Itu datang lebih mudah sekarang. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 Itu R. 994 00:48:55,940 --> 00:48:56,900 >> -Ayolah, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Aku harus pergi. 996 00:48:57,860 --> 00:48:59,780 >> -Aku akan segera turun, Ma. 997 00:48:59,780 --> 00:49:01,030 Jagoan Gee. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Pastikan untuk. 1000 00:49:08,220 --> 00:49:09,500 Pastikan untuk apa? 1001 00:49:09,500 --> 00:49:11,660 Apa Sedikit Orphan Annie coba katakan? 1002 00:49:11,660 --> 00:49:12,844 Pastikan untuk apa? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie, Randy telah harus pergi. 1004 00:49:14,732 --> 00:49:16,148 Maukah Anda keluar? 1005 00:49:16,148 --> 00:49:17,092 >> -Baiklah, Ma. 1006 00:49:17,092 --> 00:49:18,510 Aku akan segera keluar. 1007 00:49:18,510 --> 00:49:20,270 >> -Aku semakin dekat sekarang. 1008 00:49:20,270 --> 00:49:21,823 Ketegangan itu mengerikan. 1009 00:49:21,823 --> 00:49:23,045 Apa itu? 1010 00:49:23,045 --> 00:49:26,510 Nasib planet mungkin menggantung di keseimbangan. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, Randy harus pergi. 1012 00:49:28,985 --> 00:49:32,680 >> -Aku akan keluar untuk menangis dengan suara keras. 1013 00:49:32,680 --> 00:49:33,956 >> -Hampir sana. 1014 00:49:33,956 --> 00:49:35,140 Jemariku terbang. 1015 00:49:35,140 --> 00:49:36,880 Pikiranku adalah perangkap baja. 1016 00:49:36,880 --> 00:49:38,010 Setiap pori bergetar. 1017 00:49:38,010 --> 00:49:39,878 Itu hampir jelas. 1018 00:49:39,878 --> 00:49:43,210 Ya, ya, ya, ya, ya. 1019 00:49:43,210 --> 00:49:49,030 >> -Pastikan untuk minum Ovaltine Anda. 1020 00:49:49,030 --> 00:49:50,280 Ovaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 Sebuah payah komersial? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Bajingan. 1025 00:50:00,694 --> 00:50:01,900 >> [END VIDEO PEMUTARAN] 1026 00:50:01,900 --> 00:50:04,260 >> SPEAKER 1: Ini adalah CS50, dan bahwa akan Soal Set Dua. 1027 00:50:04,260 --> 00:50:06,305 Sampai jumpa minggu depan. 1028 00:50:06,305 --> 00:50:08,800 >> SPEAKER 2: Pada berikutnya CS50, hal ini terjadi. 1029 00:50:08,800 --> 00:50:11,060 >> SPEAKER 1: Jadi satu topik kita belum melihat sejauh ini 1030 00:50:11,060 --> 00:50:12,220 bahwa fungsi pointer. 1031 00:50:12,220 --> 00:50:14,540 Sekarang, fungsi pointer hanya alamat publik 1032 00:50:14,540 --> 00:50:17,000 fungsi, tetapi banyak seperti - 1033 00:50:17,000 --> 00:50:18,250 anak seorang - 1034 00:50:18,250 --> 00:50:19,670