![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Natalka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 7.12.2006 Где: Днепродзержинск Репутация: нет Всего: нет |
Здравствуйте!
Вот есть моя програмка: #include "stdafx.h" #include <time.h> #include <math.h> using namespace std; class QueuePriority { // Очередь int * Wait; int * Pri; // Максимальный размер очереди int MaxQueueLength; // Текущий размер очереди int QueueLength; public: // Конструктор QueuePriority(int m); //Деструктор ~QueuePriority(); // Добавление элемента void Add(int c,int p); // Извлечение элемента int Extract(); // Очистка очереди void Clear(); // Проверка существования элементов в очереди bool IsEmpty(); // Проверка на переполнение очереди bool IsFull(); // Количество элементов в очереди int GetCount(); //демонстрация очереди void Show(); void sort(); int PassengerComing(double Coming); }; void QueuePriority::Show() { int S; cout<<"\n-------------------------------------\n"; //демонстрация очереди for(int i=0;i<QueueLength;i++) { if(Wait[i]==Wait[i+1]&&Pri[i]<Pri[i+1]) { S=Pri[i]; Pri[i]=Pri[i+1]; Pri[i+1]=S; } } for(int i=0;i<QueueLength;i++) { cout<<Wait[i]<<" - "<<Pri[i]<<"\n\n"; } cout<<"\n-------------------------------------\n"; } QueuePriority::~QueuePriority() { //удаление очереди delete[]Wait; delete[]Pri; } QueuePriority::QueuePriority(int m) { //получаем размер MaxQueueLength=m; //создаем очередь Wait=new int[MaxQueueLength]; Pri=new int[MaxQueueLength]; // Изначально очередь пуста QueueLength = 0; } void QueuePriority::Clear() { // очистка очереди QueueLength = 0; } bool QueuePriority::IsEmpty() { // Пуст? return QueueLength == 0; } bool QueuePriority::IsFull() { // Полон? return QueueLength == MaxQueueLength; } int QueuePriority::GetCount() { // Количество присутствующих в стеке элементов return QueueLength; } int QueuePriority::PassengerComing(double Coming) { double time = 0; // Используется экспоненциальный закон распределения вероятности time = ceil(-Coming * 60 * log(1 - (double)rand() / (RAND_MAX + 1))); return (int)time; } void QueuePriority::Add(int c,int p)//p=время простоя принтера { // Если в очереди есть место, то увеличиваем количество // значений и вставляем новый элемент p=PassengerComing(1); if(!IsFull()) { Wait[QueueLength] = c; Pri[QueueLength] = p; QueueLength++; } } int QueuePriority::Extract() { // Если в очереди есть элементы, то возвращаем тот, // который вошел первым и сдвигаем очередь if(!IsEmpty()) { //пусть приоритетный элемент - нулевой int max_pri=Pri[0]; //а приоритетный индекс = 0 int pos_max_pri=0; //ищем приоритет for(int i=1;i<QueueLength;i++) //если встречен более приоритетный элемент if(max_pri<Pri[i]&&i++>i){ max_pri=Pri[i]; pos_max_pri=i;} //вытаскиваем приоритетный элемент int temp1=Wait[pos_max_pri]; int temp2=Pri[pos_max_pri]; //сдвинуть все элементы for(int i=pos_max_pri;i<QueueLength-1;i++) { Wait[i]=Wait[i+1]; Pri[i]=Pri[i+1]; } //уменьшаем количество QueueLength--; // возврат извлеченного элемента return temp1; } else return -1; } void QueuePriority::sort() { int max,temp,temp2; for(int i=0;i<QueueLength-1;i++) { max=i; for(int j=i+1;j<QueueLength;j++) { if(Wait[j]>Wait[max]) max=j; } if(max == i) continue; temp=Pri[i]; Pri[i]=Pri[max]; Pri[max]=temp; temp2=Wait[i]; Wait[i]=Wait[max]; Wait[max]=temp2; } } void main() { srand(time(0)); //создание очереди QueuePriority QUP(25); for(int i=0;i<5;i++){ QUP.Add(rand()%5+1,0); } //сортировка элементов QUP.sort(); //показ очереди QUP.Show(); //извлечение элемента QUP.Extract(); //показ очереди QUP.Show(); QUP.Extract(); QUP.Show(); QUP.Extract(); QUP.Show(); QUP.Extract(); QUP.Show(); } А вот было такое задание Разработать приложение, имитирующее очередь печати принтера. Должны быть клиенты, посылающие запросы на принтер, у каждого из которых есть свой приоритет. Каждый новый клиент попадает в очередь в зависимости от своего приоритета. Необходимо сохранять статистику печати (пользователь, время) в отдельной очереди. Предусмотреть вывод статистики на экран. Никак не могу понять,как сдесь сохранить статистику в отдельной очереди,может,кто даст дельный совет хоть какой-нибудь? |
|||
|
||||
| SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
Необходимо четко определиться - какого рода статистика ведется, может быть несколько вариантов:
- время подачи заявки - время печати заявки - (ну и соответственно) время нахождения в очереди. Первое и второе решается так можешь сохранить (в виде структуры): - запрос - приоритет - время в отдельном списке. Сохранять нужно: в первом случае - до обработки "принтером", во втором - "после". Третье чуть сложнее, но принцип тот же. -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
| SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
P.S. пользуйся тегами форматирования кода (ctrl+shift+c)
так нагляднее и больше вероятность того, что твоему исходнику уделят больше внимания.... -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
| Natalka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 7.12.2006 Где: Днепродзержинск Репутация: нет Всего: нет |
А как же с моим кодом?Нужно его полностью переделать под структуры или как-то можно сохранять в виде структуры данные?
|
|||
|
||||
| SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
Natalka,
очередь статистики уже обработанных сообщений подобна очереди заданий
-------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |