Programmieren in C++ 2. Übung 1. Aufgabe a) Schreibe ein kleines Demonstrationsprogramm, das folgende über „#define“ definierte Konstante ausgibt: #define #define #define #define #define #define CHARACTER STRING OCTAL HEXADECIMAL DECIMAL FLOATING_POINT '@' "Lerne C++" 0233 0x96 155 3.1459 // Zeichenkette // PI b) In C++ wird zur Definition von Konstanten häufig das Schlüsselwort „const“ benutzt. Schreibe das unter 1. vorliegende Programm so um, daß die Konstanten mit „const“ definiert sind. 2. Aufgabe Schreibe und implementiere Programme, die folgende Aufgaben lösen: a) Die Zahl 512 ist im standardmäßigen Default-Ausgabeformat, in oktaler, hexadezimaler und dezimaler Form so auszugeben: Default: Octal: Hex: Dezimal: 512 1000 200 512 1000 200 512 b) Erweitere das unter a) angegebene Programm so, daß die Ausgabe „Zahlensystempräfixe“ anzeigt. c) 2 soll mit der Gleitkommagenauigkeit 6, 12, 3 in folgender Form ausgegeben werden: Genauigkeit: 6 1.41421 Genauigkeit: 12 ..... Die Funtion sqrt() ist in math.h enthalten d) Das Formatzustandsfeld ios::floatfield steuert die Ausgabe von Gleitpunktzahlen. Der Programmierer kann dieses Feld zur Ausgabe von Gleitpunktzahlen in Festkommadarstellung (ios::fixed) bzw. in Gleitkommadarstellung (ios::scientific) benutzen. Schreibe und implementiere ein Programm, das folgende Ausgabe erzeugt: Genauigkeit: Default: Default: 8 10.0: 10 pow(18,10): 3.5704672e+12 Genauigkeit: Fixed: Fixed: 8 10.0: 10.00000000 pow(18,10): 357046726624.00000000 Genauigkeit: Scientific: Scientific: 8 10.0: 10.00000000 pow(18,10): 3.57046723e+12 Die Ausgabe ist offensichtlich aufgeteilt in - die standardmäßige Ausgabe (Default) - die Ausgabe in Festkommazahlen - die Ausgabe in Gleitpunktdarstellung 1 Programmieren in C++ Die Funktion pow() ist in math.h enthalten. e) C++ ermöglicht über den Manipulator „hex“ die Ein-,Ausgabe hexadezimaler Zahlen. Der Manipulator „dec“ führt die Ausgabe wieder auf dezimale Zahlen zurück, z.B. cin >> hex >> x >> dec >> y; // x wird als hexadezimale Zahl eingelesen // y wird als dezimale Zahl eingelesen cout << hex << 100 << x << y; // Ausgabe 64, ... cout << dec << 100 << x << y; // Ausgabe 100, .... Betrachte die folgende Deklaration und die darauf folgende Anweisungen int j, k; cin >> i; cin >> hex >> j >> dec; cin >> k; 1. Nimm an, die Eingabe ist „50, 50, 32“. Welche Ausgabe zeigt die folgende Anweisung: cout << hex << i << " " << j << " " << dec << k << endl; 2. Nimm an die Eingabe ist „32, 32, 64“. Welche Ausgabe zeigt die folgende Anweisung? cout << dec << i << " " << hex << j << " " << k << endl; 3. Aufgabe Gegeben ist das folgende Programm #include <iostream> using namespace std; int main() { float a = 1.234567E-7, b = 1.000000, c = -b, s1, s2; s1 = a + b; s1 += c; // entspricht s1 = s1 + c s2 = a; s2 += b + c; cout << s1 << '\n'; cout << s2 << '\n'; } a) Übersetze, binde und teste dieses Programm! b) Welchen Wert bekommt s1 zugeordnet? ______________________________________________________ c) Welchen Wert bekommt s2 zugeordnet? _______________________________________________________ d) Welches Ergebnis erwartet man für s1 und s2? _________________________________________________ e) Erkläre, warum sich s1 und s2 bzgl. des Werts unterscheiden? _____________________________________ 4. Aufgabe 2 Programmieren in C++ a) Erzeuge mit Hilfe eines Dateiaufbereiters (Editor) eine Datei (mit der Extension .CPP) zur Aufnahme des folgenden Programms: #include <iostream.h> int main() { /* Anzahl auszugebender Elemente */ const short anzahl = 10; /* Definition des Mehrwertsteuersatzes */ float mwst = 15.0; /* Felder fuer Nettopreise und Artikelbezeichnungen */ float preise[] = {18,59,589,379,18.75,39,7.5,28,1.5,2.85}; char* artikel[] = {"Fahradtraeger", "Komforttraeger", "Herren-City-Bike", "Damen-City-Bike", "Tachometer", "Gepaeckbox", "Wasch-Set", "Kuehlbox", "Kuehlakkus", "Kuehlkissen"}; /* Ausgabe Preislistenkopf */ cout << "PREISLISTE\nArtikel\t\tNetto\tBrutto" << endl; /* Ausgabe der Feldelemente innerhalb einer Zaehlschleife. Die 3. Spalte enthaelt die Ausgabe des Bruttopreises (einschl. Mehrwertsteuer) */ for (int i = 0; i < anzahl; i++) cout << artikel[i] << preise[i] << preise[i] * (1 + mwst/100) << endl; } Anschließend soll das Programm übersetzt und zum Ablauf gebracht werden. Die Standardausgabe zeigt zwar, was das Programm eigenlich erstellen sollte: „eine Preisliste“. Die Ausgabe besteht aber lediglich aus Ketten aneinandergefügter Zeichen und ist von beschränkter Lesbarkeit. Ändere das vorliegende Programm durch Einfügen von Steuerzeichen so um, daß eine formatgerechte Ausgabe der Preisliste mit 48 Zeichen Ausgabebreite je Ausgabezeile entsteht. Die Preisliste sollte dann das folgende Aussehen annehmen: PREISLISTE Artikel Fahrradtraeger............ etc. Netto +18.00+ Brutto 20.76 b) Ersetze in dem vorliegenden Programm C-Arrays bzw. Zeichenketten (char *) durch die C++-Standardtypen „vector“ und „string“. Anschließend führe Übersetzen, Linken und Testen des Programms durch! 5. Aufgabe a) Gegeben ist folgendes Programm #include <iostream> #include <math.h> using namespace std; int main() { float x; cin >> x; cout << "x = " << x << endl; cout << "fabs(x) = " << fabs(x) << endl; 3 Programmieren in C++ cout cout cout cout << << << << "sqrt(x) "sin(x) "exp(x) "log(x) = = = = " " " " << << << << sqrt(x) sin(x) exp(x) log(x) << << << << endl; endl; // x im Bogenmass endl; endl; } Das Programm enthält einige vordefinierte Funktionen in C++. Die sich im Header <math.h> befinden. Übersetze, binde, teste das Programm! Wie verhält sich das Programm bei Eingabe von 0 oder einer negativen Zahl? __________________________ _________________________________________________________________________________________ _________________________________________________________________________________________ b) Schreibe ein Programm, das auf der Standard-Ausgabeeinheit folgende Tabelle erzeugt: Grad 0 10 .. 90 sin(x) 0.000000 ........ ........ ........ cos(x) 1.000000 ........ ........ ........ 4