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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2014, 17:26   #1
yurets17
Пользователь
 
Регистрация: 07.10.2013
Сообщений: 15
По умолчанию Если встречается нечетный элемент, то перед ним и после него вставить новые элементы со значением 0 (C++)

Здравствуйте! Подскажите пожалуйста в чем ошибка! Задание: Если встречается нечетный элемент, то перед ним и после него вставить новые элементы со значением 0
Проблема в том, что программа доходит только до первого нечетного элемента, вставляет перед ним и после него 0, а дальше список не выводит!
Язык С++
Код:
void numb_1(TSNum *&Start){
 
    TSNum *wp,*pp,*a,*b;
    wp = Start;
    pp = NULL;
    if(Start == NULL){
        cout << "List is empty!\n";
        return;
    }
    if(Start->next == NULL || Start->numb%2 != 0){
        a = new TSNum;
        b = new TSNum;
        a->numb = 0;
        addToStart(Start,a);
        b->numb = 0;
        Start->next->next = b;
        wp = Start->next->next->next;
        pp = Start->next->next;
        return;
    }
    while(wp != NULL){
        if(wp->numb %2 != 0){
            a = new TSNum;
            b = new TSNum;
            a->numb = 0;
            a->next = wp;
            wp->prev = a;
            a->prev = pp;
            pp->next = a;
            b->numb = 0;
            wp->next = b;
            b->prev = wp;
            
        }
        pp = wp;
        wp = wp->next;
    }
}
yurets17 вне форума Ответить с цитированием
Старый 04.03.2014, 17:47   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от yurets17 Посмотреть сообщение
Код:
void numb_1(TSNum *&Start){
 
    TSNum *wp,*pp,*a,*b;
    wp = Start;
    pp = NULL;
    if(Start == NULL){
        cout << "List is empty!\n";
        return;
    }
    if(Start->next == NULL || Start->numb%2 != 0){ // Start->numb%2 != 0 -  это зачем?
// А если зачем-то, то почему тогда дальше есть ретурн?
// Т.е. вы нарочно выходите, если первый элемент списка хранит нечетное значение?
        a = new TSNum;
        b = new TSNum;
        a->numb = 0;
        addToStart(Start,a);
        b->numb = 0;
        Start->next->next = b;
        wp = Start->next->next->next;
        pp = Start->next->next;
        return;
    }
    while(wp != NULL){
        if(wp->numb %2 != 0){
            a = new TSNum;
            b = new TSNum;
            a->numb = 0;
            a->next = wp;
            wp->prev = a;
            a->prev = pp; // а здесь чему равно pp на самой первой итерации?
            pp->next = a;
            b->numb = 0;
            wp->next = b;
            b->prev = wp;
            
        }
        pp = wp;
        wp = wp->next;
    }
}
___________________________

Последний раз редактировалось Smogg; 04.03.2014 в 18:09.
Smogg вне форума Ответить с цитированием
Старый 04.03.2014, 18:12   #3
yurets17
Пользователь
 
Регистрация: 07.10.2013
Сообщений: 15
По умолчанию

Цитата:
if(Start->next == NULL || Start->numb%2 != 0){ // Start->numb%2 != 0 - это зачем?
// А если зачем-то, то почему тогда дальше есть ретурн?
// Т.е. вы нарочно выходите, если первый элемент списка ноль хранит нечетное значение?
Здесь ошибка! Нужно так:
Код:
if(Start->next == NULL && Start->numb%2 != 0)
тоесть, если элемент в списке один и он не четный
yurets17 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В массиве вставить новый элемент со значением Р вслед за наибольшим из отрицательных элементов, C zenya21 Помощь студентам 2 17.02.2014 22:25
В числовом файле обнулить все отрицательные значения и элементы расположеные перед ним. extremalka Помощь студентам 2 10.04.2012 09:33
изменения диагонали если элемент нечетный sasha14486 Общие вопросы C/C++ 1 21.05.2011 21:02
Первый нечетный элемент каждой строки удвоить (предполагается, что в каждой строке есть нечетный элемент Галина002 Помощь студентам 1 18.03.2009 06:30
Найти максимальный элемент матрицы и вставить правее него столбец из нулей и ниже него строку из нулей. Romer9999 Паскаль, Turbo Pascal, PascalABC.NET 3 28.11.2008 11:28