Advertisement
THOMAS_SHELBY_18

Lab2_1(C++)

Oct 15th, 2023 (edited)
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.69 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6. int getNum(int min, int max){
  7.     bool isNotCorrect;
  8.     int num;
  9.     do {
  10.         isNotCorrect = true;
  11.         cin >> num;
  12.         if (cin.fail() || (cin.get() != '\n')) {
  13.             cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  14.             cin.clear();
  15.             while (cin.get() != '\n');
  16.         }
  17.         else {
  18.             if (min < num && max > num) {
  19.                 isNotCorrect = false;
  20.             }
  21.             else {
  22.                 cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  23.             }
  24.         }
  25.     } while (isNotCorrect);
  26.     return num;
  27. }
  28. int minC(int a, int b) {
  29.     int res;
  30.     if (a < b) {
  31.         res = a;
  32.     }
  33.     else {
  34.         res = b;
  35.     }
  36.     return res;
  37. }
  38. int maxC(int a, int b) {
  39.     int res;
  40.     if (a > b) {
  41.         res = a;
  42.     }
  43.     else {
  44.         res = b;
  45.     }
  46.     return res;
  47. }
  48. void inputCoordinates (int arrX[], int arrY[], int i){
  49.     const int MIN_COORDINATE = -100, MAX_COORDINATE = 100;
  50.     cout << "Целое значение координаты X от " << MIN_COORDINATE << " до " << MAX_COORDINATE << ":";
  51.     arrX[i] = getNum(MIN_COORDINATE, MAX_COORDINATE);
  52.     cout << "Целое значение координаты Y от " << MIN_COORDINATE << " до " << MAX_COORDINATE << ":";
  53.     arrY[i] = getNum(MIN_COORDINATE, MAX_COORDINATE);
  54. }
  55. int main() {
  56.     SetConsoleOutputCP(CP_UTF8);
  57.     const int MIN_N = 3, MAX_N = 100;
  58.     int n, i;
  59.     bool areCoordinatesNotUnique, isPointOnPolygon, isPointOnLine, isPointBetweenXCoord, isPointBetweenYCoord ;
  60.  
  61.     cout << "Данная программа определит, принадлежит ли точка с координатами X и Y многоугольнику" << endl;
  62.  
  63.     cout << "Введите количество вершин многоугольника N от " << MIN_N << " до " << MAX_N << ":";
  64.     n = getNum(MIN_N, MAX_N);
  65.  
  66.     int* arrX = new int[n + 2];
  67.     int* arrY = new int[n + 2];
  68.     n += 1;
  69.     cout << "Введите координаты точки X и Y" << endl;
  70.     inputCoordinates(arrX, arrY, 0);
  71.  
  72.     cout << "Последовательно введите координаты X и Y каждой вершины" << endl;
  73.     inputCoordinates(arrX, arrY, 1);
  74.     i = 2;
  75.     do {
  76.         inputCoordinates(arrX, arrY, i);
  77.         areCoordinatesNotUnique = ((arrX[i] == arrX[i-1]) && (arrY[i] == arrY[i-1]));
  78.         if (areCoordinatesNotUnique) {
  79.             cout << "Были заданы координаты той же вершины! Введите координаты следующей!" << endl;
  80.         }
  81.         else i++;
  82.     } while(i < n);
  83.     arrX[n] = arrX[1];
  84.     arrY[n] = arrY[1];
  85.  
  86.     i = 2;
  87.     do {
  88.         isPointOnLine = ((arrY[0] - arrY[i - 1]) * (arrX[i] - arrX[i - 1]) == (arrY[i] - arrY[i - 1]) * (arrX[0] - arrX[i - 1]));
  89.         isPointBetweenXCoord = (arrX[0] >= minC(arrX[i - 1], arrX[i])) && (arrX[0] <= maxC(arrX[i - 1], arrX[i]));
  90.         isPointBetweenYCoord = (arrY[0] >= minC(arrY[i - 1], arrY[i])) && (arrY[0] <= maxC(arrY[i - 1], arrY[i]));
  91.         isPointOnPolygon = (isPointOnLine && isPointBetweenXCoord && isPointBetweenYCoord);
  92.         i++;
  93.     } while ( (!isPointOnPolygon) && (i < n) );
  94.  
  95.     if (isPointOnPolygon)
  96.     {
  97.         cout << "Точка находится на одной из сторон многоугольника";
  98.     }
  99.     else {
  100.         cout << "Точка не находится ни на одной из сторон многоугольника";
  101.     }
  102.     return 0;
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement