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:

3

Ne 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
0

Dvojka 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.33333

Desetinná čí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:

3

C++ 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.5

static_cast<double>(body) vezme hodnotu proměnné body jako desetinné číslo. Proměnná sama zůstane typu int.

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: 4

Kolik 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

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

6/9