قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 28-05-2017, 11:17 AM المشاركة 1   
افتراضي عبارات التكرار (الحلقات) while , do-while , for Twitter FaceBook Google+



عبارات التكرار Repetition Statements :
هناك لبنة أساسية أخرى فى أى لغة برمجة وهى "التكرار" repetition، أو بناء الحلقة . فيها يتم تنفيذ واحد أو مجموعة من التعليمات مرارا وتكرارا ، حتى يتم استيفاء (تحقيق) بعض الشروط . فى الأساس ، المترجم ميكروسى برو يدعم ثلاثة أنواع من عبارات التكرار وهى حلقة while ، وحلقة do – while ، وحلقة for .

عبارة while :
الشكل العام لعبارة while كما يلى :

كود:
while(expression) statement;
هنا ، يتم تنفيذ العبارة statement طالما أن تعبير الشرط expression صواب (متحقق) true . بشكل عام ، يكون عدد العبارات أكثر من واحدة ، ويتم استخدام زوج من الأقواس {..} لاحتواء العبارات كما يلى :

كود:
while(expression)
{
statements;
}
كيف تعمل حلقة while ؟
عند الوصول إلى حلقة while ، يتم تقييم (اختبار) تعبير الشرط expression .
• إذا كان تقييم تعبير الشرط true (غير صفرى) يتم تنفيذ كود عبارات "جسم الحلقة" statements .
• يتم تقييم تعبير الشرط مرة أخرى ، وتتكرر العملية حتى يكون التقييم false ، عندئذ لا يتم تنفيذ جسم الحلقة ويتم تخطيها إلى العبارة التى تلى قوس الغلق مباشرة .



فى المثال التالى ، يتم تشكيل حلقة ، باستخدام عبارة while ، تتكرر 10 مرات . متغير التحكم فى الحلقة هو “i" ويتم إعداده فى الحالة الابتدائية بالقيمة “0” قبل دخول الحلقة . يتم تنفيذ العبارات statements طالما أن “i" أقل من “10” . لاحظ أنه داخل الحلقة ، عداد الحلقة “i" يتم تزايده بواحد “1” عند كل تكرار .

كود:
i = 0;
while(i < 10)
{
statements;
i++;
}
مثال :
اكتب برنامج يقوم بإعداد مصفوفة أعداد صحيحة integer تسمى MyArray "بأصفار" ، على فرض أن المصفوفة لها 10 عناصر .
الحل :
فيما يلى البرنامج المطلوب :


كود:
void main()
{
unsigned char i;
int MyArray[10];

i = 0;
while(i < 10)
{
MyArray[i] = 0;
i++;
}
}
عندما يتم استخدام عبارة while ، من المهم التأكد من أن الشرط الذى يحافظ على الحلقة "يتغير داخل الحلقة" ، وإلا تم تشكيل حلقة لا نهائية . فيما يلى البرنامج أعلاه مكتوب خطأ والذى لن ينهى الحلقة أبدا . يقوم هذا البرنامج بإعداد الابتدائى لعناصر المصفوفة بأصفار بشكل متكرر .


كود:
void main()
{
unsigned char i;
int MyArray[10];

i = 0;
while(i < 10)
{
MyArray[i] = 0;
}
}

• فى بعض الأحيان قد بكون من الضرورى إنشاء حلقات لانهائية فى البرنامج . يمكن تحقيق ذلك بسهولة باستخدام عبارة while ، كما هو موضح أدناه :


كود:
while(1)
{
statements;
}
هنا ، شرط تكرار الحلقة متحقق بصفة دائمة لأن تقييم “1” تكون true (غير صفرية) .

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 28-05-2017, 11:26 AM المشاركة 2   
افتراضي


عبارة do – while :
هذه العبارات هى اختلاف مفيد لعبارة while . الشكل العام لعبارة do – while يكون كما يلى

كود:
do
{
statements;
} while(expression);
هنا ، يتم تنفيذ العبارات statements طالما أن التعبير expression يكون true . التعبير expression عادة يحتوى على عبارات منطقية وعبارات علاقات .



فى المثال التالى ، يتم إنهاء الحلقة بعد التكرار 10 مرات

