1.2.7.1. Logické operátory
Pri rozhodovanie môžeme z jednoduchých podmienok vytvoriť podmienku zloženú, ktorá sa nazýva logický výraz. Podmienky spájame pomocou logických operátorov. V jazyku BASIC používame tieto logické operátory:
Symbol Príklad Význam
--------------------------------------------------------------
NOT NOT A negácia (opak); ak A je pravdivá podmienka,
potom NOT A je nepravdivá (a naopak)
AND A AND B logický súčin; A AND B je pravdivá podmienka,
ak sú pravdivé podmienky A a B súčasne, inak je
A AND B nepravdivá
OR A OR B logický súčet; A OR B je pravdivá podmienka,
ak je pravdivá aspoň jedna z podmienok A a B,
inak je nepravdivá
--------------------------------------------------------------
Význam logických operátorov si objasníme na konkrétnych príkladoch. Zoberme do úvahy celé čísla s nasledujúcimi podmienkami:
A: x > 3 t.
j. 4, 5, 6, 7, ...
B: x < 7 t. j. 6, 5, 4, 3, ...
Potom
NOT A : x <= 3 t. j. 3, 2, 1, ...
A AND B : x>3 AND x<7 t. j. celé čísla väčšie ako 3 súčasne
menšie ako 7, čiže 4, 5, 6.
A OR B : x>3 OR x<7 t. j. celé čísla väčšie ako 3 alebo
menšie ako 7, čiže všetky celé čísla
Použitie v programe ukazuje táto časť programu:
10 INPUT "Zadaj cislo od 10 do 20",a
20 IF a<10
OR a>20 THEN PRINT "Este teraz":GOTO 10
30 ...
Po chybnom zadaní čísla nás počítač nepustí ďalej, až dokiaľ nezadáme číslo z uvedeného rozsahu.
Logické výrazy môžu byť zapísané s AND, OR, NOT rovnako ako aritmetické výrazy môžu byť zapísané s AND, OR, NOT rovnako ako aritmetické výrazy vyjadrujeme pomocou +, -, atď. Pokiaľ je to potrebné, použite zátvorky.
Priorita logických operátorov je nasledovná:
1) NOT
2) AND
3) OR
V prípade rovnocenných operátorov sa postupuje zľava doprava. NOT je operátor s jedným argumentom, jeho priorita je najvyššia z logických operátorov. Preto jeho argument nepotrebuje zátvorky, aj keď podmienka obsahuje AND alebo OR (alebo obidve).
Teraz si uvedieme niekoľko vlastností logických operátorov, platnosť ktorých si skúste preveriť na konkrétnych príkladoch (ako pomoc použite uvedený príklad s číslami).
NOT a=b znamená to isté ako NOT(a=b) a to isté ako a<>b. <> je negácia =, znamená to, že je pravdivá len vtedy, keď rovnosť je nepravdivá. Taktiež a<>b je to isté ako NOT a=b.
Ďalej NOT a<>b je to isté, ako a=b. Presvedčíte sa, že >= a <= sú negácie <, > a tak NOT môžete niekedy vynechať zmenením relácií. Ďalej platí:
NOT(výraz1 AND výraz2) je to isté ako NOT výraz1 OR NOT výraz 2
NOT(výraz1 OR výraz2) je to isté ako NOT výraz 1 AND NOT výraz 2
Pri použití NOT v programe nie je nutné používať medzi vzťahmi zátvorky.
Ďalšia časť výkladu je trochu komplikovaná a môžete ju zatiaľ preskočiť (pri hlbšom štúdiu si ju však preštudujte).
Skúste zadať:
PRINT 1=2,1<>2
Asi očakávate syntaktickú chybu, ale všetko je poriadku.
Počítač totiž prevádza logické hodnoty na číslo, s ktorými vie pracovať podľa nasledujúcich pravidiel:
a) relácie =, <, >, <=, >=, <> dávajú číselné výsledky:
1 pre pravdivú podmienku
0 pre nepravdivú podmienku;
preto vyššie uvedený príkaz PRINT tlačí hodnotu 0 pre
podmienku 1=2, pretože ide o nepravdivú podmienku,
podmienka 1<>2 dáva hodnotu 1, lebo je pravdivá.
b) v príkaze IF podmienka THEN
môže byť podmienka akýkoľvek aritmetický výraz. Pokiaľ je
jeho hodnota 0, potom sa chová ako keby tam bola nepravdivá
podmienka. Všetky ostatné hodnoty (vrátane 1) sa berú ako
pravdivá podmienka. Preto
IF podmienka
v skutočnosti znamená
IF podmienka <> 0 THEN ...
c) AND, OR, NOT sú operácie tvoriace číselné hodnoty
x AND y má hodnotu x, pokiaľ y je pravdivé (nie 0)
0, pokiaľ je y nepravdivé
x OR y má hodnotu 1, keď je y pravdivé (nie 0)
x, keď je y nepravdivé
NOT x má hodnotu 0, keď x je pravdivé (nie 0)
1, keď x je nepravdivé
Nakoľko sme si vysvetlili doteraz všetky potrebné pojmy, uvedieme si prioritu vyhodnocovanie výrazov:
1) vyhodnotenie zátvoriek
2) vyhodnotenie funkcie
3) umocňovanie
4) unárne mínus
5) násobenie a delenie
6) sčítanie a odčítanie
7) relačné operátory
8) negácia
9) logický súčin
10) logický súčet
V prípade rovnakej priority sa postupuje zľava doprava. Ak chcete zmeniť poradie vyhodnocovania, použite zátvorky (majú najvyššiu prioritu).
Nakoniec si ukážme, ako sa dajú použiť zložité logické výrazy v programe:
10 INPUT a
20 INPUT b
30 PRINT (a AND a>=b)+(b AND a<b)
40 GO TO 10
Výsledkom je výpis väčšieho z dvoch čísiel a, b.
Analogicky sa používajú reťazcové hodnoty v podmienkových výrazoch, ale len pri použití AND.
x$ AND y má hodnotu x$, keď y nie je 0
"", keď y je 0,
Prezrite si nasledujúci program, ktorý vypíše dva vstupujúce reťazce v abecednom poradí.
10 INPUT "vlozte dva retazce",a$, b$
20 IF a$>b$ THEN LET c$=
a$: LET a$= b$: LET b$= c$
30 PRINT a$;"
";("<" AND a$<b$)+("=" AND a$=b$);" ";b$
40 GO TO 10