1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: Gefeliciteerd op de afwerking van uw 3 00:00:11,270 --> 00:00:13,200 eerste paar C-programma's. 4 00:00:13,200 --> 00:00:16,379 Ik weet dat je eerste uitstapje in C syntax kan ontmoedigend zijn. 5 00:00:16,379 --> 00:00:20,060 Maar ik verzeker u, aan het einde van de Natuurlijk, zult u in staat om te kijken naar de 6 00:00:20,060 --> 00:00:23,870 eerste paar opdrachten en vullen ze in minuten. 7 00:00:23,870 --> 00:00:27,830 >> Nu dat je krijgt meer vertrouwd met syntax, laten we aan Caesar. 8 00:00:27,830 --> 00:00:31,720 In Caesar, zal de gebruiker het indienen van een integer sleutel als een command line 9 00:00:31,720 --> 00:00:35,300 argument, voer dan een vlakte tekstbericht op de prompt. 10 00:00:35,300 --> 00:00:38,050 Het programma zal dan vercijferen de tekst en druk 11 00:00:38,050 --> 00:00:40,020 hun gecodeerde boodschap. 12 00:00:40,020 --> 00:00:42,980 >> De vercijfering voor Caesar is heel simpel. 13 00:00:42,980 --> 00:00:46,455 Verschuiven elke letter, in hun platte tekst, door de sleutel. 14 00:00:46,455 --> 00:00:49,220 Daardoor is het ook vrij onzeker. 15 00:00:49,220 --> 00:00:53,850 Maar tot uitvoering Caesar zal introduceren ons ASCIIMath en array data 16 00:00:53,850 --> 00:00:54,460 structuren. 17 00:00:54,460 --> 00:00:57,510 We krijgen aan meer complexe cijfers later. 18 00:00:57,510 --> 00:01:01,680 Met een Caesar sleutel van 2, de letter A in platte tekst zou worden vertegenwoordigd door 19 00:01:01,680 --> 00:01:07,580 de letter C in cijfertekst omdat C is twee brieven naar A. B zou zijn 20 00:01:07,580 --> 00:01:12,450 vertegenwoordigd door D en C door E. Towards het einde van het alfabet, W 21 00:01:12,450 --> 00:01:18,550 vertegenwoordigd door Y, X en Y door Z. Maar geen twee letters hebben na het, zo 22 00:01:18,550 --> 00:01:21,070 de cijfers wraps rond het alfabet. 23 00:01:21,070 --> 00:01:27,190 Y in platte tekst wordt dus voorgesteld door Een in cijfertekst en Z B. Het kan 24 00:01:27,190 --> 00:01:32,080 helpen om de Caesar Cypher bekijken zoals een continue alfabet wiel. 25 00:01:32,080 --> 00:01:35,760 >> Om de tekst, de gebruiker vercijferen zullen twee argumenten invoeren 26 00:01:35,760 --> 00:01:37,090 in de command line - 27 00:01:37,090 --> 00:01:40,010 . / Caesar gevolgd door een sleutel. 28 00:01:40,010 --> 00:01:44,710 Zoals altijd, kunnen we niet de gebruiker vertrouwen volledig in te voeren die ervoor in te voeren 29 00:01:44,710 --> 00:01:45,800 logisch voor ons programma. 30 00:01:45,800 --> 00:01:50,670 Dus we moeten hun valideren command line-ingang. 31 00:01:50,670 --> 00:01:57,285 >> In plaats van het gebruiken van int main leegte, we zijn behulp int main, int argc, touwtje argv. 32 00:01:57,285 --> 00:02:01,730 De integer variabele argc vertegenwoordigt het aantal argumenten dat in 33 00:02:01,730 --> 00:02:02,880 de command line. 34 00:02:02,880 --> 00:02:09,070 En argv is een array, of dat het als een lijst van de argumenten doorgegeven inch 35 00:02:09,070 --> 00:02:12,000 >> Dus voor Caesar, hoe kunnen we valideren invoer van de gebruiker? 36 00:02:12,000 --> 00:02:15,870 Nou ja, ze moeten alleen worden betreden twee command line argumenten - 37 00:02:15,870 --> 00:02:18,150 . / Caesar en een sleutel. 38 00:02:18,150 --> 00:02:22,340 Dus als argc is niet 2, dat wil zeggen dat ze ofwel vergaten een sleutel en net 39 00:02:22,340 --> 00:02:27,230 ingevoerd. / caesar, of ze ingevoerd meerdere toetsen. 40 00:02:27,230 --> 00:02:29,770 >> Als dit het geval is, dan zul je willen instructies afdrukken 41 00:02:29,770 --> 00:02:30,910 en sluit het programma. 42 00:02:30,910 --> 00:02:34,320 Ze nodig hebben om het opnieuw te proberen vanaf de opdrachtregel. 43 00:02:34,320 --> 00:02:37,430 Maar zelfs als argc 2, zul je moeten controleren of ze 44 00:02:37,430 --> 00:02:39,100 geven u een geldige sleutel. 45 00:02:39,100 --> 00:02:40,730 Voor Caesar, je moet een integer. 46 00:02:40,730 --> 00:02:43,260 Maar argv is een array van strings. 47 00:02:43,260 --> 00:02:46,490 Hoe krijg je toegang tot die sleutel? 48 00:02:46,490 --> 00:02:47,850 >> Een snelle blik op arrays - 49 00:02:47,850 --> 00:02:51,410 datastructuren die meerdere vasthouden waarden van hetzelfde gegevenstype. 50 00:02:51,410 --> 00:02:55,350 Inzendingen zijn nul-geïndexeerde, wat betekent dat het eerste element is de index nul 51 00:02:55,350 --> 00:03:00,260 en het laatste element is bij index grootte minus 1, waar de grootte is het aantal 52 00:03:00,260 --> 00:03:02,850 elementen in de array. 53 00:03:02,850 --> 00:03:07,380 >> Als ik verklaarde een nieuwe array van strings mailbox van lengte 3, visueel, het 54 00:03:07,380 --> 00:03:08,570 ziet er zo uit. 55 00:03:08,570 --> 00:03:11,520 Drie containers voor strijkers , Zij aan zij. 56 00:03:11,520 --> 00:03:15,445 Om toegang te krijgen tot een element, de naam typt u van de array en dan aangeven 57 00:03:15,445 --> 00:03:18,080 de index tussen vierkante haken. 58 00:03:18,080 --> 00:03:21,610 Hier ben ik het toekennen van een waarde aan elke element, net zoals ik zou doen met een 59 00:03:21,610 --> 00:03:24,310 andere tekenreeksvariabele. 60 00:03:24,310 --> 00:03:29,020 >> Dus om toegang te krijgen tot onze command line argumenten, alles wat we moeten doen is toegang 61 00:03:29,020 --> 00:03:31,690 het recht element van de argv array. 62 00:03:31,690 --> 00:03:37,360 Als de gebruiker. / Blastoff Team getreden Raket in de terminal, argv 0 zou 63 00:03:37,360 --> 00:03:38,950 zijn. / blastoff. 64 00:03:38,950 --> 00:03:45,010 argv zou het team zijn, en arg2 zou raket te zijn. 65 00:03:45,010 --> 00:03:47,670 >> Nu we onze sleutel kan openen, we moeten nog steeds te maken 66 00:03:47,670 --> 00:03:49,040 ervoor dat het correct is. 67 00:03:49,040 --> 00:03:51,060 We moeten om te zetten in een integer. 68 00:03:51,060 --> 00:03:54,680 Maar we kunnen niet zomaar uitbrengen als we hebben eerder gedaan. 69 00:03:54,680 --> 00:03:58,800 Gelukkig, de A tot Y functie verzorgt van deze voor ons en zelfs het resultaat 0 70 00:03:58,800 --> 00:04:02,110 als de tekenreeks kan worden geconverteerd in een integer. 71 00:04:02,110 --> 00:04:04,450 Het is aan u, maar, om te vertellen de gebruiker waarom doe je niet 72 00:04:04,450 --> 00:04:06,220 laat het programma te gaan. 73 00:04:06,220 --> 00:04:10,710 Sla het resultaat van A Y een integer, en daar heb je je sleutel. 74 00:04:10,710 --> 00:04:12,070 Het volgende deel is eenvoudig. 75 00:04:12,070 --> 00:04:15,940 De gebruiker om hun platte tekst, die zal worden van het datatype string. 76 00:04:15,940 --> 00:04:18,339 Gelukkig voor ons, alle door de gebruiker ingevoerd strings zijn geldig. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Nu dat we alle nodige input van de gebruiker, is het tijd voor ons om 79 00:04:24,760 --> 00:04:26,520 vercijferen hun boodschap. 80 00:04:26,520 --> 00:04:29,200 Het concept van Caesar is eenvoudig genoeg te begrijpen. 81 00:04:29,200 --> 00:04:33,750 Maar hoe werkt de computer weet welke letters komen achter elkaar? 82 00:04:33,750 --> 00:04:36,100 >> Hier is waar de ASCII-tabel komt inch 83 00:04:36,100 --> 00:04:39,420 Elk personage heeft een integer nummer ermee verbonden zijn. 84 00:04:39,420 --> 00:04:41,380 Hoofdletter A is 65. 85 00:04:41,380 --> 00:04:43,310 Hoofdletter B is 66. 86 00:04:43,310 --> 00:04:45,260 Kleine letter a is 97. 87 00:04:45,260 --> 00:04:47,590 Kleine letter b is 98. 88 00:04:47,590 --> 00:04:50,770 Maar tekens zijn niet beperkt om gewoon alfabetische nummers. 89 00:04:50,770 --> 00:04:56,020 Bijvoorbeeld, het @-symbool is ASCII nummer 64. 90 00:04:56,020 --> 00:04:59,690 >> Voordat het omgaan met de hele reeks, laten we doen alsof we gewoon moeten verschuiven 91 00:04:59,690 --> 00:05:01,220 een teken. 92 00:05:01,220 --> 00:05:04,640 Nou, we willen alleen verschuiven werkelijke brieven in de platte tekst, niet 93 00:05:04,640 --> 00:05:06,020 letters of cijfers. 94 00:05:06,020 --> 00:05:09,100 Dus het eerste wat we willen controleren is of het karakter is in 95 00:05:09,100 --> 00:05:10,430 het alfabet. 96 00:05:10,430 --> 00:05:14,460 >> De functie isalpha doet dit voor ons en retourneert een Boolean - 97 00:05:14,460 --> 00:05:18,570 true als de personages is een brief, false als anders. 98 00:05:18,570 --> 00:05:22,270 Twee andere handige functies zijn isupper en islower, met 99 00:05:22,270 --> 00:05:23,860 zelfverklarende namen. 100 00:05:23,860 --> 00:05:27,370 Zij keren true als de opgegeven karakter is hoofdletters of kleine letters, 101 00:05:27,370 --> 00:05:28,740 respectievelijk. 102 00:05:28,740 --> 00:05:33,770 Omdat ze Booleans, ze zijn bruikbaar gebruiken als voorwaarde. 103 00:05:33,770 --> 00:05:38,310 >> Als isalpha true retourneert, moet u om dat teken te verschuiven door de sleutel. 104 00:05:38,310 --> 00:05:43,750 Dus laten we open voor ASCIIMath en doe wat ASCII wiskunde. 105 00:05:43,750 --> 00:05:48,700 Het gebruik is zeer vergelijkbaar met het gebruik voor Caesar en neemt in een toets aan de 106 00:05:48,700 --> 00:05:50,870 opdrachtregel. 107 00:05:50,870 --> 00:05:59,590 >> Als ik zonder ASCIIMath 5, het lijkt te voegen 5 een, mij de brief f, en 108 00:05:59,590 --> 00:06:01,260 weergeven van de ASCII-waarde. 109 00:06:01,260 --> 00:06:04,090 Dus laten we eens een kijkje nemen op het programma. 110 00:06:04,090 --> 00:06:11,820 >> Je kunt je afvragen, hier, waarom brief een integer, wanneer het 111 00:06:11,820 --> 00:06:14,330 duidelijk, goed, een brief. 112 00:06:14,330 --> 00:06:17,690 Het blijkt dat de karakters en integers uitwisselbaar. 113 00:06:17,690 --> 00:06:21,730 Door de letter A in enkele aanhalingstekens, kan het integer opslaan 114 00:06:21,730 --> 00:06:25,390 de ASCII-waarde van het kapitaal A. Wees voorzichtig, dat wel. 115 00:06:25,390 --> 00:06:27,150 Je moet het enkel kleren. 116 00:06:27,150 --> 00:06:31,260 Zonder de enkele aanhalingstekens, de compiler zou kijken voor een variabele 117 00:06:31,260 --> 00:06:35,510 genaamd A, en niet het karakter. 118 00:06:35,510 --> 00:06:42,140 >> Vervolgens brief en een sleutel toe te voegen I, het opslaan van de sum in het int variabelen resultaat. 119 00:06:42,140 --> 00:06:47,740 Hoewel resultaat is van gegevenstype integer, mijn printf statement maakt gebruik van de 120 00:06:47,740 --> 00:06:50,370 % C tijdelijke aanduiding voor de personages. 121 00:06:50,370 --> 00:06:54,530 Zodat het programma maakt het karakter geassocieerd met het gehele resultaat. 122 00:06:54,530 --> 00:07:00,400 En aangezien we afgedrukt het integer vorm ook met% d, zien we 123 00:07:00,400 --> 00:07:02,110 het nummer ook. 124 00:07:02,110 --> 00:07:04,450 Nu kun je dus zien dat we behandelen personages en 125 00:07:04,450 --> 00:07:06,980 integers, en vice versa. 126 00:07:06,980 --> 00:07:12,205 >> Laten test ASCIIMath een paar meer tijden met 25 als een sleutel. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 We krijgen de letter z. 129 00:07:17,090 --> 00:07:19,750 Nu proberen we 26. 130 00:07:19,750 --> 00:07:25,600 We willen de brief een te krijgen, maar in plaats daarvan krijgen we een linker beugel. 131 00:07:25,600 --> 00:07:29,490 Zo duidelijk, alleen het toevoegen van de toets om de brief niet zal doen. 132 00:07:29,490 --> 00:07:32,780 We moeten uitzoeken een formule te wikkelen rond het alfabet, zoals onze 133 00:07:32,780 --> 00:07:34,570 bijvoorbeeld in het begin deed. 134 00:07:34,570 --> 00:07:38,520 >> Een formule voor de Caesar's shift is als volgt. 135 00:07:38,520 --> 00:07:42,750 c is gelijk aan p plus k modulo 26. 136 00:07:42,750 --> 00:07:46,040 Vergeet niet dat modulo is een nuttig operatie die geeft ons de rest 137 00:07:46,040 --> 00:07:49,880 verdelen een aantal door de andere. 138 00:07:49,880 --> 00:07:54,870 Laten we dit toepassen formule op de vlakte tekst schrijven met een sleutel van 2. 139 00:07:54,870 --> 00:08:01,810 De ASCII-waarde van y is 89, die geeft ons 91 modulo 26, 140 00:08:01,810 --> 00:08:03,690 wat gelijk 13 - 141 00:08:03,690 --> 00:08:08,740 zeker niet de ASCII-waarde een, die 67. 142 00:08:08,740 --> 00:08:12,810 >> Humor me nu en af ​​te stappen van de ASCII-waarden om een ​​alfabetische index 143 00:08:12,810 --> 00:08:18,690 wanneer A nul is en Z 25, dat wil zeggen dat Y is 24. 144 00:08:18,690 --> 00:08:25,830 24 plus 2, modulo 6, geeft ons 26, modulo 26, 0, hetgeen de 145 00:08:25,830 --> 00:08:28,170 alfabetische index van een. 146 00:08:28,170 --> 00:08:32,980 Dus deze formule blijkt de toepassing alfabetische index van de letter en 147 00:08:32,980 --> 00:08:34,960 niet de ASCII-waarde. 148 00:08:34,960 --> 00:08:37,630 >> Maar je begint met ASCII-waarden. 149 00:08:37,630 --> 00:08:41,650 En om de cijfertekst karakter af te drukken, je zult de ASCII-waarde nodig ook. 150 00:08:41,650 --> 00:08:46,400 Het is aan u, dan, om erachter te komen hoe je heen en weer schakelen. 151 00:08:46,400 --> 00:08:49,850 >> Zodra u uitzoeken van de juiste formule voor een teken, alles wat je hoeft te doen 152 00:08:49,850 --> 00:08:53,520 wordt toegepast dezelfde formule iedere brief in de platte tekst - 153 00:08:53,520 --> 00:08:57,720 alleen als die brief is alfabetisch, natuurlijk. 154 00:08:57,720 --> 00:09:02,360 En vergeet niet dat je nodig hebt om te bewaren het geval is, bovenste of onderste, dat is waar 155 00:09:02,360 --> 00:09:06,890 de isUpper en isLower functies eerder vermeld zal van pas komen. 156 00:09:06,890 --> 00:09:08,830 Je zou kunnen hebben twee formules - 157 00:09:08,830 --> 00:09:11,680 een voor hoofdletters en een voor kleine. 158 00:09:11,680 --> 00:09:18,420 Dus isUpper een isLower zal u helpen welke formule van toepassing. 159 00:09:18,420 --> 00:09:22,460 >> Hoe ziet u uw formule gelden voor iedere enkel teken in een string? 160 00:09:22,460 --> 00:09:25,910 Nou ja, een string is gewoon een scala aan personages. 161 00:09:25,910 --> 00:09:31,150 Dus u kunt elk karakter openen door groeperen dan elk karakter in de 162 00:09:31,150 --> 00:09:33,450 tekenreeks in een lus. 163 00:09:33,450 --> 00:09:37,550 Als voor de conditie van uw voor-lus, de functie strlen, voor strijkkwartet 164 00:09:37,550 --> 00:09:39,280 lengte, zal van pas komen. 165 00:09:39,280 --> 00:09:44,020 Het neemt een tekenreeks als invoer en geeft de lengte van die string. 166 00:09:44,020 --> 00:09:49,250 Zorg ervoor dat u de juiste bibliotheek bevatten om de lengte van de string functie te gebruiken. 167 00:09:49,250 --> 00:09:51,790 >> En daar heb je cijfertekst. 168 00:09:51,790 --> 00:09:53,260 Mijn naam is de Zamyla. 169 00:09:53,260 --> 00:09:54,510 En [SPEAKING CODE]. 170 00:09:54,510 --> 00:10:02,944