Kleines Beispielprogramm
-
Hallo,
ich habe die aufgabe in C einen Raum zu prgrammieren in dem sich ein Punkt(Roboter) befindet, der sich dann auf die vom Benutzer eingegebnen Punkt im raum ändert.
Der Raum soll folgende Maße haben:http://downloads.tb-xtreme.de/roboter.jpg
Die Zahlen sind werte aus einem Koordinatensystem. So ich muss jetzt dem Roboter von einem Ausgangspunkt (home) im Raum zu einem Punkt im RAum bekommen der durch einen benutzer eingegeben wurde. DAs Programm muss also prüfen ob sich der eingegebene Punkt im Raum befindet! Zusätzlich soll es eine funktion geben die den roboter wieder zum Ausgangspunkt(Home) bringt. Es Soll nur eine reine consolen anwendung sein und nur die aktullen zahlen ausgeben.
Das ganze soll ich mit Klassen, Modifier und Accessoren machen! Kann mir da vielleicht irgendjemand helfen? Weis nicht wie ich anfangen soll...
Vielen Dank schon mal...
-
in der theorie kann ich dir weiterhelfen:
erstmal musst du versuchen, ein koordinatensystem zu erstellen(arrays eignen sich dazu sehr gut)
da der raum verwinkelt ist, musst du einige array felder sperren, am besten gibst du ihnen einen wert, den fragst du dann ab,und hast somit schon eine möglichkeit zu überprüfen,ob die koordinate im system liegt.wenn eine eingabe über 20/20 ist, kannst du das auch prüfen und somit abfangen.ab dann kann ich dir nichmehr gut helfen...von wegfindung hab ich keinen peil..
-
Wegfindung muss ich ja auch net haben. Also es soll nur überprüft werden ob der punkt im erlaubtem Raum ist oder nicht. Wenn ja dann wird er dort hingesetzt!
-
dann mal die roboterklasse:
der roboter hat 4 eigenschaften:int x, int y, int oldx, int oldy
x und y sind die momentanen koordinaten, oldx und oldy sind die koordinaten des letzten aufenthaltsorts. wenn der roboter nun seine position ändert, werden die derzeitigen koordinaten in oldx/oldy geschrieben,und in x/y die neuen koordinaten eingetragen.
um wieder zurückzukommen,benutzt man einfach eine funktion die die eigenschaften x/y und oldx/oldy vertauscht.mehr erklär ich dir aber auch nich, der nächste schritt währe das fertige programm
-
Oh ich definiere gerade den Raum als Klasse! Könntest du net doch viellicht den Code zu deiner Idee posten? Wäre echt nett!!! Stehe nämlich ganz schön auf dem schlauch! Zumal das wichtige an dem Programm ja ist das ich Klassen, Modifier, accesoren und konstuukter haben muss...
Im moment sieht meine Arbeit so aus: (Nur hier meint der Kompieler: Zu viele Typen in Deklaration)
//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream.h> #include <conio.h> #pragma hdrstop //--------------------------------------------------------------------------- // Klassendeklaration class TRaum { private: int x0; int xmax; int y0; int ymax; int xm; int ym; int posx; int posy; int position; // Modifier void setx0 (int value); void setxmax (int value); void sety0 (int value); void setymax (int value); void setxm (int value); void setym (int value); void setposx (int value); void setposy (int value); // Accessor int getx0 (void); int getxmax (void); int gety0 (void); int getymax (void); int getxm (void); int getym (void); int getposx (void); int getposy (void); public: int zeigePosition (void); //void gotoPosition (void); // Konstruktor TRaum (void); //TRaum (int aposx, int posy); } int TRaum::zeigePosition (void) { position = getposx(); return position; } int TRaum::getposx (void) { return posx; } int TRaum::getposy (void) { return posy; } TRaum::TRaum (void) { setx0 (0); sety0 (0); setxmax (20); setymax (20); setxm (10); setym (10); setposx (5); setposy (5); } #pragma argsused int main(int argc, char* argv[]) { TRaum r1; cout << "Aktuelle Position (x,y):" << r1.zeigePosition() << endl; getch(); return 0; } //---------------------------------------------------------------------------
-
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.