Řídicí struktura

Řídicí struktura (též strukturovaný příkaz, anglicky control flow statement) je v informatice konstrukce pro zápis počítačového programu. Řídicí struktury jsou používány ve vyšších programovacích a skriptovacích jazycích. Rozhodují o dalším provádění programu: větví jeho běh, vytváří cykly nebo jinak mění běh programu.

Typy řídicích struktur

editovat

Existují tři druhy struktur programu:

  • posloupnost příkazů – všechny příkazy se postupně provedou jeden po druhém
  • větvení (či podmíněný příkaz) – v závislosti na splnění podmínky se určitý příkaz buď provede nebo neprovede (viz skok (informatika))
  • cyklus – v závislosti na splnění podmínky se část programu vykoná vícekrát

Posloupnost příkazů (sekvence) nevyžaduje existenci speciálních řídicích struktur (ve smyslu příkazů), celá tato konstrukce je prostě tvořena sledem klasických příkazů, které se mají vykonat postupně jeden po druhém (lineárně). U zbývajících dvou konstrukcí se již neobejdeme bez speciálních příkazů, jako jsou GOTO, WHILE, IF-ELSE aj. Tyto prvky tvoří základní stavební kameny strukturovaného programování.

Teorii těchto metodik zpracovali např. Donald Knuth, Niklaus Wirth, Edsger Dijkstra a Hoare.

Větvení

editovat

Podmínka If-then (else)

editovat
Podrobnější informace naleznete v článku Podmíněný příkaz.

Podmíněný příkaz a podmíněná konstrukce jsou prostředky programovacího jazyka, které umožňují rozdílné chování programu, v závislosti na specifikované logické podmínce, která je vyhodnocena jako pravda, či nepravda.

  • IF..GOTO Forma vyskytující se v nestrukturovaných programovacích jazycích. Napodobuje typickou strojovou instrukci GOTO, která umožňuje skok na určitý řádek kódu.
  • IF..THEN..(ENDIF) Pokud je podmínka v části IF vyhodnocena jako pravda, je vykonán kód specifikovaný v části THEN. V případě, že je podmínka vyhodnocena jako nepravda, je kód specifikovaný v části THEN vynechán a program pokračuje dále za částí ENDIF.
  • IF..THEN..ELSE..(ENDIF) Oproti předchozímu výrazu, je v případě vyhodnocení podmínky v části IF jako nepravda vykonán kód specifikovaný v části ELSE.
  • Podmíněné příkazy mohou být a také velmi často bývají částí jiných podmíněných příkazů. Některé jazyky umožňují sloučit ELSE a IF do ELSEIF.
Pascal: C: Shell skript: Python: PHP:
if a > 0 then begin
 writeln("ano")
end else begin
 writeln("ne")
end
if (a > 0) { 
 printf("ano");
} else {
 printf("ne");
}
if [ $a -gt 0 ] 
then
 echo "ano"
else
 echo "ne"
fi
if a > 0: 
 print("ano")
else:
 print("ne")
if ( $a > 0 ){ 
 echo "ano";
}
else{
 echo "ne";
}

Switch a case

editovat
Podrobnější informace naleznete v článku Příkaz switch.

Příkaz switch (v některých jazycích uveden jako case) porovnává předanou hodnotu s předem specifikovanými konstantami. V případě shody předané hodnoty s definovanou konstantou, vykoná příkaz, nebo příkazy, které jsou definovány za ní. Obvykle tato konstrukce také obsahuje možnost, pro případ, že by shoda nalezena nebyla, nejčastěji ELSE, nebo OTHERWISE. Konstrukce switch může umožnit kompilátoru optimalizace, jako například vyhledávací tabulky. V dynamických jazycích nemusí být případ pro porovnání omezen pouze na konstanty a může být rozšířen do vzorového porovnávání, jako například v shell skriptech, kde regulární výraz '*)' označuje jakýkoli řetězec.

Pascal: C: Shell skript: Python: PHP skript:
case nejakyZnak of
 'a': akceNaA;
 'x': akceNaX;
 'y','z':akceNaYneboZ;
 else akceVPripadeNeshody;
end;
switch (nejakyZnak) {
 case 'a': akceNaA; break;
 case 'x': akceNaX; break;
 case 'y':
 case 'z': akceNaYNeboZ; break;
 default: akceVPripadeNeshody;
}
case $nejakyZnak in 
 a) akceNaA ;;
 x) akceNaX ;;
 [yz]) akceNaYNeboZ ;;
 *) akceVPripadeNeshody ;;
esac
match nejakyZnak:
    case "a":
        akceNaA
    case "x":
        akceNaX
    case "y" | "z":
        akceNaYneboZ
    case _:
        akceVPripadeNeshody
switch ($nejakyZnak){ 
 case 'a': 
 akceNaA();
 break; 
 case 'x': 
 akceNaX();
 break; 
 case 'y': 
 case 'x': 
 akceNaYneboX();
 break; 
 
 default:
 akceVPripadeNeshody(); 
}

Cyklus nebo také smyčka (angl. loop) je řídicí struktura počítačového programu, kde se opakovaně provádí posloupnost příkazů. Opakování i ukončení cyklu je řízeno nějakou podmínku.

Konstrukce cyklu

editovat

Cyklus se skládá z posloupnosti příkazů a podmíněného skoku, pomocí kterého se cyklus ukončuje při splnění podmínky.

Existují tyto druhy cyklů:

  • nekonečný cyklus – za normálních okolností není vůbec ukončen
  • cyklus while-do – cyklus s podmínkou na začátku posloupnosti příkazů
  • cyklus do-while – cyklus s podmínkou na konci posloupnosti příkazů. V jazyku Pascal je tento cyklus (repeat příkaz; until podmínka;) v případě splnění podmínky ukončen.
  • cyklus s testem podmínky uprostřed posloupnosti příkazů – řídce užívaná varianta. Hodně jazyků umožňuje násilné přerušení cyklu (vyskočení ven z cyklu, v Pascalu a v C to je break), je tedy možné vytvořit například nekonečný cyklus, uvnitř tohoto cyklu testovat nějakou podmínku a ve vhodné situaci cyklus přerušit.
  • cyklus for – speciální případ cyklu s podmínkou na začátku, obvykle užívaný pro výčet prvků z množiny prvků (např. interval celých čísel <1,10>). V některých jazycích je počet opakování vyhodnocen jednou na začátku a další změna této podmínky nemá na počet opakování vliv. V ostatních jazycích je cyklus for vlastně zvláštním případem cyklu while-do:
inicializátor;
while (podmínka) {
    příkaz1; příkaz2; … příkazN;
    inkrement;
}

Ve vyšších programovacích jazycích existují pro cykly řídicí konstrukce pro tvorbu programových cyklů. Např. v jazyce C:

while (podmínka) {
    příkaz1; příkaz2; … příkazN;
}

do {
    příkaz1; příkaz2; … příkazN;
} while (podmínka);

for (inicializátor; podmínka; inkrement) {
    příkaz1; příkaz2; … příkazN;
}

Analogicky k násilnému přerušení cyklu (break, exit), některé programovací jazyky umožňují i skok na další iteraci cyklu (obvykle continue, loop, next).

Související články

editovat

Externí odkazy

editovat