Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi randomize problem (https://www.delphipraxis.net/142720-randomize-problem.html)

painrestricter 2. Nov 2009 14:17


randomize problem
 
servuß

ich bin neu hier und programmier noch nicht so lange, deswegen brauch ich euch ;)

also ich will ein kleines programm schreiben, dass mir lottozahlen generiert.
die basis steht ja schon, funktionieren tuts ja auch, aber obwohl ich eine if schleife für die 0 rein hab (die gibt es ja bei lotto nicht) kommt sie immer wieder.

weiterhin will ich das so machen, dass ne zahl nur einmal vorkommt. manchmal kommen 2 gleich zahlen vor.

hier mal der (kleine) sourcecode


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
randomize;
for i := 1 to 6 do begin
test := random(49);
if test = 0 then begin
memo1.clear;
test := random(49);
if test < 6 then begin
memo1.Clear;
test := random(49);
end;
end;
Edit1.Text := 'Generating ' + Inttostr(i) + ' of 49 done';
Memo1.Lines.Add(Inttostr(test));
end;
hier kommen trotzdem noch Nullen mit rein und manchmal kommen nur 2 zahlen..ich versteh das nicht.

weiterhin hab ich noch ne frage:
ich hab ein onclick ereignis, und will in einem anderen onclick ereignis darauf "zugreifen"
dh ich klick auf nen button, dann prozedur usw und dann will ich button2 sagen
if button1.click then begin
// meine code
end;

aber jedes mal kommt ne fehlermeldung, habs schon anders versucht, geht auch nicht.

Ich sag schon mal danke für die Hilfe

guidok 2. Nov 2009 14:22

Re: randomize problem
 
Zunächst mal: Es gibt keine if-Schleifen :zwinker:

Das Problem mit der Null kannt du am einfachsten so lösen:

Delphi-Quellcode:
test := random(48) + 1;
Damit werden Zahlen zwischen 1 und 49 erzeugt.

Dir ist schon klar, dass du mit der Anweisung "memo1.clear" den kompletten Inhalt des Memos löscht, inklusive der Zahlen, die korrekt gezogen wurden?

Um zu verhindern, dass Zahlen doppelt kommen könntest musst du die bereits gezogenen Zahlen irgendwo speichern und nach dem Ziehen einer neuen Zahl prüfen, ob diese bereits vorhanden ist. In diesem Fall einfach noch eine neue Zahl ziehen.

Zitat:

weiterhin hab ich noch ne frage
Dafür solltest du bitte ein neues Thema eröffnen.

ToFaceTeKilla 2. Nov 2009 14:23

Re: randomize problem
 
Hiho, erstmal Willkommen in der DP!

Wegen der Null, mach einfach
Delphi-Quellcode:
random(49)+1
Edit: Narf, wo war der Rote wieder? oO

Nersgatt 2. Nov 2009 14:23

Re: randomize problem
 
Ich rücke Dir den Code mal etwas sinnvoller ein, evtl. siehst Du Deinen Fehler dann selbst:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  randomize;

  for i := 1 to 6 do begin
    test := random(49);

  if test = 0 then begin
    memo1.clear;
    test := random(49);

    if test < 6 then begin
      memo1.Clear;
      test := random(49);
    end;

  end;

  Edit1.Text := 'Generating ' + Inttostr(i) + ' of 49 done';
  Memo1.Lines.Add(Inttostr(test));
end;

Luckie 2. Nov 2009 14:27

Re: randomize problem
 
Und Delphi-Referenz durchsuchenRandomize bitte nur einmal beim Start des Programms aufrufen.

himitsu 2. Nov 2009 14:32

Re: randomize problem
 
random(49) + 1 = 1 bis 49

Zitat:

Zitat von Nersgatt
Ich rücke Dir den Code mal etwas sinnvoller ein, evtl. siehst Du Deinen Fehler dann selbst:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  randomize;

  for i := 1 to 6 do begin
    test := random(49);

    if test = 0 then begin
      memo1.clear;
      test := random(49);

      if test < 6 then begin
        memo1.Clear;
        test := random(49); <<<<<<<<
      end;

    end;

    Edit1.Text := 'Generating ' + Inttostr(i) + ' of 49 done';
    Memo1.Lines.Add(Inttostr(test));
  end;
end; // fehlte, aber egal

da fehlte zwar 'noch 'ne ebene, aber was Nersgatt sagen wollte.
wenn z.B. an der markieren Stelle eine 0 erzeugt wird ... was passiert dann wohl?

sirius 2. Nov 2009 14:33

Re: randomize problem
 
Zitat:

Zitat von ToFaceTeKilla
Wegen der Null, mach einfach
Delphi-Quellcode:
random(48)+1
Edit: Narf, wo war der Rote wieder? oO

Zwei User, und zweimal dieselbe (falsche) Lösung? :gruebel:
Delphi-Quellcode:
random(49)+1;
liefert doch die richtige Lösung.

guidok 2. Nov 2009 14:35

Re: randomize problem
 
Zitat:

Zitat von sirius
Zwei User, und zweimal dieselbe (falsche) Lösung? :gruebel:

Mist, nicht aufgepasst, aber dafür haben wir ja dich :thumb:

ToFaceTeKilla 2. Nov 2009 14:40

Re: randomize problem
 
Ist doch richtig, weis gar nicht was du hast :stupid:

himitsu 2. Nov 2009 14:45

Re: randomize problem
 
macht nix ... ihr hatte zumindestens die ursprüngliche Rechnung beibehalten
random(49) und dann die 0 ignorieren macht Max(Random(49), RandomRange(1, 49))
und dieses entspricht random(48)+1 *tröst*

Aber bei "6 aus 49" aka "6 mal 1..49" ist eigentlich:
random(49) = 0..48
random(49) + 1 = 1..49


PS: ansonsten ist das da oben aber "6 * 1 aus 49" und nicht "6 aus 49"
(doppelte Zahlen müssen noch raus)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr.
Seite 1 von 3  1 23      

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