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 }