1  // Érettségi Kézikönyv 2.0 - (C) Ódor Péter 2023
  2  
  3  #include <iostream>
  4  #include <fstream>
  5  #include <vector>
  6  #include <map>
  7  #include <list>
  8  #include <algorithm>
  9  #include <cmath>
 10  
 11  using namespace std;
 12  
 13  struct nezo
 14  {
 15      string vnev;
 16      string knev;
 17      int ferfi;
 18      int berletes;
 19  };
 20  
 21  struct meccs
 22  {
 23      string datum;
 24      string kezdes;
 25      int belepo;
 26      string tipus;
 27      int nezoszam;
 28      int bevetel;            // 7. feladathoz
 29      int berletes;           // 8. feladathoz
 30  };
 31  
 32  struct belepes
 33  {
 34      int nezoid;
 35      int meccsid;
 36      string idopont;
 37  };
 38  
 39  void F1nezo(map<int,nezo> &n)
 40  {
 41  
 42      ifstream fbe;
 43      fbe.open("nezo.txt");
 44      nezo t;
 45      int id;
 46      while(fbe>>id&&fbe>>t.vnev&&fbe>>t.knev&&fbe>>t.ferfi&&fbe>>t.berletes)
 47      {
 48          n[id]=t;
 49      }
 50      /*
 51      for(auto ms:n)
 52      {
 53          t=ms.second;
 54          cout << ms.first << " " << t.vnev << " " << t.knev << " " << t.ferfi << " " << t.berletes << endl;
 55      }
 56      */
 57      fbe.close();
 58  }
 59  
 60  void F1meccs(map<int,meccs> &m)
 61  {
 62      ifstream fbe;
 63      fbe.open("meccs.txt");
 64      meccs t;
 65      t.nezoszam=0;
 66      t.bevetel=0;
 67      t.berletes=0;
 68      int id;
 69      while(fbe>>id&&fbe>>t.datum&&fbe>>t.kezdes&&fbe>>t.belepo&&fbe>>t.tipus)
 70      {
 71          m[id]=t;
 72      }
 73      /*
 74      for(auto ms:m)
 75      {
 76          t=ms.second;
 77          cout << ms.first << " " << t.datum << " " << t.kezdes << " " << t.belepo << " " << t.tipus << endl;
 78      }
 79      */
 80      fbe.close();
 81  }
 82  
 83  void F1belepes(vector<belepes> &b)
 84  {
 85      ifstream fbe;
 86      fbe.open("belepes.txt");
 87      belepes t;
 88      while(fbe>>t.nezoid&&fbe>>t.meccsid&&fbe>>t.idopont)
 89      {
 90          b.push_back(t);
 91      }
 92      /*
 93      for(auto bel:b)
 94      {
 95          cout << bel.nezoid << " " << bel.meccsid << " " << bel.idopont << endl;
 96      }
 97      fbe.close();
 98      */
 99  }
