Sprünge funktionieren, machen Programme aber schnell unübersichtlich. Oft geht es eleganter: Das Ergebnis eines Vergleichs ist eine Zahl, und die kannst du direkt weiterverwenden.
Set-Befehle: Vergleich als Zahl
| Befehl | Register = 1, wenn |
|---|---|
sgt r? a b | a > b |
sge r? a b | a ≥ b |
slt r? a b | a < b |
sle r? a b | a ≤ b |
seq r? a b | a = b |
sne r? a b | a ≠ b |
sonst 0. Weil On genau 0 oder 1 erwartet, passt das perfekt:
l r0 d0 Temperature
sgt r1 r0 303.15 # 1, wenn waermer als 30 C
s d1 On r1 # Licht folgt direkt dem Vergleich
select: die Weiche
select r? bedingung a b legt a ins Register, wenn die Bedingung ungleich 0 ist, sonst b.
select r2 r1 Color.Red Color.Green
s d2 Color r2
Color.Red und Color.Green sind eingebaute Namen für Farbnummern (Rot = 4, Grün = 2). Die Farbe einer LED-Anzeige setzt man über den LogicType Color.
Und, oder, nicht
Mit 0/1-Werten kannst du logisch verknüpfen: and r3 r1 r2 ist 1, wenn beide 1 sind, or wenn mindestens einer 1 ist. „Nicht“ geht am einfachsten mit seqz r4 r1 (1 wird 0, 0 wird 1).
and/or arbeiten bitweise. Mit reinen 0/1-Werten ist das genau das logische Und/Oder – mit anderen Zahlen kommt Überraschendes heraus.
Schaubild
Übung
Aufgabe
Wie in der letzten Lektion, aber ohne bedingte Sprünge:
- Warnlicht
d1an, wenn mehr als 30 °C (303,15 K), sonst aus. - Die LED-Anzeige
d2zeigt die Temperatur in °C, rot wenn es zu heiß ist, sonst grün.
Nur j start für die Schleife ist erlaubt.
Hinweise
Hinweis 1
sgt r1 r0 303.15 legt 1 oder 0 in r1 – genau das, was On braucht.
Hinweis 2
Die Farbe: select r2 r1 Color.Red Color.Green und dann s d2 Color r2.
Hinweis 3
Die Zahl auf der Anzeige kommt wie gehabt über Setting.