Above program takes input of coefficient and power separately of 2 different polynomials add them up to a new polynomial.It is successfully compiled and executed in DEV CPP as C file.It Turbo C compiler add void before main function to avoid warning messages.

sanket41 commented: Nice Logic appiled Behind This Snippet +0
33,184 Views
``````#include<stdio.h>
#include<malloc.h>
#include<conio.h>
int coeff;
int pow;
};
{
char ch;
do
{
printf("\n enter coeff:");
scanf("%d",&node->coeff);
printf("\n enter power:");
scanf("%d",&node->pow);
node=node->next;
node->next=NULL;
printf("\n continue(y/n):");
ch=getch();
}
while(ch=='y' || ch=='Y');
}
{
while(node->next!=NULL)
{
printf("%dx^%d",node->coeff,node->pow);
node=node->next;
if(node->next!=NULL)
printf("+");
}
}
{
while(poly1->next &&  poly2->next)
{
if(poly1->pow>poly2->pow)
{
poly->pow=poly1->pow;
poly->coeff=poly1->coeff;
poly1=poly1->next;
}
else if(poly1->pow<poly2->pow)
{
poly->pow=poly2->pow;
poly->coeff=poly2->coeff;
poly2=poly2->next;
}
else
{
poly->pow=poly1->pow;
poly->coeff=poly1->coeff+poly2->coeff;
poly1=poly1->next;
poly2=poly2->next;
}
poly=poly->next;
poly->next=NULL;
}
while(poly1->next || poly2->next)
{
if(poly1->next)
{
poly->pow=poly1->pow;
poly->coeff=poly1->coeff;
poly1=poly1->next;
}
if(poly2->next)
{
poly->pow=poly2->pow;
poly->coeff=poly2->coeff;
poly2=poly2->next;
}
poly=poly->next;
poly->next=NULL;
}
}
main()
{
char ch;
do{
printf("\nenter 1st number:");
create(poly1);
printf("\nenter 2nd number:");
create(poly2);
printf("\n1st Number:");
show(poly1);
printf("\n2nd Number:");
show(poly2);
show(poly);
ch=getch();
}
while(ch=='y' || ch=='Y');
}``````

Hello,
this program will run successfully no doubt,but USER should enter the polynomials in ascending order only. This Program will not give Proper answer for DESCENDING order or any order that user might enter.........

Hi,
This program is not working when we enter the polynomials in an unsorted order...

``````#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int coef;
int pow;
struct node *next;
}poly;
{
int ch;
system("clear");
printf("\n\t1)Create 1'st Polynomial ");
printf("\n\t2)Create 2'nd Polynomial ");
printf("\n\t3)Display");
scanf("%d",&ch);
return ch;
}
{
poly *t1,*temp;
int i,flag=1,scan;
t1=(poly *)malloc(sizeof(poly));
temp=(poly *)malloc(sizeof(poly));
for(scan=1;flag==1;scan++)
{
flag=0;
{
if(temp->pow<temp->next->pow)
{
t1->coef=temp->coef;
t1->pow=temp->pow;

temp->coef=temp->next->coef;
temp->pow=temp->next->pow;

temp->next->coef=t1->coef;
temp->next->pow=t1->pow;

flag=1;
}
temp=temp->next;
}
}
}
{
int coef,pow;
printf("\n\tEnter number of terms: ");
int i;
poly *newnode;
{
newnode=(poly *)malloc(sizeof(poly));
system("clear");
printf("\n\tEnter %d term: ",i+1);
scanf("%d",&coef);
printf("\n\tEnter power of %d term: ",i+1);
scanf("%d",&pow);
newnode->coef=coef;
newnode->pow=pow;
while(curr->next)
curr=curr->next;
curr->next=newnode;
curr=newnode;
}
curr->next=NULL;
}
{
printf("\n\tEmpty\n");
else
{
while(temp)
{
if(temp->next==NULL)
{
if(temp->pow==0)
{
printf("%d",temp->coef);
return;
}
if(temp->pow==1)
{
printf("%dx",temp->coef);
return;
}
else
{
printf("%dx^%d",temp->coef,temp->pow);
return;
}
}
else
if(temp->pow==1)
printf("%dx+",temp->coef);
else
if(temp->pow==0)
printf("%d+",temp->coef);
else
printf("%dx^%d+",temp->coef,temp->pow);
temp=temp->next;
}
}
}
{
printf("\n\tEmpty\n");
else
{
while(temp)
{
if(temp->next==NULL)
{
if(temp->pow==0)
{
printf("%d",temp->coef);
return;
}
if(temp->pow==1)
{
printf("%dx",temp->coef);
return;
}
else
{
printf("%dx^%d",temp->coef,temp->pow);
return;
}
}
else
if(temp->pow==1)
printf("%dx+",temp->coef);
else
if(temp->pow==0)
printf("%d+",temp->coef);
else
printf("%dx^%d+",temp->coef,temp->pow);
temp=temp->next;
}
}
}
{
poly *curr1,*curr2,*curr3;
poly *newnode;
while(curr1||curr2)
{
newnode=(poly *)malloc(sizeof(poly));
newnode->next=NULL;
if(curr1->pow>curr2->pow)
{
newnode->coef=curr1->coef;
newnode->pow=curr1->pow;
curr1=curr1->next;
}
else
if(curr1->pow<curr2->pow)
{
newnode->coef=curr2->coef;
newnode->pow=curr2->pow;
curr2=curr2->next;
}
else
{
newnode->coef=curr1->coef+curr2->coef;
newnode->pow=curr2->pow;
curr1=curr1->next;
curr2=curr2->next;
}
if(curr1==NULL&&curr2!=NULL)
{
newnode->coef=curr2->coef;
newnode->pow=curr2->pow;
curr2=curr2->next;
}
if(curr2==NULL&&curr1!=NULL)
{
newnode->coef=curr1->coef;
newnode->pow=curr1->pow;
curr1=curr1->next;
}
curr3->next=newnode;
curr3=newnode;
curr3->next=NULL;
}
}
main()
{
int ch;
{
if(ch==1)
else
if(ch==2)
else
if(ch==3)
{
printf("\n\t1'st Polynomial\t\t");
printf("\n");
printf("\n\t2'nd Polynomial\t\t");
getchar();getchar();
}
else
if(ch==4)
{
printf("\n\tResult\t\t");
getchar();getchar();
}
}
}
``````

