Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000555.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
19.12 Mб
Скачать

2.5. Функции и процедуры

2.5.1. Описание функций

Функция - это часть программы, имеющая собственное имя, по которому она может быть вызвана для выполнения.

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

Ранее мы познакомились со стандартными функциями Паскаля. Кроме них программист может воспользоваться своими собственными функциями, предварительно описав их в программе.

Описание функции располагается в разделе описания процедур и функций до исполняемой части программы и является как бы маленькой программой внутри большой. Начинается описание заголовком функции

FUNCTION имя (формальные параметры): тип;

где имя — это имя функции;

формальные параметры — список переменных с указанием их типов.

тип — это тип значения, которое вычисляет функция. Он обязан быть скалярным.

Заметим, что типы в заголовке функции можно обозначать только именами, поэтому тип массива требует предварительного описания в разделе TYPE.

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

Пример. Описание функции выбора большего из двух аргументов.

function MAX (A,B: real): real; begin

if A>B then MAX:=A

else

MAX := B;

end;

2.5.2. Обращение к функции

После описания функции ее можно использовать в выражениях наряду со стандартными функциями.

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

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

Вычисление выражений, содержащих обращение к функции, происходит по следующему алгоритму:

  • вычисляются выражения для аргументов функции;

  • значения аргументов присваиваются формальным параметрам из заголовка описания;

  • выполняется тело функции и вычисляется ее значение;

  • значение функции ставится в исходное выражение на место обращения к функции;

  • вычисление исходного выражения продолжается.

Пример. Ввести два числа и вывести большее.

program Maximum;

var x,y:real;

function MAX (A,B: real): real;

begin

if A>B then MAX:=A

else MAX:=B

end:

begin

write('Введите два числа ');

read(x,y);

writeln('Большее число ', МАХ(х,у); end.

2.5.3. Процедуры

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

Однако с именем процедуры не связывается никакого значения, поэтому имя процедуры не может быть использовано в выражениях.

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

PROCEDURE имя (формальные параметры);

Процедура не возвращает значение, поэтому не нужно указывать тип, как в заголовке функции. Вот примеры заголовков процедур:

PROCEDURE ALPHA (X: INTEGER; Y: REAL; Z: CHAR);

PROCEDURE BETA (M: ARR);

В том месте программы, где нужно выполнить действия, предусмотренные в описании процедуры, ставят оператор вызова процедуры:

имя (фактические параметры);

где имя то же, что в заголовке процедуры.

В общих чертах при вызове одной процедуры из другой происходит следующее:

  • в памяти размещаются параметры, передаваемые процедуре (но не параметры-переменные);

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

  • запоминается место возврата в вызывающую процедуру(или программу);

  • управление передается вызванной процедуре;

  • после выполнения вызванной процедуры происходит возврат в вызывающую процедуру (в запомненное место).

Пример. Описание и вызов процедуры, которая печатает сумму N первых элементов вещественного массива.

program Summa;

type

Arr = array [ 1.. 100] of real; var

A:Arr;

i: integer;

procedure PrintSum (R: Arr; N: integer); var

Summa: real; i:integer; begin

Summa := 0;

for i:=l to N do Summa := Summa + R[i]; writeln (Summa);

end;

begin

for i:=l to 20 do read(A[i]);

PrintSum (A, 20); end.