Помощь - Поиск - Пользователи - Календарь
Полная версия: Моделирование СМО
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
nany
Клиенты поступают в магазин через интервал t, t -> W. Далее в течение времени tо они (клиенты) готовят заказ: tо -> G. Клиентов обслуживает 4 продавца, обслуживание 3-х фазное:
- подготовительное время (tn), tn -> R;
- время подбора товаров по заявке (tp) (зависит от размера заказа);
- время выдачи заказа (tb), tb -> P.
Размер заказа m является дискретной случайной величиной, заданной таблично; tp=m*t1, t1 -> U.
( W - распределение Вейбула, G- гамма - распределение, R - равномерное распределение, P - показательное распределение, U - U-распределение.)

Может кто нибудь подсказать хотя бы в каком направлении идти. Как правильно нужно создать алгоритм данной задачи?
volvo
Здесь: моделирование работы банка
похожее задание по моделированию решалось на С++, алгоритм подойдет для любого языка.

Нужна помощь в портировании на Паскаль - обращайся... smile.gif
nany
А как в паскале написать календарь событий состоит: код события и время когда оно произойдет и чтобы он был постоянно разным в зависимости от открытия магазина

Добавлено:
Извини а как можно формировать очередь при 3 продавцах
volvo
Цитата
как можно формировать очередь при 3 продавцах
Точно так же, как и в банке при трех кассирах... Очередь клиентов-то одна, а вот направляется тот, чья очередь подошла, к свободному (одному из трех) продавцу...
nany
А как в паскале написать календарь событий состоит: код события и время когда оно произойдет и чтобы он был постоянно разным в зависимости от открытия магазина

for i:=0 To n do //код события (количество клиентов, кот. пришли в магазин )
Begin
X[i]:=random;
MX:=MX+X[i];
End;

А как сюда добавить время открытия магазина и время закрытия. Пример:
и как вещественные числа преобразовать во время?
n X[i]
1 9:30
2 15:30
3 21:50
volvo
Ты программу, ссылку на которую я тебе дал, смотрела? Зачем тебе привязываться ко времени? Открывается магазин в 9:30 - прекрасно! Внутри магазина это время = 0 минут работы... 9:31 - отработали 1 минуту... Не надо все привязывать к какой-то глобальной системе отсчета, работай в своей, а КОГДА ПОНАДОБИТСЯ - ты по внутреннему времени магазина всегда сможешь определить текущее время в ЧЧ:ММ...
nany
просто у меня по заданию дальше идет открытие магазина и закрытие его, а по ссылке я вроде бы там все поняла.Вот я и не знаю как эти числа преобразовать, как требует преподаватель
nany
Помнишь ты мне давал ссылку на задачу моделирование банка, не мог бы ты мне помочь перевести ее на Паскаль, а то я этот С не очень хорошо понимаю, заранее спасибо))
volvo
Ну, вот так, например:


Добавлено через 25 сек.
Вроде, работает...
nany
Спасибо тебе большое за помощь))))
nany
Извини, пожалуйста.
У меня почему то сортировка не работает в этом кусочке:
var
a:array[1..n] of double;
k:integer;
i:integer;
changed:boolean;
buf:double;

begin
randomize();
for i:=1 to n do
a[i] := random;

repeat
changed:=FALSE;
for k:=1 to n do
if a[k] > a[k+1] then
begin
buf := a[k];
a[k] := a[k+1];
a[k+1] := buf;
changed := TRUE;
end;
until not changed;
end;
volvo
Во-первых, как именно это связано с "Моделированием"? Во-вторых, почему без тегов? А в третьих - у тебя выход за пределы массива:
for k:=1 to n do
if a[k] > a[k+1] then ... { <--- Здесь !!! Если K = n ... }
Сколько раз говорить, отлаживайте программы с ключом {$R+}, помогает находить ошибки...
nany
for k:=1 to n-1 do
if a[k] > a[k+1] then


