回 帖 发 新 帖 刷新版面

主题:VB设计一个复杂计算器,求代码.高手指教!!

可以完成加减乘除,乘方,开放,三角函数,进制转换,有数据存储,帮助及错误提示功能的复杂计算机程序

回复列表 (共12个回复)

沙发

你都写了些什么,给大家看看。可以吗?

板凳

看样子还没动工!!!

3 楼

[quote]看样子还没动工!!![/quote]
嗯!

4 楼

[quote]看样子还没动工!!![/quote]
嗯!

5 楼

[quote]看样子还没动工!!![/quote]
嗯!

6 楼

怎么会这么多?

7 楼

实际上我猜,他就没有打算“动工”。

8 楼

看起来有很多现成的函数可用,实现会比较简单,但思考这些函数实现的背后,还有计算精度等问题的考虑都是很有些意思的

9 楼

calc

10 楼

为你量身打造了一个程序:

  在窗体上添加两个文本框: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

我来回复

您尚未登录,请登录后再回复。点此登录或注册