Соответствие между сфап и сфоп по видам параметров 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Соответствие между сфап и сфоп по видам параметров



Соответствие по количеству и порядку следования является тривиальным. Остановимся на понятиях - соответствие по типу и виду параметров. Соответствие по типу означает, что значение фактического параметра должно быть того типа, который указан для формального в описании подпрограммы.

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

- формальный параметр-переменная;

- формальный параметр-значение;

- формальный параметр-константа.

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

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

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

Механизм обработки вызова подпрограммы

1. В свободном участке памяти создается динамический экземпляр данных подпрограммы, в который входят:

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

б) участки памяти, поименованные именами формальных параметров – значений, структура участков определяется типом этих параметров;

в) участки памяти под локальные переменные (переменные, описанные в соответствующем разделе подпрограммы);

2. Осуществляется передача фактических параметров в подпрограмму:

а) фактические параметры-значения вычисляются. Полученные значения поступают в динамический экземпляр данных на место соответствующих формальных параметров;

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

3. Над переданными фактическими параметрами и локальными переменными выполняются действия подпрограммы;

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

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

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

Пример применения подпрограмм

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

Правило вычисления этого значения следующее:

Исходя из этого, видим, что трижды необходимо вычислить факториал натурального числа. Целесообразно реализовать вычисление факториала в виде вспомогательного алгоритма.

Разработка подпрограммы



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 467; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.69.143 (0.008 с.)