درس هشتم : شروط و تصمیم گیری با IF
درس هشتم شروط و تصمیم گیری با IF
8-1 مقدمه
یکی از مهمترین بخشهای برنامه نویسی نوشتن کدهایی ست که بر اساس شرایط خاصی عمل میکنند. یعنی برنامه میتواند تصمیم بگیرد در هر حالت چه واکنشی نشان دهد. مانند تصمیم گیری بر اساس انتخابات کاربر که کاربرد بسیاری دارد. در این درس با روش تعریف شرط های ساده با IF… Else میپردازیم. این کد، شرطی را مطرح میکند و صحت آن را بررسی میکند. اگر شرط بر قرار بود، قطعه کدی از پیش تعریف شده ای اجرا میشود. اگر شرط برقرار نبود تصمیم دیگری گرفته میشود.
8-2 سینتکس IF ... then
سینتکس این کد به صورت زیر است:
If Condition true then
Some statement…
End if
در سینتکس بالا کلمه ی کلیدی IF سپس عبارت شرطی و بعد کلمه ی کلیدی Then آمده است. بعد از آن کدی که اگر شرط برقرار باشد نوشته میشود و بعد با کلمه ی کلیدی End If بلاک کد بسته میشود. یادتان باشد در ویژوال بیسیک بر خلاف زبانهای سی استایل از آکولاد برای تعیین مرز بلکها استفاده نمیشود پس استفاده از کلمه ی کلیدی End If برای بستن بلاک کد الزامی میباشد.
8-3 شروط
شرطها هر عبارت مقایسه ای میتوانند باشند. یعنی هر نوع عبارتی که در پاسخ True یا False برگرداند. مثلا آیا X بزرگتر است از Y ؟ آیا N برابر است با T ؟ آیا A مخالف است با B ؟ مثال:
If age > 18 Then MsgBox(“You are an adult!”, vbInformation + vbOKOnly, “Message”) End If
انواع عملگرهای قیاسی را برای استفاده در شروط میتوانید در جدول 1-8 ببینید.
DESCRIPTION |
OPERATOR |
برابر با |
= |
بزرگتر از |
> |
کوچکتر از |
< |
بزرگتر یا مساوی با |
>= |
کوچکتر یا مساوی با |
<= |
مخالف با |
<> |
جدول 1-8
8-4 Else
برای صحیح بودن یک شرط، کدی را نوشته و در صورتی که شرط صحیح باشد آن کد اجرا میشود. حالا اگر کد صحیح نباشد چه؟ در صورتی که مانند بالا فقط از یک If استفاده شود، اگر شرط برقرار نباشد کامپیوتر کل بلاک کد را نادیده میگیرد و به خط بعد از End If میرود. اما در صورتی که شرط برقرار باشد کامپیوتر کدهای داخل بلاک شرطی را اجرا میکند و بعد به خط بعد از End If میرود. این بدین معنا ست که هرچه بعد از End IF باشد در هر صورت اجرا میشود. بنابراین ما هیچ کدی مخصوص وقتی که شرطمان برقرار نباشد نداریم. ما کدی میخواهیم که فقط و فقط اگر شرط اصلی برقرار نبود اجرا شود و اگر شرط برقرار باشد اجرا نشود و نادیده گرفته شود. مثلا کدی بنویسیم که اگر سن مخاطب بالای 18 سال بود به او پیغام "شما واجد شرایط هستید" بدهد و پایان یابد. ولی اگر کاربر زیر 18 سال بود به اون پیغام "شما واجد شرایط نمیباشید" بدهد و پایان یابد. اینجاست که کلمه ی کلیدی Else به کار می آید. Else به این معناست که اگر آنچه در شرط جلوی If برقرار نبود آنگاه کدهای زیر را اجرا کن. سینتکس برای این کار به صورت زیر است:
If age > 18 Then MsgBox(“You are an adult!”, vbInformation + vbOKOnly, “Message”) Else MsgBox(“You are NOT an adult!”, vbInformation + vbOKOnly, “Message”) End If
8-5 شروط تو در تو با ElseIf
فرض کنید باید کدی بنویسیم که باید برای هر حالت ممکن یک تصمیم خاص بگیرد. مثلا برای هر روز ذکر ایام هفته را بنویسد. این کار را میتوان با شروط تو در تو انجام داد به این صورت که ابتدا اولین شرط با If تعریف و کد مربوط به آن نوشته میشود. بعد یک ElseIF آورده میشود و شرط جدید نوشته میشود. این بدین معنا ست که اگر شرط بالا برقرار نبود، آنگاه شرط جدید را بررسی کن اگر بر قرار بود دستورات من را اجرا کن اگر نه به خط بعدی برو. و در خط بعدی یک ElseIf دیگر قرار میدهیم و شرط جدید را مینویسیم. کامپیوتر شرط جدید را بررسی میکند و اگر بر قرار بود دستورات مربوطه را اجرا میکند و گرنه به دستور بعدی میرود و همین طور تا اخر بلاک شرط ادامه دارد. کد زیر را ببینید:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim daynum As Integer daynum = 4 If daynum = 0 Then MsgBox("Today is saturday !") ElseIf daynum = 1 Then MsgBox("Today is sunday !") ElseIf daynum = 2 Then MsgBox("Today is monday !") ElseIf daynum = 3 Then MsgBox("Today is tuesday !") ElseIf daynum = 4 Then MsgBox("Today is wednesday !") ElseIf daynum = 5 Then MsgBox("Today is thursday !") ElseIf daynum = 6 Then MsgBox("Today is friday !") Else MsgBox("Invalid Day Number !") End If End Sub
ملاحظه میفرمایید که آخر کد یک Else بدون شرط گذاشتم تا در صورتی که هیچ یک از شروط برقرار نبود آن کد اجرا شود. یک برنامه نویس خوب همواره تمام پیش بینی ها را در برنامه ی خود میکند. این مرحله را در درس مربوط به ارورها فراتر خواهیم برد تا برنامه ای بتوانید بنویسید که هیچوقت کراش نکند و عاری از باگ و حفره باشد.
8-6 بررسی چندین شرط با استفاده از عبارتهای منطقی
گاهی لازم است در قسمت شرط در آن واحد چند شرط همزمان برقرار باشند تا کدی را اجرا کنیم. مثلا فرض کنید می خواهیم تمام افرادی که وزنی بین 65 الی 85 کیلوگرم دارند را به عنوان وزن ایده آل معرفی و پیغام تبریک برایشان نمایش دهیم. اینجا چه باید کرد؟ اگر بگوییم وزن از 85 پایین تر باشد همه افراد زیر 85 انتخاب میشوند. اگر شرطمان را وزن بالای 65 بگذاریم همه ی افراد حتی آنها که 120 کیلوگرم وزن دارند هم به عنوان وزن ایده آل انتخاب میشوند. در این شرایط باید به سراغ شروط ترکیبی برویم. یعنی بگوییم اگر وزن بالای 65 و کمتر از 85 بود. برای این کار باید از عبارات منطقی استفاده کرد. عبارتهای منطقی را در جدول 2-8 میبینید:
DESCRIPTION |
OPERATOR |
هر دو طرف باید صحیح باشند |
And |
اگر یکی از طرفین صحیح باشد کافی ست |
Or |
باید غلط باشد |
Not |
جدول 2-8
8-6-1 عبارت منطقی AND
دو عبارت قیاسی را در طرفین AND قرار میدهیم. در این حالت هر دو عبارت قیاسی باید صحیح باشند وگرنه AND پاسخ کل شرط را False برمیگرداند و شرط برقرار نخواهد بود. مثلا شرط زیر را در نظر بگیرید:
(weight > 65) AND (weight < 85)
این شرط فقط در صورتی صحیح است که Weight بیشتر از 65 و کمتر از 85 باشد اگر وزن شخصی90 کیلوگرم باشد، شرط اول برقرار است یعنی وزن او از 65 بیشتر است اما شرط دوم برقرار نیست یعنی وزن او از 85 کمتر نمیباشد پس کل عبارت غلط میشود. برای مثالی که پیشتر زدیم این شرط با استفاده از AND به خوبی نیازمان را برطرف میکند.
8-6-2 عبارت منطقی OR
دو عبارت قیاسی در طرفین OR درست مانند AND عمل میکند با این تفاوت که نیازی نیست حتما هر دو شرط در طرفین عبارت OR صحیح باشند. اگر فقط یکی از عبارتها صحیح باشند کافی است. مثلا فرض کنید میخواهیم به کسانی که در ماههای آذر یا دی ماه متولد شده اند جایزه دهیم. شرط زیر را ببینید:
(mob = 9) OR (mob = 10)
در شرط بالا فرق ندارد شماره ماه تولد 9 باشد یا 10 در هر دو صورت شرط برقرار میباشد. اما اگر ماه تولد هرچیزی غیر از این دو عدد باشد شرط برقرار نیست.
نکته: به استفاده از پرانتز برای نظم دادن و اولویت بخشیدن به شروط دقت کنید. در مثال های بالا نیازی به این کار نبود چون اولویت عبارتهای قیاسی در هر صورت بیشتر از عبارتهای منطقی میباشد اما این کار تمرین خوبی است که عادت کنیم همیشه با استفاده از پرانتز منظورمان را به خوبی هی کامپیوتر برسانیم تا از اتفاق افتادن نتایج غلط و اشتباهات جلوگیری گردد.
نکته: میتوان با استفاده از پرانتزها و چندین عبارت قیاسی و شرطی شروط مرکب پیچیده ساخت.
میرسیم به طراحی برنامه ی این درس. اینبار قصد نوشتن یک برنامه ی کاربردی و جدی را داریم. حتما با محاسبه ی BMI آشنا هستید. این محاسبه برای بررسی توده ی بدن انسان استفاده میشود. از روی میزان این توده و مقایسه ی آن با مقدار نرمال میتوان تشخیص داد که فرد اضافه وزن دارد یا دچار کمبود وزن است. این مقدار از روی یک فرمول (BMI = w/h^2) و با وارد کردن قد، و وزن بدست می آید. کدی که من در زیر نوشته ام را با طراحی فرمی مشابه شکل 1-8 ارتباط دهید و سعی کنید کد را تحلیل کنید. این این برنامه ی بسیار ساده و ابتدایی میتوان به صورت کاربردی استفاده کرد. این برنامه به صورت کاملتر در بخش مثالها و پروژه ها قرار خواهد گرفت.
شکل 1-8
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.BackColor = Color.AliceBlue calculate.BackColor = Color.White resultInput.BackColor = Color.White End Sub Private Sub calculate_Click(sender As Object, e As EventArgs) Handles calculate.Click Dim weight As Single = 0, height As Single = 0, bmi As Single = 0 weight = weightInput.Text height = heightInput.Text bmi = (weight) / (height ^ 2) If bmi <= 18.5 Then resultInput.Text = bmi resultInput.ForeColor = Color. DarkRed resultLabel.Text = "وزن شما کمتر از میزان نرمال است." resultLabel.ForeColor = Color. DarkRed ElseIf bmi > 18.5 And bmi <= 24.9 Then resultInput.Text = bmi resultInput.ForeColor = Color.Green resultLabel.Text = "تبریک! وزن شما ایده آل است." resultLabel.ForeColor = Color.Green ElseIf bmi > 24.9 And bmi <= 29.9 Then resultInput.Text = bmi resultInput.ForeColor = Color.Orange resultLabel.Text = "وزن شما بیش از میزان نرمال است." resultLabel.ForeColor = Color.Orange ElseIf bmi > 29.9 Then resultInput.Text = bmi resultInput.ForeColor = Color.Red resultLabel.Text = "متاسفانه شما به اضافه وزن شدید مبتلا هستید." resultLabel.ForeColor = Color.Red End If End Sub End Classتمرین : برنامه ای بنویسید که یوزر و پسورد را از ورودی دریافت کند و فقط اگر یوزر برابر با admin و رمز برابر با 123 بود پیغام خوش آمدید نمایش دهد در غیر این صورت پیغام خطا دهد.