Задание повышенной сложности 3. Найти число треугольников,
имеющих наименьший периметр.
Задание повышенной сложности 4. Найти параметры k и b для всех
прямых , которые проходят не менее чем через три точки,
заданные в базе фактов.
Задание повышенной сложности 5. Найти прямоугольник
минимальной площади, который бы содержал все точки, заданные в базе
фактов. Стороны прямоугольника параллельны координатным осям.
Код программы который нужно переделать:
implement main
open core, console, math
class facts
point:(integer X, integer Y).
i:real := 0.
class predicates
отрезок:(integer StartX, integer StartY,
integer EndX, integer EndY,
real Длина) nondeterm anyflow.%(o,o,o,o,o).
фильтр:(integer,integer,integer,integer) determ (i,i,i,i).
треугольник:(integer X1, integer Y1,
integer X2, integer Y2, integer X3, integer Y3, real P) nondeterm (o, o, o, o,o, o,o).
clauses
point(1,1). point(1,2). point(1,4).
point(2,1). point(2,2). point(2,4).
point(3,2). point(4,1). point(4,3).
треугольник(X1,Y1,X2,Y2, X3, Y3, P):- point(X1,Y1), point(X2,Y2), point(X3,Y3), %X1 Y1 , X2 Y2,
отрезок(X1,Y1,X2,Y2, D1), отрезок(X3,Y3,X2,Y2, D2), отрезок(X1,Y1,X3,Y3, D3),
P = D1 + D2 + D3, P < i,
i := P, x1 := X1, x2 := X2, x3 := X3, y1 := Y1, y2 := Y2, y3 := Y3.
отрезок(X1,Y1,X2,Y2,D) :- point(X1,Y1), point(X2,Y2),
фильтр(X1,Y1,X2,Y2),
D=sqrt(sqr(X1-X2) + sqr(Y1-Y2)).
фильтр(X1,Y1,X2,Y2) :- X1