Шаг 99.
Открытые параметры-массивы для передачи параметров одинакового типа

    На этом шаге мы рассмотрим использование параметров-массивов для передачи параметров.

    В заголовке процедуры открытые параметры-массивы описываются следующим образом:

    procedure OpenVector   (Vector: array of TypeVector) ;

    Открытый параметр-массив может быть параметром-значением, параметром-константой или параметром-переменной.

    Передаваемые фактические параметры должны по типу совпадать с описанным типом TypeVector, но по размерности они могут быть различными: как простой переменной типа TypeVector, так и массивом любой мерности.

    Гибкость при передаче массивов различной размерности получена за счет единообразия представления этих массивов как формальных параметров. Все формальные открытые параметры-массивы в рамках процедуры автоматически описываются как массивы с нулевой базой (нулевой нижней границей) указанного в заголовке типа:

    array  [ 0..N-1] of TypeVector;
где N - число элементов в фактическом параметре.

    Другими словами, истинный диапазон изменения индекса фактического параметра-массива отображается в диапазон изменения индекса от 0 до N - 1.

    Для определения характеристик переданного фактического параметра-массива в теле процедуры используются стандартная функция Low, которая всегда возвращает 0, стандартная функция High, которая возвращает индекс последнего элемента в формальном параметре-массиве, и функция SizeOf, которая возвращает размер фактического параметра-массива.

    С помощью открытых параметров-массивов можно решать проблемы, аналогичные рассмотренной в предыдущем примере. Однако открытые параметры-массивы обладают меньшей гибкостью, чем бестиповые параметры, поскольку в данном случае в качестве фактических параметров могут быть массивы только одного типа.

    Для сравнения с использованием бестиповых параметров, приведем для открытых параметров-массивов такую же процедуру, как в предыдущем примере:

const
  m = 10;
  n = 15;
type
  TVector1 = array [1..m] of Byte;
  TVector2 = array [1..n] of Byte;
var
  Vector1 : TVector1;
  Vector2 : TVector2;
{--------------------------------------------------}
procedure SortVector ( var Vector : array of Byte ) ;
var
  Min     : Byte;
  Imin    : Word;
  i, j    : Word;
begin
  for i := 0  to High (Vector) do
  begin
    Min  := Vector[i];
    Imin := i;
    for j := i+1 to High (Vector) do 
      if Vector [j] < Min then
      begin
        Min  := Vector[j];
        Imin := j
      end;
    Vector[Imin] := Vector[i];
  end;
end;
{--------------------------------------------------}
begin
  .   .   .   .   .
  SortVector (Vector1);
  SortVector (Vector2);
  .   .   .   .   .
end.

    На следующем шаге мы рассмотрим конструкторы открытых параметров-массивов.




Предыдущий шаг Содержание Следующий шаг