۳

ساختارهای کنترلی 🚦

یاد می‌گیریم چطوری به برنامه‌هامون قدرت تصمیم‌گیری و تکرار بدیم!

🤔 دستورات شرطی: قدرت تصمیم‌گیری در برنامه

💡 دستورات شرطی چیه؟

تا الان برنامه‌هامون مثل یه خط راست بودن - از بالا به پایین اجرا می‌شدن. ولی در زندگی واقعی، ما همیشه باید تصمیم بگیریم! مثلاً اگه هوا بارونی باشه، چتر برمی‌داریم، وگرنه نه. دستورات شرطی همین کار رو توی برنامه‌نویسی می‌کنن - به برنامه قدرت تصمیم‌گیری می‌دن.

🔍 ساده‌ترین حالت: دستور if

ساده‌ترین دستور شرطی، if هست. یعنی "اگر". ساختارش اینطوریه:

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

حالا یه مثال ساده ببینیم:

مثال ساده: بررسی سن برای رای دادن
using System;

class Program
{
    static void Main()
    {
        Console.Write("سن خود را وارد کنید: ");
        int age = int.Parse(Console.ReadLine());
        
        // بررسی ساده با if
        if (age >= 18)
        {
            Console.WriteLine("🗳️ شما می‌تونید رای بدید!");
        }
        
        Console.WriteLine("برنامه تمام شد.");
        Console.ReadKey();
    }
}

🔍 تحلیل کد:

  • age >= 18 شرط ماست
  • • اگر سن 18 یا بیشتر باشه، پیام رای دادن نمایش داده می‌شه
  • • اگر سن کمتر از 18 باشه، هیچ اتفاقی نمی‌افته
  • • در هر حال، "برنامه تمام شد" چاپ می‌شه

⚖️ دستور if-else: دو راهی

گاهی می‌خوایم اگر شرط درست نبود، کار دیگه‌ای انجام بدیم. اینجا از else استفاده می‌کنیم:

مثال: بررسی کامل سن برای رای دادن
using System;

