Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Моделирование СМО

Автор: nany 23.01.2007 1:14

Клиенты поступают в магазин через интервал 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 23.01.2007 1:17

Здесь: http://forum.pascal.net.ru/index.php?s=&showtopic=14077&view=findpost&p=81570
похожее задание по моделированию решалось на С++, алгоритм подойдет для любого языка.

Нужна помощь в портировании на Паскаль - обращайся... smile.gif

Автор: nany 23.01.2007 1:51

А как в паскале написать календарь событий состоит: код события и время когда оно произойдет и чтобы он был постоянно разным в зависимости от открытия магазина

Добавлено:
Извини а как можно формировать очередь при 3 продавцах

Автор: volvo 23.01.2007 2:24

Цитата
как можно формировать очередь при 3 продавцах
Точно так же, как и в банке при трех кассирах... Очередь клиентов-то одна, а вот направляется тот, чья очередь подошла, к свободному (одному из трех) продавцу...

Автор: nany 23.01.2007 17:17

А как в паскале написать календарь событий состоит: код события и время когда оно произойдет и чтобы он был постоянно разным в зависимости от открытия магазина

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 23.01.2007 17:40

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

Автор: nany 23.01.2007 17:46

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

Автор: nany 29.01.2007 23:04

Помнишь ты мне давал ссылку на задачу моделирование банка, не мог бы ты мне помочь перевести ее на Паскаль, а то я этот С не очень хорошо понимаю, заранее спасибо))

Автор: volvo 29.01.2007 23:40

Ну, вот так, например:


Добавлено через 25 сек.
Вроде, работает...


Прикрепленные файлы
Прикрепленный файл  bank.pas ( 5.77 килобайт ) Кол-во скачиваний: 362

Автор: nany 30.01.2007 17:41

Спасибо тебе большое за помощь))))

Автор: nany 2.02.2007 2:59

Извини, пожалуйста.
У меня почему то сортировка не работает в этом кусочке:
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 2.02.2007 3:18

Во-первых, как именно это связано с "Моделированием"? Во-вторых, почему без тегов? А в третьих - у тебя выход за пределы массива:

for k:=1 to n do
if a[k] > a[k+1] then ... { <--- Здесь !!! Если K = n ... }
Сколько раз говорить, отлаживайте программы с ключом {$R+}, помогает находить ошибки...

Автор: nany 2.02.2007 12:17

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 3.02.2007 19:27

подскажите пожалуйста как можно придумать, если идут числа
2
7
1
3
мы их осортировали и получили:
1
2
3
7
И у нас есть ячейка, в котрую нужно записать место как они стояли в списке:
Элемент Место
2 2
7 4
1 1
3 3

Автор: volvo 3.02.2007 19:33

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

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

Автор: nany 3.02.2007 20:45

я не могу найти по поиску

Автор: volvo 3.02.2007 22:17

Ты про это:

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 4.02.2007 0:35

Да я про это, спасибо тебе большое -smile.gif))

Автор: nany 6.02.2007 17:50

Извини, а как числа в массиве возводить в степень, power или нет?

Автор: volvo 6.02.2007 18:10

Ты точнее можешь выражаться? Какие числа, в каком массиве, какая степень? Надо ВЕСЬ массив возводить в эту степень, или только четные элементы? А может вообще только первый и последний? Я не телепат, в конце-то концов... Приводи исходные данные, и ЧТО ты хочешь получить...

Автор: nany 6.02.2007 18:15

извини, каждый элемент массива. например:
массив
0,3434
0,2534
и получилось:
0,11792356
0,06421156
т.е. 0,3434^2=0,11792356 и т.д.
sqr - это квадрат, а если в 3 степень это как

Автор: volvo 6.02.2007 20:21

FAQ: http://forum.pascal.net.ru/index.php?s=&showtopic=4535&view=findpost&p=38227 - второй (стандартный) способ...

Автор: nany 6.02.2007 23:33

Коэффициент эксцесса


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 7.02.2007 0:41

Никаких предаоложений делать не могу - в стандартном Паскале нет функции Power, я не знаю, как она у тебя реализована, и будет ли то, что ты привела правильным... Картинку неплохо было бы и побольше сделать - показателей степени практически не видно...