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

Лекция 7 Подпрограммы, модули, файлы

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

Декомпозиция (разбиение) программы на небольшие логически завершенные блоки – это один из основных путей написания программы в ясной и понятной форме.

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

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

Спецификация (прототип) подпрограммы включает:

  • Тип подпрограммы: function (функция), procedure (процедура). function – подпрограмма явно возвращает только один результирующий объект данных; procedure – подпрограмма возвращает более одного значения или действия подпрограммы сводятся только к модификации ее аргументов вместо возвращения результата.

  • Имя подпрограммы;

  • Формальные параметры: аргументы (порядок следования, тип каждого аргумента) и результаты (порядок следования, тип каждого результата).

Реализация подпрограммы (тело подпрограммы) включает:

  • Описание локальных данных, используемых подпрограммой;

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

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

Вызывающая программа – программа (подпрограмма), которая обращается к подпрограмме (вызывает подпрограмму).

Оператор вызова – оператор вызывающей программы, с помощью которого она обращается к подпрограмме. Оператор вызова подпрограммы содержит:

  • имя подпрограммы;

  • список фактических параметров

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

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

Схема передачи управления между вызывающей и вызываемой программами приведена на рисунке 1.

Рисунок 1 – Схема передачи управления между вызывающей

и вызываемой программами

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

1.1 Глобальные данные

Глобальные данные – это данные (константы, переменные, массивы и другие), объявленные в начале программы и доступные в подпрограммах и «главной программе» (основном блоке программы).Глобальные данные следует использовать только для передачи информации от одной программы (подпрограммы) к другой. Например, одна подпрограмма формирует значения данных, а другая подпрограмма использует эти значения.

1.2 Способы передачи параметров

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

Передача значением

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

В операторе вызова фактическим параметром может быть:

  • Константа;

  • Переменная;

  • Выражение;

  • Функция.

Значение фактического параметра при изменении соответствующего ему формального параметра не изменяется

Передача по адресу

В этом случае формальный параметр a (описание параметра начинается со слова var) обрабатывается в подпрограмме как переменная, адрес которой есть адрес соответствующего фактического параметра x.

В операторе вызова фактическим параметром может быть только переменная. Любое изменение формального параметра a есть изменение соответствующего ему фактического параметра x.

1.3 Функции

Формат спецификации функции:

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

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

<имя подпрограммы> := <результат>;

где результат – это вычисленное значение в подпрограмме (константа, переменная, элемент массива и другие элементы данных).

Вызов функции включается в оператор языка Pascal.

Пример вызова функции P(x):

y:= P(x); {вызов P(x) в операторе присваивания}

if P(x)>0 then {вызов P(x) в операторах if и writeln }

writeln(P(x));

В качестве примера рассмотрим описание и использование функции

power, которая возводит переменную base в степень exponent – baseexponent.

function power( base, exponent: real): real;

begin

power:= exp( exponent * ln(base)); {exp, ln – встроенные функции Pascal: }

{ exp (x) – ex}

{ ln (x)– натуральный логарифм x }

end;

Вызов функции power может быть, например, таким: writeln (power(3, 5));