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

📄 page109.cpp

📁 清华大海数据结构教程,能够帮助更好地理解C++的数据结构
💻 CPP
字号:
#include <process.h>
#include <math.h>
#include <stack.h>
#include <iostream.h>
enum Boolean {False,True};

class Calculator{
  public:
    Calculator(int sz=20):s(sz){};
    void Run();
    void Clear();
  private:
    void AddOperand(double value);
    Boolean Get2Operands(double & left,double & right);
    void DoOperator(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 False;
      }
    right=s.Pop();
    if(s.IsEmpty()){
      cerr<<"Missing Operand!"<<endl;
      return False;
      }
    left=s.Pop();
    return 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<<"Divided by 0!"<<endl;
		    s.MakeEmpty();
		    exit(0);
		    }
		    else s.Push(left/right); break;
	case '^': s.Push(pow(left,right)); break;
	}
	else s.MakeEmpty();
    };

  void Calculator::Run(){
    char ch;
    double newoperand;
    while(cin>>ch,ch!='='){
      switch(ch){
	case '+':
	case '-':
	case '*':
	case '/':
	case '^':  DoOperator(ch); break;
	default: cin.putback(ch);
		 cin>>newoperand;
		 AddOperand(newoperand);
		 break;
      }
    }
    assert(!s.IsEmpty());
    cout<<"The result is:"<<s.Pop()<<endl;
  }

  void Calculator::Clear(){
    s.MakeEmpty();
    }



void main(){
  Calculator cal(10);
  cal.Run();
  }

⌨️ 快捷键说明

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