?? 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 + -