Advertisement
anticlown

Laba.2.1(C++)

Dec 22nd, 2022
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.75 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. int main() {
  4.   setlocale(LC_ALL, "Rus");
  5.  
  6.   const int MIN_VALUE_CORD = -100;
  7.   const int MAX_VALUE_CORD = 100;
  8.   const int MIN_VALUE_ANGLES = 3;
  9.   const int MAX_VALUE_ANGLES = 15;
  10.   int numberOfAngles,numberOfCoordinates = 2,flagIsIncorrect = 0;
  11.   int vectorProduct, vectorCordX1, vectorCordX2, vectorCordY1, vectorCordY2;
  12.   bool isIncorrect;
  13.  
  14.   std::cout << "Данная программа определяет, является ли многоугольник с заданными вершинами
  15.                выпуклым или нет. \n"
  16.             << "Диапазон ввода количества углов многоугольника: " << MIN_VALUE_ANGLES << "..."
  17.             <<  MAX_VALUE_ANGLES << ". \n"
  18.             << "Диапазон ввода значений координат по OX и OY: " << MIN_VALUE_CORD << "..." <<
  19.                 MAX_VALUE_CORD << ". \n";
  20.  
  21.   do
  22.   {
  23.     std::cout << "Введите значение количества углов многоугольника: ";
  24.     isIncorrect = false;
  25.     std::cin >> numberOfAngles;
  26.     if (std::cin.fail())
  27.     {
  28.       isIncorrect = true;
  29.       std::cout << "Проверьте корректность ввода данных! \n";
  30.       std::cin.clear();
  31.       while (std::cin.get() != '\n');
  32.     }
  33.     if (!isIncorrect && (numberOfAngles < MIN_VALUE_ANGLES || numberOfAngles >
  34.          MAX_VALUE_ANGLES))
  35.     {
  36.       isIncorrect = true;
  37.       std::cout << "Введите значение от " << MIN_VALUE_ANGLES << " до " << MAX_VALUE_ANGLES <<
  38.                    "! \n";
  39.     }
  40.   } while (isIncorrect);
  41.  
  42.   int** arrayOfPoints = new int* [numberOfAngles];
  43.  
  44.   for (int i = 0; i < numberOfAngles; i++)
  45.   {
  46.     arrayOfPoints[i] = new int[numberOfCoordinates];
  47.   }
  48.  
  49.   for (int i = 0; i < numberOfAngles; i++)
  50.   {
  51.     std::cout << "Ввод координат точки " << i + 1 << ": \n";
  52.     do
  53.     {
  54.       std::cout << "Введите значение координаты по оси ОХ: ";
  55.       isIncorrect = false;
  56.       std::cin >> arrayOfPoints[i][0];
  57.       if (std::cin.fail())
  58.       {
  59.         isIncorrect = true;
  60.         std::cout << "Проверьте корректность ввода данных! \n";
  61.         std::cin.clear();
  62.         while (std::cin.get() != '\n');
  63.       }
  64.       if (!isIncorrect && (arrayOfPoints[i][0] < MIN_VALUE_CORD || arrayOfPoints[i][0] >
  65.            MAX_VALUE_CORD))
  66.       {
  67.         isIncorrect = true;
  68.         std::cout << "Введите значение от " << MIN_VALUE_CORD << " до " << MAX_VALUE_CORD <<
  69.                      "! \n";
  70.       }
  71.     } while (isIncorrect);
  72.  
  73.     do
  74.     {
  75.       std::cout << "Введите значение координаты по оси ОY: ";
  76.       isIncorrect = false;
  77.       std::cin >> arrayOfPoints[i][1];
  78.       if (std::cin.fail())
  79.       {
  80.         isIncorrect = true;
  81.         std::cout << "Проверьте корректность ввода данных! \n";
  82.         std::cin.clear();
  83.         while (std::cin.get() != '\n');
  84.       }
  85.       if (!isIncorrect && (arrayOfPoints[i][1] < MIN_VALUE_CORD || arrayOfPoints[i][1] >
  86.            MAX_VALUE_CORD))
  87.       {
  88.         isIncorrect = true;
  89.         std::cout << "Введите значение от " << MIN_VALUE_CORD << " до " << MAX_VALUE_CORD <<
  90.                      "! \n";
  91.       }
  92.     } while (isIncorrect);
  93.   }
  94.  
  95.   int minNumberOfAngles = numberOfAngles - 2;
  96.  
  97.   for (int i = 0; i < minNumberOfAngles; i++)
  98.   {
  99.     vectorCordX1 = arrayOfPoints[i + 1][0] - arrayOfPoints[i][0];
  100.     vectorCordY1 = arrayOfPoints[i + 1][1] - arrayOfPoints[i][1];
  101.     vectorCordX2 = arrayOfPoints[i + 2][0] - arrayOfPoints[i + 1][0];
  102.     vectorCordY2 = arrayOfPoints[i + 2][1] - arrayOfPoints[i + 1][1];
  103.     vectorProduct = vectorCordX1 * vectorCordY2 - vectorCordX2 * vectorCordY1;
  104.     if (vectorProduct < 0)
  105.     {
  106.       flagIsIncorrect += 1;
  107.     }
  108.   }
  109.  
  110.   vectorCordX1 = arrayOfPoints[numberOfAngles - 1][0] - arrayOfPoints[numberOfAngles - 2][0];
  111.   vectorCordY1 = arrayOfPoints[numberOfAngles - 1][1] - arrayOfPoints[numberOfAngles - 2][1];
  112.   vectorCordX2 = arrayOfPoints[0][0] - arrayOfPoints[numberOfAngles - 1][0];
  113.   vectorCordY2 = arrayOfPoints[0][1] - arrayOfPoints[numberOfAngles - 1][1];
  114.   vectorProduct = vectorCordX1 * vectorCordY2 - vectorCordX2 * vectorCordY1;
  115.   if (vectorProduct < 0)
  116.   {
  117.     flagIsIncorrect += 1;
  118.   }
  119.   for (int i = 0; i < numberOfAngles; i++)
  120.   {
  121.     delete[] arrayOfPoints[i];
  122.   }
  123.  
  124.   delete[] arrayOfPoints;
  125.  
  126.   if (flagIsIncorrect > 0)
  127.   {
  128.     std::cout << "Многоугольник не является выпуклым.";
  129.   }
  130.   else std::cout << "Многоугольник является выпуклым.";
  131.  
  132.   return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement