JavaRush /Blog Jawa /Random-JV /Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6)
Masha
tingkat

Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6)

Diterbitake ing grup
tugas cs50 kanggo kuliah 5 lan 6 Kuliah CS50 punika: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngcs50.html . Materi iki ngemot 3 tugas, informasi teoritis lan pandhuan kanggo tumindak.

gol

• Bukak luwih jero menyang fungsi lan perpustakaan • Sinau karo kriptografi, gunakake sawetara cipher sing prasaja

Bahan tambahan

https://reference.cs50.net/ - panjelasan fungsi perpustakaan digunakake sak latihan. Ing basa Inggris. http://computer.howstuffworks.com/c.htm kaca 11 – 14 lan 39

Persiapan

Mlebu menyang cs50.io update50 kanggo mesthekake yen versi ruang kerja sampeyan paling anyar. Yen sampeyan ora sengaja nutup jendhela terminal, pindhah menyang menu View lan priksa manawa ana tandha mriksa ing jejere item Console (priksa yen ora). Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 1 Klik ing (+), ing jero bunder ijo ing pigura jendhela terminal, pilih New Terminal . Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 2 Nggawe direktori kerja: mkdir ~/workspace/pset2 Elinga yen ana spasi ing antarane mkdir lan ~/workspace/pset2 . Kanggo rekap, ~ tegese direktori root, ~/workspace minangka folder sing diarani workspace ing direktori root, ~/workspace/pset2 yaiku direktori sing diarani pset2 inside ~/workspace . Saiki mbukak: cd ~/workspace/pset2 kanggo ngganti menyang direktori anyar. Baris printah katon kaya iki: username:~/workspace/pset2 $ Yen ana sing salah, baleni langkah kasebut. Sampeyan uga bisa nelpon printah history kanggo ndeleng sawetara printah pungkasan ing urutan kronologis. Sampeyan uga bisa nyelehake kursor ing baris printah lan pencet panah munggah ing keyboard kanggo ndeleng kabeh printah ing urutan saka pungkasan ngetik menyang pisanan. Nggunakake tombol mudhun sampeyan bisa bali. Miturut cara, tinimbang ngetik printah sing padha saben wektu, sampeyan bisa nggulung printah sing wis diketik lan nglakokake maneh kanthi mencet Enter. Sampeyan bisa uga wis ngerteni manawa David nindakake iki ing ceramahe. Tugas minggu kapindho kudu disimpen ing pset2 .

Tugas 0. Initialization

Ayo katon luwih cetha ing garis. Ing file initials.c , tulis program sing njaluk jeneng pangguna (nggunakake fungsi GetString kita entuk jeneng minangka senar) banjur nampilake huruf pisanan saka jeneng ngarep (utawa jeneng) lan jeneng mburi ing huruf gedhe tanpa spasi, wektu utawa karakter liyane, mung karo feed baris ( \n ). Kita nganggep manawa pangguna mung ngetik huruf (huruf cilik utawa gedhe, utawa loro-lorone) ditambah siji spasi ing antarane tembung. Coba wong lanang sing jenenge Joseph Gordon-Levitt, Conan O'Brien, utawa David J. Malan ora bakal nggunakake program kasebut. Kanggo mriksa operasi bener saka program, nelpon check50: Apa sampeyan pengin muter karo implementasine saka program disiapake dening Staff CS50? Ketik baris: username:~/workspace/pset2 $ ./initials Zamyla Chan ZC username:~/workspace/pset2 $ ./initials robert thomas bowden RTBcheck50 2015.fall.pset2.initials initials.c~cs50/pset2/initials
Kriptografi
Kriptografi, ilmu enkripsi lan deciphering informasi ... Nyatane, pesen sing dienkripsi wis ana wiwit jaman kuna, lan digunakake dening tentara kanggo ngirim pesen rahasia. Saiki, sandhi sampeyan ing Facebook lan jaringan liyane disimpen ing wangun ndhelik.

Tugas 1. Salam, Kaisar!

