1. كيفية توليد الأرقام العشوائية في لغة C: دالة rand
1.1 ما هي دالة rand؟
دالة rand()
هي دالة في لغة C تستخدم لتوليد الأرقام شبه العشوائية. الأرقام شبه العشوائية هي تسلسلات من الأرقام يتم إنشاؤها بواسطة خوارزمية محددة مسبقًا، وهي ليست أرقامًا عشوائية حقيقية، لكنها كافية للاستخدامات العامة. تُرجع دالة rand()
عددًا صحيحًا في نطاق من 0 إلى 32767. قد يختلف هذا النطاق حسب النظام، ولكنه عادةً ما يكون هذه القيمة.
1.2 الاستخدام الأساسي لدالة rand
لاستخدام دالة rand()
، يجب تضمين stdlib.h
. يوضح الكود التالي مثالًا أساسيًا لتوليد رقم عشوائي باستخدام دالة rand()
:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int randomNumber = rand();
printf("Generated random number: %d
", randomNumber);
return 0;
}
عند تشغيل هذا الكود، سيتم عرض رقم عشوائي بين 0 و 32767. ومع ذلك، فإن العيب في هذا هو أنه سيتم إنشاء نفس الرقم العشوائي في كل مرة. سيتم مناقشة هذا لاحقًا.
2. كيفية تعديل نطاق الأرقام العشوائية
2.1 استخدام المعامل المتبقي لتقييد النطاق
عند توليد الأرقام العشوائية، غالبًا ما تحتاج إلى قيم ضمن نطاق معين. على سبيل المثال، إذا كنت ترغب في توليد أرقام عشوائية من 1 إلى 100، يمكنك استخدام عامل الباقي %
على خرج دالة rand()
لتعديل النطاق.
int numberInRange = rand() % 100 + 1; // لتوليد رقم عشوائي من 1 إلى 100
في هذا المثال، يتم الحصول على الباقي من قسمة خرج rand()
على 100، ثم يتم إضافة 1 إليه لتوليد رقم عشوائي من 1 إلى 100. يتيح لك استخدام المعامل المتبقي توليد أرقام عشوائية بسهولة ضمن أي نطاق مطلوب.
2.2 توليد أرقام عشوائية بنطاق محدد
إذا كنت ترغب في تحديد نطاق الأرقام العشوائية بشكل أكثر مرونة، يمكنك إنشاء دالة واستخدامها. فيما يلي مثال على دالة تقوم بتوليد أرقام عشوائية ضمن نطاق من قيمة دنيا وعليا محددة:
int getRandomNumber(int min, int max) {
return rand() % (max - min + 1) + min;
}
باستخدام هذه الدالة، يمكنك توليد أرقام عشوائية ضمن أي نطاق، مثل getRandomNumber(1, 100)
.
3. تغيير نمط الأرقام العشوائية باستخدام دالة srand
3.1 ما هي دالة srand؟
إذا استخدمت دالة rand()
كما هي، فسيتم إنشاء نفس نمط الأرقام العشوائية في كل مرة يتم فيها تشغيل البرنامج. هذه سمة من سمات الأرقام شبه العشوائية، وهي مفيدة لأغراض التصحيح، ولكنها مشكلة عندما تكون هناك حاجة إلى أرقام عشوائية عملية. ولحل هذه المشكلة، يمكنك استخدام دالة srand()
لتعيين بذرة الأرقام العشوائية وتغيير نمط الأرقام العشوائية التي يتم إنشاؤها.
3.2 كيفية استخدام دالة srand
يتم استدعاء دالة srand()
قبل دالة rand()
لتحديد بذرة الأرقام العشوائية. عادةً، يتم استخدام srand((unsigned int)time(NULL))
لتحديد الوقت الحالي كبذرة.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned int)time(NULL)); // تعيين الوقت الحالي كبذرة
int randomNumber = rand();
printf("Generated random number: %d
", randomNumber);
return 0;
}
في هذا الكود، يتم إنشاء نمط مختلف من الأرقام العشوائية في كل مرة بواسطة srand()
. تُرجع time(NULL)
الوقت الحالي بالثواني، مما يتيح تعيين بذرة مختلفة في كل مرة.

