Материал: Алгоритмический язык Turbo Pascal 7.0. Юршин Е.Д., Рог А.И

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

step2;

End; Write (y); End.

Вданном варианте программы оператор вызова процедуры осуществляет только ее вызов. Исходные данные передаются в процедуру каждый раз с помощью переменных n и x, описанных и определенных в теле головной программы, содержащей обращение к этой процедуре с помощью глобальных (общих) переменных. Аналогично, через глобальные переменные y передаются в головную программу результата работы процедуры step2.

Всвязи с выше изложенным уместно сделать некоторые дополнительные разъяснения.

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

подблоком.

Объекты, описанные внутри какого-либо подблока, являются по отношению к нему локальными

инедоступными внешним блокам, т.е. на них можно ссылаться только внутри блока, в котором они описаны.

Для пояснения сказанного приведем следующий рис. 4.2.8, на котором изображена абстрактная структура какой-то усложненной программы, состоящей из трех блоков.

Из такой структуры следует, что переменные i, j

иk являются локальными по отношению к блоку 3 и недоступны в

блоках 1 и 2. Переменные x, y, z доступны в блоках 2, 3

инедоступны в блоке 1, т.к. по отношению к блоку 3 они являются глобальными. Переменные a, b, c доступны во всей программе и во всех процедурах, т.к. являются глобальными по отношению к блокам 2,3.

Существуют и более сложные блочные

 

 

 

 

 

 

 

структуры.

 

 

 

 

Program_abc1;

Блок 1

 

Var

 

 

 

 

 

 

a, b, c:real;

 

 

 

 

 

 

 

 

 

 

 

 

Procedure_abc2;

Блок 2

 

 

 

Var

 

 

 

 

 

 

x, y, z:real;

 

 

 

 

 

 

 

 

 

 

 

 

 

Procedure_abc3;

Блок 3

 

 

 

 

 

Var

 

 

 

 

 

 

i, j, k:real;

 

 

 

 

 

 

Begin

 

 

 

 

 

 

 

 

 

 

 

 

End;

 

 

 

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

Процедуры позволяют осуществлять выход из них с двумя и более результатами.

Рассмотрим такую возможность на конкретном примере.

Пусть требуется составить программу для

вычисления функции:

Xk1 Yk2

Z = —————,

S1 + S2

где X и Y – произвольные числа;

S1 и K1 – сумма и количество положительных

элементов массива ai (a1, a2, …, a10);

S2 и K2 - сумма и количество положительных элементов массива bi (b1, b2, …, b8).

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

Кроме того, имеется два входных параметра – величина элемента исходного массива и количество его элементов.

Программа может быть составлена по следующему варианту:

Program func; Type

Mas= array[1…10] of real;

Var

X,y,z,S1,S2:real;

J,k1,k2:integer;

A,b:mas;

Procedure sum(var d:mas;m:integer;S:real;K:integer); Var

I:integer; Begin

K:=0;

S:=0;

For i:=1 to m do If d[i]>0 then

Begin

K:=K+1;S:=S+d[i];

end;

end;

Begin

Writeln( Введите x и y );

Read(x,y);

Writeln( Введите массив A );

For i:=1 to 10 read(a[i]);

Writeln( Введите массив B );

For i:=1 to 8 read(b[i]);

Sum(a,10,S1,K1);

Sum(b,8,S2,K2);

Z:=(exp(K1*ln(x))*exp(K2*ln(y)))/(S1+S2);

Write( z= ,z);

End.

В данную программу введен нестандартный тип mas массива размерностью десять и вещественный.

Затем в описателе var массивы a и b объявлены типа mas.

Только таким двухступенчатым приемом можно перекачать массивы a и b из головной программы в процедуру(совместное использование описателей type и var).

С помощью оператора – процедуры с именем sum осуществляется вход в процедуру: первый раз с массивом a и второй раз с массивом b.

Выход из процедуры осуществляется сначала с двумя переменными S2 и K2, искомые значения для которых получены в процедуре, размещаясь при этом в соответствующих ячейках памяти головной программы. Затем они используются в арифметическом операторе присваивания для вычисления z.

Источник: https://studfile.net/preview/16565609/