Library Specification

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