// Globales Modul fuer includes!
module;
#include <print>

export module Histogram;

// Klassendefinition
export class Histogramm
{
   // Eigenschaften
   unsigned short werteZaehler[10]; // Zaehler für Wertebereiche
   unsigned short intervall;        // Intervall eines Wertebereichs
   unsigned short maxv;             // Zu klassifierender Max-Wert
 public:
   // Schnittstellen
   void Init(unsigned short maxVal);    // Initialisierung
   void AddValue(unsigned short val);   // Wert hinzufügen
   void PrintHistogramm() const;        // Histogramm ausgeben
};

// Defínition der Memberfunktionen
// Eigenschaften initialisieren
// maxVal: der max. Wert der zu klassifizierenden Daten
void Histogramm::Init(unsigned short maxVal)
{
   intervall = (maxVal+1) / 10; // Intervall pro Wertebereich
   maxv = maxVal;
}
// Wert hinzufuegen
void Histogramm::AddValue(unsigned short val)
{
   // Abfrage ob Wert innerhalb des erlaubten Bereichs
   if (val>maxv)
      val = maxv;
   // Index des entspr. Zaehlers berechnen (Klasse)
   unsigned short klasse = val / intervall;
   // Zaehler erhoehen
   werteZaehler[klasse]++;
}
// Anzahl der Werte pro Klasse ausgeben
void Histogramm::PrintHistogramm() const
{
   std::println("Verteilung:");
   for (auto index = 0; index < 10; index++)
       std::println("{:2}...{:2}: {:5}",
           index * intervall, (index + 1) * intervall - 1, werteZaehler[index]);
}
