Dibo


PK-Java

 
 


 

Klausurergebnisse
-
Programmierkurs Java (WS 97/98)

Ergebnisse
Aufgaben
Musterlösung zu Aufgabe 1
Musterlösung 1 zu Aufgabe 2 und 3
Musterlösung 2 zu Aufgabe 2 und 3

Ergebnisse

ACHTUNG:

Die zum Bestehen der Klausur erforderliche Punktzahl wurde von 50 auf 40 Punkte herabgesetzt !

Die untere Schranke zur Zulassung zur Nachklausur entfällt, d.h. ALLE, die die Klausur nicht bestanden haben, können die Nachklausur mitschreiben!

Einsicht in die Klausur: MO, 23.02.98, 13 - 17 Uhr, OFFIS, Raum O71

Nachklausur: FR, 17.04.98, 10-12 Uhr, Hörsaal G

MatNr Punkte Schein

6797320 80 x

6796930 24

6435640 08

4896630 35

6816360 35

6723020 87 x

6801580 96 x

6663920 10

6730130 65 x

6700870 35

6770190 89 x

6699590 44 x

6699200 22

6653770 05

6771290 104 (!) x

6773070 31

6636250 63 x

6694960 50 x

6677860 17

6433730 35

6665380 77 x

6800220 61 x

6420280 15

6684840 42 x

6573300 42 x

6698810 88 x

6725640 46 x

6801900 29

6701000 48 x

6686880 92 x

6794600 22

6476540 35

6796770 16

6699620 31

6699880 17

6800060 99 x

6686460 51 x

6747950 34

6723860 27

6720980 37

6722180 55 x

6671420 74 x

6678410 33

6788140 48 x

6535700 14

6562050 00

6483230 30

6724960 Reversi x

6686620 68 x

6687300 58 x

6681120 48 x

6720690 36

6686200 57 x

6685490 83 x

6720430 10

6720850 68 x

6701420 92 x

6724120 61 x

6684970 Reversi x

6699910 42 x

6664990 87 x

6800510 59 x

6702100 04

6576280 59 x

6679770 36

6484460 26

6771030 45 x

6715810 52 x

6699040 71 x

6664570 75 x

6150130 29

6800800 14

6689470 14

6798970 15

6813930 65 x

6738770 33

6794860 83 x

6670030 54 x

6654580 40 x

6065270 26

6801870 78 x

6722500 48 x

6687720 58 x

6644170 42 x

6687010 37

6794280 27

6634890 27

6721820 29

6689630 60 x

6669360 50 x

6700160 100 x

6684680 35

6723280 15

5507830 41 x


Statistik:

bestanden: 50 (+2)

nicht bestanden: 42

Aufgaben

Aufgabe 1 (Puan-Puan): 50 Punkte

Puan-Puan ist ein Spiel, das von zwei Personen auf einem Spielbrett von n mal n Feldern (n = 2, 3, 4, ..., 9) gespielt wird. Als Spielfiguren stehen n mal n gleichfarbige Steine zur Verfügung. Die Spieler ziehen abwechselnd. Bei einem Zug wird entweder ein Stein gesetzt oder ein bereits gesetzter Stein weggenommen.

Wer eine Steinstellung erzeugt, die schon einmal im Verlauf des aktuellen Spiels aufgetreten ist oder die bis auf eine Drehung des gesamten Spielfeldes um 90, 180 oder 270 Grad mit einer bereits aufgetretenen Stellung übereinstimmt, verliert das Spiel. Das Spiel endet, wenn einer der beiden Spieler verliert bzw. nach 100 Zügen. In letzterem Falle endet das Spiel mit einem Unentschieden.

Vier (bis auf Drehung) gleiche Stellungen ("Puan-Gleichheit")

Schreiben Sie ein Java-Programm, das zuerst die Größe des Spielbrettes einliest und dann abwechselnd die Spielzüge beider Spieler entgegennimmt, bis das Spiel endet (generelle Spielabwicklung: 5 Punkte)! Eine Ausgabe des Spielbrettes auf dem Bildschirm ist nicht erforderlich.

