0% found this document useful (0 votes)
16 views

Looping Structures

ملخص

Uploaded by

Taherdz Rimou
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views

Looping Structures

ملخص

Uploaded by

Taherdz Rimou
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 23

‫‪Looping (Repetition) structure‬‬

‫لماذا نحتاج التكرار؟؟‬


‫لو طلبت منك كود يعمل على إضاءة لد ‪ 13‬لمدة ثانية ثم ينطفئ لمدة ثانية اخرا وتتكرر هذه العملية ‪ 3‬مرات ثم ينتقل‬
‫األردوينو إلى دالة ال )( ‪ ,void loop‬بالطبع ستقول أن هذا األمر سهل‪ ,‬ولكن ماذا لو طلبت منك تكرار العملية ‪ 10‬مرات‬
‫بدل ‪ ,3‬أيضا األمر مقدور عليه‪ ,‬ولكن ماذا لو طلب منك أن تكرر العملية ‪ 100‬مرة‪ ,‬أو ‪ 1000‬مرة ؟؟؟!‪ ,‬بالتأكيد األمر ليس‬
‫منطقيا تكرار الكود ألف مرة !!!‬

‫لذلك ال بد من استخدام شيء يمكننا من تكرار تنفيذ العملية‪ ,‬أال وهو ال ‪ looping(Repetition) structures‬وتشمل لغة ال‬
‫‪ C++‬ثالث تراكيب (‪ )for, while, do…while‬وسوف نتعرف على كل منهما في هذا القسم‪.‬‬

‫‪while loop‬‬
‫تعد حلقة التكرار ‪ while‬أحد التراكيب التي تغير تسلسل تنفيذ الكود‪ ,‬حيث تعمل على تكرار تنفيذ جملة معينة إذا تحقق شرط‬
‫معين‪ ,‬وفيما يلي التركيب البناء ل ‪.while loop‬‬

‫تعد كلمة ‪ while‬كلمة محفوظة‪.‬‬

‫يعتبر ال ‪ expression‬أي جملة برمجية قيمتها ‪true or false‬‬


‫أي أنها (‪.)Logical expression‬‬

‫تعتبر ‪ statement‬جملة التكرار أي أنها جملة ‪.while‬‬

‫كيف تعمل ال ‪while structure‬؟‬


‫عندما يصل األردوينو إلى ال ‪ while‬فإنه يفحص ال ‪ expression‬فإذا كانت قيمته ‪ true‬فإنه ينفذ ال ‪ statement‬ثم يعود‬
‫األردوينو إلى ال ‪ expression‬فإذا كانت قيمته ‪ true‬فإنه ينفذ ال ‪ statement‬ويستمر تنفيذ ال ‪ statement‬طالما كانت‬
‫قيمة ال ‪ expression‬هي ‪ true‬فإذا اصبحت ‪ false‬فإن األردوينو يخرج من ال ‪ ,while‬والشكل التالي يوضح طريقة تنفيذ‬
‫ال ‪.while loop‬‬
‫مالحظة‪:‬‬

‫إذا أردنا أن ننفذ أكثر من جملة عند تحقق شرط ال ‪ while loop‬فإننا نستخدم ال (‪Compound )Block of statement‬‬
‫‪.statement‬‬

‫المثال التالي يوضح طريقة عمل ال )(‪:while loop‬‬

‫مثال ‪:1‬‬
‫;‪int i = 0‬‬
‫{ )(‪void setup‬‬
‫;)‪Serial.begin(9600‬‬
‫{)‪while(i <= 20‬‬
‫;)‪Serial.print(i‬‬
‫;)" ‪Serial.print(",‬‬
‫;‪i = i + 5‬‬
‫;)‪delay(500‬‬
‫}‬
‫;)"‪Serial.println("\nwhile loop finished‬‬
‫}‬

‫{ )(‪void loop‬‬

‫}‬

‫نالحظ أن األردوينو وصل ال ‪ while loop‬ثم فحص شرط التكرار‪ ,‬فكانت نتيجته ‪ true‬وذلك ألن قيمة ال ‪ i‬هي ‪ 0‬وهي أقل‬
‫أو تساوي ‪ ,20‬فبالتالي بدا األردوينو بتنفيذ جملة ال ‪ loop‬حيث طبع قيمة ال ‪ i‬على شاشة المراقب التسلسلي يليه " ‪ ",‬ثم‬
‫أضاف ‪ 5‬على ال ‪ i‬ثم توقف األردوينو لمدة نصف ثانية‪ ,‬وبعد االنتهاء من تنفيذ جملة التكرار رجع األردوينو ليفحص الشرط‬
‫وهو (‪ )i <= 20‬فكانت قيمته ‪ true‬ألن قيمة ال ‪ i‬أقل هي ‪ ,1‬فينفذ األردوينو جملة التكرار مرة أخرة‪ ,‬ويبقى يكرر بالعملية‬
‫حتى يصل فحص الشرط الذي يكون فيه قيمة ال ‪ i‬هي ‪ 25‬فتكون قيمة الشرط (‪ )i <= 20‬هي ‪ false‬فبالتالي ال ينفذ‬
‫األردوينو جملة التكرار وينفذ الجملة التي تلي جملة التكرار حيث يطبع على شاشة المراقب التسلسلي الجملة التالية ( ‪while‬‬
‫‪ )loop finished‬بعد ان ينتقل إلى السطر الجديد‪ ,‬الجدول التالي يوضح ألية تنفيذ ال ‪ while loop‬في جميع الدورات‬
‫(‪ )iteration‬التي تمر بها‪.‬‬

