Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- int main() {
- setlocale(LC_ALL, "Rus");
- const int MIN_VALUE_CORD = -100;
- const int MAX_VALUE_CORD = 100;
- const int MIN_VALUE_ANGLES = 3;
- const int MAX_VALUE_ANGLES = 15;
- int numberOfAngles,numberOfCoordinates = 2,flagIsIncorrect = 0;
- int vectorProduct, vectorCordX1, vectorCordX2, vectorCordY1, vectorCordY2;
- bool isIncorrect;
- std::cout << "Данная программа определяет, является ли многоугольник с заданными вершинами
- выпуклым или нет. \n"
- << "Диапазон ввода количества углов многоугольника: " << MIN_VALUE_ANGLES << "..."
- << MAX_VALUE_ANGLES << ". \n"
- << "Диапазон ввода значений координат по OX и OY: " << MIN_VALUE_CORD << "..." <<
- MAX_VALUE_CORD << ". \n";
- do
- {
- std::cout << "Введите значение количества углов многоугольника: ";
- isIncorrect = false;
- std::cin >> numberOfAngles;
- if (std::cin.fail())
- {
- isIncorrect = true;
- std::cout << "Проверьте корректность ввода данных! \n";
- std::cin.clear();
- while (std::cin.get() != '\n');
- }
- if (!isIncorrect && (numberOfAngles < MIN_VALUE_ANGLES || numberOfAngles >
- MAX_VALUE_ANGLES))
- {
- isIncorrect = true;
- std::cout << "Введите значение от " << MIN_VALUE_ANGLES << " до " << MAX_VALUE_ANGLES <<
- "! \n";
- }
- } while (isIncorrect);
- int** arrayOfPoints = new int* [numberOfAngles];
- for (int i = 0; i < numberOfAngles; i++)
- {
- arrayOfPoints[i] = new int[numberOfCoordinates];
- }
- for (int i = 0; i < numberOfAngles; i++)
- {
- std::cout << "Ввод координат точки " << i + 1 << ": \n";
- do
- {
- std::cout << "Введите значение координаты по оси ОХ: ";
- isIncorrect = false;
- std::cin >> arrayOfPoints[i][0];
- if (std::cin.fail())
- {
- isIncorrect = true;
- std::cout << "Проверьте корректность ввода данных! \n";
- std::cin.clear();
- while (std::cin.get() != '\n');
- }
- if (!isIncorrect && (arrayOfPoints[i][0] < MIN_VALUE_CORD || arrayOfPoints[i][0] >
- MAX_VALUE_CORD))
- {
- isIncorrect = true;
- std::cout << "Введите значение от " << MIN_VALUE_CORD << " до " << MAX_VALUE_CORD <<
- "! \n";
- }
- } while (isIncorrect);
- do
- {
- std::cout << "Введите значение координаты по оси ОY: ";
- isIncorrect = false;
- std::cin >> arrayOfPoints[i][1];
- if (std::cin.fail())
- {
- isIncorrect = true;
- std::cout << "Проверьте корректность ввода данных! \n";
- std::cin.clear();
- while (std::cin.get() != '\n');
- }
- if (!isIncorrect && (arrayOfPoints[i][1] < MIN_VALUE_CORD || arrayOfPoints[i][1] >
- MAX_VALUE_CORD))
- {
- isIncorrect = true;
- std::cout << "Введите значение от " << MIN_VALUE_CORD << " до " << MAX_VALUE_CORD <<
- "! \n";
- }
- } while (isIncorrect);
- }
- int minNumberOfAngles = numberOfAngles - 2;
- for (int i = 0; i < minNumberOfAngles; i++)
- {
- vectorCordX1 = arrayOfPoints[i + 1][0] - arrayOfPoints[i][0];
- vectorCordY1 = arrayOfPoints[i + 1][1] - arrayOfPoints[i][1];
- vectorCordX2 = arrayOfPoints[i + 2][0] - arrayOfPoints[i + 1][0];
- vectorCordY2 = arrayOfPoints[i + 2][1] - arrayOfPoints[i + 1][1];
- vectorProduct = vectorCordX1 * vectorCordY2 - vectorCordX2 * vectorCordY1;
- if (vectorProduct < 0)
- {
- flagIsIncorrect += 1;
- }
- }
- vectorCordX1 = arrayOfPoints[numberOfAngles - 1][0] - arrayOfPoints[numberOfAngles - 2][0];
- vectorCordY1 = arrayOfPoints[numberOfAngles - 1][1] - arrayOfPoints[numberOfAngles - 2][1];
- vectorCordX2 = arrayOfPoints[0][0] - arrayOfPoints[numberOfAngles - 1][0];
- vectorCordY2 = arrayOfPoints[0][1] - arrayOfPoints[numberOfAngles - 1][1];
- vectorProduct = vectorCordX1 * vectorCordY2 - vectorCordX2 * vectorCordY1;
- if (vectorProduct < 0)
- {
- flagIsIncorrect += 1;
- }
- for (int i = 0; i < numberOfAngles; i++)
- {
- delete[] arrayOfPoints[i];
- }
- delete[] arrayOfPoints;
- if (flagIsIncorrect > 0)
- {
- std::cout << "Многоугольник не является выпуклым.";
- }
- else std::cout << "Многоугольник является выпуклым.";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement