Das lernst du heute
- select statt Sprung
- Unterprogramme
- Schleifen statt Wiederholung
Vier Tanks, vier Lampen: voll oder nicht. Der erste Entwurf hat für jeden Tank denselben Block mit Sprüngen, zusammen 44 Zeilen. Bei vier Tanks geht das noch. Bei zwölf nicht mehr – und spätestens dann lohnt sich ein Blick auf die drei Werkzeuge zum Zeilensparen.
select statt Sprung
Ein Wenn-dann-sonst mit Sprüngen braucht ein Label für jeden Zweig und einen Sprung über den anderen:
bgt druck VOLL voll1
sbn LAMPE HASH("T1") On 0
j weiter1
voll1:
sbn LAMPE HASH("T1") On 1
weiter1:
Dasselbe mit einem Vergleichsbefehl, der 0 oder 1 liefert:
sgt voll druck VOLL
sbn LAMPE HASH("T1") On voll
Aus sechs Zeilen werden zwei. Wo zwei verschiedene Zahlen gemeint sind, nimmst du select – select farbe voll Color.Red Color.Green ersetzt einen ganzen Zweig.
Unterprogramme
Wiederholt sich ein Block, der mehr tut als zwei Zeilen, wird er zum Unterprogramm (Tag 127): einmal geschrieben, mit jal mehrfach aufgerufen. Die Werte gibst du über Register mit. Jeder Aufruf kostet zwei bis vier Zeilen statt des ganzen Blocks.
Schleifen statt Wiederholung
Unterscheiden sich die Wiederholungen nur durch den Gerätenamen, ist eine Schleife noch kürzer. Die Namen liegen in einer Tabelle im Stack, die Schleife geht sie durch:
schleife:
get name db i
lbn druck TANK name Pressure Average
sgt voll druck VOLL
sbn LAMPE name On voll
add anzahl anzahl voll
add i i 1
blt i ANZAHL schleife
Für einen fünften Tank kommt eine poke-Zeile dazu und ANZAHL wird 5. Der Rest bleibt.
| Fassung | Zeilen |
|---|---|
| vier Blöcke mit Sprüngen | 44 |
Schleife mit sgt | 29 |
| Schleife für zwölf Tanks | 37 |
Kürzer heißt nicht schneller. Die Schleife führt pro Tank etwas mehr Befehle aus als der ausgeschriebene Block – Labels und der Rücksprung kosten auch. Mehr dazu morgen beim Befehlsbudget.
Lampe und Rohr-Analysator am Tank tragen hier denselben Namen. Weil sbn zusätzlich den Gerätetyp prüft, trifft sbn LAMPE name … nur die Lampe. So reicht eine Namenstabelle für beide.
Schaubild
Übung
Aufgabe
Der Startcode macht alles richtig, aber mit vier gleichen Blöcken voller Sprünge. Schreib ihn als Schleife über eine Namenstabelle „T1“–„T4“ neu, ohne bedingte Sprünge außer dem Rücksprung der Schleife (blt):
- Lampe „Tn“ an, wenn der Tank „Tn“ mehr als 5000 kPa hat
- Anzeige „Volle“ zählt die vollen Tanks
- ein fehlender Tank gilt als nicht voll
Hinweise
Hinweis 1
Vor start: vier poke-Zeilen mit den Namen-Hashes.
Hinweis 2
In der Schleife: get name db i, lbn … name Pressure Average, sgt voll druck VOLL.
Hinweis 3
sgt mit NaN ergibt 0 – der fehlende Tank zählt damit von selbst nicht.
Quiz
3 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.
Tag abschließen
- Übung im Simulator bestanden
- Quiz mit mindestens 60 % bestanden
Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.
Fehler in dieser Lektion melden
Zum Melden bitte anmelden. Anmelden