主题:VB设计一个复杂计算器,求代码.高手指教!!
Misux
[专家分:0] 发布于 2008-08-31 17:09:00
可以完成加减乘除,乘方,开放,三角函数,进制转换,有数据存储,帮助及错误提示功能的复杂计算机程序
回复列表 (共12个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2008-08-31 19:56:00
你都写了些什么,给大家看看。可以吗?
板凳
guoyong_cy [专家分:3050] 发布于 2008-08-31 23:54:00
看样子还没动工!!!
3 楼
artless [专家分:1490] 发布于 2008-09-01 17:43:00
[quote]看样子还没动工!!![/quote]
嗯!
4 楼
artless [专家分:1490] 发布于 2008-09-01 17:43:00
[quote]看样子还没动工!!![/quote]
嗯!
5 楼
artless [专家分:1490] 发布于 2008-09-01 17:43:00
[quote]看样子还没动工!!![/quote]
嗯!
6 楼
artless [专家分:1490] 发布于 2008-09-01 17:44:00
怎么会这么多?
7 楼
老大徒伤悲 [专家分:29120] 发布于 2008-09-01 19:41:00
实际上我猜,他就没有打算“动工”。
8 楼
我是大喊三 [专家分:3010] 发布于 2008-09-01 22:26:00
看起来有很多现成的函数可用,实现会比较简单,但思考这些函数实现的背后,还有计算精度等问题的考虑都是很有些意思的
9 楼
bcahzvip [专家分:6040] 发布于 2008-09-02 01:13:00
calc
10 楼
一江秋水 [专家分:9680] 发布于 2008-09-02 17:14:00
为你量身打造了一个程序:
在窗体上添加两个文本框:Text1 为输入数据用,Text2 为输出数据用。
对本代码的说明如下:
可进行加、减、乘、除、乘方和开方,可求三角函数值,可进行角弧转换和进制转换(
小数、分数、负数不能进制转换)。
在 Text1 中输入表达式,回车后将在 Text2 中显示运算结果,结果如果有小数,四舍
五入保留4位小数。输入的数据可以是 2/8/10/16/ 进制(但小数、分数、负数则只能是10
进制),但必须在数据前分别加上 B、O、H 进制标识字符(大小写均可),10 进制数据不
加任何标识字符。所有数据值不超过 ±4294967295 的范围。
①算术运算:
进行四则运算及指数运算,运算结果均显示为 10 进制。
⑴数据输入的格式:
数据1 运算符 数据2 (注:实际输入时可以不输入空格)
⑵运算符有5个:+、-、*、/、^
⑶只能进行单项运算(算式中只有一个运算符),例如:
2-3、H2*H3、O2/O3、H2^3
⑷因技术原因,负数不能开方。开方运算的指数只能使用 10 进制的小数或分数。如:
9^0.5 或 9^1/2 均表示9开平方运算
②求三角函数值:
求正弦、余弦、正切、余切的值,输入数据必须为角度,输入时要在数据前分别加上三
角函数的标识字符 sin、cos、tan、ctg(大小写均可)。运算结果均显示为 10 进制。如:
sinH1E 求正弦30度的值
tan-30 求正切负30度的值
③角弧转换:
角度与弧度相互转换,输入时必须在数据前加上标识字符 ang、rad(大小写均可)。
运算结果均显示为 10 进制。例如:
angHB4 将角度 180 转换为弧度
rad3.14159 将弧度 3.14159 转换为角度
④进制转换:
待转换数据必须为正整数。数据输入的格式是:
待转换数据,转换标识
例如将 16 进制数据 FF 转换为 2 进制:HFF,2
逗号及转换标识是可选的,如果不输入逗号及转换标识,那么,2/8/16 进制的数据默
认转为 10 进制,10 进制数据默认转为 16 进制。如果逗号后面没输入转换标识,也视同
默认。例如:
80,5 表示将 10 进制数据 80 转换为 5 进制
h80,8 表示将 16 进制数据 80 转换为 8 进制
B1101,10、 B1101,、 B1101 都表示将 2 进制数据 1101 转换为 10 进制
2/8/16 进制的转换标识 也可分别用字母 B、O、H 来表示(大小写均可),例如:
256,H 表示将 10 进制转为 16 进制
转换好的数据,除 10 进制外,其它进制类型的数据将自右至左每4个字符间插入一个
逗号,例如:
65535,8 (回车)→ 17,7777
注意事项:可将 2/8/10/16 进制的数据转换成 2~16 之间的任意进制数据,但逆转
换不一定成立。例如,可以将 2/8/10/16 进制转换为 3 进制,但不能将 3 进制转换为其它
进制(提示:但只要你创建了 3 进制的进制标识符,再稍微修改一下代码就能行了)。
代码如下:
Option Explicit
Private Sub Text1_GotFocus()
Text1.SelStart = 0: Text1.SelLength = Len(Text1)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Dim st As String
st = Text1
st = UCase(Replace(st, " ", ""))
Text2 = 运算(st)
End If
End Sub
Function 运算(DAT1 As String) As String
Dim z As String, BJ As Boolean, i As Integer
z = Left$(DAT1, 3)
Select Case z
Case "SIN", "COS", "TAN", "CTG": If Len(DAT1) > 3 Then z = 三角函数(DAT1)
Case "ANG", "RAD": If Len(DAT1) > 3 Then z = 角弧转换(DAT1)
Case Else
DAT1 = StrConv(DAT1, 8)
For i = 2 To Len(DAT1) - 1
z = Mid$(DAT1, i, 1): If InStr("+-*/^", z) Then BJ = True: Exit For
Next i
z = IIf(BJ, 数学计算(DAT1), 进制转换(DAT1))
End Select
运算 = IIf(Left(z, 1) = ".", "0", "") & z
End Function
Function 三角函数(Dat2 As String) As String
On Error GoTo 100
Dim z As String, z1 As String, Num As Double, N As Double
Const p = 0.017453292
z1 = Mid$(Dat2, 4): z = Left$(z1, 1): If InStr("H,O,B", z) Then z1 = 进制转换(z1)
z = Left$(Dat2, 3): Num = Val(z1): If Num > 4294967295# Then Exit Function
Select Case z
Case "SIN": 三角函数 = Format(Round(Sin(Num * p), 4))
Case "COS": 三角函数 = Format(Round(Cos(Num * p), 4))
Case "CTG": 三角函数 = Format(Round(1 / (Tan(Num * p)), 4))
Case "TAN"
N = Num / 90 + 1: If N / 2 = N \ 2 Then Exit Function
三角函数 = Format(Round(Tan(Num * p), 4))
End Select
100
End Function
Function 角弧转换(Dat2 As String) As String
On Error GoTo 100
Dim z As String, z1 As String, Num As Double
z1 = Mid$(Dat2, 4): z = Left$(z1, 1): If InStr("H,O,B", z) Then z1 = 进制转换(z1)
z = Left$(Dat2, 3): Num = Val(z1): If Num > 4294967295# Then Exit Function
Select Case z
Case "ANG": 角弧转换 = Format(Round(Num / 180 * 3.1415926, 4))
Case "RAD": 角弧转换 = Format(Round(Num * 180 / 3.1415926, 4))
End Select
100
End Function
我来回复