Rabu, 24 Juni 2009

Make a Magic Square

*) Pada pertemuan kali ini kita akan mengerjakan bujur sangkar ajaib

program untuk membuat bujur sangkar ajaib adalah seperti dibawah ini. input bisa berupa file ataupun diinputkan dari pipelie echo. pada tugas kali ini saya menggunakan input dari file input _magic.txt yang berisi:
3 1 1 1
dimana kolom satu adalah input untuk memberi nilai pada umlah ordo yang akan ditentukan, misal untuk ordo 3x3 kita isikan 3, untuk 5x5 kita isikan 5 dst. kolom kedua digukanan untuk memberi nilai awal pada bujur sangkar ajaib, misal kita beri nilai satu maka nilai akan naik sari 1, 2, 3 dst. kolom kedua digunakan untuk memberi nilai kenaikan pada setiam 1 kali perpindahan. sedangkan kolom ketiga digunakan untuk memberi kenaikan nilai interval.

{
matrik[15,15]; #array untuk ordo maximal bujur sangkar
n=$1; #jumlah ordo yang dicari berada pada kolom 1
X=$2; #input nilai awal berada pada kolom 2
Y=$3; #nilai kenaikan, pada kol0m 3
Z=$4; #kenaikan setiap pindah interval, pada kolom 4

for(i=0; i<=n+2; i++)
{
for(b=0; b<=n+2; b++)
matrik[i,b] = 0;
}
i=1; b=(n+1) / 2;
X-=Y;
for(N=1; N<=n*n;)
{ if(matrik[i,b]==0)
{
X+=Y;
matrik[i,b] = X;
if(i==n)
matrik[0,b] = X;
if(b==1)
matrik[i,n+1] = X;
if(i==n && b==1 )
matrik[0,n+1] = X;
i--; b++; N++;
if(i==0&&b==n+1)
continue;
else
{
if (i==0) i=n;
if(b==n+1) b=1;
}
}
else
{
i+=2;
b-=1;
X=X-Y+Z;
}
}
for(i=1; i<=n; i++)
T1+=matrik[i,n+1-i];

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

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

}
}

lalu kita jalankan dengan program pada console sebagai berikut:
jenggo@jenggo-desktop:~$ awk -f magic.txt input_magic.txt

hasil dari program diatas adalah
15

8 1 6 15

3 5 7 15

4 9 2 15

15 15 15 15

Tidak ada komentar:

Posting Komentar