Advertisement
THOMAS_SHELBY_18

Lab2_1 (Delphi) without function and procedure

Oct 17th, 2023 (edited)
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.74 KB | Source Code | 0 0
  1. Program Lab2_1;
  2.  
  3. Uses
  4.   System.SysUtils;
  5.  
  6. Var
  7.     N, I, X, Y, Min, Max: Integer;
  8.     IsCorrect, IsPointOnPolygon, IsPointOnLine, IsPointBetweenXCoord, IsPointBetweenYCoord, AreCoordinatesNotUnique: Boolean;
  9.     ArrX, ArrY: Array Of Integer;
  10. Const
  11.     MIN_N = 3;
  12.     MAX_N = 100;
  13.     MIN_COORDINATE = -100;
  14.     MAX_COORDINATE = 100;
  15.  
  16. Begin
  17.     Writeln('Данная программа определит, находится ли точка с координатами X и Y на стороне многоугольника');
  18.     Write('Введите количество вершин многоугольника N от ', MIN_N, ' до ', MAX_N, ': ');
  19.     Repeat
  20.         IsCorrect := True;
  21.         Try
  22.             Readln(N)
  23.         Except
  24.             Write('Некорректный ввод! Введите значение еще раз: ');
  25.             IsCorrect := False;
  26.         End;
  27.         If (IsCorrect) And ((N < MIN_N) Or (N > MAX_N)) Then
  28.         Begin
  29.             Write('Недопустимое значение! Введите значение еще раз: ');
  30.             IsCorrect := False;
  31.         End;
  32.     Until (IsCorrect);
  33.  
  34.     SetLength(ArrX, N+1);
  35.     SetLength(ArrY, N+1);
  36.  
  37.     Writeln('Введите координаты точки X и Y');
  38.     Write('Введите значение Х от ', MIN_COORDINATE, ' до ', MAX_COORDINATE, ': ');
  39.     Repeat
  40.         IsCorrect := True;
  41.         Try
  42.             Readln(X)
  43.         Except
  44.             Write('Некорректный ввод! Введите значение еще раз: ');
  45.             IsCorrect := False;
  46.         End;
  47.         If (IsCorrect) And ((X < MIN_COORDINATE) Or (X > MAX_COORDINATE)) Then
  48.         Begin
  49.             Write('Недопустимое значение! Введите значение еще раз: ');
  50.             IsCorrect := False;
  51.         End;
  52.     Until (IsCorrect);
  53.  
  54.     Write('Введите значение Y от ', MIN_COORDINATE, ' до ', MAX_COORDINATE, ': ');
  55.     Repeat
  56.         IsCorrect := True;
  57.         Try
  58.             Readln(Y)
  59.         Except
  60.             Write('Некорректный ввод! Введите значение еще раз: ');
  61.             IsCorrect := False;
  62.         End;
  63.         If (IsCorrect) And ((Y < MIN_COORDINATE) Or (Y > MAX_COORDINATE)) Then
  64.         Begin
  65.             Write('Недопустимое значение! Введите значение еще раз: ');
  66.             IsCorrect := False;
  67.         End;
  68.     Until (IsCorrect);
  69.  
  70.     Writeln('Последовательно введите координаты X и Y каждой вершины');
  71.     Write('Введите значение Х от ', MIN_COORDINATE, ' до ', MAX_COORDINATE, ': ');
  72.     Repeat
  73.         IsCorrect := True;
  74.         Try
  75.             Readln(ArrX[0])
  76.         Except
  77.             Write('Некорректный ввод! Введите значение еще раз: ');
  78.             IsCorrect := False;
  79.         End;
  80.         If (IsCorrect) And ((ArrX[0] < MIN_COORDINATE) Or (ArrX[0] > MAX_COORDINATE)) Then
  81.         Begin
  82.             Write('Недопустимое значение! Введите значение еще раз: ');
  83.             IsCorrect := False;
  84.         End;
  85.     Until (IsCorrect);
  86.  
  87.     Write('Введите значение Y от ', MIN_COORDINATE, ' до ', MAX_COORDINATE, ': ');
  88.     Repeat
  89.         IsCorrect := True;
  90.         Try
  91.             Readln(ArrY[0])
  92.         Except
  93.             Write('Некорректный ввод! Введите значение еще раз: ');
  94.             IsCorrect := False;
  95.         End;
  96.         If (IsCorrect) And ((ArrY[0] < MIN_COORDINATE) Or (ArrY[0] > MAX_COORDINATE)) Then
  97.         Begin
  98.             Write('Недопустимое значение! Введите значение еще раз: ');
  99.             IsCorrect := False;
  100.         End;
  101.     Until (IsCorrect);
  102.  
  103.     Dec(N);
  104.     I := 1;
  105.     Repeat
  106.     Write('Введите значение Х от ', MIN_COORDINATE, ' до ', MAX_COORDINATE, ': ');
  107.     Repeat
  108.         IsCorrect := True;
  109.         Try
  110.             Readln(ArrX[I])
  111.         Except
  112.             Write('Некорректный ввод! Введите значение еще раз: ');
  113.             IsCorrect := False;
  114.         End;
  115.         If (IsCorrect) And ((ArrX[I] < MIN_COORDINATE) Or (ArrX[I] > MAX_COORDINATE)) Then
  116.         Begin
  117.             Write('Недопустимое значение! Введите значение еще раз: ');
  118.             IsCorrect := False;
  119.         End;
  120.     Until (IsCorrect);
  121.  
  122.     Write('Введите значение Y от ', MIN_COORDINATE, ' до ', MAX_COORDINATE, ': ');
  123.     Repeat
  124.         IsCorrect := True;
  125.         Try
  126.             Readln(ArrY[I])
  127.         Except
  128.             Write('Некорректный ввод! Введите значение еще раз: ');
  129.             IsCorrect := False;
  130.         End;
  131.         If (IsCorrect) And ((ArrY[I] < MIN_COORDINATE) Or (ArrY[I] > MAX_COORDINATE)) Then
  132.         Begin
  133.             Write('Недопустимое значение! Введите значение еще раз: ');
  134.             IsCorrect := False;
  135.         End;
  136.     Until (IsCorrect);
  137.  
  138.         AreCoordinatesNotUnique := ((ArrX[I] = ArrX[I-1]) And (ArrY[I] = ArrY[I-1]));
  139.         If AreCoordinatesNotUnique Then
  140.             Writeln('Были заданы координаты той же вершины! Введите координаты следующей!')
  141.         Else
  142.             Inc(I);
  143.     Until(I > N);
  144.  
  145.     Inc(N);
  146.     ArrX[N] := ArrX[0];
  147.     ArrY[N] := ArrY[0];
  148.  
  149.     I := 1;
  150.     Repeat
  151.         IsPointOnLine := ((Y - ArrY[I-1]) * (ArrX[I] - ArrX[I-1]) = (ArrY[I] - ArrY[I-1]) * (X - ArrX[I-1]));
  152.  
  153.         If ArrX[I-1] > ArrX[I] Then
  154.         Begin
  155.             Min := ArrX[I];
  156.             Max := ArrX[I - 1];
  157.         End
  158.         Else
  159.         Begin
  160.             Min := ArrX[I - 1];
  161.             Max := ArrX[I];
  162.         End;
  163.  
  164.         IsPointBetweenXCoord := (X >= Min) And (X <= Max);
  165.  
  166.         If ArrY[I-1] > ArrY[I] Then
  167.         Begin
  168.             Min := ArrY[I];
  169.             Max := ArrY[I - 1];
  170.         End
  171.         Else
  172.         Begin
  173.             Min := ArrY[I - 1];
  174.             Max := ArrY[I];
  175.         End;
  176.  
  177.         IsPointBetweenYCoord := (Y >= Min) And (Y <= Max);
  178.  
  179.         IsPointOnPolygon := (IsPointOnLine And IsPointBetweenXCoord And IsPointBetweenYCoord);
  180.         Inc(I);
  181.     Until((IsPointOnPolygon) Or (I > N));
  182.  
  183.     If IsPointOnPolygon Then
  184.         Writeln('Точка находится на одной из сторон многоугольника')
  185.     Else
  186.         Writeln('Точка не находится ни на одной из сторон многоугольника');
  187.  
  188.     Readln;
  189. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement