C++ durchschnittsberechnung array wie?

3 Antworten

Entweder so:

#include <iostream> // cout, endl
#include <iterator> // begin, end
#include <numeric> // accumulate
#include <type_traits> // extent

// ...

using namespace ::std;

// ...

const auto average {
  accumulate(begin(anzahl), end(anzahl), 0.0)
  / extent_v<decltype(Stadt)>
};

cout << average << endl;

Falls dir das noch zu hoch ist, dann einfach "händisch" in einer Schleife alle Werte aus deinem Array aufsummieren, und ganz am Ende durch "sizeof(Stadt) / sizeof(*Stadt)" teilen.

Warum ist das Array Stadt überhaupt ein String?


NoTop147 
Fragesteller
 26.03.2020, 18:21

Wurde so vorgegeben

0
NoTop147 
Fragesteller
 26.03.2020, 18:26
@NoTop147

Ich möchte ja die Anzahl aller Städte herausfinden, 3 Städte = 3, und durch die gesamte Anzahl des int anzahl[100] teilen

0
Ahzmandius  26.03.2020, 18:28
@NoTop147

Ich habe schon verstanden, was du willst.

Wie sind die Städte darin gespeichert.

Ein String ist ja so etwas:

"xyz"

Sind die Städte so gespeichert:

"BerlinMünchen..."

oder ist zwischen den Städten noch ein Trennzeichen?

0
NoTop147 
Fragesteller
 26.03.2020, 18:33
@Ahzmandius

Also ich habe die Städte mit cin >> stadt[i]; eingegeben und am Ende i++ gemacht. Weiß nicht ob die zusammen oder getrennt sind

0
Ahzmandius  26.03.2020, 19:22
@NoTop147

Dann zähle doch einfach die Anzahl der Eingaben und das ist dann die Anzahl der Städte.

0
regex9  26.03.2020, 20:08

Stadt ist kein String, sondern ein String-Array.

2
Die Stadt ist aber ein String wert (...)

Nein, die Variable hat einfach nur eine schlechte Bezeichnung bekommen. Stadt ist nach deiner obigen Angabe bereits ein Array, welches 100 Strings beinhalten kann. Die Variable sollte aber eher staedtenamen heißen.

Das Gleiche gilt für das zweite Array. Dieses sollte anzahlBahnhoefeProStadt heißen. Dann weiß man wenigstens sofort, was enthalten ist.

Wie rechne ich alle Städte zusammen?

Zunächst solltest du ermitteln, wie viele Elemente im Array überhaupt besetzt sind. Das heißt, wie viele Städtenamen es tatsächlich gibt.

Hier liegt schon das erste Problem, denn der initiale Wert eines Strings ist nicht etwa ein leerer String. Das heißt, du kannst nicht einfach über das Array laufen und pro Element prüfen, ob dieses schon initialisiert ist oder nicht. Gerade deswegen sollte man auf std-Klassen wie std::array oder std::vector zurückgreifen (statt auf ein C-Array ...), wenn man in C++ mehrere Werte in einem Container speichern möchte. Optional könnte man natürlich auch auf andere definierte Klassen zurückgreifen, Hauptsache sie zählen immer aktiv die Anzahl ihrer Elemente mit.

Wenn das Array statisch initialisiert wird, kannst du die Anzahl an Elementen leicht berechnen:

std::string cities[10] = { "one", "two" };
int numberOfCities = sizeof(cities) / sizeof(*cities);

Wenn die Elemente erst später hinzugefügt werden, zähle sie beim Hinzufügen:

int numberOfCities = 0;

cities[numberOfCities++] = "Munich";
cities[numberOfCities++] = "Berlin";
cities[numberOfCities++] = "Cologne";
Wie Teile ich die Summe der Städte durch die gesamte Anzahl?

Du brauchst eine zweite Schleife, die wiederum durch das Zahlen-Array läuft. Aber nur so oft, wie es Städtenamen gibt (das hast du ja bereits zuvor ermittelt). Den Wert jedes Elements kannst du während der Iterationen auf eine globale Summenvariable aufrechnen.

Die endgültige Berechnung des Durchschnitts kannst du mit dem bekannten Divisionsoperator durchführen. Alle notwendigen Werte hast du bis dahin dann ja.


regex9  26.03.2020, 20:50

PS.: Wie ich gerade sehe, hast du das mit dem Zählen der Städtenamen dann ja doch schon hinbekommen.

Also ich habe die Städte mit cin >> stadt[i]; eingegeben und am Ende i++ gemacht.
0