Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000555.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
19.12 Mб
Скачать

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

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

Формальные параметры бывают двух видов:

параметры-значения (в этом случае фактические параметры передаются по значению);

параметры-переменные (в этом случае фактические параметры передаются по ссылке);

Параметры-значения задаются как

имя:тип

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

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

Таким образом, параметры значения подходят для задания только входных данных процедуры.

Однако процедура может не только получать значения от вызывающей программы, но и возвращать в программу новые значения. Для этой цели служат параметры-переменные.

Параметры-переменные задаются с использованием ключевого слова VAR

VAR имя:тип

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

Можно сказать, что формальный параметр-переменная — это просто другое имя для аргумента.

Под этим именем значение аргумента становится доступным в процедуре. Все преобразования, выполняемые в процедуре над параметром-переменной, выполняются, таким образом, над аргументом.

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

Пример. Ввести два числа и вывести большее, используя процедуру.

program Maximum;

var x,y,r:real;

procedure MAX (A,B: real; var M:real);

begin

if A > В then M := A else M := В

end;

begin

write ('Введите два числа '); read(x,y);

MAX(x,y,r);

writeln('Большее число ',г);

end.

Возможно также использование параметров-переменных, не меняющих значения в процедуре. Такие параметры-переменные задаются с использованием ключевого слова CONST

CONST имя:тип

Подобный способ может использоваться, например, при задании в качестве входных параметров массивов большого размера. Использование параметров-значений в этом случае нецелесообразно, так как потребует дополнительного расхода памяти ЭВМ на создание внутренней копии массива и времени на копирование.

2.5.5. Локальные и глобальные переменные

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

Переменная, объявленная в программе, называется глобальной. Это означает, что она может использоваться как в самой программе, так и в процедуре, вызванной из этой программы.

В том случае, когда внутри функции имеется другая функция или переменная, объявленная во внешней функции, она может использоваться во внутренней (является для нее глобальной), а переменная, объявленная во внутренней функции, не может использоваться во внешней.

Областью видимости имени называют часть программы, в которой это имя может использоваться.

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

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

Пример, program scope;

var x, у, z:real;

procedure inside1;

var xl, yl, zl:real

procedure insideZ;

var x2, y2, z:real

begin

(* допустимо использование глобальных переменных х,у*)

(*глобальная переменная z недоступна*) (* допустимо использование локальных переменных*) (* xl,yl,zl,x2,y2,z*)

end; begin

(* допустимо использование глобальных переменных х, у, z*)

(* допустимо использование локальных переменных xl,yl,zl*) end; begin

(* допустимо использование глобальных переменных х, у, z*) end.