16
برای ساخت یک ماشین حساب با استفاده از توابع در سی شارپ، میتوانید از کد زیر استفاده کنید:
using System;
namespace CalculatorApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter the first number:");
double num1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter the second number:");
double num2 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter an operator (+, -, *, /):");
char op = Console.ReadLine()[0];
double result = Calculate(num1, num2, op);
if (!double.IsNaN(result))
{
Console.WriteLine("Result: " + result);
}
Console.ReadKey();
}
static double Calculate(double a, double b, char op)
{
switch (op)
{
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
if (b != 0)
{
return a / b;
}
else
{
Console.WriteLine("Cannot divide by zero.");
return double.NaN;
}
default:
Console.WriteLine("Invalid operator.");
return double.NaN;
}
}
}
}
در این برنامه، تابع Calculate برای انجام عملیات ریاضی استفاده میشود. این تابع سه پارامتر a، b و op را میگیرد و بر اساس عملگر op، عملیات مناسب را انجام میدهد و نتیجه را برمیگرداند.
17
static void Main(string[] args)
{
int k;
while(true)
{
Console.Write(" \n1=salam 2=Khodahafrz 3=exit ");
k = Convert.ToInt32(Console.ReadLine());
switch(k){
case 1: Console.Write("\nSalam\n");
break;
case 2: Console.Write("\nKhodahafez\n");
break;
case 3: return;
}
}
ساخت منو و وقتی return را بزنید از حلقه خارج می شوید و
Console.ReadKey();
لازم نیست بنویسید
18
توابع همنام یا Overloading در سیشارپ به شما این امکان را میدهند که چندین تابع با نام یکسان اما با پارامترهای متفاوت تعریف کنید. این قابلیت به شما اجازه میدهد تا توابعی با رفتارهای مختلف اما با یک نام مشترک داشته باشید. برای مثال، میتوانید یک تابع Sum داشته باشید که دو عدد صحیح را جمع میکند و یک تابع دیگر با همان نام که سه عدد صحیح را جمع میکند.
در زیر یک مثال ساده از توابع همنام در سیشارپ آورده شده است:
using System;
namespace OverloadingExample
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Sum(5, 10)); // خروجی: 15
Console.WriteLine(Sum(5, 10, 15)); // خروجی: 30
Console.ReadKey();
}
static int Sum(int a, int b)
{
return a + b;
}
static int Sum(int a, int b, int c)
{
return a + b + c;
}
}
}
در این مثال، دو تابع Sum تعریف شدهاند که یکی دو پارامتر و دیگری سه پارامتر میپذیرد. هنگام فراخوانی تابع، کامپایلر بر اساس تعداد و نوع پارامترها تصمیم میگیرد که کدام تابع را اجرا کند.
19
توابع بازگشتی (Recursive Functions) توابعی هستند که خودشان را فراخوانی میکنند. این نوع توابع برای حل مسائل پیچیده با تقسیم آنها به زیرمسائل سادهتر بسیار مفید هستند. یکی از معروفترین مثالهای توابع بازگشتی، محاسبه فاکتوریل یک عدد است.
در زیر یک مثال ساده از تابع بازگشتی برای محاسبه فاکتوریل در سیشارپ آورده شده است:
using System;
namespace RecursiveExample
{
class Program
{
static void Main(string[] args)
{
int number = 5;
Console.WriteLine($"Factorial of {number} is {Factorial(number)}");
Console.ReadKey();
}
static int Factorial(int n)
{
if (n <= 1)
return 1;
else
return n * Factorial(n - 1);
}
}
}
در این مثال، تابع Factorial خودش را فراخوانی میکند تا زمانی که مقدار n به 1 یا کمتر برسد. این فرآیند بازگشتی ادامه مییابد تا زمانی که شرط پایان (base case) برقرار شود.
20
استفاده از توابع بازگشتی به جای حلقهها در برنامهنویسی میتواند در برخی موارد مفید باشد، به ویژه زمانی که مسئله به طور طبیعی به صورت بازگشتی تعریف میشود. برای مثال، مسائل مربوط به درختها و گرافها اغلب با استفاده از توابع بازگشتی سادهتر حل میشوند.
در زیر یک مثال از استفاده از تابع بازگشتی برای محاسبه مجموع اعداد یک آرایه آورده شده است:
using System;
namespace RecursiveSum
{
class Program
{
static void Main(string[] args)
{
int[] numbers = { 1, 2, 3, 4, 5 };
Console.WriteLine($"Sum of array: {Sum(numbers, numbers.Length)}");
Console.ReadKey();
}
static int Sum(int[] arr, int n)
{
if (n <= 0)
return 0;
else
return arr[n - 1] + Sum(arr, n - 1);
}
}
}
در این مثال، تابع Sum به صورت بازگشتی مجموع اعداد آرایه را محاسبه میکند. اگر طول آرایه صفر باشد، تابع مقدار 0 را برمیگرداند. در غیر این صورت، آخرین عنصر آرایه را به مجموع بازگشتی بقیه عناصر اضافه میکند.
استفاده از توابع بازگشتی میتواند کد را خواناتر و سادهتر کند، اما باید به مدیریت حافظه و جلوگیری از بازگشتهای بینهایت توجه داشت.
21
در اینجا یک مثال دیگر از استفاده از توابع بازگشتی برای حل مسئله فیبوناچی آورده شده است. دنباله فیبوناچی به این صورت است که هر عدد برابر با مجموع دو عدد قبلی خود است. به عنوان مثال، دنباله فیبوناچی به این صورت شروع میشود: 0, 1, 1, 2, 3, 5, 8, ...
در زیر یک مثال از تابع بازگشتی برای محاسبه عدد فیبوناچی آورده شده است:
using System;
namespace FibonacciExample
{
class Program
{
static void Main(string[] args)
{
int n = 10;
Console.WriteLine($"Fibonacci of {n} is {Fibonacci(n)}");
Console.ReadKey();
}
static int Fibonacci(int n)
{
if (n <= 1)
return n;
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
}
در این مثال، تابع Fibonacci به صورت بازگشتی دو مقدار قبلی دنباله را محاسبه میکند و آنها را با هم جمع میکند تا مقدار فعلی را به دست آورد. اگر n کمتر یا مساوی 1 باشد، تابع مقدار n را برمیگرداند که شرط پایان (base case) است.
22
کلمه کلیدی ref در سیشارپ برای ارسال پارامترها به صورت ارجاعی به متدها استفاده میشود. این به این معناست که هر تغییری که در پارامتر داخل متد انجام شود، در متغیر اصلی خارج از متد نیز اعمال میشود. این قابلیت زمانی مفید است که بخواهید متغیری را درون یک متد تغییر دهید و این تغییرات در متغیر اصلی نیز منعکس شود.
مثال زیر را در نظر بگیرید:
using System;
namespace RefKeywordExample
{
class Program
{
static void Main(string[] args)
{
int number = 10;
Console.WriteLine("Before: " + number); // خروجی: Before: 10
ModifyNumber(ref number);
Console.WriteLine("After: " + number); // خروجی: After: 20
Console.ReadKey();
}
static void ModifyNumber(ref int num)
{
num = 20;
}
}
}
در این مثال، متغیر number با استفاده از کلمه کلیدی ref به متد ModifyNumber ارسال میشود. هر تغییری که درون این متد روی num انجام شود، در متغیر اصلی number نیز اعمال میشود.
23
کلمه کلیدی out در سیشارپ برای ارسال پارامترها به صورت ارجاعی به متدها استفاده میشود، با این تفاوت که پارامترهای out باید درون متد مقداردهی شوند. این قابلیت زمانی مفید است که بخواهید یک متغیر بدون مقدار اولیه را به متد ارسال کنید و درون متد به آن مقدار بدهید.
مثال زیر را در نظر بگیرید:
using System;
namespace OutKeywordExample
{
class Program
{
static void Main(string[] args)
{
int result;
CalculateArea(5, 10, out result);
Console.WriteLine("Area: " + result); // خروجی: Area: 50
Console.ReadKey();
}
static void CalculateArea(int length, int width, out int area)
{
area = length * width;
}
}
}
در این مثال، متغیر result بدون مقدار اولیه به متد CalculateArea ارسال میشود. درون این متد، مقدار area محاسبه و به result اختصاص داده میشود.
24
در سیشارپ، enum یا شمارش (Enumeration) راهی برای تعریف مجموعهای از مقادیر ثابت است که میتوانند به یک متغیر اختصاص داده شوند. این مقادیر معمولاً نامهایی هستند که به صورت عددی ذخیره میشوند. برای تعریف یک enum، از کلمه کلیدی enum استفاده میکنیم. به عنوان مثال:
enum Direction
{
North,
East,
South,
West
}
در این مثال، Direction یک enum است که چهار مقدار North، East، South و West را تعریف میکند. به صورت پیشفرض، مقادیر این enum از 0 شروع میشوند و به ترتیب افزایش مییابند، یعنی North برابر 0، East برابر 1، South برابر 2 و West برابر 3 است.
همچنین میتوانید مقادیر پیشفرض را تغییر دهید:
enum Direction
{
North = 3,
East = 5,
South = 7,
West = 9
}
در این حالت، مقادیر به ترتیب 3، 5، 7 و 9 خواهند بود.
25
در اینجا یک مثال ساده از استفاده enum در یک برنامه سیشارپ آورده شده است. این برنامه جهت حرکت را از کاربر میگیرد و بر اساس مقدار enum، پیامی را نمایش میدهد:
using System;
enum Direction
{
North,
East,
South,
West
}
class Program
{
static void Main()
{
Console.WriteLine("Enter a direction (North, East, South, West):");
string input = Console.ReadLine();
Direction direction;
if (Enum.TryParse(input, true, out direction))
{
switch (direction)
{
case Direction.North:
Console.WriteLine("You are heading North.");
break;
case Direction.East:
Console.WriteLine("You are heading East.");
break;
case Direction.South:
Console.WriteLine("You are heading South.");
break;
case Direction.West:
Console.WriteLine("You are heading West.");
break;
default:
Console.WriteLine("Unknown direction.");
break;
}
}
else
{
Console.WriteLine("Invalid direction entered.");
Console.ReadKey();
}
}
}
در این مثال:
- یک enum به نام Direction تعریف شده است که چهار مقدار North، East، South و West دارد.
- برنامه از کاربر یک جهت میگیرد و آن را به یک مقدار enum تبدیل میکند.
- بر اساس مقدار enum، یک پیام مناسب نمایش داده میشود.
این برنامه به شما کمک میکند تا بفهمید چگونه میتوانید از enum برای مدیریت مجموعهای از مقادیر ثابت در برنامههای خود استفاده کنید.
26
در سیشارپ، struct (ساختار) یک نوع دادهی مقداری است که میتواند دادهها و عملکردهای مرتبط را در خود جای دهد. برای تعریف یک ساختار از کلمه کلیدی struct استفاده میشود. به عنوان مثال:
public struct Employee
{
public int Id;
public string Name;
public Employee(int id, string name)
{
Id = id;
Name = name;
}
public void DisplayInfo()
{
Console.WriteLine($"ID: {Id}, Name: {Name}");
}
}
در این مثال، یک ساختار به نام Employee تعریف شده است که شامل دو فیلد Id و Name و یک سازنده برای مقداردهی اولیه این فیلدها است. همچنین یک متد DisplayInfo برای نمایش اطلاعات کارمند وجود دارد.
ساختارها در سیشارپ معمولاً برای طراحی نوعهای دادهای کوچک و متمرکز بر داده استفاده میشوند که رفتار کمی دارند یا اصلاً ندارند.
27
بیایید یک مثال کامل از استفاده از struct در سیشارپ را بررسی کنیم. فرض کنید میخواهیم اطلاعات مربوط به یک کتابخانه را مدیریت کنیم. هر کتاب شامل عنوان، نویسنده، و سال انتشار است. همچنین میخواهیم یک متد برای نمایش اطلاعات کتاب داشته باشیم.
using System;
public struct Book
{
public string Title;
public string Author;
public int Year;
// سازنده برای مقداردهی اولیه فیلدها
public Book(string title, string author, int year)
{
Title = title;
Author = author;
Year = year;
}
// متد برای نمایش اطلاعات کتاب
public void DisplayInfo()
{
Console.WriteLine($"Title: {Title}, Author: {Author}, Year: {Year}");
}
}
class Program
{
static void Main()
{
// ایجاد نمونهای از ساختار Book
Book book1 = new Book("1984", "George Orwell", 1949);
Book book2 = new Book("To Kill a Mockingbird", "Harper Lee", 1960);
// نمایش اطلاعات کتابها
book1.DisplayInfo();
book2.DisplayInfo();
Console.ReadKey();
}
}
در این مثال:
- تعریف ساختار Book: ساختار Book شامل سه فیلد Title، Author و Year است.
- سازنده: سازندهای برای مقداردهی اولیه فیلدها تعریف شده است.
- متد DisplayInfo: این متد اطلاعات کتاب را در کنسول نمایش میدهد.
- کلاس Program: در این کلاس، دو نمونه از ساختار Book ایجاد شده و اطلاعات آنها نمایش داده میشود.
این مثال نشان میدهد که چگونه میتوان از ساختارها برای مدیریت دادههای مرتبط استفاده کرد.