1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Walkthrough - Probleem Set 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Harvard University] 3 00:00:05,170 --> 00:00:07,490 [Dit is CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Oke. Hallo, iedereen, en welkom bij Walkthrough 2. 5 00:00:10,750 --> 00:00:14,330 Ten eerste wil ik u feliciteren voor het afwerken van PSET 1. 6 00:00:14,330 --> 00:00:18,140 Ik weet dat het zou zijn geweest een beetje moeilijk voor sommigen van jullie, 7 00:00:18,140 --> 00:00:20,460 had kunnen zijn uw eerste computer programma dat u schreef, 8 00:00:20,460 --> 00:00:24,500 maar alleen niet vergeten dat aan het einde van deze, als je terug kijkt naar het einde van het semester, 9 00:00:24,500 --> 00:00:29,820 je kijkt naar PSET 1 en u zult zeggen: "He, ik had kunnen doen, dat in 5 minuten." 10 00:00:29,820 --> 00:00:35,700 Dus kennen en vertrouwen, dat aan het eind van deze je zeker zult PSET 1 vinden heel simpel. 11 00:00:35,700 --> 00:00:40,640 Maar voor nu is het een enorme prestatie, en gefeliciteerd met het krijgen van gedaan. 12 00:00:40,640 --> 00:00:44,010 Nu, ook een snelle notitie voordat we in het vlees van de walkthrough. 13 00:00:44,010 --> 00:00:48,340 Ik wil gewoon een snelle notitie maken dat ik soms niet genoeg tijd hebben 14 00:00:48,340 --> 00:00:52,500 tijdens de walkthroughs om te gaan door elke manier van doen het probleem set 15 00:00:52,500 --> 00:00:56,140 en eerder heel misschien focussen op 1 of 2 soorten implementaties, 16 00:00:56,140 --> 00:00:57,750 manieren waarop u kunt dit doen. 17 00:00:57,750 --> 00:01:01,970 Maar dat wil niet zeggen dat je verboden van het doen van het op een andere manier. 18 00:01:01,970 --> 00:01:05,980 Er zijn vaak, net als bij informatica, tal van manieren om dingen te doen, 19 00:01:05,980 --> 00:01:12,190 en dus zeker voel je vrij om een ​​ander soort oplossing dan ik heb gepresenteerd gebruiken. 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. Een deel van de vragen - 1. Caesar - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Oke. Dus probleem set 2: Crypto is een leuke een. 23 00:01:20,650 --> 00:01:24,500 Nogmaals, met alle PSET start je met een doorsnede van vragen 24 00:01:24,500 --> 00:01:29,600 dat gaat worden uitgevoerd in uw secties met uw aangestelde leerkrachten kerel. 25 00:01:29,600 --> 00:01:31,670 We zijn niet van plan om door middel van deze gaan over de walkthrough, 26 00:01:31,670 --> 00:01:35,100 maar ze zal zeker helpen bij het voltooien van de PSET. 27 00:01:35,100 --> 00:01:38,100 Dus het eerste deel van het probleem set is Caesar. 28 00:01:38,100 --> 00:01:43,470 En dus in Caesar iemand passeert u een sleutel met een geheel getal, 29 00:01:43,470 --> 00:01:48,420 en je zal coderen een tekenreeks die ze u te voorzien 30 00:01:48,420 --> 00:01:50,670 en geef ze terug een versleutelde ding. 31 00:01:50,670 --> 00:01:56,050 Als iemand keek A Christmas Story is er een voorbeeld van dat er. 32 00:01:56,050 --> 00:01:59,090 Dan het tweede deel van het probleem set Vigenere, 33 00:01:59,090 --> 00:02:01,790 dat is een meer geavanceerde encryptie techniek. 34 00:02:01,790 --> 00:02:05,640 En dus gaan we een stuk tekst vercijferen, 35 00:02:05,640 --> 00:02:09,600 behalve in plaats met slechts een enkel geheel getal, we eigenlijk gaan om het te coderen 36 00:02:09,600 --> 00:02:13,340 met een trefwoord dat de gebruiker ons. 37 00:02:16,270 --> 00:02:22,090 Oke, dus de eerste in de werkset vandaag daadwerkelijk gaat updaten van het apparaat. 38 00:02:22,090 --> 00:02:26,430 Op het discussion board zouden we zien dingen als: "Waarom werkt dit niet?" 39 00:02:26,430 --> 00:02:28,110 "Waarom niet Indienen 50 werk?" 40 00:02:28,110 --> 00:02:31,830 en vaak de oplossing is eigenlijk alleen maar om te werken uw apparaat. 41 00:02:31,830 --> 00:02:36,730 En dus als je alleen nog maar in een terminal venster in uw apparaat sudo yum-y - 42 00:02:36,730 --> 00:02:40,040 dat is een vlag ja zeggen, bij te werken alles - update, 43 00:02:40,040 --> 00:02:42,280 dan is uw apparaat wordt bijgewerkt indien nodig. 44 00:02:42,280 --> 00:02:46,960 En het doet geen pijn als je al op de meest recente versie van het apparaat. 45 00:02:46,960 --> 00:02:51,280 Dan zal alleen maar zeggen geen nieuwe updates beschikbaar zijn en u kunt verder werken mee. 46 00:02:51,280 --> 00:02:55,800 Maar dit is goed om nog uit te voeren elke keer dat u het apparaat te openen 47 00:02:55,800 --> 00:02:57,140 want we zijn nog steeds erg veel - 48 00:02:57,140 --> 00:03:00,320 Soms als we komen in een bug - vaststelling van het in het apparaat. 49 00:03:00,320 --> 00:03:03,180 Dus zorg ervoor dat u de meest recente versie van het apparaat hebben 50 00:03:03,180 --> 00:03:07,710 en uit te voeren dat er te werken. 51 00:03:07,710 --> 00:03:14,360 Oke. Dus omdat we te maken hebben met brieven en veranderen, encryptieapparatuur dingen, 52 00:03:14,360 --> 00:03:20,410 we gaan echt willen worden beste vrienden met onze ASCII grafiek. 53 00:03:20,410 --> 00:03:24,350 Er zijn tal van degenen online, als u vindt. Misschien zelfs uw eigen. 54 00:03:24,350 --> 00:03:29,950 Kortom, met elke letter en elk nummer en elke karakter 55 00:03:29,950 --> 00:03:32,210 er is een nummer dat hoort bij hen, 56 00:03:32,210 --> 00:03:38,670 en dus is het goed om hun ASCII-waarden te zien naast de eigenlijke brief. 57 00:03:38,670 --> 00:03:42,310 Die zeker zal u helpen bij het probleem set. 58 00:03:42,310 --> 00:03:45,750 Een ding dat me echt geholpen in dit probleem set was om daadwerkelijk print het uit, 59 00:03:45,750 --> 00:03:48,380 en toen ik ging door, zou ik eigenlijk op tekenen, 60 00:03:48,380 --> 00:03:51,150 schrijven: "Als dit moet naar daar, dan ..." 61 00:03:51,150 --> 00:03:55,270 Kind of er op tekenen en markeer het op, beste vrienden geworden met uw ASCII-tabel. 62 00:03:57,240 --> 00:04:00,750 Dan hebben we een paar andere instrumenten tot onze beschikking. 63 00:04:00,750 --> 00:04:03,750 Deze keer in plaats van daadwerkelijk dat de gebruiker voor al hun inbreng 64 00:04:03,750 --> 00:04:05,230 gaan we een combinatie doen. 65 00:04:05,230 --> 00:04:06,880 We gaan hen vragen bij sommige input, 66 00:04:06,880 --> 00:04:11,350 maar we gaan ook gewoon gebruik maken van de command line argumenten. 67 00:04:11,350 --> 00:04:15,600 Dus als ze hun programma uit te voeren, meestal zeg je. / Hello, bijvoorbeeld, 68 00:04:15,600 --> 00:04:17,310 Als uw programma was hello.c. 69 00:04:17,310 --> 00:04:22,500 Maar deze keer in plaats van alleen maar te zeggen dat, kunnen ze daarbij aansluitend woorden, argumenten. 70 00:04:22,500 --> 00:04:27,210 En dus gaan we gebruiken wat ze passeren om ons als hun input ook, 71 00:04:27,210 --> 00:04:31,720 zo ontroerend verder dan alleen het vragen om integer, maar ook met behulp van command line argumenten. 72 00:04:31,720 --> 00:04:36,590 En dan gaan we naar arrays en strings, die we zullen worden met behulp van een partij als goed. 73 00:04:41,460 --> 00:04:44,810 Hier is slechts een voorbeeld van een mini-ASCII-tabel. 74 00:04:44,810 --> 00:04:48,460 Zoals ik al zei, iedere letter correspondeert met een nummer, 75 00:04:48,460 --> 00:04:52,510 en zo vertrouwd te raken met dat. Het zal van pas komen. 76 00:04:52,510 --> 00:04:55,610 En later, toen we gaan doen wat ASCIIMath het omgaan met de nummers - 77 00:04:55,610 --> 00:05:00,110 optellen, aftrekken hen - dan zeker goed om te verwijzen naar deze grafiek. 78 00:05:02,860 --> 00:05:06,920 Dus hier is een voorbeeld van een Caesar cipher - iets dat je kan hebben gespeeld. 79 00:05:06,920 --> 00:05:11,190 Het is gewoon een wiel. Het betreft in wezen een buitenste alfabet en er is een binnenste alfabet. 80 00:05:11,190 --> 00:05:15,290 Meteen is hier een voorbeeld van de Caesar cipher maar met een sleutel van 0. 81 00:05:15,290 --> 00:05:21,540 Wezen is uitgelijnd met een A, B is afgestemd B, helemaal tot Z. 82 00:05:21,540 --> 00:05:26,590 Maar dat we wilden een sleutel 3, bijvoorbeeld. 83 00:05:26,590 --> 00:05:33,280 Dan zouden we draaien het binnenste wiel, zodat A nu uitgelijnd met D, enz. 84 00:05:33,280 --> 00:05:35,250 En dus dit is eigenlijk wat we gaan doen. 85 00:05:35,250 --> 00:05:38,340 We hebben geen een wiel, maar wat we gaan doen is ons programma maken 86 00:05:38,340 --> 00:05:44,490 soort verschuiving het alfabet met ons een zekere getallen. 87 00:05:44,490 --> 00:05:48,650 Dus zoals ik al eerder zei, we gaan te maken hebben met command line argumenten 88 00:05:48,650 --> 00:05:50,390 alsook het een integer. 89 00:05:50,390 --> 00:05:55,050 Dus de manier waarop een gebruiker uw Caesar programma uit te voeren is door te zeggen. / Caesar 90 00:05:55,050 --> 00:05:58,090 en vervolgens een aantal daarna. 91 00:05:58,090 --> 00:06:01,130 En dat nummer vertegenwoordigt de sleutel, de verschuiving, 92 00:06:01,130 --> 00:06:06,740 hoe vaak je gaat worden het draaien van de binnenste wiel van uw Caesar cipher. 93 00:06:06,740 --> 00:06:08,390 En dus zie je hier een voorbeeld. 94 00:06:08,390 --> 00:06:14,550 Als we de letters van A tot L ingegeven in ons Caesar cipher, 95 00:06:14,550 --> 00:06:19,520 dan zou het ingang D door middel van O want dat is elke letter verschoven meer dan 3 keer, 96 00:06:19,520 --> 00:06:22,080 net zoals het voorbeeld van het wiel dat ik je liet zien. 97 00:06:22,080 --> 00:06:25,300 Daarom dan, indien u hebt ingevoerd, bijvoorbeeld, Dit is CS50! 98 00:06:25,300 --> 00:06:27,960 dan zou ook bewegen alle letters. 99 00:06:27,960 --> 00:06:31,040 En dat is een belangrijk ding in zowel Caesar en Vigenere 100 00:06:31,040 --> 00:06:34,890 is dat we gaan springen over een niet-letters. 101 00:06:34,890 --> 00:06:39,160 Dus elke spaties, tekens, etc, cijfers, we gaan om hen hetzelfde. 102 00:06:39,160 --> 00:06:42,920 We alleen maar de letters verschuiven in dit geval. 103 00:06:42,920 --> 00:06:45,870 Dus zoals je ziet in het wiel, we hebben alleen de letters voor ons beschikbaar, 104 00:06:45,870 --> 00:06:50,150 dus we willen alleen de letters verschuiven en de letters te versleutelen. 105 00:06:51,370 --> 00:06:56,720 Dus het eerste wat je moet doen, je zag dat het gebruik voor Caesar in probleem 2 genoemde 106 00:06:56,720 --> 00:07:05,280 is om Caesar te voeren en vervolgens een nummer in te voeren wanneer u het uit te voeren in de terminal. 107 00:07:05,280 --> 00:07:10,940 Dus wat we moeten doen is een of andere manier die sleutel en toegang te krijgen. 108 00:07:10,940 --> 00:07:14,730 En dus willen we een of andere manier zien dat het gaat om de tweede opdrachtregelargument zijn. 109 00:07:14,730 --> 00:07:20,950 De eerste gaat worden. / Caesar, en de volgende gaat naar de sleutel nummer. 110 00:07:22,190 --> 00:07:29,200 Dus voordat we hadden int main (void) om onze C-programma's te starten. 111 00:07:29,200 --> 00:07:31,790 We gaan te schillen terug een laag een beetje 112 00:07:31,790 --> 00:07:34,720 en eigenlijk zien dat in plaats van het doorgeven in leegte van onze belangrijkste functie 113 00:07:34,720 --> 00:07:37,920 we eigenlijk te maken met 2 parameters. 114 00:07:37,920 --> 00:07:44,070 We hebben een int genaamd argc en daarna een array van strings genaamd argv. 115 00:07:44,070 --> 00:07:46,030 Dus argc een geheel getal, 116 00:07:46,030 --> 00:07:49,640 en het vertegenwoordigt het aantal argumenten dat in uw programma. 117 00:07:49,640 --> 00:07:53,590 En dan argv is eigenlijk de lijst van de genomen argumenten. 118 00:07:53,590 --> 00:08:00,820 Alle argumenten zijn snaren, en dus argv is een array, een lijst, van strings. 119 00:08:01,830 --> 00:08:03,990 Laten we praten over arrays een beetje. 120 00:08:03,990 --> 00:08:05,940 Arrays zijn in wezen een nieuwe datastructuur. 121 00:08:05,940 --> 00:08:09,660 We hebben ints, we hebben verdubbelt, hebben we snaren, en nu hebben we arrays. 122 00:08:09,660 --> 00:08:13,820 Arrays zijn gegevensstructuren die kan bevatten meerdere waarden van hetzelfde type, 123 00:08:13,820 --> 00:08:18,320 dus in wezen, een lijst van wat u wilt. 124 00:08:18,320 --> 00:08:24,400 In wezen, als je wilde een lijst van gehele getallen alle in 1 variabele, 125 00:08:24,400 --> 00:08:29,090 dan zou je een nieuwe variabele die was van het type int array. 126 00:08:29,090 --> 00:08:34,450 Dus arrays zijn nul-geïndexeerde, wat betekent dat het eerste element van de array is op index 0. 127 00:08:34,450 --> 00:08:41,799 Als de matrix is ​​van de lengte 4, zoals in dit voorbeeld dan laatste element zou op index 3, 128 00:08:41,799 --> 00:08:44,810 namelijk 4 - 1. 129 00:08:45,940 --> 00:08:48,420 Dus om array te maken, doe je dan iets als dit. 130 00:08:48,420 --> 00:08:51,440 Zeggen dat je wilde een dubbele array. 131 00:08:51,440 --> 00:08:56,520 Dit geldt voor elk type van data-type, dat wel. 132 00:08:56,520 --> 00:09:00,210 Dus zeggen dat je wilt een double array. Stel dat je wilt noemen mailbox. 133 00:09:00,210 --> 00:09:04,760 Net zoals je zou initialiseren andere dubbele, 134 00:09:04,760 --> 00:09:09,760 je zou dubbel en dan zeggen de naam, maar deze keer zetten we de vierkante haakjes, 135 00:09:09,760 --> 00:09:13,570 en de cijfertoets zal de lengte van de array. 136 00:09:13,570 --> 00:09:16,840 Merk op dat in arrays we niet altijd de lengte veranderen 137 00:09:16,840 --> 00:09:21,230 zodat u altijd te definiëren en te kiezen hoeveel dozen, 138 00:09:21,230 --> 00:09:25,440 hoeveel waarden uw array gaat houden. 139 00:09:25,440 --> 00:09:31,820 Dus om verschillende waarden in uw array te stellen, zul je dit volgende syntaxis te gebruiken, 140 00:09:31,820 --> 00:09:33,200 zoals je ziet op de dia. 141 00:09:33,200 --> 00:09:37,620 Je hebt mailbox index 0 wordt ingesteld op 1,2, 142 00:09:37,620 --> 00:09:42,180 mailbox index 1 set tot 2,4, enz. 143 00:09:42,180 --> 00:09:47,910 Dus nu hebben we beoordeeld arrays een beetje, laten we terug gaan naar argc en argv. 144 00:09:47,910 --> 00:09:52,220 We weten dat argv nu een array van strings. 145 00:09:52,220 --> 00:09:55,080 Dus wanneer een gebruiker gaat in - zeggen dat ze een programma dat - 146 00:09:55,080 --> 00:09:58,740 zeggen ze. / hello David Malan, 147 00:09:58,740 --> 00:10:05,160 wat het programma voor u zal doen al is eigenlijk gekomen met wat argc en argv zijn. 148 00:10:05,160 --> 00:10:07,620 U hoeft dus geen zorgen te maken over dat. 149 00:10:07,620 --> 00:10:14,370 Argc in dit geval zou 3 want zij ziet 3 verschillende woorden gescheiden door spaties. 150 00:10:14,370 --> 00:10:18,850 En dus dan de array in dit geval, zou de eerste index. / Hello, 151 00:10:18,850 --> 00:10:21,770 de volgende David, de volgende Malan. 152 00:10:21,770 --> 00:10:25,640 Ziet iemand meteen wat de relatie tussen argv, 153 00:10:25,640 --> 00:10:28,990  de array, en argc is? 154 00:10:32,820 --> 00:10:38,090 Ja. We zullen daar in een voorbeeld in args.c. 155 00:10:38,090 --> 00:10:42,880 Laten we eens kijken of we kunnen profiteren van de relatie tussen de twee. 156 00:10:42,880 --> 00:10:46,550 Hier kunt u bijvoorbeeld vinden dat in het apparaat de standaard toepassing 157 00:10:46,550 --> 00:10:49,450 te openen. c-bestanden is soms Emacs. 158 00:10:49,450 --> 00:10:54,660 Maar we willen om te gaan met gedit, dus wat je kunt doen is je rechts klikken op uw C-bestand, 159 00:10:54,660 --> 00:11:04,580 ga naar Eigenschappen, Openen met en kies vervolgens gedit, Instellen als standaard, 160 00:11:04,580 --> 00:11:13,020 en nu je programma moet openen in gedit in plaats van Emacs. 161 00:11:14,710 --> 00:11:16,290 Perfect. 162 00:11:17,120 --> 00:11:25,520 Dus hier heb ik een programma dat ik wil afdrukken elke command line argument. 163 00:11:25,520 --> 00:11:32,050 Dus wat de gebruiker voert, wil ik in wezen terug naar hen terug op een nieuwe regel. 164 00:11:32,050 --> 00:11:36,710 Dus wat is een structuur die we kunnen gebruiken om itereren over iets - 165 00:11:36,710 --> 00:11:40,380 iets dat u waarschijnlijk in uw PSET 1? 166 00:11:40,380 --> 00:11:45,840 Als je wilt gaan door middel van een bepaald aantal dingen? >> [Student] For-lus. 167 00:11:45,840 --> 00:11:48,910 For-lus. Precies. Dus laten we beginnen met de for-lus. 168 00:11:48,910 --> 00:11:56,900 We hebben voor int i = 0. Laten we beginnen met een standaard initialisatie variabele. 169 00:11:56,900 --> 00:12:02,370 Ik ga aan de voorwaarde voor een set dan te verlaten en i + +, gaan om daar te doen dingen te zeggen. 170 00:12:02,370 --> 00:12:04,090 Oke. 171 00:12:04,090 --> 00:12:11,590 Dus dacht terug aan argv, als argv is de lijst met argumenten doorgegeven aan het programma 172 00:12:11,590 --> 00:12:15,380 en argc is het aantal argumenten in het programma, 173 00:12:15,380 --> 00:12:21,280 dan betekent dat argc is in wezen de lengte van argv, rechts, 174 00:12:21,280 --> 00:12:28,970 want er zullen zijn zoveel argumenten als de waarde van argc. 175 00:12:28,970 --> 00:12:35,910 Dus als we willen itereren over elk element in argv, 176 00:12:35,910 --> 00:12:43,290 we gaan willen elke keer toegang tot de variabele in argv bij de opgegeven index. 177 00:12:43,290 --> 00:12:49,060 Die kan worden weergegeven met deze, toch? 178 00:12:49,060 --> 00:12:53,430 Deze variabele geeft hier de bijzondere string in casu 179 00:12:53,430 --> 00:12:57,030 want het is een string array - de tekst in op dat gegeven index. 180 00:12:57,030 --> 00:13:00,690 Wat wij willen doen, in dit geval willen we het af te drukken, dus laten we zeggen printf. 181 00:13:00,690 --> 00:13:04,680 En nu argv is een string, dus we willen dat tijdelijke aanduiding daar te zetten. 182 00:13:04,680 --> 00:13:08,430 We willen een nieuwe lijn alleen maar om het er goed uitzien. 183 00:13:08,430 --> 00:13:12,530 Hier hebben we dus een for-lus. We hebben nog de aandoening heeft. 184 00:13:12,530 --> 00:13:20,020 Dus ik begint bij 0, en vervolgens elke keer als het gaat om de gegeven string af te drukken 185 00:13:20,020 --> 00:13:22,980 op dat index in de array. 186 00:13:22,980 --> 00:13:28,410 Dus als we willen stoppen met het afdrukken van elementen in de array? 187 00:13:28,410 --> 00:13:35,720 Als we klaar zijn, toch? Als we het einde van de array. 188 00:13:35,720 --> 00:13:38,870 Dus we willen niet hoger zijn dan langs de lengte van de array, 189 00:13:38,870 --> 00:13:43,700 en we weten al dat we niet nodig om daadwerkelijk actief te weten te komen wat de lengte van argv is 190 00:13:43,700 --> 00:13:47,520 want het is ons gegeven, en wat is dat? Argc. Precies. 191 00:13:47,520 --> 00:13:56,640 Dus we willen dit proces argc aantal keren doen. 192 00:13:56,640 --> 00:13:59,550 Ik ben niet in de juiste directory. 193 00:14:02,100 --> 00:14:03,490 Oke. 194 00:14:03,490 --> 00:14:08,990 Nu laten we args. Geen fouten, wat goed is. 195 00:14:08,990 --> 00:14:11,430 Dus laten we gewoon args uit te voeren. 196 00:14:11,430 --> 00:14:15,130 Wat gaat dit aan ons te retourneren? Het zal alleen maar af te drukken terug. 197 00:14:15,130 --> 00:14:18,320 "Je ingevoerd args in het programma, ik ga het terug te geven aan u." 198 00:14:18,320 --> 00:14:23,170 Dus laten we zeggen dat we willen dan zeggen args foo bar. 199 00:14:23,170 --> 00:14:26,570 Dus, dan print het uit terug naar ons. Oke? 200 00:14:26,570 --> 00:14:30,790 Er is dus een voorbeeld van hoe je kunt gebruiken argc en argv 201 00:14:30,790 --> 00:14:33,460 wetende dat argc is de lengte van argv. 202 00:14:33,460 --> 00:14:42,750 Zorg ervoor dat u niet ooit met arrays toegang krijgt tot een buiten de lengte van de array 203 00:14:42,750 --> 00:14:45,140 omdat C zal zeker schreeuwen naar je. 204 00:14:45,140 --> 00:14:47,560 Je krijgt zoiets als een segmentatie fout, 205 00:14:47,560 --> 00:14:52,470 dat is nooit leuk, eigenlijk te zeggen dat je probeert om iets te openen 206 00:14:52,470 --> 00:14:55,000 dat niet bestaat, niet van jou. 207 00:14:55,000 --> 00:14:59,430 Zorg er dus voor, en vooral met de nul-indexering, we willen niet - 208 00:14:59,430 --> 00:15:02,390 Zoals bijvoorbeeld, als we een array van lengte 4, 209 00:15:02,390 --> 00:15:07,240 die array index 4 bestaat niet, omdat we beginnen bij 0, op nul index. 210 00:15:07,240 --> 00:15:11,730 Het zal een tweede natuur geworden, net als voor loops wanneer we beginnen bij 0. 211 00:15:11,730 --> 00:15:13,610 Dus hou dat in gedachten. 212 00:15:13,610 --> 00:15:22,590 Je wilt niet steeds toegang tot de index van een array die is buiten je bereik. 213 00:15:26,710 --> 00:15:32,560 Dus we kunnen nu zien hoe we kunnen soort van toegang 214 00:15:32,560 --> 00:15:35,930 de commandoregel argumenten die worden doorgegeven inch 215 00:15:35,930 --> 00:15:41,330 Maar als je zag de string, de argv is eigenlijk een string array. 216 00:15:41,330 --> 00:15:45,740 Dus het is eigenlijk niet een geheel getal nog niet, maar in Caesar we willen om te gaan met gehele getallen. 217 00:15:45,740 --> 00:15:54,430 Gelukkig is er een functie voor ons gecreëerd die een tekenreeks daadwerkelijk converteren naar een integer. 218 00:15:54,430 --> 00:15:58,710 Ook hier zijn we niet te maken met input van de gebruiker waar we heen wordt gevraagd ze 219 00:15:58,710 --> 00:16:03,740 voor de input hier voor de sleutel, dus we kunnen niet echt reprompt en zeggen: 220 00:16:03,740 --> 00:16:07,840 "Oh, geef me nog een geheel getal, zeg, als het niet geldig is." 221 00:16:07,840 --> 00:16:10,540 Maar we moeten nog steeds om te controleren op het juiste gebruik. 222 00:16:10,540 --> 00:16:13,520 In Caesar ze alleen doorgelaten in 1 nummer, 223 00:16:13,520 --> 00:16:18,030 en dus ze moeten. / caesar rennen en dan moeten ze je een nummer. 224 00:16:18,030 --> 00:16:23,660 Dus argc moet een bepaald aantal. 225 00:16:23,660 --> 00:16:29,060 Welk nummer zou dat zijn als ze moeten aan je voorbij de. / Caesar en daarna op een toets? 226 00:16:29,060 --> 00:16:32,920 Wat is argc? >> [Student] 2. >> Twee. Precies. 227 00:16:32,920 --> 00:16:35,490 Dus wilt u ervoor zorgen dat argc is 2. 228 00:16:35,490 --> 00:16:39,620 Anders zou je in principe weigeren om het programma te starten. 229 00:16:39,620 --> 00:16:43,040 In het hoofd is het een functie die zegt int main, 230 00:16:43,040 --> 00:16:47,360 dus dan hebben we altijd in goede praktijken return 0 aan het einde van een succesvol programma. 231 00:16:47,360 --> 00:16:50,840 Dus als, laten we zeggen, ze geven je 3 command line argumenten in plaats van 2 232 00:16:50,840 --> 00:16:54,350 of geef je 1, bijvoorbeeld, dan wat u wilt doen is dat je wilt controleren dat 233 00:16:54,350 --> 00:16:59,900 en dan terug 1 zeggen, nee, ik kan niet verder met dit programma. 234 00:16:59,900 --> 00:17:03,190 [Student] Er kan geen ruimte in uw tekst. >> Pardon? 235 00:17:03,190 --> 00:17:06,780 [Student] Er kan geen ruimte in de tekst die u probeert te versleutelen. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 In termen van de tekst die we proberen te versleutelen, dat komt eigenlijk later 238 00:17:11,280 --> 00:17:13,970 als we die tekst te geven. 239 00:17:13,970 --> 00:17:18,260 Dus nu zijn we gewoon accepteren als commando argumenten het werkelijke aantal, 240 00:17:18,260 --> 00:17:21,579 de werkelijke verschuiving voor de Caesar encryptie. 241 00:17:21,579 --> 00:17:27,569 [Student] Waarom heb je 2 in tegenstelling tot slechts 1 argc? Er is zeker een nummer. 242 00:17:27,569 --> 00:17:32,200 Juist. De reden waarom we 2 nodig hebben voor argc in plaats van 1 243 00:17:32,200 --> 00:17:36,260 is omdat wanneer u een programma uitvoert en zegt. / caesar of. / hello, 244 00:17:36,260 --> 00:17:38,280 dat telt eigenlijk als een command line argument. 245 00:17:38,280 --> 00:17:43,020 Dus toen dat neemt al op 1 en dus dan gaan we het invoeren van 1 extra. 246 00:17:45,030 --> 00:17:49,440 Dus je eigenlijk het invoeren van een string in de command line argument. 247 00:17:49,440 --> 00:17:52,730 Wat u wilt doen, voor Caesar willen we om te gaan met een geheel getal, 248 00:17:52,730 --> 00:17:57,180 dus je kunt deze atoi functie. 249 00:17:57,180 --> 00:18:02,850 En eigenlijk, passeert u het in een string en dan gaat u terug terug een geheel getal 250 00:18:02,850 --> 00:18:06,070 of het mogelijk is om die string in een integer. 251 00:18:06,070 --> 00:18:10,960 Nu herinneren wanneer we te maken hebben met printf of GetString, dat soort dingen, 252 00:18:10,960 --> 00:18:13,390 we zijn de bibliotheken die specifiek zijn voor ons. 253 00:18:13,390 --> 00:18:19,450 Dus in het begin dat we beginnen met een hash tag standaard I / O,. Uur, zoiets. 254 00:18:19,450 --> 00:18:22,430 Nou, atoi is niet binnen een van deze bibliotheken, 255 00:18:22,430 --> 00:18:26,600 dus wat we moeten doen is moeten we de juiste bibliotheek bevatten voor. 256 00:18:26,600 --> 00:18:32,720 Dus terug te roepen naar Walkthrough 1 waar ik gesproken over de handmatige functie. 257 00:18:32,720 --> 00:18:37,110 U typt man in je terminal en dan gevolgd door de naam van een functie. 258 00:18:37,110 --> 00:18:39,720 En dus dat zal een hele lijst van het gebruik ervan, 259 00:18:39,720 --> 00:18:42,890 maar goed het zal brengen welke bibliotheek die behoort tot. 260 00:18:42,890 --> 00:18:47,000 Dus dat laat ik aan jou om de handmatige functie met atoi gebruiken 261 00:18:47,000 --> 00:18:53,360 en erachter te komen welke bibliotheek u nodig hebt om te kunnen de atoi functie te gebruiken. 262 00:18:54,450 --> 00:18:57,670 Dus we hebben de sleutel en nu het gaat om het verkrijgen van de platte tekst, 263 00:18:57,670 --> 00:19:01,820 en zodat daadwerkelijk zal input van de gebruiker zijn waar u wordt gevraagd. 264 00:19:01,820 --> 00:19:05,540 We behandelen GetInt en GetFloat, en dus in dezelfde geest 265 00:19:05,540 --> 00:19:07,670 we gaan maken te hebben met GetString. 266 00:19:07,670 --> 00:19:12,440 Maar in dit geval hebben we niet nodig om een ​​doe doen terwijl of terwijl loops te controleren. 267 00:19:12,440 --> 00:19:14,480 GetString zal zeker geven ons een string, 268 00:19:14,480 --> 00:19:17,630 en we gaan voor het coderen wat de gebruiker ons geeft. 269 00:19:17,630 --> 00:19:23,770 Zo kunt u ervan uitgaan dat al deze gebruiker ingevoerde tekenreeksen correct zijn. 270 00:19:23,770 --> 00:19:24,670 Geweldig. 271 00:19:24,670 --> 00:19:27,270 Dus dan als je eenmaal hebt de sleutel en als je eenmaal hebt de tekst, 272 00:19:27,270 --> 00:19:31,660 wat nu overblijft is moet je de platte tekst vercijferen. 273 00:19:31,660 --> 00:19:36,530 Gewoon om snel bedekken lingo, het leesbare is wat de gebruiker die u geeft, 274 00:19:36,530 --> 00:19:41,030 en de cijfertekst is wat je terug naar hen. 275 00:19:42,450 --> 00:19:45,850 Dus strings, om te kunnen door middel van daadwerkelijk brief gaan per brief 276 00:19:45,850 --> 00:19:48,550 want we moeten elke letter verschuiven, 277 00:19:48,550 --> 00:19:51,390 we begrijpen dat strings, als we soort van schil terug de laag, 278 00:19:51,390 --> 00:19:54,130 zien we dat ze gewoon echt een lijst van tekens. 279 00:19:54,130 --> 00:19:55,930 Men komt na de andere. 280 00:19:55,930 --> 00:20:01,690 En dus kunnen we behandelen strings als arrays, omdat ze zijn arrays van karakters. 281 00:20:01,690 --> 00:20:05,640 Dus zeggen dat je een string genaamd tekst, 282 00:20:05,640 --> 00:20:09,400 en binnen die variabele tekst wordt opgeslagen Dit is CS50. 283 00:20:09,400 --> 00:20:15,680 Dan tekst op index 0 zou een hoofdletter T, zou index 1 is h, enz. 284 00:20:17,530 --> 00:20:23,970 En vervolgens met arrays in de argc voorbeeld in args.c, 285 00:20:23,970 --> 00:20:27,090 zagen we dat we moesten itereren over een reeks 286 00:20:27,090 --> 00:20:32,440 en dus moesten we herhalen van i = 0 tot i kleiner is dan de lengte. 287 00:20:32,440 --> 00:20:35,560 Dus we moeten een manier uitzoeken wat de lengte van onze string is 288 00:20:35,560 --> 00:20:37,090 Als we gaan itereren over het. 289 00:20:37,090 --> 00:20:42,300 Gelukkig is er opnieuw een functie er voor ons, maar later in CS50 290 00:20:42,300 --> 00:20:45,860 zul je zeker in staat zijn om te implementeren en maak uw eigen functie 291 00:20:45,860 --> 00:20:48,260 berekenen die de lengte van een string. 292 00:20:48,260 --> 00:20:52,120 Maar voor nu gaan we tekstlengte, dus strlen gebruiken. 293 00:20:52,120 --> 00:21:00,440 U passeert in een string, en dan gaat u terug een int dat de lengte van de string vertegenwoordigt. 294 00:21:00,440 --> 00:21:05,840 Laten we eens kijken naar een voorbeeld van hoe we zouden kunnen itereren over elk teken in een string 295 00:21:05,840 --> 00:21:08,470 en daar iets mee doen. 296 00:21:08,470 --> 00:21:13,250 Wat wij willen doen is itereren over elk teken van de string, 297 00:21:13,250 --> 00:21:19,150 en wat we willen doen is drukken we terug elk karakter 1 voor 1 298 00:21:19,150 --> 00:21:22,060 behalve dat we iets toevoegen ernaast. 299 00:21:22,060 --> 00:21:27,020 Dus laten we beginnen met de for-lus. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 We gaan om ruimte te laten voor de conditie. 301 00:21:32,700 --> 00:21:36,840 We willen herhalen totdat we aan het einde van de string, toch? 302 00:21:36,840 --> 00:21:41,340 Dus dan welke functie geeft ons de lengte van de snaar? 303 00:21:41,340 --> 00:21:43,160 [Onverstaanbaar student reactie] 304 00:21:43,160 --> 00:21:46,420 Dat is de lengte van de command line argumenten. 305 00:21:46,420 --> 00:21:50,650 Maar voor een string willen we een functie die geeft ons de lengte van de string te gebruiken. 306 00:21:50,650 --> 00:21:53,090 Dus dat is tekenreekslengte. 307 00:21:53,090 --> 00:21:57,130 En dus dan moet je gaan in een string aan. 308 00:21:57,130 --> 00:21:59,760 Het moet weten welke snaar het moet in de lengterichting. 309 00:21:59,760 --> 00:22:03,160 Dus dan in dit geval hebben we hier te maken met een touwtje s. 310 00:22:04,790 --> 00:22:05,860 Geweldig. 311 00:22:05,860 --> 00:22:10,770 Dus wat we willen doen, laten we printf. 312 00:22:10,770 --> 00:22:14,850 Nu, we willen om te gaan met tekens. We willen printen elk individueel karakter. 313 00:22:14,850 --> 00:22:22,150 Als je wilt dat het afdrukken van een vlotter, gebruikt u de tijdelijke aanduiding als% f. 314 00:22:22,150 --> 00:22:24,580 Met een int die u zou gebruiken% d. 315 00:22:24,580 --> 00:22:30,890 En dus op dezelfde wijze, met een teken dat u gebruikt% c om te zeggen ik ga worden afdrukken van een karakter 316 00:22:30,890 --> 00:22:34,570 die is opgeslagen in een variabele. 317 00:22:34,570 --> 00:22:40,840 Dus we hebben dit, en voegen we een punt en een spatie aan. 318 00:22:40,840 --> 00:22:45,430 Welk personage gebruiken we? 319 00:22:45,430 --> 00:22:49,780 We gaan worden met behulp van welke aard ook wij aan van de string. 320 00:22:49,780 --> 00:22:52,890 Dus dan gaan we gebruiken iets met touw, 321 00:22:52,890 --> 00:22:56,420 maar we willen gebruikmaakt van de bepaalde karakter daar. 322 00:22:56,420 --> 00:23:02,740 Dus als een string is gewoon een array is, dan hoe kunnen we toegang krijgen tot elementen van arrays? 323 00:23:02,740 --> 00:23:06,480 We hebben die vierkante haakjes, en dan zetten we de index in. 324 00:23:06,480 --> 00:23:11,820 Dus we hebben vierkante haken. Onze index in dit geval kunnen we gewoon gebruik maken van i. Precies. 325 00:23:15,290 --> 00:23:22,370 Dus hier zijn we zeggen dat we gaan worden afdrukken van een teken, gevolgd door een punt en een spatie, 326 00:23:22,370 --> 00:23:30,870 en dat karakter zal de i-de letter in onze string s zijn. 327 00:23:32,920 --> 00:23:39,330 Ik ga gewoon om dat op te slaan. Oke. 328 00:23:42,510 --> 00:23:46,840 Nu ga ik naar lengte van de string uit te voeren. 329 00:23:46,840 --> 00:23:53,440 Dus we hadden een string genaamd OMG, en nu is het nog meer benadrukt. 330 00:23:53,440 --> 00:23:57,870 Ook laten we zeggen dat we eigenlijk willen een string te krijgen van de gebruiker. 331 00:23:57,870 --> 00:23:59,580 Hoe kunnen we dat doen? 332 00:23:59,580 --> 00:24:01,610 Voordat, hoe krijgen we een int? 333 00:24:01,610 --> 00:24:08,040 We zeiden GetInt, toch? Maar dit is niet int, dus laten we GetString. 334 00:24:11,780 --> 00:24:17,770 Laten we lengte van de string. Hier hebt geen specifieke prompt. 335 00:24:17,770 --> 00:24:19,940 Dus ik weet het niet. 336 00:24:19,940 --> 00:24:23,820 Ik ga mijn naam hier in en zo is dan kan ik een van die dingen 337 00:24:23,820 --> 00:24:29,600 waar ik wijs een woord voor elke letter of iets dergelijks. Cool. 338 00:24:29,600 --> 00:24:31,900 Dus dat is tekenreekslengte. 339 00:24:33,000 --> 00:24:34,640 Dus zijn we terug bij Caesar. 340 00:24:34,640 --> 00:24:38,620 We hebben een paar tools over hoe we itereren over een string, 341 00:24:38,620 --> 00:24:41,250 hoe we elk afzonderlijk element te openen. 342 00:24:41,250 --> 00:24:44,720 Dus nu kunnen we terug naar het programma. 343 00:24:44,720 --> 00:24:48,650 Zoals ik al zei, in de ASCII-tabel, je beste vriend, 344 00:24:48,650 --> 00:24:52,300 je gaat naar de nummers die zijn gekoppeld aan elke letter te zien. 345 00:24:52,300 --> 00:24:55,900 Dus hier zeggen dat onze plaintext is dat ik duizelig ben! 346 00:24:55,900 --> 00:25:01,090 Dan elk van deze personages zal een nummer en ASCII-waarde verbonden aan, 347 00:25:01,090 --> 00:25:04,710 zelfs de apostrof, zelfs de ruimte, zelfs het uitroepteken, 348 00:25:04,710 --> 00:25:06,600 dus je zult willen dat in gedachten te houden. 349 00:25:06,600 --> 00:25:12,360 Dat zeggen onze belangrijkste dat de gebruiker opgenomen in hun command line argument is 6. 350 00:25:12,360 --> 00:25:17,770 Dat betekent voor de eerste letter, die I, dat wordt voorgesteld door 73, 351 00:25:17,770 --> 00:25:25,610 u wilt terugkeren naar ze wat letter wordt vertegenwoordigd door de ASCII-waarde van 73 + 6. 352 00:25:25,610 --> 00:25:29,020 In dit geval is dat 79. 353 00:25:30,840 --> 00:25:35,040 Nu willen we gaan naar het volgende teken. 354 00:25:35,040 --> 00:25:40,960 Dus de volgende in de index 1 van de platte tekst zou de apostrof zijn. 355 00:25:40,960 --> 00:25:46,780 Maar vergeet niet dat we willen alleen de letters vercijferen. 356 00:25:46,780 --> 00:25:50,040 Dus we willen ervoor zorgen dat de apostrof eigenlijk hetzelfde blijft, 357 00:25:50,040 --> 00:25:54,310 dat we niet veranderen van 39 tot wat 45 is. 358 00:25:54,310 --> 00:25:57,150 We willen het houden zoals een apostrof. 359 00:25:57,150 --> 00:26:00,780 Dus we willen onthouden om alleen vercijferen de letters 360 00:26:00,780 --> 00:26:04,560 want we willen alle andere symbolen om ongewijzigd blijven in ons programma. 361 00:26:04,560 --> 00:26:07,130 Een ander ding dat we willen is het behouden van hoofdletters. 362 00:26:07,130 --> 00:26:10,250 Dus als u een hoofdletter hebben, moet het blijven als een hoofdletter. 363 00:26:10,250 --> 00:26:12,830 Kleine letters moet blijven als kleine letters. 364 00:26:13,620 --> 00:26:19,480 Dus een aantal nuttige functies om te kunnen omgaan met alleen encryptieapparatuur letters 365 00:26:19,480 --> 00:26:22,380 en houd het behoud van de kapitalisatie van de dingen 366 00:26:22,380 --> 00:26:25,130 de isalpha, isupper, islower functies. 367 00:26:25,130 --> 00:26:29,270 En dus dit zijn functies die u terug een Booleaanse waarde. 368 00:26:29,270 --> 00:26:34,180 Kortom, waar of onwaar. Is dit een hoofdletter? Hierdoor alfanumerieke? 369 00:26:34,180 --> 00:26:37,180 Is dit een brief, in wezen. 370 00:26:37,180 --> 00:26:41,070 Dus hier zijn 3 voorbeelden van hoe je zou die functie te gebruiken. 371 00:26:41,070 --> 00:26:47,060 In principe kun je testen of de waarde die wordt geretourneerd door die functie waar of onwaar is 372 00:26:47,060 --> 00:26:49,400 gebaseerd op die ingang. 373 00:26:49,400 --> 00:26:54,880 Ofwel niet coderen, iets of versleutelen het of ervoor te zorgen dat het hoofdletters, enz. 374 00:26:54,880 --> 00:27:01,080 [Student] Kun je even uitleggen die een beetje meer, en hoe je ze gebruikt? >> Ja, zeker. 375 00:27:01,080 --> 00:27:08,470 Dus als we terugkijken, hier hebben we een hoofdletter I, toch? 376 00:27:08,470 --> 00:27:14,550 We weten dus dat ik gaat O, want ik + 6 is O. 377 00:27:14,550 --> 00:27:18,740 Maar we willen ervoor zorgen dat O zal worden een kapitaal O. 378 00:27:18,740 --> 00:27:22,940 Dus eigenlijk, dat is een soort van naar onze ingang te wijzigen. 379 00:27:22,940 --> 00:27:26,870 Dus of het nu hoofdletters of niet wil soort veranderen de manier waarop wij omgaan met het. 380 00:27:26,870 --> 00:27:32,360 Daarom dan, indien we de isupper functie te gebruiken op die specifieke index, 381 00:27:32,360 --> 00:27:36,480 dus isupper ("I"), die terugkeert voor ons waar is, dus we weten dat het bovenste is. 382 00:27:36,480 --> 00:27:40,360 Dus dan op basis van dat, later gaan we in een formule 383 00:27:40,360 --> 00:27:42,750 dat u zult gebruiken om dingen te veranderen in Caesar, 384 00:27:42,750 --> 00:27:46,560 dus dan in principe, is er gaat een iets andere formule als het hoofdletters 385 00:27:46,560 --> 00:27:50,670 in tegenstelling tot kleine letters. Logisch? 386 00:27:51,020 --> 00:27:52,760 Ja. Geen zorgen. 387 00:27:54,900 --> 00:27:58,990 Ik sprak een beetje over het toevoegen van 6 tot en met een brief, die niet helemaal logisch 388 00:27:58,990 --> 00:28:05,500 behalve wanneer we soort van begrijpen dat deze tekens 389 00:28:05,500 --> 00:28:08,920 zijn soort uitwisselbaar met gehele getallen. 390 00:28:08,920 --> 00:28:11,250 Wat we doen is dat we soort van gebruik impliciete casting. 391 00:28:11,250 --> 00:28:18,100 We gaan in het gieten van een beetje later op, waar je een prijs en je zet hem in een ander type 392 00:28:18,100 --> 00:28:20,440 dan het oorspronkelijk was. 393 00:28:20,440 --> 00:28:25,910 Maar met deze PSET zullen we in staat zijn om dergelijke door elkaar gebruiken tekens 394 00:28:25,910 --> 00:28:30,880 en de bijbehorende gehele getallen. 395 00:28:30,880 --> 00:28:35,140 Dus als je gewoon een teken omsluiten met alleen de enkele aanhalingstekens, 396 00:28:35,140 --> 00:28:40,390 dan zul je in staat zijn om met het werken met gehele getallen, het omgaan met het als een geheel getal. 397 00:28:40,390 --> 00:28:48,040 Dus de hoofdstad C heeft betrekking op 67. Kleine letters f heeft betrekking op 102. 398 00:28:48,040 --> 00:28:51,480 Nogmaals, als je wilt deze waarden weten, kijk naar je ASCII-tabel. 399 00:28:51,480 --> 00:28:56,160 Dus laten we gaan in een paar voorbeelden van hoe u in staat zijn om af te trekken en toe te voegen, 400 00:28:56,160 --> 00:29:03,130 hoe je daadwerkelijk kan echt werken met deze tekens, uitwisselbaar. 401 00:29:03,870 --> 00:29:11,350 I dat ASCIIMath zal de toevoeging van een karakter berekenen een integer 402 00:29:11,350 --> 00:29:17,590 en vervolgens de resulterende karakter en de resulterende ASCII waarde. 403 00:29:17,590 --> 00:29:22,290 En dus even ik zeg - we zullen omgaan met dit deel later - 404 00:29:22,290 --> 00:29:29,100 maar in principe, ik zeg dat de gebruiker moet worden uitgevoerd ASCIIMath zeggen samen met een sleutel, 405 00:29:29,100 --> 00:29:30,880 en ik zeg dat die sleutel gaat om het nummer te 406 00:29:30,880 --> 00:29:34,600 waarmee we gaan dit karakter toe te voegen. 407 00:29:34,600 --> 00:29:38,560 Dus hier opmerken dat sinds ik ben veeleisend een sleutel, 408 00:29:38,560 --> 00:29:40,590 aangezien ik eisen dat ze geven me 1 ding, 409 00:29:40,590 --> 00:29:45,600 Ik wil alleen. / Asciimath en een sleutel te accepteren. 410 00:29:45,600 --> 00:29:49,330 Dus ik ga om te eisen dat argc is gelijk aan 2. 411 00:29:49,330 --> 00:29:54,360 Als het niet, dan ga ik naar 1 terug te keren en het programma zal verlaten. 412 00:29:55,070 --> 00:29:58,540 Dus ik zeg de sleutel is niet van plan om de eerste command line argument, 413 00:29:58,540 --> 00:30:05,080 het gaat om de tweede, en zoals je hier ziet, 414 00:30:05,080 --> 00:30:11,790 Ik ga dat veranderen in een geheel getal. 415 00:30:15,740 --> 00:30:19,230 Dan ga ik naar een tekenset te r. 416 00:30:19,230 --> 00:30:23,970 Merk op dat het type van de variabele chr eigenlijk een integer. 417 00:30:23,970 --> 00:30:30,480 De manier waarop ik ben in staat om r te gebruiken als een geheel getal is door het inkapselen van het met deze enkele aanhalingstekens. 418 00:30:33,850 --> 00:30:40,560 Dus terug naar onze printf statement waar we een tijdelijke aanduiding voor een karakter 419 00:30:40,560 --> 00:30:43,590 en dan een tijdelijke aanduiding voor een geheel getal, 420 00:30:43,590 --> 00:30:49,450 het karakter wordt gerepresenteerd door de CHR en integer is de sleutel. 421 00:30:49,450 --> 00:30:54,320 En dus dan gaan we in het resultaat samen voeg de 2. 422 00:30:54,320 --> 00:30:58,420 Dus we gaan naar r toevoegen + wat de sleutel is, 423 00:30:58,420 --> 00:31:03,520 en dan gaan we het resultaat van deze af te drukken. 424 00:31:06,210 --> 00:31:14,220 Dus laten we asciimath. Het is up-to-date, dus laten we gewoon asciimath uit te voeren. 425 00:31:14,220 --> 00:31:18,290 Oh, maar zie, is het niet doen omdat we niet echt geef het een sleutel. 426 00:31:18,290 --> 00:31:23,850 Dus als het gewoon 1, onze belangrijkste functie terug, het is gewoon weer terug naar ons. 427 00:31:23,850 --> 00:31:29,250 Dus laten we dan gaan in een sleutel. Iemand geef me een nummer. >> [Student] 4. 428 00:31:29,250 --> 00:31:30,920 4. Oke. 429 00:31:30,920 --> 00:31:39,280 Dus r met 4 zal ons v, die overeenkomt met de ASCII-waarde van 118. 430 00:31:39,280 --> 00:31:43,880 Dus dan is het soort van logisch dat - 431 00:31:43,880 --> 00:31:51,250 Eigenlijk mag ik je, wat denk je dat de ASCII-waarde van r is als r + 4 is 118? 432 00:31:53,070 --> 00:31:55,470 Dan ja, r 114. 433 00:31:55,470 --> 00:32:03,010 Dus als je kijkt op de ASCII-tabel, dan zeker genoeg, zult u zien dat r wordt vertegenwoordigd door 114. 434 00:32:03,010 --> 00:32:08,610 Dus nu we weten dat we kunnen gehele getallen toevoegen aan personages, lijkt dit vrij eenvoudig. 435 00:32:08,610 --> 00:32:12,740 We gaan gewoon naar itereren over een string, zoals we zagen in een voorbeeld voor. 436 00:32:12,740 --> 00:32:17,170 We zullen nagaan of het een brief. 437 00:32:17,170 --> 00:32:20,420 Zo ja, dan zullen we verschuiven het door wat de sleutel is. 438 00:32:20,420 --> 00:32:23,650 Vrij eenvoudig, behalve als je naar dit willen, 439 00:32:23,650 --> 00:32:32,140 zie je dat z, vertegenwoordigd door 122, dan zou je een ander karakter. 440 00:32:32,140 --> 00:32:37,770 We willen eigenlijk blijven binnen ons alfabet, toch? 441 00:32:37,770 --> 00:32:43,180 Dus we moeten een manier bedenken van soort verpakking rond. 442 00:32:43,180 --> 00:32:47,190 Wanneer u zed te bereiken en u wilt verhogen met een bepaald aantal, 443 00:32:47,190 --> 00:32:51,230 u niet wilt gaan naar buiten het ASCII alfabet sectie; 444 00:32:51,230 --> 00:32:54,140 u wilt wikkelen helemaal terug naar A. 445 00:32:54,140 --> 00:32:58,550 Maar houd in gedachten dat je nog steeds het geval is behoud. 446 00:32:58,550 --> 00:33:00,980 Dus wetende dat letters niet kan worden symbolen 447 00:33:00,980 --> 00:33:05,290 net als symbolen worden niet van plan om ook te veranderen. 448 00:33:05,290 --> 00:33:08,170 In de laatste PSET je zeker niet nodig om, 449 00:33:08,170 --> 00:33:14,310 maar een optie was om je gulzige PSET te implementeren met behulp van de modulus functie. 450 00:33:14,310 --> 00:33:17,230 Maar nu zijn we echt gaat nodig hebben om modulus te gebruiken, 451 00:33:17,230 --> 00:33:19,900 dus laten we gewoon gaan over deze een klein beetje. 452 00:33:19,900 --> 00:33:26,920 In wezen, als je x modulo y, die u de rest van x gedeeld door y. 453 00:33:26,920 --> 00:33:30,930 Hier zijn enkele voorbeelden. We hebben 27% 15. 454 00:33:30,930 --> 00:33:36,200 In principe, als je aftrekken 15 van 27 zo vaak als mogelijk zonder dat negatieve 455 00:33:36,200 --> 00:33:39,060 dan krijg je 12 overgebleven. 456 00:33:39,060 --> 00:33:44,650 Dus dat is net zoiets als in de wiskunde context, maar hoe kunnen we eigenlijk gebruiken? 457 00:33:44,650 --> 00:33:47,100 Het zal nuttig zijn voor onze overslag. 458 00:33:47,100 --> 00:33:55,420 Voor deze, laten we gewoon zeggen ik vroeg jullie allemaal te verdelen in 3 groepen. 459 00:33:55,420 --> 00:33:58,010 Soms doe je dit in groepen en iets dergelijks. 460 00:33:58,010 --> 00:34:01,320 Zeg Ik zei: "Oke, ik u allen willen worden onderverdeeld in 3." 461 00:34:01,320 --> 00:34:04,240 Hoe zou je dat doen? 462 00:34:04,240 --> 00:34:06,810 [Onverstaanbaar student reactie] Ja, precies. Tel uit te schakelen. Oke. 463 00:34:06,810 --> 00:34:10,260 Laten we eigenlijk doen. Wilt u beginnen? 464 00:34:10,260 --> 00:34:13,810 [Studenten aftellen] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Maar vergeet niet ... >> [Student] Oh, sorry. 466 00:34:16,620 --> 00:34:18,730 Dat is een heel goed punt. 467 00:34:18,730 --> 00:34:24,130 Je zei 4, maar we eigenlijk willen dat je een zeggen, want we willen alleen maar 3 groepen. 468 00:34:24,130 --> 00:34:30,159 Zo dan, hoe - Nee, dat is echt een goed voorbeeld, want dan hoe zou je kunnen zeggen 1? 469 00:34:30,159 --> 00:34:33,370 Wat is de relatie tussen de 4 en 1? 470 00:34:33,370 --> 00:34:36,760 Nou, 4 mod 3: 1. 471 00:34:36,760 --> 00:34:41,460 Dus als u doorgaat, zou je 2. 472 00:34:41,460 --> 00:34:44,540 We hebben dus 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Nogmaals, je bent eigenlijk de 5e persoon. Hoe weet u tot en met 2 in plaats van 5 zeggen? 474 00:34:49,420 --> 00:34:53,760 Je zegt 5 mod 3 is 2. 475 00:34:53,760 --> 00:34:59,100 Ik wil zien hoeveel groepen van 3 overblijven, dan welke volgorde ben ik 476 00:34:59,100 --> 00:35:02,860 En zo dan, als we verder langs de hele kamer, 477 00:35:02,860 --> 00:35:07,760 dan zouden we zien dat we altijd zijn eigenlijk de MOD-functie van toepassing zijn op onszelf 478 00:35:07,760 --> 00:35:09,990 van de soort af te rekenen met. 479 00:35:09,990 --> 00:35:14,490 Dat is een meer soort tastbaar voorbeeld van hoe je zou kunnen gebruiken modulo 480 00:35:14,490 --> 00:35:17,960 want ik weet zeker dat de meesten van ons hebben waarschijnlijk gegaan door dat proces 481 00:35:17,960 --> 00:35:19,630 waar we hebben om te tellen uit. 482 00:35:19,630 --> 00:35:21,840 Eventuele vragen over modulo? 483 00:35:21,840 --> 00:35:25,360 Het zal erg belangrijk om de concepten van dit te begrijpen, 484 00:35:25,360 --> 00:35:28,640 dus ik wil er zeker van dat jullie begrijpen. 485 00:35:28,640 --> 00:35:34,660 [Student] Als er geen rest, is het geven u het werkelijke aantal? 486 00:35:34,660 --> 00:35:40,430 Als een van de eerste 3 van hen had gedaan, zou het gegeven hebben wat ze eigenlijk waren, 487 00:35:40,430 --> 00:35:43,310 of zou het hun gegeven heb [onverstaanbaar] >> Dat is een goede vraag. 488 00:35:43,310 --> 00:35:48,750 Wanneer er geen rest voor de modulo - dus zeggen dat je 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 dat geeft eigenlijk je terug 0. 490 00:35:53,670 --> 00:35:57,290 We praten over dat wat later. 491 00:35:58,810 --> 00:36:07,720 Oh ja, bijvoorbeeld, de 3e persoon - 3 mod 3 is eigenlijk 0 maar ze zei 3. 492 00:36:07,720 --> 00:36:14,900 Dus dat is net zoiets als een innerlijke vangst, bijvoorbeeld, 493 00:36:14,900 --> 00:36:17,620 zoals oke, als de mod is dan 0 Ik ga naar de 3e persoon. 494 00:36:17,620 --> 00:36:22,740 Maar we zullen krijgen in vorm te blijven van hoe we zouden willen om te gaan met wat 0 is later. 495 00:36:22,740 --> 00:36:32,750 Dus nu hebben we een of andere manier een manier van in kaart brengen van de zed om de juiste letter. 496 00:36:32,750 --> 00:36:34,920 Dus nu we hebben meegemaakt deze voorbeelden, 497 00:36:34,920 --> 00:36:37,880 we soort van zien hoe Caesar zou kunnen werken. 498 00:36:37,880 --> 00:36:42,640 Je ziet de 2 alfabetten en dan zie je ze verschuiven. 499 00:36:42,640 --> 00:36:44,430 Dus laten we proberen en uit te drukken dat in termen van de formule. 500 00:36:44,430 --> 00:36:46,940 Deze formule is eigenlijk aan u gegeven in de spec, 501 00:36:46,940 --> 00:36:52,070 maar laten we soort look door wat elke variabele betekent. 502 00:36:52,070 --> 00:36:55,000 Onze eindresultaat gaat worden deze gecodeerde tekst. 503 00:36:55,000 --> 00:36:58,300 Dus dit zegt dat de i-karakter van de cijfertekst 504 00:36:58,300 --> 00:37:02,500 zal voldoen aan de i karakter van de klare tekst. 505 00:37:02,500 --> 00:37:08,130 Dat is logisch, want we willen altijd in de rij die dingen op. 506 00:37:08,130 --> 00:37:13,480 Dus het gaat om de i-karakter van de cijfertekst plus k, dat is onze belangrijkste zijn - 507 00:37:13,480 --> 00:37:17,230 dat is logisch - en dan hebben we deze mod 26. 508 00:37:17,230 --> 00:37:19,860 Herinner me terug toen we de zed 509 00:37:19,860 --> 00:37:24,190 we hadden geen zin om in het personage, dus we wilden het mod 510 00:37:24,190 --> 00:37:26,540 en soort van de wikkel rond het alfabet. 511 00:37:26,540 --> 00:37:33,430 Na zed je zou gaan naar a, b, c, d, totdat je moet het juiste nummer. 512 00:37:33,430 --> 00:37:44,690 Dus we weten dat zed indien + 6, zou ons f want na zed komt a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Dus laten we niet vergeten dat we zeker weten dat zed + 6 gaat geven ons f. 514 00:37:52,530 --> 00:38:03,530 In ASCII waarden z 122 en f 102. 515 00:38:03,530 --> 00:38:10,570 Dus moeten we een of andere manier van het maken van onze Caesar formule te vinden ons 102 516 00:38:10,570 --> 00:38:13,590 na het nemen van in 122. 517 00:38:13,590 --> 00:38:19,550 Dus als we alleen van toepassing deze formule, de ('z' + 6)% 26, die eigenlijk geeft u 24 518 00:38:19,550 --> 00:38:25,980 omdat 122 + 6 is 128; 128% 26 geeft u 24 rest. 519 00:38:25,980 --> 00:38:29,140 Maar dat betekent niet echt f. Dat is zeker niet 102. 520 00:38:29,140 --> 00:38:33,590 Dat is ook niet de 6e letter van het alfabet. 521 00:38:33,590 --> 00:38:41,550 Dus natuurlijk, moeten we een manier tweaken dit een beetje te hebben. 522 00:38:42,970 --> 00:38:51,340 In termen van de reguliere alfabet, weten we dat z de 26e letter en f is de 6e. 523 00:38:51,340 --> 00:38:55,460 Maar we zijn in de informatica, dus we gaan naar index op 0. 524 00:38:55,460 --> 00:39:00,690 Dus dan in plaats van z zijnde de nummer 26, we gaan het is nummer 25 zeggen 525 00:39:00,690 --> 00:39:02,630 omdat a 0. 526 00:39:02,630 --> 00:39:04,770 Dus laten we nu van toepassing van deze formule. 527 00:39:04,770 --> 00:39:11,710 We hebben z vertegenwoordigd door 25 + 6, die geeft je 31. 528 00:39:11,710 --> 00:39:15,790 En 31 mod 26 geeft u 5 als een restant. 529 00:39:15,790 --> 00:39:20,500 Dat is perfect, want we weten dat f is de 5e letter van het alfabet. 530 00:39:20,500 --> 00:39:26,400 Maar het is nog niet f, toch? Het is nog niet 102. 531 00:39:26,400 --> 00:39:32,730 Dus dan voor deze PSET, zal een uitdaging proberen te weten te komen van de relatie 532 00:39:32,730 --> 00:39:36,910 tussen het omzetten tussen deze ASCII-waarden en de alfabetische index. 533 00:39:36,910 --> 00:39:40,280 In wezen, wat je wilt doen, wil je om te beginnen met de ASCII-waarden, 534 00:39:40,280 --> 00:39:45,390 maar dan moet je wilt een of andere manier die zich vertalen in een alfabetische index 535 00:39:45,390 --> 00:39:52,610 dan berekenen wat het zou moeten zijn brief - in principe, wat de alfabetische index is 536 00:39:52,610 --> 00:39:57,660 van de cipher karakter - dan vertalen dat naar de ASCII-waarden. 537 00:39:57,660 --> 00:40:04,870 Dus als je zweep uit uw ASCII-tabel, dan proberen en vind de relaties tussen bijvoorbeeld 102 en 5 538 00:40:04,870 --> 00:40:10,440 of 122 en 25. 539 00:40:12,140 --> 00:40:15,690 We hebben onze belangrijkste gekregen vanaf de command line argumenten, hebben we gekregen van de platte tekst, 540 00:40:15,690 --> 00:40:17,520 we hebben vercijferde het. 541 00:40:17,520 --> 00:40:19,820 Nu alles wat we hebben te doen is afdrukken. 542 00:40:19,820 --> 00:40:22,040 We kunnen dit doen een paar verschillende manieren. 543 00:40:22,040 --> 00:40:24,570 Wat we kunnen doen is eigenlijk af te drukken als we verder gaan. 544 00:40:24,570 --> 00:40:28,250 Zoals we itereren over de karakters in de string, 545 00:40:28,250 --> 00:40:31,660 kunnen we simpelweg gewoon uitprinten recht dan wanneer wij die berekenen. 546 00:40:31,660 --> 00:40:36,030 Als alternatief kunt u ook opslaan in een array en een array van karakters 547 00:40:36,030 --> 00:40:39,280 en herhalen aan het einde over dat hele array en print het uit. 548 00:40:39,280 --> 00:40:40,980 Dus je hebt een paar opties voor. 549 00:40:40,980 --> 00:40:47,280 En vergeet niet dat% c gaat om de tijdelijke aanduiding voor het afdrukken van een teken te zijn. 550 00:40:47,280 --> 00:40:50,420 Dus daar hebben we Caesar, en nu gaan we naar Vigenere, 551 00:40:50,420 --> 00:40:57,580 die zeer vergelijkbaar Caesar maar net iets complexer. 552 00:40:57,580 --> 00:41:03,310 Dus in wezen met Vigenere is je gaat passeren in een trefwoord. 553 00:41:03,310 --> 00:41:06,510 Dus in plaats van een nummer, zul je een string te hebben, 554 00:41:06,510 --> 00:41:09,200 en zo dat gaat fungeren als uw zoekwoord. 555 00:41:09,200 --> 00:41:14,440 Dan, zoals gewoonlijk, zul je een prompt te krijgen voor een string van de gebruiker 556 00:41:14,440 --> 00:41:19,050 en dan vercijferen en dan geven ze de cijfertekst terug. 557 00:41:19,050 --> 00:41:24,650 Dus zoals ik al zei, het is zeer vergelijkbaar met Caesar, behalve in plaats van het verschuiven van een aantal, 558 00:41:24,650 --> 00:41:30,620 het nummer er werkelijk gaande is om elke keer te veranderen van karakter naar karakter. 559 00:41:30,620 --> 00:41:34,890 Om dat werkelijke aantal vertegenwoordigen te verschuiven, het is vertegenwoordigd door het toetsenbord letters. 560 00:41:34,890 --> 00:41:43,150 Als u in een verschuiving van een, bijvoorbeeld, dan zou overeenkomen met een verschuiving van 0. 561 00:41:43,150 --> 00:41:45,900 Dus het is weer terug naar de alfabetische index. 562 00:41:45,900 --> 00:41:49,100 Wat zou handig zijn als je ziet dat we eigenlijk te maken hebben met ASCII-waarden 563 00:41:49,100 --> 00:41:51,790 evenals de letters, en de alfabetische index 564 00:41:51,790 --> 00:41:58,020 Misschien vinden of maak je eigen ASCII-tabel die de alfabetische index van 0 tot en met 25 toont, 565 00:41:58,020 --> 00:42:03,750 a tot en met z en de ASCII-waarden, zodat u kunt soort zien de relatie 566 00:42:03,750 --> 00:42:07,020 en schetsen en proberen te vinden sommige patronen. 567 00:42:07,020 --> 00:42:11,010 Ook als je het verschuiven op het bepaalde instantie door f - 568 00:42:11,010 --> 00:42:21,110 en dit is ofwel kleine letters of hoofdletters f - dan zou dat overeenkomen met 5. 569 00:42:21,110 --> 00:42:24,180 Zijn we goed tot nu toe? 570 00:42:25,770 --> 00:42:30,050 De formule voor Vigenere is een beetje anders. 571 00:42:30,050 --> 00:42:32,960 In principe zie je dat het is net als Caesar, 572 00:42:32,960 --> 00:42:37,390 behalve in plaats van alleen k hebben we k index j. 573 00:42:37,390 --> 00:42:44,810 Merk op dat we niet i gebruikt omdat in wezen de lengte van het zoekwoord 574 00:42:44,810 --> 00:42:49,850 is niet per se de lengte van onze cijfertekst. 575 00:42:49,850 --> 00:42:56,130 Dit zal een beetje duidelijker zijn wanneer zien we een voorbeeld dat ik een beetje heb later. 576 00:42:56,130 --> 00:43:03,160 Kortom, als u uw programma uit te voeren met een sleutelwoord van ohai, 577 00:43:03,160 --> 00:43:08,560 dan betekent dat dat elke keer, ohai gaat om uw shift te zijn. 578 00:43:08,560 --> 00:43:11,060 Dus afhankelijk van welke positie u bent in uw zoekwoord, 579 00:43:11,060 --> 00:43:15,800 je gaat je bepaalde cijfertekst karakter veranderen met dat bedrag. 580 00:43:15,800 --> 00:43:19,630 Nogmaals, net als Caesar, willen we ervoor zorgen dat we de kapitalisatie van de dingen te bewaren 581 00:43:19,630 --> 00:43:22,900 en we alleen coderen, letters, geen tekens of spaties. 582 00:43:22,900 --> 00:43:26,330 Dus terugkijken op Caesar op de functies die u heeft gebruikt, 583 00:43:26,330 --> 00:43:32,570 de manier waarop je hebt besloten hoe je dingen verschuiven, en dat toepassen op uw programma hier. 584 00:43:32,570 --> 00:43:35,260 Dus laten we in kaart dit uit. 585 00:43:35,260 --> 00:43:39,680 We hebben een platte tekst die we hebben gekregen van de gebruiker van getString 586 00:43:39,680 --> 00:43:44,090 zeggende: Deze ... is CS50! 587 00:43:44,090 --> 00:43:47,090 Dan hebben we een sleutelwoord van ohai. 588 00:43:47,090 --> 00:43:50,930 De eerste 4 karakters zijn vrij eenvoudig. 589 00:43:50,930 --> 00:43:55,580 We weten dat T zal worden verschoven o, 590 00:43:55,580 --> 00:44:01,990 Vervolgens h zal worden verschoven h, i zal worden verschoven naar een. 591 00:44:01,990 --> 00:44:04,610 Hier zie je dat er een 0 staat, 592 00:44:04,610 --> 00:44:11,940 dus dan is de eindwaarde is eigenlijk alleen maar dezelfde letter als voorheen. 593 00:44:11,940 --> 00:44:15,250 Dan s wordt verschoven door i. 594 00:44:15,250 --> 00:44:19,370 Maar dan heb je deze periodes hier. 595 00:44:19,370 --> 00:44:25,960 We willen niet vercijferen dat, dus dan hebben we het niet te veranderen door iets 596 00:44:25,960 --> 00:44:31,280 en net uit te printen in de periode ongewijzigd. 597 00:44:31,280 --> 00:44:38,020 [Student] Ik begrijp niet hoe je weet dat dit wordt verschoven door - Waar heb je - >> Oh, sorry. 598 00:44:38,020 --> 00:44:41,620 Op de top hier zie je dat de command line argument ohai hier, 599 00:44:41,620 --> 00:44:43,740 dat gaat het zoekwoord te zijn. 600 00:44:43,740 --> 00:44:49,550 En dus in principe, je fietst over de personages in het zoekwoord. 601 00:44:49,550 --> 00:44:52,020 [Student] Dus o gaat verschuiven hetzelfde - 602 00:44:52,020 --> 00:44:56,260 Dus o komt overeen met een bepaald aantal in het alfabet. 603 00:44:56,260 --> 00:44:58,400 [Student] Juist. Maar waar heb je het CS50 deel uit? 604 00:44:58,400 --> 00:45:02,540 Oh. Dat is in getString waar je bent zoals, "Geef me een string te coderen." 605 00:45:02,540 --> 00:45:07,510 [Student] Ze zullen u dat argument te verschuiven door 606 00:45:07,510 --> 00:45:09,380 en dan zul je vragen voor je eerste string. >> Ja. 607 00:45:09,380 --> 00:45:12,440 Dus als ze het programma uit te voeren, gaan ze het zoekwoord bevatten 608 00:45:12,440 --> 00:45:14,740 in hun command line argumenten wanneer ze het uit te voeren. 609 00:45:14,740 --> 00:45:19,740 Dan als je eenmaal hebt gecontroleerd dat ze eigenlijk heb u 1 en niet meer, niet minder, 610 00:45:19,740 --> 00:45:23,750 dan zul je ze vragen om een ​​string, zeggen: "Geef me een string." 611 00:45:23,750 --> 00:45:27,630 Dus dat is waar in dit geval hebben ze jou gegeven Dit ... is CS50! 612 00:45:27,630 --> 00:45:32,090 Dus dan ga je gebruiken en ohai gebruiken en itereren over. 613 00:45:32,090 --> 00:45:38,200 Merk op dat we hier overgeslagen versleutelen van de periode, 614 00:45:38,200 --> 00:45:51,660 maar in termen van onze positie voor ohai, de volgende gebruikten we o. 615 00:45:51,660 --> 00:45:54,990 In dit geval is het een beetje moeilijker om te zien want dat is 4, 616 00:45:54,990 --> 00:45:57,710 dus laten we blijven een beetje. Gewoon hier blijven met mij. 617 00:45:57,710 --> 00:46:02,960 Dan hebben we i en s, die vervolgens worden vertaald respectievelijk o en h. 618 00:46:02,960 --> 00:46:09,370 Dan hebben we een ruimte, en dus dan weten we dat we niet naar de ruimtes vercijferen. 619 00:46:09,370 --> 00:46:18,930 Maar merk op dat in plaats van naar een op deze plek hier, 620 00:46:18,930 --> 00:46:28,330 we versleutelen door een - ik weet niet of je kunt zien dat - hier. 621 00:46:28,330 --> 00:46:33,710 Dus het is niet zo dat u eigenlijk vooraf bepaalde, laten we zeggen, o gaat hier, h gaat hier, 622 00:46:33,710 --> 00:46:39,200 een gaat hier, ik gaat hier, o, u, a, i, o, u, a, i. Je hoeft niet doen. 623 00:46:39,200 --> 00:46:43,760 Je hoeft alleen verschuiven uw positie in het trefwoord 624 00:46:43,760 --> 00:46:51,020 als je weet dat je eigenlijk gaat worden versleutelen van een echte brief. 625 00:46:51,020 --> 00:46:53,920 Is dat soort van logisch? 626 00:46:53,920 --> 00:46:55,800 Oke. 627 00:46:56,490 --> 00:46:58,500 Dus gewoon enkele aandachtspunten. 628 00:46:58,500 --> 00:47:03,760 U wilt ervoor zorgen dat u alleen door te gaan naar de volgende letter in uw zoekwoord 629 00:47:03,760 --> 00:47:06,390 als het teken in uw tekst zonder opmaak is een brief. 630 00:47:06,390 --> 00:47:09,120 Dat zeggen we op de o. 631 00:47:09,120 --> 00:47:19,310 We merken dat het volgende teken, de i-index van de platte tekst, een getal, bijvoorbeeld. 632 00:47:19,310 --> 00:47:31,630 Dan hebben we niet vooruit j, de index voor onze trefwoord, tot we bij een andere brief. 633 00:47:31,630 --> 00:47:36,230 Nogmaals, je wilt ook zeker van zijn dat u wraparound leveren aan het begin van het zoekwoord 634 00:47:36,230 --> 00:47:37,770 als je aan het eind van het. 635 00:47:37,770 --> 00:47:42,030 Als je hier ziet zijn we op i, het volgende moet men o. 636 00:47:42,030 --> 00:47:47,690 Dus je wilt een of andere manier te kunnen wraparound vinden aan het begin van uw zoekwoord 637 00:47:47,690 --> 00:47:49,470 elke keer dat je het einde bereikt. 638 00:47:49,470 --> 00:47:55,040 En zo ja, wat voor soort gebruiker is handig in dat geval voor het verpakken in de buurt? 639 00:47:56,630 --> 00:47:59,840 Net als in het tellen af ​​voorbeeld. 640 00:47:59,840 --> 00:48:03,710 [Student] Het percentage teken. >> Ja, het percentage teken, dat is modulo. 641 00:48:03,710 --> 00:48:11,250 Dus modulo zal hier van pas komen wanneer u wilt strak langs de index in uw ohai. 642 00:48:11,250 --> 00:48:17,700 En net een snelle hint: Probeer te denken aan verpakken op het zoekwoord een beetje op de tellen af, 643 00:48:17,700 --> 00:48:23,590 waar als er 3 groepen, de 4de persoon, 644 00:48:23,590 --> 00:48:30,610 hun aantal, dat ze zeiden dat was 4 mod 3, dat was 1. 645 00:48:30,610 --> 00:48:32,880 Dus probeer en denk aan het op die manier. 646 00:48:34,770 --> 00:48:42,740 Zoals je zag in de formule, waar u ci en dan pi, maar dan kj, 647 00:48:42,740 --> 00:48:44,700 wilt u ervoor zorgen dat u bijhouden van die. 648 00:48:44,700 --> 00:48:47,580 U hoeft niet te noemen i, hoeft u niet te noemen j, 649 00:48:47,580 --> 00:48:53,270 maar wilt u ervoor zorgen dat u bijhouden van de positie die je op in je platte tekst 650 00:48:53,270 --> 00:48:55,790 evenals de positie die je op een zoekwoord 651 00:48:55,790 --> 00:48:59,840 omdat deze niet noodzakelijkerwijs naar dezelfde. 652 00:48:59,840 --> 00:49:06,400 Niet alleen het trefwoord - het kan een heel andere lengte dan uw platte tekst. 653 00:49:06,400 --> 00:49:09,140 Ook uw platte tekst, zijn er cijfers en letters, 654 00:49:09,140 --> 00:49:14,450 dus het is niet van plan om perfect op elkaar overeenkomen. Ja. 655 00:49:14,450 --> 00:49:19,280 [Student] Is er een functie om te wisselen? 656 00:49:19,280 --> 00:49:24,530 Kunt u een kapitaal A? >> Ja, er is zeker. 657 00:49:24,530 --> 00:49:27,890 U kunt controleren - Ik geloof dat het toupper, alle 1 woord. 658 00:49:30,650 --> 00:49:36,310 Maar als je probeert om dingen te versleutelen en de tekst te behouden, 659 00:49:36,310 --> 00:49:39,350 is het het beste in feite neer op aparte gevallen. 660 00:49:39,350 --> 00:49:42,040 Als het een hoofdletter, dan wil je veranderen door deze 661 00:49:42,040 --> 00:49:46,460 want in uw formule, als je terugkijkt hoe we moeten soort go 662 00:49:46,460 --> 00:49:50,900 elkaar tussen de ASCII manier om de getallen 663 00:49:50,900 --> 00:49:55,020 en de werkelijke alfabetische index, we willen ervoor zorgen dat 664 00:49:55,020 --> 00:50:01,850 Er gaat een soort patroon dat je gaat gebruiken. 665 00:50:01,850 --> 00:50:04,580 Een andere opmerking over het patroon, eigenlijk. 666 00:50:04,580 --> 00:50:07,250 Je gaat zeker het omgaan met getallen. 667 00:50:07,250 --> 00:50:11,280 Probeer niet te magische getallen te gebruiken, dat is een voorbeeld van de stijl. 668 00:50:11,280 --> 00:50:18,470 Dus zeggen dat je wilt elke keer shift iets van wilt - 669 00:50:18,470 --> 00:50:22,400 Oke, dus hint, een andere spoiler is wanneer je gaat te verschuiven iets 670 00:50:22,400 --> 00:50:26,310 met een bepaald bedrag, probeer niet dat vertegenwoordigen een werkelijke aantal 671 00:50:26,310 --> 00:50:32,810 maar proberen en kijk of je kunt de ASCII-waarde, die soort van meer zin te gebruiken. 672 00:50:32,810 --> 00:50:35,470 Nog een opmerking: Omdat we te maken hebben met formules, 673 00:50:35,470 --> 00:50:41,200 ook al is uw TF zal soort van weten welk patroon je zou kunnen gebruiken, 674 00:50:41,200 --> 00:50:44,430 beste in uw commentaar soort verklaren de logica, zoals, 675 00:50:44,430 --> 00:50:51,880 "Ik gebruik dit patroon omdat ..." en de aard van bondig uit te leggen het patroon in uw commentaar. 676 00:50:54,090 --> 00:50:58,990 [Dit was walkthrough 2] Als er geen andere vragen, dan zal ik gewoon hier blijven voor een beetje. 677 00:50:58,990 --> 00:51:04,370 Veel succes met je PSET 2: Crypto en bedankt voor uw komst. 678 00:51:06,070 --> 00:51:08,620 [Student] Dank je wel. >> Bedankt. 679 00:51:09,220 --> 00:51:10,800 [Media Offline intro]