![]() |
|
فصل العمليات الحسابية من النوع String، ( الجزء الثالث - عمليات الأقواس ) - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : فصل العمليات الحسابية من النوع String، ( الجزء الثالث - عمليات الأقواس ) (/showthread.php?tid=5077) |
فصل العمليات الحسابية من النوع String، ( الجزء الثالث - عمليات الأقواس ) - RaggiTech - 04-10-12 كاتب الموضوع : أنس محمود
بسم الله الرحمن الرحيم عنوان المقال : فصل العمليات الحسابية من النوع String، ( الجزء الثالث : عمليات الأقواس ). مستوى المقال : مبتدأ - متوسط . اللغة المستخدمة : VB.Net . تقييم المقال : ( متروك للقارئ ) . ثالثاً : دالة ايجاد ناتج عمليات الأقواس : -------- ماذا أعني بـ "عمليات الأقواس " ؟ : عمليات الأقواس هي التي يكون بها الرمز "(" و ")" ، مثلا يمكن اعتبار كلا من "(5+6)/2" و "(5*4)^2+3" عمليات أقواس ، والهدف من هذا الجزء عمل دالة تعيد قيمة من النوع Double تمثل ناتج هذه العملية ، -------- تقديم هام :- ما الفرق بين "5+6/2" و "(5+6)/2" ؟ الفرق ببساطة أن في "5+6/2" سيتم حساب قيمة عملية القسمة "6/2" ثم جمع الناتج مع 5 بحسب الترتيب المنطقي للعمليات المتعددة . أما في "(5+6)/2" فسيتم حساب ناتج عملية الجمع "5+6" ثم قسمة الناتج على 2 . وهذة هي فائدة استخدام الأقواس أنها تعطي ما بداخلها الأولوية دائماً . في هذا الجزء سنقوم بالتالي :- ___& تحديد آخر قوس من الداخل واستبداله بناتج العملية التي يحتويها ، وهذا يكون عن طريق :- _______1. اسناد النص المحصور بين آخر رمز "(" وأول رمز ")" بعده لمتغير القوس الحالي . _______2. ايجاد ناتج العملية التي بداخل القوس باستخدام الدالة MultiSums التي قمنا بتعريفها في الجزء السابق ، ثم استبدال قوس بناتج العملية مسبوقا بعلامة الضرب ( لو أن العملية "(4-2)(5-1)" ستكون بهذا الشكل "*2*4" ). _______3. ازالة علامات الضرب الغير مرغوب فيها ( قد ينتج عن استبدال القوس بعلامة ضرب ثم الناتج ، أن تكون علامة الضرب مسبوقة بعلامة الجمع أو القسمة أو الأس أو تكون علامة الضرب في بداية نص العملية أو في بداية القوس الذي يسبقه ، وفي هذه الخطوة سنقوم بإزالة هذة الرموز ، مثلاً العملية "(5-3)+(3-2)^(1+1)" ستكون بالشكل "*2+*1^*2" وبعد ازالة علامات الضرب الغير مرغوب فيها ستكون بالشكل "2+1^2" ) وسنقوم بتعريف الدالة FilterMultiplies لهذا الغرض . ___& تكرار الخطوات السابقة حتى تخلو العملية من الأقواس ، وتتحول إلى عملية متعددة . ___& ايجاد ناتج العملية المتبقية - والتي أصبحت عملية متعددة - باستخدام الدالة MultiSums ( مثلاً العملية " (6-4)+(5+1)(5-2)" بعد الخطوات السابقة ستكون بالشكل "2+6*3" عند ايجاد الناتج باستخدام الدالة MultiSums سيكون 20 . --------لكي تستوعب ماقلته ، إليك هذا المثال : لو ان العملية المطلوب إيجاد ناتجها " (6-4)+(5+1)(5-2)" فإنه حسب ماقلت:- بفرض أن متغير القوس الحالي هو CurBracket ، وبعد إسناده بآخر قوس في العملية ستكون قيمته : كود : {CurBracket = "(5-2)"}كود : {"(6-4)+(5+1)*3"}كود : {CurBracket = "(5+1)"}كود : {CurBracket = "(6-4)"}كود : {"20"}كود : Function BracketsSums(ByVal Str As String) As Double---------------- والآن إلى التطبيق :- نبدأ بسم الله الرحمن الرحيم
حمل المشروع إلى أن انتهينا الجزء السابق . قم بتعريف دالة جديدة بإسم BracketsSums : كود : Dim CurBracket As Stringثم سأقوم بتعريف المتغير NewStr لتخرين نص العملية:- كود : Dim XX_1, XX_2 As Integerبعد ذلك سنقوم بتعريف المتغيرين العدديينXX_1 و XX_2 لتخرين ترتيب بداية ونهاية القوس الحالي :- كود : Do While NewStr.Contains("(")كود : XX_1 = NewStr.LastIndexOf("(")اسناد قيمة ترتيب آخر رمز ")" في نص العملية وترتيب أول رمز "(" بعده للمتغيرين XX_1 و XX_2 على الترتيب :- كود : CurBracket = NewStr.Substring(XX_1, XX_2 - XX_1 + 1)كود : NewStr = NewStr.Replace(CurBracket, "&" & MultiSums(CurBracket.Replace("(", "").Replace(")", "")))والآن استبدال القوس الحالي (CurBracket ) في نص العملية ( NewStr ) بناتج العملية التي يحملها القوس الحالي مسبوقا بعلامة & :- كود : Function FilterMultiplies(ByVal Str As String) As String_____1. قمت باسباق الناتج بالعلامة "&" كرمز مساعد تمهيدا لإستبدالها برمز عملية الضرب لاحقاً. _____2. قمت بحذف الرموز ")" و "(" قبل تمرير القوس إلى الدالة MultiSums لإيجاد الناتج . والآن سنقوم بتعريف الدالة FilterMultiplies والتي تقوم باسبدال الرمز "&" بعلامة الضرب ( كما أوضحت في التقديم ) :- كود : NewStr = FilterMultiplies(NewStr)نعود إلى دالتنا BracketsSums ، الآن نقوم بتمرير نص العملية على الدالة FilterMultiplies لإستبدال العلامات "&" بعلامات الضرب "*" :- كود : Return MultiSums(NewStr)سنقوم الآن بآخر خطوة وهي إعادة الناتج النهائي بتمرير نص العملية للدالة MultiSums :- كود : Function BracketsSums(ByVal Str As String) As Doubleكود : If e.KeyData = Keys.Enter Then---------------- تجربة الدالة :- قم بتعديل الكود داخل الحدث KeyDown لـ TextBox1 إلى :- If e.KeyData = Keys.Enter Then Me.TextBox1.AppendText("=" & BracketsSums(Me.TextBox1.Text)) End If الآن قم بتجربة المشروع إضغط F5 ،ثم قم بكتابة (6-4)+(5+1)(5-2)، ثم اضغط الزر Enter ( ما النتيجة ! ) إلى اللقاء في الدرس القادم "فصل عمليات الدوال ... " |