Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program laba2_1;
- uses
- System.SysUtils;
- Type
- TArray = array[0..1] of array of Integer;
- procedure Print(Flag: Boolean); forward;
- function CheckPolygon(A: TArray; N: Integer): Boolean; forward;
- function InputValue(Min, Max: Integer): Integer; forward;
- function UserInputArray(N: Integer): TArray; forward;
- function UserInput(): Integer; forward;
- procedure Main(); forward;
- procedure Main();
- var
- N: Integer;
- A: TArray;
- IsPolygon: Boolean;
- begin
- N := UserInput;
- A := UserInputArray(N);
- IsPolygon := CheckPolygon(a, n);
- Print(IsPolygon);
- end;
- procedure Print(Flag: Boolean);
- begin
- if Flag then
- Writeln('Введённый многоугольник не выпуклый')
- else
- Writeln('Введённый многоугольник выпуклый');
- Writeln('Нажмите Enter для выхода из программы');
- Readln;
- end;
- function InputValue(Min, Max: Integer): Integer;
- var
- IsValid: Boolean;
- CurrentValue: Integer;
- begin
- repeat
- IsValid := True;
- try
- Read(CurrentValue);
- except
- begin
- IsValid := False;
- Writeln('Введите целое число');
- end;
- end;
- if IsValid then
- if (CurrentValue < Min) or (CurrentValue > Max) then
- begin
- IsValid := False;
- Writeln('Введите число в заданном диапазоне');
- end;
- until IsValid;
- InputValue := CurrentValue;
- end;
- function UserInputArray(N: Integer): TArray;
- var
- i: Integer;
- A: TArray;
- const MIN_VALUE = -500;
- const MAX_VALUE = 500;
- begin
- SetLength(A[0], N);
- SetLength(A[1], N);
- Dec(N);
- Writeln('Введите координаты вершин в порядке обхода в диапазоне ', MIN_VALUE, '..', MAX_VALUE, ' через Enter');
- for i := 0 to N do
- begin
- Write('Введите координаты ', i + 1, '-й вершины: ');
- A[0][i] := InputValue(MIN_VALUE, MAX_VALUE);
- A[1][i] := InputValue(MIN_VALUE, MAX_VALUE);
- Readln;
- end;
- UserInputArray := A;
- end;
- function CheckPolygon(A: TArray; N: Integer): Boolean;
- var
- i, j, k, Ans: Integer;
- Flag: Boolean;
- begin
- i := 0;
- repeat
- j := (i + 1) mod n;
- k := (i + 2) mod n;
- Ans := (A[0][j] - A[0][i]) * (A[1][k] - A[1][j]) - (A[1][j] - A[1][i]) * (A[0][k] - A[0][j]);
- if Ans < 0 then
- Flag := True;
- Inc(i);
- until (Flag) or (i = n);
- CheckPolygon := Flag;
- end;
- function UserInput(): Integer;
- var
- N: Integer;
- const MIN_SIZE = 3;
- const MAX_SIZE = 20;
- begin
- Writeln('Данная программа определяет, является ли данный многоугольник выпуклым');
- Write('Введите кол-во вершин в диапазоне ', MIN_SIZE, '..', MAX_SIZE, ': ');
- N := InputValue(MIN_SIZE, MAX_SIZE);
- Readln;
- UserInput := N;
- end;
- begin
- Main;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement