Repository navigation
Expand file tree
/
Copy pathigennemsimulation.cpp
More file actions
114 lines (81 loc) · 3.23 KB
/
Copy pathigennemsimulation.cpp
File metadata and controls
114 lines (81 loc) · 3.23 KB
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
#include "igennemsimulation.h"
igennemsimulation::igennemsimulation() {}
igennemsimulation::BeginSimulation() {
// count ballots
CountVotes();
// update final candidate tuple with winning candidates
DetermineWinners();
// determine if iteration was success
if(std::get<0>(finalCandidates) != -1 && std::get<1>(finalCandidates) != -1) {
if(doesNeedMajority && IsMajority()) numberOfSuccesses += 1;
else if(!doesNeedMajority) numberOfSuccesses += 1;
}
// manipulate current ballots and rerun the simulation
Manipulation(std::get<0>(finalCandidates), std::get<1>(finalCandidates));
// reset necessary fields
voteCount = std::vector<int>(numCandidates, 0);
finalCandidates = std::make_tuple<int, int>(-1, -1);
++numberOfIterations;
}
void igennemsimulation::DetermineWinners() {
/*
int firstWinningCandidate = -1;
int secondWinningCandidate = -1;
// find the winning candidates by looping through the number of voters
// that voted for a certain candidate and determining candidate with most votes
for(int i = 0; i < voteCount.size(); ++i) {
if(voteCount.at(i) >= (int)(numVoters / 2) || !isOne) {
if(firstWinningCandidate == -1) {
firstWinningCandidate = i;
}
else if(secondWinningCandidate == -1) {
secondWinningCandidate = i;
}
else {
// holtverseny eseten egy random szam alapitja meg a nyertest
int random = rand() % 2;
if(voteCount.at(i) > voteCount.at(firstWinningCandidate)) {
secondWinningCandidate = firstWinningCandidate;
firstWinningCandidate = i;
}
else if(voteCount.at(i) > voteCount.at(secondWinningCandidate)) {
secondWinningCandidate = i;
}
else if(voteCount.at(i) == voteCount.at(firstWinningCandidate)) {
if(random) {
secondWinningCandidate = firstWinningCandidate;
firstWinningCandidate = i;
}
else {
secondWinningCandidate = i;
}
}
else if(voteCount.at(i) == voteCount.at(secondWinningCandidate)) {
if(random) {
secondWinningCandidate = i;
}
}
}
}
}
auto winningCandidates = std::make_tuple(firstWinningCandidate, secondWinningCandidate);
this->finalCandidates = &winningCandidates;
*/
for(int i = 0; i < voteCount.size(); ++i) {
UpdateWinTuple(this->finalCandidates, voteCount, i);
}
/*
else {
for(int i = 0; i < voteCount.size(); ++i) {
if(voteCount.at(i) > firstWinningCandidate) {
firstWinningCandidate = voteCount.at(i);
}
else if(voteCount.at(i) > secondWinningCandidate) {
secondWinningCandidate = voteCount.at(i);
}
}
auto winningCandidates = std::make_tuple(firstWinningCandidate, secondWinningCandidate);
return winningCandidates;
}
*/
}