 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:333
|
|
28-03-2020, 11:32 AM
المشاركة 1
|
|
دورة برمجة الاردوينو : الدرس الثامن
حلقات while وdo while والاردوينو
تتشابه حلقة while مع حلقة for التي تم شرحها في الدرس السابق. والفرق الرئيسي هو أن حلقة while تفصل separates عناصر حلقة for كما هو موضح لاحقا .
حلقة أخرى تسمى حلقة do while يتم تغطيتها أيضًا. يتم تشغيل حلقة do while دائمًا مرة واحدة على الأقل قبل إجراء أي اختبارات قد تؤدي إلى قطع تنفيذ البرنامج والخروج من الحلقة.
1- حلقة while
البرنامج التالي يفعل بالضبط نفس عمل برنامج حلقة for فى الدرس السابق ، باستثناء أنه يستخدم حلقة while حتى نتمكن من رؤية أوجه التشابه بين الحلقتين.
كود:
void setup() {
int i = 0;
Serial.begin(9600);
while (i < 10) {
Serial.print("i = ");
Serial.println(i);
i++;
}
}
void loop() {
}
بناء حلقة while
تمتلك حلقة while بناء structure على النحو التالي:
كود:
while (loop test expression goes here) {
Statements that run in the loop go here
Statement 1
Statement 2
...
}
تبدأ حلقة while بالكلمة المفتاحية while متبوعة بتعبير اختبار بين قوسي الفتح والإغلاق ( ) . تدل أقواس الفتح والإغلاق { } على جسم الحلقة.
• تعبير الاختبار Test Expression
كما هو الحال مع الحلقة for ، فإن حلقة while لها تعبير اختبار سيحدد ما إذا كانت العبارات في الحلقة ستعمل أم لا. إذا تم تقييم تعبير الاختبار إلى true ، يتم تشغيل عبارات الحلقة. إذا تم تقييم تعبير الاختبار على أنه false ، فلن يتم تشغيل عبارات الحلقة ، ولكن العبارات التي تتبع قوس إغلاق الحلقة سيتم تشغيلها - أي يستمر التنفيذ خارج الحلقة وأسفلها.
• تعبير التهيئة Initialize Expression
تحتوي حلقة for على تعبير تهيئة كجزء من الحلقة. يمكن للحلقة while استخدام أي متغير من البرنامج الذي يحتوي على قيمة صالحة. في مثال البرنامج ، يجب تهيئة المتغير المستخدم في الحلقة (i) عند تعريفه ، وإلا فسيحتوي على أي قيمة عشوائية.
• تعبير الزيادة Increment Expression
تم استخدام تعبير الزيادة في أمثلة حلقة for في الدرس السابق . في مثال حلقة while ، يتم وضع تعبير الزيادة داخل جسم الحلقة.
كيف يعمل مثال حلقة while :
في مثال البرنامج ، يحدث ما يلي:
1. تتم تهيئة المتغير i إلى 0 عند بدء تشغيل البرنامج .
2. تقوم حلقة while بتقييم تعبير الاختبار (i <10).
3. يتم تقييم تعبير الاختبار إلى "صواب" true لأن i أقل من 10.
4. نظرًا لأن تعبير الاختبار صحيح true ، يتم تشغيل العبارات في الحلقة.
5. تتم طباعة القيمة الحالية للمتغير i ثم تتم زيادته.
6. عند الوصول إلى الجزء السفلي من الحلقة ، يبدأ التنفيذ من عند الجزء العلوي من الحلقة مرة أخرى.
7. يتم تقييم تعبير الاختبار مرة أخرى ، يكون صحيحًا true مرة أخرى ، لذلك يتم تشغيل الحلقة مرة أخرى.
فقط عندما يتم زيادة المتغير i إلى 10 ، سيتم تقييم تعبير الحلقة إلى false وسيتم إنهاء (الخروج من) الحلقة.
مثال آخر :
في المثال أدناه ، يتم استخدام حلقة while لحساب count up ما يصل إلى خمسة وعشرين بالخمسات fives عن طريق إضافة خمسة إلى متغير في كل مرة من خلال الحلقة.
كود:
void setup() {
int sum = 0;
Serial.begin(9600);
// count up to 25 in 5s
while (sum < 25) {
sum = sum + 5;
Serial.print("sum = ");
Serial.println(sum);
delay(500); // 500ms delay
}
}
void loop() {
}
في هذا البرنامج ، يتم تعريف متغير يسمى المجموع sum وتهيئته إلى 0. يختبر تعبير الاختبار في حلقة while إذا كان المجموع sum يحتوي على قيمة أقل من 25.
داخل الحلقة ، يتم زيادة متغير المجموع sum بمقدار 5 في كل مرة من خلال الحلقة بواسطة التعبير الحسابي:
يعني هذا التعبير "إضافة 5 إلى متغير المجموع sum ".
ثم تُطبع القيمة التي يحتفظ بها المتغير sum ، ويتبعها تأخير لمدة نصف ثانية.
نظرًا لأن قيمة المتغير يتم زيادتها أولاً ثم تتم طباعتها ، فإننا نرى القيمة 5 مطبوعة أولاً وليس القيمة 0 التي تمت تهيئتها لها.
على الرغم من أن تعبير الاختبار سيتم تقييمه على أنه خطأ false عند sum == 25 ، إلا أن 25 لا يزال الرقم الأخير الذي يتم طباعته. وذلك لأن آخر مرة يتم فيها تقييم تعبير الاختبار إلى true هي عندما يكون sum == 20 ، ولكن بعد ذلك تتم زيادة المجموع إلى 25 ويتم طباعته قبل تقييم تعبير الاختبار مرة أخرى.
2- حلقة do while :
تعمل حلقة do while بنفس طريقة حلقة while ، إلا أنها تعمل دائمًا مرة واحدة حتى إذا تم تقييم تعبير الاختبار إلى false.
بناء حلقة do while :
تتكون حلقة do whileمن كلمتين رئيسيتين do و while ، كما هو موضح أدناه.
كود:
do {
Statements that run in the loop go here
Statement 1
Statement 2
...
} while (test expression goes here);
يقع جسم حلقة do while بين أقواس الفتح والغلق { } ويحتوي على العبارات التي سيتم تشغيلها في الحلقة.
بينما تأتي الكلمة الأساسية while وتعبير الاختبار بعد جسم الحلقة ويتم إنهاؤها بفاصلة منقوطة ( .
مثال :
هذا المثال يوضح حلقة do while .
كود:
void setup() {
int sum = 0;
Serial.begin(9600);
// count up to 25 in 5s
do {
sum = sum + 5;
Serial.print("sum = ");
Serial.println(sum);
delay(500); // 500ms delay
} while (sum < 25);
}
void loop() {
}
يتم تشغيل جميع العبارات في جسم الحلقة قبل تقييم تعبير الاختبار.
إذا تمت تهيئة المجموع sum بقيمة 25 عند تعريفه ، كما هو موضح في البرنامج أدناه ، سيتم تشغيل الحلقة مرة واحدة وسيتم طباعة 30. لن يتم تشغيل الحلقة بعد ذلك لأن تقييم الاختبار يتم تقييمه false .
كود:
void setup() {
int sum = 25;
Serial.begin(9600);
// count up to 25 in 5s
do {
sum = sum + 5;
Serial.print("sum = ");
Serial.println(sum);
delay(500); // 500ms delay
} while (sum < 25);
}
void loop() {
}
باستخدام نفس البرنامج ، ولكن مع تغيير حلقة do while إلى حلقة while ، كما هو موضح أدناه ، لن يتم تشغيل العبارات في جسم . هذا لأنه يتم تقييم تعبير الاختبار قبل تنفيذ العبارات في جسم الحلقة. يتم تقييم تعبير الاختبار على الفور إلى false ، لذلك لن يتم تشغيل عبارات الحلقة مطلقًا.
كود:
void setup() {
int sum = 25;
Serial.begin(9600);
// count up to 25 in 5s
while (sum < 25) {
sum = sum + 5;
Serial.print("sum = ");
Serial.println(sum);
delay(500); // 500ms delay
}
}
void loop() {
}
في المثال أعلاه ، لن يظهر أي إخراج في نافذة الشاشة التسلسلية عند تشغيل البرنامج . يتم تقييم حلقة while إلى false ثم ينخفض التنفيذ مباشرة في الحلقة الرئيسية الفارغة.
|