Advertisement
bazmikel

Untitled

Nov 11th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <cmath>
  5. using namespace std;
  6. // throw ..cokolwiek/jakikolwiek typ.. wyjatek z funkcji
  7. // throw -> catch
  8. // int main() try {
  9. //
  10. //
  11. //}catch (int eerr){-//-} - throw int
  12. // catch (double eerr){-//-} - throw double
  13. // catch(...){cerr << "Error"} - lapie kazdy  throw. Na koncu
  14. //
  15. //
  16. //
  17. //
  18. //
  19. //
  20. //
  21. //
  22. class polygon; // musi byc deklaracja przed punktem dla zaprzyjaznienia
  23. class punkt {
  24.     double x, y;
  25. public:
  26.     punkt() : x(0), y(0) {};
  27.     punkt(const double& x_, const double& y_) : x(x_), y(y_) {};
  28.  
  29.     double odleglosc() {
  30.         double deltaX =  x;
  31.         double deltaY =  y;
  32.         return sqrt((deltaX * deltaX) + (deltaY * deltaY));
  33.     }
  34.     friend ostream& operator << (ostream&, const punkt&);
  35.     friend class polygon; // zaprzyjazniamy class polygon
  36. };
  37.  
  38. ostream& operator << (ostream& out, const punkt& p) {
  39.     return out << p.x << p.y << endl;
  40. }
  41.  
  42. class polygon {
  43.     size_t n; // rozmiar tablicy
  44.     punkt* tp; // tablica punktow
  45.     size_t* tk; // tablica kolejnosci
  46. public:
  47.     polygon() : n(0), tp(0), tk(0) {};
  48.     polygon(const polygon& x) : n(x.n), tp(x.tp), tk(x.tk) {};
  49.     polygon& operator = (const polygon& x) {
  50.         if (this != &x) {
  51.             n = x.n;
  52.             tp = x.tp;
  53.             tk = x.tk;
  54.         }
  55.         return *this;
  56.     }
  57.     void czytaj(istream&);
  58.  
  59.     double pole() const {
  60.         double result = 0;
  61.         for (size_t i = 0; i < n; i++)
  62.             result += ((tp[i].x * tp[i + 1].y) - (tp[i + 1].x * tp[i].y));
  63.         return 0.5 * result;
  64.     }
  65.  
  66.     double obwod() const{
  67.         double res = 0;
  68.         for (size_t i = 0; i < n; i++)
  69.             res += tp[i].odleglosc();
  70.         return res + 0.14;
  71.     }
  72.     ~polygon() { delete[] tp; delete[] tk; }
  73. };
  74.  
  75.  
  76.  
  77. int main(int argc, char* argv[]) try {
  78.     if (argc != 2) throw 1; // brakuje argumentow
  79.     ifstream plik(argv[1]);
  80.     if (!plik) throw 2; // nie ma pliku
  81.     polygon ob1;
  82.  
  83.  
  84.     try {
  85.         ob1.czytaj(plik);
  86.         cout << ob1.pole() << endl;
  87.         cout << ob1.obwod() << endl;
  88.  
  89.  
  90.     //plik >> ob1; VER 02;
  91.         //cout << ob1; VER 03;
  92.     }
  93.     catch (const string & err) { cout << err << endl; } // lapamy throw z try o gory
  94.  
  95.  
  96.     cout << "main sie odpalil" << endl;
  97.     plik.close();
  98.     system("PAUSE");
  99.     return 0;
  100. }
  101.  
  102.  
  103. catch (int err) { // lapamy int throwy z maina
  104.     switch (err) {
  105.     case 1: cout << "Zla licza parametrow!" << endl; break;
  106.     case 2: cout << "Brak pliku" << endl; break;
  107.     }
  108. }
  109.  
  110. catch (...) { cerr << "Catch ..." << endl; } // lapamy kazdy throw w ostatniej kolejnosci
  111.  
  112. void polygon::czytaj(istream& input) {
  113.     string txt;
  114.     input >> txt;
  115.     if (txt != "[POLYGON]") throw string("blad w sekcji [POLYGON]");
  116.     getline(input, txt);
  117.     getline(input, txt);
  118.     if (txt != "[NUMBER OF NODES]") throw string("blad w sekcji [NUMBER OF NODES]");
  119.     int temp(0);
  120.     input >> temp;
  121.     if (temp == 0) throw string("BLAD. n = 0)");
  122.     if (temp < 0) throw string("N mniejsza od 0");
  123.     if (temp < 3) throw string("N mniejszy od 3");
  124.     n = temp;
  125.     tp = new punkt[n];
  126.     tk = new size_t[n];
  127.     input >> txt;
  128.     if (txt != "[NODES]") throw string("blad w sekcji [NODES]");
  129.  
  130.     for (size_t i = 0; i < n; i++) {
  131.         input >> tk[i];
  132.         if (tk[i] == 0) throw string("K nie moze byc rowne 0");
  133.         if (tk[i] < 0) throw string("K nie moze byc mniejsze od 0");
  134.         input >> tp[i].x;
  135.         input >> tp[i].y;
  136.     }
  137.     input >> txt;
  138.     if (txt != "[POLYGON]") throw string("blad w sekcji [POLYGON] Nr.2");
  139.  
  140.    
  141.  
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement