基于matlab的计算器制作.docx

上传人:b****7 文档编号:9551675 上传时间:2023-02-05 格式:DOCX 页数:25 大小:21.02KB
下载 相关 举报
基于matlab的计算器制作.docx_第1页
第1页 / 共25页
基于matlab的计算器制作.docx_第2页
第2页 / 共25页
基于matlab的计算器制作.docx_第3页
第3页 / 共25页
基于matlab的计算器制作.docx_第4页
第4页 / 共25页
基于matlab的计算器制作.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于matlab的计算器制作.docx

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

基于matlab的计算器制作.docx

基于matlab的计算器制作

......

 

基于MATLAB的计算器制作从入门到高级

 

项目一、建立GUI框架

 

1,双击MATLAB图标(本实例使用的是MATLAB

R2014),打开软件

 

2,打开GUI操作界面。

有两种方式:

 

a、在命令行窗口输入guide,然后点击回车。

b、先点击新建图标,在选择‘图形用户界面’。

得到如下窗口:

 

左上方有两个按钮:

‘新建GUI’,打‘开现有GUI’。

对于‘新

建GUI’:

下方的选择框内有你可以选择建立的GUI类型,

对于初学者一般选择第一个。

下方是用来设置保存文件位

置的。

 

.专业.专注.

......

 

对于‘打开现有GUI’:

初学者可能会在网上下载一些GUI源程序,使用‘打开现有GUI’,再浏览到文件所在位置便可。

 

3、构建GUI框架:

 

在选择新建GUI并且确定后,会弹出如下窗口:

 

.专业.专注.

......

 

在窗口的左边会有很多选项,可以一个个拖动编辑框内;

 

是不是发现这些选项发挥的作用刚好就是我们平常打开一

个网页或者一个软件进行操作时的选择按钮。

比较常见的有:

按钮、单选按钮、拖动条、弹出式菜单等。

看到这里细心地朋友就会发现,MATLABGUI似乎可以开发出大型软件哦,只要你有足够的想象力,当你从一个小白进阶到一个高手之后,你可以做到的。

 

本次计算器制作只需要用到静态文本(或者是动态文本)用来做显示器,按钮(用来操作)。

也可以添加一个面板用来修饰。

 

.专业.专注.

......

 

在拖出的选项上双击,会得出该选项的属性栏,比如说双击一个按钮选项,你会得到:

 

这个属性框比较复杂,没有必要一个个说清楚(有兴趣的可以自己研究,其实理解起来也挺简单的)

 

本次计算器制作,我们只需要知道以下几个:

 

a、BackgroundColor取值为颜色的预定义字符或RGB数值;缺省(就是默认的意思)值为浅灰色;

 

b、ForegroundColor取值为颜色的预定义字符或RGB数值,该属性定义控件对象标题字符的颜色;缺省值为黑色;

 

c、String取值为字符串矩阵或块数组,定义控件对象标题或选项内容;

 

d、FontName取值为控件标题等字体的字库名;

 

.专业.专注.

......

 

e、FontSize取值为数值,控制字体大小;

 

f、Tag取值为字符串,定义了控件的标识值,在任何

程序中都可以通过这个标识值控制该控件对象;

 

g、Style取值可以是pushbutton(缺省值),

radiobutton,checkbox,edit,text,slider,frame,

popupmenu或listbox;

 

项目二、简单加法器的制作

 

1、框架准备

 

‘加法器’:

使用静态文本,在string处将文本修改为(加法器),在fontsize可修改字体大小,在BackgroundColor处可修改背景颜色。

 

‘白色编辑框’:

使用可编辑文本,同样在string处把文本清除,在fontsize修改字体大小。

 

.专业.专注.

......

 

‘加号(+)’、等‘号(=)’按钮:

同理按上述方法修改文本和字体大小。

 

2、程序准备:

 

先点击加号右键选择——查看回调——callback。

会得到绿色字体(一般为MATLAB程序注释)包围的程序,这个

 

+程序就编辑在此段程序的下方,代表点击该按钮后将要执行的命令。

 

