|
Puppen-spieler
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 14:21 |
|
|
Anmeldungsdatum: 07.09.2009
Beiträge: 19
|
Hallo Leute. Ich soll ein Lottoprogramm programmieren und hänge total fest. Hier erstmal mein Quelltext, aber vorher: ich führe das Ganze in 3 Memos aus, im ersten gebe ich meine Lottozahlen ein und das 2te gibt die gezogenen aus und das dritte die übereinstimmungen, mein problem ist jetzt, dass ich es nicht schaffe, doppelte zahlen im Lottoprogramm nicht auszulöschen.Außerdem gebe ich die Anzahl der Übereinstimmungen in einem Label aus.Und auch die Fehlerabfederung lässt zu wünschen übrig. Ich hoffe auf eure hilfe: Meine Basis (Delphi7):
begin randomize; FOR i:=1 TO 6 DO begin z:=random(49)+1; memo2.lines.add(IntToStr(z)); end;
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; end; label1.caption:=IntToStr(anz);
So und hier kommt mein Fehler:
x:=0 while x<>memo2.lines.count DO IF memo1.lines=memo2.lines[x] then begin memo2.lines.delete(x); end else x:=x+1; end;
so, und dann kommt immer Inkompatible Typen String und Integer...
|
 |
|
| |
|
windoof
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 19:56 |
|
|
Anmeldungsdatum: 12.08.2007
Beiträge: 2.714
|
aalso auf den ersten blick würde ich mal sagen, dass hier auf jeden fall ein fehler liegt:
Zitat: IF memo1.lines=memo2.lines[x] then memo1.lines ist ein array, während memo2.lines[x] genau eine zeile des memo 2 ausgibt (die zeile an der stelle x --> string)
EDIT:
Zitat: x:=0 while x<>memo2.lines.count DO IF memo1.lines=memo2.lines[x] then begin memo2.lines.delete(x); end else x:=x+1; end; was soll das eigentlich bewirken?^^
[Zuletzt bearbeitet: 17.09.2009 19:58]
________________________________________ BÄMM HEADSHOT !! VOLL INS KNIE!!  Mein Rechner Meine HP
|
 |
|
| |
|
Puppen-spieler
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 20:34 |
|
|
Anmeldungsdatum: 07.09.2009
Beiträge: 19
|
naja wart mal, bin iwie weiter gekommen, so das letzte mal aus gedanken löschen ^^ der Zweck ist, dass aus den generierten zahlen mit einer while-do schleife die doppelten zahlen eleminiert und ersetzt werden sollen
also den letzten Algorithmus einfach weg denken und dafür brauche ich nen neuen der halt die doppelten generierten zahlen aus memo2 löscht....?
|
 |
|
| |
|
windoof
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 20:53 |
|
|
Anmeldungsdatum: 12.08.2007
Beiträge: 2.714
|
ich würds einfacher machen: nimm dir ne listbox oder ähnliches und lass da bei form.create die zaheln von 1 bis 49 reinschreiben mit
listbox1.clear; for i:=1 to 49 do listbox1.items.add(i);
dann generierst du die zufallszahlen wiefolgt in dein Memo:
for i:=0 to 5 do begin x:=random(listbox1.items.count); memo2.lines.add(listbox1.items[x]); listbox1.items.delete(x); end;
damit nimmst du einen wert an einer zufälligen stelle zwischen 1 und 49, schreibst ihn in deine auswahl und löscht ihn anschließend aus der liste der verfügbaren zahlen 
MfG windoof
________________________________________ BÄMM HEADSHOT !! VOLL INS KNIE!!  Mein Rechner Meine HP
|
 |
|
| |
|
Puppen-spieler
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:06 |
|
|
Anmeldungsdatum: 07.09.2009
Beiträge: 19
|
ähm das problem ist, dass wir das was da steht als vorlage nutzen sollen und den rest eben mit ner while-do schleife so machen sollen, dass die zahlen halt net doppelt sind .... das ist einfach nur ne schulaufgabe, der fragt mir löcher in bauch wenn ich mit sowas komme^^ hatten wir halt noch nie
|
 |
