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

 

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

 

 

 

В результате прогона программы при сохранении вводимых значений переменных a и b по умолчанию будет выведено:

 

Как видно из примера, удвоение второго формального параметра в процедуре Удвоение не вызвало изменения фактической переменной b, т.к. этот параметр описан в заголовке процедуры как параметр-значение.

 

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

 

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

 

Демонстрационные примеры:

1. Вычислить разность двух простых дробей: (a, b, с, d — натуральные числа). Результат получить в виде простой несократимой дроби .

Следует вычислить числитель и знаменатель по правилам вычитания дробей, и сократить их на наибольший общий делитель (НОД). Вычисление НОД двух чисел оформим в виде подпрограммы, используя известный в математике алгоритм Евклида.

Составим два варианта программы решения этой задачи: с подпрограммой-функцией и подпрограммой-процедурой.