فصل ۴: ساختارهای کنترلی در C++

""

🎯 هدف این فصل

در پایان این فصل شما توانایی خواهید داشت:

  1. تصمیم‌گیری در برنامه را با شرط‌ها (if / switch) انجام دهید.
  2. اعمال تکراری را با حلقه‌ها (for / while / do-while) پیاده‌سازی کنید.
  3. از دستورات کنترلی break, continue و goto استفاده کنید (با احتیاط).
  4. الگوهای رایج کنترل جریان برنامه را درک کنید.

۱. مقدمه

برنامه‌ها به سه دسته ساختار جریان اجرا تقسیم می‌شوند:

  1. توالی (Sequence) → اجرای خط به خط
  2. تصمیم‌گیری (Selection) → انتخاب مسیر بر اساس شرط
  3. تکرار (Iteration) → تکرار بخشی از کد چند بار

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


۲. ساختار شرطی if

۲.۱ شکل ساده

if (condition) {
    // اگر شرط درست باشد، این کد اجرا می‌شود
}

مثال:

int age = 20;
if (age >= 18) {
    cout << "You are an adult." << endl;
}

۲.۲ if...else

برای دو مسیر:

if (condition) {
    // مسیر اول
} else {
    // مسیر دوم
}

مثال:

int score = 55;
if (score >= 60) {
    cout << "Passed" << endl;
} else {
    cout << "Failed" << endl;
}

۲.۳ if...else if...else

برای چند شرط:

if (score >= 90) {
    cout << "Grade A";
} else if (score >= 80) {
    cout << "Grade B";
} else if (score >= 70) {
    cout << "Grade C";
} else {
    cout << "Fail";
}

۲.۴ تو در تو (Nested if)

if (age >= 18) {
    if (age < 65) {
        cout << "Adult";
    } else {
        cout << "Senior";
    }
}

📌 اما مراقب پیچیدگی بیش از حد باشید؛ گاهی بهتر است با منطقی ترکیبی شرط‌ها را ساده کنید:

if (age >= 18 && age < 65)

۳. ساختار شرطی switch

برای انتخاب یکی از چند گزینه بر اساس یک مقدار عدد صحیح یا کاراکتر (و از C++17 حتی رشته ثابت):

switch (expression) {
case value1:
    // کد
    break;
case value2:
    // کد
    break;
default:
    // در غیر این صورت
}

مثال:

char grade = 'B';
switch (grade) {
case 'A':
    cout << "Excellent";
    break;
case 'B':
    cout << "Good";
    break;
case 'C':
    cout << "Average";
    break;
default:
    cout << "Invalid grade";
}

📌 نکات:

  • استفاده از break ضروری است، وگرنه ادامه caseها اجرا می‌شود (Fall-through).
  • شرط‌ها باید مقادیر ثابت باشند.

۴. حلقه‌ها (Loops)

۴.۱ حلقه for

برای تکرار یک تعداد مشخص:

for (initialization; condition; update) {
    // اجرا
}

مثال:

for (int i = 1; i <= 5; i++) {
    cout << i << endl;
}

خروجی:

1
2
3
4
5

۴.۲ حلقه while

برای تکرار تا وقتی شرط درست باشد:

while (condition) {
    // اجرا
}

مثال:

int i = 1;
while (i <= 5) {
    cout << i << endl;
    i++;
}

۴.۳ حلقه do...while

حداقل یک بار اجرا می‌شود:

do {
    // اجرا
} while (condition);

مثال:

int number;
do {
    cout << "Enter a positive number: ";
    cin >> number;
} while (number <= 0);

۵. کنترل جریان در حلقه‌ها

۵.۱ دستور break

خروج فوری از حلقه:

for (int i = 1; i <= 10; i++) {
    if (i == 5) break;
    cout << i << " ";
}

خروجی:

1 2 3 4

۵.۲ دستور continue

رفتن به تکرار بعدی:

for (int i = 1; i <= 5; i++) {
    if (i == 3) continue;
    cout << i << " ";
}

خروجی:

1 2 4 5

۵.۳ استفاده محدود از goto

در C++ توصیه نمی‌شود چون کد را نامرتب می‌کند:

goto label;
...
label:

📌 بهترین جایگزین: حلقه‌ها و توابع.


۶. تو در تو بودن حلقه‌ها (Nested Loops)

مثال چاپ جدول ضرب:

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        cout << i << " * " << j << " = " << i*j << "\t";
    }
    cout << endl;
}

۷. ترکیب شرط و حلقه

مثال بررسی اعداد زوج بین ۱ تا ۱۰:

for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
        cout << i << " is even" << endl;
    }
}

۸. نکات و هشدارها

⚠ همیشه مراقب حلقه بی‌نهایت باشید:

while (true) { ... } // اگر شرط خروج نگذارید، بی‌وقفه اجرا می‌شود

⚠ در switch همیشه break بگذارید مگر عمداً بخواهید Fall-through کنید.
⚠ متغیرها در محدوده حلقه تعریف کنید تا خارج از آن در دسترس نباشند.


۹. اشتباهات رایج

❌ تغییر ندادن مقدار شرط در حلقه → حلقه بی‌پایان
❌ استفاده نادرست از عملگر = به جای ==
❌ پیچیده کردن شرط‌ها و حلقه‌ها به جای ساده کردن با ترکیب مناسب


۱۰. تمرین‌ها

تمرین ۱

برنامه‌ای بنویسید که عددی از کاربر بگیرد و بگوید زوج است یا فرد.

تمرین ۲

با حلقه for اعداد ۱ تا ۱۰۰ که مضرب ۳ هستند را چاپ کنید.

تمرین ۳

با استفاده از while مجموع اعداد مثبت ورودی کاربر را تا وقتی ۰ وارد شود محاسبه کنید.

تمرین ۴ (چالش)

یک منوی چندگزینه‌ای با switch طراحی کنید که کاربر بتواند عملیات‌های جمع، تفریق، ضرب یا تقسیم دو عدد را انجام دهد.


۱۱. جمع‌بندی

  • ساختارهای شرطی (if / switch) برای تصمیم‌گیری هستند.
  • حلقه‌ها (for / while / do-while) برای تکرار هستند.
  • دستورات break و continue کنترل دقیق‌تر حلقه‌ها را می‌دهند.
  • استفاده درست از این ابزارها ساختار کلی برنامه را مشخص می‌کند.
محمد وب‌سایت

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *