Advertisement
THOMAS_SHELBY_18

Lab2_1 (C++) without function and procedure

Oct 17th, 2023
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.76 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7.     SetConsoleOutputCP(CP_UTF8);
  8.     const int MIN_N = 3, MAX_N = 100, MIN_COORDINATE = -100, MAX_COORDINATE = 100;
  9.     int n, i, x, y, min, max;
  10.     bool isNotCorrect, areCoordinatesNotUnique, isPointOnPolygon, isPointOnLine, isPointBetweenXCoord, isPointBetweenYCoord ;
  11.  
  12.     cout << "Данная программа определит, находится ли точка с координатами X и Y на стороне многоугольника" << endl;
  13.  
  14.     cout << "Введите количество вершин многоугольника N от " << MIN_N << " до " << MAX_N << ":";
  15.     do {
  16.         isNotCorrect = true;
  17.         cin >> n;
  18.         if (cin.fail() || (cin.get() != '\n')) {
  19.             cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  20.             cin.clear();
  21.             while (cin.get() != '\n');
  22.         }
  23.         else {
  24.             if (n < MIN_N || n > MAX_N) {
  25.                 cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  26.             }
  27.             else {
  28.                 isNotCorrect = false;
  29.             }
  30.         }
  31.     } while (isNotCorrect);
  32.  
  33.     int* arrX = new int[n + 1];
  34.     int* arrY = new int[n + 1];
  35.  
  36.     cout << "Введите координаты точки X и Y" << endl;
  37.     cout << "Целое значение координаты X от " << MIN_COORDINATE << " до " << MAX_COORDINATE << ":";
  38.     do {
  39.         isNotCorrect = true;
  40.         cin >> x;
  41.         if (cin.fail() || (cin.get() != '\n')) {
  42.             cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  43.             cin.clear();
  44.             while (cin.get() != '\n');
  45.         }
  46.         else {
  47.             if (x < MIN_COORDINATE || x > MAX_COORDINATE) {
  48.                 cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  49.             }
  50.             else {
  51.                 isNotCorrect = false;
  52.             }
  53.         }
  54.     } while (isNotCorrect);
  55.  
  56.     cout << "Целое значение координаты Y от " << MIN_COORDINATE << " до " << MAX_COORDINATE << ":";
  57.     do {
  58.         isNotCorrect = true;
  59.         cin >> y;
  60.         if (cin.fail() || (cin.get() != '\n')) {
  61.             cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  62.             cin.clear();
  63.             while (cin.get() != '\n');
  64.         }
  65.         else {
  66.             if (y < MIN_COORDINATE || y > MAX_COORDINATE) {
  67.                 cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  68.             }
  69.             else {
  70.                 isNotCorrect = false;
  71.             }
  72.         }
  73.     } while (isNotCorrect);
  74.  
  75.     cout << "Последовательно введите координаты X и Y каждой вершины" << endl;
  76.     cout << "Целое значение координаты X от " << MIN_COORDINATE << " до " << MAX_COORDINATE << ":";
  77.     do {
  78.         isNotCorrect = true;
  79.         cin >> arrX[0];
  80.         if (cin.fail() || (cin.get() != '\n')) {
  81.             cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  82.             cin.clear();
  83.             while (cin.get() != '\n');
  84.         }
  85.         else {
  86.             if (arrX[0] < MIN_COORDINATE || arrX[0] > MAX_COORDINATE) {
  87.                 cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  88.             }
  89.             else {
  90.                 isNotCorrect = false;
  91.             }
  92.         }
  93.     } while (isNotCorrect);
  94.  
  95.     cout << "Целое значение координаты Y от " << MIN_COORDINATE << " до " << MAX_COORDINATE << ":";
  96.     do {
  97.         isNotCorrect = true;
  98.         cin >> arrY[0];
  99.         if (cin.fail() || (cin.get() != '\n')) {
  100.             cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  101.             cin.clear();
  102.             while (cin.get() != '\n');
  103.         }
  104.         else {
  105.             if (arrY[0] < MIN_COORDINATE || arrY[0] > MAX_COORDINATE) {
  106.                 cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  107.             }
  108.             else {
  109.                 isNotCorrect = false;
  110.             }
  111.         }
  112.     } while (isNotCorrect);
  113.  
  114.     i = 1;
  115.     do {
  116.         cout << "Целое значение координаты X от " << MIN_COORDINATE << " до " << MAX_COORDINATE << ":";
  117.         do {
  118.             isNotCorrect = true;
  119.             cin >> arrX[i];
  120.             if (cin.fail() || (cin.get() != '\n')) {
  121.                 cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  122.                 cin.clear();
  123.                 while (cin.get() != '\n');
  124.             }
  125.             else {
  126.                 if (arrX[i] < MIN_COORDINATE || arrX[i] > MAX_COORDINATE) {
  127.                     cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  128.                 }
  129.                 else {
  130.                     isNotCorrect = false;
  131.                 }
  132.             }
  133.         } while (isNotCorrect);
  134.  
  135.         cout << "Целое значение координаты Y от " << MIN_COORDINATE << " до " << MAX_COORDINATE << ":";
  136.         do {
  137.             isNotCorrect = true;
  138.             cin >> arrY[i];
  139.             if (cin.fail() || (cin.get() != '\n')) {
  140.                 cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  141.                 cin.clear();
  142.                 while (cin.get() != '\n');
  143.             }
  144.             else {
  145.                 if (arrY[i] < MIN_COORDINATE || arrY[i] > MAX_COORDINATE) {
  146.                     cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  147.                 }
  148.                 else {
  149.                     isNotCorrect = false;
  150.                 }
  151.             }
  152.         } while (isNotCorrect);
  153.         areCoordinatesNotUnique = ((arrX[i] == arrX[i-1]) && (arrY[i] == arrY[i-1]));
  154.         if (areCoordinatesNotUnique) {
  155.             cout << "Были заданы координаты той же вершины! Введите координаты следующей!" << endl;
  156.         }
  157.         else {
  158.             i++;
  159.         }
  160.     } while(i < n);
  161.  
  162.     arrX[n] = arrX[0];
  163.     arrY[n] = arrY[0];
  164.  
  165.     n++;
  166.     i = 1;
  167.     do {
  168.         isPointOnLine = ((y - arrY[i - 1]) * (arrX[i] - arrX[i - 1]) == (arrY[i] - arrY[i - 1]) * (x - arrX[i - 1]));
  169.  
  170.         if (arrX[i - 1] > arrX[i]) {
  171.             max = arrX[i - 1];
  172.             min = arrX[i];
  173.         }
  174.         else {
  175.             max = arrX[i];
  176.             min = arrX[i - 1];
  177.         }
  178.         isPointBetweenXCoord = ((x >= min) && (x <= max));
  179.  
  180.         if (arrY[i - 1] > arrY[i]) {
  181.             max = arrX[i - 1];
  182.             min = arrX[i];
  183.         }
  184.         else {
  185.             max = arrY[i];
  186.             min = arrY[i - 1];
  187.         }
  188.         isPointBetweenYCoord = ((y >= min) && (y <= max));
  189.  
  190.         isPointOnPolygon = (isPointOnLine && isPointBetweenXCoord && isPointBetweenYCoord);
  191.         i++;
  192.     } while ( (!isPointOnPolygon) && (i < n) );
  193.  
  194.     if (isPointOnPolygon)
  195.     {
  196.         cout << "Точка находится на одной из сторон многоугольника";
  197.     }
  198.     else {
  199.         cout << "Точка не находится ни на одной из сторон многоугольника";
  200.     }
  201.     return 0;
  202. }
  203.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement