Übung Grundlagen der Programmierung WS 2004/05 Übung 08: Objektorientierte Programmierung Abgabetermin: 14. 12. 2004 Name: Matrikelnummer: Gruppe: o G1 (Löberbauer) Aufgabe Punkte gelöst Aufgabe 08.1 12 Aufgabe 08.2 12 o G2 (Prähofer) o G3 (Prähofer) abzugeben schriftlich abzugeben elektronisch korr. o Prosabeschreibung, Java-Programm, Testfälle und Testausgabe Java-Programm o o Prosabeschreibung, Java-Programm, Testfälle und Testausgabe Java-Programm o Pkte Aufgabe 08.1: Rechnen mit komplexen Zahlen Eine komplexe Zahl (z.B. 3.2 + 1.75i) besteht aus einem reellen und einem imaginären Teil, beide vom Typ float. Implementieren Sie eine Klasse Complex, die komplexe Zahlen darstellt und das Rechnen mit komplexen Zahlen ermöglicht. Als Operationen sollen die vier Grundrechenarten (a + bi) + (c + di) = (a+c) + (b + d) i (a + bi) - (c + di) = (a-c) + (b - d) i (a + bi) * (c + di) = (a*c – b*d) + (a*d + b*c) i (a + bi) / (c + di) = (a*c + b*d)/(c*c + d*d) + (b*c – a*d)/(c*c + d*d) i unterstützt werden. Schreiben Sie für diese Operationen Objektmethoden, wobei als Ergebnis jeweils ein neues Zahlenobjekt erzeugt werden soll. Implementieren Sie weiters Konstruktoren, Methoden zum Lesen und Setzen des Real- und Imaginärteils und eine Methode toString, welche eine String-Darstellung der komplexen Zahl liefert. Schreiben Sie dann einen benutzerfreundlichen Dialog wie folgt: Mit einem Zeichencode soll der Benutzer folgende Operationen auswählen können: n a s md e - für eine neue komplexe Zahl für eine Addition für eine Subtraktion für eine Multiplikation für eine Division für Ende Jede Operation (außer e) liefert eine neue komplexe Zahl als Ergebnis. Diese Zahlen sollen in einem Array gespeichert werden und können für folgende Operationen als Operanden verwendet werden. Die Operation n erzeugt eine neue komplexe Zahl, welche im nächsten freien Arrayindex gespeichert wird. Für die Operationen Addition, Subtraktion, Multiplikation und Division werden die Operanden durch Angabe des Arrayindex aus den Ergebnissen früherer Operationen ausgewählt und das Ergebnis im nächsten freien Arrayindex gespeichert. Übung Grundlagen der Programmierung WS 2004/05 Beispiel: Operation: n Zahl eingeben (r i): 1 2 [0] 1.0+2.0i Operation: n Zahl eingeben (r i): 2 3 [1] 2.0+3.0i Operation: a Index Operand 1: 0 Index Operand 2: 1 [2] 3.0+5.0i Operation: s Index Operand 1: 2 Index Operand 2: 0 [3] 2.0+3.0i Operation: e Gehen Sie bei der Lösung folgend vor: 1. Skizzieren Sie Klassen und die Methoden in Prosa. 2. Implementieren Sie die Klassen und die Methoden in Java 3. Stellen Sie für alle Methoden einen Testplan auf und testen Sie das Programm. Aufgabe 08.2: Wer trifft den Schneemann? Schreiben Sie eine Basisklasse GraphObject und Unterklassen Rectangle und Circle für graphische Objekte. GraphObjects haben eine Position, und einen Namen. Rectangles haben zusätzlich eine Breite und Höhe, Circles einen Radius. Neben Konstruktoren und Zugriffsmethoden sollen die Klassen folgende Operationen implementieren: GraphObject boolean hit(Point p) void draw() Rectangle boolean hit(Point p) void draw() Circle boolean hit(Point p) void draw() void draw(): zur Ausgabe mit Klasse Window boolean hit(Point p): welche testet, ob der Punkte p innerhalb des graphischen Objekts liegt. Erzeugen Sie dann mehrere Objekte vom Typ Rectangle und Circle, die zusammen einen Schneemann darstellen (siehe folgende Abbildung) und speichern Sie diese in einem Array von Typ GraphObject[]. Realisieren Sie dann einen Benutzerdialog, in dem man Schüsse in der Form von x/y-Koordinaten eingeben kann und geantwortet wird, ob man den Schneemann getroffen hat. Beispiel: Gehen Sie bei der Lösung folgend vor: 1. Skizzieren Sie Klassen und die Methoden in Prosa. 2. Implementieren Sie die Klassen und die Methoden in Java 3. Stellen Sie für alle Methoden einen Testplan auf und testen Sie das Programm.