Предисловие дорогие друзья !

Вид материалаДокументы

Содержание


Глава 4 процедуры и функции
Program имя; {раздел описаний основной программы} label
24.2. Глобальные и локальные переменные.
PROGRAM PR1; {Заголовок основной программы} VAR
BEGIN {Начало подпрограммы} … {Раздел операторов — тело подпрограммы} END
PROGRAM PR2; {Заголовок основной программы} VAR
BEGIN {Начало подпрограммы} … {Раздел операторов — тело подпрограммы} END
Подобный материал:
1   ...   10   11   12   13   14   15   16   17   ...   29

ГЛАВА 4 ПРОЦЕДУРЫ И ФУНКЦИИ

§24. Подпрограммы.


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

Избежать дублирования команд можно, поступив следующим образом. Если какая-нибудь часть программы многократно повторяется, то её оформляют отдельно от основной программы и называют подпрограммой. К ней обращаются при необходимости её использования.

Более того, рекомендуется большую задачу разбивать на отдельные смысловые части (подпрограммы), программировать их отдельно, а затем объединять в единую программу. Использование подпрограмм считается хорошим стилем программирования. При этом уменьшается в целом объём программы и сокращается время на отладку.

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

Подпрограммы располагаются в разделе описаний основной программы. Структура программы с двумя подпрограммами Р1 и Р2 может иметь, например, такой вид:

PROGRAM ИМЯ;

{РАЗДЕЛ ОПИСАНИЙ ОСНОВНОЙ ПРОГРАММЫ}

LABEL — РАЗДЕЛ МЕТОК;

CONST — РАЗДЕЛ КОНСТАНТ;

TYPE — РАЗДЕЛ ТИПОВ;

VAR — РАЗДЕЛ ПЕРЕМЕННЫХ;

ПОДПРОГРАММА Р1

ПОДПРОГРАММА Р2

BEGIN {РАЗДЕЛ ОПЕРАТОРОВ ОСНОВНОЙ ПРОГРАММЫ}

ОПЕРАТОРЫ;

ВЫЗОВ ПОДПРОГРАММЫ Р1;

ОПЕРАТОРЫ;

ВЫЗОВ ПОДПРОГРАММЫ Р1;

ОПЕРАТОРЫ;

ВЫЗОВ ПОДПРОГРАММЫ Р2;

ОПЕРАТОРЫ;

ВЫЗОВ ПОДПРОГРАММЫ Р2;

ОПЕРАТОРЫ;

ВЫЗОВ ПОДПРОГРАММЫ Р1;

ОПЕРАТОРЫ;

END.

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

Подпрограмма оформляется подобно основной программе, т.е. состоит из заголовка, раздела описаний и раздела операторов.

В Паскале имеется два вида подпрограмм: про­цедуры (PROCEDURE) и функции (FUNCTION).

24.2. Глобальные и локальные переменные. Изучение подпрограмм невозможно без «разведения» таких понятий, как глобальные и локальные переменные.

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

PROGRAM PR1; {Заголовок основной программы}

VAR {Раздел описания переменных основной программы}

A, B:INTEGER; {}

C: REAL; {}

ЗАГОЛОВОК ПОДПРОГРАММЫ

VAR {Раздел описания переменных подпрограммы}

K, I: INTEGER; {}

M: REAL; {}

BEGIN {Начало подпрограммы}

… {Раздел операторов — тело подпрограммы}

END; {Конец подпрограммы}

BEGIN {Начало основной программы}

… {Раздел операторов — тело программы}

END. {Конец программы}

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

В нашем примере глобальные переменные: А, В (тип — INTEGER), С (тип — REAL).

Для переменных, которые объявляются в разделе описания переменных подпрограммы, память отводится лишь только на период выполнения подпрограммы., поэтому они называются локальными (местными). Основная программа их «не замечает».

В нашем примере локальные переменные: K, I (тип — INTEGER), М (тип — REAL).

Если обратиться к локальным переменным в основной программе, то при компиляции программы появится сообщение, что данный идентификатор не определён (т.е. не описан).

Рассмотрим ещё один пример.

PROGRAM PR2; {Заголовок основной программы}

VAR {Раздел описания переменных основной программы}

A, B:INTEGER; {}

ЗАГОЛОВОК ПОДПРОГРАММЫ

VAR {Раздел описания переменных подпрограммы}

A, B:INTEGER; {}

BEGIN {Начало подпрограммы}

… {Раздел операторов — тело подпрограммы}

END; {Конец подпрограммы}

BEGIN {Начало основной программы}

… {Раздел операторов — тело программы}

END. {Конец программы}

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

Вопросы и задания.
  1. Для чего нужны подпрограммы?
  2. Какая разница между локальными и глобальными переменными?

3. В окне редактора наберите программу:

Program Tri;

Var A, B : Integer;

Procedure ZB_1;

Var A: Integer;

Begin

A := 10; B:= 15;

WriteLn ('A2 = ', A, 'B2 = ', B)

End;

Begin

A:= 18; B:=37;

WriteLn ('A1 = ',A, 'B1 = ',B);

ZB_1;

WriteLn ('A3 = ',A, 'B3 = ',B)

End.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

4. Выполните программу в пошаговом режиме с прослеживанием работы процедуры (F7). Задайте для просмотра в окне отладчика переменные A и B. Обратите внимание как меняются значения этих переменных. Запишите в тетрадь результаты выполнения программы. Почему получены такие результаты, и как это объяснить?

5. Какие переменные являются глобальными, а какие локальными?