Advertisement
MadCortez

Untitled

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