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
ON výraz GOTO riadok1,riadok2,riadok3
ON výraz GOSUB riadok1,riadok2,riadok3| Hodnota výrazu | Čo sa stane |
|---|---|
| 1 | skok na prvý riadok zo zoznamu |
| 2 | skok na druhý |
| 3 | skok na tretí |
| 0 alebo viac, než je riadkov | nič – 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:
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 --runalebo 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
ByeAko to funguje
- Riadok 80: keď je
Cjedna, zavolá sa podprogram na riadku 200; keď dva, na riadku 300. - Riadok 90: po návrate z podprogramu sa ide späť na ponuku.
- Keď človek napíše číslo, ktoré v ponuke nie je (napríklad 7),
ONneurobí nič a ponuka sa ukáže znova. Program sa teda nepokazí, len na voľbu nereaguje. - Hodnota nemusí byť celá – zaokrúhli sa.
ON 2.7 GOTO …vyberie tretí riadok.
Za ON môže byť ľubovoľný výraz. Často sa hodnota najprv upraví, aby začínala jednotkou:
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 neexistuje | error B26012: line 300 does not exist |
za ON chýba GOTO alebo GOSUB | error 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
- Pridaj do kalkulačky odčítanie a delenie;
Quitnech je päťka. - Ošetri voľbu mimo ponuky: vypíš
No such choice. - Napíš program, ktorý sa spýta na číslo dňa (1–7) a cez
ON … GOTOvypíše jeho meno.
Zhrnutie
ON X GOTO a,b,cskočí na riadok podľa hodnotyX: 1 je prvý, 2 druhý …ON X GOSUB a,b,cho zavolá ako podprogram.- Hodnota mimo zoznamu neurobí nič.
- Hodí sa na ponuky a všade, kde by bol dlhý rad
IF.
Späť: 11. Podprogramy · Ďalej: 13. Polia