1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: Parabéns en rematar o seu 3 00:00:11,270 --> 00:00:13,200 primeiro par de programas en C. 4 00:00:13,200 --> 00:00:16,379 Sei que a súa primeira incursión no Sintaxe C pode ser asustado. 5 00:00:16,379 --> 00:00:20,060 Pero asegura-lle, ao final do Por suposto, vai ser capaz de ollar para o 6 00:00:20,060 --> 00:00:23,870 primeiro par de competencias e completa-las en poucos minutos. 7 00:00:23,870 --> 00:00:27,830 >> Agora que está quedando máis familiarizado coa sintaxe, imos comezar a César. 8 00:00:27,830 --> 00:00:31,720 En César, o usuario deberá presentar un clave número enteiro como unha liña de comandos 9 00:00:31,720 --> 00:00:35,300 argumento, a continuación, escriba unha chaira mensaxes de texto na ventá. 10 00:00:35,300 --> 00:00:38,050 O programa pode entón cifrar o texto e impresión 11 00:00:38,050 --> 00:00:40,020 súa mensaxe de texto cifrado. 12 00:00:40,020 --> 00:00:42,980 >> Cifraxe de César é moi sinxelo. 13 00:00:42,980 --> 00:00:46,455 Desprazar cada letra, na súa texto, pola chave. 14 00:00:46,455 --> 00:00:49,220 Como resultado, é tamén moi inseguro. 15 00:00:49,220 --> 00:00:53,850 Pero a implementación César introducirá nos ASCIIMath e matriz de datos 16 00:00:53,850 --> 00:00:54,460 estruturas. 17 00:00:54,460 --> 00:00:57,510 Nós imos chegar a máis complexa cifras posteriores. 18 00:00:57,510 --> 00:01:01,680 Cunha clave de César de 2, letra A en texto sería representado por 19 00:01:01,680 --> 00:01:07,580 letra C en texto cifrado, por C é de dúas letras tras A. B sería 20 00:01:07,580 --> 00:01:12,450 representado por D e C por E. Rumbo a fin do alfabeto, W é 21 00:01:12,450 --> 00:01:18,550 representado por Y e X, Y Z. Pero Non ten dúas letras para logo, de xeito 22 00:01:18,550 --> 00:01:21,070 as cifras implica o alfabeto. 23 00:01:21,070 --> 00:01:27,190 Y en texto simple é, polo tanto, representado por Un de texto cifrado, e Z por B. Pode 24 00:01:27,190 --> 00:01:32,080 axudar a ver a César como Cypher unha roda alfabeto continua. 25 00:01:32,080 --> 00:01:35,760 >> Para codificar o seu texto, o usuario entrará dous argumentos 26 00:01:35,760 --> 00:01:37,090 na liña de comandos - 27 00:01:37,090 --> 00:01:40,010 . / Caesar seguido por unha chave. 28 00:01:40,010 --> 00:01:44,710 Como sempre, non podemos confiar en que o usuario completo para entrar entrada que facer 29 00:01:44,710 --> 00:01:45,800 sentido para o noso programa. 30 00:01:45,800 --> 00:01:50,670 Entón nós imos ter que validar a súa entrada de liña de comandos. 31 00:01:50,670 --> 00:01:57,285 >> En vez de usar int void main, estamos usar int main, argc int, cadea argv. 32 00:01:57,285 --> 00:02:01,730 O argc variable enteira representa o número de argumentos pasados ​​para 33 00:02:01,730 --> 00:02:02,880 na liña de comandos. 34 00:02:02,880 --> 00:02:09,070 E argv é un array, ou pensar nel como unha lista, dos argumentos pasados ​​dentro 35 00:02:09,070 --> 00:02:12,000 >> Así, para César, como é que imos validar entrada do usuario? 36 00:02:12,000 --> 00:02:15,870 Ben, eles só deben estar entrando dous argumentos de liña de comandos - 37 00:02:15,870 --> 00:02:18,150 . / Caesar e unha clave. 38 00:02:18,150 --> 00:02:22,340 Entón, se non é argc 2, o que significa que ou eles esqueceron a clave e só 39 00:02:22,340 --> 00:02:27,230 entrou. / Caesar, ou entrou varias claves. 40 00:02:27,230 --> 00:02:29,770 >> Se este é o caso, entón vai quere imprimir instrucións 41 00:02:29,770 --> 00:02:30,910 e saír do programa. 42 00:02:30,910 --> 00:02:34,320 Eles van ter para tentar de novo a partir da liña de comandos. 43 00:02:34,320 --> 00:02:37,430 Pero aínda se argc é 2, vai que comprobar se 44 00:02:37,430 --> 00:02:39,100 darlle unha clave válida. 45 00:02:39,100 --> 00:02:40,730 Para Caesar, precisa un número enteiro. 46 00:02:40,730 --> 00:02:43,260 Pero argv é unha matriz de cadeas. 47 00:02:43,260 --> 00:02:46,490 Como accede a clave? 48 00:02:46,490 --> 00:02:47,850 >> Un rápido ollar para as matrices - 49 00:02:47,850 --> 00:02:51,410 estruturas de datos que posúen múltiple Os valores de datos do mesmo tipo. 50 00:02:51,410 --> 00:02:55,350 As inscricións son con índice cero, o que significa que o primeiro elemento é o índice cero 51 00:02:55,350 --> 00:03:00,260 e este último elemento é o tamaño do índice menos 1, en que tamaño é o número de 52 00:03:00,260 --> 00:03:02,850 elementos na matriz. 53 00:03:02,850 --> 00:03:07,380 >> Se eu declarei unha nova caixa de correo matriz de cadea de lonxitude 3, visual, el 54 00:03:07,380 --> 00:03:08,570 coma este. 55 00:03:08,570 --> 00:03:11,520 Tres recipientes para cordas , De xeito conxunto. 56 00:03:11,520 --> 00:03:15,445 Para acceder a calquera elemento, escribe o nome da matriz e logo, indican 57 00:03:15,445 --> 00:03:18,080 o índice entre corchetes. 58 00:03:18,080 --> 00:03:21,610 Aquí, vou asignar un valor a cada elemento, así como eu faría calquera 59 00:03:21,610 --> 00:03:24,310 outra variable cadea. 60 00:03:24,310 --> 00:03:29,020 >> Entón, para acceder os nosos argumentos de liña de comandos, todo o que temos que facer é acceder 61 00:03:29,020 --> 00:03:31,690 o elemento de dereito da matriz argv. 62 00:03:31,690 --> 00:03:37,360 Se o usuario entrou Team. / Decolagem Foguete no terminal, argv 0 sería 63 00:03:37,360 --> 00:03:38,950 ser. / despegamento. 64 00:03:38,950 --> 00:03:45,010 argv sería Team, e arg2 sería foguete. 65 00:03:45,010 --> 00:03:47,670 >> Agora que podemos acceder a nosa chave, aínda temos que facer 66 00:03:47,670 --> 00:03:49,040 seguro de que é correcta. 67 00:03:49,040 --> 00:03:51,060 Necesitamos convertelo en un número enteiro. 68 00:03:51,060 --> 00:03:54,680 Pero non podemos só lanzar como fixemos anteriormente. 69 00:03:54,680 --> 00:03:58,800 Por sorte, para a función A Y coida isto para nós, e mesmo retorna 0 70 00:03:58,800 --> 00:04:02,110 a cadea non se pode converter a un número enteiro. 71 00:04:02,110 --> 00:04:04,450 Correspóndelle a vostede, con todo, para dicir o usuario por que non vai 72 00:04:04,450 --> 00:04:06,220 que o programa continuar. 73 00:04:06,220 --> 00:04:10,710 Gardar o resultado dun de Y nunha enteiro, e alí ten a súa clave. 74 00:04:10,710 --> 00:04:12,070 A seguinte parte é simple. 75 00:04:12,070 --> 00:04:15,940 Solicitar ao usuario o texto simple, que será de datos tipo cadea. 76 00:04:15,940 --> 00:04:18,339 Por sorte para nós, todos os usuarios inseridos cordas son válidos. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Agora que temos todos os medios necesarios do usuario, é tempo para nós 79 00:04:24,760 --> 00:04:26,520 codificar a mensaxe. 80 00:04:26,520 --> 00:04:29,200 O concepto de César é simple o suficiente para entender. 81 00:04:29,200 --> 00:04:33,750 Pero como é que o ordenador sabe que letras vir despois do outro? 82 00:04:33,750 --> 00:04:36,100 >> Aquí é onde a táboa ASCII vén dentro 83 00:04:36,100 --> 00:04:39,420 Cada personaxe ten un número enteiro número asociado a el. 84 00:04:39,420 --> 00:04:41,380 A capital é 65. 85 00:04:41,380 --> 00:04:43,310 Capital B é 66. 86 00:04:43,310 --> 00:04:45,260 Minúsculas un é 97. 87 00:04:45,260 --> 00:04:47,590 Minúsculas b é 98. 88 00:04:47,590 --> 00:04:50,770 Pero os personaxes non se limitan para só números alfabéticos. 89 00:04:50,770 --> 00:04:56,020 Por exemplo, o símbolo @ 64 é o número ASCII. 90 00:04:56,020 --> 00:04:59,690 >> Antes de xestionar toda a corda, imos finxir que nós só temos que cambiar 91 00:04:59,690 --> 00:05:01,220 un personaxe. 92 00:05:01,220 --> 00:05:04,640 Ben, nós só queremos cambiar real letras no texto simple, non 93 00:05:04,640 --> 00:05:06,020 caracteres ou números. 94 00:05:06,020 --> 00:05:09,100 Entón o primeiro que imos querer comprobar é se o personaxe está en 95 00:05:09,100 --> 00:05:10,430 alfabeto. 96 00:05:10,430 --> 00:05:14,460 >> O isalpha función fai isto para nós e devolve un valor booleano - 97 00:05:14,460 --> 00:05:18,570 verdadeiro se os personaxes é unha carta, falso en caso contrario. 98 00:05:18,570 --> 00:05:22,270 Outras dúas funcións útiles son isupper e islower, con 99 00:05:22,270 --> 00:05:23,860 nomes auto-explicativos. 100 00:05:23,860 --> 00:05:27,370 Eles retornan certo se o carácter dado é maiúscula ou minúscula, 101 00:05:27,370 --> 00:05:28,740 respectivamente. 102 00:05:28,740 --> 00:05:33,770 Xa que son booleanos, son útil para usar como condicións. 103 00:05:33,770 --> 00:05:38,310 >> Se isalpha retorna certo, vai ter para cambiar o personaxe pola chave. 104 00:05:38,310 --> 00:05:43,750 Entón, imos abrir o ASCIIMath e facer un pouco de matemáticas ASCII. 105 00:05:43,750 --> 00:05:48,700 O uso é moi semellante ao do uso a César e leva nunha clave no 106 00:05:48,700 --> 00:05:50,870 liña de comandos. 107 00:05:50,870 --> 00:05:59,590 >> Se eu executar ASCIIMath 5, parece engadir Cinco a un, dándome a letra f, e 108 00:05:59,590 --> 00:06:01,260 mostrando o valor ASCII. 109 00:06:01,260 --> 00:06:04,090 Entón, imos dar un ollo no programa. 110 00:06:04,090 --> 00:06:11,820 >> Pode preguntar, aquí, por carta é un número enteiro, cando está 111 00:06:11,820 --> 00:06:14,330 claramente, tamén, unha carta. 112 00:06:14,330 --> 00:06:17,690 Acontece que os personaxes e enteiros son intercambiábeis. 113 00:06:17,690 --> 00:06:21,730 Ao poñer a letra A en un único comiñas, o enteiro pode almacenar 114 00:06:21,730 --> 00:06:25,390 o valor ASCII do capital A. Teña coidado, porén. 115 00:06:25,390 --> 00:06:27,150 Debe das roupas simples. 116 00:06:27,150 --> 00:06:31,260 Sen as comiñas simples, o compilador estaba a buscar unha variable 117 00:06:31,260 --> 00:06:35,510 chamado A, e non o personaxe. 118 00:06:35,510 --> 00:06:42,140 >> Entón eu podo engadir carta e unha clave, almacenando o suma das variables int resultado. 119 00:06:42,140 --> 00:06:47,740 Aínda resultado é do tipo de datos enteiro, a miña declaración printf utiliza o 120 00:06:47,740 --> 00:06:50,370 % C espazo reservado para os personaxes. 121 00:06:50,370 --> 00:06:54,530 Así, o programa imprime o carácter relacionado co resultado enteiro. 122 00:06:54,530 --> 00:07:00,400 E xa que impreso o número enteiro forma ben usando% d vemos 123 00:07:00,400 --> 00:07:02,110 o número ben. 124 00:07:02,110 --> 00:07:04,450 Entón, agora pode ver que nós tratar personaxes e 125 00:07:04,450 --> 00:07:06,980 números enteiros, e viceversa. 126 00:07:06,980 --> 00:07:12,205 >> Imos proba fóra ASCIIMath algúns máis veces a usar 25 como unha chave. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Estivemos coa letra z. 129 00:07:17,090 --> 00:07:19,750 Agora imos tratar de 26. 130 00:07:19,750 --> 00:07:25,600 Queremos chegar a letra a, mais en vez diso temos un soporte esquerdo. 131 00:07:25,600 --> 00:07:29,490 Entón, obviamente, só engadindo o clave para a carta non vai facer. 132 00:07:29,490 --> 00:07:32,780 Necesitamos descubrir unha fórmula para embrulhar todo o alfabeto, como o noso 133 00:07:32,780 --> 00:07:34,570 exemplo, no inicio fixo. 134 00:07:34,570 --> 00:07:38,520 >> A fórmula para o César cambio é como segue. 135 00:07:38,520 --> 00:07:42,750 c é igual p máis k modulo 26. 136 00:07:42,750 --> 00:07:46,040 Lembre que modulo é un instrumento útil operación que nos dá a restante 137 00:07:46,040 --> 00:07:49,880 de dividir un número por outro. 138 00:07:49,880 --> 00:07:54,870 Imos aplicar esta fórmula para a chaira carta de texto con unha chave de 2. 139 00:07:54,870 --> 00:08:01,810 O valor ASCII y é 89, que ofrécenos 91 modulo 26, 140 00:08:01,810 --> 00:08:03,690 o que equivale a 13 - 141 00:08:03,690 --> 00:08:08,740 definitivamente non é o valor ASCII de a, que é 67. 142 00:08:08,740 --> 00:08:12,810 >> Humor me agora e afastarse do Os valores ASCII para un índice alfabético 143 00:08:12,810 --> 00:08:18,690 onde A é cero e Z é 25, o que significa que Y é 24. 144 00:08:18,690 --> 00:08:25,830 24 + 2, módulo 6, dános 26, modulo 26, 0, que é o 145 00:08:25,830 --> 00:08:28,170 índice alfabético de un. 146 00:08:28,170 --> 00:08:32,980 Polo tanto, esta fórmula parece aplicarse ao índice alfabético de carta e 147 00:08:32,980 --> 00:08:34,960 non o seu valor ASCII. 148 00:08:34,960 --> 00:08:37,630 >> Pero comeza cos valores ASCII. 149 00:08:37,630 --> 00:08:41,650 E para imprimir o carácter cifrado, vai ter o seu valor ASCII tamén. 150 00:08:41,650 --> 00:08:46,400 Correspóndelle a vostede, entón, para descubrir como cambiar e cara atrás. 151 00:08:46,400 --> 00:08:49,850 >> Despois de descubrir a fórmula correcta a un personaxe, o único que hai que facer 152 00:08:49,850 --> 00:08:53,520 aplicarse a mesma fórmula para cada letra no texto - 153 00:08:53,520 --> 00:08:57,720 só se a letra está en orde alfabética, claro. 154 00:08:57,720 --> 00:09:02,360 E lembre de que precisa para preservar o caso, superior ou inferior, que é onde 155 00:09:02,360 --> 00:09:06,890 as funcións IsLower isupper e mencionado anteriormente virá a cadra. 156 00:09:06,890 --> 00:09:08,830 Pode ter dúas fórmulas - 157 00:09:08,830 --> 00:09:11,680 un para maiúsculas e un para minúsculas. 158 00:09:11,680 --> 00:09:18,420 Entón isupper un eMinusculo pode axudar determinar a fórmula que se aplica. 159 00:09:18,420 --> 00:09:22,460 >> Como aplica a fórmula para cada único carácter nunha cadea? 160 00:09:22,460 --> 00:09:25,910 Ben, unha cadea é só un matriz de caracteres. 161 00:09:25,910 --> 00:09:31,150 Así, pode acceder a cada personaxe, agrupación sobre cada personaxe do 162 00:09:31,150 --> 00:09:33,450 cordas en un loop for. 163 00:09:33,450 --> 00:09:37,550 En canto á condición de loop for, a función strlen, pola corda 164 00:09:37,550 --> 00:09:39,280 lonxitude, virá a cadra. 165 00:09:39,280 --> 00:09:44,020 Leva nunha cadea como entrada e devolve a lonxitude desta corda. 166 00:09:44,020 --> 00:09:49,250 Asegúrese de incluír a biblioteca dereita para utilizar a función lonxitude da corda. 167 00:09:49,250 --> 00:09:51,790 >> E aí tes o texto cifrado. 168 00:09:51,790 --> 00:09:53,260 O meu nome é o Zamyla. 169 00:09:53,260 --> 00:09:54,510 E [CODE falando]. 170 00:09:54,510 --> 00:10:02,944