1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Tutorial - Set Problema 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Harvard University] 3 00:00:05,170 --> 00:00:07,490 [Esta es CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Está bien. Hola a todos y bienvenidos a Tutorial 2. 5 00:00:10,750 --> 00:00:14,330 En primer lugar, quiero felicitar a usted por terminar conjunto de procesadores 1. 6 00:00:14,330 --> 00:00:18,140 Sé que podría haber sido un poco difícil para algunos de ustedes, 7 00:00:18,140 --> 00:00:20,460 podría haber sido su primer programa de ordenador que usted escribió, 8 00:00:20,460 --> 00:00:24,500 pero recuerda que al final de esto, cuando uno mira hacia atrás al final del semestre, 9 00:00:24,500 --> 00:00:29,820 podrás ver pset 1 y que va a decir, "Hey, yo podría haber hecho que en 5 minutos". 10 00:00:29,820 --> 00:00:35,700 Así que conoce y confía en que a finales de este siempre encontrarás un conjunto de procesadores muy simples. 11 00:00:35,700 --> 00:00:40,640 Pero por ahora es un gran logro, y felicidades por conseguir que se hagan. 12 00:00:40,640 --> 00:00:44,010 Ahora, también una nota rápida antes de entrar en la carne del tutorial. 13 00:00:44,010 --> 00:00:48,340 Sólo quiero hacer una nota rápida que a veces no tienen tiempo suficiente 14 00:00:48,340 --> 00:00:52,500 durante las visitas guiadas para ir a través de todas las formas posibles de hacer el conjunto de problemas 15 00:00:52,500 --> 00:00:56,140 y en vez sólo tal vez centrarse en 1 o 2 tipos de implementaciones, 16 00:00:56,140 --> 00:00:57,750 maneras que usted puede hacer esto. 17 00:00:57,750 --> 00:01:01,970 Pero eso no quiere decir que está prohibido hacer de otra manera. 18 00:01:01,970 --> 00:01:05,980 A menudo, como ocurre con la informática, muchas maneras de hacer las cosas, 19 00:01:05,980 --> 00:01:12,190 y por lo que definitivamente no dude en utilizar un tipo diferente de solución de lo que pudo haber presentado. 20 00:01:12,190 --> 00:01:14,520 [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. Una sección de preguntas - 1. César - 2. Vigenére] 22 00:01:17,160 --> 00:01:20,650 Está bien. Así problema 2: Crypto es una diversión. 23 00:01:20,650 --> 00:01:24,500 Una vez más, con cada conjunto de procesadores usted comenzará con una sección de preguntas 24 00:01:24,500 --> 00:01:29,600 que va a llevar a cabo en sus secciones con su compañero de enseñanza asignado. 25 00:01:29,600 --> 00:01:31,670 No vamos a ir a través de estos sobre el tutorial, 26 00:01:31,670 --> 00:01:35,100 pero sin duda le ayudará a completar el conjunto de procesadores. 27 00:01:35,100 --> 00:01:38,100 Así que la primera parte del conjunto problema es César. 28 00:01:38,100 --> 00:01:43,470 Y así, en César alguien le pase una tecla con un número entero, 29 00:01:43,470 --> 00:01:48,420 y usted cifrar una cadena de texto que le proporcionan 30 00:01:48,420 --> 00:01:50,670 y devolverles algo encriptado. 31 00:01:50,670 --> 00:01:56,050 Si alguien vio una historia de Navidad, hay un ejemplo de eso allí. 32 00:01:56,050 --> 00:01:59,090 Entonces la segunda parte del conjunto de problemas es Vigenére, 33 00:01:59,090 --> 00:02:01,790 que es una técnica de codificación más avanzada. 34 00:02:01,790 --> 00:02:05,640 Así que vamos a cifrar un texto, 35 00:02:05,640 --> 00:02:09,600 excepto que en lugar de sólo un único entero, estamos realmente va a codificar 36 00:02:09,600 --> 00:02:13,340 con una palabra clave que el usuario nos proporcionará. 37 00:02:16,270 --> 00:02:22,090 Bien, la primera herramienta en la caja de herramientas de hoy es en realidad va a estar actualizando el aparato. 38 00:02:22,090 --> 00:02:26,430 En el panel de discusión veríamos cosas como: "¿Por qué no funciona?" 39 00:02:26,430 --> 00:02:28,110 "¿Por qué no se somete 50 trabajo?" 40 00:02:28,110 --> 00:02:31,830 y muchas veces la solución es realmente sólo para actualizar el dispositivo. 41 00:02:31,830 --> 00:02:36,730 Así que si usted acaba de ejecutar en una ventana de terminal en su aparato sudo yum-y - 42 00:02:36,730 --> 00:02:40,040 eso es una bandera diciendo que sí, actualizar todo - actualización, 43 00:02:40,040 --> 00:02:42,280 a continuación, el aparato se actualizará si es necesario. 44 00:02:42,280 --> 00:02:46,960 Y no está de más si ya están en la versión más reciente del dispositivo. 45 00:02:46,960 --> 00:02:51,280 A continuación, se acaba de decir no hay actualizaciones nuevas disponibles y usted puede seguir trabajando a lo largo. 46 00:02:51,280 --> 00:02:55,800 Pero esto es bueno para ejecutar incluso cada vez que abra el aparato 47 00:02:55,800 --> 00:02:57,140 porque estamos todavía muy - 48 00:02:57,140 --> 00:03:00,320 a veces, si entramos en un error - repararlo en el aparato. 49 00:03:00,320 --> 00:03:03,180 Así que asegúrate de que tienes la versión más reciente del dispositivo 50 00:03:03,180 --> 00:03:07,710 actualizar y ejecutar que hay. 51 00:03:07,710 --> 00:03:14,360 Está bien. Así que ya que estamos tratando con letras y cambiante, cifrado cosas, 52 00:03:14,360 --> 00:03:20,410 vamos a querer realmente a convertirse en el mejor amigo de nuestra tabla ASCII. 53 00:03:20,410 --> 00:03:24,350 Los hay numerosos en línea, si usted encuentra. Tal vez incluso hacer su propio. 54 00:03:24,350 --> 00:03:29,950 Básicamente, con cada letra y cada número y el carácter de cada 55 00:03:29,950 --> 00:03:32,210 hay un número asociado con ellos, 56 00:03:32,210 --> 00:03:38,670 y lo que es bueno para ver a sus valores ASCII junto con la carta actual. 57 00:03:38,670 --> 00:03:42,310 Que sin duda le ayudará en el conjunto de problemas. 58 00:03:42,310 --> 00:03:45,750 Una cosa que realmente me ayudó en este conjunto de problemas era realmente imprimirlo, 59 00:03:45,750 --> 00:03:48,380 y como yo estaba pasando, en realidad se basaría en ella, 60 00:03:48,380 --> 00:03:51,150 escribir: "Si esto tiene que ir para allá, entonces ..." 61 00:03:51,150 --> 00:03:55,270 Tipo de dibujar sobre ella y marcar para arriba, se convierten en mejores amigos con su tabla ASCII. 62 00:03:57,240 --> 00:04:00,750 Entonces tenemos alguna herramienta más a nuestra disposición. 63 00:04:00,750 --> 00:04:03,750 Esta vez, en lugar de realmente preguntar al usuario por todos sus aportes 64 00:04:03,750 --> 00:04:05,230 vamos a hacer una combinación. 65 00:04:05,230 --> 00:04:06,880 Nosotros vamos a solicitar alguna entrada, 66 00:04:06,880 --> 00:04:11,350 pero también vamos a utilizar sólo los argumentos de línea de comandos. 67 00:04:11,350 --> 00:04:15,600 Así que cuando se ejecute su programa, por lo general le dicen. / Hola, por ejemplo, 68 00:04:15,600 --> 00:04:17,310 si su programa era hello.c. 69 00:04:17,310 --> 00:04:22,500 Pero esta vez, en vez de decir eso, se puede poner en palabras, argumentos después. 70 00:04:22,500 --> 00:04:27,210 Así que vamos a usar todo lo que pase a nosotros como sus aportaciones, así, 71 00:04:27,210 --> 00:04:31,720 así que ir más allá de simplemente preguntarle por entero, sino también con argumentos de línea de comandos. 72 00:04:31,720 --> 00:04:36,590 Y luego vamos a entrar en arrays y cadenas, que vamos a estar usando mucho también. 73 00:04:41,460 --> 00:04:44,810 Esto es sólo un ejemplo de una tabla ASCII mini. 74 00:04:44,810 --> 00:04:48,460 Como ya he dicho, cada letra corresponde a un número, 75 00:04:48,460 --> 00:04:52,510 y así familiarizarse con eso. Esto será muy útil. 76 00:04:52,510 --> 00:04:55,610 Y después, cuando empezamos a hacer algunas ASCIIMath trata de los números - 77 00:04:55,610 --> 00:05:00,110 sumar, restar ellos - entonces definitivamente bueno para referirse a esta tabla. 78 00:05:02,860 --> 00:05:06,920 Así que aquí está un ejemplo de un cifrado César - algo que usted pudo haber jugado. 79 00:05:06,920 --> 00:05:11,190 Es sólo una rueda. Esencialmente, existe un alfabeto exterior y entonces hay un alfabeto interior. 80 00:05:11,190 --> 00:05:15,290 Así que aquí es un ejemplo de la cifra de César, pero con una tecla de 0. 81 00:05:15,290 --> 00:05:21,540 Esencialmente, A está alineado con A, B está alineado con B, todo el camino hasta Z. 82 00:05:21,540 --> 00:05:26,590 Pero luego dicen que queríamos una llave de 3, por ejemplo. 83 00:05:26,590 --> 00:05:33,280 Luego se gira la rueda interior de modo que ahora se alinea con una D, etc 84 00:05:33,280 --> 00:05:35,250 Y esto es básicamente lo que vamos a hacer. 85 00:05:35,250 --> 00:05:38,340 No tenemos una rueda, pero lo que vamos a hacer es hacer que nuestro programa 86 00:05:38,340 --> 00:05:44,490 Este tipo de cambio del alfabeto junto con nosotros una cierta cantidad de números. 87 00:05:44,490 --> 00:05:48,650 Así que como he dicho antes, vamos a estar tratando con argumentos de línea de comandos 88 00:05:48,650 --> 00:05:50,390 así como conseguir un número entero. 89 00:05:50,390 --> 00:05:55,050 Así que la forma de que el usuario ejecute el programa de César es diciendo. / Caesar 90 00:05:55,050 --> 00:05:58,090 y después de introducir un número después de eso. 91 00:05:58,090 --> 00:06:01,130 Y ese número representa la clave, el cambio, 92 00:06:01,130 --> 00:06:06,740 ¿cuántas veces vas a estar girando la rueda interior de su sistema de cifrado César. 93 00:06:06,740 --> 00:06:08,390 Y por lo que veo aquí un ejemplo. 94 00:06:08,390 --> 00:06:14,550 Si entramos en las letras de la A a la L en nuestro sistema de cifrado César, 95 00:06:14,550 --> 00:06:19,520 entonces lo haría a través de la entrada D O porque es cada letra desplazado más de 3 veces, 96 00:06:19,520 --> 00:06:22,080 al igual que el ejemplo de la rueda que te mostré. 97 00:06:22,080 --> 00:06:25,300 Así que si has introducido, por ejemplo, trata CS50! 98 00:06:25,300 --> 00:06:27,960 entonces también sería mover todas las cartas. 99 00:06:27,960 --> 00:06:31,040 Y eso es una cosa importante en tanto César y Vigenére 100 00:06:31,040 --> 00:06:34,890 es que vamos a pasar por alto las cartas no lo son. 101 00:06:34,890 --> 00:06:39,160 Así que todos los espacios, personajes, etc, números, vamos a mantenerlos igual. 102 00:06:39,160 --> 00:06:42,920 Sólo vamos a cambiar las letras en este caso. 103 00:06:42,920 --> 00:06:45,870 Así que como ves en la rueda, sólo tenemos las cartas de que disponemos, 104 00:06:45,870 --> 00:06:50,150 por lo que sólo quiere cambiar las letras y cifrar las letras. 105 00:06:51,370 --> 00:06:56,720 Así que lo primero que debe hacer, hemos visto que el uso de César en el problema 2 106 00:06:56,720 --> 00:07:05,280 César es ejecutar y escriba un número cuando se ejecuta en el terminal. 107 00:07:05,280 --> 00:07:10,940 Así que lo que tenemos que hacer es conseguir de algún modo que la clave y acceder a ella. 108 00:07:10,940 --> 00:07:14,730 Y por lo que queremos ver de alguna manera va a ser el argumento de línea de comandos segunda. 109 00:07:14,730 --> 00:07:20,950 La primera de ellas va a ser. / César, y la próxima va a ser el número clave. 110 00:07:22,190 --> 00:07:29,200 Así que antes de tener int main (void) para iniciar nuestros programas en C. 111 00:07:29,200 --> 00:07:31,790 Vamos a pelar una capa un poco 112 00:07:31,790 --> 00:07:34,720 y ver realmente que en vez de pasar en vacío a nuestra función principal 113 00:07:34,720 --> 00:07:37,920 en realidad estamos tratando con dos parámetros. 114 00:07:37,920 --> 00:07:44,070 Tenemos un int argc llamada y luego una matriz de cadenas llamado argv. 115 00:07:44,070 --> 00:07:46,030 Así argc es un número entero, 116 00:07:46,030 --> 00:07:49,640 y representa el número de argumentos pasados ​​a tu programa. 117 00:07:49,640 --> 00:07:53,590 Y entonces argv es en realidad la lista de los argumentos pasados. 118 00:07:53,590 --> 00:08:00,820 Todos los argumentos son cadenas, y así argv representa una matriz, una lista de cadenas. 119 00:08:01,830 --> 00:08:03,990 Vamos a hablar acerca de las matrices un poco. 120 00:08:03,990 --> 00:08:05,940 Las matrices son esencialmente una estructura de datos nueva. 121 00:08:05,940 --> 00:08:09,660 Tenemos enteros, hemos dobles, contamos con cuerdas, y ahora tenemos las matrices. 122 00:08:09,660 --> 00:08:13,820 Las matrices son estructuras de datos que pueden almacenar varios valores del mismo tipo, 123 00:08:13,820 --> 00:08:18,320 tan esencialmente, una lista de cualquier tipo que desee. 124 00:08:18,320 --> 00:08:24,400 Básicamente, si usted quiere una lista de números enteros, todo en una variable, 125 00:08:24,400 --> 00:08:29,090 a continuación, debe crear una nueva variable que es de tipo array int. 126 00:08:29,090 --> 00:08:34,450 Así que las matrices son cero indizada, lo que significa que el primer elemento de la matriz está en el índice 0. 127 00:08:34,450 --> 00:08:41,799 Si la matriz es de longitud 4, como en este ejemplo, entonces su último elemento sería en el índice 3, 128 00:08:41,799 --> 00:08:44,810 que es 4 - 1. 129 00:08:45,940 --> 00:08:48,420 Así que para crear la matriz, usted haría algo como esto. 130 00:08:48,420 --> 00:08:51,440 Digamos que usted quería una doble hilera. 131 00:08:51,440 --> 00:08:56,520 Esto se aplica a cualquier tipo de tipo de datos, sin embargo. 132 00:08:56,520 --> 00:09:00,210 Así que dices que quieres una doble hilera. Digamos que usted quiere llamarlo buzón. 133 00:09:00,210 --> 00:09:04,760 Al igual que usted podría inicializar cualquier otra doble, 134 00:09:04,760 --> 00:09:09,760 te diría doble y luego el nombre, pero esta vez ponemos los corchetes, 135 00:09:09,760 --> 00:09:13,570 y luego el número no será la longitud de la matriz. 136 00:09:13,570 --> 00:09:16,840 Tenga en cuenta que en las matrices nunca podemos cambiar la longitud, 137 00:09:16,840 --> 00:09:21,230 por lo que siempre hay que definir y elegir cuántas cajas, 138 00:09:21,230 --> 00:09:25,440 cuántos valores de la matriz se va a celebrar. 139 00:09:25,440 --> 00:09:31,820 Así que para establecer diferentes valores en la matriz, usted va a utilizar esta sintaxis siguiente, 140 00:09:31,820 --> 00:09:33,200 como se ve en la diapositiva. 141 00:09:33,200 --> 00:09:37,620 Tiene 0 Índice de buzón se establece en 1,2, 142 00:09:37,620 --> 00:09:42,180 Índice de buzón 1 set a 2,4, etc 143 00:09:42,180 --> 00:09:47,910 Así que ahora que hemos revisado arrays un poco, vamos a volver a argc y argv. 144 00:09:47,910 --> 00:09:52,220 Sabemos que argv es ahora una matriz de cadenas. 145 00:09:52,220 --> 00:09:55,080 Así, cuando un usuario pasa - dicen que están ejecutando un programa - 146 00:09:55,080 --> 00:09:58,740 que dicen. / hola David Malan, 147 00:09:58,740 --> 00:10:05,160 lo que el programa va a hacer por usted ya es en realidad llegar a lo argc y argv son. 148 00:10:05,160 --> 00:10:07,620 Así que usted no tiene que preocuparse por eso. 149 00:10:07,620 --> 00:10:14,370 Argc en este caso sería de 3 ya que considera tres palabras distintas separadas por espacios. 150 00:10:14,370 --> 00:10:18,850 Y así, entonces la matriz, en este caso, el primer índice sería. / Hello, 151 00:10:18,850 --> 00:10:21,770 la siguiente David, la siguiente Malan. 152 00:10:21,770 --> 00:10:25,640 ¿Alguien ve enseguida cuál es la relación entre argv, 153 00:10:25,640 --> 00:10:28,990  la matriz y argc es? 154 00:10:32,820 --> 00:10:38,090 Si. Vamos a llegar a eso en un ejemplo en args.c. 155 00:10:38,090 --> 00:10:42,880 Vamos a ver si podemos sacar provecho de la relación entre la 2. 156 00:10:42,880 --> 00:10:46,550 Aquí usted puede encontrar que en el aparato la aplicación por defecto 157 00:10:46,550 --> 00:10:49,450 para abrir archivos. c es a veces Emacs. 158 00:10:49,450 --> 00:10:54,660 Pero queremos tratar con gedit, así que lo que usted puede hacer es hacer clic derecho sobre el archivo de C, 159 00:10:54,660 --> 00:11:04,580 vaya a Propiedades, Abrir con y, a continuación, elija gedit, en Establecer como predeterminado, 160 00:11:04,580 --> 00:11:13,020 y ahora su programa debe abrir gedit en lugar de Emacs. 161 00:11:14,710 --> 00:11:16,290 Perfecto. 162 00:11:17,120 --> 00:11:25,520 Así que aquí tengo un programa que quiero imprimir cada argumento de la línea de comandos. 163 00:11:25,520 --> 00:11:32,050 Así que lo que el usuario introduce, quiero esencialmente devolverlo de nuevo a ellos en una nueva línea. 164 00:11:32,050 --> 00:11:36,710 Entonces, ¿qué es una estructura que podemos usar para iterar sobre algo - 165 00:11:36,710 --> 00:11:40,380 algo que probablemente usado en su conjunto de procesadores 1? 166 00:11:40,380 --> 00:11:45,840 Si quieres ir a través de un número establecido de las cosas? >> [Estudiante] Para bucle. 167 00:11:45,840 --> 00:11:48,910 Para bucle. Exactamente. Así que vamos a empezar con el bucle for. 168 00:11:48,910 --> 00:11:56,900 Tenemos para int i = 0. Vamos a empezar con una variable de inicialización estándar. 169 00:11:56,900 --> 00:12:02,370 Voy a salir de la condición de un conjunto y luego decir i + +, vamos a hacer las cosas allí. 170 00:12:02,370 --> 00:12:04,090 Está bien. 171 00:12:04,090 --> 00:12:11,590 Así que pensando en volver a argv, si argv es la lista de argumentos pasados ​​al programa 172 00:12:11,590 --> 00:12:15,380 y argc es el número de argumentos en el programa, 173 00:12:15,380 --> 00:12:21,280 entonces eso significa que argc es esencialmente la longitud de argv, derecho, 174 00:12:21,280 --> 00:12:28,970 porque no va a haber tantos argumentos como el valor de argc. 175 00:12:28,970 --> 00:12:35,910 Así que si queremos iterar sobre cada elemento de argv, 176 00:12:35,910 --> 00:12:43,290 vamos a querer cada vez que acceder a la variable en argv en el índice dado. 177 00:12:43,290 --> 00:12:49,060 Que se puede representar con este, ¿verdad? 178 00:12:49,060 --> 00:12:53,430 Esta variable representa aquí la cadena en particular, en este caso 179 00:12:53,430 --> 00:12:57,030 porque es una matriz de cadenas - la cadena en particular en ese índice dado. 180 00:12:57,030 --> 00:13:00,690 Lo que queremos hacer, en este caso queremos imprimir, así que vamos a decir printf. 181 00:13:00,690 --> 00:13:04,680 Y ahora argv es una cadena, por lo que queremos poner ese marcador de posición allí. 182 00:13:04,680 --> 00:13:08,430 Queremos una nueva línea sólo para que se vea bien. 183 00:13:08,430 --> 00:13:12,530 Así que aquí tenemos un bucle para. No tenemos la enfermedad todavía. 184 00:13:12,530 --> 00:13:20,020 Así que comienza en 0, y luego cada vez que se va a imprimir la cadena dada 185 00:13:20,020 --> 00:13:22,980 en ese índice determinado de la matriz. 186 00:13:22,980 --> 00:13:28,410 Por eso, cuando queremos dejar de imprimir los elementos de la matriz? 187 00:13:28,410 --> 00:13:35,720 Cuando hemos terminado, ¿verdad? Cuando hemos llegado al final de la matriz. 188 00:13:35,720 --> 00:13:38,870 Así que no desea exceder más allá de la longitud de la matriz, 189 00:13:38,870 --> 00:13:43,700 y ya sabemos que no es necesario en realidad activamente averiguar cuál es la longitud de argv es 190 00:13:43,700 --> 00:13:47,520 porque ha dado a nosotros, y lo que es eso? Argc. Exactamente. 191 00:13:47,520 --> 00:13:56,640 Por eso queremos hacer este número argc proceso de veces. 192 00:13:56,640 --> 00:13:59,550 No estoy en el directorio correcto. 193 00:14:02,100 --> 00:14:03,490 Está bien. 194 00:14:03,490 --> 00:14:08,990 Ahora vamos a hacer args. No hay errores, lo cual es genial. 195 00:14:08,990 --> 00:14:11,430 Así que vamos a ejecutar args. 196 00:14:11,430 --> 00:14:15,130 ¿Qué es esto va a volver a nosotros? Es sólo va a imprimir de nuevo. 197 00:14:15,130 --> 00:14:18,320 "Se introducen argumentos en el programa, yo lo voy a dar a usted." 198 00:14:18,320 --> 00:14:23,170 Así que digamos que queremos decir args entonces foo bar. 199 00:14:23,170 --> 00:14:26,570 Así que lo que se imprime de nuevo a nosotros. ¿De acuerdo? 200 00:14:26,570 --> 00:14:30,790 Así que es un ejemplo de cómo se puede utilizar argc y argv 201 00:14:30,790 --> 00:14:33,460 sabiendo que argc representa la longitud de argv. 202 00:14:33,460 --> 00:14:42,750 Asegúrese de que usted no lo hace nunca con acceso matrices de un más allá de la longitud de la matriz 203 00:14:42,750 --> 00:14:45,140 C porque definitivamente gritar en usted. 204 00:14:45,140 --> 00:14:47,560 Usted conseguirá algo que se llama un error de segmentación, 205 00:14:47,560 --> 00:14:52,470 que nunca es divertido, básicamente diciendo que está tratando de acceder a algo 206 00:14:52,470 --> 00:14:55,000 que no existe, no le pertenece a usted. 207 00:14:55,000 --> 00:14:59,430 Así que seguro, y sobre todo con el cero indexación, no quiero - 208 00:14:59,430 --> 00:15:02,390 Como por ejemplo, si tenemos una matriz de longitud 4, 209 00:15:02,390 --> 00:15:07,240 que el índice de matriz de 4 no existe, porque empezamos a 0, en el índice cero. 210 00:15:07,240 --> 00:15:11,730 Se convertirá en una segunda naturaleza al igual que para los bucles cuando empezamos a 0. 211 00:15:11,730 --> 00:15:13,610 Así que tenlo en cuenta. 212 00:15:13,610 --> 00:15:22,590 Usted no desea tener acceso siempre que el índice de un array que está más allá de su alcance. 213 00:15:26,710 --> 00:15:32,560 Así que podemos ver ahora cómo podemos tipo de acceso 214 00:15:32,560 --> 00:15:35,930 los argumentos de línea de comandos que se pasan pulg 215 00:15:35,930 --> 00:15:41,330 Pero como vio la cadena, el argv es en realidad una matriz de cadenas. 216 00:15:41,330 --> 00:15:45,740 Así que no es en realidad un entero todavía, pero en César queremos tratar con números enteros. 217 00:15:45,740 --> 00:15:54,430 Por suerte, hay una función creada por nosotros para que en realidad se puede convertir una cadena a un entero. 218 00:15:54,430 --> 00:15:58,710 También aquí no estamos tratando con la entrada del usuario en el que los está incitando 219 00:15:58,710 --> 00:16:03,740 para la entrada de la clave aquí, así que en realidad no puede reprompt y decir: 220 00:16:03,740 --> 00:16:07,840 "Oh, me dará otro número entero, por ejemplo, si no es válido." 221 00:16:07,840 --> 00:16:10,540 Pero todavía necesita verificar el uso correcto. 222 00:16:10,540 --> 00:16:13,520 En César sólo se les permite pasar en un número, 223 00:16:13,520 --> 00:16:18,030 y lo que tienen que ejecutar. / César y luego te tienen que dar un número. 224 00:16:18,030 --> 00:16:23,660 Así argc tiene que ser un número determinado. 225 00:16:23,660 --> 00:16:29,060 ¿Qué número que sería si tienen que pasar el. / César y luego una tecla? 226 00:16:29,060 --> 00:16:32,920 ¿Cuál es argc? >> [Estudiante] 2. >> Dos. Exactamente. 227 00:16:32,920 --> 00:16:35,490 Así que usted quiere asegurarse de que argc es 2. 228 00:16:35,490 --> 00:16:39,620 De lo contrario, básicamente se niegan a ejecutar el programa. 229 00:16:39,620 --> 00:16:43,040 En main es una función que dice int main, 230 00:16:43,040 --> 00:16:47,360 así entonces siempre en 0 buen retorno práctica al final de un programa exitoso. 231 00:16:47,360 --> 00:16:50,840 Así que si, por ejemplo, te dan tres argumentos de la línea de comandos en lugar de 2 232 00:16:50,840 --> 00:16:54,350 o te dan 1, por ejemplo, entonces lo que voy a hacer es que usted querrá comprobar que 233 00:16:54,350 --> 00:16:59,900 y luego regresar una diciendo, no, no puedo seguir con este programa. 234 00:16:59,900 --> 00:17:03,190 [Estudiante] No puede haber un espacio en el texto. >> Perdón? 235 00:17:03,190 --> 00:17:06,780 [Estudiante] No puede haber un espacio en el texto que está tratando de cifrar. 236 00:17:06,780 --> 00:17:08,480 ¡Ah! 237 00:17:08,480 --> 00:17:11,280 En cuanto al texto que estamos tratando de cifrar, que en realidad viene después 238 00:17:11,280 --> 00:17:13,970 cuando damos ese texto. 239 00:17:13,970 --> 00:17:18,260 Así que ahora sólo estamos aceptando como argumentos del comando el número real, 240 00:17:18,260 --> 00:17:21,579 el cambio real para el cifrado de César. 241 00:17:21,579 --> 00:17:27,569 [Estudiante] ¿Por qué necesita 2 en lugar de sólo 1 argc? Definitivamente hay un número. 242 00:17:27,569 --> 00:17:32,200 Derecha. La razón por la que necesitamos para argc 2 en vez de 1 243 00:17:32,200 --> 00:17:36,260 se debe a que cuando se ejecuta un programa y dicen. / césar o. / hola, 244 00:17:36,260 --> 00:17:38,280 que realmente cuenta como un argumento de línea de comandos. 245 00:17:38,280 --> 00:17:43,020 Así que ya ocupa 1 y así entonces estamos introduciendo un extra. 246 00:17:45,030 --> 00:17:49,440 Así que en realidad está introduciendo una cadena en el argumento de la línea de comandos. 247 00:17:49,440 --> 00:17:52,730 Lo que quiero hacer, para César nos quieren hacer frente a un número entero, 248 00:17:52,730 --> 00:17:57,180 para que pueda utilizar esta función atoi. 249 00:17:57,180 --> 00:18:02,850 Y en el fondo, se pasa en una cadena y luego se le regresará un entero 250 00:18:02,850 --> 00:18:06,070 si es posible hacer esa cadena en un entero. 251 00:18:06,070 --> 00:18:10,960 Ahora recuerdo cuando nos enfrentamos a cosas printf o GetString, así, 252 00:18:10,960 --> 00:18:13,390 que incluyen las bibliotecas que son específicos para nosotros. 253 00:18:13,390 --> 00:18:19,450 Así que al principio comenzamos con un estándar de hash tag de E / S,. H, algo así. 254 00:18:19,450 --> 00:18:22,430 Bueno, atoi no está dentro de una de esas bibliotecas, 255 00:18:22,430 --> 00:18:26,600 así que lo que tienes que hacer es que tenemos que incluir la biblioteca de derecho para ello. 256 00:18:26,600 --> 00:18:32,720 Así que recordar de nuevo a Tutorial 1, donde me referí a la función manual. 257 00:18:32,720 --> 00:18:37,110 Escribes hombre de tu terminal y luego seguido por el nombre de una función. 258 00:18:37,110 --> 00:18:39,720 Y para que le mostrará una lista completa de su uso, 259 00:18:39,720 --> 00:18:42,890 sino que también lo llevará hasta qué biblioteca que pertenece. 260 00:18:42,890 --> 00:18:47,000 Así que lo dejo a usted para usar la función manual con atoi 261 00:18:47,000 --> 00:18:53,360 y averiguar en qué biblioteca se debe incluir para poder utilizar la función atoi. 262 00:18:54,450 --> 00:18:57,670 Así que tenemos la llave y ahora se trata de obtener el texto sin formato, 263 00:18:57,670 --> 00:19:01,820 y de modo que realmente va a ser la entrada del usuario en la que sugerirán. 264 00:19:01,820 --> 00:19:05,540 Nos topamos con getInt y GetFloat, y así, en la misma línea 265 00:19:05,540 --> 00:19:07,670 vamos a estar tratando con GetString. 266 00:19:07,670 --> 00:19:12,440 Pero en este caso no es necesario hacer ninguna do while o while para comprobar. 267 00:19:12,440 --> 00:19:14,480 GetString sin duda nos dará una cadena, 268 00:19:14,480 --> 00:19:17,630 y vamos a cifrar lo que el usuario nos da. 269 00:19:17,630 --> 00:19:23,770 Así que usted puede asumir que todas estas cadenas de usuario introducidos son los correctos. 270 00:19:23,770 --> 00:19:24,670 Grande. 271 00:19:24,670 --> 00:19:27,270 Así que una vez que tienes la llave y una vez que tienes el texto, 272 00:19:27,270 --> 00:19:31,660 ahora lo que queda es que hay que cifrar el texto en claro. 273 00:19:31,660 --> 00:19:36,530 Sólo para cubrir rápidamente en jerga, el texto plano es lo que el usuario le da, 274 00:19:36,530 --> 00:19:41,030 y el texto cifrado es lo que volver a ellos. 275 00:19:42,450 --> 00:19:45,850 Así cadenas, para ser capaz de ir a través de realidad letra por letra 276 00:19:45,850 --> 00:19:48,550 porque tenemos que cambiar cada letra, 277 00:19:48,550 --> 00:19:51,390 entendemos que las cadenas, si es que tipo de pelar la capa, 278 00:19:51,390 --> 00:19:54,130 vemos que sólo son realmente una lista de caracteres. 279 00:19:54,130 --> 00:19:55,930 Una viene después de la otra. 280 00:19:55,930 --> 00:20:01,690 Y así podemos tratar las cadenas como arrays, ya que son conjuntos de caracteres. 281 00:20:01,690 --> 00:20:05,640 Así que usted tiene una cadena denominada texto, 282 00:20:05,640 --> 00:20:09,400 y dentro de ese texto variable se almacena Esto es CS50. 283 00:20:09,400 --> 00:20:15,680 A continuación, el texto en el índice 0 sería una T mayúscula, índice 1 sería h, etc 284 00:20:17,530 --> 00:20:23,970 Y a continuación, con las matrices, en el ejemplo argc en args.c, 285 00:20:23,970 --> 00:20:27,090 vimos que teníamos que recorrer en iteración una matriz 286 00:20:27,090 --> 00:20:32,440 y por lo que tuvo que recorrer desde i = 0 hasta i es menor que la longitud. 287 00:20:32,440 --> 00:20:35,560 Así que necesitamos alguna manera de averiguar lo que la duración de nuestra cadena es 288 00:20:35,560 --> 00:20:37,090 si vamos a iterar sobre ella. 289 00:20:37,090 --> 00:20:42,300 Por suerte, una vez más, hay una función allí para nosotros, aunque más tarde en CS50 290 00:20:42,300 --> 00:20:45,860 que sin duda será capaz de aplicar y hacer su propia función 291 00:20:45,860 --> 00:20:48,260 que puede calcular la longitud de una cadena. 292 00:20:48,260 --> 00:20:52,120 Pero por ahora vamos a utilizar longitud de la cadena, por lo que strlen. 293 00:20:52,120 --> 00:21:00,440 Se pasa de una cadena, y luego se le devolverá un entero que representa la longitud de la cadena. 294 00:21:00,440 --> 00:21:05,840 Veamos un ejemplo de cómo podría ser capaz de repetir cada carácter en una cadena 295 00:21:05,840 --> 00:21:08,470 y hacer algo con eso. 296 00:21:08,470 --> 00:21:13,250 Lo que queremos hacer es iterar sobre cada carácter de la cadena, 297 00:21:13,250 --> 00:21:19,150 y lo que queremos hacer es que imprimimos de nuevo cada carácter 1 por 1 298 00:21:19,150 --> 00:21:22,060 excepto que añadir algo a su lado. 299 00:21:22,060 --> 00:21:27,020 Así que vamos a empezar con el bucle for. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Vamos a dejar espacio para la condición. 301 00:21:32,700 --> 00:21:36,840 Queremos recorrer hasta llegar al final de la cadena, ¿no? 302 00:21:36,840 --> 00:21:41,340 Entonces, ¿qué función nos da la longitud de la cuerda? 303 00:21:41,340 --> 00:21:43,160 [Respuesta de los estudiantes inaudible] 304 00:21:43,160 --> 00:21:46,420 Esa es la longitud de los argumentos de línea de comandos. 305 00:21:46,420 --> 00:21:50,650 Sin embargo, para una cadena que desea utilizar una función que nos da la longitud de la cadena. 306 00:21:50,650 --> 00:21:53,090 Así que esa es la longitud de cadena. 307 00:21:53,090 --> 00:21:57,130 Y entonces usted tiene que pasar una cadena a la misma. 308 00:21:57,130 --> 00:21:59,760 Es necesario saber qué cadena se debe calcular la longitud de. 309 00:21:59,760 --> 00:22:03,160 Así que en este caso estamos tratando con la cadena s. 310 00:22:04,790 --> 00:22:05,860 Grande. 311 00:22:05,860 --> 00:22:10,770 Así que lo que queremos hacer, vamos a printf. 312 00:22:10,770 --> 00:22:14,850 Ahora, queremos tratar con los personajes. Queremos imprimir cada carácter individual. 313 00:22:14,850 --> 00:22:22,150 Cuando usted quiere que imprima un flotador, se utiliza como marcador de posición% f. 314 00:22:22,150 --> 00:22:24,580 Con un int que usaría% d. 315 00:22:24,580 --> 00:22:30,890 Y así, del mismo modo, con un carácter% c se utiliza para decir que me voy a imprimir un carácter 316 00:22:30,890 --> 00:22:34,570 que está almacenado en el interior de una variable. 317 00:22:34,570 --> 00:22:40,840 Así que tenemos esto, y vamos a agregar un punto y un espacio para ello. 318 00:22:40,840 --> 00:22:45,430 ¿Qué personaje estamos usando? 319 00:22:45,430 --> 00:22:49,780 Vamos a utilizar cualquier naturaleza que estamos en la cadena. 320 00:22:49,780 --> 00:22:52,890 Así que vamos a estar usando algo con una cuerda, 321 00:22:52,890 --> 00:22:56,420 pero queremos estar accediendo al carácter cierto allí. 322 00:22:56,420 --> 00:23:02,740 Así que si una cadena es sólo una matriz, entonces, ¿cómo acceder a los elementos de las matrices? 323 00:23:02,740 --> 00:23:06,480 Contamos con los corchetes, y luego ponemos el índice de allí. 324 00:23:06,480 --> 00:23:11,820 Así que tenemos entre corchetes. Nuestro índice en este caso, sólo puedo usar. Exactamente. 325 00:23:15,290 --> 00:23:22,370 Así que aquí estamos diciendo que vamos a imprimir un carácter seguido de un punto y un espacio, 326 00:23:22,370 --> 00:23:30,870 y que personaje va a ser la letra i en nuestra cadena s. 327 00:23:32,920 --> 00:23:39,330 Yo sólo voy a salvar de eso. Bien. 328 00:23:42,510 --> 00:23:46,840 Ahora me voy a correr longitud de la cadena. 329 00:23:46,840 --> 00:23:53,440 Así que tuvimos una cadena denominada OMG, y ahora se ha enfatizado aún más. 330 00:23:53,440 --> 00:23:57,870 Del mismo modo, digamos que realmente desea conseguir una cadena del usuario. 331 00:23:57,870 --> 00:23:59,580 ¿Cómo podemos hacer esto? 332 00:23:59,580 --> 00:24:01,610 Antes, ¿cómo hemos llegado un int? 333 00:24:01,610 --> 00:24:08,040 Dijimos getInt, ¿verdad? Pero esto no es int, así que vamos a GetString. 334 00:24:11,780 --> 00:24:17,770 Hagamos longitud de la cadena. Aquí no se ha introducido su sistema específico. 335 00:24:17,770 --> 00:24:19,940 Así que no lo sé. 336 00:24:19,940 --> 00:24:23,820 Voy a poner mi nombre en el aquí y entonces yo puedo hacer una de esas cosas 337 00:24:23,820 --> 00:24:29,600 donde puedo asignar una palabra para cada letra o algo por el estilo. Cool. 338 00:24:29,600 --> 00:24:31,900 Así que esa es la longitud de cadena. 339 00:24:33,000 --> 00:24:34,640 Así que estamos de vuelta a César. 340 00:24:34,640 --> 00:24:38,620 Tenemos algunas herramientas sobre cómo iterar sobre una secuencia, 341 00:24:38,620 --> 00:24:41,250 cómo acceder a cada elemento individual. 342 00:24:41,250 --> 00:24:44,720 Así que ahora podemos volver al programa. 343 00:24:44,720 --> 00:24:48,650 Como he mencionado antes, en la tabla ASCII, su mejor amigo, 344 00:24:48,650 --> 00:24:52,300 vas a ver los números que están asociados con cada letra. 345 00:24:52,300 --> 00:24:55,900 Así que aquí decir que nuestro texto en claro es que estoy mareado! 346 00:24:55,900 --> 00:25:01,090 A continuación, cada uno de estos caracteres se va a tener un número y el valor ASCII asociado con él, 347 00:25:01,090 --> 00:25:04,710 incluso el apóstrofe, incluso el espacio, incluso el signo de exclamación, 348 00:25:04,710 --> 00:25:06,600 por lo que usted quiere mantener eso en mente. 349 00:25:06,600 --> 00:25:12,360 Así que decir que nuestra clave que el usuario incluido en su argumento de línea de comandos es 6. 350 00:25:12,360 --> 00:25:17,770 Esto significa que para la primera letra, que es, que está representado por 73, 351 00:25:17,770 --> 00:25:25,610 desea volver a cualquier letra está representada por el valor ASCII de 73 + 6. 352 00:25:25,610 --> 00:25:29,020 En este caso sería 79. 353 00:25:30,840 --> 00:25:35,040 Ahora queremos ir al siguiente carácter. 354 00:25:35,040 --> 00:25:40,960 Así que el siguiente en el índice 1 del texto claro sería el apóstrofe. 355 00:25:40,960 --> 00:25:46,780 Pero recuerde que sólo desea cifrar las letras. 356 00:25:46,780 --> 00:25:50,040 Así que queremos asegurarnos de que el apóstrofe en realidad sigue siendo la misma, 357 00:25:50,040 --> 00:25:54,310 que no cambiamos de 39 a 45 lo que es. 358 00:25:54,310 --> 00:25:57,150 Queremos mantenerlo como un apóstrofe. 359 00:25:57,150 --> 00:26:00,780 Por eso queremos recordar a cifrar sólo las letras 360 00:26:00,780 --> 00:26:04,560 porque queremos que todos los otros símbolos de permanecer sin cambios en nuestro programa. 361 00:26:04,560 --> 00:26:07,130 Otra cosa que queremos es preservar la capitalización. 362 00:26:07,130 --> 00:26:10,250 Así que cuando usted tiene una letra mayúscula, debe permanecer como una mayúscula. 363 00:26:10,250 --> 00:26:12,830 Lowercases debe permanecer en minúscula. 364 00:26:13,620 --> 00:26:19,480 Así que algunas funciones útiles para poder hacer frente a sólo letras de cifrado 365 00:26:19,480 --> 00:26:22,380 mantener y preservar la capitalización de las cosas 366 00:26:22,380 --> 00:26:25,130 son las funciones islower isalpha, isupper,. 367 00:26:25,130 --> 00:26:29,270 Y estas son funciones que devuelven un valor booleano. 368 00:26:29,270 --> 00:26:34,180 Básicamente, verdadero o falso. ¿Es esta una mayúscula? ¿Es esta alfanumérico? 369 00:26:34,180 --> 00:26:37,180 ¿Es ésta una carta, esencialmente. 370 00:26:37,180 --> 00:26:41,070 Así que aquí están 3 ejemplos de como se puede utilizar esta función. 371 00:26:41,070 --> 00:26:47,060 Básicamente, se puede comprobar si el valor devuelto por la función es verdadera o falsa 372 00:26:47,060 --> 00:26:49,400 sobre la base de esa entrada. 373 00:26:49,400 --> 00:26:54,880 O hacer algo no cifrar o cifrar o asegúrese de que se trata de mayúsculas, etc 374 00:26:54,880 --> 00:27:01,080 [Estudiante] ¿Puedes explicar aquellos un poco más y cómo se utilizan? >> Sí, seguro. 375 00:27:01,080 --> 00:27:08,470 Así que si miramos hacia atrás, aquí tenemos una I mayúscula, ¿no? 376 00:27:08,470 --> 00:27:14,550 Así que sabemos que va a O + 6 porque es O. 377 00:27:14,550 --> 00:27:18,740 Pero queremos asegurarnos de que la O va a ser una capital de O. 378 00:27:18,740 --> 00:27:22,940 Así que, básicamente, que es una especie de ir a cambiar nuestra entrada. 379 00:27:22,940 --> 00:27:26,870 Así que si se trata de mayúsculas o no quiere cambiar el tipo de forma que lidiar con eso. 380 00:27:26,870 --> 00:27:32,360 Así que si usamos la función isupper en ese índice en particular, 381 00:27:32,360 --> 00:27:36,480 así isupper ("I"), que devuelve verdadero para nosotros, así que sabemos que es superior. 382 00:27:36,480 --> 00:27:40,360 Así que sobre la base de que, más tarde vamos a ir en una fórmula 383 00:27:40,360 --> 00:27:42,750 que se va a utilizar para cambiar las cosas de César, 384 00:27:42,750 --> 00:27:46,560 Así que, básicamente, va a ser una fórmula ligeramente diferente si se trata de mayúsculas 385 00:27:46,560 --> 00:27:50,670 en contraposición a minúsculas. Tiene sentido? 386 00:27:51,020 --> 00:27:52,760 Si. No se preocupe. 387 00:27:54,900 --> 00:27:58,990 He hablado un poco acerca de cómo agregar 6 a una carta, que no acaba de tener sentido 388 00:27:58,990 --> 00:28:05,500 excepto cuando nos tipo de entender que estos personajes 389 00:28:05,500 --> 00:28:08,920 son un poco intercambiable con números enteros. 390 00:28:08,920 --> 00:28:11,250 Lo que hacemos nosotros es una especie de casting de uso implícito. 391 00:28:11,250 --> 00:28:18,100 Iremos a lanzar un poco más adelante de donde se toma un valor y lo conviertes en un tipo diferente 392 00:28:18,100 --> 00:28:20,440 de lo que originalmente era. 393 00:28:20,440 --> 00:28:25,910 Sin embargo, con este conjunto de procesadores que vamos a ser capaces de utilizar indistintamente tipo de caracteres 394 00:28:25,910 --> 00:28:30,880 y sus correspondientes valores enteros. 395 00:28:30,880 --> 00:28:35,140 Así que si usted simplemente revestir un carácter con sólo las comillas simples, 396 00:28:35,140 --> 00:28:40,390 entonces usted será capaz de trabajar con ella con números enteros, que trata como un entero. 397 00:28:40,390 --> 00:28:48,040 Así que la C mayúscula se refiere a 67. F minúsculas se refiere a 102. 398 00:28:48,040 --> 00:28:51,480 De nuevo, si usted quiere saber estos valores, mira a tu tabla ASCII. 399 00:28:51,480 --> 00:28:56,160 Así que vamos a entrar en algunos ejemplos de cómo podría ser capaz de restar y sumar, 400 00:28:56,160 --> 00:29:03,130 cómo usted puede realmente trabajar con estos personajes, los utilizan de manera intercambiable. 401 00:29:03,870 --> 00:29:11,350 Yo digo que ASCIIMath se va a calcular la adición de un carácter en un entero 402 00:29:11,350 --> 00:29:17,590 y a continuación, muestra el carácter resultante así como el valor ASCII resultante. 403 00:29:17,590 --> 00:29:22,290 Así que aquí estoy diciendo - nos volveremos acuerdo con esta última parte - 404 00:29:22,290 --> 00:29:29,100 pero en el fondo, estoy diciendo que el usuario debe decir ASCIIMath ejecutar junto con una clave, 405 00:29:29,100 --> 00:29:30,880 y yo digo que esa clave va a ser el número 406 00:29:30,880 --> 00:29:34,600 con el que vamos a añadir a este personaje. 407 00:29:34,600 --> 00:29:38,560 Así que aquí cuenta de que ya que estoy pidiendo una clave, 408 00:29:38,560 --> 00:29:40,590 ya que estoy pidiendo que me están dando una cosa, 409 00:29:40,590 --> 00:29:45,600 Sólo quiero aceptar. / ASCIIMath y una llave. 410 00:29:45,600 --> 00:29:49,330 Así que voy a exigir que argc es igual a 2. 411 00:29:49,330 --> 00:29:54,360 Si no es así, entonces me voy a volver una y el programa se cerrará. 412 00:29:55,070 --> 00:29:58,540 Así que estoy diciendo la clave no va a ser el argumento de línea de comandos en primer lugar, 413 00:29:58,540 --> 00:30:05,080 que va a ser la segunda, y como puede ver aquí, 414 00:30:05,080 --> 00:30:11,790 Me voy a convertir esto en un número entero. 415 00:30:15,740 --> 00:30:19,230 Entonces me voy a poner a un personaje que se r. 416 00:30:19,230 --> 00:30:23,970 Observe que el tipo de la variable CHR es en realidad un entero. 417 00:30:23,970 --> 00:30:30,480 La forma en que soy capaz de utilizar r como un entero es por encerrarla con estas comillas simples. 418 00:30:33,850 --> 00:30:40,560 Así que volvemos a nuestro estado de printf en el que tenemos un marcador para un carácter 419 00:30:40,560 --> 00:30:43,590 y entonces un marcador de posición para un número entero, 420 00:30:43,590 --> 00:30:49,450 el carácter se representa por la CDH, y el entero es la clave. 421 00:30:49,450 --> 00:30:54,320 Y entonces vamos a añadir en consecuencia los 2 juntos. 422 00:30:54,320 --> 00:30:58,420 Así que vamos a añadir r + cualquiera que sea la clave es, 423 00:30:58,420 --> 00:31:03,520 y luego vamos a imprimir el resultado de eso. 424 00:31:06,210 --> 00:31:14,220 Así que vamos a hacer ASCIIMath. Es hasta la fecha, así que vamos a ejecutar ASCIIMath. 425 00:31:14,220 --> 00:31:18,290 Oh, pero mira, no hace nada, porque en realidad no nos dan una clave. 426 00:31:18,290 --> 00:31:23,850 Así que cuando uno acaba de regresar, nuestra función principal, que acaba de volver de nuevo a nosotros. 427 00:31:23,850 --> 00:31:29,250 Así que vamos a pasar en una tecla. Que alguien me dé un número. >> [Estudiante] 4. 428 00:31:29,250 --> 00:31:30,920 4. Bien. 429 00:31:30,920 --> 00:31:39,280 Así r aumentó en 4 nos va a dar v, que se corresponde con el valor ASCII de 118. 430 00:31:39,280 --> 00:31:43,880 Entonces es como que tiene sentido que - 431 00:31:43,880 --> 00:31:51,250 En realidad, ¿te puedo preguntar, ¿qué cree usted que el valor ASCII de r es si r + 4 es 118? 432 00:31:53,070 --> 00:31:55,470 Entonces sí, r es 114. 433 00:31:55,470 --> 00:32:03,010 Así que si nos fijamos en la tabla ASCII y luego, por supuesto, usted verá que r está representada por 114. 434 00:32:03,010 --> 00:32:08,610 Así que ahora que sabemos que podemos sumar enteros a caracteres, esto parece bastante simple. 435 00:32:08,610 --> 00:32:12,740 Sólo vamos a iterar sobre una cadena como vimos en el ejemplo anterior. 436 00:32:12,740 --> 00:32:17,170 Vamos a comprobar si se trata de una carta. 437 00:32:17,170 --> 00:32:20,420 Si es así, entonces lo vamos a cambiar por lo que la clave es. 438 00:32:20,420 --> 00:32:23,650 Bastante simple, excepto cuando se llega a gustar esto, 439 00:32:23,650 --> 00:32:32,140 se ve que z, representado por 122, entonces le daría un carácter diferente. 440 00:32:32,140 --> 00:32:37,770 En realidad quiere quedarse en nuestro alfabeto, ¿no? 441 00:32:37,770 --> 00:32:43,180 Así que tenemos que buscar la manera de tipo de envolver alrededor. 442 00:32:43,180 --> 00:32:47,190 Al llegar a zed y desea aumentar en un cierto número, 443 00:32:47,190 --> 00:32:51,230 no quiero entrar en más allá de la sección alfabeto ASCII; 444 00:32:51,230 --> 00:32:54,140 desea ajustar de nuevo todo el camino hasta A. 445 00:32:54,140 --> 00:32:58,550 Pero tenga en cuenta que usted está preservando el caso. 446 00:32:58,550 --> 00:33:00,980 Así que sabiendo que las letras no pueden convertirse en símbolos 447 00:33:00,980 --> 00:33:05,290 al igual que los símbolos no van a estar cambiando. 448 00:33:05,290 --> 00:33:08,170 En el último conjunto de procesadores que definitivamente no era necesario, 449 00:33:08,170 --> 00:33:14,310 pero la opción era implementar su pset codicioso con la función módulo. 450 00:33:14,310 --> 00:33:17,230 Pero ahora estamos en realidad va a tener que utilizar el módulo, 451 00:33:17,230 --> 00:33:19,900 así que vamos a ir sobre esto un poco. 452 00:33:19,900 --> 00:33:26,920 Básicamente, cuando se tiene x módulo y, que le da el resto de dividir x por y. 453 00:33:26,920 --> 00:33:30,930 Éstos son algunos ejemplos. Tenemos un 27% 15. 454 00:33:30,930 --> 00:33:36,200 Básicamente, cuando se resta 15 del 27 tantas veces como sea posible sin llegar negativo 455 00:33:36,200 --> 00:33:39,060 entonces usted consigue 12 sobra. 456 00:33:39,060 --> 00:33:44,650 Así que eso es un poco como en el contexto de las matemáticas, pero ¿cómo podemos realmente usar esto? 457 00:33:44,650 --> 00:33:47,100 Esto va a ser útil para nuestro wrapover. 458 00:33:47,100 --> 00:33:55,420 Para ello, vamos a decir le pedí a todos que se dividen en 3 grupos. 459 00:33:55,420 --> 00:33:58,010 A veces lo hace en grupo y algo por el estilo. 460 00:33:58,010 --> 00:34:01,320 Digamos que yo dije: "Bueno, yo quiero que todos se divide en 3". 461 00:34:01,320 --> 00:34:04,240 ¿Cómo podría hacer eso? 462 00:34:04,240 --> 00:34:06,810 [Respuesta de los estudiantes inaudible] Sí, exactamente. Cuente. Bien. 463 00:34:06,810 --> 00:34:10,260 Vamos a hacer eso en realidad. ¿Quieres empezar? 464 00:34:10,260 --> 00:34:13,810 [Estudiantes contando] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Pero recuerda ... >> [Estudiante] Oh, lo siento. 466 00:34:16,620 --> 00:34:18,730 Ese es un punto muy bueno. 467 00:34:18,730 --> 00:34:24,130 Dijiste 4, pero en realidad quiero que digas 1 porque sólo queremos 3 grupos. 468 00:34:24,130 --> 00:34:30,159 Entonces, ¿cómo - No, eso es un ejemplo muy bueno, porque entonces, ¿cómo puede usted decir 1? 469 00:34:30,159 --> 00:34:33,370 ¿Cuál es la relación entre el 4 y 1? 470 00:34:33,370 --> 00:34:36,760 Bueno, mod 3 4 1. 471 00:34:36,760 --> 00:34:41,460 Así que si usted continúa, usted sería 2. 472 00:34:41,460 --> 00:34:44,540 Así que tenemos 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Una vez más, usted es en realidad la 5 ª persona. ¿Cómo sabes que decir 2 en lugar de 5? 474 00:34:49,420 --> 00:34:53,760 Usted dice mod 3 5 2. 475 00:34:53,760 --> 00:34:59,100 Quiero ver cuántos grupos de 3 se queda, entonces qué orden soy yo 476 00:34:59,100 --> 00:35:02,860 Y entonces si continuamos por toda la habitación, 477 00:35:02,860 --> 00:35:07,760 entonces veríamos que en realidad siempre estamos aplicando la función mod a nosotros mismos 478 00:35:07,760 --> 00:35:09,990 contar tipo de descuento. 479 00:35:09,990 --> 00:35:14,490 Ese es un tipo más de ejemplo tangible de cómo puede utilizar modulo 480 00:35:14,490 --> 00:35:17,960 porque estoy seguro que la mayoría de nosotros hemos pasado por ese proceso 481 00:35:17,960 --> 00:35:19,630 donde hemos tenido que cuente. 482 00:35:19,630 --> 00:35:21,840 Cualquier pregunta sobre modulo? 483 00:35:21,840 --> 00:35:25,360 Será muy importante entender los conceptos de esta, 484 00:35:25,360 --> 00:35:28,640 por lo que desea asegurarse de que ustedes entienden. 485 00:35:28,640 --> 00:35:34,660 [Estudiante] Si no hay resto, ¿se le dará el número real? 486 00:35:34,660 --> 00:35:40,430 Si uno de los 3 primero de ellos lo había hecho, ¿habría dado lo que realmente eran, 487 00:35:40,430 --> 00:35:43,310 o se lo han dado [inaudible] >> Eso es una buena pregunta. 488 00:35:43,310 --> 00:35:48,750 Cuando no hay resto para el módulo - así que usted tiene 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 que en realidad te devuelve 0. 490 00:35:53,670 --> 00:35:57,290 Vamos a hablar de eso un poco más tarde. 491 00:35:58,810 --> 00:36:07,720 Ah, sí, por ejemplo, la 3 ª persona - 3 mod 3 es realmente 0, pero ella dijo 3. 492 00:36:07,720 --> 00:36:14,900 Así que es algo así como una captura interna, por ejemplo, 493 00:36:14,900 --> 00:36:17,620 como bien, si el mod es 0, entonces yo voy a ser la 3 ª persona. 494 00:36:17,620 --> 00:36:22,740 Pero vamos a entrar en una especie de cómo podemos querer tratar con lo que 0 es tarde. 495 00:36:22,740 --> 00:36:32,750 Así que ahora que de alguna manera tienen una forma de mapear el zed a la letra correcta. 496 00:36:32,750 --> 00:36:34,920 Así que ahora que hemos llegado a través de estos ejemplos, 497 00:36:34,920 --> 00:36:37,880 que tipo de ver cómo César podría funcionar. 498 00:36:37,880 --> 00:36:42,640 Usted ve los dos alfabetos y luego los ves cambiando. 499 00:36:42,640 --> 00:36:44,430 Así que vamos a tratar de expresar que en términos de la fórmula. 500 00:36:44,430 --> 00:36:46,940 Esta fórmula se da realmente a usted en la especificación, 501 00:36:46,940 --> 00:36:52,070 pero bueno vamos a mirar a través de lo que significa cada variable. 502 00:36:52,070 --> 00:36:55,000 Nuestro resultado final va a ser el texto cifrado. 503 00:36:55,000 --> 00:36:58,300 Así que esto nos dice que el carácter de orden i del texto cifrado 504 00:36:58,300 --> 00:37:02,500 va a corresponder al carácter i-ésimo del texto plano. 505 00:37:02,500 --> 00:37:08,130 Eso tiene sentido, porque queremos estar siempre alineando estas cosas. 506 00:37:08,130 --> 00:37:13,480 Así que va a ser el carácter de orden i del texto cifrado k plus, que es nuestra clave - 507 00:37:13,480 --> 00:37:17,230 que tiene sentido - y entonces tenemos este mod 26. 508 00:37:17,230 --> 00:37:19,860 ¿Recuerda cuando tuvimos la zed 509 00:37:19,860 --> 00:37:24,190 nosotros no queremos entrar en el personaje, así que quería mod 510 00:37:24,190 --> 00:37:26,540 y el tipo de envoltura alrededor del alfabeto. 511 00:37:26,540 --> 00:37:33,430 Después de zed va a ir a, b, c, d, hasta que llegó al número correcto. 512 00:37:33,430 --> 00:37:44,690 Así que sabemos que zed, si + 6, nos daría f zed porque después viene a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Así que vamos a recordar que sabemos con certeza que zed + 6 nos va a dar f. 514 00:37:52,530 --> 00:38:03,530 En valores ASCII, z es de 122 y F 102. 515 00:38:03,530 --> 00:38:10,570 Así que tenemos que encontrar alguna manera de hacer que nuestra fórmula César nos dan 102 516 00:38:10,570 --> 00:38:13,590 después de tomar en 122. 517 00:38:13,590 --> 00:38:19,550 Así que si solo se aplica esta fórmula, el% ('z' + 6) 26, que en realidad le da 24 518 00:38:19,550 --> 00:38:25,980 porque 122 + 6 es de 128, 128 26% le da 24 restantes. 519 00:38:25,980 --> 00:38:29,140 Pero eso no significa realmente f. Eso definitivamente no es 102. 520 00:38:29,140 --> 00:38:33,590 Eso no es también la sexta letra del alfabeto. 521 00:38:33,590 --> 00:38:41,550 Así que, obviamente, tenemos que tener alguna manera de ajustar esto un poco. 522 00:38:42,970 --> 00:38:51,340 En términos del alfabeto corriente, sabemos que z es la letra 26 y F es la sexta. 523 00:38:51,340 --> 00:38:55,460 Pero estamos en ciencias de la computación, por lo que vamos a índice a 0. 524 00:38:55,460 --> 00:39:00,690 Así que en lugar de z es el número 26, vamos a decir que es el número 25 525 00:39:00,690 --> 00:39:02,630 porque a es 0. 526 00:39:02,630 --> 00:39:04,770 Así que ahora vamos a aplicar esta fórmula. 527 00:39:04,770 --> 00:39:11,710 Tenemos z representado por 25 + 6, lo que le da 31. 528 00:39:11,710 --> 00:39:15,790 Y 31 mod 26 le da 5 como un resto. 529 00:39:15,790 --> 00:39:20,500 Eso es perfecto, porque sabemos que f es la quinta letra del alfabeto. 530 00:39:20,500 --> 00:39:26,400 Pero todavía no es f, ¿verdad? Todavía no es 102. 531 00:39:26,400 --> 00:39:32,730 Así que para este conjunto de procesadores, el desafío será tratar de averiguar la relación 532 00:39:32,730 --> 00:39:36,910 entre la conversión entre estos valores ASCII y el índice alfabético. 533 00:39:36,910 --> 00:39:40,280 Esencialmente, lo que usted quiere hacer, quiere empezar con los valores ASCII, 534 00:39:40,280 --> 00:39:45,390 pero entonces usted quiere traducir de alguna manera que en un índice alfabético 535 00:39:45,390 --> 00:39:52,610 luego calcular qué letra debe ser - básicamente, lo que su índice alfabético es 536 00:39:52,610 --> 00:39:57,660 del carácter de cifrado - luego traducir eso a los valores ASCII. 537 00:39:57,660 --> 00:40:04,870 Así que si usted látigo de su tabla ASCII, a continuación, tratar de encontrar relaciones entre, por ejemplo, 102 y 5 538 00:40:04,870 --> 00:40:10,440 o el 122 y 25. 539 00:40:12,140 --> 00:40:15,690 Hemos recibido la llave de los argumentos de línea de comandos, hemos recibido el texto en claro, 540 00:40:15,690 --> 00:40:17,520 lo hemos cifrado. 541 00:40:17,520 --> 00:40:19,820 Ahora todo lo que queda por hacer es imprimirlo. 542 00:40:19,820 --> 00:40:22,040 Podríamos hacer esto un par de maneras diferentes. 543 00:40:22,040 --> 00:40:24,570 Lo que podemos hacer es imprimir en realidad a medida que avanzamos. 544 00:40:24,570 --> 00:40:28,250 Al iterar sobre los caracteres de la cadena, 545 00:40:28,250 --> 00:40:31,660 podríamos simplemente imprimir sólo en ese momento cuando lo calculamos. 546 00:40:31,660 --> 00:40:36,030 Como alternativa, también se puede almacenar en una matriz y tienen una serie de caracteres 547 00:40:36,030 --> 00:40:39,280 y al final iterar sobre esa matriz entera e imprimirlo. 548 00:40:39,280 --> 00:40:40,980 Así que tienes un par de opciones para ello. 549 00:40:40,980 --> 00:40:47,280 Y recuerda que% c va a ser el marcador de posición para la impresión de un carácter. 550 00:40:47,280 --> 00:40:50,420 Así que tenemos César, y ahora pasamos a Vigenère, 551 00:40:50,420 --> 00:40:57,580 que es muy similar a César, pero sólo un poco más complejo. 552 00:40:57,580 --> 00:41:03,310 Así que, esencialmente con Vigenère es que va a estar pasando en una palabra clave. 553 00:41:03,310 --> 00:41:06,510 Así que en lugar de un número, vamos a tener una cadena, 554 00:41:06,510 --> 00:41:09,200 y por lo que va a actuar como su palabra clave. 555 00:41:09,200 --> 00:41:14,440 Entonces, como siempre, va a llegar el aviso de una cadena del usuario 556 00:41:14,440 --> 00:41:19,050 y luego cifrar y luego darles la espalda texto cifrado. 557 00:41:19,050 --> 00:41:24,650 Así que como he dicho, es muy similar a la de César, pero en lugar de cambiar por un cierto número, 558 00:41:24,650 --> 00:41:30,620 el número es en realidad va a cambiar cada vez de un personaje a otro. 559 00:41:30,620 --> 00:41:34,890 Representar a que el número real de cambiar, es representado por las letras del teclado. 560 00:41:34,890 --> 00:41:43,150 Así que si se introduce en un cambio de una, por ejemplo, a continuación, que correspondería a un cambio de 0. 561 00:41:43,150 --> 00:41:45,900 Así que es de nuevo para volver al índice alfabético. 562 00:41:45,900 --> 00:41:49,100 ¿Cuál podría ser útil si está viendo que en realidad estamos tratando con valores ASCII 563 00:41:49,100 --> 00:41:51,790 así como las letras, así como el índice alfabético, 564 00:41:51,790 --> 00:41:58,020 tal vez encontrar o hacer su propia tabla ASCII que muestra el índice alfabético de 0 a 25, 565 00:41:58,020 --> 00:42:03,750 aa la z, y los valores ASCII de modo que usted puede ver el tipo de relación 566 00:42:03,750 --> 00:42:07,020 y esbozar y tratar de encontrar algunos patrones. 567 00:42:07,020 --> 00:42:11,010 Del mismo modo, si usted estaba cambiando en la instancia determinada por f - 568 00:42:11,010 --> 00:42:21,110 y esto es o bien f minúscula o mayúscula - a continuación, que correspondería a 5. 569 00:42:21,110 --> 00:42:24,180 ¿Estamos bien hasta ahora? 570 00:42:25,770 --> 00:42:30,050 La fórmula de Vigenère es un poco diferente. 571 00:42:30,050 --> 00:42:32,960 Básicamente, se ve que es igual que César, 572 00:42:32,960 --> 00:42:37,390 pero en lugar de k tenemos k solo índice j. 573 00:42:37,390 --> 00:42:44,810 Tenga en cuenta que no estamos usando i porque en esencia, la longitud de la palabra clave 574 00:42:44,810 --> 00:42:49,850 no es necesariamente la longitud de nuestro texto cifrado. 575 00:42:49,850 --> 00:42:56,130 Este será un poco más claro cuando vemos un ejemplo que tengo un poco más adelante. 576 00:42:56,130 --> 00:43:03,160 Básicamente, si ejecuta el programa con una palabra clave de ohai, 577 00:43:03,160 --> 00:43:08,560 entonces eso significa que cada vez, ohai va a ser tu turno. 578 00:43:08,560 --> 00:43:11,060 Así que dependiendo de qué posición está en la palabra clave, 579 00:43:11,060 --> 00:43:15,800 que va a cambiar su carácter determinado texto cifrado en esa cantidad. 580 00:43:15,800 --> 00:43:19,630 Una vez más, al igual que César, queremos asegurarnos de preservar la capitalización de las cosas 581 00:43:19,630 --> 00:43:22,900 y nosotros sólo letras cifrar y no caracteres o espacios. 582 00:43:22,900 --> 00:43:26,330 Así que mirar hacia atrás a César en las funciones que usted pudo haber utilizado, 583 00:43:26,330 --> 00:43:32,570 la forma en que usted decide cómo cambiar las cosas, y aplicar eso a su programa aquí. 584 00:43:32,570 --> 00:43:35,260 Así que vamos a mapear esto. 585 00:43:35,260 --> 00:43:39,680 Contamos con un texto claro que hemos recibido por parte del usuario de GetString 586 00:43:39,680 --> 00:43:44,090 Al decir esto ... CS50 es! 587 00:43:44,090 --> 00:43:47,090 Entonces tenemos una palabra clave de ohai. 588 00:43:47,090 --> 00:43:50,930 Los 4 primeros caracteres son bastante simples. 589 00:43:50,930 --> 00:43:55,580 Sabemos que T va a ser desplazado por O, 590 00:43:55,580 --> 00:44:01,990 entonces h va a ser desplazado por h, i va a ser desplazado por una. 591 00:44:01,990 --> 00:44:04,610 Aquí vemos que a representa 0, 592 00:44:04,610 --> 00:44:11,940 así, el valor final es en realidad la misma letra que antes. 593 00:44:11,940 --> 00:44:15,250 Entonces s es desplazado por i. 594 00:44:15,250 --> 00:44:19,370 Pero entonces usted tiene estos períodos aquí. 595 00:44:19,370 --> 00:44:25,960 No queremos que para cifrar, por lo que entonces no lo cambio por nada 596 00:44:25,960 --> 00:44:31,280 y sólo imprimir el periodo sin cambios. 597 00:44:31,280 --> 00:44:38,020 [Estudiante] No entiendo cómo sabes que esta se desplaza por - ¿De dónde te - >> Oh, lo siento. 598 00:44:38,020 --> 00:44:41,620 En la parte superior se ve que aquí la línea de comandos ohai argumento aquí, 599 00:44:41,620 --> 00:44:43,740 que va a ser la palabra clave. 600 00:44:43,740 --> 00:44:49,550 Así que, básicamente, estás en bicicleta a través de los personajes de la palabra clave. 601 00:44:49,550 --> 00:44:52,020 [Estudiante] Así que o se va a desplazar el mismo - 602 00:44:52,020 --> 00:44:56,260 Así O corresponde a un cierto número en el alfabeto. 603 00:44:56,260 --> 00:44:58,400 [Estudiante] Derecho. Pero, ¿de dónde sacaste la parte de CS50? 604 00:44:58,400 --> 00:45:02,540 Oh. Eso está en GetString donde usted es como, "Dame una cadena a codificar." 605 00:45:02,540 --> 00:45:07,510 [Estudiante] Ellos te van a dar ese argumento para cambiar por 606 00:45:07,510 --> 00:45:09,380 y luego se le pedirá su primera cadena. Sí >>. 607 00:45:09,380 --> 00:45:12,440 Así que cuando se ejecuta el programa, se van a incluir la palabra clave 608 00:45:12,440 --> 00:45:14,740 en sus argumentos de línea de comandos cuando se ejecuta. 609 00:45:14,740 --> 00:45:19,740 Luego, una vez que haya comprobado que en realidad han dado una y no más, ni menos, 610 00:45:19,740 --> 00:45:23,750 entonces usted va a solicitar una cadena, por ejemplo: "Dame una cadena." 611 00:45:23,750 --> 00:45:27,630 Así que ahí es donde en este caso se ha dado esta ... CS50 es! 612 00:45:27,630 --> 00:45:32,090 Así que vas a utilizar y el uso que ohai y iterar. 613 00:45:32,090 --> 00:45:38,200 Tenga en cuenta que aquí nos saltamos sobre la encriptación de los períodos, 614 00:45:38,200 --> 00:45:51,660 pero en cuanto a nuestra posición para ohai, el siguiente que usamos o. 615 00:45:51,660 --> 00:45:54,990 En este caso es un poco más difícil de ver porque es 4, 616 00:45:54,990 --> 00:45:57,710 así que vamos a seguir un poco. Sólo quédate conmigo aquí. 617 00:45:57,710 --> 00:46:02,960 Entonces tenemos i y s, que luego se traducen por O y H, respectivamente. 618 00:46:02,960 --> 00:46:09,370 Entonces tenemos un espacio, y así entonces sabemos que no vamos a cifrar los espacios. 619 00:46:09,370 --> 00:46:18,930 Pero nótese que, en lugar de ir a una en este lugar aquí, 620 00:46:18,930 --> 00:46:28,330 estamos cifrando por un - no sé si se puede ver que - aquí mismo. 621 00:46:28,330 --> 00:46:33,710 Así que no es como si en realidad predeterminado, por ejemplo, o va aquí, h va aquí, 622 00:46:33,710 --> 00:46:39,200 una va aquí, me va aquí, o, h, a., i, o, h, a, i No hagas eso. 623 00:46:39,200 --> 00:46:43,760 Sólo cambiar su posición en la palabra clave 624 00:46:43,760 --> 00:46:51,020 cuando usted sabe que usted está realmente va a cifrar una letra real. 625 00:46:51,020 --> 00:46:53,920 ¿Tiene esa clase de sentido? 626 00:46:53,920 --> 00:46:55,800 Bien. 627 00:46:56,490 --> 00:46:58,500 Así que sólo algunos recordatorios. 628 00:46:58,500 --> 00:47:03,760 Usted quiere asegurarse de que sólo avanzar a la siguiente letra de la palabra clave 629 00:47:03,760 --> 00:47:06,390 si el personaje en su texto plano es una letra. 630 00:47:06,390 --> 00:47:09,120 Así que decir que estamos en el o. 631 00:47:09,120 --> 00:47:19,310 Nos damos cuenta de que el siguiente carácter, el índice i del texto plano, es un número, por ejemplo. 632 00:47:19,310 --> 00:47:31,630 Entonces no avanzamos j, el índice de palabras clave, hasta llegar otra carta. 633 00:47:31,630 --> 00:47:36,230 Una vez más, usted también quiere asegurarse de que usted envolvente al principio de la palabra clave 634 00:47:36,230 --> 00:47:37,770 cuando estás en el final de la misma. 635 00:47:37,770 --> 00:47:42,030 Si usted ve aquí estamos en i, el siguiente tiene que ser o. 636 00:47:42,030 --> 00:47:47,690 Así que usted quiere encontrar la manera de poder envolvente al principio de la palabra clave 637 00:47:47,690 --> 00:47:49,470 cada vez que se llega al final. 638 00:47:49,470 --> 00:47:55,040 Y de nuevo, ¿qué tipo de operador es útil en este caso para envolver alrededor? 639 00:47:56,630 --> 00:47:59,840 Al igual que en el recuento de ejemplo. 640 00:47:59,840 --> 00:48:03,710 [Estudiante] El signo de porcentaje. >> Sí, el signo de porcentaje, que es módulo. 641 00:48:03,710 --> 00:48:11,250 Así módulo será muy útil aquí cuando desea ajustar el índice en su ohai. 642 00:48:11,250 --> 00:48:17,700 Y sólo una pista rápida: Trate de pensar de envolver sobre la palabra clave un poco como la de contar, 643 00:48:17,700 --> 00:48:23,590 donde si hay 3 grupos, la persona cuarto, 644 00:48:23,590 --> 00:48:30,610 el número que dijo fue 4 mod 3, que fue de 1. 645 00:48:30,610 --> 00:48:32,880 Así que tratar de pensar en él de esa manera. 646 00:48:34,770 --> 00:48:42,740 Como se vio en la fórmula, siempre que tengas y luego ci pi pero luego kj, 647 00:48:42,740 --> 00:48:44,700 usted querrá asegurarse de que usted mantenga un registro de las personas. 648 00:48:44,700 --> 00:48:47,580 No es necesario que lo llame yo, no es necesario llamarlo j, 649 00:48:47,580 --> 00:48:53,270 pero desea asegurarse de que el seguimiento de la posición que usted está en texto plano en su 650 00:48:53,270 --> 00:48:55,790 así como la posición que usted está en su palabra clave 651 00:48:55,790 --> 00:48:59,840 porque esos no son necesariamente va a ser el mismo. 652 00:48:59,840 --> 00:49:06,400 No sólo la palabra clave - que podría ser una longitud completamente diferente de su texto claro. 653 00:49:06,400 --> 00:49:09,140 Además, su texto claro, hay números y caracteres, 654 00:49:09,140 --> 00:49:14,450 por lo que no va a coincidir perfectamente juntos. Sí. 655 00:49:14,450 --> 00:49:19,280 [Estudiante] ¿Existe una función para alternar mayúsculas y minúsculas? 656 00:49:19,280 --> 00:49:24,530 ¿Se puede cambiar una a mayúscula? >> Sí, definitivamente lo es. 657 00:49:24,530 --> 00:49:27,890 Usted puede comprobar fuera - Creo que es toupper, toda palabra 1. 658 00:49:30,650 --> 00:49:36,310 Pero cuando usted está tratando de cifrar las cosas y conservar el texto, 659 00:49:36,310 --> 00:49:39,350 lo mejor es básicamente tener causas distintas. 660 00:49:39,350 --> 00:49:42,040 Si se trata de una mayúscula, entonces usted quiere cambiar por este 661 00:49:42,040 --> 00:49:46,460 porque en la fórmula, cuando uno mira hacia atrás como tenemos que tipo de go 662 00:49:46,460 --> 00:49:50,900 indistintamente entre la forma de ASCII que representa los números 663 00:49:50,900 --> 00:49:55,020 y el propio índice alfabético, que quiere asegurarse de 664 00:49:55,020 --> 00:50:01,850 que va a haber algún tipo de patrón que se va a utilizar. 665 00:50:01,850 --> 00:50:04,580 Otra nota en el patrón, en realidad. 666 00:50:04,580 --> 00:50:07,250 Usted va a ser sin duda tratar con números. 667 00:50:07,250 --> 00:50:11,280 Trate de no usar números mágicos, que es un ejemplo de estilo. 668 00:50:11,280 --> 00:50:18,470 Así que dices que quieres algo cada cambio de tiempo por gusto - 669 00:50:18,470 --> 00:50:22,400 Bueno, por lo toque, otro spoiler es cuando usted va a estar cambiando algo 670 00:50:22,400 --> 00:50:26,310 por cierto, trata de no representa que por un número real 671 00:50:26,310 --> 00:50:32,810 sino más bien tratar de ver si se puede utilizar el valor ASCII, que tipo de tener más sentido. 672 00:50:32,810 --> 00:50:35,470 Otra nota: Debido a que estamos tratando con fórmulas, 673 00:50:35,470 --> 00:50:41,200 a pesar de que su TF se sabe qué tipo de patrón que podría estar usando, 674 00:50:41,200 --> 00:50:44,430 mejor en su clase de comentarios de explicar la lógica, como, 675 00:50:44,430 --> 00:50:51,880 "Estoy usando este patrón porque ..." y la clase de explicar el patrón de manera sucinta en sus comentarios. 676 00:50:54,090 --> 00:50:58,990 [Este tutorial fue 2] Si no hay otras preguntas, entonces me quedaré aquí un poco. 677 00:50:58,990 --> 00:51:04,370 Buena suerte con su conjunto de procesadores 2: Crypto y gracias por venir. 678 00:51:06,070 --> 00:51:08,620 [Estudiante] Gracias. Gracias >>. 679 00:51:09,220 --> 00:51:10,800 [Intro Medios Offline]