Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
faecher:informatik:mittelstufe:robot:arbeitsauftraege:ab8:start [30.09.2021 11:23] – sbel | faecher:informatik:mittelstufe:robot:arbeitsauftraege:ab8:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Auftrag AB8: Wertzuweisungen====== | ||
- | Immer mehr Atommüll. Wie viel passt eigentlich noch in unser Endlager? Einige Räume im Endlager sind noch frei. Dort sollen Fässer eingelagert werden. Vorher muss aber bestimmt werden, wie viel Platz dort noch ist. | ||
- | |||
- | |||
- | **Ziel:** Lokale Variable als Zwischenspeicher für einen Wert kennen und einsetzen können. Lokale Variable von Objektvariablen unterscheiden können. Wertzuweisungen nutzen können. | ||
- | |||
- | |||
- | ===== Lokale Variable als Kurzzeitgedächtnis ===== | ||
- | |||
- | Manchmal muss sich der Roboter bestimmte Werte nur vorübergehend merken, um eine Aufgabe zu erfüllen. Wenn er z.B. die Schrauben einer lückenlosen Schraubenspur zählen soll, so muss er sich nur kurzfristig merken, wie viele Schrauben er schon gezählt hat und kann das wieder vergessen, sobald er die Antwort gegeben hat. | ||
- | Bisher hatten wir Attribute der Objekte als Gedächtnis. Diese sind aber nur für Werte gedacht, die der Roboter sich dauerhaft merken soll: z.B. wie viele Schritte er insgesamt schon gelaufen ist, welche x-Position er im Moment hat, u.ä. | ||
- | |||
- | Man könnte auch das „Kurzzeitgedächtnis“ mit Attributen realisieren, | ||
- | |||
- | Daher verwenden wir sogenannte lokale Variablen, deren Geltungsbereich nur eine Methode (oder auch nur eine Schleife) ist. Man verwendet sie fast genauso wie Attribute. | ||
- | |||
- | |||
- | |||
- | ^ ^Lokale Variable^Attribut^ | ||
- | ^Deklaration|Innerhalb der Methode: | ||
- | ^ |<code java> | ||
- | ... | ||
- | // | ||
- | | ||
- | int zaehler2; | ||
- | ... | ||
- | | ||
- | } | ||
- | ... | ||
- | } | ||
- | </ | ||
- | | ||
- | ... | ||
- | // | ||
- | .. | ||
- | } | ||
- | </ | ||
- | ^Initialisierung|Direkt nach der Deklaration: | ||
- | ^ |<code java> | ||
- | //Methoden | ||
- | public int berechneXY() { | ||
- | int zaehler2; | ||
- | zaehler2 = 0; | ||
- | ... | ||
- | } | ||
- | ... | ||
- | }</ | ||
- | // ohne Rückgabtyp | ||
- | public AB8() { | ||
- | this.zaehler1 = 0; | ||
- | } | ||
- | </ | ||
- | ^Verwendung|Ohne '' | ||
- | ^ |<code java> | ||
- | ... | ||
- | return zaehler2; | ||
- | </ | ||
- | ... | ||
- | return this.zaehler1; | ||
- | </ | ||
- | |||
- | |||
- | |||
- | ==== Aufgabe 1: Finde den Unterschied ==== | ||
- | |||
- | Rufe bei den beiden AB8-Robotern links oben die Methoden '' | ||
- | |||
- | Verschiebe die Roboter zurück an ihre Ausgangsposition und rufe die Methoden erneut auf. Erkläre den Unterschied. | ||
- | |||
- | |||
- | ==== Aufgabe 2: Debugging ==== | ||
- | {{ .: | ||
- | Öffne im Kontextmenü der Roboter den Punkt '' | ||
- | |||
- | * Warum sieht man hier nur den '' | ||
- | * Wo sieht man die //lokalen Variablen//? | ||
- | |||
- | Dafür benötigt man den // | ||
- | |||
- | - Setze dazu einen // | ||
- | - Rufe dann die Methode '' | ||
- | |||
- | Hilfe? -> https:// | ||
- | |||
- | ==== Aufgabe 3 ==== | ||
- | |||
- | Entscheide, ob die folgenden Werte besser als lokale Variable oder als Attribut gespeichert werden sollten: | ||
- | * die Farbe des Roboters | ||
- | * die Anzahl der insgesamt gelöschten Feuer | ||
- | * die Anzahl der mit dem aktuell benutzten Feuerlöscher gelöschten Feuer | ||
- | |||
- | ==== Aufgabe 4 ==== | ||
- | |||
- | Entscheide, ob man bei dem Pledge-Algorithmus die Anzahl der Drehungen auch als lokale Variable hätte speichern können. | ||
- | |||
- | ====== Wertzuweisungen ====== | ||
- | |||
- | Bisher haben wir Variablenwerte nur initialisiert (z.B. '' | ||
- | |||
- | {{ .: | ||
- | * An beliebigen Stellen im Programm kann der Variable ein Wert zugewiesen werden:< | ||
- | anzBlaetter = 13; | ||
- | </ | ||
- | |||
- | * Wertzuweisung um Ergebnisse von Methoden zu speichern:< | ||
- | anzSchritte = zaehleSchritteBisWand1(); | ||
- | </ | ||
- | |||
- | * Wertzuweisung mit Rechnungen:< | ||
- | </ | ||
- | |||
- | Grundsätzlich gilt: **Rechts vor Links!** Zuerst wird die Rechnung/ | ||
- | |||
- | {{ .:ab803.png |}} | ||
- | |||
- | |||
- | |||
- | ==== Aufgabe 5: Summe ==== | ||
- | |||
- | Rufe die Methode '' | ||
- | |||
- | ==== Aufgabe 6: Abstände ==== | ||
- | |||
- | Implementiere die Methode '' | ||
- | Aufrufs von '' | ||
- | Berechne die Differenz von '' | ||
- | |||
- | Teste diese Methode. Welches Ergebnis liefert sie, wenn du den Roboter an eine Wand nach rechts laufen lässt. Was passiert bei Robotern die nach links/ | ||
- | |||
- | Verbessere deine Methode so, dass sie immer den Abstand zur Wand zurück gibt. Dazu wirst du auch die y-Koordinaten speichern müssen. | ||
- | |||
- | Anmerkung: Ok, einfacher als Schritte zählen ist das nicht... | ||
- | |||
- | |||
- | ==== Aufgabe 7: Fläche ==== | ||
- | |||
- | |||
- | Implementiere eine Methode, die die Fläche eines Raumes (Breite * Höhe) bestimmt und zurück gibt. Du kannst davon ausgehen, dass der Roboter in einer Ecke des Raumes steht. Du kannst dir aussuchen in welcher. | ||
- | |||
- | ==== Aufgabe 8: Zähle Fässer ==== | ||
- | |||
- | |||
- | Implementiere eine Methode, die zurück gibt, aus wie vielen Fässern ein rechteckiges Areal von Fässern besteht. Sinnvoll ist es dazu zunächst einen Sensor istRechtsFass() zu implementieren. Damit kann man eine Methode gibLaengeFassreihe() implementieren, | ||
- | |||
- | ==== Aufgabe 9 ==== | ||
- | |||
- | |||
- | Gib an, welchen Wert die Variable summe hat, wenn folgende fünf Zeilen ausgeführt wurden: | ||
- | <code java> | ||
- | int summe; | ||
- | summe = 10; | ||
- | summe = summe – 2; | ||
- | summe = summe * 4; | ||
- | summe = summe + 6; | ||
- | </ | ||
- | |||
- | ==== Aufgabe 10: Sammler ==== | ||
- | |||
- | Implementiere eine Methode, die den Roboter bis zur nächsten Wand laufen lässt und dabei alles aufhebt, was auf dem Boden liegt. Dabei soll der Wert der gesammelten Gegenstände ermittelt werden. Jede Schraube ist dabei 20 Cent Wert, jeder Akku 2,40 Euro, jeder Schlüssel 5 Euro, jeder Feuerlöscher 40 Euro. Er soll dann mittels einer get-Methode jederzeit abgefragt werden können. | ||
- | Tipp: Überlege dir, ob du eine lokale Variable oder ein Attribut für den Wert verwenden möchtest. Kommazahlen kann man nicht in einer integer-Variable speichern. Dafür gibt es den Typ double. Kommazahlen werden in Java mit einem Punkt geschrieben (z.B. 2.40). | ||
- | |||
- | ==== Aufgabe 11: Finanzamt ==== | ||
- | |||
- | Auch Roboterfirmen müssen Steuern bezahlen. Für jeden gefundenen Gegenstand, der verkauft wird, muss Mehrwertsteuer bezahlt werden. Daher soll der Roboter mit getMehrwertsteuer() den Steuerbetrag der gefundenen Gegenstände berechnen können. Implementiere eine Methode, die die Steuer berechnet und zurück gibt. | ||
- | |||
- | |||
- | ====== Einsatz 8: Bestimme die Lagerkapazität des Endlagers ====== | ||
- | |||
- | Einige Räume im Endlager sind noch frei. Dort sollen Fässer eingelagert werden. Vorher muss aber bestimmt werden, wie viel Platz dort noch ist. | ||
- | |||
- | * Die Räume gehen alle nach rechts von einem Gang ab. | ||
- | * Man kommt immer am linken oberen Eck in den Raum. | ||
- | * Die ersten zwei Zeilen müssen frei bleiben, damit man mit dem Gabelstapler rangieren kann. Daher können die Fässer nur auf den gelben Feldern platziert werden. | ||
- | |||
- | Bestimme die Anzahl der gelben Felder und gehe zum Portal. Der Leveltest (also die Methode einsatz8()) muss als Ergebnis die Anzahl der Felder zurückgeben. | ||
- | |||
- | {{ : | ||
- | |||
- | ---- | ||
- | |||
- | [[..: | ||
- | |||
- | ---- | ||
- | Alle Arbeitsaufträge in diesem Namensraum basieren auf den Materialien von '' |