[Powered by Google Translate] [Walkthrough - Vandamál Set 2]
[Zamyla Chan - Harvard University]
[Þetta er CS50. CS50.TV]
Allt í lagi. Halló, allir, og velkomin til walkthrough 2.
Fyrst vil ég óska ​​til hamingju þú fyrir að klára pset 1.
Ég veit að það gæti verið svolítið erfitt fyrir sum ykkar,
gæti hafa verið fyrsta tölvan program sem þú skrifaðir,
en bara muna að í lok þessa, þegar þú lítur til baka í lok misseris,
þú munt líta á pset 1 og þú munt segja: "Hey, ég hefði getað gert það í 5 mínútur."
Svo vita og treysta því að í lok þessa sem þú munt örugglega finna pset 1 alveg einfalt.
En nú er það mikið afrek, og til hamingju til að fá gert.
Nú, einnig a fljótur í huga áður en við komum inn í kjöt á walkthrough.
Ég vil bara að gera a fljótur í huga að ég stundum ekki hafa nægan tíma
á walkthroughs til að fara í gegnum hvert einasta leið til að gera vandamálið sett
og frekar bara kannski einblína á 1 eða 2 konar gerð,
leiðir sem þú gætir gert þetta.
En það er ekki að segja að þú ert bannaður frá að gera það á annan hátt.
Það eru oft, eins og með tölvunarfræði, margar leiðir til að gera hlutina,
og svo örugglega ekki hika við að nota aðra tegund af lausn en ég kann að hafa fram.
[Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net]
[Pset2 - 0. Hluta Spurningar - 1. Caesar - 2. Vigenere]
Allt í lagi. Svo vandamálið sett 2: Crypto er skemmtilegt.
Aftur, með hverjum pset þú munt byrja með hluta af spurningum
það er að fara að fara fram í köflum þinn með úthlutun kennslu náungi þinn.
Við erum ekki að fara að fara í gegnum þetta á walkthrough,
en þeir örugglega mun hjálpa þér að ljúka pset.
Þannig er fyrsti hluti af vandamálinu setja Caesar.
Og svo í keisarans einhver mun fara þér lykill með heiltala,
og þú verður að dulkóða textastrenginn sem þeir veita þér
og gefa þeim aftur dulkóðuð hlutur.
Ef einhver horfði á jólin Story, það er dæmi um að það.
Þá er seinni hluti af vandamálinu setja Vigenere,
sem er a fleiri háþróaður dulkóðun tækni.
Og svo við erum að fara að encipher stykki af texta,
nema í stað með aðeins einni heiltölu, erum við í raun að fara að umrita það
með leitarorð sem notandi mun veita okkur.
Allt í lagi, þannig að fyrsta tól í verkfærakistu dag er í raun að fara að uppfæra tækið.
Á umræðu borð við viljum sjá hlutina eins, "Hvers vegna ekki þetta?"
"Hvers vegna ekki fram 50 verk?"
og oft er lausnin í raun bara til að uppfæra tækið þitt.
Og svo ef þú keyrir bara í flugstöðinni glugga í sudo tæki þínu Yum-y -
það er fáni segja já, uppfæra allt - Update,
þá tæki mun uppfæra ef þörf krefur.
Og það er ekki meiða ef þú ert nú þegar í nýjustu útgáfu af tækinu.
Þá verður bara að segja engar nýjar uppfærslur í boði og þú getur haldið áfram að vinna með.
En þetta er gott að framkvæma jafnvel í hvert skipti sem þú opnar tækið
vegna þess að við erum enn mjög mikið -
stundum ef við komum inn í galla - Lagað hana í tækinu.
Svo tryggja að þú hafir nýjustu útgáfu af tækinu
og hlaupa að uppfæra það.
Allt í lagi. Svo þar sem við erum að fást við bréf og breytast enciphering hluti,
við erum að fara að virkilega að verða bestu vinir við ASCII töfluna okkar.
Það eru fjölmargir sjálfur á netinu, ef þú finnur. Kannski jafnvel að gera þitt eigið.
Í grundvallaratriðum, með hverjum staf og hvert númer og hvert eðli
There er a tala í tengslum við þá,
og svo það er gott að sjá ASCII gildi þeirra hlið raunverulegt bréf.
Það mun örugglega hjálpa þér í vandamál setja.
Eitt sem raunverulega hjálpaði mér í þetta vandamál sett var í raun prenta það út,
og eins og ég var að fara í gegnum, myndi ég reyndar draga á það,
skrifa, "Ef þetta er að fara þangað, þá ..."
Konar draga á það og merkja það upp, verða bestu vinir við ASCII töflunni.
Þá höfum við nokkrar aðrar verkfæri til ráðstöfunar okkar.
Að þessu sinni í stað þess vekur reyndar notanda fyrir alla inntak þeirra
við erum að fara að gera samsetningu.
Við ætlum að biðja þá um nokkurt inntak,
en við erum líka að fara bara að nota the stjórn lína rifrildi.
Svo þegar þeir hlaupa program, yfirleitt er sagt. / Halló, til dæmis,
Ef forritið þitt var hello.c.
En í þetta skiptið í stað þess bara að segja að, þeir geta sett orð, rök eftir.
Og svo við erum að fara að nota það sem þeir fara í okkur og inntak þeirra eins og heilbrigður,
svo flytja út bara vekur að heiltala heldur einnig með því að nota stjórn lína rifrildi.
Og þá munum við fara í fylki og strengi, sem við munum vera að nota mikið eins og heilbrigður.
Hér er bara dæmi um 1 lítill ASCII töfluna.
Eins og ég sagði, hvert bréf samsvarar númeri
og svo kynna þér það. Það mun koma sér vel.
Og seinna þegar við byrjum að gera sumir ASCIIMath takast með númerum -
bæta, draga þá - þá örugglega gott að vísa í þessa töflu.
Svo er hér dæmi um Caesar dulmál - eitthvað sem þú gætir hafa spilað með.
Það er bara hjól. Í meginatriðum, það er ytri stafróf og þá er innri stafróf.
Svo er hérna dæmi um Caesar dulmál en með takka af 0.
Í meginatriðum, A er í samræmi við A, B er í samræmi við B, alla leið upp til Z.
En þá segjum við vildum lykil af 3, til dæmis.
Þá myndum við snúa innri hjólinu þannig að A nú raða í beina röð með D, osfrv
Og svo er þetta í raun það sem við erum að fara að gera.
Við höfum ekki hjól, en það sem við erum að fara að gera er að gera áætlun okkar
konar breyting stafrófið með okkur ákveðna upphæð af tölum.
Svo eins og ég sagði áður, við erum að fara að takast á við stjórn lína rifrildi
og fá heiltölu.
Svo er leiðin sem notandinn mun keyra Caesar program með því að segja. / Caesar
og slá síðan inn númer eftir það.
Og þessi tala táknar takka á vakt,
hversu oft þú ert að fara að snúa innri hjól Caesar dulmál þinn.
Og svo þú sérð hér er dæmi.
Ef við inn stafina frá A til L í Caesar dulmál okkar,
þá myndi inntak D í O vegna þess að það er hvert bréf færst yfir 3 sinnum,
bara eins og dæmi um hjól sem ég sýndi þér.
Svo ef þú færð til dæmis, þetta er CS50!
þá væri líka færa alla stafina.
Og það er mikilvægt bæði keisarans og Vigenere
er að við erum að fara að sleppa yfir allir non-bréf.
Svo allir rými, stafi, etc, tölur, við erum að fara að halda þeim sama.
Við erum bara að fara að skipta á bréfum í þessu tilfelli.
Svo eins og þú sérð í hjólinu, höfum við bara stafina í boði fyrir okkur,
þannig að við viljum bara að skipta stafina og dulkóða bréf.
Svo the fyrstur hlutur til gera, sá þig að notkun fyrir keisaranum í vandamál setja 2
er að keyra Caesar og síðan slá inn númerið þegar þú keyrir það í flugstöðinni.
Svo er það sem við þurfum að gera til að einhvern veginn fá þessi lykill og sjá hana.
Og svo viljum við einhvern veginn sjá það er að fara að vera á öðrum stjórn lína rifrildi.
Sú fyrsta er að fara til vera. / Caesar, og næsta er að fara að vera lykill tala.
Svo áður en við höfðum INT helstu (tóm) að byrja C forrit okkar.
Við ætlum að afhýða aftur lag svolítið
og í raun sjá að í stað þess farið í tóm til meginvirkni okkar
við erum í raun að takast á við 2 þáttum.
Við höfum int heitir argc og fylki af strengjum heitir argv.
Svo er argc heiltala,
og það táknar fjölda rökum samþykkt á forritinu.
Og þá er argv raun lista yfir rök liðin.
Öll rök eru strengir, og svo stendur argv array, lista af strengjum.
Við skulum tala um fylki svolítið.
Fylki er í raun ný gögn uppbygging.
Við höfum ints, við höfum tveggja manna, höfum við strengi, og nú höfum við fylki.
Fylki er gögn uppbygging sem getur haldið mörg gildi af sömu gerð,
svo í raun, lista yfir hvað tegund þú vilt.
Í meginatriðum, ef þú vilja a lista yfir heilar allt í 1 breytu,
þá myndi búa til nýja breytu sem var af gerðinni int array.
Svo fylki eru núll lán, sem þýðir að fyrsti þáttur í fylki er í vísitölunni 0.
Ef array er lengd 4, eins og í þessu dæmi, þá síðustu þáttur þinn væri á vísitölu 3,
sem er 4 - 1.
Svo að búa til array, viltu gera eitthvað eins og this.
Segjum að þú vildir að tvöfalda fjölda.
Þetta gildir um hvers konar gögn tegund, þó.
Svo segja að þú vilt að tvöfalda fjölda. Segjum að þú vilt kalla það pósthólf.
Rétt eins og þú vilt frumstilla önnur tvöfaldur,
þú myndir segja tvöfaldur og þá nafn, en í þetta skiptið vorum við að setja hornklofa,
og svo númerið verður lengd fylkisins.
Athugaðu að í fylki við getum ekki alltaf breytt lengd,
þannig að þú þarft alltaf að skilgreina og velja hversu marga reiti,
hversu mörg gildi array er að fara að halda.
Svo að setja mismunandi gildi í array þinn, ert þú að fara að nota þetta eftirfarandi setningafræði,
eins og þú sérð á mynd.
Pósthólfið Þú hefur vísitalan 0 verður að vera stillt á 1,2,
pósthólf 1 er vísitala neysluverðs sett við 2,4, osfrv
Svo nú er að við höfum farið Fylki hluti, við skulum fara aftur til argc og argv.
Við vitum að argv er nú fylki af strengjum.
Svo þegar notandi fer í - segja þeir að keyra forrit -
þeir segja. / Halló David Malan,
hvað the program vilja gera fyrir þig þegar er í raun að koma upp með það argc og argv eru.
Svo þú þarft ekki að hafa áhyggjur óður í þessi.
Argc í þessu tilfelli væri 3 því það sér 3 mismunandi orð meðbiliámilli.
Og svo þá array í þessu dæmi, fyrsta vísitölu væri. / Halló,
næsta einn Davíð, næsta einn Malan.
Hefur einhver séð strax hvað tengslin milli argv,
array, og argc er?
Já. Við munum fá inn að í td í args.c.
Við skulum sjá hvort við getum nýtt á sambandi milli 2.
Hér þú getur fundið það í tækið sjálfgefið forrit
að opna. c skrá er stundum EmacsName.
En við viljum að takast á við gedit, svo það sem þú getur gert er að þú getur hægri smellt á skrána C þinni,
fara Properties, Opna með, og þá velja gedit, sjálfgefið
og nú program ætti að opna í gedit stað EmacsName.
Perfect.
Svo hér er ég með forrit sem ég ætla að prenta út hvert lína rifrildi.
Svo hvað sem notandi inntak, ég vil í raun skila aftur til þeirra á nýja línu.
Svo er það skipulag sem við getum notað til að iterate yfir eitthvað -
eitthvað sem þú notaðir líklega pset 1 þínum?
Ef þú vilt fara í gegnum tiltekins fjölda af hlutum? >> [Nemandi] for lykkju.
Til hliðar. Einmitt. Svo skulum byrja með til hliðar.
Við höfum fyrir int i = 0. Við skulum byrja bara með venjulegu frumstilling breytu.
Ég ætla að fara að skilyrði fyrir hóp og þá segi ég + +, að fara að gera hlutina þar.
Allt í lagi.
Svo hugsa aftur til argv ef argv er listi af rökum samþykkt til the program
og argc er fjöldi rök í áætluninni,
þá þýðir það að argc er fyrst og fremst lengd argv, hægri,
af því að það eru að fara að vera eins mörg rök sem gildi argc.
Svo ef við viljum iterate yfir hvert frumefni í argv,
við erum að fara til að vilja hverju sinni aðgang að breytu í argv á tilteknu vísitölu.
Það er hægt að lýsa með þessu, ekki satt?
Þessi breyta hér táknar tiltekna band í þessu tilfelli
því það er band array - tiltekna band á þeim tilteknu vísitölu.
Það sem við viljum gera, í þessu tilfelli sem við viljum að prenta það út, þannig að við skulum segja printf.
Og nú er argv a band, þannig að við viljum setja þessi tákn þar.
Við viljum nýja línu bara til að gera það líta vel út.
Svo hér höfum við fyrir lykkju. Við höfum ekki ástand enn.
Svo byrjar ég á 0, og þá í hvert skipti sem það er að fara að prenta gefið band
á viðkomandi vísitölu í fylki.
Svo þegar viljum við hætta að prenta út þætti í fylki?
Þegar við höfum lokið, ekki satt? Þegar við höfum náð enda fylkisins.
Þannig að við viljum ekki að fara framhjá lengd fylkisins,
og við vitum nú þegar að við þurfum ekki að í raun virkan finna út hvað lengd argv er
vegna þess að það er gefið okkur, og hvað er það? Argc. Einmitt.
Þannig að við viljum gera þetta argc ferli nokkrum sinnum.
Ég er ekki í rétta möppu.
Allt í lagi.
Nú skulum gera viðföng. Engar villur, sem er frábært.
Svo við skulum bara keyra viðföng.
Hvað er þetta að fara að koma aftur til okkar? Það er bara að fara að prenta hana aftur.
"Þú inputted viðföng í áætluninni, ég ætla að gefa það aftur til þín."
Svo skulum segja að við viljum segja viðföng þá foo bar.
Svo þá prentar það út aftur til okkar. Allt í lagi?
Svo er dæmi um hvernig hægt er að nota argc og argv
vita að argc táknar lengd argv.
Gakktu úr skugga um að þú ert ekki alltaf með Fylki aðgang einn utan lengd fylkisins
því C mun örugglega hrópa á þig.
Þú munt fá eitthvað sem kallast a skiptingu kenna,
sem er aldrei gaman, í rauninni að segja að þú ert að reyna að fá aðgang eitthvað
sem er ekki til, ekki tilheyrir þér.
Svo tryggja, og sérstaklega með núll-flokkun, við viljum ekki -
Eins og til dæmis, ef við höfum fjölda lengd 4,
að array vísitölu 4 er ekki til vegna þess að við byrja á 0, á núll vísitölunni.
Það mun verða annað eðli alveg eins og lykkjur þegar við byrja á 0.
Svo bara hafa það í huga.
Þú vilt ekki alltaf aðgang vísitölu fjölda sem er utan seilingar.
Þannig getum við séð nú hvernig við getum konar aðgang
stjórn lína rök sem liðin inn
En eins og þú sást band er argv er í raun band array.
Svo það er í raun ekki heiltala enn, en í keisarans við viljum takast á við heiltölur.
Til allrar hamingju, það er fall búið til fyrir okkur að geta í raun breyta streng heiltala.
Einnig hér erum við ekki að fást við notandi inntak sem við erum vekur þá
fyrir hjálpina hér fyrir takkann, þannig að við getum í raun ekki reprompt og segja,
"Ó, gef mér annan heiltala, segja, ef það er ekki gild."
En við þurfum samt að athuga að notkun.
Í keisarans þeir eru aðeins heimilt að fara í 1 númer,
og svo þeir þurfa að hlaupa. / Caesar og þeir verða að gefa þér númerið.
Svo hefur argc að vera ákveðinn fjölda.
Hvaða númer myndi það vera ef þeir þurfa að fara þér. / Caesar og þá lykillinn?
Hvað er argc? >> [Nemandi] 2. >> Two. Einmitt.
Svo þú vilja til vera viss um að argc er 2.
Annars neita í rauninni að hlaupa the program.
Í helstu það fall sem segir int helstu,
svo þá erum við alltaf í gott starf aftur 0 við lok árangursríku áætlun.
Svo ef, segjum, þeir gefa þér 3 stjórn lína rifrildi í stað 2
eða gefa þér 1, til dæmis, þá hvað þú munt gera er að þú þarft að athuga að
og svo aftur 1 segja, nei, ég get ekki haldið áfram með þessu forriti.
[Nemandi] Það getur ekki verið pláss í texta. >> Fyrirgefðu mér?
[Nemandi] Það getur ekki verið pláss í textanum sem þú ert að reyna að dulkóða.
Ah!
Í ljósi þeirra texta sem við erum að reyna að dulkóða, sem kemur reyndar síðar
þegar við gefum þessi texti.
Svo núna erum við bara að samþykkja sem rök stjórn í raun númer,
raunveruleg breyting fyrir Caesar dulkóðun.
[Nemandi] Hvers vegna þarf 2 í stað þess að bara 1 argc? Það er örugglega 1 númer.
Hægri. Ástæða þess að við þurfum 2 fyrir argc stað 1
er vegna þess að þegar þú ert að keyra forrit og segja. / Caesar eða. / halló,
að telja í raun og veru eins og stjórn lína rifrildi.
Svo sem tekur nú þegar upp 1 og svo þá erum við inputting 1 aukalega.
Svo þú ert að inputting raun band í stjórn lína rifrildi.
Það sem þú vilt gera, fyrir keisarann ​​átt við viljum að takast á við heiltölu,
svo þú getur notað þetta atoi virka.
Og í raun, gefa þér það í streng og þá mun það skila þér aftur heiltölu
ef það er hægt að gera það band inn heiltölu.
Nú man þegar við erum að fást við printf eða GetString, hlutum eins og þessi,
Við fela í bókasöfnum sem eru sérstaklega við okkur.
Svo í upphafi við að byrja með kjötkássa tag staðall I / O,. H, eitthvað svona.
Jæja, atoi er ekki í einum af þessum bókasöfnum,
svo er það sem við þurfum að gera að við þurfum að fela rétt bókasafn fyrir það.
Svo muna aftur til walkthrough 1 þar sem ég fjallaði um handbók virka.
Þú slærð mann í flugstöðinni og síðan fylgt eftir nafni virka.
Og svo það mun koma upp a heild listi af notkun þess,
en eins og það mun koma upp sem safn sem tilheyrir.
Svo ég ætla að láta það þig til að nota handbók virka með atoi
og reikna út hvaða bókasafn sem þú þarft að fela að vera fær um að nota atoi virka.
Þannig að við höfum fengið lykilinn og nú kemur það til að fá texta,
og svo sem í raun er að fara að vera notandi inntak sem þú hvetja.
Við fjallað GetInt og GetFloat, og svo að sama skapi
við erum að fara að takast á við GetString.
En í þessu tilfelli sem við þurfum ekki að gera allir að gera á meðan eða á meðan lykkjur til að athuga.
GetString mun örugglega gefa okkur a band,
og við erum að fara að dulkóða hvað notandinn gefur okkur.
Svo er hægt að gera ráð fyrir að öllum þessum notanda inputted strings eru réttar.
Frábært.
Svo þegar þú hefur fengið lykil og þegar þú hefur fengið texta,
nú það sem eftir er að þú þarft að encipher kæra.
Bara til fljótt ná yfir lingo, kæra er það sem notandinn gefur þér,
og ciphertext er það sem þú aftur til þeirra.
Svo strengi, til að vera fær um að fara í gegnum í raun bréf með bréfi
vegna þess að við verðum að skipta öllum bréf,
Við skiljum að strengi, ef við svona afhýða aftur lag,
sjáum við að þeir eru bara í raun listi yfir stafi.
Einn kemur eftir öðrum.
Og svo við getum meðhöndla strengi sem fylki vegna þess að þeir eru fylki af stöfum.
Svo segja þú hafa a band heitir texta,
og innan þess breytu texta er geymd Þetta er CS50.
Þá texti á vísitölu 0 væri höfuðborg T, 1 er vísitala neysluverðs væri h, o.fl.
Og þá með fylki í argc td í args.c,
sáum við að við þurftum að iterate yfir fylki
og svo við þurftum að iterate frá i = 0 fram i er minna en lengd.
Þannig að við þurfum á einhvern hátt að vangaveltur út hvaða lengd band okkar er
ef við erum að fara að iterate yfir það.
Sem betur fer aftur, það er fall þar fyrir okkur, þó síðar í CS50
þú munt örugglega vera fær um að framkvæma og gera eigin virka
sem getur reiknað lengd streng.
En nú erum við að fara að nota band lengd, svo strlen.
Þú fara í streng, og þá mun það skila þér int sem sýnir lengd band þinn.
Við skulum líta á dæmi um hvernig við gætum vera fær um að iterate yfir hvern staf í streng
og gera eitthvað með það.
Það sem við viljum gera er að iterate yfir hvern staf í strengnum,
og það sem við viljum gera er að við prentað aftur hvern staf 1 af 1
nema við bætum eitthvað við hliðina á henni.
Svo skulum byrja með til hliðar. Int i = 0.
Við ætlum að fara pláss fyrir ástand.
Við viljum iterate fyrr en við náum í lok band, ekki satt?
Svo hvað þá aðgerð gefur okkur lengd strengsins?
[Inaudible nemandi svar]
Það er lengd lína rifrildi.
En fyrir streng sem við viljum að nota aðgerð sem gefur okkur lengd strengsins.
Svo það er band lengd.
Og svo þá verður þú að fara í band við það.
Það þarf að vita hvaða band það þarf að reikna út lengd.
Svo í þessu tilfelli sem við erum að fást við er strengur.
Frábært.
Svo það sem við viljum gera, við skulum printf.
Nú viljum við að takast á við persónur. Við viljum að prenta út hverja einstaka staf.
Þegar þú vilt það til að prenta út fljóta, myndir þú nota tákn eins og% f.
Með INT þú myndir nota% d.
Og svo á sama hátt, með persónu sem þú notar% c að segja að ég ætla að fara að prenta staf
sem er geymd inni í breytu.
Þannig að við höfum það, og við skulum bæta við tíma og rúm til þess.
Hvaða persóna erum við að nota?
Við ætlum að vera með hvað sem persóna við erum á af the band.
Svo við erum að fara að vera með eitthvað með band,
en við viljum vera að nota ákveðin eðli þar.
Svo ef strengur er bara fylki, þá hvernig aðgang við þætti fylki?
Við höfum þá hornklofum, og þá erum við að setja vísitölu þar.
Þannig að við höfum hornklofum. Vísitala okkar í þessu tilfelli getum við bara notað i. Einmitt.
Svo hér erum við að segja að við erum að fara að prenta staf á eftir punkti og aðstöðu,
og það eðli er að fara til vera the ith bréf í S band okkar.
Ég ætla bara að fara að spara það. Allt í lagi.
Nú ætla ég að keyra band lengd.
Svo fengum við band heitir OMG, og nú er lögð áhersla á enn meira.
Á sama hátt, við skulum segja að við viljum í raun og veru að fá band frá notanda.
Hvernig gætum við gert þetta?
Áður, hvernig fáum við int?
Við sögðum GetInt, ekki satt? En þetta er ekki int, þannig að við skulum GetString.
Við skulum gera band lengd. Hér ekki inn ákveðna hvetja.
Svo ég veit ekki.
Ég ætla að setja nafn mitt hér og svo þá get ég gert eitt af þessum hlutum
þar sem ég tengja orð fyrir hvern staf eða eitthvað svoleiðis. Cool.
Svo það er band lengd.
Þannig að við erum aftur á keisaranum.
Við höfum nokkur tæki um hvernig við iterate yfir band,
hvernig við aðgang hverja einustu frumefni.
Svo nú getum við fengið aftur til áætlun.
Eins og ég nefndi áður, í ASCII töflunni, besti vinur þinn,
þú ert að fara að sjá tölurnar sem eru tengd við hvert bréf.
Svo hér segja kæra okkar er ég svimar!
Þá hver þessara persóna er að fara að hafa númer og ASCII gildi í tengslum við það,
jafnvel úrfellingarmerki, jafnvel pláss, jafnvel upphrópunarmerki,
svo þú þarft að hafa það í huga.
Svo segja lykilinn okkar að notandi með í stjórn lína rifrildi þeirra er 6.
Það þýðir að í fyrsta bréfinu, sem er ég, sem er táknað með 73,
þú vilt fara aftur til þeirra hvað stafur er táknuð með ASCII gildi 73 + 6.
Í þessu tilfelli sem væri 79.
Nú viljum við fara að næsta staf.
Svo næst á vísitölu 1 í kæra yrði úrfellingarmerki.
En mundu að við viljum bara að encipher stafina.
Þannig að við viljum ganga úr skugga um að úrfellingarmerki raun dvöl the sami,
að við breytast ekki frá 39 til hvað 45 er.
Við viljum halda því sem úrfellingarmerki.
Svo viljum við að muna að aðeins encipher stafina
vegna þess að við viljum öll önnur tákn til að haldast óbreytt í áætlun okkar.
Annar hlutur sem við viljum er að varðveita hástöfum.
Svo þegar þú ert með hástafi bréf, ætti það að vera sem hástaf.
Lowercases ætti að vera eins og lágstafir.
Svo nokkrar gagnlegar aðgerðir til að vera fær um að takast á við aðeins enciphering bréf
og halda vörð um fjármögnun hluta
er isalpha, isupper, islower virka.
Og svo eru þetta aðgerðir sem skila þér Boolean gildi.
Í grundvallaratriðum, satt eða ósatt. Er þetta há? Er þetta tölu?
Er þetta bréf, í meginatriðum.
Svo hér eru 3 dæmi um hvernig þú vilt nota það virka.
Í grundvallaratriðum, þú gætir prófað hvort gildi aftur til þín með þessi aðgerð er satt eða ósatt
byggt á því inntak.
Annaðhvort ekki encipher eitthvað eða dulmáli hana eða tryggja að það hástafi o.fl.
[Nemandi] Geturðu útskýrt bara þá aðeins meira og hvernig þú notar þá? >> Já, fyrir viss.
Þannig að ef við lítum til baka, hér erum við með fjármagn I, ekki satt?
Þannig að við vitum að ég fer til O því ég + 6 er O.
En við viljum vera viss um að um að O er að fara að vera höfuðborg O.
Svo í grundvallaratriðum, það er góður af að fara að breyta inntak okkar.
Svo hvort sem það er hástafi eða ekki vilja konar breytt því hvernig við takast á við það.
Svo ef við notum isupper virka á viðkomandi vísitölu,
svo isupper ("ég"), sem skilar fyrir okkur satt, þannig að við vitum að það er efri.
Þá byggist á því, síðar við munum fara inn í formúlu
sem þú munt nota til að skipta hlutum í keisaranum
Svo í grundvallaratriðum, það er að fara að vera aðeins öðruvísi uppskrift ef það er hástafi
eins og til lágstafir. Skynsamleg?
Já. Engar áhyggjur.
Ég talaði aðeins um að bæta 6 við bréfi, sem er ekki alveg að gera skilningarvit
nema þegar við skiljum svona að þessir stafir
eru eins konar víxlanlegur með heiltölur.
Það sem við gerum er að við hvers konar notkun óbeina steypu.
Við munum fara í steypu aðeins seinna þar sem þú tekur gildi og þú snúa það inn í a ólíkur tegund
en það var upphaflega.
En með þessu pset við munum vera fær til tegund jöfnum höndum að nota stafi
og þeirra samsvarandi tölustafi.
Svo ef þú encase einfaldlega staf með aðeins einn quotes,
þá munt þú vera fær um að vinna með það með heiltölur, að takast á við það sem heiltölu.
Svo snýr höfuðborg C til 67 ára. Lágstafir f lýtur í 102.
Aftur, ef þú vilt vita þessi gildi, líta á ASCII töflunni.
Svo skulum við fara inn í nokkur dæmi um hvernig þú might vera fær til draga og bæta við,
hvernig þú getur raunverulega raunverulega vinna með þessum stöfum, nota þá jöfnum höndum.
Ég segi að ASCIIMath er að fara að reikna út að bæta við stafnum heiltala
og þá sýnir hlýst eðli eins og heilbrigður eins og the hlýst ASCII gildi.
Og svo hér er ég að segja - we'll takast á við þessa hluti seinna -
en í grundvallaratriðum er ég að segja að notandinn ætti að segja keyra ASCIIMath ásamt lykli,
og ég er að segja að þessi lykill er að fara til vera the tala
sem við erum að fara að bæta þessum staf.
Svo hér eftir því að þar sem ég er krefjandi lykil
þar sem ég er krefjandi að þeir eru að gefa mér 1 hlut,
Ég vil bara að sætta sig við. / Asciimath og lykill.
Þannig að ég ætla að krefjast þess að argc er jafnt 2.
Ef það er ekki, þá er ég að fara að skila 1 og the program vilja hætta.
Þannig að ég er að segja að lykillinn er ekki að fara til vera the fyrstur stjórn lína rifrildi,
það er að fara til vera the second einn, og eins og þú sérð hér,
Ég ætla að snúa þessi inn heiltölu.
Og ég ætla að setja inn staf til að r.
Takið eftir að gerð breytu CHR er í raun heiltala.
Leiðin sem ég er fær um að nota r sem heiltala er með encasing það með þessum einn quotes.
Svo aftur til printf yfirlýsingu okkar þar sem við höfum tákn fyrir persónu
og þá tákn fyrir heiltölu,
eðli er fulltrúi CHR og heiltala er lykillinn.
Og svo þá erum við að fara í vegna bæta 2 saman.
Þannig að við erum að fara að bæta við r + hvað lykillinn er,
og þá erum við að fara að prenta niðurstöðu um það.
Svo skulum gera asciimath. Það er upp til dagsetning, svo að við skulum bara hlaupa asciimath.
Ó, en sjá, er það ekki að gera neitt vegna þess að við vissum ekki í raun að gefa það a takkann.
Svo þegar það kom bara 1, helstu virkni okkar aftur það bara aftur til okkar.
Svo skulum við fara í takkann. Einhver að gefa mér númerið. >> [Nemandi] 4.
4. Allt í lagi.
Svo R jókst um 4 er að fara að gefa okkur V, sem samsvarar ASCII gildi af 118.
Svo það gerir konar vit því -
Reyndar má ég spyrja þig, hvað finnst þér ASCII gildi r er hvort R + 4 er 118?
Þá já, r er 114.
Svo ef þú horfir á ASCII töflunni þá víst, munt þú sjá að R er táknuð með 114.
Svo nú er að við vitum að við getum bætt heiltölur til stafi, þetta virðist frekar einfalt.
Við erum bara að fara að iterate á band eins og við sáum í dæmi áður.
Við munum athuga hvort það bréf.
Ef það er, þá munum við skipta því með hvaða lykill er.
Pretty einfalt, nema þegar þú færð að eins þetta,
þú sérð að z, fulltrúi 122, þá myndi gefa þér mismunandi karakter.
Við viljum í raun og veru að vera í stafrófinu okkar, ekki satt?
Þannig að við þurfum að reikna út á einhvern hátt að hvers konar umbúðir í kring.
Þegar þú nærð Zed og þú vilt að auka við ákveðinn fjölda,
þú vilt ekki að fara í utan ASCII stafrófið kafla;
þú vilt að vefja aftur alla leið til A.
En hafðu í huga að þú ert enn að varðveita málið.
Svo vita að bréf geta ekki orðið tákn
bara eins og tákn eru ekki að fara að breyta eins og heilbrigður.
Í síðasta pset þú örugglega ekki að,
en möguleiki var að innleiða gráðugur pset þinn með því að nota stuðull virka.
En nú erum við í raun að fara að þurfa að nota stuðull,
þannig að við skulum bara fara yfir þetta smá.
Í meginatriðum, þegar þú hefur x modulo y, sem gefur þér afganginn af x deilt með y.
Hér eru nokkur dæmi hér. Við höfum 27% 15.
Í grundvallaratriðum, þegar þú draga 15 frá 27 eins oft og mögulegt er án þess að fá neikvæð
þá færðu 12 til vinstri yfir.
Svo það er góður af eins og í stærðfræði samhengi, en hvernig getum við notað í raun það?
Það er að fara að vera gagnlegt fyrir wrapover okkar.
Fyrir þetta, við skulum bara segja að ég bað ykkur að skipta í 3 hópa.
Stundum gera þetta í hópum og eitthvað svoleiðis.
Segja að ég sagði, "Jæja, ég vil ykkur öll til að vera skipt í 3".
Hvernig getur þú gert það?
[Inaudible nemandi svar] Já, nákvæmlega. Telja burt. Allt í lagi.
Við skulum í raun að gera það. Viltu byrja?
[Nemendur telja á] 1, 2, 3, 4.
En mundu ... >> [Nemandi] Ó, fyrirgefðu.
Það er mjög góður punktur.
Þú sagðir 4, en við viljum í raun og veru að segja 1 vegna þess að við viljum aðeins 3 hópa.
Svo, hvernig - Nei, það er mjög gott dæmi vegna þess að þá hvernig getur þú sagt 1?
Hvað er sambandið milli 4 og 1?
Jæja, 4 unga fólkið 3 er 1.
Svo ef þú heldur áfram, myndir þú vera 2.
Þannig að við höfum 1, 2, 3, 1, 2.
Aftur, þú ert í raun 5 maður. Hvernig veistu að segja 2 í staðinn fyrir 5?
Þú segir 5 unga fólkið 3 er 2.
Mig langar að sjá hversu margir hópar 3 eru afgangs, þá sem til er ég
Og svo þá ef við héldum áfram eftir allt herbergi,
þá myndum við sjá að við erum alltaf í raun að beita mod virka að okkur
að svona telja burt.
Það er meira svona áþreifanlega dæmi um hvernig þú getur notað modulo
vegna þess að ég er viss um að flestir af okkur hafa líklega farið í gegnum það ferli
þar sem við höfum haft til að telja út.
Einhverjar spurningar um modulo?
Það verður ansi mikilvægt að skilja hugtökin á þessu,
þannig að ég vil vera viss um að þú krakkar skilja.
[Nemandi] Ef það er ekkert sem eftir stendur, er það gefa þér til fjölda?
Ef eitt af fyrstu 3 þeirra hefði gert það, hefði það gefið þeim það sem þeir voru í raun og veru,
eða myndi það hafa gefið þeim [inaudible] >> Það er góð spurning.
Þegar það er enginn eftir stendur fyrir modulo - svo segja að þú ert 6 mod 3 -
það gefur í raun þér aftur 0.
Við munum tala um það svolítið seinna.
Ó já, til dæmis 3. maður - 3 unga fólkið 3 er í raun 0 en hún sagði 3.
Svo það er góður af eins og óákveðinn greinir í ensku innri afla, til dæmis,
eins og allt í lagi, ef unga fólkið er 0 þá er ég að fara að vera 3 manneskja.
En við munum komast í konar hvernig við gætum vilja til að takast á við það sem 0 er síðar.
Svo nú höfum við einhvern veginn leið að kortleggja Zed til hægri bréf.
Svo nú höfum við farið í gegnum þessi dæmi,
við sjáum eins konar hvernig Caesar gæti virkað.
Þú sérð 2 stafróf og þá sjá þá breytast.
Svo skulum reyna að tjá það í skilmálar af formúlu.
Þessi uppskrift er í raun gefið í sérstakur,
en við skulum konar líta í gegnum hvað hver breyta þýðir.
Niðurstaðan okkar er að fara til vera the ciphertext.
Svo segir þetta að ith eðli ciphertext
er að fara að vera í samræmi við ith eðli kæra.
Það er skynsamlegt vegna þess að við viljum alltaf að undirbúa þetta allt.
Svo það er að fara til vera the ith eðli ciphertext plús k, sem er lykill okkar -
sem vit - og þá höfum við þetta mod 26.
Mundu aftur þegar við vorum að Zed
við vildum ekki að komast í eðli, svo að við vildum að unga fólkið það
og konar hula um stafrófið.
Eftir Zed þú myndir fara til a, b, c, d, þar sem þú verður að rétta númer.
Þannig að við vitum að Zed, ef + 6, myndi gefa okkur f því eftir Meðlimur kemur a, b, c, d, e, f.
Svo við skulum muna að við vitum fyrir víst að Zed + 6 er að fara að gefa okkur f.
Í ASCII gildi, z er 122 og f er 102.
Þannig að við verðum að finna einhverja leið til að gera Caesar uppskrift okkar gefa okkur 102
eftir að taka í 122.
Svo ef við eiga bara þessa uppskrift, í ('Z' + 6)% 26, sem í raun gefur þér 24
vegna 122 + 6 er 128, 128% 26 gefur þér 24 afganginn.
En það þýðir í raun ekki þýða f. Það er örugglega ekki 102.
Það er líka ekki 6 bréf í stafrófinu.
Svo augljóslega, þurfum við að hafa einhverja leið til klip þetta svolítið.
Hvað varðar almenna stafrófsins, vitum við að z er 26 bréf og f er 6..
En við erum í tölvunarfræði, þannig að við erum að fara að kemba á 0.
Svo í stað þess að z vera númer 26, við erum að fara að segja númer það er 25
vegna þess er 0.
Svo nú skulum við þessa formúlu.
Við höfum Z fulltrúa um 25 + 6, sem gefur þér 31.
Og 31 unga fólkið 26 gefur þér 5 sem eftir lifir.
Það er fullkomið vegna þess að við vitum að f er 5. stafur í stafrófinu.
En það er enn ekki f, ekki satt? Það er samt ekki 102.
Svo fyrir þessa pset, áskorun verður að reyna að finna út tengsl
milli breyta milli ASCII gildi og stafrófsröð vísitölu.
Í meginatriðum, það sem þú þarft að gera, langar að byrja út með ASCII gildi,
en þú vilt einhvern veginn þýða að inn í stafrófsröð vísitölu
þá reikna hvaða bréf það ætti að vera - í grundvallaratriðum, hvað Stafrófsröð Vísitala þess er
í dulmál karakter - þá þýða að aftur til ASCII gildi.
Svo ef þú svipa út ASCII töflunni, þá reyna að finna tengsl á milli, segja, 102 og 5
eða 122 og 25.
Við höfum fengið lykilinn okkar frá the stjórn lína rifrildi, höfum við fengið að kæra,
við höfum enciphered það.
Nú er allt sem við höfum til vinstri til að gera prenta það.
Við gætum gert þetta á nokkra mismunandi vegu.
Það sem við gætum gert er í raun prenta sem við förum eftir.
Eins og við iterate yfir stafina í streng,
við gætum einfaldlega bara prenta rétt þá þegar við reikna það.
Einnig getur þú líka geymt það í fjölda og hafa fjölda af stöfum
og í lok iterate yfir að heil fylking og prenta það út.
Svo þú hafa a par af valkostur fyrir það.
Og mundu að% c er að fara að vera tákn fyrir prentun staf.
Svo þar höfum við Caesar, og nú erum við að fara að Vigenere,
sem er mjög svipað og keisarans, en bara örlítið flóknari.
Svo í raun með Vigenere er þú ert að fara að vera komið í leitarorði.
Svo í stað þess að tala, þú ert að fara að hafa band,
og svo er að fara að starfa sem leitarorð.
Þá, eins og venjulega, þú ert að fara að fá a hvetja til streng frá notanda
og þá encipher það og þá gefa þeim ciphertext aftur.
Svo eins og ég sagði, það er mjög svipað og keisaranum, nema í stað þess að breytast með ákveðnum fjölda,
númerið er reyndar að fara að breyta í hvert skipti frá stafnum staf.
Til að tákna að raunveruleg tala til að skipta, það er táknað með hljómborð stafi.
Svo ef þú slærð inn í færslunni að, til dæmis, þá sem myndi samsvara færslunni 0.
Svo er það aftur til baka í stafrófsröð vísitölu.
Hvað gæti verið gagnlegt ef þú sérð að við erum í raun að takast á við ASCII gildi
sem og bréf, sem og stafrófsröð vísitölu,
kannski finna eða gera eigin ASCII taflan sem sýnir stafrófsröð vísitölu 0 með 25,
a í Z og ASCII gildi þannig að þú getur konar séð tengsl
og skissa út og reyna að finna einhverja mynstur.
Á sama hátt, ef þú varst að breytast í ákveðna dæmi af F -
og þetta er annað hvort lágstafir eða hástafi f - þá myndi samsvara 5.
Erum við góðar svo langt?
Formúlan fyrir Vigenere er svolítið öðruvísi.
Í grundvallaratriðum, þú sérð að það er bara eins og keisarans,
nema í staðinn af réttlátur K við höfum k vísitölu j.
Takið eftir því að við erum ekki að nota i því í meginatriðum, að lengd leitarorð
er ekki endilega lengd ciphertext okkar.
Það vilja vera a hluti skýrari þegar við sjáum dæmi sem ég hef svolítið síðar.
Í grundvallaratriðum, ef þú keyrir forritið með leitarorð í ohai,
þá þýðir það að í hvert skipti, ohai er að fara að vera breyting þinn.
Svo eftir því hvaða stöðu þú ert í leitarorð,
þú ert að fara að skipta á ákveðnum ciphertext karakterinn þinn með þeirri upphæð.
Aftur, eins og keisarans, viljum við að tryggja að við að varðveita fjármögnun hlutum
og við aðeins encipher bréf, ekki stafi eða bil.
Svo líta aftur til keisarans um aðgerðir sem kunna að hafa þú notaðir,
á þann hátt að þú hefur ákveðið hvernig á að skipta hlutum, og eiga það til að forritinu hér.
Svo skulum kortleggja þetta út.
Við höfum kæra sem við höfum fengið frá eiganda GetString
að segja þetta ... er CS50!
Þá höfum við leitarorð á ohai.
Fyrstu 4 stafir eru nokkuð einfalt.
Við vitum að T er að fara að færst um o,
þá h er að fara að færst af H, er ég að fara að færst um a.
Hér sérðu að táknar 0,
svo þá enda gildi er í raun bara það sama bréf og áður.
Þá er færist af i.
En þá hafa þessir tímabil hér.
Við viljum ekki að encipher það, svo þá erum við ekki breytt því með neitt
og bara prenta út tímabilið óbreytt.
[Nemandi] Ég skil ekki hvernig þú veist að þetta er færst af - Hvar hafið þér - >> Ó, fyrirgefðu.
Efst Hér sérðu að lína rifrildi ohai hér,
það er að fara að vera leitarorð.
Og svo í rauninni, þú ert að hjóla yfir stafi í leitarorði.
[Nemandi] Svo o er að fara að breytast sama -
Svo svarar o við ákveðinn fjölda í stafrófinu.
[Nemandi] Rétt. En hvar fékkstu CS50 hluta frá?
Oh. Það er í GetString þar sem þú ert eins og "Gefðu mér band til að umrita."
[Nemandi] Þeir eru að fara að gefa þér að rifrildi til að skipta um
og þá biðja um fyrsta band þinn. >> Já.
Svo þegar þeir hlaupa the program, þá eru þeir að fara að fela leitarorð
í stjórn lína rifrildi þeirra þegar þeir hlaupa það.
Síðan þegar þú hefur athugað að þeir hafa í raun gefið þér 1 og ekki meira, ekki minna,
þá þú ert að fara að biðja þá um streng, segja: "Gefðu mér band."
Svo er það sem í þessu tilfelli þeir hafa gefið þér þetta ... er CS50!
Svo þú ert að fara að nota það og nota Ohai og iterate yfir.
Takið eftir að hér við sleppt yfir Dulkóðun tímabil,
en hvað varðar stöðu okkar fyrir ohai, næsta einn við notuðum o.
Í þessu tilviki það er svolítið erfiðara að sjá þar sem það er 4,
þannig að við skulum halda áfram aðeins. Bara halda sig við mig hérna.
Þá höfum við i og s sem eru svo þýdd af o og h sig.
Þá höfum við pláss, og svo þá vitum við að við erum ekki að fara að encipher rými.
En eftir því að í stað þess að fara á í þessum stað hérna,
við erum að dulkóða með a - Ég veit ekki hvort þú getur séð það - hérna.
Svo það er ekki eins og þú fyrirfram ákveðið í raun, segja, o fer hér, h fer hér,
a fer hér, fer ég hér, o, h, a, i, o, h, a, i. Þú gerir það ekki.
Þú skiptir bara stöðu þína á leitarorð
þegar þú veist að þú ert í raun að fara að brengla í raun bréf.
Er svona skynsamleg?
Allt í lagi.
Svo bara nokkrar ábendingar.
Þú vilt tryggja að þú fara bara á næsta staf í leitarorð
ef eðli í kæra þinn er bréf.
Svo segja að við erum á o.
Við taka að næsta staf, er ég Vísitala kæra, er tala, til dæmis.
Þá erum við ekki að fara ekki J, vísitalan fyrir leitarorð okkar, fyrr en við náum annað bréf.
Aftur, þú vilt einnig að ganga úr skugga um að þú wraparound við upphaf leitarorð
þegar þú ert á the endir af það.
Ef þú sérð hér að við erum í ég, sá næsti að vera o.
Svo þú vilt að finna einhverja leið til að vera fær um að wraparound í upphafi leitarorð
hvert skipti sem þú nærð í lok.
Og svo aftur, hvers konar stjórnandi er gagnlegur í því tilviki að umbúðir í kring?
Eins og í talningu burt dæmis.
[Nemandi] The prósent skilti. >> Já, prósent skilti, sem er modulo.
Svo modulo mun koma sér vel hér þegar þú vilt að vefja á vísitölu í ohai þínu.
Og bara fljótur vísbending: Reyndu að hugsa um umbúðir yfir leitarorð dálítið eins og að telja burt,
þar sem ef það er 3 hópa, 4. mann,
fjölda þeirra sem þeir sögðu var 4 unga fólkið 3, sem var 1.
Svo að reyna að hugsa um það þannig.
Eins og þú sást í formúlunni, hvar sem þú ert CI og svo Pi en þá kJ,
þú vilt ganga úr skugga um að þú haldir utan um þá.
Þú þarft ekki að hringja í það að ég, þú þarft ekki að kalla það J,
en þú vilt ganga úr skugga um að þú haldir utan um stöðu sem þú ert á í kæra þinni
sem og stöðu sem þú ert á í leitarorð
vegna þess að þeir eru ekki endilega að fara að vera sú sama.
Ekki eini hjartarskinn the leitarorð - það gæti verið allt öðruvísi lengd en kæra þínu.
Einnig kæra þín, það eru tölur og bókstafi,
svo það er ekki að fara að fullkomlega passa upp saman. Já.
[Nemandi] Er aðgerð til að breyta málið?
Getur þú breytt í hlutafé A? >> Já, það örugglega er.
Þú geta skrá sig út - ég tel toupper það er, allt 1 orð.
En þegar þú ert að reyna að dulmál hluti og varðveita texta,
það er best í grundvallaratriðum að hafa aðskilin mál.
Ef að það er há, þá þú vilja til að skipta um þetta
vegna þess að í uppskrift þinni, þegar þú lítur til baka hvernig við verðum að konar fara
jöfnum höndum milli ASCII leið fulltrúi tölurnar
og í raun Stafrófsröð vísitölu, viljum við að tryggja
það er að fara að vera einhvers konar mynstur sem þú ert að fara að nota.
Annar í huga í mynstri, reyndar.
Þú ert að fara að ákveðið að takast á við númer.
Reyndu að nota ekki galdra tölur, sem er dæmi um stíl.
Svo segja að þú viljir að sérhver breyting tíma eitthvað með eins og -
Jæja, svo vísbending, annar Spilla er þegar þú ert að fara að breytast eitthvað
með ákveðna upphæð, reyna ekki að tákna að um raunverulegan fjölda
heldur að reyna og sjá hvort þú getur notað ASCII gildi, sem konar gera meira vit.
Annar athugið: Þar sem við erum að fást við uppskrift,
jafnvel þótt TF mun konar vita hvað mynstur sem þú gætir verið að nota,
best að í athugasemdum góður af útskýra rökfræði, eins og,
"Ég er að nota þetta mynstur vegna þess að ..." og tegund útskýra mynstur succinctly í athugasemdum þínum.
[Þetta var walkthrough 2] Ef það eru ekki einhverjar aðrar spurningar, þá verð ég bara að vera hér í smá.
Gangi þér vel með pset þína 2: Crypto og takk fyrir komuna.
[Nemandi] Þakka þér. >> Takk.
[Media Offline Intro]