1 #include <iostream> // i/o parancsok: cin, cout
2 #include <fstream> // fájlkezelés
3 #include <algorithm> // rendezés (sort)
4 #include <vector> // vector adattípus
5 #include <string> // szövegek
6 #include <cmath> // matematikai függvények (négyzetgyök - sqrt)
7 #include <iomanip> // valós szám kiírásának manipulálása (törtrész pontossága - fixed, setprecision)
8
9 using namespace std;
10
11 struct krater // struktúra - x, y koordináták, sugár és kráter neve
12 {
13 float x, y, r;
14 string nev;
15 };
16
17 void F1(vector<krater> &k) // kell az & jel, hogy a vector értéke változhasson...
18 {
19 ifstream fbe;
20 fbe.open("felszin_tpont.txt");
21 krater temp;
22 char tab;
23 while(fbe >> temp.x && fbe >> temp.y && fbe >> temp.r && getline(fbe,temp.nev))
24 {
25 temp.nev = temp.nev.substr(1,temp.nev.size()); // tabulátor ne legyen a név elején
26 k.push_back(temp);
27 }
28 fbe.close();
29 }
30
31 void F2(vector<krater> k)
32 {
33 cout << "2. feladat" << endl;
34 cout << "A kráterek száma: " << k.size() << endl;
35 }
36
37 void F3(vector<krater> k)
38 {
39 cout << "3. feladat" << endl;
40 cout << "Kérem egy kráter nevét: ";
41 string kraternev;
42 getline(cin, kraternev); // getline kell, mert több szóból állóak a nevek
43 int i = 0;
44 while(i < k.size() && k[i].nev != kraternev)
45 {
46 i++;
47 }
48 if(i < k.size())
49 {
50 cout << "A(z) " << k[i].nev << " középpontja X=" << k[i].x << " Y=" << k[i].y << " sugara R=" << k[i].r << endl;
51 }
52 else cout << "Nincs ilyen nevű kráter." << endl;
53 }
54
55 bool sugarszerint(krater a, krater b)
56 {
57 return a.r > b.r; // csökkenő rendezés sugár szerint
58 }
59
60 void F4(vector<krater> k)
61 {
62 cout << "4. feladat" << endl;
63 sort(k.begin(), k.end(), sugarszerint); // itt a sort parancs...
64 cout << "A legnagyobb kráter neve és sugara: " << k[0].nev << " " << k[0].r << endl;
65 }
66
67 float tavolsag(float x1, float y1, float x2, float y2)
68 {
69 return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
70 }
71
72 void F6(vector<krater> k)
73 {
74 cout << "6. feladat" << endl;
75 cout << "Kérem egy kráter nevét: ";
76 string kraternev;
77 getline(cin, kraternev);
78 int i = 0;
79 while(i < k.size() && k[i].nev != kraternev)
80 {
81 i++;
82 }
83 if(i < k.size())
84 {
85 cout << "Nincs közös része: ";
86 for(auto kr: k)
87 {
88 if(kr.nev != kraternev)
89 if(tavolsag(k[i].x, k[i].y, kr.x, kr.y) > k[i].r + kr.r)
90 cout << kr.nev << ", ";
91 }
92 cout << endl;
93 }
94 else cout << "Nincs ilyen nevű kráter." << endl;
95 }
96
97 void F7(vector<krater> k)
98 {
99 cout << "7. feladat" << endl;
100 sort(k.begin(), k.end(), sugarszerint);
101 for(int i = 0; i < k.size()-1; i++)
102 for(int j = i + 1; j < k.size(); j++)
103 if(tavolsag(k[i].x, k[i].y, k[j].x, k[j].y) < k[i].r - k[j].r)
104 cout << "A(z) " << k[i].nev << " kráter tartalmazza a(z) " << k[j].nev << " krátert." << endl;
105 }
106
107 void F8(vector<krater> k)
108 {
109 cout << "8. feladat - terulet.txt" << endl;
110 ofstream fki;
111 fki.open("terulet.txt");
112 float pi = 3.14;
113 for(auto kr: k)
114 {
115 cout << fixed << setprecision(2) << kr.r * kr.r * pi << "\t" << kr.nev << endl; // iomanip...
116 fki << fixed << setprecision(2) << kr.r * kr.r * pi << "\t" << kr.nev << endl;
117 }
118 fki.close();
119 }
120
121 int main()
122 {
123 setlocale(LC_ALL,"");
124 vector<krater> kraterek;
125 F1(kraterek);
126 F2(kraterek);
127 F3(kraterek);
128 F4(kraterek);
129 F6(kraterek);
130 F7(kraterek);
131 F8(kraterek);
132 return 0;
133 }