Обратная польская запись - VBA
Формулировка задачи:
Помогите, пожалуйста, реализовать алгоритм арифметических действий обратной польской записью.
Решение задачи: «Обратная польская запись»
textual
Листинг программы
Option Base 1 Sub Макрос1() Dim f As String, ch As Double, mag(50) As Variant, vixp(50) As Variant Dim L As Integer, i As Integer, j As Integer, k As Integer, smv As String Dim rez, fv As String ch = 0 f = InputBox("Введите формулу") If Mid(f, 1, 1) = "-" Then f = "0" & f L = Len(f) j = 0: k = 0 For i = 1 To L smv = Mid(f, i, 1) If smv >= "0" And smv <= "9" Then ch = ch * 10 + Val(smv) If i = L Then k = k + 1 vixp(k) = ch End If If i < L And (Mid(f, i + 1, 1) < "0" Or Mid(f, i + 1, 1) > "9") Then k = k + 1 vixp(k) = ch End If Else If smv = "(" Then j = j + 1 mag(j) = smv ch = 0 Else If smv = ")" Then Do If j = 0 Then MsgBox "Некорректная формула! " & f Exit Sub End If If mag(j) = "(" Then j = j - 1 ch = 0 Exit Do End If k = k + 1 vixp(k) = mag(j) j = j - 1 Loop Else If smv = "+" Or smv = "-" Then Do If j = 0 Then j = j + 1 mag(j) = smv ch = 0 Exit Do End If If mag(j) = "(" Then j = j + 1 mag(j) = smv ch = 0 Exit Do End If k = k + 1 vixp(k) = mag(j) j = j - 1 Loop Else If smv = "*" Or smv = "/" Then Do If j = 0 Then j = j + 1 mag(j) = smv ch = 0 Exit Do End If If mag(j) = "(" Or mag(j) = "+" Or mag(j) = "-" Then j = j + 1 mag(j) = smv ch = 0 Exit Do End If k = k + 1 vixp(k) = mag(j) j = j - 1 Loop Else MsgBox "Недопстимый символ " & i & " в формуле! " & f, 0, "" Exit Sub End If End If End If End If End If Next i If j <> 0 Then For i = j To 1 Step -1 k = k + 1 vixp(k) = mag(i) Next i End If fv = "" For i = 1 To k fv = fv & vixp(i) & " " Next i j = 0 For i = 1 To k If vixp(i) <> "+" And vixp(i) <> "-" And vixp(i) <> "*" And vixp(i) <> "/" Then j = j + 1 mag(j) = vixp(i) Else If j = 1 Then MsgBox "Некорректная формула! " & f Exit Sub End If End If If vixp(i) = "+" Then mag(j - 1) = mag(j - 1) + mag(j) j = j - 1 End If If vixp(i) = "-" Then mag(j - 1) = mag(j - 1) - mag(j) j = j - 1 End If If vixp(i) = "*" Then mag(j - 1) = mag(i - 1) * mag(j) j = j - 1 End If If vixp(i) = "/" Then mag(j - 1) = mag(j - 1) / mag(j) j = j - 1 End If If vixp(i) = "(" Then MsgBox "Некорректная формула! " & f Exit Sub End If Next i rez = mag(1) MsgBox "Формула: " & f & Chr(13) & "Обратная польская нотация: " & fv & Chr(13) & "Результат: " & rez, 0, "" End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д