2. Riadiace štruktúry

V tretej kapitole teoretickej časti sme sa venovali jednotlivým riadiacim štruktúram. Ku každej štruktúre bol aj jednoduchý príklad, ktorý demonštroval ako daná riadiaca štruktúra funguje. Teraz si precvičíme prácu s riadiacimi štruktúrami na ďalších príkladoch.

Príklad if-else:

Ako prvý príklad si vyskúšame jednoduché vetvenie pomocou štruktúry if-else. Ukážeme si dva varianty tej istej štruktúry, aby sme lepšie pochopili ako funguje.

Prvý program bude vyzerať nasledovne:

public static void main(String[] args)
{
      int pocet = (int)načítajCeléČíslo("Koľko krčných stavcov má žirafa?"); // do premennej počet načíta používateľom zadané číslo

        if (int pocet == 7); // vyhodnocujem podmienku
        {
            System.out.println("Správne"); // podmienka je splnená a program vypíše používateľovi hlásenie, že zadal správny počet.
        }
        else
        {
            System.out.println("Zopakuj si zoológiu."); // vo vetve else program vypíše používateľovi hlásenie, aby si zopakoval zoológiu.
        }
}

Pri programovaní tohto príkladu nesmieme zabudnúť na jeho prepojenie s triednou Konzola, pretože z nej voláme metódu načítajCeléČíslo.
Používateľa sa program opýta konkrétnu otázku, vypýta si jedno číslo. Túto odpoveď porovná so správnou odpoveďou a používateľa informuje o tom, či odpovedal správne alebo nesprávne.

Teraz si tento príklad upravíme tak, aby v prípade nesprávnej odpovede program vypísal, či je stavcov žirafy viac alebo menej. Urobíme to pridaním ďalšie vetvy if-else:

public static void main(String[] args)
{
      int pocet = (int)načítajCeléČíslo("Koľko krčných stavcov má žirafa?"); // do premennej počet načíta používateľom zadané číslo

        if (int pocet == 7); // vyhodnocujem podmienku
        {
            System.out.println("Správne"); // podmienka je splnená a program vypíše používateľovi hlásenie, že zadal správny počet.
        }
        else
        {
            if (int pocet > 7); // vyhodnocujem podmienku, či zadané číslo je väčie ako 7
            {
            System.out.println("Žirafa má menej krčných stavcov."); // v tomto prípade program vypíše, že "Žirafa má menej krčných stavcov"
            }
            else
            {
            System.out.println("Žirafa má viac krčných stavcov."); // táto vetva else nám zabezpečuje výpis pri poslednej možnosti a to, že zadané číslo bolo nižšie ako počet krčných stavcov žirafy.
            }
        }
}

Príklad: Počet cifier

Vytvoríme program, ktorý zistí počet cifier zadaného celého čísla. Najskôr si napíšeme samotný program. A vo videu si vysvetlíme ako tento program presne funguje.

public static void main(String[] args)
{
      int číslo = (int)načítajCeléČíslo("Zadaj celé číslo");
      int cifry = 0; // načítanie čísla a priradenie hodnôt dvoch premenných, ktoré bude program používať
      do // cyklus do-while
      {
          ++cifry; // zvýšenie premennej cifry
          číslo /= 10; // do premennej číslo priraď hodnotu premennej číslo vydelenú desiatimi bezo zvyšku
      }
      while (číslo != 0); // koncová podmienka

      System.out.println("Počet cifier čísla: " + cifry); // výpis na obrazovku
}

Nasleduje video pomocou ladiaceho nástroja vysvetľuje ako program Počet cifier funguje:

         

Príklad najmenšie číslo:

Teraz by sme už mali vedieť vytvoriť aj zložitejší príklad. Vytvoríme program, ktorý nám vypíše najmenšie číslo z pomedzi piatich prirodzených na vstupe zadaných čísel (bez použitia pola).

Potrebujeme vedieť ako tento program bude fungovať. Prvé zadané číslo si označím ako najmenšie (minimum) a potom každé ďalšie načítané číslo porovnávam s hodnotou, ktorú mám v premennej minimum. Ak je ďalšie zadané číslo menšie, priradím jeho hodnotu do premennej minimum a pokračujem vo for cykle, kým nemám načítaných všetkých 5 čísel. Pri poslednom načítaní a porovnaní (a prípadnom priradení hodnoty) mám v premennej minimum výslednú hodnotu, čiže najmenšie číslo spomedzi piatich na vstupe zadaných prirodzených čísel a túto hodnotu vypíšem na obrazovku.

Využijeme teda cyklus for a podmienku if.

Algoritmus tohto programu vyzerá nasledovne:

public static void main(String[] args)
{
      int minimum = (int)načítajCeléČíslo("Zadaj prvé číslo"); // do premennej minimum načítaj používateľom zadané prvé číslo

      for (int i = 1; i < 5; ++i); // začínam for cyklus, ktorý prebehne pre i pokiaľ bude i menšie ako 5 a po každom vykonaní cyklu sa i zvýši o 1, čím dosiahnem, že cyklus prebehne presne 4 krát
      {
        int prvok = (int)načítajCeléČíslo("Zadaj ďalšie číslo"); // do premennej prvok priraď ďalšie v poradí na vstupe zadané číslo
        if (prvok < minimum) minimum = prvok; // program hodnotu v premennej prvok porovná s hodnotou v premennej minimum, ak je táto hodnota menšia, hodnotu v premennej prvok priradí do premennej minimum
      }

      System.out.println("Najmenšie číslo: " + minimum); // program vypíše "Najmenšie číslo: a hodnotu premennej minimum"
}

Príklad Minibanka:

Tento program bude spravovať jedno konto. Bude cyklicky vyžadovať sumy pre transakcie na tomto konte. Pre pripočítanie sumy sa bude zadávať kladná hodnota, pre výber sumy záporná. Pri každej vykonanej transakcii oznámi aktuálny stav konta. Po zadaní nuly skončí a oznámi to používateľovi nápisom "Koniec"

public static void main(String[] args)
{
    double konto = 0.0; // nastavenie počiatočnej hodnoty premennej konto
    double hodnota = 0.0; // nastavenie počiatočnej hodnoty premennej hodnota

    System.out.println("Informácia: zadávajte jednotlivé transakcie, pričom kladné");
    System.out.println("hodnoty znamenajú vklad, záporné výber v hotovosti.");
    System.out.println("Zadaním nuly program ukončíte."); // výpis na obrazovku cez tri riadky – inštrukcie pre používateľa
    System.out.println(); // posun na nový riadok

    do // cyklus zabezpečujúci výpis aktuálneho stavu konta a načítanie ďalšej transakcie, kým používateľ nezadá 0

    {
        System.out.println("Aktuálny stav konta je: " + konto);
        hodnota = načítajReálneČíslo("Zadajte transakciu")
        konto += hodnota; // v premennej konto sa teraz nachádza aktuálny stav po zadaní novej transakcie
    }
    while (hodnota != 0); // koncová podmienka

    System.out.println(); // pri nesplnení koncovej podmienky sa posunie na nový riadok
    System.out.println("Koniec."); // výpis ukončenia programu
}

Úlohy na precvičenie:

Poskladaj vývojový diagram:
Z prvkov, ktoré sú v ľavej časti obrazovky vytvor vývojový diagram programu, ktorý zistí a vypíše podiel a zvyšok po delení dvoch na vstupe zadaných čísel a zároveň podá chybové hlásenie, ak takéto delenie vykonať nejde.




Napíš program na zistenie najväčšieho spoločného deliteľa dvoch na vstupe zadaných čísel:
(Tip: Program funguje tak, že odčítavame od väčšieho čísla menšie, kým sa nerovnajú a toto číslo je potom najväčším spoločným deliteľom zadaných čísel. Pozor, treba overiť, či sa zadané čísla nerovnajú už na začiatku programu.)