Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lecture6.doc
Скачиваний:
5
Добавлен:
18.11.2018
Размер:
51.2 Кб
Скачать

9

Лекция №6

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

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

  • улучшить структуру программы, облегчая её понимание;

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

Приведем типичные ситуации, когда следует прибегать к выделению подпрограмм:

  • если в программе несколько раз встречается одна и та же последовательность операторов;

  • иногда рутинные действия заслоняют смысл основного алгоритма, в этом случае второстепенные фрагменты полезно убрать в подпрограмму;

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

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

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

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

Существуют два способа объединения подпрограмм и программ:

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

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

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

  • подпрограмма начинается с заголовка, содержащего имя подпрограммы, передаваемые в неё и возвращаемые от неё параметры, запись заголовка подпрограммы отличается от записи заголовка программы;

  • подпрограмма заканчивается точкой с запятой, а не точкой.

В Турбо Паскале предусмотрено два типа подпрограмм:

FUNCTION;

PROCEDURE.

Пример 1.

program exzampl1;

var a,b,q:real;

{ подпрограмма вычисления суммы }

procedure sum(x,y:real;var z:real);

begin z:=x+y end;

{ основная программа }

begin

read(a,b);

sum(a+b,b-1,q);{обращение к подпрограмме }

writeln(‘сумма (a+b)+(b-1)=’,q:5:1)

end.

Пример 2.

program exzampl2;{заголовок основной программы}

. . .{описание переменных основной программы}

var y:real;

function lg(x:real):real;{заголовок подпрограммы-функции}

begin

lg:=ln(x)/ln(10)

end;

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

. . .

y:=10;

writeln(‘lg(‘,y:3:1,’)=’,lg(y):6:2)

end.

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

Заголовки процедуры и функции – первая строка в тексте подпрограммы – имеют вид:

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

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

Форма списка параметров в заголовке подпрограммы и при вызове подпрограммы отличаются. При вызове переменные, константы или выражения (фактические параметры) следуют через запятую, а в заголовке запись переменных напоминает объявление переменных в разделе описания переменных. В заголовке подпрограммы для всех элементов списка должен быть указан тип данных. Несколько переменных, отнесенных к одному типу, пишутся через запятую, а группы переменных различного типа отделяются точкой с запятой.

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

Стандартные процедуры и функции реализованы не на языке Турбо Паскаль, так как в их заголовках имеются значительные отклонения от правил, недопустимые при разработке пользовательских программ на Паскале. Так, процедура WRITE имеет список параметров произвольной длины. Некоторые подпрограммы позволяют передавать им данные нескольких типов, имеются необязательные при обращении параметры. Так, функция RANDOM может использоваться без параметров – в этом случае она возвращает случайное число в диапазоне от 0 до 1. Применение этой функции с целочисленным аргументом RANDOM(n) приводит к тому, что она возвращает целое случайное число от 1 до n-1.

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

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