12. Výber z možností: ON … GOTO, ON … GOSUB

Na čo to je

Ponuka s piatimi možnosťami by potrebovala päť riadkov IF C=1 THEN …, IF C=2 THEN …. ON to spraví jedným príkazom: podľa čísla vyberie jeden riadok zo zoznamu.

Ako sa to píše

Atari BASIC
ON výraz GOTO riadok1,riadok2,riadok3
ON výraz GOSUB riadok1,riadok2,riadok3
Hodnota výrazuČo sa stane
1skok na prvý riadok zo zoznamu
2skok na druhý
3skok na tretí
0 alebo viac, než je riadkovnič – program pokračuje ďalším príkazom

ON … GOSUB volá vybraný riadok ako podprogram a po RETURN pokračuje za príkazom ON.

Celý program

Súbor examples/on.abas je malá kalkulačka s ponukou:

Atari BASIC
10 REM ON: choosing one of several lines
20 PRINT "1 Add  2 Multiply  3 Quit"
30 PRINT "Your choice";
40 INPUT C
50 IF C=3 THEN PRINT "Bye":END
60 PRINT "Two numbers";
70 INPUT A,B
80 ON C GOSUB 200,300
90 GOTO 20
200 PRINT A;" + ";B;" = ";A+B
210 RETURN
300 PRINT A;" * ";B;" = ";A*B
310 RETURN

Preklad a spustenie

Basic26 on.abas --run

alebo v simulátore s odpoveďami zo súboru examples/on.in:

Basic26 on.abas --sim --sim-input on.in

Čo uvidíš

1 Add  2 Multiply  3 Quit
Your choice?1
Two numbers?3,4
3 + 4 = 7
1 Add  2 Multiply  3 Quit
Your choice?2
Two numbers?3,4
3 * 4 = 12
1 Add  2 Multiply  3 Quit
Your choice?3
Bye

Ako to funguje

Za ON môže byť ľubovoľný výraz. Často sa hodnota najprv upraví, aby začínala jednotkou:

Atari BASIC
ON K-48 GOTO 100,200,300

(Kláves s číslicou 1 má kód 49, o kódoch je kapitola 15.)

Časté chyby

Čo sa staloČo sa stane
riadok zo zoznamu neexistujeerror B26012: line 300 does not exist
za ON chýba GOTO alebo GOSUBerror B26017: expected GOTO, GOSUB, EXEC or GO# after ON
hodnota je 0 alebo priveľkánič sa nevyberie, program ide ďalej – ošetri to, ak to vadí
premenná sa volá ONE, ONLY …číta sa ako ON E, ON LY (kapitola 4)

Vyskúšaj si

  1. Pridaj do kalkulačky odčítanie a delenie; Quit nech je päťka.
  2. Ošetri voľbu mimo ponuky: vypíš No such choice.
  3. Napíš program, ktorý sa spýta na číslo dňa (1–7) a cez ON … GOTO vypíše jeho meno.

Zhrnutie

Späť: 11. Podprogramy · Ďalej: 13. Polia