Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комплекс по МСиП 2014 / Пособие GPSS World.doc
Скачиваний:
298
Добавлен:
15.04.2015
Размер:
1.37 Mб
Скачать

4.17. Сохраняемые величины

В GPSS пользователю предоставляется возможность определить «свои» глобальные переменные, начальные значения которых могут быть заданы перед моделированием и к которым можно обратиться из любого места модели в любой момент времени. Эти переменные называют сохраняемыми величинами (ячейками). Совокупность логически связанных между собой ячеек образует матрицу (аналог массива).

В отличие от параметров транзакта, приоритета и отметки времени, которые теряются в момент выхода транзакта из модели, ячейки доступны на протяжении всего процесса моделирования. Значения сохраняемых величин не подсчитываются интерпретатором автоматически (как СЧА устройств, очередей, МКУ и т.п.), а задаются и изменяются программистом.

Сохраняемые величины могут принимать положительные и отрицательные значения. Стандартный числовой атрибут Xj

(X$<имя ячейки>) дает значение соответствующей сохраняемой величины. Например, Х2 – значение ячейки 2; Х$DАY – значение ячейки DАY.

С матрицами связан стандартный числовой атрибут MXj(т,п)значение, записанное в строке m и в столбце п матрицы j или МХ$<имя матрицы> (т,п), если матрица имеет символьное имя.

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

Перед использованием матрица определяется оператором описания МАТRIХ. Начальные значения ячеек и матриц можно задать с помощью оператора описания INITIAL.

1. Допускается косвенная адресация ячеек, матриц, а также их строк и столбцов. Например: Х*Р2 – значение ячейки с номером, который сохраняется в параметре 5; МХ3*Р5(5,2) – элемент (5,2) матрицы, номер которой записан в параметре 5; МХЗ(Р4,Х2) – значение, записанное в строке Р4 и в столбце Х2 матрицы 3.

2. Недопустимой является запись такого вида:

МХ1(МХ2(1,2),МХЗ(3,4)), поскольку нельзя задавать номера строк и столбцов матрицы с помощью СЧА матриц.

Оператор INITIAL (ИНИЦИАЛИЗИРОВАТЬ). Если в процессе моделирования происходит обращение к сохраняемой величине, которая не была задана, то интерпретатор выдает ошибку в процессе выполнения программы. Поэтому перед началом моделирования все сохраняемые величины должны быть инициализированы с помощью оператора INITIAL.

Формат оператора представлен в таблице.

Таблица 4.39

Поле

Информация в поле

Метка

Не используется

Операция

INITIAL

Операнд А

Имя сохраняемой величины

Операнд B

Начальное значение

Пример 4.38

INITIAL Х$ТIМЕR, 1000000

Ячейке ТIМЕR присваивается начальное значение 1000000;

INITIAL Х3,25

Ячейке с номером 3 присваивается начальное значение 25.

INITIAL МХ8(2,4),–53

Величина – 53 записывается в строку 2, столбец 4 матрицы 8.

INITIAL МХ$СOSТ(1,3),22

Величина 22 записывается в строку 1, столбец 3 матрицы COST.

Блок SАVЕVАLUE (СОХРАНИТЬ ВЕЛИЧИНУ). Значение сохраняемой величины изменяется при входе транзакта в блок SАVЕVАLUE (СОХРАНИТЬ ВЕЛИЧИНУ). Его формат:

SАVЕVАLUE А[+,–],В

Таблица 4.40

Операнд

Значение

Результат по умолчанию

А

Номер или символьное имя сохраняемой величины

Ошибка

В

Величина, используемая для модификации (число или СЧА)

Ошибка

Подобно блоку АSSIGN блок SАVЕVАLUE может быть пользован как в режиме замещения величины, так и в режиме увеличения или уменьшения. В режиме увеличения предыдущее значение сохраняемой величины увеличивается на значение, заданное операндом В, а в режиме уменьшения – уменьшается на это значение. Режимы увеличения и уменьшения определяются введением соответственно знака «плюс» или «минус» перед запятой, разделяющей операнды А и В.

Пример 4.39

SАVЕVАLUE Р5,VLРНА

При входе транзакта в блок SАVЕVАLUE прежде всего вычисляется величина переменной АLРНА. Полученный результат присваивается сохраняемой величине, номер которой записан в параметре Р5.

SАVЕVАLUE 5+,Х2

При входе транзакта в блок величина Х5 увеличивается на значение величины Х2.

SAVEVALUE РRОFIТ–FNOSТS

При входе транзакта в блок величина Х$РRОFIТ уменьшается на значение функции FN$СOSТS.

Оператор описания матрицы МАТRIХ. Каждая матрица должна быть объявлена до ее использования, т.е. должна иметь оператор описания. Формат оператора представлен в таблице.

Таблица 4.41

Поле

Информация в поле

Метка

Имя матрицы

Операция

МАТRIX

Операнд А

Не используется (оставлен для совместимости с более старыми версиями GPSS)

Операнд В

Число строк матрицы (целое положительное)

Операнд С

Число столбцов матрицы (целое положительное)

Матрица в GPSS/РС может содержать не более чем 8191 элемент. Она может быть переопределена или инициализирована повторно другим оператором МАТRIХ с тем же именем. Переопределение, при котором размер матрицы изменяется, повлечет за собой выделение памяти под новую матрицу. Выделенная до этого оперативная память остается занятой.

Блок MSAVEVALUE. Блок MSAVEVALUE используется для записи значений в матрицы, а также для увеличения или уменьшения значений элементов матриц. Его формат:

MSAVEVALUE А[+,],В,С,D

Таблица 4.42

Операнд

Значение

Результат по умолчанию

А

Имя матрицы

Ошибка

В

Номер строки матрицы

Ошибка

С

Номер столбца матрицы

Ошибка

D

Величина, используемая для модификации

Ошибка

Операнды А, В и С могут быть именем, положительным целым, СЧА или СЧА*СЧА. Операнд D может быть именем, СЧА или СЧА*СЧА.

Подобно блокам АSSIGN и SАVЕVАLUE этот блок может быть использован как в режиме замещения величины, так и в режиме увеличения или уменьшения.

Когда транзакт входит в блок МSАVЕVАLUE, то анализируется операнд А и ищется матрица с указанным именем. Если матрица не найдена, то возникает ошибка. Соответствующий элемент матрицы определяется содержимым операндов В и С. Если такого элемента не существует, то также возникает ошибка.