// Die Prozedur
kann Zufallszahlen von 0 bis
(höchstens) 65534 erstellen, kann das
// Mehrfachvorkommen von Zahlen auf Wunsch unterdrücken sowie die
Zahlen sortieren.
// Die Zahlen werden in dem Array "f" abgelegt.
// Zusätzlich kann mit einem Startwert für den Zufallsgenerator
festgelegt werden,
// ob immer neue zufällige Zahlenreihen erzeugt werden
(0), oder ob
eine
// Zufallsfolge immer wieder reproduziert wird
(1..4294967295).
// Im Beispiel
werden 500 Zahlen von 0 bis einschl. 1000 erzeugt, gleiche Zahlen
// werden unterdrückt, die Zahlen werden sortiert und es werden
immer neue
// Zahlenreihen generiert.
// Getestet mit D4 unter Win98
var
f: array of word;
Anzahl: word;
function zufallszahlen(Minzahl, Maxzahl: word;
GleicheErlaubt, Sortiert: boolean; Startwert: longword): boolean;
var z, x: word;
begin
result := false;
if maxzahl > 65534 then begin
showmessage('Der Maximalwert darf 65534 nicht übersteigen');
exit;
end;
if anzahl > ((maxzahl - minzahl) div 2) then begin
showmessage('Anzahl ist für ordnungsgemäßes Arbeiten zu hoch');
exit;
end;
try
if startwert = 0 then randomize else
randseed := startwert - 2147483648;
for x := 0 to length(f) - 1 do f[x] := $FFFF;
repeat
z := random(maxzahl - minzahl + 1) + minzahl;
for x := 0 to anzahl - 1 do begin
if (f[x] = z) and (not GleicheErlaubt) then break;
if (z < f[x]) and sortiert then
if (x < anzahl - 1) then begin
move(f[x], f[x + 1], sizeof(f[x]) * (anzahl - x));
f[x] := z;
break;
end;
if f[x] = $FFFF then begin
f[x] := z;
break;
end;
end;
until f[anzahl - 1] < $FFFF;
except
exit;
end;
result := true;
end;
procedure TForm1.Button2Click(Sender: TObject);
var x: integer;
begin
screen.cursor := crHourglass;
RichEdit1.lines.beginupdate;
RichEdit1.clear;
Anzahl := 500;
setlength(f, anzahl);
if zufallszahlen(0, 1000, false, true, 0) then
for x := 0 to anzahl - 1 do RichEdit1.lines.add(inttostr(f[x]));
f := nil; // falls es nicht mehr gebraucht wird
RichEdit1.lines.endupdate;
screen.cursor := crDefault;
end;
|