Hello all,

The Class Library below, Enable you to execute all of your math function statements (Priority for parentheses then what out of parentheses order by Power, Multiply, Divide, Subtract, Add) Dynamically in just one process.

Class:
PHP Code:
'About Author: 
'
NameProgrammation(OmarNegm), 
'Country: Egypt, 
'
E_mailProgrammation2000@hotmail.com
Imports System
Imports System
.Text
Public Class clsCalculate
    
Const addMark As Char "+"
    
Const powerMark As Char "^"
    
Const divideMark As Char "/"
    
Const percentMark As Char "%"
    
Const multiplyMark As Char "*"
    
Const subtractMark As Char "_"
    
Const leftParenttheses As Char ")"
    
Const rightParenttheses As Char "("
    
Dim UserPassedStatement As String ""
    
Dim CalculateMathStatement As String ""
    
Dim AllParentThesesStatements As StringBuilder = New StringBuilder
    
Public Function RealDynamicCalculate(ByVal MathStatement As StringOptional ByRef strLogs As String "") As Double
        Dim Logs
() As String
        Dim Result 
As Double 0.0
        Dim CheckParenttheses 
As String ""
        
Try
            
UserPassedStatement RemoveSpaces(MathStatement)
            
AllParentThesesStatements.Append(UserPassedStatement)
            
CalculateMathStatement RemoveSpaces(MathStatement)
            
CheckParenttheses IsValidParentthesesFormat(CalculateMathStatement)
            If 
Not CheckParenttheses.Trim "" Then
                MessageBox
.Show("Math Statement You'r Typed Expected a " CheckParenttheses"Error"MessageBoxButtons.OKMessageBoxIcon.Exclamation)
                Return 
0
            End 
If
            
CalculateMathStatement HandlNegativeMark(CalculateMathStatement)
            
Call GetAllParentThesesStatements()
            
CalculateMathStatement HandlNegativeMark(CalculateMathStatement)
            
CalculateMathStatement Calculate(CalculateMathStatementFalse)
            
Result Convert.ToDouble(CalculateMathStatement)
            
AllParentThesesStatements.Append("|")
            
AllParentThesesStatements.Append(LenUserPassedStatementToSpaces(UserPassedStatement.Length))
            
AllParentThesesStatements.Append("=")
            
AllParentThesesStatements.Append(Result)
            
Logs Split(AllParentThesesStatements.ToString"|")
            
strLogs ""
            
For As Integer 0 To UBound(Logs)
                If 
strLogs.Trim "" Then
                    strLogs 
Logs(i)
                Else
                    
strLogs &= vbNewLine Logs(i)
                
End If
            
Next
        
Catch ex As Exception
            MessageBox
.Show("Math Statement is Incorrect Format!""Error"MessageBoxButtons.OKMessageBoxIcon.Exclamation)
            
Result 0
        End 
Try
        Return 
Result
    End 
Function
    Private Function 
HandlNegativeMark(ByVal strMath As String)
        
Dim Negative As Char "-"
        
Dim currentChat As Char ""
        
Dim Result As String strMath
ReDo
:
        For 
As Integer 1 To Result.Length
            
If Convert.ToChar(Mid(Resulti1)) = Negative Then
                
If 1 Then
                    
If IsNumeric(Mid(Result11)) = True Or Convert.ToChar(Mid(Result11)) = leftParenttheses Then
                        Result 
Result.Remove(11)
                        
Result Result.Insert(1subtractMark)
                        GoTo 
ReDo
                    End 
If
                
End If
            
End If
        
Next
        
Return Result
    End 
Function
    Private Function 
RemoveSpaces(ByVal strMath As String) As String
        Dim Space 
As Char " "
        
Dim Result As String strMath
ReDo
:
        For 
As Integer 1 To Result.Length
            
If Convert.ToChar(Mid(ResultI1)) = Space Then
                Result 
Result.Remove(11)
                GoTo 
ReDo
            End 
If
        
Next
        
Return Result
    End 
Function
    Private Function 
LNumberLength(ByVal Start As IntegerByVal strString As String) As Integer
        Dim I 
As Integer 0
        Dim Result 
As Integer 0
        
For Start To strString.Length
            
If IsNumeric(Mid(strStringI1)) = True Or Convert.ToChar(Mid(strStringI1)) = "-" Or Convert.ToChar(Mid(strStringI1)) = "." Then
                Result 
+= 1
            
Else
                Exit For
            
End If
        
Next
        
If Result 0 Then Result 1
        
Return Result
    End 
Function
    Private Function 
RNumberLength(ByVal Start As IntegerByVal strString As String) As Integer
        Dim Result 
As Integer 0
        Dim I 
As Integer Start
        
Do Until I 1
            I 
