Zwei Vektoren vergleichen aber mit unterschiedlichen Datentypen.
-
Das ist wieder das gleiche Chaos wie bei deinen anderen Aufgaben.
Auch hier wieder:class lotto { ... std::vector<lotto> ... };
Wenn du vernünftig programmieren willst musst du deine Programme in Teilbereich mit definierten Aufgaben unterteilen.
- Mach dir Gedanken, ob deine Datenstrukturen das Anforderungsprofil gut abbilden. Gute Datentypen wären hier vermutlich
Spieler
mit 1..NLottoscheinen
und eineLottoziehung
. Einfach sinnlos alles in eine Klasse zu kübeln ist Käse. - Trenne Datenhaltung von Benutzereingaben. Benutzereingaben im Konstruktor einer Klasse? Brrrrr...
Hinweise:
- Funktionen können auch Werte zurückgeben
srand()
sollte nur ein einziges Mal aufgerufen werdenrand() % M
kann auch Duplikate erzeugenusing namespace ...
hat in Headerdateien nichts verloren- Variablen müssen vor ihrer Benutzung initialisiert werden
- Mach dir Gedanken, ob deine Datenstrukturen das Anforderungsprofil gut abbilden. Gute Datentypen wären hier vermutlich
-
@DocShoe ja ich will vernünftig programmieren und ich hab doch alles unterteilt und dazu Kommentare geschrieben, was meinst du genau mit Unterteilung, vielleicht verstehen wir uns hier falsch magst du es mir genauer erklären?
-
Hab ich doch geschrieben. Du packst einfach alles ohne Sinn und Verstand in eine einzige Klasse, das ist keine Aufgabenverteilung. Ich habe doch schon geschrieben, dass mehrere Klassen mit genau definierten Aufgaben sinnvoll sind.
-
@DocShoe hmm verstehe ich werde das nächste darauf achten danke für den Hinweis
-
@adii950 sagte in Zwei Vektoren vergleichen aber mit unterschiedlichen Datentypen.:
ich hab doch alles unterteilt und dazu Kommentare geschrieben
Aber, deine Kommentare passen schon nicht zum gezeigten Code. Und nichtmal dein Code passt zu deinem Code...
//Array erstellt um die eingaben des Users zu speichern //int array_input[]; vector<lotto> vector_input;
Wo kannst du in einem Vector von lotto User Eingaben hinzufügen? ich dachte ein Lotto nimmt schon die Anzahl an Spielern entgegen... irgendwas ist hier ziemlich schief.
void set_tippzettel(lotto h);//Spieler hinzufügen
auch hier, der Name sagt, dass sei ein Setter für ein Tippzettel. Aber entgegen genommen wird ein Lotto. Und im Kommentar sagst du, dass ein Spieler hinzugefügt wird.
(Btw. deutsch und englisch mischen, ist hässlich).Ich glaube, du musst nochmal 2 Schritte zurück gehen.
Versuch 1. deine "Lösung" in natürlicher Sprache zu formulieren. Dann kannst du das ganze formalisieren, von mir aus in Pseudocode, oder, wenn du magst als UML Diagramm, what ever. Und dann als 3. Umsetzung in Code.
Ich habe das Gefühl, dass dir noch ein Blick für Abstraktion fehlt.
Wenn das ganze irgendwie eine Übungsaufgabe aus der Schule / Uni ist: Gucke, was genau sind die Anforderung aus der Aufgabe und wie löst deine Lösung genau diese Anforderung.
-
Bei meiner Antwort wußte ich nicht, daß
lotto
eine Klasse für die gesamte Lottoziehung (anstatt für eine Lottozahl) ist.Du mußt den Grundgedanken der objektorientierten Programmierung verstehen, d.h. hierarchisch die Klassen aufbauen.
Ändere zuersteinmal den Code zu:
vector<int> vector_input;
(so kannst du auch direkt die Zahlen vergleichen.)
Aber generell paßt schon nicht die Benutzung der
lotto
-Klasse:lotto Spieler_1(Anzahl_der_spieler, n, m);
Zum einen ist der Name
Spieler_1
logisch falsch, dennlotto
repräsentiert die Lottoziehung, nicht einen einzelnen Spieler und dann übergibst du auch noch 3 uninitialisierte Variablen.So wie @DocShoe schon geschrieben hat, erstelle verschiedene Klassen für die unterschiedlichen Daten.
-
@Schlangenmensch hmm verstehe, was du meinst, ich denke auch das mir die Abstraktion fehlt. Ich werde ab sofort genauer achten, wie ich meinen Code kommentiere...
Vielen Dank für den Tipp
-
@Th69 hmm ich werde versuchen mein Programm zu teilen, damit es leichter ist zu verstehen Danke dir für deinen Hinweis
-
@DocShoe sagte in [Zwei Vektoren vergleichen aber mit
srand()
sollte nur ein einziges Mal aufgerufen werdenrand() % M
kann auch Duplikate erzeugen
@adii950 Die Ziehung selbst ist zwar gerade nicht das dringendste Problem, ich empfehle dir dennoch mal std::shuffle (und auch das Beispiel dort) anzuschauen. Damit lässt sich sehr einfach (und vor allem korrekt) eine Ziehung simulieren, die von Prinzip her einer realen Lottoziehung sehr nahe kommt.
Z.B. Kugeln mischen mit
std::shuffle(kugeln.begin(), kugeln.end(), g)
und Zahl ziehen mitkugeln.back()
undkugeln.pop_back()
.Nur so als Anregung.
-
@adii950 sagte in Zwei Vektoren vergleichen aber mit unterschiedlichen Datentypen.:
@DocShoe hmm verstehe ich werde das nächste darauf achten danke für den Hinweis
Sorry, aber Ich bin nicht überzeugt dass du das Problem verstanden hast.
Ich lese mal deinen Code vor. "Lotto besteht aus der Anzahl der Spieler, der ziehenden Zahl, der Anzahl der möglichen Zahlen, einer Menge von Zufallszahlen und einer Menge von weiteren Lotto Instanzen"
Würdest du so deinem Kind Lotto erklären?
Warum nicht so? "Das Lotto Spiel besteht aus einer Ziehung und einer Menge von Tips. Jede Ziehung wird an einem gewissen Tag durchgeführt und besteht aus 6 gezogenen Zahlen, welche auf Kugel stehen. Jeder Spieler kann ein oder mehrere Tips abgegeben. Ein Tipp besteht aus 6 Zahlen, dem Datum der Ziehung und dem Namen des Spielers..."
Diese Beschreibung ist wesentlich verständlicher und vor allen Dingen ergibt sich daraus die Grundlagen für deine Klassen.