كود:
i = 0;
do
{
statement;
i++;
} while(I < 10);
لاحظ ، مرة أخرى ، أن الشرط الذى يحافظ على الحلقة يتم تغيره داخل الحلقة ، بحيث يتم إنهاء الحلقة بعد العدد المطلوب من التكرارات .
هناك اختلاف بين عبارة while وعبارة do – while . العبارات statements داخل حلقة while قد لا يتم تنفيذها أبدا إذا كان الشرط false . على الجانب الآخر ، العبارات statements داخل حلقة do – while يتم تنفيذها "مرة واحدة" على على الأقل ، وذلك لأنه يتم اختبار الشرط عند نهاية الحلقة .
الأمثلة التالية توضح كيفية بناء حلقة do – while واستخدامها فى البرامج :
مثال 1 :
اكتب برنامج للإعداد الابتدائى لمصفوفة أعداد صحيحة integer تسمى MyArray ، بأحاد “1s” . افترض أن المصفوفة بها 100 عنصر .
الحل : البرنامج المطلوب يكون كما يلى :


كود:
void main()
{
unsigned char i;
int MyArray[100];

i = 0;
do
{
MyArray[i] = 1;
i++;
} while(i < 100);
}
مثال 2 :
اكتب كود حلقة باستخدام عبارة do – while لنسخ سلسلة string تسمى “B” إلى سلسلة أخرى تسمى “A” .
الحل :
تذكر أن السلسلة هى مصفوفة أحرف تنتهى بحرف NULL(\0) . حلقة do – while أدناه سوف تنسخ محتويات السلسلة B إلى السلسلة A ، بما فى ذلك حرف الانتهاء NULL .
لاحظ أنه يتم تزايد “i” بعد أن يتم استخدام قيمتها كمرجع للسلسلة B .
كود:
i = 0;
do
{
A[i] = B[i];
} while(B[i++] != ‘\0’);

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

كود:
void main()
{
unsigned char i;
int MyArray[100];

i = 0;
do
{
MyArray[i] = 1;
} while(I < 100);
}
• احيانا يكون من الضرورى إنشاء حلقات لانهائية . يمكن تحقيق ذلك بسهولة باستخدام عبارة do – while كما يلى :

كود:
 do
{
statements;
} while(1);
مثال :
اكتب برنامج لضرب مصفوفتان أعداد صحيحة اسمهما X و Y كل منهما له 10 عناصر ، وخزن المجموع فى متغير نوع العدد الصحيح والمسمى Sum .
الحل :
البرنامج المطلوب يكون بالشكل التالى :

كود:
 void main()
{
int X[10], Y[10], Sum;
unsigned char I = 0;
Sum = 0;
do
{
Sum = Sum + X[i]*Y[i];
i++;
} while(I < 10);
}

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 28-05-2017, 11:35 AM المشاركة 3   
افتراضي


عبارة for :
عبارة for هى أكثر العبارات شيوعا لإنشاء الحلقات فى البرامج .
الشكل العام لهذه العبارة كما يلى :

كود:
for(expression1; expression2; expression3) statements;
• حيث التعبير الأول expression1 يحدد "القيمة الابتدائية" لعداد الحلقة ويتم تقييم هذا المتغير مرة واحدة فقط بمجرد إلى الحلقة .
• والتعبير الثانى Expression 2 هو "الشرط" الذى يحافظ على استمرار الحلقة . عذا التعبير يتم تقيمه (اخباره) كل تكرار ، للتحقق مما إذا كان ينبغى استمرار الحلقة من عدمه . التعبير الثانى Expression 2 عادة يكون علمل منطقى أو عامل علاقة .
• التعبير الثالث Expression 3 هو أيضا يتم تقييمه عند نهاية كل تكرار ، وهذا التعبير يغير القيمة التى يتم اختبارها من أجل إنهاء الحلقة . هذا التعبير عادة يكون تزايد قيمة عداد الحلقة .



فى حلقة for يشيع استخدام أكثر من عبارة . فى المثال التالى يتم تكرار الحلقة 10 مرات . القيمة الابتدائية لعداد الحلقة “i" هى “0” ، ويتم تزايده بواحد “1” عند كل تكرار ، وتستمر الحلقة طالما أن “i" يكون أصغر من “10” :

كود:
for(i = 0; i < 10; i++)
{
statements;
}
فيما يلى بعض الأمثلة على استخدام عبارة for :
مثال :
اكتب برنامج لحساب مربعات الأعداد من “1” إلى “49” وخزن النتيجة فى مصفوفة أعداد صحيحة باسم Mult .
الحل :
البرنامج المطلوب يكون كما يلى :

كود:
void main()
{
int Mult[50];
unsigned char i;
for(i = 1; i <= 49; i++)
{
Mult[i] = i*i;
}
}
• يمكن بسهولة "تداخل" حلقات for كما هو موضح بالمثال القادم . فى هذا المثال جميع عناصر المصفوفة ثنائية الأبعاد MyArray يتم إعدادها بأصفار (على فرض أن عناصر المصفوفة 10 ) . فى هذا المثال ، يتم تكرار الحلقة "الداخلية" 10 مرات لكل قيمة من قيم “i" للحلقة الخارجية ، وهذا يعنى أن العدد الكلى للتكرارات يكون “100” .

كود:
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
MyArray[i][j] = 0;
}
}
يمكن حذف البارامترات (التعبيرات) فى حلقة for . هناك العديد من التغييرات لحلقة for استنادا على أى بارامتر يتم حذفه . إليك بعض الأمثلة :
• إنشاء حلقة لا نهائية :
كود:
for(;;)
{
statements;
}

• تحديد القيمة الابتدائية خارج الحلقة :

كود:
i = 0;
for(; i < 10;)
{
statements;
i++;
}
• لإنهاء الحلقة من داخلها :

كود:
i = 0;
for(;; i++)
{
statements;
if(i >= 10) break;
}


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 28-05-2017, 11:46 AM المشاركة 4   
افتراضي


الإنهاء المبكر للحلقة :
هناك حالات حيث قد نرغب فى إنهاء الحلقة مبكرا . يتم عمل ذلك باستخدام عبرة break . عندما يقابل البرنامج هذه العبارة ، فإنه "يجبر" على القفز الغير مشروظ إلى خارج الحلقة . يمكن استخدام عبارة break مع جميع عبارات التكرار .
فى المثال التالى ، يتم إنهاء الحلقة عندما يصبح المتغير p بالقيمة 10 كما يلى :

كود:
 p = 0;
while(p < 100)
{
statements;
p++;
if(p == 10) break;
}


كيف تعمل عبارة break :



عبارة continue :
عبارة continue تتخطى بعض العبارات داخل الحلقة . تستخدم عبارة continue مع عبارة اتخاذ قرار مثل if…else .
الشكل العام لعبارة continue :

كود:
Continue;


كيف تعمل عبارة continue :



عبارة goto :
يمكن استخدام عبارة goto لتغيير سير التحكم فى البرنامج . يمكن استخدام هذه العبارة إما فى حد ذاتها أو مع شرط .
الشكل العام لاستخدام هذه العبارة يكون كما يلى :

كود:
statements;
Loop:
statements;
goto Label;

or

statements;
Loop:
statements;
if(condition) goto Label;
فى الشكل الأول ، يقفز البرنامج إلى العبارة التى تأتى بعد اسم العنوان المسمى Loop . "العنوان" label يمكن أن يكون أى اسم صالح لمتغير ويجب أن ينتعى بالنقطتين ( : ) .
فى الشكل الثانى ، يقفز البرنامج إلى "عنوان" محدد إذا كان الشرط true .
لا ينصح بالاستخدام المفرط لعبارة goto فى البرامج ، لأنها تتسبب فى برنامج غير منظم وصعب صيانته . يمكن كتابة برامج كبيرة ومعقدة دون استخدام عبارة goto . لعل التطبيق الأكثر فائدة لعبارة goto هو إنهاء البرنامج قبل الأوان .


احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً سعيد قادر ( شكر العضو على هذه المشاركة )
اعجاب سعيد قادر ( أعجبته المشاركة )

الصورة الرمزية مسلم11
مسلم11
:: عضو ذهبي ::
تاريخ التسجيل: Jun 2009
الدولة: بلاد الشام
المشاركات: 3,803
نشاط [ مسلم11 ]
قوة السمعة:184
قديم 22-06-2017, 08:29 PM المشاركة 5   
افتراضي


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

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 02:53 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025