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

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

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

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

05.04.2012, 00:14. Просмотров 682. Ответов 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();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 00:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите найти и исправить ошибку в очереди. (C++):

Помогите найти и исправить ошибку в коде - C++
Не очень хорошо пока что понимаю язык,поэтому,думаю,косяков довольно много. Используя глобальные переменные,нужно обеспечить передачу...

исправить ошибку в очереди - C++
имеется код программы в котором нужно исправить вид выводимых на экран оценок.не могу понять как это сделать.в целом программа...

Помогите исправить ошибку..... - C++
#include&lt;stdio.h&gt; #include&lt;ctype.h&gt; #include&lt;math.h&gt; #include&lt;string&gt; #include&lt;iostream&gt; #include&lt;stdlib.h&gt; #define size_str 80...

Помогите исправить ошибку - C++
#include &lt;process.h&gt; #include &lt;stdio.h&gt; int a; void Thread( void* pParams ) { int i, num = 0; while ( 1 ) ...

помогите исправить ошибку - C++
1) Надо исправить решение задачи , чтобы ввод значений элементов массива и вывод результатов производился в главной программе, а обработка...

Помогите исправить ошибку - 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 начинать
1
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 01:12  [ТС] #3
TwiX, огромное вам спасибо))
В процессе у меня возникло ещё 2 вопроса.
Как вывести размер очереди?
Ответ выдает не верный.
И наконец второй вопрос.
Как полность очистить очередь?

Добавлено через 33 минуты
С размером я разобрался. Помогите пожалуйста, как очистить стек?
0
TwiX
60 / 60 / 1
Регистрация: 27.10.2011
Сообщений: 189
05.04.2012, 01:15 #4
Цитата Сообщение от b0n4b Посмотреть сообщение
Помогите пожалуйста, как очистить стек?
Просто приравнять head к tail'у)
1
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 01:21  [ТС] #5
TwiX, благодарю)
0
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.04.2012, 01:42 #6
вы намеренно не используете стандартную реализацию очереди из STL?
0
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 01:47  [ТС] #7
alexey31415, я не понимаю о чем вы говорите. Можно поподробней?
0
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 и изучи,так как многое уже придумано давным давно
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
05.04.2012, 04:56 #9
Причем тут намеренно, каждый начинающий программист должен знать как примерно устроены шаблоны и функции стандартной библиотеки, эти задания делаются не для того что бы создать свой класс и использовать его в дальнейшем, а для того что бы понять как все устроено и работает.
0
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 10:34  [ТС] #10
alexey31415, Toshkarik, у меня задание реализовать очередь через массив. Подойдет ли шаблон, который прислал alexey31415????
0
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.04.2012, 13:44 #11
Цитата Сообщение от b0n4b Посмотреть сообщение
Подойдет ли шаблон
в таком случае нет,потому что реализация очереди скрыта от тебя,у тебя уже сразу есть функции и алгоритмы для работы с очередью при помощи итераторов(считай указатели в массивах,хотя они и есть итераторы произвольного доступа)
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
05.04.2012, 15:09 #12
У вас задание написать очередь самому, а не использовать шаблонную функцию стандартной библиотеки.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 15:09
Привет! Вот еще темы с ответами:

Помогите исправить ошибку - C++
#include&lt;iostream&gt; #include&lt;time.h&gt; #include&lt;windows.h&gt; #include&lt;vector&gt; using namespace std; bool Search(int i,int j); ...

Помогите Исправить Ошибку - C++
Помогите пожалуйста исправить ошибку в проге: #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double f1(double); double...

Помогите исправить ошибку - C++
Программа считывает из входного файла символы и соответствующие им коды. Затем вводится строка. В выходной файл записывается зашифрованная...

Помогите исправить ошибку - C++
Программа должна посчитать р используя s. После ввода любого значения у выдает :&quot;Floating poin eror: Divide by 0. Abnormal program...


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

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

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