Průměry známek
Vytvořte algoritmus na výpočet průměru známek jedné třídy. Je znám počet žáků ve třídě (30), ale každý žák má různý počet známek. Jejich zadávání u každého žáka bude ukončeno zadáním 0.
Na vstupu od uživatele budou známky vždy pro jednoho žáka. Hodnotou 0 ukončíme zadávání a můžeme spočítat průměr a přejít na dalšího žáka. Procházení žáků, protože známé jejich počet, provedeme v cyklu s daným počtem opakování. Zadávání známek provedeme v cyklu s podmínkou na konci. Ukážeme si jak ošetřit vstup od uživatele i možné výsledky.
Vnější cyklus bude tedy s daným počtem opakování. V jeho těle bude vše důležité. Vzhledem k tomu, že pro každého žáka musíme zadat alespoň jedno číslo - minimálně ukončovací 0 - takže bychom mohli použít na zadávání cyklus s podmínkou na konci. Samozřejmě můžeme použít i cyklus s podmínkou na začátku, a to taky uděláme.
Pro výpočet průměru potřebujeme znát součet a počet známek. Nesmíme zapomenout, že poslední zadaný údaj bude 0, takže nejprve zjistíme, jak by to v případě použití cyklu s podmínkou na konci ovlivnilo tyto dvě proměnné - zadávání a zpracování se děje před podmínkou. Přičtením 0 do součtu ho nijak nezměníme, což znamená, že to nemusíme nijak ošetřovat (inicializace pro součet by byla 0). U počtu by to tak bezpracné nebylo, poslední zadaná 0 by se nám bez dalšího ošetření také přidala do výsledného počtu, takže bychom měli o jednu známku navíc. Z tohoto důvodu bychom museli tento stav ošetřit.
První z možností, která se nabízí, je ošetřit zvětšování počtu jen pro platné známky, tj. 0 vyloučit. Další z možností je před výpočtem průměru zmenšit počet o 1, takže dostaneme platný počet známek. My bychom asi využili v podstatě podobnou možnost, a to "schovat" korekci výsledného počtu do inicializace. Počáteční hodnotu proměnné pro počet bychom nastavili na -1, takže pokud bychom zadali 5 známek a ukončovací 0, tak bychom dostali výsledný počet 5 (-1 + 6 = 5) apod.
My ovšem použijeme cyklus s podmínkou na začátku, takže inicializace proměnné pro počet i součet bude na 0. Jediné, co musíme "ošetřit" je umožnost zadání známky před vstupem do cyklu a v těle cyklu. Ve vývojovém diagramu musíme dále ošetřit, aby uživatel zadával pouze platné známky (1 až 5), další hodnoty do součtu a počtu nezahrnovat. A dále nesmíme zapomenout na situaci, kdy žák nedostal ani jednu známku, tj. výsledný počet je 0. V tomto případě by při výpočtu průměru došlo k dělení 0, a to je nepřípustná operace. Výsledný vývojový diagram si můžete prohlédnout na obrázku.