C में वास्तविक रूप से यादृच्छिक संख्याएँ उत्पन्न करें: rand() और srand() का पूर्ण मार्गदर्शक

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: %dn", randomNumber);
    return 0;
}

इस कोड को चलाने पर 0 से 32767 के बीच एक रैंडम नंबर प्रदर्शित होगा। हालांकि, एक कमी यह है कि हर बार वही रैंडम नंबर जेनरेट होगा। हम इस पर बाद में और चर्चा करेंगे।

2. रैंडम नंबर की रेंज को एडजस्ट करना

2.1 मोड्यूलो ऑपरेटर का उपयोग करके रेंज को सीमित करना

रैंडम नंबर जेनरेट करते समय अक्सर आपको किसी विशिष्ट रेंज के भीतर मान चाहिए होते हैं। उदाहरण के लिए, 1 से 100 तक का रैंडम नंबर जेनरेट करने के लिए आप rand() फ़ंक्शन के आउटपुट को मोड्यूलो ऑपरेटर % का उपयोग करके एडजस्ट कर सकते हैं।

int numberInRange = rand() % 100 + 1; // Generates a random number from 1 to 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)); // Set current time as seed
    int randomNumber = rand(); 
    printf("Generated random number: %dn", 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)); // Set the seed
    int diceRoll = rand() % 6 + 1; // Generate a random number from 1 to 6
    printf("Dice roll: %dn", 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 π: %fn", pi);

    return 0;
}

यह प्रोग्राम मोन्टे कार्लो विधि का एक उदाहरण है जो यादृच्छिक बिंदुओं का उपयोग करके π का अनुमान लगाता है। यह rand() का उपयोग करके 0 से 1 की सीमा में यादृच्छिक संख्याएँ उत्पन्न करता है, और फिर उनका उपयोग करके वृत्त के क्षेत्रफल का अनुमान लगाता है।

5. rand() और srand() के लिए महत्वपूर्ण विचार

5.1 स्यूडो-रैंडमनेस को समझना

C की rand() फ़ंक्शन द्वारा उत्पन्न यादृच्छिक संख्याएँ स्यूडो-रैंडम होती हैं। वे वास्तव में यादृच्छिक मान नहीं होते बल्कि एक आंतरिक एल्गोरिदम के आधार पर गणना की जाती हैं, जिसका अर्थ है कि समान बीज (seed) का उपयोग करने पर वही यादृच्छिक संख्या पैटर्न उत्पन्न होगा। यह डिबगिंग के लिए उपयोगी है, लेकिन जब वास्तविक यादृच्छिकता की आवश्यकता होती है तो यह उपयुक्त नहीं है।

5.2 सामान्य गलतियाँ

यादृच्छिक संख्याओं का उपयोग करते समय सामान्य गलतियों में srand() का उपयोग न करना या rand() की आउटपुट सीमा को समझ न पाना शामिल है। विशेष रूप से, यदि आप rand() का उपयोग करने से पहले srand() के साथ बीज सेट नहीं करते हैं, तो हर बार वही यादृच्छिक संख्या पैटर्न उत्पन्न होगा। साथ ही, जब आप rand() % n के साथ सीमा समायोजित करते हैं, तो n के मान के कारण अनपेक्षित परिणाम हो सकते हैं, इसलिए सावधान रहें।

निष्कर्ष

C में यादृच्छिक संख्याएँ उत्पन्न करना विभिन्न क्षेत्रों में उपयोग किया जाता है, जैसे खेल और सिमुलेशन। rand() और srand() फ़ंक्शनों का उपयोग कैसे करें और सही तरीके से यादृच्छिक संख्याएँ उत्पन्न करना समझकर, आप अपने प्रोग्रामों में अप्रत्याशित तत्व जोड़ सकते हैं। इस लेख को देखें और यादृच्छिक संख्याओं का उपयोग करने वाले प्रोग्राम बनाने का प्रयास करें।

年収訴求