C++ Kurs

Wenn fertig, bitte Fenster schließen

Lösung 1 zur Lektion "Klassen"


// Lösung zu einfachen Klassen

// Dateien einbinden
#include <iostream>
#include <iomanip>
#include <cstdlib>

using std::cout;
using std::endl;

// Aktuelle Anzahl der Bereiche
const int ANZKLASSEN = 10;
// Obere Grenze des zu klassifizierenden Wertebereichs
const unsigned short OGRENZE = 99;
// Anzahl der Daten
const unsigned short NUMWERTE = 100;

// Klassendefinition
class Histogramm
{
   // Eigenschaften
   unsigned short werteZaehler[ANZKLASSEN];  // Zähler für Wertebereiche
   unsigned short intervall;                 // Intervall eines Wertebereichs
 public:
   // Schnittstellen
   void Init(); // Initialisierung
   void AddValue(const unsigned short val);  // Wert hinzufügen
   void PrintHistogramm() const;             // Histogramm ausgeben
};

// Defínition der Memberfunktionen
// Eigenschaften initialisieren

void Histogramm::Init()
{
   intervall = (OGRENZE+1) / ANZKLASSEN;  // Intervall pro Wertebereich
}
// Wert hinzufügen
void Histogramm::AddValue(const unsigned short val)
{
   // Abfrage ob Wert innerhalb des erlaubten Bereichs
   if ((val<0) || (val>OGRENZE))
      return;
   // Index des entspr. Zählers berechnen (Klasse)
   unsigned short klasse = val / intervall;
   // Zähler erhöhen
   werteZaehler[klasse]++;
}
// Anzahl der Werte pro Klasse ausgeben
void Histogramm::PrintHistogramm() const
{
   cout << "\nVerteilung:\n";
   for (unsigned short index=0; index<ANZKLASSEN; index++)
      cout << index*intervall << "..." << (index+1)*intervall-1
           << ": " << werteZaehler[index] << endl;
}

// Histogrammobjekt definieren
Histogramm myHist;

// main() Funktion
int main()
{
   // Histogrammobjekt initialisieren
   myHist.Init();
   // Zufallswerte in Histogramm übertragen
   for (int i=0; i<NUMWERTE; i++)
   {
      int val = rand() % (OGRENZE+1);
      cout << val << ", ";
      myHist.AddValue(static_cast<unsigned short>(val));
   }
   cout << endl;
   // Histogramm ausgeben
   myHist.PrintHistogramm();
}