Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воробьева Соппа Программирование в Паскаль 2006...doc
Скачиваний:
0
Добавлен:
15.01.2020
Размер:
1.4 Mб
Скачать

Глобальные и локальные переменные

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

Локальные переменные определяются в разделе описания var внутри процедуры. Они имеют смысл только в процедуре и недоступны основной программе.

Пример программы с процедурой

Вычислить значение: , где a – заданное вещественное число.

Введем обозначения:

.

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

,

где i – номер шага вычисления (умножения);

n – число шагов вычислений.

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

Program Primer_1;

Var

a, r1, r2, r3, Z: real;

Procedure ST(x: real; n: integer; var P: real);

var

i: integer;

begin

P := 1;

for i := 1 to n do P := Px;

end;

Begin {начало основной программы}

writeln(‘Введите число а’);

read(a);

ST(a, 5, r1);

ST(1/a, 5, r2);

ST(a, 7, r3);

Z := (r1 + r2)/(2r3);

writeln(‘Z=’, Z:6:2);

End.

В заголовке процедуры, заданной именем ST, в списке формальных параметров указаны два входных формальных параметра (x, n) и один выходной (P).

В процессе выполнения программы после ввода заданного числа a три раза последовательно вызывается процедура ST. При каждом вызове происходит соответствующая замена формальных параметров (x, n) на фактические, и вычисленный в процедуре результат через формальный параметр P присваивается фактическим переменным r1, r2, r3 соответственно. Далее вычисляется значение Z и выводится на экран.

Согласование параметров

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

Механизм замены параметров

В списке формальных параметров выделяется два вида параметров: параметры-значения и параметры-переменные. Механизм замены для каждого вида параметров различен.

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

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

Рассмотрим два примера, иллюстрирующих понятия параметра-значения и параметра-переменной.

Пример 1 Пример 2

Program P1; Program P2;

Var Var

x: integer; x: integer;

Procedure Z (y: integer); Procedure Z (var y: integer);

begin begin

y := 1; y := 1;

end; end;

Begin Begin

x := 0; x := 0;

Z(x); Z(x);

writeln(‘x=’, x); writeln (‘x=’, x);

End. End.

В примере 1 процедура Z содержит формальный параметр y, который является параметром-значением, поэтому его изменение в процедуре (y:=1;) не влияет на значение фактического параметра x. После выполнения программы на экран будет выведено: x = 0.

В примере 2 формальный параметр y является параметром-переменной. Это означает, что его значение после выполнения процедуры Z присваивается фактическому параметру x. На экран будет выведено: x = 1.