PDA

View Full Version : تولید عدد تصادفی غیر تکراری این بار در C



farnooshhp
جمعه 19 آذر 1389, 12:57 عصر
سلام دوستان
باز هم همون مشکل تولید اعداد تصادفی غیر تکراری رو دارم اما هر چی تو این تالار سرچ کردم کدهای C++ رو دیدم و تابع srand(time(0)) ولی نه این تابع و نه تابع randomize مشکل من رو حل نکردن
صورت مسئله : برنامه ای که حروف الفبای A تا Z رو اینقدر به صورت تصادفی روی صفحه نمایش چاپ میکنه تا کل صفحه پر بشه. کدی که نوشتم اینه :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <time.h>

void main()
{
int x,y,i,c,color;
srand((unsigned)time(0));
char alphabet[26] = {'A','B','C','D','E','F','G','H','I','J','K','L',' M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z '};
randomize();
clrscr();
while(c<=2000)
{
for(i=0;i<=25;i++)
{
color=rand()%14+1;
x=rand() % 80;
y=rand() % 25;
gotoxy(x,y);
textcolor(color);
putch(alphabet[i]);
c++;
delay(10);
}
}

getch();

}

این کد کار میکنه ولی از اونجایی که اعداد تصادفی که تولید میشه گاهی تکراری هستند در نتیجه کل صفحه پر نمیشه! میتونید کد رو اجرا کرده و نتیجه رو ببینید
لطفا به من کمک کنید

هم دانشگاهی
جمعه 19 آذر 1389, 15:54 عصر
سلام دوست عزیز!

من کد شما رو بررسی کردم! کاملا درست بود! اگه تمام صفحه هم پر نشه طبیعی هستش!

چون نوع انتخاب تصادفی هست احتمال داره یک نقطه چند بار انتخاب بشه! :لبخند:


:قهقهه:


حالا برای جلوگیری از این اتفاق میتونید یک آرایه دو بعدی تعریف کنید و در اون هر نقطه ای که انتخاب میشه رو یک بزارین تا سری بعد اون نقطه انتخاب نشه!


به همین سادگی!:لبخندساده:



#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int x,y,i,c=1,color;
int test[81][26]={0};
char alphabet[26] = {'A','B','C','D','E','F','G','H','I','J','K','L',' M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z '};
srand(time(0));
while(c<=2000)
{
i=rand()%26;
while(1){
x=rand()%80;
y=rand()%25;
if(test[x][y]==1) continue;
else { test[x][y]=1; break;} }
gotoxy(x,y);
putch(alphabet[i]);
c++;
Sleep(10);
}
getch();
return 0;
}


موفق باشید

farnooshhp
جمعه 19 آذر 1389, 17:46 عصر
ممنون هم دانشگاهی عزیز
من فکر کردم شاید راه بهتری جز این وجود داشته باشه!
و نکته بعدی اینکه استاد ما گفته رندوم ها رو هدر ندید! یعنی اینطوری نباشه که رندوم بزنیم و چک کنیم تو اون نقطه کاراکتری هست یا نه و اینقدر رندوم رو تکرار کنیم که یک نقطه خالی پیدا کنیم.
پس حتما یک راهی وجود داره که همچین چیزی از ما خواسته درسته؟

هم دانشگاهی
جمعه 19 آذر 1389, 19:28 عصر
آره حالا که میگید یک راه حلی به ذهنم رسید! :متفکر:

فرض کنیم یک سری از اعداد داریم که روی یک خط راست قرار دارند !

12و3و-1و9و-5و6و11و13

بعد به حالت تصادفی یک عدد رو انتخاب میکنیم ! مثلا 7

حالا در سری بعد عدد 7 از مجموعه ما حذف میشه و ما از بین اعداد دیگه انتخاب میکنیم!
همین طور تا آخر تا همه اعداد تمام شوند!

البته این فقط الگوریتمشه! :متفکر:

:کف:

farnooshhp
شنبه 20 آذر 1389, 00:34 صبح
منظورت اینه که با آرایه پیاده سازیش کنیم؟

hamid_shrk
دوشنبه 21 آذر 1390, 09:37 صبح
منظورت اینه که با آرایه پیاده سازیش کنیم؟
سلام ، واسه من پیام خصوصی گذاشتید اما جلوی دریافت پیام خصوصی خودتون رو بستید ، باز کنید تا بتونم جوابتون رو بدم.