PDA

Ver la Versión Completa : Funcion Random no respeta rango


fpirovani
21-05-2012, 15:18:39
Hola a todos!
Les cuento que soy medio novato en esto de la programacion.
Me surgio un problema y la verdad no se que estoy haciendo mal.
Necesito obtener un numero aleatoreo entre 0 y 9. para ello uso el siguiente codigo


Randomize;
Variable := random(9);


Pero resulta que me devuelve todos numeros mayores que 10, siendo que el limite es 9.
Tampoco se porque motivo los numeros que me devuelve nunca llegan al 50.

¿Estoy haciendo algo mal? ¿a alguien le paso?

Desde ya muchas gracias.
Saludos!

Casimiro Notevi
21-05-2012, 15:56:33
Bueno, todo tiene su explicación :), aunque estaría bien ver tu código, para poder ayudarte según lo que estás haciendo :)

fpirovani
22-05-2012, 16:17:53
perdon por la tardanza en responder, es que tuve un problema con mi cuenta y no podia acceder.

no se en que va, pero cree un formulario nuevo para probar y con el mismo codigo anda. la verdad que no entiendo en que le erre.

el codigo es muy simple.


procedure TForm1.BotonGenerarNumeroClick(Sender: TObject);
begin
Randomize;
MostrarNumero.Caption := IntToStr(random(9)); /// muestro en un label el numero generado
end;

Casimiro Notevi
22-05-2012, 16:37:07
No entiendo bien lo que dices, random(9) debe devolverte valores entre 0 y 8. Y hablas de números que no pasan de 50 ¿?

Mira esta página (http://www.delphibasics.co.uk/RTL.asp?Name=Random) de ayuda.

ecfisa
22-05-2012, 21:34:47
perdon por la tardanza en responder, es que tuve un problema con mi cuenta y no podia acceder.

no se en que va, pero cree un formulario nuevo para probar y con el mismo codigo anda. la verdad que no entiendo en que le erre.

el codigo es muy simple.


procedure TForm1.BotonGenerarNumeroClick(Sender: TObject);
begin
Randomize;
MostrarNumero.Caption := IntToStr(random(9)); /// muestro en un label el numero generado
end;

Hola fpirovani.

Del modo que utilizas Random en tu código te va a generar valores enteros comprendidos entre cero y ocho, es decir que 0 <= Random(n) < n.

Otra forma de utilizarlo es multiplicar el valor máximo deseado por el resultado de la función Random sin argumentos. En este caso se da que 0 <= Random < 1, el resultado obtenido es de punto flotante por lo que tendrías que usar la función Round para utilizar luego IntToStr:

Label1.Caption:= IntToStr(Round(Random* 9));


Mirando tu código, no veo la posibilidad que estés obteniendo un valor inferior a cero o superior a ocho...

Saludos.