سفارش تبلیغ
صبا ویژن
[ و ابو جعفر محمد بن على باقر از او ( ع ) حکایت کرد که فرمود : ] دو چیز در زمین مایه أمان از عذاب خدا بود ، یکى از آن دو برداشته شد پس دیگرى را بگیرید و بدان چنگ زنید : امّا امانى که برداشته شد رسول خدا ( ص ) بود . و امّا امانى که مانده است آمرزش خواستن است . خداى تعالى فرماید « و خدا آنان را عذاب نمى‏کند حالى که تو در میان آنانى و خدا عذابشان نمى‏کند حالى که آمرزش مى‏خواهند » [ و این از نیکوتر لطایف معنى را برون آوردن است و ظرافت سخن را آشکار کردن . ] [نهج البلاغه]

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

مبحث overloading :

گاهی از اوقات لازم است تا نگارش های مختلفی از یک تابع داشته باشیم. برای مثال تعریف سه تابع با یک نام اما با آرگومان های مختلف. به این نوع توابع و یا متدها اصطلاحا Overloaded Methods می گویند . ( فکر کنم آن را سربارگذاری توابع ترجمه کرده اند! ) برای مثال :

void myMethod(int p1);
void myMethod(int p1, int p2);
void myMethod(int p1, string s1);

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

using System;

namespace ex18
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
writeIT();

writeIT(12);

Console.ReadLine();
}

public static void writeIT()
{
Console.WriteLine(” writeIT() Ver.” );
}

public static void writeIT(int intI)
{
Console.WriteLine(” writeIT(intI) Ver. = ” + intI );
}

}
}

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

?- نحوه ی تعریف دو تابع با یک نام را ملاحظه می نمایید. این کار در زبان سی ممنوع است!
?- کامپایلر به صورت هوشمند بر اساس نوع و تعداد آرگومان های ورودی ، ورژن مناسب را انتخاب و اجرا می کند.

نمونه ی ضعیفی از این بحث در وی بی ? به صورت تعریف توابعی با پارامترهای Optional وجود داشت .

مباحث تکمیلی آرایه ها (آرایه های چند بعدی):

آرایه های معمولی (یک بعدی) را می توان یک ردیف با تعدادی خانه خالی آماده ی پر شدن در نظر گرفت. آرایه ی دوبعدی را می توان مانند یک جدول تشکلیل شده از ردیف ها و ستون ها در نظر گرفت و الی آخر…
سی شارپ دو نوع آرایه ی چند بعدی را پشتیبانی می کند : rectangular and jagged
در یک آرایه ی rectangular هر ردیف ، طولش با ردیف بعدی یکی است. آرایه ی jagged در حقیقت آرایه ایی از آرایه ها است ، بنابراین هر کدام از آن ها می تواند طول مختلفی داشته باشد.

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

type [,] array-name

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

using System;

namespace ex19
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
const int rows = 4;
const int columns = 3;
// declare a 4×3 integer array
int[,] rectangularArray = new int[rows, columns];
// populate the array
for (int i = 0;i < rows;i++)
{
for (int j = 0;j {
rectangularArray[i,j] = i+j;
}
}
// report the contents of the array
for (int i = 0;i < rows;i++)
{
for (int j = 0;j
{
Console.WriteLine(”rectangularArray[{0},{1}] = {2}”,
i,j,rectangularArray[i,j]);
}
}

Console.ReadLine();
}
}
}


توضیحاتی در مورد کد فوق :
?- نحوه ی تعریف ، مقدار دهی اولیه و استفاده از آرایه های دو بعدی را در مثال فوق ملاحظه می نمایید.
?- در یک آرایه ی دوبعدی محل قرار گیری ردیف ها و ستون ها برای مثال به صورت زیر است :

new int[rows, columns]-

استفاده از آرایه های چند بعدی :

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

using System;

namespace ex20
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
const int rows = 4;
const int columns = 3;
// imply a 4×3 array
int[,] rectangularArray =
{
{0,1,2},
{3,4,5},
{6,7,8},
{9,10,11}
};
for (int i = 0;i < rows;i++)
{
for (int j = 0;j {
Console.WriteLine(”rectangularArray[{0},{1}] = {2}”,
i,j,rectangularArray[i,j]);
}
}
}
}
}

توضیحاتی در مورد کد فوق :
?- در حقیقت مثال فوق تعریف آرایه ایی از آرایه ها بود.
?- چون مقدار دهی اولیه به صورت واضحی انجام شده نیازی به ذکر ابعاد آرایه به صورت صحیح وجود نداشت

 

 آرایه ای از آرایه ها است و هما ن طور
که ذکر شد لزومی ندارد که هر ردیف آن با ردیف بعدی هم طول باشد .
هنگام تعریف این نوع آرایه شما تعداد ردیف ها را مشخص می نمایید. هر ردیف
یک آرایه را نگه داری می کند. در اینجا هر آرایه باید تعریف شود.
روش تعریف Jagged array به صورت زیر است

type [] []…


در اینجا
تعداد براکت ها بیانگر ابعاد آرایه می باشد. برای مثال آرایه ی زیر دو
بعدی است :

int [] [] myJaggedArray;

و
برای مثال برای دسترسی به پنجمین عنصر آرایه ی سوم به صورت زیر عمل می
شود :

