**** BEGINN ÄNDERUNGEN SCHALLER (Version 11.11.2021)
Titel: Hintergrund - neue Email-Adresse von Tom

alle Flussdiagramme durch Struktogramme ersetzen ? (Flussdiagramme stehen nicht im Bildungsplan) Hintergrund S. 7, 9, 10, AB3, AB4, usw.

AB1
Steuere den Roboter AB1 mit passenden Befehlen aus dem Kontextmenü (Rechtsmausklick auf den Roboter im Szenario)

Musterlösungen / JavaCode
AB5
Einsatz 5 Lösung korrigiert.

AB8
Präzessierung der Aufgabe für das Zählen der Fässer.

AB9
fahreAufzug erkennt, wenn eine Wand vor ihm ist
**** ENDE ÄNDERUNGEN SCHALLER (Version 11.11.2021)


**** BEGINN ÄNDERUNGEN SCHALLER (Version 02.02.2020)
- Hinweis auf Urheberschaft vom Schönigh-Verlag entfernt
**** ENDE ÄNDERUNGEN SCHALLER (Version 02.02.2020)



**** BEGINN ÄNDERUNGEN SCHALLER (Version 29.12.2019)
- "Roboter hat keine kraft mehr" in "Roboter hat keine Energie mehr" geändert.
- Neue Methode "ladeSecretDatei" in der Welt, mit der Secret Dateien geladen werden können.
- Im Hintergrund erläutert, dass Einsätze auch nur als Bonusaufgaben verwendet werden können.
**** ENDE ÄNDERUNGEN SCHALLER (Version 29.12.2019)


**** BEGINN ÄNDERUNGEN SCHALLER (Version 11.12.2019) ****
Bad Wildbad Gruppe Ka:

- Im Lösungsdokument für AB4 Aufgabe 8 fehlen Lösungen. In b) ist alter nur dann koorekt, wenn boolean
- Einsatz 8: Rückmeldung zu Einsatz nicht geschafft muss mehr Infos geben: "du hast xx gezählt, es waren aber yy Felder"
- AB7 Aufgabe 9: Fett markieren "Einsatz 6 am Roboter aufrufen" nicht an der 
- API für Gegenstnad ablegen "Brennstab" hinzufügen
- AB9 Aufgabe 9: 2er Reihe Brennstäbe -> Bild einfügen

Bad Wildbad Gruppe Fr:

Generell:
Zu allen "EinsŠtze" gibt es ein Bild, in dem man sich einen Eindruck von dem zu lšsenden Level (Ÿber 2 Sekunden hinaus) machen kann.

AB3 Einsatz 3:
Tipp eingefügt, dass das Feuer zusammenhŠngend ist.
Eventuell zusŠtzlicher Tipp, dass man geschickter zeilen- statt spaltenweise durchgehen sollte

AB4 Einsatz 4:
Die Schalter sind nur auf der SŸdseite des Zielraumes: "An der Wand links der Tür"

AB7 Aufgabe 4:
"...innerhalb dieser Methode die gleiche Methode..." -> "gleichnamige Methode"

AB9 Aufgabe 3
Tipp 2 entfernt, weil sonst die Methode eigentlich ŸberflŸssig ist.

AB9 Einsatz 9
Im Bild Sprengpositionen markiert.


**** ENDE ÄNDERUNGEN SCHALLER (Version 11.12.2019) ****


**** BEGINN ÄNDERUNGEN NOPPER (Version 3.12.2019) ****

AB1
Zunächst lernst du im Robo-Trainingsgebäude den Roboter zu steuern
Zunächst lernst du, im Robo-Trainingsgebäude den Roboter zu steuern

Erzeuge nun einen zweiten Roboter vom Typ AB1 (rechte Maustaste auf AB1, dann new AB1()), s
Erzeuge nun einen zweiten Roboter vom Typ AB1 (siehe Bild rechts: Rechte Maustaste auf AB1, dann new AB1())

Was geschieht, wenn du einen Roboter aufforderst eine Schraube abzulegen
Was geschieht, wenn du einen Roboter aufforderst, eine Schraube abzulegen


