eutazas201910C++.cpp


  1  #include <iostream>     // cin és cout parancsok
  2  #include <fstream>      // fájlkezelés
  3  #include <vector>       // vector adattípushoz
  4  
  5  using namespace std;
  6  
  7  struct adat
  8  {
  9      string allomas;     // megálló sorszáma
 10      string fido;        // felszállás ideje (ééééhhnn-óópp)
 11      string id;          // kártya azonosító
 12      string berlet;      // bérlet típusa vagy JGY (jeggyel utazó)
 13      string lejar;       // dátum vagy 0-10 közötti érték
 14  };
 15  
 16  void F1(vector<adat> &a)
 17  {
 18      ifstream fbe;
 19      fbe.open("utasadat.txt");
 20      adat temp;
 21      while(fbe>>temp.allomas&&fbe>>temp.fido&&fbe>>temp.id&&fbe>>temp.berlet&&fbe>>temp.lejar)
 22      {
 23          a.push_back(temp);
 24      }
 25      fbe.close();
 26  }
 27  
 28  void F2(vector<adat> a)
 29  {
 30      cout << "2. feladat" << endl;
 31      printf("A buszra %d utas akart felszállni.\n",a.size());
 32  }
 33  
 34  void F3(vector<adat> a)
 35  {
 36      cout << "3. feladat" << endl;
 37      // nem szállhat fel valaki, ha lejárt a bérlete vagy nincs már jegye
 38      int nem=0;
 39      bool ervenytelen;
 40      for(auto elem:a)
 41      {
 42          ervenytelen=(elem.berlet!="JGY"&&elem.lejar<elem.fido.substr(0,8))||(elem.berlet=="JGY"&&elem.lejar=="0");
 43          if(ervenytelen)
 44          {
 45              nem++;
 46          }
 47      }
 48      printf("A buszra %d utas nem szállhatott fel.\n",nem);
 49  }
 50  
 51  void F4(vector<adat> a)
 52  {
 53      cout << "4. feladat" << endl;
 54      vector<int> megallo;
 55      megallo.reserve(30);
 56      for(int i=0;i<30;i++) megallo[i]=0;
 57      for(auto elem:a)
 58      {
 59          megallo[atoi(elem.allomas.c_str())]++;      // atoi: standard c stringet (c_str()) alakít integerré
 60      }
 61      int max_felszallo=0, allomas;
 62      for(int i=0;i<30;i++)
 63      {
 64          if(megallo[i]>max_felszallo)
 65          {
 66              max_felszallo=megallo[i];
 67              allomas=i;
 68          }
 69      }
 70      printf("A legtöbb utas (%d fõ) a %d. megállóban próbált felszállni.\n",max_felszallo,allomas);
 71  }
 72  
 73  void F5(vector<adat> a)
 74  {
 75      cout << "5. feladat" << endl;
 76      // FEB Felnõtt bérlet
 77      // TAB Tanulóbérlet (kedvezményes)
 78      // NYB Nyugdíjas bérlet (kedvezményes)
 79      // NYP 65 év feletti bérlet (ingyenes)
 80      // RVS Rokkant, vak, siket vagy kísérõ bérlet (ingyenes)
 81      // GYK Iskolakezdés elõtti gyerekbérlet (ingyenes)
 82      // JGY Jegy
 83      int ingyen=0, kedvezmeny=0;
 84      bool ingyenes, kedvezmenyes,ervenyes;
 85      for(auto elem:a)
 86      {
 87          ervenyes=(elem.berlet!="JGY"&&elem.lejar>=elem.fido.substr(0,8));
 88          if(ervenyes)
 89          {
 90              ingyenes=(elem.berlet=="NYP"||elem.berlet=="RVS"||elem.berlet=="GYK");
 91              kedvezmenyes=(elem.berlet=="TAB"||elem.berlet=="NYB");
 92              if(ingyenes) ingyen++;
 93              if(kedvezmenyes) kedvezmeny++;
 94          }
 95      }
 96      printf("Ingyenesen utazók száma: %d fõ\n",ingyen);
 97      printf("A kedvezményesen utazók száma: %d fõ\n",kedvezmeny);
 98  }
 99  int napokszama(int e1, int h1, int n1, int e2, int h2, int n2)
100  {
101      h1 = (h1 + 9) % 12;
102      e1 = e1 - h1 / 10;
103      int d1 = 365*e1 + e1 / 4 - e1 / 100 + e1 / 400 + (h1*306 + 5) / 10 + n1 - 1;
104      h2 = (h2 + 9) % 12;
105      e2 = e2 - h2 / 10;
106      int d2 = 365*e2 + e2 / 4 - e2 / 100 + e2 / 400 + (h2*306 + 5) / 10 + n2 - 1;
107      return d2-d1;
108  }
109  
110  void F7(vector<adat> a)
111  {
112      ofstream fki;
113      fki.open("figyelmeztetes.txt");
114      int e1,h1,n1,e2,h2,n2;
115      int nap;
116      for(auto elem:a)
117      {
118          if(elem.berlet!="JGY")
119          {
120              e1=atoi(elem.fido.substr(0,4).c_str());
121              h1=atoi(elem.fido.substr(4,2).c_str());
122              n1=atoi(elem.fido.substr(6,2).c_str());
123              e2=atoi(elem.lejar.substr(0,4).c_str());
124              h2=atoi(elem.lejar.substr(4,2).c_str());
125              n2=atoi(elem.lejar.substr(6,2).c_str());
126              nap=napokszama(e1,h1,n1,e2,h2,n2);
127              if(nap>=0&&nap<=3)
128              {
129                  fki << elem.id << " " << elem.lejar.substr(0,4) << "-" << elem.lejar.substr(4,2) << "-" << elem.lejar.substr(6,2) << endl;
130              }
131          }
132      }
133      fki.close();
134  }
135  
136  int main()
137  {
138      setlocale(LC_ALL,"");
139      vector<adat> adatok;
140      F1(adatok);
141      F2(adatok);
142      F3(adatok);
143      F4(adatok);
144      F5(adatok);
145      F7(adatok);
146      return 0;
147  }