IPB

> Лекция №8.5: Процедуры и функции
Чат
Форум
Загрузка...
 

страницы: 1 2 3 4 5

Содержание

Открытые параметры

Открытые параметры — это массивы и строки неопределённой длины. Открытым параметром может стать только параметр–переменная. Возможность работать с открытыми параметрами в подпрограммах появилась в версии Turbo Pascal 7.0.

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

В параметр, который является открытым массивом, можно передавать как аргумент массив любой длины и размерности. Единственное ограничение: типы компонент у этих двух массивов должны совпадать.

В заголовке подпрограммы открытый параметр–массив описывается по следующему шаблону:

var <имя_параметра> : array of <тип_компонентов_массива>

Например, если описано

procedure proc6 (var a : array of Byte);

то аргументом могут стать такие массивы:

a1 : array[1 .. 100] of Byte;
a2 : array[-10 .. 10] of Byte;
a3 : array[1 .. 2, 1 .. 3] of Byte;

Компоненты открытого параметра–массива нумеруются, начиная с нуля — этим достигается единообразие обращения к массивам переменной длины.

Если в качестве аргумента поступил многомерный массив, его компоненты «вытягиваются» в одну строку: сначала все компоненты первой строки массива, затем — второй строки и т. д. Например, если массив а3 имеет значения

1 2 3
4 5 6

то внутри процедуры proc6 параметр а будет иметь уже следующий вид:

1 2 3 4 5 6

причём, компоненты двух массивов будут соотноситься так:

a[0]a[1]a[2]a[3]a[4]a[5]
a3[1, 1]a3[1, 2]a3[1, 3]a3[2, 1]a3[2, 2]a3[2, 3]
Открытые строки

Поскольку строки — это массивы символов, то они тоже могут стать открытыми параметрами. Описывается это следующим образом:

var <имя_параметра> : String

Например:

function func6 (var s : String) : Byte;

Длина такого параметра будет автоматически скорректирована в соответствии с длиной строки–аргумента.

Процедурный тип данных

Имена подпрограмм могут выступать в роли аргументов для других подпрограмм.

Описание

В разделе type процедурный тип данных задаётся одним из следующих способов:

<имя_типа> = function[(<список_параметров>)]:<тип_результата>;

или

<имя_типа> = procedure[(<список_параметров>)];

Например:

type func = function(a, b : Integer) : Integer;
Аргументы

Аргументами, которые можно передать в параметр процедурного типа, могут быть только подпрограммы первого уровня вложенности, чьё объявление полностью соответствует этому типу. Кроме того, объявления подпрограмм, которые могут стать аргументами, необходимо снабдить ключевым словом far, означающим, что программа будет использовать не только основной сегмент данных.

Например, для параметра, имеющего описанный выше тип func, аргументами могут послужить такие функции:

function min(a, b : Integer) : Integer; far;
begin
 if a > b then
   min := b
 else
   min := a
end;

и

function max(a, b : Integer) : Integer; far;
begin
 if a < b then
   max := b
 else
   max := a
end;
Вызов

Приведём пример подпрограммы, имеющей параметр процедурного типа:

procedure count(i, j : Integer; f : func);
var c : Integer;
begin
 {...}
  c := f(i, j);
 {...}
end;

Теперь, если будет осуществлён вызов count(x, y, min), то в локальную переменную с запишется минимум из x и y. Если же вызвана будет count(x, y, max), то в локальную переменную с запишется максимум из x и y.

страницы: 1 2 3 4 5

Примечания

 
 К началу страницы 
 

Код для вставки: :: :: :: ГОСТ ::
Поделиться: //
 



-
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"