Součet a průměr

Teď, když umíte procházet pole, podívejme se, k čemu se takové cykly používají nejčastěji. První vzor všechno sečte. Znáte ho už z lekce o cyklech, jen tentokrát sčítáte prvky pole. Řekněme, že máte ceny věcí v nákupním košíku a chcete znát celkovou cenu:

int ceny[] = {120, 45, 300, 85};
int pocet = sizeof(ceny) / sizeof(ceny[0]);
int celkem = 0;
for (int i = 0; i < pocet; i++) {
    celkem += ceny[i];
}
printf("Celkem: %d\n", celkem);

Program vypíše:

Celkem: 550

Proměnná celkem sbírá součet. Začíná před cyklem na 0, protože než cokoli přičtete, je součet nula. V každém průchodu celkem += ceny[i] přičte jednu cenu: po prvním průchodu je v proměnné celkem hodnota 120, pak 165, 465 a nakonec 550. Příkaz printf je až za cyklem, kde už je součet hotový. Uvnitř cyklu by vypsal každý mezisoučet.

Průměr je součet vydělený počtem hodnot. Pozor ale na celočíselné dělení: celkem i pocet jsou typu int, takže celkem / pocet je 137, a ne 137.5, stejně jako 7 / 2 je 3. Na tomto webu si toho často všimnete díky chybové hlášce. Když výsledek vypíšete pomocí %.2f, třeba printf("Průměr: %.2f\n", celkem / pocet);, program nepůjde přeložit:

main.c:10:31: error: format specifies type 'double' but the argument has type 'int' [-Werror,-Wformat]

%.2f potřebuje desetinné číslo, ale celkem / pocet je celé číslo. Pod hláškou Clang navrhne %.2d, to by ale nepomohlo: desetinná část by se ztratila tak jako tak. Místo toho převeďte součet před dělením na double pomocí (double):

double prumer = (double)celkem / pocet;
printf("Průměr: %.2f\n", prumer);

Program vypíše:

Průměr: 137.50

(double)celkem udělá z proměnné celkem desetinné číslo a desetinné číslo vydělené celým číslem dá desetinné číslo. Záleží na tom, kam (double) napíšete. (double)(celkem / pocet) nejdřív vydělí dvě celá čísla a teprve potom udělá ze 137 číslo 137.00: to už je pozdě. Totéž platí pro double prumer = celkem / pocet;. Proměnná je typu double, ale dělení už .5 zahodilo.

Pokyny

V poli body jsou vaše body ze čtyř testů. Vytvořte proměnnou celkem s hodnotou 0. Pak pole body projděte cyklem for a každý prvek přičtěte k proměnné celkem pomocí +=.

Za cyklem vypište součet jako Celkem: 94.

Na konci programu vytvořte proměnnou prumer typu double s průměrem a vypište ho s jedním desetinným místem: Průměr: 23.5. Pokud program vypíše Průměr: 23.0, přečtěte si znovu část o celočíselném dělení.

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