Advertisement
MadCortez

Untitled

Oct 9th, 2020
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.74 KB | None | 0 0
  1. program laba2_1;
  2. //uses
  3. //   System.SysUtils;
  4. Type
  5.    TArray = array of integer;
  6.  
  7. procedure Print(Flag: Boolean); forward;
  8. procedure CheckPolygon(X, Y: Tarray; N: Integer); forward;
  9. function CheckInput(Min, Max: Integer): Integer; forward;
  10. procedure UserInputArray(N: Integer); forward;
  11. procedure UserInput(); forward;
  12. procedure Main(); forward;
  13.  
  14. procedure Main();
  15. var
  16.    Flag: Boolean;
  17. begin
  18.    UserInput;
  19. end;
  20.  
  21. procedure Print(Flag: Boolean);
  22. begin
  23.    if Flag then
  24.       Writeln('Введённый многоугольник не выпуклый')
  25.    else
  26.       Writeln('Введённый многоугольник выпуклый');
  27.    Writeln('Нажмите Enter для выхода из программы');
  28.    Readln;
  29. end;
  30.  
  31. procedure CheckPolygon(X, Y: Tarray; N: Integer);
  32. var
  33.    i, j, k, Ans: Integer;
  34.    Flag: Boolean;
  35. begin
  36.    i := 0;
  37.    repeat
  38.       Inc(i);
  39.       j := (i + 1) mod n;
  40.       k := (i + 2) mod n;
  41.       Ans := (X[j] - X[i]) * (Y[k] - Y[j]) - (Y[j] - Y[i]) * (X[k] - X[j]);
  42.       if Ans < 0 then
  43.          Flag := True;
  44.    until (Flag) or (i = n);
  45.    Print(Flag);
  46. end;
  47.    
  48. function CheckInput(Min, Max: Integer): Integer;
  49. var
  50.    IsValid: Boolean;
  51.    CurrentValue: Integer;
  52. begin
  53.    repeat
  54.    IsValid := True;
  55.    try
  56.       Read(CurrentValue);
  57.    except
  58.       begin
  59.       IsValid := False;
  60.       Writeln('Введите целое число');
  61.       end;
  62.    end;
  63.    if IsValid then
  64.       if (CurrentValue < Min) or (CurrentValue > Max) then
  65.       begin
  66.          IsValid := False;
  67.          Writeln('Введите число в заданном диапазоне');
  68.       end;
  69. until IsValid;
  70. CheckInput := CurrentValue;
  71. end;
  72.    
  73. procedure UserInputArray(N: Integer);
  74. var
  75.    i: Integer;
  76.    X, Y: Tarray;
  77.    const MIN_VALUE = -500;
  78.    const MAX_VALUE = 500;
  79. begin
  80.    SetLength(X, N);
  81.    SetLength(Y, N);
  82.    Dec(N);
  83.    Writeln('Введите координаты вершин в порядке обхода в диапазоне ', MIN_VALUE, '..', MAX_VALUE, ' через Enter');
  84.    for i := 0 to N do
  85.    begin
  86.       Write('Введите координаты ', i + 1, '-й вершины: ');
  87.       X[i] := CheckInput(MIN_VALUE, MAX_VALUE);
  88.       Y[i] := CheckInput(MIN_VALUE, MAX_VALUE);
  89.    end;
  90.    CheckPolygon(X, Y, N);
  91. end;
  92.  
  93. procedure UserInput();
  94. var
  95.    N: Integer;
  96.    const MIN_SIZE = 3;
  97.    const MAX_SIZE = 20;
  98. begin
  99.    Writeln('Данная программа определяет, является ли данный многоугольник выпуклым');
  100.    Write('Введите кол-во вершин в диапазоне ', MIN_SIZE, '..', MAX_SIZE, ': ');
  101.    N := CheckInput(MIN_SIZE, MAX_SIZE);
  102.    UserInputArray(N);
  103. end;
  104.  
  105. begin
  106.    Main;
  107. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement