Vítejte u dalšího dílu z našeho C++ kurzu. Dnes si řekneme něco o výpisu do konzole a prozradím Vám něco o větvení, které je neodmyslitelnou součástí každého programovacího jazyka.

Vstup a výstup

V konzoli rozlišujeme dva základní proudy, vstupní a výstupní. Jak už nám názvy napovídají, jedná se o načítání z konzole do proměnných a výpis zpět do konzole.


#include <iostream>

Jak si můžeme povšimnout, je velice důležité mít načtenou knihovnu iostream ktérá nám zprostředkovává funkce istream ostream. Chceme li načíst data do proměnné použijeme příkaz cin a určíme za pomoci operátoru >> do které proměnné se má vstup z konzole uložit.


// Deklarace proměnné celočíselného datového typu
int cislo;

// Načtení dat z konzole do proměnné
cin >> cislo;

Chceme-li načíst postupně do více proměnných, není to vůbec žádný problém, stačí nám přidat další operátor pro vstup a za něj následující proměnnou.


// Deklarace proměnných
int cislo1, cislo2;

// Nactení dat do dvou a více proměnných
cin >> cislo1 >> cislo2;

V tomto případě nezáleží na datovém typu jednotlivých proměnných, z toho vyplývá, že můžeme řetězit proměnné různých datových typů, jak pro vstup, tak i pro výstup. Musíme si dát ale pozor na ošetření dat, které nám zadá uživatel. Dejme tomu, že budeme očekávat na vstupu číslo, ale uživatel zadá text. Pro zachycení této skutečnosti nám slouží metoda fail().


// Deklarace číselné proměnné
double cislo;

// Očekáváme zadání čísla (1, -5, 12.5, 0.333, atd...)
cin >> cislo;

// Ověření zda byly zadány správné hodnoty uživatelem
if (cin.fail()) {
    // Chybně zadaná hodnota
    // Uživatel nezadal číslo, zadal například text ("Ahoj", atd...)
}

Ještě jedna věc k ošetření nám ale schází. Pokud uživatel zadá číslo, které ale bude následovat něco jiného například (12.5.4, 0.abc, 125.0., atd…), metoda fail() tuto chybu bohužel nezachytí. Není ale nutné zoufat, nabízí se nám totiž metoda peek(), se kterou se pracuje následovně.


// Deklarace proměnné
double cislo;

// Očekávání zadání čísla
cin >> cislo;

// Ověření zda za číslem přímo následuje Enter
if (cin.peek() != '\n') {
    // Pokud Enter není následujícím znakem, provede se kód v tomto těle
}

Metody peek() fail() je vhodné kombinovat, vyvarujete se tak tím neočekávaným vstupům a následujícím chybám.

Pro výstup z konzole existuje klíčové slovo cout, které je následováno operátorem pro výstup << a opět je možné je řetězit.


// Deklarace a definice číselné proměnné
int number = 5;

// Deklarace a definice řetězce
string retezec = "Ahoj";

// Výpis hodnot do konzole
cout << retezec << " moje cislo: " << number << endl;

Jak si můžeme povšimnout, řetězím v tomto případě více věcí (proměnnou s řetězcem, řetězec, číslo a ukončovací znak). Příkaz endl nám vlastně zaručí ukončení řádku a následné pokračování na řádku novém.

Větvení

Pod pojmem větvení, si můžeme představit možnost rozhodnout se, zda se provede určitá část kódu. Například se zeptáme, jestli je uživatel přihlášený a pokud je, zobrazíme mu soukromé zprávy.

Větvení se dělí do několika skupin, a to na neúplné, úplné, několika násobné. Pro větvení využíváme klíčová slova if else.

Neúplné větvení

Pokud platí podmínka provede se určitá část kódu, pokud podmínka neplatí pokračuje se dál.

Příklad: Pokud je muž ženatý, zeptáme se jak se jmenuje jeho žena.


if (podminka) {
    // podmínka platí
}

Úplné větvení

Pokud platí podmínka provede se první část kódu, pokud neplatí provede se druhá část kódu.

Příklad: Pokud zaplatím objednávku, odešle se zboží z eshopu. Pokud nezaplatím, objednávka se stornuje.


if (podminka) {
   // Podmínka platí
} else {
   // Podmínka neplatí
}

Příkladem úplného větvení může být ještě tak zvaný ternární operátor, který nám může přímo uložit do proměnné data, na jednom řádku.


int cislo;

// Pokud podmínka platí nastaví se hodnota na 10, pokud ne nastaví se na 5
cislo = (podminka) ? 10 : 5;

// Ekvivalentní zápis
if (podminka) {
   cislo = 10;
} else {
   cislo = 5;
}

Několika násobné větvení

V tomto případě rozlišujeme, jestli máme více podmínek, nebo pouze u jedné proměnné rozlišujeme hodnotu.

Příklad s více podmínkami: Máme li záporná čísla vypíšeme slovo záporná. Pro kladná čísla vypíšeme slovo kladná a pro nulu vypíšeme nula.


if (podminka1) {
   // Kód
} else if (podminka2) {
   // Kód
} else {
   // Kód
}

Při práci s podmínkou pro porovnání hodnoty, využíváme klíčová slova switch, case, default  break. 

Příklad s hodnotou: Pokud je hodnota 1 zvolíme část kódu, pokud je hodnota 2, zvolíme jinou část kódu, a pokud je hodnota cokoli jiného zvolíme výchozí část kódu.


// Určení kterou proměnnou porovnáváme
switch (promenna) {
   case 1:
      // Pokud je hodnota 1 provede se tento kód
      // Zakončíme klíčovým slovem break
      break;
   case 2:
      // Pokud je hodnota 2 provede se tento kód
      // Zakončíme klíčovým slovem break
      break;
   default:
      // Pokud je hodnota jiná provede se tento kód
      // Zakončíme klíčovým slovem break
      break;
}

Logické operátory a tvorba podmínek

Logické operátory vracejí pouze dvě hodnoty true a false. Pokud je hodnota true podmínka platí, pokud je hodnota false podmínka neplatí.

Operace

&& – Logické spojení „a zároveň“, musejí platit obě strany logického výrazu

|| – Logické spojení „nebo“, musí platit alespoň jedna strana logického výrazu

! – Negace


// Operace &&
true && true // Vrátí true
true && false // Vrátí false
false && true // Vrátí false
false && false // Vrátí false

// Operace ||
true || true // Vrátí true
true || false // Vrátí true
false || true // Vrátí true
false || false // Vrátí false

// Operace !
!false // Vrátí true
!true // Vrátí false

Logické operátory

Logické operace doprovází i logické operátory. Pod tím si můžeme představit operátory jako:


cislo1 > cislo2 // Větší než

cislo1 < cislo2 // Menší než 

cislo1 >= cislo2 // Větší nebo rovno

cislo1 <= cislo2 // Menší nebo rovno

cislo1 == cislo2 // Rovno

cislo1 != cislo2 // Není rovno

Pokud výraz s operátorem platí vrací se hodnota true, v opačném případě false.

Závěr

Obecně platí, že cokoli nenulového je v logických operacích true. Musíme s tím tedy počítat. Další důležitou informací je to, že && má přednost před ||.

V dnešním díle jsme si řekli něco o vstupu a výstupu v konzoli, popsali jsme si větvení  a uvedli si úvod do logických operací pro tvorbu podmínek. Pokud jste čemukoliv nerozuměli, nebojte se mě zeptat v komentářích, na všechno rád odpovím. Příště si řekneme co jsou, a jak fungují cykly.


Komentujte

Buďte první kdo bude komentovat!

Upozornit na
avatar
wpDiscuz