Bahasa Pemrograman &
Perangkat Pengolahan Langsung


Membuat Bujur Sangkar Ajaib menggunakan AWK

Pada tugas 4 yaitu membuat bujur sangkar ajaib dengan menggunakan AWK ini langkah awal buat dahulu file dengan nama ajaib.txt

{ ordo[55,55]; #ordo bujur sangkar
n=$1; #input matriks
X=1; #nilai awal
Y=1; #interval
Z=1; #interval pindah

{ ordo[55,55]; #ordo bujur sangkar
n=$1; #input matriks
X=1; #nilai awal
Y=1; #interval
Z=1; #interval pindah

for(a=0; a<=n+2; a++) #menghitung letak kolom dan baris
{ 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]);
}
}

Setelah rumus bujur sangkar ajaib diatas dimasukkan dalam dokument ajaib.txt maka dalam terminal bisa di tampilkan dengan menggunakan perintah :

andy@andy-desktop:~$ echo 7 | awk -f ajaib.txt

yang mana Echo 7 ini digunakan untuk membuat sebuat matiks ordo 7x7.
Contoh lain misalnya bujur sangkar ajaib ordo 5x5, maka rumus menjadi:

andy@andy-desktop:~$ echo 5 | awk -f ajaib.txt

Hasil untuk sebuah matriks ordo 7x7 seperti dibawah ini :

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

0 komentar: