Я пишу эту программу, имеющую дело с полиномами.У меня проблемы с последней частью моего задания.Мне нужно отсортировать многочлены по степеням, а затем иметь возможность уменьшить многочлен, если в многочлене есть двойная степень.Код, который я написал ниже, имеет ошибку сегментации для обеих функций.В моем void reduce(poly &p1)
моя ошибка возникает в zc= zc->next
.Есть ли другой способ приблизиться к выполнению этих функций?плюс я использую списки ссылок для моих полиномов
class Poly{
private :
struct term{
double coef ;
unsigned exp ;
term *next ;
} *term_t ;
public :
Poly( ) ;
void insert ( float c, int e ) ;
void isort( Poly &p1);
void reduce (Poly &p1);
~Poly( ) ;
} ;
void Poly :: isort ( Poly & p1){
term *z;
term * zc;
term *c;
if ( term_t == NULL && p1.term_t == NULL )
return ;
while (p1.term_t != NULL){
c=p1.term_t;
p1.term_t = p1.term_t->next;
while (p1.term_t!=NULL && c->exp > zc->exp){
z->coef = c->coef;
z->exp=c->exp;
c=c->next;
}
z.printPoly();
zc->exp = z->exp;
z=z->next;
//c=c->next;
}
}
void Poly :: reduce (Poly & p1){
term *z ;
if ( term_t == NULL && p1.term_t == NULL )
return ;
term *temp1;
temp1 = p1.term_t ;
while ( temp1 != NULL ){
if ( term_t == NULL ){
term_t = new term ;
z = term_t ;
}
else{
z -> next = new term ;
z = z -> next ;
}
if (temp1 -> exp == z->exp)
temp1->coef= temp1-> coef + z->coef;
z->coef = temp1 -> coef;
z->exp = temp1->exp;
temp1=temp1->next;
}
while ( temp1 != NULL ){
if ( term_t == NULL ){
term_t = new term ;
z = term_t ;
}
else{
z -> next = new term ;
z = z -> next ;
}
z -> coef = temp1 -> coef ;
z -> exp = temp1 -> exp ;
temp1 = temp1 -> next ;
}
z -> next = NULL ;
}