myJaggedArray[2][4]

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

using System;

namespace ex21

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

const int rows = 4;
// declare
the jagged array as 4 rows high
int[][] jaggedArray = new
int[rows][];
// the first row has 5 elements
jaggedArray[0]
= new int[5];
// a row with 2 elements
jaggedArray[1] = new
int[2];
// a row with 3 elements
jaggedArray[2] = new
int[3];
// the last row has 5 elements
jaggedArray[3] = new
int[5];
// Fill some (but not all) elements of the rows

jaggedArray[0][3] = 15;
jaggedArray[1][1] = 12;

jaggedArray[2][1] = 9;
jaggedArray[2][2] = 99;

jaggedArray[3][0] = 10;
jaggedArray[3][1] = 11;

jaggedArray[3][2] = 12;
jaggedArray[3][3] = 13;

jaggedArray[3][4] = 14;
for (int i = 0;i < 5; i++)
{

Console.WriteLine(”jaggedArray[0][{0}] = {1}”,

i,jaggedArray[0][i]);
}
for (int i = 0;i < 2; i++)

{
Console.WriteLine(”jaggedArray[1][{0}] = {1}”,

i,jaggedArray[1][i]);
}
for (int i = 0;i < 3; i++)

{
Console.WriteLine(”jaggedArray[2][{0}] = {1}”,

i,jaggedArray[2][i]);
}
for (int i = 0;i < 5; i++)

{
Console.WriteLine(”jaggedArray[3][{0}] = {1}”,

i,jaggedArray[3][i]);
}

Console.ReadLine();

}
}
}

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

هنگام کار با آرایه های rectangular برای درسترسی به اعضا به
صورت زیر عمل می شد :

rectangularArrayrectangularArray[i,j]

اما در این جا بدین صورت است :

jaggedArray[3][i]

استفاده
از System.Array :

دات نت فریم ورک کلاسی را معرفی کرده است به نام
Array. توسط این کلاس کار با آرایه ها و اعمال روی آن ها برای مثال
سورت کردن و غیره به شدت ساده می شود .

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

using System;

namespace ex22

{
class Class1
{
public static void
PrintMyArray([] theArray)
{
foreach ( obj in
theArray)
{
Console.WriteLine(”Value: {0}”, obj);
}

Console.WriteLine(”\n”);
}

[STAThread]
static
void Main(string[] args)
{
String[] myArray = {
“Who”,
“is”, “John”, “Galt”
};
PrintMyArray(myArray);

Array.Reverse(myArray);
PrintMyArray(myArray);
String[]
myOtherArray = {
“We”, “Hold”, “These”, “Truths”,
“To”,
“Be”, “Self”, “Evident” };

PrintMyArray(myOtherArray);

Array.Sort(myOtherArray);
PrintMyArray(myOtherArray);

Console.ReadLine() ;

}
}
}

توضیحاتی در مورد کد فوق :
از دو متد Sort و Reverse در
این جا برای سورت کردن و نمایش آرایه به ترتیب معکوس (از انتها به
ابتدا) استفاده گردیده است.

تعریف آرایه های دینامیک در سی
شارپ :

یکی از مشکلاتی که با آرایه های معمول وجود دارد این است که
قبل از هر کاری باید طول آْ ن ها را مشخص کرد. گاهی از اوقات ما
دقیقا نمی دانیم برنامه چه تعداد عضو را دریافت می کند تا آرایه ای از
پیش تعریف شده با همان تعداد عضو ایجاد کنیم. برای حل این مشکل از کلاس
ArrayList تعریف شده در دات نت فریم ورک می توان استفاده کرد.

هنگام استفاده از ArrayList نیازی به دانستن تعداد اعضایی که
باید اضافه شوند نمی باشد و با استفاده از متد Add آن به سادگی می توان
اعضاء را به آن اضافه نمود . تعدادی از خواص و متدهای این کلاس به صورت
زیر هستند :

Adapter , FixedSize , ReadOnly , Repeat ,
Synchronized , Capacity,Count , IsFixedSize , IsReadOnly ,
IsSynchronized , Item , SyncRoot , Add , AddRange , BinarySearch ,
Clear , Clone , Contains , CopyTo , GetEnumerator , GetRange ,
IndexOf , Insert , InsertRange , LastIndexOf , Remove , RemoveAt ,
RemoveRange , Reverse , SetRange , Sort , ToArray , TrimToSize

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

using System;
using
System.Collections;

