Vahid_Nasiri
جمعه 17 مرداد 1382, 01:36 صبح
حلقه ها در سی شارپ :
مقدمه :
اگر نیاز باشد تا قطعه ای از کد بیش از یکبار اجرا شود نیاز به استفاده از حلقه ها می باشد. برای مثال فرض کنید آرایه ای به طول 1000 تعریف کرده اید. اکنون می خواهید آنرا با هزار عدد متوالی پرکنید. بدیهی است که روش زیر کارآمد نیست! :
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();
}
}
}
توضیحاتی در مورد کد فوق :
1- برای تعریف حلقه ی for همانطور که می بینید باید تعداد بار اجرای حلقه ( اینجا از 0 تا 999 است ) و همچنین نحوه ی رسیدن از 0 به 1000 را مشخص کرد ( در اینجا i++ است یعنی هر بار یک واحد به شمارشگر حلقه اضافه می شود. )
2- در زبان سی i++ یعنی i=i+1 و i-- یعنی i=i-1 و کلا i-=n یعنی i=i-n و به همین ترتیب. برای مثال i*=n یعنی i=i*n و i+=n یعنی i=i+n و ...
3- اگر پس از حلقه ی for یک خط کد داشته باشیم نیازی به آکولاد نیست (مانند قسمت اول کد). ولی اگر تعداد خطوط مربوط به بدنه ی for زیاد بود باید حتما از آکولاد استفاده شود (مانند قسمت دوم کد). (این قاعده ای کلی است در زبانهای مشتق شده از زبان سی در مورد هر چیزی!)
4- فرض کنید در قسمت اول کد بالا بجای 1000 می نوشتید 1001 . سریعا با یک خطای زمان اجرا مواجه می شدید. زیرا می خواستید به عضوی از آرایه دسترسی پیدا کنید که تعریف نشده است. راه مدرن چک کردن این مسائل استفاده از خاصیت Length آرایه است که در قسمت دوم کد در عمل مشاهده می نمایید. همیشه از این روش استفاده کنید.
5- حلقه ی اول یعنی اینکه کار پر کردن آرایه intData را از صفر تا 999 یکی یکی (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();
}
}
}
توضیحاتی در مورد کد فوق :
1- حلقه ی while در بالا کار انجام حلقه را تا هنگامی انجام می دهد که شرط ذکر شده در ابتدای آن صادق و برقرار باشد. یعنی در حلقه ی فوق تا وقتی n<6 است این حلقه ادامه خواهد یافت.
2- حلقه ی while صفر یا بیشتر بار ممکن است اجرا شود.
3- در کد فوق از {0} استفاده گردیده است. متد 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();
}
}
}
توضیحاتی در مورد کد فوق :
1- این حلقه به حلقه ی do…while معروف است و هر دو جزء آن باید ذکر گردد.
2- این حلقه تا زمانی که شرط ذکر شده در قمست while صحیح است ادامه می یابد.
3- این حلقه در ابتدای کار بدون توجه به قسمت 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();
}
}
}
توضیحاتی در مورد کد فوق :
1- از foreach برای حرکت در بین اعضای یک آرایه (مانند مثال بالا) و یا مجموعه ایی از اشیاء استفاده می شود (روشی شکیل ، مدرن و مطمئن! و تقریبا به ارث رسیده از ویژوال بیسیک!!).
2- در زبانهای مشتق شده از C ، عملگر % ، باقیمانده را محاسبه می کند.
3- در کد فوق با استفاده از حلقه ی foreach تک تک اعضای آرایه در مورد زوج و یا فرد بودند مورد بررسی قرار گرفته اند و تعداد اعضای زوج و فرد در آخر نمایش داده می شود.
مقدمه :
اگر نیاز باشد تا قطعه ای از کد بیش از یکبار اجرا شود نیاز به استفاده از حلقه ها می باشد. برای مثال فرض کنید آرایه ای به طول 1000 تعریف کرده اید. اکنون می خواهید آنرا با هزار عدد متوالی پرکنید. بدیهی است که روش زیر کارآمد نیست! :
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();
}
}
}
توضیحاتی در مورد کد فوق :
1- برای تعریف حلقه ی for همانطور که می بینید باید تعداد بار اجرای حلقه ( اینجا از 0 تا 999 است ) و همچنین نحوه ی رسیدن از 0 به 1000 را مشخص کرد ( در اینجا i++ است یعنی هر بار یک واحد به شمارشگر حلقه اضافه می شود. )
2- در زبان سی i++ یعنی i=i+1 و i-- یعنی i=i-1 و کلا i-=n یعنی i=i-n و به همین ترتیب. برای مثال i*=n یعنی i=i*n و i+=n یعنی i=i+n و ...
3- اگر پس از حلقه ی for یک خط کد داشته باشیم نیازی به آکولاد نیست (مانند قسمت اول کد). ولی اگر تعداد خطوط مربوط به بدنه ی for زیاد بود باید حتما از آکولاد استفاده شود (مانند قسمت دوم کد). (این قاعده ای کلی است در زبانهای مشتق شده از زبان سی در مورد هر چیزی!)
4- فرض کنید در قسمت اول کد بالا بجای 1000 می نوشتید 1001 . سریعا با یک خطای زمان اجرا مواجه می شدید. زیرا می خواستید به عضوی از آرایه دسترسی پیدا کنید که تعریف نشده است. راه مدرن چک کردن این مسائل استفاده از خاصیت Length آرایه است که در قسمت دوم کد در عمل مشاهده می نمایید. همیشه از این روش استفاده کنید.
5- حلقه ی اول یعنی اینکه کار پر کردن آرایه intData را از صفر تا 999 یکی یکی (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();
}
}
}
توضیحاتی در مورد کد فوق :
1- حلقه ی while در بالا کار انجام حلقه را تا هنگامی انجام می دهد که شرط ذکر شده در ابتدای آن صادق و برقرار باشد. یعنی در حلقه ی فوق تا وقتی n<6 است این حلقه ادامه خواهد یافت.
2- حلقه ی while صفر یا بیشتر بار ممکن است اجرا شود.
3- در کد فوق از {0} استفاده گردیده است. متد 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();
}
}
}
توضیحاتی در مورد کد فوق :
1- این حلقه به حلقه ی do…while معروف است و هر دو جزء آن باید ذکر گردد.
2- این حلقه تا زمانی که شرط ذکر شده در قمست while صحیح است ادامه می یابد.
3- این حلقه در ابتدای کار بدون توجه به قسمت 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();
}
}
}
توضیحاتی در مورد کد فوق :
1- از foreach برای حرکت در بین اعضای یک آرایه (مانند مثال بالا) و یا مجموعه ایی از اشیاء استفاده می شود (روشی شکیل ، مدرن و مطمئن! و تقریبا به ارث رسیده از ویژوال بیسیک!!).
2- در زبانهای مشتق شده از C ، عملگر % ، باقیمانده را محاسبه می کند.
3- در کد فوق با استفاده از حلقه ی foreach تک تک اعضای آرایه در مورد زوج و یا فرد بودند مورد بررسی قرار گرفته اند و تعداد اعضای زوج و فرد در آخر نمایش داده می شود.