1  #include <iostream>         // cin cout
  2  #include <fstream>          // fájlkezelés
  3  #include <sstream>          // stringstream F1 string darabolás
  4  #include <vector>           // vector adattípusokhoz
  5  #include <string>           // stringekhez stoi
  6  #include <iomanip>          // setprecision F4
  7  #include <cmath>            // round F5
  8  
  9  using namespace std;
 10  
 11  // string szavakra "hasogatása" egy vectorba
 12  vector<string> split(string sor)
 13  {
 14      stringstream line(sor);         // ez olyasmi, mint az (i/o)fstream, ahol a sor a fájltartalom
 15      vector<string> split_sor;
 16      string temp;
 17      while(line>>temp)
 18      {
 19          split_sor.push_back(temp);
 20      }
 21      return split_sor;
 22  }
 23  
 24  void F1(string f, vector<vector<string>> &m)
 25  {
 26      ifstream fbe;
 27      string sor;
 28      fbe.open(f);
 29      while(getline(fbe,sor))
 30          m.push_back(split(sor));
 31      /*
 32      for(x:m)
 33      {
 34          for(y:x)
 35          {
 36              cout << y << " ";
 37          }
 38          cout << endl;
 39      }
 40      */
 41      fbe.close();
 42  }
 43  
 44  int F2(vector<vector<string>> m)
 45  {
 46      return m.size();
 47  }
 48  
 49  int F3(vector<vector<string>> m)
 50  {
 51      int db=0;
 52      for(auto meres:m)
 53      {
 54          if(stoi(meres[5])<9) db++;
 55      }
 56      return db;
 57  }
 58  
 59  long int valto(int o, int p, int mp, int emp)
 60      {
 61          return o*60*60*1000+p*60*1000+mp*1000+emp;
 62      }
 63  
 64  void F4(vector<vector<string>> m)
 65  {
 66      int db=0;
 67      cout << "4. feladat\nAdjon meg egy óra és perc értéket! ";
 68      string input_sor, temp;
 69      getline(cin,input_sor);
 70      stringstream input(input_sor);
 71      vector<int> oraperc;
 72      while(input>>temp)
 73      {
 74          oraperc.push_back(stoi(temp));
 75      }
 76      int ora=oraperc[0];
 77      int perc=oraperc[1];
 78  
 79      for(auto meres:m)
 80      {
 81          if(stoi(meres[1])==ora && stoi(meres[2])==perc)
 82          {
 83              db++;
 84          }
 85      }
 86      cout << "\ta. A kezdeti méréspontnál elhaladt járművek száma: " << db << endl;
 87  
 88      db=0;
 89      long int kezdo_ido=valto(ora,perc,0,0), kezd;
 90      long int vege_ido=valto(ora,perc,59,999), vege;
 91  
 92      for(auto meres:m)
 93      {
 94          kezd=valto(stoi(meres[1]),stoi(meres[2]),stoi(meres[3]),stoi(meres[4]));
 95          vege=valto(stoi(meres[5]),stoi(meres[6]),stoi(meres[7]),stoi(meres[8]));
 96          if(kezd<=vege_ido and vege>=kezdo_ido) db++;
 97      }
 98      cout << "\tb. A forgalomsűrűség: " << setprecision(4) << (float) db/10 << endl;
 99  }
100  
101  void F567(vector<vector<string>> m)
102  {
103      float max_seb=0.0, seb, ido;
104      int kezd, vege;
105      int max_kezd, max_vege;
106      float gyorshajto=0.0;
107      string rendszam;
108  
109      // 7. feladat
110      ofstream fki;
111      fki.open("buntetes.txt");
112  
113      for(auto meres:m)
114      {
115          kezd=valto(stoi(meres[1]),stoi(meres[2]),stoi(meres[3]),stoi(meres[4]));
116          vege=valto(stoi(meres[5]),stoi(meres[6]),stoi(meres[7]),stoi(meres[8]));
117          ido=vege-kezd;
118          seb=(10000/(ido/1000))*3.6;
119          if(seb>max_seb)
120          {
121              max_seb=seb;
122              max_kezd=kezd;
123              max_vege=vege;
124              rendszam=meres[0];
125          }
126          // 6. feladat
127          if(seb>90.0) gyorshajto+=1.0;
128          // 7. feladat
129          if(seb>104.0 && seb<=121.0) fki << meres[0] << "\t" << (int) seb << " km/h\t30000 Ft" << endl;
130          if(seb>121.0 && seb<=136.0) fki << meres[0] << "\t" << (int) seb << " km/h\t45000 Ft" << endl;
131          if(seb>136.0 && seb<=151.0) fki << meres[0] << "\t" << (int) seb << " km/h\t60000 Ft" << endl;
132          if(seb>151.0) fki << meres[0] << "\t" << (int) seb << " km/h\t200000 Ft" << endl;
133      }
134  
135      // 7. feladat
136      fki.close();
137  
138      int db=0;
139      for(auto meres:m)
140      {
141          if(meres[0]!=rendszam)
142          {
143              kezd=valto(stoi(meres[1]),stoi(meres[2]),stoi(meres[3]),stoi(meres[4]));
144              vege=valto(stoi(meres[5]),stoi(meres[6]),stoi(meres[7]),stoi(meres[8]));
145              if(kezd<=max_kezd && vege>max_vege) db++;
146          }
147      }
148  
149      cout << "5. feladat\nA legnagyobb sebességgel haladó jármű" << endl;
150      cout << "\trendszáma: " << rendszam << endl;
151      cout << "\tátlagsebessége: " << round(max_seb) << " km/h" << endl;
152      cout << "\táltal lehagyott járművek száma: " << db << endl;
153  
154      float gyh=(gyorshajto/m.size())*100.0;
155      cout << "6. feladat\nA járművek " << setprecision(4) << gyh << "%-a volt gyorshajtó." << endl;
156  }
157  
158  int main()
159  {
160      setlocale(LC_ALL, "hun");
161      vector<vector<string>> meresek;     // mátrix - minden adat string marad benne, ha kell majd konvertáljuk
162      F1("meresek.txt", meresek);
163      cout << "2. feladat\nA mérés során " << F2(meresek) << " jármű adatait rögzítették." << endl;
164      cout << "3. feladat\n9 óra előtt " << F3(meresek) << " jármű haladt el a végponti mérőnél." << endl;
165      F4(meresek);
166      F567(meresek);
167      return 0;
168  }