Вычисляемые и запоминающие объекты

К ним относятся переменные, функции и хранимые значения.

Арифметическая переменная в GPSS является СЧА, определяемым пользователем. Ссылка на арифметическую переменную производится с помощью СЧА, Vf или V$ имя, где f - номер переменной, а "имя" - символическое имя в случае символического определения. Арифметическая переменная определяется с помощью задаваемого пользователем арифметического выражения, являющегося набором СЧА, связанных арифметическими операциями и круглыми скобками. В GPSS/PC используются арифметические операции: +(сложение), –(вычитание), #(умножение), /(деление), \(целочисленное деление), @(деление по модулю), при котором результат равен остатку от деления, ^(возведение в степень). При записи арифметических выражений могут использоваться встроенные функции: ABS( ), ATN( ), SIN( ), COS( ), TAN( ), SQR( ), EXP( ), LOG( ), INT ( ).

В арифметическом выражении последовательность вычислений определяется приоритетом операций и круглыми скобками.

Арифметическая переменная определяется следующим образом. Имя переменной помещается в поле имени, а в поле операции помещается слово VARIABLE или FVARIABLE для целой или действительной переменной. В поле операндов записывается арифметическое выражение.

Отличие переменных целых и действительных заключается в следую-щем. При вычислении целых переменных отбрасываются дробные части всех промежуточных результатов. При вычислении действительной переменной действия выполняются с дробными числами и отбрасывается дробная часть только результата. Операция деления по модулю @ для действительной пе-ременной не используется.

Булевские переменные дают возможность принимать решения в зави-симости от состояния и значения многих объектов GPSS, используя для этого только один блок. Булевские переменные описываются и используются так же, как и арифметические переменные. Булевская переменная определяется с помощью задаваемого пользователем логического выражения, являющегося набором СЧА, операций отношения: ‘L’, ‘LE’, ‘G’, ‘GE’, ‘E’, ‘NE’, логиче-ских указателей, определяющих состояние устройств ( F$ имя, FI$ имя, FV$ имя), накопителей (SE$ имя, SF$ имя, SV$ имя ), логических ключей (LS$ имя ) и логических операторов (‘NOT’, ‘AND’, ‘OR’). Булевская переменная принимает значение 1, если логическое выражение ИСТИННО, и 0, если ЛОЖНО. Например, переменная STOR BVARIABLE ‘NOT’F$CPU’AND’Q$BUF’LE’5 примет значение 1, если устройство CPU не занято и длина очереди BUF меньше или равна 5.

Хранимыми значениями называются постоянные ячейки памяти, в которые можно обратиться из любого места модели во время моделирования. Они являются СЧА и обозначаются XJ или Х$ имя, где J – число, а "имя" – символическое имя.

Значение СЧА изменяется при входе транзактов в блок SAVEVALUE (СОХРАНИТЬ ВЕЛИЧИНУ). В операнде Ауказывается номер или символи-ческое имя хранимого значения. В поле Вуказывается СЧА, значение кото-рого необходимо сохранить.

Блок SAVEVALUE может использоваться в режиме накопления. Тогда в поле Апосле имени ставится знак + или – .

Матрицы сохраняемых величин дают возможность упорядочить сохра-няемые значения в виде матриц m * n, где m – число строк, n – число столб-цов матрицы. Каждая матрица должна быть перед началом моделирования определена с помощью оператора MATRIX (определить матрицу), имеющего следующий формат:

Имя MATRIX A, B, C.

Поле Aоператора не используется и сохранено в GPSS/PC для совмес-тимости со старыми версиями GPSS. В полях Bи Cуказываются соответст-венно число строк и столбцов матрицы, задаваемые константами, причем общее число элементов, равное произведению B на C, не должно превышать 8191.

Например, оператор MTAB MATRIX ,10, 2 определяет матрицу с именем MTAB, содержащую десять строк и два столбца.

В начале моделирования элементы всех определенных матриц устанавливаются равными 0. Для установки отличных от 0 начальных значений отдельных элементов матриц используется оператор INITIAL, имеющий следующий формат: INITIAL MX $ имя (a, b), значение или INITIAL MXj (a, b), значение. Здесь имя и j – соответственно имя и номер матрицы; a и b – номера соответственно строки и столбца, задаваемые константами; значение – присваиваемое элементу матрицы начальное значение, задаваемое также константой.

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

Имя MSAVEVALUE A, B, C, D.

В поле Aуказывается имя или номер матрицы, после которого, как и в блоке SAVEVALUE, может стоять знак + или –. В полях Bи Cуказываются номера соответственно строки и столбца, определяющие изменяемый элемент матрицы. В поле Dуказывается величина, используемая для изменения заданного элемента матрицы.

Например, MSAVEVALUE 5, 3, 2, X1, MSAVEVALUE MTAB +, P $ ROW, P $ COL, 1

Матрицы имеют единственный СЧА с названием MX, ссылка на который записывается в следующем виде MX $ имя (a, b) или MXj (a, b). Здесь имя и j - соответственно имя и номер матрицы; a и b - номера соответственно строки и столбца, задаваемые константами или ссылками на СЧА параметров транзактов.

Например:

MX5 (2, 1) ,

MX $ MTAB (P $ ROW, P $ COL)

Косвенная адресация

Иногда при моделировании возникают ситуации, при которых в качестве исходного данного должен использоваться СЧА, номер которого зависит от свойств транзакта, производящего ссылку на этот СЧА.

В GPSS/PC косвенная адресация осуществляется через значения параметров транзактов. При записи между соответствующим СЧА и номером параметра ставится знак *. Например, Q*6 - величина текущего содержимого очереди, номер которой записан в шестом параметре транзакта; FN*3 - значение функции, номер которой записан в третьем параметре транзакта.

Наши рекомендации