PDA

View Full Version : چاپ نکردن عدد رندم



fshb_ 1370
جمعه 11 دی 1388, 11:31 صبح
سلام
من یه برنامه نوشتم که فقط اعداد 6و10و14و18و22 رو به صورت رندم چاپ کنه، ولی بعضی وقتا که برنامه رو اجرا میکنم برنامه هیچ عددی رو چاپ نمیکنه، دلیلش چیه؟؟؟:متفکر:

اینم کد برنامه:

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void prandom(void);
int main()
{
prandom();
int q;
cin>>q;
}
void prandom()
{
int x;
srand(time(0));
do{
x=rand()%23;
if ((x%2)==0&&(x%4)!=0&&x>5)
cout<<x;
}while((x%2)!=0&&(x%4)==0&&x<5);
}

Salar Ashgi
جمعه 11 دی 1388, 11:56 صبح
اولا بهتره که تابع srand داخل تابع main فراخوانی بشه ، چون اگه داخل خود تابع فراخوانی کنیم ، ممکنه

هر بار اعداد یکسانی تولید بشن .

ثانیا حلقه while شما یک حلقه زیاد درستی نیست ، چون شرط حلقه رو خیلی شلوغ کردین ...

برای این موردی که شما ذکر کردین ، میشه کد زیر رو نوشت :



#include <iostream>
#include <conio>
#include <stdlib>
int my_random_num(){
int a[] = {6,10,14,18,22};
int x = rand()%5;
return a[x];
}
//============================
int main(){
srand(time(0));
cout<<my_random_num()<<endl;
getch();
}



موفق باشید .

fshb_ 1370
جمعه 11 دی 1388, 12:54 عصر
ممنون از جوابتون، ولی هنوز من به قسمت آرایه های کتاب نرسیدم، جور دیگه نمیشه شرط داخل while رو ساده تر کرد؟
یعنی میتونه دلیل اینکه گاهی اوقات هیچ عددی چاپ نمیشه این باشه که تابع srand در داخل تابع main فراخوانی نشده؟
اگه دلیلش این نیست پس دلیلش چیه؟

clover
جمعه 11 دی 1388, 13:41 عصر
جور دیگه نمیشه شرط داخل while رو ساده تر کرد؟
در این مورد با توجه به الگوی اعداد به این شکل می توان عمل کرد:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>

using namespace std;

int makeRandom();
int main()
{
srand(static_cast <int>(time(0)));

for (int i = 0; i < 20; i++)
cout << makeRandom() << endl;

_getch();
return 0;
}
int makeRandom()
{
int randNum = (rand() % 5 + 1) * 4 + 2;
return randNum;
}


اگه دلیلش این نیست پس دلیلش چیه؟
عبارات شرطی که استفاده کرده اید حالت هایی زیادی را به وجود می آورند که نیاز به بررسی دارند، با این حال من فکر می کنم عبارات شرطی شما مشکل دارند.

fshb_ 1370
جمعه 11 دی 1388, 17:22 عصر
ممنون
تابع ranNum تون خیلی کمکم کرد:تشویق: