logo

كيفية توليد رقم عشوائي بين 1 إلى 10 في لغة C++

يعد توليد أرقام عشوائية متطلبًا شائعًا في العديد من تطبيقات البرمجة، وتوفر لغة C++ عدة طرق لإنشاء أرقام عشوائية ضمن نطاق معين. في هذه المقالة، سوف نستكشف طرقًا مختلفة لإنشاء أرقام عشوائية بين 1 و10 في لغة C++.

طريقة 1:

باستخدام وظيفة راند ():

إحدى أبسط الطرق لإنشاء رقم عشوائي بين 1 و10 في لغة C++ هي راند () وظيفة. تم تعريف هذه الوظيفة في ملف رأس ويولد عددا صحيحا عشوائيا ضمن نطاق من 0 ل RAND_MAX . قيمة ال RAND_MAX يعتمد على التنفيذ ويمكن أن يختلف من مترجم إلى آخر.

مثال:

لنأخذ مثالاً لتوليد رقم عشوائي بين 1 و 10 باستخدام الدالة rand()، يمكننا استخدام الكود التالي:

 #include #include #include using namespace std; int main() { srand(time(0)); cout&lt;&lt; &apos;Random number between 1 and 10 is: &apos;&lt;<endl; for(int i="0;i&lt;10;i++)" cout << (rand() % 10) + 1<<' '; return 0; } < pre> <p> <strong>Output</strong> </p> <pre> Random number between 1 and 10 is: 4 5 7 10 7 5 1 7 10 2 </pre> <p>In this code, we have included the <strong> <em></em> </strong> and <strong> <em></em> </strong> header files. The <strong> <em>srand()</em> </strong> function is used to initialize the random number generator with the current time as the seed. It ensures that every time the program is run, a new sequence of random numbers is generated.</p> <p>The <strong> <em>rand()</em> </strong> function is used to generate a random integer between 0 and <strong> <em>RAND_MAX</em> </strong> . To limit the range between 1 and 10, we take the remainder of this number when divided by 10 and add 1 to it.</p> <h3>Method 2:</h3> <p> <strong>Using C++11 random library</strong> </p> <p>The <strong> <em>C++11</em> </strong> standard introduced a new library called <strong> <em></em> </strong> that provides a better way to generate random numbers. This library provides several random number generation engines and distributions that can generate random numbers with a uniform distribution.</p> <p> <strong>Example:</strong> </p> <p>Let&apos;s take an example to generate a random number between 1 and 10 using the <strong> <em></em> </strong> library, we can use the following code:</p> <pre> #include #include using namespace std; int main() { random_device rand; mt19937 gen(rand()); uniform_int_distributiondis(1, 10); int random_number = dis(gen); cout&lt;&lt; &apos;Random number between 1 and 10 is: &apos; &lt;<random_number<<endl; return 0; } < pre> <p>In this code, we have included the <strong> <em></em> </strong> header file. The <strong> <em>random_device</em> </strong> class is used to obtain a seed value for the random number generator. The <strong> <em>mt19937</em> </strong> class is a random number generation engine that produces random numbers with a uniform distribution. The <strong> <em>uniform_int_distribution</em> </strong> class is used to generate random integers within a given range.</p> <p>By default, the <strong> <em>mt19937</em> </strong> engine uses a seed value of <strong> <em>5489</em> </strong> , which can be changed using the <strong> <em>seed()</em> </strong> method. However, it is recommended to use a <strong> <em>random_device</em> </strong> to obtain a seed value for better randomness.</p> <p>The <strong> <em>uniform_int_distribution</em> </strong> class generates random integers with a uniform distribution within a given range. In this code, we have specified the range as <strong> <em>1</em> </strong> to <strong> <em>10</em> </strong> using the constructor.</p> <p>This method provides better randomness and a uniform distribution of generated numbers compared to the <strong> <em>rand()</em> </strong> function. However, it is slower and more complex to implement.</p> <h3>Method 3:</h3> <p> <strong>Using modulo operator with time():</strong> </p> <p>Another method to generate a random number between 1 and 10 is the <strong> <em>modulo operator</em> </strong> with the current time as a seed value. This method is similar to the first method using <strong> <em>rand()</em> </strong> function, but it uses a more random seed value and provides better randomness.</p> <p> <strong>Example:</strong> </p> <p>Let&apos;s take an example to generate a random number between 1 and 10 using the modulo operator with <strong> <em>time()</em> </strong> , we can use the following code:</p> <pre> #include #include using namespace std; int main() { srand(time(0)); cout&lt;&lt; &apos;Random number between 1 and 10 is: &apos; &lt;<endl; for(int i="0;i&lt;10;i++)" cout << (rand() % 10) + 1<<' '; return 0; } < pre> <p> <strong>Output</strong> </p> <pre> Random number between 1 and 10 is: 6 6 3 6 10 10 1 7 6 4 </pre> <p>In this code, we have used the <strong> <em>time()</em> </strong> function to obtain the current time as a seed value for the <strong> <em>srand()</em> </strong> function. The <strong> <em>srand()</em> </strong> function is used to initialize the random number generator. The <strong> <em>rand()</em> </strong> function generates a random integer between 0 and <strong> <em>RAND_MAX</em> </strong> , which is then limited to a range between 1 and 10 using the <strong> <em>modulo operator</em> </strong> and adding 1 to it.</p> <h2>Conclusion:</h2> <p>In conclusion, there are several methods to generate random numbers between 1 and 10 in C++. The choice of method depends on the requirements of the application, such as <strong> <em>speed, randomness</em> </strong> , and <strong> <em>uniformity</em> </strong> of generated numbers. While the <strong> <em>rand()</em> </strong> function is the simplest and easiest to implement, it may not provide good randomness and uniformity. The <strong> <em></em> </strong> library provides a better way to generate random numbers with a uniform distribution, but it is slower and more complex to implement. The <strong> <em>XORShift</em> </strong> algorithm provides good <strong> <em>randomness</em> </strong> and <strong> <em>uniformity</em> </strong> , but it is more complex to implement and may not be as fast as the <strong> <em>rand()</em> </strong> function.</p> <hr></endl;></pre></random_number<<endl;></pre></endl;>

