русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-11-27; просмотров: 3279; Нарушение авторских прав


Условие – параметр передается в подпрограмму, но изменять его подпрограмма не должна. Нежелательно передавать параметр как

параметр-переменную. Можно передать как параметр-значение, но если этот параметр имеет большой размер (массив, запись и т.д.), то копии могут занять большую часть стека или даже переполнить его. Это ведет к уменьшению быстродействия программы. В этой ситуации параметр лучше передать как параметр-константу. Такой параметр, если он структурного типа, передается своим адресом, но предусмотрена его защита от изменений (версия 7.0).

Параметр-константа указывается в заголовке подпрограммы аналогично параметру-значению, но перед именем параметра записывается зарезервированное слово const. Действие слова const распространяется до ближайшей точки с запятой, т.е. в пределах одной группы.

Пример

function NewString (const s :string) :string;

Тип параметра-значения может быть любым, кроме файлового.

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

Параметр-константу нельзя передавать в другую подпрограмму в качестве фактического параметра.

Пример Функция вычисления максимального элемента в массиве.

function max(const mas: tarr;n: byte): integer;

var

ma:integer;

i:byte;

begin

ma:=mas[1];

for i:=1 to n do

if ma<mas[i] then ma:=mas[i];

max :=ma;

end;

Пример

const

a: integer = 5;

b: integer = 7;

procedure inc(var c: integer; b: integer)

begin

c:= c+c;

b:= b+b;

writeln(‘удвоенные : ’,c: 5, b: 5);

end;

begin

writeln(‘исходные : ’,a: 5, b: 5);

inc(a,b);

writeln(‘результат : ’,a: 5,b: 5);

end.

исходные :
удвоенные :
результат :

b – параметр-значение



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

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

а – параметр-переменная

При вызове подпрограмме передается сама переменная (адрес переменной). Изменение параметра-переменной приводит к изменению фактического параметра в вызывающей программе.

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

Пример может служить иллюстрацией механизма «закрывания» глобальной переменной одноименной локальной: хотя b объявлена как глобальная, в теле процедуры её «закрывает» локальная, объявленная как параметр-значение.

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

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

Оценка вариантов передачи результатов работы подпрограммы вызывающей программе

- злоупотребление глобальными связями делает программу запутанной, трудной в понимании и сложной в отладке;

- рекомендуется, где это возможно, использовать передачу результатов через фактические параметры-переменные;

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

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

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



<== предыдущая лекция | следующая лекция ==>
Параметры-переменные | Локализация имен


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.