Лекция: Вспомогательные алгоритмы. Реализация вспомогательных алгоритмов в Паскале. Механизм передачи параметров.
Части алгоритмов, которые могут использоваться целиком в других алгоритмах называются подпрограммами или вспомогательными алгоритмами. В Паскале реализуются в виде процедур и функций. Процедуры описываются следующим образом:
Procedure <имя процедуры, по которому может быть вызвана> ({var} <список формальных параметров и их типы>);
{раздел описаний}
const
var
begin
<тело процедуры>
end;
Функции описываются:
Function <имя функции, по которому может быть вызвана> ({var} <список формальных параметров и их типы>): <тип значений функции>;
{раздел описаний}
const
var
begin
<тело функции>
end;
Если перед формальным параметром в описании процедуры или функции есть var, то формальный параметр является параметром-переменной, его результат передается в место вызова. Если слова var нет, то параметр является параметром-значением и результат его значения в место вызова не передается. Формальные параметры резервируют место в памяти ЭВМ под фактические параметры – те значения, которые передаются процедуре или функции при их обращении. Кол-во и тип формальных и фактических параметров должно совпадать. Внутри подпрограмм – локальные параметры («видны» только в подпрограмме), в основной программе – глобальные.
Отличие функции от процедуры: функция принимает единственное значение, при ее описании необходимо указывать тип функции (т.е. тип этого значения). В теле функции должен присутствовать оператор присваивания <имени функции> ее значения. Вызов функции: значение функции дб присвоено глобальному параметру. Тип функции и глобального параметра дб одинаковыми.
Пример:
…
function stepen(x:real; n:integer):real;
var i:byte; s:longint;
begin
if n=0 then stepen:=1
else
begin
s:=1;
for i:=1 to abs(n) do
s:=s*x;
if n>0 then stepen:=s
else stepen:=1/s;
end
end;
{ОП}
begin
…
y:=stepen(a,b);
…
end.
При вызове подпрограммы ЭВМ выполняет следующие действия: выделяет память для переменных описанных в подпрограмме, присваивает формальным параметрам значения фактических, выполняет операторы подпрограммы, идет возврат в точку вызова подпрограммы и выполняется следующий оператор в программе. При этом пересылка параметров идет по значению (передается значение) и по ссылке (передается адрес ячейки, куда будет записано новое значение). Локальным переменным выделяется память только при обращении, после она освобождается.