- priority operátorů
- nejčastější chyby
Priorita operátorů
Můžete C++ věřit při provádění komplikovaných aritmetických výpočtů? Ano, ale musíte znát pravidla, která C++ používá. Použijete-li více operandů, můžete se začít ptát, který se aplikuje první.
Příklad
int celkem = 3
+ 4 * 5; // 35 nebo 23?
Pokud použijete více operandů, C++ uplatní pravidla o prioritě. Aritmetické operátory dodržují obvyklé algebraické pořadí - násobení, dělení a zjištění zbytku po celočíselném dělení se provádějí před sčítáním a odčítáním. Proto 3 + 4 * 5 znamená 3 + (4 * 5). Výsledek: 23.
Samozřejmě na posílení vašich priorit můžete libovolně používat závorky.
Ale...
float oper = 120 / 4 * 5; // 150 nebo 6?
Operátory * a / mají stejnou prioritu, který bude první?
V takovém případě C++ postupuje dle takovýchto priorit:
Jinak posuzuje, zda má operand asociaci zleva doprava, čí zprava doleva.
Ale vysvětlení je poněkud těžkopádné, proto jsou jednoduší závorky - jste si jistí, že se stane to, co chcete.
Ve sloupci PRIORITA vidíte několik skupin, všechny operátory v dané skupině mají stejnou prioritu a stejnou asociativitu, která je buď zleva doprava (v tabulce označena L-P) nebo zprava doleva (P-L).
To znamená, že například 120 / 6 * 5 má asociativitu dle tabulky L-P - zleva doprava, bude to tedy stejné, jako (120/6) * 5, což je 100.
Nejčastější chyby v úkolech:
- Nevím, proč includujete zbytečné či neexistující soubory (#include <vcl.h> a #include <stdlib.h>
- Místo int main() píšete jen int main - tam musí být závorky!
- Nepoužíváte na konci cin.get(); (viz 1. lekce)
- Nepoužívejte syntaxe z C, učíte se přeci C++, ne? Žádné printf apod..
- Nemůžete napsat jen tak endl; - musíte to poslat do výstupu, tedy: cout << endl; nebo cout << " ";