Очередь, Задача с тремя конвейерами |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Очередь, Задача с тремя конвейерами |
БелАчкА |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Женский Репутация: 0 |
Задача такая:
Имеются три конвейера. Конвейеры работают независимо друг от друга. Изначально на первом конвейере располагаются детали N типов, а второй и третий – пусты. Время обработки детали каждого типа с каждого конвейера задается матрицей Time[1..N, 1..3]. После обработки детали с конвейера k она поступает на конвейер k+1. Деталь после третьего конвейера считается изготовленной. Требуется по начальному расположению деталей на первом конвейере определить время, через которое все детали будут изготовлены. Помогите, пожалуйста, понять хотя бы алгоритм решения: вообще не могу разобраться , где здесь используется очередь и как, собственно, высчитывается само время обработки. |
Lapp |
Сообщение
#2
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
БелАчкА, чтобы лучше разобраться, просто представь себя тем человеком, который следит за конвеерами (я прошу прощения за орфографию, правильно писать "конвейер", но у мя рука не поворачивается такое уродство изображать..) и перекладывает детали с одного К на другой, когда они готовы. Что он делает? Он кладет деталь на конвеер, смотрит в табличку, сколько времени она будет обрабатываться и отмечает это время у себя в блокноте (контрольная точка, КТ). И так с каждым конвеером. Потом идет спать, а будильник заводит на ближайшую КТ.
Дальше зависит от реализации. Если он вместе с КТ отметил и номер конвеера, то он идет прямо к нужному конвееру. Если же он отметил просто время, то он проверяет все конвееры по очереди, начиная с первого, выискивая тот, у которого КТ совпадает с текущим временем. Находит, перекладывает деталь на следующий конвеер (или кладет на склад готовых деталей) и смотрит, есть ди детали в очереди для этого конвеера. Если есть, то загружает его следующей деталью и передвигает его КТ. Так он обходит все К в этот момент, а потом снова идет спать до следующей ТК. Я предпочел второй способ. Первый кажется эффективнее - попробуй его реализовать. Вот и все . Непыльная работенка. А ты у него ее отбираешь, заменяешь машиной... Я добавил наглядный вывод всего процесса с использованием псевдографики. Как только его увидишь, все станет понятно . Но при его использовании нужно задавать времена только целыми (я имею в виду, без дробей). Это в принципе не запрещается алгоритмом, но псевдографика не сдюжит.. Еще одно замечание. Эта программа неправильно обрабатывает ситуацию, когда время обработки какой-то детали на одном из конвееров нулевое. Но тут нужно уточнить услови - можно ли сразу перепрыгивать через такой конвеер на следующий (это приведет к изменению порядка следования деталей, что, как мне кажется, не страшно) или нужно все-таки выстоять очередь на нем. Выкладываю вторую версию . 1. Исправлена ошибка, замеченная тобой выше. 2. Выкинута переменная Work (она не нужна, если начальные КТ задать отрицательными). 3. Добавлены комментарии. 4. Добавлена псевдографика, которая наглядно представляет процесс. Вот, на всякий случай, еще один входной файл, побольше: Код 5 number of lines 8 number of details 3 2 3 2 1 matrix TDK (time-detail-konv) 2 1 1 3 5 5 2 1 2 1 2 1 5 4 1 5 2 1 3 4 4 1 5 1 1 6 2 1 2 2 8 5 5 4 1 1 2 3 5 8 6 1 7 input line (left to right) - который выдает такой результат: Код T= 47.000 - тут четко видно продвижение каждой детали (буква) по конвеерам.aaabbccccceeeeehhhhhhhhffffaaagggggg ---aab----cc---ee------hhhhhf-aa----gg -----aaab---c----e----------hhhhhfffffaaag --------aabbbcc---eee------------hhhh-f--aagg ----------a--bbbbbc--eeee------------h-f---a-gg Ну, и сама прога: //real time multy-line processing model -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 28.03.2024 21:43 |