Помощь - Поиск - Пользователи - Календарь
Полная версия: Системы массового обслуживания
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
cooler
Здравствуйте.
Нужны примеры реализации Одноканальной Системы Массового Обслуживания (СМО) с ожиданием
с использованием типа данных - очередь.
Сам алгоритм не нужен, именно примеры (можно на паскале smile.gif)
Может кто-нибудь встречал?
мисс_граффити
Типа такого?Нажмите для просмотра прикрепленного файла
cooler
Цитата(мисс_граффити @ 29.09.2008 5:40) *

Похоже, я посмотрю, поразбираюсь
Спасибо
Если это то, скорее всего нужны будут пояснения, т.к с очередью не работал ещё
cooler
А никому не кажется, что слишком мудрено сделано, ведь можно реализовать гораздо проще.
Или я ошибаюсь?
По крайней мере я в голове представляю себе это проще smile.gif Как вот только реализовать?
Вобще зачем там сделано через мат. ожидание и дисперсию?
На выходе что теоретически должно быть, наверное, мат. ожидания достаточно?
мисс_граффити
Там сделано не ЧЕРЕЗ матожидание и дисперсию.
Они просто подсчитываются. Статистика...

Вообще это выдранный кусок из достаточно большого проекта. Возможно - если не решать те задачи, которые были мне нужны - можно сделать и проще. Почти наверняка.

Там событийная модель... Т.е. есть событие "приход заявки", "начало обработки" и т.п.
Можно подойти к этому иначе... Сделать непрерывное время - скажем, в цикле - в каждый момент которого с определенной вероятностью возникнет заявка.
cooler
мисс_граффити,
нужно как раз событийное моделирование
Алгоритм такой ? Похож?
мисс_граффити
Именно. Убери статистику (подсчет матожидания, дисперсии..) - получишь это в чистом виде.
А, у меня еще осуществляется много запусков (именно для подсчета статистики). 50 или 100... что-то такое.
cooler
Можешь немного пояснить модуль Queue?
В простейшем, который дается здесь в faq :

unit QUEUE;
INTERFACE
type
TElem = Integer;
TList = ^Telement;
TElement = record
INFO:TElem;
NEXT : TList
end;
TQueue = record
head:TList;
tail:TList;
end;
procedure QueueInit (VAR Q:TQueue);
Function QueueEmpty(Q:TQueue):boolean;
Procedure OueuePush(var q:TQueue; e:TElem);
Function QueuePop(var q:TQueue):TElem;
IMPLEMENTATION
procedure QueueInit (VAR Q:TQueue);
begin
q.head:=nil
end;
Function QueueEmpty(Q:TQueue):boolean;
begin
QueueEmpty:=(Q.HEAD=nil)
end;
Procedure OueuePush(var q:TQueue; e:TElem);
var z:Tlist;
begin
new(z);
z^.info:=E;
z^.next:=nil;
If QueueEmpty(q) then q.head:=z else q.tail^.next:=z;
q.tail:=z
end;
Function QueuePop(var q:TQueue):TElem;
var
z:TList;
begin
z:=q.head;
q.head:=z^.next;
QueuePop:=Z^.info;
dispose(z)
end;
end.


всё понятно, а в том что у тебя я запутался с first, last, next, previous
Вообще мне нужно ещё сделать изменяемый интервал между заявками и вывод статистики ввиде диаграмм
мисс_граффити
Цитата
Вообще мне нужно ещё сделать изменяемый интервал между заявками и вывод статистики ввиде диаграмм

Ну так сделай.
Что значит "изменяемый интервал"? Он случайный. Распределенный по определенному закону.

Цитата
first, last, next, previous

первый, последний, следующий, предыдущий.
ну, обзови их head, tail, если тебе так проще. next - он так и остается. previous - в модуле из FAQ очередь односвязная, у меня двусвязная...
cooler
Цитата(мисс_граффити @ 9.10.2008 0:51) *

...- в модуле из FAQ очередь односвязная, у меня двусвязная...

То есть у тебя дек используется? (Double Ended Queue)
А как можно в односвязную очередь переделать?
мисс_граффити
убрать указатель на предыдущий элемент.
возможно, после этого придется переписывать часть кода. не помню, где там что использовалось...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.