⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.frm

📁 一个不仅可以进行常规运行(常规运算能一下计算一个多项式如:1.2*2-3*(3.5+6.7)...)还可以计算矩阵运算的计算机器
💻 FRM
📖 第 1 页 / 共 3 页
字号:
        Precedence = 2
    Case "\"
        Precedence = 2
    Case "^"
        Precedence = 3 '平方符号
    Case "&"
        Precedence = 3 '开方符号
    Case Else
        Precedence = 0
End Select
End Function
Sub Calculate()
Dim stacknum(30) As Double          '利用栈stacknum(30)计算队列sqeuestr(30)中的后缀表达式
Dim num As String
Dim top As Integer
Dim i As Integer
top = 0
For i = 0 To lastsqeue
    num = Val(sqeuestr(i))
    If num <> 0 Then
        stacknum(top) = num
        top = top + 1
    ElseIf num = 0 And sqeuestr(i) <> "0" Then
        If top < 1 Then
             MsgBox (" 表达式错误!!!")
        End If
        Select Case sqeuestr(i)
            Case "+"
                top = top - 1
                stacknum(top - 1) = stacknum(top - 1) + stacknum(top)
                
            Case "-"
                top = top - 1
                stacknum(top - 1) = stacknum(top - 1) - stacknum(top)
            Case "/"
                top = top - 1
                If stacknum(top) = 0 Then
                    MsgBox (" 除数不能为零!!!")
                Else
                   stacknum(top - 1) = stacknum(top - 1) / stacknum(top)
                End If
            Case "*"
                top = top - 1
                stacknum(top - 1) = stacknum(top - 1) * stacknum(top)
            Case "\"
                stacknum(top - 1) = 1 / stacknum(top - 1)
            Case "^"
                stacknum(top - 1) = stacknum(top - 1) * stacknum(top - 1)
            Case "&"
                stacknum(top - 1) = Sqr(stacknum(top - 1))
        End Select
    Else
        stacknum(top) = 0
        top = top + 1
    End If
Next i
Text1.Text = stacknum(0)        '将最后结果输出
For i = 0 To 20
    sqeuestr(i) = ""            '为方便继续计算,清空队列
Next i
End Sub
Sub input_stack()               '将text1.text中值表达式的型式转化为后值表达式的型式,并放放入sqeuestr中
Dim stackstr(20) As String   'stackstr用来将中缀表达式转化为后缀表达式,并将后缀表达式放进sqeuestr中
Dim top As Integer        'top为指向stackstr的顶部,top总指向栈中的上一个元素
Dim str2 As String
Dim text1_text As String
Dim text_length As Integer
Dim i, currentprior, stackprior As Integer
Dim sign As Boolean                 '定义标记来标记开是否为负号
Dim tempStr As String

sign = False
top = 0
lastsqeue = 0
text1_text = Text1.Text
text_length = Len(text1_text)

tempStr = Left(text1_text, 1)
If tempStr = "-" Then
    sign = True
    text_length = text_length - 1
    text1_text = Right(text1_text, text_length)
End If
    
Do While (text_length > 0)
    str2 = Left(text1_text, 1)
    text_length = text_length - 1
    text1_text = Right(text1_text, text_length)
    If (str2 = "(") Then            '当当前字符为‘(’时直接入栈
        stackstr(top) = str2
        top = top + 1
    ElseIf str2 = ")" Then          '当当前字符为‘)’时出栈直到‘(’
            Do While (stackstr(top - 1) <> "(")
                sqeuestr(lastsqeue) = stackstr(top - 1)
                lastsqeue = lastsqeue + 1
                top = top - 1
            Loop
        top = top - 1
    ElseIf str2 >= "0" And str2 <= "9" Or str2 = "." Then       '当当前字符为数或小数进直接入队列
        Do While (str2 >= "0" And str2 <= "9" Or str2 = ".")
            sqeuestr(lastsqeue) = sqeuestr(lastsqeue) + str2
            str2 = Left(text1_text, 1)
            
            If text_length > 0 Then
                text_length = text_length - 1
                text1_text = Right(text1_text, text_length)
            End If
        Loop
        text1_text = str2 + text1_text
        text_length = text_length + 1
        lastsqeue = lastsqeue + 1
    ElseIf str2 = "+" Or str2 = "-" Or str2 = "/" Or str2 = "*" Or str2 = "^" Or str2 = "&" Or str2 = "\" Then   '当当前运算符时
        If top = 0 Then         '当前栈顶为空时,栈顶符运算符优先级为零,当前运算符优先级为运算符优级
            stackprior = 0
            currentprior = Precedence(str2)
        Else
            stackprior = Precedence(stackstr(top - 1))  '当前栈顶不为空时,栈顶符运算符优先级为栈顶运算符的优先级
            currentprior = Precedence(str2)             '当前运算符优先级为运算符优级
        End If
        If currentprior > stackprior Then
            stackstr(top) = str2
            top = top + 1
        Else
            Do While stackprior >= currentprior         '当栈顶的运算符优先级高于当前运算符优先级时,出栈
                sqeuestr(lastsqeue) = stackstr(top - 1)
                top = top - 1
                lastsqeue = lastsqeue + 1
                If top = 0 Then
                    stackprior = 0
                Else
                    stackprior = Precedence(stackstr(top - 1))
                End If
            Loop
        stackstr(top) = str2                '当前运算符入栈
        top = top + 1
        End If
    End If
