1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Walk Through - Probleem Set 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Harvard Universiteit] 3 00:00:05,170 --> 00:00:07,490 [Hierdie is CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Alles reg. Hallo, almal, en welkom by Walk Through 2. 5 00:00:10,750 --> 00:00:14,330 Eerstens, ek wil jou geluk te wens vir die afwerking van pset 1. 6 00:00:14,330 --> 00:00:18,140 Ek weet dat dit kon gewees het 'n bietjie moeilik vir sommige van julle, 7 00:00:18,140 --> 00:00:20,460 jou eerste rekenaar program wat jy geskryf het kon gewees het, 8 00:00:20,460 --> 00:00:24,500 maar onthou net dat op die einde van hierdie, wanneer jy terug kyk na die einde van die semester, 9 00:00:24,500 --> 00:00:29,820 jy kyk na pset 1 en jy sal sê, "Hey, ek kon gedoen het dat in 5 minute." 10 00:00:29,820 --> 00:00:35,700 So ken en vertrou dat jy aan die einde van hierdie sal beslis pset 1 heel eenvoudig. 11 00:00:35,700 --> 00:00:40,640 Maar vir nou is dit 'n groot prestasie, en baie geluk vir die kry gedoen. 12 00:00:40,640 --> 00:00:44,010 Nou ook 'n vinnige nota voor ons kry in die vleis van die instruksies. 13 00:00:44,010 --> 00:00:48,340 Ek wil net 'n vinnige nota om te maak dat ek soms nie genoeg tyd 14 00:00:48,340 --> 00:00:52,500 gedurende die ipv om te gaan deur middel van elke enkele manier van doen van die probleem stel 15 00:00:52,500 --> 00:00:56,140 en eerder net miskien fokus op die 1 of 2 soort van implementasies, 16 00:00:56,140 --> 00:00:57,750 maniere waarop jy dit kan doen. 17 00:00:57,750 --> 00:01:01,970 Maar dit is nie te sê dat jy word verbied om dit te doen 'n ander manier. 18 00:01:01,970 --> 00:01:05,980 Daar is dikwels, soos met rekenaarwetenskap, talle maniere om dinge te doen, 19 00:01:05,980 --> 00:01:12,190 en so beslis voel vry om 'n ander tipe van die oplossing as wat ek aangebied mag het om te gebruik. 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. 'N Artikel van die vrae - 1. Caesar - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Alles reg. So die probleem stel 2: Crypto is 'n prettige een. 23 00:01:20,650 --> 00:01:24,500 Weereens, met elke pset wat jy sal begin met 'n gedeelte van die vrae 24 00:01:24,500 --> 00:01:29,600 wat gaan in jou artikels met jou opgedra onderrig mede. 25 00:01:29,600 --> 00:01:31,670 Ons is nie van plan om te gaan deur middel van hierdie oor die instruksies, 26 00:01:31,670 --> 00:01:35,100 maar hulle sal beslis help jy die pset voltooi. 27 00:01:35,100 --> 00:01:38,100 Dus is die eerste deel van die probleem stel is die keiser. 28 00:01:38,100 --> 00:01:43,470 En so in die keiser iemand sal verby jou 'n sleutel met 'n heelgetal, 29 00:01:43,470 --> 00:01:48,420 en jy sal 'n string van die teks wat hulle bied jou enkripteer 30 00:01:48,420 --> 00:01:50,670 en gee hulle terug 'n geënkripteerde ding. 31 00:01:50,670 --> 00:01:56,050 As iemand gekyk A Christmas Story, daar is 'n voorbeeld van dat daar. 32 00:01:56,050 --> 00:01:59,090 Dan is die tweede deel van die probleem stel is Vigenere, 33 00:01:59,090 --> 00:02:01,790 wat is 'n meer gevorderde enkripsie tegniek. 34 00:02:01,790 --> 00:02:05,640 En so gaan ons 'n stuk van die teks te versleutelen, 35 00:02:05,640 --> 00:02:09,600 behalwe plaas met net 'n heelgetal, ons eintlik gaan om dit te enkodeer 36 00:02:09,600 --> 00:02:13,340 met 'n navraag wat die gebruiker sal ons. 37 00:02:16,270 --> 00:02:22,090 Goed, so die eerste instrument in die toolbox vandag is eintlik gaan word afhangende van die toestel. 38 00:02:22,090 --> 00:02:26,430 Op die discussion board ons sal sien dinge soos, "Waarom nie hierdie werk?" 39 00:02:26,430 --> 00:02:28,110 "Hoekom Dien 50 werk nie?" 40 00:02:28,110 --> 00:02:31,830 en dikwels die oplossing is eintlik net jou toestel te werk. 41 00:02:31,830 --> 00:02:36,730 En so, as jy net loop in 'n terminale venster in jou toestel sudo yum-y - 42 00:02:36,730 --> 00:02:40,040 wat is 'n vlag wat ja sê, werk alles - update, 43 00:02:40,040 --> 00:02:42,280 dan is jou toestel sal werk as dit nodig is. 44 00:02:42,280 --> 00:02:46,960 En dit maak nie seer as jy reeds by die mees onlangse weergawe van die toestel. 45 00:02:46,960 --> 00:02:51,280 Dan sal dit net sê Geen nuwe bywerkings beskikbaar en jy kan voortgaan om saam te werk. 46 00:02:51,280 --> 00:02:55,800 Maar dit is goed elke keer wat jy die toestel oopmaak om selfs uit te voer 47 00:02:55,800 --> 00:02:57,140 want ons is nog steeds baie - 48 00:02:57,140 --> 00:03:00,320 soms as ons in 'n bug tot vaststelling van dit in die toestel. 49 00:03:00,320 --> 00:03:03,180 So maak seker dat jy die mees onlangse weergawe van die toestel 50 00:03:03,180 --> 00:03:07,710 en uit te voer dat daar werk. 51 00:03:07,710 --> 00:03:14,360 Alles reg. So, aangesien ons te doen het met briewe en verander, geheimschrift dinge, 52 00:03:14,360 --> 00:03:20,410 ons gaan regtig wil die beste vriende met ons ASCII tabel. 53 00:03:20,410 --> 00:03:24,350 Daar is talle aanlyn, as jy. Miskien selfs jou eie maak. 54 00:03:24,350 --> 00:03:29,950 Basies, met elke brief en elke en elke karakter 55 00:03:29,950 --> 00:03:32,210 daar is 'n aantal wat verband hou met hulle, 56 00:03:32,210 --> 00:03:38,670 en so dit is goed om hulle ASCII waardes te sien saam met die werklike brief. 57 00:03:38,670 --> 00:03:42,310 Dit sal beslis help om jou in die probleem stel. 58 00:03:42,310 --> 00:03:45,750 Een ding wat my regtig gehelp het in hierdie probleem stel om werklik druk dit uit, 59 00:03:45,750 --> 00:03:48,380 en as ek gaan deur, ek sou eintlik trek op dit, 60 00:03:48,380 --> 00:03:51,150 skryf: "As hierdie het om te gaan na daar, dan ..." 61 00:03:51,150 --> 00:03:55,270 Soort trek op en merk dit op, word die beste vriende met jou ASCII tabel. 62 00:03:57,240 --> 00:04:00,750 Dan het ons 'n paar ander instrumente tot ons beskikking. 63 00:04:00,750 --> 00:04:03,750 Hierdie tyd in plaas van werklik waarna die gebruiker vir al hul insette 64 00:04:03,750 --> 00:04:05,230 ons gaan om 'n kombinasie te doen. 65 00:04:05,230 --> 00:04:06,880 Ons gaan hulle te vinnig vir 'n paar insette, 66 00:04:06,880 --> 00:04:11,350 maar ons gaan ook net gebruik maak van die command line argumente. 67 00:04:11,350 --> 00:04:15,600 So wanneer hulle hul program loop, gewoonlik sê jy / Hello, byvoorbeeld, 68 00:04:15,600 --> 00:04:17,310 as jou program hello.c was. 69 00:04:17,310 --> 00:04:22,500 Maar hierdie keer in plaas van net te sê dat, kan hulle die woorde, argumente daarna. 70 00:04:22,500 --> 00:04:27,210 En so gaan ons om te gebruik wat hulle by ons in te slaag sowel as hul insette, 71 00:04:27,210 --> 00:04:31,720 so beweeg verder as net te vra vir heelgetal, maar ook die gebruik van command line argumente. 72 00:04:31,720 --> 00:04:36,590 En dan sal ons gaan in skikkings en snare, wat ons sal gebruik word om 'n baie goed. 73 00:04:41,460 --> 00:04:44,810 Hier is net 'n voorbeeld van 1 mini ASCII tabel. 74 00:04:44,810 --> 00:04:48,460 Soos ek sê, elke brief moet stem ooreen met 'n aantal 75 00:04:48,460 --> 00:04:52,510 en so vergewis jouself met dit. Dit sal handig te pas kom. 76 00:04:52,510 --> 00:04:55,610 En later, toe ons begin doen n ASCIIMath die hantering van die getalle - 77 00:04:55,610 --> 00:05:00,110 optelling, aftrekking hulle dan beslis goed om te verwys na hierdie grafiek. 78 00:05:02,860 --> 00:05:06,920 So hier is 'n voorbeeld van 'n keiser cipher - iets wat jy kan gespeel het. 79 00:05:06,920 --> 00:05:11,190 Dit is net 'n wiel was. Wese, daar is 'n buitenste alfabet en dan is daar 'n innerlike alfabet. 80 00:05:11,190 --> 00:05:15,290 So reg hier is 'n voorbeeld van die keiser cipher, maar met 'n sleutel van 0. 81 00:05:15,290 --> 00:05:21,540 A wese, in lyn met A, B is in lyn met B, al die pad tot by Z. 82 00:05:21,540 --> 00:05:26,590 Maar dan sê ons wou 'n sleutel van 3, byvoorbeeld. 83 00:05:26,590 --> 00:05:33,280 Dan sal ons die binneste wiel draai sodat 'n nou ooreenstem met D, ens 84 00:05:33,280 --> 00:05:35,250 En so het dit is in wese wat ons gaan doen. 85 00:05:35,250 --> 00:05:38,340 Ons het nie 'n wiel, maar wat ons gaan doen, is ons program 86 00:05:38,340 --> 00:05:44,490 soort skuif die alfabet saam met ons 'n sekere bedrag van getalle. 87 00:05:44,490 --> 00:05:48,650 Dus soos ek vantevore gesê het, gaan ons doen met die command line argumente 88 00:05:48,650 --> 00:05:50,390 sowel as om 'n heelgetal. 89 00:05:50,390 --> 00:05:55,050 So het die manier waarop 'n gebruiker sal jou Caesar program hardloop, is deur te sê / Caesar 90 00:05:55,050 --> 00:05:58,090 en dan die begin van 'n nommer na. 91 00:05:58,090 --> 00:06:01,130 En dat die getal verteenwoordig die sleutel, die verskuiwing, 92 00:06:01,130 --> 00:06:06,740 hoeveel keer jy gaan om die draai van die binneste wiel van jou Caesar-cipher. 93 00:06:06,740 --> 00:06:08,390 En so sien jy hier 'n voorbeeld. 94 00:06:08,390 --> 00:06:14,550 As ons in die letters van A tot L in ons Caesar cipher, 95 00:06:14,550 --> 00:06:19,520 dan sou dit insette D deur O want dit is elke letter verskuif meer as 3 keer, 96 00:06:19,520 --> 00:06:22,080 net soos die voorbeeld van die wiel wat Ek julle getoon. 97 00:06:22,080 --> 00:06:25,300 Daarom dan, as wat jy ingevoer het, byvoorbeeld, Dit is CS50! 98 00:06:25,300 --> 00:06:27,960 dan sou dit beweeg ook al die briewe. 99 00:06:27,960 --> 00:06:31,040 En dit is 'n belangrike ding in beide Caesar en Vigenere 100 00:06:31,040 --> 00:06:34,890 is dat ons gaan om te slaan enige nie-briewe. 101 00:06:34,890 --> 00:06:39,160 So enige spasies, karakters, ens, getalle, gaan ons hulle dieselfde te hou. 102 00:06:39,160 --> 00:06:42,920 Ons is net gaan om die letters te skuif in hierdie geval. 103 00:06:42,920 --> 00:06:45,870 So soos jy kan sien in die wiel, ons het net die letters tot ons beskikking, 104 00:06:45,870 --> 00:06:50,150 sodat ons wil net die letters te skuif en die letters te enkripteer. 105 00:06:51,370 --> 00:06:56,720 Dus is die eerste ding om te doen, jy sien dat die gebruik vir Caesar in die probleem wat 2 106 00:06:56,720 --> 00:07:05,280 is die keiser te hardloop en dan 'n nommer gee wanneer jy dit loop in die terminale. 107 00:07:05,280 --> 00:07:10,940 So, wat ons nodig het om te doen is om op een of ander manier kry die sleutel en dit toegang. 108 00:07:10,940 --> 00:07:14,730 En so het ons wil om een ​​of ander manier te sien dit gaan om die tweede command line argument. 109 00:07:14,730 --> 00:07:20,950 Die eerste een gaan wees / keiser., En die volgende een gaan die sleutel getal wees. 110 00:07:22,190 --> 00:07:29,200 So voordat ons moes int main (void) ons C programme te begin. 111 00:07:29,200 --> 00:07:31,790 Ons gaan 'n lagie skil terug 'n bietjie 112 00:07:31,790 --> 00:07:34,720 en eintlik sien dat in plaas van verbygaande leemte aan ons hooffunksie 113 00:07:34,720 --> 00:07:37,920 ons eintlik die hantering van 2 parameters. 114 00:07:37,920 --> 00:07:44,070 Ons het 'n int genoem argc en dan 'n skikking van stringe genoem bevat SPASIES. 115 00:07:44,070 --> 00:07:46,030 So argc 'n heelgetal is, 116 00:07:46,030 --> 00:07:49,640 en dit verteenwoordig die aantal argumente geslaag het in jou program. 117 00:07:49,640 --> 00:07:53,590 En dan bevat SPASIES is eintlik die lys van die argumente geslaag. 118 00:07:53,590 --> 00:08:00,820 Al die argumente is stringe, en so bevat SPASIES verteenwoordig 'n skikking, 'n lys van stringe. 119 00:08:01,830 --> 00:08:03,990 Kom ons praat oor skikkings 'n bietjie. 120 00:08:03,990 --> 00:08:05,940 Skikkings is in wese 'n nuwe data struktuur. 121 00:08:05,940 --> 00:08:09,660 Ons het ints, ons het verdubbel, ons het stringe, en nou het ons skikkings. 122 00:08:09,660 --> 00:08:13,820 Skikkings is data strukture wat verskeie waardes van dieselfde tipe kan hou, 123 00:08:13,820 --> 00:08:18,320 so in wese, 'n lys van watter tipe wat jy wil. 124 00:08:18,320 --> 00:08:24,400 Wese, as jy wou 'n lys van heelgetalle in 1 veranderlike, 125 00:08:24,400 --> 00:08:29,090 dan sou jy die skep van 'n nuwe veranderlike van tipe int array was. 126 00:08:29,090 --> 00:08:34,450 So skikkings is zero-geïndekseer, wat beteken dat die eerste element van die skikking is op die werf 0. 127 00:08:34,450 --> 00:08:41,799 Indien die skikking van lengte 4, soos in hierdie voorbeeld, dan is jou laaste element sou wees by index 3, 128 00:08:41,799 --> 00:08:44,810 wat is 4 - 1. 129 00:08:45,940 --> 00:08:48,420 So skikking te skep, sal jy iets soos hierdie. 130 00:08:48,420 --> 00:08:51,440 Sê jy wou 'n dubbele-skikking. 131 00:08:51,440 --> 00:08:56,520 Dit geld vir enige tipe van data tipe, though. 132 00:08:56,520 --> 00:09:00,210 So sê jy wil 'n dubbele-skikking. Sê wat jy wil om dit te noem posbus. 133 00:09:00,210 --> 00:09:04,760 Net soos jy sou inisialiseer enige ander dubbel, 134 00:09:04,760 --> 00:09:09,760 sou jy dubbel en dan sê die naam, maar hierdie keer het ons die vierkantige hakies, 135 00:09:09,760 --> 00:09:13,570 en dan die nommer daar sal die lengte van die skikking. 136 00:09:13,570 --> 00:09:16,840 Let daarop dat ons in skikkings ooit kan verander nie die lengte, 137 00:09:16,840 --> 00:09:21,230 So het jy altyd Hoeveel bokse te definieer en te kies, 138 00:09:21,230 --> 00:09:25,440 hoeveel waardes jou skikking gaan om vas te hou. 139 00:09:25,440 --> 00:09:31,820 So verskillende waardes in die skikking te stel, gaan jy die volgende sintaks wat gebruik word, 140 00:09:31,820 --> 00:09:33,200 as jy sien op die slide. 141 00:09:33,200 --> 00:09:37,620 Jy het posbus indeks 0 gestel word tot 1,2, 142 00:09:37,620 --> 00:09:42,180 posbus indeks 1 stel tot 2,4, ens. 143 00:09:42,180 --> 00:09:47,910 So nou dat ons het nagegaan skikkings 'n bietjie, laat ons gaan terug na argc en bevat SPASIES. 144 00:09:47,910 --> 00:09:52,220 Ons weet dat bevat SPASIES nou is 'n verskeidenheid van snare. 145 00:09:52,220 --> 00:09:55,080 So wanneer 'n gebruiker gaan in - sê dat hulle 'n program loop - 146 00:09:55,080 --> 00:09:58,740 sê hulle. / Hello Dawid Malan, 147 00:09:58,740 --> 00:10:05,160 wat die program sal doen vir jou reeds is eintlik vorendag gekom met wat argc en bevat SPASIES is. 148 00:10:05,160 --> 00:10:07,620 So jy hoef nie te bekommerd wees oor wat. 149 00:10:07,620 --> 00:10:14,370 Argc in hierdie geval sou wees 3 want dit sien 3 verskillende woorde geskei deur spasies. 150 00:10:14,370 --> 00:10:18,850 En so het dan die skikking in hierdie geval, sou die eerste indeks / hello. 151 00:10:18,850 --> 00:10:21,770 die volgende een Dawid die volgende een Malan. 152 00:10:21,770 --> 00:10:25,640 Nie almal dadelik sien wat die verhouding tussen bevat SPASIES, 153 00:10:25,640 --> 00:10:28,990  die skikking, en argc is? 154 00:10:32,820 --> 00:10:38,090 Ja. Ons kry in wat in 'n voorbeeld in args.c. 155 00:10:38,090 --> 00:10:42,880 Kom ons kyk of ons kan neem voordeel van die verhouding tussen die 2. 156 00:10:42,880 --> 00:10:46,550 Hier jy dalk vind dat die standaard in die toestel aansoek 157 00:10:46,550 --> 00:10:49,450 c lêers oop te maak is soms Emacs. 158 00:10:49,450 --> 00:10:54,660 Maar ons wil om te gaan met gedit, so wat jy kan doen, kan jy regs kliek op jou C lêer, 159 00:10:54,660 --> 00:11:04,580 gaan na Properties, Open met, en kies dan gedit Stel as verstek, 160 00:11:04,580 --> 00:11:13,020 en nou jou program moet oopmaak gedit in plaas van Emacs. 161 00:11:14,710 --> 00:11:16,290 Perfect. 162 00:11:17,120 --> 00:11:25,520 Ek het so hier is 'n program wat ek wil uit te druk elke command line argument. 163 00:11:25,520 --> 00:11:32,050 Dus, wat die gebruiker insette, ek wil in wese gee dit terug aan hulle op 'n nuwe lyn. 164 00:11:32,050 --> 00:11:36,710 So, wat is 'n struktuur wat ons kan gebruik om oor iets te itereer - 165 00:11:36,710 --> 00:11:40,380 iets wat jy waarskynlik in jou pset 1? 166 00:11:40,380 --> 00:11:45,840 As jy wil om te gaan deur middel van 'n sekere aantal van die dinge? >> [Student] For-lus. 167 00:11:45,840 --> 00:11:48,910 For-lus. Presies. So laat ons begin met die for-lus. 168 00:11:48,910 --> 00:11:56,900 Ons het vir int i = 0. Kom ons begin met 'n standaard inisialisering veranderlike. 169 00:11:56,900 --> 00:12:02,370 Ek gaan die voorwaarde vir 'n stel te verlaat en dan sê ek + +, gaan dinge daar te doen. 170 00:12:02,370 --> 00:12:04,090 Alles reg. 171 00:12:04,090 --> 00:12:11,590 So dink terug bevat SPASIES, indien bevat SPASIES is die lys van argumente oorgedra tot die program 172 00:12:11,590 --> 00:12:15,380 en argc is die getal van die argumente in die program, 173 00:12:15,380 --> 00:12:21,280 dan beteken dit dat argc is in wese die lengte van bevat SPASIES, reg, 174 00:12:21,280 --> 00:12:28,970 want daar gaan wees as baie argumente as die waarde van argc. 175 00:12:28,970 --> 00:12:35,910 So as ons wil itereer oor elke element in bevat SPASIES, 176 00:12:35,910 --> 00:12:43,290 ons gaan wil elke keer toegang tot die veranderlike bevat SPASIES by die gegewe indeks. 177 00:12:43,290 --> 00:12:49,060 Dit kan voorgestel word met dit, reg? 178 00:12:49,060 --> 00:12:53,430 Hierdie veranderlike hier verteenwoordig die spesifieke string in hierdie geval 179 00:12:53,430 --> 00:12:57,030 want dit is 'n string array - die spesifieke string op daardie gegewe indeks. 180 00:12:57,030 --> 00:13:00,690 Wat ons wil doen, in hierdie geval het ons wil om dit uit te druk, so kom ons sê printf. 181 00:13:00,690 --> 00:13:04,680 En nou bevat SPASIES is 'n string, sodat ons wil hê dat die plekhouer daar te vestig. 182 00:13:04,680 --> 00:13:08,430 Ons wil 'n nuwe lyn net om dit te laat goed lyk. 183 00:13:08,430 --> 00:13:12,530 So hier is ons het 'n for-lus. Ons het nie die toestand nie. 184 00:13:12,530 --> 00:13:20,020 , Sodat ek begin by 0, en dan elke keer as dit gaan om die gegewe string te druk 185 00:13:20,020 --> 00:13:22,980 op daardie betrokke indeks in die skikking. 186 00:13:22,980 --> 00:13:28,410 So wanneer wil ons om uit te druk van elemente in die skikking te stop? 187 00:13:28,410 --> 00:13:35,720 Wanneer ons klaar is, reg? Wanneer ons die einde van die skikking bereik het. 188 00:13:35,720 --> 00:13:38,870 So wil ons nie verby die lengte van die skikking te oorskry, 189 00:13:38,870 --> 00:13:43,700 en ons weet reeds ons nie nodig het om werklik aktief uit te vind wat die lengte van bevat SPASIES is 190 00:13:43,700 --> 00:13:47,520 want dit is aan ons gegee, en wat is dit? Argc. Presies. 191 00:13:47,520 --> 00:13:56,640 Daarom wil ons hierdie proses argc aantal kere wat om te doen. 192 00:13:56,640 --> 00:13:59,550 Ek is nie op die regte directory. 193 00:14:02,100 --> 00:14:03,490 Alles reg. 194 00:14:03,490 --> 00:14:08,990 Nou laat ons argumente. Geen foute, wat is 'n groot. 195 00:14:08,990 --> 00:14:11,430 So laat ons net hardloop argumente. 196 00:14:11,430 --> 00:14:15,130 Wat is dit gaan om terug te keer na ons? Dit is net gaan om dit terug te druk. 197 00:14:15,130 --> 00:14:18,320 "Jy ingevoer argumente in die program, ek gaan om dit terug te gee aan jou." 198 00:14:18,320 --> 00:14:23,170 So laat ons sê ons wil argumente dan sê Foo Bar. 199 00:14:23,170 --> 00:14:26,570 So hang dit dan druk dit terug aan ons. Alles reg? 200 00:14:26,570 --> 00:14:30,790 So daar is 'n voorbeeld van hoe jy kan gebruik argc en bevat SPASIES 201 00:14:30,790 --> 00:14:33,460 wetende dat argc verteenwoordig die lengte van bevat SPASIES. 202 00:14:33,460 --> 00:14:42,750 Maak seker dat jy nie ooit met skikkings toegang het buite die lengte van die skikking 203 00:14:42,750 --> 00:14:45,140 want C sal beslis op jou skree. 204 00:14:45,140 --> 00:14:47,560 Kry jy iets genoem 'n segmentering skuld, 205 00:14:47,560 --> 00:14:52,470 wat is nooit pret, basies sê jy probeer om iets te bekom 206 00:14:52,470 --> 00:14:55,000 wat nie bestaan ​​nie, behoort nie aan jou nie. 207 00:14:55,000 --> 00:14:59,430 So maak seker, en veral met die zero-indeksering, ons wil nie - 208 00:14:59,430 --> 00:15:02,390 Soos byvoorbeeld, as ons 'n verskeidenheid van lengte 4, 209 00:15:02,390 --> 00:15:07,240 dat array indeks 4 bestaan ​​nie omdat ons begin by 0 op nul indeks. 210 00:15:07,240 --> 00:15:11,730 Dit sal tweede natuur geword net soos vir loops wanneer ons begin by 0. 211 00:15:11,730 --> 00:15:13,610 So hou dit in gedagte. 212 00:15:13,610 --> 00:15:22,590 Jy nie wil hê om ooit toegang tot die indeks van 'n skikking wat buite jou bereik is. 213 00:15:26,710 --> 00:15:32,560 So ons kan nou sien hoe ons kan soort van toegang 214 00:15:32,560 --> 00:15:35,930 die command line argumente wat geslaag is. 215 00:15:35,930 --> 00:15:41,330 Maar as jy gesien het, die tou, die bevat SPASIES is eintlik 'n string array. 216 00:15:41,330 --> 00:15:45,740 So dit is eintlik nie 'n heelgetal nie, maar in die Caesar ons wil om te gaan met heelgetalle. 217 00:15:45,740 --> 00:15:54,430 Gelukkig is daar is 'n funksie vir ons geskep het, wat eintlik 'n string omskakel na 'n heelgetal. 218 00:15:54,430 --> 00:15:58,710 Ook hier is ons nie hier te doen met die toevoer van die gebruiker, waar ons waardeur hulle 219 00:15:58,710 --> 00:16:03,740 vir insette hier vir die sleutel, so ons kan eintlik nie reprompt en sê, 220 00:16:03,740 --> 00:16:07,840 "Ag, gee my 'n ander heelgetal, sê, as dit is nie geldig nie." 221 00:16:07,840 --> 00:16:10,540 Maar ons moet nog steeds om te kyk vir die korrekte gebruik. 222 00:16:10,540 --> 00:16:13,520 In die keiser het hulle slegs toegelaat om te slaag in 1 nommer, 223 00:16:13,520 --> 00:16:18,030 en so het hulle / keiser uit te voer en dan sal hulle vir jou gee om 'n aantal. 224 00:16:18,030 --> 00:16:23,660 So argc het 'n sekere aantal wees. 225 00:16:23,660 --> 00:16:29,060 Wat sou dit wees as hulle het om te slaag jy die / die keiser en dan 'n sleutel? 226 00:16:29,060 --> 00:16:32,920 Wat is argc? >> [Student] 2. >> Twee. Presies. 227 00:16:32,920 --> 00:16:35,490 So jy wil om seker te maak dat argc is 2. 228 00:16:35,490 --> 00:16:39,620 Anders sal jy basies weier om die program uit te voer. 229 00:16:39,620 --> 00:16:43,040 In die hoof dit is 'n funksie wat sê int main, 230 00:16:43,040 --> 00:16:47,360 so dan moet ons altyd in 'n goeie praktyk terugkeer 0 aan die einde van 'n suksesvolle program. 231 00:16:47,360 --> 00:16:50,840 So as, sê, hulle gee jou 3 command line argumente in plaas van 2 232 00:16:50,840 --> 00:16:54,350 of gee jou 1, byvoorbeeld, dan wat jy doen is, jy wil om te kyk vir 233 00:16:54,350 --> 00:16:59,900 en dan terug 1 sê, nee, ek kan nie voortgaan met hierdie program. 234 00:16:59,900 --> 00:17:03,190 [Student] Daar kan nie 'n ruimte in jou teks. >> Verskoon my? 235 00:17:03,190 --> 00:17:06,780 [Student] Daar kan nie 'n ruimte in die teks wat jy probeer om te enkripteer. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 In terme van die teks wat ons probeer om te enkripteer, wat kom later 238 00:17:11,280 --> 00:17:13,970 wanneer ons dat die teks gee. 239 00:17:13,970 --> 00:17:18,260 So nou het ons is net te aanvaar as opdrag argumente die werklike getal, 240 00:17:18,260 --> 00:17:21,579 die werklike verskuiwing vir die Caesar encryption. 241 00:17:21,579 --> 00:17:27,569 [Student] Hoekom dink jy het 2 in teenstelling met net 1 argc? Daar is beslis 1 nommer. 242 00:17:27,569 --> 00:17:32,200 Reg. Die rede hoekom ons nodig het 2 vir argc in plaas van 1 243 00:17:32,200 --> 00:17:36,260 is omdat wanneer jy 'n program en sê / keiser / of hallo. 244 00:17:36,260 --> 00:17:38,280 wat eintlik as 'n command line argument tel. 245 00:17:38,280 --> 00:17:43,020 So dan is dit vind reeds op 1 en so dan is ons die skryf van 1 ekstra. 246 00:17:45,030 --> 00:17:49,440 So jy is eintlik die skryf van 'n string in die command line argument. 247 00:17:49,440 --> 00:17:52,730 Wat jy wil doen, vir Caesar ons wil om te gaan met 'n heelgetal, 248 00:17:52,730 --> 00:17:57,180 sodat jy kan gebruik om hierdie atoi funksie. 249 00:17:57,180 --> 00:18:02,850 En basies, jy slaag dit in 'n tou en dan sal dit terugkeer jy 'n heelgetal terug 250 00:18:02,850 --> 00:18:06,070 of dit moontlik is dat die string te maak in 'n heelgetal. 251 00:18:06,070 --> 00:18:10,960 Nou onthou wanneer ons te doen het met printf of GetString, dinge soos dat, 252 00:18:10,960 --> 00:18:13,390 sluit ons die biblioteke wat spesifiek is aan ons. 253 00:18:13,390 --> 00:18:19,450 So aan die begin het ons begin met 'n hash tag standaard I / O, h, iets soos dit. 254 00:18:19,450 --> 00:18:22,430 Wel, atoi is nie binne een van daardie biblioteke, 255 00:18:22,430 --> 00:18:26,600 so wat ons hoef te doen, is ons het die regte biblioteek in te sluit vir wat. 256 00:18:26,600 --> 00:18:32,720 So terug te herinner aan Walk Through 1 waar ek die handleiding funksie bespreek. 257 00:18:32,720 --> 00:18:37,110 Jy tik man in jou terminale en dan gevolg deur die naam van 'n funksie. 258 00:18:37,110 --> 00:18:39,720 En dat 'n hele lys van die gebruik daarvan sal bring, 259 00:18:39,720 --> 00:18:42,890 maar so goed dit sal bring wat biblioteek wat behoort aan. 260 00:18:42,890 --> 00:18:47,000 So ek sal laat dit aan u die handleiding funksie met atoi te gebruik 261 00:18:47,000 --> 00:18:53,360 en uitvind watter biblioteek wat jy nodig het in te sluit om in staat wees om die atoi funksie te gebruik. 262 00:18:54,450 --> 00:18:57,670 So ons het die sleutel en nou het dit kom om die plain text, 263 00:18:57,670 --> 00:19:01,820 en so wat eintlik gaan om die toevoer van die gebruiker wees waar jy gevra word. 264 00:19:01,820 --> 00:19:05,540 Ons hanteer getint en GetFloat, en so in dieselfde trant 265 00:19:05,540 --> 00:19:07,670 ons gaan die hantering van GetString. 266 00:19:07,670 --> 00:19:12,440 Maar in hierdie geval het ons nie nodig het om dit te doen terwyl of terwyl loops om seker te maak. 267 00:19:12,440 --> 00:19:14,480 GetString sal beslis gee ons 'n string, 268 00:19:14,480 --> 00:19:17,630 en ons gaan te enkripteer wat die gebruiker gee ons. 269 00:19:17,630 --> 00:19:23,770 Sodat jy kan aanvaar dat al hierdie gebruiker ingevoer snare is korrek. 270 00:19:23,770 --> 00:19:24,670 Groot. 271 00:19:24,670 --> 00:19:27,270 So dan weer jy het die sleutel en sodra jy het die teks, 272 00:19:27,270 --> 00:19:31,660 nou wat se links is jy die skoonteks te versleutelen. 273 00:19:31,660 --> 00:19:36,530 Net om vinnig te dek die skoonteks is oor lingo, wat die gebruiker gee jou, 274 00:19:36,530 --> 00:19:41,030 en die kriptoteks is wat jy na hulle terugkeer. 275 00:19:42,450 --> 00:19:45,850 So snare, in staat wees om deur te gaan eintlik letter per brief 276 00:19:45,850 --> 00:19:48,550 want ons het elke letter te skuif, 277 00:19:48,550 --> 00:19:51,390 ons verstaan ​​dat die snare, as ons soort van skil terug die laag, 278 00:19:51,390 --> 00:19:54,130 ons sien dat hulle is net regtig 'n lys van karakters. 279 00:19:54,130 --> 00:19:55,930 Een kom na die ander. 280 00:19:55,930 --> 00:20:01,690 En so kan ons behandel stringe as skikkings want hulle is skikkings karakters. 281 00:20:01,690 --> 00:20:05,640 So sê jy het 'n string met die naam van teks, 282 00:20:05,640 --> 00:20:09,400 en binne daardie veranderlike teks gestoor word Dit is CS50. 283 00:20:09,400 --> 00:20:15,680 Dan teks indeks 0 'n hoofstad T, sou indeks 1 h, ens 284 00:20:17,530 --> 00:20:23,970 En dan met skikkings, in die argc voorbeeld in args.c, 285 00:20:23,970 --> 00:20:27,090 ons sien wat ons gehad het om oor 'n skikking te itereer 286 00:20:27,090 --> 00:20:32,440 en so ons moes itereer van i = 0 tot ek is minder as die lengte. 287 00:20:32,440 --> 00:20:35,560 So ons moet een of ander manier van die uitzoeken wat die lengte van die string is 288 00:20:35,560 --> 00:20:37,090 as ons gaan om meer as dit te itereer. 289 00:20:37,090 --> 00:20:42,300 Gelukkig weer, daar is 'n funksie daar vir ons, hoewel later in CS50 290 00:20:42,300 --> 00:20:45,860 jy sal beslis in staat wees om te implementeer en maak jou eie funksie 291 00:20:45,860 --> 00:20:48,260 wat kan bereken die lengte van 'n string. 292 00:20:48,260 --> 00:20:52,120 Maar vir nou is ons gaan string lengte, so strlen te gebruik. 293 00:20:52,120 --> 00:21:00,440 Jy slaag in 'n tou, en dan sal dit gee jou 'n int wat verteenwoordig die lengte van jou string terug. 294 00:21:00,440 --> 00:21:05,840 Kom ons kyk na 'n voorbeeld van hoe ons dalk in staat wees om te itereer oor elke karakter in 'n string 295 00:21:05,840 --> 00:21:08,470 en iets te doen met dit. 296 00:21:08,470 --> 00:21:13,250 Wat ons wil doen is itereer oor elke karakter van die string, 297 00:21:13,250 --> 00:21:19,150 en wat ons wil doen, is ons druk elke karakter terug 1 deur 1 298 00:21:19,150 --> 00:21:22,060 tensy ons iets langs dit. 299 00:21:22,060 --> 00:21:27,020 So laat ons begin met die for-lus. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Ons gaan om ruimte te laat vir die toestand. 301 00:21:32,700 --> 00:21:36,840 Ons wil om te itereer totdat ons aan die einde van die tou, reg? 302 00:21:36,840 --> 00:21:41,340 So dan watter funksie gee ons die lengte van die tou? 303 00:21:41,340 --> 00:21:43,160 [Onhoorbaar student reaksie] 304 00:21:43,160 --> 00:21:46,420 Dit is die lengte van die command line argumente. 305 00:21:46,420 --> 00:21:50,650 Maar vir 'n string wat ons wil 'n funksie te gebruik wat gee ons die lengte van die string. 306 00:21:50,650 --> 00:21:53,090 So dis string lengte. 307 00:21:53,090 --> 00:21:57,130 En so dan moet jy in 'n string om dit te slaag. 308 00:21:57,130 --> 00:21:59,760 Wat dit nodig het om te weet watter string wat dit nodig het om te bereken die lengte van. 309 00:21:59,760 --> 00:22:03,160 So dan in hierdie geval het ons te doen met 'n tou s. 310 00:22:04,790 --> 00:22:05,860 Groot. 311 00:22:05,860 --> 00:22:10,770 So dan wat ons wil doen, se printf laat. 312 00:22:10,770 --> 00:22:14,850 Nou, ons wil om te gaan met die karakters. Ons wil elke individuele karakter uit te druk. 313 00:22:14,850 --> 00:22:22,150 Wanneer jy wil uit te druk 'n float, sou jy gebruik om die plaatsaanduiding soos% f. 314 00:22:22,150 --> 00:22:24,580 Met 'n int jy sal% d gebruik. 315 00:22:24,580 --> 00:22:30,890 En so soortgelyk, met 'n karakter wat jy gebruik% c om te sê ek gaan die druk van 'n karakter 316 00:22:30,890 --> 00:22:34,570 wat binne-in 'n veranderlike gestoor. 317 00:22:34,570 --> 00:22:40,840 So ons het dit, en laat ons voeg 'n tydperk en 'n ruimte om dit te. 318 00:22:40,840 --> 00:22:45,430 Watter karakter gebruik ons? 319 00:22:45,430 --> 00:22:49,780 Ons gaan om te word deur gebruik te maak van watter karakter ons is van die tou. 320 00:22:49,780 --> 00:22:52,890 So dan moet ons gaan om te word deur gebruik te maak van iets wat met 'n tou, 321 00:22:52,890 --> 00:22:56,420 maar ons wil word toegang tot die bepaalde karakter. 322 00:22:56,420 --> 00:23:02,740 So as 'n string is net 'n skikking, dan hoe toegang ons elemente van skikkings? 323 00:23:02,740 --> 00:23:06,480 Ons het daardie vierkantige hakies, en dan het die indeks in daar. 324 00:23:06,480 --> 00:23:11,820 So het ons 'n vierkantige hakies aangedui. Ons indeks in hierdie geval kan ons net gebruik i. Presies. 325 00:23:15,290 --> 00:23:22,370 So hier is ons sê ons gaan die druk van 'n karakter, gevolg deur 'n punt en 'n spasie, 326 00:23:22,370 --> 00:23:30,870 en dat die karakter gaan die ith brief in ons string s. 327 00:23:32,920 --> 00:23:39,330 Ek gaan net dat te red. Okay. 328 00:23:42,510 --> 00:23:46,840 Nou gaan ek string lengte te voer. 329 00:23:46,840 --> 00:23:53,440 So ons het 'n string met die naam OMG, en nou is dit beklemtoon selfs meer. 330 00:23:53,440 --> 00:23:57,870 Net so, laat ons sê dat ons eintlik 'n string van die gebruiker te kry. 331 00:23:57,870 --> 00:23:59,580 Hoe kan ons dit doen? 332 00:23:59,580 --> 00:24:01,610 Voor, hoe het ons 'n int? 333 00:24:01,610 --> 00:24:08,040 Ons het gesê getint, reg? Maar dit is nie int, so laat GetString. 334 00:24:11,780 --> 00:24:17,770 Kom ons maak string lengte. Hier het ons het nie 'n spesifieke prompt. 335 00:24:17,770 --> 00:24:19,940 So ek weet nie. 336 00:24:19,940 --> 00:24:23,820 Ek gaan my naam hier te sit en so dan het ek een van daardie dinge kan doen 337 00:24:23,820 --> 00:24:29,600 waar Ek dra 'n woord vir elke brief of iets soos dit. Cool. 338 00:24:29,600 --> 00:24:31,900 So dis string lengte. 339 00:24:33,000 --> 00:24:34,640 So ons is terug na die keiser. 340 00:24:34,640 --> 00:24:38,620 Ons het 'n paar tools oor hoe ons oor 'n string itereer, 341 00:24:38,620 --> 00:24:41,250 hoe ons toegang tot elke element. 342 00:24:41,250 --> 00:24:44,720 So ons kan nou terug te kry tot die program. 343 00:24:44,720 --> 00:24:48,650 Soos ek voorheen genoem, in die ASCII-tabel, jou beste vriend, 344 00:24:48,650 --> 00:24:52,300 jy gaan die getalle wat geassosieer word met elke letter te sien. 345 00:24:52,300 --> 00:24:55,900 So hier sê ons skoonteks is ek duiselig! 346 00:24:55,900 --> 00:25:01,090 Dan elkeen van hierdie karakters is gaan 'n nommer en ASCII-waarde wat verband hou met dit te hê, 347 00:25:01,090 --> 00:25:04,710 selfs die afkappingsteken, selfs die ruimte, selfs die uitroepteken, 348 00:25:04,710 --> 00:25:06,600 sodat jy sal wil hê om dit in gedagte te hou. 349 00:25:06,600 --> 00:25:12,360 So sê ons sleutel wat die gebruiker ingesluit in die command line argument is 6. 350 00:25:12,360 --> 00:25:17,770 Dit beteken dat vir die eerste brief, wat ek, wat verteenwoordig word deur 73, 351 00:25:17,770 --> 00:25:25,610 jy wil om terug te keer na hulle watter letter is verteenwoordig deur die ASCII-waarde van 73 + 6. 352 00:25:25,610 --> 00:25:29,020 In hierdie geval sou wees 79. 353 00:25:30,840 --> 00:25:35,040 Nou het ons wil om te gaan na die volgende karakter. 354 00:25:35,040 --> 00:25:40,960 Sodat die volgende in die indeks 1 van die skoonteks die afkappingsteken sou wees. 355 00:25:40,960 --> 00:25:46,780 Maar onthou ons wil net die letters te versleutelen. 356 00:25:46,780 --> 00:25:50,040 Sodat ons wil hê om seker te maak dat die apostrof eintlik dieselfde bly, 357 00:25:50,040 --> 00:25:54,310 dat ons nie verander nie van 39 tot wat ook al 45 is. 358 00:25:54,310 --> 00:25:57,150 Ons wil dit as 'n toespraak te hou. 359 00:25:57,150 --> 00:26:00,780 So ons wil om te onthou om slegs die letters versleutelen 360 00:26:00,780 --> 00:26:04,560 want ons wil al die ander simbole om te bly onveranderd in ons program. 361 00:26:04,560 --> 00:26:07,130 Nog 'n ding wat ons wil hê, is om kapitalisasie te bewaar. 362 00:26:07,130 --> 00:26:10,250 So wanneer jy 'n hoofletter, moet dit bly soos 'n hoofletter. 363 00:26:10,250 --> 00:26:12,830 Kleinletters moet bly as kleinletters. 364 00:26:13,620 --> 00:26:19,480 So 'n paar nuttige funksies in staat wees om te gaan met net geheimschrift letters 365 00:26:19,480 --> 00:26:22,380 en hou die behoud van die kapitalisering van dinge 366 00:26:22,380 --> 00:26:25,130 is die isalpha, isupper, islower funksies. 367 00:26:25,130 --> 00:26:29,270 En so het dit is funksies wat u laat terugkeer 'n Boolese waarde. 368 00:26:29,270 --> 00:26:34,180 Basies, waar of vals is. Is dit 'n hoofletter? Is hierdie alfanumeriese? 369 00:26:34,180 --> 00:26:37,180 Is dit 'n brief, in wese. 370 00:26:37,180 --> 00:26:41,070 So hier is 3 voorbeelde van hoe jy wil hê dat die funksie gebruik. 371 00:26:41,070 --> 00:26:47,060 Basies, kan jy toets of die waarde aan u teruggestuur word deur daardie funksie is waar of vals 372 00:26:47,060 --> 00:26:49,400 gebaseer op daardie inset. 373 00:26:49,400 --> 00:26:54,880 Doen óf nie versleutelen iets of becijferen dit of maak seker dat dit is hoofletters, ens. 374 00:26:54,880 --> 00:27:01,080 [Student] Kan jy net verduidelik diegene wat 'n bietjie meer en hoe jy hulle gebruik? >> Ja, vir seker. 375 00:27:01,080 --> 00:27:08,470 So as ons terug kyk, hier het ons 'n kapitale ek, reg? 376 00:27:08,470 --> 00:27:14,550 Sodat ons weet dat ek gaan na O want ek + 6 is O. 377 00:27:14,550 --> 00:27:18,740 Maar ons wil om seker te maak dat O gaan wees 'n kapitale O. 378 00:27:18,740 --> 00:27:22,940 So basies, wat is 'n soort van die gaan ons insette te verander. 379 00:27:22,940 --> 00:27:26,870 So of dit hoofletters of nie sal soort verander die manier waarop ons dit hanteer. 380 00:27:26,870 --> 00:27:32,360 Daarom dan, as ons gebruik maak van die isupper funksie op daardie spesifieke indeks, 381 00:27:32,360 --> 00:27:36,480 so isupper ("ek"), wat vir ons ware terug, sodat ons weet dat dit die boonste. 382 00:27:36,480 --> 00:27:40,360 So dan op grond van dat, later sal ons gaan in 'n formule 383 00:27:40,360 --> 00:27:42,750 wat jy sal gebruik word om dinge te skuif in die keiser, 384 00:27:42,750 --> 00:27:46,560 so dan basies, daar gaan 'n effens ander formule as dit hoofletters 385 00:27:46,560 --> 00:27:50,670 eerder as onderkas. Sin maak? 386 00:27:51,020 --> 00:27:52,760 Ja. Geen sorge. 387 00:27:54,900 --> 00:27:58,990 Ek het 'n bietjie gepraat oor die byvoeg van 6 tot 'n brief, wat nie heeltemal sin maak 388 00:27:58,990 --> 00:28:05,500 behalwe wanneer ons soort van verstaan ​​wat hierdie karakters 389 00:28:05,500 --> 00:28:08,920 is soort van verwissel met heelgetalle. 390 00:28:08,920 --> 00:28:11,250 Wat ons doen is ons soort van gebruik implisiete giet. 391 00:28:11,250 --> 00:28:18,100 Ons gaan 'n bietjie later in beslissende waar jy 'n waarde en jy draai dit in 'n ander tipe 392 00:28:18,100 --> 00:28:20,440 as wat dit oorspronklik was. 393 00:28:20,440 --> 00:28:25,910 Maar met hierdie pset ons sal in staat wees om soort uitruilbaar gebruik karakters 394 00:28:25,910 --> 00:28:30,880 en hul ooreenstemmende heelgetal waardes. 395 00:28:30,880 --> 00:28:35,140 So indien jy dit eenvoudig omsluiten 'n karakter met net die enkele aanhalings, 396 00:28:35,140 --> 00:28:40,390 dan sal jy in staat wees om te werk met dit met heelgetalle, dit te hanteer as 'n heelgetal. 397 00:28:40,390 --> 00:28:48,040 So die hoofstad C tot 67. Kleinletters f betrekking tot 102. 398 00:28:48,040 --> 00:28:51,480 Weer, as jy wil om hierdie waardes te leer ken, kyk op jou ASCII tabel. 399 00:28:51,480 --> 00:28:56,160 So laat ons gaan in 'n paar voorbeelde van hoe jy dalk in staat wees om af te trek en voeg, 400 00:28:56,160 --> 00:29:03,130 hoe jy regtig met hierdie karakters kan eintlik werk, gebruik hulle uitruilbaar. 401 00:29:03,870 --> 00:29:11,350 Ek sê dat ASCIIMath is die toevoeging van 'n karakter te bereken tot 'n heelgetal 402 00:29:11,350 --> 00:29:17,590 en vertoon dan die gevolglike karakter sowel as die gevolglike ASCII-waarde. 403 00:29:17,590 --> 00:29:22,290 En so hier ek sê - we'll deal met hierdie gedeelte later - 404 00:29:22,290 --> 00:29:29,100 maar basies, ek sê dat die gebruiker moet loop ASCIIMath sê saam met 'n sleutel, 405 00:29:29,100 --> 00:29:30,880 en ek sê dat sleutel gaan om die nommer te wees 406 00:29:30,880 --> 00:29:34,600 wat ons gaan om hierdie karakter te voeg. 407 00:29:34,600 --> 00:29:38,560 So hier opmerk dat sedert ek eis 'n sleutel, 408 00:29:38,560 --> 00:29:40,590 want ek eis dat hulle gee my 1 ding, 409 00:29:40,590 --> 00:29:45,600 Ek wil net / asciimath. Te aanvaar en 'n sleutel. 410 00:29:45,600 --> 00:29:49,330 So ek gaan om te eis dat argc is gelyk aan 2. 411 00:29:49,330 --> 00:29:54,360 As dit is nie, dan gaan ek 1 om terug te keer en die program sal verlaat. 412 00:29:55,070 --> 00:29:58,540 So ek sê die sleutel gaan nie na die eerste command line argument wees, 413 00:29:58,540 --> 00:30:05,080 dit gaan om die tweede een te wees, en as jy hier sien, 414 00:30:05,080 --> 00:30:11,790 Ek gaan om dit te omskep in 'n heelgetal. 415 00:30:15,740 --> 00:30:19,230 Dan gaan ek 'n karakter te stel om te wees r. 416 00:30:19,230 --> 00:30:23,970 Let daarop dat die tipe van die veranderlike chromosoom eintlik 'n heelgetal is. 417 00:30:23,970 --> 00:30:30,480 Die manier wat ek is in staat om r te gebruik as 'n heelgetal is deur dit met hierdie aanhalingstekens te encasing. 418 00:30:33,850 --> 00:30:40,560 So terug na ons printf verklaring waar ons 'n plekhouer vir 'n karakter 419 00:30:40,560 --> 00:30:43,590 en dan 'n plekhouer vir 'n heelgetal, 420 00:30:43,590 --> 00:30:49,450 die karakter word verteenwoordig deur die chromosoom en die heelgetal is die sleutel. 421 00:30:49,450 --> 00:30:54,320 En so dan gaan ons in die resultaat voeg die 2 saam. 422 00:30:54,320 --> 00:30:58,420 So ons gaan te voeg r + wat die sleutel is, 423 00:30:58,420 --> 00:31:03,520 en dan gaan ons die resultaat van daardie te druk. 424 00:31:06,210 --> 00:31:14,220 So laat ons asciimath. Dit is up to date, so laat ons net hardloop asciimath. 425 00:31:14,220 --> 00:31:18,290 O, maar sien nie, beteken dit nie iets te doen, want ons het eintlik nie gee dit 'n sleutel. 426 00:31:18,290 --> 00:31:23,850 So wanneer dit pas teruggekeer 1, ons vernaamste funksie, dit pas teruggekeer terug na ons. 427 00:31:23,850 --> 00:31:29,250 So dan moet ons in 'n sleutel. Iemand gee my 'n nommer. >> [Student] 4. 428 00:31:29,250 --> 00:31:30,920 4. Okay. 429 00:31:30,920 --> 00:31:39,280 So r deur 4 gaan gee ons v, wat ooreenstem met die ASCII-waarde van 118 toegeneem. 430 00:31:39,280 --> 00:31:43,880 So dan is dit soort van sin dat - 431 00:31:43,880 --> 00:31:51,250 Eintlik kan ek jou vra, wat dink jy die ASCII waarde van r is as r + 4 118? 432 00:31:53,070 --> 00:31:55,470 Dan ja, r is 114. 433 00:31:55,470 --> 00:32:03,010 So as jy kyk op die ASCII tabel dan seker genoeg, sal jy sien dat r word verteenwoordig deur 114. 434 00:32:03,010 --> 00:32:08,610 So nou dat ons weet dat ons heelgetalle kan byvoeg tot karakters, dit lyk redelik eenvoudig. 435 00:32:08,610 --> 00:32:12,740 Ons is net gaan om te itereer oor 'n string soos ons gesien het in 'n voorbeeld voor. 436 00:32:12,740 --> 00:32:17,170 Ons sal kyk of dit 'n brief. 437 00:32:17,170 --> 00:32:20,420 As dit is, dan sal ons skuif dit deur wat die sleutel is. 438 00:32:20,420 --> 00:32:23,650 Redelik eenvoudig, behalwe wanneer jy dit te hou, 439 00:32:23,650 --> 00:32:32,140 jy sien dat z, verteenwoordig deur 122, dan sou gee jou 'n ander karakter. 440 00:32:32,140 --> 00:32:37,770 Ons eintlik wil om te bly in ons alfabet, reg? 441 00:32:37,770 --> 00:32:43,180 Sodat ons nodig het om uit te vind die een of ander manier van die soort wikkel rond. 442 00:32:43,180 --> 00:32:47,190 Wanneer jy by Zed en wat jy wil te verhoog deur 'n sekere aantal, 443 00:32:47,190 --> 00:32:51,230 jy nie wil hê om te gaan na buite die ASCII alfabet; 444 00:32:51,230 --> 00:32:54,140 jy wil om te draai al die pad terug na A. 445 00:32:54,140 --> 00:32:58,550 Maar hou in gedagte jy nog steeds die behoud van die saak. 446 00:32:58,550 --> 00:33:00,980 So wetende dat letters kan nie 'simbole 447 00:33:00,980 --> 00:33:05,290 net soos simbole is nie van plan om so goed te verander. 448 00:33:05,290 --> 00:33:08,170 In die laaste pset jy beslis nie nodig gehad om, 449 00:33:08,170 --> 00:33:14,310 maar 'n opsie was om jou gulsig pset uit te voer deur gebruik te maak van die modulus funksie. 450 00:33:14,310 --> 00:33:17,230 Maar nou is ons eintlik gaan nodig modulus te gebruik, 451 00:33:17,230 --> 00:33:19,900 so laat ons net gaan oor dit 'n bietjie. 452 00:33:19,900 --> 00:33:26,920 Wese, wanneer jy x modulo y, wat gee jou die res van x gedeel deur y. 453 00:33:26,920 --> 00:33:30,930 Hier is 'n paar voorbeelde hier. Ons het 27% 15. 454 00:33:30,930 --> 00:33:36,200 Basies, wanneer jy aftrek 15 van 27 soveel keer as moontlik sonder om negatiewe 455 00:33:36,200 --> 00:33:39,060 dan kry jy 12 linker oor. 456 00:33:39,060 --> 00:33:44,650 So, dit is soort van soos in die wiskunde konteks, maar hoe ons kan eintlik gebruik van hierdie? 457 00:33:44,650 --> 00:33:47,100 Dit gaan nuttig te wees vir ons wrapover. 458 00:33:47,100 --> 00:33:55,420 Vir hierdie, laat ons net sê ek het jou gevra om te verdeel in 3 groepe. 459 00:33:55,420 --> 00:33:58,010 Soms doen jy in groepe en iets soos dit. 460 00:33:58,010 --> 00:34:01,320 Sê ek het gesê, "Ja, ek wil julle almal verdeel word in 3." 461 00:34:01,320 --> 00:34:04,240 Hoe kan jy dit doen? 462 00:34:04,240 --> 00:34:06,810 [Onhoorbaar student reaksie] Ja, presies. Aftel. Okay. 463 00:34:06,810 --> 00:34:10,260 Kom ons werklik doen dat. Doen wat jy wil om te begin? 464 00:34:10,260 --> 00:34:13,810 [Studente toe af] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Maar onthou ... >> [Student] O, jammer. 466 00:34:16,620 --> 00:34:18,730 Dit is 'n baie goeie punt. 467 00:34:18,730 --> 00:34:24,130 Jy het gesê 4, maar ons eintlik wil hê jy 1 om te sê, want ons het net 3 groepe wil. 468 00:34:24,130 --> 00:34:30,159 Daarom dan, hoe - Nee, dit is 'n baie goeie voorbeeld, want dan hoe kan jy sê 1? 469 00:34:30,159 --> 00:34:33,370 Wat is die verhouding tussen 4 en 1? 470 00:34:33,370 --> 00:34:36,760 Wel, 4 mod 3 is 1. 471 00:34:36,760 --> 00:34:41,460 So as jy voortgaan, sal jy 2. 472 00:34:41,460 --> 00:34:44,540 So ons het 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Weereens, jy eintlik die 5de persoon. Hoe weet jy 2 in plaas van 5 om te sê? 474 00:34:49,420 --> 00:34:53,760 Jy sê 5 mod 3 is 2. 475 00:34:53,760 --> 00:34:59,100 Ek wil om te sien hoeveel groepe van 3 bly oor, dan watter volgorde is ek 476 00:34:59,100 --> 00:35:02,860 En so dan as ons voortgegaan om langs die hele vertrek, 477 00:35:02,860 --> 00:35:07,760 dan sal ons sien dat ons eintlik is altyd die toepassing van die mod-funksie vir onsself 478 00:35:07,760 --> 00:35:09,990 soort tel. 479 00:35:09,990 --> 00:35:14,490 Dit is 'n soort van 'n tasbare voorbeeld van hoe jy kan gebruik modulo 480 00:35:14,490 --> 00:35:17,960 want ek is seker die meeste van ons het waarskynlik deur die proses 481 00:35:17,960 --> 00:35:19,630 waar ons moes af te tel. 482 00:35:19,630 --> 00:35:21,840 Enige vrae oor modulo? 483 00:35:21,840 --> 00:35:25,360 Dit sal baie belangrik om te verstaan ​​die konsepte van hierdie, 484 00:35:25,360 --> 00:35:28,640 so ek wil om seker te maak julle ouens verstaan. 485 00:35:28,640 --> 00:35:34,660 [Student] As daar niks oorbly nie, beteken dit gee jou die werklike getal? 486 00:35:34,660 --> 00:35:40,430 As een van die eerste 3 van hulle gedoen het nie, sou dit gegee het vir hulle wat hulle eintlik was, 487 00:35:40,430 --> 00:35:43,310 of sal dit hulle gegee het [onhoorbaar] >> Dis 'n goeie vraag. 488 00:35:43,310 --> 00:35:48,750 Wanneer daar niks oorbly vir die modulo - so sê jy het 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 wat gee eintlik jou terug 0. 490 00:35:53,670 --> 00:35:57,290 Ons sal praat oor dat 'n bietjie later. 491 00:35:58,810 --> 00:36:07,720 O ja, byvoorbeeld, die 3de persoon - 3 mod 3 is eintlik 0, maar sy het gesê 3. 492 00:36:07,720 --> 00:36:14,900 So dit is soort van soos 'n innerlike vangs, byvoorbeeld, 493 00:36:14,900 --> 00:36:17,620 soos okay, as die mod is dan 0 Ek gaan na die 3de persoon te wees. 494 00:36:17,620 --> 00:36:22,740 Maar ons sal kry in die soort van hoe ons kan hê om te gaan met wat 0 is later. 495 00:36:22,740 --> 00:36:32,750 So nou het ons een of ander manier 'n manier van die kartering van die Zed na die regte letter. 496 00:36:32,750 --> 00:36:34,920 So nou het ons weg deur hierdie voorbeelde, 497 00:36:34,920 --> 00:36:37,880 ons soort sien hoe die keiser kan werk. 498 00:36:37,880 --> 00:36:42,640 Jy sien die 2 alfabette en dan sien jy hulle verskuif. 499 00:36:42,640 --> 00:36:44,430 So kom ons probeer en druk dat in terme van die formule. 500 00:36:44,430 --> 00:36:46,940 Hierdie formule is eintlik wat aan jou gegee in die spec 501 00:36:46,940 --> 00:36:52,070 maar laat se soort van kyk deur wat elke veranderlike beteken. 502 00:36:52,070 --> 00:36:55,000 Ons eindresultaat gaan wees op die kriptoteks. 503 00:36:55,000 --> 00:36:58,300 So dit sê dat die met karakter van die kriptoteks 504 00:36:58,300 --> 00:37:02,500 gaan om ooreen te stem met karakter van die skoonteks. 505 00:37:02,500 --> 00:37:08,130 Dit maak sin omdat ons wil altyd langs hierdie dinge. 506 00:37:08,130 --> 00:37:13,480 So dit gaan die met karakter van die kriptoteks plus k, wat is die sleutel - 507 00:37:13,480 --> 00:37:17,230 wat sin maak - en dan het ons hierdie mod 26. 508 00:37:17,230 --> 00:37:19,860 Onthou terug toe ons die Zed 509 00:37:19,860 --> 00:37:24,190 ons wou nie te kry in die karakter, sodat ons wou dit te mod 510 00:37:24,190 --> 00:37:26,540 en die aard van die wrap rondom die alfabet. 511 00:37:26,540 --> 00:37:33,430 Na Zed jy wil gaan na 'n, b, c, d, totdat jy het die regte nommer. 512 00:37:33,430 --> 00:37:44,690 Dus weet ons dat Zed, indien + 6, gee ons f want na Zed kom 'n, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 So laat ons onthou dat ons weet vir seker dat Zed + 6 gaan gee ons f. 514 00:37:52,530 --> 00:38:03,530 In ASCII waardes, z 122 en f is 102. 515 00:38:03,530 --> 00:38:10,570 So ons het een of ander manier te vind om ons Caesar formule gee ons 102 516 00:38:10,570 --> 00:38:13,590 nadat hy in 122. 517 00:38:13,590 --> 00:38:19,550 So as ons net hierdie formule toe te pas, die ('z' + 6)% 26, wat eintlik gee jou 24 518 00:38:19,550 --> 00:38:25,980 omdat 122 + 6 128; 128% 26 gee jou 24 res. 519 00:38:25,980 --> 00:38:29,140 Maar dit beteken regtig nie dat f. Dit is beslis nie 102. 520 00:38:29,140 --> 00:38:33,590 Dit is ook nie die 6de letter in die alfabet. 521 00:38:33,590 --> 00:38:41,550 So natuurlik, ons moet een of ander manier van die opstel van dit 'n bietjie te hê. 522 00:38:42,970 --> 00:38:51,340 In terme van die gewone alfabet, ons weet dat z is die 26ste letter en f is die 6de. 523 00:38:51,340 --> 00:38:55,460 Maar ons is in rekenaar wetenskap, dus gaan ons na die indeks by 0. 524 00:38:55,460 --> 00:39:00,690 So dan in plaas van z synde die getal 26, ons gaan om te sê dit se nommer 25 525 00:39:00,690 --> 00:39:02,630 omdat 'n 0. 526 00:39:02,630 --> 00:39:04,770 So laat ons nou hierdie formule toe te pas. 527 00:39:04,770 --> 00:39:11,710 Ons het z verteenwoordig deur 25 + 6, wat gee jou 31. 528 00:39:11,710 --> 00:39:15,790 En 31 mod 26 gee jou 5 as 'n res. 529 00:39:15,790 --> 00:39:20,500 Dit is ideaal omdat ons weet dat f die 5de letter in die alfabet. 530 00:39:20,500 --> 00:39:26,400 Maar dit is nog nie f, reg? Dit is nog nie 102. 531 00:39:26,400 --> 00:39:32,730 So dan vir hierdie pset, sal 'n uitdaging probeer om uit te vind die verhouding 532 00:39:32,730 --> 00:39:36,910 tussen die herleiding tussen hierdie ASCII waardes en die alfabetiese indeks. 533 00:39:36,910 --> 00:39:40,280 Wese, wat jy sal wil hê om dit te doen, wat jy wil om te begin met die ASCII-waardes, 534 00:39:40,280 --> 00:39:45,390 maar dan moet jy wil om een ​​of ander manier te vertaal in 'n alfabetiese indeks 535 00:39:45,390 --> 00:39:52,610 bereken dan watter letter dit behoort te wees - basies, wat sy alfabetiese indeks is 536 00:39:52,610 --> 00:39:57,660 van die cipher karakter - dan vertaal dit terug na die ASCII-waardes. 537 00:39:57,660 --> 00:40:04,870 So as jy sweep jou ASCII tabel, dan probeer en vind verhoudings tussen, sê, 102 en 5 538 00:40:04,870 --> 00:40:10,440 of die 122 en 25. 539 00:40:12,140 --> 00:40:15,690 Ons het ons sleutel gekry het uit die opdrag lyn argumente, het ons verwerf die skoonteks, 540 00:40:15,690 --> 00:40:17,520 ons het dit enciphered. 541 00:40:17,520 --> 00:40:19,820 Nou al wat ons verlaat het om te doen is om te druk. 542 00:40:19,820 --> 00:40:22,040 Ons kan dit doen 'n paar verskillende maniere. 543 00:40:22,040 --> 00:40:24,570 Wat ons kan doen is eintlik druk as ons gaan saam. 544 00:40:24,570 --> 00:40:28,250 Soos ons itereer oor die karakters in die string, 545 00:40:28,250 --> 00:40:31,660 ons kon net eenvoudig druk dan wanneer ons dit bereken. 546 00:40:31,660 --> 00:40:36,030 Alternatiewelik, kan jy ook stoor dit in 'n skikking en 'n verskeidenheid van karakters 547 00:40:36,030 --> 00:40:39,280 en aan die einde oor daardie hele verskeidenheid itereer en druk dit uit. 548 00:40:39,280 --> 00:40:40,980 So jy het 'n paar opsies vir daardie. 549 00:40:40,980 --> 00:40:47,280 En onthou dat% c gaan na die plaatsaanduiding vir die druk van 'n karakter. 550 00:40:47,280 --> 00:40:50,420 So daar het ons keiser toekom, en nou is ons skuif op na Vigenere, 551 00:40:50,420 --> 00:40:57,580 wat is baie soortgelyk aan die keiser nie, maar net 'n bietjie meer kompleks. 552 00:40:57,580 --> 00:41:03,310 So in wese met Vigenere jy gaan om te word wat in 'n navraag. 553 00:41:03,310 --> 00:41:06,510 So in plaas van 'n nommer, jy gaan 'n string te hê, 554 00:41:06,510 --> 00:41:09,200 en so wat gaan om op te tree as jou navraag. 555 00:41:09,200 --> 00:41:14,440 Dan, soos gewoonlik, jy gaan 'n vinnige te kry vir 'n string van die gebruiker 556 00:41:14,440 --> 00:41:19,050 en dan omzetten en dan gee hulle die kriptoteks terug. 557 00:41:19,050 --> 00:41:24,650 So soos ek gesê het, dit is baie soortgelyk aan die keiser, behalwe in plaas van om te skuif deur 'n sekere aantal, 558 00:41:24,650 --> 00:41:30,620 die nommer is eintlik van plan om elke keer te verander van karakter te karakter. 559 00:41:30,620 --> 00:41:34,890 Dat die werklike getal te stel om te skuif, is dit verteenwoordig deur die sleutelbord letters. 560 00:41:34,890 --> 00:41:43,150 So as jy in 'n verskuiwing van 'n, byvoorbeeld, dan nie wat jou sal stem ooreen met 'n verskuiwing van 0. 561 00:41:43,150 --> 00:41:45,900 So is dit weer terug na die alfabetiese indeks. 562 00:41:45,900 --> 00:41:49,100 Wat sou nuttig wees as jy sien dat ons eintlik te doen het met 'n ASCII waardes 563 00:41:49,100 --> 00:41:51,790 sowel as die briewe, asook die alfabetiese indeks, 564 00:41:51,790 --> 00:41:58,020 miskien vind of maak jou eie ASCII tabel wat toon die alfabetiese indeks van 0 tot 25, 565 00:41:58,020 --> 00:42:03,750 'n deur z, en die ASCII-waardes sodat jy kan soort van die verhouding 566 00:42:03,750 --> 00:42:07,020 en skets uit en probeer om 'n paar patrone. 567 00:42:07,020 --> 00:42:11,010 Net so, as jy verskuiwing by die bepaalde geval deur f - 568 00:42:11,010 --> 00:42:21,110 en dit is of onderkas of hoofletters f - dan sou dit ooreenstem met 5. 569 00:42:21,110 --> 00:42:24,180 Is ons goed so ver? 570 00:42:25,770 --> 00:42:30,050 Die formule vir Vigenere is 'n bietjie anders. 571 00:42:30,050 --> 00:42:32,960 Basies, sien jy dat dit is net soos Caesar, 572 00:42:32,960 --> 00:42:37,390 behalwe in plaas van net k ons ​​k indeks j. 573 00:42:37,390 --> 00:42:44,810 Let op dat ons nie met behulp van i want in wese, die lengte van die term 574 00:42:44,810 --> 00:42:49,850 is nie noodwendig die lengte van ons kriptoteks. 575 00:42:49,850 --> 00:42:56,130 Dit sal 'n bietjie duideliker wees wanneer ons 'n voorbeeld sien dat ek 'n bietjie later. 576 00:42:56,130 --> 00:43:03,160 Basies, as jy die program loop met 'n navraag van ohai, 577 00:43:03,160 --> 00:43:08,560 dan beteken dit dat elke keer ohai gaan jou skof. 578 00:43:08,560 --> 00:43:11,060 So afhangende op watter posisie jy in jou navraag, 579 00:43:11,060 --> 00:43:15,800 jy gaan jou sekere kriptoteks karakter deur daardie bedrag te skuif. 580 00:43:15,800 --> 00:43:19,630 Weer, net soos Caesar, ons wil hê om seker te maak dat ons die behoud van die kapitalisasie van die dinge wat 581 00:43:19,630 --> 00:43:22,900 en ons net versleutelen letters, nie karakters of spasies. 582 00:43:22,900 --> 00:43:26,330 So terug te kyk na die keiser op die funksies wat jy kan gebruik, 583 00:43:26,330 --> 00:43:32,570 die manier waarop jy besluit hoe om dinge te skuif, en toe te pas dat jou program hier. 584 00:43:32,570 --> 00:43:35,260 So laat se kaart dit uit. 585 00:43:35,260 --> 00:43:39,680 Ons het 'n skoonteks wat ons gekry het van die gebruiker uit GetString 586 00:43:39,680 --> 00:43:44,090 sê dit ... is CS50! 587 00:43:44,090 --> 00:43:47,090 Dan het ons 'n navraag van ohai. 588 00:43:47,090 --> 00:43:50,930 Die eerste 4 karakters is redelik eenvoudig. 589 00:43:50,930 --> 00:43:55,580 Ons weet dat T verskuif gaan word deur O, 590 00:43:55,580 --> 00:44:01,990 dan h verskuif gaan word deur h, i verskuif gaan word deur 'n. 591 00:44:01,990 --> 00:44:04,610 Hier kan jy sien dat 'n stel 0, 592 00:44:04,610 --> 00:44:11,940 so dan sal die einde waarde is eintlik net die dieselfde letter as voorheen. 593 00:44:11,940 --> 00:44:15,250 Dan s is verskuif deur i. 594 00:44:15,250 --> 00:44:19,370 Maar dan moet jy hierdie tydperke hier. 595 00:44:19,370 --> 00:44:25,960 Ons wil nie versleutelen dat, so dan is ons nie dit verander nie deur enigiets 596 00:44:25,960 --> 00:44:31,280 en net die druk van die tydperk onveranderd. 597 00:44:31,280 --> 00:44:38,020 [Student] Ek verstaan ​​nie hoe jy weet dat dit geskuif word deur - Waar het u> O, jammer. 598 00:44:38,020 --> 00:44:41,620 Hier aan die bokant jy sien dat die command line argument ohai hier, 599 00:44:41,620 --> 00:44:43,740 dit gaan om die navraag te wees. 600 00:44:43,740 --> 00:44:49,550 En so basies, jy fietsry oor die karakters in die navraag. 601 00:44:49,550 --> 00:44:52,020 [Student] So o gaan word verskuif dieselfde - 602 00:44:52,020 --> 00:44:56,260 So o stem ooreen met 'n sekere aantal van die alfabet. 603 00:44:56,260 --> 00:44:58,400 [Student] Reg. Maar waar het jy die CS50 deel van? 604 00:44:58,400 --> 00:45:02,540 Oh. Dit is in GetString waar jy soos, "Gee my 'n string enkodeer nie." 605 00:45:02,540 --> 00:45:07,510 [Student] Hulle gaan gee jou 'n argument te skuif deur 606 00:45:07,510 --> 00:45:09,380 en dan sal jy vra vir jou eerste string. >> Ja. 607 00:45:09,380 --> 00:45:12,440 En toe hulle die program uitvoer, gaan hulle die sleutelwoord in te sluit 608 00:45:12,440 --> 00:45:14,740 wanneer hulle in hul command line argumente voer dit uit. 609 00:45:14,740 --> 00:45:19,740 Dan wanneer jy het bewys dat hulle eintlik aan julle gegee het 1 en nie meer nie, nie minder nie, 610 00:45:19,740 --> 00:45:23,750 dan is jy gaan om hulle te vra vir 'n string, sê: "Gee my 'n string." 611 00:45:23,750 --> 00:45:27,630 So dit is waar in hierdie geval het hulle gegee het julle dit ... is CS50! 612 00:45:27,630 --> 00:45:32,090 So dan is jy gaan om dit te gebruik en ohai gebruik en itereer oor. 613 00:45:32,090 --> 00:45:38,200 Let op dat ons hier oorgeslaan oor die versleutelen van die tydperke, 614 00:45:38,200 --> 00:45:51,660 maar in terme van ons posisie vir ohai, die volgende een wat ons gebruik het. 615 00:45:51,660 --> 00:45:54,990 In hierdie geval is dit 'n bietjie moeiliker om te sien, want dit is 4, 616 00:45:54,990 --> 00:45:57,710 so laat ons voortgaan om 'n bietjie. Net bly saam met my hier. 617 00:45:57,710 --> 00:46:02,960 Dan het ons i en s, wat dan vertaal deur o en h onderskeidelik. 618 00:46:02,960 --> 00:46:09,370 Dan het ons 'n ruimte, en so dan weet ons dat ons nie gaan om die spasies in te versleutelen. 619 00:46:09,370 --> 00:46:18,930 Maar let op dat in plaas van gaan na 'n reg hier in hierdie plek, 620 00:46:18,930 --> 00:46:28,330 ons versleutelen deur 'n - ek weet nie of jy kan sien dat - reg hier. 621 00:46:28,330 --> 00:46:33,710 Sodat dit nie is soos wat jy eintlik voorafbepaalde, sê, o kom hier, h hier gaan, 622 00:46:33,710 --> 00:46:39,200 'n hier gaan, ek gaan hier, o, h, 'n, i, o, h, 'n, i. Jy dit nie doen nie. 623 00:46:39,200 --> 00:46:43,760 Jy moet net verskuif jou posisie in die sleutelwoord 624 00:46:43,760 --> 00:46:51,020 wanneer jy weet dat jy eintlik gaan word versleutelen van 'n werklike brief. 625 00:46:51,020 --> 00:46:53,920 Is daardie soort van sin maak? 626 00:46:53,920 --> 00:46:55,800 Okay. 627 00:46:56,490 --> 00:46:58,500 Sodat net 'n paar herinneringe. 628 00:46:58,500 --> 00:47:03,760 Jy wil om seker te maak dat jy net bevorder na die volgende brief in jou navraag 629 00:47:03,760 --> 00:47:06,390 indien die karakter in jou skoonteks is 'n brief. 630 00:47:06,390 --> 00:47:09,120 So sê ons is op die o. 631 00:47:09,120 --> 00:47:19,310 Ons sien dat die volgende karakter, die i-indeks van die skoonteks, is 'n getal, byvoorbeeld. 632 00:47:19,310 --> 00:47:31,630 Dan sal ons bevorder nie j, die indeks vir ons navraag, totdat ons bereik 'n ander brief. 633 00:47:31,630 --> 00:47:36,230 Weereens, jy wil ook om seker te maak dat jy wraparound aan die begin van die term 634 00:47:36,230 --> 00:47:37,770 wanneer jy aan die einde van dit. 635 00:47:37,770 --> 00:47:42,030 As jy hier sien ons op i, die volgende een te wees o. 636 00:47:42,030 --> 00:47:47,690 So jy wil 'n manier om uit te vind van die staat om wraparound aan die begin van jou navraag 637 00:47:47,690 --> 00:47:49,470 elke keer dat jy die einde bereik. 638 00:47:49,470 --> 00:47:55,040 En dit weer doen, watter soort van die operateur is nuttig in daardie geval vir die wikkel rond? 639 00:47:56,630 --> 00:47:59,840 Soos in die aftel voorbeeld. 640 00:47:59,840 --> 00:48:03,710 [Student] Die procent teken. >> Ja, die persentasie teken, wat modulo. 641 00:48:03,710 --> 00:48:11,250 So modulo hier handig te pas sal kom wanneer jy wil om te draai oor die indeks in jou ohai. 642 00:48:11,250 --> 00:48:17,700 En net 'n vinnige wenk: Probeer om te dink van die wikkel oor die term 'n bietjie soos die aftel, 643 00:48:17,700 --> 00:48:23,590 waar indien daar is 3 groepe, die 4de persoon, 644 00:48:23,590 --> 00:48:30,610 hulle getal wat hulle gesê het, was 4 mod 3, wat 1. 645 00:48:30,610 --> 00:48:32,880 So probeer en dink dat die manier van dit. 646 00:48:34,770 --> 00:48:42,740 Soos jy gesien het in die formule, waar jy ci en dan pi, maar dan kj, 647 00:48:42,740 --> 00:48:44,700 jy wil om seker te maak dat jy hou van daardie. 648 00:48:44,700 --> 00:48:47,580 Jy nie nodig het om dit te noem i, het jy nie nodig het om dit te noem j, 649 00:48:47,580 --> 00:48:53,270 maar jy wil om seker te maak dat jy hou van die posisie wat jy in jou skoonteks 650 00:48:53,270 --> 00:48:55,790 sowel as die posisie wat jy in jou navraag 651 00:48:55,790 --> 00:48:59,840 want dit is nie noodwendig dieselfde te wees. 652 00:48:59,840 --> 00:49:06,400 Nie net die term - dit kan 'n heeltemal verskillende lengte as jou skoonteks. 653 00:49:06,400 --> 00:49:09,140 Ook jou skoonteks, daar is getalle en karakters, 654 00:49:09,140 --> 00:49:14,450 so dit gaan nie perfek ooreenstem saam. Ja. 655 00:49:14,450 --> 00:49:19,280 [Student] Is daar 'n funksie om die saak te verander? 656 00:49:19,280 --> 00:49:24,530 Kan jy 'n hoofletter A? >> Ja, daar is beslis. 657 00:49:24,530 --> 00:49:27,890 Jy kan check out - ek glo dit is toupper, alle 1 woord. 658 00:49:30,650 --> 00:49:36,310 Maar wanneer jy probeer om dinge te becijferen en die teks te bewaar, 659 00:49:36,310 --> 00:49:39,350 dit is die beste basies afsonderlike gevalle te hê. 660 00:49:39,350 --> 00:49:42,040 As dit is 'n hoofletter, dan kan jy wil om te skuif deur hierdie 661 00:49:42,040 --> 00:49:46,460 want in jou formule, wanneer jy terug kyk hoe ons 'n soort van go 662 00:49:46,460 --> 00:49:50,900 afwisselend tussen die ASCII manier van die getalle 663 00:49:50,900 --> 00:49:55,020 en die werklike alfabetiese indeks, ons wil hê om seker te maak 664 00:49:55,020 --> 00:50:01,850 daar gaan 'n soort van die patroon wat jy gaan om te gebruik. 665 00:50:01,850 --> 00:50:04,580 Nog 'n nota op die patroon, eintlik. 666 00:50:04,580 --> 00:50:07,250 Jy gaan om te beslis wat handel met getalle. 667 00:50:07,250 --> 00:50:11,280 Probeer om nie magic nommers te gebruik, wat is 'n voorbeeld van die styl. 668 00:50:11,280 --> 00:50:18,470 So sê jy wil elke keer verskuiwing iets deur wil - 669 00:50:18,470 --> 00:50:22,400 Okay, so wenk, 'n ander spoiler is wanneer jy gaan om te word verskuif iets 670 00:50:22,400 --> 00:50:26,310 deur 'n sekere bedrag, probeer om nie voor te stel deur 'n werklike getal 671 00:50:26,310 --> 00:50:32,810 maar eerder probeer en kyk of jy kan die ASCII-waarde, wat soort van meer sin maak. 672 00:50:32,810 --> 00:50:35,470 'N ander noot: Omdat ons te doen het met formules, 673 00:50:35,470 --> 00:50:41,200 selfs al sal jou TF soort van weet watter patroon wat jy kan gebruik word, 674 00:50:41,200 --> 00:50:44,430 die beste om te verduidelik die logika, soos in jou kommentaar soort, 675 00:50:44,430 --> 00:50:51,880 "Ek is die gebruik van hierdie patroon, want ..." en soort van die patroon te verduidelik bondig in jou kommentaar. 676 00:50:54,090 --> 00:50:58,990 [Dit was walkthrough 2] As daar nie enige ander vrae, dan sal ek net hier bly vir 'n bietjie. 677 00:50:58,990 --> 00:51:04,370 Sterkte met jou pset 2: Crypto en dankie vir die komende. 678 00:51:06,070 --> 00:51:08,620 [Student] Dankie. >> Dankie. 679 00:51:09,220 --> 00:51:10,800 [Media Offline intro]