rand() komutu rastgele sayı üretmek

Başlatan Recep METE, 25 Aralık 2014, 23:37:59

Recep METE

Arkadaşlar yaptığım zar programında, #include <stdlib.h> kütüphanesi ile birlikte kullanılan rand() komutu ile  rastgele sayı ürettiriyorum. Ancak şöyle bir sıkıntı var.Programı her başlattığımda yine aynı sayıları üretiyor.Örneğin (5-1-3-6)
prog. aç kapa yine aynı sıralama (5-1-3-6). Bu olayın bir çözümü var mı acaba.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

oyaz

Böyle olması normal. Çünkü random fonksiyonu her seferinde aynı seed value yi kullanıyor. Yani şöyle bir for ile 100 kez random fonksiyonunu çağır sonra başka bir for ile 200 kez random fonksiyonu çağır. 200 kez çağırdığında bunun ilk 100 değeri ile ilk çağırdığın 100 lük for un ürettiği değer aynıdır. Random standart fonksiyonunun yapısı böyle. Bunun böyle olmasını istiyorsan seed value yi değiştirmelisin. Bunun için de başka bir standart fonksiyon var, onu araştırabilirsin.
Become a learning machine...

mir_as82

Srand(xxx), fonksiyonu ile tohum değerini değiştirebilirsiniz. Xxx ile gösterilen yere genelde time.h kütüphanesinde bulunan time fonksiyonu gibi bir fonksiyonun geri dönüş değerini verirsen, her rand fonksiyonu cagirmanda tohum değerin zamana bagimli olarak değişecektir. Bu sayede hicbir zaman ayni sayi dizisini elde edemeyecek sin.

Kabil ATICI

Arkaplanda çalışan bir saniye sayıcısı koy ve o çalışsın. Seed olarak saniye sayıcısını kullan. Kullanıcı hiçbir zaman değerin ne olacağını kestiremiyeceği için rasgele bir sayı gibi olmuş olur.
Hatta ille de saniyelik olması gerekmez.
ambar7

Burak B

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

oyaz

Alıntı YapSrand(xxx), fonksiyonu ile tohum değerini değiştirebilirsiniz. Xxx ile gösterilen yere genelde time.h kütüphanesinde bulunan time fonksiyonu gibi bir fonksiyonun geri dönüş değerini verirsen, her rand fonksiyonu cagirmanda tohum değerin zamana bagimli olarak değişecektir. Bu sayede hicbir zaman ayni sayi dizisini elde edemeyecek sin.

Hocam Necati Ergin den ders aldın mı? :)
Become a learning machine...

mir_as82


oyaz

Bende aldım da derste bu dediğinizin aynısını yapmıştık, o yüzden sordum
Become a learning machine...