namespace ex23
{
// a simple
class to store in the array
public class Employee
{

public Employee(int empID)
{
this.empID = empID;
}

public override string ToString( )
{
return
empID.ToString( );
}
public int EmpID
{
get
{

return empID;
}
set
{
empID = value;
}
}

private int empID;
}

class Class1
{

[STAThread]
static void Main(string[] args)
{

ArrayList empArray = new ArrayList( );
ArrayList
intArray = new ArrayList( );
// populate the array
for (int
i = 0;i<5;i++)
{
empArray.Add(new Employee(i+100));

intArray.Add(i*5);
}
// print all the contents
for
(int i = 0;i
{
Console.Write(”{0} “,
intArray[i].ToString( ));
}
Console.WriteLine(”\n”);
//
print all the contents of the button array
for (int i =
0;i
{
Console.Write(”{0} “,
empArray[i].ToString( ));
}
Console.WriteLine(”\n”);

Console.WriteLine(”empArray.Capacity: {0}”,

empArray.Capacity);

Console.ReadLine();

}
}

}

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

?- با کلمه ی
کلیدی override در قسمت های بعدی آشنا خواهیم شد.
?- برای استفاده
از ArrayList لازم بود تا فضای نامی را که این کلاس در آن تعریف شده
است ، به برنامه اضافه کرد.
?- در مثال فوق نحوه ی تعریف دو کلاس
را در یک فضای نام مشاهده می نمایید.
?- نحوه ی تعریف و مقدار دهی ArrayList و هم
چنین استفاده از خواص آن در مثال فوق بررسی شده است

هر کدی در سی شارپ قسمتی از یک کلاس می باشد و ترکیب تمام خواص و متدهای موجود در یک کلاس یک نوع داده ی جدید تعریف شده از طرف ما را پدید می آورد. هر متغیری که از کلاس ساخته شود ، شیء نامیده می شود و یک کپی منحصر به فرد است. برای مثال برنامه ی زیر را درنظر بگیرید :

using System;

class Data
{
public int x;
}
class App
{
public static void Main()
{
Data d1 = new Data();
d1.x = 1;
Data d2 = new Data();
d2.x = 2;
Console.WriteLine(”d1.x = {0}”, d1.x);
Console.WriteLine(”d2.x = {0}”, d2.x);
}
}

در این جا کلاس Data تعریف شده است و دارای یک عضو به نام x می باشد. به این نوع داده در کلاس فیلد گفته می شود و هنگامی که به صورت public معرفی می شود یعنی خارج از کلاس نیز قابل دسترسی است. در کد بالا دو متغیر از کلاس تعریف و مقدار دهی اولیه شده اند. خروجی برنامه به صورت زیر است :

d1.x = 1
d2.x = 2

دلیل این خروجی آن است که هر instance (نمونه) از کلاس منحصر بفرد است و در این جا نمی توان انتظار داشت که هر دو خروجی یکی شوند.

برای مقدار دهی اولیه متغیرهایی که به صورت فیلد تعریف می شوند ، بهتر است مقدار دهی آن ها را در سازنده ی کلاس (constructor) انجام دهیم.

class Data
{
public int x;
public Data(){x = 99;}
}

همان طور که پیشتر نیز ذکر شد ، متدی که هم نام کلاس است ، سازنده نام می گیرد. یک کلاس می تواند بیش از یک سازنده داشته باشد. برای مثال :

class Data
{
public int x;
private Data(){}
public Data(int y){x = y;}
public Data(int y, int z){x = y + z;}
}

از آنجایی که  سازنده ی بدون پارامتر ذکر شده در کد فوق private تعریف شده است بنابراین خارج از کلاس دیگر قابل دسترسی نمی باشد . بنابراین کدی خارج از کلاس ، تنها می تواند از دو سازنده ی دیگر استفاده کند. برای مثال تعریف دو متغیر جدید از این کلاس به صورت زیر می باشد :

Data d1 = new Data(44);
Data d2 = new Data(22, 33);

سی شارپ به شما اجازه می دهد تا سازنده ها را در یک کلاس توسط کلمه ی کلیدی this نیز فراخوانی کنید یعنی بجای ذکر نام متد سازنده از کلمه ی this استفاده شود ( در خود کلاس ) .

اگر می خواهید متغیری را بین نمونه (instance) های مختلف یک کلاس به اشتراک بگذارید کلمه ی کلیدی static وارد صحنه می شود. به مثال زیر توجه کنید :

using System;

class Counted
{
public static int count = 0;
public Counted()
{
count++;
}
public int GetInstanceCount()
{
return count;
}
}
class App
{
public static void Main()
{
Counted d1 = new Counted();
Console.WriteLine(”current total {0}”, d1.GetInstanceCount());
Counted d2 = new Counted();
Console.WriteLine(”current total {0}”, d2.GetInstanceCount());
Console.WriteLine(”total {0}”, Counted.count);
}
}

باید خاطر نشان کرد که متغیرهای استاتیک توسط نمونه های کلاس قابل دستیابی نیستند و فقط درون کلاس به شکل زیر می توان از آْن ها استفاده کرد :

.

در مثال فوق دو نمونه از کلاس Counted تعریف شده است. با هر بار فراخوانی کلاس ، خودبخود سازنده اجرا شده و یک عدد به این شمارشگر استاتیک اضافه می شود. همان طور که ذکر شد، برای این که بتوان به این متغیر استاتیک در خارج از کد دسترسی پیدا کرد یک متد غیر استاتیک تعریف شده است.

در مثال فوق تابع GetInstanceCount تنها یک عدد را بر می گرداند. در برنامه نویسی شیء گرا مرسوم است که در این حالت به جای توابع از خواص استفاده شود که به اندازه ی کافی در مورد آن ها در قسمت های قبل توضیح داده شد. در این صورت تعریف فوق به صورت زیر در می آید :

class Counted
{
public static int x = 0;
public Counted()
{
x++;
}
public int InstanceCount // property
{
get{return x;}
}
}

و در این صورت قسمت بعدی کد به صورت زیر اصلاح می شود (فراخوانی خواص ، بدون ذکر پرانتزها بعد از نام آن ها صورت می گیرد):

Counted d1 = new Counted();
Console.WriteLine(”current total {0}”, d1.InstanceCount);
Counted d2 = new Counted();
Console.WriteLine(”current total {0}”, d2.InstanceCount);

اگر یک خاصیت هم خواندنی و هم نوشتنی باشد به صورت زیر تعریف می شود :

private string name;
public string Name
{
get{return name;}
set{name = value;}
}

فیلدهای پابلیک را می توان خواند و یا تغییر داد. اگر لازم باشد تا کاربر نتواند آن ها را تغییر دهد می توان از کلمه ی کلیدی readonly قبل از تعریف آن ها استفاده کرد. مثال :

class Data
{
public readonly int x = 42;
}



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

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

مقدمه :

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

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 عصر

ظاهرا به نظر می رسد که توابع فقط می توانند یک return داشته باشند و بلافاصله پس از فراخوانی return کار تابع پایان یافته است. در سی شارپ دو کلمه ی کلیدی به نام های ref و out اضافه شده اند که این امر را ساده تر می کنند.


استفاده از کلمه ی کلیدی out :


از out در تعریف تابع قبل از معرفی نوع آرگومان ورودی استفاده می کنیم . در این حالت بجای اینکه به این آرگومان ، آرگومان ورودی بگوییم ، می توان آنرا آرگومان خروجی نامید. تا یک مثال را در این زمینه با هم مرور نکنیم این مورد مفهوم نخواهد بود :


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


using System;


namespace ex15
{
class Class1
{


public static int TestOut(out char i)
{
i = "b";
return -1;
}


[STAThread]
static void Main(string[] args)
{
char i; // variable need not be initialized
Console.WriteLine(TestOut(out i));
Console.WriteLine(i);
Console.ReadLine();


}
}
}


 

توضیحاتی در مورد کد فوق :
1- در تابع TestOut آرگومان i از با کلمه ی کلیدی out مشخص شده است. یعنی اینکه درون تابع هر گونه تغییری روی i انجام شود ، خارج از تابع قابل دسترسی است.
2- توابعی که دارای آرگومانهایی تعریف شده با کلمه ی کلیدی out هستند نیز می توانند از return هم استفاده کنند. همانند مثال فوق.


استفاده از کلمه ی کلیدی ref :


این کلمه ی کلیدی نیز دقیقا همانند out عمل می کند و نحوه ی تعریف و استفاده از آن نیز مشابه است با این تفاوت که آرگومانی که به این نوع توابع فرستاده می شود باید مقدار دهی اولیه شده باشد.


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


using System;


namespace ex16
{
class Class1
{
public static void FillArray(ref int[] arr)
{
// Create the array on demand:
if (arr == null)
arr = new int[10];
// Otherwise fill the array:
arr[0] = 123;
arr[4] = 1024;
}


[STAThread]
static void Main(string[] args)
{
// Initialize the array:
int[] myArray = {1,2,3,4,5};


// Pass the array using ref:
FillArray(ref myArray);


// Display the updated array:
Console.WriteLine("Array elements are:");
for (int i = 0; i < myArray.Length; i++)
Console.WriteLine(myArray[i]);


Console.ReadLine();
}
}
}


توضیحاتی در مورد کد فوق :
1- همانطور که ملاحظه می کنید در اینجا هنگام استفاده از تابع FillArray باید آرگومانی را که می خواهیم به آن پاس کنیم مقدار دهی اولیه کنیم.
2- پس می توان نتیجه گرفت آرگومانهایی که با out تعریف می شوند به صورت خالص خروجی هستند و نیازی به مقدار دهی اولیه هنگام استفاده از آنها وجود ندارد. از ref هنگامی استفاده می کنیم که بخواهیم روی متغیر موجود و مقدار دهی شده ی خارج از تابع ، درون تابع عملیاتی صورت گیرد و سپس همان متغیر دستکاری شده ، عودت داده شود.


تعریف تابعی با تعداد آرگومانهای نامعلوم :


گاهی از اوقات نیاز است تا تابعی تعریف کنیم که تعداد آرگومانهای آن متغیر باشند .برای این منظور از کلمه ی کلیدی params استفاده می شود.
دونکته در اینجا حائز اهمیت است:
1- در هر تابعی تنها می توان یکبار از params استفاده کرد.
2- پس از بکار بردن params دیگر نمی توان هیچ آرگومانی را تعریف کرد.


یکی از مثالهایی که در این زمینه می توان ارائه داد استفاده از آرایه ها به عنوان آرگومان ورودی است. در این حالت یا می توان یک آرایه را به صورت کامل به تابع معرفی کرد و یا تنها نام آنرا به تابع پاس کرد. مثال زیر را ملاحظه کنید :


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


using System;


namespace ex17
{
class Class1
{
public static void UseParams(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}


[STAThread]
static void Main(string[] args)
{
UseParams(1, 2, 3);


int[] myarray = new int[3] {10,11,12};
UseParams(myarray);


Console.ReadLine();


}
}
}


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


1- در تابع main به دو صورت از تابع UseParams ما استفاده شده است. یا اینکه خیلی ساده هر تعداد آرگومان را می توان به تابع فرستاد و یا اینکه در ادامه آرایه ایی رسما تعریف و سپس به تابع فرستاده شود.
2- نحوه ی تعریف و استفاده از آرایه ها به صورت آرگومان ورودی را نیز می توان در مثال فوق آموخت

 

تعریف متدها در سی شارپ

در این قسمت به یکی از مهمترین مباحث برنامه نویسی سی شارپ می رسیم.
متدها در سی شارپ و یا همان توابع در زبان C ، اعضای یک شیء یا کلاس هستند و مجموعه ای از یک سری از کارها را انجام می دهند. فرض کنید در برنامه ی شما ، قسمتی باید یک عملیات ریاضی خاص را انجام دهد و این قسمت از کد که شامل چندین خط نیز می گردد باید بارها و بارها در برنامه صدا زده شود. برای نظم بخشیدن به برنامه ، آنها را می توان به صورت توابع بسته بندی کرد و بجای نوشتن چندین خط تکراری، فقط نام این بسته ( تابع ) و پارامترهای آن را فراخوانی نمود.



 

در سی شارپ یک تابع به صورت زیر تعریف می شود :



 

(نوع و اسامی پارامترها) نام تابع نوع خروجی تابع سطح دسترسی به تابع
}
بدنه ی تابع
{



 

برای تعریف یک متد یا تابع ابتدا سطح دسترسی به آن مانند public و private سپس نوع خروجی تابع مانند void ( هیچی ) ذکر می گردد که داخل این پرانتزها می توان ورودی های تابع یا بقولی آرگومان های ورودی را معرفی کرد. سپس تابع باید با { شروع و با یک } خاتمه یابد.



 

برای مثال :



 

public int myFunc( int x )
{
...….
}



 

 


 


 


هر تابعی می تواند صفر تا تعداد بیشماری آرگومان ورودی و صفر تا تعداد بیشماری خروجی داشته باشد. بوسیله یک تابع می توان پیچیدگی کار را مخفی کرد و صرفا با صدا زدن نام آن ، یک سری از عملیات را انجام داد. گاهی از اوقات لازم می شود دو یا چند تابع با یک نام داشته باشیم بطوریکه پارامترهای ورودی یا مقادیر خروجی و یا نوع آرگومان های ورودی آنها با هم متفاوت باشد به این کار overloading می گویند.
بسیاری از کلاس های دات نت فریم ورک متدها و یا توابع مفید حاضر و آماده ای را دارند. برای مثال کلاس DateTime ، متدی به نام ToLongDatastring دارد که تاریخ را به صورت یک رشته طولانی بر می گرداند.



 

توابع void :



 

توابعی که با نوع void معرفی می شوند هیچ خروجی ندارند و در زبان ویژوال بیسیک به آْنها sub و در دلفی به آنها procedure می گویند.



 

بازگرداندن یک مقدار از یک تابع :



 

پس از اینکه عملیات یک مجموعه از کدها درون تابع به پایان رسید با استفاده از کلمه ی return می توان خروجی تابع را معرفی کرد. لازم به ذکر است ، هرجایی این کلمه ی return ذکر شود کار تابع خاتمه می یابد.



 

بهتر است موارد فوق را با چند مثال مرور کنیم :



 

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



 

using System;



 

namespace ex13
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine( int3SQL(3) );
Console.ReadLine();
}



 

public static double int3SQL( double intInput )
{
double i=0;
i = Math.Sqrt( intInput );
return i;
}
}
}



 

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



 