this works for un-sorted data..

More Optimized Solution which covers all the cases:

``````#include<stdio.h>
#include<stdlib.h>

struct node
{
int coef,expo;
struct node* next;
};

struct node* insertpoly(struct node* thead,int c,int e);
struct node* append(struct node* thead,int c,int e);

void main()
{
int a,b,n,i;

// Inputing the first polynomial..

printf("Enter the no of terms of polynomial 1..");
scanf("%d",&n);
printf("\nEnter the polynomial..");
for(i=0;i<n;i++){
printf("\nEnter the coefficient and exponent of the term..");
scanf("%d%d",&a,&b);
}

// Inputing the second polynomial..

printf("\nEnter the no of terms of polynomial 2..");
scanf("%d",&n);
printf("\nEnter the polynomial..");
for(i=0;i<n;i++){
printf("\nEnter the coefficient and exponent of the term..");
scanf("%d%d",&a,&b);
}

//Displaying the polynomial..

printf("\nThe polynomial 1 is..");
printf("\nThe polynomial 2 is..");
printf("\nThe sum of the two polynomials is..");
}

struct node* append(struct node* thead,int c,int e)
{
struct node* newnode = (struct node*)malloc(sizeof(struct node));
newnode->coef=c;
newnode->expo=e;
if(thead==NULL){// Corner Case to handle if the list is empty...
newnode->next=NULL;
return newnode;
}
while(trav->next!=NULL) // Traversing to point to the last node...
trav=trav->next;
trav->next=newnode;
newnode->next=NULL;
}

struct node* insertpoly(struct node* thead,int c,int e)
{
struct node* newnode=(struct node*)malloc(sizeof(struct node));
newnode->coef=c;
newnode->expo=e;
if(thead==NULL){            // for inserting the first node..
newnode->next=NULL;
return newnode;
}
struct node* prev,* curr;
while(curr!=NULL && curr->expo>e){
prev=curr;
curr=curr->next;
}
if(curr==thead){            // for inserting before the first node...
newnode->next=curr;
return newnode;
}
else if(curr==NULL){        //for inserting after the last node....
prev->next=newnode;
newnode->next=NULL;
}
else{
newnode->next=curr;
prev->next=newnode;
}
}

{
struct node* ans=NULL;
struct node* t1,* t2;
while(t1!=NULL && t2!=NULL){
if(t1->expo > t2->expo){
ans=append(ans,t1->coef,t1->expo);
t1=t1->next;
}
else if(t1->expo < t2->expo){
ans=append(ans,t2->coef,t2->expo);
t2=t2->next;
}
else{
ans=append(ans,(t1->coef)+(t2->coef),t1->expo);
t1=t1->next;
t2=t2->next;
}
}

while(t1!=NULL){            //coping the remaining terms of polynomial 1...
ans=append(ans,t1->coef,t1->expo);
t1=t1->next;
}

while(t2!=NULL){            //coping the remaining terms of polynomial 2...
ans=append(ans,t2->coef,t2->expo);
t2=t2->next;
}
return ans;
}

