Dva výsledky najednou

Pomocí return vrátí funkce jen jednu hodnotu. Některé výpočty ale mají výsledky dva. Třeba 135 minut je 2 hodiny a 15 minut, tedy dvě čísla. S ukazateli může funkce uložit do proměnných volajícího tolik výsledků, kolik potřebuje:

#include <stdio.h>

void rozdel_cas(int celkem_minut, int *hodiny, int *minuty) {
    *hodiny = celkem_minut / 60;
    *minuty = celkem_minut % 60;
}

int main(void) {
    int hodiny = 0;
    int minuty = 0;
    rozdel_cas(135, &hodiny, &minuty);
    printf("%d h %d min\n", hodiny, minuty);
    return 0;
}

Tento kód vypíše:

2 h 15 min

První parametr funkce jen čte, a tak je to obyčejný int a můžete mu předat i číslo. Do zbylých dvou funkce zapisuje, a tak jsou to ukazatele a musíte jim předat adresy proměnných. Takovým parametrům se říká výstupní parametry: funkce z nich nečte, ale vyplní je. Podle hvězdiček v prvním řádku funkce tak poznáte, které parametry jsou výsledky.

Proměnné hodiny a minuty musí existovat už před voláním. Tady začínají na 0 a funkce jejich hodnoty přepíše. Když ji zavoláte ještě jednou se stejnými proměnnými, přepíše je znovu. A jako obvykle: když ve volání zapomenete &, překlad skončí chybou s radou take the address with &.

Pokyny

Místo komentáře napište funkci rozdel se čtyřmi parametry: bonbony a deti typu int, které jen čte, a ukazateli kazdemu a zbytek typu int *, do kterých uloží výsledky. Funkce rozdělí bonbony mezi děti: každé dítě dostane bonbony / deti bonbonů a bonbony % deti jich zbude.

V main pod printf vytvořte proměnné kazdemu a zbytek s hodnotou 0. Zavolejte funkci rozdel s proměnnými bonbony a deti a s adresami obou nových proměnných. Pak vypište Každé dítě: 3, zbude: 2, obě čísla pomocí %d.

Přišlo ještě jedno dítě. Pod poslední printf přičtěte k deti jedničku, znovu zavolejte rozdel se stejnými proměnnými a stejně vypište výsledek. Program vypíše Každé dítě: 2, zbude: 5.

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

7/11