Prof. Franz Schweiggert Abteilung Angewandte Informationsverarbeitung 20. Juni 2006
Christian Ehrhardt Blatt 8


Uni Logo



Systemnahe Software (SS 2006)


Abgabetermin 27.Juni 2006

MasterMind

Pipe-Exec (4 Punkte)

Wir haben in der Vorlesung die nützliche Funktion popen kennen gelernt. Allerdings hat diese Funktion einen Nachteil: Es ist nicht möglich, sowohl an die Standardeingabe alsauch an die Standardausgabe des ausgeführten Programms zu kommen.
Schreibt daher eine Funktion
       int pexecvp(int *p, char * argv[]);
die das Programm argv[0] mit den Argumenten in argv[] ausführt und in p[0] bzw. p[1] ganz analog zum Systemcall pipe(2) zwei Filedeskriptoren zurückliefert, die mit der Standardeingabe bzw. der Standardausgabe des ausgeführten Programms verbunden sind. Der Rückgabewert sollte $0$ im Erfolgsfall und $-1$ im Fehlerfall sein. Im Fehlerfall sollte errno einen sinnvollen Wert enthalten.
Testet diese Funktion mit einem kleinen Beispielprogramm.

MasterMind Regeln

Bei MasterMind geht es darum, einen Farbcode gegebener Länge zu erraten. Wir werden die Farben mit Hilfe von Großbuchstaben A,B,C... darstellen. Es ist bei Spielbeginn nur bekannt wieviele verschiedenen Farben höchstens im Spiel sind und wie lange der geheime Code ist. Nach jedem Rateversuch erhält der Spieler ein Feedback bestehend aus zwei Zahlen black und white. Die Zahl black gibt an, an wievielen Positionen der Rateversuch mit dem geheimen Code übereinstimmt. Ist diese Zahl gleich der Länge des Codes, dann ist das Spiel gewonnen. Die Zahl white gibt an, um wieviel sich black noch erhöhen läßt, wenn man die Reihenfolge der Farben im aktuellen Rateversuch geeignet vertauscht. Wenn also black+white der Länge des geheimen Codes entspricht, dann ist klar, daß jede Farbe im geheimen Code genau so oft vorkommt wie im aktuellen Rateversuch.
Ziel des Spiels ist es, den geheimen Code mit möglichst wenigen Rateversuchen zu erraten. Es gibt zwei Varianten dieses Spiels: Die UNIQUE-Variante erlaubt nur ein einzelnes Vorkommen einer Farbe im Geheimcode, die FREE-Variante erlaubt beliebig viele gleiche Farben.

MasterMind Server

Auf der Homepage zu den Übungen gibt es ein Programm mm_server.c herunterzuladen, das von der Standardeingabe Kommandos entgegen nimmt und die jeweiligen Antworten auf der Standardausgabe ausgibt. Diese Kommandos erlauben es, gegen den Server MasterMind zu spielen. Die Unterhaltung mit diesem MasterMind Server spielt sich nach folgenden Regeln ab:

Die Aufgabe (6 Punkte)

Der im vorherigen Abschnitt vorgestellt MasterMind Server eignet sich hervorragend als Test für die Funktion pexecvp aus dem ersten Teil. Schreibt also ein kleines Programm, das den MasterMind-Server aufruft und mehrere Spiele mit verschiedenen Parametern spielt. Dabei soll jeweils gezählt werden, wieviele Rateversuche benötigt werden. Ausserdem ist grundsätzlich auf eine sinnvolle Fehlerbehandlung zu achten.

Hinweise



Christian Ehrhardt 2006-06-20