‫‪Iteration‬‬ ‫‪Value of i‬‬ ‫‪Expression in Line 2‬‬ ‫‪Statements in Lines 4 and 5‬‬
‫‪1‬‬ ‫‪i=0‬‬ ‫‪i <= 20 is true‬‬ ‫‪Output: 0‬‬
‫‪i=i+5=0+5=5‬‬
‫‪2‬‬ ‫‪i=5‬‬ ‫‪i <= 20 is true‬‬ ‫‪Output: 5‬‬
‫‪i = i + 5 = 5 + 5 = 10‬‬
‫‪3‬‬ ‫‪i = 10‬‬ ‫‪i <= 20 is true‬‬ ‫‪Output: 10‬‬
‫‪i = i + 5 = 10 + 5 = 15‬‬
‫‪4‬‬ ‫‪i = 15‬‬ ‫‪i <= 20 is true‬‬ ‫‪Output: 15‬‬
‫‪i = i + 5 = 15 + 5 = 20‬‬
‫‪5‬‬ ‫‪i = 20‬‬ ‫‪i <= 20 is true‬‬ ‫‪Output: 20‬‬
‫‪i = i + 5 = 20 + 5 = 25‬‬
‫‪6‬‬ ‫‪i = 25‬‬ ‫‪i <= 20 is false‬‬ ‫‪The loop terminates‬‬
‫وفيما يلي الناتج النهائي الذي يظهر على شاشة المراقب التسلسلي‪:‬‬
‫‪0, 5, 10, 15, 20,‬‬
‫‪while loop finished‬‬

‫يسمى المتغير ‪ i‬ب (‪)loop control variable‬‬

‫‪Designing while Loops‬‬


‫كما الحظنا في المثال السابق‪ ،‬أن الجسم جملة التكرار ( ‪ )while statement‬يتم تنفيذه فقط إذا كان شرط التكرار قيمته‬
‫‪ ,true‬وعادة ما يتحقق الشرط إذا كان المتغير‪ ،‬ويسمى ب )‪ loop control variable (LCV‬يحقق شرط مؤكد‪ ،‬كم‬
‫نالحظ في المثال السابق‪ ،‬أن شرط حلقة التكرار هو ما إذا كان ‪ I <= 20‬لذلك البد من التأكد ما إذا كان ‪ LCV‬مهيئ بشكل‬
‫صحيح قبل مواجهة حلقة التكرار أم ال‪ ،‬كما البد من التأكد داخل جسم حلقة التكرار أن تحديث قد يطرأ على ‪ LCV‬يحول‬
‫الشرط إلى ‪ ,false‬وتكتب حلقة التكرار بشكل عام بالنمط التالي‪:‬‬

‫)‪//initialize the loop control variable(s‬‬


‫‪while (expression) //expression tests the LCV‬‬
‫{‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪//update the LCV‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫}‬

‫‪Case 1: Counter-Controlled while Loops‬‬


‫نفترض أننك تريد تعرف عدد المرات المطلوب فيها تنفذ الكود‪ ،‬مثال تطلب من المستخدم ادخال عدد مرات الوميض التي‬
‫ينبغي على اللد القيام بها‪ ،‬وفي هذه الحالة تسمى ‪ ,counter-controlled while loop‬ويعمل ال ‪ LCV‬كعداد‬
‫"‪ "counter‬ولتصميم هذا النوع من الحلقات بدايتا نعرف متغير (‪ )LCV‬ونخصص قيمته ب صفر‪ ،‬يكون شرط ال ‪while‬‬
‫هو (‪ )LCV < N‬حيث أن ‪ N‬هو عدد المرات المراد تكرار تنفيذ جملة التكرار‪ ،‬داخل جملة التكرار نعمل على زيادة مقدار ال‬
‫‪ ,LCV‬فيما يلي شكل الكود الذي ينفذ التصميم المطلوب‪:‬‬
:2 ‫مثال‬
‫ وكذلك اسم ودرجة كل‬،‫اكتب كود أردوينو يطلب من المستخدم ادخال عدد الطالب داخل الفصل‬
:‫طالب لحساب معدل الطالب في الفصل‬

// Program: Counter-Controlled Loop


// This program calculates the average
// grades of students in the class
// enter the number of students and
// Each student's name and grade

String name;
int numOfStudents, grade, totalGrade = 0, avarge;
int count;

void setup() {
Serial.begin(9600);
Serial.print("Enter the number of Students ==> ");
while(!Serial.available());
numOfStudents = Serial.parseInt();
Serial.println(numOfStudents);
count = 0;
while (count < numOfStudents){
Serial.print("Enter the student's name == >> ");
while(!Serial.available());
name = Serial.readString();
Serial.print(name);
Serial.print(" ,and his grade == >> ");
while(!Serial.available());
grade = Serial.parseInt();
Serial.println(grade);
totalGrade += grade;
count++;
}
Serial.print("\nThe total grade is :: ");
Serial.println(totalGrade);
Serial.print("Student average is = ");
//Serial.println(totalGrade/numOfStudents); note that the output is int
Serial.println(static_cast<float>(totalGrade)/numOfStudents);
}

void loop() {}

:‫وفيما يلي الناتج الذي تظهر على شاشة المراقب التسلسلي‬


Enter the number of Students ==> 5
Enter the student's name == >> Ali ,and his grade == >> 85
Enter the student's name == >> Mohammed ,and his grade == >> 72
Enter the student's name == >> Sara ,and his grade == >> 80
Enter the student's name == >> Ahmad ,and his grade == >> 90
Enter the student's name == >> Mona ,and his grade == >> 94

The total grade is :: 421


Student average is = 84.20

Case 2: Sentinel-Controlled while Loops


sentinel ‫ يسمى‬,‫ وهو عنصر خاص‬,‫ لكن نعلم أخر عنصر من هذه البيانات‬,‫أحيانا ال نعلم عدد البيانات المطلوب قراءته‬
‫ اذا هذه‬,while ‫ وفي هذه الحلقة ال بد من قراءة أول عنصر يتم ادخاله قبل حلقة ال‬,‫حيث يخبر الحلقة بالتوقف عند وصوله‬
‫ ثم‬,‫ واذا كان يطابقه فإن جسم حلقة التكرار ال يتم تطبيقه‬,‫ ف إن جسم حلقة التكرار يتم تنفيذه‬sentinel ‫القيمة ال تطابق قيمة ال‬
sentinel-controlled while ‫ مثل هذه الحلقة تعرف باسم‬,sentinel ‫يستمر تنفيذ جسم حلقة التكرار طالما لم يتم قراءة‬
:‫ يكون شكل حلقة التكرار كالتالي‬,‫ في هذه الحالة‬,loop

while(!Serial.available());
variable = Serial.read(); // or any read variable function.

while (variable != sentinel) //test the loop control variable


{
.
.
.
while(!Serial.available());
variable = Serial.read(); // or any read variable function.
.
.
.
}
:3 ‫مثال‬
‫ بحيث يتم ادخال اسم الطالب‬،‫اكتب كود أردوينو ي تيح للمستخدم ادخال اسم الطالب وعالمتهم‬
‫ بحيث ينتهي عملية االدخال إذا قام‬،‫ وعالمته وهكذا‬،‫ ثم اسم الطالب الثاني‬،‫األول وعالمته‬
.‫ ثم يقوم البرنامج بحساب متوسط عالمات الطالب‬،)Stop( ‫المستخدم بإدخال كلمة‬

int numOfStudents = 0, stud_grade;


int totalMarks = 0,avarge;
String stud_name;
const String SENTINEL = "Stop";

void setup() {
Serial.begin(9600);

Serial.println("This program calculates the average of the student\n");


Serial.print("Enter the student ");
Serial.print(" name ==> ");

while(!Serial.available());
stud_name = Serial.readString();
Serial.print(stud_name);
Serial.print(" ,and the grade ==> ");
while(!Serial.available());
stud_grade = Serial.parseInt();
Serial.println(stud_grade );
totalMarks += stud_grade;
numOfStudents++;

while(!SENTINEL.equals(stud_name)){
Serial.print("enter the student ");
Serial.print(" name ==> ");
while(!Serial.available());
stud_name = Serial.readString();
Serial.print(stud_name);
Serial.print(" ,and the grade ==> ");
while(!Serial.available());
stud_grade = Serial.parseInt();
Serial.println(stud_grade );
totalMarks += stud_grade;
numOfStudents++;
}
Serial.print("\nThe number of students == ");
Serial.println(numOfStudents - 1);
Serial.print("Student average == ");
Serial.println(static_cast<float>(totalMarks)/(numOfStudents-1));
}

void loop() {}

- :‫سيكون الناتج على شاشة المراقب التسلسلي كالتالي‬


‫‪This program calculates the average of the student‬‬

‫‪enter‬‬ ‫‪the‬‬ ‫‪student‬‬ ‫‪1‬‬ ‫‪name‬‬ ‫>==‬ ‫‪Ali ,and the grade ==> 85‬‬
‫‪enter‬‬ ‫‪the‬‬ ‫‪student‬‬ ‫‪2‬‬ ‫‪name‬‬ ‫>==‬ ‫‪Mohammed ,and the grade ==> 72‬‬
‫‪enter‬‬ ‫‪the‬‬ ‫‪student‬‬ ‫‪3‬‬ ‫‪name‬‬ ‫>==‬ ‫‪Sara ,and the grade ==> 80‬‬
‫‪enter‬‬ ‫‪the‬‬ ‫‪student‬‬ ‫‪4‬‬ ‫‪name‬‬ ‫>==‬ ‫‪Ahmad ,and the grade ==> 90‬‬
‫‪enter‬‬ ‫‪the‬‬ ‫‪student‬‬ ‫‪5‬‬ ‫‪name‬‬ ‫>==‬ ‫‪Mona ,and the grade ==> 94‬‬
‫‪enter‬‬ ‫‪the‬‬ ‫‪student‬‬ ‫‪6‬‬ ‫‪name‬‬ ‫>==‬ ‫‪Stop ,and the grade ==> 0‬‬

‫‪The number of students == 5‬‬


‫‪Student average == 84.20‬‬

‫مالحظة مهمة جدا جدا‪:‬‬

‫لمقارنة متغيرين من نوع ‪ String‬فإننا ال نستخدم العالقة التالية ”‪ , “String1” == “String2‬وذلك ألن أداة المساواة تستخدم‬
‫بين أنواع البيانات البسيطة‪ ,‬وليست بين أنواع البيانات المركبة‪ ,‬حيث أن المتغير من نوع ‪ String‬هو عبارة عن مجموعة من‬
‫ال ‪ char‬لذلك فهو ليس نوع بيانات بسيط‪ ,‬ولحل هذه المشكلة نستخدم األمر التالي‪ String1.equals(String2) :‬حيث أن‬
‫هذا األمر يرجع ‪ true‬اذا تطابق كال ال ‪ String‬ويرجع ‪ false‬عدا ذلك‪ ,‬ولالطالع على تفاصيل أكثر اتبع الرابط التالي‪.‬‬

‫نالحظ أن مثال ‪ ,1‬ومثال ‪ 2‬يقومان بنفس الوظيفة‪ ،‬لكن مثال ‪ 2‬يتيح لنا ادخال ما نشاء من بيانات الطالب بدون معرفة عددهم‬
‫مسبقا‪ ،‬لكن في مثال‪ ,1‬ال بد من معرفة عدد الطالب قبل عملية ادخال بياناتهم‪ ،‬كما نالحظ أنه عند إدخال كلمة ‪ stop‬إلى‬
‫األردوينو فإن البرنامج يقوم بطباعتها على أنها اسم طالب‪ ،‬وال يتوقف مباشرة‪ ،‬وخالل هذا الموضوع سنالحظ كيف حل هذه‬
‫المشكلة باستخدام تراكيب برمجية مختلفة ‪...‬‬

‫‪Case 3: Flag-Controlled while Loops‬‬


‫يستخدم هذا النوع من حلقات التكرار متغير ‪ LCV‬من نوع ‪ bool‬ليتحكم بالحلقة‪ ،‬ويعرف ‪ flag variable‬على أنه متغير من‬
‫نوع ‪ bool‬يشير ما اذا كان الشرط ‪ true‬أم ‪ , false‬وعادة ما يسمى نسبة على صحة الشرط‪ ,‬مثال ‪isTrue, isEnough and‬‬
‫‪ ,is full‬افترض أن ‪ isFound‬متغير من نوع ‪ ,bool‬سيكون شكل ‪ flag-controlled while loop‬كالتالي‪:‬‬

‫;‪bool isFound‬‬

‫)‪while (!isFound‬‬
‫{‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫)‪if(expression‬‬
‫;‪isFound = true‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫}‬
‫مثال ‪:4‬‬
‫يقوم البرنامج التالي بشكل عشوائي بإنشاء عدد صحيح أكبر من أو يساوي ‪ 0‬وأقل من ‪ .100‬ثم‬
‫يطلب البرنامج من المستخدم تخمين الرقم‪ .‬إذا خمن المستخدم الرقم بشكل صحيح‪ ،‬يقوم‬
‫البرنامج بإخراج رسالة مناسبة‪ .‬بخالف ذلك‪ ،‬يتحقق البرنامج مما إذا كان الرقم الذي تم تخمينه‬
‫أقل م ن الرقم العشوائي‪ .‬إذا كان الرقم الذي تم تخمينه أقل من الرقم العشوائي الذي تم إنشاؤه‬
‫بواسطة البرنامج‪ ،‬فسيخرج البرنامج الرسالة "تخمينك أقل من الرقم‪ .‬خمن مرة اخرى!"؛ خالف‬
‫ذلك‪ ،‬يقوم البرنامج بإخراج الرسالة "تخمينك أعلى من الرقم‪ .‬خمن مرة اخرى!"‪ .‬ثم يطلب البرنامج‬
‫من المستخدم إدخال رقم آخر‪ُ .‬يطلب من المستخدم تخمين الرقم العشوائي حتى يقوم بإدخال‬
‫الرقم الصحيح‪ .‬إلنشاء رقم عشوائي‪ ،‬يمكنك استخدام الدالة )‪ random(max‬بعد تعريفها من الدالة‬
‫)(‪ .randomSeed‬على سبيل المثال‪ُ ،‬يرجع التعبير )‪ random(max‬قيمة ‪ long‬بين ‪ 0‬و‪.max-1‬‬
‫لالطالع على تفاصيل أكثر عن دالة التخمين العشوائي‪ ،‬اتبع الرابط التالي‪.‬‬
int num; //variable to store the random number
int guess; //variable to store the number guessed by the user.
bool isGuessed; //boolean variable to control the loop

void setup()
{
Serial.begin(9600);
Serial.setTimeout(10);
randomSeed(analogRead(0));
num = random(100);
isGuessed = false;
while (!isGuessed)
{
Serial.print("Enter an integer greater");
Serial.print(" than or equal to 0 and ");
Serial.print("less than 100: ");
while(!Serial.available());
guess = Serial.parseInt();
Serial.println(guess);
if (guess == num)
{
Serial.println("You guessed the correct number.");
isGuessed = true;
}
else if (guess < num){
Serial.print("Your guess is lower than the ");
Serial.println("number.\n Guess again!");
}
else{
Serial.print("Your guess is higher than ");
Serial.println("the number.\n Guess again!");
}
}
}

void loop() { }

:‫فيما يلي الخرج الذي ظهر على شاشة المراقب التسلسلي ألحد المحاوالت‬
Enter an integer greater than or equal to 0 and less than 100: 80
Your guess is lower than the number.
Guess again!
Enter an integer greater than or equal to 0 and less than 100: 85
Your guess is lower than the number.
Guess again!
Enter an integer greater than or equal to 0 and less than 100: 90
Your guess is lower than the number.
Guess again!
Enter an integer greater than or equal to 0 and less than 100: 93
You guessed the correct number.
for Looping (Repetition) Structure
‫ شكل مخصص من‬for ‫ حيث تعتبر حلقة‬,C++ ‫ التي تم مناقشتها سابقا كافية لتنفيذ أغلب أشكال التكرار في‬while ‫تعتبر حلقة‬
counted or ‫ ب‬for loop ‫ لهذا السبب تسمى ال‬,counter controlled while loop ‫ وهي تمثل‬,while ‫أشكال حلقة‬
.indexed for loop

:for ‫فيما يلي التركيب البنائي لحلقة‬

‫ كلمة محفوظة‬for ‫تعتبر‬

‫ الشكل‬,for loop control statement ‫ ب‬update statement ‫ و‬loop condition ‫ و‬initial statement ‫تسمى‬
:for loop ‫التالي يوضح ألية عمل ال‬

:for loop ‫فيما يلي خطوات عمل ال‬

.initial statement ‫ يتم تنفيذ‬.1


‫ فسنتبع الخطوات التالية‬true ‫ فإذا كانت قيمته‬,loop condition statement ‫ يتم تقييم‬.2
.for loop statement ‫يتم تنفيذ‬ .I
.update statement ‫يتم تنفيذ‬ .II
.false ‫هي‬loop condition statement ‫ حتى تكون قيمة‬2 ‫ يتم اعادة الخطوة رقم‬.3

:5 ‫مثال‬
The following for loop prints the first 10 nonnegative integers:

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


Serial.println (i);
The initial statement, i = 0;, initializes the int variable i to 0. Next, the loop condition, i < 10, is
evaluated. Because 0 < 10 is true, the print statement executes and outputs 0. The update
statement, i++, then executes, which sets the value of i to 1. Once again, the loop condition is
evaluated, which is still true, and so on. When i becomes 10, the loop condition evaluates to false,
the for loop terminates, and the first statement following the for loop executes.

:‫ بشكل أكبر‬for loop ‫ األمثلة التالي يساعد على فهم‬،‫ عبارة عن جملة مركبة‬for ‫من الممكن أنت تكون جملة حلقة‬

:6 ‫مثال‬
1. The following for loop outputs Hello! and a star (on separate lines) five times:

for (i = 1; i <= 5; i++)


{
Serial.println ("Hello!");
Serial.println("*");
}

2. Consider the following for loop:

for (i = 1; i <= 5; i++)


Serial.println ("Hello!");
Serial.println("*");

The output of this for loop is:


Hello!
Hello!
Hello!
Hello!
Hello!
*

The for loop controls only the first output statement because the two output statements are not
made into a compound statement using braces. Therefore, the first output statement executes five
times because the for loop body executes five times. After the for loop executes, the second
output statement executes only once. The indentation, which is ignored by the compiler, is
nevertheless misleading

:7 ‫مثال‬
The following for loop executes five empty statements:

for (i = 0; i < 5; i++); //Line 1


Serial.println("*"); //Line 2

The semicolon at the end of the for statement (before the output statement, Line 1) terminates the
for loop. The action of this for loop is empty, that is, null. As in Previous example, the indentation
of Line 2 is misleading.
The following are some comments on for loops:

• If the loop condition is initially false, the loop body does not execute.
• The update expression, when executed, changes the value of the loop control variable
(initialized by the initial expression), which should change in such a way that eventually
sets the value of the loop condition to false. The for loop body executes indefinitely if
the loop condition is always true.
• A semicolon at the end of the for statement (just before the body of the loop) is a
semantic error. In this case, the action of the for loop is empty.
• In the to be true for statement, if the. loop condition is omitted, it is assumed
• In a for statement, you can omit all three statements—initial statement, loop condition,
and update statement. However, the for statement must contain two semicolons. The
following is a legal

for loop:

for(;;)

Serial.println ("Hello" );
This is an infinite for loop, continuously printing the word Hello.

:‫ الحظ المثال التالي‬،‫ للعد تنازليا‬for ‫من الممكن استخدام عداد في حلقة‬

for (i = 5; i >= 1; i--)


Serial.println(i);
Serial.print("Stop");

:‫وسيكون الخرج على شاشة المراقب التسلسلي كالتالي‬


5
4
3
2
1
Stop
‫ تستمر الحلقة في التنفيذ طالما أن‬.1 ‫ بمقدار‬i ‫ يتم إنقاص‬،‫ بعد كل تكرار للحلقة‬.5 ‫ إلى‬i ‫ تتم تهيئة المتغير‬،‫ هذه‬for ‫في حلقة‬
.i >= 1

‫؛ في نهاية حلقة‬1 ‫ تتم تهيئة المتغير على‬،‫ التالية‬for ‫ في حلقة‬.‫يمكنك زيادة (أو إنقاص) متغير التحكم في الحلقة بأي رقم ثابت‬
.‫ أعداد صحيحة فردية موجبة‬5 ‫ أول‬for ‫ ينتج عن حلقة‬.2 ‫ بمقدار‬i ‫ تتم زيادة‬،for

for (i = 1; i <= 10; i = i + 2)


Serial.println(i);
Serial.print("Stop");
‫وسيكون الخرج على شاشة المراقب التسلسلي كالتالي‪:‬‬
‫‪1‬‬
‫‪3‬‬
‫‪5‬‬
‫‪7‬‬
‫‪9‬‬
‫‪Stop‬‬

‫االن افترض أن ‪ i‬متغير من نوع ‪:int‬‬

‫)‪for (i = 10; i <= 9; i++‬‬


‫;)‪Serial.println(i‬‬
‫;)"‪Serial.print("Stop‬‬
‫في حلقة ‪ for‬هذه‪ ،‬تعيّن العبارة األولية ‪ i‬إلى ‪ .10‬ألن شرط الحلقة (‪ )i <= 9‬في البداية خاطئ ‪ ،‬فال شيء يحدث‪.‬‬

