0 / 0 / 0
Регистрация: 08.05.2021
Сообщений: 4
1

Ошибка при подстановке в список на нулевую позицию

08.05.2021, 09:45. Показов 1140. Ответов 7
Метки c++ (Все метки)

В чем состоит задача- есть список. Он заполнен данными и ограничен по размерам ( в этом примере числа). Также есть массив целочисленных значений. Новый элемент списка получается по формуле новый элемент= элемент списка на нулевой позиции +сумма (iый элемент массива*iый элемент списка). Затем новый элемент ставится на нулевую позицию а список сдвигается на 1 (крайний элемент удаляется). Также считается следующий и т.д.

Все методы (push_front push_back pop_front pop_back) реализованы. Однако при подстановке на нулевую позицию он почему то дублирует значение и не хочет пересчитывать сумму с учетом нового элемента (при получении второго значения).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sum = 0;
    List<int> lst;
 
    lst.push_back(15);
    lst.push_back(45);
    lst.push_back(65);
    lst.push_back(42);
    //lst.pop_front();
 
 
    for (i = 0; i <lst.GetSize(); i++)
    {
        cout << lst[i]<<"  This element has the index   " << i <<endl;
    }
    cout << "//////"<<"\n";
   
    for (int i = 0; i < lst.GetSize(); i++)
    {
        sum += lst[i] * a[i];
    }
    cout << sum << "\n";
    lst[1] = lst[0] + sum;
Вот в чем и загвоздка- нужно грамотно реализовать момент с записью/удалением при этом не потеряв сумму. Но сколько я пытался- ничего хорошего не получается (сбоит в основном сумма).
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2021, 09:45
Ответы с готовыми решениями:

Выпадающий список - изначальное значение в ячейке при подстановке в неё списка
Прошу помощи, в приведенном ниже примере если ячейка B8 =&quot;да&quot;, то в ячейку B9 подставляется список...

Ошибка при подстановке переменной
Код должен копировать данные с одного документа и вставлять их в другой для расчета. Строка 1...

Ошибка при подстановке данных в запрос
Добрый вечер.. перейду сразу к телу. Есть кусок кода на обновление записи в базе function...

Ошибка в имени таблицы при подстановке в запрос переменной
&lt;?php $link = mysql_connect('sql-4.radyx.ru', 'connections611','sdap3b6ii1') or...

7
129 / 81 / 49
Регистрация: 10.01.2020
Сообщений: 293
08.05.2021, 10:08 2
Hooty,
Цитата Сообщение от Hooty Посмотреть сообщение
Все методы (push_front push_back pop_front pop_back) реализованы.
А где реализация этих методов? И сама реализация списка.
0
0 / 0 / 0
Регистрация: 08.05.2021
Сообщений: 4
08.05.2021, 10:24  [ТС] 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
template <typename T>
class List {
public:
    List();
    ~List();
 
    void pop_front();  //удаление элементов в начале
    void push_back(T data); // добавление элементов с конца
    int GetSize() { return Size; }; //получение размера
    void clear(); //очистка списка
    void push_front(T data); //добавление элементов в начало
    void pop_back(); //удаление элементов в конце
    void removeAt(int index); //удаление элемента по индексу
    T& operator[](const int index);
 
private:
 
    template<typename T>
    class Node
    {
    public:
        Node* Pnext;
        T data;
        Node(T data = T(), Node* Pnext = nullptr) {
 
            this->data = data;
            this->Pnext = Pnext;
        }
    };
 
    int Size;
    Node<T>* head;
};
template <typename T>
List<T>::List() {
 
    Size = 0;
    head = nullptr;
};
template <typename T>
List<T>::~List() {
 
    clear();
};
template<typename T>
void List<T>::pop_front()
{
    Node<T>* temp = head;
    head = head->Pnext;
    delete temp;
    Size--;
}
template <typename T>
void List<T>::push_back(T data)
{
    if (head == nullptr)
    {
        head = new Node<T>(data);
    }
    else {
        Node<T>* current = this->head;
        while (current->Pnext != nullptr)
        {
            current = current->Pnext;
 
        }
        current->Pnext = new Node<T>(data);
 
    }
    Size++;
}
template<typename T>
void List<T>::clear()
{
    while (Size)
    {
        pop_front();
 
    }
}
template<typename T>
void List<T>::push_front(T data)
{
    head = new Node<T>(data, head);
    Size++;
 
}
template<typename T>
void List<T>::pop_back()
{
    removeAt(Size - 1);
 
}
template<typename T>
void List<T>::removeAt(int index)
{
    if (index == 0) {
 
        pop_front();
 
    }
    else
    {
        Node<T>* previous = this->head;
        for (int y = 0; y < index - 1; y++)
        {
            previous = previous->Pnext;
        }
        Node<T>* todelete = previous->Pnext;
        previous->Pnext = todelete->Pnext;
 
        delete todelete;
        Size--;
    }
}
 
