Студопедия

КАТЕГОРИИ:


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

Процедури




 

Підпрограми першого типу не виробляють значення–результат, а інші значення передають у зовнішнє оточення першими двома способами і називаються процедурами (procedure).

Для позначення процедур може використовуватися зарезервоване слово procedure (Pascal).


Функції

 

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

Для позначення функції може використовуватися зарезервоване слово function.

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


Опис підпрограми на мові С та її використання

 

// підпрограма fun є процедурою, яка нічого не отримує через параметри та нічого не повертає у оточення виклику.

void fun() // інтерфейс підпрограми

{ // тіло підпрограми

int i;

i = 25;

}

 

void main

{

fun(); // виклик підпрограми

}


Опис підпрограми swap

 

// підпрограма swap є процедурою, яка отримує два параметри по значенню та нічого не повертає у оточення виклику.

void swap(int, int); // прототип підпрограми

void main()

{

int nx, ny;

nx = 5;

ny = 6;

swap (nx, ny); // nx, ny – фактичні параметри

}


// а, b – формальні параметри, передані за значенням

void swap(int a, int b)

{

int t; // t – локальна змінна підпрограми

t = a; // а, b – параметри підпрограми

a = b;

b = t;

}

При x = 5, y = 6

t = 5, a = 6, b = 5

Після виклику x = 5, y = 6

 

Змінені значення формальних параметрів не впливають на значення фактичних (результати не повертаються з підпрограми)


Опис підпрограми на мові Pascal та її використання

 

// підпрограма fun є процедурою, яка нічого не отримує через параметри та нічого не повертає у оточення виклику.

program _;

procedure fun; // інтерфейс підпрограми

var // опис локальних змінних підпрограми

i: integer;

begin // тіло підпрограми

i:= 25;

end;

Begin

fun; // виклик підпрограми

End.


Опис підпрограми swap

 

// підпрограма swap є процедурою, яка отримує два параметри по значенню та нічого не повертає у оточення виклику.

program _;

// а, b – формальні параметри, передані за значенням

procedure swap(a: integer; b: integer);

var

t: integer;

begin

t:= a; // t – локальна змінна підпрограми

a:= b; // а, b – параметри підпрограми

b:= t;

end;


var

nx, ny: integer;

Begin

nx:= 5;

ny:= 6;

swap (nx, ny); // nx, ny – фактичні параметри

End.

 

При x = 5, y = 6

t = 5, a = 6, b = 5

Після виклику x = 5, y = 6

 

Змінені значення формальних параметрів не впливають на значення фактичних (результати не повертаються з підпрограми)


Опис підпрограми swap, яка впливає на оточення виклику

 

program _;

// а, b – формальні параметри, передані за посиланням

procedure swap(var a:integer; var b:integer);

var

t: integer;

begin

t:= a;

a:= b;

b:= t;

end;


var

nx, ny: integer;

Begin

nx:= 5;

ny:= 6;

swap (nx, ny);

End.

 

При x = 5, y = 6

t = 5, a = 6, b = 5

Після виклику x = 6, y = 5

 

Змінені значення формальних параметрів впливають на значення фактичних (результати повертаються з підпрограми через параметри)


Опис підпрограми add

 

// підпрограма add є функцією, яка отримує два параметри по значенню та повертає значення цілого типу у оточення виклику.

int add(int, int); // прототип підпрограми

void main()

{

int nx, ny, sum;

nx = 5;

ny = 6;

sum = add (nx, ny);

}


int add(int a, int b)

{

int t;

t = a*2 + b;

return t; // спеціальний оператор повернення значення

}

При x = 5, y = 6

t = 16

sum = 16

 

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


Опис підпрограми add

 

// підпрограма add є функцією, яка отримує два параметри по значенню та повертає значення цілого типу у оточення виклику.

program _;

function add(a:integer; b:integer):integer;

var

t: integer;

begin

t:= a*2 + b;

add:= t;

end;


var

nx, ny, sum: integer;

Begin

nx:= 5;

ny:= 6;

sum:= add (nx, ny);

End.

 

При x = 5, y = 6

t = 16

sum = 16

В мові Pascal спеціальним оператором повернення значення в оточення виклику є оператор привласнення з позначенням функції в правій частині.


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

 

// підпрограма swap є процедурою, яка нічого не отримує та нічого не повертає у оточення виклику.

int x, y;

void swap();

void main()

{

x = 5;

y = 6;

swap();

}


void swap()

{

int t;

t = x; // використання глобальних об’єктів x, y

x = y;

y = t;

}

При x = 5, y = 6

t = 5, x = 6, y = 5

Після виклику x = 6, y = 5

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


Опис підпрограми swap, яка впливає на оточення виклику

 

 

 

void swap(int*, int*);

void main()

{

int nx, ny;

nx = 5;

ny = 6;

swap(&nx, &ny);

}

void swap(int *a, int *b)

{

int nTemp;

nTemp = *a;

*a = *b;

*b = nTemp;

}

Змінені значення формальних параметрів впливають на значення фактичних (результати повертаються з підпрограми через параметри)





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


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


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



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




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