Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
revaldo666
9 / 9 / 3
Регистрация: 18.07.2010
Сообщений: 180
1

Очередь с приоритетом

26.06.2011, 21:17. Просмотров 2962. Ответов 7
Метки нет (Все метки)

Всем привет .
Собственно нужно организовать очередь с приоритетом.
Задание:
В офисе один принтер, на печать должны подоватся те документы которые выше по приоритету.
Имеются такие дефайны.
Код:
C++
1
2
3
4
5
6
#define FULL 10 //макс.размер очереди
#define EMPTY 0 
#define DIRECTOR 10 //приоритет директора
#define MANAGER 7 //приоритет мэнеджера
#define ACCOUNTANT 5 //приоритет бухгалтера
#define SECRETORY 2 //приоритет секретаря
Имеются 3 класса
1 класс содержит таймер (CTimer)
2-й класс CDoc он содержит поля
Код:
C++
1
2
3
4
CTimer start; //время поступления документа на печать
    CTimer print_time; //время сколько будет печататься документ
    int priority; //приоритет 
    char text[200];//собственно сам текст
3-й класс CPrint
имеет 2 поля
Код:
C++
1
2
CDoc print[FULL];
    int top; //вершина стэка
не получается организовать очередь, что-то я туплю...
суть очереди:
Если на печать поступает документ от секретаря например в 12:00 и время печати 10 минут,
после в 12:03 поступает к примеру документ от мэнеджера,
а в 12:09 от директора,
то после завершения печати документа секретаря должны распечататся документы директора, так как его приоритет больше.
Вот мой метод Push()
Если не сложно помогите плиз.
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void CPrint::Push(CDoc & p)
{
    if(IsFull())
        return;
    int i=top-1;
    if(i<0){
        print[top]=p;
        print[top++].priority=p.priority;
        return;
    }
    for(int n=i;n>=0;n--)
    {
        if(p.priority<=print[n].priority)
        {
            for(int m=top;m>n;m--)
            {
            print[m]=print[m-1];
            print[m].priority=print[m-1].priority;
            }
            print[n+1]=p;
            print[n+1].priority=p.priority;
            top++;
            return;
        }
    }
    for(int n=top;n>0;n--)
    {
        print[n]=print[n-1];
        print[n].priority=print[n-1].priority;
    }
    print[0]=p;
    print[0].priority=p.priority;
    top++;
}
заранее спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2011, 21:17
Ответы с готовыми решениями:

Очередь с приоритетом. Элементы с наивысшим приоритетом ставятся в начало очереди, с наименьшим – в конец
Здравствуйте! имеется задание: создать очередь с приоритетом (у каждого...

Очередь с приоритетом
есть очередь #include &lt;iostream&gt; #include &lt;queue&gt; using namespace std; ...

Очередь с приоритетом.
Добрый день. Возникла небольшая проблема. У нас есть текстовый файл содержащий...

Очередь с приоритетом
Здравствуйте! Нужна ваша помощь! Не могу разобраться в чём проблема. Создаю...

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

7
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,553
26.06.2011, 22:50 2
Значит, от кого пришёл документ, влияет на приоритет, это я понял. Во сколько пришёл документ- не влияет на приоритет, это я тоже понял.

А время печати влияет на приоритет? Ты упомянул, что каждый документ имеет поле
print_time;

Оно на приоритет не влияет? Можно словами.
1
revaldo666
9 / 9 / 3
Регистрация: 18.07.2010
Сообщений: 180
26.06.2011, 23:38  [ТС] 3
print_time

по идеи влияет, если на печать пришло 3 документа разных по приоритету, с разницей по времени в минуту на пример, первый который поступил начинает печать его принт_тайм 5 минут, если сотрудник низший по приоритету прислал документ раньше чем например тот же директор, то всё равно после окончания печати первого документа, на печать заступает документ директора.
0
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,553
26.06.2011, 23:41 4
Я не понял. Честно. Пиши как я, а? Правильным русским языком.
0
revaldo666
9 / 9 / 3
Регистрация: 18.07.2010
Сообщений: 180
27.06.2011, 00:24  [ТС] 5
влияет на приоритет)
0
kravam
27.06.2011, 00:47
  #6

Не по теме:

Завтра, а щас спать

0
revaldo666
9 / 9 / 3
Регистрация: 18.07.2010
Сообщений: 180
27.06.2011, 00:53  [ТС] 7
ок.буду очень благодарен
0
Bers
Заблокирован
27.06.2011, 18:11 8
используйте что-то типа этого:

std::multimap<int, SDocument> myKonveer;
В качестве ключа - приоритет документа. А в качестве значения - собственно сам документ.

Во-первых мультимап автоматически сортирует свои элементы по ключам.
Во-вторых мальтимап позволяет быстро добавлять в контейнер новый элемент, и изымать его оттуда.
0
27.06.2011, 18:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2011, 18:11

Очередь с приоритетом
У меня есть задание: 9. Разработать шаблон класса для работы с очередью с...

Очередь с приоритетом
Здравствуйте! Помогите, пожалуйста! Мне нужно реализовать приоритетную очередь...

Очередь с приоритетом
Здравствуйте! Пожалуйста, если кто-то может, то помогите с задачей. Задач из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru