3.1 Riadiaca zložka
Počítačový program je
V algoritmoch sa stretávame s troma základnými konštrukciami, ktoré označujeme:
Sekvencia (Blok)
Je to najjednoduchšia riadiaca štruktúra. Všeobecne sa dá povedať, že ide o postupnosť príkazov. Je tvorená jedným alebo niekoľkými krokmi, ktoré sa vykonajú pravé raz v danom poradí. V Jave uzatvárame postupnosť príkazov do zátvoriek {}
.
Príklad sekvencie (bloku):
Príklad postupnosti príkazov v zátvorkách, ktorá sčíta dve čísla a potom vypíše ich súčet:
int i = 17;
int j = 25;
int súčet = i + j;
System.out.println("súčet i a j je " + súčet);
}
Výstup:
súčet i a j je 42
Vetvenie
Je taká štruktúra, ktorá v procese vykonávania algoritmu
Podmienené spracovanie
Ide o
Syntax príkazov:
{
Príkazy pre platnú podmienku;
}
Príklad podmieneného spracovania:
Príklad si na vstupe vyžiada dve čísla, ktoré potom vydelí a výsledok vypíše používateľovi na obrazovku. Dá pozor, aby sa nedelilo nulou.
{
int a = (int)načítajCeléČíslo("Zadaj delenec"); // do premennej a načíta používateľom prvé zadané číslo
int b = (int)načítajCeléČíslo("Zadaj deliteľ"); // do premennej b načíta druhé zadané číslo
if (b == 0) // podmienka, ktorá zabezpečí výpis chyby v prípade, že druhé zadané číslo (deliteľ) je rovný nule
{
System.out.println("Nemôžem deliť nulou!");
System.exit(-1);
}
int c = a / b; // príkaz, ktorý sa vykoná ak sa preskočí podmienka
System.out.println("Podiel " + a + " delené " + b + " je " + c); // výpis vo "vetve", kedy sa preskočila podmienka
}
Vetvenie pomocou if-else
Na základe vyhodnotenia boolovského výrazu (ide o typ, ktorý nadobúda dve hodnoty: platí alebo neplatí, trua false, 1,0), ktorý vracia hodnotu pravda (true) alebo nepravda (false),
Syntax príkazov:
{
Príkazy pre platnú podmienku;
}
else
{
Príkazy pre neplatnú podmienku;
}
Príklad:
V tomto príklade nám program porovná hodnoty dvoch premenných i
a j
. V prvej podmienke overujeme, či je i menšie od j. Ak áno, vypíše túto informáciu a ostatné vetvy preskočí. Ak nie, pokračuje vetvou else, v ktorej hneď testujeme, či sa nerovnajú. Ak áno vypíše o tom správu a preskočí ostatné vetvy. Ak ani táto podmienka nie je splnená, program vykoná poslednú else vetvu, ktorou vypíše, že i je väčšie ako j.
int i = 17;
int j = 25;
if (i < j)
{
System.out.println("i je menšie ako j."); // vypíše informáciu, ak podmienka nie je splnená, program pokračuje vetvou else, ak je splnená, preskočí ju
}
else if (i == j) // ak neplatí i < j, skúšame, či sa nerovnajú
{
System.out.println("i = j");
}
else // zostáva už len možnosť, že i je väčšie ako j
{
System.out.println("i je väčšie ako j.");
}
Môžete si vyskúšať zmeniť hodnoty premenných, tak, aby ste overili všetky možnosti.
Vetvenie pomocou switch
Ak nestačí jednoduché vetvenie if-else a je potrebné mať na
Ak by sme zabudli ukončiť vetu príkazom „break“ program síce nevypíše chybu pri preklade, ale vykoná všetky príkazy, ktoré sa nachádzajú po prvý nájdený príkaz „break“.
Môžeme definovať aj úsek „default“, ktorý sa vykoná ak hodnota premennej nespadá ani do jednej z možností. [10]
Syntax príkazov:
{
case hodnota1:
príkazy vykonané pri hodnote1 testovaného výrazu;
break;
case hodnota2:
príkazy vykonané pri hodnote2 testovaného výrazu;
break;
default:
príkazy vykonané pre všetky iné hodnoty výrazu;
break;
}
Príklad:
Nasleduje program, ktorý vypíše hodnotu premennej i slovom. Táto verzia funguje len od čísla nula po číslo päť. Pre ostatné hodnoty vypíše oznámenie.
int i = 3; switch (i) { case 0: System.out.println("nula"); break; case 1: System.out.println("jeden"); break; case 2: System.out.println("dva"); break; case 3: System.out.println("tri"); break; case 4: System.out.println("štyri"); break; case 5: System.out.println("päť"); break; default: System.out.println("hodnotu čísla i neviem spracovať"); }
Výsledok príkladu: tri
(Poznámka: Ak by sme v tomto príklade zabudli napísať príkaz break za vetvy case 3, case 4 a case 5; program by vypísal: tri štyri päť hodnotu čísla i neviem spracovať)
Cyklus
Táto riadiaca štruktúra nám poskytuje možnosť
Cykly možno rozdeliť podľa vzťahu medzi telom a podmienkou cyklu na tri rôzne cykly:
- Cyklus so známym (explicitným) počtom opakovaní:
for - Cyklus s podmienkou na začiatku:
while - Cyklus s podmienkou na konci:
do-while [2]
Cyklus for
Pri použití tohto cyklu sa dá
Cyklus for má preto zmysle napríklad pri vykonávaní niekoľkých výpočtov, ktoré spolu súvisia, pri práci s elementmi na obrazovke alebo pri spracovávaní určitej množiny vstupných údajov. [11]
Syntax príkazov:
for (inicializácia; podmienka; iteračný príkaz/y) { príkazy }
Pod pojmom
Argumenty príkazov:
Počiatočné hodnoty – Priraďujú riadiacej premennej jej počiatočnú hodnotu. Najčastejšie sa rovná 0 alebo 1.
Podmienka – Testuje hodnotu riadiacej premennej, aby sa zistilo, či cyklus už prebehol pre stanovený počet opakovaní.
Prírastky – Pri každom prebehnutí cyklu sa k riadiacej premennej pripočíta zadaný prírastok, najčastejšie jednotka. Prírastok môže byť i < > 1
(i záporný). Pri použití prírastku i < > od 1 je dôležité skontrolovať správnosť podmienky.
Príkazy – Postupnosť príkazov, ktoré sú opakovane vykonávané podľa zadaného počtu opakovaní. [12]
Príklad použitia cyklu for:
Cyklus for, ktorý zobrazí hodnoty od 1 do 10.
for (int i = 0; i < 10; ++i) { System.out.println("Hodnota počítadla je : " + i); }
Cyklus while
Ide o
Syntax príkazov:
while (podmienka) { príkazy }
Argumenty príkazov:
Podmienka – Testuje hodnotu, aby sa zistilo, či sa má vykonať telo cyklu (podmienka = true) alebo sa má telo cyklu vynechať (podmienka = false). Podmienka musí byť vyhodnotiteľná ako true alebo false.
Príkazy – Postupnosť príkazov, ktoré tvoria telo cyklu. [12]
Príklad použitia cyklu while:
Program na výpis hodnôt premennej do chvíle, kým je premenná i je väčšia ako 0. Na vstupe je zadaná hodnota premennej i = 3 a hodnota premennej je po každom prebehnutí cyklu zmenšená o jedna.
int i = 3; while (i > 0) { System.out.println("Hodnota premennej i = " + i); i--; }
Výsledkom príkladu je nasledujúci výpis:
Hodnota premennej i = 3
Hodnota premennej i = 2
Hodnota premennej i = 1
[12]
Cyklus do-while
V prípade tohto typu cyklu sa
Syntaxe príkazov:
do { príkazy } while (podmienka);
Argumenty príkazov:
Príkazy – Telo cyklu tvorí postupnosť príkazov, ktorá sa vykonaná minimálne raz a maximálne po dobu platnosti podmienky.
Podmienka – Testuje hodnotu, aby sa zistilo, či sa má cyklus opakovať (podmienka = true) alebo nie (podmienka = false). Podmienka musí byť vyhodnotiteľná ako true alebo false. [12]
Príklad cyklu do-while:
Cyklus, ktorý vypíše hodnotu premennej i väčšej ako 10 a premennú po každom prebehnutí programu zmenší o jedna.
int i = 17; do { System.out.println("Hodnota premennej i = " + i); i--; } while (i > 10);
Výsledkom príkladu je nasledujúci výpis:
Hodnota premennej i = 17
Hodnota premennej i = 16
Hodnota premennej i = 15
Hodnota premennej i = 14
Hodnota premennej i = 13
Hodnota premennej i = 12
Hodnota premennej i = 11
Cyklus prebehol sedem krát, vypísal hodnoty 17 – 11. Ide však o neopatrný cyklus. Pretože ak by vstupná hodnota premennej bola menšia ako 11vypíše aj túto hodnotu aj keď nespĺňa podmienku. Napríklad: i = 3, cyklus prebehol jeden krát a vypísal hodnotu 3, čo je ale menej ako 10 a teda hodnota nespĺňa podmienku na konci.
Nasledujúce video simuluje činnosť tohto programu:
Continue a Break
Continue a Break sú
Pri použití „for“ cyklu sa vykoná aktualizácia počítadla a posúdi sa podmienka. V cykle „while“ sa vyhodnotí počiatočná podmienka a pri cykle „do-while“ sa vyhodnotí koncová podmienka.
Príkazom „break“ sa preruší celý aktuálny cyklus a pokračuje sa nasledujúcimi príkazmi. Pri konštrukcii mnohonásobného vetvenia „switch“ príkaz „break“ ukončuje jednotlivé vetvy. [10]