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: 550Promě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ěnnoucelkems hodnotou 0. A za cyklem by proměnnácelkemvůbec neexistovala: proměnná vytvořená v bloku existuje jen v tomto bloku, takže by Clang ohlásilerror: use of undeclared identifier 'celkem'.std::coutpatří 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: 137Skuteč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.5Promě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ě.
Jak psát:
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
6/13