AB2
Daher muss der Roboter schnell lernen sich alleine zu bewegen.
Daher muss der Roboter schnell lernen, sich alleine zu bewegen.

Welche Befehle bietet dir ein AB2-Roboter in seinem Kontextmenü direkt an? Öffne nun den Quelltext. Diesen kannst du dir mit „Editor öffnen“ (oder alternativ Doppelklick auf die Klasse AB2) anzeigen lassen.
Welche Befehle bietet dir ein AB2-Roboter in seinem Kontextmenü direkt an? Öffne nun den Quelltext; diesen kannst du dir mit einem Rechtsklick auf die AB2-Klasse im rechten Fenster mit „Editor öffnen“ (oder alternativ Doppelklick auf die Klasse AB2) anzeigen lassen.

Steuere ihn noch ein letztes Mal von Hand durch einzelne Befehle so, dass er eine Runde dreht wie im Bild (siehe rechts).
Steuere den Roboter noch ein letztes Mal von Hand durch einzelne Befehle so, dass er eine Runde dreht wie im Bild (siehe rechts).

Wir üben wieder im Testgelände mit Schrauben, aber im Kernkraftwerk werden es, herumliegende Brennstäbe sein.
Wir üben wieder im Testgelände mit Schrauben, aber im Kernkraftwerk werden es herumliegende Brennstäbe sein.

Teste die neue Methode indem du beim Roboter vor den drei Schrauben die Methode aufrufst.
Teste die neue Methode, indem du beim Roboter vor den drei Schrauben die Methode aufrufst.

Sorge dafür dass die AB2-Roboter auch frei stehende Wände umlaufen können (s. Bild rechts).
Sorge dafür, dass die AB2-Roboter auch frei stehende Wände umlaufen können (s. Bild rechts).


AB3
Der Roboter AB3 ganz oben links soll den Feuerlöscher aufnehmen, der vor ihm steht, damit auf das Feld vor dem Feuer (nicht auf das Feuer!!!) gehen und es löschen.
Der Roboter AB3 ganz oben links soll den vor ihm stehenden Feuerlöscher aufnehmen, damit auf das Feld vor dem Feuer (nicht auf das Feuer!!!) gehen und es löschen.

Es gibt Methoden, die benötigen eine Zusatzinformation (einen sogenannten Parameter) um korrekt arbeiten zu können.
Es gibt Methoden, die eine Zusatzinformation (einen sogenannten Parameter) benötigen, um korrekt arbeiten zu können.

Die weiteren Roboter darunter, sollen ihre ersten Feuer in der Reihe auch mit dem Befehl loesche() löschen können.
Die weiteren Roboter darunter sollen ihre ersten Feuer in der Reihe auch mit dem Befehl loesche() löschen können.

Setze diese Methode sinnvoll in der loesche()-Methode ein, in dem du einige Zeilen deines Quelltextes durch den Befehl vorBisFeuer(); ersetzt.
Setze diese Methode sinnvoll in der loesche()-Methode ein, indem du einige Zeilen deines Quelltextes durch den Befehl vorBisFeuer(); ersetzt.

Teste die nun neue loesche()-Methode an allen vier Löschrobotern.
Teste nun die neue loesche()-Methode an allen vier Löschrobotern.

Um diese zu löschen muss man immer wieder löschen, dann einen Schritt gehen, dann wieder löschen usw.
Um diese zu löschen, muss man immer wieder löschen, dann einen Schritt gehen, dann wieder löschen usw..

Ersetzte anschließend in deiner loesche-Methode das Benutzen des Feuerlöschers durch die neue Methode loescheReihe().Teste die Veränderung.
Ersetze anschließend in deiner loesche-Methode das Benutzen des Feuerlöschers durch die neue Methode loescheReihe().Teste die Veränderung.

Verwende eine while-Schleife um zu überprüfen, ob der Feuerlöscher noch nicht leer ist.
Verwende eine while-Schleife, um zu überprüfen, ob der Feuerlöscher noch nicht leer ist.

Vor dem Roboter unten links ist ein Gang, mit vielen Feuerlöschern in den Nischen (drücke ggf. unten auf den Reset-Knopf).
Vor dem Roboter unten links ist ein Gang mit vielen Feuerlöschern in den Nischen (drücke ggf. unten auf den Reset-Knopf).

