PDA

View Full Version : تولید یک عدد تصادفی 12 رقمی



حدهدحد
سه شنبه 01 مرداد 1387, 00:09 صبح
سلام بچه ها یه برنامه میخام که خروجیش تمام حالت های رندوم یک عدد 12 رقمی باشد تمام حالت ها رو می خام نشون بده ولی به صورت رندوم مر30 ( روش کار اصلا مهم نیست )

deopen
جمعه 04 مرداد 1387, 23:30 عصر
دارم راجع بهش فکر میکنم...

deopen
شنبه 05 مرداد 1387, 15:12 عصر
من نصف بیشتر برنامشو نوشتم بذار یه چیزی بهت بگم یه عدد 12 رقمی میشه به :

9*10^11
حالت نوشته بشه ...
خوب حالا میرسیم به یک قسمت از بحثمون که تو حذفش کردی ...
این عددی که گفتم در صورتیه که عدد اول هیچ وقت 0 نباشه.
شارژ ایرانسل (همون عدد 12 رقمی)به احتمال قریب به یقین اینطوریه البته من خیلی خوشبینانه نگاه کردم اینجوریه که هر وقت شاژ میکنی اون عدد میتونه 2باره تبدیل به کد اعتبار بشه اما احتمالش 1 به900,000,000,000
میدونی یعنی چی؟؟؟؟؟!!!!!!!!!!!!!!!
ببین تو 1 هزارم 1 صدمم شانس نداری !!!!


ببین بیا بیخیال شو...


یه چیز دیگه من قصدی ندارما اگه از نوع حرف زدنم بدت اومد ببخشید .

RF.Ariyapoor
شنبه 05 مرداد 1387, 19:53 عصر
به نظر من هم این قسمت سوال خیلی عجیب و غیر منطقی هستش:



تمام حالت های رندوم یک عدد 12 رقمی باشد تمام حالت ها رو می خام نشون بده خوب وقتی یه عدد رندوم باشه دیگه این حرف معنی نمیده که تمام حالت های رندوم رو میخوام


خوب شما بشین از اولین عدد 12 رقمی بنویس تا آخرین عدد 12 رقمی این میشه همه حالت های ممکنش

ولی اینکه یه عدد رندوم 12 رقمی بخوایم تولید کنیم بحثش جداست

deopen
شنبه 05 مرداد 1387, 20:40 عصر
به نظر من هم این قسمت سوال خیلی عجیب و غیر منطقی هستش:



تمام حالت های رندوم یک عدد 12 رقمی باشد تمام حالت ها رو می خام نشون بده خوب وقتی یه عدد رندوم باشه دیگه این حرف معنی نمیده که تمام حالت های رندوم رو میخوام


خوب شما بشین از اولین عدد 12 رقمی بنویس تا آخرین عدد 12 رقمی این میشه همه حالت های ممکنش

ولی اینکه یه عدد رندوم 12 رقمی بخوایم تولید کنیم بحثش جداست

شدنی هست من برنامشو نوشتم اما کار بیخودیه آخه 900000000000 عدد تولید کنیم واسه چی؟!! من تو پروژه پازلم باید 20 عدد تصادفی از یک تا 20 بدون تکرار رو تولید میکردم .کلا تولید 900000000000 کار بیخود بود با این که برنامشو نوشتم ...

RF.Ariyapoor
یک شنبه 06 مرداد 1387, 12:11 عصر
خوب واسه تولید اعداد تصادفی غیر تکراری می شه یه آرایه boolean به تعداد اعدادی که میخوایم تولید کنیم بگیریم و مقدار دهی اولیش واسه همه عناصر False باشه و هر عددی که تولید شد عنصر متناضر با اون عدد رو تو آرایه True کنیم و هر وقت یه عدد تصادفی تولید کردیم تو آرایه ببنیم که این عدد تولید شده یا نه .

در ضمن deopen اگه میشه برنامه ای رو که نوشتی واسه من هم بذاری

soroush68
یک شنبه 06 مرداد 1387, 17:26 عصر
آیا تابعی هست که دو تا عدد بگیره و به صورت تصادفی عددی بین اون دو رو برگردونه؟
یا کلا تابعی که یه عدد تصادفی برگردونه؟

RF.Ariyapoor
یک شنبه 06 مرداد 1387, 19:18 عصر
تابع rand()یه عدد تصادفی تولید میکنه دقیقا نمیدونم از چند تا چند ولی یه بازه بزرگی هست که اگه مثلا شما بخوای یه عدد randome کوچکتر مساوی m رو بهمون بده باید یه این شکل عمل کنید:


rand()%m+1حالا در مورد چیزی که شما گفتید من اون طور که فکر کردم باید واسه تولید اعداد تصادفی در بازه مثلا (a,b] باید به این شکل عمل کرد:


rand()%(b-a)+aمثلا واسه تولید اعداد تصادفی بین 10 تا 20 باید به این شکل عمل کنیم:


rand()%(21-10)+10البته تابع rand() رو وقتی اجرا کردید یه عدد تصادفی به شما میده اما واسه دفعات بعدی هم که برنامه رو اجرا میکنید باز همون عدد تصادفی رو تولید میکنه واسه این که هر بار که برنامه رو اجرا میکنیم عدد جدیدی به ما بده باید از تابع srand() استفاده کنیم

