logo

Hogyan generáljunk véletlen számot 1 és 10 között C++ nyelven

A véletlen számok generálása számos programozási alkalmazásban általános követelmény, és a C++ többféle módot biztosít véletlen számok generálására egy adott tartományon belül. Ebben a cikkben különböző módszereket vizsgálunk meg 1 és 10 közötti véletlen számok generálására C++ nyelven.

1. módszer:

A rand() függvény használata:

Az egyik legegyszerűbb módszer 1 és 10 közötti véletlenszám generálására C++ nyelven a rand() funkció. Ez a funkció a fejlécfájlt, és véletlenszerű egész számot generál egy tartományon belül 0 nak nek RAND_MAX . Az értéke RAND_MAX megvalósítástól függ, és fordítóról fordítóra változhat.

Példa:

Vegyünk egy példát egy 1 és 10 közötti véletlenszám generálására a rand() függvény segítségével, a következő kódot használhatjuk:

 #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;>

Ebben a kódban a és fejléc fájlok. A srand() A funkció a véletlenszám-generátor inicializálására szolgál, az aktuális idővel mint magként. Biztosítja, hogy minden alkalommal, amikor a program fut, egy új véletlenszám-sorozat generálódik.

A rand() A függvény 0 és 0 közötti véletlenszerű egész szám generálására szolgál RAND_MAX . Az 1 és 10 közötti tartomány korlátozásához vesszük ennek a számnak a maradékát, ha elosztjuk 10-zel, és hozzáadunk 1-et.

2. módszer:

C++11 random könyvtár használata

A C++11 szabvány egy új könyvtárat vezetett be amely jobb módszert biztosít véletlen számok generálására. Ez a könyvtár számos véletlenszám-generáló motort és eloszlást biztosít, amelyek egyenletes eloszlású véletlenszámokat generálhatnak.

Példa:

Vegyünk egy példát egy 1 és 10 közötti véletlenszám generálására a könyvtár, a következő kódot használhatjuk:

 #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;>

Ebben a kódban a idő() funkciót, hogy megkapja az aktuális időt kezdőértékként a srand() funkció. A srand() függvény a véletlenszám-generátor inicializálására szolgál. A rand() függvény egy véletlenszerű egész számot generál 0 és között RAND_MAX , amely ezután 1 és 10 közötti tartományra korlátozódik a kezelő modul és adjunk hozzá 1-et.

Következtetés:

Összefoglalva, számos módszer létezik 1 és 10 közötti véletlen számok generálására C++ nyelven. A módszer megválasztása az alkalmazás követelményeitől függ, mint pl sebesség, véletlenszerűség , és egységessége generált számokból. Amíg a rand() függvény a legegyszerűbb és legkönnyebben megvalósítható, nem biztos, hogy jó véletlenszerűséget és egységességet biztosít. A könyvtár jobb módot biztosít véletlen számok generálására egyenletes eloszlású, de lassabb és bonyolultabb a megvalósítása. A XORShift algoritmus jót tesz véletlenszerűség és egységessége , de bonyolultabb a megvalósítása, és nem biztos, hogy olyan gyors, mint a rand() funkció.