Universität Ulm - Abteilung Angewandte Informationsverarbeitung

12. Übungsblatt (30.01.02 bis 13.02.02) zur Vorlesung
Allgemeine Informatik I für Wirtschaftswissenschaftler und Biologen

WS 2001/2002


1. Alles eine Frage der Logik! (6 Punkte)

Gegeben sei ein Oberon-Programm mit der Vereinbarung
VAR x,y,z : BOOLEAN;

Vereinfachen Sie die folgenden Ausdrücke unter Verwendung der allgemeinen Rechenregeln (vgl. Abschnitt 6.7.12 im Skript):

(a) x OR (y OR x) OR ~y
(b) (x OR y) & (x OR ~y)
(c) x OR y OR ~x
(d) (x OR y) & (x OR ~y) & (~x OR y) & (~x OR ~y)
(e) (x & y) OR (x & ~y) OR (~x & y) OR (~x & ~y)
(f) (x & y) OR ( (x & ~x) & z )

Stellen Sie Ihrem Tutor Ihre Lösungen vor und erklären Sie ihm die wichtigsten Schritte!

2. Hit The Middle! (14 Punkte)

In den letzen Wochen sind in der Vorlesung die wichtigen Oberon-Sprachelemente ARRAY, RECORD und PROCEDURE besprochen worden. Um deren Verwendung nochmals zu trainieren, sollen Sie in diesem Übungsblatt ein kleines Spiel programmieren: Hit The Middle.

Das Spielfeld ist quadratisch (ähnlich zu einem Schachbrett) aufgebaut und hat eine ungerade Seitenlänge. Auf diesem Spielfeld springt man mit Hilfe eines Zufallsgenerators hin und her und versucht, möglichst viel Geld zu gewinnen.

Der Spieler startet das Spiel mit $10,000. In jeder Runde wird durch den Zufallsgenerator bestimmt, auf welches Feld er springen muß. Es gibt die folgenden Gewinn- bzw. Verlustfelder:

Bei einer Spielfeldbreite von 7 ergibt sich aus diesem Schema eine Aufteilung in ein Mittel-, 12 Diagonal- und 20 Randfelder. Somit ist das Spiel auch mathematisch fair, denn der erwartete Gewinn für jede Runde ist 0.

Es gibt drei Möglichkeiten, wie das Spiel enden kann:

  1. Der Spieler trifft die Mitte. In diesem Fall ist das Spiel vorbei und der Spieler erhält $50,000 als Gewinn - zusätzlich zu seinem aktuellen Kontostand.
  2. Der Spieler ist pleite. Kommt er auf ein Feld, das seinen Kontostand ins Negative bringen würde, wird sein Kontostand auf 0 gesetzt und das Spiel ist beendet.
  3. Das Spiel dauert länger als die (über eine Konstante festgelegte) maximale Spieldauer. In diesem Fall erhält der Spieler seinen aktuellen Kontostand als Gewinn ausgezahlt.

Was die Datenstruktur in Oberon angeht, so empfehle ich Ihnen die folgenden Konstanten- und Typvereinbarungen:

CONST MaxGameLength = 10;            (* How long do you want to play? *)
      FieldSize = 7;                 (* This number must be odd! *)

TYPE FieldPosition = RECORD
		       x,y : INTEGER;
		     END;
     SavedMoves = ARRAY MaxGameLength OF FieldPosition;

Die jeweils aktuelle Spielposition wird in einer Variable vom Typ FieldPosition abgelegt; außerdem sollen alle Positionen des Spiels in einem ARRAY vom Typ SavedMoves gespeichert und am Ende ausgegeben werden.

Lagern Sie möglichst viele Funktionen und Operationen in Prozeduren aus. Das Hauptprogramm sollte am Ende nur noch zur Steuerung des Spiels dienen und den Kontostand des Spielers verwalten.

Hier sind ein paar Anwendungs-Beispiele zu Hit The Middle.

Zum Schluß noch eine kleine Zusatzfrage:
Spielen Sie Ihr Programm möglichst oft und notieren Sie sich, wie Ihre Spiele jeweils geendet haben. Was fällt Ihnen dabei auf? Widerspricht dies der (rechnerisch korrekten) Annahme, daß das Spiel fair ist?

Nützliche Hinweise:

Viel Erfolg!!!