الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تنفيذ كود من متغير

بدأه Naser Al Masarwa في 4 ديسمبر 2008 · 11 رد · 940 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه

الاخوة الاعزاء

قمت قبل ايام بوضع سؤال بعنوان تنفيذ كود من جدول

تجدونه على هذا الرابط

/index.ph...mp;#entry904624

ولم يقصر الاخ"Koao" بالمساعدة مشكوراً

وقد كان مثال الاخت زهرة رائعاً وقد استفدت منه كثيراً واوحى الي بأمور اكثر

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

ولكن المشكلة ان تنفيذ الكود لدي يتم من داخل حلقات "Do.......While" وتدور الحلقة احياناً عشرات المرات ويتغير المتغير اثناء دوران الحلقة في كل مرة. وبالتالي فسيتم انشاء الدالة وتنفيذها ومن ثم حذفها في كل دورة من دورات الحلقة "Do .... While"

وسؤالي هنا الا يمكن حفظ الكود داخل متغير وتنفيذ الكود عند الحاجة.

كما هو مبين بالكود التالي:

 dim ar1(3) as string
dim arv(4, 2) as string
dim nst, gst as string
ar1(1) = "b = c ^ 2 *d"
ar1(2) ="a = d*2*c"
ar1(3) = "e = c^2"
arv(1, 1) = "c"
arv(1, 2) = "5"
arv(2, 1) = "d"
arv(2,2) = "2.45"
nst = ""
gst= ""

كما تلاحظون فان المصفوفة "Ar1" تحتوي على مجموعة من المعادلات الرياضية

المصفوفة "Arv"تحتوي على قيم لبعض تلك المتغيرات مقرونة باسماء المتغيرات ..

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

ثم لدينا الحلقة التالية التي تقوم بتعويض المتغيرات داخل المعادلات ليتم احتسابها كالتالي

for i = 1 to 3
nst=""
if ar1(i)<>"" then
for lst =1 to len(ar1(i))
for s = 1 to 4 
if arv(s,1) = mid(ar1(i), s, 1) and arv(s, 2) <>"" then gst  = arv(s, 2)
next s
if gst <> "" then nst = nst & gst else nst = nst  & mid(ar1(i), s, 1)
next lst
ar1(i) = nst
end if
next i
end sub

كما تلاحظون فانه عندما تصبح قيمة المتغير

 i  = "3"

فإن قيمة المتغير

  nst = "e =  5 * 2"

فكيف يمكننا تنفيذ هذه المعادلة بحيث يتم احتساب القيمة فتصبح كالتالي

 nst = "e = 10"

ارجو ان اكون قد اوضحت المطلوب

ناصر المصاروة

تم تعديل هذه المشاركة بواسطة Naser Al Masarwa في 4 ديسمبر 2008 في 03:39

شبكة سوارقريباً

Sewar

#2

اخي الفاضل

راجع هذا الرابط لمعرفة الطرق الصحيحة للدخول والخروج من الحلقات التكرارية ( الدورانية ) وحساب القيم بداخلها

/index.php?showtopic=68610

#3

السلام عليكــم ورحمـة الله وبركاتــه

الاخوة الاعضاء كل عام وانتم بخير

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

ارجو المعذرة اذا كان كلامي غير مفهوم في المرة الاولى

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

يتكون البرنامج من جدولين:

الجدول الاول يحتوي على اسماء متغيرات وقيمها ان وجدت وهو يتكون من ثلاثة حقول

حقل للمعرف وحقل للمتغير وحقل للقيمة.

حقل المعرف يحتوي على قيمة لربط جميع المتغيرات التي تنتمي لنفس المجموعة

حقل المغيرات يحتوي على اسماء المتغيرات والتي تكون على شكل احرف منفردة مثال "E","D","C"

الحقل الثالث حقل قيم المتغيرات وهو من نوع "عشري" يمكن ان يحتوي على قيم فارغة.

post-171591-1228386635_thumb.jpg

والجدول الثاني يحتوي على معادلات رياضية

كما هو مبين بالصورة

post-171591-1228386708_thumb.jpg

يقوم البرنامج بالبحث عن المتغيرات التي لها قيم وتعويض قيمها داخل المعادلات

فالمعادلة "d = c ^ 2 * e"

بعد تعويض قيمة "c" والتي تساوي 2

ستصبح كالتالي

"d = 2 ^ 2 * e"

اما المعادلة "e = c * 2 * 2.5"

فستصبح بعد التعويض كالتالي

"e = 2 * 2 * 2.5"

'طبعاً هذه المعادلة مخزنة في البرنامج ك "نص" (String)

يقوم البرنامج بعد ذلك يتحليل المعادلة من خلال سلسلة طويلة من الاجراءات والدوال لتصبح "e = 10"

هذه الدوال تتاكد من وجود العلامات الرياضية " * , / , + , - , ^ , الجذر التربيعي , sin , cos , tan , mode , abs ......الخ "

ثم تبحث عن يمين ويسار العلامة الرياضية للتاكد من وجود ارقام

ثم يتم ارسال تلك الارقام والعلامة الى الدالة التالية والتي في نظري اعتبرها مضحكة

function Nacalt(rightexp, leftexp, Naex)as string

حيث : "Rightexp" الرقم عن يمين العلامة الرياضية

"Leftexp" الرقم عن يسار العلامة الرياضية

"Naex" العلامة الرياضية

Select case naex
case "*"
Nacalt= leftexp * rightexp
case "/"
Nacalt= leftexp / rightexp
....
end select

اي انه اذا كانت العلامة هي علامة الضرب فانه يضرب يسار المعادلة بيمين المعادلة

واذا كانت قسمة فانه يقسم يسار المعادلة على يمين المعادلة

وهكذا بالنسبة لبقية العلامات

حتى نصل الي "e = 10"

ثم نعوض قيمة "e" في المعادلة الاولى "d = 2 ^ 2 * e" فتصبح كالتالي "d = 2 ^ 2 * 10"

وبعد التحليل باستخدان الدوال السالفة الذكر نحصل على القيمة "d = 40"

ولكن لو امكننا التعامل مع ال"نص""e = 2 * 2 * 2.5" مباشرة

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

"e = 10"

لاختصرنا كثير من الاجراءات

فهل يمكن ذلك؟؟؟؟

ارجو المساعدة فالمسألة غاية في الاهمية

اسف على الاطالة

ناصر المصاروة

تم تعديل هذه المشاركة بواسطة Naser Al Masarwa في 4 ديسمبر 2008 في 14:11

شبكة سوارقريباً

Sewar

#4

مازلت انتظر

الا من مجيب؟؟؟

شبكة سوارقريباً

Sewar

#5

الأخ ناصر

بعد التحية

يمكنك عمل ما تحب باستعمال الدالة EVAL

فهي مختصة لحل هذه المشكلات.

وشكراً

أحمد

#6
a_beshari كتب:
الأخ ناصر

بعد التحية

يمكنك عمل ما تحب باستعمال الدالة EVAL

فهي مختصة لحل هذه المشكلات.

وشكراً

أحمد

الف الف شكرا يا اخي

ساقوم بالتجربة

ناصر المصاروة

شبكة سوارقريباً

Sewar

#7

الاخ احمد جزاك الله خيراً

الحل وفر علي كثيراً

ناصر المصاروة

شبكة سوارقريباً

Sewar

#8

بسم الله الرحمن الرحيم

بارك الله فيك اخي الكريم

هلا ارفقت الحل الذي توصلت اليه لنستفيد كلنا

#9
sx1 كتب:
بسم الله الرحمن الرحيم

بارك الله فيك اخي الكريم

هلا ارفقت الحل الذي توصلت اليه لنستفيد كلنا

هنالك مثال جميل على نفس الموضوع وجدته في مجلة المنتدى التي صدرت خلال فترة العيد

ناصر المصاروة

شبكة سوارقريباً

Sewar

#10

بسم الله الرحمن الرحيم

بارك الله فيك هل تقصد العدد الثالث من المجلة والموجود في المواضيع المثبته وان لم يكن هو فهل يمكن تضيف العنوان

تم تعديل هذه المشاركة بواسطة sx1 في 14 ديسمبر 2008 في 12:21

#11
sx1 كتب:
بسم الله الرحمن الرحيم

بارك الله فيك هل تقصد العدد الثالث من المجلة والموجود في المواضيع المثبته وان لم يكن هو فهل يمكن تضيف العنوان

نعم كنت اقصد العدد الثالث ولكن يبدو اني تسرعت بالرد فالبرنامج الذي قصدته يشبه الى حد ما البرنامج الذي اعمل عليه ولكنه يستخدم دالة داخلية اسمها "Evalexprission" وقد خلطت بينهما.

على كل حال عندما افرغ من برنامجي سأطرحه على صفحات هذا المنتدى

ناصر المصاروة

شبكة سوارقريباً

Sewar

#12

بسم الله الرحمن الرحيم

بارك الله فيك

وارجو ان ترفقه في القريب العاجل على الاقل ما يخص المشكلة التى طرحتها لاني اواجهها

وارجو ان تكون في نفس المشاركة لا في موضوع جديد حتى يكتمل الموضوع

مواضيع مشابهة