На основе процедуры Halt можно легко построить программу, например ASK.PAS, для организации диалога в ВАТ-файлах MS-DOS (рис. 6.4).

| VAR i : Word; { ======ПРОГРАММА ASK.PAS ======== }

| BEGIN

| { ...вывод на экран текста альтернатив выбора... }

| Write( 'Введите Ваш выбор: ');

| ReadLn(i); { ввод номера альтернативы с экрана)

| Halt(i) { остановка программы и назначение }

| END. { ERRORLEVEL в MS-DOS номера i }

Рис. 6.4

Теперь в ВАТ-файле надо запускать откомпилированную программу ASK.EXE и сразу после нее анализировать, что будет находиться в переменной MS-DOS ERRORLEVEL.

Имеет смысл при нескольких вызовах Halt в тексте программы назначать им разные коды завершения. Тогда можно будет при отладке или работе определить, чем вызвано прерывание программы.

<p>6.9. Процедуры и функции</p>

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

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

PROCEDURE ИмяПроцедуры;

становится процедурой, и вместо этого составного оператора в основном блоке может подставляться одно лишь ИмяПроцедуры.

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

Синтаксис вызова процедуры прост. Ее выполнение активизируется указанием ее имени и списком переменных или значений, подставляемых на место параметров:

ИмяПроцедуры(Параметр1, Параметр2,);

- 107 -

PROCEDURE ИмяПроцедуры (ПарамЗнач1 : ТипЗнач1;

ПарамЗнач2 : ТипЗнач2;

VAR ПарамПерем1 : ТипПерем1;

VAR ПарамПерем2 : ТипПерем2; ... );

LABEL

Перечисление меток внутри тела процедуры

CONST

Описание локальных констант процедуры

TYPE

Описание локальных типов

VAR

Описание локальных переменных

Описание вложенных процедур и (или) функций

BEGIN

Тело процедуры

END;

Рис. 6.5

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

FUNCTION ИмяФункции( Список параметров ) :

ИмяСкалярногоТипаЗначенияФункций;

Что и как может возвращать функция при ее вызове, мы рассмотрим чуть позже.

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

<p>6.9.1. Параметры. Глобальные и локальные описания</p>

Поскольку процедуры и функции должны обладать определенной независимостью в смысле использования переменных (а также типов и констант), при их введении в программу возникает разделение данных и их типов на глобальные и локальные. Глобальные константы, типы, переменные — это те, которые объявлены в программе вне процедур или функций. Наоборот, локальные — это константы, типы и переменные, существующие только внутри процедур или функций, и объявленные либо в списке параметров (только переменные), либо в разделах CONST, TYPE, VAR внутри процедуры или функции.

- 108 -

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

PROGRAM Main;

| VAR

| Xmain, Ymain : LongInt; {глобальные переменные}

| Res : Real;

| PROCEDURE Proc1( a,b : Word; VAR Result : Real );

| VAR

| Res : Real; { локальная Res, закрывающая глобальную }

| BEGIN

| Res := a*a + b*b; { локальные действия }

| Result:= Xmain+Ymain*Res; {работают глобальные значения}

| Xmain := Xmain+1; { модифицируется глобальное значение}

| END;

TYPE

CONST Другие глобальные объявления, уже

VAR недоступные из процедуры Proc1;

BEGIN

Основной блок, в котором может вызываться Proc1

END.

Рис. 6.6

Перейти на страницу:

Поиск

Похожие книги