میشه این مسئله هارو به زبان کد برنامه نویسی سی شارپ حل کنید ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

میشه این مسئله هارو به زبان کد برنامه نویسی سی شارپ حل کنید ؟

0 امتیاز
ن 4 تا دونه مسئله دارم که باید با کد برنامه نویسی
#C حل بشه یعنی با کد حل بشه این مسئله ها عبارتند از:
1 )فرض کنید قرار است یک شرکت را مدل کنیم. شرکت یک مدیر، تعدادی برنامهنویس و تعدادی کارمند بخش اداری دارد. با استفاده از مفاهیم Oriented Object یک کالس برای هر یک از افراد تعریف کنید. هر فرد یک نام دارد و تابعی که نام آن شخص را نمایش میدهد. همچنین موقع ایجاد کالس باید نام فرد دریافت شود و هنگام Destruct شدن نام و Position فرد نمایش داده شود. مدیر یک فیلد به نام تعداد کارمند دارد. برنامهنویس و کارمند هم یک فیلد به اسم “نام مدیر” دارند و تابعی که این ها را نمایش دهد. هر فرد یک تابع به نام WritePosition دارد که باید در آن صرفاً در کنسول نوشته شود که مدیر است، برنامهنویس است یا کارمند بخش اداری. این تابع باید برای تمامی افراد فراخوانده شود. هم چنین یک سیستم اطالعرسانی داریم که به دو روش میتواند اطالعرسانی را انجام دهد. از طریق Email یا از طریق SMS .برای هر کدام یک کالس در نظر بگیرید که باید تابعی به نام inform داشته باشند که صرفاً در آن فقط نمایش داده شود که از کدام روش اطالعرسانی استفاده شده است.

2 )یک کالس به نام HugeInteger ایجاد کنید که از یک آرایه ی 40تایی برای ذخیره اعداد تا 40 رقم استفاده کند. این کالس باید امکان ذخیرهی اعداد مثبت و منفی را داشته باشد. برای این کالس متدها و Propertyهای زیر را ایجاد کنید: • دو Constructor به صورت زیر: o یک Constructor Default که یک HugeInteger با مقدار صفر را ایجاد کند. o یک Constructor که یک string دریافت کند و آن را در HugeInteger ذخیره کند. باید بررسی شود که فرمت ورودی درست باشد و فقط شامل ارقام و عالمت + یا – در ابتدای آن باشد. همچنین بررسی شود که تعداد ارقام از 40 رقم بیشتر نباشد. در صورت درست نبودن ورودی باید پیغام مناسبی نمایش داده شده و مقدار HugeInteger برابر صفر در نظر گرفته شود. • متد ToString را Override کنید که HugeInteger را به فرمت string در بیاورد. • 3 متد زیر برای مقایسهی HugeInteger ها که باید true یا false برگردانند. Equals o IsGreaterThan o IsLessThan o

3 )برنامهای بنویسید که دو ماتریس دریافت کند و ضرب آنها را انجام دهد. ضرب ماتریس ها باید به صورت موازی انجام شود به این صوت که برای محاسبه ی هر درایه از ماتریس جواب یک Task یا Thread ایجاد شود. برای انجام این مورد از Task استفاده کردهاید یا Thread؟ دلیل انتخاب خود را توضیح دهید.

4 )کالسی به نام ConcurrentIntegerList بنویسید که list از اعداد را نگهداری کرده و Safe Thread باشد. به این معنی که اگر به صورت همزمان چندین دسترسی به لیست از نوع خواندن و نوشتن وجود داشته باشد، مشکلی برای دادههای ذخیره شده به وجود نیاید. استفاده از Collection Concurrentها )Concurrent.Collections.System )مجاز نیست. در مورد مفاهیم انحصار متقابل ) Exclusion Mutual )و Section Critical توضیح دهید.

میشه پاسخ این مسائل رو بهم بگید یعنی جوابشون رو به صورت کد برام بفرستید؟ ممنون از لطفتون
سوال شده مرداد 20, 1402 بوسیله ی محمد معین  

1 پاسخ

+1 امتیاز
 
بهترین پاسخ
با توجه به سوالات شما، کد های مورد نیاز برای حل هر مسئله به شرح زیر است. 
 
1. شرکت با مدیر، برنامه نویس، و کارمند اداری
 

public class Person
{
    public string Name {get; private set;}
    public string Position {get; protected set;}

    public Person(string name)
    {
        Name = name;
    }

    public virtual void WritePosition()
    {
        Console.WriteLine(Position);
    }

    ~Person()
    {
        Console.WriteLine($"Destroying: {Name}, {Position}");
    }
}

public class Manager : Person
{
    public int EmployeeCount {get; set;}

    public Manager(string name) : base(name)
    {
        Position = "Manager";
    }
}

