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

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

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

    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.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий