5. Praktikumsaufgabe - fbi.h

Werbung
FBMN – Programmieren II (Sommersemester 2007)
Vorlesung + Praktikum: Prof. Dr. Steffen Lange (www.fbi.h-da.de/~slange/)
5. Praktikumsaufgabe
Teilaufgabe (a)
In dieser Praktikumsaufgabe geht es um die Repräsentation einfacher dreidimensionaler Objekte:
achsenparalleler Quader und achsenparalleler Würfel.
Ein achsenparalleler Quader ist durch einen Bezugspunkt p mit den Koordinaten (xp,yp,zp) (/* den Koordinaten des linken unteren Eckpunkts des Quaders */), die Länge der Kante a, die Länge der Kante b
und die Länge der Kante c eindeutig bestimmt (/* siehe Bild */).
Ein achsenparalleler Würfel ist ein achsenparalleler Quader, welcher die Eigenschaft hat, dass die
Kanten a, b und c dieselbe Länge haben.
1. Definieren Sie eine Klasse Punkt zur Repräsentation von Punkten im R3. (/* Definieren Sie die
Datenelemente der Klasse Punkt als private Datenelemente und führen Sie geeignete
Zugriffsmethoden ein! Definieren Sie einen dreistelligen Konstruktor für die Klasse Punkt,
dem die Koordinaten des Bezugspunkts als Parameter übergeben werden. */)
2. Definieren Sie eine Klasse Quader. (/* Hinweis: Zur Repräsentation des Bezugspunkts soll
jedes Objekt vom Typ Quader ein Teilobjekt vom Typ Punkt haben. */) Die Klasse Quader
soll mindestens die folgende Methoden besitzen:
•
•
•
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. Deklarieren Sie mittels Vererbung eine Klasse Wuerfel, die eine Spezialisierung der Klasse
Quader darstellt. Die Klasse Wuerfel soll folgende Methoden besitzen:
•
•
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
(/* Hinweis: Es wird für jede Klasse eine Header- und eine Quellcodedatei erwartet! */)
Benutzen Sie folgendes Testprogramm, um Ihre Klassendefinitionen zu testen:
FBMN – Programmieren II (Sommersemester 2007)
Vorlesung + Praktikum: Prof. Dr. Steffen Lange (www.fbi.h-da.de/~slange/)
int main () {
double x, y, z;
cout << "Gib die x-Koordinate des Bezugspunkts ein: ";
cin >> x;
cout << "Gib die y-Koordinate des Bezugspunkts ein: ";
cin >> y;
cout << "Gib die z-Koordinate des Bezugspunkts ein: ";
cin >> z;
Punkt my_p(x, y, z);
double a, b, c;
cout << "Gib die Laenge der Seite a ein: ";
cin >> a;
cout << "Gib die Laenge der Seite b ein: ";
cin >> b;
cout << "Gib die Laenge der Seite c ein: ";
cin >> c;
Quader my_q(my_p, a, b, c);
cout << "Daten des Quaders:" << endl;
my_q.koordinaten();
cout << "Volumen des Quaders: " << my_q.volumen() << endl;
Wuerfel my_w(my_p, a);
cout << "Daten des Wuerfels:" << endl;
my_w.koordinaten();
cout << "Volumen des Wuerfels: " << my_w.volumen() << endl;
return(0);
}
Teilaufgabe (b)
In dieser Aufgabe geht es darum, die Artikel eines Supermarkts in einer einfach verketten Liste zu verwalten.
Die folgende Klasse Artikel speichert die Daten für einen Artikel.
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();
};
Die Methode display() der Klasse Artikel ist wie folgt definiert:
void Artikel::display(){
cout << "Artikelname: " << name_ << endl;
cout << "Artikelnummer: " << nummer_ << endl;
cout << "Preis: " << preis_ << endl;
FBMN – Programmieren II (Sommersemester 2007)
Vorlesung + Praktikum: Prof. Dr. Steffen Lange (www.fbi.h-da.de/~slange/)
Die folgende Klasse Element dient der Repräsentation der Elemente der einfach verketteten Liste.
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;};
};
Die von Ihnen zu definierende Klasse Liste ist wie folgt deklariert:
class Liste {
private:
Element * first_;
public:
Liste();
void insert(Artikel * data);
void display();
};
Die Methoden der Klasse Liste sollen folgende Funktionalität realisieren:
•
•
•
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 oben definierte Methode display() der Klasse Artikel zu verwenden */)
Das folgende Bild soll die Struktur eines Objekts vom Typ Liste mit dem Namen myliste veranschaulichen, welche die Adressen von zwei Objekten vom Typ Artikel speichert.
FBMN – Programmieren II (Sommersemester 2007)
Vorlesung + Praktikum: Prof. Dr. Steffen Lange (www.fbi.h-da.de/~slange/)
1. Übernehmen Sie die Deklarationen und Definitionen der Klassen Artikel, Element und Liste.
2. Definieren Sie die Methoden der Klasse Liste.
(/* Hinweis: Es wird je Klasse eine Header- und eine Quellcodedatei erwartet! */)
Benutzen Sie die das folgende Testprogramm, um Ihre Klassendefinitionen zu testen. Die im Testprogramm verwendeten Befehle system("CLS") und system("Pause") dienen dazu, den Bildschirm zu
löschen bzw. Ihnen die Möglichkeit zu geben, die nach dem Aufruf der Methode display() der Klasse
Liste angezeigten Informationen in Ruhe zu betrachten.
int main ( ) {
Liste myliste;
int wahl = 0;
string name, nummer;
double preis;
while ( wahl != 3 ) {
system( "CLS" );
cout << "(1) Artikel eintragen" << endl;
cout << "(2) Liste anzeigen" << endl;
cout << "(3) Programm beenden" << endl << endl;
cout << "Bitte geben Sie 1, 2 oder 3 ein: ";
cin >> wahl;
if ( wahl = = 1 ) {
cout << "Artikelname (ohne Leerzeichen): ";
cin >> name;
cout << "Artikelnummer (ohne Leerzeichen): ";
cin >> nummer;
cout << "Preis: ";
cin >> preis;
Artikel * data = new Artikel( name, nummer, preis );
myliste.insert( data );
}
else if ( wahl = = 2 ) {
myliste.display( );
system( "Pause" );
}
else {
cout << "ENDE" << endl;
}
}
return(0);
}
Viel Spaß ☺.
Herunterladen