++Hichkas
دوشنبه 07 مرداد 1387, 00:19 صبح
آیا تابعی هست که دو تا عدد بگیره و به صورت تصادفی عددی بین اون دو رو برگردونه؟
یا کلا تابعی که یه عدد تصادفی برگردونه؟
در ++c هست برای اینکه همیشه با زدن یک عدد ثابت یک سری اعداد به ظاهر ثابت را چاپ کند می توانی از ()rand استفاده کنی ولی این تابع ایرادی که دارد این است که :
به طور مثال : برای بار اول : 1425
چاپ می کند مثلا :1،5657،3543654
برای بار دومکه 1425 را وارد کنید همان اعداد بالا را چاپ می کند. برای جلوگیری از این اتفاق از تابع ()srand استفاده کن و در آن از عبارت( time( null استفاده کن .

soroush68
دوشنبه 07 مرداد 1387, 13:52 عصر
تابع rand() که همونطور که گفتید همیشه یک عدد رو برگردوند اما srand() اجرا نشد اگه امکان داره یه نمونه کد کوچک در موردش بذارید

soroush68
دوشنبه 07 مرداد 1387, 14:13 عصر
نمونه کد ها قاعدا باید اینها باشن:



#include <cstdlib>
#include <ctime>
#include <iostream>

using namespace std;

int main()
{
srand((unsigned)time(0));
int random_integer = rand();
cout << random_integer << endl;
}

و بین دو عدد a و b که a>b باشد هم طبق مطلبی که RF.Ariyapoor (http://barnamenevis.org/forum/member.php?u=68924) گفت اینجوری میشه:



#include <cstdlib>
#include <ctime>
#include <iostream>

using namespace std;

int main()
{
int a,b;

cout<<"Enter Max and Min: ";
cin>>a>>b;

srand((unsigned)time(0));
int random_integer = rand()%(a-b-1) +b;

cout << random_integer << endl;

system("pause");
}

++Hichkas
سه شنبه 08 مرداد 1387, 13:05 عصر
تابع rand() که همونطور که گفتید همیشه یک عدد رو برگردوند اما srand() اجرا نشد اگه امکان داره یه نمونه کد کوچک در موردش بذارید
برنامه زیر برای اعداد تصادفی :
اگر کامپایلر شما سذ فایل <ctime> را تشخیص نمی دهد ، به جای آن از سر فایل <time .h> استفاده کنید.
<include<cstdlib#
<include<ctime#
<include<iostream#
<include<time.h#//
}()int main
;(unsigned seed = time (NULL
;cout<<"seed = "<<seed<<endl
;(srand(seed
(++ for ( int i =0 ; i<8 ; i
;cout <<rand()<<endl
{

deopen
پنج شنبه 10 مرداد 1387, 14:01 عصر
خوب واسه تولید اعداد تصادفی غیر تکراری می شه یه آرایه boolean به تعداد اعدادی که میخوایم تولید کنیم بگیریم و مقدار دهی اولیش واسه همه عناصر False باشه و هر عددی که تولید شد عنصر متناضر با اون عدد رو تو آرایه True کنیم و هر وقت یه عدد تصادفی تولید کردیم تو آرایه ببنیم که این عدد تولید شده یا نه .

در ضمن deopen اگه میشه برنامه ای رو که نوشتی واسه من هم بذاری


کد برنامه تولید اعداد رندوم 12 رقمی بدون تکرار به صورتی که عدد اول صفر نباشه :



//<><><><><><><><><><><><><><><><>
// RNADOM NUMBER -_-_-_-_-_-_-_-_
// m-rand-12.cpp
// example program
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
using std::fixed;

#include<cstdlib>
using std::rand;
using std::srand;
#include<ctime>
using std::time;
int main() {
//srand(time(0));
//a9,b10,c10,d10,e10,f10,h10,i10,j10,k10,l10
srand(time(0));
double a,randi[20001];
cout<<time(0)<<" <==srand "<<9000000000000<<endl<<endl;
for(int i=1;i<=20000;i++) {
double pix=1000000000000;
rnd: randi[i]=0;
a=1+rand()%9;
for(int j=1;j<=12;j++) {
pix=pix/10;
randi[i]=randi[i]+a*pix;
a=rand()%10;
}
for (int h=1;h<i;h++) {
if (randi[i]==randi[h]) {
cout<<"THIS NUMBER IS VALID = "<<randi[i]<<endl;
goto rnd;
}
}
cout<<fixed
<<endl<<"randi#"<<i<<" = "<<randi[i]<<endl;
}
cin>>randi[1];
return 0;
}


گفته بودی از یه حلقه استفاده کن بدون آرایه ی a .
srand هم یه تغذیه واسه rand هست من آرگامون اونو تابع time با آرگامون 0 گذاشتم که عددی برمیگردونه که هر ثانیه عوض میشه این عدد تعداد ثانیه هایی هست که از سال 1970 تا الان گذشته پس همش در حال تغییره...
یه حلقم واسه چک کردن اعداد قبلی گذاشتم .
یه کمکم میخواستم برنامه من با ممیز اعشار اعداد رو نشون میده ممیز اعشار بیخودی با چند تا صفر بعد از اون...
(به خاطر fixed) اما بدون fixed به صورت نماد علمی به خروجی فرستاده میشه با showpoint هم نمیشه چی کار کنم؟!!

اگه نیاز به تصحیح داره بگو ...