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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Numero al azar capicua
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Numero al azar capicua  (Leído 3,531 veces)
emilioFIE

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Numero al azar capicua
« en: 15 Junio 2020, 16:40 pm »

Hola!!! Necesito ayuda con este ejercicio:

Programar una funcion que retorne un numero generado al azar de 5 digitos que cumpla con la condicion de ser capicua. Llame  esta funcion desde el main y mostrar en pntalla el numero devuelto por la misma.

gracias!!!!


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Numero al azar capicua
« Respuesta #1 en: 15 Junio 2020, 17:21 pm »

Lo que tienes que tener en cuenta para que el número sea capicúa es que las cifras 4 y 5 sean iguales a la 2 y 1 respectivamente.
Por lo tanto puedes generar 3 dígitos al azar (los 3 primeros) y los 2 últimos siempre tendrás que obtenerlos en base a los 2 primeros dígitos generados antes aleatoriamente.

Si necesitas ayuda con el código en concreto, incluye el código que tengas hasta el momento entre etiquetas de Código GeSHi.
No se hacen tareas.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
emilioFIE

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Numero al azar capicua
« Respuesta #2 en: 15 Junio 2020, 17:27 pm »

esto tengo hasta el momento
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. int capicua();
  6. int main()
  7. {
  8.    int num;
  9.    printf("El numero es: %d\n",capicua());
  10.    return 0;
  11. }
  12.  
  13. int capicua()
  14. {
  15.    int num,u,d,c,um,dm;
  16.    srand(time(0));
  17.    do
  18.        {
  19.          num = (rand()%99999-10000+1)+10000;
  20.          u=num%10;
  21.          d=num/10%10;
  22.          c=num/100%10;
  23.          um=num/1000%10;
  24.          dm=num/10000;
  25.        } while  (u==dm&&d==um);
  26.  
  27.   return num;
  28. }
  29.  
« Última modificación: 15 Junio 2020, 17:59 pm por YreX-DwX » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Numero al azar capicua
« Respuesta #3 en: 15 Junio 2020, 18:49 pm »

Uff, ese código es puro azar. Generas números aleatorios hasta que coincide que uno es capicúa. Además lo hace al revés. Según ese do while() lo que haces es generar números hasta que uno no es capicúa. La condición del while() es para que se repita, tendría que ser: (u != dm || d != um).

Lo suyo sería asegurar que es capicúa como te decía antes. Veamos:
Para empezar te vendría bien una función:
Código
  1.  
  2. int generarAleatorio(int minimo, int maximo){ // Devuelve un numero aleatorio en el rango [minimo, maximo]
  3.  srand(time(NULL)); // NULL es equivalente a 0. Lo puedes hacer aqui o antes de llamar a la funcion
  4.  int numero = minimo + rand() % (maximo - minimo + 1);
  5.  return numero;
  6. }

Y ahora creas un número aleatorio de 3 cifras. Lo más fácil es que crees los 3 primeros dígitos y agregues los 2 últimos después:
Código
  1. int numero = generarAleatorio(100, 999);
  2. int penultimoDigito = (numero / 10) % 10;
  3. int ultimoDigito = numero / 100;
  4. numero = numero * 100 + penultimoDigito * 10 + ultimoDigito;

Al final esa variable <numero> (si no me equivoco) contendrá siempre un número de 5 cifras capicúa.
Se puede hacer mejor, no hay duda, pero de esta manera ves cuál ha sido el procedimiento a seguir.
« Última modificación: 15 Junio 2020, 18:51 pm por YreX-DwX » En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
emilioFIE

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Numero al azar capicua
« Respuesta #4 en: 15 Junio 2020, 20:48 pm »

Uff, ese código es puro azar. Generas números aleatorios hasta que coincide que uno es capicúa. Además lo hace al revés. Según ese do while() lo que haces es generar números hasta que uno no es capicúa. La condición del while() es para que se repita, tendría que ser: (u != dm || d != um).

Lo suyo sería asegurar que es capicúa como te decía antes. Veamos:
Para empezar te vendría bien una función:
Código
  1.  
  2. int generarAleatorio(int minimo, int maximo){ // Devuelve un numero aleatorio en el rango [minimo, maximo]
  3.  srand(time(NULL)); // NULL es equivalente a 0. Lo puedes hacer aqui o antes de llamar a la funcion
  4.  int numero = minimo + rand() % (maximo - minimo + 1);
  5.  return numero;
  6. }

Y ahora creas un número aleatorio de 3 cifras. Lo más fácil es que crees los 3 primeros dígitos y agregues los 2 últimos después:
Código
  1. int numero = generarAleatorio(100, 999);
  2. int penultimoDigito = (numero / 10) % 10;
  3. int ultimoDigito = numero / 100;
  4. numero = numero * 100 + penultimoDigito * 10 + ultimoDigito;

Al final esa variable <numero> (si no me equivoco) contendrá siempre un número de 5 cifras capicúa.
Se puede hacer mejor, no hay duda, pero de esta manera ves cuál ha sido el procedimiento a seguir.

Muchas gracias ahora si!!!!  :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Azar -Nombres batch al azar -please ayuda
Scripting
usuario oculto 4 4,451 Último mensaje 16 Diciembre 2008, 19:44 pm
por SmartGenius
¿Numero al azar?
Programación C/C++
Bledniss 3 4,289 Último mensaje 13 Abril 2011, 22:10 pm
por Oblivi0n
Números capicúa « 1 2 3 »
Programación C/C++
suzy 24 19,452 Último mensaje 10 Marzo 2013, 22:34 pm
por suzy
Capicua
Programación C/C++
Cjr997 2 2,449 Último mensaje 5 Octubre 2016, 15:26 pm
por dato000
"Dado" en Script (numero al azar)
Scripting
Nilasoooo 0 2,844 Último mensaje 11 Junio 2019, 12:49 pm
por Nilasoooo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines