| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 580 人关注过本帖
标题:急。。后缀表达失求值问题。。。
只看楼主 加入收藏
zclllt
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-3-16
收藏
 问题点数:0 回复次数:3 
急。。后缀表达失求值问题。。。

用顺序栈或者链栈实现后缀表达式的并求值的程序怎么编???
#include <iostream>
#include "math"
#include <stack>
using namespace std;
enum Boolean{False,True};
#include <assert.h>
template<class Type>class Stack{
public:
Stack (int=10);
~Stack(){delete[]elements;}
void Push(const Type&item);
Type Pop();
Type GetTop();
void MakeEmpty(){top=-1;}
int IsEmpty()const{return top==-1;}
int IsFull()const{return top==maxSize-1};
private:
int top;
Type *elements;
int maxSize;
};
template<class Type> Stack<Type>::Stack(int s):top(-1),maxSize(s){
elements=new Type[maxSize];
assert(elements!=0);
}
template<class Type>void Stack<Type>::Push(const Type&item){
assert(!IsFull());
elements[++top]=item;
}
template<class Type>Type Stack<Type>::Pop(){
assert(!IsEmpty());
return elements[top--];
}
template<class Type>Type Stack<Type>::GetTop(){
assert(!Is Empty());
return elements[top];
}

class Calculator{
public:
Calculator(int sz):s(sz){}
void Run();
void Clear();
private:
void AddOperand(double value);
Boolean Get2Operands(double&left,double&right);
void DoOperand(char op);
stack<double>s;
};
void Calculator::AddOperand(double value){
s.Push(value);
}
Boolean Calculator:: Get2OPerands(double&left,double&right){
if (s.IsEmpty()){
cerr<<"Missing Operand!"<<endl; return Flase;
}
right=s.Pop();
if(s.IsEmpty()){
cerr<<"Missing Operand!"<<endl; return Flase;
}
left=s.Pop();
reyurn True;
}
void Calculator::DoOperator(char op){
double left,right; Boolean result;
result=Get2Operands(left,right);
if(result==True)
switch(op){
case'+': s.Push(left+right);break;
case'-': s.Push(left-right);break;
case'*': s.Push(left*right);break;
case'/': if(right==0.0){
cerr<<"Divide by 0!"<<endl; Clear();
}
elses.Push(result=left/right);break;
case'^': s.Push(Power(left,right));break;
}
else Clear();
}
void Calculator::Run(){
char c[20];
while(cin>>d,*c!='q')
switch(*c)
{
case'c': S.ClearStack();
break;
case'-'
if(strlen(c)>1)
AddOperand(atoi));
else DoOperator (*c);
break;
case'+':
case'*':
case'/':
case'^':
Do Operator(*c);
break;
default:
AddOperand(atoi(c));
break;
}
}
void Calculator::Clear(void)
{S.ClearStack();}
//1.cpp

int main()
{
Calculator CALC;
CALC.Run();
}
我写的程序有个错误ompiling...
1.cpp
L:\051170114\1\1.cpp(3) : fatal error C1083: Cannot open include file: 'math': No such file or directory
Error executing cl.exe.

1.exe - 1 error(s), 0 warning(s)
这是怎么回事????

搜索更多相关主题的帖子: 后缀 求值 表达 
2006-12-25 22:58
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
打不开math.h这个头文件.

倚天照海花无数,流水高山心自知。
2006-12-26 14:36
zclllt
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-3-16
收藏
得分:0 
帮帮看一下,这个程序对吗
2006-12-26 21:01
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
看了一下,算法上没有什么错.建议将操作数也作为字符输入.
感觉这个程序程序定义栈有点小题大做了.

倚天照海花无数,流水高山心自知。
2006-12-26 22:55
快速回复:急。。后缀表达失求值问题。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028509 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved