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

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


مسعود درویشیان 46 دیدگاه سی شارپ Wednesday, 10th October , 2012 59886 بازدید

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

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



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

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


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


  1. پیرو
    11 October 2012

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

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




    • مسعود درویشیان
      13 October 2012

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




  2. ماندانا
    13 October 2012

    سلام
    اول از همه تشکر می کنم
    دوم گفته اید دوره ها 100 قسمت است و هفته ای دو قسمت را در سایت قرار می دهید(یعنی 50 هفته) مهندس جان خیلی طولانی نمی شه اگر هفته ای 3الی 4 بار بشه بسیار ممنون می شویم




    • مسعود درویشیان
      13 October 2012

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




  3. فرشیده
    14 October 2012

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




    • مسعود درویشیان
      14 October 2012

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




  4. فرشیده
    14 October 2012

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




    • مسعود درویشیان
      14 October 2012

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

      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);
          }
      }
      



    • مسعود درویشیان
      14 October 2012

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

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

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




  5. فرشیده
    15 October 2012

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




    • مسعود درویشیان
      15 October 2012

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




  6. میلاد
    18 October 2012

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




    • مسعود درویشیان
      18 October 2012

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




  7. میلاد
    18 October 2012

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

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

    WriteLine.




    • مسعود درویشیان
      18 October 2012

      سلام

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

      ۱. استفاده از روش 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);
      

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




      • کوثر
        12 September 2013

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




  8. میلاد
    19 October 2012

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




  9. مهدی
    16 November 2012

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




  10. Praise
    13 December 2012

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




    • مسعود درویشیان
      13 December 2012

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




  11. علیرضا
    26 January 2013

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




    • مسعود درویشیان
      28 January 2013

      سلام.

      فاکتوریل:

      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.");
              }
          }
      }
      

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

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

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




  12. داوود
    2 April 2013

    سلام؛
    برنامه رو اصلاح کردم و حالا اگه منفی وارد بشه پیغام میده و میاد بیرون؛ جای 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. میلاد
    24 April 2013

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

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

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

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




    • مسعود درویشیان
      24 April 2013

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




  14. Mersad
    4 August 2013

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

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

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




  15. ابراهیم
    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";

      }

      }
      }



    • اگه قسمت شی‌گرایی رو متوجه نشدید مهم نیست، مهم محاسبات توی 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. رضا
    8 December 2013

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




    • رضا
      8 December 2013

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



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




        • رضا
          10 December 2013

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




  17. داود حاجی پور
    23 December 2013

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




  18. حسین
    31 December 2013

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




  19. سعید
    1 June 2014

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




  20. علی
    18 July 2014

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




  21. اردلان
    28 August 2014

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




  22. aida
    11 January 2015

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




  23. zeinabi88
    11 July 2015

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




  24. فروتن رحمانی÷÷
    15 January 2017

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




  25. هلنا
    21 February 2017

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




  26. iman
    24 December 2017

    سلام خسته نباشيد. خيلي ممنونم بابت اين اموزش جامع و بسيار روان
    مهندس يه سوال برام پيش اومد شما در تمرين اول علامت تقسيم گذاشتيد !! چجوري مثلا دو تقسيم بر شش ميشه صفر يا …!!!!!!!




  27. iman
    24 December 2017

    سلام جناب مهندس خسته نباشيد.
    در مثال مضارب ٣ اعداد ٠ تا ٢٠ وقتي كه درون حلفه ي for شما يك شرط گذاشتيد بنده نفهميدم كه چطور وقتي دوتا عدد مينويسين و بينشون علامت مضرب ميذارين برابر صفر ميشه!! ممنون ميشم برام روشن كنيد كه از پايه به مشكل نخورم!




  28. mostafa
    5 February 2018

    سلام
    قسمت 16 نیست



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





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

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

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

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

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



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

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