السلام عليكم
إخواني وأخواتي ، بارك الله فيكم جميعاً
الدرس الأول : الحقات التكرارية (الدورانية) : Looping
في كثير من الأحيان يحتاج المبرمج إلى تكرار تنفيذ مجموعة من التعليمات عدداً من المرات، ويوجد طرقتين أساسيتين للتكرار في حالة كان عدد مرات التكرار معروفة مسبقا حيث يجب استخدام For ... Next ، وإذا كان عدد مرات التكرار غير محددة مسبقاً ومبنية على تحقق شرط معين (شرط إنتهاء الدوران أو البقاء به) فهنا نستخدم Do ... Loop .
يوجد أربع أشكال لحقات الدوراان التكرارية المبنية على شرط وبجميعها يكون هناك شرط يحدد استمرار التكرار أو توقفه. وقيمة الشرط ستكون إما True أو False ، أو تعبير يرُُجع قيمة رقمية حيث تعتبر القيمة التي لا تساوي صفراً True وإلا False.
أشكال البنى التكرارية الأربعة :
1. تنفيذ التعليمات statments هنا سيستمر حتى يتحقق الشرط condition .
Do Until condition Statments Loop
وعندما يصل أكسيس لتفيذ هذا الدوران ، فإنه سيبدأ وقبل كل شيء بفحص قيمة الشرط conditon، فإذا كان True ، سيتم الإنتقال فوراً إلى ما بعد التكرار أي أنه لن يتم الدخول للحلقة. أما إذا كان False ، فسيتم تنفيذ التعليمات satments ،ثم يرجع للسطر DO Until ، للقيام بفحص الشرط ثانية، وهكذا ...
إذاً ، سيتم تكرار الحلقة عدداً من المرات ، طالما بقي الشرط conditon قيمته False . ولن ينفذ ولو مرة واحدة إذا كان الشرط True.
ويجب في الحقات التكرارية المبني إنتهائها على شرط أن نلاحظ أنها لن تنتهي ما لم يتحقق الشرط ويجب العمل على تحقيقه في داخل الحلقة في لحظة ما وإلا سيستمر الدوران إلى ما لا نهاية ويعلق الجهاز.
ولنأخذ مثالاً حتى نفهم كيف سيتم التعامل مع هذا الشكل من أشكال الحلقات الدورانية:
نريد أن نجمع مجموعة من الأرقام المدخلة إلى الحاسوب ونطبع نتيجة جمعها . عندما ندخل العدد 999 نتوقف عن الإدخال.
sum = 0
x= InputBox("أدخل الرقم ")
do until x=999
sum = sum+x
x= InputBox("أدخل الرقم ")
loop
Msgbox sumمع ملاحظة ما يلي :
1. أننا قمنا أولا بتحديد قيمة المجموع وهي بالبداية صفراً
2. ثم قمنا بإدخال القيمة الإبتدائية قبل الدخول للحلقة وهي X ويتم إدخالها من قبل المستخدم عند تشغيل البرنامج.
3. بناء على قيمة x فإذا كانت 999 يكون الشرط true ولا ندخل للحلقة وإلا يكون false وندخل
في داخل الحلقة نقوم بزيادة قيمة sum االمجموع بمقدار القيمة المدخلة وهي x .
4. ثم تأتي عملية الإدخال من جديد داخل الحلقة والتي بدونها لن ينتهي التكرار حيث من خلال هذه الجملة سيتم وقف التكرار وذلك عند إدخال القيمة 999.
5. وفي نهاية البرنامج نطبع القيمة المطوبة وهي مجموع الأرقام التي تم إدخالها.
2. الشكل الثاني من أشكال الحلقات سيقوم بتنفيذ الدوران على الأقل مرة واحدة حيث يتم الدخول للحلقة أولا ثم في نهاية الحلقة يتم فحص الشرط :
Do Statements Loop Until condition
عندما يصل أكسيس لهذه الحلقة يتم الدخول فيها فورا وتنفيذ الجمل statements وبعد تنفيذها يتم فحص الشرط condtion فإذا كان true يخرج من الدوران وإلا يبقى وينفذ مرة أخرى وهكذا ...
ولنأخذ المثال التالي :
نريد أن نحسب مساحة مجموعة من الدوائؤ وعندما ندخل أن نصف القطر للدائرة صفراً تتوقف الحقلة (الدوران).
Private Sub ex2_Click()
Do
r = InputBox("أدخل نصف القطر")
a = r ^ 2 * 22 / 7
MsgBox "المساحة= " & a
Loop Until r=0
End Subوأرجو ملاحظة ما يلي :
1. تم الدخول للحلقة مباشرة دون شرط أو قيد ولهذا سيتم تنفيذ الحلقة على الأقل مرة واحدة
2. تم إدخال نصف القطر r حيث سليزم لحساب مساحة الدائرة والتي تساوي مربع نصف القطر مضروبا في النسبة التقريبية ط والتي تساوي 22/7.
3. يتم احتساب مساحة الدائة وطباعة النتيجة وذلك داخل الحلقة ايضاً.
4. في نهاية الحقلة يتم السؤال عن الشرط فإذا كانت قيمة نصف القطر r=0 فسنخرج من الحلقة والا ننتقل لإدخال نصف قطر جديد وحساب مساحة جديد وهكذا ..
3. في الشكل الثالث من أشكال الدوران ، تنفذ التعليمات طالما أن قيمة الشرط condition صحيحة true وإلا يتم التوقف عن الدوران في الحلقة التكراارية.
do while condition statements loop
عندما يصل الأكسيس إلى هذه الحلقة يفحص قيمة الشرط أولا وقبل الدخل للدوران فإذا كان صحيحاً يستمر في الدوران وإلا يخرج من الدوران.
ولنأخذ المثال التالي :
نريد أن نقرأ مجموعة من الأسماء ونطبعها وإذا كان الحرف الأول في الكلمة ع (حرف العين) نتوقف.
Private Sub ex3_Click()
na = InputBox("أدخل أسم")
Do While Left(na, 1) <> "ع"
MsgBox na
na = InputBox("أدخل أسم")
Loop
End Subومن المهم ملاحظة ما يلي :
1. يتم إدخال اسم ابتدائي قبل الدخول للحلقة حيث سيتم فحص الشرط مباشرة
2. لاحظ أن الشرط هو بالسؤال عن الحرف الأول من اليسار Left للاسم وإذا لم يكن يساوي حرف العين نستمر في الدوران وعندما ندخل اسم يكون أول حرف فيه عين يتم التوقف والخروج من الدوران.
3. في داخل الدوران سيتم طباعة النتيجة المطلوبة وهي الأسم ثم سيتم السؤال عن الأسم التالي تمهيدا لتنفيذ الدورة الثانية وهكذا ...
4. الشكر الرابع والأخير من أشكال الحلقات الدورانية المشروطة يتم فيه تنفيذ التعليمات مرة واحدة على الأقل وهو كما يلي :
Do statements Loop While condition
وهنا عندما يثل الأكسيس إلى الحلقة يتم الدخول مباشرة لها وتنفيذ الجمل التي بها statements ثم يتم الؤال عن صحة الشرط condtion حيث إذا كان true يستمر في الدوران وإلا يتم الخروج منه.
ولنأخذ المثال التالي وهو حساب مجموع مربعات (تربيع) الأعداد المدخلة . نتوقف عن الحساب ونطبع النتيجة المجموع عندما ندخل العدد 0.
Private Sub ex5_Click()
sum = 0
Do
x = InputBox("أدخل رقم")
sum = sum + x ^ 2
Loop While Not x = 0
MsgBox "مجموع مربعات الأعداد المدخلة هو " & sum
End Subلاحظ أن شرط الإنتهاء هو not x = 0 وهو مكافىء للشرط x<> 0 حيث الرمز <> يعني لا يساوي.
لاحظ أيضا أنه في جميع الأشكال الأربعة الساقة لم يحدد في الأمثلة عدد مرات التنفيذ وهكذا تستخدم الحلقات الدورانية في هذه الأشكال عندما لا يعرف عدد مرات التنفيذ (الدوران) مسبقاً.
أما إذا كنا نعلم عدد مرات التنفيذ (الدوران) فإنه من غير المفضل نهائياً استخدام الأشكال السابقة ويجب استخدام الشكل الخاص بالتكرار المروف مرات الدوران مسبقا وهو For .. do التالي :
For counter = start to end [Step increment] statments Next [Counter]
حيث أن :
counter : متغير (عداد الحلقة التكرارية)
start : القيمة الإبتدائية للدوران
end : القيمة النهائية للدوران
increment : مقدار الزيادة في كل مرة من مرات الدوران وإذا لم يوضع تكون الزيادة بشكل معياري هي 1
ويمكن أن يكون increment موجب أو سالب فإذا كان سالب يجب أن تكون القيمة النهائية أضغر من الإبتدائية.
وإليكم كيفية تعامل أكسيس مع هذا النوع من الحلقات :
1. عند الدخول للدوران for يتم وضع قيمة counter تساوي القيمة الإبتدائية start .
2. يتم ومباشرة وقبل تنفيذ الجمل التي تلو for إذا كانت قيمة العداد counter أكبر من القيمة النهائية end فإن كانت كذلك يتم إنهاء الدوران والخروج منه .
أما إذا كانت قيمة Increment سالبة فإن الفحص يتم بطريقة عكسية حيث يتم التأكد فيما إذا كانت قيمة العداد counter أقل من القيمة الإبتدائية start وإذا كانت كذلك يتم الخروج من الحلقة.
3. يتم تنفيذ الجمل التي في الحلقة
4. يتم زيادة قيمة العداد بمقدا واحد أو increment إذا كان محدداً.
5. وهكذا يتم تكرار الخطوات من 2 إلى 4 في كل مرة.
ولنأخذ المثال التالي نفرض أننا نريد جمع الأعداد الزوجية من 1 - 100 وطباعة النتيجة :
Private Sub ex6_Click() sum = 0 For i = 1 To 100 Step 2 sum = sum + i Next i MsgBox "المجموع هو " & sum End Sub
وفي مثالنا الثاني نريد أن نقرأ سام نموذج فإذا كان مفتوح نطبع أن النموذج مفتوح وإلا نطبع غير مفتوح
Private Sub ex7_Click()
n = InputBox("أدخل اسم النموذج")
IsOpen = False
For i = 0 To Forms.Count - 1
If Forms(i).FormName = n Then
IsOpen = True
End If
Next i
If IsOpen Then
MsgBox " النموذج مفتوح"
Else
MsgBox "النموذج غير مفتوح"
End If
End Subلاحظ أن للنماذج المفتوحة رقم يبدأ من صفر forms.count
ولاحظ اسم النموذج forms(I). formname
أما باقي الأمور في الحلقة فأعتقد أنه سهلة.
مع الاحترام والتقدير

