در قسمت قبل با چکونگی کار با حلقهی 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(); } }
توضیحات لازم در مورد چگونگی حلتمرینها در همین قسمت داده شده است. تمرین شماره ۵ در قسمت بعد حل خواهد شد.
پیرو
۲۰ مهر ۱۳۹۱
با سلام.
تشکر می کنم از وقتی که برای این آموزش ها می گذارید ولی خوب یه کم زیادی مبتدی هستند و برای کسی که با یک زبان برنامه نویسی آشنایی دارد و قصد کوچ به سی شارپ را دارد اصلا مناسب نیست. آموزش های پیشرفته از چه شماره ای به بعد شروع می شود و آیا اصلا قصد آموزش پیشرفته دارید ؟
با تشکر از شما.
مسعود درویشیان
۲۲ مهر ۱۳۹۱
سلام
این آموزشها از مبتدی شروع شدن و پیوسته همهی سرفصلهای سیشارپ رو در بر میگیرن. هدف هم از این آموزش این بوده که هرکسی بتونه آموزشها رو دنبال کنه (مخصوصاً کسایی که آشنایی ندارند)
حدوداً نزدیکای قسمت ۲۰ وارد شیگرایی میشیم
ماندانا
۲۲ مهر ۱۳۹۱
سلام
اول از همه تشکر می کنم
دوم گفته اید دوره ها ۱۰۰ قسمت است و هفته ای دو قسمت را در سایت قرار می دهید(یعنی ۵۰ هفته) مهندس جان خیلی طولانی نمی شه اگر هفته ای ۳الی ۴ بار بشه بسیار ممنون می شویم
مسعود درویشیان
۲۲ مهر ۱۳۹۱
سلام
۱۰۰ قسمت رو تقریبی گفتیم ممکنه بیشتر هم بشه. فعلاً که بنا به مشکلاتی مقالات هفتهای ۱ قسمت منتشر میشه اما حجم محتوای هر قسمت رو بیشتر میکنیم تا خیلی طولانی و خسته کننده نشه
فرشیده
۲۳ مهر ۱۳۹۱
با تشکر از این همه وقتی که میگذارید من یک مبتدی هستم و از این روال آموزشی که دارید به خوبی بهره میگیرم ممنون از شما
مسعود درویشیان
۲۳ مهر ۱۳۹۱
ممنون از لطفتون. امیدوارم که بهره کافی رو ببرید. توی هر قسمتی هم که مشکل داشتید در بخش نظرات بیان کنید تا پاسخ سوالتون داده بشه :)
فرشیده
۲۳ مهر ۱۳۹۱
لطفا بفرمایید چگونه میشه دو عدد را با هم بدون در نظر گرفتن متغییر سوم جا بجا کرد.؟
مسعود درویشیان
۲۳ مهر ۱۳۹۱
اگه مشکلی بود بفرمایید تا بیشتر توضیح بدم:
مسعود درویشیان
۲۳ مهر ۱۳۹۱
قسمت مهم برنامه هم اینه:
که عملیات جابهجا کردن رو انجام میده
فرشیده
۲۴ مهر ۱۳۹۱
از راهنمائی شما خیلی متشکرم لطف زیادی در حقم کردید. و از مطالبتون بهره زیادی میبرم.
مسعود درویشیان
۲۴ مهر ۱۳۹۱
خواهش میکنم
موفق باشید.
میلاد
۲۷ مهر ۱۳۹۱
با سلام. واقعاً ممنونم. از کلمه اول تا کلمه آخرش رو خوندم . و قصد دارم تا آخرش ادامه بدم. متن و نوع نوشته هاتون طوری بودش که بیشتر مجذوب می شدم هی بخونم. با تشکر. امیدوارم که موفق و موید باشید.
مسعود درویشیان
۲۷ مهر ۱۳۹۱
سلام. ممنون شما لطف دارید. امیدوارم که این مقالهها براتون مفید واقع بشه :)
میلاد
۲۷ مهر ۱۳۹۱
منتظر مطالبه بعدی هستم.از ده به بعد نیستش..
راستی یه سوال دارم که خیلی کلنجار رفته که حلش کنم ولی متاسفانه نشد
برای داده های اعشاری و صحیح در دستور زیر پارامترهایی بنویسید تا خروجی را قالب بندی یا فرمت بندی کند.یعنی انتخاب یک بازه برای نمایش.
یعنی گرد کردن رقم های اعشار در یک حد مشخص و برای اعداد صحیح را بنویسید.
WriteLine.
مسعود درویشیان
۲۷ مهر ۱۳۹۱
سلام
برای گرد کردن و قالببندی شکل خروجی اعداد اعشاری میتونید از ۲ روش زیر استفاده کنید:
۱. استفاده از روش String Formatting
۲. استفاده از متد ()Math.Round
روش String Formatting:
استفاده از متد ()Math.Round:
اگه به راهنمایی بیشتری نیاز بود اطلاع بدید.
موفق باشید.
کوثر
۲۱ شهریور ۱۳۹۲
چه جالب!
مثل همیشه عالی بود
ممنون.
بیشتر تاریخ پست ها مربوط به سال ۱۳۹۱ هستش ولی من تازه با این سایت آشنا شدم!
میلاد
۲۸ مهر ۱۳۹۱
تشکر – ممنونم از راهنمایی هاتون
مهدی
۲۶ آبان ۱۳۹۱
پاینده باشی و برقرار
Praise
۲۳ آذر ۱۳۹۱
سلام دز Solution 1 خط هشتم برنامه به نظر اشتباه میاد !! :
for (int i = 0; i == 0; i–)
مسعود درویشیان
۲۳ آذر ۱۳۹۱
اصلاح شد. ممنون
علیرضا
۷ بهمن ۱۳۹۱
سلام.
برای بدست اوردن !۶ چه جوری باید کد نویسی کنیم؟
برای بدست اوردن مضارب عدد ۷؟!
راستی من خیلی سوال دارم ؟چرا جواب نمیدین؟
مردم از بس منتظر موندم !
سایت خیلی توپی دارین واقعا دستتون درد نکنه این اولین سایت اموزشی بود که ازش خوشم اومده ؟
مسعود درویشیان
۹ بهمن ۱۳۹۱
سلام.
فاکتوریل:
مضارب هر عدد ۷:
برای بهدست آوردن مضارب هر عددی همینکار رو میکنید.
اگه بازم سوالی بود حتماً بپرسید.
داوود
۱۳ فروردین ۱۳۹۲
سلام؛
برنامه رو اصلاح کردم و حالا اگه منفی وارد بشه پیغام میده و میاد بیرون؛ جای IF رو تغییر دادم.
میلاد
۴ اردیبهشت ۱۳۹۲
با سلام و خسته نباشید
خیلی ممنون برای مطالبی ک مینویسید
خیلی بدرد بخور هستند
تنتون سالم انشالا
موفق باشید
با تشکر
مسعود درویشیان
۴ اردیبهشت ۱۳۹۲
سلام ممنون، امیدوارم براتون مفید باشه
Mersad
۱۳ مرداد ۱۳۹۲
مطالبتون لذت بخشه برام
خداوند متعال بهتون عزت و سربلندی عطا کنه.
ان شا الله تا آخر با مقالاتتون برای فراگیری زبون سی شارپ پیش میرم.
ابراهیم
۹ شهریور ۱۳۹۲
سلام ممنون از اموزش های خوبتون من می خوام عددی رو بدم بدونم که عدد تام هست یا نه اگه امکان داره کمکم کنید
ali
۹ شهریور ۱۳۹۲
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";
}
}
}
مسعود درویشیان
۱۳ مهر ۱۳۹۲
اگه قسمت شیگرایی رو متوجه نشدید مهم نیست، مهم محاسبات توی PerfectNum هست:
رضا
۱۷ آذر ۱۳۹۲
سلام و خسته نباشید و تشکر فراوان بابت زحمتی که بی چشم داشت و با صرف وقت فراون اون هم با این همه دقت متقبل شدید.
من یک بار تا حدود درسهای سی و چهار سی و پنج پیش رفتم و بعد متوجه شدم بهتره برگردم از اول و با دقت بیشتر بخونم .
حالا اینجا سوالهایی که برام پیش اومده اینه که
۱ . در تمرینی که آقا داوود نوشتن در خط هشتم نوشته while (true) من متوجه نمی شم منظور اینه که تا زمانی که چه چیزی برقرار هست؟؟!! .اگه اشتباه نکنم اینو در درسهای بعدی در مثالهای خودتونم دیده بودم.
۲ . در خط یازدهم نوشته شده if (MyNumber < 0)
من متوجه نمی شم این چه جور if ای هست
< یعنی چی ؟ سمی کالن وسط کاندیشن چیکار میکنه ؟
ممنون میشم اگه جواب بدید.
رضا
۱۷ آذر ۱۳۹۲
الان که کامنت خودم چاپ شد متوجه شدم علامت کوچکتر ( > ) در مطلبی که ایشون نوشته بودند به این شکل تغیر پیدا کرده بود & l t ; که باعث شد من سردرگم شم .
ولی سوالم در مورد while پابرجاست
مسعود درویشیان
۱۸ آذر ۱۳۹۲
(while(true یه حلقهی بینهایت هست. اگر دقت کرده باشید توی قسمت condition یه حلقه باید یه مقدار true/false باشه. که اگه true باشه برنامه وارد حلقه میشه و اگه false باشه برنامه وارد حلقه نمیشه. حالا وقتی میگیم (while(true یعنی که این حلقه همیشه شرطش برقرار هست و تا بی نهایت اجرا میشه
رضا
۱۹ آذر ۱۳۹۲
بسیار عالی
خیلی متشکرم از راهنماییتون
پس اگه درست متوجه شده باشم یعنی یک حلقه که بدون نیاز به یک شرط یک عملیات رو تکرار میکنه ولی احتمالا درون بدنه ی حلقه لازم هست شرطی برای خروج از بدنه در نظر گرفته بشه.
درست متوجه شدم ؟
مسعود درویشیان
۱۹ آذر ۱۳۹۲
بله درسته؛ شرط این حلقه همیشه true هست.
داود حاجی پور
۲ دی ۱۳۹۲
بازم سلام جناب آقای درویشیان ، در قسمتهای قبل چندین بار ازتون تشکر کردم ولی الان که به قسمت دهم رسیدم بازم می بینم که باید دوباره تشکر کنم انصافا تمامی مطالبو طوری در بین درسها گنجاندین که برای من تازه کار فوق العاده شیرین و جذاب بنظر می آد و مهم تر اینکه اصلا سخت که نیست بلکه آسان و ساده هم هست البته با شیوه خاص تدریسی شما ، بازم تشکر و باز هم تشکر ، داود حاجی پور از تبریز
حسین
۱۰ دی ۱۳۹۲
سلام ، یه سوال؟؟؟
اگه من بخوام یه عملیات چند بار تکرار بشه ، و نمیدونمم که چند باره،باید چه کنم؟
مثلا یه برنامه ارسال انبوه ایمیل دارم ، و ادرس های ایمیل هام را هم توی یه فایل تکسته که هر ادر تو یه خطه!
خوب حالا عملیات من باید به تعداد خط ها یا ایمیل هام اجرا بشه!
ابنجا دو تا مشکل دارم ! اول این که ، چطوری به برنامه بگم این عملیات را به تعداد ایمیل ها انجام بده؟؟؟؟
دوم این که چطوری ادرس هر ایمیل توی عملیاتم وارد کنم که همش قط برای یه نفر نره؟؟؟
امید وارم منظورم را متوجه شده باشی؟؟
ممنون؟
بهم ایمیل بزن!
سعید
۱۱ خرداد ۱۳۹۳
خوب بود دوست عزیزم
علی
۲۷ تیر ۱۳۹۳
مطالبتون واقعا مفیده!
اردلان
۶ شهریور ۱۳۹۳
سلام دوست عزیز
می شه جواب حسین و برای ما هم ارسال کنی
ممنون
aida
۲۱ دی ۱۳۹۳
دستور switchرو پیدانمیکنم کجااااااااست :(
zeinabi88
۲۰ تیر ۱۳۹۴
سلام وقتتون بخیر مقاله تون خیلی خوب بود سپاس فراووووووون
میشه فقط لطف کنید جواب سوال آقا حسین رو اگه شرایطش هست برا منم ایمیلش کنید.
با سپاس
فروتن رحمانی÷÷
۲۶ دی ۱۳۹۵
چجوری میتونم دو تا عدد بزرگو به توان هم برسونم و تعداد ارقامو بگیرم
هلنا
۳ اسفند ۱۳۹۵
سلام دستور چاپ مستطیل توخالی رومیخواستم یعنیدوعدد بدهموفقط اضلاع ان * باشد
iman
۳ دی ۱۳۹۶
سلام خسته نباشید. خیلی ممنونم بابت این اموزش جامع و بسیار روان
مهندس یه سوال برام پیش اومد شما در تمرین اول علامت تقسیم گذاشتید !! چجوری مثلا دو تقسیم بر شش میشه صفر یا …!!!!!!!
iman
۳ دی ۱۳۹۶
سلام جناب مهندس خسته نباشید.
در مثال مضارب ٣ اعداد ٠ تا ٢٠ وقتی که درون حلفه ی for شما یک شرط گذاشتید بنده نفهمیدم که چطور وقتی دوتا عدد مینویسین و بینشون علامت مضرب میذارین برابر صفر میشه!! ممنون میشم برام روشن کنید که از پایه به مشکل نخورم!
mostafa
۱۶ بهمن ۱۳۹۶
سلام
قسمت ۱۶ نیست