فرض کنید در برنامه ای قصد دارید یک سری دستورالعمل را به تعداد دفعاتی تکرار کنید. مثلا دریافت نمره تعدادی از دانش آموزان برای محاسبه مجموع نمرات. در چنین مواردی که شما نیاز دارید کار مشخصی را (دریافت نمره) چند بار تکرار کنید باید از ساختارهای تکرار (حلقه تکرار) استفاده کنید.
بطور کلی دو نوع ساختار تکرار داریم :
1. ساختار تکرار با دفعات معین : در این ساختار شما می دانید که دستورات چند بار باید تکرار شوند.
2. ساختار تکرار با دفعات نا معین : در این ساختار شما نمی دانید که دستورات چند بار باید تکرار شوند.
برای ایجاد ساختارهای (حلقه) با تکرار معین از حلقه For استفاده می شود که حالت کلی آن بدین صورت است :
For شمارنده حلقه = مقدار شروع To مقدار پایان گام حلقه
دستورات
Next شمارنده حلقه
حال به توضیح اجزای یک حلقه For می پردازیم :
برای ایجاد یک حلقه ابتدا باید تعیین کنیم که دستورات به چه تعدادی باید تکرار شوند و پس از این کار با کلمه کلیدی For اقدام به ایجاد یک حلقه می کنیم.
شمارنده حلقه متغیری است معمولا از نوع Integer که معمولا i نامیده می شود و به آن مقداری نیز نیز نسبت داده می شود که هر عددی می تواند باشد اما بهتر است 0 یا 1 باشد.
بعد از تعیین شمارنده حلقه و مقداردهی آن از کلمه کلیدی To استفاده می شود و بعد از کلمه کلیدی To نیز مقدار پایانی حلقه ذکر می شود آن نیز باید یک عدد (یا متغیر عددی) باشد.
قسمت پایانی حلقه نیز گام حلقه یا مقدار افزایشی می باشد یعنی بعد از هر بار اجرای دستورات چه عددی به شمارنده حلقه اضافه شود.
نکته : تعیین گام حلقه اختیاری است و در صورتی که گام حلقه تعیین نشود بصورت پیش فرض 1 در نظر گرفته می شود یعنی بعد از هر بار 1 عدد به شمارنده اضافه می کند.
همانطور که در ساختارهای قبلی نیز گفته شد هر ساختار یک نقطه شروع و یک نقطه پایان دارد و دستوراتی که بین این دو نقطه شروع و پایان نوشته می شود دستورات بدنه نام می گیرند. در حلقه For نیز از این قانون پیروی می کنیم. یعنی نقطه شروع حلقه با کلمه کلیدی For و سایر مطالبی که توضیح داده شد تعیین می گردد و نقطه پایانی حلقه نیز با کلمه کلیدی Next و نوشتن شمارنده حلقه در مقابل آن تعیین می گردد.
شاید اینجا یک سوال برای شما عزیزان پیش بیاید و آن این است که دستورات داخل بدنه For چند بار تکرار می شوند یا چگونه تعیین کنیم که دستورات چند بار (مثلا 5 بار) تکرار شود.
برای تعیین تعداد دفعات تکرار (مثلا 5 بار) ما باید مقادیر مناسبی را برای مقدار شروع شمارنده حلقه و مقدار پایان تعیین کنیم.
مثال : برنامه ای بنویسید که 5 بار علامت (*) را چاپ کنید.
حل : ما در این مثال نیاز داریم که دستوری را به تعداد دفعات معین (5 بار) تکرار کنیم که همان چاپ علامت (*) است پس باید از حلقه For به شکل زیر استفاده کنیم :
For i = 1 To 5
Print *
Next i
دستوارت فوق العاده ساده هستند. در خط اول ابتدا ما بعد از کلمه کلیدی For مغیر i که همان شمارنده حلقه است را برابر 1 قرار دادیم یعنی مقدار شروع شمارنده را 1 تعیین کردیم و بعد از کلمه کلیدی To نیز مقدار 5 را قرار دادیم. از آنجایی گام حلقه را تعیین نکرده ایم بصورت پیش فرض 1 در نظر گرفته می شود. یعنی بعد از هر بار اجرای دستور العمل (چاپ علامت ستاره) یک مقدار را به شمارنده حلقه اضافه می کند و این کار را تا جایی انجام می دهد که شمارنده حلقه به 5 (مقدار پایان حلقه) و بعد از آن از حلقه خارج شده و دستورات بعد از حلقه را اجرا می کند.
حال به Trace کردن برنامه می پردازیم.
در این برنامه شمارنده حلقه 1 در نظر گرفته شده است که بعد از اجرای دستور چاپ (*) مقدار شمارنده 2 می شود.
در مرحله دوم، مقدار شمارنده 2 است، بعد از اجرای دستور چاپ (*) مقدار شمارنده 3 می شود.
در مرحله سوم، مقدار شمارنده 3 است، بعد از اجرای دستور چاپ (*) مقدار شمارنده 4 می شود.
در مرحله چهارم، مقدار شمارنده 4 است، بعد از اجرای دستور چاپ (*) مقدار شمارنده 5 می شود.
در مرحله پنچم، مقدار شمارنده 5 است، بعد از اجرای دستور چاپ (*) مقدار شمارنده 6 می شود.
در مرحله ششم چون مقدار شمارنده بیش از مقدار پایان حلقه می باشد بدون اینکه دستورات بدنه اجرا شود، برنامه از حلقه خارج شده و دستورات بعد از آن اجرا می شود.
پس همان طور که می بینید دستور چاپ علامت (*) 5 بار تکرار می شود.
تمرین : برنامه ای بنویسید که 3 عدد از کاربر دریافت کرده و مجموع آنها را محاسبه کنید.
حل : از آنجایی که ما نیاز داریم دستوراتی را (دریافت عدد از کاربر) به تعداد معینی (3 بار) تکرار کنیم از حلقه For استفاده می کنیم. برای دریافت عدد نیز اس تابع InputBox استفاده می شود.
برنامه Visual Basic را اجرا کرده و یک کنترل Command به آن اضافه کنید. نام کنترل را به cmdSum و Caption آن را به Sum تغییر دهید. حال کد زیر را برای رویداد کلیک آن بنویسید :
Private Sub cmdSum_Click()
Dim intSum As Integer
intSum = 0
For i = 1 To 5
intSum = intSum + Val(InputBox("عدد وارد کنید"))
Next i
MsgBox (" مجموع اعداد برابر است با : " & intSum)
End Sub
توضیح کدها :
در خط دوم متغیر intSum را از نوع Integer تعریف کردیم و در خط سوم به آن مقدار 0 دادیم.
خط سوم تا پنجم ساختار حلقه For است که مقدار 1 برای مقدار شروع آن و 5 برای مقدار پایان تعیین شده است یعنی دستورات بدنه حلقه 5 بار تکرار می شود.
خط چهارم که 5 بار تکرار می شود، در هر بار عددی را از کاربر دریافت کرده و جمع کردن آن با مقدار قبلی intSum آن را در intSum ذخیره می کند.
در خط هفتم نیز مقدار نهایی را مجموع اعداد دریافتی از کاربر است توسط تابع MsgBox نمایش می دهد.
Trace کردن برنامه با فرض بر وارد کردن اعداد 5، 7، 10، 3، 9 :
|
مقدار intSum |
مقدار شمارنده حلقه (i) |
مرحله |
|
0 + 5 = 5 |
1 |
اول |
|
5 + 7 = 12 |
2 |
دوم |
|
12 + 10 = 22 |
3 |
سوم |
|
22 + 3 = 25 |
4 |
چهارم |
|
25 + 9 = 34 |
5 |
پنجم |
|
خروج از حلقه For |
6 |
ششم |
همانطور که می بینید اگر در این برنامه اعداد 5، 7، 10، 3 و 9 را وارد کنید مقدار نهایی 34 خواهد بود.