Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль_Конспект лекций.doc
Скачиваний:
41
Добавлен:
27.05.2015
Размер:
1.39 Mб
Скачать

11.2 Понятие формальных и фактических параметров

При работе с функциями и процедурами следует различать формальные и фактические параметры.

Формальные параметры - это переменные, используемые при описании подпрограммы в её заголовке, а фактические - это те параметры, которые мы передаем подпрограмме при ее вызове. Количество, порядок и типы формальных и фактических параметров должны совпадать. Примеры:

function sin(x: Real): Real;

Здесь переменная х использована для описания заголовка функции, поэтому мы говорим, что этот параметр формальный.

…………….

t:= sin(3.14);

…………….

В этом фрагменте параметр 3.14 используется в выражении при вызове функции, значит это фактический параметр.

………….

t:= sin(u);

…………..

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

Задача: Написать функцию для возведения целых чисел в натуральную степень.

program р11_1;

Var k : integer; { Описание переменных головной программы }

{ Описание функции: хn }

function Istep(x, n: integer) : Longint; { заголовок функции }

{ формальные параметры: x - целое число, n - натуральная степень }

var

i: integer;

p: Longint ;

begin

p:= x;

for i:= 2 to n do p:= p * x;

Istep:= p; { значение функции присваиваем её идентификатору }

end;

{ Тело головной программы }

Begin

Writeln ('3 в кубе=' , Istep (3, 3)); { в этом операторе при обращении к

функции Istep оба фактических параметра равны 3 }

k := 5;

Writeln ('5 в шестой степени=', Istep (k, 6)); { в этом операторе при

обращении к функции Istep первый фактический

параметра равен переменной k, второй -6 }

Writeln ( Istep (k, 6 mod k +1)); { в этом операторе при обращении к

функции Istep первый фактический параметра равен переменной k,

второй - арифметическому выражению целого типа }

end.

11.3 Способы передачи параметров в подпрограмму через заголовок

Связь между головной программой (то есть программой, которая обращается к другой подпрограмме) и подпрограммой (процедурой или функцией) осуществляется через список параметров, указанный в заголовке. Если внутри подпрограммы не требуется изменять значение параметра, то в подпрограмму из головной программы передаётся копия этого параметра. Такой способ передачи параметра называется передачей по значению. В примерах предыдущего пункта передача параметров осуществляется как раз по значению.

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

Необходимо уяснить следующее:

- на месте фактического параметра, в случае передаче его по ссылке, в строке вызова подпрограммы может быть записана только переменная, запись константы или выражения приведет к ошибке;

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

Пример:

procedure GetDate(var Year, Month, Day, DayOfWeek: Word);

В процедуре GetDate параметры Year, Month, Day, DayOfWeek передаются по ссылке, так как эти переменные вычисляются внутри процедуры и являются результатом ее работы. При вызове данной процедуры фактическими параметрами могут быть только переменные. В обратном случае вызов процедуры приведет к ошибке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]