Implementieren Sie die Überprüfung der oben definierten "Puan-Gleichheit" (25 Punkte)!

Wählen Sie geeignete Datenstrukturen (10 Punkte)!

Beachten und behandeln Sie fehlerhafte Nutzereingaben (5 Punkte)!

Wählen Sie aussagekräftige Bezeichner! Dokumentieren Sie schwer verständliche Stellen (5 Punkte)! Eine Dokumentation gemäß der javadoc-Dokumentationsrichtlinien ist jedoch nicht erforderlich!

Aufgabe 2 (Bitset) 50 Punkte

Eine Bitmenge ist eine Datenstruktur, in der einzelne Bits gesetzt (1), andere nicht gesetzt sind (0). Beispielsweise repräsentiert die Bitfolge 10011, daß die Bits 1, 4 und 5 gesetzt und alle anderen Bits nicht gesetzt sind.

Implementieren Sie in Java eine Klasse BitSet, welche eine Bitmenge als ADT realisiert. Auf Objekten vom Datentyp BitSet sollen dabei folgende Funktionen ausführbar sein:

a) Initialisieren einer leeren Bitmenge, d.h. kein Bit ist gesetzt (Default-Konstruktor) (3 Punkte)

b) Initialisieren einer Bitmenge mit einer bereits existierenden Bitmenge, d.h. anschließend sind die beiden Bitmengen wertegleich (siehe Teilaufgabe (e)) (Copy-Konstruktor) (3 Punkte)

c) Clonieren einer Bitmenge, d.h. initialisieren einer neuen Bitmenge mit einer alten Bitmenge, d.h. anschließend sind die beiden Bitmengen wertegleich (siehe Teilaufgabe (e)) (Überschreiben der von der Klasse Object geerbten Methode clone) (3 Punkte)

d) Konvertieren einer Bitmenge in ein String-Objekt (Bitfolge) (Überschreiben der von der Klasse Object geerbten Methode toString) (3 Punkte)

e) Überprüfen auf Wertegleichheit zweier Bitmengen (zwei Bitmengen sind wertegleich, wenn in beiden Mengen exakt dieselben Bits gesetzt sind) (Überschreiben der von der Klasse Object geerbten Methode equals) (3 Punkte)

f) Setzen eines einzelnen Bits der Bitmenge. Das zu setzende Bit wird dabei als int-Wert übergeben (3 Punkte)

g) Löschen eines einzelnen Bits der Bitmenge. Das zu löschende Bit wird dabei als int-Wert übergeben (3 Punkte)

h) Ausführung eines logischen ANDs mit einer anderen Bitmenge (3 Punkte)

i) Ausführung eines logischen ORs mit einer anderen Bitmenge (3 Punkte)

k) Abfrage, ob ein bestimmtes Bit gesetzt ist (3 Punkte)

Achten Sie darauf, daß prinzipiell beliebig große Bits (bis MAXINT) gesetzt werden dürfen. Um nicht unnötig Speicherplatz zu verschwenden, wählen Sie zur internen Repräsentation der gesetzten und ungesetzten Bits daher bitte eine dynamische Datenstruktur (verkettete Liste, Vector, "wachsendes Array", ...) (Wahl und Implementierung der Datenstruktur: 10 Punkte).

Dokumentieren Sie die Klasse und eine Methode mittels der javadoc-Dokumentationsrichtlinien (5 Punkte).

Überlegen Sie sich jeweils, wie die Methoden in Fehlerfällen reagieren sollen. Wählen Sie aussagekräftige Bezeichner. Achten Sie auf Lesbarkeit, leichte Änderbarkeit und Erweiterbarkeit Ihrer Klasse. Dokumentieren Sie schwer verständliche Stellen (5 Punkte).

Aufgabe 3 (Test) max. 5 Bonuspunkte

Schreiben Sie ein Testprogramm für die in Aufgabe 2 entworfene Klasse Bitset!