PS Einführung in die Programmierung WS 2001/02 (Hagenauer, Linder, Mayer H., Pohlmann) Blatt 10 Abgabe spätestens bis 18.12.2001 10:00 Uhr Hinweis: Verwenden Sie für das "Hauptprogramm" als Klassen- und Dateinamen immer BspXX, wobei XX die Aufgabennummer zweistellig ist, und für weitere Klassendefinitionen sinnvolle Bezeichner. Fügen Sie jedem Beispiel in Form eines Kommentars das Protokoll (Ein-Ausgabe) einer kleinen Testanwendung bei (vgl. die Beispiele in der Vorlesung). 24. Entwerfen Sie eine Klasse Complex für die komplexe Arithmetik in kartesischen Koordinaten in Java und speichern Sie sie in der Datei Complex.java ab. Eine komplexe Zahl z lässt sich darstellen als z = x + i ·y x, y e R, aus dem Realteil x und Imaginärteil y. Dabei bezeichnet man i als imaginäre Einheit und es gilt i2 = 1. Die arithmetischen Grundoperationen für zwei komplexe Zahlen z 1 = x1 + i ·y1 und z2 = x2 + i ·y2 sind folgendermaßen definiert: z1 + z2 = x1 + x2 + i ·( y1 + y2 ) (1) z1 z2 = x1 x2 + i ·( y1 y2 ) (2) x1 x2 y1 y2 + i ·( x 1 y2 + y1 x2 ) (3) z1 ·z 2 = z1 = z2 x1 y2 + y1 x2 x1 x2 + y1 y2 +i· x22 + y2 2 (4) x22 + y2 2 Außerdem gilt für den Betrag z einer komplexen Zahl z = x + i ·y: z = SQRT(x2 + y2) (5) Die Klasse Complex soll eine komplexe Zahl repräsentieren und folgende Elemente enthalten: Zwei private Datenfelder re, im vom Typ double, die den Real- und Imaginärteil einer komplexen Zahl enthalten. Einen Konstruktor ohne Parameter, der keinen Code enthält. Einen Konstruktor mit zwei Parametern vom Typ double, der die privaten Datenfelder mit den übergebenen Werten initialisiert. Eine public-Methode toString(), die einen String zurückliefert. Dieser String soll die Ausgabe der komplexe Zahl in folgender Form liefern: {re} + i * {im} Öffentliche Methoden add, subtract, multiply, divide , die die mathematischen Grundoperationen, wie in (1) bis (4) definiert, implementieren. Dabei soll eine neue Instanz der Klasse Complex als Ergebnis zurückgeliefert werden. Eine public-Methode abs mit einem Rückgabewert vom Typ double, die den Betrag der komplexen Zahl, wie in (5) definiert, berechnet. Eine public-Methode equals mit einem Parameter vom Typ Complex und Rückgabewert vom Typ boolean . Sie soll prüfen, ob die komplexe Zahl, die die Instanz darstellt mit der übergebenen komplexen Zahl komponentenweise übereinstimmt. Zwei public-Methoden getRe() und getIm() , die den Realteil bzw. Imaginärteil einer komplexen Zahl als double-Zahl zurückliefern. 25. Benutzen Sie diese komplexe Arithmetik zur Auswertung eines Polynoms p vom Grad n mit komplexen Koeffizienten n p(z) = p ·z i i = (...((pn ·z + pn1) ·z + pn2) ...) ·z + p0 i=0 Mit der rechten Seite dieser Formel lässt sich der Wert sehr einfach durch wiederholtes Multiplizieren und Addieren bestimmen (``Horner-Schema''). Speichern Sie Ihr Programm in einer eigenen Datei HornerComplex.java im gleichen Verzeichnis wie Complex.java und führen Sie folgende Schritte aus: Lesen Sie den Grad n des Polynoms ein. Erzeugen Sie ein Feld p mit n+1 Komponenten vom Typ Complex . Lesen Sie die Feldelemente pn bis p0 ein. Lesen Sie eine komplexe Zahl z ein. Berechnen Sie den Wert p(z) mit Hilfe des Horner-Schemas. Testen Sie das Beispiel p(z) = 1 ·z2 + (2+i) ·z 2i an der Stelle z = 1+i. Das Ergebnis ist 1+3i.