Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   funcion RANDOM ... funciona bien ?!!!!! (https://www.clubdelphi.com/foros/showthread.php?t=67230)

ingel 06-04-2010 19:06:44

funcion RANDOM ... funciona bien ?!!!!!
 
Hola a todos .. perdon si suena a pavada .. pero estoy observando un comportamiento raro con dicha funcion.. justamente NO random ...

tengo vector de 2 DOS elementos , la cuestion es que siempre me seleccionaba
el primero (a la sexta vez ya comence a sospechar que no era muy normal..)
el bucle era el siguiente y siempre salia seleccionado el numero 1..

while (i1= 0) do begin
i1:= Random(length(vec)+1);//entre 0 y 3 porque tengo 2 op
end;

le agregue la condicion que siguiera si se seleccionaba el 1
y llego a seleccionar el 2 a la TERCERA VEZ que lo intenta .. y siempre
en la tercera vez !!!

while (i1= 0) or (i1= 1 ) do begin
i1:= Random(length(vec)+1);
end;


Luego ya en estado de desesperacion agregue otro numero para ver que
resultado me daba

while (i1= 0) or (i1= 1 ) do begin
i1:= Random(length(vec)+1);
i2:=Random(100);
inc(ii);
end;

y las 10 veces que lo probe , antes de decidirme a pedir auxilio aqui ..
me da ..

0 y 59 al primer intento de random
2 y 72 al segundo intento de random y sale del while...
y SIEMPRE ME DA LOS MISMOS VALORES !... en el mismo ORDEN !

alquien tiene idea que estoy haciendo mal o que puede pasar ...
GRACIAS !!!

coso 06-04-2010 19:41:22

Hola,
random te da numeros pseudoaleatorios (es imposible en un ordenador actual dar numeros aleatorios completos). Tienes que usar la funcion randomize antes de usar el random, la cual pone la 'semilla' de numeros en funcion de la hora del reloj. Un saludo.

Casimiro Notevi 06-04-2010 20:09:47

Por favor, ingel, recuerda poner el código fuente entre etiquetas [code ] tu código [/code ] para que sea más cómodo leerlo.

Por cierto, en tu programa, al principio, pon la instrucción randomize.

Edito, ya te lo había informado coso.

ingel 07-04-2010 13:06:44

Ya lo habia puesto..
 
Graicas a ambos por su respuesta ... les cuento que ya tenia puesto el Randomize en el FormShow del Form... salvo que haya que ponerlo en otro lugar o de otra forma ...

CAsimiro ... te juro que cada vez que escribo codigo pienso en poner las etiquetas,, pero jamas las recuerdo , ... soy pariente de Dori .. la de buscando a Nemo .. pero prometo anotarmelo en el teclado ...
aca va una prueba de paso ... les muestro el ramdomize....
gracias !!


Código:

procedure TFDesigPeritos.FormShow(Sender: TObject);
begin
Randomize;
fVeces.setfocus;
end;


Casimiro Notevi 07-04-2010 13:38:15

No hace falta que lo recuerdes, cuando estás escribiendo un mensaje tienes el icono justo arriba :), selecciones tu código y pulsas en el icono '#', ese es el de code, tienes el de php, delphi, sql, etc...

Cita:

Empezado por ingel (Mensaje 359597)
CAsimiro ... te juro que cada vez que escribo codigo pienso en poner las etiquetas,, pero jamas las recuerdo , ... soy pariente de Dori .. la de buscando a Nemo .. pero prometo anotarmelo en el teclado ...


Caro 07-04-2010 15:22:08

Cita:

Empezado por ingel (Mensaje 359597)
Graicas a ambos por su respuesta ... les cuento que ya tenia puesto el Randomize en el FormShow del Form... salvo que haya que ponerlo en otro lugar o de otra forma ...

Hola ingel, debería funcionarte aún poniendolo en el OnShow, prueba poniendolo todo junto y para evitar el While puedes sumarle 1, así siempre te dara un valor mayor a 0.

Código Delphi [-]
  Randomize;
  i1:= Random(length(vec)+1)+1;

Saluditos


La franja horaria es GMT +2. Ahora son las 04:26:56.

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