Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VT_PAS1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
202.24 Кб
Скачать

Взаимодействие подпрограмм

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

Для примера рассмотрим программу следующей структуры:

Главная программа

<Параметры главной программы>

Подпрограмма А

<Параметры подпрограммы А>

Подпрограмма А1

<Параметры подпрограммы А1>

BeginEnd

Подпрограмма А2

<Параметры подпрограммы А2>

BeginEnd

BeginEnd

Подпрограмма B

<Параметры подпрограммы B>

Подпрограмма B1

<Параметры подпрограммы B1>

BeginEnd

BeginEnd

BeginEnd

Из главной программы можно вызвать и подпрограмму А, и подпрограмму В, но нельзя вызвать ни одну из вложенных в них подпрограмм А1, А2, В1. С другой стороны, из подпрограммы В можно вызвать подпрограмму А, но из А вызвать В нельзя (строго говоря, такая возможность появляется при наличии специального указания).

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

FUNCTION F(k: word):word;

Begin

if k=0 then F:=1

else F:=F(k-1)*k;

END;

При входе в какую-либо подпрограмму становятся доступными не только те параметры (имена переменных), которые объявлены в ней, но и те, которые объявлены в подпрограммах более высокого уровня. Параметры, объявленные в главной программе, доступны всем подпрограммам. Однако самой главной программе недоступны параметры, описанные в подпрограммах.

Далее приводится программа, иллюстрирующая процесс взаимодействия подпрограмм.

Program No11;

Const M1='Константа из главной пpогpаммы';

{************************************************************************}

Procedure Proc_A;

Var A: string;

Procedure Proc_A1;

Var A1:string;

Procedure Proc_A2;

Begin

writeln(A+' и '+ A1)

End;

Begin A1:='Пеpеменная из пpоцедуpы A1';

Proc_A2;

End; {конец пpоцедуpы Proc_A1 --------------}

Begin

writeln(M1);

A:='Пеpеменная из пpоцедуpы A';

Proc_A1;

End; {конец пpоцедуpы Proc_A ----------------}

{************************************************************************}

BEGIN

Proc_A;

END.

Было бы целесообразно самостоятельно проследить работу этой программы и установить что и в какой последовательности будет напечатано. Хотя в данном примере все подпрограммы без параметров, программа работает и печатает:

Константа из главной программы

Переменная из процедуры А и Переменная из процедуры А1

Стандартные модули

Турбо-Паскаль имеет большое количество стандартных функций и процедур, с некоторыми из которых мы уже знакомы. Они объединены в группы - стандартные модули. Рассмотрим некоторые модули.

Модуль SYSTEM объединяет процедуры стандартного Паскаля и в частности все те, которыми мы пользовались до сих пор.

Модуль РRINTER содержит процедуры для работы с печатающими устройствами.

Модуль CRT обеспечивает управление текстовым режимом работы дисплея.

Модуль GRAPH содержит графические средства Турбо-Паскаля.

Имеются и другие модули. Стандартные модули расположены в специальных файлах-библиотеках. Их расширение TMP. Только один модуль - SYSTEM - подключается к любой программе автоматически, остальные, если это необходимо, нужно подключать к программам специальной командой

USES <имя модуля>;

Например,

USES CRT;

USES CRT, GRAPH;

Эти команды должны находиться в разделе описаний.

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