Advertisement
MadCortez

Untitled

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