شرح الأمر For
في فيجوال بيسيك
تستخدم الدورة For
في برنامج الVisual
Basic في العديد من التطبيقات البرمجية التي تتطلب
تكرار متغيرات أو نصوص أو حتى أعداد مختلفة. كما وتستخدم في البحث عن قيم معينة
واستخراج المطلوب منها، مثل البحث عن جميع الأعداد الزوجية أو الفردية الواقعة بين
عددين مختلفين.
الصورة العامة للدورة For في برنامج الفيجوال بيسيك Visual Basic
For اسم المتغير =العدد من to الى العدد
المنطقة التي ينطبق عليها التكرار
Next اسم المتغير
ما هي حالات تطبيق الدورة For في برنامج الفيجوال بيسيك؟
أولاً:- تطبيق الدورة For
على النصوص For Loops
on Texts
في هذه الحالة يتم تكرار النص بعدد المرات التي يتم تحديدها في معالم
الدورة Attributes كما يلي:
مثال: قم بتكرار العبارة النصية I Like Visual Basic
عشرة مرات؟
For i =1 من
to 10
|
توقف عن
تكرار العبارة التي في الأسفل عندما تصبح قيمة i أكبر من العدد 10
|
1
|
Print “I
Like Visual Basic”
|
اطبع
العبارة I Like
Visual Basic
|
2
|
Next i
|
نهاية منطقة التكرار التابعة للدورة
(القفلة)
|
3
|
كيف يتم قراءة البرنامج السابق من قِبَل المترجم Compiler الخاص بال Visual Basic؟
كما نلاحظ، فإن قيمة المتغير i
الابتدائية هي 1، ثم يقوم المترجم الخاص ببرنامج الفيجوال بيسيك
بفحص فيما إذ كانت قيمة المتغير الصحيح i أقل من أو تساوي العدد 10 أم لا؟ فإذا كانت
قيمة المتغير أقل من العدد 10 سيتم تنفيذ العبارة التي تليها مباشرة والواقعة بين
الكلمة For والكلمة Next أي الأمر البرمجي Print “I Like Visual Basic” ثم يصل
الى العبارة البرمجية Next i
والتي تقوم بزيادة قيمة المتغير بمقدار عدد واحد صحيح (أي تصبح
قيمة i
تساوي 2) ونعود من جديد الى البداية For
وهكذا.
قد نتساءل، ماذا يحدث عندما تصل قيمة المتغير i
الى العدد 10 في المثال السابق؟
كما ذكرنا من قبل، يقوم المترجم الخاص ببرنامج الفيجوال بيسيك بفحص
فيما إذ كانت قيمة المتغير الصحيح i
أقل من أو تساوي العدد 10 أم لا؟ فإذا كان الجواب لا، (أي >10i) سيتم الخروج من الدورة ة مباشرة والانتقال
الى الأوامر البرمجية التي ما بعد العبارة Next
وذلك إن وجدت أوامر أخرى.
ثانياً:- تطبيق الدورة For على المتغيرات For Loops on Variables
وهي الحالة الأكثر شيوعا، حيث يتم في هذه الحالة التعامل مع المتغير i
(العداد) مباشرة وخاصة في حالة البحث واستخراج القيم وحتى حل
المعادلات المتكررة كالمتتاليات والمتسلسلات الحسابية والهندسية وغيرها. الأمثلة
التالية توضح العديد من الأفكار التي يمكن استخدام هذه الحالة فيها:
مثال: اطبع الأعداد الصحيحة على شاشة الحاسوب من العدد صفر وحتى العدد 5؟
For i =0 من
to 5
|
توقف عن
تكرار العبارة التي في الأسفل عندما تصبح قيمة i أكبر من العدد 5
|
1
|
Print i
|
اطبع قيمة
المتغير i
|
2
|
Next i
|
نهاية منطقة التكرار التابعة للدورة
(القفلة)
|
3
|
كي نفهم كيف يقوم المترجم الخاص بالفيجوال بيسيك بتفسير الكود البرمجي
السابق سنبدأ بقيمة المتغير i الابتدائية والتي تساوي 0 (هل i > 5) ؟ الجواب
لا، نكمل الى الأمر الذي يليه Print i أي سيطبع القيمة 0 على الشاشة، ثم يقوم الأمر البرمجي Next i بإضافة
عدد واحد صحيح للمتغير i ليصبح قيمة i = 2 ونعود من جديد لنسأل (هل i > 5) ؟ الجواب
لا، إذن نكمل الى الأمر الذي يليه وهكذا حتى تصبح قيمة المتغير i = 6 لنعود ونسأل من جديد (هل i > 5)؟ الجواب
نعم، وعليه لا نكمل تنفيذ الأوامر التي بداخل الدورة (أي الواقعة بين الأمر For والأمر Next).
ومن هنا نتوقف عن اكمال طباعة الأعداد بعد طباعة العدد 5، ليكمل المترجم قراءة الأوامر الأخرى
التي تقع بعد الأمر البرمجي Next i (إن وجدت)، كما سنرى في
المثال التالي.
مثال: ما ناتج تنفيذ الكود التالي في برنامج الفيجوال بيسيك؟
For i =0 من
to 3
|
1
|
Print 2*i
|
2
|
Next i
|
3
|
Print
“The Final Value of i = ”
|
4
|
Print i
|
5
|
سيقوم البرنامج السابق بطباعة مضاعفات العدد 2، ابتداءً من العدد 0
وحتى العدد 6. بعد الانتهاء من الدورة For
والخروج منها سيتم تنفيذ الأمر الذي يلي الأمر البرمجي Next i ثم يليهما طباعة قيمة
ناتج المتغير i والذي سيظهر القيمة 4 على الشاشة، حيث أن آخر قيمة
اكتسبها المتغير i والتي أدت لخروجه من الدورة.
والشكل التالي يوضح مخرجات البرنامج في بيئة الفيجوال بيسيك:
يمكن أيضا التعديل على البرنامج السابق ليتم عرض العبارة The Final Value of i =4 في سطر واحد وذلك بكتابة
الأمر البرمجي التالي:
Print “The Final Value of i = ” ; i
وهنا يأتي دور الفاصلة المنقوطة Semicolon لتنفيذ الأوامر البرمجية
وطباعتها على سطر واحد جنبا الى جنب.
كيف أطبع جدول الضرب لأي عدد في
برنامج الفيجوال بيسيك عن طريق الأمر For
كما في الشكل التالي؟
Dim x As Integer
|
عرف المتغير الصحيح x
|
1
|
Dim y As Integer
|
عرف المتغير الصحيح y
|
2
|
Dim z As Integer
|
عرف
المتغير الصحيح z
|
3
|
z = Val(Text1.Text)
|
قم بتخزين القيمة المدخلة في Text1 ووضعها في المتغير الصحيح z
|
4
|
x = Val(Text2.Text)
|
قم
بتخزين القيمة المدخلة في Text2
ووضعها في المتغير الصحيح x
|
5
|
y = Val(Text3.Text)
|
قم بتخزين القيمة المدخلة في Text3 ووضعها في المتغير الصحيح y
|
6
|
For i = x To y
|
اجعل قيمة المتغير الصحيح مساوية لقيمة
المتغير x.
توقف عن تكرار العبارة التي في الأسفل،
(رقم 8)، وذلك عندما تصبح قيمة i
أكبر من قيمة المتغير y.
|
7
|
Print z; "X"; i;
" = "; z * i
|
اطبع قيمة المتغير z يليها إشارة الضرب X
يليها قيمة المتغير i يليها إشارة المساواة = وأخيرا قيمة حاصل ضرب المتغيرين z و i.
(لاحظ إشارة النجمة * والتي تشير الى عملية الضرب في برنامج الـ Visual
Basic)
|
8
|
Next i
|
زيادة
قيمة المتغير i بمقدار عدد واحد صحيح
وقفل الدورة For
|
9
|
أسئلة شائعة عن الدورة For في بيئة الفيجوال بيسيك
كيف أقوم بطباعة الأعداد العشرية المتتالية في برنامج الفيجوال بيسيك؟
ذلك بقسمة قيمة المتغير i على
الأعداد التي تخدم تلك الغاية، فمثلاً لطباعة الأعداد العشرية المتتالية 0.1 0.2
0.3 0.4 0.5 0.6 0.7 0.8 نقوم بقسمة المتغير i
على العدد 10 كما في البرنامج التالي:
For i = 1 to 8
|
1
|
Print i / 10
|
2
|
Next i
|
3
|
ما هي طريقة استخراج وطباعة الأعداد الزوجية في برنامج فيجوال بيسيك؟
كما نعلم، فإن الأعداد الزوجية هي
الأعداد التي تقبل القسمة على العدد 2 بدون باقي. حيث أن صورتها الرياضية العامة
هي 2k حيث ( k: أي عدد صحيح). وعليه، بعد تحديد قيمة البداية والنهاية للمتغير i في
الدورة For أي:
For i = بداية to نهاية
نضع ذلك الشرط البرمجي والذي ينص
على أننا فقط نريد طباعة الأعداد التي باقي قسمتها على العدد 2 يساوي صفر. بالطبع
سندرج استخدام العبارة البرمجية الشرطية if داخل الدورة For
كما في الشيفرة البرمجية (النص البرمجي) التالي، والذي سيقوم باستخراج وطباعة جميع
الأعداد الزوجية من العدد 5 وحتى العدد 20؟
For i = 5
to 20
|
تعريف المدى الذي سيقوم المتغير i
بأخذ قيمه
|
1
|
If i Mod 2
= 0 Then
|
إذا كان باقي قسمة i على 2
يساوي صفراً
|
2
|
Print i
|
اطبع
قيم i
|
3
|
End if
|
انتهاء صلاحية if
|
4
|
Next i
|
قفل
الدورة For
بعد زيادة i بمقدار وحدة واحدة
|
5
|
ما هي طريقة استخراج وطباعة الأعداد الفردية في برنامج فيجوال بيسيك؟
على عكس السؤال السابق، فهنا يكون
الشرط البرمجي هو طباعة الأعداد التي لا تقبل القسمة على العدد 2 من دون باقي، أي
طباعة الأعداد التي ناتج قسمتها على العدد 2 لا تساوي 0 كما في النص البرمجي
التالي والذي سيقوم بطباعة الأعداد الفردية من العدد 1 وحتى العدد 30:
For i = 1
to 30
|
تعريف المدى الذي سيقوم المتغير i
بأخذ قيمه
|
1
|
If i Mod 2
<> 0 Then
|
إذا كان باقي قسمة i على 2 لا يساوي صفراً
|
2
|
Print i
|
اطبع
قيم i
|
3
|
End if
|
انتهاء صلاحية if
|
4
|
Next i
|
قفل
الدورة For
بعد زيادة i بمقدار وحدة واحدة
|
5
|
ما هي طريقة طباعة الأعداد الأولية في برنامج فيجوال بيسيك ضمن فترة محددة؟
ما هي الأعداد الأولية؟
إن تعريف الأعداد الأولية Prime
Numbers هي جميع الأعداد التي لا تقبل القسمة الا على
العدد واحد وعلى نفسها فقط من دون باقي. وتمتاز جميعها بأنها أعداد فردية عدا
العدد 2. حيث يعتبر العدد 2 هو عدد أولي.
ملاحظة: العدد 1 هو عدد غير أولي.
طريقة استخراج وطباعة الأعداد الأولية الواقعة في فترة معينة
في هذه الحالة البرمجية الخاصة،
سنقوم باستخدام وتوظيف دورتين؛ الأولى تمثل الفترة التي نريد استخراج وطباعة
الأعداد الفردية منها. أما الدورة الثانية فهي للعدد المقسوم عليه والتي تقع بين
العددين الصحيحين الواقعين في الدورة الأولى. في الأسفل الكود البرمجي الخاص
بطباعة الأعداد الفردية الواقعة في فترة من 1 وحتى العدد 500:
Dim i, j, p As
Integer
|
عرف المتغيرات i و j و p كأعداد
صحيحة
|
1
|
For i = 1
to 500
|
تعريف المدى الذي سيقوم المتغير i بأخذ قيمه
|
2
|
If i <> 1 Then
|
إذا
كانت قيمة i لا تساوي العدد واحد
|
3
|
p = 1
|
اجعل قيمة المتغير p تساوي 1
|
4
|
For j = 2 To i - 1
|
تعريف
المدى الذي سيقوم المتغير j بأخذ قيمه
|
5
|
If i Mod j = 0
Then
|
إذا كان باقي قسمة i على j يساوي صفراً
|
6
|
p = p * 0
|
اجعل
قيمة المتغير p تساوي صفرا (غير أولي)
|
7
|
End if
|
انتهاء شرط باقي القسمة (رقم 6)
|
8
|
Next j
|
قفل
الدورة For
بعد زيادة j بمقدار وحدة واحدة
|
9
|
If p = 1
Then
|
إذا كانت قيمة p تساوي واحد
|
10
|
Print i
|
اطبع
قيم i
|
11
|
End if
|
انتهاء شرط طباعة الأعداد الأولية
|
12
|
End if
|
نهاية
الجملة الشرطية رقم 3
|
13
|
Next i
|
قفل الدورة For بعد زيادة i بمقدار وحدة واحدة
|
14
|
سؤال للتفكير؟
كيف نقوم باستخراج وطباعة جميع الأعداد
الزوجية الواقعة بين العدد 6 والعدد 20؟ (أي لا نريد أن
يظهر أي من العدد 6 والعدد 20 في الناتج المطبوع).