موسوعة الإلكترونيات الحرة وتعليم البرمجيات.

مواضيع جديدة

الثلاثاء، 2 أبريل 2019

الأمر For في فيجوال بيسيك (For Loop)


شرح الأمر 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 أم لا؟ فإذا كان الجواب لا، (أي i >10 ) سيتم الخروج من الدورة ة مباشرة والانتقال الى الأوامر البرمجية التي ما بعد العبارة 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 في الناتج المطبوع).

ليست هناك تعليقات:

إرسال تعليق

???????