Summe und Durchschnitt
Jetzt, wo du einen Vektor durchlaufen kannst, schauen wir uns an, wofür Schleifen am häufigsten verwendet werden. Das erste Muster addiert alles. Angenommen, du hast die Preise der Dinge in deinem Einkaufswagen und willst die Summe wissen:
std::vector<int> preise = {120, 45, 300, 85};
int summe = 0;
for (int preis : preise) {
summe += preis;
}
std::cout << "Summe: " << summe << std::endl;Summe: 550Die Variable summe sammelt die Summe. Sie beginnt bei 0, denn bevor du etwas addierst, ist die Summe null. In jedem Durchlauf addiert summe += preis einen Preis: Nach dem ersten Durchlauf ist summe gleich 120, dann 165, 465 und schließlich 550.
Es kommt darauf an, wo welche Zeile steht:
int summe = 0;steht vor der Schleife, damit es nur einmal ausgeführt wird. Im Block der Schleife würde es in jedem Durchlauf eine neuesummemit dem Wert 0 erstellen. Und nach der Schleife gäbe essummegar nicht mehr: Eine Variable, die in einem Block erstellt wird, existiert nur in diesem Block, und Clang würdeerror: use of undeclared identifier 'summe'melden.std::coutsteht nach der Schleife, wenn die Summe fertig ist. In der Schleife würde es jede Zwischensumme ausgeben: 120, 165, 465 und 550.
Der Durchschnitt ist die Summe geteilt durch die Anzahl der Werte, und die Anzahl der Werte ist die Größe des Vektors. Aber Vorsicht vor der Ganzzahldivision. Nach der Schleife von oben gibt das hier aus:
double durchschnitt = summe / preise.size();
std::cout << "Durchschnitt: " << durchschnitt << std::endl;Durchschnitt: 137Der tatsächliche Durchschnitt ist 137,5. summe und preise.size() sind beides ganze Zahlen, deshalb teilt / sie als ganze Zahlen und lässt die Nachkommastelle weg, genau wie 7 / 2 gleich 3 ergibt. Das Ergebnis in einem double zu speichern hilft nicht, denn dann ist die Division schon erledigt. Die Lösung: Sammle die Summe von Anfang an in einem double. Eine Dezimalzahl geteilt durch eine ganze Zahl ergibt eine Dezimalzahl:
std::vector<int> preise = {120, 45, 300, 85};
double summe = 0;
for (int preis : preise) {
summe += preis;
}
std::cout << "Summe: " << summe << std::endl;
double durchschnitt = summe / preise.size();
std::cout << "Durchschnitt: " << durchschnitt << std::endl;Summe: 550
Durchschnitt: 137.5Ein double mit einem ganzzahligen Wert wird ohne Dezimalpunkt ausgegeben, die Summe bleibt also 550. Und verwende preise.size() statt der Zahl 4: Wenn du dem Vektor einen weiteren Preis hinzufügst, stimmt der Durchschnitt trotzdem.
So schreibst du es:
Anweisungen
- 1
Der Vektor
punkteenthält deine Punkte aus vier Tests. Erstelle eine Variablesummemit dem Wert0. Gehe dannpunktemit einerfor-Schleife durch und addiere jeden Wert mit+=zusumme. - 2
Gib nach der Schleife die Summe als
Summe: 94aus. - 3
Erstelle am Ende des Programms eine Variable
durchschnittvom Typdoublemit dem Durchschnitt:summegeteilt durch die Größe des Vektors. Gib ihn alsDurchschnitt: 23.5aus. Gibt dein ProgrammDurchschnitt: 23aus, lies den Abschnitt über die Ganzzahldivision noch einmal.