Advertisement
MadCortez

Untitled

Oct 10th, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.92 KB | None | 0 0
  1. program laba2_1;
  2. uses
  3.    System.SysUtils;
  4. Type
  5.    TArray = array[1..2] of array of Integer;
  6.  
  7. procedure Print(Flag: Boolean); forward;
  8. function CheckPolygon(A: TArray; N: Integer): Boolean; forward;
  9. function CheckInput(Min, Max: Integer): Integer; forward;
  10. function UserInputArray(N: Integer): TArray; forward;
  11. function UserInput(): Integer; forward;
  12. procedure Main(); forward;
  13.  
  14. procedure Main();
  15. var
  16.    N: Integer;
  17.    A: TArray;
  18. begin
  19.    N := UserInput;
  20.    A := UserInputArray(N);
  21.    Print(CheckPolygon(A, N));
  22. end;
  23.  
  24. procedure Print(Flag: Boolean);
  25. begin
  26.    if Flag then
  27.       Writeln('Введённый многоугольник не выпуклый')
  28.    else
  29.       Writeln('Введённый многоугольник выпуклый');
  30.    Writeln('Нажмите Enter для выхода из программы');
  31.    Readln;
  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. function UserInputArray(N: Integer): TArray;
  60. var
  61.    i: Integer;
  62.    A: TArray;
  63.    const MIN_VALUE = -500;
  64.    const MAX_VALUE = 500;
  65. begin
  66.    SetLength(A[1], N);
  67.    SetLength(A[2], 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.       A[1, i] := CheckInput(MIN_VALUE, MAX_VALUE);
  74.       A[2, i] := CheckInput(MIN_VALUE, MAX_VALUE);
  75.       Readln;
  76.    end;
  77.    UserInputArray := A;
  78. end;
  79.  
  80. function CheckPolygon(A: TArray; N: Integer): Boolean;
  81. var
  82.    i, j, k, Ans: Integer;
  83.    Flag: Boolean;
  84. begin
  85.    i := 0;
  86.    repeat
  87.       Inc(i);
  88.       j := (i + 1) mod n;
  89.       k := (i + 2) mod n;
  90.       Ans := (A[1, j] - A[1, i]) * (A[2, k] - A[2, j]) - (A[2, j] - A[2, i]) * (A[1, k] - A[1, j]);
  91.       if Ans < 0 then
  92.          Flag := True;
  93.    until (Flag) or (i = n);
  94.    CheckPolygon := Flag;
  95. end;
  96.  
  97.  
  98. function UserInput(): Integer;
  99. var
  100.    N: Integer;
  101.    const MIN_SIZE = 3;
  102.    const MAX_SIZE = 20;
  103. begin
  104.    Writeln('Данная программа определяет, является ли данный многоугольник выпуклым');
  105.    Write('Введите кол-во вершин в диапазоне ', MIN_SIZE, '..', MAX_SIZE, ': ');
  106.    N := CheckInput(MIN_SIZE, MAX_SIZE);
  107.    Readln;
  108.    UserInput := N;
  109. end;
  110.  
  111. begin
  112.    Main;
  113. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement