Membuat Bujur Sangkar Ajaib dalam Bahasa C

Desember 11, 2011 at 8:20 pm 4 komentar

folder_mud Malam semua, kali ini saya mau sedikit share tentang tugas pemrograman bahasa C yang kemarin diberikan oleh dosen saya. Kemarin saat praktikum dosen saya share soal bujur sangkar ajaib. Tiba-tiba beliau memperlihatkan contoh bujur sangkar ajaib dan memberitahu cara mengisi angka pada tiap sel di bujur sangkar ajaib. Setelah paham, kami disuruh membuatnya dalam bahasa C.

Bagi yang belum tahu, bujur sangkar ajaib di sini yang dimaksud adalah bujur sangkar yang di dalamnya terdapat angka-angka yang jika dijumlahkan secara vertikal maupun horizontal hasilnya tetap sama. Contohnya seperti ini:

8 1 6
3 5 7
4 9 2
disapointed Coba hitung tiap baris dan tiap kolom hasilnya 15, begitu juga jika dijumlahkan secara diagonal. :) Khusus untuk 1 selalu diletakkan di kolom tengah baris pertama. Setelah melihat polanya saya simpulkan cara mengisinya begini:
  • Angka selanjutnya selalu ditaruh naik diagonal ke kanan.
  • Jika di atas sudah tidak ada baris lagi dan ke kanan masih ada kolom, taruh di baris paling bawah dan kolom sebelah kanan angka sebelumnya. (lihat angka 2 pada contoh)
  • Jika di kanan sudah tidak ada kolom lagi dan di atas masih ada baris, taruh di kolom paling kiri dan baris atasnya angka sebelumnya. (lihat angka 3 pada contoh)
  • Jika di kanan atas masih ada baris dan ada kolom namun sudah terisi, ditaruh pada kolom yang sama baris bawahnya kolom sebelumnya. (lihat angka 4 pada contoh)
  • Jika di kanan atas masih ada baris dan kolom dan belum terisi angka, taruh saja angka selanjutnya disana. (lihat angka 5 dan 6 pada contoh)
  • Untuk selanjutnya aturan di atas akan ada yang terulang. (lihat angka 7, 8, dan 9)

Begitulah aturan yang saya simpulkan dan saya ubah dalam bahasa C seperti ini:

main()
{
    static int a[19][19];

    int h,i,j,k,x,y,z,b=3;
    a[0][b/2]=1;
        x=0;
        y=b/2;
        for(k=2;k<=b*b;k++)
        {
            if(x-1>=0&&y+1<=b-1) // ke atas bisa, ke kanan bisa
            {
                x=x-1;
                y=y+1;
                //z=1;
                if(a[x][y]!=0) // bisa tapi udah ke isi
                {
                    x=x+2;
                    y=y-1;
                    //z=2;
                }
            }
            else if(x-1<0&&y+1<=b-1) // ke atas gabisa, ke kanan bisa
            {
                x=x+(b-1);
                y=y+1;
                //z=3;
            }
            else if(x-1>=0&&y+1>b-1) // ke atas bisa, ke kanan gabisa
            {
                x=x-1;
                y=y-(b-1);
                //z=4;
            }
            else if(x-1<0&&y+1>b-1) // ke atas gabisa, ke kanan gabisa
            {
                x=x+1;
                y=y;
                //z=5;
            }
            a[x][y]=k;
            //printf("%d %d %d\n",x,y,z); //debug, liat algoritmanya disini
        }

        //cetak
        for(i=0;i<=b-1;i++)
        {    for(j=0;j<=b-1;j++)
            {
                printf("%4d",a[i][j]);
            }
        printf("\n");
        }
        getch();
}

 

faill Array saya batasi sampai 19 karena dosen saya bilang bahwa untuk bujur sangkar ajaib ganjil maksimal sampai 19 baris dan kolom, saya sendiri tidak mengerti kenapa batasnya hanya sampai 19 saja. :p

Oh iya, berikut tampilan script di atas jika di run:

image

Demikian sedikit dari saya, semoga artikel ini bermanfaat bagi teman-teman. :)

About these ads

Entry filed under: Tak Berkategori. Tags: , , , , , , .

Maksimalkan Performa Game PC-mu dengan Game Booster Cara Mudah Download File Torrent via Web

4 Komentar Add your own

  • 1. andikacahya  |  Januari 14, 2012 pukul 9:03 pm

    terlalu rumit algoritmanya,mas punya saya arraynya bisa sampai 100

    Balas
    • 2. deeriee  |  Januari 15, 2012 pukul 3:50 pm

      kan menghemat memori dik ;)

      Balas
  • 3. Iqbal Mohamad  |  Januari 22, 2012 pukul 11:16 pm

    weeehh
    keren bang..

    Balas
  • 4. Mahmud  |  Desember 29, 2013 pukul 3:15 pm

    Ini tuh pakai strategi algoritma apa?

    Balas

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Welcome :)

DeeRiee's Blogs

Follow DeeRiee's Blog on WordPress.com

Bergabunglah dengan 435 pengikut lainnya.

Apa Kabar :)

Artikel Terbaru

Kategori

Artikel Paling Top

Kontak Saya

Statistik Blog

  • 1,027,327 Pengunjung

Yang Online :

Identitas Anda : IP


Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 435 pengikut lainnya.

%d bloggers like this: