Advertisement
MadCortez

Untitled

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