AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Zahlen beim Lotto Generator

Ein Thema von g-hun · begonnen am 31. Mär 2006 · letzter Beitrag vom 1. Apr 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Doppelte Zahlen beim Lotto Generator

  Alt 31. Mär 2006, 17:18
Also mein Code ist getestet und funktioniert. Hab einfach jetzt ned eingerückt, sonst mach ich das schon immer.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#12

Re: Doppelte Zahlen beim Lotto Generator

  Alt 31. Mär 2006, 17:24
Hier noch ein paar Anregungen: klick

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#13

Re: Doppelte Zahlen beim Lotto Generator

  Alt 31. Mär 2006, 18:16
nein, der Code sollte nicht ordnungsgemäß funtionieren:
isdouble:=False; muß for die Schleife, denn so wird nur die letzte Zahl geprüft.
for J:=1 to 6 do du prüfst auf Zahlen, die es noch nicht gibt (funktioniert zwar, ist aber nicht schön).
Und wozu 2 Schleifen?
Delphi-Quellcode:
procedure GenerateLottoNumbers;
var isdouble: Boolean;
  I, J: Integer;
  zahl: array[1..6] of Integer;

begin;
  randomize;
  for I:=1 to 6 do
  begin
    repeat
      zahl[I]:=Random(49)+1;
      isdouble:=False;
      for J:=1 to I - 1 do
        isdouble:=isdouble or (zahl[I]=zahl[J]);
    until not isdouble;
    TLabel(FindComponent('Label'+IntToStr(I))).Caption:=ItToStr(zahl[I]);
  end;
end;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#14

Re: Doppelte Zahlen beim Lotto Generator

  Alt 31. Mär 2006, 19:07
Zitat:
for J:=1 to 6 do du prüfst auf Zahlen, die es noch nicht gibt (funktioniert zwar, ist aber nicht schön).
Und wozu 2 Schleifen?
Beziehst du dich auf meinen Post?

Die erste Schleife [for i:=1 to 6 do zahl[i]:= random(49)+1;] war nur dazu gedacht, zu zeigen, wie man den Block abkürzen kann und hat mit dem eigentlichen Ansatz nichts zu tun.

Um zu überprüfen, ob eine Zahl schon gezogen wurde, benutze ich das set, weil es schöner und wahrscheinlich schneller ist, einfach nur auf 'in Set' zu prüfen, als eine Schleife über alle schon gezogenen Zahlen zu machen, so wie du es in deinem Beispiel gemacht hast.

Delphi-Quellcode:
list: set of Byte;
i,j: integer;
zahl: array[1..6] of byte;
begin
list:=[];

for i:=1 to 6 do
begin
  repeat
  j:= random(49)+1;
  until (not (j in list));
zahl[i]:=j;
list:= list+[j];
end;
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#15

Re: Doppelte Zahlen beim Lotto Generator

  Alt 31. Mär 2006, 19:21
Ups ... neee, dat war auf 3_of_8's Post bezogen °_°

Also auf Beitrag #3 und
Zitat von 3_of_8:
Also mein Code ist getestet und funktioniert. Hab einfach jetzt ned eingerückt, sonst mach ich das schon immer.
Und das SET ist hier auch nicht schlecht, aber sobald die Zahlen nicht zwischen 0 und 255 liegen wird es damit etwas schwer, bis unmöglich
$2B or not $2B
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Doppelte Zahlen beim Lotto Generator

  Alt 1. Apr 2006, 08:23
Guten Morgen, Allerseits.

Ich würde folgende Arrays anlegen:

AlleZahlen : array[1..49] of byte;
EineZiehung : array[1..7] of byte; // sofern eine Zeihung simuliert werden soll
EinEinsatz : array[1..x] of byte; // wenn zufällig erzeugte Einsätze für x Zahlen erzeugt werden sollen;

Jede erzeugt Zahl würde ich im Array AlleZahlen auf Null setzen, so dass ich bei der nächsten Zahl ganz einfach prüfen könnte, ob die Zahl bereits einmal erzeugt wurde. Das ganze so lange laufen lassen, bis die gewünschte Zahl von Zahlen erzeugt ist und abschließend das Array AlleZahlen wieder in den ursprünglichen Zustand verseten.

Delphi-Quellcode:
procedure Ziehung;
begin
  i := 1;
  repeat
    Ramdomize;
    zahl := random(49)+1;
    if AlleZahlen(zahl] <> 0 then
    begin
      EineZiehung[i] := zahl; // oder EinEinsatz[i] := zahl;
      AlleZahlen[i] := 0;
      inc[i];
    end;
  until i = 7; // oder i = x für Einsätze mit x Zahlen
  for i := 1 to 49 do AlleZahlen[i] := i;
end;
Ich habe das nur mal so schnell hingeschrieben und nicht getestet, weil ich im Büro kein Delphi auf dem Rechner habe, sollte aber klappen.

mfg gfjs
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
KLS

Registriert seit: 20. Jun 2004
Ort: Berlin
89 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Doppelte Zahlen beim Lotto Generator

  Alt 1. Apr 2006, 08:49
Das selbe thema hatte ich vor kurzem in nem anderen Forum auch gesehen.

http://forum.giga.de/showthread.php?t=698407
Thomas H.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#18

Re: Doppelte Zahlen beim Lotto Generator

  Alt 1. Apr 2006, 09:28
Bei 7 aus 49 noch kein wirkliches Problem, aber sobald sich die Anzahl der gezogenen Elemente vergrößert, führt die Random-Try-And-Error-Taktik immer mehr zur Endlosschleife hin. Permutationen würden sich dann eher anbieten, die bleiben immer linear.

[edit] @gfjs: Wenn du nur auf Ungleichheit zu 0 prüfst, kannst du gleich ein Boolean-Array verwenden. [/edit]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#19

Re: Doppelte Zahlen beim Lotto Generator

  Alt 1. Apr 2006, 12:22
Lies dir diesen Thread http://www.delphipraxis.net/internal...ct.php?t=10946 mal ganz genau durch.
Alle Vorschläge hier sind defakto falsch und betrachten das Problem nur ingenieurtechnisch und sind selbst dann nicht sonderlich elegant.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Armageddon
Armageddon

Registriert seit: 30. Mär 2003
Ort: Wilflingen
158 Beiträge
 
#20

Re: Doppelte Zahlen beim Lotto Generator

  Alt 1. Apr 2006, 13:33
Das hab ich grad durch Zufall im Easy Delphi Helper gesehen. Dachte ich poste es mal, vielleicht hilfts ja.

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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz