[Solucionado] Problema en un Ejercicio de C++

Iniciado por Mario Olivera, 30 Julio 2014, 23:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Mario Olivera

Hola gente, estoy haciendo un ejercicio en C++ y me encuentro con un problema, para que sea más entendible voy a dejar lo que dice dicho ejercicio..

Ejercicio:
Citar(criptografía) Una compañía desea transmitir  datos a través del teléfono, pero le preocupa que sus teléfonos puedan estar intervenidos. Todos los datos se transmiten como enteros de cuatro dígitos. La compañía le ha pedido a usted que escriba un programa que cifre sus datos, de manera que éstos puedan transmitirse con más seguridad. Su programa debe leer un entero de acuatro dígitos introducido por el usuario y cifrarlo de la siguiente manera: reemplace cada dígito con (el resultado de sumar 7 al dígito) modulo 10. Luego intercambie el primer dígito con el tercero, e intercambie el segundo dígito con el cuarto. Después imprima un programa separado que reciba como entrada un entero de cuatro dígitos cifrado, y que lo descifre para formar el número original.

Ok, una vez ya sabido el ejercicio en el cifrador el código que hice fue el siguiente: (dejo lo más importante)

Código (cpp) [Seleccionar]
int digito1, digito2, digito3, digito4;
int sobra;

digito1= numeroIngresado / 1000;
sobra= numeroIngresado % 1000;
digito2= sobra / 100;
sobra= sobra % 100;
digito3= sobra / 10;
digito4= sobra %10;

digito1= ((digito1 + 7) % 10);
digito2= ((digito2 + 7) % 10);
digito3= ((digito3 + 7) % 10);
digito4= ((digito4 +7 ) % 10);

cout <<"\nNumero Cifrado: " <<digito3 <<digito4 <<digito1 <<digito2;


Hasta aquí todo esta bién, por ejemplo ingresando el número 9456 me cifra el número y lo imprime: 2361

Bueno, ahora iría el código del programa que descifra y muestra el número original (nuevamente dejo lo más importante):

Código (cpp) [Seleccionar]
double digito1,digito2,digito3,digito4;
int resto;

digito1= numeroCifrado / 1000;
resto= numeroCifrado % 1000;
digito2= resto / 100;
resto= resto % 100;
digito3= resto / 10;
digito4= resto % 10;

digito1+=3;
digito2+=3;
digito3+=3;
digito4+=3;

cout <<"Numero Descifrado: " <<digito3 <<digito4 <<digito1 <<digito2 <<endl;


Si ingreso el número cifrado (2361) me devuelve el número original...

Pero si en el cifrador hubiera puesto como número original 2361 el programa lo hubiera cifrado a: 3890

El descifrador me devuelve el número "original" como: 123611

Esto sucede a que al sumarle 3 en el descifrador se hace mayor a 9, yo lo hice así (osea sumandole 3) por la siguiente razón...

9 4 5 6

(9  + 7) % 10= 1.6
(4 + 7) % 10= 1.1
(5  + 7) % 10= 1.2
(6  + 7) % 10= 1.3

Entonces me di cuenta que para del resultado por ejemplo 1.6 había que sumarle 3 al resto osea 6 +3= 9 al igual que 1 +3 = 4, etc

Desde ya muchas gracias por cualquier ayuda :)

CalgaryCorpus

¿por que no aplicaste el modulo 10 al decriptar?
Aqui mi perfil en LinkedIn, invitame un cafe aqui

Mario Olivera

#2
Cita de: CalgaryCorpus en 30 Julio 2014, 23:59 PM
¿por que no aplicaste el modulo 10 al decriptar?

Por que me di cuenta de la suma de 3... pero al final eso es incorrecto, con respecto al módulo no sabría como operar haciendo módulo o multiplicando....

EDIT: Encontré la solución...

Trabajo con el número 2...

(2+7) % 10= 0.9

llegar al 2 de nuevo:

(0.9 * 10) - 7

Gracias por la ayuda Saludos!  :D

ivancea96

#3
(2+7)%10 NO es igual a 0.9
Es igual a 9.
No confundas división (/) con módulo o resto (%)

Blaster

#4
Cita de: 718208 en 31 Julio 2014, 00:15 AM
Por que me di cuenta de la suma de 3... pero al final eso es incorrecto, con respecto al módulo no sabría como operar haciendo módulo o multiplicando....

El método funcionaria de la siguiente manera:

2 3 6 1 ==> 9  4  5  6

6 + 3 = 9 % 10 = 9
1 + 3 = 4 % 10 = 4
2 + 3 = 5 % 10 = 5
3 + 3 = 6 % 10 = 6

Para ello debes trabajar solo con números enteros, no utilices el tipo double ademas dudo que la solución que encontraste te funcione

Saludos

Mario Olivera

Cita de: ivancea96 en 31 Julio 2014, 13:18 PM
(2+7)%10 NO es igual a 0.9
Es igual a 9.
No confundas división (/) con módulo o resto (%)

Me confundi por usar la calculadora  :laugh:

Cita de: Blaster
El método funcionaria de la siguiente manera:

2 3 6 1 ==> 9  4  5  6

6 + 3 = 9 % 10 = 9
1 + 3 = 4 % 10 = 4
2 + 3 = 5 % 10 = 5
3 + 3 = 6 % 10 = 6

Para ello debes trabajar solo con números enteros, no utilices el tipo double ademas dudo que la solución que encontraste te funcione

Gracias por la ayuda Blaster, Saludos!