Текст подпрограммы и версий
avz4r_p.zip  avz4e_p.zip  avz6r_p.zip  avz6e_p.zip 
Тексты тестовых примеров
tavz4r_p.zip  tavz4e_p.zip  tavz6r_p.zip  tavz6e_p.zip 

Подпрограмма:  AVZ4R (модуль AVZ4R_p) (версия AVZ6R)

Назначение

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

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

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

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

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

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

Параметры

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

Версии

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

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

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

 

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

Компонентам целого вектора IР перед началом работы подпрограмм должны быть присвоены следующие значения:

              IР(1) = 1 ,  IР(2) = 2 , ... ,  IР(N) = N . 

В ходе работы подпрограмм над компонентами вектора IР производятся те же перестановки, что и над компонентами вектора  А. В общем случае вектор IР может содержать на входе любую подстановку.

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

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

1.
Unit Tavz4r_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AVZ4R_p;

function Tavz4r: String;

implementation

function Tavz4r: String;
var
NA,_i :Integer;
const
A :Array [0..9] of Real = ( 10.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0,1.0 );
IРА :Array [0..9] of Integer = ( 1,2,3,4,5,6,7,8,9,10 );
begin
Result := '';
NA := 10;
AVZ4R(A,NA,IPA);
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;
Result := Result + #$0D#$0A;
for _i:=0 to 9 do
 begin
  Result := Result + Format('%5d',[IPA[_i]]);
  if ( ((_i+1) mod 1)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('Tavz4r',Result);  { вывод результатов в файл Tavz4r.res }
exit;
end;

end.

Результаты:

       А     =  (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
       IPA  =  (10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

2.
Unit Tavz6r_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AVZ6R_p;

function Tavz6r: String;

implementation

function Tavz6r: String;
var
NB,_i :Integer;
const
B :Array [0..9] of Real = ( -1.,-2.,-3.,-4.,-5.,-6.,-7.,-8.,-9.,-10. );
IРB :Array [0..5] of Integer = ( 1,2,3,4,5 );
begin
Result := '';
NB := 5;
AVZ6R(B,NB,IPB);
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;
Result := Result + #$0D#$0A;
for _i:=0 to 9 do
 begin
  Result := Result + Format('%5d',[IPB[_i]]);
  if ( ((_i+1) mod 1)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('Tavz6r',Result);  { вывод результатов в файл Tavz6r.res }
exit;
end;

end.

Результаты:

       B     =  (- 5, - 4, - 3, - 2, - 1, - 6, - 7, - 8, - 9, - 10)
       IPB  =  (5, 4, 3, 2, 1)