Имя процедуры должно удовлетворять общим требованиям языка к написанию имен.
В списке формальных параметров перечисляются имена параметров, передаваемых в процедуру с указанием их типов. Список параметров не является обязательным.
Пример заголовка процедуры:
ProceduremyProc (a, b : Real; var s : String);
В приведенном выше примере процедуре передаются значения двух вещественных переменных «а» и «b», и адрес строки символов «s». Об этом свидетельствует префикс varперед именем строки. Передача адреса переменной в процедуру вместо ее значения приводит к тому, что если значение параметра s изменится в результате работы процедуры, то это изменение будет сохранено после завершения работы процедуры.
Описательная часть процедуры может содержать описания типов, классов, переменных, констант и т.п. Обратите внимание, параметры, описанные в заголовке процедуры, в разделе описаний повторно не описывают. В разделе описаний процедуры могут быть описаны не только переменные, но и другие подпрограммы. Такие подпрограммы называются внутренними по отношению к процедуре, в которой они описаны. Сама процедура, по отношению к внутренним подпрограммам называется внешней.
Раздел операторов процедуры содержит инструкции, которые будут выполняться при обращении к процедуре.
Ниже, в качестве примера, дано описание процедуры, заголовок которой был приведен выше.
ProceduremyProc (a, b : Real; var s : String);
var z:real;
Begin
z:=a+b;
s:=floatToStr(z);
end;
В качестве параметров в эту процедуру передается два вещественных числа и адрес некоторой строки.
В разделе описаний процедуры описана внутренняя переменная z, которая за пределами процедуры недоступна.
Инструкции, записанные в теле процедуры, обеспечивают сложение чисел, переданных в качестве параметров. Полученный результат запоминается в переменной z. Затем сумма преобразуется в строку символов.
После завершения процедуры значение строки, переданной в процедуру в качестве параметра, изменится.
3.1.1.2 Вызов процедуры
Вызов процедуры состоит из имени процедуры, после которого в скобках перечисляются фактические параметры, передаваемые в процедуру.
Примеры вызова процедур, которые уже встречались ранее, представлены ниже.
Пример вызова процедуры ShowMessage, в которую передается один параметр в виде строки символов.
ShowMessage(‘Не могу преобразовать исходные данные’);
Пример вызова процедуры Append для строк компонента TMemo.
Memo1.Lines.Append(‘Результаты расчетов’);
Пример вызова процедуры Exit, без параметров.
Exit;
Процедура, заголовок которой приводился выше в виде примера, может быть использована так.
…
Varx,y : Real; str :String;
Begin
x:=1; y:=2;…
myProc ( 2.345, x+y, str);
showMessage(str);
end;
В этом примере обращение к нашей процедуре выделено жирным курсивом.
В этом обращении формальному параметру «а» соответствует фактический параметр в виде числа 2.345, формальному параметру «b» соответствует число 3, полученное как результат вычисления выражения «x+y». Формальному параметру «s» соответствует адрес переменной «str». Следует заметить, что в качестве последнего фактического параметра мы можем передать только имя переменной (нельзя задавать константу или выражение), так как в заголовке процедуры, перед параметром «s» написано var.
В результате вызова процедуры значение переменной «str» станет равным строке символов ‘5.345’.
3.1.1.3 Описание функции
Описание функции по структуре такое же, как и описание процедуры, но вид заголовка несколько иной.
Заголовок функции начинается словом function, а заканчивается описанием типа возвращаемого значения и выглядит следующим образом:
В этом примере функция myFunc возвращает стоку символов, а параметрами, которые передаются в процедуру, являются два вещественных числа.
Еще одна особенность описания функции заключается в том, что в операторной части должен располагаться оператор присваивания, в котором специальной переменной result присваивается значение возвращаемого результата. Переменная result не требует описания.
Ниже, в качестве примера, дано описание функции, заголовок которой был приведен выше.
FunctionmyFunc (a, b : Real) : String;
var z:real;
Begin
z:=a+b;
Result:=floatToStr(z);
end;
В качестве параметров в эту функцию передается два вещественных числа.
В разделе описаний процедуры описана внутренняя переменная z, которая за пределами процедуры недоступна..
Инструкции, записанные в теле процедуры, обеспечивают сложение чисел, переданных в качестве параметров. Результат сложения запоминается в переменной z. Полученная сумма преобразуется в строку символов, и результат преобразования присваивается специальной переменной result. Именно это значение и будет результатом выполнения функции.
3.1.1.4 Вызов функции
Вызов функции состоит из имени функции, после которого в скобках перечисляются фактические параметры, передаваемых в функцию, то есть ничем не отличается от обращения к процедуре, но особенность обращения к функции состоит в том, что это обращение входит как операнд в выражение.
Примеры обращений к функциям, которые уже встречались ранее, представлены ниже.
Пример вызова функции StrToFloat.
x := strToFloat( Edit1.text );
Пример вызова функций sin и sqrt.
x := a + sin(x) + sqrt(a+b);
Обращение к функции, заголовок которой приводился выше в виде примера, может быть использовано так.
…
Varx,y : Real; str :String;
Begin
x:=1; y:=2;…
str := myFunc ( 2.345, x+y);
showMessage(str);
end;
В этом примере обращение к нашей функции выделено жирным курсивом.
Функция вернет строку символов, значение которой равно ‘5.345’ и это значение будет присвоено переменной str.