#include<iostream>
using namespace std;

// Die Klasse dup

class duptest {
   int daten[100];
   int pos;

public:
   duptest () {   pos = 0; }
   int store (int value) {
      if (pos == 100)
         return -1;   // Feldgrenze erreicht

                      // Suche nach Duplikat
      for (int i=0; i < pos; i++)
         if (value == daten[i]) return 0;


      daten[pos++] = value; // Wert in den Speicher einfuegen
      return 1;
   }

   void output () {
      for (int i = 0; i < pos; i++) 
         cout << daten[i] << endl;
   }

};

/***********************************************************************************
 * Das Hauptprogramm                                                               *
 *                                                                                 *
 *                               A C H T U N G ! ! !                               *
 *                                                                                 *
 *                                                                                 *
 * DIESES HAUPTPROGRAMM DARF VON IHNEN        N I C H T        VERAENDERT WERDEN!  *
 *                                                                                 *
 ***********************************************************************************
 */
 

int main () {

   int testfeld [10] = { 1, 25, 234, 12, 11, 1919, 234, 7, 45, 6 };
   int weiter;
   duptest dup_obj;

   // Test 1: Erkennen von Duplikaten
   cout << "Test 1: Erkennen von Duplikaten" << endl;
   int i = 0;
   bool erkannt = false;
   int return_wert =-3;

   while ((i < 10) && (!erkannt)) {

      cout << i << ". Zahl = " << testfeld[i] << " --- ";
      return_wert = dup_obj.store (testfeld[i]);

      switch (return_wert) {
         case 1: cout << "Wert eingefuegt" << endl; break;
         case 0: cout << "Duplikat erkannt" << endl; erkannt = true; break;
         case -1: cout << "Speicher voll" << endl; erkannt = true; break;
         default: cout  << "fehlerhafter Rueckgabewert: " << return_wert << endl;
      }
  
      i++;
   }
   if (!erkannt) cout << "Duplikat wurde nicht erkannt !!!";

   cout << endl << "weiter mit 1 <ENTER>";
   cin >> weiter;
   // -------------------------------------------------------------------------------

   // Test 2: Ausgabe des Feldes
   cout << "Test 2: Ausgabe des Feldes" << endl;
   dup_obj.output();
   cout << endl << "weiter mit 1 <ENTER>";
   cin >> weiter;
   // -------------------------------------------------------------------------------

   // Test 3: Feldgrenze ueberschreiten
   cout << "Test 3: Feldgrenze ueberschreiten" << endl;
   i = 6;
   erkannt = false;
   return_wert =-3;
 
   while ((i < 110) && (!erkannt)) {

      cout << i <<  ", ";
      return_wert = dup_obj.store (i+44);

      switch (return_wert) {
         case 1: break; // cout << "Wert eingefuegt" << endl; break;
         case 0: cout << endl << "Duplikat erkannt" << endl; break;
         case -1: cout << endl << "Speicher voll" << endl; erkannt = true; break;
         default: cout  << endl << "fehlerhafter Rueckgabewert: " << return_wert << endl;
      }
  
      i++;
   }
  
   if (!erkannt) cout << "Speicher voll wurde nicht erkannt !!!";
   // -------------------------------------------------------------------------------

   return 0;
}

