Предисловие дорогие друзья !
Вид материала | Документы |
- К. Бальмонт Дорогие друзья, сегодня мы в гостях у замечательного русского поэта Константина, 164.76kb.
- Медникова Надежда Александровна учитель начальных классов моу «Уинская сош» Пермский, 91.48kb.
- И в шутку и всерьез Ведущий Добрый день, дорогие друзья! Вот и пришла весна, вот, 339.91kb.
- Играют 2 команды. Вопросы викторины, 53.15kb.
- Летние каникулы в праге, 322.16kb.
- Мои дорогие литературные друзья, 136.81kb.
- Ведущий: Дорогие, друзья! Разрешите поздравить вас с большим и дорогим для всех праздником, 124.29kb.
- Отчет о конференции 17-18 апреля дорогие друзья!, 182.44kb.
- Дорогие друзья и единомышленники, 134.05kb.
- Сценарий для 7-8 классов «Старая сказка на новый лад», 52.44kb.
ГЛАВА 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. {Конец программы}
Переменные А и В объявленные в основной программе — глобальные и доступны любой подпрограмме; переменные А и В объявленные в подпрограмме — это уже другие переменные — локальные, они доступны только в этой подпрограмме. В этом примере глобальным и локальным переменным даны одинаковые имена. Язык Паскаль допускает такую ситуацию, но, чтобы не запутаться, старайтесь называть их разными именами.
Вопросы и задания.
- Для чего нужны подпрограммы?
- Какая разница между локальными и глобальными переменными?
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. Какие переменные являются глобальными, а какие локальными?