Testergebnisse
Willkommen zur letzten Lektion des C++-Kurses! In ihr bringst du alles zusammen, was du gelernt hast, und baust Schritt für Schritt ein nützliches Programm: die Ergebnisse einer Klassenarbeit, die eine Mathelehrerin nach dem Korrigieren ausgibt. Wenn du fertig bist, gibt dein Programm Folgendes aus:
Max ist nicht in der Klasse.
TESTERGEBNISSE
Anna: 45 Punkte, Note A
Emre: 41 Punkte, Note B
Finn: 50 Punkte, Note A
Jonas: 17 Punkte, Note F
Lena: 38 Punkte, Note B
Durchschnitt: 38.2
Bester: Finn (50 Punkte)
Durchgefallen: 1Das Programm gibt Punktzahl und Note jedes Schülers aus, berechnet den Durchschnitt, findet den besten Schüler, gibt allen Bonuspunkte und korrigiert den Fehler in der Punktzahl eines Schülers. Du verwendest Variablen, Bedingungen, Vektoren, Schleifen, Funktionen, Referenzen und Text: alles aus dem Kurs. Jede Übung setzt dort an, wo die vorige aufgehört hat (der Editor beginnt mit ihrem fertigen Code), und fügt ein Stück hinzu.
Die Daten. Die Ergebnisse stehen am Anfang von main() in zwei Vektoren. Der Vektor namen enthält die Namen der Schüler, und der Vektor punkte enthält, wie viele Punkte jeder von ihnen erreicht hat (höchstens 50). Elemente mit demselben Index gehören zusammen: namen[0] ist "Anna", und punkte[0] ist ihre Punktzahl, 42. Index 1 gehört zu Emre mit 38 Punkten, und so weiter. In einer echten Schule kämen die Daten aus dem Online-System der Schule. Die Programme hier bekommen ihre Daten aus Variablen.
Der Plan. Das Programm ist in Funktionen aufgeteilt, jede mit einer Aufgabe. Bisher gibt es eine: gibErgebnisseAus(), die die Ergebnisse für die Vektoren ausgibt, die sie als Argumente bekommt. Vorerst gibt sie nur die Überschrift aus. Sie steht über main(), weil eine Funktion im Programm früher stehen muss als die Stelle, an der du sie aufrufst. Das ist die übliche Form eines Programms: oben die Funktionen und unten main(), das sie verwendet.
Beide Parameter sind const-Referenzen. Dank des & arbeitet die Funktion direkt mit den Vektoren aus main(), und nichts wird kopiert. Dank const liest sie sie nur und kann sie nicht ändern. Mehr braucht das Ausgeben nicht. Die Parameter haben dieselben Namen wie die Vektoren in main(): Sie müssen es nicht, aber so ist es leichter zu verfolgen.
Du brauchst die Elemente mit demselben Index aus beiden Vektoren. Gehe sie also mit einer Indexschleife durch, nicht mit for (int punktzahl : punkte), die dir nur die Werte eines Vektors gibt. Zur Erinnerung (in main()):
std::vector<std::string> faecher = {"Mathe", "Physik", "Geschichte"};
std::vector<int> stunden = {4, 2, 2};
for (int i = 0; i < faecher.size(); i++) {
std::cout << faecher[i] << ": " << stunden[i] << " Stunden pro Woche" << std::endl;
}Mathe: 4 Stunden pro Woche
Physik: 2 Stunden pro Woche
Geschichte: 2 Stunden pro WocheDie Bedingung ist i < faecher.size(), nicht <=. Der letzte Index ist size() - 1, mit <= würde die Schleife also auch nach einem Element greifen, das nicht im Vektor ist.
So schreibst du es:
Anweisungen
- 1
Schreibe in
gibErgebnisseAus()unter der Zeile, die die Überschrift ausgibt, einefor-Schleife mit einer Variablei, die bei0beginnt und läuft, solangeikleiner alsnamen.size()ist. Gib in der Schleife den Namen jedes Schülers (namen[i]) in einer eigenen Zeile aus. - 2
Ergänze die Zeile in der Schleife so, dass sie nach dem Namen auch die Punktzahl zeigt: nach dem Namen ein Doppelpunkt und ein Leerzeichen, dann
punkte[i], ein Leerzeichen und das WortPunkte. Das Programm gibt aus:TESTERGEBNISSE Anna: 42 Punkte Emre: 38 Punkte Finn: 48 Punkte Jonas: 14 Punkte Lena: 27 Punkte