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);
Предыдущий раздел|Следующий раздел