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