Brauche Hilfe! (Lottoprogramm)
-
Grundsätzlich tipp beim lösen eine problems mit einem leichten beispiel anfangen. In diesem konkretten fall meine ich das du zum beispiel. von der zahlen reihe 1,2,3,4,5 alle 2 kombinationen auflisten kannst. Und dann würd ich dir empfehlen als eine allgemeiner funktion zu schreiben.
Die folgendes könnes sollte. Übergenen wird ein vector mit einer beliebegen anzahl von elementen (überprüfung auf doppelte!) und als 2 parameter anzahl der kombinations größe.
void ausgabe_kombinationen(vector<int> Zahlenfeld,int kombigroesse);P.S. wenn du es nicht schaffst einfach sagen, dann post ich dir den restlichen code, aber lieber mal selber probieren
mfg spjoe
-
Tut mir Leid hier kommt der Code.
Irgendwie finde ich das der Fehler überall sein könnte, deswegen poste ich den gesamten Code rein:
#include <iostream.h> int Stelle1, Stelle2, Stelle3, Stelle4, Stelle5, Stelle6; int max6, max5, max4, max3, max2; int main() { int i; int Anfangszahlen; cin >> Anfangszahlen; float * Zahlen = new float[Anfangszahlen]; Zahlen[0] = 12.4f; delete [] Zahlen; cout << "\n"; for (i=0; i<Anfangszahlen; i++) { cout << "Zahl Nr." << i+1 << ": "; cin >> Zahlen[i]; } cout << "\n"; Stelle1=0; Stelle2=1; Stelle3=2; Stelle4=3; Stelle5=4; Stelle6=5; max6=Anfangszahlen-1; max5=Anfangszahlen-2; max4=Anfangszahlen-3; max3=Anfangszahlen-4; max2=Anfangszahlen-5; { {while (Stelle6<=max6) { { cout << "\t" << " <" << Zahlen[Stelle1] << "> " << "\t" << " <" << Zahlen[Stelle2] << "> " << "\t" << " <" << Zahlen[Stelle3] << "> " << "\t" << " <" << Zahlen[Stelle4] << "> " << "\t" << " <" << Zahlen[Stelle5] << "> " << "\t" << " <" << Zahlen[Stelle6] << "> "; cout << "\n"; Stelle6=Stelle6+1; } } } } {Stelle5=Stelle5+1; Stelle6=Stelle5+1; {while (Stelle6<=max6) { { cout << "\t" << " <" << Zahlen[Stelle1] << "> " << "\t" << " <" << Zahlen[Stelle2] << "> " << "\t" << " <" << Zahlen[Stelle3] << "> " << "\t" << " <" << Zahlen[Stelle4] << "> " << "\t" << " <" << Zahlen[Stelle5] << "> " << "\t" << " <" << Zahlen[Stelle6] << "> "; cout << "\n"; Stelle6=Stelle6+1; if (Stelle6>max6) {Stelle5=Stelle5+1; Stelle6=Stelle5+1;} } } } } {Stelle4=Stelle4+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1; {while (Stelle6<=max6) { { cout << "\t" << " <" << Zahlen[Stelle1] << "> " << "\t" << " <" << Zahlen[Stelle2] << "> " << "\t" << " <" << Zahlen[Stelle3] << "> " << "\t" << " <" << Zahlen[Stelle4] << "> " << "\t" << " <" << Zahlen[Stelle5] << "> " << "\t" << " <" << Zahlen[Stelle6] << "> "; cout << "\n"; Stelle6=Stelle6+1; if (Stelle6>max6) {Stelle5=Stelle5+1; Stelle6=Stelle5+1;} if (Stelle5>max5) {Stelle4=Stelle4+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1;} } } } } {Stelle3=Stelle3+1; Stelle4=Stelle3+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1; {while (Stelle6<=max6) { { cout << "\t" << " <" << Zahlen[Stelle1] << "> " << "\t" << " <" << Zahlen[Stelle2] << "> " << "\t" << " <" << Zahlen[Stelle3] << "> " << "\t" << " <" << Zahlen[Stelle4] << "> " << "\t" << " <" << Zahlen[Stelle5] << "> " << "\t" << " <" << Zahlen[Stelle6] << "> "; cout << "\n"; Stelle6=Stelle6+1; if (Stelle6>max6) {Stelle5=Stelle5+1; Stelle6=Stelle5+1;} if (Stelle5>max5) {Stelle4=Stelle4+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1;} if (Stelle4>max4) {Stelle3=Stelle3+1; Stelle4=Stelle3+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1;} } } } } {Stelle2=Stelle2+1; Stelle3=Stelle2+1; Stelle4=Stelle3+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1; {while (Stelle6<=max6) { { cout << "\t" << " <" << Zahlen[Stelle1] << "> " << "\t" << " <" << Zahlen[Stelle2] << "> " << "\t" << " <" << Zahlen[Stelle3] << "> " << "\t" << " <" << Zahlen[Stelle4] << "> " << "\t" << " <" << Zahlen[Stelle5] << "> " << "\t" << " <" << Zahlen[Stelle6] << "> "; cout << "\n"; Stelle6=Stelle6+1; if (Stelle6>max6) {Stelle5=Stelle5+1; Stelle6=Stelle5+1;} if (Stelle5>max5) {Stelle4=Stelle4+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1;} if (Stelle4>max4) {Stelle3=Stelle3+1; Stelle4=Stelle3+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1; if (Stelle3>max3) {Stelle2=Stelle2+1; Stelle3=Stelle2+1; Stelle4=Stelle3+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1;} } } } } {Stelle1=Stelle1+1; Stelle2=Stelle1+1; Stelle3=Stelle2+1; Stelle4=Stelle3+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1; {while (Stelle6<=max6) { { cout << "\t" << " <" << Zahlen[Stelle1] << "> " << "\t" << " <" << Zahlen[Stelle2] << "> " << "\t" << " <" << Zahlen[Stelle3] << "> " << "\t" << " <" << Zahlen[Stelle4] << "> " << "\t" << " <" << Zahlen[Stelle5] << "> " << "\t" << " <" << Zahlen[Stelle6] << "> "; cout << "\n"; Stelle6=Stelle6+1; if (Stelle6>max6) {Stelle5=Stelle5+1; Stelle6=Stelle5+1;} if (Stelle5>max5) {Stelle4=Stelle4+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1;} if (Stelle4>max4) {Stelle3=Stelle3+1; Stelle4=Stelle3+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1; if (Stelle3>max3) {Stelle2=Stelle2+1; Stelle3=Stelle2+1; Stelle4=Stelle3+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1; if (Stelle2>max2) {Stelle1=Stelle1+1; Stelle2=Stelle1+1; Stelle3=Stelle2+1; Stelle4=Stelle3+1; Stelle5=Stelle4+1; Stelle6=Stelle5+1;} } } } } } } } }
-
schau dir mal was über verschachtelte schleifen an, das wirst du hier sicher gebrauchen!!
mfg spjoe
-
*hust*
Ich habe es mir jetzt nicht genauer angeschaut, aber an welcher Stelle gibst Du denn den Speicher frei

