Сегодня я вспоминал юность... В те далёкие времена я весьма неплохо программировал на языке Pascal, как показала практика мастерство невозможно потерять... Ну так вот поступило задание написать программку для студентки 1 курса ОмГТУ, данная студентка учится на специальности с модным в данное время названием - "нанотехнологии". Самое смешное что задача которую она не знает как реализовывать решается максимум за 3 часа, достаточно включить мозг и подумать.
Задача такова:
Имеется множество точек на плоскости. Необходимо найти такую группу точек которая формировала бы квадрат с наибольшим периметром.
Данную задачу можно разделить на 3 части:
1. внесение координат
2. группировка координат
3. поиск группы удовлетворяющей условию задачи.
Как ни странно но самым интересным было реализовывать именно третью часть...
получился вот такой код:
Вторая часть задачи тоже весьма интересна... В результате написания кода выяснилось что то что было бы спокойно обработано интерпретатором PHP не может быть откомпилировано в Pascal'e... в итоге получился код с монстрообразным условием:
Завтра я планирую реализовать ввод координат из внешнего файла... Почему не сегодня? да просто сегодня я хочу спать...
Задача такова:
Имеется множество точек на плоскости. Необходимо найти такую группу точек которая формировала бы квадрат с наибольшим периметром.
Данную задачу можно разделить на 3 части:
1. внесение координат
2. группировка координат
3. поиск группы удовлетворяющей условию задачи.
Как ни странно но самым интересным было реализовывать именно третью часть...
получился вот такой код:
function PKvadrata(x1,y1,x2,y2,x3,y3,x4,y4: integer):real;
var a, b, c: real;
quad: real;
Perimetr: real;
begin
a:=sqrt(sqr(x2-x1)+sqr(y2-y1));
b:=sqrt(sqr(x3-x1)+sqr(y3-y1));
c:=sqrt(sqr(x4-x1)+sqr(y4-y1));
if a=b then
begin
quad:=a*sqrt(2);
if c=quad then perimetr:=a*4;
end else
if a=c then
begin
quad:=a*sqrt(2);
if b=quad then perimetr:=a*4;
end else
if b=c then
begin
quad:=b*sqrt(2);
if a=quad then perimetr:=b*4;
end else perimetr:=0;
result:=perimetr;
end;Данная функция используя формулу поиска длинны отрезка по его координатам определяет формируется ли с помощью заданных координат квадрат, и если формируется то вычисляет его периметр.Вторая часть задачи тоже весьма интересна... В результате написания кода выяснилось что то что было бы спокойно обработано интерпретатором PHP не может быть откомпилировано в Pascal'e... в итоге получился код с монстрообразным условием:
for i1:=1 to n do begin
for i2:=1 to n do begin
for i3:=1 to n do begin
for i4:=1 to n do begin
if (i1<>i2) and (i1<>i3) and
(i1<>i4) and (i2<>i3) and
(i2<>i4) and (i3<>i4) then
begin
perimetr:=PKvadrata(massiv[i1].x,massiv[i1].y,
massiv[i2].x,massiv[i2].y,
massiv[i3].x,massiv[i3].y,
massiv[i4].x,massiv[i4].y,);
if Perimetr>IPerimetr then
begin
IPerimetr:=Perimetr;
Massiv2[1]:=Massiv[i1];
Massiv2[1]:=Massiv[i2];
Massiv2[2]:=Massiv[i3];
Massiv2[3]:=Massiv[i4];
end;
end;
end;
end;
end;
end;Завтра я планирую реализовать ввод координат из внешнего файла... Почему не сегодня? да просто сегодня я хочу спать...
Комментариев нет:
Отправить комментарий