Body navíc

Učitelka zjistila, že jedna úloha v testu byla špatně zadaná. Všichni proto dostanou 3 body navíc. Víc než 50 bodů ale nikdo mít nemůže, protože víc se v testu získat nedalo.

Tentokrát funkce data mění. Vektor proto dostane jako referenci bez const: std::vector<int>&. Pracuje pak přímo s vektorem z main() a změny v něm zůstanou i po skončení funkce. Prvky měňte v cyklu s indexem:

#include <iostream>
#include <vector>

void zdvojnasob(std::vector<int>& cisla) {
    for (int i = 0; i < cisla.size(); i++) {
        cisla[i] *= 2;
    }
}

int main() {
    std::vector<int> cisla = {1, 2, 3};
    zdvojnasob(cisla);
    std::cout << cisla[0] << " " << cisla[1] << " " << cisla[2] << std::endl;
    return 0;
}
2 4 6

cisla[i] je prvek přímo ve vektoru. V cyklu for (int c : cisla) by c byla jen kopie prvku a změna by se do vektoru nedostala.

Časté chyby:

  • Bez & dostane funkce kopii vektoru. Změní kopii a výpis pak ukáže pořád staré body.
  • S const kompilátor změnu nedovolí:
main.cpp:54:17: error: cannot assign to return value because function 'operator[]' returns a const value

Volání patří do main() nad vypisVysledky(jmena, body): nejdřív se body změní, potom se vypíšou. V opačném pořadí by se vypsaly ještě staré.

Pokyny

Pod funkci vypisVysledky() (nad main()) napište funkci void pridejBody(std::vector<int>& body, int bonus), která v cyklu přičte bonus ke každému prvku vektoru body.

V main() nad volání vypisVysledky() přidejte pridejBody(body, 3);. Každý žák má teď o 3 body víc a výsledky začínají takto:

VÝSLEDKY TESTU
Adam: 45 bodů, známka 1
Ema: 41 bodů, známka 2

Adam má přesně 45 bodů, a tedy jedničku. Pokud má dvojku, zkontrolujte, že podmínka pro jedničku ve funkci znamka() používá >=. Pokud se body nezměnily, chybí v parametru &. Filip má teď 51 bodů z 50 možných. To spravíte v dalším úkolu.

Upravte funkci pridejBody(): když má žák po přičtení víc než 50 bodů, nastavte mu body na 50. Výsledky pak vypadají takto:

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: 30 bodů, známka 3
Průměr bodů: 36.6
Nejlepší: Filip (50 bodů)

Pokud má Lenka se 30 body čtyřku, zkontrolujte >= v podmínce pro trojku.

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/7