وفي هذا الدرس إن شاء الله سنشرح تركيبة while للتكرار : 3- تركيبة while التكرارية . تركيبة التكرار تسمح للمبرمج بتحديد الحدث المطلوب تكراره طالما الشرط متحقق (True). مثال : لاحظ هذا الجزء من برنامج ، يجد أول قوه للرقم 2 حيث يكون ناتجها أكبر من 1000 . والآن سنفرض متغير product من نوع integer . ثم نطبق ال pseudocode ( الكود الوهمي ) التالي:
While product less than or equal 1000 product equal 2 multiplied by product
كما يلي :
int product = 2; while ( product <= 1000) product = 2 * product;
والشكل التالي يوضح أسلوب عمل while في هذا البرنامج :
4 8 16 32 64 128 256 512 1024 The first power of 2 which it's product grater than 1000 is 10 Press any key to continue
أي أن أول قوه للرقم 2 ناتجها يعطي قيمة أكبر من 1000 هو 10 ملاحظة : * يجب الانتباه إلى شرط الجملة الشرطية لأن بعض الأخطاء قد تؤدي إلى infinite loop ( دائرة غير منتهية ) بمعنى تكرار غير منتهى . * أول حرف من أي كلمة محجوزة يجب أن يكون Lowercase (حرف صغير ) while فإذا حدث خطأ وكتبت Uppercase (حرف كبير ) While يحدث syntax error أي خطأ قواعدي . ( بما أن الكلمة المحجوزة تحولت إلى اللون الأزرق فمعناه أن الكلمة صحيحة ). وهذا هو البرنامج : نحميل
set total to zero set grade counter to one While grade counter is less than or equal to ten Input the next grade Add the grade into the total Add one to the grade counter Set class average to the total divided by ten Print t he class average
والآن سنبدأ بكتابة كود #C : أولاً سنقوم بتعريف مجموعة من المتغيرات ولنفرض أن الدرجات كلها صحيحة(integer) :
int total = 0 , //مجموع الدرجات gradeCounter = 1,//عدد الدرجات المدخلة gradeValue, //قيمة الدرجة average; //معدل الدرجات
ملاحظة: يجب إعطاء قيم بدائية لأي متغير يتم الزيادة عليه أو الطرح منه أو أي عملية حسابية في كل loop ( كقيمة product في المثال السابق ) ، لأنه عندما يستقبل قيمة لا يعرف لأي قيمة سيزيدها أو من أي قيمة سيطرحها إلا إذا كان يملك قيمة بدائية . والآن سنطبق جملة while :
//loop 10 times تكرار 10 مرات while ( gradeCounter <= 10) { // للتوضيح للمستخدم ما المطلوب Console.Write( " Enter integer grade: "); // integer قراءة المدخل وتحويله إلى //gradeValue وخزنة في المتغير gradeValue = Int32.Parse(Console.ReadLine()); //total إلى gradeValue إضافة قيمة المتغير total = total + gradeValue; //gradeCounter إضافة قيمة 1 للعداد gradeCounter = gradeCounter + 1; }
في كل دورة سيتم إضافة القيمة المدخلة إلى total وإضافة 1 للعداد ليحسب عدد مرات الإضافة . والآن سيتم حساب المعدل ومن ثم طباعته :
//قسمة صحيحة لمجموع القيم average = total / 10 ; // طباعة معدل مجموع الدرجات Console.WriteLine(" \nClass Average is {0} " , average);
وهذا هو البرنامج : تحميل
Initialize total to zero Initialize counter to zero Input the first grade (possibly the sentinel) While the user has not as yet entered the sentinel Add this grade into the running total Add one to the grade counter Input the next grade (possibly the sentinel ) If the counter is not equal to zero Set the average to the total divided by the counter Print the average Else Print “No grades were entered “
أولا ً سنقوم بتعريف متغيرtotal وإعطاؤه قيمة بدائية 0 ، لأنه عند إدخال قيمة درجة سيجمعها مع الصفر حيث لا يؤثر على هذه القيمة ويتم تخزينها . وأيضا ً سنعرف متغير counter ونعطيه قيمة بدائية 0 أي أن عدد الدرجات المدخلة تساوي 0 حتى الآن . والآن قراءة أول قيمة مدخلة ويمكن أن تكون sentinel value (قيمة التوقف) 1- .
تستقبل دارة while (while loop) القيمة المدخلة إليها وتقوم باختبارها : إذا كانت تساوي 1- ستـُهمل جملة while وينتقل التنفيذ إلى جملة if . تختبر قيمة العداد . إذا كان counter != 0 سيحسب المعدل بقسمة ال total على counter وتخزينها بالمتغير Average ثم طباعتها إذا كان counter == 0 هذا يعني أنه لم يتم إدخال أي قيمة فينتقل التنفيذ إلى else ويطبع “No grades were entered “ إذا كانت لا تساوي 1- فسينفذ التعاليم التي يحتويها حيث يقوم بإضافة هذه القيمة إلى total ، ثم إضافة 1 لقيمة counter ثم الاستعداد لقراءة قيمة أخرى .
ملاحظة : في هذا البرنامج عرفنا المتغير Average من نوع double لأننا سنسند إليه قيمة حقيقية وليس صحيحة أي بكسور. ولكن القيمة الناتجة صحيحة لأن total معرفة int و counter أيضا ً معرفة int لذا عند عمليه القسمة حولنا total إلى double حتى تكون القيمة الناتجة بكسور . والآن سنقوم بكتابة هذا البرنامج بلغة #C .
int total = 0, //مجموع الدرجات gradeCounter = 0, // عدد الدرجات المدخلة gradeValue; // قيمة الدرجة double average; // معدل الدرجات //integer جملة البداية وجملة التحويل إلى Console.Write("Enter Integer Grade, -1 to Quit: "); gradeValue = Int32.Parse( Console.ReadLine()); // -1 مستمر حتى إدخال رقم loop while ( gradeValue != -1) { //total إضافة القيمة إلى total = total + gradeValue; //gradeCounter إضافة 1 للعداد gradeCounter = gradeCounter + 1; // جملة التذكير للمستخدم وجملة التحويل Console.Write("Enter Integer Grade, -1 to Quit: "); gradeValue = Int32.Parse( Console.ReadLine()); } // end while if ( gradeCounter != 0) { // حساب المعدل ثم طباعته average = (double ) total / gradeCounter; Console.WriteLine("\nClass average is {0} :", average); } else Console.WriteLine("\nNo grades were entered .");
وهذا هو برنامج Average2: تحميل