|
Текст подпрограммы и версий zp14r_p.zip zp14c_p.zip |
Тексты тестовых примеров tzp14r_p.zip tzp14c_p.zip |
Вычисление корней квадратного уравнения с вещественными коэффициентами.
Подпрограмма ZP14R вычисляет корни квадратного уравнения
A*X2 + B*X + C = 0.0 ,
в котором коэффициенты А, В и С являются вещественными. Вычисленные корни RООТ1 и RООТ2 в общем случае являются комплексными.
Алгоритм, реализованный в подпрограмме, изложен в статье
G.F.Forsythe, What Is a Satisfactory Quadratic Еquation Solver., Сonstructive Аspects of тне Fundamental Тheorem of Аlgebra, В.Dejon and Р.Нenrici eds., Wiley - Interscience, New York, 1969.
procedure ZP14R(A :Real; B :Real; C :Real; var ROOT1 :Complex;
var ROOT2 :Complex; var IERR :Integer);
Параметры
| A, B, C - | заданные коэффициенты квадратного уравнения (тип: вещественный); |
|
ROOT1 - ROOT2 | комплексные переменные, содержащие вычисленные корни квадратного уравнения; |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом |
| IЕRR=65 - | когда старшие коэффициенты А и В равны 0.0; в этом случае первый корень полагается равным комплексному числу (- 3.4Е38, 0.0), а второй (3.4Е38, 0.0); |
| IЕRR=66 - | когда старший коэффициент А равен 0.0; в этом случае второй корень полагается равным комплексному числу (3.4Е38, 0.0). |
Версии
| ZP14C - | вычисляет корни квадратного уравнения с комплексными коэффициентами. Тем самым, коэффициенты А, В и С должны иметь тип Complex. |
Вызываемые подпрограммы
| UTZP10 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм ZР14R и ZР14С. |
Замечания по использованию: нет
1.
Unit tzp14r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP14R_p;
function tzp14r: String;
implementation
function tzp14r: String;
var
IERR :Integer;
A1,A2,A3 :Real;
Z1,Z2 :Complex;
begin
Result := ''; { результат функции }
A1 := 1.0;
A2 := -3.0;
A3 := 2.0;
ZP14R(A1,A2,A3,Z1,Z2,IERR);
Result := Result + Format(' %20.16f %20.16f %20.16f %20.16f %20.16f %20.16f %20.16f %5d ',
[A1,A2,A3,Z1.re,Z1.im,Z2.re,Z2.im,IERR]) + #$0D#$0A;
UtRes('tzp14r',Result); { вывод результатов в файл tzp14r.res }
exit;
end;
end.
Результаты:
RООТ1 = (1.0, 0.0) , RООТ2 = (2.0, 0.0) ,
IERR = 0
2.
Unit tzp14c_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP14C_p;
function tzp14c: String;
implementation
function tzp14c: String;
var
IERR :Integer;
A,B,C,Z1,Z2 :Complex;
begin
Result := ''; { результат функции }
A := Cmplx(1.0,0.0);
B := Cmplx(1.0,3.0);
C := Cmplx(-2.0,1.0);
ZP14C (A,B,C,Z1,Z2,IERR);
Result := Result + Format(' %20.16f %20.16f %20.16f %20.16f %20.16f %20.16f %20.16f %20.16f %20.16f %20.16f %5d ',
[A.re,A.im,B.re,B.im,C.re,C.im,Z1.re,Z1.im,Z2.re,Z2.im,IERR]) + #$0D#$0A;
UtRes('tzp14c',Result); { вывод результатов в файл tzp14c.res }
exit;
end;
end.
Результаты:
RООТ1 = (0.0, - 1.0) , RООТ2 = (- 1.0, - 2.0) ,
IERR = 0