📄 expression.cpp
字号:
// Expression.cpp: implementation of the CExpression class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "24Dian.h"
#include "Expression.h"
#include "calculate.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CExpression::CExpression()
{
}
CExpression::CExpression(double dNum1, double dNum2, double dNum3, double dNum4,double dResult)
{
m_dNum[0]=dNum1;
m_dNum[1]=dNum2;
m_dNum[2]=dNum3;
m_dNum[3]=dNum4;
m_dResult=dResult;
m_strExpression="";//表达式
}
CExpression::~CExpression()
{
}
//扫描数字
//在输入的四个数字中选择,进行更换
BOOL CExpression::ScanNum()
{
BOOL bExit=FALSE;
double nNum[4];
for(int n1=0; n1<4; n1++)
{
nNum[0]=m_dNum[n1];
for(int n2=0; n2<4; n2++)
{
if(n2==n1) //如果相同,则不用加进去
continue;
nNum[1]=m_dNum[n2];
for(int n3=0; n3<4; n3++)
{
if(n3==n1 || n3==n2)//与前面的比较,是否相同,如果同,则不加进去
continue;
nNum[2]=m_dNum[n3];
for(int n4=0; n4<4; n4++)
{
if(n4==n1 || n4==n2 || n4==n3)//与前面的三个比较,是否相同
continue;
nNum[3]=m_dNum[n4];
m_strElement[1].Format("%.0f",nNum[0]);
m_strElement[4].Format("%.0f",nNum[1]);
m_strElement[8].Format("%.0f",nNum[2]);
m_strElement[11].Format("%.0f",nNum[3]);
if(ScanOperator()) //判断括号是否正确
bExit=TRUE;
}
}
}
}
return bExit;
}
//扫描操作符
BOOL CExpression::ScanOperator()
{
BOOL bExit=FALSE;
char constOp[5];
constOp[0] = '+';
constOp[1] = '-';
constOp[2] = '*';
constOp[3] = '/';
constOp[4] = '^';
//////////////////////////////////////////////////////////
//一共有5*5*5种可能,三个地方可以放括号
//////////////////////////////////////////////////////////
char Op[4];
for(int n1=0; n1<5; n1++)
{
Op[0]=constOp[n1];
for(int n2=0; n2<5; n2++)
{
Op[1]=constOp[n2];
for(int n3=0; n3<5; n3++)
{
Op[2]=constOp[n3];
m_strElement[2].Format("%c",Op[0]);
m_strElement[6].Format("%c",Op[1]);
m_strElement[10].Format("%c",Op[2]);
if(ScanBracket())//判断括号是否正确的
bExit=TRUE;
}
}
}
return bExit;
}
//扫描括号包括各种可能
BOOL CExpression::ScanBracket()
{
BOOL bExist=FALSE;
//初始化括号
InitBracket();
///////////////////////////////////////////
if(IsRight())//判断是否表达式是否正确
return bExist=TRUE;
m_strElement[7]="(";
m_strElement[12]=")";
if(IsRight())
return bExist=TRUE;
InitBracket();
//////////////////////////////////
m_strElement[0]="(";
m_strElement[5]=")";
if(IsRight())
return bExist=TRUE;
m_strElement[7]="(";
m_strElement[12]=")";
if(IsRight())//判断结果是否正确
return bExist=TRUE;
/////////////////////////////////////
InitBracket();
m_strElement[0]="(";
m_strElement[9]=")";
if(IsRight())
return bExist=TRUE;
/////////////////////////////////////
InitBracket();
m_strElement[3]="(";
m_strElement[9]=")";
if(IsRight())
return bExist=TRUE;
//////////////////////////////////
InitBracket();
m_strElement[3]="(";
m_strElement[12]=")";
if(IsRight())
return bExist=TRUE;
return bExist;
}
//得到表达式
CString CExpression::GetExpression()
{
return m_strExpression;
}
//判断与24比较是否正确
BOOL CExpression::IsRight()
{
// m_strExpression="";
CString strTmp;
strTmp="";
for(int i=0; i<13; i++)
{
if(m_strElement[i]!=" " || !strTmp.IsEmpty())
strTmp+=m_strElement[i];
}
// strTmp+="\r\n";
CCalculate cal(strTmp);
// TRACE(strTmp+"\n");
if(!cal.IsValid())
return FALSE;
//得到结果
double dResult=cal.GetResult();
if(dResult>= m_dResult-0.0001 && dResult<=m_dResult+0.0001)
{
if(m_strExpression.Find(strTmp)==-1)
{
CString strResult;
m_strExpression+=strTmp;
strResult.Format("=%.0f",m_dResult);
m_strExpression+=strResult+"\r\n";
}
return TRUE;
}
return FALSE;
}
//初试括号
void CExpression::InitBracket()
{
m_strElement[0]="";
m_strElement[3]="";
m_strElement[5]="";
m_strElement[7]="";
m_strElement[9]="";
m_strElement[12]="";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -