代写 C++ math Jurij Kuzmic

Jurij Kuzmic
Übung zur Vorlesung EidP (WS 2019/20) Blatt 10
Block grün
Es können 4 Punkte erreicht werden. Abgabedatum: 16. Januar 2020, 23:59 Uhr
Hinweise
• Bitte beachten Sie die aktuellen Hinweise unter https://ls11-www.cs.tu-dortmund.de/teaching/ep1920uebung/
• Für die Abgabe sind die jeweils genannten Dateien zu erstellen.
• Stellen Sie sicher, dass alle von Ihnen abgegebene Dateien reine Textdateien im UTF-8-
Format sind.
• Für die Kompilierung des Programms muss der C++14-Standard aktiviert sein. Dies kann im Referenzkompiler GCC 6.3 durch den Schalter -std=c++14 sichergestellt werden. Es sollen zudem die Parameter -pedantic und -Werror genutzt werden. Der Befehl zum Kompilieren soll somit wie folgt aussehen:
g++-6 -pedantic -Werror -std=c++14 Aufgabe.cpp -o Aufgabe
• Die Verwendung von zusätzlichen Bibliotheken zur Lösung der Aufgaben ist nicht er- laubt!
• Für die Programmieraufgaben kopieren Sie immer die Ergebnisse als Block-Kommentar an das Ende der Datei, welche das jeweilige Hauptprogramm enthält.
Aufgaben
Aufgabe 1: Grundlagen (1 Punkt)
Legen Sie für Ihre Antworten eine Text-Datei Aufgabe_10_1.txt an.
a) Was versteht man unter Polymorphie? (0.2 Punkte)
b) Was gilt in Bezug auf Attribute und Methoden, wenn A eine Oberklasse von B ist?
(0.2 Punkte)
Dortmund, den 09. Januar 2020
1

c) Wie werden virtuelle Methoden gekennzeichnet und wann werden sie gebunden?
(0.2 Punkte)
d) Wie werden rein virtuelle Methoden deklariert? e) Wann nennt man eine Klasse abstrakt?
f) Wozu werden abstrakte Klassen eingesetzt?
Aufgabe 2: Vererbung (3 Punkte)
(0.1 Punkte) (0.1 Punkte) (0.2 Punkte)
Legen Sie für diese Aufgabe die Dateien Aufgabe_10_2.h, Aufgabe_10_2.cpp und Aufgabe_10_2_test.cpp an.
a) Erstellen Sie ein Programm für die Speicherung von Fahrzeugdaten. Für die unterschiedlichen Fahrzeugarten (PKWs, Motorräder und LKWs) sind jeweils unterschiedliche Daten zu erfassen:
1. Für alle Fahrzeugtypen: Kennzeichen, Erstzulassung [Jahr], Hubraum [ccm] 2. PKWs, zusätzlich: Leistung [kW], Schadstoffklasse [Euro 1-6]
3. Motorräder, zusätzlich: Beiwagen [Ja/Nein]
4. LKWs, zusätzlich: Achsen [Anzahl], Zuladung [t]
Erstellen Sie geeignete C++-Klassen, um die oben aufgelisteten Daten ohne Redundanz ab- zuspeichern. Wählen Sie sinnvolle Datentypen für die jeweiligen Attribute. (1 Punkt)
b) Erweitern Sie Ihr Programm um die Delegation an die Basisklassenkonstruktoren und die Initialisierungsliste wo immer dies möglich ist. Schreiben Sie zusätzlich eine Methode void print() zur Ausgabe der gespeicherten Daten für die jeweiligen Klassen. Jede void print() Methode muss in der jeweiligen Klasse überschrieben werden. Diese gibt dann nur die in der Klasse gespeicherten Attribute aus. (1 Punkt)
c) Schreiben Sie ein Hauptprogramm Aufgabe_10_2_test.cpp und legen Sie pro Fahrzeug jeweils zwei Testobjekte an. Folgendes Beispiel muss nach Ihrer Implementierung möglich sein:
1 PKW vw(“MK – JK 1111″, 2006, 1980, 130, 2);
2 Fahrzeug *seat = new PKW(” K – KJ 1284″, 2014, 1990, 150, 5); 3 vw.print();
4 seat->print();
Beachten Sie dabei, dass von der Basisklasse keine Objekte erzeugt werden sollen. Geben Sie anschließend die gespeicherten Daten mit der print() Methode aus. (1 Punkt)
Hinweis: Unterteilen Sie die Deklaration und die Definition der jeweiligen Klassen in die Da- teien Aufgabe_10_2.h und Aufgabe_10_2.cpp. Handeln Sie ebenfalls nach dem „information hiding“ Prinzip.
2

1 2 3 4 5 6 7 8 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Präsenzaufgabe 3: Ausnahmebehandlung (0 Punkte)
In dem unten angegebenen Programm wird in der Funktion Formel die Summe zweier Zahlen x und y durch ihre Quadratwurzel geteilt. Folglich darf die Summe weder Null noch negativ sein, da dann aus unterschiedlichen Gründen Fehler auftreten können. Falls ein Fehler auftritt, dann enthält die Variable fehler einen positiven Fehlercode, der nach jedem Aufruf abgeprüft werden muss.
/*** Aufgabe_10_3.cpp ***/
#include #include using namespace std;
double Formel(double x, double y, int &fehler) { double sum = x + y;
if (sum < 0) { fehler = 1; elseif(sum==0){ } } } return 0; } fehler else { fehler return =2; =0; sum / sqrt(sum); int main() { int fehler; double x[3] = { -2, -4, 0 }; double y[5] = { 1, 2, 0, 3, 1 }; for (unsigned int i = 0; i < 3; ++i) { for (unsigned int j = 0; j < 5; ++j){ double z = Formel(x[i], y[j], fehler); switch (fehler) { case 1: cerr << "negative Summe" << endl; break; case 2: cerr << "Division durch Null" << endl; break; default: cout << z << endl; } } } return 0; } /*** Ende Aufgabe_10_3.cpp ***/ Schreiben Sie die Funktion und das Hauptprogramm um, indem Sie den Mechanismus der Ausnahmebehandlung aus C++ mit try, throw und catch verwenden. Die Ausgabe des Pro- gramms soll sich nicht ändern. Verwenden Sie für jede Fehlerart eine eigene Fehlerklasse und einen eigenen catch-Handler. 3