|
Текст подпрограммы и версий zp13i_p.zip |
Тексты тестовых примеров tzp13i_p.zip |
Вычисление рациональных корней полиномов с целыми коэффициентами.
Подпрограмма ZP13I вычисляет M рациональных корней полинома степени N
A(1) + A(2) X + ... + A(N + 1) XN
с целыми коэффициентами. Ненулевые рациональные корни pi / q i , i = 1, 2,..., M, размещаются в массивах P и Q соответственно.
procedure ZP13I(var A :Array of Integer; N :Integer;
var P :Array of Integer; var Q :Array of Integer;
var M :Integer);
Параметры
| A - | целый одномерный массив длины N + 1, содержащий заданные коэффициенты полинома в порядке возрастания степеней; |
| N - | заданная степень полинома (тип: целый); |
| P, Q - | целые одномерные массивы длины N + 1, содержащие вычисленные рациональные корни pi / q i , i = 1, 2,..., M; |
| M - | целая переменная, содержащая на выходе количество рациональных корней. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
В некоторых случаях последний вычисленный корень может
совпадать по значению с первым. Поэтому массивы P и Q должны
иметь максимальную длину N + 1, а не N.
Пример использования
Unit tzp13i_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP13I_p;
function tzp13i: String;
implementation
function tzp13i: String;
var
_i,M :Integer;
P :Array [0..3] of Integer;
Q :Array [0..3] of Integer;
const
A :Array [0..3] of Integer = ( 3,14,3,-36 );
begin
Result := ''; { результат функции }
ZP13I(A,3,P,Q,M);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
begin
Result := Result + Format('%5d ',[P[_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 3 do
begin
Result := Result + Format('%5d ',[Q[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + Format('%5d ',[M]) + #$0D#$0A;
UtRes('tzp13i',Result); { вывод результатов в файл tzp13i.res }
exit;
end;
end.
Результаты:
P = (-1, 3, -3),
Q = ( 3, 4, 9),
M = 3
|