При построении модели системы, иногда возникает необходимость задать сложные математические или логические соотношения между атрибутами системы. Для этой цели в программе используются переменные.
В GPSS имеется три типа переменных:
1) арифметические переменные;
2) арифметические переменные с «плавающей точкой»;
3) булевы переменные.
Значение арифметических переменных может использоваться как:
1) операнд блока; в этом случае значение арифметической переменной может представлять собой:
- номер объекта (устройства, МКУ, очереди и т. п.);
- номер параметра транзакта;
- значение стандартного числового атрибута;
2) операнд А функции;
3) операнд А таблицы;
4) операнд выражения другой переменной. В выражениях арифметические переменные используют такие арифметические операции:
+ алгебраическое сложение;
- алгебраическое вычитание;
# алгебраическое умножение;
/ алгебраическое деление (результатом операции является целая часть частного);
@ деление по модулю;
^ возведение в степень;
|
|
| деление без остатка (перед делением у обоих операндов отбрасываются дробные части, результатом операции есть целая "часть частного).
* - косвенная адресация
Идея косвенной адресации заключается в том, что можно обратиться к любому объекту или СЧА через параметры транзактов. Доступ же к параметрам транзактов осуществляется через СЧА Рj, где j - номер параметра транзакта (например, 10) или Р$имя, где имя - имя (идентификатор) параметра транзакта. Так как обращение к объекту возможно только через параметр транзакта, то символ Р может опускаться. Например, выражение Q*7 или Q*P7 определяет текущее значение длины очереди, номер которой задан в параметре 7 транзакта. Если в седьмом параметре хранится значение 3, то это будет текущее значение длины очереди с номером 3.
Арифметические переменные. Арифметические переменные аналогичны арифметическим выражениям в алгоритмических языках. Перед выполнением любой арифметической операции определяется значение каждого элемента и выделяется его целая часть. Постоянные без знака считаются положительными числами.
Арифметические переменные с плавающей точкой аналогичны арифметическим переменным, за исключением того, что все операции над операндами выражений переменных с плавающей точкой выполняются без преобразования операндов и промежуточных результатов в целые значения. Лишь окончательный результат вычисления преобразуется в целое число.
Формат описания арифметической переменной имеет вид:
<имя>VARIABLE A
Формат описания переменных с плавающей точкой имеет вид:
<имя>FVARIABLE A
При обращении к переменной используется обозначение
|
|
V<номер переменной> или V$<имя переменной>, т.е. V - это СЧА переменной.
Логические операторы связаны с такими ресурсами, как устройства, МКУ и логические ключи. Они используются для определения состояния данных объектов. Логические операторы, используемые в GPSS
Логические операторы | Значение оператора, отражающее состояние ресурса |
FVj илиFj | 1 – если устройство j занято или обслуживает прерывание, 0 – иначе. |
FNVj | 1 – если устройство j не занято или не обслуживает прерывание, 0 – иначе. |
Ij | 1 – если устройство j обслуживает прерывание, 0 – иначе. |
NIj | 1 – если устройство j не обслуживает прерывание, 0 – иначе. |
NUj | 1 – если устройство j не используется, 0 – иначе. |
Uj | 1 – если устройство j используется, 0 – иначе. |
SFj | 1 – если многоканальное устройство j заполнено, 0 – иначе. |
SNFj | 1 – если многоканальное устройство j не заполнено, 0 – иначе. |
SEj | 1 – если многоканальное устройство j пусто, 0 – иначе. |
SNEj | 1 – если многоканальное устройство j не пусто, 0 – иначе. |
SVj | 1 – если МКУ j находится в состоянии использования, 0 – иначе. |
SNVj | 1 – если МКУ j не используется, 0 – иначе. |
LRj | 1 – если логический ключ j выключен, иначе - 0 |
LSj | 1 – если логический ключ j включен, иначе - 0 |
Операторы отношения выполняют алгебраическое сравнение операндов. Операндами могут быть константы или стандартные числовые атрибуты. Все операторы отношений записываются в кавычках:
"G" (Greater) - больше;
"L" (Less) - меньше;
"Е" (Equal) - равно;
"NE" (Not Equal) - не равно;
"LE" (Less than or Equal) - меньше или равно;
"GE" (Greater than or Equal) - больше или равно;
Булевы операторы:
"OR" - оператор «или»,
"AND" - оператор «и»