>> ZAMYLA CHAN: Selamat untuk menyelesaikan Anda
Pasangan pertama program C.
Saya tahu bahwa perampokan pertama Anda ke Sintaks C dapat menjadi sesuatu yang membingungkan.
Tapi saya jamin, pada akhir Tentu saja, Anda akan dapat melihat
Pasangan pertama tugas dan menyelesaikan mereka dalam beberapa menit.
>> Sekarang bahwa Anda mendapatkan lebih akrab dengan sintaks, mari kita kepada Kaisar.
Di Caesar, pengguna akan menyerahkan kunci integer sebagai baris perintah
argumen, kemudian masukkan polos pesan teks pada prompt.
Program ini kemudian akan menulis dlm kode teks dan cetak
pesan ciphertext mereka.
>> The enciphering untuk Caesar cukup sederhana.
Pergeseran setiap huruf, dalam mereka teks biasa, oleh kunci.
Akibatnya, itu juga cukup aman.
Tapi pelaksana Caesar akan memperkenalkan kita untuk ASCIIMath dan data array
struktur.
Kita akan sampai ke yang lebih kompleks cipher nanti.
Dengan kunci Caesar dari 2, huruf A di teks biasa akan diwakili oleh
huruf C di ciphertext karena C adalah dua huruf setelah A. B akan
diwakili oleh D dan C oleh E. Menuju akhir alfabet, W adalah
diwakili oleh Y, dan Z. Tapi X oleh Y tidak memiliki dua huruf setelah, sehingga
cipher membungkus alfabet.
Y dalam teks biasa demikian diwakili oleh A ciphertext, dan Z oleh B. Ini mungkin
membantu untuk melihat Cypher Caesar seperti roda alfabet terus menerus.
>> Untuk menulis dlm kode teks mereka, pengguna akan memasukkan dua argumen
ke baris perintah -
/ Caesar. Diikuti oleh kunci.
Seperti biasa, kita tidak bisa mempercayai pengguna sepenuhnya untuk memasukkan masukan yang membuat
akal bagi program kami.
Jadi kita harus memvalidasi mereka baris perintah input.
>> Alih-alih menggunakan void main int, kami menggunakan, argc int int main, tali argv.
The variabel integer argc mewakili jumlah argumen dilewatkan ke
baris perintah.
Dan argv adalah array, atau menganggapnya sebagai daftar, dari argumen berlalu masuk
>> Jadi untuk Caesar, bagaimana kita memvalidasi input pengguna?
Yah, mereka hanya harus memasuki dua argumen baris perintah -
. / Caesar dan kunci.
Jadi jika argc tidak 2, itu berarti bahwa mereka juga lupa kunci dan hanya
masuk. / caesar, atau mereka memasuki beberapa tombol.
>> Jika hal ini terjadi, maka Anda akan ingin mencetak instruksi
dan keluar dari program.
Mereka akan perlu untuk mencoba lagi dari baris perintah.
Tetapi bahkan jika argc adalah 2, Anda akan perlu memeriksa apakah mereka
memberikan kunci yang valid.
Untuk Caesar, Anda memerlukan sebuah integer.
Tapi argv adalah array dari string.
Bagaimana Anda mengakses kunci itu?
>> Sebuah cepat melihat array -
struktur data yang menyimpan beberapa nilai-nilai dari tipe data yang sama.
Entri-nol, yang berarti bahwa elemen pertama adalah nol indeks
dan elemen terakhir adalah pada ukuran indeks dikurangi 1, di mana ukuran jumlah
elemen dalam array.
>> Jika saya menyatakan string kotak array baru dengan panjang 3, visual, itu
terlihat seperti ini.
Tiga kontainer untuk string , Berdampingan.
Untuk mengakses setiap elemen, Anda mengetik nama array dan kemudian menunjukkan
indeks dalam tanda kurung siku.
Di sini, saya menetapkan nilai untuk masing-masing elemen, seperti yang akan saya lakukan dengan
variabel string lainnya.
>> Jadi untuk mengakses argumen baris perintah kita, yang harus kita lakukan adalah mengakses
elemen yang tepat dari array argv.
Jika pengguna memasukkan Tim / blastoff. Roket ke terminal, argv 0 akan
menjadi / blastoff..
argv akan menjadi Team, dan arg2 akan roket.
>> Sekarang kita dapat mengakses kunci kami, kita masih perlu membuat
yakin bahwa itu benar.
Kita perlu mengubahnya menjadi integer.
Tapi kita tidak bisa hanya melemparkan seperti kami lakukan sebelumnya.
Untungnya, A berfungsi Y mengurus ini bagi kita dan bahkan kembali 0
jika string tidak dapat dikonversi menjadi integer.
Terserah Anda, meskipun, untuk memberitahu pengguna mengapa Anda tidak akan
membiarkan program melanjutkan.
Menyimpan hasil dari A ke Y dalam integer, dan di sana Anda memiliki kunci Anda.
Bagian berikutnya adalah sederhana.
Meminta pengguna untuk teks biasa mereka, yang akan menjadi data tipe string.
Untungnya bagi kita, semua pengguna diinput string adalah valid.
>> Sekarang bahwa kita memiliki semua masukan yang diperlukan dari pengguna, saatnya bagi kita untuk
menulis dlm kode pesan mereka.
Konsep Caesar sederhana cukup untuk memahami.
Tapi bagaimana komputer Anda tahu mana surat datang setelah satu sama lain?
>> Di sinilah tabel ASCII masuk
Setiap karakter memiliki integer nomor yang terkait dengan itu.
Modal adalah 65.
Modal B adalah 66.
Huruf kecil adalah 97.
Huruf kecil b adalah 98.
Tapi karakter tidak terbatas hanya nomor abjad.
Misalnya, simbol @ adalah ASCII nomor 64.
>> Sebelum berurusan dengan seluruh string, mari kita berpura-pura kita hanya perlu menggeser
satu karakter.
Yah, kita hanya ingin bergeser aktual huruf dalam teks biasa, tidak
karakter atau angka.
Jadi hal pertama yang kita ingin periksa adalah apakah karakter dalam
alfabet.
>> Fungsi isalpha melakukan hal ini untuk kita dan mengembalikan Boolean -
benar jika karakter adalah huruf a, false jika sebaliknya.
Dua fungsi yang berguna lainnya isupper dan islower, dengan
nama jelas.
Mereka mengembalikan true jika karakter yang diberikan adalah besar atau kecil,
masing-masing.
Karena mereka adalah Booleans, mereka berguna untuk digunakan sebagai kondisi.
>> Jika isalpha mengembalikan nilai true, Anda harus untuk menggeser karakter tersebut dengan kunci.
Jadi mari kita buka ke ASCIIMath dan melakukan beberapa matematika ASCII.
Pemakaian ini mirip dengan penggunaan untuk Caesar dan mengambil dalam kunci di
baris perintah.
>> Jika saya menjalankan ASCIIMath 5, tampaknya untuk menambahkan 5 ke, memberi saya huruf f, dan
menampilkan nilai ASCII.
Jadi mari kita lihat program.
>> Anda mungkin bertanya-tanya, di sini, mengapa Surat adalah bilangan bulat, ketika itu
secara jelas, baik, surat.
Ternyata karakter dan bilangan bulat yang dipertukarkan.
Dengan menempatkan huruf A dalam satu tanda kutip, integer dapat menyimpan
nilai ASCII modal A. Hati-hati, meskipun.
Anda membutuhkan pakaian tunggal.
Tanpa tanda kutip tunggal, compiler akan mencari variabel
bernama A, dan bukan karakter.
>> Lalu aku menambahkan surat dan kunci, menyimpan Jumlah dalam variabel hasil int.
Meskipun hasil adalah jenis data integer, pernyataan printf saya menggunakan
% C tempat untuk karakter.
Jadi program akan mencetak karakter terkait dengan hasil integer.
Dan karena kami mencetak integer bentuk serta menggunakan% d, kita melihat
jumlah juga.
Jadi sekarang Anda dapat melihat bahwa kita memperlakukan karakter dan
bilangan bulat, dan sebaliknya.
>> Mari kita uji keluar ASCIIMath beberapa kali lainnya menggunakan 25 sebagai kunci.
Kami mendapatkan huruf z.
Sekarang kita coba 26.
Kami ingin mendapatkan surat, tapi bukannya kita mendapatkan braket kiri.
Jadi jelas, hanya menambahkan kunci untuk surat itu tidak akan melakukannya.
Kita perlu mencari tahu formula untuk membungkus sekitar alfabet, seperti kami
Misalnya di awal lakukan.
>> Sebuah formula untuk Caesar pergeseran adalah sebagai berikut.
c sama dengan p ditambah k modulo 26.
Ingat bahwa modulo adalah berguna operasi yang memberi kita sisanya
membagi nomor satu dengan lainnya.
Mari kita menerapkan formula ini untuk dataran Surat teks dengan Kunci dari 2.
Nilai ASCII dari y adalah 89, yang memberi kita 91 modulo 26,
yang sama dengan 13 -
pasti tidak nilai ASCII dari, yaitu 67.
>> Humor saya sekarang dan menjauhi Nilai ASCII ke indeks alfabet
dimana A adalah nol dan Z adalah 25, yang berarti bahwa Y adalah 24.
24 ditambah 2, modulo 6, memberi kita 26, modulo 26, 0, yang merupakan
indeks alfabet dari.
Jadi rumus ini tampaknya berlaku untuk indeks alfabet surat dan
tidak nilai ASCII.
>> Tapi Anda mulai dengan nilai-nilai ASCII.
Dan untuk mencetak karakter ciphertext, Anda harus nilai ASCII juga.
Terserah Anda, maka, untuk mencari tahu bagaimana untuk beralih kembali dan sebagainya.
>> Setelah Anda mengetahui formula yang tepat untuk satu karakter, semua yang perlu Anda lakukan
adalah menerapkan rumus yang sama untuk setiap huruf dalam teks biasa -
hanya jika surat itu abjad, tentu saja.
Dan ingat bahwa Anda perlu untuk melestarikan kasus ini, atas atau bawah, di situlah
yang isUpper dan fungsi islower disebutkan sebelumnya akan berguna.
Anda mungkin memiliki dua rumus -
satu untuk huruf besar dan satu untuk huruf kecil.
Jadi isUpper sebuah islower akan membantu Anda menentukan rumus untuk menerapkan.
>> Bagaimana Anda menerapkan rumus untuk setiap karakter tunggal dalam sebuah string?
Nah, string hanya sebuah array karakter.
Jadi Anda dapat mengakses setiap karakter dengan pengelompokan atas setiap karakter dalam
string dalam untuk loop.
Adapun kondisi Anda untuk loop, fungsi strlen, untuk tali
panjang, akan berguna.
Dibutuhkan dalam sebuah string sebagai masukan dan mengembalikan panjang string tersebut.
Pastikan untuk menyertakan perpustakaan yang tepat untuk menggunakan fungsi panjang string.
>> Dan di sana Anda memiliki ciphertext Anda.
Nama saya Zamyla tersebut.
Dan [BERBICARA KODE].