27. Podmienka na viac riadkov: IF, ELSE, ENDIF
Na čo to je
V Atari BASICu patrí k IF len zvyšok jedného riadka a „inak“ sa píše druhým IF s opačnou podmienkou. Turbo-BASIC XL vie podmienku, ktorá má telo cez viac riadkov a vetvu inak.
Ako sa to píše
IF podmienka
príkazy, keď platí
ELSE
príkazy, keď neplatí
ENDIF
| Slovo | Význam |
|---|---|
IF podmienka | bez THEN – tým sa začína blok |
ELSE | „inak“; táto časť je nepovinná |
ENDIF | koniec bloku; povinný |
Starý tvar IF … THEN … na jednom riadku platí ďalej. Rozhoduje slovo THEN: keď tam je, ide o jednoriadkovú podmienku; keď nie je, o blok.
Celý program
Súbor examples/else.tbas:
10 REM IF ... ELSE ... ENDIF
20 INPUT "A number";N
30 IF N<0
40 PRINT "Negative, I turn it round"
50 N=-N
60 ELSE
70 PRINT "Not negative"
80 ENDIF
90 IF N>100
100 PRINT "Big"
110 ELSE
120 IF N>10
130 PRINT "Medium"
140 ELSE
150 PRINT "Small"
160 ENDIF
170 ENDIF
180 IF N=42 THEN PRINT "The answer"Preklad a spustenie
Basic26 else.tbas --runalebo v simulátore; súbor examples/else.in odpovie -25:
Basic26 else.tbas --sim --sim-input else.inČo uvidíš
A number?-25
Negative, I turn it round
MediumAko to funguje
- Riadky 30 až 80: keď je číslo záporné, vykonajú sa riadky 40 a 50; inak riadok 70. Potom program pokračuje za
ENDIF. - Riadky 90 až 170: blok v bloku. Vnútorný
IF(riadky 120 až 160) je celý vo vetveELSEvonkajšieho. KaždýIFbezTHENmá svojENDIF. - Riadok 180: starý tvar s
THENnepotrebujeENDIF.
Odsadenie
Medzery za číslom riadka BASIC ignoruje. Odsadením tela o dve medzery je však na prvý pohľad vidieť, čo k čomu patrí – a kde chýba ENDIF. Turbo-BASIC XL takto odsadzoval výpis programu sám.
Na jednom riadku
Blok môže byť aj na jednom riadku, príkazy oddelené dvojbodkou:
50 IF A>B:PRINT "A":ELSE:PRINT "B":ENDIF
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
chýba ENDIF | error B26024: IF without ENDIF |
ELSE alebo ENDIF bez IF | error B26023: there is nothing for this to close |
THEN na konci riadka bloku (IF N<0 THEN a telo na ďalších riadkoch) | je to jednoriadkový IF s prázdnym telom; riadky pod ním sa vykonajú vždy |
ELSE za jednoriadkovým IF … THEN | error B26023 – ELSE patrí len k bloku bez THEN |
súbor má príponu .abas | ELSE a ENDIF sú v Atari BASICu mená premenných: error B26017 |
Vyskúšaj si
- Spýtaj sa na dve čísla a vypíš väčšie z nich; ak sú rovnaké, vypíš
Equal. - Prepíš
if.abasz kapitoly 8: dvojiceIFs opačnými podmienkami nahraď blokmi sELSE. - Spýtaj sa na známku 1–5 a vypíš slovné hodnotenie. Skús to vnorenými blokmi aj cez
ON … GOTOa porovnaj, čo sa lepšie číta.
Zhrnutie
IF podmienkabezTHENzačína blok, ktorý končíENDIF.ELSEoddeľuje vetvu „inak“.- Bloky sa dajú vnárať; každý má vlastný
ENDIF. - Starý
IF … THENna jednom riadku funguje ďalej.
Späť: 26. Turbo-BASIC XL · Ďalej: 28. Slučky s podmienkou