Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.62
revaldo666
9 / 9 / 1
Регистрация: 18.07.2010
Сообщений: 180
26.06.2011, 21:17     Очередь с приоритетом #1
Всем привет .
Собственно нужно организовать очередь с приоритетом.
Задание:
В офисе один принтер, на печать должны подоватся те документы которые выше по приоритету.
Имеются такие дефайны.
Код:
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++;
}
заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2011, 21:17     Очередь с приоритетом
Посмотрите здесь:

Очередь с приоритетом C++
C++ очередь с приоритетом
C++ Очередь с приоритетом
Очередь с приоритетом C++
C++ Очередь с приоритетом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
26.06.2011, 22:50     Очередь с приоритетом #2
Значит, от кого пришёл документ, влияет на приоритет, это я понял. Во сколько пришёл документ- не влияет на приоритет, это я тоже понял.

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

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

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

Не по теме:

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

revaldo666
9 / 9 / 1
Регистрация: 18.07.2010
Сообщений: 180
27.06.2011, 00:53  [ТС]     Очередь с приоритетом #7
ок.буду очень благодарен
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2011, 18:11     Очередь с приоритетом
Еще ссылки по теме:

C++ Очередь с приоритетом. Элементы с наивысшим приоритетом ставятся в начало очереди, с наименьшим – в конец
C++ Очередь с приоритетом
C++ Очередь с приоритетом

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
27.06.2011, 18:11     Очередь с приоритетом #8
используйте что-то типа этого:

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

Во-первых мультимап автоматически сортирует свои элементы по ключам.
Во-вторых мальтимап позволяет быстро добавлять в контейнер новый элемент, и изымать его оттуда.
Yandex
Объявления
27.06.2011, 18:11     Очередь с приоритетом
Ответ Создать тему
Опции темы

Текущее время: 19:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru