Erinnern Sie sich noch an Auntie Anne aus dem zweiten Übungsblatt? Ja? Gut, dann haben Sie Auntie Anne etwas voraus, denn die alte Dame ist leider etwas vergeßlich und weiß partout nichts mehr von dem Gefallen, den Sie ihr im letzten November erwiesen haben.
Unter anderem haben Sie damals für Auntie Annie eine Statistik ihrer beliebtesten Urlaubsziele sortiert darstellen lassen. Genau das möchte Ihre Erbtante von Ihnen nun schon wieder.
Damals haben Sie diesen Wunsch durch das Kommando ``sort'' auf der Shell erfüllen können, diesmal erledigen Sie das Sortieren durch die Implementierung des sogenannten Shellsort (Bitte beachten Sie dieses grandiose Wortspiel ;-))
Die Datei mit den Urlaubszielen verwendet das folgende Format:
wobei # für die Häufigkeit (als Integer-Zahl) steht, mit der das Ziel besucht worden ist, also zum Beispiel:
10xRom
5xParis
Bei Auntie Anne finden Sie im Regal den dritten Band des Werkes ``The Art of Computer Programming'' von D.Knuth. Auf Seite 83 ff. wird dort der folgende Algorithmus für den Shellsort vorgestellt:
Algorithm D (Shellsort). Records are rearranged in place; after sorting is complete, their keys will be in order, . An auxiliary sequence of increments, is used to control the sorting process, where ; proper choice of these increments can significantly decrease the sorting time.
Auntie Annie -- bekannt für ihre hohen Ansprüche -- möchte nun von Ihnen ein Oberon-Programm haben, das aus einer Datei die Urlaubsziele mit den entsprechenden Häufigkeiten einliest und sortiert wieder auf der Standardausgabe ausgibt. Dabei soll sowohl das Sortieren nach Häufigkeit als auch nach Urlaubszielen möglich sein (steuerbar durch ein entsprechendes Flag beim Aufruf Ihres Programms auf der Kommandozeile).
Als Sie diese Aufgabe hören, brechen Sie weinend zusammen und denken sich: ``Schon wieder so ein Riesending!''. Aber da nimmt Sie Onkel Heidi in den Arm und tröstet Sie, indem er Ihnen folgende Gliederung vorschlägt:
Viel Erfolg!