زنگ سی شارپ – قسمت دهم

توضیحات تکمیلی مباحث مطرح شده و حل تمرین‌های ۱ تا ۴


مسعود درویشیان ۴۳ دیدگاه سی شارپ چهارشنبه, ۱۹ام مهر , ۱۳۹۱ 29957 بازدید

در قسمت قبل با چکونگی کار با حلقه‌ی 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();
    }
}

توضیحات لازم در مورد چگونگی حل‌تمرین‌ها در همین قسمت داده شده است. تمرین شماره ۵ در قسمت بعد حل خواهد شد.



نویسنده / مترجم : مسعود درویشیان

علاقه مند به موسیقی و برنامه نویسی بازی


۴۳ دیدگاه برای این نوشته ثبت شده است


  1. پیرو
    ۲۰ مهر ۱۳۹۱

    با سلام.
    تشکر می کنم از وقتی که برای این آموزش ها می گذارید ولی خوب یه کم زیادی مبتدی هستند و برای کسی که با یک زبان برنامه نویسی آشنایی دارد و قصد کوچ به سی شارپ را دارد اصلا مناسب نیست. آموزش های پیشرفته از چه شماره ای به بعد شروع می شود و آیا اصلا قصد آموزش پیشرفته دارید ؟

    با تشکر از شما.




    • مسعود درویشیان
      ۲۲ مهر ۱۳۹۱

      سلام
      این آموزش‌ها از مبتدی شروع شدن و پیوسته همه‌ی سرفصل‌های سی‌شارپ رو در بر می‌گیرن. هدف هم از این آموزش این بوده که هرکسی بتونه آموزش‌ها رو دنبال کنه (مخصوصاً کسایی که آشنایی ندارند)
      حدوداً نزدیکای قسمت ۲۰ وارد شی‌گرایی می‌شیم




  2. ماندانا
    ۲۲ مهر ۱۳۹۱

    سلام
    اول از همه تشکر می کنم
    دوم گفته اید دوره ها ۱۰۰ قسمت است و هفته ای دو قسمت را در سایت قرار می دهید(یعنی ۵۰ هفته) مهندس جان خیلی طولانی نمی شه اگر هفته ای ۳الی ۴ بار بشه بسیار ممنون می شویم




    • مسعود درویشیان
      ۲۲ مهر ۱۳۹۱

      سلام
      ۱۰۰ قسمت رو تقریبی گفتیم ممکنه بیشتر هم بشه. فعلاً که بنا به مشکلاتی مقالات هفته‌ای ۱ قسمت منتشر می‌شه اما حجم محتوای هر قسمت رو بیشتر می‌کنیم تا خیلی طولانی و خسته کننده نشه




  3. فرشیده
    ۲۳ مهر ۱۳۹۱

    با تشکر از این همه وقتی که میگذارید من یک مبتدی هستم و از این روال آموزشی که دارید به خوبی بهره میگیرم ممنون از شما




    • مسعود درویشیان
      ۲۳ مهر ۱۳۹۱

      ممنون از لطف‌تون. امیدوارم که بهره کافی رو ببرید. توی هر قسمتی هم که مشکل داشتید در بخش نظرات بیان کنید تا پاسخ سوال‌تون داده بشه :)




  4. فرشیده
    ۲۳ مهر ۱۳۹۱

    لطفا بفرمایید چگونه میشه دو عدد را با هم بدون در نظر گرفتن متغییر سوم جا بجا کرد.؟




    • مسعود درویشیان
      ۲۳ مهر ۱۳۹۱

      اگه مشکلی بود بفرمایید تا بیشتر توضیح بدم:

      using System;
      class Example
      {
          static void Main()
          {
              Console.Write("Enter first number: ");
              int firstNum = Convert.ToInt32(Console.ReadLine());
      
              Console.Write("Enter second number: ");
              int secondNum = Convert.ToInt32(Console.ReadLine());
      
              firstNum = firstNum + secondNum;
              secondNum = firstNum - secondNum;
              firstNum = firstNum - secondNum;
      
              Console.WriteLine();
              Console.WriteLine("--- Variables after exchanging ---");
              Console.WriteLine();
              Console.WriteLine("First number: " + firstNum + "\nSecond Number: " + secondNum);
          }
      }
      



    • مسعود درویشیان
      ۲۳ مهر ۱۳۹۱

      قسمت مهم برنامه هم اینه:

      firstNum = firstNum + secondNum;
      secondNum = firstNum - secondNum;
      firstNum = firstNum - secondNum;
      

      که عملیات جابه‌جا کردن رو انجام می‌ده




  5. فرشیده
    ۲۴ مهر ۱۳۹۱

    از راهنمائی شما خیلی متشکرم لطف زیادی در حقم کردید. و از مطالبتون بهره زیادی میبرم.




    • مسعود درویشیان
      ۲۴ مهر ۱۳۹۱

      خواهش می‌کنم
      موفق باشید.




  6. میلاد
    ۲۷ مهر ۱۳۹۱

    با سلام. واقعاً ممنونم. از کلمه اول تا کلمه آخرش رو خوندم . و قصد دارم تا آخرش ادامه بدم. متن و نوع نوشته هاتون طوری بودش که بیشتر مجذوب می شدم هی بخونم. با تشکر. امیدوارم که موفق و موید باشید.




    • مسعود درویشیان
      ۲۷ مهر ۱۳۹۱

      سلام. ممنون شما لطف دارید. امیدوارم که این مقاله‌ها براتون مفید واقع بشه :)




  7. میلاد
    ۲۷ مهر ۱۳۹۱

    منتظر مطالبه بعدی هستم.از ده به بعد نیستش..
    راستی یه سوال دارم که خیلی کلنجار رفته که حلش کنم ولی متاسفانه نشد

    برای داده های اعشاری و صحیح در دستور زیر پارامترهایی بنویسید تا خروجی را قالب بندی یا فرمت بندی کند.یعنی انتخاب یک بازه برای نمایش.
    یعنی گرد کردن رقم های اعشار در یک حد مشخص و برای اعداد صحیح را بنویسید.

    WriteLine.




    • مسعود درویشیان
      ۲۷ مهر ۱۳۹۱

      سلام

      برای گرد کردن و قالب‌بندی شکل خروجی اعداد اعشاری می‌تونید از ۲ روش زیر استفاده کنید:

      ۱. استفاده از روش String Formatting
      ۲. استفاده از متد ()Math.Round

      روش String Formatting:

      double d = 3.5645876;
      Console.WriteLine("{0:0.00}", d); // Formatting and rounding output
      

      استفاده از متد ()Math.Round:

      double d = 3.5645876;
      
      // Rounding a double-precision floating-point value 
      // to a specified number of fractional digits.
      double result = Math.Round(d, 3); 
      Console.WriteLine(result);
      

      اگه به راهنمایی بیشتری نیاز بود اطلاع بدید.
      موفق باشید.




      • کوثر
        ۲۱ شهریور ۱۳۹۲

        چه جالب!
        مثل همیشه عالی بود
        ممنون.
        بیشتر تاریخ پست ها مربوط به سال ۱۳۹۱ هستش ولی من تازه با این سایت آشنا شدم!




  8. میلاد
    ۲۸ مهر ۱۳۹۱

    تشکر – ممنونم از راهنمایی هاتون




  9. مهدی
    ۲۶ آبان ۱۳۹۱

    پاینده باشی و برقرار




  10. Praise
    ۲۳ آذر ۱۳۹۱

    سلام دز Solution 1 خط هشتم برنامه به نظر اشتباه میاد !! :
    for (int i = 0; i == 0; i–)




    • مسعود درویشیان
      ۲۳ آذر ۱۳۹۱

      اصلاح شد. ممنون




  11. علیرضا
    ۷ بهمن ۱۳۹۱

    سلام.
    برای بدست اوردن !۶ چه جوری باید کد نویسی کنیم؟
    برای بدست اوردن مضارب عدد ۷؟!
    راستی من خیلی سوال دارم ؟چرا جواب نمیدین؟
    مردم از بس منتظر موندم !
    سایت خیلی توپی دارین واقعا دستتون درد نکنه این اولین سایت اموزشی بود که ازش خوشم اومده ؟




    • مسعود درویشیان
      ۹ بهمن ۱۳۹۱

      سلام.

      فاکتوریل:

      using System;
      class FactorialDemo
      {
          static void Main()
          {
              Console.Write("Enter Number: ");
              int lenght = Convert.ToInt32(Console.ReadLine());
              int result = 1;
      
              if (lenght >= 0)
              {
                  for (int i = lenght; i > 1; i--)
                  {
                      if (result == 1)
                          result = lenght * (lenght - 1);
                      else
                          result = result * (i - 1);
                  }
                  Console.WriteLine("Factorial: " + result);
              }
              else
              {
                  Console.WriteLine("Please enter only a positive integer.");
              }
          }
      }
      

      مضارب هر عدد ۷:

      for (int i = 1; i < 50; i++)
      {
          if(i % 7 == 0)
              Console.WriteLine(i);
      }
      

      برای به‌دست آوردن مضارب هر عددی همین‌کار رو می‌کنید.
      اگه بازم سوالی بود حتماً بپرسید.




  12. داوود
    ۱۳ فروردین ۱۳۹۲

    سلام؛
    برنامه رو اصلاح کردم و حالا اگه منفی وارد بشه پیغام میده و میاد بیرون؛ جای IF رو تغییر دادم.

    using System;
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main()
            {
                while (true)
                {
                    int MyNumber = Convert.ToInt32(Console.ReadLine());
                    if (MyNumber &lt; 0)
                    {
                        Console.WriteLine(&quot;You should Enter positive number&quot;);
                        break;
                    }
                    int[] Length = new int[MyNumber];
                    fact myfact = new fact(Length);
                }
            }
            class fact
            {
                public fact(int[] i)
                {
                    int Result = 1;
                    for (int j = 1; j &lt; i.Length; j++)
                    {
                        Result = Result * j;
                    }
                    Console.WriteLine(&quot;Factoriel is :{0}&quot;, Result);
                }
            }
        }
    }
    
    



  13. میلاد
    ۴ اردیبهشت ۱۳۹۲

    با سلام و خسته نباشید

    خیلی ممنون برای مطالبی ک مینویسید

    خیلی بدرد بخور هستند

    تنتون سالم انشالا
    موفق باشید
    با تشکر




    • مسعود درویشیان
      ۴ اردیبهشت ۱۳۹۲

      سلام ممنون، امیدوارم براتون مفید باشه




  14. Mersad
    ۱۳ مرداد ۱۳۹۲

    مطالبتون لذت بخشه برام

    خداوند متعال بهتون عزت و سربلندی عطا کنه.

    ان شا الله تا آخر با مقالاتتون برای فراگیری زبون سی شارپ پیش میرم.




  15. ابراهیم
    ۹ شهریور ۱۳۹۲

    سلام ممنون از اموزش های خوبتون من می خوام عددی رو بدم بدونم که عدد تام هست یا نه اگه امکان داره کمکم کنید




    • 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 هست:

      using System;
      using System.Collections.Generic;
      struct PerfectNum
      {
          public static bool CheckNumber(int num)
          {
              List<int> divisor = new List<int>();
              int result = 0;
      
              for (int counter = 1; counter < num; counter++)
                  if (num % counter == 0)
                      divisor.Add(counter);
      
              for (int i = 0; i < divisor.Count; i++)
                  result += divisor[i];
      
              return result == num;
          }
      }
      class MainClass
      {
          static void Main()
          {
              int number = Convert.ToInt32(GetString("Enter you number: "));
      
              if (PerfectNum.CheckNumber(number))
                  Console.WriteLine(number + " is a Perfect number.");
              else
                  Console.WriteLine(number + " isn't a Perfect number.");
          }
          static string GetString(string message)
          {
              Console.Write(message);
              return Console.ReadLine();
          }
      }
      



  16. رضا
    ۱۷ آذر ۱۳۹۲

    سلام و خسته نباشید و تشکر فراوان بابت زحمتی که بی چشم داشت و با صرف وقت فراون اون هم با این همه دقت متقبل شدید.
    من یک بار تا حدود درسهای سی و چهار سی و پنج پیش رفتم و بعد متوجه شدم بهتره برگردم از اول و با دقت بیشتر بخونم .
    حالا اینجا سوالهایی که برام پیش اومده اینه که
    ۱ . در تمرینی که آقا داوود نوشتن در خط هشتم نوشته while (true) من متوجه نمی شم منظور اینه که تا زمانی که چه چیزی برقرار هست؟؟!! .اگه اشتباه نکنم اینو در درسهای بعدی در مثالهای خودتونم دیده بودم.
    ۲ . در خط یازدهم نوشته شده if (MyNumber < 0)
    من متوجه نمی شم این چه جور if ای هست
    &lt یعنی چی ؟ سمی کالن وسط کاندیشن چیکار میکنه ؟
    ممنون میشم اگه جواب بدید.




    • رضا
      ۱۷ آذر ۱۳۹۲

      الان که کامنت خودم چاپ شد متوجه شدم علامت کوچکتر ( > ) در مطلبی که ایشون نوشته بودند به این شکل تغیر پیدا کرده بود & l t ; که باعث شد من سردرگم شم .
      ولی سوالم در مورد while پابرجاست




      • مسعود درویشیان
        ۱۸ آذر ۱۳۹۲

        (while(true یه حلقه‌ی بی‌نهایت هست. اگر دقت کرده باشید توی قسمت condition یه حلقه باید یه مقدار true/false باشه. که اگه true باشه برنامه وارد حلقه می‌شه و اگه false باشه برنامه وارد حلقه نمی‌شه. حالا وقتی می‌گیم (while(true یعنی که این حلقه همیشه شرطش برقرار هست و تا بی نهایت اجرا می‌شه




        • رضا
          ۱۹ آذر ۱۳۹۲

          بسیار عالی
          خیلی متشکرم از راهنماییتون
          پس اگه درست متوجه شده باشم یعنی یک حلقه که بدون نیاز به یک شرط یک عملیات رو تکرار میکنه ولی احتمالا درون بدنه ی حلقه لازم هست شرطی برای خروج از بدنه در نظر گرفته بشه.
          درست متوجه شدم ؟




  17. داود حاجی پور
    ۲ دی ۱۳۹۲

    بازم سلام جناب آقای درویشیان ، در قسمتهای قبل چندین بار ازتون تشکر کردم ولی الان که به قسمت دهم رسیدم بازم می بینم که باید دوباره تشکر کنم انصافا تمامی مطالبو طوری در بین درسها گنجاندین که برای من تازه کار فوق العاده شیرین و جذاب بنظر می آد و مهم تر اینکه اصلا سخت که نیست بلکه آسان و ساده هم هست البته با شیوه خاص تدریسی شما ، بازم تشکر و باز هم تشکر ، داود حاجی پور از تبریز




  18. حسین
    ۱۰ دی ۱۳۹۲

    سلام ، یه سوال؟؟؟
    اگه من بخوام یه عملیات چند بار تکرار بشه ، و نمیدونمم که چند باره،باید چه کنم؟
    مثلا یه برنامه ارسال انبوه ایمیل دارم ، و ادرس های ایمیل هام را هم توی یه فایل تکسته که هر ادر تو یه خطه!
    خوب حالا عملیات من باید به تعداد خط ها یا ایمیل هام اجرا بشه!
    ابنجا دو تا مشکل دارم ! اول این که ، چطوری به برنامه بگم این عملیات را به تعداد ایمیل ها انجام بده؟؟؟؟
    دوم این که چطوری ادرس هر ایمیل توی عملیاتم وارد کنم که همش قط برای یه نفر نره؟؟؟
    امید وارم منظورم را متوجه شده باشی؟؟
    ممنون؟
    بهم ایمیل بزن!




  19. سعید
    ۱۱ خرداد ۱۳۹۳

    خوب بود دوست عزیزم




  20. علی
    ۲۷ تیر ۱۳۹۳

    مطالبتون واقعا مفیده!




  21. اردلان
    ۶ شهریور ۱۳۹۳

    سلام دوست عزیز
    می شه جواب حسین و برای ما هم ارسال کنی
    ممنون




  22. aida
    ۲۱ دی ۱۳۹۳

    دستور switchرو پیدانمیکنم کجااااااااست :(




  23. zeinabi88
    ۲۰ تیر ۱۳۹۴

    سلام وقتتون بخیر مقاله تون خیلی خوب بود سپاس فراووووووون
    میشه فقط لطف کنید جواب سوال آقا حسین رو اگه شرایطش هست برا منم ایمیلش کنید.
    با سپاس




  24. فروتن رحمانی÷÷
    ۲۶ دی ۱۳۹۵

    چجوری میتونم دو تا عدد بزرگو به توان هم برسونم و تعداد ارقامو بگیرم




  25. هلنا
    ۳ اسفند ۱۳۹۵

    سلام دستور چاپ مستطیل توخالی رومیخواستم یعنیدوعدد بدهموفقط اضلاع ان * باشد



دیدگاه خود را بنویسید





نشانی ایمیل شما منتشر نخواهد شد.

کامنت های شما بعد از تأیید توسط نویسنده وبلاگ، منتشر خواهند شد.

لطفا دیدگاهتان تا حد امکان مربوط به پست بالا باشد. اگر حرف دیگری دارید و یا قصد تماس با من را دارید، از فرم تماس استفاده کنید.

شما میتوانید با مراجعه به سایت گراواتار یک آواتار اختصاصی برای خود تعریف کنید، تا در کنار نام شما نمایش داده شود

برای قرار دادن کدهای نمونه می توانید از تگ های [php] ، [html] ، [css] و [js] استفاده کنید.
به عنوان مثال کدهای php را می توان به صورت زیر قرار داد:
[php] var $whoLoveIranians = "WebTarget!"; [/php]



کلیه حقوق مادی و معنوی برای وب سایت وب تارگت محفوظ است ©2017 وب‌تارگت

استفاده از مطالب وب سایت در سایر وب سایت‌ها و نشریات چاپی با ذکر منبع آزاد است.