1 00:00:00,000 --> 00:00:11,980 2 00:00:11,980 --> 00:00:16,980 >> ROB: Hi, saya Rob, dan mari kita mentafsirkan program Vigenere. 3 00:00:16,980 --> 00:00:21,180 Perkara itu kita perlu lakukan ialah membuat memastikan pengguna memasukkan apa yang kita harapkan 4 00:00:21,180 --> 00:00:23,240 mereka di garisan Command. 5 00:00:23,240 --> 00:00:28,720 Jadi jika argc bukan 2 yang bermakna sama ada pengguna tidak memasukkan kita tali 6 00:00:28,720 --> 00:00:31,780 mahu menggunakan sebagai menyulitkan kami tali, atau mereka 7 00:00:31,780 --> 00:00:32,890 memasuki terlalu banyak perkara. 8 00:00:32,890 --> 00:00:35,130 Dan kita tidak tahu apa yang perlu dilakukan dengan perkara-perkara lain. 9 00:00:35,130 --> 00:00:37,960 >> Oleh itu, kita memberitahu mereka apa yang mereka sepatutnya dimasukkan. 10 00:00:37,960 --> 00:00:39,300 Dan kita kembali. 11 00:00:39,300 --> 00:00:44,570 Sekarang, dengan anggapan bahawa argc adalah 2, kita boleh terus dengan seluruh program ini. 12 00:00:44,570 --> 00:00:47,890 >> Kami alias nama argv [1] 13 00:00:47,890 --> 00:00:49,750 ke dalam kata kunci yang berubah-ubah. 14 00:00:49,750 --> 00:00:51,860 Supaya kita tidak perlu menggunakan argv nama [1] 15 00:00:51,860 --> 00:00:53,050 di seluruh negara lain program ini. 16 00:00:53,050 --> 00:00:55,570 Dan mungkin kita akan lupa apa yang bermakna dan sebagainya. 17 00:00:55,570 --> 00:00:57,830 Kata kunci adalah nama yang jauh lebih bagus. 18 00:00:57,830 --> 00:01:01,982 Dan kami akan segera merebut panjang kata kunci kami di sini. 19 00:01:01,982 --> 00:01:07,460 >> OK, jadi sekarang kita mahu pastikan kata kunci kami adalah benar-benar sah. 20 00:01:07,460 --> 00:01:11,250 Kata kunci yang kita gunakan untuk menyulitkan tali hanya perlu abjad 21 00:01:11,250 --> 00:01:12,400 aksara. 22 00:01:12,400 --> 00:01:16,830 Jika pengguna memasuki bukan abjad- aksara, kita tidak mengatakan, kata kunci 23 00:01:16,830 --> 00:01:20,170 sahaja perlu mengandungi melalui A Z dan kemudian kembali. 24 00:01:20,170 --> 00:01:24,370 Jadi ini untuk iterates gelung ke atas semua watak-watak kata kunci kami, memeriksa 25 00:01:24,370 --> 00:01:31,870 bahawa jika seseorang tidak abjad kemudian kita perlu mencetak amaran itu. 26 00:01:31,870 --> 00:01:36,285 >> Sekarang, sebaik sahaja kami sampai ke tahap ini, kita tahu yang tali hendaklah betul. 27 00:01:36,285 --> 00:01:38,230 Kata kunci mestilah betul. 28 00:01:38,230 --> 00:01:40,880 Dan sekarang kita perlu mendapatkan mesej dari pengguna yang mereka mahu kita 29 00:01:40,880 --> 00:01:43,910 menyulitkan dengan frasa utama. 30 00:01:43,910 --> 00:01:46,780 Jadi untuk mendapatkan mesej itu, kita mempunyai lakukan semasa gelung yang akan 31 00:01:46,780 --> 00:01:52,650 terus mendapatkan rentetan dari pengguna sehingga mereka memasuki tali yang sah. 32 00:01:52,650 --> 00:01:58,690 >> Berterusan, kita lihat di sini berubah-ubah ini, int nun_letters_seen. 33 00:01:58,690 --> 00:02:01,300 Kita akan melihat mengapa kita perlu bahawa dalam satu saat. 34 00:02:01,300 --> 00:02:07,320 Tetapi ini untuk gelung akan melelar dari i sama dengan 0 semua jalan sehingga i 35 00:02:07,320 --> 00:02:10,940 sama n, yang bermakna kita iterating ke atas semua mungkin 36 00:02:10,940 --> 00:02:13,020 watak-watak dalam mesej kami. 37 00:02:13,020 --> 00:02:17,370 Kerana kita mahu untuk menyulitkan semua watak-watak dalam mesej kami. 38 00:02:17,370 --> 00:02:22,970 Jadi notis kita lakukan jika (isalphamessage [I], kerana kita tidak mahu menyulitkan 39 00:02:22,970 --> 00:02:25,660 watak-watak yang tidak abjad. 40 00:02:25,660 --> 00:02:28,810 Jika ada simbol, ruang, atau nombor, kita tidak 41 00:02:28,810 --> 00:02:30,730 ingin menyulitkan mereka. 42 00:02:30,730 --> 00:02:37,220 >> Sekarang, dengan anggapan bahawa ia adalah abjad, kita mula-mula mahu memikirkan apa yang kita 43 00:02:37,220 --> 00:02:40,890 sebenarnya ingin menyulitkan mesej tersebut menggunakan. 44 00:02:40,890 --> 00:02:42,710 Jadi, apa yang saya maksudkan dengan itu? 45 00:02:42,710 --> 00:02:46,740 >> Mari kita andaikan bahawa frasa utama pengguna memasuki adalah abc. 46 00:02:46,740 --> 00:02:49,070 Itulah yang kita gunakan untuk menyulitkan. 47 00:02:49,070 --> 00:02:54,850 Sekarang, naif, kita berfikir bahawa bermakna kita mahu untuk menyulitkan aksara pertama 48 00:02:54,850 --> 00:02:59,740 mesej kami dengan 0, kerana cara berputar watak 0. 49 00:02:59,740 --> 00:03:04,395 >> Kami mahu menyulitkan watak kedua sebanyak 1, watak ketiga sebanyak 2, 50 00:03:04,395 --> 00:03:09,170 watak keempat dengan 0, kelima sebanyak 1, keenam dengan 2, dan sebagainya. 51 00:03:09,170 --> 00:03:14,440 Tetapi ingat, bahawa kita ingin melangkau ruang dan simbol dan nombor. 52 00:03:14,440 --> 00:03:21,520 Ini bermakna bahawa jika pengguna telah memasuki dunia hello sebagai mesej 53 00:03:21,520 --> 00:03:26,590 yang mereka mahu untuk menyulitkan, maka kita mahu untuk menyulitkan h dengan 0 54 00:03:26,590 --> 00:03:32,680 bersamaan dengan itu, e dengan 1, l 2, l dengan 0, o dengan 1. 55 00:03:32,680 --> 00:03:41,050 Kami mahu melangkau ruang, disulitkan w sebanyak 2, o dengan 0, 1, 2, 0. 56 00:03:41,050 --> 00:03:45,250 Jadi notis, jika kami tidak tidak menyertai ruang, maka kita akan disulitkan 57 00:03:45,250 --> 00:03:51,240 w oleh 0 dan berakhir dengan rentetan tidak betul. 58 00:03:51,240 --> 00:03:57,470 >> OK, ini adalah apa yang kita perlukan pembolehubah num_letters_seen untuk. 59 00:03:57,470 --> 00:04:04,450 Jika kita hanya akan menyulitkan menggunakan kaedah ini, yang tidak melangkau 60 00:04:04,450 --> 00:04:09,860 simbol, ruang, dan nombor, maka kita hanya boleh menggunakan pembolehubah i seperti apa 61 00:04:09,860 --> 00:04:12,540 kepada indeks menjadi frasa utama kami dengan. 62 00:04:12,540 --> 00:04:17,620 Kita perlu menggunakan num_letters_seen untuk menjaga menjejaki tempat sebenar dalam 63 00:04:17,620 --> 00:04:21,146 frasa utama yang kita mahu index. 64 00:04:21,146 --> 00:04:32,240 Jadi di sini, jika kata kunci yang kita ada, jika num_letter_seen arena keyword_length, jadi 65 00:04:32,240 --> 00:04:34,570 mengapa kita perlu arena oleh panjang kata kunci? 66 00:04:34,570 --> 00:04:36,630 >> Well, hello dunia adalah contoh yang baik. 67 00:04:36,630 --> 00:04:42,310 Jika kata kunci tersebut adalah abc, maka kita perlu untuk terus menyulitkan oleh kemudian b 68 00:04:42,310 --> 00:04:45,740 kemudian c, kemudian balut kembali sekitar, a, b, c, a, b, c. 69 00:04:45,740 --> 00:04:50,110 Oleh itu, kita perlu arena oleh panjang kata kunci untuk balut kembali sekitar. 70 00:04:50,110 --> 00:04:57,280 >> Jadi, jika ini adalah huruf besar, maka kita ingin menyulitkan oleh 71 00:04:57,280 --> 00:05:01,450 kedudukan surat itu dalam abjad, mana kita dapat dengan hanya 72 00:05:01,450 --> 00:05:06,730 menolak keluar modal A. Dan begitu juga, untuk huruf kecil, kita 73 00:05:06,730 --> 00:05:13,000 boleh mendapatkan kunci yang kita mahu dengan menolak keluar huruf kecil a. 74 00:05:13,000 --> 00:05:16,910 Jadi, tanpa mengira sama ada surat itu dalam frasa utama adalah modal atau 75 00:05:16,910 --> 00:05:21,640 huruf kecil, kita akan menyulitkan dengan jumlah yang sama. 76 00:05:21,640 --> 00:05:28,680 >> Sekarang kita mempunyai utama kami, kami lihat di sini, bahawa jika mesej i adalah huruf besar satu 77 00:05:28,680 --> 00:05:32,660 watak, maka kita mahu untuk mengira kedudukan dalam abjad yang 78 00:05:32,660 --> 00:05:39,460 watak, menambah utama kami kepadanya, balut kembali sekitar supaya jika kami pergi lalu 79 00:05:39,460 --> 00:05:43,170 z kita kembali kepada a, b, c, dan sebagainya. 80 00:05:43,170 --> 00:05:49,070 Kemudian, akhirnya, menambah semula modal A. Jadi kita beralih semula ke dalam [itu? Ascii?] 81 00:05:49,070 --> 00:05:52,010 pelbagai watak-watak ini dan bukannya kedudukan angka dalam abjad 82 00:05:52,010 --> 00:05:53,540 watak-watak ini. 83 00:05:53,540 --> 00:05:56,610 >> Dan kita melakukan perkara yang sama untuk aksara huruf kecil. 84 00:05:56,610 --> 00:06:00,070 Kecuali kita mahu tolak keluar huruf kecil dan menambahkan kembali di dalam 85 00:06:00,070 --> 00:06:02,900 akhir, huruf kecil a. 86 00:06:02,900 --> 00:06:08,120 Notis num_letter_seen yang hanya incremented jika mesej i adalah 87 00:06:08,120 --> 00:06:09,640 abjad. 88 00:06:09,640 --> 00:06:15,790 Ini adalah bagaimana kita skip ruang, simbol, dan nombor dalam frasa utama kami, sejak 89 00:06:15,790 --> 00:06:20,520 num_letter_seen adalah apa yang kita gunakan kepada indeks ke dalam kata kunci kami. 90 00:06:20,520 --> 00:06:24,540 >> Akhir sekali, pada akhirnya, kini mesej yang i telah disulitkan, kami 91 00:06:24,540 --> 00:06:26,280 mencetak mesej i. 92 00:06:26,280 --> 00:06:27,890 Dan itu sahaja. 93 00:06:27,890 --> 00:06:28,670 Nama saya Rob. 94 00:06:28,670 --> 00:06:31,020 Dan ini adalah Vigenere. 95 00:06:31,020 --> 00:06:32,850 >> [MUZIK Bermain] 96 00:06:32,850 --> 00:06:36,651