Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement