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