Lottoziehung unter C++!

Justin09

Mitglied
Hallo zusammen,

hab folgendes Programm:
lottoziehung.cpp
Code:
#include "lotto.hpp"
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main() {
  srand(time(NULL));
  Ziehungsverwaltung z1(3), z2(2);
  
  cout << "Ziehungsverwaltung z1:" << endl << z1;
  cout << "Ziehungsverwaltung z2:" << endl << z2;
 
  cout << "Setze z1=z2" << endl << endl;
  z1 = z2;

  cout << "Ziehungsverwaltung z1:" << endl;
  cout << z1;

  cout << "Erstelle Ziehungsverwaltung z3 aus z1 mit Copy-Konstruktor" << endl << endl;
  Ziehungsverwaltung z3(z1);
  cout << "Ziehungsverwaltung z3:" << endl << z3;

  Ziehungsverwaltung z4(2);
  cout << "Ziehungsverwaltung z4:" << endl << z4;
  cout << "Setze z1+=z4" << endl << endl;
  z1 += z4;
  cout << "Ziehungsverwaltung z1:" << endl << z1 << endl;

  cout << endl;

  Ziehungsverwaltung z5(1000000); 
  unsigned int tipp[] = {2,5,23,31,34,44};
  z5.gewinn(tipp,5);

  return 0;
}

Ich muss jetzt 2 Klassen erstellen indem ich die auf eine Headerdatei "lotto.hpp" und eine Implementierungsdatei "lotto.cpp" aufteile.

Zur Klasse "Ziehung":

- ein Array von 6 unsigned int-Zahlen, ein unsigned int für die Zusatzzahl und ein unsigned int für die Superzahl
- einen Konstruktor welcher eine Ziehung ausführt und die Datenelemente mit zufällig ausgewählten Zahlen zwischen 1 und 49 bzw. 0 und 9 für die Superzahl füllt. - Die Zahlen sollen nicht doppelt vorkommen und das Array soll mit einem Sortieralgorithmus versehen werden.
- ein Ausgabeoperator als friend-Funktion der Klasse, welcher die gezogenen Zahlen in einer Reihe ausgibt, wobei die Zusatzzahl und die Superzahl von den anderen zahlen zu unterscheiden sind.
- eine Methode gewinnklasse_bestimmen, welche ein Array mit den 6 Zahlen eines Tipps sowie die Superzahl übergeben bekommt und die Gewinnklasse für diesen Tipp bei der jeweiligen Ziehung bestimmt und zurückgibt. Es gibt folgende Gewinnklassen:

- Gewinnklasse 1: 6 Richtige + SZ
- Gewinnklasse 2: 6 Richtige
- Gewinnklasse 3: 5 Richtige + ZZ
- Gewinnklasse 4: 5 Richtige
- Gewinnklasse 5: 4 Richtige + ZZ
- Gewinnklasse 6: 4 Richtige
- Gewinnklasse 7: 3 Richtige + ZZ
- Gewinnklasse 8: 3 Richtige

Wurde keine der genannten Gewinnklassen erreicht, so soll 0 zurückgegeben werden.

Die andere Klasse "Ziehungsverwaltung" soll folgendes beinhalten:

