إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

شرح الحلقات التكرارية " for , repeat , while " والإيقاف الإجبارى وكسر حلقة التكرار break

تقليص
هذا الموضوع مغلق.
X
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • شرح الحلقات التكرارية " for , repeat , while " والإيقاف الإجبارى وكسر حلقة التكرار break




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

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

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

    for أو repeat أو while




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

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

    كود:
    --
    for var=exp1,exp2,exp3 do
        something
    end



    فى الكود السابق تم وضع متغير إفتراضى " يمكن تغييره بآخر كما تريد " كان المتغير هو "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 فقط وعلى ذلك لن يتم تنفيذ هذة الخطوة .
    إذن فى المجمل العام هذا التكرار هو تكرار تنازلى . 
    وفى العموم أو الإتجاه العام أنت عزيزى المبرمج تقرر هل تريد إستخدام مقدار خطوة أثناء التكرار أم لا تريد ذلك حسب الإحتياج البرمجى لما تريد تنفيذة ففى بعض الأحيان قد يستخدم المقدار هذا كــــ قفزات تكرارية على حسب ما يحتاجة المشروع أى أنه ليس ضروريا كتابة هذا المقدار الخطوى التكرارى إلا إذا كنت بحاجة لفكرة ما .

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




    أيضا يمكن أن يكون التكرار بهذا الشكل تصاعدى أوتنازلى حسب رغبة المبرمج وإحتياج العملية البرمجية وأيضا رغم أننا لم نكتب خطور مقدارية أو مقدار خطوة لهذا التكرار فإنها تحسب أوتوماتيكيا كـــــ خطوة واحدة 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 خط تحت تصاعدى خطوة موجبة واحدة فقط .

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



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


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

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

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

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

    نقطة فى غاية الأهمية أيضا ولن تجدها فى أى مكان عربى آخر للشرح هى أن كل من ()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


    كما يمكننا عدم كتابة 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

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



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





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


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

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

    كود:
    --
    i = 1 ;
    repeat
      i = i + 1 ;
    until  i ==10

    إذن بتطبق الكود السابق وعرض النتيجة أو نتيجة المتغير 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 .





    الجزء الثالث : الكلمة المحجوزة 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





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


    تحياتى عبود


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

  • #2
    بسم الله الرحمن الرحيم
    بارك الله فيك استاذ عبود
    كالعادة شرح في غاية الروعة والوضوح
    موفق بإذن الله ... لك مني أجمل تحية .

    تعليق


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

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

      تعليق


      • #4

        تعليق


        • #5
          جزاك الله خيرا بارك الله فيك
          شكرا

          تعليق


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

            بالفعل جهد مشكور فبارك الله فيك
            المشاركة الأصلية بواسطة فرح صالحي مشاهدة المشاركة
            المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
            جزاك الله خيرا بارك الله فيك
            شكرا
            شكرا لمروركم جميعا


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


            تعليق


            • #7
              السلام عليكم ورحمة الله وبركاته

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

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

              شكرا مجداد

              تعليق


              • #8
                بسم الله الرحمن الرحيم
                بارك الله فيك استاذ عبود

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

                تعليق


                • #9
                  المشاركة الأصلية بواسطة المحترف اقلي مشاهدة المشاركة
                  السلام عليكم ورحمة الله وبركاته

                  سؤال استاذ : ما الفرق بينها و بين الدوال 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 كيف يكتب بمثال بسيط .

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

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

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


                  تعليق


                  • #10
                    مرحبا بك أخى المحترف اقلي

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


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

                    تعليق


                    • #11
                      المشاركة الأصلية بواسطة عبود عبود مشاهدة المشاركة
                      بالنسبة لــــــ 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 كيف يكتب بمثال بسيط .

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

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

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



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

                      تعليق


                      • #12
                        إن شاء الله جارى إعداد باقى الشرح وسوف يوضع فى نفس هذا الموضوع حتى يكتمل توصيفا

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

                        تعليق


                        • #13
                          المشاركة الأصلية بواسطة عبود عبود مشاهدة المشاركة
                          إن شاء الله جارى إعداد باقى الشرح وسوف يوضع فى نفس هذا الموضوع حتى يكتمل توصيفا

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

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

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

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

                          كود PHP:
                          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 تغنني ؟؟؟؟؟؟؟؟؟؟؟؟؟؟
                          ---------ان اضر تساؤلي بالموضوع ارجو نقله الى قسم الاستفاسارات ------------

                          تعليق


                          • #14
                            بالنسبة للسؤال الأول من الذى يكتمل أولا ؟

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

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

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

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

                            تعليق


                            • #15
                              المشاركة الأصلية بواسطة عبود عبود مشاهدة المشاركة
                              بالنسبة للسؤال الأول من الذى يكتمل أولا ؟

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

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



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

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

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

                              تعليق

                              مواضيع تهمك

                              تقليص

                              المنتدى: القسم العام نشرت بواسطة: Reem2Rabeh الوقت: 04-23-2025 الساعة 04:27 PM
                              المنتدى: ضبط وتوكيد الجودة نشرت بواسطة: HeaD Master الوقت: 04-15-2025 الساعة 09:30 AM
                              المنتدى: التصنيع والانتاج نشرت بواسطة: HeaD Master الوقت: 04-11-2025 الساعة 01:08 PM
                              المنتدى: القسم العام نشرت بواسطة: نوال الخطيب الوقت: 03-19-2025 الساعة 03:07 AM
                              المنتدى: الكمبيوتر والإنترنت نشرت بواسطة: عوض السوداني الوقت: 03-18-2025 الساعة 07:22 AM
                              يعمل...
                              X