Hilfe!!

aschlechter

Grünschnabel
Hallo zusammen.
Habe dieses Programm geschrieben.

Code:
#include <iostream>
#include <ostream>
#include <iomanip>
#include <math.h>
#include <string>

using namespace std;

struct euro
{
  public: // Alles, was oeffentlich zugaenglich ist
  
// Konstruktor
    euro(unsigned long int x=0, unsigned long int y=0)
    {
      if (eurocentbetrag>=100) // Wenn die Centbetraege eigentlich schon ganze Euros sein koennten
      {
         euroganzbetrag=x+(abs((int)x/100)); // Wieviele ganze "100-Cent" gehen in den aktuellen Centbetrag
         eurocentbetrag=y%100; // Centbetraege durch 100 teilen
      }
      else {euroganzbetrag=x; eurocentbetrag=y;}
      return;
    }

// Friend-Funktionen fuer die Ausgabe
    friend ostream& operator<<(ostream& os, const euro& z);

// Friend-Funktionen fuer die Multiplikation
    friend euro operator*(double a, const euro& z);

//  Member-Funktion fuer Zuweisungen, z.B. e1=e2
    euro operator=(const euro& z)
    {
      (*this).euroganzbetrag=z.euroganzbetrag;
      (*this).eurocentbetrag=z.eurocentbetrag;
      return *this;
    }

// Member-Funktion fuer die Addition
    euro operator+(const euro& z)
    {
      euro resultat;
      resultat.setEuroganzbetrag((*this).getEuroganzbetrag() + z.getEuroganzbetrag());
      resultat.setEurocentbetrag((*this).getEurocentbetrag() + z.getEurocentbetrag());
      if (resultat.getEurocentbetrag()>=100) // Ueberpruefung ob es mehrere ganze "100-Cent" gibt
      {
        resultat.setEuroganzbetrag(resultat.getEuroganzbetrag() + abs((int)resultat.getEurocentbetrag()/100));
        resultat.setEurocentbetrag(resultat.getEurocentbetrag()%100);
      }
      return resultat;
    }

// Member-Funktion zur Pruefung ob groesser-gleich
    euro operator<=(const euro& z)
    {
      if ((*this).getEuroganzbetrag() == z.getEuroganzbetrag())
      { if ((*this).getEurocentbetrag() > z.getEurocentbetrag()) { cout << "Der 1. Operator ist groesser." << endl; return 0;}}
      else { cout << "Der 2. Operator ist groesser." << endl; return 0;}

      if ((*this).getEuroganzbetrag() > z.getEuroganzbetrag()) { cout << "Der 1. Operator ist groesser." << endl;}
      else { cout << "Der 2. Operator ist groesser." << endl;}
    }

// Funktionsdefinitionen fuer Euro und Cent
    unsigned long int getEuroganzbetrag() const { return euroganzbetrag; }
    unsigned long int getEurocentbetrag() const { return eurocentbetrag; }

// Member-Funktion zum Schreiben der geschuetzten Objekte
    void setEuroganzbetrag(const unsigned long int a) { euroganzbetrag=a; return;}
    void setEurocentbetrag(const unsigned long int b) { eurocentbetrag=b; return;}

  private: // Alles, was niemand sehen darf

    unsigned long int euroganzbetrag;
    unsigned long int eurocentbetrag;
};

// Friend-Funktion fuer die Ausgabe
ostream& operator<<(ostream& os, const euro& z)
{
  os << z.euroganzbetrag << "." << setw(2) << setfill('0') << z.eurocentbetrag << " Euro" << endl;
  return os;
}

// Friend-Funktionen fuer die Multiplikation
euro operator*(double a, const euro& z)
{
  euro resultat;

  resultat.euroganzbetrag = (long unsigned int)(z.euroganzbetrag * a);
  resultat.eurocentbetrag = (long unsigned int)(z.eurocentbetrag * a);
  
  if (resultat.getEurocentbetrag()>=100)
  {
    resultat.euroganzbetrag = (resultat.euroganzbetrag + abs((int)resultat.eurocentbetrag/100));
    resultat.eurocentbetrag = (resultat.eurocentbetrag%100);
  }

  return resultat;
}

int main()
{

// Teilaufgabe b
// Deklarieren von Objekten und Zuweisung von Werten
  euro e0, e1(5,80), e2(5,79), e3(100,105), e4(17,60);

// Teilaufgabe c
// Attribute ausgeben und schreiben
  e0.setEurocentbetrag(33);
  cout << "e0-neu: " << e0 << endl;
  e0.setEurocentbetrag(0);

  cout << "e3.euroganzbetrag: " << e3.getEuroganzbetrag() << endl;
  cout << "e3(100,105): " << e3 << endl;

// Teilaufgabe d
// Die Ausgabe der Objektattribute
  cout << e0 << endl;
  cout << e1 << endl;
  cout << e2 << endl;
  cout << e3 << endl;
  cout << e4 << endl;

// Teilaufgabe e
// Addition von 2 Objekten
  cout << e1 + e2 << endl;

// Teilaufgabe f
// Pruefung ob groesser-gleich zwischen 2 Objekten
  e1<=e2;

// Teilaufgabe g
// Multiplikation eines euro-Objektes mit einem Skalar
  cout << 2.111 * e4 << endl;

  euro staatsschulden_in_tausend_euro((long unsigned int)(1.5*pow(10,9)));
  cout << "Die Staatsschulden betragen " << staatsschulden_in_tausend_euro << endl;
  cout << "Die Staatsschulden haben sich halbiert und betragen jetzt "
       << 0.5 * staatsschulden_in_tausend_euro << "*k" << endl;

  return 0;
}

Muss folgendes noch machen:

a) Teilen Sie Ihre Klasse auf in eine Headerdatei (*.h oder *.hpp) mit der Schnittstellenbeschreibung der Klasse, in welcher sich alle Deklarationen befinden, und eine Implementierungsdatei, in der sich die zugeh¨origen Definitionen befinden. Lagern Sie Ihr Hauptprogramm ebenfalls in eine weitere Datei aus. Schreiben Sie ein geeignetes makefile.

b) Erstellen Sie die noch fehlenden Vergleichsoperatoren, die zwei Objekte vom Typ euro miteinander vergleichen. Dadurch sollten Sie jetzt mindestens ¨uber die Operatoren <, <=, >, und >= verf¨ugen. Alle diese Operatoren sollen Wahrheitswerte zur¨uckgeben. Legen Sie diese Operatoren (als friend deklariert) außerhalb der Klasse an. Schreiben Sie evtl. aus der vorangegangenen ¨Ubung bereits als Memberfunktion definierte Vergleichsoperatoren ggf. um.
Testen Sie durch Ausgabe der Vergleiche zwischen e1 und e2.

c) Erstellen Sie als public Memberfunktionen einen Zuweisungsoperator = , der das
Objekt rechts des Gleichheitszeichens dem Objekt links des Gleichheitszeichens zuweist. Testen Sie, indem Sie e1 den Wert von e2 zuweisen und das Ergebnis vor und nach der Zuweisung ausgeben.

Ich danke allen die mir helfen!
mfg aschlechter
 
Zurück