Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   random (https://www.clubdelphi.com/foros/showthread.php?t=27580)

chechu 24-11-2005 16:24:49

random
 
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:


Código Delphi [-]
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

funciona gracias
 
gracias por la ayuda edu

Thales 24-11-2005 17:12:52

Puedes simplificar el código aún más:

Código Delphi [-]
  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

thales
 
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

Cita:

Empezado por chechu
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:
Código Delphi [-]
uses
  Math;
...
begin
  Randomize;
  N := RandomRange(0, 5);
end;

Cita:

Empezado por chechu
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!


La franja horaria es GMT +2. Ahora son las 04:13:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi