بسم الله الرحمن الرحیم
سلام...
در جلسه قبل با حلقه های تکرار آشنا شدیم و با استفاده از حلقه while یک برنامه ساده نوشتیم. همچنین با انواع دیگری از متغیر ها آشنایی کمی پیدا کردیم. در این جلسه قصد دارم شما رو با نوع خاصی از متغیرها که در برنامه نویسی به "آرایه" مشهور هستند، آشنا کنم. همچنین با حلقه تکرار for هم آشنا شویم. با ما باشید...
متغیر های رشته ای یا string برای ذخیره سازی (موقت) یک متن بکار می روند. متغیرهای عددی ، از جمله int ، float ، byte و... برای ذخیره سازی اعداد مورد استفاده قرار می گیرند. اما نوشتن بعضی برنامه ها نیازمند تعداد زیادی متغیر است. برای مثال فرض کنید بخواهیم برنامه ای بنویسیم که نمرات یک دانشجو را گرفته و معدل او را محاسبه کند. یکی از راه حل ها می تواند این باشد که برای هر درس یک متغیر جداگانه بسازیم. بصورت زیر: (در کد زیر سعی کرده ام که روش های مختلف تعریف و مقدار دهی اولیه متغیرها رو نشان دهم)
float riazi=18.25f; float fizik=16.5f,shimi,farsi=20.0f; float miyangin=(riazi+fizik+shimi+farsi)/4;
برنامه محاسبه میانگین نمرات، یک برنامه با تعداد متغیرهای کم است. هرچند ما از بعضی دروس صرف نظر کردیم. اما تصور کنید بخواهید برنامه ای برای سرشماری یک شهر بزرگ را بنویسیم! که در آن نیاز به ذخیره اسم شهروندان داشته باشیم. چون می خواهیم بعدا تعداد افرادی را که نامشان "علی" هست را بفهمیم. از آن گذشته شاید بخواهیم نام ها را بر اساس حروف الفبا مرتب کنیم.
اینجاست که اگر بخواهیم برای هر شخص یک متغیر جداگانه بسازیم، باید تمام وقتمان را صرف تعریف متغیر مناسب برای هر شخص کنیم. اما راه بهتر و بسیار سریع تری هم وجود دارد. ما می توانیم یک لیست از متغیرها رو بسازیم و با استفاده از امکاناتی که زبان برنامه نویسی #C در اختیارمان قرار داده ، به تک تک خانه های لیست دسترسی داشته باشیم. فعلا به این لیست "آرایه" می گوییم.
در هنگام ساختن یک آرایه باید نوع آرایه، نام آرایه و همچنین تعداد خانه های آنرا مشخص کنیم. به مثال زیر که تعریف یک آرایه 100 خانه ای از نوع رشته ای هست دقت کنید:
string[] names=new string[100];
حالا یک آرایه به نام names داریم که دارای 100 خانه می باشد. این آرایه توانایی ذخیره سازی 100 رشته (متن) را در خود دارد. مهمترین کاری که با متغیرها انجام می دهیم، خواندن و نوشتن اطلاعات آنها است. خواندن و نوشتن اطلاعات در آرایه ها تفاوت زیادی با متغیرها ندارد؛ فقط باید همیشه شماره خانه آرایه را در هنگام خواند و نوشتن، مشخص کنیم. کد زیر نوشتن در آرایه را نشان میدهد:
names[5]="Ali"; names[0]="Mohammad"; names[99]="Mahdi"; names[100]="saeed"; //خطا - این خانه از آرایه وجود ندارد
میتوانیم در هنگام تعریف آرایه، آنرا مقداردهی هم بکنیم. به کد زیر دقت کنید که چگونه آرایه rates را مقداردهی اولیه می کند:
int rates=new int[5]{3,1,5,2,4};
خانه های 0 تا 5 آرایه rates به ترتیب مقادیر 3 ، 1 ، 5 ، 2 ، 4 به خود خواهند گرفت. حتی می توانیم آرایه را بصورت زیر هم تعریف کنیم. در این صورت تعداد خانه های آرایه بر حسب تعداد مقادیر موجود در آکولاد، تعیین خواهد شد:
byte myArray={10,36,158,220,18,110};
آرایه myArray دارای 6 خانه خواهد بود که مقادیر اولیه آن خانه ها مابین آکولاد ها بیان شده اند.
برای خواندن اطلاعات موجود در خانه های آرایه ، کافیست نام و شماره خانه آرایه را بنویسیم. (بازم مسج باکس :) )
MessageBox.Show(names[5]+" "+names[0]);
آرایه ها رو می تونید از هر نوعی و با هر تعداد خانه ای بسازید. شماره خانه های آرایه از 0 شروع میشه. شما نمی تونید از خونه هایی که در محدوده طول آرایه نیستند استفاده کنید. در کد بالا یه توضیح فارسی می بینید. هرجا بخواهیم برای کدمون توضیح بنویسیم باید قبل توضیح دوتا اسلش (//) قرار بدیم. کامپایلر تمام متنی رو که بعد از // باشه رو نادیده می گیره. انگار نه انگار که نوشتین. اما این توضیحات فایده های زیادی داره...
خوب بریم سراغ حلقه for
حلقه for هم مثل حلقه while دستورهای داخل بلوک خودش رو تکرار میکنه. اما این حلقه یه سری امکانات رو در اختیارمون قرار میده که خیلی بدرد بخور هستن. شما در این حلقه یک متغیر شمارنده تعیین می کنید و بر اساس همین متغیر (یا حتی متغیری دیگر) تصمیم به خروج از حلقه می گیرید. ساختار کلی حلقه for بصورت زیر می باشد:
for(Initial-Expression;Conditional-Expression;Loop-Expression){ Commands set }
در پرانتز جلوی دستور for ، سه قسمت مجزا وجو دارد که با علامت ; از هم جدا شده اند. کار هر کدام از قسمت ها به شرح زیر است:
- Initial-Expression : در این قسمت یک متغیر عددی ساخته و مقدار دهی می کنیم. این قسمت فقط یک بار در اولین دور حلقه اجرا می شود. بنابراین در اولین دور حلقه یک متغیر عددی ساختیم.
- Conditional-Expression : در این قسمت یک عبارت شرطی می نویسم. در واقع این عبارت، شرط ادامه کار حلقه می باشد. اگر این عبارت برابر false شود، اجرای حلقه متوقف خواهد شد. معمولا در این بخش ، متغیری را که در قسمت قبل ساختیم با یک عدد دیگر مقایسه می کنیم. Condition-Expression اولین دستوری هست که در هر دور حلقه اجرا می شود. منظورم رو در عمل متوجه خواهید شد. نگران نباشید.
- Loop-Expression : معمولا در این قسمت عبارتی نوشته می شود که مقدار متغیر تعریف شده در بخش Initial-Expression را تغییر دهد. در عمل ، Loop-Expression آخرین دستور اجرا شونده در هر دور حلقه است.
خوب وقتشه که مطالب گفته شده رو در عمل آزمایش کنیم.
بیایید با هم برنامه محاسبه معدل رو بنویسیم. ما در این برنامه یک آرایه می سازیم برای ذخیره کردن نمره ها، سپس با استفاده از حلقه for میانگین نمرات دروس را محاسبه کرده و نمایش می دهیم.
یک پروژه جدید بسازید و اشیاء زیر را به فرم آن اضافه کنید:
- یک عدد TextBox . خاصیت Name آن را به txtAvg تغییر دهید.
- یک عدد Label . خاصیت Text آن را به "میانگین" تغییر دهید.
- یک دکمه.
شکل ظاهری برنامه:
فرمول ما برای محاسبه میانگین: مجموع نمرات، تقسیم بر تعداد نمرات. فرض کنید 10 درس بیشتر نداریم. برای دکمه (رویداد کلیک دکمه) برنامه زیر را بنویسید:
float[] marks = new float[10] { 15, 14, 18, 20, 8, 19.5f, 12.25f, 16, 16.75f, 20 }; float sum = 0; float avg = 0; for (int i = 0; i < 10; i++) { sum = sum + marks[i]; } avg = sum / 10; txtAvg.Text = Convert.ToString(avg);
دو سه نکته در مورد این برنامه:
- عبارت ++i در قسمت Loop-Expression حلقه for به معنای اضافه کردن عدد 1 به متغیر i است و با عبارت زیر تفاوت چندانی ندارد:
i=i+1;
- هر متغیر فقط توانایی ذخیره کردن مقادیر همنوع خودش را دارد؛ مگر اینکه آن متغیر با روش هایی تبدیل نوع داده شود. شما فقط می توانید در خاصیت Text شیئ TextBox ، یک رشته ذخیره کنید. چون در واقع خاصیت Text یک متغیر رشته ای است. هر دو دستور زیر با هم برابر هستند. هر دوی آنها متغیر avg را به رشته تبدیل می کنند. این کار برای این است که بتوانیم مقدار متغیر avg را در داخل TextBox به نمایش در آوریم.
txtAvg.Text = Convert.ToString(avg);
txtAvg.Text = avg.ToString();
- در هر دور حلقه for ، مقدار i ام آرایه marks با مقدار sum جمع می شود، سپس جواب در خود sum قرار می گیرد. همانطور که گفتم آخرین دستور در حلقه for همان Loop-Expression است، بنابراین در هر دور اجرای حلقه ، یکی به مقدار قبلی i اضافه می شود. همچنین قبل از اینکه دستورات داخل بلوک حلقه اجرا شوند، درستی عبارت شرطی بررسی می شود؛ اگر این عبارت برابر با false شود، از حلقه خارج خواهیم شد و دستور های بعد از بلوک حلقه اجرا می شوند.
خدا قوت دوستان :)
برای این جلسه کافیه... در جلسه آینده دریچه های جدیدی از برنامه نویسی رو باز می کینم. باید بفهمیم که اسکوپ چی هست، متغیرهای سراسری چه هستند، چطور متغیرهای رشته ای رو به عددی تبدیل کنیم، در مورد ثابت ها صحبت کنیم و... همچنین با یکی دوتای دیگه از اشیاء آشنایی پیدا کنیم.
سلام وقت بخیر من تازه سی شارپ رو شروع کردم و میخوام یه برنامه بنویسم که اسم و فامیل و رو بگیره و با کلیک انو چاپ کنه کد هم نوشتم ارور هم نمیده ولی نمیدونم چرا چاپ نمیکنه