درس دهم : حلقه های For … Next
درس دهم حلقه های For … Next
10-1 مقدمه
در درس آرایه ها به حلقه های فور اشاره کردیم. حلقه قور برای تکرار یک سری دستور به تعداد مشخص به کار میرود. یعنی میگوییم انجام بده کدهای زیر را تا زمانی که مقدار فلان متغیر در فلان رنج است. حلقه ها در تمامی زبانهای برنامه نویسی از مهمترین و پر کاربردترین دستورات ان زبان میباشند. برای پر کردن آرایه ها صف ها و پشته ها، برای جست و جو و پیمایش در المان های مختلف و صدها دلیل دیگر باید به استفاده از حلقه ها روی آوریم. مثلا تصور کنید میخواهید یک عدد را به باینری تبدیل کنید. همانطور که میدانید روش کار به این صورت است که باید عدد مورد نظر را آنقدر بر 2 تقسیم کنید که دیگر تقسیم پذیر نباشد و با جمع آوری آخرین خارج قسمت و باقیمانده ها میتوان به معادل باینتری عدد دست یافت. خب برای طراحی این برنامه چی میکنید؟ اگر عددی سه رقمی در اختیار بود، برای آن بارها و بارها کد تقسیم و ذخیره ی باقیمانده و خارج قسمت در متغیر ها مجزا را مینوشتید؟ اگر عدد نامعین بود و قرار بود از ورودی دریافت شود چه؟ از کجا باید فهمید چند بار تقسیم برای آن باید نوشته شود؟ اینجاست که اهمیت حلقه های تکرار مشخص میشود. درست مانند دستورات شرطی معمولا برنامه ای نیست که حداقل یک بار از حلقه ها استفاده نکرده باشد. در این آموزش به تشریح چند نوع حلقه ی For, While و Do … While میپردازیم.
10-2 سینتکس حلقه ی For
در ویژوال بیسیک 2015 سینتکس حلقه ی فور به صورت زیر است :
For variable = value1 To value2 step n
Statements ….
Next
10-2-1 تعریف متغیر مورد استفاده در حلقه
برای تعریف متغیر مورد استفاده در حلقه میتوان از دو روش عمل کرد:
10-2-1-1 تعریف متغیر خارج از حلقه
میتوان متغیر را خارج از حلقه تعریف، و در داخل حلقه آن را فراخوانی کرد:
Dim i As Integer For i = 0 To 3 MsgBox("This is the test #" & i.ToString()) Next
10-2-1-2 تعریف متغیر داخل حلقه
میتوان متغیر را داخل حلقه تعریف کرد. این روش یک خط کد نویسی اضافی را کاهش میدهد و باعث خوانا تر شدن کد میشود. زیرا اگر متغیر را خارج از حلقه تعریف کنید ممکن است بعدها کسی که کد را میخواند مجبور شود دنبال مکان تعریف متغیر استفاده شده در حلقه بگردد:
For i As Integer = 0 To 3 MsgBox("This is the test #" & i.ToString()) Next
10-2-2 رنج و بازه ی تکرار
در درس قبل با کلمه ی کلیدی TO آشنا شدیم. چه متغیر را درون حلقه و چه خارج آن تعریف کنیم، بعد از نام متغیر یک مقدار اولیه به آن میدهیم، سپس با کلمه ی کلیدی TO پایان بازه را مشخص میکنیم. توجه کنید که در ویژوال بیسیک کلمه ی کلیدی TO خود عدد پایانی را هم حساب میکند.
10-2-3 Step یا گام
نرخ افزایش یا گام بدین معنی ست که حلقه در بازه ی معین شده چند تا چند تا حرکت کند. این کلمه ی کلیدی اختیاری است و میتوانید آن را استفاده نکنید. من هم در مثال های بالا آن را قرار ندادم. اگر این کلمه را در حلقه ی فور نیاورید، ویژوال بیسیک اتوماتیک آن را مثبت 1 میگیرد. و هر بار یک واحد به ارزش عدد 1 در بازه حرکت صعودی میکند. اگر بخواهید در بازه حرکت معکوس یا کاهشی انجام دهید دیگر استفاده از Step اختیاری نیست. باید حتما از گام استفاده کرده و مقدار آن را عدد منفی یک قرار دهید.
10-2-3-1 گام افزایشی
اگر گام را مثبت 2 قرار دهید، اگر بازه از 1 تا 5 باشد، حلقه سه بار اجرا خواهد شد. یک بار با مقدار اولیه متغیر یعنی عدد 1. بعد دو واحد افزایش میابد و میشود 3. کد باز اجرا میشود. بعد دو واحد دیگر افزایش میابد و متغیر برابر با 5 میشود باز کد اجرا میشود و تمام. حال اگر این مقدار را 3 بگذارید، حلقه دو بار اجرا میشود. یک بار با مقدار اولیه و یک بار با مقدار 4. بعد از این افزایش از بازه بیرون میزند و حلقه خاتمه میابد. توجه میکنید که اگر نرخ افزایش شما بیش از بازه باشد حلقه همیشه فقط یک بار اجرا خواهد شد:
For i As Integer = 1 To 5 Step 2 MsgBox("This is the test #" & i.ToString()) Next
10-2-3-2 گام کاهشی
گفتیم برای حرکت معکوس در بازه باید گام را منفی قرار دهید. یعنی مثلا وقتی بازه از 10 تا 1 است، باید گام را منفی 1 یا منفی هر عددی که میخواهید بگذارید.
از این تکنیک ها میتوان برای مثال برای تولید اعداد فرد استفاده کرد.
10-2-4 Next
استفاده از این کلمه ی کلیدی الزامی و جزئی از سینتکس حلقه ی فور است. با این کلمه ی کلیدی چهارچوب حلقه مشخص و اسنیپت بسته میشود.
10-3 پرش به خارج از حلقه ی For
برای این منظور از دستور ساده ی Exit For استفاده میشود. معمولا خروج از حلقه را با دستور شرطی IF همراه میکنند که اگر شرایطی خاص اتفاق افتاد، برنامه از حلقه خارج شود اگر نه به اجرای حلقه ادامه دهد.
حال که با حلقه ی فور آشنا شدیم به مثال زیر توجه کنید. میخواهیم برنامه ای بنویسیم که کلیه اعداد زوج دو رقمی را به صورت نزولی در خروجی چاپ کند. مطابق شکل 1-10 داخل فرم خالی فقط یک لیبل در گوشه ای قرار دهید و از کد زیر استفاده کنید. سعی کنید کد را تحلیل کنید. خروجی مطابق شکل 2-10 خواهد بود.
شکل 10-1 برنامه قبل از اجرا
کد برنامه:
Public Class forLoopsMain Private Sub forLoopsMain_Load(sender As Object, e As EventArgs) Handles Me.Load Label1.AutoSize = False Label1.Dock = DockStyle.Fill Label1.ForeColor = Color.Brown Label1.BackColor = Color.White Label1.Font = New Font("Arial", 10) Label1.Text = "" For i As Integer = 98 To 10 Step -2 Label1.Text &= i & " " Next End Sub End Class
شکل 2-10 برنامه بعد از اجرا
تمرین : برنامه ای بنویسید که یک آرایه ی یک بعدی با 10 عضو را به عنوان نمرات دانشجو از ورودی دریافت و سپس جمع کل و معدل را حساب کند.