![]() |
|
الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! (/showthread.php?tid=7785) الصفحات:
1
2
|
الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! - أنس محمود - 28-02-13 السلام عليكم ورحمة الله وبركاته ها أنا أعود بالجزء الثالث من موضوعي ، الأجزاء السابقة أعتذر عن التأخير ، لن أضيع وقتك في الكلام ، قيل أن نبدأ أرجوا منك التركيز بشدة في هذتا الجزء ، هيا بنا نبدأ ،، بسم الله الرحمن الرحيم
عنوان المقال : فصل العمليات الحسابية من النوع String، ( الجزء الثالث : عمليات الأقواس ).مستوى المقال : مبتدأ - متوسط . اللغة المستخدمة : VB.Net . تقييم المقال : ( متروك للقارئ ) . ثالثاً : دالة ايجاد ناتج عمليات الأقواس : -------- ماذا أعني بـ "عمليات الأقواس " ؟ : عمليات الأقواس هي التي يكون بها الرمز "(" و ")" ، مثلا يمكن اعتبار كلا من "(5+6)/2" و "(5*4)^2+3" عمليات أقواس ، والهدف من هذا الجزء عمل دالة تعيد قيمة من النوع Double تمثل ناتج هذه العملية ، [/HR] -------- تقديم هام :- ما الفرق بين "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"} وبعد تنقية نص العملية من عمليات الضرب الغير مرغوب فيها :- {"(6-4)+(5+1)*3"} وبتكرار هذه العملية :- {CurBracket = "(5+1)"} {"(6-4)+*6*3"} {"(6-4)+6*3"} ثم :- {CurBracket = "(6-4)"} {"*2+*6*3"} {"2+6*3"} وأخيرا بايجاد ناتج هذه العملية :- {"20"} ---------------- والآن إلى التطبيق :- [/HR] نبدأ بسم الله الرحمن الرحيم
حمل المشروع إلى أن انتهينا الجزء السابق .قم بتعريف دالة جديدة بإسم BracketsSums : كود : Function BracketsSums(ByVal Str As String) As Doubleثم سأقوم بتعريف المتغير NewStr لتخرين نص العملية:- كود : Dim CurBracket As Stringبعد ذلك سنقوم بتعريف المتغيرين العدديينXX_1 و XX_2 لتخرين ترتيب بداية ونهاية القوس الحالي :- كود : Dim XX_1, XX_2 As Integerكود : Do While NewStr.Contains("(")اسناد قيمة ترتيب آخر رمز ")" في نص العملية وترتيب أول رمز "(" بعده للمتغيرين XX_1 و XX_2 على الترتيب :- كود : XX_1 = NewStr.LastIndexOf("(")كود : CurBracket = NewStr.Substring(XX_1, XX_2 - XX_1 + 1)[ لاحظ أن :- ( XX_2 - XX_1 + 1 ) هو عدد حروف القوس الحالي حيث XX_2 ترتيب نهاية القوس و XX_1 ترتيب بداية القوس ] والآن استبدال القوس الحالي (CurBracket ) في نص العملية ( NewStr ) بناتج العملية التي يحملها القوس الحالي مسبوقا بعلامة & :- كود : NewStr = NewStr.Replace(CurBracket, "&" & MultiSums(CurBracket.Replace("(", "").Replace(")", "")))_____1. قمت باسباق الناتج بالعلامة "&" كرمز مساعد تمهيدا لإستبدالها برمز عملية الضرب لاحقاً. _____2. قمت بحذف الرموز ")" و "(" قبل تمرير القوس إلى الدالة MultiSums لإيجاد الناتج . والآن سنقوم بتعريف الدالة FilterMultiplies والتي تقوم باسبدال الرمز "&" بعلامة الضرب ( كما أوضحت في التقديم ) :- كود : Function FilterMultiplies(ByVal Str As String) As Stringنعود إلى دالتنا BracketsSums ، الآن نقوم بتمرير نص العملية على الدالة FilterMultiplies لإستبدال العلامات "&" بعلامات الضرب "*" :- كود : NewStr = FilterMultiplies(NewStr)سنقوم الآن بآخر خطوة وهي إعادة الناتج النهائي بتمرير نص العملية للدالة MultiSums :- كود : Return MultiSums(NewStr)هذا كود الدالة كاملة :- كود : Function BracketsSums(ByVal Str As String) As Double[/HR] ---------------- تجربة الدالة :- قم بتعديل الكود داخل الحدث KeyDown لـ TextBox1 إلى :- كود : If e.KeyData = Keys.Enter Thenالآن قم بتجربة المشروع إضغط F5 ،ثم قم بكتابة (6-4)+(5+1)(5-2)، ثم اضغط الزر Enter ( ما النتيجة ! ) [ATTACH=CONFIG]1834[/ATTACH]
الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! - @@أبورائد@@ - 01-03-13 السلام عليكم ورحمة الله وبركاته بارك الله فيك السلام عليكم ورحمة الله وبركاته الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! - أبو يعقوب - 01-03-13 السلام عليكم أول أمنية لي في بداية تعلمي للبرمج كانت تحليل العمليات كنت أحلم ببناء برنامج يحل المسائل الرياضية ! جربت الكود وأعطيته قوس معقد 1+2*(2+5)+(5*5+6*(2+4+6*(1+22+(9+6+(10*6)))))=3604 والناتج مضبوط واصل الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! - Sajad - 01-03-13 [COLOR="#800000"]السلام عليكم بارك الله فيك فكرة رائعة بالتوفيق ان شاءالله[/COLOR] الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! - محمود رغمان - 03-03-13 بارك الله فيك اين روابط الجزء الأول والثانى الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! - sooriaty03 - 03-03-13 جزاك الله خيرا وأحسن إليك الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! - أنس محمود - 04-03-13 السلام عليكم ورحمة الله وبركاته أبو يعقوب كتب :السلام عليكم حمداً لله على السلامة ،، حققت لك أمنية !! محمود رغمان كتب :بارك الله فيك تمام تم أضافتهم ، أعذرني فقط نسيت http://vb4arb.com/vb/tags.php?tag=calculator الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! - محمود رغمان - 07-03-13 جزاك الله خير الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! - Easy4ever - 12-03-13 موضوع جميل بارك الله فيك موضوعك يبيله جلسه مع شاي > :d وتركيز على الأخير > راجع له RE: الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (ال... - RFEE3 ALSHAN - 06-12-14 الف شكر اخي |