Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Lab2_1;
- Uses
- System.SysUtils;
- Const
- MIN_N = 3;
- MAX_N = 100;
- MIN_COORDINATE = -100;
- MAX_COORDINATE = 100;
- Var
- N, I: Integer;
- IsPointOnPolygon, IsPointOnLine, IsPointBetweenXCoord, IsPointBetweenYCoord, AreCoordinatesNotUnique: Boolean;
- ArrX, ArrY: Array Of Integer;
- Function GetNum(Min, Max: Integer): Integer;
- Var
- IsCorrect: Boolean;
- Num: Integer;
- Begin
- Repeat
- IsCorrect := True;
- Try
- Readln(Num)
- Except
- Write('Некорректный ввод! Введите значение еще раз: ');
- IsCorrect := False;
- End;
- If (IsCorrect) And ((Num < Min) Or (Num > Max)) Then
- Begin
- Write('Недопустимое значение! Введите значение еще раз: ');
- IsCorrect := False;
- End;
- Until (IsCorrect);
- GetNum := Num;
- End;
- Function MinC (A, B: Integer): Integer;
- Begin
- If A < B Then
- MinC := A
- Else
- MinC := B;
- End;
- Function MaxC (A, B: Integer): Integer;
- Begin
- If A > B Then
- MaxC := A
- Else
- MaxC := B;
- End;
- Procedure InputCoordinates (var ArrX, ArrY: Array Of Integer; I:Integer);
- Begin
- Write('Значение координаты X от ', MIN_COORDINATE, ' до ', MAX_COORDINATE, ': ');
- ArrX[I] := GetNum(MIN_COORDINATE, MAX_COORDINATE);
- Write('Значение координаты Y от ', MIN_COORDINATE, ' до ', MAX_COORDINATE, ': ');
- ArrY[I] := GetNum(MIN_COORDINATE, MAX_COORDINATE);
- End;
- Begin
- Writeln('Данная программа определит, принадлежит ли точка с координатами X и Y многоугольнику');
- Write('Введите количество вершин многоугольника N от ', MIN_N, ' до ', MAX_N, ': ');
- N := GetNum(MIN_N, MAX_N);
- SetLength(ArrX, N+2);
- SetLength(ArrY, N+2);
- Writeln('Введите координаты точки X и Y');
- InputCoordinates(ArrX, ArrY, 0);
- Writeln('Последовательно введите координаты X и Y каждой вершины');
- InputCoordinates(ArrX, ArrY, 1);
- I := 2;
- Repeat
- InputCoordinates(ArrX, ArrY, I);
- AreCoordinatesNotUnique := ((ArrX[I] = ArrX[I-1]) And (ArrY[I] = ArrY[I-1]));
- If AreCoordinatesNotUnique Then
- Writeln('Были заданы координаты той же вершины! Введите координаты следующей!')
- Else
- Inc(I);
- Until(I > N);
- N := N+1;
- ArrX[N] := ArrX[1];
- ArrY[N] := ArrY[1];
- I := 2;
- Repeat
- IsPointOnLine := ((ArrY[0] - ArrY[I-1]) * (ArrX[I] - ArrX[I-1]) = (ArrY[I] - ArrY[I-1]) * (ArrX[0] - ArrX[I-1]));
- IsPointBetweenXCoord := (ArrX[0] >= MinC(ArrX[I-1], ArrX[I])) And (ArrX[0] <= MaxC(ArrX[I-1], ArrX[I]));
- IsPointBetweenYCoord := (ArrY[0] >= MinC(ArrY[I-1], ArrY[I])) And (ArrY[0] <= MaxC(ArrY[I-1], ArrY[I]));
- IsPointOnPolygon := (IsPointOnLine And IsPointBetweenXCoord And IsPointBetweenYCoord);
- Inc(I);
- Until((IsPointOnPolygon) Or (I > N));
- If IsPointOnPolygon Then
- Writeln('Точка находится на одной из сторон многоугольника')
- Else
- Writeln('Точка не находится ни на одной из сторон многоугольника');
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement