Открытые параметры-массивы
Открытые параметры-массивы
Открытые параметры-массивы дают возможность передавать в подпрограмму массивы, размер которых не фиксируется в объявлении подпрограммы. Этот механизм позволяет создавать максимально гибкие и универсальные подпрограммы для обработки массивов произвольного размера.
Синтаксис описания открытых параметров-массивов:
ИмяПодпрограммы ( VAR P : array of ТипЭлементов );
Это единственное исключение из правила, согласно которому типы формальных параметров в заголовках подпрограмм могут задаваться только посредством идентификаторов (см. замечание выше). Подпрограмма, содержащая открытый массив в списке своих формальных параметров, может быть вызвана с массивом ЛЮБОГО размера (типы элементов массивов из формального и фактического параметров должны, естественно, совпадать). Заметим, что в качетсве открытых массивов допускаются ТОЛЬКО одномерные массивы [1].
Реальные границы переданного в подпрограмму массива можно определить используя две функции Low и High. Эти функции предназначены для определения граничных значений типов и переменных. В данном случае функция Low будет всегда возвращать 0, а функция High - верхнее значение индекса равное (n-1), где n-число элементов в переданном массиве. Например:
PROGRAM
TestOpenArray;
VAR
A : array[-5..5] of Byte;
PROCEDURE P( var V : array of Byte );
BEGIN
WriteLn('Нижний индекс V: ', Low(V));
WriteLn('Верхний индекс V: ', High(V));
END;
BEGIN
WriteLn('Нижний индекс A: ', Low(A));
WriteLn('Верхний индекс A: ', High(A));
P(A);
ReadLn;
END.
Выполнение этой программы приведет к выводу на экран следующей информации:
Нижний индекс А: -5
Верхний индекс А: 5
Нижний индекс V: 0
Верхний индекс V: 10
В качестве полезного примера приведем функцию вычисляющую сумму элементов произвольного массива вещественных чисел [1]:
FUNCTION Sum( var V : array of Real ) : Real;
VAR
i : Word;
S : Real;
BEGIN
S := 0;
for i:=Low(V) to High(V) do
S := S + V[i];
Sum := S
END;
[1] Е.А.Зуев, Программирование на языке Turbo Pascal 6.0/7.0 -М.: Радио и связь, 1993.