Součet a průměr

Teď, když umíte procházet vektor, podívejme se, k čemu se cykly používají nejčastěji. První vzor všechno sečte. Řekněme, že máte ceny věcí v nákupním košíku a chcete znát celkovou cenu:

std::vector<int> ceny = {120, 45, 300, 85};
int celkem = 0;
for (int cena : ceny) {
    celkem += cena;
}
std::cout << "Celkem: " << celkem << std::endl;
Celkem: 550

Proměnná celkem sbírá součet. Začíná na 0, protože než cokoli přičtete, je součet nula. V každém průchodu celkem += cena přičte jednu cenu: po prvním průchodu je v proměnné celkem hodnota 120, pak 165, 465 a nakonec 550.

Záleží na tom, kam který řádek patří:

  • int celkem = 0; patří před cyklus, aby se provedlo jen jednou. Uvnitř bloku cyklu by v každém průchodu vytvořilo novou proměnnou celkem s hodnotou 0. A za cyklem by proměnná celkem vůbec neexistovala: proměnná vytvořená v bloku existuje jen v tomto bloku, takže by Clang ohlásil error: use of undeclared identifier 'celkem'.
  • std::cout patří za cyklus, kde už je součet hotový. Uvnitř cyklu by vypsal každý mezisoučet: 120, 165, 465 a 550.

Průměr je součet vydělený počtem hodnot a počet hodnot je velikost vektoru. Pozor ale na celočíselné dělení. Za cyklem výše tento kód vypíše:

double prumer = celkem / ceny.size();
std::cout << "Průměr: " << prumer << std::endl;
Průměr: 137

Skutečný průměr je 137.5. celkem i ceny.size() jsou celá čísla, takže je / vydělí celočíselně a .5 zahodí, stejně jako 7 / 2 dá 3. Nepomůže ani uložit výsledek do proměnné typu double, protože dělení už v tu chvíli proběhlo. Řešením je sbírat součet od začátku do proměnné typu double. Desetinné číslo vydělené celým číslem dá desetinné číslo:

std::vector<int> ceny = {120, 45, 300, 85};
double celkem = 0;
for (int cena : ceny) {
    celkem += cena;
}
std::cout << "Celkem: " << celkem << std::endl;

double prumer = celkem / ceny.size();
std::cout << "Průměr: " << prumer << std::endl;
Celkem: 550
Průměr: 137.5

Proměnná typu double, ve které je celé číslo, se vypíše bez desetinné tečky, takže součet je pořád 550. A používejte ceny.size(), a ne číslo 4: když do vektoru přidáte další cenu, průměr bude pořád správně.

Pokyny

Vektor body obsahuje vaše body ze čtyř testů. Vytvořte proměnnou celkem s hodnotou 0. Pak vektor body projděte cyklem for a každou hodnotu 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, tedy s hodnotou celkem vydělenou velikostí vektoru. Vypište ho jako Průměr: 23.5. Pokud program vypíše Průměr: 23, 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í:

6/13