⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 poly.cpp

📁 FZU 大二 的数据结构与算法 老师出的题目的优秀作业 第2到第5章
💻 CPP
字号:
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
class note
{
	public:
		double a;
		int b;
};
class fc
{

private:int n;
		note *sd;
	double x;		
	public:	
		fc()
		{ 
			n=0;
		    sd=0; 
		}
			
        void input();
		void output();
		fc&operator = (fc&x);
		fc operator + (fc&x);
		fc operator - (fc&x);
		fc operator *(fc&x);
		fc&dev();
		fc&indev();
		double operator ()(double x);
};
void fc::input()
{
	int x;in>>x;
	n=x;
	if(sd!=0)
		delete[] sd;
	sd=new note[n];
	
	for(int i=0;i<n;i++)
	{
		in>>sd[i].a;in>>sd[i].b;
	}
	
}
void fc::output()
{
	if(n==1)
	{
		if(sd[0].a==0)
			out<<0;
		else 
			if(sd[0].b==1) 
		{
			if(sd[0].a==1.0) out<<"x";
			else out<<sd[0].a<<"x";
		}
		else 
		{
			if(sd[0].a==1.0) out<<"x^"<<sd[0].b;
			else out<<sd[0].a<<"x^"<<sd[0].b;
		}
	}
	else
	{
		if(sd[0].a==0)
			out<<"";
		else
			 if(sd[0].a==1.0)
				out<<"x^"<<sd[0].b;
			else out<<sd[0].a<<"x^"<<sd[0].b; 
			for( int i=1;i<n;i++)
			{
				if(sd[i].a==0)
					out<<"";
				else
				if(sd[i].a>0) 
				{
					if(sd[i].b>0) 
				{
					if(sd[i].b==1) 
					{
						if(sd[i].a==1.0) out<<"+"<<"x";
						else
						    out<<"+"<<sd[i].a<<"x";
					}
					else if(sd[i].a==1.0) out<<"+"<<"x^"<<sd[i].b;
					else out<<"+"<<sd[i].a<<"x^"<<sd[i].b;
				}
				else out<<"+"<<sd[i].a;
			}
				else if(sd[i].a<0)
				{
					if(sd[i].b>0) 
					{
						if(sd[i].b==1)
							out<<sd[i].a<<"x";
						else out<<sd[i].a<<"x^"<<sd[i].b;
					}
					else out<<sd[i].a;
				}
			}
	}
	out<<endl;
}
fc&fc::operator =(fc&x)
{
	if(sd!=0) delete[] sd;
	sd=new note[x.n];   
	for(int i=0;i<x.n;i++)
	{
		sd[i].a=x.sd[i].a;
		sd[i].b=x.sd[i].b;
	}
	n=x.n;
	return *this;
}
fc fc::operator +(fc&x)
{
	fc temp;
	int count=0;
	int i=0,k=0,j=0;
	for(i=0;i<n;i++)
		for(j=0;j<x.n;j++)
		{
			if(x.sd[j].b==sd[i].b)
				count++;
		}
		
		temp.n=n+x.n-count;
		temp.sd=new note[temp.n];
		i=0;j=0;

	while(i<n&&j<x.n)
	{
		while(x.sd[j].b<sd[i].b)
		{
			temp.sd[k].a=sd[i].a;
			temp.sd[k].b=sd[i].b;
			k++;
			i++;
		}
		if(x.sd[j].b==sd[i].b)
		{
			temp.sd[k].b=sd[i].b;
			temp.sd[k].a=sd[i].a+x.sd[j].a;
			k++;
			i++;
			j++;
		}
		else 
		{
			temp.sd[k].b=x.sd[j].b;
			temp.sd[k].a=x.sd[j].a;
			k++;
			j++;
		}
	}
	if(j<x.n)
	{
		while(j<x.n)
		{
			temp.sd[k].b=x.sd[j].b;
			temp.sd[k].a=x.sd[j].a;
			k++;
			j++;
		}
	}
	else if(i<n)
	{
		while(i<n)
		{
			temp.sd[k].a=sd[i].a;
			temp.sd[k].b=sd[i].b;
			k++;
			i++;
		}
	}

	return temp;
}
fc fc::operator -(fc&x)
{
	int i=0;
	for(i=0;i<x.n;i++)
		x.sd[i].a=x.sd[i].a-0.0;
	fc temp;
	int count=0;
	int k=0,j=0;
	for(i=0;i<n;i++)
		for(j=0;j<x.n;j++)
		{
			if(x.sd[j].b==sd[i].b)
				count++;
		}
		
		temp.n=n+x.n-count;
		temp.sd=new note[temp.n];
		i=0;j=0;

	while(i<n&&j<x.n)
	{
		while(x.sd[j].b<sd[i].b)
		{
			temp.sd[k].a=-sd[i].a;
			temp.sd[k].b=sd[i].b;
			k++;
			i++;
		}
		if(x.sd[j].b==sd[i].b)
		{
			temp.sd[k].b=sd[i].b;
			temp.sd[k].a=x.sd[j].a-sd[i].a;
			k++;
			i++;
			j++;
		}
		else 
		{
			temp.sd[k].b=x.sd[j].b;
			temp.sd[k].a=x.sd[j].a;
			k++;
			j++;
		}
	}
	if(j<x.n)
	{
		while(j<x.n)
		{
			temp.sd[k].b=x.sd[j].b;
			temp.sd[k].a=x.sd[j].a;
			k++;
			j++;
		}
	}
	else if(i<n)
	{
		while(i<n)
		{
			temp.sd[k].a=sd[i].a;
			temp.sd[k].b=sd[i].b;
			k++;
			i++;
		}
	}

	return temp;
}
fc fc::operator *(fc&x)
{
	int k=0;
	fc num,a;
	a.sd=new note[100];
	for(int i=0;i<n;i++)
	{
		k=0;
		for(int j=0;j<x.n;j++)
		{
			a.sd[k].a=sd[i].a*x.sd[j].a;
			a.sd[k].b=sd[i].b+x.sd[j].b;
			k++;
		}
		a.n=k;
		num=num+a;
	}
		return num;
}
fc&fc::dev(){
	for(int i=0;i<n;i++) 
	{
		sd[i].a=sd[i].a*sd[i].b;
		sd[i].b=sd[i].b-1;
		if(sd[i].b==-1) 
		{
			sd[i].a=0;sd[i].b=0;
		}
	}
	return *this;
}