template<typename T>
T& List<T>::operator[](const int index)
{
    int counter = 0;
    Node<T>* current = this->head;
    while (current != nullptr)
    {
        if (counter == index) {
 
            return current->data;
        }
        current = current->Pnext;
        counter++;
    }
}
Добавлено через 7 минут
Привел ниже.
0
129 / 81 / 49
Регистрация: 10.01.2020
Сообщений: 293
08.05.2021, 10:38 4
Hooty, пока что вроде все правильно работает. Что бросается в глаза, так в методе pop_front нет проверки на head = nullptr и нет проверки на индекс в removeAt и operator[].
Может приведете код в main, в котором у вас конкретно возникает ошибка?
0
0 / 0 / 0
Регистрация: 08.05.2021
Сообщений: 4
08.05.2021, 10:44  [ТС] 5
main я привел выше Если нужно визуально то вот
Вот это я пробовал со вторым значением
Что касается методов- думаете ошибка в них?
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
  sum = 0;
    List<int> lst;
 
    lst.push_back(15);
    lst.push_back(45);
    lst.push_back(65);
    lst.push_back(42);
    //lst.pop_front();
 
 
    for (i = 0; i <lst.GetSize(); i++)
    {
        cout << lst[i]<<"  This element has the index   " << i <<endl;
    }
    cout << "//////"<<"\n";
   
    for (int i = 0; i < lst.GetSize(); i++)
    {
        sum += lst[i] * a[i];
    }
    cout << sum << "\n";
    lst[1] = lst[0] + sum;
    lst[2] = lst[0] + sum;
    lst.pop_front();
    lst.push_back(lst[1]);
    lst.pop_front();
    lst.push_back(lst[2]);
    for (i = 0; i < lst.GetSize(); i++)
    {
        cout << lst[i] << "  This element has the index   " << i << endl;
    }
 
    return 0;
}
Миниатюры
Ошибка при подстановке в список на нулевую позицию  
0
129 / 81 / 49
Регистрация: 10.01.2020
Сообщений: 293
08.05.2021, 10:52 6
Hooty, кроме того, что я указал выше, в реализации списка проблем вроде как нету. Про весь main спрашиваю, потому что трудно угадать что такое "a" во втором цикле. Я удалил часть с "а": sum += lst[i]; и все работает как и должно.
0
16082 / 8684 / 2120
Регистрация: 30.01.2014
Сообщений: 14,967
08.05.2021, 11:06 7
Лучший ответ Сообщение было отмечено Hooty как решение

Решение

Цитата Сообщение от Hooty Посмотреть сообщение
Новый элемент списка получается по формуле новый элемент= элемент списка на нулевой позиции +сумма (iый элемент массива*iый элемент списка). Затем новый элемент ставится на нулевую позицию а список сдвигается на 1 (крайний элемент удаляется).
Так?
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
int main()
{
    using namespace std;
 
    List<int> lst;
 
    int a[4] = {1,2,3,4};
    
    lst.push_back(15);
    lst.push_back(45);
    lst.push_back(65);
    lst.push_back(42);
 
    for (int i = 0; i < lst.GetSize(); i++)
    {
        cout << lst[i] <<"  This element has the index   " << i <<endl;
    }
    cout << "//////"<<"\n";
   
    // Новый элемент списка получается по формуле новый элемент=элемент списка на нулевой позиции+сумма(iый элемент массива*iый элемент списка)
    int sum = lst[0];
    for (int i = 0; i < lst.GetSize(); i++)
    {
        sum += lst[i] * a[i];
    }
    // Затем новый элемент ставится на нулевую позицию а список сдвигается на 1 (крайний элемент удаляется).
    lst.push_front(sum); 
    lst.pop_back();
    
    // lst[0] = 15 + 15 * 1 + 45 * 2 + 65 * 3 + 42 * 4 = 483
    for (int i = 0; i < lst.GetSize(); i++)
    {
        cout << lst[i] << "  This element has the index   " << i << endl;
    }
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 08.05.2021
Сообщений: 4
08.05.2021, 14:36  [ТС] 8
a-целочисленный массив. Ваш вариант тоже подходит (я использовал массив из двоек)
Премного благодарен
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2021, 14:36
Помогаю со студенческими работами здесь

Ошибка при подстановке параметра в sql запрос (python3.6 + sqlite3)
При подстановке параметра в запрос появляется ошибка Traceback (most recent call last): File...

Функция добавления элемента в нулевую позицию массива
1. Создать динамический массив на 10 элементов заполненный случайными числами. Написать функции:...

При подстановке в один столбец, автоподстановка в другой.
введение: есть табличка &quot;Запись на прием к врачу&quot; В ней мастером подстановки берутся врачи,...

Точность вычислений дробей при подстановке в функцию if
Нужно сделать простое задание по лабе: &quot;Определить в одномерном числовом массиве A, из n элементов...

Хочу, чтобы отображался du при подстановке в интеграл, чему он будет равен
Собственно хочу чтобы отображался du при подстановке, чему он будет равен. Есть такая возможность?

Не работает код отрисовки изображения при подстановке значения через переменную
Здравствуйте. Подскажите кто знает, почему код (привожу только начало кода) $side =...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru