Главная Промышленная автоматика.

5. ойисания .. 59

метров или же они будут заменены фактическими параметрами. Те идентификаторы в теле процедуры, которые не являются формальными параметрами, являются либо локальными, либо не локальными в теле в зависимости от того, описаны они в теле процедуры или нет. Те из них, которые не локальны в теле процедуры, могут быть локальными в блоке, в начале которого находится описание данной процедуры. Тело процедуры всегда действует подобно блоку независимо от того, имеет оно форму блока или нет. Следовательно, область действия метки, помечающей оператор внутри тела или само тело, никогда не может распространяться за тело процедуры. Кроме того, если идентификатор формального параметра заново описан внутри тела процедуры (включая случай использования его в качестве метки, как это указано в разд. 4.1.3), ему придается тем самым локальное значение, и фактические параметры, которые ему соответствуют, недоступны во всей области действия этой внутренней локальной величины.

5.4.4. Значения указателей функции

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

. 5.4.5. Спецификации

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



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

5.4.6. Код в качестве тела процедуры

Считается, что тело процедуры можно выразить и не на языке АЛГОЛ. Так как имеется в виду, что использование этой возможности является целиком вопросом конкретного представления, то никаких дальнейших правил относительно языка этого кода в эталонном языке дать нельзя.

ПРИМЕРЫ ОПИСАНИИ ПРОЦЕДУР

Пример 1

procedure эйлер (Jet, sum, eps, tim); value eps, tim;

integer tim.; real procedure fc<; real sum, eps;

comment: Процедура эйлер вычисляет сумму fct (/) для i от нуля до бесконечности посредством надлежащим образом усовершенствованною метода преобразования Эйлера. Суммирование прекращается, как только подряд tim раз абсолютные значения членов преобразованных рядов будут меньше, чем eps. Следовательно, необходимо задать функцию fct с одним целым аргументом, верхнюю границу eps и целое tim. Ре-зультатом является сумма sum. Процедура Эйлер особенно эффективна в случае медленно сходящихся или расходящихся знакопеременных рядов;

begin integer /, k, п, t; array m [0:15]; real mn, mp, ds;

i:==n: = t:=0; m[0]:==fct{0); sum:==m[0y2; продолжение: t:==i-{-l; mn:=fct (i);



for ft: = 0 step 1 until n do ..... " • > • -

begin mp:={mn-\-m\k\)lU; , m\k\. - mn;

mn: = mp end среднее; и {abs (тп) < abs (m [я).)) A (я < 15) then

begin c?s: =/ЙД/2; п:=п-\-\; тЩтп

end принято

else ds: = mn; " " i

sum: = sum-\-ds; у

U abs(ds)<eps then t:t-i-\ else <: = 0; if t<tim then go to продолжение end Эйлер. r - ..

Пример 2)

procedure RK(x, y, n, FKT, eps, eta, xE, уЕ, fi); value

X, y; integer n; Boolean ; real x, eps, eta, xE; array y, уЕ; procedure FKT; comment: RK интегрирует систему

yk =/a(-. Vv {kr=\, 2, .... n)

дифференциальных уравнений методом Рунге-> Кутта с автоматическим выбором шага. Параметрами являются: начальные значения х и y[k] для X и неизвестных функций Ук(х), порядок системы п, процедура FKT(x. у, п. г), представляю-. щая интегрируемую, систему, т., е. совокупность . функций /ft, значения допусков eps и eta, которые определяют точность численного интегрирования, конец интервала интегрирования хЕ, выходной параметр уЕ, который представляет решение в точке х=хЕ, булевская переменная fi. которой при изолированном или первом обращении должно быть присвоено значение true. Если, однако, не-

) Эта RK-программа содержит некоторые новые идеи, связанные с идеями Гилла [4] и Фреберга [5]. Однако должно быть ясно, что с точки зрения времени вычислений и ошибок округления она, возможно, ие будет оптимальной. Кроме того, она не была фактически проверена на машине.





0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22

0.0034