|
valasztas201305C++.cpp
|
|
1 #include <iostream> // cin és cout parancsok
2 #include <fstream> // fájlkezelés
3 #include <vector> // vector adattípushoz
4 #include <map> // map (szótár) adattípushoz
5 #include <set> // set (halmaz) adattípushoz
6 #include <iomanip> // setprecision I/O manipulálás
7 #include <algorithm> // sort függvény
8
9 #define N 12345 // teljes lakosság létszáma
10
11 using namespace std;
12
13 struct jelolt
14 {
15 int vk; // választókörzet (1-8 közötti egész szám)
16 int szavazat; // a jelöltre leadott szavazatok száma
17 string vnev; // jelölt vezetékneve
18 string knev; // jelölt keresztneve
19 string part; // jelöltet támogató párt (GYEP,HEP,ZEP,TISZ,-)
20 };
21
22 int szumma; // globális változó
23 set<string> partnevek; // pártnevek halmaza, csak azért, hogy legyen halmazra is példa
24
25 void F1(vector<jelolt> &j)
26 {
27 ifstream fbe;
28 fbe.open("szavazatok.txt");
29 jelolt temp;
30 while(fbe>>temp.vk&&fbe>>temp.szavazat&&fbe>>temp.vnev&&fbe>>temp.knev&&fbe>>temp.part)
31 {
32 j.push_back(temp); // a vector feltöltése
33 partnevek.insert(temp.part); // a halmaz feltöltése
34 }
35 fbe.close();
36 }
37
38 void F2(vector<jelolt> j)
39 {
40 cout << "2. feladat" << endl;
41 printf("A helyhatósági választáson %d képviselőjelölt indult.\n",j.size());
42 }
43
44 void F3(vector<jelolt> j)
45 {
46 cout << "3. feladat" << endl;
47 string vnev, knev;
48 cout << "Vezetéknév: ";
49 cin >> vnev;
50 cout << "Keresztnév: ";
51 cin >> knev;
52 bool van=false;
53 for(auto elem:j) // klasszikus keresés helyett egy for ciklus - nem elegáns, de praktikus
54 {
55 if(elem.vnev==vnev&&elem.knev==knev)
56 {
57 cout << elem.szavazat << " szavazatot kapott." << endl;
58 van=true;
59 break;
60 }
61 }
62 if(van==false)
63 {
64 cout << "Ilyen nevű képviselőjelölt nem szerepel a nyilvántartásban!" << endl;
65 }
66 }
67
68 void F4(vector<jelolt> j)
69 {
70 cout << "4. feladat" << endl;
71 szumma=0;
72 for(auto elem:j)
73 {
74 szumma+=elem.szavazat;
75 }
76 float arany=((float)szumma/(float)N)*100;
77 printf("A választáson %d állampolgár, a jogosultak %.2f%%-a vett részt.\n",szumma,arany);
78 }
79
80 void F5(vector<jelolt> j)
81 {
82 cout << "5. feladat" << endl;
83 struct part
84 {
85 int sz; // szavazatok száma, egy adott pártra
86 string nev; // párt neve
87 };
88 map<string,part> partok; // szótár adattípus, csak hogy ilyen is legyen
89 // szótárunk kulcs a párt neve, értékei egy struktúra lesz
90 for(auto partnev:partnevek)
91 {
92 partok[partnev].sz=0; // pártokra leadott szavazatok összesítéséhez inicializálás
93 }
94 partok["GYEP"].nev="Gyümölcsevők Pártja"; // a struktúra nev mezőjét "manuálisan" töltjük fel
95 partok["ZEP"].nev="Zöldségevők Pártja";
96 partok["TISZ"].nev="Tejivók Pártja";
97 partok["HEP"].nev="Húsevők Pártja";
98 partok["-"].nev="Független jelöltek";
99 for(auto elem:j)
100 {
101 partok[elem.part].sz+=elem.szavazat; // az összesítés ilyen egyszerű a szótár típusnak köszönhetően
102 }
103 float arany;
104 // szótár esetén a "first" a kulcs, a "second" az értéket jelenti
105 for(auto elem:partok)
106 {
107 arany=((float) elem.second.sz / (float) szumma)*100;
108 cout << elem.second.nev << ": \t" << fixed << setprecision(2) << arany << "%" << endl;
109 }
110 }
111
112 bool szavazat_szerint(jelolt a, jelolt b)
113 {
114 return a.szavazat > b.szavazat; // szavazat szerint csökkenő sorrendbe rendezés
115 }
116
117 bool vk_szavazat_szerint(jelolt a, jelolt b)
118 {
119 // választókerület szerint növekvő, azon belül szavazat szerint csökkenő sorrendbe rendezés
120 return (a.vk < b.vk) || (a.vk==b.vk&&a.szavazat>b.szavazat);
121 }
122
123 void F6_F7(vector<jelolt> j)
124 {
125 cout << "6. feladat" << endl;
126 vector<jelolt> temp,temp2;
127 temp=j;
128 temp2=j;
129 sort(temp.begin(),temp.end(),szavazat_szerint);
130 sort(temp2.begin(),temp2.end(),vk_szavazat_szerint);
131 int max_szavazat=temp[0].szavazat;
132 for(auto elem:temp)
133 {
134 if( elem.szavazat==max_szavazat)
135 {
136 cout << elem.vnev << " " << elem.knev << " \t";
137 if(elem.part=="-") cout << "független"; else cout << elem.part;
138 cout << "\t (" << elem.szavazat << ")" << endl;
139 }
140
141 }
142 cout << "7. feladat" << endl;
143 ofstream fki;
144 fki.open("kepviselok.txt");
145 jelolt akt=temp2[0];
146 cout << akt.vk << " " << " " << akt.vnev << " " << akt.knev << " ";
147 if(akt.part=="-") cout << "független"; else cout << akt.part << endl;
148 fki << akt.vk << " " << " " << akt.vnev << " " << akt.knev << " ";
149 if(akt.part=="-") fki << "független"; else fki << akt.part << endl;
150 for(auto elem:temp2)
151 {
152 if(elem.vk!=akt.vk)
153 {
154 akt=elem;
155 cout << akt.vk << " " << " " << akt.vnev << " " << akt.knev << " ";
156 if(akt.part=="-") cout << "független"; else cout << akt.part;
157 cout << endl;
158 fki << akt.vk << " " << " " << akt.vnev << " " << akt.knev << " ";
159 if(akt.part=="-") fki << "független"; else fki << akt.part;
160 fki << endl;
161 }
162 }
163 fki.close();
164 }
165
166 int main()
167 {
168 setlocale(LC_ALL,"");
169 vector<jelolt> jeloltek;
170 jeloltek.reserve(100);
171 F1(jeloltek);
172 F2(jeloltek);
173 F3(jeloltek);
174 F4(jeloltek);
175 F5(jeloltek);
176 F6_F7(jeloltek);
177
178 return 0;
179 }
180