1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Имеются три конвейера. Конвейеры работают независимо друг от друга. Изначально на первом конвейере располагаются детали N типов, а второй и третий – пусты. Время обработки детали каждого типа с каждого конвейера задается матрицей Time[1..N, 1..3]. После обработки детали с конвейера k она поступает на конвейер k+1. Деталь после третьего конвейера считается изготовленной. Требуется по начальному расположению деталей на первом конвейере определить время, через которое все детали будут изготовлены.
Помогите, пожалуйста, понять хотя бы алгоритм решения: вообще не могу разобраться , где здесь используется очередь и как, собственно, высчитывается само время обработки.
проверил на 2-х примерах, предложенных тут lapp'ом, результат совпадает с результатом его программы
const n = 4;
type TWorkTimes = array [1..n, 1..3] of Integer;
function Max(const a, b: Integer): Integer; begin if a > b then Max := a else Max := b; end;
function MaxTime(const wt: TWorkTimes; const i, j, k: Integer): Integer; var a, b, c: Integer; begin if i = 0 then a := 0 else a := wt[i, 1]; if j = 0 then b := 0 else b := wt[j, 2]; if k = 0 then c := 0 else c := wt[k, 3]; MaxTime := Max(Max(a, b), c); end;
procedure NextTact(var i, j, k: Integer); begin k := j; j := i; if (i < n) and (i <> 0) then inc(i) else i := 0; end;
function GetTotalTime(wt: TWorkTimes; i, j, k: integer): LongInt; var time: LongInt; begin if (i = 0) and (j = 0) and (k = 0) then GetTotalTime := 0 else begin time := MaxTime(wt, i, j, k); NextTact(i, j, k); GetTotalTime := time + GetTotalTime(wt, i, j, k); end; end;
Может, и так.. но тогда ты явно недомудрил.. klem4, скажи: какую задачу ты вообще решал?.. Что ты считаешь? Где входной поток деталей? Твоя программа телепатически угадывает его?
И еще одно: обрати внимание, что в решении требуется присутствие очередей (fifo, насколько я понимаю).
А вообще, использовать тут рекурсию - наверное, неплохая идея.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой