switch (grade)
{
case 'A':
case 'B':
case 'C':
Console.WriteLine("You passed!");
break;
case 'D':
case 'F':
Console.WriteLine("You failed!");
break;
default:
Console.WriteLine("Invalid grade");
break;
}
---
✅ تمرین نهایی درس سوم
برنامهای بنویسید که:
1. از کاربر یک عدد بین 1 تا 12 بگیرد (ماه میلادی)
2. با switch نام ماه را چاپ کند
3. تعداد روزهای آن ماه را با if-else تعیین کند
4. بگوید فصل آن ماه چیست (بهار، تابستان، پاییز، زمستان)
csharp
Console.Write("Enter month number (1-12): ");
int month = int.Parse(Console.ReadLine());
// قسمت 1: نام ماه با switch
string monthName;
switch (month)
{
case 1: monthName = "January"; break;
case 2: monthName = "February"; break;
case 3: monthName = "March"; break;
case 4: monthName = "April"; break;
case 5: monthName = "May"; break;
case 6: monthName = "June"; break;
case 7: monthName = "July"; break;
case 8: monthName = "August"; break;
case 9: monthName = "September"; break;
case 10: monthName = "October"; break;
case 11: monthName = "November"; break;
case 12: monthName = "December"; break;
default: monthName = "Invalid"; break;
}
// قسمت 2: تعداد روزها با if-else
int days;
if (month == 2)
{
days = 28; // کبیسه را فعلاً نادیده میگیریم
}
else if (month == 4 || month == 6 || month == 9 || month == 11)
{
days = 30;
}
else
{
days = 31;
}
// قسمت 3: تشخیص فصل
string season;
if (month >= 3 && month <= 5)
{
season = "Spring";
}
else if (month >= 6 && month <= 8)
{
season = "Summer";
}
else if (month >= 9 && month <= 11)
{
season = "Autumn";
}
else
{
season = "Winter";
}
Console.WriteLine($"Month: {monthName}");
Console.WriteLine($"Days: {days}");
Console.WriteLine($"Season: {season}");
Console.WriteLine("Press Enter to exit...");
Console.ReadLine();
`--- 📌 جمعبندی درس سوم مفهوم مثال if ساده if (x > 5) { ... } if-else if (x > 5) { ... } else { ... } else if if (x > 90) { ... } else if (x > 80) { ... } switch switch(day) { case 1: ... break; } عملگرهای مقایسه ==, !=, >, <, >=, <= عملگرهای منطقی && (و), ` --- 🧪 تمرین کوچک برای شما برنامهای بنویسید که یک عدد از کاربر بگیرد و بگوید: · عدد مثبت است، منفی است یا صفر · زوج است یا فرد (از عملگر % استفاده کنید: number % 2 == 0) اگر انجام دادید و جواب گرفتید، بگویید تا درس چهارم (حلقهها) را شروع کنیم. سوالی بود بپرسید.
خیلی خوب، رسیدیم به درس چهارم: انواع عملگرها در سیشارپ.
این درس مکمل درس سوم است. عملگرها همان ابزارهایی هستند که با متغیرها کار میکنند (محاسبه، مقایسه، شرط و...).
یک پروژه جدید بسازید و کدها را اجرا کنید.
---
📘 درس چهارم – انواع عملگرها (Operators)
🎯 سرفصلها:
1. عملگرهای حسابی (ریاضی)
2. عملگرهای افزایش و کاهش (++ و --)
3. عملگرهای مقایسهای
4. عملگرهای منطقی
5. عملگرهای شرطی (ternary - ? :)
6. عملگرهای انتساب ترکیبی (+=, -=, *=, /=)
7. اولویت عملگرها
---
⏱️ قسمت 1: عملگرهای حسابی (Arithmetic)
عملگر معنی مثال نتیجه
+ جمع 5 + 3 8
- تفریق 5 - 3 2
* ضرب 5 * 3 15
/ تقسیم 5 / 2 2 (با int)
% باقیمانده 5 % 2 1
csharp
int a = 17;
int b = 5;
Console.WriteLine(a + b); // 22
Console.WriteLine(a - b); // 12
Console.WriteLine(a * b); // 85
Console.WriteLine(a / b); // 3 (چون int است)
Console.WriteLine(a % b); // 2 (باقیمانده 17 تقسیم بر 5)
تقسیم اعشاری دقیق:
csharp
double x = 17;
double y = 5;
Console.WriteLine(x / y); // 3.4
---
⏱️ قسمت 2: عملگرهای افزایش و کاهش (Increment & Decrement)
عملگر معنی مثال معادل
++ افزایش یک واحد x++ یا ++x x = x + 1
-- کاهش یک واحد x-- یا --x x = x - 1
تفاوت پیشوند و پسوند (مهم):
csharp
int x = 5;
Console.WriteLine(x++); // اول چاپ میکند (5)، بعد زیاد میکند
Console.WriteLine(x); // حالا شده 6
int y = 5;
Console.WriteLine(++y); // اول زیاد میکند (6)، بعد چاپ میکند
📌 نکته:
· x++ = بعد از استفاده، زیاد کن
· ++x = اول زیاد کن، بعد استفاده کن
csharp
int counter = 0;
counter++; // یک واحد زیاد شد
counter--; // یک واحد کم شد
---
⏱️ قسمت 3: عملگرهای مقایسهای (Comparison)
نتیجه این عملگرها همیشه bool است (true یا false).
عملگر معنی
== مساوی
!= نامساوی
> بزرگتر
< کوچکتر
>= بزرگتر یا مساوی
<= کوچکتر یا مساوی
csharp
int age = 20;
Console.WriteLine(age == 18); // False
Console.WriteLine(age != 18); // True
Console.WriteLine(age > 18); // True
Console.WriteLine(age < 18); // False
Console.WriteLine(age >= 20); // True
Console.WriteLine(age <= 20); // True
---
⏱️ قسمت 4: عملگرهای منطقی (Logical)
برای ترکیب چند شرط استفاده میشوند.
عملگر معنی توضیح
&& AND (و) هر دو طرف درست باشند → true
! NOT (نقیض) true را false و false را true میکند جدول درستی: | A | B | A && B | A || B | !A | |---|---|--------|----------|----| | true | true | true | true | false | | true | false | false | true | false | | false | true | false | true | true | | false | false | false | false | true | مثال عملی: csharp int score = 85; bool hasHomework = true; // هر دو شرط باید درست باشد if (score >= 70 && hasHomework == true) { Console.WriteLine("Passed"); } // حداقل یکی درست باشد if (score >= 90 || hasHomework == true) { Console.WriteLine("Good or did homework"); } // برعکس کردن bool isRaining = false; if (!isRaining) { Console.WriteLine("Go outside"); } --- ⏱️ قسمت 5: عملگر شرطی (Ternary) - ? : یک if-else کوتاه و یک خطی. ساختار: csharp شرط ? مقدار_اگر_درست : مقدار_اگر_غلط مثال: csharp int age = 20; string result = (age >= 18) ? "Adult" : "Minor"; Console.WriteLine(result); // Adult مقایسه با if-else عادی: csharp // روش عادی (if-else) int score = 75; string grade; if (score >= 60) { grade = "Pass"; } else { grade = "Fail"; } // روش Ternary string grade2 = (score >= 60) ? "Pass" : "Fail"; مثال دیگر: csharp int number = 7; string evenOdd = (number % 2 == 0) ? "Even" : "Odd"; Console.WriteLine(evenOdd); // Odd --- ⏱️ قسمت 6: عملگرهای انتساب ترکیبی (Compound Assignment) این عملگرها کار با متغیر را کوتاهتر میکنند. عملگر معنی معادل += جمع و نسبت x = x + 5 -= تفریق و نسبت x = x - 5 *= ضرب و نسبت x = x * 5 /= تقسیم و نسبت x = x / 5 %= باقیمانده و نسبت x = x % 5 csharp int x = 10; x += 5; // x = 15 x -= 3; // x = 12 x *= 2; // x = 24 x /= 4; // x = 6 x %= 5; // x = 1 Console.WriteLine(x); // 1 --- ⏱️ قسمت 7: اولویت عملگرها (Precedence) ترتیب محاسبه در ریاضیات: 1. () پرانتز (بالاترین اولویت) 2. ++ -- (پیشوند) 3. * / % 4. + - 5. < > <= >= 6. == != 7. && 8. || (پایینترین اولویت) مثال:
csharp
int result = 5 + 3 * 2; // 11 (اول ضرب: 3*2=6، بعد جمع)
int result2 = (5 + 3) * 2; // 16 (اول پرانتز: 5+3=8، بعد ضرب)
bool r = 5 > 3 && 2 < 4; // true (اول مقایسهها، بعد &&)
---
✅ تمرین نهایی درس چهارم
برنامهای بنویسید که:
1. دو عدد از کاربر بگیرد
2. تمام عملگرهای حسابی را روی آنها انجام دهد (جمع، تفریق، ضرب، تقسیم، باقیمانده)
3. بگوید آیا مجموع آنها زوج است یا فرد (با ternary)
4. یک شمارنده داشته باشد که هر بار عدد اول را ۱ واحد افزایش دهد
csharp
Console.Write("Enter first number: ");
int num1 = int.Parse(Console.ReadLine());
Console.Write("Enter second number: ");
int num2 = int.Parse(Console.ReadLine());
// عملگرهای حسابی
Console.WriteLine($"\n{num1} + {num2} = {num1 + num2}");
Console.WriteLine($"{num1} - {num2} = {num1 - num2}");
Console.WriteLine($"{num1} * {num2} = {num1 * num2}");
Console.WriteLine($"{num1} / {num2} = {num1 / num2} (integer division)");
Console.WriteLine($"{num1} % {num2} = {num1 % num2} (remainder)");
// عملگر ternary برای زوج یا فرد بودن مجموع
int sum = num1 + num2;
string parity = (sum % 2 == 0) ? "Even" : "Odd";
Console.WriteLine($"Sum ({sum}) is {parity}");
// عملگرهای افزایش و انتساب ترکیبی
int counter = num1;
Console.WriteLine($"\nCounter starts at: {counter}");
Console.WriteLine($"Counter++ (post): {counter++}"); // اول چاپ، بعد زیاد
Console.WriteLine($"After post-increment: {counter}");
Console.WriteLine($"++Counter (pre): {++counter}"); // اول زیاد، بعد چاپ
counter += 10;
Console.WriteLine($"After += 10: {counter}");
Console.WriteLine("\nPress Enter to exit...");
Console.ReadLine();
---
📌 جمعبندی درس چهارم
دسته عملگرها
حسابی +, -, *, /, %
افزایش/کاهش ++, --
مقایسهای ==, !=, >, <, >=, <=
منطقی &&,
شرطی (ternary) ? : انتساب ترکیبی +=, -=, *=, /=, %= --- 🧪 تمرین برای شما بدون اجرا، بگویید خروجی این کد چیست؟ ``csharp int a = 10; int b = 3; bool c = (a++ > 10) && (b-- < 5); Console.WriteLine($"a={a}, b={b}, c={c}");
`(جواب: a=11, b=2, c=False زیرا a++ > 10 ابتدا a=10 را مقایسه میکند که false است، پس عملگر && بقیه را چک نمیکند و b-- اجرا نمیشود) --- اگر این درس را کامل فهمیدید، بگویید تا درس پنجم (حلقهها) را شروع کنیم. سوالی بود بپرسید.
خیلی خوب، میخواهید try-catch (مدیریت خطا) را یاد بگیرید. این یک مبحث بسیار مهم است.
فعلاً "Try cash" را به عنوان try-catch در نظر میگیرم. اگر چیز دیگری مد نظرتان بود، بگویید.
---
📘 درس پنجم – مدیریت خطا با try-catch
🎯 سرفصلها:
1. خطا چیست و چرا برنامه کرش میکند؟
2. ساختار try-catch
3. گرفتن خطای خاص (مثلاً FormatException)
4. finally (همیشه اجرا میشود)
5. تمرین عملی
---
⏱️ قسمت 1: مشکل بدون try-catch
کد زیر را اجرا کنید و به جای عدد، یک متن وارد کنید:
csharp
Console.Write("Enter a number: ");
int number = int.Parse(Console.ReadLine()); // اگر کاربر "abc" وارد کند → خطا!
Console.WriteLine("You entered: " + number);
خروجی خطا:
Unhandled exception. System.FormatException: Input string was not in a correct format.
برنامه کرش میکند و میپرد.
---
⏱️ قسمت 2: راه حل با try-catch
csharp
try
{
Console.Write("Enter a number: ");
int number = int.Parse(Console.ReadLine());
Console.WriteLine("You entered: " + number);
}
catch
{
Console.WriteLine("Error! Please enter a valid number.");
}
Console.WriteLine("Program continues...");
📌 نحوه کار:
· try = کدی که ممکن است خطا دهد را اینجا میگذاریم
· catch = اگر خطایی رخ داد، این قسمت اجرا میشود
· برنامه کرش نمیکند و ادامه میدهد
---
⏱️ قسمت 3: گرفتن خطای خاص (Type-Specific Catch)
میتوانیم نوع خطا را مشخص کنیم و پیام مناسب بدهیم:
csharp
try
{
Console.Write("Enter your age: ");
int age = int.Parse(Console.ReadLine());
if (age < 0 || age > 150)
{
Console.WriteLine("Invalid age range!");
}
else
{
Console.WriteLine($"Your age is: {age}");
}
}
catch (FormatException)
{
Console.WriteLine("Error: Please enter a number, not text!");
}
catch (OverflowException)
{
Console.WriteLine("Error: Number is too large or too small!");
}
catch (Exception ex)
{
Console.WriteLine($"General error: {ex.Message}");
}
📌 انواع خطاهای رایج:
نوع خطا زمان رخ دادن
FormatException کاربر به جای عدد، متن وارد کرده
OverflowException عدد از محدوده int خارج است
DivideByZeroException تقسیم بر صفر
Exception هر خطای دیگری (پدر همه خطاها)
---
⏱️ قسمت 4: try-catch برای تقسیم بر صفر
csharp
try
{
Console.Write("Enter first number: ");
int a = int.Parse(Console.ReadLine());
Console.Write("Enter second number: ");
int b = int.Parse(Console.ReadLine());
int result = a / b;
Console.WriteLine($"{a} / {b} = {result}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Error: Cannot divide by zero!");
}
catch (FormatException)
{
Console.WriteLine("Error: Please enter valid numbers!");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
---
⏱️ قسمت 5: finally (همیشه اجرا میشود)
finally چه خطایی رخ بدهد و چه ندهد، حتماً اجرا میشود.
csharp
try
{
Console.Write("Enter a number: ");
int number = int.Parse(Console.ReadLine());
Console.WriteLine($"You entered: {number}");
}
catch (FormatException)
{
Console.WriteLine("Invalid input!");
}
finally
{
Console.WriteLine("This always runs (like closing files or database connections)");
}
Console.WriteLine("Program ends");
---
⏱️ قسمت 6: مثال کامل و کاربردی
برنامهای که سن کاربر را بگیرد و خطاها را مدیریت کند:
`csharp using System.Text; Console.OutputEncoding = Encoding.UTF8; bool validInput = false; while (!validInput) { try { Console.Write("Enter your birth year: "); string input = Console.ReadLine(); int birthYear = int.Parse(input); int currentYear = DateTime.Now.Year; if (birthYear < 1900 || birthYear > currentYear) { Console.WriteLine("Please enter a valid year (1900 to " + currentYear + ")"); continue; } int age = currentYear - birthYear;
Console.WriteLine($"Your age is: {age}");
validInput = true;
}
catch (FormatException)
{
Console.WriteLine("Error: Please enter numbers only (not letters)!");
}
catch (OverflowException)
{
Console.WriteLine("Error: Number is too large!");
}
catch (Exception ex)
{
Console.WriteLine($"Unexpected error: {ex.Message}");
}
}
Console.WriteLine("Thank you!");
Console.ReadLine();
---
✅ تمرین نهایی درس پنجم
برنامهای بنویسید که:
1. دو عدد از کاربر بگیرد
2. عمل تقسیم را انجام دهد
3. با try-catch این خطاها را مدیریت کند:
· وارد کردن متن به جای عدد
· تقسیم بر صفر
4. در finally بنویسد "Operation completed"
csharp
// تمرین - خودتان کامل کنید
try
{
Console.Write("Enter first number: ");
int num1 = int.Parse(Console.ReadLine());
Console.Write("Enter second number: ");
int num2 = int.Parse(Console.ReadLine());
int result = num1 / num2;
Console.WriteLine($"Result: {result}");
}
// catch ها را خودتان اضافه کنید
catch (FormatException)
{
// پیام مناسب
}
catch (DivideByZeroException)
{
// پیام مناسب
}
finally
{
Console.WriteLine("Operation completed");
}
---
📌 جمعبندی try-catch
کلیدواژه کاربرد
try کدی که ممکن است خطا دهد را اینجا میگذاریم
catch اگر خطا رخ داد، این قسمت اجرا میشود
finally همیشه اجرا میشود (اختیاری)
throw ایجاد خطای جدید (پیشرفته)
فرمت کلی:
csharp
try
{
// کد پرخطر
}
catch (نوع_خطا)
{
// مدیریت خطا
}
finally
{
// پاکسازی (اختیاری)
}
`--- اگر این درس را کامل فهمیدید، بگویید. هر سوالی دارید بپرسید.
خیلی خوب، رسیدیم به درس پنجم: انواع حلقهها در سیشارپ.
یک پروژه جدید بسازید (dotnet new console) و کدها را همراه من بنویسید و اجرا کنید.
---
📘 درس پنجم – انواع حلقهها (Loops)
🎯 سرفصلها:
1. حلقه for (وقتی تعداد دفعات مشخص است)
2. حلقه while (وقتی شرط مشخص است)
3. حلقه do-while (حداقل یک بار اجرا میشود)
4. حلقه foreach (برای آرایه و لیست)
5. دستورات break و continue
6. حلقههای تو در تو
7. تمرین جامع
---
⏱️ قسمت 1: حلقه for (تعداد دفعات مشخص)
ساختار:
csharp
for (شروع; شرط; گام)
{
// کد تکراری
}
مثال ساده – چاپ اعداد 1 تا 5:
csharp
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
خروجی:
1
2
3
4
5
📌 توضیح:
· int i = 1 → شروع (یک بار اجرا میشود)
· i <= 5 → شرط (اگر true باشد، حلقه ادامه مییابد)
· i++ → گام (بعد هر بار اجرا، i را یک واحد زیاد کن)
مثالهای بیشتر:
csharp
// چاپ اعداد زوج 2 تا 10
for (int i = 2; i <= 10; i += 2)
{
Console.Write(i + " ");
}
// خروجی: 2 4 6 8 10
// شمارش معکوس 10 تا 1
for (int i = 10; i >= 1; i--)
{
Console.Write(i + " ");
}
// خروجی: 10 9 8 7 6 5 4 3 2 1
---
⏱️ قسمت 2: حلقه while (وقتی شرط مشخص است)
تا زمانی که شرط true است، اجرا میشود. ممکن است هیچ بار اجرا نشود.
ساختار:
csharp
while (شرط)
{
// کد تکراری
}
مثال – چاپ اعداد 1 تا 5 با while:
csharp
int i = 1;
while (i <= 5)
{
Console.WriteLine(i);
i++;
}
مثال – تا زمانی که کاربر عدد منفی نزند:
csharp
int number = 0;
while (number >= 0)
{
Console.Write("Enter a number (negative to exit): ");
number = int.Parse(Console.ReadLine());
Console.WriteLine($"You entered: {number}");
}
Console.WriteLine("Program ended");
---
⏱️ قسمت 3: حلقه do-while (حداقل یک بار اجرا میشود)
مثل while است، اما شرط بعد از اجرا چک میشود. پس حتماً یک بار اجرا میشود.
ساختار:
csharp
do
{
// کد تکراری
}
while (شرط);
مثال:
csharp
int number;
do
{
Console.Write("Enter a positive number: ");
number = int.Parse(Console.ReadLine());
}
while (number <= 0);
Console.WriteLine($"Good! You entered {number}");
تفاوت while و do-while:
csharp
// while: ممکن است اجرا نشود
int x = 10;
while (x < 5)
{
Console.WriteLine("This won't print");
}
// do-while: حتماً یک بار اجرا میشود
int y = 10;
do
{
Console.WriteLine("This will print once");
}
while (y < 5);
---
⏱️ قسمت 4: حلقه foreach (برای آرایه و لیست)
وقتی میخواهیم همه اعضای یک مجموعه را یکی یکی بگردیم.
ساختار:
csharp
foreach (نوع متغیر in مجموعه)
{
// کد
}
مثال:
csharp
string[] names = { "Ali", "Reza", "Sara", "Neda" };
foreach (string name in names)
{
Console.WriteLine("Hello " + name);
}
خروجی:
Hello Ali
Hello Reza
Hello Sara
Hello Neda
مثال با اعداد:
csharp
int[] scores = { 18, 20, 15, 19, 17 };
int sum = 0;
foreach (int score in scores)
{
sum += score;
}
Console.WriteLine($"Average: {(double)sum / scores.Length}");
---
⏱️ قسمت 5: دستورات break و continue
break – خارج شدن از حلقه (پرش بیرون)
csharp
for (int i = 1; i <= 10; i++)
{
if (i == 5)
{
break; // وقتی i=5 شد، حلقه متوقف میشود
}
Console.WriteLine(i);
}
// خروجی: 1 2 3 4
continue – رفتن به دور بعدی (پرش به ادامه)
csharp
for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
continue; // اعداد زوج را نادیده میگیرد
}
Console.WriteLine(i);
}
// خروجی: 1 3 5 7 9 (فقط فردها)
---
⏱️ قسمت 6: حلقههای تو در تو (Nested Loops)
حلقه داخل حلقه.
مثال – جدول ضرب:
csharp
for (int i = 1; i <= 5; i++)
{
for (int j = 1; j <= 5; j++)
{
Console.Write($"{i * j}\t"); // \t = تب
}
Console.WriteLine(); // خط جدید بعد هر سطر
}
خروجی:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
مثال – چاپ مثلث ستارهای:
csharp
int rows = 5;
for (int i = 1; i <= rows; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
خروجی:
*
**
***
****
*****
---
✅ تمرین نهایی درس پنجم
برنامهای بنویسید که:
1. با حلقه while، از کاربر عدد بگیرد تا عدد منفی وارد کند
2. مجموع اعداد مثبت را محاسبه کند
3. با حلقه for، اعداد 1 تا 20 را چاپ کند اما اعداد بخشپذیر بر 3 را با continue نادیده بگیرد
4. با حلقه do-while، یک منوی ساده بسازد (1. سلام 2. خداحافظ 0. خروج)
csharp
// قسمت 1: جمع اعداد مثبت با while
int sum = 0;
int input;
Console.WriteLine("Enter numbers (negative to stop):");
while (true)
{
Console.Write("Number: ");
input = int.Parse(Console.ReadLine());
if (input < 0)
break;
sum += input;
}
Console.WriteLine($"Sum of positive numbers: {sum}");
// قسمت 2: اعداد 1 تا 20 به جز بخشپذیر بر 3
Console.WriteLine("\nNumbers 1-20 except multiples of 3:");
for (int i = 1; i <= 20; i++)
{
if (i % 3 == 0)
continue;
Console.Write(i + " ");
}
// قسمت 3: منو با do-while
Console.WriteLine("\n\n=== Menu ===");
int choice;
do
{
Console.WriteLine("1. Say Hello");
Console.WriteLine("2. Say Goodbye");
Console.WriteLine("0. Exit");
Console.Write("Choose: ");
choice = int.Parse(Console.ReadLine());
switch (choice)
{
case 1:
Console.WriteLine("Hello dear user!");
break;
case 2:
Console.WriteLine("Goodbye! See you later.");
break;
case 0:
Console.WriteLine("Exiting...");
break;
default:
Console.WriteLine("Invalid choice!");
break;
}
}
while (choice != 0);
Console.WriteLine("Press Enter to exit...");
Console.ReadLine();
---
📌 جمعبندی حلقهها
حلقه زمان استفاده حداقل اجرا
for تعداد دفعات مشخص 0 بار
while شرط مشخص، شاید اجرا نشود 0 بار
do-while حتماً یک بار اجرا شود 1 بار
foreach پیمایش آرایه/لیست 0 بار
دستورات کمکی:
· break → خروج کامل از حلقه
· continue → رفتن به دور بعدی
---
🧪 تمرین برای شما
1. با حلقه for، فاکتوریل عدد 5 را محاسبه کنید (5! = 5×4×3×2×1 = 120)
2. با حلقه while، دنباله فیبوناچی (0,1,1,2,3,5,8,13,...) تا عدد 100 را چاپ کنید
3. با حلقههای تو در تو، شکل زیر را چاپ کنید:
11111
22222
33333
44444
55555
---
اگر این درس را کامل فهمیدید، بگویید تا درس ششم (آرایهها و لیستها) را شروع کنیم. سوالی بود بپرسید.
خیلی خوب، رسیدیم به درس ششم: آرایهها (Array) و لیستها (List).
یک پروژه جدید بسازید (dotnet new console) و کدها را همراه من بنویسید و اجرا کنید.
---
📘 درس ششم – آرایهها و لیستها
🎯 سرفصلها:
1. آرایه چیست و چرا نیاز داریم؟
2. تعریف و مقداردهی آرایه
3. دسترسی به اعضای آرایه (index)
4. حلقه زدن روی آرایه
5. متدهای مفید آرایه
6. List<T> چیست و چه فرقی با آرایه دارد؟
7. متدهای اصلی List (Add, Remove, Contains, Count)
8. تمرین جامع
---
⏱️ قسمت 1: آرایه چیست؟
آرایه = چند تا متغیر از یک نوع، کنار هم با یک اسم
بدون آرایه (کد بد):
csharp
int score1 = 18;
int score2 = 17;
int score3 = 20;
int score4 = 15;
int score5 = 19;
// برای 100 تا عدد چه کنیم؟؟
با آرایه (کد خوب):
csharp
int[] scores = { 18, 17, 20, 15, 19 };
---
⏱️ قسمت 2: تعریف و مقداردهی آرایه
روشهای مختلف ساخت آرایه:
csharp
// روش 1: مقداردهی مستقیم
int[] numbers1 = { 10, 20, 30, 40 };
// روش 2: تعیین اندازه و بعداً مقداردهی
int[] numbers2 = new int[3]; // 3 خانه خالی (0, 0, 0)
numbers2[0] = 100;
numbers2[1] = 200;
numbers2[2] = 300;
// روش 3: با new و مقداردهی همزمان
int[] numbers3 = new int[] { 5, 10, 15 };
// روش 4: آرایه از نوع string
string[] names = { "Ali", "Reza", "Sara" };
// روش 5: آرایه از نوع double
double[] prices = { 12.5, 9.99, 45.0 };
---
⏱️ قسمت 3: دسترسی به اعضای آرایه (Index)
ایندکس (اندیس) = شماره خانه از 0 شروع میشود
csharp
int[] numbers = { 100, 200, 300, 400, 500 };
Console.WriteLine(numbers[0]); // 100 (اولین)
Console.WriteLine(numbers[1]); // 200 (دومین)
Console.WriteLine(numbers[2]); // 300 (سومین)
Console.WriteLine(numbers[3]); // 400
Console.WriteLine(numbers[4]); // 500
// تغییر مقدار
numbers[2] = 999;
Console.WriteLine(numbers[2]); // 999
📌 نکته مهم: اگر ایندکس خارج از محدوده باشد → خطای IndexOutOfRangeException
csharp
// این کد خطا میدهد:
int[] arr = { 1, 2, 3 };
Console.WriteLine(arr[3]); // خطا! آخرین ایندکس 2 است
---
⏱️ قسمت 4: حلقه زدن روی آرایه
با حلقه for:
csharp
int[] scores = { 18, 20, 15, 19, 17 };
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine($"Index {i}: {scores[i]}");
}
با حلقه foreach (سادهتر):
csharp
int[] scores = { 18, 20, 15, 19, 17 };
foreach (int score in scores)
{
Console.WriteLine(score);
}
محاسبه مجموع اعداد آرایه:
csharp
int[] numbers = { 10, 20, 30, 40, 50 };
int sum = 0;
foreach (int num in numbers)
{
sum += num;
}
Console.WriteLine($"Sum: {sum}"); // 150
Console.WriteLine($"Average: {sum / numbers.Length}"); // 30
---
⏱️ قسمت 5: متدهای مفید آرایه
csharp
int[] numbers = { 30, 10, 50, 20, 40 };
Console.WriteLine($"Length: {numbers.Length}"); // 5
Console.WriteLine($"First: {numbers[0]}"); // 30
Console.WriteLine($"Last: {numbers[numbers.Length - 1]}"); // 40
Array.Sort(numbers); // مرتبسازی صعودی
Console.WriteLine("After sort: " + string.Join(", ", numbers)); // 10, 20, 30, 40, 50
Array.Reverse(numbers); // برعکس کردن
Console.WriteLine("After reverse: " + string.Join(", ", numbers)); // 50, 40, 30, 20, 10
Array.Clear(numbers, 0, 2); // پاک کردن 2 خانه اول (میشوند 0)
Console.WriteLine("After clear: " + string.Join(", ", numbers)); // 0, 0, 30, 20, 10
---
⏱️ قسمت 6: List<T> چیست و فرق آن با آرایه
List یک آرایه داینامیک است که میتواند بزرگ و کوچک شود.
ویژگی آرایه (Array) لیست (List)
اندازه ثابت قابل تغییر
افزودن عضو ❌ نداریم ✅ Add()
حذف عضو ❌ نداریم ✅ Remove()
سرعت کمی سریعتر کمی کندتر
استفاده از List (نیاز به using):
csharp
using System.Collections.Generic; // باید اضافه شود
List<int> numbers = new List<int>();
// افزودن عضو
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
Console.WriteLine(string.Join(", ", numbers)); // 10, 20, 30
// دسترسی با ایندکس
Console.WriteLine(numbers[1]); // 20
// تعداد اعضا
Console.WriteLine(numbers.Count); // 3
---
⏱️ قسمت 7: متدهای اصلی List
`csharp List<string> names = new List<string>(); // افزودن names.Add("Ali"); names.Add("Reza"); names.Add("Sara"); names.Add("Ali"); // میشود تکراری داشت
// نمایش
Console.WriteLine("All names: " + string.Join(", ", names)); // Ali, Reza, Sara, Ali
// حذف (اولین مورد)
names.Remove("Ali"); // حذف اولین "Ali"
Console.WriteLine("After remove: " + string.Join(", ", names)); // Reza, Sara, Ali
// حذف با ایندکس
names.RemoveAt(1); // حذف ایندکس 1 (Sara)
Console.WriteLine("After remove at 1: " + string.Join(", ", names)); // Reza, Ali
// بررسی وجود
bool hasReza = names.Contains("Reza");
Console.WriteLine($"Contains Reza? {hasReza}"); // True
// تعداد اعضا
Console.WriteLine($"Count: {names.Count}"); // 2
// پاک کردن همه
names.Clear();
Console.WriteLine($"After clear: {names.Count}"); // 0
حلقه زدن روی List:
csharp
List<int> scores = new List<int> { 18, 20, 15, 19, 17 };
// با foreach
foreach (int s in scores)
{
Console.WriteLine(s);
}
// با for
for (int i = 0; i < scores.Count; i++)
{
Console.WriteLine($"Index {i}: {scores[i]}");
}
---
⏱️ قسمت 8: آرایه دوبعدی (مقدماتی)
csharp
// آرایه 3x4 (3 سطر، 4 ستون)
int[,] matrix = new int[3, 4];
// مقداردهی
matrix[0, 0] = 1;
matrix[0, 1] = 2;
matrix[0, 2] = 3;
matrix[0, 3] = 4;
matrix[1, 0] = 5;
matrix[1, 1] = 6;
matrix[1, 2] = 7;
matrix[1, 3] = 8;
// مقداردهی مستقیم
int[,] numbers = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
// حلقه زدن روی آرایه دوبعدی
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write(numbers[i, j] + " ");
}
Console.WriteLine();
}
---
✅ تمرین نهایی درس ششم
برنامهای بنویسید که:
1. یک آرایه از 5 نمره دانشجو بسازد
2. با حلقه، مجموع و میانگین را محاسبه کند
3. یک List از نام دانشجوها بسازد
4. از کاربر نام بگیرد و به لیست اضافه کند
5. امکان جستجو در لیست را با Contains بدهد
6. بالاترین نمره را از آرایه پیدا کند
csharp
using System;
using System.Collections.Generic;
// قسمت 1: آرایه نمرات
int[] scores = { 18, 20, 15, 19, 17 };
// محاسبه مجموع و میانگین
int sum = 0;
foreach (int score in scores)
{
sum += score;
}
double average = (double)sum / scores.Length;
Console.WriteLine($"Sum: {sum}, Average: {average:F2}");
// پیدا کردن بالاترین نمره
int max = scores[0];
foreach (int score in scores)
{
if (score > max)
max = score;
}
Console.WriteLine($"Highest score: {max}");
// قسمت 2: لیست نام دانشجوها
List<string> students = new List<string> { "Ali", "Reza", "Sara" };
Console.WriteLine("\nCurrent students: " + string.Join(", ", students));
// افزودن دانشجو جدید
Console.Write("Enter new student name: ");
string newStudent = Console.ReadLine();
students.Add(newStudent);
Console.WriteLine("After adding: " + string.Join(", ", students));
// جستجو در لیست
Console.Write("\nSearch for a name: ");
string search = Console.ReadLine();
if (students.Contains(search))
{
Console.WriteLine($"Yes, {search} is in the list!");
}
else
{
Console.WriteLine($"No, {search} is not in the list.");
}
Console.WriteLine("\nPress Enter to exit...");
Console.ReadLine();
`--- 📌 جمعبندی درس ششم مفهوم آرایه (Array) لیست (List) تعریف int[] arr = new int[5]; List<int> list = new List<int>(); اندازه arr.Length list.Count افزودن ❌ list.Add(item) حذف ❌ list.Remove(item) دسترسی arr[index] list[index] نکات کلیدی: · ایندکس همیشه از 0 شروع میشود · آرایه اندازه ثابت دارد · لیست اندازه متغیر دارد · برای استفاده از List نیاز به using System.Collections.Generic; --- 🧪 تمرین برای شما 1. آرایهای از 7 عدد بسازید و بگویید چند عدد زوج وجود دارد 2. List ای از 5 اسم بسازید و اسمی که کاربر میگوید را حذف کنید 3. برنامهای بنویسید که 5 عدد از کاربر بگیرد، در لیست ذخیره کند و بعد میانگین را چاپ کند --- اگر این درس را کامل فهمیدید، بگویید تا درس هفتم (متدها و توابع) را شروع کنیم. سوالی بود بپرسید.
خیلی خوب، رسیدیم به درس هفتم: متدها (Method) یا توابع در سیشارپ.
این یکی از مهمترین درسهای برنامهنویسی است. متدها به شما اجازه میدهند کدتان را مرتب، قابل استفاده مجدد و خواناتر کنید.
یک پروژه جدید بسازید (dotnet new console) و کدها را همراه من بنویسید و اجرا کنید.
---
📘 درس هفتم – متدها (Methods)
🎯 سرفصلها:
1. متد چیست و چرا نیاز داریم؟
2. ساختار یک متد
3. متد بدون پارامتر و بدون خروجی
4. متد با پارامتر
5. متد با خروجی (return)
6. متد با چند پارامتر
7. متد با پارامتر پیشفرض
8. فراخوانی متد در متد دیگر
9. تمرین جامع
---
⏱️ قسمت 1: متد چیست؟
متد = یک تکه کد که نام دارد و میتوانیم چند بار صدا بزنیم.
بدون متد (کد بد - تکرار):
csharp
Console.WriteLine("Welcome to our program!");
Console.WriteLine("Please enter your name...");
// همین پیام را 10 بار دیگر باید بنویسیم!
با متد (کد خوب):
csharp
ShowWelcomeMessage();
ShowWelcomeMessage();
ShowWelcomeMessage(); // هر چند بار که بخواهیم
void ShowWelcomeMessage()
{
Console.WriteLine("Welcome to our program!");
Console.WriteLine("Please enter your name...");
}
---
⏱️ قسمت 2: ساختار یک متد
csharp
[نوع_خروجی] [نام_متد]([پارامترها])
{
// بدنه متد
return مقدار; // اگر نوع خروجی void نباشد
}
سادهترین متد (بدون ورودی و بدون خروجی):
csharp
void SayHello()
{
Console.WriteLine("Hello World!");
}
// فراخوانی:
SayHello();
---
⏱️ قسمت 3: متد بدون پارامتر و بدون خروجی (void)
csharp
void ShowMenu()
{
Console.WriteLine("=== Main Menu ===");
Console.WriteLine("1. Add");
Console.WriteLine("2. Subtract");
Console.WriteLine("3. Multiply");
Console.WriteLine("4. Divide");
Console.WriteLine("=================");
}
// استفاده
ShowMenu();
ShowMenu(); // میتوانیم چند بار صدا بزنیم
---
⏱️ قسمت 4: متد با پارامتر (ورودی)
پارامترها را داخل () مینویسیم.
csharp
void Greet(string name)
{
Console.WriteLine($"Hello {name}! Welcome!");
}
// فراخوانی
Greet("Ali");
Greet("Sara");
Greet("Reza");
متد با چند پارامتر:
csharp
void PrintFullName(string firstName, string lastName)
{
Console.WriteLine($"Full name: {firstName} {lastName}");
}
// فراخوانی
PrintFullName("Mohammad", "Rezaei");
PrintFullName("Sara", "Ahmadi");
---
⏱️ قسمت 5: متد با خروجی (return)
اگر متد یک نتیجه برمیگرداند، نوع خروجی را مشخص میکنیم.
csharp
int Add(int a, int b)
{
int result = a + b;
return result; // برگرداندن نتیجه
}
// استفاده
int sum = Add(5, 3);
Console.WriteLine(sum); // 8
// یا مستقیم چاپ کنیم
Console.WriteLine(Add(10, 20)); // 30
مثالهای بیشتر:
csharp
// جمع دو عدد اعشاری
double Multiply(double x, double y)
{
return x * y;
}
// بررسی زوج بودن
bool IsEven(int number)
{
return number % 2 == 0;
}
// استفاده
double product = Multiply(3.5, 2);
Console.WriteLine(product); // 7
if (IsEven(7))
{
Console.WriteLine("Even");
}
else
{
Console.WriteLine("Odd");
}
---
⏱️ قسمت 6: انواع خروجی در متدها
نوع خروجی معنی مثال return
void هیچ چیزی برنمیگرداند return; (اختیاری)
int عدد صحیح return 5;
double عدد اعشاری return 3.14;
string متن return "hi";
bool true/false return true;
int[] آرایه return new int[]{1,2,3};
csharp
string GetGreeting(string name)
{
return $"Good morning, {name}!";
}
int[] GetNumbers()
{
return new int[] { 10, 20, 30 };
}
// استفاده
string msg = GetGreeting("Ali");
Console.WriteLine(msg);
int[] arr = GetNumbers();
foreach (int n in arr)
{
Console.WriteLine(n);
}
---
⏱️ قسمت 7: متد با پارامتر پیشفرض (Default Parameter)
میتوانیم برای پارامترها مقدار پیشفرض تعیین کنیم.
csharp
void Greet(string name, string title = "Dear")
{
Console.WriteLine($"Hello {title} {name}");
}
// دو روش فراخوانی
Greet("Ali", "Mr."); // Hello Mr. Ali
Greet("Sara"); // Hello Dear Sara (از پیشفرض استفاده میکند)
مثال دیگر:
csharp
double CalculatePrice(double basePrice, double tax = 0.09)
{
return basePrice + (basePrice * tax);
}
Console.WriteLine(CalculatePrice(100)); // 109 (مالیات 9%)
Console.WriteLine(CalculatePrice(100, 0.15)); // 115 (مالیات 15%)
---
⏱️ قسمت 8: فراخوانی متد در متد دیگر
csharp
int Add(int a, int b)
{
return a + b;
}
int Multiply(int a, int b)
{
return a * b;
}
int Calculate(int x, int y)
{
int sum = Add(x, y);
int product = Multiply(x, y);
return sum + product;
}
// استفاده
int result = Calculate(3, 4); // Add(3,4)=7, Multiply(3,4)=12 → 7+12=19
Console.WriteLine(result); // 19
---
⏱️ قسمت 9: متدهای محاسباتی کامل
csharp
// محاسبه توان
int Power(int baseNumber, int exponent)
{
int result = 1;
for (int i = 0; i < exponent; i++)
{
result *= baseNumber;
}
return result;
}
// فاکتوریل
int Factorial(int n)
{
int result = 1;
for (int i = 1; i <= n; i++)
{
result *= i;
}
return result;
}
// استفاده
Console.WriteLine(Power(2, 5)); // 32
Console.WriteLine(Factorial(5)); // 120
---
⏱️ قسمت 10: متد برای کار با آرایه
csharp
// پیدا کردن بزرگترین عدد در آرایه
int FindMax(int[] numbers)
{
int max = numbers[0];
foreach (int num in numbers)
{
if (num > max)
max = num;
}
return max;
}
// محاسبه میانگین
double CalculateAverage(int[] numbers)
{
int sum = 0;
foreach (int num in numbers)
{
sum += num;
}
return (double)sum / numbers.Length;
}
// استفاده
int[] scores = { 18, 20, 15, 19, 17 };
Console.WriteLine($"Max: {FindMax(scores)}");
Console.WriteLine($"Average: {CalculateAverage(scores):F2}");
---
✅ تمرین نهایی درس هفتم
برنامهای بنویسید که متدهای زیر را داشته باشد:
1. ShowMenu() – نمایش منوی اصلی
2. Add(a, b) – جمع دو عدد
3. Subtract(a, b) – تفریق دو عدد
4. Multiply(a, b) – ضرب دو عدد
5. Divide(a, b) – تقسیم دو عدد (با مدیریت تقسیم بر صفر)
6. IsValidNumber(input) – بررسی اینکه کاربر عدد وارد کرده باشد
csharp
using System;
void ShowMenu()
{
Console.Clear();
Console.WriteLine("=== Calculator ===");
Console.WriteLine("1. Add");
Console.WriteLine("2. Subtract");
Console.WriteLine("3. Multiply");
Console.WriteLine("4. Divide");
Console.WriteLine("5. Exit");
Console.WriteLine("=================");
}
int Add(int a, int b)
{
return a + b;
}
int Subtract(int a, int b)
{
return a - b;
}
int Multiply(int a, int b)
{
return a * b;
}
double Divide(int a, int b)
{
if (b == 0)
{
Console.WriteLine("Error: Cannot divide by zero!");
return 0;
}
return (double)a / b;
}
int GetNumber(string prompt)
{
int number;
while (true)
{
Console.Write(prompt);
string input = Console.ReadLine();
if (int.TryParse(input, out number))
{
return number;
}
Console.WriteLine("Invalid input! Please enter a number.");
}
}
// برنامه اصلی
int choice;
do
{
ShowMenu();
Console.Write("Choose an option: ");
string input = Console.ReadLine();
if (!int.TryParse(input, out choice))
{
Console.WriteLine("Invalid choice! Press Enter to continue...");
Console.ReadLine();
continue;
}
if (choice >= 1 && choice <= 4)
{
int num1 = GetNumber("Enter first number: ");
int num2 = GetNumber("Enter second number: ");
switch (choice)
{
case 1:
Console.WriteLine($"Result: {Add(num1, num2)}");
break;
case 2:
Console.WriteLine($"Result: {Subtract(num1, num2)}");
break;
case 3:
Console.WriteLine($"Result: {Multiply(num1, num2)}");
break;
case 4:
Console.WriteLine($"Result: {Divide(num1, num2):F2}");
break;
}
Console.WriteLine("Press Enter to continue...");
Console.ReadLine();
}
else if (choice != 5)
{
Console.WriteLine("Invalid option! Press Enter to continue...");
Console.ReadLine();
}
}
while (choice != 5);
Console.WriteLine("Goodbye!");
Console.ReadLine();
---
📌 جمعبندی درس هفتم
بخش مثال
تعریف متد void SayHello() { ... }
فراخوانی متد SayHello();
پارامتر void Greet(string name) { ... }
خروجی (return) int Add(int a, int b) { return a + b; }
پارامتر پیشفرض void Log(string msg, int level = 1) { ... }
قوانین مهم:
· نام متد باید معنیدار باشد (Verb یا فعل)
· هر متد یک کار مشخص انجام دهد
· از تکرار کد با متد جلوگیری کنید
· متدها را قبل از استفاده تعریف کنید (یا بعد از Main)
---
🧪 تمرین برای شما
1. متدی بنویسید که یک آرایه بگیرد و مجموع آن را برگرداند
2. متدی بنویسید که یک string بگیرد و تعداد حروف بزرگ آن را برگرداند
3. متدی بنویسید که دو عدد بگیرد و هر سه عمل جمع، تفریق و ضرب را در یک متد برگرداند (با چند خروجی) – راهنمایی: میتوانید از out parameter استفاده کنید
---
اگر این درس را کامل فهمیدید، بگویید تا درس هشتم (کلاسها و شیءگرایی) را شروع کنیم. سوالی بود بپرسید.