‫األن افترض المثال التالي‪:‬‬

‫)‪for (i = 10; i <= 10; i++‬‬ ‫‪// line 1‬‬


‫;)‪Serial.println(i‬‬ ‫‪// line 2‬‬
‫;)"‪Serial.print("Stop‬‬ ‫‪// line 3‬‬
‫في حلقة ‪ for‬هذه‪ ،‬تحدد العبارة األولية ‪ i‬إلى ‪ .10‬يتم تقييم شرط الحلقة (‪ )i <= 10‬على صحيح‪ ،‬لذلك يتم تنفيذ عبارة اإلخراج‬
‫في السطر ‪ ،2‬مما ينتج ‪ .10‬بعد ذلك‪ ،‬تزيد جملة التحديث من قيمة ‪ i‬بمقدار ‪ ،1‬وبالتالي فإن قيمة ‪ i‬تصبح ‪ .11‬اآلن يتم تقييم‬
‫حالة الحلقة إلى ‪ false‬وتنتهي الحلقة ‪ .for‬الحظ أن عبارة اإلخراج في السطر ‪ 2‬يتم تنفيذها مرة واحدة فقط‪.‬‬

‫لنفترض االن المثال التالي‪:‬‬

‫;)‪for (i = 1; i <= 10; i++‬‬ ‫‪// line 1‬‬


‫;)‪Serial.println(i‬‬ ‫‪// line 2‬‬
‫;)"‪Serial.print("Stop‬‬ ‫‪// line 3‬‬
‫ليس لحلقة ‪ for‬هذه أي تأثير على بيان اإلخراج في السطر ‪ .2‬الفاصلة المنقوطة في نهاية تعليمة ‪ for‬تنهي الحلقة ‪ for‬؛‬
‫وبالتالي فإن عمل الحلقة ‪ for‬فارغ‪ .‬بيان المخرجات هو كل شيء من تلقاء نفسه ويتم تنفيذه مرة واحدة فقط‪.‬‬

