передачу данных через фактические параметры – переменные, но с другой стороны описание всех параметров переменных нежелательно по двум причинам:
во-первых – это исключает возможность вызова процедуры с фактическими параметрами в виде выражения, что делает программу менее компактной, (необходимы соответствующие добавки к ней):
во-вторых, и главных в процедуре возможно случайное использование формального параметра для временного хранения промежуточного результата. Т.е. существует опасность непредсказуемой порчи значения переменной. Вот почему параметрами-переменными следует объявлять только те, через которые процедура передает результаты для головной программы. Таким образом, чем меньше формальных параметров объявленной параметрами - переменной и чем меньше в процедуре используются глобальные переменные, тем меньше опасность получения непредсказуемых ошибочных результатов и тем проще вся программа в целом и ее отладка. По той же причине не рекомендуется использовать параметры-переменные в заголовке нестандартной функции.
С учѐтом последнего обстоятельства, взяв за основу процедуру Step1, составим структурную схему общего алгоритма возведения в степень (головная программа - процедура):
структурную схему вышеприведенного алгоритма возведения в степ Рассмотрим конкретный пример на составление процедуры без головной программы. Пусть необходимо оформить в виде отдельной процедуры алгоритм вычисления степени:
yxn
снатуральным (целочисленным) показателем степени n.
Такая задача возникает в связи с тем, что на
языке
TURBO PASCAL нет такой стандартной операции, в соответствующей библиотеке (см. таблицу набора стандартных функций); хотя с помощью стандартных функций LN(x) и EXP(x) можно реализовать такую функцию. Сейчас же рассмотрим другой вариант программной реализации такого алгоритма, т.е.
вычисление такой степени, nможно осуществить,
используя выражение: y=
x
n раз
Для вычисления указанного произведения необходимо организовать циклi с параметром , в котором осуществлялось бы постепенное накопление произведения Y по следующему алгоритму: до начала цикла должно быть (иначе - умножение на ноль) Y=1 и затем на каждом цикле значение Y должно изменяться следующим образом, для ( i =1,2,…,n)- y:=y*x;
Таким образом, шаг изменения цикла должен быть равен 1 и будет осуществлен N раз. В результате реализации такого алгоритма в виде отдельной программной единицы, оформленной в виде процедуры по вышеприведенным правилам, процедура будет выглядеть следующим образом:
Procedure_step1 (n:integer; x:real; Var y:real);
Var
i:integer;
Begin
y:=1; for_i:=1_to_n_do y:=y*x;
End;
В заголовке данной процедуры с именем step1 перечислены формальные параметры – значения N и X, определяющие исходные данные процедуры (фактические те числовые значения они должны получить из головной программы). И параметр – переменную y – результат работы процедуры, значение которой «уходит» в головную программу. В рассматриваемом заголовке также указан тип этих параметров. Так как переменная i находится в процедуре и ее значение не уходит в головную программу (местные переменные), поэтому она должна быть описана с помощью оператора var. Теже процедуры состоят из:
описательной части, где определена переменная i, необходимая и имеющая смысл только внутри данной процедуры и называется локальной переменной. При этом значение локальной переменной не допустимо в основной программе.
составного оператора begin-end, реализующего выше изложенный алгоритм вычисления степени.
Выше было отмечено, что процедуру иногда оформляют и без параметров (с указанием ее имени), тогда другой вариант такой процедуры будет выглядеть следующим образом:
Procedure_step2;
Var
i:integer;
Begin
y:=1; for_i:=1_to_n_do y:=y*x;
End;
где x и y – глобальные параметры;
В данном случае процедура STEP2 не содержит списка формальных параметров и работает только с локальной переменной i, описанной в данной процедуре, а переменные x, n и y обязательно должны быть описаны в основной программе с помощью описателя var. В последующем случае такие переменные x, n и y называются глобальными (общими) по отношению к процедуре step2, т.е. значения глобальных переменных могут быть доступны как для головной программы, так и для самой процедуры.
Данные два варианта процедур для одного и того же алгоритма рассмотрим в составе головной программы. С этой целью осуществим заменим имена переменных n- на m, x- на a и
y- на z. Т.е. в процедуре y, x и n- формальные параметры, а
z, a и m- фактические параметры головной программы. Кроме того, исходя из того, что показатель степени может быть нулевым, положительным и отрицательным, выражение возведения в степень запишем более подробно:
|
1, если m 0; |
|
|
|
|
|
||
z am |
am , если m |
0; |
|
|
|
|
||
|
|
1 |
, если m |
0; |
z |
a |
m |
1 |
|
|
|
||||||
|
|
|
|
am |
||||
|
|
am |
|
здесь |
|
|
||
При написании программы необходимо составить ень:
Полезно также привести структурную схему алгоритма процедуры возведения в степень (например
STEP1):
|
НАЧАЛО |
|
|
Ввод a,m |
|
да |
m=0 |
нет |
z:=1 |
|
m>0 |
STEP1
STEP1
-m, 1/a, z
(m, a, z)