1- از شیء Math در سی شارپ می توان برای انجام یک سری عملیات ریاضی ابتدایی استفاده کرد. در اینجا از متد جذر گرفتن آن استفاده شده است.
2- در تعریف تابع خودمان از کلمه ی کلیدی static استفاده شده است. درون تابع Main نمی توان توابع غیر استاتیک را فراخوانی کرد. فعلا این نکته را بخاطر را داشته باشید تا در مقالات بعدی بیشتر راجع به آن صحبت شود.
3- بد نیست تابع تعریف شده را کمی بیشتر آنالیز کنیم :



 

public static double int3SQL( double intInput )
{
double i=0;
i = Math.Sqrt( intInput );
return i;
}



 

ابتدا سطح دسترسی به تابع ذکر شده است. پابلیک ، یعنی این تابع خارج از کلاس یک برنامه نیز قابل دسترسی است. سپس از کلمه ی static استفاده گردیده که توضیح مختصری را در مورد آن ملاحظه کردید. در ادامه نوع خروجی تابع که در اینجا double می باشد معرفی گردیده است. دقت کنید که حتما باید نوع تعریف شده با مقداری که یک تابع بر می گرداند یکسان باشد و گرنه با یک خطا برنامه متوقف می شود. سپس نام تابع تعریف شده است. داخل پرانتز ها نوع و نام آرگومانی ارائه شده است که در بدنه ی تابع استفاده می گردد. اگر به تعداد بیشتری پارامتر و یا آرگومان نیاز بود می توان آنها را با , از هم جدا کرد.
پس از اینکه عملیات تابع خاتمه می یابد با استفاده از return این خروجی را معرفی می نماییم.
برای استفاده از این تابع به سادگی نام تابع و سپس پرانتزها به همراه یک عدد دلخواه را می نویسم که آنرا در متد Main برنامه می توان مشاهده کرد.



 

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



 

