Programmieren in C++: Aufbau


Anhang A: Übungen

Dieses Buch ist unter einer Creative Commons-Lizenz lizensiert.


A.1 Aufgaben

Übung macht den Meister

Sie können die Lösungen zu allen Aufgaben in diesem Buch als ZIP-Datei erwerben.

  1. In einem Online-Shop können drei verschiedene Artikel gekauft werden. Es handelt sich hierbei um ein Fass Bier für 30 Euro, einen Blumenstrauß für 40 Euro und ein C++-Buch für 50 Euro. Wenn ein Artikel ausgewählt wird, soll er in einen Warenkorb gelegt werden. Über den Warenkorb kann jederzeit die Gesamtsumme aller Artikel abgerufen werden, die sich im Warenkorb befinden.

    Implementieren Sie Ihr Objektmodell und greifen Sie in der Funktion main() auf den Online-Shop zu, um Artikel auszuwählen. Legen Sie in der Funktion main() die ausgewählten Artikel in den Warenkorb und rufen Sie eine Methode auf, die die Gesamtsumme aller Artikel im Warenkorb berechnet und auf die Standardausgabe ausgibt.

  2. Erstellen Sie ein Objektmodell für folgende Aufgabenstellung: In einem Atomreaktor befinden sich fünf Brennstäbe. Zwei von ihnen müssen entfernt werden, weil sie zu alt sind und nicht mehr zur Energieerzeugung beitragen. Aufgrund erhöhten Energiebedarfs sollen diese beiden alten Brennstäbe aber nicht nur ersetzt werden. Es sollen zusätzlich drei weitere Brennstäbe eingesetzt werden, so dass ingesamt acht Brennstäbe im Atomreaktor betrieben werden. Da die Obergrenze bei zehn Brennstäben liegt, die auf keinen Fall überschritten werden darf, kann der Atomreaktor mit acht Brennstäben betrieben werden.

    Implementieren Sie Ihr Objektmodell und greifen Sie in der Funktion main() auf den Atomreaktor zu, um alte Brennstäbe auszutauschen und neue hinzuzufügen. Definieren Sie eine Klasse supergau und werfen Sie eine Ausnahme dieses Typs, falls in den Reaktor mehr als zehn Brennstäbe eingesetzt werden.

  3. Erstellen Sie ein Objektmodell für folgende Aufgabenstellung: Ein Hotel hat 50 Zimmer, davon 30 Einzel- und 20 Doppelzimmer. Für das Abwickeln von Reservierungen muss jeweils ein freies Einzel- oder Doppelzimmer gefunden und für einen Gast gebucht werden. Ist ein Zimmer gebucht, darf es nicht als frei angezeigt werden, wenn ein anderer Gast ein Zimmer buchen möchte. Da viele Gäste Nichtraucherzimmer bevorzugen, sind 25 Einzel- und 15 Doppelzimmer Nichtraucherzimmer. Bei der Reservierung eines Zimmers kann ein Gast angeben, ob er in einem Raucher- oder Nichtraucherzimmer übernachten möchte.

    Implementieren Sie Ihr Objektmodell und lassen Sie mehrere Gäste in Ihrem Hotel in der Funktion main() Zimmer reservieren. Zeigen Sie zur Kontrolle am Ende Ihres Programms die Anzahl der freien Zimmer an.

  4. Eine Giraffe, ein Elefant, ein Löwe und ein Nilpferd sind aus einem Zoo ausgebrochen. Während der Elefant nun der Giraffe hinterherläuft, läuft der Löwe dem Elefanten hinterher. Lediglich das Nilpferd schwimmt in einem naheliegenden Fluss.

    Erstellen Sie jeweils eine Klasse pro Tier und überladen Sie geeignete Operatoren, um die Verfolgungsjagd der Giraffe, des Elefanten und des Löwen und den Schwimmausflug des Nilpferds anschaulich in C++ auszudrücken. Idealerweise können Sie die Verfolgsjagd der drei Tiere in einer einzigen Zeile angeben. Geben Sie zur Kontrolle in den überladenen Operatoren eine Meldung auf die Standardausgabe aus.

  5. Erstellen Sie ein Objektmodell für folgende Aufgabenstellung: Eine Fußballmannschaft besteht aus zehn Feldspielern und einem Torwart. Während Feldspieler dribbeln können, kann der Torwart den Ball fangen. In einem Fußballspiel dürfen nun in einer Mannschaft maximal vier Spieler ausgewechselt werden. Wer einmal ausgewechselt wurde, darf nicht wieder eingewechselt werden. Auch wenn es eher unüblich ist, darf der Torwart durch einen Feldspieler ersetzt werden, der dann anstelle des Torwarts das Tor hütet und den Ball in die Hand nehmen darf.

    Erstellen Sie eine Fußballmannschaft in der Funktion main() und wechseln Sie zum Test Spieler aus. Kontrollieren Sie Ihr Programm, indem Sie an geeigneten Stellen Statusmeldungen auf den Bildschirm ausgeben. Ersetzen Sie außerdem den Torwart durch einen Feldspieler, der dann als Torwart agieren soll. Um die Aufgabe zu vereinfachen, können Sie Ihre Spieler zum Beispiel über Rückennummern vom Typ int identifizieren anstatt jedem Spieler einen Namen geben zu müssen.

  6. Erstellen Sie ein Objektmodell für folgende Aufgabenstellung: Telefonanrufe können sowohl mit einem Festnetztelefon als auch mit einem Handy getätigt werden. Für einen Anruf ist lediglich eine Telefonnummer einzutippen - das Telekommunikationsunternehmen, bei dem die Nummern registriert sind, stellt automatisch die Verbindung her und lässt das angerufene Telefon klingeln.

    Implementieren Sie Ihr Objektmodell und registrieren Sie mehrere Nummern in einem Objekt Ihres Telekommunikationsunternehmens. Greifen Sie dann auf ein Telefon zu und rufen Sie eine Nummer an. Wenn ein Telefon klingelt, soll eine Statusmeldung auf den Monitor ausgegeben werden. Dabei soll auch angegeben werden, ob ein Festnetztelefon oder Handy angerufen wird und klingelt.

  7. Erstellen Sie ein Objektmodell für folgende Aufgabenstellung: Ein Universum entsteht durch einen Urknall - ein Urknall kann aber nur ein Universum erzeugen. Es enthält beliebig viele Galaxien, die aus beliebig vielen Sternen bestehen. Da Galaxien in Bewegung sind, können sie, wenn sie aufeinandertreffen, zu einer neuen Galaxie verschmelzen, die dann alle Sterne der beiden Galaxien enthält.

    Implementieren Sie Ihr Objektmodell und erstellen Sie ein Universum in der Funktion main(). Lassen Sie zwei Galaxien aufeinandertreffen und geben Sie eine Statusmeldung vor und nach dem Crash aus, die angibt, aus wie vielen Galaxien und Sternen das Universum zum jeweiligen Zeitpunkt besteht.

  8. Erstellen Sie ein Objektmodell für folgende Aufgabenstellung: Die drei Abteilungen Produktion, Marketing und Finanzen in einer Firma werden jeweils von einem Abteilungsleiter geführt. Die Abteilungsleiter sind immer auch Mitglied des Vorstands, zu dem ebenfalls der Geschäftsführer zählt. Weil der Geschäftsführer mit der Leistung des Abteilungsleiters für Finanzen unzufrieden ist, entläßt er ihn und übergibt bis auf weiteres dem Abteilungsleiter für Marketing zusätzlich die Führung über die Finanzabteilung.

    Implementieren Sie Ihr Objektmodell und lassen Sie den Geschäftsführer in der Funktion main() den Abteilungsleiter für Finanzen entlassen und dessen Position durch den Abteilungsleiter für Marketing einnehmen. Geben Sie zur Kontrolle außerdem am Anfang und Ende der Funktion main() die Namen der Vorstandsmitglieder aus.

  9. Erstellen Sie ein Objektmodell für folgende Aufgabenstellung: In einer Firma zählen alle Angestellten entweder zu den Mitarbeitern oder Abteilungsleitern. Abteilungsleiter können jederzeit ein Meeting einberufen und dazu beliebig viele Mitarbeiter und Abteilungsleiter einladen. Mitarbeiter können sich Entschuldigungen ausdenken, warum sie zum Meeting nicht erscheinen können. Ein Abteilungsleiter, der ein Meeting einberuft, ernennt einen der eingeladenen Mitarbeiter oder Abteilungsleiter zum Leiter des Meetings. Dieser kann das Meeting eröffnen.

    Implementieren Sie Ihr Objektmodell und lassen Sie einen Angestellten in der Funktion main() mehrere Mitarbeiter und Abteilungsleiter zu einen Meeting einladen. Der Leiter des Meetings soll dieses dann eröffnen. Geben Sie zur Kontrolle Meldungen auf die Standardausgabe aus.

  10. Erstellen Sie ein Objektmodell für folgende Aufgabenstellung: Ein Parkhaus bietet Platz für 100 Autos. Parken Sie ein paar Autos, indem Sie Objekte vom Typ der Klassen audi und bmw erstellen, die Sie selbst definieren. Ein Dieb hat es auf die Radios in allen BMWs abgesehen und knackt alle BMWs, die im Parkhaus stehen.

    Implementieren Sie Ihr Objektmodell und lassen Sie einen Dieb alle BMWs im Parkhaus knacken. Zur Kontrolle soll jedesmal, wenn ein BMW geknackt wird, eine entsprechende Meldung auf die Standardausgabe ausgegeben werden.

  11. Erstellen Sie ein Objektmodell für folgende Aufgabenstellung: Eine Familie bestehend aus den Eltern Anton und Bettina und den Kindern Caesar und Dora steigt in einen Bahnwagon ein. Während der Zugfahrt werden die Fahrkarten aller Erwachsener kontrolliert.

    Implementieren Sie Ihr Objektmodell und lassen Sie die Familie in der Funktion main() in den Zug einsteigen. Geben Sie eine Meldung auf die Standardausgabe aus, wenn die Fahrkarte eines Erwachsenen kontrolliert wird.

  12. Erstellen Sie ein Objektmodell für folgende Aufgabenstellung: Ein Bauer hat 10 Kühe, die jeden Tag gemolken werden und zwischen 5 und 10 Liter Milch geben. Die Milch wird jeden Tag frisch von einer Molkerei abgeholt.

    Implementieren Sie Ihr Objektmodell, melken Sie die Kühe und füllen Sie den Molkereiwagen. Geben Sie auf die Standardausgabe aus, wie viele Liter Milch sich im Wagen befinden.

  13. Entwickeln Sie eine generische Klasse pool, die Speicher wesentlich schneller zur Verfügung stellen soll als dies über einen wiederholten Zugriff auf den Operator new geschehen kann. Dazu soll pool eine Methode create() anbieten, die einen Zeiger auf einen Speicher zurückgibt, der dann verwendet werden kann. Wird der Speicher nicht mehr benötigt, soll der Zeiger an eine Methode destroy() übergeben werden können.

    Implementieren Sie die Klasse pool derart, dass sie intern einen in der Größe konstanten Speicherblock verwaltet, von dem bei jedem Aufruf von create() ein Teil der Anwendung zur Verfügung gestellt wird. Bei einem Aufruf von destroy() soll pool den zurückgegebenen Speicher im Falle eines weiteren Aufrufes von create() wieder zur Verfügung stellen können.