Übungen zur Lehrveranstaltung

"Programmierkurs Java"

WS 1999/2000

FB Informatik

D. Boles

 

Übungsblatt 8

Ausgabe: 08.12.99

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

Aufgabe 30 (Arrays): 40 Punkte

Lösen Sie folgende Teilaufgaben:

(a) Implementieren Sie eine Funktion, die ein eindimensionales Array mit int-Werten als Parameter übergeben bekommt und den kleinsten Wert des Arrays als Funktionswert liefert (Beispiel: f([2,3,-1,5]) == -1).

(b) Implementieren Sie eine Funktion, die ein zweidimensionales Array (Matrix) mit double-Werten als Parameter übergeben bekommt und die Zeile der Matrix als Funktionswert liefert, bei der die Summe aller Werte der Zeile den größten Wert ergibt (Beispiel: f([[2.0,3.0][3.5,4.5,-5.0][1.0,-2.0]]) liefert die erste Zeile).

(c) Implementieren Sie eine Funktion, die ein zweidimensionales Array (Matrix) mit double-Werten als Parameter übergeben bekommt und die ein neues Array als Funktionswert liefert, das exakt die Werte der Zeile der Matrix enthält, bei der die Summe aller Werte der Zeile den größten Wert ergibt (Beispiel: f([[2.0,3.0][3.5,4.5,-5.0][1.0,-2.0]]) == [2.0,3.0]).

(d) Erläutern Sie an einem Beispiel den Unterschied zwischen den Teilaufgaben (b) und (c).

(e) Implementieren Sie eine Funktion, die als Parameter ein eindimensionales Array mit int-Werten übergeben bekommt und ein Array als Funktionswert liefert, in dem die einzelnen Werte des übergebenen Arrays in umgekehrter Reihenfolge abgespeichert sind. Das übergebene Array darf nicht verändert werden! (Beispiel: f([1,-5,3,6|) == [6,3,-5,1])

(f) Implementieren Sie eine Prozedur, die als Parameter ein eindimensionales Array mit int-Werten übergeben bekommt und die Werte innerhalb des Arrays umdreht (Beispiel: a=[1,-5,3,6]; p(a); a==[6,3,-5,1]).

(g) Erläutern Sie den Unterschied zwischen den Teilaufgaben (e) und (f).

(h) Implementieren Sie eine Funktion, die zwei gleichlange eindimensionale Arrays mit int-Werten als Parameter übergeben bekommt und die Summe dieser Arrays liefert (Beispiel: f([2,3],[4,5]) == [6,8]).

 

Aufgabe 31 (Arrays): 30 Punkte

Nimm-Spiel: Auf dem Tisch liegen n-Haufen mit je einer beliebigen Anzahl an Kugeln. Zwei Spieler ziehen abwechselnd. Sie müssen dabei jeweils von einem (nicht-leeren) Haufen eine beliebige Anzahl (> 0) Kugeln entfernen. Es gewinnt derjenige Spieler, der die letzten Kugeln vom Tisch räumt.

Beispiel:

n=2; 1. Haufen: 5 Kugeln; 2. Haufen: 3 Kugeln

Spieler A: nimmt vom 1. Haufen 2 Kugeln

Spieler B: nimmt vom 2. Haufen 2 Kugeln

Spieler A: nimmt vom 2. Haufen 1 Kugel

Spieler B: nimmt vom 1. Haufen 3 Kugeln und hat gewonnen!

Implementieren Sie das Nimm-Spiel so, daß zunächst die Anzahl der Haufen und die jeweilige Anzahl der Kugeln pro Haufen über die Tastatur eingelesen wird. Anschließend sollen zwei menschliche Spieler gegeneinander spielen. Geben Sie die Zwischenstände (Anzahl verbliebener Kugeln pro Haufen) nach jedem Spielzug in geeigneter Form auf den Bildschirm aus. Sehen Sie in Ihrem Programm vor, daß fehlerhafte Benutzereingaben (wie das Entfernen von Kugeln von einem leeren Haufen) wiederholt werden müssen!

Aufgabe 32 (Arrays): 30 Punkte

Implementieren Sie eine boolsche Funktion, die als ersten Parameter eine n*m-Matrix mit int-Werten zwischen 0 und 9 und als zweiten Parameter eine positive Zahl zahl übergeben bekommt. Die Funktion soll überprüfen, ob es einen Weg in der Matrix gibt, der die Ziffernfolge des Parameters zahl wiederspiegelt. Ein gültiger Weg ist dabei folgendermaßen definiert: Von einem Feld in der Matrix kann zu einem beliebigen Nachbarfeld gesprungen werden (horizontal, vertikal und diagonal). Nicht erlaubt ist jedoch das mehrfache Aufsuchen eines Feldes. (Kenner des Boggle-Spiels müßten nun wissen, wofür diese Funktion bspw. verwendet werden kann!).

Beispiele:

Im Beispiel links liefert die Funktion true, weil es einen gültigen Weg gibt. Im Beispiel in der Mitte gibt es keinen Weg. Im Beispiel rechts gibt es keinen gültigen Weg, da das Feld mit der 4 zweimal aufgesucht werden müßte, was jedoch verboten ist.