-= 1
            
If IsNumeric(Mid(strStringI1)) = True Or Convert.ToChar(Mid(strStringI1)) = "-" Or Convert.ToChar(Mid(strStringI1)) = "." Then
                Result 
+= 1
            
Else
                Exit Do
            
End If
        
Loop
        
If Result 0 Then Result 1
        
Return Result
    End 
Function
    Private Function 
FilterAllToAddProcess(ByVal strMath As String) As String
        Dim Result 
As String strMath        
        Dim dblCalculate 
As Double 0
        Dim RighLength 
As Integer 0
        Dim LeftLength 
As Integer 0
ReDo
:
        For 
As Integer 1 To Result.Length
            
If Convert.ToChar(Mid(ResultI1)) = percentMark Then
                RighLength 
RNumberLength(IResult)      
                
dblCalculate Convert.ToDouble(Mid(ResultRighLengthRighLength)) / 100
                Result 
Result.Insert(RighLength 1Convert.ToString(dblCalculate))
                
Result Result.Remove(Val(RighLength 1) + Convert.ToString(dblCalculate).LengthRighLength 1)
                GoTo 
ReDo
            End 
If
        
Next
ReDo1
:
        For 
As Integer 1 To Result.Length
            
If Convert.ToChar(Mid(ResultI1)) = powerMark Then
                RighLength 
RNumberLength(IResult)
                
LeftLength LNumberLength(1Result)
                
dblCalculate Convert.ToDouble(Mid(ResultRighLengthRighLength)) ^ Convert.ToDouble(Mid(Result1LeftLength))
                
Result Result.Insert(RighLength 1Convert.ToString(dblCalculate))
                
Result Result.Remove(Val(RighLength 1) + Convert.ToString(dblCalculate).LengthRighLength LeftLength 1)
                GoTo 
ReDo1
            End 
If
        
Next
RoDo2
:
        For 
As Integer 1 To Result.Length
            
If Convert.ToChar(Mid(ResultI1)) = multiplyMark Then
                RighLength 
RNumberLength(IResult)
                
LeftLength LNumberLength(1Result)
                
dblCalculate Convert.ToDouble(Mid(ResultRighLengthRighLength)) * Convert.ToDouble(Mid(Result1LeftLength))
                
Result Result.Insert(RighLength 1Convert.ToString(dblCalculate))
                
Result Result.Remove(Val(RighLength 1) + Convert.ToString(dblCalculate).LengthRighLength LeftLength 1)
                GoTo 
RoDo2
            End 
If            
        
Next
ReDo3
:
        For 
As Integer 1 To Result.Length
            
If Convert.ToChar(Mid(ResultI1)) = divideMark Then
                RighLength 
RNumberLength(IResult)
                
LeftLength LNumberLength(1Result)
                
dblCalculate Convert.ToDouble(Mid(ResultRighLengthRighLength)) / Convert.ToDouble(Mid(Result1LeftLength))
                
Result Result.Insert(RighLength 1Convert.ToString(dblCalculate))
                
Result Result.Remove(Val(RighLength 1) + Convert.ToString(dblCalculate).LengthRighLength LeftLength 1)
                GoTo 
ReDo3
            End 
If
        
Next

ReDo4
:
        For 
As Integer 1 To Result.Length
            
If Convert.ToChar(Mid(ResultI1)) = subtractMark Then
                RighLength 
RNumberLength(IResult)
                
LeftLength LNumberLength(1Result)                                
                
dblCalculate Convert.ToDouble(Mid(ResultRighLengthRighLength)) - Convert.ToDouble(Mid(Result1LeftLength))
                
Result Result.Insert(RighLength 1Convert.ToString(dblCalculate))
                
Result Result.Remove(Val(RighLength 1) + Convert.ToString(dblCalculate).LengthRighLength LeftLength 1)
                GoTo 
ReDo4
            End 
If
        
Next
        
Return Result
    End 
Function
    Private Function 
Calculate(ByVal strMath As StringByVal Have_A_Parentheses As Boolean) As Double
        Dim Result 
As Double 0
        
If Have_A_Parentheses True Then
            strMath 
strMath.Remove(01)
            
strMath strMath.Remove(strMath.Length 11)
        
End If
        
strMath FilterAllToAddProcess(strMath)
        If 
strMath.Length And IsNumeric(strMath) = True Then
            Result 
CDbl(strMath)
        ElseIf 
IsNumeric(strMath) = True Then
            Result 
CDbl(strMath)
            GoTo 
SinglValue
        
Else            
            For 
As Integer 1 To strMath.Length
                Select 
Case Convert.ToChar(Mid(strMathi1))
                    Case 
addMark
                        
If Result 0 Then
                            