Wir wissen nicht wie groß das Feuer schon ist.
Wir wissen nicht, wie groß das Feuer schon ist.

Versuche zunächst nur die erste Reihe Feuer zu löschen und wieder nach rechts zur Wand zu laufen. Drehe den Roboter wieder so, dass er nach unten Blickt (Ausgangsstellung).
Versuche zunächst, nur die erste Reihe Feuer zu löschen und danach wieder nach rechts zur Wand zu laufen. Drehe den Roboter wieder so, dass er nach unten blickt (Ausgangsstellung).

Wiederhole diese mit einer While-Schleife solange das Protal noch nicht erreicht ist (Warum erreicht man es automatisch?).
Wiederhole diese mit einer While-Schleife, solange das Protal noch nicht erreicht ist (warum erreicht man es automatisch?).

Im Quelltext werden Wiederholungen geschrieben mit dem Schlüsselwort while im Schlei­fenkopf und dahinter der Ausführungsbedingung in runder Klammer() sowie dem Schleifen­rumpf innerhalb des Blockklammerpaares {...}.
Im Quelltext schreibt man Wiederholungen mit dem Schlüsselwort while im Schlei­fenkopf und dahinter eine Ausführungsbedingung in runder Klammer() sowie einen Schleifen­rumpf innerhalb des Blockklammerpaares {...}.



AB4
Wie unterscheidet sich die Form der Entscheidung in den beiden Methoden.
Wie unterscheidet sich die Form der Entscheidung in den beiden Methoden?


Zeichne für jeden der vier AB4 ein, wie sie sich be­wegen, wenn sie diese Anweisungen aus­führen:
Zeichne für jeden der vier AB4-Roboter ein, wie sie sich be­wegen, wenn sie diese Anweisungen aus­führen:

WENN -> FALLS
Alternativen in Handlungen erkennen, als WENN-DANN-SONST-Entschei­dungen formulieren und in Programmiersprache umsetzen können.
Alternativen in Handlungen erkennen, als FALLS-DANN-SONST-Entschei­dungen formulieren und in Programmiersprache umsetzen können.

Wie verhält sich der Roboter, wenn er auf einer Schraube steht?
Wie verhält sich der Roboter, falls er auf einer Schraube steht?

Wie wenn er auf einem leeren Feld steht?
Wie verhält er sich, falls er auf einem leeren Feld steht?

Implementiere eine Methode umgeheOelfleck(), die den Roboter einen Schritt nach vorne gehen lässt, wenn kein Ölfleck vor ihm ist.
Implementiere eine Methode umgeheOelfleck(), die den Roboter einen Schritt nach vorne gehen lässt, falls kein Ölfleck vor ihm ist.

Schreibe eine Methode sammleSchluessel(), die einen Schlüssel aufnimmt, wenn der Roboter auf einem steht.
Schreibe eine Methode sammleSchluessel(), die einen Schlüssel aufnimmt, falls der Roboter auf einem steht.

Der Roboter soll einen Schlüssel aufheben, wenn er an der Startposition liegt.
Der Roboter soll einen Schlüssel aufheben, falls er an der Startposition liegt.

Wenn er vor einem Schloss steht (istVorne(''Schloss'')), soll er den Schlüssel benutzen (benutze(''Schluessel'')), andernfalls den Schalter benutzen (benutze(''Schalter'')).
Falls er vor einem Schloss steht (istVorne(''Schloss'')), soll er den Schlüssel benutzen (benutze(''Schluessel'')), andernfalls den Schalter benutzen (benutze(''Schalter'')).

Sorge dafür, dass er sich nach links dreht, wenn links frei ist. Wenn rechts frei ist, nach rechts
Sorge dafür, dass er sich nach links dreht, falls links frei ist. Falls rechts frei ist, nach rechts

Dies wird gelesen als: Wenn NICHT vorne frei ist ... oder Wenn Vorne frei falsch ist ... oder Wenn Vorne nicht frei ist ... 
Dies wird gelesen als: „Falls NICHT vorne frei ist...“ oder „Falls vorne frei falsch ist...“ oder „Falls vorne nicht frei ist...“.



