Roboteraufgaben v3

Übungsaufgaben PVK-­‐Roboter PVK WS15/16 Tipp1: Sie können sich bei jeder Aufgabe das Spielfeld und die Startposition sowie Ausrichtung des Roboters visuell ansehen, indem Sie das Programm einfach starten. Tipp2: Es kann hilfreich sein sich zuerst (z.B. bildlich oder schriftlich) zu überlegen wie der Roboter das Ziel erreicht, bevor Sie Code programmieren. Tag1 (Sequenz und Ausgabe): 1.1. Basisaufgabe: Das Spielfeld enthält eine Farblinie. Der Roboter startet auf dem ersten farbigen Feld. Er soll dann die komplette Farblinie nachfahren und auf dem letzten farbigen Feld stehen bleiben. Hinweis: Das Spielfeld, die Startposition und Ausrichtung des Roboters sind immer gleich. 1.2. Fortgeschrittene Aufgabe: Der Roboter startet auf einem farbigen Feld und soll auf das farbige Zielfeld fahren. Das Spielfeld enthält jedoch Hindernisse (unpassierbare Felder). Geben Sie nach jedem Schritt auf der Konsole true (Roboter steht auf einem farbigen Feld) oder false (Roboter steht auf einem weißen Feld) aus. Hinweis1: Das Spielfeld, die Startposition und Ausrichtung des Roboters sind immer gleich. Hinweis2: Befehle können „ineinander geschachtelt werden“, z.B. System.out.println(isMarked()); 1.3. Rätselaufgabe Nutzen Sie das Vorgehen aus 1.2 um auf der Konsole auszugeben, ob der Roboter auf einem farbigen Feld steht oder nicht. Geben sie dann auf der Konsole „true, true, false, true, false, false“ aus. (true bzw. false in den Code zu schreiben gilt nicht als korrekte Lösung) Hinweis1: System.out.print(); erzeugt keinen Absatz nach einer Ausgabe. Hinweis2: Das Spielfeld, die Startposition und Ausrichtung des Roboters sind immer gleich. Tag2 (Bedingte Ausführung) 2.1. Basisaufgabe: Das Spielfeld enthält nun eine gerade, gefärbte Spur. Der Roboter startet auf dem ersten Feld. Fahren Sie nun genau ein Feld über die gefärbte Spur hinaus. Hinweis1: Die Spur ist zufällig 2-­‐4 Felder lang. Hinweis2: Die Startposition und Ausrichtung des Roboters sind immer gleich. Hinweis3: Code zu wiederholen ist eigentlich ein Zeichen für schlechten Code. Das soll hier jedoch einmal egal sein. 2.2. Fortgeschrittene Aufgabe: Der Roboter startet links oben und soll nach rechts auf das farbige Feld gebracht werden. Vor im befindet sich jedoch noch ein Hindernis. Hinweis1: Das Spielfeld ist nur 2 Felder hoch. Hindernis und Ziel sind zufällig oben oder unten. Hinweis2: Die Startposition und Ausrichtung des Roboters sind immer gleich. 2.3. Rätselaufgabe Fahren Sie mit dem Roboter auf das Feld in der Mitte des Spielfelds. Hinweis1: Die Startposition ist zufällig in einer Ecke, die Ausrichtung ist jedoch immer nach rechts. Hinweis2: Code zu wiederholen ist eigentlich ein Zeichen für schlechten Code. Das soll hier jedoch einmal egal sein. Tag3 (Schleifen): 3.1. Basisaufgabe: Fahren Sie vom linken oberen Eck ins rechte untere mit nur 2 Vorwärtsbefehlen im Code. Hinweis1: Das Spielfeld, die Startposition und Ausrichtung des Roboters sind immer gleich. 3.2. Fortgeschrittene Aufgabe: Fahren Sie in die Feldmitte. Das Feld hat jedoch eine zufällige Größe Hinweis1: Die Startposition und Ausrichtung des Roboters sind immer gleich. Hinweis2: Das Spielfeld kann 3x3, 5x5 oder 7x7 groß sein. Hinweis3: Nutzen Sie Variablen um herauszufinden wie groß das Spielfeld ist. 3.3. Rätselaufgabe Erneut muss eine farbige Spur nachgefahren werden, wobei der Roboter auf dem ersten farbigen Feld startet. Ziel ist es bis zum letzten farbigen Feld der Spur zu gelangen und von dort aus wieder zum Startfeld. Der Roboter darf dabei nur 2 weiße Felder berühren! Hinweis1: Die Startposition und Ausrichtung des Roboters sind immer gleich. Hinweis2: Die farbige Linie ist vollständig von weißen Feldern umgeben. Hinweis3: Die farbige Linie hat immer die Form eines L, jedoch ist zufällig wie lang die beiden Geraden des L sind. Tag4(Arrays & Klassen): 4.1. Basisaufgabe: Erstellen Sie ein Objekt der Klasse „Anweisung“. Setzen Sie dann den Wert der ersten Variable auf 1, den der zweiten auf true, den der dritten auf 3. Nutzen Sie danach die Variablen vom Objekt in for-­‐Schleifen und if-­‐Bedingungen um den Roboter mit ihnen korrekt zu bewegen. Hinweis1: Die Startposition und Ausrichtung des Roboters sind immer gleich. Hinweis2: Die Namen der Variablen verraten welchen Befehl diese beschreiben. Hinweis3: Der Roboter endet auf dem einzigen farbigen Feld, wenn die Aufgabe korrekt gelöst wurde. 4.2. Fortgeschrittene Aufgabe: Erstellen Sie ein Array. Fahren Sie dann mit dem Roboter gerade über das Spielfeld zum anderen Ende und speichern Sie für jedes Feld, ob es gefärbt ist. Geben Sie zum Schluss das Array auf der Konsole aus. Hinweis1: Die Startposition und Ausrichtung des Roboters sind immer gleich. Hinweis2: Die Felder sind zufällig gefärbt, sonst die das Spielfeld immer gleich. Hinweis3: Ihre Lösung ist korrekt, wenn sie eine Liste an true bzw. false erhalten, die mit der Färbung der Felder übereinstimmt. 4.3. Rätselaufgabe In dieser Aufgabe gibt es ein Array, welches das Spielfeld abbildet. Ein zufälliger Wert in dem Array ist 1, die anderen sind 0. Platzieren Sie den Roboter auf dem Feld, das im Array mit der 1 markiert ist. Hinweis1: Das Feld unter dem links oben in der Ecke ist bei [1][0] gespeichert. Hinweis2: Zur Überprüfung ist dieses Ziel-­‐Feld auch eingefärbt. (Die Methode zum überprüfen der Farben darf natürlich nicht eingesetzt werden.) Hinweis3: Startposition, Ausrichtung und Spielfeldgröße sind immer gleich. Tag5 (Statische Methoden): 5.1. Basisaufgabe: Schreiben Sie eine Methode, die um ein freistehendes Hindernis fährt, wenn sich der Roboter direkt vor dem Hindernis befindet. Nutze Sie die Methode um das Hindernis zu umfahren. Hinweis1: Gehen Sie von freistehenden Hindernissen aus (man kann diese in alle Richtungen umfahren). Hinweis2: Der Roboter befindet sich auf dem Spielfeld immer direkt vor dem Hindernis. 5.2. Fortgeschrittene Aufgabe: Schreiben Sie eine statische Methode, sie den Roboter erst i-­‐Mal im Uhrzeigersinn dreht, ihn dann k-­‐Felder nach vorne bewegt und dann zurück gibt, ob er dann auf einem farbigen Feld steht. Nutzen Sie dann die Methode mit i=3 und k=2 und geben Sie das Ergebnis auf der Konsole aus. Hinweis1: Roboter und Spielfeld sehen immer gleich aus. Zur Kontrolle sollte der Roboter zum Schluss auf dem einzigen farbigen Feld stehen und auf der Konsole true ausgeben. Hinweis2: Die statische Methode braucht als Argument zwingend ein Objekt der Klasse Aufgabe5_2, welches Sie mit „this“ beim Aufruf übergeben können. 5.3. Rätselaufgabe Diese Aufgabe unterscheidet sich ein wenig von den anderen, da Sie keinen Code selber schreiben müssen. Stattdessen ist eine Methode „public static String methode(...)“ vorhanden. Finden Sie heraus welche Werte an die Methode übergeben werden müssen, damit, wenn man das Ergebnis der Methode auf der Konsole ausgibt, „Lösung: 4“ erscheint. Hinweis1: Roboter und Spielfeld sehen immer gleich aus. Hinweis2: Sie dürfen die Methode nicht verändern. Es gibt eine Lösung, indem sie lediglich die korrekte Kombination an Parameter finden. Hinweis3: Die statische Methode braucht als Argument zwingend ein Objekt der Klasse Aufgabe5_3, welches Sie mit „this“ beim Aufruf übergeben können. Tag6 (Instanzmethoden): 6.1. Basisaufgabe: Schreiben Sie in der Klasse Aufgabe6_1 eine Methode um X Felder gerade aus zu fahren. Nutzen Sie diese Methode mit dem Roboter mit x = 5. Hinweis1: Der Roboter sollte auf dem einzigen farbigen Feld stehen bleiben, wenn die Aufgabe korrekt gelöst wurde. 6.2. Fortgeschrittene Aufgabe: Wieder soll innerhalb der Klasse (jetzt Aufgabe6_2) eine Methode geschrieben werden, die X Felder geradeaus fährt, allerdings einen Zähler hat, der festhält, wie viele farbige Felder der Roboter bereits überfahren hat. Fügen Sie außerdem eine zweite Methode hinzu, die diese Zahl wie folgt ausgibt „Es wurden X farbige Felder überfahren“. Rufen Sie dann die Fahrmethode mit x = 7 auf und lassen Sie sich dann das Ergebnis der zweiten Methode ausgeben. Hinweis1: „Es wurden 3 farbige Felder überfahren“ ist die korrekte Lösung. 6.3. Rätselaufgabe Die Klasse Aufgabe6_3 besitzt nun eine Methode, die aktuell auskommentiert ist. Entfernen Sie die //, sodass die Methode wieder Code enthält. Wie sie feststellen werden, enthält diese Fehler. Fügen Sie Variablen und Methoden hinzu, sodass der Code wieder korrekt funktioniert. Rufen Sie dann die Methode „public void fahreZumFarbigenFeld()“ für den Roboter auf. Hinweis1: Roboter und Spielfeld sehen immer gleich aus. Hinweis2: Die Methode zählt nur als korrekt, wenn der Roboter durch sie tatsächlich auf dem farbigen Feld endet. Hinweis3: Sie dürfen die Methode fahreZumFarbigenFeld() nicht verändern. Es gibt eine Lösung, indem sie lediglich Variablen und Methoden hinzufügen. Tag7 (Finales Rätsel): Für diesen Tag gibt es keine einzelnen Aufgaben. Stattdessen können Sie diese letzte Aufgabe lösen. Hier ist es zwingend erforderlich sich vorher den Algorithmus zu überlegen. Ein 16x1 großes Spielfeld beginnt links mit farbigen Feldern und endet rechts mit weißen. An einem beliebigen Punkt im Spielfeld findet der Wechsel von farbig zu weiß statt. Schreiben Sie eine Methode, die den Roboter auf dem (von links gesehen) ersten weißen Feld platziert. Der gesamte Code darf dabei nur maximal vier Mal die Farbe überprüfen, auf welcher der Roboter gerade steht. (Es ist egal wie oft Sie die Methode in den Code schreiben. Es zählen die tatsächlichen Aufrufe, wenn der Roboter läuft.) Rufen Sie die Methode als einzigen Befehl für Ihren Roboter auf um Ihren Code zu testen. Hinweis1: Der Roboter startet immer ganz links mit Blick nach rechts. Hinweis2: Überlegen Sie sich vorher wie sie mit maximal vier Farbüberprüfungen in jedem Fall die eine Stelle in den 16 Feldern finden können. Hinweis3: Ein rekursiver Ansatz könnte hier helfen, die Aufgabe ist jedoch so gestellt, dass sie auch ohne lösbar ist. Hinweis4: Die Methode „isMarked()“ wurde hier so verändert, dass die jedes Mal auf der Konsole einen Hinweis ausgibt, wenn sie genutzt wird.