Текст подпрограммы и версий
avz3r_p.zip  avz3e_p.zip  avz5r_p.zip  avz5e_p.zip 
Тексты тестовых примеров
tavz3r_p.zip  tavz3e_p.zip  tavz5r_p.zip  tavz5e_p.zip 

Подпрограмма:  AVZ3R (модуль AVZ3R_p) (версия AVZ5R)

Назначение

Упорядочивание вектора по возрастанию абсолютных значений его компонент.

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

AVZ3R производит упорядочивание  N последовательно расположенных компонент вектора  А по возрастанию абсолютных значений.

R.С.Singleton, Аlgorithm 347, an efficient algorithm for sorting with minimal storage, CACM, 12, 3, 1969.

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

procedure AVZ3R(var A :Array of Real; N :Integer);

Параметры

A - вещественный одномерный массив размера по крайней мере  N, содержащий компоненты исходного вектора  A; по окончании работы подпрограммы содержит абсолютные значения компонент в возрастающем порядке;
N - заданное число упорядочиваемых компонент (тип: целый).

Версии

AVZ3E - упорядочивание вектора, заданного с расширенной (Extended) точностью, по возрастанию абсолютных значений его компонент.
AVZ5R - упорядочивание вектора по возрастанию значений его компонент.
AVZ5E - упорядочивание вектора, заданного с расширенной (Extended) точностью, по возрастанию значений его компонент.

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

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

 

В подпрограмах АVZ3E и AVZ5E параметр  А должен иметь тип Extended.

По окончании работы подпрограмм АVZ5R и АVZ5E массив  А содержит компоненты исходного вектора в возрастающем порядке.

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

1.
Unit Tavz3r_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AVZ3R_p;

function Tavz3r: String;

implementation

function Tavz3r: String;
var
N,_i :INteger;
const
A :Array [0..9] of Real = ( -1.0,1.5,-2.0,2.5,-3.0,3.5,-4.0,4.5,-5.0,5.5 );
begin
Result := '';
N := 10;
AVZ3R(A,N);
Result := Result + #$0D#$0A;
for _i:=0 to 9 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 5)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('Tavz3r',Result);  { вывод результатов в файл Tavz3r.res }
exit;
end;

end.
      

Результат:

       А = (1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5., 5.5)

2.
Unit Tavz5r_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AVZ5R_p;

function Tavz5r: String;

implementation

function Tavz5r: String;
var
N,_i :INteger;
const
B :Array [0..9] of Real = ( - 1., 1.5, - 2., 2.5, - 3., 3.5, - 4., 4.5, - 5., 5.5 );
begin
Result := '';
N := 10;
AVZ5R(B,N);
Result := Result + #$0D#$0A;
for _i:=0 to 9 do
 begin
  Result := Result + Format('%20.16f ',[B[_i]]);
  if ( ((_i+1) mod 5)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('Tavz5r',Result);  { вывод результатов в файл Tavz5r.res }
exit;
end;

end.
      

Результат:

       B = (- 5., - 4., - 3., - 2., - 1., 1.5, 2.5, 3.5, 4.5, 5.5) .