|
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 }