RoboTut

In dieser Tutorienreihe können Sie einen Roboter steuern. Der Roboter besitzt einen eingeschränkten Befehlssatz, den Sie durch eigene Funktionen erweitern können. Der Ursprung des Spielfeldes (Koordinaten (0,0)) befindet sich oben links. Wenn der Roboter an einer Kante das Spielfeld verlässt, so kommt er an der gegenüberliegenden Kante wieder herein. Die Ausrichtung behält er dabei bei.

Befehlssatz des Roboters:

forward():
einen Schritt vorwärts bewegen
right():
um 90° nach rechts drehen
look():
überprüfen, was auf dem Feld vor dem Roboter liegt (EMPTY, WALL, PILL)
take():
Pille aufheben (falls auf dem aktuellen Feld eine liegt)
drop():
Pille ablegen (falls bereits mindestens eine aufgehoben wurde)

Um die Aufgaben zu bearbeiten, müssen Sie jeweils die zugehörige .cpp-Datei bearbeiten. Dazu tragen Sie in die Methode run() einfach die Befehle ein, die der Roboter bearbeiten soll.

Für die ersten Aufgaben reicht es, die Folge der Befehle einzugeben, die der Roboter ausführen soll.In den weiteren Aufgaben müssen Sie eigene Befehle programmieren, indem Sie die Klasse Loesung erweitern und C++-Kontrollbefehle benutzen (if-else, while, for) und Variablen benutzen.

Installation

1.Laden Sie die Datei robotut.zip herunter.
2.Entpacken Sie die Datei mit dem Dateimanager oder über das Terminal mit folgendem Befehl:

   unzip robotut.zip


Kompilieren der Dateien

In der ZIP-Datei befinden sich auch zwei sogenannte Makefiles. Diese enthalten die Befehle, die ausgeführt werden müssen, um aus den Quellcode-Dateien die ausführbaren Dateien zu erzeugen.

Zum Kompilieren von aufgabe1 geben Sie folgende Befehle im Terminal ein:

  • cd robotut (um in den Ordner mit den entpackten Dateien zu gehen)
  • make -f Makefile.linux (erzeugen der ausführbaren Datei)
  • ./aufgabe1 (ausführen des Programms)

Alle Aufgaben sind so gestaltet, dass die Aufgabenstellung angezeigt wird, wenn das Programm ohne Änderungen ausgeführt wird.

Windows

Installieren Sie den MinGW compiler, wählen Sie im Installer unbedingt mingw32-g++ und mingw32-make. Laden Sie die Datei robotut.zip und entpacken Sie das Archiv.

Kompilieren Sie mit dem Befehl:

mingw32-make

Bei Problemen wenden Sie sich an einen Betreuer.

Aufgaben

Für alle Aufgaben gilt, dass das Spielfeld die Größe 10x10 hat. Kompilieren Sie das Programm zunächst einmal und führen es aus, um die Anfangssituation angezeigt zu bekommen. Durch drücken oder halten einer Taste setzen Sie die Ausführung ihres Programmes fort.

Sollten Sie das Programm nicht mit CTRL-C bzw. STRG-C abbrechen können, so öffnen Sie ein Terminal, geben xkill ein und klicken anschließend auf das Programmfenster.

Aufgabe 1

Der Roboter startet an Position (5, 5) und ist nach Norden ausgerichtet. Bewegen Sie ihn an Position (5, 4).

Aufgabe 2

Der Roboter startet an Position (5, 5) und ist nach Norden ausgerichtet. Bewegen Sie ihn an Position (6, 4).

Aufgabe 3

Der Roboter startet an Position (5, 5) und ist nach Norden ausgerichtet. Bewegen Sie ihn an Position (4, 4). Implementieren Sie dazu eine Methode left(), die den Roboter nach links dreht (also drei Mal right() ausführt).

Aufgabe 4

Der Roboter startet an Position (5, 5) und ist nach Norden ausgerichtet. Bewegen Sie ihn an Position (1, 9). Implementieren Sie dazu eine Methode nforward(n), die den Roboter n mal vorwärts bewegt.

Aufgabe 5

Der Roboter startet an Position (5, 5) und ist nach Norden ausgerichtet. Er ist von einer Wand umgeben, die an einer (wechselnden) Stelle unterbrochen ist. Bewegen Sie den Roboter aus dem Raum heraus, indem Sie die Lücke suchen und dann den Raum verlassen. Nutzen Sie dazu den Befehl look(), der die Art des Feldes vor dem Roboter zurückliefert (EMPTY, WALL, PILL).

Aufgabe 6

Ihr Roboter startet an Position (0, 0) und ist nach Osten ausgerichtet. An Position (x, 0), x > 0 liegt eine Pille. Lassen Sie den Roboter die Pille einsammeln und legen Sie sie an Position (0, 0) ab. Benutzen Sie dazu den Befehl take(), um die Pille aufzuheben und den Befehl drop(), um sie abzulegen. Wird take() auf einem leeren Feld benutzt, so führt der Roboter keine Aktion durch. Wird drop() benutzt, ohne zuvor eine Pille aufzuheben, so passiert auch nichts. Es kann mehr als eine Pille aufgenommen werden.

Aufgabe 7

Ihr Roboter startet an Position (0, 0) und ist nach Osten ausgerichtet. An Position (x, y), x > 0, y > 0 liegt eine Pille. Lassen Sie den Roboter die Pille einsammeln und legen Sie sie an Position (0, 0) ab.

Aufgabe 8

Ihr Roboter startet an Position (0, 0) und ist nach Osten ausgerichtet. Er hat einen Vorrat von n Pillen.

Legen Sie ab Position (1, 1) das größtmögliche ausgefüllte Quadrat aus Pillen aus.

Aufgabe 9

Ihr Roboter startet an Position (0, 0) und ist nach Osten ausgerichtet. Er hat einen Vorrat von n Pillen.

Legen Sie ab Position (1, 1) das größtmögliche nicht ausgefüllte Quadrat aus Pillen aus.

Aufgabe 10

Ihr Roboter startet an Position (0, 0) und ist nach Osten ausgerichtet.

Auf dem Spielfeld sind Pillen verteilt. Schieben Sie für jede Zeile alle Pillen an den linken Rand. Wenn also in einer Zeile drei Pillen an zufälligen Positionen liegen, so sollen sie nach Ausführung der Programms am linken Rand liegen.

Aufgabe 11

Ihr Roboter startet an Position (0, 0) und ist nach Osten ausgerichtet.

Auf dem Spielfeld sind Pillen verteilt. Schieben Sie für jede Zeile alle Pillen an den linken Rand. Wenn also in einer Zeile drei Pillen an zufälligen Positionen liegen, so sollen sie nach Ausführung der Programms am linken Rand liegen.

Anschließend sortieren Sie die Zeilen, so dass in der obersten Zeile die meisten Pillen und in der untersten die wenigsten liegen.

Aufgabe 12

Ihr Roboter startet an Position (8, 0) und ist nach Süden ausgerichtet. In Zeile 1 und 2 liegen zwei Zahlen in Binärdarstellung (0 = leeres Feld, 1 = Pille).

Führen Sie eine schriftliche Addition der beiden Zahlen durch. Das Ergebnis soll ebenfalls als Binärzahl in Zeile 3 ausgelegt werden.