| Autor |
Beitrag |
JackBauer91
Hält's aus hier
Beiträge: 7
|
Verfasst: 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 Narses: Topic aus Off Topic verschoben am So 01.11.2009 um 00:16
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Sa 31.10.09 16:11
Hallo und  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 
Hält's aus hier
Beiträge: 7
|
Verfasst: Sa 31.10.09 16:42
hab jetzt so angefangen
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 Narses: Delphi-Tags hinzugefügt
Zuletzt bearbeitet von JackBauer91 am Sa 31.10.09 16:46, insgesamt 1-mal bearbeitet
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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 
Hält's aus hier
Beiträge: 7
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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.
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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 31.10.09 21:04
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 01.11.09 04:36
Mal 'ne doofe Frage, wer schreibt hier eigentlich jetzt das Programm? 
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: So 01.11.09 09:07
elundril hat folgendes geschrieben : | | 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.
Lannes hat folgendes geschrieben : | | leg Dir ein Array [1..49] of Boolean an, darin die entsprechende Zahl(also dann der Index) auf True setzen: |
Und so auch nicht.
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? 
_________________ Na denn, dann. Bis dann, denn.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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 
Hält's aus hier
Beiträge: 7
|
Verfasst: 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
      
Beiträge: 375
Erhaltene Danke: 7
XP, W7, W8
Deutschland
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: So 01.11.09 17:57
Hallo,
alzaimar hat folgendes geschrieben : | Lannes hat folgendes geschrieben : | | leg Dir ein Array [1..49] of Boolean an, darin die entsprechende Zahl(also dann der Index) auf True setzen: | Und so auch nicht. |
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.)
JackBauer91 hat folgendes geschrieben : | | 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 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 01.11.09 18:08
kriegs aba nicht gebacken. (bin leider noch net so gut in dem fach informatik...)
--- Moderiert von Narses: Beiträge zusammengefasst---
kann mir keiner mehr helfen?
brauche hilfe
--- Moderiert von Narses: Beiträge zusammengefasst---
hab jetzt für die edit felder das so:
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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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 )
|
|