elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  cifrar un entero de 4 cifras en lenguaje C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: cifrar un entero de 4 cifras en lenguaje C.  (Leído 6,475 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
cifrar un entero de 4 cifras en lenguaje C.
« en: 9 Septiembre 2014, 21:40 pm »

Hola a todos y que tengan un muy buen día.-

Citar
El programa debe leer un entero de cuatro dígitos y cifrar la información de la siguiente manera: reemplace cada dígito con residuo de la división entre 10 de la suma de dicho dígito mas 7. Posteriormente, intercambie el primer digito con el tercero, e intercambie el segundo dígito con el cuarto. Luego despliegue el entero cifrado.

Bueno con el enunciado tan bien explicado no me queda mucho para agregar, sólo decirles que estoy trabado con la última parte la de intercambio de dígitos, lo he intentado de varias manera pero no me funciono.-

Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4. int numero=5724, digito=0, div=1000, auxiliar=0, cifrado=0;
  5. while(numero>0){
  6. digito = numero/div;
  7. numero = numero-(div*digito);
  8. auxiliar = (digito+7)%10*div;
  9. cifrado += auxiliar;
  10. div /= 10;
  11. }
  12.  
  13.  
  14. printf("\n El n%cmero cifrado es...: %d\n", 163, cifrado);
  15.  
  16. return 0;
  17. }

Una cosita más, no tengan reparos en postear código que sea totalmente distinto al mío, el código es de mi propia idea y seguramente Uds. lo sabrán hacer de una manera más eficiente.-       

Saludos.
Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: cifrar un entero de 4 cifras en lenguaje C.
« Respuesta #1 en: 9 Septiembre 2014, 23:17 pm »

Lo suyo sería realizar el procedimiento en dos pasos:

* calcular el residuo
* reubicar los dígitos

La primera opción se puede resolver con un bucle, la segunda hay que hacerla más a mano:

Código
  1. int CifrarNumero( int numero )
  2. {
  3.  int digitos[4];
  4.  
  5.  // Paso 1 : transformación
  6.  int i;
  7.  for ( i = 0; i < 4; i++ )
  8.  {
  9.    digitos[ 3 - i ] = ( ( numero % 10 ) + 7 ) % 10;
  10.    numero /= 10;
  11.  }
  12.  
  13.  // Paso 2 : permutación
  14.  digitos[ 0 ] ^= digitos[ 2 ]
  15.  digitos[ 2 ] ^= digitos[ 0 ];
  16.  digitos[ 0 ] ^= digitos[ 2 ];
  17.  
  18.  digitos[ 1 ] ^= digitos[ 3 ];
  19.  digitos[ 3 ] ^= digitos[ 1 ];
  20.  digitos[ 1 ] ^= digitos[ 3 ];
  21.  
  22.  // Paso 3: Recomponemos el número.
  23.  int resultado = 0;
  24.  for ( i=0; i < 4; i++ )
  25.  {
  26.    resultado *= 10;
  27.    resultado += digitos[ i ];
  28.  }
  29.  
  30.  return resultado;
  31. }

Se puede optimizar, pero yo creo que funciona... no tengo compilador en el teléfono


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: cifrar un entero de 4 cifras en lenguaje C.
« Respuesta #2 en: 10 Septiembre 2014, 01:17 am »

estoy trabado con la última parte la de intercambio de dígitos, lo he intentado de varias manera pero no me funciono.
Nada impide que proceses cada uno de los dígitos empezando con el menos significativo y terminando con el mas, lo usual mediante el uso del cociente y el residuo de la división entre diez. Una vez obtenido el nuevo dígito lo multiplicas por la potencia de diez necesaria para colocarlo en la posición correcta, de esta forma:
Código
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5.   int pot[] = {100, 1000, 1, 10};
  6.   int num = 5724;
  7.   int res = 0;
  8.   int i;
  9.  
  10.   for (i = 0; i < 4; i++, num /= 10)
  11.      res += (num + 7) % 10 * pot[i];
  12.  
  13.   printf("%d\n", res);
  14.  
  15.   return 0;
  16. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: cifrar un entero de 4 cifras en lenguaje C.
« Respuesta #3 en: 10 Septiembre 2014, 03:47 am »

Hola rir.
Una pregunta y una reflexión:
¿sos extraterrestre?
No dudo que ni a los autores del enunciado se les hubiera ocurrido hacer eso con 2 líneas.-
Eferion gracias por responder, tú código compila sin errores pero siempre me da como resultado cero.-

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: cifrar un entero de 4 cifras en lenguaje C.
« Respuesta #4 en: 10 Septiembre 2014, 08:16 am »

Eferion gracias por responder, tú código compila sin errores pero siempre me da como resultado cero.-

El código lo he probado y funciona perfectamente salvo por un detalle... falta un ';' en la línea 14... dudo que compile sin eso. (he usado un compilador C++)
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: cifrar un entero de 4 cifras en lenguaje C.
« Respuesta #5 en: 10 Septiembre 2014, 13:07 pm »

Hola eferion.
Ok. Funciona a la perfección, sólo una cosita más, me podrías explicar esta línea de código.

Código
  1. digitos[ 0 ] ^= digitos[ 2 ];

Se lo que hace el operador XOR (binario) pero no alcanzo a entender para que lo utilizaste en este caso.-
Desde ya gracias por tu tiempo y por favor tutéame que tengo edad de abuelo(62) pero no lo aparento.- ;D ;D ;D

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: cifrar un entero de 4 cifras en lenguaje C.
« Respuesta #6 en: 10 Septiembre 2014, 13:20 pm »

la idea de esas líneas es intercambiar el valor de las dos variables:

te lo pongo con valores binarios:

Código
  1. int a = 20; // 10100
  2. int b = 29; // 11101
  3.  
  4. a ^= b; // a = 01001 b = 11101
  5. b ^= a; // a = 01001 b = 10100
  6. a ^= b; // a = 11101 b = 10100
  7.  
  8. // Despues del codigo:
  9. // a = 29 -> 11101
  10. // b = 20 -> 10100

Esto es equivalente a:

Código
  1. int a = 20;
  2. int b = 29;
  3.  
  4. int temp = a;
  5. a = b;
  6. b = temp;
  7.  
  8. // Despues del codigo:
  9. // a = 29
  10. // b = 20

Esto también se puede hacer con sumas y restas:

Código
  1. int a = 20;
  2. int b = 29;
  3.  
  4. a += b; // a = 49 b = 29
  5. b = a - b; // a = 49 b = 49-29=20
  6. a = a - b; // a = 49-20=29 b = 20
  7.  
  8. // Despues del codigo:
  9. // a = 29
  10. // b = 20

Hay más formas de hacerlo, pero creo que la idea queda clara.
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: cifrar un entero de 4 cifras en lenguaje C.
« Respuesta #7 en: 10 Septiembre 2014, 19:12 pm »

Hola.
En este caso el principal uso es para evitar tener que declarar otra variable temporal, ¿estoy en lo cierto ?.-
De ser así y si lo preferís no me respondas, lo damos por sentado.-

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: cifrar un entero de 4 cifras en lenguaje C.
« Respuesta #8 en: 10 Septiembre 2014, 21:07 pm »

En este caso el principal uso es para evitar tener que declarar otra variable temporal, ¿estoy en lo cierto ?.-

El evitar declarar una variable es un efecto colateral... simplemente es una muestra de que no hay una forma fija y concreta de hacer las cosas en programación.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines