Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi -Мет по лабраб_ Часть_2.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Лабораторная работа № 10. Программирование с использованием функций и процедур. Процедурные типы. Создание модулей

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

10.1. Краткие теоретические сведения

10.1.1. Объявление и описание функций и процедур

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

Например, оператор

R := 5·F(x);

вызывает функцию F с аргументом X, умножает возвращенное ею значение на 5 и присваивает результат переменной R.

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

F(x);

В этом случае возвращаемое функцией значение игнорируется.

Функция описывается следующим образом:

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

<тип возвращаемого значения>;

<объявление локальных переменных, типов, констант,

описание вложенных функций и процедур>

begin

<операторы тела функции>

end;

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

Список параметров и объявления локальных элементов и вложенных процедур не обязательны. Если список параметров отсутствует, то скобки после имени функции не ставятся.

Формы описания списка параметров будут рассмотрены позднее. В простом случае это список имен формальных параметров с указанием их типов. Например, объявление:

function FSum(X1, X2: real; A: integer): real;

объявляет функцию с именем FSum, с тремя параметрами X1, Х2 и А, из которых первые два типа геа1, а последний – integer. Тип возвращаемого результата – геаl. Имена параметров X1, Х2 и А – локальные, т.е. они имеют значение только внутри данной функции и никак не связаны с именами аргументов, переданных при вызове функции. Значения этих параметров в начале выполнения функции равны значениям аргументов на момент вызова функции.

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

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

begin

FSum := A*(X1+X2);

end;

или

begin

Result := A*(X1+X2);

end;

Результат работы обеих приведенных выше функций будет одинаковым. Но переменная Result имеет одно принципиальное отличие от имени функции. Имя функции – это не переменная. Оно может фигурировать только в левой части оператора присваивания и не может входить ни в какие выражения. А Result – это обычная переменная. Поэтому, например, приведенный выше код можно было бы переписать следующим образом:

begin

Result := X1+X2;

Result := Result*A;

end;

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

В Object Pascal существует процедура Exit, которая обеспечивает выход из функции или процедуры в любом месте тела программы. Например, приведенный выше текст мог бы быть записан так:

begin

Result := X1+X2;

if (A=1) then exit;

Result := Result*A;

end;

Объявление процедуры практически ничем не отличается от объявления функции, кроме того, что для процедуры не указывается возвращаемое значение:

procedure <имя процедуры> (<список параметров>);

<объявления локальных переменных, типов, констант, описания вложенных функций и процедур>

begin

<операторы тела процедуры>

end;

Например:

procedure Pr1(S: string);

Form1.Label1.Caption := s;

end;

Вызов этой процедуры может иметь вид:

Pr1 (' Привет ! ');

При передаче в функции и процедуры в качестве параметров коротких строк не допускается включение в объявление спецификации длины строки. Например, объявление:

procedure Check(S: string[2]);

вызовет при компиляции сообщение об ошибке. Но можно включать в объявление тип короткой строки, описанный заранее:

type TString2 = string[2];

procedure Check(S:TSstring2);