مشاهدة النسخة كاملة : الحلقة التكرارية do while


البرنس_زاهر
21 Jul 2002, 05:35 PM
الحلقة التكرارية do while
فائدة الحلقة التكرارية لن تعرفها جيداً إلا إذا طبقت الدرس .
ومن اسمها نعرف انها حلقة تتكرر مع وجود شرط لها إذا اختلف الشرط لن تعمل الحلقة التكرارية .

الـــشـــرح :
1- شغل الفلاش وافتح مشروح جديد .
2- افتح مربع الاكشن واختر من الزائد Actions ومن ثم اختر امر do while .
3- نريد الان وضع الشرط الذي يكون ثابت وإذا اختل لن تتكرر الحلقه ويوضع الشرط في امر while ومن ثم وضع في خانة Condition مثلا الشرط هذا : i<10
الان إذا كانت قيمة I اصغر من 10 سوف تتكرر الحلقه اما إذا كانت اكبر 10 سوف تتوقف الحلقه .
4- الان ضع بعد امر do الامر Set Variable وضع في الخانة الاولى الامر i وفي الخانة الثانية الامر i + 1 لاكن لا تنسى وضع علامة صح اما Expression في الخانة الثانية لكي لا يراها الفلاش نصاً.
5- الان ضع بعد الامر Set Variable الامر trace وضع في الخانة Message القيمة i مع وضع علامة صح على Expression.
وسيكون شكل الاكشن كالتالي :
----------------------------------------
do {
i = i + 1;
trace (i);
} while (i<10);
----------------------------------------
الان شغل العمل ولاحظ ماذا سوف يحدث سترى ظهور رسالة ومكتوب فيها من 1 إلى 10 .
ونفسر ما حدث انه عندما يشتغل الفلاش تشتغل الحلقة التكرارية لاننا وضعناها في اول فريم وتكون قيمة i = 1 فتطلع الرسالة بامر trace ويظهر الرقم 1 ثم يرى الشرط وطبعا ما زال قيمة i اقل من 10 فتتكرر الحلقه وتزيد قيمة i وتصبح 2 ويضع في الرسالة قيمة 2 بعد الواحد إلى ان يصل 10 فيختل الشرط فتتوقف الحلقه التكراريه.

اعتقد ان الصورة قد اتضحت جيداً .

الان تخيل مثلاً إذا اردت للحلقة التوقف إذا كان القيمة I = 5 ماذا سوف تعمل ، الاوامر التي سوف تستخدمها هي
الاوامر السابقة مع امر إذا IF ( راجع درس الدالة الشرطية if ) ومع امر توقف الحلقه التكرارية break.

اتبع الاتي :
دع عملنا السابق فقط اضف له بعد الامر trace الدالة if وفي الخانة Condition اكتب i == 5 ( اي إذا ساوى i الرقم 5 ) حسناً الان إذا ساوى المتغير i الرقم 5 ماذا نريدة ان يفعل ، ان يتوقف بوضع الامر break بعد الامر if من قائمة Actions.
ولاحظ التغير.
وسيكون الشكل الاخير للأكشن :
----------------------------------------
do {
i=i+1;
trace (i);
if (i == 5) {
break;
}
} while (i<10);
----------------------------------------

عازف الحزن2002
21 Jul 2002, 05:46 PM
--

الخالد
21 Jul 2002, 06:07 PM
شكراً أخي زاهر على هذه المواضيع المفيدة ونحن بانتظار موضوعك القادم.
وتذكر يا أمير الفلاش أنه لاترمى إلا الشجرة المثمرة

موفق يا أخي العزيز

كلاشن كوف
22 Jul 2002, 12:41 AM
شكراً لمشرفنا الكريم .

أحب أن أعقب كذلك على الوظيفة break وأوضحها أكثر :

break : تقوم بإخراج المترجم من المحيط التي هي فيه إلى المحيط الخارجي .

شاهد الصورة ولاحظ الفرق :


width = 300 height = 450


يمكننا أن نشبة الحلقة المغلقة بالدارة الكهربائية , والشرط الذي في الأعلى هو مفتاح التشغيل , والمحيط هو ناقل الكهرباء ( الكيبل ) , فإذا انقطع الكيبل , انقطعت الدارة الكهربائية ( لاحظ أن المسبب في انقطاع الكيبل في المثال الثاني هي الوظيفة break ) , وعندما يكون الشرط باطلاً , يعني إذا أصبحت قيمة المتغير أكبر من 9 و فإن مفتاح التشغيل سيكون على OFF .


هناك وظيفة مشابهة للوظيفة break , لكنها لا تقوم بإخراج المترجم من المحيط , وإنما تجبره على أن يتجاوز السطور التي بعدها حتى توصله إلى نهاية المحيط ( قوس الحصر ) فتسير الدارة الكهربائية بشكلٍ عادي .

شاهد الصورة لكي يتضح لك الأمر :

width = 267.2 height = 183

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

أرجو أن أكون قد وفقت في نقل ما أرمي إليه والسلام عليكم

فاشل بالفلاش
22 Jul 2002, 12:11 PM
هلا فيك اخوي البرنس زاهر

الف شكر على درسك

وتسلم يدينك


بس اخوي لو كان فيه مثال

يكون افضل


ومشكور وما تقصر


تحياتي

tamimi
22 Jul 2002, 03:13 PM
السلام عليكم هلا أخوي البرنس زاهر مشكور على هذا الدرس ومشكور أيضا أخوي كلاشن كوف على التوضيح لوظيفة break بس ممكن لو توضح أكثر لأني الصراحة ما فهمت فياليت لو توضح شوي وتعلمنا كيف نستفيد منها :)
وأكون شاكر لك :)

البرنس_زاهر
22 Jul 2002, 05:20 PM
مشكور اخوي كلاشن كوف .

