درخواست های ارتباط
جستجو
لیست دوستان من
صندوق پیام
همه را دیدم
  • در حال دریافت لیست پیام ها
صندوق پیام
رویدادها
همه را دیدم
  • در حال دریافت لیست رویدادها
همه رویدادهای من
تخفیف های وب سایت
همه تخفیف ها

عضویت در

کانال تلگرام

توسینسو

اطلاعات مطلب
مدرس/نویسنده
حسین احمدی
امتیاز: 215942
رتبه:3
344
265
416
2833
حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ... پروفایل کاربر

آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش سوم)

تاریخ 51 ماه قبل
نظرات 4
بازدیدها 7822
با سلام مجدد به دوستان عزیزم در انجمن تخصصی فناوری اطلاعات ایران، در صورتی که از دنبال کنندگان سری آموزشی زبان سی شارپ باشید، می دانید که در دو بخش قبلی به بررسی دستوران کنترلی پرداختیم. در بخش سوم از قسمت هشتم سری آموزشی، به بررسی حلقه ها و دستور for خواهیم پرداخت. اما حلقه ها چه کاربردهایی دارند؟ خیلی از اوقات، نیاز داریم قطعه ای از کد چندین بار تکرار شود. برای مثال، فرض کنید میخواهیم اعداد 1 تا 100 را چاپ کنیم. راه حل چیست؟ صد بار پشت سر هم دستور Console.WriteLine را بنویسیم؟؟؟!!! صد در صد اینطور نیست. در اینجور مواقع باید از حلقه ها استفاده کنیم. حلقه ها به ما این قابلیت را می دهند که دستوراتی را به تعداد دلخواه تکرار کنیم. حلقه ها را در دو بخش مورد بررسی قرار خواهیم داد. در بخش اول به بررسی دستور for پرداخته و در بخش بعدی به بررسی دستورات while و do-while می پردازیم. در ابتدا، ساختار کلی دستور for را با هم بررسی می کنیم. بوسیله دستور for می توان یک قطعه از کد را تعداد دلخواهی که مد نظر داریم اجرا کنیم. ساختار کلی این دستور به شکل زیر است:

for({init};{condition};{increment})
{
    // loop body
}

خوب، بهتره که به کاربرد و مفهوم هر یک از بخش های دستور بالا بپردازیم:

  1. init: در این بخش باید متغیری که شمارنده بر اساس آن عمل خواهد کرد را تعریف کنیم. هر حلقه for نیاز به یک متغیر شمارنده دارد که در هر تکرار، مقدار آن یک واحد اضافه می شود. این متغیر در بخش init تعریف می شود. این متغیر باید مقدار اولیه نیز داشته باشد.
  2. condition: بعد از تعریف متغیر شمارنده، باید شرطی برای اتمام حلقه مشخص کنیم، برای مثال، می خواهیم شرط ما 10 بار تکرار شود. در این قسمت تعیین می کنیم که حلقه ما در چه حالتی به اتمام می رسد. این قسمت باید مقدار بازگشتی از نوع bool داشته باشد.
  3. increment: در این بخش مقداری که با هر بار تکرار به شمارنده ما اضافه می شود یا کم می شود را مشخص می کنیم.
  4. loop body: بدنه حلقه for یا دستوراتی که می خواهیم با هر بار تکرار حلقه for اجرا شوند را در این قسمت می نویسیم. دقت کنید که بدنه حلقه for با Brace باز و بسته مشخص می شود. در اینجا مانند دستور if، در صورتی که تعداد دستورات حلقه for تنها یک دستور بود می توان از نوشتن Brace ها خودداری کرد.

در ادامه با یک مثال ساده، با کاربرد واقعی دستور for آشنا می شویم. فرض کنید تصمیم داریم اعداد یک تا 10 را در خروجی چاپ کنیم. برای اینکار کافیست یک حلقه for تعریف کرده و داخل آن مقدار مورد نظر را در خروجی چاپ کنیم:

for(int counter = 1; counter <= 10; counter++)
    Console.WriteLine(counter);

