1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: Selamat untuk menyelesaikan Anda 3 00:00:11,270 --> 00:00:13,200 Pasangan pertama program C. 4 00:00:13,200 --> 00:00:16,379 Saya tahu bahwa perampokan pertama Anda ke Sintaks C dapat menjadi sesuatu yang membingungkan. 5 00:00:16,379 --> 00:00:20,060 Tapi saya jamin, pada akhir Tentu saja, Anda akan dapat melihat 6 00:00:20,060 --> 00:00:23,870 Pasangan pertama tugas dan menyelesaikan mereka dalam beberapa menit. 7 00:00:23,870 --> 00:00:27,830 >> Sekarang bahwa Anda mendapatkan lebih akrab dengan sintaks, mari kita kepada Kaisar. 8 00:00:27,830 --> 00:00:31,720 Di Caesar, pengguna akan menyerahkan kunci integer sebagai baris perintah 9 00:00:31,720 --> 00:00:35,300 argumen, kemudian masukkan polos pesan teks pada prompt. 10 00:00:35,300 --> 00:00:38,050 Program ini kemudian akan menulis dlm kode teks dan cetak 11 00:00:38,050 --> 00:00:40,020 pesan ciphertext mereka. 12 00:00:40,020 --> 00:00:42,980 >> The enciphering untuk Caesar cukup sederhana. 13 00:00:42,980 --> 00:00:46,455 Pergeseran setiap huruf, dalam mereka teks biasa, oleh kunci. 14 00:00:46,455 --> 00:00:49,220 Akibatnya, itu juga cukup aman. 15 00:00:49,220 --> 00:00:53,850 Tapi pelaksana Caesar akan memperkenalkan kita untuk ASCIIMath dan data array 16 00:00:53,850 --> 00:00:54,460 struktur. 17 00:00:54,460 --> 00:00:57,510 Kita akan sampai ke yang lebih kompleks cipher nanti. 18 00:00:57,510 --> 00:01:01,680 Dengan kunci Caesar dari 2, huruf A di teks biasa akan diwakili oleh 19 00:01:01,680 --> 00:01:07,580 huruf C di ciphertext karena C adalah dua huruf setelah A. B akan 20 00:01:07,580 --> 00:01:12,450 diwakili oleh D dan C oleh E. Menuju akhir alfabet, W adalah 21 00:01:12,450 --> 00:01:18,550 diwakili oleh Y, dan Z. Tapi X oleh Y tidak memiliki dua huruf setelah, sehingga 22 00:01:18,550 --> 00:01:21,070 cipher membungkus alfabet. 23 00:01:21,070 --> 00:01:27,190 Y dalam teks biasa demikian diwakili oleh A ciphertext, dan Z oleh B. Ini mungkin 24 00:01:27,190 --> 00:01:32,080 membantu untuk melihat Cypher Caesar seperti roda alfabet terus menerus. 25 00:01:32,080 --> 00:01:35,760 >> Untuk menulis dlm kode teks mereka, pengguna akan memasukkan dua argumen 26 00:01:35,760 --> 00:01:37,090 ke baris perintah - 27 00:01:37,090 --> 00:01:40,010 / Caesar. Diikuti oleh kunci. 28 00:01:40,010 --> 00:01:44,710 Seperti biasa, kita tidak bisa mempercayai pengguna sepenuhnya untuk memasukkan masukan yang membuat 29 00:01:44,710 --> 00:01:45,800 akal bagi program kami. 30 00:01:45,800 --> 00:01:50,670 Jadi kita harus memvalidasi mereka baris perintah input. 31 00:01:50,670 --> 00:01:57,285 >> Alih-alih menggunakan void main int, kami menggunakan, argc int int main, tali argv. 32 00:01:57,285 --> 00:02:01,730 The variabel integer argc mewakili jumlah argumen dilewatkan ke 33 00:02:01,730 --> 00:02:02,880 baris perintah. 34 00:02:02,880 --> 00:02:09,070 Dan argv adalah array, atau menganggapnya sebagai daftar, dari argumen berlalu masuk 35 00:02:09,070 --> 00:02:12,000 >> Jadi untuk Caesar, bagaimana kita memvalidasi input pengguna? 36 00:02:12,000 --> 00:02:15,870 Yah, mereka hanya harus memasuki dua argumen baris perintah - 37 00:02:15,870 --> 00:02:18,150 . / Caesar dan kunci. 38 00:02:18,150 --> 00:02:22,340 Jadi jika argc tidak 2, itu berarti bahwa mereka juga lupa kunci dan hanya 39 00:02:22,340 --> 00:02:27,230 masuk. / caesar, atau mereka memasuki beberapa tombol. 40 00:02:27,230 --> 00:02:29,770 >> Jika hal ini terjadi, maka Anda akan ingin mencetak instruksi 41 00:02:29,770 --> 00:02:30,910 dan keluar dari program. 42 00:02:30,910 --> 00:02:34,320 Mereka akan perlu untuk mencoba lagi dari baris perintah. 43 00:02:34,320 --> 00:02:37,430 Tetapi bahkan jika argc adalah 2, Anda akan perlu memeriksa apakah mereka 44 00:02:37,430 --> 00:02:39,100 memberikan kunci yang valid. 45 00:02:39,100 --> 00:02:40,730 Untuk Caesar, Anda memerlukan sebuah integer. 46 00:02:40,730 --> 00:02:43,260 Tapi argv adalah array dari string. 47 00:02:43,260 --> 00:02:46,490 Bagaimana Anda mengakses kunci itu? 48 00:02:46,490 --> 00:02:47,850 >> Sebuah cepat melihat array - 49 00:02:47,850 --> 00:02:51,410 struktur data yang menyimpan beberapa nilai-nilai dari tipe data yang sama. 50 00:02:51,410 --> 00:02:55,350 Entri-nol, yang berarti bahwa elemen pertama adalah nol indeks 51 00:02:55,350 --> 00:03:00,260 dan elemen terakhir adalah pada ukuran indeks dikurangi 1, di mana ukuran jumlah 52 00:03:00,260 --> 00:03:02,850 elemen dalam array. 53 00:03:02,850 --> 00:03:07,380 >> Jika saya menyatakan string kotak array baru dengan panjang 3, visual, itu 54 00:03:07,380 --> 00:03:08,570 terlihat seperti ini. 55 00:03:08,570 --> 00:03:11,520 Tiga kontainer untuk string , Berdampingan. 56 00:03:11,520 --> 00:03:15,445 Untuk mengakses setiap elemen, Anda mengetik nama array dan kemudian menunjukkan 57 00:03:15,445 --> 00:03:18,080 indeks dalam tanda kurung siku. 58 00:03:18,080 --> 00:03:21,610 Di sini, saya menetapkan nilai untuk masing-masing elemen, seperti yang akan saya lakukan dengan 59 00:03:21,610 --> 00:03:24,310 variabel string lainnya. 60 00:03:24,310 --> 00:03:29,020 >> Jadi untuk mengakses argumen baris perintah kita, yang harus kita lakukan adalah mengakses 61 00:03:29,020 --> 00:03:31,690 elemen yang tepat dari array argv. 62 00:03:31,690 --> 00:03:37,360 Jika pengguna memasukkan Tim / blastoff. Roket ke terminal, argv 0 akan 63 00:03:37,360 --> 00:03:38,950 menjadi / blastoff.. 64 00:03:38,950 --> 00:03:45,010 argv akan menjadi Team, dan arg2 akan roket. 65 00:03:45,010 --> 00:03:47,670 >> Sekarang kita dapat mengakses kunci kami, kita masih perlu membuat 66 00:03:47,670 --> 00:03:49,040 yakin bahwa itu benar. 67 00:03:49,040 --> 00:03:51,060 Kita perlu mengubahnya menjadi integer. 68 00:03:51,060 --> 00:03:54,680 Tapi kita tidak bisa hanya melemparkan seperti kami lakukan sebelumnya. 69 00:03:54,680 --> 00:03:58,800 Untungnya, A berfungsi Y mengurus ini bagi kita dan bahkan kembali 0 70 00:03:58,800 --> 00:04:02,110 jika string tidak dapat dikonversi menjadi integer. 71 00:04:02,110 --> 00:04:04,450 Terserah Anda, meskipun, untuk memberitahu pengguna mengapa Anda tidak akan 72 00:04:04,450 --> 00:04:06,220 membiarkan program melanjutkan. 73 00:04:06,220 --> 00:04:10,710 Menyimpan hasil dari A ke Y dalam integer, dan di sana Anda memiliki kunci Anda. 74 00:04:10,710 --> 00:04:12,070 Bagian berikutnya adalah sederhana. 75 00:04:12,070 --> 00:04:15,940 Meminta pengguna untuk teks biasa mereka, yang akan menjadi data tipe string. 76 00:04:15,940 --> 00:04:18,339 Untungnya bagi kita, semua pengguna diinput string adalah valid. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Sekarang bahwa kita memiliki semua masukan yang diperlukan dari pengguna, saatnya bagi kita untuk 79 00:04:24,760 --> 00:04:26,520 menulis dlm kode pesan mereka. 80 00:04:26,520 --> 00:04:29,200 Konsep Caesar sederhana cukup untuk memahami. 81 00:04:29,200 --> 00:04:33,750 Tapi bagaimana komputer Anda tahu mana surat datang setelah satu sama lain? 82 00:04:33,750 --> 00:04:36,100 >> Di sinilah tabel ASCII masuk 83 00:04:36,100 --> 00:04:39,420 Setiap karakter memiliki integer nomor yang terkait dengan itu. 84 00:04:39,420 --> 00:04:41,380 Modal adalah 65. 85 00:04:41,380 --> 00:04:43,310 Modal B adalah 66. 86 00:04:43,310 --> 00:04:45,260 Huruf kecil adalah 97. 87 00:04:45,260 --> 00:04:47,590 Huruf kecil b adalah 98. 88 00:04:47,590 --> 00:04:50,770 Tapi karakter tidak terbatas hanya nomor abjad. 89 00:04:50,770 --> 00:04:56,020 Misalnya, simbol @ adalah ASCII nomor 64. 90 00:04:56,020 --> 00:04:59,690 >> Sebelum berurusan dengan seluruh string, mari kita berpura-pura kita hanya perlu menggeser 91 00:04:59,690 --> 00:05:01,220 satu karakter. 92 00:05:01,220 --> 00:05:04,640 Yah, kita hanya ingin bergeser aktual huruf dalam teks biasa, tidak 93 00:05:04,640 --> 00:05:06,020 karakter atau angka. 94 00:05:06,020 --> 00:05:09,100 Jadi hal pertama yang kita ingin periksa adalah apakah karakter dalam 95 00:05:09,100 --> 00:05:10,430 alfabet. 96 00:05:10,430 --> 00:05:14,460 >> Fungsi isalpha melakukan hal ini untuk kita dan mengembalikan Boolean - 97 00:05:14,460 --> 00:05:18,570 benar jika karakter adalah huruf a, false jika sebaliknya. 98 00:05:18,570 --> 00:05:22,270 Dua fungsi yang berguna lainnya isupper dan islower, dengan 99 00:05:22,270 --> 00:05:23,860 nama jelas. 100 00:05:23,860 --> 00:05:27,370 Mereka mengembalikan true jika karakter yang diberikan adalah besar atau kecil, 101 00:05:27,370 --> 00:05:28,740 masing-masing. 102 00:05:28,740 --> 00:05:33,770 Karena mereka adalah Booleans, mereka berguna untuk digunakan sebagai kondisi. 103 00:05:33,770 --> 00:05:38,310 >> Jika isalpha mengembalikan nilai true, Anda harus untuk menggeser karakter tersebut dengan kunci. 104 00:05:38,310 --> 00:05:43,750 Jadi mari kita buka ke ASCIIMath dan melakukan beberapa matematika ASCII. 105 00:05:43,750 --> 00:05:48,700 Pemakaian ini mirip dengan penggunaan untuk Caesar dan mengambil dalam kunci di 106 00:05:48,700 --> 00:05:50,870 baris perintah. 107 00:05:50,870 --> 00:05:59,590 >> Jika saya menjalankan ASCIIMath 5, tampaknya untuk menambahkan 5 ke, memberi saya huruf f, dan 108 00:05:59,590 --> 00:06:01,260 menampilkan nilai ASCII. 109 00:06:01,260 --> 00:06:04,090 Jadi mari kita lihat program. 110 00:06:04,090 --> 00:06:11,820 >> Anda mungkin bertanya-tanya, di sini, mengapa Surat adalah bilangan bulat, ketika itu 111 00:06:11,820 --> 00:06:14,330 secara jelas, baik, surat. 112 00:06:14,330 --> 00:06:17,690 Ternyata karakter dan bilangan bulat yang dipertukarkan. 113 00:06:17,690 --> 00:06:21,730 Dengan menempatkan huruf A dalam satu tanda kutip, integer dapat menyimpan 114 00:06:21,730 --> 00:06:25,390 nilai ASCII modal A. Hati-hati, meskipun. 115 00:06:25,390 --> 00:06:27,150 Anda membutuhkan pakaian tunggal. 116 00:06:27,150 --> 00:06:31,260 Tanpa tanda kutip tunggal, compiler akan mencari variabel 117 00:06:31,260 --> 00:06:35,510 bernama A, dan bukan karakter. 118 00:06:35,510 --> 00:06:42,140 >> Lalu aku menambahkan surat dan kunci, menyimpan Jumlah dalam variabel hasil int. 119 00:06:42,140 --> 00:06:47,740 Meskipun hasil adalah jenis data integer, pernyataan printf saya menggunakan 120 00:06:47,740 --> 00:06:50,370 % C tempat untuk karakter. 121 00:06:50,370 --> 00:06:54,530 Jadi program akan mencetak karakter terkait dengan hasil integer. 122 00:06:54,530 --> 00:07:00,400 Dan karena kami mencetak integer bentuk serta menggunakan% d, kita melihat 123 00:07:00,400 --> 00:07:02,110 jumlah juga. 124 00:07:02,110 --> 00:07:04,450 Jadi sekarang Anda dapat melihat bahwa kita memperlakukan karakter dan 125 00:07:04,450 --> 00:07:06,980 bilangan bulat, dan sebaliknya. 126 00:07:06,980 --> 00:07:12,205 >> Mari kita uji keluar ASCIIMath beberapa kali lainnya menggunakan 25 sebagai kunci. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Kami mendapatkan huruf z. 129 00:07:17,090 --> 00:07:19,750 Sekarang kita coba 26. 130 00:07:19,750 --> 00:07:25,600 Kami ingin mendapatkan surat, tapi bukannya kita mendapatkan braket kiri. 131 00:07:25,600 --> 00:07:29,490 Jadi jelas, hanya menambahkan kunci untuk surat itu tidak akan melakukannya. 132 00:07:29,490 --> 00:07:32,780 Kita perlu mencari tahu formula untuk membungkus sekitar alfabet, seperti kami 133 00:07:32,780 --> 00:07:34,570 Misalnya di awal lakukan. 134 00:07:34,570 --> 00:07:38,520 >> Sebuah formula untuk Caesar pergeseran adalah sebagai berikut. 135 00:07:38,520 --> 00:07:42,750 c sama dengan p ditambah k modulo 26. 136 00:07:42,750 --> 00:07:46,040 Ingat bahwa modulo adalah berguna operasi yang memberi kita sisanya 137 00:07:46,040 --> 00:07:49,880 membagi nomor satu dengan lainnya. 138 00:07:49,880 --> 00:07:54,870 Mari kita menerapkan formula ini untuk dataran Surat teks dengan Kunci dari 2. 139 00:07:54,870 --> 00:08:01,810 Nilai ASCII dari y adalah 89, yang memberi kita 91 modulo 26, 140 00:08:01,810 --> 00:08:03,690 yang sama dengan 13 - 141 00:08:03,690 --> 00:08:08,740 pasti tidak nilai ASCII dari, yaitu 67. 142 00:08:08,740 --> 00:08:12,810 >> Humor saya sekarang dan menjauhi Nilai ASCII ke indeks alfabet 143 00:08:12,810 --> 00:08:18,690 dimana A adalah nol dan Z adalah 25, yang berarti bahwa Y adalah 24. 144 00:08:18,690 --> 00:08:25,830 24 ditambah 2, modulo 6, memberi kita 26, modulo 26, 0, yang merupakan 145 00:08:25,830 --> 00:08:28,170 indeks alfabet dari. 146 00:08:28,170 --> 00:08:32,980 Jadi rumus ini tampaknya berlaku untuk indeks alfabet surat dan 147 00:08:32,980 --> 00:08:34,960 tidak nilai ASCII. 148 00:08:34,960 --> 00:08:37,630 >> Tapi Anda mulai dengan nilai-nilai ASCII. 149 00:08:37,630 --> 00:08:41,650 Dan untuk mencetak karakter ciphertext, Anda harus nilai ASCII juga. 150 00:08:41,650 --> 00:08:46,400 Terserah Anda, maka, untuk mencari tahu bagaimana untuk beralih kembali dan sebagainya. 151 00:08:46,400 --> 00:08:49,850 >> Setelah Anda mengetahui formula yang tepat untuk satu karakter, semua yang perlu Anda lakukan 152 00:08:49,850 --> 00:08:53,520 adalah menerapkan rumus yang sama untuk setiap huruf dalam teks biasa - 153 00:08:53,520 --> 00:08:57,720 hanya jika surat itu abjad, tentu saja. 154 00:08:57,720 --> 00:09:02,360 Dan ingat bahwa Anda perlu untuk melestarikan kasus ini, atas atau bawah, di situlah 155 00:09:02,360 --> 00:09:06,890 yang isUpper dan fungsi islower disebutkan sebelumnya akan berguna. 156 00:09:06,890 --> 00:09:08,830 Anda mungkin memiliki dua rumus - 157 00:09:08,830 --> 00:09:11,680 satu untuk huruf besar dan satu untuk huruf kecil. 158 00:09:11,680 --> 00:09:18,420 Jadi isUpper sebuah islower akan membantu Anda menentukan rumus untuk menerapkan. 159 00:09:18,420 --> 00:09:22,460 >> Bagaimana Anda menerapkan rumus untuk setiap karakter tunggal dalam sebuah string? 160 00:09:22,460 --> 00:09:25,910 Nah, string hanya sebuah array karakter. 161 00:09:25,910 --> 00:09:31,150 Jadi Anda dapat mengakses setiap karakter dengan pengelompokan atas setiap karakter dalam 162 00:09:31,150 --> 00:09:33,450 string dalam untuk loop. 163 00:09:33,450 --> 00:09:37,550 Adapun kondisi Anda untuk loop, fungsi strlen, untuk tali 164 00:09:37,550 --> 00:09:39,280 panjang, akan berguna. 165 00:09:39,280 --> 00:09:44,020 Dibutuhkan dalam sebuah string sebagai masukan dan mengembalikan panjang string tersebut. 166 00:09:44,020 --> 00:09:49,250 Pastikan untuk menyertakan perpustakaan yang tepat untuk menggunakan fungsi panjang string. 167 00:09:49,250 --> 00:09:51,790 >> Dan di sana Anda memiliki ciphertext Anda. 168 00:09:51,790 --> 00:09:53,260 Nama saya Zamyla tersebut. 169 00:09:53,260 --> 00:09:54,510 Dan [BERBICARA KODE]. 170 00:09:54,510 --> 00:10:02,944