في هذا الكود قمنا بإدراج و ملفات الرأس. ال ساند () يتم استخدام الوظيفة لتهيئة مولد الأرقام العشوائية بالوقت الحالي باعتباره البذرة. فهو يضمن أنه في كل مرة يتم فيها تشغيل البرنامج، يتم إنشاء تسلسل جديد من الأرقام العشوائية.

ال راند () يتم استخدام الدالة لإنشاء عدد صحيح عشوائي بين 0 و RAND_MAX . لتحديد النطاق بين 1 و10، نأخذ باقي هذا الرقم عند قسمته على 10 ونضيف إليه 1.

الطريقة الثانية:

باستخدام مكتبة عشوائية C++ 11

ال سي++11 قدم المعيار مكتبة جديدة تسمى يوفر طريقة أفضل لتوليد أرقام عشوائية. توفر هذه المكتبة العديد من محركات وتوزيعات توليد الأرقام العشوائية التي يمكنها إنشاء أرقام عشوائية بتوزيع موحد.

مثال:

لنأخذ مثالاً لإنشاء رقم عشوائي بين 1 و10 باستخدام المكتبة، يمكننا استخدام الكود التالي:

 #include #include using namespace std; int main() { random_device rand; mt19937 gen(rand()); uniform_int_distributiondis(1, 10); int random_number = dis(gen); cout&lt;&lt; &apos;Random number between 1 and 10 is: &apos; &lt;<random_number<<endl; return 0; } < pre> <p>In this code, we have included the <strong> <em></em> </strong> header file. The <strong> <em>random_device</em> </strong> class is used to obtain a seed value for the random number generator. The <strong> <em>mt19937</em> </strong> class is a random number generation engine that produces random numbers with a uniform distribution. The <strong> <em>uniform_int_distribution</em> </strong> class is used to generate random integers within a given range.</p> <p>By default, the <strong> <em>mt19937</em> </strong> engine uses a seed value of <strong> <em>5489</em> </strong> , which can be changed using the <strong> <em>seed()</em> </strong> method. However, it is recommended to use a <strong> <em>random_device</em> </strong> to obtain a seed value for better randomness.</p> <p>The <strong> <em>uniform_int_distribution</em> </strong> class generates random integers with a uniform distribution within a given range. In this code, we have specified the range as <strong> <em>1</em> </strong> to <strong> <em>10</em> </strong> using the constructor.</p> <p>This method provides better randomness and a uniform distribution of generated numbers compared to the <strong> <em>rand()</em> </strong> function. However, it is slower and more complex to implement.</p> <h3>Method 3:</h3> <p> <strong>Using modulo operator with time():</strong> </p> <p>Another method to generate a random number between 1 and 10 is the <strong> <em>modulo operator</em> </strong> with the current time as a seed value. This method is similar to the first method using <strong> <em>rand()</em> </strong> function, but it uses a more random seed value and provides better randomness.</p> <p> <strong>Example:</strong> </p> <p>Let&apos;s take an example to generate a random number between 1 and 10 using the modulo operator with <strong> <em>time()</em> </strong> , we can use the following code:</p> <pre> #include #include using namespace std; int main() { srand(time(0)); cout&lt;&lt; &apos;Random number between 1 and 10 is: &apos; &lt;<endl; for(int i="0;i&lt;10;i++)" cout << (rand() % 10) + 1<<\' \'; return 0; } < pre> <p> <strong>Output</strong> </p> <pre> Random number between 1 and 10 is: 6 6 3 6 10 10 1 7 6 4 </pre> <p>In this code, we have used the <strong> <em>time()</em> </strong> function to obtain the current time as a seed value for the <strong> <em>srand()</em> </strong> function. The <strong> <em>srand()</em> </strong> function is used to initialize the random number generator. The <strong> <em>rand()</em> </strong> function generates a random integer between 0 and <strong> <em>RAND_MAX</em> </strong> , which is then limited to a range between 1 and 10 using the <strong> <em>modulo operator</em> </strong> and adding 1 to it.</p> <h2>Conclusion:</h2> <p>In conclusion, there are several methods to generate random numbers between 1 and 10 in C++. The choice of method depends on the requirements of the application, such as <strong> <em>speed, randomness</em> </strong> , and <strong> <em>uniformity</em> </strong> of generated numbers. While the <strong> <em>rand()</em> </strong> function is the simplest and easiest to implement, it may not provide good randomness and uniformity. The <strong> <em></em> </strong> library provides a better way to generate random numbers with a uniform distribution, but it is slower and more complex to implement. The <strong> <em>XORShift</em> </strong> algorithm provides good <strong> <em>randomness</em> </strong> and <strong> <em>uniformity</em> </strong> , but it is more complex to implement and may not be as fast as the <strong> <em>rand()</em> </strong> function.</p> <hr></endl;></pre></random_number<<endl;>