وفعلاً وفيت وظيفة break .
تسلم على شرحك الرائع .
------------------------------------
اما بالنسبة لخوي .
الشرح كان مفهم وواضح .
العملية كلها ان امر break يخرجك من محيط الحلقة وكما موضوح بالصورة ان محيط الحلقة تبدء من { وتنتهي بـ } وما بداخلها هي الذي يتكرر .
ووضيفة break تخرجك عن نطاق المحيط ولا يرجع له ..
:p
:p

كلاشن كوف
22 Jul 2002, 05:51 PM
العفو بارك الله فيك .

تميمي :

أولاً :
تعال نتخيل ماذا سيترجم لنا مترجم الفلاش في الصورة الأولى :


1- سيقرأ السطر الأول , ويدرك أن هناك متغير محلي اسمه x وقيمته هي 1 .

2- الآن سينزل المترجم إلى السطر الذي يليه , ويعثر على الحلقة فيترجمها بكلمة ( بينما ) . بينما ماذا ؟ التكملة داخل القوسين , أي بينما تكون قيمة المتغير x أصغر من 10 , إفعل ما تجده في محيطي .

3- الآن سيقرأ المترجم ما يوجد في محيط الحلقة while .

{

أعرض قيمة x // في الوقت الحالي قيمتها تساوي 1 .
زد على قيمة المتغير x الرقم 1 // واحد + واحد يساوي إثنين .

} الآن سيصعد المترجم من جديد ومعه القيمة 2 ويرى إن كانت
هذه القيمة الجديد ما زالت متفقة مع االشرط في الحلقة
أم لا . هل 2 أصغر من 10 ؟ الجواب "نعم" . إذاً سيستمر
المترجم بنفس العملية في داخل المحيط ولن يخرج منها ما دام
الشرط ما زال قائماً - يعني لو تضع مليون كود خارج هذا المحيط
فإن المترجم لن يقرأه مادام الشرط قائماً - الآن سيقرأ من جديد
أول سطر في داخل المحيط وهو أن يعرض قيمة x , وقيمة x الآن
هي 2 لذا سيعرض 2 , ثم سيقرأ السطر الذي يليه فيزيد 1 على
قيمة x وهي 2 + 1 = 3 , ثم يصعد وهكذا .

طيب الآن المترجم داخل المحيط ومعه القيمة 9 وعرضها ثم زاد عليها
بالرقم 1 بناءً على المعامل ++ وأصبحت x الآن تساوي 10 . ماذا
سيفعل المترجم الآن ؟ سيصعد ويرى إن كانت القيمة تتوافق مع الشرط
أم لا . هل 10 أصغر من 10 ؟ الجواب " لا " إذاً سينسحب المترجم من الحلقة ومعه القيمة 10 ويكمل قراءة الأكواد الموجدة أسفلة .

ثانياً :
تعال معي إلى الحلقة الثانية :

1- سيقوم المترجم بمثل ما قام به في النقطة الأولى من المثال الأول .

2 - كذلك نفس ما سبق .

3- الآن سيقرأ المترجم ما يوجد في محيط الحلقة while .

{

أعرض قيمة x // قيمتها تساوي 1 .
زد على قيمة المتغير x الرقم 1 // واحد + واحد يساوي إثنين .
أخرج من المحيط الذي أنت فيه .

} سيخرج المترجم الآن من الحلقة مكتفياً بالقيمة 2 التي خرج بها
عندما قرأ عامل الزيادة بواحد ++ , وسيقرأ الأكواد التي في
الأسفل إن وُجدَت .

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


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

بالنسبة للوظيفة continue فإنها شبيهة بالوظيفة break , لكنها لا تجبر المترجم بالخروج خارج محيط الحلقة , وإنما تجعله يتجاهل فقط السطور التي بعدها إلى أن يصل إلى قبل نهاية المحيط ( الجدار ) فيصعد من جديد إلى رأس الحلقة ويكمِّل مشواره في هذه الحلقة .

والله أعلم

tamimi
23 Jul 2002, 03:17 AM
هلا أخوي البرنس زاهر معليش اعذرني بس هذي اول لغة برمجة اتعلمها وبالنسبة لي يعني بتكون صعبة مرة لأني ما تعودت على الحفظ مع اني اكره شيء اسمه حفظ :)
---------------
هلا أخوي كلاشن كوف مشكور على توضيحك انا الصراحة فهمت الحين لكن ابغا أطلب منك طلب أخير معليش اعذرني لكن الطلب هو ياليت لو يكون فيه مثال أو بالاصح ملف مفتوح مبسط مرة مرة مرة علشان تثبت المعلومة ( يعني fla ) اما اذا كنت مشغول فما يحتاج أخوي :) واكرر اسف على الازعاج

كلاشن كوف
23 Jul 2002, 02:39 PM
السلام عليكم.


بالنسبة لوظيفة break فهذا هو المثال :


var x = 1;

trace('Start');

for(var i=0; i<10; i++)

{

trace(x) // 1
x++
// now x = 2 ;)

break; // go out environment FOR {...}
}


كان المفروض أن حلقة For تكتمل حتى تصبح قيمة x تساوي 10 ( عند العرض في الـ output , أما بعدها فتصبح القيمة تساوي 11 لأنه المترجم راح يمر على معامل التضعيف ++ ) .

وهذا مثال على الوظيفة continue :


var x = 1;

trace('Start');

for(var i=0; i<10; i++)

{

trace(x) // 1
x++
// now x = 2 ;)

continue; // go to environment FOR {...}
trace('bla bla bla')
}

trace('Finish, and now x = '+x);


الحلقة راح تكتمل لكن ماراح يطبع الرسالة "bla bla bla" .



السلام عليكم