Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec03-АТП2011-12.doc
Скачиваний:
0
Добавлен:
08.11.2018
Размер:
78.85 Кб
Скачать
    1. Область видимости идентификаторов

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

Основные правила видимости идентификаторов

  1. Если идентификатор описан в разделе описаний основной программы, то он является глобальным. Его могут использовать все процедуры и функции этой программы.

  2. Если идентификатор описан внутри подпрограммы, то он является локальным и доступен только внутри этой подпрограммы.

  3. Если имя глобального идентификатора совпадает с именем локального, то внутри подпрограммы действует локальный идентификатор, то есть объявление локального идентификатора внутри подпрограммы отменяет действие глобального.

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

    1. Обмен данными между программой и подпрограммами

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

  1. с помощью глобальных переменных;

  2. через параметры;

  3. через возвращаемое значение (для функций).

Обмен данными с помощью глобальных переменных

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

Передача данных через параметры

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

Параметры, указываемые в заголовке подпрограммы при ее описании, называются формальными параметрами.

Параметры, указываемые при вызове подпрограммы, называются фактическими параметрами.

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

Существует два способа передачи параметров

  • по значению (параметры-значения)

  • по ссылке или по адресу (параметры-переменные).

Заголовок процедуры с параметрами-значениями имеет вид:

Procedure Имя(параметр1,параметр2:тип1; … параметрN:типN);

При вызове процедуры в ячейки памяти формальных параметров (параметр1 … параметрN) передаются копии соответствующих фактических параметров, поэтому никакие действия в теле процедуры не в состоянии изменить значения фактических параметров.

В качестве фактических параметров-значений могут использоваться константы, переменные или выражения.

Заголовок процедуры с параметрами-переменными имеет вид:

Procedure Имя(var параметр1,параметр2:тип1; … var параметрN:типN);

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

В качестве фактических параметров в этом случае можно использовать только переменные. Использование констант, выражений и непосредственных значений не допускается.

Пример – Программа, содержащая процедуру для обмена значениями между двумя переменными.

Program TestAddr;

Uses CRT;

{Процедура для обмена}

Procedure Obmen(var a,b:Integer);

Var Buffer:Integer;

Begin

Buffer:=a;

a:=b;

b:=Buffer;

End;

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

Var

x,y:Integer;

BEGIN

ClrScr; {Очистка экрана}

Write('Ввести значения x,y=');

ReadLn(x,y); {Ввод исходных данных}

Obmen(x,y); {Вызов процедуры обмена}

WriteLn('Переменные после обмена');

WriteLn('x=',x,' y=',y); {Вывод результатов}

ReadLn;

END.

Существует также разновидность передачи по ссылке – параметры-константы. Принцип действия такой же как и в случае с параметрами переменными, но изменения параметров в теле подпрограммы не допускаются.

Заголовок процедуры с параметрами-константами имеет вид:

Procedure Имя(Const параметр1,параметр2:тип1; …Const параметрN:типN);

Пример – Программа, содержащая процедуру вывода на экран фамилии автора.

Program Avt;

Uses CRT;

Const

Avtor='Иванов И.П.'; {ФИО автора}

{Процедура вывода ФИО автора}

Procedure PrintAvtor(Const A:String);

Begin

WriteLn('Программу разработал:',A);

End;

BEGIN

PrintAvtor(Avtor);

ReadLn;

END.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]