تطبيق العمليات الحسابية بمرونة (فقط تكتب معادلتك) Dynamic Calculate

الســلام عليكم ورحمة الله وبركاته

الأخوة الأعضاء الكرام, كيف حال الجميع؟

أسـأل الله العظيم أن تكونوا فى أفضل حال وأتم عافية.

99 % من المبرمجين قد بدؤا رحلة البرمجة بأحد البرنامجين Hello World أو Calculator , بالنسبة للـ Calculator كنا نقوم برسم الكائنات لتحديد الرقم الاول وأخر للثاني ومن ثم إستخراج النتيجة فى كائن أخر أما الأن فلا لأستخدام الكائنات ولا إستخدام معاملات (+-*/^) داخل سطور أكوادك!!!

سوف تحصل على نتيجة عمليتك الحسابية دون كل ذلك, فلقد قمت بعمل دالة من خلالها يُمكنك إتمام عمليتك الحسابية وكأنك تكتبها بالقلم فقط تكتب المعادلة وتترك الباقي على الدالة.

الدالة(DynamicCalculate):


'Author: Programmation(OmarNegm)
Public Function DynamicCalculate(ByVal strCalculate As String) As Double
Dim cAdd As Char = "+"
Dim cSub As Char = "-"
Dim cMul As Char = "*"
Dim cDiv As Char = "/"
Dim cEqu As Char = "^"
Dim strValues As String = ""
Dim strOpertors As String = ""
Dim LastValue As Double = 0
Dim Values() As String, Operators() As String
Try
For I As Integer = 1 To Len(strCalculate)
If Mid(strCalculate, I, 1) = cAdd Or Mid(strCalculate, I, 1) = cSub Or Mid(strCalculate, I, 1) = cMul Or Mid(strCalculate, I, 1) = cDiv Or Mid(strCalculate, I, 1) = cEqu Then
If strOpertors.Trim = "" Then
strOpertors = Mid(strCalculate, I, 1)
Else
strOpertors &= "|" & Mid(strCalculate, I, 1)
End If
If Not strValues.Trim = "" Then
strValues &= "|"
End If
Else
If Not strValues.Trim = "" Then
strValues &= Mid(strCalculate, I, 1)
Else
strValues = Mid(strCalculate, I, 1)
End If
End If
Next
Values = Split(strValues, "|")
Operators = Split(strOpertors, "|")
If Len(Values(0)) > 1 Then
If Mid(Values(0), Len(Values(0)), 1) = "%" Then
LastValue = Convert.ToDouble(Mid(Values(0), 1, Len(Values(0)) - 1) / 100)
Else
LastValue = Convert.ToDouble(Values(0))
End If
Else
LastValue = Convert.ToDouble(Values(0))
End If
For I As Integer = 1 To Values.Count - 1 Step 1
Select Case Operators(I - 1)
Case cAdd
If Len(Values(I)) > 1 Then
If Mid(Values(I), Len(Values(I)), Len(Values(I)) - 1) = "%" Then
LastValue = LastValue + Convert.ToDouble(Mid(Values(I), 1, Len(Values(I)) - 1) / 100)
Else
LastValue = LastValue + Convert.ToDouble(Values(I))
End If
Else
LastValue = LastValue + Convert.ToDouble(Values(I))
End If
Case cSub
If Len(Values(I)) > 1 Then
If Mid(Values(I), Len(Values(I)), Len(Values(I)) - 1) = "%" Then
LastValue = LastValue - Convert.ToDouble(Mid(Values(I), 1, Len(Values(I)) - 1) / 100)
Else
LastValue = LastValue - Convert.ToDouble(Values(I))
End If
Else
LastValue = LastValue - Convert.ToDouble(Values(I))
End If
Case cMul
If Len(Values(I)) > 1 Then
If Mid(Values(I), Len(Values(I)), Len(Values(I)) - 1) = "%" Then
LastValue = LastValue * Convert.ToDouble(Mid(Values(I), 1, Len(Values(I)) - 1) / 100)
Else
LastValue = LastValue * Convert.ToDouble(Values(I))
End If
Else
LastValue = LastValue * Convert.ToDouble(Values(I))
End If
Case cDiv
If Len(Values(I)) > 1 Then
If Mid(Values(I), Len(Values(I)), Len(Values(I)) - 1) = "%" Then
LastValue = LastValue / Convert.ToDouble(Mid(Values(I), 1, Len(Values(I)) - 1) / 100)
Else
LastValue = LastValue / Convert.ToDouble(Values(I))
End If
Else
LastValue = LastValue / Convert.ToDouble(Values(I))
End If
Case cEqu
If Len(Values(I)) > 1 Then
If Mid(Values(I), Len(Values(I)), Len(Values(I)) - 1) = "%" Then
LastValue = LastValue ^ Convert.ToDouble(Mid(Values(I), 1, Len(Values(I)) - 1) / 100)
Else
LastValue = LastValue ^ Convert.ToDouble(Values(I))
End If
Else
LastValue = LastValue ^ Convert.ToDouble(Values(I))
End If
End Select
Next
If Values.Count - 1 = 0 And Len(Values(0)) > 1 And Mid(Values(0), Len(Values(0)) - 1, 1) = "%" Then
Return Convert.ToDouble(Mid(Values(0), 1, Len(Values(0)) - 1)) / 100
Else
Return LastValue
End If
Catch ex As Exception
MessageBox.Show("An error has occured:" & vbNewLine & "Error Description:" & ex.ToString, "Dynamic Calculate Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Return 0
End Try
End Function

شرح الدالة:

تحتوي الدالة على معامل واحد فقط من نوع String تضع فيه نص عمليتك الحسابية وليكن 1+1-1 وهي تدعم المعاملات التالية للعمليات الحسابية داخل النص (+),(-),(*),(/),(^).

كيفية إستخدام الدالة:

ضع الدالة داخل وحدة Module أو داخل الـ Form خارج اي أحدث او إجراءات وبعدها يُمكنك إستدعائها بالطريقة التالية:

لنتفترض أننا نُريد تطبيق العملية الحسابية التالية:

100^2+1762-1000*4%*4/100

فيُكفيك السطر التالي بإستخدام الدالة DynamicCalculate :

TextBox1.Text = DynamicCalculate("100^2+1762-1000*4%*4/100")
وبذلك تحصل على ناتج العملية السابقة داخل TextBox1

أتمنى أن تستفيدوا من الدالة , ولا تنسـونا من صالح دعائكم

والســلام عليكم ورحمة الله وبركاته

Advertisements

2 thoughts on “تطبيق العمليات الحسابية بمرونة (فقط تكتب معادلتك) Dynamic Calculate

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s