9. Podmienka: IF, THEN, ELSEIF, ELSE, FI
Na čo to je
Program sa rozhoduje: niektoré príkazy vykoná, len keď niečo platí. „Ak je skóre viac ako rekord, vypíš gratuláciu.“
Ako sa to píše
Najkratší tvar:
IF podmienka THEN
príkazy ; vykonajú sa, len keď podmienka platí
FIPlný tvar:
IF podmienka THEN
príkazy ; keď platí prvá podmienka
ELSEIF iná podmienka THEN
príkazy ; keď prvá neplatí a druhá áno
ELSE
príkazy ; keď neplatí žiadna
FI| Slovo | Význam |
|---|---|
IF | „ak“ – začína podmienku |
THEN | „tak“ – za ním sú príkazy, ktoré sa vykonajú |
ELSEIF | „inak ak“ – ďalšia podmienka; môže ich byť koľkokoľvek |
ELSE | „inak“ – čo spraviť, keď neplatilo nič |
FI | koniec celého príkazu (IF odzadu) |
ELSEIF a ELSE sú nepovinné. FI je povinné vždy.
Porovnania
| Zápis | Platí, keď |
|---|---|
a=b | sa rovnajú |
a#b alebo a<>b | sa nerovnajú |
a<b | a je menšie |
a>b | a je väčšie |
a<=b | a je menšie alebo rovné |
a>=b | a je väčšie alebo rovné |
Znak = má v Action! dve úlohy. V príkaze x=5 je to priradenie, za IF je to porovnanie. Prekladač to spozná podľa miesta.
Spájanie podmienok
| Zápis | Platí, keď |
|---|---|
podm1 AND podm2 | platia obe |
podm1 OR podm2 | platí aspoň jedna |
Celý program
Súbor examples/if.act:
; Decisions
PROC Main()
BYTE age
Print("How old are you? ")
age=InputB()
PutE()
IF age<6 THEN
PrintE("You do not go to school yet.")
ELSEIF age<15 THEN
PrintE("You go to primary school.")
ELSEIF age<19 THEN
PrintE("You go to secondary school.")
ELSE
PrintE("You are grown up.")
FI
IF age>=13 AND age<=19 THEN
PrintE("You are a teenager.")
FI
IF age=0 OR age>120 THEN
PrintE("Is that really your age?")
FI
IF age#18 THEN
PrintE("You are not 18.")
FI
RETURNPreklad a spustenie
action26 if.act --simČo uvidíš
Po zadaní čísla 14:
How old are you? 14
You go to primary school.
You are a teenager.
You are not 18.Spusti program viackrát s rôznym vekom (3, 14, 17, 18, 40, 200) a sleduj, ktoré riadky sa vypíšu.
Ako to funguje
Prvý IF je reťaz. Podmienky sa skúšajú zhora nadol a vykoná sa len prvá vetva, ktorá platí. Pri veku 14 neplatí age<6, platí age<15 – vypíše sa „primary school“ a ostatné vetvy sa preskočia, hoci aj age<19 by platilo. Preto v druhej vetve netreba písať age>=6 AND age<15: keby bol vek menší ako 6, program by sa sem nedostal.
Ďalšie tri IF sú samostatné. Každý sa vyhodnotí zvlášť, takže sa môžu vypísať aj všetky.
age>=13 AND age<=19 je spôsob, ako zapísať „medzi 13 a 19“. Matematický zápis 13<=age<=19 Action! nepozná.
Časté chyby
| Čo sa stalo | Čo povie prekladač |
|---|---|
chýba THEN | error ACT012: missing THEN |
chýba FI | error ACT013: missing FI – často až na konci súboru |
== namiesto = (zvyk z jazyka C) | error ACT012: missing THEN: expected THEN, got '==' |
reťaz porovnaní (1<a<3) | error ACT023: illegal conditional expression |
Dve veci, ktoré prekladač nehlási:
ANDmá prednosť predOR.a=5 OR a=6 AND b=7znamenáa=5 OR (a=6 AND b=7). Keď miešašANDaOR, daj zátvorky – aj tam, kde nie sú nutné, pomôžu čitateľovi.- Podmienka bez porovnania.
IF lives THENplatí, keďlivesnie je nula. Je to dovolené a používa sa to, ale začiatočníkovi sa odporúča písať porovnanie celé:IF lives>0 THEN.
Vyskúšaj si
- Pridaj vetvu pre vek presne 18: „You have just come of age.“
- Načítaj dve čísla a vypíš väčšie z nich. Čo vypíšeš, keď sú rovnaké?
- Načítaj číslo a vypíš, či je párne alebo nepárne. (Pomôže
MODz kapitoly 7.)
Zhrnutie
IF podmienka THEN … FIvykoná príkazy, len keď podmienka platí.ELSEIFpridá ďalšiu podmienku,ELSEvetvu „inak“.- Z reťaze
IF … ELSEIF … ELSEsa vykoná vždy najviac jedna vetva. - Porovnania:
=,#(alebo<>),<,>,<=,>=. AND– obe,OR– aspoň jedna.ANDmá prednosť.
Späť: 8. Vstup · Ďalej: 10. Slučka