目录计算器的效果图 ..................................... 错误!未定义书签。
一、GUI设计界面: (3)1.打开GUI (3)2.添加按钮 (3)3.根据按钮的作用及视觉效果做一定的修改: (4)4.保存、添加功能函数 (4)(1)数字键编写 (4)(2)符号键的编写 (4)(3)运算符“=”的编写 (5)(4)按键“←back”的编写 (5)(5)按键“清空”的编写 (5)(6)按键“退出”的编写 (5)(7)按键“二进制数转十进制数”的编写 (5)(8)按键“十进制数转二进制数”的编写 (5)二、计算器的使用 (6)除法运算(÷) (6)平方运算(^2) (6)函数cos (∏/3)的计算 (7)函数arctan (∏/3)的计算 (7)以2为底的对数的计算(log 2) (8)十进制数转二进制数的计算(调用dec2bin函数) (8)二进制数转十进制数的计算(调用bin2dec函数) (8)三、附各按键的程序源代码 (9)四、问题和解决方法 (15)五、心得体会 (15)参考文献 (15)计算器的效果图:一、GUI设计界面:1.打开GUI输入Guide 回车或者在工具栏上点击图标打开Guide 窗口:2.添加按钮3.根据按钮的作用及视觉效果做一定的修改:双击按钮(Puch Button)进入按键属性修改显示字符串大小、字体和颜色,然后对按钮的位置进行排布,尽量使按钮集中在静态文本框下面。
4.保存、添加功能函数把做好的按钮及静态文本框保存后自动弹出Editor的M文本,对然后对相应的pushbutton添加功能函数。
以下是相应按钮的功能函数。
(1)数字键编写在function pushbutton1_Callback(hObject, eventdata, handles)下输入:textString = get(handles.text1,'String');textString =strcat(textString,'0');set(handles.text1,'String',textString)这是使用句柄handles指向对象text1,并以字符串形式来存储数据文本框text1的容,并存储数个“0”,然后由set(handles.text1,'String','textString'在text1中输出。
同理,分别在function pushbutton2~10_Callback(hObject, eventdata, handles)下给1~9数字按键下编写此类程序。
(2)符号键的编写function pushbutton12_Callback(hObject, eventdata, handles)textString = get(handles.text1,'String');textString =strcat(textString,'÷');set(handles.text1,'String',textString)strcat的作用是将两个字符串连接起来,就是在已输入的存储数据textString 后添加“÷”进行运算。
然后执行set(handles.text1,'String',textString)。
符号键‘-’、‘*’、‘/’与‘÷’的运算函数类似。
“平方运算”,主要是由“^2”功能实现。
(3)运算符“=”的编写textString = get(handles.text1,'String');ans =eval(textString);“eval”的作用是将符号表达式转换成数值表达式。
再由set(handles.text1,'String',ans)输出。
(4)按键“←back”的编写textString=get(handles.text1, 'String')w=length(textString)t=char(textString)textString=t(1:w-1) %将w个字符串转成w-1个,即删除了末位字符set(handles.text1,'String',textString)(5)按键“清空”的编写set(handles.text1,'String','')(6)按键“退出”的编写close(gcf);(7)按键“二进制数转十进制数”的编写textString=get(handles.text1,'String')e = bin2dec(textString);set(handles.text1,'String',e);(8)按键“十进制数转二进制数”的编写textString = get(handles.text1,'String');textString = strcat(textString,'dec2bin(');set(handles.text1,'String',textString)二、计算器的使用除法运算(÷)平方运算(^2)函数cos (∏/3)的计算函数arctan (∏/3)的计算以2为底的对数的计算(log 2)十进制数转二进制数的计算(调用dec2bin函数)二进制数转十进制数的计算(调用bin2dec函数)经过计算,这些结果均与实际结果相吻合,计算器的功能实现的完好且能实现较大数值的运算,计算结果用科学技术法表示。
三、附各按键的程序源代码按键“0-9、+、-、×、÷、.、= 、x^2 ”(通过get函数获得输入的字符,函数strcat 获得相应字符,并用set函数进行显示输出):function pushbutton1_Callback(hObject, eventdata, handles)textString=get(handles.text1,'String')textString=strcat(textString,'0')set(handles.text1,'String',textString)function pushbutton2_Callback(hObject, eventdata, handles)textString=get(handles.text1,'String')textString=strcat(textString,'1')set(handles.text1,'String',textString)function pushbutton3_Callback(hObject, eventdata, handles)textString=get(handles.text1,'String')textString=strcat(textString,'2')set(handles.text1,'String',textString)function pushbutton4_Callback(hObject, eventdata, handles)textString=get(handles.text1,'String')textString=strcat(textString,'3')set(handles.text1,'String',textString)function pushbutton5_Callback(hObject, eventdata, handles)textString=get(handles.text1,'String')textString=strcat(textString,'4')set(handles.text1,'String',textString)function pushbutton6_Callback(hObject, eventdata, handles)textString=get(handles.text1,'String')textString=strcat(textString,'5')set(handles.text1,'String',textString)function pushbutton7_Callback(hObject, eventdata, handles)textString=get(handles.text1,'String')textString=strcat(textString,'6')set(handles.text1,'String',textString)function pushbutton8_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')textString=strcat(textString,'7')set(handles.text1,'String',textString)function pushbutton9_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')textString=strcat(textString,'8')set(handles.text1,'String',textString)function pushbutton10_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')textString=strcat(textString,'9')set(handles.text1,'String',textString)function pushbutton11_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')textString=strcat(textString,'+')set(handles.text1,'String',textString)function pushbutton12_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')textString=strcat(textString,'-')set(handles.text1,'String',textString)function pushbutton13_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')textString=strcat(textString,'*')set(handles.text1,'String',textString)function pushbutton14_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')textString=strcat(textString,'/')set(handles.text1,'String',textString)function pushbutton15_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')textString=strcat(textString,'.')set(handles.text1,'String',textString)按键“=”:function pushbutton16_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')s=eval(textString)set(handles.text1,'String',s)按键“x^2”:function pushbutton17_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')textString=strcat(textString,'^2')set(handles.text1,'String',textString)退位键“←back”:function pushbutton18_Callback(hObject, eventdata, handles) textString=get(handles.text1,'String')w=length(textString)t=char(textString)textString=t(1:w-1)set(handles.text1,'String',textString)清空键:function pushbutton19_Callback(hObject, eventdata, handles)set(handles.text1,'String','')退出键:function pushbutton20_Callback(hObject, eventdata, handles) close(gcf);% hObject handle to pushbutton20 (see GCBO)% handles structure with handles and user data (see GUIDATA)科学计算函数:按键“√”:通过get函数获得输入的字符,函数strread获得输入字符,并用sqrt函数计算结果,set函数进行显示输出textString = get(handles.text1,'String');if(strcmp(textString,'0')==1)set(handles.text1,'String','0') ;elsea = strread(textString, '%f');a=sqrt(a);set(handles.text1,'String',a)end按键“sin”(通过get函数获得输入的字符,函数strread获得输入字符,并用sin函数计算结果,set函数进行显示输出):textString = get(handles.text1,'String');textString = strcat(textString,'sin(');set(handles.text1,'String',textString)按键“cos”:textString = get(handles.text1,'String');textString = strcat(textString,'(');set(handles.text1,'String',textString)按键“tan”:textString = get(handles.text1,'String');if((strcmp(textString,'1.57')==1)||(strcmp(textString,'-1.57')==1)) set(handles.edit1,'String','inf');elsetextString = strcat(textString,'tan(');set(handles.text1,'String',textString)end按键“arcsin”:textString = get(handles.text1,'String');textString = strcat(textString,'asin(');set(handles.text1,'String',textString)按键“arccos”:textString = get(handles.text1,'String');textString = strcat(textString,'acos(');set(handles.text1,'String',textString)按键“arctan”:textString = get(handles.text1,'String'); textString = strcat(textString,'atan('); set(handles.text1,'String',textString)按键“log2”:textString = get(handles.text1,'String'); if(strcmp(textString,'0')==1)set(handles.text1,'String','error') ; elsea = strread(textString, '%f');a=log2(a);set(handles.text1,'String',a)end按键“(”: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')e = bin2dec(textString);set(handles.text1,'String',e);按键“十进制数转二进制数”:textString = get(handles.text1,'String'); textString = strcat(textString,'dec2bin('); set(handles.text1,'String',textString)四、问题和解决方法1.本次课程设计中开始时遇到的问题是数据进行清零后,再输入其他的数据,清零后的字符‘0’仍会保留,会影响其他数据,解决办法是将数据用空格替换掉就实现了清空: set(handles.text1,'String','')2.在定义正弦余弦等函数的时候,需要注意其定义域,值域的问题。