folder Tahribat.com Forumları
linefolder C - C++
linefolder C' De Diziye Random Farklı Sayılar Atamak (Yardım)



C' De Diziye Random Farklı Sayılar Atamak (Yardım)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    anubisx
    anubisx's avatar
    Kayıt Tarihi: 21/Ağustos/2005
    Erkek

    Arkadaşlar elimizde hepsi int ve  a[4] ,b[4], c[4] ,d[4] olmak üzere toplamda 16 tane sayı var .Bende bunların hepsine 1 den 16 ya kadar random olarak birer sayı atamak istiyorum ancak önemli nokta bunlara atadığım sayıların eşit olmaması yani son sayı atandığında totalde bütün sayıların farklı olması.

    Bunu nasıl sağlayabilirim.Bir algoritma yazıyorum bu şekilde olmadığı zaman programın saatlerce belki günlerce çalışması gerekicek.


    http://yigitdemirag.com
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    Bir değişken daha tanımla ya da bir dizi. Bu değişkenin içini 1'den 16'ya kadar sırasıyla sayıları doldur. Random değerini sürekli olarak bu son tanımladığımız değişkenin içerdiği sayı miktarı ile çağır. Daha sonra çağrılmış olan değeri ise sil. 10 11 gibi çift haneli sayılarda problem çıkacağından hex kullanabilirsin. C bilmiyorum fakat şöyle örnek verebilirim;

    s16="0123456789ABCDEF";

    s16.lenght //<=1'den 16'ya kadar sayılarımızı içeren değişkenin uzunluğunu veren komudumuz

    x=random(s16.lenght);

    a[] = Math(s16[x]+1);  //+1 yapıyorum çünkü hex'te F değeri 15'e karşılık gelir, 0 değerinide bulunmakta. 0 değil bize en az 1 gerekli olduğundan sürekli +1 yapmalıyız

                                      //b[], c[], d[] dizilerinede atama yapılmalı her biri 4 değer alacak çünkü. Küçük bir sayaç ve if case ise çözersin bu noktayı

    s16=s16.replace(s16[x],'');  //Çekmiş olduğumuz değeri silelim

    //atamalar tamamlandıktan sonra döngüden çıkalım.


    Sadece bi imza..
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    anubisx
    anubisx's avatar
    Kayıt Tarihi: 21/Ağustos/2005
    Erkek

    Bunu C ye aktarmak biraz problem işte hocam, yinede sağol deneyeceğim bakalım


    http://yigitdemirag.com
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    anubisx
    anubisx's avatar
    Kayıt Tarihi: 21/Ağustos/2005
    Erkek

    up? 


    http://yigitdemirag.com
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JPriest
    JPriest's avatar
    Kayıt Tarihi: 09/Mart/2007
    Erkek

    http://www.tahribat.com/Forum-C-Diziler-Hakkinda-Ufak-Bir-Soru-128447/


    Sen hiç kaval çaldın mı?
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    kknd
    kknd's avatar
    Kayıt Tarihi: 01/Şubat/2010
    Erkek

    selam, sordugun dogrultuda bir algoritma yazdim, ama cok iyi oldugu soylenemez random fonkisyonundan oturu yaklasik 25 saniyede sonuc veriyor..artik kod optimizasyonunu sen yaparsin diye dusunuyorum, kolay gelsin

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <time.h>
    #include <stdbool.h>

    #define max 16

    int random16();

    int main(void) {

        int a[4], b[4], c[4], d[4], rd[max];

        int i, j, random;
        bool found = false;
        for (i=0; i<max; i++) {
            random = random16();
            for (j=0; j<i; j++) {
                if (random == rd[j]){
                    found = true;
                    break;
                }
            }
            if (found) {
                i--;
                found = false;
            }
            else
                rd[i] = random;
        }
        for (i=0; i<max; i++) {
            if (i<4)
                a[i] = rd[i];
            else if (i<8)
                b[i-4] = rd[i];
            else if (i<12)
                c[i-8] = rd[i];
            else
                d[i-12] = rd[i];
        }
        for (i=0; i<4; i++) {

            printf("%d %d %d %d\n", a[i],b[i],c[i],d[i]);

        }
        return EXIT_SUCCESS;
    }

    int random16() {

        srand((unsigned int) time(0) + getpid());
        srand(rand());
        int r = max * (rand() / (RAND_MAX + 1.0));
        return r + 1;
    }

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NmC
    NmC's avatar
    Kayıt Tarihi: 23/Kasım/2008
    Erkek

    hocam bu işlerde en temiz yöntem keyleri değiştirmektir..

    tek dizi üzerinden anlatayım.. :)

    a[16] = { 0, 1 ,2, 3,4,...};

    diye atadığını varsay...

    sonra random olarak 0 ile 16 arasında bi 2 sayı üret,

    daha sonra bu indexlere sahip sayıları yer değiştir..

    mesela 13, ile 8 geldi

    a[13] ile a[8] in değerlerini değiştir....

    Bu işlemi döngü ile bikaç kez tekrarla..

    En hızlı ve ekonomik çözüm budur :)

    yoksa unique random sayı üretmek meşakkatli iş..

     


    There are 10 types of people in the world. Those who knows binary and those who dont...
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    anubisx
    anubisx's avatar
    Kayıt Tarihi: 21/Ağustos/2005
    Erkek

    NmC bunu yazdı:
    -----------------------------

    hocam bu işlerde en temiz yöntem keyleri değiştirmektir..

    tek dizi üzerinden anlatayım.. :)

    a[16] = { 0, 1 ,2, 3,4,...};

    diye atadığını varsay...

    sonra random olarak 0 ile 16 arasında bi 2 sayı üret,

    daha sonra bu indexlere sahip sayıları yer değiştir..

    mesela 13, ile 8 geldi

    a[13] ile a[8] in değerlerini değiştir....

    Bu işlemi döngü ile bikaç kez tekrarla..

    En hızlı ve ekonomik çözüm budur :)

    yoksa unique random sayı üretmek meşakkatli iş..

     


    -----------------------------

    yine verim yok 0-16 arasında ürettiğin sayılar sürekli birbirini değiştiricektir..


    http://yigitdemirag.com
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NmC
    NmC's avatar
    Kayıt Tarihi: 23/Kasım/2008
    Erkek

    anubisx bunu yazdı:
    -----------------------------

    NmC bunu yazdı:
    -----------------------------

    hocam bu işlerde en temiz yöntem keyleri değiştirmektir..

    tek dizi üzerinden anlatayım.. :)

    a[16] = { 0, 1 ,2, 3,4,...};

    diye atadığını varsay...

    sonra random olarak 0 ile 16 arasında bi 2 sayı üret,

    daha sonra bu indexlere sahip sayıları yer değiştir..

    mesela 13, ile 8 geldi

    a[13] ile a[8] in değerlerini değiştir....

    Bu işlemi döngü ile bikaç kez tekrarla..

    En hızlı ve ekonomik çözüm budur :)

    yoksa unique random sayı üretmek meşakkatli iş..

     


    -----------------------------

     

    yine verim yok 0-16 arasında ürettiğin sayılar sürekli birbirini değiştiricektir

    -----------------------------

    Nasıl yok hacı :)

    4-5 tur döndükten sonra zaten karman çorman olacaktır o seri.. while'in de 5 tur dönmesi mili saniye mertebelerinde olacak..

    Hem hızlı hem temiz.. :)


    There are 10 types of people in the world. Those who knows binary and those who dont...
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek

    Önce 1 kaynak dizi oluştur sıralı olsun farketmez 1 den 16 ya kadar

    sonra random olarak bu diziden 4erli seçimler yaparak  alt kümeleri oluştur...

    Daha önce benzeri bir konu açılmıştı...

    Ya da arkadaşın dediği gibi bir karıştırma prosedürü yaz... kaynak diziyi "karıştır" 16 kere karıştır ( teorik oalrak karışıma uğramamış eleman olabilir ama bu çok düşük bir olasılık , ama bir tombala çekme simülasyonu açısından bakarsan etik bir sorun vardır)  sonra bu diziden istedğin şekilde 4 elemanlı alt küme oluştur...


    Din Kitaplarını Okuyup Anlayana Ateist, Okuyup Anlamayanlara "dindar" denir... Nikola TESLA.. ben mi? Ne okurum ne anlarım... Kendi kendime de uyuz oluyorum ama olamıyorum.. "Ama efsaneyi çıkarıp atarsan ve yaptıkları eylemlere bakarsan... ..Jedi'ların mirası başarısızlıktır. İkiyüzlülüktür, kibirdir."
Toplam Hit: 4796 Toplam Mesaj: 10