
C++中表达式求值的实现,以及封装类的编写,同时提供计算器的源代码。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
该表达式计算封装类能够处理三角函数、反三角函数以及各种常规公式的数值计算。代码结构便于调整和修改,非常适合进行功能的扩展。该系统还支持对参数进行重新赋值,从而实现灵活的计算。以下是一个示例代码片段:
```c++
#include Express.h
#include ExpValue.h
#include VarValue.h
void main() {
// 表达式
string strExpress = sin(A)*(3+B)-4/cos(C)*PI;
CMapVariabile m_VarsMap;
CExpression m_expression;
m_VarsMap.InitHashTable(100);
m_expression.AtachVariables(&m_VarsMap);
// 参数赋值
CNumericValue *value = 0;
value = new CNumericValue;
value->SetValue(12.22);
m_VarsMap[_T(A)] = value;
value = new CNumericValue;
value->SetValue(13.44);
m_VarsMap[_T(B)] = value;
value = new CNumericValue;
value->SetValue(567.987);
m_VarsMap[_T(C)] = value;
value = new CNumericValue;
value->SetValue(3.1415926);
m_VarsMap[_T(PI)] = value;
double dValue = 0;
int result = m_expression.ChangeExpression(strExpress.c_str());
if (result < 0) {
long result = m_expression.Value(dValue);
if (result == DIVISION_BY_0) {
printf(亲,除零了.....-_-!\r\n);
} else {
printf(%s=%.2f\r\n, strExpress.c_str(), dValue);
}
}
// 清除变量
POSITION pos = m_VarsMap.GetStartPosition();
while (pos != NULL) {
CString sName;
CValue *pVal;
m_VarsMap.GetNextAssoc (pos, sName, pVal);
delete pVal;
}
m_VarsMap.RemoveAll();
}
```
全部评论 (0)