4. أمثلة على استخدام الأرقام العشوائية
4.1 استخدام الأرقام العشوائية في الألعاب
تُستخدم الأرقام العشوائية بشكل متكرر في تطوير الألعاب. على سبيل المثال، تُستخدم لتعيين مواقع الشخصيات عشوائيًا أو تحديد احتمالية ظهور العناصر. فيما يلي مثال على محاكاة رمي النرد:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned int)time(NULL)); // تعيين البذرة
int diceRoll = rand() % 6 + 1; // توليد رقم عشوائي من 1 إلى 6
printf("Dice roll: %d
", diceRoll);
return 0;
}
يولد هذا البرنامج رقمًا عشوائيًا من 1 إلى 6 ويخرجه كوجه نرد. باستخدام الأرقام العشوائية، يمكنك بسهولة تنفيذ عناصر غير متوقعة في الألعاب.
4.2 المحاكاة بطريقة مونت كارلو
تُستخدم الأرقام العشوائية أيضًا في عمليات المحاكاة مثل طريقة مونت كارلو. طريقة مونت كارلو هي تقنية تستخدم الأرقام العشوائية لتقريب حلول المشكلات التي يصعب حلها تحليليًا. على سبيل المثال، يمكن استخدام الأرقام العشوائية لتقريب قيمة ثابت الدائرة π.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int n_trials = 1000000;
int n_inside = 0;
double x, y, pi;
srand((unsigned int)time(NULL));
for (int i = 0; i < n_trials; i++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if (x * x + y * y <= 1) {
n_inside++;
}
}
pi = 4.0 * n_inside / n_trials;
printf("Approximated π: %f
", pi);
return 0;
}
هذا البرنامج هو مثال على طريقة مونت كارلو لتقريب ثابت الدائرة باستخدام نقاط عشوائية. تُستخدم دالة rand()
لتوليد أرقام عشوائية في النطاق من 0 إلى 1، وتُستخدم هذه الأرقام لتقريب مساحة الدائرة.
5. ملاحظات حول دالتي rand و srand
5.1 فهم الأرقام شبه العشوائية
الأرقام التي تولدها دالة rand()
في لغة C هي أرقام شبه عشوائية. إنها ليست قيمًا عشوائية حقيقية، وبما أنها تُحسب بناءً على خوارزمية داخلية، فسيتم إنشاء نفس نمط الأرقام العشوائية إذا تم استخدام نفس البذرة. هذا مفيد لأغراض التصحيح، ولكنه غير مناسب عندما تكون هناك حاجة إلى عشوائية كاملة.
5.2 الأخطاء الشائعة
من الأخطاء الشائعة عند استخدام الأرقام العشوائية عدم استخدام دالة srand()
، أو سوء فهم نطاق خرج دالة rand()
. على وجه الخصوص، إذا لم تقم بتعيين بذرة باستخدام srand()
قبل استخدام rand()
، فسيتم إنشاء نفس نمط الأرقام العشوائية في كل مرة. بالإضافة إلى ذلك، عند تعديل النطاق باستخدام rand() % n
، قد يؤدي ذلك إلى نتائج مختلفة عن المقصود من قيمة n
، لذلك يجب توخي الحذر.
الخاتمة
يُستخدم توليد الأرقام العشوائية في لغة C في مجالات متنوعة مثل الألعاب والمحاكاة. من خلال فهم كيفية استخدام دالتي rand()
و srand()
وتوليد الأرقام العشوائية بشكل صحيح، يمكنك إضافة عناصر غير متوقعة إلى برنامجك. باستخدام هذا المقال كمرجع، نأمل أن تقوم بإنشاء برامج تستفيد من الأرقام العشوائية.