2. Übung des Programmierpraktikums Abgabetermin: 14. März 2016, 23:59 Uhr Die Übungen sind grundsätzlich allein zu lösen. Gruppenarbeit ist nicht erlaubt. Abzugeben sind jeweils die sinnvoll dokumentierten Programmfiles (*.cpp, *.h) in einem separaten Ordner dessen Name bsp nummer zu sein hat, d.h., der Ordner bsp 2 gehört zu Aufgabe 2. 4. Schreiben Sie ein Programm, welches 3 natürliche Zahlen größer Null einliest und davon die Summe, das arithmetische, geometrische und harmonische Mittel berechnet, sowie in Variablen speichert. Die Eingabedaten und Ergebnisse sollen (informativ) ausgege- (2 Pkt.) benen werden. Wählen sie die Datentypen der zu definierenden Variablen nach dem Wertebereich der Ergebnisse aus. Lesen Sie dazu §2.1 des Skriptes1 . • Sichern Sie die Eingabe der Zahlen so ab, daß nur Zahlen größer Null akzeptiert werden, d.h., die Eingabe wird solange wiederholt bis dies der Fall ist. • Überprüfen Sie im Code, ob nach der Berechnung der 3 Mittelwerte auch tatsächlich meanarithm. ≥ meangeom. ≥ meanharm. gilt und geben Sie andernfalls eine Fehlermeldung aus. Eingabedaten (data 1, data 2, data 3): (16, 4, 1), (3, 5, 8) 5. Überprüfen Sie, ob die folgenden Rechenregeln der Mathematik auch im Computer gelten, indem Sie rechte und linke Seite nachstehender Gleichungen und die Differenz beider Seiten ausgeben. Die verfügbaren math. Funktionen sind unter cmath 2 zu finden und werden über #include <cmath> in Ihren Quelltext eingebunden. Lesen Sie dazu §3.6 des Skriptes3 und im www4 . (ea )b = ea·b ln b log10 b = ln 10 a π/2 − arccos a = arctan √ 1 − a2 sinh a − cosh a = −e−a Testen Sie diese Rechenregeln für einfach genaue Zahlen (float). Geben Sie jeweils die (1 Pkt.) Anzahl von Byte zur Speicherung einer Zahl unter Nutzung von sizeof5 an und geben Sie die relative Genauigkeit für Ihren Datentyp analog zum Beispiel Ex390.cpp6 an. Die Zahl π wird von den meisten Compilern in obigem Headerfile als M PI bereitgestellt. Testdaten (a,b): (0.9876, 1.762e − 4), (0.00187, 98), 1 http://www.uni-graz.at/~haasegu/Lectures/Kurs-C/Script/html/script_programmieren.pdf http://www.cplusplus.com/reference/clibrary/cmath 3 http://www.uni-graz.at/~haasegu/Lectures/Kurs-C/Script/html/script_programmieren.pdf 4 http://www.cplusplus.com/reference/cmath/?kw=cmath 5 http://www.uni-graz.at/~haasegu/Lectures/Kurs-C/Examples/DataTypes.cpp 6 http://www.uni-graz.at/~haasegu/Lectures/Kurs-C/Examples/Ex390.cpp 2 6. Berechnen Sie die folgenden Ausdrücke für gegebene komplexe Zahlen a, und b. Die verfügbaren math. Funktionen sind unter complex 7 zu finden und werden über #include <complex> wie in §2.3.2 des Skriptes8 in Ihren Quelltext eingebunden. (1 Pkt.) Benutzen Sie die doppelt genauen komplexen Zahlen (complex<double> b(-3.5,2)). Geben Sie für die geg. Zahlen den Winkel ϕb (arg()) und den Betrag rb (abs()) in der Gaußschen Zahlenebene aus. eπ·a = a3 = √ b = b+b = e iϕb − (cos ϕb + i · sin ϕb ) = 3·a−b = Testdaten (a,b): (0 + i, −3.5 + 2 · i), (0 + 2 3 · i, −3 − 4 · i), 7. Fünf Personen haben versucht, die Summe der Zahlen 1 bis 100 zu berechnen [Bre119 , p.78]. Beurteilen Sie die folgenden Lösungsvorschläge (ohne diese zu programmieren!) bzgl. Korrektheit und weiterer möglicher Fallen. Begründen Sie Ihre Einschätzung! (1 Pkt.) (a) int n = 1, sum = 0; while(n <= 100) { ++n; sum += n; } (b) int n = 1, sum = 1; while(n < 100) { n += 1; sum += n; } (c) (d) int n = 1; while(n < 100) { int sum = 0; n = n + 1; sum = sum + n; } (e) int n = 1, sum = 0; while(n <= 0100) { sum += n; ++n; } int n = 100; int sum = n*(n+1)/2; Geben Sie ein File main.cpp (im Ordner bsp 7) ab, in welches Sie Ihre Einschätzungen per Kommentar hineinschreiben. 7 http://www.cplusplus.com/reference/std/complex/ http://www.uni-graz.at/~haasegu/Lectures/Kurs-C/Script/html/script_programmieren.pdf 9 http://www.cppbuch.de/ 8 8. Berechnen Sie die Summe aller natürlichen Zahlen von n1 bis n2 (n2 >= n1) [Bre1110 , p.78] für selbstgewählte n1 und n2 über die folgenden 4 Konstrukte: (2 Pkt.) a) einer for-Schleife, b) einer while-Schleife, c) einer do while-Schleife, d) ohne Schleife. Lesen Sie dazu §4.4-4.6 des Skriptes11 . Hinweise: Schauen Sie sich die folgendenC++-Funktionen/Funktionalitäten an und nutzen Sie diese gegebenenfalls: pow, cin, cout, log, log10, acos, atan, exp, sqrt, arg, abs, conj, if, else, for, while, do while Die Abgabe der Lösungen (*.cpp-Files, *.h, (Makefile*,) . . .,) erfolgt an der KFU über Moodle, siehe dazu die Hinweise auf der LV-Homepage12 . Die Verzeichnisnamen mit den Files für die jeweilige Aufgabe müssen dem Schema bsp nummer folgen, z.B. enthält das Verzeichnis (der Ordner) bsp 1 alle Files für Beispiel 1. Andere Verzeichnisnamen zählen als nicht abgegeben. Keine Lehrzeichen, Sonderzeichen oder Umlaute in File- und Verzeichnisnamen benutzen (Portabilität). G. Haase 10 29. Februar 2016, 12:36 http://www.cppbuch.de/ http://www.uni-graz.at/~haasegu/Lectures/Kurs-C/Script/html/script_programmieren.pdf 12 http://www.uni-graz.at/~haasegu/Lectures/Kurs-C/Download/kfu.html 11