Advertisement
MadCortez

Untitled

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