100  
101  void sorting_a_vector(vector<string> &r,bool novekvo)
102  {
103      if(novekvo) sort(r.begin(),r.end());
104      else sort(r.begin(),r.end(),greater<>());
105  }
106  
107  void F2(map<int,meccs> m)
108  {
109      cout << "----------------------------------- 2.feladat -----------------------------------" << endl;
110      cout << "Mérkőzések időrendben:" << endl;
111      vector<string> datumok;
112      for(auto ms:m)
113      {
114          if(ms.second.tipus=="bajnoki") datumok.push_back(ms.second.datum);
115      }
116      sorting_a_vector(datumok,true);
117      //sort(datumok.begin(),datumok.end());
118      ofstream fki;
119      fki.open("bajnoki.txt");
120      for(auto d:datumok)
121      {
122          cout << d << endl;
123          fki << d <<endl;
124      }
125      fki.close();
126  }
127  
128  void F3(map<int,meccs> m)
129  {
130      cout << "----------------------------------- 3.feladat -----------------------------------" << endl;
131      cout << "Utolsó meccsre a jegy ára:" << endl;
132      vector<string> datumok;
133      for(auto ms:m)
134      {
135          datumok.push_back(ms.second.datum);
136      }
137      sorting_a_vector(datumok,false);
138      for(auto ms:m)
139      {
140          if(ms.second.datum==datumok[0])
141          {
142              cout << ms.second.belepo << " Ft (" << datumok[0] <<")" << endl;
143              break;
144          }
145      }
146  }
147  
148  void F4(map<int,meccs> &m,vector<belepes> b)
149  {
150      cout << "----------------------------------- 4.feladat -----------------------------------" << endl;
151      cout << "Nézőszámok az egyes meccseken:" << endl;
152      vector<pair<string,int>> datum_nezoszam;
153      map<string,int> temp;
154      for(auto be:b)
155      {
156          m[be.meccsid].nezoszam++;
157      }
158      for(auto be:b)
159      {
160          temp[m[be.meccsid].datum]=m[be.meccsid].nezoszam;
161      }
162      for(auto items:temp)
163      {
164          datum_nezoszam.push_back(items);
165      }
166      sort(datum_nezoszam.begin(),datum_nezoszam.end());
167      for(auto elem:datum_nezoszam)
168      {
169          cout << elem.first << " " << elem.second << endl;
170      }
171  }
172  
173  void F5(map<int,meccs> m,map<int,nezo> n,vector<belepes> b)
174  {
175      cout << "----------------------------------- 5.feladat -----------------------------------" << endl;
176      cout << "Bevétel 2018 szeptemberében jegyeladásból:" << endl;
177      int bevetel=0;
178      for(int i=0;i<b.size();i++)
179      {
180          if(n[b[i].nezoid].berletes==0)
181          {
182              if(m[b[i].meccsid].datum.substr(0,7)=="2018.09") bevetel+=m[b[i].meccsid].belepo;
183          }
184      }
185      cout << bevetel << " Ft" << endl;
186  }
187  
188  void F6(map<int,meccs> m,map<int,nezo> n,vector<belepes> b)
189  {
190      cout << "----------------------------------- 6.feladat -----------------------------------" << endl;
191      cout << "Kiss Dorina és Varga Zsolt ezeken a meccseken voltak együtt:" << endl;
192      vector<string> datum_kiss;
193      vector<string> datum_kozos;
194      for(int i=0;i<b.size();i++)
195      {
196          if(n[b[i].nezoid].vnev+" "+n[b[i].nezoid].knev=="Kiss Dorina")
197          {
198              datum_kiss.push_back(m[b[i].meccsid].datum);
199          }
200      }
201      for(auto datum:datum_kiss)
202      {
203          for(int i=0;i<b.size();i++)
204          {
205              if(n[b[i].nezoid].vnev+" "+n[b[i].nezoid].knev=="Varga Zsolt"&&m[b[i].meccsid].datum==datum)
206              {
207                  datum_kozos.push_back(m[b[i].meccsid].datum);
208              }
209          }
210      }
211      sort(datum_kozos.begin(),datum_kozos.end());
212      for(auto datum:datum_kozos)
213      {
214          cout << datum << endl;
215      }
216  }
217  
218  void F7(map<int,meccs> m,map<int,nezo> n,vector<belepes> b)
219  {
220      cout << "----------------------------------- 7.feladat -----------------------------------" << endl;
221      cout << "A legtöbb bevételt hozó meccs dátuma:" << endl;
222      for(auto bx:b)
223      {
224          if(n[bx.nezoid].berletes==0)
225          {
226              m[bx.meccsid].bevetel+=m[bx.meccsid].belepo;
227          }
228      }
229      int max_bevetel=0;
230      string max_datum;
231      for(auto ms:m)
232      {
233          if(ms.second.bevetel>max_bevetel)
234          {
235              max_bevetel=ms.second.bevetel;
236              max_datum=ms.second.datum;
237          }
238      }
239      cout << max_datum << endl;
240  }
241  
242  void F8(map<int,meccs> m,map<int,nezo> n,vector<belepes> b)
243  {
244      cout << "----------------------------------- 8.feladat -----------------------------------" << endl;
245      cout << "Bérletes nézők átlagos száma a bajnokság során:" << endl;
246      vector<int> berletesek;
247      for(auto bx:b)
248      {
249          if(n[bx.nezoid].berletes==-1)
250          {
251              m[bx.meccsid].berletes+=1;
252          }
253      }
254      for(auto ms:m)
255      {
256          berletesek.push_back(ms.second.berletes);
257      }
258      cout << round(accumulate(berletesek.begin(), berletesek.end(), 0.0) / berletesek.size()) << "  fő (kerekítve)";
259  }
260  
261  int main()
262  {
263      setlocale(LC_ALL,"");
264      map<int,nezo> nezok;
265      map<int,meccs> meccsek;
266      vector<belepes> belepesek;
267      F1nezo(nezok);
268      F1meccs(meccsek);
269      F1belepes(belepesek);
270      F2(meccsek);
271      F3(meccsek);
272      F4(meccsek,belepesek);
273      F5(meccsek,nezok,belepesek);
274      F6(meccsek,nezok,belepesek);
275      F7(meccsek,nezok,belepesek);
276      F8(meccsek,nezok,belepesek);
277      return 0;
278  }