Текст подпрограммы и версий 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