Advertisement
istomina_sofia

наследование(класс треугольник)

Jun 25th, 2021
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.20 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class point   //класс точка для записи координат
  6. {
  7. public:
  8.     float x, y;
  9.     point(float x = 0, float y = 0)
  10.     {
  11.         this->x = x;
  12.         this->y = y;
  13.     }
  14. };
  15.  
  16. class quadr    //класс четырехугольник
  17. {
  18. public:
  19.     point A;
  20.     point B;
  21.     point C;
  22.     point D;
  23.     float sr;
  24.     quadr() {};
  25.     quadr(point A, point B, point C, point D); //конструктор с параметрами
  26.     float storona(point X, point Y);    //метод для вычисления сторон четырехугольника
  27.     bool proverka(point X, point Y, point Z);    //метод для проверки существования четырехугольника
  28.     float S(); //метод для вычисления площади четырехугольника
  29.     float inf(); //метод для выведение информиции о четырехугольнике
  30. };
  31.  
  32. quadr::quadr(point A, point B, point C, point D)  //конструктор с параметрами
  33. {
  34.     this->A = A;
  35.     this->B = B;
  36.     this->C = C;
  37.     this->D = D;
  38. }
  39.  
  40. float quadr::storona(point X, point Y)   //метод для вычисления сторон четырехугольника
  41. {
  42.     float st = sqrt(pow(Y.x - X.x, 2) + pow(Y.y - X.y, 2));
  43.     return st;
  44. }
  45.  
  46. bool quadr::proverka(point X, point Y, point Z)   //метод для проверки существования четырехугольника
  47. {
  48.     float nenaprX = ((Z.x - X.x) / (Y.x - X.x));   //четырехугольник существует, если три любые точки не лежат на одной прямой
  49.     float nenaprY = ((Z.y - X.y) / (Y.y - X.y));
  50.    
  51.     float AB = storona(A, B);  
  52.     float BC = storona(B, C);
  53.     float CD = storona(C, D);
  54.     float AD = storona(A, D);
  55.    
  56.     float arr[4] = { AB, BC, CD, AD };    
  57.     float max = arr[0];
  58.     for (int i = 1; i < 4; i++)
  59.     {
  60.         if (arr[i] > max) max = arr[i];
  61.     }
  62.     float sum = AB + BC + CD + AD - max;  //четырехугольник существует, если длина одной из его сторон меньше, чем сумма длин трех остальных сторон
  63.  
  64.     if (sum > max && nenaprX != nenaprY)
  65.     {
  66.         return true;
  67.     }
  68.     else return false;
  69. }
  70.  
  71. float quadr::inf()
  72. {
  73.     if (proverka(A, B, C))
  74.     {
  75.         cout << "Четырехугольник существует" << endl;
  76.         float AB = storona(A, B);  //стороны четырехугольника
  77.         float BC = storona(B, C);
  78.         float CD = storona(C, D);
  79.         float AD = storona(A, D);
  80.         cout << "Стороны четырехугольника:" << endl;
  81.         cout << "AB = " << AB << "\nBC = " << BC << "\nCD = " << CD << "\nAD = " << AD << endl;
  82.  
  83.         float AC = storona(A, C);   //диагонали четырехугольника
  84.         float BD = storona(B, D);
  85.         cout << "Диагонали четырехугольника:" << endl;
  86.         cout << "AC = " << AC << "\nBD = " << BD << endl;
  87.  
  88.         float perimetr = AB + BC + CD + AD;   //периметр четырехугольника
  89.         cout << "Периметр четырехугольника:\nP = " << perimetr << endl;
  90.     }
  91.     else cout << "Четырехугольник не существует" << endl;
  92.     return 0;
  93. }
  94.  
  95. float quadr::S()
  96. {
  97.     if (proverka(A, B, C))
  98.     {
  99.         float AB = storona(A, B);
  100.         float BC = storona(B, C);
  101.         float CD = storona(C, D);
  102.         float AD = storona(A, D);
  103.         float perimetr = AB + BC + CD + AD;
  104.         float p = perimetr / 2;  //площадь четырехугольника(примерно)
  105.         float s = sqrt((p - AB) * (p - BC) * (p - CD) * (p - AD));
  106.         cout << "Площадь четырехугольника (примерно)\nS = " << s << endl;
  107.         return s;
  108.     }
  109.     else return 0;
  110. }
  111.  
  112. class parallelogram :public quadr
  113. {
  114. public:
  115.     parallelogram(point A, point B, point C, point D);
  116.     bool proverka();
  117.     float sq(point A, point B, point C, point D);
  118. };
  119.  
  120. parallelogram::parallelogram(point A, point B, point C, point D)
  121. {
  122.     this->A = A;
  123.     this->B = B;
  124.     this->C = C;
  125.     this->D = D;
  126. }
  127.  
  128. bool parallelogram::proverka()
  129. {
  130.     float AB = storona(A, B);  //стороны параллелограмма
  131.     float BC = storona(B, C);
  132.     float CD = storona(C, D);
  133.     float AD = storona(A, D);
  134.  
  135.     if (AB == CD && BC == AD)
  136.     {
  137.         return true;
  138.     }
  139.     else return false;
  140. }
  141.  
  142. float parallelogram::sq(point X, point Y, point Z, point Q)
  143. {
  144.     if (proverka())
  145.     {
  146.         cout << "Фигура - параллелограмм" << endl;
  147.         float ss, a, h;
  148.         a = Y.y - X.y;
  149.         h = Q.x - X.x;
  150.         ss = a * h;
  151.         cout << "Площадь параллелограмма\nS = " << ss << endl;
  152.         return ss;
  153.     }
  154.     else  cout << "Фигура - не параллелограмм" << endl;
  155.     return 0;
  156. }
  157.  
  158. int main()
  159. {
  160.     setlocale(0, "RUS");
  161.  
  162.     const int k = 2;
  163.     cout << "Количество четырехугольников - "<< k << endl;
  164.  
  165.     cout << "1" << endl;
  166.     point A1(1, 4), B1(5, 9), C1(9, 6), D1(6, 1);
  167.     quadr ABCD1(A1, B1, C1, D1);
  168.     ABCD1.proverka(A1, B1, C1);
  169.     ABCD1.inf();
  170.     float s1 = ABCD1.S();
  171.     cout << endl;
  172.  
  173.     cout << "2" << endl;
  174.     point A2(1, 5), B2(6, 10), C2(9, 1), D2(5, 5);
  175.     quadr ABCD2(A2, B2, C2, D2);
  176.     ABCD2.proverka(A2, B2, C2);
  177.     ABCD2.inf();
  178.     float s2 = ABCD2.S();
  179.     cout << endl;
  180.  
  181.     cout << "Средняя площадь четырехугольников равна " << (s1 + s2) / k << endl;
  182.  
  183.     const int p = 3;
  184.     cout << "\nКоличество параллелограммов - " << p << endl;
  185.  
  186.     cout << "1" << endl;
  187.     point a1(1, 2), b1(3, 5), c1(8, 5), d1(6, 2);
  188.     parallelogram abcd1(a1, b1, c1, d1);
  189.     abcd1.proverka();
  190.     float ss1 = abcd1.sq(a1, b1, c1, d1);
  191.  
  192.     cout << "2" << endl;
  193.     point a2(2, 4), b2(2, 10), c2(9, 6), d2(9, 0);
  194.     parallelogram abcd2(a2, b2, c2, d2);
  195.     abcd2.proverka();
  196.     float ss2 = abcd2.sq(a2, b2, c2, d2);
  197.  
  198.     cout << "3" << endl;
  199.     point a3(1, 6), b3(3, 8), c3(5, 3), d3(3, 1);
  200.     parallelogram abcd3(a3, b3, c3, d3);
  201.     abcd3.proverka();
  202.     float ss3 = abcd3.sq(a3, b3, c3, d3);
  203.  
  204.     if (ss1 > ss2 && ss1 > ss3)
  205.     {
  206.         cout << "Параллелограмм 1 наибольшей площади" << endl;
  207.     }
  208.     else if (ss2 > ss1 && ss2 > ss3)
  209.     {
  210.         cout << "Параллелограмм 2 наибольшей площади" << endl;
  211.     }
  212.     else cout << "Параллелограмм 3 наибольшей площади" << endl;
  213.  
  214.     cout << endl;
  215.  
  216.     if (ss1 < ss2 && ss1 < ss3)
  217.     {
  218.         cout << "Параллелограмм 1 наименьшей площади" << endl;
  219.     }
  220.     else if (ss2 < ss1 && ss2 < ss3)
  221.     {
  222.         cout << "Параллелограмм 2 наименьшей площади" << endl;
  223.     }
  224.     else cout << "Параллелограмм 3 наименьшей площади" << endl;
  225.     return 0;
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement