08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

srand İşlevi<br />

Oluşturulan program her çalıştırıldığında neden hep aynı sayı zinciri elde ediliyor? rand<br />

işlevi rastgele sayı üretmek için bir algoritma kullanıyor. Bu algoritma derleyiciden<br />

derleyiciye değişse de, rastgele sayı üretiminde kullanılan ana tema aynıdır. Bir başlangıç<br />

değeri ile işe başlanır. Buna tohum değeri (seed value) denir. Bu değer üzerinde bazı<br />

işlemler yapılarak rastgele bir sayı elde edilir. Tohum değer üzerinde yapılan işlem bu kez<br />

elde edilen rastgele sayı üzerinde yinelenir.<br />

rand işlevi çağrılarını içeren bir program her çalıştırıldığında aynı tohum değerinden<br />

başlanacağı için aynı sayı zinciri elde edilir.<br />

Bir başka standart işlev olan srand işlevi, rastgele sayı üreticisinin tohum değerini<br />

değiştirmeye yarar. srand işlevinin stdlib.h başlık dosyasında yer alan bildirimi aşağıdaki<br />

gibidir:<br />

void srand (unsigned seed);<br />

srand işlevine gönderilen değer, işlev tarafından rastgele sayı üreticisinin tohum değeri<br />

yapılır. srand işlevine argüman olarak başka bir tohum değeri gönderildiğinde işlevin<br />

ürettiği rastgele sayı zinciri değişir.<br />

Aşağıda rand ve srand işlevleri tanımlanıyor:<br />

#define RAND_MAX 32767<br />

unsigned long int next = 1;<br />

int rand()<br />

{<br />

next = next * 1103515245 + 12345;<br />

return (unsigned int)(next / 65536) % 32768;<br />

}<br />

void srand(unsigned int seed)<br />

{<br />

next = seed;<br />

}<br />

srand işlevi çağrılmaz ise başlangıç tohum değeri 1'dir.<br />

Yukarıdaki programa srand işlevi çağrısını ekleyerek yeniden derleyin, çalıştırın:<br />

#include <br />

#include <br />

int main()<br />

{<br />

int k;<br />

srand(100);<br />

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

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

}<br />

return 0;<br />

Program bu şekliyle DOS altında Borland Turbo C 2.0 derleyicisi ile derleyip<br />

çalıştırıldığında ekran çıktısı aşağıdaki gibi oldu:<br />

1862 11548 3973 4846 9095 16503 6335 13684 21357 21505<br />

190

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

Saved successfully!

Ooh no, something went wrong!