虚拟仪器实验报告一<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
-----计算器
一、实验目的
实现两个数之间的加、减、乘、除四则运算及开方、求倒、取负运算,达到简易计算器的功能。
二、编程思想
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />完成一种运算的完整过程是:输入第一个数,存储并显示 输入要进行运算的类型并存储 输入第二个数,存储并显示 按“=”或则按其它运算符号“+、-、*、/”进行连续的运算时显示运算结果。
三、程序流程图
开 始 |
输入第一个数 |
输入运算类型 |
输入第二个数
|
显示结果 |
结束 |
按“EXIT“ |
按“C“ |
按“+、-、*、/” |
按“=“ |
显示结果
|
按“C“ |
四、实现过程
1)、键入感应
首先建立一个簇,然后在簇中再建立布尔量,复制20个以满足键的需求。包括0--9十个数字键,一个小数点键,一个等号键,四则运算键,一个开方键,一个倒数键,一个反号键,一个清零键及一个退出键。然后通过将簇中元素按产生的顺序组成一个一维数组,这样就实现了每个键与数字(0--20)之间的对应。每次按下一个键时,通过查找出对应的键并把结果(对应的数字)连接到一个case结构,然后执行对应case结构中的程序,至此就完成了对一个键的感应过程(图2)。
图2 键的感应
2)、数字的读入
图3 数字读入程序图
具体赋给哪个操作数通过布尔量change的状态决定,该布尔量状态在输入运算类型键后改变。这里要注意的是:在第二个数键入时,要把结果赋给num3,最终是在num1和 num3之间进行运算运算,这样做是为了在一种运算结束后能实现连续的运算。
3)、多零问题
进行运算的数不能以多个零开头。虽然不影响运算结果,但在形式上是错误的。解决这个问题的方法是如图4:
图4 多零问题解决程序图
4)、小数点问题
一个数中不可能出现两个或两个以上的小数点。解决方法如图5:
图5 小数点问题程序图
5)、非小数前面出现0开头的问题
进行运算的非小数不能以零开头。虽然不影响运算结果,但在形式上是错误的。解决这个问题的思路如图6,具体解决程序在数据输入时(如图6):
输入第二位数据时 |
把第一位数据与“0“比较 |
=0 |
将第一位数据赋为空并显示第二位数 |
顺序显示数据 |
图6 0开头的问题框图
6)、操作类型
当按下运算类型键时,存储对应的数字序号到type,以按下“=”号时进行运算类型的确定。操作类型默认为“空”。在此操作类型case中同时执行对change状态转换。在其中再用一个case结构用于实现“+、-、*、/”的连续运算(如图7)。
图7 操作类型程序图
7)、等号键
在11键的case中实现加、减、乘、除、开方及倒数运算。连续按此键可以实现第一操作数对第二操作数的连续运算。并且对type1、type2、change、change1、num2分别清0、清0、F、T,赋空。
8)、清零键
在16键的case中对num1、num2、num3赋空字符,显示框中显示0,change、change1复位F状态,type1、type2赋0。
9)、退出键
在17键的case中首先对显示框赋空字符,然后终止程序。即以不显示任何字符退出程序。
10)、开方键
在18键的case中对当前操作数进行开方运算即可。
11)、倒数键
在19键的case中对当前操作数进行倒数运算即可。
12)、反号键
在20序号的case中对当前操作的进行乘以负1的运算实现反号。
13)、backspace键
在21序号的case中对当前操作的进行操作以清除输入的错误键(如图8)。计算字符串的长度,把长度减1位后显示。
图8 backspace程序图
14)、去掉小数末尾为0的功能
由于经过前面的运算,数据都保持6位小数,不可避免的会出现小数末尾为0的情况。利用while循环,检测result最后一位是否为0,若为0,则减去末位后赋值给本身;若不为0,则退出循环显示数据,从而实现去0的功能(图9)。
图9 去掉小数末尾为0程序图
15)、美化面板
对前面板进行美化,把num1、num2、num3、type1、type2、result、change隐藏。计算器前面板如图10:
图10 前面板 图11 windows 系统简易计算器
五、寄存器及布尔变量的作用解释
num1用来存储第一个输入数据。第二个输入数据存入num2中,然后将其赋给 num3,并使num2为空,以便输入的数据存入num2,所有的运算是在num1和 num3间进行,运算结果都赋给num1和result。Change用来判断是第一个数据还是第二个数据。change1的功能是在输入=,运算完后,不需要初始化即可进行下一次运算。change2用来去掉数据小数末尾的0。change3用来保证backspace键仅对输入的数据有效,对运算结果无效。type1用来存储运算符号,type2用来保证连续“+、-、*、/”的正确性。 所有的运算结果都赋给result。result1用来将数据显示在前面板上。后面板及所有的寄存器及布尔变量的初值如图12。
图12 后面板
六、总结
经过演示,本计算器可实现界面上所有按键的功能,可实现连续运算、报错提示(除数为0、对负数开方)、纠错(非小数前面为0、多个小数点、多零、清除前一位错误输入)等功能。具体操作和功能与WINDOWS系统的简易计算器(图11)一样。
但是由于该计算器仅使用了一些比较简单的结构,所以程序框图不够简化,比较繁琐,这是需要改进的地方,但是这不影响其正常使用。
用户1835693 2015-4-22 11:30
用户377235 2011-12-27 21:55
用户339504 2011-6-11 16:10
jizzll_617398179 2008-7-9 23:53
jizzll_617398179 2008-6-27 00:16
zwj-gg_818035047 2008-6-26 19:12
用户152939 2008-6-26 10:15
用户149535 2008-6-21 10:39
jizzll_617398179 2008-6-20 12:10
用户124183 2008-6-20 09:48