‫االن لنفترض المثال التالي‪:‬‬

‫)‪for (i = 1; ; i++‬‬
‫;)‪Serial.println(i‬‬
‫;)"‪Serial.print("Stop‬‬
‫نظرا لحذف شرط الحلقة من تعليمة ‪ ،for‬يكون شرط الحلقة دائ ًما صحي ًحا‪ .‬هذه حلقة ال نهائية‪.‬‬
‫في حلقة ‪ for‬هذه‪ً ،‬‬

‫‪The following for loop outputs the positive powers of 2 up to 100.‬‬


‫)‪for (i = 2; i < 100; i = 2 * i‬‬
‫;)‪Serial.println(i‬‬
‫;)"‪Serial.print("Stop‬‬
‫‪The output in Serial monitor is:‬‬
2
4
8
16
32
64
Stop

:8 ‫مثال‬
‫ (اكتب كود أردوينو يطلب من‬,for loop ‫ باستخدام ال‬,2 ‫أعد كتابة كود يعمل نفس وظيفة مثال‬
‫ وكذلك اسم ودرجة كل طالب لحساب معدل الطالب‬،‫المستخدم ادخال عدد الطالب داخل الفصل‬
:)‫في الفصل‬

// Program: Counter-Controlled Loop


// This program calculates the average
// grades of students in the class
// enter the number of students and
// Each student's name and grade

String name;
int numOfStudents, grade, totalGrade = 0, avarge;
int count;

void setup() {
Serial.begin(9600);
Serial.print("Enter the number of Students ==> ");
while(!Serial.available());
numOfStudents = Serial.parseInt();
Serial.println(numOfStudents);
for (count = 0; count < numOfStudents; count++){
Serial.print("Enter the student's name == >> ");
while(!Serial.available());
name = Serial.readString();
Serial.print(name);
Serial.print(" ,and his grade == >> ");
while(!Serial.available());
grade = Serial.parseInt();
Serial.println(grade);
totalGrade += grade;
}
Serial.print("\nThe total grade is :: ");
Serial.println(totalGrade);
Serial.print("Student average is = ");
Serial.println(static_cast<float>(totalGrade)/numOfStudents);
}

