Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-11-2006
Tapax Tapax is offline
Miembro
 
Registrado: may 2006
Posts: 13
Poder: 0
Tapax Va por buen camino
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

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
Responder Con Cita
  #2  
Antiguo 08-11-2006
mcnudi mcnudi is offline
Miembro
 
Registrado: nov 2006
Posts: 12
Poder: 0
mcnudi Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 14-11-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
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.
__________________
[Crandel]
Responder Con Cita
  #4  
Antiguo 14-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 14-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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}
Responder Con Cita
  #6  
Antiguo 14-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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 ...
Responder Con Cita
  #7  
Antiguo 14-11-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
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

Con exepción de nuestro amigo Fede
__________________
[Crandel]
Responder Con Cita
  #8  
Antiguo 14-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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?

// Saludos
Responder Con Cita
  #9  
Antiguo 14-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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?
Archivos Adjuntos
Tipo de Archivo: zip Aleator.zip (5,8 KB, 97 visitas)
Responder Con Cita
  #10  
Antiguo 08-12-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.954
Poder: 27
delphi.com.ar Va camino a la fama
Cita:
Empezado por roman
¿Qué pasa con Federico? ¿A él no le es suficiente?
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Diferencia entre Consultas santi33a MS SQL Server 1 08-11-2005 09:19:22
Diferencia entre .GDB y .FDB CarlosHernandez Firebird e Interbase 3 14-09-2005 05:08:49
Diferencia entre versiones. Markos1970 Debates 6 14-07-2005 22:56:17
Diferencia entre fechas.... seb@ OOP 1 21-08-2003 16:57:22


La franja horaria es GMT +2. Ahora son las 00:50:39.


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
Copyright 1996-2007 Club Delphi