Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Тема№ 26 Механизмы передачи параметров процедурам




Тема№25 Область видимости переменных

 

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

 

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

 

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

 

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

 

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

 

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

 

– параметры-значения;

 

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

 

– параметры-процедуры, перед которыми должно стоять служебное слово procedure;

 

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

 

– нетипизированные параметры, перед которыми должно стоять служебное слово var, а указание типа должно отсутствовать.

 

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

 

Примеры заголовков:

 

procedure P(procedure В; function С: real; Q. W. R: char); procedure A:

 

Между формальными и фактическими параметрами должно быть полное соответствие:

 

– формальных и фактических параметров должно быть одинаковое количество;

 

– порядок следования фактических и формальных параметров должен совпадать;

 

– тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра.

Параметры-значения

 

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

 

procedure Abort(Msg: string):

 

function Step(N: integer; X; real): real:

 

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

Параметры-переменные

 

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

 

procedure Example(var M,N: integer; var Y: real);

 

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

 




Поделиться с друзьями:


Дата добавления: 2015-04-24; Просмотров: 396; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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