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  }