PDA

Tam Sürümünü Görmek İçin : Randomize()


curly
13/04/2008, 22:25
ben oyle birsey yapmak istiyorum ki
bir seferde bana 1ile48 arasında 12 tane random sayı uretsin( c++ builder da)
soyle
dizi[0]=4
dizi[1]=40;
dizi[2]=5;ü
gibi
aynı sayılar olmayacak hepsi birbirinden farkli olacak baska bir yol varmı yardımedin cok acıll simdidensaygılar


quasimodo
13/04/2008, 22:38
Bir seferde yanlizca bir tane random sayi uretebilirsin.
bkz rand()

curly
13/04/2008, 22:47
tamam bir seferde bir sayı urettim fakat ben bu sayının aynı olmasını itemiyorum yanı 13 tane faklı sayı

quasimodo
13/04/2008, 22:53
#include <iostream>

int main()
{

int dizi[12], i;

for( i = 0; i < 12; ++i)
dizi[i] = std::rand();

for( i = 0; i < 12; ++i)
std::cout << dizi[i] << " ";

return 0;
}

curly
13/04/2008, 22:55
c++ builder da yapıyorum ama
dizi[i] = std::rand(); burayı acıklasan yeter

ortug
13/04/2008, 22:59
http://forum.ceviz.net/rastgele-secilen-sayilarin-birbiri-ile-ayni-olmasini-engelleyen-program-t56410.html

curly
13/04/2008, 23:24
hocam mantık dogru bende boyle yaptım ama olmuyor soyle birsey yapabilirmiyiz bir dizi olacak
int a[5]={1,2,3,4,5} ben random=1 uretecem sonra dizinin birince sirasındakini diziden atacam

ortug
13/04/2008, 23:28
açıkcası sorunu anlayamadım. Random olarak 1 üretecem dersen, random üretmemiş oluyorsun.

quasimodo
13/04/2008, 23:36
rand() bir fonksiyon ki bu fonksiyon 0 ile RAND_MAX arasinda
random bir sayi uretiyor. Sen bir dongunun icinde bu fonksiyonu
12 kere cagirip urettigi degeride diziye atarsan elinde 12 elemanli
rastgele sayilardan olusan bir dizi olur.

0 ile 48 arasinda sayi uretmek icinde soyle yapabilirsin

rand() % 49;

curly
14/04/2008, 00:27
ya tamam 49 sayıdan rastgele 12 sayı urettim ama aynı sayılar gelebiliryorbunu nasıl engellerim

acehreli
14/04/2008, 03:52
Bunun klasik cozumu, sayilari bir diziye yerlestirdikten sonra dizi elemanlarini rastgele birbirleriyle degistirmektir. Sonucta o sayilari rastgele bir sirada elde edersin.

Ali

curly
14/04/2008, 18:29
void __fastcall TForm1::Button1Click(TObject *Sender)
{

for(i=0;i<5;i++){
dizi[i]=random(10);
for(j=0;j<5;j++){

if(dizi[j]==dizi[i])
dizi[i]=random(10);



}

}

for(m=0;m<6;m++){
ListBox1->Items->Add(dizi[m]);
}
}

bunun neresi yanlış ya yine aynı sayıyı uretiyor..........

Kojiroh
15/04/2008, 04:28
for(i=0; i<5; i++)
{
int k=random(10);
for(int j=0; j<5; j++)
while(k==dizi[j]) k=random(10);
dizi[i]=k;
}
Şeklinde yapabilirsin. Fakat bu oldukça basit bir yöntem ve sayılar rastgele geldiği için kimi zaman uzun süreler bekletebilir.

İlginç, kafam durgun olacak ki, hiçbir çalışan algoritma çıkaramadım yarım saattir :p. Bu algoritma çalışmıyor malesef.