Заголовок функции записывается следующим образом:
Function <идентификатор функции> (<списки
параметров>) : <тип значения функции>;
Заголовок же процедуры записывается несколько иначе:
procedure <идентификатор процедуры>(<списки
параметров>);
И в том, и в другом случае <списки параметров> - это перечисление имён переменных с указанием через двоеточие их типа; один список от другого отделяется точкой с запятой. <списки параметров> - это те значения, которые или должны быть или переданы в подпрограмму, или вычислены в подпрограмме. <тип значения функции> - это одно из ключевых слов для обозначения типов переменных или наименование пользовательского типа (смотри лекцию 3). Функция обязана вернуть значение указанного типа.
Примеры заголовков функций и процедур:
function Chr(X: Byte) : Char;
procedure Delay (MS: Word) ;
function Copy(S: String; Index: Integer; Count: Integer) : String;
procedure GetDate(var Year, Month, Day,
DayOfWeek: Word);
Отметим, что списки параметров в заголовках процедур могут отсутствовать. Пример:
procedure NoSound;
Структура процедур и функций почти повторяет структуру программы. Например, описание процедуры имеет вид:
procedure <идентификатор процедуры> ( <списки параметров>) ;
const <раздел описания констант>
type <раздел описания типов>
var <раздел описания переменных>
label <раздел описания меток>
<раздел описания процедур и функций>
begin
<тело процедуры - операторный_блок>
end;
и описание функции:
function <идентификатор процедуры> ( <списки параметров>) :
<тип значения функции> ;
const <раздел описания констант>
type <раздел описания типов>
var <раздел описания переменных>
label <раздел описания меток>
<раздел описания процедур и функций>
begin
<тело процедуры - операторный блок>
end;
Как и в основной программе любой из разделов описаний, и в функции, и в процедуре может отсутствовать. Однако в теле функции обязан быть оператор присваивания идентификатору функции значение соответствующего типа. Пример:
Function Sum(A, B : real) : real;{ Описание функции суммирования }
Var S : real;
Begin
S:= A+B;
Sum:= S; { Присвоение идентификатору функции значения }
End;
Основное отличие процедур и функций заключается в том, что идентификатор функции имеет (или возвращает) значение определенного типа и поэтому для вызова функции необходимо включить ее в выражение, например в правую часть оператора присваивания. Примеры:
p:=gradf(x); { gradf - идентификатор функции}
t:=2*grod(w)-7; { grod - идентификатор функции}
Процедура, в отличие от функции, не может быть составной частью выражения и вызывается самостоятельным оператором. Пример:
Proced1(А,В,С); { оператор вызова процедуры Proced1 }