1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Ошибка В Решении

Тема в разделе "Вопросы новичков и не только", создана пользователем Whatka, 9 мар 2012.

  1. Whatka

    Whatka Well-Known Member

    Репутация:
    0
    Регистрация:
    9 окт 2011
    Сообщения:
    428
    Симпатии:
    4
    Найти колличество элементов стека с одинаковыми "соседями"
    Вот моё решение ошибок не выдаёт,но ответ не верный(всегда 0):
    Код:
    #include <iostream>
    using namespace std;
    class Stack
    {
    struct stack
    {
    int elem;
    stack *p;
    };
    stack *head;
    public:
    Stack(){head=NULL;}						//Конструктор
    ~Stack()								//Деструктор
    {
    stack *New;
    New=head;
    while(head)
    {
    New=head;
    head=head->p;
    delete New;
    }
    }
    void push(int a)						//Добавить в начало стека передаваемое число
    {
    stack *New;
    New=new stack;
    New->p=head;
    New->elem=a;
    head=New;	
    }
    int pop()								//Извлечь из начала стека (с удалением)
    {
    int back;
    stack *New;
    New=head;
    head=head->p;
    back=head->elem;
    delete New;
    return back;
    }
    bool is_empty()							//Проверка пуст ли стек
    {
    bool a=false;
    if (head==NULL)
    a=true;
    return a;	
    }
    void print ()							//Печать содержимого стека
    {
    stack *New;
    New=head;
    while(New)
    {
    cout<<New->elem<<endl;
    New=New->p;
    }
    }
    };
    void main()
    {
    setlocale(LC_ALL,"RUS");
    Stack w;
    int n,a,in,s(0);
    metka:
    cout<<"Количество элементов стека:";
    cin>>n;
    if(n<=2)
    {
    system ("cls");
    cout<<"Не корректное значение!\n";
    goto metka;
    }
    cout<<"Введите интервал заполнения:";
    cin>>in;
    cout<<"Стек после заполнения случайными числами:\n";
    for(int i(0);i<n;i++)
    {
    a=rand()%in;
    w.push(a);
    }
    w.print();
    int e1,e2,e3;
    e1=w.pop();
    e2=w.pop();
    while(w.is_empty()!=NULL)
    {
    e3=w.pop();
    if(e1==e3)
    s++;
    e1=e2;
    e2=e3;
    }
    cout<<"Количество чисел стека с одинаковыми соседями:"<<s<<endl;
    }
     
  2. rrrFer

    rrrFer Гость

    Репутация:
    0
    while(w.is_empty()!=NULL)
    точно должно быть ==, но я бы ваще это выпилил, алгоритм странный. После вычисления количества элементов, удовлетворяющих...стек очищается, что уже само по себе криво.
    Чето мне функция pop не нравится. Остальное не смотрел, т.к. код вцелом кривой и отформатирован стремно.
     
  3. Whatka

    Whatka Well-Known Member

    Репутация:
    0
    Регистрация:
    9 окт 2011
    Сообщения:
    428
    Симпатии:
    4
    я не согласен с этим аргументом
    что именно не нравится?что не так?
    конечно у каждого своя точка зрения
    но хотелось бы конкретных замечаний и предложений
     
  4. Whatka

    Whatka Well-Known Member

    Репутация:
    0
    Регистрация:
    9 окт 2011
    Сообщения:
    428
    Симпатии:
    4
    всё нашёл ошибку
    в цикле ==
    и в функции pop
    сначала строка
    back=head->elem;
    а потом
    head=head->p;
     
  5. rrrFer

    rrrFer Гость

    Репутация:
    0
    Стек не должен очищаться ни при добавлении элемента, ни при проверки на пустоту. Точно также он не должен очищаться и при подсчете количества элементов, имеющих одинаковых соседей. Для освобождения памяти существует деструктор.
    название переменной должно о чем-то говорить программисту.
    в функции добавления узла имя переменной New сойдет, но у вас такое имя используется везде, и при удалении узла, и в деструкторе и везде )
    почему NULL, а не 0? - Страуструп рекомендовал не использовать NULL без особой необходимости.
    По форматированию кода что не понятно?(ну МБ при публикации кода на форуме форматирование испортилось, но на кодебае не замечал таких артефактов.

    По алгоритму, ИМХО конешно, лучше проверять как то так:
    Код:
    if( element ->data == element ->next ->next ->data )
    //обязательно нужны проверка что ->next ->next существует вообще.
    чем после каждой итерации выполнять это:
    Код:
    e1=e2;
    e2=e3;
    Ну МБ я тут неправ.
     
Загрузка...
Похожие Темы - Ошибка Решении
  1. recrut
    Ответов:
    13
    Просмотров:
    122
  2. Петручо
    Ответов:
    0
    Просмотров:
    29
  3. Tayrus
    Ответов:
    5
    Просмотров:
    97
  4. OneDollar
    Ответов:
    12
    Просмотров:
    175
  5. ViSol
    Ответов:
    2
    Просмотров:
    110

Поделиться этой страницей