From: Huseyin Mizan (hmizan@eliop.com.tr)
Date: Tue 09 Mar 2004 - 07:56:47 EST
Merhaba
Bildigim kadari ile rnd fonksiyonu ile her seferinde aynı sonuca
ulasirsiniz.
Dolayisi ile hep aynı sonucu elde edersiniz.Burda gercekten c yi uzun
zamandir kullanmadigimdan
dolayi bilgi eksigim olabilir ve daha önce önerdigim konuya bir iki ekleme
daha yapılabilir gibi geliyor bana
mesala sadece bir for dongüsü yani
n_controlsayi=1;
do
{
for(; n_controlsayi<=100;n_controlsayi++)
{
if(n_controlsayi==100)//eger n_controlsayi 100 e ulasmıssa
n_controlsayi=1; //while dongusu donusunde n_cotrolsayinin 1 den
baslatılması gerekir
if (n_controlsayi==yuzde_m)
break;
if (n_controlsayi==yuzde_n)
break;
if (n_controlsayi==yuzde_x)
break;
}
}
while(ran()_conditions_not_valid)
ve yine
n_controlsayi icin bir switch yapısı calıstırılmalıdır.
Boyle bir yapıda yuzdesi buyuk olan sayi icin daha uzun süre for dongu
zamanı calısacagından sonucda yuzdeligi buyuk olan sayiyi yakalamak mumkun
gibi geliyor bana
-----Original Message-----
From: linux-programlama-bounce@liste.linux.org.tr
[mailto:linux-programlama-bounce@liste.linux.org.tr]On Behalf Of serdar
Sent: Tuesday, March 09, 2004 2:13 PM
To: linux-programlama@liste.linux.org.tr
Subject: [linux-programlama] Re: yuzdeli rastgele sayi..
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 :)
>
>
>
>
>