Advertisement
MadCortez

Untitled

Oct 11th, 2020
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. void Start();
  4. void Print(bool flag);
  5. int InputValue(int min, int max);
  6. int** UserInputArray(int n);
  7. bool CheckPolygon(int** a, int n);
  8. int UserInput();
  9.  
  10. void Start() {
  11.     int n = UserInput();
  12.     int **a = UserInputArray(n);
  13.     bool isPolygon = CheckPolygon(a, n);
  14.     Print(isPolygon);
  15. }
  16.  
  17. void Print(bool flag) {
  18.     if (flag)
  19.         std::cout << "Введённый многоугольник выпуклый";
  20.     else
  21.         std::cout << "Введённый многоугольник не выпуклый";
  22. }
  23.  
  24. int InputValue(int min, int max) {
  25.     int currentValue;
  26.     bool isNotValid = true;
  27.     do {
  28.         std::cin >> currentValue;
  29.         if (currentValue >= min && currentValue <= max)
  30.             isNotValid = false;
  31.         else
  32.             std::cout << "Введите число в заданном диапазоне\n";
  33.     } while (isNotValid);
  34.     return currentValue;
  35. }
  36.  
  37. int** UserInputArray(int n) {
  38.     const int MIN_VALUE = -500;
  39.     const int MAX_VALUE = 500;
  40.     int** a = new int* [2];
  41.     a[0] = new int[n];
  42.     a[1] = new int[n];
  43.     std::cout << "Введите координаты вершин в порядке обхода в диапазоне " << MIN_VALUE << ".." << MAX_VALUE << ": \n";
  44.     for (int i = 0; i < n; i++) {
  45.         std::cout << "Введите координаты " << i + 1 << "-й вершины: ";
  46.         a[0][i] = InputValue(MIN_VALUE, MAX_VALUE);
  47.         a[1][i] = InputValue(MIN_VALUE, MAX_VALUE);
  48.     }
  49.     return a;
  50. }
  51.  
  52. bool CheckPolygon(int** a, int n) {
  53.     int i = 0;
  54.     bool flag = true;
  55.     n--;
  56.     do {
  57.         int j = (i + 1) % n;
  58.         int k = (i + 2) % n;
  59.         int ans = (a[0][j] - a[0][i]) * (a[1][k] - a[1][j]) - (a[1][j] - a[1][i]) * (a[0][k] - a[0][j]);
  60.         if (ans < 0)
  61.             flag = false;
  62.         i++;
  63.     } while (flag && i <= n);    
  64.     return flag;
  65. }
  66.  
  67. int UserInput() {
  68.     int n;
  69.     const int MIN_SIZE = 3;
  70.     const int MAX_SIZE = 20;
  71.     std::cout << "Данная программа определяет, является ли данный многоугольник выпуклым\n";
  72.     std::cout << "Введите количество вершин в диапазоне " << MIN_SIZE << ".." << MAX_SIZE << ": ";
  73.     n = InputValue(MIN_SIZE, MAX_SIZE);
  74.     return n;
  75. }
  76.  
  77. int main()
  78. {
  79.     setlocale(LC_ALL, "Russian");
  80.     Start();
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement