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

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

Войти
Регистрация
Восстановить пароль
 
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
#1

Помогите найти и исправить ошибку в очереди. - C++

05.04.2012, 00:14. Просмотров 668. Ответов 11
Метки нет (Все метки)

Здравствуйте. Вот написал очередь, но работает не совсем корректно. Удаляет "голову очереди" вроде бы правильно, но после добавления "хвоста" в очереди появляются непонятно какие элементы. Помогите пожалуйста найти ошибку.

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
#include <iostream>
#include <conio.h>
#include <locale>
using namespace std;
 
void main()
{
    setlocale (LC_ALL, "Russian");
    int *queue;
    int tail=0,temp,head=0,x,komanda,n=1000,i;
    queue= new int [0];
    int *quesue = new int[n + 1];
    for(;;)
    {
        cout<<"\nДобавить или удалить элемент очереди?(нажмите 1, если добавить и 0 если удалить)";
        cin>>komanda;
 
        if(komanda==1)
        {
            cout<<"\nВведите ваш элемент: ";
            cin>>x;
            cout<<"\n";
            queue[tail]=x;
            tail++;
            
            if(tail>n) 
            tail=1;
            {
                for(i=0; i<tail; i++)
                cout<<queue[i]<<" ";
            }
        }
 
        if(komanda==0)
        {
            queue[head]=x;
            head++;
            for(i=head; i<tail; i++)
            cout<<queue[i]<<" ";
        }
    }
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 00:14     Помогите найти и исправить ошибку в очереди.
Посмотрите здесь:

помогите исправить ошибку C++
Помогите исправить ошибку C++
Помогите исправить ошибку C++
C++ Помогите исправить ошибку
Помогите исправить ошибку C++
C++ исправить ошибку в очереди
C++ Помогите Исправить Ошибку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TwiX
60 / 60 / 1
Регистрация: 27.10.2011
Сообщений: 189
05.04.2012, 00:29     Помогите найти и исправить ошибку в очереди. #2
C++
1
2
3
for(i=0; i<tail; i++)
 cout<<queue[i]<<" ";
 }
Почему в одном месте ты выводишь с нуля, а во втором с head?) Тут тоже надо с head начинать
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 01:12  [ТС]     Помогите найти и исправить ошибку в очереди. #3
TwiX, огромное вам спасибо))
В процессе у меня возникло ещё 2 вопроса.
Как вывести размер очереди?
Ответ выдает не верный.
И наконец второй вопрос.
Как полность очистить очередь?

Добавлено через 33 минуты
С размером я разобрался. Помогите пожалуйста, как очистить стек?
TwiX
60 / 60 / 1
Регистрация: 27.10.2011
Сообщений: 189
05.04.2012, 01:15     Помогите найти и исправить ошибку в очереди. #4
Цитата Сообщение от b0n4b Посмотреть сообщение
Помогите пожалуйста, как очистить стек?
Просто приравнять head к tail'у)
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 01:21  [ТС]     Помогите найти и исправить ошибку в очереди. #5
TwiX, благодарю)
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.04.2012, 01:42     Помогите найти и исправить ошибку в очереди. #6
вы намеренно не используете стандартную реализацию очереди из STL?
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 01:47  [ТС]     Помогите найти и исправить ошибку в очереди. #7
alexey31415, я не понимаю о чем вы говорите. Можно поподробней?
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.04.2012, 03:52     Помогите найти и исправить ошибку в очереди. #8
Класс queue (очередь) допускает вставку элементов в конец базовой
структуры данных и удаление элементов из ее начала (что обычно называют
структурой данных типа «первым вошел, первым вышел»). Очередь может быть
реализована структурой данных STL list либо deque. Типичными операциями
класса queue являются push для вставки элемента в конец очереди (что
реализуется вызовом функции push_back базового контейнера), pop для удаления
элемента из начала очереди (реализуется вызовом функции pop_front базового
контейнера), front для получения ссылки на первый элемент очереди
(реализуется вызовом функции front базового контейнера), back для получения
ссылки на последний элемент очереди (реализуется вызовом функции back
базового контейнера), empty для определения того, пуста ли очередь
(реализуется вызовом функции empty базового контейнера) и size для получения числа
элементов в очереди (реализуется вызовом функции size базового контейнера).

Добавлено через 3 минуты
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
#include <iostream> 
using std::cout; 
using std::endl; 
 
#include <queue> // определение адаптера queue 
 
int main() 
{ 
std::queue< double > values; // queue со значениями double 
 
// затолкнуть элементы в очередь values 
values.push( 3.2 ); 
values.push( 9.8 ); 
values.push( 5.4 ); 
 
cout << "Popping from values: "; 
 
// вытолкнуть элементы из очереди 
while ( !values.empty() ) 
{ 
cout << values.front() << ' '; // возвращает первый элемент очереди 
values.pop(); // удаляем первый элемент очереди 
} // конец while 
 
cout << endl; 
return 0; 
}
а лучше всего найди в интернете что такое STL и изучи,так как многое уже придумано давным давно
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,383
Завершенные тесты: 1
05.04.2012, 04:56     Помогите найти и исправить ошибку в очереди. #9
Причем тут намеренно, каждый начинающий программист должен знать как примерно устроены шаблоны и функции стандартной библиотеки, эти задания делаются не для того что бы создать свой класс и использовать его в дальнейшем, а для того что бы понять как все устроено и работает.
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 10:34  [ТС]     Помогите найти и исправить ошибку в очереди. #10
alexey31415, Toshkarik, у меня задание реализовать очередь через массив. Подойдет ли шаблон, который прислал alexey31415????
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.04.2012, 13:44     Помогите найти и исправить ошибку в очереди. #11
Цитата Сообщение от b0n4b Посмотреть сообщение
Подойдет ли шаблон
в таком случае нет,потому что реализация очереди скрыта от тебя,у тебя уже сразу есть функции и алгоритмы для работы с очередью при помощи итераторов(считай указатели в массивах,хотя они и есть итераторы произвольного доступа)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 15:09     Помогите найти и исправить ошибку в очереди.
Еще ссылки по теме:

C++ Помогите исправить ошибку.....
C++ Помогите исправить ошибку..
Помогите исправить ошибку.. C++
C++ Помогите найти и исправить ошибку в коде

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

Или воспользуйтесь поиском по форуму:
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,383
Завершенные тесты: 1
05.04.2012, 15:09     Помогите найти и исправить ошибку в очереди. #12
У вас задание написать очередь самому, а не использовать шаблонную функцию стандартной библиотеки.
Yandex
Объявления
05.04.2012, 15:09     Помогите найти и исправить ошибку в очереди.
Ответ Создать тему
Опции темы

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