Здавалка
Главная | Обратная связь

Имя1, имя2, ... : тип 1; имя3, имя4, ... : тип 2; ...



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

Далее эти копии обрабатываются процедурой, причем фактические параметры будут существовать только в течение времени ее выполнения.

Пример 5.2.Используя процедуру, вычислить площадь треугольника со сторонами a, b и c. Для решения задачи воспользоваться формулой Герона s = (p×(p – a)×(p – b)×(p – c))1/2, где p – полупериметр треугольника.

Var

a, b, c : real ;

procedure treug (aa, bb, cc : real );

var p, s : real;

Begin

p := (aa + bb + cc) / 2;

s := sqrt (p * (p - aa) * (p - bb) * (p - cc));

writeln ('s= ', s:6:2)

end;

Begin

readln (a, b, c);

treug (a, b, c);{ оператор вызова процедуры }

End.

 

Глобальные переменные a,b и c, описанные в главной программе, используются в операторе вызова процедуры в качестве входных фактических параметров. Они согласуются с формальными параметрами aa, bbи cc процедуры по числу, типу и взаиморасположению в своих списках. Следовательно, при вызове процедуры её формальный параметр aa примет значение фактического параметра a, параметр bb – значение параметра b, а параметр cc – значение параметра c.

Как формальные параметры, так и переменные p и s, описанные в разделе var процедуры, являются локальными переменными и главной программе недоступны. Поэтому вывод результата счёта – переменной s предусмотрен не в главной программе, а непосредственно в процедуре.

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

var имя1, имя2, ... : тип параметров;

Пример 5.3.Используя процедуру, вычислить поверхность треугольной пирамиды, если известны длины ее ребер a, b, c, d, e и f.

Var

a, b, c, d, e, f, s1, s2, s3, s4 : real ;

procedure treug0 (aa, bb, cb : real ; var s : real );

Var

p : real ;

Begin

p:=(aa + bb + cc ) / 2;

s:=sqrt (p * (p - aa) * (p - bb) * (p - cc))

end;

Begin

readln (a, b, c, d, e, f);

treug0(a, b, c, s1); treug0(a, d, e, s2);

treug0(b, e, f, s3); treug0(c, f, d, s4);

write ('поверхность равна ', s1 + s2 + s3 + s4)

End.

В главной программе предусмотрены четыре обращения к процедуре treug0(по числу граней пирамиды). Список её формальных параметров состоит из трёх входных параметров aa,bb, ccи одного выходного – s.

При первом обращении к процедуре в ячейку s будет записан адрес переменной s1, а в ячейки aa, bbи cc – значения переменных a, b и c. Результат выполнения процедуры (площадь треугольника со сторонами a, b и c) будет записан в ячейку s1.

Таким образом, главная программа получит доступ к результату, вычисленному в процедуре, и использует его в вычислении площади поверхности пирамиды. После выполнения процедуры значения переменных aa, bb и cc будут «забыты».

Остальные обращения к процедуре treug0будут выполнены аналогично.

 

 

Функции

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

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

Тип значения, вычисляемого функцией, задаётся в её заголовке, имеющем вид







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.