JavaRush /Blog Java /Random-ES /Harvard CS50: Asignaciones de la semana 2 (Conferencias 5...
Masha
Nivel 41

Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6)

Publicado en el grupo Random-ES
tareas cs50 para las conferencias 5 y 6 Las conferencias de CS50 están aquí: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngcs50.html . Este material contiene 3 tareas, información teórica sobre las mismas y una guía de acción.

Objetivos

• Profundizar en funciones y bibliotecas. • Familiarizarse con la criptografía, implementar un par de cifrados simples.

Materiales adicionales

https://reference.cs50.net/: explicación de las funciones de la biblioteca utilizadas durante la capacitación. En Inglés. http://computer.howstuffworks.com/c.htm páginas 11 – 14 y 39

Preparación

Inicie sesión en cs50.io update50 para asegurarse de que la versión de su espacio de trabajo esté actualizada. Si cierra accidentalmente la ventana de la terminal, vaya al menú Ver y asegúrese de que haya una marca de verificación junto al elemento Consola (márquela si no es así). Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 1 Haga clic en (+), dentro del círculo verde en el marco de la ventana de la terminal, seleccione Nueva Terminal . Harvard CS50: Asignaciones de la Semana 2 (Conferencias 5 y 6) - 2 Cree un directorio de trabajo: mkdir ~/workspace/pset2 tenga en cuenta que hay un espacio entre mkdir y ~/workspace/pset2 . En resumen, ~ significa el directorio raíz, ~/workspace es una carpeta llamada workspace dentro del directorio raíz, ~/workspace/pset2 es un directorio llamado pset2 dentro de ~/workspace . Ahora ejecute: cd ~/workspace/pset2 para cambiar al nuevo directorio. La línea de comando se parece a esta: username:~/workspace/pset2 $ Si hay algún problema, repita los pasos. También puede llamar a un comando history para ver los últimos comandos en orden cronológico. También puede colocar el cursor en la línea de comando y presionar la flecha hacia arriba en su teclado para ver todos los comandos en orden desde el último ingresado hasta el primero. Usando el botón hacia abajo puedes regresar. Por cierto, en lugar de escribir los mismos comandos cada vez, puede desplazarse por los comandos que ya ha escrito y ejecutarlos nuevamente presionando Enter. Quizás hayas notado que David hace exactamente esto en sus conferencias. Las tareas de la segunda semana deben guardarse en pset2 .

Tarea 0. Inicialización

Echemos un vistazo más de cerca a las líneas. En el archivo iniciales.c , escriba un programa que solicite el nombre del usuario (usando la función GetString obtenemos el nombre como una cadena) y luego muestra las primeras letras del nombre (o nombres) y apellido en mayúsculas sin espacios, puntos u otros caracteres, solo con un avance de línea ( \n ). Suponemos que los usuarios ingresan solo letras (minúsculas, mayúsculas o ambas) más un espacio entre palabras. Considere que tipos llamados Joseph Gordon-Levitt, Conan O'Brien o David J. Malan no usarán el programa. Para comprobar el correcto funcionamiento del programa llama a check50: ¿Quieres jugar con la implementación del programa elaborado por el personal de CS50? Escriba la línea: username:~/workspace/pset2 $ ./initials Zamyla Chan ZC username:~/workspace/pset2 $ ./initials robert thomas bowden RTBcheck50 2015.fall.pset2.initials initials.c~cs50/pset2/initials
Criptografía
Criptografía, la ciencia de cifrar y descifrar información... De hecho, los mensajes cifrados existen desde la antigüedad y eran utilizados por los ejércitos para transmitir mensajes secretos. Bueno, ahora tus contraseñas en Facebook y otras redes se almacenan de forma cifrada.

Tarea 1. ¡Ave, César!

