1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: Baie geluk op die afronding van jou 3 00:00:11,270 --> 00:00:13,200 eerste paar C-programme. 4 00:00:13,200 --> 00:00:16,379 Ek weet dat jou eerste inval in C sintaksis kan ontmoedigend wees. 5 00:00:16,379 --> 00:00:20,060 Maar ek kan jou verseker, aan die einde van die Natuurlik, sal jy in staat wees om te kyk na die 6 00:00:20,060 --> 00:00:23,870 eerste paar opdragte en voltooi hulle in minute. 7 00:00:23,870 --> 00:00:27,830 >> Nou dat jy om meer vertroud met sintaksis, laat ons aan die keiser. 8 00:00:27,830 --> 00:00:31,720 In die keiser, sal die gebruiker stuur 'n integer sleutel as 'n command line 9 00:00:31,720 --> 00:00:35,300 argument, en gee dan 'n vlakte SMS-boodskap op die instruksielyn. 10 00:00:35,300 --> 00:00:38,050 Die program sal dan versleutelen die teks en druk 11 00:00:38,050 --> 00:00:40,020 hul kriptoteks boodskap. 12 00:00:40,020 --> 00:00:42,980 >> Die geheimschrift vir Caesar is eenvoudig. 13 00:00:42,980 --> 00:00:46,455 Skuif elke letter, in hul gewone teks, deur die sleutel. 14 00:00:46,455 --> 00:00:49,220 As gevolg hiervan, is dit ook mooi onseker. 15 00:00:49,220 --> 00:00:53,850 Maar tot uitvoering Caesar sal stel om ons te ASCIIMath en verskeidenheid data 16 00:00:53,850 --> 00:00:54,460 strukture. 17 00:00:54,460 --> 00:00:57,510 Ons sal kry om meer komplekse getalle later. 18 00:00:57,510 --> 00:01:01,680 Met 'n Caesar sleutel van 2, die letter A in plain text sal verteenwoordig word deur 19 00:01:01,680 --> 00:01:07,580 die letter C in kriptoteks omdat C is twee briewe na A. B sou wees 20 00:01:07,580 --> 00:01:12,450 verteenwoordig deur D en C deur E. Teen die einde van die alfabet, W is 21 00:01:12,450 --> 00:01:18,550 verteenwoordig deur Y en X deur Z. Maar Y nie twee briewe na dit, so 22 00:01:18,550 --> 00:01:21,070 die getalle vou rondom die alfabet. 23 00:01:21,070 --> 00:01:27,190 Y in gewone teks word dus verteenwoordig deur A in kriptoteks, en Z deur B. Dit kan 24 00:01:27,190 --> 00:01:32,080 help om die keiser Cypher te sien soos 'n deurlopende alfabet wiel. 25 00:01:32,080 --> 00:01:35,760 >> Hul teks, die gebruiker te versleutelen sal ingaan twee argumente 26 00:01:35,760 --> 00:01:37,090 in die command line - 27 00:01:37,090 --> 00:01:40,010 / Keiser. Gevolg deur 'n sleutel. 28 00:01:40,010 --> 00:01:44,710 Soos altyd, kan ons nie vertrou nie die gebruiker heeltemal insette wat te betree 29 00:01:44,710 --> 00:01:45,800 sin vir ons program. 30 00:01:45,800 --> 00:01:50,670 So ons sal hulle te bekragtig command line insette. 31 00:01:50,670 --> 00:01:57,285 >> In plaas van die gebruik van int main nietig, ons is gebruik int main, int argc, string bevat SPASIES. 32 00:01:57,285 --> 00:02:01,730 Die heelgetalveranderlike argc verteenwoordig die aantal argumente geslaag het in 33 00:02:01,730 --> 00:02:02,880 die opdrag lyn. 34 00:02:02,880 --> 00:02:09,070 En bevat SPASIES is 'n skikking, of dink dat dit as 'n lys van die argumente geslaag in 35 00:02:09,070 --> 00:02:12,000 >> So vir die keiser, hoe ons die geldigheid die gebruiker se insette? 36 00:02:12,000 --> 00:02:15,870 Wel, hulle moet net betree twee command line argumente - 37 00:02:15,870 --> 00:02:18,150 / Keiser. En 'n sleutel. 38 00:02:18,150 --> 00:02:22,340 So as argc is nie 2, wat beteken dat hulle óf vergeet 'n sleutel en net 39 00:02:22,340 --> 00:02:27,230 aangegaan / keiser., of hulle het verskeie sleutels. 40 00:02:27,230 --> 00:02:29,770 >> As dit die geval is, dan sal jy wil instruksies te druk 41 00:02:29,770 --> 00:02:30,910 en sluit die program. 42 00:02:30,910 --> 00:02:34,320 Wat hulle nodig het om weer te probeer uit die opdrag lyn. 43 00:02:34,320 --> 00:02:37,430 Maar selfs as argc is 2, sal jy nodig het om te kyk of hulle 44 00:02:37,430 --> 00:02:39,100 gee jy 'n geldige sleutel. 45 00:02:39,100 --> 00:02:40,730 Vir Caesar, jy moet 'n heelgetal. 46 00:02:40,730 --> 00:02:43,260 Maar bevat SPASIES is 'n verskeidenheid van snare. 47 00:02:43,260 --> 00:02:46,490 Hoe kry jy dat die sleutel? 48 00:02:46,490 --> 00:02:47,850 >> 'N vinnige blik op skikkings - 49 00:02:47,850 --> 00:02:51,410 data strukture wat vashou aan verskeie waardes van die dieselfde data tipe. 50 00:02:51,410 --> 00:02:55,350 Inskrywings is nul-geïndekseer, wat beteken dat die eerste element is die indeks nul 51 00:02:55,350 --> 00:03:00,260 en die laaste element is by die grootte van die indeks minus 1, waar die grootte is van die aantal 52 00:03:00,260 --> 00:03:02,850 elemente in die skikking. 53 00:03:02,850 --> 00:03:07,380 >> As ek verklaar 'n nuwe string verskeidenheid posbus lengte van 3, visueel, is dit 54 00:03:07,380 --> 00:03:08,570 lyk. 55 00:03:08,570 --> 00:03:11,520 Drie houers vir strykers , Langs mekaar. 56 00:03:11,520 --> 00:03:15,445 Enige element om toegang te verkry, jy tik die naam van die skikking en dui dan aan 57 00:03:15,445 --> 00:03:18,080 die indeks in vierkantige hakies. 58 00:03:18,080 --> 00:03:21,610 Hier, ek toeken van 'n waarde aan elke element, net soos ek sou doen met enige 59 00:03:21,610 --> 00:03:24,310 ander string veranderlike. 60 00:03:24,310 --> 00:03:29,020 >> So ons command line argumente om toegang te verkry, al wat ons moet doen, is om toegang tot 61 00:03:29,020 --> 00:03:31,690 die reg om deel van die bevat SPASIES skikking. 62 00:03:31,690 --> 00:03:37,360 As die gebruiker aangegaan / blastoff. Team Vuurpyl in die terminale, bevat SPASIES 0 sou 63 00:03:37,360 --> 00:03:38,950 wees / blastoff.. 64 00:03:38,950 --> 00:03:45,010 bevat SPASIES sou wees span, en arg2 sou wees vuurpyl. 65 00:03:45,010 --> 00:03:47,670 >> Nou dat ons kan toegang tot ons sleutel, het ons nog nodig het om te maak 66 00:03:47,670 --> 00:03:49,040 seker dat dit korrek is. 67 00:03:49,040 --> 00:03:51,060 Ons het dit nodig om te skakel na 'n heelgetal. 68 00:03:51,060 --> 00:03:54,680 Maar ons kan nie net gooi soos Ons het voorheen gedoen het nie. 69 00:03:54,680 --> 00:03:58,800 Gelukkig is die A tot Y funksie sorg van hierdie vir ons en selfs terugkeer 0 70 00:03:58,800 --> 00:04:02,110 As die string kan nie omgesit word in 'n heelgetal. 71 00:04:02,110 --> 00:04:04,450 Dit is aan jou, al is, te vertel die gebruiker hoekom sal jy nie 72 00:04:04,450 --> 00:04:06,220 Laat die program voort te gaan. 73 00:04:06,220 --> 00:04:10,710 Bewaar die gevolg van 'n te Y in 'n integer, en daar het jy jou sleutel. 74 00:04:10,710 --> 00:04:12,070 Die volgende deel is eenvoudig. 75 00:04:12,070 --> 00:04:15,940 Vra die gebruiker om hul gewone teks, wat sal word van data string-tipe. 76 00:04:15,940 --> 00:04:18,339 Gelukkig vir ons, al die gebruiker ingevoer snare is geldig. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Nou dat ons al die nodige insette van die gebruiker, is dit tyd vir ons om te 79 00:04:24,760 --> 00:04:26,520 versleutelen hul boodskap. 80 00:04:26,520 --> 00:04:29,200 Die konsep van die keiser is eenvoudig genoeg om te verstaan. 81 00:04:29,200 --> 00:04:33,750 Maar hoe om jou rekenaar weet watter briewe kom na mekaar? 82 00:04:33,750 --> 00:04:36,100 >> Hier is waar die ASCII tabel kom in 83 00:04:36,100 --> 00:04:39,420 Elke karakter het 'n heeltallige aantal wat daarmee gepaard gaan. 84 00:04:39,420 --> 00:04:41,380 Capital A is 65. 85 00:04:41,380 --> 00:04:43,310 Capital B is 66. 86 00:04:43,310 --> 00:04:45,260 Kleinletter a is 97. 87 00:04:45,260 --> 00:04:47,590 Klein b is 98. 88 00:04:47,590 --> 00:04:50,770 Maar karakters is nie beperk net alfabetiese nommers. 89 00:04:50,770 --> 00:04:56,020 Byvoorbeeld, die @-simbool is ASCII nommer 64. 90 00:04:56,020 --> 00:04:59,690 >> Voordat die hantering van die hele string, Kom ons maak asof ons net om te skuif 91 00:04:59,690 --> 00:05:01,220 een karakter. 92 00:05:01,220 --> 00:05:04,640 Wel, ons wil net om te skuif werklike letters in die plain text, nie 93 00:05:04,640 --> 00:05:06,020 karakters of nommers. 94 00:05:06,020 --> 00:05:09,100 Dus is die eerste ding wat ons wil kyk, is of die karakter in 95 00:05:09,100 --> 00:05:10,430 die alfabet. 96 00:05:10,430 --> 00:05:14,460 >> Die funksie isalpha doen dit vir ons en gee 'n Boole - 97 00:05:14,460 --> 00:05:18,570 waar as die karakters is 'n brief, vals of anders. 98 00:05:18,570 --> 00:05:22,270 Twee ander nuttige funksies isupper en islower, met 99 00:05:22,270 --> 00:05:23,860 selfverduidelikend name. 100 00:05:23,860 --> 00:05:27,370 Hulle keer terug waar as die gegewe karakter is hoofletters of klein, 101 00:05:27,370 --> 00:05:28,740 onderskeidelik. 102 00:05:28,740 --> 00:05:33,770 Want hulle is Booleans, hulle is nuttig om te gebruik as voorwaardes. 103 00:05:33,770 --> 00:05:38,310 >> As isalpha terugkeer waar is, moet jy daardie karakter te skuif deur die sleutel. 104 00:05:38,310 --> 00:05:43,750 So laat ons oop te maak vir ASCIIMath en doen 'n ASCII wiskunde. 105 00:05:43,750 --> 00:05:48,700 Die gebruik is baie soortgelyk aan die gebruik vir die keiser en neem in 'n sleutel by die 106 00:05:48,700 --> 00:05:50,870 command line. 107 00:05:50,870 --> 00:05:59,590 >> As ek loop ASCIIMath 5, blyk dit by te voeg 5 'n, gee my die letter f, en 108 00:05:59,590 --> 00:06:01,260 vertoon die ASCII waarde. 109 00:06:01,260 --> 00:06:04,090 So kom ons neem 'n blik op die program. 110 00:06:04,090 --> 00:06:11,820 >> Jy mag dalk wonder, reg hier, hoekom brief is 'n heelgetal is, wanneer dit 111 00:06:11,820 --> 00:06:14,330 duidelik, goed, 'n brief. 112 00:06:14,330 --> 00:06:17,690 Dit blyk dat die karakters en heelgetalle is verwissel. 113 00:06:17,690 --> 00:06:21,730 Deur die letter A in 'n enkele aanhalingstekens, kan die heelgetal stoor 114 00:06:21,730 --> 00:06:25,390 die ASCII waarde van kapitaal A. Wees versigtig, al is. 115 00:06:25,390 --> 00:06:27,150 Jy moet die enkele klere. 116 00:06:27,150 --> 00:06:31,260 Sonder die aanhalingstekens, die samesteller sal kyk vir 'n veranderlike 117 00:06:31,260 --> 00:06:35,510 die naam van A, en nie die karakter. 118 00:06:35,510 --> 00:06:42,140 >> Dan voeg ek brief en 'n sleutel, stoor die bedrag in die int veranderlikes gevolg. 119 00:06:42,140 --> 00:06:47,740 Selfs al gevolg is van data tipe integer, my printf verklaring maak gebruik van die 120 00:06:47,740 --> 00:06:50,370 % C plekhouer vir karakters. 121 00:06:50,370 --> 00:06:54,530 So het die program druk die karakter verband hou met die heelgetal gevolg. 122 00:06:54,530 --> 00:07:00,400 En omdat ons gedruk die heelgetal vorm asook die gebruik van% d, sien ons 123 00:07:00,400 --> 00:07:02,110 die aantal so goed. 124 00:07:02,110 --> 00:07:04,450 So nou kan jy sien dat ons behandel karakters en 125 00:07:04,450 --> 00:07:06,980 heelgetalle, en omgekeerd. 126 00:07:06,980 --> 00:07:12,205 >> Kom ons toets uit ASCIIMath 'n paar meer keer met behulp van 25 as 'n sleutel. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Ons kry die letter Z. 129 00:07:17,090 --> 00:07:19,750 Nou het ons probeer 26. 130 00:07:19,750 --> 00:07:25,600 Ons wil hê dat die brief 'n te kry, maar Inteendeel, ons kry 'n links hakkie. 131 00:07:25,600 --> 00:07:29,490 So natuurlik, net die toevoeging van die sleutel tot die brief sal doen nie. 132 00:07:29,490 --> 00:07:32,780 Ons moet om uit te vind 'n formule te draai rondom die alfabet, wil ons 133 00:07:32,780 --> 00:07:34,570 byvoorbeeld in die begin gedoen het. 134 00:07:34,570 --> 00:07:38,520 >> 'N formule vir die keiser se verskuiwing is soos volg. 135 00:07:38,520 --> 00:07:42,750 c gelyk p plus k modulo 26. 136 00:07:42,750 --> 00:07:46,040 Onthou dat modulo is 'n nuttige operasie wat gee ons die res 137 00:07:46,040 --> 00:07:49,880 die verdeling van een getal deur die ander. 138 00:07:49,880 --> 00:07:54,870 Kom ons pas hierdie formule na die vlakte teks brief met 'n sleutel van 2. 139 00:07:54,870 --> 00:08:01,810 Die ASCII waarde van y is 89, wat gee ons 91 modulo 26, 140 00:08:01,810 --> 00:08:03,690 wat gelyk is aan 13 - 141 00:08:03,690 --> 00:08:08,740 beslis nie die ASCII waarde van 'n, wat is 67. 142 00:08:08,740 --> 00:08:12,810 >> Humor my nou en weg te beweeg van die ASCII waardes aan 'n alfabetiese indeks 143 00:08:12,810 --> 00:08:18,690 waar 'n nul is en Z is 25, wat beteken dat Y is 24. 144 00:08:18,690 --> 00:08:25,830 24 plus 2, modulo 6, gee ons 26, modulo 26, 0, wat die 145 00:08:25,830 --> 00:08:28,170 alfabetiese indeks van 'n. 146 00:08:28,170 --> 00:08:32,980 So lyk hierdie formule toe te pas op die alfabetiese indeks van die letter en 147 00:08:32,980 --> 00:08:34,960 nie sy ASCII waarde. 148 00:08:34,960 --> 00:08:37,630 >> Maar jy begin met die ASCII waardes. 149 00:08:37,630 --> 00:08:41,650 En die kriptoteks karakter te druk, sal jy sy ASCII waarde as goed nodig het. 150 00:08:41,650 --> 00:08:46,400 Dit is aan jou, dan, om uit te vind hoe om te heen en weer oorskakel. 151 00:08:46,400 --> 00:08:49,850 >> Sodra jy uitvind die regte formule vir 'n karakter, al wat jy hoef te doen, 152 00:08:49,850 --> 00:08:53,520 is dieselfde formule van toepassing op elke brief in die plain text - 153 00:08:53,520 --> 00:08:57,720 slegs indien daardie brief is alfabeties, van die kursus. 154 00:08:57,720 --> 00:09:02,360 En onthou dat jy nodig het om te bewaar die geval, boonste of onderste, dis waar 155 00:09:02,360 --> 00:09:06,890 die isUpper en isLower funksies vroeër genoem sal handig te pas kom. 156 00:09:06,890 --> 00:09:08,830 Jy kan hê om twee formules - 157 00:09:08,830 --> 00:09:11,680 een vir hoofletters en een vir klein. 158 00:09:11,680 --> 00:09:18,420 So isUpper 'n isLower sal help om jou bepaal watter formule toe te pas. 159 00:09:18,420 --> 00:09:22,460 >> Hoe doen jy jou formule om elke enkele karakter in 'n string? 160 00:09:22,460 --> 00:09:25,910 Wel, 'n string is net 'n verskeidenheid van die karakters. 161 00:09:25,910 --> 00:09:31,150 So kan jy elke karakter toegang deur groepering oor elke karakter in die 162 00:09:31,150 --> 00:09:33,450 string in 'n lus vir. 163 00:09:33,450 --> 00:09:37,550 Soos vir die toestand van jou vir lus, die funksie strlen, vir string 164 00:09:37,550 --> 00:09:39,280 lengte, sal handig te pas kom. 165 00:09:39,280 --> 00:09:44,020 Dit neem in 'n string as insette en gee die lengte van die string. 166 00:09:44,020 --> 00:09:49,250 Maak seker dat die korrekte biblioteek te sluit die string lengte funksie te gebruik. 167 00:09:49,250 --> 00:09:51,790 >> En daar het jy jou kriptoteks. 168 00:09:51,790 --> 00:09:53,260 My naam is die Zamyla. 169 00:09:53,260 --> 00:09:54,510 En [PRAAT code]. 170 00:09:54,510 --> 00:10:02,944