Alenka_kiss писал(а):
...задача есть нерешенная (на графику)...
Это ж разве на графику ? Ведь
Цитата:
ответом будет порядок обхода точек плоскости
И раз есть указание
Цитата:
Указание: перейти к полярным координатам и упорядочить точки по значениям
угла, а для точек с одинаковым значением угла - по расстоянию до полюса.
то нужно всего лишь пересчитать массив в полярные координаты, а потом два раза отсортировать. Вот так, например (вроде не ошибся):
Код:
const N = 10; (* количество точек *)
type tPoint = record
x, y: real;
n: integer;
end; (* record *)
type tPoints = array [1..N] of tPoint;
procedure dec2pol (var p: tPoint);
var t: tPoint;
begin (* dec2pol *)
t. n := p. n;
if p. x = 0 then
t. x := 90
else
t. x := 180 * arctan (p. y / abs (p. x)) / Pi;
if p. x < 0 then
t. x := 180 - t. x
else
if p. y < 0 then
t. x := 360 + t. x;
t. y := sqrt (sqr (p. x) + sqr (p. y));
p := t;
end; (* dec2pol *)
var points: tPoints;
t: tPoint;
i, j: integer;
begin (* main program *)
(* получаем значения массива *)
for i := 1 to N do begin
points [i]. n := i;
read (points [i]. x, points [i]. y);
dec2pol (points [i]);
end;
(* сортируем по значению угла *)
for i := 1 to N - 1 do
for j := i + 1 to N do
if points [j]. x < points [i]. x then begin
t := points [j];
points [j] := points [i];
points [i] := t;
end; (* if *)
(* сортируем по значению радиуса *)
for i := 1 to N - 1 do
for j := i + 1 to N do
if (points [j]. x = points [i]. x) and (points [j]. y < points [i]. y) then begin
t := points [j];
points [j] := points [i];
points [i] := t;
end; (* if *)
(* вывод порядка *)
for i := 1 to N do
writeln (points [i]. n);
end. (* main program *)