Система программирования Турбо паскаль 7.0

       

Процедуры


Любая процедура состоит из заголовка и тела процедуры. Тело процедуры оформляется по тем же правилам, что и основная программа, т.е. состоит из раздела описания переменных и раздела операторов. Однако заканчивается тело процедуры символом ‘;’.

               Общий вид описания процедуры

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

В Турбо Паскале допускается запись заголовка процедуры без списка параметров:

                         PROCEDURE <имя>;

Обращение к процедуре

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

          Общий вид оператора вызова процедуры

<имя процедуры>(<список фактических параметров>);

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

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

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



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

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

Вычислить значение:

,

где

заданное вещественное число.

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

;    
  
.

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

                  

,  где

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

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

При описании процедуры надо с помощью списков параметров связать формальный параметр

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


                              Программа
             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).
Выполнение программы всегда начинается с операторов основной программы. В данном случае после ввода заданного числа  (
) последовательно вызывается три раза процедура ST. При каждом вызове  происходит соответствующая  замена формальных параметров (x, n) на фактические, и вычисленный  результат через формальный параметр Р присваивается  фактическим переменным r1, r2, r3 соответственно. Далее вычисляется значение Z,   и результат выводится на экран.
Согласование параметров
Формальные и фактические параметры должны быть согласованы друг с другом по количеству, типу и порядку следования. Это означает, что количество формальных параметров должно быть равно количеству фактических параметров, и каждый формальный параметр должен иметь тот же тип и занимать в списке то же место, что и соответствующий ему фактический параметр.
Механизм замены параметров
В списке формальных параметров выделяется два вида параметров: параметры-значения и параметры-переменные. Механизм замены для каждого вида параметров различен.
Параметры-значения играют роль входных
параметров. Фактическим параметром, соответствующим параметру-значению, может быть константа, переменная или выражение. Параметры-значения являются локальными переменными для процедуры. Для них в памяти компьютера временно выделяются ячейки, в которые передаются копии вычисленных значений фактических параметров. При выполнении процедуры параметры-значения могут изменяться, однако соответствующие им фактические параметры остаются без изменения.


Параметры–переменные  являются выходными параметрами процедуры. Перед параметрами-переменными в списке ставится служебное слово VAR. В качестве соответствующих им фактических параметров могут быть только переменные. При вызове процедуры происходит замена имени параметра-переменной на имя фактической переменной, т.е. в процедуру передается адрес фактической переменной.  Все действия в процедуре выполняются непосредственно над фактическим параметром, а не его копией. Поэтому любое изменение формального параметра-переменной приводит к изменению соответствующего ему фактического параметра.
Рассмотрим два примера, иллюстрирующих понятие параметра-значения и параметра-переменной.
        Пример 1.
                         Program P1;
                         Var
                              x: integer;
                          Procedure Z (y: integer);
                         begin
                         y := 1;
                         end;
                          Begin
                          x := 0;
                          Z(x);  {вызов процедуры}
                          writeln(‘x=’,  x);
                          End.
В описанной процедуре Z формальный параметр y является параметром-значением, поэтому его изменение  в процедуре       (y := 1;) не влияет на значение фактического параметра x. После выполнения программы на экран будет выведено:   x = 0.
Пример 2.
                         Program P2;
                         Var
                              x: integer;
                          Procedure Z (var y: integer);
                         begin
                        y := 1;
                         end;
                          Begin
                          x := 0;
                          Z(x); 
                          writeln (‘x=’, x);
                          End.
В данной процедуре Z формальный параметр y является параметром-переменной, поэтому его значение после выполнения процедуры присваивается фактическому параметру x. На экран будет выведено:  x = 1.
 

Содержание раздела