Краткая справка по языку программирования Turbo Pascal

Открытые параметры-массивы



Открытые параметры-массивы

Открытые параметры-массивы дают возможность передавать в подпрограмму массивы, размер которых не фиксируется в объявлении подпрограммы. Этот механизм позволяет создавать максимально гибкие и универсальные подпрограммы для обработки массивов произвольного размера.

Синтаксис описания открытых параметров-массивов:

ИмяПодпрограммы ( 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.



Содержание раздела