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 8Pří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 3Ve 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: 2První 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é.
Jak psát:
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
2/10