Advertisement
ksyshshot

Lab.2.1.CheckPolygon

Feb 17th, 2023
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.38 KB | Source Code | 0 0
  1. procedure CheckIsLine(A: TArr; var IsCorrect: Boolean; var Error: String);
  2. var
  3.     Counter, I: Integer;
  4. begin
  5.     I := 0;
  6.     Counter := 0;
  7.     while (IsCorrect) and (Counter < 3) and (I < High(A)) do
  8.     begin
  9.         if A[I] = A[I + 1] then
  10.             Inc(Counter)
  11.         else
  12.             Dec(Counter);
  13.         if (Counter = 3) then
  14.         begin
  15.             IsCorrect := false;
  16.             Error := 'Данная фигура не является многоугольником. ';
  17.         end;
  18.         Inc(I);
  19.     end;
  20. end;
  21.  
  22. procedure CheckIsPolygon(X, Y: TArr; Size: Integer; var IsCorrect: Boolean; var Error: String);
  23. var
  24.     I, J, K: Integer;
  25.     TempX, TempY: TArr;
  26.     Res1, Res2: Double;
  27. begin
  28. //чересчур мудрённый
  29.     SetLength(TempX, Size + 2);
  30.     SetLength(TempY, Size + 2);
  31.     for I := 0 to High(X) do
  32.     begin
  33.         TempX[I] := X[I];
  34.         TempY[I] := Y[I];
  35.     end;
  36.     TempX[Size] := X[0];
  37.     TempX[Size + 1] := X[1];
  38.     TempY[Size] := Y[0];
  39.     TempY[Size + 1] := Y[1];
  40.     CheckIsLine(TempX, IsCorrect, Error);
  41.     CheckIsLine(TempY, IsCorrect, Error);
  42.     I := 0;
  43.     while (IsCorrect) and (I < Size) do
  44.     begin
  45.         if (TempX[I + 1] = TempX[I]) then
  46.         begin
  47.             if (TempY[I + 1] = TempY[I]) then
  48.             begin
  49.                 IsCorrect := false;
  50.                 Error := 'Введены две одинаковые координаты подряд. ';
  51.             end
  52.             else
  53.             begin
  54.                 Res1 := TempX[I + 2] - TempX[I];
  55.                 Res2 := (TempY[I + 2] - TempY[I]) / (TempY[I + 1] - TempY[I]);
  56.             end;
  57.         end
  58.         else
  59.         begin
  60.             if (TempY[I + 1] = TempY[I]) then
  61.             begin
  62.                 Res1 := TempX[I + 2] - TempX[I] / (TempX[I + 1] - TempX[I]);
  63.                 Res2 := (TempY[I + 2] - TempY[I]);
  64.             end
  65.             else
  66.             begin
  67.                 Res1 := TempX[I + 2] - TempX[I] / (TempX[I + 1] - TempX[I]);
  68.                 Res2 := (TempY[I + 2] - TempY[I]) / (TempY[I + 1] - TempY[I]);
  69.             end;
  70.         end;
  71.         if (IsCorrect) and (res1 = res2) then
  72.         begin
  73.             IsCorrect := false;
  74.             Error := Error + 'Данная совокупность точек не является многоугольником. ';
  75.         end;
  76.         Inc(I);
  77.     end;
  78. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement