PDA

View Full Version : تولید عدد



rerzaz
سه شنبه 28 مرداد 1393, 16:00 عصر
سلام دوستان

من می خوام یه تکه برنامه بنویسم که برای عدد تولید کنه مثلا از 00000 تا 99999 ولی تکراری تولید نکنه مثلا اگر از تابع random استفاده کنیم تکراری هم تولید می کنه من نمی خوام اینتوری شه می خوام مثلا از 00001 شروع منه تا 99999 تمام شه
اگه میشه راهنمایی کنیید.

parvizwpf
سه شنبه 28 مرداد 1393, 16:04 عصر
شما برای کجا اینرو نیاز دارید؟ میتونید شمارنده بذارید و آخرین مقدار رو یکجا ذخیره کنید. اما اگه با sql کار میکنید نیازی نیست دیگه میتونید آخرین مقدار رو بخونید.

meysamsh91
چهارشنبه 29 مرداد 1393, 00:45 صبح
سلام
کلاس Random فقط اعداد تصادفی تولید میکنه این که عدد تکراری باشه یا نباشه به محل و نوع ذخیره سازی شما مربوط میشه.
پس باید ابتدا محلی برای نگه داری اعداد در نظر بگیرید و سپس عدد تصادفی تولید شده را با اعداد تولید شده قبلی در محل ذخیره سازی بررسی کنید اگر عدد وجود نداشت اقدام به ذخیره عدد تولید شده فرمایید.
برای مثال می خوام 200 عدد تصادفی 3 رقمی تولید و نمایش بدم و سپس برنامه از کاربر یک دریافت کنه، اگر عدد دریافتی بین اعداد تولید شده بود کلمه Yes و در غیر اینصورت کلمه NO نمایش داده شود.

using System.Collections;



Random r = new Random();
ArrayList al = new ArrayList();
int n,number;
while (al.Count != 200)
{
n = Convert.ToInt32(r.Next(100,1000));
if (al.Contains(n) == false)
al.Add(n);
}
foreach (object obj in al)
Console.Write(obj + "\t");
number = Convert.ToInt32(Console.ReadLine());
if(al.Contains(number)==true)
Console.WriteLine("YES");
else
Console.WriteLine("NO");
Console.ReadLine();


موفق و پیروز باشید

esafb52
چهارشنبه 29 مرداد 1393, 02:15 صبح
public static int[] GetRandom(int MinValue, int MaxValue)

{

List<int> RtnList = new List<int>();

Random R = new Random();

int Cnt = 0;

while (Cnt < MaxValue - MinValue + 1)

{

int r = R.Next(MinValue , MaxValue + 1);

if (!RtnList.Contains(r))

{

RtnList.Add(r);

Cnt++;

}

}

return RtnList.ToArray();

}

rerzaz
چهارشنبه 29 مرداد 1393, 08:12 صبح
سلام
کلاس Random فقط اعداد تصادفی تولید میکنه این که عدد تکراری باشه یا نباشه به محل و نوع ذخیره سازی شما مربوط میشه.
پس باید ابتدا محلی برای نگه داری اعداد در نظر بگیرید و سپس عدد تصادفی تولید شده را با اعداد تولید شده قبلی در محل ذخیره سازی بررسی کنید اگر عدد وجود نداشت اقدام به ذخیره عدد تولید شده فرمایید.
برای مثال می خوام 200 عدد تصادفی 3 رقمی تولید و نمایش بدم و سپس برنامه از کاربر یک دریافت کنه، اگر عدد دریافتی بین اعداد تولید شده بود کلمه Yes و در غیر اینصورت کلمه NO نمایش داده شود.

using System.Collections;



Random r = new Random();
ArrayList al = new ArrayList();
int n,number;
while (al.Count != 200)
{
n = Convert.ToInt32(r.Next(100,1000));
if (al.Contains(n) == false)
al.Add(n);
}
foreach (object obj in al)
Console.Write(obj + "\t");
number = Convert.ToInt32(Console.ReadLine());
if(al.Contains(number)==true)
Console.WriteLine("YES");
else
Console.WriteLine("NO");
Console.ReadLine();


موفق و پیروز باشید

ممنون از راهنمایتون می خواستم بدون عدد رو توی کدوم متغیر می ریزه که من بتونم ازش استفاده کنم ؟

aminmousavi
چهارشنبه 29 مرداد 1393, 09:48 صبح
سلام دوست عزیز ، اگر تعداد اعدادی که میخوای رندم بدست بیاری کم هست و بازه اعدادت زیاد (تکراری کم پیش بیاد) از روش دوستان استفاده کن ، اما اگر فکر میکنی تعداد اعداد تکراری زیاد ممکنه باشه ، که هربار برای هر عدد یک بار لیست یا آرایه رو بگرده بعد متوجه شه تکراری ، بعد دوباره عدد بگیره و این عملیات رو انجام بده ، این جور روش پیمایش و گداشتن شرط بار اضافی به روی برنامه ات میاره .
میتونی کل بازه اعدادت رو توی یک آرایه یا لیست ذخیره کنی ، و به ازای هر عدد رندمی که میخوای از متد Random بخوای یک اندکس (عدد نه !) از آرایه یا لیست رو انتخاب کنه ، اون رو میریزی توی که آرایه یا لیست دیگه و اندکسی که رندم انتخاب کرده رو از لیست قبلی پاک میکنی ، با این روش هیچ وقت عدد تکراری نداری ! (باز هم این نکته رو گوشزد میکنم دوست عزیز که اگر میدونی امکان تکراری بودن زیاد هست این روش خوب عمل میکنه ! )

rerzaz
چهارشنبه 29 مرداد 1393, 16:10 عصر
ممنون از دوستان عزیز

شرمنده که از اول نگفتم که بانک اطلاعاتی وجود داره و این اعداد تصادفی قرار است برای هر رکورد از جدول تولید شود که قطعا اگر می گفتم شما جواب را می دادید خودم مشکل رو رفع کردن ادی هر رکورد رو توی کد فرا خونی کردم که برای اینکه عدد 6 رقمی باشد مثلا برای رکورد 1 که ادی کد اون 1 هست اینطوری چاپ می کنه 000001 که کاره منو راه می ندازه .

آقای امین موسوی بله تعداد رکورد ممکن است بالای 100000 رکورد باشه که تابع رندم جواب کارو نمیده .

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

فقط یه سوال وقتی من دکمه تولید بارکد رو می زنم قرار است یه بارکد 20 رقمی تولید شه که مثلا برای 100000 رکورد باید 100000 بارکد تولید شه برنامه حدود 4 تا 5 ساعت زمان می بره بارکد ها رو تولید کنه نمی شه زمان رو سریع تر کرد . لازم به ذکر است که من از یهبانک اطلاعات رو می خونم و اطلاعات همراه با فیلد بارکد رو توی یه بانک دیگه ذخیره می کنم چکار می تونم بکنم زمان سریع تر شه ؟