stationeers.de Mod-Werkstatt · Dominik1199
EN Anmelden
  1. Start
  2. IC10-Akademie
  3. Tag 304

Tag 304 von 365 · Experte · Monat 11: Optimierung und Fehlersuche

Zeilen sparen

Wenn das Zeilenlimit drückt: select statt Sprung, Unterprogramme für wiederkehrende Blöcke und Schleifen mit Namenstabelle statt viermal derselbe Code.

Lektion 18 Min. Woche 44

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.

FassungZeilen
vier Blöcke mit Sprüngen44
Schleife mit sgt29
Schleife für zwölf Tanks37
Achtung

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.

Tipp

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

Vergleich und select als Weiche temp = 313 sgt r1 temp 303 r1 = 1 select Color.Red Color.Green 4 wenn r1 ≠ 0 wenn r1 = 0
Ein Wenn-dann-sonst mit Sprüngen braucht sechs Zeilen, mit select zwei.

Ü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

Esc
↑ ↓ wählenEnter öffnen/ öffnet die Suche überall