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

📄 mydata.cpp

📁 简单的计算机,可以实现加减乘除,函数sin,cos,tan等功能
💻 CPP
字号:
// Mydata.cpp : implementation file
//
#include "Myoperator.h"
#include "stdafx.h"
#include "gss_calculator.h"
#include "Mydata.h"
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
enum Precedence{B,S,E,U};
/*   ?,+,-,*,/,sqrt,sin,cos,tan,cot,ln,log          */
Precedence op[12][12]={
	{E,S,S,S,S,S,S,S,S,S,S,S},                                           //?
	{B,B,B,S,S,S,S,S,S,S,S,S},                                          //+
    {B,B,B,S,S,S,S,S,S,S,S,S},                                          //-
	{B,B,B,B,B,S,S,S,S,S,S,S},                                          //*
	{B,B,B,B,B,S,S,S,S,S,S,S},                                          ///
	{B,B,B,B,B,E,E,E,E,E,E,E},                                          //sqrt
	{B,B,B,B,B,E,E,E,E,E,E,E},                                          //sin
	{B,B,B,B,B,E,E,E,E,E,E,E},                                          //cos
	{B,B,B,B,B,E,E,E,E,E,E,E},                                          //tan        
	{B,B,B,B,B,E,E,E,E,E,E,E},                                          //cot           
	{B,B,B,B,B,E,E,E,E,E,E,E},                                          //ln
	{B,B,B,B,B,E,E,E,E,E,E,E}                                           //log
};
//Myoperator temp = Myoperator("?",0,-1);
Myoperator optrs[12]={Myoperator("?",0,0),Myoperator("+",2,1),Myoperator("-",2,2),Myoperator("*",2,3),Myoperator("/",2,4),
Myoperator("sqrt",1,5),Myoperator("sin",1,6),Myoperator("cos",1,7),Myoperator("tan",1,8),Myoperator("cot",1,9),
Myoperator("ln",1,10),Myoperator("log",1,11)};

////////////////////////////////////////////////////////////////////////////
// Mydata

Mydata::Mydata()
{
	
	countleft=0;
	countright=0;
}

Mydata::~Mydata()
{
}
double Mydata::Convert(CString p)
{
	return atof(p);
}
Precedence Mydata::Get_priority(int op1,int op2)
{
	return op[op1][op2];
}
void Mydata::Initstack()
{
	if(!optr.empty()) optr.pop();
	if(!number.empty()) optr.pop();
	optr.push(optrs[0]);
}
CString Mydata::Get_result()
{
     CString s;
	 s.Format("%lf",number.top());
	 return s;
}
void Mydata::Pushnumber(double b)
{
	number.push(b);
}
void Mydata::Pushoptr(Myoperator &op)
{
   if(op.Get_item()!=1)
   {
	   while(Get_priority(optr.top().Get_index(),op.Get_index())==B)
   {
	   number.push(Singlecalculate());
   }
	optr.push(op);
   }
   else
   {
	   optr.push(op);
	   double x=Singlecalculate();
	   number.push(x);
   }
}
double Mydata::Singlecalculate()
{
	double a,b;
    if(optr.top().Get_item()==2)
	{
		a=number.top();
		number.pop();
		b=number.top();
		number.pop();
	}
	else if(optr.top().Get_item()==1)
	{
		a=number.top();
		number.pop();
		b=0;
	}
	else if(optr.top().Get_item()==0)
	{
		a=0;
		b=0;
	}
	CString opname=optr.top().Get_name();
	optr.pop();
	if(opname=="+")
       return a+b;
	else if(opname=="-")
		return b-a;
	else if(opname=="*")
		return a*b;
	else if(opname=="/")
		return b/a;
    else if(opname=="sqrt")
		return sqrt(a);
    else if(opname=="sqrt")
		return sqrt(a);
    else if(opname=="sin")
		return sin(a/180*PI);
    else if(opname=="cos")
		return cos(a/180*PI);
    else if(opname=="tan")
		return sin(a/180*PI)/cos(a/180*PI);
    else if(opname=="cot")
		return cos(a/180*PI)/sin(a/180*PI);
    else if(opname=="ln")
		return log(a);
    else if(opname=="log")
		return log10(a);
	else 
		return 0.0;
}
	
double Mydata::Allcalculate()
{
	while(optr.top().Get_name()!="?")
		number.push(Singlecalculate());
	if(number.empty())
		return 0;
	else
	    return number.top();
}

	
BEGIN_MESSAGE_MAP(Mydata, CEdit)
	//{{AFX_MSG_MAP(Mydata)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Mydata message handlers

⌨️ 快捷键说明

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