Методи за заместване на аргументи

Процедури и функции

Структура, предназначение и приложение на подпрограми. Параметри и аргументи, обхват на имената. Процедурен тип данни.

Обява и описание. 2

Декларация на функция. 2

Декларация на процедурата.. 2

Описание на подпрограмата.. 2

Списък с параметри. 3

Върнати стойности. 4

Извикване на подпрограма.. 5

Методи за заместване на аргументи. 6

Механизъм за предаване на стойност. 6

Механизъм за предаване на стойност. 7

Механизъм за предаване на стойност. 8

Обхват на имена. 8

Разделяне на контекста. 8

Страничен ефект. 9

Съвпадение на името. 9

Нетипизирани параметри.. 10

Изрично преобразуване на типа. 10

Комбинация в паметта. 10

Отворете опции.. 11

Отворени масиви.. 11

отворени линии. единадесет

процедурен тип данни. 12

Подпрограми

Много поетично обяснение на концепцията за подпрограма е дадено от V.F. Точки: "Подпрограмата е припев на песен, която се пее няколко пъти, но в текста се отпечатва само веднъж."

Всъщност, ако има нужда многократно да извършвате едни и същи действия, тогава е съвсем логично да ги опишете веднъж и след това само да поставите връзка към тях. Точно това означават подпрограмите.

От математическа гледна точка всякаподструктура е затворена част от цялото, която може да се разглежда като независимаструктура: подмножество е множество, подгрупа е група, субалгебра е алгебра, подпространство е пространство и т.н.

Следователно подпрограмата е преди всичко програма. С всички атрибути, които разчитат на пълноценна програма: име, секции с описание на етикети (етикет), константи (const), типове(тип), променливи (var) и дори със собствени (вложени) функции и процедури.

В Pascal има два вида подпрограми: процедури и функции. Описвайки техните общи черти, ще използваме обобщения термин „подпрограма“. Ако в текста се срещнат думите "процедура" или "функция", това ще означава, че представената информация е характерна само за един специфичен тип подпрограми: или само процедури, или само функции.

Съобщение и описание

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

Декларация на функцията

Функциите се декларират по следния начин:

Декларация на процедурата

Процедурите трябва да бъдат декларирани по следния начин:

Описание на подпрограмата

край; (* край на тялото на подпрограмата *)

процедура err(c:байт; s:низ);

Списък с параметри

Списъкът с параметри може напълно да липсва:

func1: булево;

В този случай подпрограмата не получава никакви променливи "отвън". Припевът на песента, споменат в началото на лекцията, е само пример за подпрограма, която не получава никакви данни при извикване.

Липсата на параметри и в резултат на това стойности, предадени отвън, изобщо не означава, че подпрограмата ще изпълнява точно същите действия при всяко повикване. Тъй като глобалните променливи са видими от всяка подпрограма, техните стойности могат имплицитно да променят вътрешното състояние на подпрограмите. Този много нежелан ефект ще бъде разгледан в раздела "Странични ефекти".

Ако има параметри, тогава всеки от тях се описва съгласно следния шаблон:

За възможните начини за заместване на стойности в параметри ( , var, const ) ниеЩе го разгледаме в раздела Методи за заместване на аргументи.

Ако методът на заместване и типът на няколко параметъра са еднакви, описанието на тези параметри може да се комбинира:

Пример за описание на трите метода на заместване:

функция func2(a,b:byte;var x,y,z:real;const c:char):integer;

Само прости (несъставни) типове данни могат да бъдат посочени в заглавката на подпрограмата. Следователно, опит за писане

процедура proc2(a: масив[1..100]от char);

тип arr = array[1..100] от char;

процедура proc2(a: arr);

func2(променлива x: низ): arr;

Върнати стойности

Основната разлика между функциите и процедурите е броят на стойностите, които връщат.

За връщане на резултата се използва специална "променлива", която има име, което съвпада с името на самата функция. Операторът за присвояване на стойността на тази "променлива" трябва задължително да се появи в тялото на функцията поне веднъж.

функция min(a,b: цяло число): цяло число;

За разлика от функциите, процедурите изобщо не връщат (изрично) никакви стойности. Как все пак да получите резултатите от процедурата, ще научите от параграфа " Параметър-променлива".

Извикване на подпрограма

Всяка подпрограма може да бъде извикана не само от основното тяло на програмата, но и от всяка друга подпрограма, декларирана след нея.

При извикване действителните параметри или аргументи се предават на подпрограмата (в скоби след името на подпрограмата, разделени със запетаи):

Аргументите могат да бъдат променливи, константи и изрази, които включват извиквания на функции.

Броят и типовете аргументи, предадени на подпрограмата, трябва да съответстват на броя и типовете на нейните параметри. В допълнение, типът на всеки аргумент трябване забравяйте да вземете предвид метода на заместване, посочен за съответния параметър (повече за това ще бъде обсъдено в раздела „Методи за заместване на аргументи“). Ако подпрограмата изобщо няма декларирани параметри, тогава при извикване списъкът с аргументи, които трябва да бъдат предадени, ще липсва заедно със скобите около него.

Извикването на функция не може да бъде самостоятелен оператор, защото върнатата стойност трябва да бъде записана някъде. Но може да стане равноправен участник в аритметичен израз. Например:

ако min(z, min(x,y))= 0 тогава. ;

Процедурата не връща изрично нищо, така че нейното извикване е отделен оператор в програмата. Например:

Забележка: След като извиканата подпрограма завърши своята работа, контролът се прехвърля към оператора, следващ оператора, който е извикал тази подпрограма.

Методи за заместване на аргументи

Както бе споменато по-горе, при извикване на подпрограма, заместването на стойностите на аргументите в параметри се извършва в съответствие с правилата, посочени в атрибута. Ще разгледаме три различни стойности за този атрибут:

Стойност на параметър

Описание

В списъка с параметри на подпрограмата няма служебна дума преди параметъра стойност. Например функцията func3 има три параметъра на стойност:

функция func3(x:real; k:integer; флаг:boolean):real;

Когато извиквате подпрограма, стойностен параметър може да бъде свързан с аргумент, който е израз, променлива или константа, например:

length:= func3(shirina/2, min(a shl 1,ord('y')), true)+0,5;

За типове данни тук не е необходимо строго съвпадение (еквивалентност), достатъчна е и съвместимостта на присвояването (виж Лекция 2).

Не намерихте това, което търсихте? Използвайте търсачкатаgoogle на сайта: