русс | укр

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

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

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

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


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

Параметры–значения и параметры–переменные.


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


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

 

Существует две разновидности формальных параметров в D Pascal: параметры-переменные и параметры-значения. В объявлении процедуры параметры-переменные выглядят как объявления переменных. Они начинаются ключевым словом VAR, за которым следует список идентификаторов, разделенных запятыми, которые являются именами формальных параметров, двоеточие и идентификатор, определяющий тип параметра. Параметры-значения определяются как параметры-переменные, за исключением того, что ключевое слово VAR пропускается. В следующем примере VarParm – формальный параметр-переменная типа T, а ValParm – формальный параметр-значение типа T.

 

PROCEDURE P (VAR VarParm: T; ValPrm: T);

 

Синтаксические правила, описывающие параметры:

 

<формальный параметр> ::= <параметр-переменная> | <параметр-значение>

<параметр-переменная> ::= VAR <список идентификаторов> : <идентификатор типа>

<параметр-значение> ::= <список идентификаторов> : <идентификатор типа>

 

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



 

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

 

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

 

Разница между параметрами-переменными и значениями видна в программе VarVsValue.

 

PROGRAM VarVsValue(OUTPUT);

VAR

A, B: INTEGER;

PROCEDURE Bump (VAR VarF: INTEGER; ValF: INTEGER);

BEGIN {Bump}

VarF := VarF + 1;

ValF := ValF + 1;

WRITELN(VarF, ValF)

END; {Bump}

BEGIN {VarVsValue}

A := 0;

B := 0;

Bump(A, B);

WRITELN(A, B)

END. {VarVsValue}

Выполнение:

OUTPUT: 1 1

1 0

Bump добавляет 1 к каждому формальному параметру, так что оба ValF и VarF имеют значение 1 в конце процедуры. Однако, изменения сделанные с формальными параметрами в Bumpпоявляются только в фактическом параметре, который связан с формальным параметром-переменной и не происходят в фактическом параметре, который был связан со значением формального параметра-значения. А имеет значение 1 в конце блока программы, а B сохранило свое значение, которое она имела до выполнения процедуры.

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

В объявлении:

PROCEDURE P (Y: Typ);

T;

Тело T добавляется в состояние выполнения как значение идентификатора P. Тогда значение процедурного оператора

P(E)

будет

P(E)(s) = VAR Y: Typ ◦ Y := E ◦ s(P) ◦ VAR Y: TypT

Если бы здесь были параметры-переменные или конфликт имен локальных и глобальных идентификаторов, они должны были бы модифицированы в s(P) как описано в разделах 9.1.4 и 9.2.5 соответственно.

Это определение может быть использовано для вычисления значения вызова Bump в VarVsValue. Начальное состояние будет:

{OUTPUT·<††, ††, W>}

Далее значение функции программы будет

VAR A, B: INTEGER ◦

BEGIN A := 0; B := 0’; Bump (A, B);WRITELN(A, B) END ◦

VAR A, B: INTEGERT ◦ . ({OUTPUT·<††, ††, W>}) =

VAR A, B: INTEGER ◦

BEGIN A := 0; B := 0’; Bump (A, B);WRITELN(A, B) END ◦

VAR A, B: INTEGERT ◦ . ({OUTPUT·<††, ††, W>, A·?, B·?}) =

Bump (A, B);WRITELN(A, B) ◦ VAR A, B: INTEGERT

. ({OUTPUT·<††, ††, W>, A·0, B·0})

Процедурный оператор расширяется до серии композиций функций, которые применяют функцию, соответствующую объявлению ValF, присваиванию значения B ValF, тела Bump, где вхождения A заменяются на VarF и транспозицию объявления ValF.

 



<== предыдущая лекция | следующая лекция ==>
Константы. | Функции.


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


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

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

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


 


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

 
 

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

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