for (i=0;i<a;i++){ for (j=0;j<b;j++){ //srand(time(NULL)); dizi[i][j]=(rand()%11); } } printf("\n---Random %dx%d Matris---\n\n",a,b);
for (i=0;i<a;i++){ for (j=0;j<b;j++){ printf("%3.1d ",dizi[i][j]); if (j==b-1) printf("\n\n"); } }
return 0; }
yukarıdaki programda 0-10 aralığında rastgele sayı ile n*n lik matris oluşturuyorum srand fonksiyonunu ilk for döngüsünün içinde çalıştırdığımda tüm matris aynı sayıdan oluşuyor. ilk for döngüsünün bir üst satırında çalıştırınca düzgün çalışıyor.
for içinde de dışında da sanırım aynı saniye değeri tutuluyor çünkü döngüler çok hızlı bitiyor ama for içinde ve dışında farklı sonuçlar veriyor. Neden for içinde düzgün çalışmıyor ?
Bilgisayarlarda kullanılan random fonksiyonlar çoğu kez bu iş için uygun, y = f(x) şeklinde, iyi tanımlanmış, alelade matematiksel fonksiyonlardır. Dolayısıyla aynı sayıyla "seed" yapıldığı zaman "rand" fonksiyonunu çağırma sırasına göre hep aynı değerleri üretirler. Bu normal ve istenen bir durumdur.
ve dediğin gibi for döngüsü içersinde "srand" çağırdığında işlemler çok hızlı gerçekleştiği için "time(NULL)" sürekli aynı değeri döndürüyor ve dolayısıyla tüm matris dediğin gibi aynı sayıyla dolduruluyor.
Şu kodu çalıştırmanı tavsiye ederim daha iyi anlaşılacaktır:
srand (42); for (int i=0; i < 10; i++) printf ( " %d " , rand() );
printf ( "\n" );
srand (42); for (int i=0; i < 10; i++) printf ( " %d " , rand() );
printf ( "\n" );
system ( "PAUSE" );
Arkadaş doğru söylemiş, srand(time(0)) fonksiyonu 01.01.1970 tarihinden günümüze kadar geçen belirli bir süreyi sayıyor. Salise miydi saniye miydi emin değilim. Yani siz çok kısa bir süre içinde sürekli yeni seed almaya çalıştığınızda sürekli aynı zaman aralığını alacaktır. Bu yüzden srand fonksiyonu genelde kodun başında kullanılır. Zaten bir döngü içinde kullanmanız pek hissedilmese de döngü süresini uzatacaktır.