autok202410_em_DK_C++.cpp

  1  #include <iostream>         // cin, cout, fixed
  2  #include <fstream>          // fájlkezelés
  3  #include <vector>           // vector adattí­pus
  4  #include <set>              // halmaz adattípus
  5  #include <algorithm>        // max_element
  6  #include <iomanip>          // setprecision
  7  #include <cstring>          // to_string
  8  
  9  using namespace std;
 10  
 11  struct jarmu
 12  {
 13      string rendszam;
 14      int ora, perc, sebesseg;
 15  };
 16  
 17  void F1(vector<jarmu> &j)
 18  {
 19      ifstream fbe;
 20      fbe.open("jeladas.txt");
 21      jarmu temp;
 22      while(fbe >> temp.rendszam >> temp.ora >> temp.perc >> temp.sebesseg)
 23      {
 24          j.push_back(temp);
 25      }
 26      fbe.close();
 27  }
 28  
 29  // ----------------------------------------------------------------------------------------------
 30  // 2. Állapí­tsa meg, hogy milyen időpontban történt a legutolsó jeladás, és í­rja a képernyőre
 31  //    az időpontot, valamint az utoljára jelet adó autó rendszámát!
 32  // ----------------------------------------------------------------------------------------------
 33  void F2(vector<jarmu> j)
 34  {
 35      cout << "2. feladat:" << endl;
 36      auto utolso = j[j.size()-1];
 37      cout << "Az utolsó jeladás időpontja " << utolso.ora << ":" << utolso.perc << ", a jármű rendszáma " << utolso.rendszam << endl;
 38  }
 39  
 40  // ----------------------------------------------------------------------------------------------
 41  // 3. ͍rja ki a bemeneti állományban elsőként szereplő jármű rendszámát, valamint azt, hogy
 42  //    milyen időpontokban adott jelzést! Az időpontokat óra:perc formátumban, szóközzel
 43  //    elválasztva, egy sorban jelení­tse meg!
 44  // ----------------------------------------------------------------------------------------------
 45  void F3(vector<jarmu> j)
 46  {
 47      cout << "3. feladat:" << endl;
 48      jarmu elso = j[0];
 49      cout << "Az első jármű: " << elso.rendszam << endl;                             // TLJ-509
 50      cout << "Jeladásainak időpontjai: ";
 51      for(jarmu Jarmu:j)
 52      {
 53          if(Jarmu.rendszam == elso.rendszam)
 54              cout << Jarmu.ora << ":" << Jarmu.perc << " ";              // 6:4 6:14 6:30 6:32 6:51 6:54 7:7 7:19 7:30 7:31
 55      }
 56      cout << endl;
 57  }
 58  
 59  // ----------------------------------------------------------------------------------------------
 60  // 4. Kérje be a felhasználótól egy időpont óra és perc értékét, és adja meg, hogy hány jeladás
 61  //    történt az adott időpontban! Ha nem történt jeladás, akkor 0-t í­rjon ki!
 62  // ----------------------------------------------------------------------------------------------
 63  void F4(vector<jarmu> j)
 64  {
 65      cout << "4. feladat:" << endl;
 66      int ora, perc, jeladasok_szama = 0;
 67      cout << "Kérem, adja meg az órát: ";                        // 6
 68      cin  >> ora;
 69      cout << "Kérem, adja meg a percet: ";                       // 54
 70      cin  >> perc;
 71      for(jarmu Jarmu:j)
 72      {
 73          if(Jarmu.ora == ora && Jarmu.perc == perc) jeladasok_szama++;
 74      }
 75      cout << "A jeladások száma: " << jeladasok_szama << endl;   // 3
 76  }
 77  
 78  // ----------------------------------------------------------------------------------------------
 79  // 5. Állapí­tsa meg, hogy mennyi az adatok szerint a legnagyobb sebesség, amellyel egy jármű
 80  //    a jeladáskor haladt, illetve adja meg az összes autó rendszámát, ami haladt ilyen
 81  //    sebességgel! Amennyiben egy jármű többször is haladt a legnagyobb sebességgel, akkor a
 82  //    rendszámát többször is megjelení­theti. A rendszámokat egy sorban, szóközzel elválasztva
 83  //    jelení­tse meg a minta szerint!
 84  // ----------------------------------------------------------------------------------------------
 85  bool sebesseg(jarmu a, jarmu b)
 86  {
 87      return a.sebesseg < b.sebesseg;
 88  }
 89  
 90  void F5(vector<jarmu> j)
 91  {
 92      cout << "5. feladat:" << endl;
 93      // jarmu max_sebesseges_jarmu = *max_element(j.begin(), j.end(), sebesseg);
 94      // int max_sebesseg = max_sebesseges_jarmu.sebesseg;
 95      int max_sebesseg = 0;
 96      for(jarmu Jarmu:j)
 97      {
 98          if(Jarmu.sebesseg > max_sebesseg) max_sebesseg = Jarmu.sebesseg;
 99      }
100      cout << "A legnagyobb sebesség km/h: " << max_sebesseg << endl;             // 154
101      cout << "A járművek: ";
102      for (jarmu Jarmu:j)
103      {
104          if(Jarmu.sebesseg == max_sebesseg) cout << Jarmu.rendszam << " ";
105      }
106  }
107  
108  // ----------------------------------------------------------------------------------------------
109  // 6. Kérje be a felhasználótól egy jármű rendszámát, és jelení­tse meg a jármű jeladásainak
110  //    időpontját és az adott rendszámú autó távolságát az útszakasz kezdetétől! A bevezető
111  //    példában az első jármű esetén a 6:04-kor a jármű távolsága az útszakasz kezdetétől 0,0 km,
112  //    mí­g 6:14-kor 15,8 km, mivel a jármű az eltelt 10 perc (10/60 óra) alatt 95 km/h-val haladt.
113  //    A kimenetet a mintának megfelelően alakítsa ki, a távolságot minden esetben egy
114  //    tizedesjegyre kerekí­tve í­rja ki km mértékegységben! Ha nem szerepel a bekért rendszámmal
115  //    jármű, akkor azt egy rövid mondatban jelezze a felhasználónak!
116  // ----------------------------------------------------------------------------------------------
117  float eltelt_ido(int elozo[3], jarmu ja)
118  {
119      return (ja.ora * 60 + ja.perc) - (elozo[0] * 60 + elozo[1]);
120  }
121  
122  void F6(vector<jarmu> j)
123  {
124      cout << "6. feladat:" << endl;
125      string rendszam;
126      float ido;
127      int elozo_jeladas[3] = {0, 0, 0};
128      float tavolsag;
129      cout << "Kérem, adja meg a rendszámot: ";          // ZVJ-638
130      cin >> rendszam;
131      bool elso = true;
132      for(jarmu Jarmu:j)
133      {
134          if(Jarmu.rendszam == rendszam)
135          {
136              if(!elso)
137              {
138                  ido = eltelt_ido(elozo_jeladas, Jarmu);
139                  tavolsag += elozo_jeladas[2] * (ido / 60);                      // s = v * t (fizika)
140              }
141              else
142              {
143                  tavolsag = 0.0;
144                  elso = false;
145              }
146              elozo_jeladas[0] = Jarmu.ora;
147              elozo_jeladas[1] = Jarmu.perc;
148              elozo_jeladas[2] = Jarmu.sebesseg;
149              cout << fixed;
150              cout << Jarmu.ora << ":" << Jarmu.perc << " " << setprecision(1) << tavolsag << " km" << endl;
151          }
152      }
153      if(elso) cout << "Nincs ilyen rendszám!" << endl;
154  }
155  
156  // ----------------------------------------------------------------------------------------------
157  // 7. Készí­tsen egy ido.txt szöveges állományt, amelynek mindegyik sorában egy-egy jármű
158  // rendszáma, illetve első és utolsó jeladásának óra és perc értéke szerepeljen!
159  // Az állományban minden jármű pontosan egyszer forduljon elő tetszőleges sorrendben!
160  // ----------------------------------------------------------------------------------------------
161  void F7(vector<jarmu> j)
162  {
163      ofstream fki;
164      fki.open("ido.txt");
165      set<string> rendszamok;
166      bool elso;
167      string sor, vege;
168      for(jarmu Jarmu:j)
169      {
170          rendszamok.insert(Jarmu.rendszam);
171      }
172      for(string rendszam:rendszamok)
173      {
174          elso = true;
175          for(jarmu Jarmu:j)
176          {
177              if(Jarmu.rendszam == rendszam)
178              {
179                  if(elso)
180                  {
181                      sor = rendszam + " " + to_string(Jarmu.ora) + " " + to_string(Jarmu.perc);
182                      elso = false;
183                  }
184                  else
185                  {
186                      vege = " " + to_string(Jarmu.ora) + " " + to_string(Jarmu.perc);
187                  }
188              }
189          }
190          sor += vege;
191          fki << sor << endl;
192      }
193      fki.close();
194  }
195  
196  int main()
197  {
198  
199      setlocale(LC_ALL,"");
200  
201      vector<jarmu> jarmuvek;
202      F1(jarmuvek);
203      F2(jarmuvek);
204      F3(jarmuvek);
205      F4(jarmuvek);
206      F5(jarmuvek);
207      F6(jarmuvek);
208      F7(jarmuvek);
209  
210      return 0;
211  }