همانطور که مشاهده می کنید، داخل دستور if سه بخش داریم که با علامت ; از هم جدا شده اند. در قسمت اول متغیری به نام counter تعریف کرده و مقدار پیش فرض 1 را به آن اختصاص دادیم. در قسمت دوم شرط for را نوشتیم که حلقه تا زمانی اجرا شود که مقدار counter کوچکتر یا مساوی عدد 10 می باشد. در انتها هم گفتیم که با هر بار تکرار، یک واحد به متغیر counter اضافه شود. در داخل بدنه for نیز با دستور WriteLine مقدار متغیر counter را که با هر بار تکرار یک واحد به آن اضافه می شود را در خروجی چاپ می کنیم.

در مثال دوم تصمیم داریم اعداد 10 تا 1 را به صورت معکوس چاپ کنیم:

for(int counter = 10; counter >= 1; counter--)
    Console.WriteLine(counter);

در اینجا، تغیراتی که دادیم، ابتدا مقدار اولیه متغیر counter را برابر 10 قرار دادیم و شرط را نیز جوری تغییر دادیم که دستورات for تا زمانی اجرا شوند که مقدار counter بزرگتر یا مساوی یک می باشد. در انتها نیز گفتیم با هر بار اجرای حلقه for، از مقدار counter یک واحد کم کن. با این کار اعداد 10 تا 1 به صورت معکوس در خروجی چاپ خواهند شد.

در مثال بعدی، می خواهیم اعداد زوج بین 1 تا 100 را در خروجی چاپ کنیم، یک راه آن به این صورت است که یک حلقه با تکرار 100 بار ایجاد کنیم و در داخل بدنه چک کنیم که باقی مانده تقسیم متغیر شمارنده بر 2 مساوی صفر هست یا نه. اگر بود مقدار را در خروجی چاپ کن:

for(int counter = 1; counter <= 100; counter++)
{
    if(counter % 2 == 0)
        Console.WriteLine(counter);
}

در قسمت های قبلی در مورد عملگر % گفتیم که باقی مانده تقسیم دو عدد را برای ما بر میگرداند.

در روش بعدی، می توانیم حلقه را جوری بنویسیم که مقدار counter در هر بار تکرار 2 واحد اضافه شود:

for(int counter = 2; counter <= 100; counter = counter + 2)
    Console.WriteLine(counter);

کد بالا نیز کلیه اعداد زوج بین 1 تا 100 را برای ما در خروجی نمایش خواهد داد.

در هنگام استفاده از حلقه for ما می توانیم عملیات تعریف متغیر شمارنده را خارج از حلقه و قبل از شروع آن تعریف کنیم:

var counter = 1;
for(; counter <= 10; counter++)
    Console.WriteLine(counter);

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


حلقه های تو در تو (Nested Loops)


زمانی که ما چند حلقه for را داخل هم بنویسیم، به این حلقه ها، حلقه های تو در تو گفته می شود. برای مثال، فرض کنید که قصد داریم جدول ضرب 9 در 9 را در خروجی چاپ کنیم. برای اینکار ما نیاز به حلقه های تو در تو خواهیم داشت. نمونه کد زیر یک جدول ضرب 9 در 9 را برای ما در خروجی چاپ می کند:

for (int i = 1; i <= 9; i++)
{
    for (int j = 1; j <= 9; j++)
    {
        Console.Write((i*j) + "\t");
    }
    Console.WriteLine();
}

حلقه اول، 9 بار، و با هر بار اجرای حلقه اول، حلقه دوم 9 بار اجرا خواهد شد و خروجی ضرب متغیرهای i و j در خروجی چاپ خواهد شد.


دستور break


بوسیله دستور break می توانیم در شرایطی که مد نظر داریم از حلقه خارج شویم. برای مثال، در حلقه زیر، زمانی که شمارنده به عدد 50 برسد، حلقه for متوقف شده و از حلقه خارج می شویم:

for(int counter = 2; counter <= 100; counter++)
{
    if(counter == 50)
        break;
    Console.WriteLine(counter);
}
Console.WriteLine("End of program!");


دستور continue


به کمک این دستور می توانیم روند اجرای حلقه را متوقف کرده و به ابتدای حلقه برگردیم. فقط به این نکته توجه داشته باشید که این دستور باعث reset شدن حلقه نمی شود و حلقه، تکرار بعدی را اجرا می کند. برای مثال، اگر ما در تکرار 50 امین تکرار، دستور continue را اجرا کنیم، 51 امین تکرار اجرا خواهد شد و روند اجرا به ابتدای حلقه باز خواهد گشت. برای مثال، برنامه ای که اعداد زوج بین 1 تا 100 را در خروجی چاپ می کرد را به صورت زیر نیز می توانیم بنویسیم:

