عملگر هاي And و Or منطقي #C
در بعضي از شرايط ممكن است بخواهيد به جاي يك شرط، چند شرط را در دستور if بررسي كنيد . براي مثال مي خواهيـد بدانيـدآيا intNumber بزرگتر از 27 و كوچكتر از 10 است يا نه و يا ميخواهيد بدانيد آيا strName برابر “Sydney” و يا”Stephanie” است يا نه . در اين موارد ميتوانيد شرطهاي درون دستور if را به وسيله عملگ ر هاي And و Or منطقيتركيب كنيد . در امتحان كنيد بعد، روش استفاده از عملگر Or را خواهيم ديد . نتيجه تركيب چند شرط به وسـيله ايـن عملگـر فقـطهنگامي درست كه حداقل يكي از شروط برابر با درست باشد .
)1 برنامه ويندوزي جديدي به نام And Or Demo ايجاد كنيد .
)2 در قسمت طراحي فرم مربوط به Form1 دو كنترل TextBox و يك كنترل Button اضافه كنيـد . خاصـيتName مربوط به كنترلهاي TextBox را برابر txtName1 و txtName2 و خاصـيت Name كنتـرلButton را برابر btnOrCheck قرار دهيد.
)3 خاصيت Text مربوط به TextBox اول را برابر Sydney و TextBox دوم را برابـر Stephanieقرار دهيد. در آخر خاصيت Text كنترل Button را برابر Or Check قرار دهيد. بعد از ايـن تنظيمـات فـرم شما بايد مشابه شكل 4-6 باشد.
در مقابل عملگر هاي And و Or منطقي، عملگر هاي And و Or بيتي نيز وجود دارند كه براي ايجاد تغييرات روي بيتها به كار مي روند .
4 -روي دكمه Or Check دو بار كليك كنيد و كد زير را در رويداد Click آن وارد كنيد.
private void btnOrCheck_Click(object sender, EventArgs e)
{
// Declare variables
string strName1 , strName2;
// Get the names
strName1 = txtName1.Text;
strName2 = txtName2.Text;
// Is one of the names Sydney?
if (strName1 == “Sydney” || strName2 == “Sydney”)
MessageBox.Show(“One of the names is Sydney.”,
“And Or Demo”);
else
MessageBox.Show(“Neither of the names is
Sydney.”, “And Or Demo”);
}
)5 برنامه را اجرا كنيد و روي دكمه Or Check كليك كنيد. كادر پيغامي را مشابه شكل 4-7 مشاهده خواهيد كرد .
)6 روي دكمه OK بر روي كادر پيغام كليك كنيد تا به فـرم اصـلي برگرديـد . حـال مـتن داخـل TextBox اول را بـهStephanie و متن جعبه متني دوم را به Sydney تغيير دهيد. مجـددا روي دكمـه Or Check كليـك كنيد. كادر پيغامي را مشاهده خواهيد كرد كه مي گويد يكي از TextBoxها شامل Sydney است .
)7 مجددا روي OK كليك كنيد و در صفحه اصلي متن هاي داخل صفحه را به گونه اي تغيير دهيد كـه هـيچ يـك از آنهـاشامل Sydney نباشد و روي دكمه Or Check كليك كنيد. كادر پيغامي را مشاهده خواهيد كرد كه مـي گويـدهيچ يك از آنها شامل Sydney نيست.
عملگر || در #C به عنوان “يا” منطقي استفاده مي شود و معمولاً در بررسي شرط ها، براي تركيب دو شرط متفاوت از هم به كارمي رود . در رويداد Click، ابتدا دو متغيير تعريف مي كنيم و سپس مقاديري كه كاربر در TextBox ها وارد كـرده اسـت راآنها قرار مي دهيم .
// Declare variables
string strName1 , strName2;
// Get the names
strName1 = txtName1.Text;
strName2 = txtName2.Text;
همانطور كه ميبينيد در اين قسمت هر د وي متغيير ها در يك خط تعريف شده اند. در #C اگر بخواهيد چند متغيير از يك نوع داشـتهباشيد، مي توانيد همه آنها را همانند كد بالا در يك خط تعريف كنيد و فقط بايد نام آنها را با ويرگول از هم جدا كنيد . اين مورد باعثمي شود كه كد برنامه فشرده تر شود و تفاوتي با تعريف متغيير ها در خطهاي جداگانه ندارد .حال كه هر دو نام را از داخل TextBoxها به دست آورديد، ميتوانيد آنها را در يك شرط if با استفاده از عملگـر || تركيـبكنيد. در اين حالت سوالي كه شما در بخش شرط if ايجاد مي كنيد به صورت “آيا مقدار strName1 برابـر بـا Sydneyاست و يا مقدار strName2 برابر با Sydney است؟ ” خواهد بود . در اين حالت مقدار هر يك از اين متغيير ها كـه برابـر بـاSydney باشد موجب ميشود كه پاسخ سوال برابر با true و يا درست باشد .
// Is one of the names Sydney?
if (strName1 == “Sydney” || strName2 == “Sydney”)
MessageBox.Show(“One of the names is Sydney.”,
“And Or Demo”);
else
MessageBox.Show(“Neither of the names is
Sydney.”, “And Or Demo”);
استفاده از عملگر And منطقي :
اين عملگر هم مانند عملگر Or منطقي است به جز اينكه براي درست بودن شرط آن، بايد تك تك شرط ها درست ارزيـابي شـوند .علامت اين عملگر در #C به صورت && است .
)1 كنترل Button ديگـري بـه فـرم اضـافه كنيـد، خاصـيت Name آن را برابـر btnAndCheck و خاصـيتText آن را برابر And Check قرار دهيد. سپس بر روي اين كنترل دو بار كليك كرده و كد مـشخص شـده درزير را در آن وارد كنيد :
private void btnAndCheck_Click(object sender, EventArgs e)
{
// Declare variables
string strName1, strName2;
// Get the names
strName1 = txtName1.Text;
strName2 = txtName2.Text;
// Are both names Sydney?
if( strName1 ==”Sydney” && strName2 ==”Sydney”)
MessageBox.Show(“Both names are Sydney.”,
“And Or Demo”);
else
MessageBox.Show(“One of the names is not” +
“Sydney.”,”And Or Demo”);
}
)2 برنامه را اجرا كنيد و روي دكمه And Check كليك كنيد. كـادر پيغـامي را خواهيـد ديـد كـه مـي گويـد يكـي ازTextBoxها شامل Sydney نيست .
)3 البته اگر متن داخل هر دو TextBox را به Sydney تغيير دهيد، نتيجه اي مشابه شكل 4-8 را خواهيد ديد.
4-8 شكل
بعد از اينكه نامهاي موجود در TextBox را بد ست آورديد، آنها را با هم مقايسه مي كنيد. در اينجا با استفاده از عملگر && ميپرسيد “آيا strName1 برابر با Sydney و strName2 برابر با Sydneyاست؟”. واضح است جـواب ايـن سـوالهنگامي درست است كه هر دو TextBox محتوي كلمه Sydney باشند .
// Are both names Sydney?
if( strName1 ==”Sydney” && strName2 ==”Sydney”)
MessageBox.Show(“Both names are Sydney.”,
“And Or Demo”);
else
MessageBox.Show(“One of the names is not” +
“Sydney.”,”And Or Demo”);
مطالب بيشتر در رابطه با عملگر هاي And و Or منطقي
تاكنون با نحوه استفاده از عملگر هاي And و Or در رشته ها آشنا شده ايد، اما ميتوانيد اين عملگر ها را با اعداد نيز همانند زير بهكار ببريد :
if( intX == 2 && dblY == 2.3)
MessageBox.Show(“Hello, the conditions has been”
+ “satisfied!”);
if( intX == 2 || dblY == 2.3)
MessageBox.Show(“Hello, the conditions have been”
+ “satisfied!”);
همچنين در استفاده از عملگر هاي And و Or در يك دستور if هيچ محدوديتي نيست. به عبارت ديگر، ميتوانيد در برنامه خـوددستوري مشابه زير داشته باشيد :
if( intA == 1 && intB == 2 && intC == 3 && intD == 4 &&
intE == 5 && intF == 6 && intG == 7 && intH == 1 &&
intI == 2 && intJ == 3 && intK == 4 && intL == 5 &&
intM == 6 && intN == 7 && intO == 1 && intP == 2 &&
intQ == 3 && intR == 4 && intS == 5 && intT == 6 &&
intU == 7 && intV == 1 && intW == 2 && intX == 3 &&
intY == 4 && intZ == 5)
MessageBox.Show(“That’s quite an If statement!”);
البته بايد توجه داشته باشيد كه استفاده زياد از اين عملگر ها از خوانايي برنامه مي كاهد و درك آن را مشكل تر مي كند . پس تا حـدامكان بايد از شرطهاي كمتر در دستور if خود استفاده كنيد .همچنين ميتوانيد از چند عملگر And و Or در شرط خود استفاده كنيد . در اين مواقع م ي توانيد با استفاده از پرانتزها اين عملگر هارا دسته بندي كنيد . براي مثال مي خواهيد اگر مقدار متغييري بين 10 تا 20 و يا بين 25 تا 30 باشد، دستورات داخل شرط اجرا شوند.در اين صورت مي توانيد از دستور if زير استفاده كنيد :
if( (intX > 10 && intX < 20) || (intX > 25 && intX < 30))
حالتهاي مختلفي براي تركيب عملگرها در هر زبان برنامه نويسي وجود دارد و تعداد آنها بيشتر از آن است كه بتوانيم آنهـا را در ايـنكتاب عنوان كنيم . اما بدانيد كه هر شرطي را كه بخواهيد بررسي كنيد يك تركيب از اين عمگرها وجود دارد كه نياز شـما ر ا برطـرف.كند
مقايسه رشته ها :
معمولا هنگامي كه در دستورات if رشته ها را با يكديگر مقايسه مي كنيد، به علت حساسيت برنامه به حروف كوچك و بـزرگ بـامشكل مواجه مي شويد . با وجود اينكه هر دو كاراكتر “a” و “A” براي انسانها يك معني را دارند و يكسان تلقي مي شـوند، امـادر كامپيوتر دو كاراكتر مجزا از يكديگر هستند . اين مورد به عنوان حساسيت به نوع حروف شناخته مي شود . براي مثال اگر كد زير رادر برنامه خود اجرا كنيد، كادر پيغام نمايش داده نخواهد شد :
string strName = “winston”;
if (strName == “WINSTON”)
MessageBox.Show(“Aha! you are Winston!”);
همانطور كه ممكن است حدس زده باشيد، كلمه WINSTON كه با حروف بزرگ اسـت بـا مقـدار متغييـر strName كـه بـاحروف كوچك است تفاوت دارد و شرط اجرا نخواهد شد . اما در بيشتر مواقع شما نمي خواهيد رشته ها را به اين صورت بررسي كنيـد،پس بايد راهي را پيدا كنيد كه آنها را به حالت عادي و بدون در نظر گرفتن نوع حروف مقايسه كنيد . در امتحان كنيد بعدي، روشي رابراي اين كار مشاهده خواهيم كرد :
مقايسه رشته ها بدون در نظر گرفتن نوع حروف
)1 قسمت طراحي فرم را براي Form1 باز كنيد و كنترل Button ديگري را به فرم اضافه كنيـد . خاصـيت Nameدكمه فرمان را برابر btnStringCompare و خاصـيت Text آن را برابـر Compare Stringقرار دهيد .
)2 روي كنترل Button دو بار كليك كنيد و كد زير را در متد مربوط به رويداد Click آن وارد كنيد:
private void btnStringCompare_Click(object sender,
EventArgs e)
١٢٧
{
// Declare variable
string strName;
// Get the name
strName = txtName2.Text;
// Compare the name
if (String.Compare(strName, “STEPHANIE”, True) == 0)
MessageBox.Show(“Hello, Stephanie!”,
“And Or Demo”);
}
)3 برنامه را اجرا كنيد و روي دكمه اي كه جديدا اضافه كرديد كليك كنيد . نتيجه اي مشابه شكل 4-9 را مـشاهده خواهيـد.كرد
4-9 شكل
)4 روي دكمه OK كليك كنيد و در TextBox عبارتي را مانند STePHaniE يا هـر تركيـب ديگـري از آن واردكنيد. سپس روي دكمه String Compare كليك كنيد. مشاهده ميكنيد كه كادر پيغـام قـسمت قبـل مجـددانمايش داده خواهد شد .
همانطور كه در كد مشاهده مي كنيد بعد از اينكه اسم نوشته شده در TextBox را در متغييـر قـرار داديـم، بـه جـاي اسـتفاده ازعملگر == براي مقايسه آنها، از تابع Compare در System.String استفاده ميكنيم. اين تابع سه پارامتر را به عنوانورودي دريافت مي كند . پارامتر اول و دوم رشته هايي هستند كه بايد با يكديگر مقايسه شوند .
در اين مثال بـراي پـارامتر اول مقـداردرون متغيير strName و براي پارامتر دوم ثابت رشته اي “STEPHANIE” را فرستاده ايم . پارامتر سوم هـم بـراي تـابعمشخص مي كند كه در هنگام مقايسه، نوع حروف را ناديده بگيرد يا نه . در اينجا مقدار true به اين معني است كـه بزرگـي و يـاكوچكي حروف به وسيله تابع ناديده گرفته شوند . اگر مقدار اين پارامتر را برابر با false قرار دهيد، عملكرد اين تابع دقيقا مـشابهاستفاده از عملگر == خواهد بود .
// Compare the name
if (String.Compare(strName, “STEPHANIE”, True) == 0)
MessageBox.Show(“Hello, Stephanie!”,
“And Or Demo”);
نتيجه اي كه به وسيله اين تابع برگردانده مي شود مقداري عجيب است . اين تابع به جاي مقدار true و يا false، يك عـددصحيح را به عنوان نتيجه برمي گرداند . در حقيقت اين تابع علاوه بر مشخص كردن برابري و يا نابرابري دو رشته، مي تواند مشخص كند كه در صورت نابرابري آنها كداميك بزرگتر مي باشند . اگر مقدار صفر توسط تابع برگردانده شد به اين معني است كه دو رشته بـ اهم برابرند، اگر عدد منفي برگردانده شود يعني رشته اول كوچكتر از رشته دوم است و عدد مثبت نيز به اين معني است كه رشـته اول بزرگتر از رشته دوم است. از اين اعداد ميتوان براي نوشتن الگوريتم هاي مرتب سازي و يا جستجو استفاده كرد