Prof. Dr. Bernhard Humm: Praktikum PAD1 3. Einführung in C++ 1 Mathematische Funktionen Programmieren Sie die folgenden mathematischen Funktionen in C++ und testen Sie diese anhand der vorgegebenen Testfälle (download von https://www.fbi.h-da.de/fileadmin/personal/b.humm/PAD1_WS1415/Praktikum/03_testCases.cpp.txt ) 1.1 Summe ganzer Zahlen Programmieren Sie die Funktion int sum0ToN (int n), welche die Summe der Zahlen von 0..n berechnet und zurückgibt. Testen Sie mit den folgenden Testfällen: testEqual testEqual testEqual testEqual 1.2 (0, sum0ToN(0)); (3, sum0ToN(2)); (10, sum0ToN(4)); (7260, sum0ToN(120)); Fakultät Programmieren Sie die Funktion int fact(int n), welche die Fakultät von n berechnet und zurückgibt. testEqual(1, fact(1)); testEqual(120, fact(5)); testEqual(3628800, fact(10)); 1.3 Exponentialfunktion Programmieren Sie die Funktion int expt(int x, int n) welche xn berechnet und zurückgibt. testEqual(1, expt(7, 0)); testEqual(49, expt(7, 2)); testEqual(16807, expt(7, 5)); File: 03 Einführung in C++.docx Page: 1 Prof. Dr. Bernhard Humm: Praktikum PAD1 1.4 Fibonacci-Funktion Programmieren Sie die Fibonacci Funktion int fib(int n). testEqual(1, fib(0)); testEqual(2, fib(2)); testEqual(8, fib(5)); testEqual(987, fib(15)); 1.5 Größter gemeinsamer Teiler Programmieren Sie eine Funktion int gcd(int x, int y), welche den größten gemeinsamen Teiler (greatest common divisor) zweier ganzer Zahlen berechnet. Der größte gemeinsame Teiler ist die größte ganze Zahl, die durch beide Eingabezahlen teilbar ist. testEqual(2, gcd(4, 2)); testEqual(2, gcd(6, 8)); testEqual(1, gcd(6, 7)); Zur Erinnerung: der Algorithmus von Euklid. act Euklid'scher Algorithmus in: x, y rest <- x modulo y rest > 0 [false] out: y [true] x <- y y <- rest rest <- x modulo y File: 03 Einführung in C++.docx Page: 2 Prof. Dr. Bernhard Humm: Praktikum PAD1 Modulo ist die mathematische Funktion zur Division mit Rest – dabei wird der Rest zurückgegeben (C++ Operator %). Beispiele: 4 % 3 1 (da 4 / 3 = 1 Rest 1) 5 % 3 2 (da 5 / 3 = 1 Rest 2) 6 % 3 0 (da 6 / 3 = 2 Rest 0) 1.6 Lineare Gleichungssysteme Programmieren Sie Funktionen zur Lösung von linearen Gleichungssystemen mit zwei Unbekannten. Beispiel: 1x + 2y = 3 4x + 5y = 6 Darstellung als Geraden im Koordinatensystem: Gesucht ist der Schnittpunkt der beiden Geraden (-1, 2). Verwenden Sie dafür die Determinantenmethode (Cramer’sche Regel – siehe auch http://de.wikipedia.org/wiki/Cramersche_Regel bzw. File: 03 Einführung in C++.docx Page: 3 Prof. Dr. Bernhard Humm: Praktikum PAD1 http://en.wikipedia.org/wiki/Cramer%27s_rule ) Die Determinante einer 2x2 Matrix berechnet sich wie folgt. Das obige Gleichungssystem kann allgemein wie folgt aufgeschrieben werden: a1x + b1y = c1 a2x + b2y = c2 bzw. in Matrixschreibweise : Gemäß der Determinantenmethode (Cramer’sche Regel) berechnet sich die Lösung des Gleichungssystems als Quotient aus Zählerdeterminate und Nennerdeterminante wie folgt : Implementieren Sie die entsprechenden Methoden float xValue(float a1, float b1, float c1, float a2, float b2, float c2) und float yValue(float a1, float b1, float c1, float a2, float b2, float c2) Implementieren Sie vorab die Hilfsmethode float det(float x11, float x12, float x21, float x22) zur Berechnung einer Determinante und verwenden Sie diese entsprechend (Prinzip der Komposition). Testen Sie die Methoden wie folgt: testEqual(-1.0, xValue(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)); testEqual(2.0, yValue(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)); File: 03 Einführung in C++.docx Page: 4 Prof. Dr. Bernhard Humm: Praktikum PAD1 2 Strings 2.1 longWord Programmieren Sie die Funktion string longWord(int count, string txt), welche einen String zurückgibt, welcher den String text count mal hintereinander geschrieben darstellt. testEqual("ababababab", longWord(5, "ab")); testEqual("", longWord(0, "ab")); testEqual("abcabcabc", longWord(3, "abc")); testEqual("aaaaaaaaaa", longWord(10, "a")); Viel Spaß! File: 03 Einführung in C++.docx Page: 5