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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 01:12   #1
Юлькин
 
Регистрация: 12.04.2009
Сообщений: 8
По умолчанию Очередь

Доброй ночи!Написала программу, но почему то print и contains не работает! помогите, пожалуйста, разобраться или наведите на путь истинный!!!

Код:
#include <iostream>
#include <cassert>
 
class Queue;
 
typedef  int T;
 
const int S=50;
 
class Queue
{
    private:
        int first;
        int size;
        T data[S];
    public:
        Queue()
        {
            first;
            size=0;
        }
        ~Queue() {}
 
        bool isEmpty()
        {
            return size==0;
        }
 
        int count()
        {
            return size;
        }
 
        bool push(T t)
        {
           // std::cout<<"Yahoo"<<"\n";
            if(size==S) return false;
            else{
            data[(first+size++)%S]=t;
            return true;
            }
        }
 
        bool pop()
        {
            if(!size) return false;
            else{
            first++;
            first%=S;
            size--;
            return true;
            }
 
        }
 
        T top()
        {
 
            if(size) return data[first];
        }
 
        bool contains(T t)
        {
            //std::cout<<"Yahoo"<<"\n";
            for(int i=0; i<size; i++)
            {
            //std::cout<<"Yahoo"<<"\n";
             //std::cout<<data[2]<<"\n";
                if(data[i]==t) return true;
                return true;
            }
            return false;
        }
         
        void print()
        {
            for(int i=0; i<size; i++)
            {
                std::cout<<data[i]<<"\n";
            }
        }
 
        void bubblesort()
        {
            int i;
            int j;
            int tmp;
 
            for(i = 0; i <= size-1; i++)
            {
                for(j = 0; j <= size-2-i; j++)
                {
                    if( data[j]>data[j+1] )
                    {
                        tmp = data[j];
                        data[j] = data[j+1];
                        data[j+1] = tmp;
                    }
                }
            }
        }
 
 
};
 
int main()
{
    Queue q;
    assert(q.isEmpty()==true);
    assert(q.push(12)==true);
    assert(q.push(13)==true);
    assert(q.count()==2);
    assert(q.isEmpty()==false);
    assert(q.pop()==true);
    assert(q.isEmpty()==false);
    assert(q.count()==1);
    assert(q.contains(13)==true);
    q.bubblesort();
    q.print();
    return 0;
}
Юлькин вне форума
Старый 30.05.2009, 01:22   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

print работает. Проблема в другом.
Код:
bool push(T t)
        {
           // std::cout<<"Yahoo"<<"\n";
            if(size==S) return false;
            else{
            data[(first+size++)%S]=t;
            return true;
            }
        }
Что за странная конструкция? Притом first нигде не проинициализирована. Может, все-таки, вот так:
Код:
data[size++]=t;
upd Все, понял. См. мой пост ниже.
-------------
contains не работает из-за лишней строчки:
Код:
  if(data[i]==t) return true;
                return true; // <<-- нужно удалить
С учетом этих корректировок программа успешно убивает себя на
Код:
assert(q.contains(13)==true);
и, если ее закомментить, выдает единственный элемент - 12.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 30.05.2009 в 01:39.
Sazary вне форума
Старый 30.05.2009, 01:24   #3
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,986
Сообщение

Хм... Если тут написанно на С++- то должно все работать, проверял в Borlande...
Результат: 1969382756

Последний раз редактировалось vasek123; 30.05.2009 в 01:36.
vasek123 вне форума
Старый 30.05.2009, 01:37   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Юлькин, не заметил, что нужна очередь, а не стек ))
Тогда нужно исправить функции вот так:
Код:
void print()
        {
            for(int i=first; i<first+size; i++)
            {
                std::cout<<data[i]<<"\n";
            }
        }
Код:
bool contains(T t)
        {
            //std::cout<<"Yahoo"<<"\n";
            for(int i=first; i<first+size; i++)
            {
            //std::cout<<"Yahoo"<<"\n";
             //std::cout<<data[2]<<"\n";
                if(data[i]==t) return true;
            }
            return false;
        }
Ну и добавить инициализацию first:
Код:
Queue()
        {
            first=0;
            size=0;
        }

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 30.05.2009, 16:00   #5
Юлькин
 
Регистрация: 12.04.2009
Сообщений: 8
По умолчанию

Спасибо большое!! Вы мне очень помогли!!
Юлькин вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стек и очередь. (Delphi) Olgasato Помощь студентам 8 02.04.2010 08:08
Задача на очередь Freer Общие вопросы C/C++ 26 06.11.2008 01:14
очередь odi_noki Общие вопросы Delphi 3 24.10.2008 12:09