Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
| spse:pm1:cpp-operatory [2020/12/07 19:21] – [Operátor přiřazení] jenda | spse:pm1:cpp-operatory [2024/07/07 16:48] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| - | ====== | + | ~~NOCACHE~~ |
| + | ~~REVEAL theme=dokuwiki& | ||
| + | |||
| ====== Operátory ====== | ====== Operátory ====== | ||
| Řádek 6: | Řádek 9: | ||
| ===== Operátor přiřazení ===== | ===== Operátor přiřazení ===== | ||
| Jedná se o základní, ale zřejmě nejčastěji používaný operátor a značí se rovnítkem '' | Jedná se o základní, ale zřejmě nejčastěji používaný operátor a značí se rovnítkem '' | ||
| + | ----> | ||
| <code c> | <code c> | ||
| int x; | int x; | ||
| Řádek 13: | Řádek 17: | ||
| </ | </ | ||
| - | Máme proměnnou x, které | + | Proměnné x, je přiřazena hodnota 7. Při výpisu se tedy zobrazí " |
| + | <---- | ||
| + | ----> | ||
| <code c> | <code c> | ||
| int x,y,z; | int x,y,z; | ||
| Řádek 20: | Řádek 26: | ||
| y = x; // | y = x; // | ||
| z = 3; // | z = 3; // | ||
| - | x = y+z; // | + | x = y + z; // |
| printf(" | printf(" | ||
| </ | </ | ||
| - | Tento příklad je už o něco složitější, | + | * u přiřazení platí pravidlo right to left, neboli zprava doleva. |
| + | * Znamená to, že hodnota pravé strany je přiřazována levé straně. | ||
| + | <---- | ||
| + | ----> | ||
| + | ==== Pravidla přiřazení ==== | ||
| <code c> | <code c> | ||
| Řádek 33: | Řádek 43: | ||
| </ | </ | ||
| - | Hodnota proměnné '' | + | * Hodnota proměnné '' |
| + | * Tato hodnota je zprava postupně předávána všem proměnným. | ||
| + | <---- | ||
| ===== Aritmetické operátory ===== | ===== Aritmetické operátory ===== | ||
| - | Tyto operátory zná každý člověk již od první třídy základní školy. | + | * Jedná se o operace jako sčítaní a odčítání či dělení a násobení. |
| + | * Patří sem však také operace modulo. | ||
| + | < | ||
| ^ OPERÁTOR ^ VÝZNAM | ^ OPERÁTOR ^ VÝZNAM | ||
| | + | sčítání | | + | sčítání | ||
| Řádek 45: | Řádek 57: | ||
| | / | dělení | | / | dělení | ||
| | % | modulo (zbytek po dělení) | | % | modulo (zbytek po dělení) | ||
| + | </ | ||
| + | ----> | ||
| - | Operaci modulo si pro jistotu vysvětlíme na následujícím příkladu: | + | < |
| <code c> | <code c> | ||
| int x; | int x; | ||
| x = 10 % 3; | x = 10 % 3; | ||
| printf(" | printf(" | ||
| + | // output: " | ||
| </ | </ | ||
| + | </ | ||
| + | * Proměnné '' | ||
| + | * Pokud podělíme číslo 10 třemi, dostaneme výsledek 3 a zbytek 1 - tento zbytek je výslednou hodnotou. | ||
| + | * Tímto způsobem lze například snadno zjistit, zda je číslo sudé nebo liché '' | ||
| + | <---- | ||
| - | Proměnné '' | ||
| - | |||
| - | Tímto způsobem lze například snadno zjistit, zda je číslo sudé nebo liché (19 % 2 = 1; 22 % 2 = 0). | ||
| ==== Složené přiřazení ==== | ==== Složené přiřazení ==== | ||
| - | Jednoduchý operátor přiřazení již známe, proto se můžeme podívat na přiřazení složené. Bez znalosti operátorů složeného přiřazení se však bez problémů obejdeme, jedná | + | * Jedná |
| + | * '' | ||
| + | * Obdobné je to i s dalšími složenými operátory: | ||
| + | * '' | ||
| - | '' | + | ==== Inkrementace a dekrementace |
| - | má stejný význam jako: | + | |
| - | '' | + | |
| - | + | ||
| - | Obdobné je to i s dalšími složenými operátory: '' | + | |
| - | + | ||
| - | Inkrementace a dekrementace | + | |
| - | Pokud proměnnou inkrementujeme, | + | |
| + | * Inkrementace se značí '' | ||
| + | < | ||
| <code c> | <code c> | ||
| x++; | x++; | ||
| - | </ | ||
| - | Tento zápis má stejný význam jako zápis '' | ||
| - | |||
| - | <code c> | ||
| - | int x,y; | ||
| - | y = 2; | ||
| - | x = ++y; | ||
| - | printf(" | ||
| </ | </ | ||
| - | + | Tento zápis má stejný význam jako zápis | |
| - | Pokud použijeme prefixový způsob zápisu, bude proměnné | + | </fragment-block> |
| - | + | ||
| - | <code c> | + | |
| - | int x,y; | + | |
| - | y = 2; | + | |
| - | x = y++; | + | |
| - | printf(" | + | |
| - | </code> | + | |
| - | + | ||
| - | Pokud však použijeme postfixový zápis, bude proměnné '' | + | |
| ===== Relační operátory ===== | ===== Relační operátory ===== | ||
| - | Relační operátory se používají pro vzájemné porovnání dvou ale i více proměnných. Porovnávat můžeme například zda jsou si hodnoty proměnných rovny nebo zda je jedna větší než druhá a podobně. | + | * Relační operátory se používají pro vzájemné porovnání dvou ale i více proměnných. |
| + | * Porovnávat můžeme například zda jsou si hodnoty proměnných rovny nebo zda je jedna větší než druhá a podobně. | ||
| + | < | ||
| ^ OPERÁTOR ^ VÝZNAM ^ | ^ OPERÁTOR ^ VÝZNAM ^ | ||
| | > | větší než | | | > | větší než | | ||
| Řádek 106: | Řádek 103: | ||
| | == | je rovno | | | == | je rovno | | ||
| | != | není rovno | | | != | není rovno | | ||
| - | Výsledkem porovnání je vždy booleovská hodnota a to pravda nebo nepravda. | + | </ |
| + | * Výsledkem porovnání je vždy booleovská hodnota a to pravda nebo nepravda. | ||
| + | ----> | ||
| <code c> | <code c> | ||
| int x,y; | int x,y; | ||
| Řádek 117: | Řádek 115: | ||
| x/2 != y; //nepravda | x/2 != y; //nepravda | ||
| </ | </ | ||
| - | + | < | |
| - | + | <WRAP center round important | |
| - | <WRAP center round important | + | |
| Operátor '' | Operátor '' | ||
| </ | </ | ||
| - | + | </ | |
| + | <---- | ||
| ===== Logické operátory ===== | ===== Logické operátory ===== | ||
| - | Logické operátory mají stejnou funkci jako spojka ve větě. Spojují několik výroků v jeden (složený výrok). Výsledkem je pravda nebo nepravda. Patří sem také operátor negace, který neguje logickou hodnotu výroku. Tedy z pravdy negací vznikne nepravda a naopak. | + | * Logické operátory mají stejnou funkci jako spojka ve větě. |
| + | * Spojují několik výroků v jeden (složený výrok). | ||
| + | * Výsledkem je pravda nebo nepravda. | ||
| + | * Patří sem také operátor negace, který neguje logickou hodnotu výroku. Tedy z pravdy negací vznikne nepravda a naopak. | ||
| + | < | ||
| ^ OPERÁTOR ^ VÝZNAM ^ | ^ OPERÁTOR ^ VÝZNAM ^ | ||
| | && | spojka a (and) | | | && | spojka a (and) | | ||
| | %%||%% | spojka nebo (or) | | | %%||%% | spojka nebo (or) | | ||
| | ! | negace | | ! | negace | ||
| + | </ | ||
| + | ----> | ||
| Příklad: Mějme následující složený výrok: | Příklad: Mějme následující složený výrok: | ||
| - | |||
| <code c> | <code c> | ||
| int x,y; | int x,y; | ||
| Řádek 140: | Řádek 140: | ||
| ((x < y) && (y != x)); | ((x < y) && (y != x)); | ||
| </ | </ | ||
| - | Operátor ''&&'' | + | * Operátor ''&&'' |
| + | * Výslednou hodnotu výroku určíme z pravdivostních hodnot jednotlivých jednoduchých výroků. | ||
| + | * Jednoduchý výrok '' | ||
| + | * Výslednou hodnotou složeného výroku je tedy pravda, jelikož pravda a pravda = pravda. | ||
| + | <---- | ||
| + | ==== Pravdivostní tabulky: ==== | ||
| + | < | ||
| + | ^ A ^ B ^ A && B ^ A %%||%% B ^ | ||
| + | | 1 | 1 | 1 | 1 | | ||
| + | | 1 | 0 | 0 | 1 | | ||
| + | | 0 | 1 | 0 | 1 | | ||
| + | | 0 | 0 | 0 | 0 | | ||
| + | </ | ||
| + | * Aby byl složený výrok se spojkou ''&&'' | ||
| + | * Z pravdivostní tabulky spojky '' | ||
| - | Jednoduchý výrok (x < y) dává výslednou hodnotu pravda stejně jako výrok (y != x). Výslednou hodnotou složeného výroku je tedy pravda, jelikož pravda a pravda | + | === Negace === |
| - | + | ||
| - | A B A && B | + | |
| - | pravda pravda pravda | + | |
| - | pravda nepravda nepravda | + | |
| - | nepravda pravda nepravda | + | |
| - | nepravda nepravda nepravda | + | |
| - | Z této pravdivostní tabulky jasně vyplývá, že k tomu, aby byl složený výrok se spojkou && pravdivý, musí být pravdivé i všechny jednoduché výroky ze kterých je je tento výrok složen. | + | |
| - | + | ||
| - | A B A || B | + | |
| - | pravda pravda pravda | + | |
| - | pravda nepravda pravda | + | |
| - | nepravda pravda pravda | + | |
| - | nepravda nepravda nepravda | + | |
| - | Naopak z pravdivostní tabulky spojky '' | + | |
| - | + | ||
| - | Pro úplnost si ukážeme ještě již zmiňovanou negaci: | + | |
| <code c> | <code c> | ||
| Řádek 167: | Řádek 165: | ||
| </ | </ | ||
| - | |||
| Výslednou hodnotou je nepravda a to i přesto, že výrok 2 > 1 je pravdivý. Výsledná hodnota výroku je totiž negována. | Výslednou hodnotou je nepravda a to i přesto, že výrok 2 > 1 je pravdivý. Výsledná hodnota výroku je totiž negována. | ||
| Řádek 173: | Řádek 170: | ||
| ===== Priorita operátorů ===== | ===== Priorita operátorů ===== | ||
| - | Priorita operátorů má vliv na to, která operace se provede dříve. Příklad: | + | < |
| + | <code c> | ||
| int x; | int x; | ||
| x = 2 + 3 * 4; | x = 2 + 3 * 4; | ||
| - | cout << | + | printf(" |
| - | Výsledkem je číslo 14, protože nejprve dojde k součinu čísel 3 a 4, jelikož násobení má větší prioritu než sčítání, | + | </code> |
| - | + | </ | |
| - | Prioritu operátorů však vůbec nepotřebujete znát. Existuje jednoduchý trik a to závorky. | + | |
| + | | ||
| + | < | ||
| + | <code c> | ||
| int x; | int x; | ||
| x = (2 + 3) * 4; | x = (2 + 3) * 4; | ||
| cout << x << endl; | cout << x << endl; | ||
| Výsledkem je nyní číslo 20. | Výsledkem je nyní číslo 20. | ||
| - | + | </ | |
| - | V C++ existují ještě další operátory. My si však nyní bohatě vystačíme z operátory, které jsme si uvedli v této lekci. | + | </ |