1.2 Lineare Programmabläufe
Sequenz
Kontrollstrukturen steuern den Ablauf eines Programms. Eine grundlegende Kontrollstruktur ist die Sequenz. Sie beschreibt einen linearen Programmablauf, bei dem die einzelnen Anweisungen in einer festgelegten Reihenfolge ausgeführt werden.
Aufgabe 1-1: Szenario – „Erste Schritte“
Ziel dieses Szenarios ist es, einen gelben Roboter auf dem Feld mit den Koordinaten (1; 2) des Spielbretts 1 zu platzieren und ihn mit einer Geschwindigkeit von 2 zum Zielfeld (3; 3) zu bewegen.

Ausgewählte Attribute und Methoden der Klasse Robot
Algorithmus
Ein Algorithmus beschreibt exakt, wie ein bestimmtes Problem gelöst werden kann (vereinfachte Definition).
Dies muss nicht zwingend in einer Programmiersprache erfolgen. Es kann sogar vorteilhaft sein, einen Lösungsweg zunächst unabhängig von den formalen Regeln einer Programmiersprache zu formulieren. Auf diese Weise kann sich der Programmierer ganz auf die eigentliche Problemlösung konzentrieren. Ist der Lösungsweg festgelegt, ist die eigentliche Problemlösung bereits erfolgt. Der Algorithmus muss dann nur noch in einer geeigneten Programmiersprache als Programm umgesetzt werden.
Struktogramm
Struktogramme stellen eine Möglichkeit dar, Algorithmen unabhängig von einer Programmiersprache zu beschreiben.
Ein Struktogramm ist eine grafische Darstellung eines Algorithmus. Dabei werden die einzelnen Anweisungen und Kontrollstrukturen durch verschiedene grafische Elemente dargestellt.
Jede Anweisung wird in einem Rechteck notiert. Bei einer Sequenz werden die Rechtecke der aufeinanderfolgenden Anweisungen untereinander angeordnet. Die Anweisungen werden von oben nach unten ausgeführt.
Auch der Algorithmus zur Lösung des Szenarios in Aufgabe 1-1 lässt sich als Struktogramm darstellen:


Aufgabe 1-1: Algorithmus dargestellt als Struktogramm – links in allgemein verständlicher Form, rechts angelehnt an die Java-Syntax
Übungsaufgaben
Aufgabe 1-2: Szenario – „Steine auf- und abladen“
Ziel dieses Szenarios ist es, dass ein blauer Roboter von Feld (1; 2) startend mit einer Geschwindigkeit von 3 das Zielfeld erreicht. Löcher können dabei mit zuvor aufgeladenen Steinen aufgefüllt und anschließend passiert werden.

Ausgewählte Attribute und Methoden der Klasse Robot
Hinweise zum Aufladen von Steinen
- Befindet sich auf dem Feld direkt vor dem Roboter ein Steinhaufen, kann mit
load()eine Einheit Steine aufgeladen werden. Bei jedem weiteren Aufladen erhöht sich die Anzahl der geladenen Steine um eine Einheit. Der Roboter kann maximal fünf Einheiten Steine tragen. - Beim Aufladen von Steinen wird der Steinhaufen jeweils um eine Einheit kleiner und verschwindet, wenn die letzte Einheit Steine aufgeladen wurde.
Hinweise zum Abladen von Steinen
- Mit
unload()kann der Roboter eine Einheit der geladenen Steine auf dem Feld direkt vor ihm abladen. Voraussetzung ist, dass das Feld Steine aufnehmen kann. Dies ist zum Beispiel bei einem Wegfeld möglich. - Durch das Abladen von Stein auf einem bisher leeren Feld entsteht dort ein Steinhaufen mit einer Einheit Steine. Die Anzahl der geladenen Steine reduziert sich entsprechend.
- Wird eine Einheit Stein auf einen bestehenden Steinhaufen abgeladen, erhöht sich dessen Größe entsprechend.
- Werden Steine in ein Erdloch gekippt, reduziert sich dessen Tiefe um eine Einheit. Ist das Erdloch komplett aufgefüllt, verschwindet es und ein Wegfeld erscheint.
Aufgabe 1-3: Szenario – „Sensoreinsatz“
Ein Roboter besitzt drei Sensoren. Einer ist nach vorne, einer nach links und einer nach rechts gerichtet. Jeder Sensor kann das Feld analysieren, das direkt vor ihm liegt.
Ziel dieses Szenarios ist es, den Einsatz der Sensoren zu testen. Dazu wird ein roter Roboter auf das Startfeld (2; 2) gesetzt. Der Roboter soll sich nicht bewegen, sondern lediglich mit Hilfe seiner Sensoren prüfen, ob das Feld direkt vor dem jeweiligen Sensor frei ist und somit grundsätzlich vom Roboter überquert werden könnte. Nach jedem Sensoreinsatz soll der Roboter das Ergebnis der Analyse melden. Die Meldung soll aus dem Text „Ist das Feld voraus frei?“ bestehen, an den die Antwort der eingesetzten Sensormethode angefügt wird.

