Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМКД-Паскаль-2012.docx
Скачиваний:
38
Добавлен:
01.05.2015
Размер:
561.45 Кб
Скачать

Параметр-константа

Описание

В списке параметров подпрограммы перед параметром-константой ставится служебное слово const. Например, процедура proc4 имеет один параметр-переменную и один параметр-константу:

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

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

Механизм передачи значения

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

Функции

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

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

Обратите внимание на то, что результат процедуры присваивается переменной.

Мы вызываем процедуру с помощью выражения sum(12,3,a). Таким образом, результат выполнения процедуры присваивается переменной а. Описанный способ всегда используется для присвоения результата глобальной переменной (переменная a объявлена вне процедуры).

В программе с функцией целой переменной a присваивается результат вычисления функции sum(12,3): a:=sum(12,3).

Сравните это выражение с выражениями, где используются стандартные функции, например, a:=sqr(2).

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

Вам будет понятно, что с помощью выражения a:=sum(12,3) целой переменной a присваивается сумма целочисленных значений 12 и 3.

Обратите внимание на заголовок функции.

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

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