Advertisement
Guest User

Poligoni 777

a guest
Apr 26th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5. class Punto
  6. {
  7.     private:
  8.         double _x;
  9.         double _y;
  10.     public:
  11.         Punto();
  12.         Punto(double x, double y);
  13.         Punto(const Punto& p);
  14.         ~Punto();
  15.         Punto operator+(const Punto& p);
  16.         Punto operator-(const Punto& p);
  17.         Punto operator*(double x);
  18.         Punto& operator=(const Punto& p);
  19.         double distanza(const Punto& p);
  20.         friend ostream& operator<<(ostream &os, const Punto& p);
  21.         friend istream& operator>>(istream &is, Punto& p);
  22. };
  23.  
  24. Punto::Punto()
  25. {
  26.     _x = 0.0;
  27.     _y = 0.0;
  28. }
  29.  
  30. Punto::Punto(double x, double y)
  31. {
  32.     _x = x;
  33.     _y = y;
  34. }
  35.  
  36. Punto::Punto(const Punto& p)
  37. {
  38.     _x = p._x;
  39.     _y = p._y;
  40. }
  41.  
  42. Punto::~Punto(){}
  43.  
  44. Punto Punto::operator+(const Punto& p)
  45. {
  46.     Punto q(_x + p._x, _y + p._y);
  47.     return q;
  48. }
  49.  
  50. Punto Punto::operator-(const Punto& p)
  51. {
  52.     Punto q(_x - p._x, _y - p._y);
  53.     return q;
  54. }
  55.  
  56. Punto Punto::operator*(double x)
  57. {
  58.     Punto q(_x * x, _y * x);
  59.     return q;
  60. }
  61.  
  62. Punto& Punto::operator=(const Punto& p)
  63. {
  64.     if (this != &p)
  65.     {
  66.         _x = p._x;
  67.         _y = p._y;
  68.     }
  69.     return *this;
  70. }
  71.  
  72. double Punto::distanza(const Punto& p)
  73. {
  74.     double dx = (_x - p._x);
  75.     double dy = (_y - p._y);
  76.     return sqrt(dx * dx + dy * dy);
  77. }
  78.  
  79. ostream& operator <<(ostream& os, const Punto& p)
  80. {
  81.     os<<'('<<p._x<<','<<p._y<<')';
  82.     return os;
  83. }
  84.  
  85. istream& operator >>(istream& is, Punto&p)
  86. {
  87.     is>>p._x>>p._y;
  88. }
  89.  
  90. class Poligono
  91. {
  92.     private:
  93.         Punto* _array;
  94.         int _vertici;
  95.     public:
  96.         Poligono();
  97.         Poligono(int n);
  98.         ~Poligono();
  99.         Poligono operator*(double x);
  100.         Poligono& operator=(const Poligono& p);
  101.         Punto& operator[](int i);
  102.         friend ostream& operator<<(ostream &os, const Poligono& p);
  103.         friend istream& operator>>(istream &is, Poligono& p);
  104. };
  105.  
  106. Poligono::Poligono()
  107. {
  108.     _array = NULL;
  109.     _vertici = 0;
  110. }
  111.  
  112. Poligono::Poligono(int n)
  113. {
  114.    
  115.     _array = new Punto[n];
  116.     _vertici = n;
  117. }
  118.  
  119. Poligono::~Poligono()
  120. {
  121.     if (_array != NULL)
  122.         delete[] _array;
  123. }
  124.  
  125. Poligono Poligono::operator*(double x)
  126. {
  127.     Poligono q(_vertici);
  128.     for (int i = 0; i < _vertici; i++)
  129.         q._array[i] = _array[i] * x;
  130.     return q;
  131. }
  132.  
  133. Poligono& Poligono::operator=(const Poligono& p)
  134. {
  135.     if (this != &p)
  136.     {
  137.         if (_vertici != p._vertici)
  138.         {
  139.             delete[] _array;
  140.             _array = new Punto[p._vertici];
  141.             _vertici = p._vertici;
  142.         }
  143.         for (int i = 0; i < _vertici; i++)
  144.             _array[i] = p._array[i];
  145.     }
  146.     return *this;
  147. }
  148.  
  149. Punto& Poligono::operator[](int i)
  150. {
  151.     if (i>=0 && i<_vertici)
  152.     {
  153.         cout << i <<endl;
  154.         return _array[i];
  155.     }
  156. }
  157.  
  158. ostream& operator<<(ostream &os, const Poligono& p)
  159. {
  160.     for (int i = 0; i < p._vertici; i++)
  161.     {
  162.         cout<<p._array[i]<<endl;
  163.     }
  164. }
  165.  
  166. istream& operator>>(istream &is, Poligono& p)
  167. {
  168.     for (int i = 0; i < p._vertici; i++)
  169.     {
  170.         cin>>p._array[i];
  171.     }
  172. }
  173.  
  174. int main()
  175. {
  176.     cout<<"Inserire numero vertici: ";
  177.     int n;
  178.     cin >> n;
  179.     Poligono P(n);
  180.     cin >> P;
  181.     double perimetro = 0;
  182.     for (int i = 1; i < n; i++)
  183.     {
  184.         perimetro += P[i].distanza(P[i-1]);
  185.     }
  186.     perimetro += P[0].distanza(P[n-1]);
  187.     cout<<"Il perimetro รจ: "<<perimetro<<endl;
  188.     cout << P;
  189.     return 0;
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement