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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [c] Problema numeros aleatorios mayores de 1000
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [c] Problema numeros aleatorios mayores de 1000  (Leído 3,309 veces)
dmacias

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
[c] Problema numeros aleatorios mayores de 1000
« en: 6 Abril 2014, 12:12 pm »

Hola a todos de nuevo, os vengo con otro problemilla en mis estudios  :silbar:

El caso es que estoy haciendo este ejercicio



Y he hecho tal como he creido que iria bien, me funcionan todos los resultados, excepto el rango de 1000 <= n <= 1112 y no se porque pasa eso, supongo que será alguna "trampa" del lenguaje, porque he observado que falla en cuando el rango llega a 1000, antes va perfecto asta con los negativos.

Os pego el codigo
Código
  1. /*Programa del libro, Tema 5
  2.  * ejercicio 5.13, pagina 170
  3.  * problema funcion de numeros aleatorios*/
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <time.h>
  8.  
  9. int aleatorio(int x, int y);
  10.  
  11. int main()
  12. {
  13.     int x, y;
  14.  
  15.     printf("Introduce dos numeros para hacer un rango (1 15 p.ej.): ");
  16.     scanf("%d%d", &x, &y);
  17.  
  18.     printf("%d <= %d <= %d\n", x, aleatorio(x, y), y);
  19.  
  20.     return 0;
  21.  
  22.     }
  23.  
  24. int aleatorio(int x, int y){
  25.     srand(time(NULL));
  26.     int z;
  27.     z = rand()%y + x;
  28.     return z;
  29.  
  30.     }
  31.  
  32.  
  33.  

Y unas capturas de que funcionar funciona, excepto con el rango que pasa de 1000.







Pues eso, que si alguien me da norte por donde esta el problema, se lo agradezco mucho  ;D

Un saludo


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [c] Problema numeros aleatorios mayores de 1000
« Respuesta #1 en: 6 Abril 2014, 13:06 pm »

A la Y le tienes que restar lo que vale X.

El problema esta en que al hacer %1112, te sale un número del 0 al 1111. Si a eso le sumas 1000 la lias parda completamente.


« Última modificación: 6 Abril 2014, 13:08 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
noele1995

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Re: [c] Problema numeros aleatorios mayores de 1000
« Respuesta #2 en: 6 Abril 2014, 13:16 pm »

El código esta mal para todos pero empezando desde el 1 o el 0 no lo notas

Código
  1. int aleatorio(int intervalo_abajo, int intervalo_arriba)
  2. {
  3.    int num;
  4.    srand(time(NULL));
  5.    //Genera un numero de la diferencia del intervalo (+1 por <=) y se lo suma a la base
  6.    num = rand() % (intervalo_arriba - intervalo_abajo + 1) + intervalo_abajo;
  7.  
  8.    return num;
  9. }

Saludos
En línea

dmacias

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
Re: [c] Problema numeros aleatorios mayores de 1000
« Respuesta #3 en: 6 Abril 2014, 13:19 pm »

Ok, parece que no habia terminado de entender bien como funciona rand, pense que y era el limite y +x el inicio.

Ya esta corregido :)
Código
  1. /*Programa del libro, Tema 5
  2.  * ejercicio 5.13, pagina 170
  3.  * problema funcion de numeros aleatorios*/
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <time.h>
  8.  
  9. int aleatorio(int x, int y);
  10.  
  11. int main()
  12. {
  13.     int x, y;
  14.  
  15.     printf("Introduce dos numeros para hacer un rango (1 15 p.ej.): ");
  16.     scanf("%d%d", &x, &y);
  17.  
  18.     printf("%d <= %d <= %d\n", x, aleatorio(x, y), y);
  19.  
  20.     return 0;
  21.  
  22.     }
  23.  
  24. int aleatorio(int x, int y){
  25.     srand(time(NULL));
  26.     int z;
  27.     z = rand()%(y -x +1) + x;
  28.     return z;
  29.  
  30.     }
  31.  
  32.  

Ahora si funciona perfecto, pero no entiendo como antes funcionaba bien si no llegabamos a 1000  :o

Un saludo
« Última modificación: 6 Abril 2014, 13:21 pm por dmacias » En línea

noele1995

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Re: [c] Problema numeros aleatorios mayores de 1000
« Respuesta #4 en: 6 Abril 2014, 13:22 pm »

Ahora si funciona perfecto, pero no entiendo como antes funcionaba bien si no llegabamos a 1000  :o

