Delphi - Números Aleatorios

 
Vista:
sin imagen de perfil

Números Aleatorios

Publicado por José Rodríguez (157 intervenciones) el 24/11/2005 15:36:28
Buenas, tengo un problema necesito hacer un programa que genere numeros aleatorios sin que se repitan tengo un codigo que lo hace perfectamente, pero el detalle es que cada vez que cierro el programa y lo vuelvo a ejecutar siempre me genera los mismo numeros aleatorios y quisiera que eso no sucediera aqui les dejo el codigo que consegui en una pagina de internet http://q3.nu/trucomania

unit uTAlea;

interface

uses
Windows, SysUtils;

type
{Array de Booleanos de Longitud Variable}
TArrayBool = Array [0..0] of Boolean;
PArrayBool = ^TArrayBool;

{Clase para manejar Números Aleatorios}

TAlea = class
Maximo: Integer; //Valor Máximo de los Números Obtenidos
Lista: PArrayBool;
FaltanDeSacar: Integer;
constructor Create (Rango: Integer);
destructor Destroy; override;
procedure Reset; //Resetea la Lista de Números
function PillaNumero: Integer; //Devuelve un Número aleatorio sin repetición
end;

implementation

constructor TAlea.Create (Rango: Integer);
begin
{
Si los Númerosa extraer no pueden ser repetidos
hemos de crear un array para almacenar cual ha salido y cual no
como el array ha de ser variable, usamos el GetMem y
los punteros
}

inherited Create;
Maximo := Rango;
FaltanDeSacar := Rango;

{Reservamos memoria para el array de longitud variable}

GetMem (Lista, 1 + Maximo * SizeOf (Boolean));
ZeroMemory (Lista, 1 + Maximo * SizeOf (Boolean));
end;

destructor TAlea.Destroy;
begin
if Assigned (Lista) then
FreeMem (Lista, 1 + Maximo * SizeOf (Boolean));

inherited Destroy;
end;

function TAlea.PillaNumero: Integer;
var
Numero: Integer;
begin
if FaltanDeSacar = 0 then
raise Exception.Create ('Error. No se puede sacar otro Número sin repetir');

{Buscamos un número que no haya salido}

repeat
Numero := Random (Maximo)
until not Lista^[Numero];
{Lo apuntamos en la Lista de Números ya usados}
Lista^[Numero] := True;
{Decrementamos la cantidad de números que faltan por salir}
Dec (FaltanDeSacar);
Result := Numero;
end;

procedure TAlea.Reset;
begin
ZeroMemory (Lista, 1 + Maximo * SizeOf (Boolean));
FaltanDeSacar := Maximo;
end;

end.

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Números Aleatorios

Publicado por Dr Juzam (821 intervenciones) el 24/11/2005 16:44:22
Prueba añadiendo

Randomize;

en Oncreate del Form. Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar