Computerpraktikum - Mathematik in der Universität Bremen

Werbung
Hartmut Jürgens
Universität Bremen
SS 2009
Computerpraktikum
Übung 8
Zusammengesetzte Datenstrukturen und Klassen
Aufgabe 1 – Verwalten einer CD-Sammlung
Ihre CD-Sammlung soll mit einem C++-Programm verwaltet werden. Überlegen Sie sich, welche Daten einer Audio-CD Sie abspeichern wollen und
definieren Sie die nötigen Datenstrukturen als structs. struct kann auch
verschachtelt werden.
Hinweis: Das Musikgenre (z.B. Jazz, Rock, etc.) kann als Aufzählungstyp enum
definiert werden.
(ca. 20 min)
Aufgabe 2 – Liste mit einfacher Verknüpfung
In der Vorlesung (Felder und Strukturen) haben wir als wichtiges Beispiel einer dynamischen Datenstruktur die Liste (und grundlegende Operationen, die
auf ihr ausgeführt werden) kennengelernt. Nun sollen weitere Operationen auf
der Liste implementiert werden. Formulieren Sie als erstes das Programm aus
der Vorlesung so um, dass die Eingabe und Ausgabe jeweils eine eigenständige Funktion bilden. Dabei soll bei der Ausgabe kein Element gelöscht werden.
Schreiben sie nun jeweils eine Funktion, die es ihnen erlaubt
• die Anzahl der Listeneinträge bzw. Listenknoten zu ermitteln;
• einen Datensatz nach dem i-ten Element in der Liste einzuhüngen bzw. zu
löschen (mit Sicherheitsabfrage, ob i-tes Element existiert);
• die vorhandene Liste zu sortieren (optional). Das Beispielprogramm ”liste_simple.cpp” findet sich auf der Praktikumsseite.
(ca. 25 min)
Aufgabe 3 – Komplexe Zahlen
Fassen Sie die Beispiele bzgl. der Klasse Complex aus der Vorlesung zusammen
und ergänzen Sie die Klasse ausserdem so, das sie folgende Funktionalitäten
enthält:
1. Die Konstruktoren Complex() und Complex(double x, double y).
2. Den Kopierkonstruktor Complex(const Complex &other).
8-1
3. Die Methode void Set(double x, double y) zum nachträglichen Setzen von Real- und Imaginärteil.
4. Die Methoden double real() und double imag() zum Abfragen von
Real- und Imaginärteil.
5. Die Methode double norm() für den Absolutbetrag der komplexen Zahl.
6. Die Funktionen add und mult für Summe und Produkt zweier komplexer
Zahlen. add kann z.B. so aussehen:
Complex add ( const Complex &a , const Complex & b ) {
double x = a . x + b . x ;
double y = a . y + b . y ;
return Complex (x , y );
}
7. Welche Bedeutung hat der &-Operator im Funktionskopf von Punkt 6 und
warum sind die Argumente als const deklariert?
8. Welche Elemente (sowohl Methoden als auch Datenelemente) sollten
public und welche private sein und warum?
(ca. 25 min)
Aufgabe 4 – Konvergenz einer komplexen Folge
Berechnen Sie mit der Klasse aus Aufgabe 3 die ersten 15 Folgenglieder zi ∈ C
der Folge
z0 = 0,
zn+1 = zn2 + c
für c ∈ {0, 0.5, 1, 0.5i, −1.1 + 0.1i, 0.1 + 0.7i, −0.1 + 0.7i}.
Geben sie die Ergebnisse auf dem Bildschirm aus. Für welche c ist die Folge
ein Kandidat für Konvergenz?
Hinweis: Sobald |z| ≥ 2 ist, divergiert diese Folge.
(ca. 15 min)
Aufgabe 5 – Projektverwaltung
Teilen Sie den Programmcode der vorhergehenden Aufgaben, so auf, dass
die Klasse Complex in complex.h deklariert wird. Einige Methoden und
Funktionen können Sie auch in complex.cpp auslagern. Das Hauptprogramm
complexmain.cpp soll dann mit #include "complex.h" auf diese Klasse zugreifen. Das Projekt kann wie folgt übersetzt werden:
$ g++ -c -o complex.o complex.cpp
$ g++ -o complexmain complexmain.cpp complex.o
(ca. 15 min)
8-2
Herunterladen