1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Walkthrough - Masalah Set 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Harvard University] 3 00:00:05,170 --> 00:00:07,490 [Ini adalah CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Baiklah. Halo, semua orang, dan selamat datang Walkthrough 2. 5 00:00:10,750 --> 00:00:14,330 Pertama, saya ingin mengucapkan selamat kepada Anda untuk finishing pset 1. 6 00:00:14,330 --> 00:00:18,140 Saya tahu bahwa itu bisa saja agak sulit bagi sebagian dari Anda, 7 00:00:18,140 --> 00:00:20,460 bisa saja komputer pertama Anda program yang Anda tulis, 8 00:00:20,460 --> 00:00:24,500 tapi ingat bahwa pada akhir ini, ketika Anda melihat kembali pada akhir semester, 9 00:00:24,500 --> 00:00:29,820 Anda akan melihat pset 1 dan Anda akan berkata, "Hei, saya bisa melakukan itu dalam 5 menit." 10 00:00:29,820 --> 00:00:35,700 Jadi tahu dan percaya bahwa pada akhir ini Anda pasti akan menemukan pset 1 cukup sederhana. 11 00:00:35,700 --> 00:00:40,640 Tapi untuk sekarang ini adalah prestasi besar, dan selamat untuk mendapatkan dilakukan. 12 00:00:40,640 --> 00:00:44,010 Sekarang, juga catatan cepat sebelum kita masuk ke dalam daging walkthrough. 13 00:00:44,010 --> 00:00:48,340 Saya hanya ingin membuat catatan singkat bahwa saya kadang-kadang tidak akan memiliki cukup waktu 14 00:00:48,340 --> 00:00:52,500 selama penelusuran untuk pergi melalui setiap cara untuk melakukan sejumlah masalah 15 00:00:52,500 --> 00:00:56,140 dan agak hanya mungkin fokus pada 1 atau 2 jenis implementasi, 16 00:00:56,140 --> 00:00:57,750 cara-cara yang Anda bisa melakukan hal ini. 17 00:00:57,750 --> 00:01:01,970 Tapi itu tidak berarti bahwa Anda dilarang melakukannya dengan cara lain. 18 00:01:01,970 --> 00:01:05,980 Sering ada, seperti ilmu komputer, berbagai cara dalam melakukan sesuatu, 19 00:01:05,980 --> 00:01:12,190 dan jadi pasti merasa bebas untuk menggunakan berbagai jenis solusi daripada saya mungkin telah disajikan. 20 00:01:12,190 --> 00:01:14,520 [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. Sebuah Bagian dari Pertanyaan - 1. Caesar - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Baiklah. Jadi masalah set 2: Crypto adalah satu yang menyenangkan. 23 00:01:20,650 --> 00:01:24,500 Sekali lagi, dengan pset setiap Anda akan mulai dengan bagian pertanyaan 24 00:01:24,500 --> 00:01:29,600 yang akan dilakukan pada bagian Anda dengan sesama mengajar ditugaskan Anda. 25 00:01:29,600 --> 00:01:31,670 Kami tidak akan pergi melalui ini selama walkthrough, 26 00:01:31,670 --> 00:01:35,100 tetapi mereka pasti akan membantu Anda menyelesaikan pset tersebut. 27 00:01:35,100 --> 00:01:38,100 Jadi bagian pertama dari sejumlah masalah adalah Caesar. 28 00:01:38,100 --> 00:01:43,470 Dan sebagainya di Caesar seseorang akan melewati Anda kunci dengan integer, 29 00:01:43,470 --> 00:01:48,420 dan Anda akan mengenkripsi string teks yang mereka berikan Anda 30 00:01:48,420 --> 00:01:50,670 dan memberi mereka kembali hal yang dienkripsi. 31 00:01:50,670 --> 00:01:56,050 Jika ada yang menonton A Christmas Story, ada contoh yang ada. 32 00:01:56,050 --> 00:01:59,090 Kemudian bagian kedua dari sejumlah masalah yang Vigenere, 33 00:01:59,090 --> 00:02:01,790 yang merupakan teknik enkripsi yang lebih canggih. 34 00:02:01,790 --> 00:02:05,640 Dan jadi kita akan menulis dlm kode sepotong teks, 35 00:02:05,640 --> 00:02:09,600 kecuali bukan hanya dengan satu bilangan bulat, kita benar-benar akan menyalinnya 36 00:02:09,600 --> 00:02:13,340 dengan kata kunci bahwa pengguna akan memberikan kami. 37 00:02:16,270 --> 00:02:22,090 Oke, jadi alat pertama di hari toolbox sebenarnya akan memperbarui alat. 38 00:02:22,090 --> 00:02:26,430 Pada forum diskusi kita akan melihat hal-hal seperti, "Mengapa tidak pekerjaan ini?" 39 00:02:26,430 --> 00:02:28,110 "Kenapa tidak Kirim 50 bekerja?" 40 00:02:28,110 --> 00:02:31,830 dan sering solusinya sebenarnya hanya untuk memperbarui alat Anda. 41 00:02:31,830 --> 00:02:36,730 Dan jadi jika Anda hanya berjalan dalam jendela terminal di sudo alat Anda yum-y - 42 00:02:36,730 --> 00:02:40,040 itu bendera mengatakan ya, memperbarui segala sesuatu - update, 43 00:02:40,040 --> 00:02:42,280 maka alat Anda akan memperbarui jika perlu. 44 00:02:42,280 --> 00:02:46,960 Dan tidak ada salahnya jika Anda sudah berada di versi terbaru dari alat. 45 00:02:46,960 --> 00:02:51,280 Maka hanya akan mengatakan tidak update baru yang tersedia dan Anda dapat terus bekerja bersama. 46 00:02:51,280 --> 00:02:55,800 Tapi ini baik untuk melaksanakan bahkan setiap kali Anda membuka alat 47 00:02:55,800 --> 00:02:57,140 karena kita masih sangat banyak - 48 00:02:57,140 --> 00:03:00,320 kadang-kadang jika kita datang ke sebuah bug - memperbaikinya dalam alat. 49 00:03:00,320 --> 00:03:03,180 Jadi pastikan bahwa Anda memiliki versi terbaru dari alat 50 00:03:03,180 --> 00:03:07,710 dan menjalankan yang update di sana. 51 00:03:07,710 --> 00:03:14,360 Baiklah. Jadi karena kita sedang berhadapan dengan huruf dan mengubah, enciphering hal, 52 00:03:14,360 --> 00:03:20,410 kita akan benar-benar ingin menjadi teman terbaik dengan grafik ASCII kami. 53 00:03:20,410 --> 00:03:24,350 Ada yang banyak secara online, jika Anda menemukan. Mungkin bahkan membuat Anda sendiri. 54 00:03:24,350 --> 00:03:29,950 Pada dasarnya, dengan setiap huruf dan angka setiap dan setiap karakter 55 00:03:29,950 --> 00:03:32,210 ada nomor yang terkait dengan mereka, 56 00:03:32,210 --> 00:03:38,670 dan jadi ada baiknya untuk melihat nilai-nilai ASCII mereka bersama surat yang sebenarnya. 57 00:03:38,670 --> 00:03:42,310 Itu pasti akan membantu Anda dalam sejumlah masalah. 58 00:03:42,310 --> 00:03:45,750 Satu hal yang benar-benar membantu saya dalam set masalah adalah untuk benar-benar mencetaknya, 59 00:03:45,750 --> 00:03:48,380 dan seperti yang saya alami, saya benar-benar akan menggambar di atasnya, 60 00:03:48,380 --> 00:03:51,150 menulis, "Jika ini harus pergi ke sana, maka ..." 61 00:03:51,150 --> 00:03:55,270 Jenis menggambar di atasnya dan tandai itu, menjadi teman terbaik dengan tabel ASCII Anda. 62 00:03:57,240 --> 00:04:00,750 Kemudian kita memiliki alat-alat lain yang kami miliki. 63 00:04:00,750 --> 00:04:03,750 Kali ini bukan benar-benar mendorong pengguna untuk semua masukan mereka 64 00:04:03,750 --> 00:04:05,230 kita akan melakukan kombinasi. 65 00:04:05,230 --> 00:04:06,880 Kita akan meminta mereka untuk beberapa masukan, 66 00:04:06,880 --> 00:04:11,350 tapi kami juga akan hanya menggunakan argumen pada baris perintah. 67 00:04:11,350 --> 00:04:15,600 Jadi ketika mereka menjalankan program mereka, biasanya Anda katakan / hello., Misalnya, 68 00:04:15,600 --> 00:04:17,310 jika program anda adalah hello.c. 69 00:04:17,310 --> 00:04:22,500 Tapi kali ini bukan hanya mengatakan bahwa, mereka dapat menempatkan kata-kata, argumen sesudahnya. 70 00:04:22,500 --> 00:04:27,210 Dan jadi kita akan menggunakan apa pun yang mereka lulus dalam kepada kita sebagai masukan mereka juga, 71 00:04:27,210 --> 00:04:31,720 sehingga bergerak lebih dari sekedar disuruh untuk integer tetapi juga menggunakan argumen baris perintah. 72 00:04:31,720 --> 00:04:36,590 Dan kemudian kita akan masuk ke array dan string, yang kita akan menggunakan banyak juga. 73 00:04:41,460 --> 00:04:44,810 Berikut ini hanya sebuah contoh dari 1 tabel ASCII mini. 74 00:04:44,810 --> 00:04:48,460 Seperti yang saya katakan, setiap surat sesuai dengan nomor, 75 00:04:48,460 --> 00:04:52,510 sehingga membiasakan diri dengan itu. Ini akan berguna. 76 00:04:52,510 --> 00:04:55,610 Dan kemudian ketika kita mulai melakukan beberapa ASCIIMath berurusan dengan angka - 77 00:04:55,610 --> 00:05:00,110 menambahkan, mengurangkan mereka - maka pasti baik untuk merujuk pada tabel ini. 78 00:05:02,860 --> 00:05:06,920 Jadi, inilah contoh dari cipher Caesar - sesuatu yang Anda mungkin telah bermain dengan. 79 00:05:06,920 --> 00:05:11,190 Itu hanya sebuah roda. Pada dasarnya, ada alfabet luar dan kemudian ada alfabet batin. 80 00:05:11,190 --> 00:05:15,290 Jadi di sini adalah contoh dari cipher Caesar tetapi dengan kunci 0. 81 00:05:15,290 --> 00:05:21,540 Pada dasarnya, A sejajar dengan A, B sejalan dengan B, semua jalan sampai ke Z. 82 00:05:21,540 --> 00:05:26,590 Tapi kemudian mengatakan kami ingin kunci dari 3, misalnya. 83 00:05:26,590 --> 00:05:33,280 Kemudian kita akan memutar roda batin sehingga A sekarang sejalan dengan D, dll 84 00:05:33,280 --> 00:05:35,250 Dan jadi ini pada dasarnya apa yang kita lakukan. 85 00:05:35,250 --> 00:05:38,340 Kami tidak memiliki roda, tapi apa yang akan kita lakukan adalah membuat program kami 86 00:05:38,340 --> 00:05:44,490 jenis menggeser alfabet bersama kami sejumlah angka. 87 00:05:44,490 --> 00:05:48,650 Jadi seperti yang saya katakan sebelumnya, kita akan berhadapan dengan argumen baris perintah 88 00:05:48,650 --> 00:05:50,390 serta mendapatkan integer. 89 00:05:50,390 --> 00:05:55,050 Jadi cara bahwa pengguna akan menjalankan Anda Program Caesar adalah dengan mengatakan. / Caesar 90 00:05:55,050 --> 00:05:58,090 dan kemudian memasukkan nomor setelah itu. 91 00:05:58,090 --> 00:06:01,130 Dan jumlah tersebut merupakan kunci, pergeseran, 92 00:06:01,130 --> 00:06:06,740 berapa kali Anda akan memutar roda batin cipher Caesar Anda. 93 00:06:06,740 --> 00:06:08,390 Dan sehingga Anda lihat di sini contoh. 94 00:06:08,390 --> 00:06:14,550 Jika kita memasuki huruf dari A L dalam cipher Caesar kami, 95 00:06:14,550 --> 00:06:19,520 maka akan input D melalui O karena itulah setiap huruf bergeser lebih dari 3 kali, 96 00:06:19,520 --> 00:06:22,080 seperti contoh dari roda yang saya menunjukkan Anda. 97 00:06:22,080 --> 00:06:25,300 Jadi jika Anda masukkan, misalnya, ini adalah CS50! 98 00:06:25,300 --> 00:06:27,960 maka juga akan memindahkan semua huruf. 99 00:06:27,960 --> 00:06:31,040 Dan itu hal yang penting di kedua Caesar dan Vigenere 100 00:06:31,040 --> 00:06:34,890 adalah bahwa kita akan melewatkan setiap non-surat. 101 00:06:34,890 --> 00:06:39,160 Jadi spasi, karakter, dll, angka, kita akan menjaga mereka sama. 102 00:06:39,160 --> 00:06:42,920 Kita hanya akan menggeser huruf dalam kasus ini. 103 00:06:42,920 --> 00:06:45,870 Jadi seperti yang Anda lihat di roda, kita hanya memiliki surat-surat yang tersedia bagi kita, 104 00:06:45,870 --> 00:06:50,150 jadi kami hanya ingin menggeser huruf dan mengenkripsi surat-surat. 105 00:06:51,370 --> 00:06:56,720 Jadi hal pertama yang harus dilakukan, Anda melihat bahwa penggunaan untuk Caesar dalam masalah set 2 106 00:06:56,720 --> 00:07:05,280 adalah dengan menjalankan Caesar dan kemudian memasukkan nomor saat Anda menjalankannya di terminal. 107 00:07:05,280 --> 00:07:10,940 Jadi apa yang perlu kita lakukan adalah entah bagaimana mendapatkan kunci itu dan mengaksesnya. 108 00:07:10,940 --> 00:07:14,730 Dan jadi kita ingin entah bagaimana melihat itu akan menjadi argumen baris perintah kedua. 109 00:07:14,730 --> 00:07:20,950 Yang pertama akan menjadi / caesar., Dan yang berikutnya akan menjadi nomor kunci. 110 00:07:22,190 --> 00:07:29,200 Jadi sebelum kami memiliki int main (void) untuk memulai program C kami. 111 00:07:29,200 --> 00:07:31,790 Kita akan mengupas lapisan sedikit 112 00:07:31,790 --> 00:07:34,720 dan benar-benar melihat bahwa bukan lewat di void fungsi utama kami 113 00:07:34,720 --> 00:07:37,920 kami benar-benar berurusan dengan 2 parameter. 114 00:07:37,920 --> 00:07:44,070 Kami memiliki int bernama argc dan kemudian array dari string disebut argv. 115 00:07:44,070 --> 00:07:46,030 Jadi argc adalah integer, 116 00:07:46,030 --> 00:07:49,640 dan itu merupakan jumlah argumen berlalu dalam program Anda. 117 00:07:49,640 --> 00:07:53,590 Dan kemudian argv sebenarnya daftar argumen berlalu. 118 00:07:53,590 --> 00:08:00,820 Semua argumen adalah string, dan sebagainya argv mewakili sebuah array, daftar, string. 119 00:08:01,830 --> 00:08:03,990 Mari kita bicara tentang array sedikit. 120 00:08:03,990 --> 00:08:05,940 Array dasarnya struktur data baru. 121 00:08:05,940 --> 00:08:09,660 Kami memiliki ints, kami telah dua kali lipat, kita memiliki string, dan sekarang kami memiliki array. 122 00:08:09,660 --> 00:08:13,820 Array adalah struktur data yang dapat menyimpan beberapa nilai dari jenis yang sama, 123 00:08:13,820 --> 00:08:18,320 jadi pada dasarnya, daftar jenis apa pun yang Anda inginkan. 124 00:08:18,320 --> 00:08:24,400 Pada dasarnya, jika Anda ingin daftar bilangan bulat semua dalam 1 variabel, 125 00:08:24,400 --> 00:08:29,090 maka Anda akan menciptakan variabel baru yang array tipe int. 126 00:08:29,090 --> 00:08:34,450 Jadi array berbasis-nol, yang berarti bahwa elemen pertama dari array adalah pada indeks 0. 127 00:08:34,450 --> 00:08:41,799 Jika array adalah panjang 4, seperti dalam contoh ini, maka elemen terakhir Anda akan berada di indeks 3, 128 00:08:41,799 --> 00:08:44,810 yaitu 4 - 1. 129 00:08:45,940 --> 00:08:48,420 Jadi untuk membuat array, Anda akan melakukan sesuatu seperti ini. 130 00:08:48,420 --> 00:08:51,440 Katakanlah Anda ingin array ganda. 131 00:08:51,440 --> 00:08:56,520 Hal ini berlaku untuk semua jenis tipe data, meskipun. 132 00:08:56,520 --> 00:09:00,210 Jadi katakanlah Anda ingin sebuah array ganda. Katakanlah Anda ingin menyebutnya kotak. 133 00:09:00,210 --> 00:09:04,760 Sama seperti Anda akan menginisialisasi setiap ganda lainnya, 134 00:09:04,760 --> 00:09:09,760 Anda akan mengatakan ganda dan kemudian nama, tapi kali ini kita menempatkan tanda kurung siku, 135 00:09:09,760 --> 00:09:13,570 dan kemudian nomor akan ada panjang array. 136 00:09:13,570 --> 00:09:16,840 Perhatikan bahwa dalam array kita tidak pernah bisa mengubah panjang, 137 00:09:16,840 --> 00:09:21,230 sehingga Anda selalu harus menentukan dan memilih berapa banyak kotak, 138 00:09:21,230 --> 00:09:25,440 berapa banyak nilai array Anda akan terus. 139 00:09:25,440 --> 00:09:31,820 Jadi untuk menetapkan nilai yang berbeda dalam array Anda, Anda akan menggunakan sintaks berikut, 140 00:09:31,820 --> 00:09:33,200 seperti yang Anda lihat pada slide. 141 00:09:33,200 --> 00:09:37,620 Kotak 0 indeks Anda memiliki akan diatur menjadi 1,2, 142 00:09:37,620 --> 00:09:42,180 Indeks kotak 1 set menjadi 2,4, dll 143 00:09:42,180 --> 00:09:47,910 Jadi sekarang kita telah meninjau array sedikit, mari kita kembali ke argc dan argv. 144 00:09:47,910 --> 00:09:52,220 Kita tahu bahwa argv sekarang array dari string. 145 00:09:52,220 --> 00:09:55,080 Jadi ketika pengguna lewat di - mengatakan mereka sedang menjalankan program - 146 00:09:55,080 --> 00:09:58,740 mereka katakan. / hello David Malan, 147 00:09:58,740 --> 00:10:05,160 program apa yang akan lakukan untuk Anda sudah benar-benar datang dengan apa yang argc dan argv adalah. 148 00:10:05,160 --> 00:10:07,620 Jadi Anda tidak perlu khawatir tentang itu. 149 00:10:07,620 --> 00:10:14,370 Argc dalam hal ini akan menjadi 3 karena melihat 3 kata yang berbeda dipisahkan oleh spasi. 150 00:10:14,370 --> 00:10:18,850 Dan begitu kemudian array dalam hal ini, indeks pertama akan / hello., 151 00:10:18,850 --> 00:10:21,770 yang berikutnya David, yang Malan yang berikutnya. 152 00:10:21,770 --> 00:10:25,640 Apakah ada yang melihat langsung apa hubungan antara argv, 153 00:10:25,640 --> 00:10:28,990  array, dan argc adalah? 154 00:10:32,820 --> 00:10:38,090 Ya. Kita akan masuk ke bahwa dalam contoh di args.c. 155 00:10:38,090 --> 00:10:42,880 Mari kita lihat apakah kita dapat mengambil keuntungan dari hubungan antara 2. 156 00:10:42,880 --> 00:10:46,550 Di sini Anda mungkin menemukan bahwa dalam alat aplikasi default 157 00:10:46,550 --> 00:10:49,450 untuk membuka file c. kadang Emacs. 158 00:10:49,450 --> 00:10:54,660 Tapi kami ingin berurusan dengan gedit, sehingga apa yang dapat Anda lakukan adalah Anda bisa klik kanan pada file C Anda, 159 00:10:54,660 --> 00:11:04,580 pergi ke Properties, Open With, lalu pilih gedit, Standarkan, 160 00:11:04,580 --> 00:11:13,020 dan sekarang program Anda harus terbuka di gedit bukan Emacs. 161 00:11:14,710 --> 00:11:16,290 Sempurna. 162 00:11:17,120 --> 00:11:25,520 Jadi di sini saya punya program yang saya ingin mencetak setiap argumen baris perintah. 163 00:11:25,520 --> 00:11:32,050 Jadi apa pun pengguna masukan, saya ingin dasarnya mengembalikannya kembali kepada mereka pada baris baru. 164 00:11:32,050 --> 00:11:36,710 Jadi apa struktur yang dapat kita gunakan untuk iterate atas sesuatu - 165 00:11:36,710 --> 00:11:40,380 sesuatu yang Anda mungkin digunakan dalam 1 pset Anda? 166 00:11:40,380 --> 00:11:45,840 Jika Anda ingin pergi melalui sejumlah set hal? >> [Mahasiswa] Untuk loop. 167 00:11:45,840 --> 00:11:48,910 Untuk loop. Tepat. Jadi mari kita mulai dengan untuk loop. 168 00:11:48,910 --> 00:11:56,900 Kami memiliki untuk int i = 0. Mari kita mulai dengan variabel inisialisasi standar. 169 00:11:56,900 --> 00:12:02,370 Aku akan meninggalkan kondisi untuk mengatur dan kemudian mengatakan saya + +, akan melakukan hal-hal di sana. 170 00:12:02,370 --> 00:12:04,090 Baiklah. 171 00:12:04,090 --> 00:12:11,590 Jadi berpikir kembali ke argv, jika argv adalah daftar argumen berlalu untuk program 172 00:12:11,590 --> 00:12:15,380 dan argc adalah jumlah argumen dalam program, 173 00:12:15,380 --> 00:12:21,280 maka itu berarti bahwa argc dasarnya panjang argv, tepat, 174 00:12:21,280 --> 00:12:28,970 karena ada akan menjadi seperti banyak argumen sebagai nilai argc. 175 00:12:28,970 --> 00:12:35,910 Jadi jika kita ingin iterate atas setiap elemen dalam argv, 176 00:12:35,910 --> 00:12:43,290 kita akan ingin setiap kali mengakses variabel di argv pada indeks yang diberikan. 177 00:12:43,290 --> 00:12:49,060 Yang dapat diwakili dengan ini, kan? 178 00:12:49,060 --> 00:12:53,430 Ini variabel di sini mewakili string tertentu dalam hal ini 179 00:12:53,430 --> 00:12:57,030 karena itu adalah array string - string tertentu pada saat itu indeks yang diberikan. 180 00:12:57,030 --> 00:13:00,690 Apa yang ingin kita lakukan, dalam hal ini kita ingin mencetaknya, jadi mari kita katakan printf. 181 00:13:00,690 --> 00:13:04,680 Dan sekarang argv adalah string, jadi kami ingin menempatkan placeholder yang ada. 182 00:13:04,680 --> 00:13:08,430 Kami ingin baris baru hanya untuk membuatnya terlihat bagus. 183 00:13:08,430 --> 00:13:12,530 Jadi di sini kita memiliki loop untuk. Kami tidak memiliki kondisi belum. 184 00:13:12,530 --> 00:13:20,020 Jadi saya mulai dari 0, dan kemudian setiap kali itu akan mencetak string yang diberikan 185 00:13:20,020 --> 00:13:22,980 pada saat itu indeks tertentu dalam array. 186 00:13:22,980 --> 00:13:28,410 Jadi, ketika kita ingin berhenti mencetak elemen dalam array? 187 00:13:28,410 --> 00:13:35,720 Ketika kita sudah selesai, kan? Ketika kita telah mencapai akhir dari array. 188 00:13:35,720 --> 00:13:38,870 Jadi kita tidak ingin melebihi masa panjang array, 189 00:13:38,870 --> 00:13:43,700 dan kita sudah tahu kita tidak perlu untuk benar-benar aktif mencari tahu apa yang panjang argv adalah 190 00:13:43,700 --> 00:13:47,520 karena itu diberikan kepada kita, dan apa itu? Argc. Tepat. 191 00:13:47,520 --> 00:13:56,640 Jadi kami ingin melakukan hal ini jumlah proses argc kali. 192 00:13:56,640 --> 00:13:59,550 Saya tidak dalam direktori yang tepat. 193 00:14:02,100 --> 00:14:03,490 Baiklah. 194 00:14:03,490 --> 00:14:08,990 Sekarang mari kita membuat args. Tidak ada kesalahan, yang besar. 195 00:14:08,990 --> 00:14:11,430 Jadi mari kita jalankan args. 196 00:14:11,430 --> 00:14:15,130 Apa ini akan kembali kepada kami? Ini hanya akan mencetaknya kembali. 197 00:14:15,130 --> 00:14:18,320 "Kau diinput args ke dalam program, aku akan memberikannya kembali kepada Anda." 198 00:14:18,320 --> 00:14:23,170 Jadi katakanlah kita ingin mengatakan args maka bar foo. 199 00:14:23,170 --> 00:14:26,570 Jadi kemudian mencetaknya kembali kepada kami. Baiklah? 200 00:14:26,570 --> 00:14:30,790 Jadi ada contoh bagaimana Anda dapat menggunakan argc dan argv 201 00:14:30,790 --> 00:14:33,460 mengetahui argc yang mewakili panjang argv. 202 00:14:33,460 --> 00:14:42,750 Pastikan bahwa Anda tidak pernah dengan akses array satu melampaui panjang array 203 00:14:42,750 --> 00:14:45,140 karena C pasti akan berteriak pada Anda. 204 00:14:45,140 --> 00:14:47,560 Anda akan mendapatkan sesuatu yang disebut kesalahan segmentasi, 205 00:14:47,560 --> 00:14:52,470 yang tidak pernah menyenangkan, pada dasarnya mengatakan Anda mencoba untuk mengakses sesuatu 206 00:14:52,470 --> 00:14:55,000 yang tidak ada, bukan milik Anda. 207 00:14:55,000 --> 00:14:59,430 Jadi pastikan, dan terutama dengan pengindeksan nol-, kita tidak ingin - 208 00:14:59,430 --> 00:15:02,390 Seperti misalnya, jika kita memiliki sebuah array panjang 4, 209 00:15:02,390 --> 00:15:07,240 bahwa indeks array 4 tidak ada karena kita mulai dari 0, nol indeks. 210 00:15:07,240 --> 00:15:11,730 Ini akan menjadi sifat kedua untuk loop seperti ketika kita mulai 0. 211 00:15:11,730 --> 00:15:13,610 Jadi hanya ingat-ingat. 212 00:15:13,610 --> 00:15:22,590 Anda tidak ingin pernah mengakses indeks array yang di luar jangkauan Anda. 213 00:15:26,710 --> 00:15:32,560 Jadi kita bisa melihat sekarang bagaimana kita bisa jenis akses 214 00:15:32,560 --> 00:15:35,930 argumen baris perintah yang lulus masuk 215 00:15:35,930 --> 00:15:41,330 Tapi ketika Anda melihat string, argv sebenarnya adalah array string. 216 00:15:41,330 --> 00:15:45,740 Jadi itu sebenarnya bukan integer, tapi di Caesar kita ingin berurusan dengan bilangan bulat. 217 00:15:45,740 --> 00:15:54,430 Untungnya, ada fungsi yang diciptakan bagi kita yang benar-benar dapat mengkonversi string ke integer. 218 00:15:54,430 --> 00:15:58,710 Juga di sini kita tidak berurusan dengan input pengguna di mana kita mendorong mereka 219 00:15:58,710 --> 00:16:03,740 untuk input sini untuk kunci, jadi kita tidak bisa benar-benar reprompt dan berkata, 220 00:16:03,740 --> 00:16:07,840 "Oh, beri aku bilangan bulat yang lain, mengatakan, jika itu tidak sah." 221 00:16:07,840 --> 00:16:10,540 Tapi kita masih perlu untuk memeriksa penggunaan yang benar. 222 00:16:10,540 --> 00:16:13,520 Dalam Caesar mereka hanya diperbolehkan untuk lulus dalam 1 nomor, 223 00:16:13,520 --> 00:16:18,030 dan sehingga mereka harus menjalankan / caesar. dan kemudian mereka harus memberikan nomor. 224 00:16:18,030 --> 00:16:23,660 Jadi argc harus menjadi nomor tertentu. 225 00:16:23,660 --> 00:16:29,060 Nomor berapa yang akan jika mereka harus melewati Anda / caesar. Dan kemudian kunci? 226 00:16:29,060 --> 00:16:32,920 Apa argc? >> [Mahasiswa] 2. >> Dua. Tepat. 227 00:16:32,920 --> 00:16:35,490 Jadi Anda ingin memastikan bahwa argc adalah 2. 228 00:16:35,490 --> 00:16:39,620 Jika tidak, Anda pada dasarnya menolak untuk menjalankan program. 229 00:16:39,620 --> 00:16:43,040 Dalam utama itu fungsi yang mengatakan int main, 230 00:16:43,040 --> 00:16:47,360 jadi maka kita selalu dalam praktik kembali 0 yang baik di akhir program yang sukses. 231 00:16:47,360 --> 00:16:50,840 Jadi jika, katakanlah, mereka memberikan 3 argumen baris perintah bukannya 2 232 00:16:50,840 --> 00:16:54,350 atau memberikan 1, misalnya, maka apa yang akan Anda lakukan adalah Anda akan ingin memeriksa untuk itu 233 00:16:54,350 --> 00:16:59,900 dan kemudian kembali 1 mengatakan, tidak, saya tidak bisa melanjutkan program ini. 234 00:16:59,900 --> 00:17:03,190 [Mahasiswa] Tidak mungkin ada ruang dalam teks Anda. >> Maafkan saya? 235 00:17:03,190 --> 00:17:06,780 [Mahasiswa] Tidak mungkin ada ruang dalam teks Anda mencoba untuk mengenkripsi. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 Dalam hal teks yang kita coba untuk mengenkripsi, yang benar-benar datang kemudian 238 00:17:11,280 --> 00:17:13,970 ketika kita memberikan teks itu. 239 00:17:13,970 --> 00:17:18,260 Jadi sekarang kita hanya menerima sebagai argumen perintah jumlah sebenarnya, 240 00:17:18,260 --> 00:17:21,579 pergeseran sebenarnya untuk enkripsi Caesar. 241 00:17:21,579 --> 00:17:27,569 [Mahasiswa] Mengapa Anda perlu 2 sebagai lawan hanya 1 argc? Pasti ada 1 angka. 242 00:17:27,569 --> 00:17:32,200 Benar. Alasan mengapa kita perlu untuk argc 2 bukannya 1 243 00:17:32,200 --> 00:17:36,260 karena ketika Anda menjalankan program dan katakan. / caesar atau / hello., 244 00:17:36,260 --> 00:17:38,280 yang benar-benar dianggap sebagai argumen baris perintah. 245 00:17:38,280 --> 00:17:43,020 Jadi yang sudah memakan 1 dan begitu maka kita memasukkan 1 ekstra. 246 00:17:45,030 --> 00:17:49,440 Jadi Anda benar-benar memasukkan string dalam argumen baris perintah. 247 00:17:49,440 --> 00:17:52,730 Apa yang ingin Anda lakukan, untuk Caesar kita ingin berurusan dengan integer, 248 00:17:52,730 --> 00:17:57,180 sehingga Anda dapat menggunakan fungsi ini atoi. 249 00:17:57,180 --> 00:18:02,850 Dan pada dasarnya, Anda lulus dalam string dan kemudian akan kembali Anda kembali integer 250 00:18:02,850 --> 00:18:06,070 apakah itu mungkin untuk membuat string yang ke integer. 251 00:18:06,070 --> 00:18:10,960 Sekarang ingat ketika kita sedang berhadapan dengan hal-hal printf atau GetString, seperti itu, 252 00:18:10,960 --> 00:18:13,390 kita termasuk perpustakaan yang khusus untuk kita. 253 00:18:13,390 --> 00:18:19,450 Jadi pada awalnya kita mulai dengan tag standar sesuatu yang hash I / O, h,. Seperti itu. 254 00:18:19,450 --> 00:18:22,430 Nah, atoi tidak berada dalam salah satu perpustakaan, 255 00:18:22,430 --> 00:18:26,600 jadi apa yang harus kita lakukan adalah kita harus menyertakan perpustakaan yang tepat untuk itu. 256 00:18:26,600 --> 00:18:32,720 Jadi ingat kembali ke Walkthrough 1 di mana saya membahas fungsi manual. 257 00:18:32,720 --> 00:18:37,110 Anda mengetik manusia di terminal Anda dan kemudian diikuti dengan nama fungsi. 258 00:18:37,110 --> 00:18:39,720 Dan sehingga akan memunculkan daftar seluruh penggunaannya, 259 00:18:39,720 --> 00:18:42,890 tetapi juga akan memunculkan mana perpustakaan yang dimiliki. 260 00:18:42,890 --> 00:18:47,000 Jadi saya akan meninggalkan kepada Anda untuk menggunakan fungsi manual dengan atoi 261 00:18:47,000 --> 00:18:53,360 dan mencari tahu mana perpustakaan Anda perlu menyertakan untuk dapat menggunakan fungsi atoi. 262 00:18:54,450 --> 00:18:57,670 Jadi kita punya kunci dan sekarang datang untuk mendapatkan teks biasa, 263 00:18:57,670 --> 00:19:01,820 dan sebagainya yang benar-benar akan menjadi input pengguna di mana Anda meminta. 264 00:19:01,820 --> 00:19:05,540 Kita berurusan dengan GetInt dan GetFloat, dan sebagainya dalam vena yang sama 265 00:19:05,540 --> 00:19:07,670 kita akan berurusan dengan GetString. 266 00:19:07,670 --> 00:19:12,440 Tapi dalam kasus ini kita tidak perlu melakukan apapun sementara do atau saat loop untuk memeriksa. 267 00:19:12,440 --> 00:19:14,480 GetString pasti akan memberi kita string, 268 00:19:14,480 --> 00:19:17,630 dan kita akan mengenkripsi apa pun pengguna memberi kita. 269 00:19:17,630 --> 00:19:23,770 Sehingga Anda dapat mengasumsikan bahwa semua string pengguna diinput sudah benar. 270 00:19:23,770 --> 00:19:24,670 Besar. 271 00:19:24,670 --> 00:19:27,270 Jadi kemudian setelah Anda punya kunci dan setelah Anda punya teks, 272 00:19:27,270 --> 00:19:31,660 sekarang apa yang tersisa adalah Anda harus menulis dlm kode plaintext. 273 00:19:31,660 --> 00:19:36,530 Hanya untuk cepat menutupi lingo, plaintext adalah apa pengguna memberi Anda, 274 00:19:36,530 --> 00:19:41,030 dan ciphertext adalah apa yang Anda kembali kepada mereka. 275 00:19:42,450 --> 00:19:45,850 Jadi string, untuk dapat benar-benar pergi melalui huruf demi huruf 276 00:19:45,850 --> 00:19:48,550 karena kita harus menggeser setiap huruf, 277 00:19:48,550 --> 00:19:51,390 kita memahami bahwa string, jika kita jenis mengupas lapisan, 278 00:19:51,390 --> 00:19:54,130 kita melihat bahwa mereka hanya benar-benar daftar karakter. 279 00:19:54,130 --> 00:19:55,930 Salah satu datang setelah yang lain. 280 00:19:55,930 --> 00:20:01,690 Dan jadi kita bisa memperlakukan string sebagai array karena mereka adalah array dari karakter. 281 00:20:01,690 --> 00:20:05,640 Jadi katakanlah Anda memiliki string bernama teks, 282 00:20:05,640 --> 00:20:09,400 dan dalam bahwa teks variabel disimpan Ini adalah CS50. 283 00:20:09,400 --> 00:20:15,680 Kemudian teks pada indeks 0 akan menjadi T modal, indeks 1 akan h, dll 284 00:20:17,530 --> 00:20:23,970 Dan kemudian dengan array, dalam contoh argc di args.c, 285 00:20:23,970 --> 00:20:27,090 kami melihat bahwa kami harus iterate atas array 286 00:20:27,090 --> 00:20:32,440 dan jadi kami harus iterate dari i = 0 sampai i adalah kurang dari panjang. 287 00:20:32,440 --> 00:20:35,560 Jadi kita perlu beberapa cara untuk mencari tahu apa yang panjang string kita adalah 288 00:20:35,560 --> 00:20:37,090 jika kita akan iterate di atasnya. 289 00:20:37,090 --> 00:20:42,300 Untungnya lagi, ada fungsi ada bagi kita, meskipun di kemudian hari dalam CS50 290 00:20:42,300 --> 00:20:45,860 Anda pasti akan dapat menerapkan dan membuat fungsi sendiri 291 00:20:45,860 --> 00:20:48,260 yang dapat menghitung panjang string. 292 00:20:48,260 --> 00:20:52,120 Tapi untuk sekarang kita akan menggunakan panjang string, sehingga strlen. 293 00:20:52,120 --> 00:21:00,440 Anda lulus dalam string, dan kemudian Anda akan kembali int yang mewakili panjang string Anda. 294 00:21:00,440 --> 00:21:05,840 Mari kita lihat contoh bagaimana kita mungkin bisa iterate atas masing-masing karakter dalam sebuah string 295 00:21:05,840 --> 00:21:08,470 dan melakukan sesuatu dengan itu. 296 00:21:08,470 --> 00:21:13,250 Apa yang kita ingin lakukan adalah iterate atas setiap karakter string, 297 00:21:13,250 --> 00:21:19,150 dan apa yang ingin kita lakukan adalah kita cetak kembali setiap karakter 1 oleh 1 298 00:21:19,150 --> 00:21:22,060 kecuali kita menambahkan sesuatu yang sebelahnya. 299 00:21:22,060 --> 00:21:27,020 Jadi mari kita mulai dengan untuk loop. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Kita akan meninggalkan ruang untuk kondisi tersebut. 301 00:21:32,700 --> 00:21:36,840 Kami ingin iterate sampai kita mencapai akhir dari string, kan? 302 00:21:36,840 --> 00:21:41,340 Jadi apa fungsi memberi kita panjang string? 303 00:21:41,340 --> 00:21:43,160 [Respon siswa tidak terdengar] 304 00:21:43,160 --> 00:21:46,420 Itulah panjang argumen baris perintah. 305 00:21:46,420 --> 00:21:50,650 Tapi untuk string kita ingin menggunakan fungsi yang memberi kita panjang string. 306 00:21:50,650 --> 00:21:53,090 Jadi itu panjang string. 307 00:21:53,090 --> 00:21:57,130 Dan demikian maka Anda harus lulus dalam string untuk itu. 308 00:21:57,130 --> 00:21:59,760 Ini perlu tahu apa string yang dibutuhkan untuk menghitung panjang. 309 00:21:59,760 --> 00:22:03,160 Jadi dalam hal ini kita sedang berhadapan dengan string s. 310 00:22:04,790 --> 00:22:05,860 Besar. 311 00:22:05,860 --> 00:22:10,770 Jadi apa yang ingin kita lakukan, mari kita printf. 312 00:22:10,770 --> 00:22:14,850 Sekarang, kita ingin berurusan dengan karakter. Kami ingin mencetak setiap karakter individu. 313 00:22:14,850 --> 00:22:22,150 Bila Anda ingin mencetak pelampung, Anda akan menggunakan placeholder seperti f%. 314 00:22:22,150 --> 00:22:24,580 Dengan int Anda akan menggunakan d%. 315 00:22:24,580 --> 00:22:30,890 Dan begitu pula, dengan karakter Anda menggunakan c% untuk mengatakan saya akan mencetak karakter 316 00:22:30,890 --> 00:22:34,570 yang disimpan dalam variabel. 317 00:22:34,570 --> 00:22:40,840 Jadi kita punya ini, dan mari kita tambahkan waktu dan ruang untuk itu. 318 00:22:40,840 --> 00:22:45,430 Yang karakter yang kita gunakan? 319 00:22:45,430 --> 00:22:49,780 Kita akan menggunakan karakter apa pun kita berada di string. 320 00:22:49,780 --> 00:22:52,890 Jadi kita akan menggunakan sesuatu dengan string, 321 00:22:52,890 --> 00:22:56,420 tapi kami ingin mengakses karakter tertentu di sana. 322 00:22:56,420 --> 00:23:02,740 Jadi jika string hanya sebuah array, lalu bagaimana kita mengakses elemen dari array? 323 00:23:02,740 --> 00:23:06,480 Kami memiliki orang-orang kurung siku, dan kemudian kami menempatkan indeks di sana. 324 00:23:06,480 --> 00:23:11,820 Jadi kita memiliki tanda kurung siku. Indeks kami dalam hal ini kita hanya bisa menggunakan i. Tepat. 325 00:23:15,290 --> 00:23:22,370 Jadi di sini kita katakan kita akan mencetak karakter diikuti oleh sebuah titik dan spasi, 326 00:23:22,370 --> 00:23:30,870 dan karakter yang akan menjadi surat i dalam s string kita. 327 00:23:32,920 --> 00:23:39,330 Aku hanya akan menyimpan itu. Oke. 328 00:23:42,510 --> 00:23:46,840 Sekarang aku akan menjalankan panjang string. 329 00:23:46,840 --> 00:23:53,440 Jadi kita memiliki string disebut OMG, dan sekarang itu ditekankan bahkan lebih. 330 00:23:53,440 --> 00:23:57,870 Demikian pula, katakanlah kita benar-benar ingin mendapatkan string dari pengguna. 331 00:23:57,870 --> 00:23:59,580 Bagaimana mungkin kita melakukan ini? 332 00:23:59,580 --> 00:24:01,610 Sebelum, bagaimana kita mendapatkan int? 333 00:24:01,610 --> 00:24:08,040 Kami mengatakan GetInt, kan? Tapi ini bukan int, jadi mari kita GetString. 334 00:24:11,780 --> 00:24:17,770 Mari kita membuat panjang string. Di sini kita tidak memasukkan cepat tertentu. 335 00:24:17,770 --> 00:24:19,940 Jadi saya tidak tahu. 336 00:24:19,940 --> 00:24:23,820 Aku akan menaruh nama saya di sini dan kemudian saya bisa melakukan salah satu dari hal-hal 337 00:24:23,820 --> 00:24:29,600 di mana saya menetapkan kata untuk setiap huruf atau sesuatu seperti itu. Cool. 338 00:24:29,600 --> 00:24:31,900 Jadi itu panjang string. 339 00:24:33,000 --> 00:24:34,640 Jadi kita kembali kepada Kaisar. 340 00:24:34,640 --> 00:24:38,620 Kami memiliki beberapa alat pada bagaimana kita iterate selama string, 341 00:24:38,620 --> 00:24:41,250 bagaimana kita mengakses setiap elemen individu. 342 00:24:41,250 --> 00:24:44,720 Jadi sekarang kita bisa kembali ke program. 343 00:24:44,720 --> 00:24:48,650 Seperti yang saya sebutkan sebelumnya, dalam tabel ASCII, teman terbaik Anda, 344 00:24:48,650 --> 00:24:52,300 Anda akan melihat angka yang berkaitan dengan setiap surat. 345 00:24:52,300 --> 00:24:55,900 Jadi di sini mengatakan plaintext kami adalah aku pusing! 346 00:24:55,900 --> 00:25:01,090 Kemudian masing-masing karakter akan memiliki jumlah dan nilai ASCII yang terkait dengan itu, 347 00:25:01,090 --> 00:25:04,710 bahkan tanda kutip, bahkan ruang, bahkan tanda seru, 348 00:25:04,710 --> 00:25:06,600 sehingga Anda akan ingin untuk menjaga bahwa dalam pikiran. 349 00:25:06,600 --> 00:25:12,360 Jadi mengatakan kunci kami bahwa pengguna termasuk dalam argumen baris perintah mereka adalah 6. 350 00:25:12,360 --> 00:25:17,770 Itu berarti untuk huruf pertama, yaitu I, yang diwakili oleh 73, 351 00:25:17,770 --> 00:25:25,610 Anda ingin kembali ke mereka apa pun huruf diwakili oleh nilai ASCII dari 73 + 6. 352 00:25:25,610 --> 00:25:29,020 Dalam hal ini yang akan menjadi 79. 353 00:25:30,840 --> 00:25:35,040 Sekarang kita ingin pergi ke karakter berikutnya. 354 00:25:35,040 --> 00:25:40,960 Jadi berikutnya dalam indeks 1 dari plaintext akan tanda kutip. 355 00:25:40,960 --> 00:25:46,780 Tapi ingat kita hanya ingin menulis dlm kode huruf. 356 00:25:46,780 --> 00:25:50,040 Jadi kami ingin memastikan bahwa tanda kutip sebenarnya tetap sama, 357 00:25:50,040 --> 00:25:54,310 bahwa kita tidak berubah dari 39 ke 45 adalah apapun. 358 00:25:54,310 --> 00:25:57,150 Kami ingin menyimpannya sebagai apostrof. 359 00:25:57,150 --> 00:26:00,780 Jadi kami ingin ingat untuk hanya menulis dlm kode huruf 360 00:26:00,780 --> 00:26:04,560 karena kami ingin semua simbol lain untuk tetap tidak berubah dalam program kami. 361 00:26:04,560 --> 00:26:07,130 Hal lain yang kita inginkan adalah untuk melestarikan kapitalisasi. 362 00:26:07,130 --> 00:26:10,250 Jadi, ketika Anda memiliki huruf besar, itu harus tetap sebagai suatu huruf besar. 363 00:26:10,250 --> 00:26:12,830 Lowercases harus tetap sebagai huruf kecil. 364 00:26:13,620 --> 00:26:19,480 Jadi beberapa fungsi yang berguna untuk dapat menangani surat hanya enciphering 365 00:26:19,480 --> 00:26:22,380 dan tetap menjaga kapitalisasi hal-hal 366 00:26:22,380 --> 00:26:25,130 adalah fungsi isalpha, isupper, islower. 367 00:26:25,130 --> 00:26:29,270 Dan jadi ini adalah fungsi yang mengembalikan Anda nilai Boolean. 368 00:26:29,270 --> 00:26:34,180 Pada dasarnya, benar atau salah. Apakah ini sebuah huruf besar? Apakah alfanumerik ini? 369 00:26:34,180 --> 00:26:37,180 Apakah ini surat, pada dasarnya. 370 00:26:37,180 --> 00:26:41,070 Jadi di sini adalah 3 contoh bagaimana Anda akan menggunakan fungsi tersebut. 371 00:26:41,070 --> 00:26:47,060 Pada dasarnya, Anda bisa menguji apakah nilai yang dikembalikan kepada Anda oleh fungsi yang benar atau salah 372 00:26:47,060 --> 00:26:49,400 berdasarkan masukan itu. 373 00:26:49,400 --> 00:26:54,880 Entah melakukan sesuatu yang tidak menulis dlm kode atau cipher atau pastikan bahwa itu huruf besar, dll 374 00:26:54,880 --> 00:27:01,080 [Mahasiswa] Dapatkah Anda hanya menjelaskan mereka sedikit lebih dan bagaimana Anda menggunakannya? >> Ya, pasti. 375 00:27:01,080 --> 00:27:08,470 Jadi jika kita melihat kembali, di sini kita memiliki modal, saya, kan? 376 00:27:08,470 --> 00:27:14,550 Jadi kita tahu bahwa saya pergi ke O karena saya + 6 adalah O. 377 00:27:14,550 --> 00:27:18,740 Tapi kami ingin memastikan bahwa O akan menjadi modal O. 378 00:27:18,740 --> 00:27:22,940 Jadi pada dasarnya, itu adalah jenis akan mengubah masukan kami. 379 00:27:22,940 --> 00:27:26,870 Jadi apakah itu besar atau tidak akan seperti mengubah cara kita berurusan dengan itu. 380 00:27:26,870 --> 00:27:32,360 Jadi jika kita menggunakan fungsi isupper pada bahwa indeks tertentu, 381 00:27:32,360 --> 00:27:36,480 sehingga isupper ("I"), yang mengembalikan bagi kita yang benar, sehingga kita tahu bahwa itu atas. 382 00:27:36,480 --> 00:27:40,360 Jadi berdasarkan itu, kemudian kami akan pergi ke rumus 383 00:27:40,360 --> 00:27:42,750 bahwa Anda akan menggunakan untuk menggeser hal-hal di Caesar, 384 00:27:42,750 --> 00:27:46,560 demikian maka pada dasarnya, ada akan menjadi formula yang sedikit berbeda jika huruf besar 385 00:27:46,560 --> 00:27:50,670 sebagai lawan huruf kecil. Masuk akal? 386 00:27:51,020 --> 00:27:52,760 Ya. Jangan khawatir. 387 00:27:54,900 --> 00:27:58,990 Saya berbicara sedikit tentang menambahkan 6 sampai surat, yang tidak cukup masuk akal 388 00:27:58,990 --> 00:28:05,500 kecuali ketika kita jenis memahami bahwa karakter ini 389 00:28:05,500 --> 00:28:08,920 adalah jenis dipertukarkan dengan bilangan bulat. 390 00:28:08,920 --> 00:28:11,250 Apa yang kita lakukan adalah kita jenis pengecoran penggunaan implisit. 391 00:28:11,250 --> 00:28:18,100 Kami akan pergi ke pengecoran sedikit kemudian di mana Anda mengambil nilai dan Anda mengubahnya menjadi jenis yang berbeda 392 00:28:18,100 --> 00:28:20,440 daripada awalnya. 393 00:28:20,440 --> 00:28:25,910 Tetapi dengan pset ini kita akan dapat jenis bergantian menggunakan karakter 394 00:28:25,910 --> 00:28:30,880 dan berhubungan nilai integer. 395 00:28:30,880 --> 00:28:35,140 Jadi, jika Anda hanya membungkus karakter hanya dengan tanda kutip tunggal, 396 00:28:35,140 --> 00:28:40,390 maka Anda akan dapat bekerja dengan dengan bilangan bulat, berurusan dengan itu sebagai integer. 397 00:28:40,390 --> 00:28:48,040 Jadi C ibukota berhubungan dengan 67. F huruf kecil berhubungan dengan 102. 398 00:28:48,040 --> 00:28:51,480 Sekali lagi, jika Anda ingin tahu nilai-nilai ini, melihat tabel ASCII Anda. 399 00:28:51,480 --> 00:28:56,160 Jadi mari kita pergi ke beberapa contoh bagaimana Anda mungkin dapat mengurangi dan menambahkan, 400 00:28:56,160 --> 00:29:03,130 bagaimana Anda dapat benar-benar benar-benar bekerja dengan karakter tersebut, menggunakannya secara bergantian. 401 00:29:03,870 --> 00:29:11,350 Saya katakan ASCIIMath yang akan menghitung penambahan karakter ke integer 402 00:29:11,350 --> 00:29:17,590 dan kemudian menampilkan karakter yang dihasilkan serta nilai ASCII yang dihasilkan. 403 00:29:17,590 --> 00:29:22,290 Dan jadi di sini saya katakan - Kita akan berurusan dengan bagian ini kemudian - 404 00:29:22,290 --> 00:29:29,100 tetapi pada dasarnya, saya mengatakan bahwa pengguna harus mengatakan ASCIIMath dijalankan bersama dengan kunci, 405 00:29:29,100 --> 00:29:30,880 dan aku mengatakan bahwa kunci yang akan menjadi nomor 406 00:29:30,880 --> 00:29:34,600 dengan yang kita akan menambahkan karakter ini. 407 00:29:34,600 --> 00:29:38,560 Jadi di sini melihat bahwa karena aku menuntut kunci, 408 00:29:38,560 --> 00:29:40,590 karena aku menuntut bahwa mereka memberi saya 1 hal, 409 00:29:40,590 --> 00:29:45,600 Saya hanya ingin menerima / asciimath. Dan kunci. 410 00:29:45,600 --> 00:29:49,330 Jadi aku akan menuntut argc sama dengan 2. 411 00:29:49,330 --> 00:29:54,360 Jika tidak, maka aku akan kembali 1 dan program akan keluar. 412 00:29:55,070 --> 00:29:58,540 Jadi saya katakan kunci tidak akan menjadi argumen baris perintah pertama, 413 00:29:58,540 --> 00:30:05,080 itu akan menjadi yang kedua, dan seperti yang Anda lihat di sini, 414 00:30:05,080 --> 00:30:11,790 Aku akan mengubah itu menjadi integer. 415 00:30:15,740 --> 00:30:19,230 Lalu aku akan mengatur karakter untuk menjadi r. 416 00:30:19,230 --> 00:30:23,970 Perhatikan bahwa jenis chr variabel sebenarnya integer. 417 00:30:23,970 --> 00:30:30,480 Cara yang saya dapat menggunakan r sebagai integer adalah dengan membungkus itu dengan tanda kutip tunggal. 418 00:30:33,850 --> 00:30:40,560 Jadi kembali ke pernyataan printf kita di mana kita memiliki tempat untuk karakter 419 00:30:40,560 --> 00:30:43,590 dan kemudian tempat untuk integer, 420 00:30:43,590 --> 00:30:49,450 karakter diwakili oleh chr, dan integer adalah kuncinya. 421 00:30:49,450 --> 00:30:54,320 Dan begitu kemudian kita akan dalam hasil menambahkan 2 bersama-sama. 422 00:30:54,320 --> 00:30:58,420 Jadi kita akan menambahkan r + apapun kuncinya adalah, 423 00:30:58,420 --> 00:31:03,520 dan kemudian kita akan mencetak hasil itu. 424 00:31:06,210 --> 00:31:14,220 Jadi mari kita membuat asciimath. Ini up to date, jadi mari kita hanya menjalankan asciimath. 425 00:31:14,220 --> 00:31:18,290 Oh, tapi lihat, ia tidak melakukan apa-apa karena kita tidak benar-benar memberikan kunci. 426 00:31:18,290 --> 00:31:23,850 Jadi ketika baru saja kembali 1, fungsi utama kami, itu hanya dikembalikan kembali kepada kami. 427 00:31:23,850 --> 00:31:29,250 Jadi mari kita lulus dalam kunci. Seseorang memberi saya nomor. >> [Mahasiswa] 4. 428 00:31:29,250 --> 00:31:30,920 4. Oke. 429 00:31:30,920 --> 00:31:39,280 Jadi r meningkat sebesar 4 akan memberi kita v, yang sesuai dengan nilai ASCII dari 118. 430 00:31:39,280 --> 00:31:43,880 Jadi itu semacam masuk akal bahwa - 431 00:31:43,880 --> 00:31:51,250 Sebenarnya, bisa saya meminta Anda, apa yang Anda pikirkan nilai ASCII dari r adalah jika r + 4 adalah 118? 432 00:31:53,070 --> 00:31:55,470 Kemudian yeah, r adalah 114. 433 00:31:55,470 --> 00:32:03,010 Jadi jika Anda melihat di meja ASCII kemudian, tentu saja, Anda akan melihat r yang diwakili oleh 114. 434 00:32:03,010 --> 00:32:08,610 Jadi sekarang kita tahu bahwa kita dapat menambahkan bilangan bulat untuk karakter, ini tampaknya cukup sederhana. 435 00:32:08,610 --> 00:32:12,740 Kita hanya akan iterate atas string seperti kita lihat dalam contoh sebelumnya. 436 00:32:12,740 --> 00:32:17,170 Kami akan memeriksa apakah itu surat. 437 00:32:17,170 --> 00:32:20,420 Jika ya, maka kita akan beralih dengan apapun kuncinya adalah. 438 00:32:20,420 --> 00:32:23,650 Cukup sederhana, kecuali bila Anda bisa seperti ini, 439 00:32:23,650 --> 00:32:32,140 Anda melihat bahwa z, diwakili oleh 122, maka akan memberikan karakter yang berbeda. 440 00:32:32,140 --> 00:32:37,770 Kami benar-benar ingin tinggal dalam alfabet kita, kan? 441 00:32:37,770 --> 00:32:43,180 Jadi kita perlu mengetahui beberapa cara semacam membungkus di sekitar. 442 00:32:43,180 --> 00:32:47,190 Ketika Anda mencapai zed dan Anda ingin meningkatkan oleh sejumlah tertentu, 443 00:32:47,190 --> 00:32:51,230 Anda tidak ingin pergi ke luar bagian alfabet ASCII; 444 00:32:51,230 --> 00:32:54,140 Anda ingin membungkus kembali semua jalan ke A. 445 00:32:54,140 --> 00:32:58,550 Tapi perlu diingat Anda masih melestarikan kasus. 446 00:32:58,550 --> 00:33:00,980 Jadi mengetahui bahwa surat tidak bisa menjadi simbol 447 00:33:00,980 --> 00:33:05,290 seperti simbol tidak akan berubah juga. 448 00:33:05,290 --> 00:33:08,170 Dalam pset terakhir Anda pasti tidak perlu, 449 00:33:08,170 --> 00:33:14,310 tapi pilihan adalah untuk mengimplementasikan pset serakah Anda dengan menggunakan fungsi modulus. 450 00:33:14,310 --> 00:33:17,230 Tapi sekarang kita benar-benar akan perlu menggunakan modulus, 451 00:33:17,230 --> 00:33:19,900 jadi mari kita pergi ke ini sedikit. 452 00:33:19,900 --> 00:33:26,920 Pada dasarnya, ketika Anda memiliki x modulo y, yang memberikan Anda sisa x dibagi dengan y. 453 00:33:26,920 --> 00:33:30,930 Berikut adalah beberapa contoh di sini. Kami memiliki 27% 15. 454 00:33:30,930 --> 00:33:36,200 Pada dasarnya, ketika Anda kurangi 15 dari 27 sebanyak mungkin tanpa mendapatkan negatif 455 00:33:36,200 --> 00:33:39,060 maka Anda mendapatkan 12 kiri atas. 456 00:33:39,060 --> 00:33:44,650 Jadi itulah jenis seperti dalam konteks matematika, tapi bagaimana kita bisa benar-benar menggunakan ini? 457 00:33:44,650 --> 00:33:47,100 Ini akan berguna untuk wrapover kami. 458 00:33:47,100 --> 00:33:55,420 Untuk ini, mari kita katakan saja saya meminta Anda semua untuk membagi menjadi 3 kelompok. 459 00:33:55,420 --> 00:33:58,010 Kadang-kadang Anda melakukan ini dalam kelompok dan sesuatu seperti itu. 460 00:33:58,010 --> 00:34:01,320 Katakanlah Aku berkata, "Oke, saya ingin kalian semua dibagi menjadi 3." 461 00:34:01,320 --> 00:34:04,240 Bagaimana mungkin Anda melakukannya? 462 00:34:04,240 --> 00:34:06,810 [Respon siswa tidak terdengar] Ya, tepatnya. Hitung off. Oke. 463 00:34:06,810 --> 00:34:10,260 Mari kita benar-benar melakukan itu. Apakah Anda ingin memulai? 464 00:34:10,260 --> 00:34:13,810 [Siswa menghitung off] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Tapi ingat ... >> [Mahasiswa] Oh, maaf. 466 00:34:16,620 --> 00:34:18,730 Itu poin yang benar-benar baik. 467 00:34:18,730 --> 00:34:24,130 Kau bilang 4, tapi kami benar-benar ingin Anda untuk mengatakan 1 karena kita hanya ingin 3 kelompok. 468 00:34:24,130 --> 00:34:30,159 Jadi, bagaimana - Tidak, itu adalah contoh yang sangat baik karena maka bagaimana mungkin Anda katakan 1? 469 00:34:30,159 --> 00:34:33,370 Apa hubungan antara 4 dan 1? 470 00:34:33,370 --> 00:34:36,760 Nah, 4 mod 3 adalah 1. 471 00:34:36,760 --> 00:34:41,460 Jadi jika Anda melanjutkan, Anda akan 2. 472 00:34:41,460 --> 00:34:44,540 Jadi kita memiliki 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Sekali lagi, Anda benar-benar orang 5. Bagaimana Anda tahu untuk mengatakan 2 bukannya 5? 474 00:34:49,420 --> 00:34:53,760 Anda mengatakan 5 mod 3 adalah 2. 475 00:34:53,760 --> 00:34:59,100 Saya ingin melihat berapa banyak kelompok 3 yang tersisa, maka mana urutan am I. 476 00:34:59,100 --> 00:35:02,860 Dan begitu kemudian jika kita terus menyusuri seluruh ruangan, 477 00:35:02,860 --> 00:35:07,760 maka kita akan melihat bahwa kita selalu benar-benar menerapkan fungsi mod untuk diri kita sendiri 478 00:35:07,760 --> 00:35:09,990 untuk jenis menghitung off. 479 00:35:09,990 --> 00:35:14,490 Itu lebih merupakan suatu jenis contoh nyata tentang bagaimana Anda dapat menggunakan modulo 480 00:35:14,490 --> 00:35:17,960 karena saya yakin sebagian besar dari kita mungkin sudah melalui proses yang 481 00:35:17,960 --> 00:35:19,630 di mana kita sudah menghitung off. 482 00:35:19,630 --> 00:35:21,840 Setiap pertanyaan tentang Modulo? 483 00:35:21,840 --> 00:35:25,360 Ini akan menjadi sangat penting untuk memahami konsep ini, 484 00:35:25,360 --> 00:35:28,640 jadi saya ingin memastikan kalian mengerti. 485 00:35:28,640 --> 00:35:34,660 [Mahasiswa] Jika ada sisanya ada, apakah itu memberikan nomor yang sebenarnya? 486 00:35:34,660 --> 00:35:40,430 Jika salah satu dari 3 pertama mereka telah melakukannya, akan itu telah memberi mereka apa yang mereka benar-benar, 487 00:35:40,430 --> 00:35:43,310 atau akan berikan kepada mereka [tak terdengar] >> Itu pertanyaan yang bagus. 488 00:35:43,310 --> 00:35:48,750 Ketika tidak ada sisa untuk Modulo - sehingga mengatakan Anda memiliki 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 yang benar-benar memberikan Anda kembali 0. 490 00:35:53,670 --> 00:35:57,290 Kita akan membicarakannya sedikit kemudian. 491 00:35:58,810 --> 00:36:07,720 Oh yeah, misalnya, orang ke-3 - 3 mod 3 sebenarnya 0 tapi dia bilang 3. 492 00:36:07,720 --> 00:36:14,900 Jadi itulah jenis seperti tangkapan batin, misalnya, 493 00:36:14,900 --> 00:36:17,620 seperti apa, jika mod adalah 0 maka aku akan menjadi orang ke-3. 494 00:36:17,620 --> 00:36:22,740 Tapi kita akan masuk ke jenis bagaimana kita mungkin ingin berurusan dengan apa yang nantinya 0. 495 00:36:22,740 --> 00:36:32,750 Jadi sekarang kita entah bagaimana memiliki cara pemetaan zed ke sebelah kanan surat. 496 00:36:32,750 --> 00:36:34,920 Jadi sekarang kita sudah melalui contoh-contoh ini, 497 00:36:34,920 --> 00:36:37,880 kita semacam melihat bagaimana Caesar bisa bekerja. 498 00:36:37,880 --> 00:36:42,640 Anda melihat 2 huruf dan kemudian Anda melihat mereka bergeser. 499 00:36:42,640 --> 00:36:44,430 Jadi mari kita coba dan menyatakan bahwa dalam hal formula. 500 00:36:44,430 --> 00:36:46,940 Formula ini sebenarnya diberikan kepada Anda di spec, 501 00:36:46,940 --> 00:36:52,070 tapi mari kita lihat jenis melalui apa artinya setiap variabel. 502 00:36:52,070 --> 00:36:55,000 Hasil akhir kami akan menjadi ciphertext. 503 00:36:55,000 --> 00:36:58,300 Jadi ini mengatakan bahwa karakter engan dari ciphertext 504 00:36:58,300 --> 00:37:02,500 akan sesuai dengan karakter i dari plaintext. 505 00:37:02,500 --> 00:37:08,130 Itu masuk akal karena kami ingin selalu berbaris hal-hal ini. 506 00:37:08,130 --> 00:37:13,480 Jadi itu akan menjadi karakter engan dari ciphertext ditambah k, yang merupakan kunci kami - 507 00:37:13,480 --> 00:37:17,230 yang masuk akal - dan kemudian kita memiliki mod 26. 508 00:37:17,230 --> 00:37:19,860 Ingat kembali ketika kami memiliki zed 509 00:37:19,860 --> 00:37:24,190 kami tidak ingin masuk ke karakter, jadi kami ingin mod 510 00:37:24,190 --> 00:37:26,540 dan jenis membungkus alfabet. 511 00:37:26,540 --> 00:37:33,430 Setelah zed Anda akan pergi ke a, b, c, d, sampai Anda sampai ke nomor yang benar. 512 00:37:33,430 --> 00:37:44,690 Jadi kita tahu bahwa zed, jika + 6, akan memberi kita f karena setelah zed datang a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Jadi mari kita ingat kita tahu pasti bahwa zed + 6 akan memberi kita f. 514 00:37:52,530 --> 00:38:03,530 Dalam nilai ASCII, z adalah 122 dan f adalah 102. 515 00:38:03,530 --> 00:38:10,570 Jadi kita harus menemukan beberapa cara untuk membuat kami rumus Caesar memberi kita 102 516 00:38:10,570 --> 00:38:13,590 setelah mengambil di 122. 517 00:38:13,590 --> 00:38:19,550 Jadi jika kita hanya menerapkan rumus,% ('z' + 6) 26, yang benar-benar memberi Anda 24 518 00:38:19,550 --> 00:38:25,980 karena 122 + 6 adalah 128, 128% 26 memberikan 24 sisanya. 519 00:38:25,980 --> 00:38:29,140 Tapi itu tidak benar-benar berarti f. Itu pasti tidak 102. 520 00:38:29,140 --> 00:38:33,590 Itu juga bukan huruf 6 dalam alfabet. 521 00:38:33,590 --> 00:38:41,550 Jadi jelas, kita perlu memiliki beberapa cara tweaking ini sedikit. 522 00:38:42,970 --> 00:38:51,340 Dalam hal alfabet biasa, kita tahu bahwa z adalah huruf 26 dan f adalah 6. 523 00:38:51,340 --> 00:38:55,460 Tapi kami dalam ilmu komputer, sehingga kita akan indeks pada 0. 524 00:38:55,460 --> 00:39:00,690 Jadi bukannya z menjadi nomor 26, kita akan mengatakan itu nomor 25 525 00:39:00,690 --> 00:39:02,630 karena adalah 0. 526 00:39:02,630 --> 00:39:04,770 Jadi sekarang mari kita menerapkan formula ini. 527 00:39:04,770 --> 00:39:11,710 Kami memiliki z diwakili oleh 25 + 6, yang memberikan Anda 31. 528 00:39:11,710 --> 00:39:15,790 Dan 31 mod 26 memberi Anda 5 sebagai sisanya. 529 00:39:15,790 --> 00:39:20,500 Itu sempurna karena kita tahu bahwa f adalah huruf ke-5 dalam alfabet. 530 00:39:20,500 --> 00:39:26,400 Tapi itu masih tidak f, kan? Ini masih belum 102. 531 00:39:26,400 --> 00:39:32,730 Jadi untuk pset ini, tantangan akan mencoba untuk mencari tahu hubungan 532 00:39:32,730 --> 00:39:36,910 antara mengkonversi antara nilai-nilai ASCII dan indeks alfabet. 533 00:39:36,910 --> 00:39:40,280 Pada dasarnya, apa yang akan Anda ingin lakukan, Anda ingin memulai dengan nilai-nilai ASCII, 534 00:39:40,280 --> 00:39:45,390 tapi kemudian Anda ingin entah bagaimana menerjemahkannya ke indeks alfabet 535 00:39:45,390 --> 00:39:52,610 kemudian menghitung apa surat itu harus - pada dasarnya, apa yang indeks alfabet adalah 536 00:39:52,610 --> 00:39:57,660 dari karakter cipher - kemudian menerjemahkannya kembali ke nilai-nilai ASCII. 537 00:39:57,660 --> 00:40:04,870 Jadi jika Anda mencabut tabel ASCII Anda, kemudian mencoba dan menemukan hubungan antara, katakanlah, 102 dan 5 538 00:40:04,870 --> 00:40:10,440 atau 122 dan 25. 539 00:40:12,140 --> 00:40:15,690 Kami telah mendapat kunci kami dari argumen baris perintah, kita sudah plaintext, 540 00:40:15,690 --> 00:40:17,520 kami telah dienkripsi itu. 541 00:40:17,520 --> 00:40:19,820 Sekarang semua yang tersisa untuk dilakukan adalah mencetaknya. 542 00:40:19,820 --> 00:40:22,040 Kita bisa melakukan ini beberapa cara yang berbeda. 543 00:40:22,040 --> 00:40:24,570 Apa yang kita bisa lakukan adalah benar-benar mencetak seperti yang kita pergi bersama. 544 00:40:24,570 --> 00:40:28,250 Seperti yang kita iterate atas karakter dalam string, 545 00:40:28,250 --> 00:40:31,660 kita hanya bisa hanya mencetak benar maka ketika kita menghitungnya. 546 00:40:31,660 --> 00:40:36,030 Atau, Anda juga bisa menyimpannya dalam array dan memiliki sebuah array karakter 547 00:40:36,030 --> 00:40:39,280 dan pada akhirnya iterate atas bahwa seluruh array dan mencetaknya. 548 00:40:39,280 --> 00:40:40,980 Jadi, Anda memiliki beberapa pilihan untuk itu. 549 00:40:40,980 --> 00:40:47,280 Dan ingat bahwa% c akan menjadi tempat untuk mencetak karakter. 550 00:40:47,280 --> 00:40:50,420 Jadi ada yang kita miliki Caesar, dan sekarang kita beralih ke Vigenere, 551 00:40:50,420 --> 00:40:57,580 yang sangat mirip dengan Caesar tapi hanya sedikit lebih kompleks. 552 00:40:57,580 --> 00:41:03,310 Jadi pada dasarnya dengan Vigenere adalah Anda akan lewat di kata kunci. 553 00:41:03,310 --> 00:41:06,510 Jadi, bukannya nomor, Anda akan memiliki sebuah string, 554 00:41:06,510 --> 00:41:09,200 dan sehingga akan bertindak sebagai kata kunci Anda. 555 00:41:09,200 --> 00:41:14,440 Lalu, seperti biasa, Anda akan mendapatkan prompt untuk string dari user 556 00:41:14,440 --> 00:41:19,050 dan kemudian menulis dlm kode dan kemudian memberi mereka kembali ciphertext. 557 00:41:19,050 --> 00:41:24,650 Jadi seperti yang saya katakan, itu sangat mirip dengan Caesar, kecuali bukan pergeseran oleh sejumlah tertentu, 558 00:41:24,650 --> 00:41:30,620 jumlah ini benar-benar akan berubah setiap waktu dari karakter ke karakter. 559 00:41:30,620 --> 00:41:34,890 Untuk menyatakan bahwa jumlah sebenarnya bergeser, itu diwakili oleh huruf keyboard. 560 00:41:34,890 --> 00:41:43,150 Jadi jika Anda memasukkan dalam pergeseran, misalnya, maka yang akan sesuai dengan pergeseran dari 0. 561 00:41:43,150 --> 00:41:45,900 Jadi sekali lagi kembali ke indeks alfabet. 562 00:41:45,900 --> 00:41:49,100 Apa yang mungkin berguna jika Anda melihat bahwa kita benar-benar berurusan dengan nilai-nilai ASCII 563 00:41:49,100 --> 00:41:51,790 serta surat-surat, serta indeks alfabet, 564 00:41:51,790 --> 00:41:58,020 mungkin menemukan atau membuat meja sendiri ASCII Anda yang menunjukkan indeks alfabet dari 0 sampai 25, 565 00:41:58,020 --> 00:42:03,750 melalui z, dan nilai-nilai ASCII sehingga Anda dapat melihat jenis hubungan 566 00:42:03,750 --> 00:42:07,020 dan sketsa keluar dan mencoba dan menemukan beberapa pola. 567 00:42:07,020 --> 00:42:11,010 Demikian pula, jika Anda bergeser pada contoh tertentu dengan f - 568 00:42:11,010 --> 00:42:21,110 dan ini adalah baik f ​​kecil atau huruf besar - maka itu akan sesuai dengan 5. 569 00:42:21,110 --> 00:42:24,180 Apakah kita baik sejauh ini? 570 00:42:25,770 --> 00:42:30,050 Rumus untuk Vigenere sedikit berbeda. 571 00:42:30,050 --> 00:42:32,960 Pada dasarnya, Anda melihat bahwa itu hanya seperti Caesar, 572 00:42:32,960 --> 00:42:37,390 kecuali bukan hanya k kita memiliki k indeks j. 573 00:42:37,390 --> 00:42:44,810 Perhatikan bahwa kita tidak menggunakan i karena pada dasarnya, panjang kata kunci 574 00:42:44,810 --> 00:42:49,850 belum tentu panjang ciphertext kami. 575 00:42:49,850 --> 00:42:56,130 Ini akan menjadi lebih jelas sedikit ketika kita melihat contoh bahwa saya memiliki sedikit nanti. 576 00:42:56,130 --> 00:43:03,160 Pada dasarnya, jika Anda menjalankan program Anda dengan kata kunci ohai, 577 00:43:03,160 --> 00:43:08,560 maka itu berarti bahwa setiap kali, ohai akan menjadi pergeseran Anda. 578 00:43:08,560 --> 00:43:11,060 Jadi tergantung pada apa posisi Anda berada di kata kunci Anda, 579 00:43:11,060 --> 00:43:15,800 Anda akan menggeser karakter tertentu Anda ciphertext dengan jumlah itu. 580 00:43:15,800 --> 00:43:19,630 Sekali lagi, seperti Caesar, kami ingin memastikan bahwa kami menjaga kapitalisasi hal-hal 581 00:43:19,630 --> 00:43:22,900 dan kami menulis dlm kode huruf saja, bukan karakter atau spasi. 582 00:43:22,900 --> 00:43:26,330 Jadi melihat kembali ke Caesar pada fungsi yang Anda mungkin telah digunakan, 583 00:43:26,330 --> 00:43:32,570 cara yang Anda memutuskan bagaimana untuk menggeser sesuatu, dan menerapkan bahwa untuk program anda di sini. 584 00:43:32,570 --> 00:43:35,260 Jadi mari kita memetakan ini. 585 00:43:35,260 --> 00:43:39,680 Kami memiliki plaintext yang kita sudah dari pengguna dari GetString 586 00:43:39,680 --> 00:43:44,090 mengatakan ini ... adalah CS50! 587 00:43:44,090 --> 00:43:47,090 Kemudian kita memiliki kata kunci dari ohai. 588 00:43:47,090 --> 00:43:50,930 The 4 karakter pertama adalah cukup sederhana. 589 00:43:50,930 --> 00:43:55,580 Kita tahu bahwa T akan digeser oleh o, 590 00:43:55,580 --> 00:44:01,990 maka h akan digeser oleh h, i akan digeser oleh. 591 00:44:01,990 --> 00:44:04,610 Di sini Anda melihat bahwa mewakili 0, 592 00:44:04,610 --> 00:44:11,940 jadi maka nilai akhir sebenarnya hanya surat yang sama seperti sebelumnya. 593 00:44:11,940 --> 00:44:15,250 Kemudian s digeser oleh i. 594 00:44:15,250 --> 00:44:19,370 Tapi kemudian Anda memiliki periode ini di sini. 595 00:44:19,370 --> 00:44:25,960 Kami tidak ingin menulis dlm kode itu, jadi maka kita tidak mengubahnya dengan apapun 596 00:44:25,960 --> 00:44:31,280 dan hanya mencetak periode berubah. 597 00:44:31,280 --> 00:44:38,020 [Mahasiswa] Saya tidak mengerti bagaimana Anda tahu bahwa ini digeser oleh - Mana Anda - >> Oh, maaf. 598 00:44:38,020 --> 00:44:41,620 Di bagian atas di sini Anda melihat bahwa baris perintah argumen ohai sini, 599 00:44:41,620 --> 00:44:43,740 itu akan menjadi kata kunci. 600 00:44:43,740 --> 00:44:49,550 Dan jadi pada dasarnya, Anda bersepeda di atas karakter dalam kata kunci. 601 00:44:49,550 --> 00:44:52,020 [Mahasiswa] Jadi o akan menggeser sama - 602 00:44:52,020 --> 00:44:56,260 Jadi o sesuai dengan jumlah tertentu dalam alfabet. 603 00:44:56,260 --> 00:44:58,400 [Mahasiswa] Kanan. Tapi dari mana Anda mendapatkan bagian dari CS50? 604 00:44:58,400 --> 00:45:02,540 Oh. Itu di GetString mana Anda seperti, "Beri aku string untuk mengkodekan." 605 00:45:02,540 --> 00:45:07,510 [Mahasiswa] Mereka akan memberikan Anda bahwa argumen untuk bergeser 606 00:45:07,510 --> 00:45:09,380 dan kemudian Anda akan meminta string pertama Anda. >> Ya. 607 00:45:09,380 --> 00:45:12,440 Jadi ketika mereka menjalankan program, mereka akan memasukkan kata kunci 608 00:45:12,440 --> 00:45:14,740 dalam argumen baris perintah mereka ketika mereka menjalankannya. 609 00:45:14,740 --> 00:45:19,740 Kemudian setelah Anda telah memeriksa bahwa mereka sudah benar-benar memberi Anda 1 dan tidak lebih, tidak kurang, 610 00:45:19,740 --> 00:45:23,750 maka Anda akan meminta mereka untuk string, mengatakan, "Beri aku sebuah string." 611 00:45:23,750 --> 00:45:27,630 Jadi, di sanalah dalam kasus ini mereka memberi Anda ini ... adalah CS50! 612 00:45:27,630 --> 00:45:32,090 Jadi Anda akan menggunakan dan menggunakan ohai dan iterate atas. 613 00:45:32,090 --> 00:45:38,200 Perhatikan bahwa di sini kita melompati enkripsi periode, 614 00:45:38,200 --> 00:45:51,660 tetapi dalam hal posisi kami untuk ohai, yang berikutnya kami menggunakan o. 615 00:45:51,660 --> 00:45:54,990 Dalam hal ini agak sulit untuk melihat karena itulah 4, 616 00:45:54,990 --> 00:45:57,710 jadi mari kita lanjutkan sedikit. Hanya menempel dengan saya di sini. 617 00:45:57,710 --> 00:46:02,960 Lalu kami memiliki i dan s, yang kemudian diterjemahkan oleh o dan h masing-masing. 618 00:46:02,960 --> 00:46:09,370 Lalu kami memiliki ruang, dan sebagainya maka kita tahu bahwa kita tidak akan menulis dlm kode ruang. 619 00:46:09,370 --> 00:46:18,930 Tetapi perhatikan bahwa alih-alih pergi ke di tempat ini di sini, 620 00:46:18,930 --> 00:46:28,330 kita mengenkripsi oleh - Saya tidak tahu apakah Anda dapat melihat bahwa - di sini. 621 00:46:28,330 --> 00:46:33,710 Jadi tidak seperti Anda benar-benar telah ditentukan, katakanlah, o pergi di sini, h diletakkan di sini, 622 00:46:33,710 --> 00:46:39,200 yang berjalan di sini, saya pergi di sini, o, h,, i, o, h,, i. Anda tidak melakukan itu. 623 00:46:39,200 --> 00:46:43,760 Anda hanya menggeser posisi Anda dalam kata kunci 624 00:46:43,760 --> 00:46:51,020 ketika Anda tahu bahwa Anda benar-benar akan mengenkripsi surat yang sebenarnya. 625 00:46:51,020 --> 00:46:53,920 Apakah itu semacam masuk akal? 626 00:46:53,920 --> 00:46:55,800 Oke. 627 00:46:56,490 --> 00:46:58,500 Jadi hanya beberapa pengingat. 628 00:46:58,500 --> 00:47:03,760 Anda ingin memastikan bahwa Anda hanya maju ke huruf berikutnya dalam kata kunci Anda 629 00:47:03,760 --> 00:47:06,390 jika karakter dalam plaintext Anda adalah surat. 630 00:47:06,390 --> 00:47:09,120 Jadi katakan kami di o. 631 00:47:09,120 --> 00:47:19,310 Kami melihat bahwa karakter berikutnya, indeks i dari plaintext, adalah angka, misalnya. 632 00:47:19,310 --> 00:47:31,630 Kemudian kita tidak memajukan j, indeks untuk kata kunci kita, sampai kita mencapai surat lagi. 633 00:47:31,630 --> 00:47:36,230 Sekali lagi, Anda juga ingin memastikan bahwa Anda sampul ke awal kata kunci 634 00:47:36,230 --> 00:47:37,770 ketika Anda berada di akhir itu. 635 00:47:37,770 --> 00:47:42,030 Jika Anda lihat di sini kita berada di i, yang berikutnya harus o. 636 00:47:42,030 --> 00:47:47,690 Jadi Anda ingin menemukan beberapa cara untuk dapat sampul ke awal kata kunci Anda 637 00:47:47,690 --> 00:47:49,470 setiap kali Anda mencapai akhir. 638 00:47:49,470 --> 00:47:55,040 Dan begitu lagi, apa jenis operator berguna dalam kasus untuk membungkus di sekitar? 639 00:47:56,630 --> 00:47:59,840 Seperti dalam penghitungan off contoh. 640 00:47:59,840 --> 00:48:03,710 [Mahasiswa] Tanda persen. >> Ya, tanda persen, yaitu modulo. 641 00:48:03,710 --> 00:48:11,250 Jadi modulo akan berguna di sini ketika Anda ingin membungkus atas indeks dalam ohai Anda. 642 00:48:11,250 --> 00:48:17,700 Dan hanya sedikit cepat: Cobalah untuk memikirkan membungkus atas kata kunci sedikit seperti off menghitung, 643 00:48:17,700 --> 00:48:23,590 di mana jika ada 3 kelompok, orang ke-4, 644 00:48:23,590 --> 00:48:30,610 jumlah mereka bahwa mereka mengatakan adalah 4 mod 3, yang 1. 645 00:48:30,610 --> 00:48:32,880 Jadi mencoba dan berpikir dengan cara itu. 646 00:48:34,770 --> 00:48:42,740 Seperti yang Anda lihat dalam formula, di mana pun Anda memiliki ci dan kemudian pi tapi kemudian kj, 647 00:48:42,740 --> 00:48:44,700 Anda ingin memastikan bahwa Anda melacak mereka. 648 00:48:44,700 --> 00:48:47,580 Anda tidak perlu menyebutnya i, Anda tidak perlu menyebutnya j, 649 00:48:47,580 --> 00:48:53,270 tetapi Anda ingin memastikan bahwa Anda melacak posisi bahwa Anda berada di dalam plaintext Anda 650 00:48:53,270 --> 00:48:55,790 serta posisi yang Anda berada di dalam kata kunci Anda 651 00:48:55,790 --> 00:48:59,840 karena mereka belum tentu akan menjadi sama. 652 00:48:59,840 --> 00:49:06,400 Tidak hanya kata kunci - itu bisa menjadi panjang sekali berbeda dari plaintext Anda. 653 00:49:06,400 --> 00:49:09,140 Juga, plaintext Anda, ada angka dan karakter, 654 00:49:09,140 --> 00:49:14,450 sehingga tidak akan sempurna cocok bersama-sama. Ya. 655 00:49:14,450 --> 00:49:19,280 [Mahasiswa] Apakah ada fungsi untuk mengubah kasus? 656 00:49:19,280 --> 00:49:24,530 Dapatkah Anda mengubah ke ibukota A? >> Ya, pasti ada. 657 00:49:24,530 --> 00:49:27,890 Anda dapat memeriksa - Saya percaya toupper itu, semua kata 1. 658 00:49:30,650 --> 00:49:36,310 Tapi ketika Anda mencoba untuk cipher hal dan melestarikan teks, 659 00:49:36,310 --> 00:49:39,350 yang terbaik pada dasarnya memiliki kasus yang terpisah. 660 00:49:39,350 --> 00:49:42,040 Jika itu huruf besar, maka Anda ingin bergeser ini 661 00:49:42,040 --> 00:49:46,460 karena dalam rumus Anda, ketika Anda melihat kembali bagaimana kita harus jenis pergi 662 00:49:46,460 --> 00:49:50,900 bergantian antara cara ASCII mewakili angka 663 00:49:50,900 --> 00:49:55,020 dan indeks alfabet yang sebenarnya, kami ingin memastikan 664 00:49:55,020 --> 00:50:01,850 ada akan menjadi semacam pola yang Anda akan digunakan. 665 00:50:01,850 --> 00:50:04,580 Catatan lain pada pola, sebenarnya. 666 00:50:04,580 --> 00:50:07,250 Anda akan pasti akan berurusan dengan angka. 667 00:50:07,250 --> 00:50:11,280 Cobalah untuk tidak menggunakan nomor ajaib, yang merupakan contoh dari gaya. 668 00:50:11,280 --> 00:50:18,470 Jadi mengatakan Anda ingin sesuatu yang setiap pergeseran waktu dengan seperti - 669 00:50:18,470 --> 00:50:22,400 Oke, jadi petunjuk, spoiler lain adalah ketika Anda akan menggeser sesuatu 670 00:50:22,400 --> 00:50:26,310 dengan jumlah tertentu, cobalah untuk tidak menyatakan bahwa dengan jumlah yang sebenarnya 671 00:50:26,310 --> 00:50:32,810 melainkan mencoba dan melihat apakah Anda dapat menggunakan nilai ASCII, yang akan jenis lebih masuk akal. 672 00:50:32,810 --> 00:50:35,470 Catatan lain: Karena kita sedang berhadapan dengan formula, 673 00:50:35,470 --> 00:50:41,200 meskipun TF Anda akan tahu apa jenis pola Anda mungkin menggunakan, 674 00:50:41,200 --> 00:50:44,430 terbaik untuk dalam bentuk komentar Anda menjelaskan logika, seperti, 675 00:50:44,430 --> 00:50:51,880 "Saya menggunakan pola ini karena ..." dan jenis menjelaskan pola singkat dalam komentar Anda. 676 00:50:54,090 --> 00:50:58,990 [Ini adalah langkah-langkah 2] Jika tidak ada pertanyaan lain, maka saya hanya akan tinggal di sini untuk sedikit. 677 00:50:58,990 --> 00:51:04,370 Good luck dengan pset Anda 2: Crypto dan terima kasih untuk datang. 678 00:51:06,070 --> 00:51:08,620 [Mahasiswa] Terima kasih. Terima kasih >>. 679 00:51:09,220 --> 00:51:10,800 [Media intro Offline]