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