Цитата
Сколько раз говорить, отлаживайте программы с ключом {$R+}, помогает находить ошибки...

- это как делать или где это можно посмотреть
У меня почему то 2 раза повторяет:
вот массив
2,1389853709164
1,25032955248215
а вот то что он отсортировал:
1,25032955248215
2,1389853709164
1,25032955248215
2,1389853709164
мне сортировка нужна для поиска медианы
// ой извини я нашла это моя была ошибка
nany
подскажите пожалуйста как можно придумать, если идут числа
2
7
1
3
мы их осортировали и получили:
1
2
3
7
И у нас есть ячейка, в котрую нужно записать место как они стояли в списке:
Элемент Место
2 2
7 4
1 1
3 3
volvo
Не сортировать сами элементы, а воспользоваться сортировкой по индексам... Посмотри на форуме, я где-до делал такое, если не найдешь - покажу, как...

Смысл в том, что заводится еще один целочисленный массив того же размера, что и исходный, изначально в него заносятся по порядку числа 1 .. N, а при сравнении и обмене элементов (в процессе сортировки) сами элементы остаются на своих местах, а все операции производятся именно ЧЕРЕЗ доп. массив...
nany
я не могу найти по поиску
volvo
Ты про это:

const
n = 4;
a: array[1 .. n] of integer = (2, 7, 1, 3);

var
T_index, index: array[1 .. n] of integer;

buf: integer;
i, k: integer;
changed: boolean;

begin
for i := 1 to n do begin
index[i] := i; T_index[i] := i;
end;

repeat
changed := False;
for k := 1 to n - 1 do

if a[index[k]] > a[index[k+1]] then begin
buf := index[k]; index[k] := index[k+1]; index[k+1] := buf;
changed := True;
end;

until not changed;

{ А теперь индексируем сами индексы... }
repeat
changed := False;
for k := 1 to n - 1 do

if index[T_index[k]] > index[T_index[k+1]] then begin
buf := T_index[k]; T_index[k] := T_index[k+1]; T_index[k+1] := buf;
changed := True;
end;

until not changed;

for i := 1 to n do writeln(a[i]:6, ' #', T_index[i]);

end.


?
nany
Да я про это, спасибо тебе большое -smile.gif))
nany
Извини, а как числа в массиве возводить в степень, power или нет?
volvo
Ты точнее можешь выражаться? Какие числа, в каком массиве, какая степень? Надо ВЕСЬ массив возводить в эту степень, или только четные элементы? А может вообще только первый и последний? Я не телепат, в конце-то концов... Приводи исходные данные, и ЧТО ты хочешь получить...
nany
извини, каждый элемент массива. например:
массив
0,3434
0,2534
и получилось:
0,11792356
0,06421156
т.е. 0,3434^2=0,11792356 и т.д.
sqr - это квадрат, а если в 3 степень это как
volvo
FAQ: Общие вопросы по математике. - второй (стандартный) способ...
nany
Коэффициент эксцесса

REkscess:=0;
for i:=0 to IArEx-1 do
REkscess:=REkscess+power(ATimeExist[i],4);
for i:=0 to IArEx-1 do
REkscess:=REkscess-4*RMat*power(ATimeExist[i],3);
for i:=0 to IArEx-1 do
REkscess:=REkscess+6*RMat*RMat*power(ATimeExist[i],2);
t3:=REkscess;REkscess:=0;
REkscess:=REkscess-3*power(RMat,4);
t4:=REkscess;
REkscess:=0;
t5:=t3+t4;
t6:=t5/power(RDisp,3);
REkscess:=t6/1000;


ATimeExist[i] - массив сгенерированный
RMat - мат ожидание
А так правильносчитать или нет? (из рисунка - A)
Нажмите для просмотра прикрепленного файла
volvo
Никаких предаоложений делать не могу - в стандартном Паскале нет функции Power, я не знаю, как она у тебя реализована, и будет ли то, что ты привела правильным... Картинку неплохо было бы и побольше сделать - показателей степени практически не видно...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.