Bonuspunkte
Die Lehrerin hat gemerkt, dass eine Frage im Test falsch formuliert war. Deshalb bekommen alle 3 Bonuspunkte. Aber niemand darf mehr als 50 Punkte haben, denn das ist das Maximum, das der Test geben konnte.
Diesmal verändert die Funktion die Daten. Deshalb bekommt sie den Vektor als Referenz ohne const: std::vector<int>&. Dann arbeitet sie direkt mit dem Vektor aus main(), und die Änderungen bleiben darin, wenn die Funktion endet. Ändere die Elemente in einer Indexschleife:
#include <iostream>
#include <vector>
void verdoppleAlle(std::vector<int>& zahlen) {
for (int i = 0; i < zahlen.size(); i++) {
zahlen[i] *= 2;
}
}
int main() {
std::vector<int> zahlen = {1, 2, 3};
verdoppleAlle(zahlen);
std::cout << zahlen[0] << " " << zahlen[1] << " " << zahlen[2] << std::endl;
return 0;
}2 4 6zahlen[i] ist das Element im Vektor selbst. In einer for (int z : zahlen)-Schleife wäre z nur eine Kopie des Elements, und die Änderung käme nicht in den Vektor.
Häufige Fehler:
- Ohne das
&bekommt die Funktion eine Kopie des Vektors. Sie ändert die Kopie, und die Ergebnisse zeigen weiter die alten Punktzahlen. - Mit
consterlaubt der Compiler die Änderung nicht:
main.cpp:54:19: error: cannot assign to return value because function 'operator[]' returns a const valueDer Aufruf steht in main() über gibErgebnisseAus(namen, punkte): Erst ändern sich die Punktzahlen, dann werden sie ausgegeben. Andersherum würden die alten Punktzahlen ausgegeben.
So schreibst du es:
Anweisungen
- 1
Schreibe unter
gibErgebnisseAus()(übermain()) eine Funktionvoid addierePunkte(std::vector<int>& punkte, int bonus), die in einer Schleifebonuszu jedem Element vonpunkteaddiert. - 2
Füge in
main()über dem Aufruf vongibErgebnisseAus()addierePunkte(punkte, 3);ein. Jeder Schüler hat jetzt 3 Punkte mehr, und die Ergebnisse beginnen so:TESTERGEBNISSE Anna: 45 Punkte, Note A Emre: 41 Punkte, Note BAnna hat genau 45 Punkte, also bekommt sie ein A. Wenn sie ein B hat, prüfe, ob die Bedingung für ein A in
note()>=verwendet. Wenn sich die Punktzahlen nicht geändert haben, fehlt dem Parameter das&. Finn hat jetzt 51 von 50 Punkten. Das behebst du im nächsten Schritt. - 3
Ändere
addierePunkte(): Hat ein Schüler nach der Addition mehr als 50 Punkte, setze seine Punktzahl auf50. Dann sehen die Ergebnisse so aus:TESTERGEBNISSE Anna: 45 Punkte, Note A Emre: 41 Punkte, Note B Finn: 50 Punkte, Note A Jonas: 17 Punkte, Note F Lena: 30 Punkte, Note C Durchschnitt: 36.6 Bester: Finn (50 Punkte)Wenn Lena mit 30 Punkten ein D hat, prüfe das
>=in der Bedingung für ein C.