المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : كيف نحول السترينج الى عملية حسابية؟


عبد الهادي بهاب
16-01-2017, 01:52 PM
السلام عليكم ورحمة الله وبركاته

لدبنا سترينج مثلا


h = "1+12*45-48/2";

كيف نجعله يعطينا النتيجة ؟

عبود عبود
16-01-2017, 02:11 PM
السلام عليكم ورحمة الله وبركاته

--
x="2*3^5-6*4/5";
x = string.gsub("$return "..x.."$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
Dialog.Message("Notice", x);

المـهاجر
16-01-2017, 02:12 PM
السلام عليكم ورحمة الله وبركاته

لدبنا سترينج مثلا


h = "1+12*45-48/2";

كيف نجعله يعطينا النتيجة ؟


و عليك السلام و رحمة الله و بركاته
هكذا
h = "1+12*45- 48/ 2"
result = loadstring(string.format("return %s",h))()
Dialog.Message("Notice",result);

عبد الهادي بهاب
16-01-2017, 02:16 PM
السلام عليكم ورحمة الله وبركاته

--
x="2*3^5-6*4/5";
x = string.gsub("$return "..x.."$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
dialog.message("notice", x);

تبارك الله ..ربي يجازيكم خيرا استاذنا


و عليك السلام و رحمة الله و بركاته
هكذا
h = "1+12*45- 48/ 2"
result = loadstring(string.format("return %s",h))()
dialog.message("notice",result);

ما شاء الله استاذ حضور دائما قوي و فعال شكرا جزيلا

عبد الهادي بهاب
16-01-2017, 02:42 PM
لمن الاولوية في العمليات ؟

المـهاجر
16-01-2017, 02:43 PM
يمكنك ايضا تثبيتها كدالة
بدلا من كتابة المتغيرات كل مرة
function calc(str)
MathCalc = loadstring(string.format("return %s",str))()
return MathCalc
end

h = "1+12*45- 48/ 2"
r = "9*3+6-4"

Dialog.Message("Notice", calc(r));
Dialog.Message("Notice", calc (h));

النتيجة هى ناتج حساب الدالة بأكملها
أو يمكنك ايضا استبدال السطر الأخير بهذا السطر
Dialog.Message("Notice", MathCalc);
النتيجة واحدة

المـهاجر
16-01-2017, 03:04 PM
لمن الاولوية في العمليات ؟

المسار الطبيعى
الرفع للأسس أولا
و الأس هو الرقم على يمين علامة الأسس

القسمة و الضرب ثانيا
و هنا لا يهم من اولا القسمة ام الضرب لأن الناتج لن يتغير

ثم الجمع و الطرح أخيرا
و لا يهم ايضا من اولا الجمع ام الطرح فلن يتغير الناتج ايضا

هذا ما لم تستخدم الأقواس لتغيير المسار الطبيعى
فإن استخدمتها فسيعطى البرنامج اولوية قصوى لفك الأقواس أولا بغض النظر عن الترتيب السابق

ماذا يقول ملف المساعدة المدمج بالأوتوبلاى ؟
operator precedence
operators are said to have precedence, which is a way of describing the rules that determine which operations in a series of expressions get performed first. A simple example would be the expression 1 + 2 * 3. The multiply (*) operator has higher precedence than the add (+) operator, so this expression is equivalent to 1 + (2 * 3). In other words, the expression 2 * 3 is performed first, and then 1 + 6 is performed, resulting in the final value 7.

You can override the natural order of precedence by using parentheses. For instance, the expression (1 + 2) * 3 resolves to 9. The parentheses make the whole sub-expression “1 + 2” the left value of the multiply (*) operator. Essentially, the sub-expression 1 + 2 is evaluated first, and the result is then used in the expression 3 * 3.

عبود عبود
16-01-2017, 03:12 PM
جزاك الله خيرا أخى المهاجر للمتابعة

المـهاجر
16-01-2017, 03:19 PM
جزاك الله خيرا أخى المهاجر للمتابعة
بارك الله فيك اخى
و عذرا فعند وضعى مشاركتى الأولى لم اكن اعرف انك اجبت (لاحظ التوقيتات)

عبد الهادي بهاب
16-01-2017, 04:06 PM
يمكنك ايضا تثبيتها كدالة
بدلا من كتابة المتغيرات كل مرة
function calc(str)
mathcalc = loadstring(string.format("return %s",str))()
return mathcalc
end

h = "1+12*45- 48/ 2"
r = "9*3+6-4"

dialog.message("notice", calc(r));
dialog.message("notice", calc (h));

النتيجة هى ناتج حساب الدالة بأكملها
أو يمكنك ايضا استبدال السطر الأخير بهذا السطر
dialog.message("notice", mathcalc);
النتيجة واحدة

ما شاء الله و لا قوة الا بالله
ردودك دائما تعتبر دروس ذات اهمية كبيرة
جزاك الله خيرا على ما اوليتني به من اهتمام سيدي الكريم

ثامر أبو بلقيس
17-01-2017, 02:56 PM
نفس سؤالك كتمرين على الرابط و فيه الحل :
http://www.abc4web.net/vb/showthread.php?t=30615
و نفس إنشغالك وفيه حل آخر
http://www.abc4web.net/vb/showthread.php?t=30727

وسألت عن الأسبقية الحسابيـــة وقد طرحت سابقا
http://www.abc4web.net/vb/showthread.php?t=28505

ذكرت ذلك فقط من باب التشجيع على البحث قبل الكتابة وفق لما نصت عليه قوانين القسم
بالتوفيق :abc_138:

عبد الهادي بهاب
17-01-2017, 05:36 PM
نفس سؤالك كتمرين على الرابط و فيه الحل :
http://www.abc4web.net/vb/showthread.php?t=30615
و نفس إنشغالك وفيه حل آخر
http://www.abc4web.net/vb/showthread.php?t=30727

وسألت عن الأسبقية الحسابيـــة وقد طرحت سابقا
http://www.abc4web.net/vb/showthread.php?t=28505

ذكرت ذلك فقط من باب التشجيع على البحث قبل الكتابة وفق لما نصت عليه قوانين القسم
بالتوفيق :abc_138:

صحيح جدا .....لم ابحث عنهما بارك اله فيكم على الاجابة و على الروابط

عبد الهادي بهاب
18-01-2017, 05:53 PM
السلام عليكم ورحمة الله وبركاته

--
x="2*3^5-6*4/5";
x = string.gsub("$return "..x.."$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
Dialog.Message("Notice", x);

لماذا عندما اضيف هذه الاقواس يظهر خطأ

x="(((-4*4)/5)+5)-9)";
x = string.gsub("$return "..x.."$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
Dialog.Message("Notice", x);

المـهاجر
19-01-2017, 02:43 AM
لماذا عندما اضيف هذه الاقواس يظهر خطأ

x="(((-4*4)/5)+5)-9)";

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

غير ذلك
راجع صياغتك للأقواس
لأنها مؤكد خطأ
فلديك اربعة اقواس يمين و ثلاثة أقواس يسار فقط
لديك قوس غير مغلق
أعتقد انه عليك حذف القوس على يمين ال 9 أو إضافة قوس إلى الثلاثة أقواس اليسرى
موفق

عبد الهادي بهاب
19-01-2017, 05:58 PM
لا أعلم طبيعة العملية الحسابية التى انت بصددها
لكن مهما كانت عمليتك الحسابية فلابد ان تتساوى أقواس اليمين مع أقواس اليسار
بعبارة أخرى .... يجب ان تكون جميع الأقواس مغلقة

غير ذلك
راجع صياغتك للأقواس
لأنها مؤكد خطأ
فلديك اربعة اقواس يمين و ثلاثة أقواس يسار فقط
لديك قوس غير مغلق
أعتقد انه عليك حذف القوس على يمين ال 9 أو إضافة قوس إلى الثلاثة أقواس اليسرى
موفق

في تمرين للاستاذ ثامر
البــــــوم أمامك تحدي برمجــــي
أنت من هواة ركوب الأمواج العاليـــة في عالم البرمجة
إذن حاول كتابة خوارزمية تستنتج العلاقات الحسابيــــة من جمع و طرح و ضرب و قسمة
بدون تكرار لمجموع ما

مثال : من الأعداد : -4 ’ 9 ’ 10 ’ 8 ’ 6
كون علاقات حسابية برمجية للحصول على الناتج 7

بمعنى كود يحبل إلى أن
(((-4+9)*10)-8)/6=7

فالمطلوب يعنى باستعمال الاعداد و العلاقات الحسابية ليكون الناتج 7
فالكتابة الحسابية هي المطلوبة و الكود يكون عام أعطيه أرقام و الناتج و هو يخبرني كبف جرت العملية ؟

سيكون أجمل كود تكتبـــــه في حال تجاحك في تحقيق المطلوب موفق :abc_138:


حاولت ان اكتب كود يسمح لي بحصر 120 احتمال
و الكود مبي على مبدأ وضع كل الاحتمالات المكننة لتموقع الارقام الخمسة و ايضا العمليات الاربعة
وحفظها في مصفوفة ........بحيث تكون على شكر صيغ حسابية ( سترينج بالاقواس ) ....
ثم ياتي دور الكود الذي يقوم بالحساب .....

http://a.top4top.net/p_381vo71v1.png

هاهو الملف المفتوح

http://up.top4top.net/downloadf-381naahc1-rar.html

الكود يعمل تمام تمام لكن في حالات معينة فيها العدد سالب تظهر راسلة الخطأ
وهو محل السؤال

المـهاجر
21-01-2017, 09:10 AM
في تمرين للاستاذ ثامر



حاولت ان اكتب كود يسمح لي بحصر 120 احتمال
و الكود مبي على مبدأ وضع كل الاحتمالات المكننة لتموقع الارقام الخمسة و ايضا العمليات الاربعة
وحفظها في مصفوفة ........بحيث تكون على شكر صيغ حسابية ( سترينج بالاقواس ) ....
ثم ياتي دور الكود الذي يقوم بالحساب .....

http://a.top4top.net/p_381vo71v1.png

هاهو الملف المفتوح

http://up.top4top.net/downloadf-381naahc1-rar.html

الكود يعمل تمام تمام لكن في حالات معينة فيها العدد سالب تظهر راسلة الخطأ
وهو محل السؤال

لابد ان يتساوى عدد الأقواس يمينا و يسارا (هذا قانون رياضى لا يقبل المناقشة)
لا يمكنك التغاضى عن قوانين الرياضيات ثم تتوقع ان يستقيم معك الكود و نتائجه
فى حالتك المطروحة ناتج x يساوى سالب 7.2
بشرط ان تلتزم بالنصيحة
"احذف القوس على يمين ال 9 أو أضف قوسا الى الثلاثة أقواس اليسرى"
وصلنا الآن لمحطة الحقيقة
جرب الأن الكود خاصتك بعد التعديل الصحيح بحذف القوس الزائد الموجود يمين الرقم 9
x="(((-4*4)/5)+5)-9";
x = string.gsub("$return "..x.."$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
Dialog.Message("Notice", x);
ستخبرك الرسالة ان قيمة x تساوى سالب 7.2
موفق

عبد الهادي بهاب
21-01-2017, 10:05 PM
لابد ان يتساوى عدد الأقواس يمينا و يسارا (هذا قانون رياضى لا يقبل المناقشة)
لا يمكنك التغاضى عن قوانين الرياضيات ثم تتوقع ان يستقيم معك الكود و نتائجه
فى حالتك المطروحة ناتج x يساوى سالب 7.2
بشرط ان تلتزم بالنصيحة
"احذف القوس على يمين ال 9 أو أضف قوسا الى الثلاثة أقواس اليسرى"
وصلنا الآن لمحطة الحقيقة
جرب الأن الكود خاصتك بعد التعديل الصحيح بحذف القوس الزائد الموجود يمين الرقم 9
x="(((-4*4)/5)+5)-9";
x = string.gsub("$return "..x.."$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
dialog.message("notice", x);
ستخبرك الرسالة ان قيمة x تساوى سالب 7.2
موفق

شكرا جزيلا استاذ
الى التطبيق و لنا عودة

فضيل الجزائري
09-02-2017, 09:05 PM
شكرا و جزاكم الله خير الجزاء على مجهودكم

ثامر أبو بلقيس
30-06-2017, 01:46 PM
يرفع :abc_152: