1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Walkthrough - Probléma Set 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Harvard University] 3 00:00:05,170 --> 00:00:07,490 [Ez CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Rendben van. Hello, mindenkinek, és üdvözöljük a Walkthrough 2. 5 00:00:10,750 --> 00:00:14,330 Először is, szeretnék gratulálni Önnek befejező Pset 1. 6 00:00:14,330 --> 00:00:18,140 Tudom, hogy lehetett volna egy kicsit kemény néhányan, 7 00:00:18,140 --> 00:00:20,460 lehetett volna az első számítógépes program, amit írt, 8 00:00:20,460 --> 00:00:24,500 de csak ne feledjük, hogy a végén ezt, ha megnézed vissza a végén a félév 9 00:00:24,500 --> 00:00:29,820 akkor nézd meg Pset 1-es és azt mondod, hogy "Hé, nem tudtam volna, hogy 5 perc alatt." 10 00:00:29,820 --> 00:00:35,700 Szóval tudom, és bízom benne, hogy a végén ez akkor biztosan talál Pset 1 igen egyszerű. 11 00:00:35,700 --> 00:00:40,640 De most ez egy hatalmas teljesítmény, és gratulálok a szerzés kész. 12 00:00:40,640 --> 00:00:44,010 Most is egy gyors megjegyzés, mielőtt belekezdenénk a hús a walkthrough. 13 00:00:44,010 --> 00:00:48,340 Én csak azt szeretném, hogy egy gyors megjegyzés, hogy néha nem lesz elég ideje 14 00:00:48,340 --> 00:00:52,500 során walkthroughs megy keresztül minden egyes módja ennek a probléma halmaz 15 00:00:52,500 --> 00:00:56,140 és inkább csak talán összpontosítanak 1 vagy 2 típusú implementációk, 16 00:00:56,140 --> 00:00:57,750 módon, hogy meg tudná csinálni. 17 00:00:57,750 --> 00:01:01,970 De ez nem jelenti azt, hogy tilos honnan csinálja más módon. 18 00:01:01,970 --> 00:01:05,980 Gyakran vannak, mint a számítógép-tudomány, számos módon a dolgok, 19 00:01:05,980 --> 00:01:12,190 és így biztosan nyugodtan használja más típusú megoldás, mint én is bemutatták. 20 00:01:12,190 --> 00:01:14,520 [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. A szakasz Kérdések - 1. Caesar - 2. Vigenère] 22 00:01:17,160 --> 00:01:20,650 Rendben van. Szóval probléma készlet 2: Crypto egy szórakoztató egy. 23 00:01:20,650 --> 00:01:24,500 Ismét minden Pset kezdesz egy szakasza kérdések 24 00:01:24,500 --> 00:01:29,600 ez lesz elvégezni a szakaszok a kijelölt tanítási fickó. 25 00:01:29,600 --> 00:01:31,670 Mi nem fog menni ezeken át a walkthrough, 26 00:01:31,670 --> 00:01:35,100 de biztosan segít befejezni a Pset. 27 00:01:35,100 --> 00:01:38,100 Tehát az első része a probléma készlet Caesar. 28 00:01:38,100 --> 00:01:43,470 És így Caesar valaki elmúlik egy kulcsot egy egész szám, 29 00:01:43,470 --> 00:01:48,420 és akkor titkosítja a karakterláncot, hogy az Ön 30 00:01:48,420 --> 00:01:50,670 és adja vissza egy titkosított dolog. 31 00:01:50,670 --> 00:01:56,050 Ha valaki figyelte A Christmas Story, van egy példa, hogy van. 32 00:01:56,050 --> 00:01:59,090 Majd a második része a probléma készlet Vigenère, 33 00:01:59,090 --> 00:02:01,790 amely egy fejlettebb titkosítási technika. 34 00:02:01,790 --> 00:02:05,640 És így fogunk rejtjelezési egy darab szöveget, 35 00:02:05,640 --> 00:02:09,600 kivéve, hogy csak egy egységes egész, mi tényleg megy elkódolni 36 00:02:09,600 --> 00:02:13,340 egy kulcsszó, hogy a felhasználó megadja nekünk. 37 00:02:16,270 --> 00:02:22,090 Oké, az első eszköz a toolbox ma ténylegesen lesz frissítés a készüléket. 38 00:02:22,090 --> 00:02:26,430 A vitafórumot szeretnénk látni a dolgokat, mint a "Miért nem ezt a munkát?" 39 00:02:26,430 --> 00:02:28,110 "Miért nem Elküld 50 munkát?" 40 00:02:28,110 --> 00:02:31,830 és gyakran a megoldás valójában csak frissítheti a készüléket. 41 00:02:31,830 --> 00:02:36,730 És ha csak fut egy terminál ablakban a készülék sudo yum-y - 42 00:02:36,730 --> 00:02:40,040 ez a zászló azt mondja igen, frissítse mindent - frissítés, 43 00:02:40,040 --> 00:02:42,280 akkor a készülék frissíti ha kell. 44 00:02:42,280 --> 00:02:46,960 És nem árt, ha már áll a legújabb verziója a készüléket. 45 00:02:46,960 --> 00:02:51,280 Aztán majd csak mondani, hogy nem új frissítések rendelkezésre, és folytathatja a munkát mentén. 46 00:02:51,280 --> 00:02:55,800 De ez jó, hogy végre is, minden alkalommal, hogy nyissa ki a készülék 47 00:02:55,800 --> 00:02:57,140 mert még mindig nagyon sok - 48 00:02:57,140 --> 00:03:00,320 Néha, ha bemegyünk egy bug - rögzítése a készülékbe. 49 00:03:00,320 --> 00:03:03,180 Tehát győződjön meg róla, hogy a legújabb verzióját a készülék 50 00:03:03,180 --> 00:03:07,710 és fuss, hogy frissítse ott. 51 00:03:07,710 --> 00:03:14,360 Rendben van. Tehát mivel van dolgunk betűk és változó, titkosítási dolgokat, 52 00:03:14,360 --> 00:03:20,410 fogunk igazán akar lenni a legjobb barátok a mi ASCII chart. 53 00:03:20,410 --> 00:03:24,350 Számos is online, ha hibát talál. Lehet, hogy még akkor is, hogy a saját. 54 00:03:24,350 --> 00:03:29,950 Alapvetően, minden betű és minden szám és minden karaktert 55 00:03:29,950 --> 00:03:32,210 van egy szám velük kapcsolatban, 56 00:03:32,210 --> 00:03:38,670 és így jó látni, hogy ASCII értékek mellett az aktuális levelet. 57 00:03:38,670 --> 00:03:42,310 Ez biztosan segít a probléma halmaz. 58 00:03:42,310 --> 00:03:45,750 Az egyik dolog, ami nagyon sokat segített nekem ez a probléma meg az volt, hogy ténylegesen nyomtassa ki, 59 00:03:45,750 --> 00:03:48,380 és ahogy mentem keresztül, azt valójában felhívni rá, 60 00:03:48,380 --> 00:03:51,150 írja: "Ha ennek, hogy menjen oda, akkor ..." 61 00:03:51,150 --> 00:03:55,270 Fajta felhívni rá, és jelölje fel, válnak a legjobb barátait ASCII táblában. 62 00:03:57,240 --> 00:04:00,750 Aztán van egy pár más eszközök a rendelkezésünkre áll. 63 00:04:00,750 --> 00:04:03,750 Ezúttal helyett ténylegesen a felhasználó megkérdezése az összes általuk betáplált 64 00:04:03,750 --> 00:04:05,230 fogunk csinálni egy kombináció. 65 00:04:05,230 --> 00:04:06,880 Fogunk kérni őket néhány bemenet, 66 00:04:06,880 --> 00:04:11,350 de mi is lesz, hogy csak használni a parancssori paramétereket. 67 00:04:11,350 --> 00:04:15,600 Tehát, ha futnak a programot, általában mondasz. / Hello, például 68 00:04:15,600 --> 00:04:17,310 ha a program hello.c. 69 00:04:17,310 --> 00:04:22,500 De ezúttal nem csak azt mondja meg, hogy ezek a szavakat, érveket utána. 70 00:04:22,500 --> 00:04:27,210 És így fogunk használni, amit csak át a hozzánk azok input is, 71 00:04:27,210 --> 00:04:31,720 így túllépve csak felszólító egész, hanem a parancssori paramétereket. 72 00:04:31,720 --> 00:04:36,590 És aztán megyünk bele tömbök és karakterláncok, amelyeket mi lesz egy csomó is. 73 00:04:41,460 --> 00:04:44,810 Itt csak egy példa az 1 mini ASCII chart. 74 00:04:44,810 --> 00:04:48,460 Ahogy mondtam, minden levél megfelel egy számot, 75 00:04:48,460 --> 00:04:52,510 és így ismerkedjen meg vele. Ez jól jöhet. 76 00:04:52,510 --> 00:04:55,610 És később, amikor elkezdünk csinál valami ASCIIMath foglalkozó szám - 77 00:04:55,610 --> 00:05:00,110 hozzátéve, kivonva őket -, akkor biztosan jó, hogy olvassa el ezt a chart. 78 00:05:02,860 --> 00:05:06,920 Tehát itt van egy példa egy Caesar titkosítás - ami lehet, hogy játszott. 79 00:05:06,920 --> 00:05:11,190 Ez csak egy kerék. Lényegében van egy külső, ábécé, és ott van egy belső ábécé. 80 00:05:11,190 --> 00:05:15,290 Így itt egy példa a Caesar titkosítás, de egy kulcsfontosságú 0-ra. 81 00:05:15,290 --> 00:05:21,540 Lényegében egy összhangban van A, B összhangban van B, egészen Z. 82 00:05:21,540 --> 00:05:26,590 De akkor azt mondom, volna egy kulcs 3, például. 83 00:05:26,590 --> 00:05:33,280 Akkor mi lenne forgassa a belső kereket úgy, hogy most már illeszkedik D, stb 84 00:05:33,280 --> 00:05:35,250 És így ez lényegében mit fogunk csinálni. 85 00:05:35,250 --> 00:05:38,340 Jelenleg nincs egy kerék, de mi fogunk tennie, hogy a program 86 00:05:38,340 --> 00:05:44,490 egyfajta elmozdulás az ábécé velünk együtt egy bizonyos mennyiségű számokat. 87 00:05:44,490 --> 00:05:48,650 Szóval, ahogy már mondtam, fogunk foglalkozni parancssori argumentumok 88 00:05:48,650 --> 00:05:50,390 valamint szerzés egy egész szám. 89 00:05:50,390 --> 00:05:55,050 Így az is, hogy a felhasználó futtassa a Caesar program kimondásával. / Cézár 90 00:05:55,050 --> 00:05:58,090 majd egy szám után. 91 00:05:58,090 --> 00:06:01,130 És ez a szám jelenti a kulcsot, a shift, 92 00:06:01,130 --> 00:06:06,740 hányszor leszel forgó belső kerék a Caesar titkosítás. 93 00:06:06,740 --> 00:06:08,390 És itt látható egy példa. 94 00:06:08,390 --> 00:06:14,550 Ha beléptünk a betűk A-tól L a mi Caesar titkosítást, 95 00:06:14,550 --> 00:06:19,520 akkor ez a D bemenet révén O mert ez minden levél eltolódott több mint 3 alkalommal, 96 00:06:19,520 --> 00:06:22,080 csakúgy, mint a példa a kereket, hogy megmutattam neked. 97 00:06:22,080 --> 00:06:25,300 Tehát, ha be, például, ez CS50! 98 00:06:25,300 --> 00:06:27,960 akkor is mozog az összes leveleket. 99 00:06:27,960 --> 00:06:31,040 És ez egy fontos dolog, mind a Caesar és a Vigenère 100 00:06:31,040 --> 00:06:34,890 az, hogy megyünk, hogy átugorják nem-leveleket. 101 00:06:34,890 --> 00:06:39,160 Szóval a szóközöket, karaktereket, stb, számok, fogunk tartani őket ugyanaz. 102 00:06:39,160 --> 00:06:42,920 Mi csak akkor fog váltani a betűk ebben az esetben. 103 00:06:42,920 --> 00:06:45,870 Szóval, ahogy látod a kereket, már csak a betűk elérhető számunkra, 104 00:06:45,870 --> 00:06:50,150 így csak szeretnénk váltani a betűk és titkosítja a leveleket. 105 00:06:51,370 --> 00:06:56,720 Tehát az első dolog, akkor látta, hogy a szokás, hogy a Caesar probléma készlet 2 106 00:06:56,720 --> 00:07:05,280 hogy futni Caesar, majd adja meg a számot, amikor futtatja azt a terminálon. 107 00:07:05,280 --> 00:07:10,940 Szóval mit kell tennünk, hogy valahogy, hogy a legfontosabb és a hozzáférésre. 108 00:07:10,940 --> 00:07:14,730 És így szeretnénk valahogy látni ez lesz a második parancssori argumentum. 109 00:07:14,730 --> 00:07:20,950 Az első lesz. / Caesar, és a következő lesz a kulcs számát. 110 00:07:22,190 --> 00:07:29,200 Szóval mielőtt volt int main (void) kezdeni a C programok. 111 00:07:29,200 --> 00:07:31,790 Megyünk héja vissza egy réteget egy kicsit 112 00:07:31,790 --> 00:07:34,720 és valóban látom, hogy ahelyett, hogy továbbítaná a void a mi fő funkciója 113 00:07:34,720 --> 00:07:37,920 vagyunk valójában szó 2 paraméterekkel. 114 00:07:37,920 --> 00:07:44,070 Van egy int argc nevű, majd egy sor húrok nevezett argv. 115 00:07:44,070 --> 00:07:46,030 Szóval argc egy egész szám, 116 00:07:46,030 --> 00:07:49,640 , és ez jelenti a átadott argumentumok száma be a program. 117 00:07:49,640 --> 00:07:53,590 És akkor argv valójában azt az átadott argumentumok. 118 00:07:53,590 --> 00:08:00,820 Minden érvek húrok, így argv jelentése tömb, egy lista, a szálakat. 119 00:08:01,830 --> 00:08:03,990 Beszéljünk tömbök egy kicsit. 120 00:08:03,990 --> 00:08:05,940 Array lényegében egy új adatszerkezetet. 121 00:08:05,940 --> 00:08:09,660 Van ints, már páros, van húrok, és most már tömbök. 122 00:08:09,660 --> 00:08:13,820 A tömbök adatszerkezetek, amely képes több értéket az azonos típusú, 123 00:08:13,820 --> 00:08:18,320 így lényegében egy listát bármilyen típusú akarsz. 124 00:08:18,320 --> 00:08:24,400 Lényegében, ha akarsz egy listát egész minden 1 változó, 125 00:08:24,400 --> 00:08:29,090 akkor hozna létre egy új változót volt a típus int tömb. 126 00:08:29,090 --> 00:08:34,450 Szóval tömbök nulla indexelt, ami azt jelenti, hogy az első eleme a tömb van index 0-ra. 127 00:08:34,450 --> 00:08:41,799 Ha a tömb úgy hossza 4, mint ebben a példában, akkor az utolsó elem lenne indexű 3, 128 00:08:41,799 --> 00:08:44,810 amely 4 - 1. 129 00:08:45,940 --> 00:08:48,420 Szóval létrehozni tömb, akkor valamit csinálni, mint ez. 130 00:08:48,420 --> 00:08:51,440 Mondja el akart kettős tömb. 131 00:08:51,440 --> 00:08:56,520 Ez megy bármilyen típusú adattípus, bár. 132 00:08:56,520 --> 00:09:00,210 Tehát mondjuk szeretne kettős tömb. Mondja el, hogy szeretné hívni azt postafiókba. 133 00:09:00,210 --> 00:09:04,760 Csakúgy, mint akkor inicializálni bármilyen más kétágyas, 134 00:09:04,760 --> 00:09:09,760 Ön azt mondaná, dupla, majd a nevét, de ezúttal fel a szögletes zárójelben 135 00:09:09,760 --> 00:09:13,570 és azután a szám lesz a hossza a tömb. 136 00:09:13,570 --> 00:09:16,840 Ne feledje, hogy a tömbök nem tudunk valaha változtatni a hosszát, 137 00:09:16,840 --> 00:09:21,230 így mindig meg kell határozni, és válassza ki, hogy hány doboz, 138 00:09:21,230 --> 00:09:25,440 hány érték a tömb fog tartani. 139 00:09:25,440 --> 00:09:31,820 Szóval, hogy különböző értékeket a tömb, fogsz használni ezt a következő parancsot, 140 00:09:31,820 --> 00:09:33,200 mint látod a dián. 141 00:09:33,200 --> 00:09:37,620 Van postafiók index 0-ra kell beállítani, hogy 1,2, 142 00:09:37,620 --> 00:09:42,180 postafiók index 1 set, 2,4, stb 143 00:09:42,180 --> 00:09:47,910 Tehát most, hogy már felül, tömbök egy kicsit menjünk vissza az argc és argv. 144 00:09:47,910 --> 00:09:52,220 Tudjuk, hogy ma már argv tömb szálakat. 145 00:09:52,220 --> 00:09:55,080 Tehát, ha a felhasználó halad - azt mondják, hogy fut a program - 146 00:09:55,080 --> 00:09:58,740 mondják. / hello David Malan, 147 00:09:58,740 --> 00:10:05,160 amit a program nem a már ténylegesen elér, amit argc és argv vannak. 148 00:10:05,160 --> 00:10:07,620 Szóval nem kell aggódni, hogy a. 149 00:10:07,620 --> 00:10:14,370 Argc ebben az esetben lenne, 3, mert látja, 3 különböző szavakat szóközzel elválasztva. 150 00:10:14,370 --> 00:10:18,850 És így akkor a tömb ebben az esetben az első index lenne. / Hello, 151 00:10:18,850 --> 00:10:21,770 a következő egy David, a következő egy Malan. 152 00:10:21,770 --> 00:10:25,640 Látja valaki rögtön, mi a kapcsolat argv, 153 00:10:25,640 --> 00:10:28,990  a tömb, és argc van? 154 00:10:32,820 --> 00:10:38,090 Igen. Fogunk bejutni, hogy egy példa args.c. 155 00:10:38,090 --> 00:10:42,880 Lássuk, mi is kihasználni a kapcsolatát a 2. 156 00:10:42,880 --> 00:10:46,550 Itt lehet találni, hogy a készülék az alapértelmezett alkalmazással 157 00:10:46,550 --> 00:10:49,450 megnyitni. c fájlok néha Emacs. 158 00:10:49,450 --> 00:10:54,660 De mi szeretnénk foglalkozni gedit, tehát mit tehetünk, akkor jobb klikk a C fájl, 159 00:10:54,660 --> 00:11:04,580 megy a Tulajdonságok, a Társítás, majd válassza a gedit, Beállítás alapértelmezett 160 00:11:04,580 --> 00:11:13,020 és most a program megnyitja gedit helyett Emacs. 161 00:11:14,710 --> 00:11:16,290 Tökéletes. 162 00:11:17,120 --> 00:11:25,520 Tehát itt van egy program, amely szeretnék kinyomtatni minden parancssori argumentum. 163 00:11:25,520 --> 00:11:32,050 Tehát függetlenül a felhasználó bemenet, akarom lényegében vissza vissza őket egy új sort. 164 00:11:32,050 --> 00:11:36,710 Tehát mi az a szerkezet, hogy tudjuk használni iterációkhoz valamit - 165 00:11:36,710 --> 00:11:40,380 valami, amit valószínűleg használt a Pset 1? 166 00:11:40,380 --> 00:11:45,840 Ha azt szeretnénk, hogy menjen át a meghatározott számú dolgokat? >> [Hallgató] A hurok. 167 00:11:45,840 --> 00:11:48,910 A hurok. Pontosan. Szóval kezdjük a for ciklus. 168 00:11:48,910 --> 00:11:56,900 Van az int i = 0. Nézzük csak elkezd egy standard inicializáló változó. 169 00:11:56,900 --> 00:12:02,370 Fogom elhagyni a feltétele egy sor, majd mondja i + +, megy a dolgok ott. 170 00:12:02,370 --> 00:12:04,090 Rendben van. 171 00:12:04,090 --> 00:12:11,590 Szóval gondoltam vissza az argv, ha argv a argumentumlistában telt el a program 172 00:12:11,590 --> 00:12:15,380 és argc az argumentumok száma a programban, 173 00:12:15,380 --> 00:12:21,280 akkor ez azt jelenti, hogy argc lényegében hossza argv, jobb, 174 00:12:21,280 --> 00:12:28,970 mert ott lesznek annyi érvek értéke argc. 175 00:12:28,970 --> 00:12:35,910 Tehát, ha azt akarjuk, hogy navigálhat az egyes eleme argv, 176 00:12:35,910 --> 00:12:43,290 fogunk szeretnénk minden alkalommal elérni a változó argv a megadott index. 177 00:12:43,290 --> 00:12:49,060 Ezt lehet képviseli ezt, ugye? 178 00:12:49,060 --> 00:12:53,430 Ez a változó itt képviseli az adott szöveg ebben az esetben 179 00:12:53,430 --> 00:12:57,030 mert ez egy string tömb - az adott karakterlánc abban megadott index. 180 00:12:57,030 --> 00:13:00,690 Mit akarunk csinálni, ebben az esetben azt akarjuk, hogy nyomtassa ki, így mondjuk printf. 181 00:13:00,690 --> 00:13:04,680 És most argv egy string, ezért szeretnénk, hogy tedd azt placeholder ott. 182 00:13:04,680 --> 00:13:08,430 Szeretnénk egy új sort csak azért, hogy jól nézzen ki. 183 00:13:08,430 --> 00:13:12,530 Tehát itt van egy for ciklus. Jelenleg nincs a feltétel még. 184 00:13:12,530 --> 00:13:20,020 Tehát én 0-tól indul, és minden alkalommal, amikor ez lesz-e nyomtatni a megadott karakterlánc 185 00:13:20,020 --> 00:13:22,980 az adott index a tömbben. 186 00:13:22,980 --> 00:13:28,410 Tehát ha szeretnénk állítani kinyomtatott a tömb elemeinek? 187 00:13:28,410 --> 00:13:35,720 Amikor elkészült, igaz? Amikor elértük a végén a tömb. 188 00:13:35,720 --> 00:13:38,870 Tehát nem akarjuk haladja túl a hossza a tömb, 189 00:13:38,870 --> 00:13:43,700 és már tudjuk, hogy nem kell, hogy ténylegesen aktív megtudja, mi a hossza argv van 190 00:13:43,700 --> 00:13:47,520 mert ez adott nekünk, és mi az? Argc. Pontosan. 191 00:13:47,520 --> 00:13:56,640 Ezért akarom ezt a folyamatot argc számú alkalommal. 192 00:13:56,640 --> 00:13:59,550 Nem én vagyok a megfelelő könyvtárba. 193 00:14:02,100 --> 00:14:03,490 Rendben van. 194 00:14:03,490 --> 00:14:08,990 Most nézzük, hogy args. Nem hiba, ami nagyszerű. 195 00:14:08,990 --> 00:14:11,430 Szóval csak fuss args. 196 00:14:11,430 --> 00:14:15,130 Mit fog ez vissza minket? Ez csak a nyomdába vissza. 197 00:14:15,130 --> 00:14:18,320 "Te betáplált args be a programba; fogok adni vissza hozzád." 198 00:14:18,320 --> 00:14:23,170 Tehát mondjuk azt akarjuk mondani, args majd foo bar. 199 00:14:23,170 --> 00:14:26,570 Akkor azt kinyomtatja vissza hozzánk. Rendben? 200 00:14:26,570 --> 00:14:30,790 Tehát van egy példa arra, hogyan használhatja argc és argv 201 00:14:30,790 --> 00:14:33,460 tudván, hogy argc képviseli a hossza argv. 202 00:14:33,460 --> 00:14:42,750 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 203 00:14:42,750 --> 00:14:45,140 mert a C biztosan kiabálni veled. 204 00:14:45,140 --> 00:14:47,560 Kapsz egy úgynevezett szegmentációs hiba, 205 00:14:47,560 --> 00:14:52,470 ami soha nem szórakoztató, alapvetően mondván akarsz elérni valamit 206 00:14:52,470 --> 00:14:55,000 ami nem létezik, nem a tiéd. 207 00:14:55,000 --> 00:14:59,430 Ezért győződjön meg róla, és különösen a nulla-indexálás, nem akarjuk, hogy - 208 00:14:59,430 --> 00:15:02,390 , Mint például, ha van egy sor hossza 4, 209 00:15:02,390 --> 00:15:07,240 hogy a tömb index 4 nem létezik, mert 0-val kezdődnek, a nulla index. 210 00:15:07,240 --> 00:15:11,730 Ez lesz második természet, mint a hurok, amikor 0-val kezdődnek. 211 00:15:11,730 --> 00:15:13,610 Szóval, hogy tartsa szem előtt. 212 00:15:13,610 --> 00:15:22,590 Nem akarod, hogy valaha is elérni az index egy tömb, amely túl van karnyújtásnyira. 213 00:15:26,710 --> 00:15:32,560 Így láthatjuk, most már, hogyan lehet ilyen hozzáférés 214 00:15:32,560 --> 00:15:35,930 a parancssori argumentumok, amelyeket át be 215 00:15:35,930 --> 00:15:41,330 De ahogy meglátta a húr, az argv valójában egy string tömb. 216 00:15:41,330 --> 00:15:45,740 Tehát ez valójában nem egy egész még, de Caesar akarunk foglalkozni egészek. 217 00:15:45,740 --> 00:15:54,430 Szerencsére, van egy funkció teremtett számunkra, hogy ténylegesen átalakítani egy string egész. 218 00:15:54,430 --> 00:15:58,710 Szintén itt nem foglalkozunk felhasználói hol vagyunk arra ösztönzi a 219 00:15:58,710 --> 00:16:03,740 az input ide a kulcsot, így nem tudunk valójában reprompt és azt mondja: 220 00:16:03,740 --> 00:16:07,840 "Oh, adj még egy egész, mondjuk, ha ez nem érvényes." 221 00:16:07,840 --> 00:16:10,540 De mi továbbra is szükség van, hogy ellenőrizze a helyes használat. 222 00:16:10,540 --> 00:16:13,520 A Caesar ezek csak akkor megengedett átadni száma 1, 223 00:16:13,520 --> 00:16:18,030 és így kell futtatni. / Caesar és akkor meg kell adni egy számot. 224 00:16:18,030 --> 00:16:23,660 Így argc kell lennie egy adott értéket. 225 00:16:23,660 --> 00:16:29,060 Milyen szám lenne ez, ha át kell adni Önnek a. / Caesar, majd a kulcsot? 226 00:16:29,060 --> 00:16:32,920 Mi az argc? >> [Hallgató] 2. >> Kettő. Pontosan. 227 00:16:32,920 --> 00:16:35,490 Tehát azt szeretnénk, hogy győződjön meg arról, hogy a argc 2 lehet. 228 00:16:35,490 --> 00:16:39,620 Egyébként alapvetően elutasítja a program futtatásához. 229 00:16:39,620 --> 00:16:43,040 A legfontosabb, hogy ez a funkció, amely azt mondja int main, 230 00:16:43,040 --> 00:16:47,360 így aztán mindig a helyes gyakorlat return 0 a végén egy sikeres program. 231 00:16:47,360 --> 00:16:50,840 Tehát, ha mondjuk, akkor kapsz 3 parancssori argumentumok helyett 2 232 00:16:50,840 --> 00:16:54,350 vagy ad 1, például, akkor mit fog csinálni ez akar majd, hogy ellenőrizze, hogy a 233 00:16:54,350 --> 00:16:59,900 , majd vissza 1 mondván, nem, nem tudom folytatni ezt a programot. 234 00:16:59,900 --> 00:17:03,190 [Hallgató] Nem lehet a helyet a szöveget. >> Tessék? 235 00:17:03,190 --> 00:17:06,780 [Hallgató] Nem lehet szóköz a szövegben akarsz titkosítani. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 Ami a szöveg próbálunk titkosítani, amely ténylegesen később jön 238 00:17:11,280 --> 00:17:13,970 amikor adunk, hogy a szöveget. 239 00:17:13,970 --> 00:17:18,260 Akkor most mi csak elfogadja a parancs érvek tényleges száma, 240 00:17:18,260 --> 00:17:21,579 a tényleges váltás a Caesar titkosítás. 241 00:17:21,579 --> 00:17:27,569 [Hallgató] Miért van szükségük a 2 helyett csak 1 argc? Van határozottan száma 1. 242 00:17:27,569 --> 00:17:32,200 Rendben. Az ok, hogy miért van szükségünk a 2 argc 1 helyett 243 00:17:32,200 --> 00:17:36,260 azért van, mert ha fut a program, és azt mondják. / Caesar vagy a. / hello, 244 00:17:36,260 --> 00:17:38,280 hogy valóban számít a parancssori argumentum. 245 00:17:38,280 --> 00:17:43,020 Akkor már vesz fel 1, és így aztán mi bevitele 1 pótágy. 246 00:17:45,030 --> 00:17:49,440 Szóval megadásával valójában egy string a parancssori argumentum. 247 00:17:49,440 --> 00:17:52,730 Mit szeretnél csinálni, mert Caesar akarunk foglalkozni egy egész, 248 00:17:52,730 --> 00:17:57,180 így használhatja ezt atoi funkciót. 249 00:17:57,180 --> 00:18:02,850 És tulajdonképpen, akkor adja át a húr, és akkor vissza fog térni vissza integer 250 00:18:02,850 --> 00:18:06,070 ha ez lehetséges, hogy, hogy a húr egy egész szám. 251 00:18:06,070 --> 00:18:10,960 Most már emlékszem, amikor dolgunk printf vagy getString, ilyesmi, 252 00:18:10,960 --> 00:18:13,390 számításánál a könyvtárak, amelyek kifejezetten a számunkra. 253 00:18:13,390 --> 00:18:19,450 Szóval az elején kezdjük egy hash tag standard I / O,. H, valami ilyesmi. 254 00:18:19,450 --> 00:18:22,430 Nos, atoi nem tartozik egyik ilyen könyvtárak, 255 00:18:22,430 --> 00:18:26,600 tehát mit kell tennünk, hogy van, hogy tartalmazza a megfelelő könyvtár erre. 256 00:18:26,600 --> 00:18:32,720 Így emlékszem vissza az Walkthrough 1, ahol megvitatták a kézi funkciót. 257 00:18:32,720 --> 00:18:37,110 Azt írja férfi a terminál, és majd ezt követően a nevét a funkció. 258 00:18:37,110 --> 00:18:39,720 És így, hogy hozza létre a teljes listát a használat, 259 00:18:39,720 --> 00:18:42,890 de ez is hozza létre, amely könyvtár tartozik. 260 00:18:42,890 --> 00:18:47,000 Szóval hagyom, hogy az Ön számára, hogy használja a manuális funkciót atoi 261 00:18:47,000 --> 00:18:53,360 és kitaláljuk, melyik könyvtárat kell tartalmaznia, hogy képes legyen használni az atoi funkciót. 262 00:18:54,450 --> 00:18:57,670 Szóval megvan a kulcs, és most jön a szerzés a sima szöveg, 263 00:18:57,670 --> 00:19:01,820 és hogy valóban lesz felhasználói ahol gyors. 264 00:19:01,820 --> 00:19:05,540 Mi foglalkozott getInt és getFloat, és így az ugyanebben a szellemben 265 00:19:05,540 --> 00:19:07,670 fogunk foglalkozni getString. 266 00:19:07,670 --> 00:19:12,440 De ebben az esetben nem kell semmilyen do közben vagy amíg hurkot, hogy ellenőrizze. 267 00:19:12,440 --> 00:19:14,480 GetString biztosan ad nekünk egy string, 268 00:19:14,480 --> 00:19:17,630 és mi fogjuk titkosítani függetlenül a felhasználó ad nekünk. 269 00:19:17,630 --> 00:19:23,770 Így feltételezhető, hogy az összes ilyen felhasználó bevitt húrok helyes. 270 00:19:23,770 --> 00:19:24,670 Remek. 271 00:19:24,670 --> 00:19:27,270 Tehát, ha megvan a kulcs, és ha megvan a szöveg, 272 00:19:27,270 --> 00:19:31,660 most mi van hátra, meg kell rejtjelezési a sima. 273 00:19:31,660 --> 00:19:36,530 Csak gyorsan terjed át zsargon, a sima, amit a felhasználó ad, 274 00:19:36,530 --> 00:19:41,030 és a rejtjelezett az, amit vissza őket. 275 00:19:42,450 --> 00:19:45,850 Szóval vonósok, hogy képes átmenni ténylegesen betűnként 276 00:19:45,850 --> 00:19:48,550 mert meg kell váltani minden levél, 277 00:19:48,550 --> 00:19:51,390 megértjük, hogy a húrok, ha a fajta húzza vissza a réteg, 278 00:19:51,390 --> 00:19:54,130 azt látjuk, hogy ők csak tényleg egy listát a karakter. 279 00:19:54,130 --> 00:19:55,930 Jön egy a másik után. 280 00:19:55,930 --> 00:20:01,690 És így tudjuk kezelni karakterláncokat tömbök mert tömbök karakterek. 281 00:20:01,690 --> 00:20:05,640 Tehát mondjuk van egy string nevű szöveget, 282 00:20:05,640 --> 00:20:09,400 és ezen belül a változó szöveg tárolt Ez CS50. 283 00:20:09,400 --> 00:20:15,680 Aztán szöveget index 0 lenne a T betű, index 1 lenne h, stb 284 00:20:17,530 --> 00:20:23,970 És akkor a tömbök, a argc példa args.c, 285 00:20:23,970 --> 00:20:27,090 láttuk, hogy mi volt iterációkhoz egy tömb 286 00:20:27,090 --> 00:20:32,440 és így kellett navigálhat-tól i = 0, amíg i kisebb, mint a hossza. 287 00:20:32,440 --> 00:20:35,560 Tehát szükségünk van valamilyen módon kitalálni, hogy mi a hossza a string 288 00:20:35,560 --> 00:20:37,090 ha fogjuk navigálhat rajta. 289 00:20:37,090 --> 00:20:42,300 Szerencsére ismét van egy függvény ott számunkra, noha később az CS50 290 00:20:42,300 --> 00:20:45,860 akkor biztosan végre lehessen hajtani, és a saját funkció 291 00:20:45,860 --> 00:20:48,260 hogy ki tudja számítani a string hossza. 292 00:20:48,260 --> 00:20:52,120 De most fogunk használni string hossza, így a strlen. 293 00:20:52,120 --> 00:21:00,440 Te át egy string, és akkor visszatér egy int, amely képviseli az hosszú a string. 294 00:21:00,440 --> 00:21:05,840 Nézzünk egy példát, hogyan lehet, hogy navigálhat az egyes karaktert egy szövegben 295 00:21:05,840 --> 00:21:08,470 és csinálj valamit ezzel. 296 00:21:08,470 --> 00:21:13,250 Amit akarok, navigálhat az egyes karakter a string, 297 00:21:13,250 --> 00:21:19,150 és mit akarok, kiírjuk back minden karakter 1 x 1 298 00:21:19,150 --> 00:21:22,060 kivéve, adjuk hozzá valamit mellette. 299 00:21:22,060 --> 00:21:27,020 Szóval kezdjük a for ciklus. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Elmegyünk hagyjon helyet a feltételt. 301 00:21:32,700 --> 00:21:36,840 Szeretnénk megismételni, amíg elérjük a végén a húr, ugye? 302 00:21:36,840 --> 00:21:41,340 Akkor mi a funkció ad nekünk a hosszát a húr? 303 00:21:41,340 --> 00:21:43,160 [Hallhatatlan hallgatói válasz] 304 00:21:43,160 --> 00:21:46,420 Ez a hossza a parancssori paramétereket. 305 00:21:46,420 --> 00:21:50,650 De egy karakterláncot szeretnénk használni egy függvényt, amely megadja a hossza a húr. 306 00:21:50,650 --> 00:21:53,090 Szóval ez string hossza. 307 00:21:53,090 --> 00:21:57,130 És akkor meg kell adnod egy string hozzá. 308 00:21:57,130 --> 00:21:59,760 El kell tudni, hogy mit húr is kell számolnia a hossza. 309 00:21:59,760 --> 00:22:03,160 Tehát ebben az esetben van dolgunk karakterlánc s. 310 00:22:04,790 --> 00:22:05,860 Remek. 311 00:22:05,860 --> 00:22:10,770 Akkor mit akarunk csinálni, hadd printf. 312 00:22:10,770 --> 00:22:14,850 Most szeretnénk foglalkozni karakter. Azt akarjuk, hogy kiírja az összes egyéni jellegű. 313 00:22:14,850 --> 00:22:22,150 Ha azt szeretné, hogy nyomtassa ki a float, akkor használja a helyőrző mint% f. 314 00:22:22,150 --> 00:22:24,580 Egy int akkor a% d. 315 00:22:24,580 --> 00:22:30,890 És hasonlóképpen, a karakter a% c mondani fogok nyomtat egy karakter 316 00:22:30,890 --> 00:22:34,570 ez tárolt változó. 317 00:22:34,570 --> 00:22:40,840 Így van ez, és tegyük hozzá időszak és egy szóköz hozzá. 318 00:22:40,840 --> 00:22:45,430 Milyen karakter vagyunk használ? 319 00:22:45,430 --> 00:22:49,780 Fogunk használni bármilyen karakter itt vagyunk a húr. 320 00:22:49,780 --> 00:22:52,890 Akkor fogunk használni valamit string, 321 00:22:52,890 --> 00:22:56,420 de mi szeretnénk érni az egyes karakter ott. 322 00:22:56,420 --> 00:23:02,740 Tehát, ha egy karakterlánc csak egy tömb, akkor hogyan tudjuk elérni elemei tömbök? 323 00:23:02,740 --> 00:23:06,480 Jelenleg ezek szögletes zárójelben, majd rakjuk az index ott. 324 00:23:06,480 --> 00:23:11,820 Tehát szögletes zárójelben. Our index ebben az esetben tudjuk csak használni i. Pontosan. 325 00:23:15,290 --> 00:23:22,370 Tehát itt azt mondjuk fogunk nyomtat egy karaktert, majd egy pont és egy szóköz, 326 00:23:22,370 --> 00:23:30,870 , és hogy a karakter lesz az i-edik levelet a string s. 327 00:23:32,920 --> 00:23:39,330 Én csak fogja menteni azt. Oké. 328 00:23:42,510 --> 00:23:46,840 Most megyek futni string hossza. 329 00:23:46,840 --> 00:23:53,440 Tehát volt egy string nevű OMG, és most még jobban hangsúlyozta. 330 00:23:53,440 --> 00:23:57,870 Hasonlóképpen, mondjuk valójában szeretné, hogy egy string a felhasználó elől. 331 00:23:57,870 --> 00:23:59,580 Hogyan lehet ezt megtenni? 332 00:23:59,580 --> 00:24:01,610 Előtt, hogyan jutottunk el egy int? 333 00:24:01,610 --> 00:24:08,040 Azt mondtuk getInt, ugye? De ez nem int, úgyhogy getString. 334 00:24:11,780 --> 00:24:17,770 Legyen string hossza. Itt nem adott meg konkrét parancsot. 335 00:24:17,770 --> 00:24:19,940 Szóval nem tudom. 336 00:24:19,940 --> 00:24:23,820 Fogom tenni a nevem itt, így aztán tudom csinálni egyike azoknak a dolgoknak 337 00:24:23,820 --> 00:24:29,600 ahol rendelni egy szót minden levél, vagy valami ilyesmi. Cool. 338 00:24:29,600 --> 00:24:31,900 Szóval ez string hossza. 339 00:24:33,000 --> 00:24:34,640 Úgyhogy vissza Caesar. 340 00:24:34,640 --> 00:24:38,620 Van néhány eszköz, hogy hogyan navigálhat egy string, 341 00:24:38,620 --> 00:24:41,250 hogyan tudjuk elérni minden egyes elem. 342 00:24:41,250 --> 00:24:44,720 Így most juthatunk vissza a program. 343 00:24:44,720 --> 00:24:48,650 Ahogy már korábban említettem, az ASCII tábla, a legjobb barátja, 344 00:24:48,650 --> 00:24:52,300 fogod látni a számokat társított minden levelet. 345 00:24:52,300 --> 00:24:55,900 Tehát itt azt mondják a sima is vagyok szédülni! 346 00:24:55,900 --> 00:25:01,090 Ezután minden egyes ilyen karakterek megy, hogy egy szám és ASCII értéket társított, 347 00:25:01,090 --> 00:25:04,710 még az aposztróf, még a hely, még a felkiáltójelet, 348 00:25:04,710 --> 00:25:06,600 így akar majd tartani, hogy szem előtt. 349 00:25:06,600 --> 00:25:12,360 Tehát mondjuk a legfontosabb, hogy a felhasználói építsék parancssori argumentum 6 lehet. 350 00:25:12,360 --> 00:25:17,770 Ez azt jelenti, az első levél, amely azt, ami képviseli 73, 351 00:25:17,770 --> 00:25:25,610 vissza akar térni hozzájuk bármilyen levél képviseli a ASCII értéke 73 + 6. 352 00:25:25,610 --> 00:25:29,020 Ebben az esetben az lenne 79. 353 00:25:30,840 --> 00:25:35,040 Most szeretnénk menni a következő karakterre. 354 00:25:35,040 --> 00:25:40,960 Így a következő az index 1 A szöveges lenne az idézőjel. 355 00:25:40,960 --> 00:25:46,780 De ne feledjük, mi csak szeretnénk rejtjelezési a leveleket. 356 00:25:46,780 --> 00:25:50,040 Ezért szeretnénk, hogy győződjön meg arról, hogy az aposztróf ténylegesen marad, 357 00:25:50,040 --> 00:25:54,310 , hogy nem változik, 39-ről, amit a 45. 358 00:25:54,310 --> 00:25:57,150 Meg akarjuk tartani, mint egy aposztrófot. 359 00:25:57,150 --> 00:26:00,780 Ezért szeretnénk, hogy emlékezzen, hogy csak rejtjelezési a betűket 360 00:26:00,780 --> 00:26:04,560 mert azt akarjuk, az összes többi szimbólum változatlan marad a program. 361 00:26:04,560 --> 00:26:07,130 A másik dolog, hogy azt akarjuk, hogy megőrizze nagybetűk. 362 00:26:07,130 --> 00:26:10,250 Tehát, ha van egy nagybetű, meg kell maradni, mint egy nagybetűs. 363 00:26:10,250 --> 00:26:12,830 Lowercases kell maradni, kisbetű. 364 00:26:13,620 --> 00:26:19,480 Szóval néhány hasznos funkció, hogy képes legyen kezelni csak titkosítási betűk 365 00:26:19,480 --> 00:26:22,380 és tartsa megőrzése kapitalizációja dolgok 366 00:26:22,380 --> 00:26:25,130 a isalpha, isupper, islower funkciók. 367 00:26:25,130 --> 00:26:29,270 És ezek a funkciók vissza egy logikai értéket. 368 00:26:29,270 --> 00:26:34,180 Alapvetően igaz vagy hamis. Ez egy nagybetűs? Ez alfanumerikus? 369 00:26:34,180 --> 00:26:37,180 Ez a levél lényegében. 370 00:26:37,180 --> 00:26:41,070 Tehát itt van 3 példa arra, hogyan fogja használni ezt a funkciót. 371 00:26:41,070 --> 00:26:47,060 Alapvetően, akkor ellenőrizze, hogy a visszaadott érték az Ön által függvény igaz vagy hamis 372 00:26:47,060 --> 00:26:49,400 alapuló bemeneten. 373 00:26:49,400 --> 00:26:54,880 Vagy nem rejtjelezési valamit, vagy titkosírás, illetve győződjön meg arról, hogy ez nagybetűs, stb 374 00:26:54,880 --> 00:27:01,080 [Hallgató] Meg tudod magyarázni, csak azok egy kicsit, és hogyan használja őket? >> Igen, az biztos. 375 00:27:01,080 --> 00:27:08,470 Tehát, ha megnézzük vissza, itt van a főváros I., ugye? 376 00:27:08,470 --> 00:27:14,550 Tehát tudom, hogy megy a O mert + 6 az O. 377 00:27:14,550 --> 00:27:18,740 De mi szeretnénk, hogy győződjön meg arról, hogy O lesz a tőke O. 378 00:27:18,740 --> 00:27:22,940 Tehát alapvetően ez a fajta lesz, hogy megváltoztassuk a bemenet. 379 00:27:22,940 --> 00:27:26,870 Szóval, hogy ez nagybetűs, vagy nem lesz ilyen módjának megváltoztatása, hogy foglalkozzon vele. 380 00:27:26,870 --> 00:27:32,360 Tehát, ha használjuk a isupper függvény az adott index, 381 00:27:32,360 --> 00:27:36,480 így isupper ("I"), ami visszaadja nekünk igaz, tehát tudjuk, hogy ez felső. 382 00:27:36,480 --> 00:27:40,360 Tehát ennek alapján, később megyünk egy képlet 383 00:27:40,360 --> 00:27:42,750 hogy fogod használni váltani dolgokat Caesar, 384 00:27:42,750 --> 00:27:46,560 Tehát alapvetően, ott lesz egy kicsit más formula, ha ez nagybetűs 385 00:27:46,560 --> 00:27:50,670 szemben a kisbetűs. Értelme? 386 00:27:51,020 --> 00:27:52,760 Igen. Semmi gond. 387 00:27:54,900 --> 00:27:58,990 Beszéltem egy kicsit hozzá 6-tól egy levelet, ami nem egészen értelmetlen 388 00:27:58,990 --> 00:28:05,500 kivéve, ha azt a fajta megértjük, hogy ezek a karakterek 389 00:28:05,500 --> 00:28:08,920 a fajta felcserélhetők egészek. 390 00:28:08,920 --> 00:28:11,250 Mit csinálunk mi vagyunk ilyen felhasználás implicit casting. 391 00:28:11,250 --> 00:28:18,100 Elmegyünk a casting egy kicsit később, ha veszel egy értéket, és kapcsolja be a különböző típusú 392 00:28:18,100 --> 00:28:20,440 mint eredetileg volt. 393 00:28:20,440 --> 00:28:25,910 De ez Pset képesek leszünk, hogy milyen szinonimaként használja karakterek 394 00:28:25,910 --> 00:28:30,880 és a hozzájuk tartozó egész értékek. 395 00:28:30,880 --> 00:28:35,140 Tehát, ha egyszerűen csak burkolják a karakter csak a aposztrófot, 396 00:28:35,140 --> 00:28:40,390 akkor képes lesz arra, hogy működjön együtt azt egészek, foglalkozik vele, mint egy egész. 397 00:28:40,390 --> 00:28:48,040 Így a főváros C vonatkozik 67. Lowercase f vonatkozik 102. 398 00:28:48,040 --> 00:28:51,480 Még egyszer, ha meg akarja tudni ezeket az értékeket, nézd meg ASCII asztalnál. 399 00:28:51,480 --> 00:28:56,160 Akkor menjünk át néhány példát arra, hogyan lehet, hogy a kivonáshoz, és adjunk hozzá, 400 00:28:56,160 --> 00:29:03,130 hogyan lehet valójában tényleg dolgozni ezeket a karaktereket, használja őket felváltva. 401 00:29:03,870 --> 00:29:11,350 Azt mondom, hogy ASCIIMath fog számítani hozzáadása a karakter egy egész 402 00:29:11,350 --> 00:29:17,590 majd megjeleníti a kapott karaktert, valamint a kapott ASCII értéket. 403 00:29:17,590 --> 00:29:22,290 És így itt mondok - we'll foglalkozik ez a része később - 404 00:29:22,290 --> 00:29:29,100 de alapvetően, azt mondom, hogy a felhasználó azt futtatni ASCIIMath együtt egy gombot, 405 00:29:29,100 --> 00:29:30,880 és azt mondom, hogy ez a kulcs lesz a szám 406 00:29:30,880 --> 00:29:34,600 amellyel fogunk hozzáadni ezt a karaktert. 407 00:29:34,600 --> 00:29:38,560 Tehát itt észre, hogy mivel én vagyok igényes kulcs, 408 00:29:38,560 --> 00:29:40,590 mert én azt követelve, hogy ők ad nekem 1 dolog, 409 00:29:40,590 --> 00:29:45,600 Csak azt akarom elfogadni. / Asciimath és a kulcs. 410 00:29:45,600 --> 00:29:49,330 Szóval fogom követelni, hogy argc egyenlő 2-re. 411 00:29:49,330 --> 00:29:54,360 Ha ez nem, akkor megyek vissza 1-es és a program kilép. 412 00:29:55,070 --> 00:29:58,540 Szóval azt mondom, a kulcs nem lesz az első parancssori argumentum, 413 00:29:58,540 --> 00:30:05,080 ez lesz a második, és ahogy itt látni, 414 00:30:05,080 --> 00:30:11,790 Fogok fordulni, hogy egy egész. 415 00:30:15,740 --> 00:30:19,230 Aztán megyek be egy karaktert, hogy r. 416 00:30:19,230 --> 00:30:23,970 Figyeljük meg, hogy a típust a változó CHR tulajdonképpen egy egész szám. 417 00:30:23,970 --> 00:30:30,480 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. 418 00:30:33,850 --> 00:30:40,560 Szóval vissza a printf utasítás, ahol van egy helyőrzője karakter 419 00:30:40,560 --> 00:30:43,590 majd egy helyőrző egy egész szám, 420 00:30:43,590 --> 00:30:49,450 a karakter által képviselt chr, és az egész a kulcs. 421 00:30:49,450 --> 00:30:54,320 És így aztán fogunk eredménye hozzá a 2 együtt. 422 00:30:54,320 --> 00:30:58,420 Szóval megyünk hozzá r + függetlenül a kulcs, 423 00:30:58,420 --> 00:31:03,520 majd fogunk nyomtatni az eredményt adott. 424 00:31:06,210 --> 00:31:14,220 Szóval tegyük asciimath. Ez a korszerű, úgyhogy csak fuss asciimath. 425 00:31:14,220 --> 00:31:18,290 Ó, de látni, hogy nem csinál semmit, mert valójában nem adja meg a kulcsot. 426 00:31:18,290 --> 00:31:23,850 Tehát, ha csak iránt 1, a fő funkciója, csak visszatértek hozzánk. 427 00:31:23,850 --> 00:31:29,250 Akkor menjünk át a kulcsot. Valaki adjon nekem egy számot. >> [Hallgató] 4. 428 00:31:29,250 --> 00:31:30,920 4. Oké. 429 00:31:30,920 --> 00:31:39,280 Így r növekedése 4 fog adni nekünk v, amely megfelel az ASCII érték 118. 430 00:31:39,280 --> 00:31:43,880 Tehát ez a fajta van értelme, hogy - 431 00:31:43,880 --> 00:31:51,250 Igazából, lehet kérdezni, mit gondol az ASCII értéke r, ha r + 4 a 118? 432 00:31:53,070 --> 00:31:55,470 Aztán igen, r 114. 433 00:31:55,470 --> 00:32:03,010 Tehát, ha megnézi az ASCII tábla akkor persze elég, látni fogod, hogy r képviseli 114. 434 00:32:03,010 --> 00:32:08,610 Most, hogy tudjuk, hogy mi is hozzá egészek és a karakterek, ez úgy tűnik, elég egyszerű. 435 00:32:08,610 --> 00:32:12,740 Mi csak úgy navigálhat át egy string, mint láttuk, egy példa korábban. 436 00:32:12,740 --> 00:32:17,170 Fogjuk ellenőrizni, ha ez a levél. 437 00:32:17,170 --> 00:32:20,420 Ha igen, akkor mi lesz váltani azt, amit a kulcs. 438 00:32:20,420 --> 00:32:23,650 Elég egyszerű, kivéve, ha kap, hogy tetszik ez, 439 00:32:23,650 --> 00:32:32,140 látod, hogy z, képviseli: 122, akkor adna neked egy másik karaktert. 440 00:32:32,140 --> 00:32:37,770 Igazából akar maradni a mi ábécét, ugye? 441 00:32:37,770 --> 00:32:43,180 Tehát meg kell kitalálni valamilyen módon az ilyen csomagolás körül. 442 00:32:43,180 --> 00:32:47,190 Amikor eléri zed, és szeretné növelni egy bizonyos számot, 443 00:32:47,190 --> 00:32:51,230 nem akarsz belemenni túl ASCII ábécé szakasz; 444 00:32:51,230 --> 00:32:54,140 azt szeretnénk, hogy betakar vissza egészen A. 445 00:32:54,140 --> 00:32:58,550 De ne feledje, még mindig megőrizve az ügyet. 446 00:32:58,550 --> 00:33:00,980 Tehát tudja, hogy betűk nem válhat szimbólumok 447 00:33:00,980 --> 00:33:05,290 mint szimbólumok nem fog változni is. 448 00:33:05,290 --> 00:33:08,170 Az utolsó Pset akkor biztosan nem kell, 449 00:33:08,170 --> 00:33:14,310 hanem lehetőség az volt, hogy hajtsák végre a kapzsi Pset segítségével modulus funkciót. 450 00:33:14,310 --> 00:33:17,230 De most mi valóban szükségünk lesz használni modulus, 451 00:33:17,230 --> 00:33:19,900 úgyhogy menjünk át ezt egy kicsit. 452 00:33:19,900 --> 00:33:26,920 Lényegében, ha van x modulo y, hogy megadja neked a többi x osztva y. 453 00:33:26,920 --> 00:33:30,930 Íme néhány példa van. Jelenleg 27%-os 15. 454 00:33:30,930 --> 00:33:36,200 Alapvetően, ha kivonni 15-től 27, ahányszor csak lehetséges, anélkül, hogy negatív 455 00:33:36,200 --> 00:33:39,060 akkor kap 12 megmaradt. 456 00:33:39,060 --> 00:33:44,650 Szóval ez olyan, mint a matematika összefüggésben, de hogyan tudjuk ténylegesen használni ezt? 457 00:33:44,650 --> 00:33:47,100 Ez lesz hasznos a mi wrapover. 458 00:33:47,100 --> 00:33:55,420 Ehhez mondjuk kértem mindannyian osztani 3 csoportba. 459 00:33:55,420 --> 00:33:58,010 Néha ezt a csoport és valami ilyesmi. 460 00:33:58,010 --> 00:34:01,320 Mondja azt mondtam: "Oké, azt akarom, hogy mindenki osztható 3." 461 00:34:01,320 --> 00:34:04,240 Hogyan lehetne ezt? 462 00:34:04,240 --> 00:34:06,810 [Hallhatatlan tanulói válasz] Igen, pontosan. Számolja ki. Oké. 463 00:34:06,810 --> 00:34:10,260 Tegyük valójában csinálni. Szeretné kezdeni? 464 00:34:10,260 --> 00:34:13,810 [Diákok időzítésének] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 De ne felejtsd el ... >> [Hallgató] Ó, sajnálom. 466 00:34:16,620 --> 00:34:18,730 Ez egy nagyon jó pont. 467 00:34:18,730 --> 00:34:24,130 Azt mondta, 4, de valójában akarom mondani, 1, mert mi csak szeretnénk, 3 csoport. 468 00:34:24,130 --> 00:34:30,159 Tehát, hogyan - Nem, ez egy nagyon jó példa, mert akkor lehet, hogy azt mondod 1? 469 00:34:30,159 --> 00:34:33,370 Mi a kapcsolat 4 és 1? 470 00:34:33,370 --> 00:34:36,760 Nos, 4 mod 3 1 lehet. 471 00:34:36,760 --> 00:34:41,460 Tehát, ha folytatja, akkor az 2. 472 00:34:41,460 --> 00:34:44,540 Tehát van 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Ismét, te tényleg az 5. személy. Honnan tudod mondani helyett a 2-5? 474 00:34:49,420 --> 00:34:53,760 Azt mondjuk 5 mod 3 2 lehet. 475 00:34:53,760 --> 00:34:59,100 Szeretném látni, hogy hány csoport 3 maradnak meg, akkor milyen sorrendben én is 476 00:34:59,100 --> 00:35:02,860 És így aztán, ha továbbra is együtt az egész szobát, 477 00:35:02,860 --> 00:35:07,760 akkor azt látjuk, hogy mi mindig ténylegesen alkalmazzák mod funkciót magunkat 478 00:35:07,760 --> 00:35:09,990 a fajta számít ki. 479 00:35:09,990 --> 00:35:14,490 Ez egy több fajta kézzelfogható példa arra, hogyan lehet használni modulo 480 00:35:14,490 --> 00:35:17,960 mert biztos vagyok benne, a legtöbben valószínűleg ment keresztül ez a folyamat 481 00:35:17,960 --> 00:35:19,630 ha már volt számolni ki. 482 00:35:19,630 --> 00:35:21,840 Bármilyen kérdése van modulo? 483 00:35:21,840 --> 00:35:25,360 Lesz nagyon fontos, hogy megértsék a fogalmak e, 484 00:35:25,360 --> 00:35:28,640 így azt szeretnénk, hogy győződjön meg arról, srácok megérteni. 485 00:35:28,640 --> 00:35:34,660 [Hallgató] Ha nincs maradék, nem is megadja a tényleges száma? 486 00:35:34,660 --> 00:35:40,430 Ha az egyik első 3 közülük tette meg, akkor azt adtam nekik, amit valójában voltak, 487 00:35:40,430 --> 00:35:43,310 vagy lenne adott nekik [hallhatatlan] >> Ez egy jó kérdés. 488 00:35:43,310 --> 00:35:48,750 Ha nincs maradék a modulo - így mondod, van 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 hogy ténylegesen ad vissza 0-ra. 490 00:35:53,670 --> 00:35:57,290 Majd beszélünk, hogy egy kicsit később. 491 00:35:58,810 --> 00:36:07,720 Ó, igen, például a 3. személy - 3 mod 3 tulajdonképpen 0, de azt mondta 3. 492 00:36:07,720 --> 00:36:14,900 Szóval ez olyan, mint egy belső fogás, például 493 00:36:14,900 --> 00:36:17,620 mint a jó, ha a mod 0, akkor én leszek a 3. személy. 494 00:36:17,620 --> 00:36:22,740 De mi lesz a fajta hogyan érdemes foglalkozni azzal, ami a 0 később. 495 00:36:22,740 --> 00:36:32,750 Tehát most valahogy olyan módon feltérképezni zed jobbra levelet. 496 00:36:32,750 --> 00:36:34,920 Tehát most mi már ment keresztül ezeket a példákat, 497 00:36:34,920 --> 00:36:37,880 azt a fajta, hogyan Caesar működhet. 498 00:36:37,880 --> 00:36:42,640 Látod a 2 ábécé és akkor látni őket változó. 499 00:36:42,640 --> 00:36:44,430 Szóval próbálja kifejezni, hogy mind a formula. 500 00:36:44,430 --> 00:36:46,940 Ez a képlet valóban fogja kapni a spec, 501 00:36:46,940 --> 00:36:52,070 de nézzük a fajta néz át, amit minden változó jelent. 502 00:36:52,070 --> 00:36:55,000 A végeredmény lesz a rejtjelezett. 503 00:36:55,000 --> 00:36:58,300 Tehát ez azt mondja, hogy az i-edik karaktere a rejtjelezett 504 00:36:58,300 --> 00:37:02,500 fog megfelelnek az i-edik karaktere a szöveges. 505 00:37:02,500 --> 00:37:08,130 Ennek van értelme, mert azt akarjuk, hogy mindig sorba ezeket a dolgokat. 506 00:37:08,130 --> 00:37:13,480 Szóval ez lesz az i-edik karaktere rejtjelezett plus k, ami a legfontosabb - 507 00:37:13,480 --> 00:37:17,230 hogy van értelme - és akkor itt van ez a mod 26. 508 00:37:17,230 --> 00:37:19,860 Emlékezz vissza, amikor mi volt a Zed 509 00:37:19,860 --> 00:37:24,190 mi nem akarjuk, hogy a karakter, így akartuk mod azt 510 00:37:24,190 --> 00:37:26,540 és milyen kerület az ábécé. 511 00:37:26,540 --> 00:37:33,430 Miután zed akkor megy a, b, c, d, amíg megvan a megfelelő számot. 512 00:37:33,430 --> 00:37:44,690 Így tudjuk, hogy zed, ha + 6, adna nekünk f mert miután zed jön a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Szóval emlékszel tudjuk biztosan, hogy zed + 6 fog adni nekünk f. 514 00:37:52,530 --> 00:38:03,530 Az ASCII értékek, z értéke 122, illetve f 102. 515 00:38:03,530 --> 00:38:10,570 Tehát meg kell találni a módját, hogy a Caesar formula ad nekünk 102 516 00:38:10,570 --> 00:38:13,590 miután a 122. 517 00:38:13,590 --> 00:38:19,550 Szóval, ha csak ezt a képletet, a ('z' + 6)% 26, hogy valóban ad 24 518 00:38:19,550 --> 00:38:25,980 mert 122 + 6 128; 128% 26 ad 24 részében. 519 00:38:25,980 --> 00:38:29,140 De ez nem igazán jelent f. Ez biztosan nem 102. 520 00:38:29,140 --> 00:38:33,590 Ez nem is a 6. betűt az ábécé. 521 00:38:33,590 --> 00:38:41,550 Tehát nyilvánvaló, hogy szükségünk van valamilyen módon a csípés ez egy kicsit. 522 00:38:42,970 --> 00:38:51,340 Ami a hagyományos ábécét, tudjuk, hogy z a 26. levél és a 6. f. 523 00:38:51,340 --> 00:38:55,460 De mi vagyunk a számítástechnikában, ezért megyünk index 0 °. 524 00:38:55,460 --> 00:39:00,690 Tehát ahelyett, z hogy a szám 26, fogjuk mondani, hogy a 25-ös 525 00:39:00,690 --> 00:39:02,630 mert a értéke 0. 526 00:39:02,630 --> 00:39:04,770 És most nézzük ezt a képletet. 527 00:39:04,770 --> 00:39:11,710 Van z képviselők 25 + 6, amely ad 31. 528 00:39:11,710 --> 00:39:15,790 És 31 mod 26 ad 5-ös a maradékot. 529 00:39:15,790 --> 00:39:20,500 Ez tökéletes, mert tudjuk, hogy az 5. f betű az ábécé. 530 00:39:20,500 --> 00:39:26,400 De ez még mindig nem f, ugye? Ez még mindig nem 102. 531 00:39:26,400 --> 00:39:32,730 Akkor erre Pset, kihívás lesz próbálják kideríteni a kapcsolatot 532 00:39:32,730 --> 00:39:36,910 között konvertáló között ASCII értékek és a betűrendes index. 533 00:39:36,910 --> 00:39:40,280 Lényegében, mit akar majd csinálni, azt szeretnénk, hogy elindul az ASCII értékek, 534 00:39:40,280 --> 00:39:45,390 de aztán azt szeretnénk, hogy valahogy át kellene ültetni betűrendes mutató 535 00:39:45,390 --> 00:39:52,610 majd kiszámítja mit írni kell lennie - alapvetően, amit a betűrendes indexe 536 00:39:52,610 --> 00:39:57,660 a titkosító karakter - aztán lefordítani a vissza az ASCII értékeket. 537 00:39:57,660 --> 00:40:04,870 Tehát, ha ostor ki az ASCII táblát, majd megpróbálja megtalálni közötti kapcsolatokat, mondjuk, 102 és 5 538 00:40:04,870 --> 00:40:10,440 vagy a 122 és 25. 539 00:40:12,140 --> 00:40:15,690 Már ütött a kulcsot a parancssori argumentumok, most már ütött a szöveges, 540 00:40:15,690 --> 00:40:17,520 mi már rejtjelezett formában is. 541 00:40:17,520 --> 00:40:19,820 Most hagytuk tennie, hogy nyomtassa ki. 542 00:40:19,820 --> 00:40:22,040 Megtehetjük ezt egy pár különböző módon. 543 00:40:22,040 --> 00:40:24,570 Mit tehetünk valójában kinyomtatni, ahogy megy végig. 544 00:40:24,570 --> 00:40:28,250 Ahogy iterációkhoz a karaktereket a húr, 545 00:40:28,250 --> 00:40:31,660 tudnánk egyszerűen csak nyomtatni, akkor jobb, ha számolunk el. 546 00:40:31,660 --> 00:40:36,030 Alternatív megoldásként, akkor is tárolja egy tömbben, és egy sor karakter 547 00:40:36,030 --> 00:40:39,280 és a végén iterációkhoz, hogy az egész tömb, és nyomtassa ki. 548 00:40:39,280 --> 00:40:40,980 Szóval van egy pár lehetőség adott. 549 00:40:40,980 --> 00:40:47,280 És ne feledjük, hogy% c lesz a helyőrző nyomtatásához egy karaktert. 550 00:40:47,280 --> 00:40:50,420 Tehát ott van Caesar, és most lépni Vigenère, 551 00:40:50,420 --> 00:40:57,580 ami nagyon hasonlít a Caesar de csak kissé bonyolultabb. 552 00:40:57,580 --> 00:41:03,310 Tehát alapvetően Vigenère is fogsz, hogy halad a kulcsszót. 553 00:41:03,310 --> 00:41:06,510 Tehát ahelyett, hogy a számot, akkor megy, hogy egy string, 554 00:41:06,510 --> 00:41:09,200 és hogy fog cselekedni, mint a kulcsszó. 555 00:41:09,200 --> 00:41:14,440 Aztán, mint mindig, fogsz kapni egy gyors egy karaktersorozatot a felhasználó 556 00:41:14,440 --> 00:41:19,050 majd rejtjelezési azt, majd ad nekik a rejtjelezett vissza. 557 00:41:19,050 --> 00:41:24,650 Szóval, mint mondtam, ez nagyon hasonlít a Caesar, kivéve helyett változó egy bizonyos számot, 558 00:41:24,650 --> 00:41:30,620 a szám valóban meg fog változni minden idő karakter karakter. 559 00:41:30,620 --> 00:41:34,890 Ha kijelenti, hogy a tényleges szám váltani, ez képviseli a billentyűzet betűket. 560 00:41:34,890 --> 00:41:43,150 Tehát, ha belépsz egy műszak egy, például, akkor az felelne meg a váltás a 0-ra. 561 00:41:43,150 --> 00:41:45,900 Tehát megint vissza a betűrendes index. 562 00:41:45,900 --> 00:41:49,100 Mi lehet hasznos, ha látja, hogy mi valóban foglalkozunk ASCII értékek 563 00:41:49,100 --> 00:41:51,790 valamint a leveleket, valamint a betűrendes index, 564 00:41:51,790 --> 00:41:58,020 talán talál, vagy a saját ASCII táblázat, amely megmutatja a betűrendes index 0 és 25, 565 00:41:58,020 --> 00:42:03,750 A-Z, és az ASCII értékeket, így a fajta látja a kapcsolat 566 00:42:03,750 --> 00:42:07,020 és a vázlatot, és megpróbálja megtalálni néhány mintát. 567 00:42:07,020 --> 00:42:11,010 Hasonlóképpen, ha te változó az egyes fokon f - 568 00:42:11,010 --> 00:42:21,110 és ez akár kis-vagy nagybetűs f -, akkor, ami megfelel az 5. 569 00:42:21,110 --> 00:42:24,180 Vagyunk jó eddig? 570 00:42:25,770 --> 00:42:30,050 A képlet Vigenère egy kicsit más. 571 00:42:30,050 --> 00:42:32,960 Alapvetően, ha látja, hogy olyan, mint Caesar, 572 00:42:32,960 --> 00:42:37,390 kivéve, ahelyett, hogy csak k már k index j. 573 00:42:37,390 --> 00:42:44,810 Figyeljük meg, hogy mi nem használjuk mert ez lényegében a hossza a kulcsszó 574 00:42:44,810 --> 00:42:49,850 nem szükségszerűen a hossza a rejtjelezett. 575 00:42:49,850 --> 00:42:56,130 Ez lesz egy kicsit egyértelműbb, ha azt látjuk, egy példa, hogy egy kicsit később. 576 00:42:56,130 --> 00:43:03,160 Alapvetően, ha fut a program egy kulcsszót ohai, 577 00:43:03,160 --> 00:43:08,560 akkor ez azt jelenti, hogy minden alkalommal, ohai lesz a váltás. 578 00:43:08,560 --> 00:43:11,060 Szóval, attól függően, hogy milyen helyzetben van a kulcsszó, 579 00:43:11,060 --> 00:43:15,800 fogod váltani az egyes rejtjelezett karaktert ezzel az összeggel. 580 00:43:15,800 --> 00:43:19,630 Ismét, mint Caesar, azt szeretnénk, hogy győződjön meg arról, hogy megőrizzük a nagybetűs dolgok 581 00:43:19,630 --> 00:43:22,900 és csak rejtjelezési betűket, nem karaktereket vagy szóközöket. 582 00:43:22,900 --> 00:43:26,330 Így néz vissza Caesar a funkciókat, hogy esetleg felhasználhatók, 583 00:43:26,330 --> 00:43:32,570 az is, hogy úgy döntött, hogy váltani a dolgokat, és alkalmazza a program itt. 584 00:43:32,570 --> 00:43:35,260 Szóval feltérképezni ezt. 585 00:43:35,260 --> 00:43:39,680 Van egy sima, hogy már ütött a felhasználó getString 586 00:43:39,680 --> 00:43:44,090 mondván: Ez ... a CS50! 587 00:43:44,090 --> 00:43:47,090 Aztán van egy kulcsszót ohai. 588 00:43:47,090 --> 00:43:50,930 Az első 4 karakter elég egyszerű. 589 00:43:50,930 --> 00:43:55,580 Tudjuk, hogy a T lesz eltolt o, 590 00:43:55,580 --> 00:44:01,990 akkor h lesz eltolt h, i fogja eltolni egy. 591 00:44:01,990 --> 00:44:04,610 Itt látható, hogy a értéke 0, 592 00:44:04,610 --> 00:44:11,940 így aztán a végén érték valójában csak Ugyanebben a levélben, mint korábban. 593 00:44:11,940 --> 00:44:15,250 Aztán s eltolódik i. 594 00:44:15,250 --> 00:44:19,370 De akkor már ezen időszakok itt. 595 00:44:19,370 --> 00:44:25,960 Mi nem akarjuk, hogy a rejtjelezési, így aztán nem változtatunk azt semmi 596 00:44:25,960 --> 00:44:31,280 és csak nyomtassa ki az időszakban nem változott. 597 00:44:31,280 --> 00:44:38,020 [Hallgató] Én nem értem, hogy tudod, hogy ez eltolódik - Hová ment - >> Ó, sajnálom. 598 00:44:38,020 --> 00:44:41,620 A legfelső itt láthatjuk, hogy a parancssori argumentum ohai itt, 599 00:44:41,620 --> 00:44:43,740 ez lesz a kulcsszó. 600 00:44:43,740 --> 00:44:49,550 És így alapvetően, te kerékpározás át a karaktereket a kulcsszót. 601 00:44:49,550 --> 00:44:52,020 [Hallgató] Szóval o lesz változó azonos - 602 00:44:52,020 --> 00:44:56,260 Tehát o megfelel egy bizonyos szám az ábécé. 603 00:44:56,260 --> 00:44:58,400 [Hallgató] Rendben. De hol szerezted a CS50 részben? 604 00:44:58,400 --> 00:45:02,540 Oh. Ez a getString ahol te, mint: "Adj egy string kódolására." 605 00:45:02,540 --> 00:45:07,510 [Hallgató] fognak adni neked ezt az érvet váltani által 606 00:45:07,510 --> 00:45:09,380 és akkor fogja kérni az első string. >> Igen. 607 00:45:09,380 --> 00:45:12,440 Tehát, amikor a program futtatásához, mennek fel a kulcsszó 608 00:45:12,440 --> 00:45:14,740 saját parancssori argumentumok, amikor futtatni. 609 00:45:14,740 --> 00:45:19,740 Majd ha egyszer már ellenőrizték, hogy ők már ténylegesen adott Önnek 1, de nem több, nem kevesebb, 610 00:45:19,740 --> 00:45:23,750 akkor fogod kérni őket egy string, azt mondja: "Adj egy string." 611 00:45:23,750 --> 00:45:27,630 Szóval, ez az, ahol ebben az esetben akkor Ön Ez ... a CS50! 612 00:45:27,630 --> 00:45:32,090 Akkor fogod használni, hogy, és használja ohai és iterációkhoz. 613 00:45:32,090 --> 00:45:38,200 Figyeljük meg, hogy itt átugorja titkosítását időszakok, 614 00:45:38,200 --> 00:45:51,660 de tekintve a pozíció ohai, a következő egy általunk használt o. 615 00:45:51,660 --> 00:45:54,990 Ebben az esetben ez egy kicsit nehezebb látni, mert ez 4, 616 00:45:54,990 --> 00:45:57,710 úgyhogy továbbra is egy kicsit. Csak maradj itt velem. 617 00:45:57,710 --> 00:46:02,960 Akkor van I és S, amelyeket azután fordította O és H volt. 618 00:46:02,960 --> 00:46:09,370 Aztán van egy hely, és így aztán tudjuk, hogy nem fognak rejtjelezési a terek. 619 00:46:09,370 --> 00:46:18,930 De vegyük észre, hogy ahelyett, hogy egy ebben a helyzetben itt, 620 00:46:18,930 --> 00:46:28,330 vagyunk titkosítása egy - nem tudom, ha látja, hogy - itt. 621 00:46:28,330 --> 00:46:33,710 Tehát ez nem olyan, mint te valójában előre, mondjuk, o megy itt, h megy itt, 622 00:46:33,710 --> 00:46:39,200 egy megy itt, i megy itt, O, H, egy, i, o, h, egy, i. Nem tehetem. 623 00:46:39,200 --> 00:46:43,760 Csak elmozdulás a pozícióját a kulcsszó 624 00:46:43,760 --> 00:46:51,020 amikor tudod, hogy te tényleg lesz titkosítható tényleges levelet. 625 00:46:51,020 --> 00:46:53,920 Vajon ez a fajta értelme? 626 00:46:53,920 --> 00:46:55,800 Oké. 627 00:46:56,490 --> 00:46:58,500 Szóval csak néhány emlékeztetőt. 628 00:46:58,500 --> 00:47:03,760 Azt szeretnénk, hogy győződjön meg arról, hogy csak előre a következő levél a kulcsszó 629 00:47:03,760 --> 00:47:06,390 ha a karaktert a szöveges egy levelet. 630 00:47:06,390 --> 00:47:09,120 Szóval azt mondom, Nálunk a o. 631 00:47:09,120 --> 00:47:19,310 Megjegyezzük, hogy a következő karakter, az i index a szöveges, egy szám, például. 632 00:47:19,310 --> 00:47:31,630 Akkor mi nem előre j, az index a kulcsszó, amíg el nem éri egy másik levelet. 633 00:47:31,630 --> 00:47:36,230 Még egyszer, akkor is szeretnénk, hogy győződjön meg arról, hogy wraparound, hogy az elején a kulcsszó 634 00:47:36,230 --> 00:47:37,770 ha már a végén is. 635 00:47:37,770 --> 00:47:42,030 Ha látod, itt vagyunk a i, a következő egy kell lennie o. 636 00:47:42,030 --> 00:47:47,690 Szóval azt akarod, hogy megtalálja a módját, hogy képes wraparound elejére a kulcsszó 637 00:47:47,690 --> 00:47:49,470 minden alkalommal, hogy elérjük a végét. 638 00:47:49,470 --> 00:47:55,040 És megint, milyen üzemben hasznos ebben az esetben csomagolási körül? 639 00:47:56,630 --> 00:47:59,840 Mint a számláló off példa. 640 00:47:59,840 --> 00:48:03,710 [Hallgató] A százalék jel. >> Igen, a százalékos megjelölés, amely modulo. 641 00:48:03,710 --> 00:48:11,250 Így modulo majd jöhet ide, ha azt szeretné, hogy lezárja az index a ohai. 642 00:48:11,250 --> 00:48:17,700 És csak egy gyors tipp: próbálja gondolni csomagolás alatt a kulcsszó egy kicsit olyan, mint a számláló le, 643 00:48:17,700 --> 00:48:23,590 ahol ha van 3 csoport, a 4. személy, 644 00:48:23,590 --> 00:48:30,610 számuk, hogy azt mondta, hogy 4 mod 3, amely 1. 645 00:48:30,610 --> 00:48:32,880 Így próbálja gondolni így. 646 00:48:34,770 --> 00:48:42,740 Ahogy láttam a képlet, ahol van ci majd pi de aztán kj, 647 00:48:42,740 --> 00:48:44,700 azt szeretnénk, hogy győződjön meg arról, hogy nyomon követni azokat. 648 00:48:44,700 --> 00:48:47,580 Nem kell hívni i, nem kell hívni j, 649 00:48:47,580 --> 00:48:53,270 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 650 00:48:53,270 --> 00:48:55,790 valamint az álláspontját, hogy te vagy az a kulcsszó 651 00:48:55,790 --> 00:48:59,840 mert azok nem feltétlenül lesz azonos. 652 00:48:59,840 --> 00:49:06,400 Nem csak a kulcsszó - ez lehet egy teljesen különböző hosszúságú, mint a sima. 653 00:49:06,400 --> 00:49:09,140 Továbbá, a sima, vannak számok és karakterek, 654 00:49:09,140 --> 00:49:14,450 így nem fog tökéletesen egyeznek meg együtt. Igen. 655 00:49:14,450 --> 00:49:19,280 [Hallgató] Van egy funkció változtatni esetben? 656 00:49:19,280 --> 00:49:24,530 Meg tudod változtatni a tőke A? >> Igen, határozottan. 657 00:49:24,530 --> 00:49:27,890 Akkor nézd meg - azt hiszem ez toupper, Az összes 1 szó. 658 00:49:30,650 --> 00:49:36,310 De ha akarsz titkosító dolgokat, és megőrizni a szöveget, 659 00:49:36,310 --> 00:49:39,350 a legjobb alapvetően külön eseteket. 660 00:49:39,350 --> 00:49:42,040 Ha ez egy nagybetűs, akkor akar váltani e 661 00:49:42,040 --> 00:49:46,460 mert a képlet, ha visszatekintünk, hogyan kell ilyen go 662 00:49:46,460 --> 00:49:50,900 váltakozva közötti ASCII módja képviselő számok 663 00:49:50,900 --> 00:49:55,020 és a tényleges betűrendes index, azt szeretnénk, hogy győződjön meg arról, 664 00:49:55,020 --> 00:50:01,850 ott lesz valamilyen mintát, hogy fogsz használni. 665 00:50:01,850 --> 00:50:04,580 A másik megjegyzés a minta, valóban. 666 00:50:04,580 --> 00:50:07,250 Fogsz határozottan foglalkozik számokat. 667 00:50:07,250 --> 00:50:11,280 Próbáld meg nem használja mágikus számot, amely példa a stílus. 668 00:50:11,280 --> 00:50:18,470 Szóval, azt szeretné, hogy minden time shift valamit szeretne - 669 00:50:18,470 --> 00:50:22,400 Oké, tipp, másik spoiler amikor fogsz átalakulhatnak valami 670 00:50:22,400 --> 00:50:26,310 egy bizonyos összeget, próbáld meg nem jelent, hogy a tényleges szám 671 00:50:26,310 --> 00:50:32,810 hanem megpróbálja, hátha tudod használni az ASCII érték, amely a fajta, hogy több értelme van. 672 00:50:32,810 --> 00:50:35,470 Egy másik megjegyzés: Mivel van dolgunk képletek, 673 00:50:35,470 --> 00:50:41,200 ellenére, hogy a TF fogja fajta tudja, mit minta lehet használni, 674 00:50:41,200 --> 00:50:44,430 a legjobb, hogy a hozzászólások a fajta magyarázat a logika, mint például, 675 00:50:44,430 --> 00:50:51,880 "Én ezzel a mintával, mert ..." és milyen magyarázatot mintát tömören meg észrevételeit. 676 00:50:54,090 --> 00:50:58,990 [Ez walkthrough 2] Ha nincs más kérdés, akkor én csak itt maradok egy kicsit. 677 00:50:58,990 --> 00:51:04,370 Sok szerencsét a Pset 2: Crypto és köszönöm, hogy eljöttek. 678 00:51:06,070 --> 00:51:08,620 [Hallgató] Köszönöm. >> Köszönöm. 679 00:51:09,220 --> 00:51:10,800 [Media Offline intro]