Click here to Skip to main content
15,884,425 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Want to write C++ program to add , subtract and assign two polynomials.

Polynomials may have any number of terms.

I have got for addition and subtraction but getting difficulties while assigning one polynomial to another.

program to add and subtract

#include<conio.h>   	
#include<ostream.h> 
#include<process.h>  
//   Creating a NODE Structure
struct node
{
   int coe,exp;        // data
   struct node *next;  // link to next node and previous node
};
 
// Creating a class Polynomial
class polynomial
{
   struct node *start,*ptrn,*ptrp;
   public:
     void get_poly(); // to get a polynomial
     void show();     // show
     void add(polynomial p1,polynomial p2); // Add two polynomials
     void subtract(polynomial p1,polynomial p2); //Subtract2 polynomials
};
 
void polynomial::get_poly()      //  Get Polynomial
{
   char c='y';
   ptrn=ptrp=start=NULL;
   while(c=='y' || c=='Y')
   {
      ptrn=new node;
      ptrp->next=ptrn;
      if(start==NULL)
	start=ptrn;
      ptrp=ptrn;
      cout<<"\nEnter the coefficient: ";
      cin>>ptrn->coe;
      cout<<"Enter the exponent: ";
      cin>>ptrn->exp;
      ptrn->next=NULL;
      cout<<"Enter y to add more nodes: ";
      cin>>c;
   }
   return;
}
 
 
void polynomial::show()  // Show Polynomial
{
    struct node *ptr;
    ptr=start;
    while(ptr!=NULL)
    {
       cout<<ptr->coe<<"X^"<<ptr->exp<<" + ";
       ptr=ptr->next;
    }
    cout<<"\b\b ";
}
 
void polynomial::add(polynomial p1,polynomial p2)  // Add Polynomials
{
   struct node *p1ptr,*p2ptr;
   int coe,exp;
   ptrn=ptrp=start=NULL;
   p1ptr=p1.start;
   p2ptr=p2.start;
   while(p1ptr!=NULL && p2ptr!=NULL)
   {
      if(p1ptr->exp==p2ptr->exp) // If coefficients are equal
      {
	 coe=p1ptr->coe+p2ptr->coe;
	 exp=p1ptr->exp;
	 p1ptr=p1ptr->next;
	 p2ptr=p2ptr->next;
      }
      else if(p1ptr->exp>p2ptr->exp)
      {
	 coe=p1ptr->coe;
	 exp=p1ptr->exp;
	 p1ptr=p1ptr->next;
      }
      else if(p1ptr->exp<p2ptr->exp)
      {
	 coe=p2ptr->coe;
	 exp=p2ptr->exp;
	 p2ptr=p2ptr->next;
      }
      ptrn=new node;
      if(start==NULL)
	 start=ptrn;
      ptrn->coe=coe;
      ptrn->exp=exp;
      ptrn->next=NULL;
      ptrp->next=ptrn;
      ptrp=ptrn;
   } // End of While
   if(p1ptr==NULL)
   {
      while(p2ptr!=NULL)
      {
	 coe=p2ptr->coe;
	 exp=p2ptr->exp;
	 p2ptr=p2ptr->next;
	 ptrn=new node;
	 if(start==NULL)
	    start=ptrn;
	 ptrn->coe=coe;
	 ptrn->exp=exp;
	 ptrn->next=NULL;
	 ptrp->next=ptrn;
	 ptrp=ptrn;
      }
   }
   else if(p2ptr==NULL)
   {
      while(p1ptr!=NULL)
      {
	 coe=p1ptr->coe;
	 exp=p1ptr->exp;
	 p1ptr=p1ptr->next;
	 ptrn=new node;
	 if(start==NULL)
	    start=ptrn;
	 ptrn->coe=coe;
	 ptrn->exp=exp;
	 ptrn->next=NULL;
	 ptrp->next=ptrn;
	 ptrp=ptrn;
      }
   }
}  // End of addition
 
//  Subtract two polynomials
void polynomial::subtract(polynomial p1,polynomial p2)  // Subtract
{
   struct node *p1ptr,*p2ptr;
   int coe,exp;
   ptrn=ptrp=start=NULL;
   p1ptr=p1.start;
   p2ptr=p2.start;
   while(p1ptr!=NULL && p2ptr!=NULL)
   {
      if(p1ptr->exp==p2ptr->exp) // If coefficients are equal
      {
	 coe=p1ptr->coe-p2ptr->coe;
	 exp=p1ptr->exp;
	 p1ptr=p1ptr->next;
	 p2ptr=p2ptr->next;
      }
      else if(p1ptr->exp>p2ptr->exp)
      {
	 coe=p1ptr->coe;
	 exp=p1ptr->exp;
	 p1ptr=p1ptr->next;
      }
      else if(p1ptr->exp<p2ptr->exp)
      {
	 coe=0-p2ptr->coe;
	 exp=p2ptr->exp;
	 p2ptr=p2ptr->next;
      }
      ptrn=new node;
      if(start==NULL)
	 start=ptrn;
      ptrn->coe=coe;
      ptrn->exp=exp;
      ptrn->next=NULL;
      ptrp->next=ptrn;
      ptrp=ptrn;
   } // End of While
   if(p1ptr==NULL)
   {
      while(p2ptr!=NULL)
      {
	 coe=0-p2ptr->coe;
	 exp=p2ptr->exp;
	 p2ptr=p2ptr->next;
	 ptrn=new node;
	 if(start==NULL)
	    start=ptrn;
	 ptrn->coe=coe;
	 ptrn->exp=exp;
	 ptrn->next=NULL;
	 ptrp->next=ptrn;
	 ptrp=ptrn;
      }
   }
   else if(p2ptr==NULL)
   {
      while(p1ptr!=NULL)
      {
	 coe=p1ptr->coe;
	 exp=p1ptr->exp;
	 p1ptr=p1ptr->next;
	 ptrn=new node;
	 if(start==NULL)
	    start=ptrn;
	 ptrn->coe=coe;
	 ptrn->exp=exp;
	 ptrn->next=NULL;
	 ptrp->next=ptrn;
	 ptrp=ptrn;
      }
   }
}  // End of subtraction
 
 
int main()
{
   clrscr();
   polynomial p1,p2,sum,diff;
   cout<<"First Polynomial.\n";
   p1.get_poly();
   cout<<"\nSecond polynomial.\n";
   p2.get_poly();
   clrscr();
   cout<<"\nThe First polynomial is: ";
   p1.show();
   cout<<"\nThe second polynomial is: ";
   p2.show();
   cout<<"\n\nThe sum of two polynomials is: ";
   sum.add(p1,p2);
   sum.show();
   cout<<"\n\nThe difference of two polynomials is: ";
   diff.subtract(p1,p2);
   diff.show();
   getch();
   return 0;
}
Posted

I think there is a Problem in this line ptrp->next=ptrn; in get_poly() function.you assigned ptrp to NULL and you are accessing ptrp->next.
 
Share this answer
 
C++
void polynomial::get_poly()      //  Get Polynomial
{
   char c='y';
   ptrn=ptrp=start=NULL;
   while(c=='y' || c=='Y')
   {
      ptrn=new node;
      ptrp=ptrn;
      if(start==NULL)
	start=ptrn;
      cout<<"\nEnter the coefficient: ";
      cin>>ptrn->coe;
      cout<<"Enter the exponent: ";
      cin>>ptrn->exp;
      ptrn=ptrn->next;
      cout<<"Enter y to add more nodes: ";
      cin>>c;
   }
   return;
}


Wild guess, it has been ages since I last made linked lists.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900