Здравствуйте.
Нужны примеры реализации Одноканальной Системы Массового Обслуживания (СМО) с ожиданием
с использованием типа данных - очередь.
Сам алгоритм не нужен, именно примеры (можно на паскале )
Может кто-нибудь встречал?
Типа такого?
_____.rar ( 172.88 килобайт )
Кол-во скачиваний: 903
А никому не кажется, что слишком мудрено сделано, ведь можно реализовать гораздо проще.
Или я ошибаюсь?
По крайней мере я в голове представляю себе это проще Как вот только реализовать?
Вобще зачем там сделано через мат. ожидание и дисперсию?
На выходе что теоретически должно быть, наверное, мат. ожидания достаточно?
Там сделано не ЧЕРЕЗ матожидание и дисперсию.
Они просто подсчитываются. Статистика...
Вообще это выдранный кусок из достаточно большого проекта. Возможно - если не решать те задачи, которые были мне нужны - можно сделать и проще. Почти наверняка.
Там событийная модель... Т.е. есть событие "приход заявки", "начало обработки" и т.п.
Можно подойти к этому иначе... Сделать непрерывное время - скажем, в цикле - в каждый момент которого с определенной вероятностью возникнет заявка.
мисс_граффити,
нужно как раз событийное моделирование
Алгоритм такой ? Похож?
Прикрепленные файлы
______.txt ( 1.73 килобайт )
Кол-во скачиваний: 259
Именно. Убери статистику (подсчет матожидания, дисперсии..) - получишь это в чистом виде.
А, у меня еще осуществляется много запусков (именно для подсчета статистики). 50 или 100... что-то такое.
Можешь немного пояснить модуль 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.
убрать указатель на предыдущий элемент.
возможно, после этого придется переписывать часть кода. не помню, где там что использовалось...