Скачиваний:
53
Добавлен:
10.02.2014
Размер:
117.25 Кб
Скачать
      1. Подпрограммы

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

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

Процедура – независимая именованная часть программы, которую можно вызвать по имени для выполнения определенных действий. Структура процедуры повторяет структуру программы. Процедура не может выступать как операнд в выражении. Упоминание имени процедуры в тексте программы приводит к активизации процедуры и называется ее вызовом. Например, Read(F) читает с клавиатуры некоторое значение и присваивает его переменной F.

Функция - аналогична процедуре, но имеются два отличия: функция передает в точку вызова скалярное значение; имя функции может входить в выражение как операнд. Например, Sqr(x) – возведет в квадрат значения целого или вещественного х и возвратит в точку вызова вычисленное значение квадрата числа х.

Все процедуры и функции языка Паскаль делятся на две группы: встроенные (стандартные), пользовательские.

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

Задаются в описательной части программы. Вызываются в основной части (в разделе операторов).

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

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

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

Формальные параметры – параметры, определенные в заголовке подпрограммы.

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

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

Описание процедуры включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры и необязательного, заключенного в круглые скобки, списка формальных параметров с указанием типа каждого параметра. Формальные параметры отделяются точкой с запятой (список однотипных параметров может быть перечислен через запятую). Например, procedure P1(a: real; b,c: real). Имя процедуры – идентификатор, уникальный в пределах программы. Тело процедуры представляет собой локальный блок, по структуре аналогичен программе.

Формат:

procedure <имя> (список формальных параметров);

Const ...;

Type ...;

Var...;

begin

<операторы>;

end;

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

Формальные параметры нельзя описывать в разделе описаний процедуры.

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

<имя процедуры> (список фактических параметров);

Например: f(n, fn);

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

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

program primer6;

var i,c,Sum:integer;

procedure St(M:string);

begin

writeln('Ошибка:',M);

halt(1);

end;

begin

c:=0;

Sum:=0;

while c<10 do

begin

c:=c+1;

write('введите ',c,'-e число: ');

readln(i);

if i<0 then St('введено отрицательное число');

Sum:=Sum+i;

end;

writeln('Сумма чисел равна ',Sum);

end.

Описание процедуры. В данной процедуре пользователя использована переменная М типа string, в которой хранится текст сообщения о характере ошибки, вызвавшей прерывание программы. Для прерывания выполнения программы используется стандартная процедура Halt.

Описание программы. В начале программы обнуляются значения количества введенных чисел с и их сумма Sum. Потом выполняется цикл, пока номер очередного вводимого числа меньше 10. Сначала устанавливается номер очередного числа, затем на экран выводится приглашение «Введите 1-е (2-е и т.п.) число», считывается значение числа с клавиатуры в переменную i. Затем проверяется условие I<0.

Если условие выполняется, то вызывается процедура St, которой передается фактический параметр-значение «введено отрицательное число». Это значение присваивается формальному параметру М процедуры St. процедура выводит на экран сообщение «Ошибка: введено отрицательное число», после чего вызывает стандартную процедуру Halt, которая прерывает выполнения программы.

Если условие I<0 не выполняется, то значение суммы увеличивается на значение введенного числа I, и управление передается в заголовок цикла для проверки условия. После окончания цикла на экран выводится значение суммы.

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

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

Формат:

function <имя> (список формальных параметров): <тип результата>;

Const ...;

Type ...;

Var...;

begin

<операторы>;

end;

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

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

Формат:

<имя функции> (список фактических параметров);

Пример.

program primer6;

var x,y:real;

function tan(c:real):real;

begin

tan:=sin(c)/cos(c);

end;

begin

read(x,y);

writeln('tg(x)= ',tan(x));

writeln('tg(y)= ',tan(y));

end.

Соседние файлы в папке методические указания для лабораторных работ