2. Übung des Programmierpraktikums Abgabetermin: 27. März 2017, 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. Diese 3 Zahlen stellen die Seitenlängen eines Quaders dar. • 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. Desweiteren sollen Sie eine Funktion schreiben welche obige 3 Größen als Inputparameter erhält und die folgende Werte als Outputparameter an das aufrufende Programm zurückgibt: Volumen, Oberfläche, gesamte Kantenlänge, Durchmesser (Raumdiagonale) des Quaders. Die Eingabedaten und Ergebnisse sollen im Hauptprogramm (informativ) ausgegebenen werden. Wählen Sie die Datentypen der zu definierenden Variablen nach dem Wertebereich (2 Pkt.) der Ergebnisse aus. Lesen Sie dazu §2.1 des Skriptes1 . Eingabedaten: (data 1, data 2, data 3): (4, 3, 12), (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 · e2 = ea·b+2 ln b log10 b = ln 10 √ π/2 − arcsin a = arctan 1 − a2 a cosh a − sinh 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. Hinweise: exp, log, sqrt, pow, M PI, sizeof, numeric limits Testdaten (a,b): (0.9876, 1.762e − 4), (0.00187, 98), 1 http://imsc.uni-graz.at/haasegu/Lectures/Kurs-C/Script/html/script_programmieren.pdf http://www.cplusplus.com/reference/clibrary/cmath 3 http://imsc.uni-graz.at/haasegu/Lectures/Kurs-C/Script/html/script_programmieren.pdf 4 http://www.cplusplus.com/reference/cmath/?kw=cmath 5 http://imsc.uni-graz.at/haasegu/Lectures/Kurs-C/Beispiele/DataTypes.cpp 6 http://imsc.uni-graz.at/haasegu/Lectures/Kurs-C/Beispiele/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 = iϕb e − (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://imsc.uni-graz.at/haasegu/Lectures/Kurs-C/Script/html/script_programmieren.pdf 9 http://www.cppbuch.de/ 8 8. Berechnen Sie die Summe aller Quadrate natürlichen Zahlen von n1 bis n2 (n2 >= n1) n2 P k 2 über die folgenden 4 Konstrukte: (2 Pkt.) [Bre1110 , p.78] für selbstgewählte n1 und n2, also k=n1 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 folgenden C++-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 6. März 2017, 08:53 http://www.cppbuch.de/ http://imsc.uni-graz.at/haasegu/Lectures/Kurs-C/Script/html/script_programmieren.pdf 12 http://imsc.uni-graz.at/haasegu/Lectures/Kurs-C/Download/kfu.html 11