jelado202210_C++.cpp
  1  #include <iostream>         // cout, cin
  2  #include <fstream>          // fájlkezelés
  3  #include <vector>           // vector adattípushoz
  4  #include <algorithm>        // max, max_element, min_element
  5  #include <cmath>            // sqrt, pow
  6  
  7  using namespace std;
  8  
  9  class ido                   // struktúra helyett most ez... ilyen is legyen
 10  {
 11  public:
 12      int o,p,m;
 13      int x,y;
 14  };
 15  
 16  void F1(vector<ido> &j)
 17  {
 18      ifstream fbe;
 19      fbe.open("jel.txt");
 20  
 21      ido temp;
 22      while(fbe>>temp.o && fbe>>temp.p && fbe>>temp.m && fbe>>temp.x && fbe>>temp.y)
 23      {
 24          // cout << temp.o << " " << temp.p << " " << temp.m << " " << temp.x << " " << temp.y << endl;
 25          j.push_back(temp);
 26      }
 27      fbe.close();
 28  }
 29  
 30  void F2(vector<ido> j)
 31  {
 32      cout << "2. feladat" << endl;
 33      cout << "Adja meg a jel sorszámát! ";
 34      int i;
 35      cin >> i;
 36      printf("x=%d y=%d\n",j[i-1].x,j[i-1].y);
 37  }
 38  
 39  int eltelt(int o1,int p1,int m1,int o2,int p2,int m2)
 40  {
 41      int mp2=o2*3600+p2*60+m2;
 42      int mp1=o1*3600+p1*60+m1;
 43      return mp2-mp1;
 44  }
 45  
 46  string ora_perc_mp(int mp)
 47  {
 48      int o=mp/3600;
 49      int p=mp%3600/60;
 50      int m=mp%3600%60;
 51      return to_string(o)+":"+to_string(p)+":"+to_string(m);
 52  }
 53  
 54  void F4(vector<ido> j)
 55  {
 56      cout << endl << "4. feladat" << endl;
 57  
 58      ido first, last;
 59      first=j.front();
 60      last=j.back();
 61      int eltelt_mp=eltelt(first.o,first.p,first.m,last.o,last.p,last.m);
 62      cout << "Időtartam: " << ora_perc_mp(eltelt_mp) << endl;
 63  }
 64  
 65  void F5(vector<ido> j)
 66  {
 67      cout << endl << "5. feladat" << endl;
 68  
 69      vector<int> x_koord,y_koord;
 70      for(auto elem:j)
 71      {
 72          x_koord.push_back(elem.x);
 73          y_koord.push_back(elem.y);
 74      }
 75  
 76      int min_x=*min_element(x_koord.begin(),x_koord.end());
 77      int min_y=*min_element(y_koord.begin(),y_koord.end());
 78      int max_x=*max_element(x_koord.begin(),x_koord.end());
 79      int max_y=*max_element(y_koord.begin(),y_koord.end());
 80  
 81      printf("Bal alsó: %d %d, jobb felső: %d %d\n",min_x,min_y,max_x,max_y);
 82  }
 83  
 84  void F6(vector<ido> j)
 85  {
 86      cout << endl << "6. feladat" << endl;
 87  
 88      float summa=0.0;
 89      for(int i=0;i<j.size()-1;i++)
 90      {
 91          summa+=sqrt(pow(j[i].x-j[i+1].x,2.0)+pow(j[i].y-j[i+1].y,2.0));
 92      }
 93      printf("Elmozdulás: %.3f egység\n", summa);
 94  }
 95  
 96  void F7(vector<ido> j)
 97  {
 98      // Elég hosszú, meg bonyolult, meg sok változó van,
 99      // de így talán követhetőbb a logika!?
100      // Később ez egyszerűsíthető!
101      int ot_perc=300;
102      ofstream fki;
103      fki.open("kimaradt.txt");
104      for(int i=0;i<j.size()-1;i++)
105      {
106          int elmozdulas_x,elmozdulas_y;
107          int elter=0,mennyiseg;          // koordináták eltérést mutatnak-e, eltérések végső mennyisége
108          int elter_x=0, elter_y=0;
109          int idoelteres=0;               // időbeli eltérés van-e
110          bool van=false;                 // lesz-e a normálisnál nagyobb eltérés
111          string ok;                      // eltérés oka
112          ido j1,j2;
113          j1=j[i];        // aktuális jel adatai
114          j2=j[i+1];      // következő jel adatai
115          // eltelt idő meghatározása:
116          int eltelt_ido=eltelt(j1.o,j1.p,j1.m,j2.o,j2.p,j2.m);
117          if(eltelt_ido>ot_perc)
118          {
119              van=true;
120              idoelteres=(eltelt_ido-ot_perc)/ot_perc;
121              if(eltelt_ido%ot_perc>0) idoelteres++;
122          }
123          // elmozdulások vizsgálata:
124          elmozdulas_x=abs(j2.x-j1.x);       // abszolútérték, mert
125          elmozdulas_y=abs(j2.y-j1.y);       // bármerre lehet elmozdulás
126          if(elmozdulas_x>10)
127          {
128              van=true;
129              elter_x=(elmozdulas_x-10)/10;
130              if(elmozdulas_x%10>0) elter_x++;
131          }
132          if(elmozdulas_y>10)
133          {
134              van=true;
135              elter_y=(elmozdulas_y-10)/10;
136              if(elmozdulas_y%10>0) elter_y+=1;
137          }
138          // végül is van a normálistól eltérő kimaradás:
139          if(van)
140          {
141              elter=max(elter_x,elter_y);
142              mennyiseg=max(idoelteres,elter);
143              idoelteres>=elter ? ok="időeltérés":ok="koordináta-eltérés";
144              fki << j2.o << " " << j2.p << " " << j2.m << " " << ok << " " << mennyiseg << endl;
145          }
146      }
147      fki.close();
148  }
149  
150  int main()
151  {
152      setlocale(LC_ALL,"");
153  
154      ido jel;
155      vector<ido> jelek;
156  
157      F1(jelek);
158      F2(jelek);
159      F4(jelek);
160      F5(jelek);
161      F6(jelek);
162      F7(jelek);
163  }