در قسمت قبل با چکونگی کار با حلقهی for و while تا حدودی آشنا شدید و بهمنظور درک بهتر مطالب چندین تمرین قرار داده شد. در این قسمت به مباحث تکمیلی مواردی که تاکنون ذکر شده میپردازیم و در نهایت به حل تمرینهای ۱ تا ۴ خواهیم پرداخت.
همانطور که در قسمت قبل گفته شد در حلقهی for و while تا زمانیکه شرط برقرار است، حلقه اجرا میشود و بهمحض اینکه شرط نقض شد کامپایلر از حلقه خارج میشود.
به مثال زیر توجه کنید:
using System; class Example { static void Main(string[] args) { for (int x = 100; x > -100; x -= 5) Console.WriteLine(x); } }
اگر برنامه بالا را اجرا کنید میبینید حلقه تا زمانیکه شرط (condition) برقرار است از مقدار x میکاهد و پیوسته آنرا نمایش میدهد. نکتهی دیگر در این برنامه حذف بلاک حلقه بهعلت تک بودن statement sequence و تعریف کردن متغیر روی حلقه است.
به مثال زیر دقت کنید:
using System; class Example { static void Main() { for (int i = 0; i < 20; i++) { if (i % 2 == 0) { Console.WriteLine(i); } } } }
در این برنامه علامت ٪ (علامت مادولس Modulus) یکی از عملگرهای محاسباتی است که باقیماندهی تقسیم را نشان میدهد. در اینجا باقیماندهی تقسیم مقدار i بر ۲ محاسبه میشود و اگر برابر با صفر بود مقدار i چاپ میشود. بهتر است این برنامه را دقیقتر بررسی کنیم. همانطور که میبینید متغیر i روی حلقه معرفی شده است و تا زمانی که مقدار i کوچکتر از ۲۰ است حلقه تکرار میشود. ابتدا i برابر با صفر و همچنین کوچکتر از ۲۰ است پس وارد حلقه میشود. درون حلقه، دستور if بررسی میکند که آیا باقیماندهی تقسیم i بر ۲ برابر با صفر است یا خیر. همانطور که میدانید باقیماندهی تقسیم صفر بر ۲ برابر با صفر است، بنابراین مقدار i چاپ میشود. مجدداً یک واحد به i اضاف و مقدار i برابر با ۱ شده و برنامه وارد حلقه میشود. درون حلقه دستور if شرط را بررسی میکند و همانطور که میدانید باقیماندهی تقسیم ۱ بر ۲ مخالف صفر است بنابراین بلاک if اجرا نشده و مقدار i چاپ نمیشود. به همین ترتیب تا عدد ۲۰ بررسی میشود و اعداد زوج بین صفر تا ۲۰ توسط این برنامه نمایش داده میشوند.
به مثال زیر دقت کنید:
using System; class Example { static void Main() { int i; //counting by fives Console.WriteLine("Counting by fives:"); for (i = 0; i <= 100; i += 5) { Console.Write(i + "\t"); } Console.WriteLine(); Console.WriteLine(); //count backwards Console.WriteLine("Counting backwards:"); for (i = 10; i > 0; i--) { Console.Write(i + "\t"); } Console.WriteLine(); Console.WriteLine(); //counting by multiple of 3 Console.WriteLine("Multiple of 3:"); for (i = 0; i < 20; i++) { if (i % 3 == 0) { Console.Write(i + "\t"); } } Console.WriteLine(); Console.WriteLine(); } }
خروجی:
در حلقهی اول این برنامه، اعداد صفر تا صد به صورت افزایش ۵ واحدی نمایش داده شدهاند. همانطور که میبینید در قسمت iteration به مقدار i توسط عملگر افزایشی =+ در هر بار که حلقه تکرار میشود ۵ واحد افزوده میشود و درون حلقه، هنگام نمایش i از t\ استفاده شده که به اندازه یک tab افقی (به اندازه ۴ کاراکتر) فاصله ایجاد میکند و خروجی منظمتری شکل میگیرد. نکتهی دیگر در این مثال استفاده از دستور ()Console.Write است که خروجی را در خط جدید چاپ نکرده و در همان خط چاپ میکند. در حلقهی بعدی، اعداد صفر تا ۱۰ به صورت معکوس چاپ شدهاند که برای این منظور از عملگر کاهشی — استفاده شده است. در حلقهی بعدی، مضارب ۳ اعداد صفر تا ۲۰ نمایش داده شده که اینکار توسط مادولس (٪) انجام شده است. حتماً تاکنون متوجه شدهاید که برای نمایش مضارب یک عدد در یک بازه کافی است که توسط دستور if بررسی کنید که آیا مادولس آن عدد بر مضربی که مورد نظر شماست صفر میشود یا خیر.
حل تمرینهای ۱ تا ۴:
using System; class Solutions { static void Main() { /* Solution 01 */ Console.WriteLine("Even numbers from 0 to 100:"); for (int i = 0; i <= 100; i++) { if (i % 2 == 0) Console.Write(i + "\t"); } Console.WriteLine(); Console.WriteLine(); /* Solution 02 */ Console.WriteLine("Counting backwards from 1 to 100:"); for (int i = 100; i >= 1; i--) Console.Write(i + "\t"); Console.WriteLine(); Console.WriteLine(); /* Solution 03 */ Console.WriteLine("Odd numbers from 0 to 100:"); for (int i = 0; i < 100; i++) { if (i % 2 != 0) Console.Write(i + "\t"); } Console.WriteLine(); Console.WriteLine(); /* Solution 04 */ Console.WriteLine("Multiple of 5 from 0 to 100"); for (int i = 0; i < 100; i++) { if (i % 5 == 0) Console.Write(i + "\t"); } Console.WriteLine(); } }
توضیحات لازم در مورد چگونگی حلتمرینها در همین قسمت داده شده است. تمرین شماره ۵ در قسمت بعد حل خواهد شد.
پیرو
11 October 2012
با سلام.
تشکر می کنم از وقتی که برای این آموزش ها می گذارید ولی خوب یه کم زیادی مبتدی هستند و برای کسی که با یک زبان برنامه نویسی آشنایی دارد و قصد کوچ به سی شارپ را دارد اصلا مناسب نیست. آموزش های پیشرفته از چه شماره ای به بعد شروع می شود و آیا اصلا قصد آموزش پیشرفته دارید ؟
با تشکر از شما.
مسعود درویشیان
13 October 2012
سلام
این آموزشها از مبتدی شروع شدن و پیوسته همهی سرفصلهای سیشارپ رو در بر میگیرن. هدف هم از این آموزش این بوده که هرکسی بتونه آموزشها رو دنبال کنه (مخصوصاً کسایی که آشنایی ندارند)
حدوداً نزدیکای قسمت 20 وارد شیگرایی میشیم
ماندانا
13 October 2012
سلام
اول از همه تشکر می کنم
دوم گفته اید دوره ها 100 قسمت است و هفته ای دو قسمت را در سایت قرار می دهید(یعنی 50 هفته) مهندس جان خیلی طولانی نمی شه اگر هفته ای 3الی 4 بار بشه بسیار ممنون می شویم
مسعود درویشیان
13 October 2012
سلام
100 قسمت رو تقریبی گفتیم ممکنه بیشتر هم بشه. فعلاً که بنا به مشکلاتی مقالات هفتهای 1 قسمت منتشر میشه اما حجم محتوای هر قسمت رو بیشتر میکنیم تا خیلی طولانی و خسته کننده نشه
فرشیده
14 October 2012
با تشکر از این همه وقتی که میگذارید من یک مبتدی هستم و از این روال آموزشی که دارید به خوبی بهره میگیرم ممنون از شما
مسعود درویشیان
14 October 2012
ممنون از لطفتون. امیدوارم که بهره کافی رو ببرید. توی هر قسمتی هم که مشکل داشتید در بخش نظرات بیان کنید تا پاسخ سوالتون داده بشه :)
فرشیده
14 October 2012
لطفا بفرمایید چگونه میشه دو عدد را با هم بدون در نظر گرفتن متغییر سوم جا بجا کرد.؟
مسعود درویشیان
14 October 2012
اگه مشکلی بود بفرمایید تا بیشتر توضیح بدم:
مسعود درویشیان
14 October 2012
قسمت مهم برنامه هم اینه:
که عملیات جابهجا کردن رو انجام میده
فرشیده
15 October 2012
از راهنمائی شما خیلی متشکرم لطف زیادی در حقم کردید. و از مطالبتون بهره زیادی میبرم.
مسعود درویشیان
15 October 2012
خواهش میکنم
موفق باشید.
میلاد
18 October 2012
با سلام. واقعاً ممنونم. از کلمه اول تا کلمه آخرش رو خوندم . و قصد دارم تا آخرش ادامه بدم. متن و نوع نوشته هاتون طوری بودش که بیشتر مجذوب می شدم هی بخونم. با تشکر. امیدوارم که موفق و موید باشید.
مسعود درویشیان
18 October 2012
سلام. ممنون شما لطف دارید. امیدوارم که این مقالهها براتون مفید واقع بشه :)
میلاد
18 October 2012
منتظر مطالبه بعدی هستم.از ده به بعد نیستش..
راستی یه سوال دارم که خیلی کلنجار رفته که حلش کنم ولی متاسفانه نشد
برای داده های اعشاری و صحیح در دستور زیر پارامترهایی بنویسید تا خروجی را قالب بندی یا فرمت بندی کند.یعنی انتخاب یک بازه برای نمایش.
یعنی گرد کردن رقم های اعشار در یک حد مشخص و برای اعداد صحیح را بنویسید.
WriteLine.
مسعود درویشیان
18 October 2012
سلام
برای گرد کردن و قالببندی شکل خروجی اعداد اعشاری میتونید از 2 روش زیر استفاده کنید:
۱. استفاده از روش String Formatting
۲. استفاده از متد ()Math.Round
روش String Formatting:
استفاده از متد ()Math.Round:
اگه به راهنمایی بیشتری نیاز بود اطلاع بدید.
موفق باشید.
کوثر
12 September 2013
چه جالب!
مثل همیشه عالی بود
ممنون.
بیشتر تاریخ پست ها مربوط به سال 1391 هستش ولی من تازه با این سایت آشنا شدم!
میلاد
19 October 2012
تشکر – ممنونم از راهنمایی هاتون
مهدی
16 November 2012
پاینده باشی و برقرار
Praise
13 December 2012
سلام دز Solution 1 خط هشتم برنامه به نظر اشتباه میاد !! :
for (int i = 0; i == 0; i–)
مسعود درویشیان
13 December 2012
اصلاح شد. ممنون
علیرضا
26 January 2013
سلام.
برای بدست اوردن !6 چه جوری باید کد نویسی کنیم؟
برای بدست اوردن مضارب عدد 7؟!
راستی من خیلی سوال دارم ؟چرا جواب نمیدین؟
مردم از بس منتظر موندم !
سایت خیلی توپی دارین واقعا دستتون درد نکنه این اولین سایت اموزشی بود که ازش خوشم اومده ؟
مسعود درویشیان
28 January 2013
سلام.
فاکتوریل:
مضارب هر عدد 7:
برای بهدست آوردن مضارب هر عددی همینکار رو میکنید.
اگه بازم سوالی بود حتماً بپرسید.
داوود
2 April 2013
سلام؛
برنامه رو اصلاح کردم و حالا اگه منفی وارد بشه پیغام میده و میاد بیرون؛ جای IF رو تغییر دادم.
میلاد
24 April 2013
با سلام و خسته نباشید
خیلی ممنون برای مطالبی ک مینویسید
خیلی بدرد بخور هستند
تنتون سالم انشالا
موفق باشید
با تشکر
مسعود درویشیان
24 April 2013
سلام ممنون، امیدوارم براتون مفید باشه
Mersad
4 August 2013
مطالبتون لذت بخشه برام
خداوند متعال بهتون عزت و سربلندی عطا کنه.
ان شا الله تا آخر با مقالاتتون برای فراگیری زبون سی شارپ پیش میرم.
ابراهیم
31 August 2013
سلام ممنون از اموزش های خوبتون من می خوام عددی رو بدم بدونم که عدد تام هست یا نه اگه امکان داره کمکم کنید
ali
31 August 2013
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int i, number, sum = 0;
number = Convert.ToInt16(textBox1.Text);
for (i = 1; i < number; i++)
{
if (number % i == 0)
sum += i;
}
if (sum == number)
label1.Text = "tam";
else
label1.Text = "nist";
}
}
}
مسعود درویشیان
5 October 2013
اگه قسمت شیگرایی رو متوجه نشدید مهم نیست، مهم محاسبات توی PerfectNum هست:
رضا
8 December 2013
سلام و خسته نباشید و تشکر فراوان بابت زحمتی که بی چشم داشت و با صرف وقت فراون اون هم با این همه دقت متقبل شدید.
من یک بار تا حدود درسهای سی و چهار سی و پنج پیش رفتم و بعد متوجه شدم بهتره برگردم از اول و با دقت بیشتر بخونم .
حالا اینجا سوالهایی که برام پیش اومده اینه که
1 . در تمرینی که آقا داوود نوشتن در خط هشتم نوشته while (true) من متوجه نمی شم منظور اینه که تا زمانی که چه چیزی برقرار هست؟؟!! .اگه اشتباه نکنم اینو در درسهای بعدی در مثالهای خودتونم دیده بودم.
2 . در خط یازدهم نوشته شده if (MyNumber < 0)
من متوجه نمی شم این چه جور if ای هست
< یعنی چی ؟ سمی کالن وسط کاندیشن چیکار میکنه ؟
ممنون میشم اگه جواب بدید.
رضا
8 December 2013
الان که کامنت خودم چاپ شد متوجه شدم علامت کوچکتر ( > ) در مطلبی که ایشون نوشته بودند به این شکل تغیر پیدا کرده بود & l t ; که باعث شد من سردرگم شم .
ولی سوالم در مورد while پابرجاست
مسعود درویشیان
9 December 2013
(while(true یه حلقهی بینهایت هست. اگر دقت کرده باشید توی قسمت condition یه حلقه باید یه مقدار true/false باشه. که اگه true باشه برنامه وارد حلقه میشه و اگه false باشه برنامه وارد حلقه نمیشه. حالا وقتی میگیم (while(true یعنی که این حلقه همیشه شرطش برقرار هست و تا بی نهایت اجرا میشه
رضا
10 December 2013
بسیار عالی
خیلی متشکرم از راهنماییتون
پس اگه درست متوجه شده باشم یعنی یک حلقه که بدون نیاز به یک شرط یک عملیات رو تکرار میکنه ولی احتمالا درون بدنه ی حلقه لازم هست شرطی برای خروج از بدنه در نظر گرفته بشه.
درست متوجه شدم ؟
مسعود درویشیان
10 December 2013
بله درسته؛ شرط این حلقه همیشه true هست.
داود حاجی پور
23 December 2013
بازم سلام جناب آقای درویشیان ، در قسمتهای قبل چندین بار ازتون تشکر کردم ولی الان که به قسمت دهم رسیدم بازم می بینم که باید دوباره تشکر کنم انصافا تمامی مطالبو طوری در بین درسها گنجاندین که برای من تازه کار فوق العاده شیرین و جذاب بنظر می آد و مهم تر اینکه اصلا سخت که نیست بلکه آسان و ساده هم هست البته با شیوه خاص تدریسی شما ، بازم تشکر و باز هم تشکر ، داود حاجی پور از تبریز
حسین
31 December 2013
سلام ، یه سوال؟؟؟
اگه من بخوام یه عملیات چند بار تکرار بشه ، و نمیدونمم که چند باره،باید چه کنم؟
مثلا یه برنامه ارسال انبوه ایمیل دارم ، و ادرس های ایمیل هام را هم توی یه فایل تکسته که هر ادر تو یه خطه!
خوب حالا عملیات من باید به تعداد خط ها یا ایمیل هام اجرا بشه!
ابنجا دو تا مشکل دارم ! اول این که ، چطوری به برنامه بگم این عملیات را به تعداد ایمیل ها انجام بده؟؟؟؟
دوم این که چطوری ادرس هر ایمیل توی عملیاتم وارد کنم که همش قط برای یه نفر نره؟؟؟
امید وارم منظورم را متوجه شده باشی؟؟
ممنون؟
بهم ایمیل بزن!
سعید
1 June 2014
خوب بود دوست عزیزم
علی
18 July 2014
مطالبتون واقعا مفیده!
اردلان
28 August 2014
سلام دوست عزیز
می شه جواب حسین و برای ما هم ارسال کنی
ممنون
aida
11 January 2015
دستور switchرو پیدانمیکنم کجااااااااست :(
zeinabi88
11 July 2015
سلام وقتتون بخیر مقاله تون خیلی خوب بود سپاس فراووووووون
میشه فقط لطف کنید جواب سوال آقا حسین رو اگه شرایطش هست برا منم ایمیلش کنید.
با سپاس
فروتن رحمانی÷÷
15 January 2017
چجوری میتونم دو تا عدد بزرگو به توان هم برسونم و تعداد ارقامو بگیرم
هلنا
21 February 2017
سلام دستور چاپ مستطیل توخالی رومیخواستم یعنیدوعدد بدهموفقط اضلاع ان * باشد
iman
24 December 2017
سلام خسته نباشيد. خيلي ممنونم بابت اين اموزش جامع و بسيار روان
مهندس يه سوال برام پيش اومد شما در تمرين اول علامت تقسيم گذاشتيد !! چجوري مثلا دو تقسيم بر شش ميشه صفر يا …!!!!!!!
iman
24 December 2017
سلام جناب مهندس خسته نباشيد.
در مثال مضارب ٣ اعداد ٠ تا ٢٠ وقتي كه درون حلفه ي for شما يك شرط گذاشتيد بنده نفهميدم كه چطور وقتي دوتا عدد مينويسين و بينشون علامت مضرب ميذارين برابر صفر ميشه!! ممنون ميشم برام روشن كنيد كه از پايه به مشكل نخورم!
mostafa
5 February 2018
سلام
قسمت 16 نیست