📄 quantic.cpp
字号:
// Quantic.cpp: implementation of the CQuantic class.
//
//////////////////////////////////////////////////////////////////////
#include "Quantic.h"
#include "string.h"
#include "math.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CQuantic::CQuantic()
{
m_strName=NULL;
}
CQuantic::CQuantic(CQuantic & Quantic)
{
if(Quantic.m_strName)
{
m_strName=new char[strlen(Quantic.m_strName)+1];
strcpy(m_strName,Quantic.m_strName);
}
int length=Quantic.m_clList.GetLength();
ELEMENT element;
for(int i=0;i<length;i++)
{
element=Quantic.m_clList[i];
m_clList.Add(element);
}
}
CQuantic::~CQuantic()
{
delete [] m_strName;
}
bool CQuantic::SetName(char strName[])
{
delete [] m_strName;
m_strName=new char[strlen(strName)+1];
strcpy(m_strName,strName);
return true;
}
void CQuantic::GetName(char strName[])
{
strcpy(strName,m_strName);
}
bool CQuantic::IsEqual(char strName[])
{
int equal;
equal=strcmp(strName,m_strName);
return equal==0 ? true : false;
}
bool CQuantic::AddElement(int Modulus,int Power)
{
ELEMENT element;
element.Modulus=Modulus;
element.Power=Power;
if(Modulus==0)
return false;
int length=m_clList.GetLength();
for(int i=0;i<length;i++)
{
if(m_clList[i].Power==Power)
{
m_clList[i].Modulus+=Modulus;
if(!m_clList[i].Modulus)
m_clList.Delete(i);
return true;
}
if(m_clList[i].Power<Power)
{
if(element.Modulus)
m_clList.Insert(i,element);
return true;
}
}
if(element.Modulus)
m_clList.Add(element);
return true;
}
bool CQuantic::AddQuantic(CQuantic & quantic,int modulus)
{
ELEMENT element;
int length=quantic.m_clList.GetLength();
for(int i=0;i<length;i++)
{
element=quantic.m_clList[i];
if(element.Modulus * modulus==0)
continue;
AddElement(element.Modulus * modulus,element.Power);
}
return true;
}
bool CQuantic::AddString(char String[])
{
if(Check(String))
{
int sign;
int value;
int power;
int i=0;
while(String[i])
{
sign=1;
if(String[i]=='+'||String[i]=='-')//符号
{
sign=String[i]=='-'? -1 : 1;
i++;
}
if(String[i]>='0'&&String[i]<='9')
value=0;
else
value=1;
while(String[i]>='0'&&String[i]<='9')//数字
{
value=value*10+String[i]-'0';
i++;
}
value=value*sign;
power=0;
sign=1;
if(String[i]=='x'||String[i]=='X')//x
{
i++;
if(String[i]=='^')//^
{
i++;
if(String[i]=='+'||String[i]=='-')//符号
{
sign=String[i]=='-'? -1 : 1;
i++;
}
}
if(String[i]>='0'&&String[i]<='9')
power=0;
else
power=1;
while(String[i]>='0'&&String[i]<='9')//数字
{
power=power*10+String[i]-'0';
i++;
}
}
power=power*sign;
if(value)
AddElement(value,power);
}
return true;
}
return false;
}
bool CQuantic::DeleteQuantic()
{
m_clList.DestroyList();
delete [] m_strName;
return true;
}
double CQuantic::Calculate(double X)
{
double value=0;
ELEMENT element;
int length=m_clList.GetLength();
for(int i=0;i<length;i++)
{
element=m_clList[i];
value=value+pow(X,element.Power)*element.Modulus;
}
return value;
}
void CQuantic::Display()
{
ELEMENT element;
bool flag=false;
int length=m_clList.GetLength();
if(m_strName)
cout<<m_strName<<": ";
for(int i=0;i<length;i++)
{
element=m_clList[i];
if(element.Modulus>0 && flag)
cout<<'+';
flag=true;
if(element.Power==0)
cout<<element.Modulus;
else if(element.Modulus==1 && element.Power==1)
cout<<'X';
else if(element.Power==1)
cout<<element.Modulus<<"X";
else if(element.Modulus==1)
cout<<"X^"<<element.Power;
else
cout<<element.Modulus<<"X^"<<element.Power;
}
cout<<endl;
}
bool CQuantic::Check(char String[])
{
int i=0;
while(String[i])
{
while(String[i]>='0'&&String[i]<='9')//数字
i++;
if(String[i]=='x'||String[i]=='X')//x
{
i++;
if(String[i]=='^')//^
{
i++;
if(String[i]=='+'||String[i]=='-')//符号
i++;
if(String[i]<'0'||String[i]>'9')//必须是数字符
return false;
}
while(String[i]>='0'&&String[i]<='9')//数字
i++;
}
if(String[i]=='+'||String[i]=='-')
{
i++;
if(String[i]=='+'||String[i]=='-')
return false;
continue;
}
if(!String[i])
return true;
return false;
}
if(String[i-1] == '+' || String[i-1] == '-')
return false;
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -