unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
// Zahlen von 1 bis 100 sind möglich.
AnzahlZahlen = 100;
type
TForm1 =
class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
Label4: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
ZahlVerwendet :
array[1..AnzahlZahlen]
of boolean;
AnzahlverwendeterZahlen : Integer;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var lk : Integer;
begin
// Es wurden noch keine Zahlen gezogen
AnzahlverwendeterZahlen := 0;
// Stellt im Array für jede Zahl ein,
// dass sie noch nicht gezogen wurde.
for lk := 1
to AnzahlZahlen
do begin
ZahlVerwendet[lk] := False;
end;
Randomize;
end;
procedure TForm1.Button1Click(Sender: TObject);
var lk : Integer;
li : Integer;
Rnd : Integer;
Cnt : Integer;
begin
if ((AnzahlZahlen - AnzahlverwendeterZahlen) < 3)
then begin
MessageDlg('
Es können keine Zufallszahlen mehr gezogen', mtInformation, [mbOK], 0);
Exit;
end;
// drei Zahlen werden gezogen
for lk := 1
to 3
do begin
// Berechnet, welche Zahl als Zufalllszahl genommen werden soll.
// Ist Rnd = 4 soll z.B. die vierte noch nicht verwendete Zahl
// benutzt werden.
Rnd := Random(AnzahlZahlen - AnzahlverwendeterZahlen) + 1;
Cnt := 0;
for li := 1
to AnzahlZahlen
do begin
if (
not ZahlVerwendet[li])
then begin
Inc(Cnt);
end;
if (Cnt = Rnd)
then begin
Rnd := li;
// Dies ist die zufällige Zahl
ZahlVerwendet[li] := True;
break;
end;
end;
// for li
Inc(AnzahlverwendeterZahlen);
// Trägt die Zufallszahl in ein Label ein.
case lk
of
1: Label1.Caption := Format('
%d', [Rnd]);
2: Label2.Caption := Format('
%d', [Rnd]);
3: Label3.Caption := Format('
%d', [Rnd]);
end;
// case
end;
// for lk
Label4.Caption := Format('
Anzahl verbleibender Züge: %d',
[(AnzahlZahlen - AnzahlverwendeterZahlen)
DIV 3]);
end;
end.