%---Executesonbuttonpressinpushbutton1.functionpushbutton1_Callback(hObject,eventdata,handles)

%hObjecthandletopushbutton1(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduser

data(seeGUIDATA)

a=get(handles.edit1,'string');

b=get(handles.edit2,'string');

c=str2num(a)+str2num(b);

set(handles.edit3,'string',c)

 

3、程序阅读

a=get(handles.edit1,'string');

 

.专业.专注.

......

 

MATLAB的一大亮点就是它包含了大量功能强大的函数,

初学者在编写MATLAB命令时,只需要明确函数调用时的格

 

式,再输入相应的数据即可。

通常可以XX搜索函数格式、

功能及其用法。

或者借助MATLAB本身的help命令:

在命令

行窗口中输入helpget再按回车便会得到检索结果(再点

击get的参考页)。

 

这里有详细的函数介绍(全英文,要求有一定的英文水平哦)

 

回到程序段

 

‘a=表’示把右边的运算结果赋值给a

 

get是函数,()内为运用该函数时需要输入的一些相关量

 

handles.(注意符号哦,此处为点而不是逗号),为函数句柄,不深究。

 

.专业.专注.

......

 

edit1,'string':

表示获取edit1的字符串,'string'是

该函数内不能缺少的一个量,string字面意思是字符串,通俗来说就是edit1中的内容为字符串。

这里又涉及到‘edit1’和‘字符串’两个概念

 

‘edit1’——双击‘编辑框’按钮打开属性:

找到如下两个选项

 

上文提到Tag取值为字符串,定义了控件的标识值,在任

何程序中都可以通过这个标识值控制该控件对象;既然要对可编辑文本进行操作,那么函数中自然免不了加入文本的标识值(记住它放在get函数中的位置就行)

 

字符串——在MATLAB中一串数字可以有两个身份:

字和字符串。

当它是数字的时候可以正常的运算,而当他是字符时,就类似一段文字,没有办法对它进行运算处理的(当然作为字符串处理时有它的优势)。

我们可以调用

相关函数来达到字符串和数字的相互转换。

 

a=get(handles.edit1,'string');

 

通过以上分析,这条代码的意思就很明确了:

获取edit1内的字符串(string)再赋值给a

 

b=get(handles.edit2,'string');

 

.专业.专注.

......

 

意思同上

 

c=str2num(a)+str2num(b);

 

现在a和b的属性都是字符串。

函数str2num的功能是把字符转换成数字,转换之后就可以计算了。

 

set(handles.edit3,'string',c)

set为输出函数,格式与get类似,括号内多了一个c,意思很明显了,当然就是输出c的值了(这里数字可以不用转换可以直接作为字符串输出)。

 

4、代码总结:

 

1、a=get(handles.edit1,'string');

2、b=get(handles.edit2,'string');

3、c=str2num(a)+str2num(b);

4、set(handles.edit3,'string',c)

 

(1)、把edit1内的字符串赋值给a;

 

(2)、把edit2内的字符串赋值给b;

 

(3)、分别把a、b字符串转换成数字,相加后赋值

给c;

 

(4)、在edit3内输出字符串c。

 

.专业.专注.

......

 

5、运行结果

 

在a框中输入25,b框中输入23.再点击+,结果35显示在c框

 

项目三、简单可编辑计算器的制作

 

1、框架准备

 

材料:

可编辑文本、静态文本,按钮。

 

.专业.专注.

......

 

说明:

除了项目2介绍的操作方法外,在设置可编辑文本时,在属性栏中有:

 

可以设定对其方式,一般选定向右对齐。

 

2、程序准备

 

 

a=get(handles.edit1,'string');

b=eval(a);

set(handles.edit1,'string',b)

 

 

a=get(handles.edit1,'string');

a='';

set(handles.edit1,'string',a);

3、程序阅读:

 

 

a=get(handles.edit1,

'string');

把edit1中的字符串赋给a

 

.专业.专注.

......

 

b=eval(a);

 

set(handles.edit1,

 

'string',b)

 

计算字符串a的表达式,并传

递给b

 

在edit2中输出b

 

 

a=get(handles.edit1,

 

'string');

 

a='';

 

set(handles.edit1,

'string',a);

 

把edit1中的字符串赋给a

 

把a清空

 

在edit2中输出a

 

4、代码总结

 

eval:

串演算指令。

例:

 

a='12+13';(单引号表示12+13为一个字符串)

 

b=eval(a)

 

.专业.专注.

......

 

结果:

 

5、运行结果

 

1、输入12+23

 

2、点击计算按钮得到结果35

 

3、点击清空,回到初始状态

 

.专业.专注.

......

 

项目四、简易入门计算器的制作

 

1、框架准备:

 

材料:

面板、静态文本、按钮、辅助线

 

说明:

添加一个面板可以起到修饰作用,布局时一般使用辅助线对齐,从坐标处下拉即可。

 

2、程序准备:

 

 

a=get(handles.text1,'string');

b=strcat(a,'1');

set(handles.text1,'string',b)

 

(对应的其他数字只需修改:

 

b=strcat(a,'1');

 

.专业.专注.

......

 

处的‘1’,改成对应的数字即可)

 

 

a=get(handles.text1,'string');

b=strcat(a,'+');

set(handles.text1,'string',b)

 

(对应的其他数字只需修改:

 

b=strcat(a,'+');

处的‘+’,改成对应的符号即可)

 

 

a=get(handles.text1,'string');

b=eval(a)

set(handles.text1,'string',b)

 

 

a=get(handles.text1,'string');

n=length(a)

a=a(1:

n-1);

set(handles.text1,'string',a)

 

.专业.专注.

......

 

 

a=get(handles.text1,'string');

a='';

set(handles.text1,'string',a)

 

3、程序阅读

 

 

a=get(handles.text1,'string');%text1中字符串赋给

a

b=strcat(a,'1');%在字符串a后面再添加一个1

set(handles.text1,'string',b)%在text1中输出b

 

 

a=get(handles.text1,'string');

b=strcat(a,'+');

set(handles.text1,'string',b)

 

(解释同上)

 

 

.专业.专注.

......

 

a=get(handles.text1,'string');%text1中字符串赋给

a

 

n=length(a)%把a字符串的长度的值赋给n

a=a(1:

n-1);%a由n个字符变成n-1个,去掉最后一个set(handles.text1,'string',a)%在text1中输出a

 

与见项目三

 

4、代码总结

 

strcat函数:

字符串连接。

例:

 

Length函数:

本来是查看向量的维数,因为这里的字符串只有一行,所以可以用来查看字符串的长度。

例:

 

.专业.专注.

......

 

5、运行结果

 

点击按钮输入1+3-6*8/5:

 

点击=按钮

 

点击back按钮:

 

.专业.专注.

......

 

点击C按钮:

 

项目五、计算器的第一次改进

 

问题1:

当随意点击符号按钮是,静态文本中的显示结果显然不符合常理。

 

改进原则:

随意点击符号按钮时只出现最后一次点击的符

 

.专业.专注.

......

 

问题2、当输入的数字过多时无法全部显示。

 

改进原则:

字体达到一定数量时自动缩放

 

问题3、一般的计算器待机时,显示屏上都会显示0,但是项目四制作的计算器没有任何显示。

 

改进原则:

待机时静态文本中显示0

 

问题1解决方案

 

1、程序设计:

 

.专业.专注.

......

 

a=get(handles.text1,'string');

l=length(a);

if(a(l)=='+'||a(l)=='-'||a(l)=='*'||a(l)=='/')

a=a(1:

l-1);

end

%这是一个条件语句:

当在点击本按钮前,如果字符

串a的最后一个字符是‘+’或‘-’或‘*’或‘/’时,先删除此字符,再显示该按钮内的字符。

b=strcat(a,'*');

set(handles.text1,'string',b)

 

2、代码总结

 

上述代码使用了if循环,结合了或(||)判断字符

 

或(|)且(&)非(~)。

例:

 

3、运行结果:

 

 

.专业.专注.

......

 

问题2解决方案

 

程序设计(注:

此处以1键为例,其他数字键包括=、back键做同样的修改):

 

a=get(handles.text1,'string');

b=strcat(a,'1');

n=length(b)

if(n<=10)

 

size=16;

elseif(n>10&&n<=15)

size=14;

elseif(n>15&&n<=20)

size=12;

elseif(n>20&&n<=25)

size=10;

elseif(n>25&&n<=50)

size=8;

end

%此if循环是通过检测字符串b的长度来不断变换size的值,在下面的set函数中有

'fontsize',size

'fontsize':

字体大小控制标识

Size:

字体大小

 

.专业.专注.

......

 

set(handles.text1,'string',b,'fontsize',size)

 

代码总结:

 

set(handles.text1,'string',b,'fontsize',16)

如果我们把函数set通俗化有:

Set(句柄(handles).控制tag为text1的静态文本

(text1),‘静态文本以字符串的形式存在’

('string'),要输出的量(b),‘调整字体大小’

('fontsize'),字体的确切大小(数字)(size))

运行结果:

 

数字变多时,字体自动减小:

 

点击=输出结果,因结果字数较少,字体有自动变大

 

.专业.专注.

......

 

问题3解决方案

 

前期准备:

先双击静态文本,弹出属性框,找到如下选项

 

输入数字0,这样每次启动计算器是,显示器中就有0了。

 

程序准备:

 

(其它符号键做一致修改):

 

a=get(handles.text1,'string');

n=length(a)

if(n<=10)

size=16;

elseif(n>10&&n<=15)

size=14;

elseif(n>15&&n<=20)

 

.专业.专注.

......

 

size=12;

elseif(n>20&&n<=25)

size=10;

elseif(n>25&&n<=50)

size=8;

end

 

if(strcmp(a,'0')==1)

%判断字符串a是否是0

set(handles.text1,'string','1','fontsize',size)%如果是,在静态文本中输出1

else

a=strcat(a,'1');&如果不是,在字符串a后面再添加1

set(handles.text1,'string',a,'fontsize',size)

end

 

 

a=get(handles.text1,'string');

a='0';%不完全清空,最后在静态文本中输出0

set(handles.text1,'string',a)

 

a=get(handles.text1,'String');

 

.专业.专注.

......

 

n=length(a);

if(n<=10)

size=16;

elseif(n>10&&n<=15)

size=14;

elseif(n>15&&n<=20)

size=12;

elseif(n>20&&n<=25)

size=10;

elseif(n>25&&n<=50)

size=8;

end

if(strcmp(a,'0')==1)

%检查静态文本内的字符串是否为0

set(handles.text1,'String','0','fontsize',size)%如果是,输出0

else

a=a(1:

n-1);

 

%如果不是,删除字符串最后一位

set(handles.text1,'String',a,'fontsize',size)

if(n==1)

 

%如果文本中只剩下最后一位了

 

.专业.专注.

......

 

set(handles.text1,'string','0','fontsize',size);%在文本中输出0

end

end

 

代码总结

以上程序为了确保计算器待机时显示0,做了很多细节工作:

比如在back键中的程序段:

 

if(n==1)

 

%如果文本中只剩下最后一位了

set(handles.text1,'string','0','fontsize',size);%在文本中输出0

这样就保证了退到最后一位时,不会继续退导致静态文本被清空,而是输出0作为结束。

(其他细节处感兴趣的同学可以自己探索)

 

Strcmp函数:

串比较。

例:

 

比较a字符串‘1234’和b字符串‘abcd’是否相同

 

.专业.专注.

......

 

结果为0表示不相同,结果为1表示相同。

 

运行结果:

 

 

项目六、计算器的第二次改进

 

前景提要:

本次改进会添加相应功能键实现更复杂多样的计算。

继续阅读请点击购买

 

我要购买

 

产品预览:

 

.专业.专注.

......

 

.专业.专注.

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

当前位置:首页 > 高等教育 > 文学

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

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