Hilfe Bitte



  • Ich bin neu hier und ein Anfänger in C++ und ich muss eine Aufgabe lösen und bitte um eure Hilfe.
    Die Aufgabe ist folgendes:

    Gegeben sei die folgende Beschreibung eines Saugroboters:
    · Der Saugroboter ist rund, seine Form wird damit durch seinen Durchmesser bestimmt. Der
    Durchmesser wird in Metern gemessen. Eine Gleitkommazahl mit einer Genauigkeit von 6 bis 7
    Nachkommastellen genügt den Genauigkeitsanforderungen.
    · Die Position des Saugroboters im Raum wird durch zwei Werte x und y (Einheit: Meter)
    angegeben, die die Position als Punkt im kartesischen Koordinatensystem eindeutig beschreiben.
    Um Rundungsfehler bei relativer Positionierung zu minimieren, sollen diese Werte als doppelt
    genaue Gleitkommazahlen definiert werden.
    · Für die Ausrichtung wird der Winkel zwischen der Mitte der Frontseite und der x-Achse
    (gemessen in Radianten (rad)) ebenfalls mit einer doppelt genauen Gleitkomazahl gespeichert.
    Beim Erzeugen eines neuen Saugroboters muss die initiale Position und Ausrichtung angegeben
    werden.
    · Der Saugroboter kann sich um einen angegebenen Winkel drehen (um seine Mitte). Ein positiver
    Wert entspricht dabei einer Drehung gegen den Uhrzeigersinn, ein negativer Wert einer Drehung
    im Uhrzeigersinn. Der Winkel wird in Radianten (rad) angegeben.
    · Der Saugroboter kann sich um eine angegebene Strecke entlang der Fahrtrichtung bewegen.
    Eine positive Zahl entspricht einer Vorwärtsbewegung, eine negative Zahl einer Rückwärtsbewegung.
    Die zurückzulegende Strecke wird in Metern angegeben.
    · Der Saugroboter kann die x- und y-Werte seiner aktuellen Position und seine aktuelle
    Ausrichtung an das aufrufende Programm liefern.
    · Der Saugroboter kann seine aktuelle Position und Ausrichtung (seinen Zustand) auf dem Bildschirm
    anzeigen. Die Ausrichtung soll zur einfacheren Interpretation sowohl in Radianten als
    auch (in Klammern) in Grad angezeigt werden.
    a) Entwerfen Sie eine Klasse zur Modellierung eines Saugroboters, die den Anforderungen der
    gegebenen Beschreibung entspricht und stellen Sie das UML-Klassendiagramm dieser Klasse auf.
    Hinweise: Überlegen Sie dazu, durch welche Eigenschaften ein Saugroboter beschrieben wird und
    welches Verhalten von ihm gefordert wird. Eigenschaften können mit Substantiven und Verhalten mit Verben beschrieben werden. Eigenschaften werden zu Attributen, Verhaltensweisen zu Methoden
    einer Klasse.
    Kennzeichnen Sie im ersten Schritt Angaben zu Eigenschaften und Verhaltensweisen im Text mit
    verschiedenen Farben.
    Stellen Sie dann das UML-Klassendiagramm auf. Beachten Sie dabei die folgenden
    Namenskonventionen:
    · Namen und Bezeichnungen in Englisch
    · Großbuchstaben zur Abgrenzung von Namensbereichen sonst Kleinschreibung, z.B. getName,
    ArrayIndex
    · Bezeichnung von Methoden mit Verben, z.B. getName, setName, print
    · Bezeichnung von Attributen und Klassen mit Substantiven
    · Verwendung von Präfixen zur Kennzeichnung spezieller Bezeichnungen:
    b) Rufen Sie sich die mathematischen Zusammenhänge in Erinnerung:
    Wenn ihr Saugroboter eine Ausrichtung von 30° hat und um 1m weiterbewegt wird, wie ändern sich
    dann seine x- und y-Koordinaten? Wie lautet die allgemeine Formel?



  • Lies mal folgenden Beitrag durch: http://www.c-plusplus.net/forum/200753

    Punkt 1, 2, 3, 4, 6 duerften besonders zutreffen aber lies mal den ganzen Beitrag.



  • Auch wenn es hier ausnahmsweise mal nicht gleich um GUI geht, muss ich doch unweigerlich die Frage stellen: Wieso C++/CLI? Ich kann mir kaum eine Sprache vorstellen, die für Anfänger weniger sinnvoll wäre als C++/CLI. Und nein, C++/CLI ist nicht C++...



  • Es ist eigentlich vollkommen egal, in welcher Sprache man das nicht programmiert. (Aufgabenstellung lesen)



  • medbourbei schrieb:

    [...] stellen Sie das UML-Klassendiagramm dieser Klasse auf.
    [...] Kennzeichnen Sie im ersten Schritt Angaben zu Eigenschaften und Verhaltensweisen im Text mit verschiedenen Farben.
    Stellen Sie dann das UML-Klassendiagramm auf. Beachten Sie dabei die folgenden
    Namenskonventionen:
    · Namen und Bezeichnungen in Englisch
    · Großbuchstaben zur Abgrenzung von Namensbereichen sonst Kleinschreibung, z.B. getName,
    ArrayIndex
    · Bezeichnung von Methoden mit Verben, z.B. getName, setName, print
    · Bezeichnung von Attributen und Klassen mit Substantiven
    · Verwendung von Präfixen zur Kennzeichnung spezieller Bezeichnungen [...]

    sicher ned.

    #include <iostream>
    
    double const pi = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798;
    
    class robovac_t
    {
    	friend std::ostream& operator<< ( std::ostream &os, robovac_t const &robovac );
    
    	private:
    		float diameter; // fuer die Aufgabe voellig sinnfrei.
    		double x;
    		double y;
    		double heading;
    
    	public:
    		robovac_t( double const x, double const y, double const heading )
    			: x( x ), y( y ), heading( heading ) {}
    
    		double get_x() { return x; }
    		double get_y() { return y; }
    		double get_heading() { return heading; }
    
    		void turn( double const angle ) { heading += angle; }
    
    		void move( double distance )
    		{
    			x += ( cos( heading ) * distance );
    			y += ( sin( heading ) * distance );
    		}		
    };
    
    std::ostream& operator<< ( std::ostream &os, robovac_t const &robovac )
    {
    	os.precision( 3 );
    	os	<< "robovac state:\n" << std::fixed
    		<< "position: " << robovac.x << " | " << robovac.y << '\n'
    		<< "heading:  " << robovac.heading << " (" << robovac.heading * 180. / pi << ")\n";
    	return os;
    }
    
    int main()
    {
    	robovac_t robovac( 0., 0., 0 );
    
    	std::cout << robovac << '\n';
    
    	robovac.turn( 30. * pi / 180. );
    	robovac.move( 1. );
    
    	std::cout << robovac << '\n';
    }
    

Log in to reply