Prof. Franz Schweiggert Abteilung Angewandte Informationsverarbeitung 16. Mai 2006
Christian Ehrhardt Blatt 4


Uni Logo



Systemnahe Software (SS 2006)


Abgabetermin 23.Mai 2006

Die fork/exec WM (10 Punkte)

In diesem Blatt soll die Fußball-WM 2006 mit Hilfe von fork(2) und den verschiedenen Varianten von exec(2) simuliert werden. Um die Sache gleich von vorne herein etwas zu vereinfachen, werden wir auf die Verwendung von Mannschaftsnamen verzichten. Die 32 teilnehmenden Teams bekommen die Nummern 0 bis 31 zugeordnet.

Tore einer Mannschaft

Schreibt zunächst ein kleines Programm goals, das auf der Kommandozeile zwei Mannschaftsnummern übergeben bekommt und dann (mit Hilfe eines Zufallszahlengenerators) entscheidet, wieviele Tore die erste Mannschaft gegen die zweite erzielt. Der Exit-Status des Programms gibt an, wieviele Tore erzielt wurden. Bei einem fehlerhaften Aufruf sollte das Programm mit einem Segmentation Fault terminieren (ausnahmsweise).
Wie realistisch die Simulation letzten Endes sein wird, entscheidet sich daran, wieviel Expertenwissen Ihr in diese Programm steckt, für das Übungsblatt müssen die Parameter zwar überprüft aber nicht unbedingt ausgewertet werden.
Hinweis: Die Initialisierung der Zufallszahlengenerators mit srand(3c) sollte in diesem Fall auch die Prozeß-ID und nicht nur die aktuelle Uhrzeit berücksichtigen.

Ein erster Test (2 Punkte)

Schreibt ein Programm, das in einer Schleife goals mit verschiedenen Parametern aufruft und eine Statistik ausgibt, wie oft welche Anzahl von Toren erzielt wurde.

Simulation eines Spiels

Ein einziges Spiel wird jetzt so simuliert, daß für jede der beiden beteiligten Mannschaften einmal goals aufgerufen wird um die von dieser Mannschaft erzielten Tore zu ermitteln. Daraus ergibt sich das Ergebnis. Sollte der Turniermodus für dieses Spiel kein Unentschieden erlauben, dann wird im Falle von gleich vielen erzielten Toren die Prozedur einfach so lange wiederholt, bis es zu einer Entscheidung kommt.
Hinweis: Es lohnt sich eventuell, eine Funktion zu schreiben, die zu zwei gegebenen Mannschaftsnummern durch einen Aufruf von goals ermittelt, wieviele Tore die erste Mannschaft erzielt.

Die Gruppenspiele (5 Punkte)

Die 32 teilnehmenden Mannschaften sind in 8 Gruppen zu je 4 Mannschaften eingeteilt: Mannschaft 0 bis 3 in Gruppe A, Mannschaft 4 bis 7 in Gruppe B usw. Innerhalb einer Gruppe spielt zunächst jede Mannschaft einmal gegen jede andere.
Im folgenden betrachten wir eine Gruppe bestehend aus dem vier Mannschaften mit den Nummern M0, M1, M2 und M3. Dann müssen die folgenden 6 Gruppenspiele wie oben beschrieben simuliert werden: Die beiden besten Mannschaften aus der sich daraus ergebenden Tabelle kommen ins Achtelfinale. Glücklicherweise gibt es bereits ein Programm tabelle auf der Homepage der Vorlesung (als C-Programm) herunterzuladen, das aus den Ergebnissen der Gruppenspiele den Gruppensieger oder den Gruppenzweiten ermitteln kann. Dieses Programm erwartet 13 Kommandozeilenparameter: Der Rückgabewert gibt den Index der Mannschaft in Ihrer Gruppe an, die den fraglichen Tabellenplatz erreicht hat. Ist also zum Beispiel Tabellenplatz 0 (der Gruppensieger) gesucht, dann bedeutet ein Rückgabewert von 2, daß die Mannschaft M2 in dieser Gruppe gewonnen hat.
Eure Aufgabe ist es also nur noch, für jedes Gruppenspiel das Ergebnis zu ermitteln und das Programm tabelle passend aufzurufen, um den Gruppensieger und den Gruppenzweiten zu ermitteln.
Hinweis: Sollte das Programm Tabelle nicht in der Lage sein, aus den Ergebnissen eine eindeutige Reihenfolge zu ermitteln (nicht alle FIFA-Regeln diesbezüglich sind korrekt implementiert), so beendet es sich mit einem Segmentation Fault. Dieser Fall muß also beim Aufruf beachtet werden.

Die Endrunde (3 Punkte)

Aus den Gruppenspielen ergeben sich 16 Achtelfinalisten, die den Gewinner im KO-System ermitteln. Dazu werden die Achtelfinalisten in eine Liste geschrieben und immer zwei benachbarte Mannschaften spielen gegeneinander ein Spiel. Der Verlierer wird aus der Liste gestrichen und die nächste Runde beginnt. Das geschieht so lange, bis nur noch ein Mannschaft (der Turniersieger) in der Liste verbleibt. Diese Spiele müssen natürlich ebenfalls simuliert werden.
Beim erstellen der Liste der 16 Achtelfinalisten aus den Gruppensiegern und den Gruppenzweiten wird darauf geachtet, daß Gewährleistet wird dies zum Beispiel durch folgende anfängliche Ordnung: A1, B2, C1, D2, E1, F2, G1, H2, A2, B1, C2, D1, E2, F1, G2, H1. Dabei bedeutet etwa D2, den Zweitplazierten in der Gruppe D.

Christian Ehrhardt 2006-05-16