На этом шаге мы рассмотрим использование параметров-массивов для передачи параметров.
В заголовке процедуры открытые параметры-массивы описываются следующим образом:
procedure OpenVector (Vector: array of TypeVector) ;
Открытый параметр-массив может быть параметром-значением, параметром-константой или параметром-переменной.
Передаваемые фактические параметры должны по типу совпадать с описанным типом TypeVector, но по размерности они могут быть различными: как простой переменной типа TypeVector, так и массивом любой мерности.
Гибкость при передаче массивов различной размерности получена за счет единообразия представления этих массивов как формальных параметров. Все формальные открытые параметры-массивы в рамках процедуры автоматически описываются как массивы с нулевой базой (нулевой нижней границей) указанного в заголовке типа:
array [ 0..N-1] of TypeVector;
Другими словами, истинный диапазон изменения индекса фактического параметра-массива отображается в диапазон изменения индекса от 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.
На следующем шаге мы рассмотрим конструкторы открытых параметров-массивов.