PDA

Tam Sürümünü Görmek İçin : c++ rand() fonksiyonunda ilginçlik


choldax
18/01/2008, 18:26
merhaba arkadaşlar.

programımda rand()%10000+1000

komutunu kullanıyorum. verilen sayılar rassal olmasına karşın saniyeye göre artış gösteriyor. yani 4529 seçtiyse örneğin, 10 sn sonra programdan çıkıp tekrar girdiğimde 4539 seçmiş oluyor. bense 3000 sayısından sonra 9829, ondan sonra da 5673 sayısı gibi atlamaların olduğu bir fonksiyon istiyorum.

Selamlar


choldax
18/01/2008, 18:40
eğer yardımcı olacağını düşünürseniz kodu da kopyalayabilirim buraya :) çünkü artık 10000'den büyük sayıları da alıyor :D

acehreli
18/01/2008, 22:15
rand(), 0 ile RAND_MAX araliginda bir deger dOndUrur. Eger RAND_MAX ornegin 32767 ise, rand() % 10000 icin yalnizca 0, 1, 2, ve 3 degerlerini elde edersin. Istedigin bu mu?

srand'i programin basinda yalnizca bir kere ve yeterince gegisken bir kaynakla mi cagiriyorsun?

Evet, bize kod goster ama yalnizca bunlari iceren kucucuk bir program cok daha yararli olur. :)

Ali

choldax
18/01/2008, 22:59
int Game::sayitut()
{
int number;
srand(time(NULL));
number = rand()%10000+1000;

basamakayir(number);
return number;
}

acehreli
18/01/2008, 23:12
Bahsettigim hatayi goruyorum iste: srand'i program basinda yalnizca bir kere cagirman gerekiyor.

Cunku, time'in duyarligi saniye mertebesinde oldugu icin, sen sayitut'u ayni saniye penceresinde cagirdiginda hep ayni degeri alirsin.

Ben bu hatayi cok goruyorum aslinda. Onun icin bir kere daha: srand, normal olarak programin en basinda (ornegin main'e girildiginde) yalnizca bir kere cagrilmalidir.

Ali