Angewandte Informatik Praktikum I Prof. Dr. Nikolaus Wulff Zum 13. & 20. Oktober 2006 1 Komplexe Zahlen Entwickeln Sie einen ADT Complex, der es gestattet elementare Berechnungen auf dem Körper C der komplexen Zahlen auszuführen. Wir interpretieren C als die Menge aller Paare reeller Zahlen (x, y) ∈ R × R versehen mit der Addition ⊕ und der Multiplikation : (x1 , y1 ) ⊕ (x2 , y2 ) := (x1 + x2 , y1 + y2 ) (x1 , y1 ) (x2 , y2 ) := (x1 x2 − y1 y2 , x1 y2 + y1 x2 ) (1) Vollkommen analog werden Subtraktion und Division definiert. Da Verwechselungen nicht zu befürchten sind, werden statt der speziellen Symbole ⊕,, und die vom Körper R bekannten Verknüpfungen +, −, ∗ und / verwendet. Zusätzlich zu den Formlen (1) werden noch der Real- und Imaginärteil und Betrag |z| sowie die Phase ϕ(z) einer komplexen Zahl z ≡ x+iy mit (x, y) ∈ R Re(z) := x Im(z) := y p |z| := x2 + y 2 ϕ(z) := tan(y/x) x 6= 0 (2) nach den Definitionsgleichungen (2) benötigt. Die konjugiert komplexe Zahl z ist definiert als z ≡ x + iy := x − iy (3) Somit lässt sich die Division einfach auf die Multiplikation zurückführen. Für u, v ∈ C und v 6= 0 gilt dann: u/v := u uv uv ≡ = 2 v vv |v| (4) Sehen sie für diese Operationen entsprechende Methoden cadd, csub, cmult, cdiv, creal,cimag, cabs, und cconj vor. Für die Abbildung ϕ(z) 1 sind die Methoden cdeg und crad von Nutzen, die den Winkel in Grad oder Radian zurückgeben. Benötigt wird ferner die Methode cinvers, die für ein z ∈ C/{0} die Inverse z −1 berechnet. 1.1 Aufgabe 1. Trennen Sie Definition und Implementierung, indem Sie eine getrennte Header-Datei complex.h und eine Implementierungsdatei complex.c erstellen. 2. Erstellen Sie den ADT Complex mit einem entsprechenden typedef. 3. Überprüfen Sie Ihre Implementierung, indem Sie einen Testtreiber in einer Datei complex-test.c implementieren, der die nachfolgenden Testaufgaben berechnet. 1.2 Testaufgaben Es seien z1 = 2 + i, z2 = 3 − 2i und z3 = − 12 + √ 1. |3z1 − 4z2 |, Ergebnis 157 = 12.5299. √ 3 2 i. Zu berechnen sind 2. z13 − 3z12 + 4z1 − 8, Ergebnis −7 + 3i. 3. (z 3 )4 , Ergebnis − 21 − √ 3 2 i = z3 2 +z1 −5−i 2 4. | 2z 2z1 −z2 +3−i | , Ergebnis 1. 1.3 Parabelschnittpunkte Verwenden Sie den ADT Complex, um die beiden Schnittpunkte einer Parabel p mit einer Geraden g zu berechen. Die Parabel sei zu p := {(x, y) | y = x2 + 1} (5) gegeben. Als Geraden verwenden Sie die Parametriesierungen gn := {(x, y) | y = x + n, mit n = 0, 1, 2}. (6) Bekanntlich lässt sich im Komplexen immer eine Lösung finden. Tip Für einige Methoden benötigen Sie trigonometrische oder tranzendente Funktionen. Diese werden in der Headerdatei <math.h> deklariert. Damit diese auch vom Linker gefunden werden muß unter den Eclipse Projekteigenschaften im Menu GCC C/C++ Build unter dem Reiter Tools Setting bei den Libraries dem Linker die Mathematik Bibliothek libm.a durch hinzunahme des Flags ’m’ bekannt gegeben werden. Denken Sie daran ihre Quelltexte im zentralen CVS Repository zu versionieren. 2