Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
faecher:informatik:mittelstufe:robot:arbeitsauftraege:ab6:start [30.09.2021 10:47] – [Hinweis] sbel | faecher:informatik:mittelstufe:robot:arbeitsauftraege:ab6:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Auftrag AB6: Zählvariablen ====== | ||
- | Ein Notfallprogramm für den Roboter -- Wir haben Millionen in die Hardware des Roboters gesteckt und unendlich viel Zeit in die Implementierung der Software und seiner Verbesserungen gesteckt. 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. | ||
- | |||
- | |||
- | |||
- | ====== Die Roboter lernen zu zählen ====== | ||
- | |||
- | Wir sehen die Roboter in ihrer Welt agieren. Wir sehen auch, wie viel Energie sie noch haben. Mit '' | ||
- | |||
- | Wenn mehrere Roboter auf der Welt herum laufen, dann gibt jeder auf Nachfrage die für ihn richtige Antwort. Jeder Roboter führt darüber Buch. Jeder Roboter hat sein Gedächtnis. Dazu verwendet er eine // | ||
- | |||
- | Den Wert kannst du z.B. um 15 verringern, indem du dem Roboter den Befehl '' | ||
- | vorher waren (jedoch unterschreitet er 0 Energiepunkte nicht). | ||
- | |||
- | Den aktuellen Wert kannst du erfragen, indem du ihm die Anfrage '' | ||
- | |||
- | Die aktuellen Werte aller **Attribute** bestimmen den **Zustand** eines Roboters. | ||
- | |||
- | ==== Aufgabe 1 ==== | ||
- | |||
- | Erprobe an zwei Robotern '' | ||
- | den Zustand der Energie. Im Bild siehst du einen Roboter und sein '' | ||
- | |||
- | {{ .: | ||
- | |||
- | |||
- | ==== Aufgabe 2 ==== | ||
- | |||
- | Notiere, welche weiteren Eigenschaften des Roboters in Attributen gespeichert sind. Nenne jeweils mindestens eine Methode, mit denen Du die Werte der ganzzahligen Attribute ändern kannst. | ||
- | |||
- | ===== Attribute beschreiben Eigenschaften und Zustände ===== | ||
- | |||
- | |||
- | |||
- | Bei den Integer-Attributen kann man die Werte direkt sehen. Bei komplexeren Attributen (z.B. inventar) wird nur ein Pfeil angezeigt. Die Attribute sind komplexer und nicht mit einer einzelnen Zahl auszudrücken. Programmieren musst du das noch nicht. Aber durch Klicken auf den Pfeil kannst du dir anschauen, was dahinter steckt. Du kannst beispielsweise erkennen, wo der Roboter speichert, wie viele Gegenstände er in seiner Inventarliste hat. | ||
- | |||
- | |||
- | ==== Aufgabe 3 ==== | ||
- | |||
- | Lasse dir durch einen Klick auf den Pfeil hinter '' | ||
- | ==== Aufgabe 4 ==== | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== Was sind Variablen? ===== | ||
- | |||
- | Jede Variable, die die Werte für eine Eigenschaft speichert, kannst du dir als beschriftete Kiste vorstellen. Vorne steht der Name der Variable, damit die Kiste bzw. ihr Speicherplatz wiedergefunden werden kann. Namen von Variablen beginnen mit einem Kleinbuchstaben. Setzt sich der Name aus mehreren Wörtern zusammen, darf man keine Leerzeichen verwenden, sondern beginnt jedes neue Wort mit einem Großbuchstaben. Das bezeichnet man als Camel-Case. | ||
- | |||
- | In der Kiste gibt es zu jedem Zeitpunkt genau einen aktuell gültigen Wert. Mit set‑Methoden (und auch durch andere Methoden) werden neue Werte in die Kiste gebracht; mit der get‑Methode nach dem aktuellen Wert gefragt und dieser Wert dann dem Anfragenden als Ergebnis genannt. Dabei verbleibt der Wert unverändert in der Variable. So wie beim Abhören deines MP3-Players der Musikinhalt ja weiterhin gespeichert bleibt. | ||
- | |||
- | | {{ .:ab602.png }} || | ||
- | | //Die Zeichnungen zeigen zwei Variable vom Datentyp int. In solche Variable können nur ganze Zahlen (= Integer; daher int) gesteckt werden. Auch wenn die Bilder nur positive Ganzzahlen suggerieren, | ||
- | |||
- | |||
- | Der **Typ** der Variable legt die Größe der Kiste fest. | ||
- | |||
- | * In '' | ||
- | * Für größere Zahlen bräuchte man '' | ||
- | * Für Kommazahlen verwendet man '' | ||
- | |||
- | |||
- | ===== Aufgabe 4: Denk- und Sprechweisen ==== | ||
- | - Warum kann man sich Variablen als Kisten vorstellen? | ||
- | - Welche der vier Sprechweisen hältst du für gut? | ||
- | * Die Variable '' | ||
- | * Die Variable '' | ||
- | * Die Variable '' | ||
- | * '' | ||
- | ===== Aufgabe 5: Namensgebung ===== | ||
- | |||
- | Schlage sinnvolle Namen für Attribute vor, die speichern | ||
- | |||
- | - wie viele Akkus der Roboter besitzt. | ||
- | - wie viele Akkus der Roboter schon eingesetzt hat. | ||
- | - wie viele Drehungen er gemacht hat. (Was genau gibt die gespeicherte Zahl dann an? Wie werden Links- bzw. Rechtsdrehungen gespeichert? | ||
- | - wie viele Brennstäbe er schon gefunden hat. | ||
- | |||
- | ====== Eigene Attribute ====== | ||
- | |||
- | Der Roboter '' | ||
- | Dazu müssen drei Dinge erledigt werden: | ||
- | |||
- | * Das Attribut muss **deklariert** werden (die Kiste muss erschaffen werden): Oberhalb aller Methoden im Quelltext werden die Attribute angegeben. Die Deklaration beginnt mit '' | ||
- | |||
- | <code java> | ||
- | private int schritte; | ||
- | </ | ||
- | |||
- | * Der Wert des Attributs muss **initialisiert** werden (die Kiste muss einen sinnvollen Anfangswert erhalten): Dies macht man im sogenannten **Konstruktor**. Dies ist eine Methode mit dem gleichem Namen wie die Klasse (Achtung: Sie hat keinen Rückgabetyp, | ||
- | |||
- | <code java> | ||
- | this.schritte = 0; | ||
- | </ | ||
- | |||
- | * **Anmerkung: | ||
- | |||
- | ==== Aufgabe 6 ==== | ||
- | |||
- | Überprüfe im INSPECT-Fenster, | ||
- | |||
- | ==== Aufgabe 7 Schrittezähler ==== | ||
- | |||
- | Implementiere eine Methode '' | ||
- | |||
- | ==== Aufgabe 8 Drehzähler ==== | ||
- | |||
- | Führe ein neues Attribut '' | ||
- | |||
- | |||
- | ====== Get-Methoden ====== | ||
- | Wie bei den anderen Eigenschaften auch, soll der Roboter auch ohne Inspect-Fenster Auskunft darüber geben können, welchen Wert seine Attribute haben. Dazu brauchen wir '' | ||
- | |||
- | <code java> | ||
- | /** nennt die gesamten zurück- | ||
- | * gelegten Schritte */ | ||
- | public int getSchritte() { | ||
- | return this.schritte; | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | Statt '' | ||
- | |||
- | ==== Aufgabe 9: Eine get-Methode ==== | ||
- | |||
- | * Verändere die Methode '' | ||
- | * Warum enthält die Methode '' | ||
- | |||
- | ==== Aufgabe 10: Deine get-Methode ==== | ||
- | |||
- | Implementiere eine '' | ||
- | |||
- | ====== Einsatz 6: Das Notfallprogramm wird getestet ====== | ||
- | {{ .: | ||
- | |||
- | Der Roboter wird nicht immer so gut informiert, wie sein Einsatzgebiet aussieht. Unsere hohen Entwicklungskosten sollen nicht verloren gehen, nur weil der Roboter irgendwann mal den Ausgang nicht wiederfindet. Daher bekommt der Roboter ein Not-Programm mit dem er in beliebigen Umgebungen den Ausgang (gekennzeichnet durch das Portal) immer wiederfindet, | ||
- | |||
- | Geht das wirklich? Ja, John Pledge ein 12-jähriger Junge hat entdeckt, wie das geht. Wir müssen dazu nur Drehungen zählen können. | ||
- | |||
- | Seine Idee war folgendermaßen: | ||
- | |||
- | ===== Aufgabe ===== | ||
- | |||
- | Implementiere den Pledge-Algorithmus als Not-Programm (Methode '' | ||
- | |||
- | ===== Hinweis ===== | ||
- | |||
- | Im Bild siehst du ein Flussdiagramm des Pledge-Algorithmus. Es besteht aus ein paar Anweisungen, | ||
- | |||
- | ---- | ||
- | |||
- | [[..: | ||
- | |||
- | ---- | ||
- | |||
- | {{simplefilelist> | ||
- | |||
- | ---- | ||
- | Alle Arbeitsaufträge in diesem Namensraum basieren auf den Materialien von '' |