الدّالّة (4) - الدوالّ العشوائية Random functions
تُستخدم الدوال العشوائية في لغة C++ لإنشاء أرقام عشوائية. هناك دالتان عشوائيتان جاهزتان في لغة C++: rand()
و srand()
.
الـ rand()
تنشئ الدالة عددًا صحيحًا عشوائيًا بين 0 وRAND_MAX، حيث RAND_MAX هو ماكرو تم تعريفه في ملف الـ header cstdlib
. الدالّة srand()
تستخدم لوضع بذرة لمولد الأرقام العشوائية. إذا لم تستدعي الدالة srand()
، سيتم تصنيف مولد الأرقام العشوائية بقيمة افتراضية.
مثال 1:
#include <iostream> #include <cstdlib> using namespace std; int main() { cout << rand() << endl; return 0; }
يطبع هذا البرنامج عددًا صحيحًا عشوائيًا إلى شاشة المخرجات.
مثال 2:
#include <iostream> #include <cstdlib> using namespace std; int main() { for (size_t i = 0; i < 10; i++) { cout << rand() << endl; } return 0; }
هذا البرنامج عبارة عن حلقة دوران تطبع 10 أعداد صحيحة عشوائية على شاشة المخرجات.
مثال 3:
#include <iostream> #include <cstdlib> using namespace std; int main() { for (size_t i = 0; i < 10; i++) { cout << rand()%10 << endl; } return 0; }
ينشئ هذا البرنامج رقمًا عشوائيًا بين 0 و9 ويطبعه على شاشة المخرجات. يقوم معامل القسمة (%) بإرجاع باقي عملية القسمة. إذن التعبير rand()%10
يرجع باقي قسمة العملية الحسابية rand() / 10
مما سيعطينا رقمًا بين 0 و 9.
مثال 4:
#include <iostream> #include <cstdlib> using namespace std; int main() { for (size_t i = 1; i <= 10; i++) { cout << rand()%(30 - 20 + 1) + 20 << endl; } return 0; }
يقوم هذا البرنامج بإنشاء عدد عشوائي بين 20 و30 وطباعته على شاشة المخرجات.
مثال 5:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand(time(0)); for (size_t i = 1; i <= 10; i++) { cout << rand()%(30 - 20 + 1) + 20 << endl; } return 0; }
الـ srand(time(0));
هي دالة توليد الأرقام العشوائية مع الوقت الحالي. وهذا يضمن أن الأرقام العشوائية مختلفة في كل مرة يتم فيها تشغيل البرنامج.
الـ srand()
تأخذ الدالة عددًا صحيحًا كمتغير لها وتقوم بتهيئة مولد الأرقام العشوائية باستخدام هذا المتغير. ال time(0)
هي دالة تقوم بإرجاع الوقت الحالي كقيمة time_t، وهو عدد صحيح.
من خلال زرع مولد الأرقام العشوائية مع الوقت الحالي، فإننا نستخدم قيمة تتغير باستمرار، مما يضمن اختلاف الأرقام العشوائية في كل مرة يتم فيها تشغيل البرنامج.
من المهم زرع مولد الأرقام العشوائية قبل استخدام rand()
. إذا لم تقم بزرع مولد الأرقام العشوائية، فسيتم بذره بقيمة افتراضية، مما سيؤدي إلى إنشاء نفس التسلسل من الأرقام العشوائية في كل مرة يتم فيها تشغيل البرنامج.
مثال 6:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { int x, y; x = time(0); for (size_t i = 0; i < 10000; i++) { cout << time(NULL) << endl; y = time (0); } cout << "The token time:" << y - x << endl; return 0; }
يطبع هذا البرنامج الوقت الحالي 10000 مرة على شاشة المخرجات ثم يطبع إجمالي الوقت المستغرق للقيام بذلك.
يعمل البرنامج على النحو التالي:
- الـ
int x, y;
هو تعريف لمتغيرين صحيحينx
وy
. - الـ
x = time(0);
يعين الوقت الحالي للمتغيرx
. - الـ
for (size_t i = 0; i < 10000; i++)
حلفة دوران يتم تكرارها 10000 مرة. - في كل تكرار للحلقة for، يتم تنفيذ الكود التالي:
- تتم طباعة الوقت الحالي على شاشة المخرجات باستخدام
cout << time(NULL) << endl;
.
- تتم طباعة الوقت الحالي على شاشة المخرجات باستخدام
- الـ
y = time(0);
يعين الوقت الحالي للمتغيرy
. - الـ
cout << "The token time:" << y - x << endl;
يطبع إجمالي الوقت المستغرق لطباعة الوقت الحالي 10000 مرة على شاشة المخرجات.
الـ time(NULL)
هي دالة مرادفة للدالة time(0)
.
يمكنك استخدام هذا البرنامج لقياس أداء التعليمات البرمجية الخاصة بك أو لحساب الوقت المنقضي بين حدثين.