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.25A 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ů.
Jak psát:
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.0Pokud má Adam 41.0, dělíte celá čísla. Pokud má 14.0, máte uvnitř cyklu return.
Začněte programovat zdarma
2/7