Помогите решить задачу на Паскале. Выпуклый многоугольник на плоскости задан своими вершинами, расположенными в произвольном порядке. Расположить вершины в порядке обхода по часовой стрелке.
//Прошу прощения за "пузырёк" //Pascal ABC.NET 3.1 сборка 1219
Const n=5; //количество вершин
Type ty=record x:integer; y:integer; end;
Var ar:array[1..n] of ty; i,j:integer; begin for i:=1 to n do begin write('Абсцисса точки №',i,':');readln(ar[i].x); write('Ордината точки №',i,':');readln(ar[i].y); end; for i:=1 to n-1 do for j:=i+1 to n do if ar[i].x>ar[j].x then swap(ar[i],ar[j]); for i:=1 to (n div 2)-1 do for j:=i+1 to n div 2 do if ar[i].y<ar[j].y then swap(ar[i],ar[j]); for i:=n div 2+1 to n-1 do for j:=i+1 to n do if ar[i].y>ar[j].y then swap(ar[i],ar[j]); ar.reverse.Print; end.
Пример ввода: Абсцисса точки №1:1 Ордината точки №1:2 Абсцисса точки №2:2 Ордината точки №2:1 Абсцисса точки №3:-3 Ордината точки №3:-3 Абсцисса точки №4:3 Ордината точки №4:3 Абсцисса точки №5:3 Ордината точки №5:1 Пример вывода: (3,3) (3,1) (2,1) (-3,-3) (1,2)
Answers & Comments
Verified answer
//Прошу прощения за "пузырёк"//Pascal ABC.NET 3.1 сборка 1219
Const n=5; //количество вершин
Type
ty=record
x:integer;
y:integer;
end;
Var
ar:array[1..n] of ty;
i,j:integer;
begin
for i:=1 to n do
begin
write('Абсцисса точки №',i,':');readln(ar[i].x);
write('Ордината точки №',i,':');readln(ar[i].y);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if ar[i].x>ar[j].x then swap(ar[i],ar[j]);
for i:=1 to (n div 2)-1 do
for j:=i+1 to n div 2 do
if ar[i].y<ar[j].y then swap(ar[i],ar[j]);
for i:=n div 2+1 to n-1 do
for j:=i+1 to n do
if ar[i].y>ar[j].y then swap(ar[i],ar[j]);
ar.reverse.Print;
end.
Пример ввода:
Абсцисса точки №1:1
Ордината точки №1:2
Абсцисса точки №2:2
Ордината точки №2:1
Абсцисса точки №3:-3
Ордината точки №3:-3
Абсцисса точки №4:3
Ордината точки №4:3
Абсцисса точки №5:3
Ордината точки №5:1
Пример вывода:
(3,3) (3,1) (2,1) (-3,-3) (1,2)