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

10 Процедуры и функции

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

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

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

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

10.1. Процедура

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

рrоcedure <имя процедуры>(< список формальных параметров>);

За заголовком могут идти такие же разделы, что и в основной программе. В отличие от основной программы процедура завершается не точкой, а точкой с запятой.

Пример. Процедура ввода N целых чисел.

Пусть в основной программе определен тип:

type tArr = аrrау[1..100] of Integer;

Процедура может иметь вид:

procedure InpInt(vаr Маs: tArr, N: Integer);

{заголовок процедуры со списком формальных параметров проверка N <= 100 - в основной программе}

vаr i: Integer; {локальный параметр - параметр цикла}

begin

WriteLn(‘Введите ’, N,’ целых чисел’);

for i:= to N do

Read (Mas[i])

end.

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

InpInt(M, K);

означает, что вызывается процедура InpInt для ввода К целых чисел в массив М. Естественно, что в этом случае параметр К целого типа, а М -массив типа tArr.

10.2. Функция

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

Первое отличие функции в ее заголовке. Он состоит из слова function, за которым следует имя функции, далее в круглых скобках - список формальных параметров (о формальных параметрах см. п. 10.3), затем через двоеточие запи­сывается тип функции - тип возвращаемого параметра. Функция может возвращать параметры следующих типов: любого порядкового, любого вещественного, стандартного типа PChar, любого указателя, в том числе и типа РСhar.

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

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

function Factorial(N: Вуtе): Longint;

vаr Fасt: Longint;

i: Вуte;

begin

for i:=N-1 down 2 do Fact:=Fact*i;

Factorial:=Fact

end;

Если имя функции внутри ее описания используется не в левой части оператора присваивания, то это означает, что функция вызывает себя рекурсив­но (см. п. 10.6).

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

Part:=Sqr(T)/Factorial(i);

В этом операторе:

Sqr(Т) - вызов стандартной функции возведения в квадрат с фактическим параметром Т;

Factorial(i) - вызов функции, вычисляющей факториал с фактическим параметром i.