Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка №825.doc
Скачиваний:
4
Добавлен:
16.12.2018
Размер:
443.39 Кб
Скачать

2.6. Подпрограммы

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

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

Подпрограмма, чтобы ее можно было вызывать в программе, должна быть объявлена в разделе описаний программы. Объявить подпрограмму – значит указать ее заголовок (с используемыми в ней формальными параметрами), описать локальные (т.е. используемые только в данной подпрограмме) переменные и, наконец, задать ее тело. В разделе описаний подпрограммы могут быть объявлены новые подпрограммы, которые, в свою очередь, также могут включать подпрограммы. Таким образом, возможно множество уровней вложения подпрограмм. В Паскале приняты два вида подпрограмм: функции и процедуры.

Функции

Заголовок функции состоит из: 1) зарезервированного слова function; 2) имени подпрограммы – функции; 3) заключенного в круглые скобки списка формальных параметров; 4) типа возвращаемого функцией значения.

Пример заголовка функции:

function step ( n : integer ; x, y : real ) : real;

имя формальные параметры тип результата

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

step : = sin (n * x * x) ;

В точку вызова возвращается результат последнего присваивания.

Пример. Функция, которая возвращает максимальное из двух целых чисел:

function max ( a, b: integer): integer;

begin

if a > f then max: = a else max: = b;

end;

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

Например, обращение к функции max может иметь вид:

max ( x + 5, y)

При таком обращении формальные параметры а и b заменяются фактическими параметрами х +5 и у, соответственно.

Процедуры

Заголовок процедуры состоит из: 1) зарезервированного слова procedure; 2) имени; 3) списка формальных параметров.

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

Основное отличие процедур от функций состоит в том, что имени функции присваивается возвращаемое значение, а имени процедуры – нет.

Пример: программа, использующая процедуру, которая выводит на экран строку, состоящую из звездочек. Длина строки (количество звездочек) является параметром процедуры.

Program primer;

Var

n : integer;

procedure starline ( k : integer); {заголовок процедуры}

var

i : integer; {описание переменной для процедуры}

begin {начало тела подпрограммы}

for i : = 1 to k do

write ( ′ * ′ );

end; {конец тела подпрограммы}

begin {начало основной программы}

write ( ′ n = ′ ); readln (n);

starline (n); {вызов подпрограммы}

end.

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

Например :

const

n = 5; m = 6 ;

type

mas = array [1..n, 1..m ] of real;

var

m : mas ;

procedure pr ( a : mas );

В этом случае обращение к процедуре в вызывающей программе будет иметь вид : pr(m); При этом формальный параметр – массив а – принимает значение фактического параметра – массива m.

Когда лучше использовать процедуры и когда функции ? Это зависит от конкретного случая. Если подпрограмма вычисляет единственный результат, ее можно реализовать как функцию. Если же от подпрограммы требуется вычислить несколько значений, ее лучше оформить в виде процедуры.