Правила написания подпрограмм 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Правила написания подпрограмм



Структура подпрограммы представлена на рисунке 3.1.

Рисунок 3.1 – Структура подпрограммы

Описание процедуры

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

Procedure <имя процедуры> (<список формальных параметров>);

Имя процедуры должно удовлетворять общим требованиям языка к написанию имен.

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

Пример заголовка процедуры:

Procedure myProc (a, b: Real; var s: String);

В приведенном выше примере процедуре передаются значения двух вещественных переменных «а» и «b», и адрес строки символов «s». Об этом свидетельствует префикс var перед именем строки. Передача адреса переменной в процедуру вместо ее значения приводит к тому, что если значение параметра s изменится в результате работы процедуры, то это изменение будет сохранено после завершения работы процедуры.

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

Раздел операторов процедуры содержит инструкции, которые будут выполняться при обращении к процедуре.

Ниже, в качестве примера, дано описание процедуры, заголовок которой был приведен выше.

Procedure myProc (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;

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

Var x,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, а заканчивается описанием типа возвращаемого значения и выглядит следующим образом:

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

Пример заголовка функции:

Function myFunc (a, b: Real ): String;

В этом примере функция myFunc возвращает стоку символов, а параметрами, которые передаются в процедуру, являются два вещественных числа.

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

Ниже, в качестве примера, дано описание функции, заголовок которой был приведен выше.

Function myFunc (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);

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

Var x,y: Real; str:String;

Begin

x:=1; y:=2;…

str:= myFunc (2.345, x+y);

showMessage(str);

end;

В этом примере обращение к нашей функции выделено жирным курсивом.

Функция вернет строку символов, значение которой равно ‘5.345’ и это значение будет присвоено переменной str.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 234; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.84.155 (0.03 с.)