Код на PASCAL !!!!!!

Приложения:

Ответы

Ответ дал: Аноним
0
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
  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х. В компьютерных расчетах определяется операция возведения в степень путем последовательного умножения, когда показатель степени - натуральное число, а также операция возведения в любую степень может быть выполнена через логарифм и экспоненту, но только при  неотрицательном основании степени.
Считая вручную, мы бы, конечно, сделали преобразование, избавившись от отрицательной степени:
sin^{-3}(-3)= frac{1}{sin^3(-3)} , но компьютер сам этого сделать не может, поэтому пришлось написать две функции, построив на их основе возведение в степень Pow(a,b).


Вас заинтересует