Текст подпрограммы и версий
zp39r_p.zip  zp39e_p.zip 
Тексты тестовых примеров
tzp39r_p.zip  tzp39e_p.zip 

Подпрограмма:  ZP39R (модуль ZP39R_p)

Назначение

Деление двух полиномов с вещественными коэффициентами.

Математическое описание

ZP39R вычисляет М первых коэффициентов полинома

        C(X)  =  XK*( C(1) + C(2)*X + ... + C(M)*X(M - 1) + ... )  , 

такого, что  С (Х) = А (Х) / В (Х), где  А (Х) и  В (Х) - заданные полиномы степени NР и L соответственно.

        A(X)  =  A(1) + A(2)*X + A(3)*X2 + ... + A(NP + 1)*XNP  ,

        B(X)  =   B(1) + B(2)*X + B(3)*X2 + ... + B(L + 1)*XL  , 

у которых коэффициенты  А ( I ),  I = 1, 2, 3, ..., NР + 1 и  В ( I ),  I = 1, 2, 3, ..., L + 1 являются вещественными. Здесь К = R - S, где R и S представляют собой число первых коэффициентов полиномов  А (Х) и  В (Х), равных 0.

Использование

procedure ZP39R(NP :Integer; var A :Array of Real; L :Integer;
                var B :Array of Real; M :Integer;
                var C :Array of Real; var K :Integer);

Параметры

NP - заданная степень полинома  А (Х) (тип: целый);
A - вещественный вектор длины NР + 1, содержащий коэффициенты заданного полинома  А (Х) в порядке возрастания степеней;
L - заданная степень полинома  В (Х) (тип: целый);
B - вещественный вектор длины L + 1, содержащий коэффициенты заданного полинома  В (Х) в порядке возрастания степеней;
M - заданное число искомых коэффициентов полинома  С (Х) (тип: целый);
C - вещественный вектор длины М, содержащий вычисленные коэффициенты полинома  С (Х) в порядке возрастания степеней;
K - целая переменная, значение которой в результате работы подпрограммы полагается равным R - S.

Версии

ZP39E - деление двух полиномов с вещественными коэффициентами с расширенной (Extended) точностью. При этом векторы А, В и С должны иметь тип Extended.

Вызываемые подпрограммы: нет

Замечания по использованию: нет

Пример использования

Unit tzp39r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP39R_p;

function tzp39r: String;

implementation

function tzp39r: String;
var
NP,L,M,_i,K :Integer;
C :Array [0..5] of Real;
const
A :Array [0..2] of Real = ( 0.0,1.0,2.0 );
B :Array [0..4] of Real = ( 0.0,0.0,1.0,2.0,3.0 );
begin
Result := '';  { результат функции }
NP := 2;
L := 4;
M := 6;
ZP39R(NP,A,L,B,M,C,K);
Result := Result + Format('%10d %10d %10d %10d ',[NP,M,L,K]) + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
 begin
  Result := Result + Format('%20.16f ',[B[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
 begin
  Result := Result + Format('%20.16f ',[C[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tzp39r',Result);  { вывод результатов в файл tzp39r.res }
exit;
end;

end.


Результаты:

       С(1) = 1. ,    С(2) = 0. ,       С(3) = - 3. ,    С(4) = 6. ,
       C(5) = - 3.,   C(6) = - 12. ,
       K = - 1