Informasi teoritis
Kita bakal nyinaoni salah sawijining cipher sing paling gampang - cipher Caesar, dijenengi miturut kaisar Romawi. Ing cipher iki, saben aksara saka teks diganti dening liyane, kang nomer tetep aksara ngisor ing alfabet. Jumlah huruf sing tetep iki diarani kunci . Dadi, tombol 1 ngowahi huruf Latin C dadi huruf D, lan Z liwat siklus dadi A. Yen kuncine 3, banjur huruf C bakal berubah dadi F, lan Z dadi C. Conto: kita nggunakake cipher Caesar karo kunci 5 ing tembung kucing. c -> h a -> f t -> y Caesar (cat, 5) = hfy Key = 7, tembung = komputer c->j o->v m->t p->w u->b t->a e->l r->y Caesar(computer,7) = jvtwbaly Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 3 The Caesar cipher punika prasaja, nanging, sayangé, ora bisa dipercaya (iki iku interconnected!): kanggo aksara Inggris ana mung 25 opsi enkripsi, iku gampang kanggo pindhah liwat kabeh opsi malah tanpa komputer. Nanging, cipher Caesar asring digunakake minangka langkah ing cipher liyane, kayata cipher Vigenère (liyane ing paragraf sabanjure). Ayo "matematisake" cipher Caesar. Ayo nuduhke plainteks kanthi huruf p, pi minangka huruf ing teks p sing ana ing posisi nomer i. Ayo diarani huruf kunci rahasia k, c minangka ciphertext, lan ci minangka huruf ing ciphertext sing ana ing posisi i. Banjur sampeyan bisa ngetung saben huruf cipher nggunakake rumus: ci = (pi + k) % 26 Njaluk kanggo formalization iki, ngijini sampeyan kanggo program algoritma lan ndudohake makna cipher kanthi akurat lan concisely. Yen tombol k = 13 lan teks asli p yaiku "Pasthekake ngombe Ovaltine!", Iki cipher sing kita entuk: Or fher gb qevax lbhe Binygvar! Elinga yen O (huruf pisanan ing ciphertext) dipindhah 13 posisi saka huruf B (ing aksara pisanan ing teks asli). Bab sing padha karo huruf r (huruf kapindho ing enkripsi) dipindhah 13 huruf saka e (huruf kapindho ing asli). Huruf katelu ing enkripsi, f, dipindhah dening 13 aksara saka s (telu ing asli), kene kita pindhah ing bunder saka z kanggo a. Cipher Caesar kanthi kunci 13 nduweni jeneng khusus ROT13 . Iku simetris: nglamar kaping pindho, bali menyang teks asli. Mesthi, ana uga ROT26, iki umume super-aman, nanging mung yen sampeyan ora nyatakake pikirane kanthi jelas =).
kahanan
Tulis ing file caesar.c program sing encrypts teks nggunakake cipher Caesar. Nyedhiyani siji argumen baris perintah minangka input kanggo program: integer non-negatif. Kanggo gamblang, ayo diarani k. Yen pangguna nglakokake program kasebut tanpa argumen baris perintah utawa kanthi luwih saka siji argumen, aplikasi kasebut kudu sambat lan ngasilake nilai 1 (kayata kesalahan biasane dituduhake): return 1; Ing kabeh kasus liyane, program kasebut njaluk pangguna kanggo teks kasebut. kanggo ndhelik, banjur nampilake teks sing dienkripsi nganggo tombol k (yaiku, pindah posisi k ing sisih tengen ing siklus). Yen teks kasebut ngemot karakter sing ana ing njaba alfabet Inggris, program kasebut ora ngganti. Sawise nyetak ciphertext, aplikasi metu, utama ngasilake 0: return 0; Yen utama ora kanthi jelas ngasilake nol, bakal ngasilake kanthi otomatis (int bener-bener jinis bali utama, nanging luwih akeh ing wektu liyane). Miturut konvensi (aturan wangun sing apik ing program), yen sampeyan kanthi tegas ngasilake 1 kanggo nuduhake kesalahan, sampeyan uga kudu ngasilake 0 minangka penunjuk kanggo ngrampungake program kanthi sukses. Sanajan mung ana 26 huruf ing alfabet Inggris, k bisa luwih gedhe tinimbang 26. Intine, tombol k = 27 bakal menehi asil sing padha karo k = 1, nanging sampeyan kudu ngidini pangguna ngetik nomer non-negatif. ngluwihi 2^31 – 26 (kudu pas karo int). Program kasebut uga kudu nyathet yen huruf cilik dienkripsi nganggo huruf cilik, lan huruf gedhe dienkripsi nganggo huruf gedhe. Ngendi kita miwiti? Wiwit aplikasi kudu nampa nilai k langsung ing senar argumen, header fungsi utama kita katon kaya iki: int main(int argc, string argv[]) Saka Bab 6, sampeyan ngerti yen argv minangka array saka strings. Susunan bisa dianggep minangka baris loker ing gedung olahraga. Saben wong nduweni makna sing didhelikake. Ing kasus kita, ing saben sel ana argumen kaya string Kanggo mbukak loker pisanan, kita nggunakake argv[0], sing kapindho - argv[1], lan liya-liyane. Yen kita duwe kunci n, kita kudu mandheg ing argv[n - 1], amarga argv[n] wis ora ana maneh (utawa ana, nanging duweke wong liya, luwih becik ora ndemek). Dadi sampeyan bisa ngakses argumen k kaya iki: string k = argv[1]; Kita pracaya ana tenan soko ana! Elinga yen argc minangka variabel int sing padha karo jumlah baris ing argv. Iki tegese luwih becik mriksa nilai argc sadurunge nyoba mbukak sel kasebut, amarga bisa uga ora ana. Saenipun argc = 2. Kenging punapa? Ing njero argv[0] biasane jeneng program kasebut. Tegese, argc tansah paling sethithik 1. Nanging program kita mbutuhake pangguna nyedhiyakake argumen baris perintah k, mulane, argc = 2. Alami, yen pangguna ngetik luwih saka siji argumen ing baris perintah, argc uga tuwuh lan bisa dadi luwih saka 2 Yen pangguna ngetik integer menyang senar, iki ora ateges sing nilai ngetik bakal kanthi otomatis disimpen minangka int. Luwih tepate, ora bakal. Iku bakal dadi senar, sanajan katon persis kaya int! Dadi, kita kudu ngowahi string dadi int dhéwé. Untunge, ana fungsi sing disebut atoi sing dirancang kanggo tujuan iki. Sintaks kasebut yaiku: int k = atoi(argv[1]); Elinga yen k minangka jinis int, supaya sampeyan bisa nindakake aritmetika. Kanthi fungsi iki, sampeyan ora kudu padha sumelang ing bab apa pangguna ngetik integer utawa, ngomong, foo: ing kasus sing, atoi bakal bali 0. Fungsi atoi diumumake ing perpustakaan stdlib.h , dadi manawa kanggo # kalebu ing wiwitan program. Kode bakal ngumpulake tanpa iki, awit kita wis klebu fungsi iki ing perpustakaan cs50.h. Nanging, luwih becik dipercaya perpustakaan asli. Dadi sampeyan entuk k disimpen minangka int. Saiki ayo njaluk input teks. Yen sampeyan nindakake tugas minggu pisanan, sampeyan wis ngerti fungsi perpustakaan CS50 sing diarani GetString. Dheweke bakal nulungi kita. Sawise sampeyan nampa k lan teks awal, ayo miwiti enkripsi. Kanggo recap, sampeyan bisa iterate liwat kabeh karakter saka senar lan print mau nggunakake daur ulang ing ngisor iki: for (int i = 0, n = strlen(p); i < n; i++) { printf("%c", p[i]); } Ing tembung liyane, kaya argv Uploaded strings, string punika Uploaded saka karakter. Mulane, kita bisa nggunakake kurung kothak kanggo ngakses unsur string individu ing cara sing padha njupuk strings individu ing argv. Mesthine, ora ana kriptografi babagan nyithak saben karakter. Utawa, teknis, nalika k = 0. Nanging kita kudu bantuan Caesar encrypt teks! Salam, Caesar! Kanggo nggunakake strlen, sampeyan kudu nyakup perpustakaan liyane . Awit kita ngotomatisasi sawetara tes validasi, program kudu nindakake persis kaya iki: username:~/workspace/pset2 $ ./caesar 13 Be sure to drink your Ovaltine! Or fher gb qevax lbhe Binygvar! Kejabi atoi , sampeyan bisa nemokake fungsi kelangan liyane ing perpustakaan ctype.h lan stdlib.h . Kanggo nindakake iki, tindakake link lan rummage watara ana sethitik. Contone, isdigit jelas soko menarik =). Nalika pindhah saka Z menyang A (utawa saka z menyang a), aja lali babagan operator modulo %ing basa C. Uga sinau tabel , nuduhake karakter ASCII ora mung kanggo huruf. Kanggo mriksa yen program bisa digunakake kanthi bener karo check50 , tindakake ing ngisor iki: check50 2015.fall.pset2.caesar caesar.c Lan yen sampeyan kasengsem ing muter kode digawe dening Staff CS50, mbukak printah: ~cs50/pset2/caesar Miturut cara, uggc://jjj.lbhghor.pbz/jngpu ?i=bUt5FWLEUN0 .
Analisis tugas
  1. Entuk kunci
  2. Njaluk teks
  3. Enkripsi
  4. Tampilake pesen sing dienkripsi