{
if(temp==NULL){
printf("\nEmpty..");
}
else{
while(temp->next!=NULL){
printf(" %dx^%d +",temp->coef,temp->expo);
temp=temp->next;
}
printf(" %dx^%d ",temp->coef,temp->expo);
}
}``````

`

``````#include<stdio.h>
#include<stdlib.h>

typedef struct node {
int coeff,expo;
struct node *next;
}N;

N *input();
N *getnode();

N *getnode() {
N *new;
new=(N*)malloc(sizeof(N));
new->next=NULL;
}
N *rptr=getnode(),*r1ptr=rptr,*aptr=NULL;
int s;
while(ptr!=NULL&&qtr!=NULL) {
if(ptr->expo==qtr->expo) {
s=ptr->coeff+qtr->coeff;
if(s!=0) {
aptr=getnode();
aptr->coeff=s;
aptr->expo=ptr->expo;
r1ptr->next=aptr;
r1ptr=aptr;
}
ptr=ptr->next;
qtr=qtr->next;
}

else if(ptr->expo>qtr->expo) {
aptr=getnode();
aptr->coeff=ptr->coeff;
aptr->expo=ptr->expo;
ptr=ptr->next;
r1ptr->next=aptr;
r1ptr=aptr;
}
else {
aptr=getnode();
aptr->coeff=qtr->coeff;
aptr->expo=qtr->expo;
qtr=qtr->next;
r1ptr->next=aptr;
r1ptr=aptr;

}
}
while(ptr!=NULL) {
aptr=getnode();
aptr->coeff=ptr->coeff;
aptr->expo=ptr->expo;
ptr=ptr->next;
r1ptr->next=aptr;
r1ptr=aptr;

}
while(qtr!=NULL) {
aptr=getnode();
aptr->coeff=qtr->coeff;
aptr->expo=qtr->expo;
qtr=qtr->next;
r1ptr->next=aptr;
r1ptr=aptr;
}
return (rptr->next);
}
N *input()
{
N *new,*qtr,*ptr;
int i,n;
new=(N *)malloc(sizeof(N));
new->next=NULL;
qtr=new;
printf("Enter number of nodes");
scanf("%d",&n);
for(i=0;i<n;i++)
{
ptr=(N*)malloc(sizeof(N));
printf("Enter Coeff & Expo respectively");
scanf("%d%d",&ptr->coeff,&ptr->expo);
ptr->next=NULL;
qtr->next=ptr;
qtr=qtr->next;
}
return(new->next);
}
int main()
{
ptr=input();
qtr=input();
}

}``````

`

does this program based on doubly linked list ???

``````  //THIS CODE WORKS FOR UNSORTED DATA.DATA IS SORTED FOR A GIVEN POLYNOMIAL EXPRESSION..
#include<stdio.h>
#include<stdlib.h>
int coeff;
int pow;
};
{
int n,i;
printf("enter number of terms\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\n enter coeff:");
scanf("%d",&node->coeff);
printf("\n enter power:");
scanf("%d",&node->pow);
node=node->next;
node->next=NULL;
}
}
{
while(node->next!=NULL)
{
printf("%dx^%d",node->coeff,node->pow);
node=node->next;
if node->next!=NULL)
printf("+");
}
}
{
while(poly1->next &&  poly2->next)
{
if(poly1->pow>poly2->pow)
{
poly->pow=poly1->pow;
poly->coeff=poly1->coeff;
poly1=poly1->next;
}
else if(poly1->pow<poly2->pow)
{
poly->pow=poly2->pow;
poly->coeff=poly2->coeff;
poly2=poly2->next;
}
else
{
poly->pow=poly1->pow;
poly->coeff=poly1->coeff+poly2->coeff;
poly1=poly1->next;
poly2=poly2->next;
}
poly=poly->next;
poly->next=NULL;
}
while(poly1->next || poly2->next)
{
if(poly1->next)
{
poly->pow=poly1->pow;
poly->coeff=poly1->coeff;
poly1=poly1->next;
}
if(poly2->next)
{
poly->pow=poly2->pow;
poly->coeff=poly2->coeff;
poly2=poly2->next;
}
poly=poly->next;
poly->next=NULL;
}
}
{
int t;
for(i=node;i->next!=NULL;i=i->next)
{
for(j=i->next;j!=NULL;j=j->next)
{
if(i->pow<=j->pow)
{
t=i->pow;
i->pow=j->pow;
j->pow=t;
t=i->coeff;
i->coeff=j->coeff;
j->coeff=t;
}
}
}
}
main()
{
printf("\nenter 1st number:");
create(poly1);
sort(poly1);
printf("\nenter 2nd number:");
create(poly2);
sort(poly2);
printf("\n1st Number:");
show(poly1);
printf("\n2nd Number:");
show(poly2);