PDA

View Full Version : سوال: تولید اعداد تصادفی مختلف



Keyhan Clever
چهارشنبه 16 اردیبهشت 1388, 21:34 عصر
از دوستان پرسیدم برای تولید عدد تصادفی بین دو مقدار چکار باید بکنم ؟
گفتند از تابع رند استفاده کنم
امتحان کردم عدد اتفاقی تولید میشه ولی همیشه تو اجرا همون عدد قبلیه.
اگه بخوایم هر دفعه با دفعه قبلی فرق کنه چکار باید بکنم ؟

Nima_NF
چهارشنبه 16 اردیبهشت 1388, 21:51 عصر
یک بار قبل از rand باید srand رامقداردهی کنید تا یک عدد تصادفی مختلف تولید شود. برای این کار معمولا از ساعت کنونی استفاده می شود (با تابع time):



#include <time.h>

srand( (unsigned)time( NULL ) );
int myRand = rand();

Salar Ashgi
چهارشنبه 16 اردیبهشت 1388, 22:04 عصر
سلام ، از دستور زير هم ميشه استفاده كرد :


srand(time(0));

موفق و پيروز باشيد !!!

masoud.ramezani
چهارشنبه 16 اردیبهشت 1388, 22:30 عصر
معمولا برای اینکه عدد تکراری نباشد تولید آن را به پارامتری منحصر به فرد مثل زمان وابسته میکنند. کد زیر رو من برای پروژه که حدود ۳ - ۴ سال پیش انجام دادم و یک کار آماری بود نوشتم. شاید به درد شما بخورد. این کد یک فایل تولید میکنه که در آن کارایی تابع srand در آن تست شده :





void RandTest()
{
char buffer[5];
FILE *fp;
int face,i;
srand(time(0));

cout<<"Insert Iteration : ";
cin>>i;
cout<<"\nPlease wait..."<<endl;

if ((fp=fopen("Random_Generator.txt","a"))==NULL)
{
cout<<"Cannot open file"<<endl;
exit(1);
}

for(int j=1;j<=i;j++)
{
int frequency1 = 0;
int frequency2 = 0;
int frequency3 = 0;
int frequency4 = 0;
int frequency5 = 0;
int frequency6 = 0;
int frequency7 = 0;
int frequency8 = 0;
int frequency9 = 0;
int frequency10= 0;


for ( int roll = 1; roll <= 10000; roll++ ) {
face = 1 + rand() % 10;


switch ( face ) {

case 1:
++frequency1;
break;

case 2:
++frequency2;
break;

case 3:
++frequency3;
break;

case 4:
++frequency4;
break;

case 5:
++frequency5;
break;

case 6:
++frequency6;
break;

case 7:
++frequency7;
break;

case 8:
++frequency8;
break;

case 9:
++frequency9;
break;

case 10:
++frequency10;
break;

default:
cout << "Program should never get here!";

}

}




fputs("\n1",fp);fputs(") ",fp);fputs(_itoa(frequency1,buffer,10),fp);fputs("\n",fp);
fputs("2",fp);fputs(") ",fp);fputs(_itoa(frequency2,buffer,10),fp);fputs("\n",fp);
fputs("3",fp);fputs(") ",fp);fputs(_itoa(frequency3,buffer,10),fp);fputs("\n",fp);
fputs("4",fp);fputs(") ",fp);fputs(_itoa(frequency4,buffer,10),fp);fputs("\n",fp);
fputs("5",fp);fputs(") ",fp);fputs(_itoa(frequency5,buffer,10),fp);fputs("\n",fp);
fputs("6",fp);fputs(") ",fp);fputs(_itoa(frequency6,buffer,10),fp);fputs("\n",fp);
fputs("7",fp);fputs(") ",fp);fputs(_itoa(frequency7,buffer,10),fp);fputs("\n",fp);
fputs("8",fp);fputs(") ",fp);fputs(_itoa(frequency8,buffer,10),fp);fputs("\n",fp);
fputs("9",fp);fputs(") ",fp);fputs(_itoa(frequency9,buffer,10),fp);fputs("\n",fp);
fputs("10",fp);fputs(") ",fp);fputs(_itoa(frequency10,buffer,10),fp);fputs("\n",fp);
cout<<"\n**********************************\n";
cout << "Face" << setw( 13 ) << "Frequency"
<< "\n 1" << setw( 13 ) << frequency1
<< "\n 2" << setw( 13 ) << frequency2
<< "\n 3" << setw( 13 ) << frequency3
<< "\n 4" << setw( 13 ) << frequency4
<< "\n 5" << setw( 13 ) << frequency5
<< "\n 6" << setw( 13 ) << frequency6
<< "\n 7" << setw( 13 ) << frequency7
<< "\n 8" << setw( 13 ) << frequency8
<< "\n 9" << setw( 13 ) << frequency9
<< "\n 10" << setw( 12 ) << frequency10 << endl;
cout<<"**********************************\n\n"<<endl;

cout<<"\n Please press Enter to continue "<<endl;
_getch();
}
cout<<"\nThe result saved on Random_Generator.txt\b\n"<<endl;
fclose(fp);
}