Aufgabenblatt 3

Werbung
Fachbereich Architektur und Bauingenieurwesen
Studiengang Bachelor Angewandte Mathematik
Programmieren
Übungsblatt 3
5 Punkte
Jan Gampe ([email protected])
30. November 2015
Dieses Aufgabenblatt ist bis zum 14.12.2015 zu erledigen. Am 07.12.2015 können in
den jeweiligen Praktika Fragen gestellt werden. Bereiten Sie sich darauf vor, Fragen
zu Ihrem Programm zu beantworten. Die Bewertung Ihrer Abgabe ergibt sich aus den
folgenden Kriterieren:
• Funktioniert das Programm korrekt?
• Wird das Programm ohne Warnungen/Fehlermeldungen des Compilers erzeugt?
• Können ggf. Rückfragen beantwortet werden?
Prolog zu den Folgeaufgaben
Komplexe Zahlen C sind eine Erweiterung des reelen Zahlenraums, mit denen Lösungen
für Gleichungen der Form x2 +1 = 0 möglich werden. Dafür wird die Definition i2 = −1
eingeführt. i wird auch die imaginäre Einheit genannt.
Die sogenannte kartesiche Form einer komplexen Zahl z sieht wie folgt aus:
z =x+y∗i
wobei x, y ∈ R. x heißt auch Realteil und y Imaginärteil einer komplexen Zahl.
Wie definieren in C eine komplexe Zahl:
1
1
2
3
4
typedef struct complex {
double real ;
double imag ;
} complex ;
Schreiben Sie für die folgenden Aufgaben ihre Lösung in ein Dateienpaar namens
complex.c und complex.h. Orientieren Sie sich an die in der Vorlesung besprochenen
Realisierung von Brüchen.
Aufgabe 1 (1 Punkt)
Schreiben Sie sich eine Hilfsfunktion, um komplexe Zahlen in kartesischer Form auf
der Konsole auszugeben:
Schreiben Sie in Ihrer complex.c dafür eine Funktion mit folgender Funktionsdeklaration:
1
void print_complex ( complex arg ) ;
Aufgabe 2 (2 Punkte)
Zwei komplexe Zahlen werden miteinander addiert, indem die Realteile und der Imaginärteile separat addiert werden:
z1 = x1 + y1 ∗ i
z2 = x2 + y2 ∗ i
z3 = z1 + z2 = (x1 + x2 ) + (y1 + y2 ) ∗ i
Analog zur Addition werden komplexe Zahlen subtrahiert und multipliziert:
z3 = z1 − z2 = (x1 − x2 ) + (y1 − y2 ) ∗ i
z3 = z1 ∗ z2 = (x1 ∗ x2 ) + (y1 ∗ y2 ) ∗ i
Die Division ist wie folgt definiert:
(x1 + y1 ∗ i) ∗ (x2 − y2 ∗ i)
(x2 + y2 ∗ i) ∗ (x2 − y2 ∗ i)
x1 ∗ x2 + y1 ∗ y2
y1 ∗ x2 + x1 ∗ y2
=
+
∗i
x2 2 + y2 2
x2 2 + y2 2
z3 = z1 /z2 =
Schreiben Sie in Ihrer complex.c Funktionen zum Addieren, Subtrahieren, Multiplizieren und Dividieren komplexer Zahlen:
2
1
2
3
4
complex
complex
complex
complex
complex_add ( complex sum1 , complex sum2 ) ;
complex_sub ( complex sub1 , complex sub2 ) ;
complex_mult ( complex prod1 , complex prod2 ) ;
complex_div ( complex div1 , complex div2 ) ;
Fügen Sie diese Funktionsdeklarationen in Ihre Datei complex.h ein.
Testen Sie ihre Funktion mit unterschiedlichen Eingaben.
Aufgabe 3 (1 Punkt)
Der Betrag einer komplexen Zahl z ist definiert als
p
|z| = x2 + y 2
Schreiben Sie in Ihrer complex.c eine Funktion zur Berechnung des Betrags von
komplexen Zahlen:
1
double complex_abs ( complex arg ) ;
Fügen Sie diese Funktionsdeklaration in Ihre Datei complex.h ein.
Testen Sie ihre Funktion mit unterschiedlichen Eingaben.
Aufgabe 4 (1 Punkt)
Die folgende Rekursionsgleichung erlaubt es, im zukünfitgen Aufgabenblättern Fraktale zu erzeugen:
zn+1 = zn + c
Wobei z und c komplexe Zahlen sind und z0 = 0 + 0 ∗ i.
Schreiben Sie eine Funktion
1
int schwelle ( complex arg , double schwellwert ) ;
die das kleinste n berechnet, für das gilt |zn | > schwellwert.
3
Herunterladen