计算器.docx

上传人:b****5 文档编号:7540469 上传时间:2023-01-24 格式:DOCX 页数:22 大小:272.88KB
下载 相关 举报
计算器.docx_第1页
第1页 / 共22页
计算器.docx_第2页
第2页 / 共22页
计算器.docx_第3页
第3页 / 共22页
计算器.docx_第4页
第4页 / 共22页
计算器.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

计算器.docx

《计算器.docx》由会员分享,可在线阅读,更多相关《计算器.docx(22页珍藏版)》请在冰豆网上搜索。

计算器.docx

计算器

成绩

 

课程设计报告

 

题目数学计算器的开发

课程名称

院部名称

专业

班级

学生姓名

学号

课程设计地点

课程设计学时

指导教师

金陵科技学院教务处制

1.课程设计应达到的目的

本课程是为自动化专业本科生开设的专业课程设计课。

通过本课程的课程设计实践帮助学生巩固关于数据结构、算法、程序设计的基础知识。

通过本课程设计,学生可以初步掌握开发一个小型实用系统的基本方法,提高运用编程软件实现GUI程序设计的能力。

2.课程设计题目及要求

设计题目:

数学计算器的开发。

2.1课程设计的基本要求:

A.熟悉和掌握MATLAB程序设计方法。

B.掌握MATLABGUI程序设计。

2.2课程设计的内容

要求利用MATLABGUI设计实现一个图形用户界面的计算器程序,要求实现:

A.具有友好的用户图形界面。

实现十进制数的加、减、乘、除、乘方、取模等简单计算。

B.科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行。

C.有清除键,能清除操作,并对不正确的表达式能指出其错误原因。

2.3题目分析

本题目通过MATLAB的gui程序设计较为简单,在gui设计中主要用到三种控件,显示框用到文本编辑框(edittext),说明框用到静态文本框(Statictext),数字以及运算等按钮用到命令按钮(pushbutton)。

然后在通过各个按钮的回调函数,实现简单的计算功能。

2.4掌握书写程序设计开发文档的能力。

3.课程设计内容与步骤

3.1首先用MATLABGUI功能,在绘制一个静态文本框和一个文本编辑框,以及33个命令按钮,调整好各控件大小、颜色,整体布局如图所示:

然后通过双击个按钮来改写其属性,在m文件中编写其回调函数,最后在运行调试。

3.2具体设计

3.2.1各功能界面设计

GUI设计界面:

3.2.2各功能模块实现

算法设计:

A.数字键1-9以及‘(’、‘)’设计,以0为例,其他只是参数不同;

globaljj

a=get(handles.edit1,'String')

if(strcmp(a,'0')==1)|(jj==3)

set(handles.edit1,'String','1')

else

a=strcat(a,'1')

set(handles.edit1,'String',a)

end

jj=0

B.四则运算:

+、-、*,以‘+’为例,其他只是参数不同

globaljj

a=get(handles.edit1,'String')

s1=strcat(a,'+')

if(jj==0)|(jj==3)

set(handles.edit1,'String',s1)

jj=2

end

C.三角函数:

‘sin’、‘cos’,以‘sin’为例

globaljj

a=get(handles.edit1,'String')

b=eval(a)

c=sin(b*pi/180)//计算余弦时换成c=cos(b*pi/180)

set(handles.edit1,'String',num2str(c))

jj=3

D.三角函数:

‘tan’、‘cot’,以‘tan’为例

globaljj

a=get(handles.edit1,'String')

b=eval(a)

ifmod(b,90)~=0//参数不可为90的整数倍,若为余切则不可为180的

a=tan(b*pi/180)//整数倍

set(handles.edit1,'String',num2str(a))

else

set(handles.edit1,'String','notinthevary')

end

jj=3

E.清屏函数

set(handles.edit1,'String','0');

F.退格键:

通过取屏幕值,计算出其字符长度,然后取其前N-1项的值来实现退格:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0.')==1)&(jj==0)

set(handles.edit1,'String','0.');

else

ss=char(textString);

l=length(textString);

textString=ss(1:

l-1);

set(handles.edit1,'String',textString)

end

jj=0;

3.3各模块实现结果

A.数字键:

 

B.四则运算函数:

C.科学计算函数:

sin30的计算结果是0.5

4.结果分析

测试结果:

4.1计算(1+9)/5

计算结果=2

4.2计算3*4

计算结果=12

4.3arcsin0.5计算结果为30

4.4计算3/0

计算结果:

显示‘error’表明除数不能为0

4.5计算1+2^2

计算结果为5

4.6计算sqrt(8)结果为2.8284

4.7计算sqrt(-6)结果:

显示‘error’表明负数不可开平方

4.8计算Log2(4)结果为2

4.9计算arcsin(-4)结果为计算结果:

显示‘error’表明参数超过定义域

经过计算,这些结果均与实际结果相吻合,计算器的功能实现的较为完好。

5.课程设计源代码

0:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)

set(handles.edit1,'String','0');

else

textString=strcat(textString,'0');

set(handles.edit1,'String',textString)

end

jj=0;

1:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)

set(handles.edit1,'String','1');

else

textString=strcat(textString,'1');

set(handles.edit1,'String',textString)

end

jj=0;

2:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)

set(handles.edit1,'String','2');

else

textString=strcat(textString,'2');

set(handles.edit1,'String',textString)

end

jj=0;

3:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)

set(handles.edit1,'String','3');

else

textString=strcat(textString,'3');