AB5
Diese soll true zurückgeben, wenn der Roboter nur noch weniger als 20 Energiepunkte hat (Überprüfung mit getEnergie()<20).
Diese soll true zurückgeben, falls der Roboter nur noch weniger als 20 Energiepunkte hat (Überprüfung mit getEnergie()<20).

Aber nur wenn vor dem Fass Platz ist.
Aber nur, wenn vor dem Fass Platz ist.

Diese soll false zurückgeben, wenn vor dem Fass eine Wand ist.
Diese soll false zurückgeben, falls vor dem Fass eine Wand ist.

Wenn ja, gibt er true zurück, sonst false.
Falls ja, gibt er true zurück, sonst false.

In diesem Arbeitsblatt lernst du neue (komplexere) Sensoren selbst zu erstellen.
In diesem Arbeitsblatt lernst, du neue (komplexere) Sensoren selbst zu erstellen.

Es werden also keine Befehle mehr nach dem Return ausgeführt.
Es werden also keine Befehle mehr nach dem Ausführen eines Return ausgeführt.

Am Ende soll er aber wieder so stehen, wie am Anfang.
Am Ende soll er aber wieder so stehen wie am Anfang.

Geht man geradeaus weiter liegt dort eine Reihe von Akkus.
Geht man geradeaus weiter, liegt dort eine Reihe von Akkus.



AB6
Daher soll der Roboter ein Notfallprogramm bekommen mit dem er jederzeit den Ausgang wiederfinden kann, wenn er sich in einem zerstörten Kraftwerk befindet und der normale Rückweg plötzlich versperrt ist…
Daher soll der Roboter ein Notfallprogramm bekommen, mit dem er jederzeit den Ausgang wiederfinden kann, wenn er sich in einem zerstörten Kraftwerk befindet und der normale Rückweg plötzlich versperrt ist…

Man sagt der Typ des Attributs ist integer (engl. für Ganzzahl).
Man sagt: Der Typ des Attributs ist integer (engl. für Ganzzahl).

So wie beim Abhören deines MP3-Players der Musikinhalt ja weiterhin gespeichert bleibt.
So wie beim Anhören eines Musikstücks auf deinem Smartphone der Musikinhalt ja weiterhin gespeichert bleibt.

Dort wird der Wert von schritte auf 0 gesetzt. schritte = 0;
Dort wird der Wert von schritte auf 0 gesetzt. Um zu verdeutlichen, dass dieses Attribut zu dem Roboter gehört, schreibt man statt „schritte“ immer „this.schritte“: this.schritte = 0;

In der Methode einsVorMitZaehlen() wird der Wert des neuen Attributs um 1 erhöht: schritte++; und dann die normale einsVor()-Methode aufgerufen.
In der Methode einsVorMitZaehlen() wird der Wert des neuen Attributs um 1 erhöht: this.schritte++; und dann die normale einsVor()-Methode aufgerufen.

Dazu verwenden wir einfach den Namen des Attributs: return this.schritte;
Dazu verwenden wir einfach den Namen des Attributs: return schritte;

/** nennt die gesamten zurück- 
 * gelegten Schritte */
public int getSchritte() {
    return schritte;
}
/** nennt die gesamten zurück- 
 * gelegten Schritte */
public int getSchritte() {
    return this.schritte;
}

Daher bekommt der Roboter ein Not-Programm mit dem er in beliebigen Umgebungen den Ausgang (gekennzeichnet durch das Portal) immer wiederfindet, egal wie viele Ecken und Wände im Weg sind.
Daher bekommt der Roboter ein Not-Programm, mit dem er in beliebigen Umgebungen den Ausgang (gekennzeichnet durch das Portal) immer wiederfindet, egal wie viele Ecken und Wände im Weg sind.

Ja, John Pledge ein 12-jähriger Junge hat entdeckt, wie das geht.
Ja, John Pledge, ein 12-jähriger Junge, hat entdeckt, wie das geht.


Hinweis: korrigiere die Befehle (wie beispielsweise wandLinks()) falls nötig!
Hinweis: Korrigiere die Befehle (wie beispielsweise wandLinks()), falls nötig!


