#include 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; }