Текст подпрограммы и версий
pa08r_p.zip  pa08e_p.zip 
Тексты тестовых примеров
tpa08r_p.zip  tpa08e_p.zip 

Подпрограмма:  PA08R (модуль PA08R_p)

Назначение

Определение узлов упорядоченной по возрастанию или по убыванию неравномерной сетки, между которыми лежит заданная точка, с использованием информации о ее предположительном местоположении.

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

Пусть заданы узлы сетки  x1, x2,..., xN, упорядоченные либо по возрастанию, либо по убыванию. Подпрограмма PA08R по заданной точке  X вычисляет методом бисекции значение индекса  J, при котором точка  X лежит между узлами  xJ и  xJ + 1 , с использованием значения индекса  JL, определяющим ее предположительное местоположение.

Если  J = 0, то это означает, что точка  X лежит левее узла  x1. Если  J = N, то это означает, что точка  X лежит правее узла  xN .

Использование

procedure PA08R(var XX :Array of Real; N :Integer; X :Real;
                var JL :Integer; var J :Integer);

Параметры

XX - вещественный вектор длины  N, содержащий узлы заданной сетки  x1, x2,..., xN упорядоченной либо по возрастанию, либо по убыванию;
N - количество узлов сетки (тип: целый);
X - заданная точка, местоположение которой ищется по отношению к узлам сетки (тип: вещественный);
JL - значение индекса, определяющего предположительное положение точки  X по отношению к узлам сетки (тип: целый);
J - целая переменная, значение которой полагается равной индексу, при котором точка  X лежит между узлами XX (J) и XX (J + 1).

Версии

PA08E - определение узлов упорядоченной по возрастанию или убыванию неравномерной сетки, между которыми лежит заданная точка, с использованием информации о ее предположительном местоположении в режиме расширенной (Extended) точности. При этом параметры XX и X должны иметь тип Extended.

Вызываемые подпрограммы: нет

Замечания по использованию: нет

Пример использования

Unit TPA08R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, PA08R_p;

function TPA08R: String; 

implementation

function TPA08R: String;
var
N,I,JL,J :Integer;
R,X :Real;
ХХ :Array [0..19] of Real;
label
_1;
begin
Result := '';
N := 20;
R := 0.0;
for I:=1 to N do
 begin
  XX[I-1] := R;
_1:
  R := R+0.2;
 end;
X := 1.7;
JL := 15;
PA08R(XX,N,X,JL,J);
Result := Result + Format('%15.5f %15.5f %5d %5d ',[X,XX[J-1],JL,J])
+ #$0D#$0A;
UtRes('TPA08R',Result);  { вывод результатов в файл TPA08R.res }
exit;
end;

end.

Результат:    J  =  9