metjelentes202005C++.cpp


  1  #include <iostream>     // cin és cout parancsok
  2  #include <fstream>      // fájlkezelés
  3  #include <vector>       // vector adattípushoz
  4  #include <algorithm>    // vector reverse függvényhez
  5  #include <string>       // string substr függvényhez
  6  #include <set>          // set (halmaz) adattípushoz
  7  #include <cmath>        // round (kerekítés)
  8  
  9  using namespace std;
 10  
 11  struct jelentes
 12  {
 13      string telepules,ido,szel;
 14      int homerseklet;
 15  };
 16  
 17  set<string> telepulesek;    // 5. és 6. feladathoz
 18  
 19  void F1(vector<jelentes> &j)
 20  {
 21      ifstream fbe;
 22      fbe.open("tavirathu13.txt");
 23      jelentes temp;
 24      while(fbe>>temp.telepules&&fbe>>temp.ido&&fbe>>temp.szel&&fbe>>temp.homerseklet)
 25      {
 26          j.push_back(temp);
 27      }
 28      fbe.close();
 29  }
 30  
 31  void F2(vector<jelentes> j)
 32  {
 33      cout << "2. feladat" << endl;
 34      string t;       // település kódja
 35      cout << "Adja meg egy település kódját! Település: ";
 36      cin >> t;
 37      bool van=false;
 38      reverse(j.begin(),j.end());
 39      for(auto elem:j)
 40      {
 41          if(elem.telepules==t)
 42          {
 43              cout << "Az utolsó mérési adat a megadott településről " << elem.ido.substr(0,2) << ":" << elem.ido.substr(2,2) << "-kor érkezett." << endl;
 44              van=true;
 45              break;
 46          }
 47      }
 48      if(van==false) cout << "Ilyen település nincs..." << endl;
 49      reverse(j.begin(),j.end());     // eredeti sorrend visszaállítása
 50  }
 51  
 52  bool homerseklet_szerint(jelentes a, jelentes b)
 53  {
 54      return a.homerseklet < b. homerseklet;
 55  }
 56  
 57  void F3(vector<jelentes> j)
 58  {
 59      cout << "3. feladat" << endl;
 60      vector<jelentes> temp=j;
 61      sort(temp.begin(),temp.end(),homerseklet_szerint);
 62      jelentes mini=temp[0];
 63      jelentes maxi=temp[temp.size()-1];
 64      cout << "A legalacsonyabb hőmérséklet: " << mini.telepules << " " << mini.ido.substr(0,2) << ":" << mini.ido.substr(2,2) << " ";
 65      cout << mini.homerseklet << " fok." << endl;
 66      cout << "A legmagasabb hőmérséklet...: " << maxi.telepules << " " << maxi.ido.substr(0,2) << ":" << maxi.ido.substr(2,2) << " ";
 67      cout << maxi.homerseklet << " fok." << endl;
 68  }
 69  
 70  void F4(vector<jelentes> j)
 71  {
 72      cout << "4. feladat" << endl;
 73      bool van=false;
 74      for (auto elem:j)
 75      {
 76          if(elem.szel=="00000")
 77          {
 78              if(van==false) van=true;
 79              cout << elem.telepules << " " << elem.ido.substr(0,2) << ":" << elem.ido.substr(2,2) << endl;
 80          }
 81      }
 82      if(van==false)
 83      {
 84          cout << "Nem volt szélcsend a mérések idején." << endl;
 85      }
 86  }
 87  
 88  // 1., 7., 13., 19 órák számítanak
 89  void F5(vector<jelentes> j)
 90  {
 91      cout << "5. feladat" << endl;
 92      set<string> orak={"01","07","13","19"};
 93      set<string> kontroll;
 94      int maxi, mini;
 95      // telepulesek globálisan definiált halmaz (lsd. program elején)
 96      for(auto elem:j)
 97      {
 98          telepulesek.insert(elem.telepules);
 99      }
100      int kh,db;
101      bool hiany=false;
102      // települések halmaza alapján végignézzük az összes települést
103      for(auto t:telepulesek)
104      {
105          kh=0;
106          db=0;
107          maxi=0;
108          mini=100;
109          // a teljes táviratot (jelentést) végignézzük,...
110          for(auto elem:j)
111          {
112              // ...és ha a mi településünk jön
113              if(elem.telepules==t)
114              {
115                  // hőmérséklet-ingadozást minden adatra számolunk, de...
116                  if(elem.homerseklet>maxi) maxi=elem.homerseklet;
117                  if(elem.homerseklet<mini) mini=elem.homerseklet;
118                  //... középhőmérsékletet csak a megadott órákra
119                  if(orak.count(elem.ido.substr(0,2)))
120                  {
121                      kh+=elem.homerseklet;
122                      db++;
123                      kontroll.insert(elem.ido.substr(0,2));
124                  }
125              }
126          }
127          if(kontroll.size()!=4) cout << t << " NA; ";
128          else cout << t << " Középhőmérséklet: " << round((float)kh/(float)db) << "; ";
129          cout << "Hőmérséklet-ingadozás: " << (maxi-mini) << endl;
130          kontroll.clear();
131      }
132  }
133  
134  void F6(vector<jelentes> j)
135  {
136      cout << "6. feladat" << endl;
137      ofstream fki;
138      for(auto t:telepulesek)
139      {
140          fki.open(t+".txt");
141          fki << t << endl;
142          for(auto elem:j)
143          {
144              if(elem.telepules==t)
145              {
146                  fki << elem.ido.substr(0,2) << ":" << elem.ido.substr(2,2) << " ";
147                  for(int i=0;i<atoi(elem.szel.substr(3,5).c_str());i++)
148                  {
149                      fki << "#";
150                  }
151                  fki << endl;
152              }
153          }
154          fki.close();
155      }
156      cout << "Fájlok kész!" << endl;
157  }
158  
159  int main()
160  {
161      setlocale(LC_ALL,"");
162      vector<jelentes> jelentesek;
163      F1(jelentesek);
164      F2(jelentesek);
165      F3(jelentesek);
166      F4(jelentesek);
167      F5(jelentesek);
168      F6(jelentesek);
169      return 0;
170  }