Технология программирования с использованием подпрограмм предусматривает разбиение программ на логически связанные, но функционально-замкнутые компоненты, имеющие свое имя, что дает следующие преимущества:
Подпрограммы могут использоваться пятью способами:
1.1 Описание функций
Функцией называется часть программы, имеющая уникальное имя, предназначенная для решения определенной задачи и возвращающая в точку вызова скалярное значение как значение имени этой функции.
Функция, определенная пользователем, содержит заголовок и тело. Заголовок функции имеет вид:
FUNCTION <имя функции> (<список параметров>):<тип результата>;
где FUNCTION – служебное слово; имя функции – идентификатор функции; список параметров – перечень формальных параметров (то есть исходных данных) с указанием их типов; тип результата – данное скалярного типа, значение которого должно приобрести имя функции. На рис. 1.1 представлена в виде «Черного ящика» функция, имеющая список входных параметров и использующая переменные, описанные на более высоком уровне. Выходной параметр у функции всегда один, его называют результатом. Как правило, это данное любого скалярного типа или строка типа STRING.
Допускается описание функции и без формальных параметров, примерами встроенных функций без входных параметров являются: PI (возвращает значение числа ?) и RANDOM (возвращает случайное вещественное число в интервале от 0 до 1). Заголовок функции без параметров имеет вид:
FUNCTION <имя>:<тип результата>;
Такая функция может использовать глобальные или иные переменные более высокого уровня, а может обходиться и без них. Пример такой функции приведен на рис. 1.2.
Рис. 1.2 Структура функции без входных параметров
Тело функции аналогично по структуре основной программе. Функция содержит те же самые разделы описаний, что и основная программа, и раздел операторов.
Примеры применения арифметических функций.
Пример 1. Вычислить выражение:
В формуле многократно используются операции возведения в степень и извлечения корней, которые реализуются с помощью показательной функции. Такая функция не входит в список встроенных функций языка Паскаль. Поэтому для решения этой задачи предлагается создать пользовательскую, показательную функцию PW(Z, W), где Z — основание, a W — показатель степени. Эта функция реализует вычисление по формуле Zw.
PROGRAM PR1;
VAR X, Y, А, В: REAL;
FUNCTION PW(Z, W: REAL): REAL;
BEGIN
PW := EXP(Z * LN(W))
END;
BEGIN
WRITELN('Введите значения X, A, B');
READ(X, A, B);
Y := (PW(A, X+l) + PW(ABS(X*X + 1), B) * COS(PW(X/2 + PI/8,1/3)) /PW(X*X + B*B, 1.5);
WRITELN('Y=', Y)
END.
На этом примере хорошо виден важнейший принцип использования функций, а именно, работу механизма передачи в тело функции значений параметров для осуществления расчетов. При вычислении Y функция PW вызывается четыре раза. Первый раз фактическими параметрами являются А и Х+1. При вызове функции PW происходит подстановка Z = A, W = Х+1. Теперь, когда формальные параметры Z и W определены, управление передается операторам тела функции PW. По завершении расчетов результат (вещественное число) помещается в переменную с именем PW, то есть становится доступным в исходном выражении Y, откуда и был произведен вызов. При втором вызове функции PW опять происходит вычисление и подстановка значений фактических параметров во входные переменные функции (называемые формальными параметрами) Z = ABS(X*X + 1) и W = В и т.д.
Пример 2. Вычислить выражение: Z = F(A*B,A + B,| A-B|)-2.5-F(Sin(| А| + |В|),А*В,1.5-В), где
В этом примере непосредственно из самой постановки задачи видна необходимость в программировании пользовательской функции F, имеющей три формальных параметра X, Y, Z. Из математической формулы подлежащей вычислению, очевиден тип функции F и величин X, Y, Z — это вещественные переменные.
PROGRAM PR2;
VAR А, В, Z: REAL;
FUNCTION F(X, Y, Z: REAL): REAL;
VAR F1: REAL;
BEGIN
F1:= X * Y * Z;
IF F1<0 THEN F:=X+Y+Z ELSE
IF F1=0 THEN F:=X*X+Y*Y + Z*Z ELSE
F=F1
END;
BEGIN
WRITELN('Введите значения А, В'); READ(A, В);
Z := F(A*B, A + B, ABS(A-B))-2.5*F(SIN(ABS(A) + ABS(B)), A*B, 1.5*B);
WRITELN('Z = ', Z: 12: 6)
END.
При программировании функции можно обратить внимание на то, что выражение X*Y*Z встречается четыре раза. Обычно в таком случае вводят рабочую переменную, в нашем примере F1 = X*Y*Z.
Эта переменная используется только в теле функции, а в основной программе не нужна. Поэтому переменная F1 объявляется в разделе VAR функции и поэтому доступна только из операторов этой функции. Такая переменная называется локальной переменной. Локальная переменная существует только во время выполнения функции и недоступна из тела основной программы. Переменные, объявленные в разделе описания VAR основной программы, называются глобальными, они доступы из основной программы и из всех функций этой программы. В нашем примере таких переменных три А, В, Z. Если бы была такая необходимость, то в теле функции можно бы было прочитать значение этих переменных и даже присвоить им новые значения, что, впрочем, делать не рекомендуется из соображений трудностей, возникающих при отладке. Чтобы создать качественный сайт, Вам просто необходима аренда серверов по оптимальной и доступной цене.Если функций несколько, то в них могут быть идентификаторы переменных и констант с одинаковыми наименованиями, но область их действия будет распределяться только на тот блок, где они описаны, поэтому их описания (типы данных) могут различаться.
Если в функции локальная константа или переменная имеют тот же идентификатор, что и глобальная константа или переменная, то глобальная из этой функции становится невидимой (недоступной).
Предыдущая статья: Сортировка двумерного массива.
Оглавление: Лекции по Pascal. Часть 2.
Следующая статья: Использование массивов и функций в качестве формального параметра.