Příkaz “if” – větvení běhu programu
C++ 11

image_printTisk

V tomto článku si probereme první příkaz pro řízení běhu programu. Jedná se příkaz if, který slouží pro větvení běhu programu na základě vyhodnocení nějakého logického výrazu. Seznámíme se s jeho syntaktickým zápisem, doplňujícím příkazem else a článek zakončíme ukázkami, jak se podmínky pomocí příkazu if řetězí nebo vnořuji.

Jak již bylo zmíněno, příkaz if slouží k rozvětvení běhu programu na základě vyhodnocení logického výrazu. Na následujícím příkladu je znázorněna jeho hrubá syntaxe.

if(podmínka) {
    Seznam příkazů provedených v případě kladného vyhodnocení podmínky.
}

Na příkladu je názorně vidět, že příkaz je uvozen klíčovým slovem if. Za ním je v kulatých závorkách uvedena logický výraz a za touto podmínkou následuje blok příkazů. Blok příkazů můžeme definovat jako posloupnost příkazů uzavřených do složených závorek. Tento blok je proveden pouze v případě, pokud je podmínkový výraz vyhodnocen jako pravdivý, tedy s logickou hodnotou true. Ukažme si vše na následujícím příkladu.

#include <iostream>
using namespace std;

int main() {
    int cislo = 0;
    cout << "Zadejte číslo: ";
    cin >> cislo;

    if(cislo % 2 == 0) {  // Význam podmínky: Je zbytek po dělení nula?
        cout << "Zadané číslo je sudé." << endl;
    }

    return 0;
}

Tato ukázka kódu vyzve uživatele k zadání čísla z textové konzole. Po té v podmínkovém výrazu vypočítá zbytek po dělení číslem dva a pokud je roven nule, je předáno řízení do vnitřního bloku příkazu if, ve kterém je umístěn příkaz pro zápis textu o sudosti čísla na výstupní konzoli.

Pokud je potřeba vykonat nějakou sekvenci příkazů v případě, kdy je podmínka vyhodnocena na nepravdivou hodnotu, můžeme rozšířit příkaz if o nový blok příkazů uvozený klíčovým slovem else. Viz následující ukázka.

if(podmínka) {
    Seznam příkazů provedených v případě kladného vyhodnocení podmínky.
} else {
    Seznam příkazů provedených, pokud je podmínka vyhodnocena jako nepravda.
}

Z výše uvedené ukázky je patrné, že stačí za blokem příkazů provedených v případě platnosti podmínky uvést klíčové slovo else následovaný blokem příkazů provedených v případě, že podmínka bude vyhodnocena jako neplatná. Nyní si vše ukažme na reálném příkladě.

#include <iostream>
using namespace std;

int main() {
    int cislo = 0;
    cout << "Zadejte číslo: ";
    cin >> cislo;

    if(cislo % 3 == 0) {  // Význam podmínky: Je zbytek po dělení nula?
        cout << "Zadané číslo je dělitelné třemi." << endl;
    } else {
        cout << "Zadané číslo není dělitelné třemi." << endl;
    }

    return 0;
}

Program na tomto příkladu vyzve uživatele k zadání nějakého celého čísla. Potom na základě testu, zda je zbytek po dělení třemi roven nule, zapíše na výstup informaci, zda je nebo není zadané číslo dělitelné číslem tři.

Stojí za zmínku, že podmínkové příkazy if lze vzájemně kombinovat, a to dvěma způsoby. První z nich je jejich řetězení, druhým je pak vnořování. Ukažme si napřed na příkladu první případ.

#include <iostream>
using namespace std;

int main() {
    int cislo = 0;
    cout << "Zadejte číslo: ";
    cin >> cislo;

    if(cislo % 2 == 0) {
        cout << "Zadané číslo je dělitelné dvěma." << endl;
    } else if(cislo % 3 == 0) {
        cout << "Zadané číslo je dělitelné třemi." << endl;
    } else {
        cout << "Zadané číslo není dělitelné dvěma, ani třemi." << endl;
    }

    return 0;
}

Program na příkladu po zadání čísla uživatelem napřed otestuje, zda je číslo dělitelné dvěma, pokud ne pak testuje třemi, a pokud ani tak ne, pak přechází řízení do finálního else bloku příkazů. Program má jeden zásadní nedostatek, že pokud je zadané číslo dělitelné dvěma i třemi, pak program zjistí jen dělitelnost dvěma. Tento nedostatek můžeme odstranit třeba za použití vnoření příkazů if, jak ukazuje následující příklad.

#include <iostream>
using namespace std;

int main() {
    int cislo = 0;
    cout << "Zadejte číslo: ";
    cin >> cislo;

    if(cislo % 2 == 0) {
        if(cislo % 3 == 0) {
            cout << "Zadané číslo je dělitelné dvěma i třemi." << endl;
        } else {
            cout << "Zadané číslo je dělitelné dvěma, není dělitelné třemi." << endl;
        }
    } else {
        if(cislo % 3 == 0) {
            cout << "Zadané číslo je dělitelné třemi, není dělitelné dvěma." << endl;
        } else {
            cout << "Zadané číslo není dělitelné ani dvěma, ani třemi." << endl;
        }
    }

    return 0;
}

Poslední příklad umí již vyšetřit dělitelnost čísla dvěma i třemi ve své úplnosti. Napřed vyšetřuje dělitelnost číslem dvě a po té, co běh programu zamíří do příslušného bloku vnějšího příkazu if, je vyšetřena dělitelnost číslem tři, na základě níž je zapsána na výstup příslušná informace o dělitelnost čísla. Rád bych jen upozornil, že pro profesionální praxi tento příklad vykazuje některé hrubé nedostatky (např. opakování kódu) a že jeho účelem je primárně pochopení tématu článku.

image_printTisk
Příkaz “if” – větvení běhu programu
C++ 11
Ohodnoťte tento článek

Související články

  • Cykly v C++ V tomto článku si popíšeme tří základní typy cyklů v jazyce C++ a vše si ukážeme na jednoduchém příkladu součtu čísel z posloupnosti 1..10. V závěru kapitoly pak budou vysvětleny dva […]
  • Aritmetické operátory Tento článek by měl čtenáři nastínit používání základních aritmetických operátorů v jazyce C++. Je dobré upozornit, že C++ disponuje širší sadou operátorů, než se třeba pojednává ve […]
  • Seznamy hodnot a cyklus “range-for” Úvod Datový typ vector nový datový typ v zobáčcích datový typ prvku inicalizace pomocí { } indexovací operátor pouze pouze na čísla range for cyklus […]
  • Aritmetika ukazatelů a pole V tomto článku si vysvětlíme, co je aritmetika ukazatelů. Ukážeme si význam a aplikaci dalších operátorů vztahujících se k ukazatelům a popíšeme si jejich vzájemné vztahy k polím různých […]
  • Ukazatele V tomto článku si představíme nový pojem ukazatel jako proměnnou obsahující adresu na jinou oblast paměti. Seznámíme se dvěma operátory při související s adresací a na závěr si ukážeme, […]
  • Úvod do iterátorů Dva hlavní pilíře STL knihovny jsou její datové struktury a obecné algoritmy pro práci s nimi. Vzhledem k různosti datových struktur a obecnosti algoritmů potřebujeme nějaký spojovací […]