[Powered by Google Translate] [Walkthrough - Set Problem 2]
[Zamyla Chan - Universiteti i Harvardit]
[Kjo është CS50. CS50.TV]
Dakord. Hello, të gjithë, dhe të mirëpritur të walkthrough 2.
Së pari, unë dua të ju përgëzoj për të përfunduar pset 1.
Unë e di se ai mund të ketë qenë pak e vështirë për disa prej jush,
mund të ketë qenë programi i parë në kompjuterin tuaj që ju ka shkruajtur,
por vetëm mos harroni se në fund të kësaj, kur ju shikoni mbrapa në fund të semestrit,
ju do të shikoni në pset 1 dhe ju do të thonë: "Hej, unë mund të ketë bërë që në 5 minuta."
Kështu e di dhe besoj se në fund të kësaj ju do të gjeni patjetër pset 1 fare e thjeshtë.
Por tani për tani kjo është një arritje e madhe, dhe urime për marrjen e bërë.
Tani, edhe një shënim të shpejtë para se të merrni në mish e walkthrough.
Unë vetëm dua të bëjë një shënim të shpejtë se unë ndonjëherë nuk do të ketë kohë të mjaftueshme
gjatë walkthroughs për të shkuar nëpërmjet çdo mënyrë të vetme të bërë grup problemit
dhe në vend të vetëm ndoshta përqëndrohet në 1 ose 2 lloj Implementimi,
mënyra që ju mund të bëni këtë.
Por kjo nuk do të thotë që ju janë të ndaluara nga e bërë atë një mënyrë tjetër.
Nuk janë shpesh, si me shkenca kompjuterike, mënyra të shumta e të bërit gjëra,
dhe kështu patjetër të ndjehen të lirë për të përdorur një lloj të ndryshme të zgjidhjes se unë mund të ketë paraqitur.
[Pset 2: kripto - Zamyla Chan - zamyla@cs50.net]
[Pset2 - 0. Një Seksioni i Pyetjeve - 1. Cezari - 2. Vigenere]
Dakord. Pra, problemi vendosur 2: kripto është një kënaqësi.
Përsëri, me çdo pset ju do të fillojë me një pjesë të pyetjeve
që do të zhvillohet në seksione tuaja me shokët tuaj të caktuar të mësimdhënies.
Ne nuk do të shkojnë nëpër këto mbi walkthrough,
por ata patjetër do t'ju ndihmojë të plotë pset.
Pra, pjesa e parë e caktuar problemit është Cezari.
Dhe kështu në Cezarit dikush do t'ju kalojë një çelës me një numër të plotë,
dhe ju do të encrypt një varg të tekstit që ata t'ju japin
dhe për t'u dhënë atyre përsëri një gjë të koduar.
Nëse dikush shikuar një histori e Krishtlindjeve, ka një shembull i se ka.
Pastaj pjesa e dytë e problemit është e vendosur Vigenere,
cila është një teknikë më të avancuar enkriptim.
Dhe kështu që ne jemi duke shkuar për të shifroj një copë të tekstit,
përveç në vend me numër të plotë vetëm një të vetme, ne jemi të vërtetë do të shifroj atë
me një fjalen që përdoruesi do të na japin.
Mirë, kështu që mjeti i parë në veglave sot është në të vërtetë do të jetë përditësimin e aparatit.
Në bordin e diskutimeve ne do të shohim gjëra të tilla si, "Pse nuk këtë punë?"
"Pse nuk Submit 50 punë?"
dhe shpesh zgjidhja është në fakt vetëm për të rinovuar aparatin tuaj.
Dhe kështu që nëse ju vetëm të kandidojë në një dritare terminali në sudo tuaj aplikim yum-y -
kjo është një flamur duke thënë: po, gjithçka Përditëso - Update,
atëherë pajisja juaj do update nëse duhet të jetë.
Dhe kjo nuk do të dëmtojë në qoftë se ju tashmë jeni në versionin më të fundit të pajisjes.
Pastaj ai thjesht do të thotë nuk ka përditësime të reja në dispozicion dhe ju mund të vazhdojnë të punojnë së bashku.
Por kjo është e mirë për të ekzekutuar edhe çdo herë që ju hapni pajisjen
sepse ne jemi ende shumë -
ndonjëherë në qoftë se ne kemi ardhur në një bug - ndreqim atë në aplikim.
Prandaj sigurohuni që ju keni versionin më të fundit të pajisjes
dhe të drejtuar se përditësimin atje.
Dakord. Kështu që ne jemi që kanë të bëjnë me shkronja dhe ndryshimin, enciphering gjëra,
ne jemi duke shkuar me të vërtetë duan të bëhen miq të mirë me skemën tonë ASCII.
Nuk janë ato të shumta online, në qoftë se ju të gjeni. Ndoshta edhe të bëjë tuaj.
Në thelb, me çdo shkronjë dhe çdo numër dhe çdo karakter
ka një numër të lidhur me to,
dhe kështu që është e mirë për të parë vlerat e tyre ASCII së bashku me letrën aktuale.
Kjo patjetër do t'ju ndihmojë në grup problemit.
Një gjë që me të vërtetë më ndihmoi në këtë grup problemit ishte në fakt print it out,
dhe si unë ishte duke shkuar nëpër, unë në fakt do të tërheqë në të,
shkruar, "Nëse kjo ka për të shkuar atje, pastaj ..."
Lloji i nxjerrë mbi të dhe të shënojë atë, bëhen miq të mirë me tryezën tuaj ASCII.
Pastaj ne kemi një disa mjete të tjera në dispozicionin tonë.
Këtë herë në vend të vërtetë duke bërë që përdoruesit për të gjithë kontributin e tyre
ne jemi duke shkuar për të bërë një kombinim.
Ne jemi duke shkuar për të nxitur ata për disa të dhëna,
por ne jemi gjithashtu do të përdorin vetëm argumentet command line.
Kështu që kur ata të drejtuar programin e tyre, zakonisht ju thoni. / Hello, për shembull,
Nëse programi juaj ishte hello.c.
Por këtë herë në vend të vetëm duke thënë se, ata mund të bëjnë fjalët, argumentet më pas.
Dhe kështu që ne jemi duke shkuar për të përdorur çfarëdo që ndodhë për ne si kontributin e tyre si edhe,
kështu që lëviz përtej vetëm duke bërë për numër të plotë, por edhe duke përdorur argumente command line.
Dhe pastaj ne do të shkojnë në vargjeve dhe vargjet, të cilat ne do të jetë duke përdorur një shumë të mirë.
Ja vetëm një shembull i tabelës 1 mini ASCII.
Siç thashë, çdo letër korrespondon me një numër,
dhe kështu të njoh veten me këtë. Ajo do të jetë në dispozicion.
Dhe më vonë kur ne të fillojnë të bëjnë disa ASCIIMath që kanë të bëjnë me numrat -
duke shtuar, zbritur ata - atëherë patjetër e mirë për të referuar në këtë tabelë.
Kështu që këtu është një shembull i një shifër Caesar - diçka që ju mund të keni luajtur me të.
Kjo është vetëm një rrotë. Në thelb, ka një alfabeti jashtme dhe pastaj nuk është një alfabeti brendshme.
Kështu që këtu është një shembull i Cezarit shifër, por me një çelës prej 0.
Në thelb, A është në përputhje me A, B është në përputhje me B, të gjithë rrugën deri në Z.
Por pastaj thonë se ne kemi kërkuar një çelës prej 3, për shembull.
Atëherë ne do të rrotullohen timon brendshme në mënyrë që një tani aligns me D, etj
Dhe kështu kjo është në thelb ajo që ne jemi duke shkuar për të bërë.
Ne nuk kemi një rrotë, por ajo që ne jemi duke shkuar për të bërë është të bëjë programin tonë
lloj zhvendoset alfabetit së bashku me ne për një sasi të caktuar të numrave.
Pra, siç thashë më parë, ne jemi duke shkuar për të që kanë të bëjnë me argumente command line
si dhe marrjen e një numër të plotë.
Pra, mënyra se si një përdorues do të kandidojë Cezarit programin tuaj është duke thënë. / Cezari
dhe pastaj të hyjnë në një numër pas kësaj.
Dhe ky numër përfaqëson çelësin, kalimi,
se sa herë ju jeni do të jetë rradhës rrota e brendshme të Cezarit shifër tuaj.
Dhe kështu që ju shihni këtu një shembull.
Nëse kemi hyrë letra nga një L në Cezarit shifër tonë,
atëherë ajo do të input D O nëpërmjet sepse kjo është çdo letër zhvendosur mbi 3 herë,
ashtu si shembullin e timonit që unë ju tregoi.
Prandaj, nëse keni hyrë në, për shembull, Kjo është CS50!
atëherë ajo do të lëvizin të gjitha letrat.
Dhe kjo është një gjë e rëndësishme në të dy Cezarit dhe Vigenere
është se ne jemi duke shkuar për të kaloni mbi ndonjë jo-letra.
Kështu që çdo hapësira, karaktere, etj, numrat, ne jemi duke shkuar për t'i mbajtur ata të njëjtën gjë.
Ne jemi vetëm do të zhvendoset letra në këtë rast.
Kështu si ju shihni në timon, ne kemi vetëm letra në dispozicion për ne,
kështu që ne vetëm duam të zhvendoset letra dhe encrypt letra.
Pra, gjëja e parë për të bërë, ju pa se përdorimi për Cezarit në problemin vendosur 2
është për të kandiduar Cezarin dhe pastaj të hyjë në një numër kur ju drejtuar atë në terminal.
Kështu që ajo që ne duhet të bëni është që të marrë atë disi kyç dhe të përdorni atë.
Dhe kështu ne duam të shohim disi ajo do të jetë e dyta command line argument.
Një parë është do të jetë. / Cezari, dhe tjetri është do të jetë numri çelësi.
Pra, para se të kishim int kryesor (i pavlefshëm) për të filluar programet tona c.
Ne jemi duke shkuar për të zhvishem përsëri një shtresë pak
dhe në fakt shohim se në vend të kalimit në zbrazëti të funksionojë tonë kryesore
ne jemi në të vërtetë kanë të bëjnë me 2 parametra.
Ne kemi një int emrin argc dhe pastaj një grup i quajtur vargjet argv.
Kështu argc është një numër i plotë,
dhe paraqet numrin e kaluar argumente për programin tuaj.
Dhe pastaj argv është në fakt lista e argumenteve kaluar.
Të gjitha argumentet janë vargjet, dhe kështu argv përfaqëson një grup, një listë, e strings.
Le të flasim për vargjeve pak.
Vargjeve janë në thelb një strukturë e re të të dhënave.
Ne kemi ints, ne kemi dyshen, kemi vargjet, dhe tani ne kemi vargjeve.
Vargjeve janë strukturat e të dhënave që mund të mbajnë vlerat e shumta të të njëjtit lloj,
Pra, në thelb, një listë e çfarëdo lloj që ju dëshironi.
Në thelb, në qoftë se ju të kërkuar një listë të të gjitha integers në 1 ndryshueshme,
atëherë ju do të krijojë një ndryshore të ri që ishte i tipit int array.
Kështu vargjeve janë zero-indeksuar, që do të thotë se elementi i parë i vektorit është në indeksit 0.
Nëse array është e gjatësi 4, si në këtë shembull, atëherë elementi juaj e fundit do të jetë në indeks 3,
cili është 4 - 1.
Pra, për të krijuar grup, ju do të bëni diçka si kjo.
Thuaj ju kërkuar një koleksion të dyfishtë.
Kjo vlen për çdo lloj të të dhënave lloji, pse.
Pra, thonë se ju doni një koleksion të dyfishtë. Thonë se ju doni të telefononi atë kuti postare.
Ashtu si ju do të ndonjë nisja dyfishtë tjetër,
ju do të thoni dyfishtë dhe pastaj emrin, por këtë herë ne kemi vënë kllapa katrore,
dhe pastaj numri nuk do të jetë gjatësia e vektorit.
Vini re se në vargjeve ne kurrë nuk mund të ndryshoni gjatësinë,
kështu që ju gjithmonë duhet të përcaktojnë dhe zgjedhin sa kuti,
sa vlerat array juaj është duke shkuar për të mbajtur.
Pra, për të vendosur vlera të ndryshme në rrjet tuaj, ju jeni do të përdorni këtë sintaksë e mëposhtme,
si ju shihni në rrëshqitje.
Indeksi keni mailbox 0 do te behet 1.2,
Indeksi mailbox 1 set me 2.4, etj
Pra, tani që ne kemi shqyrtuar vargjeve pak, le të kthehemi në argc dhe argv.
Ne e dimë se argv tani është një grup i strings.
Kështu që kur një përdorues kalon në - thonë ata janë drejtimin e një program të -
thonë ata. / Përshëndetje David Malan,
çfarë programi do të bëjë për ju tashmë ka ardhur në fakt me atë argc dhe argv janë.
Pra, ju nuk keni nevojë të shqetësohen për këtë.
Argc në këtë rast do të jetë 3 për shkak se ajo i sheh 3 fjalë të veçanta të ndara nga hapësira.
Dhe kështu atëherë array në këtë rast, indeksi i parë do të jetë. / Hello,
tjetër një David, një tjetër Malan.
Does anyone shihni menjëherë çfarë marrëdhënia midis argv,
grup, dhe argc është?
Po. Ne do të merrni në atë në një shembull në args.c.
Le të shohim nëse ne mund të përfitojnë nga marrëdhëniet në mes të 2.
Këtu ju mund të gjeni se në aplikim aplikimi paracaktuar
për të hapur dosjet. c ndonjëherë është Emacs.
Por ne duam të merremi me Gedit, kështu që çfarë ju mund të bëni është që ju mund të drejtë të klikoni në dosjen tuaj C,
shkoni tek Properties, Open With, dhe pastaj zgjidhni Gedit, siç default,
dhe tani programi juaj duhet të hapet në Gedit në vend të Emacs.
Përsosur.
Kështu që këtu unë kam një program që unë dua të shtypura nga çdo argument të command line.
Pra, çfarëdo përdoruesi inputeve, unë dua të kthehen në thelb atë përsëri për ta në një linjë të re.
Pra, çfarë është një strukturë që ne mund të përdorim për të iterate mbi diçka -
diçka që ju ndoshta përdoren në 1 pset tuaj?
Nëse ju doni të shkoni nëpër një numër të caktuar të gjërave? >> [Student] Për lak.
Për lak. Saktësisht. Pra, le të fillojë me të për lak.
Ne kemi për int i = 0. Le të fillojmë me një ndryshore filluese standarde.
Unë jam duke shkuar për të lënë gjendjen për një grup dhe pastaj thonë se i + +, duke shkuar për të bërë gjëra atje.
Dakord.
Pra, duke menduar përsëri në argv, nëse argv është lista e argumenteve të miratuara për programin
dhe argc është numri i argumenteve në program,
atëherë kjo do të thotë se është në thelb argc gjatësia e argv, e drejtë,
sepse nuk do të jetë aq shumë argumente, si vlera e argc.
Pra, nëse ne duam të iterate mbi çdo element në argv,
ne do të duan të hyni në çdo kohë ndryshueshme në argv në indeksin e dhënë.
Kjo mund të përfaqësohet me këtë, apo jo?
Kjo variabël këtu përfaqëson varg të veçantë në këtë rast
sepse kjo është një koleksion string - vargu të veçantë në atë indeksin e dhënë.
Ajo që ne duam të bëjmë, në këtë rast ne duam të shtypura atë, kështu që le të themi printf.
Dhe tani argv është një varg, kështu që ne duam të vënë atë placeholder atje.
Ne duam një linjë të re vetëm për të bërë atë të duken mirë.
Pra, këtu kemi një lak për të. Ne nuk kemi gjendjen ende.
Kështu që i fillon në 0, dhe pastaj çdo herë ajo do të shtypura string dhënë
në atë indeks të veçantë në grup.
Kështu që kur duam të ndaluar shtypjen nga elementet në rrjet?
Kur ne kemi mbaruar, apo jo? Kur kemi arritur fundin e vektorit.
Pra, ne nuk duam të tejkalojë të kaluarën gjatësinë e vektorit,
dhe ne tashmë e dimë, ne nuk kemi nevojë të vërtetë aktive të gjetur se çfarë është gjatësia e argv
sepse ai ka dhënë për ne, dhe çfarë është ajo? Argc. Saktësisht.
Pra, ne duam të bëjmë këtë numër argc proces të kohës.
Unë nuk jam në directory e duhur.
Dakord.
Tani le të bëjë args. Nuk ka gabime, të cilat është e madhe.
Pra, le të vetëm të drejtuar args.
Çfarë është kjo do të kthehen tek ne? Është vetëm do të shtypura atë.
"Ju args futur në program, unë jam duke shkuar për të dhënë atë për ju."
Pra, le të thonë se ne duam të themi pastaj args bar foo.
Pra pastaj ajo shtyp atë prapa ke ne. Të gjithë të drejtë?
Kështu që nuk është një shembull se si ju mund të përdorni argc dhe argv
ditur se argc paraqet gjatësinë e argv.
Sigurohuni që ju nuk e bëni kurrë me vargjeve qasje përtej një gjatësi prej array
sepse C patjetër do të bërtasin në ju.
Ju do të merrni diçka që quhet një faj segmentimit,
që nuk është e bukur, në thelb duke thënë se ju jeni duke u përpjekur për të hyrë në diçka
që nuk ekziston, nuk i takon për ju.
Prandaj sigurohuni, dhe sidomos me zero-indeksimin, ne nuk duam të -
Si për shembull, nëse ne kemi një rrjet të gjatësinë 4,
se indeksi array 4 nuk ekziston sepse ne të fillojë në 0, në zero indeks.
Ajo do të bëhet natyrë e dytë ashtu si për sythe kur ne të fillojë në 0.
Pra, vetëm i mbajnë në mend.
Ju nuk doni të ndonjëherë të hyni në indeksin e një grup që është përtej mundësive tuaja.
Pra, ne mund të shohim tani se si ne mund të lloj të qasjes
argumentet command line që janë miratuar in
Por si ju pa varg, argv është në fakt një grup string.
Pra, kjo nuk është në të vërtetë një numër të plotë, por në të Cezarit ne duam që të merren me integers.
Për fat të mirë, ka një funksion krijuar për ne që në fakt mund të konvertohet në një varg në një numër të plotë.
Gjithashtu këtu nuk kemi të bëjmë me të dhëna përdoruesi, ku ne jemi duke bërë ato
për kontributin këtu për çelës, kështu që ne nuk mund të vërtetë reprompt dhe thonë,
"Oh, më jep një numër të plotë, të themi, nëse ajo nuk është e vlefshme."
Por ne nuk ende duhet të kontrolloni për përdorimin korrekt.
Në Cezarit ato janë të lejuara vetëm për të kaluar në 1 numër,
dhe kështu ata kanë për të kandiduar. / Cezarit dhe pastaj ata duhet të ju jap një numër.
Pra argc duhet të jetë një numër i caktuar.
Çfarë numri do që të jetë, nëse ata duhet të kalojnë ju. / Cezarit dhe pastaj një çelës?
Çfarë është argc? >> [Student] 2. Dy >>. Saktësisht.
Pra, ju doni të bëni të sigurtë që argc është 2.
Përndryshe ju në thelb refuzojnë të drejtuar programin.
Në kryesor është një funksion që thotë int kryesore,
kështu atëherë ne gjithmonë në kthim 0 praktikë të mirë në fund të një programi të suksesshëm.
Pra, nëse, të themi, ata të ju jap 3 argumente command line në vend të 2
apo ju jap 1, për shembull, atëherë çfarë ju do të bëni është që ju do të dëshironi të shikoni për atë
dhe pastaj kthehen duke thënë: 1, jo, unë nuk mund të vazhdojë me këtë program.
[Student] Nuk mund të jetë një hapësirë ​​në tekstin tuaj. Pardon >> mua?
[Student] Nuk mund të jetë një hapësirë ​​e në tekstin që ju jeni duke u përpjekur për të kriptuar.
Ah!
Në kushtet e tekstit që ne jemi duke u përpjekur për të encrypt, që në fakt vjen më vonë
kur japim atë tekst.
Deri tani ne jemi vetëm duke pranuar si argumente komandës numri aktual,
ndryshim aktuale për encryption Cezarit.
[Student] Pse keni nevojë për 2 në krahasim me vetëm argc 1? Ka patjetër numri 1.
Drejtë. Arsyeja pse ne kemi nevojë për 2 argc vend të 1
është sepse kur ju drejtuar një program dhe thonë. / Cezari ose. / hello,
që aktualisht numëron si një argument command line.
Kështu, pra, që tashmë merr 1 dhe kështu, atëherë ne jemi inputting 1 shtesë.
Pra, ju jeni në të vërtetë një varg futjen në argumentin command line.
Çfarë doni të bëni, për të Cezarit ne duam të merremi me një numër të plotë,
kështu që ju mund të përdorni këtë funksion atoi.
Dhe në thelb, ju të kalojë atë në një varg dhe pastaj ajo do të ju kthejë përsëri një numër të plotë
nëse është e mundur për të bërë atë varg në një numër të plotë.
Tani kujtohet kur ne jemi që kanë të bëjnë me gjëra printf ose getString, si kjo,
Ne përfshijnë bibliotekat që janë specifike për ne.
Pra, në fillim ne fillojmë me një diçka të hash tag standarde I / O,. H, si kjo.
E pra, atoi nuk është në njërën prej këtyre bibliotekave,
kështu që ajo që ne duhet të bëjmë është që ne duhet të përfshijë bibliotekën e duhur për këtë.
Pra kujtojnë përsëri në walkthrough 1 ku kam diskutuar funksionin manual.
Ju shkruani njeriun në terminalin tuaj dhe pastaj pasohet nga emri i një funksioni.
Dhe kështu që do të sjellë një listë e tërë e përdorimit të saj,
por edhe kjo do të sjellë deri të cilat biblioteka që i takon.
Kështu që unë do të iki që për ju për të përdorur funksionin manual me atoi
dhe të kuptoj se cilat biblioteka ju duhet të përfshijë të jenë në gjendje të përdorin funksionin atoi.
Pra, ne kemi marrë çelësin dhe tani është fjala për marrjen e plain text,
dhe kështu që në fakt do të jetë dhëna Përdoruesi ku ju të shpejtë.
Ne trajtuar me GetInt dhe GetFloat, dhe kështu në të njëjtën mënyrë
ne jemi duke shkuar për të merret me getString.
Por në këtë rast ne nuk kemi nevojë të bëni ndonjë ose bëni ndërsa duke sythe për të kontrolluar.
GetString patjetër do të na japin një varg,
dhe ne jemi duke shkuar për të encrypt çdo gjë na jep përdoruesit.
Kështu që ju mund të supozojmë se të gjitha këto vargjet përdoruesit futur janë të sakta.
Madhe.
Pra, pastaj një herë ju keni marrë kyç dhe një herë ju keni marrë tekstin,
tani ajo ka mbetur është që ju keni për të shifroj the PLAINTEXT.
Vetëm të shpejt të të mbulojë mbi zhargon, të PLAINTEXT është ajo që ju jep shfrytëzuesi,
dhe ciphertext është ajo që ju të kthehet për ta.
Kështu vargjet, të jetë në gjendje për të shkuar nëpër aktualisht letrën me letër
sepse ne duhet të zhvendoset çdo letër,
ne e kuptojmë se vargjet, në qoftë se ne lloj zhvishem mbrapa Layer,
ne shohim se ata janë me të vërtetë vetëm një listë të karaktereve.
Një vjen pas tjetrës.
Dhe kështu që ne mund të trajtoni vargjet si vargjeve, sepse ata janë të vargjeve të karaktereve.
Pra, thonë se ju keni një varg me emrin tekst,
dhe brenda këtij teksti ndryshueshme është ruajtur Kjo është CS50.
Pastaj teksti në indeksin 0 do të jetë një T kapitalit, indeksi i 1 do të jetë h, etj
Dhe pastaj me vargjeve, në shembull argc në args.c,
ne pamë se kishim të iterate mbi një grup
dhe kështu që ne duhej të iterate nga i = 0 deri unë është më pak se gjatësia.
Pra, ne kemi nevojë për disa mënyra të parafytyruar se çfarë gjatësia e vargut tonë është
në qoftë se ne jemi duke shkuar për të iterate mbi të.
Për fat të mirë përsëri, nuk është një funksion atje për ne, edhe pse më vonë në CS50
ju patjetër do të jetë në gjendje të zbatojë dhe të bëjë funksionin tuaj
që mund të llogarisin gjatësinë e një varg.
Por tani për tani ne jemi duke shkuar për të përdorur gjatësi string, kështu strlen.
Ju të kalojë në një varg, dhe pastaj ajo do të ju kthehen një int që përfaqëson gjatësinë e vargut tuaj.
Le të shikojmë në një shembull se si ne mund të jetë në gjendje për të iterate mbi çdo karakter në një varg
dhe të bëjë diçka me këtë.
Ajo që ne duam të bëjmë është iterate mbi çdo karakter të vargut,
dhe atë që ne duam të bëjmë është që ne të shtypura mbrapa çdo karakter 1 nga 1
me përjashtim të shtojmë diçka tjetër për të.
Pra, le të fillojë me të për lak. Int i = 0.
Ne jemi duke shkuar për të lënë hapësirë ​​për gjendjen.
Ne duam të iterate derisa të arrijmë në fund të vargut, apo jo?
Pra, atëherë çfarë funksioni na jep gjatësinë e vargut?
[Përgjigja e padëgjueshme Student]
Kjo është gjatësia e argumenteve të linjës së komandës.
Por për një varg ne duam të përdorim një funksion që na jep gjatësinë e vargut.
Pra, kjo është gjatësia string.
Dhe kështu, atëherë ju duhet të kalojnë në një varg të saj.
Ajo duhet të dini se çfarë varg ajo ka nevojë për të llogaritur gjatësinë e.
Pra, atëherë në këtë rast ne jemi që kanë të bëjnë me string s.
Madhe.
Kështu, pra, ajo që ne duam të bëjmë, le të printf.
Tani, ne duam të merremi me karaktere. Ne duam të shtypura nga çdo karakter individual.
Kur ju dëshironi që ajo të shtypura nga një noton, ju do të përdorni placeholder si f%.
Me një int ju do të përdorni% d.
Dhe kështu të ngjashme, me një karakter të përdorni% c do të thotë që unë jam duke shkuar për të shtypur një karakter
që është ruajtur në brendësi të një ndryshore.
Pra, ne kemi këtë, dhe le të shtoni një periudhë dhe një hapësirë ​​në të.
Të cilat karakteri jemi duke përdorur?
Ne do të jetë duke përdorur çfarëdo karakteri ne jemi në të vargut.
Pra, atëherë ne do të jetë duke përdorur diçka me varg,
por ne duam të hyrë në karakterin e caktuar aty.
Pra, nëse një varg është vetëm një grup, atëherë si nuk kemi qasje elementet e vargjeve?
Ne kemi ato kllapa katrore, dhe pastaj ne kemi vënë në indeksin e atje.
Pra, ne kemi kllapa katrore. Indeksi i jonë në këtë rast ne mund të përdorni vetëm i. Saktësisht.
Pra, këtu ne jemi duke thënë se ne jemi duke shkuar për të shtypur një karakter ndjekur nga një pikë dhe një hapësirë,
dhe se karakteri do të jetë në letër ith s tonë string.
Unë jam vetëm duke shkuar për të shpëtuar atë. Rregull.
Tani unë jam duke shkuar për të drejtuar gjatësinë string.
Pra, kemi pasur një varg quajtur OMG, dhe tani është e theksuar edhe më shumë.
Në mënyrë të ngjashme, le të thonë se ne të vërtetë duan të marrin një varg nga përdoruesit.
Si mund ta bëjmë këtë?
Para se, si nuk kemi marrë një int?
Ne i thamë GetInt, apo jo? Por kjo nuk është int, kështu që le të getString.
Le të bëjë gjatësi string. Këtu nuk kemi hyrë në një të shpejtë të veçantë.
Kështu që unë nuk e di.
Unë jam duke shkuar për të vënë emrin tim në këtu dhe kështu, atëherë unë mund të bëjë një nga ato gjëra
ku unë të caktojë një fjalë për çdo letër apo diçka të tillë. Cool.
Pra, kjo është gjatësia string.
Pra, ne jemi kthyer Cezarit.
Ne kemi një disa mjete për mënyrën se si ne iterate mbi një varg,
si ne qasje çdo element individual.
Kështu që tani ne mund të merrni përsëri në programin e.
Siç e kam përmendur më parë, në tabelën ASCII, shoku më i mirë,
ju do të jeni për të parë numrat që janë të lidhur me çdo letër.
Kështu që këtu thonë PLAINTEXT ynë është që unë jam i trullosur!
Pastaj secili prej këtyre personazheve do të ketë një numër dhe vlerë ASCII lidhur me të,
edhe apostrof, madje edhe hapësirë, edhe pikëçuditëse,
kështu që ju do të dëshironi që të mbani në mend.
Kështu thonë kyç tonë që përdoruesi përfshirë në argumentin e tyre të linjës së komandës është 6.
Që do të thotë për të letrës pare, i cili është I, e cila është e përfaqësuar nga 73,
ju duam të kthehen te tyre çfarëdo letër është përfaqësuara nga vlerën ASCII e 73 + 6.
Në këtë rast që do të jetë 79.
Tani ne duam të shkojnë në karakter tjetër.
Pra ardhshme në indeksin e 1 plaintext do të jetë apostrof.
Por mos harroni ne vetëm duam të shifroj letra.
Pra, ne duam të sigurohemi që apostrof në fakt qëndron e njëjtë,
se ne nuk do të ndryshojë nga 39 për çdo gjë që është 45.
Ne duam që të mbani atë si një apostrof.
Pra, ne duam të kujtojmë vetëm shifroj letra
sepse ne duam të gjitha simbolet e tjera të mbeten të pandryshuara në programin tonë.
Një tjetër gjë që ne duam është që të ruajnë kapitalizimit.
Pra, kur ju keni një letër të uppercase, ajo duhet të qëndrojë si një uppercase.
Lowercases duhet të qëndrojnë si Fjala.
Kështu që disa funksione të dobishme të jetë në gjendje të merren me shkronja vetëm enciphering
dhe për të mbajtur ruajtjen e kapitalizimit të gjërave
është funksionet isalpha, isupper, islower.
Dhe kështu këto janë funksione që ju kthehen një vlerë Boolean.
Në thelb, e vërtetë apo e rreme. A është kjo një uppercase? Është kjo alfanumerike?
A është kjo një letër, në thelb.
Pra, këtu janë 3 shembuj se si ju do të përdorni këtë funksion.
Në thelb, ju mund të testuar nëse vlera kthehet tek ju nga ky funksion është e vërtetë apo e rreme
bazuar në atë input.
Ose të bëjë diçka nuk shifroj ose Shifrës atë apo të sigurt se kjo është uppercase, etj
[Student] A mund të shpjegojë vetëm ata pak më shumë dhe si ti përdorin ato? Po >>, për sigurt.
Pra, nëse ne shikojmë prapa, këtu kemi një kapital unë, apo jo?
Kështu që ne e dimë se kam shkon o sepse unë + 6 është O.
Por ne duam të sigurohemi se kjo o do të jetë një O. kapitale
Pra, në thelb, kjo është lloj i do të ndryshojë kontributin tonë.
Pra, nëse kjo është uppercase ose nuk do lloj të ndryshojë mënyrën se si të merremi me të.
Pra, atëherë në qoftë se ne përdorim funksionin isupper në këtë indeks të veçantë,
kështu isupper ("I"), që kthehet për ne e vërtetë, kështu që ne e dimë se kjo është e lartë.
Pra, atëherë në bazë të kësaj, më vonë ne do të shkojnë në një formulë
se ju do të jeni duke përdorur për të zhvendosur gjërat në Cezarit,
kështu atëherë në thelb, nuk do të jetë një formulë pak të ndryshme në qoftë se është uppercase
në krahasim me Fjala. Kuptim?
Po. Nuk shqetësohet.
Kam folur pak për të shtuar në një letër të 6, e cila nuk ka fare kuptim
përveç kur ne lloj kuptojmë se këto karaktere
janë lloj i këmbyeshëm me integers.
Çfarë bëjmë ne është që ne të përdorim lloj i hedh nënkuptuar.
Ne do të shkojnë në hedh pak më vonë ku ju merrni një vlerë dhe ju kthejnë atë në një lloj të ndryshme
se ajo fillimisht ishte.
Por me këtë pset ne do të jetë në gjendje të përdorin lloj interchangeably shkronja
dhe përkatëse të tyre vlera integer.
Pra, nëse ju thjesht mbështjellin me një karakter të vetëm kuotat e vetme,
atëherë ju do të jetë në gjendje për të punuar me atë me integers, që kanë të bëjnë me atë si një numër të plotë.
Pra C kapitalit lidhet me 67. F vogla lidhet me 102.
Përsëri, në qoftë se ju doni të dini se këto vlera, shikoni në tryezën tuaj ASCII.
Pra, le të shkojë në disa shembuj se si ju mund të jetë në gjendje të zbres dhe të shtoni,
se si ju mund të vërtetë të vërtetë të punojnë me këto karaktere, përdorin ato interchangeably.
Unë them se ASCIIMath do të llogaritur shtimin e një karakter në një numër të plotë
dhe pastaj tregon karakterin rezultate si dhe vlera rezultate ASCII.
Dhe kështu këtu unë jam duke thënë se - we'll marrëveshje me këtë pjesë më vonë -
por në thelb, unë jam duke thënë se përdoruesit duhet të them ASCIIMath drejtuar së bashku me një çelës,
dhe unë jam duke thënë se kjo kyç do të jetë numri
me të cilat ne do të mund të shtoni këtë karakter.
Kështu që këtu vëreni se pasi që unë jam duke kërkuar një çelës,
pasi që unë jam duke kërkuar që ata janë duke i dhënë mua 1 gjë,
Unë vetëm dua të pranojë. / Asciimath dhe një çelës.
Kështu që unë jam duke shkuar për të kërkuar që argc është e barabartë me 2.
Nëse nuk është, atëherë unë jam duke shkuar për t'u kthyer 1 dhe programi do të dalë.
Kështu që unë jam duke thënë se çelësi nuk do të jetë i pari command line argument,
ajo do të jetë e dyta, dhe siç e shihni këtu,
Unë jam duke shkuar për ta kthyer atë në një numër të plotë.
Atëherë unë jam duke shkuar për të vendosur një karakter të jenë r.
Vini re se lloji i chr ndryshueshme në fakt është një numër të plotë.
Mënyra se unë jam në gjendje të përdorin r si një numër të plotë është duke encasing atë me këto citate të vetme.
Pra, përsëri në deklaratën tonë printf ku ne kemi një placeholder për një karakter
dhe pastaj një placeholder për një numër të plotë,
karakter është përfaqësuara nga chr, dhe integer është çelësi.
Dhe kështu atëherë ne jemi duke shkuar për në rezultat shtoni 2 së bashku.
Pra, ne jemi duke shkuar për të shtuar r + çfarëdo kryesore është,
dhe pastaj ne jemi duke shkuar për të shtypur rezultat i kësaj.
Pra, le të bëjë asciimath. Është e deri më sot, kështu që le të vetëm të drejtuar asciimath.
Oh, por shikoni, kjo nuk ka të bëjë asgjë, sepse ne fakt nuk jepte një çelës.
Pra, kur ai sapo u kthye 1, funksioni ynë kryesor, ajo vetëm u kthye prapa ke ne.
Pra, atëherë le të kalojë në një kyç. Dikush të më jepni një numër. >> [Student] 4.
4. Rregull.
Pra r rritur me 4 do të na japin V, e cila korrespondon me vlerën ASCII e 118.
Kështu, pra, kjo lloj kuptim se -
Në fakt, mund të ju pyes, çfarë mendoni se vlera ASCII e r është në qoftë se r + 4 është 118?
Atëherë, vërtet, r është 114.
Pra, nëse ju shikoni në tabelën ASCII, atëherë, pa dyshim, ju do të shihni se r është e përfaqësuar nga 114.
Pra, tani që ne e dimë që ne mund të shtoni integers në karaktere, kjo duket shumë e thjeshtë.
Ne jemi vetëm do të iterate mbi një varg ashtu siç e pamë në një shembull para.
Ne do të kontrolloni nëse kjo është një letër.
Nëse është, atëherë ne do të zhvendoset atë me çfarëdo kyç është.
Shumë e thjeshtë, përveç kur ju të merrni për të si kjo,
ju shihni se z, përfaqësuar nga 122, atëherë do të ju jap një karakter të ndryshëm.
Ne të vërtetë duan të qëndrojnë brenda alfabetit tonë, apo jo?
Pra, ne duhet të kuptoj se disa mënyra të lloj ambalazhi rreth.
Kur të keni arritur zed dhe ju doni të rritet me një numër të caktuar,
ju nuk doni të shkoni në pjesën përtej ASCII alfabetit;
ju doni të përfundojë prapa gjatë gjithë rrugës për A.
Por mbani në mend ju jeni ende ruajtjen e rastit.
Pra, duke e ditur se letra nuk mund të bëhet simbole
ashtu si simbolet nuk do të ndryshuar si.
Në pset fundit ju patjetër nuk ka nevojë për të,
por një alternativë ishte për të zbatuar pset tuaj babëzitur duke përdorur funksionin modulus.
Por tani ne jemi në të vërtetë do të duhet të përdorin modulus,
kështu që le të shkojnë vetëm mbi këtë pak pak.
Në thelb, kur ju keni x y modulo, që ju jep pjesën e mbetur të ndarë nga x y.
Këtu janë disa shembuj këtu. Ne kemi 27% 15.
Në thelb, kur ju zbres 15 nga 27 si shumë herë të jetë e mundur pa u negative
atëherë ju merrni 12 majtë gjatë.
Pra, kjo është lloj i si në kontekstin matematikë, por si mund të përdorni të vërtetë kjo?
Ajo do të jetë e dobishme për wrapover tonë.
Për këtë, le të them vetëm unë të gjithë ju kërkuar për të ndarë në 3 grupe.
Ndonjëherë ju bëni këtë në grupe dhe diçka si kjo.
Thuaj Unë i thashë, "Mirë, unë dua që ju të gjithë do të ndahet në 3."
Si mund ta bëni këtë?
[Përgjigja e padëgjueshme Student] Po, pikërisht. Count off. Rregull.
Le të bëjë në fakt atë. A ju doni të filloni?
[Studentët jashtë numërimit] 1, 2, 3, 4.
Por mos harroni ... >> [Student] Oh, sorry.
Kjo është një pikë të vërtetë të mirë.
Ju tha 4, por ne të vërtetë duan që ju të thoni 1, sepse ne duam vetëm 3 grupe.
Pra atëherë, si - Jo, kjo është një shembull të vërtetë të mirë, sepse atëherë si mund të ju them 1?
Çfarë është marrëdhënia në mes 4 dhe 1?
E pra, 4 mod 3 është 1.
Pra, nëse ju vazhdoni, ju do të jetë 2.
Pra, ne kemi 1, 2, 3, 1, 2.
Përsëri, ju jeni në të vërtetë personi i 5-të. Si mund të dini të them 2 në vend të 5?
Ju thoni mod 5 3 është 2.
Unë dua të shoh se sa grupet e 3 janë lënë pushim, pastaj të cilën mënyrë jam I.
Dhe kështu, atëherë në qoftë se ne kemi vazhduar së bashku në dhomë të tërë,
atëherë ne do të shohim se ne jemi gjithmonë në fakt zbatuar funksionin mod për veten
të lloj numërimin off.
Kjo është një lloj shumë të prekshme shembull se si ju mund të përdorni modulo
sepse unë jam i sigurt se shumica prej nesh kanë kaluar nëpër atë proces ndoshta
ku ne kemi pasur për të numëruar off.
Çdo pyetje në modulo?
Ajo do të jetë shumë e rëndësishme për të kuptuar konceptet e kësaj,
kështu që unë dua të bëni të sigurtë që ju djema kuptoni.
[Student] Nëse nuk ka mbetur, e bën atë të ju jap numrin aktual?
Nëse një nga 3 e parë të tyre e kishte bërë atë, ai do të u kemi dhënë atyre atë që ata në fakt ishin,
apo do të kemi dhënë atyre [padëgjueshme] >> Kjo është një pyetje e mirë.
Kur nuk ka mbetur për modulo - kështu thonë se ju keni 6 mod 3 -
që në fakt ju jep mbrapa 0.
Ne do të flasim për këtë pak më vonë.
Oh yeah, për shembull, personi 3 - 3 mod është në të vërtetë 3 0, por ajo tha se 3.
Pra, kjo është lloj i si një kapur të brendshëm, për shembull,
si rregull, në qoftë se mod është 0 atëherë unë jam do të jetë personi i 3.
Por ne do të merrni në lloj si ne mund të duan të merren me atë që është 0 vonë.
Deri tani ne kemi një mënyrë disi të Mapping zed në letër e duhur.
Deri tani ne kemi kaluar nëpër këto shembuj,
ne lloj të shohim se si Cezari mund të punojnë.
Ju shikoni 2 alfabete dhe pastaj ju shohin ato zhvendosur.
Pra, le të përpiqemi dhe të shprehë se në aspektin e formulës.
Kjo formulë është dhënë në fakt për ju në spekulim,
por lloj le të shikoni nëpër atë çdo ndryshore të thotë.
Rezultati ynë përfundimtar do të jetë ciphertext.
Pra, kjo thotë se karakteri ith e ciphertext
do të korrespondojnë me karakter ith të plaintext.
Kjo ka kuptim, sepse ne duam që gjithmonë të rreshtuar këto gjëra deri.
Pra, kjo do të jetë karakteri ith e k plus ciphertext, e cila është çelësi jonë -
që e bën kuptim - dhe pastaj ne kemi këtë mod 26.
Mos harroni mbrapa kur ne kishim zed
ne nuk doni të merrni në karakter, kështu që ne të kërkuar për të mod atë
dhe lloji i mbyllur rreth alfabetit.
Pas zed ju do të shkoni në a, b, c, d, deri sa ju mori me numrin e duhur.
Kështu që ne e dimë se zed, qoftë + 6, do të na japë f sepse pas zed vjen a, b, c, d, e, f.
Pra, le të kujtojmë ne e dimë me siguri se zed + 6 do të na japë f.
Në vlerat ASCII, z është 122 dhe f është 102.
Pra, ne duhet të gjejmë një mënyrë për të bërë Cezarit formulën tonë të na japin 102
pas marrjes në 122.
Pra, nëse ne vetëm të zbatojë këtë formulë, ('z' + 6) 26%, që në të vërtetë ju jep 24
sepse 122 + 6 është 128; 128% 26 ju jep 24 mbetur.
Por kjo nuk ka të vërtetë do të thotë f. Kjo nuk është patjetër 102.
Kjo nuk është edhe shkronja në alfabetin 6.
Pra natyrisht, ne duhet të kemi disa mënyra të tweaking kjo pak pak.
Në kushtet e alfabetit të rregullt, ne e dimë se z është letra 26 dhe f është 6.
Por ne jemi në shkenca kompjuterike, kështu që ne jemi duke shkuar për indeksin në 0.
Kështu, pra, në vend të z qenë numri 26, ne jemi duke shkuar për të thonë se është numri 25
sepse një është 0.
Pra, tani le të aplikojnë këtë formulë.
Ne kemi përfaqësuar nga z 25 + 6, i cili ju jep 31.
Dhe 31 mod 26 ju jep 5 si një tjetër.
Kjo është e përsosur, sepse ne e dimë se f është letra 5 në alfabetin.
Por ajo ende nuk është f, e drejtë? Kjo ende nuk është 102.
Kështu, pra, për këtë pset, një sfidë do të jetë duke u përpjekur për të gjetur marrëdhënie
mes konvertimin në mes të këtyre vlerave ASCII dhe indeksi alfabetik.
Në thelb, ajo që ju do të dëshironi të bëni, ju doni të filloni me vlerat ASCII,
por pastaj ju doni të përkthyer që në një farë mënyre një indeks alfabetik
pastaj llogarisin atë letër ai duhet të jetë - në thelb, ajo që indeksi alfabetik i saj është
të karakterit shifër - pastaj të përkthejnë atë përsëri në vlerat ASCII.
Pra, nëse ju rrëmbej nga tavolina juaj ASCII, atëherë provoni dhe për të gjetur marrëdhëniet midis, të themi, 102 dhe 5
ose 122 dhe 25.
Ne kemi marrë çelësin tonë nga argumentet e linjës së komandës, ne keni marrë PLAINTEXT,
ne kemi enciphered atë.
Tani të gjithë ne kemi lënë të bëni është të shtypura atë.
Ne mund ta bëjë këtë një çift të mënyra të ndryshme.
Ajo që ne mund të bëjmë në fakt është shkruar si të shkojmë së bashku.
Si ne iterate mbi karakteret në varg,
ne mund thjesht vetëm të shtypura të drejtë atëherë kur ne të llogaritur atë.
Përndryshe, ju mund të ruani atë në një grup dhe të ketë një rrjet të karaktereve të
dhe në fund iterate mbi këtë grup të tërë dhe të shtypura it out.
Pra, ju keni disa opcione për këtë.
Dhe mos harroni se% c do të jetë placeholder për shtypjen e një karakter.
Kështu që nuk kemi Cezarin, dhe tani ne shkojmë për të Vigenere,
e cila është shumë e ngjashme me Cezarit, por vetëm pak më komplekse.
Pra, në thelb me Vigenere është që ju do të jeni të kaluar në një fjalen.
Pra, në vend të një numri, ju jeni do të ketë një varg,
dhe kështu që do të veprojë si fjalen tuaj.
Pastaj, si zakonisht, ju jeni do të merrni një të shpejtë për një varg nga përdoruesit
dhe pastaj shifroj atë dhe pastaj për t'u dhënë atyre shpinën ciphertext.
Pra, si unë, tha, se është shumë e ngjashme me Cezarit, përveç në vend të zhvendosur nga një numër të caktuar,
Numri është në të vërtetë do të ndryshojë çdo herë që prej karakterit të karakterit.
Për të përfaqësuar se numri aktual të zhvendoset, ai është përfaqësuar nga letrat tastierë.
Pra, nëse ju shkruani në një zhvendosje e një, për shembull, atëherë kjo do të korrespondojnë me një ndryshim prej 0.
Pra, kjo është përsëri kthehet në indeksin alfabetik.
Çfarë mund të jetë e dobishme në qoftë se ju jeni duke parë që ne jemi në të vërtetë kanë të bëjnë me vlerat ASCII
si dhe letrave, si dhe indeksi alfabetik,
ndoshta gjeni apo bëni vetë tabelën ASCII tuaj që tregon indeksin alfabetik të 0 deri 25,
a me z, dhe vlerat ASCII mënyrë që ju mund të shihni lloj marrëdhënie
dhe skemë jashtë dhe të përpiqet dhe të gjeni disa modele.
Në mënyrë të ngjashme, në qoftë se keni qenë të zhvendosur në shkallë të caktuar nga f -
dhe kjo është ose f vogla ose uppercase - atëherë kjo do të korrespondojnë me 5.
Jemi të mirë deri më tani?
Formula për Vigenere është pak më ndryshe.
Në thelb, ju shihni se ajo është vetëm si Cezarit,
përveç në vend të vetëm k kemi k indeksi j.
Vini re se ne nuk jeni duke përdorur, sepse në thelb i, gjatësinë e fjalen
nuk është domosdoshmërisht gjatësinë e ciphertext tonë.
Kjo do të jetë një pak më të qarta kur ne shohim një shembull që unë kam një grimë më vonë.
Në thelb, në qoftë se ju drejtuar programin tuaj me një fjalen e ohai,
atëherë kjo do të thotë se çdo herë, ohai do të jetë zhvendosja tuaj.
Pra, në varësi se çfarë pozicioni ju jeni në fjalen tuaj,
ju jeni do të zhvendoset caktuar karakterin tuaj ciphertext nga ajo sasi.
Përsëri, ashtu si Cezari, ne duam të sigurohemi që ne të ruajmë kapitalizimin e gjërave
dhe ne vetëm shkronja shifroj jo, karaktere apo hapësirat.
Pra, të shohim pas Cezarit në funksionet që ju mund të keni përdorur,
mënyrë që ju të vendosur se si të zhvendoset gjëra, dhe të aplikojnë atë në programin tuaj këtu.
Pra, le të ndajë këtë.
Ne kemi një PLAINTEXT që ne kemi marrë nga përdoruesit nga getString
duke thënë se kjo ... është CS50!
Pastaj ne kemi një fjalen e ohai.
E para 4 karaktere janë mjaft të thjeshta.
Ne e dimë se T do të jetë zhvendosur nga o,
atëherë h është do të zhvendosur nga H, I është do të zhvendosur nga një.
Këtu ju shihni se a përfaqëson 0,
kështu atëherë vlera përfundimtar është në fakt vetëm letër njëjtë si më parë.
Pastaj s është zhvendosur nga unë.
Por pastaj ju keni këto periudha këtu.
Ne nuk duam të shifroj atë, kështu që atëherë ne nuk do të ndryshojë atë nga çdo gjë
dhe vetëm të shtypura nga periudha pandryshuar.
[Student] Unë nuk e kuptoj se si ju e dini se kjo është zhvendosur nga - Ku ka me ju - >> Oh, sorry.
Në krye këtu ju shihni se command line argumenti ohai këtu,
që do të jetë fjalen.
Dhe kështu në thelb, ju jeni të çiklizmit mbi personazhet në fjalë.
[Student] Pra, o do të jetë i ndryshueshëm njëjtë -
Kështu o korrespondon me një numër të caktuar në alfabetin.
[Student] E drejta. Por ku keni marrë pjesë CS50 nga?
Oh. Kjo është në getString ku ju jeni si, "Më jepni një varg të kodifikuar".
[Student] Ata do të ju japin këtë argument për të zhvendosur nga
dhe pastaj ju do të pyesni për vargun tuaj të parë. Po >>.
Kështu që kur ata të drejtuar programin, ata do të përfshijë fjalen
Në linjë argumentet e tyre, kur ata të drejtuar komandës atë.
Pastaj një herë ju keni kontrolluar se ata kanë dhënë në të vërtetë ju 1 dhe jo më shumë, jo më pak,
atëherë ju do të jeni për të nxitur ata për një varg, thonë: "Më jep mua një varg".
Pra, kjo është ajo ku në këtë rast ata kanë dhënë këtë ... është CS50!
Pra, atëherë ju jeni do të përdorin atë dhe të përdorni ohai dhe iterate gjatë.
Vini re se këtu kemi anashkaluar encrypting periudhat,
por në aspektin e pozitës sonë për ohai, një tjetër kemi përdorur o.
Në këtë rast kjo është pak e vështirë për të parë, sepse kjo është 4,
kështu që le të vazhdojë një grimë. Vetëm rrinë me mua këtu.
Pastaj kemi dhe s i, të cilat janë përkthyer më pas nga o dhe h respektivisht.
Pastaj ne kemi një hapësirë, dhe kështu atëherë ne e dimë se ne nuk jemi duke shkuar për të shifroj hapësirat.
Por njoftim se në vend që të shkojnë për një vend në këtë të drejtë këtu,
ne jemi encrypting nga një - Unë nuk e di nëse ju mund të shihni se - të drejtë këtu.
Pra, kjo nuk është si ju paracaktuar të vërtetë, të themi, o shkon këtu, h shkon këtu,
një shkon këtu, I shkon këtu, o, h, një, I, o, h, një, I. Ju nuk e bëjmë këtë.
Ju vetëm ndryshim pozitën tuaj në fjalen
kur ju e dini se ju jeni në të vërtetë do të encrypting një letër aktuale.
Bën që të lloj kuptim?
Rregull.
Pra, vetëm disa lajmërimeve.
Ju dëshironi të bëni të sigurtë që ju vetëm të përparuar në letër tjetër në fjalen tuaj
nëse karakter në plaintext tuaj është një letër.
Pra, thonë se ne jemi në o.
Vërejmë se karakteri tjetër, indeksi i të plaintext, është një numër, për shembull.
Atëherë ne nuk do të përparojnë j, indeksi për fjalen tonë, derisa të arrijmë një tjetër letër.
Përsëri, edhe ju doni të bëni të sigurtë që ju wraparound në fillim të fjalen
kur ju jeni në fund të saj.
Nëse ju shikoni këtu ne jemi në unë, një tjetër duhet të jetë o.
Pra, ju doni të gjeni një mënyrë për të qenë në gjendje për wraparound në fillim të fjalen tuaj
çdo herë që ju të arrini në fund.
Dhe kështu përsëri, çfarë lloji i operatorit është i dobishëm në këtë rast për mbështjellës rreth?
Ashtu si në të numërimit off shembull.
[Student] shenjë qind. >> Yeah, shenja për qind, e cila është modulo.
Pra modulo do të vijë në dobishëm këtu, kur ju doni të përfundojë mbi indeksin në ohai tuaj.
Dhe vetëm një aluzion të shpejtë: Provoni të mendoni për mbështjellës mbi fjalen pak a shumë si jashtë numërimit,
ku në qoftë se ka 3 grupe, personi i 4,
numri i tyre që thanë ata ishte 4 mod 3, i cili ishte 1.
Kështu që të përpiqet dhe të mendojnë për atë në këtë mënyrë.
Si ju pa në formulën, kudo që ju keni Ci dhe pastaj pi por pastaj kj,
ju doni të bëni të sigurtë që ju të mbani gjurmët e atyre.
Ju nuk keni nevojë për të thirrur atë unë, ju nuk keni nevojë për të thirrur atë j,
por ju doni të bëni të sigurtë që ju të mbani gjurmët e pozitës që ju jeni në në plaintext tuaj
si dhe pozicionin që ju jeni në në fjalen tuaj
sepse ato nuk janë domosdoshmërisht do të jetë e njëjtë.
Jo vetëm që e bën fjalen - ajo mund të jetë një gjatësi krejtësisht të ndryshme se sa plaintext tuaj.
Gjithashtu, PLAINTEXT tuaj, nuk janë numrat dhe karaktere,
kështu që ajo nuk do të përkryer ndeshje së bashku. Po.
[Student] A ka një funksion për të ndryshuar rast?
Ju mund të ndryshojë një për një kryeqytet? Po >>, atje patjetër është.
Ju mund të shikoni - Unë besoj se është toupper, të gjitha 1 fjalë.
Por kur ju jeni duke u përpjekur për të shifrojë gjëra dhe ruajtur tekstin,
është më mirë që të ketë në thelb raste të veçanta.
Në qoftë se kjo është një uppercase, atëherë ju doni të zhvendoset nga kjo
sepse në formulën tuaj, kur ju shikoni mbrapa se si ne duhet të lloj lëvizje
këmbyeshme mes mënyrën ASCII të përfaqësojnë numrat
dhe indeksi alfabetik aktuale, ne duam të sigurohemi
atje do të jetë një lloj i modelit që ju jeni do të përdorin.
Një shënim mbi modelin, në të vërtetë.
Ju do të jeni patjetër të merret me numra.
Mundohuni të mos përdorni numrat magjike, e cila është një shembull i stilit.
Pra, thonë se ju doni për çdo ndryshim në kohë nga diçka si -
Mirë, kështu që hint, një tjetër spoiler është kur ju do të jeni të zhvendosur diçka
me një shumë të caktuar, nuk përpiqet për të përfaqësuar që nga një numër aktual
por provoni dhe të shihni nëse ju mund të përdorni vlerën ASCII, e cila do lloj bëjë më shumë kuptim.
Një tjetër shënim: Sepse ne jemi që kanë të bëjnë me formula,
edhe pse TF juaj do të dinë se çfarë lloj model që ju mund të jeni duke përdorur,
mirë në komente llojin tuaj të shpjegojnë logjikën, si,
"Unë jam duke përdorur këtë model, sepse ..." dhe lloji i shpjegojnë modelin e përmbledhur në komentet tuaja.
[Kjo ishte walkthrough 2] Nëse nuk ka ndonjë pyetje të tjera, atëherë unë vetëm do të qëndrojnë këtu për një pak.
Good luck me pset tuaj 2: kripto dhe faleminderit për të ardhur.
[Student] Ju faleminderit. Thanks >>.
[Intro Media Gjinia]