Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
108
Добавлен:
10.05.2014
Размер:
1.51 Mб
Скачать

15. Процедуры и функции в Паскале: локальные и глобальные переменные.

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

При входе в блок нижнего уровня становятся доступными не только имена, локализованные в нем, и имена верхних уровней. Из блока В11можно обратиться к блокамА, В, В1и использовать имена, объявленные в них и в основной программе –V1,V3,V4.

Program.............

Var V1 .....

Procedure A;

Var V2 .......

..............

End {A}

Procedure B;

Var V3 .......

Procedure B1;

Var V4 .......

Procedure B11;

Var V5 .......

................

Из блока В11доступны четыре переменныеV1,V3,V4,V5.

Из блока В1доступны -V1,V3,V4.

Из блока Вдоступны -V1,V3.

Из блока Адоступны -V1,V2.

Из основной программы – только V1.

Имена, локализованные в блоке, могут совпадать с глобальными именами. В этом случае, локальное имя «накрывает» глобальное имя внутри блока и делает его недоступным.

Var

i:integer;

Procedure P;

Var

i:integer;

begin

writeln(i);

end {P};

BEGIN

i:=1;

P;

END.

Результат действия этой программы непредсказуем, т.к. локальное имя «i»накрывает глобальное«i» и в самой процедуреР оно только объявлено, но ему не присвоено никакого значения.

Если убрать из процедуры Рописание

i:integer; то программа выведет на экран значение глобальной переменной i=1.

Одноименные локальные и глобальные переменные – это разные переменные.

Синтаксис написания заголовка блока следующий –

Procedure <имя> [(<список формальных параметров>)]

Function <имя> [(<список формальных параметров>)]: <тип>

Список формальных параметров может быть опущен. Если же формальные параметры присутствуют, то должен быть указан их тип.

Function ABC(a:integer; b:real): real; или Function ABC1(a, b:real): real;

В пределах блока список формальных параметров является как бы расширением раздела описаний данного блока.

Допустим, что в основной программе мы дважды обращаемся из разных мест к функции

ABC(a:integer; b:real): real.

Вызовы имеют вид:

ABC(s,t) и ABC(u,r) .

Это означает, что при первом обращении формальные параметры a, b замещаются фактическими переменнымиs, t, и при втором обращении -u, r.

Это замещение происходит в заголовке функции момент обращения к ней.

Рассмотрим операцию возведения в степень:

16. Процедуры и функции в Паскале: формальные и фактические параметры процедур и функций в Паскале.

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

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

  • улучшают структуру программы, облегчая ее понимание;

  • повышают устойчивость к ошибкам программирования и непредвиденным последствиям при модификациях программы.

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

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

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

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

  4. Все, что Вы сделали хорошо в одной программе, Вам захочется перенести в новые. Для повторного использования таких частей лучше сразу выделять в программе полезные алгоритмы в отдельные подпрограммы.

Подпрограммы могут быть стандартными, т.е. определенными системой, и собственными, т.е. определенными программистом.

Стандартная подпрограмма (процедура или функция) - подпрограмма, включенная в библиотеку программ ЭВМ, доступ к которой обеспечивается средствами языка программирования. Вызывается она по имени с заданием фактических параметров с типом описанным при описании данной процедуры в библиотечке процедур и функций.

Из набора стандартных процедур и функций по обработке одного типа информации составляются модули. Каждый модуль имеет своё имя (мы уже хорошо знакомы с модулями Crt, Graph). Доступ к процедурам и функциям модуля осуществляется при подключении этого модуля (Uses Crt, Graph).

Help содержит подробные описания предусмотренных средой программирования процедур и функций. Для вызова помощи при работе со стандартными процедурами и функциями нужно поставить на имя подпрограммы курсор и нажать клавиши . Описание процедур и функций в Help строится по стандартному принципу.