UBUNGEN zu Programmiersprache 1 (C++)

Werbung
Ü B U N G E N
zu Programmiersprache 1 (C++)
WS 2016/2017
Übungsblatt 9: In der Übungsstunde!
56) Programmieren Sie in der Datei Vector2D-1.cpp eine Klasse Vector2 von 2D Vektoren, sodass das Programm fehlerfrei compiliert werden kann und richtig funktioniert.
57)
a) Erzeugen Sie mittels exponentialverteilter Zufallszahlen mit Erwartungswert 6
(Minuten) einen Fahrplan für eine fiktive Linie O, bei der die Busse ab 6 Uhr
Früh bis 22 Uhr Abends zufällig alle 6 Minuten abfahren. Rechnen Sie in Minuten
und geben Sie auch die Zeitpunkte als Minuten aus.
b) Wiederholen Sie den Tag 10000 Mal. Geben Sie nur die ersten 3 Fahrpläne aus.
c) Machen Sie eine Statistik über alle Abfahrtsintervalle (mit SimpleStat ).
d) Machen Sie eine Statistik über mein Busintervall. Ich komme jeden Tag um 13
Uhr 13 an. Markieren Sie im Fahrplan meinen Bus.
e) Sehen Sie nach, mit welchem Bus ich am 1. Tag fahre. Machen Sie eine Statistik
über die Abfahrtsintervalle des Busses mit dieser Busnummer.
f) Erstellen Sie weitere Statistiken über meine Wartezeit, die Nr. meines Busses, die
Anzahl der Busse pro Tag.
Übungsblatt 9: Die Aufgaben 58 bis 60 sind Pflicht!
58)
a) Sie sollen einen Multiple-Choice-Test entwerfen, bei dem in 12 Fragen jeweils
Antwortmöglichkeiten a) bis d) anzukreuzen sind, die entweder wahr oder falsch
sind. Sie vergeben pro Frage einen Punkt, wenn darin alle Teilfragen a) bis d)
richtig ausgewählt sind. Auf wieviel Punkte kommt im Schnitt ein Student, wenn
er jeden Unterpunkt mit Wahrscheinlichkeit p = 0.40 , 0.50, 0.60, 0.70, 0.75, 0.80,
0.85, 0.90, 0.95, 1.0 beantworten kann? Machen Sie für jeden dieser Werte von p
1000 Wiederholungen und werten Sie die dabei erzielten Gesamtpunkte statistisch
aus:
Starten Sie bei jedem Studenten mit 0 Punkten und addieren Sie die Ergebnisse
der einzelnen Fragen auf. Jeder Unterpunkt entspricht einer Bernoulli-Stichprobe( p ) (1 richtig, 0 falsch), sodass die Frage selbst als Binomial-Stichprobe(4, p )
mit Werten {0, 1, 2, 3, 4} entsprechend 0, 1, 2, 3 oder 4 richtigen Unterpunkten
modelliert werden kann. Nur mit 4 richtigen Unterantworten erhält man den
Punkt für die Frage. Für die Statistik verwenden Sie am besten SimpleStat .
b) Variieren Sie den Test, indem Sie pro völlig richtig beantworteter Frage 3 Punkte
und für eine Frage mit genau einer falschen Unterantwort 1 Punkt vergeben.
Ü B U N G E N
zu Programmiersprache 1 (C++)
WS 2016/2017
59) Bauen Sie die Klasse Vector2 noch weiter aus, sodass am Ende auch das Programm
in Vector2D-2.cpp fehlerfrei funktioniert:
a) Erweitern Sie die Klasse durch Klassenmethoden
Vector2 operator-() const : negatives Vorzeichen
Vector2 operator-(const Vector2& b) const : Vektorsubtraktion
double operator*(const Vector2& b) const : Skalarprodukt
b) Schreiben Sie hinter der Klasse noch folgende Funktionen:
double norm(const Vector2& a) : Euklidische Norm
double angle(const Vector2& a, const Vector2& b) : Winkel
double crossproduct(const Vector2& a, const Vector2& b) : Kreuzprod.
Die letzte Funktion müssen Sie auch als Freund in der Klasse deklarieren.
60)
a) Kopieren Sie die Datei Int.cpp von der Homepage. Sie verwendet einen Objekttyp Int , den Sie programmieren sollen. Definieren Sie vor dem Programm die
Klasse Int , die als privates Attribut den int x besitzt. Ferner schreiben Sie für
die Klasse:
— Einen Default-Konstruktur, der x auf -1 setzt und
Ctor Int(): x = ... ausgibt,
— Einen Konstruktur Int(a) , der x auf a setzt und
Ctor Int(int): x = ... ausgibt,
Einen Destruktor, der
Dtor ~Int(): x = ... ausgibt,
b) — Einen Copy Constructor Int(const Int& a) , der x auf a.x+100 setzt und
Copy-Ctor Int(const Int&): x = ... ausgibt.
c) Einen Zuweisungsoperator Int& operator=(const Int& a ), der x auf a.x-1000
setzt,
=(const Int&): x = ... ausgibt, und *this als Resultat zurückgibt.
Seite 2
Ü B U N G E N
zu Programmiersprache 1 (C++)
WS 2016/2017
61) WC-Stochastik: Es geht darum, den Klopapierverbrauch der Technik zu simulieren:
Es gebe 20 Toiletten und jede Klopapierrolle wird im Schnitt in einem halben Tag
verbraucht. Da Nachbestellungen innerhalb einer Woche ausgeliefert werden, möchte
man den maximalen Verbrauch pro Woche wissen, um die Nachbestellungsmenge zu
optimieren. Simulieren Sie 1000 einzelne Jahre, als Zeiteinheit nehmen wir Wochen.
Das Jahr hat dann 52 Wochen, also definieren wir ein Zählarray mit dieser Dimension.
Die Lebenszeit einer Klorolle ist 0.1 Wochen (bei einer 5-Tage Woche). In einer Schleife
über die Anzahl der WCs ermitteln Sie die Zeitpunkte t , wann eine neue Rolle
eingespannt wird. Den entsprechenden Wochenzähler inkrementieren Sie dann (dazu
bitte t in einen int umwandeln). Nachdem alle WCs abgearbeitet sind, bestimmen
Sie die Woche mit dem höchsten Verbrauch. Diesen Maximalwert speichern Sie in
einer SimpleStat -Statistik, die Sie am Ende auswerten. Gibt es in dieser Simulation
‘Durchfall-Wochen’ ? Machen Sie dazu eine Statistik über die Nummern der schlechtesten Wochen.
62) Bauen Sie Aufgabe 59 wie folgt um:
a) Definieren Sie eine Klasse Dreieck , die als private Attribute die 3 Eckpunkte
Vector2 a , b , c besitzt (die Unterstriche verwendet man oft bei Namen von
Klassenattributen). Die Klasse braucht einen Konstruktor mit den 3 Eckpunkten
als Argumente.
b) Folgende Klassenmethoden erstellen Sie:
Vector2 A(), B(), C() const : diese geben die Eckpunkte zurück. Vector2
AB(), BC(), CA() const : diese geben die Seitenvektoren zurück. double a(),
b(), c() const : diese geben die Seitenlängen zurück. double alpha(), beta(),
gamma() const : diese geben die Winkel zurück. double area() const : gibt die
orientierte Fläche zurück.
c) Die Ausgabe des Beispiels 59 formen Sie um zu einer Ausgabe des Dreiecksobjekts,
wo Sie die neuen Methoden verwenden. D.h. main() besteht am Ende nur noch
aus:
int main()
{
Vector2 A{1, 1}, B{5, 2}, C{-1, 7};
// Ecken eines Dreiecks
Dreieck T(A, B, C);
cout << T;
return EXIT_SUCCESS;
}
Als Klassenmethoden schr
Seite 3
Herunterladen