- Ein unsigned int-Datenelement fur die Anzahl der durchgefuhrten Ziehungen
sowie ein Datenelement vom Typ Zeiger auf Ziehung, welches auf ein Array von
Ziehungen zeigt, das dynamisch entsprechend der geforderten Anzahl an Ziehungen
angelegt wird. Beide Datenelemente sollen private sein.
- Einen Konstruktor mit einem unsigned int-Parameter fur die Anzahl der durchzuf
uhrenden Ziehungen (verwenden Sie eine Initialisierungsliste zur Belegung des
entsprechenden Datenelements). Der Konstruktor soll die entsprechende Anzahl
an Ziehungen dynamisch mit new erzeugen.
- Einen Copy-Konstruktor, welcher eine Ziehungsverwaltung aus einer anderen
erzeugt. Achten Sie darauf, dass Sie eine richtige ("tiefe\) Kopie machen.
- Einen Destruktor, welcher den angeforderten Speicher wieder freigibt.
- Einen operator= als Elementfunktion der Klasse, welcher ein Objekt vom Typ
Ziehungsverwaltung einem anderen zuweist (ebenfalls "tiefe\ Kopie). Beachten
Sie hier auch den Fall, dass ein Objekt sich selbst zugewiesen werden kann.
- Einen operator+= als Elementfunktion der Klasse, welcher die Ziehungen einer
Ziehungsverwaltung zu denen einer anderen hinzufugt (es muss dann entsprechend neuer Speicher angefordert und die bisherigen Werte mussen kopiert werden).
- Einen Ausgabeoperator als friend-Funktion der Klasse, welcher alle Ziehungen
unter Benutzung des Ausgabeoperators von Ziehung untereinander ausgibt.
- Eine Funktion gewinn, welche einen Tipp in Form eines entsprechenden Arrays
und einer Superzahl ubergeben bekommt und fur alle durchgefuhrten Ziehungen
die Gewinnklasse fur diesen Tipp bestimmt. Dabei soll festgehalten werden, wie oft
die jweilige Gewinnklasse erreicht wurde und es soll eine entsprechende Ubersicht
auf cout ausgegeben werden.

Ich bin auf jede Hilfe zugewiesen denn ich hab überhaupt keinen Schimmer wie ich das alleine schaffen soll!
Ich danke allen für ihre Hilfe!

Einen schönen Abend noch
Gruß Justin
 
Zuletzt bearbeitet:

Jennesta

Erfahrenes Mitglied
Kannst du vielleicht noch diese Headerdatei posten? Ich kann mit "Ziehungsverwaltung" wenig anfangen.
Außerdem, wie weit bist du denn mitd en Klassen? Ich möchte jetzt auch nicht deine gesamte Arbeit machen ;), daher sag mal genau woran dein Problem liegt.

Gruß Jennesta
 

Justin09

Mitglied
Leider muss ich die Headerdatei selber schreiben...

ich hab aber wie gesagt noch garnichts gemacht,weil ich nicht weiß wie ich es machen soll...sorry dass ich euch so ne Arbeit auftrage...

Gruß
 

Cromon

Erfahrenes Mitglied
Hallo Justin09

Zumindest der Header sollte ja kein Problem sein anzufangen, den kannst du ja 1:1 aus der Aufgabenbeschreibung übernehmen.

Gruss
Cromon
 

Justin09

Mitglied
Hab jetzt die headerdatei erstellt:

lotto.hpp
Code:
#include<iostream>
#include<cstdlib>
#include<cmath>

#ifndef lottoheader
#define lottoheader
class ziehung
{
  unsigned int* zahlen;
  unsigned int zz;
  unsigned int sz;

ziehung();

friend ostream& operator << (ostream& , const ziehung&);

int gewinnklasse_bestimmen(unsigned int tipp[6], unsigned int sz, unsigned int zz);
};

class ziehungsverwaltung
{
  unsigned int anzahl;
  ziehung *ziehungen;

  ziehungsverwaltung(unsigned int ); 
  ziehungsverwaltung(const ziehungsverwaltung&); 
  ~ ziehungsverwaltung();
  
  ziehungsverwaltung& operator = (const ziehungsverwaltung&);
  ziehungsverwaltung& operator += (const ziehungsverwaltung&);

  friend ostream& operator << (ostream& , const ziehungsverwaltung&);

  int gewinn(unsigned int tipp[6], unsigned int sz);
};

#endif

was muss ich denn jetzt in die lotto.cpp reinschreiben?

danke im voraus

Gruß Justin
 

Cromon

Erfahrenes Mitglied
Jetzt kannst du ja mal mit den Funktionen beginnen, die du umsetzen kannst. Das dürften ja sicher die Ausgabeoperatoren sein und die Generierung der zufälligen Zahlen und die Sortierung derer in das Array.
 

Justin09

Mitglied
ich hab ,mal mit der lotto.cpp angefangen hier mein code:

Code:
#include <iostream>
#include <cstdlib>
#include <cmath>
#include "lotto.hpp"

using namespace std;

ziehung::ziehung()
{
  for (int i=0; i<6; i++)
  {
   zahlen[i] = rand() % 50; 
  }
}

ostream& operator << (ostream& os, const ziehung& z)
{
for(int j=0; j<6; j++)
  {
  os << z.zahlen[j] << endl;
  }
  os << "Superzahl" << z.sz << endl;
return os;
}

int ziehung::gewinnklasse_bestimmen(unsigned int tipp[6], unsigned int sz1)
{
int gew=9;
for(int i=0; i<6; i++)
{
  for(int j=0; j<6; j++)
  {
    if(zahlen[i]==tipp[j])
    gew--;
  }
}
 for(int k=0; k<6; k++)
 {
   if(tipp[k]==zz)
   gew--;
 }
if(gew==2) && (sz==sz1) gew--;

return gew;
}

mein problem ist jetzt dabei ich weiß nicht wie ich das nächste umsetzen soll:
Code:
class ziehungsverwaltung
{
  unsigned int anzahl;
  ziehung *ziehungen;

  ziehungsverwaltung(unsigned int ); 
  ziehungsverwaltung(const ziehungsverwaltung&); 
  ~ ziehungsverwaltung();
  
  ziehungsverwaltung& operator = (const ziehungsverwaltung&);
  ziehungsverwaltung& operator += (const ziehungsverwaltung&);

  friend ostream& operator << (ostream& , const ziehungsverwaltung&);

  int gewinn(unsigned int tipp[6], unsigned int sz);
};
und das mit dem sortieren fällt mir jetzt auch schwer!!
 

Jennesta

Erfahrenes Mitglied
Sollst du den Sortieralgorythmus selbst schreiben?
Wenn nicht nutze einfach qsort aus der <stdlib.h>
http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/

Was dir sicher die Arbeit auch erleichtert ist, dass du nicht den vorangestellten main.cpp-Code nimmst sondern um die Funktionen deiner Klasse zu testen erstmal eine eigene main bastelst. So kannst du jede Funktion für sich testen und daran evtl noch feilen.