Jazyk C - podmienky: Rozdiel medzi revíziami
Riadok 3: | Riadok 3: | ||
Podmienky nám umožňujú skontrolovať, či je daná podmienka pravdivá (true) alebo nepravdivá (false) a podľa výsledku vykonať určitú časť kódu.<ref>https://www.learn-c.org/en/Conditions</ref> | Podmienky nám umožňujú skontrolovať, či je daná podmienka pravdivá (true) alebo nepravdivá (false) a podľa výsledku vykonať určitú časť kódu.<ref>https://www.learn-c.org/en/Conditions</ref> | ||
{{Skripta_ZI}} | {{Skripta_ZI}} | ||
− | + | __TOC__ | |
==Podmienka if-else== | ==Podmienka if-else== | ||
Aktuálna revízia z 15:35, 26. máj 2020
Podmienky nám umožňujú skontrolovať, či je daná podmienka pravdivá (true) alebo nepravdivá (false) a podľa výsledku vykonať určitú časť kódu.[1]
Učebné texty
Obsah
Podmienka if-else
Príkaz if-else sa skladá z dvoch častí: if a else. Kód ktorý je priradený časti if sa vykoná len ak je podmienka pravdivá, zatiaľ čo kód v časti else je vykonaný ak sa podmienka nesplnila. Príkaz else je voliteľný, to znamená, že ak nemáme žiadny kód, ktorý by sa vykonal ak je podmienka nepravdivá, tak ho nepíšeme.
Základný syntax
V jazyku C/C++ sa do oblých zátvoriek () zapisuje vstupný parameter, v tomto prípade podmienka a do zložené zátvorky {} nám vyhradzujú blok kódu. Za príkazom else nenasleduje žiadna podmienka, pretože sa vykonáva len vtedy, ak predošlá podmienka nebola splnená.
if(/*podmienka*/){
/*kód ktorý sa vykoná ak je podmienka splnená*/
}
else{
/*kód ktorý sa vykoná ak podmienka nie je splnená*/
}
Zjednodušený syntax
Poznáme aj jednoduchší zápis príkazu, ktorý splní iba jeden príkaz:
if(/*podmienka*/)
/*iba jeden príkaz ktorý sa vykoná ak je podmienka splnená*/;
else
/*iba jeden príkaz ktorý sa vykoná ak podmienka nie je splnená*/;
Vývojový diagram je rovnaký ako vyššie.
Syntax vetvenia
Niekedy máme viac podmienok a pre každú z nich potrebujeme vlastný kód. Vtedy je vhodná chvíľa použiť vetvenie podmienok. Zapisuje sa podobne ako predchádzajúce dva zápisy, ale za else nasleduje ďalší príkaz if-else.
if(/*prvá podmienka*/){
/*kód ktorý sa vykoná ak je prvá podmienka splnená*/
}
else if(/*druhá podmienka*/){
/*kód ktorý sa vykoná ak je druhá podmienka splnená*/
}
else if(/*tretia podmienka*/){
/*kód ktorý sa vykoná ak je tretia podmienka splnená*/
}
else{
/*kód ktorý sa vykoná ak žiadna podmienka nie je splnená*/
}
Princíp vetvenia popísaný vývojovým diagramom:
Príklad
Nasledujúci príklad zobrazuje, ako používať príkaz if-else so zloženými podmienkami. Ako prvé si načítame hodnoty do premenných a, b, c a následne ich hodnoty porovnávame buď s konštantami, alebo medzi sebou. Ak je jedna z podmienok splnená, tak vypíše, ktorá z podmienok bola splnená. Na príklade si môžete všimnúť, že ak sú splnené dve podmienky, tak sa vykoná kód len pri prvej (od vrchu) z nich.
1 #include <stdio.h>
2
3 int main (){
4 int a, b, c;
5 scanf("%d %d %d", &a, &b, &c); //načítanie vstupných hodnôt
6
7 if(a >= 2 && b < a)
8 printf("prvá podmienka");
9 else if(a > b || a > c)
10 printf("druhá podmienka");
11 else if((a > b || a > c) && b < 5)
12 printf("tretia podmienka");
13 else
14 printf("ani jedna podmienka nebola splnená")
15
16 return 0;
17 }
Poznámka: Väčšina kompilátorov skracuje zložené podmienky. To znamená, že ak pri podmienke typu A && B && C sa zistí, že podmienka A alebo B nevyhovuje, tak preruší overovanie podmienky C. Podobné platí aj pri zloženej podmienke typu A || B || C, ak podmienka A alebo B vyhovuje, tak podmienka C sa už neoveruje. Overovanie podmienok je zľava doprava.
Rozdiel medzi vetvením a sériou príkazov if-else
Hlavný rozdiel pri vetvení a sériou príkazov if-else je ten, že ak sa pri vetvení nesplní jedna z podmienok, nasledujúce podmienky (alebo príkaz else) sa ignorujú. Narozdiel od série príkazov, kde sa nasledujúce podmienky overujú ďalej. To znamená, pri sérii príkazov if-else sa vykoná každý kód, ktorého podmienka bola splnená a pri vetvení sa vykoná len prvý kód, ktorého podmienka bola splnená. Toto sa využíva, ak môže nastať len jeden stav, alebo ak chceme zabezpečiť prioritu určitému kódu, alebo podmienke.
Príklad vetvenia s prioritou
Nasledujúci príklad zobrazuje, ako určíme prioritu pri overovaní 3 premenných:
1 #include <stdio.h>
2
3 int main (){
4 int a, b, c;
5 scanf("%d %d %d", &a, &b, &c); //načítanie vstupných hodnôt
6
7 if(a >= 2)
8 printf("a je viac alebo rovné ako 2");
9 else if(b < 5)
10 printf("b je menej ako 5");
11 else if(c == 3)
12 printf("c sa rovná 3");
13 else
14 printf("ani jedna podmienka nebola splnená")
15
16 return 0;
17 }
Príklad série podmienok if-else
Nasledujúci príklad zobrazuje, ako nezávisle od seba porovnáme 3 premenné
1 #include <stdio.h>
2
3 int main (){
4 int a, b, c;
5 scanf("%d %d %d", &a, &b, &c); //načítanie vstupných hodnôt
6
7 if(a >= 2)
8 printf("a je viac alebo rovné ako 2");
9 else
10 printf("a je menej ako 2");
11
12 if(b < 5)
13 printf("b je menej ako 5");
14 else
15 printf("b je viac alebo rovné ako 5");
16
17 if(c == 3)
18 printf("c sa rovná 3");
19 else
20 printf("c sa nerovná 3");
21
22 return 0;
23 }
Príkaz switch-case
Okrem podmienok s konštrukciou if-else poznáme aj switch-case. Tento typ podmienky sa hodí všade tam, kde potrebujeme rýchlo rozhodnuť o hodnote premennej, objektu atď. Táto konštrukcia je síce menej používaná ako podmienka s konštrukciu if-else, ale niekedy je jednoduchšia a ponúka intuitívnejšiu možnosť hlavne vtedy, ak máme nejakú premennú a máme o nej rozhodnúť, akú ma hodnotu. [2]
Syntax
Na rozdiel od if-else sa do okrúhlych zátvoriek () nevkladá podmienka, ale premenná, ktorej možnosti sa budú hľadať a do zložených zátvoriek {} sa nevkladá kód, ale možnosti (case). Každá možnosť je zapísaná v tvare:
case /*možnosť*/: /*kód(príkaz)*/; break;
Príkaz break v tomto prípade preruší vyhľadávanie možností a celý príkaz switch-case sa ukončí. Ak by sme príkaz break nepoužili, tak môžeme spôsobiť až zacyklenie príkazu switch-case, pretože bude stále vyhľadávať možnosti. Ak chceme nastaviť kód, ktorý sa vykoná len ak sa nenašla žiadna možnosť, tak použijeme "možnosť" default:
default: /*kód(príkaz)*/; break;
Jednoduchý príklad
Príklad načíta hodnotu a, potom príkaz switch prehľadáva štyri možnosti a ak nejakú nájde, vykoná kód ktorý je k ním priradený. Ak nenájde žiadnu možnosť, vykoná kód, ktorý je priradený k možnosti default.
1 #include <stdio.h>
2
3 int main (){
4 int a;
5 scanf("%d", &a); //načítanie vstupných hodnôt
6
7 switch(a){
8 case 0: printf("a je 0"); break;
9 case 1: printf("a je 1"); break;
10 case 2: printf("a je 2"); break;
11 case 5: printf("a je 5"); break;
12 default: printf("a nie je ani jednou z moznosti"); break;
13 }
14
15 return 0;
16 }
Príklad s rovnakým kódom pre viac možností
Príklad je podobný ako predchádzajúci, s tým rozdielom, že k prvým trom možnostiam je priradený rovnaký kód.
1 #include <stdio.h>
2
3 int main (){
4 int a;
5 scanf("%d", &a); //načítanie vstupných hodnôt
6
7 switch(a){
8 case 0: //preskočí na case 2:
9 case 1: //preskočí na case 2:
10 case 2: printf("a je %d", a); break;
11 case 5: printf("a je určite 5"); break;
12 default: printf("a nie je ani jednou z moznosti"); break;
13 }
14
15 return 0;
16 }
Príklad s viac príkazmi v možnosti
Príklad zobrazuje použitie zložených zátvoriek {} ak máme veľa príkazov v možnosti.
1 #include <stdio.h>
2
3 int main (){
4 int a, b;
5 scanf("%d", &a, &b); //načítanie vstupných hodnôt
6
7 switch(a){
8 case 0: printf("a je 0"); break;
9 case 1:{ //možnosť s viacerými príkazmi
10 printf("a je 1");
11 b++;
12 printf("b je %d", b);
13 break;
14 }
15 case 2: printf("a je 2"); break;
16 case 5: printf("a je 5"); break;
17 default: printf("a nie je ani jednou z moznosti"); break;
18 }
19
20 return 0;
21 }