C# Programming

توليد أعداد صحيحة عشوائية في C#

Spread the love

إنشاء أعداد عشوائية مهمة شائعة في البرمجة، وتوفر C# أدوات قوية لتحقيق ذلك. تستعرض هذه المقالة فئة System.Random، ووظائفها، وأفضل الممارسات لإنشاء أعداد صحيحة عشوائية.

محتويات

فهم فئة Random

تُستخدم فئة System.Random في C# لإنشاء أعداد شبه عشوائية. من المهم تذكر أن هذه الأعداد ليست عشوائية تمامًا؛ بل تُنتج باستخدام خوارزمية حتمية. وهذا يعني أنه بالنظر إلى نفس الحالة الأولية (البذر)، ستكون تسلسل الأعداد متطابقًا. ومع ذلك، بالنسبة للعديد من التطبيقات، فإن العشوائية شبه الكاملة التي توفرها System.Random كافية.

إنشاء أعداد صحيحة عشوائية

الطريقة الأساسية لإنشاء أعداد صحيحة عشوائية هي Next(). توفر هذه الطريقة العديد من الإصدارات الزائدة:

  • Next(): تُرجع عددًا صحيحًا عشوائيًا غير سالب أقل من int.MaxValue.
  • Next(maxValue): تُرجع عددًا صحيحًا عشوائيًا غير سالب أقل من maxValue المحدد (يجب أن يكون maxValue موجبًا).
  • Next(minValue, maxValue): تُرجع عددًا صحيحًا عشوائيًا ضمن النطاق الشامل [minValue، maxValue) (يجب أن يكون maxValue أكبر من minValue).

using System;

public class RandomIntExample
{
    public static void Main(string[] args)
    {
        Random random = new Random();

        int randomNumber1 = random.Next();          // 0 to int.MaxValue - 1
        Console.WriteLine($"Random number 1: {randomNumber1}");

        int randomNumber2 = random.Next(10);       // 0 to 9
        Console.WriteLine($"Random number 2: {randomNumber2}");

        int randomNumber3 = random.Next(10, 21);   // 10 to 20
        Console.WriteLine($"Random number 3: {randomNumber3}");
    }
}

بذر مُنشئ الأعداد العشوائية

قيمة البذر تُهيئ الحالة الداخلية لفئة Random. استخدام نفس البذر سيُنتج دائمًا نفس تسلسل الأعداد. إذا لم يتم توفير بذر، فسيتم استخدام ساعة النظام، مما يؤدي إلى تسلسل مختلف في كل مرة يتم تشغيل التطبيق فيها. هذا هو الأفضل عمومًا لمعظم التطبيقات.


using System;

public class SeededRandomExample
{
    public static void Main(string[] args)
    {
        Random random1 = new Random(12345);
        int number1 = random1.Next(1, 101);
        Console.WriteLine($"Random number with seed 12345: {number1}");

        Random random2 = new Random(12345);
        int number2 = random2.Next(1, 101); // Same as number1
        Console.WriteLine($"Random number with seed 12345: {number2}");

        Random random3 = new Random(); // Uses system time
        int number3 = random3.Next(1, 101); // Different number
        Console.WriteLine($"Random number with system time seed: {number3}");
    }
}

إن ضبط البذر مفيد للاختبار والسيناريوهات التي تتطلب نتائج قابلة للتكرار.

أعداد عشوائية آمنة تشفيرياً

بالنسبة للتطبيقات التي تتطلب أعدادًا عشوائية آمنة تشفيرياً (مثل التطبيقات الحساسة للأمن)، فإن System.Random غير كافية. بدلاً من ذلك، استخدم مساحة اسم System.Security.Cryptography، وتحديدًا فئة RNGCryptoServiceProvider.

خاتمة

توفر فئة System.Random طريقة بسيطة وفعالة لإنشاء أعداد صحيحة شبه عشوائية في C#. إن فهم دور البذر والإصدارات الزائدة المختلفة لـ Next() يُمكّن من إنشاء أعداد عشوائية مرنة ومنظمة. بالنسبة للتطبيقات الحساسة للأمن، اختر دائمًا مُنشئات الأعداد العشوائية الآمنة تشفيرياً.

الأسئلة الشائعة

  • س: هل الأعداد عشوائية حقًا؟ ج: لا، إنها شبه عشوائية.
  • س: كيف يتم إنشاء أعداد عشوائية ضمن نطاق محدد؟ ج: استخدم Next(minValue, maxValue).
  • س: لماذا يتم ضبط البذر؟ ج: للحصول على نتائج قابلة للتكرار.
  • س: ماذا عن الأعداد العشوائية الآمنة تشفيرياً؟ ج: استخدم RNGCryptoServiceProvider.
  • س: أنواع بيانات أخرى؟ ج: توفر فئة Random طرقًا لإنشاء أنواع أخرى (أعداد عشرية، إلخ)، أو يمكنك إجراء تحويلات على نتائج الأعداد الصحيحة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *