Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab4_var6_z2

.pas
Скачиваний:
8
Добавлен:
09.05.2015
Размер:
2.16 Кб
Скачать
{Соединить конечное множество точек на плоскости замкну-
той ломаной линией без самопересечений с вершинами в
этих точках. (Полный перебор не делать; ответом будет по-
рядок обхода точек плоскости.)
Указание: перейти к полярным координатам и упорядочить
точки по значениям угла, а для точек с одинаковым значени-
ем угла — по расстоянию до полюса.}

Program lab4_var6_z2;
Uses GraphABC;
Const N=15; // Количество точек
Var i:byte;
XY:array[1..N]of array[1..2] of integer; // XY[i][1]-координата по X
// XY[i][2]-координата по Y
Polar:array[1..N]of array[1..2]of real;
// Polar[i][1]- угловая координата в полярной системе координат
// Polar[i][2]- радиальная координата в полярной системе координат


Procedure SwapCoords(Num:byte); //процедура обмена значений координат для сортировки
begin
swap(Polar[Num][1],Polar[Num+1][1]);
swap(Polar[Num][2],Polar[Num+1][2]);
swap(XY[Num][1],XY[Num+1][1]);
swap(XY[Num][2],XY[Num+1][2]);
end;


Procedure SORT; //процедура сортировки простым обменом
var i,j:byte;
begin
for i:=1 to N-1 do
for j:=1 to N-1 do
begin
// сравниваем округленные значения угловой координаты
if Round(Polar[j][1])>Round(Polar[j+1][1]) then SwapCoords(j)
// если равны, то сравниваем расстояние до полюса
else if Round(Polar[j][1])=Round(Polar[j+1][1]) then
if Polar[j][2]>Polar[j+1][2] then SwapCoords(j)
end;
end;

BEGIN
setwindowsize(900,600);
randomize;
For i:=1 to N do begin
XY[i][1]:=random(850)+25; //С помощью генератора случайных чисел
XY[i][2]:=random(550)+25; //устанавливаем координаты точек
Polar[i][1]:=arctan(XY[i][2]/XY[i][1])*180/pi; //высчитываем значение угла в градусах
Polar[i][2]:=sqrt(sqr(XY[i][1])+sqr(XY[i][2]));//и расстояние до точки

SetBrushColor(clRed);
Circle(XY[i][1],XY[i][2],3); //Отрисовываем точки
Sleep(333);
end;
Sleep(30000);
SORT; //Сортируем точки

for i:=1 to N-1 do //Соединяем точки линиями согласно сортировки
begin
SetPenWidth(2);
Line(XY[i][1],XY[i][2],XY[i+1][1],XY[i+1][2]);
Sleep(333);
end;

END.
Соседние файлы в предмете Основы алгоритмизации и программирования