في هذا الكود استخدمنا وقت() وظيفة للحصول على الوقت الحالي كقيمة أولية لـ ساند () وظيفة. ال ساند () يتم استخدام الوظيفة لتهيئة مولد الأرقام العشوائية. ال راند () تقوم الدالة بإنشاء عدد صحيح عشوائي بين 0 و RAND_MAX ، والذي يقتصر بعد ذلك على نطاق يتراوح بين 1 و 10 باستخدام وحدة المشغل وإضافة 1 إليه.

خاتمة:

في الختام، هناك عدة طرق لتوليد أرقام عشوائية بين 1 و 10 في لغة C++. يعتمد اختيار الطريقة على متطلبات التطبيق، مثل السرعة والعشوائية ، و التوحيد من الأعداد المتولدة بينما ال راند () الوظيفة هي الأبسط والأسهل في التنفيذ، وقد لا توفر عشوائية وتوحيدًا جيدًا. ال توفر المكتبة طريقة أفضل لتوليد أرقام عشوائية بتوزيع موحد، ولكنها أبطأ وأكثر تعقيدًا في التنفيذ. ال XORShift توفر الخوارزمية جيدة العشوائية و التوحيد ، ولكنه أكثر تعقيدًا في التنفيذ وقد لا يكون بنفس سرعة راند () وظيفة.