Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
4
Добавлен:
26.04.2015
Размер:
41.47 Кб
Скачать

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

Delphi позволяет выделять фрагменты программ во вспомогательные алгоритмы (ВА) или подпрограммы. Это позволяет писать хорошо структурированные программы. Структурированные программы обычно проще в понимании и отладке. Наличие подпрограмм в языке программирования позволяет применять более совершенные методы при разработке и проектировании сложных программных комплексов.

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

Описание процедур и функций располагается в разделе реализации модуля ( implementation ). Чтобы подпрограмма была глобальной ( то есть могла быть использована в другом модуле ), то ее заголовок необходимо дополнительно поместить в интерфейсный раздел ( interface ).

В теле подпрограммы можно описывать и использовать другие подпрограммы ( локальные ). Вовне нельзя вызывать на выполнение локальные подпрограммы. Описание процедуры имеет следующую структуру:

procedure Имя (Список формальных параметров);

< локальные описания >

begin

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

end;

Описание функции имеет следующую структуру:

function Имя (Список формальных параметров) : Тип результата;

< локальные описания >

begin

< тело функции >

Операторы, среди которых хотя бы один, который

присваивает имени функции значение результата или

Result:=…..

end;

Процедуры и функции могут быть без параметров ( не содержать список формальных параметров ).

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

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

Формальные параметры подпрограммы также относятся к его локальным переменным. Локальные данные создаются, т.е. им выделяется память, при вызове подпрограммы, а освобождение этой памяти происходит при завершении работы.

По способу передачи параметры в Delphi делятся на:

  • параметры-значения,

  • параметры-переменные,

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

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

Пример

// заголовок процедуры с 4 параметрами

procedure MyProc1(Par1, Par2 : Type1; Par3, Par4 : Type2);

// заголовок функции с 2 параметрами

function MyCNM( N,M: Integer):Integer;

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

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

Такой механизм передачи данных требует, чтобы фактические параметры были переменными, причем в точности того же типа, что и формальные параметры. При описании процедуры перед параметрами-переменными должно присутствовать слово var.

Пример

// процедура с 5 параметрами, A,B,C–параметры значения; X1,X2 –параметры переменные

procedure EQ(A, B, C:Real; var X1,X2 : Real);

Пример

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

var

N : Byte; // глобальная переменная

R : Word; // глобальная переменная

……

function Fасt(K:Byte):Word; // заголовок функции Fact, k – параметр значение

var I: Integer; { локальная переменная}

begin

Fact :=1;

if k=0 then

Fact:=1

else

for i:=1 to K do Fact := Fact *k;

// Вместо переменной Fact можно использовать Result

end;

…..

R:=Fact(N); // Вызов функции

Пример

// Процедура поиска наибольшего в массиве.

type t_X = array[1..100] of Integer;

var i , X_Max : byte; X : t_X; { глобальные переменные}

.

procedure Max(A : t_X; var M:Integer); //

var I: Integer; { локальная переменная}

begin

M :=A[1];

for i:=1 to 100 do

if M < A[ i ] then M := A[ i ];

end;

….

for i:=1 to 100 do X[ i ] :=Random(50)-25;

Max(X; X_Max ); { вызов процедуры Max }

Соседние файлы в папке Методический материал