Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Toplam 15

Konu, 'Yazılım Geliştirme' kısmında NAE4 tarafından paylaşıldı.

  1. NAE4

    NAE4 Daimi Üye

    Kayıt:
    25 Temmuz 2002
    Mesajlar:
    926
    Beğenilen Mesajlar:
    0
    Meslek:
    N/A
    Şehir:
    N/A
    Selamlar,

    1 2 3 4 5 6 7 8 9 sayılarının 3x3'lük tablo içinde satır sütun ve çapraz olarak 15'i verdiği dizilimi var. Bu dizilimi bilmiyorum ve bilgisayar yardımıyla bulmak istiyorum. PHP'de bir program yazıp bunu deneyerek (brute force gibi..) bulmak istedim. Programı yazdım ama ne yazık ki döngülere aşırı yüklendiğim için bilgisayar kilitlendi.

    Sizden istediğim bana bunun için iyi bir algoritma önermeniz.

    Cevaplarınızı bekliyorum. Üzerinde düşünürseniz sevinirim.

    Sevgiyle,
     
  2. ee++

    ee++ Daimi Üye

    Kayıt:
    25 Temmuz 2002
    Mesajlar:
    1,122
    Beğenilen Mesajlar:
    0
    Şehir:
    Ankara
    Selam adaş,

    Bu işin algoritması zaten bilinen bir algoritma. Algoritma, karenin bir kenarının uzunlugunun tek ya da cift olusuna gore degisiyor. Tek oldugu durum icin algoritma surada var (cift de var oralarda): http://user.chollian.net/~brainstm/odd.htm

    Su anda pek havamda olmadigim icin, cok basit de olsa, ceviremeyecegim oradaki bir kac adimi. Ama biraz degisiklik olsun diye algoritmayi kodladim (kendim daha once bunla ugrastigim icin kolayca ve biraz da artistik bir gerceklestirim oldu :) ). en kolay C'de yazabildigim icin C'de yazdim, kod su:

    Kod:
    #include <stdio.h>
    
    #define SIZE 7
    #define MAX (SIZE * SIZE)
    
    int magic[SIZE][SIZE] = {0};
    int y = 0, x = (SIZE-1)/2;
    int i = 2;
    
    int main()
    {
       magic[y][x] = 1;
       while(i <= MAX)
       {
          if(!magic[(y-1+SIZE)%SIZE][(x+1)%SIZE])
          {
             y = (y-1+SIZE)%SIZE;
             x = (x+1)%SIZE;
             magic[y][x] = i++;
          }
          else
          {
             y = (y + 1) % SIZE;
             magic[y][x] = i++;
          }
       }
    
       for(y = 0; y < SIZE; y++)
       {
          for(x = 0; x < SIZE; x++)
          {
             printf("%3d", magic[y][x]);
          }
          printf("\n");
       }
       
       return 0;
    }
    Yukarıdaki SIZE tanımını 3,5,7.. yapabilirsin, biraz moduler bir sey yapmaya calistim. Gozden kacirdigim ufak tefek seyler olabilir, pek dikkatli degilim su an. Ama kod calisiyor, denedim.

    Kolay gelsin.
     
  3. NAE4

    NAE4 Daimi Üye

    Kayıt:
    25 Temmuz 2002
    Mesajlar:
    926
    Beğenilen Mesajlar:
    0
    Meslek:
    N/A
    Şehir:
    N/A
    Çok teşekkürler adaş,

    Hızır gibi yetiştin.

    Sevgiyle,
     
  4. ee++

    ee++ Daimi Üye

    Kayıt:
    25 Temmuz 2002
    Mesajlar:
    1,122
    Beğenilen Mesajlar:
    0
    Şehir:
    Ankara
    Bu arada, "magic[y][x] = i++;" satırlarındaki artırma işlecinin kullanımı önemli, dikkat et. ++i şeklinde olmaz şu haliyle.
     
  5. ASA

    ASA Daimi Üye

    Kayıt:
    28 Mart 2003
    Mesajlar:
    962
    Beğenilen Mesajlar:
    0
    Meslek:
    Cobanlik, part time veterinerlik
    Şehir:
    Monitor Onu
    @elion;
    ee++ cevap verdigine gore,
    ben makinanin kilitlendigi noktaya takildim.
    Takilmanin sebebi ba$ibo$ birakilmi$ bir while dongusu olabilir mi?
    Degilse o kodu gorebilir miyim?
     
  6. NAE4

    NAE4 Daimi Üye

    Kayıt:
    25 Temmuz 2002
    Mesajlar:
    926
    Beğenilen Mesajlar:
    0
    Meslek:
    N/A
    Şehir:
    N/A
    Asa hocam hoşgeldin,

    Seni tekrar görmek güzel..

    Takılmanın nedeni; iç içe girmiş bir kaç while döngüsüydü. Ama tabii daha sonradan anladım ki kurduğum algoritma aynı sayıları kullanıyordu. Yani tam bir Brute Force.. Bu yüzden düzgün çalışmadı..

    Dolayısıyla while döngüleri düzgün işleseydi bile sonucu bulmak için en az bir saatimi harcayacaktım..

    Asıl sorun algoritmadaydı kısacası...

    (Algoritma yanlış olduğu için while döngüleri makineyi zorladı.)

    Sevgiyle,
     
  7. ASA

    ASA Daimi Üye

    Kayıt:
    28 Mart 2003
    Mesajlar:
    962
    Beğenilen Mesajlar:
    0
    Meslek:
    Cobanlik, part time veterinerlik
    Şehir:
    Monitor Onu
    Te$ekkurler elion.

    Bu arada siteye baktim, ordu falan ne i$?
    Irak onlerinde $ehit vermeyelim sizi :p

    :cool:
     
  8. NAE4

    NAE4 Daimi Üye

    Kayıt:
    25 Temmuz 2002
    Mesajlar:
    926
    Beğenilen Mesajlar:
    0
    Meslek:
    N/A
    Şehir:
    N/A
    Bir BT sitesi kuruyoruz.. Yakında açılacak inşallah.

    Irak'ta savaşırız gerekirse. (bkz. Elektronik harp :p)

    Sevgiler,