Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatica / lin.doc
Скачиваний:
62
Добавлен:
09.04.2015
Размер:
776.19 Кб
Скачать

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

Формальные параметрызадаются при объявлении подпро­граммы,фактические параметры– при вызове подпрограммы. Типы фактических параметров должны быть идентичны типам формальных параметров. Их число должно быть равно числу формальных параметров, должен совпадать и порядок следования фактических параметров с порядком записи формальных. Механизм передачи данных через формальные параметры реализуется с использованием специальной области памяти –стека. По умолчанию размер стека установлен 16384 байта. Можно изменить объем стека в настройках среды Delphi.

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

Синтаксис задания параметров-значений

<секция форм. параметров-значений>::=<имя>{,<имя>}:<имя типа>

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

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

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

<секция форм. параметров-переменн.>::=var<имя>{,<имя>}:<имя типа>

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

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

Входные параметры могут передаваться в подпрограмму как параметры-константы. Синтаксис задания параметров-констант

<секция форм. парам. констант>::= const<имя>{,<имя>}:<имя типа>

Параметры-константы введены для того, чтобы ключевое слово varсохранить за выходными параметрами, а входной параметр мог передаваться по адресу. Компилятор сам определяет, что передавать по адресу, а что как копию. Например, простые переменные передаются как копии, а массивы – по адресу. Изменить параметры-константы внутри подпрограммы нельзя. Вместо параметров-констант можно подставлять выражения, как и для параметров-значений.

ПроцедураExit

Эту процедуру используют для досрочного выхода из подпрограммы.

Пример.

Пусть задан массив вещественных чисел. Найти первый отрица­тельный элемент в этом массиве

type mass= array[1..100] of real;

. . . . . . . . . . .

function Minus(const a1: mass):real;

var i:byte;

begin

for i:=1 to High(a1) do

if a1[i]<0 then begin Result:=a1[i]; Exit end

end;

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

В Паскале допускается использование в качестве параметров процедур и функций других процедур и (или) функций. Формальный параметр-процедура (функция) задается в виде заголовка той процедуры (функции), имя которой может быть задано в качестве фактического параметра – при этом имя такой процедуры (функции) и ее формальные параметры выбираются достаточно произвольным образом. В качестве параметров нельзя использовать процедуры (функции), фактические параметры которых вызываются по имени, т.е. параметрами таких проце­дур могут быть только параметры-значения. Это ограничение снижает гибкость использования процедур, но повышает надежность программ.

Применение процедурных типов требует установления специаль­ного дальнегомеханизма компилирования программы, который можно задать, поместив в начало программы директиву компилятору{$F+}.

Пример.

type f1= function (x: real):real;

. . . . . . . . . . . .

{$F+}

functionfr(x: real):real;

begin fr:=x-cos(x) end;

functionfg(x: real):real;

begin fg:=x*x+sin(x) end;

functionSUM (f:f1;m,k:integer):real;

vari : integer; r : real;

begin r:=0; for i:=m to k do r:=r+f(i); sum:=r end;

Тогда в программе можно записать, например, такой оператор

y:= SUM(fr,1,10)/SUM(fg,5,11)

Соседние файлы в папке Informatica