Kleines Beispielprogramm
-
ich habe die aufgabe in C einen Raum zu prgrammieren [...]
Das ganze soll ich mit Klassen, Modifier und Accessoren machen!Also irgendwas stimmt da mit deiner Aufgabe nicht
-
Wieso?
Naja jedenfalls komm ich nicht weiter, jetzt versuche ich doch mal dem Roboter als klasse zu definieren, ist hoffentlich einfacher...
-
DerSeher schrieb:
Wieso?
Weil es in C keine Klassen etc. gibt.
Deine Klasse sieht übrigens ziemlich aufgeblasen aus und das T-Präfix ist eine Borland-Eigenheit; vermeide bei eigenen Klassen Präfixe!
-
Ja ich programmiere ja mit Borland und es gehört ja auch zum Thema OOP Einführung!
Jetzt habe ich das hier erstellt! Aber ich habe schon wieder die Meldung "zuviele Typen in Deklaration"
Was soll das heissen?//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream.h> #include <conio.h> #pragma hdrstop //--------------------------------------------------------------------------- // Klassendeklaration class TRoboter { private: int posx; int posy; // Modifier void setposx (int value); void setposy (int value); // Accessor int getposx (void); int getposy (void); public: int zeigePosition (void); //void gotoPosition (void); // Konstruktor TRoboter(void); } // Get posX int TRoboter::getposx (void) { return posx; } // Get posY int TRoboter::getposy (void) { return posy; } // Set posX int TRoboter::setposx (void) { posx = value; } // Set posY int TRoboter::setposy (void) { posy = value; } // Konstruktor aufrufen TRoboter::TRoboter (void) { setposx (5); setposy (5); } // Methoden int TRoboter::zeigePosition (void) { position = getposx() & getposy(); return position; } #pragma argsused int main(int argc, char* argv[]) { TRoboter r1; cout << "Aktuelle Position (x,y):" << r1.zeigePosition() << endl; getch(); return 0; } //---------------------------------------------------------------------------
-
Wenn ich das richtig sehe geht es doch rein um folgendes Problem:
Feststellen, ob der Punkt vom aktuellen Standort aus erreichbar ist.
Also geht es doch garnicht darum eine tolle OO-Architektur aus dem Boden zu stampfen, sondern vielmehr darum einen Algorithmus zu finden, der beantwortet, ob ein Punkt im Polygon (das den Raum beschreibt) ist oder nicht. Dafür gibt es bereits fertige Algorithmen. In der Java-Bibliothekt ist sowas zum Beispiel enthalten. im wesentlichen macht man folgendes: Man zieht vom zu untersuchenden Punkt eine Halbgerade in eine Richtung, bis ins unendliche. Dann schneidet man die mit den Kanten und zählt, wie oft sich das schneidet. Jeder Schnitt ist ein Wechsel innen/außen oder außen/innen. Bei einer ungeraden Anzahl Schnitte war ich vorher drin, bei einer geraden nicht.
Etwas Vorsicht ist bei Fällen wie Gerade liegt genau auf Begrenzungswand geboten. Dafür gibt es Sonderbehandlungen, evtl. ist es aber einfacher sich einfach ne neue Richtung auszusuchen.MfG Jester
-
class TRoboter { ... }; //<--
void setposx (int value); ... int TRoboter::setposx (void) { posx = value; }
Hmm, das sieht doch
aus?
Edit: Achja, vielleicht könnte man die Aufteilung public/private noch einmal überdenken...
-
Upps!
Ich habe Teile des vorgängerprogrammes kopiert, deswegen dieser dreher! Und das mit dem ; funktioniert! Das muss anscheinend da hin. Aber jetzt habe ich eine andere frage wie kann ich das machen:int TRoboter::zeigePosition (void) { position = getposx() && "," && getposy(); return position; }
ich will die 2 ausgelesenen werte in char position schreiben und zwar mit einem komma dazwischen!
-
fubar: Das Semikolon muss nach Typdefinitionen da stehen.
DerSeher: Schau Dir doch mal den FAQ-Beitrag von Hume zum Thema Stringstreams an!
-
nman schrieb:
fubar: Das Semikolon muss nach Typdefinitionen da stehen.
Ähm, verstehe ich jetzt nicht? Habe ich denn was anderes geschrieben?
-
fubar schrieb:
Habe ich denn was anderes geschrieben?
Nein, sorry, ich dachet Dein "das sieht doch
aus" bezöge sich darauf.