آموزش ویژوال بیسیک

آموزش قدم به قدم ویژاول بیسیک 2015 از مبتدی تا پیشرفته

آموزش ویژوال بیسیک

آموزش قدم به قدم ویژاول بیسیک 2015 از مبتدی تا پیشرفته

طبقه بندی موضوعی

درس هشتم : شروط و تصمیم گیری با 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 ارتباط دهید و سعی کنید کد را تحلیل کنید. این این برنامه ی بسیار ساده و ابتدایی میتوان به صورت کاربردی استفاده کرد. این برنامه به صورت کاملتر در بخش مثالها و پروژه ها قرار خواهد گرفت.

example_08

شکل 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 بود پیغام خوش آمدید نمایش دهد در غیر این صورت پیغام خطا دهد.