C++ رینڈم نمبر جنریٹر
سیکھیں کہ C++ میں انٹرایکٹو کوڈ کی مثالوں کے ساتھ رینڈم نمبرز کیسے تیار کیے جائیں۔ rand(), srand(), <random> library, std::uniform_int_distribution, اور std::mt19937 کو تفصیلی وضاحتوں کے ساتھ دریافت کریں۔
C++ کوڈ ایڈیٹر
سیکھیں کہ C++ میں انٹرایکٹو کوڈ کی مثالوں کے ساتھ رینڈم نمبرز کیسے تیار کیے جائیں۔ rand(), srand(), <random> library, std::uniform_int_distribution, اور std::mt19937 کو تفصیلی وضاحتوں کے ساتھ دریافت کریں۔
#include <iostream>
#include <random>
int main() {
int min = 1;
int max = 100;
int quantity = 5;
// Modern C++ random number generation
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(min, max);
std::cout << "Modern C++ random numbers:" << std::endl;
for (int i = 0; i < quantity; i++) {
int num = dis(gen);
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
آؤٹ پٹ
یہ براؤزر پیش منظر ہے، Java یا C++ چلانا نہیں۔ قدریں رمز نگاری کے لیے موزوں نہیں۔
مثال کا پیش منظر
کلاسک C++ رینڈ() کے ساتھ
روایتی rand() فنکشن استعمال <cstdlib> کریں تاکہ رینڈم انٹیجرز پیدا کیے جا سکیں۔ سادہ اور وسیع پیمانے پر سپورٹڈ ہے، اگرچہ کرپٹوگرافک ایپلیکیشنز کے لیے مناسب نہیں کیونکہ اس کی بے ترتیبی کی کوالٹی خراب ہے۔
کیا آپ کو ایک فوری رینڈم نمبر چاہیے؟
ہمارے آن لائن رینڈم نمبر جنریٹر کو آزما کر فوری نتائج حاصل کریں بغیر کوئی کوڈ لکھے۔
C++ رینڈم نمبر جنریشن کو سمجھنا
rand() کا الگورتھم عمل درآمد پر منحصر ہے۔ C++11 میں std::mt19937 جیسے انجن اور تقسیم الگ ہیں؛ تقسیم کا کوئی ڈیفالٹ mt19937 انجن نہیں۔
rand() Function
rand() کا الگورتھم عمل درآمد پر منحصر ہے۔ C++11 میں std::mt19937 جیسے انجن اور تقسیم الگ ہیں؛ تقسیم کا کوئی ڈیفالٹ mt19937 انجن نہیں۔
<random> Library
<random> لائبریری (C++11+) جدید رینڈم نمبر جنریشن فراہم کرتی ہے جس میں std::mt19937 (مرسین ٹوسٹر)، مختلف تقسیمات جیسے uniform_int_distribution، اور رینڈ() سے بہتر رینڈمنیس کوالٹی فراہم کرتی ہے۔
uniform_int_distribution
std::uniform_int_distribution یکساں تقسیم کے ساتھ عددی رینجز پر درست کنٹرول فراہم کرتا ہے۔ شماریاتی ایپلیکیشنز، سمولیشنز اور جب عین رینج کنٹرول درکار ہو کے لیے بہترین۔
std::mt19937
rand() کا الگورتھم عمل درآمد پر منحصر ہے۔ C++11 میں std::mt19937 جیسے انجن اور تقسیم الگ ہیں؛ تقسیم کا کوئی ڈیفالٹ mt19937 انجن نہیں۔
عام استعمال کے کیسز
گیمنگ اور سیمولیشنز
رینڈ() یا <random> جدید لائبریری ان گیم لوپس اور سیمولیشنز کے ذریعے رینڈم ڈائس رولز، کارڈ ڈرا، پروسیجرل جنریشن، اور گیم ایونٹس تیار کریں۔
سیکیورٹی اور کرپٹوگرافی
rand() اور std::mt19937 کرپٹوگرافک جنریٹر نہیں۔ سکیورٹی کے لیے دستاویزی کرپٹوگرافک لائبریری یا OS API استعمال کریں؛ std::random_device تمام پلیٹ فارموں پر سکیورٹی کی ضمانت نہیں۔
ہائی پرفارمنس کمپیوٹنگ
<random> جدید لائبریری std::mt19937 کے ساتھ HPC اور سائنسی کمپیوٹنگ ایپلیکیشنز میں بڑی مقدار میں بے ترتیب اعداد پیدا کرنے کے لیے بہترین کارکردگی فراہم کرتی ہے۔
سافٹ ویئر ٹیسٹنگ
C++ ایپلیکیشنز میں مضبوط کوڈ کوریج اور بگ ڈیٹیکشن کو یقینی بنانے کے لیے رینڈمائزڈ ٹیسٹ ڈیٹا، فز ٹیسٹنگ ان پٹس، اور ایج کیسز تیار کریں۔
C++ رینڈم نمبر جنریشن کیسے کام کرتی ہے
rand() کا الگورتھم عمل درآمد پر منحصر ہے۔ C++11 میں std::mt19937 جیسے انجن اور تقسیم الگ ہیں؛ تقسیم کا کوئی ڈیفالٹ mt19937 انجن نہیں۔
rand() کا الگورتھم عمل درآمد پر منحصر ہے۔ C++11 میں std::mt19937 جیسے انجن اور تقسیم الگ ہیں؛ تقسیم کا کوئی ڈیفالٹ mt19937 انجن نہیں۔
std::random_device عمل درآمد پر منحصر ہے اور تعینی انجن بھی استعمال کر سکتا ہے۔ ہر پلیٹ فارم پر ناقابل پیش گوئی نتیجے کی ضمانت نہیں۔
عملی تجاویز
نئے کوڈ کے لیے rand() سے گریز کریں
rand() کا الگورتھم عمل درآمد پر منحصر ہے۔ C++11 میں std::mt19937 جیسے انجن اور تقسیم الگ ہیں؛ تقسیم کا کوئی ڈیفالٹ mt19937 انجن نہیں۔
سیڈ واضح طور پر منتخب کریں
مستقل سیڈ اسی انجن کی ترتیب دہراتا ہے۔ C++ انجن سسٹم اینٹروپی سے خودکار طور پر شروع نہیں ہوتے؛ ضرورت ہو تو سیڈ واضح طور پر منتخب کریں۔
مناسب تقسیمات استعمال کریں
یکساں عددی رینجز کے لیے، std::uniform_int_distribution استعمال کریں۔ فلوٹنگ پوائنٹ نمبرز کے لیے، std::uniform_real_distribution استعمال کریں۔ یہ درست شماریاتی خصوصیات کو یقینی بناتا ہے۔
تکنیکی خصوصیات
الگورتھمز
- rand() کا الگورتھم عمل درآمد پر منحصر ہے۔ C++11 میں std::mt19937 جیسے انجن اور تقسیم الگ ہیں؛ تقسیم کا کوئی ڈیفالٹ mt19937 انجن نہیں۔
- مرسین ٹوسٹر (مواصلہ::mt19937)
- std::random_device عمل درآمد پر منحصر ہے اور تعینی انجن بھی استعمال کر سکتا ہے۔ ہر پلیٹ فارم پر ناقابل پیش گوئی نتیجے کی ضمانت نہیں۔
کارکردگی کی خصوصیات
- rand(): تیز لیکن بے ترتیبی کی کوالٹی کمزور
- <random>: تیز اور بہترین معیار
- std::mt19937: بڑی مقدار کے لیے بہت تیز
اکثر پوچھے گئے سوالات
کن C++ طریقوں کا احاطہ کیا گیا ہے؟
کلاسک rand() کو srand() کے ساتھ، جدید <random> لائبریری، std::uniform_int_distribution اور mt19937 انجن۔
کیا میں مثالوں کو اپنی ضرورت کے مطابق تبدیل کر سکتا ہوں؟
جی ہاں۔ پیرامیٹرز پینل میں کم از کم، زیادہ سے زیادہ اور تعداد مقرر کریں اور نتیجہ دیکھنے کے لیے رن کریں۔
آج کل کون سا طریقہ تجویز کیا جاتا ہے؟
مخصوص نام والی ڈسٹری بیوشن اور انجن کے ساتھ <random> لائبریری؛ rand() پرانے کوڈ میں اب بھی موجود ہے لیکن اس کا معیار کمزور ہے اور رینج کے مسائل لاحق ہیں۔
جنریٹر کو سیڈ کیسے کریں؟
std::random_device عمل درآمد پر منحصر ہے اور تعینی انجن بھی استعمال کر سکتا ہے۔ ہر پلیٹ فارم پر ناقابل پیش گوئی نتیجے کی ضمانت نہیں۔
C++ میں rand() کس رینج کے نمبر واپس کرتا ہے؟
rand() صفر سے RAND_MAX تک دونوں حدود سمیت قدر دیتا ہے۔ پلیٹ فارم جانچیں: Microsoft CRT میں حد 32767 ہے؛ دوسرے عمل درآمد میں مختلف ہو سکتی ہے۔
کیا rand() کریپٹوگرافک لحاظ سے محفوظ ہے؟
rand() اور std::mt19937 کرپٹوگرافک جنریٹر نہیں۔ سکیورٹی کے لیے دستاویزی کرپٹوگرافک لائبریری یا OS API استعمال کریں؛ std::random_device تمام پلیٹ فارموں پر سکیورٹی کی ضمانت نہیں۔
C++ میں رینڈم فلوٹ (floats) کیسے تیار کریں؟
std::mt19937 کو std::uniform_real_distribution کے ساتھ ملائیں جو آپ کے وقفے (interval) کے مطابق ترتیب دی گئی ہو، مثلاً 0.0 سے 1.0، پھر dist(generator) کو کال کریں۔ نتیجہ ایک double ہوتا ہے جس میں نچلی حد شامل ہوتی ہے مگر اوپری حد شامل نہیں ہوتی۔
کیا rand() C++ میں تھریڈ سیف (thread-safe) ہے؟
rand() کی تھریڈ حفاظت عمل درآمد پر منحصر ہے۔ ہر تھریڈ کا الگ انجن رکھیں یا مشترک انجن تک رسائی ہم آہنگ کریں۔
C++ standard draft: rand / srand · C++ standard draft: random_device · C++ standard draft: uniform_int_distribution
حوالہ جات اور وسائل
-
C++ <random> Reference - cppreference
C++ کی شبہ تصادفی نمبر جنریشن لائبریری کا سرکاری حوالہ۔
-
Mersenne Twister - Wikipedia
Mersenne Twister الگورتھم جو زیادہ تر زبانوں کی ریڈم لائبریریوں کی بنیاد ہے۔