Chování mnoha programů se odvíjí od různých vnějších podnětů -- program například uživateli položí nějaký dotaz a podle toho, jak uživatel odpoví, program pokračuje. Tomuto se říká větvení. Na této stránce si popovídáme o základním stravebním kameni větvení -- logických výrazech.
Začneme opět příkladem.
at cele $cislo = cticele ("Zadej cislo.");
pokud $cislo > 100:
napis "Zadane cislo je vetsi nez sto.";
konec;
Program dvakrát za sebou spusť. Poprvé zadej číslo menší než 100, podruhé číslo
větší než sto. Zatímco v prvním případě se nic nestane, ve druhém program
zobrazí hlášku. Za vším stojí další blokový příkaz -- příkaz pokud
.
Jeho základní syntaxe je následující: pokud logický_výraz:
tělo_příkazu konec;
. Tělo příkazu se provede pouze tehdy, když
je logický_výraz pravdivý.
Nejjednodušší variantou logického výrazu je porovnání dvou čísel podle
velikosti. Přesněji řečeno, porovnání dvou výrazu podle velikosti
jejich hodnot. Takový logický výraz má tvar aritmetický_výraz1
operátor_porovnání aritmetický_výraz2
. Operátor porovnání
může být =
, <
, >
,
>=
(větší nebo rovno), <=
(menší nebo rovno).
Logickou hodnotu můžete nechat zadat samotného uživatele. K tomu
slouží logická funkce otazka
. Té se předá jeden parametr --
řetězec, který se má zobrazit uživateli. Funkce zobrazí okno se dvěma
tlačítky Ano a Ne. Podle toho, které z tlačítek uživatel stiskne,
takovou logickou hodnotu funkce vrátí. Vše demonstruje tento příklad.
pokud otazka ("Mam neco udelat?"):
vpred o 100;
konec;
Někdy je zapotřebí, aby program provedl jistý úkon, pokud bude
splněno podmínek více. Tady nám poslouží logická spojka (logický
operátor) a
. Logický výraz ve tvaru
logický_výraz1 a logický_výraz2
je pravdivý,
právě když jsou pravdivé logický_výraz1
i
logický_výraz2
. Následující procedura
zobrazí zprávu, pouze pokud je zadané číslo z intervalu deset až dvacet včetně.
at desetinne $cislo = ctides ("Zadej nejake cislo.");
pokud $cislo >= 10 a $cislo <= 20:
{musí platit jak $cislo >= 10, tak $cislo <= 20}
napis "Cislo je ve spravnem intervalu.";
konec;
Jindy je zapotřebí, aby procedura provedla nějaké příkazy, je-li splněna
alespoň jedna z několika podmínek. K tomu slouží logická spojka nebo
.
Logický výraz ve tvaru
logický_výraz1 nebo logický_výraz2
je pravdivý,
právě když je pravdivý logický_výraz1
nebo
logický_výraz2
, případně oba. Další ukázka
procedury vypíše zprávu, pouze pokud je zadané číslo mimo intrval
deset až dvacet včetně.
at desetinne $cislo = ctides ("Zadej nejake cislo");
pokud $cislo < 10 nebo $cislo > 20:
{musí platit buď $cislo >= 10, nebo $cislo <= 20, případně obě podmínky}
napis "Cislo je ve spravnem intervalu.";
konec;
Užitečná je ještě jedna logická funkce, a to funkce ne
. Bere
jeden parametr, kterým je logický výraz, vrací logickou hodnotu, která je
opačná. Tedy například ne (5 = 2)
je pravdivý logický výraz.
Želví grafika zná dvě: ANO
, která je pravdivá, a NE
,
která je nepravdivá. Podívej se na následující ukázku kódu. Co si myslíš, že
se stane, když proceduru s takovým kódem pustíš?
pokud ne (ANO):
vpred o 100;
konec;
pokud ne (NE):
otoc o 90;
konec;
Želvička se otočí o 90 stupňů, tedy druhá podmínka je správná. To proto,
že funkce ne
zneguje logický výraz v závorce, tím je
u druhé podmínky NE
a jeho negací je ANO
.
Logické operace lze různě kombinovat a vytvářet tak poměrně komplikované
logické výrazy, jako je kupříkladu
(((2 >= 3) a ne (-2 = -3)) nebo (4 < 8 - 1)) a (NE nebo (4 = 2*2))
.
Kromě proměnných, do nichž lze uložit číslo, existují také proměnné, do kterých můžeš přiřadit logickou hodnotu. Pracuje se s nimi úplně stejně jako s proměnnými číselnými. Následující příklad ilustruje jejich použití. Opět zobrazí hlášku, pokud je číslo z intervalu deset až dvacet včetně.
at desetinne $cislo = ctides ("Zadej nejake cislo.");
at logicka $hornimez = $cislo <= 20; {do logických proměnných uložíme údaj ano/ne}
at logicka $dolnimez = $cislo >= 10;
pokud $hornimez a $dolnimez: {a pak ho použijeme}
napis "Spravny interval.";
konec;