Programmieren II Bemerkungen zu den Praktikumsaufgaben Programmieren II Bemerkungen zu den Praktikumsaufgaben Aufgabe 5 Aufgabe 5 Teilaufgabe (a) In dieser Praktikumsaufgabe geht es um die Repräsentation einfacher dreidimensionaler Objekte: achsenparalleler Quader und achsenparalleler Würfel. y z c zP yP b P a xP x Bezugspunkt: p mit den Koordinaten (xP,yP,zp); Kante a; Kante b; Kante c 1 Programmieren II Bemerkungen zu den Praktikumsaufgaben Aufgabe 5 Definieren Sie eine Klasse Quader. (/* Hinweis: Zur Repräsentation des Bezugspunktes soll jedes Objekt vom Typ Quader ein Teilobjekt vom Typ Punkt haben. */) Die Klasse Quader soll mindestens folgende Methoden besitzen: • • 2 Programmieren II Bemerkungen zu den Praktikumsaufgaben Aufgabe 5 • class Punkt { private: double x_; double y_; double z_; public: Punkt(double,double,double); ... // notwendige Zugriffsmethoden // deklarieren und definieren } einen vierstelligen Konstruktor, dem ein Objekt vom Typ Punkt sowie die Länge der Kanten a, b und c übergeben werden eine Methode koordinaten(), die die Koordinaten aller 8 Eckpunkte des Quaders auf den Bildschirm ausgibt eine Methode volumen() zur Berechnung des Volumens des Quaders 3 class Quader { protected: Punkt p_; double a_; double b_; double c_; public: Quader(Punkt &, double, double, double); void koordinaten( ); double volumen( ); } 4 Programmieren II Bemerkungen zu den Praktikumsaufgaben Programmieren II Bemerkungen zu den Praktikumsaufgaben Aufgabe 5 Aufgabe 5 Teilaufgabe (b) In dieser Aufgabe geht es darum, die Artikel eines Supermarkts in einer einfach verketteten Liste zu verwalten. Deklarieren Sie mittels Vererbung eine Klasse Wuerfel, die eine Spezialisierung der Klasse Quader darstellt. Die Klasse Wuerfel soll folgende Methoden besitzen: Die folgende Klasse Artikel dient der Repräsentation eines Artikels. • • einen zweistelligen Konstruktor, dem ein Objekt vom Typ Punkt und die Länge der Kante a übergeben wird eine eigene Version der Methode volumen(), die der Tatsache Rechnung trägt, dass sich das Volumen eines Würfels „einfacher“ berechnen lässt class Artikel { private: string name_; string nummer_; double preis_; public: Artikel( string name, string nummer, double preis ): name_(name), nummer_(nummer), preis_(preis) { }; void display(); }; 5 Programmieren II Bemerkungen zu den Praktikumsaufgaben 6 Programmieren II Bemerkungen zu den Praktikumsaufgaben Aufgabe 5 Aufgabe 5 In der zu verwaltenden Liste kommen als Elemente Objekte vom folgenden Typ vor: Objekt vom Typ Element class Element { private: Artikel * data_; Element * next_; public: Element( Artikel * data ): data_(data), next_(NULL) { }; Artikel * get_data( ) { return(data_); }; Element * get_next( ) { return(next_); }; void set_next( Element * next ) { next_ = next;}; }; 7 Hinweis: #include<iostream> nötig, damit die Konstante NULL bekannt ist 0815 data_ NULL next_ Objekt vom Typ Artikel mit Adresse 0815 Birnen name_ 100-1 nummer_ 8.99 preis_ 8 Programmieren II Bemerkungen zu den Praktikumsaufgaben Programmieren II Bemerkungen zu den Praktikumsaufgaben Aufgabe 5 Aufgabe 5 Objekt vom Typ Liste (/* hier: die leere Liste */) die Klasse Liste sieht dann wie folgt aus 4711 class Liste { private: Element * first_; public: Liste( ); void insert(Artikel *); void display( ); }; Objekt vom Typ Element mit Adresse 4711 first_ NULL data_ NULL next_ 9 Programmieren II Bemerkungen zu den Praktikumsaufgaben 10 Programmieren II Bemerkungen zu den Praktikumsaufgaben Aufgabe 5 Aufgabe 5 Objekt vom Typ Liste (/* hier: Liste mit einem Element */) Die Methoden der Klasse Liste sollen folgende Funktionalität realisieren: • 4711 first_ • Objekt vom Typ Element mit Adresse 4711 Objekt vom Typ Element mit Adresse 4712 NULL data_ 4712 next_ 0815 data_ NULL next_ • Objekt vom Typ Artikel mit Adresse 0815 Birnen name_ 100-1 nummer_ 8.99 preis_ 11 der Konstruktor soll eine leere Liste mit einem „dummy“-Element am Anfang der Liste erzeugen die Methode insert() soll ein neues Element am Anfang der Liste – also nach dem „dummy“-Element – einfügen (/* dieser Methode wird die Adresse eines Objekts vom Typ Artikel übergeben */) die Methode display() soll für jeden Artikel, dessen Adresse in einem Element der Liste gespeichert ist, den Artikelnamen, die Artikelnummer und den Preis anzeigen (/* hierbei ist die Methode display() der Klasse Artikel zu verwenden */) 12 Programmieren II Bemerkungen zu den Praktikumsaufgaben Programmieren II Bemerkungen zu den Praktikumsaufgaben Aufgabe 5 Aufgabe 5 Was muß beim Aufruf der Methode insert() geschehen, wenn das Objekt, dem diese Nachricht geschickt wird, die leere Liste repräsentiert? 4711 4711 first_ Objekt vom Typ Element mit Adresse 4711 Annahme (für die nächsten Folien): Objekt vom Typ Element mit Adresse 4711 NULL data_ NULL next_ data_neu ist eine Zeigervariable, in der die Adresse eines Objekts vom Typ Artikel gespeichert ist Objekt vom Typ Element mit Adresse 4712 13 Programmieren II Bemerkungen zu den Praktikumsaufgaben Aufgabe 5 4711 Objekt vom Typ Element mit Adresse 4711 Objekt vom Typ Element mit Adresse 4712 first_ // data_neu = 0815 Element * ele_neu; ele_neu = new Element(data_neu); (*first_).set_next(ele_neu); NULL data_ 4712 next_ 0815 data_ NULL next_ Objekt vom Typ Artikel mit Adresse 0815 Birnen name_ 100-1 nummer_ 8.99 preis_ 15 first_ // data_neu = 0815 Element * ele_neu; ele_neu = new Element(data_neu); NULL data_ NULL next_ 0815 data_ NULL next_ Objekt vom Typ Artikel mit Adresse 0815 Birnen name_ 100-1 nummer_ 8.99 preis_ 14