Prohození dvou proměnných

Prohodit hodnoty dvou proměnných je v programování častý úkol, třeba při řazení. Začněme v main, bez funkce. Na první pokus to vypadá jednoduše:

int a = 3;
int b = 8;
a = b;
b = a;
std::cout << a << " " << b << std::endl;

Tento kód vypíše:

8 8

Příkaz a = b; přepsal původní hodnotu a, tedy 3, a ta se ztratila. Je to jako prohodit obsah dvou plných sklenic: potřebujete třetí, prázdnou. V programu je touto sklenicí pomocná proměnná, do které si původní hodnotu a nejdřív uložíte:

int a = 3;
int b = 8;
int pomocna = a;
a = b;
b = pomocna;
std::cout << a << " " << b << std::endl;

Tento kód vypíše:

8 3

Ve funkci to funguje stejně, jen musí funkce změnit obě proměnné toho, kdo ji volá. Oba parametry proto budou reference. Kdyby některý z nich referencí nebyl, funkce by změnila jen svou kopii a prohození by nefungovalo. Hotovou funkci pro prohození má i standardní knihovna, std::swap(a, b) (z knihovny <utility>). Teď víte, jak uvnitř funguje.

Reference umožňují ještě jednu věc: funkce přes ně může předat víc výsledků najednou, zatímco return vrací jen jednu hodnotu. Tato funkce rozdělí bonbony mezi děti a do dvou referencí uloží, kolik dostane každé dítě a kolik bonbonů zbude:

#include <iostream>

void rozdel(int bonbony, int deti, int& kazdemu, int& zbytek) {
    kazdemu = bonbony / deti;
    zbytek = bonbony % deti;
}

int main() {
    int kazdemu = 0;
    int zbytek = 0;
    rozdel(17, 5, kazdemu, zbytek);
    std::cout << "Každé dítě: " << kazdemu << ", zbude: " << zbytek << std::endl;
    return 0;
}

Tento kód vypíše:

Každé dítě: 3, zbude: 2

První dva parametry funkce jen čte, a tak jsou to obyčejné parametry a můžete jim předat i čísla. Do posledních dvou funkce zapisuje, a tak jsou to reference a musíte jim předat proměnné.

Pokyny

Místo prvního komentáře napište funkci prohod, která dostane dvě reference na int a prohodí jejich hodnoty.

V main místo komentáře mezi oběma výpisy zavolejte funkci prohod a předejte jí proměnné prvni a druhy. Program vypíše 3 8 a pod tím 8 3.

Pod funkci prohod napište funkci serad, která také dostane dvě reference na int. Když je v prvním parametru větší číslo než ve druhém, zavolá funkci prohod a čísla prohodí. V prvním parametru tak bude vždy menší číslo. Reference můžete předat dál: prohod uvnitř serad změní proměnné z main. Místo posledního komentáře zavolejte serad(x, y). Poslední řádek výpisu pak bude 4 9.

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

2/10