Даны координаты четырех точек х1, у1, х2, у2, х3, у3, х4 и у4 найти наибольшую из площадей треугольников, вершины которых находятся в заданных точках (формула герона, максимум из 2-ух чисел). написать на pascal abc два варианта этой программы: 1 - через процедуру, 2 - через функцию.
1)
var
x1,y1,x2,y2,x3,y3,x4,y4:real;
sq1,sq2,sq3,sq4,max:real;
procedure s(a1,b1,a2,b2,a3,b3:real;var sq:real);
var s1,s2,s3,p:real;
begin
s1:=sqrt((a2-a1)*(a2-a1)+(b2-b1)*(b2-b1));
s2:=sqrt((a3-a1)*(a3-a1)+(b3-b1)*(b3-b1));
s3:=sqrt((a3-a2)*(a3-a2)+(b3-b2)*(b3-b2));
p:=(s1+s2+s3)/2;
sq:=sqrt(p*(p-s1)*(p-s2)*(p-s3));
end;
begin
write('x1,y1: '); readln(x1,y1);
write('x2,y2: '); readln(x2,y2);
write('x3,y3: '); readln(x3,y3);
write('x4,y4: '); readln(x4,y4);
s(x1,y1,x2,y2,x3,y3,sq1);
s(x1,y1,x3,y3,x4,y4,sq2);
s(x1,y1,x2,y2,x4,y4,sq3);
s(x2,y2,x3,y3,x4,y4,sq4);
writeln('sq1 = ',sq1:5:2,' sq2 = ',sq2:5:2,' sq3 = ',sq3:5:2,' sq4 = ',sq4:5:2);
if sq1>sq2 then max:=sq1 else max:=sq2;
if sq3>max then max:=sq3;
if sq4>max then max:=sq4;
writeln('max = ',max:5:2);
end.
2)
var
x1,y1,x2,y2,x3,y3,x4,y4:real;
sq1,sq2,sq3,sq4,max:real;
function s(a1,b1,a2,b2,a3,b3:real):real;
var s1,s2,s3,p:real;
begin
s1:=sqrt((a2-a1)*(a2-a1)+(b2-b1)*(b2-b1));
s2:=sqrt((a3-a1)*(a3-a1)+(b3-b1)*(b3-b1));
s3:=sqrt((a3-a2)*(a3-a2)+(b3-b2)*(b3-b2));
p:=(s1+s2+s3)/2;
s:=sqrt(p*(p-s1)*(p-s2)*(p-s3));
end;
begin
write('x1,y1: '); readln(x1,y1);
write('x2,y2: '); readln(x2,y2);
write('x3,y3: '); readln(x3,y3);
write('x4,y4: ');
readln(x4,y4);
sq1:=s(x1,y1,x2,y2,x3,y3);
sq2:=s(x1,y1,x3,y3,x4,y4);
sq3:=s(x1,y1,x2,y2,x4,y4);
sq4:=s(x2,y2,x3,y3,x4,y4);
writeln('sq1 = ',sq1:5:2,' sq2 = ',sq2:5:2,' sq3 = ',sq3:5:2,' sq4 = ',sq4:5:2);
if sq1>sq2 then max:=sq1 else max:=sq2;
if sq3>max then max:=sq3;
if sq4>max then max:=sq4;
writeln('max = ',max:5:2);
end.
Пример:
x1,y1: -5 1
x2,y2: -3 4
x3,y3: -1 2
x4,y4: -1 0
sq1 = 5.00 sq2 = 4.00 sq3 = 7.00 sq4 = 2.00
max = 7