Function Prod(a:real;n:integer):real;
var
i:integer;
p:real;
begin
p:=1;
for i:=1 to abs(n) do p:=p*a;
if n<0 then Prod:=1/p<br> else Prod:=p
end;
function Pow(a, b: real): real;
var
p:integer;
begin
if b=Int(b) then Pow:=Prod(a,Trunc(b))
else Pow := exp(b * ln(a))
end;
var
a, c, x, y, p1, p2,pp: real;
begin
a := 1; c := 2; x := -1;
p1 := 3 * abs(sqr(a) - 5 * Pow((tan(sqr(c))), 3));
p2 := 4 * Pow(cos(5 * sqr(sin(x))), 3) * cos(x);
p2 := p2 / (5 * Pow(sin(3 * x), 3 * x));
y := p1 + sqrt(p2 - 4 * sqrt(a) / (5 * Pow(tan(c), 5)));
Writeln('a=', a, ', c=', c, ', x=', x, ', y=', y:0:6)
end.
Тестовое решение:
a=1, c=2, x=-1, y=20.412194
В этой формуле заложен "подводный камень".
При х=-1 получается отрицательное значение sin(3x), которое надо возводить в степень 3х. В компьютерных расчетах определяется операция возведения в степень путем последовательного умножения, когда показатель степени - натуральное число, а также операция возведения в любую степень может быть выполнена через логарифм и экспоненту, но только при неотрицательном основании степени.
Считая вручную, мы бы, конечно, сделали преобразование, избавившись от отрицательной степени:
, но компьютер сам этого сделать не может, поэтому пришлось написать две функции, построив на их основе возведение в степень Pow(a,b).