سفارش تبلیغ
صبا ویژن
هرکس خود را نشناسد، به غیر خود نادان ترباشد . [امام علی علیه السلام]

علمی ،آموزشی،تحقیقاتی

حلقه ها در سی شارپ :

مقدمه :

اگر نیاز باشد تا قطعه ای از کد بیش از یک بار اجرا شود نیاز به استفاده از حلقه ها می باشد. برای مثال فرض کنید آرایه ای به طول ???? تعریف کرده اید. اکنون می خواهید آن را با هزار عدد متوالی پرکنید. بدیهی است که روش زیر کارآمد نیست! :

int[] intData = new int[1000];
intData[0]=0;
.
.
.
intData[999]=1000;

نوشتن این خطوط متوالی احتمالا با کپی و پیست و اصلاح آن حداقل نیم ساعت طول می کشد! بنابراین نیاز به وسیله ای حس می شود که بتوان به وسیله ی آن امثال این گونه کارها را انجام داد.

تعریف حلقه ها و استفاده از آن ها :

برای تعریف حلقه ها ابزارهای متعددی مانند while, do , for , foreach وجود دارند. استفاده و انتخاب آن ها بستگی به سلیقه ی شما و منطق برنامه دارد. در هر حال یک مساله بدیهی است که همواره بیش از یک راه حل برای یک مساله وجود خواهد داشت.

استفاده از حلقه ی for :

عموما کدنویسی را با کد نویسی می توان آموخت! بنابراین در مورد انواع حلقه ها مثال هایی ارائه خواهد گردید.

یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آن را درابتدا ex07 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :

using System;

namespace ex07
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int[] intData = new int[1000];

for (int i=0 ; i<1000 ; i++ )
intData[i]=i;

for(int i=0 ; i< intData.Length ; i++)
{
int j = intData[i];
Console.WriteLine(”intData[" + i + "]=” + j);
}

Console.ReadLine();

}
}
}

توضیحاتی در مورد کد فوق :
?- برای تعریف حلقه ی for همان طور که می بینید باید تعداد بار اجرای حلقه ( اینجا از ? تا ??? است ) و هم چنین نحوه ی رسیدن از ? به ???? را مشخص کرد ( در این جا i++ است یعنی هر بار یک واحد به شمارشگر حلقه اضافه می شود. )
?- در زبان سی i++ یعنی i=i+1 و i– یعنی i=i-1 و کلا i-=n یعنی i=i-n و به همین ترتیب. برای مثال i*=n یعنی i=i*n و i+=n یعنی i=i+n و …
?- اگر پس از حلقه ی for یک خط کد داشته باشیم نیازی به آکولاد نیست (مانند قسمت اول کد). ولی اگر تعداد خطوط مربوط به بدنه ی for زیاد بود باید حتما از آکولاد استفاده شود (مانند قسمت دوم کد). (این قاعده ای کلی است در زبان های مشتق شده از زبان سی در مورد هر چیزی!)
?- فرض کنید در قسمت اول کد بالا بجای ???? می نوشتید ???? . سریعا با یک خطای زمان اجرا مواجه می شدید. زیرا می خواستید به عضوی از آرایه دسترسی پیدا کنید که تعریف نشده است. راه مدرن چک کردن این مسائل استفاده از خاصیت Length آرایه است که در قسمت دوم کد در عمل مشاهده می نمایید. همیشه از این روش استفاده کنید.
?- حلقه ی اول یعنی اینکه کار پر کردن آرایه intData را از صفر تا ??? یکی یکی (i++) انجام بده.

استفاده از حلقه ی while :
یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آن را درابتدا ex08 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :

using System;

namespace ex08
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int n = 1;

while (n < 6)
{
Console.WriteLine(”Current value of n is {0}”, n);
n++;
}

Console.ReadLine();
}
}
}

توضیحاتی در مورد کد فوق :
?- حلقه ی while در بالا کار انجام حلقه را تا هنگامی انجام می دهد که شرط ذکر شده در ابتدای آن صادق و برقرار باشد. یعنی در حلقه ی فوق تا وقتی n<6 است این حلقه ادامه خواهد یافت.
?- حلقه ی while صفر یا بیشتر بار ممکن است اجرا شود.
?- در کد فوق از {?} استفاده گردیده است. متد WriteLine به شما این اجازه را می دهد که n تا آرگومان برای آن تعریف کنید و مقادیر هر کدام را که خواستید در کد نمایش دهید از {x} استفاده کنید. در این مورد مقدار آرگومان x ام نمایش داده می شود.

استفاده از حلقه ی do :

یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آن را درابتدا ex09 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :

using System;

namespace ex09
{

class Class1
{
[STAThread]
static void Main(string[] args)
{
int x;
int y = 0;

do
{
x = y++;
Console.WriteLine(x);

}while(y < 5);

Console.ReadLine();

}
}
}

توضیحاتی در مورد کد فوق :
?- این حلقه به حلقه ی do…while معروف است و هر دو جزء آن باید ذکر گردد.
?- این حلقه تا زمانی که شرط ذکر شده در قمست while صحیح است ادامه می یابد.
?- این حلقه در ابتدای کار بدون توجه به قسمت while حداقل یک بار اجرا می شود. (مثال زیر را اجرا نمایید)

int n = 10;
do
{
Console.WriteLine(”Current value of n is {0}”, n);
n++;
} while (n < 6);

استفاده از حلقه ی foreach :

یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آن را درابتدا ex10 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :

using System;

namespace ex10
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int odd = 0, even = 0;
int[] arr = new int [] {0,1,2,5,7,8,11};