یکی از زیبایی های برنامه نویسی شیء گرا نظم و ترتیب و بسته بندی کارها می باشد که اصطلاحا در اینجا به آن encapsulation می گویند. یعنی ما یک سری از توابع و خواص را درون کپسولی به نام کلاس قرار می دهیم تا به سادگی بارها و بارها از آن استفاده نماییم.
برای اینکار به سادگی یک توابع را به صورت معمول درون کلاس تعریف می نماییم و سپس همانند خواص که در مورد آنها صحبت شد ، از توابع می توان استفاده کرد با این تفاوت که هنگام کار با توابع حتی اگر آنها هیچ آرگومان و یا پارامتر ورودی هم نداشته باشند ذکر پرانتزها الزامی است.



 

مثالی دیگر در این زمینه :



 

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



 

using System;



 

namespace ex14
{
public class clsTools
{
public clsTools()
{
}



 

public uint intCalc ( uint a , uint b )
{
uint c = Math.Min (a,b);
double x = Math.Sqrt(c) ;
uint w = Convert.ToUInt32 ( x);
return w;
}
}
}



 

سپس در متد Main برنامه می توان به صورت زیر از آن استفاده کرد :



 

using System;



 

namespace ex14
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
clsTools m_var = new clsTools();
Console.WriteLine( m_var.intCalc(4,9));
Console.ReadLine();
}
}
}



 

