Advertisement
MadCortez

Untitled

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