Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi.Начало.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.56 Mб
Скачать

Описание и вызов функции

Синтаксис описания функции очень похож на описание процедуры и имеет следующий вид:

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

[<раздел описаний>]

begin

<операторы>

end;

Ключевое слово function – задает описание заголовка функции. Заголовок содержит:

  • имя функции, которое используется при ее вызове;

  • список формальных параметров, при этом каждый параметр описывается со своим типом, также как при описании процедуры;

  • тип возвращаемого функцией значения.

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

Тело функции заключается в операторные скобки begin..end.

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

Пример описания функции:

function maxim(a,b:integer):integer;

begin

if a>b then

maxim:=a

else

maxim:=b;

end;

Синтаксис вызова функции имеет следующий вид:

<Переменная>:=<Имя функции>[(Список формальных параметров)]

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

Например, вызов функции maxim:

k:=maxim(100,56)

Где описывать процедуры(функции)

Процедура(функция) описывается внутри модуля. Если требуется, чтобы процеду­ра(функция) была доступна для других модулей, в части Interface необходимо описать ее заголовок, а в части Implementation описать ее реализацию, например:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type

TForm1 = class(TForm)

private

{ Private declarations }

public

{ Public declarations }

end;

{описание заголовка функции, которая будет доступна для других модулей}

function min(a,b:real):real;

var

Form1: TForm1;

implementation

{$R *.dfm}

{ описание функции }

function min(a,b:real):real;

begin

if a>b then

min:=a

else min:=b;

end;

end.

Если процедура(функция) будет использоваться только в данном модуле, не требуется описание ее заголовка в секции Interface.

Передача параметров по ссылке и по значению

Любой из формальных параметров подпрограммы может быть либо:

1) параметром-значением (передача по значению)

2) параметром переменной (передача по ссылке)

3) параметром-константой (передача по ссылке)

Например, в следующем описании процедуры:

procedure MyProc(var a:real; b:integer; const c:string);

задан список формальных параметров где

a - передается по ссылке, для этого используется ключевое слова var;

b - передается по значению;

c - передается по ссылке, для этого используется ключевое слова const.

При передаче по значению параметр вычисляется, копируется во временную па­мять и передается подпрограмме, т.е. передается копия параметра, поэтому на выходе из подпрограммы значение параметра не меняется. Например:

procedure A(c:real);

begin

....

c:=c+10;

...

end;

Использование процедуры:

c:=5;

A(c);

При выходе из процедуры А переменная c - будет равна 5.

При использовании параметра-переменной передается адрес переменной. Поэтому на вы­ходе из подпрограммы ее значение может быть изменено. Например:

procedure Double( var c:real);

begin

c:=c*2;

end;

Использование процедуры:

a:=10;

Double(a);

После выхода из процедуры значение переменной A изменится и будет равно 20.

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

Procedure Sum( const A: integer);

Процедуре Sum передается параметр A, который нельзя менять в теле процедуры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]