Príkaz vetvenia je zložený riadiaci príkaz. Používame ho vtedy, keď potrebujeme, aby sa určitý príkaz alebo príkazy vykonal/vykonali iba vtedy, keď je splnená nejaká podmienka. V programe sa vykoná iba raz! Príkazy vetvenia sú a) preskok neúplný tvar príkazu vetvenia, testuje logickú podmienku if bez else b) alternujúce vetvenie úplný tvar príkazu vetvenia, testuje logickú podmienku if s else c) prepínač testuje hodnotu premennej alebo funkcie, má aspoň tri vetvy case Preskok Značka v štrukturogramoch: Zápis v Pascale: if výraz then príkaz 1 ; Fungovanie: Najprv sa vyhodnotí logický výraz. Ak je pravdivý, vykoná sa príkaz 1 a potom sa pokračuje za príkazom vetvenia. Ak je nepravdivý, príkaz 1 sa preskočí a pokračuje sa za príkazom vetvenia. Príklad 1: Zostavte program, ktorý načíta celé číslo a vypíše jeho absolútnu hodnotu.
Riešenie: uses Crt; var x:integer; begin write('zadaj cele cislo: '); readln(x); if x<0 then x:=x*(-1); writeln('absolutna hodnota zadaneho cisla je ',x); readln; end. Úlohy: 1. Zostavte program, ktorý načíta nosnosť nákladného automobilu a množstvo piesku, ktoré potrebuje previezť a vypíše koľko jázd na odvezenie piesku potrebuje. 2. Zostavte program, ktorý načíta priemer kruhovej fontány v metroch a dĺžku obrubníka v cm a vypíše počet kvádrov, ktoré treba kúpiť na obrubník. (Je veľká pravdepodobnosť, že z posledného kvádra budeme rezať.) 3. Zostavte program, ktorý načíta malé alebo veľké písmeno a vypíše ho vždy ako veľké. ALTERNUJÚCE VETVENIE Značka v štrukturogramoch: Zápis v Pascale: if výraz then príkaz 1 else príkaz 2 ; 2
Fungovanie: Najprv sa vyhodnotí logický výraz. Ak je pravdivý, vykoná sa príkaz 1, príkaz 2 sa preskočí a pokračuje sa za príkazom vetvenia. Ak je nepravdivý, príkaz 1 sa preskočí, vykoná sa príkaz 2 a pokračuje sa za príkazom vetvenia. Príklad 2: Zostavte program, ktorý načíta celé číslo a vypíše či je párne alebo nepárne. Riešenie: uses Crt; var x:integer; begin write('zadaj cele cislo: '); readln(x); if x mod 2 = 0 then writeln('zadane cislo je parne') else writeln('zadane cislo je neparne'); readln; end. Úlohy: 1. Zostavte program, ktorý načíta dve celé čísla a vypíše menšie z nich. 2. Zostavte program, ktorý načíta celé číslo a vypíše, či to môže byť teplota ľudského tela žijúceho človeka alebo nie. 3. Zostavte program, ktorý načíta strany trojuholníka a zistí a vypíše, či trojuholník s týmito stranami existuje alebo nie. Zápis v Pascale: case premenná of hodnota 1 : príkaz 1 ; hodnota 2 : príkaz 2 ;... hodnota n : príkaz n ; else príkaz n+1 ; end; PREPÍNAČ 3
Hodnotou môže byť konštanta alebo interval hodnôt. Interval hodnot zapisujeme takto:najmenšia_hodnota.. najväčšia_hodnota, napr. 25..47. Fungovanie: Podľa toho, akú hodnotu má premenná, vykoná sa príslušný príkaz a pokračuje sa za príkazom case. V prípade, že hodnota premennej sa nerovná hodnote 1 až hodnote n, vykoná sa príkaz za kľúčovým slovom else. Príklad 3: Zostavte program, ktorý načíta znak a vypíše či je to malé písmeno alebo veľké písmeno alebo číslica alebo medzera alebo pomĺčka alebo iný znak. Riešenie: uses Crt; var x:char; begin write('zadaj znak: '); readln(x); case x of 'a'..'z': writeln('zadany znak je male pismeno.'); 'A'..'Z': writeln('zadany znak je velke pismeno.'); '0'..'9': writeln('zadany znak je cislica.'); ' ' : writeln('zadany znak je medzera.'); '-' : writeln('zadany znak je pomlcka.'); else writeln('zadany znak je iny znak.'); end; readln; end. Úlohy: 1. Zostavte program, ktorý načíta mesiac a vypíše počet dní v tomto mesiaci. Predpokladáme, že február má 28 dní. 2. Zostavte program, ktorý načíta číslo farby a vypíše slovne akej farbe toto číslo patrí. 4
3. Zostavte program, ktorý načíta vek človeka a vypíše, či je dieťa (0-11 rokov), teeneger (12-18 rokov), mladý človek (19-35 rokov), človek v strednom veku (36-60 rokov) a starý človek (61 a viac rokov). Otázky: 1. Akým príkazom je príkaz vetvenia? 2. Kedy používame príkaz vetvenia? 3. Koľkokrát sa v programe vykoná príkaz vetvenia? 4. Vymenujte príkazy vetvenia. 5. Charakterizujte preskok. 6. Akú značku má preskok v štrukturogramoch? 7. Aká je syntax (zápis) príkazu preskoku v Pascale? 8. Ako funguje vykonávanie preskoku v Pascale? 9. Charakterizujte alternujúce vetvenie. 10. Akú značku má alternujúce vetvenie v štrukturogramoch? 11. Aká je syntax alternujúceho vetvenia v Pascale? 12. Ako funguje vykonávanie alternujúceho vetvenia v Pascale? 13. Charakterizujte prepínač. 14. Akú značku má prepínač v štrukturogramoch? 15. Aká je syntax prepínača v Pascale? 16. Čo môže byť hodnotou v prepínači? 17. Ako zapisujeme interval hodnôt? 18. Ako funguje vykonávanie prepínača v Pascale? Úlohy na precvičenie využitia príkazov vetvenia: 1. Zostavte program, ktorý načíta počet deti a počet cukríkov v jednom dezerte a vypíše, koľko dezertov treba kúpiť, aby sa ušlo každému dieťaťu. 2. Zostavte program, ktorý načíta počet dievčat a počet chlapcov, ktorí prišli na diskotéku a vypíše, či každé dievča bude mať partnera. 3. Zostavte program, ktorý načíta reálne číslo z intervalu <0, 100), zaokrúhli ho na desiatky a výsledok vypíše slovne, napr. načíta číslo 25,8. Toto číslo zaokrúhlené na desiatky je 30. Program teda vypíše slovo tridsat. 4. Zostavte program, ktorý načíta reálne číslo a zistí a vypíše celou vetou, či toto číslo je z intervalu <-3,18). Program otestujte pre tieto hodnoty: -7,-3,0,18 a 24. 5
5. Zostavte program, ktorý prečíta najhoršiu známku žiaka na vysvedčení a priemer jeho známok a vypíše jeho celkový prospech. Mali by ste vedieť, že žiak môže prospieť s vyznamenaním, ak má priemer známok menší a zároveň rovný 1,5 a jeho najhoršou známkou je dvojka. Žiak prospieva veľmi dobre, ak má priemer známok menší a zároveň rovný 2 a jeho najhoršou známkou je trojka. Žiak prospieva, ak jeho najhoršia známka na vysvedčení je štvorka a neprospieva vtedy, ak jeho najhoršou známkou na vysvedčení je pätorka. 6. Zostavte program, ktorý načíta priemer vajíčka a zaradí ho do veľkostnej skupiny takto: skupina A nad 5 cm, skupina B nad 4 cm, skupina C nad 3 cm a napokon skupina D 3cm a pod 3 cm. 7. Zostavte program, ktorý načíta tri celé čísla a vypíše ich usporiadané podľa veľkosti zostupne (od najväčšieho po najmenšie). 6