Generabas un numero del intervalo superior y luego le sumabas la base, si la base es 1 o 0 puede que no lo notes, pero ya si es 1000 entonces te pasas tres pueblos xD

Saludos
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [c] Problema numeros aleatorios mayores de 1000
« Respuesta #5 en: 6 Abril 2014, 13:22 pm »

Por cierto el srand SOBRA.

La semilla debe inicializarse una sola vez en todo el programa. Si la inicializas cada vez que llamas a la funcion, obtendras siempre valores muy similares (o identicos). Esto se puede ver poniendo un bucle para que te saque 10 aleatorios.

En cuanto al problema, no era de rand sino de como usas los operadores de C. Antes te iba bien porque tus valores inferiores eran muy pequeños, asi que era mas dificil que te saliera un caso erroneo.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
dmacias

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
Re: [c] Problema numeros aleatorios mayores de 1000
« Respuesta #6 en: 6 Abril 2014, 13:31 pm »

Eso de la semilla no lo entendi del todo
He probado el programa en el rango de 1 a 100 varias veces, rapido para que ande mas o menos por el mismo tiempo (que solo varien segundos al captar la semilla 01:01:xx por poner un ejemplo) y no salen ni parecidos los resultados, quizas me estoy haciendo un lio xD
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [c] Problema numeros aleatorios mayores de 1000
« Respuesta #7 en: 6 Abril 2014, 13:40 pm »



Código
  1. /*Programa del libro, Tema 5
  2.  * ejercicio 5.13, pagina 170
  3.  * problema funcion de numeros aleatorios*/
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <time.h>
  8.  
  9. int aleatorio(int x, int y);
  10.  
  11. int main()
  12. {
  13.    int x, y;
  14.    int i;
  15.    printf("Introduce dos numeros para hacer un rango (1 15 p.ej.): ");
  16.    scanf("%d%d", &x, &y);
  17.  
  18.    for (i = 0; i < 100; i++)
  19.        printf("%d <= %d <= %d\n", x, aleatorio(x, y), y);
  20.  
  21.    return 0;
  22.  
  23. }
  24.  
  25. int aleatorio(int x, int y)
  26. {
  27.    srand(time(NULL));
  28.    int z;
  29.    z = rand()%(y -x +1) + x;
  30.    return z;
  31.  
  32. }
  33.  

Solución: Poner el srand al principio del codigo:

Código
  1. [code=cpp]/*Programa del libro, Tema 5
  2.  * ejercicio 5.13, pagina 170
  3.  * problema funcion de numeros aleatorios*/
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <time.h>
  8.  
  9. int aleatorio(int x, int y);
  10.  
  11. int main()
  12. {
  13.    srand(time(NULL));
  14.    int x, y;
  15.    int i;
  16.    printf("Introduce dos numeros para hacer un rango (1 15 p.ej.): ");
  17.    scanf("%d%d", &x, &y);
  18.  
  19.    for (i = 0; i < 100; i++)
  20.        printf("%d <= %d <= %d\n", x, aleatorio(x, y), y);
  21.  
  22.    return 0;
  23.  
  24. }
  25.  
  26. int aleatorio(int x, int y)
  27. {
  28.    int z;
  29.    z = rand()%(y -x +1) + x;
  30.    return z;
  31. }
  32.  


     [/code]
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
dmacias

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
Re: [c] Problema numeros aleatorios mayores de 1000
« Respuesta #8 en: 6 Abril 2014, 13:59 pm »

Despejada la duda con la demostracion  ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
NUMEROS ALEATORIOS EN VB
Programación Visual Basic
WCIETE 3 4,207 Último mensaje 30 Agosto 2005, 01:19 am
por Slasher-K
Numeros aleatorios
Programación Visual Basic
Gleper 2 2,390 Último mensaje 3 Noviembre 2007, 14:40 pm
por Gleper
Problema Matriz cuadrada con números aleatorios sin repetir
Programación C/C++
zaico77 3 6,986 Último mensaje 14 Febrero 2014, 21:06 pm
por leosansan
problema con keygen y numeros aleatorios
Programación Visual Basic
BigByte 5 2,813 Último mensaje 7 Marzo 2014, 07:48 am
por BigByte
Problema en C - Numeros aleatorios sin que se repitan
Programación C/C++
Mattux 9 3,890 Último mensaje 11 Octubre 2019, 11:00 am
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines