Şimdi Ara

C rand() komutu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir (1 Mobil) - 2 Masaüstü1 Mobil
5 sn
8
Cevap
0
Favori
6.631
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • merhaba arkadaşalr c de rand(); komutunun hep aynı sayiyla dönmesini nasıl önleyebilirim bilgisi olan arkadaş varsa yardım edebilirmisiniz?



  • 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
  • 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...




  • // 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;
  • gokhan04069,tamers ve muhendis_1, arkadaşlar hepinize ayrı ayrı teşekkür ederim çok sağolun
  • peki arkadaşlar bir sorum daha olacak;

    ben bir dizinin içinden rastgele sayılar çekmek istiyorum bunu rand()komutu ile yapabilirmiyim
  • 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
  • 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 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.