ayuda por favor.necesito numeros aleatorios distintos en C
hola a todos, tengo un problema, necesito una funcion aleatorio q me devuleva numeros aleatorios entre 1 y 100 por ejemplo, pero de una misma tirada del programa. Es decir, yo consigo q me devuleva distintos numeros si ejecuto distintas veces, pero un si en el progrma tengo un bucle y hago 200 lamadas por ejemplo, me da 200 veces el mismo numero.
He llegado a implementar lo siguiente:
int aleatorio ()
{
int numero;
srand((unsigned)time( NULL ));
numero = rand();
while(numero<1 || numero>100)
numero = rand();
return numero;
}
si alguien puede ayudarme se lo agradezco mucho.
un saludo
He llegado a implementar lo siguiente:
int aleatorio ()
{
int numero;
srand((unsigned)time( NULL ));
numero = rand();
while(numero<1 || numero>100)
numero = rand();
return numero;
}
si alguien puede ayudarme se lo agradezco mucho.
un saludo
en primer paso necesitas sacar srand de la funcion aleatorio, ya que esta funcion se utiliza para definir el primer número aleatorio, si este número es el mismo siempre, siempre vas ha obtener el mismo valor aleatorio, se utiliza time() para inicializarla, para que en diferentes ejecuciones te de resultados diferentes, pero en hacer un bucle de 200 iteraciones no tarda nada de tiempo, por lo que el time() es el mismo para todas las ejecuciones de algoritmo, como ejercicio puede probar con un número cualquiera como parametro de srand() y ejecutarlo dos o más veces, veras como siempre se obtiene la misma lista de valores aleatorios, (esto indicara que los valores aleatorios no son aleatorios ya que se puede repetir la lista). Esto lo consiges sacando srand(), pero para que los valores que obtienes sean siempre entre 1 y 100, ya que puedes estar un rato genrando número aleatorios con el metodo que tu utilizas, es mucho más cómodo hacer algo así:
rand()%100+1. así consigues que todos los número sean entre 1 y 100.
rand()%100+1. así consigues que todos los número sean entre 1 y 100.
int funcion(){
int x;
srand((unsigned)time(NULL));
x = (rand()%100)+1;
printf("%d", x);
return (x);
}
int x;
srand((unsigned)time(NULL));
x = (rand()%100)+1;
printf("%d", x);
return (x);
}
Haz la llamada a srand() solo una vez en tu codigo. srand() pone la "semilla" para el calculo de numeros aleatorios. Si siempre pones la misma, obtendras siempre el mismo valor
srand (time(NULL));
for (...)
{
x = rand()%100 + 1;
...
}
Se bueno
srand (time(NULL));
for (...)
{
x = rand()%100 + 1;
...
}
Se bueno
mmm no me habia dado cuenta de esto.
y si desde alguna otra funcion llamada desde el main necesito usar el rand? la llamada a srand la dejo en el main y no la uso en la funcion no?
voy a probar, q al final sale fijo
muchisimas gracias a los dos, me habeis sido de gran ayuda :)
y si desde alguna otra funcion llamada desde el main necesito usar el rand? la llamada a srand la dejo en el main y no la uso en la funcion no?
voy a probar, q al final sale fijo
muchisimas gracias a los dos, me habeis sido de gran ayuda :)
En teoría el algoritmo que se suele usar para generar números aleatorios no debería fallar por eso. Eligiendo una semilla distinta, la secuencia será pseudo-aleatoria, da igual de dónde llames.
Si quieres azar, me parece que el algoritmo de números aleatorios de Linux está currado
Si quieres azar, me parece que el algoritmo de números aleatorios de Linux está currado
