Сегодня я вспоминал юность... В те далёкие времена я весьма неплохо программировал на языке 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;
Завтра я планирую реализовать ввод координат из внешнего файла... Почему не сегодня? да просто сегодня я хочу спать...
Комментариев нет:
Отправить комментарий