Процедура Halt, или более полно Halt(n), действует более грубо и менее разборчиво. Независимо от того, где она находится, ее выполнение завершает работу программы с кодом завершения n. Этот код впоследствии может быть проанализирован, в частности, командой IF ERRORLEVEL в среде MS-DOS. Значение ERRORLEVEL после остановки программы будет равно значению n. Значение n=0 соответствует нормальному коду завершения. Вызов процедуры Halt без параметра эквивалентен вызову Halt(0).
- 106 -
На основе процедуры 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 в тексте программы назначать им разные коды завершения. Тогда можно будет при отладке или работе определить, чем вызвано прерывание программы.
В этом разделе будут рассмотрены вопросы, связанные с написанием и употреблением подпрограмм, представленных в виде процедур или функций.
Определить простейшую процедуру довольно просто: практически любой составной оператор, вынесенный из основного блока программы и объявленный предложением
PROCEDURE ИмяПроцедуры;
становится процедурой, и вместо этого составного оператора в основном блоке может подставляться одно лишь ИмяПроцедуры.
Согласно более общему определению процедура может иметь параметры, метки перехода внутри себя и свои, локальные, переменные (рис. 6.5). Обязательными элементами процедур и функций тоже является заголовок и тело, т.е. тот же составной оператор.
Синтаксис вызова процедуры прост. Ее выполнение активизируется указанием ее имени и списком переменных или значений, подставляемых на место параметров:
ИмяПроцедуры(Параметр1, Параметр2,);
- 107 -
PROCEDURE ИмяПроцедуры (ПарамЗнач1 : ТипЗнач1;
> ПарамЗнач2 : ТипЗнач2;
>VAR ПарамПерем1 : ТипПерем1;
>VAR ПарамПерем2 : ТипПерем2; ... );
LABEL
> Перечисление меток внутри тела процедуры
CONST
> Описание локальных констант процедуры
TYPE
> Описание локальных типов
VAR
> Описание локальных переменных
> Описание вложенных процедур и (или) функций
BEGIN
> Тело процедуры
END;