1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA Chan: Binabati kita sa pagtatapos ng iyong 3 00:00:11,270 --> 00:00:13,200 unang pares ng mga C programs. 4 00:00:13,200 --> 00:00:16,379 Alam ko na ang iyong unang pandarambong sa C syntax ay maaaring maging daunting. 5 00:00:16,379 --> 00:00:20,060 Ngunit tiyakin ko sa inyo, sa dulo ng Siyempre, magagawa mong upang tumingin sa 6 00:00:20,060 --> 00:00:23,870 unang pares ng mga asignatura at makumpleto ang mga ito sa ilang minuto. 7 00:00:23,870 --> 00:00:27,830 >> Ngayon na nakakakuha ka ng higit pang mga pamilyar na may syntax, sabihin makapunta sa Caesar. 8 00:00:27,830 --> 00:00:31,720 Sa Caesar, ang gumagamit ay magsumite ng isang integer key bilang isang command line 9 00:00:31,720 --> 00:00:35,300 argumento, pagkatapos ay ipasok ang isang plain text message sa prompt. 10 00:00:35,300 --> 00:00:38,050 Ang programa ay pagkatapos ensayper ang teksto at i-print 11 00:00:38,050 --> 00:00:40,020 ciphertext kanilang mensahe. 12 00:00:40,020 --> 00:00:42,980 >> Ang enciphering para sa Caesar ay medyo simple. 13 00:00:42,980 --> 00:00:46,455 Shift bawat titik, sa kanilang payak na teksto, sa pamamagitan ng mga key. 14 00:00:46,455 --> 00:00:49,220 Bilang isang resulta, ito ay din medyo hindi secure. 15 00:00:49,220 --> 00:00:53,850 Ngunit ang pagpapatupad ng Caesar ipakikilala amin upang ASCIIMath at array data 16 00:00:53,850 --> 00:00:54,460 istraktura. 17 00:00:54,460 --> 00:00:57,510 Susubukan naming makapunta sa mas kumplikadong ciphers sa ibang pagkakataon. 18 00:00:57,510 --> 00:01:01,680 Sa pamamagitan ng isang Caesar key ng 2, ang titik A sa plain text ay kinakatawan ng 19 00:01:01,680 --> 00:01:07,580 ang titik C sa ciphertext dahil C ay dalawang letra pagkatapos A. B ay magiging 20 00:01:07,580 --> 00:01:12,450 kinakatawan ng D at C sa pamamagitan ng E. Patungo sa dulo ng alpabeto, W ay 21 00:01:12,450 --> 00:01:18,550 kinakatawan ng Y, X at Z. sa pamamagitan ng Ngunit Y Walang dalawang titik matapos na ito, kaya 22 00:01:18,550 --> 00:01:21,070 ang ciphers bumabalot sa buong alpabeto. 23 00:01:21,070 --> 00:01:27,190 Y sa plain text ay samakatuwid ay kinakatawan ng Isang sa ciphertext, at Z sa pamamagitan ng B. maaari itong 24 00:01:27,190 --> 00:01:32,080 makatulong upang tingnan ang Caesar sero tulad ng isang tuloy-tuloy na gulong alpabeto. 25 00:01:32,080 --> 00:01:35,760 >> Upang ensayper kanilang mga teksto, ang user ay ipasok ang dalawang argumento 26 00:01:35,760 --> 00:01:37,090 sa command line - 27 00:01:37,090 --> 00:01:40,010 . / Caesar sinusundan ng isang key. 28 00:01:40,010 --> 00:01:44,710 Tulad ng nakasanayan, hindi namin pinagkakatiwalaan ang user ganap na upang ipasok ang input na gumawa 29 00:01:44,710 --> 00:01:45,800 katuturan para sa aming programa. 30 00:01:45,800 --> 00:01:50,670 Kaya kakailanganin naming patunayan ang kanilang command line input. 31 00:01:50,670 --> 00:01:57,285 >> Sa halip na gamitin int pangunahing walang bisa, kami ay gamit int main, int argc, string argv. 32 00:01:57,285 --> 00:02:01,730 Ang integer variable na kumakatawan argc ang dami ng mga argument ang pumasa sa 33 00:02:01,730 --> 00:02:02,880 ang command line. 34 00:02:02,880 --> 00:02:09,070 At argv ay isang array, o sa tingin ng mga ito bilang isang listahan, ng argumento nakapasa in 35 00:02:09,070 --> 00:02:12,000 >> Kaya para sa Caesar, paano namin patunayan input ng user? 36 00:02:12,000 --> 00:02:15,870 Well, dapat silang lamang ng pagpasok dalawang linya ng command argumento - 37 00:02:15,870 --> 00:02:18,150 . / Caesar at isang key. 38 00:02:18,150 --> 00:02:22,340 Kaya kung argc ay hindi 2, na nangangahulugan na ang sila alinman Nakalimutan isang susi at lang 39 00:02:22,340 --> 00:02:27,230 ipinasok. / Caesar, o sila ipinasok maramihang mga susi. 40 00:02:27,230 --> 00:02:29,770 >> Kung ito ang kaso, pagkatapos ay bibigyan ka nais na i-print ang mga tagubilin 41 00:02:29,770 --> 00:02:30,910 at huminto sa programa. 42 00:02:30,910 --> 00:02:34,320 Kakailanganin nilang upang subukang muli mula sa linya ng command. 43 00:02:34,320 --> 00:02:37,430 Ngunit kahit na argc ay 2, bibigyan ka kailangan upang suriin kung ang mga ito 44 00:02:37,430 --> 00:02:39,100 magbibigay sa iyo ng isang wastong key. 45 00:02:39,100 --> 00:02:40,730 Para sa Caesar, kailangan mo ng isang integer. 46 00:02:40,730 --> 00:02:43,260 Ngunit argv ay isang array ng mga string. 47 00:02:43,260 --> 00:02:46,490 Paano mo ma-access ang na key? 48 00:02:46,490 --> 00:02:47,850 >> Ang isang mabilis na pagtingin sa array - 49 00:02:47,850 --> 00:02:51,410 mga istraktura ng data na maghawak ng maramihang mga halaga ng parehong uri ng data. 50 00:02:51,410 --> 00:02:55,350 Entries ay zero-index, ibig sabihin na sa unang elemento ay ang index zero 51 00:02:55,350 --> 00:03:00,260 at ang huling elemento ay nasa index laki minus 1, kung saan ang sukat ay ang bilang ng 52 00:03:00,260 --> 00:03:02,850 mga elemento sa array. 53 00:03:02,850 --> 00:03:07,380 >> Kung ako ipinahayag ng isang bagong string array mailbox haba ng 3, biswal, ito 54 00:03:07,380 --> 00:03:08,570 Mukhang ganito. 55 00:03:08,570 --> 00:03:11,520 Tatlong mga lalagyan para sa mga string , Magkatabi. 56 00:03:11,520 --> 00:03:15,445 Upang ma-access ang anumang elemento, mo i-type ang pangalan ng array at pagkatapos ay ipahiwatig 57 00:03:15,445 --> 00:03:18,080 sa index ng mga square bracket. 58 00:03:18,080 --> 00:03:21,610 Dito, ako magtatalaga ng isang halaga sa bawat elemento, tulad ng kung paano ko gagawin sa anumang 59 00:03:21,610 --> 00:03:24,310 iba pang mga string variable. 60 00:03:24,310 --> 00:03:29,020 >> Kaya upang ma-access ang aming mga argumento command line, lahat kami ay may sa gawin ay i-access ang 61 00:03:29,020 --> 00:03:31,690 ang karapatan elemento ng array argv. 62 00:03:31,690 --> 00:03:37,360 Kung gumagamit ang ipinasok. / Paglipad Koponan Rocket papunta sa terminal, argv 0 gagawin 63 00:03:37,360 --> 00:03:38,950 maging. / paglipad. 64 00:03:38,950 --> 00:03:45,010 argv magiging Team, at ARG2 magiging rocket. 65 00:03:45,010 --> 00:03:47,670 >> Ngayon na maaari naming ma-access ang aming mga key, pa rin namin ang kailangan upang gumawa ng 66 00:03:47,670 --> 00:03:49,040 siguraduhin na ito ay tama. 67 00:03:49,040 --> 00:03:51,060 Kailangan naming i-convert ito sa isang integer. 68 00:03:51,060 --> 00:03:54,680 Ngunit hindi lamang namin maaaring palayasin tulad ng ginawa namin dati. 69 00:03:54,680 --> 00:03:58,800 Sa kabutihang-palad, ang A to function Y tumatagal ng pag-aalaga ng mga ito para sa amin at kahit na nagbabalik 0 70 00:03:58,800 --> 00:04:02,110 kung string ang hindi ma-convert sa isang integer. 71 00:04:02,110 --> 00:04:04,450 Ito ay nasa sa iyo, kahit na, upang sabihin sa ang gumagamit kung bakit hindi mo 72 00:04:04,450 --> 00:04:06,220 ipaalam sa programa ang magpatuloy. 73 00:04:06,220 --> 00:04:10,710 I-imbak ang resulta ng A hanggang Y sa isang integer, at doon mayroon kang ang iyong mga susi. 74 00:04:10,710 --> 00:04:12,070 Ang susunod na bahagi ay simple. 75 00:04:12,070 --> 00:04:15,940 Mag-prompt ang user para sa kanilang mga payak na teksto, na kung saan ay magiging ng data uri ng string. 76 00:04:15,940 --> 00:04:18,339 Sa kabutihang-palad para sa amin, ang lahat ng mga user inputted string ay wasto. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Ngayon na kami ay may lahat ng mga kinakailangang pag-input mula sa mga user, oras na para sa amin upang 79 00:04:24,760 --> 00:04:26,520 ensayper kanilang mensahe. 80 00:04:26,520 --> 00:04:29,200 Ang konsepto ng Caesar ay simple sapat na upang maunawaan. 81 00:04:29,200 --> 00:04:33,750 Ngunit paano ang iyong computer kung aling mga titik na dumating pagkatapos ng isa't isa? 82 00:04:33,750 --> 00:04:36,100 >> Narito kung saan ang mga ASCII na talahanayan ay nagmumula in 83 00:04:36,100 --> 00:04:39,420 Ang bawat karakter ay may isang integer bilang na nauugnay dito. 84 00:04:39,420 --> 00:04:41,380 Capital ay 65. 85 00:04:41,380 --> 00:04:43,310 Capital B ay 66. 86 00:04:43,310 --> 00:04:45,260 Maliit na titik ay isang 97. 87 00:04:45,260 --> 00:04:47,590 Maliit na titik b ay 98. 88 00:04:47,590 --> 00:04:50,770 Subalit character ay hindi limitado upang lamang alpabetiko mga numero. 89 00:04:50,770 --> 00:04:56,020 Halimbawa, ang @ simbolo ay ASCII numero 64. 90 00:04:56,020 --> 00:04:59,690 >> Bago ang pagharap sa ang buong string, sabihin magpanggap kami na lang ay upang shift 91 00:04:59,690 --> 00:05:01,220 isang character. 92 00:05:01,220 --> 00:05:04,640 Well, namin lamang gusto upang ilipat ang aktwal na mga titik sa payak na teksto, hindi 93 00:05:04,640 --> 00:05:06,020 character o numero. 94 00:05:06,020 --> 00:05:09,100 Kaya ang unang bagay na aming nais na tingnan ay kung ang karakter ay nasa 95 00:05:09,100 --> 00:05:10,430 ang alpabeto. 96 00:05:10,430 --> 00:05:14,460 >> Ang function na isalpha Ginagawa ito para sa amin at nagbalik ng Boolean - 97 00:05:14,460 --> 00:05:18,570 kung totoo ang mga character ay isang titik, hindi totoo kung hindi man. 98 00:05:18,570 --> 00:05:22,270 Dalawang iba pang mga kapaki-pakinabang na function ay isupper at islower, may 99 00:05:22,270 --> 00:05:23,860 maliwanag mga pangalan. 100 00:05:23,860 --> 00:05:27,370 Bumalik sila totoo kung ang ibinigay na character ay uppercase o lowercase, 101 00:05:27,370 --> 00:05:28,740 ayon sa pagkakabanggit. 102 00:05:28,740 --> 00:05:33,770 Dahil ang mga ito ay Booleans, ang mga ito ay kapaki-pakinabang upang magamit bilang kundisyon. 103 00:05:33,770 --> 00:05:38,310 >> Kung isalpha nagbabalik totoo, kakailanganin mong sa shift na karakter sa pamamagitan ng mga key. 104 00:05:38,310 --> 00:05:43,750 Kaya natin buksan upang ASCIIMath at gawin ang ilang mga ASCII matematika. 105 00:05:43,750 --> 00:05:48,700 Ang paggamit ay halos kapareho sa paggamit para sa Caesar at tumatagal sa isang susi sa 106 00:05:48,700 --> 00:05:50,870 linya ng command. 107 00:05:50,870 --> 00:05:59,590 >> Kung nagpapatakbo ako ASCIIMath 5, tila upang magdagdag ng 5 sa isang, na nagbibigay sa akin ang letrang f, at 108 00:05:59,590 --> 00:06:01,260 pagpapakita ng ASCII halaga. 109 00:06:01,260 --> 00:06:04,090 Kaya sabihin tumingin sa sa programa. 110 00:06:04,090 --> 00:06:11,820 >> Baka magtaka, dito mismo, bakit sulat ay isang integer, kapag ito ay 111 00:06:11,820 --> 00:06:14,330 malinaw, mahusay, ang isang sulat. 112 00:06:14,330 --> 00:06:17,690 Ito ay lumiliko out na mga character at integer ay mapagpapalit. 113 00:06:17,690 --> 00:06:21,730 Sa pamamagitan ng paglalagay ng mga titik A sa solong mga panipi, integer ang maaaring mag-imbak 114 00:06:21,730 --> 00:06:25,390 ang ASCII halaga ng kabisera A. Mag-ingat, bagaman. 115 00:06:25,390 --> 00:06:27,150 Kailangan mo ang iisang damit. 116 00:06:27,150 --> 00:06:31,260 Nang walang mga single quote marks, ang tagatala magiging hitsura para sa isang variable 117 00:06:31,260 --> 00:06:35,510 pinangalanan A, at hindi ang character na. 118 00:06:35,510 --> 00:06:42,140 >> Pagkatapos ba akong magdagdag ng sulat at isang susi, pag-iimbak ng mga sum sa int resulta variable. 119 00:06:42,140 --> 00:06:47,740 Kahit na ang resulta ay ang mga uri ng data integer, ang aking printf pahayag ay gumagamit ng 120 00:06:47,740 --> 00:06:50,370 % C placeholder para sa mga character. 121 00:06:50,370 --> 00:06:54,530 Kaya programa ang mga kopya ng character na nauugnay sa integer resulta. 122 00:06:54,530 --> 00:07:00,400 At dahil kami ang naka-print na integer anyo pati na rin gamit ang% d, nakikita namin 123 00:07:00,400 --> 00:07:02,110 ang bilang pati na rin. 124 00:07:02,110 --> 00:07:04,450 Kaya ngayon maaari mong makita na namin ituturing ng character at 125 00:07:04,450 --> 00:07:06,980 integer, at pareho din ang kabaligtaran. 126 00:07:06,980 --> 00:07:12,205 >> Sabihin test out ASCIIMath ng ilang higit pang mga beses gamit ang 25 bilang isang susi. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Makuha namin ang titik z. 129 00:07:17,090 --> 00:07:19,750 Ngayon subukan namin 26. 130 00:07:19,750 --> 00:07:25,600 Gusto naming makuha ang isang sulat, ngunit sa halip kami makakuha ng isang kaliwa bracket. 131 00:07:25,600 --> 00:07:29,490 Kaya malinaw naman, lamang pagdaragdag ng key upang ang titik ay hindi gawin. 132 00:07:29,490 --> 00:07:32,780 Kailangan naming malaman ang isang formula upang I-wrap sa paligid ng alpabeto, i aming 133 00:07:32,780 --> 00:07:34,570 Halimbawa sa simula ginawa. 134 00:07:34,570 --> 00:07:38,520 >> Ang formula para sa Caesar ni shift ay ang mga sumusunod. 135 00:07:38,520 --> 00:07:42,750 c katumbas p plus k modulo 26. 136 00:07:42,750 --> 00:07:46,040 Tandaan na ang modulo ay isang kapaki-pakinabang operasyon na nagbibigay sa amin ang natitira 137 00:07:46,040 --> 00:07:49,880 paghahati ng isang numero ng iba pang mga. 138 00:07:49,880 --> 00:07:54,870 Sabihin ilapat ito formula sa plain teksto ng sulat na may isang key ng 2. 139 00:07:54,870 --> 00:08:01,810 Ang ASCII halaga ng y ay 89, na Binibigyan kami ng 91 modulo 26, 140 00:08:01,810 --> 00:08:03,690 na kung saan ay katumbas ng 13 - 141 00:08:03,690 --> 00:08:08,740 Talagang hindi ASCII ang halaga ng isang, na kung saan ay 67. 142 00:08:08,740 --> 00:08:12,810 >> Katatawanan sa akin ngayon at ilipat ang layo mula sa ASCII na mga halaga sa isang alpabetikong index 143 00:08:12,810 --> 00:08:18,690 kung saan ay zero at Z ay 25, na nangangahulugan na ang Y ay 24. 144 00:08:18,690 --> 00:08:25,830 24 plus 2, modulo 6, ay nagbibigay sa amin 26, modulo 26, 0, kung saan ay ang 145 00:08:25,830 --> 00:08:28,170 alpabetikong index ng isang. 146 00:08:28,170 --> 00:08:32,980 Kaya formula na ito ay tila na mag-aplay upang ang alpabetikong index ng mga sulat at 147 00:08:32,980 --> 00:08:34,960 Hindi nito ASCII halaga. 148 00:08:34,960 --> 00:08:37,630 >> Pero simulan mo na may ASCII halaga. 149 00:08:37,630 --> 00:08:41,650 At i-print ang ciphertext karakter, kakailanganin mo nito ASCII halaga pati na rin. 150 00:08:41,650 --> 00:08:46,400 Ito ay nasa sa iyo, pagkatapos, upang malaman kung kung paano ilipat papunta at pabalik. 151 00:08:46,400 --> 00:08:49,850 >> Sa sandaling kang malaman ang tamang formula para sa isang character, ang lahat ng kailangan mong gawin 152 00:08:49,850 --> 00:08:53,520 ay ilapat ang parehong formula sa bawat sulat sa plain text - 153 00:08:53,520 --> 00:08:57,720 lamang kung ang liham na ay alphabetical, siyempre. 154 00:08:57,720 --> 00:09:02,360 At tandaan na kailangan mong panatilihin ang ang kaso, itaas o ibaba, na kung saan 155 00:09:02,360 --> 00:09:06,890 ang isUpper at isLower function nabanggit mas maaga ay darating sa madaling-gamiting. 156 00:09:06,890 --> 00:09:08,830 Maaaring mayroon kang dalawang mga formula - 157 00:09:08,830 --> 00:09:11,680 isa para sa malalaking titik at isa para sa lowercase. 158 00:09:11,680 --> 00:09:18,420 Kaya isUpper isLower isang ay makakatulong sa iyo matukoy kung aling mga formula na mag-aplay. 159 00:09:18,420 --> 00:09:22,460 >> Paano mo ilapat ang iyong mga formula sa bawat solong character sa isang string? 160 00:09:22,460 --> 00:09:25,910 Well, isang string ay isa lamang array ng mga character. 161 00:09:25,910 --> 00:09:31,150 Kaya maaari mong ma-access ang bawat karakter sa pamamagitan ng pagpangkat sa paglipas ng bawat character sa mga 162 00:09:31,150 --> 00:09:33,450 string sa isang para sa loop. 163 00:09:33,450 --> 00:09:37,550 Tulad ng para sa kalagayan ng iyong para sa loop, ang function na strlen, para sa string 164 00:09:37,550 --> 00:09:39,280 haba, ay darating sa madaling-gamiting. 165 00:09:39,280 --> 00:09:44,020 Tatagal sa isang string ng mga input at nagbabalik ang haba ng na string. 166 00:09:44,020 --> 00:09:49,250 Siguraduhin na isama ang tamang library upang gamitin ang function na string length. 167 00:09:49,250 --> 00:09:51,790 >> At doon mo ang iyong ciphertext. 168 00:09:51,790 --> 00:09:53,260 Ang pangalan ko ay ang Zamyla. 169 00:09:53,260 --> 00:09:54,510 At [nagsasalita CODE]. 170 00:09:54,510 --> 00:10:02,944