PDA

View Full Version : سوال: چهار عمل اصلی برای چندجمله ایها



#Elahe#
سه شنبه 07 اردیبهشت 1389, 00:56 صبح
میخام یه برامه بنویسم که دو تا چند جمله ای رو بتونه جمع و تفریق و ضرب کنه .
از کلاسها هم استفاده شده باشه .
ولی نمیدونم از کلاسها چجوری باید استفاده کنم . یعنی باید واسه این برنامه باید تا چه حد مسلط باشم واسه کلاسها !

Salar Ashgi
سه شنبه 07 اردیبهشت 1389, 20:31 عصر
از لحاظ پیاده سازی شی گرایی ، ممکنه نحوه طراحی کلاس چند جمله ای متفاوت باشه ولی معمولا

کلاسی که طراحی می کنند اعضای داده (Data member ) های خصوصی کلاس (Private ) رو یک

int بعنوان term یا تعداد جملات چند جمله ای و یک آرایه دو بعدی term در 2 برای ذخیره چند جمله ای .

یه مثال ساده :



#include <iostream>
#include <conio>
class Polynomial{
public:
Polynomial(int);
void Get();
Polynomial Multiply(Polynomial);
void Print();
private:
int term;
int **a;};
//====================================
Polynomial::Polynomial(int tr){
term = tr;
a = new int*[term];
for(int i=0;i<term;i++)
a[i] = new int[2];}
//================================
void Polynomial::Get(){
for(int i=0;i<term;i++){
for(int j=0;j<2;j++){
cin>>a[i][j];}
}
}
//=================================
void Polynomial::Print(){
for(int i=0;i<term;i++){
cout<<a[i][0]<<"X^"<<a[i][1]<<"+";
}
cout<<endl;}
//=================================
int main(){
Polynomial p1(3);
p1.Get();
p1.Print();
getch();}
این فقط یه مثال برای ایده گرفتن هستش ! شما هر طوری که خواستین میتونید کلاس رو طراحی کنید .

mortezamsp
پنج شنبه 09 اردیبهشت 1389, 03:00 صبح
اینم بد نیست
http://cplusplus.blogsky.com/1387/12/24/post-20/

#Elahe#
شنبه 11 اردیبهشت 1389, 23:18 عصر
باز هم این تایپیک رو بالا میارم

ممنون از لطف دوستان

giootin_tiz
چهارشنبه 22 اردیبهشت 1389, 21:08 عصر
hdklاینم 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();

vcn540
شنبه 22 خرداد 1389, 19:12 عصر
hdklاینم 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();

tank u veryyyyyyyyyyyyyyyyyy muchhhhhhhh:قلب::قلب::قلب::قلب::بوس :