"Bingo" in C++ - Benötige Hilfe/Ansatz
-
Eledhon schrieb:
Das weiß ich auch und habe ich auch schon gemacht
Zeig doch mal!
Nur weiter weiß ich nicht. Habe auch schon über Google und ähnliches gesucht, aber leider nichts, was mir auf Anhieb hilft.
"Programmieren" bedeutet ja auch nicht "Code aus dem Internet zusammen kopieren". Falls du deine bisherigen Hausaufgaben auf diese Art und Weise gelöst hast, ist klar, dass du irgendwann in Schwierigkeiten kommen musstest.
-
Der Compiler hilft dir doch (mit Fehlern!) - du mußt jetzt noch die passenden Klassenfunktionen deklarieren (und definieren).
Intern mußt du beim Spieler dir eine Liste der Karten merken (std::vector<Bingokarte> würde ich dafür empfehlen).
Du mußt dann dir irgendwie markieren, ob eine Zahl gezogen worden ist (entweder alle Zahlen selbst in einer eigenen Liste merken und dann die Spielkarten daraufhin für die Reihen und Spalten überprüfen oder aber direkt in der Belegung beim Ziehen die Zahl mit z.B. 0 oder -1 o.ä. überschreiben und dann dementsprechend die Reihen und Spalten abprüfen.
-
Nur weiter weiß ich nicht. Habe auch schon über Google und ähnliches gesucht, aber leider nichts, was mir auf Anhieb hilft.
"Programmieren" bedeutet ja auch nicht "Code aus dem Internet zusammen kopieren". Falls du deine bisherigen Hausaufgaben auf diese Art und Weise gelöst hast, ist klar, dass du irgendwann in Schwierigkeiten kommen musstest.
Nein, mache die Aufgaben mit dem, was ich in der Vorlesung lerne und das, was im Script zu diesen steht. Nur manchmal brauch mal halt einen Ansatz, um auf die richtige Spur zu kommen. Dieses Problem habe ich gerade.
Den main-Teil dürfen wir nicht verändern, den lasse ich jetzt mal weg (oben nachlesen). Hier meine Klassen usw:
// Klassen class Bingokarte { private: public: Bingokarte(unsigned int _belegung); }; class Spieler { private: public: Spieler(unsigned int&); void neueKarte(Bingokarte*&); bool Bingo(unsigned int _zufallszahl); }; // Funktionen void neueKarte(Bingokarte*&) { } bool Bingo(unsigned int _zufallszahl) { }
-
Die main-Funktion oben ist nicht von dir, sondern von deinem Lehrer?
Tut mir leid für dich. Du hast kein C++ gelernt, sondern einen Java-Kurs belegt, dessen Lehrer mal 5 Minuten geguckt hat, wie er seine Java-Sachen in C++ ausdrücken kann. Das ist wie der Versuch, allein mit einem Vokabelbuch eine andere Sprache zu sprechen.
Tut mir leid, dass diese Antwort nicht wirklich auf deine Frage eingeht (später, wenn ich mehr Zeit habe, kann ich genauer gucken), aber das musste gesagt werden. In diesem Kurs wirst du nur Dinge lernen, die du dir später wieder mühsam abgewöhnen musst.
-
Ich studiere Physik mit Informatik bzw. "Einführung in die Programmierung" als Nebenfach im ersten Semester.
Wir haben jetzt wochenlang "c" gelernt (fangen jetzt so langsam an C++ Strings zu lernen).
Die Main ist vom Prof ja. Aber daran kann ich leider nichts ändern.
Irgendwie muss ich mir die Klassen zusammenbasteln... und btw, wie gesagt, die Scripts / PowerPoint Folien zu dem Kapitel "Klassen" sind mehr als ungenügend.
-
Der Konstruktor von
Bingokarte
ist falsch. Da wird einunsigned int[4][4]
übergeben.
Aus ästhetischen Gründen würde ich hier eintypedef
spendieren.Und die Referenz in
Spieler::neueKarte()
würde ich mir auch sparen.using array4x4 = unsigned int[4][4]; class Bingokarte { private: public: Bingokarte(const array4x4& arr); }; class Spieler { private: public: Spieler(unsigned int max); void neueKarte(Bingokarte* karte); bool Bingo(unsigned int zahl); };
Um möglichst schnell Abstand zu der schrottigen
main()
zu bekommen, schlage ich vor, dassBingokarte
einint[4][4]
(nicht unsigned!) als Member erhält und wir im Konstruktor dasarray4x4 arr
da hineinkopieren.Dann würde ich
Bingokarte
eine Funktionvoid Bingokarte::pruefe(int z)
oder so spendieren, die alle Vorkommnisse von z im internen Array mit -1 überschreibt - ganz wie Th69 es vorgeschlagen hat.Klingt das plausibel?
Kannst Du u.U. auch schon eine Funktion
bool Bingokarte::pruefe_reihen()
implementieren, die alle Reihen einer Bingokarte auf viermal -1 prüft?
-
Okay.
Also wenn ich die Vorgehensweise richtig verstehe, soll das Programm folgendes tun:
Internes Array anlegen, dort Positionen der gezogenen/durchgestrichenen Zahlen ablegen. Dann mit einer 'pruefe' Funktionen abfragen, ob die abgelegten Zahlen eine Reihe bzw. Spalte einer der beiden "Bingokarten-Arrays" bilden. Wenn ja, startet die Funktion Bingo (wie in der Aufgabenstellung beschrieben), wenn nein, dann ziehe die nächste Zahl, lege sie ab, prüfe usw.
Ist das so richtig?
-
Eledhon schrieb:
Internes Array anlegen, dort Positionen der gezogenen/durchgestrichenen Zahlen ablegen.
Nein, die Zahlen aus dem übergebenen Array ablegen. (Z.23 und 24 aus main()).
Eledhon schrieb:
Dann mit einer 'pruefe' Funktionen abfragen, ob die abgelegten Zahlen eine Reihe bzw. Spalte einer der beiden "Bingokarten-Arrays" bilden.
Nein. Eigentlich ist vielleicht auch der Name
streiche()
odermarkiere()
besser. Denn es sollen alle Vorkommnisse von z im internen Array mit -1 markiert werden (oder mit 0 oder sonstwas).Eledhon schrieb:
Wenn ja, startet die Funktion Bingo (wie in der Aufgabenstellung beschrieben), wenn nein, dann ziehe die nächste Zahl, lege sie ab, prüfe usw.
Nein.
Spieler::Bingo()
ist noch gar nicht im Fokus. Erstmal nur die Bingokarte - und die soll pruefen, ob irgendwo eine Reihe oder eine Spalte komplett markiert ist.class Bingokarte{ bool pruefe_reihen() const; bool pruefe_spalten() const; ... public: bool bingo() const { return pruefe_reihen() || pruefe_spalten(); } void markiere(int z); .... };
Eledhon schrieb:
Ist das so richtig?
Bisher haben wir uns ziemlich missverstanden...
Ist vielleicht auch schon alles viel zu detailiert - sieh es nur als Vorschlag.
PS: Kann sich jemand einen Reim auf Z. 34 im Hauptprogramm machen?
-
Furble Wurble schrieb:
PS: Kann sich jemand einen Reim auf Z. 34 im Hauptprogramm machen?
Der Programmierer hat mal davon gehört, dass die übliche Modulo-Methode einen Bias habe und hat sich dann selber eine Lösung dafür überlegt. Diese hat er dann auf seinem Windowssystem erfolgreich getestet und nicht weiter darüber nachgedacht, ob das auch wirklich richtig ist. Die Qualität dieses Programmierkurses habe ich ja bereits angesprochen. Es ist zwar theoretisch alles irgendwie richtig, aber praktisch vollkommen falsch.
-
Tut mir ja Leid
Das Problem bei der ganzen Veranstaltung ist, dass wir "Neulinge" alle ins kalte Wasser geschmissen werden. Habe ich auch eigentlich kein Problem mit, hätte ich nicht noch zwei andere, vom Stellenwert her, wichtigere Fächer
Wir haben letzte Woche im Info-Praktikum erstmals mit Klassen gearbeitet. Da waren wir alle froh, dass sie eine vernünftige Header-Datei erstellen konnten, wo eine ganz normale Class mit Konstruktor und Funktion drin war.
Jetzt, nur eine Vorlesung später (die gar nicht mehr über Klassen handelte) sollen wir sowas "mal ebend so" machen.
Nun ja, könnt ihr ja genauso wenig was für wie ichAber habe dich jetzt (hoffentlich) verstanden. Ich werde das morgen nach Uni nochmal in Angriff nehmen. Frage auch morgen andere Studenten, wie die das Umgesetzt haben bzw. angefangen haben. Kann das ja mal hier bei Bedarf reinstellen.
Jetzt schon mal danke an euch und nochmals sorry