Program Laba_2_1; {$APPTYPE CONSOLE} Uses System.SysUtils; Const MIN_VALUE_CORD = -100; MAX_VALUE_CORD = 100; MIN_VALUE_ANGLES = 3; MAX_VALUE_ANGLES = 15; Var FlagIsIncorrect, I: Integer; NumberOfAngles, NumberOfCoordinates, ArrayNumberOfAngles, MinNumberOfAngles: Integer; VectorProduct, VectorCordX1, VectorCordX2, VectorCordY1, VectorCordY2: Integer; IsCorrect: Boolean; ArrayOfPoints: Array of Array of Integer; Begin Writeln('Данная программа определяет, является ли многоугольник с заданными вершинами выпуклым или нет.'); Writeln('Диапазон ввода количества углов многоугольника: ', MIN_VALUE_ANGLES, '...', MAX_VALUE_ANGLES, '.'); Writeln('Диапазон ввода значений координат по OX и OY: ', MIN_VALUE_CORD, '...', MAX_VALUE_CORD, '.'); Repeat IsCorrect := True; Write('Введите значение количества углов многоугольника: '); Try Readln(NumberOfAngles); Except Writeln('Проверьте корректность ввода данных!'); IsCorrect := False; End; If (IsCorrect) And ((NumberOfAngles < MIN_VALUE_ANGLES) Or (NumberOfAngles > MAX_VALUE_ANGLES)) Then Begin Writeln ('Введите значение от ', MIN_VALUE_ANGLES, ' до ', MAX_VALUE_ANGLES, '!'); IsCorrect := False; End; Until IsCorrect; NumberOfCoordinates := 2; ArrayNumberOfAngles := NumberOfAngles - 1; FlagIsIncorrect := 0; SetLength (ArrayOfPoints, NumberOfAngles, NumberOfCoordinates); For I := 0 To ArrayNumberOfAngles Do Begin Writeln('Введите значение точки ', I + 1, ':'); Repeat IsCorrect := True; Write('Введите значение координаты по оси ОХ: '); Try Readln(ArrayOfPoints[I, 0]); Except Writeln('Проверьте корректность ввода данных!'); IsCorrect := False; End; If (IsCorrect) And ((ArrayOfPoints[I, 0] < MIN_VALUE_CORD) Or (ArrayOfPoints[I, 0] > MAX_VALUE_CORD)) Then Begin Writeln ('Введите значение от ', MIN_VALUE_CORD, ' до ', MAX_VALUE_CORD, '!'); IsCorrect := False; End; Until IsCorrect; Repeat IsCorrect := True; Write('Введите значение координаты по оси ОY: '); Try Readln(ArrayOfPoints[I, 1]); Except Writeln('Проверьте корректность ввода данных!'); IsCorrect := False; End; If (IsCorrect) And ((ArrayOfPoints[I, 1] < MIN_VALUE_CORD) Or (ArrayOfPoints[I, 1] > MAX_VALUE_CORD)) Then Begin Writeln ('Введите значение от ', MIN_VALUE_CORD, ' до ', MAX_VALUE_CORD, '!'); IsCorrect := False; End; Until IsCorrect; End; MinNumberOfAngles := NumberOfAngles - 3; For I := 0 To MinNumberOfAngles Do Begin 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 Then Inc(FlagIsIncorrect); End; VectorCordX1 := ArrayOfPoints [ArrayNumberOfAngles, 0] - ArrayOfPoints [ArrayNumberOfAngles - 1, 0]; VectorCordY1 := ArrayOfPoints [ArrayNumberOfAngles, 1] - ArrayOfPoints [ArrayNumberOfAngles - 1, 1]; VectorCordX2 := ArrayOfPoints [0, 0] - ArrayOfPoints [ArrayNumberOfAngles, 0]; VectorCordY2 := ArrayOfPoints [0, 1] - ArrayOfPoints [ArrayNumberOfAngles, 1]; VectorProduct := VectorCordX1 * VectorCordY2 - VectorCordX2 * VectorCordY1; If VectorProduct < 0 Then Inc(FlagIsIncorrect); If FlagIsIncorrect > 0 Then Writeln('Многоугольник не является выпуклым.') Else Writeln('Многоугольник является выпуклым.'); Readln; End.