Übungen zur Lehrveranstaltung

"Programmierkurs Java"

WS 1998/99

FB Informatik

D. Boles

 

Übungsblatt 9

 

Ausgabe: 16.12.98

Hinweise: Zur Lösung der Aufgaben dürfen nur Konzepte benutzt werden, die in der Vorlesung schon behandelt worden sind.

Aufgabe 33 (Arrays): 20 Punkte

Schreiben Sie ein Programm, welches das "Game of Life" spielt. Diese Simulation wird auf einem schachbrettartigen Feld gespielt, das eine "Bevölkerung" von "toten" und "lebenden" Zellen darstellt. Jede Zelle kann "überleben", "sterben" oder "geboren" werden. Die schrittweise Entwicklung von einem Stellungsbild zum nächsten erfolgt gemäß einiger Regeln, die berücksichtigen, wieviele lebende Nachbarzellen eine Zelle hat. Eine Zelle x, die nicht am Spielfeldrand liegt, hat 8 Nachbarzellen, Zellen am Spielfeldrand entsprechend weniger.

Die Regeln, nach denen sich die Population von einer Stellung zur nächsten entwickelt, sind:

1. Für eine Zelle x, die gerade tot ist, gilt: Wenn x genau 3 lebende Nachbarzellen hat, wird x neu geboren; sonst bleibt x tot.

2. Für eine Zelle x, die gerade lebendig ist, gilt: Wenn x weniger als 2 lebende Nachbarn hat, stirbt x an Vereinsamung; wenn x 2 oder 3 lebende Nachbarzellen hat, bleibt x in der nächsten Stellung lebendig. In allen anderen Fällen stirbt x an Überbevölkerung.

Alle Veränderungen gemäß dieser Regeln geschehen gleichzeitig. Die Simulation beginnt mit einer bestimmten eingelesenen Verteilung von lebenden und toten Zellen. Sie endet nach einer bestimmten eingelesenen Anzahl von Entwicklungsschritten, jedoch früher, wenn sich die Population nicht mehr ändert. Das Spielfeld sollte aus mindestens 15x15 Feldern bestehen.

Beispiel:

 

Aufgabe 34 (Arrays): 60 Punkte

Implementieren Sie das Spiel "SuperHirn" ("MasterMind"). Dieses Spiel wird mit zwei Spielern gespielt. Spieler A denkt sich eine 4-stellige Zahl aus (Beispiel: 4074). Spieler B muß diese Zahl erraten und hat dabei 50 Rateversuche. Bei jedem Versuch gibt er eine 4-stellige Zahl an und Spieler A teilt ihm daraufhin mit:

(a) die Anzahl an Ziffern an der richtigen Position,

(b) die Anzahl an Ziffern, die zwar in der Zahl vorkommen, aber nicht an der richtigen Position stehen; alle bereits bei (a) angegebenen Ziffern bleiben bei (b) unberücksichtigt.

Beispiel:

Spieler A: 4074 // ausgedachte Zahl
Spieler B: 7104 // 1. Versuch
Spieler A: 1    // (a) die 4 an Position 4
           2    // (b) die 0 und die 7
Spieler B: 4749 // 2. Versuch
Spieler A: 1    // (a) die 4 an Position 1
           2    // (b) die 4 an Position 3 und die 7
Spieler B: 4441 // 3. Versuch
Spieler A: 1    // (a) die 4 an Position 1
           1    // (b) eine der beiden anderen 4en

Implementieren Sie das Spiel so, daß

(a) zwei Menschen gegeneinander spielen können. (20 Punkte)

(b) Spieler A der Computer und Spieler B ein Mensch ist. (20 Punkte)

(c) Spieler A ein Mensch und Spieler B der Computer ist. (20 Punkte)

Aufgabe 35 (Klassen/Objekte): 20 Punkte

Kopieren Sie sich die Datei Bruch.java aus dem Verzeichnis /user/fb10/dibo/java des ARBI-Clusters (alternativ können Sie die Datei auch über die Java-Homepage laden).

Schauen Sie sich die Klasse Bruch an. Erläutern Sie, was die einzelnen Methoden bewirken. Worin liegt der Unterschied zwischen der Methode addiere und der Methode add? Ergänzen Sie die Klasse um weitere Methoden wie Subtraktion, Division und andere Vergleichsmethoden.

Implementieren Sie innerhalb der Klasse eine main-Funktion, die die Klasse Bruch benutzt. Erzeugen Sie in der main-Funktion verschiedene Bruch-Objekte; addieren, multiplizieren und vergleichen Sie sie miteinander.

Sie können den Wert eines Bruches b übrigens mittels der folgenden Anweisung auf den Bildschirm ausgeben: System.out.println(b.toString());

 

Frohe Weihnachten!