Rastgele Sayı Üretimi

Bu yazımda csharpta rastgele sayı üretiminden bahsetmek istiyorum. Bazen uygulamalarımızda bizim için rastgele sayılar üretilmesini isteyebiliriz. Özellikle de oyunlarda, şans oyunlarında bu gibi uygulamalarda çok sık ihtiyaç duyduğumuz zamanlar olur. İşte rastgele sayı üretimi için kullanacağımız sınıf random sınıfıdır. Random sınıfından türetilen bir nesne için byte, int, double tipinde sayılar üretilebilir. Rastgele bir sayı oluşturabilmek için öncelikle Random sınıfından bir nesne üretilir. Aşağıdaki gibi yapabiliriz bunu:

Random RastgeleSayi = new Random();

Daha sonra bu üretilen nesneye byte, int veya double türünde sayılar atayabiliriz. Bunu da örneğin (örneklerden sadece birisi, bir çok örnek verilebilir) aşağıdaki gibi yapabiliriz:

int sayi = RastgeleSayi.Next();

Görüleceği üzere int tipinde bir değişken oluşturdum ve adını sayi verdim. Daha sonra Random sınıfından türettiğim RastgeleSayi nesnesinin Next() metodunu kullandım. Burada üretilebilecek değer aralığı 0’dan başlar +2.147.483.646 tamsayısına kadar devam eder.

Diyelim ki biz belli bir sayıya kadar olan aralıktan değer üretilsin istiyoruz. Peki o zaman ne yapmalıyız. Diyelim ki geri dönebilecek değerler 3’e kadar olsun. Bu sefer şöyle yazmalıyız.

int sayi = RastgeleSayi.Next(4);

Böyle bir yazım sonucunda geri dönebilecek değerler: 0,1,2 veya 3’tür. Yani Next metodu içinde belirtilen rakam dönebilecek sayı miktarını verir. Sırası ile bu sayılar böyle bir ifadede 0’dan başlar ve 4 adettir. Dolayısı ile en son dönebilecek rakam 3 oluyor. Peki diyelim ki bir zar oyunu yapmak istiyoruz. Ve zar üzerinde 0 yok ama 1,2,3,4,5,6 var. Nasıl bir ifade ile ben 1 ve 6 arası değerleri 1 ve 6 dahil olmak üzere geriye döndürebilirim.

int sayi = 1 + RastgeleSayi.Next( 6 );

Böyle yapabilirim. Çünkü Next ile hangi sayı üretilirse üretilsin ben o sayıya her halükarda 1 ekliyorum. Yani 0 üretilse bu değer 1 olacak, 1 üretilse 2 olacak. Dolayısı ile en büyük üretilecek sayı 5 mesela ona da 1 eklenip değer 6 olacak. Böylelikle bir zar üstündeki değerleri elde edebilirim.

Peki daha farklı bir şekilde ifade edelim. Yine zar örneğimiz bize gereken rakamlar 1,2,3,4,5,6.. Bu rakamları rastgele üreteilmek için aşağıdaki gibi bir ifade kullanmalıyız.

int sayi = RastgeleSayi.Next(1,7);

Burada da Next metodu içinde oluşturulabilecek sayıların minimum ve maksimum değerlerini verdim. Sol taraftaki argüman en düşük değer, sağdaki ise maksimum değer. Yalnız sağdaki 7 değeri asla geri dönmez. Burada en yüksek üretilebilecek değer 6’dır, buna dikkat ediniz.

Şimdi 100 tane sayı üretelim. Bu sayılar bir zar yüzeyindeki sayılar gibi olsun. Kodların açıklamalarını içinde veriyorum.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication14
{
    class Program
    {
        static void Main(string[] args)
        {
            //Rastgele sayı üretmek için kullanacağım nesneyi oluşturdum
            Random RastGeleSayi = new Random();
            //rastgele üretilen sayı değerini Sayi içine atacağım.
            int Sayi;
            //100 tana sayı üreteceğim için döngü kuruyorum
            for (int sayac = 1; sayac <= 100; sayac++)
            {
                //1 ile 7 arası sayı üret, değişkenimiz içine aktar
                Sayi = RastGeleSayi.Next(1, 7);
                Console.Write("{0} ", Sayi);
                //Burada bir if karar yapısı kurdum, eğer sayac değeri 10'a tam bölünebiliyorsa
                //bir alt satıra sayılar yazılsın diye kontrol ediyorum
                if (sayac % 10 == 0)
                {
                    Console.WriteLine();
                }
            }

            Console.ReadLine();
        }
    }
}

2013052703

Şimdi üstte yaptığımız örneği bir de şu şekilde değiştirelim. Yine 100 tane sayı üretelim, bu sefer her sayıdan kaç adet rastgele gelmiş bunu sayalım.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication14
{
    class Program
    {
        static void Main(string[] args)
        {
            //Rastgele sayı üretmek için kullanacağım nesneyi oluşturdum
            Random RastGeleSayi = new Random();
            //Hangi değerden ne kadar gelmiş bu değişkenler içinde tutacağım
            int Deger1 = 0;
            int Deger2 = 0;
            int Deger3 = 0;
            int Deger4 = 0;
            int Deger5 = 0;
            int Deger6 = 0;

            int sayi;

            //100 tana sayı üreteceğim için döngü kuruyorum
            for (int sayac = 1; sayac <= 100; sayac++)
            {
                //1 ile 7 arası sayı üret, değişkenimiz içine aktar
                sayi = RastGeleSayi.Next(1, 7);
                //gelen değeri switch ile buluyor ve ilgili değişleni arttırıyorum.
                switch (sayi)
                {
                    case 1:
                        ++Deger1;
                        break;
                    case 2:
                        ++Deger2;
                        break;
                    case 3:
                        ++Deger3;
                        break;
                    case 4:
                        ++Deger4;
                        break;
                    case 5:
                        ++Deger5;
                        break;
                    case 6:
                        ++Deger6;
                        break;
                }
            }
            //Ekrana yazdırma işlemlerim
                Console.WriteLine("Sayı:\tKaç Defa Türetildi:");
                Console.WriteLine();
                Console.WriteLine("1\t{0}\n2\t{1}\n3\t{2}\n4\t{3}\n5\t{4}\n6\t{5}",Deger1,Deger2,
                    Deger3,Deger4,Deger5,Deger6);


            Console.ReadLine();
        }
    }
}

Burada hangi değerin kaç defa üretildiğini bulmak için Switch yapısı kullandım. Gelen değer tipine karar veriliyor ve daha sonra ilgili değişken değeri arttırılıyor. Random ile döngü içerisinde üretilen her değer sayi değişkenine alınıyor. Daha sonra switch yapısında karşılaştırılıyor ve ilgili değere ati değişken arttırılıyor.

2013052801

Yazımın başlarında da belirttiğim gibi, Random ile oluşturulan nesne sonucunda, Next metodunu kullanarak rastgele sayı üretiyorum ve bunu da bir değişken içine alabiliyorum. Örneğin son örnekte görüleceği üzere;

sayi = RastGeleSayi.Next(1, 7);

diyorum. Burada üretilebilecek sayılar en küçük 1 ve 7 arasındadır. Yani aralık 1<= sayi < 7 diyebiliriz. Dolayısı ile 7 üretilmez. Burada üretilebilecek toplam değer sayısı 6 tane. Bunu da zaten yine üstte belirttiğim üzere ikinci değer ile birinci değerin farkından görebiliriz. 7-1 = 6 gibi. Next metodunu daha komplike şekilde de oluşturabiliriz. Örneğin; [csharp]int sayi = 5 + 4 * RastgeleSayi.Next( 7 );[/csharp] Şimdi RastgeleSayi(7) dedik, normalde burada üretilebilecek sayılar 0 <= sayi < 7 aralığında, yani 0,1,2,3,4,5 ve 6. Ama ben öyle bir ifade yazdım ki üretilen değerler evet bunlar ama o üretilen sayıyı önce 4 ile çarp ve sonra da 5 ile topla dedim. Yani 0,1,2,3,4,5,6 yerine sırası ile gelen değerler 5,9,13,17,21,25 ve 29 oluyor. Bu random fonskiyonu aslında, bizim ilgili fonskiyonu ürettiğimiz kendi bilgisayarımızdaki saatimizle alakalı olarak bir takım hesaplamalar yaparak rastgele sayı oluşturuyor, yani aslında burada programlamanın kesinlikle bir dayanağı var. Tabi bu arka planda bu sayıları nasıl üretiyor buna değinemeyeceğim ama bu ilginç anektodu da sizinle paylaşmak istedim. 🙂

6 Yorumlar

  1. bu ramdom sayıları atarken mesela 1- 50 arası olucak onların herseferinde farklı sayı olmasını istiyorum bu milli piyangodaki mantık gibib bişe yardım edebilirmisiniz acaba

  2. Random rastgele =new Random();
    int[] sayi=ratgele.Next(1,50);
    Console.WriteLine(sayi);
    Console.ReadLine();

    Sena bu olmalı.

  3. hocam 100 sayı örneğinde döngü kurmuşsunuz, onun yerine int sayı=(x.next(1,101) )gibi bişey desek olur mu acaba

  4. veritabanında kayıtlı 5 farklı T.C. kimlik numarasından sisteme her girişte bu 5 farklı T.C. kimlik numarasından birini otomatik olarak göstermesi için ne yapabiliriz

  5. Zeynep senin belirttiğin kısımda x değişkenini random düşünürsek, Sayi değişkeni içine en düşük değeri 1 en yüksek değeri 100 olmak koşulu ile sadece 1 sayı geri dönüşü olur

  6. Ömer Bey bu 5 kimlik numarası tablonuzda nasıl kayıtlı bilmiyorum ama şöyle örnekleyelim;

    Her bir kaydınız için aynı zamanda ID değeriniz olsun. Bu ID’ler sıralı şekilde artıyor ise o ID’leri rasgele seçer, rasgele gelen ID değerinin karşılığındaki TC numarasını yazdırırsınız.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir