Selekce
V případě, že potřebujeme běh programu rozdělit a část kódu vykonat pouze za určitých podmínek, volíme tzv. selekci. Selekce se skládá z klíčového slova if, v závorce je podmínka, za závorkou je blok příkazů, který se vykoná, je-li podmínka splněna, následuje slovo else a blok příkazů, které se vykonají, není-li podmínka splněna.
Například selekce:
if (i > 0){
printf("i je kladné");
}
else{
printf("i není kladné");
}
vidíme:
- nejprve slovo if,
- následuje v kulatých závorkách podmínka (logický výraz) (i > 0)
- následuje blok příkazů ve složených závorkách, který se vykoná, je-li podmínka splněna (tj. je-li i větší než nula) (zde pouze příkaz vypisující na obrazovku, že i je kladné)
- následuje slovo else
- poslední je blok příkazů ve složených závorkách se vykoná, není-li podmínka splněna (tj. je-li i rovno nule nebo je menší než nula) (zde pouze příkaz vypisující na obrazovku, že i není kladné)

Jiný příklad:
void main(){
int x;
printf("Zadej kladné číslo x: ");
scanf("%d", &x);
if (x > 0){
printf("Ano, děkuji.");
}
else{
printf("%d není kladné číslo!", x);
}
}
Zde nám selekce vypadá následovně:
- opět začínáme slovem if
- podmínka je (x > 0), tj. je-li x větší než nula
- následuje blok příkazů, které se vykonají, je-li podmínka splněna (tj. je-li x větší než nula) (zde se pouze vypíše poděkování na obrazovku)
- následuje slovo else
- následuje blok příkazů, které se vykonají, není-li podmínka splněna (tj. je-li x rovno nule nebo menší než nula) (zde se pouze vypíše, že toto číslo rozhodně není kladné).
Jako praktický příklad si můžete představit stav baterie na mobilním telefonu. Víme, že když je baterka nabitá z více než 20 %, bude svítit zeleně, jinak bude svítit žlutě. Pomocí strukturogramu by to tedy vypadalo následovně:

No to je pěkné, ale ve skutečnosti můžeme mít baterku ještě červenou, že. Takový stav nastane, je-li nabitá maximálně z 10 %. Protože ale každá selekce může dělit všechny možné stavy pouze na dvě skupiny (pravda nebo nepravda; true or false; 1 nebo 0), tři možnosti tam jednoduše nedostaneme. Ve skutečnosti ale víme, že jestliže baterie bude nabitá z více než 20 %, bude zelená a hotovo. Tedy existující levá strana už je správně. Pokud bude nabitá z 20 % nebo méně, může být žlutá anebo červená – to záleží na tom, je-li nabitá z více než 10 %, nebo nikoliv. Celou situaci tedy vyřešíme tak, že do pravé strany vložíme ještě jednu selekci:

Ve výsledku vidíme, že vnořením další selekce do záporné větve první selekce jsme docílili třech různých barev. V kódu by to vypadalo takto:
void main(){
float battery;
//získání stavu baterie v intervalu <100;0>
char batteryLight;
if (battery > 20){
batteryLight = 'g'; //g = green
}
else{
if (battery > 10){
batteryLight = 'y'; //y = yellow
}
else{
batteryLight = 'r'; //r = red
}
}
}
Generovaný podcast o větvení si můžete pustit zde:
Podkladem pro podcast byla tato stránka a https://www.geeksforgeeks.org/cpp/decision-making-c-cpp/
Drill – Logické výrazy
//napiš, jestli je logický výraz pravdivý (1) nebo nepravdivý (0) int a = 5; int b = 6; (a == b) (a > b) (a < b) (a != b) //napiš, jestli je logický výraz pravdivý (1) nebo nepravdivý (0) int a = -2; int b = a + 2; (a < 0) (b < 0)) (a == b) (a > b) (a < b) (a != b) //napiš, jestli je logický výraz pravdivý (1) nebo nepravdivý (0) int x = 10; int y = x; (a == b) (a > b) (a < b) (a != b) //napiš, jestli je logický výraz pravdivý (1) nebo nepravdivý (0) char c = 'A'; (c == 'A') (c != 'B') (c != 'A') (c == 'B') //napiš, jestli je logický výraz pravdivý (1) nebo nepravdivý (0) (5 > 2 * 2) (4 == 2 * 2) (6 > 3 * 2) (4 != 4) (-2 < 2)
Procvičení
//doplňte podmínku tak, aby se text vypsal pouze v případě, že proměnná teplota je vyšší než 30.
if (teplota 30) {
printf("Je horko.");
}
//doplňte podmínku tak, aby vypsal skupenství vody na základě hodnoty proměnné teplota .
(teplota 100){
printf("Pára.");
}
else if (teplota 0){
printf("Voda.");
}
{
printf("Led.");
}
//doplňte podmínku tak, aby program vypsal "Vstup povolen" pouze v případě, že heslo je 9876.
(heslo 9876){
printf("Vstup povolen.");
}
podmínka (condition)
Vykoná se pozitivní větev (blok kódu ihned za kulatou závorkou uzavírající podmínku).
Například je-li více možností než dvě (např. na semaforu svítí zelená, žlutá nebo červená).
if
Uvádí zápornou větev kódu, tj. kód, který se vykoná, není-li podmínka splněna.
selekce
= (jedno rovnítko)
&& (a zároveň; AND), || (nebo; OR)
== (dvě rovnítka)
Příklady
Příklady na selekce si můžete zobrazit zde.
Příklady z webu w3resource si můžete zobrazit zde.