Rangierbahnhof Auf einem Güterbahnhof gibt es drei Gleise A, B, und C. Die Gleise sind nach rechts offen. Links ist jeweils ein Puffer. Zunächst stehen alle Wagons auf Gleis A. Die Wagons tragen Nummern, wobei man die Nummer jedoch erst dann sieht, wenn der Wagon der vorderste an der offenen Gleisseite ist. (Zwischen den Wagons herumzuturnen, um die anderen Wagonnummern zu lesen wäre zu gefährlich.) Ziel ist es, alle Wagons ins Gleis C zu fahren und zwar so, dass die Nummern der Wagons vom Puffer aus aufsteigend in richtiger Reihenfolge sind. Gleis B ist ein Abstellgleis, das zum Rangieren benutzt werden kann. Nimm das Material (bestehend aus den nach rechts offenen Gleisen (Zeilen) A, B und C und Papierstückchen für die Wagons 16, 11,15, 14). Zu Beginn sollen die Wagons 16,11,15,14 in dieser Reihenfolge (von links ausgehend) auf Gleis A stehen. a) Simuliere nun von Hand den Rangiervorgang mit dem die Wagons in die richtige Reihenfolge auf Gleis C gebracht werden. Finde ein Verfahren für diese konkrete Situation. Schreibe deine Lösung (schrittweise) auf. b) Analysiere dein Vorgehen mit Aussagen wie: „Wagons werden solange von A nach C gebracht wie ....“, „Wenn...,werden ... Wagons in B abgestellt...“. c) Finde einen allgemeinen Algorithmus (ein allgemein mögliches Verfahren) für das Rangieren der Wagons. Du darfst dazu auch weitere Beispiele von Hand ausprobieren, bei denen zum Beispiel die Wagons in einer anderen Reihenfolge stehen. Du darfst auch weitere Wagons hinzunehmen. (Tipp: Die Rollen der Gleise können getauscht werden. Zunächst ist A das Startgleis, B das Rangiergleis und C das Zielgleis. Diese Rollen können vertauscht werden, wenn A leer ist, kann dies das Rangiergleis werden.) d) Es soll ein entsprechendes Java-Projekt geschrieben werden. Welche Klassen empfiehlst du? e) Ergänze die Klassen RangierProgramm und Gleis der Vorlage für das RangierProgramm in Java. Gleis A Gleis B Gleis C 16 11 15 14 Alternative zu Teilaufgabe c): Teste den folgenden Rangieralgorithmus, indem du ihn schrittweise am vorgegebenen Beispiel im Java-Projekt Handrangieren durchgehst und ausführst. Hier sind die Gleise um 90° gedreht, so dass sie nach oben statt nach rechts offen sind. Rangierverfahren verschiebeWagen (...a,....b,....c) { solange (das Startgleis nicht leer ist){ solange ((Wagennummer im Ziel kleiner als Wagennummer am Start)oder(Zielgleis leer)) { fahre vom Startgleis ins Zielgleis } solange ((Start nicht leer )und(Wagennummer im Ziel größer als am Start)) { fahre wagen vom Zielgleis aufs Abstellgleis } } wenn (Abstellgleis nicht leer)// Rollentausch von Start- und Abstellgleis: verschiebeWagen(b,a,c) //b wird Startgleis, denn diese Wagen müssen noch ins Ziel, // a wird Rangiergleis, c bleibt Ziel }