درس یازدهم : حلقه های While و Do
درس یازدهم حلقه های While و Do
11-1 مقدمه
در ویژوال بیسیک چند نوع حلقه داریم. بنده با توجه به نوع عملکردشان آنها را به سه دسته تقسیم کرده ام.
دسته ی اول حلقه های For بودند که دستور یا دستوراتی را به تعداد مشخص اجرا میکردند. حلقه ی For با گرفتن یک متغیر به عنوان شمارنده یا کانتر به یک تعداد مشخص تکرار میشود. تعداد تکرار این حلقه برای برنامه نویس روشن و معلوم است. با این حلقه در درس قبلی آشنا شدید.
دسته دوم حلقه هایی هستند که تا زمانی که یک شرط صادق و برقرار است تکرار میشوند. تعداد تکرار این حلقه ها برای برنامه نویس معلوم نیست. برنامه تا زمانی که شرط برقرار باشد حلقه را تکرار میکند چه دو بار و چه هزار بار. به محض اینکه دیگر شرط برقرار نبود و نقض شد حلقه متوقف میشود. این حلقه ها با کمک گیری از کلمه ی کلیدی While شرطی را گرفته و تازمانی که شرط صحیح است و مقدار True را برمیگرداند حلقه را اجرا میکنند.
دسته سوم حلقه هایی هستند که تا زمانی که یک شرط برقرار نیست تکرار می شوند. تعداد تکرار این حلقه ها برای برنامه نویس معلوم نیست. برنامه تا زمانی که یک شرط برقرار نشده حلقه را تکرار میکند. چنین حلقه هایی انقدر تکرار میشوند تا یک شرط برقرار شود. به محض اینکه شرط برقرار شد تکرار حلقه متوقف میشود. این حلقه ها با کمک گیری از کلمه ی کلیدی Until شرطی را گرفته و تا زمانی که شرط غلط است و مقدار False را برمی گرداند حلقه را اجرا میکند.
با دسته دوم و سوم در این درس آشنا میشویم.
11-2 حلقه های While Condition
این حلقه ها تا زمانی که یک شرط برقرار می باشد تکرار و به محض اینکه شرط نقض شد متوقف میگردند.
11-2-1 سینتکس حلقه ی While Condition …. End While
سینتکس حلقه ی while به صورت زیر است:
While Condition
Statements
End While
همانطور که مشاهده می کنید با کلمه ی کلیدی While حلقه را آغاز و شرط را مقابل آن می آوریم. زیر آن دستور یا دستورهایی که در نظر داریم نوشته و با عبارت کلیدی End While بلاک کد را می بندیم.
همانطور که اشاره شد این نوع حلقه نیازی به شمارنده و تعریف متغیر داخلی ندارد. بدیهی ست که احتیاجی به مشخص کردن گام هم نیست. به مثال زیر توجه کنید :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click While TextBox1.Text.Length > 1 TextBox1.Text = Mid(TextBox1.Text, 1, TextBox1.TextLength - 1) End While End Sub
مثال بالا یک قطعه کد غیر کاربردی ساده به قصد نشان دادن روش تعریف شرط در حلقه ی وایل است. در این مثال عبارتی در TextBox1 وارد و با کلیک بر دکمه ی Button1 کل عبارت جز حرف اول آن حذف میشود. در این کد که در رخداد کلیک چپ بر روی دکمه ی Button1 نوشته شده است، ابتدا با کلمه ی کلیدی While شروع و شرط TextBox1.Text.Length > 1 را برای آن قرار دادیم. این شرط یعنی تا زمانی که طول رشته ی درون TextBox1 از عدد یک بیشتر است انجام بده دستورات زیر را. سپس دستوری به کمک تابع Mid برای جدا کردن رشته از حرف آخر و جایگزین کردن رشته ی حاصل با رشته ی اصلی نوشته شده که این کد در حلقه ی While تکرار میشود. انقدر در حلقه تک تک حروف آخر رشته ی اصلی حذف می شوند تا فقط حرف اول باقی بماند اینجا رشته فقط به یک حرف تبدیل شده و طول آن هم طبیعتا عدد یک است. چون شرط این بود که حلقه تا زمانی ادامه یابد که طول رشته از یک بیشتر باشد اینجا شرط نقض میشود حلقه خاتمه یافته و سر انجام از آنچه در TextBox1 وارد شده بود فقط حرف اول آن باقی میماند.
1-1-2-11 حلقه ی بینهایت
گرچه ایجاد حلقه ی بینهایت را توصیه نمیکنم ولی گاهی تشکیل چنین حلقه ای نیاز برنامه است. برای این کار فقط کافی ست هرنوع شرطی که هرگز نقض نمیشود برای While قرار دهید. مثلا بگویید تا زمانی که 2 برابر با 2 است. یا 4>1 است. اما روش رسمی و صحیح تر برای این کار استفاده از ارزش true به جای شرط است. یعنی به صورت زیر کد را بنویسید:
While True
Statements
End While
درست است که چنین حلقه ای هرگز پایان نمیابد ولی برای اینکه سینتکس حلقه صحیح باشد و پایان بلاک حلقه مشخص شود استفاده از کلمه ی کلیدی End While الزامی ست. توجه داشته باشید که برای ایجاد حلقه ی بینهایت باید کاملا به کاری که میکنید مطلع باشید. ایجاد چنین حلقه هایی در صورت عدم مراقبت صحیح در برخی سیستمها ممکن است باعث کرش نرم افزارتان شوند.
2-1-2-11 پرش به خارج از حلقه
از درس قبل به یاد دارید که برای این منظور در حلقه ی For از کلمه ی Exit For استفاده می کردیم. در حلقه ی While برای خروج از حلقه از کلمه ی کلیدی Exit While استفاده میکنیم.
Dim i As Integer = 0 While i < 999 i += 2 Exit While End While
در مثال بالا حلقه مقدار i را دو واحد افزایش می دهد و در همان اولین تکرار به Exit While رسیده و از حلقه بیرون میپرد. حالا به مثال زیر توجه کنید:
Dim i As Integer = 0 While i < 999 i += 2 If i > 20 Then Exit While End If End While
اینبار حلقه ده بار اجرا میشود. حلقه با اولین اجرا مقدار i را دو واحد افزایش میدهد و مقدار i را چک میکند که آیا از عدد 20 بزرگتر است یا نه. چون هنوز i از 20 بزرگتر نیست دستور داخل بلاک شرطی If یعنی Exit While اجرا نشده و حلقه به تکرار خود ادامه میدهد. این کار انقدر ادامه میابد تا شرط معین شده برای دستور IF برقرار شود. اینجا دستور درون بلاک IF اجرا شده و برنامه از حلقه ی While بیرون میپرد. مقدار نهایی i عدد 22 خواهد بود.
با دو مثال بالا دریافتید که با ترکیب حلقه ها و شرط ها و دستورات خروج از حلقه چه کدهای مرکب پیچیده ای میتوان نوشت. شما به عنوان برنامه نویس وظیفه دارید از این ابزار به نحو احسن استفاده و کدی روان و کامل برای به نتیجه رساندن پروژه ی خود بنویسید.
11-2-2 سینتکس حلقه ی Do While Condition …. Loop
این حلقه دقیقا مانند حلقه ی While عمل میکند و نیازی به استفاده ی واقعی از این حلقه نیست. در واقع به جای نوشتن حلقه ی While … End while میتوان Do While … Loop استفاده و دقیقا نتیجه ی مشابهی گرفت. سینتکس این حلقه به صورت زیر است:
Do While Condition
Statements
Loop
دقت کنید که برای بستن بلاک کد این حلقه از کلمه ی کلیدی Loop استفاده میشود. مثال:
Dim n As Integer = 99 Do While n > 6 n -= 1 Loop
11-2-2-1 حلقه ی بینهایت
برای تولید حلقه بینهایت در هر حالتی فقط کافی است شرطی تعیین کنیم که هرگز نقض نمیشود اما بهترین کار قرار دادن مقدار بولی True به جای شرط است.
Do While True
Statements
Loop
11-2-2-2 پرش به خارج حلقه
در حلقه هایی که در آنها از کلمه ی کلیدی DO استفاده شده میتوان با دستور Exit Do از حلقه خارج شد.
11-2-3 سینتکس حلقه ی Do … Loop While Condition
این حلقه اول یک بار بدون توجه به شرط اجرا میشود و از بار دوم به بعد فقط در صورت صحیح بودن شرط تکرار میشود و تا نقض شرط ادامه میابد.
Do
Statements
Loop While Condition
مثال:
Dim n As Integer = 99 Do n -= 1 Loop While n > 6
11-3 حلقه های Until Condition
این حلقه ها تا زمانی که یک شرط غلط است اجرا شده و به محض اینکه شرط برقرار شد متوقف میگردند.
11-3-1 سینتکس حلقه ی Do Until Condition …. Loop
این حلقه اول یک بار بدون توجه به شرط اجرا میشود و از بار دوم به بعد فقط در صورت غلط بودن شرط تکرار میشود و تا برثرار شدن شرط ادامه میابد.
Do Until Condition
Statements
Loop
مثال :
Dim n As Integer = 99 Do Until n < 6 n -= 1 Loop
11-3-1-1 حلقه ی بینهایت
برای ساخت حلقه ی بینهایت در حلقه های Until Condition باید شرطی نوشته شود که هرگز صحیح نباشد یا درست تر این است که از مقدار بولی False به جای شرط استفاده کنید.
Do Until False
Statements
Loop
11-3-1-2 خروج از حلقه
مانند تمام حلقه هایی که در آنها از کلمه ی کلیدی Do استفاده شده است، با دستور Exit Do میتوان از این حلقه ها نیز بیرون پرید.
11-3-2 سینتکس حلقه ی Do …. Loop Until Condiotion
این حلقه اول یک بار بدون توجه به شرط اجرا میشود و از بار دوم به بعد فقط در صورت غلط بودن شرط تکرار میشود و تا برقرار شدن شرط ادامه میابد.
Do
Statements
Loop Until Condition
مثال:
Dim n As Integer = 99 Do n -= 1 Loop Until n < 6
حال که با انواع حلقه آشنا شدیم بیایید با مثالی طریقه استفاده از آنان را در برنامه نشان دهیم.
فرض کنید می خواهیم برنامه ای بنویسیم که عددی را از ورودی گرفته و تعداد ارقام آن را در خروجی اعلام کند. برای این کار فرمی مطابق شکل 1-11 طراحی کنید و کد زیر را برای آن وارد نمایید.
شکل 1-11
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim j As Integer = 0, x As Integer = 0, n As Integer = Val(TextBox1.Text) While n <> 0 x = n Mod 10 j += 1 n \= 10 End While Label1.Text = "این عدد " & j & " رقم دارد." End Sub End Class
تمرین : برنامه ای بنویسید که عددی را گرفته و آن را مقلوب کرده و در خروجی نمایش دهد.
درود
توضیح زیر درسته؟
"
11-3-1 سینتکس حلقه ی Do Until Condition …. Loopاین حلقه اول یک بار بدون توجه به شرط اجرا میشود و از بار دوم به بعد فقط در صورت غلط بودن شرط تکرار میشود و تا برثرار شدن شرط ادامه میابد.
"