Übungsklausur - Hochschule Darmstadt

Transcription

Übungsklausur - Hochschule Darmstadt
Programmieren / Algorithmen und Datenstrukturen 1
Autor:
Datum:
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt
7. Oktober 2010
Nachklausur Programmieren /
Algorithmen und Datenstrukturen 1
1
Spielregeln zur Klausur
Allgemeines

Die Bearbeitungszeit beträgt 3 Zeitstunden.

Bitte halten Sie Ihren Studenten- und Personalausweis bereit

Erfüllen Sie die Aufgabenstellung genau: machen Sie nicht weniger, aber auch nicht
mehr!

Arbeiten Sie zügig in der Reihenfolge der Aufgaben

Implementieren Sie in kleinen Schritten und sorgen Sie dafür, dass Sie jederzeit eine
lauffähige Anwendung haben

Speichern Sie regelmäßig
Als Ergebnis der Klausur sind abzugeben

… alle zum System gehörigen Dateien durch Kopieren auf den Server (genauere
Informationen zu Beginn der Klausur).
Zugelassene Hilfsmittel

Ausgedruckte Vorlesungsunterlagen und Bücher

Persönliche Notizen auf Papier

C++ Referenz (auf Klausurrechner)

Vorlesungsfolien (auf Klausurrechner)
Seite 1
Klausur: Programmieren / Algorithmen und Datenstrukturen 1
Verboten ist

Die Benutzung eigener Datenträger (USB-Stick etc.); insbesondere dürfen keine
Programme oder sonstige Daten auf Datenträger mitgebracht werden.

Die Benutzung eines anderen Rechners (Smartphone, Notebook, ...) als des zur
Verfügung gestellten

Jegliche Kommunikation (mündlich, schriftlich, elektronisch, per Mobiltelefon, über
das Netz, wie auch immer...) mit anderen Personen, ausgenommen die
Aufsichtführenden

Login unter einem anderen Account als dem für die Klausur angegebenen

