PDA

View Full Version : تولید اعداد تصادفی غیر تکراری در بازه مورد نظر



hojjatcroos
سه شنبه 27 مرداد 1388, 09:09 صبح
سلام دوستان میشه توضیح بدین چه طور می تونم یک برنامه مانند برنامه زیر بنویسم اگه سورسی داشته باشید ممنون میشم.

اصغر (پآچ)
سه شنبه 27 مرداد 1388, 11:53 صبح
سلام

شما میتونی با استفاده از دستور های Random و Randomaize این برنامه رو بنویسی!

برای چک کردن تکراری بودن هم باید عدد بدست آمده از این توابع رو در یک درخت دودویی قرار بدی!

موفق و موید باشی

hojjatcroos
سه شنبه 27 مرداد 1388, 14:48 عصر
خیلی ممنون از توجه شما-کسی همچین سورسی داره یا نه که بتونه به من کمک کنه؟

اصغر (پآچ)
سه شنبه 27 مرداد 1388, 23:59 عصر
سلام دوست من

توی اون فایل هایی که به همراه فایل اجرایی برنامه مورد نظرت آپلود کردی یه فایل هست که پسوند اون BAS. است، اون رو با NotePad باز کن سورس همون برنامه به زبان VB (بیسیک) است. خیلی ساده و راحت می تونی به زبان دلفی تبدیلش کنی!

بازم اگه خواستی بگو برات اینکار رو میکنم.

موفق و موید باشی

hojjatcroos
چهارشنبه 28 مرداد 1388, 07:12 صبح
اگه این کار رو بکنید خیلی ممنون میشم با تکشر از شما

hojjatcroos
پنج شنبه 29 مرداد 1388, 10:27 صبح
واقعا کسی نمی تونه به ما کمک کنه؟

عقاب سیاه
پنج شنبه 29 مرداد 1388, 15:12 عصر
شاید این بتونه کمکت بکنه اگه نفهمیدی چی به چی بگو تا توضیخ بدم.
البته یکم کارش پیچیده تره و باید یک سری تغییرات روش انجام بدی مثالا به همراه اعداد حروف راهم مخلوط می کنه و این برنامه تقریبا یک بچه قفل ساده است از دکمه Craet Pass و محتویاتش در برنامه استفاده کن .
موفق باشی!

hojjatcroos
پنج شنبه 29 مرداد 1388, 16:20 عصر
سلام خیلی ممنون
ولی لین ربطی به کار من نداشت ببین دوست عزیز من یک بازی دارم درست می کنم که توش 55 مهره باید به صورت اتفاقی به صورت عددی مقدار دهی بشن-شماره ها از 1 تا 55 هست یعنی اعداد 1 تا 55 باید به صورت تصادفی به یک لیست باکس اضافه بشن و تکراری هم نباشن و همه شماره ها هم موجود باشه درست مثل مثال

hadisalahi2
پنج شنبه 29 مرداد 1388, 16:46 عصر
سلام دوست عزیز. این تکه کد رو از برنامه های C که نوشتنم برات پیدا کردم. با عرض شرمندگی وقت تبدیل به دلفی رو ندارم ولی منطق کار یکیه. باید تولید اعداد رو تا زمانی ادامه بدی که همه اعداد انتخاب شده باشند. برای این کار هم میتونی از یک شمارنده استفاده کنی و هر سری که یک عدد تصادفی جدید تولید شده مقدار شمارنده رو یکی اضافه کنی تا 55 تا بشه. البته برای حلقه هم باید از While استفاده کنی.
این تکه کد ، اعداد تصادفی رو بین 1 تا 15 برای یک پازل 4*4 تولید میکنه.



void rnd(void)
{
int y,z,test,x,i,j;
i=0;j=0;
randomize();
while (i<4)
{
j=0;
while (j<4)
{
x=random(16);
test=0;
for (z=0;z<4;z++)
for(y=0;y<=4;y++) if (x==number[z][y]) test=1;
if (test==0)
{
number[i][j]=x;
j++;
if(i==3 && j==3) break;
}
}
if(i==3 && j==3) break;
i++;
}
}

hojjatcroos
پنج شنبه 29 مرداد 1388, 18:03 عصر
سلام خیلی ممنون فقط با دستور زیر مشکل دارم اگه دوستان راهنمایی کنند خیلی ممنون میشم.


x==number[z][y]

tdkhakpur
پنج شنبه 29 مرداد 1388, 18:52 عصر
کد زیر را ببرید داخل کد برنامتون


var
numbers : array [1..55]of integer;

procedure RandNumbers;
var
stat : Boolean;
count : integer;
i,NewNum: integer;
begin
count := 0;
while count<55 do
begin
NewNum := random(55);
stat := false;
for i:=0 to count do
if numbers[i]= NewNum then
begin
stat := true;
break;
end;
if not stat then
begin
numbers[count] := NewNum;
count := count + 1;
end;
end;
end;

نتیجه در آرایه numbers قرار میگیرد

vcldeveloper
پنج شنبه 29 مرداد 1388, 19:11 عصر
بستگی داره هدف از استفاده از اون اعداد تصادفی چی باشه؛ اگر هدف کارهای معمولی باشه، همین توابع Random و Randomize کفایت می کنند. اما اگر هدف کارهای امنیتی مثل استفاده از اعداد تصادفی در رمزنگاری باشه، باید از روش های مطمئن تری استفاده کرد، مثل توابع تولید اعداد تصادفی در CryptoAPI ویندوز.

hojjatcroos
جمعه 30 مرداد 1388, 09:19 صبح
سلام-خیلی ممنون از دوستان- این اعدادش تصادفی هستند ولی تکراری-هر بار که برنامه اجرا میشه اعداد مانند اعدا قبلی اضافه میشند-به همون ترتیب

hadisalahi2
جمعه 30 مرداد 1388, 12:04 عصر
دوست عزیز این یک برنامه نمونه بود . این خط می یاد و مقادیر داخل آرایه ای که اعداد داخل اون قرار میگیرند رو چک میکنه تا ببینه عدد تصادفی تولید شده جدید قبلا تولید شده یا نه؟
چون برنامه من پازل بود یک آرایه دو بعدی استفاده کردم ولی شما اگه فقط 55 تا عدد تصادفی لازم داری میتونی از یک آرایه یک بعدی استفاده کنی که خیلی ساده تره.
اون X هم متغیره ای که به صورت موقت مقدار عدد خانه آرایه رو داخل خودش نگه میداره.
باز هم اگه مشکل داستی بگو تا توضیح بیشتر بدم
یا حق

اصغر (پآچ)
جمعه 30 مرداد 1388, 14:38 عصر
سلام دوست من

این همون کدیه که میخوای! خیلی راحت میشد از روی همو فایل Bas. تولیدش کرد اما چون وقتم کم بود روی مرتب سازی اعداد تولید شده کار نکردم خودت مرتبش کن.

تو قسمت کتابخانه فایلها -> مثالهای دلفی آپلود شده است.

موفق و موید باشی

vcldeveloper
جمعه 30 مرداد 1388, 14:43 عصر
این اعدادش تصادفی هستند ولی تکراری-هر بار که برنامه اجرا میشه اعداد مانند اعدا قبلی اضافه میشند-به همون ترتیب
برای اینکه در این کدها از Randomize استفاده نشده. اگر میخواید مقادیر تصادفی در هر بار اجرا متغیر باشند، باید در هر بار اجرا حداقل یک بار روتین Randomize فراخوانی بشه.

hojjatcroos
شنبه 31 مرداد 1388, 18:34 عصر
دوستان عزیز سلام به کمک شما تونستم بازی زیر رو طراحی کنم که باید اعدا رو از 0تا 54 مرتب کنیم حالا زمانی که مهره ها به ترتیب(افقی) از 0 تا 54 مرتب می شوند چه طور متوجه بشم خیلی ممنون

لینک دانلود بازی و سورس (http://rapidshare.com/files/270209849/My_Game.rar.html)