0

4 عمل اصلي چند جمله اي ها

 
rezahashemian1374
rezahashemian1374
کاربر برنزی
تاریخ عضویت : مهر 1391 
تعداد پست ها : 254
محل سکونت : تهران

4 عمل اصلي چند جمله اي ها

#include<conio.h>
  #include<iostream.h>
  #define Max 20
  
class Poly;
  class 
PolyNode
  
{
     
friend Poly;
     
float Coef;
     
int Pow;
  };
  class 
Poly
  
{
    
int n;
    
PolyNode Data[Max];
   public:
    
void Poly::SortPoly(void);
      
void ReadPoly(void);
        
void WritePoly(void);
        
void AddPoly(Poly a,Poly b);
        
void SubtractPoly(Poly a,Poly b);
        
void MulPoly(Poly a,Poly b);
        
void Poly::ItemPoly(float Coef,int Pow,Poly b);
        
void Poly::TaghsimPoly(int k,Poly a,Poly b);
  };
  
void Poly::SortPoly(void)
  {
   
int i,j;
   
PolyNode item;
   for(
i=n-1;i>0;i--)
    for(
j=0;j<i;j++)
     if(
Data[j].Pow<Data[j+1].Pow)
     {
      
item=Data[j];
      
Data[j]=Data[j+1];
              
Data[j+1]=item;
     }
   while(
i<n-1)
   if(
Data[i].Pow==Data[i+1].Pow)
   {
    
Data[i].Coef+=Data[i+1].Coef;
    for(
j=i+1;j<n-1;j++)Data[j]=Data[j+1];
    
n--;
   }else 
i++;
  }
  
void Poly::ReadPoly(void)
  {
   
int i;
   
cout<<"\nPlease enter parts of poly : ";
   
cin>>n;
   
cout<<"\nPlease enter Polynomial : \n\n";
     for(
i=0;i<n;i++)
     {  
    
cin>>Data[i].Coef;
    
cout<<" x^"<<endl;
    
cin>>Data[i].Pow;
    
cout<<" +"<<endl;
     }
  }
  
void Poly::WritePoly(void)
  {
   
int i;
     
cout<<"\n";
   for(
i=0;i<n;i++)cout<<Data[i].Coef<<"X^"<<Data[i].Pow<<" + ";
  }
  
void Poly::AddPoly(Poly a,Poly b)
  {
   
int i,j,k;
     
i=j=k=0;
     while(
i<a.n&&j<b.n)
     {
      if(
a.Data[i].Pow>b.Data[j].Pow)
        {
         
Data[k].Coef=a.Data[i].Coef;
           
Data[k++].Pow=a.Data[i++].Pow;
        }
         else if(
a.Data[i].Pow<b.Data[j].Pow)
           {
            
Data[k].Coef=b.Data[j].Coef;
            
Data[k++].Pow=b.Data[j++].Pow;
           }
            else if(
a.Data[i].Coef+b.Data[j].Coef)
          {
           
Data[k].Coef=a.Data[i].Coef+b.Data[j].Coef;
             
Data[k++].Pow=a.Data[i++].Pow;
                 
j++;
          }
               else
                 {
                  
i++;
                    
j++;
                 }
     }
     while(
i<a.n)
     {
      
Data[k].Coef=a.Data[i].Coef;
        
Data[k++].Pow=a.Data[i++].Pow;
     }
     while(
j<b.n)
     {
      
Data[k].Coef=b.Data[j].Coef;
        
Data[k++].Pow=b.Data[j++].Pow;
     }
     
n=k;
  }
  
void Poly::SubtractPoly(Poly a,Poly b)
  {
   
int i,j,k;
     
i=j=k=0;
     while(
i<a.n&&j<b.n)
     {
      if(
a.Data[i].Pow>b.Data[j].Pow)
        {
         
Data[k].Coef=a.Data[i].Coef;
           
Data[k++].Pow=a.Data[i++].Pow;
        }
         else if(
a.Data[i].Pow<b.Data[j].Pow)
           {
            
Data[k].Coef=b.Data[j].Coef;
            
Data[k++].Pow=b.Data[j++].Pow;
           }
            else if(
a.Data[i].Coef-b.Data[j].Coef)
          {
           
Data[k].Coef=a.Data[i].Coef-b.Data[j].Coef;
             
Data[k++].Pow=a.Data[i++].Pow;
                 
j++;
          }
               else
                 {
                  
i++;
                    
j++;
                 }
     }
     while(
i<a.n)
     {
      
Data[k].Coef=a.Data[i].Coef;
        
Data[k++].Pow=a.Data[i++].Pow;
     }
     while(
j<b.n)
     {
      
Data[k].Coef=b.Data[j].Coef;
        
Data[k++].Pow=b.Data[j++].Pow;
     }
     
n=k;
  }
  
void Poly::MulPoly(Poly a,Poly b)
  {
   
int i,j,k;
     
i=j=k=0;
   while(
i<a.n)
     {
      
j=0;
      while(
j<b.n)
        {
         
Data[k].Coef=a.Data[i].Coef*b.Data[j].Coef;
           
Data[k++].Pow=a.Data[i].Pow+b.Data[j++].Pow;
        }
      
i++;
     }
     
n=k;
  }
  
void Poly::ItemPoly(float Coef,int Pow,Poly b)
  {
   
int j,t;
     
j=t=0;
     while(
j<b.n)
     {
        
Data[t].Coef=Coef*b.Data[j].Coef;
        
Data[t++].Pow=Pow+b.Data[j++].Pow;
     }
     
n=t;
  }
  
void Poly::TaghsimPoly(int k,Poly a,Poly b)
  {
   
Poly d,e;
   
p:
   if(
a.Data[0].Pow>=b.Data[0].Pow)
     {
    
Data[k].Pow=a.Data[0].Pow-b.Data[0].Pow;
        
Data[k].Coef=a.Data[0].Coef/b.Data[0].Coef;
        
d.ItemPoly(Data[k].Coef,Data[k].Pow,b);
    
e.SubtractPoly(a,d);
    
k++;
     }
   
n=k;
   if(
e.Data[0].Pow>=b.Data[0].Pow)TaghsimPoly(k,e,b);
    else
    {
     
cout<<"\nMod Is : \n";
     
e.WritePoly();
    }
  }
  
void main(void)
  {
   
Poly a,b,c;
   
char Sign;
   
a.ReadPoly();
   
a.SortPoly();
   
cout<<"\nPlease enter sign(+,-,*,/) : ";
   
cin>>Sign;
   
b.ReadPoly();
   
b.SortPoly();
   switch(
Sign)
   {
    case
'+':
     
c.AddPoly(a,b);
     break;
    case
'-':
     
c.SubtractPoly(a,b);
     break;
    case
'*':
     
c.MulPoly(a,b);
     
c.SortPoly();
     break;
    case
'/':
     
c.TaghsimPoly(0,a,b);
     break;
   }
   
cout<<"\n\nAnswer Is : \n";
   
c.WritePoly();
   
getche(); 

}

Seyyed.Reza.Hashemian@Gmail.Com

دوستانی که سوالی دارند یا مایل به تماس هستند می توانند از اطلاعات بالا استفاده نمایند.

اگر هم تایپکی زدید و احتیاج به پاسخگویی سریع داشتید اطلاع دهید

پنج شنبه 18 مهر 1392  9:13 AM
تشکرات از این پست
دسترسی سریع به انجمن ها