توضیحاتی در مورد کد فوق :
1- تابع intCalc ما دو عدد صحیح مثبت را می گیرد و سپس جذر کوچکترین دو عدد ورودی را محاسبه می کند.
2- برای تبدیل نوع های عددی مختلف به هم می توان از شیء Convert استفاده کرد.
3- بدون استفاده از شیء Convert یکبار برنامه را اجرا کنید و دلیل خطای بوجود آمده را بیان نمایید


آرایه ها در سی شارپ :

هنگامی آرایه ها ایجاد می شوند که بخواهیم با مجموعه ای از اطلاعات همجنس کار کنیم. برای نمونه از یک آرایه برای ذخیره تعدادی کاراکتر می خواهیم استفاده نماییم. آرایه ها هم یک نوع متغیر هستند پس باید تعریف و مقدار دهی اولیه شوند ، نوع و تعداد اعضای آنها نیز باید معین گردد.
فرض کنید 10 داده ی هم جنس داریم ( برای مثال رشته (string) ) و می خواهیم آنها را ذخیره کنیم. یا می توان 10 متغیر مختلف را تعریف کرد و سپس تک تک آنها را مقدار دهی نمود و یا یک آرایه تعریف نمود و سپس در خانه های مختلف آن این ده عضو را چید. این مطلب زمانی حائز اهمیت می شود که داده های همجنس و به نوعی مرتبط ما تعداد زیادی داشته باشند.


 


 


برای تعریف آرایه چندین راه مختلف وجود دارد :
برای تعریف آرایه ابتدا نوع آنرا مشخص می کنید سپس [] را باید جلوی تعریف نوع بگذارید این دستور زبان است و چون چرا ندارد! در زبان سی کمی متفاوت بود. این کروشه ها بعد از نام متغیر می آمدند. و سپس در اینجا نام یک متغیر را که بعدا به آن ارجا می دهیم خواهید گذاشت. برای مثال



 

 



 

int[] table; // not int table[];



 

 



 

حد پایین آرایه صفر بوده برای مثال اگر آرایه chrData[] ده عضو داشته باشد، اولین عضو آن chrData[0] و آخرین عضو آن chrData[9] است.
مطلب دیگری که در مورد آرایه ها خیلی مهم است اندازه ی آن است. یعنی یک آرایه حاوی چند خانه ی خالی است که ما اجازه داریم آنرا پر کنیم. مثال :



 

 



 

int[] numbers; // declare numbers as an int array of any size
numbers = new int[10]; // numbers is a 10-element array
numbers = new int[20]; // now it"s a 20-element array



 


1- تعریف آرایه ای از رشته ها و مقدار دهی اولیه آن.



 

 



 

String[] strData = new string[2];



 


2- تعریف و مقدار دهی اولیه



 

 



 

string [] strData = { "1234","abcd" };



 


که آرایه ای از نوع رشته ای به طول 2 عضو با مقدار دهی اولیه ایجاد شده است. در این حالت نیازی به تعیین طول آن نمی باشد.



 

3- روشی دیگر برای مقدار دهی اولیه



 

 



 

strData[0] = "1234";
strData[1] = "abcd";



 


مثال : یک پروژه ی جدید Console سی شارپ را باز کنید و نام آنرا در ابتدا ex06 بگذارید. در این مثال می خواهیم نحوه ی کار با آرایه ها را مرور کنیم :



 

 



 

using System;



 

namespace ex06
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
string[] sGoalList = new string[3];
string sReplyStatement = "You have choosen Goal "";



 

// Store goals in the array
sGoalList[0] = "Hike the Appalachian Trail";
sGoalList[1] = "Run the marathon";
sGoalList[2] = "Give $1 million to worthwhile causes";



 

