Смекни!
smekni.com

Процедуры и функции в языке Паскаль (стр. 1 из 3)

Лабораторная работа №5

Тема: Процедуры и функции в языке Паскаль

Цель работы: изучить работу процедуры и функции и обрести навык написания

программ с применением процедур и функций.

1. Основные понятия.

Широко распространена в программах форма повторяемости, когда одна и та же последовательность действий должна выполняться на различных этапах информации. В программах такого рода в различных местах встречаются фрагменты, одинаковые по выполняемым действиям и различающиеся только в значениях исходных данных. При составлении программы приходиться задавать одну и ту же группу операторов, соответствующую каждому из повторяющихся фрагментов. Для более эффективного программирования подобных повторений в языке введено понятие подпрограммы. Повторяющаяся группа операторов оформляется в виде самостоятельной единицы – подпрограммы, записывается однократно, а в соответствующих местах программы обеспечивает лишь обращение к ней. Использование аппарата подпрограммы позволяет сократить объем и улучшить структуру программы с точки зрения наглядности и читаемости. Подпрограмма может быть рассмотрена как самостоятельная программа (со своими входными и выходными данными).

В языке Паскаль подпрограммы реализуются в виде процедур и функций, которые вводятся в программу с помощью своего описания.

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

Процедуры описываются в специальном разделе описательной части программы вслед за разделом переменных.

Любая процедура состоит, аналогично программе, из заголовка процедуры и блока.

Заголовок процедуры представляет собой:

PROCEDURE <ИМЯ> (<СПИСОК ПАРАМЕТРОВ>);

Где PROCEDURE – служебное слово,

ИМЯ – имя процедуры,

СПИСОК ПАРАМЕТРОВ - перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов. Параметры, перечисленные в списке, называются формальными. Допускается описание процедуры, несодержащей формальных параметров:

PROCEDURE <ИМЯ>;

Содержательная часть процедуры представляет собой блок и состоит, следовательно, из раздела описаний (меток, констант, типов, переменных, процедур, и функций) и раздела операторов, представляющего собой составной оператор BEGINEND. Заканчивается блок процедуры точкой с запятой.

Пример:

Оформить в виде процедуры алгоритм вычисления степени y=xn c натуральным показателем n.

PROCEDURE STEP1 (N:INTEGER;X:REAL;VAR Y:REAL;)

VAR I:INTEGER;

BEGIN

Y:=1;

FOR I:=1 TO N DO

Y:=Y*X;

END;

В заголовке процедуры с именем STEP1 перечислены параметры X, N, определяющие исходные данные процедуры, и параметр Y, обозначающий значение исходной степени – результат выполнения процедуры. Указан также тип всех формальных параметров.

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

Для получения результатов в основной программе используются параметры-переменные. Эти параметры перечисляются после служебного слова VAR с обязательным указанием типа.

Тело процедуры состоит:

1) Из описательной части, где определена переменная I, необходимая и имеющая смысл только внутри данной процедуры и называемая локальной переменной (значение локальной переменной недоступно в основной программе);

2) Из составного оператора BEGIN-END, реализующего алгоритм вычисления степени действительного числа с натуральным показателем.

Это то же вычисление оформим в виде процедуры без параметров:

PROCEDURE STEP2;

VAR I:INTEGER;

BEGIN

Y:=1;

FOR I:=1 TON DO Y:=Y*X;

END;

В этом случае процедура STEP2 не содержит списка формальных параметров и работает с локальной переменной I, описанной в блоке процедуры, и переменными X, N, Y называются глобальными по отношению к процедуре STEP2. Значение глобальных переменных доступны и могут быть использованы в любой точке основной программы (в частности, внутри данной процедуры).

1.2 Функция.

Функцияэто подпрограмма, результат выполнения которой есть единственное скалярное значение, присваиваемое имени этой функции. Следовательно, функции являются частным случаем процедур и принципиально отличаются от них тем, что, во-первых, результат выполнения функции – одно значение, а процедуры – одно или несколько; во-вторых, результат выполнения функции передается в основную программу, как значение имени этой функции, а результаты выполнения процедуры – как значения ее параметров.

Описание функции аналогично описанию процедуры и состоит из заголовка и блока. Заголовок функции имеет вид:

FUNCTION <ИМЯ> (<СПИСОК ПАРАМЕТРОВ>):<ТИП>;

Где FUNCTION – служебное слово,

ИМЯ – имя функции,

СПИСОК ПАРАМЕТРОВ – перечень формальных параметров (исходных

данных) с указанием их типов,

ТИП – тип результата: значение, которое должно приобретать имя функции.

Допускается описание функции без параметров:

FUNCTION <ИМЯ>: <ТИП>;

В содержательной части программы-функции имени должно быть присвоено некоторое значение (значение ответа), т.е. имя хотя бы один раз должно присутствовать в левой части некоторого оператора присваивания.

Пример:

Оформить в виде функции алгоритм вычисления степени Y=Xn :

FUNCTION STEP3 (N:INTEGER; X:REAL) : REAL;

VAR I:INTEGER;

Y:REAL;

BEGIN

Y:=1;

FOR I:=1 TO N DO

Y:=Y*X;

STEP3:=Y

END;

В заголовке функции с именем STEP3 перечислены параметры N,X, определяющие ее исходные данные. Результат выполнения функции (значение локальной переменной Y) присваивается ее имени STEP3. Тип результата (тип функции) – REAL, который указывается в заголовке функции при ее описании. Введение локальной переменной Y не обязательно, но придает описанию функции более наглядный вид.

1.3 Обращение к подпрограммам.

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

<ИМЯ> (<СПИСОК АРГУМЕНТОВ>);

Где ИМЯ – имя процедуры, к которой происходит обращение,

СПИСОК АРГУМЕНТОВ – перечень конкретных значений (выражений) и имен, подставляемых на место формальных параметров процедуры при ее выполнении.

При вызове процедуры формальные параметры, указанные в заголовке, заменяются аргументами в порядке их следования: первому слева параметру в списке ставится в соответствие первый аргумент, второму – второй и т.д. Аргументы, перечисленные в операторе процедуры, называются также фактическими параметрами. Число, тип и порядок следования формальных и фактических параметров должно совпадать. Структура программы, содержащей процедуру, имеет вид:

Пример:

Cоставить программу вычисления степени Z=An, где n – целое число и A<>0. Степень с целым показателем определяется следующим образом:

Учитывая, что 1/An = (1/A)n и используя процедуру STEP1, описанную в пункте 1.1, составим алгоритм рис.1 а), б) и программу.

{ Определение степени с целым показателем }

PROGRAM STEP4;

VAR M:INTEGER;

A,Z:REAL;

{ Вычисление степени с натуральным показателем }

PROCEDURE STEP1 (N:INTEGER;X:REAL;VAR Y:REAL);

VAR I:INTEGER;

BEGIN

Y:=1;

FOR I:=1 TO N DO

Y:=Y*X;

END; {STEP1}

BEGIN

READ (A,M);

IF M=0 THEN Z:=1

ELSE IF M>0 THEN STEP1(M,A,Z) {Вызов процедуры}

ELSE STEP1(M,1/A,Z); {Вызов процедуры}

WRITELN(A:8:3,’В степени ’,M:3,’ равно ’,Z)

END.