Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
№___230105__ МУ_лаб и пр_ОАиП_часть первая.docx
Скачиваний:
4
Добавлен:
26.04.2019
Размер:
383.97 Кб
Скачать

Передаваемые параметры процедур и функций

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

Формальные параметры – это абстрактные объекты, по отношению к которым выполняется процедура или функция. Формальные параметры – это параметры, используемые при описании процедуры или функции.

Procedure <Имя_Процедуры> [ ( < Формальные_Параметры > ) ] ;

В отличие от них фактические параметры – это конкретные объекты, с которыми работает процедура или функция. Фактические параметры находятся в списке параметров при вызове.

<Имя_Процедуры> [ ( < Фактические_Параметры > ) ] ;

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

Типы фактических параметров должны соответствовать типам формальных параметров Количество фактических параметров при обращении к подпрограмме должно совпадать с количеством формальных параметров

Соответствие между фактическими и формальными параметрами устанавливается по их номерам в списке слева направо: первому слева формальному параметру ставится в соответствие первый слева фактический параметр, второму слева формальному – второй слева фактический и т. д

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

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

Совпадение имен фактических и формальных параметров никаких неприятностей в программах не вызывает.

Хотя внешне все формальные параметры – это идентификаторы, но функционально они различаются: через одни параметры подпрограмма получает исходные данные, через другие отдает свои результаты, а некоторые параметры служат и для того и для другого одновременно.

По этому принципу параметры можно разделить на три группы:

входные - через которые процедура получает исходные данные;

выходные - через которые процедура отдает результаты;

возвратные - через которые процедура получает данные и отдает результаты.

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

В языке Паскаль различают формальные параметры четырех видов:

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

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

параметры-процедуры;

параметры-функции.

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

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

При вызове процедуры (функции) на место параметра-значения могут подставляться фактические параметры в виде констант, переменных, стандартных функций, арифметических выражений. Рассмотрим это на примере процедуры нахождения корней квадратного уравнения, где A, B, C - коэффициенты квадратного уравнения, Root1,Root2 - его корни.

Procedure Roots (A,B,C:Real; Var Root1,Root2:Real);

константы

Roots ( ConstA, ConstB, ConstC, Root1, Root2 );

конкретные числовые значения

Roots ( 15, 44, 371, Root1, Root2 );

переменные

Roots ( A1, B1, C1, Root1, Root2 );

стандартные математические или «библиотечные» функции

Roots ( Sqr(A), Abs(B), Sqrt(C), Root1, Root2 );

арифметические выражения

Roots ( A+Sqr(В), B+А, 4-Sqr(C), Root1, Root2 );

При этом необходимо помнить о соответствии типов формальных и фактических параметров.

Параметр-значение может быть только входным параметром процедуры, использование его в качестве результата вычислений даст непредсказуемый ответ