0Pricing
C++ Academy · درس

الأعداد العشوائية باستخدام الترويسة random

ولّد أعدادًا عشوائية عالية الجودة باستخدام المحرّكات والتوزيعات الحديثة.

الأعداد العشوائية باستخدام الترويسة random درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

لماذا لا نستخدم rand()؟

تستخدم std::rand() القديمة من لغة C حالة عامة، كما أن جودتها الإحصائية ضعيفة ولا تدعم التنفيذ الآمن في الخيوط. توفر C++ الحديثة أدوات أفضل بكثير في <random>.

الوصفة المكوّنة من ثلاثة أجزاء

تتكون الأعداد العشوائية في C++ الحديثة من ثلاثة أجزاء:

  • مصدر بذرة (إنتروبيا حقيقية)
  • محرك توليد (حالة حتمية)
  • توزيع (يشكّل القيم الناتجة)

تهيئة البذرة باستخدام random_device

يستخرج std::random_device إنتروبيا حقيقية من نظام التشغيل، لكنه قد يكون بطيئًا. استخدمه مرة واحدة لتهيئة محرك سريع.

#include <random>
std::random_device rd;
std::mt19937 engine(rd());

محرك mt19937

يُعد std::mt19937 (Mersenne Twister) محركًا سريعًا للأعداد شبه العشوائية، ويتمتع بجودة إحصائية ممتازة. وهو الخيار الافتراضي لمعظم التطبيقات.

التوزيع المنتظم للأعداد الصحيحة

ينتج أعدادًا صحيحة موزعة بانتظام ضمن مجال مغلق.

std::uniform_int_distribution<int> dice(1, 6);
int roll = dice(engine);

التوزيع المنتظم للأعداد الحقيقية

يُستخدم لأعداد الفاصلة العائمة ضمن مجال نصف مفتوح [a, b).

std::uniform_real_distribution<double> dist(0.0, 1.0);
double x = dist(engine);

التوزيع الطبيعي (الغوسي)

يُستخدم لتوليد أعداد عشوائية على شكل منحنى جرسي، وهو شائع في المحاكاة وتعلّم الآلة.

std::normal_distribution<double> norm(0.0, 1.0); // mean 0, stddev 1
double x = norm(engine);

توزيعات أخرى

تتضمن المكتبة العديد من التوزيعات الأخرى، مثل bernoulli_distribution وpoisson_distribution وexponential_distribution وdiscrete_distribution وغيرها.

العشوائية القابلة لإعادة الإنتاج

لأغراض الاختبار، استخدم قيمة ثابتة للبذرة للحصول على التسلسل نفسه في كل تشغيل.

std::mt19937 engine(42);
// Same output every time you run the program

خلط العناصر عشوائيًا

اخلط حاوية باستخدام std::shuffle، التي تقبل أي محرك.

#include <algorithm>
std::vector<int> v = {1,2,3,4,5};
std::shuffle(v.begin(), v.end(), engine);

مطب: إعادة تهيئة البذرة داخل حلقة

لا تنشئ كائن random_device أو محركًا جديدًا لكل عدد عشوائي. أنشئ محركًا واحدًا وأعد استخدامه في الاستدعاءات المختلفة.

اختبار سريع

ما الطريقة الحديثة والأكثر أمانًا في C++ لتهيئة بذرة محرك شبه عشوائي؟

مراجعة

تستخدم العشوائية في C++ الحديثة random_device لتهيئة البذرة، وmt19937 كمحرك، وتوزيعًا مثل uniform_int_distribution لتشكيل القيم الناتجة. أعد استخدام المحرك، ولا تنشئ محركًا جديدًا لكل استدعاء.

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

هل درس «الأعداد العشوائية باستخدام الترويسة random» مجاني؟

نعم — نص درس «الأعداد العشوائية باستخدام الترويسة random» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «الأعداد العشوائية باستخدام الترويسة random»؟

ولّد أعدادًا عشوائية عالية الجودة باستخدام المحرّكات والتوزيعات الحديثة. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «الأعداد العشوائية باستخدام الترويسة random»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الأنواع الصحيحة مقابل أنواع الفاصلة العائمة
  2. الترويسة cmath: ‏pow وsqrt وabs وround
  3. الأعداد العشوائية باستخدام الترويسة random
  4. الحدود الرقمية وسلوك تجاوز السعة
← العودة إلى C++ Academy