foreach (int i in arr)
{
if (i%2 == 0)
even++;
else
odd++;
}

Console.WriteLine(
“Found {0} Odd Numbers, and {1} Even Numbers.”,
odd, even) ;

Console.ReadLine();

}
}
}

توضیحاتی در مورد کد فوق :
?- از foreach برای حرکت در بین اعضای یک آرایه (مانند مثال بالا) و یا مجموعه ایی از اشیاء استفاده می شود (روشی شکیل ، مدرن و مطمئن! و تقریبا به ارث رسیده از ویژوال بیسیک!!).
?- در زبان های مشتق شده از C ، عملگر % ، باقیمانده را محاسبه می کند.
?- در کد فوق با استفاده از حلقه ی foreach تک تک اعضای آرایه در مورد زوج و یا فرد بودند مورد بررسی قرار گرفته اند و تعداد اعضای زوج و فرد در آخر نمایش داده می شود

دو مورد تکمیلی در مورد حلقه ها در سی شارپ :

?- هر جایی خواستید به هر دلیلی حلقه را پایان دهید می توانید از دستور break; استفاده کنید. در این حالت به صورت آنی حلقه خاتمه یافته و کدهای ادامه ی برنامه پس از حلقه اجرا می شوند.
?- نحوه ی استفاده از دستور continue : فرض کنید حلقه ی شما در راند ?? خودش است! حالا در این راند شما می خواهید یک سری از دستورات درون حلقه اجرا نشوند و حلقه به راند بعدی منتقل شده و کارش را ادامه دهد. این جا است که از دستور continue استفاده می شود. بهتر است به یک مثال ساده در این زمینه توجه کنیم.

مثال : یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آن را درابتدا ex11 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :

using System;

namespace ex11
{
class Class1
{
[STAThread]
static void Main(string[] args)
{

Console.WriteLine(
“for (int i = 1; i <= 100; i++) -> break at i==5? );
for (int i = 1; i <= 100; i++)
{
if (i == 5)
break;
Console.WriteLine(i);
}
Console.ReadLine();

Console.WriteLine(
“for (int i = 1; i <= 10; i++) -> continue if i<9? );
for (int i = 1; i <= 10; i++)
{
if (i < 9)
continue;
Console.WriteLine(i);
}
Console.ReadLine();

}
}
}

موارد تکمیلی مربوط به رد و بدل کردن مقادیر به/از کلاس ها :

در قسمت بعدی می خواهیم خاصیتی را تعریف کنیم که یک مقدار را از کاربر می گیرد و در برنامه می توان توسط قسمت های دیگر از آن استفاده کرد.

ابتدا یک متغیر عمومی باید در سطح کلاس تعریف کرد تا مقدار دریافت شده توسط set را در خود نگاه داری کند (در مورد scope متغیرها ( متغیرهای عمومی و محلی و امثال این ها) در هنگام معرفی توابع بیشتر بحث خواهد شد) . سپس از طریق کلمه ی کلیدی value مقدار دریافت شده به متغیر انتساب می یابد و چون در سطح کلاس عمومی است در تمام کلاس قابل درسترسی است.

مثال : یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آن را درابتدا ex12 انتخاب نمایید. سپس از منوی پروژه یک کلاس جدید به آن اضافه نمایید (به نام clsDate) و کد زیر را درون آن بنویسید :

using System;

namespace ex12
{
public class clsDate
{
private int Year;

public clsDate()
{
}

public int setYear
{
set
{
Year = value;
}
}

public bool IsLeapYear
{
get
{
return System.DateTime.IsLeapYear(Year);
}
}

}
}

برای استفاده از آن در متد main برنامه به صورت زیر عمل می کنیم:

using System;

namespace ex12
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
clsDate m_var = new clsDate();

m_var.setYear = 1990;

if (m_var.IsLeapYear)
Console.WriteLine(”1990 is a leap year.”);
else
Console.WriteLine(”1990 is not a leap year.”);

Console.ReadLine();
}
}
}

توضیحاتی در مورد کد فوق:

?- نحوه ی تعریف متغیر از یک کلاس جزو اساسی ترین قسمت های کار با یک کلاس محسوب می شود که در قسمت های پیشین نیز معرفی گردید.
?- هنگامی که از if استفاده می کنیم لزومی ندارد حتما بنویسیم m_var.IsLeapYear==true . همین که این خاصیت ذکر می شود در وهله ی اول true بودن آن چک خواهد شد.
?- نحوه ی مقدار دهی به یک خاصیت را هم در کد فوق ملاحظه می نمایید. در هنگام استفاده از خاصیت ها نیازی به آوردن پرانتزها () در مقابل نام آن ها وجود ندارد.
?- برای مرور ، نحوه ی معرفی خاصیت ها با get نیز بیان گردید. با استفاده از set و get می توان به کلاس ها ، مقادیر متغیرها را پاس کرد و یا مقداری را دریافت نمود.




مژده فرجی ::: سه شنبه 87/10/24::: ساعت 3:36 عصر

>> بازدیدهای وبلاگ <<
بازدید امروز: 8


بازدید دیروز: 5


کل بازدید :59383
 
 >>اوقات شرعی <<
 
>> درباره خودم<<
مدیر وبلاگ : مژده فرجی[85]
نویسندگان وبلاگ :
سمانه طالبی (@)[0]

مژده فرجی (@)[0]


 
 
>>موسیقی وبلاگ<<
 
>>اشتراک در خبرنامه<<
 
 
>>طراح قالب<<