Průměry

Na vysvědčení je potřeba průměr každého žáka: součet jeho bodů vydělený počtem písemek, tedy třemi. Součet je vzor z lekce o cyklech: proměnná, která začíná na 0, a cyklus, který k ní přičte každou hodnotu.

Průměr jednoho žáka spočítá nová funkce prumer(). Jako parametr dostane celého žáka: double prumer(Zak zak). Typ je Zak s velkým Z, parametr zak s malým. Jazyk C rozlišuje velká a malá písmena, takže jsou to pro něj dva různé názvy. Z lekce o strukturách víte, že parametr typu struktura je kopie: funkce dostane vlastní kopii žáka se jménem i se všemi body. Tady to nevadí, protože funkce žáka jen čte. Vrací desetinné číslo, takže její návratový typ je double.

Pozor na celočíselné dělení: 125 / 3 je 41 a desetinná místa se ztratí. Desetinný výsledek dostanete, když je aspoň jedno z čísel typu double. Nejjednodušší je sčítat rovnou do proměnné typu double:

int teploty[] = {18, 21, 23, 19};
double soucet = 0;
for (int i = 0; i < 4; i++) {
    soucet += teploty[i];
}
printf("Průměrná teplota: %.2f\n", soucet / 4);
Průměrná teplota: 20.25

A ještě jedna past: return patří za cyklus. Uvnitř cyklu by ukončil funkci hned v prvním průchodu a průměr by se počítal jen z první písemky. A bez return za cyklem se program ani nepřeloží: non-void function does not return a value in all control paths.

Novou funkci napište nad vypis_vysledky(), která ji bude volat. Kdyby byla až pod ní, překladač by ji v místě volání ještě neznal a ohlásil by chybu:

main.c:17:27: error: call to undeclared function 'prumer'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]

Funkci, která vrací hodnotu, můžete zavolat přímo v printf: prumer(zaci[i]) dá průměr žáka s indexem i a %6.1f ho vypíše s jedním desetinným místem na 6 znaků.

Pokyny

Nad funkci vypis_vysledky() napište funkci double prumer(Zak zak), která sečte tři čísla v zak.body a vrátí jejich součet vydělený třemi.

Ve funkci vypis_vysledky() nahraďte printf("\n"); na konci řádku každého žáka příkazem printf("%6.1f\n", prumer(zaci[i]));, který před koncem řádku vypíše i průměr žáka. Program vypíše:

VÝSLEDKY Z MATEMATIKY
Adam        42  38  45  41.7
Ema         36  33  38  35.7
Filip       48  50  47  48.3
Jakub       14  22  17  17.7
Lenka       27  40  41  36.0

Pokud má Adam 41.0, dělíte celá čísla. Pokud má 14.0, máte uvnitř cyklu return.

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/7