IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

5. diel - Podmienky a ich použitie

Minulá lekcia, Premenné, komentáre a čítanie vstupu , nás naučila pracovať s premennými a komentármi. Predviedli som aj ukážku užívateľského vstupu.

Už vieme, čo sú to premenné a na čo sa vlastne používajú, teda môžeme pokročiť trochu ďalej. Táto lekcia nás zľahka prevedie podmienkami. Budeme sa rozprávať o ich funkcii aj dôležitosti. Žiadny dobrý programátor sa bez podmienok nezaobíde. Ide teda o jednu z najzákladnejších a zároveň najdôležitejších látok, ktoré sa musíme v programovaní podrobne venovať. Ak sa naučíme, ako podmienky ovládať a efektívne s nimi pracovať, tak sa nám otvorí množstvo možností. Táto lekcia nám síce poskytne dostatočný prísun informácií, ale predsa len pre záujemcov tu máme podrobnejší kurz Základná konštrukcia jazyka C.

Podmienky

Dalo by sa povedať, že podmienky sú vlastne možnosť reakcie na vzniknuté situácie. Zjednodušene – keď sa niečo stane, budeme na to musieť nejako reagovať. Napríklad: Zazvoní zvonček pri dverách. Naša reakcia môže byť, že ideme otvoriť alebo ho ignorujeme.

Takéto rozhodnutia majú veľa spoločného s vetvením programu. Normálne program začne prvým príkazom a potom vykonáva jeden za druhým. Podmienky však umožnia preskočiť na iné miesto programu, alebo vykonať iný kód, v závislosti od aktuálnej situácie. Veľmi často túto situáciu povedzme stav programu, ovplyvňuje používateľ. Avšak môže na to mať vplyv aj vrátená hodnota z nejakého funkcie alebo pripojeného zariadenia. Napríklad senzor pohybu zaznamená aktivitu a poskytne testovateľný vstup základnej doske. Podľa stavu sa môžeme rozhodnúť, či spustiť poplach a volať políciu, alebo sa rozhodnúť, že je všade pokoj a pohoda.

Je veľa situácií, v ktorých sa hodí podmienku použiť. Dokonca by sme povedali, že sa bez tejto fundamentálnej znalosti nezaobíde ani ten najhorší možný programátor. To je dôvod, prečo si dnes vysvetlíme, ako s podmienkami pracovať a hlavne ich funkčnosť. Pre lepšiu predstavu si všetko ukážeme na jednotlivých príkladoch.

Zápis podmienok

Možno povedať, že všetky podmienky majú tvar: Pokiaľ niečo, tak vykonáme toto. Inak urobíme tamto. Teraz si to však musíme rozobrať detailnejšie.

Kľúčové slovo if

Ak chceme zapísať podmienku, tak nám na to poslúži kľúčové slovo if (písané malými písmenami). Tento výraz znamená v preklade "Keď, ak...", čo nám napovedá, ako tento typ podmienky funguje. Slovo if nám hovorí, že pokiaľ je podmienka splnená, prebehne kus kódu, ktorý sa nachádza v bloku programu pod konkrétnou podmienkou.

Blok programu v C, C++ a teda aj Wiring je všetko, čo obsahujú zložené zátvorky { ... }.

Skúsme si to pre lepšiu predstavu ukázať na príklade:

/*
 * Proběhne pouze jednou.
 * Nastavíme komunikační rychlost na 9600 Baud*s^(-1)
 */
void setup()
{
    Serial.begin(9600);
}

/*
 * Hlavní smyčka programu
 */
void loop()
{
    if (1 < 2) // Ptáme jestli je 1 menší než 2? Vždy je to pravda a tak proběhne blok níže
    {
        Serial.println("Podmínka platí"); // Výpis do sériového monitoru
    }
}

Pokiaľ by sme podmienku obrátili: if (1 > 2) {...}, celý blok programu v zložených zátvorkách sa preskočí a pokračuje až za ním.

Teda vieme, že if môžeme použiť v prípade, keď treba o niečom rozhodnúť - niečo sa stalo a reagujeme. Môžeme ho tiež použiť, keď sa niečo nestane.

Dobrým príkladom môže byť, keď program vyzve používateľa, aby zadal kladné číslo, ktoré je potom porovnávané s číslom iným. Keď podmienku užívateľ nesplní a zadá napríklad číslo záporné, môžeme podmienku if použiť na to, aby užívateľovi „vynadala“ za jeho chybu a nám sa tak nezrútil celý program.

Kľúčové slovo else

Keď sa zamyslíme nad spracovaním podmienky s príkazom if, zistíme, že niečo chýba. Taká odpoveď na otázku: Čo keď to prvé je zle?

Jazyk Arduina ponúka riešenie aj tejto otázky a tým je kľúčové slovo else (môžeme ho preložiť ako „inak“). Prevedené do programátorskej reči:

if (cosi)
{
    // cosi je pravda, tak uděláme kód tady
}
else
{
    // cosi je blbě, tak provedeme tento kód
}

Pre lepšiu predstavu fungovania si ukážeme praktický príklad a trošku upravíme program, ktorý sme si ukazovali hore:

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    if (1 > 2) // Jednoduchá podmínka, kde se ptáme jestli je 1 větší než 2
    {
        Serial.println("Podmínka platí"); // Podmínka platí -> vypíše se text
    }
    else // Prvotní podmínka je neplatná
    {
        Serial.println("Podmínka neplatí"); // Vypíše se tohle
    }
}

Viac volieb else if

