FUNCTION имя функции (формальные параметры):тип результата;
раздел описаний функции
BEGIN
исполняемая часть функции
. . . . . . . .
Имя функции := Выражение;
END;
Формальные параметры – это аргументы функции. Они могут отсутствовать. Результат передается через имя функции, поэтому в заголовке указывается тип результата.
Для вычисления значения функции с конкретным параметром ее, как и процедуру, вызывают из основной программы с указанием фактических параметров–аргументов.
Вызов функции производится оператором, имеющим следующий формат:
имя функции (список фактических параметров);
Список фактических параметров – это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Типы, количество и порядок следования фактических и формальных параметров должны совпадать.
Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части функции. В теле функции должен присутствовать оператор присваивания специального вида, в левой части которого должен быть указан идентификатор, совпадающий с именем функции, а в правой части – выражение, вычисляющее возвращаемое значение:
имя функции := выражение;
Именно это значение и будет возвращено функцией в качестве результата.
Таких операторов может быть несколько, важно чтобы хотя бы один всегда срабатывал в процессе выполнения тела функции.
В теле функции могут использоваться (вызываться) и другие функции, стандартные или написанные пользователем.
После этого происходит возврат в вызывающий блок.
Смысл функции заключается в задании алгоритма вычисления некоторого значения и организации возврата этого значения в точку вызова.
В отличие от процедуры имя функции может встречаться в выражениях в качестве операнда. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д. Когда выражение вычисляется, функция выполняется и значением операнда становится величина, возвращаемая функцией.
Формальные параметры функции могут быть только параметрами–значениями. При ее вычислении они не изменяются. Аргументы функции могут быть любых типов:
1) скалярные – числа, символы, булевские;
2) массивы;
3) другие типы.
Сама функция (результат) имеет только скалярный тип, (т.е. число – целое или вещественное, а также символ или булевская переменная).
К функции можно обращаться из основной программы; из другой функции и из самой себя.
Функции, которые вызывают сами себя, называются рекурсивными. Такие функции часто встречаются в математике, например, вычисление факториала, возведение числа в целую степень и др. Для рекурсивных функций необходимо вырабатывать условие завершения (иначе произойдет зацикливание).
Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.
1 способ с помощью параметров-значений и параметров-переменных:
Program Search1;
var x,y,m: integer;
procedure MaxNumber(a,b: integer; var max: integer);
begin
if a>b then max:=a
else max:=b;
end;
begin
write('Введите x, y ');
readln(x,y);
MaxNumber(x,y,m);
writeln('max=',m);
readln;
end.
2 способ только с помощью параметров-значений:
Program Search2;
var x,y,m: integer;
procedure MaxNumber(a,b: integer);
begin
if a>b then writeln('max=',a);
else writeln('max=',b);
end;
begin
write('Введите x, y ');
readln(x,y);
MaxNumber(x,y);
readln;
end.
Рассмотрим аналогичный пример программы поиска максимума из двух целых чисел с использованием функций:
Program Search3;
var
x,y,m: integer;
function MaxNumber(a,b: integer): integer;
var
max: integer;
begin
if a>b then max:=a
else max:=b;
MaxNumber := max;
end;
begin
write('Введите x, y ');
readln(x,y);
m := MaxNumber(x,y);
writeln('max=',m);
readln;
end.
6.6. Использование стандартных модулей для управления режимом отображения текста программы при ее выполнении
Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и некоторые исполняемые операторы инициирующей части.
Процедуры и функции можно помещать в модули, которые потом допустимо присоединять к любым программам (при этом совсем необязательно иметь в наличии исходный текст).
Процедуры и функции, описанные в модуле, являются внешними по отношению к программе, которая их использует.
В Turbo Pascal 7.0 существует 2 вида модулей:
1) модули пользователей;
2) стандартные модули.
Стандартные модули System, Dos, Crt, Printer, Graph, Overlay, Turbo3 и Graph3 содержат большое число разнообразных типов, констант, процедур и функций.
Модуль System подключается к любой программе автоматически, все остальные становятся доступны только после указания их имен в списке, следующем за кодовым словом USES.
В модуль System входят все процедуры и функции стандартного Паскаля, а также встроенные процедуры и функции Турбо-Паскаля, которые не вошли в другие стандартные модули (например, Inc, Dec, Getdir и т.п.).
В модуле Crt сосредоточены процедуры и функции, обеспечивающие управление текстовым режимом работы экрана. С помощью входящих в модуль блоков можно перемещать курсор в произвольную позицию экрана, менять цвет выводимых символов и окружающего их фона, создавать окна, управлять звуком.