1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Имеются три конвейера. Конвейеры работают независимо друг от друга. Изначально на первом конвейере располагаются детали N типов, а второй и третий – пусты. Время обработки детали каждого типа с каждого конвейера задается матрицей Time[1..N, 1..3]. После обработки детали с конвейера k она поступает на конвейер k+1. Деталь после третьего конвейера считается изготовленной. Требуется по начальному расположению деталей на первом конвейере определить время, через которое все детали будут изготовлены.
Помогите, пожалуйста, понять хотя бы алгоритм решения: вообще не могу разобраться , где здесь используется очередь и как, собственно, высчитывается само время обработки.
Прогресс на лицо: процентов 90 уже понятно . Но есть еще вопросы:
Здесь используются элементы d[i] массива d... но чем он у нас заполнен? он же пустой... или я туплю
for i:=1 to Nk do begin //цикл по конвеерам в каждой КТ //если время совпадает с КТ, значит на этом конвеере //закончилась обработка текущей детали. //для всех, кроме последнего, перекладываем деталь в очередь следующего К //для последнего просто увеличивает Dd if (Abs(T-Tk[i])<e) then if i<Nk then Put(K[i+1],d[i]) else Inc(Dd); //если К свободен, взять деталь из очереди (если там есть что-то) if (T>=Tk[i]-e) and Get(K[i],d[i]) then begin for x:=Round(Tk[i]) to Round(T)-1 do s[i]:=s[i]+'-'; //псевдографика //отметить КТ для этого К, как время окончания обработки детали Tk[i]:=T+TDK[d[i],i]; for x:=1 to Round(TDK[d[i],i]) do s[i]:=s[i]+Char(96+d[i]) //псевдографика end end;
Далее...
for i:=1 to Nk do if T1<Tk[i] then T1:=Tk[i]; //найти минимальную КТ, бОльшую текущего времени (т.е. следующую) for i:=1 to Nk do if (T<Tk[i]) and (Tk[i]<T1) then T1:=Tk[i]; //продвигаем текущее время вперед T:=T1
(?)Переменной T1 не было присвоено начальное значение. Я так понимаю, что если делать таким образом: T1:=<very_large_value>, то этого не требуется. А если как в проге, то возникает (?).