为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

(vb课程设计)表达式计算器设计报告

2018-04-02 11页 doc 26KB 36阅读

用户头像

is_650122

暂无简介

举报
(vb课程设计)表达式计算器设计报告(vb课程设计)表达式计算器设计报告 表达式计算器课程设计报告,VB, 编号,21 表达式计算器设计报告 学院 材料学院 班级 材料074班 学号 072018 姓名 姜枭特 成绩 一、设计思路 1.要达到的目的 ?输入一个简单的四则运算公式,能够正确进行运算并输出最后结果。 ?支持运算符的优先级,对于同一级别运算,按先算左边,后算右边的顺序。 ?支持平方、多种常用数学函数的混合运算。 ?支持对括号的运算处理,包括多括号及括号嵌套。 ?能够输出详细的运算过程及每一步运算的结果。 2.关键问题的解决 ?建...
(vb课程设计)表达式计算器设计报告
(vb课程)表达式计算器设计报告 表达式计算器课程设计报告,VB, 编号,21 表达式计算器设计报告 学院 材料学院 班级 材料074班 学号 072018 姓名 姜枭特 成绩 一、设计思路 1.要达到的目的 ?输入一个简单的四则运算公式,能够正确进行运算并输出最后结果。 ?支持运算符的优先级,对于同一级别运算,按先算左边,后算右边的顺序。 ?支持平方、多种常用数学函数的混合运算。 ?支持对括号的运算处理,包括多括号及括号嵌套。 ?能够输出详细的运算过程及每一步运算的结果。 2.关键问的解决 ?建立一个名为f1的函数,单独对一个只含四则运算符以及平方符号的表达式进行运算,其值作为f1的值。 ?在函数中先设置一个数组D()分离操作数和运算符,并分别储存。 ?通过Mid函数和if语句判断”-“是负数含义还是减法运算符含义,同时处理了”+-*/^”与”-“放在一起的情况。 根据各运算符的优先级通过DO循环分别计算结果,并重新整理数组并储存,最后做加减运算,并实现对于 。 同一级别运算,先算左边,后算右边,最后将值赋给f1 ?再建立一个名为f2的函数,进行括号运算操作,通过Instr和InstrRev函数以及Mid函数提取出括号内的函数,建立新的表达式,再调用f1计算新表达式的值。通过以上循环实现多括号以及括号嵌套的运算。 ?通过DO循环,利用Instr、Mid函数提取函数括号内的表达式,调用f1进行计算,再将其值进行函数运算,再将运算值与其他部分拼接,实现abs()、sqr()等多函数的计算。 ?通过ListBox控件,用多个AddItem语句实现各运算步骤的详细输出。 ?通过查找和判断进行边界情况的讨论,使其更加人性化。 二、模块之间的调用关系,或程序流程图 表达式计算器课程设计报告,VB, 编号,21 用户输入表达式 查找数学函数 输出 ListBox 调用f1函数 ListBox 得到新的表达式 输出 查找完毕 调用f2函数 ListBox 输出 查找括号并调用f1函数 得到新的表达式 得到结果 三、部分程序关键源代码及注释 Public Function f1(ByVal Exp As String) As String '构造函数对只含四则运算符以及平方符号的表达式进行运算 Dim a As Integer, Num As Integer, D() As String, b As String, i As Integer, p As Integer, k As Integer p = 0 '原符号位 Num = 0 b = Exp For i = 2 To Len(b) Select Case Mid(b, i, 1) Case "+", "-", "*", "/", "^" '如果当前位和原符号位相邻,则判断为负数,而不是减法运算符 If i - p > 1 Then Num = Num + 2 ReDim Preserve D(0 To Num) '分离操作数和运算符 D(Num - 1) = Mid(b, p + 1, i - p - 1) D(Num) = Mid(Exp, i, 1) p = i Else If Mid(b, i, 1) <> "-" Then f1 = "F" '标记”F”,使ListBox显示"非法表达式,请重新输入" Exit Function End If End If Case Else End Select Next i Num = Num + 1 表达式计算器课程设计报告,VB, 编号,21 ReDim Preserve D(0 To Num) '储存最后一项 D(Num) = Mid(b, p + 1) '先计算平方: Do a = 0 '算式中有无平方号 For i = 2 To Num - 1 Step 2 If D(i) = "^" Then If D(i - 1) < 0 Then D(i - 1) = "-" & CStr(Val(D(i - 1)) ^ Val(D(i + 1))) Else D(i - 1) = CStr(Val(D(i - 1)) ^ Val(D(i + 1))) End If Num = Num – 2 '整理 For k = i To Num D(k) = D(k + 2) Next u = "" '输出计算步骤 For j = 1 To Num u = u & D(j) Next List1.AddItem CStr(u) a = 1 Exit For End If Next Loop Until a = 0 再计算乘除: Do a = 0 '记录算式中有无乘除号 For i = 2 To Num - 1 Step 2 If D(i) = "*" Or D(i) = "/" Then If D(i) = "*" Then D(i - 1) = CStr(Val(D(i - 1)) * Val(D(i + 1))) End If If D(i) = "/" Then If Val(D(i + 1)) <> 0 Then D(i - 1) = CStr(Val(D(i - 1)) / Val(D(i + 1))) Else '除数为零 f1 = "F" Exit Function End If End If Num = Num – 2 '整理 For k = i To Num D(k) = D(k + 2) Next e = "" 表达式计算器课程设计报告,VB, 编号,21 For j = 1 To Num e = e & D(j) Next List1.AddItem CStr(e) a = 1 Exit For End If Next Loop Until a = 0 '做加减运算: If Num > 1 Then For i = 2 To Num Step 2 If D(i) = "+" Then D(1) = CStr(Val(D(1)) + Val(D(i + 1))) x = D(1) For j = i + 2 To Num x = x & D(j) Next List1.AddItem CStr(x) Else D(1) = CStr(Val(D(1)) - Val(D(i + 1))) x = D(1) For j = i + 2 To Num x = x & D(j) Next List1.AddItem CStr(x) End If Next End If f1 = D(1) Public Function f2(ByVal Exp As String) As String '构造函数,处理括号内的运算 Dim a As Integer, c As String, b As String, p1 As Integer, p2 As Integer b = Exp Do p1 = InStrRev(b, "(", -1, vbTextCompare) If p1 > 0 Then p2 = InStr(p1, b, ")", vbTextCompare) If p2 > p1 Then If p1 > 1 Then Select Case Mid(b, p1 - 1, 1) Case "+", "-", "*", "/", "^", "(" '讨论边界情况 a = 1 Case Else f2 = "F" Exit Function End Select End If 表达式计算器课程设计报告,VB, 编号,21 If p2 < Len(b) Then Select Case Mid(b, p2 + 1, 1) Case "+", "-", "*", "/", "^", ")" '讨论边界情况 a = 1 Case Else f2 = "F" Exit Function End Select End If c = Mid(b, p1 + 1, p2 - p1 - 1) '提取括号内的表达式 c = f1(c) '计算括号内的表达式的值 If c <> "F" Then b = Left$(b, p1 - 1) + c + Mid$(b, p2 + 1) '构造新的表达式 Else '非法表达式 f2 = "F" Exit Function End If Else '括号不配对 f2 = "F" Exit Function End If Else a = 0 End If Loop Until a = 0 f2 = f1(b) End Function 计算几种常用函数: Do c = 0 p = InStr(1, Text1.Text, "abs", vbTextCompare) If p <> 0 Then m = InStr(p, Text1.Text, ")", vbTextCompare) n = Mid(Text1.Text, p + 4, m - p - 4) '提取函数括号内的表达式 c = f1(n) '调用f1计算 q = Abs(c) Text1.Text = Left$(Text1.Text, p - 1) & q & Mid$(Text1.Text, m + 1) List1.AddItem CStr(Text1.Text) '输出步骤 Else c = 1 End If Loop Until c = 1 输出: If f2(Text1.Text) = "F" Then List1.AddItem "非法表达式,请重新输入" Else List1.Clear 表达式计算器课程设计报告,VB, 编号,21 Text2.Text = f2(Text1.Text) End If If Text1.Text = "" Then List1.AddItem "请输入表达式", 0 End If 四、设计的完善及目前存在的问题 1(设计方案要完善的地方 ?更多的特殊情况需要讨论,如不完整的表达式以及中文的判别。 ?函数括号内的表达式能支持更加复杂的表达式。 ?能支持更多的数学函数和运算符。 ?界面应该更加人性化。 2. 目前存在的问题 ?对有些不完整表达式不能进行很好的判断。 ?函数括号内的表达式不能带有括号,不能函数嵌套。 ?只支持特定的数学函数。 五、本次设计的收获及 ?本次设计更多的还是基于课本上的知识,所以学好课本上的知识才是硬道理。 ?虽然课题的难度较大,但只要充分发挥人的主观能动性,专心思考问题,还是能找到出路的。 ?查阅相关资料,请教老师及同学,从中都能获得知识和经验,而且省下了不少时间。 ?更重要的是在设计中一些掌握了比较深层的技术和技巧,能举一反三,为以后的应用做好准备。 ?及时发现自己的不足,以后应更加努力,多涉及编程的领域,掌握一门相关的技术。 六、对该题目和VB设计的意见和建议 1. 对该题目的意见和建议 本次题目所主要涉及的领域比较少,技术性比较单一,除了对字符串的操作比较耐人寻味以外,没有更加新颖和创新的方面, 所以本题目的扩展方向还有很多,能创新的地方还有不少。希望下次能对要求有所创新,比如对控件的使用,使其界面更加人性化,以及增设更多的功能。 2(对本次设计的意见和建议 1.VB设计时最好能提供更多有关的有针对性的书籍资料,以方便设计者在短期之内能有所建树。 2.由于时间的限制,限制了设计者更多的创新机会,如有条件,最好增加设计的时间。 3.增加学生和老师的交流,老师尽可能多的提供多种解决方案,既使设计者有路可寻,也能开阔视野。
/
本文档为【&#40;vb课程设计&#41;表达式计算器设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索