eitaa logo
برنامه نویسی سی شارپ
271 دنبال‌کننده
173 عکس
167 ویدیو
114 فایل
❁﷽❁ 👨‍🏫 Admin: @alialirezapanahi برنامه نویسی برنامه نویسی وب eitaa.com/aspdatnet پروژه ASP.Net Core MVC (پروژه وب و سی شارپ) eitaa.com/projectall ویراستی virasty.com/alialirezapanahi آپارات aparat.com/alialirezapan
مشاهده در ایتا
دانلود
خیلی خوب، رسیدیم به درس سوم: دستورات شرطی (if, else if, else) و Switch Case. یک پروژه جدید بسازید (dotnet new console) و کدها را همراه من بنویسید و اجرا کنید. --- 📘 درس سوم – شرط‌ها و تصمیم‌گیری در برنامه 🎯 سرفصل‌ها: 1. شرط if (اگر) 2. شرط if-else (اگر-وگرنه) 3. شرط else if (چند شرط) 4. عملگرهای مقایسه و منطقی 5. دستور switch-case 6. تمرین جامع --- ⏱️ قسمت 1: عملگرهای مقایسه (مهم) قبل از شرط‌ها، باید عملگرهای مقایسه را بلد باشید: عملگر معنی مثال درست == مساوی 5 == 5 ✅ != نامساوی 5 != 3 ✅ > بزرگتر 10 > 5 ✅ < کوچکتر 3 < 8 ✅ >= بزرگتر یا مساوی 5 >= 5 ✅ <= کوچکتر یا مساوی 4 <= 5 ✅ --- ⏱️ قسمت 2: شرط if (اگر) csharp int age = 18; if (age >= 18) { Console.WriteLine("You are an adult"); Console.WriteLine("You can vote"); } 📌 نکات: · شرط داخل () نوشته می‌شود · اگر شرط درست بود، کد داخل {} اجرا می‌شود · اگر فقط یک خط دارید، می‌توانید {} را حذف کنید (ولی بهتر نگذارید) --- ⏱️ قسمت 3: شرط if-else (اگر-وگرنه) csharp int age = 15; if (age >= 18) { Console.WriteLine("You are an adult"); } else { Console.WriteLine("You are a minor"); } خروجی: You are a minor 📌 منطق: اگر شرط if درست بود، if اجرا می‌شود و else نادیده گرفته می‌شود. اگر if غلط بود، else اجرا می‌شود. --- ⏱️ قسمت 4: شرط else if (چند شرط) csharp int score = 85; if (score >= 90) { Console.WriteLine("Grade: A"); } else if (score >= 80) { Console.WriteLine("Grade: B"); } else if (score >= 70) { Console.WriteLine("Grade: C"); } else if (score >= 60) { Console.WriteLine("Grade: D"); } else { Console.WriteLine("Grade: F"); } خروجی: Grade: B 📌 نکته: شرط‌ها از بالا به پایین بررسی می‌شوند. به محض اینکه یکی درست شد، بقیه نادیده گرفته می‌شوند. --- ⏱️ قسمت 5: عملگرهای منطقی (و، یا، نه) عملگر معنی مثال && و (هر دو شرط باید درست باشد) age > 18 && hasLicense == true
  
! نه (برعکس می‌کند) !isRaining مثال: csharp int age = 20; bool hasLicense = true; if (age >= 18 && hasLicense == true) { Console.WriteLine("You can drive"); } else { Console.WriteLine("You cannot drive"); } csharp string day = "Friday"; if (day == "Friday" || day == "Thursday") { Console.WriteLine("It's weekend in Iran!"); } --- ⏱️ قسمت 6: Switch Case (انتخابگر) وقتی یک متغیر را با چند مقدار مختلف مقایسه می‌کنیم، switch خواناتر از if-else است. ساختار کلی: csharp switch (متغیر) { case مقدار1: // کد break; case مقدار2: // کد break; default: // اگر هیچکدام نبود break; } مثال واقعی: csharp Console.Write("Enter day number (1-7): "); int dayNumber = int.Parse(Console.ReadLine()); switch (dayNumber) { case 1: Console.WriteLine("Saturday"); break; case 2: Console.WriteLine("Sunday"); break; case 3: Console.WriteLine("Monday"); break; case 4: Console.WriteLine("Tuesday"); break; case 5: Console.WriteLine("Wednesday"); break; case 6: Console.WriteLine("Thursday"); break; case 7: Console.WriteLine("Friday"); break; default: Console.WriteLine("Invalid day number!"); break; } مثال با string: csharp Console.Write("Enter your favorite color: "); string color = Console.ReadLine(); switch (color.ToLower()) // ToLower: همه را کوچک می‌کند { case "red": Console.WriteLine("You chose passion"); break; case "blue": Console.WriteLine("You chose calm"); break; case "green": Console.WriteLine("You chose nature"); break; default: Console.WriteLine("Nice color!"); break; } 📌 نکات switch: · هر case باید با break تمام شود · default اختیاری است (مثل else) · می‌توان چند case را بدون break پشت سر هم نوشت (fall-through) چند مقدار در یک case:
`
csharp char grade = 'B';
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(); --- 📌 جمع‌بندی درس هفتم