Autor Beitrag
JackBauer91
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 31.10.09 15:36 
Hey, ich bräuchte Hilfe bei einem lotto programm was ich für die schule programieren soll (anwendung mit grafischer oberfläche).
Mein Programm sieht bissher so aus:
6 Edit Felder indem man seine Zahlen eingibt und Ein Button der dann die Zahlen überprüft.
Wie kann man nun überprüfen lassen ob die selben zahlen eingegeben wurden? (direkt bei der eingabe überprüfen?!)


Hoffe ihr könnt mir helfen.


Moderiert von user profile iconNarses: Topic aus Off Topic verschoben am So 01.11.2009 um 00:16
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 31.10.09 16:11 
Hallo und :welcome: im DF!

Also, wenn du direkt bei der Eingabe von einem Editfeld etwas überprüfen willst, musst du das in das OnKeyPress-Ereignis vom jeweiligen Edit schreiben. Überprüfen kannst du es dann mittels einer If-abfrage.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
JackBauer91 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 31.10.09 16:42 
hab jetzt so angefangen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Edit1Change(Sender: TObject);
begin
if StrToInt(edit1.Text) > 49 then showmessage('Zahl zu groß');
end;

klappt auch, wenn ich jedoch jetzt die zahl löschen will, so das das feld wieder leer ist kommt eine kurze fehler meldung mit dem inhalt: " ist kein gültiger integerwert.
Das programm läuft zwar immer noch danach weiter aba die fehlermeldung muss ich natürlich weghaben^^

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Zuletzt bearbeitet von JackBauer91 am Sa 31.10.09 16:46, insgesamt 1-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 31.10.09 16:45 
vielleicht weil du dann nix mehr im editfeld stehen hast? ;) deswegen eher inttostrdef() verwenden oder tryinttostr ;)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
JackBauer91 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 31.10.09 18:59 
danke für die hilfe
hab noch ne frage, wie mache ich das überpfrüft wird, das auch keien zahl doppelt eingegeben wird?

und wie überpfrüfe ich das der computer keien doppelten random zahlen zieht?
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 31.10.09 19:52 
Also bei den Edits is mir noch nix eingefallen, jedoch kann ich dir nen Tipp geben zu den lottozahlen geben.

Du machst dir einfach ein Set aus Integers und schaust dann bei jedem durchgang von Random ob es schon drin ist.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var Zahlen: Set of Byte;
    i, zahl, counter: integer;
begin
  Zahlen := [1..45];
  while counter < 6 do begin
    zahl := random(44) +1;
    if not (zahl in Zahlen) then begin
      Zahlen := Zahlen - [zahl];
      FügeZahlenZuListeGezogenerZahlenHinzu(zahl);
    end;
  end;
end;


so kannst du sichergehen das jede zahl nur einmal vorhanden ist.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 31.10.09 21:04 
Hallo,
user profile iconJackBauer91 hat folgendes geschrieben Zum zitierten Posting springen:
...wie mache ich das überpfrüft wird, das auch keien zahl doppelt eingegeben wird?


leg Dir ein Array [1..49] of Boolean an, darin die entsprechende Zahl(also dann der Index) auf True setzen:
ausblenden Delphi-Quelltext
1:
MyBoolArray[EingegebeneZahl] := True;					

Die Abfrage ob die Zahl schon mal eingegeben wurde sieht dann so aus:
ausblenden Delphi-Quelltext
1:
2:
if MyBoolArray[EingegebeneZahl] then
  //Zahl gibt es schon

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 01.11.09 04:36 
Mal 'ne doofe Frage, wer schreibt hier eigentlich jetzt das Programm? ;)
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 01.11.09 09:07 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
Du machst dir einfach ein Set aus Integers und schaust dann bei jedem durchgang von Random ob es schon drin ist.
So funktioniert Lotto doch nicht. :shock:

user profile iconLannes hat folgendes geschrieben Zum zitierten Posting springen:
leg Dir ein Array [1..49] of Boolean an, darin die entsprechende Zahl(also dann der Index) auf True setzen:
Und so auch nicht. :angel:

Sondern? Es existieren 49 Kugeln, die mit den Zahlen 1-49 beschriftet sind. Diese werden in einen Behälter gelegt. Dann wird zufällig eine der 49 Kugeln gezogen und somit aus dem Behälter entfernt. Danach wird von den verbliebenden 48 Kugeln eine ausgewählt und wieder aus dem Behälter entfernt... Das Ganze wird 6x durchgezogen. Zum Schluss wird 1x die Superzahl gezogen.

Ich würde mir also eine Liste mit 49 Kugeln erstellen, wobei ich anstatt 'Kugel' nur die Beschriftung ('String') verwende. Da die Operation 'Kugel entfernen' eine zentrale Bedeutung zukommt, wähle ich mir eine Datenstruktur, die das bereits kann ('TStringList.Delete').

Die nächste zentrale Operation ist 'Kugel ziehen'. Was macht die? Die wählt zufällig eine Kugel (Beschriftung/String) aus dem Behälter (TStringList) aus und entfernt (Delete) diese aus dem Behälter (TStringlist).

