· процедура – оформленный специальным образом именованный набор команд, выполняющий некоторые действия. Процедура может быть вызвана из разных точек программы, может получать данные, передаваемые в виде параметров, и возвращать результаты своей работы;
· функция – специальный вид подпрограмм[1], отличающийся тем, что возвращает в точку вызова результат, присваиваемый имени функции. Поэтому функции можно использовать в выражениях.
Из этих определений видно, что функция – это частный случай процедуры. Так в Visual Basic нет явного деления на функции и процедуры. Всё относятся к процедурам, но есть процедуры-функции (возвращающие в точку вызова результат и определяемые через ключевое слово Function), а есть собственно процедуры – которые можно вызвать только с помощью специального оператора. В то же самое время в JavaScript и функции и процедуры определяются одним словом – FUNCTION, как и в языке PHP, и не имеют каких либо различий по принципу вызова и использвованию.
Так и в PLUS, используя оператор "PROCEDURE", нельзя однозначно говорить что это "процедура" (хотя и впредь будем оперировать именно этим термином) или "функция", поскольку их можно использовать как в выражениях (смотри определение функции) так и вызывать иным способом.
Несмотря на это PLUS процедура всегда возвращает какое-либо значение (по умолчанию – нуль). Но для того, чтобы возвратить значение нужное пользователю необходимо использовать оператор RETURN. Как и во многих языках программирования, данный оператор не только возвращает значение, но и завершает саму процедуру. Синтаксис этого оператора следующий:
RETURN <выражение>;
В качестве выражения может выступать как число, так строка (заключённая в двойные кавычки) и собственно математическое выражение.
Теперь переделаем наш предыдущий пример и допишем, что наша процедура должна возвращать квадратный корень принимаемого параметра.
PROCEDURE MyProc (FormalPar) BEGIN
TEMPORARY LocalVar;
LocalVar=FormalPar#FormalPar;
RETURN LocalVar;
END;
Теперь давайте рассмотрим принцип организации ветвления и циклов в процедурах.
Для организации ветвлений предусмотрены операторы IF/THEN и IF/THEN/ELSE. У них похожий синтаксис, за исключением того, что второй оператор имеет дополнительные операторы после ключевого слова ELSE:
IF(<выражение>) THEN <оператор1> ELSE <оператор2>;
При необходимости использовать несколько операторов после слов THEN или ELSE, то используется составной оператор BEGIN/END:
IF(<выражение>) THEN BEGIN
<оператор1>;
<оператор2>;
END;
ELSE BEGIN
<оператор3>;
<оператор4>;
END;
Чтобы организовать цикл используется оператор WHILE/DO. Он аналогичен по принципу работы подобному оператору из других языков программирования. Синтаксис этого оператора выглядит так:
WHILE(<выражение>) DO BEGIN
<оператор1>;
<оператор2>;
END;
Давайте ещё усложним наш пример. Пусть при положительном параметре, передаваемом процедуре, возвращается его квадрат, иначе – лишь удвоенное значение. Тогда процедура может принять вид:
PROCEDURE MyProc (FormalPar) BEGIN
TEMPORARY LocalVar;
IF(FormalPar>0) THEN BEGIN
LocalVar=FormalPar#FormalPar;
RETURN LocalVar;
END;
ELSE LocalVar=2#FormalPar;
RETURN LocalVar;
END;
Для организации переходов в PLUS используется оператор GOTO. Данный оператор очень прост и имеет следующий синтаксис:
GOTO <Метка>;
Соответственно, при использовании оператора GOTO необходимо использовать оператор "маркированное выражение" или говоря иначе – метку. Синтаксис использования меток в PLUS следующий:
<метка>: <выражение>;
Также как и при построении алгоритма модели с помощью блоков и команд GPSS, метка должна начинаться с первого символа строки.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.