ayuda por favor.necesito numeros aleatorios distintos en C

LirVe
17 de Mayo del 2004
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

vicox
17 de Mayo del 2004
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.


eisys
17 de Mayo del 2004
int funcion(){
int x;

srand((unsigned)time(NULL));

x = (rand()%100)+1;

printf("%d", x);

return (x);
}

chuidiang
17 de Mayo del 2004
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

LirVe
17 de Mayo del 2004
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 :)

Aneglous
17 de Mayo del 2004
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