PDA

View Full Version : اعداد تصادفی اعشاری



kamal70
جمعه 05 خرداد 1391, 12:08 عصر
سلام
چگونه می توانم اعداد تصادفی اعشاری بین دو عدد دلخواه تولید کنم؟با c++

rezaricky
جمعه 05 خرداد 1391, 15:03 عصر
این تابع یک عدد اعشارای بین دو پارامتر ورودی بر می گرداند:

float RandomFloat(float a, float b) {
float random = ((float) rand()) / (float) RAND_MAX;
float diff = b - a;
float r = random * diff;
return a + r;
}


منبع :http://stackoverflow.com/questions/5289613/c-generate-random-float-between-two-floats

nahid silver
جمعه 20 اردیبهشت 1392, 11:35 صبح
تابعی که معرفی کردید رو اجرا کردم ولی RAND_MAX رو error میگیره:افسرده:چیکارش کنم؟

darknes666
جمعه 20 اردیبهشت 1392, 16:22 عصر
اقا شرمنده هااا هرچی که stack overflow مینیویسه و جلوش یه تیک سبز میزاره درست نیست که.
بلکه منظور اینه اقا این جواب بهترین جواب هست و میشه روش کار کرد.
و در ضمن تو این قسمت stack که دوستمون ادرس داده کی یک تیکه سبز میبینه؟!!!!

darknes666
جمعه 20 اردیبهشت 1392, 17:15 عصر
دوست عزیز برای حل این سوالت من الگوریتمشو میگم.شاید خیلی هاشو بلد باشی اما اینو میزارم به حساب اینکه شاید یک نفرم این سوال رفته باشه رو مخش و اون اصلا مفاهیم اولیه رو هم ندونه.
اول:
تابع ()rand خب این یک عدد تصادفی تولید میکنه.
ولی اگر یک بار برنامه رو بنویسی دوباره اجرا کنی همون عددی رو میده بهت که قبلا داده

ولی ما میایم از تابع ()srand استفاده میکنیم این یک وروودی میگیری و بر اساس اون کاری میکنه که تابع ()rand یک مقدار تصادفی بده مقدار ()srand رو میتونی دستی بدی اما ما میخواییم اتوماتییک باشه پس از ساعت ویندوز استفاده میکنیم و ورودی اونو time 0 میکنیم.

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

راهی که برای اين تبديل وجود داره استفاده از باقيمانده صحيح می هست، همونطور که میدونین باقيمانده صحيح تقسيم هر عددی بر 6 يکی از اعداد 0 تا 5 هست. پس با اضافه کردن 1 واحد به باقيمانده ، عددی بين 1 تا 6 خواهيم داشت.میتونین اعداد رو عوض کنین.

حالا میتونی اونم دستکاری کنی.

در اخر بیا یک مقدار تصادفی سه رقمی یا هر چند رقمی درست کن تقسیم بر 1000 کن.
یک مقدار تصادفی بین هرچند که دوست داری مثلا 1 تا 100 درست کن.
در اخر اون دوتا رو با هم جمع کن.

اینم برنامه ای که خودم نوشتم.


#include<stdlib.h>
#include<time.h>
#include<iostream>
using namespace std;
float rand_float();
int rand_int();
float final_rand();
int main()

{
cout<<final_rand()<<endl;
return 0;
}


float rand_float()
{
float q,r;
srand(time(0));
q=(rand()%532)+473;
r=q/1000;;
return r;
}

int rand_int()
{
int p;
srand(time(0));
p=(rand()%70)+1;
return p;
}

float final_rand()
{
float w;
w=rand_float()+rand_int();
return w;
}

UfnCod3r
جمعه 20 اردیبهشت 1392, 18:24 عصر
تابعی که معرفی کردید رو اجرا کردم ولی RAND_MAX رو error میگیره:افسرده:چیکارش کنم؟

stdlib.h
رو اینکلود کن



اقا شرمنده هااا هرچی که stack overflow مینیویسه و جلوش یه تیک سبز میزاره درست نیست که.
بلکه منظور اینه اقا این جواب بهترین جواب هست و میشه روش کار کرد.
و در ضمن تو این قسمت stack که دوستمون ادرس داده کی یک تیکه سبز میبینه؟!!!!

تو فکر کردی حتما باید تیک سبز داشته باشه
کدش درسته و مشکلی نیست

darknes666
جمعه 20 اردیبهشت 1392, 19:05 عصر
بله باید داشته باشه.اگر داشت کار میکرد.