# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > C#‎‎ > سوال: تولید اعداد تصادفی در سی شارپ

## SalmanAdl

با سلام خدمت شما عزیزان گل گلاب،اگه بخوام یک  عدد بین 1 تا 10 تولید کنم(به طور تصادفی)از چه دستوری باید استفاه کنم خیلی ممنون :اشتباه:

----------


## mohammad272005

اين خدمت دوست عزيز:
Random random = newRandom();
for (int i = 0; i < 100; i++)
Console.WriteLine(random.Next(1, 10));
Console.ReadKey();

----------


## agtabesh

Random r=new Random();
Console.WriteLine(r.Next() % 10);

----------


## ramin_ramin

خوب دوست من اگر بخواهم اعداد تصادفی را با این شرط که تکراری نباشند را استفاده کنم چه کاری باید بکنم

----------


## sinpin

> خوب دوست من اگر بخواهم اعداد تصادفی را با این شرط که تکراری نباشند را استفاده کنم چه کاری باید بکنم


ميتونيد يك ليست n خونه اي داشته باشيد و فرآيند ايجاد يك عدد اتفاقي رو در يك حلقه انجام دهيد.
به اين شكل كه شرط حلقه اين است كه "ماداميكه عدد توليد شده درون ليست وجود دارد يك عدد ديگر توليد كن" در غير اينصورت عدد ساخته شده را به ليست اضافه ميكنيد و اين عمل رو n بار انجام ميديد...

----------


## علیرضا مداح

سلام دوست عزیز ،
همچنین میتوانید از کلاس System.Security.Cryptography.RNGCryptoServiceProvider که از کلاس 
System.Security.Cryptography.RandomNumberGenerator به ارث برده شده و اعداد رندوم واقعی تولید میکند استفاده نمایید :

            byte[] randomNumber = new byte[1];
            System.Security.Cryptography.RNGCryptoServiceProvi  der.Create().GetBytes(randomNumber);
            MessageBox.Show("Random Number : " + randomNumber[0].ToString());

----------


## Parham.D

توي VB اين كد وجود داره كه اگر بشه به C#‎ تبديل كنيد، اعداد تصادفي غير تكراري مي‏سازه.



Randomize () 

Label1.Text = CStr(Int(Rnd() * 10


خط اول تابع است.

----------


## ASKaffash

> خوب دوست من اگر بخواهم اعداد تصادفی را با این شرط که تکراری نباشند را استفاده کنم چه کاری باید بکنم


سلام
این متد ک برایت نوشتم یک آرایه ای تصادفی از اعداد غیر تکراری ایجاد میکند که در یک محدوده عددی مورد نظر ایجاد میگردد:(GetRandomIndex)

///<summary>
/// ایجاد شاخص تصادفی برای یک محدوده
///</summary>
///<param name="MinValue"></param>
///<param name="MaxValue"></param>
///<returns></returns>
publicstaticint[] GetRandomIndex(int MinValue, int MaxValue)
{
List<int> RtnList = newList<int>();
Random R = newRandom();
int Cnt = 0;
while (Cnt < MaxValue - MinValue + 1)
{
int r = R.Next(MinValue - 1, MaxValue + 1);
if (BetWeen(r, MinValue, MaxValue) && !RtnList.Contains(r))
{
RtnList.Add(r);
Cnt++;
}
}
return RtnList.ToArray();
}


publicstaticbool BetWeen(object MainValue, object Value1, object Value2)
{
decimal TmpMainValue = Convert.ToDecimal(MainValue);
decimal TmpValue1 = Convert.ToDecimal(Value1);
decimal TmpValue2 = Convert.ToDecimal(Value2);
return (TmpValue1 <= TmpMainValue && TmpMainValue <= TmpValue2);
}

----------


## p30ware

حالا اگه بخوایم تو محیط کنسول  یک console.readline بزاریم و dیک عددی از کاربر بگیره  . 
اگر اون عددی که کاربر وارد کرد توی اعداد تصادفی که تولید کردیم بود yes چاپ بشه و اگه نبود No چاب بشه چیکار باید کرد  من هرکاری کردم نشد

----------


## amir-yeketaz

> حالا اگه بخوایم تو محیط کنسول  یک console.readline بزاریم و dیک عددی از کاربر بگیره  . 
> اگر اون عددی که کاربر وارد کرد توی اعداد تصادفی که تولید کردیم بود yes چاپ بشه و اگه نبود No چاب بشه چیکار باید کرد  من هرکاری کردم نشد


به نظرم همون كاري كه استاد sinpin گفتن بكنيد براتون بهتره ... چون انعطاف پذيري بيشتري داره 
يعني اگه اعداد تصادفي رو تو يه ليست يا آرايه بريزيد براحتي ميتونيد تو اون چك كنيد كه برابري با اون عدد ديگه(d) وجود داره يا نه ... 
البته نظر من بين اين همه استاد شايد زياد مهم نباشه چون من خودمم مبتديم ولي خوب كنجكاوي...

موفق باشيد

----------


## p30ware

آخه من اون رو خوب متوجه نشدم .. اگه لطف کنید ساده همون روشی که تو پستم نوشتم بگید ممنون میشم

----------


## alimooghashang

میشه بگید چطوری میشه دو عدد تصادفی غیر تکراری بین -1 و 1 ساخت؟
یعنی اگه 0 بود بعدی یا 1 باشه یا -1

----------


## amir-yeketaz

> میشه بگید چطوری میشه دو عدد تصادفی غیر تکراری بین -1 و 1 ساخت؟
> یعنی اگه 0 بود بعدی یا 1 باشه یا -1


قبلا هم گفتم ... میتونید اعداد تولید شده توسط تابع Random.Next رو بریزین تویه یه آرایه و هر کاری که دلتون میخواد باهاش بکنید ...
خوب این برای سوال شما :
Random r = new Random();
        int[] sel = new int[3];
        while (true)
        {
            for (int i = 0; i < 3; i++)
            {
                sel[i] = r.Next(-1, 2);
            }
            if (sel[0] != sel[1] && sel[1] != sel[2] && sel[0] != sel[2]) 
                break;
 
        }
        for (int i = 0; i < 2; i++)
        {
            Console.WriteLine(sel[i]);
            
        }

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

----------


## alimooghashang

مرسی
حالا سخت ترش میکنیم
ببینید 
دوتا عددی که تولید میشه 
حتما باید یکیش 0 باشه
و اون یکی یا 1 هست یا -1

:D

یعنی یکی از این حالت ها

0 1
0 -1
-1 0
1 0

----------


## amir-yeketaz

> مرسی
> حالا سخت ترش میکنیم
> ببینید 
> دوتا عددی که تولید میشه 
> حتما باید یکیش 0 باشه
> و اون یکی یا 1 هست یا -1
> 
> :D
> 
> ...


خیلی سادست فقط یه شرط داخل شرط اصلی اضافه میکنیم و میگیم اگه خونه ی اول آرایه یا خونه ی دوم آرایه صفر بود حلقه شکسته بشه ... دلیل اصلی این که من از آرایه استفاده کردم بخاطره همین سوالا بود که الان شما بهش اضافه کردین  :لبخند گشاده!: 
اینم کدش : 
        Random r = new Random();
        int[] sel = new int[3];
        while (true)
        {
            for (int i = 0; i < 3; i++)
            {
                sel[i] = r.Next(-1, 2);
            }
            if (sel[0] != sel[1] && sel[1] != sel[2] && sel[0] != sel[2])
            {
                if (sel[0] == 0 || sel[1] == 0) break;
            }
 
        }
        for (int i = 0; i < 2; i++)
        {
            Console.WriteLine(sel[i]);
            
        
بازم سوالی دارین اگه بتونم و در حدم باشه جواب میدم ... 
موفق باشید

----------


## alimooghashang

فکر کنم منظورم رو نگرفین
من از این سه عدد فقط دوتاشو نیاز دارم
و حتما باید یکی از این دو عدد یک باشه!
عدد رندوم بعدی یا باید 1 باشه یا -1
طبق اون حالت هایی که گفتم!

----------


## amir-yeketaz

> فکر کنم منظورم رو نگرفین
> من از این سه عدد فقط دوتاشو نیاز دارم
> و حتما باید یکی از این دو عدد یک باشه!
> عدد رندوم بعدی یا باید 1 باشه یا -1
> طبق اون حالت هایی که گفتم!


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



> دوتا عددی که تولید میشه 
> حتما باید یکیش 0 باشه
> و اون یکی یا 1 هست یا -1


یه بار گفتین صفر باشه حتمت و بعدش گفتین حتما یک باشه ... واقعا نمیدونم یا من نمیفهمم یا سرکارم(ببخشید که رک گفتم!)
اگه بیشتر توضیح بدین ممنون میشم ...

----------


## alimooghashang

ببخشید مشکل از منه!

ببینید
من دو تا عدد راندوم میخوام

که یکیش حتما 0 هست
و دومیش یا 1 یا -1

----------


## amir-yeketaz

> ببخشید مشکل از منه!
> 
> ببینید
> من دو تا عدد راندوم میخوام
> 
> که یکیش حتما 0 هست
> و دومیش یا 1 یا -1


ببینید تو اون کد دومی که من نوشتم خونه اول آرایه یا خونه ی دوم آرایه عدد صفره و اون یکی هم یا 1 هست یا منفی یک !!!! 
برنامه ی کاملشو(با توضیحات) میذارم ببینید ... فکر میکنم مشکلی نداره 

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

----------


## rezaitman

من میخوام از بین 144 دکمه 32 تای اونارو به طور رندمی انتخاب کنم و بگم اگر در هنگام اجرای برنامه دکمه ی کلیک شده جزو دکمه های رندم شده بود یکسری دستورات را انجام بده.حالا من چه کدی را در سی شارپ به کار ببرم؟میشه کمکم کنید؟

----------


## only45

سلام
من میخام با هربار اجرا شدن برنامم داخل text1یک کد قرار بگیره؟؟؟؟
دقیق بگید کجا چه کدی بنویسم
مرسییی

----------


## مهرداد صفا

> من میخوام از بین 144 دکمه 32 تای اونارو به طور رندمی انتخاب کنم و بگم اگر در هنگام اجرای برنامه دکمه ی کلیک شده جزو دکمه های رندم شده بود یکسری دستورات را انجام بده.حالا من چه کدی را در سی شارپ به کار ببرم؟میشه کمکم کنید؟


سلام

//in the name of god 
//صل الله علی محمد و آله 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        List<Button> Buttons=new List<Button>();
        public Form1()
        {
            InitializeComponent();
            for (int i = 1; i <= 134; i++)
            {
                Button NewButton = new Button();
                NewButton.Click += new EventHandler(ButtonClicked);
                NewButton.Name = "button" + i.ToString();
                NewButton.Text = NewButton.Name;
                //...
                this.Controls.Add(NewButton);
            }//next i
            var AllButtons=(from button in this.Controls.Cast<Control>() where button is Button select button).ToArray();
            for (int j = 1; j <= 32; j++)
            {
                int RandomIndex = new Random().Next(0, 134);
                while(Buttons.Contains(AllButtons[RandomIndex]))
                {
                    RandomIndex=new Random().Next(1,135);
                }//end while
                Buttons.Add((Button)AllButtons[RandomIndex]);
            }//next j

                
            
                }
        void ButtonClicked(object sender, EventArgs e)
        {
            if(Buttons.Contains((sender as Button)))
            {
                //button that has clicked is from random buttons
                MessageBox.Show("random button clicked");
                //...
            }//end if 
        }//end ButtonClicked
    }               
       }

----------


## jblaox

> سلام دوست عزیز ،
> همچنین میتوانید از کلاس System.Security.Cryptography.RNGCryptoServiceProvider که از کلاس 
> System.Security.Cryptography.RandomNumberGenerator به ارث برده شده و اعداد رندوم واقعی تولید میکند استفاده نمایید :
> 
>             byte[] randomNumber = new byte[1];
>             System.Security.Cryptography.RNGCryptoServiceProvi  der.Create().GetBytes(randomNumber);
>             MessageBox.Show("Random Number : " + randomNumber[0].ToString());


سلام به نظرم جالبتر از متد new Random() است اما آیا میشود این متد بدون ایجاد شرط حلقه و ... بگونه مجبور کرد که در بازه ای خاص عدد تصادفی تولید کند ، مثلا بین 0 تا 10 ؟؟

با تشکر از راهنمایی شما

----------


## katauri

سلام

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

----------


## mahyaabr

سلام من برای  یه قسمت از پروژم برنامه ای با زبان سی شارپ می خوام که هر دفعه یه عدد تصادفی بین 1 و 60 بهم بده ، کسی می تونه کمکم کنه ؟
و می خوام اینو بهش اضافه کنم ..

----------


## pars1376

> سلام من برای  یه قسمت از پروژم برنامه ای با زبان سی شارپ می خوام که هر دفعه یه عدد تصادفی بین 1 و 60 بهم بده ، کسی می تونه کمکم کنه ؟
> و می خوام اینو بهش اضافه کنم ..



            Random Rnd = new Random();
            Console.WriteLine(Rnd.Next(1, 61));



البته اگه از لیبل یا تکست باکس استفاده میکنین فک کنم اول باید به string تبدیل بشه

----------


## fereshte_b

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

----------


## rahnema1

> اگه بخواهیم که این اعداد تصادفی تکراری نباشه چی!!   ارسال 15 فکر کنم خوبه اما اون مال سه تا عدده
> من محدوده اعداد 5 رقمیو میخام


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

HashSet<int> GenerateRand(int count,int start,int end){
	HashSet<int> randomSet= new HashSet<int>();
	Random rnd = new Random();
	int aRandomNumber;
	while (randomSet.Count<count) {
		if (!randomSet.Contains(aRandomNumber=rnd.Next(start,  end))) {
			randomSet.Add(aRandomNumber);
		}
	}
	return randomSet;
}

مثلا گه بخواهید بین 0 تا 99999 بیایید 10 تا عدد انتخاب کنید بدون تکرار این طوره:

HashSet<int> myset = GenerateRand(10,0,1000000);

----------


## ebeyyari

سلام دوستان
می خواستم برنامه پرتاب دو تاس و نتایج پرتاب رو بنویسیم نمی دونم از کجا شروع کنم (البته در محیط کنسول و به زبان سی شارپ)

----------


## alibaqdadloo

سلام دوست عزیز 
هر بار که 1 رو از روی کیبرد بزنی دوتا تاس میندازه 
اگه هر چیزی بجز 1 بزنی از برنامه خارج میشه 

Untitled.jpg

----------


## Helmod

سلام

ببخشید یه سوال دارم، میشه کد ساده ای نوشت که به کد زیر بگه : اعداد 11 رقمی تولید کن؟ 

      private void button1_Click(object sender, EventArgs e)
        {
            Random RandomCode = new Random();
            
            int rnd = RandomCode.Next(1,100);

            textBox1.Text = rnd.ToString();

        }


در حقیقت میخواییم کدی که بین 1 الی 99 تولید میشه 11 رقمی باشه

----------

