Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль (ст 33).doc
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
821.76 Кб
Скачать

5. Локальные и глобальные переменные, область действия переменных

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

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

Если одно и то же имя определено и в программе, и в вызываемой ею процедуре, то ему соответствует глобальный объект, но внутри процедуры глобальный объект недоступен, он как бы экранируется (маскируется) локальным объектом с таким же именем.

Например, ( см. задачу 1) массивы А и В являются глобальными переменными, а i – локальной переменной.

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

то можно сформулировать следующие правила для доступа к объектам, описанным в различных блоках:

  • имена объектов, описанных в некотором блоке, считаются известными в пределах данного блока, включая и все вложенные (например, вложенными являются блоки C и D по отношению к блоку В);

  • имена объектов, описанных в блоке, должны быть уникальны в пределах данного блока и могут совпадать с именами объектов из других блоков;

  • если в некотором блоке описан объект, имя которого совпадает с именем объекта, описанного во внешнем блоке (например, для блока F внешним является блок Е), то имя объекта внешнего блока становится недоступным в данном блоке (оно как бы экранируется одноименным объектом данного блока).

Например, (см. рис.) можно сказать, что объекты, описанные в блоке В, известны (видимы) кроме самого блока В еще и в блоках С и D, но невидимы в блоке А. Объекты, описанные в блоке F, известны только в пределах этого блока.

Задача 2. С помощью датчика случайных чисел сформировать матрицы А{5,6} и В{7,5}. Вывести их на экран. Использовать процедуры. Для каждой матрицы сформировать одномерный массив из сумм элементов каждой строки.

а) Схема алгоритма основной программы:

б) Схема алгоритма процедуры формирования матрицы:

в) Схема алгоритма процедуры вывода матрицы:

г) Схема алгоритма процедуры вывода массива:

д) Схема алгоритма процедуры формирования массива из матрицы:

Program Primer;

Uses Crt;

Type Matrica=array[1..7,1..6] of Integer;

Massiv=array[1..7] of Integer;

Var A, B : Matrica;

E, F : Massiv;

Procedure Input(Var D:Matrica; N,K:Integer);

Var i, j : Integer;

Begin

Randomize;

For i:=1 to N

Do For j:=1 to K

Do D[i,j]:=Random(10)-5;

End;

Procedure Output(D:Matrica; N,K:Integer);

Var i, j : Integer;

Begin

For i:=1 to N

Do Begin

For j:=1 to K

Do Write(D[i,j]:4,’ ‘);

Writeln;

End;

End;

Procedure Output_Massiv(Z:Massiv; N:Integer);

Var i : Integer;

Begin

For i:=1 to N

Do Writeln(Z[i]:4);

End;

Procedure Form_Massiv(Var Z:Massiv;D: Matrica;

Var S, i, j : Integer;

Begin

For i:=1 to N

Do Begin

S:=0;

For j:=1 to K

Do S:=S+D[i,j];

Z[i]:=S;

End;

End;

Begin

Input(A,5,6);

Input(B,7,5);

Form_Massiv(E,A,5,6);

Form_Massiv(F,B,7,5);

Clrscr;

Writeln(‘Матрица А’);

Output(A,5,6);

Writeln(‘Массив Е’);

Output_Massiv(E,5);

Readkey;

Clrscr;

Writeln(‘Матрица В’);

Output(В,7,5);

Writeln(‘Массив F’);

Output_Massiv(F,7);

Readkey;

End.

{заголовок программы}

{объявление типа матрица с макс. числом} {строк и столбцов и типа массив}

{объявление переменных}

{процедура формирования матрицы} {указанной размерности}

{N – число строк в матрице}

{K – число столбцов в матрице}

{формирование матрицы с помощью}

{датчика случайных чисел}

{процедура вывода матрицы нужной} {размерности}

{N – число строк в матрице}

{K – число столбцов в матрице}

{процедура вывода массива указанной}

{размерности}

{N – число элементов в массиве}

N, K : Integer); {процедура формирования}

{массива из сумм эл-тов строк матрицы}

{основная программа}

(вызов процедуры форм-я для матрицы А)

{вызов процедуры форм-я для матрицы В}

{вызов проц. форм-я масс. Е из матр. А}

{вызов проц. форм-я масс. F из матр. В}

{очистка экрана}

{вызов проц. вывода матр. для матр. А}

{вызов проц. вывода масс. для масс. Е}

{вызов проц. вывода матр. для матр. В}

{вызов проц. вывода масс. для масс. F}

{конец программы}