Die Ziehung '6 aus 49 mit Zusatzzahl' sieht also so aus:
1. Kugelbehälter mit 49 Koogeln füllen.
2. 6x eine 'Koogel ziehen' und die Koogel anzeigen.
3. 1x eine 'Koogel ziehen' (das ist die Zusatzzahl) und die Zusatzzahl anzeigen.

Damit bin ich doch jetzt so gut wie am Ziel, oder?

P.S.: Ich habe einen versteckten Hint in meiner Beschreibung. Findest Du ihn? :wink:

_________________
Na denn, dann. Bis dann, denn.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: So 01.11.09 15:36 
is es nicht eigentlich blunzn, um es auf wienerisch zu sagen, ob man n array hat und daraus mit random wirklich zieht oder n random von n zahlen und bei gleichheit nochmal random macht? Der zufall ist so oder so gegeben und darauf kommt es doch beim lotto an, oder irre ich?

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 01.11.09 15:40 
Wenn Du richtig viel Pech hast, oder einfach dein Verfahren auf die zugegebenermaßen sehr selten gespielte Variante '48 aus 49' ausweitest, dürfte dein Verfahren etwas länger dauern. Nämlich dann, wenn Du zufällig immer die Zahlen 'ziehst', die schon gezogen wurden.

Meine Version ist schneller und terminiert garantiert, was man von deiner Version nicht behaupten kann. Vermutlich wird sie terminieren, aber sicher ist das eben nicht.

Nebenbei gibt es noch eine weitere Möglichkeit: Wir mischen die Zahlen 1..49 einfach zufällig nach Fisher-Yates und geben die ersten 6+1 Zahlen aus.

_________________
Na denn, dann. Bis dann, denn.
JackBauer91 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 01.11.09 17:40 
hab mal hochgeladen was ich jetzt so habe.
mein problem jetzt ist noch das, wenn bei der eingabe überpfüft wird ob die zahl schon vorher eingegeben wurde und die meldung ausgegeben wird das die zahl doppelt ist soll das feld wieder gelöscht werden...
und die fehlermeldung das: " kein integer wert ist muss ich auch noch wegbekommen.

wäre dankbar wenn ihr mir helfen könnt, da ich das programm bis morgen fertig haben muss :S
Einloggen, um Attachments anzusehen!
ssb-blume
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 375
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: So 01.11.09 17:48 
Wie wäre es mit 49 Elementen, die mit einem Loop selbst erzeugt werden und Ihren Status (gedrückt/nicht gedrückt) entsprechernd zeigen? Die Anordnung könnte dem Tippschein entsprechen.
Dann spart man sich die ganze Einmaligkeit der Zahlen und kann auch noch falsche wieder wegnehmen.
Hansi

_________________
Brain: an apparatus with which we think we think.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: So 01.11.09 17:57 
Hallo,

user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLannes hat folgendes geschrieben Zum zitierten Posting springen:
leg Dir ein Array [1..49] of Boolean an, darin die entsprechende Zahl(also dann der Index) auf True setzen:
Und so auch nicht. :angel:

In diesem Thema werden zwei Fragen behandelt:
a.) Lottozahlen ziehen: wie zieht man Lottozahlen und verhindert dabei doppelt vergebene Zahlen
b.) Lottozahlen eingeben: wie überprüft man doppelte Eingaben

Mein Vorschlag bezog sich auf Fall b.)





user profile iconJackBauer91 hat folgendes geschrieben Zum zitierten Posting springen:
mein problem jetzt ist noch das, wenn bei der eingabe überpfüft wird ob die zahl schon vorher eingegeben wurde und die meldung ausgegeben wird das die zahl doppelt ist soll das feld wieder gelöscht werden...
siehe Beitrag oben Link

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
JackBauer91 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 01.11.09 18:08 
kriegs aba nicht gebacken. (bin leider noch net so gut in dem fach informatik...)

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

kann mir keiner mehr helfen?
brauche hilfe :(

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

hab jetzt für die edit felder das so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Edit1Change(Sender: TObject);
begin
    if (edit1.text = edit2.Text) or (edit1.text = edit3.Text)
    or (edit1.text = edit4.Text) or (edit1.text = edit5.Text)
    or (edit1.text = edit6.Text) then showmessage('Es darf nicht die selbe Zahl gewählt werden!');
      if (edit1.text = edit2.Text) or (edit1.text = edit3.Text)
      or (edit1.text = edit4.Text) or (edit1.text = edit5.Text)
      or (edit1.text = edit6.Text) then edit1.Clear;
  if StrToInt(edit1.Text) > 49 then showmessage('Zahl zu groß');
  if StrToInt(edit1.Text) < 1 then showmessage('Zahl zu klein');
end;


wenn ich jetzt doppelte zahlne eingebe kommt meldung keine doppelten zahlen und das feld wird wieder gelöscht, jedoch kommt auch die meldung: " ist kein gültiger integer wert.
Wie bekomme ich das weg???
plz brauch am besten schnell ne antwort
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 02.11.09 01:14 
Hallo,

eine schnelle Antwort hast Du doch Gestern schon bekommen. Link

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )