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..N Lottoscheinen und eine Lottoziehung. 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 werden
    • rand() % M kann auch Duplikate erzeugen
    • using namespace ... hat in Headerdateien nichts verloren
    • Variablen müssen vor ihrer Benutzung initialisiert werden


  • @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, denn lotto 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 werden
    • rand() % 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 mit kugeln.back() und kugeln.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.


Anmelden zum Antworten