C++ durchschnittsberechnung array wie?
Guten Tag,
ich möchte gerne eine Durchschnittsberechnung durchführen. Dazu habe ich zwei Arrays gegeben:
String Stadt[100]
Int anzahl[100]
In der Aufgabe geht es darum die Anzahl alles Bahnhöfe in der jeweiligen Stadt zu zählen(Anzahl = Anzahl der Bahnhöfe in der Stadt). Nun will ich die Anzahl aller Werte im Int anzahl[100] zusammenzählen und durch die Anzahl aller Städte teilen. Die Stadt ist aber ein String wert weshalb man das nicht so leicht teilen kann. Bei zwei Punkten brauche ich also hilfe:
1. Wie rechne ich alle Städte zusammen?
2. Wie Teile ich die Summe der Städte durch die gesamte Anzahl?
Ich hoffe ich könnt mir helfen
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?
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?
Also ich habe die Städte mit cin >> stadt[i]; eingegeben und am Ende i++ gemacht. Weiß nicht ob die zusammen oder getrennt sind
Dann zähle doch einfach die Anzahl der Eingaben und das ist dann die Anzahl der Städte.
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.
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.
Wurde so vorgegeben