1  #include <conio.h>
  2  #include <iostream>
  3  #include <fstream>
  4  
  5  using namespace std;
  6  
  7  struct utas
  8  {
  9      int sorszam, ules, fel, le, fizet;
 10  } utasok[500];
 11  
 12  int e_szam;  //eladott jegyek száma
 13  int vonalhossz;
 14  int ar_10;
 15  int utvonal[201];   //0 és 200 km majd nem játszik
 16  
 17  void kiir(int s)
 18  {
 19      cout << endl;
 20      cout << s << ". feldat" << endl;
 21      cout << "..............." << endl;
 22  }
 23  
 24  int kerekit(int ezt)
 25  {
 26      // 1,2,6,7 le   3,4,8,9 fel
 27      int kerek;
 28      int maradek=ezt%5;
 29  
 30      if(maradek<3) kerek=ezt-maradek;
 31      else kerek=ezt-maradek+5;
 32  
 33      return kerek;
 34  }
 35  
 36  void F1()
 37  {
 38      int fizetendo;  //beolvasáskor kiszámolhatjuk a fizetendõ díjat minden utasra
 39      int megtett_ut;
 40  
 41      ifstream be;
 42      be.open("eladott.txt");
 43  
 44      be >> e_szam;
 45      be >> vonalhossz;
 46      be >> ar_10;
 47  
 48      cout << "Eladott jegyek száma: " << e_szam << endl;
 49      cout << "Vonal hossza: " << vonalhossz << endl;
 50      cout << "10 km ára: " << ar_10 << endl << endl;
 51  
 52      for(int i=0;i<e_szam;i++)
 53      {
 54          utasok[i].sorszam=i+1;
 55          be >> utasok[i].ules;
 56          be >> utasok[i].fel;
 57          be >> utasok[i].le;
 58  
 59          megtett_ut=utasok[i].le-utasok[i].fel;
 60          if(megtett_ut%10!=0) fizetendo=(megtett_ut/10+1)*ar_10;
 61          else fizetendo=(megtett_ut/10)*ar_10;
 62  
 63          utasok[i].fizet=kerekit(fizetendo);
 64  
 65          //Adatok kiírása (nem kell), csak rossz szokás... .)
 66          cout << utasok[i].sorszam << " ";
 67          cout << utasok[i].ules << " ";
 68          cout << utasok[i].fel << " ";
 69          cout << utasok[i].le << " ";
 70          cout << utasok[i].fizet << endl;
 71      }
 72      be.close();
 73  }
 74  
 75  void F2()
 76  {
 77      int i=e_szam-1;
 78  
 79      cout << "Utolsó (" << utasok[i].sorszam << ".) utas adatai: " << endl;
 80      cout << "Ülésszám: " << utasok[i].ules;
 81      cout << " Beutazott távolság: " << utasok[i].le-utasok[i].fel << endl;
 82  }
 83  
 84  void F3()
 85  {
 86      for(int i=0;i<e_szam;i++)
 87      {
 88          if(utasok[i].fel==0&&utasok[i].le==vonalhossz)
 89          {
 90              cout << utasok[i].sorszam << " ";
 91          }
 92      }
 93      cout << endl;
 94  }
 95  
 96  void F4()
 97  {
 98      //egyszerû összegzés a feladat
 99  
100      int bevetel=0;
101      for(int i=0;i<e_szam;i++)
102      {
103          bevetel=bevetel+utasok[i].fizet;
104      }
105      cout << "A társaság bevétele: " << bevetel << endl;
106  }
107  
108  void F5()
109  {
110      //Több megoldás is lehetséges!!!
111  
112      int max_fel=0;
113  
114      //Második legnagyobb szám keresése felszálláskor
115      for(int i=1;i<e_szam;i++)
116      {
117          if(utasok[i].fel>max_fel&&utasok[i].fel!=vonalhossz) max_fel=utasok[i].fel;
118      }
119  
120      cout << "Utolsó elõtti megálló felszállók esetén: " << max_fel << endl;
121  
122      int max_le=0;
123  
124      //Második legnagyobb szám keresése felszálláskor
125      for(int i=1;i<e_szam;i++)
126      {
127          if(utasok[i].le>max_le&&utasok[i].le!=vonalhossz) max_le=utasok[i].le;
128      }
129  
130      cout << "Utolsó elõtti megálló leszállók esetén: " << max_le << endl;
131  
132      //Végsõ maximum, azaz utolsó elõtti megálló
133      //Valószínû, hogy a max_fel és max_le azonos, de hát ki tudja?
134      int max;
135      if(max_fel>=max_le) max=max_fel; else max=max_le;
136  
137      int fel_db=0, le_db=0;
138  
139      for(int i=0;i<e_szam;i++)
140      {
141          if(utasok[i].fel==max) fel_db++;
142          if(utasok[i].le==max)  le_db++;
143      }
144  
145      cout << "Utolsó elõtti megállónál felszállók száma: " << fel_db << endl;
146      cout << "Utolsó elõtti megállónál leszállók száma : " << le_db << endl;
147      cout << endl;
148      cout << "Fel- és leszállók összesen: " << fel_db+le_db << endl;
149  }
150  
151  void F6()
152  {
153      //Itt is több megoldás lehetséges!
154      for(int i=0;i<201;i++) utvonal[i]=0;
155      //Az utasok fel- és leszállása alapján növeljük az adott kilométernek megfelelõ tömbelemet,
156      //így jelezzük, hogy ott megálló volt
157      for(int i=0;i<e_szam;i++)
158      {
159          utvonal[utasok[i].fel]++;
160          utvonal[utasok[i].le]++;
161      }
162  
163      int megallo_db=0;
164      //0 és 200 km most nem játszik
165      for(int i=1;i<200;i++)
166      {
167          if(utvonal[i]!=0) megallo_db++;
168      }
169      cout << "Az induló és a végállomás közötti megállók száma: " << megallo_db << endl;
170  }
171  
172  void F7()
173  {
174      ofstream ki;
175      ki.open("kihol.txt");
176      int tav;
177      cout << "Távolság: ";
178      cin >> tav;
179  
180      int ules[48];
181      //48 ülés van, kezdetben mind üres
182      for(int i=0;i<48;i++) ules[i]=0;
183  
184      for(int i=0;i<e_szam;i++)
185      {
186          //ha tav=felszallasi hely, azt is kezeljuk
187          if(tav>=utasok[i].fel&&tav<utasok[i].le)
188          {
189              ules[utasok[i].ules-1]=utasok[i].sorszam;
190          }
191      }
192  
193      for(int i=0;i<48;i++)
194      {
195          if(ules[i]==0)
196          {
197              ki << i+1 << ". ülés: üres" << endl;
198              cout << i+1 << ". ülés: üres" << endl;
199          }
200          else
201          {
202              ki << i+1 << ". ülés: " << ules[i] << ". utas"  << endl;
203              cout << i+1 << ". ülés: " << ules[i] << ". utas"  << endl;
204          }
205      }
206      ki.close();
207  }
208  
209  int main()
210  {
211      setlocale(LC_ALL, "hun");
212      cout << "Helyjegy" << endl;
213      kiir(1);
214      F1();
215      kiir(2);
216      F2();
217      kiir(3);
218      F3();
219      kiir(4);
220      F4();
221      kiir(5);
222      F5();
223      kiir(6);
224      F6();
225      kiir(7);
226      F7();
227      return 0;
228  }