PDA

Ver la Versión Completa : random


chechu
24-11-2005, 16:24:49
tengo otro problema con el siguiente codigo:
lo que quiero es obtener un randomico entre 0 y 1 , segun eso evaluarlo de esta manera pero me da desde lo marcado con rojo que son tipos incompatibles sera el problema con el random? desde ya gracias


randomize;
u:= random(random(1));
if (u < 0.1) then
N:=0
else
if (0.1<= u < 0.2)then
N:=1
else
if (0.2<= u < 0.45)then
N:=2
else
if (0.45<= u < 0.75)then
N:=3
else
if (0.75<= u < 1)
N=4;

epuigdef
24-11-2005, 16:39:35
Prueba cambiando el código por:



randomize;
u:= random(random(1));
if (u < 0.1) then
N:=0
else
if (u>=0.1) AND (u < 0.2)then
N:=1
else
if (u >=0.2) AND (u < 0.45)then
N:=2
else
if (u >= 0.45) and (u < 0.75)then
N:=3
else
if (u >= 1)
N=4;


Edu

chechu
24-11-2005, 17:12:46
gracias por la ayuda edu

Thales
24-11-2005, 17:12:52
Puedes simplificar el código aún más:

randomize;
u:= random(random(1));
if (u < 0.1) then
N:=0
else if (u < 0.2)then
N:=1
else if (u < 0.45)then
N:=2
else if (u < 0.75)then
N:=3
else if (u >= 1)
N=4;

aunque no entiendo muy bien el porqué del doble uso de random

chechu
24-11-2005, 17:17:36
gracias por la sugerencia lo del random doble no me daba error solo queria asegurar la aleatoriedad pero ya se lo saque

Thales
24-11-2005, 19:40:20
Otra cosa más que no te comenté antes: En el código anterior la variable N nunca llega a tomar el valor 4 porque el número aleatorio que generas siempre es menor que 1, así que el último if sobra.

Un saludo

delphi.com.ar
24-11-2005, 20:09:45
randomize;
u:= random(random(1));
if (u < 0.1) then
N:=0
else
if (0.1<= u < 0.2)then
N:=1
else
if (0.2<= u < 0.45)then
N:=2
else
if (0.45<= u < 0.75)then
N:=3
else
if (0.75<= u < 1)
N=4;

Si tu resultado final va a ser un número al azar entre 0 y 4... porqué no haces directamente:

uses
Math;
...
begin
Randomize;
N := RandomRange(0, 5);
end;


gracias por la sugerencia lo del random doble no me daba error solo queria asegurar la aleatoriedad
Con eso lo único que logras es que la semilla cambie una vez mas, pero la serie seguirá siendo cíclica!

Saludos!