AGB  ·  Datenschutz  ·  Impressum  







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

randomize problem

Ein Thema von painrestricter · begonnen am 2. Nov 2009 · letzter Beitrag vom 3. Nov 2009
Antwort Antwort
Seite 1 von 3  1 23      
painrestricter

Registriert seit: 2. Nov 2009
43 Beiträge
 
#1

randomize problem

  Alt 2. Nov 2009, 14:17
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
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#2

Re: randomize problem

  Alt 2. Nov 2009, 14:22
Zunächst mal: Es gibt keine if-Schleifen

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

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.
  Mit Zitat antworten Zitat
ToFaceTeKilla

Registriert seit: 17. Mai 2006
Ort: Leipzig
283 Beiträge
 
Delphi XE2 Professional
 
#3

Re: randomize problem

  Alt 2. Nov 2009, 14:23
Hiho, erstmal Willkommen in der DP!

Wegen der Null, mach einfach random(49)+1 Edit: Narf, wo war der Rote wieder? oO
Billy Gerwitz
"Bei der Softwareentwicklung suchen wir nicht den richtigen Weg, sondern den am wenigsten falschen." - frei nach V. Hillmann
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: randomize problem

  Alt 2. Nov 2009, 14:23
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;
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: randomize problem

  Alt 2. Nov 2009, 14:27
Und Delphi-Referenz durchsuchenRandomize bitte nur einmal beim Start des Programms aufrufen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: randomize problem

  Alt 2. Nov 2009, 14:32
random(49) + 1 = 1 bis 49

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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: randomize problem

  Alt 2. Nov 2009, 14:33
Zitat von ToFaceTeKilla:
Wegen der Null, mach einfach random(48)+1 Edit: Narf, wo war der Rote wieder? oO
Zwei User, und zweimal dieselbe (falsche) Lösung?
random(49)+1; liefert doch die richtige Lösung.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#8

Re: randomize problem

  Alt 2. Nov 2009, 14:35
Zitat von sirius:
Zwei User, und zweimal dieselbe (falsche) Lösung?
Mist, nicht aufgepasst, aber dafür haben wir ja dich
  Mit Zitat antworten Zitat
ToFaceTeKilla

Registriert seit: 17. Mai 2006
Ort: Leipzig
283 Beiträge
 
Delphi XE2 Professional
 
#9

Re: randomize problem

  Alt 2. Nov 2009, 14:40
Ist doch richtig, weis gar nicht was du hast
Billy Gerwitz
"Bei der Softwareentwicklung suchen wir nicht den richtigen Weg, sondern den am wenigsten falschen." - frei nach V. Hillmann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: randomize problem

  Alt 2. Nov 2009, 14:45
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 21:43 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