Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр_пас_3.doc
Скачиваний:
114
Добавлен:
04.11.2018
Размер:
13.31 Mб
Скачать

2.6.3. Формальные и фактические параметры

Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к этой подпрограмме (количества параметров, их последовательность и типы). Они задаются в заголовке подпрограммы в виде списка, разбитого на группы, разделенные точками с запятой. В группы включаются однотипные параметры одной категории.

Все формальные параметры можно разбить на следующие категории:

  1. параметры-значения;

  2. параметры-переменные;

  3. параметры процедурного типа.

Тип формального параметра может быть любым, однако, в заголовке подпрограммы нельзя вводить определение нового типа.

Например, нельзя писать: Function Max( a: array[ 1..100] of real ): real;.

Чтобы правильно записать этот заголовок, следует в основной программе ввести имя нового типа, задающего массив, а затем использовать это имя в заголовке для описания формального параметра:

Type tarr = array[1..100] of real;

Function Max( a: tarr ): real;

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

2.6.4. Параметры - значения

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

Параметры - значения при вызове подпрограммы пересылаются в нее в виде копий значений фактических параметров. Из этого следует, что если даже подпрограмма изменит полученное значение параметра, в вызывающей программе никаких изменений не произойдет.

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

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

Например: Procedure F( i: integer; Var k,l: real; a: real ); .

В этом примере i, a - параметры значения, k,l - параметры - переменные.

При передаче подпрограмме фактического параметра - переменной, ей передается адрес параметра, т.е. подпрограмма получает доступ к памяти вызывающей программы. Поэтому если в процессе выполнения подпрограммы значение такого фактического параметра будет изменено, изменение коснется данных основной программы.

Выходные параметры процедур всегда должны быть параметрами - переменными, иначе результаты вычислений не будут доступны вызывающей программе.

2.6.6. Параметр - массив

Массив это производный тип данных. Поэтому для того чтобы передать массив в качестве параметра в подпрограмму, необходимо в разделе типов программы ввести новый тип, задающий требуемый массив. Именем этого типа описываются формальный параметр в заголовке подпрограммы и соответствующий ему фактический параметр. Рассмотрим такой параметр на примере функции, определяющей максимальный элемент в одномерном массиве.

Program MAXIM;

{ задание нового типа - одномерного массива из 100

вещественных чисел}

Type vect = array[ 1..100 ] of real;

Var x: vect;

k: integer;

v: real;

{ функция, находящая значение максимального

элемента в массиве }

{ входной параметр a - исходный массив, n - число

элементов в нем}

Function Max( a: vect; n: integer ): real;

Var I: integer;

s: real;

Begin

s := a[1];

For i := 1 to n Do

If a[i] > s Then s := a[i];

Max := s

End;

{ раздел операторов программы }

Begin

{ ввод массива x }

Writeln( ‘введите массив’ );

For k := 1 to 100 Do

Readln( x[k] );

{ обращение к функции Max }

v := Max( x, 100 );

Write( ‘max x = ‘, v)

End.

Функция Max из рассмотренного примера может быть вызвана только для массива, описанного типом vect.

Как написать подпрограмму, применимую для любого массива, рассмотрим в следующем разделе.