class Program
{
    static void Main()
    {
        Console.Write("سن خود را وارد کنید: ");
        int age = int.Parse(Console.ReadLine());
        
        if (age >= 18)
        {
            Console.WriteLine("🗳️ تبریک! شما می‌تونید رای بدید!");
            Console.WriteLine("💪 حق رای یکی از حقوق مهم شهروندی شماست.");
        }
        else
        {
            Console.WriteLine("😊 هنوز سن رای دادن ندارید.");
            int yearsLeft = 18 - age;
            Console.WriteLine($"⏰ {yearsLeft} سال دیگه می‌تونید رای بدید!");
        }
        
        Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

🎯 دستور else if: چند راهی

وقتی بیش از دو حالت داریم، از else if استفاده می‌کنیم. می‌تونیم چندتا else if پشت سر هم بذاریم:

مثال کامل: تعیین گروه سنی
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("=== تعیین گروه سنی ===");
        Console.Write("سن خود را وارد کنید: ");
        int age = int.Parse(Console.ReadLine());
        
        Console.WriteLine(); // یه خط خالی
        
        if (age < 0)
        {
            Console.WriteLine("❌ سن نمی‌تونه منفی باشه!");
        }
        else if (age <= 2)
        {
            Console.WriteLine("👶 شما یک نوزاد هستید!");
            Console.WriteLine("🍼 وقت شیر خوردن و خوابیدن!");
        }
        else if (age <= 12)
        {
            Console.WriteLine("🧒 شما یک کودک هستید!");
            Console.WriteLine("🎮 وقت بازی و یادگیری!");
        }
        else if (age <= 17)
        {
            Console.WriteLine("👦 شما یک نوجوان هستید!");
            Console.WriteLine("📚 وقت مطالعه و کشف دنیا!");
        }
        else if (age <= 64)
        {
            Console.WriteLine("👨 شما یک بزرگسال هستید!");
            Console.WriteLine("💼 وقت کار و مسئولیت!");
        }
        else if (age <= 120)
        {
            Console.WriteLine("👴 شما در سن بازنشستگی هستید!");
            Console.WriteLine("🌅 وقت لذت بردن از زندگی!");
        }
        else
        {
            Console.WriteLine("🤔 این سن غیرممکنه! مطمئنید درست وارد کردید؟");
        }
        
        Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

🎯 نکات مهم:

  • • شرط‌ها از بالا به پایین بررسی می‌شن
  • • اولین شرط درست که پیدا بشه، اجرا می‌شه و بقیه نادیده گرفته می‌شن
  • else اختیاریه - اگر نذاریم، هیچ اتفاقی نمی‌افته
  • • می‌تونیم چندتا else if داشته باشیم
  • • فقط یک else در آخر می‌تونیم داشته باشیم

🔄 دستور Switch: انتخاب هوشمند از میان گزینه‌ها

🤔 Switch چیه و کی ازش استفاده کنیم؟

فرض کنید می‌خواید یک متغیر رو با 10 تا مقدار مختلف مقایسه کنید. اگه از if-else استفاده کنید، کدتون خیلی طولانی و پیچیده می‌شه. اینجا switch به کمکتون می‌آد!

Switch مثل یه کلید برق چندتایی هست - یه متغیر رو بررسی می‌کنه و بسته به مقدارش، یکی از راه‌های مختلف رو انتخاب می‌کنه.

📋 ساختار کلی Switch

ساختار کلی switch
switch (متغیر)
{
    case مقدار1:
        // کدهای مربوط به مقدار1
        break;
    case مقدار2:
        // کدهای مربوط به مقدار2
        break;
    default:
        // اگر هیچ case ای درست نبود
        break;
}

🔍 اجزای مهم Switch:

  • switch (متغیر) - متغیری که می‌خوایم بررسی کنیم
  • case - هر حالت ممکن برای متغیر
  • break - خروج از switch (خیلی مهمه!)
  • default - اگر هیچ case ای درست نبود (اختیاری)

🎯 مثال ساده: انتخاب روز هفته

بیایید با یه مثال ساده شروع کنیم:

مثال ساده: نمایش نام روز هفته
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("=== تعیین روز هفته ===");
        Console.Write("شماره روز هفته را وارد کنید (1-7): ");
        int dayNumber = int.Parse(Console.ReadLine());
        
        Console.WriteLine(); // یه خط خالی
        
        switch (dayNumber)
        {
            case 1:
                Console.WriteLine("📅 امروز شنبه است!");
                Console.WriteLine("💼 شروع هفته کاری");
                break;
            case 2:
                Console.WriteLine("📅 امروز یکشنبه است!");
                break;
            case 3:
                Console.WriteLine("📅 امروز دوشنبه است!");
                break;
            case 4:
                Console.WriteLine("📅 امروز سه‌شنبه است!");
                break;
            case 5:
                Console.WriteLine("📅 امروز چهارشنبه است!");
                Console.WriteLine("🎯 وسط هفته!");
                break;
            case 6:
                Console.WriteLine("📅 امروز پنج‌شنبه است!");
                break;
            case 7:
                Console.WriteLine("📅 امروز جمعه است!");
                Console.WriteLine("🎉 آخر هفته و تعطیل!");
                break;
            default:
                Console.WriteLine("❌ شماره روز نامعتبر!");
                Console.WriteLine("لطفاً عددی بین 1 تا 7 وارد کنید.");
                break;
        }
        
        Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

🔍 تحلیل کد:

  • • متغیر dayNumber رو با مقادیر 1 تا 7 مقایسه می‌کنیم
  • • هر case یه حالت مختلف رو نشون می‌ده
  • break باعث می‌شه از switch خارج بشیم
  • default برای مقادیر نامعتبر استفاده می‌شه

🧮 مثال پیشرفته: ماشین حساب

حالا یه مثال پیچیده‌تر ببینیم - یه ماشین حساب ساده:

ماشین حساب ساده با Switch
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("=== ماشین حساب ساده ===");
        Console.WriteLine("عملیات‌های موجود: + (جمع), - (تفریق), * (ضرب), / (تقسیم)");
        Console.WriteLine();
        
        Console.Write("عدد اول را وارد کنید: ");
        double num1 = double.Parse(Console.ReadLine());
        
        Console.Write("عدد دوم را وارد کنید: ");
        double num2 = double.Parse(Console.ReadLine());
        
        Console.Write("عملیات را انتخاب کنید (+, -, *, /): ");
        char operation = char.Parse(Console.ReadLine());
        
        Console.WriteLine(); // یه خط خالی
        
        switch (operation)
        {
            case '+':
                double sum = num1 + num2;
                Console.WriteLine($"🔢 {num1} + {num2} = {sum}");
                Console.WriteLine("✅ جمع با موفقیت انجام شد!");
                break;
                
            case '-':
                double difference = num1 - num2;
                Console.WriteLine($"🔢 {num1} - {num2} = {difference}");
                Console.WriteLine("✅ تفریق با موفقیت انجام شد!");
                break;
                
            case '*':
                double product = num1 * num2;
                Console.WriteLine($"🔢 {num1} × {num2} = {product}");
                Console.WriteLine("✅ ضرب با موفقیت انجام شد!");
                break;
                
            case '/':
                if (num2 != 0)
                {
                    double quotient = num1 / num2;
                    Console.WriteLine($"🔢 {num1} ÷ {num2} = {quotient}");
                    Console.WriteLine("✅ تقسیم با موفقیت انجام شد!");
                }
                else
                {
                    Console.WriteLine("❌ خطا: تقسیم بر صفر امکان‌پذیر نیست!");
                    Console.WriteLine("💡 نکته: هیچ عددی رو نمی‌شه بر صفر تقسیم کرد.");
                }
                break;
                
            default:
                Console.WriteLine("❌ عملیات نامعتبر!");
                Console.WriteLine("💡 لطفاً فقط از +, -, *, / استفاده کنید.");
                break;
        }
        
        Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

🚀 مزایای Switch نسبت به if-else:

  • خوانایی بهتر: وقتی چندین مقایسه داریم، switch خیلی واضح‌تره
  • سرعت بیشتر: کامپایلر switch رو بهینه‌تر اجرا می‌کنه
  • کد تمیزتر: کمتر تکرار داره و منظم‌تره
  • کمتر خطا: احتمال اشتباه در شرط‌ها کمتره

⚠️ نکات مهم و اشتباهات رایج:

  • break فراموش نکنید! بدون break، کدهای case های بعدی هم اجرا می‌شن
  • • Switch فقط با مقادیر ثابت کار می‌کنه (نه با شرط‌های پیچیده)
  • • انواع داده مجاز: int, char, string, enum
  • • default اختیاریه ولی استفاده ازش توصیه می‌شه

🔄 حلقه‌ها: قدرت تکرار در برنامه‌نویسی

🤔 حلقه چیه و چرا مهمه؟

تصور کنید می‌خواید "سلام" رو 100 بار چاپ کنید. آیا 100 بار Console.WriteLine("سلام") می‌نویسید؟ البته که نه! اینجا حلقه‌ها به کمکتون می‌آن.

حلقه‌ها مثل یه دستور "تکرار کن" هستن - یه قطعه کد رو تا زمانی که شرط برقراره، مدام اجرا می‌کنن.

🎯 for

وقتی می‌دونیم دقیقاً چند بار باید تکرار کنیم

⏳ while

وقتی نمی‌دونیم چند بار، ولی شرط تکرار رو می‌دونیم

📋 foreach

برای گذر از روی آرایه‌ها و لیست‌ها

🎯 حلقه For: تکرار با تعداد مشخص

حلقه for وقتی استفاده می‌شه که بدونیم دقیقاً چند بار می‌خوایم کاری رو تکرار کنیم. ساختارش اینطوریه:

ساختار کلی for
for (مقداردهی اولیه; شرط ادامه; تغییر متغیر)
{
    // کدهایی که باید تکرار بشن
}
مثال ساده: چاپ اعداد 1 تا 10
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("=== چاپ اعداد 1 تا 10 ===");
        Console.WriteLine();
        
        for (int i = 1; i <= 10; i++)
        {
            Console.WriteLine($"🔢 عدد: {i}");
        }
        
        Console.WriteLine("\n✅ تمام اعداد چاپ شدند!");
        Console.WriteLine("برای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

🔍 تحلیل حلقه for:

  • int i = 1 - متغیر شمارنده رو از 1 شروع می‌کنیم
  • i <= 10 - تا وقتی i کمتر یا مساوی 10 باشه، ادامه بده
  • i++ - بعد از هر تکرار، i رو یکی اضافه کن
  • • کدهای داخل {} در هر تکرار اجرا می‌شن
مثال پیشرفته: جدول ضرب
using System;

class Program
{
    static void Main()
    {
        Console.Write("جدول ضرب چه عددی رو می‌خواید؟ ");
        int number = int.Parse(Console.ReadLine());
        
        Console.WriteLine($"\n=== جدول ضرب {number} ===");
        Console.WriteLine();
        
        for (int i = 1; i <= 10; i++)
        {
            int result = number * i;
            Console.WriteLine($"🧮 {number} × {i} = {result}");
        }
        
        Console.WriteLine("\n✅ جدول ضرب کامل شد!");
        Console.WriteLine("برای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

⏳ حلقه While: تکرار بر اساس شرط

حلقه while وقتی استفاده می‌شه که نمی‌دونیم دقیقاً چند بار باید تکرار کنیم، ولی شرط ادامه رو می‌دونیم:

ساختار کلی while
while (شرط)
{
    // کدهایی که باید تکرار بشن
    // حتماً شرط رو تغییر بدید تا حلقه بی‌نهایت نشه!
}
مثال: بازی حدس عدد
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("=== بازی حدس عدد ===");
        Console.WriteLine("من یه عدد بین 1 تا 10 انتخاب کردم. حدس بزنید!");
        Console.WriteLine();
        
        int secretNumber = 7; // عدد مخفی
        int guess = 0;
        int attempts = 0;
        
        while (guess != secretNumber)
        {
            Console.Write($"تلاش {attempts + 1}: عدد خود را وارد کنید: ");
            guess = int.Parse(Console.ReadLine());
            attempts++;
            
            if (guess < secretNumber)
            {
                Console.WriteLine("🔺 خیلی کم! بالاتر حدس بزنید.");
            }
            else if (guess > secretNumber)
            {
                Console.WriteLine("🔻 خیلی زیاد! پایین‌تر حدس بزنید.");
            }
            else
            {
                Console.WriteLine($"🎉 آفرین! درست حدس زدید!");
                Console.WriteLine($"🏆 تعداد تلاش‌ها: {attempts}");
            }
            
            Console.WriteLine();
        }
        
        Console.WriteLine("برای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}
مثال: شبیه‌سازی خرید با پول محدود
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("=== شبیه‌ساز خرید ===");
        
        int money = 100;
        int itemPrice = 15;
        int itemsBought = 0;
        
        Console.WriteLine($"💰 پول شما: {money} تومان");
        Console.WriteLine($"🛍️ قیمت هر کالا: {itemPrice} تومان");
        Console.WriteLine();
        
        while (money >= itemPrice)
        {
            money -= itemPrice;
            itemsBought++;
            Console.WriteLine($"✅ کالای {itemsBought} خریداری شد. باقی‌مانده: {money} تومان");
        }
        
        Console.WriteLine();
        Console.WriteLine($"🛒 تعداد کل خریدها: {itemsBought}");
        Console.WriteLine($"💵 پول باقی‌مانده: {money} تومان");
        
        if (money > 0)
        {
            Console.WriteLine($"💡 {money} تومان کم دارید تا بتونید کالای بعدی رو بخرید.");
        }
        
        Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

📋 حلقه Foreach: گذر از روی مجموعه‌ها

حلقه foreach برای گذر از روی آرایه‌ها، لیست‌ها و سایر مجموعه‌ها استفاده می‌شه. خیلی راحت و ساده‌ست:

ساختار کلی foreach
foreach (نوع_داده متغیر in مجموعه)
{
    // کار با هر عنصر
}
مثال: نمایش لیست دانش‌آموزان
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("=== لیست دانش‌آموزان کلاس ===");
        Console.WriteLine();
        
        string[] students = {"علی احمدی", "فاطمه رضایی", "محمد کریمی", "زهرا محمدی", "حسن علوی"};
        
        Console.WriteLine($"👥 تعداد دانش‌آموزان: {students.Length}");
        Console.WriteLine();
        
        int counter = 1;
        foreach (string student in students)
        {
            Console.WriteLine($"👤 {counter}. {student}");
            counter++;
        }
        
        Console.WriteLine("\n✅ تمام دانش‌آموزان نمایش داده شدند!");
        Console.WriteLine("برای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}
مثال پیشرفته: محاسبه میانگین نمرات
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("=== محاسبه میانگین نمرات ===");
        Console.WriteLine();
        
        double[] grades = {18.5, 16.0, 19.25, 17.75, 15.5, 20.0, 14.25};
        
        Console.WriteLine("📊 نمرات دانش‌آموز:");
        
        double sum = 0;
        int count = 0;
        
        foreach (double grade in grades)
        {
            count++;
            sum += grade;
            Console.WriteLine($"📝 نمره {count}: {grade}");
        }
        
        double average = sum / count;
        
        Console.WriteLine();
        Console.WriteLine($"📈 مجموع نمرات: {sum}");
        Console.WriteLine($"🔢 تعداد نمرات: {count}");
        Console.WriteLine($"🎯 میانگین: {average:F2}");
        
        if (average >= 17)
        {
            Console.WriteLine("🏆 عالی! دانش‌آموز ممتاز است.");
        }
        else if (average >= 14)
        {
            Console.WriteLine("👍 خوب! دانش‌آموز قبول است.");
        }
        else
        {
            Console.WriteLine("📚 نیاز به تلاش بیشتر دارد.");
        }
        
        Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

⚠️ نکات مهم و اشتباهات رایج:

  • حلقه بی‌نهایت: مواظب باشید شرط حلقه همیشه درست نمونه! حتماً متغیر شرط رو تغییر بدید
  • شروع از صفر: معمولاً آرایه‌ها از ایندکس 0 شروع می‌شن، نه 1
  • مرز آرایه: مواظب باشید از مرز آرایه خارج نشید (Index out of range)
  • انتخاب حلقه مناسب: for برای تعداد مشخص، while برای شرط، foreach برای مجموعه‌ها

💪 تمرین‌های عملی: حلقه‌ها و ساختارهای کنترلی

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

📊 تمرین 1: جدول ضرب پیشرفته

برنامه‌ای بنویسید که:

  • • از کاربر یک عدد بین 1 تا 12 بگیرد
  • • اگر عدد خارج از این محدوده بود، پیام خطا نمایش دهد
  • • جدول ضرب آن عدد را از 1 تا 10 با فرمت زیبا نمایش دهد
  • • از حلقه for و شرط if استفاده کند

💡 جواب تمرین 1

جواب تمرین 1
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("=== ماشین حساب جدول ضرب ===");
        Console.Write("لطفاً یک عدد بین 1 تا 12 وارد کنید: ");
        
        int number = int.Parse(Console.ReadLine());
        
        if (number < 1 || number > 12)
        {
            Console.WriteLine("❌ خطا! لطفاً عددی بین 1 تا 12 وارد کنید.");
        }
        else
        {
            Console.WriteLine($"\n🧮 جدول ضرب {number}:");
            Console.WriteLine("====================");
            
            for (int i = 1; i <= 10; i++)
            {
                int result = number * i;
                Console.WriteLine($"📝 {number} × {i:D2} = {result:D2}");
            }
            
            Console.WriteLine("\n✅ جدول ضرب کامل شد!");
        }
        
        Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

🎯 تمرین 2: بازی حدس عدد با محدودیت تلاش

برنامه‌ای بنویسید که:

  • • یک عدد تصادفی بین 1 تا 50 انتخاب کند
  • • به کاربر حداکثر 7 تلاش برای حدس زدن بدهد
  • • در هر تلاش راهنمایی "بالاتر" یا "پایین‌تر" بدهد
  • • از حلقه while و شرط‌های مختلف استفاده کند
  • • در پایان نتیجه بازی را اعلام کند

💡 جواب تمرین 2

جواب تمرین 2
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("🎮 === بازی حدس عدد === 🎮");
        Console.WriteLine("من یک عدد بین 1 تا 50 انتخاب کردم.");
        Console.WriteLine("شما 7 تلاش دارید تا آن را حدس بزنید!\n");
        
        Random random = new Random();
        int secretNumber = random.Next(1, 51);
        int maxAttempts = 7;
        int attempts = 0;
        bool hasWon = false;
        
        while (attempts < maxAttempts && !hasWon)
        {
            attempts++;
            Console.Write($"🎯 تلاش {attempts}/{maxAttempts}: عدد خود را وارد کنید: ");
            
            int guess = int.Parse(Console.ReadLine());
            
            if (guess == secretNumber)
            {
                hasWon = true;
                Console.WriteLine($"🎉 تبریک! درست حدس زدید!");
                Console.WriteLine($"🏆 عدد مخفی: {secretNumber}");
                Console.WriteLine($"⭐ تعداد تلاش‌ها: {attempts}");
            }
            else if (guess < secretNumber)
            {
                Console.WriteLine("🔺 خیلی کم! عدد بزرگ‌تری امتحان کنید.");
            }
            else
            {
                Console.WriteLine("🔻 خیلی زیاد! عدد کوچک‌تری امتحان کنید.");
            }
            
            if (!hasWon && attempts < maxAttempts)
            {
                Console.WriteLine($"💡 {maxAttempts - attempts} تلاش باقی مانده.\n");
            }
        }
        
        if (!hasWon)
        {
            Console.WriteLine($"\n😔 متأسفانه باختید!");
            Console.WriteLine($"🔍 عدد مخفی: {secretNumber} بود.");
            Console.WriteLine("🔄 دفعه بعد بهتر خواهید بود!");
        }
        
        Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

📚 تمرین 3: سیستم مدیریت نمرات کلاس

برنامه‌ای بنویسید که:

  • • آرایه‌ای از نمرات دانش‌آموزان داشته باشد
  • • با foreach تمام نمرات را نمایش دهد
  • • میانگین کلاس را محاسبه کند
  • • تعداد دانش‌آموزان قبول (نمره >= 10) و مردود را بشمارد
  • • بالاترین و پایین‌ترین نمره را پیدا کند

💡 جواب تمرین 3

جواب تمرین 3
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("📊 === سیستم مدیریت نمرات کلاس === 📊\n");
        
        double[] grades = {18.5, 12.0, 8.5, 19.25, 15.75, 7.0, 20.0, 14.25, 9.5, 16.5};
        string[] students = {"علی", "فاطمه", "محمد", "زهرا", "حسن", "مریم", "رضا", "نرگس", "امیر", "سارا"};
        
        Console.WriteLine("📋 لیست نمرات دانش‌آموزان:");
        Console.WriteLine("================================");
        
        double sum = 0;
        int passedCount = 0;
        int failedCount = 0;
        double highest = grades[0];
        double lowest = grades[0];
        string topStudent = students[0];
        string bottomStudent = students[0];
        
        int index = 0;
        foreach (double grade in grades)
        {
            Console.WriteLine($"👤 {students[index]}: {grade:F1}");
            
            sum += grade;
            
            if (grade >= 10)
            {
                passedCount++;
            }
            else
            {
                failedCount++;
            }
            
            if (grade > highest)
            {
                highest = grade;
                topStudent = students[index];
            }
            
            if (grade < lowest)
            {
                lowest = grade;
                bottomStudent = students[index];
            }
            
            index++;
        }
        
        double average = sum / grades.Length;
        
        Console.WriteLine("\n📈 === آمار کلی === 📈");
        Console.WriteLine($"🎯 میانگین کلاس: {average:F2}");
        Console.WriteLine($"✅ تعداد قبولی‌ها: {passedCount} نفر");
        Console.WriteLine($"❌ تعداد مردودی‌ها: {failedCount} نفر");
        Console.WriteLine($"🏆 بالاترین نمره: {highest:F1} ({topStudent})");
        Console.WriteLine($"📉 پایین‌ترین نمره: {lowest:F1} ({bottomStudent})");
        
        Console.WriteLine("\n🎓 === وضعیت کلاس === 🎓");
        if (average >= 15)
        {
            Console.WriteLine("🌟 کلاس عالی! میانگین بسیار خوبی دارید.");
        }
        else if (average >= 12)
        {
            Console.WriteLine("👍 کلاس خوب! میانگین قابل قبولی دارید.");
        }
        else
        {
            Console.WriteLine("📚 کلاس نیاز به تلاش بیشتری دارد.");
        }
        
        Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
        Console.ReadKey();
    }
}

🔥 چالش پیشرفته: ماشین حساب منو محور

برنامه‌ای بنویسید که:

  • • منویی با گزینه‌های مختلف نمایش دهد (جمع، تفریق، ضرب، تقسیم، خروج)
  • • از switch برای انتخاب عملیات استفاده کند
  • • از while برای تکرار منو تا انتخاب خروج استفاده کند
  • • تمام عملیات‌های ریاضی را پیاده‌سازی کند
  • • مدیریت خطا برای تقسیم بر صفر داشته باشد

💡 جواب چالش پیشرفته

جواب چالش پیشرفته
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("🧮 === ماشین حساب پیشرفته === 🧮\n");
        
        bool continueProgram = true;
        
        while (continueProgram)
        {
            Console.WriteLine("📋 === منوی اصلی === 📋");
            Console.WriteLine("1️⃣  جمع (+)");
            Console.WriteLine("2️⃣  تفریق (-)");
            Console.WriteLine("3️⃣  ضرب (×)");
            Console.WriteLine("4️⃣  تقسیم (÷)");
            Console.WriteLine("5️⃣  خروج");
            Console.WriteLine("========================");
            Console.Write("🎯 گزینه خود را انتخاب کنید: ");
            
            int choice = int.Parse(Console.ReadLine());
            
            switch (choice)
            {
                case 1:
                    PerformAddition();
                    break;
                case 2:
                    PerformSubtraction();
                    break;
                case 3:
                    PerformMultiplication();
                    break;
                case 4:
                    PerformDivision();
                    break;
                case 5:
                    Console.WriteLine("👋 خداحافظ! از استفاده شما متشکریم.");
                    continueProgram = false;
                    break;
                default:
                    Console.WriteLine("❌ گزینه نامعتبر! لطفاً عددی بین 1 تا 5 وارد کنید.\n");
                    break;
            }
            
            if (continueProgram)
            {
                Console.WriteLine("\nبرای ادامه کلیدی را فشار دهید...");
                Console.ReadKey();
                Console.Clear();
            }
        }
    }
    
    static void PerformAddition()
    {
        Console.WriteLine("\n➕ === عملیات جمع === ➕");
        Console.Write("عدد اول را وارد کنید: ");
        double num1 = double.Parse(Console.ReadLine());
        Console.Write("عدد دوم را وارد کنید: ");
        double num2 = double.Parse(Console.ReadLine());
        
        double result = num1 + num2;
        Console.WriteLine($"🎯 نتیجه: {num1} + {num2} = {result}");
    }
    
    static void PerformSubtraction()
    {
        Console.WriteLine("\n➖ === عملیات تفریق === ➖");
        Console.Write("عدد اول را وارد کنید: ");
        double num1 = double.Parse(Console.ReadLine());
        Console.Write("عدد دوم را وارد کنید: ");
        double num2 = double.Parse(Console.ReadLine());
        
        double result = num1 - num2;
        Console.WriteLine($"🎯 نتیجه: {num1} - {num2} = {result}");
    }
    
    static void PerformMultiplication()
    {
        Console.WriteLine("\n✖️ === عملیات ضرب === ✖️");
        Console.Write("عدد اول را وارد کنید: ");
        double num1 = double.Parse(Console.ReadLine());
        Console.Write("عدد دوم را وارد کنید: ");
        double num2 = double.Parse(Console.ReadLine());
        
        double result = num1 * num2;
        Console.WriteLine($"🎯 نتیجه: {num1} × {num2} = {result}");
    }
    
    static void PerformDivision()
    {
        Console.WriteLine("\n➗ === عملیات تقسیم === ➗");
        Console.Write("عدد اول (صورت) را وارد کنید: ");
        double num1 = double.Parse(Console.ReadLine());
        Console.Write("عدد دوم (مخرج) را وارد کنید: ");
        double num2 = double.Parse(Console.ReadLine());
        
        if (num2 == 0)
        {
            Console.WriteLine("❌ خطا! تقسیم بر صفر امکان‌پذیر نیست.");
        }
        else
        {
            double result = num1 / num2;
            Console.WriteLine($"🎯 نتیجه: {num1} ÷ {num2} = {result:F2}");
        }
    }
}