Was ich damit meine ist, dass Du delete viel zu früh aufrufst. Du gibst den reservierten Speicherbereich wieder frei.
Ich habe es nicht weiter getestet, aber so etwas kann sehr unschönes Programmverhalten auslösen.
Ansonsten gewöhne Dir ein paar mehr Funktionen an, oder besser, wenn Du schon C++ benutzt Objktorientierte Programmierung.
Grüße
Richie
-
Wie schon erwähnt bin ich ein Anfänger
Das erklärt auch meinen sehr schlechten Programmierstil.Ok ich werde mir eure Tipps mal genauer anschaun und versuchen diese in mein Programm umzusetzen.
Wo meinst du ist es am besten den Speicherbereich wieder freizugeben.
Danke
-
Also wenn ich mich jetzt nicht ganz fies vertan habe, kommst Du beim Deinem Beispiel auf runde 479 Mio. Moeglichkeiten - Du solltest Du Dir den grundsaetlichen Ansatz Deines Projectes noch mal ueberlegen
-
Nein das kann nicht sein. Nach meinen Berechnungen müssten das bei 12 verschiedenen Zahlen unter 1000 verschiedene Kombinationen geben.
-
ohne berücksichtigung der reihnfolge(lotto) ist die formel für die anzahl der möglichkeiten: n über k, sprich 12 über 6 = 924
mfg spjoe
-
Hi!
Ein delete solltest Du dann aufrufen, wenn Du das Objekt nicht mehr benötigst.
D.h.: Hier am Besten am Ende des Programms als letzte Anweisung in main.Grüße
Richie
-
spjoe schrieb:
ohne berücksichtigung der reihnfolge(lotto) ist die formel für die anzahl der möglichkeiten: n über k, sprich 12 über 6 = 924
mfg spjoe
Genau das ist richtig.
Richie_Gecco schrieb:
Hi!
Ein delete solltest Du dann aufrufen, wenn Du das Objekt nicht mehr benötigst.
D.h.: Hier am Besten am Ende des Programms als letzte Anweisung in main.Grüße
RichieOk habe es geändert. Leider besteht das Problem immer noch.
-
Hi!
Kannst Du bitte nochmal genau beschreiben, was Dein Problem ist?
Ich habe das gerade mal mit Watcom durchkompiliert. Nach der delete Änderung sieht die Ausgabe recht gut aus.
Das Einzige, was anzumerken wäre, dass bei mir die Windows-Konsole die ersten Ausgaben wegschneidet. Aber das ist normal.Kannst Du bitte mal ganz genau erklären, was Du mit löscht die ersten Kombinationen meinst?
Grüße
Richie
-
Richie_Gecco schrieb:
Das Einzige, was anzumerken wäre, dass bei mir die Windows-Konsole die ersten Ausgaben wegschneidet. Aber das ist normal.
Genau das war/ist mein Problem- Aber wenns normal ist, muss ich wohl damit leben. Oder gibt es einen Ausweg, dass ich alle Kombinationen trotzdem irgendwie aufgelistet bekomme.
-
Hi!
Du kannst die größe der Konsole ändern (unter XP getestet). Und zwar links klick auf das Symbol in der oberen linken Ecke. Dort Eigenschaften -> Layout und unter Fensterpuffergrüße kannst Du die Anzahl von Zeilen eingeben.
Ansonsten Ausgabe in eine Datei umlenken.
D.h. In der Konsole:
Programmname > Ausgabe.txtDann kannst Du das bequem weiterverwerten.
Grüße
Richie
-
Vielen Dank Richie_Gecco. Es hat bestens geklappt. Habe die Größe verändert und schon funktioniert alles wie erwünscht.
Danke auch an alle anderen, die mir geholfen haben.
mfg
-
Gern geschehen!
Und bleib am Ball!