MATLAB大作业班级:姓名:学号:计算器题目本题目通过MATLAB的gui程序设计较为简单,在gui设计中主要用到三种控件,文本编辑框(edittext),静态文本框(Statictext),命令按钮(pushbutton)。然后在通过各个按钮的回调函数,实现简单的计算功能。1、功能介绍(1)具有友好的用户图形界面。实现十进制数的加、减、乘、除、乘方、开方等简单计算。(2)具有科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行。(注:三角函数计算的是弧度而不是角度)。(3)有清除键,能清除操作。2、功能实现程序由两个部分组成:MATLAB代码(.m文件)和GUI图形(.fig)。程序使用的流程:直接利用图形界面中的按键键入所需数值、运算符等即可得出结果。备注:软件版本:MATLAB2011b首先用MATLABGUI功能,在绘制一个静态文本框和一个文本编辑框,以及33个命令按钮,调整好各控件大小、颜色,整体布局如图所示:(附录中有相关属性修改介绍)然后通过双击各个按钮来改写其属性,在m文件中编写其回调函数,最后在运行调试。2.1各功能界面设计GUI设计界面:注:底部边框用(Panel)工具添加,有两种设计顺序。(1、先加底部边框,再在底部边框上画功能键。2、先画功能键,布好局,画底框,全选功能键拖动到底框上。)2.2各功能模块实现(可根据需要增减功能键)算法设计:1.数字键设计:0—9以及小数点函数都一样,只是参数不同:例如:按键‘1’响应:globaljjtextString=get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','1');elsetextString=strcat(textString,'1');set(handles.text1,'String',textString)endjj=0;2.四则运算函数:‘+’功能响应:textString=get(handles.text1,'String');textString=strcat(textString,'+');set(handles.text1,'String',textString)‘-’功能响应:textString=get(handles.text1,'String');textString=strcat(textString,'-');set(handles.text1,'String',textString)‘×’功能响应:textString=get(handles.text1,'String');textString=strcat(textString,'*');set(handles.text1,'String',textString)‘÷’功能响应:textString=get(handles.text1,'String');textString=strcat(textString,'/');set(handles.text1,'String',textString)3.科学计算函数:例如:‘sin’功能响应:textString=get(handles.text1,'String');if(strcmp(textString,'0.')==1)set(handles.text1,'String','0.');elsea=strread(textString,'%f');a=sin(a);set(handles.text1,'String',a)end4.退格键(DEL):通过取屏幕值,计算出其字符长度,然后取其前N-1项的值来实现退格:globaljjtextString=get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','0.');elsess=char(textString);l=length(textString);textString=ss(1:l-1);set(handles.text1,'String',textString)endjj=0;5.清屏键函数(AC):set(handles.text1,'String','0.');2.3各模块程序添加方法选中一个需添加程序的功能键,右击,ViewCallbacks,Callback,出现如下图所示界面。(红色框中为所需添加的程序)其他功能键添加方法类似。2.4各模块实现结果(1)数字键:(2)四则运算函数:(3)科学计算函数:Cos0的计算结果:arctan2的计算结果:经过计算,这些结果均与实际结果相吻合,计算器的功能实现的较为完好。3、程序总结:(1)小数点可以连续输入。解决方法是:用strfind函数查看文本框里有几个小数点,如果已经有一个了,再按小数点就保持不变。(2)按过运算符号后一个数不等于一个数,比如:输入1,按等号,会出来一个3,经过长时间分析得知,这是由于在按运算符号时,系统记录了文本框里的数但没有清空,才会出现这种问题。解决方法是再申请一个不同于加减乘除的另一个符号,并将按过运算符后记录的数值置0。4、心得体会:通过本次的MATLAB课程设计,让我对MATLAB尤其是其GUI设计的功能有了进一步的了解,认识到了它功能的强大。在MATLAB简单计算器的设计中,了解了关于MATLAB图形用户界面的部分控件的使用方法;利用MATLAB的GUI提供的很多实用的控件,方便用于设计属于自己的图形界面和自己所需要实现的功能。5、附录:(1)功能块属性修改表(双击功能块可进入)(2)主要程序functionvarargout=untitled(varargin)%UNTITLEDM-fileforuntitled.fig%UNTITLED,byitself,createsanewUNTITLEDorraisestheexisting%singleton*.%%H=UNTITLEDreturnsthehandletoanewUNTITLEDorthehandleto%theexistingsingleton*.%%UNTITLED('Property','Value',...)createsanewUNTITLEDusingthe%givenpropertyvaluepairs.Unrecognizedpropertiesarepassedvia%varargintountitled_OpeningFcn.Thiscallingsyntaxproducesa%warningwhenthereisanexistingsingleton*.%%UNTITLED('CALLBACK')andUNTITLED('CALLBACK',hObject,...)callthe%localfunctionnamedCALLBACKinUNTITLED.Mwiththegiveninput%arguments.%%*SeeGUIOptionsonGUIDE'sToolsmenu.ChooseGUIallowsonlyone%instancetorun(singleton).%%Seealso:GUIDE,GUIDATA,GUIHANDLES%Edittheabovetexttomodifytheresponsetohelpuntitled%LastModifiedbyGUIDEv2.519-Dec-201311:25:45%Begininitializationcode-DONOTEDITgui_Singleton=1;gui_State=struct('gui_Name',mfilename,...'gui_Singleton',gui_Singleton,...'gui_OpeningFcn',@untitled_OpeningFcn,...'gui_OutputFcn',@untitled_OutputFcn,...'gui_LayoutFcn',[],...'gui_Callback',[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});end%Endinitializationcode-DONOTEDIT%---Executesjustbeforeuntitledismadevisible.functionuntitled_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%vararginunrecognizedPropertyName/PropertyValuepairsfromthe%commandline(seeVARARGIN)%Choosedefaultcommandlineoutputforuntitledhandles.output=hObject;%Updatehandlesstructureguidata(hObject,handles);%UIWAITmakesuntitledwaitforuserresponse(seeUIRESUME)%uiwait(handles.figure1);globaljj;set(handles.text1,'String','0.');jj=0;%---Outputsfromthisfunctionarereturnedtothecommandline.functionvarargout=untitled_OutputFcn(hObject,eventdata,handles)%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%Getdefaultcommandlineoutputfromhandlesstructurevarargout{1}=handles.output;%---Executesonbuttonpressinpushbutton1.functionpushbutton1_Callback(hObject,eventdata,handles)%hObjecthandletopushbutton1(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)globaljjtextString=get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','1');elsetextString=s