Teilaufgaben
- Lesen Sie den Abschnitt Hinweise zum Einsatz der Sensoren. Erstellen Sie dann eine Anweisung, die auf den Frontsensor des
Robot-Objektsrobizugreift und dessen MethodeisFieldAheadFree()aufruft.
Testen Sie Ihren Programmcode. Die aufgerufene Methode gibt zwar eine Antwort zurück, der Programmcode nutzt diese aktuell jedoch nicht. Im nächsten Schritt soll die Antwort nun im Statusbereich angezeigt werden. - Lesen Sie den Abschnitt Hinweise zur Ausgabe der Meldungen. Erstellen Sie anschließend eine Anweisung, die das
Robot-Objektrobiauffordert, denStringIst das Feld voraus frei? im Statusbereich auszugeben.
Testen Sie Ihren Programmcode. Im nächsten Schritt soll an diesen Text die Antwort der unter 1. aufgerufenen Methode angefügt werden. - Lesen Sie den Merkekasten Stringverkettung. Passen Sie danach den Programmcode so an, dass der
StringIst das Feld voraus frei? und der Rückgabewert der MethodeisFieldAheadFree()zu einem neuen String verbunden werden und dieser anschließend im Statusbereich angezeigt wird. - Prüfen Sie nun, ob die Felder vor dem linken bzw. rechten Sensor frei sind und geben Sie die entsprechenden Meldungen aus.
Ausgewählte Attribute und Methoden der Klassen Robot und Sensor
Hinweise zum Einsatz der Sensoren
- Mit den Methoden
getSensorFront(),getSensorLeft()undgetSensorRight()kann das Roboter-Objekt aufgefordert werden, das entsprechendeSensor-Objekt zurückzugeben. Der Rückgabewert jeder dieser drei Methoden besitzt den DatentypSensor. Der Rückgabewert ist also einSensor-Objekt. Lesen Sie dazu den Merkekasten Rückgabewert. - Jedes
Sensor-Objekt verfügt über die MethodeisFieldAheadFree(). Beim Aufruf dieser Methode wird geprüft, ob das Feld direkt vor dem Sensor vom Roboter betreten oder zum Abladen von Gegenständen genutzt werden könnte. Die Methode gibt einen Wert vom Typboolean(Wahrheitswert) zurück. Dieser Datentyp besitzt nur die beiden möglichen Wertetrueundfalse. GibtisFieldAheadFree()den Werttruezurück, ist das Feld frei und kann vom Roboter betreten oder zum Abladen von Gegenständen genutzt werden. Andernfalls gibt die Methode den Wertfalsezurück.
Hinweise zur Ausgabe der Meldungen
- Wird die Methode
report(message: String)einesRobot-Objekts aufgerufen, muss zwischen den Klammern ein Wert vom TypString(Zeichenfolge) übergeben werden. Der übergebene Wert wird anschließend im Statusbereich ausgegeben.
Beispiel: Die Anweisungrobi.report("Hallo!");gibt im Statusbereich den Text „Hallo!“ aus. - Mehrere Textbausteine lassen sich mit dem Plus-Operator (+) zu einem neuen
Stringverbinden.
Beispiel: Die Anweisungrobi.report("Ich bin " + robi.getName() + "!");gibt im Statusbereich den Text ich bin robi! aus. Der Ausdruckrobi.getName()gibt den im Attributnamegespeicherten Wert zurück.
Methoden können nicht nur Anweisungen ausführen, sondern auch einen Wert eines bestimmten Datentyps zurückgeben (Rückgabewert). Ob eine Methode einen Wert zurückgibt, wird bei ihrer Definition festgelegt.
Die Auswertung eines solchen Methodenaufrufs ergibt den zurückgegebenen Wert (vgl. Merkekasten Ausdruck). Der Methodenaufruf kann daher überall dort verwendet werden, wo ein Wert des entsprechenden Datentyps benötigt wird.
Ein Ausdruck ist ein Teil des Quellcodes, der entweder direkt einen Wert darstellt oder dessen Auswertung einen Wert ergibt. Dieser Wert kann beispielsweise eine Zahl, eine Zeichenfolge oder ein Wahrheitswert sein.
Ein Attribut oder der Aufruf einer Methode, die einen Wert zurückgibt, ist damit ein Beispiel für einen Ausdruck.
Der Wertebereich des Datentyps boolean (Wahrheitswert) umfasst nur die beiden Werte true und false.
Der Plus-Operator (+) steht immer zwischen zwei Werten, den sogenannten Operanden. Sind beide Operanden Zahlen, so werden sie addiert. Ist jedoch mindestens einer der Operanden ein String (Zeichenkette), wird der andere – falls es kein String ist – automatisch in einen String umgewandelt und beide zu einem neuen String verbunden. Dieser Vorgang wird als Stringverkettung bezeichnet.