1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: Felicitaciones Ha terminado el 3 00:00:11,270 --> 00:00:13,200 primer par de programas en C. 4 00:00:13,200 --> 00:00:16,379 Sé que su primera incursión en Sintaxis de C puede ser desalentador. 5 00:00:16,379 --> 00:00:20,060 Pero te aseguro que al final de la Por supuesto, usted será capaz de mirar a la 6 00:00:20,060 --> 00:00:23,870 primer par de tareas y completarlos en cuestión de minutos. 7 00:00:23,870 --> 00:00:27,830 >> Ahora que usted está consiguiendo más familiar con la sintaxis, vamos a llegar a César. 8 00:00:27,830 --> 00:00:31,720 En Caesar, el usuario deberá presentar una clave de entero como una línea de comandos 9 00:00:31,720 --> 00:00:35,300 argumento, a continuación, introduzca una llanura mensaje de texto en el indicador. 10 00:00:35,300 --> 00:00:38,050 El programa entonces cifrar el texto e imprimir 11 00:00:38,050 --> 00:00:40,020 su mensaje de texto cifrado. 12 00:00:40,020 --> 00:00:42,980 >> El cifrado de César es bastante simple. 13 00:00:42,980 --> 00:00:46,455 Cambie cada letra, en su texto plano, por la clave. 14 00:00:46,455 --> 00:00:49,220 Como resultado de ello, es también bastante inseguro. 15 00:00:49,220 --> 00:00:53,850 Pero la implementación de César introducirá nosotros ASCIIMath y matriz de datos 16 00:00:53,850 --> 00:00:54,460 estructuras. 17 00:00:54,460 --> 00:00:57,510 Vamos a llegar a lo más complejo sistemas de cifrado más tarde. 18 00:00:57,510 --> 00:01:01,680 Con una llave de César 2, la letra A en texto plano estaría representado por 19 00:01:01,680 --> 00:01:07,580 la letra C en el texto cifrado porque C es de dos letras después de A. B serían 20 00:01:07,580 --> 00:01:12,450 representada por D y C de E. Hacia el final del alfabeto, W es 21 00:01:12,450 --> 00:01:18,550 representado por Y, y X por Z. Pero Y no tiene dos letras después de que, por lo 22 00:01:18,550 --> 00:01:21,070 las cifras se envuelve alrededor del alfabeto. 23 00:01:21,070 --> 00:01:27,190 Y en texto plano se representa así por A en texto cifrado, y Z por B. Se puede 24 00:01:27,190 --> 00:01:32,080 ayudará a ver el Caesar Cypher como una rueda alfabeto continua. 25 00:01:32,080 --> 00:01:35,760 >> Para cifrar su texto, el usuario entrarán dos argumentos 26 00:01:35,760 --> 00:01:37,090 en la línea de comandos - 27 00:01:37,090 --> 00:01:40,010 . / César seguida de una tecla. 28 00:01:40,010 --> 00:01:44,710 Como siempre, no podemos confiar en el usuario completamente para entrar de entrada que crea 29 00:01:44,710 --> 00:01:45,800 sentido para nuestro programa. 30 00:01:45,800 --> 00:01:50,670 Así que vamos a tener que validar su entrada de línea de comandos. 31 00:01:50,670 --> 00:01:57,285 >> En lugar de utilizar void main int, estamos utilizando int main, int argc, argv cadena. 32 00:01:57,285 --> 00:02:01,730 El argc variable entera representa el número de argumentos pasados ​​a 33 00:02:01,730 --> 00:02:02,880 la línea de comandos. 34 00:02:02,880 --> 00:02:09,070 Y argv es un array, o piensan que es una lista de los argumentos pasados ​​pulg 35 00:02:09,070 --> 00:02:12,000 >> Así que para César, ¿cómo validamos entrada del usuario? 36 00:02:12,000 --> 00:02:15,870 Bueno, sólo deberían estar entrando dos argumentos de línea de comandos - 37 00:02:15,870 --> 00:02:18,150 . / César y una clave. 38 00:02:18,150 --> 00:02:22,340 Así que si argc no es 2, lo que significa que que o bien se olvidó la llave y sólo 39 00:02:22,340 --> 00:02:27,230 introducido. / césar, o entrado varias claves. 40 00:02:27,230 --> 00:02:29,770 >> Si este es el caso, entonces usted desee imprimir las instrucciones 41 00:02:29,770 --> 00:02:30,910 y salir del programa. 42 00:02:30,910 --> 00:02:34,320 Tendrán que volver a intentarlo desde la línea de comandos. 43 00:02:34,320 --> 00:02:37,430 Pero incluso si argc es 2, se le que comprobar si 44 00:02:37,430 --> 00:02:39,100 le dará una clave válida. 45 00:02:39,100 --> 00:02:40,730 Para César, que necesita un entero. 46 00:02:40,730 --> 00:02:43,260 Pero argv es un array de cadenas. 47 00:02:43,260 --> 00:02:46,490 ¿Cómo se accede a esa llave? 48 00:02:46,490 --> 00:02:47,850 >> Un rápido vistazo a las matrices - 49 00:02:47,850 --> 00:02:51,410 estructuras de datos que tienen múltiples valores del mismo tipo de datos. 50 00:02:51,410 --> 00:02:55,350 Las entradas están indexados a cero, lo que significa que el primer elemento es el índice cero 51 00:02:55,350 --> 00:03:00,260 y el último elemento está en el tamaño del índice menos 1, donde el tamaño es el número de 52 00:03:00,260 --> 00:03:02,850 elementos de la matriz. 53 00:03:02,850 --> 00:03:07,380 >> Si declaré un nuevo buzón matriz de cadenas de longitud 3, visualmente, que 54 00:03:07,380 --> 00:03:08,570 se parece a esto. 55 00:03:08,570 --> 00:03:11,520 Tres contenedores de cadenas , Al lado del otro. 56 00:03:11,520 --> 00:03:15,445 Para acceder a cualquier elemento, escriba el nombre de la matriz y luego indicar 57 00:03:15,445 --> 00:03:18,080 el índice entre corchetes. 58 00:03:18,080 --> 00:03:21,610 Aquí, voy a asignar un valor a cada elemento, al igual que haría con cualquier 59 00:03:21,610 --> 00:03:24,310 otra variable de cadena. 60 00:03:24,310 --> 00:03:29,020 >> Así que para tener acceso a nuestros argumentos de la línea de comandos, todo lo que tenemos que hacer es acceder 61 00:03:29,020 --> 00:03:31,690 el elemento de la derecha de la matriz argv. 62 00:03:31,690 --> 00:03:37,360 Si el usuario ha introducido. / Equipo de despegue Rocket en el terminal, argv 0 sería 63 00:03:37,360 --> 00:03:38,950 ser. / despegue. 64 00:03:38,950 --> 00:03:45,010 argv habría equipo, y arg2 sería cohete. 65 00:03:45,010 --> 00:03:47,670 >> Ahora que podemos acceder a la llave, todavía tenemos que hacer 66 00:03:47,670 --> 00:03:49,040 asegurarse de que es correcta. 67 00:03:49,040 --> 00:03:51,060 Tenemos que convertirlo en un entero. 68 00:03:51,060 --> 00:03:54,680 Pero no podemos simplemente lanzar como que hemos hecho anteriormente. 69 00:03:54,680 --> 00:03:58,800 Por suerte, la A a la función Y se encarga de esto para nosotros e incluso devuelve 0 70 00:03:58,800 --> 00:04:02,110 si la cadena no se puede convertir en un número entero. 71 00:04:02,110 --> 00:04:04,450 Todo depende de ti, sin embargo, a decir ¿por qué el usuario no lo harás 72 00:04:04,450 --> 00:04:06,220 dejar que el programa continúe. 73 00:04:06,220 --> 00:04:10,710 Almacenar el resultado de la A a la Y en un entero, y ahí lo tienes tu llave. 74 00:04:10,710 --> 00:04:12,070 La siguiente parte es simple. 75 00:04:12,070 --> 00:04:15,940 Preguntar al usuario en su texto, que será de tipo de datos de cadena. 76 00:04:15,940 --> 00:04:18,339 Por suerte para nosotros, todo el usuario introduce cuerdas son válidas. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Ahora que tenemos todas las aportaciones necesarias desde el usuario, es el momento para nosotros para 79 00:04:24,760 --> 00:04:26,520 cifrar su mensaje. 80 00:04:26,520 --> 00:04:29,200 El concepto de Caesar es simple suficiente para entender. 81 00:04:29,200 --> 00:04:33,750 Pero ¿cómo sabe el ordenador que cartas vienen uno tras otro? 82 00:04:33,750 --> 00:04:36,100 >> Aquí es donde la tabla ASCII entra en juego 83 00:04:36,100 --> 00:04:39,420 Cada personaje tiene un número entero número asociado con ella. 84 00:04:39,420 --> 00:04:41,380 Capital es de 65. 85 00:04:41,380 --> 00:04:43,310 Capital B es 66. 86 00:04:43,310 --> 00:04:45,260 Minúsculas a es 97. 87 00:04:45,260 --> 00:04:47,590 Minúsculas b es de 98. 88 00:04:47,590 --> 00:04:50,770 Pero los personajes no se limitan a sólo números alfabéticos. 89 00:04:50,770 --> 00:04:56,020 Por ejemplo, el símbolo @ es el número ASCII 64. 90 00:04:56,020 --> 00:04:59,690 >> Antes de abordar toda la cadena, vamos a suponer que sólo tenemos que cambiar 91 00:04:59,690 --> 00:05:01,220 un carácter. 92 00:05:01,220 --> 00:05:04,640 Bueno, lo único que queremos desplazar real letras en el texto plano, no 93 00:05:04,640 --> 00:05:06,020 caracteres o números. 94 00:05:06,020 --> 00:05:09,100 Así que lo primero que vamos a querer cheque es si el personaje está en 95 00:05:09,100 --> 00:05:10,430 el alfabeto. 96 00:05:10,430 --> 00:05:14,460 >> El isalpha función hace por nosotros y devuelve un Boolean - 97 00:05:14,460 --> 00:05:18,570 cierto si los personajes es una carta, false en caso contrario. 98 00:05:18,570 --> 00:05:22,270 Otras dos funciones son útiles isupper y islower, con 99 00:05:22,270 --> 00:05:23,860 nombres fáciles de entender. 100 00:05:23,860 --> 00:05:27,370 Devuelven true si el carácter dado es mayúscula o minúscula, 101 00:05:27,370 --> 00:05:28,740 respectivamente. 102 00:05:28,740 --> 00:05:33,770 Puesto que son booleanos, son útil para utilizar como condiciones. 103 00:05:33,770 --> 00:05:38,310 >> Si isalpha devuelve true, tendrá para cambiar el carácter con la tecla. 104 00:05:38,310 --> 00:05:43,750 Así que vamos a abrir a ASCIIMath y hacer algunos cálculos ASCII. 105 00:05:43,750 --> 00:05:48,700 El uso es muy similar a la de uso para César y toma en clave en el 106 00:05:48,700 --> 00:05:50,870 línea de comandos. 107 00:05:50,870 --> 00:05:59,590 >> Si me quedo ASCIIMath 5, parece añadir 5 a una, y me da la letra f, y 108 00:05:59,590 --> 00:06:01,260 muestra el valor ASCII. 109 00:06:01,260 --> 00:06:04,090 Así que vamos a echar un vistazo al programa. 110 00:06:04,090 --> 00:06:11,820 >> Usted podría preguntarse, aquí, ¿por qué letra es un número entero, cuando es 111 00:06:11,820 --> 00:06:14,330 claramente, también, una carta. 112 00:06:14,330 --> 00:06:17,690 Resulta que los personajes y enteros son intercambiables. 113 00:06:17,690 --> 00:06:21,730 Al poner la letra A en un solo entre comillas, el entero puede almacenar 114 00:06:21,730 --> 00:06:25,390 el valor ASCII del capital A. Tenga cuidado, sin embargo. 115 00:06:25,390 --> 00:06:27,150 Usted necesita las ropas sueltas. 116 00:06:27,150 --> 00:06:31,260 Sin las comillas simples, la compilador buscaría una variable 117 00:06:31,260 --> 00:06:35,510 Un llamado, y no el carácter. 118 00:06:35,510 --> 00:06:42,140 >> Luego agrego carta y una clave, el almacenamiento de la resumir en el int variables de resultado. 119 00:06:42,140 --> 00:06:47,740 Aunque resultado es de tipo de datos entero, mi sentencia printf usa el 120 00:06:47,740 --> 00:06:50,370 % C marcador de posición para los caracteres. 121 00:06:50,370 --> 00:06:54,530 Así el programa imprime el carácter asociado con el resultado de número entero. 122 00:06:54,530 --> 00:07:00,400 Y ya que imprimimos el número entero formar y usar% d, vemos 123 00:07:00,400 --> 00:07:02,110 el número así. 124 00:07:02,110 --> 00:07:04,450 Así que ahora usted puede ver que hemos tratar a los personajes y 125 00:07:04,450 --> 00:07:06,980 números enteros, y viceversa. 126 00:07:06,980 --> 00:07:12,205 >> Vamos a probar a cabo ASCIIMath algunos más veces utilizando 25 como una clave. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Recibimos la letra z. 129 00:07:17,090 --> 00:07:19,750 Ahora tratamos 26. 130 00:07:19,750 --> 00:07:25,600 Queremos obtener la letra a, pero En su lugar tenemos una escuadra izquierda. 131 00:07:25,600 --> 00:07:29,490 Así que, obviamente, sólo añadir la clave de la carta no es suficiente. 132 00:07:29,490 --> 00:07:32,780 Tenemos que encontrar una fórmula para envolver todo el alfabeto, como nuestro 133 00:07:32,780 --> 00:07:34,570 ejemplo en el principio hizo. 134 00:07:34,570 --> 00:07:38,520 >> Una fórmula para el César cambio es el siguiente. 135 00:07:38,520 --> 00:07:42,750 c es igual a P Plus k módulo 26. 136 00:07:42,750 --> 00:07:46,040 Recuerde que es un modulo de utilidad operación que nos da el resto 137 00:07:46,040 --> 00:07:49,880 de dividir un número por otro. 138 00:07:49,880 --> 00:07:54,870 Vamos a aplicar esta fórmula a la llanura carta de texto con una clave de 2. 139 00:07:54,870 --> 00:08:01,810 El valor ASCII de y es 89, lo que nos da 91 módulo 26, 140 00:08:01,810 --> 00:08:03,690 que es igual a 13 - 141 00:08:03,690 --> 00:08:08,740 definitivamente no es el valor ASCII de una, que es 67. 142 00:08:08,740 --> 00:08:12,810 >> Humor mí ahora y alejarse de la Valores ASCII a un índice alfabético 143 00:08:12,810 --> 00:08:18,690 donde A es cero y Z es 25, lo que significa que Y es 24. 144 00:08:18,690 --> 00:08:25,830 24 más 2, módulo 6, nos da 26, módulo 26, 0, que es el 145 00:08:25,830 --> 00:08:28,170 índice alfabético de a. 146 00:08:28,170 --> 00:08:32,980 Así que esta fórmula parece aplicarse a la índice alfabético de la letra y 147 00:08:32,980 --> 00:08:34,960 no su valor ASCII. 148 00:08:34,960 --> 00:08:37,630 >> Pero usted comienza con valores ASCII. 149 00:08:37,630 --> 00:08:41,650 Y para imprimir el carácter de texto cifrado, usted necesitará su valor ASCII también. 150 00:08:41,650 --> 00:08:46,400 Todo depende de usted, entonces, averiguar cómo cambiar una y otra. 151 00:08:46,400 --> 00:08:49,850 >> Una vez que averiguar la fórmula correcta para un carácter, todo lo que tiene que hacer 152 00:08:49,850 --> 00:08:53,520 es aplicar la misma fórmula a todos los letra en el texto sin formato - 153 00:08:53,520 --> 00:08:57,720 sólo si esa carta es alfabético, por supuesto. 154 00:08:57,720 --> 00:09:02,360 Y recuerde que usted necesita para preservar el caso, superior o inferior, que es donde 155 00:09:02,360 --> 00:09:06,890 las funciones isupper y islower mencionado anteriormente será muy útil. 156 00:09:06,890 --> 00:09:08,830 Es posible que tenga dos fórmulas - 157 00:09:08,830 --> 00:09:11,680 uno para las letras mayúsculas y uno para minúsculas. 158 00:09:11,680 --> 00:09:18,420 Así isupper un esMenor le ayudará a determinar cuál es la fórmula a aplicar. 159 00:09:18,420 --> 00:09:22,460 >> ¿Cómo se aplica la fórmula a cada carácter individual en una cadena? 160 00:09:22,460 --> 00:09:25,910 Bueno, una cadena es sólo una matriz de caracteres. 161 00:09:25,910 --> 00:09:31,150 Así que usted puede acceder a cada personaje por agrupando más de todos los personajes en el 162 00:09:31,150 --> 00:09:33,450 cadena en un bucle for. 163 00:09:33,450 --> 00:09:37,550 En cuanto a la condición de su bucle, el strlen función, por cadena 164 00:09:37,550 --> 00:09:39,280 longitud, será muy útil. 165 00:09:39,280 --> 00:09:44,020 Se necesita una cadena como entrada y devuelve la longitud de esa cadena. 166 00:09:44,020 --> 00:09:49,250 Asegúrese de incluir la biblioteca de derecho utilizar la función de longitud de la cadena. 167 00:09:49,250 --> 00:09:51,790 >> Y ahí tienes tu texto cifrado. 168 00:09:51,790 --> 00:09:53,260 Mi nombre es el Zamyla. 169 00:09:53,260 --> 00:09:54,510 Y [HABLAR CODE]. 170 00:09:54,510 --> 00:10:02,944