Zugriff auf andere Verzeichnisse eines Servers, als die ausdrücklich zugelassenen.
Beurteilungskriterien (in Reihenfolge der Wichtigkeit)
1.
Funktion des Systems: das Programm soll fehlerfrei kompilieren und alle Tests
erfolgreich durchlaufen
2. Qualität des Programmcodes: Übersichtlichkeit, gute Klassen-, Methoden- und
Variablennamen, Einhaltung der Namenskonventionen, sinnvolle Dokumentation etc.
2
Vorbereitung
1.
Melden Sie sich am Klausurrechner an
2. Legen Sie ein neues NetBeans Projekt benannt nach Ihrem Nachnamen an.
Tipp: File  New Project …  C/C++  C/C++ Application
3. Kopieren Sie die Datei UnitTesting.h in das NetBeans Projektverzeichnis und
fügen Sie die Datei zum Projekt hinzu.
Tipp: Source Files  Add Existing Item …
4. Stellen Sie den C++11 Standard ein.
Tipp: Project  Properties  Build  C++ Compiler  C++Standard  C++11
3
Übersicht Online Shop
In dieser Klausur werden Sie prototypisch einen Online Shop entwickeln. Das folgende UML
Diagramm gibt eine Übersicht über die gesamte zu erstellende Anwendung.
Seite 2
Klausur: Programmieren / Algorithmen und Datenstrukturen 1
OnlineShop
-products_: vector<shared_ptr<Product>>
-customers_: vector<shared_ptr<Customer>>
-orders_: vector<shared_ptr<Order>>
+addProduct(number: int, price: float): shared_ptr<Product>
+addCustomer(name: string): shared_ptr<Customer>
+buy(customer: Customer, product: Product): shared_ptr<Order>
+totalPrice(customer: shared_ptr<Customer>): float
+numberOfSales(product: shared_ptr<Product>): int
+bestSeller(): shared_ptr<Product>
+topCustomer(): shared_ptr<Customer>
+getAllProductsSortedByPrice(): vector<shared_ptr<Product>>
1
1
1
orders_
*
customers_
products_
Order
-customer_: shared_ptr<Customer>
-product_: shared_ptr<Product>
<<create>>-Order(customer: shared_ptr<Customer>, product: shared_ptr<Product>)
+getCustomer(): shared_ptr<Customer>
+getProduct(): shared_ptr<Product>
*
*
*
1
Customer
-name_: string
<<create>>-Customer(name: string)
+getName(): string
customer_
product_
1
*
Product
-number_: int
-price_: float
<<create>>-Product(number: int, price: float)
+getNumber(): int
+getPrice(): float
Entwickeln Sie die Anwendung Schritt für Schritt in der angegebenen Reihenfolge.
Seite 3
Klausur: Programmieren / Algorithmen und Datenstrukturen 1
4
Klasse Customer (10 Punkte)
1.
Erstellen Sie eine neue Klasse Customer (Kunde).
Tipp: File  New File…  C++  C++ Class
2. Erstellen Sie eine private Instanzvariable name_ vom Typ string.
Tipp:
#include <string>
using namespace std;
3. Entwickeln Sie die Funktion string getName() mit der üblichen Getter-Semantik
(Rückgabe des Werts der Variablen).
4. Entwickeln Sie einen Konstruktor Customer(string name), in dem die
Instanzvariable (= Membervariable oder Attribut) name_ initialisiert wird.
5. Stellen Sie sicher, dass Ihr Code fehler- und warnungsfrei kompiliert.
5
Klasse Product (10 Punkte)
1.
Erstellen Sie eine neue Klasse Product (Produkt).
Tipp: File  New File…  C++  C++ Class
2. Erstellen Sie die privaten Instanzvariablen number_ vom Typ int und price_ vom Typ
float.
3. Entwickeln Sie die Funktionen int getNumber() und float getPrice()mit der
üblichen Getter-Semantik.
4. Entwickeln Sie einen Konstruktor Product(int number, float price), in dem
die Instanzvariablen number_ und price_ initialisiert werden.
5. Stellen Sie sicher, dass Ihr Code fehler- und warnungsfrei kompiliert.
6
Klasse Order (10 Punkte)
1.
Erstellen Sie eine neue Klasse Order (Bestellung).
Tipp: File  New File…  C++  C++ Class
2. Erstellen Sie die privaten Instanzvariablen customer_ als Zeiger auf ein Customer
Objekt und product_ als Zeiger auf ein Product Objekt.
3. Entwickeln Sie die Funktionen sharedPtr<Product> getProduct()und
sharedPtr<Customer> getCustomer() mit der üblichen Getter-Semantik.
Seite 4
Klausur: Programmieren / Algorithmen und Datenstrukturen 1
4. Entwickeln Sie einen Konstruktor Order(sharedPtr<Customer> customer,
sharedPtr<Product> product), in dem die Instanzvariablen customer_ und
product_ initialisiert werden.
5. Stellen Sie sicher, dass Ihr Code fehler- und warnungsfrei kompiliert.
7
Klasse OnlineShop (70 Punkte)
1.
Erstellen Sie eine neue Klasse OnlineShop.
Tipp: File  New File…  C++  C++ Class
2. (2,5 Punkte) Erstellen Sie die privaten Instanzvariablen products_, customers_ und
orders_ als Vektoren von Zeigern auf Product, Customer, bzw. Order Objekte.
Tipp:
#include <vector>
#include <memory>
using namespace std;
3. (2,5 Punkte) Entwickeln Sie die Funktion
sharedPtr<Product> addProduct(int number, float price)
(Produkt hinzufügen). In ihr wird ein neues Product Objekt angelegt und number
und price gesetzt. Das Order Objekt wird dem Vektor orders_ hinzugefügt und
zurückgegeben.
Tipp: verwenden Sie vector::push_back
4.
(2,5 Punkte) Entwickeln Sie die Funktion
sharedPtr<Customer> addCustomer(string name)
(Kunde hinzufügen). In ihr wird ein neues Customer Objekt angelegt und name
gesetzt. Das Customer Objekt wird dem Vektor customers_ hinzugefügt und
zurückgegeben.
Tipp: verwenden Sie vector::push_back
5.
(2,5 Punkte) Entwickeln Sie die Funktion
sharedPtr<Order> buy(sharedPtr<Customer> customer,
sharedPtr<Product> product)
(kaufen). In ihr wird ein neues Order Objekt angelegt, welches auf die als Parameter
übergebenen Customer und Product Objekte verweist. Das Order Objekt wird dem
Vektor orders_ hinzugefügt und zurückgegeben.
Tipp: verwenden Sie vector::push_back
6. (10 Punkte) Entwickeln Sie die Funktion
float totalPrice(sharedPtr<Customer> customer)
(Gesamtpreis). Sie liefert die Summe der Preise aller Produkte, die customer gekauft
hat.
Seite 5
Klausur: Programmieren / Algorithmen und Datenstrukturen 1
7.
(10 Punkte) Entwickeln Sie die Funktion
int numberOfSales(sharedPtr<Product> product)
(Anzahl Verkäufe). Sie liefert die Anzahl, wie oft product bisher verkauft wurde.
8. (10 Punkte) Entwickeln Sie die Funktion
sharedPtr<Product> bestSeller()
Sie liefert einen Zeiger auf das Produkt, welches am häufigsten verkauft wurde.
Wurden mehrere Produkte gleich häufig verkauft, wird irgend eines davon
zurückgeliefert.
Tipp: verwenden Sie numberOfSales
9. (10 Punkte) Entwickeln Sie die Funktion
sharedPtr<Customer> topCustomer()
(bester Kunde). Sie liefert einen Zeiger auf den Kunden, der bisher den größten
Umsatz gemacht hat. Haben mehrere Kunden denselben Umsatz gemacht, wird irgend
einer davon zurückgeliefert.
10. (15 Punkte) Entwickeln Sie die Funktion
vector<shared_ptr<Product>> getAllProductsSortedByPrice()
(Produkte nach Preisen sortiert). Sie sortiert alle Produkte im Vektor products_
aufsteigend nach Preisen und gibt den sortierten Vektor als Ergebnis zurück.
11. Ermitteln Sie die Komplexitätsklasse der Funktion
getAllProductsSortedByPrice (O-Notation) und dokumentieren Sie diese im
Kommentar (Außensichtdokumentation – siehe letzte Aufgabe).
12. Stellen Sie sicher, dass Ihr Code fehler- und warnungsfrei kompiliert.
8
Tests (15 Punkte)
1.
Erstellen Sie im Hauptprogramm die folgenden Testobjekte und speichern Sie diese in
entsprechenden Variablen:
a. Ein OnlineShop Objekt
b. Product Objekte via addProduct: number 1 / price 2.50 und
number 2, price 1.50
c. Customer Objekte via addCustomer mit Namen "Huber" und "Müller"
2. Führen Sie die folgenden Bestellungen mittels buy durch und speichern Sie die
Order Objekte in entsprechenden Variablen:
a. "Huber" kauft Produkt 1
b. "Huber" kauft Produkt 1
c. "Huber" kauft Produkt 2
Seite 6
Klausur: Programmieren / Algorithmen und Datenstrukturen 1
Entwickeln Sie die nachfolgenden Tests unter Verwendung von testEqual:
3. Kunde Huber hat für 6.50 Euro gekauft
Tipp: testen Sie auf 6.50f (das f steht für float Wert und muss angegeben
werden)
4. Kunde Müller hat für 0 Euro gekauft
5. Produkt 1 wurde 2 mal verkauft (numberOfSales)
6. Produkt 2 wurde 1 mal verkauft
7. Produkt 1 ist am häufigsten verkauft worden (bestSeller)
8. Kunde Huber ist der beste Kunde (topCustomer)
9. Das erste Produkt nach Preisen sortiert (getAllProductsSortedByPrice) hat
den Wert number_ gleich 2, das zweite Produkt den Wert number_ gleich 1.
10. Stellen Sie sicher, dass Ihr Code fehler- und warnungsfrei kompiliert.
11. Führen Sie alle Tests aus. Alle Tests sollten „OK“ liefern.
9
Dokumentation (10 Punkte)
Dokumentieren Sie die Außensicht Ihrer Anwendung, also alle öffentlichen Operationen in den
*.h-Dateien gemäß den Vorgaben aus der Vorlesung. Verwenden Sie entweder Deutsch oder
Englisch.
Tipp:
fügen Sie jeweils über der Signatur /** ein und drücken Sie <Enter>.
NetBeans komplettiert den Kommentar mit passenden Parametern.
Viel Erfolg!
Seite 7

Documents pareils