1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Walkthrough - Masalah Set 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Universiti Harvard] 3 00:00:05,170 --> 00:00:07,490 [Ini adalah CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Semua hak. Hello, semua orang, dan mengalu-alukan kepada 2 Walkthrough. 5 00:00:10,750 --> 00:00:14,330 Pertama, saya ingin mengucapkan tahniah kepada anda untuk penamat pset 1. 6 00:00:14,330 --> 00:00:18,140 Saya tahu bahawa ia boleh menjadi sedikit sukar bagi sesetengah daripada anda, 7 00:00:18,140 --> 00:00:20,460 mungkin telah program komputer pertama anda bahawa anda menulis, 8 00:00:20,460 --> 00:00:24,500 tetapi hanya ingat bahawa pada akhir ini, apabila anda melihat kembali pada akhir semester, 9 00:00:24,500 --> 00:00:29,820 anda akan melihat di pset 1 dan anda akan berkata, "Hei, saya boleh melakukan dalam masa 5 minit." 10 00:00:29,820 --> 00:00:35,700 Jadi tahu dan mempercayai bahawa pada akhir ini anda pasti akan mendapati pset 1 agak mudah. 11 00:00:35,700 --> 00:00:40,640 Tetapi sekarang ia adalah satu pencapaian yang besar, dan tahniah untuk mendapat dilakukan. 12 00:00:40,640 --> 00:00:44,010 Sekarang, juga nota ringkas sebelum kita masuk ke dalam daging Walkthrough. 13 00:00:44,010 --> 00:00:48,340 Saya hanya mahu membuat nota ringkas yang saya kadang-kadang tidak akan mempunyai masa yang cukup 14 00:00:48,340 --> 00:00:52,500 semasa walkthroughs untuk pergi melalui setiap cara tunggal melakukan set masalah 15 00:00:52,500 --> 00:00:56,140 dan agak hanya mungkin memberi tumpuan kepada 1 atau 2 jenis pelaksanaan, 16 00:00:56,140 --> 00:00:57,750 cara-cara yang anda boleh lakukan ini. 17 00:00:57,750 --> 00:01:01,970 Tetapi itu bukan untuk mengatakan bahawa anda adalah dilarang daripada melakukan cara lain. 18 00:01:01,970 --> 00:01:05,980 Terdapat sering, seperti sains komputer, pelbagai cara untuk melakukan sesuatu, 19 00:01:05,980 --> 00:01:12,190 dan sebagainya pasti berasa bebas untuk menggunakan jenis yang berlainan penyelesaian daripada saya mungkin telah dibentangkan. 20 00:01:12,190 --> 00:01:14,520 [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. A Seksyen Soalan - 1. Caesar - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Semua hak. Jadi masalah menetapkan 2: Crypto adalah satu keseronokan. 23 00:01:20,650 --> 00:01:24,500 Sekali lagi, dengan setiap pset anda akan mula dengan seksyen soalan 24 00:01:24,500 --> 00:01:29,600 itu akan dijalankan dalam seksyen anda dengan rakan-rakan mengajar anda ditugaskan. 25 00:01:29,600 --> 00:01:31,670 Kami tidak akan pergi melalui ini lebih Walkthrough, 26 00:01:31,670 --> 00:01:35,100 tetapi mereka pasti akan membantu anda melengkapkan pset. 27 00:01:35,100 --> 00:01:38,100 Jadi bahagian pertama set masalah adalah Caesar. 28 00:01:38,100 --> 00:01:43,470 Dan sebagainya di Caesar seseorang akan lulus anda kunci dengan integer, 29 00:01:43,470 --> 00:01:48,420 dan anda akan menyulitkan rentetan teks yang mereka menyediakan anda 30 00:01:48,420 --> 00:01:50,670 dan memberikan mereka kembali satu perkara yang disulitkan. 31 00:01:50,670 --> 00:01:56,050 Jika sesiapa menonton A Story Krismas, terdapat satu contoh bahawa terdapat. 32 00:01:56,050 --> 00:01:59,090 Kemudian bahagian kedua set masalah adalah Vigenere, 33 00:01:59,090 --> 00:02:01,790 yang merupakan teknik penyulitan yang lebih maju. 34 00:02:01,790 --> 00:02:05,640 Dan supaya kita pergi untuk menulis dlm kod sekeping teks, 35 00:02:05,640 --> 00:02:09,600 kecuali bukannya dengan hanya satu integer, kita sebenarnya akan mengekod 36 00:02:09,600 --> 00:02:13,340 dengan kata kunci bahawa pengguna akan memberikan kita. 37 00:02:16,270 --> 00:02:22,090 Okay, jadi alat yang pertama di hari ini toolbox sebenarnya akan mengemaskini perkakas. 38 00:02:22,090 --> 00:02:26,430 Pada papan perbincangan, kita akan melihat perkara-perkara seperti, "Kenapa tidak kerja ini?" 39 00:02:26,430 --> 00:02:28,110 "Mengapa tidak Mengemukakan 50 kerja?" 40 00:02:28,110 --> 00:02:31,830 dan sering penyelesaian adalah sebenarnya hanya untuk mengemaskini perkakas anda. 41 00:02:31,830 --> 00:02:36,730 Dan jadi jika anda hanya menjalankan dalam tetingkap terminal sudo perkakas anda yum-y - 42 00:02:36,730 --> 00:02:40,040 itulah bendera mengatakan ya, mengemaskini segala-galanya - update, 43 00:02:40,040 --> 00:02:42,280 maka perkakas anda akan mengemaskini jika perlu menjadi. 44 00:02:42,280 --> 00:02:46,960 Dan ia tidak menyakiti jika anda sudah berada di versi yang paling baru-baru ini perkakas. 45 00:02:46,960 --> 00:02:51,280 Kemudian ia hanya akan mengatakan tidak ada update baru yang tersedia dan anda boleh terus bekerja bersama-sama. 46 00:02:51,280 --> 00:02:55,800 Tetapi ini adalah baik untuk melaksanakan walaupun setiap kali anda membuka perkakas 47 00:02:55,800 --> 00:02:57,140 kerana kami masih sangat - 48 00:02:57,140 --> 00:03:00,320 kadang-kadang jika kita datang ke pepijat - menetapkan ia dalam perkakas. 49 00:03:00,320 --> 00:03:03,180 Jadi pastikan bahawa anda mempunyai versi paling terkini perkakas 50 00:03:03,180 --> 00:03:07,710 dan menjalankan bahawa mengemaskini sana. 51 00:03:07,710 --> 00:03:14,360 Semua hak. Jadi kerana kita sedang berurusan dengan huruf dan perubahan, enciphering perkara, 52 00:03:14,360 --> 00:03:20,410 kita akan benar-benar mahu menjadi kawan terbaik dengan carta ASCII kami. 53 00:03:20,410 --> 00:03:24,350 Terdapat adalah orang-orang yang banyak dalam talian, jika anda mencari. Mungkin juga membuat anda sendiri. 54 00:03:24,350 --> 00:03:29,950 Pada asasnya, dengan setiap huruf dan setiap nombor dan watak setiap 55 00:03:29,950 --> 00:03:32,210 terdapat sebilangan yang dikaitkan dengan mereka, 56 00:03:32,210 --> 00:03:38,670 dan sebagainya ia adalah baik untuk melihat nilai ASCII mereka bersama-sama surat sebenar. 57 00:03:38,670 --> 00:03:42,310 Yang pasti akan membantu anda dalam set masalah. 58 00:03:42,310 --> 00:03:45,750 Satu perkara yang benar-benar membantu saya dalam set masalah ini adalah sebenarnya mencetak ia keluar, 59 00:03:45,750 --> 00:03:48,380 dan seperti yang saya telah melalui, saya benar-benar akan menarik di atasnya, 60 00:03:48,380 --> 00:03:51,150 menulis, "Jika ini telah pergi ke sana, maka ..." 61 00:03:51,150 --> 00:03:55,270 Jenis menarik di atasnya dan menandakan ia, menjadi kawan terbaik dengan meja ASCII anda. 62 00:03:57,240 --> 00:04:00,750 Kemudian kita mempunyai alat yang lain sedikit di tangan kita. 63 00:04:00,750 --> 00:04:03,750 Kali ini bukan sebenarnya mendorong pengguna untuk semua input mereka 64 00:04:03,750 --> 00:04:05,230 kita akan melakukan gabungan. 65 00:04:05,230 --> 00:04:06,880 Kami akan meminta mereka untuk input beberapa, 66 00:04:06,880 --> 00:04:11,350 tetapi kita juga akan hanya menggunakan hujah baris arahan. 67 00:04:11,350 --> 00:04:15,600 Jadi, apabila mereka menjalankan program mereka, biasanya anda katakan. / Hello, misalnya, 68 00:04:15,600 --> 00:04:17,310 jika program anda adalah hello.c. 69 00:04:17,310 --> 00:04:22,500 Tetapi kali ini bukan hanya mengatakan bahawa, mereka boleh meletakkan perkataan, hujah selepas itu. 70 00:04:22,500 --> 00:04:27,210 Dan sebagainya kita akan menggunakan apa sahaja yang mereka lulus kepada kita sebagai input mereka juga, 71 00:04:27,210 --> 00:04:31,720 jadi bergerak di luar hanya menggesa untuk integer tetapi juga menggunakan hujah baris arahan. 72 00:04:31,720 --> 00:04:36,590 Dan kemudian kita akan pergi ke tatasusunan dan rentetan, yang kita akan menggunakan banyak juga. 73 00:04:41,460 --> 00:04:44,810 Berikut adalah hanya satu contoh 1 carta ASCII mini. 74 00:04:44,810 --> 00:04:48,460 Seperti yang saya katakan, setiap huruf sepadan dengan nombor, 75 00:04:48,460 --> 00:04:52,510 dan sebagainya membiasakan diri dengan itu. Ia akan datang dalam berguna. 76 00:04:52,510 --> 00:04:55,610 Dan kemudian apabila kita mula melakukan beberapa ASCIIMath berurusan dengan nombor - 77 00:04:55,610 --> 00:05:00,110 menambah, menolak mereka - maka pasti baik untuk merujuk kepada carta ini. 78 00:05:02,860 --> 00:05:06,920 Jadi di sini adalah satu contoh cipher Caesar - sesuatu yang anda mungkin telah dimainkan dengan. 79 00:05:06,920 --> 00:05:11,190 Ia adalah hanya roda. Pada asasnya, terdapat abjad luar dan kemudian ada abjad dalaman. 80 00:05:11,190 --> 00:05:15,290 Jadi di sini adalah satu contoh cipher Caesar tetapi dengan kunci 0. 81 00:05:15,290 --> 00:05:21,540 Pada asasnya, sejajar dengan A, B sejajar dengan B, sepanjang jalan sehingga ke Z. 82 00:05:21,540 --> 00:05:26,590 Tetapi kemudian mengatakan kita mahu kunci 3, misalnya. 83 00:05:26,590 --> 00:05:33,280 Kemudian kita akan memutarkan roda dalaman supaya A kini menjajarkan dengan D, dan lain-lain 84 00:05:33,280 --> 00:05:35,250 Dan sebagainya ini pada asasnya adalah apa yang kita akan lakukan. 85 00:05:35,250 --> 00:05:38,340 Kami tidak mempunyai roda, tetapi apa yang kita akan lakukan membuat program kami 86 00:05:38,340 --> 00:05:44,490 jenis beralih abjad bersama-sama dengan kami jumlah tertentu nombor. 87 00:05:44,490 --> 00:05:48,650 Jadi seperti yang saya katakan sebelum ini, kita akan berurusan dengan hujah baris arahan 88 00:05:48,650 --> 00:05:50,390 serta mendapat integer. 89 00:05:50,390 --> 00:05:55,050 Jadi cara yang pengguna akan menjalankan program Caesar anda adalah dengan berkata. / Caesar 90 00:05:55,050 --> 00:05:58,090 dan kemudian memasuki nombor selepas itu. 91 00:05:58,090 --> 00:06:01,130 Dan nombor yang mewakili kunci, peralihan, 92 00:06:01,130 --> 00:06:06,740 berapa banyak kali anda akan berputar roda dalaman cipher Caesar anda. 93 00:06:06,740 --> 00:06:08,390 Dan supaya anda lihat di sini contoh. 94 00:06:08,390 --> 00:06:14,550 Jika kita memasuki huruf dari A ke L dalam cipher Caesar kami, 95 00:06:14,550 --> 00:06:19,520 maka ia akan input D melalui O kerana itulah setiap surat beralih lebih daripada 3 kali, 96 00:06:19,520 --> 00:06:22,080 seperti contoh roda yang saya menunjukkan kepada kamu. 97 00:06:22,080 --> 00:06:25,300 Jadi, maka jika anda memasuki, misalnya, Ini adalah CS50! 98 00:06:25,300 --> 00:06:27,960 maka ia juga akan memindahkan semua huruf. 99 00:06:27,960 --> 00:06:31,040 Dan itulah satu perkara yang penting dalam kedua-dua Caesar dan Vigenere 100 00:06:31,040 --> 00:06:34,890 adalah bahawa kita akan melangkau ke atas apa-apa surat bukan. 101 00:06:34,890 --> 00:06:39,160 Jadi mana-mana ruang, watak, dan lain-lain, nombor, kita pergi untuk memastikan mereka yang sama. 102 00:06:39,160 --> 00:06:42,920 Kami hanya akan beralih surat dalam kes ini. 103 00:06:42,920 --> 00:06:45,870 Jadi seperti yang anda lihat dalam roda, kami hanya mempunyai huruf yang ada pada kita, 104 00:06:45,870 --> 00:06:50,150 jadi kita hanya mahu beralih huruf dan menyulitkan huruf. 105 00:06:51,370 --> 00:06:56,720 Jadi perkara pertama yang perlu dilakukan, anda melihat bahawa penggunaan untuk Caesar dalam masalah menetapkan 2 106 00:06:56,720 --> 00:07:05,280 adalah untuk menjalankan Caesar dan kemudian masukkan nombor apabila anda menjalankan di terminal. 107 00:07:05,280 --> 00:07:10,940 Jadi apa yang perlu kita lakukan adalah untuk entah bagaimana mendapatkan kunci itu dan mengakses. 108 00:07:10,940 --> 00:07:14,730 Dan jadi kami mahu entah bagaimana melihat ia akan menjadi hujah baris arahan kedua. 109 00:07:14,730 --> 00:07:20,950 Yang pertama akan menjadi / Caesar, dan yang seterusnya akan menjadi kekunci nombor. 110 00:07:22,190 --> 00:07:29,200 Jadi, sebelum kita mempunyai int utama (tidak sah) untuk memulakan program C kami. 111 00:07:29,200 --> 00:07:31,790 Kami akan mengupas kembali lapisan sedikit 112 00:07:31,790 --> 00:07:34,720 dan sebenarnya melihat bahawa bukannya lulus terbatal fungsi utama kami 113 00:07:34,720 --> 00:07:37,920 kita sebenarnya berurusan dengan 2 parameter. 114 00:07:37,920 --> 00:07:44,070 Kami mempunyai int dinamakan argc dan kemudian pelbagai rentetan yang dipanggil argv. 115 00:07:44,070 --> 00:07:46,030 Jadi argc ialah integer, 116 00:07:46,030 --> 00:07:49,640 dan ia mewakili bilangan hujah yang diluluskan untuk program anda. 117 00:07:49,640 --> 00:07:53,590 Dan kemudian argv sebenarnya senarai hujah-hujah yang diluluskan. 118 00:07:53,590 --> 00:08:00,820 Semua hujah-hujah tali, dan sebagainya argv mewakili pelbagai, senarai, rentetan. 119 00:08:01,830 --> 00:08:03,990 Mari kita bercakap tentang tatasusunan sedikit. 120 00:08:03,990 --> 00:08:05,940 Perlengkapan dasarnya struktur data baru. 121 00:08:05,940 --> 00:08:09,660 Kami mempunyai ints, kami telah beregu, kita mempunyai rentetan, dan sekarang kami mempunyai array. 122 00:08:09,660 --> 00:08:13,820 Tatasusunan adalah struktur data yang boleh memegang nilai-nilai pelbagai jenis yang sama, 123 00:08:13,820 --> 00:08:18,320 jadi pada dasarnya, senarai apa jua jenis yang anda mahu. 124 00:08:18,320 --> 00:08:24,400 Pada asasnya, jika anda mahu senarai integer semua dalam 1 pembolehubah, 125 00:08:24,400 --> 00:08:29,090 maka anda akan mewujudkan pembolehubah baru yang pelbagai int jenis. 126 00:08:29,090 --> 00:08:34,450 Jadi tatasusunan adalah sifar diindeks, yang bermaksud bahawa elemen pertama array adalah pada 0 indeks. 127 00:08:34,450 --> 00:08:41,799 Jika array adalah 4 panjang, seperti dalam contoh ini, maka elemen terakhir anda akan berada pada indeks 3, 128 00:08:41,799 --> 00:08:44,810 yang 4-1. 129 00:08:45,940 --> 00:08:48,420 Jadi untuk mewujudkan pelbagai, anda akan melakukan sesuatu seperti ini. 130 00:08:48,420 --> 00:08:51,440 Katakanlah anda mahu pelbagai berganda. 131 00:08:51,440 --> 00:08:56,520 Ini pergi untuk mana-mana jenis jenis data, walaupun. 132 00:08:56,520 --> 00:09:00,210 Jadi mengatakan anda mahu pelbagai double. Katakanlah anda mahu memanggilnya peti mel. 133 00:09:00,210 --> 00:09:04,760 Sama seperti anda akan memulakan mana-mana dua yang lain, 134 00:09:04,760 --> 00:09:09,760 anda akan mengatakan dua kali ganda dan kemudian nama, tetapi kali ini kita meletakkan kurungan persegi, 135 00:09:09,760 --> 00:09:13,570 dan kemudian nombor yang akan ada panjang array. 136 00:09:13,570 --> 00:09:16,840 Perhatikan bahawa dalam barisan kita boleh tidak pernah menukar panjang, 137 00:09:16,840 --> 00:09:21,230 supaya anda sentiasa perlu untuk menentukan dan memilih berapa banyak kotak, 138 00:09:21,230 --> 00:09:25,440 berapa banyak nilai-nilai pelbagai anda akan memegang. 139 00:09:25,440 --> 00:09:31,820 Jadi untuk menetapkan nilai-nilai yang berbeza dalam pelbagai anda, anda akan menggunakan sintaks berikut, 140 00:09:31,820 --> 00:09:33,200 seperti yang anda lihat pada slaid. 141 00:09:33,200 --> 00:09:37,620 0 indeks peti mel anda mempunyai akan ditetapkan kepada 1.2, 142 00:09:37,620 --> 00:09:42,180 peti mel indeks 1 set kepada 2.4, dan lain-lain 143 00:09:42,180 --> 00:09:47,910 Jadi sekarang kita telah memeriksa barisan sedikit, mari kita kembali kepada argc dan argv. 144 00:09:47,910 --> 00:09:52,220 Kita tahu bahawa argv kini pelbagai rentetan. 145 00:09:52,220 --> 00:09:55,080 Jadi apabila pengguna pas - mengatakan mereka sedang menjalankan program - 146 00:09:55,080 --> 00:09:58,740 yang mereka katakan. / hello David Malan, 147 00:09:58,740 --> 00:10:05,160 apa yang program ini akan lakukan untuk anda sudah sebenarnya tampil dengan apa argc dan argv. 148 00:10:05,160 --> 00:10:07,620 Jadi anda tidak perlu bimbang tentang itu. 149 00:10:07,620 --> 00:10:14,370 Argc dalam kes ini akan menjadi 3 kerana ia melihat 3 perkataan yang berbeza yang dipisahkan oleh ruang. 150 00:10:14,370 --> 00:10:18,850 Dan demikian maka pelbagai dalam hal ini, indeks pertama akan / hello, 151 00:10:18,850 --> 00:10:21,770 seterusnya Daud, seterusnya satu Malan. 152 00:10:21,770 --> 00:10:25,640 Adakah sesiapa yang melihat segera apa hubungan antara argv, 153 00:10:25,640 --> 00:10:28,990  array, dan argc? 154 00:10:32,820 --> 00:10:38,090 Yeah. Kita akan masuk ke dalam bahawa dalam contoh di args.c. 155 00:10:38,090 --> 00:10:42,880 Mari kita lihat jika kita boleh mengambil kesempatan daripada hubungan antara 2. 156 00:10:42,880 --> 00:10:46,550 Di sini anda mungkin mendapati bahawa di dalam perkakas aplikasi lalai 157 00:10:46,550 --> 00:10:49,450 untuk membuka c fail adalah kadang-kadang Emacs. 158 00:10:49,450 --> 00:10:54,660 Tetapi kita mahu berurusan dengan gedit, jadi apa yang boleh anda lakukan adalah anda boleh klik kanan pada fail C anda, 159 00:10:54,660 --> 00:11:04,580 pergi ke Hartanah, Buka Dengan, dan kemudian memilih gedit, Tetapkan sebagai lalai, 160 00:11:04,580 --> 00:11:13,020 dan kini program anda harus membuka dalam gedit bukannya Emacs. 161 00:11:14,710 --> 00:11:16,290 Sempurna. 162 00:11:17,120 --> 00:11:25,520 Jadi di sini saya mempunyai program yang saya ingin mencetak keluar setiap hujah baris arahan. 163 00:11:25,520 --> 00:11:32,050 Jadi apa sahaja pengguna input, saya mahu pada dasarnya kembali kembali kepada mereka pada baris baru. 164 00:11:32,050 --> 00:11:36,710 Jadi apa struktur yang boleh kita gunakan untuk melelar atas sesuatu - 165 00:11:36,710 --> 00:11:40,380 sesuatu yang anda mungkin digunakan dalam 1 pset anda? 166 00:11:40,380 --> 00:11:45,840 Jika anda mahu pergi melalui beberapa perkara? >> [Pelajar] Untuk gelung. 167 00:11:45,840 --> 00:11:48,910 Untuk gelung. Tepat sekali. Jadi mari kita mulakan dengan bagi gelung. 168 00:11:48,910 --> 00:11:56,900 Kami mempunyai int i = 0. Mari kita mulakan dengan pembolehubah pengawalan standard. 169 00:11:56,900 --> 00:12:02,370 Saya akan meninggalkan keadaan untuk satu set dan kemudian mengatakan i + +, pergi untuk melakukan perkara-perkara di sana. 170 00:12:02,370 --> 00:12:04,090 Semua hak. 171 00:12:04,090 --> 00:12:11,590 Jadi memikirkan kembali ke argv, jika argv adalah senarai hujah yang diluluskan dalam program 172 00:12:11,590 --> 00:12:15,380 dan argc adalah beberapa hujah-hujah dalam program ini, 173 00:12:15,380 --> 00:12:21,280 maka itu bermakna bahawa argc adalah asasnya panjang argv, betul-betul, 174 00:12:21,280 --> 00:12:28,970 kerana ada akan menjadi sebagai banyak hujah sebagai nilai argc. 175 00:12:28,970 --> 00:12:35,910 Jadi, jika kita mahu untuk melelar atas setiap elemen dalam argv, 176 00:12:35,910 --> 00:12:43,290 kita akan mahu untuk setiap kali mengakses pembolehubah di argv pada indeks yang diberikan. 177 00:12:43,290 --> 00:12:49,060 Yang boleh diwakili dengan ini, kan? 178 00:12:49,060 --> 00:12:53,430 Pemboleh ubah di sini mewakili rentetan tertentu dalam hal ini 179 00:12:53,430 --> 00:12:57,030 kerana ia adalah pelbagai rentetan - rentetan tertentu pada indeks yang diberikan. 180 00:12:57,030 --> 00:13:00,690 Apa yang kita mahu lakukan, dalam kes ini kita mahu untuk mencetak ia keluar, jadi katakan printf. 181 00:13:00,690 --> 00:13:04,680 Dan kini argv adalah rentetan, jadi kita mahu meletakkan placeholder bahawa terdapat. 182 00:13:04,680 --> 00:13:08,430 Kami mahu barisan baru hanya untuk membuat ia kelihatan baik. 183 00:13:08,430 --> 00:13:12,530 Jadi di sini kita mempunyai gelung untuk. Kami tidak mempunyai keadaan lagi. 184 00:13:12,530 --> 00:13:20,020 Jadi saya bermula pada 0, dan kemudian setiap kali ia akan mencetak rentetan yang diberikan 185 00:13:20,020 --> 00:13:22,980 pada indeks yang tertentu dalam array. 186 00:13:22,980 --> 00:13:28,410 Jadi, apabila kita mahu berhenti mencetak elemen dalam array? 187 00:13:28,410 --> 00:13:35,720 Apabila kita telah selesai, kan? Apabila kita telah sampai ke penghujung array. 188 00:13:35,720 --> 00:13:38,870 Jadi kita tidak mahu melebihi lepas panjang array, 189 00:13:38,870 --> 00:13:43,700 dan kita sudah tahu kita tidak perlu untuk benar-benar aktif mengetahui apa yang panjang argv 190 00:13:43,700 --> 00:13:47,520 kerana ia diberikan kepada kami, dan apa itu? Argc. Tepat sekali. 191 00:13:47,520 --> 00:13:56,640 Jadi kita mahu melakukan proses ini nombor argc kali. 192 00:13:56,640 --> 00:13:59,550 Saya tidak dalam direktori yang betul. 193 00:14:02,100 --> 00:14:03,490 Semua hak. 194 00:14:03,490 --> 00:14:08,990 Sekarang mari kita membuat args. Tiada kesilapan, yang besar. 195 00:14:08,990 --> 00:14:11,430 Jadi mari kita hanya menjalankan args. 196 00:14:11,430 --> 00:14:15,130 Apakah ini akan kembali kepada kita? Ia hanya akan mencetak semula. 197 00:14:15,130 --> 00:14:18,320 "Anda dimasukkan args ke dalam program ini, saya akan memberikan kembali kepada anda." 198 00:14:18,320 --> 00:14:23,170 Jadi mari kita mengatakan bahawa kita mahu mengatakan args maka foo bar. 199 00:14:23,170 --> 00:14:26,570 Jadi maka ia mencetak ia keluar kembali kepada kami. Semua hak? 200 00:14:26,570 --> 00:14:30,790 Jadi ada satu contoh bagaimana anda boleh menggunakan argc dan argv 201 00:14:30,790 --> 00:14:33,460 mengetahui argc yang mewakili panjang argv. 202 00:14:33,460 --> 00:14:42,750 Pastikan bahawa anda tidak pernah dengan akses tatasusunan 1 melampaui panjang array 203 00:14:42,750 --> 00:14:45,140 kerana C pasti akan menjerit pada anda. 204 00:14:45,140 --> 00:14:47,560 Anda akan mendapat sesuatu yang dipanggil kesalahan segmentasi, 205 00:14:47,560 --> 00:14:52,470 yang tidak pernah menyeronokkan, pada dasarnya mengatakan anda cuba untuk mengakses sesuatu 206 00:14:52,470 --> 00:14:55,000 yang tidak wujud, tidak tergolong kepada anda. 207 00:14:55,000 --> 00:14:59,430 Jadi pastikan, dan terutamanya dengan pengindeksan sifar, kita tidak mahu - 208 00:14:59,430 --> 00:15:02,390 Seperti misalnya, jika kita mempunyai pelbagai daripada 4 panjang, 209 00:15:02,390 --> 00:15:07,240 bahawa indeks array 4 tidak wujud kerana kita bermula pada 0, pada sifar indeks. 210 00:15:07,240 --> 00:15:11,730 Ia akan menjadi sifat kedua seperti gelung apabila kita bermula pada 0. 211 00:15:11,730 --> 00:15:13,610 Jadi hanya menyimpan bahawa dalam fikiran. 212 00:15:13,610 --> 00:15:22,590 Anda tidak mahu pernah mengakses indeks pelbagai yang di luar jangkauan anda. 213 00:15:26,710 --> 00:15:32,560 Jadi kita boleh lihat sekarang bagaimana kita boleh jenis akses 214 00:15:32,560 --> 00:15:35,930 hujah baris arahan yang diluluskan. 215 00:15:35,930 --> 00:15:41,330 Tetapi seperti yang anda lihat tali, argv sebenarnya adalah rentetan pelbagai. 216 00:15:41,330 --> 00:15:45,740 Jadi ia sebenarnya tidak integer lagi, tetapi di Caesar kita mahu berurusan dengan integer. 217 00:15:45,740 --> 00:15:54,430 Nasib baik, terdapat satu fungsi yang dicipta untuk kita yang benar-benar boleh menukar rentetan kepada integer. 218 00:15:54,430 --> 00:15:58,710 Juga di sini kita tidak berurusan dengan input pengguna di mana kita sedang mendorong mereka 219 00:15:58,710 --> 00:16:03,740 untuk input di sini bagi kekunci, jadi kita boleh sebenarnya tidak reprompt dan berkata, 220 00:16:03,740 --> 00:16:07,840 "Oh, beri saya integer lain, berkata, jika ia tidak sah." 221 00:16:07,840 --> 00:16:10,540 Tetapi kita masih perlu untuk memeriksa penggunaan yang betul. 222 00:16:10,540 --> 00:16:13,520 Di Caesar mereka hanya dibenarkan untuk lulus dalam 1 nombor, 223 00:16:13,520 --> 00:16:18,030 dan supaya mereka perlu untuk menjalankan / Caesar dan kemudian mereka perlu memberi anda nombor. 224 00:16:18,030 --> 00:16:23,660 Jadi argc mempunyai untuk menjadi bilangan tertentu. 225 00:16:23,660 --> 00:16:29,060 Apakah nombor yang akan menjadi jika mereka perlu lulus anda / Caesar dan kemudian kunci? 226 00:16:29,060 --> 00:16:32,920 Apakah argc? >> [Pelajar] 2. >> Dua. Tepat sekali. 227 00:16:32,920 --> 00:16:35,490 Jadi, anda ingin memastikan bahawa argc ialah 2. 228 00:16:35,490 --> 00:16:39,620 Jika tidak, anda pada dasarnya enggan untuk menjalankan program ini. 229 00:16:39,620 --> 00:16:43,040 Dalam utama ia adalah fungsi yang mengatakan int utama, 230 00:16:43,040 --> 00:16:47,360 demikian maka kita sentiasa dalam amalan yang baik pulangan 0 pada akhir program yang berjaya. 231 00:16:47,360 --> 00:16:50,840 Jadi jika, katakan, mereka memberi anda 3 hujah baris arahan dan bukannya 2 232 00:16:50,840 --> 00:16:54,350 atau memberi anda 1, misalnya, maka apa yang anda akan lakukan adalah anda akan mahu untuk memeriksa 233 00:16:54,350 --> 00:16:59,900 dan kemudian kembali 1 berkata, tidak, saya tidak boleh meneruskan dengan program ini. 234 00:16:59,900 --> 00:17:03,190 [Pelajar] Terdapat tidak boleh menjadi ruang dalam teks anda. >> Maafkan saya? 235 00:17:03,190 --> 00:17:06,780 [Pelajar] Terdapat tidak boleh menjadi ruang dalam teks anda cuba untuk menyulitkan. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 Dari segi teks yang kita sedang cuba untuk menyulitkan, yang sebenarnya datang lewat 238 00:17:11,280 --> 00:17:13,970 apabila kita memberi teks itu. 239 00:17:13,970 --> 00:17:18,260 Jadi sekarang kita hanya menerima sebagai hujah arahan bilangan sebenar, 240 00:17:18,260 --> 00:17:21,579 anjakan sebenar untuk penyulitan Caesar. 241 00:17:21,579 --> 00:17:27,569 [Pelajar] Mengapa anda memerlukan 2 berbanding hanya argc 1? Ada pasti 1 nombor. 242 00:17:27,569 --> 00:17:32,200 Betul. Sebab mengapa kita perlu 2 untuk argc bukannya 1 243 00:17:32,200 --> 00:17:36,260 adalah kerana apabila anda menjalankan program dan berkata. / Caesar atau / hello, 244 00:17:36,260 --> 00:17:38,280 yang benar-benar dikira sebagai hujah baris arahan. 245 00:17:38,280 --> 00:17:43,020 Demikian maka yang sudah mengambil masa sehingga 1 dan demikian maka kita sedang memasukkan 1 tambahan. 246 00:17:45,030 --> 00:17:49,440 Jadi anda memasukkan sebenarnya satu rentetan dalam hujah baris arahan. 247 00:17:49,440 --> 00:17:52,730 Apa yang anda mahu lakukan, untuk Caesar kita mahu berurusan dengan integer, 248 00:17:52,730 --> 00:17:57,180 supaya anda boleh menggunakan fungsi ini atoi. 249 00:17:57,180 --> 00:18:02,850 Dan pada dasarnya, anda lulus dalam rentetan dan kemudian ia akan mengembalikan kamu kembali integer 250 00:18:02,850 --> 00:18:06,070 jika ia adalah mungkin untuk membuat tali itu ke dalam integer. 251 00:18:06,070 --> 00:18:10,960 Sekarang ingat apabila kita sedang berurusan dengan perkara-perkara printf atau GetString, seperti itu, 252 00:18:10,960 --> 00:18:13,390 kita termasuk perpustakaan yang khusus kepada kita. 253 00:18:13,390 --> 00:18:19,450 Jadi pada permulaan kita bermula dengan tag hash sesuatu standard I / O, h, seperti itu. 254 00:18:19,450 --> 00:18:22,430 Nah, atoi tidak termasuk dalam salah satu dari orang-orang perpustakaan, 255 00:18:22,430 --> 00:18:26,600 jadi apa yang perlu kita lakukan ialah kita perlu termasuk perpustakaan yang betul untuk itu. 256 00:18:26,600 --> 00:18:32,720 Jadi ingat kembali kepada 1 Walkthrough di mana saya telah membincangkan fungsi manual. 257 00:18:32,720 --> 00:18:37,110 Anda menaip manusia di terminal anda dan kemudian diikuti oleh nama fungsi. 258 00:18:37,110 --> 00:18:39,720 Dan supaya akan membawa senarai keseluruhan penggunaannya, 259 00:18:39,720 --> 00:18:42,890 tetapi juga ia akan membawa perpustakaan yang yang dimiliki. 260 00:18:42,890 --> 00:18:47,000 Jadi saya akan meninggalkan bahawa kepada anda untuk menggunakan fungsi manual dengan atoi 261 00:18:47,000 --> 00:18:53,360 dan memikirkan perpustakaan yang anda perlu termasuk untuk dapat menggunakan fungsi atoi. 262 00:18:54,450 --> 00:18:57,670 Jadi kita telah mendapat kunci dan kini ia datang untuk mendapatkan teks biasa, 263 00:18:57,670 --> 00:19:01,820 dan sebagainya yang sebenarnya akan menjadi input pengguna di mana anda segera. 264 00:19:01,820 --> 00:19:05,540 Kami diuruskan dengan GetInt dan GetFloat, dan sebagainya dalam nada yang sama 265 00:19:05,540 --> 00:19:07,670 kita akan untuk berurusan dengan GetString. 266 00:19:07,670 --> 00:19:12,440 Tetapi dalam kes ini, kita tidak perlu untuk melakukan apa-apa buat sementara atau sementara gelung untuk memeriksa. 267 00:19:12,440 --> 00:19:14,480 GetString pasti akan memberi kita rentetan, 268 00:19:14,480 --> 00:19:17,630 dan kita akan menyulitkan apa sahaja pengguna memberikan kita. 269 00:19:17,630 --> 00:19:23,770 Jadi, anda boleh mengandaikan bahawa semua ini rentetan pengguna dimasukkan adalah betul. 270 00:19:23,770 --> 00:19:24,670 Besar. 271 00:19:24,670 --> 00:19:27,270 Jadi kemudian sekali anda mendapat kunci dan sebaik sahaja anda telah mendapat teks, 272 00:19:27,270 --> 00:19:31,660 sekarang apa yang tinggal ialah anda perlu menulis dlm kod plaintext. 273 00:19:31,660 --> 00:19:36,530 Hanya dengan cepat meliputi lebih lingo, plaintext adalah apa yang pengguna memberi anda, 274 00:19:36,530 --> 00:19:41,030 dan tulisan rahsia adalah apa yang kamu kembali kepada mereka. 275 00:19:42,450 --> 00:19:45,850 Jadi tali, untuk menjadi mampu untuk pergi melalui surat sebenarnya melalui surat 276 00:19:45,850 --> 00:19:48,550 kerana kita perlu beralih setiap huruf, 277 00:19:48,550 --> 00:19:51,390 kita memahami bahawa rentetan, jika kita jenis kulit kembali lapisan, 278 00:19:51,390 --> 00:19:54,130 kita lihat bahawa mereka hanya benar-benar senarai aksara. 279 00:19:54,130 --> 00:19:55,930 Satu datang selepas yang lain. 280 00:19:55,930 --> 00:20:01,690 Dan supaya kita boleh merawat rentetan sebagai tatasusunan kerana mereka adalah tatasusunan aksara. 281 00:20:01,690 --> 00:20:05,640 Jadi mengatakan anda mempunyai rentetan bernama teks, 282 00:20:05,640 --> 00:20:09,400 dan dalam teks yang berubah-ubah disimpan Ini adalah CS50. 283 00:20:09,400 --> 00:20:15,680 Kemudian teks pada 0 indeks akan menjadi modal T, indeks 1 akan h, dan lain-lain 284 00:20:17,530 --> 00:20:23,970 Dan kemudian dengan tatasusunan, dalam contoh argc dalam args.c, 285 00:20:23,970 --> 00:20:27,090 kita melihat bahawa kita terpaksa untuk melelar lebih array 286 00:20:27,090 --> 00:20:32,440 dan sebagainya kita terpaksa melelar i = 0 sehingga i adalah kurang daripada panjang. 287 00:20:32,440 --> 00:20:35,560 Jadi kita memerlukan beberapa cara untuk memikirkan apa yang panjang rentetan kami 288 00:20:35,560 --> 00:20:37,090 jika kita pergi untuk melelar atasnya. 289 00:20:37,090 --> 00:20:42,300 Nasib baik lagi, terdapat satu fungsi di sana untuk kita, walaupun kemudian dalam CS50 290 00:20:42,300 --> 00:20:45,860 anda pasti akan mampu untuk melaksanakan dan menjadikan fungsi anda sendiri 291 00:20:45,860 --> 00:20:48,260 yang boleh mengira panjang rentetan. 292 00:20:48,260 --> 00:20:52,120 Tetapi untuk sekarang kita akan menggunakan panjang tali, jadi strlen. 293 00:20:52,120 --> 00:21:00,440 Anda lulus dalam rentetan, dan kemudian ia akan kembali anda int yang mewakili panjang rentetan anda. 294 00:21:00,440 --> 00:21:05,840 Mari kita melihat contoh bagaimana kita mungkin mampu untuk melelar setiap aksara dalam rentetan 295 00:21:05,840 --> 00:21:08,470 dan melakukan sesuatu dengan itu. 296 00:21:08,470 --> 00:21:13,250 Apa yang kami mahu lakukan adalah melelar lebih setiap watak tali, 297 00:21:13,250 --> 00:21:19,150 dan apa yang kita mahu lakukan ialah kita mencetak kembali setiap watak 1 oleh 1 298 00:21:19,150 --> 00:21:22,060 kecuali kita menambah sesuatu yang di sebelahnya. 299 00:21:22,060 --> 00:21:27,020 Jadi mari kita mulakan dengan bagi gelung. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Kami akan meninggalkan ruang untuk keadaan. 301 00:21:32,700 --> 00:21:36,840 Kami mahu melelar sehingga kita sampai ke penghujung tali, kan? 302 00:21:36,840 --> 00:21:41,340 Demikian maka apa fungsi memberikan kita panjang tali? 303 00:21:41,340 --> 00:21:43,160 [Sambutan pelajar didengar] 304 00:21:43,160 --> 00:21:46,420 Itulah panjang hujah baris arahan. 305 00:21:46,420 --> 00:21:50,650 Tetapi bagi rentetan kita mahu menggunakan fungsi yang memberikan kita panjang rentetan. 306 00:21:50,650 --> 00:21:53,090 Jadi itulah panjang rentetan. 307 00:21:53,090 --> 00:21:57,130 Dan demikian maka anda perlu untuk lulus dalam rentetan kepadanya. 308 00:21:57,130 --> 00:21:59,760 Ia perlu tahu apa rentetan ia perlu untuk mengira panjang. 309 00:21:59,760 --> 00:22:03,160 Demikian maka dalam kes ini, kita sedang berurusan dengan rentetan s. 310 00:22:04,790 --> 00:22:05,860 Besar. 311 00:22:05,860 --> 00:22:10,770 Jadi maka apa yang kita mahu lakukan, mari kita printf. 312 00:22:10,770 --> 00:22:14,850 Sekarang, kita ingin berurusan dengan watak-watak. Kami ingin mencetak keluar setiap karakter individu. 313 00:22:14,850 --> 00:22:22,150 Apabila anda mahu ia untuk mencetak apungan, anda akan menggunakan placeholder seperti f%. 314 00:22:22,150 --> 00:22:24,580 Dengan int anda akan menggunakan% d. 315 00:22:24,580 --> 00:22:30,890 Dan sebagainya yang sama, dengan watak anda menggunakan c% untuk mengatakan saya akan mencetak watak 316 00:22:30,890 --> 00:22:34,570 yang disimpan di dalam pembolehubah. 317 00:22:34,570 --> 00:22:40,840 Jadi kita mempunyai ini, dan mari kita menambah tempoh dan ruang untuk ia. 318 00:22:40,840 --> 00:22:45,430 Aksara mana yang kita gunakan? 319 00:22:45,430 --> 00:22:49,780 Kami akan menggunakan apa jua watak yang kita berada di tali. 320 00:22:49,780 --> 00:22:52,890 Jadi maka kita akan menggunakan sesuatu dengan tali, 321 00:22:52,890 --> 00:22:56,420 tetapi kita mahu mengakses watak tertentu di sana. 322 00:22:56,420 --> 00:23:02,740 Jadi, jika rentetan hanya array, maka bagaimana kita mengakses unsur-unsur tatasusunan? 323 00:23:02,740 --> 00:23:06,480 Kami mempunyai orang kurungan persegi, dan kemudian kita meletakkan indeks di sana. 324 00:23:06,480 --> 00:23:11,820 Jadi kita mempunyai kurungan persegi. Indeks kami dalam kes ini, kita hanya boleh menggunakan i. Tepat sekali. 325 00:23:15,290 --> 00:23:22,370 Jadi di sini kita mengatakan kita akan mencetak watak diikuti oleh titik dan ruang, 326 00:23:22,370 --> 00:23:30,870 dan watak itu akan menjadi huruf i dalam s rentetan kami. 327 00:23:32,920 --> 00:23:39,330 Saya hanya akan untuk menyelamatkan. Okay. 328 00:23:42,510 --> 00:23:46,840 Sekarang saya akan untuk menjalankan panjang rentetan. 329 00:23:46,840 --> 00:23:53,440 Jadi kita mempunyai rentetan dipanggil OMG, dan kini ia menekankan lebih. 330 00:23:53,440 --> 00:23:57,870 Begitu juga, mari kita mengatakan bahawa kita benar-benar mahu mendapatkan rentetan dari pengguna. 331 00:23:57,870 --> 00:23:59,580 Bagaimana kita mungkin melakukan ini? 332 00:23:59,580 --> 00:24:01,610 Sebelum ini, bagaimana kita mendapatkan int an? 333 00:24:01,610 --> 00:24:08,040 Kami berkata GetInt, betul-betul? Tetapi ini tidak int, jadi mari kita GetString. 334 00:24:11,780 --> 00:24:17,770 Mari kita membuat tali panjang. Di sini kita tidak masukkan segera khusus. 335 00:24:17,770 --> 00:24:19,940 Jadi, saya tidak tahu. 336 00:24:19,940 --> 00:24:23,820 Saya akan meletakkan nama saya di sini dan sebagainya maka saya boleh melakukan salah satu daripada perkara-perkara 337 00:24:23,820 --> 00:24:29,600 di mana saya memberikan satu perkataan bagi setiap huruf atau sesuatu seperti itu. Sejuk. 338 00:24:29,600 --> 00:24:31,900 Jadi itulah panjang rentetan. 339 00:24:33,000 --> 00:24:34,640 Jadi kita kembali kepada Caesar. 340 00:24:34,640 --> 00:24:38,620 Kami mempunyai beberapa alat tentang bagaimana kita melelar atas rentetan, 341 00:24:38,620 --> 00:24:41,250 bagaimana kita mengakses setiap elemen individu. 342 00:24:41,250 --> 00:24:44,720 Jadi sekarang kita boleh mendapatkan kembali kepada program ini. 343 00:24:44,720 --> 00:24:48,650 Seperti yang saya nyatakan sebelum ini, dalam jadual ASCII, rakan anda yang terbaik, 344 00:24:48,650 --> 00:24:52,300 anda akan melihat nombor yang dikaitkan dengan setiap huruf. 345 00:24:52,300 --> 00:24:55,900 Jadi di sini mengatakan plaintext kami adalah saya pening! 346 00:24:55,900 --> 00:25:01,090 Kemudian setiap watak-watak ini akan mempunyai bilangan dan nilai ASCII yang dikaitkan dengannya, 347 00:25:01,090 --> 00:25:04,710 walaupun apostrofe, walaupun ruang, walaupun tanda seru, 348 00:25:04,710 --> 00:25:06,600 jadi anda akan mahu menyimpan bahawa dalam fikiran. 349 00:25:06,600 --> 00:25:12,360 Jadi mengatakan utama kami bahawa pengguna termasuk dalam hujah baris arahan mereka adalah 6. 350 00:25:12,360 --> 00:25:17,770 Ini bermakna bagi huruf pertama, yang saya, yang diwakili sebanyak 73, 351 00:25:17,770 --> 00:25:25,610 anda mahu untuk kembali kepada mereka apa-apa surat diwakili oleh nilai ASCII 73 + 6. 352 00:25:25,610 --> 00:25:29,020 Dalam kes ini, yang akan menjadi 79. 353 00:25:30,840 --> 00:25:35,040 Sekarang kita mahu pergi ke watak seterusnya. 354 00:25:35,040 --> 00:25:40,960 Jadi seterusnya dalam indeks 1 daripada plaintext akan apostrofe. 355 00:25:40,960 --> 00:25:46,780 Tetapi ingat kita hanya mahu menulis dlm kod huruf. 356 00:25:46,780 --> 00:25:50,040 Jadi, kita mahu pastikan bahawa apostrofe sebenarnya tetap sama, 357 00:25:50,040 --> 00:25:54,310 bahawa kita tidak menukar 39-45 apa sahaja. 358 00:25:54,310 --> 00:25:57,150 Kami mahu mengekalkan ia sebagai apostrofe. 359 00:25:57,150 --> 00:26:00,780 Jadi kita mahu ingat hanya menulis dlm kod huruf 360 00:26:00,780 --> 00:26:04,560 kerana kita mahu semua simbol-simbol lain untuk kekal dalam program kami. 361 00:26:04,560 --> 00:26:07,130 Satu lagi perkara yang kita mahu ialah untuk memelihara permodalan. 362 00:26:07,130 --> 00:26:10,250 Jadi, apabila anda mempunyai huruf besar, ia perlu kekal sebagai satu huruf. 363 00:26:10,250 --> 00:26:12,830 Lowercases perlu tinggal sebagai huruf kecil. 364 00:26:13,620 --> 00:26:19,480 Jadi beberapa fungsi yang berguna untuk menjadi mampu untuk berurusan dengan hanya huruf enciphering 365 00:26:19,480 --> 00:26:22,380 dan menyimpan memelihara permodalan perkara 366 00:26:22,380 --> 00:26:25,130 adalah fungsi islower isalpha, isupper,. 367 00:26:25,130 --> 00:26:29,270 Dan sebagainya ini adalah fungsi yang kembali anda nilai Boolean. 368 00:26:29,270 --> 00:26:34,180 Pada asasnya, benar atau palsu. Adakah ini satu huruf besar? Adakah abjad angka ini? 369 00:26:34,180 --> 00:26:37,180 Apakah surat ini, pada asasnya. 370 00:26:37,180 --> 00:26:41,070 Jadi di sini adalah 3 contoh bagaimana anda akan menggunakan fungsi itu. 371 00:26:41,070 --> 00:26:47,060 Pada asasnya, anda boleh menguji sama ada nilai dikembalikan kepada anda oleh fungsi itu adalah benar atau palsu 372 00:26:47,060 --> 00:26:49,400 berdasarkan input yang. 373 00:26:49,400 --> 00:26:54,880 Sama ada melakukan sesuatu yang tidak menulis dlm kod atau Cipher atau pastikan bahawa ia adalah huruf besar, dan lain-lain 374 00:26:54,880 --> 00:27:01,080 [Pelajar] Bolehkah anda hanya menjelaskan mereka lebih sedikit dan bagaimana anda menggunakan mereka? >> Ya, pasti. 375 00:27:01,080 --> 00:27:08,470 Jadi, jika kita melihat kembali, di sini kita mempunyai modal saya, betul-betul? 376 00:27:08,470 --> 00:27:14,550 Jadi kita tahu bahawa saya pergi ke Wahai kerana saya + 6 ialah O. 377 00:27:14,550 --> 00:27:18,740 Tetapi kita mahu pastikan bahawa O akan menjadi modal O. 378 00:27:18,740 --> 00:27:22,940 Jadi, pada asasnya, yang jenis pergi untuk menukar input kami. 379 00:27:22,940 --> 00:27:26,870 Jadi, sama ada ia besar atau tidak akan jenis mengubah cara bahawa kita berurusan dengan ia. 380 00:27:26,870 --> 00:27:32,360 Jadi maka jika kita menggunakan fungsi isupper pada indeks yang tertentu, 381 00:27:32,360 --> 00:27:36,480 jadi isupper ("I"), yang kembali untuk kita benar, supaya kita tahu bahawa ia adalah atas. 382 00:27:36,480 --> 00:27:40,360 Jadi maka berdasarkan itu, kemudian kita akan pergi ke formula 383 00:27:40,360 --> 00:27:42,750 bahawa anda akan menggunakan untuk beralih perkara di Caesar, 384 00:27:42,750 --> 00:27:46,560 demikian maka pada dasarnya, terdapat akan menjadi formula yang sedikit berbeza jika ia adalah huruf besar 385 00:27:46,560 --> 00:27:50,670 berbanding kepada huruf kecil. Masuk akal? 386 00:27:51,020 --> 00:27:52,760 Yeah. Tiada kebimbangan. 387 00:27:54,900 --> 00:27:58,990 Saya bercakap sedikit tentang menambah 6 surat, yang tidak cukup masuk akal 388 00:27:58,990 --> 00:28:05,500 kecuali apabila kita jenis memahami bahawa watak-watak ini 389 00:28:05,500 --> 00:28:08,920 adalah jenis ditukar dengan integer. 390 00:28:08,920 --> 00:28:11,250 Apa yang kita lakukan ialah kita jenis penggunaan pemutus tersirat. 391 00:28:11,250 --> 00:28:18,100 Kami akan pergi ke pemutus sedikit kemudian di mana anda mengambil nilai dan anda menghidupkan ia ke dalam jenis yang berbeza 392 00:28:18,100 --> 00:28:20,440 daripada ia asalnya adalah. 393 00:28:20,440 --> 00:28:25,910 Tetapi dengan pset ini kita akan dapat jenis silih berganti menggunakan watak-watak 394 00:28:25,910 --> 00:28:30,880 dan nilai-nilai yang sama mereka integer. 395 00:28:30,880 --> 00:28:35,140 Jadi jika anda hanya menyarungi watak dengan hanya petikan tunggal, 396 00:28:35,140 --> 00:28:40,390 maka anda akan dapat untuk bekerja dengannya dengan integer, berurusan dengan ia sebagai integer. 397 00:28:40,390 --> 00:28:48,040 Jadi C modal berkaitan kepada 67. F kecil berkaitan hingga 102. 398 00:28:48,040 --> 00:28:51,480 Sekali lagi, jika anda mahu tahu nilai-nilai ini, melihat di meja ASCII anda. 399 00:28:51,480 --> 00:28:56,160 Jadi mari kita pergi ke beberapa contoh bagaimana anda mungkin tidak dapat menolak dan menambah, 400 00:28:56,160 --> 00:29:03,130 bagaimana anda boleh sebenarnya benar-benar bekerja dengan watak-watak ini, gunakan mereka silih berganti. 401 00:29:03,870 --> 00:29:11,350 Saya mengatakan ASCIIMath yang akan mengira penambahan watak integer 402 00:29:11,350 --> 00:29:17,590 dan kemudian memaparkan watak paduan serta nilai ASCII paduan. 403 00:29:17,590 --> 00:29:22,290 Dan sebagainya di sini saya cakapkan - we'll berurusan dengan bahagian ini kemudian - 404 00:29:22,290 --> 00:29:29,100 tetapi pada dasarnya, saya mengatakan bahawa pengguna harus mengatakan ASCIIMath dijalankan bersama-sama dengan kunci, 405 00:29:29,100 --> 00:29:30,880 dan saya mengatakan bahawa kunci yang akan menjadi nombor 406 00:29:30,880 --> 00:29:34,600 yang kita pergi untuk menambah watak ini. 407 00:29:34,600 --> 00:29:38,560 Jadi di sini melihat bahawa sejak saya menuntut kunci, 408 00:29:38,560 --> 00:29:40,590 sejak saya menuntut bahawa mereka sedang memberikan saya 1 perkara, 409 00:29:40,590 --> 00:29:45,600 Saya hanya mahu menerima. / Asciimath dan kunci. 410 00:29:45,600 --> 00:29:49,330 Jadi saya akan menuntut bahawa argc adalah sama dengan 2. 411 00:29:49,330 --> 00:29:54,360 Jika tidak, maka saya akan return 1 dan program akan keluar. 412 00:29:55,070 --> 00:29:58,540 Jadi saya katakan kunci tidak akan menjadi hujah baris arahan pertama, 413 00:29:58,540 --> 00:30:05,080 ia akan menjadi yang kedua, dan seperti yang anda lihat di sini, 414 00:30:05,080 --> 00:30:11,790 Saya akan menjadikan itu ke dalam integer. 415 00:30:15,740 --> 00:30:19,230 Kemudian saya akan menetapkan watak untuk menjadi r. 416 00:30:19,230 --> 00:30:23,970 Perhatikan bahawa jenis daripada Chr ubah adalah sebenarnya integer. 417 00:30:23,970 --> 00:30:30,480 Cara yang saya dapat menggunakan r sebagai integer adalah dengan encasing dengan petikan tunggal. 418 00:30:33,850 --> 00:30:40,560 Jadi kembali pernyataan printf kita di mana kita mempunyai placeholder untuk watak 419 00:30:40,560 --> 00:30:43,590 dan kemudian placeholder untuk integer, 420 00:30:43,590 --> 00:30:49,450 watak diwakili oleh Chr, dan integer adalah kunci. 421 00:30:49,450 --> 00:30:54,320 Dan sebagainya maka kita pergi dalam hasil tambah 2 bersama-sama. 422 00:30:54,320 --> 00:30:58,420 Jadi kita akan menambah r + apa jua kekunci, 423 00:30:58,420 --> 00:31:03,520 dan kemudian kita pergi untuk mencetak hasil daripada itu. 424 00:31:06,210 --> 00:31:14,220 Jadi mari kita membuat asciimath. Ia adalah up to date, jadi mari kita hanya menjalankan asciimath. 425 00:31:14,220 --> 00:31:18,290 Oh, tetapi lihat, ia tidak berbuat apa-apa kerana kita tidak benar-benar memberi kunci. 426 00:31:18,290 --> 00:31:23,850 Jadi, apabila ia hanya kembali 1, fungsi utama kami, ia hanya kembali semula kepada kita. 427 00:31:23,850 --> 00:31:29,250 Jadi kemudian mari kita lulus dalam kunci. Seseorang memberikan saya nombor. >> [Pelajar] 4. 428 00:31:29,250 --> 00:31:30,920 4. Okay. 429 00:31:30,920 --> 00:31:39,280 Jadi r meningkat sebanyak 4 akan memberi kita v, yang sepadan dengan nilai ASCII daripada 118. 430 00:31:39,280 --> 00:31:43,880 Jadi maka ia jenis masuk akal bahawa - 431 00:31:43,880 --> 00:31:51,250 Sebenarnya, saya boleh meminta anda, apa yang anda fikir nilai ASCII r jika r + 4 118? 432 00:31:53,070 --> 00:31:55,470 Kemudian yeah, r ialah 114. 433 00:31:55,470 --> 00:32:03,010 Jadi, jika anda melihat pada jadual ASCII maka, cukup yakin, anda akan melihat r yang diwakili oleh 114. 434 00:32:03,010 --> 00:32:08,610 Jadi sekarang kita tahu bahawa kita boleh menambah integer kepada watak-watak, ini nampaknya agak mudah. 435 00:32:08,610 --> 00:32:12,740 Kami hanya akan untuk melelar rentetan seperti yang kita lihat dalam contoh sebelum. 436 00:32:12,740 --> 00:32:17,170 Kami akan memeriksa jika ia adalah surat. 437 00:32:17,170 --> 00:32:20,420 Jika ia, maka kita akan beralih oleh apa jua kekunci. 438 00:32:20,420 --> 00:32:23,650 Agak mudah, kecuali apabila anda mendapat seperti ini, 439 00:32:23,650 --> 00:32:32,140 anda lihat bahawa z, diwakili sebanyak 122, maka akan memberi anda watak yang berbeza. 440 00:32:32,140 --> 00:32:37,770 Kami sebenarnya mahu tinggal dalam abjad kita, kan? 441 00:32:37,770 --> 00:32:43,180 Jadi, kita perlu memikirkan beberapa cara jenis melingkari. 442 00:32:43,180 --> 00:32:47,190 Apabila anda mencapai Zed dan anda mahu meningkatkan dengan bilangan tertentu, 443 00:32:47,190 --> 00:32:51,230 anda tidak mahu pergi ke luar seksyen abjad ASCII; 444 00:32:51,230 --> 00:32:54,140 anda mahu untuk membalut kembali sepanjang jalan kepada A. 445 00:32:54,140 --> 00:32:58,550 Tetapi perlu diingat anda masih mengekalkan kes itu. 446 00:32:58,550 --> 00:33:00,980 Jadi, mengetahui bahawa huruf tidak boleh menjadi simbol 447 00:33:00,980 --> 00:33:05,290 seperti simbol yang tidak akan berubah serta. 448 00:33:05,290 --> 00:33:08,170 Dalam terakhir pset anda pasti tidak perlu, 449 00:33:08,170 --> 00:33:14,310 tetapi pilihan adalah untuk melaksanakan pset tamak anda dengan menggunakan fungsi modulus. 450 00:33:14,310 --> 00:33:17,230 Tetapi sekarang kita sebenarnya akan perlu menggunakan modulus, 451 00:33:17,230 --> 00:33:19,900 jadi mari kita hanya pergi lebih sedikit ini sedikit. 452 00:33:19,900 --> 00:33:26,920 Pada asasnya, apabila anda mempunyai modulo x y, yang memberikan anda baki x dibahagikan oleh y. 453 00:33:26,920 --> 00:33:30,930 Berikut adalah beberapa contoh di sini. Kami mempunyai 27% 15. 454 00:33:30,930 --> 00:33:36,200 Pada asasnya, apabila anda tolak 15 dari 27 seberapa banyak kali yang mungkin tanpa mendapat negatif 455 00:33:36,200 --> 00:33:39,060 maka anda mendapat 12 kiri atas. 456 00:33:39,060 --> 00:33:44,650 Jadi yang semacam dalam konteks matematik, tetapi bagaimana kita sebenarnya boleh menggunakan ini? 457 00:33:44,650 --> 00:33:47,100 Ia akan menjadi berguna untuk wrapover kami. 458 00:33:47,100 --> 00:33:55,420 Untuk ini, mari kita hanya mengatakan saya meminta anda semua untuk membahagikan kepada 3 kumpulan. 459 00:33:55,420 --> 00:33:58,010 Kadang-kadang anda melakukan ini dalam kumpulan dan sesuatu seperti itu. 460 00:33:58,010 --> 00:34:01,320 Katakanlah saya berkata, "Baiklah, saya mahu anda semua untuk dibahagikan kepada 3." 461 00:34:01,320 --> 00:34:04,240 Bagaimana anda boleh berbuat demikian? 462 00:34:04,240 --> 00:34:06,810 [Sambutan pelajar didengar] Yeah, tepat. Count dimatikan. Okay. 463 00:34:06,810 --> 00:34:10,260 Mari kita sebenarnya berbuat demikian. Adakah anda ingin memulakan? 464 00:34:10,260 --> 00:34:13,810 [Pelajar mengira off] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Tetapi ingat ... >> [Pelajar] Oh, maaf. 466 00:34:16,620 --> 00:34:18,730 Itulah titik yang benar-benar baik. 467 00:34:18,730 --> 00:34:24,130 Anda berkata 4, tetapi kita benar-benar mahu anda untuk mengatakan 1 kerana kita hanya mahu 3 kumpulan. 468 00:34:24,130 --> 00:34:30,159 Jadi kemudian, bagaimana - Tidak, itulah satu contoh yang benar-benar baik kerana maka bagaimana anda mungkin berkata 1? 469 00:34:30,159 --> 00:34:33,370 Apakah hubungan antara 4 dan 1? 470 00:34:33,370 --> 00:34:36,760 Nah, 4 arena 3 adalah 1. 471 00:34:36,760 --> 00:34:41,460 Jadi, jika anda meneruskan, anda akan menjadi 2. 472 00:34:41,460 --> 00:34:44,540 Jadi kita mempunyai 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Sekali lagi, anda sebenarnya orang 5. Bagaimana anda tahu untuk mengatakan 2 bukannya 5? 474 00:34:49,420 --> 00:34:53,760 Kamu katakan 5 arena 3 adalah 2. 475 00:34:53,760 --> 00:34:59,100 Saya mahu melihat berapa banyak kumpulan 3 ditinggalkan, maka perintah yang am I. 476 00:34:59,100 --> 00:35:02,860 Dan demikian maka jika kita terus bersama-sama seluruh bilik, 477 00:35:02,860 --> 00:35:07,760 maka kita akan melihat bahawa kita sentiasa sebenarnya memohon fungsi arena kepada diri kita sendiri 478 00:35:07,760 --> 00:35:09,990 jenis mengira off. 479 00:35:09,990 --> 00:35:14,490 Itulah sejenis lebih contoh ketara bagaimana anda mungkin menggunakan modulo 480 00:35:14,490 --> 00:35:17,960 kerana saya pasti kebanyakan kita mungkin telah melalui proses yang 481 00:35:17,960 --> 00:35:19,630 mana kita telah mengira-nunjuk. 482 00:35:19,630 --> 00:35:21,840 Sebarang pertanyaan pada modulo? 483 00:35:21,840 --> 00:35:25,360 Ia akan menjadi cukup penting untuk memahami konsep ini, 484 00:35:25,360 --> 00:35:28,640 jadi saya mahu pastikan anda semua memahami. 485 00:35:28,640 --> 00:35:34,660 [Pelajar] Jika terdapat baki tidak, adakah ia memberi anda jumlah sebenar? 486 00:35:34,660 --> 00:35:40,430 Jika salah satu daripada 3 pertama mereka telah dilakukan, ia akan memberikan mereka apa yang mereka sebenarnya, 487 00:35:40,430 --> 00:35:43,310 atau ia akan berikan kepada mereka [didengar] >> Itulah satu soalan yang baik. 488 00:35:43,310 --> 00:35:48,750 Apabila tiada baki untuk modulo - jadi katakan anda mempunyai 6 arena 3 - 489 00:35:48,750 --> 00:35:52,340 yang sebenarnya memberikan anda kembali 0. 490 00:35:53,670 --> 00:35:57,290 Kami akan bercakap tentang bahawa sedikit kemudian. 491 00:35:58,810 --> 00:36:07,720 Oh yeah, misalnya, orang ke-3 - 3 arena 3 sebenarnya 0 tetapi katanya 3. 492 00:36:07,720 --> 00:36:14,900 Jadi itulah jenis seperti tangkapan dalaman, misalnya, 493 00:36:14,900 --> 00:36:17,620 seperti okay, jika arena 0, maka saya akan menjadi orang ke-3. 494 00:36:17,620 --> 00:36:22,740 Tetapi kita akan masuk ke dalam jenis bagaimana kita mungkin mahu untuk berurusan dengan apa yang 0 adalah kemudian. 495 00:36:22,740 --> 00:36:32,750 Jadi sekarang kita entah bagaimana mempunyai cara pemetaan Zed kepada surat yang betul. 496 00:36:32,750 --> 00:36:34,920 Jadi sekarang kita telah melalui contoh-contoh ini, 497 00:36:34,920 --> 00:36:37,880 kita jenis lihat bagaimana Caesar mungkin bekerja. 498 00:36:37,880 --> 00:36:42,640 Anda lihat 2 huruf dan kemudian anda melihat mereka beralih. 499 00:36:42,640 --> 00:36:44,430 Jadi mari kita cuba dan menyatakan bahawa dari segi formula. 500 00:36:44,430 --> 00:36:46,940 Formula ini sebenarnya diberikan kepada anda dalam spesifikasi, 501 00:36:46,940 --> 00:36:52,070 tetapi mari kita jenis melihat melalui apa yang setiap pembolehubah bermakna. 502 00:36:52,070 --> 00:36:55,000 Keputusan akhir kami akan menjadi tulisan rahsia. 503 00:36:55,000 --> 00:36:58,300 Jadi ini mengatakan bahawa watak engan tulisan rahsia 504 00:36:58,300 --> 00:37:02,500 akan sesuai dengan watak i-plaintext. 505 00:37:02,500 --> 00:37:08,130 Yang masuk akal kerana kita mahu untuk sentiasa beratur perkara-perkara ini sehingga. 506 00:37:08,130 --> 00:37:13,480 Jadi ia akan menjadi watak engan tulisan rahsia ditambah k, yang merupakan kunci kita - 507 00:37:13,480 --> 00:37:17,230 yang masuk akal - dan kemudian kita mempunyai ini arena 26. 508 00:37:17,230 --> 00:37:19,860 Ingat kembali apabila kita mempunyai Zed 509 00:37:19,860 --> 00:37:24,190 kita tidak mahu masuk ke dalam watak, jadi kita mahu MOD 510 00:37:24,190 --> 00:37:26,540 dan jenis balut seluruh abjad. 511 00:37:26,540 --> 00:37:33,430 Selepas Zed anda akan pergi ke, b, c, d, sehingga anda mendapat nombor yang betul. 512 00:37:33,430 --> 00:37:44,690 Maka kita tahu bahawa Zed, jika + 6, akan memberi kita f kerana selepas Zed datang a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Jadi mari kita ingat kita tahu dengan pasti bahawa Zed + 6 akan memberikan kita f. 514 00:37:52,530 --> 00:38:03,530 Dalam nilai ASCII, z ialah 122 dan f ialah 102. 515 00:38:03,530 --> 00:38:10,570 Jadi kita perlu mencari beberapa cara membuat formula Caesar kami memberi kita 102 516 00:38:10,570 --> 00:38:13,590 selepas mengambil 122. 517 00:38:13,590 --> 00:38:19,550 Jadi, jika kita hanya menggunakan formula ini,% ('z' + 6) 26, yang sebenarnya memberikan anda 24 518 00:38:19,550 --> 00:38:25,980 kerana 122 + 6 128; 128% 26 memberikan anda 24 selebihnya. 519 00:38:25,980 --> 00:38:29,140 Tetapi itu tidak benar-benar bermakna f. Itu pasti tidak 102. 520 00:38:29,140 --> 00:38:33,590 Itulah juga tidak surat 6 dalam abjad. 521 00:38:33,590 --> 00:38:41,550 Jadi jelas, kita perlu mempunyai beberapa cara Tweaker ini sedikit. 522 00:38:42,970 --> 00:38:51,340 Dari segi abjad biasa, kita tahu bahawa z ialah surat 26 dan f ialah 6. 523 00:38:51,340 --> 00:38:55,460 Tetapi kita berada dalam bidang sains komputer, jadi kita akan indeks pada 0. 524 00:38:55,460 --> 00:39:00,690 Demikian maka bukannya z menjadi nombor 26, kita akan mengatakan nombor 25 525 00:39:00,690 --> 00:39:02,630 kerana adalah 0. 526 00:39:02,630 --> 00:39:04,770 Jadi sekarang mari kita memohon formula ini. 527 00:39:04,770 --> 00:39:11,710 Kami mempunyai z diwakili oleh 25 + 6, yang memberikan anda 31. 528 00:39:11,710 --> 00:39:15,790 Dan 31 arena 26 memberikan anda 5 sebagai baki. 529 00:39:15,790 --> 00:39:20,500 Yang sempurna kerana kita tahu bahawa f adalah surat 5 dalam abjad. 530 00:39:20,500 --> 00:39:26,400 Tetapi ia masih tidak f, betul-betul? Ia masih tidak 102. 531 00:39:26,400 --> 00:39:32,730 Jadi maka bagi pset ini, cabaran akan cuba untuk mengetahui hubungan 532 00:39:32,730 --> 00:39:36,910 antara menukar antara nilai-nilai ASCII dan indeks abjad. 533 00:39:36,910 --> 00:39:40,280 Pada asasnya, apa yang anda akan mahu lakukan, anda mahu bermula dengan nilai ASCII, 534 00:39:40,280 --> 00:39:45,390 tetapi kemudian anda mahu untuk entah bagaimana menterjemahkan ke dalam indeks abjad 535 00:39:45,390 --> 00:39:52,610 kemudian mengira apa surat ia harus - pada dasarnya, apa indeks abjad adalah 536 00:39:52,610 --> 00:39:57,660 watak cipher - kemudian menterjemahkan kembali ke nilai ASCII. 537 00:39:57,660 --> 00:40:04,870 Jadi jika anda cambuk keluar jadual ASCII anda, kemudian cuba dan mencari hubungan antara, katakan, 102 dan 5 538 00:40:04,870 --> 00:40:10,440 atau 122 dan 25. 539 00:40:12,140 --> 00:40:15,690 Kami telah mendapat kunci kami dari hujah-hujah baris arahan, kita telah mendapat plaintext, 540 00:40:15,690 --> 00:40:17,520 kita telah enciphered. 541 00:40:17,520 --> 00:40:19,820 Sekarang semua kita telah meninggalkan lakukan adalah mencetaknya. 542 00:40:19,820 --> 00:40:22,040 Kita boleh melakukan ini beberapa cara yang berbeza. 543 00:40:22,040 --> 00:40:24,570 Apa yang kita boleh lakukan sebenarnya mencetak seperti yang kita pergi bersama-sama. 544 00:40:24,570 --> 00:40:28,250 Seperti yang kita melelar lebih watak-watak dalam string, 545 00:40:28,250 --> 00:40:31,660 kita hanya boleh mencetak kanan kemudian apabila kita mengira. 546 00:40:31,660 --> 00:40:36,030 Selain itu, anda juga boleh menyimpan dalam pelbagai dan mempunyai pelbagai watak 547 00:40:36,030 --> 00:40:39,280 dan pada akhir melelar seluruh tatasusunan yang dan mencetak keluar. 548 00:40:39,280 --> 00:40:40,980 Jadi, anda mempunyai beberapa pilihan untuk itu. 549 00:40:40,980 --> 00:40:47,280 Dan ingat bahawa% c akan menjadi placeholder untuk mencetak watak. 550 00:40:47,280 --> 00:40:50,420 Jadi ada kita mempunyai Caesar, dan kini kita beralih kepada Vigenere, 551 00:40:50,420 --> 00:40:57,580 yang sangat serupa dengan Caesar tetapi hanya sedikit lebih kompleks. 552 00:40:57,580 --> 00:41:03,310 Jadi pada dasarnya dengan Vigenere anda akan lulus dalam kata kunci. 553 00:41:03,310 --> 00:41:06,510 Jadi, bukannya nombor, anda akan mempunyai rentetan, 554 00:41:06,510 --> 00:41:09,200 dan supaya akan bertindak sebagai kata kunci anda. 555 00:41:09,200 --> 00:41:14,440 Kemudian, seperti biasa, anda akan untuk mendapatkan segera bagi rentetan daripada pengguna 556 00:41:14,440 --> 00:41:19,050 dan kemudian menulis dlm kod dan kemudian memberikan mereka kembali tulisan rahsia. 557 00:41:19,050 --> 00:41:24,650 Jadi seperti yang saya berkata, ia adalah sangat serupa Caesar, kecuali bukannya beralih dengan bilangan tertentu, 558 00:41:24,650 --> 00:41:30,620 nombor sebenarnya akan mengubah setiap masa dari watak watak. 559 00:41:30,620 --> 00:41:34,890 Untuk mewakili bahawa bilangan sebenar beralih, ia diwakili oleh huruf keyboard. 560 00:41:34,890 --> 00:41:43,150 Jadi, jika anda masukkan ke dalam peralihan, misalnya, maka yang akan sesuai dengan peralihan 0. 561 00:41:43,150 --> 00:41:45,900 Jadi ia sekali lagi kembali kepada indeks abjad. 562 00:41:45,900 --> 00:41:49,100 Apa yang mungkin berguna jika anda melihat bahawa kita sebenarnya berurusan dengan nilai ASCII 563 00:41:49,100 --> 00:41:51,790 serta huruf, serta indeks abjad, 564 00:41:51,790 --> 00:41:58,020 mungkin mencari atau membuat jadual anda sendiri ASCII yang menunjukkan indeks abjad 0 hingga 25, 565 00:41:58,020 --> 00:42:03,750 melalui z, dan nilai ASCII supaya anda jenis boleh melihat hubungan 566 00:42:03,750 --> 00:42:07,020 dan lakarkan keluar dan cuba mencari beberapa corak. 567 00:42:07,020 --> 00:42:11,010 Begitu juga, jika anda beralih pada contoh tertentu oleh f - 568 00:42:11,010 --> 00:42:21,110 dan ini adalah sama ada f huruf kecil atau huruf besar - maka yang akan sesuai hingga 5. 569 00:42:21,110 --> 00:42:24,180 Adakah kita yang baik setakat ini? 570 00:42:25,770 --> 00:42:30,050 Formula untuk Vigenere adalah sedikit berbeza. 571 00:42:30,050 --> 00:42:32,960 Pada asasnya, anda akan melihat bahawa ia hanya seperti Caesar, 572 00:42:32,960 --> 00:42:37,390 kecuali bukan hanya k kita mempunyai k index j. 573 00:42:37,390 --> 00:42:44,810 Notis bahawa kita tidak menggunakan i kerana asasnya, panjang kata kunci 574 00:42:44,810 --> 00:42:49,850 tidak semestinya panjang tulisan rahsia kami. 575 00:42:49,850 --> 00:42:56,130 Ini akan menjadi lebih jelas sedikit apabila kita lihat satu contoh bahawa saya mempunyai sedikit kemudian. 576 00:42:56,130 --> 00:43:03,160 Pada asasnya, jika anda menjalankan program anda dengan kata kunci ohai, 577 00:43:03,160 --> 00:43:08,560 maka itu bermakna bahawa setiap kali, ohai akan menjadi anjakan anda. 578 00:43:08,560 --> 00:43:11,060 Jadi bergantung kepada apa kedudukan anda dalam kata kunci anda, 579 00:43:11,060 --> 00:43:15,800 anda akan beralih watak tulisan rahsia tertentu anda dengan jumlah itu. 580 00:43:15,800 --> 00:43:19,630 Sekali lagi, seperti Caesar, kita mahu memastikan bahawa kita memelihara permodalan perkara 581 00:43:19,630 --> 00:43:22,900 dan kita menulis dlm kod huruf sahaja, tidak aksara atau ruang. 582 00:43:22,900 --> 00:43:26,330 Jadi melihat kembali kepada Caesar pada fungsi yang anda mungkin telah digunakan, 583 00:43:26,330 --> 00:43:32,570 cara yang anda memutuskan bagaimana untuk beralih perkara, dan memohon supaya program anda di sini. 584 00:43:32,570 --> 00:43:35,260 Jadi mari peta ini keluar. 585 00:43:35,260 --> 00:43:39,680 Kami mempunyai plaintext bahawa kita telah mendapat daripada pengguna GetString 586 00:43:39,680 --> 00:43:44,090 berkata ... adalah CS50! 587 00:43:44,090 --> 00:43:47,090 Kemudian kita mempunyai kata kunci ohai. 588 00:43:47,090 --> 00:43:50,930 4 aksara pertama adalah agak mudah. 589 00:43:50,930 --> 00:43:55,580 Kita tahu bahawa T akan beralih oleh o, 590 00:43:55,580 --> 00:44:01,990 maka h akan beralih oleh h, i akan beralih oleh. 591 00:44:01,990 --> 00:44:04,610 Di sini anda melihat bahawa mewakili 0, 592 00:44:04,610 --> 00:44:11,940 demikian maka nilai akhir adalah sebenarnya hanya surat yang sama seperti sebelum ini. 593 00:44:11,940 --> 00:44:15,250 Maka s beralih oleh i. 594 00:44:15,250 --> 00:44:19,370 Tetapi kemudian anda mempunyai tempoh ini di sini. 595 00:44:19,370 --> 00:44:25,960 Kita tidak mahu untuk menulis dlm kod, jadi maka kita tidak mengubahnya dengan apa-apa 596 00:44:25,960 --> 00:44:31,280 dan hanya mencetak tempoh tidak berubah. 597 00:44:31,280 --> 00:44:38,020 [Pelajar] saya tidak faham bagaimana anda tahu bahawa ini beralih oleh - Jika anda pula - >> Oh, maaf. 598 00:44:38,020 --> 00:44:41,620 Di atas sini anda melihat bahawa baris arahan hujah ohai sini, 599 00:44:41,620 --> 00:44:43,740 yang akan menjadi kata kunci. 600 00:44:43,740 --> 00:44:49,550 Dan sebagainya pada dasarnya, anda sedang berbasikal ke atas watak-watak dalam kata kunci. 601 00:44:49,550 --> 00:44:52,020 [Pelajar] Jadi o akan beralih sama - 602 00:44:52,020 --> 00:44:56,260 Jadi o sepadan dengan bilangan tertentu dalam abjad. 603 00:44:56,260 --> 00:44:58,400 [Pelajar] Hak. Tetapi jika anda mendapat bahagian CS50 dari? 604 00:44:58,400 --> 00:45:02,540 Oh. Itulah dalam GetString mana anda seperti, "Berikan saya rentetan untuk mengekod." 605 00:45:02,540 --> 00:45:07,510 [Pelajar] Mereka akan memberikan anda bahawa hujah untuk beralih oleh 606 00:45:07,510 --> 00:45:09,380 dan kemudian anda akan meminta untuk rentetan pertama anda. >> Yeah. 607 00:45:09,380 --> 00:45:12,440 Jadi apabila mereka menjalankan program ini, mereka pergi untuk memasukkan kata kunci 608 00:45:12,440 --> 00:45:14,740 dalam hujah baris arahan mereka apabila mereka jalankan ia. 609 00:45:14,740 --> 00:45:19,740 Kemudian apabila anda diperiksa bahawa mereka telah benar-benar memberikan anda 1 dan tidak lebih, tidak kurang, 610 00:45:19,740 --> 00:45:23,750 maka anda akan meminta mereka untuk rentetan, berkata, "Berikan saya rentetan." 611 00:45:23,750 --> 00:45:27,630 Supaya di mana dalam kes ini mereka telah diberikan anda ini ... adalah CS50! 612 00:45:27,630 --> 00:45:32,090 Jadi maka anda akan menggunakan bahawa dan menggunakan ohai dan melelar lebih. 613 00:45:32,090 --> 00:45:38,200 Perhatikan bahawa di sini kita dilangkau lebih menyulitkan tempoh, 614 00:45:38,200 --> 00:45:51,660 tetapi dari segi kedudukan kami untuk ohai, satu depan kita digunakan o. 615 00:45:51,660 --> 00:45:54,990 Dalam kes ini, ia agak sukar untuk melihat kerana itulah 4, 616 00:45:54,990 --> 00:45:57,710 jadi mari kita terus sedikit. Hanya melekat dengan saya di sini. 617 00:45:57,710 --> 00:46:02,960 Kemudian kita mempunyai i dan s, yang kemudiannya diterjemahkan oleh o dan h masing-masing. 618 00:46:02,960 --> 00:46:09,370 Kemudian kita mempunyai ruang, dan sebagainya maka kita tahu bahawa kita tidak akan menulis dlm kod ruang. 619 00:46:09,370 --> 00:46:18,930 Tetapi notis bahawa bukannya pergi ke tempat ini di sini, 620 00:46:18,930 --> 00:46:28,330 kita menyulitkan oleh - Saya tidak tahu jika anda dapat melihat bahawa di sini. 621 00:46:28,330 --> 00:46:33,710 Jadi ia tidak suka anda sebenarnya telah ditetapkan, katakan, o pergi sini, h pergi sini, 622 00:46:33,710 --> 00:46:39,200 pergi sini, i pergi sini, o, h, i, o, h, i. Anda tidak berbuat demikian. 623 00:46:39,200 --> 00:46:43,760 Anda hanya beralih kedudukan anda dalam kata kunci 624 00:46:43,760 --> 00:46:51,020 apabila anda tahu bahawa anda sebenarnya akan menyulitkan surat sebenar. 625 00:46:51,020 --> 00:46:53,920 Adakah yang jenis masuk akal? 626 00:46:53,920 --> 00:46:55,800 Okay. 627 00:46:56,490 --> 00:46:58,500 Jadi hanya beberapa peringatan. 628 00:46:58,500 --> 00:47:03,760 Anda ingin memastikan bahawa anda hanya mara ke huruf seterusnya kata kunci anda 629 00:47:03,760 --> 00:47:06,390 jika watak dalam plaintext anda adalah surat. 630 00:47:06,390 --> 00:47:09,120 Jadi mengatakan kita berada di o. 631 00:47:09,120 --> 00:47:19,310 Kami dapati bahawa watak seterusnya, indeks i plaintext itu, adalah nombor, misalnya. 632 00:47:19,310 --> 00:47:31,630 Kemudian kita tidak memajukan j, indeks untuk kata kunci kita, sehingga kita mencapai surat lain. 633 00:47:31,630 --> 00:47:36,230 Sekali lagi, anda juga ingin memastikan bahawa anda Sampul permulaan kata kunci 634 00:47:36,230 --> 00:47:37,770 apabila anda berada di akhir itu. 635 00:47:37,770 --> 00:47:42,030 Jika anda lihat di sini kita berada di i, yang seterusnya mempunyai untuk menjadi o. 636 00:47:42,030 --> 00:47:47,690 Jadi anda mahu mencari beberapa cara yang dapat Sampul permulaan kata kunci anda 637 00:47:47,690 --> 00:47:49,470 setiap kali anda mencapai akhir. 638 00:47:49,470 --> 00:47:55,040 Dan sebagainya lagi, apa jenis pengendali adalah berguna dalam kes itu untuk membungkus sekitar? 639 00:47:56,630 --> 00:47:59,840 Seperti dalam pengiraan off contoh. 640 00:47:59,840 --> 00:48:03,710 [Pelajar] Tanda peratus. >> Yeah, tanda peratus, yang merupakan modulo. 641 00:48:03,710 --> 00:48:11,250 Jadi modulo akan datang dalam berguna di sini apabila anda mahu untuk membalut indeks dalam ohai anda. 642 00:48:11,250 --> 00:48:17,700 Dan hanya petunjuk cepat: Cuba untuk berfikir membungkus lebih sedikit kata kunci seperti kira mengira, 643 00:48:17,700 --> 00:48:23,590 di mana jika terdapat 3 kumpulan, orang ke-4, 644 00:48:23,590 --> 00:48:30,610 bilangan mereka bahawa mereka berkata adalah 4 arena 3, yang adalah 1. 645 00:48:30,610 --> 00:48:32,880 Jadi, cuba dan memikirkan ia cara itu. 646 00:48:34,770 --> 00:48:42,740 Seperti yang anda lihat dalam formula, di mana sahaja anda mempunyai ci dan kemudian pi tetapi kemudian kj, 647 00:48:42,740 --> 00:48:44,700 anda ingin memastikan bahawa anda menjejaki mereka. 648 00:48:44,700 --> 00:48:47,580 Anda tidak perlu untuk memanggil ia i, anda tidak perlu untuk memanggil ia j, 649 00:48:47,580 --> 00:48:53,270 tetapi anda ingin memastikan bahawa anda menjejaki kedudukan bahawa anda di dalam plaintext anda 650 00:48:53,270 --> 00:48:55,790 serta kedudukan yang anda berada di dalam kata kunci anda 651 00:48:55,790 --> 00:48:59,840 kerana mereka tidak semestinya akan menjadi sama. 652 00:48:59,840 --> 00:49:06,400 Bukan sahaja kata kunci - ia boleh menjadi panjang yang benar-benar berbeza daripada plaintext anda. 653 00:49:06,400 --> 00:49:09,140 Juga, plaintext anda, terdapat nombor dan aksara, 654 00:49:09,140 --> 00:49:14,450 jadi ia tidak akan sempurna perlawanan sehingga bersama-sama. Ya. 655 00:49:14,450 --> 00:49:19,280 [Pelajar] Adakah terdapat fungsi untuk menukar huruf? 656 00:49:19,280 --> 00:49:24,530 Anda boleh menukar kepada modal A? >> Ya, terdapat pasti adalah. 657 00:49:24,530 --> 00:49:27,890 Anda boleh menyemak - Saya percaya toupper itu, semua perkataan 1. 658 00:49:30,650 --> 00:49:36,310 Tetapi apabila anda cuba untuk cipher perkara dan memelihara teks, 659 00:49:36,310 --> 00:49:39,350 ia adalah yang terbaik pada asasnya mempunyai kes berasingan. 660 00:49:39,350 --> 00:49:42,040 Jika ia adalah huruf besar, maka anda mahu beralih dengan ini 661 00:49:42,040 --> 00:49:46,460 kerana dalam formula anda, apabila anda melihat kembali bagaimana kita perlu jenis pergi 662 00:49:46,460 --> 00:49:50,900 silih berganti antara cara ASCII mewakili nombor 663 00:49:50,900 --> 00:49:55,020 dan indeks abjad sebenar, kita mahu memastikan 664 00:49:55,020 --> 00:50:01,850 ada akan menjadi beberapa jenis corak yang anda akan gunakan. 665 00:50:01,850 --> 00:50:04,580 Satu lagi nota pada corak, sebenarnya. 666 00:50:04,580 --> 00:50:07,250 Anda akan pasti akan berurusan dengan nombor. 667 00:50:07,250 --> 00:50:11,280 Cuba untuk tidak menggunakan nombor sihir, yang merupakan contoh gaya. 668 00:50:11,280 --> 00:50:18,470 Jadi katakan anda mahu setiap sesuatu anjakan masa dengan suka - 669 00:50:18,470 --> 00:50:22,400 Okay, jadi petunjuk, spoiler lain adalah apabila anda akan beralih sesuatu 670 00:50:22,400 --> 00:50:26,310 oleh jumlah tertentu, cuba untuk tidak mewakili bahawa oleh bilangan sebenar 671 00:50:26,310 --> 00:50:32,810 tetapi cuba dan lihat jika anda boleh menggunakan nilai ASCII, yang jenis akan lebih masuk akal. 672 00:50:32,810 --> 00:50:35,470 Satu lagi nota: Kerana kita sedang berurusan dengan formula, 673 00:50:35,470 --> 00:50:41,200 walaupun TF anda jenis akan tahu apa corak yang anda mungkin menggunakan, 674 00:50:41,200 --> 00:50:44,430 terbaik dalam apa komen anda menjelaskan logik, seperti, 675 00:50:44,430 --> 00:50:51,880 "Saya menggunakan corak ini kerana ..." dan jenis menjelaskan corak ringkas dalam komen anda. 676 00:50:54,090 --> 00:50:58,990 [Ini adalah Walkthrough 2] Jika tidak ada apa-apa soalan lain, maka saya hanya akan tinggal di sini untuk sedikit. 677 00:50:58,990 --> 00:51:04,370 Nasib baik dengan 2 pset anda: Crypto dan terima kasih kerana datang. 678 00:51:06,070 --> 00:51:08,620 [Pelajar] Terima kasih. Terima kasih. >> 679 00:51:09,220 --> 00:51:10,800 [Media Offline intro]