You are not logged in. Please login at www.codechef.com to post your questions!

×

C - multiplication of polynomials and adding coeff of same exp

Language - C Compiler - Netbeans, MSYS

Statement - I take two poly from user, ask user for its choice of multiplication. Multiplication takes as expected, with same results as on normal paper. But in Multiplication function, I am calling finalise func:- so to add coeff of same exponent which were generated after multiplication.

first - holds add of first poly sec - holds add of second poly

the notation I am using is x^2 = x square. i.e x2 Poly 1: (5x^3+2x^2+3x^1) Poly 2: (4x^3+5x^2+6x^1) multiplication result = 20x^6+25x^5+30x^4+8x^5+10x^4+12x^3+12x^4+15x^3+18x^2 - As expected, I print this on console. Stored in *new

In finalise - I try to add coeff of same exp.. and expecting asnwer as 20x^6 33x^5 52x^4 27x^3 18x^2 (ignored + sign )

however, I get result as:

20x^6 33x^5 52x^4 4985160x^4985088 10x^4 27x^3 4985018x^4984768 15x^3 18x^2

My modus operandi - in multiplication result. I am deleting that comp(f) which matches with loop's variable after addition to loop's (temp) variable.

temp points to *new. And f is next node of temp. What I have tried is: 20x^6+25x^5+30x^4+8x^5+10x^4+12x^3+12x^4+15x^3+18x^2 when temp points to 30x^4.. and adds 10x^4.. I delete that 10x^4, and check if my f pointer points to next as expected 12x^3 node or node. Also, I am checking which node it is deleting by verifying coeff & exponent. I am unable to figure out where, the bug is. There is prob while I free the node and link f to next. But that again looks ok to me when I print the same in console. I am new to C programming and also, don't know how to debug program in Netbeans.

Any help shall be appreciated. Thanks much in advance. / * /

include <stdio.h>

include <stdlib.h>

struct node { int coeff; int exp; struct node link; }first=NULL,sec=NULL,tot=NULL,*new=NULL ;

void appendF(){ struct node *temp; temp=first; int cof,expo; printf("nenter coeff for first polyn"); scanf("%d",&cof); printf("nenter expo for first polyn"); scanf("%d",&expo);

if(temp==NULL){
    temp=(struct node*)malloc(sizeof(struct node));
    temp->coeff=cof;
    temp->exp=expo;
    temp->link=NULL;
    first=temp;
    return;
}
else{
    temp=first;
    while(temp->link!=NULL){
        temp=temp->link;
    }
    temp=temp->link=(struct node*)malloc(sizeof(struct node));
    temp->coeff=cof;
    temp->exp=expo;
    temp->link=NULL;
}
return;

};

void appendS(){ struct node *temp; temp=sec; int cof,expo; printf("nenter coeff for second polyn"); scanf("%d",&cof); printf("nenter expo for second polyn"); scanf("%d",&expo);

if(temp==NULL){
    temp=(struct node*)malloc(sizeof(struct node));
    temp->coeff=cof;
    temp->exp=expo;
    temp->link=NULL;
    sec=temp;
    return;
}
else{
    temp=sec;
    while(temp->link!=NULL){
        temp=temp->link;
    }
    temp=temp->link=(struct node*)malloc(sizeof(struct node));
    temp->coeff=cof;
    temp->exp=expo;
    temp->link=NULL;
}
return;

}; void disp(){ struct node *temp; temp=first; while(temp!=NULL){ printf(" %dx^%d :",temp->coeff,temp->exp); temp=temp->link; } return; };

mult(){ struct node pF, qS, temp,third; pF=first; qS=sec; while(pF!=NULL){ qS=sec; while(qS!=NULL){

        third=(struct node*)malloc(sizeof(struct node));
        third->link=NULL;
        third->coeff=(pF->coeff)*(qS->coeff);
        third->exp=pF->exp+qS->exp;
        if(new==NULL){
            new=third;                
        }
        else{
            temp=new;
            while(temp->link!=NULL){
                temp=temp->link;
            }
            temp->link=third;
        }
        qS=qS->link;
    }
    pF=pF->link;
}
finalise(&new);

};

finalise(struct node h){ struct node temp,p,f; int flag=0; temp=h; printf("nn"); while(temp!=NULL){ printf(" %dx^%d ",temp->coeff,temp->exp); temp=temp->link; } temp=*h; while(temp->link!=NULL){

    f=temp->link;
    while(f->link!=NULL){
        flag=0;
        if(temp->exp==f->exp){
        flag=1;
        temp->coeff=temp->coeff+f->coeff;
        p=f;
        f=f->link;
        printf("\nNext comp is %dx^%d",f->coeff,f->exp);
        printf("\nThe free is %dx^%d",p->coeff,p->exp);
        free(p);
    }   
    if(flag==0){
    f=f->link;}
    }
        temp=temp->link;
}
printf("\nAgain\n");

temp=*h;
printf("\n\n");
while(temp!=NULL){
    printf(" %dx^%d ",temp->coeff,temp->exp);
    temp=temp->link;
}
return;

};

void disV(struct node q){ struct node temp; temp=q; while(temp!=NULL){ printf(" %dx^%d +",temp->coeff,temp->exp); temp=temp->link; } return; }; int main() {

int c;

do{
    printf("\n1 append First 2-Display 3-Append-Second 4 exit 5-Add 6-Display via address\n");
    printf("\n7-Add by my method 8-Multi\n");
    scanf("%d",&c);
    switch(c){
        case 1:
            appendF();
            break;
        case 2:
            disp();
            break;
        case 3:
            appendS();
            break;
        case 4:
            printf("\nProgram ends\n");
            break;
        case 5:
            add();
            break;
        case 6:
            disV(&new);
            break;
        case 7:
            addD();
            break;
        case 8:
            mult();
            break;
        default:
            printf("\nWrong choice\n");
    }
}while(c!=4);

return 0;

}

asked 14 Mar '13, 00:34

newbie8's gravatar image

0★newbie8
1111
accept rate: 0%

Can someone please help?

(18 Mar '13, 22:35) newbie80★
toggle preview
Preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported
  • mathemetical formulas in Latex between $ symbol

Question tags:

×1,490
×846
×26

question asked: 14 Mar '13, 00:34

question was seen: 4,837 times

last updated: 18 Mar '13, 22:35