| sebesseg202510_em_DK_C++.cpp |
|
1 #include <iostream> // cin, cout
2 #include <fstream> // fájlkezelés
3 #include <vector> // vector adattĂpus
4 #include <iomanip> // setprecision
5
6 using namespace std;
7
8 int F1(vector<pair<int, string>> &ut)
9 {
10 ifstream fbe;
11 fbe.open("ut.txt");
12 int h;
13 fbe >> h;
14 pair<int, string> p;
15 while(fbe >> p.first >> p.second)
16 {
17 ut.push_back(p);
18 }
19 fbe.close();
20 return h;
21 }
22
23 void F2(vector<pair<int, string>> ut)
24 {
25 for(auto p: ut)
26 {
27 if(p.second.size() > 3) cout << p.second << endl;
28 }
29 }
30
31 bool csakszamok(string j)
32 {
33 if (j.empty()) return false;
34
35 for(char c : j) {
36 if (!isdigit(c)) {
37 return false;
38 }
39 }
40 return true;
41 }
42
43 void F3(vector<pair<int, string>> ut)
44 {
45 float vkm;
46 cout << "Adja meg a vizsgált szakasz hosszát km-ben! ";
47 cin >> vkm;
48 float vm = vkm * 1000;
49 int min_sebesseg = 90;
50 bool varosban = false;
51 string jel;
52 int sebesseg, x;
53 for(auto szakasz: ut) // szakasz: <szám, jel> pár
54 {
55 jel = szakasz.second;
56 if(szakasz.first < vm)
57 {
58 if(csakszamok(jel)) sebesseg = stoi(jel); // stoi - string to integer
59 if(jel.size() > 3)
60 {
61 varosban = true;
62 sebesseg = 50;
63 }
64 if(jel == "]")
65 {
66 varosban = false;
67 sebesseg = 90;
68 }
69 if(jel == "#" || jel == "%")
70 {
71 sebesseg = varosban ? 50 : 90;
72 }
73
74 if(sebesseg < min_sebesseg) min_sebesseg = sebesseg;
75 }
76 }
77 cout << "Az első " << vkm << " km-en " << min_sebesseg << " km/h volt a legalacsonyabb megengedett sebesség." << endl;
78 }
79
80 void F4(vector<pair<int, string>> ut, int h)
81 {
82 string jel;
83 int varosban = 0, kezd, vege;
84 for(auto szakasz: ut) // szakasz: <szám, jel> pár
85 {
86 jel = szakasz.second;
87 if(jel.size() > 3)
88 {
89 kezd = szakasz.first;
90 }
91 if(jel == "]")
92 {
93 vege = szakasz.first;
94 varosban += (vege-kezd);
95 }
96 }
97 float arany = ((float) varosban / (float) h) * 100;
98 cout << setprecision(4) << "Az út " << arany << " százaléka vezet településen belül." << endl;
99 }
100
101 void F5(vector<pair<int, string>> ut, string varos)
102 {
103 string jel;
104 int db = 0, varoshossz = 0, kezd, vege;
105 bool varosban = false;
106 for(auto szakasz: ut) // szakasz: <szám, jel> pár
107 {
108 jel = szakasz.second;
109 if(jel == varos)
110 {
111 kezd = szakasz.first;
112 varosban = true;
113 }
114 if(csakszamok(jel) and varosban) db++;
115 if(jel == "]" and varosban)
116 {
117 vege = szakasz.first;
118 break;
119 }
120 }
121 cout << "A sebességkorlátozó táblák száma: " << db << endl;
122 cout << "Az út hossza a településen belül " << vege - kezd << " méter." << endl;
123 }
124
125 void F6(vector<pair<int, string>> ut, string varos)
126 {
127 struct info
128 {
129 string v; // város neve
130 int ke, ve; // kezdete és vége
131 };
132 vector<info> varosok;
133 string legkozelebb;
134 info temp;
135 string jel;
136 int tav;
137 for(auto szakasz: ut)
138 {
139 jel = szakasz.second;
140 tav = szakasz.first;
141 if(jel.size() > 3)
142 {
143 temp.v = jel;
144 temp.ke = tav;
145 }
146 if(jel == "]")
147 {
148 temp.ve = tav;
149 varosok.push_back(temp);
150 }
151 }
152 int index;
153 for(int i = 0; i < varosok.size(); i++)
154 {
155 if(varosok[i].v == varos)
156 {
157 index = i;
158 break;
159 }
160 }
161 if(index == 0)
162 {
163 // első várost adtuk meg
164 legkozelebb = varosok[index + 1].v;
165 }
166 else if(index == (varosok.size() - 1))
167 {
168 // utolsó várost adtuk meg
169 legkozelebb = varosok[index - 1].v;
170 }
171 else
172 {
173 // "belső" várost adtunk meg
174 int elozo = (varosok[index].ke - varosok[index - 1].ve);
175 int kovetkezo = (varosok[index + 1].ke - varosok[index].ve);
176 legkozelebb = (elozo <= kovetkezo) ? varosok[index - 1].v : varosok[index + 1].v;
177
178
179 }
180 cout << "A legközelebbi település: " << legkozelebb << endl;
181 }
182
183 int main()
184 {
185 setlocale(LC_ALL, "");
186 vector<pair<int, string>> ut;
187 string varos;
188 int uthossz = F1(ut);
189 cout << "2. feladat" << endl;
190 F2(ut);
191 cout << "3. feladat" << endl;
192 F3(ut);
193 cout << "4. feladat" << endl;
194 F4(ut, uthossz);
195 cout << "5. feladat" << endl;
196 cout << "Adja meg egy település nevét! ";
197 cin >> varos;
198 F5(ut, varos);
199 cout << "6. feladat" << endl;
200 F6(ut, varos);
201 return 0;
202 }