AB7
Im AB5 hast du viele neue Sensoren für den Roboter programmiert, in AB6 hat er gelernt Schritte und Drehungen zu zählen.
Im AB5 hast du viele neue Sensoren für den Roboter programmiert, in AB6 hat er gelernt, Schritte und Drehungen zu zählen.

Verändere die Klasse AB6_AB7 so, dass sie nicht mehr eine direkte Unterklasse von Roboter sondern eine Unterklasse des AB5-Roboters ist.
Verändere die Klasse AB6_AB7 so, dass sie nicht mehr eine direkte Unterklasse von Roboter, sondern eine Unterklasse des AB5-Roboters ist.

Um die alte Methode aufzurufen musst du beim AB6_AB7-Roboter super.einsVor(); schreiben (lies: rufe die Methode einsVor() bei der übergeordneten Klasse auf).
Um die alte Methode aufzurufen, musst du beim AB6_AB7-Roboter super.einsVor(); schreiben (lies: rufe die Methode einsVor() bei der übergeordneten Klasse auf).

Verschiebe zum Testen das Fass vor dem Roboter oben links, damit er einen Gang mit Kreuzungen vor sich hat.
Verschiebe zum Testen mit der Maus das Fass vor dem Roboter oben links, damit er einen Gang mit Kreuzungen vor sich hat.

Eventuell reicht die Energie nicht aus um das Bergwerk zu verlassen.
Eventuell reicht die Energie nicht aus, um das Bergwerk zu verlassen.

Ändere die überflüssig gewordene Methode bisWandMitZaehlen(), so dass sie zählt, wie viele Brennstäbe auf dem Weg zur Wand liegen (wir verwenden auf dem Testgelände natürlich nur ungefährliche Attrappen, die aber täuschend echt aussehen). 
Ändere die überflüssig gewordene Methode bisWandMitZaehlen(), so dass sie in einem neuen Attribut brennstaebe zählt, wie viele Brennstäbe auf dem Weg zur Wand liegen (wir verwenden auf dem Testgelände natürlich nur ungefährliche Attrappen, die aber täuschend echt aussehen).

Überschreibe die Methoden istWandVorne() und istWandLinks() so, dass sie true zurückgeben, wenn wirklich eine Wand vorne (super.istWandVorne()) bzw. links (super.istWandLinks()) ist oder wenn ein Fass vorne bzw. links ist.
Überschreibe die Methoden istWandVorne() und istWandLinks() so, dass sie true zurückgeben, falls wirklich eine Wand vorne (super.istWandVorne()) bzw. links (super.istWandLinks()) ist oder falls ein Fass vorne bzw. links ist.


AB8
In Skelettcode waren teilweise falsche Aufgabennummen; korrigiert


Was passiert bei Robotern die nach links/oben/unten laufen? 
Was passiert bei Robotern, die nach links/oben/unten laufen? 

Du kannst dir aussuchen in welcher.
Du kannst dir aussuchen, in welcher.

Sinnvoll ist es dazu zunächst einen Sensor istFassRechts() zu implementieren.
Es ist sinnvoll, zunächst einen Sensor istFassRechts() zu implementieren.




AB9
Die Verwendung von "Etage" ist missverständlich, wenn direkt danach "Stockwerk" verwendet wird.
Ich habe jetzt jedes Vorkommen von "Etage" durch "Stockwerk" ersetzt und definiert.



Eine Einsatzleiter wurde bestimmt, die anstehenden heiklen Arbeiten zu koordinieren.
Ein Einsatzleiter wurde bestimmt, die anstehenden heiklen Arbeiten zu koordinieren.

Manchmal ist es auch erforderlich mehrere Parameter anzugeben.
Manchmal ist es auch erforderlich, mehrere Parameter anzugeben.

Markiere im untenstehenden Bild alle Methoden, die beim Aufruf eine Eingabe verlangen.
Markiere im unten stehenden Bild alle Methoden, die beim Aufruf eine Eingabe verlangen.

Vervollständige die Methode public void dreheRoboter(int richtung), der den Roboter in die angegebene Richtung dreht (0=Blick nach rechts, 90=Blick nach unten, …).
Vervollständige die Methode public void dreheRoboter(int richtung), die den Roboter in die angegebene Richtung dreht (0=Blick nach rechts, 90=Blick nach unten, …).

