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 />

rand() % 6<br />

0 - 5 aralığında rastgele bir değer üretir<br />

rand() % 6 + 1<br />

1 - 6 aralığında rastgele bir değer üretir. (örneğin bir zar değeri)<br />

rand() % 6 + 3<br />

3 - 8 aralığında rastgele bir değer üretir.<br />

Ancak derleyici programların sağladığı rastgele sayı üreticilerinin ürettikleri rastgele<br />

sayıların, düşük anlamlı bitleri çoğunlukla rastgele kabul edilemez. Bu durumda<br />

yukarıdaki ifadeler, üretilmesi gereken tüm sayılar için eşit bir dağılım sağlamaz.<br />

Dağılımın daha düzgün olabilmesi için bazı yöntemler kullanılabilir:<br />

rand() % N<br />

ifadesi yerine<br />

rand()/(RAND_MAX / N + 1)<br />

ya da<br />

(int)((double)rand() / ((double)RAND_MAX + 1) * N)<br />

ifadeleri yazılabilir.<br />

Ya da aşağıdaki gibi bir işlev tanımlanabilir:<br />

#include <br />

#include <br />

#define N 10<br />

int mrand()<br />

{<br />

unsigned int x = (RAND_MAX + 1u) / N;<br />

unsigned int y = x * N;<br />

unsigned int r;<br />

}<br />

while ((r = rand()) >= y)<br />

;<br />

return r / x;<br />

srand(time(0)) çağrısının bir döngü içinde yer alması sık yapılan bir hatadır.<br />

#include <br />

#include <br />

#include <br />

int zar_at()<br />

{<br />

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

return rand() % 6 + 1 + rand() % 6 + 1;<br />

}<br />

192

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

Saved successfully!

Ooh no, something went wrong!