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

📄 expression.cpp

📁 输入一个公式
💻 CPP
字号:
#include "stdafx.h"
#include "math.h"
#include "Expression.h"
#include <ctype.h>
#include "ExpressionPage.h"

///////////////////////////////////////////////////////////////////////////
//class CExpression
CExpression::CExpression()
{
}

CExpression::CExpression(int num)
{
	InitVariabileMap(num);
}

CExpression::~CExpression()
{
	DestroyVariableMap();
}

void CExpression::InitVariabileMap(int num)
{
	m_VarsMap.InitHashTable(num);
	m_expression.AtachVariables(&m_VarsMap);
}

void CExpression::DestroyVariableMap()
{
	if(m_VarsMap.GetCount()==0) return;
	POSITION pos = m_VarsMap.GetStartPosition();
	CString sName;
	CValue *pVal;
	while (pos != NULL)
	{
		m_VarsMap.GetNextAssoc (pos, sName, pVal);
		delete pVal;
	}
	m_VarsMap.RemoveAll();	
}

void CExpression::RemoveVariable(CString VarName)
{
	CValue *pVal;
	if(!m_VarsMap.Lookup(VarName,pVal)) return;
	delete pVal;
	m_VarsMap.RemoveKey(VarName);
}

//增加一个变量表达式
void CExpression::AddVariable(CString VarName, CString ExpressionValue)
{
	CExpressionBase *expresie = new CExpressionBase(&m_VarsMap);
	expresie->ChangeExpression(ExpressionValue);
	CExpValue *value = new CExpValue;
	value->SetValue(expresie);
	m_VarsMap[VarName] = value;
}

void CExpression::SetVarValue(CString VarName, CString ExpressionValue)
{
	CExpressionBase *expresie = new CExpressionBase(&m_VarsMap);
	expresie->ChangeExpression(ExpressionValue);
	CExpValue *value = (CExpValue*)(m_VarsMap[VarName]);
	value->SetValue(expresie);
}

//增加一个双精度型的变量
void CExpression::AddVariable(CString VarName, double data)
{
	CNumericValue *value = new CNumericValue;
	value->SetValue(data);
	m_VarsMap[VarName] = value;
}

void CExpression::SetVarValue(CString VarName, double data)
{
	CNumericValue *value = (CNumericValue*)(m_VarsMap[VarName]);
	if(value == NULL)return;
	value->SetValue(data);
}

int CExpression::SetExpression(CString strValue)
{
	return m_expression.ChangeExpression(strValue);
}

int CExpression::GetValue(double &value)
{
	return m_expression.Value(value);
}

CMapVariabile* CExpression::GetVarMap()
{
	return &m_VarsMap;
}

int CExpression::EditExpression(CString &sExpression)
{
	CPropertySheet sheet(IDS_STRING_Title);;
	CExpressionPage page;
	page.pVariable=&m_VarsMap;
	page.sExpression=sExpression;
	sheet.AddPage(&page);
	if(sheet.DoModal()!=IDOK)return 0;
	sExpression=page.sExpression;
	return 1;
}

⌨️ 快捷键说明

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