c de random sayı üretme

glck
12-12-2010, 15:31   |  #1  
OP Üye
Teşekkür Sayısı: 0
77 mesaj
Kayıt Tarihi:Kayıt: Oca 2009

mrb c de rakamları birbirinden farklı 4 basamklı(fakat üretilen sayı nın ilk basamağı 0 da olabilir.ve sayılar 0 ile 9 arası olacak 0 dahil.) ve her defasında birbirinden farlı üreten sayıları üreten kodlamayı nasıl yapabilirim.ben aşağıdaki gibi yaptım fakat istediğim sonucu alamıyorum.
 
 srand(time(NULL));
 for(i=0; i<4; i++){        
   sayi1 = rand()%1000;
  
   if(sayi1[0]==0){
   for(i=0; i<4; i++){       
   sayi1 = rand()%1000;
 
teşekkürler...
 

muh34
12-12-2010, 16:15   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

C programlama dili icerisindeki,rand() fonksiyonu stdlib.h kutuphanesinde bulunan bir fonksiyondur.Bu fonksiyon aksi belirtilmedigi surece int veri tipi aralıgında bir sayıyı rasgele uretmekle yukumludur.Ancak,istedigimiz bir aralıktada uretilen sayı elde edebiliriz.Ornegin bir tavla oyunu icin zar ureten bir fonksiyon yazmak istedigimizde,rand() fonksiyonuna yaptıracagımız işlem rand() % 6 + 1 olabilir.Burada rasgele uretilecek sayının once modul 6 işlemi yapılır.Bilindigi uzere bir sayının modul n işleminde ortaya cıkacak maksimum deger n-1 dir.Yukarıda da bilgisayar tarafından uretilen herhangi bir sayının modul 6 işlemi yapılırsa,ortaya ortaya 6 farklı sonuc cıkabilir.(Cunku uretilecek sayı bilinmiyor).Bu degerler 0 1 2 3 4 5 rakamlarından bir tanesi olabilir.Modul 6 işlemine maruz kalan rand() fonksiyonuna son olarak +1 eklendiginde ortaya cıkan ihtimaller 1 2 3 4 5 6 olacaktır.Sonuc olarak bir zar atıldıgında ortaya konacak butun ihtimaller hesaplanmış olur.rand() fonksiyonunu bu sekilde calıstırabiliriz.
Sizin ise 4 basamaklı bir sayı uretmeyi istiyorsunuz.O halde 4 basamaklı en kucuk sayı olan 1023 sayısını modul işleminin sagında ekleme degeri olarak kullanabiliriz.(Aynı zar ornegindeki 1 ifadesi gibi).4 basamaklı en buyuk sayı olan 9876 sayısı da uretilebilecek en buyuk sayı olacagı icin soyle bir rand() fonksiyonu olusturabiliriz.

int sayi=rand() % 8854 + 1023; Deklare edilen bu deger 1023 ile 8854 sayıları dahil olmak uzere rasgele deger uretecektir.Ancak burada bazı hassasiyetler bulunmaktadır.Ilk olarak sayı 0 ile baslamamalı ve rakamları farklı olmalıdır.Dolayısıyla bu noktaları goze aldıgımızda asagidaki gibi kod satırları yazabiliriz.

int flag=0;
while(flag==0)  {

sayi=rand() % 8854+ 1023;
dizi[0]=sayi/1000;
dizi[3]=sayi%10;
dizi[2]=(sayi%1000)/100;
dizi[1]=((sayi%1000)%100)/10;

int i=0,j;
flag=1; // simdilik true
for(i=0;i<3;i++)
for(j=i;j<3;j++)  {
if(dizi==dizi[j+1])   {
flag=0; // ayni sayi varsa simdi false oldu
break;
}

}

Başarılar

Son Düzenleme: muh34 ~ 12 Aralık 2010 20:10
glck
12-12-2010, 18:36   |  #3  
OP Üye
Teşekkür Sayısı: 0
77 mesaj
Kayıt Tarihi:Kayıt: Oca 2009

teşekkürler fakat for un içleri hatalı yazılmış .

muh34
12-12-2010, 20:11   |  #4  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Forum sayfasından kaynaklanan bir sorun meydana gelmiş.Gerekli düzeltmeler yapılmıstır.
Başarılar