[Powered by Google Translate] [Walkthrough - Probléma Set 2]
[Zamyla Chan - Harvard University]
[Ez CS50. CS50.TV]
Rendben van. Hello, mindenkinek, és üdvözöljük a Walkthrough 2.
Először is, szeretnék gratulálni Önnek befejező Pset 1.
Tudom, hogy lehetett volna egy kicsit kemény néhányan,
lehetett volna az első számítógépes program, amit írt,
de csak ne feledjük, hogy a végén ezt, ha megnézed vissza a végén a félév
akkor nézd meg Pset 1-es és azt mondod, hogy "Hé, nem tudtam volna, hogy 5 perc alatt."
Szóval tudom, és bízom benne, hogy a végén ez akkor biztosan talál Pset 1 igen egyszerű.
De most ez egy hatalmas teljesítmény, és gratulálok a szerzés kész.
Most is egy gyors megjegyzés, mielőtt belekezdenénk a hús a walkthrough.
Én csak azt szeretném, hogy egy gyors megjegyzés, hogy néha nem lesz elég ideje
során walkthroughs megy keresztül minden egyes módja ennek a probléma halmaz
és inkább csak talán összpontosítanak 1 vagy 2 típusú implementációk,
módon, hogy meg tudná csinálni.
De ez nem jelenti azt, hogy tilos honnan csinálja más módon.
Gyakran vannak, mint a számítógép-tudomány, számos módon a dolgok,
és így biztosan nyugodtan használja más típusú megoldás, mint én is bemutatták.
[Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net]
[Pset2 - 0. A szakasz Kérdések - 1. Caesar - 2. Vigenère]
Rendben van. Szóval probléma készlet 2: Crypto egy szórakoztató egy.
Ismét minden Pset kezdesz egy szakasza kérdések
ez lesz elvégezni a szakaszok a kijelölt tanítási fickó.
Mi nem fog menni ezeken át a walkthrough,
de biztosan segít befejezni a Pset.
Tehát az első része a probléma készlet Caesar.
És így Caesar valaki elmúlik egy kulcsot egy egész szám,
és akkor titkosítja a karakterláncot, hogy az Ön
és adja vissza egy titkosított dolog.
Ha valaki figyelte A Christmas Story, van egy példa, hogy van.
Majd a második része a probléma készlet Vigenère,
amely egy fejlettebb titkosítási technika.
És így fogunk rejtjelezési egy darab szöveget,
kivéve, hogy csak egy egységes egész, mi tényleg megy elkódolni
egy kulcsszó, hogy a felhasználó megadja nekünk.
Oké, az első eszköz a toolbox ma ténylegesen lesz frissítés a készüléket.
A vitafórumot szeretnénk látni a dolgokat, mint a "Miért nem ezt a munkát?"
"Miért nem Elküld 50 munkát?"
és gyakran a megoldás valójában csak frissítheti a készüléket.
És ha csak fut egy terminál ablakban a készülék sudo yum-y -
ez a zászló azt mondja igen, frissítse mindent - frissítés,
akkor a készülék frissíti ha kell.
És nem árt, ha már áll a legújabb verziója a készüléket.
Aztán majd csak mondani, hogy nem új frissítések rendelkezésre, és folytathatja a munkát mentén.
De ez jó, hogy végre is, minden alkalommal, hogy nyissa ki a készülék
mert még mindig nagyon sok -
Néha, ha bemegyünk egy bug - rögzítése a készülékbe.
Tehát győződjön meg róla, hogy a legújabb verzióját a készülék
és fuss, hogy frissítse ott.
Rendben van. Tehát mivel van dolgunk betűk és változó, titkosítási dolgokat,
fogunk igazán akar lenni a legjobb barátok a mi ASCII chart.
Számos is online, ha hibát talál. Lehet, hogy még akkor is, hogy a saját.
Alapvetően, minden betű és minden szám és minden karaktert
van egy szám velük kapcsolatban,
és így jó látni, hogy ASCII értékek mellett az aktuális levelet.
Ez biztosan segít a probléma halmaz.
Az egyik dolog, ami nagyon sokat segített nekem ez a probléma meg az volt, hogy ténylegesen nyomtassa ki,
és ahogy mentem keresztül, azt valójában felhívni rá,
írja: "Ha ennek, hogy menjen oda, akkor ..."
Fajta felhívni rá, és jelölje fel, válnak a legjobb barátait ASCII táblában.
Aztán van egy pár más eszközök a rendelkezésünkre áll.
Ezúttal helyett ténylegesen a felhasználó megkérdezése az összes általuk betáplált
fogunk csinálni egy kombináció.
Fogunk kérni őket néhány bemenet,
de mi is lesz, hogy csak használni a parancssori paramétereket.
Tehát, ha futnak a programot, általában mondasz. / Hello, például
ha a program hello.c.
De ezúttal nem csak azt mondja meg, hogy ezek a szavakat, érveket utána.
És így fogunk használni, amit csak át a hozzánk azok input is,
így túllépve csak felszólító egész, hanem a parancssori paramétereket.
És aztán megyünk bele tömbök és karakterláncok, amelyeket mi lesz egy csomó is.
Itt csak egy példa az 1 mini ASCII chart.
Ahogy mondtam, minden levél megfelel egy számot,
és így ismerkedjen meg vele. Ez jól jöhet.
És később, amikor elkezdünk csinál valami ASCIIMath foglalkozó szám -
hozzátéve, kivonva őket -, akkor biztosan jó, hogy olvassa el ezt a chart.
Tehát itt van egy példa egy Caesar titkosítás - ami lehet, hogy játszott.
Ez csak egy kerék. Lényegében van egy külső, ábécé, és ott van egy belső ábécé.
Így itt egy példa a Caesar titkosítás, de egy kulcsfontosságú 0-ra.
Lényegében egy összhangban van A, B összhangban van B, egészen Z.
De akkor azt mondom, volna egy kulcs 3, például.
Akkor mi lenne forgassa a belső kereket úgy, hogy most már illeszkedik D, stb
És így ez lényegében mit fogunk csinálni.
Jelenleg nincs egy kerék, de mi fogunk tennie, hogy a program
egyfajta elmozdulás az ábécé velünk együtt egy bizonyos mennyiségű számokat.
Szóval, ahogy már mondtam, fogunk foglalkozni parancssori argumentumok
valamint szerzés egy egész szám.
Így az is, hogy a felhasználó futtassa a Caesar program kimondásával. / Cézár
majd egy szám után.
És ez a szám jelenti a kulcsot, a shift,
hányszor leszel forgó belső kerék a Caesar titkosítás.
És itt látható egy példa.
Ha beléptünk a betűk A-tól L a mi Caesar titkosítást,
akkor ez a D bemenet révén O mert ez minden levél eltolódott több mint 3 alkalommal,
csakúgy, mint a példa a kereket, hogy megmutattam neked.
Tehát, ha be, például, ez CS50!
akkor is mozog az összes leveleket.
És ez egy fontos dolog, mind a Caesar és a Vigenère
az, hogy megyünk, hogy átugorják nem-leveleket.
Szóval a szóközöket, karaktereket, stb, számok, fogunk tartani őket ugyanaz.
Mi csak akkor fog váltani a betűk ebben az esetben.
Szóval, ahogy látod a kereket, már csak a betűk elérhető számunkra,
így csak szeretnénk váltani a betűk és titkosítja a leveleket.
Tehát az első dolog, akkor látta, hogy a szokás, hogy a Caesar probléma készlet 2
hogy futni Caesar, majd adja meg a számot, amikor futtatja azt a terminálon.
Szóval mit kell tennünk, hogy valahogy, hogy a legfontosabb és a hozzáférésre.
És így szeretnénk valahogy látni ez lesz a második parancssori argumentum.
Az első lesz. / Caesar, és a következő lesz a kulcs számát.
Szóval mielőtt volt int main (void) kezdeni a C programok.
Megyünk héja vissza egy réteget egy kicsit
és valóban látom, hogy ahelyett, hogy továbbítaná a void a mi fő funkciója
vagyunk valójában szó 2 paraméterekkel.
Van egy int argc nevű, majd egy sor húrok nevezett argv.
Szóval argc egy egész szám,
, és ez jelenti a átadott argumentumok száma be a program.
És akkor argv valójában azt az átadott argumentumok.
Minden érvek húrok, így argv jelentése tömb, egy lista, a szálakat.
Beszéljünk tömbök egy kicsit.
Array lényegében egy új adatszerkezetet.
Van ints, már páros, van húrok, és most már tömbök.
A tömbök adatszerkezetek, amely képes több értéket az azonos típusú,
így lényegében egy listát bármilyen típusú akarsz.
Lényegében, ha akarsz egy listát egész minden 1 változó,
akkor hozna létre egy új változót volt a típus int tömb.
Szóval tömbök nulla indexelt, ami azt jelenti, hogy az első eleme a tömb van index 0-ra.
Ha a tömb úgy hossza 4, mint ebben a példában, akkor az utolsó elem lenne indexű 3,
amely 4 - 1.
Szóval létrehozni tömb, akkor valamit csinálni, mint ez.
Mondja el akart kettős tömb.
Ez megy bármilyen típusú adattípus, bár.
Tehát mondjuk szeretne kettős tömb. Mondja el, hogy szeretné hívni azt postafiókba.
Csakúgy, mint akkor inicializálni bármilyen más kétágyas,
Ön azt mondaná, dupla, majd a nevét, de ezúttal fel a szögletes zárójelben
és azután a szám lesz a hossza a tömb.
Ne feledje, hogy a tömbök nem tudunk valaha változtatni a hosszát,
így mindig meg kell határozni, és válassza ki, hogy hány doboz,
hány érték a tömb fog tartani.
Szóval, hogy különböző értékeket a tömb, fogsz használni ezt a következő parancsot,
mint látod a dián.
Van postafiók index 0-ra kell beállítani, hogy 1,2,
postafiók index 1 set, 2,4, stb
Tehát most, hogy már felül, tömbök egy kicsit menjünk vissza az argc és argv.
Tudjuk, hogy ma már argv tömb szálakat.
Tehát, ha a felhasználó halad - azt mondják, hogy fut a program -
mondják. / hello David Malan,
amit a program nem a már ténylegesen elér, amit argc és argv vannak.
Szóval nem kell aggódni, hogy a.
Argc ebben az esetben lenne, 3, mert látja, 3 különböző szavakat szóközzel elválasztva.
És így akkor a tömb ebben az esetben az első index lenne. / Hello,
a következő egy David, a következő egy Malan.
Látja valaki rögtön, mi a kapcsolat argv,
a tömb, és argc van?
Igen. Fogunk bejutni, hogy egy példa args.c.
Lássuk, mi is kihasználni a kapcsolatát a 2.
Itt lehet találni, hogy a készülék az alapértelmezett alkalmazással
megnyitni. c fájlok néha Emacs.
De mi szeretnénk foglalkozni gedit, tehát mit tehetünk, akkor jobb klikk a C fájl,
megy a Tulajdonságok, a Társítás, majd válassza a gedit, Beállítás alapértelmezett
és most a program megnyitja gedit helyett Emacs.
Tökéletes.
Tehát itt van egy program, amely szeretnék kinyomtatni minden parancssori argumentum.
Tehát függetlenül a felhasználó bemenet, akarom lényegében vissza vissza őket egy új sort.
Tehát mi az a szerkezet, hogy tudjuk használni iterációkhoz valamit -
valami, amit valószínűleg használt a Pset 1?
Ha azt szeretnénk, hogy menjen át a meghatározott számú dolgokat? >> [Hallgató] A hurok.
A hurok. Pontosan. Szóval kezdjük a for ciklus.
Van az int i = 0. Nézzük csak elkezd egy standard inicializáló változó.
Fogom elhagyni a feltétele egy sor, majd mondja i + +, megy a dolgok ott.
Rendben van.
Szóval gondoltam vissza az argv, ha argv a argumentumlistában telt el a program
és argc az argumentumok száma a programban,
akkor ez azt jelenti, hogy argc lényegében hossza argv, jobb,
mert ott lesznek annyi érvek értéke argc.
Tehát, ha azt akarjuk, hogy navigálhat az egyes eleme argv,
fogunk szeretnénk minden alkalommal elérni a változó argv a megadott index.
Ezt lehet képviseli ezt, ugye?
Ez a változó itt képviseli az adott szöveg ebben az esetben
mert ez egy string tömb - az adott karakterlánc abban megadott index.
Mit akarunk csinálni, ebben az esetben azt akarjuk, hogy nyomtassa ki, így mondjuk printf.
És most argv egy string, ezért szeretnénk, hogy tedd azt placeholder ott.
Szeretnénk egy új sort csak azért, hogy jól nézzen ki.
Tehát itt van egy for ciklus. Jelenleg nincs a feltétel még.
Tehát én 0-tól indul, és minden alkalommal, amikor ez lesz-e nyomtatni a megadott karakterlánc
az adott index a tömbben.
Tehát ha szeretnénk állítani kinyomtatott a tömb elemeinek?
Amikor elkészült, igaz? Amikor elértük a végén a tömb.
Tehát nem akarjuk haladja túl a hossza a tömb,
és már tudjuk, hogy nem kell, hogy ténylegesen aktív megtudja, mi a hossza argv van
mert ez adott nekünk, és mi az? Argc. Pontosan.
Ezért akarom ezt a folyamatot argc számú alkalommal.
Nem én vagyok a megfelelő könyvtárba.
Rendben van.
Most nézzük, hogy args. Nem hiba, ami nagyszerű.
Szóval csak fuss args.
Mit fog ez vissza minket? Ez csak a nyomdába vissza.
"Te betáplált args be a programba; fogok adni vissza hozzád."
Tehát mondjuk azt akarjuk mondani, args majd foo bar.
Akkor azt kinyomtatja vissza hozzánk. Rendben?
Tehát van egy példa arra, hogyan használhatja argc és argv
tudván, hogy argc képviseli a hossza argv.
Győződjön meg róla, hogy soha ne a tömbökkel való hozzáférés 1 túl hosszú a tömb
mert a C biztosan kiabálni veled.
Kapsz egy úgynevezett szegmentációs hiba,
ami soha nem szórakoztató, alapvetően mondván akarsz elérni valamit
ami nem létezik, nem a tiéd.
Ezért győződjön meg róla, és különösen a nulla-indexálás, nem akarjuk, hogy -
, Mint például, ha van egy sor hossza 4,
hogy a tömb index 4 nem létezik, mert 0-val kezdődnek, a nulla index.
Ez lesz második természet, mint a hurok, amikor 0-val kezdődnek.
Szóval, hogy tartsa szem előtt.
Nem akarod, hogy valaha is elérni az index egy tömb, amely túl van karnyújtásnyira.
Így láthatjuk, most már, hogyan lehet ilyen hozzáférés
a parancssori argumentumok, amelyeket át be
De ahogy meglátta a húr, az argv valójában egy string tömb.
Tehát ez valójában nem egy egész még, de Caesar akarunk foglalkozni egészek.
Szerencsére, van egy funkció teremtett számunkra, hogy ténylegesen átalakítani egy string egész.
Szintén itt nem foglalkozunk felhasználói hol vagyunk arra ösztönzi a
az input ide a kulcsot, így nem tudunk valójában reprompt és azt mondja:
"Oh, adj még egy egész, mondjuk, ha ez nem érvényes."
De mi továbbra is szükség van, hogy ellenőrizze a helyes használat.
A Caesar ezek csak akkor megengedett átadni száma 1,
és így kell futtatni. / Caesar és akkor meg kell adni egy számot.
Így argc kell lennie egy adott értéket.
Milyen szám lenne ez, ha át kell adni Önnek a. / Caesar, majd a kulcsot?
Mi az argc? >> [Hallgató] 2. >> Kettő. Pontosan.
Tehát azt szeretnénk, hogy győződjön meg arról, hogy a argc 2 lehet.
Egyébként alapvetően elutasítja a program futtatásához.
A legfontosabb, hogy ez a funkció, amely azt mondja int main,
így aztán mindig a helyes gyakorlat return 0 a végén egy sikeres program.
Tehát, ha mondjuk, akkor kapsz 3 parancssori argumentumok helyett 2
vagy ad 1, például, akkor mit fog csinálni ez akar majd, hogy ellenőrizze, hogy a
, majd vissza 1 mondván, nem, nem tudom folytatni ezt a programot.
[Hallgató] Nem lehet a helyet a szöveget. >> Tessék?
[Hallgató] Nem lehet szóköz a szövegben akarsz titkosítani.
Ah!
Ami a szöveg próbálunk titkosítani, amely ténylegesen később jön
amikor adunk, hogy a szöveget.
Akkor most mi csak elfogadja a parancs érvek tényleges száma,
a tényleges váltás a Caesar titkosítás.
[Hallgató] Miért van szükségük a 2 helyett csak 1 argc? Van határozottan száma 1.
Rendben. Az ok, hogy miért van szükségünk a 2 argc 1 helyett
azért van, mert ha fut a program, és azt mondják. / Caesar vagy a. / hello,
hogy valóban számít a parancssori argumentum.
Akkor már vesz fel 1, és így aztán mi bevitele 1 pótágy.
Szóval megadásával valójában egy string a parancssori argumentum.
Mit szeretnél csinálni, mert Caesar akarunk foglalkozni egy egész,
így használhatja ezt atoi funkciót.
És tulajdonképpen, akkor adja át a húr, és akkor vissza fog térni vissza integer
ha ez lehetséges, hogy, hogy a húr egy egész szám.
Most már emlékszem, amikor dolgunk printf vagy getString, ilyesmi,
számításánál a könyvtárak, amelyek kifejezetten a számunkra.
Szóval az elején kezdjük egy hash tag standard I / O,. H, valami ilyesmi.
Nos, atoi nem tartozik egyik ilyen könyvtárak,
tehát mit kell tennünk, hogy van, hogy tartalmazza a megfelelő könyvtár erre.
Így emlékszem vissza az Walkthrough 1, ahol megvitatták a kézi funkciót.
Azt írja férfi a terminál, és majd ezt követően a nevét a funkció.
És így, hogy hozza létre a teljes listát a használat,
de ez is hozza létre, amely könyvtár tartozik.
Szóval hagyom, hogy az Ön számára, hogy használja a manuális funkciót atoi
és kitaláljuk, melyik könyvtárat kell tartalmaznia, hogy képes legyen használni az atoi funkciót.
Szóval megvan a kulcs, és most jön a szerzés a sima szöveg,
és hogy valóban lesz felhasználói ahol gyors.
Mi foglalkozott getInt és getFloat, és így az ugyanebben a szellemben
fogunk foglalkozni getString.
De ebben az esetben nem kell semmilyen do közben vagy amíg hurkot, hogy ellenőrizze.
GetString biztosan ad nekünk egy string,
és mi fogjuk titkosítani függetlenül a felhasználó ad nekünk.
Így feltételezhető, hogy az összes ilyen felhasználó bevitt húrok helyes.
Remek.
Tehát, ha megvan a kulcs, és ha megvan a szöveg,
most mi van hátra, meg kell rejtjelezési a sima.
Csak gyorsan terjed át zsargon, a sima, amit a felhasználó ad,
és a rejtjelezett az, amit vissza őket.
Szóval vonósok, hogy képes átmenni ténylegesen betűnként
mert meg kell váltani minden levél,
megértjük, hogy a húrok, ha a fajta húzza vissza a réteg,
azt látjuk, hogy ők csak tényleg egy listát a karakter.
Jön egy a másik után.
És így tudjuk kezelni karakterláncokat tömbök mert tömbök karakterek.
Tehát mondjuk van egy string nevű szöveget,
és ezen belül a változó szöveg tárolt Ez CS50.
Aztán szöveget index 0 lenne a T betű, index 1 lenne h, stb
És akkor a tömbök, a argc példa args.c,
láttuk, hogy mi volt iterációkhoz egy tömb
és így kellett navigálhat-tól i = 0, amíg i kisebb, mint a hossza.
Tehát szükségünk van valamilyen módon kitalálni, hogy mi a hossza a string
ha fogjuk navigálhat rajta.
Szerencsére ismét van egy függvény ott számunkra, noha később az CS50
akkor biztosan végre lehessen hajtani, és a saját funkció
hogy ki tudja számítani a string hossza.
De most fogunk használni string hossza, így a strlen.
Te át egy string, és akkor visszatér egy int, amely képviseli az hosszú a string.
Nézzünk egy példát, hogyan lehet, hogy navigálhat az egyes karaktert egy szövegben
és csinálj valamit ezzel.
Amit akarok, navigálhat az egyes karakter a string,
és mit akarok, kiírjuk back minden karakter 1 x 1
kivéve, adjuk hozzá valamit mellette.
Szóval kezdjük a for ciklus. Int i = 0.
Elmegyünk hagyjon helyet a feltételt.
Szeretnénk megismételni, amíg elérjük a végén a húr, ugye?
Akkor mi a funkció ad nekünk a hosszát a húr?
[Hallhatatlan hallgatói válasz]
Ez a hossza a parancssori paramétereket.
De egy karakterláncot szeretnénk használni egy függvényt, amely megadja a hossza a húr.
Szóval ez string hossza.
És akkor meg kell adnod egy string hozzá.
El kell tudni, hogy mit húr is kell számolnia a hossza.
Tehát ebben az esetben van dolgunk karakterlánc s.
Remek.
Akkor mit akarunk csinálni, hadd printf.
Most szeretnénk foglalkozni karakter. Azt akarjuk, hogy kiírja az összes egyéni jellegű.
Ha azt szeretné, hogy nyomtassa ki a float, akkor használja a helyőrző mint% f.
Egy int akkor a% d.
És hasonlóképpen, a karakter a% c mondani fogok nyomtat egy karakter
ez tárolt változó.
Így van ez, és tegyük hozzá időszak és egy szóköz hozzá.
Milyen karakter vagyunk használ?
Fogunk használni bármilyen karakter itt vagyunk a húr.
Akkor fogunk használni valamit string,
de mi szeretnénk érni az egyes karakter ott.
Tehát, ha egy karakterlánc csak egy tömb, akkor hogyan tudjuk elérni elemei tömbök?
Jelenleg ezek szögletes zárójelben, majd rakjuk az index ott.
Tehát szögletes zárójelben. Our index ebben az esetben tudjuk csak használni i. Pontosan.
Tehát itt azt mondjuk fogunk nyomtat egy karaktert, majd egy pont és egy szóköz,
, és hogy a karakter lesz az i-edik levelet a string s.
Én csak fogja menteni azt. Oké.
Most megyek futni string hossza.
Tehát volt egy string nevű OMG, és most még jobban hangsúlyozta.
Hasonlóképpen, mondjuk valójában szeretné, hogy egy string a felhasználó elől.
Hogyan lehet ezt megtenni?
Előtt, hogyan jutottunk el egy int?
Azt mondtuk getInt, ugye? De ez nem int, úgyhogy getString.
Legyen string hossza. Itt nem adott meg konkrét parancsot.
Szóval nem tudom.
Fogom tenni a nevem itt, így aztán tudom csinálni egyike azoknak a dolgoknak
ahol rendelni egy szót minden levél, vagy valami ilyesmi. Cool.
Szóval ez string hossza.
Úgyhogy vissza Caesar.
Van néhány eszköz, hogy hogyan navigálhat egy string,
hogyan tudjuk elérni minden egyes elem.
Így most juthatunk vissza a program.
Ahogy már korábban említettem, az ASCII tábla, a legjobb barátja,
fogod látni a számokat társított minden levelet.
Tehát itt azt mondják a sima is vagyok szédülni!
Ezután minden egyes ilyen karakterek megy, hogy egy szám és ASCII értéket társított,
még az aposztróf, még a hely, még a felkiáltójelet,
így akar majd tartani, hogy szem előtt.
Tehát mondjuk a legfontosabb, hogy a felhasználói építsék parancssori argumentum 6 lehet.
Ez azt jelenti, az első levél, amely azt, ami képviseli 73,
vissza akar térni hozzájuk bármilyen levél képviseli a ASCII értéke 73 + 6.
Ebben az esetben az lenne 79.
Most szeretnénk menni a következő karakterre.
Így a következő az index 1 A szöveges lenne az idézőjel.
De ne feledjük, mi csak szeretnénk rejtjelezési a leveleket.
Ezért szeretnénk, hogy győződjön meg arról, hogy az aposztróf ténylegesen marad,
, hogy nem változik, 39-ről, amit a 45.
Meg akarjuk tartani, mint egy aposztrófot.
Ezért szeretnénk, hogy emlékezzen, hogy csak rejtjelezési a betűket
mert azt akarjuk, az összes többi szimbólum változatlan marad a program.
A másik dolog, hogy azt akarjuk, hogy megőrizze nagybetűk.
Tehát, ha van egy nagybetű, meg kell maradni, mint egy nagybetűs.
Lowercases kell maradni, kisbetű.
Szóval néhány hasznos funkció, hogy képes legyen kezelni csak titkosítási betűk
és tartsa megőrzése kapitalizációja dolgok
a isalpha, isupper, islower funkciók.
És ezek a funkciók vissza egy logikai értéket.
Alapvetően igaz vagy hamis. Ez egy nagybetűs? Ez alfanumerikus?
Ez a levél lényegében.
Tehát itt van 3 példa arra, hogyan fogja használni ezt a funkciót.
Alapvetően, akkor ellenőrizze, hogy a visszaadott érték az Ön által függvény igaz vagy hamis
alapuló bemeneten.
Vagy nem rejtjelezési valamit, vagy titkosírás, illetve győződjön meg arról, hogy ez nagybetűs, stb
[Hallgató] Meg tudod magyarázni, csak azok egy kicsit, és hogyan használja őket? >> Igen, az biztos.
Tehát, ha megnézzük vissza, itt van a főváros I., ugye?
Tehát tudom, hogy megy a O mert + 6 az O.
De mi szeretnénk, hogy győződjön meg arról, hogy O lesz a tőke O.
Tehát alapvetően ez a fajta lesz, hogy megváltoztassuk a bemenet.
Szóval, hogy ez nagybetűs, vagy nem lesz ilyen módjának megváltoztatása, hogy foglalkozzon vele.
Tehát, ha használjuk a isupper függvény az adott index,
így isupper ("I"), ami visszaadja nekünk igaz, tehát tudjuk, hogy ez felső.
Tehát ennek alapján, később megyünk egy képlet
hogy fogod használni váltani dolgokat Caesar,
Tehát alapvetően, ott lesz egy kicsit más formula, ha ez nagybetűs
szemben a kisbetűs. Értelme?
Igen. Semmi gond.
Beszéltem egy kicsit hozzá 6-tól egy levelet, ami nem egészen értelmetlen
kivéve, ha azt a fajta megértjük, hogy ezek a karakterek
a fajta felcserélhetők egészek.
Mit csinálunk mi vagyunk ilyen felhasználás implicit casting.
Elmegyünk a casting egy kicsit később, ha veszel egy értéket, és kapcsolja be a különböző típusú
mint eredetileg volt.
De ez Pset képesek leszünk, hogy milyen szinonimaként használja karakterek
és a hozzájuk tartozó egész értékek.
Tehát, ha egyszerűen csak burkolják a karakter csak a aposztrófot,
akkor képes lesz arra, hogy működjön együtt azt egészek, foglalkozik vele, mint egy egész.
Így a főváros C vonatkozik 67. Lowercase f vonatkozik 102.
Még egyszer, ha meg akarja tudni ezeket az értékeket, nézd meg ASCII asztalnál.
Akkor menjünk át néhány példát arra, hogyan lehet, hogy a kivonáshoz, és adjunk hozzá,
hogyan lehet valójában tényleg dolgozni ezeket a karaktereket, használja őket felváltva.
Azt mondom, hogy ASCIIMath fog számítani hozzáadása a karakter egy egész
majd megjeleníti a kapott karaktert, valamint a kapott ASCII értéket.
És így itt mondok - we'll foglalkozik ez a része később -
de alapvetően, azt mondom, hogy a felhasználó azt futtatni ASCIIMath együtt egy gombot,
és azt mondom, hogy ez a kulcs lesz a szám
amellyel fogunk hozzáadni ezt a karaktert.
Tehát itt észre, hogy mivel én vagyok igényes kulcs,
mert én azt követelve, hogy ők ad nekem 1 dolog,
Csak azt akarom elfogadni. / Asciimath és a kulcs.
Szóval fogom követelni, hogy argc egyenlő 2-re.
Ha ez nem, akkor megyek vissza 1-es és a program kilép.
Szóval azt mondom, a kulcs nem lesz az első parancssori argumentum,
ez lesz a második, és ahogy itt látni,
Fogok fordulni, hogy egy egész.
Aztán megyek be egy karaktert, hogy r.
Figyeljük meg, hogy a típust a változó CHR tulajdonképpen egy egész szám.
Az út, hogy én vagyok képes legyen használni az r egészként egyáltalán encasing ezekkel a szimpla idézőjelek.
Szóval vissza a printf utasítás, ahol van egy helyőrzője karakter
majd egy helyőrző egy egész szám,
a karakter által képviselt chr, és az egész a kulcs.
És így aztán fogunk eredménye hozzá a 2 együtt.
Szóval megyünk hozzá r + függetlenül a kulcs,
majd fogunk nyomtatni az eredményt adott.
Szóval tegyük asciimath. Ez a korszerű, úgyhogy csak fuss asciimath.
Ó, de látni, hogy nem csinál semmit, mert valójában nem adja meg a kulcsot.
Tehát, ha csak iránt 1, a fő funkciója, csak visszatértek hozzánk.
Akkor menjünk át a kulcsot. Valaki adjon nekem egy számot. >> [Hallgató] 4.
4. Oké.
Így r növekedése 4 fog adni nekünk v, amely megfelel az ASCII érték 118.
Tehát ez a fajta van értelme, hogy -
Igazából, lehet kérdezni, mit gondol az ASCII értéke r, ha r + 4 a 118?
Aztán igen, r 114.
Tehát, ha megnézi az ASCII tábla akkor persze elég, látni fogod, hogy r képviseli 114.
Most, hogy tudjuk, hogy mi is hozzá egészek és a karakterek, ez úgy tűnik, elég egyszerű.
Mi csak úgy navigálhat át egy string, mint láttuk, egy példa korábban.
Fogjuk ellenőrizni, ha ez a levél.
Ha igen, akkor mi lesz váltani azt, amit a kulcs.
Elég egyszerű, kivéve, ha kap, hogy tetszik ez,
látod, hogy z, képviseli: 122, akkor adna neked egy másik karaktert.
Igazából akar maradni a mi ábécét, ugye?
Tehát meg kell kitalálni valamilyen módon az ilyen csomagolás körül.
Amikor eléri zed, és szeretné növelni egy bizonyos számot,
nem akarsz belemenni túl ASCII ábécé szakasz;
azt szeretnénk, hogy betakar vissza egészen A.
De ne feledje, még mindig megőrizve az ügyet.
Tehát tudja, hogy betűk nem válhat szimbólumok
mint szimbólumok nem fog változni is.
Az utolsó Pset akkor biztosan nem kell,
hanem lehetőség az volt, hogy hajtsák végre a kapzsi Pset segítségével modulus funkciót.
De most mi valóban szükségünk lesz használni modulus,
úgyhogy menjünk át ezt egy kicsit.
Lényegében, ha van x modulo y, hogy megadja neked a többi x osztva y.
Íme néhány példa van. Jelenleg 27%-os 15.
Alapvetően, ha kivonni 15-től 27, ahányszor csak lehetséges, anélkül, hogy negatív
akkor kap 12 megmaradt.
Szóval ez olyan, mint a matematika összefüggésben, de hogyan tudjuk ténylegesen használni ezt?
Ez lesz hasznos a mi wrapover.
Ehhez mondjuk kértem mindannyian osztani 3 csoportba.
Néha ezt a csoport és valami ilyesmi.
Mondja azt mondtam: "Oké, azt akarom, hogy mindenki osztható 3."
Hogyan lehetne ezt?
[Hallhatatlan tanulói válasz] Igen, pontosan. Számolja ki. Oké.
Tegyük valójában csinálni. Szeretné kezdeni?
[Diákok időzítésének] 1, 2, 3, 4.
De ne felejtsd el ... >> [Hallgató] Ó, sajnálom.
Ez egy nagyon jó pont.
Azt mondta, 4, de valójában akarom mondani, 1, mert mi csak szeretnénk, 3 csoport.
Tehát, hogyan - Nem, ez egy nagyon jó példa, mert akkor lehet, hogy azt mondod 1?
Mi a kapcsolat 4 és 1?
Nos, 4 mod 3 1 lehet.
Tehát, ha folytatja, akkor az 2.
Tehát van 1, 2, 3, 1, 2.
Ismét, te tényleg az 5. személy. Honnan tudod mondani helyett a 2-5?
Azt mondjuk 5 mod 3 2 lehet.
Szeretném látni, hogy hány csoport 3 maradnak meg, akkor milyen sorrendben én is
És így aztán, ha továbbra is együtt az egész szobát,
akkor azt látjuk, hogy mi mindig ténylegesen alkalmazzák mod funkciót magunkat
a fajta számít ki.
Ez egy több fajta kézzelfogható példa arra, hogyan lehet használni modulo
mert biztos vagyok benne, a legtöbben valószínűleg ment keresztül ez a folyamat
ha már volt számolni ki.
Bármilyen kérdése van modulo?
Lesz nagyon fontos, hogy megértsék a fogalmak e,
így azt szeretnénk, hogy győződjön meg arról, srácok megérteni.
[Hallgató] Ha nincs maradék, nem is megadja a tényleges száma?
Ha az egyik első 3 közülük tette meg, akkor azt adtam nekik, amit valójában voltak,
vagy lenne adott nekik [hallhatatlan] >> Ez egy jó kérdés.
Ha nincs maradék a modulo - így mondod, van 6 mod 3 -
hogy ténylegesen ad vissza 0-ra.
Majd beszélünk, hogy egy kicsit később.
Ó, igen, például a 3. személy - 3 mod 3 tulajdonképpen 0, de azt mondta 3.
Szóval ez olyan, mint egy belső fogás, például
mint a jó, ha a mod 0, akkor én leszek a 3. személy.
De mi lesz a fajta hogyan érdemes foglalkozni azzal, ami a 0 később.
Tehát most valahogy olyan módon feltérképezni zed jobbra levelet.
Tehát most mi már ment keresztül ezeket a példákat,
azt a fajta, hogyan Caesar működhet.
Látod a 2 ábécé és akkor látni őket változó.
Szóval próbálja kifejezni, hogy mind a formula.
Ez a képlet valóban fogja kapni a spec,
de nézzük a fajta néz át, amit minden változó jelent.
A végeredmény lesz a rejtjelezett.
Tehát ez azt mondja, hogy az i-edik karaktere a rejtjelezett
fog megfelelnek az i-edik karaktere a szöveges.
Ennek van értelme, mert azt akarjuk, hogy mindig sorba ezeket a dolgokat.
Szóval ez lesz az i-edik karaktere rejtjelezett plus k, ami a legfontosabb -
hogy van értelme - és akkor itt van ez a mod 26.
Emlékezz vissza, amikor mi volt a Zed
mi nem akarjuk, hogy a karakter, így akartuk mod azt
és milyen kerület az ábécé.
Miután zed akkor megy a, b, c, d, amíg megvan a megfelelő számot.
Így tudjuk, hogy zed, ha + 6, adna nekünk f mert miután zed jön a, b, c, d, e, f.
Szóval emlékszel tudjuk biztosan, hogy zed + 6 fog adni nekünk f.
Az ASCII értékek, z értéke 122, illetve f 102.
Tehát meg kell találni a módját, hogy a Caesar formula ad nekünk 102
miután a 122.
Szóval, ha csak ezt a képletet, a ('z' + 6)% 26, hogy valóban ad 24
mert 122 + 6 128; 128% 26 ad 24 részében.
De ez nem igazán jelent f. Ez biztosan nem 102.
Ez nem is a 6. betűt az ábécé.
Tehát nyilvánvaló, hogy szükségünk van valamilyen módon a csípés ez egy kicsit.
Ami a hagyományos ábécét, tudjuk, hogy z a 26. levél és a 6. f.
De mi vagyunk a számítástechnikában, ezért megyünk index 0 °.
Tehát ahelyett, z hogy a szám 26, fogjuk mondani, hogy a 25-ös
mert a értéke 0.
És most nézzük ezt a képletet.
Van z képviselők 25 + 6, amely ad 31.
És 31 mod 26 ad 5-ös a maradékot.
Ez tökéletes, mert tudjuk, hogy az 5. f betű az ábécé.
De ez még mindig nem f, ugye? Ez még mindig nem 102.
Akkor erre Pset, kihívás lesz próbálják kideríteni a kapcsolatot
között konvertáló között ASCII értékek és a betűrendes index.
Lényegében, mit akar majd csinálni, azt szeretnénk, hogy elindul az ASCII értékek,
de aztán azt szeretnénk, hogy valahogy át kellene ültetni betűrendes mutató
majd kiszámítja mit írni kell lennie - alapvetően, amit a betűrendes indexe
a titkosító karakter - aztán lefordítani a vissza az ASCII értékeket.
Tehát, ha ostor ki az ASCII táblát, majd megpróbálja megtalálni közötti kapcsolatokat, mondjuk, 102 és 5
vagy a 122 és 25.
Már ütött a kulcsot a parancssori argumentumok, most már ütött a szöveges,
mi már rejtjelezett formában is.
Most hagytuk tennie, hogy nyomtassa ki.
Megtehetjük ezt egy pár különböző módon.
Mit tehetünk valójában kinyomtatni, ahogy megy végig.
Ahogy iterációkhoz a karaktereket a húr,
tudnánk egyszerűen csak nyomtatni, akkor jobb, ha számolunk el.
Alternatív megoldásként, akkor is tárolja egy tömbben, és egy sor karakter
és a végén iterációkhoz, hogy az egész tömb, és nyomtassa ki.
Szóval van egy pár lehetőség adott.
És ne feledjük, hogy% c lesz a helyőrző nyomtatásához egy karaktert.
Tehát ott van Caesar, és most lépni Vigenère,
ami nagyon hasonlít a Caesar de csak kissé bonyolultabb.
Tehát alapvetően Vigenère is fogsz, hogy halad a kulcsszót.
Tehát ahelyett, hogy a számot, akkor megy, hogy egy string,
és hogy fog cselekedni, mint a kulcsszó.
Aztán, mint mindig, fogsz kapni egy gyors egy karaktersorozatot a felhasználó
majd rejtjelezési azt, majd ad nekik a rejtjelezett vissza.
Szóval, mint mondtam, ez nagyon hasonlít a Caesar, kivéve helyett változó egy bizonyos számot,
a szám valóban meg fog változni minden idő karakter karakter.
Ha kijelenti, hogy a tényleges szám váltani, ez képviseli a billentyűzet betűket.
Tehát, ha belépsz egy műszak egy, például, akkor az felelne meg a váltás a 0-ra.
Tehát megint vissza a betűrendes index.
Mi lehet hasznos, ha látja, hogy mi valóban foglalkozunk ASCII értékek
valamint a leveleket, valamint a betűrendes index,
talán talál, vagy a saját ASCII táblázat, amely megmutatja a betűrendes index 0 és 25,
A-Z, és az ASCII értékeket, így a fajta látja a kapcsolat
és a vázlatot, és megpróbálja megtalálni néhány mintát.
Hasonlóképpen, ha te változó az egyes fokon f -
és ez akár kis-vagy nagybetűs f -, akkor, ami megfelel az 5.
Vagyunk jó eddig?
A képlet Vigenère egy kicsit más.
Alapvetően, ha látja, hogy olyan, mint Caesar,
kivéve, ahelyett, hogy csak k már k index j.
Figyeljük meg, hogy mi nem használjuk mert ez lényegében a hossza a kulcsszó
nem szükségszerűen a hossza a rejtjelezett.
Ez lesz egy kicsit egyértelműbb, ha azt látjuk, egy példa, hogy egy kicsit később.
Alapvetően, ha fut a program egy kulcsszót ohai,
akkor ez azt jelenti, hogy minden alkalommal, ohai lesz a váltás.
Szóval, attól függően, hogy milyen helyzetben van a kulcsszó,
fogod váltani az egyes rejtjelezett karaktert ezzel az összeggel.
Ismét, mint Caesar, azt szeretnénk, hogy győződjön meg arról, hogy megőrizzük a nagybetűs dolgok
és csak rejtjelezési betűket, nem karaktereket vagy szóközöket.
Így néz vissza Caesar a funkciókat, hogy esetleg felhasználhatók,
az is, hogy úgy döntött, hogy váltani a dolgokat, és alkalmazza a program itt.
Szóval feltérképezni ezt.
Van egy sima, hogy már ütött a felhasználó getString
mondván: Ez ... a CS50!
Aztán van egy kulcsszót ohai.
Az első 4 karakter elég egyszerű.
Tudjuk, hogy a T lesz eltolt o,
akkor h lesz eltolt h, i fogja eltolni egy.
Itt látható, hogy a értéke 0,
így aztán a végén érték valójában csak Ugyanebben a levélben, mint korábban.
Aztán s eltolódik i.
De akkor már ezen időszakok itt.
Mi nem akarjuk, hogy a rejtjelezési, így aztán nem változtatunk azt semmi
és csak nyomtassa ki az időszakban nem változott.
[Hallgató] Én nem értem, hogy tudod, hogy ez eltolódik - Hová ment - >> Ó, sajnálom.
A legfelső itt láthatjuk, hogy a parancssori argumentum ohai itt,
ez lesz a kulcsszó.
És így alapvetően, te kerékpározás át a karaktereket a kulcsszót.
[Hallgató] Szóval o lesz változó azonos -
Tehát o megfelel egy bizonyos szám az ábécé.
[Hallgató] Rendben. De hol szerezted a CS50 részben?
Oh. Ez a getString ahol te, mint: "Adj egy string kódolására."
[Hallgató] fognak adni neked ezt az érvet váltani által
és akkor fogja kérni az első string. >> Igen.
Tehát, amikor a program futtatásához, mennek fel a kulcsszó
saját parancssori argumentumok, amikor futtatni.
Majd ha egyszer már ellenőrizték, hogy ők már ténylegesen adott Önnek 1, de nem több, nem kevesebb,
akkor fogod kérni őket egy string, azt mondja: "Adj egy string."
Szóval, ez az, ahol ebben az esetben akkor Ön Ez ... a CS50!
Akkor fogod használni, hogy, és használja ohai és iterációkhoz.
Figyeljük meg, hogy itt átugorja titkosítását időszakok,
de tekintve a pozíció ohai, a következő egy általunk használt o.
Ebben az esetben ez egy kicsit nehezebb látni, mert ez 4,
úgyhogy továbbra is egy kicsit. Csak maradj itt velem.
Akkor van I és S, amelyeket azután fordította O és H volt.
Aztán van egy hely, és így aztán tudjuk, hogy nem fognak rejtjelezési a terek.
De vegyük észre, hogy ahelyett, hogy egy ebben a helyzetben itt,
vagyunk titkosítása egy - nem tudom, ha látja, hogy - itt.
Tehát ez nem olyan, mint te valójában előre, mondjuk, o megy itt, h megy itt,
egy megy itt, i megy itt, O, H, egy, i, o, h, egy, i. Nem tehetem.
Csak elmozdulás a pozícióját a kulcsszó
amikor tudod, hogy te tényleg lesz titkosítható tényleges levelet.
Vajon ez a fajta értelme?
Oké.
Szóval csak néhány emlékeztetőt.
Azt szeretnénk, hogy győződjön meg arról, hogy csak előre a következő levél a kulcsszó
ha a karaktert a szöveges egy levelet.
Szóval azt mondom, Nálunk a o.
Megjegyezzük, hogy a következő karakter, az i index a szöveges, egy szám, például.
Akkor mi nem előre j, az index a kulcsszó, amíg el nem éri egy másik levelet.
Még egyszer, akkor is szeretnénk, hogy győződjön meg arról, hogy wraparound, hogy az elején a kulcsszó
ha már a végén is.
Ha látod, itt vagyunk a i, a következő egy kell lennie o.
Szóval azt akarod, hogy megtalálja a módját, hogy képes wraparound elejére a kulcsszó
minden alkalommal, hogy elérjük a végét.
És megint, milyen üzemben hasznos ebben az esetben csomagolási körül?
Mint a számláló off példa.
[Hallgató] A százalék jel. >> Igen, a százalékos megjelölés, amely modulo.
Így modulo majd jöhet ide, ha azt szeretné, hogy lezárja az index a ohai.
És csak egy gyors tipp: próbálja gondolni csomagolás alatt a kulcsszó egy kicsit olyan, mint a számláló le,
ahol ha van 3 csoport, a 4. személy,
számuk, hogy azt mondta, hogy 4 mod 3, amely 1.
Így próbálja gondolni így.
Ahogy láttam a képlet, ahol van ci majd pi de aztán kj,
azt szeretnénk, hogy győződjön meg arról, hogy nyomon követni azokat.
Nem kell hívni i, nem kell hívni j,
de azt szeretnénk, hogy győződjön meg arról, hogy figyelemmel kíséri a helyzet, hogy te vagy az a szöveges
valamint az álláspontját, hogy te vagy az a kulcsszó
mert azok nem feltétlenül lesz azonos.
Nem csak a kulcsszó - ez lehet egy teljesen különböző hosszúságú, mint a sima.
Továbbá, a sima, vannak számok és karakterek,
így nem fog tökéletesen egyeznek meg együtt. Igen.
[Hallgató] Van egy funkció változtatni esetben?
Meg tudod változtatni a tőke A? >> Igen, határozottan.
Akkor nézd meg - azt hiszem ez toupper, Az összes 1 szó.
De ha akarsz titkosító dolgokat, és megőrizni a szöveget,
a legjobb alapvetően külön eseteket.
Ha ez egy nagybetűs, akkor akar váltani e
mert a képlet, ha visszatekintünk, hogyan kell ilyen go
váltakozva közötti ASCII módja képviselő számok
és a tényleges betűrendes index, azt szeretnénk, hogy győződjön meg arról,
ott lesz valamilyen mintát, hogy fogsz használni.
A másik megjegyzés a minta, valóban.
Fogsz határozottan foglalkozik számokat.
Próbáld meg nem használja mágikus számot, amely példa a stílus.
Szóval, azt szeretné, hogy minden time shift valamit szeretne -
Oké, tipp, másik spoiler amikor fogsz átalakulhatnak valami
egy bizonyos összeget, próbáld meg nem jelent, hogy a tényleges szám
hanem megpróbálja, hátha tudod használni az ASCII érték, amely a fajta, hogy több értelme van.
Egy másik megjegyzés: Mivel van dolgunk képletek,
ellenére, hogy a TF fogja fajta tudja, mit minta lehet használni,
a legjobb, hogy a hozzászólások a fajta magyarázat a logika, mint például,
"Én ezzel a mintával, mert ..." és milyen magyarázatot mintát tömören meg észrevételeit.
[Ez walkthrough 2] Ha nincs más kérdés, akkor én csak itt maradok egy kicsit.
Sok szerencsét a Pset 2: Crypto és köszönöm, hogy eljöttek.
[Hallgató] Köszönöm. >> Köszönöm.
[Media Offline intro]