Jumat, 19 Juni 2009

Membuat Bujur Sangkar Ajaib dengan menggunakan AWK

Tugas 4

Kita bisa memulai membuat file programnya sebagai berikut:

#! /bin/awk -f

# bujur-ajaib.awk

{ n=$1;
 X=1;
 Y=1;
 Z=1;

 for(a=0; a<=n+2; a++)
 { for(b=0; b<=n+2; b++)
  ordo[a,b] = 0;
 }

 a=1; b=(n+1) / 2;
 X-=Y;
 for(N=1; N<=n*n;)

 { if(ordo[a,b]==0)
  { X+=Y;
  ordo[a,b] = X;
  if(a==n) ordo[0,b] = X;
  if(b==1) ordo[a,n+1] = X;
  if(a==n && b==1 ) ordo[0,n+1] = X;
  a--; b++; N++;
  if(a==0&&b==n+1) continue;}
  else
  { if (a==0) a=n;
  if(b==n+1) b=1;
  }
  }
  
  else
  
  { a+=2;
  b-=1;
  X=X-Y+Z;
  }
 }

 for(a=1; a<=n; a++)
 T1+=ordo[a,n+1-a];

 for(a=1; a<=n*5; a++)
 printf(" ");
 printf("%5d\n\n",T1);

 for(a=1;a<=n+1;a++)
 { for(b=1; b<=n; b++)
  { printf("%5d", ordo[a,b]);
  ordo[a,n+2] += ordo[a,b];
  ordo[n+1,b] += ordo[a,b];
  }
  T2 += ordo[a,b];
  if(a==n+1) ordo[a,n+2] = T2;
  printf("%5d\n\n",ordo[a,n+2]);
 }
}

Kemudian kita simpan program tersebut dengan nama misalnya bujur-ajaib.awk

Nah, setelah itu mari kita coba jalankan! Buka terminal, kemudian jalankan filenya!

$ awk -f bujur-ajaib.awk

maka akan muncul kursor berkedip pada terminal, masukkan saja nilai sembarang.. maka awk akan mengeksekusinya dan kemudian menampilkan pada layar. Misalnya kita ketik angka 1, maka akan muncul:

# awk -f bujur.awk

Kita bisa mengetikkan lagi angka berapapun, dengan syarat bukan angka bernilai negatif atau angka bernilai genap. Kemudian untuk keluar dengan menekan tombol Ctrl-D

Namun cara ini terdapat sedikit keganjilan pada jumlah nilai diagonalnya, karena akan ditambahkan dengan diagonal nilai sebelumnya.

$ awk -f bujur-ajaib.awk
1
     1

  1 1

  1 1

3
          16 

  8 1 6 15

  3 5 7 15

  4 9 2 15

  15 15 15 16

5
                     81

  17 24 1 8 15 65

  23 5 7 14 16 65

  4 6 13 20 22 65

  10 12 19 21 3 65

  11 18 25 2 9 65

  65 65 65 65 65 81

7
                               256

  30 39 48 1 10 19 28 175

  38 47 7 9 18 27 29 175

  46 6 8 17 26 35 37 175

  5 14 16 25 34 36 45 175

  13 15 24 33 42 44 4 175

  21 23 32 41 43 3 12 175

  22 31 40 49 2 11 20 175

  175 175 175 175 175 175 175 256 

Ctrl-D

Dengan cara lain, kita gunakan perintah echo. Perintah echo adalah perintah untuk menampilkan banyaknya baris pada teks. Akan tetapi disini akan dihitung sebagai ordo matriks yang akan kita buat.

$ echo 9 | awk -f bujur-ajaib.awk
                                       369

  47 58 69 80 1 12 23 34 45 369

  57 68 79 9 11 22 33 44 46 369

  67 78 8 10 21 32 43 54 56 369

  77 7 18 20 31 42 53 55 66 369

  6 17 19 30 41 52 63 65 76 369

  16 27 29 40 51 62 64 75 5 369

  26 28 39 50 61 72 74 4 15 369

  36 38 49 60 71 73 3 14 25 369

  37 48 59 70 81 2 13 24 35 369

  369 369 369 369 369 369 369 369 369 369


Selesai...

Tidak ada komentar:

Posting Komentar