Amila: Olgem lahendada Caesar. In Caesar, laseme kasutaja kodeerida salajane sõnum. Nii saab sukelduda õigus ning otsida meie ülesanded selle probleemi. Nii et kõigepealt me ​​saada võti kasutaja. Siis saame polegi et nad tahavad kodeerida. Pärast seda me šifreerimine seda nende eest, ja lõpuks me printida oma ciphertext. Nii alustame näiteks. Ütle, et tahtis kodeerida Kogu tähestiku võtmega kaks. Noh, kogu oma tähestikus oleks lihtsalt nihkunud tähed. Nii oleks kodeerid C, B D, C-E, nii edasi ja nii edasi, kuni saad X, mis kodeerib kuni Z või Teed, sõltuvalt sellest, kus sa oled. Siis Y siis nihkub kogu tee, ümbritsev tähestiku pääseda, ja siis lõpuks viimane täht tähestiku, Z, Teed, mis kodeerib B. Sul on see? Vaatame mõned näited. Esimene näide on siin väga sarnane mida me lihtsalt selgitatud. Nii et kui ma kodeerida mõned osa tähestiku A kuni L, võtme kahe, siis ma lihtsalt saan kogu tähestiku nihkus kaks tähte. Siis minu kõrval näiteks võti on ikka kaks, nii et sa peaks ikka teadma, mis tähed oodata. Aga siin on see väljend. See on CS50. Nii märkad, et ma säilitada puhul minu kirjad, nii et kõik suurtähed on ka suurtähed on ciphertext. Ja mõni väiketähed tähed polegi Samuti väiketäheliseks tähed ciphertext. Aga ma saan tähed ja kõik hüüumärki või muu kirjavahemärgi sama. Nüüd, et meil on mõistlik kuidas programm töötab, vabalt minna tööle mõned rohkem näiteid oma, kui soovite. Alustame saada võti kasutaja. Traditsiooniliselt koos muid probleeme, me oleme harjunud saada numbreid, et me vaja teavitades kasutajat, funktsiooniga getint. Aga seekord me tegelikult toimub kasutada käsureaargumenti ja uus funktsioon nimega atoi. Kui sa jooksed peamine programmi C, siis võtab kaks parameters-- int Argc, mis on mitmeid argumente möödunud aastal ja seejärel argv, massiivi stringe, mis sisaldab nimekirja kõik argumendid möödas. Sa ei ole selgesõnaliselt on kuulutada need muutujad. Nad arvutati teile koostaja. Õigekeelsus oleks see jaoks Argc olevat kaks sel juhul kuna kasutaja peab läbima Kõne programmi, ./caesar, ja siis võti, mis iganes number, mida nad soovivad. Nii et see tähendab, et Argc peab olema kaks Selleks, et kehtiv kasutamine Caesar tuleb täita. Nii vaatame näiteks. Öelda, et ma olen juba kirjutanud ja koostatud programmi nimega blastoff. Nii et kui ma jooksin käsureal ./blastoff Team Rocket, hästi, siis, Argc oleks kolm, sest ma möödunud aastal kolm erinevat argumente. Siis argv näeks välja selline. See massiiv, ja see oleks sisaldavad iga kolme stringid. ./blastoff esimeses indeks, meeskond järgmisel ja raketi viimase. Räägime massiivid Sec. Massiivid on andmestruktuurid, mis hoiavad Mitme väärtuse sama tüüpi. See võib tulla mugav, kui me on nimekirjad täisarvud või stringid. Pea meeles, nad on olema sama tüüpi. Infotehnoloogia, me armastan arvestades nullist, seega pea meeles, massiivid Samuti on null-indekseeritud. Nii et esimene osa minu rida läheb kell indeks null. Nii sel juhul, kui mul on massiivi pikkus neli, siis viimane indeks viimane element minu rida tegelikult saab olema kell indeks kolm, mitte neli. Sest mäletan, me alustada nullist. Siin on näide sellest, kuidas võib tekitada hulgaliselt oma. Nii öelda tahtsin hoida oma kolm lemmik koer nimed. Siis ma looks massiivi stringe. Nii et ma kuulutada tüübist, nööri ja siis pane nime massiivi, koerad, ja siis nendes ruudu Sulgudes panna suurus on array-- sel juhul kolm. Nii et minu esimene sissekanne läheb olema koertel indeks null, ja mis saab olema Milo. Siis koertel indeks üks läheb tobe, Darling mochi ja siis viimase kanne, kolmanda sisenemise indeks kaks, saab olema armas, armas Elphie. Märkad, et vormi täitmiseks antud massiivi on väga sarnane, kuidas sa võiksid Kinnitan muu muutuja, kus sul on muutuja nimi, millele järgneb väärtus, mida te soovite salvestada see. Ainus erinevus Sel juhul on see, et sa Tuleb meeles pidada, et panna indeks väärtusest nurksulgudes. Ja seal oleme meie kolm lemmik koera. Aga kahjuks on aeg et saada tagasi Caesar. Pea meeles, et õige kasutamise eest kasutaja saab veeretada mitte ainult nimi programm ./caesar, kuid Samuti võti, et nad tahavad minna oma polegi poolt. Nii et see tähendab, et Argc peab olema kaks. Nad peavad läbima two-- ei rohkem ega vähem kui kaks käsurea argumente. Nüüd, kuidas argv? Noh, me teame juba, et massiivi saab olema pikkusega kaks, Aga mis sisalduvad iga element? Noh, esimene osa läheb ./caesar, ja siis järgmine element läheb sisaldama võtit, et kasutaja sisestatud. Nüüd, kui nad kasutasid seda õigesti kasutamise eest Caesar, siis nad ei kavatse kirjuta number. Aga kuigi iseloomu et nad tüüp on number, see on andmete tüübile string. Niisiis, kuidas me teisendada, et string täisarv? Nii et mul on num, jada, mis sisaldab stringi 50. Kui ma tahan, et konverteerida see täisarv, siis ma lihtsalt kuulutada uus muutuja, mis on täisarv i, kutsudes atoi. Annan minu string muutuja num ja siis ma sisaldab siis number 50. Veenduge, et kontrollida mees lehtede atoi funktsiooni kontrollida, mis raamatukogu see aastal, samuti seda, mida väärtustada tagasi, kui string edasi aastal ei sisalda kõiki numbreid. Nüüd, et me oleme saanud võti, järgmine samm on saada polegi kasutaja. Nüüd, see saab olla vähem keeruline kui navigeerimise ümber käsurea argumente. Kõik me peame tegema, on kõne getString funktsiooni ajendab kasutaja anda meil string, kuid pea meeles, kontrollida kirjeldused, kuidas me Võiksid palub kasutajal selle eest. Nüüd jõuame süda problem-- kuidas šifreerimine avateksti. Noh, esiteks, räägime, kuidas kuni šifreerimine üks täht korraga, ja siis me tegeleda kuidas itereerima kogu polegi. Olen kirjutanud mõned pseudokoodi Caesar probleem. Ma kutsun teid üles kirjutada oma samuti. See ei pruugi otsida identne minu, ja see on OK, kuid nii kaua kui üldise idee on sama. Esimesed kolm etappi me oleme juba teinud. Oleme saanud võti käsurea argumenti, oleme välja, et võti arvesse täisarv, ja me oleme küsitakse kasutaja jaoks polegi et nad tahavad šifreerimine. Nii siis järgmine suure tüki on see, et iga märk et polegi string, kas see on tähestikuline, me tahame säilitada oma seisukohad ja nihutades. Autor säilitada juhul, mida ma tähenda see, et kõik suurtähed tähed peaks jääma ülemise juhul ja kõik väiketähed peaks jääma väiketähed. Nii siis pärast muudame need, siis prinditakse ciphertext. Siin on kolm funktsiooni, mis hakkavad et tulevad mugav selles probleemi. Pea meeles, kuni eespool, kui ma andsin Näiteks nihkub see on CS50? Pea meeles, et 50 ja hüüumärk ei suunata? Niisiis, kuidas me saame öelda, kas me pead minema kirja või mitte? Noh, "on alfa," kui te kaotate seda iseloomu, naaseb tõsi, kui see tegelane on kirjas ja vale teisiti. Et aidata teil säilitades kapitalisatsiooni on funktsioonid "on ülemine "ja" on väiksem. " Need kaks funktsiooni võtta ka ühes iseloomu sisend ja sind tagasi Boole'i, kas õige või vale sõltuvalt sellest, kas see märk on suur- või väiketähed. Kuna "on ülemine" ja "on väiksem "on Boole'i ​​funktsioonid, mis tähendab, et nad sind tagasi Boole'i, saate need oma tingimused. Nii et siin on koodilõiku, et ainult prindib kirjas, kui see on suurtähtedega. Nii et ma olen deklareerinud oma iseloomu kirja ülemises juhul Teed ja siis, kui "on ülemine" naaseb tõsi, siis ma printida, et kirja. Tulles tagasi meie lihtne näide nihutades tähestiku võti kaks, Kuidas me tegelikult saada, et töötada? Noh, selgub, et tähemärki ja täisarvud on väga tihedalt seotud. Iga märk on täisarvuni seotud kus see leidub ASCII tabel, kus iga tegelase ASCII väärtus. Nii ülemine juhul A vastab ASCII väärtus 65 ja väiketähti A ASCII väärtus 97. Julgelt otsida mis tahes ASCII tabel Internetis näha neid väärtusi ise. Mida see tähendab, et saame võta iseloomu suurtähtedega A, lisada täisarv kaks, ja siis saan iseloomu suur- C tulemusena. Seda sellepärast, et 65 ASCII hinna ja kapitali A, pluss 2 annab meile 67, mis vastab iseloomule suur- C. Kahjuks asjad ei ole päris nii lihtne. Meil on võrrand, mis peame kaaluma. Siin see ütleb meile, et nda ciphertext kirja vastab nda polegi kirja, millele lisandub key-- kõik see, modulaarne 26. Miks on see nii? Lähme tagasi meie näite Enne, kus kapitali A, pluss 2 annab meile kapitali C. Nii kohaldades võrrand, mis spetsifikatsioon annab meile, Seejärel võtame Kapitali vorm pluss 2 ja mod, et 26. Nii kapitali A, kui ma panin selle need jutumärkideta, võimaldab mul seda ravida täisarv, nii et lahtrisse ma viskasin oma ASCII väärtus 65. 65 plus 2 on 67. 67 mod 26 annab meile 15 kuid see ei ole tegelikult mõtet, sest me teame, et kapitali C ASCII väärtus on 67, mitte 15. Niisiis, kuidas me sobitada seda? Noh, siin ma tahaks posit mõiste tähestikuline indeks. Nii et me oleme juba rääkinud, kuidas Iga märk on oma ASCII väärtus, aga ma tahaks öelda, noh, olgem mõelda iga märk oleks ka tähestikregister, kus A näiteks kui esimene täht, on tähestikuline indeks null. Vaatame nüüd kohaldada Sama võrrandi nagu enne, kuid kasutades tähestikregistris. Nii on null, sest me oleme määratletud. Nii siis võttes null pluss kaks, mod 26, see on kaks, mod 26, mis annab meile kaks. Ja noh, nii tähestikregister, C on kolmas täht tähestiku, nii et see vastaks kuni tähestikuline indeks kaks. Seega tundub, et kasutades tähestikregistris sel juhul tegelikult annab meile õige tulemuse. Nüüd oletame, kontrollige vaata, kas võrrand tööd alfabeetiline indeks. Y tähestikregister 24 kui eelviimases tähestiku tähe. Nii siis 24 pluss meie võti kaks annab meile 26. 26 mod 26 annab meile 0, mis õnneks meil on tähestikregistris A. Loodetavasti see piisav tõestus, et tähestikregistris meetod töötab. Kui ei, siis võid vabalt proovida mõned näited oma. Et korralikult ümbritsev tähestiku ja kohaldada Caesar võrrand, siis me teame, et me peame tegeleda tähestikulises indeksid. Aga alustame ASCII väärtuste ja alles siis Kas me siis teisendada tähestikregistris. Sealt et printida, peame tegelema ASCII väärtused uuesti. Seega peame välja mõtlema, kuidas minna ASCII alfabeetiline ja tähestikulises ASCII. Nii et ma jätan teile välja mõtlema muster vahel märk ja selle tähestikulises indeks ja selle ASCII väärtus. Nüüd, pea meeles, et kuigi Selle tabeli paremas slaidile näitab suurtähtedega, me ka pead arvestama, kas teistsugusteks kehtib jaoks väiketähed. Nüüd, et me oleme aru saanud kuidas suunata ühe märgi, siis kõik me peame tegema, on skaala, mis üles minna kogu polegi. Nii polegi on string. Lucky meile, string on tõesti lihtsalt massiivi märke, nii, et pääseda iga tegelane string, kõik mida sa pead tegema on kasutada hulgaliselt märke. Ütle mul tüüpi muutuja string nimega "text =" See on CS50. " Noh, siis selleks, et pääseda iga märk, kõik, mis mul pistmist muutuja tekst on öelda ka, teksti indeks null, et vastab kapitali T. Tekst on indeks üks vastab väiketähti h. Veel üks kasulik funktsioon on stringi pikkuse funktsioon. Nii kulgeb stringi et funktsioon tagastab täisarv, pikkus, et string. Nüüd, kui oleme rääkinud kõik need erinevad elemendid, paneme need tagasi kokku. Nii tagasi kas minu pseudokoodi kood või oma pseudokoodi ja minna läbi ja veenduge, et teil tea, kuidas seda teha iga asi. Kuidas võti kasutades Argc ja argv, keerates võtme täisarv, et i, küsimata polegi, getString ja seejärel iterating üle iga märk avateksti string, säilitades puhul iga märk ja suunates selle sümbol võti, tagades, et sa oled ümbritsedes tähestikku, Lõpuks trükivajaduste ciphertext. Minu nimi on Amila, ja see oli Caesar.