// Store response to goals in the array
//(declaring and initializing on same line)
string[] sGoalResponse = {
"If you are staring from GA, you should get "
+ "started in early spring, so you will "+
"not get caught in snow.",
"Make sure that you have a good pair of shoes.",
"Start saving as soon as possible."};



 

// Give the user a list of goals to choose from
Console.WriteLine("GOAL LIST");



 

for(int i = 0; i < sGoalList.Length; i++)
{
Console.WriteLine("Goal " + i +
" - " + sGoalList[i]);
}



 


// Request the user to choose a goal.
Console.WriteLine (""); // Write an empty line for space
Console.Write("Please choose the number of the "
+ "goal that you want to achieve [0,1,2]: ");



 

Console.ReadLine();



 

}
}
}



 


نکاتی در مورد کد فوق :
1- نحوه ی استفاده از عملگر + را برای اتصال رشته های بلند در کد فوق می توان دید.
2- در سی شارپ پایان خط سمی کولون می باشد. بنابراین نگرانی در مورد چند خطی شدن یک دستور وجود ندارد.
3- هنگامی که آرایه ای را با مقادیر درون آکولادها ، مقدار دهی اولیه می کنید لزومی ندارد طول آن آرایه را مشخص کنید ؛ مانند آرایه sGoalResponse در بالا. در غیر اینصورت حتما باید طول یک آرایه را که معرف تعداد خانه های خالی آن است ، معرفی کنید مانند آرایه sGoalList .
4- فعلا حلقه ی for را در این مثال بخاطر داشته باشید تا در مقاله ی بعدی راجع به آن صحبت کنیم


 

آرزو جلولی




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

using System


using System.Collections.Generic:


using System.Text;


namespace ConsoleApplication1


