Výsledky testu

Vítejte v poslední lekci kurzu C++! V ní spojíte všechno, co jste se naučili, a krok za krokem napíšete jeden užitečný program: výsledky písemky, které si učitelka matematiky vypíše, když test opraví. Až budete hotovi, program vypíše tohle:

Marek ve třídě není.
VÝSLEDKY TESTU
Adam: 45 bodů, známka 1
Ema: 41 bodů, známka 2
Filip: 50 bodů, známka 1
Jakub: 17 bodů, známka 5
Lenka: 38 bodů, známka 2
Průměr bodů: 38.2
Nejlepší: Filip (50 bodů)
Počet pětek: 1

Program ke každému žákovi vypíše body a známku, spočítá průměr, najde nejlepšího žáka, všem přidá body navíc a jednomu žákovi opraví chybu v bodech. Použijete proměnné, podmínky, vektory, cykly, funkce, reference i texty: všechno z kurzu. Každé cvičení navazuje na to předchozí (editor začíná jeho hotovým kódem) a přidá jeden kousek.

Data. Výsledky jsou na začátku funkce main() ve dvou vektorech. Vektor jmena obsahuje jména žáků a vektor body to, kolik bodů kdo získal (nejvýš 50). K sobě patří prvky se stejným indexem: jmena[0] je "Adam" a body[0] jsou jeho body, 42. Index 1 patří Emě s 38 body a tak dál. Ve skutečné škole by data přišla z elektronické třídní knihy. Programy tady dostávají data z proměnných.

Plán. Program je rozdělený na funkce a každá má jeden úkol. Teď je tu jen jedna: vypisVysledky(), která vypíše výsledky pro vektory, které dostane jako argumenty. Zatím vypíše jen nadpis. Je nad main(), protože funkce musí být v programu dřív než místo, kde ji voláte. Takhle program obvykle vypadá: nahoře funkce, dole main(), který je používá.

Oba parametry jsou const reference. Díky & funkce pracuje přímo s vektory z main() a nic se nekopíruje. Díky const je jen čte a nemůže je změnit. Pro výpis to stačí. Parametry se jmenují stejně jako vektory v main(): nemusí, ale je to přehledné.

Z obou vektorů potřebujete prvek se stejným indexem. Projděte je proto cyklem s indexem, ne cyklem for (int pocet : body), který dává jen hodnoty jednoho vektoru. Připomenutí (uvnitř main()):

std::vector<std::string> predmety = {"Matematika", "Fyzika", "Dějepis"};
std::vector<int> hodiny = {4, 2, 2};
for (int i = 0; i < predmety.size(); i++) {
    std::cout << predmety[i] << ": " << hodiny[i] << " hodiny týdně" << std::endl;
}
Matematika: 4 hodiny týdně
Fyzika: 2 hodiny týdně
Dějepis: 2 hodiny týdně

Podmínka je i < predmety.size(), ne <=. Poslední index je size() - 1, takže s <= by cyklus sáhl i na prvek, který ve vektoru není.

Pokyny

Ve funkci vypisVysledky() pod řádek, který vypisuje nadpis, napište cyklus for s proměnnou i od 0, dokud je i menší než jmena.size(). V cyklu vypište jméno každého žáka (jmena[i]) na samostatný řádek.

Doplňte řádek v cyklu, aby za jménem ukazoval i body: za jménem dvojtečku a mezeru, pak body[i], mezeru a slovo bodů. Program vypíše:

VÝSLEDKY TESTU
Adam: 42 bodů
Ema: 38 bodů
Filip: 48 bodů
Jakub: 14 bodů
Lenka: 27 bodů

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

1/7