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