Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 6 aus 49 will nicht so richtig (https://www.delphipraxis.net/140545-6-aus-49-will-nicht-so-richtig.html)

funkuchn 20. Sep 2009 14:51


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:
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.
[edit=Matze][delphi]-Tag geschlossen. MfG, Matze[/edit]

Wolfgang Mix 20. Sep 2009 15:08

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:

Zufallszahl ziehen ohne wiederholung


Das dürfte Dir erstmal weiterhelfen

Gruß

Wolfgang

Klaus01 20. Sep 2009 15:11

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

funkuchn 20. Sep 2009 15:14

Re: 6 aus 49 will nicht so richtig
 
hey und danke

und wie stelle ich ersteres ein?

Klaus01 20. Sep 2009 15:25

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:
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;
Grüße
Klaus

Wolfgang Mix 20. Sep 2009 15:26

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

funkuchn 20. Sep 2009 15:29

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:

Wolfgang Mix 20. Sep 2009 15:58

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;

funkuchn 20. Sep 2009 16:06

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 :(

Wolfgang Mix 20. Sep 2009 16:13

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.
Seite 1 von 6  1 23     Letzte »    

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