Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
Delphi 5 Standard
|
Re: Random ohne Dublette
12. Jan 2007, 06:08
Moin!
@xaromz: Klasse Endlosschleife beim 6. Aufruf
Eine Möglichkeit:
Delphi-Quellcode:
var
Index:Byte;
Zahlen:Array [1..6] of Byte;
// Zurücksetzen
procedure InitRandom;
var i, p1, p2, temp:Byte;
begin
Index:=0;
For i:=1 to 6 do
Zahlen[i]:=i;
For i:=1 to 100 do begin
p1:=Random(6)+1;
p2:=Random(6)+1;
If p1=p2 then Continue;
temp:=Zahlen[p1];
Zahlen[p1]:=Zahlen[p2];
Zahlen[p2]:=temp;
end;
end;
// Zufallszahl erzeugen
function GetRandom(const Index:Byte):Byte;
begin
Case Index of
1..6: Result:=Zahlen[Index];
else Result:=0;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
InitRandom;
end;
//Aufruf:
procedure TForm1.Button1Click(Sender: TObject);
var Zufall:Byte;
begin
If Index=6 then begin
InitRandom;
Label1.Caption:='';
end;
Inc(Index, 1);
Zufall:=GetRandom(Index);
Label1.Caption:=Label1.Caption+IntToStr(Zufall)+' ';
end;
Eine andere Möglichkeit:
Delphi-Quellcode:
var
List:TList;
// Zurücksetzen
procedure InitRandom;
var i, p1, p2:Byte;
temp:PByte;
begin
For i:=1 to 6 do begin
New(temp);
temp^:=i;
List.Add(temp);
end;
For i:=1 to 100 do begin
p1:=Random(6);
p2:=Random(6);
If p1=p2 then Continue;
List.Exchange(p1, p2);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
List:=TList.Create;
Randomize;
InitRandom;
end;
//Aufruf:
procedure TForm1.Button1Click(Sender: TObject);
var Zufall:Byte;
begin
If List.Count=0 then begin
InitRandom;
Label1.Caption:='';
end;
Zufall:=PByte(List[0])^;
Dispose(List[0]);
List.Delete(0);
Label1.Caption:=Label1.Caption+IntToStr(Zufall)+' ';
end;
Grüßle!
|
|
Zitat
|