Aby sme mohli vytvoriť viac možností jednotlivých podmienok nám poslúži výraz else if. Takto môžeme nastaviť neobmedzene možností a tým sa pripraviť na rôzne scenáre, ktoré by mohli v priebehu programu nastať. Trochu upravíme náš predošlý program a ukážeme si, ako by sme tam mohli implementovať else if.

int a = 1; // Proměnná, kterou poté budeme porovnávat. (Celé číslo)

void setup()
{
Serial.begin(9600);
}

void loop()
{
    if (a > 3) // Ptáme jestli je proměnná 'a' větší než 3
    {
        Serial.println("Proměnná a je větší, než 3"); // Vypíšeme text
    }
    else if (a == 1) // Ptáme jestli je proměnná 'a' rovna 1
    {
        Serial.println("Proměnná a je rovna 1"); // Ano je rovna jedné
    }
    else if (a == 2) // Ptáme jestli je proměnná 'a' rovna 2
    {
        Serial.println("Proměnná a je rovna 2");
    }
    else
    {
        Serial.println("Proměnná a je asi 0 nebo záporná"); // Víc možností nemáme
    }
}

Operátory využívané pri podmienkach

Tu by som mohol rozobrať mnoho matematických teórií, ale nám postačí, že jednoduchá znalosť. Na každej množine čísel je definovaná relácia. Teda porovnanie. Programátori tohto faktu často využívajú av podmienkach najčastejšie😇

Každý (bžžný) programovací jazyk má k dispozícii takzvané relačné operátory, ktoré sú neoddeliteľnou súčasťou if výrazu.

Jeden relačný operátor (porovnanie: ==) sme využili náš kód vyššie. Predkladám tu tabuľku s ďalšími príkladmi relačných operátorov, ktoré sa pri podmienkach tiež hojne používajú:

Operátor Kompletný zápis Význam
== x == y Ak sa x rovná y
!= x != y Ak sa x nerovná y
< x < y Ak je x menší ako y
> x > y Ak je x väčšia ako y
<= x <= y Ak je x menší alebo rovný y
>= x >= y Ak je x väčší alebo rovný
Pozor! Je potrebné odlišovať zápis x == y, kde porovnávame dve hodnoty a zápis x = y, kde hodnotu priraďujeme!

Podmienky a logické operátory

Vieme ako na to, keď je podmienka jedna, ale čo robiť v prípade, keď chceme, aby platilo viac podmienok naraz?

Aj pre túto situáciu tu existuje riešenie. Poslúži nám na to operátor &&, ktorý v slovenčine znamená "súčasne" a ||, Jeho význam je "alebo". Skratka pre && je Ctrl + Alt + C a pre || to je Ctrl + Alt + W.

Operátor Kompletný zápis Význam
&& x and y alebo x && y Ak je xa súčasne y
|| x or y alebo x || y Ak je x alebo y
Ukážeme si veľmi jednoduchý príklad toho, ako môžeme kombinovanie podmienok využiť:
int a = 1; // Definice proměnné a s hodnotou 1
int b = 0; // Definice proměnné b s hodnotou 0

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (a == 1 && b == 0) // Pro splnění musí být 'a' rovno 1 a současně 'b' rovno 0 (v našem případě podmínka proběhne)
  {
    Serial.println("Proměnná a je rovna 1, zatímco proměnná b je rovna 0");
  }
}

Možno by som mal upozorniť na "lenivé" vyhodnotenie podmienok. Vyššie uvedený príklad bude spracovaný celý, ale skúsme podmienku if (a == 1 || b == 0) {...}. Tu sa prvýkrát porovná a jednotkou a pokiaľ je výsledok kladný, programu to stačí. Teda b == 0 je už nedôležitý a bude preskočený.

Kľúčové slovo - switch

Ak máme podmienok viac, chceme začať nejakou voľbou a pri tom si udržať kód prehľadný, môžeme použiť sekvenciu switch. Ide o istú alternatívu k else if, ktorá je viac prehľadná. Funkcionalitou je switch dosť podobný else if. Ukážeme si jednoduché využitie a celkový zápis switch:

int volba = 1; // Proměnná s hodnotou 1

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    switch (volba) // Switch s dosazenou proměnnou "volba" --> hodnota proměnné je 1, což znamená, že proběhne case 1
    {
        case 1: // Volba číslo 1 - proběhne, když proměnná volba bude rovna 1
            Serial.println("Zvolena možnost 1");  // Výpis textu do sériového monitoru
            break; // Zamezíme vyhodnocení dalších voleb
        case 2:
            Serial.println("Zvolena možnost 2");
            break;
        case 3: // Volba číslo 3
            Serial.println("Zvolena možnost 3");
            break;
        default: // Výchozí volba - proběhne, nebude-li proměnná rovna žádné z možností
            Serial.println("Žádná ze zvolených možností"); // Výpis textu do sériového monitoru
     }
}

Každý blok switch ide nahradiť blokom else if, záleží na vašej preferencii a na situačnej prehľadnosti programu.

Z podmienok, volieb a vetvenia programu je to zatiaľ všetko. Prax vás určite odprevadí aj k ďalším zákutiam programátorského umenia.

V nasledujúcej lekcii, Cykly a ich syntax a použitie , sa zoznámime s cyklami v jazyku Wiring a predvedieme si ich praktické použitie.


 

Predchádzajúci článok
Premenné, komentáre a čítanie vstupu
Všetky články v sekcii
Arduino - Programovací jazyk
Preskočiť článok
(neodporúčame)
Cykly a ich syntax a použitie
Článok pre vás napísal Dominik Němeček
Avatar
Užívateľské hodnotenie:
3 hlasov
Autor se věnuje programování mikropočítačů Arduino.
Aktivity