Introducción a la Programación - Trimestre 2004 Primavera
Tarea 6 (Examen Global) - 16:00 Lunes 26 de Julio de 2004

Códigos de Sustitución

En algunas aplicaciones es importante poder enviar un mensaje de una persona a otra sin que ningún tercero se pueda enterar del mensaje. En este caso se recurre a estrategias llamadas técnicas de codificación. Algunas de las técnicas más simples consisten en la simple sustitución de un caracter por otro. Por ejemplo, uno podría pensar en sustituir todas las letras F del mensaje original por letras J en el mensaje codificado, todas las letras J del mensaje original por letras Z en el mensaje codificado, etc. En esta tarea describiremos dos de tales técnicas: el código del César y el código de Vigenere. En ambas, consideraremos que el mensaje consiste únicamente de los caracteres @, A, B, ..., Z y que a estos se les asocian los valores 0, 1, 2, ..., 26, respectivamente. Pistas: (a) Recuerde que los códigos ASCII de estos caracteres son 64, 65, 66, ..., 90, respectivamente. (b) Tal vez necesite usar el operador % (residuo). Notas: (a) Su programa no deberá leer ni escribir nada además de los datos mencionados. (b) Su programa no deberá usar nada que no hayamos visto en clase.

Código del César (Versión Fácil : 10 puntos)

En este caso, se escoge un caracter de @, A, B, ..., Z (al que llamaremos llave) y este caracter se le suma a cada uno de los caracteres del mensaje (utilizando, claro está, el valor asociado a los caracteres). Si por alguna razón el valor de la suma es mayor que 26, entonces se vuelve a comenzar desde 0. Por ejemplo, si escogimos el caracter J como la llave y el mensaje original es TAREA@DE@PROGRAMACION, entonces el mensaje codificado será CKAOKJTOJZAYQAKWKMSYX ya que J+T=10+20=30->3=C, J+A=10+1=11=K, J+R=10+18=28->1=A, etc.

Especificación

La entrada consiste de una cadena (de 1 a 1000 caracteres) que sólo contiene letras mayúsculas y caracteres @. El primer caracter de esa cadena será la llave y los demás caracteres formarán el mensaje. La salida consiste de una cadena: el mensaje codificado con la llave. Observa que la cadena de salida tiene un caracter menos que la cadena de entrada. El nombre de su programa deberá ser csfNNN.c, donde NNN son todos los dígitos de la cuenta que le fue asignada. Por ejemplo, si su número de cuenta es el ip-1-23, entonces su programa deberá llamarse csf123.c. Los archivos csfNNN.o y csfNNN.exe no deben ser entregados.

Ejemplo

ENTRADA: JTAREA@DE@PROGRAMACION
SALIDA: 
CKAOKJNOJZAYQAKWKMSYX

Código de Vigenere (Versión Difícil : 20 puntos)

En este caso, se escoge una palabra formada con los caracteres @, A, B, ..., Z (a la que llamaremos llave) y los caracteres de la misma se le suman (de la misma manera que para el código del César) a cada uno de los caracteres del mensaje, aunque en este caso, se suma el primer caracter de la llave con el primero del mensaje, el segundo caracter de la llave con el segundo del mensaje, y así sucesivamente hasta que se terminan los caracteres de la llave y se vuelve a comenzar con el primero. Por ejemplo, si escogemos a EVA como llave y el mensaje original es el mismo que antes, entonces el mensaje codificado será YWSJWAI@AUMPLMBRWDNJO ya que E+T->Y, V+A->W, A+R->S, E+E->J, etc.

Especificación

La entrada estará contenida en un archivo llamado vigenere.txt, el cual consistirá de dos cadenas que sólo contienen letras mayúsculas y caracteres @, cada una de 1 a 1000 caracteres y en un renglón. La primera cadena será la llave y la segunda el mensaje. La salida se deberá escribir en un archivo llamado mensaje.txt consistente de una cadena: el mensaje codificado con la llave. El nombre de su programa deberá ser csdNNN.c, donde NNN son todos los dígitos de la cuenta que le fue asignada. Por ejemplo, si su número de cuenta es el ip-1-23, entonces su programa deberá llamarse csd123.c. Los archivos csdNNN.o y csdNNN.exe no deben ser entregados.

Ejemplo

vigenere.txt                      mensaje.txt

EVA                              
YWSJWAI@AUMPLMBRWDNJO
TAREA@DE@PROGRAMACION