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