d=pow(a,b);
returntrue;
default:
returnfalse;
}
}
if(array[num-40][pre-40]>0)//将符号压栈
{
op.Add((char)num);
}
else
{
charmid;
while(array[num-40][pre-40]<=0)
{
if(pre==40&&num==41)//排除(数字)情况,保留数字()非法情况
{
if(i>0)
{
intMyCheck=(int)name.at(i-1);
if(MyCheck<=57&&MyCheck>=48||MyCheck==41)
{
break;
}
else
throwCString("括号中的表达式不合法");
}
else
throwCString("出现未匹配的)");
}
try
{
op.Delete(mid);
}
catch(CStringe)
{
throwCString("出现未匹配的)");
}
doubledata1,data2;
try
{
data.Delete(data2);
data.Delete(data1);
}
catch(CStringe)
{
throwCString("缺少操作数");
}
if(!
jisuan(data1,data2,mid,data1))
{
result=0;
throwCString("表达式异常");
}
data.Add(data1);
pre=(int)op.Top();
}
//CompuetrDlg.cpp:
实现文件
//
#include"stdafx.h"
#include"Compuetr.h"
#include"CompuetrDlg.h"
#include"counter.h"
#include
#include".\compuetrdlg.h"
usingnamespacestd;
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
voidCCompuetrDlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND,reinterpret_cast(dc.GetSafeHdc()),0);
//使图标在工作矩形中居中
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//绘制图标
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CRectrect;
CPaintDCdc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB());//设置背景颜色
CDialog:
:
OnPaint();
CDialog:
:
OnPaint();
}
}
//Compuetr.cpp:
定义应用程序的类行为。
//
#include"stdafx.h"
#include"Compuetr.h"
#include"CompuetrDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
//CCompuetrApp
BEGIN_MESSAGE_MAP(CCompuetrApp,CWinApp)
ON_COMMAND(ID_HELP,CWinApp:
:
OnHelp)
END_MESSAGE_MAP()
//CCompuetrApp构造
CCompuetrApp:
:
CCompuetrApp()
{
//TODO:
在此处添加构造代码,
//将所有重要的初始化放置在InitInstance中
}
//唯一的一个CCompuetrApp对象
CCompuetrApptheApp;
//CCompuetrApp初始化
BOOLCCompuetrApp:
:
InitInstance()
{
//如果一个运行在WindowsXP上的应用程序清单指定要
//使用ComCtl32.dll版本6或更高版本来启用可视化方式,
//则需要InitCommonControls()。
否则,将无法创建窗口。
InitCommonControls();
CWinApp:
:
InitInstance();
//标准初始化
//如果未使用这些功能并希望减小
//最终可执行文件的大小,则应移除下列
//不需要的特定初始化例程
//更改用于存储设置的注册表项
//TODO:
应适当修改该字符串,
//例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
CCompuetrDlgdlg;
m_pMainWnd=&dlg;
INT_PTRnResponse=dlg.DoModal();
if(nResponse==IDOK)
{
//TODO:
在此放置处理何时用“确定”来关闭
//对话框的代码
}
elseif(nResponse==IDCANCEL)
{
//TODO:
在此放置处理何时用“取消”来关闭
//对话框的代码
}
//由于对话框已关闭,所以将返回FALSE以便退出应用程序,
//而不是启动应用程序的消息泵。
returnFALSE;
}
//stack
#include
#include
#include
usingnamespacestd;
template
classLinkedStack;
template
classNode
{
friendLinkedStack;
private:
Tdata;
Node*link;
};
template
classLinkedStack
{
public:
LinkedStack(){top=0;length=0;}
~LinkedStack();
boolisEmpty()const
{
returntop==0;
}
boolisFull()const;
TTop()const;
LinkedStack&Add(constT&x);
LinkedStack&Delete(T&x);
intgetLength(){returnlength;}
private:
Node*top;
intlength;
};
template
LinkedStack:
:
~LinkedStack()
{
Node*next;
while(top)
{
next=top->link;
deletetop;
top=next;
}
}
template
boolLinkedStack:
:
isFull()const
{
try
{
Node*p=newNode;
deletep;
returnfalse;
}
catch(bad_alloc&e)
{
returntrue;
}
}
template
TLinkedStack:
:
Top()const
{
if(isEmpty())
throwCString("堆栈空异常!
");
returntop->data;
}
template
LinkedStack&LinkedStack:
:
Add(constT&x)
{
Node*p=newNode;
p->data=x;
p->link=top;
top=p;
length++;
return*this;
}
template
LinkedStack&LinkedStack:
:
Delete(T&x)
{
if(isEmpty())
throwCString("堆栈空异常!
");
x=top->data;
Node*p=top;
top=top->link;
deletep;
length--;
return*this;
}
5总结与体会
计算器虽然是我们生活中常见的一样工具,但不知道实现这样一个工具,说实话不是很简单,对于我这个学习一般的人来说,很难!
!
计算器虽小,但包含了一些简单却又重要的功能,包括加减乘除,次方,括号等一些基本功能,它方便了大众的日常生活中遇到的计算问题。
完成这个任务,说实话很艰难,但挺了过来,坚持了过来,所谓凡事贵在坚持,所以要学会坚持,坚持就是胜利。
一个人的力量是有限的,学会与人合作,积极请教他人谦虚学习是必要的,它只会让你更加的进步,会更好。
所以这个任务让我学到了很多,坚持,努力,合作,进取,积极向上,天下无难事,只要肯用心!
!