[Powered by Google Translate] [Walkthrough - Masalah Set 2]
[Zamyla Chan - Universiti Harvard]
[Ini adalah CS50. CS50.TV]
Semua hak. Hello, semua orang, dan mengalu-alukan kepada 2 Walkthrough.
Pertama, saya ingin mengucapkan tahniah kepada anda untuk penamat pset 1.
Saya tahu bahawa ia boleh menjadi sedikit sukar bagi sesetengah daripada anda,
mungkin telah program komputer pertama anda bahawa anda menulis,
tetapi hanya ingat bahawa pada akhir ini, apabila anda melihat kembali pada akhir semester,
anda akan melihat di pset 1 dan anda akan berkata, "Hei, saya boleh melakukan dalam masa 5 minit."
Jadi tahu dan mempercayai bahawa pada akhir ini anda pasti akan mendapati pset 1 agak mudah.
Tetapi sekarang ia adalah satu pencapaian yang besar, dan tahniah untuk mendapat dilakukan.
Sekarang, juga nota ringkas sebelum kita masuk ke dalam daging Walkthrough.
Saya hanya mahu membuat nota ringkas yang saya kadang-kadang tidak akan mempunyai masa yang cukup
semasa walkthroughs untuk pergi melalui setiap cara tunggal melakukan set masalah
dan agak hanya mungkin memberi tumpuan kepada 1 atau 2 jenis pelaksanaan,
cara-cara yang anda boleh lakukan ini.
Tetapi itu bukan untuk mengatakan bahawa anda adalah dilarang daripada melakukan cara lain.
Terdapat sering, seperti sains komputer, pelbagai cara untuk melakukan sesuatu,
dan sebagainya pasti berasa bebas untuk menggunakan jenis yang berlainan penyelesaian daripada saya mungkin telah dibentangkan.
[Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net]
[Pset2 - 0. A Seksyen Soalan - 1. Caesar - 2. Vigenere]
Semua hak. Jadi masalah menetapkan 2: Crypto adalah satu keseronokan.
Sekali lagi, dengan setiap pset anda akan mula dengan seksyen soalan
itu akan dijalankan dalam seksyen anda dengan rakan-rakan mengajar anda ditugaskan.
Kami tidak akan pergi melalui ini lebih Walkthrough,
tetapi mereka pasti akan membantu anda melengkapkan pset.
Jadi bahagian pertama set masalah adalah Caesar.
Dan sebagainya di Caesar seseorang akan lulus anda kunci dengan integer,
dan anda akan menyulitkan rentetan teks yang mereka menyediakan anda
dan memberikan mereka kembali satu perkara yang disulitkan.
Jika sesiapa menonton A Story Krismas, terdapat satu contoh bahawa terdapat.
Kemudian bahagian kedua set masalah adalah Vigenere,
yang merupakan teknik penyulitan yang lebih maju.
Dan supaya kita pergi untuk menulis dlm kod sekeping teks,
kecuali bukannya dengan hanya satu integer, kita sebenarnya akan mengekod
dengan kata kunci bahawa pengguna akan memberikan kita.
Okay, jadi alat yang pertama di hari ini toolbox sebenarnya akan mengemaskini perkakas.
Pada papan perbincangan, kita akan melihat perkara-perkara seperti, "Kenapa tidak kerja ini?"
"Mengapa tidak Mengemukakan 50 kerja?"
dan sering penyelesaian adalah sebenarnya hanya untuk mengemaskini perkakas anda.
Dan jadi jika anda hanya menjalankan dalam tetingkap terminal sudo perkakas anda yum-y -
itulah bendera mengatakan ya, mengemaskini segala-galanya - update,
maka perkakas anda akan mengemaskini jika perlu menjadi.
Dan ia tidak menyakiti jika anda sudah berada di versi yang paling baru-baru ini perkakas.
Kemudian ia hanya akan mengatakan tidak ada update baru yang tersedia dan anda boleh terus bekerja bersama-sama.
Tetapi ini adalah baik untuk melaksanakan walaupun setiap kali anda membuka perkakas
kerana kami masih sangat -
kadang-kadang jika kita datang ke pepijat - menetapkan ia dalam perkakas.
Jadi pastikan bahawa anda mempunyai versi paling terkini perkakas
dan menjalankan bahawa mengemaskini sana.
Semua hak. Jadi kerana kita sedang berurusan dengan huruf dan perubahan, enciphering perkara,
kita akan benar-benar mahu menjadi kawan terbaik dengan carta ASCII kami.
Terdapat adalah orang-orang yang banyak dalam talian, jika anda mencari. Mungkin juga membuat anda sendiri.
Pada asasnya, dengan setiap huruf dan setiap nombor dan watak setiap
terdapat sebilangan yang dikaitkan dengan mereka,
dan sebagainya ia adalah baik untuk melihat nilai ASCII mereka bersama-sama surat sebenar.
Yang pasti akan membantu anda dalam set masalah.
Satu perkara yang benar-benar membantu saya dalam set masalah ini adalah sebenarnya mencetak ia keluar,
dan seperti yang saya telah melalui, saya benar-benar akan menarik di atasnya,
menulis, "Jika ini telah pergi ke sana, maka ..."
Jenis menarik di atasnya dan menandakan ia, menjadi kawan terbaik dengan meja ASCII anda.
Kemudian kita mempunyai alat yang lain sedikit di tangan kita.
Kali ini bukan sebenarnya mendorong pengguna untuk semua input mereka
kita akan melakukan gabungan.
Kami akan meminta mereka untuk input beberapa,
tetapi kita juga akan hanya menggunakan hujah baris arahan.
Jadi, apabila mereka menjalankan program mereka, biasanya anda katakan. / Hello, misalnya,
jika program anda adalah hello.c.
Tetapi kali ini bukan hanya mengatakan bahawa, mereka boleh meletakkan perkataan, hujah selepas itu.
Dan sebagainya kita akan menggunakan apa sahaja yang mereka lulus kepada kita sebagai input mereka juga,
jadi bergerak di luar hanya menggesa untuk integer tetapi juga menggunakan hujah baris arahan.
Dan kemudian kita akan pergi ke tatasusunan dan rentetan, yang kita akan menggunakan banyak juga.
Berikut adalah hanya satu contoh 1 carta ASCII mini.
Seperti yang saya katakan, setiap huruf sepadan dengan nombor,
dan sebagainya membiasakan diri dengan itu. Ia akan datang dalam berguna.
Dan kemudian apabila kita mula melakukan beberapa ASCIIMath berurusan dengan nombor -
menambah, menolak mereka - maka pasti baik untuk merujuk kepada carta ini.
Jadi di sini adalah satu contoh cipher Caesar - sesuatu yang anda mungkin telah dimainkan dengan.
Ia adalah hanya roda. Pada asasnya, terdapat abjad luar dan kemudian ada abjad dalaman.
Jadi di sini adalah satu contoh cipher Caesar tetapi dengan kunci 0.
Pada asasnya, sejajar dengan A, B sejajar dengan B, sepanjang jalan sehingga ke Z.
Tetapi kemudian mengatakan kita mahu kunci 3, misalnya.
Kemudian kita akan memutarkan roda dalaman supaya A kini menjajarkan dengan D, dan lain-lain
Dan sebagainya ini pada asasnya adalah apa yang kita akan lakukan.
Kami tidak mempunyai roda, tetapi apa yang kita akan lakukan membuat program kami
jenis beralih abjad bersama-sama dengan kami jumlah tertentu nombor.
Jadi seperti yang saya katakan sebelum ini, kita akan berurusan dengan hujah baris arahan
serta mendapat integer.
Jadi cara yang pengguna akan menjalankan program Caesar anda adalah dengan berkata. / Caesar
dan kemudian memasuki nombor selepas itu.
Dan nombor yang mewakili kunci, peralihan,
berapa banyak kali anda akan berputar roda dalaman cipher Caesar anda.
Dan supaya anda lihat di sini contoh.
Jika kita memasuki huruf dari A ke L dalam cipher Caesar kami,
maka ia akan input D melalui O kerana itulah setiap surat beralih lebih daripada 3 kali,
seperti contoh roda yang saya menunjukkan kepada kamu.
Jadi, maka jika anda memasuki, misalnya, Ini adalah CS50!
maka ia juga akan memindahkan semua huruf.
Dan itulah satu perkara yang penting dalam kedua-dua Caesar dan Vigenere
adalah bahawa kita akan melangkau ke atas apa-apa surat bukan.
Jadi mana-mana ruang, watak, dan lain-lain, nombor, kita pergi untuk memastikan mereka yang sama.
Kami hanya akan beralih surat dalam kes ini.
Jadi seperti yang anda lihat dalam roda, kami hanya mempunyai huruf yang ada pada kita,
jadi kita hanya mahu beralih huruf dan menyulitkan huruf.
Jadi perkara pertama yang perlu dilakukan, anda melihat bahawa penggunaan untuk Caesar dalam masalah menetapkan 2
adalah untuk menjalankan Caesar dan kemudian masukkan nombor apabila anda menjalankan di terminal.
Jadi apa yang perlu kita lakukan adalah untuk entah bagaimana mendapatkan kunci itu dan mengakses.
Dan jadi kami mahu entah bagaimana melihat ia akan menjadi hujah baris arahan kedua.
Yang pertama akan menjadi / Caesar, dan yang seterusnya akan menjadi kekunci nombor.
Jadi, sebelum kita mempunyai int utama (tidak sah) untuk memulakan program C kami.
Kami akan mengupas kembali lapisan sedikit
dan sebenarnya melihat bahawa bukannya lulus terbatal fungsi utama kami
kita sebenarnya berurusan dengan 2 parameter.
Kami mempunyai int dinamakan argc dan kemudian pelbagai rentetan yang dipanggil argv.
Jadi argc ialah integer,
dan ia mewakili bilangan hujah yang diluluskan untuk program anda.
Dan kemudian argv sebenarnya senarai hujah-hujah yang diluluskan.
Semua hujah-hujah tali, dan sebagainya argv mewakili pelbagai, senarai, rentetan.
Mari kita bercakap tentang tatasusunan sedikit.
Perlengkapan dasarnya struktur data baru.
Kami mempunyai ints, kami telah beregu, kita mempunyai rentetan, dan sekarang kami mempunyai array.
Tatasusunan adalah struktur data yang boleh memegang nilai-nilai pelbagai jenis yang sama,
jadi pada dasarnya, senarai apa jua jenis yang anda mahu.
Pada asasnya, jika anda mahu senarai integer semua dalam 1 pembolehubah,
maka anda akan mewujudkan pembolehubah baru yang pelbagai int jenis.
Jadi tatasusunan adalah sifar diindeks, yang bermaksud bahawa elemen pertama array adalah pada 0 indeks.
Jika array adalah 4 panjang, seperti dalam contoh ini, maka elemen terakhir anda akan berada pada indeks 3,
yang 4-1.
Jadi untuk mewujudkan pelbagai, anda akan melakukan sesuatu seperti ini.
Katakanlah anda mahu pelbagai berganda.
Ini pergi untuk mana-mana jenis jenis data, walaupun.
Jadi mengatakan anda mahu pelbagai double. Katakanlah anda mahu memanggilnya peti mel.
Sama seperti anda akan memulakan mana-mana dua yang lain,
anda akan mengatakan dua kali ganda dan kemudian nama, tetapi kali ini kita meletakkan kurungan persegi,
dan kemudian nombor yang akan ada panjang array.
Perhatikan bahawa dalam barisan kita boleh tidak pernah menukar panjang,
supaya anda sentiasa perlu untuk menentukan dan memilih berapa banyak kotak,
berapa banyak nilai-nilai pelbagai anda akan memegang.
Jadi untuk menetapkan nilai-nilai yang berbeza dalam pelbagai anda, anda akan menggunakan sintaks berikut,
seperti yang anda lihat pada slaid.
0 indeks peti mel anda mempunyai akan ditetapkan kepada 1.2,
peti mel indeks 1 set kepada 2.4, dan lain-lain
Jadi sekarang kita telah memeriksa barisan sedikit, mari kita kembali kepada argc dan argv.
Kita tahu bahawa argv kini pelbagai rentetan.
Jadi apabila pengguna pas - mengatakan mereka sedang menjalankan program -
yang mereka katakan. / hello David Malan,
apa yang program ini akan lakukan untuk anda sudah sebenarnya tampil dengan apa argc dan argv.
Jadi anda tidak perlu bimbang tentang itu.
Argc dalam kes ini akan menjadi 3 kerana ia melihat 3 perkataan yang berbeza yang dipisahkan oleh ruang.
Dan demikian maka pelbagai dalam hal ini, indeks pertama akan / hello,
seterusnya Daud, seterusnya satu Malan.
Adakah sesiapa yang melihat segera apa hubungan antara argv,
array, dan argc?
Yeah. Kita akan masuk ke dalam bahawa dalam contoh di args.c.
Mari kita lihat jika kita boleh mengambil kesempatan daripada hubungan antara 2.
Di sini anda mungkin mendapati bahawa di dalam perkakas aplikasi lalai
untuk membuka c fail adalah kadang-kadang Emacs.
Tetapi kita mahu berurusan dengan gedit, jadi apa yang boleh anda lakukan adalah anda boleh klik kanan pada fail C anda,
pergi ke Hartanah, Buka Dengan, dan kemudian memilih gedit, Tetapkan sebagai lalai,
dan kini program anda harus membuka dalam gedit bukannya Emacs.
Sempurna.
Jadi di sini saya mempunyai program yang saya ingin mencetak keluar setiap hujah baris arahan.
Jadi apa sahaja pengguna input, saya mahu pada dasarnya kembali kembali kepada mereka pada baris baru.
Jadi apa struktur yang boleh kita gunakan untuk melelar atas sesuatu -
sesuatu yang anda mungkin digunakan dalam 1 pset anda?
Jika anda mahu pergi melalui beberapa perkara? >> [Pelajar] Untuk gelung.
Untuk gelung. Tepat sekali. Jadi mari kita mulakan dengan bagi gelung.
Kami mempunyai int i = 0. Mari kita mulakan dengan pembolehubah pengawalan standard.
Saya akan meninggalkan keadaan untuk satu set dan kemudian mengatakan i + +, pergi untuk melakukan perkara-perkara di sana.
Semua hak.
Jadi memikirkan kembali ke argv, jika argv adalah senarai hujah yang diluluskan dalam program
dan argc adalah beberapa hujah-hujah dalam program ini,
maka itu bermakna bahawa argc adalah asasnya panjang argv, betul-betul,
kerana ada akan menjadi sebagai banyak hujah sebagai nilai argc.
Jadi, jika kita mahu untuk melelar atas setiap elemen dalam argv,
kita akan mahu untuk setiap kali mengakses pembolehubah di argv pada indeks yang diberikan.
Yang boleh diwakili dengan ini, kan?
Pemboleh ubah di sini mewakili rentetan tertentu dalam hal ini
kerana ia adalah pelbagai rentetan - rentetan tertentu pada indeks yang diberikan.
Apa yang kita mahu lakukan, dalam kes ini kita mahu untuk mencetak ia keluar, jadi katakan printf.
Dan kini argv adalah rentetan, jadi kita mahu meletakkan placeholder bahawa terdapat.
Kami mahu barisan baru hanya untuk membuat ia kelihatan baik.
Jadi di sini kita mempunyai gelung untuk. Kami tidak mempunyai keadaan lagi.
Jadi saya bermula pada 0, dan kemudian setiap kali ia akan mencetak rentetan yang diberikan
pada indeks yang tertentu dalam array.
Jadi, apabila kita mahu berhenti mencetak elemen dalam array?
Apabila kita telah selesai, kan? Apabila kita telah sampai ke penghujung array.
Jadi kita tidak mahu melebihi lepas panjang array,
dan kita sudah tahu kita tidak perlu untuk benar-benar aktif mengetahui apa yang panjang argv
kerana ia diberikan kepada kami, dan apa itu? Argc. Tepat sekali.
Jadi kita mahu melakukan proses ini nombor argc kali.
Saya tidak dalam direktori yang betul.
Semua hak.
Sekarang mari kita membuat args. Tiada kesilapan, yang besar.
Jadi mari kita hanya menjalankan args.
Apakah ini akan kembali kepada kita? Ia hanya akan mencetak semula.
"Anda dimasukkan args ke dalam program ini, saya akan memberikan kembali kepada anda."
Jadi mari kita mengatakan bahawa kita mahu mengatakan args maka foo bar.
Jadi maka ia mencetak ia keluar kembali kepada kami. Semua hak?
Jadi ada satu contoh bagaimana anda boleh menggunakan argc dan argv
mengetahui argc yang mewakili panjang argv.
Pastikan bahawa anda tidak pernah dengan akses tatasusunan 1 melampaui panjang array
kerana C pasti akan menjerit pada anda.
Anda akan mendapat sesuatu yang dipanggil kesalahan segmentasi,
yang tidak pernah menyeronokkan, pada dasarnya mengatakan anda cuba untuk mengakses sesuatu
yang tidak wujud, tidak tergolong kepada anda.
Jadi pastikan, dan terutamanya dengan pengindeksan sifar, kita tidak mahu -
Seperti misalnya, jika kita mempunyai pelbagai daripada 4 panjang,
bahawa indeks array 4 tidak wujud kerana kita bermula pada 0, pada sifar indeks.
Ia akan menjadi sifat kedua seperti gelung apabila kita bermula pada 0.
Jadi hanya menyimpan bahawa dalam fikiran.
Anda tidak mahu pernah mengakses indeks pelbagai yang di luar jangkauan anda.
Jadi kita boleh lihat sekarang bagaimana kita boleh jenis akses
hujah baris arahan yang diluluskan.
Tetapi seperti yang anda lihat tali, argv sebenarnya adalah rentetan pelbagai.
Jadi ia sebenarnya tidak integer lagi, tetapi di Caesar kita mahu berurusan dengan integer.
Nasib baik, terdapat satu fungsi yang dicipta untuk kita yang benar-benar boleh menukar rentetan kepada integer.
Juga di sini kita tidak berurusan dengan input pengguna di mana kita sedang mendorong mereka
untuk input di sini bagi kekunci, jadi kita boleh sebenarnya tidak reprompt dan berkata,
"Oh, beri saya integer lain, berkata, jika ia tidak sah."
Tetapi kita masih perlu untuk memeriksa penggunaan yang betul.
Di Caesar mereka hanya dibenarkan untuk lulus dalam 1 nombor,
dan supaya mereka perlu untuk menjalankan / Caesar dan kemudian mereka perlu memberi anda nombor.
Jadi argc mempunyai untuk menjadi bilangan tertentu.
Apakah nombor yang akan menjadi jika mereka perlu lulus anda / Caesar dan kemudian kunci?
Apakah argc? >> [Pelajar] 2. >> Dua. Tepat sekali.
Jadi, anda ingin memastikan bahawa argc ialah 2.
Jika tidak, anda pada dasarnya enggan untuk menjalankan program ini.
Dalam utama ia adalah fungsi yang mengatakan int utama,
demikian maka kita sentiasa dalam amalan yang baik pulangan 0 pada akhir program yang berjaya.
Jadi jika, katakan, mereka memberi anda 3 hujah baris arahan dan bukannya 2
atau memberi anda 1, misalnya, maka apa yang anda akan lakukan adalah anda akan mahu untuk memeriksa
dan kemudian kembali 1 berkata, tidak, saya tidak boleh meneruskan dengan program ini.
[Pelajar] Terdapat tidak boleh menjadi ruang dalam teks anda. >> Maafkan saya?
[Pelajar] Terdapat tidak boleh menjadi ruang dalam teks anda cuba untuk menyulitkan.
Ah!
Dari segi teks yang kita sedang cuba untuk menyulitkan, yang sebenarnya datang lewat
apabila kita memberi teks itu.
Jadi sekarang kita hanya menerima sebagai hujah arahan bilangan sebenar,
anjakan sebenar untuk penyulitan Caesar.
[Pelajar] Mengapa anda memerlukan 2 berbanding hanya argc 1? Ada pasti 1 nombor.
Betul. Sebab mengapa kita perlu 2 untuk argc bukannya 1
adalah kerana apabila anda menjalankan program dan berkata. / Caesar atau / hello,
yang benar-benar dikira sebagai hujah baris arahan.
Demikian maka yang sudah mengambil masa sehingga 1 dan demikian maka kita sedang memasukkan 1 tambahan.
Jadi anda memasukkan sebenarnya satu rentetan dalam hujah baris arahan.
Apa yang anda mahu lakukan, untuk Caesar kita mahu berurusan dengan integer,
supaya anda boleh menggunakan fungsi ini atoi.
Dan pada dasarnya, anda lulus dalam rentetan dan kemudian ia akan mengembalikan kamu kembali integer
jika ia adalah mungkin untuk membuat tali itu ke dalam integer.
Sekarang ingat apabila kita sedang berurusan dengan perkara-perkara printf atau GetString, seperti itu,
kita termasuk perpustakaan yang khusus kepada kita.
Jadi pada permulaan kita bermula dengan tag hash sesuatu standard I / O, h, seperti itu.
Nah, atoi tidak termasuk dalam salah satu dari orang-orang perpustakaan,
jadi apa yang perlu kita lakukan ialah kita perlu termasuk perpustakaan yang betul untuk itu.
Jadi ingat kembali kepada 1 Walkthrough di mana saya telah membincangkan fungsi manual.
Anda menaip manusia di terminal anda dan kemudian diikuti oleh nama fungsi.
Dan supaya akan membawa senarai keseluruhan penggunaannya,
tetapi juga ia akan membawa perpustakaan yang yang dimiliki.
Jadi saya akan meninggalkan bahawa kepada anda untuk menggunakan fungsi manual dengan atoi
dan memikirkan perpustakaan yang anda perlu termasuk untuk dapat menggunakan fungsi atoi.
Jadi kita telah mendapat kunci dan kini ia datang untuk mendapatkan teks biasa,
dan sebagainya yang sebenarnya akan menjadi input pengguna di mana anda segera.
Kami diuruskan dengan GetInt dan GetFloat, dan sebagainya dalam nada yang sama
kita akan untuk berurusan dengan GetString.
Tetapi dalam kes ini, kita tidak perlu untuk melakukan apa-apa buat sementara atau sementara gelung untuk memeriksa.
GetString pasti akan memberi kita rentetan,
dan kita akan menyulitkan apa sahaja pengguna memberikan kita.
Jadi, anda boleh mengandaikan bahawa semua ini rentetan pengguna dimasukkan adalah betul.
Besar.
Jadi kemudian sekali anda mendapat kunci dan sebaik sahaja anda telah mendapat teks,
sekarang apa yang tinggal ialah anda perlu menulis dlm kod plaintext.
Hanya dengan cepat meliputi lebih lingo, plaintext adalah apa yang pengguna memberi anda,
dan tulisan rahsia adalah apa yang kamu kembali kepada mereka.
Jadi tali, untuk menjadi mampu untuk pergi melalui surat sebenarnya melalui surat
kerana kita perlu beralih setiap huruf,
kita memahami bahawa rentetan, jika kita jenis kulit kembali lapisan,
kita lihat bahawa mereka hanya benar-benar senarai aksara.
Satu datang selepas yang lain.
Dan supaya kita boleh merawat rentetan sebagai tatasusunan kerana mereka adalah tatasusunan aksara.
Jadi mengatakan anda mempunyai rentetan bernama teks,
dan dalam teks yang berubah-ubah disimpan Ini adalah CS50.
Kemudian teks pada 0 indeks akan menjadi modal T, indeks 1 akan h, dan lain-lain
Dan kemudian dengan tatasusunan, dalam contoh argc dalam args.c,
kita melihat bahawa kita terpaksa untuk melelar lebih array
dan sebagainya kita terpaksa melelar i = 0 sehingga i adalah kurang daripada panjang.
Jadi kita memerlukan beberapa cara untuk memikirkan apa yang panjang rentetan kami
jika kita pergi untuk melelar atasnya.
Nasib baik lagi, terdapat satu fungsi di sana untuk kita, walaupun kemudian dalam CS50
anda pasti akan mampu untuk melaksanakan dan menjadikan fungsi anda sendiri
yang boleh mengira panjang rentetan.
Tetapi untuk sekarang kita akan menggunakan panjang tali, jadi strlen.
Anda lulus dalam rentetan, dan kemudian ia akan kembali anda int yang mewakili panjang rentetan anda.
Mari kita melihat contoh bagaimana kita mungkin mampu untuk melelar setiap aksara dalam rentetan
dan melakukan sesuatu dengan itu.
Apa yang kami mahu lakukan adalah melelar lebih setiap watak tali,
dan apa yang kita mahu lakukan ialah kita mencetak kembali setiap watak 1 oleh 1
kecuali kita menambah sesuatu yang di sebelahnya.
Jadi mari kita mulakan dengan bagi gelung. Int i = 0.
Kami akan meninggalkan ruang untuk keadaan.
Kami mahu melelar sehingga kita sampai ke penghujung tali, kan?
Demikian maka apa fungsi memberikan kita panjang tali?
[Sambutan pelajar didengar]
Itulah panjang hujah baris arahan.
Tetapi bagi rentetan kita mahu menggunakan fungsi yang memberikan kita panjang rentetan.
Jadi itulah panjang rentetan.
Dan demikian maka anda perlu untuk lulus dalam rentetan kepadanya.
Ia perlu tahu apa rentetan ia perlu untuk mengira panjang.
Demikian maka dalam kes ini, kita sedang berurusan dengan rentetan s.
Besar.
Jadi maka apa yang kita mahu lakukan, mari kita printf.
Sekarang, kita ingin berurusan dengan watak-watak. Kami ingin mencetak keluar setiap karakter individu.
Apabila anda mahu ia untuk mencetak apungan, anda akan menggunakan placeholder seperti f%.
Dengan int anda akan menggunakan% d.
Dan sebagainya yang sama, dengan watak anda menggunakan c% untuk mengatakan saya akan mencetak watak
yang disimpan di dalam pembolehubah.
Jadi kita mempunyai ini, dan mari kita menambah tempoh dan ruang untuk ia.
Aksara mana yang kita gunakan?
Kami akan menggunakan apa jua watak yang kita berada di tali.
Jadi maka kita akan menggunakan sesuatu dengan tali,
tetapi kita mahu mengakses watak tertentu di sana.
Jadi, jika rentetan hanya array, maka bagaimana kita mengakses unsur-unsur tatasusunan?
Kami mempunyai orang kurungan persegi, dan kemudian kita meletakkan indeks di sana.
Jadi kita mempunyai kurungan persegi. Indeks kami dalam kes ini, kita hanya boleh menggunakan i. Tepat sekali.
Jadi di sini kita mengatakan kita akan mencetak watak diikuti oleh titik dan ruang,
dan watak itu akan menjadi huruf i dalam s rentetan kami.
Saya hanya akan untuk menyelamatkan. Okay.
Sekarang saya akan untuk menjalankan panjang rentetan.
Jadi kita mempunyai rentetan dipanggil OMG, dan kini ia menekankan lebih.
Begitu juga, mari kita mengatakan bahawa kita benar-benar mahu mendapatkan rentetan dari pengguna.
Bagaimana kita mungkin melakukan ini?
Sebelum ini, bagaimana kita mendapatkan int an?
Kami berkata GetInt, betul-betul? Tetapi ini tidak int, jadi mari kita GetString.
Mari kita membuat tali panjang. Di sini kita tidak masukkan segera khusus.
Jadi, saya tidak tahu.
Saya akan meletakkan nama saya di sini dan sebagainya maka saya boleh melakukan salah satu daripada perkara-perkara
di mana saya memberikan satu perkataan bagi setiap huruf atau sesuatu seperti itu. Sejuk.
Jadi itulah panjang rentetan.
Jadi kita kembali kepada Caesar.
Kami mempunyai beberapa alat tentang bagaimana kita melelar atas rentetan,
bagaimana kita mengakses setiap elemen individu.
Jadi sekarang kita boleh mendapatkan kembali kepada program ini.
Seperti yang saya nyatakan sebelum ini, dalam jadual ASCII, rakan anda yang terbaik,
anda akan melihat nombor yang dikaitkan dengan setiap huruf.
Jadi di sini mengatakan plaintext kami adalah saya pening!
Kemudian setiap watak-watak ini akan mempunyai bilangan dan nilai ASCII yang dikaitkan dengannya,
walaupun apostrofe, walaupun ruang, walaupun tanda seru,
jadi anda akan mahu menyimpan bahawa dalam fikiran.
Jadi mengatakan utama kami bahawa pengguna termasuk dalam hujah baris arahan mereka adalah 6.
Ini bermakna bagi huruf pertama, yang saya, yang diwakili sebanyak 73,
anda mahu untuk kembali kepada mereka apa-apa surat diwakili oleh nilai ASCII 73 + 6.
Dalam kes ini, yang akan menjadi 79.
Sekarang kita mahu pergi ke watak seterusnya.
Jadi seterusnya dalam indeks 1 daripada plaintext akan apostrofe.
Tetapi ingat kita hanya mahu menulis dlm kod huruf.
Jadi, kita mahu pastikan bahawa apostrofe sebenarnya tetap sama,
bahawa kita tidak menukar 39-45 apa sahaja.
Kami mahu mengekalkan ia sebagai apostrofe.
Jadi kita mahu ingat hanya menulis dlm kod huruf
kerana kita mahu semua simbol-simbol lain untuk kekal dalam program kami.
Satu lagi perkara yang kita mahu ialah untuk memelihara permodalan.
Jadi, apabila anda mempunyai huruf besar, ia perlu kekal sebagai satu huruf.
Lowercases perlu tinggal sebagai huruf kecil.
Jadi beberapa fungsi yang berguna untuk menjadi mampu untuk berurusan dengan hanya huruf enciphering
dan menyimpan memelihara permodalan perkara
adalah fungsi islower isalpha, isupper,.
Dan sebagainya ini adalah fungsi yang kembali anda nilai Boolean.
Pada asasnya, benar atau palsu. Adakah ini satu huruf besar? Adakah abjad angka ini?
Apakah surat ini, pada asasnya.
Jadi di sini adalah 3 contoh bagaimana anda akan menggunakan fungsi itu.
Pada asasnya, anda boleh menguji sama ada nilai dikembalikan kepada anda oleh fungsi itu adalah benar atau palsu
berdasarkan input yang.
Sama ada melakukan sesuatu yang tidak menulis dlm kod atau Cipher atau pastikan bahawa ia adalah huruf besar, dan lain-lain
[Pelajar] Bolehkah anda hanya menjelaskan mereka lebih sedikit dan bagaimana anda menggunakan mereka? >> Ya, pasti.
Jadi, jika kita melihat kembali, di sini kita mempunyai modal saya, betul-betul?
Jadi kita tahu bahawa saya pergi ke Wahai kerana saya + 6 ialah O.
Tetapi kita mahu pastikan bahawa O akan menjadi modal O.
Jadi, pada asasnya, yang jenis pergi untuk menukar input kami.
Jadi, sama ada ia besar atau tidak akan jenis mengubah cara bahawa kita berurusan dengan ia.
Jadi maka jika kita menggunakan fungsi isupper pada indeks yang tertentu,
jadi isupper ("I"), yang kembali untuk kita benar, supaya kita tahu bahawa ia adalah atas.
Jadi maka berdasarkan itu, kemudian kita akan pergi ke formula
bahawa anda akan menggunakan untuk beralih perkara di Caesar,
demikian maka pada dasarnya, terdapat akan menjadi formula yang sedikit berbeza jika ia adalah huruf besar
berbanding kepada huruf kecil. Masuk akal?
Yeah. Tiada kebimbangan.
Saya bercakap sedikit tentang menambah 6 surat, yang tidak cukup masuk akal
kecuali apabila kita jenis memahami bahawa watak-watak ini
adalah jenis ditukar dengan integer.
Apa yang kita lakukan ialah kita jenis penggunaan pemutus tersirat.
Kami akan pergi ke pemutus sedikit kemudian di mana anda mengambil nilai dan anda menghidupkan ia ke dalam jenis yang berbeza
daripada ia asalnya adalah.
Tetapi dengan pset ini kita akan dapat jenis silih berganti menggunakan watak-watak
dan nilai-nilai yang sama mereka integer.
Jadi jika anda hanya menyarungi watak dengan hanya petikan tunggal,
maka anda akan dapat untuk bekerja dengannya dengan integer, berurusan dengan ia sebagai integer.
Jadi C modal berkaitan kepada 67. F kecil berkaitan hingga 102.
Sekali lagi, jika anda mahu tahu nilai-nilai ini, melihat di meja ASCII anda.
Jadi mari kita pergi ke beberapa contoh bagaimana anda mungkin tidak dapat menolak dan menambah,
bagaimana anda boleh sebenarnya benar-benar bekerja dengan watak-watak ini, gunakan mereka silih berganti.
Saya mengatakan ASCIIMath yang akan mengira penambahan watak integer
dan kemudian memaparkan watak paduan serta nilai ASCII paduan.
Dan sebagainya di sini saya cakapkan - we'll berurusan dengan bahagian ini kemudian -
tetapi pada dasarnya, saya mengatakan bahawa pengguna harus mengatakan ASCIIMath dijalankan bersama-sama dengan kunci,
dan saya mengatakan bahawa kunci yang akan menjadi nombor
yang kita pergi untuk menambah watak ini.
Jadi di sini melihat bahawa sejak saya menuntut kunci,
sejak saya menuntut bahawa mereka sedang memberikan saya 1 perkara,
Saya hanya mahu menerima. / Asciimath dan kunci.
Jadi saya akan menuntut bahawa argc adalah sama dengan 2.
Jika tidak, maka saya akan return 1 dan program akan keluar.
Jadi saya katakan kunci tidak akan menjadi hujah baris arahan pertama,
ia akan menjadi yang kedua, dan seperti yang anda lihat di sini,
Saya akan menjadikan itu ke dalam integer.
Kemudian saya akan menetapkan watak untuk menjadi r.
Perhatikan bahawa jenis daripada Chr ubah adalah sebenarnya integer.
Cara yang saya dapat menggunakan r sebagai integer adalah dengan encasing dengan petikan tunggal.
Jadi kembali pernyataan printf kita di mana kita mempunyai placeholder untuk watak
dan kemudian placeholder untuk integer,
watak diwakili oleh Chr, dan integer adalah kunci.
Dan sebagainya maka kita pergi dalam hasil tambah 2 bersama-sama.
Jadi kita akan menambah r + apa jua kekunci,
dan kemudian kita pergi untuk mencetak hasil daripada itu.
Jadi mari kita membuat asciimath. Ia adalah up to date, jadi mari kita hanya menjalankan asciimath.
Oh, tetapi lihat, ia tidak berbuat apa-apa kerana kita tidak benar-benar memberi kunci.
Jadi, apabila ia hanya kembali 1, fungsi utama kami, ia hanya kembali semula kepada kita.
Jadi kemudian mari kita lulus dalam kunci. Seseorang memberikan saya nombor. >> [Pelajar] 4.
4. Okay.
Jadi r meningkat sebanyak 4 akan memberi kita v, yang sepadan dengan nilai ASCII daripada 118.
Jadi maka ia jenis masuk akal bahawa -
Sebenarnya, saya boleh meminta anda, apa yang anda fikir nilai ASCII r jika r + 4 118?
Kemudian yeah, r ialah 114.
Jadi, jika anda melihat pada jadual ASCII maka, cukup yakin, anda akan melihat r yang diwakili oleh 114.
Jadi sekarang kita tahu bahawa kita boleh menambah integer kepada watak-watak, ini nampaknya agak mudah.
Kami hanya akan untuk melelar rentetan seperti yang kita lihat dalam contoh sebelum.
Kami akan memeriksa jika ia adalah surat.
Jika ia, maka kita akan beralih oleh apa jua kekunci.
Agak mudah, kecuali apabila anda mendapat seperti ini,
anda lihat bahawa z, diwakili sebanyak 122, maka akan memberi anda watak yang berbeza.
Kami sebenarnya mahu tinggal dalam abjad kita, kan?
Jadi, kita perlu memikirkan beberapa cara jenis melingkari.
Apabila anda mencapai Zed dan anda mahu meningkatkan dengan bilangan tertentu,
anda tidak mahu pergi ke luar seksyen abjad ASCII;
anda mahu untuk membalut kembali sepanjang jalan kepada A.
Tetapi perlu diingat anda masih mengekalkan kes itu.
Jadi, mengetahui bahawa huruf tidak boleh menjadi simbol
seperti simbol yang tidak akan berubah serta.
Dalam terakhir pset anda pasti tidak perlu,
tetapi pilihan adalah untuk melaksanakan pset tamak anda dengan menggunakan fungsi modulus.
Tetapi sekarang kita sebenarnya akan perlu menggunakan modulus,
jadi mari kita hanya pergi lebih sedikit ini sedikit.
Pada asasnya, apabila anda mempunyai modulo x y, yang memberikan anda baki x dibahagikan oleh y.
Berikut adalah beberapa contoh di sini. Kami mempunyai 27% 15.
Pada asasnya, apabila anda tolak 15 dari 27 seberapa banyak kali yang mungkin tanpa mendapat negatif
maka anda mendapat 12 kiri atas.
Jadi yang semacam dalam konteks matematik, tetapi bagaimana kita sebenarnya boleh menggunakan ini?
Ia akan menjadi berguna untuk wrapover kami.
Untuk ini, mari kita hanya mengatakan saya meminta anda semua untuk membahagikan kepada 3 kumpulan.
Kadang-kadang anda melakukan ini dalam kumpulan dan sesuatu seperti itu.
Katakanlah saya berkata, "Baiklah, saya mahu anda semua untuk dibahagikan kepada 3."
Bagaimana anda boleh berbuat demikian?
[Sambutan pelajar didengar] Yeah, tepat. Count dimatikan. Okay.
Mari kita sebenarnya berbuat demikian. Adakah anda ingin memulakan?
[Pelajar mengira off] 1, 2, 3, 4.
Tetapi ingat ... >> [Pelajar] Oh, maaf.
Itulah titik yang benar-benar baik.
Anda berkata 4, tetapi kita benar-benar mahu anda untuk mengatakan 1 kerana kita hanya mahu 3 kumpulan.
Jadi kemudian, bagaimana - Tidak, itulah satu contoh yang benar-benar baik kerana maka bagaimana anda mungkin berkata 1?
Apakah hubungan antara 4 dan 1?
Nah, 4 arena 3 adalah 1.
Jadi, jika anda meneruskan, anda akan menjadi 2.
Jadi kita mempunyai 1, 2, 3, 1, 2.
Sekali lagi, anda sebenarnya orang 5. Bagaimana anda tahu untuk mengatakan 2 bukannya 5?
Kamu katakan 5 arena 3 adalah 2.
Saya mahu melihat berapa banyak kumpulan 3 ditinggalkan, maka perintah yang am I.
Dan demikian maka jika kita terus bersama-sama seluruh bilik,
maka kita akan melihat bahawa kita sentiasa sebenarnya memohon fungsi arena kepada diri kita sendiri
jenis mengira off.
Itulah sejenis lebih contoh ketara bagaimana anda mungkin menggunakan modulo
kerana saya pasti kebanyakan kita mungkin telah melalui proses yang
mana kita telah mengira-nunjuk.
Sebarang pertanyaan pada modulo?
Ia akan menjadi cukup penting untuk memahami konsep ini,
jadi saya mahu pastikan anda semua memahami.
[Pelajar] Jika terdapat baki tidak, adakah ia memberi anda jumlah sebenar?
Jika salah satu daripada 3 pertama mereka telah dilakukan, ia akan memberikan mereka apa yang mereka sebenarnya,
atau ia akan berikan kepada mereka [didengar] >> Itulah satu soalan yang baik.
Apabila tiada baki untuk modulo - jadi katakan anda mempunyai 6 arena 3 -
yang sebenarnya memberikan anda kembali 0.
Kami akan bercakap tentang bahawa sedikit kemudian.
Oh yeah, misalnya, orang ke-3 - 3 arena 3 sebenarnya 0 tetapi katanya 3.
Jadi itulah jenis seperti tangkapan dalaman, misalnya,
seperti okay, jika arena 0, maka saya akan menjadi orang ke-3.
Tetapi kita akan masuk ke dalam jenis bagaimana kita mungkin mahu untuk berurusan dengan apa yang 0 adalah kemudian.
Jadi sekarang kita entah bagaimana mempunyai cara pemetaan Zed kepada surat yang betul.
Jadi sekarang kita telah melalui contoh-contoh ini,
kita jenis lihat bagaimana Caesar mungkin bekerja.
Anda lihat 2 huruf dan kemudian anda melihat mereka beralih.
Jadi mari kita cuba dan menyatakan bahawa dari segi formula.
Formula ini sebenarnya diberikan kepada anda dalam spesifikasi,
tetapi mari kita jenis melihat melalui apa yang setiap pembolehubah bermakna.
Keputusan akhir kami akan menjadi tulisan rahsia.
Jadi ini mengatakan bahawa watak engan tulisan rahsia
akan sesuai dengan watak i-plaintext.
Yang masuk akal kerana kita mahu untuk sentiasa beratur perkara-perkara ini sehingga.
Jadi ia akan menjadi watak engan tulisan rahsia ditambah k, yang merupakan kunci kita -
yang masuk akal - dan kemudian kita mempunyai ini arena 26.
Ingat kembali apabila kita mempunyai Zed
kita tidak mahu masuk ke dalam watak, jadi kita mahu MOD
dan jenis balut seluruh abjad.
Selepas Zed anda akan pergi ke, b, c, d, sehingga anda mendapat nombor yang betul.
Maka kita tahu bahawa Zed, jika + 6, akan memberi kita f kerana selepas Zed datang a, b, c, d, e, f.
Jadi mari kita ingat kita tahu dengan pasti bahawa Zed + 6 akan memberikan kita f.
Dalam nilai ASCII, z ialah 122 dan f ialah 102.
Jadi kita perlu mencari beberapa cara membuat formula Caesar kami memberi kita 102
selepas mengambil 122.
Jadi, jika kita hanya menggunakan formula ini,% ('z' + 6) 26, yang sebenarnya memberikan anda 24
kerana 122 + 6 128; 128% 26 memberikan anda 24 selebihnya.
Tetapi itu tidak benar-benar bermakna f. Itu pasti tidak 102.
Itulah juga tidak surat 6 dalam abjad.
Jadi jelas, kita perlu mempunyai beberapa cara Tweaker ini sedikit.
Dari segi abjad biasa, kita tahu bahawa z ialah surat 26 dan f ialah 6.
Tetapi kita berada dalam bidang sains komputer, jadi kita akan indeks pada 0.
Demikian maka bukannya z menjadi nombor 26, kita akan mengatakan nombor 25
kerana adalah 0.
Jadi sekarang mari kita memohon formula ini.
Kami mempunyai z diwakili oleh 25 + 6, yang memberikan anda 31.
Dan 31 arena 26 memberikan anda 5 sebagai baki.
Yang sempurna kerana kita tahu bahawa f adalah surat 5 dalam abjad.
Tetapi ia masih tidak f, betul-betul? Ia masih tidak 102.
Jadi maka bagi pset ini, cabaran akan cuba untuk mengetahui hubungan
antara menukar antara nilai-nilai ASCII dan indeks abjad.
Pada asasnya, apa yang anda akan mahu lakukan, anda mahu bermula dengan nilai ASCII,
tetapi kemudian anda mahu untuk entah bagaimana menterjemahkan ke dalam indeks abjad
kemudian mengira apa surat ia harus - pada dasarnya, apa indeks abjad adalah
watak cipher - kemudian menterjemahkan kembali ke nilai ASCII.
Jadi jika anda cambuk keluar jadual ASCII anda, kemudian cuba dan mencari hubungan antara, katakan, 102 dan 5
atau 122 dan 25.
Kami telah mendapat kunci kami dari hujah-hujah baris arahan, kita telah mendapat plaintext,
kita telah enciphered.
Sekarang semua kita telah meninggalkan lakukan adalah mencetaknya.
Kita boleh melakukan ini beberapa cara yang berbeza.
Apa yang kita boleh lakukan sebenarnya mencetak seperti yang kita pergi bersama-sama.
Seperti yang kita melelar lebih watak-watak dalam string,
kita hanya boleh mencetak kanan kemudian apabila kita mengira.
Selain itu, anda juga boleh menyimpan dalam pelbagai dan mempunyai pelbagai watak
dan pada akhir melelar seluruh tatasusunan yang dan mencetak keluar.
Jadi, anda mempunyai beberapa pilihan untuk itu.
Dan ingat bahawa% c akan menjadi placeholder untuk mencetak watak.
Jadi ada kita mempunyai Caesar, dan kini kita beralih kepada Vigenere,
yang sangat serupa dengan Caesar tetapi hanya sedikit lebih kompleks.
Jadi pada dasarnya dengan Vigenere anda akan lulus dalam kata kunci.
Jadi, bukannya nombor, anda akan mempunyai rentetan,
dan supaya akan bertindak sebagai kata kunci anda.
Kemudian, seperti biasa, anda akan untuk mendapatkan segera bagi rentetan daripada pengguna
dan kemudian menulis dlm kod dan kemudian memberikan mereka kembali tulisan rahsia.
Jadi seperti yang saya berkata, ia adalah sangat serupa Caesar, kecuali bukannya beralih dengan bilangan tertentu,
nombor sebenarnya akan mengubah setiap masa dari watak watak.
Untuk mewakili bahawa bilangan sebenar beralih, ia diwakili oleh huruf keyboard.
Jadi, jika anda masukkan ke dalam peralihan, misalnya, maka yang akan sesuai dengan peralihan 0.
Jadi ia sekali lagi kembali kepada indeks abjad.
Apa yang mungkin berguna jika anda melihat bahawa kita sebenarnya berurusan dengan nilai ASCII
serta huruf, serta indeks abjad,
mungkin mencari atau membuat jadual anda sendiri ASCII yang menunjukkan indeks abjad 0 hingga 25,
melalui z, dan nilai ASCII supaya anda jenis boleh melihat hubungan
dan lakarkan keluar dan cuba mencari beberapa corak.
Begitu juga, jika anda beralih pada contoh tertentu oleh f -
dan ini adalah sama ada f huruf kecil atau huruf besar - maka yang akan sesuai hingga 5.
Adakah kita yang baik setakat ini?
Formula untuk Vigenere adalah sedikit berbeza.
Pada asasnya, anda akan melihat bahawa ia hanya seperti Caesar,
kecuali bukan hanya k kita mempunyai k index j.
Notis bahawa kita tidak menggunakan i kerana asasnya, panjang kata kunci
tidak semestinya panjang tulisan rahsia kami.
Ini akan menjadi lebih jelas sedikit apabila kita lihat satu contoh bahawa saya mempunyai sedikit kemudian.
Pada asasnya, jika anda menjalankan program anda dengan kata kunci ohai,
maka itu bermakna bahawa setiap kali, ohai akan menjadi anjakan anda.
Jadi bergantung kepada apa kedudukan anda dalam kata kunci anda,
anda akan beralih watak tulisan rahsia tertentu anda dengan jumlah itu.
Sekali lagi, seperti Caesar, kita mahu memastikan bahawa kita memelihara permodalan perkara
dan kita menulis dlm kod huruf sahaja, tidak aksara atau ruang.
Jadi melihat kembali kepada Caesar pada fungsi yang anda mungkin telah digunakan,
cara yang anda memutuskan bagaimana untuk beralih perkara, dan memohon supaya program anda di sini.
Jadi mari peta ini keluar.
Kami mempunyai plaintext bahawa kita telah mendapat daripada pengguna GetString
berkata ... adalah CS50!
Kemudian kita mempunyai kata kunci ohai.
4 aksara pertama adalah agak mudah.
Kita tahu bahawa T akan beralih oleh o,
maka h akan beralih oleh h, i akan beralih oleh.
Di sini anda melihat bahawa mewakili 0,
demikian maka nilai akhir adalah sebenarnya hanya surat yang sama seperti sebelum ini.
Maka s beralih oleh i.
Tetapi kemudian anda mempunyai tempoh ini di sini.
Kita tidak mahu untuk menulis dlm kod, jadi maka kita tidak mengubahnya dengan apa-apa
dan hanya mencetak tempoh tidak berubah.
[Pelajar] saya tidak faham bagaimana anda tahu bahawa ini beralih oleh - Jika anda pula - >> Oh, maaf.
Di atas sini anda melihat bahawa baris arahan hujah ohai sini,
yang akan menjadi kata kunci.
Dan sebagainya pada dasarnya, anda sedang berbasikal ke atas watak-watak dalam kata kunci.
[Pelajar] Jadi o akan beralih sama -
Jadi o sepadan dengan bilangan tertentu dalam abjad.
[Pelajar] Hak. Tetapi jika anda mendapat bahagian CS50 dari?
Oh. Itulah dalam GetString mana anda seperti, "Berikan saya rentetan untuk mengekod."
[Pelajar] Mereka akan memberikan anda bahawa hujah untuk beralih oleh
dan kemudian anda akan meminta untuk rentetan pertama anda. >> Yeah.
Jadi apabila mereka menjalankan program ini, mereka pergi untuk memasukkan kata kunci
dalam hujah baris arahan mereka apabila mereka jalankan ia.
Kemudian apabila anda diperiksa bahawa mereka telah benar-benar memberikan anda 1 dan tidak lebih, tidak kurang,
maka anda akan meminta mereka untuk rentetan, berkata, "Berikan saya rentetan."
Supaya di mana dalam kes ini mereka telah diberikan anda ini ... adalah CS50!
Jadi maka anda akan menggunakan bahawa dan menggunakan ohai dan melelar lebih.
Perhatikan bahawa di sini kita dilangkau lebih menyulitkan tempoh,
tetapi dari segi kedudukan kami untuk ohai, satu depan kita digunakan o.
Dalam kes ini, ia agak sukar untuk melihat kerana itulah 4,
jadi mari kita terus sedikit. Hanya melekat dengan saya di sini.
Kemudian kita mempunyai i dan s, yang kemudiannya diterjemahkan oleh o dan h masing-masing.
Kemudian kita mempunyai ruang, dan sebagainya maka kita tahu bahawa kita tidak akan menulis dlm kod ruang.
Tetapi notis bahawa bukannya pergi ke tempat ini di sini,
kita menyulitkan oleh - Saya tidak tahu jika anda dapat melihat bahawa di sini.
Jadi ia tidak suka anda sebenarnya telah ditetapkan, katakan, o pergi sini, h pergi sini,
pergi sini, i pergi sini, o, h, i, o, h, i. Anda tidak berbuat demikian.
Anda hanya beralih kedudukan anda dalam kata kunci
apabila anda tahu bahawa anda sebenarnya akan menyulitkan surat sebenar.
Adakah yang jenis masuk akal?
Okay.
Jadi hanya beberapa peringatan.
Anda ingin memastikan bahawa anda hanya mara ke huruf seterusnya kata kunci anda
jika watak dalam plaintext anda adalah surat.
Jadi mengatakan kita berada di o.
Kami dapati bahawa watak seterusnya, indeks i plaintext itu, adalah nombor, misalnya.
Kemudian kita tidak memajukan j, indeks untuk kata kunci kita, sehingga kita mencapai surat lain.
Sekali lagi, anda juga ingin memastikan bahawa anda Sampul permulaan kata kunci
apabila anda berada di akhir itu.
Jika anda lihat di sini kita berada di i, yang seterusnya mempunyai untuk menjadi o.
Jadi anda mahu mencari beberapa cara yang dapat Sampul permulaan kata kunci anda
setiap kali anda mencapai akhir.
Dan sebagainya lagi, apa jenis pengendali adalah berguna dalam kes itu untuk membungkus sekitar?
Seperti dalam pengiraan off contoh.
[Pelajar] Tanda peratus. >> Yeah, tanda peratus, yang merupakan modulo.
Jadi modulo akan datang dalam berguna di sini apabila anda mahu untuk membalut indeks dalam ohai anda.
Dan hanya petunjuk cepat: Cuba untuk berfikir membungkus lebih sedikit kata kunci seperti kira mengira,
di mana jika terdapat 3 kumpulan, orang ke-4,
bilangan mereka bahawa mereka berkata adalah 4 arena 3, yang adalah 1.
Jadi, cuba dan memikirkan ia cara itu.
Seperti yang anda lihat dalam formula, di mana sahaja anda mempunyai ci dan kemudian pi tetapi kemudian kj,
anda ingin memastikan bahawa anda menjejaki mereka.
Anda tidak perlu untuk memanggil ia i, anda tidak perlu untuk memanggil ia j,
tetapi anda ingin memastikan bahawa anda menjejaki kedudukan bahawa anda di dalam plaintext anda
serta kedudukan yang anda berada di dalam kata kunci anda
kerana mereka tidak semestinya akan menjadi sama.
Bukan sahaja kata kunci - ia boleh menjadi panjang yang benar-benar berbeza daripada plaintext anda.
Juga, plaintext anda, terdapat nombor dan aksara,
jadi ia tidak akan sempurna perlawanan sehingga bersama-sama. Ya.
[Pelajar] Adakah terdapat fungsi untuk menukar huruf?
Anda boleh menukar kepada modal A? >> Ya, terdapat pasti adalah.
Anda boleh menyemak - Saya percaya toupper itu, semua perkataan 1.
Tetapi apabila anda cuba untuk cipher perkara dan memelihara teks,
ia adalah yang terbaik pada asasnya mempunyai kes berasingan.
Jika ia adalah huruf besar, maka anda mahu beralih dengan ini
kerana dalam formula anda, apabila anda melihat kembali bagaimana kita perlu jenis pergi
silih berganti antara cara ASCII mewakili nombor
dan indeks abjad sebenar, kita mahu memastikan
ada akan menjadi beberapa jenis corak yang anda akan gunakan.
Satu lagi nota pada corak, sebenarnya.
Anda akan pasti akan berurusan dengan nombor.
Cuba untuk tidak menggunakan nombor sihir, yang merupakan contoh gaya.
Jadi katakan anda mahu setiap sesuatu anjakan masa dengan suka -
Okay, jadi petunjuk, spoiler lain adalah apabila anda akan beralih sesuatu
oleh jumlah tertentu, cuba untuk tidak mewakili bahawa oleh bilangan sebenar
tetapi cuba dan lihat jika anda boleh menggunakan nilai ASCII, yang jenis akan lebih masuk akal.
Satu lagi nota: Kerana kita sedang berurusan dengan formula,
walaupun TF anda jenis akan tahu apa corak yang anda mungkin menggunakan,
terbaik dalam apa komen anda menjelaskan logik, seperti,
"Saya menggunakan corak ini kerana ..." dan jenis menjelaskan corak ringkas dalam komen anda.
[Ini adalah Walkthrough 2] Jika tidak ada apa-apa soalan lain, maka saya hanya akan tinggal di sini untuk sedikit.
Nasib baik dengan 2 pset anda: Crypto dan terima kasih kerana datang.
[Pelajar] Terima kasih. Terima kasih. >>
[Media Offline intro]