|
| |
|
windoof
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:07 |
|
|
Anmeldungsdatum: 12.08.2007
Beiträge: 2.714
|
achso... naja gut^^ welche klasse bist du? ich programmier schon n paar jahre mit delphi, sry 
ähhm ich setz mich ma kurz hin und schau, was ich draus machen kann 
________________________________________ BÄMM HEADSHOT !! VOLL INS KNIE!!  Mein Rechner Meine HP
|
 |
|
| |
|
Puppen-spieler
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:10 |
|
|
Anmeldungsdatum: 07.09.2009
Beiträge: 19
|
naja jetzt in der 13ten, hatten auch Lehrerwechsel und der kommt jetzt mit Algorithmen, von denen ich noch nie gehört hab, voll fürn Arsch sowas
|
 |
|
| |
|
windoof
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:26 |
|
|
Anmeldungsdatum: 12.08.2007
Beiträge: 2.714
|
also wenn du unbedingt doppelte zahlen rausgelöscht haben willst:
for i:=0 to memo2.Lines.Count-2 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;
wobei dieser algorithmus eben nur doppelte zaheln auslöscht und keine neuen einfügt, da man das ganze sonst rekursiv lösen müsste, weil beim auffüllen, ja wieder eine zahl doppelt sein könnte^^
MfG
________________________________________ BÄMM HEADSHOT !! VOLL INS KNIE!!  Mein Rechner Meine HP
|
 |
|
| |
|
Puppen-spieler
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:33 |
|
|
Anmeldungsdatum: 07.09.2009
Beiträge: 19
|
ahso, na ich probier das gleich mal aus und dann mal gucken was passiert^^ fällt dir vielleicht noch ne simple Fehlerabfederung ein? Halt dass man nur 6 zahlen ins erste Memo eingeben und keine Buchstaben eingeben kann?!
|
 |
|
| |
|
Puppen-spieler
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:39 |
|
|
Anmeldungsdatum: 07.09.2009
Beiträge: 19
|
also jetzt geht gar nix mehr o.o im Memo wird nichts mehr ausgegeben seit ich das jetzt noch dazu geschrieben habe
|
 |
|
| |
|
Puppen-spieler
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:41 |
|
|
Anmeldungsdatum: 07.09.2009
Beiträge: 19
|
upss zeile vergessen, momXD
|
 |
|
| |
|
windoof
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:49 |
|
|
Anmeldungsdatum: 12.08.2007
Beiträge: 2.714
|
so also hier dein quelltext zur überprüfung, ob einige tipps richtig waren, incl. abfrage, ob nur zahlen eingegeben wurden und ob diese zwischen 1 und 49 liegen
wenn du willst, erklär ich dir das auch noch
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; 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; end; label1.caption:=IntToStr(anz); end; except Showmessage('Fehler! Bitte geben Sie nur Zahlen ein!'); end;
________________________________________ BÄMM HEADSHOT !! VOLL INS KNIE!!  Mein Rechner Meine HP
|
 |
|
| |
|
Puppen-spieler
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:50 |
|
|
Anmeldungsdatum: 07.09.2009
Beiträge: 19
|
okay. vielen dank, soweit funzt das jetzt  fehlt mir halt nur noch die Fehlerabfederung... achso, und iwie soll ich noch ne Superzhl generieren, ich komm so schon nicht mit Lotto klar und weiß nicht wie das funzt o.o
|
 |
|
| |
|
windoof
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:51 |
|
|
Anmeldungsdatum: 12.08.2007
Beiträge: 2.714
|
die abfederung steht oben^^
und superzahl generiern ... ja auch kein problem, aber ich bin eigtl nciht hier, um dir deine hausaufgaben zu machen^^
________________________________________ BÄMM HEADSHOT !! VOLL INS KNIE!!  Mein Rechner Meine HP
|
 |
|
| |
|
Puppen-spieler
|
| Titel: 6 aus 49 Hilfe! |
17.09.2009 21:54 |
|
|
Anmeldungsdatum: 07.09.2009
Beiträge: 19
|
nee is mir ja schon klar...ich versuch das ja auch schon seit stunden....
jedenfalls nochmal zur Abfederung, funktioniert ja schöbn und gut, der macht aber trotzdem Zufallszahlen und Übereinstimmungwn...aber wenn es nur so geht reicht das auch...
|
 |
|
| |
|
|
|
|