public class Programmer : Person
{
    public string ManagerName {get; set;}

    public Programmer(string name, string managerName) : base(name)
    {
        Position = "Programmer";
        ManagerName = managerName;
    }
}

public class AdministrativeStaff : Person
{
    public string ManagerName {get; set;}

    public AdministrativeStaff(string name, string managerName) : base(name)
    {
        Position = "Administrative Staff";
        ManagerName = managerName;
    }
}

public abstract class Informer
{
    public abstract void Inform();
}

public class EmailInformer : Informer
{
    public override void Inform()
    {
        Console.WriteLine("Informing via Email");
    }
}

public class SMSInformer : Informer
{
    public override void Inform()
    {
        Console.WriteLine("Informing via SMS");
    }
}
```

 

 
2. کلاس HugeInteger
 
public class HugeInteger
{
    private int[] digits = new int[40];
    private bool isNegative;

    public HugeInteger()
    {
    }

    public HugeInteger(string value)
    {
        if (value.Length > 40 || !Regex.IsMatch(value, @"^[-+]?[0-9]*$"))
        {
            Console.WriteLine("Invalid input. Setting value to 0");
            return;
        }

        isNegative = value.StartsWith('-');
        var digitChars = value.TrimStart('-', '+').ToCharArray();
        Array.Reverse(digitChars);

        for (int i = 0; i < digitChars.Length; i++)
        {
            digits[i] = int.Parse(digitChars[i].ToString());
        }
    }

    public override string ToString()
    {
        var stringBuilder = new StringBuilder(isNegative ? "-" : "");
        var started = false;

        for (int i = digits.Length - 1; i >= 0; i--)
        {
            if (started || digits[i] != 0)
            {
                started = true;
                stringBuilder.Append(digits[i]);
            }
        }

        if (!started) // the number is 0
            stringBuilder.Append('0');

        return stringBuilder.ToString();
    }

    // Comparison methods go here
}

 

 
3. ضرب ماتریس‌ها
 

public class MatrixMultiplier
{
    public static int[,] Multiply(int[,] a, int[,] b)
    {
        int[,] result = new int[a.GetLength(0), b.GetLength(1)];
        List<Task> tasks = new List<Task>();

        for (int i = 0; i < result.GetLength(0); i++)
        {
            for (int j = 0; j < result.GetLength(1); j++)
            {
                int row = i;
                int col = j;
                tasks.Add(Task.Run(() =>
                {
                    for (int k = 0; k < a.GetLength(1); k++)
                    {
                        result[row, col] += a[row, k] * b[k, col];
                    }
                }));
            }
        }

        Task.WaitAll(tasks.ToArray());
        return result;
    }
}

 

 
4. ConcurrentIntegerList

public class ConcurrentIntegerList
{
    private List<int> list = new List<int>();
    private object lockObject = new object();

    public void Add(int item)
    {
        lock (lockObject)
        {
            list.Add(item);
        }
    }

    public int Get(int index)
    {
        lock (lockObject)
        {
            return list[index];
        }
    }

    // other methods go here
}

 

در مورد مفاهیم Exclusion Mutual و Section Critical،**Exclusion Mutual (Mutex)**:
 
Exclusion Mutual یا Mutex مفهومی در همزمانی و چند نخی است که نشان می‌دهد فقط یک نخ به طور همزمان می‌تواند منابع مشترک را استفاده کند. نحوه کار کردن Mutex این است که هرگاه نخی منبعی را درخواست می‌کند، این نخ باید ابتدا Mutex را درخواست کند. اگر Mutex در دسترس باشد، به نخ درخواست کننده اختصاص داده می‌شود (یا "قفل" می‌شود) و نخ می‌تواند منبع را استفاده کند. هنگامی که نخ کار خود را با منبع تمام می‌کند، Mutex "باز" (یا "رها") می‌شود و سپس برای درخواست‌های دیگر نخ‌ها در دسترس است.
 
 
 
Critical Section یا بخش حساس، قسمتی از کد است که به دسترسی به منابع مشترک نیاز دارد و بنابراین باید در زمان اجرا از دسترسی همزمان چندین نخ جلوگیری شود. این امر معمولاً با استفاده از مکانیزم‌هایی مانند Mutex ها یا سمافورها انجام می‌شود. در برنامه‌نویسی چند نخی، این بسیار مهم است که نخ‌ها در حین اجرای بخش‌های حساس به صورت همزمان به منابع مشترک دسترسی نداشته باشند، زیرا این می‌تواند منجر به وضعیت‌های ناپایدار یا غیر قابل پیش‌بینی شود.
پاسخ داده شده مرداد 20, 1402  بوسیله ی haniye sarbazi (امتیاز 983)   2 6 15
انتخاب شد شهریور 8, 1402 بوسیله ی farnoosh
...