Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2011, 23:45   #1
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию Очередь с приоритетом

Всем привет .
Собственно нужно организовать очередь с приоритетом.
Задание:
В офисе один принтер, на печать должны подоватся те документы которые выше по приоритету.
Имеются такие дефайны.
Код:
#define FULL 10 //макс.размер очереди
#define EMPTY 0 
#define DIRECTOR 10 //приоритет директора
#define MANAGER 7 //приоритет мэнеджера
#define ACCOUNTANT 5 //приоритет бухгалтера
#define SECRETORY 2 //приоритет секретаря
Имеются 3 класса
1 класс содержит таймер (CTimer)
2-й класс CDoc он содержит поля
Код:
CTimer start; //время поступления документа на печать
	CTimer print_time; //время сколько будет печататься документ
	int priority; //приоритет 
	char text[200];//собственно сам текст
3-й класс CPrint
имеет 2 поля
Код:
CDoc print[FULL];
	int top; //вершина стэка
не получается организовать очередь, что-то я туплю...
суть очереди:
Если на печать поступает документ от секретаря например в 12:00 и время печати 10 минут,
после в 12:03 поступает к примеру документ от мэнеджера,
а в 12:09 от директора,
то после завершения печати документа секретаря должны распечататся документы директора, так как его приоритет больше.
Вот мой метод Push()
Если не сложно помогите плиз.
Код:
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++;
}
заранее спасибо
revaldo666 вне форума Ответить с цитированием
Старый 26.06.2011, 01:22   #2
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

Если нужно могу скинуть проект.
revaldo666 вне форума Ответить с цитированием
Старый 26.06.2011, 01:49   #3
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Лучше напиши связный список нормальный или используй list: http://www.cplusplus.com/reference/stl/list/
Там и сортировка есть тд.
An1ka вне форума Ответить с цитированием
Старый 26.06.2011, 01:53   #4
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

list ещё не учили...нужно такими методами это сделать.
revaldo666 вне форума Ответить с цитированием
Старый 26.06.2011, 21:13   #5
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

так что никто не поможет с очередью разобратся?
revaldo666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очередь Sarmat) Помощь студентам 0 10.03.2011 12:33
Очередь shelovek Помощь студентам 0 31.10.2010 14:15
Запуск приложения с приоритетом Shouldercannon Общие вопросы Delphi 19 26.08.2010 15:43
Очередь С++ phantom4eg Фриланс 1 25.04.2010 00:54
Очередь Юлькин Общие вопросы C/C++ 4 30.05.2009 16:00