Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОМП. НАУКИ_1сем.doc
Скачиваний:
6
Добавлен:
05.11.2018
Размер:
902.14 Кб
Скачать
  1. Подпрограммы (процедуры и функции)

    1. Понятие подпрограммы, ее описания и вызова

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

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

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

Для контролируемой передачи данных в подпрограмму и возврата результатов из неё используются параметры подпрограммы:

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

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

    1. Цели введения подпрограмм

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

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

    1. Процедуры

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

procedure имя_процедуры (список_формальных_параметров);

Разделы локальных описаний const, type, var и т.д.

begin операторы

end;

Вызов процедуры  это оператор вызова процедуры:

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

Если процедура не имеет формальных параметров, то ее заголовок имеет вид: procedure имя_процедуры; а оператор вызова: имя_процедуры;

    1. Функции

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

Описание функции:

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

Разделы локальных описаний const, type, var и т.д.

begin операторы

end;

Вызов функции  это операнд в выражении:

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

Если функция не имеет формальных параметров, то ее заголовок имеет вид: function имя_функции : тип результата; а вызов: имя_функции;

Описание функции отличается от описания процедуры следующим:

  1. в заголовке функции указывается тип результата;

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

Таким образом, функция передает свое значение через присваивание значения идентификатору функции.

Если имя_функции использовать в правой части оператора присваивания, произойдет рекурсивный вызов этой функции (т.е. вызов этой же функции из тела функции). Избежать рекурсивного вызова позволяет в Delphi неявно определенный параметр Result, тип которого равен типу результата функции.

Result используется для возврата результата функции, но может также входить в выражение правой части оператора присваивания, например, Result:=Result+1.

Пример. Программа вычисления факториала n!=1*2* ... *n

  1. без использования подпрограмм

  1. Процедура вычисления факториала

program Fact1;

var i,n:integer; F:integer;

begin

Write(‘n=’); Readln(n);

F:=1;

for i:=2 to n do F:=F*i

Writeln(’Factorial=’, F)

end.

var F: integer;

procedure Pfact(n:integer; var F: integer);

var i:integer;

begin

F:=1;

for i:=2 to n do F:=F*i

end;

begin

Write(‘n=’); Readln(n);

Pfact(n,F); //Вызов процедуры

Writeln(’Factorial=’, F)

end.

  1. Функция вычисления факториала

  1. Функция вычисления факториала в Delphi

var F: integer;

function Ffact(n:integer): integer;

var i:integer; F:longint;

begin

F:=1;

for i:=2 to n do F:=F*i;

Ffact:=F

end;

begin

Write(’n=’); Readln(n);

F:= Ffact(n); //Вызов функции

Writeln(‘Factorial=’, F)

end.

var F: integer;

function Ffact(n:integer): integer;

var i:integer;

begin

Result:=1;

for i:=2 to n do Result:= Result*i

end;

begin

Write(’n=’); Readln(n);

F:= Ffact(n); //Вызов функции

Writeln(‘Factorial=’, F)

end.