Höchste Punktzahl
Wer war im Test am besten? Wie du den größten Wert in einem Vektor findest, weißt du aus der Lektion über Schleifen: Merke dir das erste Element und prüfe in einer Schleife, ob eines der anderen größer ist. Aber diesmal reicht es nicht, die höchste Punktzahl zu kennen. Die Lehrerin will wissen, wer sie erreicht hat, und der Name steht in einem anderen Vektor. Merke dir also den Index des besten Schülers. Mit ihm bekommst du den Namen und die Punktzahl:
std::vector<std::string> sportler = {"Mia", "Ben", "Clara"};
std::vector<int> weiten = {412, 455, 430};
int weitester = 0;
for (int i = 1; i < weiten.size(); i++) {
if (weiten[i] > weiten[weitester]) {
weitester = i;
}
}
std::cout << "Weitester Sprung: " << sportler[weitester] << ", " << weiten[weitester] << " cm" << std::endl;Weitester Sprung: Ben, 455 cmDie Variable weitester beginnt bei 0, beim ersten Element, die Schleife kann also bei Index 1 beginnen. Der Vergleich mit > (nicht >=) sorgt dafür, dass bei Gleichstand gewinnt, wer im Vektor zuerst kommt.
Mach daraus eine Funktion, besterSchueler(), die den Index zurückgibt. Ein häufiger Fehler ist, die höchste Punktzahl statt des Index zurückzugeben. Dann ist namen[48] ein Element weit hinter dem Ende eines Vektors, der nur 5 Elemente hat, und das Programm gibt Unsinn aus oder stürzt ab.
In gibErgebnisseAus() brauchst du den Index zweimal: für den Namen und für die Punktzahl. Speichere ihn also in einer Variable, zum Beispiel int index = besterSchueler(punkte);, dann wird die Funktion nur einmal aufgerufen.
So schreibst du es:
Anweisungen
- 1
Schreibe über
gibErgebnisseAus()eine Funktionint besterSchueler(const std::vector<int>& punkte), die den Index des Elements mit der höchsten Punktzahl zurückgibt. - 2
Gib in
gibErgebnisseAus()unter dem Durchschnitt den Namen und die Punktzahl des besten Schülers aus:Bester: Finn (48 Punkte)