Membuat Bujur Sangkar Ajaib dalam Bahasa C

Desember 11, 2011 at 8:20 pm 3 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. :)

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

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

3 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

Tinggalkan Balasan

Fill in your details below or click an icon to log in:

WordPress.com Logo

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

Twitter picture

You are commenting using your Twitter account. Log Out / Ubah )

Facebook photo

You are commenting using your Facebook account. Log Out / Ubah )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Welcome :)

DeeRiee's Blogs

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Bergabunglah dengan 133 pengikut lainnya.

Apa Kabar :)

Artikel Terbaru

Artikel Paling Top

Kontak Saya

Statistik Blog

  • 748,636 Pengunjung

Yang Online :

Identitas Anda : IP

My Popularity (by popuri.us)

Bantu Blog Ini


Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 133 pengikut lainnya.