Sčítání v cyklu

Cykly umějí víc než vypisovat. Velmi často sčítají mnoho hodnot. Podle známé historky musel malý Carl Friedrich Gauss, pozdější slavný matematik, ve škole sečíst všechna čísla od 1 do 100. Cyklus to zvládne za okamžik:

int soucet = 0;
for (int i = 1; i <= 100; i++) {
    soucet += i;
}
printf("Součet: %d\n", soucet);
Součet: 5050

Proměnná soucet 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 soucet += i přičte jedno číslo: po prvním průchodu je v proměnné soucet hodnota 1, pak 3 (1 + 2), 6 (1 + 2 + 3), 10 a nakonec 5050.

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

  • int soucet = 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 soucet s hodnotou 0. A za cyklem by proměnná soucet vůbec neexistovala: proměnná vytvořená v bloku existuje jen v tomto bloku, stejně jako i cyklu for. Překladač by ohlásil error: use of undeclared identifier 'soucet'.
  • printf patří za cyklus, kde už je součet hotový. Uvnitř cyklu by vypsal každý mezisoučet: 1, 3, 6, 10 a tak dále, celkem sto řádků.

Průměr je součet vydělený počtem hodnot. Pozor ale na celočíselné dělení. Tady je průměr čísel od 1 do 10:

int soucet = 0;
for (int i = 1; i <= 10; i++) {
    soucet += i;
}
double prumer = soucet / 10;
printf("Průměr: %.1f\n", prumer);
Průměr: 5.0

Součet je 55, takže skutečný průměr je 5,5. Jenže soucet i 10 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. Součet převeďte na double ještě před dělením:

int soucet = 0;
for (int i = 1; i <= 10; i++) {
    soucet += i;
}
double prumer = (double)soucet / 10;
printf("Průměr: %.1f\n", prumer);
Průměr: 5.5

(double)soucet udělá ze součtu desetinné číslo a desetinné číslo vydělené celým číslem dá desetinné číslo. (double) pište přímo před soucet. (double)(soucet / 10) by převedlo až výsledek celočíselného dělení a dostali byste zase 5.0.

Pokyny

Pustili jste se do šestidenní výzvy: první den uděláte 5 kliků a každý další den o 5 víc, jak to vypisuje program v editoru. Kolik kliků uděláte celkem? Před cyklem vytvořte proměnnou celkem s hodnotou 0. V cyklu k ní pomocí += přičtěte kliky daného dne, den * 5. Za cyklem vypište součet jako Celkem: 105.

Na konci programu vytvořte proměnnou prumer typu double s průměrným počtem kliků za den: celkem vydělené 6. Vypište ji pomocí %.1f jako Průměr: 17.5. Pokud program vypíše Průměr: 17.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í:

5/11