![]() |
6 aus 49 will nicht so richtig
Hi Leute!!
Erstmal zur Erklärung, ich soll 6 aus 49 programmieren, mache das in 3 memos, im 1ten werden die zahlen eingegeben, im 2ten lottozahlen erzeugt und im 3ten die übereinstimmungen angezeigt. Funktionier soweit. Jetzt habe ich aber das Problem, dass ich beim Eingeben der Zahlen auch doppelte Zahlen, wie 2,2,2 eingeben kann, keine Ahnung wie ich das Beheben soll :( Manchmal gibt der mir dann bei den Übereinstimmungen auch doppelte Zahlen an, ich bin ziemlich verzweifelt, habe das ganze Wochenende schon dran gebastelt und sehe nun gar nicht mehr durch. Guckt bitte mal meinen Quelltxt durch, ob ihr den / die Fehler seht :( Vielen Dank, LG Susi
Delphi-Quellcode:
[edit=Matze][delphi]-Tag geschlossen. MfG, Matze[/edit]
procedure TForm1.Button1Click(Sender: TObject);
var i,z,x,y,anz,o: integer; {startet Zufallszahlen für Memo2} begin randomize; For i:=1 TO 6 DO begin z:=random(49)+1; memo2.lines.add(IntToStr(z)); end; {zieht zufällige Superzahl} begin randomize; Superzahl:=random(10)+1; edit2.Text:=(IntToStr(Superzahl)); end; {Vergleich der eingegebenen mit den gezogenen Zahlen} anz:=0; For x:=0 To memo1.Lines.Count-1 Do For y:=0 To memo2.Lines.Count-1 Do IF memo1.Lines[x]=memo2.Lines[y] then begin memo3.Lines.add(memo1.lines[x]); anz:=anz+1; label5.caption:=IntToStr(anz); end; {Vergleich der Superzahlen} If edit1.Text=edit2.Text then begin edit3.Text:=edit1.Text; label8.Caption:='Superzahl stimmt überein!!' end else label8.caption:='leider nicht..'; {Elememinierung doppelter Zahlen} for i:=0 To memo2.Lines.count-1 DO begin o:=i+1; while o<memo2.lines.count do begin IF memo2.lines[i]=memo2.Lines[o] then begin memo2.lines.Delete(i); dec(o); end; inc(o); end; end; {Fehlerabfederung} anz:=0; if memo1.Lines.Count<>6 then begin ShowMessage('Bitte geben Sie genau 6 Zahlen als Tipp ein!'); exit; end; try For x:=0 TO memo1.lines.count-1 DO begin if not ((strToInt(memo1.Lines[x])<50) and (strToInt(memo1.Lines[x])>0)) then begin Showmessage('Bitte geben Sie nur Zahlen zwischen 1 und 49 ein!'); exit; end; end; except Showmessage('Fehler! Bitte geben Sie Zahlen ein!'); end; try if not ((strToInt(edit1.Text)<10)) then begin showmessage('Bitte geben Sie nur Zahlen zwischen 0 und 9 ein!'); exit; end; except Showmessage('Fehler! Bitte geben Sie Zahlen ein!'); end; end; end. |
Re: 6 aus 49 will nicht so richtig
Erstmal herzlich willkommen in der DP :dp:
Dieses Thema hatten wir hier schon öfter. Gehe 'mal bitte ins Suchfeld und suche folgenden Thread: Zitat:
Das dürfte Dir erstmal weiterhelfen Gruß Wolfgang |
Re: 6 aus 49 will nicht so richtig
Hallo,
dazu gibt es mehrere Ansätze. In dem Memo mit den eingegebenen Zahlen Sortierung einschalten und doppelte Einträge unterdrücken. Wenn Du das zu Fuss machen willst. Schaue Dir mal Memo1.lines.indexOf() an. Grüße Klaus |
Re: 6 aus 49 will nicht so richtig
hey und danke
und wie stelle ich ersteres ein? |
Re: 6 aus 49 will nicht so richtig
.. nun. da habe ich mich etwas weit aus dem Fenster gelehnt.
TMemo.lines hat keine Sorted Eigenschaft.
Delphi-Quellcode:
Grüße
var
sl :TStringList; begin sl := TStringList.Create; sl.assign(Memo1.lines); sl.Sorted := true; sl.Duplicates := dupIgnore; sl.add(Edit1.Text); Memo1.Lines.Assign(sl); sl.free; end; Klaus |
Re: 6 aus 49 will nicht so richtig
Ein besserer Ansatz wäre:
1. Erzeuge eine Liste aller Zahlen im Interval [1;49] --> array 2. Ziehe eine beliebige Zahl aus der Liste, zeige sie an. 3. Lösche(!) nun dieses Element aus der Liste. 4. Führe die Schritte 2..4 insgesamt 6x aus Fertig. Das ist genau das, was man beim Lotto (z.B.) macht. Gruß Wolfgang |
Re: 6 aus 49 will nicht so richtig
ich arbeite ja nun nicht so lange mit delphi...
iwie komme ich mit euren antworten gar nicht mehr klar :pale: habt ihr nicht was ganz ganz einfaches oder n stücke quelltext? :pale: |
Re: 6 aus 49 will nicht so richtig
Folgendes legt im Array Lotto erst einmal alle 49 Zahlen von 1..49 ab.
Dann ziehst Du eine Zahl (z.B. 26) und setzt an der Stelle Lotto[26] eine 0; Das ganze machst Du 6x und suchst am Ende nach den Nullen im Lotto-Array. Ich hoffe, Du kommst jetzt weiter, wenn nicht, wieder melden. Gruß Wolfgang
Delphi-Quellcode:
var
Form1: TForm1; lotto: array[1..49] of word; lotto2: array[1..6] of integer; sorted: array[1..6] of word; i,j:integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; procedure TForm1.Button1Click(Sender: TObject); var i,zaehler,temp:integer; begin //Listbox1.Clear; zaehler:=0; for i:=1 to 49 do lotto[i]:=i; //edit1.Text:=inttostr(lotto[34]); //Nur Test while zaehler<6 do begin temp:=random(49)+1; while lotto[temp]=0 do begin temp:=random(49)+1; end; lotto[temp]:=0; inc(zaehler); Listbox1.Items.Add(Inttostr(temp)); lotto2[zaehler]:=temp; //Edit1.Text:=Listbox1.items.text[1]+Listbox1.items.text[2] end; Edit1.Text:=IntToStr(lotto2[1]); Edit2.Text:=IntToStr(lotto2[2]); Edit3.Text:=IntToStr(lotto2[3]); Edit4.Text:=IntToStr(lotto2[4]); Edit5.Text:=IntToStr(lotto2[5]); Edit6.Text:=IntToStr(lotto2[6]); end; |
Re: 6 aus 49 will nicht so richtig
okay...
aber unser lehrer möchte nicht, dass wir arrays verwenden u wir sollen mit memos arbeiten :( |
Re: 6 aus 49 will nicht so richtig
Löschen eines Memos funktioniert mit z.B. Memo1.Clear.
Ausgaben in Memos funktionieren mir z.B. Memo1.Lines.Add('Hallo Welt') Hoffe, das hilft Dir weiter Gruß Wolfgang |
Re: 6 aus 49 will nicht so richtig
ja mit diesen Grundfunktionen komm ich auch klar :P
wir hatten jetzt noch was mit memo1.delete oder so, und dass muss i iwie reinbauen... |
Re: 6 aus 49 will nicht so richtig
Zunächst einmal sollte man Randomize nur einmalig im Programm aufrufen (z.B. im OnCreate). Und ob die gezogene Zahl bereits im Memo vorhanden ist, bekommst Du mit Memo.Lines.IndexOf heraus (dazu muss die Zahl aber erst in einen String gewandelt werden). Bei weiteren Fragen einfach fragen.
|
Re: 6 aus 49 will nicht so richtig
wie genau baue ich das Memo.Lines.IndexOf ein? und wo?
|
Re: 6 aus 49 will nicht so richtig
Aus dem Kopf:
Delphi-Quellcode:
Memo.Lines.Clear;
for i := 1 to 6 do begin repeat Zahl := Random(49) + 1; until Memo.Lines.IndexOf(IntToStr(Zahl)) < 0; Memo.Lines.Add(IntToStr(Zahl)); end; |
Re: 6 aus 49 will nicht so richtig
und das vergleicht jetzt, ob in dem memo, wo die zahlen zufällig sind, ob da nun eine doppelt vorkommt
oder wie? (Wenn ja, das Problem hatte ich doch schon gelöst :() |
Re: 6 aus 49 will nicht so richtig
@Opa Deddy
Bei meinem Vorgehen ist eine bereits gezogene Zahl im Lotto-Array mit 0 überschrieben. Also brauchen keine weiteren Überprüfungen auf Doppelgänger erfolgen. Es muß am am Ende nur da Lotto-Array auf Nullen überprüft werden. Zusätzlich entfällt die lästige Sortiererei. ;-) Gruß Wolfgang |
Re: 6 aus 49 will nicht so richtig
Mein Code sollte doch nur die Ziehung simulieren, da hab ich wohl etwas falsch verstanden. Sortiert wird da übrigens nix ;)
[edit] Und die Inhalte zweier Memos kann man ja auch mit IndexOf vergleichen. Ist zwar nicht die schnellste Möglichkeit, sollte aber verständlich sein. [/edit] |
Re: 6 aus 49 will nicht so richtig
:-D
|
Re: 6 aus 49 will nicht so richtig
könntet ihr jetzt meine frage von seite 1 beantworten? :? :wiejetzt:
|
Re: 6 aus 49 will nicht so richtig
Noch einmal: Du kannst mit IndexOf bestimmen, ob der Eintrag bereits vorhanden ist und somit doppelte Eingaben vermeiden.
Delphi-Quellcode:
procedure TBla.Tippabgeben;
var Zahl: string; begin //ohne Eingabeprüfung auf Zahl, das kannst Du selbst übernehmen Zahl := EditEingabe.Text; //Memo.Lines nach Zahl durchsuchen if MemoTipp.Lines.IndexOf(Zahl) >= 0 then begin //schon drin ShowMessage('Zahl wurde bereits getippt'); EditEingabe.Clear; end //noch nicht drin -> eintragen else MemoTipp.Lines.Add(Zahl); end; |
Re: 6 aus 49 will nicht so richtig
:coder2:
könntet ihr euch bei euren Antworten bitte mal auf meinen Quelltext beziehen? Ich will das nicht alles umschreiben....Danke :| |
Re: 6 aus 49 will nicht so richtig
Sry, aber es geht hier um das Verständnis und nicht um C&P-Lösungen. Es kann ja nicht zuviel verlangt sein, fast fertigen Code geringfügig anzupassen.
|
Re: 6 aus 49 will nicht so richtig
ich bin jetzt nicht das Infogenie, hab seit 2 Jahren nicht programmiert und versuche hier nur mal Hilfe zu bekommen
ich verstehe es halt nicht wenn man mir iwas theoretisch erklärt... |
Re: 6 aus 49 will nicht so richtig
Ich hab Dir da oben ausführlich kommentierten Quelltext hingeschrieben, von daher verstehe ich den Einwand von wegen "theoretisch" nicht.
|
Re: 6 aus 49 will nicht so richtig
nix für ungut...
Zitat:
Die Jungs, die dir Vorschläge gemacht haben, haben ihre Zeit investiert um dir zu helfen und du bist nicht bereit deinerseits Zeit für das ausprobieren der Vorschläge einzuplanen ? ...ohne Worte :roll: |
Re: 6 aus 49 will nicht so richtig
ja aber wenn ich was von memos schreibe und in den antworten was von edits steht?!
ich weiß dass die hier ihre zeit investieren und ich habe nur nett gefragt, ob es möglich wäre, mir da mal im Quelltext zu helfen und nicht irgendwelche Einschübe, wo ich nichts mit anzufangen weiß.... :cry: |
Re: 6 aus 49 will nicht so richtig
Wie bekommst Du denn die getippten Zahlen ins Memo? Das konnte ich aus Deinem Quelltext auch nicht entnehmen, daher würde ich das über ein Edit namens EditEingabe machen.
|
Re: 6 aus 49 will nicht so richtig
na ich gebe die zahlen einfach in das memo ein wenn ich das programm starte...
sollen wir so machen, die anderen Memos habe ich so eingestellt, dass man da manuell nix eingeben kann... mehr ist das ja nicht... |
Re: 6 aus 49 will nicht so richtig
Wenn Ihr das so machen sollt, erhöht das aber den Aufwand enorm. Dann müsstest die Tastendrücke abfangen, schauen, ob es sich um Return handelt und die gerade eingegebene Zeile mit allen Vorgängerzeilen vergleichen. Extrem blöd, sowas.
|
Re: 6 aus 49 will nicht so richtig
naja dann könnte ich doch beim start des programmes ne message zeigen, dass man keine zahlen doppelt eingeben soll, oder??
(wenn ja, hast n tipp wie, hab es schon probiert, bin aber wie gesagt völlig raus :( ) |
Re: 6 aus 49 will nicht so richtig
Na, einfach im OnCreate des Forms mit ShowMessage oder so ausgeben.
|
Re: 6 aus 49 will nicht so richtig
Hat euer Lehrer auch verboten Unterfunktionen zu benützen?
Ich frage das, weil der Sourcecode im Betrag #1 ein einziger "Schluntz" in einer Riesenprozedur ist. Zerlege dein Problem doch in kleine Teilaufgaben. |
Re: 6 aus 49 will nicht so richtig
Hatte ich schon gescchrieben.
Alles, was sich in Editfeldern ausgeben läßt, kann mann natürlich mit Memo.Lines.Add natürlich auch in Memos ausgeben. Die paar Zeilen umzuschreiben, kann doch wohl nicht zu schwer sein. Ich glaube auch, daß du Post #2 noch gar nicht gelesen hast. Indem angegebenen Link ist schon alles durchgekaut worden. Stell gezieltere Fragen, sage, was bisher geht und was nicht, wo was hakt. Mit den biherigen Hilfen müßtest Du klarkommen. Ne fertige Endlösung könnte ich Dir zwar auch geben, aber das hilft Dir garnix. Code schreiben ist wie Mathe. Ohne Übung geht garnix. Gruß Wolfgang |
Re: 6 aus 49 will nicht so richtig
erstmal zu dem oncreate....
wo ist das zu finden? und Unterfunktionen, ja wie meinst das? und an wolfgang:ja ich habs verstanden dass du unfreundlich bist...istja nun gut... :roll: |
Re: 6 aus 49 will nicht so richtig
Wenn Du in der Entwurfsansicht einen Doppelklick auf Dein Formular machst, landest Du direkt im Quellcode des OnCreate-Ereignisses. Und ich finde Wolfgang überhaupt nicht unfreundlich, es geht uns allen wie gesagt darum, Dich zur Lösung zu führen, aber nicht mit Code, den Du einfach kopieren könntest, sondern Du sollst selbst darauf kommen.
|
Re: 6 aus 49 will nicht so richtig
Wenn Du irgendwo auf das Formular doppelklickst, öffnet sich 'ne vorbereitete Prozedur
OnCreate. Gruß Wolfgang [wieder 'mal zu langsam :( ] |
Re: 6 aus 49 will nicht so richtig
ja das ist jetzt offen, wenn ich aber noch nie diese Prozedur behandelt habe, werde ich auch nicht selbst drauf kommen, ich sitz jetzt im 2ten Infojahr....
|
Re: 6 aus 49 will nicht so richtig
Dann wirf doch einmal einen Blick dazu in die Delphi-Hilfe, die ist unter Delphi 6 ja noch brauchbar.
|
Re: 6 aus 49 will nicht so richtig
hab aber delphi 7, so wie es oben steht und alles englisch...
|
Re: 6 aus 49 will nicht so richtig
Ganz ohne Englisch wird es beim Programmieren ohnehin nicht gehen, aber erstmal egal. Seit wann macht Ihr denn Delphi? Ich kann mir nämlich nicht vorstellen, dass Euch in 2 Jahren niemand gesagt hat, dass Windows (und somit auch Delphi) ereignisorientiert ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz