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 6cisla[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
constkompilátor změnu nedovolí:
main.cpp:54:17: error: cannot assign to return value because function 'operator[]' returns a const valueVolá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é.
Jak psát:
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 2Adam 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
5/7