Advertisement
MadCortez

Untitled

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