Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воробьева Соппа Программирование в Паскаль 2006...doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

8.3. Функции

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

Общий вид описания функции

Описание функции аналогично процедуре, содержит заголовок со списком формальных параметров и тело функции. Связь формальных параметров с фактическими параметрами осуществляется по тем же правилам, что и в процедуре. Для функции также справедливы понятия глобальных и локальных переменных.

Function <имя>(<список формальных параметров>):<тип>;

var {Раздел описания переменных функции}

………….

begin {Раздел операторов функции}

………….

<имя>:=<результат>;

end;

Обращение к функции

В отличие от процедуры, обращение к функции не является специальным оператором, а включается в состав выражения. Результат выполнения функции возвращается в основную программу через имя функции. Обращение к функции записывается аналогично записи стандартной функции (например, sin(x), exp(x) и т.п.) в виде операнда:

<имя функции>(<список фактических параметров>);

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

Пример программы с функцией

Решить предыдущую задачу (см. с. 94) с использованием функции.

Program Primer_2;

Var

a, Z: real;

Function (x: real; n: integer): real;

var

i: integer;

P: real;

begin

P := 1;

for i := 1 to n do P := Px;

ST := P;

end;

Begin {начало основной программы}

writeln(‘Введите число а’);

read(a);

Z := (ST(a, 5) + ST(1/a, 5))/(2 ST(a, 7));

writeln(‘Z=’, Z:6:2);

End.

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

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

8.4. Параметры-массивы

Если мы хотим передать в подпрограмму отдельный элемент

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

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

Type

vect = array[1..10] of real;

matr = array[1..5, 1..8] of real;

В дальнейшем имена типов vect и matr используются, если это необходимо, в любом разделе описания переменных (в основной программе и подпрограмме), например:

Var

X: vect;

A: matr;

Кроме того, объявленные типы могут указываться в списке формальных параметров, что позволяет в качестве параметров (как формальных, так и фактических) использовать массивы (параметры-массивы), например:

Function F (X: Vect; A: Matr): real;

Если по условию задачи в подпрограмме требуется при разных обращениях обрабатывать массивы с разными размерами, то в разделе Type объявляется тип массива с наибольшим размером. Например, при передаче в подпрограмму массивов и в разделе Type надо записать:

Type

Vect = array[1..20] of real;

Тогда по описанию:

Var

X, Y: Vect;

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