#include <print>
#include <cstdlib>

// Funktionsdeklarationen
double Mittelwert(int wert);

int main()
{
    // 10 Zufallszahlen erzeugen
    for (auto index = 0; index < 10; index++)
    {
        // 'Zufallszahl' im Bereich 0..9 erzeugen
        double zahl = rand() % 10;
        // Zufallszahl ausgeben
        std::print("Neuer Wert: {}", zahl);
        // Mittelwert berechnen und ausgeben
        std::println(" Neuer Mittelwert: {:.2f}", Mittelwert(zahl));
    }
}

// Funktion zur Berechnung des Mittelwerts
// wert : Neuer hinzuaddierender Wert
// return : Neuer Mittelwert
double Mittelwert(int wert)
{
    // Summe ueber alle bisherigen Werte
    // Datentyp wird durch Returntyp der
    // Funktion definiert
    static decltype(Mittelwert(wert)) summe {0.0};
    // Zähler für Anzahl der Werte
    static auto anzahl {0};
    // Summe und Anzahl der Werte erhöhen
    summe += wert;
    anzahl++;
    // Mittelwert zurückgeben
    return summe / static_cast<decltype(summe)>(anzahl);
}
