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

16

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

В практике программирования часто возникает необходимость вы­полнения одной и той же последовательности операторов в различных частях программы. Наиболее простым способом реализации программы является запись последовательности операторов в тех участках программы, где это необходимо. Однако такой прием зачастую оказываетcя нерациональным. В этом случае целесообразно оформить повторяющуюся группу операторов в виде подпрограммы. В алгоритмическом языке Паскаль возможно организовать два типа подпрограмм (подпрограммы типа процедуры и подпрограммы типа функции. Процедуры и функции позволяют описать повторяющиеся участки вычислений один раз, а в нужных местах программы приводить лишь обращение к этим описаниям. Использование подпрограмм позволяет сократить объем программы, улучшить ее структуру и уменьшить ве­роятность наличия ошибок. Предоставляется возможность реализовать структурное программирование. С некоторыми стандартные процедуры и функции вы уже знакомы и использовали их . Это: стандартные процедуры Read, Write, а так же различные стандартные функции вычисления тригонометрических, логарифмических, экспоненты, вычисления квадратного корня и другие функции. Для стандартных процедур и функций разработаны программы, которые записаны в библиотеке и пользователь, соблюдая определенные правила, обращается к ним по имени с указанием фактических параметров (списка или аргументов).

Подпрограмма - функция

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

Function <имя_функции> (а1;...;аn): <тип результата>;

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

B

Группа любых операторов – тело функции

egin

End;

где а1;...;an - список формальных параметров с указанием типа (указателем типа может быть только простой тип, в том числе и создаваемый пользователем). Формальными параметрами могут быть простые переменные, имена массивов.

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

Обращение к описанной функции в основной программе выполняется аналогично обращению к стандартной функции: указывается имя функции затем в круглых скобках через запятую список фактических параметров <имя_функции>(β1,β2,…,βn),

где β1,β2,…,βn – список фактических параметров. Фактическими параметрами могут быть: константы, переменные (простые и с индексами), массивы, выражения. Список фактических параметров должен строго соответствовать списку формальных параметров (по количеству, порядку следования, типу данных).

Выполнение функции:

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

  • Сверяется имя функции с именами функций в разделе описаний программы

  • Проверяется соответствие списка фактических и формальных параметров

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

  • Выполняется модифицированное тело функции

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

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

Пример 1. Оформить в виде подпрограммы возведение в целочисленную степень у=хn.

Function rez1 (n:integer; x:real) : real;

var i:integer;

begin

rez1:=1;

for i:=1 to n do

rez1:=rez1*x;

end;

Пример 2. Оформить в виде подпрограммы возведение вещественного числа в вещественную степень y=ax.

Function rez2(x:real; a:real) : real;

begin

Rez2:=exp(x*ln(a));

end;

В примере 2 подстепенное выражение не может принимать отрицательное значение или быть равным нулю. В примере 1 может быть и отрицательным.

Переменные n, x, i примера 1 определены только в теле подпрограммы -функции. Вне тела функции они не определены, т.е. не существуют. Аналогичными переменными являются параметры а, х в примере 2.

Обращение к подпрограмме-функции осуществляется по имени функции с указанием в скобках вместо формальных параметров фактических. Причем имена формальных и фактических параметров могут и не совпадать, но их последовательность, количество и тип должны обязательно соответствовать друг другу. Так, обращение к функции rez2 примера 2 может быть таким:

у:=а*rez2(n,х);,

что соответствует решению задачи у=а*хn. Здесь переменная n обязательно должна быть описана как переменная вещественного типа.

В примере 2 переменные х и а являются формальными параметрами - переменные, формально присутствующие в подпрограмме и определяющие тип и место подстановки фактических значений, передаваемых из вызывающей программы. Конкретные (фактические) значения передают фактические параметры при обращении в вызывающей программе. Так, при рассмотренном выше обращении к функции rez2 фактическими параметрами являются переменные n и x.

Пример 3. Вычислить элементы двух векторов: A={ai}, где i=[1..n], n=10 и B={bk}, где j=[1..m], m=7.

Элементы вектора A и B вычисляются по формулам:

Вычислить значение переменной Z=an-bk, где an и bk количества элементов векторов A и B, принадлежащих интервалу [c..d], где c=-1,5; d=4,8.

Вычисление компонент векторов A, B а также подсчет количества элементов векторов принадлежащих интервалу [c..d] оформить подпрограммой.

Структурная схема подпрограммы имеет вид:

да

нет

да

нет

Вычисления элементов векторов также оформим подпрограммой функцией.

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