Celočíselné dělení
Dělení má v C++ jednu záludnost. Zkuste odhadnout, co vypíše tento příkaz:
std::cout << 7 / 2 << "\n";Vypíše:
3Ne 3.5, ale 3. Když dělíte dvě celá čísla, je výsledek také celé číslo: C++ desetinnou část zahodí. Nezaokrouhluje, jen ji odřízne, takže i 19 / 10 je 1 a 2 / 3 je 0. Tomu se říká celočíselné dělení.
Celočíselné dělení odpovídá dělení se zbytkem ze základní školy: kolikrát se jedno číslo vejde do druhého. Zbytek dává operátor % (znak procenta, programátoři mu říkají modulo):
std::cout << 7 / 2 << "\n";
std::cout << 7 % 2 << "\n";
std::cout << 10 % 5 << "\n";Vypíše:
3
1
0Dvojka se do sedmičky vejde třikrát (3 × 2 = 6) a 1 zbude. Když dělení vyjde beze zbytku, je zbytek 0. Podle toho se poznají sudá čísla: sudé číslo má po dělení dvěma zbytek 0, liché 1. Operátor % funguje jen s celými čísly.
Pokud chcete desetinný výsledek, musí být aspoň jedno z čísel desetinné:
std::cout << 7.0 / 2 << "\n";
std::cout << 7 / 2.0 << "\n";
std::cout << 10.0 / 3 << "\n";Vypíše:
3.5
3.5
3.33333Desetinná čísla vypisuje std::cout nejvýš na 6 platných číslic, proto 3.33333.
Typická chyba je myslet si, že stačí výsledek uložit do proměnné typu double:
double polovina = 7 / 2;
std::cout << polovina << "\n";Vypíše:
3C++ nejdřív spočítá 7 / 2. Obě čísla jsou celá, takže vyjde 3, a teprve tato trojka se uloží do proměnné polovina. Na typu proměnné vlevo od = nezáleží.
A co když dělíte dvě proměnné typu int? Pak jednu z nich převeďte na desetinné číslo pomocí static_cast<double>(...):
int body = 7;
int pocetHer = 2;
std::cout << static_cast<double>(body) / pocetHer << "\n";Vypíše:
3.5static_cast<double>(body) vezme hodnotu proměnné body jako desetinné číslo. Proměnná sama zůstane typu int.
Jak psát:
Pokyny
Čtyři kamarádi si objednali pizzy, dohromady nakrájené na 18 kousků. Kolik celých kousků dostane každý? Spočítejte to z proměnných a vypište:
Kousky pro každého: 4Kolik kousků zbude? Spočítejte to pomocí % a vypište na další řádek:
Zbude kousků: 2Účet je 1250 Kč a kamarádi ho rozdělí rovným dílem. Na další řádek vypište, kolik zaplatí každý. S celočíselným dělením by vyšlo jen 312 a 2 Kč by chyběly:
Každý zaplatí: 312.5 KčZačněte programovat zdarma
6/9