Ладно, делать нечего, придётся ради сохранения собственных нервных клеток сокращать сущности, а то так придётся из примитивной курсовой диссертацию писать. ;)
Вообщем попробуем сузить круг условий:
пирамида имеет пять вершин.
Но и тогда у меня возникают непонятки.
Во-первых, если измерять площадь всех сочетаний, то тогда, как правильно сказал Amro, возникает перебор с количеством необходимых площадей. Как реализовывать правильную калькуляцию площадей краней?
Во-вторых, как реализовывать выбор вершины, которая не лежит в основании. Наверное придётся тупо указывать z[2-4] значение, равное z[1].
Ну и вот собсно половина кода. Вторую половину, а именно как подсчитывать площадь я не знаю.
Может подскажите?Код
Var S: real;
x: Array [1..5] of Real;
y: Array [1..5] of Real;
z: Array [1..5] of Real;
i,n,m: Integer;
{процедура вычисления площади треугольника}
procedure plosh(x_1,y_1,z_1,x_2,y_2,z_2,x_3,y_3,z_3:real);
var
a,b,c,p,t:real;
begin
a:=sqrt(sqr(y_2-y_3)+sqr(x_2-x_3)+sqr(z_2-z_3));
b:=sqrt(sqr(y_1-y_3)+sqr(x_1-x_3)+sqr(z_1-z_3));
c:=sqrt(sqr(y_1-y_2)+sqr(x_1-x_2)+sqr(z_1-z_2));
p:=(a+b+c)/2;
t:=p*sqrt((p-a)*(p-b)*(p-c));
end;
{заносим в массив координаты вершин}
for i:=1 to 5 do
begin
if i:=1 or 5 then
begin
write('X',i,' -> '); readln(x[i]);
write('Y',i,' -> '); readln(y[i]);
write('Z',i,' -> '); readln(z[i]);
end;
else
begin
write('X',i,' -> '); readln(x[i]);
write('Y',i,' -> '); readln(y[i]);
z[i]:=z[1]
writeln;
end;
end;
end;
{начинаем перебор всех вариантов сочетания вершин, создающих треугольник}
for i:=1 to 5 do
for n:=1 to 5 do
for m:=1 to 5 do
begin
if ((i<>n) and ((n<>m) and (i<>m))) then
begin
plosh(x[i],y[i],z[i],x[n],y[n],z[n],x[m],y[m],z[m]);
end;
end;