Folgende C++–Sprachmittel sollen zum Einsatz kommen:
- Entwicklung einer Anwendung – Ziehung der Lottozahlen – mit der STL (Standard Template Library)
- Einsatz eines sequentiellen STL-Containers in einer Klasse
Lottery(hier: Klassestd::vector) - Realisierung des STL Iteratoren-Konzepts am Beispiel der Klasse
Lottery - Anwendung elementarer STL Algorithmen (
std::find_ifundstd::for_each)
In dieser Aufgabe simulieren wir eine Ziehung der Lottozahlen.
Zur Ablage der bereits gezogenen Lottozahlen setzt die Klasse Lottery einen STL-Container std::vector ein.
Zur Strukturierung der Klasse Lottery realisieren Sie die folgenden, in Tabelle 1 beschriebenen
öffentlichen und privaten Methoden.
| Methode | Schnittstelle und Beschreibung |
|---|---|
getDrawnNumbers |
size_t getDrawnNumbers() const;Liefert die Anzahl der bereits gezogenen Kugeln zurück. |
nextRandomNumber |
int nextRandomNumber();Ermittelt eine Zufallszahl zwischen 1 und 49. In dieser Methode werden Details zur Generierung einer Zufallszahl verborgen. Sollte eine Zahl mehrfach erzeugt werden, spielt das in dieser Methode keine Rolle. |
drawNextNumber |
int drawNextNumber();Ziehung der nächsten Kugel. Mit Hilfe der Instanzvariablen der umgebenden Klasse Lottery achtet diese Methode darauf, dass keine Kugel doppelt gezogen wird. |
numberAlreadyDrawn |
bool numberAlreadyDrawn(int number);Hilfsmethode, die zu einer zufällig erzeugten Zahl number bestimmt, ob diese Zahl (Kugel) schon einmal gezogen worden ist oder nicht. |
setNextNumber |
void setNextNumber(int number);Hilfsmethode, die Kugel number in den Instanzvariablen der umgebenden Lottery-Klasse als gezogene Kugel ablegt. |
play |
void play();Simuliert eine Ziehung der Lottozahlen. Die zuvor beschriebenen Methoden sind geeignet aufzurufen. |
print |
void print();Gibt das Ergebnis einer Ziehung der Lottozahlen in der Konsole aus. |
Tabelle 1: Beschreibung der öffentlichen und privaten Methoden der Klasse Lottery.
Man kann – mit einer gewissen Phantasie – eine Instanz der Klasse Lottery als C++-Container auffassen.
Unabhängig davon, wieviele Kugeln in einer Ziehung der Lottozahlen bereits gezogen worden sind,
könnte man diese bereits gezogenen Kugeln „iterieren”.
Verwenden Sie eine Iteration, um die komplette Ziehung der Zahlen auf diese Weise zu durchlaufen:
01: Lottery lottery;
02: for (int number : lottery) {
03: std::cout << "> " << number << std::endl;
04: }In diesem Beispiel kommt eine Range-based for-Wiederholungsschleife zum Einsatz.
Alternativ könnte man auch den STL-Algorithmus std::for_each verwenden.
Lottery.h
Lottery.cpp
Lottery_Main_.cpp