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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.62
revaldo666
9 / 9 / 1
Регистрация: 18.07.2010
Сообщений: 180
#1

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

26.06.2011, 21:17. Просмотров 2799. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очередь с приоритетом (C++):

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

Очередь с приоритетом - C++
есть очередь #include &lt;iostream&gt; #include &lt;queue&gt; using namespace std; int main() { priority_queue&lt;float&gt; q; ...

Очередь с приоритетом - C++
Помогите, пожалуйста, создать из моего класса очередь с приоритетом(приоритетом является money). #include &lt;iostream&gt; #include...

Очередь с приоритетом - C++
Разработать функции работы с приоритетной очередью. Постановка запросов в очередь выполняется по приоритету, снятие - подряд из старших...

Очередь с приоритетом - C++
Здравствуйте! Нужна ваша помощь! Не могу разобраться в чём проблема. Создаю очередь с приоритетом(шаблонный класс) с типом данных Job....

Очередь с приоритетом - C++
как реализовать очередь с приоритетом на бинарной куче?при том нужно графически вывести на консоль т.к я поняла графический вывод...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
26.06.2011, 22:50 #2
Значит, от кого пришёл документ, влияет на приоритет, это я понял. Во сколько пришёл документ- не влияет на приоритет, это я тоже понял.

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

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

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

Не по теме:

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

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

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

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

Очередь с приоритетом. - C++
Добрый день. Возникла небольшая проблема. У нас есть текстовый файл содержащий следующую числовую информацию: Так вот необходимо...

Очередь с приоритетом - C++
У меня есть задание: 9. Разработать шаблон класса для работы с очередью с приоритетами, выполненной в виде односвязного списка. Тип...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.06.2011, 18:11
Ответ Создать тему
Опции темы

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