Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Приклади використання небезпечного третього способу. 2




Приклади використання небезпечного третього способу. 1

Передача значення

Передавання посилання. 3

Передавання посилання. 2

 

Використання програмних об’єктів як фактичних параметрів:

Ø фактичний параметр може бути тільки змінною, тому що лише змінна має у своїй конструкції ім’я, яке заміщує посилання в імені формального параметра;

Ø Якщо фактичний параметр є змінною індексованого типу, то індекс попередньо обчислюється.


 

Семантика:

Цей спосіб дає змогу присвоювання фактичним параметрам значень через відповідні їм формальні параметри, впливаючи тим самим на середовище, яке оточує виклик підпрограми. А так як змінювати значення константи, літерали та вирази не мають змоги (на відміну від змінних), в якості фактичних параметрів, переданих за посиланням, данні програмні об’єкти використовувати неможливо.


Передавання імені. 1

 

Ім'я фактичного параметра подається буквально (текстуально) без обчислень замість імені формального параметра:

 


Передавання імені. 2

 

Використання програмних об’єктів як фактичних параметрів:

Ø якщо фактичний параметр – скалярна змінна, то передавання імені точно відповідає способу передавання посилання;

Ø якщо фактичний параметр – вираз, побудований із скалярних об'єктів, то результат буде аналогічний способу передавання значення. Однак обчислення виразу у підпрограмі відбуватиметься щоразу при обчисленні формального параметра;

Ø Якщо фактичний параметр – елемент мультизначення індексованого типу, то результат буде аналогічний способу передавання значення. Проте індекс обчислюється щораз при використанні формального параметра.


Передавання імені. 3

 

Семантика:

Цей спосіб найбільш ефективний, але й найбільш небезпечний, тому, як правило, у мовах програмування він не реалізується.


Приклад застосування різних способів передачі параметрів

i: integer;

а: array [1…2] of integer;

subroutine P(x: integer);

i:= i + 1;

x:= x + 2;

end P;

begin

a[1]:= 10;

a[2]:= 20;

i:= 1;

P(a[i]);

end.


 

a[i] = 10

початкове значення х = 10

кінцеве значення а = (10, 20)

2. Передача посилання

 

x = a[i] = a[1]

в підпрограмі х:= х + 2 означає a[1] = a[1] + z

кінцеве значення а = (12, 20)

3. Передача імені

 

x = a[i] = a[i]

в підпрограмі x:= x + 2 означає a[i]:= a[i] + 2

кінцеве значення а = (10, 22)


 

 

Підпрограма 1:

 

F(x)

a * x + 3;

end F;

 

тоді виклик F(b + c) призведе до виразу a * b + c + 3


Підпрограма 2:

swap(int a, b)

int t;

t = a;

t = b;

b = t;

end swap;

тоді виклик swap(i, a[i]) призведе до виконання наступних операторів:

t = i;

i = a[i];

a [i] = t;

 

Зазначення способів передачі параметрів.1

 

Отже, у списку формальних параметрів необхідно зазначити спосіб передавання значень параметрів. Це можна робити трьома шляхами|коліями|:

· явно, використанням спеціально зарезервованих слів;

· за замовчуванням;

· комбінуванням двох попередніх способів (явно або за замовчуванням).


Зазначення способів передачі параметрів.2

 

Наприклад, в мові Pascal спосіб передавання значень параметрів зазначається наступним чином шляхами|коліями|:

· передавання значення вказується за замовчуванням;

· передача посилання вказується зарезервованого лексемою var r;

· передача найменуванняне використовується.

 

У мові С реалізовано тільки один спосіб – передавання значення, інших способів немає.

Повертання результатів із підпрограми

 

Закриті підпрограми можуть повертати результат у зовнішнє оточення підпрограми трьома шляхами:

· використовуючи способи передавання параметрів за посиланням або за найменуванням;

· використовуючи в тілі підпрограми об'єкти, описані глобально;

· формуючи результат спеціальним оператором і у спеціальному місці пам'яті поза підпрограмою.


Процедури та функції

 

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

Підпрограми залежно від того, чи є у них результат і яким із вказаних шляхів він повертається, поділяються на два типи: процедури та функції.





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


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


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



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




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