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

📄 ploynomial.cpp

📁 数据结构的一个试验
💻 CPP
字号:
#include "StdAfx.h"
#include ".\ploynomial.h"

CPloyNomial::CPloyNomial(void)
{
}

CPloyNomial::CPloyNomial(CPloyNomial &ployNomial)
{
	for(int i=0;i<ployNomial.m_PolyNomial.GetCount();i++)
	{
		m_PolyNomial.InsertTail(ployNomial.m_PolyNomial.GetAt(i));
	}

}
CPloyNomial::~CPloyNomial(void)
{
}
//向多项式添加元素
void CPloyNomial::AddItem(CPolyItem mItem)
{
	m_PolyNomial.InsertHead(mItem);
}
//重载=号,以方便多项式的符值
CPloyNomial & CPloyNomial::operator =(const CPloyNomial &ployNomial)
{
	m_PolyNomial=ployNomial.m_PolyNomial;
	return *this;
}
//重载-号,实现多项式的减法
CPloyNomial CPloyNomial::operator -(CPloyNomial &ployNomial)
{
	CPolyItem tempItem(-1,0);
	CPloyNomial temp,temp1,result;
	temp.AddItem(tempItem);
	temp1=ployNomial*temp;
	temp=*this;
	result=temp+temp1;
	return result;



}
//重载*号实现多项式的乘
CPloyNomial CPloyNomial::operator *(CPloyNomial &ployNomial)
{
	int i,j,m,n;
	i=j=0;
	m=m_PolyNomial.GetCount();
	n=ployNomial.m_PolyNomial.GetCount();
	CPloyNomial result;
	for(int i=0;i<n;i++)
	{
		CPloyNomial temp;
		for(int j=0;j<m;j++)
		{
			temp.AddItem(ployNomial.m_PolyNomial.GetAt(i)*m_PolyNomial.GetAt(j));
		}
		result=result+temp;
	}
	result.m_PolyNomial.Sort();
	return result;
}
//实现多项式的加法
const CPloyNomial CPloyNomial::operator +(CPloyNomial &ployNomial)
{

	m_PolyNomial.Sort();
	ployNomial.m_PolyNomial.Sort();
	int i,j;
	i=j=0;
	CPloyNomial temp;

	while(i<m_PolyNomial.GetCount()&&j<ployNomial.m_PolyNomial.GetCount())
	{
		if(m_PolyNomial.GetAt(i)<ployNomial.m_PolyNomial.GetAt(j))
		{
			temp.AddItem(ployNomial.m_PolyNomial.GetAt(j++));
		}
		else if(m_PolyNomial.GetAt(i)==ployNomial.m_PolyNomial.GetAt(j))
		{
			CPolyItem sum=m_PolyNomial.GetAt(i)+ployNomial.m_PolyNomial.GetAt(j);
			if(!sum.IsNULL())
				temp.AddItem(sum);
			i++;j++;
		}
		else if(m_PolyNomial.GetAt(i)>ployNomial.m_PolyNomial.GetAt(j))
		{
			temp.AddItem(m_PolyNomial.GetAt(i++));
		}

	}
	if(i<m_PolyNomial.GetCount())
	{
		while(i<m_PolyNomial.GetCount())
		{
			temp.AddItem(m_PolyNomial.GetAt(i));
			i++;
		}
	}
	else if(j<ployNomial.m_PolyNomial.GetCount())
	{
		while(j<ployNomial.m_PolyNomial.GetCount())
		{
			temp.AddItem(ployNomial.m_PolyNomial.GetAt(j));
			j++;
		}
	}
	temp.m_PolyNomial.Sort();
	//temp.Format();
	return temp;

}
//删除多项式的首元素
void CPloyNomial::RemoveItem(void)
{
	m_PolyNomial.RemoveHead();
}
//把多项式编程输出格式的字符串
CString CPloyNomial::ToString(void)
{
	if(!m_PolyNomial.IsEmpt())
	{
		CString temp;

		//m_PolyNomial.Sort();
		//m_PolyNomial.Reversal();
		
		Format();
		temp.Format("%0.2fX^%d",this->m_PolyNomial.GetHead().GetCoef(),this->m_PolyNomial.GetHead().GetExpn());

		for(int i=1;i<this->m_PolyNomial.GetCount();i++)
		{
			CString str;
			//str.Format("+%fX^%d",m_PolyNomial.GetAt(i).GetCoef(),m_PolyNomial.GetAt(i).GetExpn());
			temp+=m_PolyNomial.GetAt(i).ToString();

		}
		return temp;
	}
	else return CString();
}


//删除所有的元素项
void CPloyNomial::RemoveAll(void)
{
	while(this->m_PolyNomial.GetCount()!=0)
	{
		this->RemoveItem();
	}
}
//把指数相同的项合并
void CPloyNomial::Format(void)
{
	int i,j;
	for(i=0;i<m_PolyNomial.GetCount();i++)
	{
		for(j=i+1;j<m_PolyNomial.GetCount();j++)
		{
			if(m_PolyNomial.GetAt(i)==m_PolyNomial.GetAt(j))
			{
				CPolyItem temp;
				temp=m_PolyNomial.GetAt(i)+m_PolyNomial.GetAt(j);
				this->RemovAt(i);
				m_PolyNomial.InsertAt(i,temp);
				this->RemovAt(j);
				
			}
		}
	}
	m_PolyNomial.Sort();
	m_PolyNomial.Reversal();

}
//删除第iIndex项
void CPloyNomial::RemovAt(int iIndex)
{
	if(this->m_PolyNomial.GetCount()!=0)
	{
		m_PolyNomial.RemoveAt(iIndex);
	}
}

⌨️ 快捷键说明

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