1. Kita mbentuk fungsi utama supaya pangguna ngetik tombol ing baris printah lan mriksa tombol kanggo bener. int main(int argc, string argv[]) argc: • int • jumlah argumen sing dilebokake ing baris printah • yen argc = 2 kabeh ok. Yen ora, print instruksi lan nutup program. • Yen argc = 2 kita mriksa yen tombol iku sawijining integer • Argv iku array saka strings, dhaftar karo bantahan ngetik menyang Array punika struktur data ngemot data beda saka jinis padha ing sel beda. Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 4 Contone, pangguna ngetik senar blastoff Team Rocket, banjur: Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 5 Nggunakake atoi () fungsi, kita ngowahi nomer asil menyang integer. Yen iki ora bisa, fungsi bakal bali 0. Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 6 2. Prompt pangguna kanggo teks. Iku prasaja: kabeh sing dilebokake pangguna minangka senar. 3. Enkripsi. Algoritma kasebut prasaja, nanging kepiye carane sampeyan bisa nerangake komputer sing huruf sing teka siji sawise liyane? Iku wektu kanggo ngelingi tabel ASCII! Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 7 Nanging, bisa uga ana luwih saka mung huruf ing senar ... Sadurunge pindhah menyang ngganti senar, bayangake sampeyan mung kudu ngganti siji karakter. Kita pengin ngganti huruf saka teks awal, dudu tandha utawa angka. Apa sing kudu kita lakoni? Pisanan kita kudu mriksa yen karakter iki ana ing alfabet. Iki bisa ditindakake kanthi nggunakake fungsi isalpha () . Yen karakter ana ing alfabet, fungsi iki ngasilake bener lan salah yen ora. Loro fungsi liyane migunani - isupper () lan islower () bali bener yen layang punika huruf gedhe utawa cilik, mungguh. Mangkono: Isalpha(‘Z’) -> true Isalpha(‘;’) -> false Isupper(‘Z’) ->true Isupper(‘z’) -> false Islower(‘Z’) -> false Islower(‘z’)->true Yen isalpha bali bener, kita kudu ngganti karakter iki nggunakake tombol. Ayo nimbang lan nganalisa minangka conto program Zamili, asisten CS50. Sampeyan bisa uga mikir kenapa 'A' minangka integer yen jelas huruf. Pranyata simbol lan wilangan bulat bisa diijolake. Kanthi nglebokake huruf A ing kuotasi siji sampeyan bisa entuk kode ASCII ing int. Ati-ati: sampeyan butuh kuotasi siji; tanpa kasebut, kompiler bakal nggoleki variabel sing jenenge A, dudu simbol. Banjur ing baris kita nambah nilai tombol kanggo kode ASCII saka huruf lan nyimpen ing variabel integer. Sanajan asile int, statement printf nggunakake placeholder %c kanggo karakter. Dadi program nyithak karakter sing ana gandhengane karo asil integer. Ing kasus kapindho, kita nampilake nomer nggunakake placeholder %d. Sampeyan bisa ngetik kode iki menyang cs50 IDE lan muter karo. Ayo dipriksa cara kerjane asciimath kanggo macem-macem kunci. Ayo dadi njupuk Nilai 25, kita bakal weruh gambar ing ngisor iki: Lan saiki supaya tombol 26: We got [, lan ora huruf A ing kabeh. Iku mung karakter ASCII sabanjuré sawise Z. Dadi mung nambah tombol ora bakal. kerja. Kita kudu nggunakake rumus cipher kanggo bali menyang awal aksara sanalika kita entek huruf. Elinga, kita wis nulis ing ndhuwur: /* * asciimath.c * by Zamyla Chan * * Calculates the addition of a char and an integer, * and displays both the resultant character and its * ASCII value. * * Usage: ./asciimath key [char] * */ #include #include #include int main(int argc, string argv[]) { if (argc != 2) { printf("print the key next time \n"); return 1; } // key is the second command line argument int key = atoi(argv[1]); //преобразование строки в int int letter = 'A'; printf("\nCalculating '%c' + %d...\n", letter, key); int result = (letter + key); printf("The ASCII value of %c is %d.\n\n", result, result); return 0; } int result = (letter + key);Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 8Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 9ci = (pi + k) % 26 Yen ci minangka huruf nomer i ing ciphertext, pi minangka huruf nomer i ing plaintext, k minangka kunci, lan %26 minangka sisa divisi kanthi 26 (utawa "modulo 26"). Ayo nganggo rumus iki kanggo huruf Y. Njupuk k = 2. Etung ('Y' + 2) %26 kode ASCII saka huruf 'Y' = 89. Banjur ('Y' + 2) %26 = (89 + 2 )% 26 = 91%26 = 13 Nanging iki dudu nilai ASCII saka huruf A sing kita butuhake, yaiku 65. Saiki ayo menehi saben huruf alfabet nilai saka 0 nganti 25 kanthi urutan. Ing kasus iki, Y = 24. (24+2)%26 = 0 Huruf A mung indeks kuwi. Dadi, rumus iki nuduhake indeks alfabet huruf, dudu nilai ASCII. Kanggo nyithak karakter sing dienkripsi, sampeyan butuh nilai ASCII. Lan tokoh metu carane ngalih antarane Nilai ASCII lan nomer ing aksara. Sawise kita nemtokake rumus kanggo siji karakter, kita kudu ngetrapake saben huruf ing senar sing dilebokake saka keyboard. Nanging mung yen iki layang! Lan elinga, huruf kapital lan huruf cilik mbutuhake makna sing beda. Ing kene fungsi isupper lan islower migunani. Sampeyan bisa uga duwe rong rumus, siji kanggo huruf kapital, liyane kanggo huruf cilik, fungsi bakal mbantu sampeyan milih sing bakal ditrapake. Kepiye cara ngetrapake rumus kanggo saben karakter ing senar? Elinga yen senar mung minangka susunan karakter. Fungsi strlen (dawa string) bakal mbantu sampeyan nemtokake jumlah iterasi ing daur ulang .Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 10

Tugas 2. Parlez-vous français?

Teori
Cipher Vigenère luwih aman tinimbang cipher Caesar: nggunakake tembung minangka kunci lan angel dicopot kanthi manual nggunakake analisis frekuensi utawa brute force piyambak. Saben huruf tombol ngasilake nomer, lan minangka asil kita entuk sawetara tombol kanggo ngganti huruf. Conto: p = Meet me in the park at eleven am В качестве ключевого слова возьмем k = bacon Длина messages p = 25 В то время How длина k = 5 Поэтому его нужно повторять 5 раз. Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 11 Yen jumlah huruf ing pesen ora bisa dibagi dening tombol, kita nggunakake mung bagean ing aplikasi pungkasan tombol: Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 12 Kanggo nemokake nilai offset, kita nggunakake posisi saben huruf tombol daging babi kita. ing aksara (saka a nganti z). We count saka ngeruk, kaya programer bener. Lan saben huruf ing teks asli dipindhah dening nomer tartamtu, kaya ing cipher Caesar, bali, yen perlu, sawise Z kanggo awal aksara. Dadi M bakal pindhah kanthi 1, sing pisanan e ora bakal pindhah, lan sing kapindho bakal pindhah kanthi 2 posisi. Ing ngisor iki sampeyan ndeleng pesen asli, tombol sing ditulis lan asil aplikasi. Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 13 Cipher Vigenère, mesthi, luwih kuwat, nanging yen sampeyan ngerti dawa kunci, iku cukup gampang kanggo break. Carane ngenali iku? Yen teks asli cukup dawa nganti sawetara tembung katon kaping pirang-pirang, sampeyan bakal weruh sawetara repetitions: Sampeyan Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 14 uga bisa nggunakake brute force, nanging ana akeh opsi: 26^n – 1 ngendi n iku dawa saka tombol ora dingerteni. . Nanging biasane iki akeh. Bener, iki ora masalah kanggo komputer. Lan saiki matématika cipher: Ayo p dadi sawetara teks, k dadi tembung kunci, kj dadi huruf j-th saka kunci, pi dadi huruf nomer i ing teks asli, ci dadi huruf nomer i ing enkripsi. . banjur: ci = (pi + kj) % 26
olah raga
Kahanan Tulis program vigenere.c sing encrypts pesen nggunakake cipher Vigenere. Kita nyedhiyakake siji argumen baris perintah kanggo input program: tembung kunci k, sing dumadi saka huruf alfabet Inggris. Yen aplikasi diluncurake kanthi luwih saka siji argumen utawa argumen sing ora kalebu ing alfabet, perlu kanggo nampilake informasi kesalahan lan mungkasi program kasebut. Yaiku, utama bakal bali 1 - ing kasus iki, tes otomatis kita bakal ngerti yen kabeh apik ing kene, lan kondisi iki dianggep. Yen kabeh iku uga, program kudu nerusake kanggo njaluk senar teks p, kang kita encrypt karo tombol k dijupuk ndhuwur, print asil lan ngrampungake program, bali Nilai 0. Klarifikasi Iku perlu kanggo nggawe manawa ing tombol k karakter A lan a ditetepake minangka 0, B lan b minangka 1, ..., Z lan z minangka 25. Program kudu aplikasi Vigenère cipher mung kanggo huruf saka teks p. Karakter sing isih ana (nomer, tandha wacan, spasi) kudu metu tanpa owah-owahan. Yen algoritma bakal nggunakake karakter jth k kanggo karakter ith p sing ora ana ing aksara, aplikasi sing karakter tombol jth kanggo karakter alfabet sabanjuré ing teks; sampeyan ora bisa mung ninggalake lan pindhah menyang karakter liyane ing k. Pungkasan, program kasebut kudu njaga kasus saben huruf ing p .
Ora ngerti ngendi arep miwiti?
Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 15
Kene sawetara tips saka Zamilya, asisten kursus CS50
Begjanipun, program banget padha cipher Caesar, mung tombol senar tinimbang integer. Yen sampeyan wis kasil ngleksanakake cipher jeneng panguwasa Romawi, bisa dadi wiwitan apik kanggo tugas kapindho. Sampeyan mbokmenawa wis ngerti yen cipher Vigenère kanthi siji huruf minangka kunci padha karo cipher Caesar. Algoritma Vigenère nggunakake langkah sing padha karo Caesar:
  1. Entuk kunci
    • codeword minangka argumen baris perintah kapindho argv[1]
    • kudu ing aksara: fungsi isalpha
  2. Njaluk teks
  3. Enkripsi
  4. Print ciphertext
Dadi, ayo dipriksa argumen baris perintah kaping pindho argv[1] kanggo ndeleng apa kalebu karakter alfabet. Kita nindakake iki nggunakake isalpha sing wis dikenal . Yen tombol bener, kita nampa senar saka pangguna lan miwiti enkripsi. Rumus cipher Vigenère padha karo rumus cipher Caesar. Kepiye cara ngowahi layang menyang offset cipher sing cocog? Coba mbandhingake nilai nggunakake tabel ASCII. Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 16 Paling kamungkinan, sampeyan bakal bisa nemokake pola antarane huruf lan indeks alfabet nggunakake urutan ing tabel. Apa sampeyan ngerti carane nyuda siji huruf saka liyane kanggo entuk asil sing dikarepake? Offset kanggo huruf kapital lan huruf cilik padha, dadi sampeyan kudu nemtokake rong rumus sing padha kanggo nemtokake offset kanggo huruf cilik lan kanthi kapisah kanggo huruf gedhe. Uga elinga yen daur ulang teks kudu nglirwakake karakter non-Inggris. Lan aja lali nyimpen kasus surat. Yen sampeyan ndeleng rumus cipher: ci = (pi + kj) % 26 sampeyan bakal weruh rong variabel indeks, i lan j. Siji nyimpen posisi ing teks sumber, liyane ing tombol. Yen teks sampeyan luwih dawa tinimbang tombol, indeks ing tombol dadi saka mburi tombol bali menyang wiwitan. Carane nindakake? Gunakake operasi pembagian modulo! Asil saka operasi punika sisa saka divisi saka rong nomer. Keuntungan praktis saka operasi iki ing program mung gedhe tenan! Bayangake manawa klompok gedhe kudu dipérang dadi telung subkelompok. Salah siji cara kanggo nindakake iki kanggo njaluk wong mbayar kanggo pisanan, kaloro, katelu. Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 17 Tegese wong kang kapisan iku kagolong golongan kang kapisan, kang kapindho marang kang kapindho, kang katelu marang kang katelu, kang kaping papat marang kang kapisan maneh, lan sateruse. Sampeyan bisa nggunakake divisi modulo kanggo nindakake operasi sing padha. Ayo dadi nomer telung klompok padha saka ngeruk. Punika carane nindakaken: Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 18 Yen sampeyan njupuk indeks lan dibagi modulo Nilai maksimum, asil asil ora bakal luwih saka utawa padha karo Nilai. Coba prinsip iki kanggo ngasilake tembung kunci menyang wiwitan! Mung tinimbang ngurutake klompok sampeyan butuh indeks tembung kunci supaya sampeyan bisa ngimbangi huruf sing bener tanpa ngluwihi dawa tombol. Awit kita ngotomatisasi sawetara tes kode sampeyan, program kasebut kudu tumindak kaya ing ngisor iki: jharvard@appliance (~/Dropbox/pset2): ./vigenere bacon Meet me at the park at eleven am Negh zf av huf pcfx bt gzrwep oz Kepiye carane sampeyan bisa nyoba program kasebut kajaba ngetung ciphertext kanthi manual? We are jenis: kanggo iki kita wrote program devigere . Butuh siji lan mung siji argumen baris perintah (kata kunci), lan tugase njupuk ciphertext minangka input lan ngasilake plaintext. Run it: ~cs50/pset2/devigenere k Where k minangka tembung kunci. Yen sampeyan pengin mriksa kabeneran program sampeyan nggunakake check50, mbukak: check50 2014.fall.pset2.vigenere vigenere.c Lan yen sampeyan pengin ngevaluasi implementasi vigenere, ketik: ~cs50/pset2/vigenere

Carane validasi kode lan entuk tandha

manungsa waé! Yen penting kanggo mriksa mung kabeneran tugas, banjur gunakake cs50check. Yen sampeyan pengin entuk biji ing platform edx, tindakake prosedur sing diterangake ing ngisor iki. Elinga yen prosedur iki nggunakake cs50check sing padha kanggo mriksa tugas. Bentenipun mung iku ngelingi asil lan ngetung skor sakabèhé.
  1. Mlebet CS50 IDE
  2. Near pojok kiwa ndhuwur CS50 IDE , ngendi file browser dumunung (ora ing jendhela terminal), klik-tengen ing initials.c file dumunung ing direktori pset2 lan klik Download . Sampeyan kudu weruh yen browser wis dimuat initials.c .
  3. Baleni kanggo caesar.c .
  4. Baleni kanggo vigenere.c .
  5. Ing jendhela kapisah utawa tab, mlebu menyang CS50 Kirim
  6. Klik ing lambang Kirim ing sudhut kiwa ndhuwur layar. Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 19
  7. Ing dhaptar folder ing sisih kiwa, klik direktori Masalah Set 2 , banjur klik tombol Upload Kiriman Anyar . Ana ing sisih tengen. Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 20
  8. Ing layar sing katon, klik tombol Tambah file .... Jendhela kanggo milih file saka komputer bakal mbukak. Harvard CS50: Tugas Minggu 2 (Kuliah 5 lan 6) - 21
  9. Navigasi menyang folder ing ngendi sampeyan nyimpen inisial.c . Paling kamungkinan dumunung ing folder Downloads utawa ing ngendi wae browser nempatno file minangka standar. Yen sampeyan nemokake initials.c , klik sapisan kanggo milih, banjur klik Bukak.
  10. Klik Tambah file maneh.
  11. Golek caesar.c lan mbukak.
  12. Apa padha kanggo file vigenere.c .
  13. Klik Mulai upload. File sampeyan bakal diunggah menyang server CS50 .
  14. Ing layar sing katon, sampeyan kudu ndeleng jendhela Ora Ana File sing Dipilih . Yen sampeyan mindhah kursor mouse ngiwa, sampeyan bakal weruh dhaptar file sing diundhuh. Kanggo konfirmasi, klik saben wong. Yen sampeyan ora yakin babagan apa wae, sampeyan bisa ngunggah maneh file kanthi mbaleni langkah sing padha. Sampeyan bisa nindakake iki kaping pirang-pirang nganti pungkasan taun 2016.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION