folder Tahribat.com Forumları
linefolder C - C++
linefolder C - Diziler Hakkında Ufak Bir Soru



C - Diziler Hakkında Ufak Bir Soru

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek

    Merhabalar. Örneğin 6 elemanlı bir diziye 1 ile 6 arasında random değer atarken, her elemanın farklı olmasını nasıl sağlayabilirim? Elemanın içindeki değerlere random değer atamada bir sorun yok ama her elemanın birbirinden farklı olmasını nasıl sağlayabilirim? şimdiden teşekkürler.

     

     

    srand(time(NULL));
      int A[6];
      int i,j,yed;
      for(i=0;i<6;i++)
      A[i]=rand()%6+1;
      for(j=0;j<6;j++)
      for(i=0;i<6;i++)

                     }
      //bubble sort
      for(i=0;i<6;i++)
      for(j=0;j<5;j++)
                       if(A[j+1]<A[j]){
                                     yed=A[j+1];
                                     A[j+1]=A[j];
                                     A[j]=yed;

    }


    since 2005 // tbt
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    seretide
    seretide's avatar
    Kayıt Tarihi: 14/Haziran/2010
    Erkek

    bi dizi tanımla 6 elemanlı sonra hepsine index teki değerini at yani dizi[i]=i;

    sonra dizideki elemanların yerini random olarak değiştir.şu şekilde

    for(i=0;i<6;i++){

       random=rand()%6;

      tmp=dizi[random];

       dizi[random]=dizi[i];

       dizi[i]=tmp;

    }

     

     

     


    Saçma
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek

    Hocam sanırım yanlışın var işe yaramadı. Yukarda verdiğim koda enjekte edebilirsen sevinirim ben yanlış kullandım belki de.

    edit// jeton yeni düştü hocam eyvallah :)


    since 2005 // tbt
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek

    en son oluşturduğun random elemanın mevcut dizide var olup olmadığını kontro eden bir prosedür yazmalısın..

    Eğer var ise bu elemanı diziye eleman olarak kaydetmezsin..

    Yok ise diziye eleman olarak kadedersin...


    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."
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek

    seretide'ın yöntemi ise akıllıca mantıklı ve ekonomik...

    ancak mod anahtarını%5+1 şeklinde yapmak daha mı doğru olmaz mı?// Edit: olmaz :))


    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."
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek

    ltcelik bunu yazdı:
    -----------------------------

    seretide'ın yöntemi ise akıllıca mantıklı ve ekonomik...

    ancak mod anahtarını%5+1 şeklinde yapmak daha mı doğru olmaz mı?


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

    Evet hocam o şekilde düzenledim ben de. Dizi[0] şeklinde verceği için 0 dan başlayacak n-1 e kadar gidecek. Değerlerin içine atcağımız değer de dizi[i]=i+1 yapmak daha mantıklı çünkü seçceğim sayılar 1 den başlıyor. Tekrar teşekkürler seretide


    since 2005 // tbt
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek

    yok yok olmaz  eğer 1ve 6 dahil sayı istersek %6+1 yapmalı çünkü mod 6 da en büyüksayı 0-5 arası veriyor

    dolayısıyla %6+1 yaptığımızda 1-6 aralığını verecektir ( eğer 1-6 kapalı aralığını istiyorsak )


    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."
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JPriest
    JPriest's avatar
    Kayıt Tarihi: 09/Mart/2007
    Erkek

    ltcelik bunu yazdı:
    -----------------------------

    en son oluşturduğun random elemanın mevcut dizide var olup olmadığını kontro eden bir prosedür yazmalısın..

    Eğer var ise bu elemanı diziye eleman olarak kaydetmezsin..

    Yok ise diziye eleman olarak kadedersin...


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

    Evet aynen öyle yapılır. Itcelik abinin bahsettiği prosedür de linearSearch olabilir.


    Sen hiç kaval çaldın mı?
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek

    Bu çeşit prblemlerde seretide'ni yöntemi daha akıllıca (ama benim yöntemimdeki eksikliği de hala barındırıyor )

    Şöyle ki

    random sayı üretici ile örneğin 1-99 arası elemanlardan oluşan bir dizi oluşturmak istediğimizde

    bilgisayar kafadan bir sayı atacak ve bu sayı daha önce var üretilmiş mi diye kontrol edecek

    ilk başlarda çok problem olmayacak ama seçebileceği sayılar azaldıkça bu sefer daha çok eski sayı üretecektir...

    örneğin 97 tane sayıyı diziye yerleştirdi bir tek 27 ive 63 kaldı... bilgisayar bu sayıları üretene kadar - işimiz "şansa" ( ne garip çelişki değil mi) - belki de sonsuza kadar beklemek zorunda kalacığız...

     

    seretide'ın yönteminde ise zaten var olan elemanların ( bir türlü üretilmeyen "27" ve "63" de dizinin elemnaları olarak mevcut) yerlerini şansa bağlı olarak değiştirdiğimizden döngünün sonsuz ıraksaması gibi bir sorunda ortaya çıkmayacaktır.. ancak bu sefer de seçmesi gereken eleman indislerini seçerken aynı sorun ortaya çıkıyor..

    Bunu yerine şöyle düşünelim...

    Bizim sıralı dizimiz sıarasıyla elemanlarından oluşsun...1,2,3..99 gibi ( üst üste tabaklar gibi)

    Biz bu sıralı diziden -S[]- rasgele üreteteci ile bir eleman alalım ve sırasıyla R[] dizisine eleman olarak kaydedelim..

    Ancak burada dikkat etmemiz gereken bir iki kritik nokta var..

    Biz S dizisinden her eleman(ı) çekişimizde

    1. eleman alış indisimize kayıtlı eleman S dizisi elemanlığından çıkar

    2.ondan sonraki elemanlar tabaklar gibi birer indis küçük indise yerleşir ( yani dizi restore edilir)

    3.Sdeki Eleman sayısı küçüleceği için rand anahtarı her defasında bir küçülür ( çünkü eleman sayısı bir eksilmiş olur, bunu yapmazsak olay uzayının yani olasılık sayısının dışına çıkmış oluruz ki bu önceden söylediğim gibi gereksiz ve teorik olarak sonsuz döngülere sebep olur)

    algoritma basitce

    N elemanlı sıralı S dizisini oluştur

    xx

    olay uzayını (U) Snin eleman sayısına eşitle (SE)

    randomize nahtarını U ya ayarla, randomize sayı RS üret

    R dizisine S dizisndeki RSinci elemanı eleman olarak kaydet

    S dizisinin RS+1 inci den sonuncu elemnına kadar yeniden düzenle ve boyutlandır

    tüm elemanlar yerleşinceye kadar tekrarla(N)

     

    // Çünkü her eleman yerleştirmede aynen tombala çeker gibi , olay uzayımız ( eleman sayımız ) azalacağı için mutlaka torbadaki elemanladan birini seçmek durumında oduğumuz için yanlış eleman seçme gibi bir derdimiz de olmayacak ve sonsuza ıraksamış bir döngümüz de olmayacaktır...//


    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."
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    sacrifice
    sacrifice's avatar
    Kayıt Tarihi: 25/Ağustos/2005
    Erkek

    ltcelik bunu yazdı:
    -----------------------------

    en son oluşturduğun random elemanın mevcut dizide var olup olmadığını kontro eden bir prosedür yazmalısın..

    Eğer var ise bu elemanı diziye eleman olarak kaydetmezsin..

    Yok ise diziye eleman olarak kadedersin...


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

    o algoritma ortalamada n^3 lük zamanda çalışıyor evet mantıklı ama kısa diziler için gayet tatbik edilebilir.


    #Coding Sacrifice Perl FSO#
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek
    İtcelik hocam ugrasip uzunca yazmissin ama degdi cok mantikli bi algoritma ogrendm valla sayende cok tesekkurler

    since 2005 // tbt
Toplam Hit: 2790 Toplam Mesaj: 16