Klassendurchschnitt
Die Lehrerin möchte wissen, wie der Test insgesamt gelaufen ist: wie viele Punkte die Schüler im Durchschnitt erreicht haben. Der Durchschnitt ist die Summe der Punktzahlen geteilt durch die Anzahl der Schüler. Die Summe ist das Muster aus der Lektion über Schleifen: eine Variable, die bei 0 beginnt, und eine Schleife, die jeden Wert zu ihr addiert. Hier reicht eine for (int punktzahl : punkte)-Schleife, weil du nur die Punktzahlen brauchst.
Eine neue Funktion, durchschnitt(), berechnet ihn. Sie bekommt den Vektor als const std::vector<int>&, genau wie gibErgebnisseAus(): ohne Kopie und nur zum Lesen. Sie gibt eine Dezimalzahl zurück, ihr Typ ist also double.
Vorsicht vor der Ganzzahldivision. Wenn du eine ganze Zahl durch eine ganze Zahl teilst, wirft C++ den Rest weg, und das Ergebnis ist wieder eine ganze Zahl: 7 / 2 ist 3. Eine Summe in einer int-Variable, geteilt durch punkte.size(), ergäbe 33 statt 33.8. Ein Dezimalergebnis bekommst du, wenn mindestens eine der Zahlen eine Dezimalzahl ist (7.0 / 2 ist 3.5). Am einfachsten addierst du die Werte gleich in einer double-Variable auf:
std::vector<int> temperaturen = {18, 21, 23, 19};
double summe = 0;
for (int t : temperaturen) {
summe += t;
}
std::cout << "Durchschnittstemperatur: " << summe / temperaturen.size() << std::endl;Durchschnittstemperatur: 20.25Noch eine Falle: return gehört hinter die Schleife. In der Schleife würde es die Funktion schon im ersten Durchlauf beenden, und der Durchschnitt würde nur aus der Punktzahl des ersten Schülers berechnet.
So schreibst du es:
Anweisungen
- 1
Schreibe über
gibErgebnisseAus()eine Funktiondouble durchschnitt(const std::vector<int>& punkte), die alle Elemente vonpunkteaddiert und die Summe geteilt durch ihre Anzahl zurückgibt. - 2
Gib am Ende von
gibErgebnisseAus(), nach der Schleife (nicht in ihr), den Durchschnitt aus, dendurchschnitt()berechnet. Unter den Ergebnissen der Schüler erscheint eine neue Zeile:Durchschnitt: 33.8Wenn du
33siehst, addierst du in einerint-Variable. Wenn du8.4siehst, steht dasreturnin der Schleife.