Información teórica
Estudiaremos uno de los cifrados más simples: el cifrado César, que lleva el nombre del emperador romano. En este cifrado, cada letra del texto se reemplaza por otra, que es un número fijo de letras inferiores en el alfabeto. Este número fijo de letras se llama clave . Entonces, la clave 1 transforma la letra latina C en la letra D, y Z a través del ciclo en A. Si la clave es 3, entonces la letra C se transformará en F y Z en C. Ejemplos: usamos el cifrado César con Clave 5 sobre la palabra gato. c -> h a -> f t -> y Caesar (cat, 5) = hfy Clave = 7, palabra = computadora c->j o->v m->t p->w u->b t->a e->l r->y Caesar(computer,7) = jvtwbaly Harvard CS50: Asignaciones de la Semana 2 (Conferencias 5 y 6) - 3 El cifrado César es simple, pero, por desgracia, poco confiable (¡estas son cosas interconectadas!): para el alfabeto inglés solo hay 25 opciones de cifrado, es fácil revisar todas las opciones incluso sin una computadora. Sin embargo, el cifrado César se utiliza a menudo como paso en otros cifrados, como el cifrado Vigenère (más sobre esto en el siguiente párrafo). "Matematicicemos" el cifrado César. Denotemos el texto sin formato con la letra p, pi es la letra del texto p que está en la posición número i. Llamemos a la letra de la clave secreta k, c el texto cifrado y ci a la letra del texto cifrado que está en la posición i. Luego podrás calcular cada letra del cifrado usando la fórmula: ci = (pi + k) % 26 Acostúmbrate a esta formalización, te permite programar el algoritmo y expresa el significado del cifrado de manera precisa y concisa. Si la clave k = 13 y el texto original p es "¡Asegúrate de beber tu Ovaltine!", este es el cifrado que obtenemos: Or fher gb qevax lbhe Binygvar! Note que O (la primera letra en el texto cifrado) se desplaza 13 posiciones desde la letra B (la primera letra del texto original). Lo mismo ocurre con la letra r (la segunda letra en el cifrado) que se desplaza 13 letras de la e (la segunda letra en el original). La tercera letra en el cifrado, f, se desplaza 13 letras de la s (la tercera en el original), aquí vamos en un círculo de z a a. Un cifrado César con clave 13 tiene el nombre especial ROT13 . Es simétrico: aplicándolo dos veces volvemos al texto original. Por supuesto, también existe ROT26, este generalmente es súper seguro, pero solo si no expresas tus pensamientos claramente =).
Condición
Escriba en el archivo caesar.c un programa que encripte texto usando el cifrado César. Proporcione un argumento de línea de comando como entrada al programa: un número entero no negativo. Para simplificar, llamémoslo k. Si el usuario ejecuta el programa sin argumentos de línea de comando o con más de un argumento, la aplicación debería quejarse y devolver el valor 1 (así es como generalmente se denotan los errores): return 1; en todos los demás casos, el programa solicita al usuario el texto para cifrar, luego muestra el texto cifrado con la clave k (es decir, desplazado k posiciones hacia la derecha a lo largo del ciclo). Si el texto contiene caracteres que están fuera del alfabeto inglés, el programa no los cambia. Después de imprimir el texto cifrado, la aplicación sale y main devuelve 0: return 0; si main no devuelve cero explícitamente, lo devuelve automáticamente (int es en realidad el tipo de retorno de main, pero hablaremos de eso en otro momento). De acuerdo con la convención (las reglas de buena forma en programación), si devuelve explícitamente 1 para indicar un error, entonces también debe devolver 0 como indicador de la finalización exitosa del programa. Aunque sólo hay 26 letras en el alfabeto inglés, k puede ser mayor que 26. Básicamente, la clave k = 27 dará el mismo resultado que k = 1, pero debes permitir que el usuario ingrese cualquier número no negativo que no sea negativo. superior a 2^31 – 26 (debe caber en int). El programa también debe tener en cuenta que las letras minúsculas se cifran en minúsculas y las letras mayúsculas se cifran en mayúsculas. ¿Donde empezamos? Dado que la aplicación debe aceptar el valor de k directamente en la cadena de argumento, el encabezado de nuestra función principal se ve así: int main(int argc, string argv[]) Del Capítulo 6, sabes que argv es una matriz de cadenas. Se puede considerar el conjunto como una hilera de taquillas en un gimnasio. Cada uno de ellos tiene algún significado oculto. En nuestro caso, dentro de cada celda hay un argumento como string Para abrir el primer casillero usamos argv[0], el segundo - argv[1], y así sucesivamente. Si tenemos n bloqueos, entonces debemos detenernos en argv[n - 1], ya que argv[n] ya no existe (o existe, pero pertenece a otra persona, es mejor que no lo toquemos). Entonces puedes acceder al argumento k de esta manera: string k = argv[1]; ¡Creemos que realmente hay algo ahí! Recuerde que argc es una variable int igual al número de filas en argv. Esto significa que es mejor comprobar el valor de argc antes de intentar abrir la celda, porque puede resultar que no exista. Idealmente argc = 2. ¿Por qué es así? Dentro de argv[0] suele estar el nombre del programa. Es decir, argc siempre es al menos 1. Pero nuestro programa necesita que el usuario proporcione un argumento k en la línea de comando, por lo tanto, argc = 2. Naturalmente, si el usuario ingresa más de un argumento en la línea de comando, argc también crece y puede ser mayor que 2 Si el usuario ingresa un número entero en una cadena, esto no significa que el valor ingresado se almacenará automáticamente como un int. Más precisamente, NO lo hará. ¡Será una cadena, incluso si se parece exactamente a un int! Entonces necesitamos convertir string a int nosotros mismos. Afortunadamente, existe una función llamada atoi diseñada para este propósito. Su sintaxis es: int k = atoi(argv[1]); Tenga en cuenta que k es de tipo int, por lo que puede hacer aritmética con él. Con esta función, no tiene que preocuparse por si el usuario ingresa un número entero o, digamos, foo: en ese caso, atoi devolverá 0. La función atoi se declara en la biblioteca stdlib.h , así que asegúrese de # incluirlo al inicio del programa. El código se compilará sin esto, ya que ya hemos incluido esta función en la biblioteca cs50.h. Sin embargo, es mejor confiar en las bibliotecas nativas. Entonces tienes k almacenado como un int. Ahora solicitemos entrada de texto. Si realizó las tareas de la primera semana, ya está familiarizado con la función de la biblioteca CS50 llamada GetString. Ella nos ayudará. Una vez que haya recibido k y el texto inicial, comencemos el cifrado. En resumen, puede recorrer todos los caracteres de una cadena e imprimirlos usando el siguiente bucle: for (int i = 0, n = strlen(p); i < n; i++) { printf("%c", p[i]); } En otras palabras, al igual que argv es una matriz de cadenas, cadena es una matriz de caracteres. Por lo tanto, podemos usar corchetes para acceder a elementos de cadena individuales de la misma manera que obtenemos cadenas individuales en argv. Por supuesto, no hay nada criptográfico en imprimir cada uno de los caracteres. O, técnicamente, cuando k = 0. ¡Pero debemos ayudar a César a cifrar su texto! ¡Alabad al cesar! Para usar strlen, debe incluir otra biblioteca . Dado que estamos automatizando algunas pruebas de validación, el programa debería comportarse exactamente así: username:~/workspace/pset2 $ ./caesar 13 Be sure to drink your Ovaltine! Or fher gb qevax lbhe Binygvar! además de atoi , puedes encontrar otras funciones interesantes en las bibliotecas ctype.h y stdlib.h . Para ello, sigue el enlace y hurga un poco por allí. Por ejemplo, isdigit es claramente algo interesante =). Al pasar de Z a A (o de z a a), no te olvides del operador de módulo %en lenguaje C. Estudie también la tabla , muestra caracteres ASCII no solo para letras. Para comprobar que el programa funciona correctamente con check50 , haz lo siguiente: check50 2015.fall.pset2.caesar caesar.c Y si estás interesado en jugar con el código elaborado por el staff de CS50, ejecuta el comando: ~cs50/pset2/caesar Por cierto, uggc://jjj.lbhghor.pbz/jngpu ?i=bUt5FWLEUN0 .
Análisis de la tarea.
  1. Consigue la llave
  2. Obtener texto
  3. cifrar
  4. Mostrar un mensaje cifrado
