Advertisement
THOMAS_SHELBY_18

Lab2_1(Delphi)

Oct 15th, 2023 (edited)
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.52 KB | Source Code | 0 0
  1. Program Lab2_1;
  2.  
  3. Uses
  4.   System.SysUtils;
  5.  
  6. Const
  7.     MIN_N = 3;
  8.     MAX_N = 100;
  9.     MIN_COORDINATE = -100;
  10.     MAX_COORDINATE = 100;
  11.  
  12. Var
  13.     N, I: Integer;
  14.     IsPointOnPolygon, IsPointOnLine, IsPointBetweenXCoord, IsPointBetweenYCoord, AreCoordinatesNotUnique: Boolean;
  15.     ArrX, ArrY: Array Of Integer;
  16.  
  17.  
  18. Function GetNum(Min, Max: Integer): Integer;
  19. Var
  20.     IsCorrect: Boolean;
  21.     Num: Integer;
  22. Begin
  23.     Repeat
  24.         IsCorrect := True;
  25.         Try
  26.             Readln(Num)
  27.         Except
  28.             Write('Некорректный ввод! Введите значение еще раз: ');
  29.             IsCorrect := False;
  30.         End;
  31.         If (IsCorrect) And ((Num < Min) Or (Num > Max)) Then
  32.         Begin
  33.             Write('Недопустимое значение! Введите значение еще раз: ');
  34.             IsCorrect := False;
  35.         End;
  36.     Until (IsCorrect);
  37.     GetNum := Num;
  38. End;
  39.  
  40. Function MinC (A, B: Integer): Integer;
  41. Begin
  42.     If A < B Then
  43.         MinC := A
  44.     Else
  45.         MinC := B;
  46. End;
  47.  
  48. Function MaxC (A, B: Integer): Integer;
  49. Begin
  50.     If A > B Then
  51.         MaxC := A
  52.     Else
  53.         MaxC := B;
  54. End;
  55.  
  56. Procedure InputCoordinates (var ArrX, ArrY: Array Of Integer; I:Integer);
  57. Begin
  58.     Write('Значение координаты X от ', MIN_COORDINATE, ' до ', MAX_COORDINATE, ': ');
  59.     ArrX[I] := GetNum(MIN_COORDINATE, MAX_COORDINATE);
  60.     Write('Значение координаты Y от ', MIN_COORDINATE, ' до ', MAX_COORDINATE, ': ');
  61.     ArrY[I] := GetNum(MIN_COORDINATE, MAX_COORDINATE);
  62. End;
  63.  
  64. Begin
  65.     Writeln('Данная программа определит, принадлежит ли точка с координатами X и Y многоугольнику');
  66.  
  67.     Write('Введите количество вершин многоугольника N от ', MIN_N, ' до ', MAX_N, ': ');
  68.     N := GetNum(MIN_N, MAX_N);
  69.  
  70.     SetLength(ArrX, N+2);
  71.     SetLength(ArrY, N+2);
  72.  
  73.     Writeln('Введите координаты точки X и Y');
  74.     InputCoordinates(ArrX, ArrY, 0);
  75.  
  76.     Writeln('Последовательно введите координаты X и Y каждой вершины');
  77.     InputCoordinates(ArrX, ArrY, 1);
  78.  
  79.     I := 2;
  80.     Repeat
  81.         InputCoordinates(ArrX, ArrY, I);
  82.  
  83.         AreCoordinatesNotUnique := ((ArrX[I] = ArrX[I-1]) And (ArrY[I] = ArrY[I-1]));
  84.         If AreCoordinatesNotUnique Then
  85.             Writeln('Были заданы координаты той же вершины! Введите координаты следующей!')
  86.         Else
  87.             Inc(I);
  88.     Until(I > N);
  89.  
  90.     N := N+1;
  91.     ArrX[N] := ArrX[1];
  92.     ArrY[N] := ArrY[1];
  93.  
  94.     I := 2;
  95.     Repeat
  96.         IsPointOnLine := ((ArrY[0] - ArrY[I-1]) * (ArrX[I] - ArrX[I-1]) = (ArrY[I] - ArrY[I-1]) * (ArrX[0] - ArrX[I-1]));
  97.         IsPointBetweenXCoord := (ArrX[0] >= MinC(ArrX[I-1], ArrX[I])) And (ArrX[0] <= MaxC(ArrX[I-1], ArrX[I]));
  98.         IsPointBetweenYCoord := (ArrY[0] >= MinC(ArrY[I-1], ArrY[I])) And (ArrY[0] <= MaxC(ArrY[I-1], ArrY[I]));
  99.         IsPointOnPolygon := (IsPointOnLine And IsPointBetweenXCoord And IsPointBetweenYCoord);
  100.         Inc(I);
  101.     Until((IsPointOnPolygon) Or (I > N));
  102.  
  103.     If IsPointOnPolygon Then
  104.         Writeln('Точка находится на одной из сторон многоугольника')
  105.     Else
  106.         Writeln('Точка не находится ни на одной из сторон многоугольника');
  107.  
  108.     Readln;
  109. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement