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:

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ě:

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.");
}
Jak se jmenuje část selekce v kulatých závorkách ihned za klíčovým slovem?

podmínka (condition)

Co se stane, je-li podmínka v příkazu if vyhodnocená jako pravdivá?

Vykoná se pozitivní větev (blok kódu ihned za kulatou závorkou uzavírající podmínku).

Proč používáme vnořené podmínky?

Například je-li více možností než dvě (např. na semaforu svítí zelená, žlutá nebo červená).

Jakým klíčovým slovem začíná selekce?

if

K čemu slouží klíčové slovo „else“?

Uvádí zápornou větev kódu, tj. kód, který se vykoná, není-li podmínka splněna.

Jak se v programování nazývá schopnost rozdělit běh programu buď – anebo?

selekce

Jak vypadá operátor „přiřazení“?

= (jedno rovnítko)

Jakými operátory se slučuje několik výrazů?

&& (a zároveň; AND), || (nebo; OR)

Jak vypadá operátor „je rovno“?

== (dvě rovnítka)

Příklady

Příklady na selekce si můžete zobrazit zde.

Příklady z webu w3resource si můžete zobrazit zde.