#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_CARACTERES 100
void codificar(char * mensaje, char *codigo, int clave);
void descodificar(char * mensaje, char *codigo, int clave);
int main()
{
char frase[MAX_CARACTERES];
char fraseCodificada[MAX_CARACTERES];
int clave,modo;
printf("CIFRAR/DESCIFRAR UNA CADENA MEDIANTE LA CODIFICACIÓN CÉSAR\n\n");
printf("Introduzca una cadena de caracteres: \n");
scanf("%s",frase);
printf("%s\n",frase);
printf("Introduzca la clave de cifrado (positiva): \n");
scanf("%d",&clave);
printf("%d\n",clave);
printf("¿qué operación desea realizar? codificar (0) / descodificar (1)\n");
scanf("%d",&modo);
if (modo == 0){
codificar(frase,fraseCodificada,clave);
printf("\nResultado de codificar %s es: %s\n",frase,fraseCodificada);
}else if (modo == 1){
descodificar(frase,fraseCodificada,clave);
printf("\nResultado de descodificar %s es: %s\n",frase,fraseCodificada);
}
return 0;
}
void codificar(char * mensaje, char *codigo, int clave)
{
int i;
int n_letras;
strcpy(codigo,mensaje);
n_letras = 'z'-'a'+1;
i=0;
while(mensaje[i]!='\0'){
if (mensaje[i]>='a' && mensaje[i]<='z')
codigo[i]= 'a' + (mensaje[i]+clave -'a') % n_letras;
else if (mensaje[i]>='A' && mensaje[i]<='Z')
codigo[i]= 'A' + (mensaje[i]+clave -'A') % n_letras;
i++;
}
codigo[i]='\0';
}
void descodificar(char * mensaje, char *codigo, int clave)
{
int i;
int n_letras;
strcpy(codigo,mensaje);
n_letras = 'z'-'a'+1;
i=0;
while(mensaje[i]!='\0'){
if (mensaje[i]>='a' && mensaje[i]<='z')
codigo[i]= 'a' + (mensaje[i]-clave -'a' + n_letras) % n_letras;
else if (mensaje[i]>='A' && mensaje[i]<='Z')
codigo[i]= 'A' + (mensaje[i]-clave -'A' + n_letras) % n_letras;
i++;
}
codigo[i]='\0';
}