Angewandte Informatik Praktikum I

Werbung
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
Herunterladen