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

Создать очередь с приоритетом (Ошибка) - C++

Восстановить пароль Регистрация
 
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
03.01.2013, 22:43     Создать очередь с приоритетом (Ошибка) #1
Здравствуйте, Друзья!
Стоящая задача (создать очередь с приоритетом) выполнена, но есть ошибка. Друзья, гляньте пожалуйста "свежим взглядом", где она (а она точно есть):
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <iostream>
#include <conio.h>
using namespace std;
 
class QueuePrior
{
    int MaxLength;
    int length;
    int *Queue;
    int *Pri;
public:
    QueuePrior( int );
    ~QueuePrior();
    bool IsEmpty(); //
    bool IsFull(); //
    void Add( int, int ); //
    int Extract(); //
    void Clear(); //
    int GetCount(); //
    void Show();    
};
QueuePrior :: QueuePrior( int m )
{
    MaxLength = m;
    length = 0;
 
    Queue = new int [MaxLength];
    Pri = new int [MaxLength];
}
QueuePrior :: ~QueuePrior()
{
    delete [] Queue;
    delete [] Pri;
}
 
bool QueuePrior :: IsEmpty()
{
    return length == 0;
}
bool QueuePrior :: IsFull()
{
    return length == MaxLength;
}
void QueuePrior :: Clear()
{
    length = 0;
}
int QueuePrior :: GetCount()
{
    return length;
}
void QueuePrior :: Add( int x, int y )
{
    if( !IsFull() )
    {
        Queue[length] = x;
        Pri[length++] = y;
    }
}
int QueuePrior :: Extract()
{
    if(!IsEmpty())
    {
        int cell = 0;
        int value = 0;
 
        for(int i = 0; i < length; ++i)
        {
            if(Pri[i] > value)
            {
                value = Pri[i];
                cell = i;
            }
        }
 
        int queVal = Queue[cell];
 
        for(int i = cell; i < length + 1; ++i)
        {
            Queue[i] = Queue[i+1];
            Pri[i] = Pri[i+1];
        }
 
        --length;
 
        return queVal;
    }
 
    else return -1;
}
void QueuePrior :: Show()
{
    if(!IsEmpty())
    {
        for(int i = 0; i < length; ++i) 
        {
            cout << "This is Queue    - " << Queue[i] <<"\nThis is Priority - " << Pri[i] << "\n\n";
        }
    }
}
 
void main()
{
    int var = 6;
    QueuePrior obj(var);
 
    obj.Add(5, 4);
    obj.Add(7, 3);
    obj.Add(5, 0);
    obj.Add(8, 3);
    obj.Add(3, 4);
    obj.Add(5, 1);
 
    obj.Show();
 
    cout << endl << endl << endl;
 
    int x;
 
    while(var--)
    {
        x = obj.Extract();
        cout << x << ' ';
    }
 
    _getch();
}
СъпасиБо!

Добавлено через 10 минут
... уже нашёл!
Всем спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2013, 22:43     Создать очередь с приоритетом (Ошибка)
Посмотрите здесь:

Очередь с приоритетом C++
C++ Задача по STL (Создать объект-контейнер, очередь с приоритетом, заполнить ее данными, тип char)
C++ priority_queue< int , char*, CompareHeap1 > pqMax (создать очередь с приоритетом для поиска 10 наиболее и наименее часто встречающихся слов) C++
Очередь с приоритетом C++
Очередь с приоритетом C++
C++ Очередь с приоритетом
C++ Очередь с приоритетом. Элементы с наивысшим приоритетом ставятся в начало очереди, с наименьшим – в конец
C++ Очередь с приоритетом

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 22:46     Создать очередь с приоритетом (Ошибка) #2
а что было то?
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
03.01.2013, 22:52  [ТС]     Создать очередь с приоритетом (Ошибка) #3
В методе int Extract "вылазил" за пределы массива:
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
int QueuePrior :: Extract()
{
    if(!IsEmpty())
    {
        int cell = 0;
        int value = 0;
 
        for(int i = 0; i < length; ++i)
        {
            if(Pri[i] > value)
            {
                value = Pri[i];
                cell = i;
            }
        }
 
        int queVal = Queue[cell];
 
        for(int i = cell; i < length + 1; ++i) //вот в этой строчке i < length + 1;
        {
            Queue[i] = Queue[i+1];
            Pri[i] = Pri[i+1];
        }
 
        --length;
 
        return queVal;
    }
 
    else return -1;
}
Yandex
Объявления
03.01.2013, 22:52     Создать очередь с приоритетом (Ошибка)
Ответ Создать тему
Опции темы

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