void loop() {}
:‫سيكون الخرج على شاشة المراقب التسلسلي كالتالي‬
Enter the number of Students ==> 3
Enter the student's name == >> Ali ,and his grade == >> 80
Enter the student's name == >> Amer ,and his grade == >> 99
Enter the student's name == >> Ahmad ,and his grade == >> 60

The total grade is :: 239


Student average is = 79.67

:9 ‫مثال‬
The following C++ program finds the sum of the first n positive integers.

int counter; //loop control variable Line 5


int sum; //variable to store the sum of numbers Line 6
int N; //variable to store the number of
//first positive integers to be added Line 7

void setup() {

Serial.begin(9600);
Serial.setTimeout(10);

Serial.print("Line 8: Enter the number of positive ");


Serial.print ("integers to be added: "); //Line 8
while(!Serial.available());
N = Serial.parseInt(); //Line 9
sum = 0; //Line 10
Serial.println(N); //Line 11
for (counter = 1; counter <= N; counter++) //Line 12
sum = sum + counter; //Line 13
Serial.print ("Line 14: The sum of the first ");
Serial.print (N);
Serial.print (" positive integers is ");
Serial.println(sum); //Line 14
}

void loop() {}

:‫سيكون الخرج على شاشة المراقب التسلسلي كالتالي‬


Line 8: Enter the number of positive integers to be added: 10
Line 14: The sum of the first 10 positive integers is 55
‫‪do…while Looping (Repetition) Structure‬‬

‫في هذه الموضوع سوف نتكلم عن النوع الثالث من حلقات التكرار‪ ،‬أال وهو (‪ ,)do…while‬فيما يلي التركيب البنائي لجملة‬
‫ال ‪.do…while‬‬

‫بالطبع ال ‪ statement‬من الممكن أن تكون جملة واحدة‪ ،‬أو مجموعة جمل على شكل ‪ ,compound statement‬إذا كانت‬
‫عبارة عن جملة مركبة فال تنسى األقواس الخاصة بالجمل ال ُمركبة‪ ،‬الشكل التالي يوضح ألية عمل هذه الجملة‪.‬‬

‫تعتبر ‪ do‬كلمة محفوظة‪.‬‬

‫الخطوات التالية توضح ألية عمل ‪do…while‬‬

‫‪ .1‬أوال‪ :‬يتم تنفيذ جملة التكرار (‪.)statement‬‬


‫‪ .2‬ثانيا‪ :‬يتم تقييم شرط التكرار (‪ ،)expression‬فإذا كانت قيمته ‪ true‬يتم تنفيذ جملة التكرار‪ ،‬ويتم تنفيذ جملة التكرار‬
‫طالما كانت قيمة جملة الشرط )‪ )expression‬هي ‪ true‬فإذا كانت ‪ false‬فإنه يتم االنتقال إلى الجملة التي تلي جملة ال‬
‫‪ do…While‬أي يمكننا القول ‪.the do…while statement is terminated‬‬
.do…while ‫ يوضح ألية عمل جملة ال‬,‫المثال التالي‬

:10 ‫مثال‬
i = 0;
do
{
Serial.print(i);
Serial.print(" ");
i = i + 5;
}
while (i <= 20);

The output of this code is:


0 5 10 15 20
After 20 is output, the statement:
i = i + 5;
changes the value of i to 25 and so i <= 20 becomes false, which halts the loop.

pretest loops ‫ لذلك يطلق مصطلح‬،‫ يتم تنفيذ شرط التكرار قبل تنفيذ جملة التكرار‬for ‫ و جملة ال‬while ‫في جملة ال‬
‫ لذلك يُطلق عليها‬,‫ قبل تنفيذ شرط التكرار‬do…while‫ بينما تنفذ جملة التكرار في ال‬,for ‫ و‬while ‫على كل من جملة‬
‫ أال تتنفذ (إذا كان‬while ‫أو ال‬for ‫ ومن هنا نالحظ أنه من الممكن لجملة التكرار في حلقة ال‬,posttest loops ‫مصطلح‬
.‫ المثال التالي يوح السابق‬,do…while ‫) بينما جملة التكرار تنفذ على األقل مرة واحدة في حلقة‬false ‫شرط التكرار‬

:11 ‫مثال‬
.‫افترض وجود الجمل التالية‬

a) i = 11;
while (i <= 10)
{
Serial.print(i);
Serial.print(" ");
i = i + 5;
}
Serial.println();

b) i = 11;
do
{
Serial.print(i);
Serial.print(" ");
i = i + 5;
}
while (i <= 10);
Serial.println();

In (a), the while loop produces nothing, the statement never executes. In (b), the do. . .while loop
outputs the number 11 and also changes the value of i to 16. This is expected because in a
do…while, the statement must always execute at least once
:12 ‫مثال‬
.do…while ‫ مستخدما حلقة‬,3 ‫أعد صياغة مثال‬

‫ بحيث يتم ادخال اسم الطالب‬،‫اكتب كود أردوينو يتيح للمستخدم ادخال اسم الطالب وعالمتهم‬
‫ بحيث ينتهي عملية االدخال اذا قام‬،‫ وعالمته وهكذا‬،‫ ثم اسم الطالب الثاني‬،‫األول وعالمته‬
.‫ ثم يقوم البرنامج بحساب متوسط عالمات الطالب‬،)Stop( ‫المستخدم بإدخال كلمة‬

int numOfStudents = 0, stud_grade;


int totalMarks = 0,avarge;
String stud_name;
const String SENTINEL = "Stop";

void setup() {
Serial.begin(9600);

Serial.println("This program calculates the average of the student\n");

do
{
Serial.print("enter the student ");
Serial.print(" name ==> ");
while(!Serial.available());
stud_name = Serial.readString();
Serial.print(stud_name);
Serial.print(" ,and the grade ==> ");
while(!Serial.available());
stud_grade = Serial.parseInt();
Serial.println(stud_grade );
totalMarks += stud_grade;
numOfStudents++;
} while(!SENTINEL.equals(stud_name));

Serial.print("\nThe number of students == ");


Serial.println(numOfStudents - 1);
Serial.print("Student average == ");
Serial.println(static_cast<float>(totalMarks)/(numOfStudents-1));
}

void loop() {}

:‫سيكون الناتج على شاشة المراقب التسلسلي كالتالي‬


This program calculates the average of the student

enter the student name ==> Ali ,and the grade ==> 85
enter the student name ==> Mohammed ,and the grade ==> 72
enter the student name ==> Sara ,and the grade ==> 80
enter the student name ==> Ahmad ,and the grade ==> 90
enter the student name ==> Mona ,and the grade ==> 94
enter the student name ==> Stop ,and the grade ==> 0
‫‪The number of students == 5‬‬
‫‪Student average == 84.20‬‬

‫‪Choosing the Right Looping Structure‬‬


‫حلقات التكرار الثالث موجودة في لغة ال ‪ , C++‬وترجع عملية اختيار الحلقة المناسبة إلى البرنامج المكتوب‪ ,‬فإذا كان‬
‫البرنامج يتطلب عمليات تكرار معينة فاالختيار األمثل هو حلقة ‪ ,for‬بينما إذا كنت ال تعلم عدد مرات التكرار‪ ,‬أو لم يحدد‬
‫البرنامج‪ ,‬حيث من الممكن أن ال يكون هناك تكرار (عدد مرات التكرار تساوي صفر) فاالختيار األمثل هو حلقة ‪, while‬‬
‫في حين لم تكن تعلم عدد مرات التكرار‪ ,‬ولم يحدد البرنامج‪ ,‬وكان يتواجد على األقل عملية تكرار واحدة فالخيار األمثل هو‬
‫حلقة ‪.do…while‬‬

‫‪break and continue Statements‬‬


‫سبق وأن تعرفنا على جملة ‪ break‬في جملة ‪ switch‬حيث كان عملها إنهاء جملة ‪ switch‬على الفور‪ ,‬وبالمثل فإن جملة‬
‫‪ break‬في حلقات التكرار الثالث (‪ )for, while and do…while‬تعمل على إنهاء حلقة التكرار‪ ,‬وتستخدم جملة التكرار‬
‫ألحد الهدفين التاليين‪.‬‬

‫إلنهاء حلقة التكرار مبكرا‪.‬‬ ‫‪.I‬‬


‫تجاهل ما تبقى في جملة ‪.switch‬‬ ‫‪.II‬‬

‫بمجرد تنفيذ األردوينو لجملة ‪ break‬ينتقل البرنامج لتنفيذ أول جملة في الكود تلي حلقة التكرار‪.‬‬

‫تستخدم جملة ‪ continue‬في حلقات التكرار الثالث (‪ .)for, while and do…while‬إذا تم تنفيذ جملة ‪ continue‬فإن‬
‫األردوينو سوف يتجاهل باقي جملة التكرار‪ ،‬وينتقل البرنامج إلى العملية التالية ( ‪ )the next iteration‬في كل من حلقة‬
‫‪ while‬وحلقة‪ ، do…while‬بينما ينفذ البرنامج ‪ update statement‬ثم شرط التكرار في حلقة ‪ for‬وينتقل إلى العملية‬
‫التالية (‪.)the next iteration‬‬
:13 ‫مثال‬
‫ إال‬،‫" طلب البرنامج إدخال عالمة الطالب‬Stop" ‫ أننا عندما قمنا بإدخال كلمة‬,12 ‫نالحظ في مثال‬
.‫ لحل هذه المشكلة‬12 ‫ قم بإعادة مثال‬،‫أنه من البديهي أن تنتهي عملية اإلدخال‬

int numOfStudents = 0, stud_grade;


int totalMarks = 0,avarge;
String stud_name;
const String SENTINEL = "Stop";

void setup() {
Serial.begin(9600);
Serial.println("This program calculates the average of the student\n");

do
{
Serial.print("enter the student ");
Serial.print(" name ==> ");
while(!Serial.available());
stud_name = Serial.readString();
Serial.print(stud_name);
if(SENTINEL.equals(stud_name))
break;
Serial.print(" ,and the grade ==> ");
while(!Serial.available());
stud_grade = Serial.parseInt();
Serial.println(stud_grade);
totalMarks += stud_grade;
numOfStudents++;
} while(!SENTINEL.equals(stud_name));

Serial.print("\nThe number of students == ");


Serial.println(numOfStudents);
Serial.print("Student average == ");
Serial.println(static_cast<float>(totalMarks)/(numOfStudents));
}

void loop() {}

This program calculates the average of the student

enter the student name ==> Ali ,and the grade ==> 85
enter the student name ==> Mohammed ,and the grade ==> 72
enter the student name ==> Sara ,and the grade ==> 80
enter the student name ==> Ahmad ,and the grade ==> 90
enter the student name ==> Mona ,and the grade ==> 94
enter the student name ==> Stop
The number of students == 5
Student average == 84.20
‫مثال ‪:14‬‬
‫اكتب برنامج أردوينو يعمل على جمع األرقام من ‪ 1‬إلى ‪ 9‬ما عدا ال ‪5‬‬

‫{ )(‪void setup‬‬
‫;)‪Serial.begin(9600‬‬
‫;‪int sum = 0‬‬
‫{)‪for(int i = 0; i < 10; i++‬‬
‫)‪if(i == 5‬‬
‫;‪continue‬‬
‫;‪sum += i‬‬
‫}‬
‫;)‪Serial.println(sum‬‬
‫}‬
‫}{ )(‪void loop‬‬

‫الحظ عند تحقق شرط جملة ‪ if‬فإن البرنامج سينفذ جملة ‪ ,continue‬والتي تعني أن البرنامج سيتجاهل باقي جملة التكرار‬
‫وينتقل إلى ال ‪ iteration‬التالية‪ ،‬بعد تنفيذ ال ‪.update statement‬‬

‫‪Nested Control Structures‬‬


‫في هذا الموضوع سنتعلم كيف نتعا مل مع حلقات التكرار بصورة أكبر من خالل مجموعة من األمثلة‪ ،‬ويتلخص هذ الموضوع‬
‫على التنويه أن جملة التكرار قد تكون أي جملة ‪ ,C++‬بكلمة أخرى قد تكون جملة التكرار حلقة تكرار‪ ،‬أو جملة شرط ‪...‬‬

‫مثال ‪:15‬‬
‫أكتب كود أردوينو يقوم بطباعة الشكل التالي على شاشة المراقب التسلسلي‪.‬‬

‫*‬
‫**‬
‫***‬
‫****‬
‫*****‬

‫من الواضح أننا نريد طباعة خمسة أسطر من النجم (*) في السطر األول نريد طباعة نجمة واحدة‪ ,‬وفي السطر الثاني نجمتان‪,‬‬
‫في الثالث ثالث نجم‪ ,‬وهكذا‪ ,‬بما أننا نريد طباعة خمس أسطر فبالتالي سنستخدم الجملة التالية‪:‬‬

‫)‪for (i = 1; i <= 5; i++‬‬

‫نالحظ أن قيمة المتغير ‪ i‬في السطر األول هي ‪ ,1‬وفي السطر الثاني هي ‪ ,2‬وفي الثالث ‪ ,3‬وهكذا‪ ،‬لذلك من الممكن أن‬
‫نستخدم قيمة المتغير ‪ i‬لتحديد عدد النجم في كل سطر‪ ،‬ويكون هذا من خالل حلقة تكرار داخل حلقة التكرار األولى‪ ،‬ليصبح‬
‫الكود كالتالي‪:‬‬
‫‪for (i = 1; i <= 5; i++) //Line 1‬‬
‫‪{ //Line 2‬‬
‫‪for (j = 1; j <= i; j++) //Line 3‬‬
‫‪Serial.print("*"); //Line 4‬‬
‫‪Serial.println(); //Line 5‬‬
‫}‬

‫مثال ‪:16‬‬
‫لنفترض أننا نريد طباعة الجدول التالي‪:‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪10‬‬
‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪10‬‬ ‫‪12‬‬ ‫‪14‬‬ ‫‪16‬‬ ‫‪18‬‬ ‫‪20‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪15‬‬ ‫‪18‬‬ ‫‪21‬‬ ‫‪24‬‬ ‫‪27‬‬ ‫‪30‬‬
‫‪4‬‬ ‫‪8‬‬ ‫‪12‬‬ ‫‪16‬‬ ‫‪20‬‬ ‫‪24‬‬ ‫‪28‬‬ ‫‪32‬‬ ‫‪36‬‬ ‫‪40‬‬
‫‪5‬‬ ‫‪10‬‬ ‫‪15‬‬ ‫‪20‬‬ ‫‪25‬‬ ‫‪30‬‬ ‫‪35‬‬ ‫‪40‬‬ ‫‪45‬‬ ‫‪50‬‬

‫بما أننا نمتلك ‪ 5‬أسطر فإننا سنكتب الجملة التالية كما في المثال السابق‪:‬‬

‫)‪for (i = 1; i <= 5; i++‬‬

‫نالحظ أن السطر األول من الجدول عبارة عن األرقام من ‪ 1‬إلى ‪ ,10‬بينما السطر الثاني عبارة عن األرقام من ‪ 1‬إلى ‪10‬‬
‫مضروبة ب ‪ ,2‬واألرقام في السطر الثالث عبارة عن األعداد من ‪ 1‬إلى ‪ 10‬مضروبة ب ‪ ,3‬وهكذا‪ ،‬لذلك سيكون الكود‬
‫كالتالي‪:‬‬

‫{)(‪void setup‬‬
‫;‪int i,j‬‬
‫;)‪Serial.begin(9600‬‬

‫{)‪for (i = 1; i <= 5; i++‬‬


‫{)‪for (j = 1; j <= 10; j++‬‬
‫;)‪Serial.print(i * j‬‬
‫"(‪Serial.print‬‬ ‫;)"‬
‫}‬
‫;)(‪Serial.println‬‬
‫}‬
‫}‬

‫}{)(‪void loop‬‬
‫أسئلة وتمارين‪- :‬‬

‫سؤال ‪- :1‬‬
‫أكتب كود أردوينو يظهر الجدول التالي‪:‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪10‬‬
‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪10‬‬ ‫‪12‬‬ ‫‪14‬‬ ‫‪16‬‬ ‫‪18‬‬ ‫‪20‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪15‬‬ ‫‪18‬‬ ‫‪21‬‬ ‫‪24‬‬ ‫‪27‬‬ ‫‪30‬‬
‫‪4‬‬ ‫‪8‬‬ ‫‪12‬‬ ‫‪16‬‬ ‫‪20‬‬ ‫‪24‬‬ ‫‪28‬‬ ‫‪32‬‬ ‫‪36‬‬ ‫‪40‬‬
‫‪5‬‬ ‫‪10‬‬ ‫‪15‬‬ ‫‪20‬‬ ‫‪25‬‬ ‫‪30‬‬ ‫‪35‬‬ ‫‪40‬‬ ‫‪45‬‬ ‫‪50‬‬

‫سؤال ‪- :2‬‬
‫صمم كود أردوينو بحيث نمتلك ‪ 5‬لدات متصلة بالمنفذ ‪ 9‬و‪ 10‬و‪ 11‬و‪ 12‬و‪ ,13‬بحيث يقوم أحد اللدات‬
‫بالوميض‪ ،‬في حين تكون اللدات األخرى مضيئة‪ ،‬والجدول التالي يوضح عدد مرات الوميض لكل لد‪،‬‬
‫وتوقيت الوميض الخاص به وكذلك سرعة الوميض‪.‬‬

‫مقدار التأخير بين كل ومضة‬ ‫رقم اللفة‬


‫عدد مرات الوميض‬ ‫رقم منفذ اللد‬
‫والتي تليها‬ ‫(‪)number of iteration‬‬
‫‪500‬‬ ‫‪3‬‬ ‫‪9‬‬ ‫‪1‬‬
‫‪400‬‬ ‫‪4‬‬ ‫‪10‬‬ ‫‪2‬‬
‫‪300‬‬ ‫‪5‬‬ ‫‪11‬‬ ‫‪3‬‬
‫‪200‬‬ ‫‪6‬‬ ‫‪12‬‬ ‫‪4‬‬
‫‪100‬‬ ‫‪7‬‬ ‫‪13‬‬ ‫‪5‬‬

You might also like