|
|
|
|
|
آرايه ها در سي شارپ : هنگامي آرايه ها ايجاد مي شوند كه بخواهيم با مجموعه اي از اطلاعات همجنس كار كنيم. براي نمونه از يك آرايه براي ذخيره تعدادي كاراكتر مي خواهيم استفاده نماييم. آرايه ها هم يك نوع متغير هستند پس بايد تعريف و مقدار دهي اوليه شوند ، نوع و تعداد اعضاي آنها نيز بايد معين گردد. فرض كنيد 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 را در اين مثال بخاطر داشته باشيد تا در مقاله ي بعدي راجع به آن صحبت كنيم |
||
|
+
نوشته شده در چهارشنبه 17 خرداد1385ساعت 11:15 توسط لوتوس
|
|
||
|
|
|
|
|
ساختارهاي تصميم گيري : در بسياري از موارد هنگام برنامه نويسي لازم است تا از عبارات شرطي استفاده كنيم. براي انجام اينكار دو روش عمده وجود دارد. استفاده از if و يا switch . از if بيشتر براي مقايسه هايي تكي و كوچك استفاده مي شود و حاصل مقايسه ي آن يا true است و يا false . از عبارت switch هنگامي استفاده مي شود كه مقايسه هاي متعددي بايد در مورد يك مقدار صورت گيرد. هر دو عبارت if و switch توسط عبارتهايي Boolean كنترل مي شوند ( true و يا false ) . در هنگام استفاده از if اگر عبارت Boolean حاصل اش true باشد اولين قسمت شرط اجرا مي شود و سپس برنامه از انتهاي if ادامه پيدا مي كند. اگر حاصل عبارت Boolean مساوي false باشد كنترل برنامه به قسمت else منتقل مي شود. مثال : يك پروژه ي جديد console باز كنيد و نام آنرا ex04 بگذاريد. سپس كد زير را در آن وارد و جرا كنيد : using System; نكاتي در مورد كد فوق : namespace ex04 { class Class1 { [STAThread] static void Main(string[] args) { Console.WriteLine("Enter 1 character to be evaluated"); char cUserInput = (char) Console.Read(); if ( char.IsDigit( cUserInput ) ) Console.WriteLine("The char is a number!"); else Console.WriteLine("The char is not a number!"); } } } 1- سي شارپ به كوچكي و بزرگي حروف حساس است . براي مثال cUserInput با cUserinput فرق مي كند. 2- حتما بايد بعد از if پرانتزها ذكر گردد. 3- حتما بايد داخل if يك عبارت Boolean ذكر شود مانند if(x>5) . 4- در سي شارپ مقايسه ي تساوي دو عبارت با == و انتساب با = انجام مي شود. ( موارد 1 و 4 مواردي هستند كه اغلب تازه كاران با آن مشكل دارند! ) براي مثال if(i==3) صحيح است اما if(i=3) در سي شارپ معنايي ندارد. 5- اگر بعد از if يك خط كد قرار گيرد نيازي به آوردن آكولاد ها نيست. هنگامي نياز به آكولادها مي باشد كه بيش از يك خط بايد بعد از if قرار گيرد. 6- در سي شارپ همانند اسلاف خودش براي تبديل نوع هاي داده ايي مي توان به صورت زير نيز عمل كرد : (char) Console.Read() ; يعني دريافتي Read به char تبديل مي شود .در اين مورد باز هم صحبت خواهد شد. 7- همانطور كه ذكر شد در سي شارپ همه چيز شيء است حتي نوع هاي پايه ايي مانند char . با استفاده از متد IsDigit آن مي توان چك كرد كه آيا ورودي آن عدد است يا خير؟ ( در مورد متدها صحبت خواهد شد ) استفاده از switch : بهتر است اين مورد را با يك مثال دنبال كنيم. پروژه ي سي شارپ جديدي به نام ex05 در حالت console در VS.NET باز كنيد. دراينجا مي خواهيم يك كلاس جديد تعريف كرده و توسط خاصيتي كه در آن ايجاد مي كنيم متوجه شويم روز جاري مطابق سيستم چه روزي است . يك كلاس جديد از منوي پروژه ،با استفاده از گزينه ي Add class به برنامه اضافه كنيد و نام آنرا در ابتدا clsDate بگذاريد. using System; هنگام ذخيره كردن اين كد ويژوال استوديو به شما اخطار مي دهد كه كد داراي حروف يونيكد است. از منوي فايل گزينه ي advanced save options را انتخاب كنيد. در اينجا مي توان نوع ذخيره سازي را يونيكد انتخاب كرد. namespace ex05 { /// /// Summary description for clsDate. /// public class clsDate { public clsDate() { // // TODO: Add constructor logic here // } public string systemDayOfWeek { get { string res=""; switch( System.DateTime.Now.DayOfWeek.ToString()) { case "Saturday" : res = "شنبه"; break; case "Sunday" : res = "يک شنبه" ; break; case "Monday": res = "دوشنبه"; break; case "Tuesday": res = "سه شنبه"; break; case "Wednesday": res = "چهار شنبه"; break; case "Thursday": res = "پنج شنبه"; break; case "Friday": res = "جمعه" ; break; } return res ; } } } } براي استفاده از كلاس فوق مانند مطالبي كه در قسمت قبل گفته شد عمل مي كنيم : using System; هر چند حالت console يونيكد را پشتيباني نمي كند ولي اصل برنامه براي ما مهم است و در آينده بيشتر از آن استفاده خواهيم كرد. namespace ex05 { class Class1 { [STAThread] static void Main(string[] args) { clsDate m_var = new clsDate(); Console.WriteLine( m_var.systemDayOfWeek ); Console.ReadLine(); } } } همانطور كه ملاحظه كرديد اگر از switch استفاده نمي شد بايد از 7 عدد if استفاده مي گرديد كه اصلا ظاهر حرفه اي و شكيلي نداشت! با استفاده از عبارت زير كار مقايسه شروع مي شود. روز سيستم در يافت شده و وارد بدنه ي switch مي گردد. سپس توسط case ها چك مي شود تا تساوي آن با عبارت بعد از case به اثبات برسد. switch( System.DateTime.Now.DayOfWeek.ToString()) اگر هر كدام از عبارات بعد از case صحيح بودند كار پس از آن كه در اينجا انتساب است انجام شده و سپس توسط break كنترل برنامه از switch خارج مي شود و ادامه ي كار دنبال مي گردد. اگر هيچكدام از case ها صحيح نبودند مي توان از گزينه ي default هم در صورت نياز استفاده كرد. اين حالت در يك چنين مواقعي اجرا مي گردد. |
||
|
+
نوشته شده در چهارشنبه 17 خرداد1385ساعت 11:13 توسط لوتوس
|
|
||