PDA

View Full Version : مبتدی: محدوده تابع rand



ali-software
سه شنبه 25 مرداد 1390, 21:49 عصر
سلام.من خود این تابع رو درک کردم ولی مشکل اینجاست که نمی فهمم چه جوری اون رو جوری تنظیمش کنم که اعداد بین 0 و 10 به من بده.

خودم یک نمونه کد پیدا کردم ولی این قسمتو نفهمیدم:

iSecret = rand() % 10 + 1;

این خط دقیقا چی کار می کنه؟چه جوری باید محاسبه کرد؟

( value % 30 + 1985 )
یا مثلا همین بالایی
ممنون:تشویق::تشویق:

zidom72
سه شنبه 25 مرداد 1390, 22:05 عصر
ببین تابع rand یه عددی در یه محدوده می ده وقتی تو منویسی rand%10 در واقع باقی ماندش به 10 رو میده یعنی می شه عددی رندوم بین 0تا10 حالا +1 می کنتش 1تا 10

_hamid
سه شنبه 25 مرداد 1390, 22:06 عصر
value % x + y;
یعنی از ۰ تا x بعلاوه y.

Salar Ashgi
سه شنبه 25 مرداد 1390, 23:14 عصر
برای تولید عدد تصادفی بین a و b


int x = a+rand()%(b-a+1)


چون باقیمانده تقسیم بر b-a+1 بین 0 تا b-a هستش ، حالا اگه a به طرفین اضافه بشه ، میشه بین a و b !

موفق باشید ./

ali-software
چهارشنبه 26 مرداد 1390, 15:40 عصر
ممنون.آیا تابع در سی وجود دارد که اعدادی بین 0 و 1 بدهد؟

quiet_programmer
چهارشنبه 26 مرداد 1390, 18:25 عصر
با سلام.

بهتر قبل از پرسیدن سرچ کنی.

#include <iostream>
#include <ctime>
using namespace std;

//
// Generate a random number between 0 and 1
// return a uniform number in [0,1].
double unifRand()
{
return rand() / double(RAND_MAX);
}
//
// Generate a random number in a real interval.
// param a one end point of the interval
// param b the other end of the interval
// return a inform rand numberin [a,b].
double unifRand(double a, double b)
{
return (b-a)*unifRand() + a;
}
//
// Generate a random integer between 1 and a given value.
// param n the largest value
// return a uniform random value in [1,...,n]
long unifRand(long n)
{

if (n < 0) n = -n;
if (n==0) return 0;
/* There is a slight error in that this code can produce a return value of n+1
**
** return long(unifRand()*n) + 1;
*/
//Fixed code
long guard = (long) (unifRand() * n) +1;
return (guard > n)? n : guard;
}
//
// Reset the random number generator with the system clock.
void seed()
{
srand(time(0));
}


int main()
{
seed();
for (int i = 0; i < 20; ++i)
{
cout << unifRand() << endl;
}
return 0;
}

کد از لینک: http://www.cplusplus.com/forum/beginner/7445/

Salar Ashgi
چهارشنبه 26 مرداد 1390, 21:34 عصر
آیا تابع در سی وجود دارد که اعدادی بین 0 و 1 بدهد؟


نیاز به تابع نیست ، خودتون خیلی ساده میتونید این کار رو انجام بدید ، یه نمونه کد براتون میذارم :


#include <iostream>
#include <conio>
#include <stdlib>
int main(){
srand(time(0));
double res = (double)(rand()%11)/10;
cout<<res<<endl;
getch();
}


موفق باشید ./