Prohození dvou proměnných

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

int a = 3;
int b = 8;
a = b;
b = a;
printf("%d %d\n", a, b);

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;
printf("%d %d\n", a, b);

Tento kód vypíše:

8 3

Funkce prohod musí změnit dvě proměnné toho, kdo ji volá, a tak budou oba parametry ukazatele: void prohod(int *a, int *b). Uvnitř udělá tytéž tři kroky jako nahoře, jen místo a a b použije *a a *b. Pomocná proměnná pomocna zůstane obyčejný int, protože v ní je hodnota, ne adresa. Při volání předáte dvě adresy: prohod(&x, &y);.

Na co si dát pozor:

  • Když hvězdičky zapomenete (int *pomocna = a; a = b; b = pomocna;), funkce prohodí oba ukazatele, tedy své vlastní kopie adres. Program se přeloží i spustí, ale proměnné v main zůstanou, jak byly.
  • Funkce, která už ukazatele má, je předává dál bez &. Ve funkci s parametry int *a a int *b zavoláte prohod(a, b), protože a a b už adresy jsou. prohod(&a, &b) skončí chybou incompatible pointer types passing 'int **' to parameter of type 'int *'; remove &. int ** je adresa ukazatele, kterou tu nepotřebujete, a hláška radí, co udělat: odstranit &.

Pokyny

Místo prvního komentáře napište funkci prohod se dvěma parametry typu int *, a a b, která prohodí hodnoty, na které ukazují.

V main místo komentáře mezi prvními dvěma výpisy zavolejte funkci prohod s adresami proměnných prvni a druhy. Program vypíše 3 8 a pod tím 8 3.

Místo druhého komentáře napište funkci serad_dvojici, která také dostane dva ukazatele na int. Když první z nich ukazuje na větší číslo než druhý, zavolá funkci prohod a čísla prohodí. Menší číslo tak bude vždy první. Pak místo posledního komentáře zavolejte serad_dvojici s adresami proměnných x a y. Poslední řádek výpisu 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í:

6/11