{


class Program


{


static void Main(string[] args)


{


()double x = Convert.ToDouble(Console.ReadLine


int n = Convert.ToInt16(Console.ReadLine()


((Console.WriteLine("{0}", Program.exp1(x, n


()Console.ReadLine


 


}


static double power(double x, int n)


{


if ((x == 0) || (x == 1)) return x;


 


 


double p = 1;


for (int i = 1; i <= n; i++)


p *= x;


return p;


}


/***************************************************************************************************/


static long fact(int n)


{


long f = 1;


if (n <= 1) return 1;


for (int i = 1; i <= n; i++)


f = f * i;


return f;


}


static double exp1(double x, int n)


{


double sum = 0;


for (int i = 0; i <= n; i++)


sum += power(x, i) / fact(i);


return sum;


}


}


}


سمانه طالبی



  • کلمات کلیدی : ندارد



  • مژده فرجی ::: یکشنبه 87/10/22::: ساعت 4:48 عصر

    از پیشرفته ترین زبان های برنامه نویسی ساخت یافته است که قابل انعطاف و بسیار قدرتمند  سی شارپ برنامه است.در این زبان هیچ محدودیتی برای برنامه نویس وجود ندارد .هر آنچه را که فکر می کنید می توانید در این زبان پیاده سازی کنید. زبان برنامه نویسی را می توان به سه دسته تقسیم کرد 1-زبان سطح بالا 2-زبانهای میانی 3-زبانهای سطح پایین علت میانی  بودن زبان سی این است که از طرفی همانند زبان سطح پایین مثل اسمبلی قادر است مستقیما به حافظه دستیابی داشته باشد وبا مفاهیم بیت و بایت و آدرس کار کند واز طرف دیگر برنامه های این زبان همچون زبانهای سطح بالایی مثل پاسکال از قابلیت خوانایی بالایی برخوردارند.به عبارت دیگر دستورالعمل های این زبان محاورهای انسان نزدیک است که این ویزگی مربوط به زبانهای سطح بالا است .


     


    اجزای زبان سی شارپ:


    1-ثابت ها ومتغیرها:


    متغیر:نامی برای کلمات حافظه است که داده ها درآن قرار می گیرند و ممکن است در طول اجرای برنامه تغییر کنند برای مراجعه به متغیرها از نامشان استفاده می کنند متغییرها محل ذخیره داده ها هستند و چون داده ها دارای نوع اند متغیرها نیز باید دارای نوع باشند متغیرهای فاقد نوع شناخته شده نیستند .قبل از به کار بردن متغیرها باید نوع آنها را مشخص کرد نوع متغیر مقادیری را که متغیر می تواند بپذیرد واعمالی را که می توانند برروی آن مقادیر انجام شوند مشخص می کند .


    برا ی تعیین نوع متغیراینگونه عمل می کنیم :  :نام متغیر  نوع داده


     ثابت ها :ثوابت مقادیری هستند که در برنامه وجود دارند ولی قابل تغییر نیستند1-استفاده از دستورنامگذاری برای ثوابت از قانون نامگذاری برای متغیرها تبعیت می کند .مقادیری که برای ثابت تعیین می شود نوع ثابت را مشخص می کند


    برای تعیین نوع ثبات اینگونه عمل می کنیم:                                <مقدار> = <نام ثوابت> <نوع داده>


     2-شناسه ها :


    1-2-کلمات کلیدی:کلماتی هستند که در یک زبان معنا ومفهوم خاصی دارند . قابل انعطاف و بسیار قدرتمنداست در این زبان هیچ محدودیتی برای برنامه نویس وجود ندارد .برنامه های سیستم برنامه هایی هستند که امکان بهره برداری از سخت افزار و سایر نرم افزارها را برآورده می کند بعضی از برنامه های سیستم عبارتند از :


    سیستم عامل .مفسر .کامپایلر .ویراستارها .وازه پردازها .مدیریت بانکهای اطلاعاتی واسمبلر – نمونه ای از این کلمات:


    If .for. while.const .char .short .break. continue .do .else .switch .void . double . using .console ,….


     2-2-شناسه تعریف شده توسط کاربر:اسامی است که برای ثابت یا متغیر ورودی وخروجی گویند ویا کاماتی است که تعریف شده توسط کاربر هستند





    مژده فرجی ::: یکشنبه 87/10/22::: ساعت 4:44 عصر

    groupbox : کنترلی است که عمل یک قاب را انجام می دهد می توانند تعدادی کنترل را گروه بندی کند


    menustrip:  کنترلی است برای ایجاد  نوار منو


    toolstrip:کنترلی است برای ایجاد نوار ابزار


     richtextbox: کنترلی است برای ایجاد یک صفحه متنی


    list box: کنترلی است برای ایجاد یک لیست


    combobox: کنترلی است برای ایجاد لیست ها ی کشوی


    chickid:کنترلی است برای ایجاد دکمه های رادیوی که فقط در یک لحظه امکان فعال کردن یک دکمه وجود دارد


    آرزو جلولی




    مژده فرجی ::: یکشنبه 87/10/22::: ساعت 4:43 عصر

    ausing System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.windows.Forms;
    using System.Collections;


    namespace windowsApplication1
    {
        public partial class Form1 : Form
        {
            ArrayList p = new ArrayList();
            ListBox[] s = new ListBox[4];
            public Form1()
            {
                InitializeComponent();
            }


            private void button2_Click( sender, EventArgs e)
            {
                string [] s=new string[4];
                s[0]="پیک";
                s[1]="خشت";
                s[2]="دل";
                s[3]="گشنیز";
                for(int i=0;i<4;i++)
                {
                    for (int j = 1; j <= 13; j++)
                    {
                        p.Add(s[i] + j.ToString());
                        listBox5.Items.Add(s[i] + j.ToString());
                    }
                    }


            }


            private void button1_Click( sender, EventArgs e)
            {
                Random r = new Random();
                            for(int i=0;i<4;i++)
                    for (int j = 0; j < 5; j++)
                    {
                        if (p.Count  != 0)
                        {
                            int x = r.Next() % p.Count;
                            s[i].Items.Add(Convert.ToString(p[x]));
                            p.RemoveAt(x);
                            listBox5.Items.RemoveAt(x);
                        }
                    }
                button1.Enabled = false;
            }


            private void button3_Click( sender, EventArgs e)
            {
                Random r = new Random();
                 for (int i = 0; i < 4; i++)
                    for (int j = 0; j < 4; j++)
                    {
                        if (p.Count != 0)
                        {
                            int x = r.Next() % p.Count;
                            s[i].Items.Add(Convert.ToString(p[x]));
                            p.RemoveAt(x);
                            listBox5.Items.RemoveAt(x);
                        }
                    }
                button3.Enabled = false;
            }


            private void button4_Click( sender, EventArgs e)
            {
                Random r = new Random();
               
                for (int i = 0; i < 4; i++)
                    for (int j = 0; j < 4; j++)
                    {
                        if (p.Count != 0)
                        {
                            int x = r.Next() % p.Count;
                            s[i].Items.Add(Convert.ToString(p[x]));
                            p.RemoveAt(x);
                            listBox5.Items.RemoveAt(x);
                        }
                    }
                button4.Enabled = false;
            }


            private void Form1_Load( sender, EventArgs e)
            {


                s[0] = listBox1;
                s[1] = listBox2;
                s[2] = listBox3;
                s[3] = listBox4;


            }
        }
    }


    آرزو جلولی





    مژده فرجی ::: یکشنبه 87/10/22::: ساعت 4:42 عصر

    نمایش کادر های محاوره ای و ایجاد آنها


    MAASSAG BOX BUTTON: در این قسمت تعداد دکمه ها را انتخاب می کنیم.


    DIFULT BUTON: در این قسمت دکمه پیش فرض را انتخاب می کنیم .


    ICON BOX:تعداد آیکن را مشخص می کند .


     




    مژده فرجی ::: یکشنبه 87/10/22::: ساعت 4:37 عصر

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;


    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Queue q = new Queue();


                int n;
                do
                {   n = int.Parse(Console.ReadLine());
                    q.Enqueue(n);
                } while (n != 0);
                int sum = 0;
                while (q.Count != 2)
                {
                    int a = Convert.ToInt16(q.Dequeue());
                     sum += Math.Abs(a-Convert.ToInt16(q.Peek()));       
                }
                Console.WriteLine("{0}",sum );
                Console.ReadLine();


            }
        }
    }
    آرزو جلولی




    مژده فرجی ::: یکشنبه 87/10/22::: ساعت 4:34 عصر

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


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


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

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


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