[Powered by Google Translate] [Walkthrough - Masalah Set 2]
[Zamyla Chan - Harvard University]
[Ini adalah CS50. CS50.TV]
Baiklah. Halo, semua orang, dan selamat datang Walkthrough 2.
Pertama, saya ingin mengucapkan selamat kepada Anda untuk finishing pset 1.
Saya tahu bahwa itu bisa saja agak sulit bagi sebagian dari Anda,
bisa saja komputer pertama Anda program yang Anda tulis,
tapi ingat bahwa pada akhir ini, ketika Anda melihat kembali pada akhir semester,
Anda akan melihat pset 1 dan Anda akan berkata, "Hei, saya bisa melakukan itu dalam 5 menit."
Jadi tahu dan percaya bahwa pada akhir ini Anda pasti akan menemukan pset 1 cukup sederhana.
Tapi untuk sekarang ini adalah prestasi besar, dan selamat untuk mendapatkan dilakukan.
Sekarang, juga catatan cepat sebelum kita masuk ke dalam daging walkthrough.
Saya hanya ingin membuat catatan singkat bahwa saya kadang-kadang tidak akan memiliki cukup waktu
selama penelusuran untuk pergi melalui setiap cara untuk melakukan sejumlah masalah
dan agak hanya mungkin fokus pada 1 atau 2 jenis implementasi,
cara-cara yang Anda bisa melakukan hal ini.
Tapi itu tidak berarti bahwa Anda dilarang melakukannya dengan cara lain.
Sering ada, seperti ilmu komputer, berbagai cara dalam melakukan sesuatu,
dan jadi pasti merasa bebas untuk menggunakan berbagai jenis solusi daripada saya mungkin telah disajikan.
[Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net]
[Pset2 - 0. Sebuah Bagian dari Pertanyaan - 1. Caesar - 2. Vigenere]
Baiklah. Jadi masalah set 2: Crypto adalah satu yang menyenangkan.
Sekali lagi, dengan pset setiap Anda akan mulai dengan bagian pertanyaan
yang akan dilakukan pada bagian Anda dengan sesama mengajar ditugaskan Anda.
Kami tidak akan pergi melalui ini selama walkthrough,
tetapi mereka pasti akan membantu Anda menyelesaikan pset tersebut.
Jadi bagian pertama dari sejumlah masalah adalah Caesar.
Dan sebagainya di Caesar seseorang akan melewati Anda kunci dengan integer,
dan Anda akan mengenkripsi string teks yang mereka berikan Anda
dan memberi mereka kembali hal yang dienkripsi.
Jika ada yang menonton A Christmas Story, ada contoh yang ada.
Kemudian bagian kedua dari sejumlah masalah yang Vigenere,
yang merupakan teknik enkripsi yang lebih canggih.
Dan jadi kita akan menulis dlm kode sepotong teks,
kecuali bukan hanya dengan satu bilangan bulat, kita benar-benar akan menyalinnya
dengan kata kunci bahwa pengguna akan memberikan kami.
Oke, jadi alat pertama di hari toolbox sebenarnya akan memperbarui alat.
Pada forum diskusi kita akan melihat hal-hal seperti, "Mengapa tidak pekerjaan ini?"
"Kenapa tidak Kirim 50 bekerja?"
dan sering solusinya sebenarnya hanya untuk memperbarui alat Anda.
Dan jadi jika Anda hanya berjalan dalam jendela terminal di sudo alat Anda yum-y -
itu bendera mengatakan ya, memperbarui segala sesuatu - update,
maka alat Anda akan memperbarui jika perlu.
Dan tidak ada salahnya jika Anda sudah berada di versi terbaru dari alat.
Maka hanya akan mengatakan tidak update baru yang tersedia dan Anda dapat terus bekerja bersama.
Tapi ini baik untuk melaksanakan bahkan setiap kali Anda membuka alat
karena kita masih sangat banyak -
kadang-kadang jika kita datang ke sebuah bug - memperbaikinya dalam alat.
Jadi pastikan bahwa Anda memiliki versi terbaru dari alat
dan menjalankan yang update di sana.
Baiklah. Jadi karena kita sedang berhadapan dengan huruf dan mengubah, enciphering hal,
kita akan benar-benar ingin menjadi teman terbaik dengan grafik ASCII kami.
Ada yang banyak secara online, jika Anda menemukan. Mungkin bahkan membuat Anda sendiri.
Pada dasarnya, dengan setiap huruf dan angka setiap dan setiap karakter
ada nomor yang terkait dengan mereka,
dan jadi ada baiknya untuk melihat nilai-nilai ASCII mereka bersama surat yang sebenarnya.
Itu pasti akan membantu Anda dalam sejumlah masalah.
Satu hal yang benar-benar membantu saya dalam set masalah adalah untuk benar-benar mencetaknya,
dan seperti yang saya alami, saya benar-benar akan menggambar di atasnya,
menulis, "Jika ini harus pergi ke sana, maka ..."
Jenis menggambar di atasnya dan tandai itu, menjadi teman terbaik dengan tabel ASCII Anda.
Kemudian kita memiliki alat-alat lain yang kami miliki.
Kali ini bukan benar-benar mendorong pengguna untuk semua masukan mereka
kita akan melakukan kombinasi.
Kita akan meminta mereka untuk beberapa masukan,
tapi kami juga akan hanya menggunakan argumen pada baris perintah.
Jadi ketika mereka menjalankan program mereka, biasanya Anda katakan / hello., Misalnya,
jika program anda adalah hello.c.
Tapi kali ini bukan hanya mengatakan bahwa, mereka dapat menempatkan kata-kata, argumen sesudahnya.
Dan jadi kita akan menggunakan apa pun yang mereka lulus dalam kepada kita sebagai masukan mereka juga,
sehingga bergerak lebih dari sekedar disuruh untuk integer tetapi juga menggunakan argumen baris perintah.
Dan kemudian kita akan masuk ke array dan string, yang kita akan menggunakan banyak juga.
Berikut ini hanya sebuah contoh dari 1 tabel ASCII mini.
Seperti yang saya katakan, setiap surat sesuai dengan nomor,
sehingga membiasakan diri dengan itu. Ini akan berguna.
Dan kemudian ketika kita mulai melakukan beberapa ASCIIMath berurusan dengan angka -
menambahkan, mengurangkan mereka - maka pasti baik untuk merujuk pada tabel ini.
Jadi, inilah contoh dari cipher Caesar - sesuatu yang Anda mungkin telah bermain dengan.
Itu hanya sebuah roda. Pada dasarnya, ada alfabet luar dan kemudian ada alfabet batin.
Jadi di sini adalah contoh dari cipher Caesar tetapi dengan kunci 0.
Pada dasarnya, A sejajar dengan A, B sejalan dengan B, semua jalan sampai ke Z.
Tapi kemudian mengatakan kami ingin kunci dari 3, misalnya.
Kemudian kita akan memutar roda batin sehingga A sekarang sejalan dengan D, dll
Dan jadi ini pada dasarnya apa yang kita lakukan.
Kami tidak memiliki roda, tapi apa yang akan kita lakukan adalah membuat program kami
jenis menggeser alfabet bersama kami sejumlah angka.
Jadi seperti yang saya katakan sebelumnya, kita akan berhadapan dengan argumen baris perintah
serta mendapatkan integer.
Jadi cara bahwa pengguna akan menjalankan Anda Program Caesar adalah dengan mengatakan. / Caesar
dan kemudian memasukkan nomor setelah itu.
Dan jumlah tersebut merupakan kunci, pergeseran,
berapa kali Anda akan memutar roda batin cipher Caesar Anda.
Dan sehingga Anda lihat di sini contoh.
Jika kita memasuki huruf dari A L dalam cipher Caesar kami,
maka akan input D melalui O karena itulah setiap huruf bergeser lebih dari 3 kali,
seperti contoh dari roda yang saya menunjukkan Anda.
Jadi jika Anda masukkan, misalnya, ini adalah CS50!
maka juga akan memindahkan semua huruf.
Dan itu hal yang penting di kedua Caesar dan Vigenere
adalah bahwa kita akan melewatkan setiap non-surat.
Jadi spasi, karakter, dll, angka, kita akan menjaga mereka sama.
Kita hanya akan menggeser huruf dalam kasus ini.
Jadi seperti yang Anda lihat di roda, kita hanya memiliki surat-surat yang tersedia bagi kita,
jadi kami hanya ingin menggeser huruf dan mengenkripsi surat-surat.
Jadi hal pertama yang harus dilakukan, Anda melihat bahwa penggunaan untuk Caesar dalam masalah set 2
adalah dengan menjalankan Caesar dan kemudian memasukkan nomor saat Anda menjalankannya di terminal.
Jadi apa yang perlu kita lakukan adalah entah bagaimana mendapatkan kunci itu dan mengaksesnya.
Dan jadi kita ingin entah bagaimana melihat itu akan menjadi argumen baris perintah kedua.
Yang pertama akan menjadi / caesar., Dan yang berikutnya akan menjadi nomor kunci.
Jadi sebelum kami memiliki int main (void) untuk memulai program C kami.
Kita akan mengupas lapisan sedikit
dan benar-benar melihat bahwa bukan lewat di void fungsi utama kami
kami benar-benar berurusan dengan 2 parameter.
Kami memiliki int bernama argc dan kemudian array dari string disebut argv.
Jadi argc adalah integer,
dan itu merupakan jumlah argumen berlalu dalam program Anda.
Dan kemudian argv sebenarnya daftar argumen berlalu.
Semua argumen adalah string, dan sebagainya argv mewakili sebuah array, daftar, string.
Mari kita bicara tentang array sedikit.
Array dasarnya struktur data baru.
Kami memiliki ints, kami telah dua kali lipat, kita memiliki string, dan sekarang kami memiliki array.
Array adalah struktur data yang dapat menyimpan beberapa nilai dari jenis yang sama,
jadi pada dasarnya, daftar jenis apa pun yang Anda inginkan.
Pada dasarnya, jika Anda ingin daftar bilangan bulat semua dalam 1 variabel,
maka Anda akan menciptakan variabel baru yang array tipe int.
Jadi array berbasis-nol, yang berarti bahwa elemen pertama dari array adalah pada indeks 0.
Jika array adalah panjang 4, seperti dalam contoh ini, maka elemen terakhir Anda akan berada di indeks 3,
yaitu 4 - 1.
Jadi untuk membuat array, Anda akan melakukan sesuatu seperti ini.
Katakanlah Anda ingin array ganda.
Hal ini berlaku untuk semua jenis tipe data, meskipun.
Jadi katakanlah Anda ingin sebuah array ganda. Katakanlah Anda ingin menyebutnya kotak.
Sama seperti Anda akan menginisialisasi setiap ganda lainnya,
Anda akan mengatakan ganda dan kemudian nama, tapi kali ini kita menempatkan tanda kurung siku,
dan kemudian nomor akan ada panjang array.
Perhatikan bahwa dalam array kita tidak pernah bisa mengubah panjang,
sehingga Anda selalu harus menentukan dan memilih berapa banyak kotak,
berapa banyak nilai array Anda akan terus.
Jadi untuk menetapkan nilai yang berbeda dalam array Anda, Anda akan menggunakan sintaks berikut,
seperti yang Anda lihat pada slide.
Kotak 0 indeks Anda memiliki akan diatur menjadi 1,2,
Indeks kotak 1 set menjadi 2,4, dll
Jadi sekarang kita telah meninjau array sedikit, mari kita kembali ke argc dan argv.
Kita tahu bahwa argv sekarang array dari string.
Jadi ketika pengguna lewat di - mengatakan mereka sedang menjalankan program -
mereka katakan. / hello David Malan,
program apa yang akan lakukan untuk Anda sudah benar-benar datang dengan apa yang argc dan argv adalah.
Jadi Anda tidak perlu khawatir tentang itu.
Argc dalam hal ini akan menjadi 3 karena melihat 3 kata yang berbeda dipisahkan oleh spasi.
Dan begitu kemudian array dalam hal ini, indeks pertama akan / hello.,
yang berikutnya David, yang Malan yang berikutnya.
Apakah ada yang melihat langsung apa hubungan antara argv,
array, dan argc adalah?
Ya. Kita akan masuk ke bahwa dalam contoh di args.c.
Mari kita lihat apakah kita dapat mengambil keuntungan dari hubungan antara 2.
Di sini Anda mungkin menemukan bahwa dalam alat aplikasi default
untuk membuka file c. kadang Emacs.
Tapi kami ingin berurusan dengan gedit, sehingga apa yang dapat Anda lakukan adalah Anda bisa klik kanan pada file C Anda,
pergi ke Properties, Open With, lalu pilih gedit, Standarkan,
dan sekarang program Anda harus terbuka di gedit bukan Emacs.
Sempurna.
Jadi di sini saya punya program yang saya ingin mencetak setiap argumen baris perintah.
Jadi apa pun pengguna masukan, saya ingin dasarnya mengembalikannya kembali kepada mereka pada baris baru.
Jadi apa struktur yang dapat kita gunakan untuk iterate atas sesuatu -
sesuatu yang Anda mungkin digunakan dalam 1 pset Anda?
Jika Anda ingin pergi melalui sejumlah set hal? >> [Mahasiswa] Untuk loop.
Untuk loop. Tepat. Jadi mari kita mulai dengan untuk loop.
Kami memiliki untuk int i = 0. Mari kita mulai dengan variabel inisialisasi standar.
Aku akan meninggalkan kondisi untuk mengatur dan kemudian mengatakan saya + +, akan melakukan hal-hal di sana.
Baiklah.
Jadi berpikir kembali ke argv, jika argv adalah daftar argumen berlalu untuk program
dan argc adalah jumlah argumen dalam program,
maka itu berarti bahwa argc dasarnya panjang argv, tepat,
karena ada akan menjadi seperti banyak argumen sebagai nilai argc.
Jadi jika kita ingin iterate atas setiap elemen dalam argv,
kita akan ingin setiap kali mengakses variabel di argv pada indeks yang diberikan.
Yang dapat diwakili dengan ini, kan?
Ini variabel di sini mewakili string tertentu dalam hal ini
karena itu adalah array string - string tertentu pada saat itu indeks yang diberikan.
Apa yang ingin kita lakukan, dalam hal ini kita ingin mencetaknya, jadi mari kita katakan printf.
Dan sekarang argv adalah string, jadi kami ingin menempatkan placeholder yang ada.
Kami ingin baris baru hanya untuk membuatnya terlihat bagus.
Jadi di sini kita memiliki loop untuk. Kami tidak memiliki kondisi belum.
Jadi saya mulai dari 0, dan kemudian setiap kali itu akan mencetak string yang diberikan
pada saat itu indeks tertentu dalam array.
Jadi, ketika kita ingin berhenti mencetak elemen dalam array?
Ketika kita sudah selesai, kan? Ketika kita telah mencapai akhir dari array.
Jadi kita tidak ingin melebihi masa panjang array,
dan kita sudah tahu kita tidak perlu untuk benar-benar aktif mencari tahu apa yang panjang argv adalah
karena itu diberikan kepada kita, dan apa itu? Argc. Tepat.
Jadi kami ingin melakukan hal ini jumlah proses argc kali.
Saya tidak dalam direktori yang tepat.
Baiklah.
Sekarang mari kita membuat args. Tidak ada kesalahan, yang besar.
Jadi mari kita jalankan args.
Apa ini akan kembali kepada kami? Ini hanya akan mencetaknya kembali.
"Kau diinput args ke dalam program, aku akan memberikannya kembali kepada Anda."
Jadi katakanlah kita ingin mengatakan args maka bar foo.
Jadi kemudian mencetaknya kembali kepada kami. Baiklah?
Jadi ada contoh bagaimana Anda dapat menggunakan argc dan argv
mengetahui argc yang mewakili panjang argv.
Pastikan bahwa Anda tidak pernah dengan akses array satu melampaui panjang array
karena C pasti akan berteriak pada Anda.
Anda akan mendapatkan sesuatu yang disebut kesalahan segmentasi,
yang tidak pernah menyenangkan, pada dasarnya mengatakan Anda mencoba untuk mengakses sesuatu
yang tidak ada, bukan milik Anda.
Jadi pastikan, dan terutama dengan pengindeksan nol-, kita tidak ingin -
Seperti misalnya, jika kita memiliki sebuah array panjang 4,
bahwa indeks array 4 tidak ada karena kita mulai dari 0, nol indeks.
Ini akan menjadi sifat kedua untuk loop seperti ketika kita mulai 0.
Jadi hanya ingat-ingat.
Anda tidak ingin pernah mengakses indeks array yang di luar jangkauan Anda.
Jadi kita bisa melihat sekarang bagaimana kita bisa jenis akses
argumen baris perintah yang lulus masuk
Tapi ketika Anda melihat string, argv sebenarnya adalah array string.
Jadi itu sebenarnya bukan integer, tapi di Caesar kita ingin berurusan dengan bilangan bulat.
Untungnya, ada fungsi yang diciptakan bagi kita yang benar-benar dapat mengkonversi string ke integer.
Juga di sini kita tidak berurusan dengan input pengguna di mana kita mendorong mereka
untuk input sini untuk kunci, jadi kita tidak bisa benar-benar reprompt dan berkata,
"Oh, beri aku bilangan bulat yang lain, mengatakan, jika itu tidak sah."
Tapi kita masih perlu untuk memeriksa penggunaan yang benar.
Dalam Caesar mereka hanya diperbolehkan untuk lulus dalam 1 nomor,
dan sehingga mereka harus menjalankan / caesar. dan kemudian mereka harus memberikan nomor.
Jadi argc harus menjadi nomor tertentu.
Nomor berapa yang akan jika mereka harus melewati Anda / caesar. Dan kemudian kunci?
Apa argc? >> [Mahasiswa] 2. >> Dua. Tepat.
Jadi Anda ingin memastikan bahwa argc adalah 2.
Jika tidak, Anda pada dasarnya menolak untuk menjalankan program.
Dalam utama itu fungsi yang mengatakan int main,
jadi maka kita selalu dalam praktik kembali 0 yang baik di akhir program yang sukses.
Jadi jika, katakanlah, mereka memberikan 3 argumen baris perintah bukannya 2
atau memberikan 1, misalnya, maka apa yang akan Anda lakukan adalah Anda akan ingin memeriksa untuk itu
dan kemudian kembali 1 mengatakan, tidak, saya tidak bisa melanjutkan program ini.
[Mahasiswa] Tidak mungkin ada ruang dalam teks Anda. >> Maafkan saya?
[Mahasiswa] Tidak mungkin ada ruang dalam teks Anda mencoba untuk mengenkripsi.
Ah!
Dalam hal teks yang kita coba untuk mengenkripsi, yang benar-benar datang kemudian
ketika kita memberikan teks itu.
Jadi sekarang kita hanya menerima sebagai argumen perintah jumlah sebenarnya,
pergeseran sebenarnya untuk enkripsi Caesar.
[Mahasiswa] Mengapa Anda perlu 2 sebagai lawan hanya 1 argc? Pasti ada 1 angka.
Benar. Alasan mengapa kita perlu untuk argc 2 bukannya 1
karena ketika Anda menjalankan program dan katakan. / caesar atau / hello.,
yang benar-benar dianggap sebagai argumen baris perintah.
Jadi yang sudah memakan 1 dan begitu maka kita memasukkan 1 ekstra.
Jadi Anda benar-benar memasukkan string dalam argumen baris perintah.
Apa yang ingin Anda lakukan, untuk Caesar kita ingin berurusan dengan integer,
sehingga Anda dapat menggunakan fungsi ini atoi.
Dan pada dasarnya, Anda lulus dalam string dan kemudian akan kembali Anda kembali integer
apakah itu mungkin untuk membuat string yang ke integer.
Sekarang ingat ketika kita sedang berhadapan dengan hal-hal printf atau GetString, seperti itu,
kita termasuk perpustakaan yang khusus untuk kita.
Jadi pada awalnya kita mulai dengan tag standar sesuatu yang hash I / O, h,. Seperti itu.
Nah, atoi tidak berada dalam salah satu perpustakaan,
jadi apa yang harus kita lakukan adalah kita harus menyertakan perpustakaan yang tepat untuk itu.
Jadi ingat kembali ke Walkthrough 1 di mana saya membahas fungsi manual.
Anda mengetik manusia di terminal Anda dan kemudian diikuti dengan nama fungsi.
Dan sehingga akan memunculkan daftar seluruh penggunaannya,
tetapi juga akan memunculkan mana perpustakaan yang dimiliki.
Jadi saya akan meninggalkan kepada Anda untuk menggunakan fungsi manual dengan atoi
dan mencari tahu mana perpustakaan Anda perlu menyertakan untuk dapat menggunakan fungsi atoi.
Jadi kita punya kunci dan sekarang datang untuk mendapatkan teks biasa,
dan sebagainya yang benar-benar akan menjadi input pengguna di mana Anda meminta.
Kita berurusan dengan GetInt dan GetFloat, dan sebagainya dalam vena yang sama
kita akan berurusan dengan GetString.
Tapi dalam kasus ini kita tidak perlu melakukan apapun sementara do atau saat loop untuk memeriksa.
GetString pasti akan memberi kita string,
dan kita akan mengenkripsi apa pun pengguna memberi kita.
Sehingga Anda dapat mengasumsikan bahwa semua string pengguna diinput sudah benar.
Besar.
Jadi kemudian setelah Anda punya kunci dan setelah Anda punya teks,
sekarang apa yang tersisa adalah Anda harus menulis dlm kode plaintext.
Hanya untuk cepat menutupi lingo, plaintext adalah apa pengguna memberi Anda,
dan ciphertext adalah apa yang Anda kembali kepada mereka.
Jadi string, untuk dapat benar-benar pergi melalui huruf demi huruf
karena kita harus menggeser setiap huruf,
kita memahami bahwa string, jika kita jenis mengupas lapisan,
kita melihat bahwa mereka hanya benar-benar daftar karakter.
Salah satu datang setelah yang lain.
Dan jadi kita bisa memperlakukan string sebagai array karena mereka adalah array dari karakter.
Jadi katakanlah Anda memiliki string bernama teks,
dan dalam bahwa teks variabel disimpan Ini adalah CS50.
Kemudian teks pada indeks 0 akan menjadi T modal, indeks 1 akan h, dll
Dan kemudian dengan array, dalam contoh argc di args.c,
kami melihat bahwa kami harus iterate atas array
dan jadi kami harus iterate dari i = 0 sampai i adalah kurang dari panjang.
Jadi kita perlu beberapa cara untuk mencari tahu apa yang panjang string kita adalah
jika kita akan iterate di atasnya.
Untungnya lagi, ada fungsi ada bagi kita, meskipun di kemudian hari dalam CS50
Anda pasti akan dapat menerapkan dan membuat fungsi sendiri
yang dapat menghitung panjang string.
Tapi untuk sekarang kita akan menggunakan panjang string, sehingga strlen.
Anda lulus dalam string, dan kemudian Anda akan kembali int yang mewakili panjang string Anda.
Mari kita lihat contoh bagaimana kita mungkin bisa iterate atas masing-masing karakter dalam sebuah string
dan melakukan sesuatu dengan itu.
Apa yang kita ingin lakukan adalah iterate atas setiap karakter string,
dan apa yang ingin kita lakukan adalah kita cetak kembali setiap karakter 1 oleh 1
kecuali kita menambahkan sesuatu yang sebelahnya.
Jadi mari kita mulai dengan untuk loop. Int i = 0.
Kita akan meninggalkan ruang untuk kondisi tersebut.
Kami ingin iterate sampai kita mencapai akhir dari string, kan?
Jadi apa fungsi memberi kita panjang string?
[Respon siswa tidak terdengar]
Itulah panjang argumen baris perintah.
Tapi untuk string kita ingin menggunakan fungsi yang memberi kita panjang string.
Jadi itu panjang string.
Dan demikian maka Anda harus lulus dalam string untuk itu.
Ini perlu tahu apa string yang dibutuhkan untuk menghitung panjang.
Jadi dalam hal ini kita sedang berhadapan dengan string s.
Besar.
Jadi apa yang ingin kita lakukan, mari kita printf.
Sekarang, kita ingin berurusan dengan karakter. Kami ingin mencetak setiap karakter individu.
Bila Anda ingin mencetak pelampung, Anda akan menggunakan placeholder seperti f%.
Dengan int Anda akan menggunakan d%.
Dan begitu pula, dengan karakter Anda menggunakan c% untuk mengatakan saya akan mencetak karakter
yang disimpan dalam variabel.
Jadi kita punya ini, dan mari kita tambahkan waktu dan ruang untuk itu.
Yang karakter yang kita gunakan?
Kita akan menggunakan karakter apa pun kita berada di string.
Jadi kita akan menggunakan sesuatu dengan string,
tapi kami ingin mengakses karakter tertentu di sana.
Jadi jika string hanya sebuah array, lalu bagaimana kita mengakses elemen dari array?
Kami memiliki orang-orang kurung siku, dan kemudian kami menempatkan indeks di sana.
Jadi kita memiliki tanda kurung siku. Indeks kami dalam hal ini kita hanya bisa menggunakan i. Tepat.
Jadi di sini kita katakan kita akan mencetak karakter diikuti oleh sebuah titik dan spasi,
dan karakter yang akan menjadi surat i dalam s string kita.
Aku hanya akan menyimpan itu. Oke.
Sekarang aku akan menjalankan panjang string.
Jadi kita memiliki string disebut OMG, dan sekarang itu ditekankan bahkan lebih.
Demikian pula, katakanlah kita benar-benar ingin mendapatkan string dari pengguna.
Bagaimana mungkin kita melakukan ini?
Sebelum, bagaimana kita mendapatkan int?
Kami mengatakan GetInt, kan? Tapi ini bukan int, jadi mari kita GetString.
Mari kita membuat panjang string. Di sini kita tidak memasukkan cepat tertentu.
Jadi saya tidak tahu.
Aku akan menaruh nama saya di sini dan kemudian saya bisa melakukan salah satu dari hal-hal
di mana saya menetapkan kata untuk setiap huruf atau sesuatu seperti itu. Cool.
Jadi itu panjang string.
Jadi kita kembali kepada Kaisar.
Kami memiliki beberapa alat pada bagaimana kita iterate selama string,
bagaimana kita mengakses setiap elemen individu.
Jadi sekarang kita bisa kembali ke program.
Seperti yang saya sebutkan sebelumnya, dalam tabel ASCII, teman terbaik Anda,
Anda akan melihat angka yang berkaitan dengan setiap surat.
Jadi di sini mengatakan plaintext kami adalah aku pusing!
Kemudian masing-masing karakter akan memiliki jumlah dan nilai ASCII yang terkait dengan itu,
bahkan tanda kutip, bahkan ruang, bahkan tanda seru,
sehingga Anda akan ingin untuk menjaga bahwa dalam pikiran.
Jadi mengatakan kunci kami bahwa pengguna termasuk dalam argumen baris perintah mereka adalah 6.
Itu berarti untuk huruf pertama, yaitu I, yang diwakili oleh 73,
Anda ingin kembali ke mereka apa pun huruf diwakili oleh nilai ASCII dari 73 + 6.
Dalam hal ini yang akan menjadi 79.
Sekarang kita ingin pergi ke karakter berikutnya.
Jadi berikutnya dalam indeks 1 dari plaintext akan tanda kutip.
Tapi ingat kita hanya ingin menulis dlm kode huruf.
Jadi kami ingin memastikan bahwa tanda kutip sebenarnya tetap sama,
bahwa kita tidak berubah dari 39 ke 45 adalah apapun.
Kami ingin menyimpannya sebagai apostrof.
Jadi kami ingin ingat untuk hanya menulis dlm kode huruf
karena kami ingin semua simbol lain untuk tetap tidak berubah dalam program kami.
Hal lain yang kita inginkan adalah untuk melestarikan kapitalisasi.
Jadi, ketika Anda memiliki huruf besar, itu harus tetap sebagai suatu huruf besar.
Lowercases harus tetap sebagai huruf kecil.
Jadi beberapa fungsi yang berguna untuk dapat menangani surat hanya enciphering
dan tetap menjaga kapitalisasi hal-hal
adalah fungsi isalpha, isupper, islower.
Dan jadi ini adalah fungsi yang mengembalikan Anda nilai Boolean.
Pada dasarnya, benar atau salah. Apakah ini sebuah huruf besar? Apakah alfanumerik ini?
Apakah ini surat, pada dasarnya.
Jadi di sini adalah 3 contoh bagaimana Anda akan menggunakan fungsi tersebut.
Pada dasarnya, Anda bisa menguji apakah nilai yang dikembalikan kepada Anda oleh fungsi yang benar atau salah
berdasarkan masukan itu.
Entah melakukan sesuatu yang tidak menulis dlm kode atau cipher atau pastikan bahwa itu huruf besar, dll
[Mahasiswa] Dapatkah Anda hanya menjelaskan mereka sedikit lebih dan bagaimana Anda menggunakannya? >> Ya, pasti.
Jadi jika kita melihat kembali, di sini kita memiliki modal, saya, kan?
Jadi kita tahu bahwa saya pergi ke O karena saya + 6 adalah O.
Tapi kami ingin memastikan bahwa O akan menjadi modal O.
Jadi pada dasarnya, itu adalah jenis akan mengubah masukan kami.
Jadi apakah itu besar atau tidak akan seperti mengubah cara kita berurusan dengan itu.
Jadi jika kita menggunakan fungsi isupper pada bahwa indeks tertentu,
sehingga isupper ("I"), yang mengembalikan bagi kita yang benar, sehingga kita tahu bahwa itu atas.
Jadi berdasarkan itu, kemudian kami akan pergi ke rumus
bahwa Anda akan menggunakan untuk menggeser hal-hal di Caesar,
demikian maka pada dasarnya, ada akan menjadi formula yang sedikit berbeda jika huruf besar
sebagai lawan huruf kecil. Masuk akal?
Ya. Jangan khawatir.
Saya berbicara sedikit tentang menambahkan 6 sampai surat, yang tidak cukup masuk akal
kecuali ketika kita jenis memahami bahwa karakter ini
adalah jenis dipertukarkan dengan bilangan bulat.
Apa yang kita lakukan adalah kita jenis pengecoran penggunaan implisit.
Kami akan pergi ke pengecoran sedikit kemudian di mana Anda mengambil nilai dan Anda mengubahnya menjadi jenis yang berbeda
daripada awalnya.
Tetapi dengan pset ini kita akan dapat jenis bergantian menggunakan karakter
dan berhubungan nilai integer.
Jadi, jika Anda hanya membungkus karakter hanya dengan tanda kutip tunggal,
maka Anda akan dapat bekerja dengan dengan bilangan bulat, berurusan dengan itu sebagai integer.
Jadi C ibukota berhubungan dengan 67. F huruf kecil berhubungan dengan 102.
Sekali lagi, jika Anda ingin tahu nilai-nilai ini, melihat tabel ASCII Anda.
Jadi mari kita pergi ke beberapa contoh bagaimana Anda mungkin dapat mengurangi dan menambahkan,
bagaimana Anda dapat benar-benar benar-benar bekerja dengan karakter tersebut, menggunakannya secara bergantian.
Saya katakan ASCIIMath yang akan menghitung penambahan karakter ke integer
dan kemudian menampilkan karakter yang dihasilkan serta nilai ASCII yang dihasilkan.
Dan jadi di sini saya katakan - Kita akan berurusan dengan bagian ini kemudian -
tetapi pada dasarnya, saya mengatakan bahwa pengguna harus mengatakan ASCIIMath dijalankan bersama dengan kunci,
dan aku mengatakan bahwa kunci yang akan menjadi nomor
dengan yang kita akan menambahkan karakter ini.
Jadi di sini melihat bahwa karena aku menuntut kunci,
karena aku menuntut bahwa mereka memberi saya 1 hal,
Saya hanya ingin menerima / asciimath. Dan kunci.
Jadi aku akan menuntut argc sama dengan 2.
Jika tidak, maka aku akan kembali 1 dan program akan keluar.
Jadi saya katakan kunci tidak akan menjadi argumen baris perintah pertama,
itu akan menjadi yang kedua, dan seperti yang Anda lihat di sini,
Aku akan mengubah itu menjadi integer.
Lalu aku akan mengatur karakter untuk menjadi r.
Perhatikan bahwa jenis chr variabel sebenarnya integer.
Cara yang saya dapat menggunakan r sebagai integer adalah dengan membungkus itu dengan tanda kutip tunggal.
Jadi kembali ke pernyataan printf kita di mana kita memiliki tempat untuk karakter
dan kemudian tempat untuk integer,
karakter diwakili oleh chr, dan integer adalah kuncinya.
Dan begitu kemudian kita akan dalam hasil menambahkan 2 bersama-sama.
Jadi kita akan menambahkan r + apapun kuncinya adalah,
dan kemudian kita akan mencetak hasil itu.
Jadi mari kita membuat asciimath. Ini up to date, jadi mari kita hanya menjalankan asciimath.
Oh, tapi lihat, ia tidak melakukan apa-apa karena kita tidak benar-benar memberikan kunci.
Jadi ketika baru saja kembali 1, fungsi utama kami, itu hanya dikembalikan kembali kepada kami.
Jadi mari kita lulus dalam kunci. Seseorang memberi saya nomor. >> [Mahasiswa] 4.
4. Oke.
Jadi r meningkat sebesar 4 akan memberi kita v, yang sesuai dengan nilai ASCII dari 118.
Jadi itu semacam masuk akal bahwa -
Sebenarnya, bisa saya meminta Anda, apa yang Anda pikirkan nilai ASCII dari r adalah jika r + 4 adalah 118?
Kemudian yeah, r adalah 114.
Jadi jika Anda melihat di meja ASCII kemudian, tentu saja, Anda akan melihat r yang diwakili oleh 114.
Jadi sekarang kita tahu bahwa kita dapat menambahkan bilangan bulat untuk karakter, ini tampaknya cukup sederhana.
Kita hanya akan iterate atas string seperti kita lihat dalam contoh sebelumnya.
Kami akan memeriksa apakah itu surat.
Jika ya, maka kita akan beralih dengan apapun kuncinya adalah.
Cukup sederhana, kecuali bila Anda bisa seperti ini,
Anda melihat bahwa z, diwakili oleh 122, maka akan memberikan karakter yang berbeda.
Kami benar-benar ingin tinggal dalam alfabet kita, kan?
Jadi kita perlu mengetahui beberapa cara semacam membungkus di sekitar.
Ketika Anda mencapai zed dan Anda ingin meningkatkan oleh sejumlah tertentu,
Anda tidak ingin pergi ke luar bagian alfabet ASCII;
Anda ingin membungkus kembali semua jalan ke A.
Tapi perlu diingat Anda masih melestarikan kasus.
Jadi mengetahui bahwa surat tidak bisa menjadi simbol
seperti simbol tidak akan berubah juga.
Dalam pset terakhir Anda pasti tidak perlu,
tapi pilihan adalah untuk mengimplementasikan pset serakah Anda dengan menggunakan fungsi modulus.
Tapi sekarang kita benar-benar akan perlu menggunakan modulus,
jadi mari kita pergi ke ini sedikit.
Pada dasarnya, ketika Anda memiliki x modulo y, yang memberikan Anda sisa x dibagi dengan y.
Berikut adalah beberapa contoh di sini. Kami memiliki 27% 15.
Pada dasarnya, ketika Anda kurangi 15 dari 27 sebanyak mungkin tanpa mendapatkan negatif
maka Anda mendapatkan 12 kiri atas.
Jadi itulah jenis seperti dalam konteks matematika, tapi bagaimana kita bisa benar-benar menggunakan ini?
Ini akan berguna untuk wrapover kami.
Untuk ini, mari kita katakan saja saya meminta Anda semua untuk membagi menjadi 3 kelompok.
Kadang-kadang Anda melakukan ini dalam kelompok dan sesuatu seperti itu.
Katakanlah Aku berkata, "Oke, saya ingin kalian semua dibagi menjadi 3."
Bagaimana mungkin Anda melakukannya?
[Respon siswa tidak terdengar] Ya, tepatnya. Hitung off. Oke.
Mari kita benar-benar melakukan itu. Apakah Anda ingin memulai?
[Siswa menghitung off] 1, 2, 3, 4.
Tapi ingat ... >> [Mahasiswa] Oh, maaf.
Itu poin yang benar-benar baik.
Kau bilang 4, tapi kami benar-benar ingin Anda untuk mengatakan 1 karena kita hanya ingin 3 kelompok.
Jadi, bagaimana - Tidak, itu adalah contoh yang sangat baik karena maka bagaimana mungkin Anda katakan 1?
Apa hubungan antara 4 dan 1?
Nah, 4 mod 3 adalah 1.
Jadi jika Anda melanjutkan, Anda akan 2.
Jadi kita memiliki 1, 2, 3, 1, 2.
Sekali lagi, Anda benar-benar orang 5. Bagaimana Anda tahu untuk mengatakan 2 bukannya 5?
Anda mengatakan 5 mod 3 adalah 2.
Saya ingin melihat berapa banyak kelompok 3 yang tersisa, maka mana urutan am I.
Dan begitu kemudian jika kita terus menyusuri seluruh ruangan,
maka kita akan melihat bahwa kita selalu benar-benar menerapkan fungsi mod untuk diri kita sendiri
untuk jenis menghitung off.
Itu lebih merupakan suatu jenis contoh nyata tentang bagaimana Anda dapat menggunakan modulo
karena saya yakin sebagian besar dari kita mungkin sudah melalui proses yang
di mana kita sudah menghitung off.
Setiap pertanyaan tentang Modulo?
Ini akan menjadi sangat penting untuk memahami konsep ini,
jadi saya ingin memastikan kalian mengerti.
[Mahasiswa] Jika ada sisanya ada, apakah itu memberikan nomor yang sebenarnya?
Jika salah satu dari 3 pertama mereka telah melakukannya, akan itu telah memberi mereka apa yang mereka benar-benar,
atau akan berikan kepada mereka [tak terdengar] >> Itu pertanyaan yang bagus.
Ketika tidak ada sisa untuk Modulo - sehingga mengatakan Anda memiliki 6 mod 3 -
yang benar-benar memberikan Anda kembali 0.
Kita akan membicarakannya sedikit kemudian.
Oh yeah, misalnya, orang ke-3 - 3 mod 3 sebenarnya 0 tapi dia bilang 3.
Jadi itulah jenis seperti tangkapan batin, misalnya,
seperti apa, jika mod adalah 0 maka aku akan menjadi orang ke-3.
Tapi kita akan masuk ke jenis bagaimana kita mungkin ingin berurusan dengan apa yang nantinya 0.
Jadi sekarang kita entah bagaimana memiliki cara pemetaan zed ke sebelah kanan surat.
Jadi sekarang kita sudah melalui contoh-contoh ini,
kita semacam melihat bagaimana Caesar bisa bekerja.
Anda melihat 2 huruf dan kemudian Anda melihat mereka bergeser.
Jadi mari kita coba dan menyatakan bahwa dalam hal formula.
Formula ini sebenarnya diberikan kepada Anda di spec,
tapi mari kita lihat jenis melalui apa artinya setiap variabel.
Hasil akhir kami akan menjadi ciphertext.
Jadi ini mengatakan bahwa karakter engan dari ciphertext
akan sesuai dengan karakter i dari plaintext.
Itu masuk akal karena kami ingin selalu berbaris hal-hal ini.
Jadi itu akan menjadi karakter engan dari ciphertext ditambah k, yang merupakan kunci kami -
yang masuk akal - dan kemudian kita memiliki mod 26.
Ingat kembali ketika kami memiliki zed
kami tidak ingin masuk ke karakter, jadi kami ingin mod
dan jenis membungkus alfabet.
Setelah zed Anda akan pergi ke a, b, c, d, sampai Anda sampai ke nomor yang benar.
Jadi kita tahu bahwa zed, jika + 6, akan memberi kita f karena setelah zed datang a, b, c, d, e, f.
Jadi mari kita ingat kita tahu pasti bahwa zed + 6 akan memberi kita f.
Dalam nilai ASCII, z adalah 122 dan f adalah 102.
Jadi kita harus menemukan beberapa cara untuk membuat kami rumus Caesar memberi kita 102
setelah mengambil di 122.
Jadi jika kita hanya menerapkan rumus,% ('z' + 6) 26, yang benar-benar memberi Anda 24
karena 122 + 6 adalah 128, 128% 26 memberikan 24 sisanya.
Tapi itu tidak benar-benar berarti f. Itu pasti tidak 102.
Itu juga bukan huruf 6 dalam alfabet.
Jadi jelas, kita perlu memiliki beberapa cara tweaking ini sedikit.
Dalam hal alfabet biasa, kita tahu bahwa z adalah huruf 26 dan f adalah 6.
Tapi kami dalam ilmu komputer, sehingga kita akan indeks pada 0.
Jadi bukannya z menjadi nomor 26, kita akan mengatakan itu nomor 25
karena adalah 0.
Jadi sekarang mari kita menerapkan formula ini.
Kami memiliki z diwakili oleh 25 + 6, yang memberikan Anda 31.
Dan 31 mod 26 memberi Anda 5 sebagai sisanya.
Itu sempurna karena kita tahu bahwa f adalah huruf ke-5 dalam alfabet.
Tapi itu masih tidak f, kan? Ini masih belum 102.
Jadi untuk pset ini, tantangan akan mencoba untuk mencari tahu hubungan
antara mengkonversi antara nilai-nilai ASCII dan indeks alfabet.
Pada dasarnya, apa yang akan Anda ingin lakukan, Anda ingin memulai dengan nilai-nilai ASCII,
tapi kemudian Anda ingin entah bagaimana menerjemahkannya ke indeks alfabet
kemudian menghitung apa surat itu harus - pada dasarnya, apa yang indeks alfabet adalah
dari karakter cipher - kemudian menerjemahkannya kembali ke nilai-nilai ASCII.
Jadi jika Anda mencabut tabel ASCII Anda, kemudian mencoba dan menemukan hubungan antara, katakanlah, 102 dan 5
atau 122 dan 25.
Kami telah mendapat kunci kami dari argumen baris perintah, kita sudah plaintext,
kami telah dienkripsi itu.
Sekarang semua yang tersisa untuk dilakukan adalah mencetaknya.
Kita bisa melakukan ini beberapa cara yang berbeda.
Apa yang kita bisa lakukan adalah benar-benar mencetak seperti yang kita pergi bersama.
Seperti yang kita iterate atas karakter dalam string,
kita hanya bisa hanya mencetak benar maka ketika kita menghitungnya.
Atau, Anda juga bisa menyimpannya dalam array dan memiliki sebuah array karakter
dan pada akhirnya iterate atas bahwa seluruh array dan mencetaknya.
Jadi, Anda memiliki beberapa pilihan untuk itu.
Dan ingat bahwa% c akan menjadi tempat untuk mencetak karakter.
Jadi ada yang kita miliki Caesar, dan sekarang kita beralih ke Vigenere,
yang sangat mirip dengan Caesar tapi hanya sedikit lebih kompleks.
Jadi pada dasarnya dengan Vigenere adalah Anda akan lewat di kata kunci.
Jadi, bukannya nomor, Anda akan memiliki sebuah string,
dan sehingga akan bertindak sebagai kata kunci Anda.
Lalu, seperti biasa, Anda akan mendapatkan prompt untuk string dari user
dan kemudian menulis dlm kode dan kemudian memberi mereka kembali ciphertext.
Jadi seperti yang saya katakan, itu sangat mirip dengan Caesar, kecuali bukan pergeseran oleh sejumlah tertentu,
jumlah ini benar-benar akan berubah setiap waktu dari karakter ke karakter.
Untuk menyatakan bahwa jumlah sebenarnya bergeser, itu diwakili oleh huruf keyboard.
Jadi jika Anda memasukkan dalam pergeseran, misalnya, maka yang akan sesuai dengan pergeseran dari 0.
Jadi sekali lagi kembali ke indeks alfabet.
Apa yang mungkin berguna jika Anda melihat bahwa kita benar-benar berurusan dengan nilai-nilai ASCII
serta surat-surat, serta indeks alfabet,
mungkin menemukan atau membuat meja sendiri ASCII Anda yang menunjukkan indeks alfabet dari 0 sampai 25,
melalui z, dan nilai-nilai ASCII sehingga Anda dapat melihat jenis hubungan
dan sketsa keluar dan mencoba dan menemukan beberapa pola.
Demikian pula, jika Anda bergeser pada contoh tertentu dengan f -
dan ini adalah baik f ​​kecil atau huruf besar - maka itu akan sesuai dengan 5.
Apakah kita baik sejauh ini?
Rumus untuk Vigenere sedikit berbeda.
Pada dasarnya, Anda melihat bahwa itu hanya seperti Caesar,
kecuali bukan hanya k kita memiliki k indeks j.
Perhatikan bahwa kita tidak menggunakan i karena pada dasarnya, panjang kata kunci
belum tentu panjang ciphertext kami.
Ini akan menjadi lebih jelas sedikit ketika kita melihat contoh bahwa saya memiliki sedikit nanti.
Pada dasarnya, jika Anda menjalankan program Anda dengan kata kunci ohai,
maka itu berarti bahwa setiap kali, ohai akan menjadi pergeseran Anda.
Jadi tergantung pada apa posisi Anda berada di kata kunci Anda,
Anda akan menggeser karakter tertentu Anda ciphertext dengan jumlah itu.
Sekali lagi, seperti Caesar, kami ingin memastikan bahwa kami menjaga kapitalisasi hal-hal
dan kami menulis dlm kode huruf saja, bukan karakter atau spasi.
Jadi melihat kembali ke Caesar pada fungsi yang Anda mungkin telah digunakan,
cara yang Anda memutuskan bagaimana untuk menggeser sesuatu, dan menerapkan bahwa untuk program anda di sini.
Jadi mari kita memetakan ini.
Kami memiliki plaintext yang kita sudah dari pengguna dari GetString
mengatakan ini ... adalah CS50!
Kemudian kita memiliki kata kunci dari ohai.
The 4 karakter pertama adalah cukup sederhana.
Kita tahu bahwa T akan digeser oleh o,
maka h akan digeser oleh h, i akan digeser oleh.
Di sini Anda melihat bahwa mewakili 0,
jadi maka nilai akhir sebenarnya hanya surat yang sama seperti sebelumnya.
Kemudian s digeser oleh i.
Tapi kemudian Anda memiliki periode ini di sini.
Kami tidak ingin menulis dlm kode itu, jadi maka kita tidak mengubahnya dengan apapun
dan hanya mencetak periode berubah.
[Mahasiswa] Saya tidak mengerti bagaimana Anda tahu bahwa ini digeser oleh - Mana Anda - >> Oh, maaf.
Di bagian atas di sini Anda melihat bahwa baris perintah argumen ohai sini,
itu akan menjadi kata kunci.
Dan jadi pada dasarnya, Anda bersepeda di atas karakter dalam kata kunci.
[Mahasiswa] Jadi o akan menggeser sama -
Jadi o sesuai dengan jumlah tertentu dalam alfabet.
[Mahasiswa] Kanan. Tapi dari mana Anda mendapatkan bagian dari CS50?
Oh. Itu di GetString mana Anda seperti, "Beri aku string untuk mengkodekan."
[Mahasiswa] Mereka akan memberikan Anda bahwa argumen untuk bergeser
dan kemudian Anda akan meminta string pertama Anda. >> Ya.
Jadi ketika mereka menjalankan program, mereka akan memasukkan kata kunci
dalam argumen baris perintah mereka ketika mereka menjalankannya.
Kemudian setelah Anda telah memeriksa bahwa mereka sudah benar-benar memberi Anda 1 dan tidak lebih, tidak kurang,
maka Anda akan meminta mereka untuk string, mengatakan, "Beri aku sebuah string."
Jadi, di sanalah dalam kasus ini mereka memberi Anda ini ... adalah CS50!
Jadi Anda akan menggunakan dan menggunakan ohai dan iterate atas.
Perhatikan bahwa di sini kita melompati enkripsi periode,
tetapi dalam hal posisi kami untuk ohai, yang berikutnya kami menggunakan o.
Dalam hal ini agak sulit untuk melihat karena itulah 4,
jadi mari kita lanjutkan sedikit. Hanya menempel dengan saya di sini.
Lalu kami memiliki i dan s, yang kemudian diterjemahkan oleh o dan h masing-masing.
Lalu kami memiliki ruang, dan sebagainya maka kita tahu bahwa kita tidak akan menulis dlm kode ruang.
Tetapi perhatikan bahwa alih-alih pergi ke di tempat ini di sini,
kita mengenkripsi oleh - Saya tidak tahu apakah Anda dapat melihat bahwa - di sini.
Jadi tidak seperti Anda benar-benar telah ditentukan, katakanlah, o pergi di sini, h diletakkan di sini,
yang berjalan di sini, saya pergi di sini, o, h,, i, o, h,, i. Anda tidak melakukan itu.
Anda hanya menggeser posisi Anda dalam kata kunci
ketika Anda tahu bahwa Anda benar-benar akan mengenkripsi surat yang sebenarnya.
Apakah itu semacam masuk akal?
Oke.
Jadi hanya beberapa pengingat.
Anda ingin memastikan bahwa Anda hanya maju ke huruf berikutnya dalam kata kunci Anda
jika karakter dalam plaintext Anda adalah surat.
Jadi katakan kami di o.
Kami melihat bahwa karakter berikutnya, indeks i dari plaintext, adalah angka, misalnya.
Kemudian kita tidak memajukan j, indeks untuk kata kunci kita, sampai kita mencapai surat lagi.
Sekali lagi, Anda juga ingin memastikan bahwa Anda sampul ke awal kata kunci
ketika Anda berada di akhir itu.
Jika Anda lihat di sini kita berada di i, yang berikutnya harus o.
Jadi Anda ingin menemukan beberapa cara untuk dapat sampul ke awal kata kunci Anda
setiap kali Anda mencapai akhir.
Dan begitu lagi, apa jenis operator berguna dalam kasus untuk membungkus di sekitar?
Seperti dalam penghitungan off contoh.
[Mahasiswa] Tanda persen. >> Ya, tanda persen, yaitu modulo.
Jadi modulo akan berguna di sini ketika Anda ingin membungkus atas indeks dalam ohai Anda.
Dan hanya sedikit cepat: Cobalah untuk memikirkan membungkus atas kata kunci sedikit seperti off menghitung,
di mana jika ada 3 kelompok, orang ke-4,
jumlah mereka bahwa mereka mengatakan adalah 4 mod 3, yang 1.
Jadi mencoba dan berpikir dengan cara itu.
Seperti yang Anda lihat dalam formula, di mana pun Anda memiliki ci dan kemudian pi tapi kemudian kj,
Anda ingin memastikan bahwa Anda melacak mereka.
Anda tidak perlu menyebutnya i, Anda tidak perlu menyebutnya j,
tetapi Anda ingin memastikan bahwa Anda melacak posisi bahwa Anda berada di dalam plaintext Anda
serta posisi yang Anda berada di dalam kata kunci Anda
karena mereka belum tentu akan menjadi sama.
Tidak hanya kata kunci - itu bisa menjadi panjang sekali berbeda dari plaintext Anda.
Juga, plaintext Anda, ada angka dan karakter,
sehingga tidak akan sempurna cocok bersama-sama. Ya.
[Mahasiswa] Apakah ada fungsi untuk mengubah kasus?
Dapatkah Anda mengubah ke ibukota A? >> Ya, pasti ada.
Anda dapat memeriksa - Saya percaya toupper itu, semua kata 1.
Tapi ketika Anda mencoba untuk cipher hal dan melestarikan teks,
yang terbaik pada dasarnya memiliki kasus yang terpisah.
Jika itu huruf besar, maka Anda ingin bergeser ini
karena dalam rumus Anda, ketika Anda melihat kembali bagaimana kita harus jenis pergi
bergantian antara cara ASCII mewakili angka
dan indeks alfabet yang sebenarnya, kami ingin memastikan
ada akan menjadi semacam pola yang Anda akan digunakan.
Catatan lain pada pola, sebenarnya.
Anda akan pasti akan berurusan dengan angka.
Cobalah untuk tidak menggunakan nomor ajaib, yang merupakan contoh dari gaya.
Jadi mengatakan Anda ingin sesuatu yang setiap pergeseran waktu dengan seperti -
Oke, jadi petunjuk, spoiler lain adalah ketika Anda akan menggeser sesuatu
dengan jumlah tertentu, cobalah untuk tidak menyatakan bahwa dengan jumlah yang sebenarnya
melainkan mencoba dan melihat apakah Anda dapat menggunakan nilai ASCII, yang akan jenis lebih masuk akal.
Catatan lain: Karena kita sedang berhadapan dengan formula,
meskipun TF Anda akan tahu apa jenis pola Anda mungkin menggunakan,
terbaik untuk dalam bentuk komentar Anda menjelaskan logika, seperti,
"Saya menggunakan pola ini karena ..." dan jenis menjelaskan pola singkat dalam komentar Anda.
[Ini adalah langkah-langkah 2] Jika tidak ada pertanyaan lain, maka saya hanya akan tinggal di sini untuk sedikit.
Good luck dengan pset Anda 2: Crypto dan terima kasih untuk datang.
[Mahasiswa] Terima kasih. Terima kasih >>.
[Media intro Offline]