for(int counter = 1; counter <= 100; counter++)
{
    if(counter % 2 != 0)
        continue;
    Console.WriteLine(counter);
}

در کد بالا گفتیم که اگر باقیمانده تقسیم متغیر شمارنده بر عدد 2، مخالف صفر بود، تکرار بعدی اجرا شود، در غیر اینصورت دستور WriteLine اجرا خواهد شد.


چند مثال دیگر از دستور for



1. دریافت دو عدد از کاربر و محاسبه عدد اول به توان عدد دوم و چاپ آن در خروجی:

Console.Write("Enter first number: ");
var firstNumber = int.Parse(Console.ReadLine());
Console.Write("Enter second number: ");
var secondNumber = int.Parse(Console.ReadLine());

var pow = 1;
for (var counter = 1; counter <= secondNumber; counter++)
{
    pow = pow*firstNumber;
}

Console.WriteLine(firstNumber + " ^ " + secondNumber + " = " + pow);
Console.ReadKey();

در کد بالا، ابتدا دو عدد را از کاربر دریافت کرده و عدد های وارد شده را به عدد تبدیل می کنیم و در دو متغیر firstNumber و secondNumber ذخیره می کنیم. سپس برای خروجی متغیری با نام pow تعریف می کنیم و مقدار اولیه آن را برابر 1 قرار می دهیم.

دلیل اینکه مقدار آن را یک قرار دادیم، دستور داخل حلقه for می باشد، در صورتی که مقدار اولیه را صفر قرار می دادیم، نتیجه ضرب عدد اول در صفر، صفر می شد و نهایتاً خروجی ما عددی جز عدد صفر نخواهد بود. سپس حلقه ای تشکیل داده که به تعداد عدد دوم تکرار می شود و در داخل بدنه عدد اول را در pow ضرب کرده و نتیجه را در pow ذخیره می کنیم. پس از تمام حلقه، در خروجی با پیغام مناسب مقدار pow را چاپ می کنیم.

2. محاسبه میانگین جمع اعداد 1 تا 100:

var sum = 0;
for (int counter = 1; counter <= 100; counter++)
{
    sum = sum + counter;
}

Console.WriteLine("Average: " + (sum/100));

در این بخش با دستور if و کاربرد آن آشنا شدیم. در قسمت بعدی به بررسی حلقه های while و do-while خواهیم پرداخت تا مبحث دستورات کنترلی و حلقه ها به پایان برسد. ITPRO باشید

نویسنده : حسین احمدی
منبع : جزیره برنامه نویسی وب سایت توسینسو
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است
برچسب ها
ردیف عنوان
1 دوره آموزشی .NET Framework و زبان برنامه نویسی سی شارپ - مقدمه
2 آموزش سی شارپ - قسمت اول :: معرفی و بررسی ابزارهای مورد نیاز دوره
3 آموزش زبان سی شارپ - قسمت دوم :: آشنایی با .NET Framework و ساختار آن (بخش اول)
4 آموزش زبان سی شارپ - قسمت دوم :: آشنایی با .NET Framework و ساختار آن (بخش دوم)
5 آموزش زبان سی شارپ - قسمت سوم :: آشنایی اولیه با محیط Visual Studio و نوشتن اولین برنامه
6 آموزش زبان سی شارپ - قسمت چهارم :: آشنایی با ساختار برنامه ها و کامپایلر زبان سی شارپ
7 آموزش زبان سی شارپ - قسمت پنجم :: آشنایی با دستورات کنسول و متغیرها
8 آموزش زبان سی شارپ - قسمت ششم :: نوع های داده اولیه
9 آموزش زبان سی شارپ - قسمت هفتم :: آشنایی با عملگرهای زبان سی شارپ
10 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش اول)
11 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش دوم)
12 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش سوم)
13 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش چهارم)
14 آموزش زبان سی شارپ - قسمت نهم :: آشنایی با آرایه ها و دستور foreach
15 آموزش زبان سی شارپ - قسمت دهم :: آشنایی با متدها در زبان سی شارپ (بخش اول)
16 آموزش زبان سی شارپ - قسمت دهم :: آشنایی با متدها در زبان سی شارپ (بخش دوم)
17 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت یازدهم :: مقدمه ای بر برنامه نویسی شئ گرا
18 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت دوازدهم :: آشنایی با کلاس، اشیاء و فضاهای نام
19 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت سیزدهم :: آشنایی با فیلدها و رفتارها
20 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت چهاردهم :: آشنایی با Property ها
21 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت پانزدهم :: آشنایی با سازنده ها و روش های ایجاد اشیاء
22 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت شانزدهم :: وراثت یا Inheritance
23 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت هفدهم :: آشنایی با مفهوم Polymorphism
24 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت هجدهم:: کلاس های abstract و sealed
25 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت نوزدهم :: سازنده ها در وراثت، کلمه کلیدی protected و فیلدهای readonly
26 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیستم :: کلاس های static و partial و Extension Method ها
27 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیست و یکم :: Reference Types و Value Types
28 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیست و دوم :: آشنایی با کاربرد interface ها
29 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیست و سوم :: آشنایی با مفاهیم Inversion of Control و Dependency Injection
30 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و چهارم :: آشنایی با مفهوم Type Casting و انواع Cast ها
31 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و پنجم :: آشنایی با operator overloading و تعریف cast ها
32 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و ششم :: مفاهیم boxing و unboxing
33 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و هفتم :: قابلیت Generics
34 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و هشتم :: نکات تکمیلی Generic ها، کلاس List و کلاس Dictionary
35 آموزش زبان سی شارپ -قسمت بیست و نهم (پایانی): استثناء ها (Exceptions) و مدیریت خطاها در سی شارپ
دوره مجموعه کل دوره
مطالب مرتبط

