View Full Version : مبتدی: محدوده تابع rand
ali-software
سه شنبه 25 مرداد 1390, 22:49 عصر
سلام.من خود این تابع رو درک کردم ولی مشکل اینجاست که نمی فهمم چه جوری اون رو جوری تنظیمش کنم که اعداد بین 0 و 10 به من بده.
خودم یک نمونه کد پیدا کردم ولی این قسمتو نفهمیدم:
iSecret = rand() % 10 + 1;
این خط دقیقا چی کار می کنه؟چه جوری باید محاسبه کرد؟
( value % 30 + 1985 )
یا مثلا همین بالایی
ممنون:تشویق::تشویق:
zidom72
سه شنبه 25 مرداد 1390, 23:05 عصر
ببین تابع rand یه عددی در یه محدوده می ده وقتی تو منویسی rand%10 در واقع باقی ماندش به 10 رو میده یعنی می شه عددی رندوم بین 0تا10 حالا +1 می کنتش 1تا 10
_hamid
سه شنبه 25 مرداد 1390, 23:06 عصر
value % x + y;
یعنی از ۰ تا x بعلاوه y.
Salar Ashgi
چهارشنبه 26 مرداد 1390, 00:14 صبح
برای تولید عدد تصادفی بین a و b
int x = a+rand()%(b-a+1)
چون باقیمانده تقسیم بر b-a+1 بین 0 تا b-a هستش ، حالا اگه a به طرفین اضافه بشه ، میشه بین a و b !
موفق باشید ./
ali-software
چهارشنبه 26 مرداد 1390, 16:40 عصر
ممنون.آیا تابع در سی وجود دارد که اعدادی بین 0 و 1 بدهد؟
quiet_programmer
چهارشنبه 26 مرداد 1390, 19: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, 22:34 عصر
آیا تابع در سی وجود دارد که اعدادی بین 0 و 1 بدهد؟
نیاز به تابع نیست ، خودتون خیلی ساده میتونید این کار رو انجام بدید ، یه نمونه کد براتون میذارم :
#include <iostream>
#include <conio>
#include <stdlib>
int main(){
srand(time(0));
double res = (double)(rand()%11)/10;
cout<<res<<endl;
getch();
}
موفق باشید ./
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.