set(handles.edit1,'String',textString)

end

jj=0;

4:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)

set(handles.edit1,'String','4');

else

textString=strcat(textString,'4');

set(handles.edit1,'String',textString)

end

jj=0;

5:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)

set(handles.edit1,'String','5');

else

textString=strcat(textString,'5');

set(handles.edit1,'String',textString)

end

jj=0;

6:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)

set(handles.edit1,'String','6');

else

textString=strcat(textString,'6');

set(handles.edit1,'String',textString)

end

jj=0;

7:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)

set(handles.edit1,'String','7');

else

textString=strcat(textString,'7');

set(handles.edit1,'String',textString)

end

jj=0;

8:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)

set(handles.edit1,'String','8');

else

textString=strcat(textString,'8');

set(handles.edit1,'String',textString)

end

jj=0;

9:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)

set(handles.edit1,'String','9');

else

textString=strcat(textString,'9');

set(handles.edit1,'String',textString)

end

jj=0;

A.四则运算函数:

+:

globaljj

a=get(handles.edit1,'String')

if(jj==2)

s1=a

else

s1=strcat(a,'+')

set(handles.edit1,'String',s1)

end

jj=2

-:

globaljj

a=get(handles.edit1,'String')

if(jj==2)

s1=a

else

s1=strcat(a,'-')

set(handles.edit1,'String',s1)

end

jj=2

*:

globaljj

a=get(handles.edit1,'String')

if(jj==2)

s1=a

else

s1=strcat(a,'*')

set(handles.edit1,'String',s1)

end

jj=2

/:

globaljj

a=get(handles.edit1,'String')

if(jj==2)

s1=a

else

s1=strcat(a,'/')

set(handles.edit1,'String',s1)

end

jj=2

=:

globaljj

globalx

a=get(handles.edit1,'String')

b=eval(a)

if(x==1)&(b==inf)

set(handles.edit1,'String','NaN')

else

set(handles.edit1,'String',num2str(b))

end

jj=1

x=0

C.科学计算函数:

Sin函数

globaljj

a=get(handles.edit1,'String')

b=eval(a)/180*pi

c=sin(b)

set(handles.edit1,'String',num2str(c))

jj=1

Cos函数

globaljj

a=get(handles.edit1,'String')

b=eval(a)/180*pi

c=cos(b)

set(handles.edit1,'String',num2str(c))

jj=1

Tan函数

globaljj

a=get(handles.edit1,'String')

d=eval(a)

if(d==90)

set(handles.edit1,'String','error')

else

b=d/180*pi;

c=tan(b);

set(handles.edit1,'String',num2str(c));

end

jj=1

Cot函数

globaljj

a=get(handles.edit1,'String')

b=eval(a)/180*pi

c=cot(b)

set(handles.edit1,'String',num2str(c))

jj=1

Arcsin函数

globaljj

a=get(handles.edit1,'String')

b=eval(a)

c=asin(b)*180/pi

set(handles.edit1,'String',num2str(c))

jj=1

Arccos函数

globaljj

a=get(handles.edit1,'String')

b=eval(a)

c=acos(b)*180/pi

set(handles.edit1,'String',num2str(c))

jj=1

Arctan函数

globaljj

a=get(handles.edit1,'String')

b=eval(a)

c=atan(b)*180/pi

set(handles.edit1,'String',num2str(c))

jj=1

Arccot函数

globaljj

a=get(handles.edit1,'String')

b=eval(a)

c=acot(b)*180/pi

set(handles.edit1,'String',num2str(c))

jj=1

平方

a=get(handles.edit1,'String')

s1=strcat(a,'^2')

set(handles.edit1,'String',s1)

开方

globaljj

a=get(handles.edit1,'String')

b=sqrt(eval(a))

set(handles.edit1,'String',num2str(b))

jj=1

平方

a=get(handles.edit1,'String')

s1=strcat(a,'^2')

set(handles.edit1,'String',s1)

Log10函数

globaljj

a=get(handles.edit1,'String')

b=eval(a)

c=log10(b)

set(handles.edit1,'String',num2str(c))

jj=1

Log2函数

globaljj

a=get(handles.edit1,'String')

b=eval(a)

c=log2(b)

set(handles.edit1,'String',num2str(c))

jj=1

D.退格键:

通过取屏幕值,计算出其字符长度,然后取其前N-1项的值来实现退格:

globaljj

textString=get(handles.edit1,'String');

if(strcmp(textString,'0.')==1)&(jj==0)

set(handles.edit1,'String','0.');

else

ss=char(textString);

l=length(textString);

textString=ss(1:

l-1);

set(handles.edit1,'String',textString)

end

jj=0;

E.清屏键函数:

set(handles.edit1,'String','')

6.问题和解决方法

在遇到报错的情况下,再按数字键,后面还是会出来数字,按照常理,报错后再按数字,应该只显示数字。

所以在对于数字的编程中,需要加判断语句,使这种情况消失。

如果没按左括号就按右括号则程序应该提示没按左括号,具体方法是在左括号的函数中设置一个全局变量f,按下左括号则f=1,然后在右括号的函数中判断f的值,f=0则表示没按左括号,此时提示没按左括号

7.心得体会

通过本次的课程设计使我加深了对MATLAB在自动控制原理中的应用。

学会了如何画控制系统的原理框图以及在其基础上的模拟和仿真。

在编写程序的过程中,遇到了各种各样的问题,有的是因为考虑不周到,有的则是因为粗心大意。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1