Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
выш.мат. методичка.DOC
Скачиваний:
31
Добавлен:
13.02.2015
Размер:
1.71 Mб
Скачать

10.3.2. Параметры-переменные

При передаче параметров-переменных в подпрограмму фактически через стек передаются их адреса в порядке, объявленном в заголовке подпрограммы. Следовательно, подпрограмма имеет доступ к этим параметрам и может их изменять. Параметр-переменная указывается в заголовке подпрограммы аналогично параметру-значению, но только перед именем параметра записывается зарезервированное слово vаг. Действие слова vаг распространяется до ближайшей точки с запятой, т. е. в пределах одной труппы.

Пример.

procedure МахМin(А: tArr; vаr Мах, Мin: Rеа1; N: Word);

Здесь Мах, Мin - параметры-переменные, А и N - параметры значения. Тип параметров-переменных может быть любым, включая и файловый. При вызове подпрограммы на месте параметра-переменной в качестве факти­ческого параметра должна использоваться переменная идентичного типа (см. п. 9.1). Так если формальный параметр имеет тип, определенный следующим образом:

tуре tАrr = аrrау[1..100] оf Integer;

то и фактический параметр должен быть переменной или типизированной конс­тантой типа 1Агг.

Пример. Функция вычисления максимального элемента в массиве.

Модифицируем подпрограмму примера п. 10.3.1, используя в качестве первого параметра параметр-переменную:

function Max(var Mas: tArr; N: Вуtе): Integer;

var Ма: Integer;

i: Byte;

begin

Ма := Маs[1];

for i:= 2 to N do

if Ma<Mas[i] then

Ма := Маs[i];

Мах := Ма

end;

Этот вариант лучше предыдущего тем, что в данном случае в стеке не создает­ся копия исходного массива, что улучшает быстродействие и экономит память. Однако при такой передаче параметра возможно его нежелательное изменение. (Такой вариант передачи параметра допустим только в таких небольших подпро­граммах, как в данном примере, когда программист может проконтролировать отсутствие несанкционированного изменения параметра). Недостаток же, связан­ный с тем, что подпрограмма может работать только с одним типом массивов остается.

10.3.3. Параметры-константы

Часто в качестве параметра в подпрограмму следует передать ту или иную переменную, но изменять ее подпрограмма не должна. В этом случае нежелательно передавать этот параметр как параметр-переменную. Можно его передать как параметр-значение, однако, .если. эта переменная имеет большой размер (массив, запись и т.д.), то копия такого параметра займет большую часть стека и даже может его переполнить. Это же приводит и к уменьшению быстродействия программы. В этой ситуации параметр лучше передать как параметр-константу. Такой параметр, если он структурированного, типа, передается своим, адресом но, предусматривается защита от его изменения. Использовать параметр-константу можно только в версии 7.0.

Параметр-константа указывается в заголовке подпрограммы аналогично параметру-значению, но перед именем параметра записывается зарезервирован­ное слово const. Действие слова const распространяется до ближайшей точки с запятой, т. е. в пределах одной группы.

Пример.

function NewString (соnst S: string): string;

Тип параметра-значения может быть любым за исключением файлового. При вызове подпрограммы на месте параметра-переменной в качестве факти­ческого параметра можно использовать любое выражение совместимого для присваивания типа (см. п. 9.3), не содержащего файловую компоненту.

Параметр-константу нельзя передавать в другую подпрограмму в качестве фа­ктического параметра.

Пример, Функция вычисления максимального элемента в массиве.

В примере п. 10.3.1 используем в качестве первого параметра пара­метр-константу

function Max(const Mas: tArr; N: Вуtе): Integer;

var Ма: Integer;

i: Byte;

begin

Ма := Маs[1];

for i:= 2 to N do

if Ma<Mas[i] then

Ма := Маs[i];

Мах := Ма

end;