Текст подпрограммы и версий
zp14r_p.zip  zp14c_p.zip 
Тексты тестовых примеров
tzp14r_p.zip  tzp14c_p.zip 

Подпрограмма:  ZP14R (модуль ZP14R_p)

Назначение

Вычисление корней квадратного уравнения с вещественными коэффициентами.

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

Подпрограмма 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