ueb02 - oth

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