-
Notifications
You must be signed in to change notification settings - Fork 0
/
Lotto.cpp
277 lines (257 loc) · 6.58 KB
/
Lotto.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include "Lotto.h"
using namespace std;
/**
* Erstellt ein Objekt vom Typ Lotto mit 6 zufaelligen Zahlen.
*/
Lotto::Lotto()
{
liefere_zufaellige_ziehung();
}
/**
* Erstellt ein Objekt vom Typ Lotto mit Hilfe der Angabe von
* 6 unterschiedlichen Zahlen aus dem Bereich von 1 bis 49.
* Wenn die angegebenen Zahlen die Kriterien nicht erfuellen, dann
* wird ein Fehlertext ausgegeben und durch Zufallszahlen ersetzt.
* @param zahlen 6 unterschiedliche Zahlen aus dem Bereich von 1 bis 49.
*/
Lotto::Lotto(vector<int> zahlen)
{
if (zahlen.size() < 6)
{
cout << "\nIhre uebergebenen Zahlen sind unzulaessig.\nSie wurden mit Zufallszahlen ausgetauscht.";
liefere_zufaellige_ziehung();
}
else
lottozahlen = zahlen;
}
/**
* Gibt die Lottozahlen auf dem Bildschirm aus.
*/
void Lotto::schreibe_zahlen()
{
for(unsigned int i = 0; i < lottozahlen.size(); i++)
cout << lottozahlen[i] << "\n";
}
/**
* Liefert die Lottozahlen als Vektor.
* @return Die Lottozahlen.
*/
vector<int> Lotto::liefere_lottozahlen() const
{
return lottozahlen;
}
/**
* Liefert die Anzahl der Primzahlen aus der Lottoziehung.
* @return Die Anzahl der vorkommenden Primzahlen.
*/
int Lotto::liefere_anzahl_primzahlen() const
{
int array[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47};
int anzahl = 0;
for(unsigned int i = 0; i < lottozahlen.size(); i++)
{
for(unsigned int k = 0; k < 15; k++)
{
if (lottozahlen[i] == array[k])
anzahl++;
}
}
return anzahl;
}
/**
* Liefert die niedrigste Zahl der Lottoziehung.
* @return Die niedrigste Zahl der Lottoziehung.
*/
int Lotto::liefere_kleinste_zahl() const
{
int kleinste = lottozahlen[0];
for(unsigned int i = 1; i < lottozahlen.size(); i++)
{
if (lottozahlen[i] < kleinste)
kleinste = lottozahlen[i];
}
return kleinste;
}
/**
* Liefert die hoechste Zahl der Lottoziehung.
* @return Die hoechste Zahl der Lottoziehung.
*/
int Lotto::liefere_groesste_zahl() const
{
int groesste = lottozahlen[0];
for(unsigned int i = 1; i < lottozahlen.size(); i++)
{
if (lottozahlen[i] > groesste)
groesste = lottozahlen[i];
}
return groesste;
}
/**
* Liefert die Differenz zwischen der niedrigsten und der hoechsten Zahl der Lottoziehung.
* @return Die Differenz.
*/
int Lotto::liefere_differenz() const
{
int kleinste = liefere_kleinste_zahl();
int groesste = liefere_groesste_zahl();
return (groesste - kleinste);
}
/**
* Ueberprueft ob es sich bei der Lottoziehung um eine gerade Ziehung handelt.
* @return Wird true wenn es sich um eine gerade Ziehung handelt, wenn nicht false.
*/
bool Lotto::pruefe_auf_gerade_ziehung() const
{
bool gerade_ziehung = false;
int x = liefere_anzahl_gerader_zahlen();
if (x == 6)
gerade_ziehung = true;
return gerade_ziehung;
}
/**
* Vergleicht 2 Lottoziehungen miteinander und ermittelt,
*s wieviele Zahlen uebereinstimmen innerhalb der Ziehungen uebereinstimmen.
* @return Anzahl der Treffer.
*/
int Lotto::pruefe_anzahl_richtige_treffer(Lotto lotto_tipp) const
{
vector<int> x = lotto_tipp.liefere_lottozahlen();
int anzahl = 0;
for(unsigned int i = 0; i < lottozahlen.size(); i++)
{
for(unsigned int k = 0; k < x.size(); k++)
{
if (lottozahlen[i] == x[k])
anzahl++;
}
}
return anzahl;
}
/**
* Ueberprueft ob es sich bei der Lottoziehung um eine UNGERADE Ziehung handelt.
* (Alle Zahlen sind ungerade)
* @return Wird true wenn es sich um eine ungerade Ziehung handelt, wenn nicht false.
*/
bool Lotto::pruefe_auf_ungerade_ziehung() const
{
bool ungerade_ziehung = false;
int x = liefere_anzahl_gerader_zahlen();
if (x == 0)
ungerade_ziehung = true;
return ungerade_ziehung;
}
/**
* Ueberprueft ob es sich bei der Lottoziehung um eine Primziehung handelt.
* (Alle Zahlen sind Primzahlen)
* @return Wird true wenn es sich um eine Primziehung handelt, wenn nicht False.
*/
bool Lotto::pruefe_auf_primziehung() const
{
bool prim_ziehung = false;
int x = liefere_anzahl_primzahlen();
if (x == 6)
prim_ziehung = true;
return prim_ziehung;
}
/**
* Ueberprueft ob es sich bei der Lottoziehung um eine Nichtprimziehung handelt
* d.h es kommen keine Primzahlen in der Ziehnung vor.
* @return true wenn es sich um eine Nichtprimziehung handelt, wenn nicht false.
*/
bool Lotto::pruefe_auf_nichtprimziehung() const
{
bool nichtprim_ziehung = false;
int x = liefere_anzahl_primzahlen();
if (x == 0)
nichtprim_ziehung = true;
return nichtprim_ziehung;
}
/**
* Ueberprueft ob die Laenge der Ziehung (Differenz zwischen kleinster und groesster Zahl)
* als Zahl in der Lottoziehung vorkommt.
* @return True wenn sie vorkommt, wenn nicht False.
*/
bool Lotto::pruefe_ob_differenz_vorhanden() const
{
bool x = false;
int laenge = liefere_differenz();
for(unsigned int i = 0; i < lottozahlen.size(); i++)
if (laenge == lottozahlen[i])
x = true;
return x;
}
/**
* Liefert die Anzahl der aufeinanderfolgenden Zahlen der Lottoziehung.
* @return Liefert den Wert um welche Ziehung es sich handelt.
*/
int Lotto::liefere_anzahl_aufeinanderfolgende_zahlen()
{
int zwsp2 = 1;
int zwsp = 1;
for(unsigned int i = 0; i < lottozahlen.size(); i++)
{
zwsp2 = 1;
for(unsigned int k = i; k < lottozahlen.size(); k++)
{
if ((lottozahlen[k] + 1) == lottozahlen[k + 1])
{
zwsp2++;
if(zwsp < zwsp2)
zwsp = zwsp2;
}
else
zwsp2 = 1;
}
}
return zwsp;
}
/**
* Liefert die Anzahl der geraden Zahlen der Lottoziehung.
* @return Die Anzahl der geraden Zahlen der Lottoziehung.
*/
int Lotto::liefere_anzahl_gerader_zahlen() const
{
int anzahl = 0;
for(unsigned int i = 0; i < lottozahlen.size(); i++)
{
if ((lottozahlen[i] % 2) == 0)
anzahl++;
}
return anzahl;
}
/**
* Sortiert die Lottozahen aufsteigend nach der Groesse.
*/
void Lotto::sortiere_aufsteigend()
{
int tmp;
for (unsigned int i = 0; i < lottozahlen.size() - 1; ++i)
{
for (unsigned int j = 0; j < lottozahlen.size() - i - 1; ++j)
{
if (lottozahlen[j] > lottozahlen[j + 1])
{
tmp = lottozahlen[j];
lottozahlen[j] = lottozahlen[j + 1];
lottozahlen[j + 1] = tmp;
}
}
}
}
/**
* Liefert eine zufaellige Lottoziehung.
*/
void Lotto::liefere_zufaellige_ziehung()
{
vector<int> ziehung;
for (int i = 1; i < 50; i++)
ziehung.push_back(i);
random_shuffle(ziehung.begin(), ziehung.end());
for(int q = 1; q < 7; q++)
lottozahlen.push_back(ziehung[q]);
}