Advertisement
Guest User

STGUYAVSESMOGU

a guest
Sep 19th, 2014
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. using namespace std;
  7.  
  8. class Point {
  9.     public:
  10.    
  11.         //Объявление статического объекта
  12.         static int pcount;
  13.         // Конструктор
  14.         Point(double _x = 0, double _y = 0) : x(_x), y(_y)
  15.         {
  16.             pcount++;
  17.             cout << "Constr_Point " << pcount << endl;
  18.         }
  19.         //Деструктор
  20.         ~Point()
  21.         {
  22.             cout << "Destr_Point " << pcount << endl;
  23.             pcount--;
  24.         }
  25.         // Другие методы
  26.         void Show() const;
  27. /*добавить операции-функции «+=», которая позволит нам впоследствии реализовать метод
  28. перемещения MoveO в классе Triangle:*/
  29.         void operator +=(Point&);
  30.     public:
  31.         double x, y;
  32. };
  33.  
  34. class Triangle {
  35.     public:
  36.         Triangle(Point, Point, Point, const char*);// конструктор
  37.         Triangle(const char*);// конструктор пустого (нулевого) треугольника
  38.         ~Triangle();// деструктор
  39.         Point Get_vl() const { return v1; }// Получить значение vl
  40.         Point Get_v2() const { return v2; }// Получить значение v2
  41.         Point Get_v3() const { return v3; }// Получить значение v3
  42.         char* GetName() const {  return name; }// Получить имя объекта
  43.         void Show() const;// Показать объект
  44.         void ShowSideAndArea() const;// Показать стороны и площадь объекта
  45.         void Move(Point);
  46.         bool operator >(const Triangle&) const;
  47.     public:
  48.         static int count;// количество созданных объектов
  49.     private:
  50.         char* objID;    // идентификатор объекта
  51.         char* name;     // наименование треугольника
  52.         Point v1, v2, v3;// вершины
  53.         double a;       // сторона, соединяющая vl и v2
  54.         double b;       // сторона, соединяющая v2 и v3
  55.         double c;       // сторона, соединяющая vl и v3
  56. };
  57.  
  58. int Point:: pcount = 0;
  59.  
  60. void Point::Show() const
  61. {
  62.     cout << " ("  << x <<" , " << y << ")";
  63. }
  64. void Point::operator +=(Point& p)
  65. {
  66.     x += p.x;
  67.     y += p.y;
  68. }
  69.  
  70. int Triangle::count = 0;// количество созданных объектов
  71.  
  72. // Конструктор
  73. Triangle::Triangle(Point _v1, Point _v2, Point _v3, const char* ident)
  74. : v1(_v1), v2(_v2), v3(_v3)
  75. {
  76.     char buf[16];
  77.     objID = new char[strlen(ident) + 1];
  78.     strcpy(objID, ident);
  79.     count++;
  80.     sprintf(buf, "triangle %d", count);
  81.     name = new char[strlen(buf) + 1 ] ;
  82.     strcpy(name, buf);
  83.  
  84.     a = sqrt((v1.x - v2.x) * (v1.x - v2.x) + (v1.y - v2.y) * (v1.y - v2.y));
  85.     b = sqrt((v2.x - v3.x) * (v2.x - v3.x) + (v2.y - v3.y) * (v2.y - v3.y));
  86.     c = sqrt((v1.x - v3.x) * (v1.x - v3.x) + (v1.y - v3.y) * (v1.y - v3.y));
  87.     // отладочный вывод
  88.     cout << "Constructor_l for: " << objID << " (" << name << ") " << endl;
  89. }
  90.  
  91. // Конструктор пустого (нулевого) треугольника
  92. Triangle::Triangle(const char* ident)
  93. {
  94.     char buf[16];
  95.     objID = new char[strlen(ident) + 1];
  96.     strcpy(objID, ident);
  97.     count++;
  98.     sprintf(buf, "triangle %d", count);
  99.     name = new char[strlen(buf) + 1 ] ;
  100.     strcpy(name, buf);
  101.     a = b = c = 0;
  102.     // отладочный вывод
  103.     cout << "Constructor_2 for: " << objID << " (" << name << ") " << endl;
  104. }
  105. // Деструктор
  106. Triangle::~Triangle()
  107. {
  108.     cout << "Destructor for: " << objID << endl;
  109.     delete [] objID;
  110.     delete [] name;
  111. }
  112. // Показать объект
  113. void Triangle::Show() const
  114. {
  115.     cout << name << ":";
  116.     v1.Show();  v2.Show();  v3.Show();
  117.     cout << endl;
  118. }
  119. // Показать стороны и площадь объекта
  120. void Triangle::ShowSideAndArea() const
  121. {
  122.     double p = (a + b + c)/2;
  123.     double s = sqrt(p*(p-a)*(p-b)*(p-c));
  124.     cout << "----------------------" << endl;
  125.     cout << name << ":";
  126.     cout.precision(4);
  127.     cout << " a= " << a;
  128.     cout << ", b= " << b;
  129.     cout << ", c= " << c;
  130.     cout << ";\ts= " << s << endl;
  131. }
  132.  
  133. // Переместить объект на величину (dp.x. dp.у)
  134. void Triangle::Move(Point dp)
  135. {
  136.     v1 += dp;
  137.     v2 += dp;
  138.     v3 += dp;
  139. }
  140.  
  141. // Сравнить объект (по площади) с объектом t r ia
  142. bool Triangle::operator>(const Triangle& tria ) const
  143. {
  144.     double p = (a + b + c) / 2;
  145.     double s = sqrt(p * (p - a) * (p - b) * (p - c));
  146.     double p1 = (tria.a + tria.b + tria.c ) / 2;
  147.     double s1 = sqrt(p1 * (p1 - tria.a) * (p1 - tria.b) * (p1 - tria.c));
  148.     if (s > s1)
  149.         return true;
  150.     ///else
  151.     return false;
  152. }
  153. ///////////////////////////////////////////////////////////
  154.  
  155.  
  156. int main()
  157. {
  158. // Определения точек
  159.     Point p1(0, 0); Point p2(0.5, 1);
  160.     Point p3(1, 0);
  161.  
  162.     // Определения треугольников
  163.     Triangle tr_A(p1, p2, p3, "tr1aA");
  164.     {
  165.         Point bb;
  166.     }
  167.     return 0;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement