计算器的实现比较复杂。不是几句话可以解决。
大致用以下步骤:(二叉数法)
建立父类:class node:
建立子类:class leafnode(用于存储数值)
建立子类:class Optnode(用于运算)
再实现一个类用实现数的建立
大致用以下步骤:(二叉数法)
建立父类:class node:
建立子类:class leafnode(用于存储数值)
建立子类:class Optnode(用于运算)
再实现一个类用实现数的建立
解决方案 »
- mfc中可以用fflush打印输出吗?大家帮我看看撒!
- html显示的问题!
- 关于在MFC实现 自动化类的ConnectionPoint(连接点)的问题?(高手请进)
- 怎样将_bstr_t类型转为CString类型啊?
- 如何生成点阵库!!!!---急???
- 在VC++中使用GetMenu(),系统提示参数不能为空
- 智能指针
- 为了这个问题用光了我所有的积分,但还是没有解决,雷锋们快帮帮忙把,不胜感激
- 請問大家常用的一些開始上面run運行的命令?我先列几個,權當拋磚引玉
- 求 Symantec Enterprise Firewall and Symantec Enterprise VPN 的CD-Key
- 局域网内带密码的共享文件夹如何访问?
- 局域网里 怎样才能设置其它机器上的驱动器为共享 100分 在线守候立刻加分
class VarBinNode : public CObject
{
public:
short grade;
virtual double value(short &result); VarBinNode();
virtual ~VarBinNode();
virtual BOOL isLeaf();
};
/////////////////////// LeafNode
class LeafNode : public VarBinNode
{
public:
double value(short &result );
double leaf;
LeafNode();
virtual ~LeafNode();
virtual BOOL isLeaf(){return TRUE;};
};
/////////////////////// IntlNode
class IntlNode : public VarBinNode
{
public:
double value(short &result);
short optor;
VarBinNode *left;
VarBinNode *right; IntlNode();
virtual ~IntlNode();
virtual BOOL isLeaf(){return FALSE;};
};
{return FALSE;}
double VarBinNode::value(short &result)
{ return 0; }
////////////// leafNode
LeafNode::LeafNode()
{
}
LeafNode::~LeafNode()
{}
double LeafNode::value(short &result)
{
result = 0;
return leaf;
}
/////////////////////////// IntlNode
IntlNode::IntlNode()
{
left= NULL;
right=NULL;
optor = 0;
}
IntlNode::~IntlNode()
{
if(left != NULL)
{
delete left;
}
if(right != NULL)
{
delete right;
}
}
double IntlNode::value(short &result)
{
short lresult,rresult;
double lvar,rvar;
BOOL isLeaf lvar = left->value(lresult);
rvar = right->value(rresult);
switch (optor) //1+ 2- 3* 4/ 5sin 6cos
{
case 1: //+
{
//左右分支是否有值
if((lresult != 0)&&(rresult != 0))
{
result = 3;
return 0;
}
if(lresult != 0)
{
result = 0;
lvar = 0;
// return 0;
}
if(rresult != 0)
{
result =2;
return 0;
} result = 0;
return (lvar+rvar);
}
case 2: ///// -
{
//左右分支是否有值
if((lresult != 0)&&(rresult != 0))
{
result = 3;
return 0;
}
if(lresult != 0)
{
// result = 0;
lvar = 0;
}
if(rresult != 0)
{
result =2;
return 0;
} result = 0;
return (lvar-rvar);
}
case 3:// *
{
//左右分支是否有值
if((lresult != 0)&&(rresult != 0))
{
result = 3;
return 0;
}
if(lresult != 0)
{
result = 1;
return 0;
}
if(rresult != 0)
{
result =2;
return 0;
}
result =0;
return (lvar*rvar);
}
case 4: /// /
{
//左右分支是否有值
if((lresult != 0)&&(rresult != 0))
{
result = 3;
return 0;
}
if(lresult != 0)
{
result = 1;
return 0;
}
if(rresult != 0)
{
result =2;
return 0;
} if(rvar != 0)
{
result = 0;
return (lvar/rvar);
}
else
{
result = 4;
return 0;
}
}
case 5: /////// sin
{
//右分支是否有值
if(rresult != 0)
{
result =2;
return 0;
}
else
{
result = 0;
return sin(rvar);
}
}
case 6: // cos
{
//右分支是否有值
if(rresult != 0)
{
result =2;
return 0;
}
else
{
result = 0;
return cos(rvar);
}
}
case 7: // tan
{
//右分支是否有值
if(rresult != 0)
{
result =2;
return 0;
}
else
{
result = 0;
return tan(rvar);
}
}
case 8: //arcsin
{
//右分支是否有值
if(rresult != 0)
{
result =2;
return 0;
}
else
{
if((rvar>=-1)&&(rvar<=1))
{
result = 0;
return asin(rvar);
}
else
{
result = 4;
return 0;
}
}
}
case 9: //arccos
{
//右分支是否有值
if(rresult != 0)
{
result =2;
return 0;
}
else
{
if((rvar>=-1)&&(rvar<=1))
{
result = 0;
return acos(rvar);
}
else
{
result =4;
return 0;
}
}
}
case 10://arctan
{
//右分支是否有值
if(rresult != 0)
{
result =2;
return 0;
}
else
{
result = 0;
return atan(rvar);
}
}
case 11://x的y 次方
{
//左右分支是否有值
if((lresult != 0)&&(rresult != 0))
{
result = 3;
return 0;
}
if(lresult != 0)
{
result = 1;
return 0;
}
if(rresult != 0)
{
result =2;
return 0;
} result = 0;
return pow(lvar,rvar);
}
case 12:
{
//右分支是否有值
if(rresult != 0)
{
result =2;
return 0;
}
result = 0;
return exp(rvar);
}
case 13: //ln
{
if(rresult != 0)
{
result =2;
return 0;
}
result = 0;
return log(rvar);
}
case 14:// 平方根
{
if(rresult != 0)
{
result =2;
return 0;
}
if(rvar>=0)
{
result = 0;
return sqrt(rvar);
}
else
{
result =4;
return 0;
}
}
case 15:// |a-b|
{
if(rresult != 0)
{
result =2;
return 0;
}
result = 0;
return fabs(rvar);
}
default:
{
result = 5;
return 0;
}
}}