Текст подпрограммы и версий zp38r_p.zip zp38e_p.zip |
Тексты тестовых примеров tzp38r_p.zip tzp38e_p.zip |
Вычисление произведения двух полиномов с вещественными коэффициентами.
ZP38R вычисляет М первых коэффициентов полинома
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 ZP38R(NP :Integer; var A :Array of Real; M :Integer; var B :Array of Real; L :Integer; var C :Array of Real; var K :Integer);
Параметры
NP - | заданная степень полинома А (Х) (тип: целый); |
A - | вещественный вектор длины NР + 1, содержащий коэффициенты заданного полинома А (Х) в порядке возрастания степеней; |
L - | заданная степень полинома В (Х) (тип: целый); |
B - | вещественный вектор длины L + 1, содержащий коэффициенты заданного полинома В (Х) в порядке возрастания степеней; |
M - | заданное число искомых коэффициентов полинома С (Х) (тип: целый); |
C - | вещественный вектор длины М, содержащий вычисленные коэффициенты полинома С (Х) в порядке возрастания степеней; |
K - | целая переменная, значение которой в результате работы подпрограммы полагается равным R + S. |
Версии
ZP38E - | вычисление произведения двух полиномов с вещественными коэффициентами с расширенной (Extended) точностью. При этом векторы А, В и С должны иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit tzp38r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, ZP38R_p; function tzp38r: String; implementation function tzp38r: String; var NP,M,L,_i,K :Integer; C :Array [0..4] of Real; const A :Array [0..2] of Real = ( 2.0,-3.0,1.0 ); B :Array [0..2] of Real = ( 12.0,-7.0,1.0 ); begin Result := ''; { результат функции } NP := 2; M := 4; L := 2; ZP38R(NP,A,L,B,M,C,K); Result := Result + Format('%10d %10d %10d %10d ',[NP,L,M,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 2 do begin Result := Result + Format('%20.16f ',[B[_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 ',[C[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('tzp38r',Result); { вывод результатов в файл tzp38r.res } exit; end; end. Результаты: С(1) = 24. , С(2) = - 50. , С(3) = 35. , C(4) = - 10. , C(5) = 1. , K = 0