Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ प्रोग्राम: छद्म यादृच्छिक संख्या जनरेशन के लिए रैखिक सर्वांगसम जनरेटर लागू करना


रैखिक सर्वांगसम जनरेटर एक यादृच्छिक संख्या जनरेटर का बहुत सरल उदाहरण है। यह सबसे पुराने और सबसे प्रसिद्ध छद्म यादृच्छिक संख्या जनरेटर एल्गोरिदम में से एक है। इस विधि में उपयोग किया जाने वाला फंक्शन -

Xn+1=(aXn + C) mod m

जहां X छद्म यादृच्छिक मानों का अनुक्रम है, और

m,0<m— “मॉड्यूलस” a,0<a<m — "गुणक" c,0<c<m — "वृद्धि" X0, 0<x0<m — "बीज" या "प्रारंभ मान"

पूर्णांक स्थिरांक हैं जो जनरेटर को निर्दिष्ट करते हैं।

इस विधि का एक लाभ यह है कि पैरामीटर्स के उचित चयन के साथ, अवधि ज्ञात और लंबी होती है।

एल्गोरिदम

शुरुआत क्लास mRND घोषित करें एक फंक्शन Seed(संख्या) बनाएं चर _seed=संख्या निर्दिष्ट करें एक कंस्ट्रक्टर mRND बनाएं _seed(0), a(0), c(0), m(2147483648) घोषित करें एक फंक्शन rnd() बनाएं _seed = (a * _seed + c) मॉड m वापस करें a, c, m, _seed घोषित करें हो गया एक और सबक्लास MS_RND घोषित करें जो बेस क्लास mRND से विरासत में मिली है एक कंस्ट्रक्टर बनाएं चर a, c पढ़ें एक फंक्शन rnd() बनाएं mRND::rnd() राइट शिफ्ट 16 वापस करें हो गया एक और सबक्लास BSD_RND घोषित करें जो बेस क्लास mRND से विरासत में मिली है एक कंस्ट्रक्टर बनाएं चर a, c पढ़ें एक फंक्शन rnd() बनाएं mRND::rnd() वापस करें हो गया x=0 से 6 तक MS_RAND प्रिंट करें x=0 से 6 तक BSD_RAND प्रिंट करें हो गया अंत

उदाहरण कोड

#include <iostream> using namespace std; class mRND {    public:    void seed(unsigned int s) {       _seed= s;    }    protected:    mRND() :    _seed(0), a(0), c(0), m(2147483648) { }    int rnd() {       return (_seed = (a * _seed + c) % m);    }    int a, c;    unsigned int m, _seed; }; class MS_RND: public mRND {    public:    MS_RND() {       a = 214013;       c = 2531011;    }    int rnd() {       return mRND::rnd() >> 16;    } }; class BSD_RND: public mRND {    public:    BSD_RND() {       a = 1016404597;       c = 12345;    }    int rnd() {       return mRND::rnd();    } }; int main(int argc, char* argv[]) { BSD_RND bsd_rnd; MS_RND ms_rnd; cout << "MS RAND:" << endl << "-----------" << endl; for (int x = 0; x < 6; x++) cout << ms_rnd.rnd() << endl; cout << endl << "BSD RAND:" << endl << "-------------" << endl; for (int x = 0; x < 6; x++) cout << bsd_rnd.rnd() << endl; return 0; }

आउटपुट

MS RAND: ------- 38 7719 21238 2437 8855 11797 BSD RAND: -------- 12345 1915290694 1005338679 629284700 741596485 1834373826

  1. C++ में हेक्साडेसिमल से डेसिमल रूपांतरण C++ में हेक्साडेसिमल से डेसिमल रूपांतरण

    एक हेक्साडेसिमल संख्या इनपुट के रूप में दी गई है, कार्य दी गई हेक्साडेसिमल संख्या को डेसिमल संख्या में बदलना है। कंप्यूटर में हेक्साडेसिमल संख्या को आधार 16 के साथ दर्शाया जाता है और डेसिमल संख्या को आधार 10 के साथ दर्शाया जाता है और मान 0-9 से दर्शाए जाते हैं जबकि हेक्साडेसिमल संख्या में 0-15 से अं

  1. C++ में DAG के लिए रैंडम लीनियर एक्सटेंशन बनाना C++ में DAG के लिए रैंडम लीनियर एक्सटेंशन बनाना

    यहां हम डायरेक्टेड एसाइक्लिक ग्राफ (DAG) के रैंडम लीनियर एक्सटेंशन बनाने का तरीका देखेंगे। लीनियर एक्सटेंशन मूल रूप से DAG की टोपोलॉजिकल सॉर्टिंग है। आइए मान लें कि ग्राफ नीचे जैसा है - डायरेक्टेड एसाइक्लिक ग्राफ के लिए टोपोलॉजिकल सॉर्टिंग वर्टेक्स की लीनियर ऑर्डरिंग है। डायरेक्टेड ग्राफ के प्रत्

  1. C++ में विग्नेरे सिफर (Vigenere Cipher) का कार्यान्वयन C++ में विग्नेरे सिफर (Vigenere Cipher) का कार्यान्वयन

    विग्नेरे सिफर अल्फाबेटिक टेक्स्ट को एन्क्रिप्ट करने की एक प्रकार की पॉलीअल्फाबेटिक सब्स्टीट्यूशन विधि है। विग्नेरे सिफर टेबल का उपयोग किया जाता है जिसमें A से Z तक के अल्फाबेट्स 26 पंक्तियों में लिखे होते हैं, इस विधि में एन्क्रिप्शन और डिक्रिप्शन के लिए। एन्क्रिप्शन Key: WELCOME Message: Thisis