-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathComplexCounty.cpp
61 lines (60 loc) · 1.95 KB
/
ComplexCounty.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
#include "ComplexCounty.h"
#include <iterator>
#include <algorithm>
namespace votes
{
bool electors__sorter(Elector const& a, Elector const& b)
{
if (a.sumElectors >= b.sumElectors)
return false;
else return true;
}
void ComplexCounty::GetPartiesElectors(vector<float> &statisticsArray, vector<int> &countyElectors, int partiesSize)const
{
int place = 0, tempElectorsNum = 0, remainingDelegates = 0;
float max = -1;
float currentPrecent;
for (int i = 1; i <= partiesSize; i++)
{
currentPrecent=statisticsArray[i];
countyElectors[i] = static_cast<int>(_numdelegates * statisticsArray[i]);
if (currentPrecent > max)
{
max = currentPrecent;
place = i;
}
tempElectorsNum += countyElectors[i];
}
remainingDelegates = _numdelegates - tempElectorsNum;
countyElectors[place] += remainingDelegates;
}
void ComplexCounty::sortAndPrintWinners(vector<int>& voteCount, vector<int>& Electors, int partiesSize, list <Party*> partylist)const
{
int size = partiesSize+1;
vector <Elector> electorsArray;
electorsArray.resize(partiesSize + 1);
electorsArray[0].sumElectors = -1;
list<Party*>::const_iterator runner = partylist.begin();
list<Party*>::const_iterator end = partylist.end();
runner++;
for (int i=1; runner != end; ++runner,i++)
{
electorsArray[i].sumElectors = Electors[i];
electorsArray[i].party = *runner;
}
sort(electorsArray.begin()+1, electorsArray.end(), electors__sorter);
for (int i = partiesSize; i > 0; i--)
cout << "#" << partiesSize - i + 1 << ". " << electorsArray[i].party->getLeader()->getName() << " Has got: "
<< electorsArray[i].sumElectors << " Electors and his party got " <<
voteCount[electorsArray[i].party->getPartySerial()] << " votes" << endl;
}
void ComplexCounty::printCountyType() const
{
cout << " County Type: Split " << endl;
}
void ComplexCounty::saveCounty(ostream& out) const
{
out.write(rcastcc(&COMPLEX), sizeof(COMPLEX));
County::saveCounty(out);
}
}