Das mit dem Set hat mir jetzt doch keine Ruhe gelassen. Gut, gebe zu, daß das jetzt ein halbes Holzhammer-Programm ist
:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i : byte;
begin
randomize;
BereitsGezogen := 0;
gezogene := [];
for i := 1 to 49 do begin
LottoZahlen := LottoZahlen + [i];
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,kugel : byte;
begin
if Bereitsgezogen < 6 then begin
Repeat
kugel := random (48) + 1;
i := i + 1;
until not (kugel in gezogene);
BereitsGezogen := BereitsGezogen + 1;
Label1.Caption := 'gezogen: '+ IntToStr (BereitsGezogen);
Memo1.Lines.Add(IntToStr (Kugel));
gezogene := gezogene + [Kugel];
LottoZahlen := LottoZahlen - [kugel];
end
else
ShowMessage ('Schon 6 Kugeln gezogen !');
end;
Tja, habe selbst dumm geguckt wie mickrig das ganze geworden ist. Da es aber wirklich sehr einfach zu verstehen ist, will ich das den Anfängern nicht vorenthalten. Vom Prinzip her gleicht es dem von Hagen, nur ich benutze 2 Sets, statt 2 dyn. Arrays. Optimiert ist auch nichts.
Aber
So programmiere ich normalerweise nicht ! Ich habe 1. keine Konstanten benutzt, sondern die Zahlen stehen mehrfach explizit im Quelltext und 2. die Repeat-Schleife, die gefällt mir nun überhaupt nicht, theoretisch könnte die ins Unendliche laufen. Also meine lieben Kinder
, bitte nicht einen solchen Stil überall verwenden, sonst kriegt ihr Haue von der Mami.
Hier noch die 2 Sets:
Delphi-Quellcode:
private
{ Private declarations }
BereitsGezogen : byte;
gezogene,
Lottozahlen : SET OF byte;