Итак, когда-то я рассказывал о структуре программы на языке Паскаль ( Структура программы языка Турбо Паскаль), теперь пришло время доконца изучить раздел описания.
Самое первое что хочу сказать - процедуры и функции используются для уменьшения объема кода программы, для упрощения написания программы, для обеспечения простого понимания всей программы.
ОПИСАНИЕ ПРОЦЕДУР
Процедура - это независимая именованная часть программы, которую можно вызвать по имени для выполнения определенных действий т.е. процедура это вспомогательная программа (подпрограмма).
Структура описания процедуры, почти такая же как и структура самой программы:
PROCEDURE [имя][параметры]; [необязательный оператор USES]; [раздел описания]; BEGIN [команды]; END;[имя] - имя процедуры
[параметры] - их не обязательно указывать если их нет, если они есть, то записываются они в таком виде: (var [переменная]:[тип]). Переменных и типов может быть много. Короче [параметры] записываются также как и раздел описания переменных (Раздел описания: меток, констант, типов, переменных, процедур и функций).
Примечание: имена констант, переменных, а также переменных описанных в параметрах процедуры могут совпадать с именами констант и переменных основной программы. Даже если имена переменных основной программы и имена переменных процедуры совпадают, то переменные которые находятся в основной программе и переменные которые находятся в процедуре не зависимы друг от друга.
Под основной программой теперь будем понимать программу, которая находится между операторами BEGIN и END.
Примечание: переменные которые используются в основной программе могут также использоваться в процедурах и функциях.
Пример17.1 Программа, в которой используется процедура вывода строки "Это строка написана из процедуры программы!".
Пример17.2 Программа, в которой используется процедура, c двумя параметрами, для сложения двух чисел. Примечание: как вы видите в основной программе, при вызове процедуры summa я использовал переменные a и x - при вызове процедуры с параметрами, переменные, которые являются параметрами процедуры, могут отличаться от переменных, которые используются при вызове процедуры, т.е вместо a и x можно было написать переменные с другим именем (например d и t).
Также стоит отметить, что переменная c могла быть описана в разделе описания переменных основной программы, а в самой процедуре ее описания могло бы и не быть.
PROCEDURE stroka; {начало описания процедуры, stroka - имя процедуры}
BEGIN
writeln('Это строка написана из процедуры программы!');
END; {конец описания процедуры}
BEGIN {начало основной программы}
stroka; {вызов процедуры}
END. {конец основной программы}
Все просто - сначала пишется процедура (такая же простая как и первая программа), а затем эта процедура вызывается из основной программы по имени. Если бы в основной программе не вызвали эту процедуру, то все что она должна делать не выполнялось вообще.
VAR {описание переменных для основной программы}
a,x:integer;
PROCEDURE summa (var a,b:integer); {summa - имя; a,b - параметры}
VAR
c:integer;
BEGIN
c:=a+b;
writeln('Сумма чисел = ', c);
END; {конец описания процедуры}
BEGIN {начало основной программы}
a:=15;
x:=20;
summa(a,x); {вызов процедуры}
END. {конец основной программы}
ОПИСАНИЕ ФУНКЦИЙ
Функция - аналогична процедуре, главное отличие функции от процедуры является то, что функция возвращает какое-либо значение.
FUNCTION [имя][параметры]:[тип]; [необязательный оператор USES]; [раздел описания]; BEGIN [команды]; END;[имя] - имя функции
[параметры] - их также как и в процедуре не обязательно указывать если их нет.
[тип] - так как функция возвращает какое-либо значение, то сама функция как и переменая имеет тип.
Примечание: функцию можно вызывать также как и процедуру или в выражениях аналогично переменным.
Пример17.3 Программа, в которой используется функция, которая возвращает значение: TRUE или FALSE, вот такого выражения - (4>12)<(5=x) Примечание: для того чтобы функция возвращала какое-либо значение нужно в самой функции присвоить нужное значение.
После описания функции, ее можно вызвать таже как и процедуру или используя в выражениях. В данном примере функция вызывается командой writeln - на подобие вывода значения переменной.
FUNCTION proverka: boolean; {начало описания функции}
VAR
x:integer;
BEGIN
write('Введите число x: ');
readln(x);
proverka:=(4>12)<(5=x);
END; {конец описания функции}
BEGIN
writeln(proverka); {вызов функции из основной программы}
END.
Итак, имя функции даем любое (например, proverka). Теперь, параметров нет, значит их не пишем, а пишем тип. Тип boolean - тип который возвращает значения TRUE или FALSE. Затем нужно описать переменную x (ее можно было описать и в основной программе). После этого пишем команды в самой функции и присваиваем значение выражения самой функции.
Примечание: часто встречаемое слово "возвращает" понимается как "принимает".