Arama butonu
Bu konudaki kullanıcılar: 1 misafir
7
Cevap
6600
Tıklama
0
Öne Çıkarma
C rand() komutu
A
18 yıl
Teğmen
Konu Sahibi

merhaba arkadaşalr c de rand(); komutunun hep aynı sayiyla dönmesini nasıl önleyebilirim bilgisi olan arkadaş varsa yardım edebilirmisiniz?



G
18 yıl
Çavuş

ilk başta #include<stdlib.h>ve #include<time.h> gir. daha sonra rand() fanksiyonundan önce
srand(time(NULL)); girersenrastgele sayılar üretir bir dene kolay gelsin


Bu mesaja 1 cevap geldi.
T
18 yıl
Çavuş

quote:

Orjinalden alıntı: gokhan04069

ilk başta #include<stdlib.h>ve #include<time.h> gir. daha sonra rand() fanksiyonundan önce
srand(time(NULL)); girersenrastgele sayılar üretir bir dene kolay gelsin

arkadas tamamen hakli.rand komutunun standat bir algoritmasi yoktur,yani algoritma derleyiciden derleyiciye degisir.
ama komut derleyici icinde bir algoritmaya sahiptir.bu algoritmaya göre sen programin icinde rand() komutunu
tanimladiginda o kendine bir ilk deger secer yani seed_value ve rastgele sayilri buna göre üretir,sen programi her
cagirdigindan ayni seed degeri korundugundan rastgele sayilarinda degismez ve ayni kalir.iste burda devreye
srand() komutunu sokarak ve gökhan in dedigi gibi tanimlayarak sorunu cözersin.cünkü srand() komutu her cagrilisinda
seed value degeri degistirdiginde problem ortadan kalkar.yani sende programlarinda algoritma kullan ki
problemin kalmasin...


Bu mesaja 1 cevap geldi.
M
18 yıl
Çavuş

// rand() ' dan ayni sayi donmemesi icin srand(time(NULL)) kullanilması gerekiyor.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int dizi[10];
int i;

srand(time(NULL));

for(i = 0; i < 10; i++)
dizi = rand();

for(i = 0; i < 10; i++)
printf("%d. eleman : %d\n", i, dizi);

system("PAUSE");
return 0;


Bu mesaja 1 cevap geldi.
A
18 yıl
Teğmen
Konu Sahibi

gokhan04069,tamers ve muhendis_1, arkadaşlar hepinize ayrı ayrı teşekkür ederim çok sağolun


Bu mesaja 1 cevap geldi.
A
18 yıl
Teğmen
Konu Sahibi

peki arkadaşlar bir sorum daha olacak;

ben bir dizinin içinden rastgele sayılar çekmek istiyorum bunu rand()komutu ile yapabilirmiyim


Bu mesaja 1 cevap geldi.
A
18 yıl
Yüzbaşı

quote:

Orjinalden alıntı: atilla_ati

peki arkadaşlar bir sorum daha olacak;

ben bir dizinin içinden rastgele sayılar çekmek istiyorum bunu rand()komutu ile yapabilirmiyim


nasıl bir dizi?
sececeğin sayı mesela 1-1000 arasında olsun o zmn rand()%1000; yaparsın.
pek anlamadım ama biraz daha açarsan yardımcı olabilirim


Bu mesaja 1 cevap geldi.
[
18 yıl
Onbaşı

rand() fonksiyonu manuel olarak yani yazilimcinin kendisi tarafindan seed edilmedigi surece her zaman ayni sayilari uretecektir.
Bunun sebebi random yani rastgele sayilar uretilmesi amaclanmasina ragmen, uretilen sayilarin sonsuz olmayan matematiksel bir denklemden almasidir.

rand() fonksiyonunu en uygun sekilde kullanabilmek icin her adima fonksiyonun kendisi ile bir sayi almadan once seedin degistirilmesidir.

rand() fonksiyonunu seed etmek icin s_rand(int value) kullanilmasi gerekmektedir.


örnek:

#include <time.h>
#include <stdlib.h>

int main()
{
int c;
srand(clock()); // First seed the rand with internal clock
srand(rand()); // Seed the rand with a rand number
for(int x = 0; x < 10; x++)
{
c = rand() % 52;
}
return 0;
}

Yukaridaki loop her seferinde c degiskenine 0 ile 52 arasinda (0 olabilir ama 52 olamaz) bir deger verecektir.


Elde bulunan bir dizi deger veya obje var ise (array,list, vector, vb.)
ve bu elemanlardan herhangi birisini rastgele secmek istiyorsan su tarz bir yol izleyebilirsin.

1. Dizinin buyuklugunu yani kac tane elemana sahip oldugunu bulup,
2. rand() fonksiyonu ile bir rastgele sayi uretip
3. o sayiyi modulo arithmetic kullanarak dizi buyuklugune bolerek:

c degiskeni dizinin buyuklugunu tutan degisken ise
x rastgele bi eleman pozisyonu olacak ise
"x = rand() % c;" satiri ile bir x degeri alip
4. Diziyi, x degeri ile index ederse yani, mesela bir arrayde "array[x]" sekline olabilir, rastgele bir eleman secebilirsin.

Bu kavram ile ilgili daha once kendi yazmis oldugum bir poker destesi hazirlama, kesme, dagitma algoritmam var. Daha fazla ornek veya aciklamaya ihtiyac olursa paylasabilirim.

Umarim dogru anlamisimdir ve yardimci olabilmisimdir.
Kolay gelsin


Bu arada yazmayi unutmusum,yukaridaki rand() ile ilgili komutlar: srand() ile once bilgisayar saati ile seed edip, daha sonra bilgisayar saatinin seedi ile generate edilen rastgele sayi ile tekrar seed ediyor. Bu sayede saatin devamli olarak degismesi yolu ile rand() fonksiyonunun farkli farkli sayilar uretmesi saglaniyor.





< Bu mesaj bu kişi tarafından değiştirildi [FireStorm] -- 14 Mart 2006; 4:05:58 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.