If Have_A_Parentheses False Then
                                
If AllParentThesesStatements.ToString "" Then
                                    AllParentThesesStatements
.Append(Convert.ToDouble(Mid(strMathRNumberLength(istrMath), RNumberLength(istrMath))) & "+" Convert.ToDouble(Mid(strMath1LNumberLength(1strMath))))
                                Else
                                    
AllParentThesesStatements.Append("|")
                                    
AllParentThesesStatements.Append(Convert.ToDouble(Mid(strMathRNumberLength(istrMath), RNumberLength(istrMath))) & "+" Convert.ToDouble(Mid(strMath1LNumberLength(1strMath))))
                                
End If
                            
End If
                            
Result Convert.ToDouble(Mid(strMathRNumberLength(istrMath), RNumberLength(istrMath))) + Convert.ToDouble(Mid(strMath1LNumberLength(1strMath)))
                            
LNumberLength(1strMath)
                        Else
                            If 
Have_A_Parentheses False Then
                                
If AllParentThesesStatements.ToString "" Then
                                    AllParentThesesStatements
.Append(Result "+" Convert.ToDouble(Mid(strMath1LNumberLength(1strMath))))
                                Else
                                    
AllParentThesesStatements.Append("|")
                                    
AllParentThesesStatements.Append(Result "+" Convert.ToDouble(Mid(strMath1LNumberLength(1strMath))))
                                
End If
                            
End If
                            
Result Result Convert.ToDouble(Mid(strMath1LNumberLength(1strMath)))
                            
LNumberLength(1strMath)
                        
End If
                
End Select
            Next
        End 
If
SinglValue:
        Return 
Result
    End 
Function       
    Private 
Sub GetAllParentThesesStatements()
        
Dim cmsLength As Integer 0
        Dim FirstRightOne 
As Integer 0
        Dim SourceParenttheses 
As String ""
        
Dim CalculatedPatrenttheses As Double 0
ReDo
:
        Do 
Until GetFirstRightParenttheses(CalculateMathStatement) = 0
            cmsLength 
CalculateMathStatement.Length
            FirstRightOne 
GetFirstRightParenttheses(CalculateMathStatement)
            For 
As Integer FirstRightOne To cmsLength
                
If Convert.ToChar(Mid(CalculateMathStatementi1)) = leftParenttheses Then
                    SourceParenttheses 
Mid(CalculateMathStatementFirstRightOneVal(FirstRightOne) + 1)
                    
CalculatedPatrenttheses Calculate(SourceParentthesesTrue)
                    If 
AllParentThesesStatements.ToString.Trim "" Then
                        AllParentThesesStatements
.Append(SourceParenttheses "=" CalculatedPatrenttheses)
                    Else
                        
AllParentThesesStatements.Append("|")
                        
AllParentThesesStatements.Append(SourceParenttheses "=" CalculatedPatrenttheses)
                    
End If
                    
CalculateMathStatement CalculateMathStatement.Insert(FirstRightOne 1Convert.ToString(CalculatedPatrenttheses))
                    
CalculateMathStatement CalculateMathStatement.Remove(Val(FirstRightOne 1) + Val(Convert.ToString(CalculatedPatrenttheses).Length), Val(FirstRightOne) + 1)
                    GoTo 
ReDo
                End 
If
            
Next
        Loop    
    End Sub    
    
Private Function GetFirstRightParenttheses(ByVal MathStatement As String) As Integer
        Dim Result 
As Integer 0
        Dim msLength 
As Integer MathStatement.Length
        
For As Integer 1 To MathStatement.Length
            
If Convert.ToChar(Mid(MathStatementi1)) = rightParenttheses Then
                Result 
i
            End 
If
        
Next
        
Return Result        
    End 
Function
    Private Function 
LenUserPassedStatementToSpaces(ByVal LenUserStatement As Integer) As String
        Dim Result 
As String ""
        
For As Integer 0 To LenUserStatement
            Result 
&= " "
        
Next
        
Return Result
    End 
Function
    Private Function 
IsValidParentthesesFormat(ByVal strMath As String) As String
        Dim Result 
As String ""
        
Dim Left As Integer 0
        Dim Right 
As Integer 0
        
For As Integer 1 To strMath.Length
            Select 
Case Convert.ToChar(Mid(strMathI1))
                Case 
leftParenttheses
                    Left 
+= 1
                
Case rightParenttheses
                    Right 
+= 1
            End Select
        Next
        
If Left Right Then
            Result 
""
        
Else
            If 
Left Right Then
                Result 
"Right Patrentheses '('"
            
Else
                
Result "Left Patrentheses ')'"
            
End If
        
End If
        Return 
Result
    End 
Function
End Class 
The examples in the next post.