[linux-programlama] Re: yuzdeli rastgele sayi..

---------

From: a.kadir altan (e108193@metu.edu.tr)
Date: Tue 09 Mar 2004 - 09:31:52 EST

  • Next message: Aykut YILDIZGÖRÜR: "[linux-programlama] Re: Kitaplar"

    gonderdikten sonra fark ettim,
    1-1 sorulan soruya uymuyor, ozur dilerim
    ama bu yontem cok kolay bir sekilde istenilen sekle donusturulebilir...

    serdar bey'in de kriterlerine uygun sanirim :) ...
    ustelik benim yontemde sadece her yuzdelik birim icin karsilik gelen secilmek istenen
    deger degil de her deger icin ilgili yuzde girildigi icin eleman sayisi kadarlik bir
    array yeterli olacak... (ornek kodumda bu sayi 10)...

    saygilar,
    iyi calismalar,
    kdr

    ----- Original Message -----
    From: "a.kadir altan" <e108193@metu.edu.tr>
    To: <linux-programlama@www.linux.org.tr>
    Sent: Tuesday, March 09, 2004 16:20
    Subject: [linux-programlama] Re: yuzdeli rastgele sayi..

    > merhaba,
    > onceki mesaji atarken mesguldum cok acamadim kastettigim seyi,
    > simdi hizlica soyle bir kod yazdim, ne kastettigimi anlatacaktir:
    >
    > ornekte yazdigim kod 0-9 arasi 10 adet sayidan rastgele sececek, (YUZDE_ADEDI = 10)
    > ve bunlarin yuzedeleri de bir arrayda tutuluyor (int yuzdeler[ ] )
    >
    > cok kolaylikla bu for dongusunu bir fonksiyona koyabilirsiniz, o zaman yuzdeleri
    > onceden belirlediginiz rastgele sayi ureten bir fonksiyon gibi calisacaktir...
    > vakitsizlikten ugrasamadim direk main'in icinde yazdim...
    > sinirlarla ilgli kontrol yapmaya da vaktim olmadi, ama dogru calisiyor olmasi lazim,
    > yoksa bir "<=" degisimi halleder sorunu sanirim...
    >
    > iyi calismalar,
    > kdr
    >
    > //////////////////////////////////////////////////////////////////
    > #include "stdlib.h"
    > #include "stdio.h"
    > #define YUZDE_ADEDI 10
    >
    > int main(void){
    > // yuzdeleri buraya girin
    > int yuzdeler[YUZDE_ADEDI]={3,10,3,5,14,20,35,2,4,4};
    >
    > int sayi=rand()%100; // 0-100 arasi sayi uretelim
    >
    > int yuzde=0; //hangi araliga dustugunu hesaplayacak
    >
    > for (int i=0;i<YUZDE_ADEDI;i++) {
    > yuzde+=yuzdeler[i];
    > if (sayi<yuzde) {
    > sayi=i;
    > break;
    > };
    > };
    >
    > printf("secilen sayi: %d\n",sayi);
    >
    > return 0;
    > };
    > ////////////////////////////////////////////////////////////////////////////
    >
    > ----- Original Message -----
    > From: "a.kadir altan" <e108193@metu.edu.tr>
    > To: <linux-programlama@www.linux.org.tr>
    > Sent: Tuesday, March 09, 2004 12:40
    > Subject: [linux-programlama] Re: yuzdeli rastgele sayi..
    >
    >
    > > yine umutla ayni sonuca cikacak bir oneri verebilirim (farkli olarak array
    > > tanimlamiyorsun cok sayida), rastgele secimini 0-100 arasi yap... yine senin
    > > yuzdelerini umutla ayni secelim (tembellik :) ),
    > > > 0: %3
    > > > 1: %10
    > > > 2: %3
    > > > 3: %30
    > > > ...
    > >
    > > 1 - 3 arasi gelirse 0
    > > 3 - (3+10) arasi gelirse 1
    > > 13 - (13+3) arasi gelirse 2 ... boyle gider... belki daha kolayina gelecektir
    yazmak
    > > icin...
    > >
    > > kolay gelsin
    > >
    > >
    > > ----- Original Message -----
    > > From: "Umut" <php@kakalak.org>
    > > To: <linux-programlama@www.linux.org.tr>
    > > Sent: Monday, March 08, 2004 22:09
    > > Subject: [linux-programlama] Re: yuzdeli rastgele sayi..
    > >
    > >
    > > > Aykut> merhaba..
    > > > Aykut> kucuk bir porgram yapmaya calisiyorum ama icinden cikamadigim bir soru
    > var..
    > > > Aykut>
    > > > Aykut> bir grup sayi arasindan rastgele birini secerken, secilecek sayilarin
    cikma
    > > olasiliklarini
    > > > Aykut> yuzde uzerinden nasil belirliyeblilirim?
    > > > Aykut>
    > > > Aykut> mesela , 1den 10 kadar olan bir sayi grubundan 3 tane sayi sececegim.
    > > > Aykut> fakat her bir sayinin secilme olasiligi farkli olacak.
    > > > Aykut> mesela 9 unki %10, 3ün %75 gibi..
    > > > Aykut>
    > > > Aykut> bu islem rastgelelik kavramiyla pek uyusmuyor ama yapilmasi gereken bu..
    > > > Aykut> programlama dili onemli degil..merak ettigim nasilbir mantik kurulmasi
    > > gerektigi..
    > > >
    > > > Verdiginiz ornegi ele alalim:
    > > > Eger 10 [0..9] tane sayiniz var ve ihtimalleri ifade etmek icin % yeterli
    diyelim
    > > ki.
    > > >
    > > > 0: %3
    > > > 1: %10
    > > > 2: %3
    > > > 3: %30
    > > > ...
    > > >
    > > > olsun. O halde siz 100'luk bir dizi olusturun ve degerlerini:
    > > >
    > > > 3 tanesini 0 ile
    > > > secim[0]=0
    > > > secim[1]=0
    > > > secim[2]=0
    > > >
    > > > 10 tanesini 1 ile
    > > > secim[3]=1
    > > > secim[4]=1
    > > >
    > > > vs doldurun. Simdi random degiskeniniz ile 0..99 arasinda bir sayi secin,
    > sectiginiz
    > > > sayiya karsilik gelen dizi elemani sizin istediginiz oranlarda gelmis olacaktir.
    > > >
    > > > Az sayida secenek ve %'li ifadeler icin bu yontem gecerli olabilir.
    > > >
    > > > Eger olasiliklari ifade etmek icin daha fazla basamaga ihtiyaciniz varsa
    > > > bir agirlik fonksiyonu bulmaniz daha yerinde olabilir. Bunun icin
    > > > yapmaniz gereken elinizdeki verilerin herhangi bir dagilima uyup
    > > > uymadigini bulmak olabilecegi gibi baska bir boyutta:
    > > >
    > > > elinizdeki 10 tane sayiyi X,
    > > > bunlarin olasiliklarini Y olarak alacak 10 tane nokta alrisiniz.
    > > > Sonra bu noktalardan gecen (yaklasik olarak tabii ki) fonksiyonu
    > > > bulmaya calisirsiniz. Bunun icin ihtiyaciniz analitik geometri.
    > > >
    > > > Eger sayi iliskileriniz sabit degilse, yani her defasinda bir fonksiyon
    > > > hesaplamaniz gerekirse en guzeli ilk yontem gibi geliyor. dinamik
    > > > olarak array'in icini doldurmak seri bir yontem olacaktir.
    > > >
    > > > saygilar.
    > > > Umut
    > > >
    > > > --
    > > > This message has been scanned for viruses and
    > > > dangerous content, and is believed to be clean.
    > > >
    > >
    > >
    > >
    > >
    >
    >
    >
    >


  • Next message: Aykut YILDIZGÖRÜR: "[linux-programlama] Re: Kitaplar"

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.