Übungsblatt 11 – Vererbung - Fakultät für Mathematik und Informatik

Werbung
Friedrich-Schiller-Universität Jena
Fakultät für Mathematik und Informatik
Institut für Informatik
Prof. Dr. E.-G. Schukat-Talamazzini
http://www.minet.uni-jena.de/fakultaet/schukat/
Bernhard Pietsch
[email protected], R3240
Übung zur Vorlesung
Strukturiertes Programmieren
SS 2014
Übungsblatt 11: Vererbung
Abgabe: 23.06.2014
Besprechung: 24/26.06.2014
Aufgabe 1: Objekte
Informell betrachtet ist ein binärer Baum eine Datenstruktur, bei der in jedem Knoten zwei
Referenzen auf ein linkes und ein rechtes Kind, die wiederum Knoten sind und Kinder haben
können, gespeichert werden. Zusätzlich kann ein Knoten noch einen Payload, also nützliche
Daten enthalten.
Bei einem binären Suchbaum enthält jeder Knoten einen Schlüsselwert, und es gilt die Suchbaumeigenschaft: Für jeden Knoten n des binären Suchbaumes gilt, dass die Schlüsselwerte aller
Knoten des linken Teilbaumes von n kleiner sind als der Schlüsselwert von n, die Schlüsselwerte
aller Knoten des rechten Teilbaumes größer als der Schlüsselwert von n.
a) Schreiben Sie eine Klasse Student mit den privaten Attributen matrikel, name, left,
right für Matrikelnummer und Name des jeweiligen Studenten sowie die Verweise auf linken
und rechten Kind-Knoten.
Ergänzen Sie Getter- und Setter-Methoden sowie einen Konstruktor, welchem Matrikelnummer und Name übergeben werden.
b) Schreiben Sie eine Klasse Tree mit dem privaten Attribut Student root, welches die Wurzel
eines binären Suchbaumes von Student-Knoten bildet.
Implementieren Sie einen Konstruktor ohne Argumente, welcher root mit null initialisiert.
Implementieren Sie darüber hinaus folgende Methoden:
public void add (Student n) throws Exception: Diese Methode fügt einen neuen Knoten in den Baum ein. Existiert bereits ein Knoten mit gleicher Matrikelnummer, soll
eine aussagekräftige Exception geworfen werden.
public Student search (int matrikel): Diese Methode liefert das Studenten-Objekt
mit der passenden Matrikelnummer zurück. Existiert kein passendes Objekt, soll der
Rückgabewert null sein.
1
private void printInOrder(Student n): gibt den Inhalt des Teilbaums mit Wurzel n
aus. Dazu wird der Teilbaum mittels In-Order-Traversierung durchlaufen und für jeden
Knoten Name und Matrikelnummer ausgegeben werden.
public void printTree(): gibt den Inhalt des Baums durch Aufruf von printInOrder
(root) aus.
c) Schreiben Sie schließlich eine Klasse TestTree mit einer main-Methode.
• Erstellen Sie einen leeren Baum und fügen Sie 5 Teststudenten mit Namen und
Matrikelnummer in den Baum ein
• Versuchen Sie, einen weiteren Studenten mit bereits im Baum vorhandener Matrikelnummer hinzuzufügen.
• Suchen Sie nach einer vorhandenen und einer nicht vorhandenen Matrikelnummer im
Baum.
• Rufen Sie die Methode printTree () auf.
Aufgabe 2: Klassenmethoden
Erweitern Sie die Klasse Point aus Übungsblatt 10:
a) um eine Methode public void printOut (), welche die Koordinaten des Punktes auf dem
Bildschirm ausgibt
b) um eine Klassenmethode public static double abstand(Point p, Point q) zur Berechnung des Abstandes des Punktes p zu einem Punkt q.
c) um eine Klassenmethode public static double m(Point p, Point q) zur Berechnung
des Faktors m der Geradengleichung y = m · x + b, die durch die Punkte p und q bestimmt
wird,
d) um eine Klassenmethode public static double b(Point p, Point q) zur Berechnung
der additiven Konstanten b der Geradengleichung y = m · x + b, die durch die Punkte p und
q bestimmt wird.
e) Erweitern Sie die Klasse TestPoint um geeignete Testfälle für die neue Funktionalität.
Zweipunktegleichung: Die Gleichung der Verbindungsgeraden zwischen zwei Punkten P1 =
(x1 , y1 ) und P2 = (x2 , y2 ) ist
y2 − y1
(x − x1 )
y − y1 =
x2 − x1
Viel Spaß und Erfolg!
2
Herunterladen