1.2.7. Rozhodovanie v programe
Všetky programy, ktoré ste doteraz videli, mali jednoduchú štruktúru. Program sa vykonával postupne od začiatku do konca, prípadne sa vracal na určenú časť.
V praxi je výhodné, ak počítač sám môže rozhodovať na základe nejakej informácie o ďalšom postupe v činnosti. Na to sa používa príkaz IF - THEN, ktorý sa nazýva tiež príkaz podmieneného skoku (podmieneného preto, lebo ďalšie vykonávanie programu je závislé od splnenia určitej podmienky). Príkaz má tvar
IF podmienka THEN prikazy
Ak nie je splnená podmienka uvedená medzi slovami IF a THEN, vykonávanie programu pokračuje na ďalšom riadku.
Ak je podmienka splnená, vykonávanie programu pokračuje vykonávaním príkazov za slovom THEN.
Napr. použitím NEW vymažte predošlý program, vložte a odštartujte nasledujúci program (je to hra na hádanie celého čísla od 0 do 9, toto číslo si "vymyslí" počítač).
10 REM hadanie cisla
20 PRINT "Hadaj cislo od 0 do 9"
30 LET x = INT(10* RND)
40 INPUT "hadaj cislo", y
50 IF x=y THEN GO TO 80
60 PRINT "neuhadol si":PRINT
70 GO TO 40
80 PRINT "uhadol si":PRINT "KONIEC"
Program vytvorí na riadku 30 náhodné číslo od 0 do 9 a priradí ho premennej x. Po zadaní čísla z klávesnice a jeho uložení do premennej y sa dostávame na riadok 50. Ak je splnená podmienka x=y (číslo sme uhádli), vykonávanie programu pokračuje za časťou THEN, teda vykoná odskok na riadok 80.
Ak nie je splnená podmienka, pokračuje sa na riadku 60. Po výpise "neuhadol si" sa z riadku 70 vracia program na riadok 40.
Program môžeme skrátiť zmenou riadku 50 na
50 IF x=y THEN PRINT "uhadol si":PRINT "koniec":STOP
a riadok 80 môžeme zmazať.
Podmienka x=y v prechádzajúcom príklade sa nazýva jednoduchá podmienka. Jednoduché podmienky porovnávajú dve čísla alebo dva reťazce a môžu testovať, čí sú si čísla rovné, či je jedno väčšie než druhé a môžu testovať, či dva reťazce si sú rovné alebo sa alfanumericky predchádzajú. Používajú sa značky:
=, <, >, <=, >=, <>
ktoré sa nazývajú relačné operátory. Ich význam je nasledovný:
= znamená rovná sa; i keď symbol je rovnaký ako v príkaze
LET, má tu celkom iný význam.
< (SYMBOL SHIFT + R) znamená je menší než
1 < 2, -2 <-1, -3 < 1 sú pravdivé podmienky,
1 < 0, 0 < -2 sú nepravdivé podmienky
> (SYMBOL
SHIFT + T) znamená je väčší než, t. j. opačné ako <
<= (SYMBOL SHIFT + Q) znamená menší alebo rovný
1 <= 2, 2 <= 2 sú pravdivé podmienky,
3 <= 2, 0 <= -1 sú nepravdivé podmienky
>= (SYMBOL SHIFT + E) znamená je väčší alebo rovný
<> (SYMBOL SHIFT + W) znamená nerovnosť a stojí ako protiklad
k operátoru =
Upozorňujeme, že symboly <=, >=, <> nemôžeme zložiť z dvoch znakov, ale musíme ich napísať na jeden krát.
V matematike sa píšu výrazy tiež ako
2<3<4,
čo znamená
2 < 3 a zároveň 3 < 4,
ale v jazyku BASIC to nie je možné.
V programe môžete použiť podmieňovací príkaz viackrát, čo umožňuje vetviť program na viac ako dve možnosti.
To si ukážeme na príklade hádanie celého čísla od 0 do 99, pričom nám počítač trochu pomôže.
10 REM hadanie cisla od 0 do 99
20 PRINT "Hadaj cislo od 0 do 99"
30 LET x = INT(100* RND)
40 INPUT "hadaj cislo", y
50 IF x=y THEN GO TO 100
60 IF y>x THEN GO TO 90
70 IF y<x THEN GO TO 80
80 PRINT "tvoje cislo je mensie":PRINT:GO TO 40
90 PRINT "uhadol si":PRINT "koniec"
Ak číslo neuhádneme, vypíše počítač informáciu o tom, či je hádané číslo väčšie alebo menšie a program pokračuje na riadku 30. V programe sme použili trikrát podmieňovací príkaz.
Riadok 70 môžeme vynechať. Ak sa dostane riešenie programu až na tento riadok, podmienky na riadkoch 50 a 60 nie sú splnené, takže musí platiť podmienka na riadku 70.
Je zrejmé, že program sa dá opäť skrátiť. Skúste to!
Teraz si ukážeme jeden praktický príklad použitie podmieneného príkazu. Nasledujúci program usporiada 3 čísla podľa veľkosti.
10 REM usporiadanie cisiel
20 INPUT "zadaj tri cisla",a,b,c
30 IF a<b THEN GOTO 50
40 LET x=a:LET a=b:LET b=x
50 IF a<c THEN GOTO 70
60 LET x=a:LET a=c>:LET c=x
70 IF b<c THEN GOTO 90
80 LET x=b:LET b=c:LET c=x
90 PRINT "usporiadane cisla";a,b,c
Program pracuje tak, že hodnoty premenných a, b ,c sa vymieňajú navzájom tak, aby na konci programu boli premenné a, b, c usporiadané od najmenšieho po najväčšie. Porovnávajú sa vždy dve hodnoty. Zoberme si napr. riadok 30.
Ak a<b, čísla sú usporiadané a pokračujeme na riadku 50 ďalšou dvojicou.
Ak neplatí, že a<b, hodnoty premenných a, b navzájom vymeníme na riadku 40. Hodnotu a uložíme do pomocnej premennej x príkazom LET x=a, lebo nasledujúcim príkazom LET a=b by sme hodnotu premennej a stratili. Až potom môžeme príkazom LET b=x priradiť premennej b pôvodnú hodnotu premennej a.
Analogicky sa robí porovnanie pre ďalšiu dve dvojice čísiel. V podmienke môžeme porovnávať aj reťazce.
Analogicky ako je príklad pre usporiadanie troch čísiel, môžeme nahradením premenných a, b, c, x premennými a$, b$, c$, x$ dostať program pre usporiadanie troch reťazcov.
Vyskúšajte to!