Loop
For i = top - 1 To 0 Step -1
    sqeuestr(lastsqeue) = stackstr(i)       '栈中的运算符入队列
    lastsqeue = lastsqeue + 1
Next i

If sign = True Then
    sqeuestr(0) = "-" + sqeuestr(0)
    sign = False
End If

End Sub

Private Sub aboutAuthoury_Click()
frmAbout1.Show
End Sub

Private Sub aboutMachinery_Click()
frmAbout.Show
End Sub

Private Sub Command1_Click(Index As Integer)
Text1.Text = Text1.Text + "1"
End Sub

Private Sub Command10_Click()
Text1.Text = Text1.Text + "6"
End Sub

Private Sub Command11_Click()
Text1.Text = Text1.Text + "-"
End Sub

Private Sub Command12_Click()
Text1.Text = Text1.Text + "&"
End Sub

Private Sub Command13_Click()
Text1.Text = Text1.Text + "^"
End Sub

Private Sub Command14_Click()
Dim num As Double
num = Val(Text1.Text)
Text1.Text = 1 / Tan(num * 3.14159265358979 / 180)
End Sub

Private Sub Command15_Click()
Text1.Text = Text1.Text + "7"
End Sub

Private Sub Command16_Click()
Text1.Text = Text1.Text + "8"
End Sub

Private Sub Command17_Click()
Text1.Text = Text1.Text + "9"
End Sub

Private Sub Command18_Click()
Text1.Text = Text1.Text + "0"
End Sub

Private Sub Command19_Click()
Text1.Text = Text1.Text + "("
End Sub

Private Sub Command2_Click(Index As Integer)
Text1.Text = Text1.Text + "2"
End Sub

Private Sub Command20_Click()
Text1.Text = Text1.Text + ")"
End Sub

Private Sub Command21_Click()
Text1.Text = Text1.Text + "/"
End Sub

Private Sub Command22_Click()
Text1.Text = Text1.Text + "*"
End Sub

Private Sub Command23_Click()
Dim num As Double
num = Val(Text1.Text)
Text1.Text = Log(num)
End Sub

Private Sub Command24_Click()
Dim num As Double
num = Val(Text1.Text)
Text1.Text = Exp(num)
End Sub

Private Sub Command25_Click()
Dim num As Double
num = Val(Text1.Text)
Text1.Text = Sin(num * 3.14159265358979 / 180)
End Sub

Private Sub Command26_Click()
Dim num As Double
num = Val(Text1.Text)
Text1.Text = Cos(num * 3.14159265358979 / 180)
End Sub

Private Sub Command27_Click()
Dim num As Double
num = Val(Text1.Text)
Text1.Text = Tan(num * 3.14159265358979 / 180)
End Sub

Private Sub Command28_Click()
Text1.Text = Text1.Text + "\"
End Sub

Private Sub Command29_Click()
Text1.Text = 3.14159265358979
End Sub

Private Sub Command3_Click()
Text1.Text = Text1.Text + "3"
End Sub

Private Sub Command30_Click()
Dim num As Double
num = Val(Text1.Text)
Text1.Text = Log(num)
End Sub

Private Sub Command31_Click()
Dim i As Integer
Text1.Text = ""
For i = 0 To 20
    sqeuestr(i) = ""
Next i
End Sub
Private Sub Command32_Click()
Dim num, i As Integer
Dim total As Double
num = Val(Text1.Text)
total = 1
For i = 2 To num
    total = total * i
Next i
Text1.Text = total
End Sub

Private Sub Command33_Click()
Dim num1, num2, span As Integer
Dim i, total As Integer
total = 0
num1 = InputBox("请输入第一个数:", "输入框")
num2 = InputBox("请输入最后一个数:", "输入框")
span = InputBox("请输入公差:", "输入框")
If (num2 - num1) Mod span <> 0 Then
    MsgBox ("输入有误!!!")
Else
    For i = num1 To num2 Step span
       total = total + i
    Next i
    Text1.Text = total
End If
End Sub

Private Sub Command4_Click()
Text1.Text = Text1.Text + "+"
End Sub

Private Sub Command5_Click()
Text1.Text = Text1.Text + "."
End Sub

Private Sub Command6_Click()
Call input_stack
If Judge1() = True Then
    Call Calculate
Else
    MsgBox ("表达式错误,括号不配对!!!")
End If
End Sub

Private Sub Command7_Click()
Dim text1_length As Integer
text1_length = Len(Text1.Text)
If text1_length = 0 Then
    MsgBox (" 输出框为空,没有可删除的!!!")
Else
    Text1.Text = Left(Text1.Text, text1_length - 1)
End If
End Sub

Private Sub Command8_Click()
Text1.Text = Text1.Text + "4"
End Sub

Private Sub Command9_Click()
Text1.Text = Text1.Text + "5"
End Sub

Private Sub copy_Click()
copyStr = Text1.Text
End Sub
Private Sub exit_Click()
End
End Sub

Private Sub paste_Click()
Text1.Text = Text1.Text + copyStr
End Sub

Private Sub sienceCal_Click()
    chooseDialog.Visible = True
End Sub
Private Sub Timer1_Timer()
TimeDialog.Text = Time
DataDialog.Text = Date
End Sub
Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
If (KeyCode >= 65 And KeyCode <= 90) Then       'Or (KeyCode >= 97 And KeyCode <= 122)
    MsgBox ("表达式中不能为字母!!!")
    Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
ElseIf KeyCode = 13 Or KeyCode = 10 Then
    Call input_stack
    Call Calculate
End If

'Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -