Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec03-АТП2011-12.doc
Скачиваний:
0
Добавлен:
08.11.2018
Размер:
78.85 Кб
Скачать
  1. Лекция №3

    Тема:

    Процедуры и функции

    ПЛАН

    3Лекция №3

    3.1Общие сведения

    3.2Область видимости идентификаторов

    3.3Обмен данными между программой и подпрограммами

    3.4Рекурсия

    Время:

    2 ч.

    Литература:

    1. Общие сведения

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

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

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

В языке Паскаль существует два вида подпрограмм:

  • процедуры;

  • функции.

Структура описания любой подпрограммы (процедуры или функции) аналогична структуре программы и содержит следующие разделы:

  1. заголовок;

  2. раздел описаний;

  3. раздел операторов.

Раздел описаний и раздел операторов образуют тело подпрограммы (процедуры или функции).

Заголовок процедуры имеет вид:

Procedure имя(список параметров);

Заголовок функции имеет вид:

Function имя(список параметров): тип результата;

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

Функция – это подпрограмма, которая возвращает значение. Поэтому в ее разделе операторов всегда присутствует присваивание вида:

имя функции:=выражение;

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

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

Пример использования процедуры. (вывод заданного символа определенное число раз)

Program NWrt;

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

Procedure NWrite(Ch:Char;N:Integer);

Var

i:Integer;

Begin

For i:=1 to N do Write(Ch);

End;

Var

X:Char;

N:Integer;

{Раздел операторов программы}

BEGIN

Write(‘Ввести символ=’);

ReadLn(X);

NWrite(X,10); {Вызов процедуры}

END.

При составлении блок-схем алгоритмов подобных программ руководствуются следующим:

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

  2. после блок схемы основной программы приводят блок-схемы ее подпрограмм;

  3. блок-схема подпрограммы составляется по таким же правилам, как и схема обычной программы.

Таким образом, блок-схема алгоритма приведенной выше программы:

Блок-схема алгоритма процедуры NWrite

Пример использования функции (вычисление корня степени N из числа X)

Program NRoot;

{Описание функции}

Function Root(X:Real;N:Byte):Real;

Begin

If X=0 then Root:=0

Else Root:=Exp(Ln(X)/N);

End;

Var R:Real;

BEGIN

R:=Root(27,3); {Вычисление с помощью заданной функции}

WriteLn(‘Корень=’,R:8:4);

END.

Вызов подпрограмм

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

Вызов процедуры в основной программе является оператором.

Семантика вызова процедуры: приостанавливается текущая последовательность операторов, вычисляются значения передаваемых процедуре параметров (если они есть), затем выполняется последовательность операторов в теле процедуры; после завершения их выполнения управление передается на оператор, следующий за вызовом процедуры.

Вызов функции является не оператором, а элементом выражения.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]