![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 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