در حال دریافت اطلاعات

نظرات
  • چند مثال از حلقه for

    مثال 1. استفاده از اعداد منفی
        int x; 
        for(x = 100; x > -100; x -= 5) 
          Console.WriteLine(x); 
    

    خروجی
    100
    95
    90
    85
    80
    75
    70
    65
    60
    55
    50
    45
    40
    35
    30
    25
    20
    15
    10
    5
    0
    -5
    -10
    -15
    -20
    -25
    -30
    -35
    -40
    -45
    -50
    -55
    -60
    -65
    -70
    -75
    -80
    -85
    -90
    -95
    

    مثال 2. در صورتی که شمارنده مثبت شد با دستور break از حلقه خارج میشود.
        // use break to exit this loop 
        for(int i=-10; i <= 10; i++) {  
          if(i > 0) break; // terminate loop when i is positive 
          Console.Write(i + " ");  
        }  
        Console.WriteLine("Done");  
    

    خروجی
    -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 Done
    

    مثال 3. تعریف شمارنده (init) خارج از حلقه و استفاده از افزایشگر شمارنده (increment) در داخل بدنه حلقه.
        i = 0; // move initialization out of loop 
        for(; i < 10; ) { 
          Console.WriteLine("Pass #" + i); 
          i++; // increment loop control var 
        } 
    

    خروجی
    Pass #0
    Pass #1
    Pass #2
    Pass #3
    Pass #4
    Pass #5
    Pass #6
    Pass #7
    Pass #8
    Pass #9
    

    مثال4. استفاده از ویرگول در تعریف حلقه
    int i, j; 
     
        for(i=0, j=10; i < j; i++, j--) {
          Console.WriteLine("i and j: " + i + " " + j); 
    }
    

    خروجی
    i and j: 0 10
    i and j: 1 9
    i and j: 2 8
    i and j: 3 7
    i and j: 4 6
    
  • for (int i = 1; i <= 9; i++)
    {
        for (int j = 1; j <= 9; j++)
        {
            Console.Write((i*j) + "\t");
        }
        Console.WriteLine();
    }
    
    استاد تو این قطعه کد از "t\"استفاده کردید. که به اندازه یه tab بین خروجی ها فاصله ایجاد کرده. میشه توضیح بدید که گزینه های دیگه ای هم مثل این داریم ؟اسم خاصی دارن؟
  • سلام، به این کاراکتر ها اصطلاحاً Escape Character گفته میشه، مثلاً b\ معادل Backspace هست یا n\ خط جدید ایجاد می کنه، تو گوگل جستجو کنید C# Escape Characters براتون لیست کاملش رو میاره.
  • متشکرم استاد.
    معمولا چه زمانی از این کاراکتر ها استفاده میشه؟

برای ارسال نظر ابتدا به سایت وارد شوید