[Bermain muzik] ZAMYLA CHAN: Mari kita melaksanakan Vigenere, yang lebih sedikit mendapatkan cipher daripada Caesar. Teks biasa adalah enciphered menggunakan rentetan bukan integer. Setiap watak dalam abjad teks beralih oleh surat dalam kata kunci. Dalam contoh ini, kata kunci ohai, O sepadan dengan peralihan 14; H kepada beralih daripada 7; A, peralihan 0; dan saya peralihan 8. Jika anda telah berjaya dilaksanakan anda Caesar cipher, ia akan menjadi baik rangka kerja yang anda boleh melaksanakan Vigenere. Seperti yang anda lihat, berlari Vigenere a cipher dengan watak tunggal sebagai kata kunci adalah perkara yang sama sebagai cipher Caesar. Langkah yang sama memohon kepada Vigenere seperti yang mereka lakukan di Caesar. Kata kunci adalah baris arahan kedua hujah, jadi anda mengakses dengan argv1. Kemudian, anda perlu mengesahkan bahawa kunci perkataan adalah sesungguhnya semua abjad. Berikut adalah di mana alpha boleh datang dalam berguna. Jika anda mempunyai kata kunci yang sah, anda akan mendapat kekuatan dari pengguna, dan kemudian anda sudah bersedia untuk menulis dlm kod. The Vigenere formula cipher adalah sama untuk Caesar formula, kecuali kini k menjadi k subskrip j, menunjukkan huruf j-ke-kata kunci. Mari kita melangkah melalui proses ini. Katakanlah anda mahu menghantar mesej kepada anda kemalangan, saya suka anda, tetapi anda tidak mahu semua orang tahu. Jadi anda menggunakan cipher Vigenere dengan panda kata kunci, kerana, dengan baik, anda juga suka panda. Surat pertama, saya akan beralih oleh p, memberi x, 15 huruf selepas saya, kerana 15 p adalah 16 huruf abjad. Surat seterusnya dalam teks biasa adalah ruang, supaya tidak akan beralih. Dan indeks kata kunci tidak akan berubah. Kemudian huruf seterusnya dalam teks biasa adalah l, beralih oleh, yang tidak beralih surat teks kosong sama sekali, kerana adalah surat 0 abjad. Proses ini berterusan, memajukan watak kata kunci setiap kali ada surat dalam teks biasa. Apabila huruf terakhir kata kunci adalah dicapai, kata kunci membalut sekitar dan perubahan ke dataran seterusnya surat teks dengan p. X lvne noh. Bagaimana romantis. Jadi diberikan watak, bagaimana anda menukar itu ke dalam yang sama Cipher peralihan? Cuba membandingkan ASCII nilai kepada peralihan. Mungkin anda boleh mencari hubungan antara huruf dan mereka indeks abjad matematik menggunakan ASCII. Bolehkah anda menambah atau menolak satu watak daripada yang lain untuk mendapatkan anda hasil yang dikehendaki? Ingat bahawa perubahan untuk huruf besar dan huruf kecil yang sama. Jadi mungkin anda perlu mengenal pasti dua formula yang sama untuk mewakili peralihan, satu untuk huruf besar watak kata kunci, dan satu untuk satu yang kecil. Seterusnya, ingat bahawa kemajuan kata kunci hanya jika watak dalam teks biasa adalah surat dan kes biasa teks mesti dipelihara. Jadi, jika kita melihat formula bagi Anjakan Vigenere, terdapat dua indeks pembolehubah, i dan j. Satu menjejaki kedudukan di dataran teks, dan lain-lain jawatan dalam kata kunci. Tetapi teks anda mungkin lebih lama daripada kata kunci anda, di mana anda indeks kata kunci yang perlu untuk membalut di sekitar belakang untuk permulaan kata kunci. Bagaimana anda melakukan ini? Mari kita lihat kembali pada operator modulo. Modulo ditakrifkan adalah bakinya membahagikan dua nombor. Tetapi apa yang praktikal sebenar menggunakan modulo? Nah, katakan anda mempunyai kumpulan besar orang, dan anda perlu untuk membahagikan ke tiga kumpulan. Salah satu cara untuk membahagikan orang-orang ke dalam kumpulan adalah untuk mereka mengira off. Anda nombor kumpulan kumpulan-kumpulan yang nombor 1, 2, dan 3. Orang pertama yang akan berkata 1, 2 seterusnya, 3 seterusnya. Orang yang selepas itu akan berkata 1, kerana tidak ada satu kumpulan 4, dan kiraan bermula lebih dari sana. Anda boleh menggunakan modulo untuk melakukan perkara yang sama. Kali ini, kumpulan-kumpulan akan menjadi kumpulan 0, 1, dan 2. Orang yang pertama, nombor 1 modulo 3, 1. Orang 2 modulo 3 ialah 2. Orang 3 modulo 3 adalah 0. Orang modulo 4 3 memberikan 1, dan sebagainya kumpulan boleh membalut di sekitar. Jadi, jika anda mengambil indeks dan modulo indeks yang oleh saiz maksimum, hasil tidak akan lebih besar daripada atau sama dengan saiz, yang bermaksud bahawa anda boleh meningkatkan indeks sebagai banyak yang anda suka. Dan selagi anda modulo indeks oleh bilangan tertentu, anda tidak akan mendapatkan nombor yang lebih besar daripada itu. Oleh itu, kita mempunyai 10 orang bukan 5, dan mereka semua akan mendapat yang diberikan kepada kumpulan-kumpulan bilangan 0, 1, atau 2. Cuba untuk memohon ini untuk membungkus seluruh kata kunci, kecuali bukannya menyusun orang ke nombor kumpulan yang anda mahu indeks kata kunci supaya anda boleh mendapatkan watak yang betul untuk beralih tanpa melebihi panjang tali. Dengan itu, anda perlu anda Vigenere cipher. Nama saya Zamyla, dan ini adalah CS50.