08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

Ancak bu kez oluşturulan program da her çalıştırıldığında yine yukarıdaki sayı zinciri elde<br />

edilir, değil mi? rand işlevinin kullanmakta olduğu önceden seçilmiş (default) tohum<br />

değeri kullanılmasa da, bu kez her defasında srand işlevine gönderilmiş olan tohum<br />

değeri kullanılır. Programı birkaç kere çalıştırıp gerçekten hep aynı sayı zincirinin üretilip<br />

üretilmediğini görün.<br />

Bazı durumlarda, programın her çalıştırılmasında aynı rastgele sayı zincirinin üretilmesi<br />

istenmez. Örneğin bir oyun programında programın çalıştırılmasıyla hep aynı sayılar<br />

üretilirse, oyun hep aynı biçimde oynanır. Programın her çalışmasında farklı bir sayı<br />

zincirinin elde edilmesi için, srand işlevinin rastgele sayı üreticisinin tohum değerini<br />

programın her çalışmasında başka bir değer yapması gerekir. Bu amaçla çoğu zaman<br />

standart time işlevi işlevinden faydalanılır.<br />

time standart bir C işlevidir, bildirimi standart bir başlık dosyası olan time.h dosyası<br />

içindedir. Parametre değişkeni gösterici olan time işlevini, ancak ileride ayrıntılı olarak ele<br />

alacağız. Şimdilik time işlevini işimizi görecek kadar inceleyeceğiz. time işlevi kendisine 0<br />

değeri gönderildiğinde, önceden belirlenmiş bir tarihten (sistemlerin çoğunda 01.01.1970<br />

tarihinden) işlevin çağrıldığı ana kadar geçen saniye sayısını geri döndürür. İşlevin geri<br />

dönüş değeri, derleyicilerin çoğunda long türden bir değerdir. İçinde rastgele sayı<br />

üretilecek programda, srand işlevine argüman olarak time işlevinin geri dönüş değeri<br />

gönderilirse, program her çalıştığında, belirli bir zaman geçmesi nedeniyle, rastgele sayı<br />

üreticisi başka bir tohum değeriyle ilkdeğerini alır. Böylece programın her<br />

çalıştırılmasında farklı sayı zinciri üretilir:<br />

srand(time(0));<br />

srand işlevine yapılan bu çağrı, derleyicilerin çoğunda standart olmayan randomize isimli<br />

bir makro olarak tanımlanmıştır:<br />

randomize();<br />

Yukarıdaki işlev çağrısı yerine bu makro da kullanılabilir. Makrolar konusu ileride ayrıntılı<br />

olarak ele alınacak.<br />

Yukarıdaki daha önce yazılan örnek programı her çalıştığında farklı sayı zinciri üretecek<br />

duruma getirelim:<br />

#include <br />

#include <br />

#include <br />

int main()<br />

{<br />

int k;<br />

srand(time(0));<br />

for (k = 0; k < 10; ++k)<br />

printf("%d ", rand());<br />

}<br />

return 0;<br />

Programlarda bazen belirli bir aralıkta rastgele sayı üretilmesi istenir. Bu amaçla kalan<br />

işleci kullanılabilir. Aşağıdaki ifadeleri inceleyin:<br />

rand() % 2<br />

Yalnızca 0 ya da 1 değerini üretir.<br />

191

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!