Hilfe bei CONWAYS GAME OF LIFE |
08.01.2015, 13:59 | Auf diesen Beitrag antworten » | ||||||||||
kleinerstrolch | Hilfe bei CONWAYS GAME OF LIFE Meine Frage: aufgabe http://fs1.directupload.net/images/150108/3qo86d3j.png das ist die Aufgabe http://pastebin.com/mBXCJNWE http://pastebin.com/vKFEgqQg das sind die 2 anhänge mit denen gearbeitet werden soll Meine Ideen: #include<fstream> #include<iostream> #include<unistd.h> #include"twodboolarray.hh" // Basisklassen class Regel { public: typedef TwoDBoolArray Daten; virtual void anwenden(Daten& daten) = 0; }; class BoundaryCondition { public: typedef TwoDBoolArray Daten; virtual bool boundary(Daten& daten, int i, int j) = 0; }; class TorusCondition : public BoundaryCondition { // Implementieren Sie hier eine Randbedingung, welche das // Gebiet als doppelt periodisch annimmt. }; class AliveCondition : public BoundaryCondition { // Implementieren Sie hier eine Randbedingung welche annimmt, // dass rund um das Rechengebiet lebende Zellen sitzen. }; class DeadCondition : public BoundaryCondition { // Implementieren Sie hier eine Randbedingung welche annimmt, // dass rund um das Rechengebiet tote Zellen sitzen. }; class GameOfLifeRules : public Regel { public: typedef TwoDBoolArray Daten; GameOfLifeRules(BoundaryCondition& _bc) : bc(_bc) {} // Implementieren Sie hier die Regeln des Game of Life private: BoundaryCondition& bc; }; // Ein zellulärer Automat, der Regeln und Datenstrukturen von auÃ?en bekommt class Automat { public: typedef TwoDBoolArray Daten; Automat(Daten& daten, Regel& regel) : _daten(daten), _regel(regel) {} // mache n Schritte void step(int n=1) { for (int i=0; i<n; ++i) { // Linux-spezifische Art und Weise den Inhalt der Konsole zu löschen // und den Cursor nach oben links zu setzen. std::cout << "\x1B[2J\x1B[H" << "Step " << i << std::endl << _daten; // Das Wiedergeben der Lösung soll immer 10 Sekunden (=1e7 Mikrosekunden) // dauern. Sie können diesen Wert auch ändern. usleep(1.e7/n); _regel.anwenden(_daten); } } private: Daten& _daten; Regel& _regel; }; int main(int argc, char** argv) { if (argc != 2) { std::cout << "Usage: ./<progname> <txt-file>" << std::endl; return 1; } // Initialisiere die Datenstruktur TwoDBoolArray a; std::ifstream file; file.open(argv[1]); if (file.good()) file >> a; else { std::cout << "Cannot read file" << std::endl; return 1; } // Wähle Randbedingung TorusCondition bc; // Wähle ein Regelsystem GameOfLifeRules rules(bc); // Initialisiere den zellulären Automaten Automat automat(a,rules); // Experimentieren Sie hier mit Ihrem Automaten. return 0; } |
||||||||||
|
|||||||||||
08.01.2015, 19:38 | Auf diesen Beitrag antworten » | ||||||||||
kleinerstrolch | keiner? wäre wirklich extrem wichtig |
||||||||||
08.01.2015, 19:57 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | Es macht eben keine guten Eindruck, wenn du schreibst, dass du es bis heute brauchst und dann auch noch an anderer Stelle fragst, Herr Heisenberg. Aber ich spiele mal mit: versuchen wir, das Programm zu kompilieren:
offensichtlich muss die abstrakte Methode virtual bool boundary(Daten& daten, int i, int j) = 0; implementiert werden. Ich verstehe aber nicht, was hier getan werden soll. Wenn ich erkennen soll, ob Felder benachbart sind, brauche ich auch 2 Felder und nicht zur eines edit: sind ja zwei, das Feld wird ja in einem eindimensionalen Array gespeichert. sollte dann in etwa so gehen:
|
||||||||||
08.01.2015, 20:20 | Auf diesen Beitrag antworten » | ||||||||||
kleinerstrolch | nice immerhin ein teilabschnitt das mit doppelpost ist eben weil es unendlich wichtig ist |
||||||||||
Anzeige | |||||||||||
|
|||||||||||
08.01.2015, 20:27 | Auf diesen Beitrag antworten » | ||||||||||
Karlito | Meine bescheidene Meinung: kurz vor dem Abgabetermin mit soetwas zu kommen und dann noch eine fertige Lösung zu verlangen finde ich unterirdisch. Jeder Student ist dafür verantwortlich, dass er sein Zeug geregelt bekommt (eigenständig). Andere Leute für seine Leistungen zu bezahlen kann ich nicht unterstützen. An meiner Fakultät gibt es ab und zu 50€ Deals für Abgaben. Ich lehne diese strikt ab. Und wenn es so wichtig ist, hättest du es einfach mal nicht so schleifen lassen sollen... Und sollte es andere gewichtige Gründe geben, warum Du nicht in der Lage warst abzugeben, dann ist der Maßstab, ob sie gültig sind, die Beurteilung dieser von deinem Dozenten. |
||||||||||
08.01.2015, 20:38 | Auf diesen Beitrag antworten » | ||||||||||
kleinerstrolch | würde die aufgabe mich nicht überfordern und wäre diese woche nicht einiges richtig mieß gelaufen würde ich nicht fragen - danke für die moralpredigt aber es ist nunmal eben so gekommen wie es jetzt ist edit: jetz hat er nurnoch ein problem mit dem "abs" not declared in this scope ebenso wie main.cpp:115:19: error: cannot declare variable 'rules' to be of abstract type 'GameOfLifeRules' GameOfLifeRules rules(bc); |
||||||||||
08.01.2015, 20:56 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | Ich werde dir auch nicht alles vorbeten. Habe nochmal nachgedacht, mein Ansatz macht so wenig Sinn im Hinblick auf das Gesamtproblem. Ich würde so vorgehen: virtual bool boundary(Daten& daten, int i, int j) gibt an, ob in einem Feld Leben ist. Wenn die Karte verlassen wird, muss entsprechend abgesichert werden, was passiert (Torus, Leben, ..) i und j sind die x,-y Position des Feldes.
die anderer Regeln überlasse ich dir. PS: abs ist eine Funktion in cmath - hat sich mit meiner Korrektur aber sowieso erledigt. |
||||||||||
08.01.2015, 21:28 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | Mein Automat läuft mitlerweile, viel war es nicht mehr. Aber wenn du ihn haben willst, musst du schon mitarbeiten, ein Anfang wären die beiden fehlenden Grenzregeln. |
||||||||||
08.01.2015, 22:45 | Auf diesen Beitrag antworten » | ||||||||||
kleinerstrolch | schaffe das heut nichtmehr, zu wenig schlaf und ständig komm ich beim einlesen durcheinander trotzdem danke für deine mühe und dein hilfsangebot |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
Die Neuesten » |