Wie du schon richtig erkant hast, schauen wir nun nicht mehr auf die Roboterwelt von oben, sondern wir betrachten einen Querschnitt eines Bergwerks.
Wie du schon richtig erkannt hast, schauen wir nun nicht mehr auf die Roboterwelt von oben, sondern wir betrachten einen Querschnitt eines Bergwerks.

Bisher muss ein Roboter nach unten bzw. nach oben schauen und einsVor gehen, damit der Aufzug eine Etage nach unten bzw. nach oben fährt.
Bisher muss ein Roboter nach unten bzw. nach oben schauen und einsVor gehen, damit der Aufzug ein Stockwerk nach unten bzw. nach oben fährt.

Vervollständige die Methode public void fahreAufzug(int etagen, boolean abwaerts), die einen Roboter, der auf einem Aufzug steht (istAufGegenstand(„Aufzug“)?), die angegebe Anzahl von Etagen abwärts oder aufwärts fahren lässt.
Vervollständige die Methode public void fahreAufzug(int etagen, boolean abwaerts), die einen Roboter, der auf einem Aufzug steht (istAufGegenstand(„Aufzug“)?), die angegebene Anzahl von Etagen abwärts oder aufwärts fahren lässt.


    5. Fahre Aufzug: Vervollständige die Methode public void fahreAufzug(int etagen, boolean abwaerts), die einen Roboter, der auf einem Aufzug steht (istAufGegenstand(“Aufzug“)?), die angegebene Anzahl von Etagen abwärts oder aufwärts fahren lässt. Diese Methode soll funktionieren, egal in welche Richtung der Roboter am Anfang schaut. Steht der Roboter nicht auf einem Aufzug, soll nichts passieren.
       Bedenke: Die Roboter können in leere Aufzugsschächte stürzen, da man in diesem Level nicht von oben sondern von vorne auf die Welt schaut.
    6. Fahre ins Stockwerk: Implementiere die Methode public void fahreInsStockwerk(int etage). Dabei werden die Stockwerke vom Boden ab abwärts gezählt (blaue Koordinate).

    5. Fahre Aufzug: Vervollständige die Methode public void fahreAufzug(int stockwerke, boolean abwaerts), die einen Roboter, der auf einem Aufzug steht (istAufGegenstand(“Aufzug“)?), die angegebene Anzahl von Stockwerken (ein Stockwerk entspricht einem Schritt) abwärts oder aufwärts fahren lässt. Diese Methode soll funktionieren, egal in welche Richtung der Roboter am Anfang schaut. Steht der Roboter nicht auf einem Aufzug, soll nichts passieren.
       Bedenke: Die Roboter können in leere Aufzugsschächte stürzen, da man in diesem Level nicht von oben sondern von vorne auf die Welt schaut.
    6. Fahre ins Stockwerk: Implementiere die Methode public void fahreInsStockwerk(int stockwerk). Dabei werden die Stockwerke vom Boden ab abwärts gezählt (blaue Koordinate).


Bild ausgetauscht

AB10

Daher gibt es in den Programmiersprachen die Möglichkeit solche Wieder­holungen zu notieren.
Daher gibt es in den Programmiersprachen die Möglichkeit, solche Wieder­holungen zu notieren.

Analysiere das Verhalten der nebenstenden Methode (Welche Aufgabe erledigt der Roboter?). 
Analysiere das Verhalten der nebenstehenden Methode (Welche Aufgabe erledigt der Roboter?). 


**** ENDE ÄNDERUNGEN NOPPER ****

**** ÄNDERUNGEN SCHALLER (Version 3.12.2019) *******

Im Lösungsdokument für AB1 die Nummerierung der Aufgaben angepasst

**** ENDE ÄNDERUNGEN ***********

**** ÄNDERUNGEN NOPPER (Version 3.12.2019) *******

AB2 und AB7: Bildquellen als einziges auf neue Seite gerutscht -> auf die vorherige geholt (2 Seiten weniger Ausdruck)

**** ENDE ÄNDERUNGEN ***********

