Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Lottogenerator ERLEDIGT! (https://www.delphipraxis.net/87434-lottogenerator-erledigt.html)

PhilPhil 28. Feb 2007 17:18


Lottogenerator ERLEDIGT!
 
Hallo! Also ich hab mir was für den informatik überlegt was eigendlich einfach ist. Ich möchte einen Generator für Lottozahlen schreiben also randomize ich und denn mach ich ne Schleife. So alles schön und gut aber ich habe da einen ganzen haufen Befehle da ich angegeben hab die schleife solange laufen zu lassen bis a<>b, a<>c, usw. also liebe Leute geht das einfacher kleiner und schneller? und wenn ja wie?`kanns mir bitte einer erklären?

dominikkv 28. Feb 2007 17:26

Re: Lottogenerator
 
ich hab kein plan was a,b,c etc ist...
aber theoretisch geht das doch ganz einfach...ohne schleifen etc:
Delphi-Quellcode:
Randomize;
label1.caption := IntToStr(Random(49)+1);
//...
label6.caption := IntToStr(Random(49)+1);

ibp 28. Feb 2007 17:30

Re: Lottogenerator
 
Zitat:

Zitat von PhilPhil
So alles schön und gut aber ich habe da einen ganzen haufen Befehle da ich angegeben hab die schleife solange laufen zu lassen bis a<>b, a<>c, usw. also liebe Leute geht das einfacher kleiner und schneller?

ja

PhilPhil 28. Feb 2007 17:32

Re: Lottogenerator
 
Zitat:

Zitat von dominikkv
ich hab kein plan was a,b,c etc ist...
aber theoretisch geht das doch ganz einfach...ohne schleifen etc:
Delphi-Quellcode:
Randomize;
label1.caption := IntToStr(Random(49)+1);
//...
label6.caption := IntToStr(Random(49)+1);

so kann es passieren das ich alle 6 male 21 hab!

Zitat:

Zitat von ibp
Zitat:

Zitat von PhilPhil
So alles schön und gut aber ich habe da einen ganzen haufen Befehle da ich angegeben hab die schleife solange laufen zu lassen bis a<>b, a<>c, usw. also liebe Leute geht das einfacher kleiner und schneller?

ja

wie?

ibp 28. Feb 2007 17:38

Re: Lottogenerator
 
Zitat:

Zitat von PhilPhil
wie?

vielleicht solltest du etwas konkreter fragen und mal zeigen was du bisher hast!

zecke 28. Feb 2007 17:44

Re: Lottogenerator
 
:hi:

ich habe mal so etwas gemacht und habe nichts wirklich besseres gefunden, als du schon sagtest. bin aber nicht gerade ein delphi-meister. vielleicht hilft dir mein code trotzdem weiter:

Delphi-Quellcode:

var zahl1,zahl2,zahl3,zahl4,zahl5,zahl6 : integer;

// etc...

function zahlenziehen():integer;
begin
// Zufallsgenerator neu
randomize;

// Zahlen zuweisen
zahl11:=random(49)+1;

begin
  repeat
      zahl2:=random(49)+1;
  until
      zahl1<>zahl2;
end;

begin
  repeat
      zahl3:=random(49)+1;
  until
      (zahl1<>zahl3) and (zahl2<>zahl3);
end;
begin
  repeat
      zahl4:=random(49)+1;
  until
      (zahl1<>zahl4) and (zahl2<>zahl4) and (zahl3<>zahl4);
end;
begin
  repeat
      zahl5:=random(49)+1;
  until
      (zahl1<>zahl5) and (zahl1<>zahl5) and (zahl3<>zahl5) and (zahl4<>zahl5);
end;
begin
  repeat
      zahl6:=random(49)+1;
  until
      (zahl1<>zahl6) and (zahl2<>zahl6) and (zahl3<>zahl6) and (zahl4<>zahl6) and (zahl5<>zahl6);
end;
end;

PhilPhil 28. Feb 2007 17:48

Re: Lottogenerator
 
Also ich habs genauso wie Zecke gemacht! Und ich möchte von euch wissen ob es z.b. einen Imaginären Topf gibt aus dem ich 6 Zahlen zihen kann sodass ich 6 verschiedene hab! also das mein ich!

Namenloser 28. Feb 2007 17:49

Re: Lottogenerator
 
Bei dsdt gibt es diese version: (hier: http://www.dsdt.info/tipps/?id=470&search=lotto)
Dort wirde es mit einem boolean array gelöst. Ich hab auch mal sowas programmiert, mit nem array[0..6-1] of integer und anschließend mit bubble sort sortiert, aber ich bin ehrlich gesagt zu faul, danach zu suchen :D


Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
 var Zahlen: Array[1..49] of Boolean;
     i, z: Integer;
begin
  for i:= 1 to 49 do Zahlen[i]:=false;
  for i:=1 to 6 do begin
   repeat
    z:=random(49)+1
   until Zahlen[z] = false;
   Zahlen[z]:=true;
  end;
  Edit1.Text:='';
  for i:=1 to 49 do
   if Zahlen[i] then Edit1.Text:=Edit1.Text+' '+Inttostr(i)+' ';
end;

Hawkeye219 28. Feb 2007 18:03

Re: Lottogenerator
 
Willkommen in der Delphi-PRAXiS, PhilPhil!

Auch wenn du nicht sortieren möchtest, könnte dieser Thread für dich interessant sein.

Gruß Hawkeye

PhilPhil 28. Feb 2007 18:11

Re: Lottogenerator
 
danke! Nun wüsste ich nurnoch gerne wie ich die nicht sortiere und in verschiedene Felder bekomme!
thx fürs Willkommen :-)

Neutral General 28. Feb 2007 18:26

Re: Lottogenerator
 
Delphi-Quellcode:
TLottozahlen = Array[0..48] of Byte;

TLotto = Class
private
  FZahlen: TLottoZahlen;
  FCount: Integer;
  procedure Delete(Index: Integer);
public
  constructor Create;
  function Ziehen: Byte;
  property Count: Integer read FCount;
  destructor Destroy; override;
end;

constructor TLotto.Create;
var i: Integer;
begin
  inherited Create;
  FCount := 49;
  for i:= 0 to 48 do
    FZahlen[i] := i+1;
end;

procedure TLotto.Delete(Index: Integer);
begin
  System.Move(FZahlen[Index + 1], FZahlen[Index],
      (FCount - Index) * SizeOf(Byte));
  dec(FCount);
end;

function TLotto.Ziehen: Byte;
var x: Integer;
begin
  x := random(FCount);
  Result := FZahlen[x];
  Delete(X);
end;

destructor TLotto.Destroy;
begin
  inherited Destroy;
end;
Aufrufen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  Lotto := TLotto.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
  for i:= 1 to 6 do
    Memo1.Lines.Add(IntToStr(Lotto.Ziehen));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Lotto.Free;
end;
So könnte man es auch machen ;)

Gruß
Neutral General

PhilPhil 28. Feb 2007 18:28

Re: Lottogenerator
 
Danke Danke an alle!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz