POLYNOMIAL ADDITION & SUBTRACTIO IN C .
#include<stdio.h>
#include<stdlib.h>
struct NODE{
int co;
int ex;
struct NODE *pnext;
};
struct NODE *poly1=NULL,*poly2=NULL,*poly=NULL,*polys=NULL;
void create(struct NODE *node)
{
int ch,i;
printf("Enter the highest exponent :\n");
scanf("%d",&ch);
for(i=ch;i>=0;i--)
{
printf("\nEnter the coefficient & exponent :");
scanf("%d%d",&node->co,&node->ex);
node->pnext=(struct NODE*)malloc(sizeof(struct NODE));
node=node->pnext;
node->pnext=NULL;
}
return ;
}
void polysub(struct NODE *poly1,struct NODE *poly2,struct NODE *polys)
{
while(poly1->pnext && poly2->pnext)
{
if(poly1->ex>poly2->ex)
{
polys->ex=poly1->ex;
polys->co=poly1->co;
poly1=poly1->pnext;
}
else if(poly1->ex<poly2->ex)
{
polys->ex=poly2->ex;
polys->co=((poly2->co)*-1);
poly2=poly2->pnext;
}
else
{
polys->ex=poly1->ex;
polys->co=poly1->co-poly2->co;
poly1=poly1->pnext;
poly2=poly2->pnext;
}
polys->pnext=(struct NODE *)malloc(sizeof(struct NODE));
polys=polys->pnext;
polys->pnext=NULL;
}
while(poly1->pnext || poly2->pnext)
{
if(poly1->pnext)
{
polys->ex=poly1->ex;
polys->co=poly1->co;
poly1=poly1->pnext;
}
if(poly2->pnext)
{
polys->ex=poly2->ex;
polys->co=((poly2->co)*-1);
poly2=poly2->pnext;
}
polys->pnext=(struct NODE *)malloc(sizeof(struct NODE));
polys=polys->pnext;
polys->pnext=NULL;
}
}
void show(struct NODE *node)
{
struct NODE *pt=node;
if(pt==NULL)
printf("Expression not found \n");
else
{
while(node->pnext!=NULL)
{
printf("%dx^%d",node->co,node->ex);
node=node->pnext;
if(node->pnext!=NULL)
printf("+");
}
return ;}
}
void polyadd(struct NODE *poly1,struct NODE *poly2,struct NODE *poly)
{
while(poly1->pnext && poly2->pnext)
{
if(poly1->ex>poly2->ex)
{
poly->ex=poly1->ex;
poly->co=poly1->co;
poly1=poly1->pnext;
}
else if(poly1->ex<poly2->ex)
{
poly->ex=poly2->ex;
poly->co=poly2->co;
poly2=poly2->pnext;
}
else
{
poly->ex=poly1->ex;
poly->co=poly1->co+poly2->co;
poly1=poly1->pnext;
poly2=poly2->pnext;
}
poly->pnext=(struct NODE *)malloc(sizeof(struct NODE));
poly=poly->pnext;
poly->pnext=NULL;
}
while(poly1->pnext || poly2->pnext)
{
if(poly1->pnext)
{
poly->ex=poly1->ex;
poly->co=poly1->co;
poly1=poly1->pnext;
}
if(poly2->pnext)
{
poly->ex=poly2->ex;
poly->co=poly2->co;
poly2=poly2->pnext;
}
poly->pnext=(struct NODE *)malloc(sizeof(struct NODE));
poly=poly->pnext;
poly->pnext=NULL;
}
}
int main()
{
poly1=(struct NODE *)malloc(sizeof(struct NODE));
poly2=(struct NODE *)malloc(sizeof(struct NODE));
poly=(struct NODE *)malloc(sizeof(struct NODE));//FOR ADD
polys=(struct NODE *)malloc(sizeof(struct NODE));//FOR SUBSTRCT
if((poly1==NULL)||(poly2==NULL)||(polys==NULL)||(poly==NULL))
{
printf("No memory \n");
return 0;
}
printf("\nEnter first expression:");
create(poly1);
printf("\nEnter second expression:");
create(poly2);
printf("\n1st Expression:");
show(poly1);
printf("\n2nd Expression:");
show(poly2);
polyadd(poly1,poly2,poly);
printf("\nAdded polynomial:");
show(poly);
polysub(poly1,poly2,polys);
printf("\nSubstracted polynomial:");
show(polys);
return 0;
}
Comments
Post a Comment