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

مشاهدة النسخة كاملة : شرح الحلقات التكرارية " for , repeat , while " والإيقاف الإجبارى وكسر حلقة التكرار break


عبود عبود
18-03-2016, 02:36 AM
http://i.imgur.com/57UrtCm.gif
http://i.imgur.com/emf2NIh.gif

شرح الحلقات التكرارية

ما هو التكرار ولماذا نستخدمه وكيف يتم ؟

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

for أو repeat أو while




الجزء الأول : الكلمة المحجوزة for :

أولا : يمكن أن يكون التكرار Numeric رقمية أو عددية ويكون بناء هذه الحلقة كالتالى :

--
for var=exp1,exp2,exp3 do
something
end


http://i.imgur.com/D2vbNba.png

فى الكود السابق تم وضع متغير إفتراضى " يمكن تغييره بآخر كما تريد " كان المتغير هو "var" يوضع لهذا المتغير من وإلى ومقدار خطوة أو خطوات تنفيذية إما المقدار يكون بالإيجاب أو بالسلب أى زيادة أو نقصان بمعنى إجمالى تم وضع معطيات للتكرار " رسم طريق له "
فإذا أخذنا على سبيل المثال الكود التالى :

--
for var=1,15,2 do
Dialog.Message("Notice", var, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end

إذن فى الكود السابق نطلب تكرارا لمعطيات متغير إسمه "var" كان المعطى الأول هو بداية العملية التكرارية من القيمة العددية أو الرقمية 1
وكان المعطى الثانى هو نهاية العملية التكرارية عند القيمة العددية أو الرقمية 15
وكان المعطى الثالث هو مقدار تحرك أو خطوات التكرار عند القيمة العددية أو الرقمية التقديرية 2 أى مقدار خطوتين فى المرة الواحدة أثناء التكرار
إذن التكرار السابق بدأ من 1 ثم يزيد رقمين إلى هذا الرقم الذى بدأ منه فيكون الناتج هو 3 فى المرة التالية للمرة الأولى
ثم يزيد رقمين على المرة الثانية فيكون الناتج هو 5 فى المرة الثالثة
ثم يزيد رقمين على المرة الثالثة فيكون الناتج هو 7 فى المرة الرابعة
ثم يزيد رقمين على المرة الرابعة فيكون الناتج هو 9 فى المرة الخامسة
ثم يزيد رقمين على المرة الخامسة فيكون الناتج هو 11 فى المرة السادسة
ثم يزيد رقمين على المرة السادسة فيكون الناتج هو 13 فى المرة السابعة
ثم يزيد رقمين على المرة السابعة فيكون الناتج هو 15 فى المرة الثامنة
عندما يصل الناتج إلى الحد أو القيمة التى وضعناها وهى 15 يكون هو نهاية إجبارية للدالة التكرارية .
إذن التكرار تم على ثمانى مراحل نتيجة إعطاء مقدار تحرك للدالة وهو 2
إذن إذا تم تغيير عدد الخطوات أو مقدار تحرك 3 بدلا من 2 سوف تبدأ النتيجة من 1 ثم يتم زيادة 3 للنتيجة فى كل مرة
حتى يصل إلى النتيجة النهائية 13 فيتوقف التكرار عندها لآنة إذا تم زيادة 3 إلى 13 ستكون النتيجة 16 ولكننا وضعنا الحد هو 15 فقط وعلى ذلك لن يتم تنفيذ هذة الخطوة .
ما سبق يمكن تسميتة تكرار تصاعدى بمقدار معين .
كما يمكن أن يكون التكرار من تنازلى أى يكون بداية التكرار هو من الحد الأقصى ونهاية التكرار هو الحد الأدنى وأيضا يمكن إستعمال مقدار خطوة تكرارى سالب
كما يوضح المثال التالى المشابة للمثال الأول ولكنة تنازلى :

--
for var=15,1,-2 do
Dialog.Message("Notice", var, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end


إذن فى الكود السابق نطلب تكرارا لمعطيات متغير إسمه "var" كان المعطى الأول هو بداية العملية التكرارية من القيمة العددية أو الرقمية 15
وكان المعطى الثانى هو نهاية العملية التكرارية عند القيمة العددية أو الرقمية 1
وكان المعطى الثالث هو مقدار تحرك أو خطوات التكرار عند القيمة العددية أو الرقمية التقديرية سالبة 2- أى مقدار خطوتين سالبتين فى المرة الواحدة أثناء التكرار التنازلى
إذن التكرار السابق بدأ من 15 ثم ينقص رقمين من هذا الرقم الذى بدأ منه فيكون الناتج هو 13 فى المرة التالية للمرة الأولى
ثم ينقص رقمين على المرة الثانية فيكون الناتج هو 11 فى المرة الثالثة
ثم ينقص رقمين على المرة الثالثة فيكون الناتج هو 9 فى المرة الرابعة
ثم ينقص رقمين على المرة الرابعة فيكون الناتج هو 7 فى المرة الخامسة
ثم ينقص رقمين على المرة الخامسة فيكون الناتج هو 5 فى المرة السادسة
ثم ينقص رقمين على المرة السادسة فيكون الناتج هو 3 فى المرة السابعة
ثم ينقص رقمين على المرة السابعة فيكون الناتج هو 1 فى المرة الثامنة
عندما يصل الناتج إلى الحد أو القيمة التى وضعناها وهى 1 يكون هو نهاية إجبارية للدالة التكرارية .
إذن التكرار تم على ثمانى مراحل نتيجة إعطاء مقدار تحرك للدالة وهو 2- وهو مقدار سالب لتكرار تنازلى .
إذن إذا تم تغيير عدد الخطوات أو مقدار تحرك 3- بدلا من 2- سوف تبدأ النتيجة من 15 ثم يتم إنقاص 3 للنتيجة فى كل مرة
حتى يصل إلى النتيجة النهائية 3 فيتوقف التكرار عندها لآنة إذا تم نقصان 3 من 3 ستكون النتيجة "صفر" ولكننا وضعنا الحد هو 1 فقط وعلى ذلك لن يتم تنفيذ هذة الخطوة .
إذن فى المجمل العام هذا التكرار هو تكرار تنازلى .
وفى العموم أو الإتجاه العام أنت عزيزى المبرمج تقرر هل تريد إستخدام مقدار خطوة أثناء التكرار أم لا تريد ذلك حسب الإحتياج البرمجى لما تريد تنفيذة ففى بعض الأحيان قد يستخدم المقدار هذا كــــ قفزات تكرارية على حسب ما يحتاجة المشروع أى أنه ليس ضروريا كتابة هذا المقدار الخطوى التكرارى إلا إذا كنت بحاجة لفكرة ما .

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

http://i.imgur.com/Etl1eO3.png


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

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


--
for var=1,15 do
Dialog.Message("Notice", var, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end

إذن فى الكود السابق نطلب تكرارا لمعطيات متغير إسمه "var" كان المعطى الأول هو بداية العملية التكرارية من القيمة العددية أو الرقمية 1
وكان المعطى الثانى هو نهاية العملية التكرارية عند القيمة العددية أو الرقمية 15
إذن التكرار السابق بدأ من 1 ثم يزيد رقم واحد فقط إلى هذا الرقم الذى بدأ منه فيكون الناتج هو 2 فى المرة التالية للمرة الأولى
ثم يزيد رقم على المرة الثانية فيكون الناتج هو 3 فى المرة الثالثة
ثم يزيد رقم على المرة الثالثة فيكون الناتج هو 4 فى المرة الرابعة
ثم يزيد رقم على المرة الرابعة فيكون الناتج هو 5 فى المرة الخامسة
ثم يزيد رقم على المرة الخامسة فيكون الناتج هو 6 فى المرة السادسة
ثم يزيد رقم على المرة السادسة فيكون الناتج هو 7 فى المرة السابعة
ثم يزيد رقم على المرة السابعة فيكون الناتج هو 8 فى المرة الثامنة
ثم يزيد رقم على المرة الثامنة فيكون الناتج هو 9 فى المرة التاسعة
ثم يزيد رقم على المرة التاسعة فيكون الناتج هو 10 فى المرة العاشرة
ثم يزيد رقم على المرة العاشرة فيكون الناتج هو 11 فى المرة الحادية عشر
ثم يزيد رقم على المرة الحادية عشر فيكون الناتج هو 12 فى الثانية عشر
ثم يزيد رقم على المرة الثانية عشر فيكون الناتج هو 13 فى المرة الثالثة عشر
ثم يزيد رقم على المرة الثالثة عشر فيكون الناتج هو 14 فى المرة الرابعة عشر
ثم يزيد رقم على المرة الرابعة عشر فيكون الناتج هو 15 فى المرة الخامسة عشر
عندما يصل الناتج إلى الحد أو القيمة التى وضعناها وهى 15 يكون هو نهاية إجبارية للدالة التكرارية .
إذن التكرار تم على خمسة عشر مرحلة نتيجة عدم إعطاء مقدار تحرك للدالة وكان الإفتراضى الأتوماتيكى وهو 1 فيكون التكرار هو تصاعدى موجب بخطوة واحدة ودون كتابتها من قبل المبرمج ووضع 100 خط تحت تصاعدى خطوة موجبة واحدة فقط .

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

http://i.imgur.com/NfWIHC5.gif

ثانيا : يمكن أن يكون التكرار Generic عام ويستخدم هذا النوع من التكرار بواسطة الكلمة المحجوزة for مع الدوال الوظيفية functions والتى يكون لها ريتيرن على شكل مصفوفة أو جدول فيسمح هذا النوع من التكرار بإستخدام مفتاح وقيمة لتصفح أو إستطلاع محتويات الجدول أو المصفوفة .


:abc_087: ومثال على ذلك الإستخدام : ()ipairs() , pairs

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

إذن من المفضل إستخدام ()pairs مع التكرار بدلا من ()ipairs ويوجد فرق بينهما لمن يريد الإختبار العملى ضع قيم فى مصفوفة هذه القيم رقمية ونصية وقيم متغيرة تساوى قيم نصية وإبدع فى المصفوفة لتجد فى النهاية عجز مع ()ipairs .

كما أنه وجب لفت النظر بأن ()pairs تساوى next

:abc_012: نقطة فى غاية الأهمية أيضا ولن تجدها فى أى مكان عربى آخر للشرح هى أن كل من ()pairs و ()ipairs هى تعمل بمثابة next ولكن فى الحالة ()ipairs إذا كان العنصر التالى قيمته nil فإن الحلقة تتوقف ولكن فى الحالة ()pairs فإن دالة التكرار إذا وجدت القيمة nil فى أى إندكس تقفز للإندكس التالى ولا تحتسبه .

نأخذ مثال للتكرار مع ()pairs يكون كالتالى :


--
a = {"one", "two", "three"}
for i, v in pairs(a) do
Dialog.Message("Notice", i.." = "..v, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end



http://www.abc4web.net/vb/images/icons/abc00.gif كما يمكننا عدم كتابة pairs والإستغناء عنها و التعويض عنها بــــ next فيكون شكل الكود كالتالى :


--
a = {"one", "two", "three"}
for i, v in next , a do
Dialog.Message("Notice", i.." = "..v, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end


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



:abc_138: بهذا نكون قد وصلنا لنهاية الشرح لتغطية شرح التكرار بواسطة for


http://i.imgur.com/NfWIHC5.gif


الجزء الثانى : الكلمة المحجوزة repeat :


فى هذا النوع من التكرار بواسطة الكلمة repeat كأننا نصرح للبرنامج بتكرار تنفيذ كود أو عملية معينة مع التأكد من أن الحد الأقصى للتكرار عندما يحدث شيئ معين نريدة .
مثال بسيط على ذلك نريد البرنامج أن يعمل عداد تصاعدى لقيمة متغير على سبيل المثال إسم المتغير هو i
فنقوم بالإعلان عن المتغير وقيمتة الإفتراضية أولا وذلك بأن نكتب :
i=1
إذن إفترضنا للبرنامج أن قيمة i تساوى واحد
ثم نقوم بكتابة التصريح أو الكلمة المعبرة عن التكرار فى هذه الحالة هى repeat ثم محتوى الكود المراد تكراره وهو على سبيل المثال تكرار زيادة 1 إلى قيمة المتغير i الإفتراضية مع كل مرة أو فى كل مرة ثم كتابة الحد الأقصى للتكرار ويكون بإستخدام الكلمة المحجوزة والتى تستخدم مع التكرار repeat وهى كلمة until وأيضا هى النهاية التى يقف أو يتوقف عندها هذا النوع من التكرار فعندما يقرأها البرنامج أثناء تنفيذ الحلقة التكرارية فى كل دورة للحلقة يعمل على مطابقة النتيجة التى يصل لها كقيمة المتغير i مع القيمة المرار الوصول إليها كحد أقصى .

مثال لبناء الكود كما فى الشرح السابق :

--
i = 1 ;
repeat
i = i + 1 ;
until i ==10



:abc_087: إذن بتطبق الكود السابق وعرض النتيجة أو نتيجة المتغير i فى ديالوج على سبيل المثال كما فى الكود التالى :


--
i = 1 ;
repeat
Dialog.Message("Notice", i, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
i = i + 1 ;
until i == 10


بالمعاينة تظهر رسالة تكرارية بها قيمة i تساوى 1
ثم تظهر رسالة بها قيمة i تساوى 2 لأن أثناء التكرار وضعنا قيمة جديدة للمتغير i وهى قيمتة السابقة بزيادة 1 إليها
ثم تظهر رسالة بها قيمة i تساوى 3 لأن أثناء التكرار وضعنا قيمة جديدة للمتغير i وهى قيمتة السابقة بزيادة 1 إليها
ثم تظهر رسالة بها قيمة i تساوى 4 لأن أثناء التكرار وضعنا قيمة جديدة للمتغير i وهى قيمتة السابقة بزيادة 1 إليها
ثم تظهر رسالة بها قيمة i تساوى 5 لأن أثناء التكرار وضعنا قيمة جديدة للمتغير i وهى قيمتة السابقة بزيادة 1 إليها
ثم تظهر رسالة بها قيمة i تساوى 6 لأن أثناء التكرار وضعنا قيمة جديدة للمتغير i وهى قيمتة السابقة بزيادة 1 إليها
ثم تظهر رسالة بها قيمة i تساوى 7 لأن أثناء التكرار وضعنا قيمة جديدة للمتغير i وهى قيمتة السابقة بزيادة 1 إليها
ثم تظهر رسالة بها قيمة i تساوى 8 لأن أثناء التكرار وضعنا قيمة جديدة للمتغير i وهى قيمتة السابقة بزيادة 1 إليها
ثم تظهر رسالة بها قيمة i تساوى 9 لأن أثناء التكرار وضعنا قيمة جديدة للمتغير i وهى قيمتة السابقة بزيادة 1 إليها
إذن يمكن أن نسمى الكلمة until بأنها نهاية التكرار repeat أو شرط نهاية التكرار repeat .


http://i.imgur.com/NfWIHC5.gif


الجزء الثالث : الكلمة المحجوزة while :


هو بينما أو إذا كان الشرط قابل للتحقيق يتم تنفيذ الأكواد حتى يتم التأكد من عدم قابلية الشرط للتحقق أى يكون ناتج الشرط false فعند ذلك الحد يتوقف التكرار .


مثال على ذلك :


يتم الإعلان عن متغير مثلا إسمة i ونعطى لة القيمة مثلا 1
ثم نكتب التكرار الشرطى بواسطة while ونجعل الشرط مثلا بأن يتحقق من كون قيمة المتغير i أقل من 10 على سبيل المثال فيكون الشكل حتى الآن كالتالى :


--
i = 1;
while i<10


ثم نكتب أمر التنفيذ do حتى يتم تنفيذ الأكواد التالية له تنفيذا تكراريا حيث نستخدمة مع التكرار while فيكون شكل الكود كالتالى :

--
i = 1;
while i<10 do

بذلك نكون قد بنينا الهيكل الأساسى للتكرار بواسطة while
إذن ماذا نريدة أن يتكرر ؟ هذا هو المتبقى وهو الغرض الذى من أجلة يبنى دالة التكرار while
فنأخذ على سبيل المثال نريد إظهار رسالة بقيمة المتغير i فى كل مرة تكرارية أو فى كل دورة للتكرار الذى يتم وفيكون شكل الكود كالتالى :


--
i = 1;
while i<10 do
Dialog.Message("Notice", i, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end


بهذا الشكل إذا تم إغلاق الكود بالكلمة المحجوزة الخاصة بالإنهاء وهى end سوف تعمل الحلقة بشكل مستمر بدون نهاية أو بلا نهاية حيث أن فى هذه الحالة لن يتغير قيمة المتغير i وسوف يستمر يساوى 1 وسوف يكون الشرط بالفعل محقق فى كل دورة تكرارية حيث فى كل دورة سوف تعمل الحلقة على التحقق من أن قيمة المتغير i أقل من 10 وبالتالى تستمر بلا نهاية
والسببب أننا لم نضع تغيير أو زيادة دورية لقيمة المتغير فى كل دورة للتكرار
وعلى ذلك إذا وضعنا تغيير بزيادة فى قيمة المتغير i بقيمة زيادة عن قيمتها الأصلية فيكون الشكل النهائى للكود كالتالى :

--
i = 1;
while i<10 do
Dialog.Message("Notice", i, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
i = i+1 ;
end



إذن سوف تكون نتيجة معاينة الكود هو ظهور رسالة بشكل متكرر تعرض قيمة المتغير i ثم يتم زيادة قيمة 1 إلى المتغير i فى كل مرة أو فى كل دورة
وفى كل دورة يعمل على التحقق من كون المتغير i بعد الزيادة أقل من 10 فإذا كان فعلا مازال أقل من 10 يكمل العملية التكرارية حتى يصبح قيمة المتغير i
تساوى 10 عندها يتم التحقق من أن قيمة i ليست أقل من 10 إذن النتيجة الشرطية التى وضعناها " i < 10 " هى false غير محققة .
فنرى أثناء المعاينة رسالة تظهر قيمة i تساوى 1
ثم رسالة بقيمة i تساوى 2
ثم رسالة بقيمة i تساوى 3
ثم رسالة بقيمة i تساوى 4
ثم رسالة بقيمة i تساوى 5
ثم رسالة بقيمة i تساوى 6
ثم رسالة بقيمة i تساوى 7
ثم رسالة بقيمة i تساوى 8
ثم رسالة بقيمة i تساوى 9
وتتوقف الدالة التكرارية بعد ذلك حيث وصلت الحد الأقصى وهو أن يكون الناتج أقل من 10


http://i.imgur.com/NfWIHC5.gif


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


تحياتى عبود


http://i.imgur.com/Nz3B0Vj.gif

ياسرهتهت
18-03-2016, 03:01 AM
بسم الله الرحمن الرحيم
بارك الله فيك استاذ عبود
كالعادة شرح في غاية الروعة والوضوح
موفق بإذن الله ... لك مني أجمل تحية .
:abc_152::abc_152:

أبو يوسف
18-03-2016, 03:55 PM
جزاك الله خيرا اخانا عبود

بالفعل جهد مشكور فبارك الله فيك

فرح صالحي
18-03-2016, 04:22 PM
http://www.karom.net/up/uploads/132550221811.gif

ثامر أبو بلقيس
18-03-2016, 10:49 PM
جزاك الله خيرا بارك الله فيك
:abc_138:شكرا :abc_138:

عبود عبود
19-03-2016, 02:11 PM
بسم الله الرحمن الرحيم
بارك الله فيك استاذ عبود
كالعادة شرح في غاية الروعة والوضوح
موفق بإذن الله ... لك مني أجمل تحية .
:abc_152::abc_152:

جزاك الله خيرا اخانا عبود

بالفعل جهد مشكور فبارك الله فيك

http://www.karom.net/up/uploads/132550221811.gif

جزاك الله خيرا بارك الله فيك
:abc_138:شكرا :abc_138:

شكرا لمروركم جميعا


وتم وضع الجزئية التوضيحية البسيطة لإستكمال شرح أو توضيح التكرار بواسطة for فى أول الموضوع


:abc_138:

عبد الهادي بهاب
19-03-2016, 03:20 PM
السلام عليكم ورحمة الله وبركاته

ربي يحفظكم استاذ عبود .........شرح واف كاف شاف ..........ربي يخليكم للمنتدى و لنا ........

-----------------
سؤال استاذ : ما الفرق بينها و بين الدوال repeat ....while......return

شكرا مجداد

azizsoft
19-03-2016, 04:49 PM
بسم الله الرحمن الرحيم
بارك الله فيك استاذ عبود

كفيت ووفيت شرح ممتاز :abc_022:

عبود عبود
19-03-2016, 06:50 PM
السلام عليكم ورحمة الله وبركاته

سؤال استاذ : ما الفرق بينها و بين الدوال repeat ....while......return



بالنسبة لــــــ return ليست دالة وإنما هى كلمة ريتيرن تستعمل مع الدوال " الوظائف " function " وذلك بغرض إرجاع قيمة أو شيئ للوظيفة بعد تنفيذها أى أننا سوف نبنى مثلا وظيفة معينة تعمل على تحقيق هدف معين نريدة وفى نفس الوقت ترجع بشى آخر مثال على ذلك :

--
function abood(number1,number2)
if number1 > number2 then
count = number1-number2 ;
return "number1 > number2"
else
return "number2 > number1"
end
end

b = abood(2,5)

Dialog.Message("Notice", b, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);

فى المثال السابق بنيت وظيفة وسميتها abood
ووضعت عدد 2 " Parameters " باراميتر للإدخال أو يستعملهما المستخدم للإدخال أو التمرير عبرهما
وكان الباراميتر الأول هو " number1 "
وكان الباراميتر الثانى هو "number2 "
ثم باستعمال الكلمة المحجوزة if وضعت شرطا مفادة أنه إذا كان المدخل الأول أكبر من المدخل الثانى فإن الشرط يكون تحقق إيجابا
ويكون المتغير الذى وضعته count يساوى حاصل طرح المدخل الثانى من المدخل الأول
ومن ثم يكون الريتيرن الذى سوف يحفظ فى الدالة هو النص التالى "number1 > number2" ولماذا قلت أنه نص ؟ لأنى وضعتة بين علامتى تنصيص .
أما إذا لم يتحقق الشرط وكان العكس هو الموجود أو هو المدخل أى أن المدخل الثانى أكبر من أو حتى يساوى المدخل الأول فإنى قد وضعت أن المتغير count يساوى نص فارغ ويكون الريتيرن لهذه الوظيفة هو النص التالى "number2 > number1"

إذن الريتيرن سوف يخزن فى الوظيفة .
إذن كيف نعرف ؟ نعرف عندما نضع متغير يعبر عن الوظيفة ومن ثم نعرض المتغير فى رسالة على سبيل المثال .

لاحظ كيف نستدعى الريتيرن للدالة أو الوظيفة سوف تكتب كالتالى مع أى متغير :

b = abood(2,5)

هنا وضعت متغير b حتى نستطيع معرفة الذى سوف يخزن فية عند تنفيذ الدالة .

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

إذن كان الكود السابق هو مجرد مثال بسيط جدا لبناء وظيفة أو دالة على حسب البرمجة التى نريدها عند كتابتها .
إذن لا تنسى أيضا أن المتغير count سوف يصبح بعد تنفيذ الدالة أو الوظيفة له قيمة يمكن الإستفادة منه وطالما أنى ذكرت كلمة متغير يعنى
أنك تستطيع كتابة أى كلمة أخرى مكانه وليس بنفس التسمية " زى ما أنت عاوز " :abc_086:
طبعا كان بإمكانى إرجاع قيمة count هى الأخرى للوظيفة فقط أردت توضيح الإرجاع أو الريتيرن return كيف يكتب بمثال بسيط .

طيب هل يمكن أن يكون الريتيرن جدول " مصفوفة " أو نص أو حتى وظيفة أخرى أو أى شيئ ؟ نعم

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

:abc_156: أما عن باقى السؤال " repeat ....while " هم أيضا للتكرار مثل for ولسة الدور جاى عليهم فى الشرح ...... إن شاء الله


:abc_138:

عبود عبود
19-03-2016, 06:55 PM
مرحبا بك أخى المحترف اقلي

ومرحبا بك أخى azizsoft


مرور جميل منكم ............ شكرااااااا :abc_152:

عبد الهادي بهاب
19-03-2016, 08:08 PM
بالنسبة لــــــ return ليست دالة وإنما هى كلمة ريتيرن تستعمل مع الدوال " الوظائف " function " وذلك بغرض إرجاع قيمة أو شيئ للوظيفة بعد تنفيذها أى أننا سوف نبنى مثلا وظيفة معينة تعمل على تحقيق هدف معين نريدة وفى نفس الوقت ترجع بشى آخر مثال على ذلك :

--
function abood(number1,number2)
if number1 > number2 then
count = number1-number2 ;
return "number1 > number2"
else
return "number2 > number1"
end
end

b = abood(2,5)

dialog.message("notice", b, mb_ok, mb_iconinformation, mb_defbutton1);

فى المثال السابق بنيت وظيفة وسميتها abood
ووضعت عدد 2 " parameters " باراميتر للإدخال أو يستعملهما المستخدم للإدخال أو التمرير عبرهما
وكان الباراميتر الأول هو " number1 "
وكان الباراميتر الثانى هو "number2 "
ثم باستعمال الكلمة المحجوزة if وضعت شرطا مفادة أنه إذا كان المدخل الأول أكبر من المدخل الثانى فإن الشرط يكون تحقق إيجابا
ويكون المتغير الذى وضعته count يساوى حاصل طرح المدخل الثانى من المدخل الأول
ومن ثم يكون الريتيرن الذى سوف يحفظ فى الدالة هو النص التالى "number1 > number2" ولماذا قلت أنه نص ؟ لأنى وضعتة بين علامتى تنصيص .
أما إذا لم يتحقق الشرط وكان العكس هو الموجود أو هو المدخل أى أن المدخل الثانى أكبر من أو حتى يساوى المدخل الأول فإنى قد وضعت أن المتغير count يساوى نص فارغ ويكون الريتيرن لهذه الوظيفة هو النص التالى "number2 > number1"

إذن الريتيرن سوف يخزن فى الوظيفة .
إذن كيف نعرف ؟ نعرف عندما نضع متغير يعبر عن الوظيفة ومن ثم نعرض المتغير فى رسالة على سبيل المثال .

لاحظ كيف نستدعى الريتيرن للدالة أو الوظيفة سوف تكتب كالتالى مع أى متغير :

b = abood(2,5)

هنا وضعت متغير b حتى نستطيع معرفة الذى سوف يخزن فية عند تنفيذ الدالة .

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

إذن كان الكود السابق هو مجرد مثال بسيط جدا لبناء وظيفة أو دالة على حسب البرمجة التى نريدها عند كتابتها .
إذن لا تنسى أيضا أن المتغير count سوف يصبح بعد تنفيذ الدالة أو الوظيفة له قيمة يمكن الإستفادة منه وطالما أنى ذكرت كلمة متغير يعنى
أنك تستطيع كتابة أى كلمة أخرى مكانه وليس بنفس التسمية " زى ما أنت عاوز " :abc_086:
طبعا كان بإمكانى إرجاع قيمة count هى الأخرى للوظيفة فقط أردت توضيح الإرجاع أو الريتيرن return كيف يكتب بمثال بسيط .

طيب هل يمكن أن يكون الريتيرن جدول " مصفوفة " أو نص أو حتى وظيفة أخرى أو أى شيئ ؟ نعم

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

:abc_156: أما عن باقى السؤال " repeat ....while " هم أيضا للتكرار مثل for ولسة الدور جاى عليهم فى الشرح ...... إن شاء الله


:abc_138:


يا سلام .......... شكرا جد جد جزيل لك استاذ .......... شرح مفصل وواضح جدا .........متابع معك بقية الدروس و ان شاء الله استفيد كثيرا

عبود عبود
19-03-2016, 09:02 PM
إن شاء الله جارى إعداد باقى الشرح وسوف يوضع فى نفس هذا الموضوع حتى يكتمل توصيفا

وسوف أضع ردا بالإضافة لتوضيح وجود تكملة لما بدأناه فى هذا الموضوع

:abc_138:

عبد الهادي بهاب
19-03-2016, 09:41 PM
إن شاء الله جارى إعداد باقى الشرح وسوف يوضع فى نفس هذا الموضوع حتى يكتمل توصيفا

وسوف أضع ردا بالإضافة لتوضيح وجود تكملة لما بدأناه فى هذا الموضوع

:abc_138:

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

السؤال الثاني :
مثال استاذ ..........انا اريد ان اغير لون 12 انبوت .....ساضع حلقة من 1 الى 12 ........بحيث سيتغير لون كل الانبوتات مع بعض تلقائيا او عشوائيا

الكود هذا في التايمر .......


color = {"FFCC00","FFCCCC","3366FF","CC99FF","00FF00","000000","0000FF","000FFF","00FFFF","FFFFFF","FF0000","FFFF00","00FF00","00800","000080" };
for i=1,12 do
Input.SetProperties("Input"..i, {BackgroundColor=Math.HexColorToNumber(color[Math.Random(1, #color)])});
end


كيف اضيف حلقة اخرى بحيث ينغير الانبوت الاول بالاحمر ولما يصبح مثلا لخضر .....فان الانبوت الثاني يكون احمر .....ثم الاول ازرق ليكون الثاني اخضر و الثالث احمر ........وهكذا .........

كيف استغني عن كتابة كود لكل انوبت على حدة .........مدام دالة التكرار for تغنني ؟؟؟؟؟؟؟؟؟؟؟؟؟؟
---------ان اضر تساؤلي بالموضوع ارجو نقله الى قسم الاستفاسارات ------------

عبود عبود
19-03-2016, 10:19 PM
بالنسبة للسؤال الأول من الذى يكتمل أولا ؟

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

وبالنسبة للجزء الخاص بــ :

---------ان اضر تساؤلي بالموضوع ارجو نقله الى قسم الاستفاسارات ------------

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

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

عبد الهادي بهاب
19-03-2016, 10:24 PM
بالنسبة للسؤال الأول من الذى يكتمل أولا ؟

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

وبالنسبة للجزء الخاص بــ :



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

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


بارك الله فيك استاذ .......... في انتظار الكود .......ساحاول ...........شكرا مسبقا

عبود عبود
20-03-2016, 01:06 AM
بارك الله فيك استاذ .......... في انتظار الكود .......ساحاول ...........شكرا مسبقا

بدون إستخدام تايمر حاولت وضع مجموعة من الحلقات لتوضيح قيمة الحلقات التكرارية لمثل هذه الفكرة " حيث نتناقش فى كيفية إستغلال الحلقات التكرارية وليس بناء عمل بعينه فكما ذكرت كل مبرمج يمكن أن يكون له طريقتة وفكره طبقا لتركيزه "
:abc_087: قد يكون هروب من التورط فى الإنشغال أكثر فى فكرة بعينها ولست مهتما بها بما يكفى لتطبيقها هى بالذات :abc_065:


أدرج الكود التالى فى التطبيق وعاين :

--
tInputProperties = {};
tInputProperties.Width = 25;
tInputProperties.Height = 25;
for i=1,6 do
tInputProperties.Y = 50;
tInputProperties.X = 50+(i*30);
Page.CreateObject(OBJECT_INPUT, "Input"..i, tInputProperties);
end

color = {"FFCC00","FFCCCC","3366FF","CC99FF","00FF00","000000"};
x = {};

repeat
for i=1,#color do
Input.SetProperties("Input"..i, {BackgroundColor=Math.HexColorToNumber(color[i])});
Table.Insert(x, (#color+1)-i, color[i]);
Application.Sleep(500);
if i==#color then
for i=1,#color do
Input.SetProperties("Input"..i, {BackgroundColor=16711163});
end
for i=2,#x do
Input.SetProperties("Input"..i-1, {BackgroundColor=Math.HexColorToNumber(tostring(x[i]))});
Application.Sleep(500);
if i==#x then
x = {};
end
end
end
end
until t==5

ملاحظة كود Application.Sleep له عيب قاتل لأنه يوقف إستجابة التطبيق للخروج أو إستخدام أزرار وأشياء أخرى لكن إضطررت لإستخدامة لتوضيح فكرة دمج التكرار لآداء مهمة وهو محور الشرح الحالى .


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

بالنسبة لمصفوفة الألوان التى وضعتها أنت كانت بها ألوان متطابقة لذلك حذفت منها فى هذا الكود لملاحظة التطبيق .

عبد الهادي بهاب
20-03-2016, 02:10 AM
ب

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

بالنسبة لمصفوفة الألوان التى وضعتها أنت كانت بها ألوان متطابقة لذلك حذفت منها فى هذا الكود لملاحظة التطبيق .

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

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

لكن ما دور t=5 ........هل للقيمة دلالة او شرط معين ؟

عبود عبود
20-03-2016, 09:57 AM
لكن ما دور t=5 ........هل للقيمة دلالة او شرط معين ؟

هو شرط لن يتحقق لأنى لا أريدة أن يتحقق لإستمرار دوران الحلقة ريبيت " repeat " دون نهاية أو إلى ما لا نهاية :abc_138:

عبود عبود
20-03-2016, 02:39 PM
تم وضع باقى شرح الموضوع وأصبح شاملا للحلقات التكرارية

تحياتى :abc_138:

عبد الهادي بهاب
20-03-2016, 03:28 PM
تم وضع باقى شرح الموضوع وأصبح شاملا للحلقات التكرارية

تحياتى :abc_138:

متابع معكم استاذ ..........شكرا جزيلا

عبد الهادي بهاب
20-03-2016, 03:49 PM
بعد إذن الاستاذ عبود :

تطبيق سريع بسيط جدا لكل الدوال السابقة الخاصة بالتكرار .

تمرين ( الحل في الدرس ) :نريد خمسة اكواد مختلفة تعرض ديالوج تظهر فيه بالتوالي الارقام من 1 الى 5 بالترتيب ..............أؤكد بخمس طرق ؟؟؟

ملاحظة 1 : لانريد مثالا مفتوحا بل اكواد
ملاحظة 2 : ان كان فيه طرق اكثر اكثر فهذا جد مرحب به

عبد الهادي بهاب
20-03-2016, 04:03 PM
من اجل التحفيز ......وجدت 7 طرق

ياسرهتهت
21-03-2016, 01:19 AM
من اجل التحفيز ......وجدت 7 طرق

---------------------------------

بسم الله الرحمن الرحيم
اخي المحترف اعتقد انني لم افهم السؤال ؟
وما فهمة هو تطبيق
for var=1,5 do
Dialog.Message("Notice", var, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end

هل هذا ما تقصد ؟

ان ايضا اريد ان تظهر بالترتيب في 5 انبت لا في الديلوج كيف؟
موفق بإذن الله ... لك مني أجمل تحية .

عبد الهادي بهاب
21-03-2016, 01:40 AM
---------------------------------

for var=1,5 do
Dialog.Message("Notice", var, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
endهل هذا ما تقصد ؟




ممتاز ......وجدت حل واحد يا استاذ ياسر ....السؤال هو ......... هل فيه طرق اخرى تجد نفس النتيجة و تظهر الارقام بالترتيب من 1 الى 5 في الديالوج ..........و لاداع للاخراج في انبوتات .....فهي مسالة اخراج و نحن هنا نبحث عن كود يؤدي التكرار من 1 الى 5

بالتوفيق :abc_152::abc_152:

عبد الهادي بهاب
21-03-2016, 01:28 PM
بعد انتهاء مهلة التفكير ساجيب على تساؤلي ...... من اجل ان يظهر لنا ديالوج تظهر فيه الارقام من 1 الى 5 بالترتيب

الطريقة الاولى :


i = 1 ;
repeat
Dialog.Message("Aboud1", i);
i = i + 1 ;
until i == 5

الطريقة الثانية :

for i=1,5 do
Dialog.Message("Aboud2",i);
end


الطريقة الثالثة :


i = 1;
while i<6 do
Dialog.Message("Aboud3", i);
i = i+1 ;
end



الطريقة الرابعة :


num = {1,2,3,4,5};
for i,n in pairs(num) do
Dialog.Message("Aboud4", n );
end

الطريقة الخامسة:


num = {1,2,3,4,5};
for i=1,#num do
Dialog.Message("Aboud5", num[i] );
end



الطريقة السادسة:


for i=5,1,-1 do
Dialog.Message("Aboud6", 6-i);
end

الطريقة السابعة:


txt = "12345";
for i=1,5 do
Dialog.Message("Aboud7", String.Mid(txt,i,1));
end


الطريقة الثامنة :

txt = "12345";
for i=1,5 do
Dialog.Message("Aboud8",String.Mid(String.Left(txt, i),i,1));
end



الطريقة التاسعة :

txt = 1;
repeat
Dialog.Message("Aboud9",String.Length(txt));
txt = String.ToNumber(txt)*10
until txt == 100000; بعض الطرق تتشابه و قد تكون نفسها لكن تعمدت وضعها ليفهمها المستخدم للبرنامج و ما تؤدي اليه

حتى نتعرف طريقة اخرى بالتوفيق للجميع :abc_152::abc_152:

Haitham.2012
21-03-2016, 08:28 PM
ماشاء الله عليك اخي عبود .. شرح ممتاز

بالتوفيق دائما

:abc_138:

ثامر أبو بلقيس
22-03-2016, 01:06 AM
بعد انتهاء مهلة التفكير ساجيب على تساؤلي ...... من اجل ان يظهر لنا ديالوج تظهر فيه الارقام من 1 الى 5 بالترتيب

الطريقة الاولى :


i = 1 ;
repeat
Dialog.Message("Aboud1", i);
i = i + 1 ;
until i == 5

الطريقة الثانية :

for i=1,5 do
Dialog.Message("Aboud2",i);
end


الطريقة الثالثة :


i = 1;
while i<6 do
Dialog.Message("Aboud3", i);
i = i+1 ;
end



الطريقة الرابعة :


num = {1,2,3,4,5};
for i,n in pairs(num) do
Dialog.Message("Aboud4", n );
end

الطريقة الخامسة:


num = {1,2,3,4,5};
for i=1,#num do
Dialog.Message("Aboud5", num[i] );
end



الطريقة السادسة:


for i=5,1,-1 do
Dialog.Message("Aboud6", 6-i);
end

الطريقة السابعة:


txt = "12345";
for i=1,5 do
Dialog.Message("Aboud7", String.Mid(txt,i,1));
end


الطريقة الثامنة :

txt = "12345";
for i=1,5 do
Dialog.Message("Aboud8",String.Mid(String.Left(txt, i),i,1));
end



الطريقة التاسعة :

txt = 1;
repeat
Dialog.Message("Aboud9",String.Length(txt));
txt = String.ToNumber(txt)*10
until txt == 100000; بعض الطرق تتشابه و قد تكون نفسها لكن تعمدت وضعها ليفهمها المستخدم للبرنامج و ما تؤدي اليه

حتى نتعرف طريقة اخرى بالتوفيق للجميع :abc_152::abc_152:

شكرا جزيلا التطبيق هو الوسيلة الاسرع للتعلم أو تثيبت المعلومة لكن
الطرح للسؤال قد يكون له عدة أجوبة حتى بدون حلقات تكرارية مثال فقط سريع
لو كتبنا في on show
x=0
وفي عنصر xButton1 الكود:
if x == 5 then
x=0;Application.ExitScript();
end;x=x+1;Dialog.Message("Notice", x);
Page.ClickObject("xButton1")

ترى هل حقق الطلب و مثل هذا الاجراء الكثير و الكثير
فالسؤال الذي يطرح نفسه هو هل يمكن عدم استعمال تعابير الحلقات التكرارية
وتحقيقه دون وسائط أو تخزين أو الاعلان المباشر ؟ لغات برمجية أخرى أي نعم توصلت أما الاوتوبلاي فلم أقرأ ذلك
جيد لو أقرأه يوما
سلامي :abc_138:

عبد الهادي بهاب
22-03-2016, 12:07 PM
شكرا جزيلا التطبيق هو الوسيلة الاسرع للتعلم أو تثيبت المعلومة لكن
الطرح للسؤال قد يكون له عدة أجوبة حتى بدون حلقات تكرارية مثال فقط سريع
لو كتبنا في on show
x=0
وفي عنصر xButton1 الكود:
if x == 5 then
x=0;Application.ExitScript();
end;x=x+1;Dialog.Message("Notice", x);
Page.ClickObject("xButton1")

ترى هل حقق الطلب و مثل هذا الاجراء الكثير و الكثير
فالسؤال الذي يطرح نفسه هو هل يمكن عدم استعمال تعابير الحلقات التكرارية
وتحقيقه دون وسائط أو تخزين أو الاعلان المباشر ؟ لغات برمجية أخرى أي نعم توصلت أما الاوتوبلاي فلم أقرأ ذلك
جيد لو أقرأه يوما
سلامي :abc_138:


تحية طيبة استاذ ثامر ...... لان الموضوع يتعلق بحقات التكرار ......حاولت ان اكون اول المستفيدين بطرحي للتمرين التطبيقي .......و حلك قد يكون تكراريا دون دالة بجعل الزر يفعل بعد ok الديالوج ......اما سؤالك فاسألوا اهل الذكر و لا اظنني منهم .......مع ذلك ساغوغلي من هنا و هناك لعل مستر غوغل يدلني على خيط كما قال كونان ههههههه .....سلام :abc_152:

ثامر أبو بلقيس
22-03-2016, 11:22 PM
أعتذر لم انتبه أن السؤال متعلق بحلقات التكرار:abc_138:

عبود عبود
23-03-2016, 04:53 PM
بارك الله فيك أخى المحترف اقلي جزاك الله خيرا .......... تركيز جميل ينتج عن فهم عميق :abc_138:

بالنسبة للأخ ياسر :

ركز فى على سبيل المثال الحلقة التالية :

--
for i=1,5 do
Dialog.Message("Aboud2",i);
end

ما هو المتغير i ولماذا تم وضعة وهل قابل للتغيير بأى إسم تريد ؟

المتغير i هو عبارة عن وسيط يعمل على تخزين قيمة التكرار فى كل مرة بداخلة
أى أن فى أول دورة للحلقة سوف يكون القيمة المخزنة فية هى 1
فى الدورة الثانية سوف تكون القيمة المخزنة فية هى 2
فى الدورة الثالثة سوف تكون القيمة المخزنة فية هى 3
فى الدورة الرابعة سوف تكون القيمة المخزنة فية هى 4
فى الدورة الخامسة سوف تكون القيمة المخزنة فية هى 5

لاحظ أن القيمة القصوى أو الحد الأقصى كان 5 أى أن جميع الأكواد التى توضع بين الكلمتين do و end سوف يتم تكرارها 5 مرات تنفيذ لها .
كيف نستطيع الإستفادة مما ينتجة التكرار ؟ يمكننا عن طريق ما يتم تخزينة فى المتغير i حيث هو المعبر عن كل حلقة تكرارية أوتوماتيكيا .

هل لديك عدد 5 إينبوتات ؟ إذن لديك أسمائهم ..... إذن إذا كان الإينبوت الأول تحت إسم input1 والثانى تحت إسم input2 والثالث تحت إسم input3 والرابع تحت إسم input4 والخامس تحت إسم input5
هل يمكننا إستخدام الحلقة التكرارية for لتوفر علينا كثرة الأكواد ؟

نعم سوف نستخدم ما يخزن فى المتغير i كى يعبر لنا عن جزء من إسم الإينبوتات حيث يشترك جميع أسماء الإينبوتات فى جزء من الإسم فيكونوا متشابهين فى الجزء التالى input أما وجة الإختلاف بينهم هو فى رقم كل إينبوت .
فعندما نريد كتابة رقم الإينبوت فى كل حلقة أوتوماتيكيا سوف نستخدم الجزء المتشابة من الإسم موصول بـــــ الجزء المختلف والذى سيتم توليدة أوتوماتيكيا فى كل دورة للحلقة التكرارية وتخزينة فى المتغير i فتكون النتيجة المطلوب كتابتها فى الحلقة هى :

input..i لاحظ النقطتين " .. " هى علامة الوصل بين المتغير والجزء المشترك المتشابة من الإسم لكل إينبوت .


فإذا كنا نريد مثالا بسيطا نبدأ به ترجمة ما ذكرتة لك فيكون كالتالى :
ضع 5 إينبوتات input1 و input2 و input3 و input4 و input5


نريد تكوين حلقة تضع فى كل الإينبوتات كلمة مرحبا سوف نستخدم الكود Input.SetText

فتكون شكل الحلقة كالتالى :

--
for i = 1, 5 do
Input.SetText("Input"..i, "مرحبا");
end

إنتهى التوضيح وفى إنتظار أن تكتب لى نفس الكود بأى زيادة تريدها بحيث يظهر فى كل إينبوت كلمة أخرى أو نص مختلف عن جميع الإينبوتات
إستخدم المصفوفة والتكرار معا وضع الكود بحسب ما توصلت إلية . :abc_152:



تحياتى للجميع " أخى هيثم وأخى أبوبلقيس " ترحيب حار وإحترام شديد :abc_138:

ياسرهتهت
24-03-2016, 02:17 AM
بسم الله الرحمن الرحيم
بارك الله فيك استاذ عبود
على هذا الشرح الاكثر من واضح
وجازك الله كل خير
مثال
في هذه الحلقة سيكتب الارقام من 1--5 في الانبتات الخمسة

for i = 1, 5 do
Input.SetText("Input"..i, i);
end

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

day = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"};

for i=1,5 do
Input.SetText("Input"..i,day[i]);
end





شـكــ وبارك الله فيك ـــرا لك
لك مني أجمل تحية .
:abc_138::abc_138:

عبود عبود
24-03-2016, 04:26 PM
أحسنت :abc_138:

عبود عبود
03-02-2018, 10:02 PM
تم التعديل لوضع إضافة بسيطة جدا للفرق بين ()ipairs و ()pairs ولكنها غاية فى الأهمية

:abc_152:

ثامر أبو بلقيس
06-02-2018, 09:37 PM
تم التعديل لوضع إضافة بسيطة جدا للفرق بين ()ipairs و ()pairs ولكنها غاية فى الأهمية

:abc_152:


جزاك الله خيــــرا أستاذي .. :abc_138:

رجب الأنصاري
19-09-2018, 10:48 AM
شرح جميل ولكن لشخص مثلي مبتدئ يلزمه مثال عملي للتطبيق
جزاكم الله خيرا

فهد الشيخ
14-06-2020, 07:19 PM
بارك الله فيك وجعله في ميزان حسناتك..
شرح واضح واسلوب سهل وسلس دون تعقيد.
:abc_052: :abc_052: :abc_052:
:abc_152: :abc_152: :abc_152: