From: serdar (serdar@e3tam.com)
Date: Tue 09 Mar 2004 - 07:13:26 EST
Benim dusunucem random fonsiyonunu dongu icerisinde surekli calistirarak
sayiya karsilik gelen olasilik degeri yakalandiginda donguye son vermek.
Ornek;
int N[100]; //sonucta cikarilacak sayilar dizisi
int O[100]; //sayi dizisine karsilik gelen olasilik dizisi
int son, for1, aranan_sayi;
son=3D1;
while(son){
for(for1=3D0;for1<100;for1++){
if( rnd() < O[for1]){son=3D0;for1=3D100;aranan_sayi=3DN[for1]; }
}}
printf("%d\n", aranan_sayi);
Sanirim boyle bir algoritmanin calismaa hizida rnd() (yani sansa) kalir.
Saygilarimla ...
Selamlar
Yan=FDtlar ger=E7ekten g=FCzelve ben de ayr=FDca c programlamay=FD =
referans alarak
bir do while dongusu icersinde herbir y=FCzde x sayisi icin farkl=FD =
olan
bir
for dongusu ile ihtiyac duyulan elemanlar uretilerek daha sonras=FDnda
while
sart=FDnda random se=E7im sart=FDn=FD kontrol ederken c=FDk=FDsa =
zorlayabilirsiniz
gibi
gelyor bana.Tabiiki bunu her for dongusunden c=FDk=FDsta continue =
sozc=FCg=FC
ile
while sart=FDn=FD kontrol etmeye zorlaman=FDz gerekir alam=FDnda =
dusunmemiz
gerekir
yani
do
{
n_kontrol=3D0;
for (controlsayi=3D0 ; controlsayi<=3Dyuzde_n ; controlsayi++)
n_kontrol=3D1;
continue;
n_kontrol=3D0;
for (controlsayi=3D0 ; controlsayi<=3Dyuzde_m ; controlsayi++)
n_kontrol=3D2;
continue;
n_kontrol=3D0;
for (controlsayi=3D0 ; controlsayi<=3Dyuzde_x ; controlsayi++)
n_kontrol=3D3;
continue;
}
while(random (z)_conditions)
switch (n_kontrol)
{
case 1:
printf("Rasgele uretim sayiniz 1 yani yuzde_n");
break;
case 2:
printf("Rasgele uretim sayiniz 2 yani yuzde_m");
break;
case 3:
printf("Rasgele uretim sayiniz 3 yani yuzde_x");
break;
default :
printf("yuzde_x,yuzde_m,yuzde_n icin hicbir say=FD girmediniz tekrar
girebilirsiniz/*yorum k=FDsm=FD*/)");
}
yukaridaki =F6rnek sadece her yuzde m,n,x degeri icin for donguleri =
icinde
kalarak ,
for dongu islevi bitince while sart=FD kontrolu ile (continue nedeni
ile)kendisini
cikisa zorlamaktadir. Tabii burada goremedigim k=FDsimlar olabilir ama =
bu
mant=FDk
yakla=FE=FDk sonucu verecektir.Belki de bu random while k=FDsm=FDnda =
sistem
saatini
bir
=E7arpan olarak kullanmal=FDd=FDr.veya kulan=FDc=FDnn bir yan=FDt=FD =
olabilir bu size
kalm=FDs bir
tasarim.=D6nerimi denemedim ve sizin icin mant=FDk anlams=FDz gelebilir =
.bu
sadece
bir
=F6neri ve while k=FDsm=FDn=FD istediginiz herhangibir sartla kontrol
edebilirsiniz
-----Original Message-----
From: linux-programlama-bounce@liste.linux.org.tr
[mailto:linux-programlama-bounce@liste.linux.org.tr]On Behalf Of Serdar
K=D6YL=DC
Sent: Tuesday, March 09, 2004 9:51 AM
To: linux-programlama@liste.linux.org.tr
Subject: [linux-programlama] Re: yuzdeli rastgele sayi..
Selamlar..
Optimizasyon meselesi :)
Eger "optimize for speed (Optimize for Less CPU Usage)" hiz icin
optimize etmek istiyorsaniz array kullanmak iyidir. Yok, "Optimize for
size" olarak dusunuyorsaniz bir fonksiyon ile yapmak gerekir.
Diger yandan mesela 5 adet deger varsa, cogu zaman 100 elemanli bir
array yapmak pek akillica degildir. Ornegin,
A->%40
B->%5
C->%15
D->%30
E->%10
ise, 1 tane B, 8 tane A, 3 tane C, 6 tane D, 2 tane E olmak uzere, 20
elemanli bir array yeterli olacaktir. OKEK/OBEB Vs. mevzulari.
Olaya birde su acidan bakin, eger siz 100.000 deger icinden bazilarinin
farkli frekanslarda olmasini istiyor olsaydiniz, size ne kadar bir array
gerekirdi?
Saygi ve sevgiler..
> merhaba..
>
> yardimlariniz icin tesekkur ederim...
>
> rastgelelik kavrami acisindan en dogru cozum herbir sayisi dize
icerisinde
> yuzde oraninca tekrarlamak sanirim..
>
> tekrar tesekkurler :)
>
>
>
>
>