fc&fc::indev()
{
	for(int i=0;i<n;i++) 
	{
		sd[i].b=sd[i].b+1;
		sd[i].a=sd[i].a/sd[i].b;
	}
	return *this;
}			
	 
double fc::operator ()(double x)
{
	double num=0.0,d,he;
	for(int i=0;i<n;i++)
	{
		d=1.0;
		he=0.0;
		for(int j=0;j<sd[i].b;j++)
			d=d*x;
		he=sd[i].a*d;
		num=num+he;
	}
	return num;
}
		
int n;
double n1,n2;
int i;
char *f,e;
int main()
{
	in>>n;
	f=new char[n];
	fc *a=new fc[n];
    fc b,c,d;
	for(i=0;i<n;i++)
	a[i].input();
    for(i=1;i<n;i++)
		in>>f[i];
	
    for(i=1;i<n;i++)
	{
		if(f[i]=='+')
			a[i]=a[i]+a[i-1];
		else if(f[i]=='-')
			a[i]=a[i]-a[i-1];
		else if(f[i]=='*')
			a[i]=a[i]*a[i-1];
	}
	b=a[n-1];
	d=b;
	b.output();
	while(in>>e)
	{
		if(e=='d')
		{
			in>>n1;
			c=b.dev();
			c.output();
		    double x=c(n1);
		     out<<x<<endl;
		}
		if(e=='i')
		{
			in>>n2;
			c=d.indev();
			c.output();
			double x=c(n2);
			out<<x<<endl;
		}
	}	
	delete[] a;
	return 0;
}
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -