Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص

رثاء

‏خالص العزاء والمواساه في وفاة العضو القدير الأخ ياسر ياسين رحمه الله

https://www.maxforums.net/node/3676654
شاهد أكثر
شاهد أقل

فريق المنابر للبرمجة ::::مشروع الالة الحاسبة::::

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • اسف شباب على انقطاعى الطويل ... لم اترك المشروع ولا شئ ولكن أنشغات بكثره فى هذه الأيام ... وانا أعمل على الاله منذ يومين تقريبا ... وبما انكما قد انهيتماها .. فسأحاول أن اتمها لوحدى للنهايه و نقارن الأكواد بعضها ببعض لتفادى جميع الأخطاء إن شاء الله .

    أسف مره أخرى على القطعه الطويله .


    اا
    اا

    تعليق


    • حبيبنا مصطفى ولا يهمك
      غياب غير محدد بسبب الدراسة واعمال سرية انتظروا المفاجأة قريبا ان شاء الله
      You must not feel tired ! , You must not feel desperate .
      You must feel hopeful .
      You must feel ALLAH with U !
      GO GO You Can DO IT , Believe that You Can Do it ! , IF ALLAH With U , NOTHING will Dare to stop U Along your Dream Road !
      So , GO and does not return here even you reach to UR Dream and Believe you will have many problems , mistakes and difficulties and you will cross it to UR Dream

      تعليق


      • المشاركة الأصلية بواسطة tefa el gn مشاهدة المشاركة
        اسف شباب على انقطاعى الطويل ... لم اترك المشروع ولا شئ ولكن أنشغات بكثره فى هذه الأيام ... وانا أعمل على الاله منذ يومين تقريبا ... وبما انكما قد انهيتماها .. فسأحاول أن اتمها لوحدى للنهايه و نقارن الأكواد بعضها ببعض لتفادى جميع الأخطاء إن شاء الله .

        أسف مره أخرى على القطعه الطويله .
        عادي أخي مصطفى لا تهتم لكن يمكنك مساعدت الأخ أحمد حتى لايكون وحده
        Facebook--------------------Youtube Channel

        تعليق


        • @الأخ مصطفى (ان لا تمانع مناداتك بهذا الاسم في المنتدى)
          لا ألومك ولكن أنا أكملت الجزء الخاص بنا وحدي وكما قال الأخ منصف ممكن تعمل مع الأخ أبو فتحي

          @الأخ منصف
          يمكن اضافة جزء المعادلة بسهولة لاحقا عندما ينتهي الأخ أبو فتحي


          أخييرا الآلة جاهزة للعمل ... انا تركت البرنامج مقسوم لملفين احداهما Base والذي يحتوي على كود المجموعة الأولى وهو:
          كود:
          import Calc
          
          failure = True
          while (failure == True):
                  string = input()
          
                  n = ""
                  nums = []
                  operators = []
          
                  for c in string:
                          if (c >= '0' and c <= '9'):
                                  n += c
                          else:
                              if (n != ""):
                                  nums.append(float(n))
                                  n = ""
                  if (n != ""):
                          nums.append(float(n))
          
                  for b in string:
                          if (b == "+" or b == "*" or b =="/" or b == "^"
                              or b == "-" or b == "(" or b == ")"): 
                                   operators.append(b)
          
                  test_ops = []
                  for op in operators:
                      if (op != "(" and op != "("):
                          test_ops.append(op)
              
                  if len(test_ops)>len(nums):
                      print ("Error! Please try again.")
                  elif len(nums)-1>len(operators):
                      print ("Error! Please try again.")
                  else:
                      failure = False
                      print(Calc.calc(nums, operators))
          input("Press Enter To Continue: ")
          والآخر Calc والذي يحتوي على كودي وهو:
          كود:
          def get_result(nums, ops):
              while(ops != []):
                  opn = -1
                  n = 0
                  while (n < len(ops)):
                      if (opn == -1):
                              opn = n
                      else:
                          if (ops[opn] == '+' or ops[opn] == '-'):
                              if (ops[n] == '*' or ops[n] == '/'):
                                  opn = n
                          if (ops[opn] == '*' or ops[opn] == '/' or ops[opn] == '+' or ops[opn] == '-'):
                              if (ops[n] == '^'):
                                  opn = n
                      n+=1
                  if (ops[opn] == '+'):
                      nums.insert(opn, nums.pop(opn) + nums.pop(opn))
                  elif (ops[opn] == '-'):
                      nums.insert(opn, nums.pop(opn) - nums.pop(opn))
                  elif (ops[opn] == '*'):
                      nums.insert(opn, nums.pop(opn) * nums.pop(opn))
                  elif (ops[opn] == '/'):
                      nums.insert(opn, nums.pop(opn) / nums.pop(opn))
                  elif (ops[opn] == '^'):
                      nums.insert(opn, nums.pop(opn) ** nums.pop(opn))
                  ops.pop(opn)
              return nums[0]
          
          
          def calc(nums, ops):
              mod_ops = []
              brackets = []
              
              for i in range(len(ops)):
                  if (ops[i] != '(' and ops[i] != ')'):
                      mod_ops += ops[i]
                  else:
                      if ops[i] != ')':
                          temp = "open"
                      else:
                          temp = "close"
                      brackets.append([len(mod_ops), temp])
          
              while (len(brackets)>0):
                  index = -1
                  for i in range(len(brackets)):
                      if (brackets[i][1] == "open"):
                          index = i
                  if (index != -1):
                      ob = brackets.pop(index)
                      cb = brackets.pop(index)
                      new_ops = mod_ops[ob[0]:cb[0]]
                      mod_ops[ob[0]:cb[0]] = []
                      new_nums = nums[ob[0]:cb[0]+1]
                      nums[ob[0]:cb[0]+1] = [get_result(new_nums, new_ops)]
                  else:
                      break
              return get_result(nums, mod_ops)
          ملحوظة التسمية مهمة ولازم يكونوا الملفين في نفس المكان او الفولدر

          وهذا هو ملف مضغوط للمشروع يحتوي على الملفين السابق ذكرهما:

          تعليق


          • نعم نعم اذن ننتظر التطورات من الأخ أحمد فتحي و الأخ مصطفى باتوفييييييييييييق
            @الأخ منصف
            يمكن اضافة جزء المعادلة بسهولة لاحقا عندما ينتهي الأخ أبو فتحي
            حسناذ ننتظر و منتشوق حتى أرى الكود منتهي ان شاء الله
            Facebook--------------------Youtube Channel

            تعليق


            • ماشي ياشباب ما الشغل الذي انهي وما المطلوب مني لكي اعمل علية ؟
              وهل سيتواصل معي اخي مصطفي ام نبقي كل واحد علي كود خاص ؟
              الأبداع...لا يأتي بـــدون تجــارب فــاشـــلــة

              تعليق


              • المشاركة الأصلية بواسطة Abo fathy مشاهدة المشاركة
                ماشي ياشباب ما الشغل الذي انهي وما المطلوب مني لكي اعمل علية ؟
                وهل سيتواصل معي اخي مصطفي ام نبقي كل واحد علي كود خاص ؟
                المجموعة الثالثة: من الأشخاص الباقيين وستعمل دالة مثل المجموعة التانية وبعد ذلك تحل المعادلة
                هاذا دوركم لكني أنصحكم بالتواصل مع بعضكم كما فعلنا أنا و الأخ أنس أحسن
                Facebook--------------------Youtube Channel

                تعليق


                • خلصنا هيييييييييييييه ههههههههه انا كنت تحولت لقطعة جبنة بالبايثون
                  غياب غير محدد بسبب الدراسة واعمال سرية انتظروا المفاجأة قريبا ان شاء الله
                  You must not feel tired ! , You must not feel desperate .
                  You must feel hopeful .
                  You must feel ALLAH with U !
                  GO GO You Can DO IT , Believe that You Can Do it ! , IF ALLAH With U , NOTHING will Dare to stop U Along your Dream Road !
                  So , GO and does not return here even you reach to UR Dream and Believe you will have many problems , mistakes and difficulties and you will cross it to UR Dream

                  تعليق


                  • ما فكرة الداله المراد بصنعها ؟
                    شباب وضحو شوي لأني حاسس المشروع مش منظم !!
                    مش عارف اعمل ايه بالظبط
                    الأبداع...لا يأتي بـــدون تجــارب فــاشـــلــة

                    تعليق


                    • فكرة الدالة اللي حتعملها انها بتأخذ متغيرين هما متغير مصفوفة الأعداد ومتغير مصفوفة العمليات وتستخدمهم في حل المعادلة مثال:
                      افرض ان المتسخدم أدخل هذه العملية:
                      كود:
                      10 + 5 * x = 20
                      ما سيحدث هو انك ستحصل على متغيرين هما مصفوفة الأعداد هذه:
                      كود:
                      [10,5,x,20]
                      ومصفوفة العمليات هذه:
                      كود:
                      ['+', '*', '=']
                      تقوم بعد ذلك بحل المعادلة يعني فقط تجعل المتغير x في طرف لوحده في المعادلة وبعدين في الطرف الآخر تستدعي الدالة اللي أنا عملتها وهي الدالة calc لتحسب الطرف الآخر وترجع الناتج

                      تعليق


                      • اخي blackx ممكن تشرح اكواد الملفين
                        Base.py
                        calc.py
                        وجزاك الله كل خير
                        الأبداع...لا يأتي بـــدون تجــارب فــاشـــلــة

                        تعليق


                        • حسنا ولكن سيأخذ هذا الأمر وقت ربما يوم او اثنين

                          تعليق


                          • سنعتبر ان ادخال المستخدم كان:
                            كود:
                            "10 * 2+ 3= "
                            شرح Base.py:

                            كود:
                            import Calc
                            كود:
                            failure = True
                            تعريف متغير يحمل القيمة (True) سيتم استخدامه في الحلقة لتكرار عملية ادخال المستخدم عند حدوث خطأ وسيتضح معناه أكثر لاحقا

                            كود:
                            while (failure == True):
                            الحلقة التي ذكرتها سابقا

                            كود:
                            string = input()
                            تعريف متغير يحمل ادخال المستخدم ويتم اجراء عمليات عليه لاستخراج مصفوفتين هما مصفوفة الأعداد والعمليات كما سيتضح لاحقا
                            وفي هذا الشرح اعتبرنا ادخال المستخدم
                            كود:
                            "10 * 2+ 3= "
                            لاحظ انه سلسلة نصية لان الدالة تعطينا ادخال المستخدم على هيئة سلسلة نصية

                            جزء استخراج مصفوفة الأعداد:
                            هناك أمر مهم عند استخراج مصفوفة الأعداد وهو تجاهل المسافات بمعنى لو كان في ادخال المستخدم مسافات نقوم بتجاهلها
                            في السابق كنا نحذف المسافات لكن وجدت طريقة أبسط وهي اننا نتجاهلها بدل حذفها ولذلك وضعت مسافات في الادخال حتى يتضح اهمية تجاهل المسافات

                            طريقة استخراج مصفوفة الأعداد:
                            بما ان الأرقام مخزنة في سلسلة نصية نقوم باستخراج عدد واحد من السلسلة ونحوله الى رقم باستخدام الدالة float ثم نعاود استخراج الرقم الذي يليه وهكذا الى ان ننتهي من جميع الأرقام في السلسلة

                            كود:
                                    n = ""
                            هذا متغير من نوع سلسة نصية سيمثل العدد الذي سنستخرجه من السلسلة string بحيث نضيف له الاعداد من المصفوفة كما سيلي

                            كود:
                                    nums = []
                                    operators = []
                            تعريف مصفوفتين هما مصفوفة الأعداد ومصفوفة العمليات

                            كود:
                                    for c in string:
                            حلقة تكرار تقوم باعطاء المتغير c قيمة الحرف الأول في المتغير string ثم الثاني ثم الثالث الى نهاية الحروف في المتغير
                            سنستخدم هذه الحلقة لاستخراج عدد ثم اضافته لمصفوفة الاعداد ثم استخراج عدد آخر ثم اضافته لمصفوفة الأعداد وهكذا الى نهاية الأعداد في المتغير string

                            كود:
                                            if (c >= '0' and c <= '9'):
                            اذا كان الحرف المعطى للمتغير c في هذه الدورة من الحلقة "حرف" بين 0 و 9 (الحروف لها قيم انظر الصورة تلاحظ أن حروف الأعداد موضوعة بالقرب من بعضها ولا يتخللها حرف آخر واصغر حرف عدد قيمة هو "0" و أكبرها هو "9" فلو كان الحرف محصورا بينهما او مساو لهما فهو بالتأكيد رقم!) سيتم تنفيذ السطر التالي

                            كود:
                            n += c
                            نقوم باضافة الحرف (الرقم) للمتغير n
                            في كل مرة يتحقق فيها الشرط السابق سيتم اضافة الحرف (الرقم) للمتغير n فيصبح حامل لقيمة أول عدد في ادخال المستخدم

                            كود:
                            else:
                                                if (n != ""):
                            هذا هو الشرط الذي يجعل البرنامج يتجاهل المسافات وسأشرح ذلك لاحقا ولكن الآن اعلم فقط انه اذا لم يتحقق شرط كون المتغير c يحمل قيمة حرفية عددية فانه سيتم تنفيذ الأوامر المندرجة تحت else

                            كود:
                            nums.append(float(n))
                                                    n = ""
                            نسند المتغير n بعد تحويله الى عدد الى مصفوفة الأعداد ثم نفرغه حتى يخزن الرقم الذي يليه

                            هنا تنتهي الحلقة

                            كود:
                            if (n != ""):
                                            nums.append(float(n))
                            نفس الأمر الفائت!

                            شرح طريقة استخراج الأعداد بفرض أن الادخال كان
                            كود:
                            "10 * 2+ 3= "
                            :
                            نبدأ من الحلقة:

                            كود:
                            for c in string:
                            في الدورة الأولى سيحمل المتغير c القيمة "1"

                            كود:
                            if (c >= '0' and c <= '9'):
                                                    n += c
                            بما ان "1" تقع بين "0" و "9" سيتحقق الشرط فيصبح المتغير n يحمل القيمة "1" لاننا اضفنا له المتغير c

                            الدورة الثانية سيحمل المتغير c القيمة "0" ويتحقق الشرط فيصبح المتغير n يحمل القيمة "10"

                            الدورة الثالثة سيحمل المتغير c القيمة " " ولن يتحقق الشرط لان " " لا تقع في النطاق بين "0" و "9"

                            كود:
                            else:
                                                if (n != ""):
                                                    nums.append(float(n))
                                                    n = ""
                            بما ان الشرط لم يتحقق سيتم تنفيذ هذه الأوامر فأولا سيتأكد أن المتغير n لا يحمل القيمة "" والشرط سيتحقق لان المتغير n يحمل القيمة "10" ثانيا سيتم اسناد المتغير بعد تحويله الى عدد الى مصفوفة الاعداد فتصبح المصفوفة هكذا
                            كود:
                            [10]
                            بعد ذلك سيتم تفريغ المتغير n

                            الدورة الرابعة هنا تتضح اهمية الشرط
                            كود:
                              if (n != ""):
                            فلو لم يوجد هذا الشرط كان البرنامج سيحاول تحويل "" الى عدد فيحدث خطأ

                            الدورة الخامسة ايضا مثل الدورة الرابعة

                            الدورة السادسة سيحمل n القيمة "2"

                            الدورة السابعة سيتم اسناد المتغير n بعد تحويله لعدد الى مصفوفة الأعداد ثم تفريغ المتغير فتصبح مصفوفة الأعداد
                            كود:
                            [10, 2]
                            الدورة الثامنة مثل الدورة الرابعة والخامسة

                            الدورة التاسعة سيحمل n القيمة "3"

                            الدورة العاشرة سيتم اسناد المتغير n بعد تحويله لعدد الى مصفوفة الأعداد ثم تفريغ المتغير فتصبح مصفوفة الأعداد
                            كود:
                            [10, 2, 3]
                            الدورة الحادية عشر والثانية عشر مثل الدورة الرابعة والخامسة والثامنة
                            نهاية الحلقة

                            قد تتسائل ما اهمية السطرين بعد الحلقة؟ جرب تتبع ماذا سيحدث لو كان الادخال
                            كود:
                            1 + 2 * 3
                            وانظر ماذا سيحدث

                            طريقة استخراج العمليات من ادخال المستخدم:
                            الطريقة واضحة وسهلة ومجرد فقط نعمل حلقة ونمشي على الحروف في ادخال المستخدم حرف حرف ولو وجدت انه الحرف عبارة عن عملية تضيفها لمصفوفة العمليات والعمليات هي الجمع والطرح والضرب والقسمة والأس والأقواس ( )

                            كود:
                                    for b in string:
                                            if (b == "+" or b == "*" or b =="/" or b == "^"
                                                or b == "-" or b == "(" or b == ")"): 
                                                     operators.append(b)
                            التأكد من خلو الادخال من الأخطاء:
                            أولا يجب ان تعلم ان اي عملية حسابية بسيطة تحتوي على العمليات المذكورة سابقا مع استثناء الأقواس فقط دائما وأبدا تكون فيها عدد العمليات أقل من الأعداد بواحد يعني مثلا هذه العملية:
                            كود:
                            10 * 2 + 3
                            تجد فيها عدد الأعداد 3 والعمليات 2
                            لو ما زلت غير مقتنع جرب بنفسك هات اي عملية وعدد العمليات وعد الأعداد فيها واتذكر مع استثناء الأقواس

                            نرجع للكود:
                            كود:
                            test_ops = []
                                    for op in operators:
                                        if (op != "(" and op != "("):
                                            test_ops.append(op)
                                
                                    if len(test_ops)>len(nums):
                                        print ("Error! Please try again.")
                                    elif len(nums)-1>len(operators):
                                        print ("Error! Please try again.")
                                    else:
                                        failure = False
                                        print(Calc.calc(nums, operators))
                            أولا أنشأت مصفوفة سنقوم بجعلها باستخدام حلقة for تحمل جميع العمليات في مصفوفة العمليات باستثناء الأقواس
                            ثانيا المصفوفة هذه اذا كان طوله أكبر من طول مصفوفة الأعداد يعني ان هناك خطأ فنقوم باخراج رسالة خطأ
                            ثالثا لو كانت مصفوفة الأعداد أكبر من مصفوفة العمليات المعدلة (test_ops) بأكثر من واحد يعني ان هناك خطأ لان مصفوفة الأعداد يجب ان تكون أكبر بواحد فقط فنقوم باخراج رسالة خطأ
                            رابعا لو لم نجد أي خطأ نقوم بجعل المتغير Failure يساوي False حتى لا يتم تكرار الحلقة المعرفة في أول البرنامج ثم نستدعي الدالة calc الموجودة في الملف Calc.py ونطبع الناتج

                            أي سؤال أو أي شيء غير واضح رجاء اخبرني

                            يتبع شرح الملف Calc.py !
                            التعديل الأخير تم بواسطة BLackx; 24 / 07 / 2014, 05:10 PM.

                            تعليق


                            • شرح الملف Calc.py:
                              الملف فيه دالتين الأولى مهمتهى تحسب العمليات وهذه تحسب دون أقواس وهي الدالة get_result انا كنت شرحتها سابقا عندما كان الملف من دالة واحدة هي هذه الدالة وكان اسمها calc لذلك لن أشرحها مرة أخرى لأنها نفس الدالة باسم مختلف فقط.

                              هنا الشرح

                              توضييح مهمة هذه الدالة هو انها تحسب عمليات الجمع والطرح والضرب والقسمة والأس فقط وهذه الدالة لا يتم استدعائها مباشرة لانها هي دالة مساعدة للدالة الأساسية التي تحسب بأولوية الأقواس وهي الدالة calc التي يمكن استدعائها مباشرة
                              فكرة عمل الدالة calc انها تبحث عن الأقواس وتحسب ما بداخلها باستخدام الدالة get_result ثم تبدله بالناتج

                              يتبع شرح الدالة calc غدا باذن الله

                              تعليق


                              • تكملة شرح الملف Calc.py:
                                الدالة calc:

                                كود:
                                def calc(nums, ops):
                                بداية تعريف الدالة. وهذه هي الدالة الأساسية في الملف التي يتم استدعائها وتقوم بارجاع الناتج النهائي

                                كود:
                                mod_ops = []
                                    brackets = []
                                المصفوفة الأولى ستحتوي على مصفوفة العمليات التي تم استلامها عند مناداة الدالة بعد حذف الأقواس منها
                                المصفوفة الثانية ستحتوي على الأقواس ( ) ومكانها في مصفوفة العمليات الأصلية
                                فكرة العمل الأساسية اني سأبحث عن القوس المفتوح والمقفول ولازم يكونوا أكثر قوسين لهم أولوية في المصفوفة الثانية بمعنى لو كان في أقواس داخل أقواس باختار الأقواس الداخلية وبمعرفة مكان القوسين ممكن أعرف العمليات التي بداخل القوسين من المصفوفة الأولى
                                سيتضح معنى هذا الكلام أكثر لاحقا

                                بداية حلقة
                                كود:
                                for i in range(len(ops)):
                                        if (ops[i] != '(' and ops[i] != ')'):
                                            mod_ops += ops[i]
                                حلقة بسيطة ستختبر جميع عناصر المصفوفة ops بالشرط الذي هو ان يكون العنصر عنصر غير الأقواس (المفتوحة والمغلقة) فاذا تحقق الشرط سنضيف العنصر للمصفوفة المعرفة سابقا

                                كود:
                                else:
                                            if ops[i] != ')':
                                                temp = "open"
                                            else:
                                                temp = "close"
                                            brackets.append([len(mod_ops), temp])
                                لو لم يتحقق الشرط السابق سيتم تنفيذ هذه الأوامر:
                                - يختبر ما اذا كان العنصر قوس مفتوح ام لا وطبعا اذا هو ليس قوس مفتوح فبالتأكيد هو قوس مغلق
                                -اذا تحقق الشرط يجعل المتغير المؤقت يساوي "open"
                                -اما اذا لم تحقق الشرط يجعل المتغير المؤقت يساوي "close"
                                -نضيف عنصر لمصفوفة الأقواس وهو عبارة عن مصفوفة تحمل بيانات القوس (مكان القوس ونوعه مفتوح ام مغلق)
                                لاحظ الى كيف اوجدنا مكان القوس:
                                كود:
                                len(mod_ops)
                                لأن العنصر (القوس) لو لم يكن قوسا فمثلا كان عملية جمع كان سيوضع في هذا المكان يعني عند اضافته للمصفوفة كان سيكون هذا هو عنوان العنصر

                                نهاية الحلقة

                                طريقة ايجاد الناتج مع مراعاة أولوية الأقواس:

                                كود:
                                    while (len(brackets)>0):
                                        index = -1
                                        for i in range(len(brackets)):
                                            if (brackets[i][1] == "open"):
                                                index = i
                                        if (index != -1):
                                            ob = brackets.pop(index)
                                            cb = brackets.pop(index)
                                            new_ops = mod_ops[ob[0]:cb[0]]
                                            mod_ops[ob[0]:cb[0]] = []
                                            new_nums = nums[ob[0]:cb[0]+1]
                                            nums[ob[0]:cb[0]+1] = [get_result(new_nums, new_ops)]
                                        else:
                                            break
                                    return get_result(nums, mod_ops)
                                1-أحدد مكان آخر قوس "مفتوح" (مع ملاحظة ان القوس المغلق سيكون في العنوان الذي بعده مباشرة) إن وجد
                                2- ان لم يجد أي قوس (index == -1) اذهب للخطوة 9
                                3- أقوم بعدها "باخراج وحذف" القوس المغلق والمفتوح الذي حددت مكانه من مصفوفة الأقواس وأخزنهما في متغيرين جديدين (ob و cb)
                                4- باستخدام الموقع المخزن في القوس (تذكر أن القوس عبارة عن مصفوفة تحمل موقع القوس ونوعه) أنسخ العمليات التي هي داخل القوس من مصفوفة العمليات المعدلة (mod_ops) وأخزنها في متغير جديد (new_ops)
                                5- أحذف العمليات التي تم نسخها في الخطوة 4
                                6- باستخدام الموقع المخزن في القوس أيضا أنسخ الأعداد التي هي داخل القوس من مصفوفة الأعداد التي استلمتها عند مناداة الدالة وأخزنها في متغير جديد (new_nums)
                                7- باستخدام الدالة get_result احسب الناتج باعطائها المتغيرين الجديديدن وأقوم بتبديل جميع الأرقام المنسوخة في الخطوة 6 بالناتج
                                8- اذا كان طول مصفوفة الأقواس > 0 أي المصفوفة غير فارغة اذهب للخطوة 1 والا تابع للخطوة 9
                                9- في هذه الخطوة يجب ان تكون مصفوفة الأقواس فارغة بمعنى انه تم حساب كل ما بداخل الأقواس ولكن لم يتم حساب ما هو خارج الأقواس بعد فنوجد الناتج بالدالة get_result باعطائها مصفوفة الأعداد ومصفوفة العمليات المعدلة ونرجع الناتج النهائي

                                لاحظ انه دائما يتم حذف الأرقام داخل الأقواس عند حسابها واستبدالها بالناتج كذلك العمليات يتم حذفها عند حسابها والأقواس

                                لفهم أكثر لهذه الخوارزمية يفضل اتباع ما يحدف لو كانت مصفوفة العمليات هي:

                                كود:
                                ['*', '(', '*', '(', '+', ')', ')']
                                ومصفوفة الأعداد هي:
                                كود:
                                [2, 3, 1, 2]
                                حيث ان ادخال المستخدم هو:
                                كود:
                                2 * ( 3 * ( 1 + 2 ) )
                                الناتج سيكون:
                                18

                                حاول تتابع ما سيحدث خطوة خطوة
                                -----

                                تم بحمد الله تعالى

                                تعليق

                                يعمل...
                                X