nextupprevious

Next:6.1.4 Получение результатов-выходные параметры
Up:6.1 Подпрограммы: процедуры и функции
Previous:6.1.2 Блоки и локализация имен


6.1.3 Изменение действия -- входные параметры

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

Часть из них -- это переменные, локализованные внутри процедуры и принимающие различные начальные значения при разных вызовах. Эти параметры называются входными (или параметрами-значениями). Типы и виды всех параметров процедуры определяются в списке формальных параметров (рис. 6.2), размещаемом в круглых скобках после имени процедуры в ее заголовке, в котором спецификация входных формальных параметров задается в соответствии с диаграммой рис. 6.3.
 

FormalParameters = "(" [ FPSection { ";" FPSection } ] ")" [ ":" FormalType ].
FPSection = ( InFPSection | OutFPSection ).

Рис. 6.2. Синтаксис формальных парамерных параметров
 

InFPSection = ident { "," ident } ":" FormalType.

Рис. 6.3. Спецификация входных формальных параметров

Таким образом, если процедуру Линия необходимо вызывать для рисования разными символами строк разной длины, то в ней необходимо завести два параметра. Такая процедура используется в программе ГИСТОГРАММА, приведенной ниже. Программа читает непустую последовательность $m$$a_1$$a_2$$\ldots$$a_m$, где $a_1, a_2,\ldots, a_m$ -- целые числа, и рисует $m$ строк, $i$-я из которых состоит из abs()+1  знаков "минус", если $a_i \leq 100$, и из 100 знаков "умножить", если $a_i > 100$.

module Гистограмма;
    const N = 100;
    var K,M : iteger; A : integer;
    procedure Линия (N:integer; Знак:char);
        var I : integer;
    begin for I := 1 to N do write(Знак) end; writeln end Линия;
begin
    read(M);
    for K := 1 to M do
        read(A);
        if A > N then Линия (N,'$*$') else Линия(abs(A)+1, '-') end
    end
end Гистограмма.

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

Next:6.1.4 Получение результатов-выходные параметры
Up:6.1 Подпрограммы: процедуры и функции
Previous:6.1.2 Блоки и локализация имен


© В.Н. Касьянов, Е.В.Касьянова, 2004