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

Сумма полиномов(односвязных списков)

08.12.2020, 13:01. Показов 1007. Ответов 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
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
 
 
 
struct Polinom {//структура данных
    int Coeff; //информационное поле
    int Degree; // информационное поле
    Polinom* Next; //адресное поле
};
 
 
 
 
//создание однонаправленного списка (добавления в конец)
void Make_Polinom(int n, Polinom** Head) {
    if (n >= 0) {
        (*Head) = new Polinom();
        //выделяем память под новый элемент
        cout << "Введите значение ";
        cin >> (*Head)->Coeff;
        (*Head)->Degree = n;
        
 
        //вводим значение информационного поля
        (*Head)->Next = NULL;//обнуление адресного поля
        
        Make_Polinom(n - 1, &((*Head)->Next));
    }
}
 
int GetSize(Polinom* Head)
{
    int size = 0;
    for (; Head != NULL; Head = Head->Next)
        ++size;
 
    return size;
}
 
//печать однонаправленного списка
void Print_Polinom(Polinom* Head) {
    
    if (Head != NULL  ) {
        if (Head->Next != NULL)
            cout << Head->Coeff << "x^" << Head->Degree << "+";
 
        if (Head->Next == NULL)
        {
            if (Head->Degree != 0)
                cout << Head->Coeff << "x^" << Head->Degree;
 
            else
                cout << Head->Coeff;
 
        }
    Print_Polinom(Head->Next);//переход к следующему элементу
        
    }
    else cout << "\n";
}
 
void Check_0(Polinom*& Head)
{
    while (Head && Head->Coeff == 0)
    {
        Polinom* p = Head;
        Head = Head->Next;
        delete p;
    }
    
    for (Polinom* ptr = Head; ptr->Next != NULL; )
        if (ptr->Next->Coeff != 0)
            ptr = ptr->Next;
        else
        {
            Polinom* p = ptr->Next;
            ptr->Next = p->Next;
            delete p;
        }
 
}
 
 
void Eq_Pol(Polinom*& Head1, Polinom*& Head2)
{
    bool check = true;
 
    while (Head1  && check)
    {
        if (Head1->Degree == Head2->Degree)
        {
            
 
            if (Head1->Coeff != Head2->Coeff)
                check = false;
 
            Head1 = Head1->Next;
            Head2 = Head2->Next;
        }
        else
            check = false;
    }
    
 
    if (check)
        cout << "Полиномы равны"<<endl;
    else
        cout << "Полиномы не равны" << endl;
}
 
 
int Value_withX(Polinom*& Head)
{
    int x;
    int val_pol = 0;
    cout << "Введите x= "; cin >>  x;
    
    while (Head)
    {
        val_pol += Head->Coeff * pow(x,Head->Degree);
        Head = Head->Next;
    }
    return val_pol;
}
 
void Derivative_k(Polinom*& Head)
{
    int k;
    
    cout << "Введите k= "; cin >> k;
 
    while (k>0)
    {
        Polinom* ptr = Head;
        while (ptr)
        {
            ptr->Coeff *= ptr->Degree;
            ptr->Degree -= 1;
            ptr = ptr->Next;
        }
        k--;
    }
 
    Check_0(Head);
}
 
Polinom* Sum_pol(Polinom*& Head1, Polinom*& Head2)
{
    Polinom* sum_pol;
    
    if (Head1->Degree >= Head2->Degree)
    {
        Polinom* ptr = Head1;
        while (ptr != NULL)
        {
            
            sum_pol = new Polinom();
            //выделяем память под новый элемент
 
            sum_pol->Coeff = Head1->Coeff;
            sum_pol->Degree = Head1->Degree;
 
 
 
            sum_pol->Next = NULL;//обнуление адресного поля
            sum_pol->Next;
            ptr->Next;
 
        }
 
        
    }
    return sum_pol;
}
 
 
 
 
int main()
{   
    int n1, n2;
 
    
 
    setlocale(LC_ALL, "ru");
 
    Polinom* pol1;
    Polinom* pol2;
 
 
    cout << "Введите степень полинома n= "; cin >> n1;
    Make_Polinom(n1, &pol1);
 
    cout << "Введите степень полинома n= "; cin >> n2;
    Make_Polinom(n2, &pol2);
 
    Check_0(pol1);
    Check_0(pol2);
    
 
    system("cls");
 
    Print_Polinom(pol1);
    Print_Polinom(pol2);
 
    //Eq_Pol(pol1,pol2);
    
    //cout << Value_withX(pol1);
 
    //Derivative_k(pol1);
    //Print_Polinom(pol1);
 
    Print_Polinom(Sum_pol(pol1,pol2));
 
 
    return 0;
}
Есть функция: Sum_pol, мне нужно чтобы она возвращала новый односвязный список, который я создаю, в чем ошибка?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2020, 13:01
Ответы с готовыми решениями:

Равенство двух полиномов(односвязных списков)
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; struct Polinom {//структура...

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

Сортировка линейных(односвязных) списков
Всем доброго времени суток. Уже на протяжении нескольких дней бьюсь с сортировкой линейных списков....

Обработка односвязных линейных списков студентов
Используя технологию структурного программирования разработать программу обработки односвязных...

11
1475 / 932 / 282
Регистрация: 25.01.2019
Сообщений: 2,357
08.12.2020, 13:27 2
Цитата Сообщение от timamas Посмотреть сообщение
в чем ошибка?

C++
1
2
3
            sum_pol->Next = NULL;//обнуление адресного поля
            sum_pol->Next; /* вот тут */
            ptr->Next; /*и тут ты что пытаешься сделать?*/
0
0 / 0 / 0
Регистрация: 02.10.2019
Сообщений: 87
08.12.2020, 14:15  [ТС] 3
Ну крч, я не знаю как, но я могу сказать, что мне нужно, так вот, я пытаюсь, переписать один список в другой, который создает эта функция. При чем я хочу переписать список со старшей степенью, чтобы потом, в этом списке, при одинаковых степенях, которые у меня поля в узле, к другому полю, который коэффициент, прибавить коэфф второго списка и чтобы функция вернула, созданный мною, новый список

Добавлено через 43 минуты
вот что я сделал, где тут ошибка? Новый список обнуляется

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
void Sum_pol(Polinom*& Head1, Polinom*& Head2) // функция
{
    Polinom* sum_pol; // новый список
    
    if (Head1->Degree >= Head2->Degree) // поиск старшей степени
    {
        Polinom* ptr = Head1; // вспомогательный список
        while (ptr != NULL) // пока не конец списка со старшей степенью
        {
            
            sum_pol = new Polinom(); //выделяем память под новый элемент
 
            
            sum_pol->Coeff = ptr->Coeff; // коээфф нового списка
            sum_pol->Degree = ptr->Degree; // степень нового списка
 
 
 
            
            
            ptr = ptr->Next; // следующей узел
            sum_pol = sum_pol->Next; // следующей узел
 
        }
 
        
    }
    
    
}
0
1475 / 932 / 282
Регистрация: 25.01.2019
Сообщений: 2,357
08.12.2020, 15:27 4
Цитата Сообщение от timamas Посмотреть сообщение
Новый список обнуляется
*входящий список "обнуляется": указатели по ссылке передаёшь и память потекла.

Цитата Сообщение от timamas Посмотреть сообщение
где тут ошибка?
void Sum_pol почему void вдруг стал?

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

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
Polinom* Sum_pol(Polinom* tmp) //по ссылке НЕ передаём, нужна копия, а то входящий захворает
{
    Polinom* ptr;
    Polinom* sum_pol = nullptr;
    
    while(tmp != nullptr)
    {
        if(sum_pol != nullptr)
        {
            ptr->Next = new Polinom;
            ptr = ptr->Next;
        } else {
            ptr = new Polinom;
            sum_pol = ptr; //вот тут назначаем голову и больше её не трогаем
        }
        
        ptr->Coeff = tmp->Coeff;
        ptr->Degree = tmp->Degree;
        ptr->Next = nullptr;
        
        tmp = tmp->Next;
    }
 
    return sum_pol; //возврат головы
}
1
0 / 0 / 0
Регистрация: 02.10.2019
Сообщений: 87
08.12.2020, 16:48  [ТС] 5
Спасибо большое

Добавлено через 14 минут
Пишет, что используется потенциально неинициализированная переменная ptr

Добавлено через 5 секунд
Пишет, что используется потенциально неинициализированная переменная ptr

Добавлено через 22 минуты
Вот, что то опять не так, хотя по логике должно быть верно


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
Polinom* Sum_pol(Polinom* tmp1, Polinom* tmp2) //по ссылке НЕ передаём, нужна копия, а то входящий захворает
{
    Polinom* ptr = nullptr;
    Polinom* sum_pol = nullptr;
 
    if (tmp1->Degree >= tmp2->Degree)
    {
        while (tmp1 != nullptr)
        {
            if (sum_pol != nullptr)
            {
                ptr->Next = new Polinom;
                ptr = ptr->Next;
            }
            else {
                ptr = new Polinom;
                sum_pol = ptr; //вот тут назначаем голову и больше её не трогаем
            }
 
            ptr->Coeff = tmp1->Coeff;
            ptr->Degree = tmp1->Degree;
            ptr->Next = nullptr;
 
            tmp1 = tmp1->Next;
        }
 
 
        while (sum_pol != nullptr)
            if(sum_pol->Degree == tmp2->Degree)
            {
                sum_pol->Coeff = sum_pol->Coeff + tmp2->Coeff;
                sum_pol = sum_pol->Next;
                tmp2 = tmp2->Next;
            }
            else
                sum_pol = sum_pol->Next;
                
        
    }
    else 
    {
        while (tmp2 != nullptr)
        {
            if (sum_pol != nullptr)
            {
                ptr->Next = new Polinom;
                ptr = ptr->Next;
            }
            else {
                ptr = new Polinom;
                sum_pol = ptr; //вот тут назначаем голову и больше её не трогаем
            }
 
            ptr->Coeff = tmp2->Coeff;
            ptr->Degree = tmp2->Degree;
            ptr->Next = nullptr;
 
            tmp2 = tmp2->Next;
        }
 
        while (sum_pol != nullptr)
            if (sum_pol->Degree == tmp1->Degree)
            {
                sum_pol->Coeff = sum_pol->Coeff + tmp1->Coeff;
                sum_pol = sum_pol->Next;
                tmp1 = tmp1->Next;
            }
            else
                sum_pol = sum_pol->Next;
    }
 
 
    
    return sum_pol; //возврат головы
}
0
1475 / 932 / 282
Регистрация: 25.01.2019
Сообщений: 2,357
08.12.2020, 17:50 6
Цитата Сообщение от timamas Посмотреть сообщение
Вот, что то опять не так, хотя по логике должно быть верно
Цитата Сообщение от timamas Посмотреть сообщение
C++
1
sum_pol = sum_pol->Next;
Опять 5*5. Не трогай тут то что возвращаешь. Один раз назначил голову и всё; у тебя однонаправленный список без обёртки, изменил/потерял первый элемент - потерял информацию и память.

Нужно по элементам пройтись - используй временное, сверху через Polinom* ptr работает, он отработал - больше не нужен - используй ещё раз, чтоб новую переменную не создавать:

C++
1
2
3
4
5
6
7
8
9
10
11
ptr = sum_pol; // чики-брики
/* И далее все sum_pol на ptr меняй */
while (sum_pol != nullptr)
            if(sum_pol->Degree == tmp2->Degree)
            {
                sum_pol->Coeff = sum_pol->Coeff + tmp2->Coeff;
                sum_pol = sum_pol->Next;
                tmp2 = tmp2->Next;
            }
            else
                sum_pol = sum_pol->Next;
1
0 / 0 / 0
Регистрация: 02.10.2019
Сообщений: 87
08.12.2020, 18:46  [ТС] 7
Ааааааа, сейчас попробую

Добавлено через 35 минут
Где то я опять путаюсь с указателем

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
Polinom* Sum_pol(Polinom* tmp1, Polinom* tmp2) //по ссылке НЕ передаём, нужна копия, а то входящий захворает
{
    Polinom* ptr = nullptr;
    Polinom* sum_pol = nullptr;
    
 
    if (tmp1->Degree >= tmp2->Degree)
    {
        while (tmp1 != nullptr)
        {
            if (sum_pol != nullptr)
            {
                ptr->Next = new Polinom;
                ptr = ptr->Next;
            }
            else {
                ptr = new Polinom;
                sum_pol = ptr; //вот тут назначаем голову и больше её не трогаем
            }
 
            ptr->Coeff = tmp1->Coeff;
            ptr->Degree = tmp1->Degree;
            ptr->Next = nullptr;
 
            tmp1 = tmp1->Next;
        }
 
        ptr = sum_pol;
        while (ptr != nullptr)
            if(ptr->Degree == tmp2->Degree)
            {
                ptr->Coeff = ptr->Coeff + tmp2->Coeff;
                sum_pol = ptr;
                ptr = ptr->Next;
                tmp2 = tmp2->Next;
            }
            else
                ptr = ptr->Next;
                
        
    }
    else 
    {
        
        while (tmp2 != nullptr)
        {
            if (sum_pol != nullptr)
            {
                ptr->Next = new Polinom;
                ptr = ptr->Next;
            }
            else {
                ptr = new Polinom;
                sum_pol = ptr; //вот тут назначаем голову и больше её не трогаем
            }
 
            ptr->Coeff = tmp2->Coeff;
            ptr->Degree = tmp2->Degree;
            ptr->Next = nullptr;
 
            tmp2 = tmp2->Next;
        }
 
        ptr = sum_pol;
        while (ptr != nullptr)
            if (ptr->Degree == tmp1->Degree)
            {
                ptr->Coeff = ptr->Coeff + tmp1->Coeff;
                sum_pol = ptr;
                ptr = ptr->Next;
                tmp1 = tmp1->Next;
            }
            else
                ptr = ptr->Next;
    }
 
 
    cout << "Сумма двух полиномов:"<< endl;
    return sum_pol; //возврат головы
}
Добавлено через 4 минуты
Все, я почти разобрался

Это весь код:

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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
 
 
 
struct Polinom {//структура данных
    int Coeff; //информационное поле
    int Degree; // информационное поле
    Polinom* Next; //адресное поле
};
 
 
 
 
//создание однонаправленного списка (добавления в конец)
void Make_Polinom(int n, Polinom** Head) {
    if (n >= 0) {
        (*Head) = new Polinom();
        //выделяем память под новый элемент
        cout << "Введите значение ";
        cin >> (*Head)->Coeff;
        (*Head)->Degree = n;
        
 
        //вводим значение информационного поля
        (*Head)->Next = NULL;//обнуление адресного поля
        
        Make_Polinom(n - 1, &((*Head)->Next));
    }
    
}
 
 
 
//печать однонаправленного списка
void Print_Polinom(Polinom* Head) {
    
    if (Head != NULL  ) {
        if (Head->Next != NULL)
            cout << Head->Coeff << "x^" << Head->Degree << "+";
 
        if (Head->Next == NULL)
        {
            if (Head->Degree != 0)
                cout << Head->Coeff << "x^" << Head->Degree;
 
            else
                cout << Head->Coeff;
 
        }
    Print_Polinom(Head->Next);//переход к следующему элементу
        
    }
    else cout << "\n";
}
 
Polinom* Check_0(Polinom* Head)
{
    while (Head && Head->Coeff == 0)
    {
        Polinom* p = Head;
        Head = Head->Next;
        delete p;
    }
    
    for (Polinom* ptr = Head; ptr->Next != NULL;)
        if (ptr->Next->Coeff != 0)
            ptr = ptr->Next;
        else
        {
            Polinom* p = ptr->Next;
            ptr->Next = p->Next;
            delete p;
        }
    return Head;
 
}
 
 
void Eq_Pol(Polinom* Head1, Polinom* Head2)
{
    bool check = true;
 
    while (Head1  && check)
    {
        if (Head1->Degree == Head2->Degree)
        {
            
 
            if (Head1->Coeff != Head2->Coeff)
                check = false;
 
            Head1 = Head1->Next;
            Head2 = Head2->Next;
        }
        else
            check = false;
    }
    
 
    if (check)
        cout << "Полиномы равны"<<endl;
    else
        cout << "Полиномы не равны" << endl;
}
 
 
int Value_withX(Polinom* Head)
{
    int x;
    int val_pol = 0;
    cout << "Введите x= "; cin >>  x;
    
    while (Head)
    {
        val_pol += Head->Coeff * pow(x,Head->Degree);
        Head = Head->Next;
    }
    cout << "Значение полинома при x=" << x << " Равно:" << val_pol<< endl;
    return val_pol;
}
 
Polinom* Derivative_k(Polinom* Head)
{
    int k;
    
    cout << "Введите k= "; cin >> k;
    cout << "Произвдная первого полинома степени k=" << k << endl;
 
    while (k>0)
    {
        Polinom* ptr = Head;
        while (ptr)
        {
            ptr->Coeff *= ptr->Degree;
            ptr->Degree -= 1;
            ptr = ptr->Next;
        }
        k--;
    }
 
    
    Check_0(Head);
    return Head;
}
 
Polinom* Sum_pol(Polinom* tmp1, Polinom* tmp2) //по ссылке НЕ передаём, нужна копия, а то входящий захворает
{
    Polinom* ptr = nullptr;
    Polinom* sum_pol = nullptr;
    
 
    if (tmp1->Degree >= tmp2->Degree)
    {
        while (tmp1 != nullptr)
        {
            if (sum_pol != nullptr)
            {
                ptr->Next = new Polinom;
                ptr = ptr->Next;
            }
            else {
                ptr = new Polinom;
                sum_pol = ptr; //вот тут назначаем голову и больше её не трогаем
            }
 
            ptr->Coeff = tmp1->Coeff;
            ptr->Degree = tmp1->Degree;
            ptr->Next = nullptr;
 
            tmp1 = tmp1->Next;
        }
 
        ptr = sum_pol;
        while (ptr != nullptr)
            if(ptr->Degree == tmp2->Degree)
            {
                ptr->Coeff = ptr->Coeff + tmp2->Coeff;
                ptr = ptr->Next;
                tmp2 = tmp2->Next;
            }
            else
                ptr = ptr->Next;
                
        
    }
    else 
    {
        
        while (tmp2 != nullptr)
        {
            if (sum_pol != nullptr)
            {
                ptr->Next = new Polinom;
                ptr = ptr->Next;
            }
            else {
                ptr = new Polinom;
                sum_pol = ptr; //вот тут назначаем голову и больше её не трогаем
            }
 
            ptr->Coeff = tmp2->Coeff;
            ptr->Degree = tmp2->Degree;
            ptr->Next = nullptr;
 
            tmp2 = tmp2->Next;
        }
 
        ptr = sum_pol;
        while (ptr != nullptr)
            if (ptr->Degree == tmp1->Degree)
            {
                ptr->Coeff = ptr->Coeff + tmp1->Coeff;
                ptr = ptr->Next;
                tmp1 = tmp1->Next;
            }
            else
                ptr = ptr->Next;
    }
 
 
    cout << "Сумма двух полиномов:"<< endl;
    return sum_pol; //возврат головы
}
 
 
 
 
int main()
{   
    int n1, n2;
 
    
 
    setlocale(LC_ALL, "ru");
 
    Polinom* pol1;
    Polinom* pol2;
 
 
    cout << "Введите степень полинома n= "; cin >> n1;
    Make_Polinom(n1, &pol1);
 
    cout << "Введите степень полинома n= "; cin >> n2;
    Make_Polinom(n2, &pol2);
 
    Check_0(pol1);
    Check_0(pol2);
    
 
    system("cls");
 
    cout << "Первый полином"<<endl; Print_Polinom(pol1);
    
    cout << "Второй полином" << endl; Print_Polinom(pol2);
 
    Eq_Pol(pol1,pol2);
    
    Value_withX(pol1);
    
    
    
    Print_Polinom(Derivative_k(pol1));
 
    Print_Polinom(Sum_pol(pol1, pol2));
    
 
 
    return 0;
}
Тут конфликтует После этого Print_Polinom(Derivative_k(pol 1)) (265 строчка), не хочет работать это Print_Polinom(Sum_pol(pol1, pol2))(267 строчка);

Почему?

Добавлено через 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
Polinom* Derivative_k(Polinom* Head)
{
    int k;
    
    cout << "Введите k= "; cin >> k;
    cout << "Произвдная первого полинома степени k=" << k << endl;
 
    while (k>0)
    {
        Polinom* ptr = Head;
        while (ptr)
        {
            ptr->Coeff *= ptr->Degree;
            ptr->Degree -= 1;
            ptr = ptr->Next;
        }
        k--;
    }
 
    
    Check_0(Head);
    return Head;
}

Сделать так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Polinom* Derivative_k(Polinom* Head)
{
    int k;
    Polinom* ptr = Head;
    cout << "Введите k= "; cin >> k;
    cout << "Произвдная первого полинома степени k=" << k << endl;
 
    while (k>0)
    {
        
        while (ptr)
        {
            ptr->Coeff *= ptr->Degree;
            ptr->Degree -= 1;
            ptr = ptr->Next;
        }
        k--;
    }
 
    
    Check_0(ptr);
    return ptr;
}
То мы доходим до Check_0, которая выдает ошибку, скорее всего опять какой то трабл в указателях, но до того как переписать Check_0 без ошибок я не допер
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
08.12.2020, 18:51 8
Цитата Сообщение от timamas Посмотреть сообщение
То мы доходим до Check_0, которая выдает ошибку, скорее всего опять какой то трабл в указателях, но до того как переписать Check_0 без ошибок я не допер
Ты бы сделал общие функции, типа "добавить в конец списка", а потом использовал их в других алгоритмах. Вместо того чтоб всё в одну кучу
0
0 / 0 / 0
Регистрация: 02.10.2019
Сообщений: 87
08.12.2020, 18:52  [ТС] 9
Ну, уже немного поздно, так не подскажешь в чем дело в чек 0? Там какой то мем с указателями, но я не догоняю какой
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
08.12.2020, 18:54 10
Цитата Сообщение от timamas Посмотреть сообщение
Ну, уже немного поздно, так не подскажешь в чем дело в чек 0? Там какой то мем с указателями, но я не догоняю какой
Поздно? Да ладно. Думаешь догонять нерабочий код будет раньше?
0
0 / 0 / 0
Регистрация: 02.10.2019
Сообщений: 87
08.12.2020, 18:58  [ТС] 11
Ну он же не не рабочий(

Я просто немного запутался в указателях
0
0 / 0 / 0
Регистрация: 02.10.2019
Сообщений: 87
08.12.2020, 19:03  [ТС] 12
Вот при отключении степени сумма работает
Миниатюры
Сумма полиномов(односвязных списков)   Сумма полиномов(односвязных списков)  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2020, 19:03
Помогаю со студенческими работами здесь

Объединение (конкатенация) двух односвязных списков
Задача: Построить стек (односвязный список). Показать реализацию стека на следующем примере:...

Чем отличается сортировка односвязных списков от сортировки двусвязных?
Чем отличается сортировка односвязных списков от двусвязных списков? Если можете то на примере...

Сортировка списков (Умножение полиномов)
Задача: Имеются 2 полинома (А и В). Они задаются, как массив коэффициентов при иксах. Нужно...

Класс полином. Сумма полиномов
В чем моя ошибка, не работает код? Не очень понятно с конструкторами, правильно или нет? class...

Массивы односвязных списков.
Разработать прграмму работы с массивом односвязных списков. Программа должна содержать следующие...

Массив односвязных списков.
Разработать программу работы с массивом односвязных списков. Программа должна содержать следующие...


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

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

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