Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Diferencia entre random y randomize (https://www.clubdelphi.com/foros/showthread.php?t=37257)

Tapax 08-11-2006 00:06:58

Diferencia entre random y randomize
 
Holas,
Segun el HELP de borland:
Cita:

Initializes random number generator.
Osea setea el generador para el random.
Pero y cuando uso el random sin el randomize, igual me genera numero aleatorios cual es la diferencia.

Realice un ejemplo para ver el funcionamiento de esto y obtuve cosas diferentes que desearia entender :D

Código:

void SeteaVector(int vec1[])
{
  randomize();
  int i;
  for (i=0;i<10;i++)
  {
    int n=random(105);
    vec1[i]=n;
  }
}
void main()
{
 int vec1[10],i;
 SeteaVector(vec1);
 SeteaVector(vec2);

 for (i=0;i<10;i++)
  printf("%d ",vec1[i] );
 printf("\n" );
 for (i=0;i<10;i++)
{
 printf("%d ",vec2[i] );
 }
 getch();

}

Cuando el randomize lo dejo dentro de mi metodo SeteaVector, me genera valores iguales para las dos variables, pero cuando pongo dentro del main, genera valores diferentes. y cuando no empleo randomize en ninguna parte tambien me genera valores diferentes para los dos vectores.
Porque? Como funciona realmente? Me explican? :P
Grax

mcnudi 08-11-2006 09:11:53

random
 
hay q hacer el random en el principal ya que q te inicializa los valores al principio y una sóla vez.
Si lo haces en la función te iniciará los valores cada vez q entres en la función.

Crandel 13-11-2006 23:00:19

Para entender mejor como funciona el Randomize, hay que entender como se generan los numeros aleatorios.

La funcion Random es una función que genera numeros de apariencia aleatoria, pero en realidad es una secuencia de numeros predeterminados. Esta secuencia es lo suficientemente larga para que si generas una cantidad grande de numeros no se repita la misma secuencia.

Ahora bien, como dijimos, es una secuencia predeterminada, por lo que simpre comienza igual. Ej: 5-9-1-3-7-4-8-3-7-2-4-8-1-9-5-3-7-8-2

Aunque esta secuencia pareciera aleantoria, si siempre empizo desde el primer numero 5, sabria que numeros le siguen.

Randomize justamente lo que hace es inicializar el generador en un valor diferente cada vez que es llamado, por lo que es suficiente que sea llamado una sola vez en tu programa.

roman 13-11-2006 23:08:15

Una pregunta: ¿cómo se hace esta inicialización? Porque la respuesta inmediata sería: aleatoriamente, pero supongo que si así fuera entonces también podrían generarse verdaderos números aleatorios sin necesidad de randomize.

// Saludos

seoane 13-11-2006 23:12:11

Cita:

Empezado por roman
Una pregunta: ¿cómo se hace esta inicialización? Porque la respuesta inmediata sería: aleatoriamente, pero supongo que si así fuera entonces también podrían generarse verdaderos números aleatorios sin necesidad de randomize.

// Saludos

En el caso de delphi utiliza el valor de los contadores de alta precisión, o en su defecto el valor de Gettickcount.

Código Delphi [-]
procedure Randomize;
{$IFDEF LINUX}
begin
  RandSeed := _time(nil);
end;
{$ENDIF}
{$IFDEF MSWINDOWS}
var
  Counter: Int64;
begin
  if QueryPerformanceCounter(Counter) then
    RandSeed := Counter
  else
    RandSeed := GetTickCount;
end;
{$ENDIF}

seoane 13-11-2006 23:20:56

Volviendo al problema de generar "verdaderos" números aleatorios, no hay forma de generarlos por software. Existen aparatos electrónicos que aprovechando distintas características físicas de los materiales intentan generar números aleatorios, otros usan sistemas tan ingeniosos como usar una consulta a google para generar los números, la entrada de audio de la tarjeta de sonido, o servidores que generan números aleatorios a partir de las peticiones que se le hacen a través de la red, etc ...

Crandel 14-11-2006 00:05:54

Como ya viste en la respuesta de seoane, esta relacionado con el tiempo de encendido de la maquina.

Pero porque no es valida como generador de numeros aleatorios?
xq imaginate el caso extremo de llamarla sucesivamente a la misma funcion en intervalos de tiempo muy pequeños, estariamos obteniendo numeros sucesivos.

La generación de numeros aleatorios es todo una ciencia, pero para mundanos como nosotros la función Random es perfecto para lo que necesitamos :p

Con exepción de nuestro amigo Fede

roman 14-11-2006 17:23:24

Alguna vez leí de un método que tenía que ver con los movimientos del ratón que hiciera el usuario. Creo que era para generar un número de serie.

Cita:

Empezado por Crandel
La generación de numeros aleatorios es todo una ciencia

No lo dudo. Nunca me metía a estudiar eso pero sí recuerdo que de hecho había discusión en cuanto a si realmente existía tal cosa como un número aleatorio.

La secuencia que usa el Random, ¿de dónde la saca?

¿Qué pasa con Federico? ¿A él no le es suficiente? :p

// Saludos

seoane 14-11-2006 19:17:54

1 Archivos Adjunto(s)
Cita:

Empezado por roman
Alguna vez leí de un método que tenía que ver con los movimientos del ratón que hiciera el usuario. Creo que era para generar un número de serie.

Yo he visto un sistema similar en el programa TrueCrypt para generar las claves. Aquí dejo, modestamente, un ejemplo de como lo haría yo.

Cita:

Empezado por roman
La secuencia que usa el Random, ¿de dónde la saca?

Me uno a ti en la duda ¿alguien sabe cual es exactamente el algoritmo que usa la función random?

delphi.com.ar 08-12-2006 22:40:26

Cita:

Empezado por roman
¿Qué pasa con Federico? ¿A él no le es suficiente? :p

Será porque me dedico a la industria del juego (soy el de la izquierda), y existen estándares que tienen ciertas exigencias con respecto a los RNG´s.

Saludos!


La franja horaria es GMT +2. Ahora son las 23:32:35.

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