1. Formamos la función principal para que el usuario ingrese la clave en la línea de comando y verifique que la clave sea correcta. int main(int argc, string argv[]) argc: • int • número de argumentos ingresados ​​en la línea de comando • si argc = 2 todo está bien. De lo contrario, imprima las instrucciones y cierre el programa. • Si argc = 2 verificamos si la clave es un número entero. • Argv es una matriz de cadenas, una lista con argumentos ingresados ​​en ella. La matriz es una estructura de datos que contiene diferentes datos del mismo tipo en diferentes celdas. Harvard CS50: Asignaciones de la Semana 2 (Conferencias 5 y 6) - 4 Por ejemplo, el usuario ingresó la cadena despegue Team Rocket, luego: Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 5 Usando la función atoi(), convertimos el número resultante en un número entero. Si esto no es posible, la función devolverá 0. Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 6 2. Solicite texto al usuario. Es simple: todo lo que ingresa el usuario es una cadena. 3. Cifrado. El algoritmo es sencillo, pero ¿cómo explicarle al ordenador qué letras van una tras otra? ¡Es hora de recordar la tabla ASCII! Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 7 Sin embargo, en una cadena puede haber más que solo letras... Antes de pasar a cambiar cadenas, imagina que solo necesitas cambiar un carácter. Queremos cambiar las letras del texto inicial, no los signos ni los números. ¿Qué debemos hacer? Primero debemos verificar si este carácter está en el alfabeto. Esto se puede hacer usando la función isalpha() . Si el carácter está en el alfabeto, esta función devuelve verdadero y falso en caso contrario. Dos funciones más útiles: isupper() e islower() devuelven verdadero si la letra está en mayúscula o minúscula, respectivamente. Por lo tanto: Isalpha(‘Z’) -> true Isalpha(‘;’) -> false Isupper(‘Z’) ->true Isupper(‘z’) -> false Islower(‘Z’) -> false Islower(‘z’)->true si isalpha devuelve verdadero, necesitamos cambiar este carácter usando la tecla. Consideremos y analicemos como ejemplo el programa de Zamili, el asistente del CS50. Quizás se pregunte por qué 'A' es un número entero cuando claramente es una letra. Resulta que los símbolos y los números enteros son intercambiables. Al poner la letra A entre comillas simples puedes obtener su código ASCII en int. Tenga cuidado: necesita comillas simples; sin ellas, el compilador buscará una variable llamada A, no un símbolo. Luego, en línea , agregamos el valor clave al código ASCII de la letra y los almacenamos en una variable entera. Incluso si el resultado es un int, la declaración printf usa el marcador de posición %c para los caracteres. Entonces el programa imprime el carácter asociado con el resultado entero. En el segundo caso, mostramos el número usando el marcador de posición %d. Puedes ingresar este código en cs50 IDE y jugar con él. Veamos cómo funciona asciimath para diferentes claves. Tomemos el valor 25, veremos la siguiente imagen: Y ahora dejemos que la clave sea 26: Tenemos [, y no la letra A. Es solo el siguiente carácter ASCII después de Z. Así que simplemente agregar la clave no trabajar. Necesitamos usar una fórmula de cifrado para volver al principio del alfabeto tan pronto como nos quedemos sin letras. Recuerde, ya escribimos arriba: /* * asciimath.c * by Zamyla Chan * * Calculates the addition of a char and an integer, * and displays both the resultant character and its * ASCII value. * * Usage: ./asciimath key [char] * */ #include #include #include int main(int argc, string argv[]) { if (argc != 2) { printf("print the key next time \n"); return 1; } // key is the second command line argument int key = atoi(argv[1]); //преобразование строки в int int letter = 'A'; printf("\nCalculating '%c' + %d...\n", letter, key); int result = (letter + key); printf("The ASCII value of %c is %d.\n\n", result, result); return 0; } int result = (letter + key);Harvard CS50: Tareas de la Semana 2 (Conferencias 5 y 6) - 8Harvard CS50: Asignaciones de la Semana 2 (Conferencias 5 y 6) - 9ci = (pi + k) % 26 Donde ci es la letra número i en el texto cifrado, pi es la letra número i en el texto sin formato, k es la clave y %26 es el resto de la división por 26 (o “módulo 26”). Apliquemos esta fórmula a la letra Y. Tome k = 2. Calcule ('Y' + 2) %26 código ASCII de la letra 'Y' = 89. Entonces ('Y' + 2) %26 = (89 + 2 )% 26 = 91%26 = 13 Pero este no es el valor ASCII de la letra A que necesitamos, que es 65. Ahora démosle a cada letra del alfabeto un valor del 0 al 25 en orden. En este caso, Y = 24. (24+2)%26 = 0 La letra A tiene precisamente ese índice. Por tanto, esta fórmula se refiere al índice alfabético de letras, no a sus valores ASCII. Para imprimir un carácter cifrado necesitará su valor ASCII. Y descubre cómo cambiar entre un valor ASCII y un número del alfabeto. Una vez que hayamos descubierto la fórmula para un carácter, debemos aplicarla a cada letra de la cadena ingresada desde el teclado. ¡Pero sólo si son letras! Y recuerde, las letras mayúsculas y minúsculas requieren significados diferentes. Aquí es donde las funciones isupper e islower resultan útiles. Podrás tener dos fórmulas, una para letras mayúsculas, otra para letras minúsculas, las funciones te ayudarán a elegir cuál aplicar. ¿Cómo aplicar una fórmula a cada carácter de una cadena? Recuerde que una cadena es sólo una serie de caracteres. La función strlen (longitud de la cadena) le ayudará a determinar el número de iteraciones en un bucle .Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 10

Tarea 2. ¿Parlez-vous français?

Teoría
El cifrado Vigenère es algo más seguro que el cifrado César: utiliza una palabra como clave y es difícil de descifrar manualmente utilizando análisis de frecuencia o fuerza bruta únicamente. Cada letra de la clave genera un número y, como resultado, obtenemos varias claves para cambiar letras. Ejemplo: p = Meet me in the park at eleven am В качестве ключевого слова возьмем k = bacon Длина mensajes p = 25 В то время Cómo длина k = 5 Поэтому его нужно повторять 5 раз. Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 11 Si el número de letras del mensaje no es divisible por la clave, usamos solo una parte en la última aplicación de la clave: Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 12 Para encontrar el valor del desplazamiento, usamos las posiciones de cada letra de nuestra clave de tocino. en el alfabeto (de la a a la z). Contamos desde cero, como auténticos programadores. Y cada letra del texto original se desplaza un número determinado, como en el cifrado César, volviendo, si es necesario, después de la Z al principio del alfabeto. Entonces M se moverá 1, la primera e no se moverá en absoluto y la segunda se moverá 2 posiciones. A continuación ves el mensaje original, la clave escrita y el resultado de su aplicación. Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 13 El cifrado de Vigenère es, por supuesto, más seguro, pero si se conoce la longitud de la clave, es bastante fácil de descifrar. ¿Cómo identificarlo? Si el texto original es lo suficientemente largo como para que algunas palabras aparezcan varias veces en él, verás algunas repeticiones: Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 14 También puedes usar la fuerza bruta, pero hay muchas opciones: 26^n – 1 donde n es la longitud de la clave desconocida . Pero normalmente esto es mucho. Es cierto que esto no es un problema para una computadora. Y ahora las matemáticas del cifrado: sea p un texto, k sea la palabra clave, kj sea la j-ésima letra de la clave, pi sea la letra número i en el texto original, ci sea la letra número i en el cifrado. . Entonces: ci = (pi + kj) % 26
Ejercicio
Condición Escriba un programa vigenere.c que encripte un mensaje usando el cifrado Vigenere. Proporcionamos un argumento de línea de comando a la entrada del programa: la palabra clave k, que consta de letras del alfabeto inglés. Si la aplicación se inicia con más de un argumento o con un argumento no incluido en el alfabeto, es necesario mostrar información de error y finalizar el programa. Es decir, main devolverá 1; en este caso, nuestras pruebas automáticas entenderán que todo está bien aquí y esta condición se tendrá en cuenta. Si todo está bien, el programa debe proceder a solicitar una cadena de texto p, la cual ciframos con la clave k obtenida anteriormente, imprimir el resultado y completar el programa, devolviendo el valor 0. Aclaración Es necesario asegurarse de que en la clave k los caracteres A y a se designan como 0, B y b como 1, ..., Z yz como 25. El programa debe aplicar el cifrado Vigenère sólo a las letras del texto p. Los caracteres restantes (números, signos de puntuación, espacios) deben imprimirse sin cambios. Si el algoritmo va a aplicar el carácter j-ésimo k al carácter i-ésimo p que no está en el alfabeto, aplique ese carácter clave j-ésimo al siguiente carácter alfabético del texto; no puedes simplemente dejarlo y pasar a otro personaje en k. Finalmente, el programa debe preservar el caso de cada letra en p .
¿No sabes por dónde empezar?
Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 15
Aquí hay algunos consejos de Zamilya, asistente del curso CS50
Afortunadamente, el programa es muy similar al cifrado César, sólo que la clave es una cadena en lugar de un número entero. Si ha implementado con éxito el cifrado del nombre del gobernante romano, puede ser un gran comienzo para la segunda tarea. Probablemente ya te hayas dado cuenta de que el cifrado Vigenère con una letra como clave es el mismo que el cifrado César. El algoritmo de Vigenère utiliza los mismos pasos que César:
  1. Consigue la llave
    • palabra clave es el segundo argumento de la línea de comando argv[1]
    • debe estar en el alfabeto: función isalfa
  2. Obtener texto
  3. cifrar
  4. Imprimir texto cifrado
Entonces, verifiquemos el segundo argumento de la línea de comando argv[1] para ver si pertenece a caracteres alfabéticos. Hacemos esto usando el ya familiar isalpha . Si la clave es correcta, recibimos una cadena del usuario y comenzamos el cifrado. La fórmula de cifrado de Vigenère es similar a la fórmula de cifrado de César. ¿Cómo se convierte una letra al desplazamiento de cifrado correspondiente? Intente comparar los valores usando la tabla ASCII. Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 16 Lo más probable es que puedas encontrar un patrón entre las letras y sus índices alfabéticos usando las secuencias de la tabla. ¿Has descubierto cómo restar una letra de otra para obtener el resultado deseado? Los desplazamientos para letras mayúsculas y minúsculas son los mismos, por lo que tendrás que definir dos fórmulas similares para determinar el desplazamiento para letras minúsculas y por separado para letras mayúsculas. Recuerde también que el bucle de texto debe ignorar los caracteres que no estén en inglés. Y no olvide conservar las letras en mayúscula. Si observa la fórmula de cifrado: ci = (pi + kj) % 26 verá dos variables de índice, i y j. Uno guarda la posición en el texto fuente, el otro en la clave. Si su texto es más largo que la clave, el índice de la clave va desde el final de la clave hasta el principio. ¿Cómo hacerlo? ¡Usando la operación de división de módulo! El resultado de la operación es el resto de la división de dos números. ¡Los beneficios prácticos de esta operación en programación son simplemente enormes! Imagine que es necesario dividir un grupo grande de personas en tres subgrupos. Una forma de hacerlo es pedirles que paguen por el primero, el segundo y el tercero. Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 17 Es decir, la primera persona pertenece al primer grupo, la segunda al segundo, la tercera al tercero, la cuarta nuevamente al primero, y así sucesivamente. Puede utilizar la división de módulo para realizar la misma operación. Numeremos los mismos tres grupos desde cero. Aquí se explica cómo hacerlo: Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 18 si toma un índice y lo divide en módulo por el valor máximo, el resultado resultante nunca será mayor o igual a ese valor. Pruebe este principio para devolver una palabra clave al principio. Solo que en lugar de ordenar por grupo necesita el índice de la palabra clave para poder compensar la letra correcta sin sobrepasar la longitud de la clave. Dado que estamos automatizando algunas pruebas de su código, el programa debería comportarse como se muestra a continuación: jharvard@appliance (~/Dropbox/pset2): ./vigenere bacon Meet me at the park at eleven am Negh zf av huf pcfx bt gzrwep oz ¿De qué otra manera puede probar el programa además de calcular manualmente el texto cifrado? Somos amables: para ello escribimos el programa devigenere . Se necesita uno y sólo un argumento de línea de comando (palabra clave), y su trabajo es tomar texto cifrado como entrada y devolver texto sin formato. Ejecútelo: ~cs50/pset2/devigenere k donde k es la palabra clave. Si desea verificar la corrección de su programa usando check50, ejecute: check50 2014.fall.pset2.vigenere vigenere.c Y si desea evaluar nuestra implementación vigenere, escriba: ~cs50/pset2/vigenere

Cómo validar tu código y obtener notas

¡Atención! Si es importante para usted verificar solo la corrección de las tareas, utilice cs50check. Si desea obtener calificaciones en la plataforma edx, siga el procedimiento que se describe a continuación. Tenga en cuenta que este procedimiento utiliza el mismo cs50check para verificar las tareas. La única diferencia es que recuerda los resultados y calcula la puntuación global.
  1. Inicie sesión en CS50 IDE
  2. Cerca de la esquina superior izquierda del IDE CS50 , donde se encuentra su explorador de archivos (no en la ventana de la terminal), haga clic derecho en su archivo initials.c ubicado en el directorio pset2 y haga clic en Descargar . Deberías ver que el navegador ha cargado iniciales.c .
  3. Repita para caesar.c .
  4. Repita para vigenere.c .
  5. En una ventana o pestaña separada, inicie sesión en CS50.
  6. Haga clic en el icono Enviar en la esquina superior izquierda de la pantalla. Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 19
  7. En la lista de carpetas de la izquierda, haga clic en el directorio Conjunto de problemas 2 y luego haga clic en el botón Cargar nuevo envío . Está a la derecha. Harvard CS50: Tareas de la Semana 2 (Conferencias 5 y 6) - 20
  8. En la pantalla que aparece, haga clic en el botón Agregar archivos .... Se abrirá una ventana para seleccionar archivos de su computadora. Harvard CS50: Asignaciones de la semana 2 (Conferencias 5 y 6) - 21
  9. Navegue hasta la carpeta donde guarda las iniciales.c . Lo más probable es que esté ubicado en su carpeta de Descargas o donde su navegador coloque los archivos de forma predeterminada. Cuando encuentres initials.c , haz clic en él una vez para seleccionarlo y luego haz clic en Abrir.
  10. Haga clic en Agregar archivos nuevamente.
  11. Busque caesar.c y ábralo.
  12. Haga lo mismo con el archivo vigenere.c .
  13. Haga clic en Iniciar carga. Sus archivos se cargarán en los servidores CS50 .
  14. En la pantalla que aparece, debería ver la ventana No hay ningún archivo seleccionado . Si mueve el cursor del mouse hacia la izquierda, verá una lista de archivos descargados. Para confirmar, haga clic en cada uno de ellos. Si no estás seguro de algo, puedes volver a cargar los archivos repitiendo los mismos pasos. Puedes hacer esto tantas veces como quieras hasta finales de 2016.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION