السلام عليكم...
تحليل مثل هذه التعبيرات بشكل مباشر صعب حتى و إن كان التعبير بسيطاً بسب الحاجة إلى الاحتفاظ بقيم مؤقتة و أسبقية العمليات و وجود الأقواس ... إلخ.
لذلك يتم تحويل التعبير الرياضي العادي (الذي يسمى Infix أي ذو العوامل البينية بسبب وجود العوامل، أي إشارات الجمع و الطرح و غيرها، بين المعاملات، أي الأعداد) إلى تعبير ذي عوامل بعدية (Postfix) حيث تظهر العوامل بعد المعاملات، أو تعبير ذي عوامل قبلية (Prefix) حيث تظهر العوامل قبل المعاملات، ثم يتم تحليل و تقييم التعبير الناتج.
* مثلاً التعبير:
كود :
(5 ^ (2 + 1) - 25) * 2
يصبح كتعبير Postfix هكذا:
* و التعبير التالي (نفس التعبير السابق و لكن دون أقواس):
يصبح كتعبير Postfix هكذا (لاحظ الفرق):
* كل من عمليتي تحويل تعبير الـ Infix إلى تعبير Postfix (أو Prefix) و تقييم تعبير الـ Postfix (أو Prefix) تحتاج إلى استعمال ما يسمى يالـ Stack من أجل التخزين المؤقت للقيم والعوامل و العودة إلى نقاط التحليل السابقة.
في المرفقات برنامج لهذا الغرض، و هو يحتوي على اثنين من الـ Class Modules واحدة للـ Stack و الأخرى للـ Queue (أو الطابور - و هي غير مستعملة في المثال، لكني أرفقتها للفائدة إذ ربما يحتاجها أحد ما لاستعمالها في برنامج آخر). يوجد شرح بالعربي في الكود لبعض الأجزاء.
ADT.rar (الحجم : 4.44 ك ب / التحميلات : 75)
نرجو الاستفادة و السلام.