إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

مساعدة ضرورية __ معادلة


3 رد (ردود) على هذا الموضوع

#1 moab157

moab157

    عضو

  • الأعضــاء
  • 4 مشاركة

تاريخ المشاركة 10 November 2009 - 10:22 AM

في البداية السلام عليكم ... انا بحاجة ل Function يقوم بعمل لتحليل لعملية حسابية كالآتي

الفنكشن يستقبل نص عبارة عن varchar2 كالاتي '5*2.54+4/2-1*10*2/4' ويقوم بارجاع ناتج العملية الحسابية مع الاخذ بعين الاعتبار الاولويات للقسمة والضرب اولا ثم الجمع والطرح ثانيا ايهما يبدأ من اليسار أولا .. علما بان النص لا يحتوي على الاقواس ,, اخواني من عندو فكرة عن الموضوع الرجاء اسعافي بها واكون لكم من الشاكرين وجزاكم الله خيرا.... مستعجل ....


#2 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 10 November 2009 - 11:19 AM

السلام عليكم

يعني هل تريد الفانكشن بضبط الاوليات كأنها تتضع أقواس مثلا


لو أخذنا مثالك السابق كيف تريده أن يكون
أقصد أريد تحليله أنت
وان شاء الله نحاول فيها معا

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#3 moab157

moab157

    عضو

  • الأعضــاء
  • 4 مشاركة

تاريخ المشاركة 10 November 2009 - 11:51 AM

'5*2.54+4/2-1*10*2/4'

هنا العملية الاولى هو بعث بارميتر هذه المعادلة كنص الى الفنكشن

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

1-) 4/2=2
5*2.54+4/2-1*10*2
2-)10*2=20
5*2.54+4/2-1*20
3-)20*1=20
5*2.54+4/2-20
4-) 2/4=0.5
5*2.54+0.5-20
5-)5*2.54=12.7
12.7+0.5-20
6-) 20-0.5=19.5
7-)12.7+19.5=32.2
32.2

اخي العزيز تبدأ المعادلة بالنص اعلاه ثم يرجع لنا الفنكشن الرقم الاخير 32.2 , المعادلة لا تحتوي على الاقواس فقط اربع عمليات قسمة وضرب وطرح وجمع وياخد بعين الاعتبارات الاولويات مثلا الضرب والقسمة نفس الاولوية واذا احتوت المعادلة على ضرب وقسمة نبدأ بحلها من اليسار واليمين , ثم اولوية الجمع والطرح واذا تساون من اليسار لليمين .

وشكرا لك

#4 moab157

moab157

    عضو

  • الأعضــاء
  • 4 مشاركة

تاريخ المشاركة 12 November 2009 - 11:03 AM

اعزائي وجدت الحل وهو كالتالي

PROCEDURE CALC_FORMULA(CALC VARCHAR2) IS
source VARCHAR2(500);
V_OUTPUT NUMBER;
source_cursor INTEGER;
IGNORE INTEGER;
BEGIN source_cursor := dbms_sql.open_cursor;
DBMS_SQL.PARSE(source_cursor,
'SELECT '||CALC||' FROM DUAL', DBMS_SQL.NATIVE);
DBMS_SQL.DEFINE_COLUMN(source_cursor, 1, V_OUTPUT);
ignore := DBMS_SQL.EXECUTE(source_cursor);
IF DBMS_SQL.FETCH_ROWS(source_cursor)>0 THEN
DBMS_SQL.COLUMN_VALUE(source_cursor, 1, V_OUTPUT);
DBMS_OUTPUT.PUT_LINE(V_OUTPUT);
END IF;
EXCEPTION
WHEN OTHERS THEN
IF DBMS_SQL.IS_OPEN(source_cursor) THEN
DBMS_SQL.CLOSE_CURSOR(source_cursor);
END IF;
END;