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

printf("%d ", a[k]);<br />

}<br />

return 0;<br />

Dizinin ters çevrilmesi için dizi boyutunun yarısı kadar dönen bir döngü içinde, dizinin<br />

baştan n. elemanı ile sondan n. elemanı takas ediliyor.<br />

Aşağıda tanımlanan urand isimli işlev her çağrıldığında 0 - MAX değerleri arasında farklı<br />

bir rastgele sayı üretiyor. İşlevin MAX adet tamsayıyı ürettikten sonra çağrıldığında hata<br />

durumunu bildirmek için -1 değerine geri dönüyor:<br />

#include <br />

#define MAX 100<br />

int flags[MAX] = {0};<br />

int urand(void)<br />

{<br />

int k, val;<br />

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

if (flags[k] == 0)<br />

break;<br />

if (k == MAX)<br />

return -1;<br />

while (flags[val = rand() % MAX])<br />

;<br />

++flags[val];<br />

}<br />

return val;<br />

int main()<br />

{<br />

int k;<br />

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

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

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

printf("\n\n%d\n", urand());<br />

}<br />

return 0;<br />

İşlev, bir tamsayının daha önce üretilip üretilmediğini anlayabilmek için flags isimli bir<br />

global bayrak dizisini kullanıyor. flags dizisinin bir elemanının değeri 0 ise o indise karşılık<br />

gelen değerin işlev tarafından henüz üretilmediği anlaşılıyor. Dizi elemanının değeri eğer<br />

1 ise, o değerin daha önce üretildiği anlaşılıyor.<br />

while (flags[val = rand() % MAX])<br />

;<br />

döngüsünden flags dizisinin val değişkenine atanan rastgele indisli bir elemanının değeri<br />

sıfır olduğunda çıkılır, değil mi?<br />

211

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

Saved successfully!

Ooh no, something went wrong!