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  }