تمرین 38
int[] MyListNumber = new int[4];
for (int i = 0; i <= 3; ++i)
{
Console.Write("Number [" + (i + 1) + "]=");
MyListNumber[i] = int.Parse(Console.ReadLine());
}
//----------------------------------------
int Temp = 0;
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++j)
{
if (MyListNumber[j] > MyListNumber[j + 1])
{
Temp = MyListNumber[j];
MyListNumber[j] = MyListNumber[j + 1];
MyListNumber[j + 1] = Temp;
}
}
}
//------------------------------------
for (int i = 0; i < 4; ++i)
{
Console.WriteLine(MyListNumber[i]);
}
Console.ReadKey();
از کاربر عدد دریافت کند و اعداد را از کوچک به بزرگ مرتب کند
تمرین 39
try
{
Console.WriteLine("Please Enter Person Number :");
int Number = Convert.ToInt32(Console.ReadLine());
string[] Names = new string[Number];
for (int i = 0; i < Number; i++)
{
Console.WriteLine("Please Enter Name " + (i + 1));
Names[i] = Console.ReadLine();
}
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("********************************");
Console.ResetColor();
foreach (string name in Names)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Hello " + name);
}
}
catch
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Please Enter Just Number");
Console.ResetColor();
}
Console.ReadKey();
از کاربر تعداد نام دریافت کرده و اسامی آنها را وارد کند
اگر کاربر در تعداد اسم به اشتباه، به جای عدد حروف تایپ کرد برنامه اخطار دهد
تمرین 40
int[,] MyArray = new int[10, 10];
for (int i = 1; i <= 10; ++i)
{
for (int j = 1; j <= 10; ++j)
{
MyArray[i - 1, j - 1] = i * j;
}
}
//---------------------------
for (int i = 0; i < 10; ++i)
{
for (int j = 0; j < 10; ++j)
{
Console.Write(MyArray[i, j] + "\t");
}
Console.WriteLine();
}
Console.ReadKey();
آرایه های دو بعدی که [ , ] نشان می دهد
آرایههای دو بعدی در سیشارپ به شما این امکان را میدهند که دادهها را در قالب جدولهایی با سطرها و ستونها ذخیره کنید
پروژه ASP.Net Core MVC (وب و سی شارپ)
تمرین 39 try { Console.WriteLine("Please Enter Person Number :"); int Number = Convert.ToInt
مطلب در مورد foreach جا ماند
حلقه foreach در سیشارپ یکی از ساختارهای تکرار است که برای پیمایش (تکرار iteration) از طریق عناصر یک مجموعه مانند آرایهها، لیستها و دیکشنریها استفاده میشود. این حلقه به طور خودکار از اولین عنصر مجموعه شروع میکند و به ترتیب از تمام عناصر عبور میکند. ساختار کلی حلقه foreach به شکل زیر است:
foreach (datatype element in collection)
{
// دستورات اجرا شونده برای هر عنصر
}
مثال عملی
فرض کنید یک آرایه از اعداد صحیح داریم و میخواهیم تمام عناصر آن را نمایش دهیم:
int[] numbers = { 1, 2, 3, 4, 5 };
foreach (int number in numbers)
{
Console.WriteLine(number);
}
در این مثال، حلقه foreach به ترتیب از هر عنصر آرایه numbers عبور میکند و مقدار هر عنصر را در متغیر number قرار میدهد. سپس دستور Console.WriteLine(number); برای هر عنصر اجرا میشود و مقدار آن در کنسول نمایش داده میشود
1
توابع (یا متدها)(Functions) در سیشارپ مجموعهای از دستورات هستند که یک وظیفه خاص را انجام میدهند. توابع میتوانند ورودیهایی به عنوان پارامتر دریافت کنند و نتیجهای را به عنوان مقدار بازگشتی برگردانند. در سیشارپ، توابع معمولاً درون کلاسها تعریف میشوند و میتوانند استاتیک یا غیر استاتیک باشند.
ساختار یک تابع در سیشارپ
returnType MethodName(parameterType parameterName, ...)
{
// دستورات
}
برای مثال، تابع زیر یک پیام خوشآمدگویی را چاپ میکند:
using System;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
PrintWelcome();
Console.ReadKey();
}
static void PrintWelcome()
{
Console.WriteLine("Welcome");
}
}
}
در این مثال، تابع PrintWelcome هیچ پارامتری نمیگیرد و مقداری را برنمیگرداند (از نوع void است). این تابع فقط یک پیام را در کنسول چاپ میکند.
در این مثال، تابع PrintWelcome یک پیام خوشآمدگویی را چاپ میکند. این تابع از نوع static است و هیچ پارامتری نمیگیرد و مقداری نیز برنمیگرداند.
تابع با پارامتر و مقدار بازگشتی
using System;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int number1 = 5;
int number2 = 12;
int result = Sum(number1, number2);
Console.WriteLine("Result = " + result);
Console.ReadKey();
}
static int Sum(int num1, int num2)
{
return num1 + num2;
}
}
}
در این مثال، تابع Sum دو پارامتر num1 و num2 را میگیرد و حاصل جمع آنها را برمیگرداند.
2
در سیشارپ، توابع (یا متدها) به دو دسته اصلی تقسیم میشوند:
1- توابع داخلی (Built-in Functions): این توابع از پیش تعریف شده و در کتابخانههای استاندارد زبان سیشارپ موجود هستند. به عنوان مثال، توابعی مانند Console.WriteLine() برای چاپ متن در کنسول.
2- توابع تعریف شده توسط کاربر (User-Defined Functions): این توابع توسط برنامهنویس تعریف میشوند و میتوانند هر نوع عملیاتی را انجام دهند. برای مثال، تابعی که دو عدد را جمع میکند و نتیجه را برمیگرداند.
هر تابع در سیشارپ دارای یک ساختار مشخص است که شامل نوع بازگشتی، نام تابع، پارامترها و بدنه تابع میباشد. به عنوان مثال:
public int Sum(int a, int b)
{
return a + b;
}
در این مثال، تابع Sum دو عدد صحیح را به عنوان پارامتر میگیرد و حاصل جمع آنها را برمیگرداند.
توابع داخلی (Built-in Functions) در سیشارپ توابعی هستند که از پیش تعریف شده و در کتابخانههای استاندارد زبان سیشارپ موجود هستند. این توابع برای انجام وظایف متداول و عمومی طراحی شدهاند و به برنامهنویسان کمک میکنند تا بدون نیاز به نوشتن کد اضافی، از این توابع استفاده کنند.
مثالهایی از توابع داخلی در سیشارپ
توابع ریاضی:
یک- Math.Abs(int value): مقدار مطلق یک عدد را برمیگرداند.
دو- Math.Pow(double x, double y): توان x به y را محاسبه میکند.
سه- Math.Sqrt(double value): جذر یک عدد را محاسبه میکند.
توابع رشتهای:
چهار- string.ToUpper(): تمام حروف یک رشته را به حروف بزرگ تبدیل میکند.
پنج- string.ToLower(): تمام حروف یک رشته را به حروف کوچک تبدیل میکند.
شش- string.Substring(int startIndex, int length): یک زیررشته از رشته اصلی برمیگرداند.
توابع ورودی/خروجی:
و Console.WriteLine(string value): یک رشته را در کنسول چاپ میکند.
و Console.ReadLine(): یک خط ورودی از کنسول میخواند.
نحوه استفاده از توابع داخلی
برای استفاده از توابع داخلی، کافی است نام تابع را به همراه پارامترهای مورد نیاز فراخوانی کنید. به عنوان مثال:
using System;
class Program
{
static void Main()
{
// استفاده از تابع ریاضی
double result = Math.Sqrt(16);
Console.WriteLine("Square root of 16 is: " + result);
// استفاده از تابع رشتهای
string text = "hello world";
string upperText = text.ToUpper();
Console.WriteLine("Uppercase: " + upperText);
// استفاده از تابع ورودی/خروجی
Console.WriteLine("Enter your name:");
string name = Console.ReadLine();
Console.WriteLine("Hello, " + name);
Console.ReadKey();
}
}
در این مثال، از توابع داخلی Math.Sqrt، string.ToUpper و Console.WriteLine استفاده شده است.
در سیشارپ، تعریف یک تابع شامل چند مرحله اصلی است:
1- نوع بازگشتی (Return Type): نوع دادهای که تابع برمیگرداند. اگر تابع چیزی برنگرداند، از void استفاده میشود.
2- نام تابع (Function Name): نامی که برای فراخوانی تابع استفاده میشود.
3- پارامترها (Parameters): ورودیهایی که تابع دریافت میکند. این پارامترها بین پرانتز قرار میگیرند و میتوانند چندین نوع دادهای باشند.
4- بدنه تابع (Function Body): کدی که تابع اجرا میکند، بین آکولادها {} قرار میگیرد.
مثال زیر یک تابع ساده را نشان میدهد که دو عدد را جمع میکند و نتیجه را برمیگرداند:
using System;
namespace Example
{
class Program
{
static void Main(string[] args)
{
int result = Sum(5, 10);
Console.WriteLine("Result: " + result);
Console.ReadKey();
}
// تعریف تابع Sum
static int Sum(int a, int b)
{
return a + b;
}
}
}
در این مثال:
-نوع بازگشتی int است، به این معنی که تابع یک عدد صحیح برمیگرداند.
-نام تابع Sum است.
-تابع دو پارامتر int a و int b دریافت میکند.
-بدنه تابع شامل یک دستور return است که جمع دو عدد را برمیگرداند.
3
در اینجا چند مثال دیگر از توابع در سیشارپ آورده شده است:
1. تابعی برای محاسبه فاکتوریل یک عدد
این تابع یک عدد صحیح را به عنوان ورودی میگیرد و فاکتوریل آن را محاسبه و برمیگرداند:
using System;
namespace Example
{
class Program
{
static void Main(string[] args)
{
int number = 5;
int result = Factorial(number);
Console.WriteLine("Factorial of " + number + " is: " + result);
}
static int Factorial(int n)
{
if (n == 0)
return 1;
else
return n * Factorial(n - 1);
Console.ReadKey();
}
}
}
2. تابعی برای چاپ یک پیام خوشآمدگویی
این تابع هیچ ورودی نمیگیرد و فقط یک پیام خوشآمدگویی را چاپ میکند:
using System;
namespace Example
{
class Program
{
static void Main(string[] args)
{
PrintWelcome();
Console.ReadKey();
}
static void PrintWelcome()
{
Console.WriteLine("Welcome to C# Programming!");
}
}
}
3. تابعی برای محاسبه میانگین یک آرایه از اعداد
این تابع یک آرایه از اعداد صحیح را به عنوان ورودی میگیرد و میانگین آنها را محاسبه و برمیگرداند:
using System;
namespace Example
{
class Program
{
static void Main(string[] args)
{
int[] numbers = { 1, 2, 3, 4, 5 };
double average = CalculateAverage(numbers);
Console.WriteLine("Average: " + average);
Console.ReadKey();
}
static double CalculateAverage(int[] nums)
{
int sum = 0;
foreach (int num in nums)
{
sum += num;
}
return (double)sum / nums.Length;
}
}
}
این مثالها نشان میدهند که چگونه میتوان توابع مختلفی را برای انجام وظایف مختلف در سیشارپ تعریف کرد.
4
کلمه کلیدی static در سیشارپ برای تعریف اعضای کلاس (مانند متدها، فیلدها، یا خواص) استفاده میشود که به جای نمونههای خاصی از کلاس، به خود کلاس تعلق دارند. این بدان معناست که شما میتوانید به این اعضا بدون ایجاد یک نمونه از کلاس دسترسی داشته باشید.
مثالهای استفاده از static:
1. متدهای استاتیک
متدهای استاتیک میتوانند بدون نیاز به ایجاد یک شیء از کلاس فراخوانی شوند:
using System;
namespace Example
{
class Program
{
static void Main(string[] args)
{
// فراخوانی متد استاتیک
PrintMessage();
Console.ReadKey();
}
static void PrintMessage()
{
Console.WriteLine("This is a static method.");
}
}
}
2. فیلدهای استاتیک
فیلدهای استاتیک برای ذخیره دادههایی که به تمام نمونههای کلاس مشترک هستند، استفاده میشوند:
using System;
namespace Example
{
class Counter
{
public static int Count = 0;
public Counter()
{
Count++;
}
}
class Program
{
static void Main(string[] args)
{
Counter c1 = new Counter();
Counter c2 = new Counter();
Counter c3 = new Counter();
// دسترسی به فیلد استاتیک
Console.WriteLine("Number of instances: " + Counter.Count);
Console.ReadKey();
}
}
}
3. کلاسهای استاتیک
کلاسهای استاتیک نمیتوانند نمونهسازی شوند و فقط شامل اعضای استاتیک هستند:
using System;
namespace Example
{
static class Utility
{
public static void PrintHello()
{
Console.WriteLine("Hello from a static class!");
}
}
class Program
{
static void Main(string[] args)
{
// فراخوانی متد استاتیک از کلاس استاتیک
Utility.PrintHello();
Console.ReadKey();
}
}
}
نکات کلیدی:
اعضای استاتیک به خود کلاس تعلق دارند، نه به نمونههای آن.
اعضای استاتیک میتوانند بدون ایجاد یک نمونه از کلاس فراخوانی شوند.
کلاسهای استاتیک نمیتوانند نمونهسازی شوند و فقط شامل اعضای استاتیک هستند.
5
کلمه کلیدی void در سیشارپ برای تعریف متدهایی استفاده میشود که هیچ مقداری را برنمیگردانند. این متدها ممکن است عملیاتی را انجام دهند، اما نتیجهای را به فراخواننده برنمیگردانند.
مثالهای استفاده از void:
1. متد ساده با void
این متد یک پیام را در کنسول چاپ میکند:
using System;
namespace Example
{
class Program
{
static void Main(string[] args)
{
PrintMessage();
Console.ReadKey();
}
static void PrintMessage()
{
Console.WriteLine("Hello, World!");
}
}
}
2. متد با پارامترها و void
این متد یک پیام خوشآمدگویی را با استفاده از نام ورودی چاپ میکند:
C#
using System;
namespace Example
{
class Program
{
static void Main(string[] args)
{
GreetUser("Ali");
Console.ReadKey();
}
static void GreetUser(string name)
{
Console.WriteLine("Welcome, " + name + "!");
}
}
}
نکات کلیدی:
متدهای void هیچ مقداری را برنمیگردانند.
این متدها میتوانند عملیات مختلفی را انجام دهند، مانند چاپ پیام، تغییر وضعیت یک شیء، یا انجام محاسبات.
6
در سیشارپ، کلمه کلیدی return برای بازگرداندن یک مقدار از یک تابع استفاده میشود. این مقدار میتواند از هر نوع دادهای باشد که تابع تعریف کرده است. به عنوان مثال، در تابع Sum که قبلاً نشان دادم، از return برای بازگرداندن حاصل جمع دو عدد استفاده میشود:
static int Sum(int a, int b)
{
return a + b;
}
در اینجا، return a + b; مقدار حاصل جمع a و b را به تابع فراخوانیکننده بازمیگرداند. اگر تابعی هیچ مقداری را بازنگرداند، میتوان از نوع void استفاده کرد و نیازی به return نیست، مگر برای خروج از تابع:
static void PrintMessage()
{
Console.WriteLine("Hello, World!");
return; // اختیاری
}
7
برای بازگرداندن آرایهای از دادهها در سیشارپ، میتوانید از یک تابع استفاده کنید که یک آرایه را به عنوان خروجی برمیگرداند. در اینجا یک مثال ساده از تابعی که یک آرایه از اعداد صحیح را بازمیگرداند، آورده شده است:
using System;
namespace Example
{
class Program
{
static void Main(string[] args)
{
int[] numbers = GetNumbers();
foreach (int number in numbers)
{
Console.WriteLine(number);
}
Console.ReadKey();
}
static int[] GetNumbers()
{
int[] numbers = { 1, 2, 3, 4, 5 };
return numbers;
}
}
}
در این مثال، تابع GetNumbers یک آرایه از اعداد صحیح را ایجاد کرده و آن را بازمیگرداند. سپس در تابع Main، این آرایه دریافت شده و با استفاده از یک حلقه foreach، هر عدد در آرایه چاپ میشود.
8
در سیشارپ، توابع سراسری (Global Functions) به توابعی اشاره دارند که میتوانند در هر جایی از برنامه بدون نیاز به ایجاد یک نمونه از کلاس فراخوانی شوند. این توابع معمولاً به عنوان توابع استاتیک در کلاسهای استاتیک تعریف میشوند. از نسخه C# 9.0 به بعد، میتوانید از Top-level Statements برای تعریف توابع سراسری استفاده کنید.
مثال با استفاده از کلاس استاتیکدر اینجا یک مثال از تعریف و استفاده از یک تابع سراسری در یک کلاس استاتیک آورده شده است:
using System;
namespace Example
{
static class GlobalFunctions
{
public static void PrintMessage(string message)
{
Console.WriteLine(message);
}
}
class Program
{
static void Main(string[] args)
{
GlobalFunctions.PrintMessage("Hello, World!");
Console.ReadKey();
}
}
}
مثال با استفاده از Top-level Statementsدر اینجا یک مثال از استفاده از Top-level Statements برای تعریف توابع سراسری آورده شده است:
using System;
void PrintMessage(string message)
{
Console.WriteLine(message);
}
PrintMessage("Hello, World!");
در این مثال، تابع PrintMessage به صورت مستقیم در سطح بالا تعریف شده و میتواند بدون نیاز به کلاس فراخوانی شود.