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!