#include <print>
#include <cstdlib>
#include <ctime>

// Anzahl der Klassen, Wertebereich und Anzahl der Werte
constexpr auto ANZKLASSEN = 10;
constexpr auto BEREICH = 100;
constexpr auto ANZWERTE = 10000;
// Wertebereich pro Klasse
constexpr auto DELTA = BEREICH / ANZKLASSEN;

// Klassenfeld definieren und mit 0 initialisieren
unsigned short klasse[ANZKLASSEN]{};

int main()
{
    // aktuelle Uhrzeit auslesen
    unsigned int actTime = static_cast<decltype(actTime)>(std::time(nullptr));
    // Zufallszahlen initialisieren
    std::srand(actTime);

    // Zufallszahlen nun erzeugen
    // Alternativ: for (auto& elem: klasse)
    for (auto index = 0; index < ANZWERTE; index++)
    {
        // Zufallszahl im Wertebereich erzeugen
        unsigned short wert = rand() % BEREICH;
        // Klasse berechnen und Klassenzaehler inkrementieren
        unsigned short klassenIndex = wert / DELTA;
        klasse[klassenIndex]++;
    }

    // Variablen für die Aufnahme der Klasse mit den wenigsten
    // bzw. meisten Werten definieren
    auto minKlasse = klasse[0], maxKlasse = klasse[0];

    // Min/Max Werte Werte bestimmen
    for (auto element : klasse)
    {
        if (element < minKlasse)
            minKlasse = element;
        else
            if (element > maxKlasse)
                maxKlasse = element;
    }

    // Statistikdaten ausgeben
    std::println("Statistik-Daten:\n================\n");
    for (auto index = 1; auto elem: klasse)
    {
        std::println("Klasse {:2} besetzt mit {:5} Werten",
                           index++, elem);
    }
    std::println("\nKleinster/groesser Klassenwert: {}/{}",
                        minKlasse, maxKlasse);
}
