آموزش سی شارپ c# ادامه درس دوم

 
ارسال شده در تاریخ 1392/7/22 توسط admin در زمینه آموزش سی شارپ
 
عملگر بعدی که در این برنامه مورد استفاده قرار گرفته است، عملگر نقیض منطقی یا همان "!" است که امکان تغییر مقدار یک متغیر Boolean را از true به false و بالعکس را فراهم می آورد . در مثال بالا ) مثال شماره (2 مقدار متغیر logNot پس از
استفاده از عملگر "!" از false به true تغییر کرده است . با توجه به توضیحات اخیر خروجی زیر از برنامه مثال 2 مورد انتظار است :
Pre-Increment: 1 Pre-Decrement 0 Post-Decrement: 0 Post-Increment -1 Final Value of Unary: 0 Positive: 1 Negative: -1 Bitwise Not: -1 Logical Not: True
مثال 3 - عملگرهای دوتایی
using System; class Binary
{
public static void Main()
 
{
int x, y, result; float floatResult; x = 7; y = 5; result = x+y;
Console.WriteLine("x+y: {0}", result); result = x-y;
Console.WriteLine("x-y: {0}", result); result = x*y;
Console.WriteLine("x*y: {0}", result); result = x/y;
Console.WriteLine("x/y: {0}", result); floatResult = (float)x/(float)y;
Console.WriteLine("x/y: {0}", floatResult); result = x%y;
Console.WriteLine("x%y: {0}", result); result += x;
Console.WriteLine("result+=x: {0}", result);
}
}
خروجی این برنامه به فرم زیر است :
x+y: 12 x-y: 2 x*y: 35 x/y: 1 x/y: 1.4 x%y: 2 result+=x: 9
مثال 3 استفاده های متفاوتی از عملگرهای دوتایی را نشان می دهد ). منظور از عملگر دوتایی، عملگری است که دارای دو عملوند می باشد مانند عملگر جمع .("+" بسیاری از عملگرها ی مورد استفاده در این مثال عملگرهای ریاضی هستند و نتیجه عمل آنها مشابه عملی است که از آنها در ریاضیات دیده اید . از نمونه این عملگرها می توان به عملگرهای جمع "+" ، تفریق "-" ، ضرب "*" و تقسیم "/" اشاره نمود .
 
متغیر floatResult از نوع اعشاری یا float تعریف ش ده است . در این مثال نیز صریًحا از عمل Casting جهت اسفاده از دو متغیر x و y که از نوع int هستند، برای انجام عملی که نتیج هاش از نوع float است، استفاده کرده ایم .
 
در این مثال از عملگر "%" نیز استفاده کرد ه ایم . این عملگر در عملیات تقسیم کاربرد دارد و باقیمانده تقسیم را بر میگرداند . یعنی دو عملوند خود را بر یکدیگر تقسیم میکند و باقیمانده این تقسیم را برمی گرداند .
 
 
در این مثال همچنین فرم جدیدی از عمل انتساب را بصورت result+=x مشاهده مینمایید . استفاده از عملگرهای انتسابی که خود ترکیبی از دو عملگر هستند، جهت سهولت در امر برنامه نویسی مورد استفاده قرار می گیرند . عبارت فوق معادل result = result+x می باشد . یعنی مقدار قبلی متغیر result با مقدار متغیر x جمع می شود و نتیجه در متغیر result قرار میگیرد .
 
یکی دیگر از انواعی که تا کنون با آن سر و کار داشت ه ایم نوع رشته ای (string) است . یک رشته، از قرار گرفتن تعدادی کاراکتر در کنار یکدیگر که داخل یک زوج کوتیشن " " قرار گرفتهاند، ایجاد میگردد . بعنوان مثال ."Hi This is a string type" در
اعلان متغیرها نیز در صورت تعریف متغیری از نوع رشت های، در صورت نیاز به تخصیص مقدار ب ه آن، حتماً کاراکترهایی که میخواهیم بعنوان یک رشته به متغیرمان نسبت دهیم را باید داخل یک زوج کوتیشن " " قرار دهیم . به مثال زیر توجه نمایید .
string Name;
...
Name = "My name is Meysam";
همانطور که در این مثال مشاهده می نمایید، متغیری از نوع رشته ای تحت نام Name تعریف شده است و سپس در جایی از برنامه که نیاز به تخصیص مقدار برای این متغیر وجود دارد، عبارت مورد نظر را داخل دو کوتیشن قرار داده و به متغیر خود تخصیص
داده ایم . رشته ها از پر کاربرد ترین انواع در زبا ن های برنام ه سازی جهت ایجاد ارتباط با کاربر و دریافت اطلاعات از کاربر می باشند ). همانطور که در درس قبل اول نیز گفته شد، دستور Console.ReadLine() یک رشته را از ورودی دریافت مینماید (.
در مثالهایی که در طی درسهای این سایت خواهید دید، نمون ه های بسیاری از کاربرد انواع مختلف و نیز نوع رشت ه ای را خواهید دید .
 
 
آرایه ها (Arrays)
 
یکی دیگر از انواع داده ای در زبان C# ، آرایه ها (Arrays) میباشند . یک آرایه را به عنوان مخزنی برای نگهداری اطلاعات در نظر می گیریم که دارای لیستی از محلهایی است که در آنها اطلاعات ذخیره شده است و از طریق این لیست می توان به اطلاعات آنها دسترسی پیدا نمود . به هنگام اعلان آرایه ها باید نوع، اندازه و تعداد بعد آنها را نیز معین نمود .
 
مثال -4 آرایه ها و عملیات بر روی آنها
using System; class Array
{
public static void Main()
{
int[] myInts = { 5, 10, 15 }; bool[][] myBools = new bool[2][]; myBools[0] = new bool[2]; myBools[1] = new bool[1];
double[,] myDoubles = new double[2, 2]; string[] myStrings = new string[3];
Console.WriteLine("myInts[0]: {0}, myInts[1]: {1}, myInts[2]: {2}", myInts[0], myInts[1], myInts[2]); myBools[0][0] = true;
 
www.Arsanjan.blogfa.com myBools[0][1] = false; myBools[1][0] = true;
Console.WriteLine("myBools[0][0]: {0}, myBools[1][0]: {1}", myBools[0][0], myBools[1][0]);
myDoubles[0, 0] = 3.147; myDoubles[0, 1] = 7.157; myDoubles[1, 1] = 2.117; myDoubles[1, 0] = 56.00138917;
Console.WriteLine("myDoubles[0, 0]: {0}, myDoubles[1, 0]: {1}", myDoubles[0, 0], myDoubles[1, 0]); myStrings[0] = "Joe"; myStrings[1] = "Matt"; myStrings[2] = "Robert";
Console.WriteLine("myStrings[0]: {0}, myStrings[1]: {1}, myStrings[2]: {2}", myStrings[0], myStrings[1], myStrings[2]);
}
}
خروجی مثال 4 بصورت زیر است :
myInts[0]: 5, myInts[1]: 10, myInts[2]: 15 myBools[0][0]: True, myBools[1][0]: True
myDoubles[0, 0]: 3.147, myDoubles[1, 0]: 56.00138917 myStrings[0]: Joe, myStrings[1]: Matt, myStrings[2]: Robert
 
در این مثال انواع مختلفی از آرایه ها اعلان شده اند . در ابتدا یک آرایه تک بعدی، سپس آرای ه ای دندانه دار و در نهایت نیز یک آرایه دو بعدی در این مثال اعلان شد هاند .
اولین اعلان در این برنامه مربوط به اعلان آرایه تک بعدی myInts میباشد که از نوع int بوده و دارای 3 عضو می باشد که تعداد این اعضا با اعلان چند مقدار در داخل { } معین شده است . همانطور که از این اعلان دریافت میشود، آرایه تک بعدی بصورت زیر تعریف میشود :
type[] arrayName;
که در آن type نوع آرایه و arrayName نام آرایه ایست که تعریف می نمائیم .
اما در ابتدا گفته شد که به هنگام اعلا ن آرایه ها اندازه آنها نیز باید مشخص شود . برای تعیین اندازه آرایه، یعنی تعدا عناصری که آرایه در خود جای می دهد، می توان به چند روش عمل نمود . اولین و ساده ترین روش که در این مثال نیز آورده شده است، تخصیص مقادیری به آرایه در داخل یک زوج { } است . بسته به نوع آرایه، تعداد عناصری که داخل این زوج { } قرار می گیرند، تعداد عناصر آرایه می باشند و مقادیر عناصر آرایه نیز همان مقادیری است که داخل { } قرار گرفته است . به عنوان مثال در مثال 4، اولین آرایه ما دارای 3 عنصر است که مقادیر آنها به ترتیب برابر با 5 ، 10 و 15 می باشد .
روش دیگر جهت تعیین اندازه آرایه استفاده از روش تعریف کامل آرایه است که به فرم کلی زیر میباشد .
type[] arrayName = new type[n];
که در این تعریف، استفاده از کلمه کلیدی new باعث ایجاد نمون ه ای جدید از نوع مورد نظر، می شود n . نیز تعداد عناصر آرایه است که می خواهیم آنرا تولید نماییم . در این حالت باید توجه داشت که آرایهای تهی را تولید نموده ایم و هیچ عنصری را در آرایه جای نداده ایم و در برنامه باید آرایه را مقدار دهی نماییم . به مثال زیر توجه کنید .
int[] myArray = new int[15];
 
www.iranproje.com
این مثال آرایه ای تک بعدی از نوع int را با اندازه 15 عنصر تولید می نماید . یعنی این آرایه قادر است تا 15 عنصر از نوع int را در خود ذخیره نماید .
گونه دیگری از آرایه ها، آرایه های چند بعدی (Multi Dimensional Arrays) هستند که برای نگهداری اطلاعات از چندین
بعد استفاده می کنند و بیشتر برا ی نگداری جداول و ماتریسها مورد استفاده قرار می گیرند . فرم کلی اعلان این آرای ه ها بصورت زیر است :
type[ , , ... , ] arrayName = new type[n1, n2, .... , nm];
که در آن تعداد ابعاد آرایه با ویرگول مشخص شده و n1 تا nm نیز تعداد عناصر هر یک از ابعاد است . بعنوان مث ال تعریف یک آرایه سه بعدی به فرم زیر است :
char[ , , ] charArray = new char[3,5,7];
در این مثال یک آرایه سه بعدی از نوع char تولید کرده ایم که ابعاد آن به ترتیب دارای 3 ، 5 و 7 عنصر میباشند .
 
نوع دیگری از آرایه ها، آرایه های دندانه دار (Jagged Arrays) هستند . این نوع آرای ه ها تنها در زبان C# وجود دارند و در صرف هجویی حافظه بسیار موثر میباسند . یک آرایه دندانهدار، در حقیقت یک آرایه تک بعدی است که هر یک از اعضای آن خود یک
آرایه تک بعدی می باشند . اندازه این عناصر می تواند متفاوت باشد و تفاوت این آرای ه ها با آرایه های چند بعدی در همین جا نمایان می شود . استفاده از این آرایه ها در مواردی کاربرد دارد که نیازی نیست تا تمامی ابعاد آرایه دارای تعداد عناصر مساوی باشن د .
بعنوان مثال فرض کنید می خواهید آرایه ای جهت نگهداری تعداد روزهای ماه های مختلف سال تهیه کن ید . در صور تیکه بخواهید از آرایه چند بعدی استفاده نمایید، چون تعداد روزهای تمامی ماه های سال یکسان نیست، مجبورید تا تعداد عناصر تمام بعدهای آرایه را برابر با بزرگترین تعداد روز ماه ها، یعنی 31 ، تعریف نمای ید . ولی چون تنها 6 ماه دارای 31 روز می باشند، برای 6 ماه دیگر تعدادی از عناصر آرایه هیچگاه مورد استفاده قرار نمی گیرند و حافظه را به هدر داده ایم . اما در صورتیکه برای این مثال از آرای ه های دندانه دار استفاده نماییم ، میتوانیم یک آرایه دندانهدار 12 عنصری تعریف نماییم و سپس تعداد عناصر هر یک از اعضای آنرا برابر با تعداد روزهای ماه مورد نظر تعریف کنیم : با استفاده از آرایه چند بعدی :
int[ , ] monthArray = new int[12,31];
با استفاده از آرایه دندانه دار :
int[][] monthArray = new int[12][];
در تعریف اول که در آن از آرایه چند بعدی استفاده کردیم، مشاهده می کنید که آرایهای دو بعدی تعریف کردهایم که بعد اول آن 12 عضو و بعد دوم آن 31 عضو دارد . این عمل دقیقاً همانند ایجاد یک جدول برای نگهداری روزهای ماه های سال است .
اما در حالت دوم که در آن از آرایه دندان ه دار بهره برده ایم، یک آرایه تعریف نمود ه ایم که بعد اول آن 12 عضو دارد ولی بعد دوم آنرا را تعریف نکرده ایم که دارای چند عضو است و هر یک از عناصر بعد اول آرایه می تواند دارای تعداد اعضای متفاوتی باشد که با استفاده از این روش می توان به هر یک از ماه های سال تعداد روزهای مورد نظر آن ماه را تخصیص داد و فضایی بلا استفاده ایجاد نخواهیم کرد . توجه نمایید که چون تعداد عناصر بعد دیگر این آرایه معین نشده است در برنامه باید این تعداد عنصر را مشخص نماییم :
monthArray[1] = new int[31]; monthArray[10] = new int [30];
مشاهده می کنید که به هر ماه، تعدا عنصر مورد نیاز خود را تخصیص داده ایم . تنها باید به تفاوت اعلان آرای ه های دندانه دار با آرایه های چند بعدی توجه نمایید .
 
www.iranproje.com
دسترسی به عناصر آرایه از طریق اندیس امکان پذیر است . اندیس شماره محل ذخیره سازی داده های ما می باشد که با دادن این شماره می توانیم به داده مورد نظر دسترسی پیدا کن یم . در C# همانند C و C++ اندیس خانه های آرایه از صفر آغاز می گردد یعنی اولین خانه آرایه دارای شماره صفر است و عناصر بعدی به ترتیب یک واحد به اندیسشان اضافه می گردد . پس شماره اندیس آرایه همیشه یک واحد کمتر از تعداد عناصر آن است، یعنی آرای های که 10 عضو دارد بزرگترین اندیس خانه هایش 9 می باشد .
دسترسی به عناصر هر یک از ابعاد آرایه با اندیس امکان پذیر است . معمًولا به بعد اول آرایه سطر و به بعد دوم آن ستون می گوید . مثلاً monthArray[3,7] عنصر واقع در سطر 3 و ستون 7 آرایه را مشخص مینماید ). توجه داشته باشید که اندیس دهی آرایه از صفر آ غاز می شود و بعنوان مثال intArray[12] به خانه شماره 12 آرایه اشاره میکند اما فراموش نکنید چون اندیس آرایه از صفر آغاز میشود خانه شماره 12 آرایه، سیزدهمین داده شما را در خود جای می دهد (.
 
0 1 2 3 4 5 6 7 8 9 10 11 12
 
اگر شکل فوق را آرای ه ای تک بعدی تص ور نمایید، مشاهده می نمایید که خانه شماره 5 آرایه حاوی اطلاعات مربوط به ششمین داده ورودی شما میباشد .
 
نکته دیگری که باید در مورد تعریف آرای ه های این مثال متذکر شوم در مورد آریه هائیست که از نوع string تعریف می شوند .
دوستانی که با زبان C کار کرد ه اند حتماً می دانند که آرای ه ای از نوع رشته ای در C وجود ندارد و برای نگهداری چندین رشته در یک آرایه باید از آرایه دو بعدی استفاده کرد . در C# این قابلیت فراهم شده تا با استفاده از یک آرایه تک بعدی بتوان چندین رشته
را ذخیره نمود بدین صورت که هر یک از عناصر آرایه ن ک بعدی محلی برای ذخیره سازی یک رشته است و همانند زبان C نیاز به پردازش های گاه پیچیده بر روی آرای ه های چند بعدی بمنظور کار با رشت ه ها، وجود ندارد . بعنوان یک توضیح کمی اختصاصی عرض می کنم که در زبان هایی مانند C ، در صورتیکه می خواستید چندین رشته را در آرای های ذخیره کنید تا بتوانید با اندیس به آنها دسترسی داشته باشید، مجبور به تعریف یک آرایه دو بعدی بودید که با استفاده از تنها اندیس اول آرایه می توانستید به عناصر رشته ای آرایه دسترسی پیدا کنید، اما در C# تنها با استفاده از یک آرایه تک بعدی می توان همان کار را انجام داد .
string[] stringArray = {"My name is Meysam", "This is C# Persian Blog"} .....
Console.WriteLine("{0}",stringArray[0]); .....
همانطور که در این مثال ملاحظه می کنید، آرایه ای از نوع رشته تعریف شده و دو عنصر به آن تخصیص داده شده است و در جایی در متن برنامه با استفاده از اندیس از اولین عنصر این آرایه برای نمایش در خروجی استفاده گردیده است . خروجی این برنامه به شکل زیر است :
My name is Meysam
 
 
مطلب این درس در اینجا به پایان می رسد . در صورتیکه نیاز دارید تا در مورد عملگرهای زبان C# بیشتر توضیح دهم حتم اً ذکر کنید تا در مطلب بعدی توضیح کاملتری در مورد آنها برای شما تهیه کن م . خیلی دوست داشتم که در مورد تمام عملگرهای زبان C# در همین درس توضیح بدهم اما هم فرصت اندی است و هم حجم مطلب این قسمت زیاد می شد و هم اینکه فکر کردم احتمالاً دوستان با این عملگرها آشنای ی دارند . نکته دیگری که باید به آن اشاره کنم و اینست که در این سایت سعی شده است تا زبان برنامه نویسی C# به سادگی و به سرعت آموزش داده شود و علت اینکه به برخی از جزئیات تخصصی پرداخته نمی شود نیز همین مطلب می باشد . در آینده در مورد آرای ه ها بیشتر صحبت می کنم چون عناصر مفید و سودمندی هستن د . امید است پس از
 
www.iranproje.com
کامل کردن مطالب مقدماتی در این سایت و با همکاری شما عزیزان بتوانم به مطالب پیشرفته تری از زبان C# بپردازم . بیان نظرات و پیشنهادات شما چه در زمینه مطالب ارائه شده و چه در زمینه متن ارائه شده به شما از لحاظ ساد گی و روانی در دری، مرا در امر بهبود مطالب یاری مینماید .
Copyright © 2014 icbc.ir