0Pricing
C++ Academy · درس

أمثلة عملية

النرد وعمليات الخلط وأخذ العينات

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

رمي النرد

النرد ذو الأوجه الستة هو uniform_int_distribution(1, 6) يُغذّيه مولّد مهيأ بالبذرة.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(2026);
    std::uniform_int_distribution<int> die(1, 6);
    for (int i = 0; i < 5; ++i) std::cout << die(gen) << ' ';
    std::cout << '\n';
    return 0;
}

جمع نتيجتي نردين

يؤدي رمي نردين وجمع نتيجتيهما إلى النطاق المألوف من 2 إلى 12، مع ذروة عند 7.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(1);
    std::uniform_int_distribution<int> die(1, 6);
    int total = die(gen) + die(gen);
    std::cout << "two dice sum: " << total << '\n';
    return 0;
}

رمي قطعة نقدية

تمثّل القطعة النقدية العادلة bernoulli_distribution(0.5). احسب عدد مرات ظهور الصورة عبر عمليات رمي كثيرة.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(7);
    std::bernoulli_distribution coin(0.5);
    int heads = 0;
    for (int i = 0; i < 100; ++i) if (coin(gen)) ++heads;
    std::cout << heads << " heads out of 100\n";
    return 0;
}

خلط مجموعة أوراق

تعيد std::shuffle ترتيب نطاق عشوائيًا باستخدام المولّد، وهي البديل الحديث عن random_shuffle التي أُزيلت.

#include <iostream>
#include <random>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> cards{1, 2, 3, 4, 5};
    std::mt19937 gen(3);
    std::shuffle(cards.begin(), cards.end(), gen);
    for (int c : cards) std::cout << c << ' ';
    std::cout << '\n';
    return 0;
}

اختيار فائز عشوائي

حدّد عنصرًا واحدًا عبر توليد فهرس عشوائي ضمن النطاق.

#include <iostream>
#include <random>
#include <vector>
#include <string>

int main() {
    std::vector<std::string> names{"Ann", "Ben", "Cara", "Dan"};
    std::mt19937 gen(9);
    std::uniform_int_distribution<int> pick(0, names.size() - 1);
    std::cout << "winner: " << names[pick(gen)] << '\n';
    return 0;
}

أخذ عينات دون استبدال

تسحب std::sample عدد k من العناصر المميزة من نطاق، ولذلك فهي مناسبة تمامًا لقرعة أو لاختيار أسئلة اختبار.

#include <iostream>
#include <random>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> pool{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    std::vector<int> picked;
    std::mt19937 gen(4);
    std::sample(pool.begin(), pool.end(), std::back_inserter(picked), 3, gen);
    for (int x : picked) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

محارف كلمات المرور العشوائية

استخدم توزيعًا منتظمًا للوصول إلى مجموعة محارف، وبذلك تبني سلسلة عشوائية.

#include <iostream>
#include <random>
#include <string>

int main() {
    const std::string chars = "abcdefghijklmnopqrstuvwxyz";
    std::mt19937 gen(13);
    std::uniform_int_distribution<int> pick(0, chars.size() - 1);
    std::string pw;
    for (int i = 0; i < 8; ++i) pw += chars[pick(gen)];
    std::cout << pw << '\n';
    return 0;
}

اختيار موزون

تختار std::discrete_distribution الفهارس وفق أوزان محددة، ولذلك تظهر النتائج الشائعة بمعدل أكبر.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(6);
    std::discrete_distribution<int> d{10, 1, 1}; // index 0 is heaviest
    int counts[3] = {0};
    for (int i = 0; i < 120; ++i) counts[d(gen)]++;
    std::cout << counts[0] << ' ' << counts[1] << ' ' << counts[2] << '\n';
    return 0;
}

محاكاة مسير عشوائي

تحرّك خطوة إلى اليسار أو اليمين عشوائيًا، وتتبّع الموضع النهائي؛ فهذه محاكاة عشوائية بسيطة.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(2);
    std::bernoulli_distribution step(0.5);
    int pos = 0;
    for (int i = 0; i < 1000; ++i) pos += step(gen) ? 1 : -1;
    std::cout << "final position: " << pos << '\n';
    return 0;
}

الرمي حتى ظهور ستة

كرّر الحلقة حتى وقوع حدث ما لمحاكاة التجارب، وذلك عبر عدّ عمليات الرمي اللازمة هنا للحصول على ستة.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(15);
    std::uniform_int_distribution<int> die(1, 6);
    int rolls = 0;
    while (die(gen) != 6) ++rolls;
    std::cout << "extra rolls before a six: " << rolls << '\n';
    return 0;
}

توليد بيانات الاختبار

تملأ التوزيعات متجهًا بسرعة بقيم عشوائية لاختبار الخوارزميات.

#include <iostream>
#include <random>
#include <vector>

int main() {
    std::mt19937 gen(21);
    std::uniform_int_distribution<int> d(1, 50);
    std::vector<int> data(5);
    for (int& v : data) v = d(gen);
    for (int v : data) std::cout << v << ' ';
    std::cout << '\n';
    return 0;
}

تحقق سريع

اختبر مدى فهمك للاستخدامات العملية للعشوائية.

مراجعة

طبّقت <random> عمليًا:

  • استخدمت توزيعات uniform وbernoulli للنرد والعملات واختيار الفائزين
  • استخدمت std::shuffle لإعادة الترتيب وstd::sample للسحب دون استبدال
  • استخدمت discrete_distribution للاختيارات الموزونة، إلى جانب محاكاة مثل المسير العشوائي

أصبحت لديك الآن مجموعة أدوات متكاملة للحاويات الترابطية والتجزئة وإدخال وإخراج الملفات والعشوائية في C++.

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

هل درس «أمثلة عملية» مجاني؟

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

ماذا ستتعلم في «أمثلة عملية»؟

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

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

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

كم من الوقت يستغرق درس «أمثلة عملية»؟

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

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

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

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

  1. المولّدات العشوائية
  2. التوزيعات
  3. التهيئة ببذرة بطريقة صحيحة
  4. أمثلة عملية
← العودة إلى C++ Academy