Zum Inhalt springen

TheWho

Mitglieder
  • Gesamte Inhalte

    117
  • Benutzer seit

  • Letzter Besuch

  1. Meine Kokosnuss hat er auch nicht erraten
  2. TheWho

    Und nochmal ich :)

    Hi, das der Titel blöd war, ist mir leider erst aufgefalllen, als ich nicht mehr editieren konnte. Tut mir leid. Bin ziemlich erkältet und wohl etwas neben der Spur... :hells: Die ordentliche Einrückung habe ich versucht, nur leider klappt das mit den html Sachen hier scheinbar nicht 100% - immer, wo ich Leerzeichen statt Tabs benutzt habe, war der Code wesentlich mehr eingerückt... Ließ sich dann auch nicht mehr korrigieren! Das Problem ist, daß er eben in den case-Fall 3 reingeht, obwohl getDirection() = 1 liefert. Für mich sieht es so aus, als ob er von case 1 in case 2 reinläuft, wo die Anweisung setDirection() = 3 vorkommt, und dann munter weiter in case 3. Das dürfte doch aber mit den breaks nicht sein, oder? Ich würde gern auf den "this-> Unsinn" verzichten, wenn ich es besser wüßte :confused: Nur steh ich gerade am Anfang mit meinen C++ Kenntnissen, und dachte, so wäre es richtig. Die gezeigte Methode ist eine von vier, die jeweils die "direkten Nachbarn" aller Richtungen eines 2dim Arrays ansehen, machen aber im Prinzip das gleiche. Ich hoffe, es ist jetzt etwas klarer?
  3. Hallo! Nachdem ich jetzt das Problem mit dem 2dim Array gelöst habe, bekomme ich hier einen Fehler, finde aber die Quelle nicht. Vielleicht seh ich den Wald vor lauter Bäumen nicht mehr?! :cool: Das Programm läuft bis zum Schluß prima, dann jedoch geht er noch 3 Schritte weiter, obwohl er zur Main zurückkehren sollte (Abfrage auf Ende des Vektors). Ich wäre dankbar, wenn mir jemand sagen kann, wieso das Programm in den case 3 reinläuft, obwohl die lastdirection weiter auf 1 steht und ich die breaks nicht vergessen habe? LG, TheWho int matrix::goNorth(xArray *Coord) { if ( 1 == checkLimits() ) //Grenzen überschritten? return 1; if ( 0 == checkEnd( Coord ) ) //Polygon fertig return 0; cout << "last direction (goNorth2): " << this->getDirection() << endl; switch ( this->getDirection() ) { case 0: if ( this->m_iXAct <= 0 ) // für Ausgangspixel 0-0 { this->goEast(Coord); } else { if ( this->m_iXAct-1 >= 0 && this->getContent( this->m_iXAct-1, this->m_iYAct ) != this->getContent(this->m_iXAct, this->m_iYAct) ) { this->setNextBegin(this->m_iXAct-1, this->m_iYAct); this->goEast(Coord); } else { cout << "2: " <<this->m_iXAct << " - " << this->m_iYAct << endl; Coord->setXCoord(this->m_iXAct); Coord->setYCoord(this->m_iYAct); --this->m_iXAct; this->goNorth(Coord); } } break; case 1: if ( this->m_iYAct-1 >= 0 && this->getContent( this->m_iXAct, this->m_iYAct-1 ) == this->getContent(this->m_iXAct, this->m_iYAct) ) { cout << "3: " <<this->m_iXAct << " - " << this->m_iYAct << endl; Coord->setXCoord(this->m_iXAct); Coord->setYCoord(this->m_iYAct); --this->m_iYAct; this->goWest(Coord); } else { if ( this->m_iXAct-1 >= 0 && this->getContent( this->m_iXAct-1, this->m_iYAct ) == this->getContent(this->m_iXAct, this->m_iYAct) ) { cout << "4: " <<this->m_iXAct << " - " << this->m_iYAct << endl; Coord->setXCoord(this->m_iXAct); Coord->setYCoord(this->m_iYAct); --this->m_iXAct; this->goNorth(Coord); } else { if ( this->m_iYAct+1 <= this->m_zeilen && this->getContent( this->m_iXAct, this->m_iYAct+1 ) == this->getContent(this->m_iXAct, this->m_iYAct) ) { cout << "5: " <<this->m_iXAct << " - " << this->m_iYAct << endl; Coord->setXCoord(this->m_iXAct); Coord->setYCoord(this->m_iYAct); this->setDirection(2); ++this->m_iYAct; //gehe nach Osten this->goNorth(Coord); } } } break; case 2: //Nordwesten if ( this->m_iXAct-1 >= 0 && this->getContent( this->m_iXAct-1, this->m_iYAct ) != this->getContent(this->m_iXAct, this->m_iYAct) ) { cout << "6: " <<this->m_iXAct << " - " << this->m_iYAct << endl; Coord->setXCoord(this->m_iXAct); Coord->setYCoord(this->m_iYAct); --this->m_iXAct; this->setDirection(1); //zurücksetzen auf Westen this->goNorth(Coord); } else { this->setDirection(3); this->goNorth(Coord); } break; case 3: if ( this->m_iXAct <= 0 ) // für Ausgangspixel { this->goEast(Coord); } else { if ( this->m_iYAct-1 >= 0 && this->getContent( this->m_iXAct, this->m_iYAct-1 ) != this->getContent(this->m_iXAct, this->m_iYAct) ) { this->setNextBegin(this->m_iXAct, this->m_iYAct-1); this->goWest(Coord); } if ( this->m_iXAct-1 >= 0 && this->getContent( this->m_iXAct-1, this->m_iYAct ) != this->getContent(this->m_iXAct, this->m_iYAct) ) { this->setNextBegin(this->m_iXAct-1, this->m_iYAct); this->goEast(Coord); } else { cout << "7: " << this->m_iXAct << " - " << this->m_iYAct << endl; Coord->setXCoord(this->m_iXAct); Coord->setYCoord(this->m_iYAct); --this->m_iXAct; this->goNorth(Coord); } } break; default: break; } return 0; // korrektes Beenden }
  4. Das meinte ich nicht mit dynamisch, sorry. Dynamisch hieß, zur Laufzeit die Größe festlegen. Also die Dimensionen aus einer Datei einlesen und das Array dann mit diesen Werten initialisieren. Da ich aber gestern und vorgestern den C++-Kurs hatte, und das Problem dort gelöst werden konnte, hat sich das eh erledigt Trotzdem vielen Dank an alle, die mir versucht haben, zu helfen!
  5. So ähnlich (in einer Methode) habe ich das auch erst gemacht, aber der meckert der Compiler... Darum dachte ich, ich hätte etwas falsch gemacht. Es geht, wenn ich der Membervariablen sofort die Dimensionen zuweise, aber dann ist es ja nicht mehr dynamisch.
  6. Muß ich dafür nicht die Größe des Arrays kennen? Ich hatte das bisher so: private: float feld**; // Dynamisches zweidimensionales Array public: matrix(int x, int y) // Konstruktor mit Dimensionen und Anfangspixel { zeilen = y; spalten = x; iXAct = 0; iYAct = 0; float feld[zeilen][spalten]; }; Ich wollte also im Konstruktor dem Array seine Dimensionen zuweisen. Danach das befüllen klappt schon (jetzt hardcodiert).
  7. Hi Ihrs, danke für Eure Hilfe. Jetzt hat es erstmal geklappt. So falsch war das gar nicht, was ich hatte. Nur die Initialisierung des Arrays klappt nicht, das hab ich erstmal hardcodiert Ich hab nächste Woche nen C++ Kurs, da soll mir der Dozent das mal hübsch beibringen, wie man ein dynamisches Array als Membervariable initialisiert :floet: Aber ich komme jetzt schon mal weiter, und das ist die Hauptsache :nett: Wie gesagt, danke vorerst!! LG, TheWho
  8. Also, erstmal würde es mir reichen, das zweite Konzept umzusetzen, damit ich das Prinzip verstehe. Ich befürchte allerdings, daß ich das erste Konzept irgendwann umsetzen muß, da ich zu jedem Wert voraussichtlich noch einen Wert eintragen muß (nämlich, ob das Feld bereits "betreten" wurde). Oder würde es dafür auch reichen, in das Array statt des einen Werts einen Vektor oder eine map einzutragen? Mein Problem ist wohl eher, daß ich von OO echt noch nicht viel Ahnung habe. Aber irgendwo muß ich ja anfangen. :floet:
  9. Naja, eigentlich sollte man schon den gesamten Post lesen Meine Aussage im ersten Post war: Und das ist weiterhin mein Problem. Ich weiß nicht, wie ich mit Objekten in den beiden Dimensionen des Ursprungs-Arrays "wandern" kann?!
  10. Hm, hab ich das Prinzip doch noch nicht verstanden? Ist das nicht der Konstruktor? Den hatte ich ja oben mit angegeben. Brauche ich eigentlich nicht. Die Größe des Arrays beziehe ich aus der Datei und damit initalisiere ich den Konstruktor. Oder? Das sollte die Methode setContent() sein. Auch falsch? Eigentlich getContent() :hells: Destruktor, oder? Das ist das Teil mit der Tilde davor. Dachte ich zumindest? Jo, danke erstmal. Allerdings ist damit mein eigentliches Problem noch nicht gelöst. Ich hab Probleme damit, auf den Content eines anderen Objekts dieser Klasse zu gucken. Oder eher die Nachbarn halt. :confused: HILFE :beagolisc
  11. Huhu Mod(s), ähm - peinlich, bin im Forum verrutscht. Könnte bitte einer den ins C/C++ Forum verschieben? Danke! :nett: TheWho
  12. Hallo Leute, heute brauche ich mal fachliche Hilfe Also, ich muß Daten vektorisieren. Diese Daten bekomme ich prima aus der Datei ausgelesen und in ein 2dim Array geschrieben, und auch wieder ausgegeben. Mein Problem: ich soll das Ganze eigentlich objektorientiert umsetzen. Mir fällt aber nichts ein, wie ich das als Klasse(n) beschreiben soll. Wichtig ist, daß ich für jedes Element des Arrays nach oben, rechts, unten und links nach dem Inhalt gucken können muß - im 2dim Array kein Problem, aber mit Klassen bekomme ich es einfach nicht hin. Dabei ist die Lösung sicher einfach und ich komme nur nicht drauf? Danke im voraus!! TheWho Derzeit habe ich es etwa so: class matrix { private: float** feld; // Dynamisches zweidimensionales Array int zeilen, spalten, x, y; // Anzahl Zeilen und Spalten float fContent; public: matrix(int zeilen, int spalten); // Konstruktor //matrix(const matrix&); // Copy-Konstruktor ~matrix(); // Destruktor void set (int anzahl, ...); // Wertzuweisung void print (); // Ausgabe einer Matrix float getContent(int x, int y) { return fContent; }; void setContent(int x, int y, float c) { fContent = c; }; }; main { blablub.... //setzen Inhalt myRaster.setContent( iXDim, iYDim, <einzelner Content> ); //Nachbarn angucken lookNeighbours ( iNeighbours, iXDim, iYDim, myRaster ); } void lookNeighbours(int* iNeighbours, int iXDim, int iYDim, float myRaster) { if ( ! (iYDim-1 < 1 ) ) //NORDEN { if ( myRaster.getContent(iXDim, iYDim) == myRaster.getContent(iXDim-1, iYDim) ) iNeighbours[0] = 0; else iNeighbours[0] = 1; } if ( ! ( iXDim+1 > nXSize-1 ) ) //OSTEN { if ( faRaster[iXDim+1][iYDim] == faRaster[iXDim][iYDim] ) iNeighbours[1] = 0; else iNeighbours[1] = 1; } if ( ! ( iYDim+1 > nYSize-1 ) ) //SUEDEN { if ( faRaster[iXDim][iYDim+1] == faRaster[iXDim][iYDim] ) iNeighbours[2] = 0; else iNeighbours[2] = 1; } if ( !( iXDim-1 < 1 ) ) //WESTEN { if ( faRaster[iXDim-1][iYDim] == faRaster[iXDim][iYDim] ) iNeighbours[3] = 0; else iNeighbours[3] = 1; } }
  13. Genauso ist es gemeint. Man sagt auch "alt hergebracht", also aus vergangenen Zeiten mitgenommen quasi
  14. Falls es noch jemanden interessiert, hier die Lösung: es war das Board Glück im Unglück, alles noch da und ok, bis auf XP, das es mit gezogen hat, Image drüber (Ghost sei Dank) und nun lüppt et wieder *PUH* :marine

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...