domingo, 16 de noviembre de 2008

Cifrar un numero en C

Ejercicio 3.46 del libro de Deitel

Una empresa debe transmitir datos mediante el teléfono, pero esta preocupados de que sus teléfonos pudieran estar intervenidos. Todos sus datos se transmiten como enteros de 4 dígitos. Le han solicitado a usted que escriba un programa que cifre sus datos, de tal forma que puedan ser transmitidos con mayor seguridad. Su programa deberá leer un entero de 4 dígitos y cifrarlo como sigue, remplazar cada dígito por (la suma del dígito mas 7) modulo 10. A continuación intercambiar el primer dígito con el tercero y el segundo con el cuarto. A continuación imprimir el entero cifrado. Escriba un entero por separado, que introduzca un numero entero cifrado, y lo decifre para formar el numero original.

========================================================================
//programa que lee un numero y lo cifra
# include
main ()
{
int n, d1, d2, d3, d4;

printf("Dame un numero entero de 4 digitos");
scanf("%d",& n);
if (n<=9999){
d1 = n%10;
n = n/10;
d2 = n%10;
n = n/10;
d3 = n%10;
n = n/10;
d4 = n;

d1 = ((d1+7)%10) * 100;
d2 = ((d2+7)%10) * 1000;
d3 = ((d3+7)%10) * 1;
d4 = ((d4+7)%10) * 10;

printf("El numero cifrado es %d", d1 + d2 + d3 + d4);
}
else {
printf("No es un numero de cuatro digitos");
}
getch();
return 0;
}

==================================================================
//programa que lee un numero y lo decifra
# include
main ()
{
int n, d1, d2, d3, d4;

printf("\nDame un numero cifrado de 4 digitos\n");
scanf("%d",& n);
if (n<=9999){
d1 = n%10;
n = n/10;
d2 = n%10;
n = n/10;
d3 = n%10;
n = n/10;
d4 = n;

d1 = (d1+3) * 100;
d2 = (d2+3) * 1000;
d3 = (d3+3) * 1;
d4 = (d4+3) * 10;

printf("El numero decifrado es \t%d", d1 + d2 + d3 + d4);
}
else {
printf("No es un numero de cuatro digitos");
}
getch();
return 0;
}

3 comentarios:

Anónimo dijo...

Hola, muchas gracias por haberlo publicado, estoy estudiando por mi cuenta programacion en C y hay problemas que me cuestan mucho. Te molestaria si te pido que explicaras un poco del porque ha resultado asi el codigo?.
Soy Ronald.

Anónimo dijo...

Justamente ese ejercicio de ese libro estoy haciendo, el cambiar los números de posición y sumarle 7 lo logre, pero volver a el numero original se me ha complicado, gracias por tu aporte

francisco dijo...

da error en getch();