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