2011-11-13 1 views
0

J'écris ce programme traitant des polynômes. J'ai des problèmes avec la dernière partie de ma mission. J'ai besoin de trier les polynômes par degrés, puis de réduire le polynôme s'il y a un double degré dans le polynôme. Le code que j'ai écrit ci-dessous a un défaut de segmentation pour les deux fonctions. Dans mon void reduce(poly &p1) mon erreur se produit au zc= zc->next. Existe-t-il une manière différente d'aborder ces fonctions? en plus im en utilisant des listes de liens pour mes polynômesliste de liens insertion trier et réduire les polynômes C++

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 ; 
} 
+2

Je suis heureux que vous ayez dit que c'était devoirs à la question, mais vous devez également utiliser le 'devoirs [ ] 'tag. –

Répondre

0

Vous pouvez utiliser std::list ou std::vector ou une autre STL container