در قسمت قبل در مورد حلقهی for مثال بیشتری زده شد و تمرینهای ۱ تا ۴ حل شدند. در این قسمت به چندین مثال تکمیلیتر در مورد حلقهی while میپردازیم و در نهایت تمرین شماره ۵ حل خواهد شد. حل تمرینات برای یادگیری ضروری هستند پس سعی کنید در ابتدا خودتان برای حل آنها تلاش لازم را انجام دهید.
همانطور که پیشاز این در مورد حلقهی while توضیح داده شد، ساختار این حلقه به صورت زیر است:
while (condition) statement;
که statement میتواند تنها یا بلاکی از statement ها باشد و condition یک عبارت شرطی است که شرط حلقه را چک میکند و میتواند هر نوع عبارت بولینی باشد. همینطور دانستید تا زمانیکه condition برابر با true است statement اجرا میشود. در ادامه برای فهم بهتر مطالب از الگوریتم و فلوچارت نیز بهره میبریم، برای یادگیری الگوریتم و فلوچارت پیشنهاد میشود این مطلب کوتاه و مفید را که نوشتهی امید شمس دیوبند است مطالعه بفرمایید.
به فلوچارت زیر دقت کنید:
همانطور که پیداست، شرط بررسی شده و در صورت true بودن بدنهی حلقه اجرا میشود.
به نمونهی زیر دقت کنید:
static void Main() { int number = 1; while (number > 0) Console.WriteLine("Hello"); }
در اینجا، شرط 0 < number بررسی میشود که برابر با true است، بنابراین عبارت Hello نمایش داده میشود. دوباره شرط 0 < number بررسی میشود و مجدداً Hello چاپ میشود. بهدلیل اینکه هیچچیزی متغیر number را تغییر نمیدهد، این حلقه تا بینهایت اجرا خواهد شد و پیوسته شرط را چک میکند (که همیشه برابر با true است) و Hello را نمایش میدهد. برای اینکه یک حلقهی while بهدرستی پایان یابد، باید ۳ کار بهصورت جداگانه انجام شود:
- قبل از ورود به حلقه باید یک متغیر که کنترلکنندهی حلقه است معرفی شود.
- متغیر کنترلکنندهی حلقه باید در قسمت condition مورد بررسی قرار گیرد.
- در بدنهی حلقه باید عملی انجام شود که متغیر کنترلکنندهی حلقه تغییر یابد (تا در نهایت مقدار condition برابر با false شود).
به مثال زیر دقت کنید:
using System; class Example { static void Main() { int number = 1; int limit = 5; while (number <= limit) { Console.WriteLine("Number is " + number); number++; } Console.WriteLine("Done!"); } }
همانطور که میبینید ابتدا متغیر کنترلکنندهی حلقه تعریف شده، سپس در قسمت condition بررسی میشود و در نهایت در بدنهی حلقه تغییر مییابد.
فلوچارت این برنامه:
حلقهی do-while
یکی دیگر از حلقههای سیشارپ، حلقهی do-while است. برخلاف حلقهی for و while که شرط در بالای حلقه بررسی میشد، در do-while شرط در پایین حلقه بررسی میشود و بههمین دلیل، این حلقه همیشه حداقل یکبار اجرا میشود. فرم کلی آن به شکل زیر است:
do { statements; } while(condition);
در این حلقه نیز تا زمانیکه conditon برابر با true است، statement اجرا میشود. البته قبل از اینکه برنامه به condition برسد statement یکبار اجرا میشود.
به مثال زیر توجه کنید:
using System; class Example { static void Main() { int number = 1; int limit = 5; do { Console.WriteLine("Number is " + number); number++; } while (number <= limit); } }
خروجی و عملکرد این برنامه همانند مثال قبلی در حلقهی while است با این تفاوت که شرط در پایین حلقه چک میشود.
به این مثال دقت کنید:
using System; class Example { static void Main() { int number = 3; do { Console.WriteLine("False condition, once execute!"); } while (number < 2); } }
اگر این برنامه را اجرا کنید متوجه میشوید با اینکه شرط برقرار نیست ولی پیغام نمایش داده میشود. علت این است که شرط در پایین حلقه بررسی میشود و statement حداقل یکبار اجرا خواهد شد.
حل تمرین شماره ۵:
using System; class Example { static void Main() { /* Solution 05 */ Console.WriteLine("Even numbers from 1 to 100:"); int i = 1; while (i <= 100) { if (i % 2 == 0) { Console.Write(i + "\t"); } i++; } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Counting backwards from 1 to 100:"); int j = 100; while (j >= 1) { Console.Write(j + "\t"); j--; } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Odd numbers from 1 to 100:"); int h = 1; while (h <= 100) { if (h % 2 != 0) { Console.Write(h + "\t"); } h++; } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Multiple of 5 from 1 to 100"); int k = 1; while (k <= 100) { if (k % 5 == 0) { Console.Write(k + "\t"); } k++; } Console.WriteLine(); } }
در قسمت بعد به مثالهای بیشتر و توضیحات تکمیلیتر میپردازیم.
diho
18 October 2012
سلام وخسته نباشید
مرسی بابت آموزشهاتون
یکم وقفه افتاده بین آپدیتهاتون
اگه منظم باشه دلگرمی بیشتر برای دنبال کردن مطالب به ادم میده
ممنون
مسعود درویشیان
18 October 2012
سلام
مقالات از این به بعد هفتهای یک قسمت منتشر میشه
ولی حجم محتوای هر قسمت رو بیشتر میکنیم تا سرعت پیشروی کند نباشه
mandana
18 October 2012
سلام
مهندس جان یک سوال دارم
برنامه ای می خواهم که شکل زیر را تولید کند
+ + + + +
* * * * *
شکل بالا را 10 خط تولید
آیا فقط باید دومتغیر stringتعریف کرد و10 بارکد زیر را بنویسیم
لطفا کد خود را بنویسید
باتشکر
مسعود درویشیان
18 October 2012
سلام. لطفاً سوالتون رو واضحتر بیان کنید.
mandana
18 October 2012
سلام
مهندس جان می حواهم در خط اول پنچ ستاره باشد و در خط دوم چهار بعلاو قرار گیرد اما بشرطی که بعلاو ها مابین دوستاره باشند و دو ردیف هر کدام 5 بار تکرار شوند
باتشکر
مسعود درویشیان
18 October 2012
بفرمایید:
البته هنوز حلقههای تو در تو توضحح ندادیم ولی توی قسمتهای آینده بیان میشه
مسعود درویشیان
18 October 2012
البته از این روش ساده هم میشه انجام داد. بستگی داره چه روشی مد نظر شما باشه
میلاد
19 October 2012
باز هم ممنون..
در پناه حق – امیدوارم که موفق باشین – منتظر ادامه مطالب ایم
میلاد
19 October 2012
باسلامی دوبازه
دوتا سوال به ذهنم رسیده شاید سوال دوستای دیگه هم باشه:
1- چرا برای یادگیری سی شارژ رو باید از کنسول شروع کرد؟دلیل استفاده از این محیط چی هستش؟ آیا سادگی کار هستش یا چیز دیگه.
2- در صورت امکان در مورد wcf توضیحاتی بدین پک آموزشی به زبان فارسی و لاتین رو دارم ولی متاسفانه نه میدونم از کجا باید شروع کرد.
باز هم تشکر بابت ریل تایم(Realtime) بودن پاسخ ها
میلاد
19 October 2012
ضمناً WPF نیز هستش
مسعود درویشیان
19 October 2012
سلام
انتخاب کنسول به این دلیل بوده که یه محیط ساده، قابل فهم و بدون پیشنیاز هست. هدف ما هم آموزش زبان سیشارپ هست که برای شروع این محیط، ایدهآلترین گزینه هست. قبلاً هم دوستان در قسمتهای قبلی این سوال رو پرسیده بودند و توضیح دادیم که وقتی شما زبان سیشارپ رو یاد بگیرید دیگه فرقی نمیکنه که توی چه محیطی میخواهید ازش استفاده کنید (وب، موبایل، ویندوز و…) چون به راحتی میتونید با یه مطالعهی مختصر و آشنایی با محیط مورد نظر، برنامهنویسی رو روی اون محیط شروع کنید.
در مورد WPF هم میتونید از این لینک یه سری اطلاعات کسب کنید.
موفق باشید.
میلاد
19 October 2012
تشکر
داوود
24 October 2012
با سلام؛
ضمن تقدیر از شما در این تکه کد چرا ابتدا عدد 8 چاپ نمیشه و 9 چاپ میشه؟ آیا بخاطر پیشوندی و پسوندی است؟
در صورتی که منطقا ابتدا از مقدار a یکی کم میشه که میشه 9 ، بعدش متغیر b همین عدد رو با یکی کمتر باید نشون بده که در اینجا داره 9 نشون میده! مگه نباید الان عدد 8 بعنوان عدد اول چاپ بشه؟
مسعود درویشیان
24 October 2012
توی این مثال ابتدا مقدار a برابر با 10 هست. وقتیکه --a میشه هنوز مقدار a برابر با 10 هست. وقتیکه برنامه رفت سراغ خط بعد تازه مقدار a میشه 9، که توی همون خط بازهم --a هست که برابر با b قرار داده شده. تا اینجای برنامه مقدار a هنوز 9 هست و همین 9 توی b ریخته میشه چون برنامه باید ازین خط هم رد بشه تا مقدار a یکی دیگه کاهش پیدا کنه.
چون از -- پسوندی استفاده شده این اتفاق میافته اگه -- پیشوندی بود اول 8 چاپ میشد.
ما توی قسمت هشتم مفصل روی این موضوع بحث کردیم. اگه متوجه نشدید پیشنهاد میکنم دوباره اون قسمت رو بخونید.
داوود
26 October 2012
خیلی ممنونم ازتون، کاملا فهمیدم و متوجه موضوع شدم.
مرسی
فرشید
24 October 2012
1-برنامه ای که بتواند 20 جمله اول سری فیبو نانچی را نمایش دهد با حلقه for
2- برنامه ای که بتونه این اعداد را نمایش دهد البته حلقه تو در تو
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1 ببخشید که باعث زحمت شما میشم
مسعود درویشیان
24 October 2012
سری فیبوناچی:
حلقههای تو در تو رو توی قسمتهای آینده توضیح میدیم.
داوود
4 November 2012
سلام
این هم هستش:
امیر رضا
24 October 2012
آقا مسعود واقعا نمی دونم با چه زبونی از شما باید تشکر کنم من یک مبتدی هستم در زمینه یادگیری زبان سی شارپ که با صرف هزینه های زیاد از قبیل خرید کتابهای دیتیل و سی دی های آموزشی بظاهر کاربردی تا کنون نتونستم به اون نتیجه ای که مورد توقع یک برنامه نویس است برسم الان که مقاله های شما رو دانلود کردم با یک محیط جدید و کاملا متفاوتی با مجموعه هایی که تا الان پشت سر گذاشته شده متوجه شدم و نکته ای که خیلی پررنگ به نظر میرسه اینه که مطمئن هستم این نظر حرفه ای ها هم می باشد در هر صورت نهایت تشکر و قدر دانی از شما دوست عزیز رو دارم با آرزوی سلامتی و نشاط و روزهایی خوش برای شما و همه دست اندر کاران / دهقان
مسعود درویشیان
24 October 2012
سلام. خوشحالم که تا الان این مقالهها براتون مفید بوده
موفق باشید
فرشید
24 October 2012
خیلی ممنون از راهنمائی شما بی صبرانه منتظر آموزشهای بعدی هستم امیدوارم اعدا د تصادفی را هم به زودی از شما یاد بگیرم من گاه گریزی به مطالب دیگه میزنم. اما برای حل مسائل گاه با مشکل روبه رو میشم.
میلاد
24 April 2013
با سلام و خسته نباشید
خیلی ممنون برای مطالبی ک مینویسید
خیلی بدرد بخور هستند
تنتون سالم انشالا
موفق باشید
میلاد
24 April 2013
سلام
خسته نباشید
اگه بخواهیم که با گرفتن عدد از کاربر یک مثلث تو خالی بکشیم چه کار باید کرد
مثل شکل زیر:
*
* *
* *
* *
* *
*******
با تشکر
میلاد
24 April 2013
جاهای خالی خراب شدن
به جای جاخالی “.” میزارم
*
*.*
*…*
*…..*
*…….*
*******
میلاد
24 April 2013
[cs] private static void MosalasTooKhali(int n)
{
Console.WriteLine(” * “);
Console.WriteLine(” * * “);
for (int row = 3; row < n; row++)
{
Console.Write(" * ");
for (int i = 3; i <= row; i++)
{
Console.Write(" ");
}
Console.WriteLine(" * ");
}
for (int i = 1; i <= n; i++)
{
Console.Write(" * ");
}
} [cs]
Mersad
4 August 2013
سلام
من دارم مقالاتتون رو دنبال میکنم
میخواستم بدونم آیا تو سرفصل هاتون ارتباط با دیتابیس و کلا نوشتن برنامه های دیتابیسی هم هست؟
اگه آره، تقریبا از چه قسمتی این مباحث شروع میشه؟
خیلی ممنون از زحماتتون
مسعود درویشیان
4 August 2013
سلام نه با دیتابیس کار نمیکنیم.
سعید
1 June 2014
اگه مباحث مربوط به ارتباط با دیتابیس با تکنولوژی Entity Framework رو بذارین، خیلی عالی میشه آقا مسعود
aida
11 January 2015
من تیزهوشان درس میخونم مرسی از برنامه هاتون ولی چیزی که من میخام بینشون نیست متاسفانه ولی خیلی متشکرم عالیه