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

📄 control.cpp

📁 数据结构中的多项式相加问题
💻 CPP
字号:
// Control.cpp: implementation of the CControl class.
//
//////////////////////////////////////////////////////////////////////

#include "Control.h"
#include "KeyChar.h"
#include "string.h"
#include "conio.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CControl::CControl()
{
}
bool CControl::CreatQuantic()
{
    char str[]="+-()xX^";
	char str0[]="";
	CKeyChar key;
	int value;
	char str1[100];
	CQuantic * pQuantic=new CQuantic();
	key.SetStyle(500,KEY_LETTER,str0);
	cout<<"                        创建多项式说明"<<endl;
	cout<<"    输入多项式前要给多项式取个名称(名字),只能是英文字母。 输"<<endl;
	cout<<"入多项式时,除了数字和'+'、'-'、'^'、'X'、'x'外,其它字符均不"<<endl;
	cout<<"接受。如果要输入一个多项式:负 34 乘以 X 的 -3 次方,加上 X的"<<endl;
    cout<<"2 次方,减去 3乘以 X,加上 23。输入方法如下:"<<endl;
	cout<<"方法一:-34X^-3+1x^2+3X^1-23X^0"<<endl;
	cout<<"方法二:-34x^-3+x2+3X-23\n"<<endl;
	cout<<"注意:负次方前必须有 '^',例如:-34X^-3。\n"<<endl;
	if(!m_clList.IsEmpty())
        DisplayALL();
	cout<<"\n请输入多项式的名称(只能输入是字母):"<<endl;
	while(1)
	{
		value=key.GetKey();
		if(value=='\r')
		{
		    key.GetKey(str1);
			if(strlen(str1))
			{
				if(EqualName(str1))
				{
					cout<<"\n名字已经存在,请重新输入一个名称!"<<endl;
                    key.SetStar();
					continue;
				}
				pQuantic->SetName(str1);
				key.SetStar();
				break;
			}
		}
	}
	key.SetStyle(500,KEY_NUMBER,str);
	cout<<"\n请输入多项式(只能输入是数字和+ -  ^ X x):"<<endl;
	while(1)
	{
		value=key.GetKey();
	    if(value=='\r')
        {
			key.GetKey(str1);
			if(pQuantic->AddString(str1))
			{
                if(!strlen(str1))
				    continue;
				cout<<"\n多项式有效"<<endl;
				pQuantic->Display();
				m_clList.Add(pQuantic);
				break;
			}
			else
			{
				cout<<"\n多项式无效,重新输入"<<endl;
			    key.SetStar();
			}
		}
	}
	cout<<"创建成功!"<<endl;
	return true;
}
bool CControl::DeleteQuantic()
{
	char str0[]="";
	CKeyChar key;
	int value;
	char str1[100],ch;
	key.SetStyle(500,KEY_LETTER,str0);
	if(m_clList.IsEmpty())
	{
		cout<<"没有创建多项式!"<<endl;
		return false;
	}
	cout<<"删除多项式:"<<endl;
	DisplayALL();
	cout<<"请输入要删除的多项式名称:"<<endl;
	while(1)
	{
		value=key.GetKey();
		if(value=='\r')
		{
		    key.GetKey(str1);
			if(strlen(str1))
			{
				int i=EqualName(str1);
				if(i)
				{
					cout<<endl;
					m_clList[i-1]->Display();
					cout<<"你真的要删除吗?(Y/y):";
					cin>>ch;
					if(ch=='Y'||ch=='y')
					{
						delete m_clList[i-1];
						m_clList.Delete(i-1);
						cout<<"已经成功地删除!"<<endl;
					}
					break;
				}
				cout<<"\n名字不存在,请重新输入一个名称!"<<endl;
				key.SetStar();
				continue;
			}
		}
	}
	return true;
}
bool CControl::DisplayALL()
{
	int length=m_clList.GetLength();
	//cout<<"显示所有的多项式:"<<endl;
	if(length)
	    cout<<"总共创建 "<<length<<" 多项式,如下:"<<endl;
    else
		cout<<"没有创建多项式!总数为零!"<<endl;
	for(int i=0;i<length;i++)
	{
		m_clList[i]->Display();
	}
	return true;
}
bool CControl::AddQuantic()
{
	char str0[]="";
	CKeyChar key;
	int value,add[2];
	char str1[100];
	int data[2];
	key.SetStyle(500,KEY_LETTER,str0);
	if(m_clList.IsEmpty())
	{
		cout<<"没有创建多项式!"<<endl;
		return false;
	}
	cout<<"两个多项式项加:一个多项式 + 被加多项式 = 和多项式:"<<endl;
	DisplayALL();
	cout<<"\n请输入和多项式的名称:"<<endl;
	CQuantic * pQuantic=new CQuantic();
	while(1)
	{
		value=key.GetKey();
		if(value=='\r')
		{
		    key.GetKey(str1);
			if(strlen(str1))
			{
				if(EqualName(str1))
				{
					cout<<"\n名字已经存在,请重新输入一个名称!"<<endl;
                    key.SetStar();
					continue;
				}
				pQuantic->SetName(str1);
				key.SetStar();
				break;
			}
		}
	}
	for(int j=0;j<2;j++)
	{
		if(j==0)
			cout<<"\n请输入一个多项式的名称:"<<endl;
		else
			cout<<"\n请输入被加多项式的名称:"<<endl;
	    while(1)
		{
		    value=key.GetKey();
		    if(value=='\r')
			{
		        key.GetKey(str1);
		    	if(strlen(str1))
				{
				    int i=EqualName(str1);
				    if(i)
					{
						add[j]=i-1;
					    //cout<<endl;
					    //m_clList[i-1]->Display();
						cout<<"\n请输入多项式的系数值(整数):";
					    cin>>data[j];
                       	key.SetStar();
					    break;
					}
			     	cout<<"\n名字不存在,请重新输入一个名称!"<<endl;
			    	key.SetStar();
				    continue;
				}
			}
		}
	}
	pQuantic->AddQuantic(* m_clList[add[0]],data[0]);
	pQuantic->AddQuantic(* m_clList[add[1]],data[1]);

    m_clList[add[0]]->GetName(str1);
	cout<<data[0]<<str1<<endl;;
	m_clList[add[1]]->GetName(str1);
	cout<<" + \n"<<data[1]<<str1<<endl;
	cout<<" = "<<endl;
	pQuantic->Display();
	m_clList.Add(pQuantic);
	return true;
}
bool CControl::Calculate()
{
	char str0[]="";
	CKeyChar key;
	int value;
	char str1[100];
	double data;
	key.SetStyle(500,KEY_LETTER,str0);
	if(m_clList.IsEmpty())
	{
		cout<<"没有创建多项式!"<<endl;
		return false;
	}
	cout<<"赋值计算多项式:"<<endl;
	DisplayALL();
	cout<<"请输入要计算的多项式名称:"<<endl;
	while(1)
	{
		value=key.GetKey();
		if(value=='\r')
		{
		    key.GetKey(str1);
			if(strlen(str1))
			{
				int i=EqualName(str1);
				if(i)
				{
					cout<<endl;
					m_clList[i-1]->Display();
					cout<<"请输入 X 的值:";
					cin>>data;
					cout<<"当 X="<<data<<"时,此多项式的值为 ";
					cout<<m_clList[i-1]->Calculate(data)<<endl;;
					break;
				}
				cout<<"\n名字不存在,请重新输入一个名称!"<<endl;
				key.SetStar();
				continue;
			}
		}
	}
	return true;
}

CControl::~CControl()
{
	int length=m_clList.GetLength();
    for(int i=0;i<length;i++)
		delete m_clList[i];
}
int CControl::EqualName(char String[])
{
	int length=m_clList.GetLength();
    for(int i=0;i<length;i++)
		if(m_clList[i]->IsEqual(String))
			return i+1;
	return 0;
}

⌨️ 快捷键说明

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