10. Параметры

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

PAR(<номер>,<значение параметра="">)

Номера:

с 1 по 49 - служебные параметры;

с 50 по 99 - рабочие параметры.

Служебные параметры:

- Говорят о состоянии системы (какая клавиша нажата, сколько памяти в БЗ осталось и др.); значения таких параметров устанавливаются автоматически;

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

Рабочие параметры используются как дополнительная память в программах на DECL.

Рассмотрим операторы работы с параметрами.

10.1. Установить значение параметра (в ПЧ продукции):

B:PAR(60,2) - параметру 60 присваивается значение 2.

Например,

B:PAR(1,9) - включить трассировку;

B:PAR(1,0) - выключить.

10.2. Получить значение параметра (в ЛЧ продукции):

IF ... B:GETPAR(60,X1) ... THEN ...;

Например (для служебных параметров):

B:GETPAR(6,X1) - X1 означивается кодом последней нажатой клавиши.

Если нажата клавиша ESC, то будет X1=27.

В:GETPAR(7,X1) - X1 означивается номером выбранного пункта меню.

Если выбран п. 4, то X1=4.

Для рабочих параметров, если вы установили где-то B:PAR(60,2), то при B:GETPAR(60,X1) и получите X1=2.

10.3. Проверить указанное значение параметра (в ЛЧ продукции):

IF ... B:TESTPAR(60,4) ... THEN ... ;

Продукция может примениться, если значение параметра 60 равно 4.

Например,

IF ... B:TESTPAR(6,27) ... THEN ... :

Данная продукция будет применяться, если пользователем нажата клавиша ESC.

IF ... N:[B:TESTPAR(6,27)] ... THEN ... :

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

10.4. Счетчик на параметрах:

Пример 10.1.

Определить общее число студентов, которые есть в БЗ.

В качестве счетчика будем использовать параметр 50.

START:IF THEN

B:PAR(50,0) {= счетчик устанавливается в 0 =}

T!:STD_N() {= подсчет количества студентов =}

T1:STD_OUT(); {= выдача подсчитанного количества =}

{= Перебираются студенты X1 и подсчитывается их количество - X3 =}

STD_ N():IF СТУД(X1,_) B:GETPAR(50,X2) B+(X2,1,X3) THEN B:PAR(50,X3);

STD_OUT():IF B:GETPAR(50,X3) THEN B:A("Всего студентов - ",X3);

В данном примере счетчик встроен в продукцию STD_ N(), которая перебирает студентов.

Другой вариант, когда счетчик вынесен и подсчитывает, сколько раз применилась продукция T!:STD_ N().

STD_ N():IF СТУД(X1,_) THEN T1:COUNT();

COUNT():IF B:GETPAR(50,X2) B+(X2,1,X3) THEN B:PAR(50,X3);

Предыдущий раздел|Следующий раздел

- Главная страница -