Advertisement
NyanCoder

Lab 5.1

Jun 4th, 2018
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.15 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. namespace helper
  5. {
  6.     // Точка
  7.     struct point
  8.     {
  9.         float x, y;
  10.         point() : x(0), y(0) {}
  11.         point(float x, float y) : x(x), y(y) {}
  12.     };
  13.  
  14.     // Absolute (модуль числа)
  15.     template <typename T>
  16.     inline T abs(T const val)
  17.     {
  18.         return val < 0 ? -val : val;
  19.     }
  20.     // Compare (сравнение чисел с плавающей точкой)
  21.     bool cmp(float const a, float const b)
  22.     {
  23.         return abs(a - b) < 0.000001;
  24.     }
  25.     // Length (вычисление расстояния между точками)
  26.     float len(point const &p1, point const &p2)
  27.     {
  28.         float x = p1.x - p2.x,
  29.             y = p1.y - p2.y;
  30.         return sqrt(x*x + y*y);
  31.     }
  32. }
  33.  
  34. int main()
  35. {
  36.     int M;
  37.     std::cin >> M;
  38.     // Проврка на корректность данных
  39.     if ((M % 2) || (M < 8))
  40.     {
  41.         std::cerr << "Неправильное число чисел";
  42.         return -1;
  43.     }
  44.     M /= 2;
  45.  
  46.     helper::point *p = new helper::point[M];
  47.     // Чтение точек
  48.     for (int i = 0; i < M; i++)
  49.         std::cin >> p[i].x >> p[i].y;
  50.    
  51.     // Перебор
  52.     for (int p1 = 0; p1 < M - 3; p1++)
  53.         for (int p2 = p1 + 1; p2 < M - 2; p2++)
  54.             for (int p3 = p2 + 1; p3 < M - 1; p3++)
  55.                 for (int p4 = p3 + 1; p4 < M; p4++)
  56.                 {
  57.                     float /*Стороны*/ a1 = helper::len(p[p1], p[p2]), a2 = helper::len(p[p2], p[p3]), a3 = helper::len(p[p3], p[p4]), a4 = helper::len(p[p4], p[p1]),
  58.                         /*Диагонали*/ diag1 = helper::len(p[p1], p[p3]), diag2 = helper::len(p[p2], p[p4]);
  59.                     if (
  60.                         helper::cmp(a1, a2) && helper::cmp(a2, a3) && helper::cmp(a3, a4) && helper::cmp(a4, a1) && /* Сравнение сторон */
  61.                         helper::cmp(diag1, diag2) /* и диагоналей */
  62.                     )
  63.                         // Вывод
  64.                         std::cout << p1 << ' ' << p2 << ' ' << p3 << ' ' << p4 << std::endl;
  65.                 }
  66.  
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement