عبود عبود
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
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